actor_commands.c
Event commands on actors: placing, moving and animating them.
games/tbs/src/object/psynergy_effects/actor_commands.c on GitHub
Event commands on actors: placing, moving and animating them. Part of psynergy_effects.c, compiled only through it.
Functions
Object_GetById
struct FieldActor *Object_GetById(s32 actor)
Returns an actor, or NULL if it does not exist. Scene scripts reach it through Actor_Get and OBJ_GET; it is the far-callable form of ObjectTable_Get that the other banks use.
Used by Actor_Get, Actor_JumpDownLedge, AltmillerCave_CheckFrostTargetCollision, AltmillerCave_FreezePuddle, AltmillerCave_HopSelectedActor, AltmillerCave_Initialize, AltmillerCave_MatchLeaderPriority, AltmillerCave_MeetInvisibleBabi, AltmillerCave_PlaceLight, AltmillerCave_SpinLights, AltmillerCave_UpdateMovedObstacle, BabiLighthouse_AdvanceNearbyPair, BabiLighthouse_ClimbDownOrAdvancePair, BabiLighthouse_ClimbOrAdvancePair, BabiLighthouse_FallToExit, BabiLighthouse_JumpFromLedge, BabiLighthouse_LandWithParticles, BabiLighthouse_MatchLeaderPriority, BabiLighthouse_RefreshMovableBlockTiles, BabiLighthouse_RegroupPartyMember, BabiLighthouse_SetupScene, BabiLighthouse_UpdateMovedBlock, BattleEffect_UpdatePhasedRadialParticle, BattleFx_FinishSceneAndReleaseHeapBlock, BattleFx_PlayCueAndStartEmitterOnTarget, BattleFx_RunAngledApproachPhases, BattleFx_RunMercuryDjinnCapture, BattleFx_RunVenusDjinnCapture, BattleFx_SetupResourcesAndWindow, BattleFx_SteerPushedTarget, BattleFx_UpdateDescendingOrbitObject, BattleFx_UpdateRadialSpread, BattleFx_UpdateRandomTargetParticle, Beast_HopAway, BilibinCave_RestoreDouseSection, BilibinCave_UpdateFrostTargetFromMovableActors, BilibinInteriors_Initialize, Bilibin_RestoreRiverActors, Bilibin_SetUpTreasury, Bilibin_UpdateRiverBlockCells and 649 more.
ObjectMotion_SetSpeedParameters
void ObjectMotion_SetSpeedParameters(u32 objectId, s32 speedLimit, s32 acceleration)
The event command "set actor speed": its top speed and acceleration, 16.16 pixels per frame. Writes the actor's speedLimit and acceleration. Scene scripts reach it as Engine_ActorSetSpeed (OBJ_SPEED, Actor_SetSpeed).
Used by Motion_LaunchFromFocusedObject.
ObjectMotion_EnableActionAndSetCallback
void ObjectMotion_EnableActionAndSetCallback(u32 objectId, s32 action)
Gives an actor an action script (ObjectMotion_SetActionCallback) and makes it face where it moves: sets ACTOR_FACES_MOTION, bit 0 of its actionFlags. Scene scripts reach it as Engine_ActorEnableActionCallback (Actor_SetActionScript and Actor_SetBuiltinAction).
ObjectMotion_EnableActionAndResetMotion
void ObjectMotion_EnableActionAndResetMotion(u32 objectId)
The event command "stop actor": stops its action and puts it back under event control, on the idle script (a lone SC_END), and sets ACTOR_FACES_MOTION, bit 0 of its actionFlags. Scene scripts reach it as Engine_ActorStop (Actor_Stop), about 22 of them.
Object_LinkObjectAndSetCallback
void Object_LinkObjectAndSetCallback(u32 objectId, u32 linkedObjectId)
Makes an actor follow another (the linked action script): writes its linkedObject. Called by the Colosso log scene script, and by Altmiller Cave's as Engine_ActorFollow.
Used by BabiPalace_MeetBabiAfterColosso, ColossoLog_Initialize, ColossoLog_PlayPostBattleReunion, ColossoRiver_Initialize, ColossoWall_Initialize, Colosso_OfferCheeringSpot, Event_DepartForQuest.
Object_RefreshSelectorById
void Object_RefreshSelectorById(u32 objectId)
Waits, at most 300 frames, for an actor's script to reach its end (command 0x10). Called by Motion_SetVarCbAndRefresh, the climbing events and about 28 scene scripts.
Used by AltmillerCave_RestoreBabiAndInviteParty, BabiPalace_RestInPalaceBeds, Event_ApproachSuspects, Event_DepartForQuest, Event_DoraWakesIsaac, Event_FreeRooferAndConfrontThieves, Event_HurryToThePlaza, Event_JumpDown, Event_McCoyRewardsParty, Event_MoveGateBlock, Event_ReachArena, Event_ReturnFromMtAleph, Event_SentToAidElders, Event_SuspectedLeaderDodges, Event_SuspectedThiefDodges, Event_TalkToStartledResident, Event_WarnAgainstSneakingUpMtAleph, Event_WatchBoulderFall, Field_ClimbDown, Imil_MeetMiaAtOldCouplesHouse, Kalay_WatchTourGroupDeparture, KolimaForestBridge_WitnessForestCurse, KolimaForestTree_RestoreTret, Kolima_WitnessForestCurse, Motion_SetVarCbAndRefresh, SetSail, TolbiShipDeck_MonstersBoard, TolbiShipDeck_RowersDisembark, TolbiShipInteriors_WatchWarriorsStormOff, ValeStorm_RunRiverSearch, ValeStorm_ShowBoulderSweepingDownriver, Vale_AskAboutSneakingToAleph, VaultInteriors_ResetSuspectRoutes, VaultInteriors_ReturnStolenGoods, VenusLighthouseAerie_PlayShebasFall, WorldMap_DepartWithTravelers.
Object_SetActionCallbackAndRefreshById
void Object_SetActionCallbackAndRefreshById(u32 objectId, s32 action)
Starts a built-in action or supplied script, as ObjectMotion_EnableActionAndSetCallback does, then waits up to 300 frames for its script to end. Scene script calls use Actor_RunActionScriptAndWait.
Used by Actor_RunActionScriptAndWait.
ObjectMotion_ResetAndSetPosition
void ObjectMotion_ResetAndSetPosition(u32 objectId, s32 x, s32 z)
The event command "set actor destination": the actor heads for (x, z), in pixels, keeping its current animation. Clears its movementState, so a paused actor moves again, as the other move commands here do. Scene scripts reach it as Engine_ActorSetDestination (Actor_SetDestination).
ObjectMotion_SetPositionAndCommit
void ObjectMotion_SetPositionAndCommit(u32 objectId, s32 x, s32 z)
The event command "move actor and wait": as ObjectMotion_ResetAndSetPosition, then waits (at most 600 frames) for the actor to arrive. Scene scripts reach it as Engine_ActorMoveToAndWait (Actor_MoveToAndWait); the climbing events call it too.
Used by Field_ClimbDown, Field_ClimbUp, Field_TryJumpForward.
ObjectMotion_ResetAndSetPositionInMode2
void ObjectMotion_ResetAndSetPositionInMode2(u32 objectId, s32 x, s32 z)
The event command "walk actor to": the actor walks (animation 2) toward (x, z), in pixels. Scene scripts reach it as Engine_ActorWalkTo (OBJ_WALK, Actor_WalkTo); the link lobby calls it too.
ObjectMotion_SetPositionAndReset
void ObjectMotion_SetPositionAndReset(u32 objectId, s32 x, s32 z)
The event command "walk actor to and wait": walks the actor to (x, z), in pixels, waits for it to arrive and stands it still (animation 1). Scene scripts reach it as Engine_ActorWalkToAndWait (Actor_WalkToAndWait).
ObjectMotion_CenterOnColumn
void ObjectMotion_CenterOnColumn(u32 objectId, s32 priority, s32 zOffset)
The event command "center actor and walk": walks the actor sideways to the middle of its 16-pixel column, sets its sprite priority to priority (ObjectMotion_SetActionVariant), then sends it zOffset pixels along z. Kalay's interiors reach it as Engine_ActorCenterAndWalk.
Used by FieldObjectMotion_CenterOnColumn.
ObjectMotion_OffsetPositionAndResetMotion
void ObjectMotion_OffsetPositionAndResetMotion(u32 objectId, s32 xOffset, s32 zOffset)
The event command "set actor destination offset": the actor heads (xOffset, zOffset) pixels from where it stands. Scene scripts reach it as Engine_ActorSetDestinationOffset (Actor_SetDestinationOffset); Motion_LaunchFromFocusedObject calls it too.
Used by Motion_LaunchFromFocusedObject.
ObjectMotion_OffsetPositionAndReset
void ObjectMotion_OffsetPositionAndReset(u32 objectId, s32 xOffset, s32 zOffset)
Walks the actor (animation 2) (xOffset, zOffset) pixels from where it stands. Scene scripts reach it as Engine_ActorWalkBy (Actor_WalkBy); ObjectMotion_CommitPositionAndActivate calls it too.
Used by ObjectMotion_CommitPositionAndActivate.
ObjectMotion_CommitPositionAndActivate
void ObjectMotion_CommitPositionAndActivate(u32 objectId, s32 xOffset, s32 zOffset)
Walks the actor (xOffset, zOffset) pixels, waits for it to arrive and stands it still. Scene scripts reach it as Engine_ActorWalkByAndWait (Actor_WalkByAndWait); the Lemurian ship calls it by name.
Used by FieldObjectMotion_CommitPositionAndActivate, SetSail.
Motion_LaunchFromFocusedObject
void Motion_LaunchFromFocusedObject(u32 objectId, s32 xOffset, s32 zOffset, s32 action)
Places an actor on the leader and sends it walking (xOffset, zOffset) pixels away at speed 0.6 and acceleration 0.3, through the launch script; the actor then takes action action. Called by the Lemurian ship, Babi Lighthouse and Lalivero scene scripts.
Used by BabiLighthouse_ExplainTruthDoor, FieldMotion_LaunchFromFocusedObject, ReceiveBlackOrb, SetSail.
ObjectMotion_CommitCurrentPositionAndActivate
void ObjectMotion_CommitCurrentPositionAndActivate(u32 objectId)
The event command "wait for actor": waits (at most 600 frames) for the actor to arrive and stands it still. Scene scripts reach it as Engine_ActorWaitForMove (Actor_WaitForMove); the link lobby and the climbing events call it too.
Used by Field_ClimbDown, Field_ClimbUp.
ObjectMotion_SetHorizontalPositionWithTerrain
void ObjectMotion_SetHorizontalPositionWithTerrain(u32 objectId, s32 x, s32 z)
The event command "set actor position": puts the actor at (x, z), 16.16 pixels, at rest. An actor that follows the ground (flag 1) keeps its height above the terrain at the new place. Clears its velocity and targets. Scene scripts reach it as Engine_ActorSetPosition (OBJ_POS_SET, Actor_SetPosition); Motion_LaunchFromFocusedObject calls it too.
Used by Motion_LaunchFromFocusedObject.
ObjectMotion_SetPositionWithTerrain
void ObjectMotion_SetPositionWithTerrain(u32 objectId, s32 x, s32 y, s32 z)
Puts the actor at (x, y, z), 16.16 pixels, at rest; an actor that follows the ground (flag 1) is raised by the terrain height there, read as ObjectMotion_SetHorizontalPositionWithTerrain reads it (see the XXX there). Nothing in ☀️ calls it.
Object_SetModeById
void Object_SetModeById(u32 objectId, s32 animation)
The event command "set actor animation" (1 stands, 2 walks, 3 nods, 4 shakes the head and so on). Scene scripts reach it as Engine_ActorSetAnimation (OBJ_MODE, Actor_SetAnimation); Event_AskYesNoWithActorAnimation and Motion_SetModeAndWaitAnimation call it too.
Used by Event_AskYesNoWithActorAnimation, Motion_SetModeAndWaitAnimation.
Object_SetActionById
void Object_SetActionById(u32 objectId, s32 steps)
Sets the animation timer steps of each of an actor's sprites (AnimationObjects_SetActiveTimerSteps). Called by the Tolbi ship and Lamakan Desert scene scripts.
Used by ColosseumEntrance_InitializeContestants, Event_FallThroughFloor, FallIntoPit, TolbiShipInteriors_PoseSceneActor, TolbiShipInteriors_RunSceneCommand.
ObjectMotion_WaitForAnimationChange
void ObjectMotion_WaitForAnimationChange(u32 objectId)
Waits, at most 90 frames, for an actor's animation to change. Only an actor drawn as an animation object (animationKind 1) is waited for. Called by Motion_SetModeAndWaitAnimation, a few scene scripts and the debug level screen.
Used by Event_FreezeThirdPool, Event_HopDownStep, ItemLevel_RunMotionTest, Motion_SetModeAndWaitAnimation, TolbiShipInteriors_RunSceneCommand, VaultInteriors_PlayAnimationAndWait, VenusLighthouseAerie_EnterAndConfrontAntagonists.
Motion_SetModeAndWaitAnimation
void Motion_SetModeAndWaitAnimation(u32 objectId, s32 animation)
The event command "set actor animation and wait": plays the animation and waits for it to end. Scene scripts reach it as Engine_ActorSetAnimationAndWait (Actor_SetAnimationAndWait).
ObjectMotion_NoOp
void ObjectMotion_NoOp(void)
An empty function, reached only through an unnamed veneer in the object bank's far-call table; nothing in ☀️ names it.
ObjectMotion_Launch
void ObjectMotion_Launch(u32 objectId, s32 speed, s32 frames)
The event command "actor jump": throws the actor upward at speed pixels per frame with a jump sound (a higher one above 5), then waits frames frames. Sets bit 1 of the actor's motion flags, so gravity brings it down, and its velocityY. Scene scripts reach it as Engine_ActorJump (Actor_Jump), about 40 of them; the scenes of Djinn joining the party (djinni.c and the four element parts) call it too.
Used by BattleFx_RunMercuryDjinnCapture, BattleFx_RunVenusDjinnCapture, Djinn_RunBattleStartHop, Djinn_RunJupiterJoinEffect, Event_DepartForQuest.
ObjectMotion_SetVariantCallback
void ObjectMotion_SetVariantCallback(u32 objectId, s32 count)
The event command "start repeated motion": the actor squashes and springs back count times (1 to 3), through gObjectMotion_VariantScripts. Scene scripts reach it as Engine_ActorStartRepeatedMotion (Actor_StartRepeatedMotion).
Used by Motion_SetVarCbAndRefresh.
Motion_SetVarCbAndRefresh
void Motion_SetVarCbAndRefresh(u32 objectId, s32 count)
The event command "run repeated motion": as ObjectMotion_SetVariantCallback, then waits for it to end. Scene scripts reach it as Engine_ActorRunRepeatedMotion (Actor_RunRepeatedMotion); the scenes of Djinn joining the party call it too.
Used by BattleFx_RunMercuryDjinnCapture, Djinn_RunBattleStartHop, Djinn_RunJupiterJoinEffect, Djinn_RunMarsJoinEffect.
FieldFx_UpdateParticleLinearMotion
void FieldFx_UpdateParticleLinearMotion(union FieldObject *fieldObject)
Moves a dust puff of FieldFx_SpawnBurstParticle: it drifts with its x and z velocity (kept in speed and acceleration), which drag slows by 1/18 and 1/16 each frame, and rises 1/64 pixel a frame. Runs each frame as the puff's update hook.
Used by FieldFx_SpawnBurstParticle.
FieldFx_SpawnBurstParticle
void FieldFx_SpawnBurstParticle(struct FieldActor *source, s32 param)
Kicks up a dust puff (object 222) where source stands: it flies off toward the back at 0.5 to 1.4 pixels a frame and sideways at up to 1.4, with one of two animations. A nonzero param is given to its sprite parts (ObjectGroup_SetChildValue). Only Actor_JumpDownLedge calls it.
Used by Actor_JumpDownLedge.
Actor_JumpDownLedge
void Actor_JumpDownLedge(s32 actor, s32 pose, s32 param)
Makes an actor jump down off a ledge in front of it (the field runs it for the leader when the player presses down at a ledge): it shows pose for 10 frames, hops 12 pixels south, turns toward angle 0x5000 (1/16 turn past FACING_SOUTH) while sinking 28 pixels with a dust puff every other frame (none when param is -1), then jumps on to 16 pixels south of where it started and lands. The landing plays the queued sound (BattleFx_PlayQueuedSound). Called by Field_RunPushTileEvent for a ledge (collision code 0xfc) with pose 6 and param 0, and by seven scenes through FieldBattleFx_RunRisingObjectSequence; Mercury Lighthouse passes -1.
Used by FieldBattleFx_RunRisingObjectSequence, Field_RunPushTileEvent.
ObjectMotion_SetAngleToward
void ObjectMotion_SetAngleToward(s32 firstId, s32 secondId, s32 wait)
The event command "actor face actor": turns the first actor at once to face the second, then waits wait frames. Writes the first actor's angle. Scene scripts reach it as Engine_ActorFaceActor (OBJ_FACE, Actor_FaceActor); the link lobby calls it too.
Object_LinkPair
void Object_LinkPair(s32 firstId, s32 secondId, s32 wait)
The event command "actors face each other": turns two actors toward each other, then waits wait frames. Scene scripts reach it as Engine_ActorFaceEachOther (Actor_FaceEachOther); Scene_TalkToActor turns the leader and the actor spoken to with it.
Used by Event_RiseToElementalStarRoom, Scene_TalkToActor.
FacingObject_TurnPairToFaceEachOther
void FacingObject_TurnPairToFaceEachOther(struct FacingObject *firstObject, struct FacingObject *secondObject)
Turns two actors to face each other, at most 1/16 turn a frame each, until both do (at most 60 frames). Only Object_LinkPair calls it.
Used by Object_LinkPair.
ObjectTable_DestroyById
void ObjectTable_DestroyById(s32 index)
The event command "destroy actor": releases the actor and frees its slot, writing NULL to its place in the field work's actor table. Scene scripts reach it as Engine_ActorDestroy (about 14 of them).
ObjectGroup_ConfigureChildValue
void ObjectGroup_ConfigureChildValue(s32 objectId, s32 param)
The event command "set actor sprite param": gives every sprite part of the actor param (ObjectGroup_SetChildValue). With bit 0x100 set the actor blinks instead (ObjectGroup_ApplyIndexedChildValue, every frame); any other param also ends a blink, clearing the actor's hook. Scene scripts reach it as Engine_ActorSetChildValue (Actor_SetChildValue).
ObjectGroup_ApplyIndexedChildValue
void ObjectGroup_ApplyIndexedChildValue(union FieldObject *fieldObject)
Per-frame hook of a blinking actor: sets its sprite parts' param from gObjectGroup_BlinkChildValues (7 for two frames out of eight, otherwise 0). ObjectGroup_ConfigureChildValue installs it.
Used by ObjectGroup_ConfigureChildValue.
ObjectGroup_SetChildValue
void ObjectGroup_SetChildValue(struct FieldActor *actor, s32 param)
Sets the param byte of every animated part of an actor's sprite. Scenes set 0 or 15, and alternate the two to make an actor flash. Marks the sprite dirty. Called by ObjectGroup_ConfigureChildValue, FieldFx_SpawnBurstParticle and about 40 scene script sites.
Used by CrossboneIslePillarRooms_SetChildValueFromTimer, FieldFx_SpawnBurstParticle, Fuchin_CreateForegroundActor, Fuchin_SetDustPalette, GomaCavePillar_FinishFragment, GomaCavePillar_SpawnFragment, ImilFuchinFalls_SpawnDust, Imil_InitializeRisingEffect, Imil_SwayAndSpark, KolimaForestBridge_TwinkleGroundSparkle, Kolima_FlickerCurseDust, Kolima_UpdateTimedAppearance, MercuryLighthouseAerie_FlickerBeacon, MogallForest_CopyTimerToChild, ObjectGroup_ConfigureChildValue, OverlayObject_CreateConfiguredObject, OverlayObject_PrepareObject, SolSanctumEruption_StepEmbers, Spray_Drift, Spray_Initialize, TolbiShipInteriors_LayFlat, VenusLighthouseAerie_SpawnSideOrbitParticles, VenusLighthouseAerie_SpawnUpperOrbitParticles, VenusLighthouseAerie_UpdateBeaconRise, VenusLighthouse_ConfigurePassageEffect, VenusLighthouse_PulseChildEffect, VenusLighthouse_RestoreScriptedChildValues, VenusLighthouse_UpdateChildFromTimer, WorldMap_SpawnActorEightPuff.
Object_SetTargetAndCallback
void Object_SetTargetAndCallback(u32 objectId, s32 targetId, const void *script)
Links an actor to the actor in the low 8 bits of targetId and starts script on it. Unless ACTOR_LINK_KEEP_MOTION is set it takes a follow distance of 40 pixels (action 40, read by ObjectMotion_MoveTowardTarget), the target's top speed with twice its acceleration, to keep up with it, and no collision flags, so it cannot block the target. Called by Vale's, Bilibin's, Imil's, Kolima's and McCoy's palace scene scripts, among others.
Used by Event_TalkToDora, FieldObject_SetTargetAndCallback.
ObjectMotion_StepAngle
s32 ObjectMotion_StepAngle(struct ObjectRuntime *object)
Script step that turns an actor toward the angle kept in its action: the whole way when within 1/16 turn, otherwise 1/32 turn. Returns the turn made, 0 once the actor faces that way: SC_CALL runs it again each frame while it is nonzero, so the script ends once the turn is done. gObjectMotion_StepAngleScript and gObjectMotion_LaunchScript run it.
Object_ResetTargetAndSetMode1
void Object_ResetTargetAndSetMode1(u32 objectId)
Clears an actor's destination, puts it under event control and stands it still. Reached only through an unnamed veneer in the object bank's far-call table; nothing in ☀️ names it.
ObjectMotion_ArmCallback
void ObjectMotion_ArmCallback(s32 objectId, s32 angle, s32 wait)
The event command "actor face direction": the actor turns toward angle (0x10000 a full turn; ObjectMotion_StepAngle), then the event waits wait frames. Writes the angle to the actor's action. Scene scripts reach it as Engine_ActorFaceDirection (OBJ_DIR, Actor_FaceDirection); the Djinni, Retreat and climbing events and Actor_JumpDownLedge call it too.
Used by Actor_JumpDownLedge, BattleFx_RunMercuryDjinnCapture, BattleFx_RunVenusDjinnCapture, Djinn_RunBattleStartHop, Djinn_RunJupiterJoinEffect, Djinn_RunMarsJoinEffect, FieldFx_RunRetreat, Field_ClimbDown.
ObjectMotion_SetActionVariant
void ObjectMotion_SetActionVariant(s32 objectId, s32 priority)
The event command "set actor sprite priority": fixes the priority of the actor's sprite, which then no longer follows its depth: clears ACTOR_PRIORITY_AUTOMATIC. Scene scripts reach it as Engine_ActorSetSpritePriority (Actor_SetSpritePriority); ObjectMotion_CenterOnColumn calls it too.
Used by ObjectMotion_CenterOnColumn.
ObjectVisual_CopyAttributes
void ObjectVisual_CopyAttributes(u32 targetId, u32 sourceId)
Makes the target actor's sprite show the source actor's graphics (its VRAM block and tile). Neither actor is checked for NULL. Called by the Tolbi ship deck's scene script.
Used by TolbiShipDeck_RestOars, TolbiShipDeck_SwingOar.
Event_SetMessageId
void Event_SetMessageId(s32 message)
The event command "set message": the number of the event's next message, written to work->message. Scene scripts reach it as Engine_EventSetMessage (MESSAGE_SET); the field's talk, touch, item and Psynergy events call it too.
Used by Field_RunEventAction, Field_UseItem, Scene_RunRaisedEvent, Scene_RunTouchOrExit, Scene_TalkToActor.
ObjectTable_ReadActiveValue
s32 ObjectTable_ReadActiveValue(s32 actor)
Returns the sprite (the first animation's id) of the actor in the low 12 bits of actor, or -1 if there is no such animated actor. The message commands (messages.c) call it to find the speaker's portrait and voice.
Used by Battle_ShowPairedUnitWorkAndWait, FieldEvent_ShowMessageAndWait, ObjectTable_RunIfActive, UiText_OpenMessageAtObject, Ui_SetMessageVoiceFromActor.
ObjectTable_FindActiveByValue
s32 ObjectTable_FindActiveByValue(s32 sprite)
Returns the first scene actor (8 to 65) showing sprite, or -1. Reached only through an unnamed veneer in the object bank's far-call table; nothing in ☀️ names it.
Also, functions without a comment: ObjectTable_DestroyNoOp, ObjectVisual_ReservedNoOp.
Structures
ObjectSlotTable
struct ObjectSlotTable
The event work seen as its actor slots, which the actor commands index by actor number.
| Field | Declared as | |
|---|---|---|
unk00 | u8 unk00[0x14] | |
slots | struct ObjectRuntime *slots[0] |
Used by ObjectTable_DestroyById.