characterfunction.dbss
Binary layout, byte coverage, field semantics, and validation evidence for the characterfunction decoder used by calpheonlabs.
Investigation status
| Status | Value |
|---|---|
| Coverage | 100% |
| Iteration | 3 |
| Review state | No open blockers |
| Last reviewed | 2026-07-16 |
| Captures examined | installed (2,083 rows), independent decoder, historical SQLite schema |
| Decoder | packages/scraper/src/tables/characterfunction.ts |
| Remaining blockers | None |
See Decoder methodology for the confidence scale and evidence rules.
Related table
characterfunctionoffset
Open the companion pointer directory used to frame and validate this payload.
Field ledger
| Field/path | Offset and width | Representation | Claimed meaning | Physical confidence | Representation confidence | Semantic confidence | Evidence | Status |
|---|---|---|---|---|---|---|---|---|
| companion key/span | offset directory | key returned; span controls omitted | row identity and boundary | Certain | Certain | Certain | Both decoders produce the same 2,083 key/offset/length triples; spans exactly partition the primary file | Closed |
CharacterFunctionString |
variable u32 codeUnits + u32 flags + UTF-16LE |
text returned; zero flags validated/omitted | menu label or availability expression | Certain | Certain | High | Every sequential string envelope decodes with zero flags; nonzero flag corruption rejects | Closed |
shop descriptor |
variable prefix | typed fields/strings; reserved byte omitted | shop/servant types and buying group | Certain | Certain | High | Sequential grammar, legacy client enums, and item-main-group joins | Closed |
groups |
variable middle | typed selectors/slots; reserved capacity omitted | selling, guild, trade, and auction groups | Certain | Certain | High | Fixed positions and exhaustive group correlations | Closed |
| fixed enabled slots | variable | label/condition plus strict Boolean | learn, repair, trace, and storage | Certain | Certain | High | Enable flags and comparable spawn capabilities agree on every shared row | Closed |
servantManagement |
variable | typed slot/profile/counted codes | stable/wharf/guild servant service | Certain | Certain | High | Self-framing list and legacy client vehicle enum | Closed |
| transport/conversation/guild creation | variable | typed slots and controls | transport and dialogue/name-tag services | Certain | Certain | High | Exact Boolean and reserved-byte structure | Closed |
| managed/governed lists | counted u32[] |
retained | nodes and territories | Certain | Certain | High | Self-framing counts and independent-decoder agreement | Closed |
additionalServices.lordInformation, .extraction, .knowledgeManagement, .skillAddon |
sequential variable slots + u8 |
forward label/condition and strict enable Boolean | fixed named services | Certain | Certain | High | Stable Korean labels; each enable Boolean equals label presence across all rows | Closed |
.minorLordInformation, .territorySupply, .legacyGuildSupply |
sequential variable slots; first two add u16 |
inactive slots retained; controls neutral | historical minor-lord, territory-supply, and guild-supply capacity | Certain | Certain | Medium | Historical CharacterFunction_Table column order fixes the positions; all current labels are empty and controls are 0, 0xffff, and absent respectively |
Closed neutral |
.imperialDelivery |
slot + u16 |
label/condition and territory key | Imperial delivery service and territory | Certain | Certain | High | Seven populated labels exactly equal seven non-sentinel territory keys and the spawn capability population | Closed |
.imperialCraftingDelivery, .imperialFishingDelivery |
each slot + u16 |
labels typed; adjacent selectors retained neutrally | Imperial crafting/fishing delivery; selector namespace unresolved | Certain | Certain | High for service; Medium for selector | Each 12-row label population exactly matches its nonzero selector and spawn capability; selector domains are {0,257} and {0,1} |
Closed neutral |
.stallionSkillExperienceTraining |
u8 |
strict Boolean | stallion skill-experience training | Certain | Certain | High | Historical column name plus three positive rows; all three are repair-capable stable/horse-market NPCs | Closed |
.gift, .equipmentPurification, .blackSpiritsAdventure |
condition then label + u8 |
reversed slots normalized to {label, condition} with strict enable Boolean |
fixed named services | Certain | Certain | High | Sequential cursor proves the reversed order; enable Boolean equals label presence for 24, 27, and 1 rows | Closed |
.centralMarket |
slot + u16 |
label/condition and territory key | Central Market service and territory | Certain | Certain | High | 21 labels exactly equal 21 non-sentinel keys and the central-market spawn population | Closed |
.barter |
slot + u16 |
label/condition and neutral selector | barter service; selector namespace unresolved | Certain | Certain | High for service; Medium for selector | 91 labels exactly equal 91 nonzero row-specific selectors | Closed neutral |
.sailorHiring |
slot + 5-byte struct | label/condition and neutral u8/u16/u16 tuple |
sailor hiring; tuple namespace unresolved | Certain | Certain | High for service; Medium for controls | 23 labels exactly use (0,1,1..23); all inactive rows use (2,0,0) |
Closed neutral |
.seasonSpecialGift, .arenaOfGlory |
each slot + u8 |
forward slot and strict enable Boolean | fixed named services | Certain | Certain | High | One populated label in each slot and exact enable correlation; inactive season rows retain <Null>/empty labels |
Closed |
.yarr.control |
slot + u8 |
service named; neighboring Boolean neutral | Yar service; wider control meaning unresolved | Certain | Certain | High for service; Unknown for control | Eight labels but nine positive controls; the extra key falsifies equivalence | Closed neutral |
.tier5PetTraining.enabled, .stableControl |
slot + two u8 |
two strict Booleans retained separately | Tier-5 pet training; second control meaning unresolved | Certain | Certain | High for service/first Boolean; Unknown for second | First Boolean exactly matches six labels; second is positive on 22 stable/repair rows | Closed neutral |
.lightstoneExchangePurification.control |
slot + u8 |
service named; neighboring Boolean neutral | lightstone exchange/purification; wider control meaning unresolved | Certain | Certain | High for service; Unknown for control | One label but 33 positive controls, so the control is not the service enable bit | Closed neutral |
.tradeStateCode |
trailer +0, u8 |
validated codes 1/2 | trade-row state | Certain | Certain | High | Code 1 is equivalent to a nonzero trade item-main-group on all 2,083 rows; code 2 covers all others | Closed |
.field01 |
trailer +1, u8 |
strict Boolean with offset-qualified neutral name | later-build control | Certain | Certain | Unknown | One positive row (character 62327); no total local correlation justifies a semantic name | Closed neutral |
| trailer reserved/marker | trailer +2..+6 |
four zero bytes and final marker 1 validated/omitted | framing only | Certain | Certain | Certain | Exact seven-byte trailer on every row; reserved and marker mutations reject | Closed |
Active assumptions
Findings
| ID | Finding | Evidence | Schema/documentation impact | Status |
|---|---|---|---|---|
| F-01 | The former opaque tail is a complete sequential grammar. | A single cursor consumes every companion-bounded row exactly: 21 label/condition slots, one standalone stallion Boolean, and a seven-byte trailer; no bytes remain. | additionalServiceData: remaining() was replaced by additionalServices. |
Closed |
| F-02 | The independent decoder corroborates labels but is not an oracle for empty-slot condition ownership. | All 2,774 service labels and every populated sequential condition agree; its arbitrary string scan can attach a later reversed-slot condition to an earlier empty slot. | Tests compare all labels and populated conditions while preserving the falsified legacy misassociation as evidence. | Closed |
| F-03 | Four newly typed service populations exactly match independent spawn capabilities. | Imperial delivery 7/7, Imperial crafting 12/12, Imperial fishing 12/12, and Central Market 21/21 agree bidirectionally on shared rows. | These service names moved from unknown tail bytes to High semantic confidence. | Closed |
| F-04 | Several adjacent controls are broader than their visible menu labels. | Yar is 9 controls vs. 8 labels, tier-5 stable control is 22 vs. 6, and lightstone control is 33 vs. 1. | Controls remain offset-qualified and semantically neutral instead of inheriting the neighboring service name. | Closed |
| F-05 | Tail framing and cross-field relationships reject corruption. | Tests mutate string flags, state/Boolean/reserved/marker bytes, the trade-state relationship, and the companion pointer. | Physical confidence is Certain rather than capture-only plausibility. | Closed |
Historical inactive-slot ordering and the stallion column name are corroborated by the archived CharacterFunction table schema; it is evidence only and is not a decoder dependency.