Scholomance: Real-ESRGAN-upscaled Atlas classic map + hand-pinned bosses
Real path forward for Scholomance after exhausting the upreza ecosystem (no classic-layout dungeon interior maps exist there because vanilla/TBC clients didn't ship dungeon interior maps — confirmed from WoWMapUprezClassic README + WoWMapUprezTBC contents). Solution: - Atlas-addon Scholomance.blp (512x512, classic single-room layout) upscaled to 2048x2048 with Real-ESRGAN x4plus. Numbers 1-14 are crisp and readable. - New 'bosses' field in dungeon_replacements lets us hand-pin every enemy to a specific (x,y) on the new map. 14 classic Scholo bosses placed on their Atlas-numbered rooms. - Single-floor dungeon (kg's 4-floor split is bypassed entirely).
This commit is contained in:
+51
-35
@@ -243,47 +243,63 @@ def main() -> int:
|
||||
atlasloot_data = None
|
||||
|
||||
def replacement_entry(tile_key, repl, registry_entry):
|
||||
"""Build a complete dungeon record from a manual-override map +
|
||||
AtlasLoot bosses. Bypasses kg entirely for this dungeon."""
|
||||
al_id = repl["atlasloot_id"]
|
||||
al = (atlasloot_data or {}).get("OriginalWoW", {}).get(al_id, {})
|
||||
"""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)."""
|
||||
W, H = repl["width"], repl["height"]
|
||||
|
||||
enemies = []
|
||||
seen = set()
|
||||
for k, v in al.items():
|
||||
if not k.isdigit() or not isinstance(v, list):
|
||||
continue
|
||||
for ent in v:
|
||||
if not isinstance(ent, dict):
|
||||
continue
|
||||
if ent.get("SubZone"):
|
||||
continue
|
||||
cords = ent.get("cords")
|
||||
name = ent.get("1")
|
||||
if not (isinstance(cords, list) and len(cords) == 2 and name):
|
||||
continue
|
||||
key = (name, cords[0], cords[1])
|
||||
if key in seen:
|
||||
continue
|
||||
seen.add(key)
|
||||
pin = ent.get("pinType")
|
||||
lname = name.lower()
|
||||
if pin == "dungeonskull":
|
||||
cls = 3
|
||||
elif pin is None and "rare" in lname:
|
||||
cls = 5
|
||||
else:
|
||||
cls = 2 # quest item, summon spot, lever, etc.
|
||||
|
||||
if "bosses" in repl:
|
||||
for b in repl["bosses"]:
|
||||
enemies.append({
|
||||
"id": None,
|
||||
"npc_id": None,
|
||||
"name": name,
|
||||
"pos": [round(cords[0] / 100 * W, 1), round(cords[1] / 100 * H, 1)],
|
||||
"classification": cls,
|
||||
"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,
|
||||
})
|
||||
elif "atlasloot_id" in repl:
|
||||
al_id = repl["atlasloot_id"]
|
||||
al = (atlasloot_data or {}).get("OriginalWoW", {}).get(al_id, {})
|
||||
seen = set()
|
||||
for k, v in al.items():
|
||||
if not k.isdigit() or not isinstance(v, list):
|
||||
continue
|
||||
for ent in v:
|
||||
if not isinstance(ent, dict):
|
||||
continue
|
||||
if ent.get("SubZone"):
|
||||
continue
|
||||
cords = ent.get("cords")
|
||||
name = ent.get("1")
|
||||
if not (isinstance(cords, list) and len(cords) == 2 and name):
|
||||
continue
|
||||
key = (name, cords[0], cords[1])
|
||||
if key in seen:
|
||||
continue
|
||||
seen.add(key)
|
||||
pin = ent.get("pinType")
|
||||
lname = name.lower()
|
||||
if pin == "dungeonskull":
|
||||
cls = 3
|
||||
elif pin is None and "rare" in lname:
|
||||
cls = 5
|
||||
else:
|
||||
cls = 2
|
||||
enemies.append({
|
||||
"id": None, "npc_id": None,
|
||||
"name": name,
|
||||
"pos": [round(cords[0] / 100 * W, 1), round(cords[1] / 100 * H, 1)],
|
||||
"classification": cls,
|
||||
"skippable": False, "required": False,
|
||||
"kill_priority": None, "pack_id": None, "patrol_id": None,
|
||||
})
|
||||
map_obj = {
|
||||
"image": repl["image"],
|
||||
"width": W, "height": H,
|
||||
|
||||
Reference in New Issue
Block a user