Skip to content

v3.0.0-alpha14

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 18 Jun 04:01
· 9 commits to main since this release

ReforgeLite Classic

v3.0.0-alpha14 (2026-06-18)

Full Changelog Previous Releases

  • make GetStatScore iterate caps instead of hardcoding two
  • avoid per-branch stat-table copy in B&B search
    Apply each reforge to currentStats in place and undo it after recursing,
    instead of CopyTable-ing the whole stat table for every branch. Search
    is unchanged (same node count, same result == DP); per-node cost drops
    ~8% from eliminating the per-option allocation.
  • remove dead GetSmartReforgeOptions
    B&B now uses GetFullReforgeOptions exclusively; the old smart-options
    generator and its references are gone.
  • add best-effort B&B pass for infeasible cap configs
    When the caps are unreachable (e.g. Hit AtMost below the reforge floor),
    the constrained search prunes every branch and finds no solution, which
    previously dropped to the full DP (~6min). Add a second pass with
    constraint pruning relaxed: every complete path becomes a candidate and
    the score bound keeps the highest-scoring (closest) one. Validated to
    return the exact same best-effort solution as the DP (matching score) in
    623 nodes vs the DP's 367s.
  • make Branch & Bound exact with a tighter joint bound
    B&B previously searched only GetSmartReforgeOptions (one source stat per
    item plus a few destinations), which excludes reforges the optimum needs
    -- so it returned suboptimal results. Switch to full reforge enumeration
    (GetFullReforgeOptions, deduped by cap effect) so B&B searches the same
    space as the DP and reaches the true optimum.
    To keep that tractable, add a joint per-item upper bound: each remaining
    item is credited only its single best reforge (score + linear cap gains),
    which is far tighter than the old frankenitem bound that summed
    independently-maxed score/cap1/cap2 a single reforge can't all achieve.
    Both bounds are kept and pruned on the min. Validated equal to DP on a
    dual-AtLeast case in ~1/4 the time. Also guard a debug-only nil deref
    when no feasible solution exists.
  • delete whitespace
  • fix amplification factor and trim rpp table
    Derive the Amplify equip bonus from the actual in-game spell (146051,
    coefficient 0.00177 on the Epic_0 budget) and floor to match the
    truncated tooltip percent, replacing the Round(rpp/420) approximation
    that overshot at ilvl 528 (1.06 vs 1.05). Move the logic into
    GetAmplificationFactor, and trim RandPropPoints to the single Epic_0
    value per ilvl since that column was the only one ever read.
  • method window height is now dynamic
  • cata: include ranged slot in calc
  • grant contents:write so packager can create GitHub releases
    The default GITHUB_TOKEN is read-only on newer repos, which would block
    release creation; explicit permission ensures the tag release and zip
    asset are published.
  • add GitHub Actions workflow to package and release on tag push
    Runs the BigWigs packager on tag push (same release.sh path proven
    working locally), uploading to CurseForge via CF_API_KEY and creating
    a GitHub release via the built-in GITHUB_TOKEN.
  • add release to git ignore
  • fix cap optimizer targeting 1 below displayed cap
    The engine re-derived preset cap values with floor() while the UI
    display/storage used ceil(), so the optimizer solved for AtLeast 960
    when the cap shown was 961. Align the engine to max(0, ceil(getter())).
  • use currentlocale
  • ignore release folder
  • cleanup
  • refresh conversion before running calc
  • moved locales folder
  • unused in cata
  • revert
  • test
  • rename root file
  • rename cata toc