Adventure: location challenge ratings with map/HUD indicators and display setting - #11432
Open
liminalwarmth wants to merge 4 commits into
Open
Adventure: location challenge ratings with map/HUD indicators and display setting#11432liminalwarmth wants to merge 4 commits into
liminalwarmth wants to merge 4 commits into
Conversation
…ation tracking, and crown badges
Add a four-level challenge-rating framework (low/medium/hard/veryHard)
for Adventure points of interest, an opt-out display setting
("Display dungeon difficulty ratings", default on), and the indicator
rendering that consumes it:
- Overworld location sprites show a colored dot for rated locations
once visited, a gray question mark before that, a red X once fully
cleared, and a half-size crown while a known living crowned
(effect-carrying) enemy remains on any discovered floor.
- The town/dungeon/cave/castle entry banner appends the location's
rating bullet to its name when the setting is on, and the banner's
queued fade/slide actions are cleared before a new one starts so
rapid re-entries never show a stale rating.
- Visited and cleared state is tracked live per point of interest
(including a discovered sub-map chain so a dungeon's interior floors
count toward its parent's cleared status), persisted in
PointOfInterestChanges/WorldSave, and mirrored onto the M-key world
map as the same colored dot / X badges. A magnifier icon marks any
unexplored non-settlement location. Quest re-targeting resets the
whole discovered chain so stale cleared state cannot leak onto a new
objective.
- Dialog-only NPCs are excluded from cleared/visited tracking, and
pre-patch saves recover exploration state via the existing
hasDeletedObjects fallback.
Adds the ChallengeDot, ChallengeUnknown, and ClearedX sprites to the
common, Shandalar Old Border, and Realm of Legends item atlases
(original pixel art for this contribution).
Build plumbing: forge-gui-mobile had no unit tests before this change,
so its pom gains a test-scope testng dependency, an explicit
testSourceDirectory, and a main-compile exclude for test/** (the
module's sourceDirectory is the non-standard "src", which otherwise
sweeps src/test/java into the main compile and hides test-scope
dependencies from it). SettingsScene's boolean addSettingField()
helper also gains a CheckBox return so the new setting can disable
itself when no plane has rating data.
Note: two changes apply uniformly across every plane, not just rated
ones -- the cleared-X marker and the unexplored magnifier are
exploration features independent of whether a location has a rating,
so previously-unrated planes (e.g. Innistrad, Crystal Kingdoms) will
show them too, and the magnifier now appears on any non-settlement
location rather than only caves/dungeons.
Rate 235 of Shandalar Old Border's points of interest with reachable enemy objects (161 low, 34 medium, 32 hard, 8 veryHard). Guide-covered locations map every rated entry in the Old Border Shandalar official guide (oldborder-shandalar.net) to its stable POI definition and root map, normalizing guide aliases to low/medium/hard/veryHard and taking the highest normalized rating where a location has multiple bosses. Locations the guide does not cover are rated from encounter data: for each unrated POI, every .tmx interior reachable from its root map is walked, explicit enemy objects are collected, and the highest enemy difficulty value converts to a rating (<=0.1 low, >0.1-0.4 medium, >0.4-0.8 hard, >0.8 veryHard). Unrated towns/capitals require the supplemental audit to have actually seen enemies there; rated ones (Bazaar of Wonders, etc.) qualify like dungeons. Excluded: guide-rated overworld enemies that are not POI locations (Maelstrom Angel, Kid's Pet Ladybug); boss names that are shared between a guide-rated location and an unrelated POI (Ancient Silver Dragon also appearing at River Crossing/Homarid Island; Pirate Captain also appearing in the Cidryl Shard Mines quest map) are rated independently from their own encounter data rather than copying the guide entry. Treasure caves with rewards but no enemy stay unrated.
Rate 224 of 264 common point-of-interest definitions -- the fallback plane data serving standard Shandalar and Amonkhet -- using a family-scoped boss-life audit: each POI's map is traversed to find its strongest reachable enemy, stopping at the shared cave_multilevel network unless the POI is itself rooted there, with nameOverride-aware enemy resolution so renamed bosses still resolve to their real definition. Design-intent floors are applied on top of the raw audit: the castle type always floors to veryHard, sideboss tier labels act as floors, network-rooted caves floor to at least hard, Camel Cave floors to its guide label, and the Lavaforge Kobold is rated per its intended (if typo'd) boss rather than the literal encounter data. Unrated: towns, capitals, treasure caves, DEBUGZONE entries, and POIs missing a map definition. Planes with their own POI files (Shandalar Old Border, Realm of Legends) are unaffected by this fallback data.
Rate all 125 combat points of interest in Realm of Legends per the plane's own tier ladder: cave = low, dungeon = medium, castle = hard, with the endgame prisons and Arzakon's Fortress at veryHard and Yule Town at medium. Towns and capitals stay unrated. Verified by a full reachable-enemy life audit against the plane's own walkthrough guide, cross-checking every rated location's boss set and normalized tier.
liminalwarmth
marked this pull request as ready for review
July 28, 2026 01:43
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adventure: location challenge ratings with map/HUD indicators and display setting
Adds an opt-out difficulty/exploration indicator system to Adventure mode's world map, plus curated challenge-rating data for the three planes that define ratings today. Enable or Disable with a new menu checkbox. Confirmed to work on both mobile and desktop orientations correctly.
Why is this needed? In Adventure mode, there's currently no way to take notes on locations or easily tell which ones you've already visited or cleared from the world map. It's also hard to remember which locations seemed too hard and are only partially cleared. This system fixes all of those problems with visual indicators on the locations and world map by assigning a difficulty to dungeons once you visit them at least one time and tracks both boss clears and full clears.
Note: The PR isn't quite as big as it seems because about 500 of those line additions are just tagging on the challenge ratings to locations across the three default planes.
What it does
challengeRating(low/medium/hard/veryHard) inpoints_of_interest.json. Planes without any ratings are completely unaffected visually by the rating indicators.?/dot/crown/banner indicators. The cleared X and the magnifier are exploration markers rather than difficulty hints and intentionally remain visible.Data
Innistrad and Crystal Kingdoms define no ratings, so they show no rating indicators; they do gain the (rating-independent) cleared-X and magnifier exploration markers.
Compatibility
items.atlas/items.png, placed in verified-free space with the pngs kept byte-identical to their current content outside the glyph rects. The glyphs are original pixel art created for this contribution, released under the project's license.forge-gui-mobilegains its first unit test; its pom gets test-scope TestNG (matchingforge-game's version), atestSourceDirectory, and a main-compile exclude fortest/**(needed because the module uses a non-standardsourceDirectory).Notes for reviewers