Scholomance: switch to upreza 4-floor 4096x3072 maps for parity with the rest of the picker
Same multi-floor look as every other dungeon: 4 webps with floor tabs (The Reliquary / Chamber of Summoning / The Upper Study / Headmaster's Study). Each of the 14 classic Scholo bosses hand-pinned to a specific room within its floor: f1 (Reliquary): Blood Steward of Kirtonos f2 (CoS): Kirtonos summon, Vectus, Marduk Blackpool f3 (Upper Study): Jandice, Rattlegore, Polkelt, Krastinov, Malicia f4 (Headmaster's): Illucia, Alexei, Ravenian, Ras, Gandling Schema change: dungeon_replacements now supports a 'floors' array for multi-floor manual overrides, alongside the existing single-floor 'bosses'/'atlasloot_id' modes.
This commit is contained in:
+46
-6
@@ -244,12 +244,52 @@ def main() -> int:
|
||||
|
||||
def replacement_entry(tile_key, repl, registry_entry):
|
||||
"""Build a complete dungeon record from a manual-override map.
|
||||
Two boss-source modes:
|
||||
1. `bosses` list: explicit hand-pinned positions in the new
|
||||
image's pixel space. Authoritative.
|
||||
2. `atlasloot_id`: pull from AtlasLoot subkeys with cords. Coords
|
||||
are 0-100 percent, scaled to the new image. Approximate (AL
|
||||
coords are subzone-relative, not whole-map)."""
|
||||
Three shapes are supported:
|
||||
1. `floors`: list of per-floor maps each with their own bosses.
|
||||
For multi-floor dungeons we want to ship at parity with the
|
||||
rest of the picker (4 webps with floor-tabs).
|
||||
2. `bosses` list at top level: single-floor + explicit pins.
|
||||
3. `atlasloot_id`: single-floor + pull from AtlasLoot. Cords
|
||||
are 0-100 percent of the AL subzone frame — only roughly
|
||||
correct on full-map images."""
|
||||
|
||||
# --- multi-floor case ---
|
||||
if "floors" in repl:
|
||||
maps_out = []
|
||||
for f in repl["floors"]:
|
||||
fW, fH = f["width"], f["height"]
|
||||
enemies = []
|
||||
for b in f.get("bosses", []):
|
||||
enemies.append({
|
||||
"id": None, "npc_id": None,
|
||||
"name": b["name"],
|
||||
"pos": [round(b["pos"][0], 1), round(b["pos"][1], 1)],
|
||||
"classification": b.get("cls", 3),
|
||||
"skippable": False, "required": False,
|
||||
"kill_priority": None, "pack_id": None, "patrol_id": None,
|
||||
"ascension_pinned": True,
|
||||
})
|
||||
maps_out.append({
|
||||
"image": f["image"],
|
||||
"width": fW, "height": fH,
|
||||
"label": f.get("label", tile_key),
|
||||
"kg_floor_id": f.get("kg_floor_id"),
|
||||
"enemies": enemies,
|
||||
"packs": [], "patrols": [], "icons": [],
|
||||
})
|
||||
return {
|
||||
"id": tile_key,
|
||||
"expansion": "OriginalWoW",
|
||||
"name": registry_entry.get("name", tile_key),
|
||||
"acronym": registry_entry.get("acronym"),
|
||||
"tile_key": tile_key,
|
||||
"data_slug": registry_entry.get("data_slug"),
|
||||
"mapping_id": registry_entry.get("mapping_id"),
|
||||
"maps": maps_out,
|
||||
"ascension_replaced": True,
|
||||
"replacement_note": repl.get("note"),
|
||||
}
|
||||
|
||||
W, H = repl["width"], repl["height"]
|
||||
enemies = []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user