scholo: revert image swap experiment, keep kg's native 6144x4096 maps
Tried replacing kg's 4 scholo floors with the upreza Dungeons stitched maps (which have room labels baked in: Reliquary, Chamber of Summoning, Butcher's Sanctum, etc.). But kg renders to 3:2 aspect (6144x4096) while upreza is 4:3 (4096x3072) and the WoW client's source content is positioned differently in each — linear rescale of kg's enemy coords lands bosses outside the rooms. Better to keep kg's lower-quality but coord-aligned maps. dungeon_replacements / map_image_swaps mechanisms are still there for future cases where we DO have a coord-compatible replacement. WoWMapUprezClassic doesn't help here — the README notes that vanilla never had in-game dungeon interior maps.
This commit is contained in:
@@ -226,10 +226,12 @@ def main() -> int:
|
||||
|
||||
overrides = []
|
||||
dungeon_replacements = {}
|
||||
map_image_swaps = {}
|
||||
if OVERRIDES_PATH.exists():
|
||||
ov_doc = json.loads(OVERRIDES_PATH.read_text())
|
||||
overrides = ov_doc.get("overrides", [])
|
||||
dungeon_replacements = ov_doc.get("dungeon_replacements", {})
|
||||
map_image_swaps = ov_doc.get("map_image_swaps", {})
|
||||
|
||||
# Load AtlasLoot map data on demand for dungeon replacements.
|
||||
atlasloot_data = None
|
||||
@@ -389,6 +391,29 @@ def main() -> int:
|
||||
ex["kg_floor_id"] = new_floor
|
||||
ex["ascension_override"] = True
|
||||
|
||||
# Map image swap: rescale every coord from kg's pixel space
|
||||
# (image dimensions in floor_summary) into the new image space.
|
||||
swap = map_image_swaps.get(d["tile_key"])
|
||||
if swap:
|
||||
new_w, new_h = swap["width"], swap["height"]
|
||||
for m in entry["maps"]:
|
||||
sx = new_w / m["width"]
|
||||
sy = new_h / m["height"]
|
||||
m["width"], m["height"] = new_w, new_h
|
||||
for e in m["enemies"]:
|
||||
e["pos"] = [round(e["pos"][0] * sx, 1), round(e["pos"][1] * sy, 1)]
|
||||
for p in m["packs"]:
|
||||
p["vertices"] = [[round(v[0] * sx, 1), round(v[1] * sy, 1)] for v in p["vertices"]]
|
||||
for pa in m["patrols"]:
|
||||
pa["vertices"] = [[round(v[0] * sx, 1), round(v[1] * sy, 1)] for v in pa["vertices"]]
|
||||
for ic in m["icons"]:
|
||||
ic["pos"] = [round(ic["pos"][0] * sx, 1), round(ic["pos"][1] * sy, 1)]
|
||||
# Extras already use the kg pixel space; rescale too.
|
||||
# Use the first map's pre-swap factor — extras are dungeon-level.
|
||||
for ex in entry.get("extras", []):
|
||||
ex["pos"] = [round(ex["pos"][0] * (new_w / 6144), 1),
|
||||
round(ex["pos"][1] * (new_h / 4096), 1)]
|
||||
|
||||
dungeons.append(entry)
|
||||
|
||||
dungeons.sort(key=lambda d: d["name"])
|
||||
|
||||
Reference in New Issue
Block a user