|
|
@@ -85,6 +85,22 @@ def run(manifest, out_root, creds=None, log=print):
|
|
|
return fixed
|
|
|
raise RuntimeError("百度智能抠图返回结果仍没有真实 Alpha 透明通道")
|
|
|
|
|
|
+ def boss_config():
|
|
|
+ boss = manifest.get("slot_config", {}).get("boss", {})
|
|
|
+ return boss if boss.get("enabled", False) else {}
|
|
|
+
|
|
|
+ def required_boss_id():
|
|
|
+ boss = boss_config()
|
|
|
+ if not boss:
|
|
|
+ return ""
|
|
|
+ return boss.get("id") or "boss_demon_lord"
|
|
|
+
|
|
|
+ def is_required_boss(c):
|
|
|
+ boss_id = required_boss_id()
|
|
|
+ return bool(boss_id and (c.get("role") == "boss" or c.get("id") == boss_id))
|
|
|
+
|
|
|
+ required_failures = []
|
|
|
+
|
|
|
# ---- A. 角色(Spine)----
|
|
|
for i, c in enumerate(manifest.get("characters", [])):
|
|
|
cid = c.get("id", f"char_{i}")
|
|
|
@@ -135,8 +151,17 @@ def run(manifest, out_root, creds=None, log=print):
|
|
|
progress(f"{cid}")
|
|
|
except Exception as e:
|
|
|
log(f"❌ [{cid}] 失败: {e}")
|
|
|
+ if is_required_boss(c):
|
|
|
+ required_failures.append(f"{cid}: {e}")
|
|
|
progress(f"{cid}")
|
|
|
|
|
|
+ boss_id = required_boss_id()
|
|
|
+ if boss_id and not any(c.get("id") == boss_id for c in library["characters"]):
|
|
|
+ detail = ";".join(required_failures) if required_failures else "生成结果中没有关主资源"
|
|
|
+ raise RuntimeError(
|
|
|
+ f"关主大魔王资源缺失:{boss_id}。已开启关主玩法,必须生成 boss 拆件和动作后才能继续。原因:{detail}"
|
|
|
+ )
|
|
|
+
|
|
|
# ---- A2. UI 美术(背景 / Logo / 卷轴框 / 按钮 等整图)----
|
|
|
ui_art_out = os.path.join(base_out, "ui_art")
|
|
|
for a in manifest.get("ui_art", []):
|