# vm-map/opcodes.toml -- CANONICAL living opcode reference (hand-edited). # Generated artifacts (age_opcodes_himegari.py, build/opcodes.json, docs/opcode-reference.md, # build/opcode-coverage.md) come from this file via tools/opcodes_build.py --build. Do not edit those. # Skeletons are appended by --bootstrap; enrich each [opcode.semantics] as we investigate. [meta] instruction_model = "code = seq of then argc*(); len_dwords = 1 + 2*argc" opcodes_used_by_himegari = 248 inline_array_opcode = 0x64 [meta.arg_types] "0x0" = "imm" "0x1" = "float" "0x2" = "string" "0x3" = "global-int" "0x4" = "global-float" "0x5" = "global-string" "0x6" = "global-ptr" "0x8" = "global-string-ptr" "0x9" = "local-int" "0xa" = "local-float" "0xb" = "local-string" "0xc" = "local-ptr" "0xd" = "local-float-ptr" "0xe" = "local-string-ptr" "0x8003" = "type-0x8003" "0x8005" = "type-0x8005" "0x8009" = "type-0x8009" "0x800b" = "type-0x800B" [meta.header_fields] "F0" = "local_integer_1" "F1" = "local_floats" "F2" = "local_strings_1" "F3" = "local_integer_2" "F4" = "unknown_data" "F5" = "local_strings_2" "F6" = "sub_header_length(=0x1C)" "F7" = "table_1_length" "F8" = "table_1_offset(=code end)" "F9" = "table_2_length" "F10" = "table_2_offset" "F11" = "table_3_length" "F12" = "table_3_offset" [[opcode]] op = 0x1 label = "throw-exit-request" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "throw-exit-request" category = "control" summary = "() - raise Command_Exit_Exception with result value 1. The outer engine loop catches it, exits without advancing the VM PC, and returns control to the frontend. TITLE uses it for the fifth main-menu action; SYSTEM4 uses it after reporting an invalid execution mode." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1_throw_exit_request@0x4162e0 constructs a four-byte payload with value 1 and calls __CxxThrowException_8 with ThrowInfo 0x5a9710. Its CatchableTypeArray resolves to RTTI TypeDescriptor 0x5b13e8, `.?AVCommand_Exit_Exception@@`. The outer engine_main_tick_with_exception_policy@0x411840 has MSVC FuncInfo 0x5a9750; its typed catch entry maps Command_Exit_Exception to catch_CommandExitException_set_exit_result@0x412648, which forces result 1 and returns continuation 0x412961 for loop teardown/return. The dispatcher advances frame_pc only after a handler returns, and this catch never advances it. A separate generic error-dialog result-4 path at 0x412928 explicitly advances the PC, proving fall-through is opt-in and does not apply here. Corpus has exactly two sites: TITLE@0x393 after the fifth menu action's sound/sleep, and SYSTEM4@0x5b9 after printing 'invalid execution mode'. TITLE bytecode following 0x1 builds a developer debug menu and is unreachable in the retail native path. The frontend full-exit/return-to-title prompt remains a separate unimplemented boundary." [[opcode]] op = 0x2 label = "exit" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "exit" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Ghidra /v2: op_0xba_sfx_start_loop@0x420290 records a 3-dword instruction, fetches channel operand 1, and calls sfx_channel_start@0x4825d0 with logical loop mode 1. The same worker receives mode 0 from op 0xb5. sound_stream_fill_quarter@0x483b70 rewinds the decoder at EOF only for mode 1. All 334 Himegari sites pass literal channel 9 immediately after op 0xb4 loads that channel." [[opcode]] op = 0x3 label = "call-script" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "call-script" category = "control" summary = "load & call another SYS4 script by id; id = RAW index into the SYS4INI file table (asset-index). Pushes a script frame; returns to caller when the callee ends." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "native-RE (Ghidra): handler FUN_0041bc90 -> loader script_frame_load_resource@0x40e980 -> resolver asset_open_indexed_entry@0x44f390 indexes an 80-byte record table (FileDB+0x414 base, FileDB+0x40c count) at base+id*0x50 = the SYS4INI record layout {name[64],arc_id@0x40,file_number@0x44,offset@0x48,size@0x4c}. The FileDB is embedded at EngineCtx+0x9c24c, making those EngineCtx+0x9c660/+0x9c658. Confirmed statically: all 297 distinct base-corpus call-script ids resolve to a .BIN script with a semantically-exact name (0x1ab->ADDITEM, 0x2ae7->MES, 0x143->BUNKI, 0x329d->CALCREVISE), 0 out-of-range. See docs/engine-re.md + name-resolution.md #1." confirm_by = "" details = """ op 0x03 (call-script, argc 1): `call-script `. RESOLVED — the id is a direct RAW index into the SYS4INI global file table (the same table parse_sys4ini.py reads, but indexed WITHOUT skipping '@' placeholders; SYS4INI has 13208 records / 2 placeholders). No separate on-disk id->code registry exists; SYS4INI *is* the call-script registry. Native mechanism (dispatch table `handler(op)=ctx[0x26c93+op]`, op 0x03 -> FUN_0041bc90): 1. FUN_0041bc90 fetches operand 1 (id), bounds-checks call depth (<=0x26), pushes a frame. 2. FUN_0040e980 (loader): opens the resource by id, reads the 0x20-byte SYS4 header, checks magic, allocates per-frame code/local buffers from the header var-counts, reads the bytecode body, pushes a script frame (stride 0x1e = 30 dwords, indexed by ctx[0x14f45]). 3. asset_open_indexed_entry@0x44f390 (resolver): its `this` is the embedded FileDB, not EngineCtx. Base record = [FileDB+0x414] + id*0x50. It tries a LOOSE OVERRIDE first (CreateFileA on record.name -> mod/patch hook point), else opens archive [record.arc_id*0x100 + FileDB+0x410], SetFilePointer to record.offset, size = record.size. High-byte-tagged ids select [FileDB+0x3028 + signed_selector*4] and index the chosen AAI by the low 24 bits. The base corpus has 0/297 explicit high-byte call-script operands; INIT2 op 0x143 supplies mounted record-zero ids dynamically. Companion op 0x8f `call` is INTRA-script (a local JSR), not cross-script -- see its entry. This also names the whole call graph statically (build/callscript-names.json). """ [[opcode.semantics.args]] i = 1 role = "script id = raw SYS4INI file index" observed_types = ["imm", "g-int", "l-ptr"] [[opcode]] op = 0x5 label = "ret" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "ret" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode]] op = 0x6 label = "preload-script-slot" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "preload-script-slot" category = "control" summary = "(script_id, frame_slot) - load and allocate a script into a numbered engine context slot without executing it. Valid slots are 0..39." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x6_preload_script_slot@0x41bdb0 fetches script_id and frame_slot, saves the current context index, selects frame_slot, rejects values above 39, calls script_frame_load_resource(ctx+0x54fe8, script_id), restores the caller index, and throws on load failure. SYSTEM4's only three sites preload ATSEEK.BIN (0x337f) into slot 0x1d, SETROUTE.BIN (0x3380) into 0x1e, and MVSEEK.BIN (0x3381) into 0x1f before INIT2." details = "Implemented as persistent VM-owned preloaded slots containing the resolved script id and one reusable ExecFrame. Replacing a slot allocates a fresh frame/local bank; invalid slots, absent providers, and unresolved scripts halt diagnostically. Root scene reload clears the slots before SYSTEM4 registers them again." [[opcode.semantics.args]] i = 1 role = "script_id" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "frame_slot" observed_types = ["imm"] [[opcode]] op = 0x8 label = "call-preloaded-script-slot" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "call-preloaded-script-slot" category = "control" summary = "(frame_slot) - restart and execute the script previously loaded into that engine context slot, returning to the caller when it exits." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x6] evidence = "Ghidra /v2: op_0x8_call_preloaded_script_slot@0x41bf00 fetches frame_slot, switches cur_ctx_index to it, errors if frame_codebase is null, stores the caller context index into the selected slot's ctx_record_base, resets its PC to codebase and instruction length to zero, and returns to the dispatcher. op_0x2_exit_or_return_frame@0x417940 disposes only an adjacent child (parent+1==current); SYSTEM4's non-adjacent slots 0x1d..0x1f therefore retain their allocated local banks between calls. Corpus has 64 sites, exclusively slots 0x1d/0x1e/0x1f. FIELD uses 0x1f for MVSEEK, 0x1d for ATSEEK, and 0x1e for SETROUTE." details = "Implemented by recursively executing the reusable preloaded ExecFrame while preserving its local banks across invocations, restarting at script offset zero, and propagating halt/root-reload/exit outcomes like ordinary call-script. The port emits normal call-script trace events for observability. Focused tests prove code restart plus local persistence and drive the real MVSEEK through SYSTEM4's exact 0x06/0x08 ABI." [[opcode.semantics.args]] i = 1 role = "frame_slot" observed_types = ["imm"] [[opcode]] op = 0x9 label = "exit-script" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "exit-script" category = "control" summary = "() - discard the complete active script stack, reset scene-owned engine services, and load raw script resource 0 as the new root. The global VM banks and process-owned configuration survive; the initial-root-run flag queried by op 0x130 is cleared so LOGO/OP are not replayed." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x9_reset_scene_and_reload_root@0x418f50 clears EngineCtx+0x54ff0, disposes all 40 interpreter-frame slots with script_frame_dispose@0x40e610, aborts timed/input callback state, calls scene_context_init_reset@0x40b3b0, resets hotspot/input services, optionally releases AutoFreeTex surfaces, then calls script_frame_load_resource(...,0). The scene reset clears interpreter/ADV/input/retained-gfx state and normally releases the 1000 surface/movie slots; it does not clear the VM global bank or engine configuration. Corpus sites are terminal scene/control exits rather than ordinary local returns." details = "Implemented as a whole-stack root-reload boundary in the persistent VM. A request propagates through every nested call-script frame without resuming caller instructions, clears VM/host scene presentation and input state, cancels deferred SFX starts while preserving active/process-owned audio, preserves globals/external globals and process-owned host configuration/caches, then resolves raw resource 0 through the script provider and starts it at offset zero. The retained history backlog is deliberately preserved pending a separate proof of its native lifetime; recording suppression is reset." [[opcode]] op = 0x21 label = "u00418860" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "fade-surface-in-from-black" category = "draw" details = "Port status (2026-07-29, skip lifecycle corrected 2026-07-29): implemented through the blocking legacy full-frame transition host path. An explicit empty/black source endpoint is composited beneath the captured target. An already-active ADV fast-forward channel bypasses the timed service and publishes the target endpoint; logical action 4 forces an in-progress transition endpoint when system:EffectSkipOnClick is enabled." summary = "(surface_slot)(timing_argument) — block while fading from black to a captured full-frame surface. The captured surface remains the terminal frame." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x20c, 0x20d] evidence = "Ghidra /v2: dispatch slot 0x21 resolves to op_0x21_fade_surface_in_from_black@0x41cb00. With run_state_flags bit 0x08000000 clear, the handler sets effect-service bit 8, converts timing <=64 to interval=argument ms and alpha step=16 (otherwise interval=argument/16 and step=1), starts screen_transition_begin@0x439da0 mode 0, flushes the initiating trigger, and advances the PC. engine_main_tick_with_exception_policy@0x411840 owns natural progress and, when system:EffectSkipOnClick is enabled, forces action-4 clicks through screen_transition_tick@0x43a7a0 with delta 0x10000000. If fast-forward bit 0x08000000 was already set at dispatch, the handler instead publishes the operand-surface endpoint directly; it is not a post-transition re-entry. Corpus: 3 sites in EVOLVE, SELSTAGE, and STUDY, all (1,30), approximately 480 ms." [[opcode.semantics.args]] i = 1 role = "captured full-frame surface slot" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "transition timer interval / accelerated duration argument" observed_types = ["imm"] [[opcode]] op = 0x22 label = "u00418920" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "fade-surface-out-to-black" category = "draw" details = "Port status (2026-07-29, skip lifecycle corrected 2026-07-29): implemented through the blocking legacy full-frame transition host path. The captured source is composited beneath an explicit empty/black target endpoint. An already-active ADV fast-forward channel bypasses the timed service and publishes black; logical action 4 forces an in-progress transition endpoint when system:EffectSkipOnClick is enabled." summary = "(surface_slot)(timing_argument) — block while fading a captured full-frame surface to black. Black remains the terminal frame." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x20c, 0x20d] evidence = "Ghidra /v2: dispatch slot 0x22 resolves to op_0x22_fade_surface_out_to_black@0x41cbc0. With run_state_flags bit 0x08000000 clear, it uses the same timer/alpha-step conversion as 0x21/0x25, starts screen_transition_begin@0x439da0 mode 1, flushes the initiating trigger, and advances the PC. screen_transition_tick@0x43a7a0 keeps the operand surface opaque and raises black alpha 0->255; engine_main_tick_with_exception_policy@0x411840 owns natural and system:EffectSkipOnClick-forced completion. If fast-forward was already active at dispatch, the handler publishes black directly; it is not a post-transition re-entry. Corpus: 8 sites across ALCHEMY, CHMENU, EVOLVE, FORT, SELSTAGE, STUDY, and SUMMON, all (1,30), approximately 480 ms." [[opcode.semantics.args]] i = 1 role = "captured full-frame surface slot" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "transition timer interval / accelerated duration argument" observed_types = ["imm"] [[opcode]] op = 0x25 label = "u00418B40" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "crossfade-surfaces" category = "draw" summary = "(source_surface)(target_surface)(interval_argument) — blocking legacy full-frame mode-4 alpha transition. The native engine composites the captured target surface over the captured source while an 8-bit alpha accumulator advances from 0 to 256." details = "The handler uses an alpha step of 16 and timer interval=argument when argument <=64. Above 64 it uses step=1 and interval=argument/16. The main loop polls that timer and does not resume ordinary script execution until the target endpoint is presented. An already-active ADV fast-forward channel publishes the target without starting the service; with system:EffectSkipOnClick enabled, logical action 4 forces an in-progress service to the same endpoint. ROOM uses (1,2,10) for button/character entry and exit fades and (1,2,30) for the final fade before returning to TITLE. The port captures retained-frame snapshots whenever op 0x20c presents to a selected offscreen render target, then reproduces the blocking and forced-endpoint lifecycle in the interactive host." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x20c, 0x20d] evidence = "Ghidra /v2: dispatch handler op_0x25_handler@0x41ce00 checks ADV fast-forward bit 0x08000000. Clear: it sets effect-service bit 8, converts operand 3 to timer interval/alpha step (<=64: interval=arg ms and step=16; >64: interval=arg/16 ms and step=1), starts screen_transition_begin@0x439da0 mode 4, flushes the initiating trigger, and advances the PC. engine_main_tick_with_exception_policy@0x411840 polls interval_timer_poll_elapsed_steps@0x44d080 and calls screen_transition_tick@0x43a7a0; mode 4 draws source then target with progress alpha and commits target at 0x100. With system:EffectSkipOnClick enabled, logical action 4 is consumed and delta 0x10000000 forces that endpoint. If fast-forward was already set at dispatch, the handler calls screen_transition_finalize@0x4399c0 for the target directly; this is not post-transition re-entry. Thus ROOM argument 10 is about 160 ms and argument 30 about 480 ms. ROOM sites: 0x12f,0x7c6,0x856 use (1,2,10); 0x8dc uses (1,2,30). /v2 annotations corrected 2026-07-29." [[opcode.semantics.args]] i = 1 role = "captured source surface" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "captured target surface" observed_types = ["imm"] [[opcode.semantics.args]] i = 3 role = "transition timer interval / accelerated duration argument" observed_types = ["imm"] [[opcode]] op = 0x50 label = "add" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "add" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x51 label = "sub" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "sub" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x52 label = "mul" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "mul" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x53 label = "div" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "div" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x54 label = "mod" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "mod" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "l-int", "l-ptr"] [[opcode]] op = 0x55 label = "mov" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "mov" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x56 label = "and" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "and" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x57 label = "or" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "or" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x58 label = "sar" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "sar" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm"] [[opcode]] op = 0x59 label = "shl" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "shl" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "l-int", "l-ptr"] [[opcode]] op = 0x5a label = "eq" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "eq" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x5b label = "ne" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "ne" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x5c label = "lt" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "lt" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x5d label = "lte" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "lte" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x5e label = "gr" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "gr" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x5f label = "gre" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "gre" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x60 label = "u0041A270" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "random-modulo" category = "compute" summary = "(destination)(bound) — write CRT rand() % bound. A bound of zero first writes zero and then raises the engine's script error." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x60_handler@0x426970 calls imported CRT rand(), fetches operand 2, takes signed remainder, and writes operand 1. The zero-bound branch writes zero then throws error 0x10005. ROOM@0x5 calls (local 0x110,4), and its following branches select one of four character surface sets; variants 0..2 also select voice-id sextets. /v2 annotated and saved 2026-07-21." [[opcode.semantics.args]] i = 1 role = "random remainder destination" observed_types = ["l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "exclusive modulus bound" observed_types = ["imm", "l-int", "l-ptr"] [[opcode]] op = 0x61 label = "lookup-array" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "lookup-array" category = "compute" summary = "Take a typed reference to base[index], preserving whether the base belongs to local or global storage." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "HISTORY.BIN copies x/y tables into local-int cells 0x4 and 0x68, then lookup-array local-ptr <- local-int base supplies every right-side button and hovered-row draw coordinate. Treating the local operand's current value as a global base collapses those draws to (0,0); retaining the local address yields the native x=768/y=121..549 positions. RECOVER.BIN independently exercises the same pointer destination with global bases." details = "Operand 2 names the base cell itself: a global-bank operand produces a global reference and a local-bank operand produces a local reference. Operand 3 is added as the element offset. Pointer destinations retain that address domain; reading or writing the pointer dereferences the corresponding bank. Non-pointer destinations receive the addressed value. The same domain-preserving address model applies to lookup-array-2d (0x12c)." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["l-ptr", "l-str-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["g-int", "g-str", "l-int", "l-str"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode]] op = 0x63 label = "take-address" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "take-address" category = "compute" summary = "(destination_pointer)(source) - store the underlying typed storage address of source in destination_pointer; a pointer source aliases its existing target." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2 op_0x63_take_address@0x426ac0 calls vm_operand_resolve_address@0x425a50 for operand 2 with unsubscripted indices -1/-1, then vm_pointer_operand_write@0x416090 for operand 1. The resolver returns a backing-cell address for direct global/local integer or string operands and the already-stored target for pointer operands. Corpus: 92 calls; destination is always local-ptr, while sources are local-ptr x81, local-int x7, and global-int x4. The C# VM preserves the local/global address domain and supports the native string-pointer destination forms; the traced natural boot reaches the UNITECH/CALCCC pair without fallback." [[opcode.semantics.args]] i = 1 role = "destination pointer" observed_types = ["l-ptr"] [[opcode.semantics.args]] i = 2 role = "source addressable cell or pointer target" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode]] op = 0x64 label = "copy-inline-int-array" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "copy-inline-int-array" category = "compute" summary = "(destination)(inline_blob_offset) - decode the count-prefixed integer literal blob at codebase + offset*4 and copy its values to consecutive VM integer cells beginning at destination." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x64_handler@0x426b00 resolves operand 1 as a writable VM address, reads a count dword followed by values from frame_codebase + operand2*4, reverses the native loader's rotate/XOR in-memory representation with anti_tamper_a, and writes consecutive dwords. The original SYS4 file footer stores the count and values plainly; HISTORY.BIN uses 15 blobs to initialize its rectangle, coordinate, and lookup arrays." [[opcode.semantics.args]] i = 1 role = "destination first integer" observed_types = ["g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "inline blob dword offset" observed_types = ["imm"] [[opcode]] op = 0x6c label = "copy-to-global" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "zero-int-range" category = "compute" summary = "(destination)(count) — write logical integer zero to count consecutive VM cells beginning at the resolved destination." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x6c_handler@0x426d90 resolves operand 1 as a writable VM pointer and fills operand-2 consecutive dwords with ctx->anti_tamper_b, the native encoded representation of logical integer zero. INITCONFIG@0x30 clears G[0x2e49..0x2e55] before registering those 13 profile cells; treating operand 2 as a scalar source incorrectly wrote 13 to G[0x2e49] and disabled ROOM's character greeting/farewell voices. /v2 annotated and saved 2026-07-21." [[opcode.semantics.args]] i = 1 role = "first integer destination" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "consecutive cell count" observed_types = ["imm", "l-int"] [[opcode]] op = 0x6e label = "show-text" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "show-text" category = "adv" summary = "(layout_slot)(text) - build and publish a retained text run in the selected ADV layout, using the current glyph delay and raster style; slot zero selects the current layout." details = "The live 20-byte glyph record is {chain_flag,left,top,right,bottom}; rectangle members are edges. Overflow bits use strict bound `$1$AUTORUN.BIN` -> `$1$EBINIT.BIN` -> TUNE. """ [[opcode]] op = 0x144 label = "edit-fullwidth-string-dialog" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "edit-fullwidth-string-dialog" category = "input" summary = "(result_inout)(initial_text) - synchronously open AGERC's modal full-width text editor. Accept writes at most eight valid CP932 double-byte characters to operand 1; cancel leaves operand 1 unchanged. Operand 2 supplies the initial edit text and is preserved." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "The real /v2 dispatch slot registers op_0x144_edit_fullwidth_string_dialog@0x42bdd0. It copies both resolved string operands into 0x400-byte buffers, calls the runtime host callback g_pfnAgercHostCallback with command 10 and owner HWND, then writes both returned buffers back. A read-only Frida probe of the pristine game resolved that callback to AGERC.DLL+0x1050. Imported /support/AGERC.DLL shows agerc_dispatch_host_command@0x100025f0 opening dialog resource 10 with agerc_fullwidth_text_dialog_proc@0x10002140: edit control 1006 is initialized from operand 2; IDOK rejects more than 16 bytes (`字数オーバーです`) or any non-DBCS cell (`半角文字は使用できません`) before copying the accepted text to operand 1; IDCANCEL closes without changing operand 1. INPUTNAME's sole site at 0xdcd passes its assembled current name in both operands, then resplits operand 1 through 0x2c6/0x2c8." details = """ This is INPUTNAME's optional native keyboard-entry button, not the surrounding script-authored character palette. The VM can use a synchronous host seam like the existing diagnostic dialog because the Godot host runs script execution on its worker thread while the main thread owns the modal UI. Compatibility requires the native full-width-only and 16-CP932-byte limits before accepting the result. Port status (2026-07-29): implemented. The VM issues an explicit accept/cancel request through IHost; headless hosts preserve the inout value by default. Godot parks the VM worker, opens a main-thread modal LineEdit, keeps it open on either native validation error, and resumes the worker only after valid accept or cancel. Accept replaces operand 1 and cancel leaves it untouched; operand 2 is never modified. """ [[opcode.semantics.args]] i = 1 role = "result/inout string" observed_types = ["l-str"] [[opcode.semantics.args]] i = 2 role = "initial edit text" observed_types = ["l-str"] [[opcode]] op = 0x149 label = "set-system-menu-show-delay" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-system-menu-show-delay" category = "input" summary = "(milliseconds) - replace the unsigned dwell threshold before pointer hover at the top two client rows reveals AGERC's modeless system-menu strip. Scene reset defaults to 0; SYSTEM4 sets 1000." details = "Port status (2026-07-29): implemented as unsigned scene-context state. The setter preserves all 32 operand bits, root scene reload restores zero, and the current Godot frontend deliberately adds no host effect because it has no AGERC application-menu strip." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x149_set_system_menu_show_delay@0x422050 directly stores operand 1 at EngineCtx+0x5511c; scene_context_init_reset writes 0 and paired op_0x148_get_system_menu_show_delay@0x429c70 reads it. system_menu_top_edge_dwell_timer_tick@0x486280 compares the field unsigned against timeGetTime elapsed while WM_MOUSEMOVE is in client y=0..1, then requires no left/right button, windowed ScreenMode, and g_pfnAgercHostCallback(-1)==0 before system_menu_strip_show@0x407bd0 invokes AGERC command 4. The handler uses the complete dword. SYSTEM4's sole site sets 1000 immediately before the unrelated tiled-surface edge setting." [[opcode.semantics.args]] i = 1 role = "unsigned top-edge system-menu dwell threshold in milliseconds" observed_types = ["imm"] [[opcode]] op = 0x191 label = "absolute-value" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "absolute-value" category = "compute" summary = "Write the signed 32-bit absolute value of operand 2 to operand 1." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x191_handler@0x426de0 computes (value ^ (value >> 31)) - (value >> 31) and writes it through vm_operand_write. All five Himegari calls are in SELACT, where it normalizes a signed preview delta before drawing it." [[opcode.semantics.args]] i = 1 role = "out_absolute_value" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "value" observed_types = ["g-int"] [[opcode]] op = 0x192 label = "set-string" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-string" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-str", "l-str", "l-str-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["string", "g-int", "g-str", "l-str", "l-str-ptr"] [[opcode]] op = 0x193 label = "concat" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "concat" category = "compute" summary = "Concatenate operand 2 followed by operand 3 and replace the destination string. Sources are resolved before the write, so destination/source aliasing is supported." noop_headless = false source = "inference" confidence = "high" depends_on = [] evidence = "Kelebek identifies param1 = param2.concat(param3). Corpus ordering confirms direction and aliasing: ADDEXP builds level/result messages with both literal-prefix concat(dst, literal, dst) and append concat(dst, dst, literal); BTL has eight calls." [[opcode.semantics.args]] i = 1 role = "destination" observed_types = ["g-str", "l-str"] [[opcode.semantics.args]] i = 2 role = "left" observed_types = ["string", "g-str", "l-str", "l-str-ptr"] [[opcode.semantics.args]] i = 3 role = "right" observed_types = ["string", "g-str", "l-str", "l-ptr", "l-str-ptr"] [[opcode]] op = 0x194 label = "string-equals" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "string-equals" category = "compute" summary = "(out)(left)(right) - compare two complete SYS4 strings and write 1 when equal, otherwise 0." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2 op_0x194_string_equals@0x426e20 fetches operands 2 and 3 through the string resolver, compares their byte ranges through FUN_004017a0, and writes compare_result==0 to integer operand 1. INIT2 and GAMESTART use it as a branch predicate for INPUTNAME/default-name handling; the natural Game Start diagnostic reached one GAMESTART call at 0x134c. The C# VM implements ordinal equality through the shared string resolver, covering literal, global, local, global-string-pointer, and local-string-pointer operands; the traced natural-boot regression proves the reached GAMESTART call no longer falls back." [[opcode.semantics.args]] i = 1 role = "out" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "left" observed_types = ["g-str", "l-str", "l-str-ptr"] [[opcode.semantics.args]] i = 3 role = "right" observed_types = ["string", "l-str", "l-str-ptr"] [[opcode]] op = 0x195 label = "string-not-equals" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "string-not-equals" category = "compute" summary = "(out)(left)(right) - compare two complete SYS4 strings and write 1 when different, otherwise 0." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: dispatch slot ctx[0x26c93+0x195] is op_0x195_string_not_equals@0x426f20. It resolves operands 2 and 3 as engine strings, compares their complete byte ranges through the same worker as sibling op 0x194, and writes compare_result!=0 to operand 1. Corpus: 17 sites; 15 immediately branch on the result. BUNKI uses three comparisons against the empty string for its optional title row." details = "This is the logical inverse of op 0x194 string-equals. Skipping it is stateful: the destination is not cleared. At BUNKI@0x905, local 0x99 still contains a nonzero graphics handle, so the missing write falsely reserves a 30-pixel title row and shifts every choice down. The C# VM implements ordinal inequality through the shared string resolver; focused tests cover literal/global/local/pointer operands and the exact empty-title stale-handle overwrite." [[opcode.semantics.args]] i = 1 role = "out" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "left" observed_types = ["g-str", "l-str", "l-str-ptr"] [[opcode.semantics.args]] i = 3 role = "right" observed_types = ["string", "g-str"] [[opcode]] op = 0x196 label = "display-furigana" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "display-furigana" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["string"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["string"] [[opcode]] op = 0x197 label = "set-ruby-font-size" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-ruby-font-size" category = "adv" summary = "(pixels) - set the secondary/ruby text font height and rebuild its native rasterization state." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x197_handler@0x41f3b0 calls the parallel secondary-font size worker at 0x415c40 on ctx+0x14940, which updates the second LOGFONT pair and rebuilds it. UI font preset sequences consistently set primary size through 0x75 and the smaller ruby size through 0x197; HISTORY.BIN uses 22/8." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm"] [[opcode]] op = 0x198 label = "set-adv-text-layout-origin" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-adv-text-layout-origin" category = "adv" summary = "(layout_slot)(x)(y) - set the selected ADV text layout's presentation origin; slot 0 selects the current layout." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x198_handler@0x41f3f0 passes all three operands to adv_text_layout_set_origin@0x44ff30 on ctx+0x14940. The worker resolves slot 0 to current and writes x/y to layout+0x0c/+0x10. HISTORY.BIN positions its dynamically selected backlog layout with this opcode." [[opcode.semantics.args]] i = 1 role = "layout slot" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 2 role = "origin x" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 3 role = "origin y" observed_types = ["imm", "l-int"] [[opcode]] op = 0x199 label = "u00414D50" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "yield-adv-coroutine" category = "control" summary = "Yield/re-enter the registered ADV coroutine handler. The fifth standard chrome button uses this transition to enter the HIDEWIN/window-hidden flow." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x199_yield_adv_coroutine@0x416440 selects the registered coroutine yield-A or yield-B PC according to ctx+0x6dbc8, saves the current resume offset/state, and redirects the current frame PC. SC0000's x=772 ADV button invokes it; the SO001 tooltip at source x=528 reads Window hide, and the surrounding coroutine calls HIDEWIN.BIN." [[opcode]] op = 0x19a label = "u00414E50" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "get-message-skip" category = "input" summary = "(out) - return the current all-message skip state set by op 0x88." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x19a_get_message_skip@0x4271b0 writes ctx+0x550fc to operand 1. The shared ADV redraw routine uses it to select SO001's active Message-skip icon at x=728." [[opcode.semantics.args]] i = 1 role = "output enabled" observed_types = ["g-int"] [[opcode]] op = 0x19b label = "u00414E80" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "suspend-adv-skip-service" category = "input" summary = "() - suspend persistent/read-driven ADV fast-forward while preserving the user's all-message Skip toggle; physically held logical action 6 is independent." details = "This lifecycle operation affects persistent/read-driven active Skip only. Physical logical action 6 is process input polled independently by adv_interpreter_tick and remains active while held." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x19b_suspend_adv_skip_service@0x416560 clears run-state bit 0x08000000, ctx+0x13dc active message skip, ctx+0x55100 ADV skip-service enable, and the click-cancel phase, but deliberately leaves ctx+0x550fc persistent all-message Skip unchanged. It does not mutate the input manager; adv_interpreter_tick@0x410fb0 polls logical action 6 (mask bit 0x40) independently of ctx+0x55100. Corpus comments call the opcode `savemesskip`; ADV-end/branch and CALLBACK_LOAD paths use it before leaving ADV presentation." [[opcode]] op = 0x19c label = "u00414EC0" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "resume-adv-skip-service" category = "input" summary = "() - enable the persistent/read ADV skip service and recompute active fast-forward from all-message Skip or the live read-skip channel; physical action 6 remains independent." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x19c_resume_adv_skip_service@0x4165a0 sets ctx+0x55100, clears the click-cancel phase, and normally activates run-state bit 0x08000000 when ctx+0x550fc persistent all-message Skip or ctx+0x6dbd4 adv_read_skip_state is nonzero. Otherwise it clears ctx+0x13dc and the run-state bit. A separate startup fast-forward guard at ctx+0x6f86c suppresses reactivation while active. Corpus comments call it `loadmesskip`; ADV setup, branch, and CALLBACK_LOAD paths pair it with op 0x19b." [[opcode]] op = 0x19d label = "is-catalog-resource-unlocked" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "is-catalog-resource-unlocked" category = "compute" summary = "(out)(packed_resource_id) - return 1 when the shared SAVE.DAT catalog marker for the selected base or append resource decodes to AGE's deterministic per-index unlock stamp, otherwise 0." noop_headless = false source = "investigation" confidence = "high" depends_on = [] details = "Base ids use the low 24-bit index in the primary catalog marker table. A nonzero high-byte selector addresses that append catalog's independent table; selectors require SaveVersion 3.10 or later, and AGE's signed selector lookup only supports 1..127. Successful native catalog opens write the stamp `low16(index * 0x053d6f99 + 0xb0b0b0b0)` and its encrypted SAVE.DAT form. CGMODE tests CGINIT image ids and HMODE tests SPINIT scene-script ids through this predicate. Port status (2026-07-28): shared-profile import decodes both catalog sections, successful VFS opens mark resources, shared SAVE.DAT writes native-decodable encrypted markers, and the opcode returns the live profile predicate." evidence = "Ghidra /v2: op_0x19d_handler@0x427810 fetches operand 2, rejects packed append ids when `set:SaveVersion1/2` is older than 3.10, calls asset_catalog_is_resource_unlocked@0x415920 on ctx+0x9c24c, and writes the bool to operand 1. The helper selects base table +0x41c or append pointer table +0x3844 and compares the stored low word to `(short)index * 0x6f99 - 0x4f50`. asset_catalog_mark_resource_opened@0x44e410 writes the equivalent full stamp and encrypted profile marker after asset_open_indexed_entry succeeds. shared_profile_load decodes the catalog arrays with modular exponentiation before populating those tables. Corpus: four calls, in CGMODE, HMODE, MMODE, and ED. The installed port SAVE.DAT decodes to 7,966/13,208 base markers and 75/81 append markers; all 851 CGINIT gallery images and all 118 SPINIT H-scene scripts validate unlocked." [[opcode.semantics.args]] i = 1 role = "out" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "packed_resource_id" observed_types = ["imm", "l-ptr"] [[opcode]] op = 0x19e label = "save-numbered-slot" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "save-numbered-slot" category = "control" summary = "(status_out)(slot) - write the active native VM/session state to `SAVE%02d.DAT`. The file is truncated/replaced in place after any compatibility-overwrite prompt; successful serialization also flushes shared `SAVE.DAT`/`RT.DAT`." details = "Uses `set:SaveVersion1` and `set:SaveVersion2` to choose the numbered payload layout. Status is 0 on success and 1 on refusal, open/create failure, or serializer failure. Numbered `.DAT` files do not use the shared profile's temp/backup replacement scheme. Port status (2026-07-24): layout 3 writes fixed state, six native banks, T1/T2/T3 frame records, surface/resource reload state, retained gfx records, the appended history tail, and then flushes shared SAVE.DAT/RT.DAT." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x19e_save_numbered_slot@0x4278b0 formats SAVE%2.2d.DAT, checks an existing header and prompts before replacing an incompatible file, opens CREATE_ALWAYS, reads set:SaveVersion2 then set:SaveVersion1, and calls context_state_serialize@0x40d320. Corpus: two calls in SAVE.BIN and SELSTAGE.BIN." [[opcode.semantics.args]] i = 1 role = "status output" observed_types = ["g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "numbered slot" observed_types = ["g-int", "l-int"] [[opcode]] op = 0x19f label = "load-numbered-slot-data-only" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "load-numbered-slot-data-only" category = "control" summary = "(status_out)(slot) - decode `SAVE%02d.DAT` without restoring the active script-frame chain or text history." details = "This is the data-only companion to full-resume opcode 0x1a1. It selects the configured SaveVersion layout and restores serialized state with both runtime/history restore flags clear. Himegari's shipped script corpus does not call it, but it belongs to the shared SYS4 persistence ABI. Port status (2026-07-24): implemented for layout 3 through the same bank/resource/gfx decoder without activating history or frame restoration." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x19f_load_numbered_slot_data_only@0x427a40 opens SAVE%2.2d.DAT and calls save_data_deserialize_and_begin_restore@0x40fd10(handle, SaveVersion1, SaveVersion2, 0, 0), then decodes protected integer globals. Missing/open failure writes status 1; otherwise the decoder result is returned. Corpus count: 0." [[opcode.semantics.args]] i = 1 role = "status output" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "numbered slot" observed_types = ["l-int"] [[opcode]] op = 0x1a0 label = "query-numbered-save-metadata" argc = 9 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "query-numbered-save-metadata" category = "control" summary = "(status_out)(slot)(year)(month)(day)(hour)(minute)(second)(playtime_seconds) - validate a numbered `.DAT` header and return its timestamp and accumulated playtime." details = "Status 0 means valid metadata was written, 1 means the file could not be opened, and 2 means its native header was invalid or incompatible. Metadata comes from the fixed 0x124-byte S3SD/S4SD container header; no payload decode is needed. Himegari numbered files use compatibility id 0x42323234, distinct from shared SAVE.DAT/RT.DAT id 0x4a343234. Port status (2026-07-24): implemented through the native directory store with fixed-header-only reads." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1a0_query_numbered_save_metadata@0x427ba0 calls save_container_read_and_validate_header@0x4306f0. It reads SYSTEMTIME WORDs at header +0x108/+0x10a/+0x10e/+0x110/+0x112/+0x114 and DWORD accumulated playtime at +0x118. Corpus: three calls in SAVE.BIN." [[opcode.semantics.args]] i = 1 role = "status output" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "numbered slot" observed_types = ["l-int"] [[opcode.semantics.args]] i = 3 role = "year output" observed_types = ["l-int"] [[opcode.semantics.args]] i = 4 role = "month output" observed_types = ["l-int"] [[opcode.semantics.args]] i = 5 role = "day output" observed_types = ["l-int"] [[opcode.semantics.args]] i = 6 role = "hour output" observed_types = ["l-int"] [[opcode.semantics.args]] i = 7 role = "minute output" observed_types = ["l-int"] [[opcode.semantics.args]] i = 8 role = "second output" observed_types = ["l-int"] [[opcode.semantics.args]] i = 9 role = "accumulated playtime seconds output" observed_types = ["l-int"] [[opcode]] op = 0x1a1 label = "load-numbered-slot-and-resume" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "load-numbered-slot-and-resume" category = "control" summary = "(status_out)(slot) - fully load `SAVE%02d.DAT`, including saved script frames and text history, then resume through `CALLBACK_LOAD.BIN` and opcode 0xae." details = "The caller pre-seeds status to zero. A missing/open failure writes 1; success starts the asynchronous native stack-restoration rendezvous and does not overwrite that zero. This is the ordinary load-game path, unlike data-only opcode 0x19f. Port status (2026-07-24): layout 3 restores banks, history, surfaces/resources, and retained gfx, unwinds the obsolete managed call chain, then reconstructs saved frames through opcode 0xae." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1a1_load_numbered_slot_and_resume@0x427d30 calls save_data_deserialize_and_begin_restore@0x40fd10(handle, SaveVersion1, SaveVersion2, 1, 1), closes the file, and decodes protected integer globals. The loader activates the saved-frame state consumed by op_0xae. Corpus: one call in SAVE.BIN." [[opcode.semantics.args]] i = 1 role = "status output" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "numbered slot" observed_types = ["l-int"] [[opcode]] op = 0x1a2 label = "store-shared-profile-int" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "store-shared-profile-int" category = "control" summary = "0x1a2 (cell) — snapshot the selected global integer cell into AGE's shared SAVE.DAT profile table. Its native key is raw type byte `0x03` followed by eight lowercase ASCII hex digits for the lvalue's resolved global-bank index; the stored value is the cell's current raw 32-bit value. Insert-or-assign semantics replace an existing entry." details = "Paired reader 0x1a3 restores the same cell, returning zero when the key is absent. The table is embedded at ctx+0x5190, explicitly enumerated by shared_profile_payload_write into shared SAVE.DAT, and reconstructed by shared_profile_payload_read. It is not the retained gfx map, numbered SAVE##.DAT state, or RT.DAT ReadTextDB. Port status (2026-07-24): implemented through profile-owned SharedProfile state shared across fresh scene VMs and the native shared-payload/store lifecycle; direct globals and resolved global local-pointers are covered." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1a2_store_shared_profile_int@0x42d360 reads operand 1 with vm_operand_fetch, resolves its cell index with vm_operand_lvalue (accepted types 3/6/0xc), formats `3%08x`, and calls hash_table_insert_or_assign with ECX=ctx+0x5190. shared_profile_payload_write@0x430a20 serializes each 12-byte key plus 32-bit value to SAVE.DAT. Corpus: 17,585 calls in 315 scripts; 17,539 use local-ptr after lookup-array and 46 use global-int." [[opcode.semantics.args]] i = 1 role = "global integer cell to snapshot" observed_types = ["g-int", "l-ptr"] [[opcode]] op = 0x1a3 label = "load-shared-profile-int" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "load-shared-profile-int" category = "control" summary = "0x1a3 (cell) — restore the selected global integer cell from AGE's shared SAVE.DAT profile table. It resolves the same raw `0x03` plus eight-hex-digit cell-address key as 0x1a2 and overwrites the operand with the stored raw 32-bit value, or zero when the key is absent." details = "This is the read half of the shared-profile integer service, not a string operation. LOADCONFIG.BIN restores configuration globals with it; GAMESTART/GAMECLEAR and array-pointer call sites restore other selected profile-wide values. Port status (2026-07-24): implemented with 0x1a2 through the shared profile service and native payload codec." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1a3_load_shared_profile_int@0x427e90 resolves operand 1 with vm_operand_lvalue, calls shared_profile_int_lookup@0x4199d0 with the shared-profile object at ctx+0x4d7c, then vm_operand_write stores the result. The wrapper searches the table at object+0x414 = ctx+0x5190 and returns zero on a miss. Current override-aware corpus: 77 calls in 12 scripts." [[opcode.semantics.args]] i = 1 role = "global integer cell to restore" observed_types = ["g-int", "l-ptr"] [[opcode]] op = 0x1a4 label = "set-text-effect-offset" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-text-effect-offset" category = "adv" summary = "(x)(y) - set the horizontal and vertical extent/offset used by the current text effect mode." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1a4_set_text_effect_offset@0x41f440 writes operands 1/2 to text-manager+0x564/+0x568. Mode 1 uses them as a single displaced effect-color shadow. Mode 3 treats them as ellipse radii and samples x=cos(angle)*offset_x, y=sin(angle)*offset_y around the glyph before the primary draw. The Himegari corpus pairs mode 1 with (0,0) at all 43 sites and mode 3 with (1,1) at all 164 paired sites." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm"] [[opcode]] op = 0x1a5 label = "set-font" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-font" category = "adv" summary = "(face) - select the primary GDI font face, derive its vertical-writing companion, and rebuild the native font/glyph state." details = "The requested CP932 face is copied into the primary LOGFONT lfFaceName and AGE also constructs an @-prefixed vertical face. Himegari uses only the full-width Windows family names MS 明朝 (168 sites) and MS ゴシック (39 sites). This is live raster state, not a declaration/no-op." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1a5_set_font_face@0x42bbf0 resolves operand 1 and calls text_set_primary_font_face@0x42b1d0 on ctx+0x14940. The worker copies the face to manager+0x4e8, formats @%s into the vertical LOGFONT state at +0x18e74, rebuilds CreateFontIndirectA handles/metrics/glyph buffers through text_rebuild_primary_font_resources@0x44f7f0, and maintains both names in its font-family caches. SYS4INI seeds FONT=MS 明朝." [[opcode.semantics.args]] i = 1 role = "CP932 GDI face name" observed_types = ["string"] [[opcode]] op = 0x1a6 label = "halve-strlen" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "half-byte-string-length" category = "compute" summary = "Write half the resolved string's byte length, using integer truncation." details = "Native applies strlen to the NUL-terminated engine byte string and shifts the byte count right by one. DRAWCHP uses this Shift-JIS-oriented width proxy to center unit and weapon names before rasterizing them into a scratch surface." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1a6_half_byte_strlen@0x427020 resolves operand 2, scans to NUL, and vm_operand_write(1, strlen_bytes >> 1). DRAWCHP sites 0x9b3/0x9e2 multiply the result by 21 and subtract it from x=257 before draw-string." [[opcode.semantics.args]] i = 1 role = "destination" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "string" observed_types = ["l-str", "l-str-ptr"] [[opcode]] op = 0x1a7 label = "comment" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "comment" category = "unknown" summary = "" noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["string", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x1a8 label = "dev_ukn" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "instruction-marker-noop" category = "marker" summary = "Zero-operand structural marker. The native shared 0xaf/0x1a8 handler only records this instruction's one-dword length and returns." noop_headless = true source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0xaf_0x1a8_handler@0x416650 writes frame_instruction_word_count=1 for the current script context and immediately returns. Himegari has 1,989 op-0x1a8 sites. The port's explicit no-op matches native behavior." [[opcode]] op = 0x1a9 label = "store-shared-profile-string" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "store-shared-profile-string" category = "control" summary = "(cell) - snapshot the selected global string cell into AGE's shared `SAVE.DAT` profile table under a raw `0x05` type byte plus eight lowercase ASCII hex digits for the resolved global-bank index, replacing any earlier value." details = "This is the string counterpart to integer-store opcode 0x1a2. The value is profile-wide rather than numbered-slot-local and is written by the shared profile lifecycle. Port status (2026-07-24): implemented for direct global strings and resolved global string-pointers." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1a9_store_shared_profile_string@0x42d3e0 fetches operand 1's string, resolves the lvalue cell index, and calls shared_profile_store_string_by_typed_key@0x42d2b0 with type prefix 5. Corpus: 17 calls in GAMECLEAR, INPUTNAME, SAVE, and SELSTAGE." [[opcode.semantics.args]] i = 1 role = "global string cell to snapshot" observed_types = ["g-str", "l-str-ptr"] [[opcode]] op = 0x1aa label = "load-shared-profile-string" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "load-shared-profile-string" category = "control" summary = "(cell) - restore the selected global string cell from AGE's shared `SAVE.DAT` profile table using the raw `0x05` plus eight-hex-digit key; a missing key yields the native empty-string default." details = "This is the paired reader for opcode 0x1a9 and the string counterpart to integer-load opcode 0x1a3. Port status (2026-07-24): implemented through the shared profile service and native payload codec." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1aa_load_shared_profile_string@0x42bd90 resolves operand 1's lvalue index, calls shared_profile_load_string_by_typed_key@0x419ca0 with type prefix 5, and writes the result back through the VM string lvalue. Corpus: seven calls in GAMESTART, INIT2, INPUTNAME, and SAVE." [[opcode.semantics.args]] i = 1 role = "global string cell to restore" observed_types = ["g-str", "l-str-ptr"] [[opcode]] op = 0x1ab label = "delete-numbered-save" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "delete-numbered-save" category = "control" summary = "(status_out)(slot) - attempt to delete both `SAVE%02d.DAT` and its `SAVE%02d.STH` thumbnail." details = "Both deletes are attempted. Status is 0 when both succeed, 1 when only the DAT delete fails, and 2 whenever the STH delete fails (taking precedence over a DAT failure). Port status (2026-07-24): implemented against the paired native filenames." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1ab_delete_numbered_save@0x427ed0 formats and calls DeleteFileA for the numbered .DAT and .STH paths with the layered status convention. Corpus: one call in SAVE.BIN." [[opcode.semantics.args]] i = 1 role = "status output" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "numbered slot" observed_types = ["l-int"] [[opcode]] op = 0x1ac label = "copy-numbered-save" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "copy-numbered-save" category = "control" summary = "(status_out)(source_slot)(destination_slot) - copy both numbered `.DAT` state and `.STH` thumbnail, replacing destination files." details = "Both copies are attempted with overwrite allowed. Status is 0 when both succeed, 1 when only the DAT copy fails, and 2 whenever the STH copy fails (taking precedence over a DAT failure). Port status (2026-07-24): implemented against the paired native filenames." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1ac_copy_numbered_save@0x427fb0 formats source/destination SAVE%2.2d.DAT and SAVE%2.2d.STH paths and invokes CopyFileA with fail-if-exists false. Corpus: two calls in SAVE.BIN." [[opcode.semantics.args]] i = 1 role = "status output" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "source numbered slot" observed_types = ["l-int"] [[opcode.semantics.args]] i = 3 role = "destination numbered slot" observed_types = ["l-int"] [[opcode]] op = 0x1ad label = "mark-save-resume-frame" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "mark-save-resume-frame" category = "control" summary = "Mark the current script context as the highest frame serialized by numbered-save layouts 2/3. The native serializer saves frames 0 through this boundary and strips the boundary frame's return target so loading resumes it as the top frame. This opcode performs no file I/O itself." details = "Port status (2026-07-24): implemented as an active ExecFrame identity marker. It survives nested calls and clears when its owning frame unwinds; the following full numbered-payload slice will consume the exposed zero-based cutoff." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1ad_mark_save_resume_frame@0x416b70 writes decoded instruction size 1 and ctx+0x9928c=cur_ctx_index. context_state_serialize@0x40d320 uses that field (or cur_ctx_index when -1) as the inclusive frame cutoff for save layouts 2/3, serializes frames 0..cutoff, and forces the cutoff frame's saved return entry to -1. op_0x2_exit_or_return_frame@0x417940 clears the mark when unwinding below it. Corpus: 1,928 calls in 304 scripts; SC0000's six calls are at startup and immediately after HISTORY/MENU/HIDEWIN/INPUTNAME returns." [[opcode]] op = 0x1ae label = "write-numbered-save-thumbnail" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "write-numbered-save-thumbnail" category = "draw" summary = "(status_out)(slot)(surface_slot) - encode the selected surface into the numbered save's separate `SAVE%02d.STH` thumbnail file." details = "Status is 0 on success, 1 when the file cannot be created/opened, and 2 when surface encoding or writing fails. Renderer backend selects a handle-based or path-based native worker. Himegari writes an ordinary bottom-up 24-bit BMP (112x84 in installed files), BGR rows with four-byte padding, under the .STH extension. Its bfSize field historically omits the 14-byte BITMAPFILEHEADER. Port status (2026-07-24): implemented with exact native BMP output and host surface capture." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1ae_write_numbered_save_thumbnail@0x428100 creates SAVE%2.2d.STH with CREATE_ALWAYS and serializes operand 3's surface via the active renderer backend. Corpus: two calls in SAVE.BIN and SELSTAGE.BIN." [[opcode.semantics.args]] i = 1 role = "status output" observed_types = ["g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "numbered slot" observed_types = ["g-int", "l-int"] [[opcode.semantics.args]] i = 3 role = "source surface slot" observed_types = ["imm"] [[opcode]] op = 0x1af label = "load-numbered-save-thumbnail" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "load-numbered-save-thumbnail" category = "draw" summary = "(status_out)(slot)(surface_slot) - decode the numbered save's separate `SAVE%02d.STH` thumbnail into a surface slot." details = "Status is 0 on success, 1 when the file cannot be opened, and 2 when image decoding fails. The thumbnail format is owned by the renderer codec and is not embedded in the numbered `.DAT` payload. Port status (2026-07-24): implemented with 24-bit BMP decode and host surface replacement." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1af_load_numbered_save_thumbnail@0x428240 opens SAVE%2.2d.STH and passes it plus operand 3's surface slot to the active renderer decoder. Corpus: one call in SAVE.BIN." [[opcode.semantics.args]] i = 1 role = "status output" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "numbered slot" observed_types = ["l-int"] [[opcode.semantics.args]] i = 3 role = "destination surface slot" observed_types = ["l-int"] [[opcode]] op = 0x1b0 label = "copy-dwords" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "copy-dwords" category = "compute" summary = "(source)(destination)(count) - copy count consecutive 32-bit cells from source to destination." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2 op_0x1b0_copy_dwords@0x427060 fetches operand 3, resolves addressable operands 1 and 2 through vm_operand_resolve_address@0x425a50, and calls memcpy(destination, source, count*4). Corpus: 65 calls across direct global/local spans and local pointers; 43 are immediately preceded by take-address 0x63. The C# VM copies resolved integer-cell spans while retaining local/global address domains; focused tests cover direct spans and aliased pointers, and the traced natural boot reaches the UNITECH/CALCCC pair without fallback." [[opcode.semantics.args]] i = 1 role = "source" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "destination" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "count" observed_types = ["imm", "l-int"] [[opcode]] op = 0x1b2 label = "u00425790" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "append-diagnostic-value" category = "control" summary = "Format operand 1 with AGE's generic operand-to-string conversion and append its exact bytes to the context diagnostic accumulator. This does not present or clear the accumulated text." details = "Implemented with an EngineCtx-lifetime accumulator shared across GameSession scene VMs. String operands append decoded text, integer and pointer forms append signed decimal, and float forms reproduce native `%lf`'s six fractional digits." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "The real /v2 dispatch slot ctx+0x9b914 registers op_0x1b2_append_diagnostic_value@0x41f4b0. It formats operand 1 through vm_operand_format_as_string@0x41af90, measures the returned NUL-terminated bytes, and appends them to the embedded MSVC string at ctx+0x6f880. Himegari has two literal-string sites and one SYSTEM4 global-integer site." [[opcode.semantics.args]] i = 1 role = "value to format and append" observed_types = ["string", "g-int"] [[opcode]] op = 0x1b3 label = "u004257D0" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "append-diagnostic-newline" category = "control" summary = "Append the literal CRLF byte pair to the context diagnostic accumulator without presenting or clearing it." details = "Implemented as an exact `\\r\\n` append to the shared diagnostic accumulator, including FIELD's persistent line and SYSTEM4's native post-clear newline." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x1b2] evidence = "The real /v2 dispatch slot ctx+0x9b918 registers op_0x1b3_append_diagnostic_newline@0x41a400. Its one operation appends two bytes from DAT_0057082c to the same embedded string at ctx+0x6f880; memory at that address is 0d 0a 00. Both Himegari sites immediately follow diagnostic construction." [[opcode]] op = 0x1b4 label = "u004237C0" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "show-and-clear-diagnostic" category = "control" summary = "Show the accumulated text plus native script-location context in a synchronous owner-window information message box, then erase the complete accumulator." details = "Implemented as a synchronous host effect. Himegari's release-only null debug tables make the native suffix deterministic (`LINE=-1 COMMAND=-(436)`); FILE, dword ADDRESS, and zero-based frame DEPTH come from the live instruction. Godot marshals `OS.Alert` to the main thread and parks the VM until dismissal; CaptureHost records the effect. The accumulator clears only after the host call returns." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x1b2] evidence = "The real /v2 dispatch slot ctx+0x9b91c registers op_0x1b4_show_and_clear_diagnostic@0x419240. It resolves the MSVC string bytes at ctx+0x6f880 and calls engine_host_show_message@0x403820 with owner HWND ctx+0x54fe8 and flags 0x10004. The thunk dispatches host_ui_interface vslot +4; the default host implementation at 0x431520 logs the raw text and calls age_show_message_box@0x409370. Flag 0x10000 appends `FILE=%s ADDRESS=%X LINE=%d COMMAND=%s(%d) DEPTH=%d`; low mode 4 formats `%s%s`, uses caption `エラーが発生しました`, and calls USER32 MessageBoxA with style 0x40 (MB_OK|MB_ICONINFORMATION). The optional command metadata at ctx+0x6ddac and source-line maps at ctx+0x6f798 are zero-initialized and have no writer in Himegari's release image, yielding `LINE=-1 COMMAND=-(436)` at this opcode. The opcode ignores the return, then calls msvc_string_erase(buffer,0,0xffffffff). SYSTEM4's sole site presents its invalid-execution-mode text and value; a following 0x1b3 appends CRLF to the now-empty accumulator." [[opcode]] op = 0x1b5 label = "u0041B5F0" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-message-glyph-delay" category = "adv" summary = "(milliseconds) - set the per-glyph ADV text reveal delay; zero makes retained UI text publish immediately." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Complete corpus consistency across all 11 uses in 5 scripts: CONFIG initializes the value to 50 ms and changes it in 5-ms steps over 5..100; MAMES, ITMES, SKMES, and INFOMES bracket retained show-text descriptions with get op 0x7f, set 0, and restore the saved value. Native ADV traces show ordinary show-text consuming the corresponding charDelay with a 50-ms default." [[opcode.semantics.args]] i = 1 role = "per-glyph reveal delay in milliseconds" observed_types = ["imm", "l-int"] [[opcode]] op = 0x1b6 label = "u00414F60" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "get-auto-message" category = "input" summary = "(out) - return whether automatic message advance is enabled." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1b6_get_auto_message@0x4271e0 writes `(ctx+0x55104 != 0)` to operand 1. FUN_00411230 consumes the same field to arm AutoMessageTime0/1 timers; the shared ADV redraw routine uses it for the active Auto icon." [[opcode.semantics.args]] i = 1 role = "output enabled" observed_types = ["g-int"] [[opcode]] op = 0x1b7 label = "u0041B640" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-auto-message" category = "input" summary = "(enabled) - enable or disable automatic message advance." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1b7_set_auto_message@0x41f560 stores `(operand1 != 0)` at ctx+0x55104. SC0000's x=706 Auto button reads the current value through 0x1b6, toggles modulo 2, then writes it through this opcode." [[opcode.semantics.args]] i = 1 role = "enabled" observed_types = ["g-int"] [[opcode]] op = 0x1b8 label = "u0041B670" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "get-auto-message-time" category = "input" summary = "(selector)(out) - read an Auto-message delay from engine configuration: selector 0 = post-voice AutoMessageTime0, selector 1 = unvoiced AutoMessageTime1." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1b8_handler@0x427210 dispatches selector 0 to config key message:AutoMessageTime0 and selector 1 to message:AutoMessageTime1, then writes the result to operand 2. CONFIG.BIN uses it to bound the two UI settings." [[opcode.semantics.args]] i = 1 role = "timer selector: 0=post-voice Time0, 1=unvoiced Time1" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "output milliseconds" observed_types = ["l-int"] [[opcode]] op = 0x1b9 label = "u0041B710" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-auto-message-time" category = "input" summary = "(selector)(milliseconds) - write an Auto-message delay to engine configuration: selector 0 = post-voice AutoMessageTime0, selector 1 = unvoiced AutoMessageTime1." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1b9_handler@0x41f5a0 dispatches selector 0/1 to config setters for message:AutoMessageTime0/1. CONFIG.BIN initializes them to 500/2000 ms and adjusts each in 500-ms steps within 500..9500." [[opcode.semantics.args]] i = 1 role = "timer selector: 0=post-voice Time0, 1=unvoiced Time1" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "milliseconds" observed_types = ["imm", "l-int"] [[opcode]] op = 0x1ba label = "set-audio-route-enabled" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-audio-route-enabled" category = "audio" summary = "(category)(enabled) — enable or disable an audio route and persist the setting: 1=music, 2=SFX, 3=voice, 4=movie." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1ba_set_audio_route_enabled@0x420860 dispatches selectors 1..4 to the music/SFX/voice/movie enable workers. Those workers update the live route, stop active playback when disabling where applicable, write sound:Music/SE/Voice/Movie through the settings registry, and reject selectors outside 1..4. All 15 CONFIG.BIN sites pass literal 0/1." details = "Port status (2026-07-29): implemented with native SYS4REG.INI route persistence and live bus muting. AGE's raw music value band is preserved (Himegari 2 enabled toggles to -1 disabled); music changes restart/stop the retained stream, disabling SFX or voice stops active playback, and movie changes remain non-destructive." [[opcode.semantics.args]] i = 1 role = "category: 1=music, 2=SFX, 3=voice, 4=movie" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "enabled" observed_types = ["imm"] [[opcode]] op = 0x1bb label = "set-text-history-recording" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-text-history-recording" category = "adv" summary = "(enabled) - enable or suppress retained ADV text-history recording. Zero suppresses recording; one enables it." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1bb_handler@0x41f650 writes 0x80000000 to ctx+0x55110 for operand 0 and zero for operand 1, rejecting other values. Text/layout/metadata/voice paths test or propagate that high bit before appending retained history. HISTORY.BIN disables recording at entry and reenables it at exit so the backlog UI does not record itself." [[opcode.semantics.args]] i = 1 role = "enabled (0 or 1)" observed_types = ["imm"] [[opcode]] op = 0x1bc label = "u00415670" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "reset-message-voice-state" category = "input" summary = "Reset the per-message queued-voice flag used by ADV Auto timing." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1bc_handler@0x416c20 writes zero to ctx+0x6dbe4 (adv_auto_voice_pending). Opcode 0xc4 sets that field when voice playback is queued; adv_input_service_poll consumes it to select the post-voice AutoMessageTime0 path." [[opcode]] op = 0x1bd label = "u0041D910" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "play-history-voice" category = "audio" summary = "Replay a voice id selected from retained ADV text history using native playback/history variant 1, preserving normal Skip and Auto-voice state behavior." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1bd_play_history_voice@0x420920 stops/replaces the active voice and calls voice_play_indexed_asset@0x488330 with operand 1 plus playback variant 1 when Skip is inactive (or queues that pair while Skip is active). When text-history recording is enabled it appends voice pair {id,1}; HISTORY.BIN suppresses recording with op 0x1bb while its UI is active, preventing replay clicks from recursively entering the backlog. The handler also sets adv_auto_voice_pending when playback exists. voice_play_indexed_asset retains the variant in sound-buffer state before starting channel 12; its exact audible meaning remains unproven." [[opcode.semantics.args]] i = 1 role = "voice id" observed_types = ["l-int"] [[opcode]] op = 0x1bf label = "u004156C0" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "call-end" category = "marker" summary = "zero-arg; call->0x1bf->stmt-end — end-of-call-statement marker" noop_headless = true source = "inference" confidence = "med" depends_on = [] evidence = "" [[opcode]] op = 0x1c1 label = "set-adv-text-bounds" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-adv-text-bounds" category = "adv" summary = "(layout_slot)(right)(bottom) - configure the selected ADV text layout's right and bottom overflow boundaries in layout-local coordinates. Slot 0 selects the current layout." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x70, 0x71] evidence = "Ghidra /v2: op_0x1c1_set_adv_text_bounds@0x41f6c0 reads three operands and calls adv_text_layout_set_bounds@0x44ff00. That helper stores right/bottom at layout +0x24/+0x28; adv_text_layout_reset_cursor_and_bounds_record@0x455070 copies them into the initial retained record, and adv_text_layout_check_overflow@0x45efc0 compares glyph end coordinates against them. SYSTEM4 has all nine sites, paired with 0x79. Slot 1 computes (720,147), layouts 2..6 use (645,135), layout 7 (495,180), layout 8 (495,60), and layout 9 (250,368), proving these are layout-local boundary coordinates rather than width/height deltas. Port implementation retains the configured bounds in engine-owned layout snapshots and sizes ordinary/history Godot labels from right-cursor_x and bottom-cursor_y." [[opcode.semantics.args]] i = 1 role = "layout slot (0 = current)" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "right overflow boundary" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 3 role = "bottom overflow boundary" observed_types = ["imm", "l-int"] [[opcode]] op = 0x1c7 label = "get-message-skip" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "get-message-skip" category = "input" summary = "(out) - write 1 iff ADV message-skip run-state bit 0x08000000 is set, otherwise 0." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: handler 0x4272b0 reads ctx+0xa0ce4 bit 0x08000000 and vm_operand_write(1, 1|0). adv_interpreter_tick@0x410fb0 first polls the configured logical-action mask; action 6 is bit 0x40 and therefore drives this transient run state from SYSTEM4's C/LeftCtrl bindings or the retained native Backspace default. Persistent op-0x88 state injects the same bit. SC0000 label_1235a ORs the result with op 0x1cc." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int"] [[opcode]] op = 0x1c8 label = "toString" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "toString" category = "compute" summary = "Convert the source signed 32-bit integer to its invariant decimal string and replace the destination string." noop_headless = false source = "inference" confidence = "high" depends_on = [] evidence = "Kelebek identifies integer-to-string conversion. All five corpus sites are in ADDEXP and feed concat immediately: level numbers, signed deployment-cost deltas, and movement deltas. Source types are global/local integer and the destination is a local string." [[opcode.semantics.args]] i = 1 role = "destination" observed_types = ["l-str"] [[opcode.semantics.args]] i = 2 role = "signed_integer" observed_types = ["g-int", "l-int"] [[opcode]] op = 0x1ca label = "u0041B9B0" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-read-message-skip" category = "input" summary = "(enabled) - set the engine setting `message:ReadTextSkip`, which skips only previously read text." details = "Port status (2026-07-24): implemented as profile-lifetime engine setting state. Changing it immediately refreshes the current T1 message against the shared RT.DAT-backed ReadTextDB." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1ca_set_read_message_skip@0x41f880 calls the engine setting interface's setter for `message:ReadTextSkip` with operand 1. SC0000's x=750 Read-message-skip button toggles the value read by op 0x1cb." [[opcode.semantics.args]] i = 1 role = "enabled" observed_types = ["imm", "g-int"] [[opcode]] op = 0x1cb label = "u00414FD0" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "get-read-message-skip" category = "input" summary = "(out) - read the engine setting `message:ReadTextSkip`." details = "Port status (2026-07-24): implemented through the same profile-lifetime setting used by 0x1ca and the ADV ReadTextDB query path." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1cb_get_read_message_skip@0x4272f0 calls the engine setting interface's getter for `message:ReadTextSkip` and writes the result to operand 1. The shared ADV redraw routine uses it for the active Read-message-skip icon." [[opcode.semantics.args]] i = 1 role = "output enabled" observed_types = ["g-int"] [[opcode]] op = 0x1cc label = "get-adv-read-skip-state" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "get-adv-read-skip-state" category = "control" summary = "(out) - copy the current ADV read/click-skip service state from ctx+0x6dbd4. label_1235a ORs it with 0x1c7's Ctrl/message-skip bit: zero takes 0x21c's normal transition/yield path; nonzero resets the animation service and presents the completed endpoint through 0x20c." details = "Port status (2026-07-24): the VM refreshes this state from message:ReadTextSkip plus the current packed script id/T1 message index at 0x6e, 0x71, and 0x72. It is shared-profile read history, not a host-only flag." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra handler 0x427330 calls vm_operand_write(1, ctx+0x6dbd4). adv_refresh_read_skip_state@0x406cd0 and op 0x6e/0x71/0x72 maintain the field from message:ReadTextSkip plus read_text_db_find_message_index@0x468f50 and read_text_db_is_message_read@0x469930. The database is engine-owned shared RT.DAT state keyed by raw packed script resource id and per-script message index, not VM globals or slot-local SAVE##.DAT data. adv_interpreter_tick consumes the result in click/read-skip control; it is not op 0x223 surface-transition progress." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int"] [[opcode]] op = 0x1ce label = "u0041B9F0" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-adv-wait-indicator-enabled" category = "adv" summary = "(enabled) - explicitly start or stop the animated ADV input-wait indicator service." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra op_0x1ce_set_adv_wait_indicator_enabled@0x41f8c0 writes enabled to ctx+0x5f734. A nonzero value sets run bit 0x40000000, resets ctx+0x5f72c to frame zero, and starts the ctx+0x5f64c elapsed timer. Zero erases the indicator through adv_text_publish_wait_indicator_frame@0x453120 using ctx+0x6da84 and frame -2 when necessary, then clears the run bit. The corpus uses 0x1ce(0) on modal/menu entry, including HISTORY.BIN@0x3." [[opcode.semantics.args]] i = 1 role = "enabled" observed_types = ["imm"] [[opcode]] op = 0x1cf label = "set-voice-bgm-duck-control" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-voice-bgm-duck-control" category = "audio" summary = "(flags) - replace the transient voice/BGM-duck control mask. Bit 0 suppresses automatic BGM attenuation when voice playback starts; zero permits the configured duck behavior." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1cf_set_voice_bgm_duck_control@0x4209f0 fetches operand 1 and writes it verbatim to ctx+0x6dbf0. The voice-start helper voice_bgm_duck_begin@0x406de0 tests bit 0 before arming BGM attenuation; native settings defaults register MusicFadeOnVoicePlaying=1 and MusicFadeOnVoicePlayingVol=50. SC0000 uses values 0 and 1." [[opcode.semantics.args]] i = 1 role = "control flags (bit 0 = suppress voice-triggered BGM duck)" observed_types = ["imm", "g-int"] [[opcode]] op = 0x1d0 label = "step-text-history" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "step-text-history" category = "adv" summary = "(out_layout_slot)(out_record_index)(delta) - resolve a cumulative delta from the latest retained ADV boundary and return its layout slot and first record index, or -1 outputs at a boundary." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1d0_step_text_history@0x427360 calls text_history_step_group@0x4537c0 with operand 3 and mode mask 2, then writes the index entry's first field (layout slot) and second field (record index). Layout define/reset set manager+0xd6c to the newest entry; the helper reads but does not mutate that anchor, so deltas are cumulative. It skips duplicate record offsets and record-flag bit1, and returns -1 outputs at a boundary. HISTORY.BIN uses negative cumulative deltas to count/page backward." [[opcode.semantics.args]] i = 1 role = "layout slot out" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "first history record index out" observed_types = ["l-int"] [[opcode.semantics.args]] i = 3 role = "group delta" observed_types = ["l-int"] [[opcode]] op = 0x1d1 label = "u0041BAE0" argc = 5 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "render-text-history" category = "adv" summary = "(layout_slot)(record_index)(flags)(color_a)(color_b) - render retained ADV text records into a selected text layout/surface." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1d1_render_text_history@0x41f950 forwards all five operands plus the text manager at ctx+0x14508 to text_history_render_records@0x4526c0. That helper walks 0x48-byte retained text records, applies record flags/colors/font state, measures strings, and rasterizes/binds them to the chosen layout. HISTORY.BIN uses it to draw each visible backlog line." [[opcode.semantics.args]] i = 1 role = "layout slot" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "history record index" observed_types = ["l-int"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 5 role = "" observed_types = ["imm"] [[opcode]] op = 0x1d2 label = "append-text-history-metadata" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "append-text-history-metadata" category = "adv" summary = "(metadata_type)(value) - append a typed metadata record to the current retained ADV message group when history recording is enabled." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1d2_append_text_history_metadata@0x41f9c0 tests ctx+0x55110, fetches operand 2 followed by operand 1, and calls text_history_append_typed_metadata@0x455f00 as (layout=0, type=operand1, value=operand2). The helper appends a 0x48-byte record with flag 0x20000000, value at +0x14, and type at +0x18, consuming the pending group-start flag if set. SC0000's voiced page at 0x96d writes (type=2, value=0x11), and HISTORY.BIN later queries type 2 before replay. The corpus has 17,323 uses. This opcode is effectful, not a statement marker." [[opcode.semantics.args]] i = 1 role = "metadata type" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "metadata value" observed_types = ["imm"] [[opcode]] op = 0x1d3 label = "find-text-history-value" argc = 5 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "find-text-history-value" category = "adv" summary = "(out_found)(out_value)(direction)(record_index)(value_type) - find typed metadata within one retained ADV message group." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1d3_find_text_history_value@0x4273c0 calls text_history_find_typed_value@0x450840 and writes its boolean result plus returned value. The helper scans forward from operand 4 until the next group-start bit for flag 0x20000000 and matching type in record+0x18, returning the last match's record+0x14. Operand 3 reaches an unused helper parameter. HISTORY.BIN passes 1 and queries types 1 and 2 for line decoration/name metadata." [[opcode.semantics.args]] i = 1 role = "found out" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "value out" observed_types = ["l-int"] [[opcode.semantics.args]] i = 3 role = "reserved (ignored by native helper)" observed_types = ["imm"] [[opcode.semantics.args]] i = 4 role = "history record index" observed_types = ["l-int"] [[opcode.semantics.args]] i = 5 role = "metadata type" observed_types = ["imm"] [[opcode]] op = 0x1d4 label = "find-text-history-pair" argc = 4 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "find-text-history-pair" category = "adv" summary = "(out_a)(out_b)(direction)(record_index) - find paired metadata within one retained ADV message group." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1d4_find_text_history_pair@0x427430 calls text_history_find_pair@0x4509f0 and writes two outputs. The helper scans forward from operand 4 until the next group-start bit and returns the last 0x40000000 record's +0x14/+0x18 pair, defaulting both outputs to -1. Operand 3 reaches an unused helper parameter. HISTORY.BIN passes 1 and uses the pair to expose voice replay for a backlog entry." [[opcode.semantics.args]] i = 1 role = "first value out" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "second value out" observed_types = ["l-int"] [[opcode.semantics.args]] i = 3 role = "reserved (ignored by native helper)" observed_types = ["imm"] [[opcode.semantics.args]] i = 4 role = "history record index" observed_types = ["l-int"] [[opcode]] op = 0x1d5 label = "u00415700" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "cond-block" category = "marker" summary = "zero-arg; ALWAYS follows jcc — marks conditional body entry" noop_headless = true source = "inference" confidence = "high" depends_on = [] evidence = "" [[opcode]] op = 0x1f4 label = "u004160D0" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "stmt-begin" category = "marker" summary = "zero-arg; opens scripts, pairs with stmt-end 0x1f5" noop_headless = true source = "investigation" confidence = "high" depends_on = [] evidence = "" [[opcode]] op = 0x1f5 label = "u00416120" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "stmt-end" category = "marker" summary = "zero-arg; precedes exit/next-stmt, pairs with 0x1f4" noop_headless = true source = "investigation" confidence = "high" depends_on = [] evidence = "" [[opcode]] op = 0x1f6 label = "clear-retained-gfx-objects" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "clear-retained-gfx-objects" category = "draw" summary = "Clear the complete retained gfx-object registry while preserving allocated surface resources. Subsequent object queries return absent until draw/geometry operations recreate records." details = "The handler clears the map embedded at retained-gfx owner+0x408, resets its count and transient dirty/force flags, but does not release the 1000 surface slots or clear the separate queued-surface-command list. Corpus call sites pair it either with 0x23d for a full transient-resource reset or with 0x20e for a backbuffer clear." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1f6_clear_retained_gfx_objects@0x417430 passes ctx+0x46614 to retained_gfx_objects_clear@0x47cab0. The worker destroys every node in owner+0x408, resets its sentinel/count, and clears owner+0xb558/+0xb55c/+0xb564/+0xb568 plus bit 0x10000 state. DATA1: 293 calls in 146 scripts; 146 continue to 0x23d and 143 to 0x20e." [[opcode]] op = 0x1f7 label = "gfx-elem-erase" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "gfx-elem-erase" category = "draw" summary = "0x1f7 (handle)(count) — erase retained gfx objects. Handler 0x422270 calls gfx_object_erase_range@0x47d8b0 for [handle,handle+count) when count>1, else gfx_object_erase@0x47d850. This removes entries from the same object map queried by op 0x215, so erased objects stop compositing. SC0000 uses it before op 0x1fa releases the returned surface slot." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra handler 0x422270; gfx_object_erase_range@0x47d8b0 loops gfx_object_erase@0x47d850. Both operate on owner+0x408, the retained-object map also used by gfx_object_get_or_create/draw and gfx_object_query_source_slot." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm", "g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "l-int"] [[opcode]] op = 0x1f8 label = "create-texture" argc = 4 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "create-texture" category = "draw" summary = "Allocate/prepare a texture slot: (slot, width, height, flag). e.g. `create-texture 0xd 0x190 0x1e 0x0` = slot 13, 400x30." noop_headless = false source = "investigation" confidence = "med" depends_on = [] evidence = "SC0000 CG/UI-draw path disasm; slot/w/h roles read off the operands (400x30 text bars, etc.)." [[opcode.semantics.args]] i = 1 role = "texture slot" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "width" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "height" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 4 role = "flag" observed_types = ["imm"] [[opcode]] op = 0x1f9 label = "set-texture" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-texture" category = "draw" summary = "Load a texture by universal packed SYS4INI/AAI id into a mode-0 surface slot: (resource_id, slot, colorkey). A zero high byte directly indexes the flat base catalog; a nonzero high byte selects an AAI mount and uses the low 24 bits. This is the same addressing contract as 0x249; only the native surface mode differs." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2 gfx_op_0x1f9_load_surface@0x422360 fetches operand 1 and passes it unchanged to asset_open_indexed_entry@0x44f390. asset_catalog_parse_base_tables@0x44e7e0 builds one flat entry array; the opener has no scene/context input and directly indexes that array for high-byte zero. SC0010 set-texture 0x21 proves the distinction outside SC0000: raw 0x21 is SO013A.AGF, while adding SC0010's 0x11e section position lands on unrelated COL0023.OGG. The earlier 586/595 Frida correlation established that SYS4INI file_number describes grouping/order, not runtime operand rebasing." [[opcode.semantics.args]] i = 1 role = "universal packed SYS4INI/AAI texture id" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "texture slot" observed_types = ["imm", "g-int", "l-int"] [[opcode.semantics.args]] i = 3 role = "flag (typically -1 / 0xffffffff)" observed_types = ["imm", "l-int"] [[opcode]] op = 0x1fa label = "gfx-elem-release" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "gfx-elem-release" category = "draw" summary = "0x1fa (surface_slot) — release the surface at ctx+0x52bd4[slot] (virtual free, then null) and call FUN_00474e40(slot). It releases a surface slot, not a retained object handle. SC0000 feeds it the slot returned by op 0x215 after op 0x1f7 erases the associated object group." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra handler 0x4224a0 (dispatch ctx[0x26c93+0x1fa]); frees ctx+0x52bd4[operand1*4] via vtbl, then FUN_00474e40(operand1)." [[opcode.semantics.args]] i = 1 role = "surface slot" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x1fb label = "draw-texture" argc = 8 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "draw-texture" category = "draw" summary = "Blit a texture slot to screen. Observed 8 args: (handle, slot, srcx, srcy, w, h, dstx, dsty). e.g. `draw-texture 0xcf08 0x3 0 0 0x320 0x258 0 0` = full-screen (800x600) slot 3 at (0,0)." noop_headless = false source = "investigation" confidence = "med" depends_on = [] evidence = "SC0000 CG-load subroutine label_12649: `draw-texture (ptr) (slot) 0 0 (w) (h) (dstx) (dsty)`; full-screen slot-3 draws use 0x320x0x258 (800x600)." [[opcode.semantics.args]] i = 1 role = "handle/source ref" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "texture slot" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "src x" observed_types = ["imm", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 4 role = "src y" observed_types = ["imm", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 5 role = "width" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 6 role = "height" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 7 role = "dst x" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 8 role = "dst y" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x1fd label = "u00420620" argc = 4 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "gfx-set-scale-current" category = "draw" summary = "(handle)(scale_x_percent)(scale_y_percent)(scale_z_percent) — immediately replace the retained object's current scale matrix at obj+0x6c. The handler divides each integer operand by 100.0 before calling matrix4_make_scale; this is distinct from 0x21e's delayed one-shot target scale." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: handler gfx_op_0x1fd_set_vec_scaled@0x422650 fetches operands 2..4, divides each by the 100.0 constant, and calls gfx_object_set_scale_current@0x47e6b0. The worker gets/creates the object, marks obj+0x68, and calls matrix4_make_scale on obj+0x6c. SC0000 sets AE001D handles to 210/210/100 and 240/240/100; without this setter their 800x800 alpha circles remain below the viewport. Both functions annotated and /v2 saved 2026-07-11." [[opcode.semantics.args]] i = 1 role = "retained object handle" observed_types = ["imm", "g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "current X scale percent" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "current Y scale percent" observed_types = ["imm", "g-int", "l-int"] [[opcode.semantics.args]] i = 4 role = "current Z scale percent" observed_types = ["imm"] [[opcode]] op = 0x1fe label = "set-current-rotation-axis-angle" argc = 5 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-current-rotation-axis-angle" category = "draw" summary = "(handle)(axis_x)(axis_y)(axis_z)(angle_degrees) — immediately replace the retained object's current axis-angle rotation matrix. This is the direct-current companion to op 0x21f's delayed one-shot rotation target." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x1fe_set_rotation_current@0x422700 converts operands 2..5 to float and calls gfx_object_set_rotation_current@0x47e720. The worker gets/creates the handle, marks transform state at obj+0x68, stores current axis obj+0x1ec..0x1f4 and angle degrees obj+0x204, converts degrees to radians with pi/180, builds the current matrix at obj+0xec through matrix4_make_axis_angle, and sets retained-gfx redraw dirty owner+0xb558 (EngineCtx+0x51b6c). The finite-channel consumer composes this current matrix between scale and translation. Corpus: 186/187 calls use Z axis (0,0,1); the lone DEBUG call uses Y axis (0,1,0)." [[opcode.semantics.args]] i = 1 role = "object handle" observed_types = ["imm", "g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "rotation axis X" observed_types = ["imm"] [[opcode.semantics.args]] i = 3 role = "rotation axis Y" observed_types = ["imm"] [[opcode.semantics.args]] i = 4 role = "rotation axis Z" observed_types = ["imm"] [[opcode.semantics.args]] i = 5 role = "angle degrees" observed_types = ["imm", "l-int"] [[opcode]] op = 0x1ff label = "set-gfx-geom3-c" argc = 4 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-current-translation" category = "draw" summary = "0x1ff (handle)(x)(y)(z) — immediately replace the retained object's current translation matrix at obj+0x16c. This is the direct-current companion to 0x220's delayed target at obj+0x1ac." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: handler gfx_op_0x1ff_set_geom3@0x4227b0 converts operands 2..4 to float and calls gfx_object_set_translation_current@0x47e800. The worker gets/creates the object, marks obj+0x168, and calls matrix4_make_translation on obj+0x16c. SC0000 uses (0,0,0) before animating BG001A. Annotated and saved 2026-07-11." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["imm", "l-int"] [[opcode]] op = 0x202 label = "gfx-blit-color" argc = 5 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "gfx-blit-color" category = "draw" summary = "0x202 (handle)(delay_ms)(duration_ms)(alpha)(color) — arm the one-shot packed-ARGB channel. Worker gfx_op_0x202_worker_set_color_anim @0x47ea00 resets shared start obj+0x34, writes delay +0x38, duration +0x4c, and target +0x64. gfx_object_apply_transform_channels @0x472f00 linearly interpolates each byte from current +0x60 on retained-gfx owner+0xb550 (EngineCtx+0x51b64), commits the target, clears timing, writes target -1, and clears the one-shot active bit when all sibling channels finish. Negative alpha/RGB independently preserve current bytes. Implemented in GfxState with synchronized current/target timeline evidence; draw-string 0x204/0x7a remains separate." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra handler 0x4228d0 packs operands 4/5 and calls worker 0x47ea00(handle,delay,duration,packed). Consumer 0x472f00: shared start +0x34; color delay/duration +0x38/+0x4c; current/target +0x60/+0x64; frame clock retained-gfx owner+0xb550 (EngineCtx+0x51b64); bytewise integer LERP; natural or owner+0xb55c (EngineCtx+0x51b70) forced completion. /v2 annotated and saved 2026-07-10." [[opcode.semantics.args]] i = 1 role = "retained object handle" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "delay in frame-clock milliseconds" observed_types = ["imm", "g-int", "l-int"] [[opcode.semantics.args]] i = 3 role = "duration in frame-clock milliseconds" observed_types = ["imm", "g-int", "l-int"] [[opcode.semantics.args]] i = 4 role = "target tint-strength/ARGB high byte; negative preserves current" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 5 role = "target RGB; negative preserves current" observed_types = ["imm", "g-int", "l-int"] [[opcode]] op = 0x203 label = "gfx-draw-color" argc = 4 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "gfx-draw-color" category = "draw" summary = "0x203 (handle)(mode)(alpha)(color) — worker stores the D3D blend selector at obj+0x30 and STATIC packed color at obj+0x60; the handler's ctx+0x53d88 write is the generic 9-dword instruction length. Negative alpha/RGB preserve current static bytes. Mode 0 is the default textured path: preserved 0xffffffff is identity (the alpha byte is not tint strength). Its consumption is order-sensitive: a post-bind write supplies opacity until the next draw-texture bind, covering both FIELD's bound idle-unit suppression and CALLBACK_SETTING's freshly rebuilt ADV backing; pre-bind alpha-zero initialization remains opaque after the later bind. Mode 1 is SRCALPHA/ONE additive glow with ARGB alpha scaling the source contribution and RGB providing multiplicative modulation. Mode 2 conditionally forces ONE/ZERO for the selected render target and is used by 0x223 transition sources; mode 3 selects a subtractive special path. Surfaceless mode-0 fill consumption remains distinct." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra handler 0x4229a0; negative operands read current obj+0x60, then worker 0x47e9b0 stores op2 at obj+0x30 and ARGB at +0x60. gfx_object_composite call-site 0x47f78f passes +0x30/+0x60 directly to gfx_object_blit_d3d9. Correct D3D9 constants at 0x4774c0 prove mode 1 writes SRCBLEND=5/SRCALPHA and DESTBLEND=2/ONE, not INVSRCALPHA. TITLE draws two opaque-black, no-colorkey SO022 flame sprites with mode 1; additive composition removes black and preserves the blue glow, verified in a windowed capture. Mode 2 transition setup and synchronized pixels prove 0xffffffff is identity, not solid white. SC0000 page 14 adds the mode-0 endpoint proof: after the EV052CA->EV052DA 0x223 crossfade, 0x203@0x12478 restores the base CG to mode 0 with preserved 0xffffffff; native keeps EV052DA visible while the port's tint-strength interpretation turns every texel white. FIELD's movement lifecycle clones idle handle 0x9c40+entity to temporary handle 0x9c40+0x76c, writes mode-0 alpha zero to the bound idle handle at 0x45dc/0x4699/0x5210, animates only the temporary handle, then DRAWCH rebinds the idle handle at the next tile. CALLBACK_SETTING independently erases the ADV family, binds SO001 to fresh handle 0xd2f0, reads message:MesWinAlpha, and writes (16-value)<<4 through static mode-0 0x203 before presenting. Rendering post-bind static mode-0 alpha as inert causes both the stationary FIELD ghost and the reported always-opaque post-CONFIG message window." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "g-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["imm", "g-int", "l-int"] [[opcode]] op = 0x204 label = "draw-string" argc = 4 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "draw-string" category = "adv" summary = "(surface_slot)(x)(y)(string) - rasterize a CP932 string immediately into a numbered graphics surface using current font/color/effect state." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x204_handler@0x422a60 resolves operand 4 as a string, fetches surface/x/y, then calls draw_string_to_surface@0x450150 on text manager ctx+0x14940. The worker validates and locks gfx-manager surface table +0xa590[slot], chooses text_raster_string_uncached@0x459d90 or cached/effect path @0x45b600, rasterizes GDI GetGlyphOutlineA bitmaps through text_blit_glyph_bitmap@0x458c80 using font/color state +0x4d0/+0x458, then unlocks. SC0000 0x9b2 draws the speaker name into 400x30 surface 0xd at (1,1); following 0x1fb binds it to retained object 0xe678 at (74,444)." [[opcode.semantics.args]] i = 1 role = "destination surface slot" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 2 role = "x" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 3 role = "y" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 4 role = "CP932 string" observed_types = ["string", "g-str", "l-str", "l-str-ptr"] [[opcode]] op = 0x205 label = "u00420A60" argc = 6 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "draw-formatted-integer" category = "draw" summary = "Format an integer into a fixed-width decimal field and rasterize it immediately into a numbered graphics surface using the current font/color/effect state." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x75, 0x204] evidence = "Ghidra /v2: op_0x205_handler@0x422ab0 fetches (surface,x,y,value,width,flags), calls format_integer_for_surface@0x407190, then draw_string_to_surface@0x450150. DRAWENP contains all 16 previously stubbed calls responsible for its level, HP/SP/FS, and stat values." details = "The field width includes an optional sign. Bit 0 zero-pads; bit 1 centers omitted leading cells; bit 2 left-aligns; bits 3/4 request '+' for positive/zero; bit 5 renders zero with '-'. With bit 16, output remains half-width ASCII and omitted-cell x adjustment uses half the current font cell advance; otherwise the formatter converts digits/signs to full-width CP932. Default alignment preserves the field's right edge by shifting x right for each omitted leading cell." [[opcode.semantics.args]] i = 1 role = "destination surface slot" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "x" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 3 role = "y" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 4 role = "value" observed_types = ["g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 5 role = "field width (characters, including sign)" observed_types = ["imm"] [[opcode.semantics.args]] i = 6 role = "format/alignment flags" observed_types = ["imm"] [[opcode]] op = 0x207 label = "copy-surface-rect" argc = 8 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "copy-surface-rect" category = "draw" summary = "Copy a rectangular pixel region between mutable graphics surfaces: (source_surface, destination_surface, source_x, source_y, width, height, destination_x, destination_y)." details = "The worker clips the paired source and destination rectangles against both surfaces while preserving their correspondence, returns successfully for an empty clipped rectangle, and marks the destination surface dirty. Himegari uses the opcode for minimap markers plus STATUS, READICON, and DRAWTIP surface composition." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x207_handler@0x422b50 constructs source [x,y,x+w,y+h] and destination [dx,dy,dx+w,dy+h] rectangles and calls gfx_copy_surface_rect@0x477da0. The worker validates both surface slots, clips both rectangles together, marks the destination dirty, and copies through locked D3D surfaces. Corpus: 15 calls total: DRAWMINIMAP 8, STATUS 3, READICON 2, DRAWTIP 2." [[opcode.semantics.args]] i = 1 role = "source_surface" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 2 role = "destination_surface" observed_types = ["imm", "g-int"] [[opcode.semantics.args]] i = 3 role = "source_x" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 4 role = "source_y" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 5 role = "width" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 6 role = "height" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 7 role = "destination_x" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 8 role = "destination_y" observed_types = ["imm", "l-int"] [[opcode]] op = 0x208 label = "get-texture-size" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "get-texture-size" category = "draw" summary = "0x208 (slot)(out_w)(out_h) — writes the loaded texture's width/height into two output globals; keystone for bytecode-computed sprite/bg geometry (SC0000 label_12649)" noop_headless = false source = "inference" confidence = "med" depends_on = [] evidence = "SC0000 label_12649: set-texture(resId,slot) then 0x208(slot)->w,h feeds w/2 horizontal-center + foot-anchor subtraction into draw-texture dst; stubbing yields 0x0 sizes / off-center draws" [[opcode.semantics.args]] i = 1 role = "slot" observed_types = ["imm", "g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "out_width" observed_types = ["g-int", "l-int"] [[opcode.semantics.args]] i = 3 role = "out_height" observed_types = ["g-int", "l-int"] [[opcode]] op = 0x20a label = "u00420CE0" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "publish-adv-text-layout" category = "adv" summary = "(layout_slot) - republish one ADV text layout and, while active, its current wait-indicator frame." details = "Republish snapshots the global reveal index, clamps only to the selected layout's record count, erases its configured retained-object interval, and rebinds records zero through the reveal index inclusive from surface layout_slot+0x14. Unlike timed reveal, native republish does not clamp to the configured object capacity; Himegari reserves 500 handles for every layout and shipped ordinary strings remain below that bound." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra op_0x20a_publish_adv_text_layout@0x422ce0 passes the requested slot to adv_text_publish_layout@0x450c80. That worker reads manager+0x570, clamps against record count, erases layout+0x68/+0x6c, and binds each record's native edges through gfx_object_bind_draw without a capacity check. If ADV run-state bit 0x40000000 is active, the opcode also calls adv_text_publish_wait_indicator_frame@0x453120 with ctx+0x5f72c. Slot zero resolves the text manager's current layout; the corpus always uses slot one, including HISTORY.BIN@0x13ab in its shared ADV redraw callback." [[opcode.semantics.args]] i = 1 role = "layout_slot (0 = current)" observed_types = ["imm"] [[opcode]] op = 0x20b label = "fill-surface-rect" argc = 7 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "fill-surface-rect" category = "draw" summary = "(surface_slot)(x)(y)(width)(height)(alpha)(rgb) - fill a clipped rectangle on a graphics surface with the supplied color and alpha." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x20b_handler@0x422d50 converts x/y/width/height to an exclusive rectangle, clamps alpha to 255, repacks RGB to native ARGB, and calls the surface manager's rectangle-fill path at 0x4790e0. HISTORY.BIN clears each 600x30 name strip on temporary surface 0xc1 before draw-string." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 5 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 6 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 7 role = "" observed_types = ["imm", "l-int"] [[opcode]] op = 0x20c label = "present-frame" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "present-frame" category = "draw" summary = "Draw every visible retained object over the selected target without implicitly clearing it, then present the composited backbuffer; label_1235a uses this on the read/message-skip branch to expose the completed foreground endpoint immediately." details = "Native handler gfx_op_0x20c_present_frame -> gfx_render_frame @0x4820b0. This is an explicit retained-state publication boundary, not a continuously visible object-store mutation. The renderer does not clear its selected target: opcode 0x20e owns explicit black clearing, so full-frame publication preserves preceding target pixels beneath its redraw. The read/message-skip branch resets the animation service then presents; the port publishes and snaps pending 0x223 state here. Normal playback branches to 0x21c, which owns repeated render/wait/resume. Headless hosts remain non-blocking." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x223, 0x1c7, 0x1cc] evidence = "Ghidra /v2: dispatch table FUN_00413860 param_1[0x26e9f]=gfx_op_0x20c_present_frame; 0x26e9f-0x26c93=0x20c. The handler calls gfx_render_frame@0x4820b0, which begins a D3D scene, consumes queued surface commands, draws all visible retained objects, ends the scene, and presents the backbuffer without calling d3d_clear_render_target_black; opcode 0x20e is the separate clear. Refined 2026-07-30." [[opcode]] op = 0x20d label = "select-render-target" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "select-render-target" category = "draw" summary = "Select an offscreen surface slot as Direct3D render target 0, or restore the device backbuffer when the operand is at least 1000." details = "For slots below 1000 the native worker obtains that surface's level-0 D3D texture surface and calls IDirect3DDevice9::SetRenderTarget(0,...). The >=1000 path obtains backbuffer 0 and records current target -1. Himegari commonly follows a freshly created blank surface selection with 0x20e before drawing into it." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x20c, 0x1c7, 0x1cc] evidence = "Ghidra /v2: op_0x20d_select_render_target@0x422e10 passes operand 1 and retained-gfx owner ctx+0x46614 to retained_gfx_select_render_target@0x479660. Its D3D calls resolve texture level 0 or backbuffer 0, then invoke device vtable +0x94 SetRenderTarget and store selected slot at owner+0xb530. DATA1: 113 calls in 24 scripts." [[opcode.semantics.args]] i = 1 role = "surface slot; >=1000 selects the backbuffer" observed_types = ["imm", "l-int"] [[opcode]] op = 0x20e label = "clear-render-target" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "clear-render-target" category = "draw" summary = "Clear the currently selected render target to black and reset its depth buffer to 1.0." details = "This is a target-pixel operation, not retained-object teardown. It invokes IDirect3DDevice9::Clear with zero rectangles, flags D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER (3), color 0, depth 1.0, and stencil 0. The port tracks 0x20d target ownership and forwards the clear to the host; its retained compositor already rebuilds the backbuffer from black." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x20e_clear_render_target@0x4174f0 passes renderer ctx+0x46188 to d3d_clear_render_target_black@0x471460. The worker calls device pointer +0x410, vtable +0xac with (0,NULL,3,0,1.0f,0). DATA1: 345 calls in 167 scripts; 57 directly follow 0x20d and 143 directly follow 0x1f6." [[opcode]] op = 0x20f label = "play-modal-movie-to-surface" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "play-modal-movie-to-surface" category = "draw" summary = "(packed_resource_id)(surface_slot)(movie_flags) - open a universal packed SYS4INI/AAI MPEG asset into an existing retained surface, start its native movie graph, and arm modal run-state bit 0x2000 so script execution remains parked until the movie completes or is skipped. This is the LOGO/OP/ED whole-movie path; op 0x236 uses the same resolver with non-modal lifecycle." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x20f_play_modal_movie_to_surface@0x422e50 requires an existing retained D3D target, shares the movie-object allocation, DirectShow graph open, audio-route, and volume setup used by 0x236, then calls movie_start_modal_playback@0x463280, ORs EngineCtx+0xa0ce4 with 0x2000, and marks movie presentation dirty. It does not reload/rebind the gfx surface record or assign an RGB color key. The start worker calls IMediaControl::Run at vtable +0x1c on the freshly stopped graph; AGE performs no explicit Pause, seek, or opening-frame decode. DirectShow's stopped-to-paused-to-running transition cues the first sample. movie_texture_renderer_receive_sample@0x4628d0 copies it to the D3D texture and sets renderer +0x5b4; movie_consume_renderer_new_frame_flag@0x405120 makes the outer tick render it. Read-only 2026-08-11 hooks installed before graph Run proved native LOGO video starts at 0 and advances by 33.3667 ms while audio starts at 0 in contiguous 26.1224 ms blocks; native video fingerprints expose changing 0--600 ms frames and match FFmpeg at equal later timestamps. The graph stays alive through its common stop endpoint. Corpus has exactly three sites: LOGO (0x335f,42,4), OP (0x3364,42,4), and ED (0x3324,42,dynamic flags)." details = "Implemented through IHost.PlayModalMovieToSurface. Its operand uses the same native universal packed-id catalog contract as 0x236; the separate host call exists for modal wait/cancel lifecycle, not a different resolver. ResourceMap.ResolveMovie selects through ResolvePacked and retains MPEG signature validation in ReadMovie. Godot reuses the asynchronous FFmpeg decoder/retained-surface compositor, parks only the VM thread until EOF, and treats mouse click or Accept/Cancel input as completion before wrapper cleanup releases both video and per-playback audio output. Movie playback leaves the existing mutable target at resourceId 0 with no RGB color key; MovieSurfaceRegistry supplies its live pixels. Audio-bearing movies deliver timestamped stereo float PCM through AudioStreamGenerator and use the sound-hardware position as the master clock. The native shim rewinds both demuxers to the common media origin; this preserves LOGO's 218-frame PTS-0 opening rather than skipping to the video stream's declared 600 ms start and moving picture ahead of audio. The first decoded image is latched before audio starts, later frames retain their common-timeline cadence, and the terminal image remains through the full audio graph endpoint." [[opcode.semantics.args]] i = 1 role = "packed_resource_id" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "surface_slot" observed_types = ["imm"] [[opcode.semantics.args]] i = 3 role = "movie_flags" observed_types = ["imm", "l-int"] [[opcode]] op = 0x212 label = "set-adv-wait-indicator-handle" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-adv-wait-indicator-handle" category = "adv" summary = "0x212 (layout_slot)(retained_handle) — set the retained gfx handle used by that ADV layout's animated wait indicator." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: handler 0x4230c0 indexes ctx+0x14d54, which is text-manager ctx+0x14940 plus its layout-pointer table at +0x414, then writes layout+0x64. adv_text_publish_wait_indicator_frame@0x453120 reads layout+0x64 for both gfx_object_bind_draw and gfx_object_erase. The only corpus site is SYSTEM4(layout 1, handle 0xd674)." [[opcode.semantics.args]] i = 1 role = "ADV layout slot" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "retained wait-indicator object handle" observed_types = ["imm"] [[opcode]] op = 0x213 label = "set-adv-text-object-range" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-adv-text-object-range" category = "adv" summary = "0x213 (layout_slot)(first_handle)(capacity) — assign the retained gfx-object interval used to publish that ADV layout's glyphs." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: handler 0x423110 indexes the ADV layout pointer table at text-manager+0x414 (EngineCtx+0x14d54) and writes layout+0x68/+0x6c. adv_text_publish_next_glyph@0x451220 binds handle first+glyph_index; adv_text_layout_reset@0x455210 and adv_text_publish_layout@0x450c80 erase this interval. All nine corpus sites are SYSTEM4 layout initialization; layout 1 receives 0xd6d8/0x1f4." [[opcode.semantics.args]] i = 1 role = "ADV layout slot" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "first retained glyph handle" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 3 role = "retained glyph capacity" observed_types = ["imm"] [[opcode]] op = 0x215 label = "query-gfx-object?" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "query-gfx-object?" category = "draw" summary = "0x215 (out_slot)(handle) — query the retained gfx-object map. Handler gfx_op_0x215_query_source_slot@0x42a0b0 calls gfx_object_query_source_slot@0x47f280 with owner ctx+0x46614. The worker searches owner+0x408, the same map populated by geometry/draw workers, and returns obj+4: the live source-surface slot written by draw-texture, or -1 if absent. gfx_object_init_default zeroes obj+4, so a geometry/animation-created but draw-unbound object returns slot 0, not -1. SC0000 uses a successful result for query-guarded teardown: op 0x1f7 erases the object group and op 0x1fa releases this slot. Matching the zero default prevents stale transforms from surviving into the EV050EA CG at SC0000 page 58." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra: handler 0x42a0b0 passes ECX=ctx+0x46614 to 0x47f280, which searches ECX+0x408 and returns object+4. gfx_object_bind_draw@0x47e870 writes the bound slot there; gfx_object_init_default@0x472810 explicitly writes zero to dword index 1. SC0000 page-58 trace: the old -1 default skipped cleanup of transform-created handle 0xcb2a, then EV050EA inherited translation (-100,0), rotation -90, and alpha 0; the native zero default makes the guard succeed and the reused object is identity/opaque." [[opcode.semantics.args]] i = 1 role = "out_slot_status" observed_types = ["g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "handle_id" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode]] op = 0x216 label = "query-gfx-field?" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "query-gfx-field?" category = "draw" summary = "0x216 (out)(idx) — handler gfx_op_0x216_query_table46d14 @0x42a0f0: out = *(ctx+0x46d14 + idx*0x14). The generic instruction length is 5 dwords. A per-object field query over a stride-0x14 table. See docs/engine-re.md gfx op-contract table." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra handler 0x42a0f0; reads ctx+0x46d14[operand2 * 0x14], writes operand1 via FUN_00425fb0(1,·)." [[opcode.semantics.args]] i = 1 role = "out" observed_types = ["g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "idx" observed_types = ["imm", "g-int", "l-int"] [[opcode]] op = 0x217 label = "set-gfx-geom3" argc = 4 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-gfx-geom3" category = "draw" summary = "0x217 (handle)(a)(b)(c) — handler gfx_op_0x217_set_geom3 @0x4231b0 SETS a 3-vector (int→float a,b,c) on object `handle` via native worker FUN_0047e960; its generic instruction length is 9 dwords. In SC0000 label_12649 it writes the anchor vector G[0x6249b/c/d] INTO the object; op 0x218 reads it back. See docs/engine-re.md gfx op-contract table." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra handler 0x4231b0 (dispatch ctx[0x26c93+0x217]); FUN_0047e960(op1,(float)op2,(float)op3,(float)op4). label_12649 sites e.g. 0x00c67 handle=G[0x62457], vec=G[0x6249b/c/d]." [[opcode.semantics.args]] i = 1 role = "handle" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "a" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "b" observed_types = ["imm", "g-int", "l-int"] [[opcode.semantics.args]] i = 4 role = "c" observed_types = ["imm", "g-int"] [[opcode]] op = 0x218 label = "get-gfx-geom3?" argc = 4 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "get-gfx-geom3?" category = "draw" summary = "0x218 (handle)(out_a)(out_b)(out_c) — handler gfx_op_0x218_query_geom3 @0x42a130 GETS a stored 3-vector from object `handle` (FUN_0047f360) into out_a/b/c; its generic instruction length is 9 dwords. In label_12649 it reads the object's anchor vector back into G[0x6249b/c/d] — a stubbed DRIVER of the render drift (stale anchor → bad centering). See docs/engine-re.md gfx op-contract table." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra handler 0x42a130; FUN_0047f360(obj op1) + 3x FUN_00550850→FUN_00425fb0(2/3/4). label_12649 site 0x00c8f handle=G[0x62457] → G[0x6249b/c/d]." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["g-int"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["g-int"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["g-int"] [[opcode]] op = 0x219 label = "set-gfx-geom3-b" argc = 4 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-gfx-geom3-b" category = "draw" summary = "0x219 (handle)(a)(b)(c) — handler gfx_op_0x219_set_geom3 @0x423240 SETS a 3-vector (int→float) on object `handle` via native worker FUN_0047e910 (sibling of 0x217, a different per-object vector); its generic instruction length is 9 dwords. See docs/engine-re.md gfx op-contract table." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra handler 0x423240 (was unanalyzed; function created this session; dispatch ctx[0x26c93+0x219]); FUN_0047e910(op1,(float)op2,(float)op3,(float)op4)." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["g-int"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["g-int"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["g-int"] [[opcode]] op = 0x21a label = "get-gfx-geom3-b?" argc = 4 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "get-gfx-geom3-b?" category = "draw" summary = "0x21a (handle)(out_a)(out_b)(out_c) — handler gfx_op_0x21a_query_geom3 @0x42a1b0 GETS a stored 3-vector from object `handle` (FUN_0047f2e0) into out_a/b/c; its generic instruction length is 9 dwords. In label_12649 it reads the object's position vector into G[0x62498/9/a] — a stubbed DRIVER of the render drift. See docs/engine-re.md gfx op-contract table." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra handler 0x42a1b0; FUN_0047f2e0(obj op1) + 3x→FUN_00425fb0(2/3/4). label_12649 site 0x00c86 handle=G[0x62457] → G[0x62498/9/a]." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["g-int", "l-int"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["g-int", "l-int"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["g-int", "l-int"] [[opcode]] op = 0x21b label = "u004213E0" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "line-id?" category = "marker" summary = "1 imm; mov->0x21b->stmt-end; near save/load-messkip — likely line/stmt id, verify not msg-control" noop_headless = true source = "harness" confidence = "med" depends_on = [] evidence = "" [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm"] [[opcode]] op = 0x21c label = "mark-frame-yield" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "mark-frame-yield" category = "control" summary = "Set native run-state bit 0x400; in normal ADV playback this is the retained-presentation render/wait/resume boundary." details = "SC0000 label_1235a reaches this when 0x1c7/0x1cc are zero. Native run-state bit 0x400 parks the interpreter while gfx_render_frame repeatedly samples finite one-shot object channels and queued surface commands; op 0x224 follows after dirty state clears. When system:EffectSkipOnClick is enabled and animation-service flag bit 0 is clear, logical action 4 is consumed and run-state 0x400 is cleared before the engine requests the same forced completion as 0x243 and renders once. Wait release is independent of endpoint completion: service-flags bit 1 can suppress the force worker, while op-0x242-detached channels, ambient cycles, and movie-backed presentation can continue asynchronously after interpreter resume. With ordinary flags, the request completes finite color/scale/rotation/translation channels and type-0 surface commands together. Native trace proves AE001D bind, mode-1 0x203, and 0x202 targets complete in one 5 ms batch with no render, then first compose here." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x223, 0x1c7, 0x1cc] evidence = "Ghidra handler 0x417520 records the 1-dword instruction length and ORs ctx+0xa0ce4 with 0x400. engine_main_tick_with_exception_policy@0x411840 branch 0x4123d1 polls gfx_animation_service_poll; its active branch reads EffectSkipOnClick@0x570f60, rejects gfx_animation_service_flags bit 0, polls/consumes action-4 bit 0x10, clears run-state 0x400, calls gfx_request_force_complete_and_reset_anim_clock@0x4076c0, then gfx_render_frame. capture_presentation_trace.py: after 0x125a6 render, 0xcb8e/0xcb98 bind and 0xd5a/0xd63/0xd73/0xd8a mode+targets execute without render; repeated gfx_render_frame begins only at 0x21c. 2026-07-10, click lifecycle refined 2026-07-29." [[opcode]] op = 0x21d label = "clone-gfx-object" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "clone-gfx-object" category = "draw" summary = "(source_handle)(destination_handle) - clone the complete retained gfx object record (0xb5 dwords / 0x2d4 bytes). SC0000 uses destination=source+1 as range A's old-frame snapshot immediately before 0x223 crossfades range B's updated source into target handle source+2." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x223] evidence = "Ghidra handler 0x423310 -> gfx_object_clone@0x47e4f0. Worker requires source in retained-gfx owner+0x408 (EngineCtx+0x46a1c), creates destination, copies exactly 0xb5 dwords from source object record, then marks owner+0xb558 (EngineCtx+0x51b6c) dirty. SC0000 site 0x128fc passes current handle and handle+1 before queueing 0x223 at 0x129e7." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["l-int"] [[opcode]] op = 0x21e label = "set-anim-transform-norm" argc = 6 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-anim-transform-norm" category = "draw" summary = "(handle)(delay_ms)(duration_ms)(sx)(sy)(sz) — set the normalized SCALE-matrix channel (100=identity). Target obj+0xac is linearly sampled from current obj+0x6c by gfx_object_apply_transform_channels@0x472f00 on retained-gfx frame time owner+0xb550 (EngineCtx+0x51b64), after delay and for duration, then committed. Shares only start timestamp obj+0x34 with op 0x220; neither Z is opacity." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra 0x47eaa0 calls matrix builder 0x48af1d for target obj+0xac. Consumer 0x472f00 uses delay obj+0x3c, duration obj+0x50, current obj+0x6c, target obj+0xac, shared start obj+0x34, and retained-gfx frame time owner+0xb550 (EngineCtx+0x51b64)." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm", "g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 5 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 6 role = "" observed_types = ["imm"] [[opcode]] op = 0x21f label = "set-anim-rotation-axis-angle" argc = 7 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-anim-rotation-axis-angle" category = "draw" summary = "(handle)(delay_ms)(duration_ms)(axis_x)(axis_y)(axis_z)(angle_deg) — set the delayed one-shot axis-angle rotation channel. Handler converts axis/angle integers to floats; worker stores target axis obj+0x1f8 and angle obj+0x208 and builds target matrix obj+0x12c. gfx_object_apply_transform_channels samples current axis/angle linearly on shared start obj+0x34 and composes T(-anchor)*scale*rotation*translation*T(anchor)." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra handler 0x423410 -> gfx_object_set_rotation_channel@0x47eb70; consumer gfx_object_apply_transform_channels@0x472f00 uses delay +0x40, duration +0x54, current axis +0x1ec/angle +0x204, target axis +0x1f8/angle +0x208, current matrix +0xec and target +0x12c. Native SC0000 handle 0xcb8e sample at 11/390 of axis (0,0,1), 30deg matches matrix [0.9055,0.0134;-0.0134,0.9055] and translation (74.1449,47.3127)." [[opcode.semantics.args]] i = 1 role = "object handle" observed_types = ["imm", "g-int"] [[opcode.semantics.args]] i = 2 role = "delay milliseconds" observed_types = ["imm"] [[opcode.semantics.args]] i = 3 role = "duration milliseconds" observed_types = ["imm"] [[opcode.semantics.args]] i = 4 role = "rotation axis X" observed_types = ["imm"] [[opcode.semantics.args]] i = 5 role = "rotation axis Y" observed_types = ["imm"] [[opcode.semantics.args]] i = 6 role = "rotation axis Z" observed_types = ["imm"] [[opcode.semantics.args]] i = 7 role = "target angle degrees" observed_types = ["imm", "l-int"] [[opcode]] op = 0x220 label = "set-anim-transform-abs" argc = 6 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-anim-transform-abs" category = "draw" summary = "(handle)(delay_ms)(duration_ms)(tx)(ty)(tz) — set the absolute TRANSLATION-matrix channel. Target obj+0x1ac is linearly sampled from current obj+0x16c by gfx_object_apply_transform_channels@0x472f00 on retained-gfx frame time owner+0xb550 (EngineCtx+0x51b64), after delay and for duration, then committed. Independent of op 0x21e scale; neither Z is opacity." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra 0x47ecc0 calls matrix builder 0x48afb1 for target obj+0x1ac. Consumer 0x472f00 uses delay obj+0x44, duration obj+0x58, current obj+0x16c, target obj+0x1ac, shared start obj+0x34, and retained-gfx frame time owner+0xb550 (EngineCtx+0x51b64)." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm", "g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 5 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 6 role = "" observed_types = ["imm"] [[opcode]] op = 0x222 label = "present-gfx-object-range" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "present-gfx-object-range" category = "draw" summary = "(first_handle)(count) - flush/present retained graphics objects in the selected handle range into the currently selected backbuffer or offscreen render target, then clear their pending update flags." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x222_handler@0x4235e0 calls gfx_present_object_range@0x482230. The worker enters the graphics service, walks the retained-object map, processes flagged objects whose handles fall in [first,first+count), clears pending flags, and finalizes the render batch in the D3D target previously selected by op 0x20d. HISTORY.BIN uses (0,60000) for the backbuffer. SAVE.BIN instead renders [0,0x130b0) into 800x600 slot 2, then handle 0x15f90 at 14% scale into 112x84 slot 192; op 0x1ae writes slot 192 as the numbered .STH thumbnail." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "l-int"] [[opcode]] op = 0x223 label = "queue-surface-alpha-transition" argc = 8 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "queue-surface-alpha-transition" category = "draw" summary = "(command_key)(target_slot)(range_a_start)(range_a_count)(range_b_start)(range_b_count)(delay_ms)(duration_ms) — queue a type-0 timed alpha transition command in the separate ctx+0x414 command map. This is render-target/surface presentation state, not an object affine matrix. The render frame composites the two handle ranges into target_slot and ramps alpha 0->1 after delay over duration." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x20c, 0x21c, 0x1c7, 0x1cc] evidence = "Ghidra handler 0x423620 -> gfx_queue_surface_alpha_transition@0x47f440. Record fields: type +0=0, start +4=0, delay +8=arg7, duration +0xc=arg8, slot +0x10=arg2, range A +0x14/+0x1c=args3/4, range B +0x18/+0x20=args5/6. gfx_render_frame@0x47fbc0 initializes start from retained-gfx owner+0xb550 (EngineCtx+0x51b64) and consumes type 0 as an alpha ramp. SC0000 executes one shared-helper site at 0x129e7." [[opcode.semantics.args]] i = 1 role = "command record key" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 2 role = "target surface slot" observed_types = ["imm", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "first object range start handle" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 4 role = "first object range count" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 5 role = "second object range start handle" observed_types = ["imm", "l-ptr"] [[opcode.semantics.args]] i = 6 role = "second object range count" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 7 role = "delay milliseconds" observed_types = ["imm", "g-int"] [[opcode.semantics.args]] i = 8 role = "duration milliseconds" observed_types = ["imm", "g-int"] [[opcode]] op = 0x224 label = "clear-gfx-command-queue" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "clear-gfx-command-queue" category = "draw" summary = "Clear the native gfx command queue rooted at ctx+0x418. Host-implicit because the port composites retained state directly." noop_headless = true source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra handler 0x417550 -> gfx_command_queue_clear 0x47cb10, which destroys queued nodes and restores the sentinel links/count." [[opcode]] op = 0x228 label = "u00421940" argc = 5 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "query-gfx-translation-target" category = "draw" summary = "0x228 query translation target (succ)(handle)(outX)(outY)(outZ): clone the retained object, decompose its target translation matrix at obj+0x17c, and return matrix translation obj+0x1ac/+0x1b0/+0x1b4. Returns succ=0 when found; when absent, writes succ=1 and leaves outputs untouched. The C# VM queries TranslationTarget independently of V24. See docs/engine-re.md §SC0000 anim cluster." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2 handler gfx_op_0x228_query_position@0x42a3a0 calls gfx_object_query_translation_target@0x47cdd0. The worker copies the complete 0xb5-dword object record, passes copied obj+0x17c to matrix4_decompose_affine@0x48d7c8, and returns its translation outputs; the decomposition reads matrix elements +0x30/+0x34/+0x38, corresponding to obj+0x1ac/+0x1b0/+0x1b4. SC0000 AE001H queries this before each 0x220 leg. C# regression covers targets (40,-20), (50,-80), (130,-100), plus the missing-object output-preservation path." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "g-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["g-int", "l-int"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["g-int", "l-int"] [[opcode.semantics.args]] i = 5 role = "" observed_types = ["g-int", "l-int"] [[opcode]] op = 0x229 label = "set-gfx-range-transform" argc = 5 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-gfx-range-transform" category = "draw" summary = "(first_handle)(count)(anchor_x)(anchor_y)(anchor_z) — reset and select the retained-gfx range transform applied after each ordinary object matrix for handles in [first, first+count), then set its anchor/pivot. A zero count disables it." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x229_set_gfx_range_transform@0x423700 first calls gfx_range_transform_reset@0x472b80, then writes operands 1/2 to retained-gfx owner+0x420/+0x424 and operands 3..5 to the embedded transform object's anchor at owner+0x440..+0x448. gfx_object_composite@0x47f650 post-multiplies the sampled owner+0xb5b4 matrix only for handles in that selected range. Corpus: 693 calls/309 scripts; 590 disable with all zeroes, 101 select from handle 1 with a script-computed count, and FIELD/LOOK supply camera anchors. This supersedes the former incorrect per-object-position interpretation; per-object direct position is 0x22f." [[opcode.semantics.args]] i = 1 role = "first affected object handle" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "affected handle count; zero disables" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 3 role = "range-transform anchor X" observed_types = ["imm", "g-int"] [[opcode.semantics.args]] i = 4 role = "range-transform anchor Y" observed_types = ["imm", "g-int"] [[opcode.semantics.args]] i = 5 role = "range-transform anchor Z" observed_types = ["imm"] [[opcode]] op = 0x22a label = "set-gfx-range-scale-current" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-gfx-range-scale-current" category = "draw" summary = "(scale_x_percent)(scale_y_percent)(scale_z_percent) — immediately replace the selected retained-gfx range transform's current scale matrix." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x22a_set_gfx_range_scale_current@0x4237b0 divides all three operands by 100 and calls gfx_range_transform_set_scale_current@0x472c10, which builds owner+0x494. FIELD and LOOK each call it once after 0x229/0x22c; FIELD's zoom percent is G[0xccc09]." [[opcode.semantics.args]] i = 1 role = "X scale percent" observed_types = ["g-int"] [[opcode.semantics.args]] i = 2 role = "Y scale percent" observed_types = ["g-int"] [[opcode.semantics.args]] i = 3 role = "Z scale percent" observed_types = ["imm"] [[opcode]] op = 0x22c label = "set-gfx-range-translation-current" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-gfx-range-translation-current" category = "draw" summary = "(translate_x)(translate_y)(translate_z) — immediately replace the selected retained-gfx range transform's current translation matrix." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x22c_set_gfx_range_translation_current@0x423900 passes the three integer operands as floats to gfx_range_transform_set_translation_current@0x472d00, which builds owner+0x594. FIELD computes (400-camera_x, 300-camera_y, 0), making the selected map anchor land at screen center; LOOK uses the same camera helper." [[opcode.semantics.args]] i = 1 role = "translation X" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "translation Y" observed_types = ["l-int"] [[opcode.semantics.args]] i = 3 role = "translation Z" observed_types = ["imm"] [[opcode]] op = 0x22d label = "set-gfx-range-scale-target" argc = 5 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-gfx-range-scale-target" category = "draw" summary = "(delay_ms)(duration_ms)(scale_x_percent)(scale_y_percent)(scale_z_percent) — animate the selected retained-gfx range transform's scale from its current matrix to the target." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x22d_set_gfx_range_scale_target@0x423990 divides operands 3..5 by 100 and calls gfx_range_transform_set_scale_target@0x472d50. The worker arms the embedded transform object's ordinary scale channel (delay obj+0x3c, duration +0x50, target matrix +0xac), which gfx_range_transform_sample_frame@0x476df0 samples before range composition. FIELD has the sole corpus call, a 300 ms camera zoom." [[opcode.semantics.args]] i = 1 role = "delay milliseconds" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "duration milliseconds" observed_types = ["imm"] [[opcode.semantics.args]] i = 3 role = "target X scale percent" observed_types = ["g-int"] [[opcode.semantics.args]] i = 4 role = "target Y scale percent" observed_types = ["g-int"] [[opcode.semantics.args]] i = 5 role = "target Z scale percent" observed_types = ["imm"] [[opcode]] op = 0x22f label = "u00421DD0" argc = 5 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-gfx-position-current" category = "draw" summary = "(handle)(control)(x)(y)(z) — set the object's current/base translation matrix. The native worker also retains operand 2 as channel control state; the port currently applies x/y/z but ignores that control operand." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: gfx_op_0x22f_set_position_anim@0x423b00 fetches x/y/z as floats and passes all five operands to gfx_worker_set_translation@0x472e90. The worker builds the current translation matrix with x/y/z and stores operand 2 in the channel record. This is distinct from the shared range transform at 0x229. The C# handler sets V24 directly and is therefore position-correct but does not yet model operand 2." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 5 role = "" observed_types = ["imm"] [[opcode]] op = 0x230 label = "u00421E70" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "reset-gfx-cyclic-animations" category = "draw" details = "Port status (2026-07-29): implemented as one retained-state reset covering cyclic color, scale, rotation, secondary-matrix, and source-rectangle timing. It disables the four modeled looping channels, clears the complete native raw timing block for drop-in persistence, and preserves base/current transforms, cyclic targets, and one-shot channels." summary = "(handle) — get or create a retained gfx object, clear its cyclic-animation active flag, and zero all five looping-channel start/period pairs without changing current/base transforms." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x230_reset_gfx_cyclic_animations@0x423ba0 fetches the handle and calls gfx_object_reset_cyclic_animation_channels@0x47ee60. The worker clears object flag bit 2 and zeroes starts obj+0x20c/+0x210/+0x214/+0x218/+0x21c plus periods obj+0x220/+0x224/+0x228/+0x22c/+0x230, covering looping color, scale, rotation, the second cyclic matrix, and source-rectangle channels. Corpus: five DEBUGADV effect demonstrations plus one FIELD movement setup before 0x239." [[opcode.semantics.args]] i = 1 role = "retained gfx object handle" observed_types = ["g-int", "l-int"] [[opcode]] op = 0x231 label = "u00421EA0" argc = 4 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "animate-gfx-srcrect-loop" category = "draw" summary = "(handle)(frame_period_ms)(frame_count)(column_count) — loop row-major through the spritesheet. Every sample preserves draw-texture's source-rectangle width/height; frame=floor((shared_frame_time-object_start)/frame_period)%frame_count, src offset=(frame%columns*width, frame/columns*height). All objects use the retained manager's shared current/previous millisecond timestamps but retain their own start and period. The native consumer raises redraw dirty only when the current and previous samples select different cells. Worker gfx_worker_anim_srcrect @0x47eec0; consumer gfx_object_anim_interpolate @0x473ed0." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Native /v2 decompile: worker stores/reset start at obj+0x21c, period at +0x230, frame_count at +0x238, and columns at +0x23c. Interpolator seeds the object start from manager+0xb550, computes ((current-start)/period)%frame_count, then offsets both source-rect X bounds by rect_width*(frame%columns) and Y bounds by rect_height*(frame/columns). It repeats the cell calculation with manager+0xb554 and sets manager+0xb558 dirty only when the two cells differ. engine_main_tick_with_exception_policy shifts current to previous and samples timeGetTime once per active outer tick. SC0000 uses (100,8,4) with AE001H's eight 200x200 cells in a 4x2 800x400 sheet. FIELD configures prototype 0x9c40 with (200,4,2), then DRAWCH clones its complete zero-start record to the entity handles before the first render, phase-locking that family." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm", "g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "l-ptr"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["imm", "l-ptr"] [[opcode]] op = 0x232 label = "u00421EF0" argc = 4 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "animate-gfx-color-loop" category = "draw" summary = "0x232 anim-color (handle)(period)(alpha)(color): ping-pong the temporary packed ARGB passed to the normal object blit. Handler resolves negative alpha/RGB from static color obj+0x60 and clamps alpha above 255. Blend selector obj+0x30 is unchanged: mode 0 keeps default blending (animated alpha is inert; RGB is vertex modulation), while mode 1 uses sampled ARGB alpha as the SRCALPHA scale for additive composition. Fresh static color is 0xffffffff. The C# VM resolves sentinels and consumes sampled ARGB through the unchanged mode-specific path. See docs/engine-re.md §SC0000 anim cluster." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: gfx_op_0x232_anim_color@0x423c30 resolves sentinels then calls gfx_worker_anim_color@0x47ef50; gfx_object_anim_interpolate@0x473ed0 samples static obj+0x60 toward target obj+0x240 into a temporary packed color; gfx_object_composite@0x47f650 passes that color plus unchanged selector obj+0x30 to gfx_object_blit_d3d9@0x4774c0. Blit mode 0 leaves the default path and passes RGB as modulation; mode 1 sets SRCALPHA/ONE additive composition. gfx_object_init_default@0x472810 initializes obj+0x60=0xffffffff. SC0000 0x1a0e (handle,1200,224,-1) is therefore 0xffffffff<->0xe0ffffff with inert alpha and identity RGB in mode 0: no visible pulse. C# regressions cover exact AE001H visual invariance, negative-RGB preservation, mode-0 RGB modulation, and mode-1 additive scaling." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["imm", "l-int"] [[opcode]] op = 0x233 label = "set-scale-cycle" argc = 5 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-scale-cycle" category = "draw" summary = "(handle)(period_ms)(scale_x_percent)(scale_y_percent)(scale_z_percent) — configure a cyclic ping-pong scale matrix that moves identity→target over the first half-period and target→identity over the second." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x233_set_scale_cycle@0x423cf0 divides operands 3..5 by 100 and calls gfx_object_set_scale_cycle@0x47efd0. The worker stores start=0 at obj+0x210, period at +0x224, and the target scale matrix at +0x250. gfx_object_anim_interpolate@0x473ed0 samples a triangular phase 2*min(elapsed%period,period-elapsed%period)/period, linearly blends identity to target, and multiplies the result into the separately anchored cyclic-animation product. Corpus: 31 sites in nine scripts, including eight ordinary ADV scenes." details = "Port status (2026-07-28): implemented as an independent retained-object scale cycle. The compositor samples the exact triangular phase, keeps the channel frame-driven during waits, and composes it after one-shot translation but before the sibling cyclic rotation." [[opcode.semantics.args]] i = 1 role = "retained object handle" observed_types = ["g-int"] [[opcode.semantics.args]] i = 2 role = "period milliseconds" observed_types = ["imm"] [[opcode.semantics.args]] i = 3 role = "target scale X percent" observed_types = ["l-int"] [[opcode.semantics.args]] i = 4 role = "target scale Y percent" observed_types = ["l-int"] [[opcode.semantics.args]] i = 5 role = "target scale Z percent" observed_types = ["imm"] [[opcode]] op = 0x234 label = "anim-start" argc = 5 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "anim-start" category = "draw" summary = "(handle)(period_ms)(axis_x)(axis_y)(axis_z) — configure cyclic rotation. Worker stores period obj+0x228, start obj+0x214=0, and float axis obj+0x244; each frame uses integer degrees floor(((now-start)%period)*360/period). gfx_object_composite right-multiplies this separately anchored transform after the one-shot scale/rotation/translation product, so cyclic rotation also rotates the translation vector." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra handler 0x423da0 converts axis ints to floats -> worker 0x47f060. gfx_object_anim_interpolate@0x473ed0 consumes obj+0x228/+0x214/+0x244 on retained-gfx owner+0xb550 (EngineCtx+0x51b64) and matrix4_make_axis_angle@0x48b215. gfx_object_composite@0x47f650 calls one-shot transform first, cyclic animation second." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["g-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["imm"] [[opcode.semantics.args]] i = 5 role = "" observed_types = ["l-int"] [[opcode]] op = 0x236 label = "play-movie-to-surface" argc = 4 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "play-movie-to-surface" category = "draw" summary = "(packed_resource_id)(surface_slot)(movie_flags)(start_delay_ms) - synchronously open a universal packed SYS4INI/AAI movie and construct its DirectShow graph, then start asynchronous frame delivery into the retained destination surface after the requested service-tick delay. The opcode itself is non-blocking: the VM advances to the next instruction. SC0000's 0x33 and BTL's 0x2axx/0x2bxx MVB ids are already absolute base-catalog indexes." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2 op_0x236_play_movie_to_surface@0x423ee0 fetches operand 1 and passes it unchanged to movie_to_texture_open_asset_graph@0x463e20, which passes it unchanged to asset_open_indexed_entry@0x44f390. The opener directly indexes the flat base table or selected AAI table and has no scene input. The handler leaves playback pending through movie_play_configure@0x4625e0; movie_start_pending_after_sync_delay@0x4633b0 records the first service tick and calls the shared IMediaControl::Run worker after operand 4's delay, giving non-modal playback the same DirectShow first-sample preroll as 0x20f. SC0000 native operand capture and exact 0x13c8->0x13d1 trace prove nonblocking behavior. BTL's live 0x2b21 site supplies 0x2af1/0x2af5/0x2bca/0x2bd8/0x2bde, the exact base entries MVB001/MVB004/MVB914/MVB958/MVB955." details = "The handler requires an existing destination texture, allocates/reuses a 0x478-byte movie-to-texture object for the surface without replacing its resource identity/color key, opens operand 1 through the native universal packed-id reader, builds FilterGraph/IGraphBuilder/IMediaControl/IMediaPosition/IMediaEvent/IBasicAudio, and presents bottom-up RGB samples through the movie texture renderer. Operand 3 selects movie/sound routing policy: bits 0x10000/0x20000/0x40000/0x80000 force mute/music/SE/voice routes, otherwise set:DependMovieSound selects the normal movie route; SC0000's low value 2 is retained as native movie mode state. Godot maps those categories to audio buses and sends FFmpeg-decoded timestamped stereo float PCM through a per-playback AudioStreamGenerator. Both native demuxers begin at the common timeline origin; the first image is latched before audio start and later video/audio retain their source timing. This recovers valid MPEG video preroll before AVStream.start_time instead of advancing picture by roughly 600 ms. Audio-bearing completion retains the terminal frame through the full graph endpoint. Operand 4 delays the pending graph start in native service ticks. Static layer preparation after 0x236 does not terminate the retained movie; 0x21c services it through EOF and subsequent surface cleanup stops/detaches both decoder and audio output. The port type-checks the selected ResolvePacked record as MPEG without adding a scene base or fallback." [[opcode.semantics.args]] i = 1 role = "resource_id" observed_types = ["imm", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "surface_slot" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "movie_flags" observed_types = ["imm", "g-int", "l-ptr"] [[opcode.semantics.args]] i = 4 role = "start_delay_ms" observed_types = ["imm", "l-ptr"] [[opcode]] op = 0x238 label = "set-anim-clock" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-anim-clock" category = "draw" summary = "(duration) — configure the separate global finite-animation service window: native ctx+0x51b78=0 (start), +0x51b7c=duration. The generic instruction length is 3 dwords. NON-BLOCKING: gfx_animation_service_poll seeds the start from the shared frame timestamp and keeps redraw active through the duration. This is not the time source or cadence for cyclic object channels, which sample ctx+0x51b64/+0x51b68 with object-local starts and periods. SC0000 opening @0x123bd/@0x13858. Handler 0x4240e0; Kelebek VA 0x422390 is drift." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x238_handler@0x4240e0 zeros retained-gfx manager+0xb564 and stores the duration at +0xb568. gfx_animation_service_poll@0x407640 seeds +0xb564 from manager+0xb550, marks redraw dirty while current<=start+duration, then clears the window. Cyclic worker gfx_object_anim_interpolate@0x473ed0 instead uses shared frame current/previous +0xb550/+0xb554 and per-channel object start/period fields." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm", "g-int"] [[opcode]] op = 0x239 label = "u004223C0" argc = 6 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "animate-gfx-srcrect-target" category = "draw" summary = "(handle)(delay_ms)(duration_ms)(frame_count)(column_count)(target_frame) — one-shot row-major source-rectangle cell channel. Worker gfx_worker_set_srcrect_cell @0x47ed90 stores timing at obj+0x48/+0x5c, layout at +0x238/+0x23c, and target at +0x234. C# currently retains the endpoint cell immediately." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Native /v2 worker and gfx_object_apply_transform_channels decompile. The consumer advances target_frame cells over duration after delay, preserves the existing source-rect dimensions, and commits the endpoint." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm", "g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "" observed_types = ["imm", "l-ptr"] [[opcode.semantics.args]] i = 3 role = "" observed_types = ["imm", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 4 role = "" observed_types = ["imm", "l-ptr"] [[opcode.semantics.args]] i = 5 role = "" observed_types = ["imm", "l-ptr"] [[opcode.semantics.args]] i = 6 role = "" observed_types = ["imm"] [[opcode]] op = 0x23a label = "query-movie-surface-active" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "query-movie-surface-active" category = "draw" summary = "Write whether a movie-backed surface has a nonzero playback/synchronization state at surface object offset 0x42c; an empty surface slot writes zero." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x23a_handler@0x42a440 indexes the surface table by operand 2, writes zero for a null slot, otherwise writes surface+0x42c != 0. All four corpus sites are movie completion polling loops: BTL checks active combat-movie surfaces 7+, while FIELD and USEMAGIC poll surface 42 between present-frame, frame-time sampling, and sleep(16)." [[opcode.semantics.args]] i = 1 role = "out_active" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "surface_slot" observed_types = ["imm", "l-int"] [[opcode]] op = 0x23b label = "u00422460" argc = 7 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "draw-decimal-glyphs" category = "draw" summary = "Draw an integer as decimal glyph objects from a style registered by opcode 0x13a." details = "First erase digit_capacity objects beginning at base_handle. Then split value by signed division/modulo 10 and bind at most digit_capacity retained objects using adjacent digit-width cells from the registered atlas. Flags bit 0 zero-pads, bit 1 centers the used digits, and bit 2 left-aligns them; with no alignment bit the value is right-aligned in the capacity. The handler admits style index 10 even though native physically clears only records 0..9; see op 0x13a's adjacent-memory alias note. Indices above 10 and unregistered styles raise the engine's script error." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x13a] evidence = "Ghidra /v2: op_0x23b_draw_decimal_glyphs@0x424190 reads the five-dword style record at EngineCtx+0x55180, erases the destination handle range, and calls gfx_object_bind_draw once per displayed digit. Corpus: 147 sites in 24 scripts; DRAWCHP contains 22 calls for the field HUD, including turn/control/mana/level/HP/SP/FS values visible as blank in the DEBUGMAP discrepancy." [[opcode.semantics.args]] i = 1 role = "base_handle" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 2 role = "style_index" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 3 role = "value" observed_types = ["imm", "g-int", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 4 role = "destination_x" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 5 role = "destination_y" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 6 role = "digit_capacity" observed_types = ["imm"] [[opcode.semantics.args]] i = 7 role = "flags" observed_types = ["imm"] [[opcode]] op = 0x23c label = "sample-frame-time" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "sample-frame-time" category = "draw" summary = "Explicitly shift the shared current retained-presentation timestamp to the previous field, then sample the native monotonic millisecond clock as the new current timestamp. The active outer engine tick normally performs the same update; this opcode does not create a distinct timer or fixed-rate animation cadence." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x23c_handler@0x417580 copies EngineCtx frame_timer_current at +0x51b64 to frame_timer_previous at +0x51b68, then stores imp_winmm_timeGetTime() at +0x51b64. engine_main_tick_with_exception_policy@0x411840 performs the same shift/sample once per active outer presentation tick before dirty/movie rendering. BTL, ADDEXP, SHOWGROW, USEMAGIC, and FIELD place the explicit opcode at presentation/present-frame boundaries." [[opcode]] op = 0x23d label = "release-transient-surfaces" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "release-transient-surfaces" category = "draw" summary = "Stop movie bindings and release transient gfx surface slots 42 through 999 inclusive, preserving system-owned slots 0 through 41." details = "For each fixed slot in [42,1000), the handler stops/releases the movie-to-texture object at ctx+0x52bd4[slot], then invokes the ordinary retained-gfx surface-release worker. Protected/externally owned slots may be retained by the worker's per-slot guard. This is the resource half of the common 0x1f6/0x23d full-reset sequence." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x23d_release_transient_surfaces@0x4175c0 loops EDI=42 while EDI<1000, stops/releases ctx+0x52bd4[EDI] movie objects, and calls retained_gfx_release_surface@0x474e40 on owner ctx+0x46614. DATA1: 149 calls in 146 scripts; 146 directly follow 0x1f6." [[opcode]] op = 0x23f label = "u00422930" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "query-surface-stop-time-ms" category = "draw" summary = "(out_stop_time_ms)(surface_slot) — query the DirectShow stop position retained by a loaded movie surface, convert seconds to integer milliseconds by truncating toward zero, and write -1 when the movie slot is empty. Port-only host decoder failure is modeled as an explicitly completed, zero-duration movie." noop_headless = false source = "investigation" confidence = "high" depends_on = [] details = "The surface object's +0x414 member is IMediaPosition. Its vtable +0x28 entry is get_StopTime (after IUnknown, IDispatch, get_Duration, put_CurrentPosition, and get_CurrentPosition), returning a REFTIME double in seconds. Native multiplies by the double constant 1000.0 and calls the compiler float-to-integer helper, whose SSE2 and x87 paths both truncate toward zero. It does not inspect the getter HRESULT. For a valid graph the default stop time normally equals media duration, which explains duration-style consumers, but the exact ABI is stop position rather than get_Duration. The handler only queries state; it does not yield or alter playback. Native has no meaningful answer for a port host that cannot build a graph for a valid shipped MPEG. Port safety extension: op 0x236 normalizes missing host metadata to stop time 0 and marks decoder failure completed, while a truly empty movie slot still returns -1." evidence = "Ghidra /v2: op_0x23f_query_surface_stop_time_ms@0x42a520 indexes EngineCtx surface array operand 2, returns -1 for a null slot, otherwise dereferences movie+0x414 IMediaPosition and calls vtable+0x28 get_StopTime. The adjacent op 0x23e uses the same interface at vtable+0x24 get_CurrentPosition; movie op 0x245 uses +0x20 put_CurrentPosition, independently confirming the documented vtable layout. The returned seconds are multiplied by g_dMillisecondsPerSecond@0x5713e8 (double 1000.0) and truncated by crt_ftol2_sse_truncate@0x550850 before vm_operand_write(1). All 23 Himegari sites in 17 scripts are associated with a preceding op 0x236 movie load to the queried surface. FIELD divides one result by 16 and adds 1 to build a 16 ms callback schedule; another path clamps the result to 600 ms before DRAWVOL." [[opcode.semantics.args]] i = 1 role = "out_stop_time_ms" observed_types = ["l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "surface_slot" observed_types = ["imm", "g-int", "l-int"] [[opcode]] op = 0x241 label = "play-movie-to-surface-at-position" argc = 5 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "play-movie-to-surface-at-position" category = "draw" summary = "(packed_resource_id)(surface_slot)(movie_flags)(start_delay_ms)(position_ms) - perform the same non-modal movie-to-retained-surface open as opcode 0x236, seek the graph to the requested millisecond position, then arm playback." details = "The seek is applied through IMediaPosition::put_CurrentPosition before movie_play_configure records the flags and start delay. CALLBACK_LOAD does not restore a separately sampled live playback cursor: the ADV setup path stores opcode 0x23f's stop time in global array 0x329e, and load passes stop_time_ms-1. The shipped use therefore reconstructs the movie layer at its terminal frame after a numbered load. Port status (2026-07-29): implemented through the existing 0x236 surface binding, routing, and completion lifecycle. FFmpeg ABI v3 seeks its independent video and audio demuxers before worker start; managed preroll selects the video frame active at the requested position (retaining the last frame at stop_time_ms-1), trims audio to the same point, and rebases both remaining timelines to playback time zero. Negative positions clamp to zero and positions at or beyond the graph stop clamp to stop_time_ms-1." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x236, 0x23f] evidence = "Ghidra /v2: op_0x241_play_movie_to_surface_at_position@0x4247e0 uses the same 0x478-byte movie-to-texture object, destination render-target check, packed asset open, sound-route/volume path, and movie_play_configure worker as op 0x236. Between open and configure it calls movie+0x414 IMediaPosition vtable+0x20 put_CurrentPosition with operand5/1000.0; operand4 is then passed unchanged as the start delay. Corpus: sole site CALLBACK_LOAD@0x189 receives the layer resource, surface and flags from globals 0x3276/0x3239/0x328a, delay 0, and global 0x329e[layer]-1. The ordinary ADV creation path writes op 0x23f stop_time_ms into 0x329e immediately after op 0x236." [[opcode.semantics.args]] i = 1 role = "universal packed movie resource id" observed_types = ["l-ptr"] [[opcode.semantics.args]] i = 2 role = "surface slot" observed_types = ["l-ptr"] [[opcode.semantics.args]] i = 3 role = "movie flags and sound-route policy" observed_types = ["l-ptr"] [[opcode.semantics.args]] i = 4 role = "start delay ms" observed_types = ["imm"] [[opcode.semantics.args]] i = 5 role = "initial playback position ms" observed_types = ["l-int"] [[opcode]] op = 0x242 label = "set-object-animation-detached" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-object-animation-detached" category = "draw" summary = "Replace the retained object's animation-control word at obj+0x2d0. Bit 0 detaches finite one-shot channels from blocking presentation and protects them from 0x243 forced completion until they finish naturally." details = "The setter get-or-creates the object and writes the complete operand. During retained composition, bit 0 makes the one-shot color/scale/rotation/translation/source-rectangle group ignore the manager's force-complete request and suppresses the blocking-dirty flag while leaving the redraw-dirty flag active. When no finite channel remains, native clears bit 0 and the shared start time. SC0000's two common CG loaders explicitly write zero. Across DATA1, 302 calls write zero and the sole nonzero call is BTL.BIN's animated battle-object setup, which writes one." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x242_set_object_animation_detached@0x4249d0 calls gfx_object_set_animation_control@0x47f1a0. Consumer gfx_object_apply_transform_channels@0x472f00 tests obj+0x2d0 bit 0 to suppress manager+0xb55c forced completion and manager+0xb560 blocking-dirty publication, while still setting manager+0xb558 redraw dirty; it clears bit 0 when the finite group completes. DATA1: 303 calls; values zero x302, one x1." [[opcode.semantics.args]] i = 1 role = "handle_id" observed_types = ["l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "animation control flags; bit 0 = detached/nonblocking" observed_types = ["imm"] [[opcode]] op = 0x243 label = "reset-anim-clock" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "reset-anim-clock" category = "draw" summary = "When animation-service flag bit 1 is clear, request forced completion of ordinary finite one-shot object channels and reset the global animation-service elapsed/duration fields. Objects detached by 0x242 bit 0 ignore the force request." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x242] evidence = "Ghidra handler 0x4182d0: if !(ctx+0x51b80 & 2), set retained-gfx owner+0xb55c (EngineCtx+0x51b70)=1 and zero owner+0xb564/+0xb568. gfx_object_apply_transform_channels treats force value 1 as immediate completion unless obj+0x2d0 bit 0 is set. SC0000 label_1235a calls it before present-frame." [[opcode]] op = 0x248 label = "set-tiled-surface-edge-length" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-tiled-surface-edge-length" category = "draw" summary = "Set the legacy mode-1 tiled-surface edge length in pixels. Native surface creation, blitting, rectangle operations, and AGF upload use it to partition one logical surface into ordinary texture tiles; SYSTEM4 initializes it to 128." details = "Port status (2026-07-29): implemented as retained signed-dword graphics configuration. The value survives scene-context resets and does not dirty presentation or rebuild existing surfaces. The portable backend deliberately keeps mode-1 surfaces as contiguous RGBA images rather than reproducing legacy D3D texture tiling." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x248_set_tiled_surface_edge_length@0x424af0 directly stores operand 1 in g_nTiledSurfaceEdgeLength@0x5b15b0. Its 30 xrefs are confined to gfx_tiled_surface_create/blit/rect_op/upload_agf, where dimensions are split by ceil(size / edge). SYSTEM4's sole call passes 128 immediately after opcode 0x149. This configures opcode 0x249's mode-1 tiled wrapper and is unrelated to adjacent opcode 0x24d." [[opcode.semantics.args]] i = 1 role = "tile edge length in pixels" observed_types = ["imm"] [[opcode]] op = 0x249 label = "load-raw-texture-surface" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "load-raw-texture-surface" category = "draw" summary = "Load an AGF by universal packed SYS4INI/AAI catalog id into a retained surface slot using native surface mode 1 and the same packed-id/RGB-colorkey contract as set-texture (0x1f9)." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x249_load_raw_texture_surface@0x424b20 is instruction-length 7 and is contract-identical to gfx_op_0x1f9_load_surface through release, unchanged packed operand, asset_open_indexed_entry, RGB colorkey conversion, load failure, and cleanup. Its only relevant distinction is mode-1 gfx_surface_mode1_ctor, a tiled large-image wrapper: gfx_tiled_surface_create@0x432ff0 splits logical dimensions into ordinary mode-0 child textures; gfx_tiled_surface_upload_agf@0x431a10 decodes/uploads regions; gfx_tiled_surface_blit@0x4316b0 subdivides logical source rectangles. Corpus literals include FIELD 0x32da..0x32dd -> SO005/SO007/SO008A/SO007A. The former claim that only 0x249 bypasses scene normalization was wrong because native never performs scene normalization for 0x1f9 either." [[opcode.semantics.args]] i = 1 role = "universal packed SYS4INI/AAI catalog id" observed_types = ["imm", "l-int", "l-ptr"] [[opcode.semantics.args]] i = 2 role = "surface slot" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 3 role = "RGB888 colorkey; negative disables colorkey" observed_types = ["imm", "l-int"] [[opcode]] op = 0x24d label = "play-movie-mask-transition" argc = 12 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "play-movie-mask-transition" category = "draw" summary = "Capture an old retained-object range into the newly drawn scratch surface, retime a movie to the requested duration, and use each decoded frame's green channel as a byte-per-pixel alpha mask within the supplied rectangle." details = "The RGB24 sample callback copies the bottom-up green byte verbatim. In the native 32-bit mask compositor, captured RGB remains unchanged and the output alpha byte is the high byte of `((source_argb >> 8) * mask_byte)`; this records the exact packed-integer operation, including its low-color carry, rather than approximating it as a scalar luminance crossfade. Mode 1 initializes the mask to 0 and completes at 255; all other modes initialize at 255 and complete at 0. Port status (2026-07-29): implemented through the existing retained-range software rasterizer and dynamic scratch-surface path. The decoder honors start delay and native stop/duration retiming, publishes logical top-down green masks, and holds opcode 0x21c until movie completion; click completion remains limited to type-0 transitions." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x236, 0x223] evidence = "Ghidra /v2: op_0x24d_play_movie_mask_transition@0x424db0 opens operand 10 through movie_to_texture_open_asset_graph, configures delay operand 11, sets IMediaPosition::put_Rate to native_stop_time_ms / operand12_ms, allocates a width*height byte mask through movie_texture_allocate_transition_mask@0x415d90, and calls gfx_movie_mask_transition_register@0x47f560 with operands 1-9/11. movie_texture_renderer_receive_sample@0x4628d0's mask-active branch copies byte +1 of every bottom-up RGB24 sample pixel, i.e. its green channel, directly into that mask. The retained compositor's type-1 branch applies the movie-updated mask between the old and new object ranges and holds its blocking dirty state until playback completes. Both DEBUG.BIN sites use TEST.AGF (an MPEG program stream), delay 0, and duration 1000 ms." [[opcode.semantics.args]] i = 1 role = "new retained-command range key" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "scratch movie surface slot" observed_types = ["imm"] [[opcode.semantics.args]] i = 3 role = "old/source retained-object range start" observed_types = ["imm"] [[opcode.semantics.args]] i = 4 role = "old/source retained-object range count" observed_types = ["imm"] [[opcode.semantics.args]] i = 5 role = "mask destination x" observed_types = ["imm", "l-int"] [[opcode.semantics.args]] i = 6 role = "mask destination y" observed_types = ["imm"] [[opcode.semantics.args]] i = 7 role = "mask width" observed_types = ["imm"] [[opcode.semantics.args]] i = 8 role = "mask height" observed_types = ["imm"] [[opcode.semantics.args]] i = 9 role = "mask direction/mode" observed_types = ["imm"] [[opcode.semantics.args]] i = 10 role = "universal packed movie resource id" observed_types = ["imm"] [[opcode.semantics.args]] i = 11 role = "movie start delay in milliseconds" observed_types = ["imm"] [[opcode.semantics.args]] i = 12 role = "total transition duration in milliseconds" observed_types = ["imm"] [[opcode]] op = 0x24e label = "set-gfx-animation-service-flags" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-gfx-animation-service-flags" category = "draw" summary = "Replace the retained graphics animation-service flags with operand 1. BTL brackets combat presentation with values 1 and 0; GAMECLEAR uses 3 and 0." details = "Bit 0 disables the run-state-0x400 EffectSkipOnClick branch while finite retained presentation is active. Bit 1 independently suppresses opcode 0x243 and the click branch's shared force-complete/clock-reset request. BTL brackets combat presentation with 1/0 and GAMECLEAR uses 3/0, protecting those service-owned animations from ordinary ADV click completion." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x24e_handler@0x425070 writes operand 1 directly to EngineCtx.gfx_animation_service_flags at +0x51b80. engine_main_tick_with_exception_policy@0x411840 tests bit 0 before polling action 4 in the run-state-0x400 EffectSkipOnClick branch. gfx_request_force_complete_and_reset_anim_clock@0x4076c0 tests bit 1 before setting force-complete and zeroing the service clock; opcode 0x243 calls the same worker." [[opcode.semantics.args]] i = 1 role = "flags" observed_types = ["imm"] [[opcode]] op = 0x258 label = "set-surface-persistence-flags" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-surface-persistence-flags" category = "draw" summary = "(surface_slot)(flags) - replace the native surface record's numbered-save persistence flags; bit 0 controls asset reload on restore and bit 1 controls the adjacent still-unnamed field." details = "Scripts place declaration chains immediately after opcode 0x259 clears both fields. The port models bit 0 because it is consumed by layout-3 restoration; bit 1 is retained as an identified native field but has no known runtime consumer yet." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x258_set_surface_persistence_flags@0x4250a0 reads the slot and flags operands and calls gfx_surface_set_persistence_flags@0x4159c0. The worker writes flags&1 to record +0x08 and (flags>>1)&1 to +0x0c in both 1,000-record tables. This corrects the old upstream address/name association: 0x422fe0 is opcode 0x20f movie playback, not 0x258. Corpus declaration chains follow opcode 0x259 at script entry." [[opcode.semantics.args]] i = 1 role = "surface slot" observed_types = ["imm"] [[opcode.semantics.args]] i = 2 role = "persistence flags" observed_types = ["imm"] [[opcode]] op = 0x259 label = "script-entry" argc = 0 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "script-entry" category = "draw" summary = "zero-arg script/prologue entry; clears surface-record persistence fields +0x08 and +0x0c across both 1,000-record native tables before the declaration chain continues" noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x259_script_entry_clear_surface_persistence_flags@0x417660 loops over both 20,000-byte surface-record tables (1,000 records x 20 bytes), writing zero to record +0x08 and +0x0c. SC0000 offset 0x0 and every observed script entry begins with this opcode; 0x258 continues the declaration chain. Port clears its modeled +0x08 reload policy; +0x0c remains opaque/unmodeled." [[opcode]] op = 0x2bd label = "set-font-bold" argc = 1 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "set-font-bold" category = "adv" summary = "(enabled) - set the current primary text font weight to 700 when enabled or 0 when disabled, then rebuild the native font state." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x2bd_set_font_bold@0x4251c0 writes enabled?700:0 to LOGFONT weight at text-manager+0x4dc and calls text_rebuild_primary_font_resources@0x44f7f0. It immediately follows set-font throughout the UI corpus; HISTORY.BIN selects the Mincho face with bold enabled." [[opcode.semantics.args]] i = 1 role = "" observed_types = ["imm"] [[opcode]] op = 0x2bf label = "schedule-sfx-start" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "schedule-sfx-start" category = "audio" summary = "(channel)(start_mode)(delay_ms) - schedule the already-loaded SFX channel to enter the ordinary start worker after the requested delay. Channels are limited to 0..9." noop_headless = false source = "frida" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x2bf_schedule_sfx_start@0x425240 calls sfx_set_delay@0x482720 on the ctx+0x14024 sound facade. The worker's native error text names Function:SetDelay, validates channel<=9, and stores active/progress/delay/start-mode state. Existing SC0000 trace: SetDelay(channel 4, mode 0, 100) is followed about 109 ms later by the ordinary sfx_channel_start worker on channel 4 with mode 0 and no intervening 0xb5." [[opcode.semantics.args]] i = 1 role = "sound channel (0..9)" observed_types = ["imm", "g-int", "l-int"] [[opcode.semantics.args]] i = 2 role = "start mode forwarded to SFX start worker" observed_types = ["imm"] [[opcode.semantics.args]] i = 3 role = "delay in milliseconds" observed_types = ["imm", "l-int"] [[opcode]] op = 0x2c0 label = "schedule-voice-playback" argc = 3 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "schedule-voice-playback" category = "audio" summary = "Arm delayed voice playback: (voice_id, playback_variant, delay_ms). The engine main tick starts the voice after the monotonic deadline." details = "The setter replaces the single pending request, marks it active, and clears its start timestamp. On the first service tick the worker captures the current millisecond time; once unsigned elapsed time reaches delay_ms it clears the request and calls the ordinary indexed-voice player with voice_id and playback_variant. BTL's only call selects a randomized combat voice id, variant 0, and an entity-specific delay." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x2c0_schedule_voice_playback@0x425290 forwards three operands to voice_schedule_delayed_playback@0x488480 on the text/ADV service at EngineCtx+0x14508. That worker stores active=1, start=0, delay at +0x424, voice id at +0x428, and variant at +0x42c. engine_main_tick_with_exception_policy calls voice_tick_delayed_playback@0x4884d0; after unsigned elapsed >= delay it clears the request and calls voice_play_indexed_asset(voice_id,variant). Corpus: one BTL site at 0x2f6e." [[opcode.semantics.args]] i = 1 role = "voice_id" observed_types = ["l-ptr"] [[opcode.semantics.args]] i = 2 role = "playback_variant" observed_types = ["imm"] [[opcode.semantics.args]] i = 3 role = "delay_ms" observed_types = ["l-ptr"] [[opcode]] op = 0x2c5 label = "strlen" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "byte-string-length" category = "compute" summary = "Write the resolved NUL-terminated engine string's raw byte length." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x2c5_byte_strlen@0x42a690 resolves operand 2, scans byte-by-byte through the terminating NUL, and writes the byte count to operand 1. Corpus: 23 sites in 10 scripts. BUNKI uses two sites to size its temporary menu surface and horizontally place all primary option strings." details = "This is raw strlen(bytes), not a .NET UTF-16 character count. BUNKI compares all option/title byte lengths, adds four bytes of padding, and converts the result to pixels; skipping the opcode leaves its local maximum at zero, forcing the minimum-width menu and shifting every primary label right. The C# VM shares the configurable native-string byte counter used by op 0x1a6 (CP932 by default), including embedded-NUL termination; focused tests cover literals and local-string pointers." [[opcode.semantics.args]] i = 1 role = "destination" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "string" observed_types = ["g-str", "l-str", "l-str-ptr"] [[opcode]] op = 0x2c6 label = "cp932-character-length" argc = 2 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "cp932-character-length" category = "compute" summary = "(out)(string) - write the Japanese-locale multibyte character count of the CP932 string, counting a valid lead/trail pair as one character." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "The real /v2 dispatch slot registers op_0x2c6_cp932_character_length@0x42a6d0. The handler sets LC_ALL to `japanese`, resolves operand 2, calls MSVC _mbstrlen, and writes the result to operand 1. INPUTNAME's sole site at 0x1002 uses this count as the loop bound before slicing each character with opcode 0x2c8." details = "This is character count rather than .NET UTF-16 length or raw CP932 byte length. Port status (2026-07-29): implemented by encoding the C-string prefix through VmOptions.NativeStringCodePage and counting valid CP932 lead/trail pairs as one character; focused tests cover mixed single-byte and double-byte characters." [[opcode.semantics.args]] i = 1 role = "character count out" observed_types = ["l-int"] [[opcode.semantics.args]] i = 2 role = "source string" observed_types = ["l-str"] [[opcode]] op = 0x2c8 label = "cp932-substring" argc = 4 abi_source = "kelebek+decode-validated" [opcode.semantics] name = "cp932-substring" category = "compute" summary = "(out)(string)(start)(count) - copy a CP932 substring selected by multibyte-character index and count without splitting valid lead/trail pairs." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "The real /v2 dispatch slot registers op_0x2c8_cp932_substring@0x42c420. It copies operand 2 into a 256-byte buffer, sets LC_ALL to `japanese`, obtains _mbstrlen, reads start and count, clamps end=start+count to the character length when end is below 1 or beyond that length, and walks bytes with _mbbtype so CP932 lead/trail pairs are copied together. It writes the selected byte interval back through operand 1. INPUTNAME's sole site at 0x1021 loops substring(name,index,1) into its eight local character cells." details = "The release call uses nonnegative in-range indices and count 1. Port status (2026-07-29): implemented over encoded byte spans, preserving every valid lead/trail pair and reproducing native end clamping (`end = length` when start+count < 1 or > length) before selecting the half-open character interval [start,end)." [[opcode.semantics.args]] i = 1 role = "substring out" observed_types = ["l-str-ptr"] [[opcode.semantics.args]] i = 2 role = "source string" observed_types = ["l-str"] [[opcode.semantics.args]] i = 3 role = "start character index" observed_types = ["l-int"] [[opcode.semantics.args]] i = 4 role = "character count" observed_types = ["imm"] [[opcode]] op = 0x4 label = "u00417E30" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00417E30" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x7 label = "u00417F90" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00417F90" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xa label = "u00424170" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00424170" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xb label = "u00418090" argc = 11 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00418090" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xc label = "u004149E0" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004149E0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xd label = "u004181A0" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004181A0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xe label = "u00418200" argc = 12 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00418200" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xf label = "u00418300" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00418300" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x10 label = "u00414A00" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00414A00" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x11 label = "u00418330" argc = 9 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00418330" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x12 label = "u004183F0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004183F0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x13 label = "u00418420" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00418420" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x14 label = "u00414A20" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00414A20" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x15 label = "u00418490" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00418490" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x16 label = "u00418520" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00418520" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x17 label = "u00418560" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00418560" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1e label = "u004185B0" argc = 8 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004185B0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1f label = "u00418690" argc = 12 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00418690" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x20 label = "u004187C0" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004187C0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x23 label = "u004189D0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "fade-surface-in-from-white" category = "draw" summary = "(surface_slot)(timing_argument) — broader-AGE mode-2 sibling of 0x21: block while fading from white to a captured full-frame surface." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x20c, 0x20d] evidence = "Ghidra /v2: dispatch slot 0x23 resolves to op_0x23_fade_surface_in_from_white@0x41cc80 and starts screen_transition_begin@0x439da0 mode 2 with the same timing conversion as 0x21/0x22/0x25. Not observed in Himegari's script corpus." [[opcode.semantics.args]] i = 1 role = "captured full-frame surface slot" observed_types = [] [[opcode.semantics.args]] i = 2 role = "transition timer interval / accelerated duration argument" observed_types = [] [[opcode]] op = 0x24 label = "u00418A90" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "fade-surface-out-to-white" category = "draw" summary = "(surface_slot)(timing_argument) — broader-AGE mode-3 sibling of 0x22: block while fading a captured full-frame surface to white." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x20c, 0x20d] evidence = "Ghidra /v2: dispatch slot 0x24 resolves to op_0x24_fade_surface_out_to_white@0x41cd40 and starts screen_transition_begin@0x439da0 mode 3 with the same timing conversion as 0x21/0x22/0x25. Not observed in Himegari's script corpus." [[opcode.semantics.args]] i = 1 role = "captured full-frame surface slot" observed_types = [] [[opcode.semantics.args]] i = 2 role = "transition timer interval / accelerated duration argument" observed_types = [] [[opcode]] op = 0x26 label = "u00418C00" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00418C00" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x27 label = "u00418CC0" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00418CC0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x28 label = "u00418D90" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00418D90" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2a label = "u00418E60" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00418E60" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2b label = "u00418F30" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00418F30" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2c label = "u00419010" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00419010" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2d label = "u004190A0" argc = 12 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004190A0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2e label = "u004194B0" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004194B0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2f label = "u004195A0" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004195A0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x30 label = "u00419670" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00419670" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x31 label = "u00419750" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00419750" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x32 label = "u004197C0" argc = 10 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004197C0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x33 label = "u00419900" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00419900" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x34 label = "u004199C0" argc = 12 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004199C0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x35 label = "u00419AF0" argc = 11 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00419AF0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x36 label = "u00419C00" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00419C00" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x37 label = "u00419C90" argc = 11 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00419C90" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x38 label = "u00419DA0" argc = 12 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00419DA0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x62 label = "u0041A360" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041A360" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x65 label = "u00414AA0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00414AA0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x66 label = "u00414AE0" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00414AE0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x67 label = "u00414B20" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00414B20" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x68 label = "u00414B60" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00414B60" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x69 label = "u00414BA0" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00414BA0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x6a label = "u00414BE0" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00414BE0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x6b label = "u00414C20" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00414C20" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x6d label = "u00416960" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00416960" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x74 label = "u0041AC00" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041AC00" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x7d label = "u0041AE00" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041AE00" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x7e label = "u0041AEA0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041AEA0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x81 label = "u0041AF30" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041AF30" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x82 label = "u0041AF80" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041AF80" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x83 label = "u00414C90" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00414C90" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x84 label = "u0041AFE0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041AFE0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x89 label = "u0041B2E0" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041B2E0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x8a label = "u0041B330" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041B330" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x8d label = "u0041BCE0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041BCE0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x8e label = "u0041BD60" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041BD60" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x91 label = "u0041BFB0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041BFB0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x92 label = "u0041C030" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041C030" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x95 label = "u0041C0C0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041C0C0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x96 label = "u004150C0" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004150C0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xaa label = "u0041C270" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041C270" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xab label = "u0041C330" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041C330" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xac label = "u0041C3E0" argc = 9 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041C3E0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xad label = "u00415110" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00415110" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xaf label = "u00415480" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00415480" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xb0 label = "u0041C530" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041C530" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xb1 label = "u0041C560" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041C560" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xb2 label = "u0041C590" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041C590" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xb3 label = "u004154B0" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004154B0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xbb label = "u0041D250" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041D250" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xbc label = "u0041D280" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041D280" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xbd label = "u00415570" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00415570" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xbe label = "u004155E0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004155E0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xc1 label = "u00415650" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00415650" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xc3 label = "u0041D390" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041D390" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xc9 label = "u00415770" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00415770" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xca label = "u004157A0" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004157A0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xcb label = "u00415800" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00415800" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xce label = "u0041E0B0" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041E0B0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xcf label = "u00416D40" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00416D40" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xd1 label = "u00415860" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00415860" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xd2 label = "u0041E110" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041E110" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xd6 label = "u004267D0" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004267D0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xd7 label = "u0041E1A0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041E1A0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xd8 label = "u0041E150" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041E150" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xda label = "u004158B0" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004158B0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xfa label = "u00415940" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00415940" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xfc label = "u004159F0" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004159F0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0xfd label = "u0041E2D0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041E2D0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x102 label = "u0041E3C0" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041E3C0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x103 label = "u0041E4A0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041E4A0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x104 label = "u00415C50" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00415C50" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x105 label = "u0041E4D0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041E4D0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x106 label = "u00415E40" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00415E40" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x10e label = "u0041E650" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041E650" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x10f label = "u0041E690" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041E690" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x12d label = "u0041E720" argc = 7 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041E720" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x138 label = "push-int-stack" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "push-int-stack" category = "compute" summary = "(stack_id, value) - push one signed integer onto the selected native LIFO, growing its dword buffer by 0x100 entries when full." details = "Port status (2026-07-29): implemented over the scene-context stack registry. All signed dword values round-trip through the VM's integer-cell representation, and handler-addressable slot 10 remains independent host state." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x137] evidence = "Ghidra /v2: op_0x138_push_int_stack@0x421a40 admits stack ids <=10 and calls int_stack_push@0x408860. The helper grows capacity by the stored 0x100-dword quantum when top+2 reaches capacity, increments top, and stores the value. The ten-slot/id-10 alias caveat is documented on op 0x137. No Himegari script calls this opcode." [[opcode.semantics.args]] i = 1 role = "stack_id" observed_types = [] [[opcode.semantics.args]] i = 2 role = "value" observed_types = [] [[opcode]] op = 0x139 label = "try-pop-int-stack" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "try-pop-int-stack" category = "compute" summary = "(stack_id, out_success, out_value) - pop the most recently pushed integer and write success=1, or write success=0 when empty." details = "On success native writes the removed value. On empty, the release handler still writes its reused `this`/EngineCtx local into out_value, so that cell is implementation garbage and must not be consumed unless out_success is nonzero. Port status (2026-07-29): implemented as LIFO TryPop; success writes 1 and the signed dword, while empty writes 0 and deliberately preserves out_value rather than exposing a host pointer. The ten-slot/id-10 alias caveat is documented on op 0x137." noop_headless = false source = "investigation" confidence = "high" depends_on = [0x137, 0x138] evidence = "Ghidra /v2: op_0x139_try_pop_int_stack@0x4297a0 reads top at stack+0x10; when top>=0 it reads data[top] and decrements top, then writes success and value. When top<0, the local holding the value was never replaced from the incoming EngineCtx pointer, yet operand 3 is still written. No Himegari script calls this opcode." [[opcode.semantics.args]] i = 1 role = "stack_id" observed_types = [] [[opcode.semantics.args]] i = 2 role = "out_success" observed_types = [] [[opcode.semantics.args]] i = 3 role = "out_value" observed_types = [] [[opcode]] op = 0x13b label = "u0041F440" argc = 7 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041F440" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x13c label = "u0041F7E0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041F7E0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x13d label = "u0041F840" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041F840" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x13e label = "u0041F8D0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041F8D0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x145 label = "u00416040" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00416040" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x146 label = "u0041FB40" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041FB40" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x147 label = "u0041FB80" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041FB80" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x148 label = "get-system-menu-show-delay" argc = 1 observed_in_himegari = false abi_source = "kelebek+decode-validated" [opcode.semantics] name = "get-system-menu-show-delay" category = "input" summary = "(out) - return the current unsigned TIMER_SHOWMENU top-edge dwell threshold paired with opcode 0x149." details = "Port status (2026-07-29): implemented with opcode 0x149. The getter writes the retained dword through the VM's signed integer-cell representation so high-bit values preserve the same native 32 bits." noop_headless = false source = "investigation" confidence = "high" depends_on = [] evidence = "Ghidra /v2: op_0x148_get_system_menu_show_delay@0x429c70 writes EngineCtx+0x5511c to operand 1. Scene reset initializes the field to 0, opcode 0x149 replaces it, and the windowed top-edge TIMER_SHOWMENU path consumes it as an unsigned millisecond threshold. This getter is not observed in Himegari's corpus." [[opcode.semantics.args]] i = 1 role = "out: unsigned top-edge system-menu dwell threshold in milliseconds" [[opcode]] op = 0x14a label = "u0041FD10" argc = 7 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041FD10" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x14b label = "u0041FF50" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041FF50" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x14c label = "set-agerc-export" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "set-agerc-export" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x14d label = "call-agerc-export" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "call-agerc-export" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x190 label = "u0041C5E0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041C5E0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1b1 label = "u0041B5C0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041B5C0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1be label = "u0041D9D0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041D9D0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1c0 label = "u0041DB70" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041DB70" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1c2 label = "u0041B860" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041B860" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1c3 label = "u0041B8A0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041B8A0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1c4 label = "u00415720" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00415720" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1c5 label = "u00425800" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00425800" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1c6 label = "u0041DD80" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041DD80" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1c9 label = "u0041B8E0" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041B8E0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1cd label = "u0041A560" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041A560" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1d6 label = "u0041DA40" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041DA40" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1d7 label = "u0041DA80" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041DA80" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1d8 label = "u0041DAD0" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041DAD0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1d9 label = "u0041DB20" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0041DB20" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x1fc label = "u004205F0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004205F0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x200 label = "u00420800" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00420800" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x201 label = "u00416190" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00416190" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x206 label = "u004161C0" argc = 7 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004161C0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x209 label = "u00420C50" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00420C50" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x210 label = "u00420FF0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00420FF0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x211 label = "u00421060" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00421060" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x214 label = "u00421120" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00421120" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x221 label = "u00421670" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00421670" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x225 label = "u00421780" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00421780" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x226 label = "u004217D0" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004217D0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x227 label = "u00421880" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00421880" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x22b label = "u00421B30" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00421B30" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x22e label = "u00421D10" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00421D10" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x235 label = "u00422100" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00422100" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x237 label = "u00422350" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00422350" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x23e label = "u004228C0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004228C0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x240 label = "u004229A0" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004229A0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x244 label = "u00416360" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00416360" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x245 label = "u00422DA0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00422DA0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x246 label = "u00422E10" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00422E10" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x247 label = "u00416390" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00416390" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x24a label = "u004163C0" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004163C0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x24f label = "u00422ED0" argc = 10 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00422ED0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x250 label = "u00422F60" argc = 10 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00422F60" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x251 label = "u00422FF0" argc = 12 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00422FF0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x252 label = "u00423000" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00423000" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x253 label = "u00423019" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00423019" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x254 label = "u00423049" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00423049" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x256 label = "u00423050" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00423050" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x257 label = "257" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "257" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x25a label = "u00423120" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00423120" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x25b label = "25B" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "25B" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x25c label = "u00423122" argc = 8 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00423122" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x25d label = "u00423123" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00423123" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x25e label = "u00423124" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00423124" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x25f label = "u00423125" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00423125" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x260 label = "u00423126" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00423126" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x261 label = "u00423127" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00423127" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x262 label = "262" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "262" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x263 label = "263" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "263" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x264 label = "264" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "264" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2bc label = "u00423020" argc = 11 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00423020" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2be label = "u00423140" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00423140" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2c1 label = "u00425BC0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00425BC0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2c2 label = "u00425CD0" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00425CD0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2c3 label = "u00423200" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00423200" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2c4 label = "u00416450" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u00416450" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2c7 label = "u0042B5F0" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042B5F0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2c9 label = "2C9" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2C9" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2cc label = "2CC" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2CC" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2cd label = "2CD" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2CD" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2ce label = "u0042B616" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042B616" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2cf label = "u0042B617" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042B617" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2d0 label = "u0042B940" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042B940" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2d1 label = "u0042B950" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042B950" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2d2 label = "u0042B960" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042B960" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2d3 label = "u0042B970" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042B970" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2d5 label = "u0042B990" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042B990" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2d7 label = "u0042B9B0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042B9B0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2d8 label = "set-array-to" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "set-array-to" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2d9 label = "u0042BA30" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042BA30" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2da label = "u004234E0" argc = 8 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004234E0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2db label = "u004235C0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u004235C0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2dc label = "u0042BA80" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042BA80" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2dd label = "u0042D880" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042D880" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2de label = "u0042BAC0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042BAC0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2df label = "u0042BAC1" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042BAC1" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2e0 label = "u0042CE0F" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CE0F" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2e1 label = "u0042CE10" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CE10" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2e2 label = "u0042CE11" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CE11" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2e3 label = "u0042CE30" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CE30" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2e4 label = "u0042CE31" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CE31" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2e5 label = "u0042CE50" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CE50" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2e6 label = "u0042CE60" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CE60" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2e7 label = "u0042CE70" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CE70" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2e8 label = "u0042CE80" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CE80" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2e9 label = "u0042CE90" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CE90" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2ea label = "u0042CEA0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CEA0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2eb label = "u0042CEB0" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CEB0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2ec label = "u0042CEC0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CEC0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2ee label = "u0042CEC2" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CEC2" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2ef label = "u0042CEC3" argc = 11 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CEC3" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2f0 label = "u0042CEC4" argc = 9 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CEC4" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2f1 label = "u0042CEC5" argc = 7 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CEC5" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2f2 label = "u0042CEC6" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0042CEC6" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2f3 label = "2F3" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2F3" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2f4 label = "2F4" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2F4" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2f5 label = "2F5" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2F5" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2f6 label = "2F6" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2F6" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2f7 label = "2F7" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2F7" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2f8 label = "2F8" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2F8" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2f9 label = "2F9" argc = 7 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2F9" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2fa label = "2FA" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2FA" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2fb label = "2FB" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2FB" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2fc label = "2FC" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2FC" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2fd label = "2FD" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2FD" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2fe label = "2FE" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2FE" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x2ff label = "2FF" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "2FF" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x300 label = "300" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "300" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x301 label = "301" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "301" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x302 label = "302" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "302" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x303 label = "303" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "303" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x304 label = "304" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "304" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x305 label = "305" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "305" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x306 label = "306" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "306" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x307 label = "307" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "307" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x308 label = "308" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "308" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x30a label = "30A" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "30A" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x30c label = "30C" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "30C" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x320 label = "u0043AA20" argc = 10 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AA20" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x321 label = "u0043AA30" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AA30" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x322 label = "u0043AA40" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AA40" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x323 label = "u0043AA50" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AA50" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x324 label = "u0043AA60" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AA60" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x325 label = "u0043AA70" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AA70" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x326 label = "u0043AA80" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AA80" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x327 label = "u0043AA90" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AA90" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x328 label = "u0043AAA0" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AAA0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x329 label = "u0043AAB0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AAB0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x32a label = "32A" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "32A" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x32b label = "u0043AAD0" argc = 0 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AAD0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x32c label = "u0043AAE0" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AAE0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x32d label = "u0043AAF0" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AAF0" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x32e label = "u0043AB10" argc = 11 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AB10" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x32f label = "u0043AB11" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AB11" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x330 label = "u0043AB12" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AB12" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x332 label = "u0043AB14" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AB14" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x334 label = "u0043AB16" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AB16" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x335 label = "u0043AB17" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AB17" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x337 label = "u0043AB19" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AB19" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x33b label = "u0043AB1D" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AB1D" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x33d label = "u0043AB1E" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AB1E" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x33e label = "u0043AB1F" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AB1F" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x33f label = "u0043AB20" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "u0043AB20" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "low" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x340 label = "340" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "340" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x341 label = "341" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "341" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x342 label = "342" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "342" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x344 label = "344" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "344" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x345 label = "345" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "345" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x349 label = "349" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "349" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x34d label = "34D" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "34D" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x34e label = "34E" argc = 4 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "34E" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x352 label = "352" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "352" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x353 label = "353" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "353" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x354 label = "354" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "354" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x358 label = "358" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "358" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x35a label = "35A" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "35A" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x35b label = "35B" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "35B" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x35c label = "35C" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "35C" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x35d label = "35D" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "35D" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x35f label = "35F" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "35F" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x360 label = "360" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "360" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x361 label = "361" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "361" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x363 label = "363" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "363" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x364 label = "364" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "364" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x384 label = "384" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "384" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x386 label = "386" argc = 11 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "386" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x387 label = "387" argc = 8 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "387" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x388 label = "388" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "388" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x389 label = "389" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "389" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x38f label = "38F" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "38F" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x390 label = "390" argc = 7 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "390" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x391 label = "391" argc = 2 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "391" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x392 label = "392" argc = 1 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "392" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x393 label = "393" argc = 6 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "393" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x396 label = "396" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "396" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x398 label = "398" argc = 3 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "398" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x399 label = "399" argc = 7 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "399" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table." [[opcode]] op = 0x39b label = "39B" argc = 5 observed_in_himegari = false abi_source = "kelebek" [opcode.semantics] name = "39B" category = "unknown" summary = "Broader AGE-catalog compatibility stub; the port currently traces and skips it." noop_headless = false source = "kelebek" confidence = "med" depends_on = [] evidence = "Not observed in Himegari's script corpus; ABI label/argc come from Kelebek's AGE table."