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:
@@ -4,27 +4,55 @@
|
||||
"_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": {
|
||||
"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.",
|
||||
"note": "Multi-floor upreza maps (4096x3072) for the Cata-tier'd visual layout; classic boss assignments hand-pinned to specific rooms within each floor. Same look-and-feel as the rest of the dungeons in the picker.",
|
||||
"floors": [
|
||||
{
|
||||
"kg_floor_id": 223,
|
||||
"image": "maps/scholomance_floor1.webp",
|
||||
"width": 4096, "height": 3072,
|
||||
"label": "The Reliquary",
|
||||
"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}
|
||||
{"name": "Blood Steward of Kirtonos", "pos": [2400, 1600], "cls": 3}
|
||||
]
|
||||
},
|
||||
{
|
||||
"kg_floor_id": 224,
|
||||
"image": "maps/scholomance_floor2.webp",
|
||||
"width": 4096, "height": 3072,
|
||||
"label": "Chamber of Summoning",
|
||||
"bosses": [
|
||||
{"name": "Kirtonos the Herald (Summon)", "pos": [1850, 600], "cls": 3},
|
||||
{"name": "Vectus", "pos": [2400, 400], "cls": 3},
|
||||
{"name": "Marduk Blackpool", "pos": [1300, 1100], "cls": 3}
|
||||
]
|
||||
},
|
||||
{
|
||||
"kg_floor_id": 225,
|
||||
"image": "maps/scholomance_floor3.webp",
|
||||
"width": 4096, "height": 3072,
|
||||
"label": "The Upper Study",
|
||||
"bosses": [
|
||||
{"name": "Jandice Barov", "pos": [1850, 700], "cls": 3},
|
||||
{"name": "Rattlegore", "pos": [700, 800], "cls": 3},
|
||||
{"name": "Lorekeeper Polkelt", "pos": [3200, 800], "cls": 3},
|
||||
{"name": "Doctor Theolen Krastinov", "pos": [1850, 1700], "cls": 3},
|
||||
{"name": "Instructor Malicia", "pos": [1850, 2250], "cls": 3}
|
||||
]
|
||||
},
|
||||
{
|
||||
"kg_floor_id": 226,
|
||||
"image": "maps/scholomance_floor4.webp",
|
||||
"width": 4096, "height": 3072,
|
||||
"label": "Headmaster's Study",
|
||||
"bosses": [
|
||||
{"name": "Lady Illucia Barov", "pos": [800, 850], "cls": 3},
|
||||
{"name": "Lord Alexei Barov", "pos": [2950, 850], "cls": 3},
|
||||
{"name": "The Ravenian", "pos": [1850, 1600], "cls": 3},
|
||||
{"name": "Ras Frostwhisper", "pos": [1850, 2100], "cls": 3},
|
||||
{"name": "Darkmaster Gandling","pos": [1850, 850], "cls": 4}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
+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 = []
|
||||
|
||||
|
||||
+141
-105
@@ -123454,19 +123454,19 @@
|
||||
"mapping_id": 219,
|
||||
"maps": [
|
||||
{
|
||||
"image": "maps/scholomance.webp",
|
||||
"width": 2048,
|
||||
"height": 2048,
|
||||
"label": "Scholomance",
|
||||
"kg_floor_id": null,
|
||||
"image": "maps/scholomance_floor1.webp",
|
||||
"width": 4096,
|
||||
"height": 3072,
|
||||
"label": "The Reliquary",
|
||||
"kg_floor_id": 223,
|
||||
"enemies": [
|
||||
{
|
||||
"id": null,
|
||||
"npc_id": null,
|
||||
"name": "Blood Steward of Kirtonos",
|
||||
"pos": [
|
||||
1046,
|
||||
637
|
||||
2400,
|
||||
1600
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
@@ -123475,14 +123475,26 @@
|
||||
"pack_id": null,
|
||||
"patrol_id": null,
|
||||
"ascension_pinned": true
|
||||
}
|
||||
],
|
||||
"packs": [],
|
||||
"patrols": [],
|
||||
"icons": []
|
||||
},
|
||||
{
|
||||
"image": "maps/scholomance_floor2.webp",
|
||||
"width": 4096,
|
||||
"height": 3072,
|
||||
"label": "Chamber of Summoning",
|
||||
"kg_floor_id": 224,
|
||||
"enemies": [
|
||||
{
|
||||
"id": null,
|
||||
"npc_id": null,
|
||||
"name": "Kirtonos the Herald",
|
||||
"name": "Kirtonos the Herald (Summon)",
|
||||
"pos": [
|
||||
555,
|
||||
264
|
||||
1850,
|
||||
600
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
@@ -123497,8 +123509,8 @@
|
||||
"npc_id": null,
|
||||
"name": "Vectus",
|
||||
"pos": [
|
||||
327,
|
||||
746
|
||||
2400,
|
||||
400
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
@@ -123513,8 +123525,36 @@
|
||||
"npc_id": null,
|
||||
"name": "Marduk Blackpool",
|
||||
"pos": [
|
||||
391,
|
||||
928
|
||||
1300,
|
||||
1100
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
"required": false,
|
||||
"kill_priority": null,
|
||||
"pack_id": null,
|
||||
"patrol_id": null,
|
||||
"ascension_pinned": true
|
||||
}
|
||||
],
|
||||
"packs": [],
|
||||
"patrols": [],
|
||||
"icons": []
|
||||
},
|
||||
{
|
||||
"image": "maps/scholomance_floor3.webp",
|
||||
"width": 4096,
|
||||
"height": 3072,
|
||||
"label": "The Upper Study",
|
||||
"kg_floor_id": 225,
|
||||
"enemies": [
|
||||
{
|
||||
"id": null,
|
||||
"npc_id": null,
|
||||
"name": "Jandice Barov",
|
||||
"pos": [
|
||||
1850,
|
||||
700
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
@@ -123529,8 +123569,8 @@
|
||||
"npc_id": null,
|
||||
"name": "Rattlegore",
|
||||
"pos": [
|
||||
564,
|
||||
974
|
||||
700,
|
||||
800
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
@@ -123545,8 +123585,8 @@
|
||||
"npc_id": null,
|
||||
"name": "Lorekeeper Polkelt",
|
||||
"pos": [
|
||||
928,
|
||||
1174
|
||||
3200,
|
||||
800
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
@@ -123561,88 +123601,8 @@
|
||||
"npc_id": null,
|
||||
"name": "Doctor Theolen Krastinov",
|
||||
"pos": [
|
||||
1328,
|
||||
1456
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
"required": false,
|
||||
"kill_priority": null,
|
||||
"pack_id": null,
|
||||
"patrol_id": null,
|
||||
"ascension_pinned": true
|
||||
},
|
||||
{
|
||||
"id": null,
|
||||
"npc_id": null,
|
||||
"name": "Ras Frostwhisper",
|
||||
"pos": [
|
||||
937,
|
||||
1729
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
"required": false,
|
||||
"kill_priority": null,
|
||||
"pack_id": null,
|
||||
"patrol_id": null,
|
||||
"ascension_pinned": true
|
||||
},
|
||||
{
|
||||
"id": null,
|
||||
"npc_id": null,
|
||||
"name": "Lord Alexei Barov",
|
||||
"pos": [
|
||||
1483,
|
||||
1702
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
"required": false,
|
||||
"kill_priority": null,
|
||||
"pack_id": null,
|
||||
"patrol_id": null,
|
||||
"ascension_pinned": true
|
||||
},
|
||||
{
|
||||
"id": null,
|
||||
"npc_id": null,
|
||||
"name": "Lady Illucia Barov",
|
||||
"pos": [
|
||||
1856,
|
||||
1456
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
"required": false,
|
||||
"kill_priority": null,
|
||||
"pack_id": null,
|
||||
"patrol_id": null,
|
||||
"ascension_pinned": true
|
||||
},
|
||||
{
|
||||
"id": null,
|
||||
"npc_id": null,
|
||||
"name": "The Ravenian",
|
||||
"pos": [
|
||||
1502,
|
||||
1092
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
"required": false,
|
||||
"kill_priority": null,
|
||||
"pack_id": null,
|
||||
"patrol_id": null,
|
||||
"ascension_pinned": true
|
||||
},
|
||||
{
|
||||
"id": null,
|
||||
"npc_id": null,
|
||||
"name": "Jandice Barov",
|
||||
"pos": [
|
||||
1665,
|
||||
355
|
||||
1850,
|
||||
1700
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
@@ -123657,8 +123617,84 @@
|
||||
"npc_id": null,
|
||||
"name": "Instructor Malicia",
|
||||
"pos": [
|
||||
391,
|
||||
1401
|
||||
1850,
|
||||
2250
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
"required": false,
|
||||
"kill_priority": null,
|
||||
"pack_id": null,
|
||||
"patrol_id": null,
|
||||
"ascension_pinned": true
|
||||
}
|
||||
],
|
||||
"packs": [],
|
||||
"patrols": [],
|
||||
"icons": []
|
||||
},
|
||||
{
|
||||
"image": "maps/scholomance_floor4.webp",
|
||||
"width": 4096,
|
||||
"height": 3072,
|
||||
"label": "Headmaster's Study",
|
||||
"kg_floor_id": 226,
|
||||
"enemies": [
|
||||
{
|
||||
"id": null,
|
||||
"npc_id": null,
|
||||
"name": "Lady Illucia Barov",
|
||||
"pos": [
|
||||
800,
|
||||
850
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
"required": false,
|
||||
"kill_priority": null,
|
||||
"pack_id": null,
|
||||
"patrol_id": null,
|
||||
"ascension_pinned": true
|
||||
},
|
||||
{
|
||||
"id": null,
|
||||
"npc_id": null,
|
||||
"name": "Lord Alexei Barov",
|
||||
"pos": [
|
||||
2950,
|
||||
850
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
"required": false,
|
||||
"kill_priority": null,
|
||||
"pack_id": null,
|
||||
"patrol_id": null,
|
||||
"ascension_pinned": true
|
||||
},
|
||||
{
|
||||
"id": null,
|
||||
"npc_id": null,
|
||||
"name": "The Ravenian",
|
||||
"pos": [
|
||||
1850,
|
||||
1600
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
"required": false,
|
||||
"kill_priority": null,
|
||||
"pack_id": null,
|
||||
"patrol_id": null,
|
||||
"ascension_pinned": true
|
||||
},
|
||||
{
|
||||
"id": null,
|
||||
"npc_id": null,
|
||||
"name": "Ras Frostwhisper",
|
||||
"pos": [
|
||||
1850,
|
||||
2100
|
||||
],
|
||||
"classification": 3,
|
||||
"skippable": false,
|
||||
@@ -123673,8 +123709,8 @@
|
||||
"npc_id": null,
|
||||
"name": "Darkmaster Gandling",
|
||||
"pos": [
|
||||
1529,
|
||||
1456
|
||||
1850,
|
||||
850
|
||||
],
|
||||
"classification": 4,
|
||||
"skippable": false,
|
||||
@@ -123691,7 +123727,7 @@
|
||||
}
|
||||
],
|
||||
"ascension_replaced": true,
|
||||
"replacement_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."
|
||||
"replacement_note": "Multi-floor upreza maps (4096x3072) for the Cata-tier'd visual layout; classic boss assignments hand-pinned to specific rooms within each floor. Same look-and-feel as the rest of the dungeons in the picker."
|
||||
},
|
||||
{
|
||||
"id": "shadowfang_keep",
|
||||
|
||||
Reference in New Issue
Block a user