Repository navigation
Vanilla+ 0.0.7 — Release Notes R104–R108
--
R104 — 2026-11-04 (self-ID Vanilla+0.0.7-R104)
Vanilla+0.0.7-R104 — build fixes, fork-surface sweep, full smoke pass GREEN
- Build fixes (second post-R102 break): upstream's per-TU restructure
(962f88d5) made shared globals TU-private and left five fork anchors
dangling —SCmd.cpp's roster-state mark now includesRoster.data.h, and
the esc-menu tables, the font cache, the palette-transpose base and the
glide sprite buffer are read through new VP accessors instead of globals.
The options-tablesizeofassert became a runtime count check. - New audit tool:
fork_surface_syntax_sweep.sh— compiles 90 TUs
three-ways (fork vs upstream vs merge) and baseline-diffs the errors:
0 semantic errors, 6 noise-only flags (host-shim types present in the
upstream bodies too). - Field-verified: the R104 build carried the FULL smoke belt green —
owner: "R104 fully smoke tested. passed." ([issue #28]) — including the
standing §L asks (unit-lock re-checks, perspective-off, both-panels, the
D3D toggle re-check). - Housekeeping in the same window: the repository is renamed
D2LoD-libslang-vk→D2VP-QoL(old URLs redirect), and the
Glide3xVKwrapper spins out to its own repo,
VTSTech/Glide3xVK. - Gates 380/380.
R105 — 2026-11-04 (self-ID Vanilla+0.0.7-R105)
Vanilla+0.0.7-R105 — the sixth upstream sync (Ghidra DB → 1894)
- Merge of six upstream commits (
cc23648d..e2e9ec61), 124 files,
+1,732/−2,059. Byte-match now 6,560 of 14,642 functions (44.8%) / 21.14%
of bytes. - Structural: the D2Multi launcher file folds into
ChatDlg(deleted
D2Multi/Launcher.{cpp,h}); verified no fork surface referenced the
launcher before staging. - Four conflicts resolved per
docs/merge-upstream.md:- Pet recolor (issue #8): upstream's new per-call-local shape taken,
fork's field-verified raw polarity kept (dated supersession notes at both
sites; gate re-pinned). - Party.cpp site-6: the resolution-mode offset term re-planted onto
upstream's inlined call shape. GetGuildName: upstream's plainstrcpyshape not taken — the
rev35 bounded copy stays (a corrupt 32+-byte guild name would run off the
packet area).- README: fork Verification section kept, upstream evidence numbers
absorbed.
- Pet recolor (issue #8): upstream's new per-call-local shape taken,
- Audit battery all green: gates 380/380, rev47 marker audit zero losses,
rev48 zero dead stores, d2boot ALL VISIBLE, merge-site sweep 29 TUs clean. - No owner-visible behavior change intended.
R106 (self-ID Vanilla+0.0.7-R106 window)
Vanilla+0.0.7-R106 — the seventh upstream sync (Ghidra DB → 1908) + build fix
- Merge of fifteen upstream commits (
e2e9ec61..7df6ad0e), 437 files, six
evidence rounds. Evidence now 6,733 functions (46.03%) / 21.87% of
bytes. - Notable upstream landings: nine more VC8 codegen shapes; Storm
TSList
head terminator typed as one link andUnlinkAllcopied as template
members; MCP one-byte requests build the byte in a byte buffer; packet-flag
and quest-execute types taken from the asm; PKWARE filed under its
IMPLODE.LIBnames; the old Game.exeMain.cppfiled asGame/Main.cpp
and the Engine/Application scaffolding retired. - Build fix: the first post-sync owner build broke on
Draw.cpp's stale
D2Client/D2GfxHelperStrc.hinclude (left behind by the upstream refile) —
dropped, build green.
R107 — 2026-11-04 (self-ID Vanilla+0.0.7-R107)
Vanilla+0.0.7-R107 — the Mana Burn fix (mana_burn_fix)
- The bug (retail 1.14d, verified in-tree): monsters with the Mana Burn
affix drain 256x the intended mana with melee hits — 512x in Hell —
emptying a mana pool in one blow. Root cause: the affix stores its drain
stats already in the mana 1/256 fixed point, and the melee drain roll
shifted them another 8 bits (a helper built for the plain-point
fire/cold/lightning stats); the missile path read the stats raw and was
always correct. Community record: Amazon Basin wiki — "it is multiplied by
256 when applied by a melee attack. Fixed in D2R." - The fix (opt-in): with
[features] mana_burn_fix=1ind2vp.ini, a
Mana Burn melee hit drains the designed amount instead — 66–100% of the
monster's level damage (33–50% for Nightmare/Hell minions). Default OFF =
retail byte-for-byte. - D2R 2.4 parity: Nightmare/Hell still drain x1.4/x2 — the difficulty
resist penalty is retail behavior and is left alone, exactly like D2R after
its own 2.4 fix. - Scope: server-side, so it applies in single player and in TCP-IP games
hosted from this exe. New fork-owned gate TU
(D2Game/UNIT/VanillaPlusCombat.{h,cpp}, 2 s ini hot-read) + a VP-marked
drain-roll shim and three marked call sites inSUnitDmg.cpp(the
life/stamina drain sites share the latent double-scale and are covered for
consistency). Key documented in the auto-createdd2vp.initemplate. - Exit check: a Hell Mana Burn unique with monlvl DM 40 drains 26–40 mana
per hit (not 13,517–20,480).
R108 — 2026-11-05 (self-ID Vanilla+0.0.7-R108)
Vanilla+0.0.7-R108 — Mana Burn Fix joins the Vanilla+ Options panel
Esc → Options → Vanilla+ Optionsgrows an eighth row, Mana Burn Fix —
the R107 toggle is no longer ini-only. Same key, same bridge as the other
seven rows; a freshd2vp.inialready carries it.- Instant in the panel, ≤ 2 s in the game: the page re-reads the ini every
frame, so the On/Off flip shows same-frame; the server gate keeps its 2 s
hot-read, so the drain behavior follows on the next poll — the same latency
as an external ini edit. - Layout: the eighth row moved the Previous Menu row down one pitch
(0x144 → 0x164) and grew the panel box (0x171 → 0x191, same bottom margin);
verified to fit 640x480. - Housekeeping: the build self-ID gate re-pinned (the R107 round never
re-pinned it), row-count/back-row gates re-pinned, +1 row-present gate —
suite 387/387.
Full Changelog: R106...R108