{"scope":"save-selector script selection buffer and branch-state handlers","selectionBuffer":{"contextFieldHex":"0x000000a8","stateSlots":12,"interpretation":"Pointer to a per-script selection buffer addressed by byte offsets from stream+2. Opcodes 0x11, 0x12, and 0x13 use stream+2 as an offset into this buffer; the resulting byte selects one of 12 branch-state table slots."},"branchStateValues":{"0":"inactive/unavailable","1":"active/pass branch test","2":"visible but blocked or unmet condition"},"handlers":[{"opcodeHex":"0x10","handlerVa":4240542,"name":"build branch-state table","summary":"Chooses primary/secondary branch-state table from stream+1, passes stream+2 to helper 0x00410c90, then advances the script stream by 4 bytes.","evidence":["reads stream+1 and stream+2","references state tables 0x0059e370 and 0x0059e360","calls helper 0x00410c90"],"handlerVaHex":"0x0040b49e","signatureChecks":[{"signatureHex":"8a4002","found":true},{"signatureHex":"b860e35900","found":true},{"signatureHex":"b970e35900","found":true},{"signatureHex":"e8b9570000","found":true},{"signatureHex":"83404004","found":true}],"allSignaturesFound":true},{"opcodeHex":"0x11","handlerVa":4240614,"name":"branch on selected state","summary":"Reads index (context+0xa8)[stream+2], then tests stateTable[index]. State value 1 falls through by 8 bytes; any other value jumps to dword [stream+4].","evidence":["reads context+0xa8 as a pointer","reads stream+1 and stream+2","writes context+0x40 from dword [stream+4] on branch"],"handlerVaHex":"0x0040b4e6","signatureChecks":[{"signatureHex":"8b80a8000000","found":true},{"signatureHex":"8a1401","found":true},{"signatureHex":"8a0c02","found":true},{"signatureHex":"83f901","found":true},{"signatureHex":"8b4004","found":true},{"signatureHex":"894140","found":true}],"allSignaturesFound":true},{"opcodeHex":"0x12","handlerVa":4240735,"name":"select previous/next active state slot","summary":"Scans the 12-slot branch-state table for a nonzero entry, starting from (context+0xa8)[stream+2] when runtime flag 0x00457744 is set, stores the selected slot back into (context+0xa8)[stream+2], then advances by 4 bytes.","evidence":["uses 12-slot loop bounds","reads and writes context+0xa8[stream+2]","references runtime flag 0x00457744"],"handlerVaHex":"0x0040b55f","signatureChecks":[{"signatureHex":"a044774500","found":true},{"signatureHex":"8b80a8000000","found":true},{"signatureHex":"8a0401","found":true},{"signatureHex":"88040a","found":true},{"signatureHex":"837df40c","found":true},{"signatureHex":"83404004","found":true}],"allSignaturesFound":true},{"opcodeHex":"0x13","handlerVa":4241046,"name":"select matching runtime state slot","summary":"Computes the active slot base from 0x004576e9/0x00457750, clears (context+0xa8)[stream+2], scans 12 runtime slots, compares per-slot bytes from 0x0059e344 with slot fields +0x4a/+0x48, stores the matching slot index back into (context+0xa8)[stream+2], then advances by 4 bytes.","evidence":["reads current runtime object index 0x0059e33e","reads active order bytes 0x004576e9","computes 0x00457750 + activeOrder[index] * 0xd8","reads runtime comparison bytes from 0x0059e344","writes the selected slot index to context+0xa8[stream+2]"],"handlerVaHex":"0x0040b696","signatureChecks":[{"signatureHex":"a03ee35900","found":true},{"signatureHex":"8a88e9764500","found":true},{"signatureHex":"0550774500","found":true},{"signatureHex":"8b89a8000000","found":true},{"signatureHex":"88040a","found":true},{"signatureHex":"837df80c","found":true},{"signatureHex":"a044e35900","found":true},{"signatureHex":"8a54084a","found":true},{"signatureHex":"8a5c0848","found":true},{"signatureHex":"83404004","found":true}],"allSignaturesFound":true},{"opcodeHex":"helper","handlerVa":4263056,"name":"fill branch-state table","summary":"Dispatches by stream+2 value and fills a 12-byte state table. The simplest helper path writes 1 before the requested slot and 0 after it; later paths write 0/1/2 from party, menu, item, or progress-related runtime tables.","evidence":["jump table has cases 0..11","helper 0x00410de5 fills 12 slots with 1 then 0","other helper paths write state values 0, 1, and 2"],"handlerVaHex":"0x00410c90","signatureChecks":[{"signatureHex":"ff2485b00d4100","found":true},{"signatureHex":"c6040801","found":true},{"signatureHex":"c6040800","found":true},{"signatureHex":"c6040802","found":true}],"allSignaturesFound":true}],"helperJumpTable":{"tableVaHex":"0x00410db0","validCaseRangeHex":"0x00..0x0b","cases":[{"case":0,"caseVa":4263078,"calleeVa":4263397,"argument":"constant 2","pattern":"prefix fill: slots before N become 1, remaining slots become 0","stateValues":"1/0","persistenceRisk":"supports predecessor fill 0x00000210; produces slots 0..1 as 1","caseHex":"0x00","jumpTableEntryVaHex":"0x00410db0","caseVaHex":"0x00410ca6","calleeVaHex":"0x00410de5","actualCaseVaHex":"0x00410ca6","jumpTableMatches":true},{"case":1,"caseVa":4263097,"calleeVa":4263397,"argument":"constant 4","pattern":"prefix fill: slots before N become 1, remaining slots become 0","stateValues":"1/0","persistenceRisk":"would overwrite table with slots 0..3 as 1","caseHex":"0x01","jumpTableEntryVaHex":"0x00410db4","caseVaHex":"0x00410cb9","calleeVaHex":"0x00410de5","actualCaseVaHex":"0x00410cb9","jumpTableMatches":true},{"case":2,"caseVa":4263116,"calleeVa":4263397,"argument":"constant 5","pattern":"prefix fill: slots before N become 1, remaining slots become 0","stateValues":"1/0","persistenceRisk":"would overwrite table with slots 0..4 as 1","caseHex":"0x02","jumpTableEntryVaHex":"0x00410db8","caseVaHex":"0x00410ccc","calleeVaHex":"0x00410de5","actualCaseVaHex":"0x00410ccc","jumpTableMatches":true},{"case":3,"caseVa":4263135,"calleeVa":4263397,"argument":"constant 6","pattern":"prefix fill: slots before N become 1, remaining slots become 0","stateValues":"1/0","persistenceRisk":"would overwrite table with slots 0..5 as 1","caseHex":"0x03","jumpTableEntryVaHex":"0x00410dbc","caseVaHex":"0x00410cdf","calleeVaHex":"0x00410de5","actualCaseVaHex":"0x00410cdf","jumpTableMatches":true},{"case":4,"caseVa":4263154,"calleeVa":4263397,"argument":"byte 0x004576e8","pattern":"runtime prefix fill","stateValues":"1/0","persistenceRisk":"runtime value can overwrite the prefix width","caseHex":"0x04","jumpTableEntryVaHex":"0x00410dc0","caseVaHex":"0x00410cf2","calleeVaHex":"0x00410de5","actualCaseVaHex":"0x00410cf2","jumpTableMatches":true},{"case":5,"caseVa":4263177,"calleeVa":4263488,"argument":"constant 6","pattern":"party/item threshold table; missing entries 0, insufficient entries 2, pass entries 1","stateValues":"0/1/2","persistenceRisk":"runtime party/item state can rewrite the first six slots","caseHex":"0x05","jumpTableEntryVaHex":"0x00410dc4","caseVaHex":"0x00410d09","calleeVaHex":"0x00410e40","actualCaseVaHex":"0x00410d09","jumpTableMatches":true},{"case":6,"caseVa":4263196,"calleeVa":4263715,"argument":"constant 6","pattern":"paired runtime flags at 0x004576ec/0x004576ed; writes 0/2/1","stateValues":"0/1/2","persistenceRisk":"runtime flags can rewrite the first six slots","caseHex":"0x06","jumpTableEntryVaHex":"0x00410dc8","caseVaHex":"0x00410d1c","calleeVaHex":"0x00410f23","actualCaseVaHex":"0x00410d1c","jumpTableMatches":true},{"case":7,"caseVa":4263215,"calleeVa":4263876,"argument":"constant 6","pattern":"indexed table using 0x0059e33e, 0x0059e344, and 0x0045779a","stateValues":"0/1","persistenceRisk":"runtime table can rewrite the first six slots","caseHex":"0x07","jumpTableEntryVaHex":"0x00410dcc","caseVaHex":"0x00410d2f","calleeVaHex":"0x00410fc4","actualCaseVaHex":"0x00410d2f","jumpTableMatches":true},{"case":8,"caseVa":4263234,"calleeVa":4264040,"argument":"constant 5","pattern":"counts nonzero flags at 0x004576f8 and fills a derived prefix width","stateValues":"1/0","persistenceRisk":"runtime count can rewrite the first five slots","caseHex":"0x08","jumpTableEntryVaHex":"0x00410dd0","caseVaHex":"0x00410d42","calleeVaHex":"0x00411068","actualCaseVaHex":"0x00410d42","jumpTableMatches":true},{"case":9,"caseVa":4263253,"calleeVa":4264248,"argument":"constant 6","pattern":"runtime group from 0x0059e345 plus paired flags at 0x004576f8/0x004576f9","stateValues":"0/1/2","persistenceRisk":"runtime flags can rewrite the first six slots","caseHex":"0x09","jumpTableEntryVaHex":"0x00410dd4","caseVaHex":"0x00410d55","calleeVaHex":"0x00411138","actualCaseVaHex":"0x00410d55","jumpTableMatches":true},{"case":10,"caseVa":4263272,"calleeVa":4264421,"argument":"byte 0x004576e8","pattern":"compares object pointers from 0x0059db30 via helper 0x00433a30","stateValues":"1/0","persistenceRisk":"object comparison can rewrite a runtime-sized prefix","caseHex":"0x0a","jumpTableEntryVaHex":"0x00410dd8","caseVaHex":"0x00410d68","calleeVaHex":"0x004111e5","actualCaseVaHex":"0x00410d68","jumpTableMatches":true},{"case":11,"caseVa":4263295,"calleeVa":4264573,"argument":"word 0x0059db28","pattern":"checks object table 0x0059db3c field +0x62 bit 0x80","stateValues":"0/1","persistenceRisk":"object flags can rewrite a runtime-sized prefix","caseHex":"0x0b","jumpTableEntryVaHex":"0x00410ddc","caseVaHex":"0x00410d7f","calleeVaHex":"0x0041127d","actualCaseVaHex":"0x00410d7f","jumpTableMatches":true}]}}