feat: initial PoE2 0.5 (Return of the Ancients) passive tree support#1977
Closed
0xCZR1 wants to merge 1 commit into
Closed
feat: initial PoE2 0.5 (Return of the Ancients) passive tree support#19770xCZR1 wants to merge 1 commit into
0xCZR1 wants to merge 1 commit into
Conversation
- Schema converter (0.5 data.json -> 0.4-compatible format) - Icon extraction from GGG webp spritesheets - Attribute node switching (STR/DEX/INT) - Keystone calc support where formulas exist - Mod parser patterns for new 0.5 stat text (ES regen/cap, EB ES->mana & mana cost, Vaal Pact leech rate, totem max elemental resistances) - ModCache regenerated - Lua patches: 12-class support, nil guards, pcall fallback, asset found flag - Stat text markup cleanup ([Tag|Display] stripping) - Full schema diff documented in PR description Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.
feat: PoE2 0.5 (Return of the Ancients) passive tree support
Summary
Adds initial support for the PoE2 0.5 passive tree. The tree loads, renders, and is fully browsable with clean tooltips, working search, real node icons, and attribute-node (STR/DEX/INT) switching. GGG made large breaking changes to the tree JSON schema between 0.4 and 0.5; rather than rewrite PoB's Lua parser, a Python converter translates 0.5
data.jsoninto a 0.4-compatible shape, plus a handful of defensive Lua patches. The existing calc engine already handles the majority of 0.5 nodes because the stat-mod text is largely unchanged — only the JSON structure changed. New 0.5 mechanics with no formula support are honestly shown as "Not supported" rather than silently ignored.Schema changes (0.4 → 0.5)
Top-level
assets,connectionArt,constants,ddsCoords,nodeOverlaytree.jsonedges,skillOverridesout/inClasses
integerIdbackground(obj)image,image_offset_x/yAscendancies
id= name ("Deadeye")id= class-indexed ("Ranger1")idset to name; 0.5 id →internalIdinternalIdbackgroundimage,offsetX/Y,flavourText*Nodes
ascendancyNameascendancyIdclassesStart(names)classStartIndex(indices)connections[{id,orbit}]out/in(id arrays)out→ connectionsisAttribute+optionsisGenericAttributeisAttribute+ 3-option STR/DEX/INT list (see below)isFreeAllocateisFreecontainJewelSocketisJewelSocketisOnlyImageisMasterygrantedSkill(gem object)statsfor tooltip displayflavourText(can be table)Groups
Stat-text markup (new in 0.5)
[InternalTag|Display Text]→Display Text;[Tag]→Tag<tag>{content}→content; stray<tag>/</tag>strippedArchitecture
src/Export/convert_05_tree.pyis a permanent schema translation layer, not a temporary hack — it documents every field mapping.What's implemented
src/Export/extract_05_icons.py) — 517 of 568 (the 51 misses areMastery*icons not present in the skill atlases)isAttribute+options(matches the GGG export script:isAttributeonly, notisSwitchable)unlockConstraintnil guard for 0.5 node-based constraints)cannot recover energy shield from regeneration→NoEnergyShieldRegen(Scarred Faith)you cannot recover energy shield to above armour→ArmourESRecoveryCap(Scarred Faith)mana costs are doubled→ManaCost MORE 100(Eldritch Battery)convert (n)% of maximum energy shield to maximum mana→EnergyShieldConvertToMana(Eldritch Battery)leech life (n)% less quickly→LifeLeechRate MORE -n(Vaal Pact)totems gain +(n)% to all maximum elemental resistances→TotemElementalResistMax BASE n(totem notable cluster; properly totem-scoped, not global)What's NOT implemented
These fall into a few distinct categories — most are not "0.5 calc work to be done," and the "Not supported" label is the honest/correct state for them:
Parse catalog (verified via headless harness)
NoEnergyShieldRegen,TotemElementalResistMax) were implemented; the rest are left as honest "Not supported" rather than faked.Setup
Notes for maintainer
lua-utf8stub (only used for number formatting, so parsing is unaffected). Thecheck_modcacheCI job should be re-run in the canonical environment to produce the authoritative cache.CI=1/REGENERATE_MOD_CACHE=1, with an in-memory ModCache clear to parse fresh) is the recommended workflow for adding further 0.5 mod patterns.parse_fail.txt/ the unknown-stat triage are available as references for prioritizing remaining mod work.Tree stats (0.5)