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:
2026-04-26 00:43:20 +02:00
parent ad511d54e1
commit 58b3f74292
3 changed files with 205 additions and 8383 deletions
+26 -1
View File
@@ -2,7 +2,32 @@
"_comment": "Ascension-specific corrections to the upstream kg / AtlasLoot data. Each entry overrides where an enemy/extra is rendered. Match by tile_key + name (case-insensitive substring). pos is in kg pixel space (z=4 stitched image, 6144x4096). kg_floor_id picks the floor (omit if the dungeon is single-floor).",
"_dungeon_replacements_comment": "When the kg map is the wrong layout for Ascension (e.g. retail/Cata layout vs classic), replace the entire dungeon's map with one we author manually. Coords are in the new map's pixel space (0..width, 0..height). Bosses come from AtlasLoot's per-dungeon entries with cords.",
"dungeon_replacements": {},
"dungeon_replacements": {
"scholomance": {
"image": "maps/scholomance.webp",
"width": 2048,
"height": 2048,
"label": "Scholomance",
"note": "kg + upreza both ship the post-Cata 4-floor redesign; Ascension uses the original classic single-room layout. Map is the Atlas-addon Scholomance.blp (512x512) upscaled to 2048x2048 with Real-ESRGAN x4plus. Boss positions are hand-pinned to the numbered rooms drawn on the Atlas map.",
"_room_position_comment": "Room centers read off the upscaled Atlas map (2048x2048). Numbers refer to the Atlas-addon room numbers visible on the map texture. If a boss is rendered in the wrong room, edit the pos here.",
"bosses": [
{"name": "Blood Steward of Kirtonos", "pos": [1046, 637], "cls": 3, "room": 1},
{"name": "Kirtonos the Herald", "pos": [555, 264], "cls": 3, "room": 2},
{"name": "Vectus", "pos": [327, 746], "cls": 3, "room": 4},
{"name": "Marduk Blackpool", "pos": [391, 928], "cls": 3, "room": 5},
{"name": "Rattlegore", "pos": [564, 974], "cls": 3, "room": 6},
{"name": "Lorekeeper Polkelt", "pos": [928, 1174], "cls": 3, "room": 10},
{"name": "Doctor Theolen Krastinov", "pos": [1328, 1456], "cls": 3, "room": 9},
{"name": "Ras Frostwhisper", "pos": [937, 1729], "cls": 3, "room": 8},
{"name": "Lord Alexei Barov", "pos": [1483, 1702], "cls": 3, "room": 11},
{"name": "Lady Illucia Barov", "pos": [1856, 1456], "cls": 3, "room": 12},
{"name": "The Ravenian", "pos": [1502, 1092], "cls": 3, "room": 13},
{"name": "Jandice Barov", "pos": [1665, 355], "cls": 3, "room": 3},
{"name": "Instructor Malicia", "pos": [391, 1401], "cls": 3, "room": 7},
{"name": "Darkmaster Gandling", "pos": [1529, 1456], "cls": 4, "room": 14}
]
}
},
"_map_image_swaps_comment": "Swap the rendered image for one or more floors WITHOUT changing the kg enemy/pack/patrol data. Coords stay in kg's pixel space; the swapped image is force-stretched to those dims by the browser. Use this when a different render of the SAME WoW texture is sharper but has a different aspect ratio.",
"map_image_swaps": {},
+24 -8
View File
@@ -243,13 +243,30 @@ 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."""
"""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 = []
if "bosses" in repl:
for b in repl["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,
})
elif "atlasloot_id" in repl:
al_id = repl["atlasloot_id"]
al = (atlasloot_data or {}).get("OriginalWoW", {}).get(al_id, {})
W, H = repl["width"], repl["height"]
enemies = []
seen = set()
for k, v in al.items():
if not k.isdigit() or not isinstance(v, list):
@@ -274,10 +291,9 @@ def main() -> int:
elif pin is None and "rare" in lname:
cls = 5
else:
cls = 2 # quest item, summon spot, lever, etc.
cls = 2
enemies.append({
"id": None,
"npc_id": None,
"id": None, "npc_id": None,
"name": name,
"pos": [round(cords[0] / 100 * W, 1), round(cords[1] / 100 * H, 1)],
"classification": cls,
+128 -8347
View File
File diff suppressed because it is too large Load Diff