ff3:ff3us:doc:asm:codes:battle_animation_script

Battle Animation Commands

$00-$1F               Show frame number [$00-$1F]
$20-$7F               -
$80 xx          $C878 Command $80 Subcommands
                      $00            $D9BE quadra slam/quadra slice
                      $01            $D9A9 
                      $02            $D981 
                      $03            $D995 
                      $04            $D96E Randomize vector angle and position (init fire dance sprites)
                      $05            $D938 bum rush
                      $06            $D907 init tornado (w wind/spiraler)
                      $07            $D8F2 move tornado to thread position (w wind/spiraler)
                      $08            $D8EB move thread to vector position (w wind/spiraler)
                      $09            $D879 update character/monster sprite tile priority for tornado (w wind/spiraler)
                      $0A            $D82B white/effect magic intro
                      $0B            $D7E3 Update Esper Pre-Animation Balls Position
                      $0C            $D753 
                      $0D            $D7C4 
                      $0E            $D79D 
                      $0F            $D779 
                      $10            $D73E move to target position
                      $11            $D727 Randomize vector angle
                      $12            $D734 
                      $13            $D6E5 toggle imp graphics for target (imp)
                      $14            $D6BD make target vanish (vanish)
                      $15            $D698 move circle to thread position
                      $16            $D68E 
                      $17            $CBC1 update sprite layer priority based on target
                      $18            $D677 Load Sketched Monster Palette
                      $19            $D62E sketch
                      $1A xx         $CB74 
                      $1B            $CB5D transform into magicite
                      $1C            $CB6A decrement screen brightness
                      $1D            $CB61 transform into magicite
                      $1E            $D56B 
                      $1F            $D5FC 
                      $20            $D59F 
                      $21            $D54E Update Rotating Sprite Layer Priority
                      $22            $D4F2 pearl wind
                      $23            $D4BE pearl wind
                      $24            $D49B Clear BG3 HDMA scroll data
                      $25            $D4AD Clear BG1 HDMA scroll data
                      $26 xx         $D493 Enable/Disable Character Color Palette Updates (x: 1 = disable, 0 = enable)
                      $27 xx         $D48B Hide/Show Characters for Esper Attack (x: 1 = hide, 0 = show)
                      $28 --oo----   $D45C Affects all characters
                                           o: sprite priority
                      $29 xx         $D454 Hide/Show Cursor sprites (esper attack)
                      $2A xx         $D44C load animation palette xx, sprite
                      $2B xx         $D43C load animation palette xx, bg1 (inferno)
                      $2C xx         $D444 load animation palette xx, bg3 (justice, earth aura)
                      $2D xxxx yyyy zzzz $D423 Jump based on battle type
                                           xxxx: jump location if normal attack
                                           yyyy: jump location if back attack or (side attack and attacker is character 3 or 4)
                                           zzzz: jump location if pincer attack or (side attack and attacker is character 1 or 2 or monster)
                      $2E xx yy      $D3E4 Move sprite to ($xx, $yy)
                      $2F            $D3AF 
                      $30 xx         $D38E load animation palette xx for character 1
                      $31 xx         $D365 move in wide vertical sine wave with speed xx (hope song, sea song)
                      $32 xxxx yyyy  $D33E Jump to xxxx if facing left, yyyy if facing right
                      $33 xx         $D2D2 update rainbow gradient lines
                      $34            $D28D copy monster palettes to character palettes (hope song)
                      $35            $D27A use character palettes for monster sprite data (hope song)
                      $36            $D267 restore palettes for monster sprite data (hope song)
                      $37            $D256 clear fixed color value hdma data ($2132)
                      $38            $D24D enable high priority bg3 (justice)
                      $39 xx         $D1E6 update blue gradient lines (S. Cross, Carbunkl, Odin/Raiden)
                      $3A xx         $D1DE 
                      $3B            $D1B0 Set target's color palette to animation palette
                      $3C            $D18A Set target's color palette to normal
                      $3D            $D12E quadra slam/quadra slice
                      $3E xx         $D126 Set main screen designation ($212C)
                      $3F            $D0E0 sonic dive
                      $40 -----mmm   $D0D3 Set screen mode ($2105)
                                           m: screen mode
                      $41 cx cy dx dx $D06D Shrink/Grow BG1 by (cx,cy) (positive is smaller) and move (dx,dy)
                      $42 ------vh   $D064 Set MODE7 Settings register ($211A)
                                           v: vertical flip
                                           h: horizontal flip
                      $43            $D00B moon song/charm
                      $44            $CFCC fire beam/bolt beam/ice beam
                      $45 xx         $CFC0 Set BG1/BG2 Mask Settings Hardware Register ($2123)
                      $46            $CFB9 
                      $47            $CFAA 
                      $48            $CF8D clear
                      $49            $CF7F ink hit/virite
                      $4A            $CF6A 
                      $4B            $D2CC update red/yellow gradient lines (megazerk)
                      $4C            $CF45 move triangle to thread position
                      $4D            $CF1C set vector from triangle to target
                      $4E            $CF15 
                      $4F            $CEF0 
                      $50            $CE9A 
                      $51            $CE62 rippler
                      $52            $CE29 stone
                      $53            $CDDF r.polarity
                      $54            $CDC4 r.polarity
                      $55            $CD72 quasar
                      $56            $CD28 goner
                      $57 xx         $CD1F set bg3/bg4 window mask settings (xx -> $2124)
                      $58 xx         $CD17 change circle shape to xx
                      $59            $CD12 goner/flare star
                      $5A            $CD0D mind blast
                      $5B            $CD08 mind blast
                      $5C            $CD03 mind blast
                      $5D            $CCDF 
                      $5E            $CC98 overcast
                      $5F xx         $CC93 Increase/Decrease Blue Backdrop Gradient (used by Overcast)
                      $60 aabbccdd   $CC3F Toggle attacker status (aa = status 1, etc.) (morph/revert)
                      $61 xx yy zz   $CC1A 
                      $62            $CBF5 evil toot/fader
                      $63 xx         $D361 move in narrow vertical sine wave with speed xx (evil toot)
                      $64            $CBE5 purifier/inviz edge
                      $65            $CBE0 
                      $66            $CBDB shock wave
                      $67            $CBD6 Load Extra Esper Palette (purifier)
                      $68            $CBD1 purifier
                      $69            $CBB6 update sprite layer priority based on attacker
                      $6A            $CBAC align bottom of thread with bottom of target (ice 3)
                      $6B            $CBB1 l? pearl
                      $6C            $CB5A overcast
                      $6D            $CB56 disable battle menu
                      $6E            $CB51 
                      $6F            $CB4D 
                      $70            $CB43 
                      $71            $CB34 restore character palettes (purifier/hope song)
                      $72 xx         $CB48 Branch forward xx if attack didn't miss
                      $73 xx         $CB1D Set graphics for dice roll (xx = die index)
                      $74            $CAB8 
                      $75            $CAE5 super ball
                      $76            $CAD6 seize
                      $77            $CADB seize
                      $78            $CAE0 discard
                      $79            $CAC2 Characters Run to Left Side of Screen (takes 56 loops to reach other side)
                      $7A            $CAC7 Characters Run to Right Side of Screen
                      $7B            $CACC Flip All Characters (after running to opposite side of screen)
                      $7C            $CAD1 Swap Target and Attacker
                      $7D xx         $CABD Branch forward xx bytes if dragon horn effect is active
                      $7E            $CAA1 Flip Target Character Vertically
                      $7F            $CA9D Hide all monsters
                      $80            $CA65 boss death
                      $81            $CA61 
                      $82            $CA3D boss death
                      $83            $CA38 
                      $84            $CA29 chadarnook exit
                      $85            $CA24 chadarnook exit
                      $86 xx         $CA0F Play Sound effect xx (pan based on sprite X position)
                      $87 xx         $C9F7 Play Sound effect xx (pan based on sprite Y position)
                      $88            $C9C9 
                      $89 xx         $C9C1 
                      $8A            $C9A9 Set Target Monster Sprite Priority to 0
                      $8B            $C9A5 Play Ching Sound effect
                      $8C xx         $CA09 Play Sound effect xx (pan center)
