Skip to content

0x39 — character_event_leave

Gets CCharaEventLeaveManager and calls EnterAll, AddEnterCharacter, or ReleaseEnterCharacter.

proven— handler traced, and exercised by at least one shipped script.

At a glance

Opcode0x39 (57)
HandlerCRadiScript::Command_39
SignatureCRadiScript::Command_39(int,SCR_DATA*,unsigned int,unsigned int)
Translation unitr_script_run2.cpp
Address— debug build; click for all 3
Handler size0x1D4 (468 bytes)
Engine namecharacter_event_leave
FamilyCharacters
Command size4 + extra_words * 4 bytes

Handler behaviour

Gets CCharaEventLeaveManager and calls EnterAll, AddEnterCharacter, or ReleaseEnterCharacter.

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   |  0x39          |
+----------------+----------------+----------------+----------------+

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

8 documented fields. input fields are read from the command's operand words; derived fields are computed from other fields rather than stored separately.

FieldRoleMeaning
actionderivedWhich action this command performs, read from its mode or control bits. Each name is one branch of the handler, so changing it changes what the line does.
character_pairsderivedRaw form of characters, one packed word per pair.
charactersderivedThe characters this line adds or removes, as id:variant pairs.
countderivedHow many entries this command carries.
modederivedHandler path selector taken from the argument byte. The meaning is specific to each command.
post_modeinputMode selector for post; the handler branches on it.
releaseinputSelects ReleaseEnterCharacter rather than AddEnterCharacter.
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:

  • CCharaEventLeaveManager
  • CCharaEventLeaveManager::AddEnterCharacter(unsigned int,unsigned int)
  • CCharaEventLeaveManager::EnterAll()
  • CCharaEventLeaveManager::ReleaseEnterCharacter(unsigned int,unsigned int)
  • CCharacter sub-manager [0x13]
  • CCharacterManager::GetCharacterSubManager(int)
  • CRadiScript::GetAbstractionCharacterNumber(unsigned int&,unsigned int&,const SCR_DATA*)

Bit masks

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

0x0003 0x001F 0x0001 0xFFFF