mvbg

VM_ACTOR_GET_ANIM_FRAME

VM_ACTOR_GET_ANIM_FRAME is a GBVM instruction used to retrieve the current animation frame of a specified actor.

Purpose: Actors in Game Boy games often have animations (e.g., walking, attacking, idle). These animations are composed of a sequence of frames. VM_ACTOR_GET_ANIM_FRAME allows your script to know which frame of the current animation an actor is currently displaying. This is essential for:

Syntax:

VM_ACTOR_GET_ANIM_FRAME ACTOR

Usage Example: Triggering a Sound Effect on a Specific Attack Frame

Imagine a player character’s attack animation. You want a “whoosh” sound effect to play exactly when the sword is at the peak of its swing (e.g., frame 3 of the attack animation).

; In your player attack script (part of the actor's update loop or a triggered event):

; Assume PLAYER_ACTOR_ID is the actor ID for the player
PLAYER_ACTOR_ID:
  .R_INT8 0 ; Example Actor ID

; Variable to store the current animation frame
VAR_CURRENT_ANIM_FRAME:
  .R_INT8 0

; Flag to ensure sound plays only once per attack animation
VAR_SOUND_PLAYED_THIS_ATTACK:
  .R_INT8 0

; ... code that initiates the attack animation (e.g., VM_ACTOR_SET_ANIM) ...

CHECK_ATTACK_FRAME:
  ; Get the current animation frame of the player actor
  VM_ACTOR_GET_ANIM_FRAME PLAYER_ACTOR_ID, VAR_CURRENT_ANIM_FRAME

  ; Check if it's frame 3 and the sound hasn't played yet
  VM_IF_CONST .EQ, VAR_CURRENT_ANIM_FRAME, 3, PLAY_SWOOSH_SOUND, 0
  VM_IF_CONST .EQ, VAR_SOUND_PLAYED_THIS_ATTACK, 0, PLAY_SWOOSH_SOUND, 0
  VM_JUMP END_FRAME_CHECK

PLAY_SWOOSH_SOUND:
  VM_SFX_PLAY SFX_SWOOSH ; Play the sound effect
  VM_SET_CONST VAR_SOUND_PLAYED_THIS_ATTACK, 1 ; Set flag to prevent re-playing

END_FRAME_CHECK:
  ; ... continue with other animation logic or return ...

; When the attack animation finishes, reset the flag:
; VM_SET_CONST VAR_SOUND_PLAYED_THIS_ATTACK, 0

SFX_SWOOSH:
  ; ... sound effect data ...

In this example, VM_ACTOR_GET_ANIM_FRAME PLAYER_ACTOR_ID, VAR_CURRENT_ANIM_FRAME retrieves the current frame number. The script then checks if it’s the desired frame (3) and if the sound has already been played for this attack. If both conditions are met, the SFX_SWOOSH is played.

Analogy to other programming languages/game engines: This is analogous to querying the current frame of an animation clip in a game engine:

It provides a way to synchronize game logic with the visual progression of an actor’s animation.