$81 xx yy       $F347 Change attacking character's graphic to $xx if facing left, $yy if facing right
$82 xx yy       $F33F Change targetted character's graphic to $xx if facing left, $yy if facing right
$83 dddxxxxx    $F377 Move Thread
                      d: direction (0 = down/forward, 1 = down, 2 = down/back, 3 = forward, 4 = back, 5 = up/forward, 6 = up, 7 = up/back)
                      x: distance - 1
$84 xx          $F7B3 Set Animation Speed to xx
$85             $F89D Move Thread to Attacker Position
$86 dddxxxxx    $F491 Move Attacker (data same as command $83)
$87 dddxxxxx    $F476 Move Target (data same as command $83)
$88 xx          $F71D Jump forward with weapon for "Fight" command (xx = frame index)
$89 xx          $F7BC Loop start (loop xx times)
$8A             $F82F Loop end
$8B xx          $F7E6 Animated loop start (loop xx times, increment frame offset each loop, start at frame 0)
$8C             $F84B Animated loop end
$8D dddxxxxx    $F263 Move Thread if Animation is Flipped Horizontally
$8E bf-----h    $F27A Show Thread Above/Below Other Sprites
                      b: show below
                      f: show in front
                      h: 1 = show with weapon hand, 0 = show opposite weapon hand
