Skip to content

Sync dev with upstream (2026-09-12) - #11

Merged
pathanin merged 15 commits into
devfrom
sync-upstream-2026-09-12
Sep 12, 2026
Merged

pathanin merged 15 commits into
devfrom
sync-upstream-2026-09-12

Conversation

@pathanin

Copy link
Copy Markdown
Owner

Merge 14 upstream commits (49e93925d..ce566eac4): 0.5.5 data export, trade data update, individual skill weapon set handling, tree tab performance, deterministic XML save order, unique variant/crafter additions, and a ModCache regen.

macOS port verification

Clean merge, no conflicts. No forward-porting was needed.

  • git diff --name-only <pre-merge> HEAD does not list any fork-patched file, so upstream touched none of them.
  • src/Launch.lua — the jit.os == "OSX" JIT-disable block is present and unchanged.
  • src/Classes/TradeQuery.lua — fork delta unchanged.
  • src/Classes/TradeQueryRequests.lua — the pseudoModLine nil-crash guard is present. The second marked delta (the dropped {fractured}/{crafted} prefix in processLine) is now a stale signature: upstream's own processLine returns s .. escapeGGGString(modLine.description), so the fix is upstream and the fork no longer needs to carry it.
  • No vendored port directories in this repo, so P5 does not apply.

Testing

busted is not installed locally, so the test gate is CI (run_tests, check_modcache, spellcheck).

vaisest and others added 15 commits September 10, 2026 11:19
* Export 0.5.5 data + trade data

* Fix soulcore tests

* Regen modcache and silence cspell

* Fix .def Texture being local

* Clanker fix for asset export

* Fix spectre library icons

* Fix random passing by bug

* Swap emotion column order
* Add individual skill weapon set handling

Allow skill groups to use Both, Set 1, or Set 2.
Calculate skills, effects, and stats using the assigned weapon set.
Add logic to auto apply / disable weapon sets if a skill can't be used with it
Make item and tree granted skills into supportable groups that lock the skill so it can't be removed.
Hide item/tree only gems from the dropdown list due to them having proper groups now.

Added a bunch of tests and tried to make sure there weren't any obvious performance issues

* Fix imported levels of item / tree granted skills

Skills granted via tree nodes have their level scaled based on your characters level so should level up or down
Skills granted via items will set a maximum base level based on the item and will auto downscale based on if you meet the stat requirement and level requirement

* Fix import not validating weapon set selection

* Fix level not syncing

When levelling up your character, it was not updating the level of tree granted skills until you caused the socket group UI to refresh

* Fix minion skills not showing the stat set dropdown sometimes

When you set a minion to use weapon set 2 but had weapon set 1 active then it was hiding the skill set dropdowns in the sidebar and calcs tab

* Auto grant default attacks for weapons

Use the CharacterMeleeSkills table to set the default skill that should be added based on the current equipped weapons
Auto level the skills based on the player level
Spear Throw on weapons is just display text so make it not add a gem as that's handled by the dat file
Add tests for a variety of scenarios

* Fix compare not using the item set the skill is assigned to

When comparing a weapon for a skill, it could show no difference if you were on set 1 while the skill was set to use only set 2
It now uses the set the skill is set to

* Fix test

* Fix tests

* Fixes

Fixes an issue with spear imports
Fixes an issue with weapon set 2 jewel tooltips
Cleans up some tests

* Fix compare tab crash

---------

Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Add more Atziri's Splendour variants

* Update mod ids for a bunch of uniques

* Regen modcache

* Fix a bunch of mod IDs which change values

* Use alt variant for splendour instead

* Add groups for splendour

* Use full names for variants

* Fix a ton more mod ids

* Fix some missing mods

* Update modcache

* Add attribute line for vertex

* Fix intimidate shield block mod ID

* Fix tests

---------

Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Optimise tree rendering:
- Batch SG calls
- Use strings for colours
- Cull out of view connectors

* Avoid unpacking in node code and recalculating constants

* Fix colours

* Fix 0.1 Tree crash

Switching to the 0.1 tree from 0.5 would cause a crash due to asset differences

---------

Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Add "Can roll ___" mods to crafter

* Fix some mods applying to invalid bases

Fix missing rune modifiers for helmets and weapons, and exclude modifiers that cannot roll on the item’s base

---------

Co-authored-by: LocalIdentity <localidentity2@gmail.com>
…nity#2516)

The 'enemies in your presence have exposure' entry placed its
ActorCondition tag on the OUTER EnemyModifier mod. That mod lives in the
player's modDB, where actor="enemy" resolves to the enemy actor - but
EnemyInPresence is only ever set on the PLAYER (CalcPerform.lua:526).
The condition therefore never held, the EnemyModifier was never created,
and the Shaman ascendancy notable Turning of the Seasons granted nothing.

Moved the tag inside the elemental mod, matching the already-correct
'enemies in your presence have fire exposure' entry a few lines below:
the inner mod is copied into the enemy's modDB, where actor="enemy"
points back at the player, who does have the condition.

Verified on a Druid/Shaman build with node 62523 allocated:
Fire/Cold/Lightning Exposure 0/0/0 -> 20/20/20.
On a real build (Flicker Strike, Druid/Shaman L85) this is
238,456 -> 264,437 DPS (+10.9%).

ModCache.lua regenerated; exactly one line differs.

Co-authored-by: Visp1024 <visp1024@users.noreply.github.com>
…nity#2514)

composeNode() walked node.attrib with pairs(), so attributes came out in string-hash order and the same tree could serialise differently between processes. Collect the keys, sort them, then emit. The non-string-key check moves into the collecting loop because table.sort cannot compare a string key against a non-string one; both error messages are unchanged.
PartyTab:exportBuffs walked the name-keyed buffExports maps, and the nested otherEffects map, with pairs(), so the text inside each <ExportedBuffs> element came out in string-hash order and differed between runs of the same build. Use pairsSortByKey for both walks.
…ldingCommunity#2513)

* Save builds with a stable element order

The XML save path walked several maps with pairs(): calcs/config inputs and placeholders, item slots, saver sections, weapon-set node lists, and the node-id-keyed allocNodes, masterySelections, jewels, attribute nodes and hashOverrides in PassiveSpec. Their emission order was hash order, so the same build could save differently between runs. Sort each walk (names ascending, node ids ascending, slots in creation order, weapon sets by number) so a build always serialises the same way. EncodeURL also walks allocNodes ascending, so the nodeCount < 255 cap drops the same nodes every time. Loaders read all of these back as maps, so this is a pure reordering.

* Iterate runes with ipairs

---------

Co-authored-by: LocalIdentity <localidentity2@gmail.com>
* Iterate flasks and charms in slot order

env.flasks and env.charms are keyed by item table, so pairs() walks them in memory-address order, which differs between processes. That order reaches the modDB and, for charms, the limit loop stops early, so it also decided which charms applied. CalcSetup now records each slotted item's slot number in env.itemSlotIndex, and mergeFlasks/mergeCharms iterate in that order with item.id as the tiebreak.

* Fix duplicate charms changing slot order

---------

Co-authored-by: LocalIdentity <localidentity2@gmail.com>
…mmunity#2511)

* Add support for Runeforged/mastered unique variants

* Fix mods not checking the selected base

Mods were not checking if the base and variant matched and were just applying all the mods for a particular base

---------

Co-authored-by: LocalIdentity <localidentity2@gmail.com>
@pathanin
pathanin merged commit 49073f9 into dev Sep 12, 2026
5 checks passed
@pathanin
pathanin deleted the sync-upstream-2026-09-12 branch September 12, 2026 11:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants