Skip to content

Decode client 3464's buff and experience layouts - #6

Open
Hebilicious wants to merge 2 commits into
iDevelopThings:mainfrom
Hebilicious:fix/current-client-layouts
Open

Hebilicious wants to merge 2 commits into
iDevelopThings:mainfrom
Hebilicious:fix/current-client-layouts

Conversation

@Hebilicious

@Hebilicious Hebilicious commented Oct 11, 2026 •

Copy link
Copy Markdown

Fixes #7.

build fails on the current global client (version 3464, pad00000.meta dated 2026-10-07). Two tables changed layout:

  • Buffs. Buffs are now keyed by u32. buffoffset.dbss rows are 12 bytes (u32 key, u32 offset, u32 size), each buff.dbss record starts with a u32 index, and the buff list in skill.dbss holds u32 entries. The items stage failed with buff: offset index has 832 usable rows, want 44683, and the world and NPC stages failed after it.
  • Experience. experience.bss records grew from 228 to 236 bytes. The zero block between the level and the character-stat structure went from 20 to 28 bytes. The character progression stage failed with experience: 1453240 record-area bytes do not tile into 29872-byte class groups.

Both decoders now detect the layout from the data, so older clients still decode. The 12-byte buff index is recognised when its declared rows fit at 12 bytes. The experience record size is whichever of 228 or 236 tiles the record area.

How I checked it:

  • A full build against client 3464 runs every stage.
  • The level-60 stat structure at its new offset matches all 47 rows of hardcorecharacterstatstaticstatus.bss byte for byte.
  • go test ./... passes. The experience test now runs for both record sizes, and a new test covers the u32 buff index and skill buff list.

FORMATS.md and CHANGELOG.md are updated. Issue #5 is a separate problem: a Russian client with different errors.

🤖 Generated with Claude Code

Hebilicious and others added 2 commits October 11, 2026 19:30
Client 3464 keys buffs by u32: buffoffset.dbss has 12-byte rows, each
buff.dbss record leads with a u32 index, and skill.dbss lists u32 buff
indices. Its experience.bss records grew from 228 to 236 bytes, with the
extra zero bytes before the shared character-stat structure. Detect both
layouts from the data so older clients keep decoding.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A u16 buff list read a u32 before choosing the width, which panics on a
record that ends on its last u16 index. Pin the experience test to
literal layouts so dropping one from the decoder fails it.
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.

build fails on client 3464: buff and experience tables can't be read

1 participant