Skip to content

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

Opcode0x01 (1)
HandlerCRadiScript::Command_01
SignatureCRadiScript::Command_01(int,SCR_DATA*,unsigned int,unsigned int)
Translation unitr_script_run0.cpp
Address— debug build; click for all 3
Handler size0x368 (872 bytes)
Engine namescript_start_stack
FamilyScript control, flags and values
Command size4 + 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.

FieldRoleMeaning
cond_basederivedLow 7 bits of condition: which condition is evaluated.
conditionderivedCondition selector byte. The low 7 bits pick the condition (cond_base) and bit 7 inverts the result (invert). 0 means unconditional.
expectedinputValue the condition compares against.
invertinputBit 7 of condition: when 1 the condition result is inverted.
modeinputHandler path selector taken from the argument byte. The meaning is specific to each command.
script_idinputWhich 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.
yieldderivedPause 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_arr
  • memcpy

Bit masks

Masks the handler applies to its argument byte or operand words:

0x00FF 0xFFFF 0x000F 0x0010 0x0001