$8F dddxxxxx    $F263 Move Thread if Animation is Flipped Horizontally
$90 --oo----    $F255 Set Thread's Sprite Tile Priority
$91             $F8B4 Move This Thread to Attacker Thread Position
$92 xx yy       $FADB Move Thread along Vector (speed xx, code branch yy)
$93 xx          $FA3D Set position on vector
$94             $F8E0 Set vector from attacker to a random location on the target (GP Rain, AutoCrossbow)
$95             $F9E6 Set vector from attacker to target
$96 xx yy       $FB63 Branch if ??? (xx = bytes to branch backwards)
$97             $FBD7 boomerang/wing edge/full moon/rising sun
$98 xx bbbbeeee $FBA8 Increment graphic index offset every x frame(s), (b..e)
$99 ----ppp-    $FC37 Set Thread Palette to p
$9A             $FC40 Set Thread Facing Direction to Match Attacker
$9B             $F31A 
$9C xx          $F2A2 
$9D xx          $F2F1 
$9E             $F2B6 
$9F xx          $F7CF Animated Loop start (loop count equal to the number of active threads, xx = 0) (autocrossbow)
$A0 xx yy       $FA4B Jump Forward Along Vector (speed xx, code branch yy)
$A1 xx yy       $FA90 Jump Backward Along Vector (speed xx, code branch yy)
$A2             $F2E1 drill
$A3 xxxx        $F1E5 Shift Color Palette Left
$A4 xxxx        $F21D Shift Color Palette Right
                      aaaabbbb ccccdddd
                      a: offset color
                      b: number of colors
                      c: palette index
                      d: speed (number of loops per shift)
$A5 aabbccxxyyyyzz    $F0EC circle origin (aa,bb), (80,80) is center of screen
                            cc: grow speed?
                            xx
                            yyyy: max size
$A6 xx yy zz    $F094 Move circle ($xx,$yy), size changes by zz (signed)
$A7             $F088 Update Circle?
$A8             $F073 Move circle to attacker
$A9 xx yy       $EFC8 Move circle ($xx,$yy) (signed, based on character facing direction)
$AA rgbfffff    $EC6E Set sprite palette 3 color subtraction (absolute)
                      r: affect red
                      g: affect green
                      b: affect blue
                      f: amount to subtract
$AB rgbfffff    $EC58 Set sprite palette 3 color addition (absolute)
                      r: affect red
                      g: affect green
                      b: affect blue
                      f: amount to add
$AC xx yy       $EE9C set background Scroll HDMA data
                      123fffff vhaaaaaa
                      1: affect BG1
                      2: affect BG2
                      3: affect BG3
                      f: frequency
                      v: vertical
                      h: horizontal
                      a: amplitude (max 14, must be even ???)
$AD nnxxxxxx    $EFA3 Set BG Scroll HDMA Index
                      n: BG (0,1,2)
                      x: index
$AE vh---123    $ED86 Update Scroll HDMA data
                      v: vertical
                      h: horizontal
                      1: affect BG1
                      2: affect BG2
                      3: affect BG3
$AF rgbfffff    $EBDA Set background palette color subtraction (absolute)
$B0 rgbfffff    $EBC4 Set background palette color addition (absolute)
$B1 rgbaffff    $ECAC Set sprite palette 1 color subtraction (absolute)
$B2 rgbaffff    $EC96 Set sprite palette 1 color addition (absolute)
$B3 rgbaffff    $EC4F Add color to sprite palette 3 (relative)
                      r: affect red
                      g: affect green
                      b: affect blue
                      a: 0 = increase addition amount, 1 = decrease addition amount
                      f: amount to increase/decrease
