0x01 — script_start_stack
Script start helper with local stack script data. The low handler-argument nibble is the start mode and bit 0x10 enables an explicit character selector. The first operand word contains the target script id in the low halfword and an optional condition id in the high byte; conditional starts consume the normal two-word condition payload before any explicit character selector. It can check a condition, construct/copy script data, call Command_00 on a target slot, and call SetScriptNumber.
proven— handler traced, and exercised by at least one shipped script.
At a glance
| Opcode | 0x01 (1) |
|---|---|
| Handler | CRadiScript::Command_01 |
| Signature | CRadiScript::Command_01(int,SCR_DATA*,unsigned int,unsigned int) |
| Translation unit | r_script_run0.cpp |
| Address | — debug build; click for all 3 |
| Handler size | 0x368 (872 bytes) |
| Engine name | script_start_stack |
| Family | Script control, flags and values |
| Command size | 4 + extra_words * 4 bytes |
Handler behaviour
Script start helper with local stack script data. The low handler-argument nibble is the start mode and bit 0x10 enables an explicit character selector. The first operand word contains the target script id in the low halfword and an optional condition id in the high byte; conditional starts consume the normal two-word condition payload before any explicit character selector. It can check a condition, construct/copy script data, call Command_00 on a target slot, and call SetScriptNumber.
Encoding
The command header is one 32-bit word, as described in §3 Instruction encoding:
31 24 23 16 15 8 7 0
+----------------+----------------+----------------+----------------+
| flags | argument byte | extra words | 0x01 |
+----------------+----------------+----------------+----------------+Bits 8–15 give the number of 32-bit operand words that follow. Bits 16–23 are handed to the handler as a bitfield; on character commands bit 0 normally says whether a character selector word is present. Bit 31 is the keep-going bit.
Operand fields
7 documented fields. input fields are read from the command's operand words; derived fields are computed from other fields rather than stored separately.
| Field | Role | Meaning |
|---|---|---|
cond_base | derived | Low 7 bits of condition: which condition is evaluated. |
condition | derived | Condition selector byte. The low 7 bits pick the condition (cond_base) and bit 7 inverts the result (invert). 0 means unconditional. |
expected | input | Value the condition compares against. |
invert | input | Bit 7 of condition: when 1 the condition result is inverted. |
mode | input | Handler path selector taken from the argument byte. The meaning is specific to each command. |
script_id | input | Which script *inside the currently loaded event file* to start, pushed onto the script stack. In file 516, script_id=5 means 516_05, not event 5. |
yield | derived | Pause the script here for one game frame; the next command runs on the following update. Lines without it keep running immediately. |
Engine calls
Engine functions this handler was observed calling:
CRadiScript::CheckCondition(unsigned char,unsigned long,const SCR_DATA*)CRadiScript::Command_00(int,SCR_DATA*,unsigned int,unsigned int)CRadiScript::GetAbstractionCharacterNumber(unsigned int&,unsigned int&,const SCR_DATA*)CRadiScript::SetScriptNumber(int,unsigned int,unsigned int,unsigned int,unsigned int,float)__construct_array__destroy_arrmemcpy
Bit masks
Masks the handler applies to its argument byte or operand words:
0x00FF 0xFFFF 0x000F 0x0010 0x0001