Commit Graph

12 Commits

Author SHA1 Message Date
florian.berthold 65ae0158f3 Ascension override: Lorgus Jett moves to BFD floor 2 (Moonshrine Sanctum)
kg pinned Lorgus on floor 1 (entrance Pool of Ask'ar) but he actually spawns on floor 2 in Moonshrine Sanctum on Ascension. AtlasLoot's subzone tagging confirms this — Lorgus sits with Twilight Lord Kelris and Aku'mai, not the floor-1 lake bosses.

ascension_overrides.json now also supports relocating an enemy across floors (not just position-changing). build_data.py removes the enemy from its source floor and appends it to the target.
2026-04-25 23:41:57 +02:00
florian.berthold e11dc1eed5 per-floor extras + Ascension overrides + layer toggles
- atlasloot_extras: fit one transform per (kg_dungeon, floor_id) instead of mixing all kg bosses into one fit. Each AL extra is assigned to whichever floor's anchors it's nearest to (in AL coord space). Strat's Stonespine now correctly lands on floor 235 (Undead) instead of being hidden because the mixed-floor fit pushed it off.
- new data/ascension_overrides.json: per-name position/floor patches for places where Ascension diverges from retail. Seeded with Magistrate Barthilas → moved to the southern courtyard (3498, 3300 on Undead Side) per Ascension spawns.
- frontend renders extras only on their assigned floor; previously hard-coded to floor 0.
- new layer-toggle checkboxes (Enemies / Packs / Patrols / Icons) in the toolbar — flip patrols off if mob routes are noise for your route.
2026-04-25 23:26:24 +02:00
florian.berthold 48c401909e fix: pin click should not bubble to canvas (was placing waypoints under notes)
Clicking a Note (or any pin) in Route mode used to:
  1. fire the canvas click handler → drop a waypoint at the note's spot
  2. only THEN run the pin's own click/dblclick handlers

So a single click on a note added a stray waypoint, and a double-click added two and may not have reliably reached the dblclick handler. Edit-via-dblclick therefore felt broken.

Fix: every interactive pin (note, text label, route waypoint, pull marker) now stops 'click' propagation explicitly. Click and dblclick on a pin no longer affect the active tool. Drag detection bumped to a 3px threshold and now only persists history when the pin actually moved.
2026-04-25 23:22:04 +02:00
florian.berthold 724ae08394 pull AtlasLoot rares + interactives into kg pixel space
- new tools/atlasloot_extras.py: matches AL bosses to kg cls>=3 enemies by name, fits per-(dungeon,wing) affine x/y transform, applies to AL pinType=None entries to recover ~14 rare bosses kg's spawn-bound data model omits (Blind Hunter, Stonespine, Deathsworn Captain, Spirestone Butcher, Bannok Grimaxe, Jed Runewatcher, Tsu'zee, …) plus 140+ AtlasLoot interactives (postboxes, summon stones, levers)
- WING_FORCE map disambiguates multi-wing dungeons (BRS, Dire Maul, Scarlet Monastery) where the same AL coord transforms into multiple wings
- frontend renders rare extras as silver-blue skull pins, non-rare extras as muted squares; both have hover-tooltips with their AtlasLoot name
- start, graveyard, dot_yellow, gateway, door_locked icon types from kg now render with distinct shapes (were silently empty before)
- kg_build_data.py merges atlasloot_extras.json into each dungeon's 'extras' field

Note: Ascension always-spawns rare bosses (vs retail's RNG), so they're now reliably visible on the planner.
2026-04-25 23:18:50 +02:00
florian.berthold 9600ce35c2 drop Sunken Temple — kg has no enemy data for it; the empty entry was just clutter in the picker 2026-04-25 23:08:18 +02:00
florian.berthold f8c5157c80 export/import carries notes + texts; new Import button
- exportJson now includes per-floor notes and texts arrays alongside route/pulls; bumps a version field for forward-compat
- new importJson: file picker, parses JSON, resolves dungeon by id against current build, replaces this dungeon's pins on every floor present in the file
- Import button next to Export in the toolbar
2026-04-25 23:05:48 +02:00
florian.berthold 569dbb3b7c split note tools: (i) hover-only icon vs. always-visible freetext label
- Note tool (existing) now strictly hover-only: drops a yellow (i) pin, text appears in the instant tooltip on hover; no inline label
- new Text tool: drops the user-typed string as an always-visible map label, no icon — for naming pull groups, calling out hazards, etc.
- both tools support drag, right-click delete, double-click edit; share-URL hash carries them in 'n' (notes) and 't' (texts) keys
2026-04-25 23:04:51 +02:00
florian.berthold 71bef7b8ff instant-hover tooltip + always-visible note labels
- replaced SVG <title> tooltips (which use the OS dwell-delay) with an instant custom tooltip rendered in #custom-tooltip
- note pins now also render their text inline next to the icon, so a route can be read at a glance without hovering each pin (truncated at 80 chars in the SVG; full text still in the tooltip)
2026-04-25 23:01:43 +02:00
florian.berthold e6c457a400 rare-elite enemies + freetext notes tool + clear-confirmation
- classification 5 (rare-elite) now renders with silver-blue skull pin and shows up in the boss list with a 'rare' tag (was falling through to default trash style)
- new Note tool: click map → enter text → drops yellow info pin; hover for tooltip, double-click to edit, drag to move, right-click to remove. Notes are included in the share-URL hash and history.
- Clear button now confirms before wiping the current floor's waypoints/pulls/notes
2026-04-25 22:59:01 +02:00
florian.berthold 920408f7d3 shorter share URLs: deflate-compressed hash, integer-rounded coords, flat-array pin storage 2026-04-25 22:52:25 +02:00
florian.berthold 18c7792935 switch to keystone.guru tiles + enemy data
Replaces the upreza-derived 4K dungeon textures + AtlasLoot boss-coord
overlay (which had a consistent positional offset against texture skulls)
with keystone.guru's z=4 tile pyramid stitched to 6144x4096 WebP per floor.

kg's split_floors.js gives per-dungeon enemies, packs (polygons), patrols
(polylines), and map icons calibrated to those tiles, so overlays align
pixel-perfectly. 27/29 classic dungeons now have full enemy/pack data;
ZG + Sunken Temple have maps only.

Pipeline: tools/kg_fetch.py -> tools/kg_stitch.py -> tools/kg_build_data.py.
2026-04-25 22:11:17 +02:00
florian.berthold aa1cd9ee40 initial commit: classic-only M+ planner with upreza-derived maps 2026-04-25 21:39:15 +02:00