$B4 rgbaffff    $EC46 Subtract color from sprite palette 3 palette (relative)
                      r: affect red
                      g: affect green
                      b: affect blue
                      a: 0 = increase subtraction amount, 1 = decrease subtraction amount
                      f: amount to increase/decrease
$B5 rgbaffff    $EBB2 Add color to background palette (relative)
$B6 rgbaffff    $EBBB Subtract color from background palette (relative)
$B7 rgbaffff    $EC84 Add color to sprite palette 1 (relative)
$B8 rgbaffff    $EC8D Subtract color from sprite palette 1 (relative)
$B9 rgbfffff    $ECEA Set monster palettes color subtraction (absolute)
$BA rgbfffff    $ECD4 Set monster palettes color addition (absolute)
$BB rgbaffff    $ECCB Add color to monster palettes (relative)
$BC rgbaffff    $ECC2 Subtract color from monster palettes (relative)
$BD abcd----    $EAA1 Hide/Show BG1/BG3 Animation Thread Graphics
                      a: affect bg1
                      b: affect bg3
                      c: bg1 (0 = show, 1 = hide)
                      d: bg3 (0 = show, 1 = hide)
$BE xx          $EA98 Set Screen Mosaic to xx ($2106)
$BF xxxx        $EA85 Jump to Subroutine $xxxx
$C0             $EA76 Return from Subroutine
$C1 xx yy       $EA05 xx = vector movement speed ???, yy = number of bytes to branch backwards
$C2 abc-----    $E9EB Unpause Animation
                      a: unpause bg1
                      b: unpause bg3
                      c: unpause sprites
$C3             $F02F Move circle to target
$C4 ab------    $E99F Move BG1/BG3 Thread to This Thread's Position
                      a: affect bg1
                      b: affect bg3
$C5 4 addresses $E8FB jump based on swdtech hit
$C6 xx yy       $E830 quadra slam/quadra slice
$C7 <varies>    $C873 Command $C7 Subcommands
                      $00 xx       $C2C39B Change Attacking Character Facing Direction (xx: 0 = face left, 1 = face right)
                      $01          $C2C362 reset position offsets for attacking character
                      $02          $C2C31E save attacking character position
                      $03          $C2C339 restore attacking character position and reset offsets
                      $04          $C2C303 restore attacking character position
                      $05 xx       $C2C2B7 (unused)
                      $06 xx yy    $C2C26A 
                      $07          $C2C247 update character action based on vector direction (walking)
                      $08 xx yy    $C2C1D6 set vector target (xx,yy) from attacker
                      $09          $C2C1B3 update character action based on vector direction (arms up)
                      $0A xx       $C2C194 (unused)
                      $0B xx yy zz $C2C171 spc command
                      $0C xx yy    $C2C136 change actor xx graphic index to yy
                      $0D xx       $C2C115 
                      $0E xx       $C2C0F8 enable/disable screen shaking (xx -> $6285)
                      $0F          $C2C0F2 (unused)
                      $10 xx       $C2C0B9 
                      $11          $C2C0B0 disable running with L+R
$C8 xx          $E7B1 Set attacker modified graphic index
$C9 xx          $DAE4 Play sound effect xx ($00 means play default for this animation)
$CA             $E798 
$CB eddddddd    $E779 Enable/Disable Echo Sprites (4 copies of character sprite)
                      e: 1 = enable, 0 = disable
                      d: frame delay between echo sprites (bitmask)
$CC rgbfffff    $EC24 Set sprite palette 2 color subtraction (absolute)
                      r: affect red
                      g: affect green
                      b: affect blue
                      f: amount to subtract
$CD rgbfffff    $EC02 Set sprite palette 2 color addition (absolute)
                      r: affect red
                      g: affect green
                      b: affect blue
                      f: amount to add
$CE rgbaffff    $EBF0 Add color to sprite palette 2 (relative)
                      r: affect red
                      g: affect green
                      b: affect blue
                      a: 0 = increase addition amount, 1 = decrease addition amount
                      f: amount to increase/decrease
$CF rgbaffff    $EBF9 Subtract color from sprite palette 2 (relative)
                      r: affect red
                      g: affect green
                      b: affect blue
                      a: 0 = increase subtraction amount, 1 = decrease subtraction amount
                      f: amount to increase/decrease
