Skip to content

D2LoD Vanilla+0.0.7-R83

Pre-release
Pre-release

Choose a tag to compare

@VTSTech VTSTech released this 02 Nov 04:51
· 62 commits to main since this release
image image image

Vanilla+ 0.0.7 — Release Notes: R77 → R83

Seven rounds, 2026-11-01 → 2026-11-02. One stash-tab polish round (R77), three upstream Ghidra-recovery syncs with zero feature changes (R78–R80, upstream 1792 → 1806), one capacity round (R82, shared stash 2 → 10 pages), and two 720p UI fixes filed and confirmed by the owner (R81 = issue #21, R83 = issue #23). The Vanilla+ gate suite grew 297 → 308 and is green at the R83 tip; every round was field-run on the Win11 build. No new d2vp.ini keys in the whole span — all six toggles unchanged, and a missing/garbage ini is still retail byte-for-byte.

Full changelog: R77...R83

Round Date Commit Type Headline
R77 2026-11-01 866883e field polish Stash tab lifted 45 px into the panel's top-right corner
R78 2026-11-02 ea0b84d + e6a31f7 upstream sync Ghidra 1794 absorbed — zero feature changes
R79 2026-11-02 f518fda + bd7a610 upstream sync Ghidra 1801 absorbed — zero feature changes
R80 2026-11-02 f427f96 + 9c8d430 upstream sync Ghidra 1806 absorbed — zero feature changes
R81 2026-11-02 3f73e56 fix (#21) Waypoint row icons fixed at 720p — "waygateicons are back"
R82 2026-11-02 988abd9 feature Shared stash grows to ten pages
R83 2026-11-02 d970fb6 fix (#23) Video-options 1280x720 label right-aligned

R77 — stash tab lifts into the panel's top-right corner

The shared-stash tab was approved horizontally at R76 but the < pager arrow's halo still kissed the gold amount text's last glyph — owner: "Looks good horizontally, but still drawing on top of the last gold character a bit with the arrow. can we move the stash label up, closer to the top right corner ?"

  • The tab row moved up 45 px (VPSHAREDUI_TabBaselineY −0x19f/−0xdb → −0x1cc/−0x108, expansion/classic) into the empty band between the panel's top edge and the retail gold display row. The R76 right anchor (+0x13c, inside the art-seam rule) is untouched.
  • The band's right side is verified-empty retail space: the coin rect and the gold-area button rect live at X +0x49..+0x96, far left of the tab; the halo top stays ≥ 7 px inside the panel edge and the click band never probes the playfield (the R69 down-walk class cannot re-open).
  • Gates 297 → 299. This is the round the R77 GitHub release shipped (tag R77 @ 866883e, carrying the whole R67→R77 shared-stash refresh).

R78 — upstream sync: Ghidra 1794 (zero feature changes)

Upstream 14f0227a absorbed (merge ea0b84d): the Ghidra v1793/v1794 regen waves + two generator rounds — split-bounds getters and per-arm calls. Upstream byte-match now 5,988 of 14,642 functions (40.9%), code 471,419 of 2,602,915 bytes (18.11%).

  • 188 upstream files changed, 10 textual conflicts (6 EOL-only; Direct3D hunks onto the gadwBitMasks regen shape; Inv wide-mode page key, QuestLog's 8 wide-offset terms and Panel's crop-draw calls re-planted; Panel was a convergence — upstream shipped the same calls the fork already carried).
  • Zero compile-fix rounds — the full battery green first try: gates 299/299, merge-site sweep 32 TUs / 0 unique errors, placement OK=46 MOVED=141 NEW=193, VP-marker census zero losses, fork TUs 4/4.
  • Upstream added its MIT LICENSE this round. Docs synced (e6a31f7, Rev 101).
  • Field verdict: "Compiles cleanly. Boots first try. No obvious regressions."

R79 — upstream sync: Ghidra 1801 (zero feature changes)

Upstream 95de360a absorbed (merge f518fda): the 1795–1801 retyping waves — widths/signedness/BOOL fields, D2ObjectInitFnArg, pointer/return types across skills, inventory, Storm and the UI, unit/game/inventory pointers where ints were declared, parameter names checked against live packet captures, and the Storm file layout. Byte-match 5,990 of 14,642 (40.9%), code 471,891 bytes (18.13%).

  • 446 upstream files, 70 unmerged paths — 62 zero-fork-delta regen TUs taken upstream-verbatim, 2 Storm-layout renames accepted, 6 manual hunks with the Vanilla+ anchors re-planted. Host shim gained the _RTL_CRITICAL_SECTION struct tag (host syntax-check only; real builds get the SDK form).
  • Zero compile-fix rounds — battery green first try: gates 299/299, sweep 46 TUs / 0 errors, fork TUs 4/4, d2boot ALL VISIBLE. Docs synced (bd7a610, Rev 102).
  • Field verdict: "Builds and Runs without error again, no regressions."

R80 — upstream sync: Ghidra 1806 (zero feature changes)

Upstream 55016505 absorbed (merge f427f96): the 1802–1806 waves — MONSTERAI flag output as a 4-byte BOOL, level/room/unit pointers in the DRLG path and grid helpers, DT1/DC6/path types + flag-word returns + character buffers, parameter names for monster spawn/skills/item stats/UI, then the generator round. Byte-match 6,029 of 14,642 (41.2%), code 479,019 bytes (18.40%), instructions 1,745,463 (67.1%).

  • 266 upstream files, 8 unmerged paths — 5 zero-delta regen TUs upstream-taken, 3 manual hunks (QuestLog site-5 a zero-edit replant — the fork line already spelled upstream's new shape; Waypoint's wide-Y term re-planted on the ternary reshape; Direct3D's UploadTextureToCache onto the typed DC6Block* with the fix-22 halt-dump and fix-27 LUT stamp re-planted). Host shim PE structs renamed to _SHIM aliases.
  • Zero compile-fix rounds — battery green first try: gates 299/299, sweep 39 TUs / 0 errors, continuity census zero losses. Docs synced (9c8d430, Rev 103).
  • Field verdict: "Great job, another clean merge. builds, runs. no regressions."

R81 — waypoint row icons fixed at 720p (issue #21, closed)

Owner filed "[720p] Art not showing on Waypoints Panel" (narrowed to the per-waypoint button icons). Root cause, code-pinned: in DRAW_UI_Waypoint every top-anchored Y carried the site-6 wide-Y term from the 720p retrofit — except the two waygateicons row draws, which kept the vanilla decompile shape byte-identical since the initial recovery. At 720p the panel art, texts and hit zones ride +120 px while the icons stayed at retail Y: all nine row icons rendered ~120 px above their buttons (rows 0–5 fully above the panel), while clicks still landed — reading as "icons not showing".

  • Fix: + VPRES_GetWideUiOffsetY() + the // VP: [resolution site-6] marker on both draws. At 800×600 the offset is 0 — retail stays byte-for-byte; only the widescreen modes move.
  • Gates: site-6: waypoint Y shifts 10 → 12 (relabeled "(R81)"); 299/299.
  • Field verdict: "Great job waygateicons are back" — issue #21 closed.

R82 — shared stash: ten pages

Owner: "Let's increase the shared stash pages to 10 for R82" — the widening the .sss v2 format reserved room for back at R75 (the original roadmap said "If that works we'll do 10 pages. Then 100.").

  • 2 → 10 shared pages. Same VPS2 magic + version — only pageCount and the per-page size/checksum pair table grow: header 28 → 92 bytes (12 + 8/page). The two fixed page ingests became one per-page loop (page-1's verdict still drives the .bak chase; later pages degrade to empty).
  • Read-back chain: v1 files (one page) → page 1; pre-R82 v2 files (two pages) → pages 3–10 start empty (logged: v2 file has %d pages - pages %d..%d start empty (pre-R82 file)); the next save rewrites all ten. A file carrying more pages than the build holds is rejected whole, untouched, with a mark — it needs a newer binary.
  • Pager labels come from a bounds-guarded literal table (Shared … Shared 10); the arrows still step one page, the word still toggles personal↔shared-1, and there is one shared gold pool across all ten. Character .d2s saves stay retail-pure (the I1 invariant).
  • Gates 299 → 306 (7 new R82 rows + the ingest-helper count re-pin + self-id bump); fork TUs 4/4 host-compiled.
  • Field: the ten-page build boots and runs (the R83 fix was field-run on it); a dedicated ten-page pager pass is on the SMOKE list (§H items 33–34).

R83 — video-options "1280x720" label right-aligned (issue #23, closed)

Owner: "the literal resolution text '1280x720' in the video options is not aligned with the video options menu … everything else is correct at 720p — except that text." Screenshot-measured: the label ran a full label width (~100 px) right of the value column and floated ~4 px above the neighboring images' ink line.

  • Root cause (two engine conventions): DRAW_EscMenu draws the row's value images with alignment 2 — cell RIGHT edge on the anchor X — while the label text left-anchored at that same X; and DRAW_text's y anchors the glyph cell bottom (digit ink ~6 px above it) while the retail value DC6s bottom-anchor at the row bottom with ~4 px of baked padding under their ink.
  • Fix: right-align via the rendered advance width (DRAW_text0, the same metric the renderer advances by) and draw at row bottom + 2 (RESLABEL_DESCENDER_COMP), putting the ink at row bottom − 4 — exactly on the HIGH/ON baseline. The row-band math was already exact; the misanchor was purely in the text call, so the fix is resolution-independent — 800×600 picks up the same corrected placement.
  • Gates 306 → 308 (the two #23 anchor pins + self-id bump); fork TUs 4/4; the edited body additionally host-compile-checked via a stub harness.
  • Field verdict: "Great job. Text is aligned now." — issue #23 closed.

Upgrading

  • No new d2vp.ini keys in R77–R83; all six toggles unchanged and off by default; missing/garbage ini = retail byte-for-byte.
  • _d2vp_shared.sss upgrades automatically: v1 → page 1; pre-R82 two-page v2 → pages 3–10 start empty, next save rewrites ten. Older builds can't read ten-page files (rejected whole, file untouched).
  • Character saves stay retail-compatible in both directions — with the shared stash shipped or not.
  • Confirm the exe before testing: the first d2boot.log line self-IDs the build (Vanilla+0.0.7-R77 … Vanilla+0.0.7-R83).

Verification state at R83

  • Vanilla+ gates 308/308 green at the tip (tools/check-vanilla-plus.sh); fork TUs 4/4 host-compiled; boot telemetry, placement/branch audits and VP-marker continuity all clean through the three merges.
  • Every round in the span field-run on the Win11 build; both owner-filed 720p UI issues (#21, #23) fixed and confirmed in-game.

Still open

  • Issue #8 — Necro minion skeleton coloring remains the one known open issue.
  • SMOKE §H items 25/27 — the .d2s-loads-in-unmodified-retail proof and the checksum degrade drill — still owed on a 0.0.7 build.
  • SMOKE §H items 33–34 — the pager field pass, now worth re-running against the ten-page pager.

Full Changelog: R82...R83