Repository navigation
Decode client 3464's buff and experience layouts - #6
Open
Hebilicious wants to merge 2 commits into
Open
Hebilicious wants to merge 2 commits into
Hebilicious wants to merge 2 commits into
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #7.
buildfails on the current global client (version 3464,pad00000.metadated 2026-10-07). Two tables changed layout:u32.buffoffset.dbssrows are 12 bytes (u32 key, u32 offset, u32 size), eachbuff.dbssrecord starts with au32index, and the buff list inskill.dbssholdsu32entries. The items stage failed withbuff: offset index has 832 usable rows, want 44683, and the world and NPC stages failed after it.experience.bssrecords 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 withexperience: 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:
buildagainst client 3464 runs every stage.hardcorecharacterstatstaticstatus.bssbyte for byte.go test ./...passes. The experience test now runs for both record sizes, and a new test covers theu32buff index and skill buff list.FORMATS.mdandCHANGELOG.mdare updated. Issue #5 is a separate problem: a Russian client with different errors.🤖 Generated with Claude Code