$D0 vhftpppm    $E746 Set sprite data for all character/monster sprites
$D1 xx          $E73D Validate/Invalidate Character/Monster Order Priority (0 = validate, 1 = invalidate)
$D2 xx yy       $F86D Set Target Position (xx,yy) doesn't actually move target
$D3             $F044 Move Circle to Attacking Character
$D4 xxxx yy     $E722 Set Color Addition/Subtraction Data
                      shbo4321 mmss--cd (+$2130)
                               s: 0 = add, 1 = subtract
                               h: 0 = full add/sub, 1 = half add/sub
                               bo4321: layers affected by add/sub (b = background)
                               m: 0
                               s: 0
                               c: 0 = fixed color add/sub, 1 = subscreen add/sub
                               d: 0
                      ---o4321 subscreen designation ($212D)
                               o4321: layers to add/sub
$D5 ------vh    $E707 Flip Monster (v = vertical, h = horizontal)
$D6             $E6CD 
$D7 xx          $E68D Move Fire Dance Sprites
$D8 xx yy zz    $E5F9 x: x speed, y: y speed, z: ???
$D9 xx          $E5F0 (bum rush)
$DA xxxx        $E528 update tornado (w wind/spiraler)
$DB xx          $E509 Branch forward xx bytes if character already stepped forward to attack
$DC             $E43A Rotate Triangle 2D
$DD xx yy dd rr $E416 Init Triangle
$DE             $E401 move triangle to attacker position
$DF             $E3EC move triangle to target position
$E0 xx yy dd rr $E3A0 Modify Triangle
$E1 xx          $E328 show/hide attacker sprite
$E2             $DD8D 
$E3             $DD42 
$E4             $E286 
$E5 xx yy zz    $E15D yy = number of bytes to branch backwards
$E6 xx yy zz    $E1B3 yy = number of bytes to branch backwards
$E7             $E25A 
$E8 rr tt       $DCDF Move rr,tt in polar coordinates (radius,theta)
$E9 xx yy       $DC9B Move randomly (0...xx,0...yy)
$EA 13--xxxx    $DC81 Set BG Tile Data Quadrants
                      1 = affect bg1
                      3 = affect bg1
                      x = quadrant
$EB xxxx ...    $DC66 Jump to $xxxx... based on thread index (number of addresses is number of threads)
$EC xx          $DC55 Change Thread Layer (0 = sprite, 1 = bg1, 2 = bg3)
$ED             $DB8F 
$EE --oo----    $E5C5 Set Target's Sprite Tile Priority
$EF rr tt       $DCD9 similar to $E8
$F0 5 words     $DB6C Jump based on current target index (char1, char2, char3, char4, monster)
$F1 xx          $E2C0 
$F2             $F980 Set a trajectory from target center to attacker
$F3 5 words     $DB64 Jump based on current attacker index (char1, char2, char3, char4, monster)
$F4 -------t    $F30F Set Sprite Layer Priority
$F5             $F7FC Loop End (loop until no threads are active)
$F6             $E4A2 Rotate Triangle 3D
$F7 xx          $DB50 Wait until vertical scanline position xx
$F8 xxxx yyyy   $DB31 Jump to either xxxx or yyyy if magitek mode is enabled
$F9 xx yy zz    $DAF9 
$FA xxxx        $DB23 Jump to $xxxx
$FB rgbfffff    $ED4C Set character palettes color subtraction (absolute)
                      r: affect red
                      g: affect green
                      b: affect blue
                      f: amount to subtract
$FC rgbfffff    $ED12 Set character palettes color addition (absolute)
                      r: affect red
                      g: affect green
                      b: affect blue
                      f: amount to add
$FD rgbaffff    $ED00 Add color to character palettes (relative)
                      r: affect red
                      g: affect green
                      b: affect blue
                      a: 0 = increase addition amount, 1 = decrease addition amount
                      f: amount to increase/decrease
$FE rgbaffff    $ED09 Subtract color from character palettes (relative)
                      r: affect red
                      g: affect green
                      b: affect blue
                      a: 0 = increase subtraction amount, 1 = decrease subtraction amount
                      f: amount to increase/decrease
$FF                   End of Animation
  • ff3/ff3us/doc/asm/codes/battle_animation_script.txt
  • Last modified: 3 years ago
  • (external edit)