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_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": {
|
"scholomance": {
|
||||||
"image": "maps/scholomance.webp",
|
|
||||||
"width": 2048,
|
|
||||||
"height": 2048,
|
|
||||||
"label": "Scholomance",
|
"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.",
|
"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.",
|
||||||
"_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.",
|
"floors": [
|
||||||
|
{
|
||||||
|
"kg_floor_id": 223,
|
||||||
|
"image": "maps/scholomance_floor1.webp",
|
||||||
|
"width": 4096, "height": 3072,
|
||||||
|
"label": "The Reliquary",
|
||||||
"bosses": [
|
"bosses": [
|
||||||
{"name": "Blood Steward of Kirtonos", "pos": [1046, 637], "cls": 3, "room": 1},
|
{"name": "Blood Steward of Kirtonos", "pos": [2400, 1600], "cls": 3}
|
||||||
{"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},
|
"kg_floor_id": 224,
|
||||||
{"name": "Lorekeeper Polkelt", "pos": [928, 1174], "cls": 3, "room": 10},
|
"image": "maps/scholomance_floor2.webp",
|
||||||
{"name": "Doctor Theolen Krastinov", "pos": [1328, 1456], "cls": 3, "room": 9},
|
"width": 4096, "height": 3072,
|
||||||
{"name": "Ras Frostwhisper", "pos": [937, 1729], "cls": 3, "room": 8},
|
"label": "Chamber of Summoning",
|
||||||
{"name": "Lord Alexei Barov", "pos": [1483, 1702], "cls": 3, "room": 11},
|
"bosses": [
|
||||||
{"name": "Lady Illucia Barov", "pos": [1856, 1456], "cls": 3, "room": 12},
|
{"name": "Kirtonos the Herald (Summon)", "pos": [1850, 600], "cls": 3},
|
||||||
{"name": "The Ravenian", "pos": [1502, 1092], "cls": 3, "room": 13},
|
{"name": "Vectus", "pos": [2400, 400], "cls": 3},
|
||||||
{"name": "Jandice Barov", "pos": [1665, 355], "cls": 3, "room": 3},
|
{"name": "Marduk Blackpool", "pos": [1300, 1100], "cls": 3}
|
||||||
{"name": "Instructor Malicia", "pos": [391, 1401], "cls": 3, "room": 7},
|
]
|
||||||
{"name": "Darkmaster Gandling", "pos": [1529, 1456], "cls": 4, "room": 14}
|
},
|
||||||
|
{
|
||||||
|
"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):
|
def replacement_entry(tile_key, repl, registry_entry):
|
||||||
"""Build a complete dungeon record from a manual-override map.
|
"""Build a complete dungeon record from a manual-override map.
|
||||||
Two boss-source modes:
|
Three shapes are supported:
|
||||||
1. `bosses` list: explicit hand-pinned positions in the new
|
1. `floors`: list of per-floor maps each with their own bosses.
|
||||||
image's pixel space. Authoritative.
|
For multi-floor dungeons we want to ship at parity with the
|
||||||
2. `atlasloot_id`: pull from AtlasLoot subkeys with cords. Coords
|
rest of the picker (4 webps with floor-tabs).
|
||||||
are 0-100 percent, scaled to the new image. Approximate (AL
|
2. `bosses` list at top level: single-floor + explicit pins.
|
||||||
coords are subzone-relative, not whole-map)."""
|
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"]
|
W, H = repl["width"], repl["height"]
|
||||||
enemies = []
|
enemies = []
|
||||||
|
|
||||||
|
|||||||
+141
-105
@@ -123454,19 +123454,19 @@
|
|||||||
"mapping_id": 219,
|
"mapping_id": 219,
|
||||||
"maps": [
|
"maps": [
|
||||||
{
|
{
|
||||||
"image": "maps/scholomance.webp",
|
"image": "maps/scholomance_floor1.webp",
|
||||||
"width": 2048,
|
"width": 4096,
|
||||||
"height": 2048,
|
"height": 3072,
|
||||||
"label": "Scholomance",
|
"label": "The Reliquary",
|
||||||
"kg_floor_id": null,
|
"kg_floor_id": 223,
|
||||||
"enemies": [
|
"enemies": [
|
||||||
{
|
{
|
||||||
"id": null,
|
"id": null,
|
||||||
"npc_id": null,
|
"npc_id": null,
|
||||||
"name": "Blood Steward of Kirtonos",
|
"name": "Blood Steward of Kirtonos",
|
||||||
"pos": [
|
"pos": [
|
||||||
1046,
|
2400,
|
||||||
637
|
1600
|
||||||
],
|
],
|
||||||
"classification": 3,
|
"classification": 3,
|
||||||
"skippable": false,
|
"skippable": false,
|
||||||
@@ -123475,14 +123475,26 @@
|
|||||||
"pack_id": null,
|
"pack_id": null,
|
||||||
"patrol_id": null,
|
"patrol_id": null,
|
||||||
"ascension_pinned": true
|
"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,
|
"id": null,
|
||||||
"npc_id": null,
|
"npc_id": null,
|
||||||
"name": "Kirtonos the Herald",
|
"name": "Kirtonos the Herald (Summon)",
|
||||||
"pos": [
|
"pos": [
|
||||||
555,
|
1850,
|
||||||
264
|
600
|
||||||
],
|
],
|
||||||
"classification": 3,
|
"classification": 3,
|
||||||
"skippable": false,
|
"skippable": false,
|
||||||
@@ -123497,8 +123509,8 @@
|
|||||||
"npc_id": null,
|
"npc_id": null,
|
||||||
"name": "Vectus",
|
"name": "Vectus",
|
||||||
"pos": [
|
"pos": [
|
||||||
327,
|
2400,
|
||||||
746
|
400
|
||||||
],
|
],
|
||||||
"classification": 3,
|
"classification": 3,
|
||||||
"skippable": false,
|
"skippable": false,
|
||||||
@@ -123513,8 +123525,36 @@
|
|||||||
"npc_id": null,
|
"npc_id": null,
|
||||||
"name": "Marduk Blackpool",
|
"name": "Marduk Blackpool",
|
||||||
"pos": [
|
"pos": [
|
||||||
391,
|
1300,
|
||||||
928
|
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,
|
"classification": 3,
|
||||||
"skippable": false,
|
"skippable": false,
|
||||||
@@ -123529,8 +123569,8 @@
|
|||||||
"npc_id": null,
|
"npc_id": null,
|
||||||
"name": "Rattlegore",
|
"name": "Rattlegore",
|
||||||
"pos": [
|
"pos": [
|
||||||
564,
|
700,
|
||||||
974
|
800
|
||||||
],
|
],
|
||||||
"classification": 3,
|
"classification": 3,
|
||||||
"skippable": false,
|
"skippable": false,
|
||||||
@@ -123545,8 +123585,8 @@
|
|||||||
"npc_id": null,
|
"npc_id": null,
|
||||||
"name": "Lorekeeper Polkelt",
|
"name": "Lorekeeper Polkelt",
|
||||||
"pos": [
|
"pos": [
|
||||||
928,
|
3200,
|
||||||
1174
|
800
|
||||||
],
|
],
|
||||||
"classification": 3,
|
"classification": 3,
|
||||||
"skippable": false,
|
"skippable": false,
|
||||||
@@ -123561,88 +123601,8 @@
|
|||||||
"npc_id": null,
|
"npc_id": null,
|
||||||
"name": "Doctor Theolen Krastinov",
|
"name": "Doctor Theolen Krastinov",
|
||||||
"pos": [
|
"pos": [
|
||||||
1328,
|
1850,
|
||||||
1456
|
1700
|
||||||
],
|
|
||||||
"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
|
|
||||||
],
|
],
|
||||||
"classification": 3,
|
"classification": 3,
|
||||||
"skippable": false,
|
"skippable": false,
|
||||||
@@ -123657,8 +123617,84 @@
|
|||||||
"npc_id": null,
|
"npc_id": null,
|
||||||
"name": "Instructor Malicia",
|
"name": "Instructor Malicia",
|
||||||
"pos": [
|
"pos": [
|
||||||
391,
|
1850,
|
||||||
1401
|
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,
|
"classification": 3,
|
||||||
"skippable": false,
|
"skippable": false,
|
||||||
@@ -123673,8 +123709,8 @@
|
|||||||
"npc_id": null,
|
"npc_id": null,
|
||||||
"name": "Darkmaster Gandling",
|
"name": "Darkmaster Gandling",
|
||||||
"pos": [
|
"pos": [
|
||||||
1529,
|
1850,
|
||||||
1456
|
850
|
||||||
],
|
],
|
||||||
"classification": 4,
|
"classification": 4,
|
||||||
"skippable": false,
|
"skippable": false,
|
||||||
@@ -123691,7 +123727,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"ascension_replaced": true,
|
"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",
|
"id": "shadowfang_keep",
|
||||||
|
|||||||
Reference in New Issue
Block a user