summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/pokedex_cry_screen.s1016
-rw-r--r--data/battle_anim_80CA710.s4651
-rw-r--r--data/pokedex_cry_screen.s116
-rw-r--r--graphics/pokedex/83FB718.pngbin0 -> 135 bytes
-rw-r--r--include/battle_anim.h73
-rw-r--r--include/ewram.h1
-rw-r--r--include/main.h1
-rw-r--r--include/rom_8077ABC.h2
-rw-r--r--include/sprite.h9
-rw-r--r--ld_script.txt143
-rw-r--r--src/battle/anim/alert.c31
-rw-r--r--src/battle/anim/angel.c24
-rw-r--r--src/battle/anim/angel_kiss.c50
-rw-r--r--src/battle/anim/anger.c25
-rw-r--r--src/battle/anim/aurora.c42
-rw-r--r--src/battle/anim/beta_beat_up.c25
-rw-r--r--src/battle/anim/blow_kiss.c14
-rw-r--r--src/battle/anim/bottle.c38
-rw-r--r--src/battle/anim/brace.c28
-rw-r--r--src/battle/anim/breath.c37
-rw-r--r--src/battle/anim/bubble.c37
-rw-r--r--src/battle/anim/bug.c186
-rw-r--r--src/battle/anim/bullet.c27
-rw-r--r--src/battle/anim/copy_orb.c31
-rw-r--r--src/battle/anim/cube.c38
-rwxr-xr-xsrc/battle/anim/current.c335
-rw-r--r--src/battle/anim/cutter.c144
-rw-r--r--src/battle/anim/cyclone.c25
-rw-r--r--src/battle/anim/dark.c164
-rw-r--r--src/battle/anim/devil.c31
-rw-r--r--src/battle/anim/dragon.c196
-rw-r--r--src/battle/anim/draw.c16
-rw-r--r--src/battle/anim/drum.c32
-rwxr-xr-x[-rw-r--r--]src/battle/anim/egg.c130
-rw-r--r--src/battle/anim/energy_wave.c144
-rw-r--r--src/battle/anim/espeed.c58
-rw-r--r--src/battle/anim/fang.c27
-rw-r--r--src/battle/anim/fight.c394
-rw-r--r--src/battle/anim/finger.c256
-rw-r--r--src/battle/anim/fire.c172
-rw-r--r--src/battle/anim/fire_2.c302
-rwxr-xr-xsrc/battle/anim/flying.c346
-rw-r--r--src/battle/anim/flying_hearts.c14
-rw-r--r--src/battle/anim/flying_path.c74
-rw-r--r--src/battle/anim/flying_petals.c100
-rwxr-xr-xsrc/battle/anim/ghost.c191
-rw-r--r--src/battle/anim/glitter.c43
-rw-r--r--src/battle/anim/glow.c55
-rw-r--r--src/battle/anim/grip.c36
-rwxr-xr-xsrc/battle/anim/ground.c125
-rw-r--r--src/battle/anim/grow.c14
-rw-r--r--src/battle/anim/guard.c31
-rw-r--r--src/battle/anim/guillotine.c40
-rw-r--r--src/battle/anim/heal.c27
-rw-r--r--src/battle/anim/heal_bell.c132
-rw-r--r--src/battle/anim/heart_1.c13
-rw-r--r--src/battle/anim/heated_rock.c129
-rw-r--r--src/battle/anim/hidden_power_orbit.c120
-rw-r--r--src/battle/anim/homing.c14
-rw-r--r--src/battle/anim/hop.c58
-rw-r--r--src/battle/anim/hop_2.c16
-rwxr-xr-xsrc/battle/anim/ice.c495
-rw-r--r--src/battle/anim/kiss_fountain.c13
-rw-r--r--src/battle/anim/leaf.c240
-rw-r--r--src/battle/anim/lunge.c339
-rw-r--r--src/battle/anim/lunge_1.c124
-rw-r--r--src/battle/anim/lunge_2.c163
-rw-r--r--src/battle/anim/money.c48
-rw-r--r--src/battle/anim/moon.c14
-rw-r--r--src/battle/anim/musical.c393
-rw-r--r--src/battle/anim/noise.c12
-rwxr-xr-xsrc/battle/anim/normal.c240
-rw-r--r--src/battle/anim/note_rain.c25
-rw-r--r--src/battle/anim/note_scatter.c54
-rw-r--r--src/battle/anim/note_scatter_2.c57
-rw-r--r--src/battle/anim/note_spin.c51
-rw-r--r--src/battle/anim/note_wave.c143
-rw-r--r--src/battle/anim/orbit.c83
-rw-r--r--src/battle/anim/orbit_fast.c63
-rw-r--r--src/battle/anim/orbit_scatter.c31
-rw-r--r--src/battle/anim/orbs.c181
-rw-r--r--src/battle/anim/osmose.c27
-rw-r--r--src/battle/anim/perceive.c30
-rw-r--r--src/battle/anim/poison.c192
-rw-r--r--src/battle/anim/powder.c52
-rw-r--r--src/battle/anim/psychic.c408
-rw-r--r--src/battle/anim/rain.c37
-rw-r--r--src/battle/anim/ring.c292
-rw-r--r--src/battle/anim/rock.c295
-rw-r--r--src/battle/anim/roots.c69
-rw-r--r--src/battle/anim/scan.c46
-rw-r--r--src/battle/anim/seed.c31
-rw-r--r--src/battle/anim/shield.c14
-rw-r--r--src/battle/anim/shimmer.c17
-rw-r--r--src/battle/anim/shock.c51
-rw-r--r--src/battle/anim/slash.c63
-rw-r--r--src/battle/anim/sleep.c59
-rw-r--r--src/battle/anim/slice.c38
-rw-r--r--src/battle/anim/smoke.c22
-rw-r--r--src/battle/anim/sonic.c237
-rw-r--r--src/battle/anim/sonic_task.c152
-rw-r--r--src/battle/anim/spin_finger.c73
-rw-r--r--src/battle/anim/spit.c27
-rw-r--r--src/battle/anim/splash.c14
-rw-r--r--src/battle/anim/startle.c13
-rw-r--r--src/battle/anim/strike.c43
-rw-r--r--src/battle/anim/struggle.c36
-rw-r--r--src/battle/anim/sunlight.c25
-rw-r--r--src/battle/anim/swipe.c37
-rw-r--r--src/battle/anim/switch.c70
-rw-r--r--src/battle/anim/sword.c27
-rw-r--r--src/battle/anim/taunt_finger.c56
-rw-r--r--src/battle/anim/tendrils.c59
-rw-r--r--src/battle/anim/thought.c58
-rw-r--r--src/battle/anim/thrashing.c18
-rw-r--r--src/battle/anim/thunder.c27
-rw-r--r--src/battle/anim/tile.c219
-rw-r--r--src/battle/anim/tile_in.c51
-rw-r--r--src/battle/anim/tile_out.c81
-rw-r--r--src/battle/anim/twinkle.c28
-rw-r--r--src/battle/anim/unused_1.c64
-rw-r--r--src/battle/anim/unused_2.c88
-rw-r--r--src/battle/anim/unused_3.c47
-rw-r--r--src/battle/anim/unused_4.c58
-rw-r--r--src/battle/anim/unused_5.c13
-rw-r--r--src/battle/anim/unused_6.c26
-rw-r--r--src/battle/anim/unused_7.c15
-rw-r--r--src/battle/anim/unused_8.c54
-rw-r--r--src/battle/anim/unused_9.c18
-rw-r--r--src/battle/anim/uproar.c14
-rw-r--r--src/battle/anim/water.c182
-rw-r--r--src/battle/anim/wave_finger.c39
-rw-r--r--src/battle/anim/whip.c89
-rw-r--r--src/battle/anim/wisp_fire.c43
-rw-r--r--src/battle/anim/wisp_orb.c47
-rw-r--r--src/main.c2
-rw-r--r--src/pokedex_cry_screen.c896
-rw-r--r--src/rom_8077ABC.c5
138 files changed, 10502 insertions, 7710 deletions
diff --git a/asm/pokedex_cry_screen.s b/asm/pokedex_cry_screen.s
deleted file mode 100644
index 00f8cfe14..000000000
--- a/asm/pokedex_cry_screen.s
+++ /dev/null
@@ -1,1016 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "include/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8119E3C
-sub_8119E3C: @ 8119E3C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r5, r0, 0
- lsls r1, 24
- lsrs r2, r1, 24
- movs r0, 0
- mov r9, r0
- ldr r6, _08119E60 @ =gUnknown_03005E98
- ldrb r0, [r6]
- cmp r0, 0x1
- beq _08119EE0
- cmp r0, 0x1
- bgt _08119E64
- cmp r0, 0
- beq _08119E6A
- b _08119F74
- .align 2, 0
-_08119E60: .4byte gUnknown_03005E98
-_08119E64:
- cmp r0, 0x2
- beq _08119F60
- b _08119F74
-_08119E6A:
- ldr r4, _08119ECC @ =gSharedMem + 0x1C000
- ldrh r0, [r5]
- movs r1, 0
- strh r0, [r4, 0x14]
- ldrb r0, [r5, 0x5]
- strb r0, [r4, 0x16]
- strb r1, [r4, 0x1A]
- strb r1, [r4, 0x1B]
- strb r1, [r4, 0x10]
- movs r0, 0x1C
- strb r0, [r4, 0x12]
- strb r1, [r4, 0x11]
- ldrb r1, [r5, 0x4]
- lsls r1, 19
- negs r1, r1
- asrs r1, 16
- adds r0, r2, 0
- movs r2, 0x1
- bl sub_811A350
- movs r0, 0
- mov r12, r6
- ldr r1, _08119ED0 @ =0x040000d4
- ldr r7, _08119ED4 @ =gUnknown_083FB718
- ldr r2, _08119ED8 @ =0xfffe4000
- adds r6, r4, r2
- ldr r5, _08119EDC @ =0x80000010
-_08119EA0:
- movs r3, 0
- adds r4, r0, 0x1
- lsls r2, r0, 5
-_08119EA6:
- str r7, [r1]
- adds r0, r2, r3
- lsls r0, 5
- adds r0, r6
- str r0, [r1, 0x4]
- str r5, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x1F
- bls _08119EA6
- lsls r0, r4, 24
- lsrs r0, 24
- cmp r0, 0x6
- bls _08119EA0
- mov r1, r12
- b _08119F50
- .align 2, 0
-_08119ECC: .4byte gSharedMem + 0x1C000
-_08119ED0: .4byte 0x040000d4
-_08119ED4: .4byte gUnknown_083FB718
-_08119ED8: .4byte 0xfffe4000
-_08119EDC: .4byte 0x80000010
-_08119EE0:
- ldrb r0, [r5, 0x2]
- lsls r0, 27
- lsrs r7, r0, 16
- ldrb r1, [r5, 0x3]
- lsls r1, 12
- ldrh r0, [r5]
- lsls r0, 18
- lsrs r0, 23
- adds r1, r0
- lsls r1, 16
- lsrs r6, r1, 16
- movs r0, 0
- ldr r2, _08119F58 @ =gSharedMem + 0x1C000
- mov r8, r2
- movs r1, 0xC0
- lsls r1, 19
- mov r12, r1
-_08119F02:
- movs r3, 0
- adds r4, r0, 0x1
- lsls r5, r0, 6
-_08119F08:
- lsls r1, r3, 1
- adds r1, r5
- adds r1, r7
- add r1, r12
- adds r2, r6, 0
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- strh r2, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x1F
- bls _08119F08
- lsls r0, r4, 24
- lsrs r0, 24
- cmp r0, 0x6
- bls _08119F02
- mov r2, r8
- ldrb r0, [r2, 0x16]
- movs r4, 0
- cmp r0, 0
- beq _08119F4E
- mov r5, r8
-_08119F38:
- adds r0, r4, 0
- movs r1, 0
- bl sub_811A1C8
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- ldrb r0, [r5, 0x16]
- lsls r0, 3
- cmp r4, r0
- blt _08119F38
-_08119F4E:
- ldr r1, _08119F5C @ =gUnknown_03005E98
-_08119F50:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08119F74
- .align 2, 0
-_08119F58: .4byte gSharedMem + 0x1C000
-_08119F5C: .4byte gUnknown_03005E98
-_08119F60:
- bl sub_811A324
- ldr r0, _08119F84 @ =gUnknown_083FB6F8
- ldrb r1, [r5, 0x3]
- lsls r1, 4
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0x1
- mov r9, r0
-_08119F74:
- mov r0, r9
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08119F84: .4byte gUnknown_083FB6F8
- thumb_func_end sub_8119E3C
-
- thumb_func_start sub_8119F88
-sub_8119F88: @ 8119F88
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_811A324
- adds r0, r4, 0
- bl sub_811A15C
- ldr r1, _08119FC4 @ =gSharedMem + 0x1C000
- ldrb r0, [r1, 0x1B]
- cmp r0, 0
- beq _08119FA6
- subs r0, 0x1
- strb r0, [r1, 0x1B]
-_08119FA6:
- ldrb r0, [r1, 0x1A]
- cmp r0, 0
- beq _08119FC8
- subs r0, 0x1
- strb r0, [r1, 0x1A]
- lsls r0, 24
- cmp r0, 0
- bne _08119FC8
- ldrh r0, [r1, 0x18]
- bl sub_811A0A0
- bl sub_811A124
- b _0811A044
- .align 2, 0
-_08119FC4: .4byte gSharedMem + 0x1C000
-_08119FC8:
- ldr r5, _08119FD8 @ =gSharedMem + 0x1C000
- ldrb r0, [r5, 0x10]
- cmp r0, 0
- bne _08119FDC
- bl sub_811A124
- b _0811A044
- .align 2, 0
-_08119FD8: .4byte gSharedMem + 0x1C000
-_08119FDC:
- cmp r0, 0x1
- bne _08119FE6
- bl sub_811A0C0
- b _0811A006
-_08119FE6:
- cmp r0, 0x8
- bls _0811A006
- bl IsCryPlaying
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _08119FFE
- bl sub_811A124
- strb r4, [r5, 0x10]
- b _0811A044
-_08119FFE:
- bl sub_811A0C0
- movs r0, 0x1
- strb r0, [r5, 0x10]
-_0811A006:
- ldr r5, _0811A04C @ =gSharedMem + 0x1C000
- ldrb r4, [r5, 0x10]
- subs r4, 0x1
- lsls r4, 25
- lsrs r4, 24
- ldrb r0, [r5, 0x16]
- lsls r0, 3
- ldrb r1, [r5, 0x11]
- adds r0, r1
- subs r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, r5
- ldrb r1, [r1]
- bl sub_811A1C8
- ldrb r0, [r5, 0x16]
- lsls r0, 3
- ldrb r1, [r5, 0x11]
- adds r0, r1
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- adds r4, 0x1
- adds r4, r5
- ldrb r1, [r4]
- bl sub_811A1C8
- ldrb r0, [r5, 0x10]
- adds r0, 0x1
- strb r0, [r5, 0x10]
-_0811A044:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811A04C: .4byte gSharedMem + 0x1C000
- thumb_func_end sub_8119F88
-
- thumb_func_start sub_811A050
-sub_811A050: @ 811A050
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r5, r0, 16
- adds r6, r5, 0
- ldr r0, _0811A08C @ =gMPlay_BGM
- ldr r0, [r0, 0x4]
- cmp r0, 0
- bge _0811A09A
- ldr r4, _0811A090 @ =gSharedMem + 0x1C000
- ldrb r0, [r4, 0x1A]
- cmp r0, 0
- bne _0811A09A
- ldrb r0, [r4, 0x1B]
- cmp r0, 0
- bne _0811A09A
- movs r0, 0x4
- strb r0, [r4, 0x1B]
- bl IsCryPlaying
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0811A094
- bl StopCry
- strh r5, [r4, 0x18]
- movs r0, 0x2
- strb r0, [r4, 0x1A]
- b _0811A09A
- .align 2, 0
-_0811A08C: .4byte gMPlay_BGM
-_0811A090: .4byte gSharedMem + 0x1C000
-_0811A094:
- adds r0, r6, 0
- bl sub_811A0A0
-_0811A09A:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_811A050
-
- thumb_func_start sub_811A0A0
-sub_811A0A0: @ 811A0A0
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0
- movs r2, 0x7D
- movs r3, 0xA
- bl PlayCry2
- ldr r1, _0811A0BC @ =gSharedMem + 0x1C000
- movs r0, 0x1
- strb r0, [r1, 0x10]
- pop {r0}
- bx r0
- .align 2, 0
-_0811A0BC: .4byte gSharedMem + 0x1C000
- thumb_func_end sub_811A0A0
-
- thumb_func_start sub_811A0C0
-sub_811A0C0: @ 811A0C0
- push {r4,lr}
- ldr r3, _0811A0D0 @ =gPcmDmaCounter
- movs r0, 0
- ldrsb r0, [r3, r0]
- cmp r0, 0x1
- bgt _0811A0D8
- ldr r0, _0811A0D4 @ =gSoundInfo + 0x350
- b _0811A0F0
- .align 2, 0
-_0811A0D0: .4byte gPcmDmaCounter
-_0811A0D4: .4byte gSoundInfo + 0x350
-_0811A0D8:
- ldr r2, _0811A11C @ =gSoundInfo
- ldrb r1, [r2, 0xB]
- movs r0, 0
- ldrsb r0, [r3, r0]
- subs r0, 0x1
- subs r1, r0
- ldr r0, [r2, 0x10]
- muls r0, r1
- movs r1, 0xD4
- lsls r1, 2
- adds r2, r1
- adds r0, r2
-_0811A0F0:
- movs r1, 0xC6
- lsls r1, 3
- adds r3, r0, r1
- movs r2, 0
- ldr r4, _0811A120 @ =gSharedMem + 0x1C000
-_0811A0FA:
- adds r1, r2, r4
- lsls r0, r2, 1
- adds r0, r3
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- lsls r0, 1
- strb r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xF
- bls _0811A0FA
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811A11C: .4byte gSoundInfo
-_0811A120: .4byte gSharedMem + 0x1C000
- thumb_func_end sub_811A0C0
-
- thumb_func_start sub_811A124
-sub_811A124: @ 811A124
- push {r4,lr}
- ldr r4, _0811A158 @ =gSharedMem + 0x1C000
- ldrb r0, [r4, 0x16]
- lsls r0, 3
- ldrb r1, [r4, 0x11]
- adds r0, r1
- subs r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl sub_811A1C8
- ldrb r0, [r4, 0x16]
- lsls r0, 3
- ldrb r4, [r4, 0x11]
- adds r0, r4
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl sub_811A1C8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811A158: .4byte gSharedMem + 0x1C000
- thumb_func_end sub_811A124
-
- thumb_func_start sub_811A15C
-sub_811A15C: @ 811A15C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _0811A1B4 @ =gSharedMem + 0x1C000
- ldrb r1, [r4, 0x11]
- movs r2, 0
- bl sub_811A350
- ldrb r0, [r4, 0x11]
- adds r0, 0x2
- strb r0, [r4, 0x11]
- ldrb r0, [r4, 0x11]
- lsrs r0, 3
- ldrb r2, [r4, 0x16]
- adds r1, r0, r2
- adds r2, r1, 0x1
- adds r0, r2, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r2, r0
- lsls r0, 16
- lsrs r3, r0, 16
- movs r1, 0
- ldr r2, _0811A1B8 @ =0x040000d4
- ldr r6, _0811A1BC @ =gUnknown_083FB718
- ldr r0, _0811A1C0 @ =0xfffe4000
- adds r5, r4, r0
- ldr r4, _0811A1C4 @ =0x80000010
-_0811A194:
- str r6, [r2]
- lsls r0, r1, 5
- adds r0, r3
- lsls r0, 5
- adds r0, r5
- str r0, [r2, 0x4]
- str r4, [r2, 0x8]
- ldr r0, [r2, 0x8]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x6
- bls _0811A194
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0811A1B4: .4byte gSharedMem + 0x1C000
-_0811A1B8: .4byte 0x040000d4
-_0811A1BC: .4byte gUnknown_083FB718
-_0811A1C0: .4byte 0xfffe4000
-_0811A1C4: .4byte 0x80000010
- thumb_func_end sub_811A15C
-
- thumb_func_start sub_811A1C8
-sub_811A1C8: @ 811A1C8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- lsls r5, r0, 24
- lsrs r4, r5, 24
- lsls r1, 24
- movs r0, 0xFE
- lsls r0, 23
- adds r1, r0
- lsrs r1, 16
- adds r0, r1, 0
- bl __floatsidf
- ldr r3, _0811A280 @ =0x00000000
- ldr r2, _0811A27C @ =0x40920000
- bl __divdf3
- bl __fixunsdfsi
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x37
- bls _0811A1FE
- movs r6, 0x37
-_0811A1FE:
- str r6, [sp]
- movs r7, 0x1
- ands r7, r4
- ldr r0, _0811A284 @ =gSharedMem + 0x1C000
- mov r10, r0
- lsrs r5, 27
- mov r8, r5
- ldr r0, _0811A288 @ =gUnknown_083FB738
- mov r1, r10
- ldrb r1, [r1, 0x12]
- cmp r6, r1
- bls _0811A298
- adds r0, r7, r0
- ldrb r0, [r0]
- mov r9, r0
- movs r2, 0x7
- ands r2, r4
-_0811A220:
- lsls r1, r6, 1
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 4
- adds r1, r0
- ldr r3, _0811A28C @ =gUnknown_083FB274
- adds r1, r3
- mov r3, r8
- lsls r0, r3, 5
- ldrh r1, [r1]
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _0811A290 @ =gSharedMem
- adds r5, r0, r1
- ldrb r4, [r5]
- mov r3, r9
- ands r4, r3
- strb r4, [r5]
- adds r0, r6, 0
- movs r1, 0x3
- str r2, [sp, 0x8]
- bl __udivsi3
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x1
- movs r1, 0xF
- ands r0, r1
- lsls r1, r7, 4
- adds r0, r1
- ldr r1, _0811A294 @ =gUnknown_083FB73A
- adds r0, r1
- ldrb r0, [r0]
- orrs r4, r0
- strb r4, [r5]
- subs r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r2, [sp, 0x8]
- ldr r3, _0811A284 @ =gSharedMem + 0x1C000
- ldrb r3, [r3, 0x12]
- cmp r6, r3
- bhi _0811A220
- b _0811A2FA
- .align 2, 0
-_0811A27C: .4byte 0x40920000
-_0811A280: .4byte 0x00000000
-_0811A284: .4byte gSharedMem + 0x1C000
-_0811A288: .4byte gUnknown_083FB738
-_0811A28C: .4byte gUnknown_083FB274
-_0811A290: .4byte gSharedMem
-_0811A294: .4byte gUnknown_083FB73A
-_0811A298:
- lsls r1, r7, 4
- str r1, [sp, 0x4]
- adds r0, r7, r0
- ldrb r0, [r0]
- mov r9, r0
- movs r7, 0x7
- ands r7, r4
-_0811A2A6:
- lsls r1, r6, 1
- lsls r0, r7, 3
- adds r0, r7
- lsls r0, 4
- adds r1, r0
- ldr r2, _0811A314 @ =gUnknown_083FB274
- adds r1, r2
- mov r3, r8
- lsls r0, r3, 5
- ldrh r1, [r1]
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _0811A318 @ =gSharedMem
- adds r5, r0, r1
- ldrb r4, [r5]
- mov r2, r9
- ands r4, r2
- strb r4, [r5]
- adds r0, r6, 0
- movs r1, 0x3
- bl __udivsi3
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x1
- movs r1, 0xF
- ands r0, r1
- ldr r3, [sp, 0x4]
- adds r0, r3
- ldr r1, _0811A31C @ =gUnknown_083FB73A
- adds r0, r1
- ldrb r0, [r0]
- orrs r4, r0
- strb r4, [r5]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r2, _0811A320 @ =gSharedMem + 0x1C000
- ldrb r2, [r2, 0x12]
- cmp r6, r2
- bcc _0811A2A6
-_0811A2FA:
- mov r3, sp
- ldrb r0, [r3]
- mov r3, r10
- strb r0, [r3, 0x12]
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811A314: .4byte gUnknown_083FB274
-_0811A318: .4byte gSharedMem
-_0811A31C: .4byte gUnknown_083FB73A
-_0811A320: .4byte gSharedMem + 0x1C000
- thumb_func_end sub_811A1C8
-
- thumb_func_start sub_811A324
-sub_811A324: @ 811A324
- ldr r2, _0811A344 @ =0x040000d4
- ldr r0, _0811A348 @ =gSharedMem
- str r0, [r2]
- movs r1, 0xE0
- lsls r1, 9
- adds r0, r1
- ldrh r0, [r0, 0x14]
- movs r1, 0xC0
- lsls r1, 19
- adds r0, r1
- str r0, [r2, 0x4]
- ldr r0, _0811A34C @ =0x80000e00
- str r0, [r2, 0x8]
- ldr r0, [r2, 0x8]
- bx lr
- .align 2, 0
-_0811A344: .4byte 0x040000d4
-_0811A348: .4byte gSharedMem
-_0811A34C: .4byte 0x80000e00
- thumb_func_end sub_811A324
-
- thumb_func_start sub_811A350
-sub_811A350: @ 811A350
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- adds r3, r0, 0
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 24
- lsrs r2, 24
- cmp r0, 0x1
- beq _0811A38C
- cmp r0, 0x1
- bgt _0811A36E
- cmp r0, 0
- beq _0811A378
- b _0811A3C4
-_0811A36E:
- cmp r3, 0x2
- beq _0811A3A0
- cmp r3, 0x3
- beq _0811A3B4
- b _0811A3C4
-_0811A378:
- cmp r2, 0
- beq _0811A384
- ldr r0, _0811A380 @ =REG_BG0VOFS
- b _0811A3C2
- .align 2, 0
-_0811A380: .4byte REG_BG0VOFS
-_0811A384:
- ldr r0, _0811A388 @ =REG_BG0HOFS
- b _0811A3C2
- .align 2, 0
-_0811A388: .4byte REG_BG0HOFS
-_0811A38C:
- cmp r2, 0
- beq _0811A398
- ldr r0, _0811A394 @ =REG_BG1VOFS
- b _0811A3C2
- .align 2, 0
-_0811A394: .4byte REG_BG1VOFS
-_0811A398:
- ldr r0, _0811A39C @ =REG_BG1HOFS
- b _0811A3C2
- .align 2, 0
-_0811A39C: .4byte REG_BG1HOFS
-_0811A3A0:
- cmp r2, 0
- beq _0811A3AC
- ldr r0, _0811A3A8 @ =REG_BG2VOFS
- b _0811A3C2
- .align 2, 0
-_0811A3A8: .4byte REG_BG2VOFS
-_0811A3AC:
- ldr r0, _0811A3B0 @ =REG_BG2HOFS
- b _0811A3C2
- .align 2, 0
-_0811A3B0: .4byte REG_BG2HOFS
-_0811A3B4:
- cmp r2, 0
- beq _0811A3C0
- ldr r0, _0811A3BC @ =REG_BG3VOFS
- b _0811A3C2
- .align 2, 0
-_0811A3BC: .4byte REG_BG3VOFS
-_0811A3C0:
- ldr r0, _0811A3C8 @ =REG_BG3HOFS
-_0811A3C2:
- strh r1, [r0]
-_0811A3C4:
- pop {r0}
- bx r0
- .align 2, 0
-_0811A3C8: .4byte REG_BG3HOFS
- thumb_func_end sub_811A350
-
-.section .text_811A4F8
-
- thumb_func_start DestroyCryMeterNeedleSprite
-DestroyCryMeterNeedleSprite: @ 811A4F8
- push {r4,r5,lr}
- ldr r5, _0811A52C @ =gSprites
- ldr r4, _0811A530 @ =gSharedMem + 0x1C800
- ldrh r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r0, [r0, 0x5]
- lsrs r0, 4
- bl GetSpritePaletteTagByPaletteNum
- lsls r0, 16
- lsrs r0, 16
- bl FreeSpritePaletteByTag
- ldrh r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- bl DestroySprite
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811A52C: .4byte gSprites
-_0811A530: .4byte gSharedMem + 0x1C800
- thumb_func_end DestroyCryMeterNeedleSprite
-
- thumb_func_start sub_811A534
-sub_811A534: @ 811A534
- push {r4-r7,lr}
- sub sp, 0x14
- adds r7, r0, 0
- ldr r3, _0811A578 @ =gSprites
- ldr r5, _0811A57C @ =gSharedMem + 0x1C800
- ldrh r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r2, [r0, 0x1]
- movs r1, 0x4
- negs r1, r1
- ands r1, r2
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0, 0x1]
- ldrh r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- movs r1, 0
- strh r1, [r0, 0x6]
- ldr r0, _0811A580 @ =0xfffff800
- adds r1, r5, r0
- ldrb r0, [r1, 0x10]
- cmp r0, 0x2
- beq _0811A5AA
- cmp r0, 0x2
- bgt _0811A584
- cmp r0, 0
- beq _0811A58A
- b _0811A5F4
- .align 2, 0
-_0811A578: .4byte gSprites
-_0811A57C: .4byte gSharedMem + 0x1C800
-_0811A580: .4byte 0xfffff800
-_0811A584:
- cmp r0, 0x6
- beq _0811A5E2
- b _0811A5F4
-_0811A58A:
- movs r0, 0x20
- strb r0, [r5, 0x1]
- movs r0, 0
- ldrsb r0, [r5, r0]
- cmp r0, 0
- ble _0811A5A4
- ldrb r0, [r5, 0x2]
- add r4, sp, 0xC
- cmp r0, 0x1
- beq _0811A5F6
- subs r0, 0x1
- strb r0, [r5, 0x2]
- b _0811A5F6
-_0811A5A4:
- movs r0, 0x5
- strb r0, [r5, 0x2]
- b _0811A5F4
-_0811A5AA:
- movs r3, 0
- movs r2, 0
- add r4, sp, 0xC
- adds r5, r1, 0
-_0811A5B2:
- lsls r1, r3, 24
- asrs r1, 24
- adds r0, r2, r5
- ldrb r0, [r0]
- cmp r1, r0
- bge _0811A5C0
- adds r3, r0, 0
-_0811A5C0:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0xF
- bls _0811A5B2
- lsls r0, r3, 24
- asrs r0, 24
- movs r1, 0xD0
- muls r0, r1
- cmp r0, 0
- bge _0811A5D8
- adds r0, 0xFF
-_0811A5D8:
- lsls r0, 16
- asrs r0, 24
- bl sub_811A6D8
- b _0811A5F6
-_0811A5E2:
- ldr r1, _0811A620 @ =0xfffff80a
- adds r0, r5, r1
- ldrb r1, [r0]
- movs r0, 0xD0
- muls r0, r1
- lsls r0, 16
- asrs r0, 24
- bl sub_811A6D8
-_0811A5F4:
- add r4, sp, 0xC
-_0811A5F6:
- ldr r0, _0811A624 @ =gSharedMem + 0x1C800
- ldrb r3, [r0]
- movs r2, 0
- ldrsb r2, [r0, r2]
- ldrb r6, [r0, 0x1]
- movs r1, 0x1
- ldrsb r1, [r0, r1]
- adds r5, r0, 0
- cmp r2, r1
- beq _0811A63C
- cmp r2, r1
- bge _0811A628
- ldrb r0, [r5, 0x2]
- adds r0, r3, r0
- strb r0, [r5]
- lsls r0, 24
- asrs r0, 24
- cmp r0, r1
- ble _0811A63C
- b _0811A636
- .align 2, 0
-_0811A620: .4byte 0xfffff80a
-_0811A624: .4byte gSharedMem + 0x1C800
-_0811A628:
- ldrb r0, [r5, 0x2]
- subs r0, r3, r0
- strb r0, [r5]
- lsls r0, 24
- asrs r0, 24
- cmp r0, r1
- bge _0811A63C
-_0811A636:
- strb r6, [r5]
- movs r0, 0
- strb r0, [r5, 0x1]
-_0811A63C:
- ldr r2, _0811A6CC @ =0xffff0000
- ldr r0, [sp, 0x4]
- ands r0, r2
- movs r1, 0x80
- lsls r1, 1
- orrs r0, r1
- ldr r1, _0811A6D0 @ =0x0000ffff
- ands r0, r1
- movs r1, 0x80
- lsls r1, 17
- orrs r0, r1
- str r0, [sp, 0x4]
- movs r1, 0
- ldrsb r1, [r5, r1]
- lsls r1, 24
- lsrs r1, 16
- ldr r0, [sp, 0x8]
- ands r0, r2
- orrs r0, r1
- str r0, [sp, 0x8]
- add r0, sp, 0x4
- adds r1, r4, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ObjAffineSet
- add r0, sp, 0xC
- ldrh r1, [r0]
- ldrh r2, [r4, 0x2]
- ldrh r3, [r4, 0x4]
- ldrh r0, [r4, 0x6]
- str r0, [sp]
- movs r0, 0
- bl SetOamMatrix
- ldr r2, _0811A6D4 @ =gSineTable
- movs r0, 0
- ldrsb r0, [r5, r0]
- adds r0, 0x7F
- movs r1, 0xFF
- ands r0, r1
- lsls r1, r0, 1
- adds r1, r2
- adds r0, 0x40
- lsls r0, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0
- ldrsh r1, [r1, r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- cmp r0, 0
- bge _0811A6AA
- adds r0, 0xFF
-_0811A6AA:
- asrs r0, 8
- strh r0, [r7, 0x24]
- lsls r1, r2, 16
- asrs r1, 16
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- cmp r0, 0
- bge _0811A6BE
- adds r0, 0xFF
-_0811A6BE:
- asrs r0, 8
- strh r0, [r7, 0x26]
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811A6CC: .4byte 0xffff0000
-_0811A6D0: .4byte 0x0000ffff
-_0811A6D4: .4byte gSineTable
- thumb_func_end sub_811A534
-
- thumb_func_start sub_811A6D8
-sub_811A6D8: @ 811A6D8
- push {lr}
- lsls r0, 24
- asrs r0, 24
- movs r1, 0x20
- subs r2, r1, r0
- movs r0, 0xFF
- ands r2, r0
- adds r0, r2, 0
- subs r0, 0x21
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xBE
- bhi _0811A6F4
- movs r2, 0xE0
-_0811A6F4:
- ldr r1, _0811A700 @ =gSharedMem + 0x1C800
- strb r2, [r1, 0x1]
- movs r0, 0x5
- strb r0, [r1, 0x2]
- pop {r0}
- bx r0
- .align 2, 0
-_0811A700: .4byte gSharedMem + 0x1C800
- thumb_func_end sub_811A6D8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/battle_anim_80CA710.s b/data/battle_anim_80CA710.s
deleted file mode 100644
index b5ca446cf..000000000
--- a/data/battle_anim_80CA710.s
+++ /dev/null
@@ -1,4651 +0,0 @@
- .include "include/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gSpriteAnim_83D61FC:: @ 83D61FC
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 2, 5
- obj_image_anim_frame 4, 5
- obj_image_anim_frame 6, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_frame 10, 5
- obj_image_anim_frame 12, 5
- obj_image_anim_frame 14, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D6220:: @ 83D6220
- .4byte gSpriteAnim_83D61FC
-
- .align 2
-gSleepPowderParticleSpriteTemplate:: @ 83D6224
- spr_template 10067, 10067, gOamData_837DF64, gSpriteAnimTable_83D6220, NULL, gDummySpriteAffineAnimTable, AnimMovePowderParticle
-
- .align 2
-gStunSporeParticleSpriteTemplate:: @ 83D623C
- spr_template 10068, 10068, gOamData_837DF64, gSpriteAnimTable_83D6220, NULL, gDummySpriteAffineAnimTable, AnimMovePowderParticle
-
- .align 2
-gPoisonPowderParticleSpriteTemplate:: @ 83D6254
- spr_template 10065, 10065, gOamData_837DF64, gSpriteAnimTable_83D6220, NULL, gDummySpriteAffineAnimTable, AnimMovePowderParticle
-
- .align 2
-gSpriteAnim_83D626C:: @ 83D626C
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6274:: @ 83D6274
- obj_image_anim_frame 1, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D627C:: @ 83D627C
- obj_image_anim_frame 2, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6284:: @ 83D6284
- obj_image_anim_frame 3, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D628C:: @ 83D628C
- obj_image_anim_frame 4, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6294:: @ 83D6294
- obj_image_anim_frame 5, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D629C:: @ 83D629C
- obj_image_anim_frame 6, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D62A4:: @ 83D62A4
- obj_image_anim_frame 7, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D62AC:: @ 83D62AC
- obj_image_anim_frame 8, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D62B4:: @ 83D62B4
- .4byte gSpriteAnim_83D626C
- .4byte gSpriteAnim_83D6274
- .4byte gSpriteAnim_83D627C
- .4byte gSpriteAnim_83D6284
- .4byte gSpriteAnim_83D628C
- .4byte gSpriteAnim_83D6294
- .4byte gSpriteAnim_83D629C
-
- .align 2
-gSpriteAnimTable_83D62D0:: @ 83D62D0
- .4byte gSpriteAnim_83D62A4
-
- .align 2
-gSpriteAnimTable_83D62D4:: @ 83D62D4
- .4byte gSpriteAnim_83D62AC
-
- .align 2
-gSpriteAffineAnim_83D62D8:: @ 83D62D8
- obj_rot_scal_anim_frame 0xFFFB, 0xFFFB, 0, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D62E8:: @ 83D62E8
- .4byte gSpriteAffineAnim_83D62D8
-
- .align 2
-gBattleAnimSpriteTemplate_83D62EC:: @ 83D62EC
- spr_template 10147, 10147, gOamData_837E0AC, gSpriteAnimTable_83D62D4, NULL, gSpriteAffineAnimTable_83D62E8, sub_80CA7B0
-
- .align 2
-gBattleAnimSpriteTemplate_83D6304:: @ 83D6304
- spr_template 10147, 10147, gOamData_837DF24, gSpriteAnimTable_83D62B4, NULL, gDummySpriteAffineAnimTable, sub_80CA800
-
- .align 2
-gSpriteTemplate_83D631C:: @ 83D631C
- spr_template 10147, 10147, gOamData_837DF24, gSpriteAnimTable_83D62D0, NULL, gDummySpriteAffineAnimTable, sub_80CA858
-
- .align 2
-gSpriteAffineAnim_83D6334:: @ 83D6334
- obj_rot_scal_anim_frame 0x140, 0x140, 0, 0
- obj_rot_scal_anim_frame 0xFFF2, 0xFFF2, 0, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83D634C:: @ 83D634C
- .4byte gSpriteAffineAnim_83D6334
-
- .align 2
-gBattleAnimSpriteTemplate_83D6350:: @ 83D6350
- spr_template 10235, 10235, gOamData_837DFE4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D634C, sub_80CA7B0
-
- .align 2
-gSpriteAffineAnim_83D6368:: @ 83D6368
- obj_rot_scal_anim_frame 0xFFFB, 0xFFFB, 0, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D6378:: @ 83D6378
- .4byte gSpriteAffineAnim_83D6368
-
- .align 2
-gBattleAnimSpriteTemplate_83D637C:: @ 83D637C
- spr_template 10147, 10147, gOamData_837E0AC, gSpriteAnimTable_83D62D4, NULL, gSpriteAffineAnimTable_83D6378, sub_80CA9A8
-
- .align 2
-gBattleAnimSpriteTemplate_83D6394:: @ 83D6394
- spr_template 10147, 10147, gOamData_837DF24, gSpriteAnimTable_83D62B4, NULL, gDummySpriteAffineAnimTable, sub_80CAA14
-
- .align 2
-gSpriteAnim_83D63AC:: @ 83D63AC
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D63B4:: @ 83D63B4
- obj_image_anim_frame 4, 7
- obj_image_anim_frame 8, 7
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D63C0:: @ 83D63C0
- .4byte gSpriteAnim_83D63AC
- .4byte gSpriteAnim_83D63B4
-
- .align 2
-gLeechSeedSpriteTemplate:: @ 83D63C8
- spr_template 10006, 10006, gOamData_837DF2C, gSpriteAnimTable_83D63C0, NULL, gDummySpriteAffineAnimTable, AnimLeechSeed
-
- .align 2
-gSpriteAnim_83D63E0:: @ 83D63E0
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D63E8:: @ 83D63E8
- obj_image_anim_frame 4, 7
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D63F0:: @ 83D63F0
- .4byte gSpriteAnim_83D63E0
- .4byte gSpriteAnim_83D63E8
-
- .align 2
-gBattleAnimSpriteTemplate_83D63F8:: @ 83D63F8
- spr_template 10158, 10158, gOamData_837DF2C, gSpriteAnimTable_83D63F0, NULL, gDummySpriteAffineAnimTable, sub_80CABF8
-
- .align 2
-gSpriteAnim_83D6410:: @ 83D6410
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6418:: @ 83D6418
- obj_image_anim_frame 4, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6420:: @ 83D6420
- .4byte gSpriteAnim_83D6410
-
- .align 2
-gSpriteAnimTable_83D6424:: @ 83D6424
- .4byte gSpriteAnim_83D6418
-
- .align 2
-gBattleAnimSpriteTemplate_83D6428:: @ 83D6428
- spr_template 10159, 10159, gOamData_837DF2C, gSpriteAnimTable_83D6420, NULL, gDummySpriteAffineAnimTable, sub_80CAD54
-
- .align 2
-gBattleAnimSpriteTemplate_83D6440:: @ 83D6440
- spr_template 10159, 10159, gOamData_837DF24, gSpriteAnimTable_83D6424, NULL, gDummySpriteAffineAnimTable, sub_80CAE20
-
- .align 2
-gSpriteAnim_83D6458:: @ 83D6458
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 4, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_frame 12, 5
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 20, 5
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 12, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_frame 4, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_83D6484:: @ 83D6484
- obj_image_anim_frame 24, 5
- obj_image_anim_frame 28, 5
- obj_image_anim_frame 32, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6494:: @ 83D6494
- .4byte gSpriteAnim_83D6458
- .4byte gSpriteAnim_83D6484
-
- .align 2
-gBattleAnimSpriteTemplate_83D649C:: @ 83D649C
- spr_template 10063, 10063, gOamData_837DF2C, gSpriteAnimTable_83D6494, NULL, gDummySpriteAffineAnimTable, sub_80CAED8
-
- .align 2
-gBattleAnimSpriteTemplate_83D64B4:: @ 83D64B4
- spr_template 10063, 10063, gOamData_837DF2C, gSpriteAnimTable_83D6494, NULL, gDummySpriteAffineAnimTable, AnimMoveTwisterParticle
-
- .align 2
-gSpriteAnim_83D64CC:: @ 83D64CC
- obj_image_anim_frame 0, 3
- obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D64E0:: @ 83D64E0
- .4byte gSpriteAnim_83D64CC
-
- .align 2
-gBattleAnimSpriteTemplate_83D64E4:: @ 83D64E4
- spr_template 10160, 10160, gOamData_837DF54, gSpriteAnimTable_83D64E0, NULL, gDummySpriteAffineAnimTable, AnimTranslateLinearSingleSineWave
-
- .align 2
-gSpriteAffineAnim_83D64FC:: @ 83D64FC
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D650C:: @ 83D650C
- .4byte gSpriteAffineAnim_83D64FC
-
- .align 2
-gSwiftStarSpriteTemplate:: @ 83D6510
- spr_template 10174, 10174, gOamData_837DF94, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D650C, AnimTranslateLinearSingleSineWave
-
- .align 2
-gSpriteAnim_83D6528:: @ 83D6528
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 32, 4
- obj_image_anim_frame 64, 4
- obj_image_anim_frame 96, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D653C:: @ 83D653C
- obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 64, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 96, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6550:: @ 83D6550
- .4byte gSpriteAnim_83D6528
- .4byte gSpriteAnim_83D653C
-
- .align 2
-gSpriteAffineAnim_83D6558:: @ 83D6558
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_frame 0xFFF5, 0x0, 0, 6
- obj_rot_scal_anim_frame 0xB, 0x0, 0, 6
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6578:: @ 83D6578
- obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0
- obj_rot_scal_anim_frame 0xB, 0x0, 0, 6
- obj_rot_scal_anim_frame 0xFFF5, 0x0, 0, 6
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D6598:: @ 83D6598
- .4byte gSpriteAffineAnim_83D6558
- .4byte gSpriteAffineAnim_83D6578
-
- .align 2
-gBattleAnimSpriteTemplate_83D65A0:: @ 83D65A0
- spr_template 10186, 10186, gOamData_837DFBC, gSpriteAnimTable_83D6550, NULL, gSpriteAffineAnimTable_83D6598, sub_80CB25C
-
- .align 2
-gSpriteAffineAnim_83D65B8:: @ 83D65B8
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 0
- obj_rot_scal_anim_frame 0x30, 0x30, 0, 14
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D65D0:: @ 83D65D0
- obj_rot_scal_anim_frame 0xFFF0, 0xFFF0, 0, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D65E0:: @ 83D65E0
- .4byte gSpriteAffineAnim_83D65B8
- .4byte gSpriteAffineAnim_83D65D0
-
- .align 2
-gBattleAnimSpriteTemplate_83D65E8:: @ 83D65E8
- spr_template 10147, 10147, gOamData_837DFEC, gSpriteAnimTable_83D62D4, NULL, gSpriteAffineAnimTable_83D65E0, sub_80CB4CC
-
- .align 2
-gSpriteAnim_83D6600:: @ 83D6600
- obj_image_anim_frame 0, 7
- obj_image_anim_frame 16, 7
- obj_image_anim_frame 32, 7
- obj_image_anim_frame 48, 7
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6614:: @ 83D6614
- obj_image_anim_frame 0, 7, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 7, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 7, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 48, 7, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6628:: @ 83D6628
- obj_image_anim_frame 0, 7
- obj_image_anim_frame 16, 7
- obj_image_anim_frame 32, 7
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6638:: @ 83D6638
- obj_image_anim_frame 0, 7, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 7, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 7, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6648:: @ 83D6648
- .4byte gSpriteAnim_83D6600
- .4byte gSpriteAnim_83D6614
- .4byte gSpriteAnim_83D6628
- .4byte gSpriteAnim_83D6638
-
- .align 2
-gBattleAnimSpriteTemplate_83D6658:: @ 83D6658
- spr_template 10223, 10223, gOamData_837DF34, gSpriteAnimTable_83D6648, NULL, gDummySpriteAffineAnimTable, sub_80CB59C
-
- .align 2
-gBattleAnimSpriteTemplate_83D6670:: @ 83D6670
- spr_template 10223, 10223, gOamData_837DF34, gSpriteAnimTable_83D6648, NULL, gDummySpriteAffineAnimTable, sub_80CB620
-
- .align 2
-gSpriteAnim_83D6688:: @ 83D6688
- obj_image_anim_frame 3, 3
- obj_image_anim_frame 0, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D6694:: @ 83D6694
- .4byte gSpriteAnim_83D6688
-
- .align 2
-gBattleAnimSpriteTemplate_83D6698:: @ 83D6698
- spr_template 10147, 10147, gOamData_837DF24, gSpriteAnimTable_83D6694, NULL, gDummySpriteAffineAnimTable, sub_80CB768
-
- .align 2
-gSpriteAnim_83D66B0:: @ 83D66B0
- obj_image_anim_frame 0, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D66B8:: @ 83D66B8
- .4byte gSpriteAnim_83D66B0
-
- .align 2
-gSpriteAffineAnim_83D66BC:: @ 83D66BC
- obj_rot_scal_anim_frame 0x0, 0x0, -4, 10
- obj_rot_scal_anim_frame 0x0, 0x0, 4, 20
- obj_rot_scal_anim_frame 0x0, 0x0, -4, 10
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D66DC:: @ 83D66DC
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 2
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 4
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 4
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 4
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 4
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 2
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D6714:: @ 83D6714
- .4byte gSpriteAffineAnim_83D66BC
- .4byte gSpriteAffineAnim_83D66DC
-
- .align 2
-gBattleAnimSpriteTemplate_83D671C:: @ 83D671C
- spr_template 10224, 10224, gOamData_837DF94, gSpriteAnimTable_83D66B8, NULL, gSpriteAffineAnimTable_83D6714, sub_80CB94C
-
- .align 2
-gBattleAnimSpriteTemplate_83D6734:: @ 83D6734
- spr_template 10224, 10224, gOamData_837DF94, gSpriteAnimTable_83D66B8, NULL, gSpriteAffineAnimTable_83D6714, sub_80CBA28
-
- .align 2
-gSpriteAnim_83D674C:: @ 83D674C
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 4, 4
- obj_image_anim_frame 8, 4
- obj_image_anim_frame 12, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6760:: @ 83D6760
- .4byte gSpriteAnim_83D674C
-
- .align 2
-gBattleAnimSpriteTemplate_83D6764:: @ 83D6764
- spr_template 10195, 10195, gOamData_837DF2C, gSpriteAnimTable_83D6760, NULL, gDummySpriteAffineAnimTable, sub_80CBAA4
-
- .align 2
-gBattleAnimSpriteTemplate_83D677C:: @ 83D677C
- spr_template 10224, 10224, gOamData_837DF94, gSpriteAnimTable_83D66B8, NULL, gSpriteAffineAnimTable_83D6714, sub_80CBAE8
-
- .align 2
-gSpriteAffineAnim_83D6794:: @ 83D6794
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 3
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D67A4:: @ 83D67A4
- obj_rot_scal_anim_frame 0x0, 0xFFF6, 0, 3
- obj_rot_scal_anim_frame 0x0, 0xFFFA, 0, 3
- obj_rot_scal_anim_frame 0x0, 0xFFFE, 0, 3
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 3
- obj_rot_scal_anim_frame 0x0, 0x2, 0, 3
- obj_rot_scal_anim_frame 0x0, 0x6, 0, 3
- obj_rot_scal_anim_frame 0x0, 0xA, 0, 3
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D67E4:: @ 83D67E4
- .4byte gSpriteAffineAnim_83D6794
- .4byte gSpriteAffineAnim_83D67A4
- .4byte gSpriteAffineAnim_83D66BC
- .4byte gSpriteAffineAnim_83D66DC
-
- .align 2
-gBattleAnimSpriteTemplate_83D67F4:: @ 83D67F4
- spr_template 10224, 10224, gOamData_837DF94, gSpriteAnimTable_83D66B8, NULL, gSpriteAffineAnimTable_83D67E4, sub_80CBBF0
-
-gUnknown_083D680C:: @ 83D680C
- .byte 5, 24, 1
- .byte 0, 4, 0
- .byte 8, 16, -1
- .byte 0, 2, 0
- .byte 8, 16, 1
- .byte 0, 2, 0
- .byte 8, 16, 1
- .byte 0, 2, 0
- .byte 8, 16, 1
- .byte 0, 16, 0
- .byte 0, 0, 127
-
- .align 2
-gSpriteAnim_83D6830:: @ 83D6830
- obj_image_anim_frame 28, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6838:: @ 83D6838
- obj_image_anim_frame 32, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6840:: @ 83D6840
- obj_image_anim_frame 20, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6848:: @ 83D6848
- obj_image_anim_frame 28, 1, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6850:: @ 83D6850
- obj_image_anim_frame 16, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6858:: @ 83D6858
- obj_image_anim_frame 16, 1, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6860:: @ 83D6860
- obj_image_anim_frame 28, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6868:: @ 83D6868
- .4byte gSpriteAnim_83D6830
- .4byte gSpriteAnim_83D6838
- .4byte gSpriteAnim_83D6840
- .4byte gSpriteAnim_83D6848
- .4byte gSpriteAnim_83D6850
- .4byte gSpriteAnim_83D6858
- .4byte gSpriteAnim_83D6860
-
- .align 2
-gSpriteTemplate_83D6884:: @ 83D6884
- spr_template 10063, 10063, gOamData_837DF2C, gSpriteAnimTable_83D6868, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gSpriteAffineAnim_83D689C:: @ 83D689C
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, 4, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83D68B4:: @ 83D68B4
- .4byte gSpriteAffineAnim_83D689C
-
- .align 2
-gBattleAnimSpriteTemplate_83D68B8:: @ 83D68B8
- spr_template 10159, 10159, gOamData_837DF24, gSpriteAnimTable_83D6424, NULL, gDummySpriteAffineAnimTable, sub_80CC474
-
- .align 2
-gBattleAnimSpriteTemplate_83D68D0:: @ 83D68D0
- spr_template 10159, 10159, gOamData_837DF8C, gSpriteAnimTable_83D6420, NULL, gSpriteAffineAnimTable_83D68B4, sub_80CC474
-
- .align 2
-gSpriteAffineAnim_83D68E8:: @ 83D68E8
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, -10, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnim_83D6900:: @ 83D6900
- obj_rot_scal_anim_frame 0xC0, 0xC0, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, -12, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnim_83D6918:: @ 83D6918
- obj_rot_scal_anim_frame 0x8F, 0x8F, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, -15, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83D6930:: @ 83D6930
- .4byte gSpriteAffineAnim_83D68E8
-
- .align 2
-gSpriteAffineAnimTable_83D6934:: @ 83D6934
- .4byte gSpriteAffineAnim_83D6900
-
- .align 2
-gSpriteAffineAnimTable_83D6938:: @ 83D6938
- .4byte gSpriteAffineAnim_83D6918
-
- .align 2
-gBattleAnimSpriteTemplate_83D693C:: @ 83D693C
- spr_template 10271, 10271, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D6930, sub_80CC474
-
- .align 2
-gBattleAnimSpriteTemplate_83D6954:: @ 83D6954
- spr_template 10271, 10271, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D6934, sub_80CC474
-
- .align 2
-gBattleAnimSpriteTemplate_83D696C:: @ 83D696C
- spr_template 10271, 10271, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D6938, sub_80CC474
-
- .align 1
-gUnknown_083D6984:: @ 83D6984
- .2byte 0x1F
- .2byte 0x27F
- .2byte 0x3FF
- .2byte 0x3E0
- .2byte 0x7DC5
- .2byte 0x7D56
- .2byte 0x7EB6
-
- .align 2
-gBattleAnimSpriteTemplate_83D6994:: @ 83D6994
- spr_template 10266, 10266, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CC6CC
-
- .align 2
-gSpriteAnim_83D69AC:: @ 83D69AC
- obj_image_anim_frame 64, 3
- obj_image_anim_frame 80, 3
- obj_image_anim_frame 96, 3
- obj_image_anim_frame 112, 6
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D69C0:: @ 83D69C0
- obj_image_anim_frame 64, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 80, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 96, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 112, 6, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D69D4:: @ 83D69D4
- .4byte gSpriteAnim_83D69AC
- .4byte gSpriteAnim_83D69C0
-
- .align 2
-gBattleAnimSpriteTemplate_83D69DC:: @ 83D69DC
- spr_template 10056, 10056, gOamData_837DF34, gSpriteAnimTable_83D69D4, NULL, gDummySpriteAffineAnimTable, sub_80CC884
-
- .align 2
-gBattleAnimSpriteTemplate_83D69F4:: @ 83D69F4
- spr_template 10287, 10287, gOamData_837DF34, gSpriteAnimTable_83D69D4, NULL, gDummySpriteAffineAnimTable, sub_80CC884
-
- .align 2
-gSpriteAnim_83D6A0C:: @ 83D6A0C
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 32, 4
- obj_image_anim_frame 48, 4
- obj_image_anim_frame 64, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6A24:: @ 83D6A24
- .4byte gSpriteAnim_83D6A0C
-
- .align 2
-gSpriteTemplate_83D6A28:: @ 83D6A28
- spr_template 10021, 10021, gOamData_837DF34, gSpriteAnimTable_83D6A24, NULL, gDummySpriteAffineAnimTable, sub_80CC82C
-
- .align 2
-gSpriteTemplate_83D6A40:: @ 83D6A40
- spr_template 10022, 10022, gOamData_837DF34, gSpriteAnimTable_83D6A24, NULL, gDummySpriteAffineAnimTable, sub_80CC82C
-
- .align 2
-gSpriteAffineAnim_83D6A58:: @ 83D6A58
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6A68:: @ 83D6A68
- obj_rot_scal_anim_frame 0x100, 0x100, 32, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6A78:: @ 83D6A78
- obj_rot_scal_anim_frame 0x100, 0x100, 64, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6A88:: @ 83D6A88
- obj_rot_scal_anim_frame 0x100, 0x100, 96, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6A98:: @ 83D6A98
- obj_rot_scal_anim_frame 0x100, 0x100, -128, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6AA8:: @ 83D6AA8
- obj_rot_scal_anim_frame 0x100, 0x100, -96, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6AB8:: @ 83D6AB8
- obj_rot_scal_anim_frame 0x100, 0x100, -64, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6AC8:: @ 83D6AC8
- obj_rot_scal_anim_frame 0x100, 0x100, -32, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D6AD8:: @ 83D6AD8
- .4byte gSpriteAffineAnim_83D6A58
- .4byte gSpriteAffineAnim_83D6A68
- .4byte gSpriteAffineAnim_83D6A78
- .4byte gSpriteAffineAnim_83D6A88
- .4byte gSpriteAffineAnim_83D6A98
- .4byte gSpriteAffineAnim_83D6AA8
- .4byte gSpriteAffineAnim_83D6AB8
- .4byte gSpriteAffineAnim_83D6AC8
-
- .align 2
-gSpriteTemplate_83D6AF8:: @ 83D6AF8
- spr_template 10143, 10143, gOamData_837DF94, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D6AD8, sub_80CC8C8
-
- .align 2
-gSpriteAnim_83D6B10:: @ 83D6B10
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 32, 5
- obj_image_anim_frame 48, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6B24:: @ 83D6B24
- .4byte gSpriteAnim_83D6B10
-
- .align 2
-gCuttingSliceSpriteTemplate:: @ 83D6B28
- spr_template 10138, 10138, gOamData_837E054, gSpriteAnimTable_83D6B24, NULL, gDummySpriteAffineAnimTable, AnimCuttingSlice
-
- .align 2
-gBattleAnimSpriteTemplate_83D6B40:: @ 83D6B40
- spr_template 10138, 10138, gOamData_837E054, gSpriteAnimTable_83D6B24, NULL, gDummySpriteAffineAnimTable, sub_80CC9BC
-
- .align 2
-gSpriteAnim_83D6B58:: @ 83D6B58
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6B60:: @ 83D6B60
- obj_image_anim_frame 4, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6B68:: @ 83D6B68
- obj_image_anim_frame 8, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6B70:: @ 83D6B70
- obj_image_anim_frame 12, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6B78:: @ 83D6B78
- obj_image_anim_frame 16, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6B80:: @ 83D6B80
- obj_image_anim_frame 20, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6B88:: @ 83D6B88
- obj_image_anim_frame 0, 1, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6B90:: @ 83D6B90
- obj_image_anim_frame 4, 1, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6B98:: @ 83D6B98
- obj_image_anim_frame 8, 1, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6BA0:: @ 83D6BA0
- obj_image_anim_frame 12, 1, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6BA8:: @ 83D6BA8
- .4byte gSpriteAnim_83D6B58
- .4byte gSpriteAnim_83D6B60
- .4byte gSpriteAnim_83D6B68
- .4byte gSpriteAnim_83D6B70
- .4byte gSpriteAnim_83D6B78
- .4byte gSpriteAnim_83D6B80
- .4byte gSpriteAnim_83D6B88
- .4byte gSpriteAnim_83D6B90
- .4byte gSpriteAnim_83D6B98
- .4byte gSpriteAnim_83D6BA0
-
- .align 2
-gSpriteTemplate_83D6BD0:: @ 83D6BD0
- spr_template 10072, 10072, gOamData_837DF2C, gSpriteAnimTable_83D6BA8, NULL, gDummySpriteAffineAnimTable, sub_80CCC50
-
- .align 2
-gBattleAnimSpriteTemplate_83D6BE8:: @ 83D6BE8
- spr_template 10280, 10280, gOamData_837E05C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CCD24
-
- .align 2
-gSpriteAffineAnim_83D6C00:: @ 83D6C00
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6C10:: @ 83D6C10
- obj_rot_scal_anim_frame 0x0, 0x0, 2, 12
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 6
- obj_rot_scal_anim_frame 0x0, 0x0, -2, 24
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 6
- obj_rot_scal_anim_frame 0x0, 0x0, 2, 12
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D6C40:: @ 83D6C40
- .4byte gSpriteAffineAnim_83D6C00
- .4byte gSpriteAffineAnim_83D6C10
-
- .align 2
-gBattleAnimSpriteTemplate_83D6C48:: @ 83D6C48
- spr_template 10099, 10099, gOamData_837E0B4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D6C40, sub_80CCF04
-
- .align 2
-gSpriteAnim_83D6C60:: @ 83D6C60
- obj_image_anim_frame 0, 7
- obj_image_anim_frame 16, 7
- obj_image_anim_frame 32, 7
- obj_image_anim_frame 48, 7
- obj_image_anim_frame 64, 7
- obj_image_anim_frame 80, 7
- obj_image_anim_frame 96, 7
- obj_image_anim_frame 112, 7
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D6C84:: @ 83D6C84
- .4byte gSpriteAnim_83D6C60
-
- .align 2
-gBattleAnimSpriteTemplate_83D6C88:: @ 83D6C88
- spr_template 10049, 10049, gOamData_837DF34, gSpriteAnimTable_83D6C84, NULL, gDummySpriteAffineAnimTable, sub_80CD140
-
- .align 2
-gBattleAnimSpriteTemplate_83D6CA0:: @ 83D6CA0
- spr_template 10049, 10049, gOamData_837DF34, gSpriteAnimTable_83D6C84, NULL, gDummySpriteAffineAnimTable, sub_80CD190
-
- .align 2
-gSpriteAnim_83D6CB8:: @ 83D6CB8
- obj_image_anim_frame 0, 10
- obj_image_anim_frame 4, 10
- obj_image_anim_frame 8, 10
- obj_image_anim_frame 12, 10
- obj_image_anim_frame 16, 26
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 20, 5
- obj_image_anim_frame 24, 15
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6CDC:: @ 83D6CDC
- obj_image_anim_frame 0, 10, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 4, 10, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 8, 10, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 12, 10, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 26, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 5, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 20, 5, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 24, 15, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6D00:: @ 83D6D00
- .4byte gSpriteAnim_83D6CB8
- .4byte gSpriteAnim_83D6CDC
-
- .align 2
-gSpriteTemplate_83D6D08:: @ 83D6D08
- spr_template 10032, 10032, gOamData_837DF2C, gSpriteAnimTable_83D6D00, NULL, gDummySpriteAffineAnimTable, sub_80CD274
-
- .align 2
-gSpriteAnim_83D6D20:: @ 83D6D20
- obj_image_anim_frame 0, 40
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6D28:: @ 83D6D28
- .4byte gSpriteAnim_83D6D20
-
- .align 2
-gSpriteAffineAnim_83D6D2C:: @ 83D6D2C
- obj_rot_scal_anim_frame 0x14, 0x14, -30, 0
- obj_rot_scal_anim_frame 0x8, 0x8, 1, 24
- obj_rot_scal_anim_end
-
-@ unused
- obj_rot_scal_anim_loop 0
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 24
- obj_rot_scal_anim_loop 10
-
- .align 2
-gSpriteAffineAnim_83D6D5C:: @ 83D6D5C
- obj_rot_scal_anim_frame 0x14, 0x14, 30, 0
- obj_rot_scal_anim_frame 0x8, 0x8, -1, 24
- obj_rot_scal_anim_end
-
-@ unused
- obj_rot_scal_anim_loop 0
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 24
- obj_rot_scal_anim_loop 10
-
- .align 2
-gSpriteAffineAnimTable_83D6D8C:: @ 83D6D8C
- .4byte gSpriteAffineAnim_83D6D2C
- .4byte gSpriteAffineAnim_83D6D5C
-
- .align 2
-gBattleAnimSpriteTemplate_83D6D94:: @ 83D6D94
- spr_template 10228, 10228, gOamData_837DF94, gSpriteAnimTable_83D6D28, NULL, gSpriteAffineAnimTable_83D6D8C, sub_80CD328
-
- .align 2
-gBattleAnimSpriteTemplate_83D6DAC:: @ 83D6DAC
- spr_template 10014, 10014, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CD3E0
-
- .align 2
-gBattleAnimSpriteTemplate_83D6DC4:: @ 83D6DC4
- spr_template 10014, 10014, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CD6CC
-
-gUnknown_083D6DDC:: @ 83D6DDC
- .byte 64, 64
- .byte 0,-64
- .byte -64, 64
- .byte 32,-32
-
- .align 2
-gBattleAnimSpriteTemplate_83D6DE4:: @ 83D6DE4
- spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CD774
-
- .align 2
-gSpriteTemplate_83D6DFC:: @ 83D6DFC
- spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CD9C4
-
- .align 2
-gSpriteAnim_83D6E14:: @ 83D6E14
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 32, 4
- obj_image_anim_frame 48, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6E28:: @ 83D6E28
- obj_image_anim_frame 48, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6E30:: @ 83D6E30
- .4byte gSpriteAnim_83D6E14
- .4byte gSpriteAnim_83D6E28
-
- .align 2
-gBattleAnimSpriteTemplate_83D6E38:: @ 83D6E38
- spr_template 10183, 10183, gOamData_837DF34, gSpriteAnimTable_83D6E30, NULL, gDummySpriteAffineAnimTable, sub_80CDD74
-
- .align 2
-gBattleAnimSpriteTemplate_83D6E50:: @ 83D6E50
- spr_template 10286, 10286, gOamData_837DF34, gSpriteAnimTable_83D6E30, NULL, gDummySpriteAffineAnimTable, sub_80CDDDC
-
- .align 2
-gBattleAnimSpriteTemplate_83D6E68:: @ 83D6E68
- spr_template 10286, 10286, gOamData_837DF34, gSpriteAnimTable_83D6E30, NULL, gDummySpriteAffineAnimTable, sub_80CDE24
-
- .align 2
-gSpriteAnim_83D6E80:: @ 83D6E80
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 8, 12
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 24, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6E94:: @ 83D6E94
- .4byte gSpriteAnim_83D6E80
-
- .align 2
-gBattleAnimSpriteTemplate_EndureFlame:: @ 83D6E98
- spr_template 10184, 10184, gOamData_837DF74, gSpriteAnimTable_83D6E94, NULL, gDummySpriteAffineAnimTable, sub_80CDF0C
-
- .align 2
-gSpriteAnim_83D6EB0:: @ 83D6EB0
- obj_image_anim_frame 0, 18
- obj_image_anim_frame 0, 6
- obj_image_anim_frame 16, 18
- obj_image_anim_frame 0, 6
- obj_image_anim_frame 16, 6
- obj_image_anim_frame 32, 18
- obj_image_anim_frame 16, 6
- obj_image_anim_frame 32, 6
- obj_image_anim_frame 48, 18
- obj_image_anim_frame 32, 6
- obj_image_anim_frame 48, 6
- obj_image_anim_frame 64, 18
- obj_image_anim_frame 48, 6
- obj_image_anim_frame 64, 54
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6EEC:: @ 83D6EEC
- .4byte gSpriteAnim_83D6EB0
-
- .align 2
-gBattleAnimSpriteTemplate_83D6EF0:: @ 83D6EF0
- spr_template 10185, 10185, gOamData_837DF34, gSpriteAnimTable_83D6EEC, NULL, gDummySpriteAffineAnimTable, sub_80CDFB0
-
- .align 2
-gBattleAnimSpriteTemplate_83D6F08:: @ 83D6F08
- spr_template 10017, 10017, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, TranslateAnimSpriteToTargetMonLocation
-
- .align 2
-gSpriteAnim_83D6F20:: @ 83D6F20
- obj_image_anim_frame 0, 3
- obj_image_anim_frame 16, 3
- obj_image_anim_frame 32, 3
- obj_image_anim_frame 48, 3
- obj_image_anim_frame 64, 3
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6F38:: @ 83D6F38
- .4byte gSpriteAnim_83D6F20
-
- .align 2
-gBattleAnimSpriteTemplate_83D6F3C:: @ 83D6F3C
- spr_template 10030, 10030, gOamData_837DF34, gSpriteAnimTable_83D6F38, NULL, gDummySpriteAffineAnimTable, sub_80793C4
-
- .align 2
-gSpriteAnim_83D6F54:: @ 83D6F54
- obj_image_anim_frame 3, 5
- obj_image_anim_frame 2, 5
- obj_image_anim_frame 1, 5
- obj_image_anim_frame 0, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6F68:: @ 83D6F68
- .4byte gSpriteAnim_83D6F54
-
- .align 2
-gSpriteAffineAnim_83D6F6C:: @ 83D6F6C
- obj_rot_scal_anim_frame 0x200, 0x200, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D6F7C:: @ 83D6F7C
- .4byte gSpriteAffineAnim_83D6F6C
-
- .align 2
-gBattleAnimSpriteTemplate_83D6F80:: @ 83D6F80
- spr_template 10018, 10018, gOamData_837E104, gSpriteAnimTable_83D6F68, NULL, gSpriteAffineAnimTable_83D6F7C, sub_80CE09C
-
- .align 2
-gSpriteAnim_83D6F98:: @ 83D6F98
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 1, 5
- obj_image_anim_frame 2, 5
- obj_image_anim_frame 3, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6FAC:: @ 83D6FAC
- .4byte gSpriteAnim_83D6F98
-
- .align 2
-gBattleAnimSpriteTemplate_83D6FB0:: @ 83D6FB0
- spr_template 10018, 10018, gOamData_837E104, gSpriteAnimTable_83D6FAC, NULL, gSpriteAffineAnimTable_83D6F7C, sub_80CE17C
-
- .align 2
-gBattleAnimSpriteTemplate_83D6FC8:: @ 83D6FC8
- spr_template 10194, 10194, gOamData_837E05C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CE30C
-
- .align 2
-gSpriteAnim_83D6FE0:: @ 83D6FE0
- obj_image_anim_frame 0, 8
- obj_image_anim_frame 4, 8
- obj_image_anim_frame 8, 8
- obj_image_anim_frame 12, 8
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D6FF4:: @ 83D6FF4
- .4byte gSpriteAnim_83D6FE0
-
- .align 2
-gBattleAnimSpriteTemplate_83D6FF8:: @ 83D6FF8
- spr_template 10195, 10195, gOamData_837DF2C, gSpriteAnimTable_83D6FF4, NULL, gDummySpriteAffineAnimTable, sub_80CE36C
-
- .align 2
-gSpriteAnim_83D7010:: @ 83D7010
- obj_image_anim_frame 0, 2
- obj_image_anim_frame 16, 2
- obj_image_anim_frame 32, 2
- obj_image_anim_frame 48, 3
- obj_image_anim_frame 64, 5
- obj_image_anim_frame 80, 3
- obj_image_anim_frame 96, 2
- obj_image_anim_frame 0, 2
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D7034:: @ 83D7034
- .4byte gSpriteAnim_83D7010
-
- .align 2
-gBattleAnimSpriteTemplate_83D7038:: @ 83D7038
- spr_template 10031, 10031, gOamData_837DF34, gSpriteAnimTable_83D7034, NULL, gDummySpriteAffineAnimTable, sub_80793C4
-
- .align 2
-gBattleAnimSpriteTemplate_83D7050:: @ 83D7050
- spr_template 10020, 10020, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CE670
-
- .align 2
-gSpriteAnim_83D7068:: @ 83D7068
- obj_image_anim_frame 0, 2
- obj_image_anim_frame 16, 2
- obj_image_anim_frame 32, 2
- obj_image_anim_frame 48, 2
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D707C:: @ 83D707C
- .4byte gSpriteAnim_83D7068
-
- .align 2
-gBattleAnimSpriteTemplate_83D7080:: @ 83D7080
- spr_template 10192, 10192, gOamData_837DF34, gSpriteAnimTable_83D707C, NULL, gDummySpriteAffineAnimTable, sub_80CEA04
-
- .align 2
-gSpriteAnim_83D7098:: @ 83D7098
- obj_image_anim_frame 0, 10
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D70A0:: @ 83D70A0
- obj_image_anim_frame 4, 10
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D70A8:: @ 83D70A8
- obj_image_anim_frame 8, 41
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D70B0:: @ 83D70B0
- obj_image_anim_frame 12, 10
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D70B8:: @ 83D70B8
- obj_image_anim_frame 16, 10
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D70C0:: @ 83D70C0
- obj_image_anim_frame 20, 10
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D70C8:: @ 83D70C8
- obj_image_anim_frame 0, 10, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D70D0:: @ 83D70D0
- obj_image_anim_frame 4, 10, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D70D8:: @ 83D70D8
- .4byte gSpriteAnim_83D7098
- .4byte gSpriteAnim_83D70A0
- .4byte gSpriteAnim_83D70A8
- .4byte gSpriteAnim_83D70B0
- .4byte gSpriteAnim_83D70B8
- .4byte gSpriteAnim_83D70C0
- .4byte gSpriteAnim_83D70C8
- .4byte gSpriteAnim_83D70D0
-
- .align 2
-gSpriteAffineAnim_83D70F8:: @ 83D70F8
- obj_rot_scal_anim_frame 0xC, 0xC, 0, 16
- obj_rot_scal_anim_frame 0xFFF4, 0xFFF4, 0, 16
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D7110:: @ 83D7110
- .4byte gSpriteAffineAnim_83D70F8
-
- .align 2
-gBattleAnimSpriteTemplate_83D7114:: @ 83D7114
- spr_template 10072, 10072, gOamData_837DFEC, gSpriteAnimTable_83D70D8, NULL, gSpriteAffineAnimTable_83D7110, sub_80CEB0C
-
- .align 2
-gUnknown_083D712C:: @ 83D712C
- .2byte 10072,0x7FFF,0x735F,0x6ADF,0x623F,0x59BF
- .2byte 10097,0x7FFF,0x6BF9,0x57F4,0x43EF,0x33EA
- .2byte 10185,0x7FFF,0x63FF,0x47FF,0x2BFF,0x0FFF
- .2byte 10175,0x7FFF,0x7F9A,0x7F55,0x7F10,0x7ECC
-
- .align 2
-gBattleAnimSpriteTemplate_83D715C:: @ 83D715C
- spr_template 10072, 10072, gOamData_837DFEC, gSpriteAnimTable_83D70D8, NULL, gSpriteAffineAnimTable_83D7110, sub_80CECE8
-
- .align 2
-gBattleAnimSpriteTemplate_83D7174:: @ 83D7174
- spr_template 10193, 10193, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CEDF0
-
- .align 2
-gSpriteAffineAnim_83D718C:: @ 83D718C
- obj_rot_scal_anim_frame 0xA0, 0xA0, 0, 0
- obj_rot_scal_anim_frame 0x4, 0x4, 0, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83D71A4:: @ 83D71A4
- .4byte gSpriteAffineAnim_83D718C
-
- .align 2
-gBattleAnimSpriteTemplate_83D71A8:: @ 83D71A8
- spr_template 10072, 10072, gOamData_837DFEC, gSpriteAnimTable_83D70D8, NULL, gSpriteAffineAnimTable_83D71A4, sub_80CEE60
-
- .align 2
-gSpriteAnim_83D71C0:: @ 83D71C0
- obj_image_anim_frame 0, 2, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 2, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 2, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 48, 2, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D71D4:: @ 83D71D4
- obj_image_anim_frame 48, 2, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 2, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 2, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 0, 2, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D71E8:: @ 83D71E8
- obj_image_anim_frame 0, 2
- obj_image_anim_frame 16, 2
- obj_image_anim_frame 32, 2
- obj_image_anim_frame 48, 2
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D71FC:: @ 83D71FC
- obj_image_anim_frame 48, 2
- obj_image_anim_frame 32, 2
- obj_image_anim_frame 16, 2
- obj_image_anim_frame 0, 2
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D7210:: @ 83D7210
- .4byte gSpriteAnim_83D71C0
- .4byte gSpriteAnim_83D71E8
- .4byte gSpriteAnim_83D71D4
- .4byte gSpriteAnim_83D71FC
-
- .align 2
-gBattleAnimSpriteTemplate_83D7220:: @ 83D7220
- spr_template 10209, 10209, gOamData_837DF34, gSpriteAnimTable_83D7210, NULL, gDummySpriteAffineAnimTable, sub_80CEF9C
-
- .align 2
-gSpriteAffineAnim_83D7238:: @ 83D7238
- obj_rot_scal_anim_frame 0x10, 0x10, 0, 0
- obj_rot_scal_anim_frame 0x1E, 0x1E, 0, 8
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D7250:: @ 83D7250
- obj_rot_scal_anim_frame 0x0, 0x0, 4, 11
- obj_rot_scal_anim_frame 0x0, 0x0, -4, 11
- obj_rot_scal_anim_loop 2
- obj_rot_scal_anim_frame 0xFFE2, 0xFFE2, 0, 8
- obj_rot_scal_anim_end
-
- .align 2
-@ unused
- obj_rot_scal_anim_frame 16, 16, 0, 0
- obj_rot_scal_anim_frame 30, 30, 0, 8
- obj_rot_scal_anim_frame 0, 0, 0, 16
- obj_rot_scal_anim_loop 0
- obj_rot_scal_anim_frame 0, 0, 4, 11
- obj_rot_scal_anim_frame 0, 0, -4, 11
- obj_rot_scal_anim_loop 2
- obj_rot_scal_anim_frame -30, -30, 0, 8
- obj_rot_scal_anim_end 0
-
- .align 2
-gSpriteAffineAnimTable_83D72C0:: @ 83D72C0
- .4byte gSpriteAffineAnim_83D7238
- .4byte gSpriteAffineAnim_83D7250
-
- .align 2
-gBattleAnimSpriteTemplate_83D72C8:: @ 83D72C8
- spr_template 10064, 10064, gOamData_837DFF4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D72C0, sub_80CF040
-
- .align 2
-gBattleAnimSpriteTemplate_83D72E0:: @ 83D72E0
- spr_template 10064, 10064, gOamData_837DF94, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D72C0, sub_80CF0BC
-
- .align 2
-gSpriteAnim_83D72F8:: @ 83D72F8
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D7300:: @ 83D7300
- obj_image_anim_frame 0, 1, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D7308:: @ 83D7308
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 32, 4
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 32, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D7328:: @ 83D7328
- obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D7348:: @ 83D7348
- .4byte gSpriteAnim_83D72F8
- .4byte gSpriteAnim_83D7300
- .4byte gSpriteAnim_83D7308
- .4byte gSpriteAnim_83D7328
-
- .align 2
-gBattleAnimSpriteTemplate_83D7358:: @ 83D7358
- spr_template 10214, 10214, gOamData_837DF34, gSpriteAnimTable_83D7348, NULL, gDummySpriteAffineAnimTable, sub_80CF1C8
-
- .align 2
-gSpriteTemplate_83D7370:: @ 83D7370
- spr_template 10064, 10064, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CF280
-
- .align 2
-gSpriteAnim_83D7388:: @ 83D7388
- obj_image_anim_frame 4, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D7390:: @ 83D7390
- .4byte gSpriteAnim_83D7388
-
- .align 2
-gSpriteTemplate_83D7394:: @ 83D7394
- spr_template 10072, 10072, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CF2D0
-
- .align 2
-gSpriteTemplate_83D73AC:: @ 83D73AC
- spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CF3C4
-
- .align 2
-gSpriteTemplate_83D73C4:: @ 83D73C4
- spr_template 10145, 10145, gOamData_837E0BC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DB1B0, sub_80CF458
-
- .align 2
-gSpriteAnim_83D73DC:: @ 83D73DC
- obj_image_anim_frame 0, 9
- obj_image_anim_frame 16, 3
- obj_image_anim_frame 32, 3
- obj_image_anim_frame 48, 3
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D73F0:: @ 83D73F0
- .4byte gSpriteAnim_83D73DC
-
- .align 2
-gSpriteAffineAnim_83D73F4:: @ 83D73F4
- obj_rot_scal_anim_frame 0x50, 0x50, 0, 0
- obj_rot_scal_anim_frame 0x9, 0x9, 0, 18
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D740C:: @ 83D740C
- .4byte gSpriteAffineAnim_83D73F4
-
- .align 2
-gSpriteTemplate_83D7410:: @ 83D7410
- spr_template 10007, 10007, gOamData_837DF94, gSpriteAnimTable_83D73F0, NULL, gSpriteAffineAnimTable_83D740C, sub_80793C4
-
- .align 2
-gSpriteAnim_83D7428:: @ 83D7428
- obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 8, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 24, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 40, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 48, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_loop 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D744C:: @ 83D744C
- .4byte gSpriteAnim_83D7428
-
- .align 2
-gBattleAnimSpriteTemplate_83D7450:: @ 83D7450
- spr_template 10075, 10075, gOamData_837DF54, gSpriteAnimTable_83D744C, NULL, gDummySpriteAffineAnimTable, sub_80CF610
-
- .align 2
-gSpriteAffineAnim_83D7468:: @ 83D7468
- obj_rot_scal_anim_frame 0x10, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x14, 0x0, 0, 12
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 32
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D7488:: @ 83D7488
- .4byte gSpriteAffineAnim_83D7468
-
- .align 2
-gBattleAnimSpriteTemplate_83D748C:: @ 83D748C
- spr_template 10005, 10005, gOamData_837E0FC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7488, sub_80CF690
-
- .align 2
-gSonicBoomSpriteTemplate:: @ 83D74A4
- spr_template 10003, 10003, gOamData_837E134, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, AnimSonicBoomProjectile
-
- .align 2
-gSpriteTemplate_83D74BC:: @ 83D74BC
- spr_template 10003, 10003, gOamData_837E074, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CF8B8
-
- .align 2
-gSpriteAffineAnim_83D74D4:: @ 83D74D4
- obj_rot_scal_anim_frame 0x20, 0x20, 0, 0
- obj_rot_scal_anim_frame 0x7, 0x7, 0, -56
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D74EC:: @ 83D74EC
- obj_rot_scal_anim_frame 0x5, 0x5, 0, 10
- obj_rot_scal_anim_frame 0xFFF6, 0xFFF6, 0, 10
- obj_rot_scal_anim_frame 0xA, 0xA, 0, 10
- obj_rot_scal_anim_frame 0xFFF6, 0xFFF6, 0, 10
- obj_rot_scal_anim_frame 0xA, 0xA, 0, 10
- obj_rot_scal_anim_frame 0xFFF6, 0xFFF6, 0, 10
- obj_rot_scal_anim_frame 0xA, 0xA, 0, 10
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D752C:: @ 83D752C
- .4byte gSpriteAffineAnim_83D74D4
-
- .align 2
-gSpriteAffineAnimTable_83D7530:: @ 83D7530
- .4byte gSpriteAffineAnim_83D74EC
-
- .align 2
-gSupersonicWaveSpriteTemplate:: @ 83D7534
- spr_template 10163, 10163, gOamData_837E034, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D752C, TranslateAnimSpriteToTargetMonLocation
-
- .align 2
-gScreechWaveSpriteTemplate:: @ 83D754C
- spr_template 10164, 10164, gOamData_837E034, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D752C, TranslateAnimSpriteToTargetMonLocation
-
- .align 2
-gBattleAnimSpriteTemplate_83D7564:: @ 83D7564
- spr_template 10260, 10260, gOamData_837E03C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D752C, TranslateAnimSpriteToTargetMonLocation
-
- .align 2
-gBattleAnimSpriteTemplate_83D757C:: @ 83D757C
- spr_template 10288, 10288, gOamData_837E034, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7530, sub_80D4CA4
-
- .align 2
-gBattleAnimSpriteTemplate_83D7594:: @ 83D7594
- spr_template 10175, 10175, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80794A8
-
- .align 2
-gSpriteTemplate_83D75AC:: @ 83D75AC
- spr_template 10178, 10178, gOamData_837E05C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CFDFC
-
- .align 2
-gSpriteAnim_83D75C4:: @ 83D75C4
- obj_image_anim_frame 8, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D75CC:: @ 83D75CC
- .4byte gSpriteAnim_83D75C4
-
- .align 2
-gSpriteAffineAnim_83D75D0:: @ 83D75D0
- obj_rot_scal_anim_frame 0x0, 0x0, 10, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D75E0:: @ 83D75E0
- .4byte gSpriteAffineAnim_83D75D0
-
- .align 2
-gBattleAnimSpriteTemplate_83D75E4:: @ 83D75E4
- spr_template 10100, 10100, gOamData_837DF8C, gSpriteAnimTable_83D75CC, NULL, gDummySpriteAffineAnimTable, sub_80CFE9C
-
- .align 2
-gBattleAnimSpriteTemplate_83D75FC:: @ 83D75FC
- spr_template 10100, 10100, gOamData_837DF8C, gSpriteAnimTable_83D75CC, NULL, gSpriteAffineAnimTable_83D75E0, sub_80CFF50
-
- .align 2
-gSpriteAffineAnim_83D7614:: @ 83D7614
- obj_rot_scal_anim_frame 0x0, 0x0, 20, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D7624:: @ 83D7624
- .4byte gSpriteAffineAnim_83D7614
-
- .align 2
-gBattleAnimSpriteTemplate_83D7628:: @ 83D7628
- spr_template 10006, 10006, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7624, sub_80CFFD8
-
- .align 2
-gSpriteAffineAnim_83D7640:: @ 83D7640
- obj_rot_scal_anim_frame 0x10, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x4, 0x0, 0, 40
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D7658:: @ 83D7658
- .4byte gSpriteAffineAnim_83D7640
-
- .align 2
-gBattleAnimSpriteTemplate_83D765C:: @ 83D765C
- spr_template 10009, 10009, gOamData_837DFDC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7658, sub_80D0118
-
- .align 2
-gSpriteAnim_83D7674:: @ 83D7674
- obj_image_anim_frame 0, 3
- obj_image_anim_frame 16, 3
- obj_image_anim_frame 32, 20
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D7684:: @ 83D7684
- obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 3, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 20, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D7694:: @ 83D7694
- .4byte gSpriteAnim_83D7674
- .4byte gSpriteAnim_83D7684
-
- .align 2
-gBattleAnimSpriteTemplate_83D769C:: @ 83D769C
- spr_template 10138, 10138, gOamData_837E054, gSpriteAnimTable_83D7694, NULL, gDummySpriteAffineAnimTable, sub_80D0178
-
- .align 2
-gSpriteAnim_83D76B4:: @ 83D76B4
- obj_image_anim_frame 0, 2
- obj_image_anim_frame 16, 2
- obj_image_anim_frame 32, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D76C4:: @ 83D76C4
- obj_image_anim_frame 0, 2, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 2, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 1, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D76D4:: @ 83D76D4
- .4byte gSpriteAnim_83D76B4
- .4byte gSpriteAnim_83D76C4
-
- .align 2
-gBattleAnimSpriteTemplate_83D76DC:: @ 83D76DC
- spr_template 10138, 10138, gOamData_837E054, gSpriteAnimTable_83D76D4, NULL, gDummySpriteAffineAnimTable, sub_80D0228
-
- .align 2
-gUnknown_083D76F4:: @ 83D76F4
- obj_rot_scal_anim_frame -6, 4, 0, 8
- obj_rot_scal_anim_frame 10, -10, 0, 8
- obj_rot_scal_anim_frame -4, 6, 0, 8
- obj_rot_scal_anim_end 0
-
- .align 2
-gUnknown_083D7714:: @ 83D7714
- obj_rot_scal_anim_frame -4, -5, 0, 12
- obj_rot_scal_anim_frame 0, 0, 0, 24
- obj_rot_scal_anim_frame 4, 5, 0, 12
- obj_rot_scal_anim_end 0
-
- .align 2
-gSpriteAnim_83D7734:: @ 83D7734
- obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 4, 40, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 12, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D7748:: @ 83D7748
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 4, 40
- obj_image_anim_frame 8, 4
- obj_image_anim_frame 12, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D775C:: @ 83D775C
- .4byte gSpriteAnim_83D7734
- .4byte gSpriteAnim_83D7748
-
- .align 2
-gBattleAnimSpriteTemplate_83D7764:: @ 83D7764
- spr_template 10086, 10086, gOamData_837DF2C, gSpriteAnimTable_83D775C, NULL, gDummySpriteAffineAnimTable, sub_80D0930
-
- .align 2
-gSpriteAffineAnim_83D777C:: @ 83D777C
- obj_rot_scal_anim_frame 0xB, 0xB, 0, 8
- obj_rot_scal_anim_frame 0xFFF5, 0xFFF5, 0, 8
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D7794:: @ 83D7794
- .4byte gSpriteAffineAnim_83D777C
-
- .align 2
-gBattleAnimSpriteTemplate_83D7798:: @ 83D7798
- spr_template 10087, 10087, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7794, sub_80D09C0
-
- .align 2
-gUnknown_083D77B0:: @ 83D77B0
- obj_rot_scal_anim_frame -10, 9, 0, 7
- obj_rot_scal_anim_frame 20, -20, 0, 7
- obj_rot_scal_anim_frame -20, 20, 0, 7
- obj_rot_scal_anim_frame 10, -9, 0, 7
- obj_rot_scal_anim_loop 2
- obj_rot_scal_anim_end 0
-
- .align 2
-gBattleAnimSpriteTemplate_83D77E0:: @ 83D77E0
- spr_template 10002, 10002, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D0E30
-
- .align 2
-gBattleAnimSpriteTemplate_83D77F8:: @ 83D77F8
- spr_template 10197, 10197, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8079534
-
- .align 2
-gSpriteAnim_83D7810:: @ 83D7810
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 32, 5
- obj_image_anim_frame 48, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D7824:: @ 83D7824
- .4byte gSpriteAnim_83D7810
-
- .align 2
-gBattleAnimSpriteTemplate_83D7828:: @ 83D7828
- spr_template 10198, 10198, gOamData_837DF34, gSpriteAnimTable_83D7824, NULL, gDummySpriteAffineAnimTable, sub_80793C4
-
- .align 2
-gSpriteAffineAnim_83D7840:: @ 83D7840
- obj_rot_scal_anim_frame 0x0, 0x0, -8, 2
- obj_rot_scal_anim_frame 0x0, 0x0, 8, 4
- obj_rot_scal_anim_frame 0x0, 0x0, -8, 2
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnim_83D7860:: @ 83D7860
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D7870:: @ 83D7870
- obj_rot_scal_anim_frame 0xFFF8, 0x4, 0, 8
- obj_rot_scal_anim_loop 0
- obj_rot_scal_anim_frame 0x10, 0xFFF8, 0, 8
- obj_rot_scal_anim_frame 0xFFF0, 0x8, 0, 8
- obj_rot_scal_anim_loop 1
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 15
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D78B0:: @ 83D78B0
- .4byte gSpriteAffineAnim_83D7840
- .4byte gSpriteAffineAnim_83D7860
- .4byte gSpriteAffineAnim_83D7870
-
- .align 2
-gBattleAnimSpriteTemplate_83D78BC:: @ 83D78BC
- spr_template 10202, 10202, gOamData_837E114, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D78B0, sub_80D1368
-
- .align 2
-gSpriteAffineAnim_83D78D4:: @ 83D78D4
- obj_rot_scal_anim_frame 0x10, 0x10, 0, 0
- obj_rot_scal_anim_frame 0x10, 0x10, 0, 30
- obj_rot_scal_anim_end 1
-
- .align 2
-gSpriteAffineAnim_83D78EC:: @ 83D78EC
- obj_rot_scal_anim_frame 0x10, 0x10, 0, 0
- obj_rot_scal_anim_frame 0x20, 0x20, 0, 15
- obj_rot_scal_anim_end 1
-
- .align 2
-gSpriteAffineAnim_83D7904:: @ 83D7904
- obj_rot_scal_anim_frame 0x10, 0x10, 0, 0
- obj_rot_scal_anim_frame 0xB, 0xB, 0, 45
- obj_rot_scal_anim_end 1
-
- .align 2
-gSpriteAffineAnimTable_83D791C:: @ 83D791C
- .4byte gSpriteAffineAnim_83D78D4
- .4byte gSpriteAffineAnim_83D78EC
-
- .align 2
-gSpriteAffineAnimTable_83D7924:: @ 83D7924
- .4byte gSpriteAffineAnim_83D7904
-
- .align 2
-gBattleAnimSpriteTemplate_83D7928:: @ 83D7928
- spr_template 10203, 10203, gOamData_837DFFC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D791C, sub_80793C4
-
- .align 2
-gSpriteAffineAnim_83D7940:: @ 83D7940
- obj_rot_scal_anim_frame 0x200, 0x200, 0, 0
- obj_rot_scal_anim_frame 0xFFF0, 0xFFF0, 0, 30
- obj_rot_scal_anim_end 1
-
- .align 2
-gSpriteAffineAnimTable_83D7958:: @ 83D7958
- .4byte gSpriteAffineAnim_83D7940
-
- .align 2
-gBattleAnimSpriteTemplate_83D795C:: @ 83D795C
- spr_template 10203, 10203, gOamData_837E11C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7958, sub_80793C4
-
- .align 2
-gBattleAnimSpriteTemplate_83D7974:: @ 83D7974
- spr_template 10203, 10203, gOamData_837E11C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D791C, sub_80D0FD8
-
- .align 2
-gBattleAnimSpriteTemplate_83D798C:: @ 83D798C
- spr_template 10203, 10203, gOamData_837E11C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7924, sub_80D10B8
-
- .align 2
-gBattleAnimSpriteTemplate_83D79A4:: @ 83D79A4
- spr_template 10203, 10203, gOamData_837E11C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D791C, sub_80D1318
-
- .align 2
-gUnknown_083D79BC:: @ 83D79BC
- obj_rot_scal_anim_frame 96, -13, 0, 8
- obj_rot_scal_anim_end 0
-
- .align 2
-gSpriteAnim_83D79CC:: @ 83D79CC
- obj_image_anim_frame 0, 3
- obj_image_anim_frame 4, 3
- obj_image_anim_frame 8, 3
- obj_image_anim_frame 4, 3
- obj_image_anim_frame 0, 3
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D79E4:: @ 83D79E4
- .4byte gSpriteAnim_83D79CC
-
- .align 2
-gSpriteTemplate_83D79E8:: @ 83D79E8
- spr_template 10207, 10207, gOamData_837DF2C, gSpriteAnimTable_83D79E4, NULL, gDummySpriteAffineAnimTable, sub_80D1A70
-
-gUnknown_083D7A00:: @ 83D7A00
- .byte 30, 28
- .byte -20, 24
- .byte 16, 26
- .byte -10, 28
-
- .align 2
-gSpriteAnim_83D7A08:: @ 83D7A08
- obj_image_anim_frame 0, 6
- obj_image_anim_frame 16, 6
- obj_image_anim_frame 32, 15
- obj_image_anim_frame 16, 6
- obj_image_anim_frame 0, 6
- obj_image_anim_frame 16, 6, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 15, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 6, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 0, 6
- obj_image_anim_frame 16, 6
- obj_image_anim_frame 32, 15
- obj_image_anim_frame 16, 6
- obj_image_anim_frame 0, 6
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D7A40:: @ 83D7A40
- .4byte gSpriteAnim_83D7A08
-
- .align 2
-gBattleAnimSpriteTemplate_83D7A44:: @ 83D7A44
- spr_template 10205, 10205, gOamData_837DF34, gSpriteAnimTable_83D7A40, NULL, gDummySpriteAffineAnimTable, sub_80793C4
-
- .align 2
-gUnknown_083D7A5C:: @ 83D7A5C
- .2byte 10206
- .2byte 9999
- .2byte 9998
- .2byte 9997
- .2byte 9996
- .2byte 0
-
- .align 2
-gBattleAnimSpriteTemplate_83D7A68:: @ 83D7A68
- spr_template 10206, 10206, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D1C08
-
- .align 2
-gBattleAnimSpriteTemplate_83D7A80:: @ 83D7A80
- spr_template 10210, 10210, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D1C80
-
- .align 2
-gUnknown_083D7A98:: @ 83D7A98
- obj_rot_scal_anim_frame 0x000A, 0xFFF3, 0x00, 0x0A
- obj_rot_scal_anim_frame 0xFFF6, 0x000D, 0x00, 0x0A
- obj_rot_scal_anim_end
-
- .align 2
-gBattleAnimSpriteTemplate_83D7AB0:: @ 83D7AB0
- spr_template 10216, 10216, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D1F58
-
- .align 2
-gBattleAnimSpriteTemplate_83D7AC8:: @ 83D7AC8
- spr_template 10216, 10216, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D1FDC
-
- .align 2
-gBattleAnimSpriteTemplate_83D7AE0:: @ 83D7AE0
- spr_template 10216, 10216, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D2064
-
- .align 2
-gSpriteAffineAnim_83D7AF8:: @ 83D7AF8
- obj_rot_scal_anim_frame 0x80, 0x80, 0, 0
- obj_rot_scal_anim_frame 0x8, 0x8, 0, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83D7B10:: @ 83D7B10
- .4byte gSpriteAffineAnim_83D7AF8
-
- .align 2
-gHiddenPowerOrbSpriteTemplate:: @ 83D7B14
- spr_template 10217, 10217, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7B10, AnimOrbitFast
-
- .align 2
-gHiddenPowerOrbScatterSpriteTemplate:: @ 83D7B2C
- spr_template 10217, 10217, gOamData_837DFEC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7B10, AnimOrbitScatter
-
- .align 2
-gSpriteAffineAnim_83D7B44:: @ 83D7B44
- obj_rot_scal_anim_frame 0x80, 0x80, 0, 0
- obj_rot_scal_anim_frame 0x8, 0x8, 0, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83D7B5C:: @ 83D7B5C
- .4byte gSpriteAffineAnim_83D7B44
-
- .align 2
-gBattleAnimSpriteTemplate_83D7B60:: @ 83D7B60
- spr_template 10237, 10237, gOamData_837DFE4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7B5C, sub_80D28AC
-
- .align 2
-gSpriteAnim_83D7B78:: @ 83D7B78
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 4, 4
- obj_image_anim_frame 8, 4
- obj_image_anim_frame 4, 4
- obj_image_anim_frame 0, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D7B90:: @ 83D7B90
- .4byte gSpriteAnim_83D7B78
-
- .align 2
-gBattleAnimSpriteTemplate_83D7B94:: @ 83D7B94
- spr_template 10218, 10218, gOamData_837DF2C, gSpriteAnimTable_83D7B90, NULL, gDummySpriteAffineAnimTable, sub_80D2920
-
- .align 2
-gSpriteAnim_83D7BAC:: @ 83D7BAC
- obj_image_anim_frame 0, 24
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D7BB4:: @ 83D7BB4
- .4byte gSpriteAnim_83D7BAC
-
- .align 2
-gBattleAnimSpriteTemplate_83D7BB8:: @ 83D7BB8
- spr_template 10220, 10220, gOamData_837DF34, gSpriteAnimTable_83D7BB4, NULL, gDummySpriteAffineAnimTable, sub_80D2938
-
- .align 2
-gBattleAnimSpriteTemplate_83D7BD0:: @ 83D7BD0
- spr_template 10219, 10219, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D2A38
-
- .align 2
-gSpriteAnim_83D7BE8:: @ 83D7BE8
- obj_image_anim_frame 0, 3
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_83D7BF0:: @ 83D7BF0
- obj_image_anim_frame 16, 3
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D7BF8:: @ 83D7BF8
- .4byte gSpriteAnim_83D7BE8
- .4byte gSpriteAnim_83D7BF0
-
- .align 2
-gBattleAnimSpriteTemplate_83D7C00:: @ 83D7C00
- spr_template 10221, 10221, gOamData_837DF34, gSpriteAnimTable_83D7BF8, NULL, gDummySpriteAffineAnimTable, sub_80D2ABC
-
- .align 2
-gSpriteAnim_83D7C18:: @ 83D7C18
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 32, 4
- obj_image_anim_frame 48, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D7C2C:: @ 83D7C2C
- obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 48, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D7C40:: @ 83D7C40
- .4byte gSpriteAnim_83D7C18
- .4byte gSpriteAnim_83D7C2C
-
- .align 2
-gBattleAnimSpriteTemplate_83D7C48:: @ 83D7C48
- spr_template 10222, 10222, gOamData_837DF34, gSpriteAnimTable_83D7C40, NULL, gDummySpriteAffineAnimTable, sub_80D2BE8
-
- .align 2
-gSpriteAnim_83D7C60:: @ 83D7C60
- obj_image_anim_frame 0, 8
- obj_image_anim_frame 16, 8
- obj_image_anim_frame 32, 8
- obj_image_anim_frame 16, 8
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D7C74:: @ 83D7C74
- obj_image_anim_frame 16, 8, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 8, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 8, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 0, 8, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D7C88:: @ 83D7C88
- .4byte gSpriteAnim_83D7C60
- .4byte gSpriteAnim_83D7C74
-
- .align 2
-gBattleAnimSpriteTemplate_83D7C90:: @ 83D7C90
- spr_template 10215, 10215, gOamData_837DF34, gSpriteAnimTable_83D7C88, NULL, gDummySpriteAffineAnimTable, sub_80D2C38
-
- .align 2
-gUnknown_083D7CA8:: @ 83D7CA8
- obj_rot_scal_anim_frame -12, 8, 0, 4
- obj_rot_scal_anim_frame 20, -20, 0, 4
- obj_rot_scal_anim_frame -8, 12, 0, 4
- obj_rot_scal_anim_end 0
-
- .align 2
-gBattleAnimSpriteTemplate_83D7CC8:: @ 83D7CC8
- spr_template 10225, 10225, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D2D68
-
- .align 2
-gSpriteAffineAnim_83D7CE0:: @ 83D7CE0
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 5
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D7CF0:: @ 83D7CF0
- obj_rot_scal_anim_frame 0x0, 0x0, -8, 16
- obj_rot_scal_anim_end 1
-
- .align 2
-gSpriteAffineAnim_83D7D00:: @ 83D7D00
- obj_rot_scal_anim_frame 0x0, 0x0, 8, 16
- obj_rot_scal_anim_end 1
-
- .align 2
-gSpriteAffineAnimTable_83D7D10:: @ 83D7D10
- .4byte gSpriteAffineAnim_83D7CE0
- .4byte gSpriteAffineAnim_83D7CF0
- .4byte gSpriteAffineAnim_83D7D00
-
- .align 2
-gBattleAnimSpriteTemplate_83D7D1C:: @ 83D7D1C
- spr_template 10206, 10206, gOamData_837DF8C, gSpriteAnimTable_83D70D8, NULL, gSpriteAffineAnimTable_83D7D10, sub_80D2EC8
-
- .align 2
-gBattleAnimSpriteTemplate_83D7D34:: @ 83D7D34
- spr_template 10206, 10206, gOamData_837DF8C, gSpriteAnimTable_83D70D8, NULL, gSpriteAffineAnimTable_83D7D10, sub_80D2E68
-
- .align 2
-gSpriteAffineAnim_83D7D4C:: @ 83D7D4C
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D7D5C:: @ 83D7D5C
- obj_rot_scal_anim_frame 0x200, 0x100, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D7D6C:: @ 83D7D6C
- .4byte gSpriteAffineAnim_83D7D4C
- .4byte gSpriteAffineAnim_83D7D5C
-
- .align 2
-gBattleAnimSpriteTemplate_83D7D74:: @ 83D7D74
- spr_template 10244, 10244, gOamData_837E13C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7D6C, sub_80D3014
-
- .align 2
- .incbin "graphics/unknown/unknown_3D7D8C.4bpp"
- .incbin "graphics/unknown/unknown_3D810C.bin"
-
- .align 2
-gSpriteAnim_83D910C:: @ 83D910C
- obj_image_anim_frame 0, 2
- obj_image_anim_frame 8, 2
- obj_image_anim_frame 16, 2
- obj_image_anim_frame 24, 6
- obj_image_anim_frame 32, 2
- obj_image_anim_frame 40, 2
- obj_image_anim_frame 48, 2
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D912C:: @ 83D912C
- .4byte gSpriteAnim_83D910C
-
- .align 2
-gSpriteTemplate_83D9130:: @ 83D9130
- spr_template 10115, 10115, gOamData_837DF74, gSpriteAnimTable_83D912C, NULL, gDummySpriteAffineAnimTable, SetAnimRaindropCallback
-
- .align 2
-gSpriteAffineAnim_83D9148:: @ 83D9148
- obj_rot_scal_anim_frame 0xFFFB, 0xFFFB, 0, 10
- obj_rot_scal_anim_frame 0x5, 0x5, 0, 10
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D9160:: @ 83D9160
- .4byte gSpriteAffineAnim_83D9148
-
- .align 2
-gSpriteAnim_83D9164:: @ 83D9164
- obj_image_anim_frame 0, 1
- obj_image_anim_frame 4, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D9174:: @ 83D9174
- .4byte gSpriteAnim_83D9164
-
- .align 2
-gBattleAnimSpriteTemplate_83D9178:: @ 83D9178
- spr_template 10146, 10146, gOamData_837E0AC, gSpriteAnimTable_83D9174, NULL, gSpriteAffineAnimTable_83D9160, sub_80D31C8
-
- .align 2
-gSpriteAnim_83D9190:: @ 83D9190
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9198:: @ 83D9198
- obj_image_anim_frame 4, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D91A0:: @ 83D91A0
- .4byte gSpriteAnim_83D9190
- .4byte gSpriteAnim_83D9198
-
- .align 2
-gSpriteAffineAnim_83D91A8:: @ 83D91A8
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 1
- obj_rot_scal_anim_frame 0x60, 0x60, 0, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D91C0:: @ 83D91C0
- .4byte gSpriteAffineAnim_83D91A8
-
- .align 2
-gBattleAnimSpriteTemplate_83D91C4:: @ 83D91C4
- spr_template 10140, 10140, gOamData_837E024, gSpriteAnimTable_83D91A0, NULL, gSpriteAffineAnimTable_83D91C0, sub_80D33B4
-
- .align 2
-gSpriteAnim_83D91DC:: @ 83D91DC
- obj_image_anim_frame 0, 1
- obj_image_anim_frame 4, 1
- obj_image_anim_frame 8, 1
- obj_image_anim_frame 12, 1
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D91F0:: @ 83D91F0
- .4byte gSpriteAnim_83D91DC
-
- .align 2
-gBattleAnimSpriteTemplate_83D91F4:: @ 83D91F4
- spr_template 10149, 10149, gOamData_837E04C, gSpriteAnimTable_83D91F0, NULL, gDummySpriteAffineAnimTable, sub_80D3554
-
- .align 2
-gBattleAnimSpriteTemplate_83D920C:: @ 83D920C
- spr_template 10259, 10259, gOamData_837E04C, gSpriteAnimTable_83D91F0, NULL, gDummySpriteAffineAnimTable, sub_80D3554
-
- .align 2
-gBattleAnimSpriteTemplate_83D9224:: @ 83D9224
- spr_template 10264, 10264, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D3554
-
- .align 2
-gBattleAnimSpriteTemplate_83D923C:: @ 83D923C
- spr_template 10265, 10265, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D3554
-
- .align 2
-gSpriteAnim_83D9254:: @ 83D9254
- obj_image_anim_frame 16, 2
- obj_image_anim_frame 32, 2
- obj_image_anim_frame 48, 2
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D9264:: @ 83D9264
- .4byte gSpriteAnim_83D9254
-
- .align 2
-gBattleAnimSpriteTemplate_83D9268:: @ 83D9268
- spr_template 10029, 10029, gOamData_837DF34, gSpriteAnimTable_83D9264, NULL, gDummySpriteAffineAnimTable, sub_80D3554
-
- .align 2
-gBattleAnimSpriteTemplate_83D9280:: @ 83D9280
- spr_template 10165, 10165, gOamData_837E034, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D752C, sub_80D3554
-
- .align 2
-gSpriteAffineAnim_83D9298:: @ 83D9298
- obj_rot_scal_anim_frame 0x3, 0x3, 10, 50
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 10
- obj_rot_scal_anim_frame 0xFFEC, 0xFFEC, -10, 20
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D92B8:: @ 83D92B8
- obj_rot_scal_anim_frame 0x150, 0x150, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D92C8:: @ 83D92C8
- .4byte gSpriteAffineAnim_83D9298
-
- .align 2
-gSpriteAffineAnimTable_83D92CC:: @ 83D92CC
- .4byte gSpriteAffineAnim_83D92B8
-
- .align 2
-gBattleAnimSpriteTemplate_83D92D0:: @ 83D92D0
- spr_template 10149, 10149, gOamData_837E10C, gSpriteAnimTable_83D91F0, NULL, gSpriteAffineAnimTable_83D92C8, sub_80D3698
-
- .align 2
-gBattleAnimSpriteTemplate_83D92E8:: @ 83D92E8
- spr_template 10149, 10149, gOamData_837E10C, gSpriteAnimTable_83D91F0, NULL, gSpriteAffineAnimTable_83D92CC, sub_80D3728
-
- .align 2
-gSpriteAnim_83D9300:: @ 83D9300
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9308:: @ 83D9308
- obj_image_anim_frame 4, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D9310:: @ 83D9310
- .4byte gSpriteAnim_83D9300
-
- .align 2
-gSpriteAnimTable_83D9314:: @ 83D9314
- .4byte gSpriteAnim_83D9308
-
- .align 2
-gBattleAnimSpriteTemplate_83D9318:: @ 83D9318
- spr_template 10155, 10155, gOamData_837E04C, gSpriteAnimTable_83D9310, NULL, gDummySpriteAffineAnimTable, sub_80794A8
-
- .align 2
-gBattleAnimSpriteTemplate_83D9330:: @ 83D9330
- spr_template 10155, 10155, gOamData_837E10C, gSpriteAnimTable_83D9314, NULL, gSpriteAffineAnimTable_83DA318, sub_80D37FC
-
- .align 2
-gBattleAnimSpriteTemplate_83D9348:: @ 83D9348
- spr_template 10141, 10141, gOamData_837DF24, gSpriteAnimTable_83D9BC8, NULL, gDummySpriteAffineAnimTable, sub_80D3838
-
- .align 2
-gBattleAnimSpriteTemplate_83D9360:: @ 83D9360
- spr_template 10155, 10155, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D4044
-
- .align 2
-gSpriteTemplate_83D9378:: @ 83D9378
- spr_template 10268, 10268, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D452C
-
- .align 2
-gSpriteAnim_83D9390:: @ 83D9390
- obj_image_anim_frame 8, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9398:: @ 83D9398
- obj_image_anim_frame 9, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D93A0:: @ 83D93A0
- obj_image_anim_frame 4, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D93A8:: @ 83D93A8
- .4byte gSpriteAnim_83D9390
- .4byte gSpriteAnim_83D9398
-
- .align 2
-gSpriteAnimTable_83D93B0:: @ 83D93B0
- .4byte gSpriteAnim_83D93A0
-
- .align 2
-gSpriteAffineAnim_83D93B4:: @ 83D93B4
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_frame 0xFFF6, 0xFFF6, 0, 15
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D93CC:: @ 83D93CC
- obj_rot_scal_anim_frame 0xE0, 0xE0, 0, 0
- obj_rot_scal_anim_frame 0xFFF8, 0xFFF8, 0, 15
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D93E4:: @ 83D93E4
- obj_rot_scal_anim_frame 0x150, 0x150, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 15
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D93FC:: @ 83D93FC
- .4byte gSpriteAffineAnim_83D93B4
- .4byte gSpriteAffineAnim_83D93CC
-
- .align 2
-gSpriteAffineAnimTable_83D9404:: @ 83D9404
- .4byte gSpriteAffineAnim_83D93E4
-
- .align 2
-gBattleAnimSpriteTemplate_83D9408:: @ 83D9408
- spr_template 10155, 10155, gOamData_837DF24, gSpriteAnimTable_83D93A8, NULL, gDummySpriteAffineAnimTable, sub_80D4BF0
-
- .align 2
-gSpriteTemplate_83D9420:: @ 83D9420
- spr_template 10155, 10155, gOamData_837DF84, gSpriteAnimTable_83D93A8, NULL, gSpriteAffineAnimTable_83D93FC, sub_80D4C64
-
- .align 2
-gBattleAnimSpriteTemplate_83D9438:: @ 83D9438
- spr_template 10155, 10155, gOamData_837DF8C, gSpriteAnimTable_83D93B0, NULL, gSpriteAffineAnimTable_83D9404, sub_807A9BC
-
- .align 2
-gSpriteAnim_83D9450:: @ 83D9450
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 32, 4
- obj_image_anim_frame 48, 4
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_83D9460:: @ 83D9460
- obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 48, 4, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D9470:: @ 83D9470
- .4byte gSpriteAnim_83D9450
- .4byte gSpriteAnim_83D9460
-
- .align 2
-gBattleAnimSpriteTemplate_83D9478:: @ 83D9478
- spr_template 10029, 10029, gOamData_837DF34, gSpriteAnimTable_83D9470, NULL, gDummySpriteAffineAnimTable, sub_80D4ED8
-
- .align 2
-gBattleAnimSpriteTemplate_83D9490:: @ 83D9490
- spr_template 10029, 10029, gOamData_837DF34, gSpriteAnimTable_83D9470, NULL, gDummySpriteAffineAnimTable, sub_80D4F18
-
- .align 2
-gSpriteAnim_83D94A8:: @ 83D94A8
- obj_image_anim_frame 0, 3
- obj_image_anim_frame 16, 3
- obj_image_anim_frame 32, 3
- obj_image_anim_frame 48, 3
- obj_image_anim_frame 64, 3
- obj_image_anim_frame 80, 3
- obj_image_anim_frame 96, 3
- obj_image_anim_frame 112, 3
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D94CC:: @ 83D94CC
- .4byte gSpriteAnim_83D94A8
-
- .align 2
-gSpriteAnim_83D94D0:: @ 83D94D0
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 32, 5
- obj_image_anim_frame 48, 5
- obj_image_anim_frame 64, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D94E8:: @ 83D94E8
- .4byte gSpriteAnim_83D94D0
-
- .align 2
-gSpriteAffineAnim_83D94EC:: @ 83D94EC
- obj_rot_scal_anim_frame 0x32, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x20, 0x0, 0, 7
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D9504:: @ 83D9504
- .4byte gSpriteAffineAnim_83D94EC
-
- .align 2
-gBattleAnimSpriteTemplate_83D9508:: @ 83D9508
- spr_template 10033, 10033, gOamData_837DF94, gSpriteAnimTable_83D94CC, NULL, gSpriteAffineAnimTable_83D9504, sub_80D4FCC
-
- .align 2
-gBattleAnimSpriteTemplate_83D9520:: @ 83D9520
- spr_template 10033, 10033, gOamData_837DF34, gSpriteAnimTable_83D94CC, NULL, gDummySpriteAffineAnimTable, sub_80D4FCC
-
- .align 2
-gBattleAnimSpriteTemplate_83D9538:: @ 83D9538
- spr_template 10035, 10035, gOamData_837DF34, gSpriteAnimTable_83D94E8, NULL, gDummySpriteAffineAnimTable, sub_80D4F5C
-
- .align 2
-gSpriteTemplate_83D9550:: @ 83D9550
- spr_template 10029, 10029, gOamData_837DF34, gSpriteAnimTable_83D94E8, NULL, gDummySpriteAffineAnimTable, sub_80D4F5C
-
- .align 2
-gSpriteAnim_83D9568:: @ 83D9568
- obj_image_anim_frame 16, 6
- obj_image_anim_frame 32, 6
- obj_image_anim_frame 48, 6
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D9578:: @ 83D9578
- .4byte gSpriteAnim_83D9568
-
- .align 2
-gSpriteTemplate_83D957C:: @ 83D957C
- spr_template 10029, 10029, gOamData_837DF34, gSpriteAnimTable_83D9578, NULL, gDummySpriteAffineAnimTable, sub_80D5074
-
- .align 2
-gSpriteAffineAnim_83D9594:: @ 83D9594
- obj_rot_scal_anim_frame 0x50, 0x50, 0, 0
- obj_rot_scal_anim_frame 0x2, 0x2, 10, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83D95AC:: @ 83D95AC
- .4byte gSpriteAffineAnim_83D9594
-
- .align 2
-gBattleAnimSpriteTemplate_83D95B0:: @ 83D95B0
- spr_template 10157, 10157, gOamData_837E0B4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D95AC, sub_80D517C
-
- .align 2
-gSpriteAnim_83D95C8:: @ 83D95C8
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 32, 4
- obj_image_anim_frame 48, 4
- obj_image_anim_frame 64, 4
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D95E0:: @ 83D95E0
- .4byte gSpriteAnim_83D95C8
-
- .align 2
-gEmberSpriteTemplate:: @ 83D95E4
- spr_template 10029, 10029, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, TranslateAnimSpriteToTargetMonLocation
-
- .align 2
-gEmberFlareSpriteTemplate:: @ 83D95FC
- spr_template 10029, 10029, gOamData_837DF34, gSpriteAnimTable_83D95E0, NULL, gDummySpriteAffineAnimTable, AnimEmberFlare
-
- .align 2
-gBattleAnimSpriteTemplate_83D9614:: @ 83D9614
- spr_template 10029, 10029, gOamData_837DF34, gSpriteAnimTable_83D95E0, NULL, gDummySpriteAffineAnimTable, sub_80D5210
-
- .align 2
-gFireRingSpriteTemplate:: @ 83D962C
- spr_template 10029, 10029, gOamData_837DF34, gSpriteAnimTable_83D95E0, NULL, gDummySpriteAffineAnimTable, AnimFireRing
-
- .align 2
-gSpriteAnim_83D9644:: @ 83D9644
- obj_image_anim_frame 32, 6
- obj_image_anim_frame 48, 6
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D9650:: @ 83D9650
- .4byte gSpriteAnim_83D9644
-
- .align 2
-gSpriteAffineAnim_83D9654:: @ 83D9654
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D9664:: @ 83D9664
- obj_rot_scal_anim_frame 0xA0, 0xA0, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D9674:: @ 83D9674
- .4byte gSpriteAffineAnim_83D9654
- .4byte gSpriteAffineAnim_83D9664
-
- .align 2
-gFireCrossSpriteTemplate:: @ 83D967C
- spr_template 10029, 10029, gOamData_837DF34, gSpriteAnimTable_83D9650, NULL, gDummySpriteAffineAnimTable, AnimFireCross
-
- .align 2
-gBattleAnimSpriteTemplate_83D9694:: @ 83D9694
- spr_template 10029, 10029, gOamData_837DF34, gSpriteAnimTable_83D95E0, NULL, gDummySpriteAffineAnimTable, sub_80D53B4
-
- .align 2
-gBattleAnimSpriteTemplate_83D96AC:: @ 83D96AC
- spr_template 10029, 10029, gOamData_837DF34, gSpriteAnimTable_83D95E0, NULL, gDummySpriteAffineAnimTable, sub_807A9BC
-
- .align 2
-gSpriteTemplate_83D96C4:: @ 83D96C4
- spr_template 10201, 10201, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D58FC
-
- .align 1
-gHeatedRockCoords:: @ 83D96DC
- .2byte -2, -5
- .2byte -1, -1
- .2byte 3, -6
- .2byte 4, -2
- .2byte 2, -8
- .2byte -5, -5
- .2byte 4, -7
-
- .align 2
-gBattleAnimSpriteTemplate_83D96F8:: @ 83D96F8
- spr_template 10201, 10201, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D5A20
-
- .align 2
-gSpriteAnim_83D9710:: @ 83D9710
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 4, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_frame 12, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_83D9724:: @ 83D9724
- obj_image_anim_frame 16, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D972C:: @ 83D972C
- obj_image_anim_frame 20, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9734:: @ 83D9734
- obj_image_anim_frame 20, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D973C:: @ 83D973C
- .4byte gSpriteAnim_83D9710
- .4byte gSpriteAnim_83D9724
- .4byte gSpriteAnim_83D972C
- .4byte gSpriteAnim_83D9734
-
- .align 2
-gBattleAnimSpriteTemplate_83D974C:: @ 83D974C
- spr_template 10231, 10231, gOamData_837DF2C, gSpriteAnimTable_83D973C, NULL, gDummySpriteAffineAnimTable, sub_80D5B0C
-
- .align 2
-gSpriteAnim_83D9764:: @ 83D9764
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 32, 5
- obj_image_anim_frame 48, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D9778:: @ 83D9778
- .4byte gSpriteAnim_83D9764
-
- .align 2
-gBattleAnimSpriteTemplate_83D977C:: @ 83D977C
- spr_template 10232, 10232, gOamData_837DF34, gSpriteAnimTable_83D9778, NULL, gDummySpriteAffineAnimTable, sub_80D5CC0
-
- .align 2
-gUnknown_083D9794:: @ 83D9794
- .byte -1, -1, 0, 1, 1, 0, 0, -1, -1, 1, 1, 0, 0, -1, 0, 1
-
-gUnknown_083D97A4:: @ 83D97A4
- .byte -1, 0, 1, 0, -1, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, 1
-
- .align 2
-gSpriteAnim_83D97B4:: @ 83D97B4
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 32, 8
- obj_image_anim_frame 48, 5
- obj_image_anim_frame 64, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D97CC:: @ 83D97CC
- .4byte gSpriteAnim_83D97B4
-
- .align 2
-gBattleAnimSpriteTemplate_83D97D0:: @ 83D97D0
- spr_template 10037, 10037, gOamData_837DF34, gSpriteAnimTable_83D97CC, NULL, gDummySpriteAffineAnimTable, sub_80D61C8
-
- .align 2
-gSpriteAffineAnim_83D97E8:: @ 83D97E8
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 20
- obj_rot_scal_anim_frame 0x0, 0x0, -16, 60
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D9808:: @ 83D9808
- .4byte gSpriteAffineAnim_83D97E8
-
- .align 2
-gSpriteTemplate_83D980C:: @ 83D980C
- spr_template 10143, 10143, gOamData_837DF94, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D9808, sub_80D6234
-
- .align 2
-gSpriteAnim_83D9824:: @ 83D9824
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 32, 5
- obj_image_anim_frame 48, 5
- obj_image_anim_frame 64, 5
- obj_image_anim_frame 80, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D9840:: @ 83D9840
- .4byte gSpriteAnim_83D9824
-
- .align 2
-gSpriteTemplate_83D9844:: @ 83D9844
- spr_template 10079, 10079, gOamData_837DF34, gSpriteAnimTable_83D9840, NULL, gDummySpriteAffineAnimTable, sub_80D6294
-
- .align 2
-gBattleAnimSpriteTemplate_83D985C:: @ 83D985C
- spr_template 10011, 10011, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D6328
-
- .align 2
-gBattleAnimSpriteTemplate_83D9874:: @ 83D9874
- spr_template 10171, 10171, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, TranslateAnimSpriteToTargetMonLocation
-
- .align 2
-gSpriteAffineAnim_83D988C:: @ 83D988C
- obj_rot_scal_anim_frame 0x0, 0x0, 20, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D989C:: @ 83D989C
- .4byte gSpriteAffineAnim_83D988C
-
- .align 2
-gBattleAnimSpriteTemplate_83D98A0:: @ 83D98A0
- spr_template 10011, 10011, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D989C, sub_80D648C
-
- .align 2
-gSpriteAnim_83D98B8:: @ 83D98B8
- obj_image_anim_frame 0, 6
- obj_image_anim_frame 16, 6
- obj_image_anim_frame 32, 6
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D98C8:: @ 83D98C8
- .4byte gSpriteAnim_83D98B8
-
- .align 2
-gSpriteAffineAnim_83D98CC:: @ 83D98CC
- obj_rot_scal_anim_frame 0xE8, 0xE8, 0, 0
- obj_rot_scal_anim_frame 0xFFF8, 0xFFF8, 0, 10
- obj_rot_scal_anim_frame 0x8, 0x8, 0, 10
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83D98EC:: @ 83D98EC
- .4byte gSpriteAffineAnim_83D98CC
-
- .align 2
-gBattleAnimSpriteTemplate_83D98F0:: @ 83D98F0
- spr_template 10282, 10282, gOamData_837DF94, gSpriteAnimTable_83D98C8, NULL, gSpriteAffineAnimTable_83D98EC, sub_80D65DC
-
- .align 2
-gBattleAnimSpriteTemplate_83D9908:: @ 83D9908
- spr_template 10011, 10011, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D989C, sub_80D6658
-
- .align 2
-gElectricitySpriteTemplate:: @ 83D9920
- spr_template 10011, 10011, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D679C
-
- .align 2
-gSpriteTemplate_83D9938:: @ 83D9938
- spr_template 10001, 10001, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D6A1C
-
- .align 2
-gBattleAnimSpriteTemplate_83D9950:: @ 83D9950
- spr_template 10173, 10173, gOamData_837DF54, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D6A6C
-
- .align 2
-gUnknown_083D9968:: @ 83D9968
- .byte 58, -60
- .byte -56, -36
- .byte 8, -56
- .byte -16, 56
- .byte 58, -10
- .byte -58, 10
- .byte 48, -18
- .byte -8, 56
- .byte 16, -56
- .byte -58, -42
- .byte 58, 30
- .byte -48, 40
- .byte 12, -48
- .byte 48, -12
- .byte -56, 18
- .byte 48, 48
-
- .align 2
-gSpriteAnim_83D9988:: @ 83D9988
- obj_image_anim_frame 3, 1
- obj_image_anim_frame 2, 1
- obj_image_anim_frame 1, 1
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D999C:: @ 83D999C
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 1, 5
- obj_image_anim_frame 2, 5
- obj_image_anim_frame 3, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D99B0:: @ 83D99B0
- .4byte gSpriteAnim_83D9988
- .4byte gSpriteAnim_83D999C
-
- .align 2
-gSpriteTemplate_83D99B8:: @ 83D99B8
- spr_template 10211, 10211, gOamData_837DF24, gSpriteAnimTable_83D99B0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gSpriteAffineAnim_83D99D0:: @ 83D99D0
- obj_rot_scal_anim_frame 0x10, 0x10, 0, 0
- obj_rot_scal_anim_frame 0x4, 0x4, 0, 60
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_loop 0
- obj_rot_scal_anim_frame 0xFFFC, 0xFFFC, 0, 5
- obj_rot_scal_anim_frame 0x4, 0x4, 0, 5
- obj_rot_scal_anim_loop 10
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D9A10:: @ 83D9A10
- obj_rot_scal_anim_frame 0x10, 0x10, 0, 0
- obj_rot_scal_anim_frame 0x8, 0x8, 0, 30
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_frame 0xFFFC, 0xFFFC, 0, 5
- obj_rot_scal_anim_frame 0x4, 0x4, 0, 5
- obj_rot_scal_anim_jump 3
-
- .align 2
-gSpriteAffineAnim_83D9A40:: @ 83D9A40
- obj_rot_scal_anim_frame 0x10, 0x10, 0, 0
- obj_rot_scal_anim_frame 0x8, 0x8, 0, 30
- obj_rot_scal_anim_frame 0xFFF8, 0xFFF8, 0, 30
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D9A60:: @ 83D9A60
- .4byte gSpriteAffineAnim_83D99D0
- .4byte gSpriteAffineAnim_83D9A10
- .4byte gSpriteAffineAnim_83D9A40
-
- .align 2
-gBattleAnimSpriteTemplate_83D9A6C:: @ 83D9A6C
- spr_template 10212, 10212, gOamData_837E0BC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D9A60, sub_80D6D18
-
- .align 2
-gSpriteAnim_83D9A84:: @ 83D9A84
- obj_image_anim_frame 0, 3
- obj_image_anim_frame 16, 3
- obj_image_anim_frame 32, 3
- obj_image_anim_frame 48, 3
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D9A98:: @ 83D9A98
- .4byte gSpriteAnim_83D9A84
-
- .align 2
-gBattleAnimSpriteTemplate_83D9A9C:: @ 83D9A9C
- spr_template 10213, 10213, gOamData_837DF34, gSpriteAnimTable_83D9A98, NULL, gDummySpriteAffineAnimTable, sub_80D6D70
-
- .align 2
-gBattleAnimSpriteTemplate_83D9AB4:: @ 83D9AB4
- spr_template 10212, 10212, gOamData_837E0BC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D9A60, sub_80D6DD8
-
- .align 2
-gSpriteAnim_83D9ACC:: @ 83D9ACC
- obj_image_anim_frame 0, 3
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9AD4:: @ 83D9AD4
- obj_image_anim_frame 2, 3
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9ADC:: @ 83D9ADC
- obj_image_anim_frame 4, 3
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9AE4:: @ 83D9AE4
- obj_image_anim_frame 6, 3
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D9AEC:: @ 83D9AEC
- .4byte gSpriteAnim_83D9ACC
- .4byte gSpriteAnim_83D9AD4
- .4byte gSpriteAnim_83D9ADC
- .4byte gSpriteAnim_83D9AE4
-
- .align 2
-gSpriteAffineAnim_83D9AFC:: @ 83D9AFC
- obj_rot_scal_anim_frame 0x100, 0x100, 64, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D9B0C:: @ 83D9B0C
- .4byte gSpriteAffineAnim_83D9AFC
-
- .align 2
-gSpriteTemplate_83D9B10:: @ 83D9B10
- spr_template 10001, 10001, gOamData_837E024, gSpriteAnimTable_83D9AEC, NULL, gSpriteAffineAnimTable_83D9B0C, sub_80D7230
-
- .align 2
-gBattleAnimSpriteTemplate_83D9B28:: @ 83D9B28
- spr_template 10212, 10212, gOamData_837E0BC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D9A60, sub_80D727C
-
- .align 2
-gSpriteTemplate_83D9B40:: @ 83D9B40
- spr_template 10001, 10001, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D755C
-
- .align 2
-gSpriteAnim_83D9B58:: @ 83D9B58
- obj_image_anim_frame 0, 5, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 1, 5, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D9B64:: @ 83D9B64
- .4byte gSpriteAnim_83D9B58
-
- .align 2
-gSpriteTemplate_83D9B68:: @ 83D9B68
- spr_template 10141, 10141, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D7704
-
- .align 2
-gSpriteAnim_83D9B80:: @ 83D9B80
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9B88:: @ 83D9B88
- obj_image_anim_frame 4, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9B90:: @ 83D9B90
- obj_image_anim_frame 6, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9B98:: @ 83D9B98
- obj_image_anim_frame 7, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9BA0:: @ 83D9BA0
- obj_image_anim_frame 8, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9BA8:: @ 83D9BA8
- obj_image_anim_frame 12, 6
- obj_image_anim_frame 13, 6
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D9BB4:: @ 83D9BB4
- .4byte gSpriteAnim_83D9B80
-
- .align 2
-gSpriteAnimTable_83D9BB8:: @ 83D9BB8
- .4byte gSpriteAnim_83D9B88
-
- .align 2
-gSpriteAnimTable_83D9BBC:: @ 83D9BBC
- .4byte gSpriteAnim_83D9B90
-
- .align 2
-gSpriteAnimTable_83D9BC0:: @ 83D9BC0
- .4byte gSpriteAnim_83D9B98
-
- .align 2
-gSpriteAnimTable_83D9BC4:: @ 83D9BC4
- .4byte gSpriteAnim_83D9BA0
-
- .align 2
-gSpriteAnimTable_83D9BC8:: @ 83D9BC8
- .4byte gSpriteAnim_83D9BA8
-
- .align 2
-gSpriteAffineAnim_83D9BCC:: @ 83D9BCC
- obj_rot_scal_anim_frame 0x0, 0x0, 40, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D9BDC:: @ 83D9BDC
- .4byte gSpriteAffineAnim_83D9BCC
-
- .align 2
-gBattleAnimSpriteTemplate_83D9BE0:: @ 83D9BE0
- spr_template 10141, 10141, gOamData_837E144, gSpriteAnimTable_83D9BB8, NULL, gSpriteAffineAnimTable_83D9BDC, sub_80D78EC
-
- .align 2
-gBattleAnimSpriteTemplate_83D9BF8:: @ 83D9BF8
- spr_template 10141, 10141, gOamData_837E044, gSpriteAnimTable_83D9BBC, NULL, gDummySpriteAffineAnimTable, sub_80D78EC
-
- .align 2
-gSpriteAffineAnim_83D9C10:: @ 83D9C10
- obj_rot_scal_anim_frame 0x0, 0x0, 10, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D9C20:: @ 83D9C20
- .4byte gSpriteAffineAnim_83D9C10
-
- .align 2
-gBattleAnimSpriteTemplate_83D9C24:: @ 83D9C24
- spr_template 10141, 10141, gOamData_837E0E4, gSpriteAnimTable_83D9BB8, NULL, gSpriteAffineAnimTable_83D9C20, sub_80D792C
-
- .align 2
-gBattleAnimSpriteTemplate_83D9C3C:: @ 83D9C3C
- spr_template 10141, 10141, gOamData_837E044, gSpriteAnimTable_83D9BBC, NULL, gDummySpriteAffineAnimTable, sub_80D792C
-
- .align 2
-gSpriteAffineAnim_83D9C54:: @ 83D9C54
- obj_rot_scal_anim_frame 0xCE, 0xCE, 0, 0
- obj_rot_scal_anim_frame 0x5, 0x5, 0, 10
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 6
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D9C74:: @ 83D9C74
- .4byte gSpriteAffineAnim_83D9C54
-
- .align 2
-gBattleAnimSpriteTemplate_83D9C78:: @ 83D9C78
- spr_template 10141, 10141, gOamData_837E0E4, gSpriteAnimTable_83D9BB8, NULL, gSpriteAffineAnimTable_83D9C74, sub_80D79B4
-
- .align 2
-gBattleAnimSpriteTemplate_83D9C90:: @ 83D9C90
- spr_template 10141, 10141, gOamData_837E0A4, gSpriteAnimTable_83D9BBC, NULL, gSpriteAffineAnimTable_83D9C74, sub_80D79B4
-
- .align 2
-gBattleAnimSpriteTemplate_83D9CA8:: @ 83D9CA8
- spr_template 10141, 10141, gOamData_837DF24, gSpriteAnimTable_83D9BC0, NULL, gDummySpriteAffineAnimTable, sub_80D7A64
-
- .align 2
-gBattleAnimSpriteTemplate_83D9CC0:: @ 83D9CC0
- spr_template 10141, 10141, gOamData_837DF2C, gSpriteAnimTable_83D9BC4, NULL, gDummySpriteAffineAnimTable, sub_80D7CD4
-
- .align 2
-gBattleAnimSpriteTemplate_83D9CD8:: @ 83D9CD8
- spr_template 10141, 10141, gOamData_837DF24, gSpriteAnimTable_83D9BC0, NULL, gDummySpriteAffineAnimTable, sub_80D7CD4
-
- .align 2
-gSpriteAnim_83D9CF0:: @ 83D9CF0
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 2, 5
- obj_image_anim_frame 4, 5
- obj_image_anim_frame 6, 5
- obj_image_anim_frame 4, 5
- obj_image_anim_frame 2, 5
- obj_image_anim_frame 0, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D9D10:: @ 83D9D10
- .4byte gSpriteAnim_83D9CF0
-
- .align 2
-gBattleAnimSpriteTemplate_83D9D14:: @ 83D9D14
- spr_template 10142, 10142, gOamData_837E084, gSpriteAnimTable_83D9D10, NULL, gDummySpriteAffineAnimTable, sub_80D7E88
-
- .align 2
-gSpriteAnim_83D9D2C:: @ 83D9D2C
- obj_image_anim_frame 0, 8
- obj_image_anim_frame 8, 8
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D9D38:: @ 83D9D38
- .4byte gSpriteAnim_83D9D2C
-
- .align 2
-gBattleAnimSpriteTemplate_83D9D3C:: @ 83D9D3C
- spr_template 10144, 10144, gOamData_837E074, gSpriteAnimTable_83D9D38, NULL, gDummySpriteAffineAnimTable, sub_80D7F10
-
- .align 2
-gBattleAnimSpriteTemplate_83D9D54:: @ 83D9D54
- spr_template 10172, 10172, gOamData_837E074, gSpriteAnimTable_83D9D38, NULL, gDummySpriteAffineAnimTable, sub_80D7F10
-
- .align 2
-gUnknown_083D9D6C:: @ 83D9D6C
- .byte 0, 1, 2, 2, 2, 2, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 8, 9
-
- .align 2
-gBattleAnimSpriteTemplate_83D9D80:: @ 83D9D80
- spr_template 10155, 10155, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D83E0
-
- .align 2
-gUnknown_083D9D98:: @ 83D9D98
- .byte 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5
-
- .align 2
-gBattleAnimSpriteTemplate_83D9DAC:: @ 83D9DAC
- spr_template 10172, 10172, gOamData_837E074, gSpriteAnimTable_83D9D38, NULL, gDummySpriteAffineAnimTable, sub_80D8700
-
-@ bitfield array
- .align 2
-gUnknown_083D9DC4:: @ 83D9DC4
- .4byte 0x2001E064
- .4byte 0x0001E055
- .4byte 0x1011E0F2
- .4byte 0x1021E042
- .4byte 0x0031E0B6
- .4byte 0x2001E03C
- .4byte 0x0011E0D6
- .4byte 0x1001E071
- .4byte 0x1031E0D2
- .4byte 0x0021E026
-
- .align 2
-gSpriteAffineAnim_83D9DEC:: @ 83D9DEC
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D9DFC:: @ 83D9DFC
- obj_rot_scal_anim_frame 0xF0, 0xF0, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D9E0C:: @ 83D9E0C
- obj_rot_scal_anim_frame 0xE0, 0xE0, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D9E1C:: @ 83D9E1C
- obj_rot_scal_anim_frame 0x150, 0x150, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D9E2C:: @ 83D9E2C
- .4byte gSpriteAffineAnim_83D9DEC
- .4byte gSpriteAffineAnim_83D9DFC
- .4byte gSpriteAffineAnim_83D9E0C
-
- .align 2
-gSpriteAffineAnimTable_83D9E38:: @ 83D9E38
- .4byte gSpriteAffineAnim_83D9E1C
-
- .align 2
-gSpriteTemplate_83D9E3C:: @ 83D9E3C
- spr_template 10263, 10263, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D9E2C, sub_80D8D1C
-
- .align 2
-gBattleAnimSpriteTemplate_83D9E54:: @ 83D9E54
- spr_template 10263, 10263, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D9E38, sub_807A9BC
-
- .align 2
-gSpriteAnim_83D9E6C:: @ 83D9E6C
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9E74:: @ 83D9E74
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 32, 4
- obj_image_anim_frame 48, 4
- obj_image_anim_frame 64, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D9E88:: @ 83D9E88
- .4byte gSpriteAnim_83D9E6C
- .4byte gSpriteAnim_83D9E74
-
- .align 2
-gSpriteAffineAnim_83D9E90:: @ 83D9E90
- obj_rot_scal_anim_frame 0xE0, 0xE0, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D9EA0:: @ 83D9EA0
- obj_rot_scal_anim_frame 0x118, 0x118, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D9EB0:: @ 83D9EB0
- obj_rot_scal_anim_frame 0x150, 0x150, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D9EC0:: @ 83D9EC0
- obj_rot_scal_anim_frame 0x180, 0x180, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D9ED0:: @ 83D9ED0
- obj_rot_scal_anim_frame 0x1C0, 0x1C0, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D9EE0:: @ 83D9EE0
- .4byte gSpriteAffineAnim_83D9E90
- .4byte gSpriteAffineAnim_83D9EA0
- .4byte gSpriteAffineAnim_83D9EB0
- .4byte gSpriteAffineAnim_83D9EC0
- .4byte gSpriteAffineAnim_83D9ED0
-
- .align 2
-gBattleAnimSpriteTemplate_83D9EF4:: @ 83D9EF4
- spr_template 10043, 10043, gOamData_837DFF4, gSpriteAnimTable_83D9E88, NULL, gSpriteAffineAnimTable_83D9EE0, unc_080B06FC
-
- .align 2
-gBattleAnimSpriteTemplate_83D9F0C:: @ 83D9F0C
- spr_template 10141, 10141, gOamData_837DF24, gSpriteAnimTable_83D9BBC, NULL, gDummySpriteAffineAnimTable, sub_80D8F10
-
- .align 2
-gSpriteTemplate_83D9F24:: @ 83D9F24
- spr_template 10050, 10050, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_080B08A0
-
- .align 2
-gSpriteAnim_83D9F3C:: @ 83D9F3C
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9F44:: @ 83D9F44
- obj_image_anim_frame 16, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9F4C:: @ 83D9F4C
- obj_image_anim_frame 32, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9F54:: @ 83D9F54
- obj_image_anim_frame 48, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D9F5C:: @ 83D9F5C
- obj_image_anim_frame 48, 1, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D9F64:: @ 83D9F64
- .4byte gSpriteAnim_83D9F3C
-
- .align 2
-gSpriteAnimTable_83D9F68:: @ 83D9F68
- .4byte gSpriteAnim_83D9F44
- .4byte gSpriteAnim_83D9F4C
-
- .align 2
-gSpriteAnimTable_83D9F70:: @ 83D9F70
- .4byte gSpriteAnim_83D9F54
- .4byte gSpriteAnim_83D9F5C
-
- .align 2
-gBattleAnimSpriteTemplate_83D9F78:: @ 83D9F78
- spr_template 10143, 10143, gOamData_837DF34, gSpriteAnimTable_83D9F64, NULL, gDummySpriteAffineAnimTable, sub_80D902C
-
- .align 2
-gBattleAnimSpriteTemplate_83D9F90:: @ 83D9F90
- spr_template 10143, 10143, gOamData_837DF34, gSpriteAnimTable_83D9F64, NULL, gDummySpriteAffineAnimTable, sub_80D9078
-
- .align 2
-gFistFootSpriteTemplate:: @ 83D9FA8
- spr_template 10143, 10143, gOamData_837DF34, gSpriteAnimTable_83D9F64, NULL, gDummySpriteAffineAnimTable, AnimBasicFistOrFoot
-
- .align 2
-gBattleAnimSpriteTemplate_83D9FC0:: @ 83D9FC0
- spr_template 10143, 10143, gOamData_837DF34, gSpriteAnimTable_83D9F64, NULL, gDummySpriteAffineAnimTable, sub_80D90F4
-
- .align 2
-gBattleAnimSpriteTemplate_83D9FD8:: @ 83D9FD8
- spr_template 10143, 10143, gOamData_837DF34, gSpriteAnimTable_83D9F70, NULL, gDummySpriteAffineAnimTable, sub_80D92D0
-
- .align 2
-gBattleAnimSpriteTemplate_83D9FF0:: @ 83D9FF0
- spr_template 10143, 10143, gOamData_837DF34, gSpriteAnimTable_83D9F68, NULL, gDummySpriteAffineAnimTable, sub_80D9378
-
- .align 2
-gSpriteAffineAnim_83DA008:: @ 83DA008
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_frame 0xFFF8, 0xFFF8, 20, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83DA020:: @ 83DA020
- .4byte gSpriteAffineAnim_83DA008
-
- .align 2
-gBattleAnimSpriteTemplate_83DA024:: @ 83DA024
- spr_template 10143, 10143, gOamData_837DFF4, gSpriteAnimTable_83D9F64, NULL, gSpriteAffineAnimTable_83DA020, AnimSpinningKickOrPunch
-
- .align 2
-gSpriteAffineAnim_83DA03C:: @ 83DA03C
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_frame 0xFFFC, 0xFFFC, 20, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83DA054:: @ 83DA054
- .4byte gSpriteAffineAnim_83DA03C
-
- .align 2
-gMegaPunchKickSpriteTemplate:: @ 83DA058
- spr_template 10143, 10143, gOamData_837DFF4, gSpriteAnimTable_83D9F64, NULL, gSpriteAffineAnimTable_83DA054, AnimSpinningKickOrPunch
-
- .align 2
-gStompFootSpriteTemplate:: @ 83DA070
- spr_template 10143, 10143, gOamData_837DF34, gSpriteAnimTable_83D9F68, NULL, gDummySpriteAffineAnimTable, AnimStompFoot
-
- .align 2
-gBattleAnimSpriteTemplate_83DA088:: @ 83DA088
- spr_template 10073, 10073, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D9540
-
- .align 2
-gBattleAnimSpriteTemplate_83DA0A0:: @ 83DA0A0
- spr_template 10167, 10167, gOamData_837E05C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D95D0
-
- .align 2
-gBattleAnimSpriteTemplate_83DA0B8:: @ 83DA0B8
- spr_template 10208, 10208, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D96B8
-
- .align 2
-gSpriteAffineAnim_83DA0D0:: @ 83DA0D0
- obj_rot_scal_anim_frame 0x20, 0x20, 0, 0
- obj_rot_scal_anim_frame 0x4, 0x4, 0, 64
- obj_rot_scal_anim_frame 0xFFFA, 0xFFFA, 0, 8
- obj_rot_scal_anim_frame 0x6, 0x6, 0, 8
- obj_rot_scal_anim_jump 2
-
- .align 2
-gSpriteAffineAnimTable_83DA0F8:: @ 83DA0F8
- .4byte gSpriteAffineAnim_83DA0D0
-
- .align 2
-gBattleAnimSpriteTemplate_83DA0FC:: @ 83DA0FC
- spr_template 10212, 10212, gOamData_837E11C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DA0F8, sub_80D97CC
-
- .align 2
-gBattleAnimSpriteTemplate_83DA114:: @ 83DA114
- spr_template 10257, 10257, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D98D8
-
- .align 2
-gBattleAnimSpriteTemplate_83DA12C:: @ 83DA12C
- spr_template 10256, 10256, gOamData_837DF3C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D9A38
-
- .align 2
-gBattleAnimSpriteTemplate_83DA144:: @ 83DA144
- spr_template 10143, 10143, gOamData_837DF34, gSpriteAnimTable_83D9F64, NULL, gDummySpriteAffineAnimTable, sub_80D9B48
-
- .align 2
-gSpriteAnim_83DA15C:: @ 83DA15C
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 32, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DA16C:: @ 83DA16C
- obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DA17C:: @ 83DA17C
- obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DA18C:: @ 83DA18C
- .4byte gSpriteAnim_83DA15C
- .4byte gSpriteAnim_83DA16C
- .4byte gSpriteAnim_83DA17C
-
- .align 2
-gBattleAnimSpriteTemplate_83DA198:: @ 83DA198
- spr_template 10245, 10245, gOamData_837DF34, gSpriteAnimTable_83DA18C, NULL, gDummySpriteAffineAnimTable, sub_80D9BD4
-
- .align 2
-gSpriteAnim_83DA1B0:: @ 83DA1B0
- obj_image_anim_frame 0, 6
- obj_image_anim_frame 64, 6
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DA1BC:: @ 83DA1BC
- obj_image_anim_frame 0, 6, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 64, 6, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DA1C8:: @ 83DA1C8
- obj_image_anim_frame 0, 6, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 64, 6, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DA1D4:: @ 83DA1D4
- .4byte gSpriteAnim_83DA1B0
- .4byte gSpriteAnim_83DA1BC
- .4byte gSpriteAnim_83DA1C8
-
- .align 2
-gBattleAnimSpriteTemplate_83DA1E0:: @ 83DA1E0
- spr_template 10246, 10246, gOamData_837DF3C, gSpriteAnimTable_83DA1D4, NULL, gDummySpriteAffineAnimTable, sub_80D9BD4
-
- .align 2
-gSpriteAffineAnim_83DA1F8:: @ 83DA1F8
- obj_rot_scal_anim_frame 0x200, 0x200, 0, 0
- obj_rot_scal_anim_frame 0xFFE0, 0xFFE0, 0, 8
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DA210:: @ 83DA210
- .4byte gSpriteAffineAnim_83DA1F8
-
- .align 2
-gBattleAnimSpriteTemplate_83DA214:: @ 83DA214
- spr_template 10143, 10143, gOamData_837DFF4, gSpriteAnimTable_83D9F64, NULL, gSpriteAffineAnimTable_83DA210, sub_80D9C40
-
- .align 2
-gSpriteAnim_83DA22C:: @ 83DA22C
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 24, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DA240:: @ 83DA240
- .4byte gSpriteAnim_83DA22C
-
- .align 2
-gBattleAnimSpriteTemplate_83DA244:: @ 83DA244
- spr_template 10151, 10151, gOamData_837DF74, gSpriteAnimTable_83DA240, NULL, gDummySpriteAffineAnimTable, sub_80793C4
-
- .align 2
-gSpriteAnim_83DA25C:: @ 83DA25C
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DA264:: @ 83DA264
- obj_image_anim_frame 4, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DA26C:: @ 83DA26C
- obj_image_anim_frame 8, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DA274:: @ 83DA274
- .4byte gSpriteAnim_83DA25C
-
- .align 2
-gSpriteAnimTable_83DA278:: @ 83DA278
- .4byte gSpriteAnim_83DA264
-
- .align 2
-gSpriteAnimTable_83DA27C:: @ 83DA27C
- .4byte gSpriteAnim_83DA26C
-
- .align 2
-gSpriteAffineAnim_83DA280:: @ 83DA280
- obj_rot_scal_anim_frame 0x160, 0x160, 0, 0
- obj_rot_scal_anim_frame 0xFFF6, 0xFFF6, 0, 10
- obj_rot_scal_anim_frame 0xA, 0xA, 0, 10
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnim_83DA2A0:: @ 83DA2A0
- obj_rot_scal_anim_frame 0xEC, 0xEC, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DA2B0:: @ 83DA2B0
- .4byte gSpriteAffineAnim_83DA280
-
- .align 2
-gSpriteAffineAnimTable_83DA2B4:: @ 83DA2B4
- .4byte gSpriteAffineAnim_83DA2A0
-
- .align 2
-gBattleAnimSpriteTemplate_83DA2B8:: @ 83DA2B8
- spr_template 10150, 10150, gOamData_837DFEC, gSpriteAnimTable_83DA274, NULL, gSpriteAffineAnimTable_83DA2B0, sub_80D9D70
-
- .align 2
-gBattleAnimSpriteTemplate_83DA2D0:: @ 83DA2D0
- spr_template 10150, 10150, gOamData_837DFEC, gSpriteAnimTable_83DA274, NULL, gSpriteAffineAnimTable_83DA2B0, sub_80D9DF0
-
- .align 2
-gBattleAnimSpriteTemplate_83DA2E8:: @ 83DA2E8
- spr_template 10150, 10150, gOamData_837DF8C, gSpriteAnimTable_83DA27C, NULL, gSpriteAffineAnimTable_83DA2B4, sub_80D9E94
-
- .align 2
-gSpriteAffineAnim_83DA300:: @ 83DA300
- obj_rot_scal_anim_frame 0xFFF0, 0x10, 0, 6
- obj_rot_scal_anim_frame 0x10, 0xFFF0, 0, 6
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83DA318:: @ 83DA318
- .4byte gSpriteAffineAnim_83DA300
-
- .align 2
-gBattleAnimSpriteTemplate_83DA31C:: @ 83DA31C
- spr_template 10150, 10150, gOamData_837DFEC, gSpriteAnimTable_83DA278, NULL, gSpriteAffineAnimTable_83DA318, sub_80D9F14
-
- .align 2
-gSpriteAffineAnim_83DA334:: @ 83DA334
- obj_rot_scal_anim_frame 0x9C, 0x9C, 0, 0
- obj_rot_scal_anim_frame 0x5, 0x5, 0, 20
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DA34C:: @ 83DA34C
- .4byte gSpriteAffineAnim_83DA334
-
- .align 2
-gPoisonBubbleSpriteTemplate:: @ 83DA350
- spr_template 10150, 10150, gOamData_837DF8C, gSpriteAnimTable_83DA274, NULL, gSpriteAffineAnimTable_83DA34C, AnimBubbleEffect
-
- .align 2
-gWaterBubbleSpriteTemplate:: @ 83DA368
- spr_template 10155, 10155, gOamData_837E0AC, gSpriteAnimTable_83D9310, NULL, gSpriteAffineAnimTable_83DA34C, AnimBubbleEffect
-
- .align 2
-gBattleAnimSpriteTemplate_83DA380:: @ 83DA380
- spr_template 10009, 10009, gOamData_837DF7C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DA034
-
- .align 2
-gSpriteAffineAnim_83DA398:: @ 83DA398
- obj_rot_scal_anim_frame 0x10, 0x100, 0, 0
- obj_rot_scal_anim_frame 0xA, 0x0, 0, 24
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DA3B0:: @ 83DA3B0
- .4byte gSpriteAffineAnim_83DA398
-
- .align 2
-gBattleAnimSpriteTemplate_83DA3B4:: @ 83DA3B4
- spr_template 10009, 10009, gOamData_837DFDC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DA3B0, sub_80DA16C
-
- .align 2
-gSpriteAnim_83DA3CC:: @ 83DA3CC
- obj_image_anim_frame 0, 3
- obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83DA3E0:: @ 83DA3E0
- .4byte gSpriteAnim_83DA3CC
-
- .align 2
-gBattleAnimSpriteTemplate_83DA3E4:: @ 83DA3E4
- spr_template 10154, 10154, gOamData_837DF54, gSpriteAnimTable_83DA3E0, NULL, gDummySpriteAffineAnimTable, sub_80DA208
-
- .align 2
-gSpriteAffineAnim_83DA3FC:: @ 83DA3FC
- obj_rot_scal_anim_frame 0x10, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x28, 0x0, 0, 6
- obj_rot_scal_anim_frame 0x0, 0xFFE0, 0, 5
- obj_rot_scal_anim_frame 0xFFF0, 0x20, 0, 10
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DA424:: @ 83DA424
- .4byte gSpriteAffineAnim_83DA3FC
-
- .align 2
-gSpriteAffineAnim_83DA428:: @ 83DA428
- obj_rot_scal_anim_frame 0x0, 0x0, 50, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DA438:: @ 83DA438
- obj_rot_scal_anim_frame 0x0, 0x0, -40, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DA448:: @ 83DA448
- .4byte gSpriteAffineAnim_83DA428
- .4byte gSpriteAffineAnim_83DA438
-
- .align 2
-gBattleAnimSpriteTemplate_83DA450:: @ 83DA450
- spr_template 10156, 10156, gOamData_837DFFC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DA424, sub_80DA300
-
- .align 2
-gBattleAnimSpriteTemplate_83DA468:: @ 83DA468
- spr_template 10156, 10156, gOamData_837DF9C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DA448, sub_80DA38C
-
- .align 2
-gSpriteAnim_83DA480:: @ 83DA480
- obj_image_anim_frame 0, 0
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DA488:: @ 83DA488
- obj_image_anim_frame 16, 0, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DA490:: @ 83DA490
- .4byte gSpriteAnim_83DA480
- .4byte gSpriteAnim_83DA488
-
- .align 2
-gBattleAnimSpriteTemplate_83DA498:: @ 83DA498
- spr_template 10270, 10270, gOamData_837DF94, gSpriteAnimTable_83DA490, NULL, gDummySpriteAffineAnimTable, sub_80DA4D8
-
- .align 2
-@ unused palette
- .incbin "graphics/unknown/unknown_3DA4B0.gbapal"
-
- .align 2
-gSpriteTemplate_83DA4D0:: @ 83DA4D0
- spr_template 10155, 10155, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DAD30
-
- .align 2
-gSpriteTemplate_83DA4E8:: @ 83DA4E8
- spr_template 10270, 10270, gOamData_837DF94, gSpriteAnimTable_83DA490, NULL, gDummySpriteAffineAnimTable, sub_80DAD84
-
- .align 2
-gSpriteAnim_83DA500:: @ 83DA500
- obj_image_anim_frame 0, 1
- obj_image_anim_frame 8, 1
- obj_image_anim_frame 16, 1
- obj_image_anim_frame 8, 1, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 0, 1, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DA518:: @ 83DA518
- .4byte gSpriteAnim_83DA500
-
- .align 2
-gBattleAnimSpriteTemplate_83DA51C:: @ 83DA51C
- spr_template 10162, 10162, gOamData_837DF54, gSpriteAnimTable_83DA518, NULL, gDummySpriteAffineAnimTable, sub_80DB000
-
- .align 2
-gSpriteAffineAnim_83DA534:: @ 83DA534
- obj_rot_scal_anim_frame 0x10, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x28, 0x0, 0, 6
- obj_rot_scal_anim_frame 0x0, 0xFFE0, 0, 5
- obj_rot_scal_anim_frame 0xFFEC, 0x0, 0, 7
- obj_rot_scal_anim_frame 0xFFEC, 0xFFEC, 0, 5
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DA564:: @ 83DA564
- .4byte gSpriteAffineAnim_83DA534
-
- .align 2
-gBattleAnimSpriteTemplate_83DA568:: @ 83DA568
- spr_template 10156, 10156, gOamData_837DFFC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DA564, sub_80DB194
-
- .align 2
-gSpriteAffineAnim_83DA580:: @ 83DA580
- obj_rot_scal_anim_frame 0xA0, 0x100, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DA590:: @ 83DA590
- .4byte gSpriteAffineAnim_83DA580
-
- .align 2
-gBattleAnimSpriteTemplate_83DA594:: @ 83DA594
- spr_template 10156, 10156, gOamData_837DFFC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DA590, sub_80DB1F4
-
- .align 2
-gSpriteAffineAnim_83DA5AC:: @ 83DA5AC
- obj_rot_scal_anim_frame 0x10, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x28, 0x0, 0, 6
- obj_rot_scal_anim_frame 0x0, 0xFFE0, 0, 5
- obj_rot_scal_anim_frame 0xFFF0, 0x20, 0, 10
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DA5D4:: @ 83DA5D4
- .4byte gSpriteAffineAnim_83DA5AC
-
- .align 2
-gBattleAnimSpriteTemplate_83DA5D8:: @ 83DA5D8
- spr_template 10156, 10156, gOamData_837DFFC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DA5D4, sub_80DB288
-
- .align 2
-gSpriteAffineAnim_83DA5F0:: @ 83DA5F0
- obj_rot_scal_anim_frame 0x100, 0x0, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x20, 0, 12
- obj_rot_scal_anim_frame 0x0, 0xFFE0, 0, 11
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DA610:: @ 83DA610
- .4byte gSpriteAffineAnim_83DA5F0
-
- .align 2
-gBattleAnimSpriteTemplate_83DA614:: @ 83DA614
- spr_template 10272, 10272, gOamData_837DFFC, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DB374
-
- .align 2
-gBattleAnimSpriteTemplate_83DA62C:: @ 83DA62C
- spr_template 10273, 10273, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DB458
-
- .align 2
-gSpriteTemplate_83DA644:: @ 83DA644
- spr_template 10212, 10212, gOamData_837E05C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DB564
-
- .align 2
-gBattleAnimSpriteTemplate_83DA65C:: @ 83DA65C
- spr_template 10284, 10284, gOamData_837DFFC, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DB5E4
-
- .align 2
-gSpriteAffineAnim_83DA674:: @ 83DA674
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_frame 0xFFFE, 0xFFFE, -10, 120
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DA68C:: @ 83DA68C
- .4byte gSpriteAffineAnim_83DA674
-
- .align 2
-gBattleAnimSpriteTemplate_83DA690:: @ 83DA690
- spr_template 10196, 10196, gOamData_837E0BC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DA68C, sub_80793C4
-
- .align 2
-gBattleAnimSpriteTemplate_83DA6A8:: @ 83DA6A8
- spr_template 10166, 10166, gOamData_837E05C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DB74C
-
- .align 2
-gBattleAnimSpriteTemplate_83DA6C0:: @ 83DA6C0
- spr_template 10167, 10167, gOamData_837E05C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DB74C
-
- .align 2
-gBattleAnimSpriteTemplate_83DA6D8:: @ 83DA6D8
- spr_template 10168, 10168, gOamData_837E05C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DB74C
-
- .align 2
-gBattleAnimSpriteTemplate_83DA6F0:: @ 83DA6F0
- spr_template 10169, 10169, gOamData_837E05C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DB74C
-
- .align 2
-gBattleAnimSpriteTemplate_83DA708:: @ 83DA708
- spr_template 10170, 10170, gOamData_837E05C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DB74C
-
- .align 2
-gSpriteAnim_83DA720:: @ 83DA720
- obj_image_anim_frame 0, 3
- obj_image_anim_frame 16, 3
- obj_image_anim_frame 32, 3
- obj_image_anim_frame 48, 3
- obj_image_anim_frame 64, 3
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DA738:: @ 83DA738
- .4byte gSpriteAnim_83DA720
-
- .align 2
-gBattleAnimSpriteTemplate_83DA73C:: @ 83DA73C
- spr_template 10071, 10071, gOamData_837DF34, gSpriteAnimTable_83DA738, NULL, gDummySpriteAffineAnimTable, sub_80DBA4C
-
- .align 2
-gSpriteAnim_83DA754:: @ 83DA754
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 4, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_frame 12, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DA768:: @ 83DA768
- .4byte gSpriteAnim_83DA754
-
- .align 2
-gBattleAnimSpriteTemplate_83DA76C:: @ 83DA76C
- spr_template 10070, 10070, gOamData_837DF2C, gSpriteAnimTable_83DA768, NULL, gDummySpriteAffineAnimTable, sub_80DBA4C
-
- .align 2
-gBattleAnimSpriteTemplate_83DA784:: @ 83DA784
- spr_template 10163, 10163, gOamData_837DF74, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, TranslateAnimSpriteToTargetMonLocation
-
- .align 2
-gSpriteAnim_83DA79C:: @ 83DA79C
- obj_image_anim_frame 8, 60, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 5, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 8, 5, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 0, 5, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 8, 22, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_loop 0
- obj_image_anim_frame 16, 5, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 8, 5, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 0, 5, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 8, 5, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_loop 1
- obj_image_anim_frame 8, 22, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 24, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 40, 22, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DA7DC:: @ 83DA7DC
- obj_image_anim_frame 8, 60
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 8, 22
- obj_image_anim_loop 0
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_loop 1
- obj_image_anim_frame 8, 22
- obj_image_anim_frame 24, 3
- obj_image_anim_frame 32, 3
- obj_image_anim_frame 40, 22
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DA81C:: @ 83DA81C
- .4byte gSpriteAnim_83DA79C
- .4byte gSpriteAnim_83DA7DC
-
- .align 2
-gBattleAnimSpriteTemplate_83DA824:: @ 83DA824
- spr_template 10097, 10097, gOamData_837DF74, gSpriteAnimTable_83DA81C, NULL, gDummySpriteAffineAnimTable, sub_80DBAF4
-
- .align 2
-gSpriteAnim_83DA83C:: @ 83DA83C
- obj_image_anim_frame 0, 6
- obj_image_anim_frame 16, 6
- obj_image_anim_frame 32, 6
- obj_image_anim_frame 48, 6
- obj_image_anim_frame 64, 6
- obj_image_anim_frame 80, 6
- obj_image_anim_frame 96, 18
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DA85C:: @ 83DA85C
- .4byte gSpriteAnim_83DA83C
-
- .align 2
-Unknown_3DA860:: @ 83DA860
- obj_rot_scal_anim_frame 0, 0, 4, 4
- obj_rot_scal_anim_frame 0, 0, -4, 8
- obj_rot_scal_anim_frame 0, 0, 4, 4
- obj_rot_scal_anim_loop 2
- obj_rot_scal_anim_end 0
-
- .align 2
-gUnknown_083DA888:: @ 83DA888
- .4byte Unknown_3DA860
-
- .align 2
-gBattleAnimSpriteTemplate_83DA88C:: @ 83DA88C
- spr_template 10093, 10093, gOamData_837DF34, gSpriteAnimTable_83DA85C, NULL, gDummySpriteAffineAnimTable, sub_80DBB70
-
- .align 2
-gUnknown_083DA8A4:: @ 83DA8A4
- obj_rot_scal_anim_frame -8, 10, 0, 16
- obj_rot_scal_anim_frame 18, -18, 0, 16
- obj_rot_scal_anim_frame -20, 16, 0, 8
- obj_rot_scal_anim_end 0
-
- .align 2
-gUnknown_083DA8C4:: @ 83DA8C4
- obj_rot_scal_anim_frame 64, -4, 0, 20
- obj_rot_scal_anim_frame 0, 0, 0, -56
- obj_rot_scal_anim_end 0
-
- .align 2
-gSpriteTemplate_83DA8DC:: @ 83DA8DC
- spr_template 10249, 10249, gOamData_837E04C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gBattleAnimSpriteTemplate_83DA8F4:: @ 83DA8F4
- spr_template 10250, 10250, gOamData_837DF3C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DC068
-
- .align 2
-gSpriteAffineAnim_83DA90C:: @ 83DA90C
- obj_rot_scal_anim_frame 0xFFF8, 0xFFF8, 0, 8
- obj_rot_scal_anim_frame 0x8, 0x8, 0, 8
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnim_83DA924:: @ 83DA924
- obj_rot_scal_anim_frame 0xF0, 0xF0, 0, 0
- obj_rot_scal_anim_frame 0xFFF8, 0xFFF8, 0, 6
- obj_rot_scal_anim_frame 0x8, 0x8, 0, 8
- obj_rot_scal_anim_frame 0xFFF8, 0xFFF8, 0, 2
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnim_83DA94C:: @ 83DA94C
- obj_rot_scal_anim_frame 0xD0, 0xD0, 0, 0
- obj_rot_scal_anim_frame 0xFFF8, 0xFFF8, 0, 4
- obj_rot_scal_anim_frame 0x8, 0x8, 0, 8
- obj_rot_scal_anim_frame 0xFFF8, 0xFFF8, 0, 4
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnim_83DA974:: @ 83DA974
- obj_rot_scal_anim_frame 0xB0, 0xB0, 0, 0
- obj_rot_scal_anim_frame 0xFFF8, 0xFFF8, 0, 2
- obj_rot_scal_anim_frame 0x8, 0x8, 0, 8
- obj_rot_scal_anim_frame 0xFFF8, 0xFFF8, 0, 6
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83DA99C:: @ 83DA99C
- .4byte gSpriteAffineAnim_83DA90C
- .4byte gSpriteAffineAnim_83DA924
- .4byte gSpriteAffineAnim_83DA94C
- .4byte gSpriteAffineAnim_83DA974
-
- .align 2
-gSpriteTemplate_83DA9AC:: @ 83DA9AC
- spr_template 10251, 10251, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DA99C, sub_80DC2B0
-
- .align 2
-gSpriteAffineAnim_83DA9C4:: @ 83DA9C4
- obj_rot_scal_anim_frame 0x20, 0x20, 0, 0
- obj_rot_scal_anim_frame 0x4, 0x4, 0, 120
- obj_rot_scal_anim_end 1
-
- .align 2
-gSpriteAffineAnimTable_83DA9DC:: @ 83DA9DC
- .4byte gSpriteAffineAnim_83DA9C4
-
- .align 2
-gBattleAnimSpriteTemplate_83DA9E0:: @ 83DA9E0
- spr_template 10267, 10267, gOamData_837E11C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DA9DC, sub_80793C4
-
- .align 2
-gSpriteAffineAnim_83DA9F8:: @ 83DA9F8
- obj_rot_scal_anim_frame 0x20, 0x20, 0, 0
- obj_rot_scal_anim_frame 0x10, 0x10, 0, 17
- obj_rot_scal_anim_loop 0
- obj_rot_scal_anim_frame 0xFFF8, 0xFFF8, 0, 10
- obj_rot_scal_anim_frame 0x8, 0x8, 0, 10
- obj_rot_scal_anim_loop 4
- obj_rot_scal_anim_loop 0
- obj_rot_scal_anim_frame 0xFFF0, 0xFFF0, 0, 5
- obj_rot_scal_anim_frame 0x10, 0x10, 0, 5
- obj_rot_scal_anim_loop 7
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DAA50:: @ 83DAA50
- obj_rot_scal_anim_frame 0xFFEC, 0x18, 0, 15
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DAA60:: @ 83DAA60
- .4byte gSpriteAffineAnim_83DA9F8
- .4byte gSpriteAffineAnim_83DAA50
-
- .align 2
-gBattleAnimSpriteTemplate_83DAA68:: @ 83DAA68
- spr_template 10212, 10212, gOamData_837E11C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DAA60, sub_80DC700
-
- .align 2
-gSpriteAffineAnim_83DAA80:: @ 83DAA80
- obj_rot_scal_anim_frame 0x100, 0x100, 30, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DAA90:: @ 83DAA90
- obj_rot_scal_anim_frame 0x100, 0x100, -99, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DAAA0:: @ 83DAAA0
- obj_rot_scal_anim_frame 0x100, 0x100, 94, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DAAB0:: @ 83DAAB0
- .4byte gSpriteAffineAnim_83DAA80
- .4byte gSpriteAffineAnim_83DAA90
- .4byte gSpriteAffineAnim_83DAAA0
-
- .align 2
-gBattleAnimSpriteTemplate_83DAABC:: @ 83DAABC
- spr_template 10153, 10153, gOamData_837E014, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DAAB0, sub_80DC824
-
- .align 2
-gSpriteAffineAnim_83DAAD4:: @ 83DAAD4
- obj_rot_scal_anim_frame 0x0, 0x0, -33, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DAAE4:: @ 83DAAE4
- obj_rot_scal_anim_frame 0x0, 0x0, 96, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DAAF4:: @ 83DAAF4
- obj_rot_scal_anim_frame 0x0, 0x0, -96, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DAB04:: @ 83DAB04
- .4byte gSpriteAffineAnim_83DAAD4
- .4byte gSpriteAffineAnim_83DAAE4
- .4byte gSpriteAffineAnim_83DAAF4
-
- .align 2
-gBattleAnimSpriteTemplate_83DAB10:: @ 83DAB10
- spr_template 10161, 10161, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DAB04, sub_80DC8F4
-
- .align 2
-gBattleAnimSpriteTemplate_83DAB28:: @ 83DAB28
- spr_template 10180, 10180, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DC9A0
-
- .align 2
-gBattleAnimSpriteTemplate_83DAB40:: @ 83DAB40
- spr_template 10179, 10179, gOamData_837DF5C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DCA70
-
- .align 2
-gSpriteAffineAnim_83DAB58:: @ 83DAB58
- obj_rot_scal_anim_frame 0x10, 0x10, 0, 0
- obj_rot_scal_anim_frame 0x6, 0x6, 0, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83DAB70:: @ 83DAB70
- .4byte gSpriteAffineAnim_83DAB58
-
- .align 2
-gBattleAnimSpriteTemplate_83DAB74:: @ 83DAB74
- spr_template 10181, 10181, gOamData_837E11C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DAB70, sub_80DCB38
-
- .align 2
-gLinearStingerSpriteTemplate:: @ 83DAB8C
- spr_template 10161, 10161, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, AnimTranslateStinger
-
- .align 2
-gPinMissileSpriteTemplate:: @ 83DABA4
- spr_template 10161, 10161, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, AnimMissileArc
-
- .align 2
-gIcicleSpearSpriteTemplate:: @ 83DABBC
- spr_template 10262, 10262, gOamData_837DF94, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, AnimMissileArc
-
- .align 2
-gSpriteAffineAnim_83DABD4:: @ 83DABD4
- obj_rot_scal_anim_frame 0x10, 0x10, 0, 0
- obj_rot_scal_anim_frame 0x8, 0x8, 0, 18
- obj_rot_scal_anim_loop 0
- obj_rot_scal_anim_frame 0xFFFB, 0xFFFB, 0, 8
- obj_rot_scal_anim_frame 0x5, 0x5, 0, 8
- obj_rot_scal_anim_loop 5
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DAC0C:: @ 83DAC0C
- .4byte gSpriteAffineAnim_83DABD4
-
- .align 2
-gBattleAnimSpriteTemplate_83DAC10:: @ 83DAC10
- spr_template 10212, 10212, gOamData_837E0BC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DAC0C, sub_80DCE40
-
- .align 2
-gSpriteAnim_83DAC28:: @ 83DAC28
- obj_image_anim_frame 32, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DAC30:: @ 83DAC30
- obj_image_anim_frame 48, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DAC38:: @ 83DAC38
- obj_image_anim_frame 64, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DAC40:: @ 83DAC40
- .4byte gSpriteAnim_83DAC28
- .4byte gSpriteAnim_83DAC30
- .4byte gSpriteAnim_83DAC38
-
- .align 2
-gBattleAnimSpriteTemplate_83DAC4C:: @ 83DAC4C
- spr_template 10058, 10058, gOamData_837DF34, gSpriteAnimTable_83DAC40, NULL, gDummySpriteAffineAnimTable, sub_80DCE9C
-
- .align 2
-gBattleAnimSpriteTemplate_83DAC64:: @ 83DAC64
- spr_template 10058, 10058, gOamData_837DF34, gSpriteAnimTable_83DAC40, NULL, gDummySpriteAffineAnimTable, sub_80DCF60
-
- .align 2
-gBattleAnimSpriteTemplate_83DAC7C:: @ 83DAC7C
- spr_template 10074, 10074, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DCFE4
-
- .align 2
-gSpriteAffineAnim_83DAC94:: @ 83DAC94
- obj_rot_scal_anim_frame 0xC0, 0xC0, 0, 0
- obj_rot_scal_anim_frame 0x2, 0xFFFD, 0, 5
- obj_rot_scal_anim_frame 0xFFFE, 0x3, 0, 5
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83DACB4:: @ 83DACB4
- .4byte gSpriteAffineAnim_83DAC94
-
- .align 2
-gBattleAnimSpriteTemplate_83DACB8:: @ 83DACB8
- spr_template 10149, 10149, gOamData_837E0AC, gSpriteAnimTable_83D91F0, NULL, gSpriteAffineAnimTable_83DACB4, sub_80DCFE4
-
- .align 2
-gBattleAnimSpriteTemplate_83DACD0:: @ 83DACD0
- spr_template 10029, 10029, gOamData_837DF34, gSpriteAnimTable_83D95E0, NULL, gDummySpriteAffineAnimTable, sub_80DCFE4
-
- .align 2
-gBattleAnimSpriteTemplate_83DACE8:: @ 83DACE8
- spr_template 10261, 10261, gOamData_837DF54, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DD3AC
-
- .align 2
-Unknown_3DAD00:: @ 83DAD00
- subsprite -16, 0, 1, 0, 32x16
- subsprite 16, 0, 1, 8, 32x16
-
- .align 2
-gUnknown_083DAD10:: @ 83DAD10
-@ the first argument is likely the amount of structs there are in the pointed data.
- .4byte 0x2, Unknown_3DAD00
-
- .align 2
-gSpriteAnim_83DAD18:: @ 83DAD18
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DAD20:: @ 83DAD20
- obj_image_anim_frame 16, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DAD28:: @ 83DAD28
- obj_image_anim_frame 32, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DAD30:: @ 83DAD30
- obj_image_anim_frame 48, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DAD38:: @ 83DAD38
- obj_image_anim_frame 64, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DAD40:: @ 83DAD40
- obj_image_anim_frame 80, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DAD48:: @ 83DAD48
- .4byte gSpriteAnim_83DAD18
- .4byte gSpriteAnim_83DAD20
-
- .align 2
-gSpriteAnimTable_83DAD50:: @ 83DAD50
- .4byte gSpriteAnim_83DAD28
- .4byte gSpriteAnim_83DAD30
-
- .align 2
-gSpriteAnimTable_83DAD58:: @ 83DAD58
- .4byte gSpriteAnim_83DAD38
- .4byte gSpriteAnim_83DAD40
-
- .align 2
-gBattleAnimSpriteTemplate_83DAD60:: @ 83DAD60
- spr_template 10058, 10058, gOamData_837DF34, gSpriteAnimTable_83DAD48, NULL, gDummySpriteAffineAnimTable, sub_80DD490
-
- .align 2
-gSpriteTemplate_83DAD78:: @ 83DAD78
- spr_template 10074, 10074, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DD87C
-
- .align 2
-gSpriteTemplate_83DAD90:: @ 83DAD90
- spr_template 10058, 10058, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DD87C
-
- .align 2
-gBattleAnimSpriteTemplate_83DADA8:: @ 83DADA8
- spr_template 10058, 10058, gOamData_837DF34, gSpriteAnimTable_83DAD48, NULL, gDummySpriteAffineAnimTable, sub_80DD8E8
-
- .align 2
-gSpriteAffineAnim_83DADC0:: @ 83DADC0
- obj_rot_scal_anim_frame 0x0, 0x0, -5, 5
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnim_83DADD0:: @ 83DADD0
- obj_rot_scal_anim_frame 0x0, 0x0, 5, 5
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83DADE0:: @ 83DADE0
- .4byte gSpriteAffineAnim_83DADC0
- .4byte gSpriteAffineAnim_83DADD0
-
- .align 2
-gBattleAnimSpriteTemplate_83DADE8:: @ 83DADE8
- spr_template 10058, 10058, gOamData_837DF94, gSpriteAnimTable_83DAD48, NULL, gSpriteAffineAnimTable_83DADE0, sub_80DD978
-
- .align 2
-gBattleAnimSpriteTemplate_83DAE00:: @ 83DAE00
- spr_template 10058, 10058, gOamData_837DF94, gSpriteAnimTable_83DAD48, NULL, gSpriteAffineAnimTable_83DADE0, sub_80DD9A4
-
- .align 2
-gBattleAnimSpriteTemplate_83DAE18:: @ 83DAE18
- spr_template 10058, 10058, gOamData_837DF34, gSpriteAnimTable_83DAD58, NULL, gSpriteAffineAnimTable_83DADE0, AnimMoveTwisterParticle
-
- .align 2
-gBattleAnimSpriteTemplate_83DAE30:: @ 83DAE30
- spr_template 10058, 10058, gOamData_837DF94, gSpriteAnimTable_83DAD50, NULL, gSpriteAffineAnimTable_83DADE0, sub_807A9BC
-
- .align 2
-gSpriteAffineAnim_83DAE48:: @ 83DAE48
- obj_rot_scal_anim_frame 0x1E, 0x1E, 10, 5
- obj_rot_scal_anim_frame 0xFFE2, 0xFFE2, 10, 5
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83DAE60:: @ 83DAE60
- .4byte gSpriteAffineAnim_83DAE48
-
- .align 2
-gBattleAnimSpriteTemplate_83DAE64:: @ 83DAE64
- spr_template 10013, 10013, gOamData_837DFEC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DAE60, sub_80DDB6C
-
- .align 2
-gBattleAnimSpriteTemplate_83DAE7C:: @ 83DAE7C
- spr_template 10013, 10013, gOamData_837E04C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DDD58
-
- .align 2
-gSpriteAffineAnim_83DAE94:: @ 83DAE94
- obj_rot_scal_anim_frame 0x0, 0x0, 10, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83DAEA4:: @ 83DAEA4
- .4byte gSpriteAffineAnim_83DAE94
-
- .align 2
-gBattleAnimSpriteTemplate_83DAEA8:: @ 83DAEA8
- spr_template 10176, 10176, gOamData_837DF94, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DAEA4, sub_80DDF40
-
- .align 2
-gSpriteAnim_83DAEC0:: @ 83DAEC0
- obj_image_anim_frame 0, 2
- obj_image_anim_frame 8, 2
- obj_image_anim_frame 16, 2
- obj_image_anim_frame 24, 2
- obj_image_anim_frame 32, 2
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DAED8:: @ 83DAED8
- .4byte gSpriteAnim_83DAEC0
-
- .align 2
-gBattleAnimSpriteTemplate_83DAEDC:: @ 83DAEDC
- spr_template 10177, 10177, gOamData_837DF74, gSpriteAnimTable_83DAED8, NULL, gDummySpriteAffineAnimTable, sub_80DE0FC
-
- .align 2
-gSpriteAffineAnim_83DAEF4:: @ 83DAEF4
- obj_rot_scal_anim_frame 0x200, 0x200, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DAF04:: @ 83DAF04
- .4byte gSpriteAffineAnim_83DAEF4
-
- .align 2
-gSpriteTemplate_83DAF08:: @ 83DAF08
- spr_template 10188, 10188, gOamData_837E07C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DE7B8
-
- .align 2
-gBattleAnimSpriteTemplate_83DAF20:: @ 83DAF20
- spr_template 10199, 10199, gOamData_837E074, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DEF3C
-
- .align 2
-gBattleAnimSpriteTemplate_83DAF38:: @ 83DAF38
- spr_template 10200, 10200, gOamData_837E054, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DF0B8
-
- .align 2
-gBattleAnimSpriteTemplate_83DAF50:: @ 83DAF50
- spr_template 10221, 10221, gOamData_837E054, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DF0B8
-
- .align 2
-gSpriteAnim_83DAF68:: @ 83DAF68
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 8, 4
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 24, 4
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83DAF7C:: @ 83DAF7C
- .4byte gSpriteAnim_83DAF68
-
- .align 2
-gSpriteTemplate_83DAF80:: @ 83DAF80
- spr_template 10253, 10253, gOamData_837E094, gSpriteAnimTable_83DAF7C, NULL, gDummySpriteAffineAnimTable, sub_80DF3D8
-
- .align 2
-gSpriteTemplate_83DAF98:: @ 83DAF98
- spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DF49C
-
- .align 2
-gSpriteAnim_83DAFB0:: @ 83DAFB0
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 32, 4
- obj_image_anim_frame 48, 4
- obj_image_anim_frame 64, 4
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83DAFC8:: @ 83DAFC8
- .4byte gSpriteAnim_83DAFB0
-
- .align 2
-gBattleAnimSpriteTemplate_83DAFCC:: @ 83DAFCC
- spr_template 10029, 10029, gOamData_837DF34, gSpriteAnimTable_83DAFC8, NULL, gDummySpriteAffineAnimTable, sub_80DF5A0
-
- .align 2
-gSpriteAnim_83DAFE4:: @ 83DAFE4
- obj_image_anim_frame 16, 3
- obj_image_anim_frame 32, 3
- obj_image_anim_frame 48, 3
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_83DAFF4:: @ 83DAFF4
- obj_image_anim_frame 16, 3, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 3, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 48, 3, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83DB004:: @ 83DB004
- .4byte gSpriteAnim_83DAFE4
- .4byte gSpriteAnim_83DAFF4
-
- .align 2
-gSpriteAffineAnim_83DB00C:: @ 83DB00C
- obj_rot_scal_anim_frame 0x50, 0x50, 127, 0
- obj_rot_scal_anim_frame 0xD, 0xD, 0, 100
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DB024:: @ 83DB024
- obj_rot_scal_anim_frame 0x50, 0x50, 0, 0
- obj_rot_scal_anim_frame 0xD, 0xD, 0, 100
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DB03C:: @ 83DB03C
- .4byte gSpriteAffineAnim_83DB00C
- .4byte gSpriteAffineAnim_83DB024
-
- .align 2
-gBattleAnimSpriteTemplate_83DB044:: @ 83DB044
- spr_template 10029, 10029, gOamData_837DFF4, gSpriteAnimTable_83DB004, NULL, gSpriteAffineAnimTable_83DB03C, sub_80DF760
-
- .align 2
-gSpriteAnim_83DB05C:: @ 83DB05C
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 32, 5
- obj_image_anim_frame 48, 5
- obj_image_anim_frame 64, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DB074:: @ 83DB074
- .4byte gSpriteAnim_83DB05C
-
- .align 2
-gBattleAnimSpriteTemplate_83DB078:: @ 83DB078
- spr_template 10035, 10035, gOamData_837DF34, gSpriteAnimTable_83DB074, NULL, gDummySpriteAffineAnimTable, sub_80DF6F0
-
- .align 2
-gSpriteAnim_83DB090:: @ 83DB090
- obj_image_anim_frame 16, 3
- obj_image_anim_frame 32, 3
- obj_image_anim_frame 48, 3
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83DB0A0:: @ 83DB0A0
- .4byte gSpriteAnim_83DB090
- .4byte gSpriteAnim_83DB090
-
- .align 2
-gSpriteAffineAnim_83DB0A8:: @ 83DB0A8
- obj_rot_scal_anim_frame 0x64, 0x64, 127, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DB0B8:: @ 83DB0B8
- obj_rot_scal_anim_frame 0x64, 0x64, 0, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DB0C8:: @ 83DB0C8
- .4byte gSpriteAffineAnim_83DB0A8
- .4byte gSpriteAffineAnim_83DB0B8
-
- .align 2
-gBattleAnimSpriteTemplate_83DB0D0:: @ 83DB0D0
- spr_template 10029, 10029, gOamData_837DFF4, gSpriteAnimTable_83DB0A0, NULL, gSpriteAffineAnimTable_83DB0C8, sub_80DF760
-
- .align 2
-gBattleAnimSpriteTemplate_83DB0E8:: @ 83DB0E8
- spr_template 10249, 10249, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DF78C
-
- .align 2
-gBattleAnimSpriteTemplate_83DB100:: @ 83DB100
- spr_template 10029, 10029, gOamData_837DF34, gSpriteAnimTable_83DAFC8, NULL, gDummySpriteAffineAnimTable, sub_80DFB28
-
- .align 2
-gSpriteTemplate_83DB118:: @ 83DB118
- spr_template 10015, 10015, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80DFE14
-
- .align 2
-gSpriteAffineAnim_83DB130:: @ 83DB130
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DB140:: @ 83DB140
- obj_rot_scal_anim_frame 0x0, 0x0, 32, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DB150:: @ 83DB150
- obj_rot_scal_anim_frame 0x0, 0x0, 64, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DB160:: @ 83DB160
- obj_rot_scal_anim_frame 0x0, 0x0, 96, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DB170:: @ 83DB170
- obj_rot_scal_anim_frame 0x0, 0x0, -128, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DB180:: @ 83DB180
- obj_rot_scal_anim_frame 0x0, 0x0, -96, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DB190:: @ 83DB190
- obj_rot_scal_anim_frame 0x0, 0x0, -64, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DB1A0:: @ 83DB1A0
- obj_rot_scal_anim_frame 0x0, 0x0, -32, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DB1B0:: @ 83DB1B0
- .4byte gSpriteAffineAnim_83DB130
- .4byte gSpriteAffineAnim_83DB140
- .4byte gSpriteAffineAnim_83DB150
- .4byte gSpriteAffineAnim_83DB160
- .4byte gSpriteAffineAnim_83DB170
- .4byte gSpriteAffineAnim_83DB180
- .4byte gSpriteAffineAnim_83DB190
- .4byte gSpriteAffineAnim_83DB1A0
-
- .align 2
-gBattleAnimSpriteTemplate_83DB1D0:: @ 83DB1D0
- spr_template 10139, 10139, gOamData_837E0BC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DB1B0, sub_80DFF1C
-
- .align 2
-gBattleAnimSpriteTemplate_83DB1E8:: @ 83DB1E8
- spr_template 10145, 10145, gOamData_837E0BC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DB1B0, sub_80DFF1C
-
- .align 2
-gSpriteAffineAnim_83DB200:: @ 83DB200
- obj_rot_scal_anim_frame 0xC0, 0xC0, 80, 0
- obj_rot_scal_anim_frame 0x0, 0x0, -2, 8
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DB218:: @ 83DB218
- obj_rot_scal_anim_frame 0xC0, 0xC0, -80, 0
- obj_rot_scal_anim_frame 0x0, 0x0, 2, 8
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DB230:: @ 83DB230
- .4byte gSpriteAffineAnim_83DB200
- .4byte gSpriteAffineAnim_83DB218
-
- .align 2
-gBattleAnimSpriteTemplate_83DB238:: @ 83DB238
- spr_template 10155, 10155, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DB230, sub_80DFFD0
-
- .align 2
-gSpriteAnim_83DB250:: @ 83DB250
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 32, 4
- obj_image_anim_frame 48, 4
- obj_image_anim_frame 64, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83DB268:: @ 83DB268
- obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 48, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 64, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DB280:: @ 83DB280
- .4byte gSpriteAnim_83DB250
- .4byte gSpriteAnim_83DB268
-
- .align 2
-gBattleAnimSpriteTemplate_83DB288:: @ 83DB288
- spr_template 10039, 10039, gOamData_837DF34, gSpriteAnimTable_83DB280, NULL, gDummySpriteAffineAnimTable, sub_80E0A10
-
- .align 2
-gSpriteAffineAnim_83DB2A0:: @ 83DB2A0
- obj_rot_scal_anim_frame 0x0, 0x0, 15, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnim_83DB2B0:: @ 83DB2B0
- obj_rot_scal_anim_frame 0x0, 0x0, 20, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83DB2C0:: @ 83DB2C0
- .4byte gSpriteAffineAnim_83DB2A0
-
- .align 2
-gSpriteAffineAnimTable_83DB2C4:: @ 83DB2C4
- .4byte gSpriteAffineAnim_83DB2B0
-
- .align 2
-gBattleAnimSpriteTemplate_83DB2C8:: @ 83DB2C8
- spr_template 10000, 10000, gOamData_837DF94, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DB2C0, sub_80E0F1C
-
- .align 2
-gBattleAnimSpriteTemplate_83DB2E0:: @ 83DB2E0
- spr_template 10000, 10000, gOamData_837DF94, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DB2C4, sub_80E1004
-
- .align 2
-gBattleAnimSpriteTemplate_83DB2F8:: @ 83DB2F8
- spr_template 10074, 10074, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80E1078
-
- .align 2
-gSpriteAnim_83DB310:: @ 83DB310
- obj_image_anim_frame 1, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83DB318:: @ 83DB318
- .4byte gSpriteAnim_83DB310
-
- .align 2
-gBattleAnimSpriteTemplate_83DB31C:: @ 83DB31C
- spr_template 10074, 10074, gOamData_837DF2C, gSpriteAnimTable_83DB318, NULL, gDummySpriteAffineAnimTable, sub_80E1078
-
- .align 2
-gBattleAnimSpriteTemplate_83DB334:: @ 83DB334
- spr_template 10074, 10074, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80E1108
-
- .align 2
-gBattleAnimSpriteTemplate_83DB34C:: @ 83DB34C
- spr_template 10074, 10074, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80E1728
-
- .align 2
-gBattleAnimSpriteTemplate_83DB364:: @ 83DB364
- spr_template 10281, 10281, gOamData_837DF54, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80E17CC
-
- .align 2
-gSpriteAnim_83DB37C:: @ 83DB37C
- obj_image_anim_frame 0, 8
- obj_image_anim_frame 4, 8
- obj_image_anim_frame 0, 8, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 8, 8
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_83DB390:: @ 83DB390
- obj_image_anim_frame 0, 8, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 4, 8
- obj_image_anim_frame 0, 8
- obj_image_anim_frame 8, 8
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83DB3A4:: @ 83DB3A4
- .4byte gSpriteAnim_83DB37C
- .4byte gSpriteAnim_83DB390
-
- .align 2
-gBattleAnimSpriteTemplate_83DB3AC:: @ 83DB3AC
- spr_template 10073, 10073, gOamData_837DF2C, gSpriteAnimTable_83DB3A4, NULL, gDummySpriteAffineAnimTable, sub_80E1CB4
-
- .align 2
-gBattleAnimSpriteTemplate_83DB3C4:: @ 83DB3C4
- spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80E1D84
-
- .align 2
-gBattleAnimSpriteTemplate_83DB3DC:: @ 83DB3DC
- spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80E1E2C
-
- .align 2
-gSpriteAnim_83DB3F4:: @ 83DB3F4
- obj_image_anim_frame 0, 3
- obj_image_anim_frame 16, 3
- obj_image_anim_frame 32, 3
- obj_image_anim_frame 48, 3
- obj_image_anim_frame 64, 3
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83DB40C:: @ 83DB40C
- .4byte gSpriteAnim_83DB3F4
-
- .align 2
-gSpriteTemplate_83DB410:: @ 83DB410
- spr_template 10071, 10071, gOamData_837DF34, gSpriteAnimTable_83DB40C, NULL, gDummySpriteAffineAnimTable, sub_80E1F3C
-
- .align 2
-gBattleAnimSpriteTemplate_83DB428:: @ 83DB428
- spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80E24B8
-
- .align 2
-gSpriteAffineAnim_83DB440:: @ 83DB440
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 8
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DB450:: @ 83DB450
- obj_rot_scal_anim_frame 0xD8, 0xD8, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 8
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DB468:: @ 83DB468
- obj_rot_scal_anim_frame 0xB0, 0xB0, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 8
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83DB480:: @ 83DB480
- obj_rot_scal_anim_frame 0x80, 0x80, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 8
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83DB498:: @ 83DB498
- .4byte gSpriteAffineAnim_83DB440
- .4byte gSpriteAffineAnim_83DB450
- .4byte gSpriteAffineAnim_83DB468
- .4byte gSpriteAffineAnim_83DB480
-
- .align 2
-gBasicHitSplatSpriteTemplate:: @ 83DB4A8
- spr_template 10135, 10135, gOamData_837E0B4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DB498, sub_80E27A0
-
- .align 2
-gBattleAnimSpriteTemplate_83DB4C0:: @ 83DB4C0
- spr_template 10135, 10135, gOamData_837E0B4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DB498, sub_80E2838
-
- .align 2
-gBattleAnimSpriteTemplate_83DB4D8:: @ 83DB4D8
- spr_template 10148, 10148, gOamData_837E0B4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DB498, sub_80E27A0
-
- .align 2
-gBattleAnimSpriteTemplate_83DB4F0:: @ 83DB4F0
- spr_template 10135, 10135, gOamData_837E0B4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DB498, sub_80E2870
-
- .align 2
-gBattleAnimSpriteTemplate_83DB508:: @ 83DB508
- spr_template 10135, 10135, gOamData_837E0B4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DB498, sub_80E2908
-
- .align 2
-gBattleAnimSpriteTemplate_83DB520:: @ 83DB520
- spr_template 10285, 10285, gOamData_837E054, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80E2978
-
- .align 2
-gBattleAnimSpriteTemplate_83DB538:: @ 83DB538
- spr_template 10135, 10135, gOamData_837DF94, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DB498, sub_80E29C0
-
- .align 2
-gBattleAnimSpriteTemplate_83DB550:: @ 83DB550
- spr_template 10135, 10135, gOamData_837E0B4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DB498, sub_80E27E8
-
- .align 2
-gUnknown_083DB568:: @ 83DB568
-@ seems to be a src element in a LoadPalette call.
- .2byte 0x7FFF
diff --git a/data/pokedex_cry_screen.s b/data/pokedex_cry_screen.s
deleted file mode 100644
index 14ea1cfb8..000000000
--- a/data/pokedex_cry_screen.s
+++ /dev/null
@@ -1,116 +0,0 @@
- .include "include/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-CryMeterNeedlePalette: @ 83FA65C
- .incbin "graphics/pokedex/cry_meter_needle.gbapal"
-
- .align 2
-CryMeterNeedleTiles: @ 83FA67C
- .incbin "graphics/pokedex/cry_meter_needle.4bpp"
-
-.ifdef ENGLISH
- .align 1
-gUnknown_083FAE7C:: @ 83FAE7C
- .incbin "graphics/pokedex/cry_meter_map.bin"
-
- .align 1
-gUnknown_083FAF1C:: @ 83FAF1C
- .incbin "graphics/pokedex/cry_meter.gbapal"
-
- .align 2
-gUnknown_083FAF3C:: @ 83FAF3C
- .incbin "graphics/pokedex/cry_meter.4bpp.lz"
-.endif
-
- .align 1
-gUnknown_083FB274:: @ 83FB274
- .2byte 0x0,0x4,0x8,0xC,0x10,0x14,0x18,0x1C,0x400,0x404,0x408,0x40C,0x410,0x414,0x418,0x41C,0x800,0x804,0x808,0x80C,0x810,0x814,0x818,0x81C,0xC00,0xC04,0xC08,0xC0C,0xC10,0xC14,0xC18,0xC1C,0x1000,0x1004,0x1008,0x100C,0x1010,0x1014,0x1018,0x101C,0x1400,0x1404,0x1408,0x140C,0x1410,0x1414,0x1418,0x141C,0x1800,0x1804,0x1808,0x180C,0x1810,0x1814,0x1818,0x181C,0x1C00,0x1C04,0x1C08,0x1C0C,0x1C10,0x1C14,0x1C18,0x1C1C,0x2000,0x2004,0x2008,0x200C,0x2010,0x2014,0x2018,0x201C
- .2byte 0x0,0x4,0x8,0xC,0x10,0x14,0x18,0x1C,0x400,0x404,0x408,0x40C,0x410,0x414,0x418,0x41C,0x800,0x804,0x808,0x80C,0x810,0x814,0x818,0x81C,0xC00,0xC04,0xC08,0xC0C,0xC10,0xC14,0xC18,0xC1C,0x1000,0x1004,0x1008,0x100C,0x1010,0x1014,0x1018,0x101C,0x1400,0x1404,0x1408,0x140C,0x1410,0x1414,0x1418,0x141C,0x1800,0x1804,0x1808,0x180C,0x1810,0x1814,0x1818,0x181C,0x1C00,0x1C04,0x1C08,0x1C0C,0x1C10,0x1C14,0x1C18,0x1C1C,0x2000,0x2004,0x2008,0x200C,0x2010,0x2014,0x2018,0x201C
- .2byte 0x1,0x5,0x9,0xD,0x11,0x15,0x19,0x1D,0x401,0x405,0x409,0x40D,0x411,0x415,0x419,0x41D,0x801,0x805,0x809,0x80D,0x811,0x815,0x819,0x81D,0xC01,0xC05,0xC09,0xC0D,0xC11,0xC15,0xC19,0xC1D,0x1001,0x1005,0x1009,0x100D,0x1011,0x1015,0x1019,0x101D,0x1401,0x1405,0x1409,0x140D,0x1411,0x1415,0x1419,0x141D,0x1801,0x1805,0x1809,0x180D,0x1811,0x1815,0x1819,0x181D,0x1C01,0x1C05,0x1C09,0x1C0D,0x1C11,0x1C15,0x1C19,0x1C1D,0x2001,0x2005,0x2009,0x200D,0x2011,0x2015,0x2019,0x201D
- .2byte 0x1,0x5,0x9,0xD,0x11,0x15,0x19,0x1D,0x401,0x405,0x409,0x40D,0x411,0x415,0x419,0x41D,0x801,0x805,0x809,0x80D,0x811,0x815,0x819,0x81D,0xC01,0xC05,0xC09,0xC0D,0xC11,0xC15,0xC19,0xC1D,0x1001,0x1005,0x1009,0x100D,0x1011,0x1015,0x1019,0x101D,0x1401,0x1405,0x1409,0x140D,0x1411,0x1415,0x1419,0x141D,0x1801,0x1805,0x1809,0x180D,0x1811,0x1815,0x1819,0x181D,0x1C01,0x1C05,0x1C09,0x1C0D,0x1C11,0x1C15,0x1C19,0x1C1D,0x2001,0x2005,0x2009,0x200D,0x2011,0x2015,0x2019,0x201D
- .2byte 0x2,0x6,0xA,0xE,0x12,0x16,0x1A,0x1E,0x402,0x406,0x40A,0x40E,0x412,0x416,0x41A,0x41E,0x802,0x806,0x80A,0x80E,0x812,0x816,0x81A,0x81E,0xC02,0xC06,0xC0A,0xC0E,0xC12,0xC16,0xC1A,0xC1E,0x1002,0x1006,0x100A,0x100E,0x1012,0x1016,0x101A,0x101E,0x1402,0x1406,0x140A,0x140E,0x1412,0x1416,0x141A,0x141E,0x1802,0x1806,0x180A,0x180E,0x1812,0x1816,0x181A,0x181E,0x1C02,0x1C06,0x1C0A,0x1C0E,0x1C12,0x1C16,0x1C1A,0x1C1E,0x2002,0x2006,0x200A,0x200E,0x2012,0x2016,0x201A,0x201E
- .2byte 0x2,0x6,0xA,0xE,0x12,0x16,0x1A,0x1E,0x402,0x406,0x40A,0x40E,0x412,0x416,0x41A,0x41E,0x802,0x806,0x80A,0x80E,0x812,0x816,0x81A,0x81E,0xC02,0xC06,0xC0A,0xC0E,0xC12,0xC16,0xC1A,0xC1E,0x1002,0x1006,0x100A,0x100E,0x1012,0x1016,0x101A,0x101E,0x1402,0x1406,0x140A,0x140E,0x1412,0x1416,0x141A,0x141E,0x1802,0x1806,0x180A,0x180E,0x1812,0x1816,0x181A,0x181E,0x1C02,0x1C06,0x1C0A,0x1C0E,0x1C12,0x1C16,0x1C1A,0x1C1E,0x2002,0x2006,0x200A,0x200E,0x2012,0x2016,0x201A,0x201E
- .2byte 0x3,0x7,0xB,0xF,0x13,0x17,0x1B,0x1F,0x403,0x407,0x40B,0x40F,0x413,0x417,0x41B,0x41F,0x803,0x807,0x80B,0x80F,0x813,0x817,0x81B,0x81F,0xC03,0xC07,0xC0B,0xC0F,0xC13,0xC17,0xC1B,0xC1F,0x1003,0x1007,0x100B,0x100F,0x1013,0x1017,0x101B,0x101F,0x1403,0x1407,0x140B,0x140F,0x1413,0x1417,0x141B,0x141F,0x1803,0x1807,0x180B,0x180F,0x1813,0x1817,0x181B,0x181F,0x1C03,0x1C07,0x1C0B,0x1C0F,0x1C13,0x1C17,0x1C1B,0x1C1F,0x2003,0x2007,0x200B,0x200F,0x2013,0x2017,0x201B,0x201F
- .2byte 0x3,0x7,0xB,0xF,0x13,0x17,0x1B,0x1F,0x403,0x407,0x40B,0x40F,0x413,0x417,0x41B,0x41F,0x803,0x807,0x80B,0x80F,0x813,0x817,0x81B,0x81F,0xC03,0xC07,0xC0B,0xC0F,0xC13,0xC17,0xC1B,0xC1F,0x1003,0x1007,0x100B,0x100F,0x1013,0x1017,0x101B,0x101F,0x1403,0x1407,0x140B,0x140F,0x1413,0x1417,0x141B,0x141F,0x1803,0x1807,0x180B,0x180F,0x1813,0x1817,0x181B,0x181F,0x1C03,0x1C07,0x1C0B,0x1C0F,0x1C13,0x1C17,0x1C1B,0x1C1F,0x2003,0x2007,0x200B,0x200F,0x2013,0x2017,0x201B,0x201F
-
- .align 2
- .4byte gSharedMem + 0x1C000
-
- .align 1
-gUnknown_083FB6F8:: @ 83FB6F8
- .incbin "graphics/pokedex/83FB6F8.gbapal"
-
-gUnknown_083FB718:: @ 83FB718
- .byte 0x11
- .byte 0x11
- .byte 0x11
- .byte 0x11
- .byte 0x22
- .byte 0x22
- .byte 0x22
- .byte 0x22
- .byte 0x11
- .byte 0x11
- .byte 0x11
- .byte 0x11
- .byte 0x22
- .byte 0x22
- .byte 0x22
- .byte 0x22
- .byte 0x11
- .byte 0x11
- .byte 0x11
- .byte 0x11
- .byte 0x22
- .byte 0x22
- .byte 0x22
- .byte 0x22
- .byte 0x11
- .byte 0x11
- .byte 0x11
- .byte 0x11
- .byte 0x22
- .byte 0x22
- .byte 0x22
- .byte 0x22
-
-gUnknown_083FB738:: @ 83FB738
- .byte 0xF0, 0x0F
-
-gUnknown_083FB73A:: @ 83FB73A
- .byte 0x0F,0x0E,0x0D,0x0C,0x0B,0x0A,0x09,0x08,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F
- .byte 0xF0,0xE0,0xD0,0xC0,0xB0,0xA0,0x90,0x80,0x80,0x90,0xA0,0xB0,0xC0,0xD0,0xE0,0xF0
-
- .byte 0, 0, 0, 200, 1, 2
-
- .align 2
-gSpriteAnim_83FB760:: @ 83FB760
- obj_image_anim_frame 0, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83FB768:: @ 83FB768
- .4byte gSpriteAnim_83FB760
-
- .align 2
-gOamData_83FB76C:: @ 83FB76C
- .2byte 0x01A0
- .2byte 0xC000
- .2byte 0x0400
-
- .align 2
-gSpriteTemplate_83FB774:: @ 83FB774
- spr_template 8192, 8192, gOamData_83FB76C, gSpriteAnimTable_83FB768, NULL, gDummySpriteAffineAnimTable, sub_811A534
-
- .align 2
-gCryMeterNeedleSpriteSheets:: @ 83FB78C
- obj_tiles CryMeterNeedleTiles, 0x800, 8192
- null_obj_tiles
-
- .align 2
-gCryMeterNeedleSpritePalettes:: @ 83FB79C
- obj_pal CryMeterNeedlePalette, 8192
- null_obj_pal
diff --git a/graphics/pokedex/83FB718.png b/graphics/pokedex/83FB718.png
new file mode 100644
index 000000000..ef52a4138
--- /dev/null
+++ b/graphics/pokedex/83FB718.png
Binary files differ
diff --git a/include/battle_anim.h b/include/battle_anim.h
index ce9bb13de..b5b85625e 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -40,6 +40,79 @@ extern u8 gAnimFriendship;
extern u8 gAnimMoveTurn;
extern struct DisableStruct *gAnimDisableStructPtr;
+extern const struct OamData gOamData_837DF24;
+extern const struct OamData gOamData_837DF2C;
+extern const struct OamData gOamData_837DF34;
+extern const struct OamData gOamData_837DF3C;
+extern const struct OamData gOamData_837DF44;
+extern const struct OamData gOamData_837DF4C;
+extern const struct OamData gOamData_837DF54;
+extern const struct OamData gOamData_837DF5C;
+extern const struct OamData gOamData_837DF64;
+extern const struct OamData gOamData_837DF6C;
+extern const struct OamData gOamData_837DF74;
+extern const struct OamData gOamData_837DF7C;
+extern const struct OamData gOamData_837DF84;
+extern const struct OamData gOamData_837DF8C;
+extern const struct OamData gOamData_837DF94;
+extern const struct OamData gOamData_837DF9C;
+extern const struct OamData gOamData_837DFA4;
+extern const struct OamData gOamData_837DFAC;
+extern const struct OamData gOamData_837DFB4;
+extern const struct OamData gOamData_837DFBC;
+extern const struct OamData gOamData_837DFC4;
+extern const struct OamData gOamData_837DFCC;
+extern const struct OamData gOamData_837DFD4;
+extern const struct OamData gOamData_837DFDC;
+extern const struct OamData gOamData_837DFE4;
+extern const struct OamData gOamData_837DFEC;
+extern const struct OamData gOamData_837DFF4;
+extern const struct OamData gOamData_837DFFC;
+extern const struct OamData gOamData_837D004;
+extern const struct OamData gOamData_837D00C;
+extern const struct OamData gOamData_837E014;
+extern const struct OamData gOamData_837E01C;
+extern const struct OamData gOamData_837E024;
+extern const struct OamData gOamData_837E02C;
+extern const struct OamData gOamData_837E034;
+extern const struct OamData gOamData_837E03C;
+extern const struct OamData gOamData_837E044;
+extern const struct OamData gOamData_837E04C;
+extern const struct OamData gOamData_837E054;
+extern const struct OamData gOamData_837E05C;
+extern const struct OamData gOamData_837E064;
+extern const struct OamData gOamData_837E06C;
+extern const struct OamData gOamData_837E074;
+extern const struct OamData gOamData_837E07C;
+extern const struct OamData gOamData_837E084;
+extern const struct OamData gOamData_837E08C;
+extern const struct OamData gOamData_837E094;
+extern const struct OamData gOamData_837E09C;
+extern const struct OamData gOamData_837E0A4;
+extern const struct OamData gOamData_837E0AC;
+extern const struct OamData gOamData_837E0B4;
+extern const struct OamData gOamData_837E0BC;
+extern const struct OamData gOamData_837E0C4;
+extern const struct OamData gOamData_837E0CC;
+extern const struct OamData gOamData_837E0D4;
+extern const struct OamData gOamData_837E0DC;
+extern const struct OamData gOamData_837E0E4;
+extern const struct OamData gOamData_837E0EC;
+extern const struct OamData gOamData_837E0F4;
+extern const struct OamData gOamData_837E0FC;
+extern const struct OamData gOamData_837E104;
+extern const struct OamData gOamData_837E10C;
+extern const struct OamData gOamData_837E114;
+extern const struct OamData gOamData_837E11C;
+extern const struct OamData gOamData_837E124;
+extern const struct OamData gOamData_837E12C;
+extern const struct OamData gOamData_837E134;
+extern const struct OamData gOamData_837E13C;
+extern const struct OamData gOamData_837E144;
+extern const struct OamData gOamData_837E14C;
+extern const struct OamData gOamData_837E154;
+extern const struct OamData gOamData_837E15C;
+
void DoMoveAnim(u16 move);
void LaunchBattleAnimation(const u8 *const moveAnims[], u16 b, u8 c);
bool8 IsAnimBankSpriteVisible(u8 a);
diff --git a/include/ewram.h b/include/ewram.h
index 6b164648b..87af8dd53 100644
--- a/include/ewram.h
+++ b/include/ewram.h
@@ -248,7 +248,6 @@ extern u8 gSharedMem[];
#define ewram1c000 (*(struct Unk201C000 *)(gSharedMem + 0x1C000)) // FIXME, names too similar
#define eHallOfFameMons1 (struct HallofFameMons*)(&gSharedMem[0x1C000])
#define eHOFPCScreenEffect (*(struct PCScreenEffectStruct *)(gSharedMem + 0x1c000))
-#define EWRAM_1C800 (*(struct Unk201C800 *)(gSharedMem + 0x1C800))
#define ewram1D000 ((struct Pokemon *)(gSharedMem + 0x1D000))
#define ewram1D000_2 ((u16 *)(gSharedMem + 0x1D000))
#define ewram1D400 ((u16 *)(gSharedMem + 0x1D400))
diff --git a/include/main.h b/include/main.h
index f348e48f8..8a7c4d67c 100644
--- a/include/main.h
+++ b/include/main.h
@@ -65,5 +65,6 @@ void DoSoftReset(void);
void ClearPokemonCrySongs(void);
extern const char BuildDateTime[];
+extern s8 gPcmDmaCounter;
#endif // GUARD_MAIN_H
diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h
index 7215e7fb3..9ce2d5f3e 100644
--- a/include/rom_8077ABC.h
+++ b/include/rom_8077ABC.h
@@ -106,5 +106,7 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite);
void sub_80789D4(bool8 a1);
void sub_8079AB8(u8 sprite, u8 sprite2);
u8 sub_807A4A0(int bank, u8 sprite, int species);
+void sub_80794A8(struct Sprite *sprite);
+void sub_807A9BC(struct Sprite *sprite);
#endif // GUARD_ROM_8077ABC_H
diff --git a/include/sprite.h b/include/sprite.h
index 3ad418356..9a5deb3c4 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -100,12 +100,19 @@ struct AffineAnimJumpCmd
u16 target;
};
+struct AffineAnimEndCmdAlt
+{
+ s16 type;
+ u16 val;
+};
+
union AffineAnimCmd
{
s16 type;
struct AffineAnimFrameCmd frame;
struct AffineAnimLoopCmd loop;
struct AffineAnimJumpCmd jump;
+ struct AffineAnimEndCmdAlt end; // unused in code
};
#define AFFINEANIMCMDTYPE_LOOP 0x7FFD
@@ -120,6 +127,8 @@ union AffineAnimCmd
{.jump = {.type = AFFINEANIMCMDTYPE_JUMP, .target = _target}}
#define AFFINEANIMCMD_END \
{.type = AFFINEANIMCMDTYPE_END}
+#define AFFINEANIMCMD_END_ALT(_val) \
+ {.end = {.type = AFFINEANIMCMDTYPE_END, .val = _val}}
struct AffineAnimState
{
diff --git a/ld_script.txt b/ld_script.txt
index a0c9a8bb7..52f66c537 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -181,7 +181,6 @@ SECTIONS {
src/battle/anim/seed.o(.text);
src/battle/anim/orbit.o(.text);
src/battle/anim/leaf.o(.text);
- src/battle/anim/cutter.o(.text);
src/battle/anim/tendrils.o(.text);
src/battle/anim/silhouette.o(.text);
src/battle/anim/copy_orb.o(.text);
@@ -205,28 +204,20 @@ SECTIONS {
src/battle/anim/unused_3.o(.text);
src/battle/anim/sleep.o(.text);
src/battle/anim/scan.o(.text);
- src/battle/anim/lunge_1.o(.text);
- src/battle/anim/unused_4.o(.text);
- src/battle/anim/lunge_2.o(.text);
+ src/battle/anim/lunge.o(.text);
src/battle/anim/slash.o(.text);
src/battle/anim/brace.o(.text);
src/battle/anim/cube.o(.text);
- src/battle/anim/tile_in.o(.text);
- src/battle/anim/tile_out.o(.text);
+ src/battle/anim/tile.o(.text);
src/battle/anim/moon.o(.text);
src/battle/anim/twinkle.o(.text);
src/battle/anim/flash.o(.text);
src/battle/anim/strike.o(.text);
src/battle/anim/evasion.o(.text);
src/battle/anim/fang.o(.text);
- src/battle/anim/note_wave.o(.text);
- src/battle/anim/note_scatter.o(.text);
- src/battle/anim/drum.o(.text);
- src/battle/anim/note_scatter_2.o(.text);
+ src/battle/anim/musical.o(.text);
src/battle/anim/thought.o(.text);
- src/battle/anim/wave_finger.o(.text);
- src/battle/anim/spin_finger.o(.text);
- src/battle/anim/taunt_finger.o(.text);
+ src/battle/anim/finger.o(.text);
src/battle/anim/unused_5.o(.text);
src/battle/anim/unused_6.o(.text);
src/battle/anim/unused_7.o(.text);
@@ -235,7 +226,6 @@ SECTIONS {
src/battle/anim/alert.o(.text);
src/battle/anim/sword.o(.text);
src/battle/anim/sonic.o(.text);
- src/battle/anim/sonic_task.o(.text);
src/battle/anim/unused_9.o(.text);
src/battle/anim/money.o(.text);
src/battle/anim/bullet.o(.text);
@@ -251,11 +241,8 @@ SECTIONS {
src/battle/anim/thrashing.o(.text);
src/battle/anim/draw.o(.text);
src/battle/anim/ring.o(.text);
- src/battle/anim/egg.o(.text);
src/battle/anim/espeed.o(.text);
- src/battle/anim/smoke.o(.text);
- src/battle/anim/glow.o(.text);
- src/battle/anim/note_rain.o(.text);
+ src/battle/anim/heal_bell.o(.text);
src/battle/anim/heart_1.o(.text);
src/battle/anim/curtain.o(.text);
src/battle/anim/startle.o(.text);
@@ -264,8 +251,7 @@ SECTIONS {
src/battle/anim/flying_hearts.o(.text);
src/battle/anim/love_bg.o(.text);
src/battle/anim/scary_face.o(.text);
- src/battle/anim/orbit_fast.o(.text);
- src/battle/anim/orbit_scatter.o(.text);
+ src/battle/anim/hidden_power_orbit.o(.text);
src/battle/anim/spit.o(.text);
src/battle/anim/perceive.o(.text);
src/battle/anim/angel.o(.text);
@@ -287,24 +273,28 @@ SECTIONS {
src/battle/anim/fire.o(.text);
src/battle/anim/sunlight.o(.text);
src/battle/anim/fire_2.o(.text);
- src/battle/anim/heated_rock.o(.text);
src/battle/anim/wisp_orb.o(.text);
src/battle/anim/wisp_fire.o(.text);
src/battle/anim/thunder.o(.text);
src/battle/anim/beta_beat_up.o(.text);
src/battle/anim/shock.o(.text);
src/battle/anim/current.o(.text);
+ src/battle/anim/ice.o(.text);
asm/ice.o(.text);
src/battle/anim/fight.o(.text);
src/battle/anim/poison.o(.text);
+ src/battle/anim/flying.o(.text);
asm/flying.o(.text);
src/battle/anim/psychic.o(.text);
src/battle/anim/bug.o(.text);
src/battle/anim/rock.o(.text);
+ src/battle/anim/ghost.o(.text);
asm/ghost.o(.text);
src/battle/anim/dragon.o(.text);
src/battle/anim/dark.o(.text);
+ src/battle/anim/ground.o(.text);
asm/ground.o(.text);
+ src/battle/anim/normal.o(.text);
asm/normal.o(.text);
src/battle/anim/battle_intro.o(.text);
src/bike.o(.text);
@@ -343,9 +333,7 @@ SECTIONS {
src/pokedex_area_screen.o(.text);
src/evolution_scene.o(.text);
src/roulette.o(.text);
- asm/pokedex_cry_screen.o(.text);
src/pokedex_cry_screen.o(.text);
- asm/pokedex_cry_screen.o(.text_811A4F8);
src/coins.o(.text);
src/landmark.o(.text);
src/fldeff_strength.o(.text);
@@ -606,7 +594,111 @@ SECTIONS {
src/field_special_scene.o(.rodata);
src/rotating_gate.o(.rodata);
src/item_use.o(.rodata);
- data/battle_anim_80CA710.o(.rodata);
+ src/battle/anim/powder.o(.rodata);
+ src/battle/anim/orbs.o(.rodata);
+ src/battle/anim/seed.o(.rodata);
+ src/battle/anim/orbit.o(.rodata);
+ src/battle/anim/leaf.o(.rodata);
+ src/battle/anim/tendrils.o(.rodata);
+ src/battle/anim/copy_orb.o(.rodata);
+ src/battle/anim/roots.o(.rodata);
+ src/battle/anim/osmose.o(.rodata);
+ src/battle/anim/hop.o(.rodata);
+ src/battle/anim/heal.o(.rodata);
+ src/battle/anim/hop_2.o(.rodata);
+ src/battle/anim/switch.o(.rodata);
+ src/battle/anim/flying_path.o(.rodata);
+ src/battle/anim/flying_petals.o(.rodata);
+ src/battle/anim/shimmer.o(.rodata);
+ src/battle/anim/homing.o(.rodata);
+ src/battle/anim/whip.o(.rodata);
+ src/battle/anim/unused_1.o(.rodata);
+ src/battle/anim/slice.o(.rodata);
+ src/battle/anim/unused_2.o(.rodata);
+ src/battle/anim/shield.o(.rodata);
+ src/battle/anim/bottle.o(.rodata);
+ src/battle/anim/glitter.o(.rodata);
+ src/battle/anim/unused_3.o(.rodata);
+ src/battle/anim/sleep.o(.rodata);
+ src/battle/anim/scan.o(.rodata);
+ src/battle/anim/lunge.o(.rodata);
+ src/battle/anim/slash.o(.rodata);
+ src/battle/anim/brace.o(.rodata);
+ src/battle/anim/cube.o(.rodata);
+ src/battle/anim/tile.o(.rodata);
+ src/battle/anim/moon.o(.rodata);
+ src/battle/anim/twinkle.o(.rodata);
+ src/battle/anim/strike.o(.rodata);
+ src/battle/anim/fang.o(.rodata);
+ src/battle/anim/musical.o(.rodata);
+ src/battle/anim/thought.o(.rodata);
+ src/battle/anim/finger.o(.rodata);
+ src/battle/anim/unused_5.o(.rodata);
+ src/battle/anim/unused_6.o(.rodata);
+ src/battle/anim/unused_7.o(.rodata);
+ src/battle/anim/unused_8.o(.rodata);
+ src/battle/anim/alert.o(.rodata);
+ src/battle/anim/sword.o(.rodata);
+ src/battle/anim/sonic.o(.rodata);
+ src/battle/anim/egg.o(.rodata);
+ src/battle/anim/unused_9.o(.rodata);
+ src/battle/anim/money.o(.rodata);
+ src/battle/anim/bullet.o(.rodata);
+ src/battle/anim/cyclone.o(.rodata);
+ src/battle/anim/grip.o(.rodata);
+ src/battle/anim/guillotine.o(.rodata);
+ src/battle/anim/splash.o(.rodata);
+ src/battle/anim/grow.o(.rodata);
+ src/battle/anim/breath.o(.rodata);
+ src/battle/anim/anger.o(.rodata);
+ src/battle/anim/thrashing.o(.rodata);
+ src/battle/anim/draw.o(.rodata);
+ src/battle/anim/ring.o(.rodata);
+ src/battle/anim/espeed.o(.rodata);
+ src/battle/anim/heal_bell.o(.rodata);
+ src/battle/anim/heart_1.o(.rodata);
+ src/battle/anim/startle.o(.rodata);
+ src/battle/anim/blow_kiss.o(.rodata);
+ src/battle/anim/kiss_fountain.o(.rodata);
+ src/battle/anim/flying_hearts.o(.rodata);
+ src/battle/anim/hidden_power_orbit.o(.rodata);
+ src/battle/anim/spit.o(.rodata);
+ src/battle/anim/perceive.o(.rodata);
+ src/battle/anim/angel.o(.rodata);
+ src/battle/anim/angel_kiss.o(.rodata);
+ src/battle/anim/devil.o(.rodata);
+ src/battle/anim/swipe.o(.rodata);
+ src/battle/anim/struggle.o(.rodata);
+ src/battle/anim/uproar.o(.rodata);
+ src/battle/anim/noise.o(.rodata);
+ src/battle/anim/note_spin.o(.rodata);
+ src/battle/anim/guard.o(.rodata);
+ src/battle/anim/rain.o(.rodata);
+ src/battle/anim/bubble.o(.rodata);
+ src/battle/anim/aurora.o(.rodata);
+ src/battle/anim/energy_wave.o(.rodata);
+ src/battle/anim/water.o(.rodata);
+ src/battle/anim/fire.o(.rodata);
+ src/battle/anim/sunlight.o(.rodata);
+ src/battle/anim/fire_2.o(.rodata);
+ src/battle/anim/wisp_orb.o(.rodata);
+ src/battle/anim/wisp_fire.o(.rodata);
+ src/battle/anim/thunder.o(.rodata);
+ src/battle/anim/beta_beat_up.o(.rodata);
+ src/battle/anim/shock.o(.rodata);
+ src/battle/anim/current.o(.rodata);
+ src/battle/anim/ice.o(.rodata);
+ src/battle/anim/fight.o(.rodata);
+ src/battle/anim/poison.o(.rodata);
+ src/battle/anim/flying.o(.rodata);
+ src/battle/anim/psychic.o(.rodata);
+ src/battle/anim/bug.o(.rodata);
+ src/battle/anim/rock.o(.rodata);
+ src/battle/anim/ghost.o(.rodata);
+ src/battle/anim/dragon.o(.rodata);
+ src/battle/anim/dark.o(.rodata);
+ src/battle/anim/ground.o(.rodata);
+ src/battle/anim/normal.o(.rodata);
src/battle/anim/battle_intro.o(.rodata);
src/bike.o(.rodata);
src/easy_chat_1.o(.rodata);
@@ -635,7 +727,8 @@ SECTIONS {
src/pokedex_area_screen.o(.rodata);
src/evolution_scene.o(.rodata);
data/roulette.o(.rodata);
- data/pokedex_cry_screen.o(.rodata);
+ src/pokedex_cry_screen.o(.rodata);
+ src/pokedex_cry_screen.o(.data);
src/landmark.o(.rodata);
src/battle/battle_transition.o(.rodata);
src/battle/battle_controller_linkpartner.o(.rodata);
diff --git a/src/battle/anim/alert.c b/src/battle/anim/alert.c
index 72f8ec947..04ae15a5e 100644
--- a/src/battle/anim/alert.c
+++ b/src/battle/anim/alert.c
@@ -8,9 +8,40 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CF610(struct Sprite* sprite);
+
// alert (red thunder from the sides of a Pokemon, simulating more alert behavior.)
// Used in Kinesis.
+const union AnimCmd gSpriteAnim_83D7428[] =
+{
+ ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(24, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(40, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 3, .hFlip = TRUE),
+ ANIMCMD_LOOP(1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D744C[] =
+{
+ gSpriteAnim_83D7428,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7450 =
+{
+ .tileTag = 10075,
+ .paletteTag = 10075,
+ .oam = &gOamData_837DF54,
+ .anims = gSpriteAnimTable_83D744C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CF610,
+};
+
void sub_80CF610(struct Sprite* sprite)
{
sub_8078650(sprite);
diff --git a/src/battle/anim/angel.c b/src/battle/anim/angel.c
index 5ec083887..be5b82ea1 100644
--- a/src/battle/anim/angel.c
+++ b/src/battle/anim/angel.c
@@ -8,9 +8,33 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D2938(struct Sprite* sprite);
+
// angel (a little angel descends from somewhere towards a position)
// Used in Sweet Kiss.
+const union AnimCmd gSpriteAnim_83D7BAC[] =
+{
+ ANIMCMD_FRAME(0, 24),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7BB4[] =
+{
+ gSpriteAnim_83D7BAC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7BB8 =
+{
+ .tileTag = 10220,
+ .paletteTag = 10220,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7BB4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2938,
+};
+
void sub_80D2938(struct Sprite* sprite)
{
s16 r5;
diff --git a/src/battle/anim/angel_kiss.c b/src/battle/anim/angel_kiss.c
index d5be6e2af..64abff6cf 100644
--- a/src/battle/anim/angel_kiss.c
+++ b/src/battle/anim/angel_kiss.c
@@ -9,10 +9,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D2A38(struct Sprite* sprite);
+
// angel_kiss (a different variation of kiss_fountain.)
// Used in Sweet Kiss.
-void sub_80D29CC(struct Sprite* sprite)
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7BD0 =
+{
+ .tileTag = 10219,
+ .paletteTag = 10219,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2A38,
+};
+
+static void sub_80D29CC(struct Sprite* sprite)
{
sprite->data[5]++;
sprite->pos2.x = Sin(sprite->data[3], 5);
@@ -50,38 +63,3 @@ void sub_80D2A38(struct Sprite* sprite)
}
}
}
-
-// this is for the next file, but i didnt feel like deleting it from the original 80C file.
-/* void sub_80D2ABC(struct Sprite* sprite)
-{
- int var;
- s16 var2;
- int var3;
- if (sprite->data[3] == 0)
- {
- sprite->pos1.x += gBattleAnimArgs[0];
- sprite->pos1.y += gBattleAnimArgs[1];
- StartSpriteAnim(sprite, 0);
- sprite->subpriority = sub_8079E90(gAnimBankTarget) - 1;
- sprite->data[2] = 1;
- }
-
- sprite->data[0] += sprite->data[2];
- var = sprite->data[0] * 4;
- if (var < 0)
- var += 0xFF;
-
- sprite->data[1] = (sprite->data[0] * 4) -(((var) >> 8) << 8);
- if (sprite->data[1] < 0)
- sprite->data[1] = 0;
-
- var3 = sprite->data[1];
- var2 = sprite->data[0];
- var2 /= 4;
- sprite->pos2.x = Cos(var3, 30 - var2);
- var3 = sprite->data[1];
- var2 = sprite->data[0] / 8;
- sprite->pos2.x = Sin(var3, 10 - var2);
- if (sprite->data[1] > 0x80 && sprite->data[2] > 0)
- sprite->data[2] = 0xFFFF;
-} */
diff --git a/src/battle/anim/anger.c b/src/battle/anim/anger.c
index 4ea56636b..a50404ddf 100644
--- a/src/battle/anim/anger.c
+++ b/src/battle/anim/anger.c
@@ -8,9 +8,34 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D09C0(struct Sprite* sprite);
+
// anger (anger emotes, usually above the Pokemon's head, indicating annoyed emotions.)
// Used in Frustration, Rage, Swagger, Torment, and Taunt.
+const union AffineAnimCmd gSpriteAffineAnim_83D777C[] =
+{
+ AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF5, 0xFFF5, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7794[] =
+{
+ gSpriteAffineAnim_83D777C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7798 =
+{
+ .tileTag = 10087,
+ .paletteTag = 10087,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7794,
+ .callback = sub_80D09C0,
+};
+
void sub_80D09C0(struct Sprite* sprite)
{
u8 bank;
diff --git a/src/battle/anim/aurora.c b/src/battle/anim/aurora.c
index de145d6a4..5aff17f48 100644
--- a/src/battle/anim/aurora.c
+++ b/src/battle/anim/aurora.c
@@ -9,9 +9,51 @@ extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D33B4(struct Sprite *sprite);
static void sub_80D344C(struct Sprite *);
static void sub_80D34D4(u8);
+const union AnimCmd gSpriteAnim_83D9190[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9198[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D91A0[] =
+{
+ gSpriteAnim_83D9190,
+ gSpriteAnim_83D9198,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D91A8[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1),
+ AFFINEANIMCMD_FRAME(0x60, 0x60, 0, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D91C0[] =
+{
+ gSpriteAffineAnim_83D91A8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91C4 =
+{
+ .tileTag = 10140,
+ .paletteTag = 10140,
+ .oam = &gOamData_837E024,
+ .anims = gSpriteAnimTable_83D91A0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D91C0,
+ .callback = sub_80D33B4,
+};
+
void sub_80D33B4(struct Sprite *sprite)
{
s16 r6;
diff --git a/src/battle/anim/beta_beat_up.c b/src/battle/anim/beta_beat_up.c
index ee889492c..166782362 100644
--- a/src/battle/anim/beta_beat_up.c
+++ b/src/battle/anim/beta_beat_up.c
@@ -7,10 +7,35 @@ extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D6234(struct Sprite *sprite);
static void sub_80D6278(struct Sprite *);
// beta_beat_up
+const union AffineAnimCmd gSpriteAffineAnim_83D97E8[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 20),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 60),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9808[] =
+{
+ gSpriteAffineAnim_83D97E8,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D980C =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9808,
+ .callback = sub_80D6234,
+};
+
void sub_80D6234(struct Sprite *sprite)
{
if (GetBattlerSide(gAnimBankAttacker) != 0)
diff --git a/src/battle/anim/blow_kiss.c b/src/battle/anim/blow_kiss.c
index 6d762bc7f..0235794c2 100644
--- a/src/battle/anim/blow_kiss.c
+++ b/src/battle/anim/blow_kiss.c
@@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D1F58(struct Sprite* sprite);
static void sub_80D1FA4(struct Sprite* sprite);
// blow_kiss (a heart floating across the screen.)
// Used in Attract.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7AB0 =
+{
+ .tileTag = 10216,
+ .paletteTag = 10216,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D1F58,
+};
+
void sub_80D1F58(struct Sprite* sprite)
{
InitAnimSpritePos(sprite, 1);
@@ -25,7 +37,7 @@ void sub_80D1F58(struct Sprite* sprite)
sprite->callback = sub_80D1FA4;
}
-void sub_80D1FA4(struct Sprite* sprite)
+static void sub_80D1FA4(struct Sprite* sprite)
{
if (TranslateAnimSpriteByDeltas(sprite) == 0)
{
diff --git a/src/battle/anim/bottle.c b/src/battle/anim/bottle.c
index 0d5a54e18..83a539f89 100644
--- a/src/battle/anim/bottle.c
+++ b/src/battle/anim/bottle.c
@@ -8,12 +8,46 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CCF04(struct Sprite* sprite);
static void sub_80CCF70(struct Sprite* sprite);
static void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2);
// bottle (shows a bottle swinging back and forth.)
// Used by Milk Drink.
+const union AffineAnimCmd gSpriteAffineAnim_83D6C00[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6C10[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -2, 24),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6C40[] =
+{
+ gSpriteAffineAnim_83D6C00,
+ gSpriteAffineAnim_83D6C10,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6C48 =
+{
+ .tileTag = 10099,
+ .paletteTag = 10099,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6C40,
+ .callback = sub_80CCF04,
+};
+
void sub_80CCF04(struct Sprite* sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 2);
@@ -30,7 +64,7 @@ void sub_80CCF04(struct Sprite* sprite)
sprite->callback = sub_80CCF70;
}
-void sub_80CCF70(struct Sprite* sprite)
+static void sub_80CCF70(struct Sprite* sprite)
{
switch (sprite->data[0])
{
@@ -103,7 +137,7 @@ void sub_80CCF70(struct Sprite* sprite)
}
}
-void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2)
+static void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2)
{
if (sprite->data[3] <= 11)
sprite->data[4] += 2;
diff --git a/src/battle/anim/brace.c b/src/battle/anim/brace.c
index a81af73ac..89330788c 100644
--- a/src/battle/anim/brace.c
+++ b/src/battle/anim/brace.c
@@ -8,11 +8,37 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CDF0C(struct Sprite* sprite);
static void sub_80CDF70(struct Sprite* sprite);
// brace (the Pokemon prepares to endure a hit)
// Used in Endure.
+const union AnimCmd gSpriteAnim_83D6E80[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(8, 12),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(24, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6E94[] =
+{
+ gSpriteAnim_83D6E80,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_EndureFlame =
+{
+ .tileTag = 10184,
+ .paletteTag = 10184,
+ .oam = &gOamData_837DF74,
+ .anims = gSpriteAnimTable_83D6E94,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CDF0C,
+};
+
void sub_80CDF0C(struct Sprite* sprite)
{
if (gBattleAnimArgs[0] == 0)
@@ -31,7 +57,7 @@ void sub_80CDF0C(struct Sprite* sprite)
sprite->callback = sub_80CDF70;
}
-void sub_80CDF70(struct Sprite* sprite)
+static void sub_80CDF70(struct Sprite* sprite)
{
if (++sprite->data[0] > sprite->data[1])
{
diff --git a/src/battle/anim/breath.c b/src/battle/anim/breath.c
index 58b5066c0..87c737fac 100644
--- a/src/battle/anim/breath.c
+++ b/src/battle/anim/breath.c
@@ -8,9 +8,46 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D0930(struct Sprite* sprite);
+
// breath (a puff of smoke, usually from the mouth or nose of the Pokemon.)
// Used in Swagger and Bulk Up.
+const union AnimCmd gSpriteAnim_83D7734[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 40, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(12, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D7748[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(4, 40),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(12, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D775C[] =
+{
+ gSpriteAnim_83D7734,
+ gSpriteAnim_83D7748,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7764 =
+{
+ .tileTag = 10086,
+ .paletteTag = 10086,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D775C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D0930,
+};
+
void sub_80D0930(struct Sprite* sprite)
{
if (GetBattlerSide(gAnimBankAttacker) == 0)
diff --git a/src/battle/anim/bubble.c b/src/battle/anim/bubble.c
index 27791eedf..e024091d7 100644
--- a/src/battle/anim/bubble.c
+++ b/src/battle/anim/bubble.c
@@ -8,6 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D31C8(struct Sprite* sprite);
static void sub_80D32E8(struct Sprite *sprite);
static void sub_80D3370(struct Sprite *sprite);
static void sub_80D3398(struct Sprite *sprite);
@@ -15,6 +16,42 @@ static void sub_80D3398(struct Sprite *sprite);
// bubble (indidivual bubble that floats around)
// Used in Bubble and Bubblebeam
+const union AffineAnimCmd gSpriteAffineAnim_83D9148[] =
+{
+ AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 10),
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9160[] =
+{
+ gSpriteAffineAnim_83D9148,
+};
+
+const union AnimCmd gSpriteAnim_83D9164[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9174[] =
+{
+ gSpriteAnim_83D9164,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9178 =
+{
+ .tileTag = 10146,
+ .paletteTag = 10146,
+ .oam = &gOamData_837E0AC,
+ .anims = gSpriteAnimTable_83D9174,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9160,
+ .callback = sub_80D31C8,
+};
+
void sub_80D31C8(struct Sprite* sprite)
{
u8 newSpriteId;
diff --git a/src/battle/anim/bug.c b/src/battle/anim/bug.c
index 245e45774..c4c7fe937 100644
--- a/src/battle/anim/bug.c
+++ b/src/battle/anim/bug.c
@@ -3,18 +3,202 @@
#include "contest.h"
#include "rom_8077ABC.h"
#include "trig.h"
-// #include "util.h"
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80DC824(struct Sprite *sprite);
+void sub_80DC8F4(struct Sprite *sprite);
+void sub_80DC9A0(struct Sprite *sprite);
+void sub_80DCA70(struct Sprite *sprite);
+void sub_80DCB38(struct Sprite *sprite);
+void AnimTranslateStinger(struct Sprite *sprite);
+void AnimMissileArc(struct Sprite *sprite);
+void sub_80DCE40(struct Sprite *sprite);
static void sub_80DCA38(struct Sprite *sprite);
static void sub_80DCAEC(struct Sprite *sprite);
static void sub_80DCB5C(struct Sprite *sprite);
static void sub_80DCBB4(struct Sprite *sprite);
static void AnimMissileArcStep(struct Sprite *sprite);
+const union AffineAnimCmd gSpriteAffineAnim_83DAA80[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 30, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAA90[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -99, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAAA0[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 94, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAAB0[] =
+{
+ gSpriteAffineAnim_83DAA80,
+ gSpriteAffineAnim_83DAA90,
+ gSpriteAffineAnim_83DAAA0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAABC =
+{
+ .tileTag = 10153,
+ .paletteTag = 10153,
+ .oam = &gOamData_837E014,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DAAB0,
+ .callback = sub_80DC824,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAAD4[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -33, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAAE4[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 96, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAAF4[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -96, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAB04[] =
+{
+ gSpriteAffineAnim_83DAAD4,
+ gSpriteAffineAnim_83DAAE4,
+ gSpriteAffineAnim_83DAAF4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAB10 =
+{
+ .tileTag = 10161,
+ .paletteTag = 10161,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DAB04,
+ .callback = sub_80DC8F4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAB28 =
+{
+ .tileTag = 10180,
+ .paletteTag = 10180,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DC9A0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAB40 =
+{
+ .tileTag = 10179,
+ .paletteTag = 10179,
+ .oam = &gOamData_837DF5C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DCA70,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAB58[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x6, 0x6, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAB70[] =
+{
+ gSpriteAffineAnim_83DAB58,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAB74 =
+{
+ .tileTag = 10181,
+ .paletteTag = 10181,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DAB70,
+ .callback = sub_80DCB38,
+};
+
+const struct SpriteTemplate gLinearStingerSpriteTemplate =
+{
+ .tileTag = 10161,
+ .paletteTag = 10161,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimTranslateStinger,
+};
+
+const struct SpriteTemplate gPinMissileSpriteTemplate =
+{
+ .tileTag = 10161,
+ .paletteTag = 10161,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMissileArc,
+};
+
+const struct SpriteTemplate gIcicleSpearSpriteTemplate =
+{
+ .tileTag = 10262,
+ .paletteTag = 10262,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMissileArc,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DABD4[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 18),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 8),
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 8),
+ AFFINEANIMCMD_LOOP(5),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAC0C[] =
+{
+ gSpriteAffineAnim_83DABD4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAC10 =
+{
+ .tileTag = 10212,
+ .paletteTag = 10212,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DAC0C,
+ .callback = sub_80DCE40,
+};
+
// used in Move_MEGAHORN
void sub_80DC824(struct Sprite *sprite)
{
diff --git a/src/battle/anim/bullet.c b/src/battle/anim/bullet.c
index 035adf394..764903247 100644
--- a/src/battle/anim/bullet.c
+++ b/src/battle/anim/bullet.c
@@ -9,12 +9,35 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CFFD8(struct Sprite* sprite);
static void sub_80D0030(struct Sprite* sprite);
static void sub_80D00B4(struct Sprite* sprite);
// bullet (shoot seeds as ammunition.)
// Used by Bullet Seed.
+const union AffineAnimCmd gSpriteAffineAnim_83D7614[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7624[] =
+{
+ gSpriteAffineAnim_83D7614,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7628 =
+{
+ .tileTag = 10006,
+ .paletteTag = 10006,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7624,
+ .callback = sub_80CFFD8,
+};
+
void sub_80CFFD8(struct Sprite* sprite)
{
InitAnimSpritePos(sprite, 1);
@@ -26,7 +49,7 @@ void sub_80CFFD8(struct Sprite* sprite)
StoreSpriteCallbackInData(sprite, sub_80D0030);
}
-void sub_80D0030(struct Sprite* sprite)
+static void sub_80D0030(struct Sprite* sprite)
{
int i;
u16 rand;
@@ -50,7 +73,7 @@ void sub_80D0030(struct Sprite* sprite)
sprite->affineAnimPaused = 0;
}
-void sub_80D00B4(struct Sprite* sprite)
+static void sub_80D00B4(struct Sprite* sprite)
{
sprite->data[0] += sprite->data[7];
sprite->pos2.x = sprite->data[0] >> 8;
diff --git a/src/battle/anim/copy_orb.c b/src/battle/anim/copy_orb.c
index ac60d2c2b..d554a7e26 100644
--- a/src/battle/anim/copy_orb.c
+++ b/src/battle/anim/copy_orb.c
@@ -7,9 +7,40 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern const union AnimCmd *const gSpriteAnimTable_83D62D4[];
+
+void sub_80CB4CC(struct Sprite* sprite);
+
// copy_orb
// Used in Mimic.
+const union AffineAnimCmd gSpriteAffineAnim_83D65B8[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 0),
+ AFFINEANIMCMD_FRAME(48, 48, 0, 14),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D65D0[] = {
+ AFFINEANIMCMD_FRAME(-16, -16, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D65E0[] = {
+ gSpriteAffineAnim_83D65B8,
+ gSpriteAffineAnim_83D65D0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D65E8 =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83D62D4,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D65E0,
+ .callback = sub_80CB4CC,
+};
+
void sub_80CB4CC(struct Sprite* sprite)
{
switch (sprite->data[0])
diff --git a/src/battle/anim/cube.c b/src/battle/anim/cube.c
index 6fef2de69..9d713ba46 100644
--- a/src/battle/anim/cube.c
+++ b/src/battle/anim/cube.c
@@ -9,11 +9,47 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CDFB0(struct Sprite* sprite);
static void sub_80CE000(struct Sprite* sprite);
// cube (shows a sphere sharpening into a cube.)
// Used in Sharpen.
+const union AnimCmd gSpriteAnim_83D6EB0[] =
+{
+ ANIMCMD_FRAME(0, 18),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 18),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 18),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 18),
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_FRAME(64, 18),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_FRAME(64, 54),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6EEC[] =
+{
+ gSpriteAnim_83D6EB0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6EF0 =
+{
+ .tileTag = 10185,
+ .paletteTag = 10185,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6EEC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CDFB0,
+};
+
void sub_80CDFB0(struct Sprite* sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
@@ -27,7 +63,7 @@ void sub_80CDFB0(struct Sprite* sprite)
sprite->callback = sub_80CE000;
}
-void sub_80CE000(struct Sprite* sprite)
+static void sub_80CE000(struct Sprite* sprite)
{
if (++sprite->data[0] >= sprite->data[1])
{
diff --git a/src/battle/anim/current.c b/src/battle/anim/current.c
index af9003e87..af72edef0 100755
--- a/src/battle/anim/current.c
+++ b/src/battle/anim/current.c
@@ -12,14 +12,20 @@ extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern u8 gAnimVisualTaskCount;
-extern const struct SpriteTemplate gSpriteTemplate_83D9938;
-extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9950;
-extern const struct SpriteTemplate gSpriteTemplate_83D99B8;
-extern const struct SpriteTemplate gSpriteTemplate_83D9B10;
-extern const struct SpriteTemplate gSpriteTemplate_83D9B40;
extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83D97D0;
-extern s8 gUnknown_083D9968[][2];
+void sub_80D648C(struct Sprite *sprite);
+void sub_80D65DC(struct Sprite *sprite);
+void sub_80D6658(struct Sprite *sprite);
+void sub_80D679C(struct Sprite *sprite);
+void sub_80D6A1C(struct Sprite *sprite);
+void sub_80D6A6C(struct Sprite *sprite);
+void sub_80D6D18(struct Sprite *sprite);
+void sub_80D6D70(struct Sprite *sprite);
+void sub_80D6DD8(struct Sprite *sprite);
+void sub_80D7230(struct Sprite *sprite);
+void sub_80D727C(struct Sprite *sprite);
+void sub_80D755C(struct Sprite *sprite);
static void sub_80D6514(struct Sprite *sprite);
static void sub_80D672C(struct Sprite *sprite);
static void sub_80D6874(u8 taskId);
@@ -32,6 +38,323 @@ static bool8 sub_80D7470(struct Task *task, u8 taskId);
static bool8 sub_80D7654(struct Task *task, u8 taskId);
static void sub_80D76C4(struct Sprite *sprite);
+const union AffineAnimCmd gSpriteAffineAnim_83D988C[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D989C[] =
+{
+ gSpriteAffineAnim_83D988C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D98A0 =
+{
+ .tileTag = 10011,
+ .paletteTag = 10011,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D989C,
+ .callback = sub_80D648C,
+};
+
+const union AnimCmd gSpriteAnim_83D98B8[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D98C8[] =
+{
+ gSpriteAnim_83D98B8,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D98CC[] =
+{
+ AFFINEANIMCMD_FRAME(0xE8, 0xE8, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 10),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 10),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D98EC[] =
+{
+ gSpriteAffineAnim_83D98CC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D98F0 =
+{
+ .tileTag = 10282,
+ .paletteTag = 10282,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D98C8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D98EC,
+ .callback = sub_80D65DC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9908 =
+{
+ .tileTag = 10011,
+ .paletteTag = 10011,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D989C,
+ .callback = sub_80D6658,
+};
+
+const struct SpriteTemplate gElectricitySpriteTemplate =
+{
+ .tileTag = 10011,
+ .paletteTag = 10011,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D679C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9938 =
+{
+ .tileTag = 10001,
+ .paletteTag = 10001,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D6A1C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9950 =
+{
+ .tileTag = 10173,
+ .paletteTag = 10173,
+ .oam = &gOamData_837DF54,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D6A6C,
+};
+
+const s8 gUnknown_083D9968[][2] =
+{
+ { 58, -60},
+ {-56, -36},
+ { 8, -56},
+ {-16, 56},
+ { 58, -10},
+ {-58, 10},
+ { 48, -18},
+ {-8, 56},
+ { 16, -56},
+ {-58, -42},
+ { 58, 30},
+ {-48, 40},
+ { 12, -48},
+ { 48, -12},
+ {-56, 18},
+ { 48, 48},
+};
+
+const union AnimCmd gSpriteAnim_83D9988[] =
+{
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D999C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D99B0[] =
+{
+ gSpriteAnim_83D9988,
+ gSpriteAnim_83D999C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D99B8 =
+{
+ .tileTag = 10211,
+ .paletteTag = 10211,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D99B0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D99D0[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 60),
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFC, 0, 5),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 5),
+ AFFINEANIMCMD_LOOP(10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9A10[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 30),
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFC, 0, 5),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 5),
+ AFFINEANIMCMD_JUMP(3),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9A40[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 30),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 30),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9A60[] =
+{
+ gSpriteAffineAnim_83D99D0,
+ gSpriteAffineAnim_83D9A10,
+ gSpriteAffineAnim_83D9A40,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9A6C =
+{
+ .tileTag = 10212,
+ .paletteTag = 10212,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9A60,
+ .callback = sub_80D6D18,
+};
+
+const union AnimCmd gSpriteAnim_83D9A84[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9A98[] =
+{
+ gSpriteAnim_83D9A84,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9A9C =
+{
+ .tileTag = 10213,
+ .paletteTag = 10213,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9A98,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D6D70,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9AB4 =
+{
+ .tileTag = 10212,
+ .paletteTag = 10212,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9A60,
+ .callback = sub_80D6DD8,
+};
+
+const union AnimCmd gSpriteAnim_83D9ACC[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9AD4[] =
+{
+ ANIMCMD_FRAME(2, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9ADC[] =
+{
+ ANIMCMD_FRAME(4, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9AE4[] =
+{
+ ANIMCMD_FRAME(6, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9AEC[] =
+{
+ gSpriteAnim_83D9ACC,
+ gSpriteAnim_83D9AD4,
+ gSpriteAnim_83D9ADC,
+ gSpriteAnim_83D9AE4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9AFC[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9B0C[] =
+{
+ gSpriteAffineAnim_83D9AFC,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9B10 =
+{
+ .tileTag = 10001,
+ .paletteTag = 10001,
+ .oam = &gOamData_837E024,
+ .anims = gSpriteAnimTable_83D9AEC,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9B0C,
+ .callback = sub_80D7230,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9B28 =
+{
+ .tileTag = 10212,
+ .paletteTag = 10212,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9A60,
+ .callback = sub_80D727C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9B40 =
+{
+ .tileTag = 10001,
+ .paletteTag = 10001,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D755C,
+};
void sub_80D648C(struct Sprite *sprite)
{
diff --git a/src/battle/anim/cutter.c b/src/battle/anim/cutter.c
deleted file mode 100644
index bc7478053..000000000
--- a/src/battle/anim/cutter.c
+++ /dev/null
@@ -1,144 +0,0 @@
-#include "global.h"
-#include "battle.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite);
-static void AnimMoveTwisterParticleStep(struct Sprite* sprite);
-
-// Animates a sprite that moves linearly from one location to another, with a
-// single-cycle sine wave added to the y position along the way.
-// Used by Razor Leaf and Magical Leaf.
-// arg 0: initial x offset
-// arg 1: initial y offset
-// arg 2: target x offset
-// arg 3: target y offset
-// arg 4: translation duration
-// arg 5: wave amplitude
-// arg 6: target between double battle opponents (boolean)
-void AnimTranslateLinearSingleSineWave(struct Sprite* sprite)
-{
- InitAnimSpritePos(sprite, 1);
- if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
- {
- gBattleAnimArgs[2] = -gBattleAnimArgs[2];
- }
-
- sprite->data[0] = gBattleAnimArgs[4];
- if (!gBattleAnimArgs[6])
- {
- sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2];
- sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3];
- }
- else
- {
- SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]);
- sprite->data[2] += gBattleAnimArgs[2];
- sprite->data[4] += gBattleAnimArgs[3];
- }
-
- sprite->data[5] = gBattleAnimArgs[5];
- InitAnimSpriteTranslationOverDuration(sprite);
- if (GetBattlerSide(gAnimBankAttacker) == GetBattlerSide(gAnimBankTarget))
- {
- sprite->data[0] = 1;
- }
- else
- {
- sprite->data[0] = 0;
- }
-
- sprite->callback = AnimTranslateLinearSingleSineWaveStep;
-}
-
-static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite)
-{
- bool8 destroy = FALSE;
- s16 a = sprite->data[0];
- s16 b = sprite->data[7];
- s16 r0;
-
- sprite->data[0] = 1;
- TranslateAnimSpriteLinearAndSine(sprite);
- r0 = sprite->data[7];
- sprite->data[0] = a;
- if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0)
- sprite->oam.affineParam++;
-
- if (sprite->oam.affineParam != 0 && sprite->data[0] != 0)
- {
- sprite->invisible ^= 1;
- sprite->oam.affineParam++;
- if (sprite->oam.affineParam == 0x1E)
- destroy = TRUE;
- }
-
- if (sprite->pos1.x + sprite->pos2.x > 256
- || sprite->pos1.x + sprite->pos2.x < -16
- || sprite->pos1.y + sprite->pos2.y > 160
- || sprite->pos1.y + sprite->pos2.y < -16)
- destroy = TRUE;
-
- if (destroy)
- DestroyAnimSprite(sprite);
-}
-
-// Animates particles in the Twister move animation.
-// arg 0: duration
-// arg 1: total y delta (the particles rise upward)
-// arg 2: wave period (higher means faster wave)
-// arg 3: wave amplitude
-// arg 4: speedup frame (particles move faster at the end of the animation)
-void AnimMoveTwisterParticle(struct Sprite* sprite)
-{
- if (!IsContest() && IsDoubleBattle() == TRUE)
- {
- SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y);
- }
-
- sprite->pos1.y += 32;
- sprite->data[0] = gBattleAnimArgs[0];
- sprite->data[1] = gBattleAnimArgs[1];
- sprite->data[2] = gBattleAnimArgs[2];
- sprite->data[3] = gBattleAnimArgs[3];
- sprite->data[4] = gBattleAnimArgs[4];
- sprite->callback = AnimMoveTwisterParticleStep;
-}
-
-static void AnimMoveTwisterParticleStep(struct Sprite* sprite)
-{
- if (sprite->data[1] == 0xFF)
- {
- sprite->pos1.y -= 2;
- }
- else if (sprite->data[1] > 0)
- {
- sprite->pos1.y -= 2;
- sprite->data[1] -= 2;
- }
-
- sprite->data[5] += sprite->data[2];
- if (sprite->data[0] < sprite->data[4])
- sprite->data[5] += sprite->data[2];
-
- sprite->data[5] &= 0xFF;
- sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]);
- sprite->pos2.y = Sin(sprite->data[5], 5);
- if (sprite->data[5] <= 0x7F)
- {
- sprite->oam.priority = sub_8079ED4(gAnimBankTarget) - 1;
- }
- else
- {
- sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1;
- }
-
- sprite->data[0]--;
- if (!sprite->data[0])
- DestroyAnimSprite(sprite);
-}
diff --git a/src/battle/anim/cyclone.c b/src/battle/anim/cyclone.c
index 9bfa95e92..8b868a436 100644
--- a/src/battle/anim/cyclone.c
+++ b/src/battle/anim/cyclone.c
@@ -8,9 +8,34 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D0118(struct Sprite* sprite);
+
// cyclone (creates a circling motion like a cyclone, usually a wind sprite.)
// Used in Razor Wind.
+const union AffineAnimCmd gSpriteAffineAnim_83D7640[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x0, 0, 40),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7658[] =
+{
+ gSpriteAffineAnim_83D7640,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D765C =
+{
+ .tileTag = 10009,
+ .paletteTag = 10009,
+ .oam = &gOamData_837DFDC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7658,
+ .callback = sub_80D0118,
+};
+
void sub_80D0118(struct Sprite* sprite)
{
InitAnimSpritePos(sprite, 0);
diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c
index 55d500950..a7026edff 100644
--- a/src/battle/anim/dark.c
+++ b/src/battle/anim/dark.c
@@ -28,6 +28,10 @@ extern const u8 gUnknown_08D1D574[];
extern const u8 gUnknown_08D1D410[];
extern const u16 gUnknown_08D1D54C[];
+void sub_80DFE14(struct Sprite *sprite);
+void sub_80DFF1C(struct Sprite *sprite);
+void sub_80DFFD0(struct Sprite *sprite);
+void sub_80E0A10(struct Sprite *sprite);
static void sub_80DFE90(struct Sprite *sprite);
static void sub_80DFC9C(u8 taskId);
static void sub_80DFD58(u8 taskId);
@@ -40,6 +44,166 @@ static void sub_80E08CC(u8 priority);
static void sub_80E079C(struct Task *task);
static void sub_80E0CD0(u8 taskId);
+const struct SpriteTemplate gSpriteTemplate_83DB118 =
+{
+ .tileTag = 10015,
+ .paletteTag = 10015,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DFE14,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB130[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB140[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 32, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB150[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 64, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB160[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 96, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB170[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -128, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB180[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -96, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB190[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -64, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB1A0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -32, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB1B0[] =
+{
+ gSpriteAffineAnim_83DB130,
+ gSpriteAffineAnim_83DB140,
+ gSpriteAffineAnim_83DB150,
+ gSpriteAffineAnim_83DB160,
+ gSpriteAffineAnim_83DB170,
+ gSpriteAffineAnim_83DB180,
+ gSpriteAffineAnim_83DB190,
+ gSpriteAffineAnim_83DB1A0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB1D0 =
+{
+ .tileTag = 10139,
+ .paletteTag = 10139,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB1B0,
+ .callback = sub_80DFF1C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB1E8 =
+{
+ .tileTag = 10145,
+ .paletteTag = 10145,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB1B0,
+ .callback = sub_80DFF1C,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB200[] =
+{
+ AFFINEANIMCMD_FRAME(0xC0, 0xC0, 80, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -2, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB218[] =
+{
+ AFFINEANIMCMD_FRAME(0xC0, 0xC0, -80, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB230[] =
+{
+ gSpriteAffineAnim_83DB200,
+ gSpriteAffineAnim_83DB218,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB238 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB230,
+ .callback = sub_80DFFD0,
+};
+
+const union AnimCmd gSpriteAnim_83DB250[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DB268[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DB280[] =
+{
+ gSpriteAnim_83DB250,
+ gSpriteAnim_83DB268,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB288 =
+{
+ .tileTag = 10039,
+ .paletteTag = 10039,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DB280,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E0A10,
+};
// used in Smoke Ball escape, Sky Attack, Feint Attack and Camouflage
void sub_80DFC24(u8 taskId)
diff --git a/src/battle/anim/devil.c b/src/battle/anim/devil.c
index c628abfc0..8183be2ba 100644
--- a/src/battle/anim/devil.c
+++ b/src/battle/anim/devil.c
@@ -7,6 +7,37 @@
extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankTarget;
+void sub_80D2ABC(struct Sprite *sprite);
+
+const union AnimCmd gSpriteAnim_83D7BE8[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_83D7BF0[] =
+{
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7BF8[] =
+{
+ gSpriteAnim_83D7BE8,
+ gSpriteAnim_83D7BF0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7C00 =
+{
+ .tileTag = 10221,
+ .paletteTag = 10221,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2ABC,
+};
+
void sub_80D2ABC(struct Sprite *sprite)
{
if (sprite->data[3] == 0)
diff --git a/src/battle/anim/dragon.c b/src/battle/anim/dragon.c
index 4c8448636..163529ecb 100644
--- a/src/battle/anim/dragon.c
+++ b/src/battle/anim/dragon.c
@@ -5,13 +5,6 @@
#include "sound.h"
#include "scanline_effect.h"
-void sub_80DF81C(struct Sprite *sprite);
-void sub_80DFBD8(struct Sprite *sprite);
-
-void sub_80DF9F4(u8 taskId);
-
-void sub_80DFAB0(struct Task *task);
-
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
@@ -21,6 +14,187 @@ extern u16 gBattle_BG2_X;
extern u16 gUnknown_03000730[];
extern u8 gBankSpriteIds[];
+void sub_80DF5A0(struct Sprite *sprite);
+void sub_80DF760(struct Sprite *sprite);
+void sub_80DF6F0(struct Sprite *sprite);
+void sub_80DF760(struct Sprite *sprite);
+void sub_80DF78C(struct Sprite *sprite);
+void sub_80DFB28(struct Sprite *sprite);
+static void sub_80DF81C(struct Sprite *sprite);
+static void sub_80DFBD8(struct Sprite *sprite);
+static void sub_80DF9F4(u8 taskId);
+static void sub_80DFAB0(struct Task *task);
+
+const union AnimCmd gSpriteAnim_83DAFB0[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DAFC8[] =
+{
+ gSpriteAnim_83DAFB0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAFCC =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DAFC8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DF5A0,
+};
+
+const union AnimCmd gSpriteAnim_83DAFE4[] =
+{
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_83DAFF4[] =
+{
+ ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DB004[] =
+{
+ gSpriteAnim_83DAFE4,
+ gSpriteAnim_83DAFF4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB00C[] =
+{
+ AFFINEANIMCMD_FRAME(0x50, 0x50, 127, 0),
+ AFFINEANIMCMD_FRAME(0xD, 0xD, 0, 100),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB024[] =
+{
+ AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0),
+ AFFINEANIMCMD_FRAME(0xD, 0xD, 0, 100),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB03C[] =
+{
+ gSpriteAffineAnim_83DB00C,
+ gSpriteAffineAnim_83DB024,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB044 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DFF4,
+ .anims = gSpriteAnimTable_83DB004,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB03C,
+ .callback = sub_80DF760,
+};
+
+const union AnimCmd gSpriteAnim_83DB05C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DB074[] =
+{
+ gSpriteAnim_83DB05C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB078 =
+{
+ .tileTag = 10035,
+ .paletteTag = 10035,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DB074,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DF6F0,
+};
+
+const union AnimCmd gSpriteAnim_83DB090[] =
+{
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DB0A0[] =
+{
+ gSpriteAnim_83DB090,
+ gSpriteAnim_83DB090,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB0A8[] =
+{
+ AFFINEANIMCMD_FRAME(0x64, 0x64, 127, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB0B8[] =
+{
+ AFFINEANIMCMD_FRAME(0x64, 0x64, 0, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB0C8[] =
+{
+ gSpriteAffineAnim_83DB0A8,
+ gSpriteAffineAnim_83DB0B8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB0D0 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DFF4,
+ .anims = gSpriteAnimTable_83DB0A0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB0C8,
+ .callback = sub_80DF760,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB0E8 =
+{
+ .tileTag = 10249,
+ .paletteTag = 10249,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DF78C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB100 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DAFC8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DFB28,
+};
+
// Outrage
void sub_80DF5A0(struct Sprite *sprite)
@@ -123,7 +297,7 @@ void sub_80DF78C(struct Sprite *sprite)
sprite->callback = sub_80DF81C;
}
-void sub_80DF81C(struct Sprite *sprite)
+static void sub_80DF81C(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -196,7 +370,7 @@ void sub_80DF924(u8 taskId)
task->func = sub_80DF9F4;
}
-void sub_80DF9F4(u8 taskId)
+static void sub_80DF9F4(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[0])
@@ -234,7 +408,7 @@ void sub_80DF9F4(u8 taskId)
}
}
-void sub_80DFAB0(struct Task *task)
+static void sub_80DFAB0(struct Task *task)
{
u16 r3 = task->data[5];
u16 i;
@@ -264,7 +438,7 @@ void sub_80DFB28(struct Sprite *sprite)
gUnknown_03000730[i] = sprite->data[i];
}
-void sub_80DFBD8(struct Sprite *sprite)
+static void sub_80DFBD8(struct Sprite *sprite)
{
sprite->data[4] += sprite->data[1];
sprite->data[5] += sprite->data[2];
diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c
index 9eea43220..08b09337f 100644
--- a/src/battle/anim/draw.c
+++ b/src/battle/anim/draw.c
@@ -12,12 +12,24 @@ extern u8 gAnimBankTarget;
extern u16 gBattle_BG2_X;
extern u16 gBattle_BG1_X;
+void sub_80D0E30(struct Sprite* sprite);
static void sub_80D0D68(u8 taskId);
static void sub_80D0E8C(struct Sprite* sprite);
// draw (draws the Pokemon into the world using a pencil.)
// Used in Sketch.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D77E0 =
+{
+ .tileTag = 10002,
+ .paletteTag = 10002,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D0E30,
+};
+
void sub_80D0C88(u8 taskId)
{
struct Task* task = &gTasks[taskId];
@@ -59,7 +71,7 @@ void sub_80D0C88(u8 taskId)
task->func = sub_80D0D68;
}
-void sub_80D0D68(u8 taskId)
+static void sub_80D0D68(u8 taskId)
{
struct Task* task = &gTasks[taskId];
@@ -120,7 +132,7 @@ void sub_80D0E30(struct Sprite* sprite)
sprite->callback = sub_80D0E8C;
}
-void sub_80D0E8C(struct Sprite* sprite)
+static void sub_80D0E8C(struct Sprite* sprite)
{
switch (sprite->data[0])
{
diff --git a/src/battle/anim/drum.c b/src/battle/anim/drum.c
deleted file mode 100644
index 8dea7e608..000000000
--- a/src/battle/anim/drum.c
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-// drum (using hands to slap the Pokemon's belly in a rhythm.)
-// Used in Belly Drum.
-
-void sub_80CEDF0(struct Sprite* sprite)
-{
- s16 a;
- if (gBattleAnimArgs[0] == 1)
- {
- sprite->oam.matrixNum = 8;
- a = 16;
- }
- else
- {
- a = -16;
- }
-
- sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + a;
- sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + 8;
- sprite->data[0] = 8;
- sprite->callback = WaitAnimForDuration;
- StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
-}
diff --git a/src/battle/anim/egg.c b/src/battle/anim/egg.c
index 44ff484f2..5b6d56dac 100644..100755
--- a/src/battle/anim/egg.c
+++ b/src/battle/anim/egg.c
@@ -2,121 +2,15 @@
#include "rom_8077ABC.h"
#include "trig.h"
#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-static void sub_80D13AC(struct Sprite* sprite);
-static void sub_80D1424(struct Sprite* sprite);
-static void sub_80D144C(struct Sprite* sprite);
-static void sub_80D14C4(struct Sprite* sprite);
-static void sub_80D1504(struct Sprite* sprite);
-static void sub_80D154C(struct Sprite* sprite);
-static void sub_80D158C(struct Sprite* sprite);
-
-// egg (a hatching egg)
-// Used in Softboiled.
-
-void sub_80D1368(struct Sprite* sprite)
-{
- s16 r1;
- InitAnimSpritePos(sprite, 0);
- r1 = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0;
- sprite->data[0] = 0x380;
- sprite->data[1] = r1;
- sprite->data[7] = gBattleAnimArgs[2];
- sprite->callback = sub_80D13AC;
-}
-
-void sub_80D13AC(struct Sprite* sprite)
-{
- s16 add;
- sprite->pos2.y -= (sprite->data[0] >> 8);
- sprite->pos2.x = sprite->data[1] >> 8;
- sprite->data[0] -= 32;
- add = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0;
- sprite->data[1] += add;
- if (sprite->pos2.y > 0)
- {
- sprite->pos1.y += sprite->pos2.y;
- sprite->pos1.x += sprite->pos2.x;
- sprite->pos2.y = 0;
- sprite->pos2.x = 0;
- sprite->data[0] = 0;
- StartSpriteAffineAnim(sprite, 1);
- sprite->callback = sub_80D1424;
- }
-}
-
-void sub_80D1424(struct Sprite* sprite)
-{
- if (sprite->data[0]++ > 19)
- {
- StartSpriteAffineAnim(sprite, 2);
- sprite->callback = sub_80D144C;
- }
-}
-
-void sub_80D144C(struct Sprite* sprite)
-{
- if (sprite->affineAnimEnded)
- {
- StartSpriteAffineAnim(sprite, 1);
- sprite->data[0] = 0;
- if (sprite->data[7] == 0)
- {
- sprite->oam.tileNum += 16;
- sprite->callback = sub_80D14C4;
- }
- else
- {
- sprite->oam.tileNum += 32;
- sprite->callback = sub_80D154C;
- }
- }
-}
-
-void sub_80D14C4(struct Sprite* sprite)
-{
- sprite->pos2.y -= 2;
- if (++sprite->data[0] == 9)
- {
- sprite->data[0] = 16;
- sprite->data[1] = 0;
- REG_BLDCNT = 0x3F40;
- REG_BLDALPHA = sprite->data[0];
- sprite->callback = sub_80D1504;
- }
-}
-
-void sub_80D1504(struct Sprite* sprite)
-{
- if (sprite->data[1]++ % 3 == 0)
- {
- sprite->data[0]--;
- REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8);
- if (sprite->data[0] == 0)
- sprite->callback = sub_80D154C;
- }
-}
-
-void sub_80D154C(struct Sprite* sprite)
-{
- if ((u16)gBattleAnimArgs[7] == 0xFFFF)
- {
- sprite->invisible = 1;
- if (sprite->data[7] == 0)
- sprite->callback = sub_80D158C;
- else
- sprite->callback = DestroyAnimSprite;
- }
-}
-
-void sub_80D158C(struct Sprite* sprite)
-{
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- DestroyAnimSprite(sprite);
-}
+#include "random.h"
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7594 =
+{
+ .tileTag = 10175,
+ .paletteTag = 10175,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80794A8,
+};
diff --git a/src/battle/anim/energy_wave.c b/src/battle/anim/energy_wave.c
index 7980c7b34..9ac362b57 100644
--- a/src/battle/anim/energy_wave.c
+++ b/src/battle/anim/energy_wave.c
@@ -8,8 +8,11 @@
extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern const struct SpriteTemplate gSpriteTemplate_83D9130[];
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83D752C[];
+void sub_80D3554(struct Sprite *sprite);
+void sub_80D3698(struct Sprite *sprite);
+void sub_80D3728(struct Sprite *sprite);
static void sub_80D35DC(struct Sprite *);
static void sub_80D365C(u8);
static void sub_80D370C(struct Sprite *);
@@ -18,6 +21,145 @@ static void sub_80D370C(struct Sprite *);
// Used in Hydro Pump, Mud Shot, Signal Beam, Flamethrower, Psywave, and
// Hydro Cannon.
+const union AnimCmd gSpriteAnim_83D91DC[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_FRAME(12, 1),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D91F0[] =
+{
+ gSpriteAnim_83D91DC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91F4 =
+{
+ .tileTag = 10149,
+ .paletteTag = 10149,
+ .oam = &gOamData_837E04C,
+ .anims = gSpriteAnimTable_83D91F0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D3554,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D920C =
+{
+ .tileTag = 10259,
+ .paletteTag = 10259,
+ .oam = &gOamData_837E04C,
+ .anims = gSpriteAnimTable_83D91F0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D3554,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9224 =
+{
+ .tileTag = 10264,
+ .paletteTag = 10264,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D3554,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D923C =
+{
+ .tileTag = 10265,
+ .paletteTag = 10265,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D3554,
+};
+
+const union AnimCmd gSpriteAnim_83D9254[] =
+{
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9264[] =
+{
+ gSpriteAnim_83D9254,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9268 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9264,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D3554,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9280 =
+{
+ .tileTag = 10165,
+ .paletteTag = 10165,
+ .oam = &gOamData_837E034,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D752C,
+ .callback = sub_80D3554,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9298[] =
+{
+ AFFINEANIMCMD_FRAME(0x3, 0x3, 10, 50),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFEC, 0xFFEC, -10, 20),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D92B8[] =
+{
+ AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D92C8[] =
+{
+ gSpriteAffineAnim_83D9298,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D92CC[] =
+{
+ gSpriteAffineAnim_83D92B8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D92D0 =
+{
+ .tileTag = 10149,
+ .paletteTag = 10149,
+ .oam = &gOamData_837E10C,
+ .anims = gSpriteAnimTable_83D91F0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D92C8,
+ .callback = sub_80D3698,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D92E8 =
+{
+ .tileTag = 10149,
+ .paletteTag = 10149,
+ .oam = &gOamData_837E10C,
+ .anims = gSpriteAnimTable_83D91F0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D92CC,
+ .callback = sub_80D3728,
+};
+
void sub_80D3554(struct Sprite *sprite)
{
InitAnimSpritePos(sprite, 1);
diff --git a/src/battle/anim/espeed.c b/src/battle/anim/espeed.c
index 2e80afff7..a4f11c823 100644
--- a/src/battle/anim/espeed.c
+++ b/src/battle/anim/espeed.c
@@ -8,11 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern s8 gUnknown_083D7A00[4][2];
-
-extern struct AffineAnimFrameCmd gUnknown_083D79BC;
-extern struct SpriteTemplate gSpriteTemplate_83D79E8;
-
+void sub_80D1A70(struct Sprite* sprite);
static void sub_80D15E0(u8 taskId);
static void sub_80D16A0(u8 taskId);
static void sub_80D1808(u8 taskId);
@@ -21,13 +17,53 @@ static void sub_80D1930(u8 taskId);
// espeed (the Pokemon's width decreases as the sprite becomes vertically compressed)
// Used in Extremespeed.
+const union AffineAnimCmd gSpriteAffineAnim_83D79BC[] =
+{
+ AFFINEANIMCMD_FRAME(96, -13, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D79CC[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(4, 3),
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(4, 3),
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D79E4[] =
+{
+ gSpriteAnim_83D79CC,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D79E8 =
+{
+ .tileTag = 10207,
+ .paletteTag = 10207,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D79E4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D1A70,
+};
+
+const s8 gUnknown_083D7A00[][2] =
+{
+ {30, 28},
+ {-20, 24},
+ {16, 26},
+ {-10, 28},
+};
+
// apply espeed
void sub_80D15A4(u8 taskId)
{
struct Task* task = &gTasks[taskId];
u8 spriteId = GetAnimBattlerSpriteId(0);
task->data[0] = spriteId;
- sub_80798F4(task, spriteId, &gUnknown_083D79BC);
+ sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D79BC);
task->func = sub_80D15E0;
}
@@ -239,3 +275,13 @@ void sub_80D1930(u8 taskId)
break;
}
}
+
+void sub_80D1A70(struct Sprite* sprite)
+{
+ sprite->invisible = gTasks[sprite->data[0]].data[5];
+ if (sprite->animEnded)
+ {
+ gTasks[sprite->data[0]].data[sprite->data[1]]--;
+ DestroySprite(sprite);
+ }
+}
diff --git a/src/battle/anim/fang.c b/src/battle/anim/fang.c
index 5ed7372a8..c35898eea 100644
--- a/src/battle/anim/fang.c
+++ b/src/battle/anim/fang.c
@@ -8,10 +8,37 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CEA04(struct Sprite* sprite);
+
// fang
// Used by Super Fang (and probably Hyper Fang, but the actual callbacks are not in this file.)
// (Look into this one later.)
+const union AnimCmd gSpriteAnim_83D7068[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D707C[] =
+{
+ gSpriteAnim_83D7068,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7080 =
+{
+ .tileTag = 10192,
+ .paletteTag = 10192,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D707C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CEA04,
+};
+
void sub_80CEA04(struct Sprite* sprite)
{
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
diff --git a/src/battle/anim/fight.c b/src/battle/anim/fight.c
index 5e25d664a..af2af1981 100644
--- a/src/battle/anim/fight.c
+++ b/src/battle/anim/fight.c
@@ -26,6 +26,25 @@ extern u8 gAnimMoveTurn;
extern struct SpriteTemplate gBasicHitSplatSpriteTemplate;
+void sub_080B08A0(struct Sprite *sprite);
+void sub_80D902C(struct Sprite *sprite);
+void sub_80D9078(struct Sprite *sprite);
+void AnimBasicFistOrFoot(struct Sprite *sprite);
+void sub_80D90F4(struct Sprite *sprite);
+void sub_80D92D0(struct Sprite *sprite);
+void sub_80D9378(struct Sprite *sprite);
+void AnimSpinningKickOrPunch(struct Sprite *sprite);
+void AnimSpinningKickOrPunch(struct Sprite *sprite);
+void AnimStompFoot(struct Sprite *sprite);
+void sub_80D9540(struct Sprite *sprite);
+void sub_80D95D0(struct Sprite *sprite);
+void sub_80D96B8(struct Sprite *sprite);
+void sub_80D97CC(struct Sprite *sprite);
+void sub_80D98D8(struct Sprite *sprite);
+void sub_80D9A38(struct Sprite *sprite);
+void sub_80D9B48(struct Sprite *sprite);
+void sub_80D9BD4(struct Sprite *sprite);
+void sub_80D9C40(struct Sprite *sprite);
static void sub_80D927C(struct Sprite *sprite);
static void sub_80D9328(struct Sprite *sprite);
static void sub_80D9404(struct Sprite *sprite);
@@ -38,6 +57,381 @@ static void sub_80D986C(struct Sprite *sprite);
static void sub_80D9934(struct Sprite *sprite);
static void sub_80D99F4(struct Sprite *sprite);
+const struct SpriteTemplate gSpriteTemplate_83D9F24 =
+{
+ .tileTag = 10050,
+ .paletteTag = 10050,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_080B08A0,
+};
+
+const union AnimCmd gSpriteAnim_83D9F3C[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9F44[] =
+{
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9F4C[] =
+{
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9F54[] =
+{
+ ANIMCMD_FRAME(48, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9F5C[] =
+{
+ ANIMCMD_FRAME(48, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9F64[] =
+{
+ gSpriteAnim_83D9F3C,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9F68[] =
+{
+ gSpriteAnim_83D9F44,
+ gSpriteAnim_83D9F4C,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9F70[] =
+{
+ gSpriteAnim_83D9F54,
+ gSpriteAnim_83D9F5C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F78 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D902C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F90 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D9078,
+};
+
+const struct SpriteTemplate gFistFootSpriteTemplate =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBasicFistOrFoot,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9FC0 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D90F4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9FD8 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F70,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D92D0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9FF0 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F68,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D9378,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA008[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 20, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA020[] =
+{
+ gSpriteAffineAnim_83DA008,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA024 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DFF4,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA020,
+ .callback = AnimSpinningKickOrPunch,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA03C[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFC, 20, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA054[] =
+{
+ gSpriteAffineAnim_83DA03C,
+};
+
+const struct SpriteTemplate gMegaPunchKickSpriteTemplate =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DFF4,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA054,
+ .callback = AnimSpinningKickOrPunch,
+};
+
+const struct SpriteTemplate gStompFootSpriteTemplate =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F68,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimStompFoot,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA088 =
+{
+ .tileTag = 10073,
+ .paletteTag = 10073,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D9540,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA0A0 =
+{
+ .tileTag = 10167,
+ .paletteTag = 10167,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D95D0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA0B8 =
+{
+ .tileTag = 10208,
+ .paletteTag = 10208,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D96B8,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA0D0[] =
+{
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 64),
+ AFFINEANIMCMD_FRAME(0xFFFA, 0xFFFA, 0, 8),
+ AFFINEANIMCMD_FRAME(0x6, 0x6, 0, 8),
+ AFFINEANIMCMD_JUMP(2),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA0F8[] =
+{
+ gSpriteAffineAnim_83DA0D0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA0FC =
+{
+ .tileTag = 10212,
+ .paletteTag = 10212,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA0F8,
+ .callback = sub_80D97CC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA114 =
+{
+ .tileTag = 10257,
+ .paletteTag = 10257,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D98D8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA12C =
+{
+ .tileTag = 10256,
+ .paletteTag = 10256,
+ .oam = &gOamData_837DF3C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D9A38,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA144 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D9B48,
+};
+
+const union AnimCmd gSpriteAnim_83DA15C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA16C[] =
+{
+ ANIMCMD_FRAME(0, 4, .vFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .vFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA17C[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA18C[] =
+{
+ gSpriteAnim_83DA15C,
+ gSpriteAnim_83DA16C,
+ gSpriteAnim_83DA17C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA198 =
+{
+ .tileTag = 10245,
+ .paletteTag = 10245,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DA18C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D9BD4,
+};
+
+const union AnimCmd gSpriteAnim_83DA1B0[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(64, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA1BC[] =
+{
+ ANIMCMD_FRAME(0, 6, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 6, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA1C8[] =
+{
+ ANIMCMD_FRAME(0, 6, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 6, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA1D4[] =
+{
+ gSpriteAnim_83DA1B0,
+ gSpriteAnim_83DA1BC,
+ gSpriteAnim_83DA1C8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA1E0 =
+{
+ .tileTag = 10246,
+ .paletteTag = 10246,
+ .oam = &gOamData_837DF3C,
+ .anims = gSpriteAnimTable_83DA1D4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D9BD4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA1F8[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFE0, 0xFFE0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA210[] =
+{
+ gSpriteAffineAnim_83DA1F8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA214 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DFF4,
+ .anims = gSpriteAnimTable_83D9F64,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA210,
+ .callback = sub_80D9C40,
+};
void sub_080B08A0(struct Sprite *sprite)
{
diff --git a/src/battle/anim/finger.c b/src/battle/anim/finger.c
new file mode 100644
index 000000000..66ca4ca06
--- /dev/null
+++ b/src/battle/anim/finger.c
@@ -0,0 +1,256 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "battle_anim.h"
+#include "sound.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+extern void sub_80CEF44(u8 bank, struct Sprite* sprite);
+
+void sub_80CF040(struct Sprite* sprite);
+void sub_80CF0BC(struct Sprite* sprite);
+void sub_80CF1C8(struct Sprite* sprite);
+static void sub_80CF088(struct Sprite* sprite);
+static void sub_80CF138(struct Sprite* sprite);
+static void sub_80CF158(struct Sprite* sprite);
+static void sub_80CF228(struct Sprite* sprite);
+static void sub_80CF264(struct Sprite* sprite);
+
+// wave_finger
+// Used by Metronome, Follow Me, and Taunt.
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7238[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x1E, 0x1E, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7250[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 11),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 11),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7278[] =
+{
+ AFFINEANIMCMD_FRAME(16, 16, 0, 0),
+ AFFINEANIMCMD_FRAME(30, 30, 0, 8),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 16),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 11),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 11),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_FRAME(-30, -30, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D72C0[] =
+{
+ gSpriteAffineAnim_83D7238,
+ gSpriteAffineAnim_83D7250,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D72C8 =
+{
+ .tileTag = 10064,
+ .paletteTag = 10064,
+ .oam = &gOamData_837DFF4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D72C0,
+ .callback = sub_80CF040,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D72E0 =
+{
+ .tileTag = 10064,
+ .paletteTag = 10064,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D72C0,
+ .callback = sub_80CF0BC,
+};
+
+const union AnimCmd gSpriteAnim_83D72F8[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D7300[] =
+{
+ ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D7308[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D7328[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7348[] =
+{
+ gSpriteAnim_83D72F8,
+ gSpriteAnim_83D7300,
+ gSpriteAnim_83D7308,
+ gSpriteAnim_83D7328,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7358 =
+{
+ .tileTag = 10214,
+ .paletteTag = 10214,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7348,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CF1C8,
+};
+
+void sub_80CF040(struct Sprite* sprite)
+{
+ u8 bank;
+ if (gBattleAnimArgs[0] == 0)
+ bank = gAnimBankAttacker;
+ else
+ bank = gAnimBankTarget;
+
+ sub_80CEF44(bank, sprite);
+ sprite->data[0] = 0;
+ StoreSpriteCallbackInData(sprite, sub_80CF088);
+ sprite->callback = sub_80785E4;
+}
+
+static void sub_80CF088(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 16)
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ StoreSpriteCallbackInData(sprite, move_anim_8074EE0);
+ sprite->callback = sub_80785E4;
+ }
+}
+
+void sub_80CF0BC(struct Sprite* sprite)
+{
+ u8 bank;
+ if (gBattleAnimArgs[0] == 0)
+ bank = gAnimBankAttacker;
+ else
+ bank = gAnimBankTarget;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(bank, 0);
+ sprite->pos1.y = sub_807A100(bank, 2);
+ if (sprite->pos1.y <= 9)
+ sprite->pos1.y = 10;
+
+ sprite->data[0] = 1;
+ sprite->data[1] = 0;
+ sprite->data[2] = sprite->subpriority;
+ sprite->data[3] = sprite->subpriority + 4;
+ sprite->data[4] = 0;
+ StoreSpriteCallbackInData(sprite, sub_80CF138);
+ sprite->callback = sub_80785E4;
+}
+
+static void sub_80CF138(struct Sprite* sprite)
+{
+ if (++sprite->data[4] > 12)
+ sprite->callback = sub_80CF158;
+}
+
+static void sub_80CF158(struct Sprite* sprite)
+{
+ s16 temp;
+ s16 temp2;
+ sprite->data[1] += 4;
+ if (sprite->data[1] > 0xFE)
+ {
+ if (--sprite->data[0] == 0)
+ {
+ sprite->pos2.x = 0;
+ sprite->callback = sub_80CF088;
+ return;
+ }
+ else
+ {
+ sprite->data[1] &= 0xFF;
+ }
+ }
+
+ if (sprite->data[1] > 0x4F)
+ sprite->subpriority = sprite->data[3];
+
+ if (sprite->data[1] > 0x9F)
+ sprite->subpriority = sprite->data[2];
+
+ temp = gSineTable[sprite->data[1]];
+ sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1);
+}
+
+void sub_80CF1C8(struct Sprite* sprite)
+{
+ u8 bank;
+ if (gBattleAnimArgs[0] == 0)
+ bank = gAnimBankAttacker;
+ else
+ bank = gAnimBankTarget;
+
+ sub_80CEF44(bank, sprite);
+ if (GetBattlerSide(bank) == 0)
+ {
+ StartSpriteAnim(sprite, 0);
+ sprite->data[0] = 2;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->data[0] = 3;
+ }
+
+ sprite->callback = sub_80CF228;
+}
+
+static void sub_80CF228(struct Sprite* sprite)
+{
+ if (++sprite->data[1] > 10)
+ {
+ sprite->data[1] = 0;
+ StartSpriteAnim(sprite, sprite->data[0]);
+ StoreSpriteCallbackInData(sprite, sub_80CF264);
+ sprite->callback = sub_8078600;
+ }
+}
+
+static void sub_80CF264(struct Sprite* sprite)
+{
+ if (++sprite->data[1] > 5)
+ DestroyAnimSprite(sprite);
+}
diff --git a/src/battle/anim/fire.c b/src/battle/anim/fire.c
index 0939c938c..929828ed4 100644
--- a/src/battle/anim/fire.c
+++ b/src/battle/anim/fire.c
@@ -6,8 +6,170 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
-void sub_80D5038(struct Sprite *);
-void sub_80D50E8(struct Sprite *);
+void sub_80D4ED8(struct Sprite *sprite);
+void sub_80D4F18(struct Sprite *sprite);
+void sub_80D4FCC(struct Sprite *sprite);
+void sub_80D4F5C(struct Sprite *sprite);
+void sub_80D5074(struct Sprite *sprite);
+static void sub_80D5038(struct Sprite *);
+static void sub_80D50E8(struct Sprite *);
+
+const union AnimCmd gSpriteAnim_83D9450[] =
+{
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_83D9460[] =
+{
+ ANIMCMD_FRAME(16, 4, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 4, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9470[] =
+{
+ gSpriteAnim_83D9450,
+ gSpriteAnim_83D9460,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9478 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9470,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D4ED8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9490 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9470,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D4F18,
+};
+
+const union AnimCmd gSpriteAnim_83D94A8[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_FRAME(80, 3),
+ ANIMCMD_FRAME(96, 3),
+ ANIMCMD_FRAME(112, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D94CC[] =
+{
+ gSpriteAnim_83D94A8,
+};
+
+const union AnimCmd gSpriteAnim_83D94D0[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D94E8[] =
+{
+ gSpriteAnim_83D94D0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D94EC[] =
+{
+ AFFINEANIMCMD_FRAME(0x32, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x20, 0x0, 0, 7),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9504[] =
+{
+ gSpriteAffineAnim_83D94EC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9508 =
+{
+ .tileTag = 10033,
+ .paletteTag = 10033,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D94CC,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9504,
+ .callback = sub_80D4FCC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9520 =
+{
+ .tileTag = 10033,
+ .paletteTag = 10033,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D94CC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D4FCC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9538 =
+{
+ .tileTag = 10035,
+ .paletteTag = 10035,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D94E8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D4F5C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9550 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D94E8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D4F5C,
+};
+
+const union AnimCmd gSpriteAnim_83D9568[] =
+{
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9578[] =
+{
+ gSpriteAnim_83D9568,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D957C =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9578,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5074,
+};
void sub_80D4ED8(struct Sprite *sprite)
{
@@ -20,7 +182,7 @@ void sub_80D4ED8(struct Sprite *sprite)
StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
sprite->callback = sub_8078174;
- sub_8078174(sprite);
+ sprite->callback(sprite);
}
void sub_80D4F18(struct Sprite *sprite)
@@ -82,7 +244,7 @@ void sub_80D4FCC(struct Sprite *sprite)
sprite->callback = sub_80D5038;
}
-void sub_80D5038(struct Sprite *sprite)
+static void sub_80D5038(struct Sprite *sprite)
{
if (++sprite->data[0] < sprite->data[4])
{
@@ -119,7 +281,7 @@ void sub_80D5074(struct Sprite *sprite)
sprite->callback = sub_80D50E8;
}
-void sub_80D50E8(struct Sprite *sprite)
+static void sub_80D50E8(struct Sprite *sprite)
{
if (sprite->data[3])
{
diff --git a/src/battle/anim/fire_2.c b/src/battle/anim/fire_2.c
index 97ac2e933..b055d7c80 100644
--- a/src/battle/anim/fire_2.c
+++ b/src/battle/anim/fire_2.c
@@ -9,18 +9,180 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct SpriteTemplate gSpriteTemplate_83D96C4;
-extern s16 gHeatedRockCoords[7][2];
+void AnimEmberFlare(struct Sprite *sprite);
+void sub_80D5210(struct Sprite *sprite);
+void AnimFireRing(struct Sprite *sprite);
+void AnimFireCross(struct Sprite *sprite);
+void sub_80D53B4(struct Sprite *sprite);
+void sub_80D58FC(struct Sprite *sprite);
+void sub_80D5A20(struct Sprite *sprite);
static void AnimFireRingStep1(struct Sprite *);
static void UpdateFireRingCircleOffset(struct Sprite *);
static void AnimFireRingStep2(struct Sprite *);
static void AnimFireRingStep3(struct Sprite *);
-void sub_80D53F4(struct Sprite *);
-void sub_80D541C(struct Sprite *);
-void sub_80D54E0(u8 taskId);
-void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3);
+static void sub_80D53F4(struct Sprite *);
+static void sub_80D541C(struct Sprite *);
+static void sub_80D54E0(u8 taskId);
+static void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3);
+static void sub_80D59B0(struct Sprite *);
+static void sub_80D5A74(struct Sprite *);
+
+const union AnimCmd gSpriteAnim_83D95C8[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D95E0[] =
+{
+ gSpriteAnim_83D95C8,
+};
+
+const struct SpriteTemplate gEmberSpriteTemplate =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gEmberFlareSpriteTemplate =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEmberFlare,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9614 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5210,
+};
+
+const struct SpriteTemplate gFireRingSpriteTemplate =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireRing,
+};
+
+const union AnimCmd gSpriteAnim_83D9644[] =
+{
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9650[] =
+{
+ gSpriteAnim_83D9644,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9654[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9664[] =
+{
+ AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9674[] =
+{
+ gSpriteAffineAnim_83D9654,
+ gSpriteAffineAnim_83D9664,
+};
+
+const struct SpriteTemplate gFireCrossSpriteTemplate =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9650,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireCross,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9694 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D53B4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D96AC =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807A9BC,
+};
+
+
+const struct SpriteTemplate gSpriteTemplate_83D96C4 =
+{
+ .tileTag = 10201,
+ .paletteTag = 10201,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D58FC,
+};
+
+const s16 gHeatedRockCoords[][2] =
+{
+ {-2, -5},
+ {-1, -1},
+ { 3, -6},
+ { 4, -2},
+ { 2, -8},
+ {-5, -5},
+ { 4, -7},
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D96F8 =
+{
+ .tileTag = 10201,
+ .paletteTag = 10201,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5A20,
+};
// Animates the secondary effect of MOVE_EMBER, where the flames grow and slide
// horizontally a bit.
@@ -42,13 +204,12 @@ void AnimEmberFlare(struct Sprite *sprite)
sprite->callback(sprite);
}
-struct Sprite *sub_80D5210(struct Sprite *sprite)
+void sub_80D5210(struct Sprite *sprite)
{
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->callback = sub_8079534;
- return sprite;
}
// Animates the a fire sprite in the first-half of the MOVE_FIRE_BLAST
@@ -157,7 +318,7 @@ void sub_80D53B4(struct Sprite *sprite)
StoreSpriteCallbackInData(sprite, sub_80D53F4);
}
-void sub_80D53F4(struct Sprite *sprite)
+static void sub_80D53F4(struct Sprite *sprite)
{
sprite->invisible = FALSE;
@@ -168,7 +329,7 @@ void sub_80D53F4(struct Sprite *sprite)
sub_80D541C(sprite);
}
-void sub_80D541C(struct Sprite *sprite)
+static void sub_80D541C(struct Sprite *sprite)
{
sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8);
sprite->pos2.y = Cos(sprite->data[1], sprite->data[2] >> 8);
@@ -199,7 +360,7 @@ void sub_80D5470(u8 taskId) // initialize animation task for Move_ERUPTION?
task->func = sub_80D54E0;
}
-void sub_80D54E0(u8 taskId) // animate Move_ERUPTION?
+static void sub_80D54E0(u8 taskId) // animate Move_ERUPTION?
{
struct Task *task = &gTasks[taskId];
@@ -309,7 +470,7 @@ void sub_80D54E0(u8 taskId) // animate Move_ERUPTION?
}
}
-void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3)
+static void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3)
{
u16 i, j;
s8 sign;
@@ -346,4 +507,119 @@ void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3)
gTasks[taskId].data[a3]++;
}
}
-} \ No newline at end of file
+}
+
+void sub_80D58FC(struct Sprite *sprite)
+{
+ sub_80D59B0(sprite);
+
+ if (sprite->invisible)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ DestroySprite(sprite);
+ }
+}
+
+u16 sub_80D5940(u8 spriteId)
+{
+ u16 var1 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y + gSprites[spriteId].centerToCornerVecY;
+
+ if (GetBattlerSide(gAnimBankAttacker) == 0)
+ {
+ var1 = ((var1 << 16) + 0x4A0000) >> 16;
+ }
+ else
+ {
+ var1 = ((var1 << 16) + 0x2C0000) >> 16;
+ }
+
+ return var1;
+}
+
+void sub_80D5994(struct Sprite *sprite, s16 x, s16 y)
+{
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = (u16)sprite->pos1.x * 8;
+ sprite->data[3] = (u16)sprite->pos1.y * 8;
+ sprite->data[4] = x * 8;
+ sprite->data[5] = y * 8;
+}
+
+static void sub_80D59B0(struct Sprite *sprite)
+{
+ int var1;
+ if (++sprite->data[0] > 2)
+ {
+ sprite->data[0] = 0;
+ ++sprite->data[1];
+ var1 = (u16)sprite->data[1] * (u16)sprite->data[1];
+ sprite->data[3] += var1;
+ }
+
+ sprite->data[2] += sprite->data[4];
+ sprite->pos1.x = sprite->data[2] >> 3;
+ sprite->data[3] += sprite->data[5];
+ sprite->pos1.y = sprite->data[3] >> 3;
+
+ if (sprite->pos1.x < -8 || sprite->pos1.x > 0xf8 || sprite->pos1.y < -8 || sprite->pos1.y > 120)
+ sprite->invisible = TRUE;
+}
+
+void sub_80D5A20(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = gBattleAnimArgs[1];
+
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[6] = gBattleAnimArgs[2];
+ sprite->data[7] = gBattleAnimArgs[3];
+
+ sprite->oam.tileNum += gBattleAnimArgs[4] * 16;
+ sprite->callback = sub_80D5A74;
+}
+
+static void sub_80D5A74(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (sprite->data[6] != 0)
+ {
+ sprite->data[6]--;
+ return;
+ }
+
+ sprite->data[0]++;
+ // fall through
+ case 1:
+ sprite->pos1.y += 8;
+ if (sprite->pos1.y >= sprite->data[7])
+ {
+ sprite->pos1.y = sprite->data[7];
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ if ((++sprite->data[2] & 1) != 0)
+ {
+ sprite->pos2.y = -3;
+ }
+ else
+ {
+ sprite->pos2.y = 3;
+ }
+ }
+
+ if (++sprite->data[3] > 16)
+ {
+ DestroyAnimSprite(sprite);
+ }
+ break;
+ }
+}
diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c
new file mode 100755
index 000000000..ec40e26c4
--- /dev/null
+++ b/src/battle/anim/flying.c
@@ -0,0 +1,346 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "battle_anim.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+void sub_80DA034(struct Sprite *sprite);
+void sub_80DA16C(struct Sprite *sprite);
+void sub_80DA208(struct Sprite *sprite);
+void sub_80DA300(struct Sprite *sprite);
+void sub_80DA38C(struct Sprite *sprite);
+void sub_80DA4D8(struct Sprite *sprite);
+void sub_80DAD30(struct Sprite *sprite);
+void sub_80DAD84(struct Sprite *sprite);
+void sub_80DB000(struct Sprite *sprite);
+void sub_80DB194(struct Sprite *sprite);
+void sub_80DB1F4(struct Sprite *sprite);
+void sub_80DB288(struct Sprite *sprite);
+void sub_80DB374(struct Sprite *sprite);
+void sub_80DB458(struct Sprite *sprite);
+void sub_80DB564(struct Sprite *sprite);
+void sub_80DB5E4(struct Sprite *sprite);
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA380 =
+{
+ .tileTag = 10009,
+ .paletteTag = 10009,
+ .oam = &gOamData_837DF7C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DA034,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA398[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xA, 0x0, 0, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA3B0[] =
+{
+ gSpriteAffineAnim_83DA398,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA3B4 =
+{
+ .tileTag = 10009,
+ .paletteTag = 10009,
+ .oam = &gOamData_837DFDC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA3B0,
+ .callback = sub_80DA16C,
+};
+
+const union AnimCmd gSpriteAnim_83DA3CC[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA3E0[] =
+{
+ gSpriteAnim_83DA3CC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA3E4 =
+{
+ .tileTag = 10154,
+ .paletteTag = 10154,
+ .oam = &gOamData_837DF54,
+ .anims = gSpriteAnimTable_83DA3E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DA208,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA3FC[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6),
+ AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA424[] =
+{
+ gSpriteAffineAnim_83DA3FC,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA428[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 50, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA438[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -40, 1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA448[] =
+{
+ gSpriteAffineAnim_83DA428,
+ gSpriteAffineAnim_83DA438,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA450 =
+{
+ .tileTag = 10156,
+ .paletteTag = 10156,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA424,
+ .callback = sub_80DA300,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA468 =
+{
+ .tileTag = 10156,
+ .paletteTag = 10156,
+ .oam = &gOamData_837DF9C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA448,
+ .callback = sub_80DA38C,
+};
+
+const union AnimCmd gSpriteAnim_83DA480[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA488[] =
+{
+ ANIMCMD_FRAME(16, 0, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA490[] =
+{
+ gSpriteAnim_83DA480,
+ gSpriteAnim_83DA488,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA498 =
+{
+ .tileTag = 10270,
+ .paletteTag = 10270,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83DA490,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DA4D8,
+};
+
+const u16 gUnknownPalette_83DA4B0[] = INCBIN_U16("graphics/unknown/unknown_3DA4B0.gbapal");
+
+const struct SpriteTemplate gSpriteTemplate_83DA4D0 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DAD30,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DA4E8 =
+{
+ .tileTag = 10270,
+ .paletteTag = 10270,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83DA490,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DAD84,
+};
+
+const union AnimCmd gSpriteAnim_83DA500[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_FRAME(8, 1, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA518[] =
+{
+ gSpriteAnim_83DA500,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA51C =
+{
+ .tileTag = 10162,
+ .paletteTag = 10162,
+ .oam = &gOamData_837DF54,
+ .anims = gSpriteAnimTable_83DA518,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB000,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA534[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6),
+ AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5),
+ AFFINEANIMCMD_FRAME(0xFFEC, 0x0, 0, 7),
+ AFFINEANIMCMD_FRAME(0xFFEC, 0xFFEC, 0, 5),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA564[] =
+{
+ gSpriteAffineAnim_83DA534,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA568 =
+{
+ .tileTag = 10156,
+ .paletteTag = 10156,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA564,
+ .callback = sub_80DB194,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA580[] =
+{
+ AFFINEANIMCMD_FRAME(0xA0, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA590[] =
+{
+ gSpriteAffineAnim_83DA580,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA594 =
+{
+ .tileTag = 10156,
+ .paletteTag = 10156,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA590,
+ .callback = sub_80DB1F4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA5AC[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6),
+ AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA5D4[] =
+{
+ gSpriteAffineAnim_83DA5AC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA5D8 =
+{
+ .tileTag = 10156,
+ .paletteTag = 10156,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA5D4,
+ .callback = sub_80DB288,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA5F0[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x20, 0, 12),
+ AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 11),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA610[] =
+{
+ gSpriteAffineAnim_83DA5F0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA614 =
+{
+ .tileTag = 10272,
+ .paletteTag = 10272,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB374,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA62C =
+{
+ .tileTag = 10273,
+ .paletteTag = 10273,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB458,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DA644 =
+{
+ .tileTag = 10212,
+ .paletteTag = 10212,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB564,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA65C =
+{
+ .tileTag = 10284,
+ .paletteTag = 10284,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB5E4,
+};
diff --git a/src/battle/anim/flying_hearts.c b/src/battle/anim/flying_hearts.c
index f20416535..2bba6c4cb 100644
--- a/src/battle/anim/flying_hearts.c
+++ b/src/battle/anim/flying_hearts.c
@@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D2064(struct Sprite* sprite);
static void sub_80D2094(struct Sprite* sprite);
// flying_hearts (hearts float upward from the bottom of the screen.)
// Used in Attract.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7AE0 =
+{
+ .tileTag = 10216,
+ .paletteTag = 10216,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2064,
+};
+
void sub_80D2064(struct Sprite* sprite)
{
sprite->pos1.x = gBattleAnimArgs[0];
@@ -23,7 +35,7 @@ void sub_80D2064(struct Sprite* sprite)
StoreSpriteCallbackInData(sprite, sub_80D2094);
}
-void sub_80D2094(struct Sprite* sprite)
+static void sub_80D2094(struct Sprite* sprite)
{
s16 y;
sprite->data[2] += sprite->data[1];
diff --git a/src/battle/anim/flying_path.c b/src/battle/anim/flying_path.c
index 5e9de8cb1..b190e9e8c 100644
--- a/src/battle/anim/flying_path.c
+++ b/src/battle/anim/flying_path.c
@@ -8,8 +8,6 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct SpriteTemplate gSpriteTemplate_83D6884;
-
static void sub_80CBF5C(u8 taskId);
static s16 sub_80CC338(struct Sprite* sprite);
static void sub_80CC358(struct Task* task, u8 taskId);
@@ -18,6 +16,70 @@ static void sub_80CC408(struct Sprite* sprite);
// flying_path (guides a sprite along a specific path.)
// Used by Leaf Blade.
+const union AnimCmd gSpriteAnim_83D6830[] =
+{
+ ANIMCMD_FRAME(28, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6838[] =
+{
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6840[] =
+{
+ ANIMCMD_FRAME(20, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6848[] =
+{
+ ANIMCMD_FRAME(28, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6850[] =
+{
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6858[] =
+{
+ ANIMCMD_FRAME(16, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6860[] =
+{
+ ANIMCMD_FRAME(28, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6868[] =
+{
+ gSpriteAnim_83D6830,
+ gSpriteAnim_83D6838,
+ gSpriteAnim_83D6840,
+ gSpriteAnim_83D6848,
+ gSpriteAnim_83D6850,
+ gSpriteAnim_83D6858,
+ gSpriteAnim_83D6860,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6884 =
+{
+ .tileTag = 10063,
+ .paletteTag = 10063,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6868,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
void sub_80CBDF4(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -44,7 +106,7 @@ void sub_80CBDF4(u8 taskId)
task->func = sub_80CBF5C;
}
-void sub_80CBF5C(u8 taskId)
+static void sub_80CBF5C(u8 taskId)
{
struct Task* task = &gTasks[taskId];
struct Sprite* sprite = &gSprites[task->data[2]];
@@ -244,7 +306,7 @@ void sub_80CBF5C(u8 taskId)
}
}
-s16 sub_80CC338(struct Sprite* sprite)
+static s16 sub_80CC338(struct Sprite* sprite)
{
s16 var = 8;
if (sprite->data[4] < sprite->pos1.y)
@@ -253,7 +315,7 @@ s16 sub_80CC338(struct Sprite* sprite)
return var;
}
-void sub_80CC358(struct Task* task, u8 taskId)
+static void sub_80CC358(struct Task* task, u8 taskId)
{
task->data[14]++;
if (task->data[14] > 0)
@@ -279,7 +341,7 @@ void sub_80CC358(struct Task* task, u8 taskId)
}
}
-void sub_80CC408(struct Sprite* sprite)
+static void sub_80CC408(struct Sprite* sprite)
{
sprite->data[0]++;
if (sprite->data[0] > 1)
diff --git a/src/battle/anim/flying_petals.c b/src/battle/anim/flying_petals.c
index c7a596b56..4696cbc6c 100644
--- a/src/battle/anim/flying_petals.c
+++ b/src/battle/anim/flying_petals.c
@@ -7,12 +7,110 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern const union AnimCmd *const gSpriteAnimTable_83D6424[];
+extern const union AnimCmd *const gSpriteAnimTable_83D6420[];
+void sub_80CC474(struct Sprite* sprite);
static void sub_80CC580(struct Sprite* sprite);
// flying_petals (petals fly across the screen.)
// Used by Aromatherapy.
+const union AffineAnimCmd gSpriteAffineAnim_83D689C[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D68B4[] = {
+ gSpriteAffineAnim_83D689C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D68B8 =
+{
+ .tileTag = 10159,
+ .paletteTag = 10159,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D6424,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC474,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D68D0 =
+{
+ .tileTag = 10159,
+ .paletteTag = 10159,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83D6420,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D68B4,
+ .callback = sub_80CC474,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D68E8[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -10, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6900[] = {
+ AFFINEANIMCMD_FRAME(192, 192, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -12, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6918[] = {
+ AFFINEANIMCMD_FRAME(143, 143, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -15, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6930[] = {
+ gSpriteAffineAnim_83D68E8,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6934[] = {
+ gSpriteAffineAnim_83D6900,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6938[] = {
+ gSpriteAffineAnim_83D6918,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D693C =
+{
+ .tileTag = 10271,
+ .paletteTag = 10271,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6930,
+ .callback = sub_80CC474,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6954 =
+{
+ .tileTag = 10271,
+ .paletteTag = 10271,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6934,
+ .callback = sub_80CC474,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D696C =
+{
+ .tileTag = 10271,
+ .paletteTag = 10271,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6938,
+ .callback = sub_80CC474,
+};
+
void sub_80CC474(struct Sprite* sprite)
{
u8 bank;
@@ -61,7 +159,7 @@ void sub_80CC474(struct Sprite* sprite)
sprite->callback = sub_80CC580;
}
-void sub_80CC580(struct Sprite* sprite)
+static void sub_80CC580(struct Sprite* sprite)
{
int a = sprite->data[7];
sprite->data[7]++;
diff --git a/src/battle/anim/ghost.c b/src/battle/anim/ghost.c
new file mode 100755
index 000000000..fd33d4782
--- /dev/null
+++ b/src/battle/anim/ghost.c
@@ -0,0 +1,191 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "battle_anim.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+void sub_80DDB6C(struct Sprite *sprite);
+void sub_80DDD58(struct Sprite *sprite);
+void sub_80DDF40(struct Sprite *sprite);
+void sub_80DE0FC(struct Sprite *sprite);
+void sub_80DE7B8(struct Sprite *sprite);
+void sub_80DEF3C(struct Sprite *sprite);
+void sub_80DF0B8(struct Sprite *sprite);
+void sub_80DF0B8(struct Sprite *sprite);
+void sub_80DF3D8(struct Sprite *sprite);
+void sub_80DF49C(struct Sprite *sprite);
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAE48[] =
+{
+ AFFINEANIMCMD_FRAME(0x1E, 0x1E, 10, 5),
+ AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 10, 5),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAE60[] =
+{
+ gSpriteAffineAnim_83DAE48,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE64 =
+{
+ .tileTag = 10013,
+ .paletteTag = 10013,
+ .oam = &gOamData_837DFEC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DAE60,
+ .callback = sub_80DDB6C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE7C =
+{
+ .tileTag = 10013,
+ .paletteTag = 10013,
+ .oam = &gOamData_837E04C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DDD58,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAE94[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAEA4[] =
+{
+ gSpriteAffineAnim_83DAE94,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAEA8 =
+{
+ .tileTag = 10176,
+ .paletteTag = 10176,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DAEA4,
+ .callback = sub_80DDF40,
+};
+
+const union AnimCmd gSpriteAnim_83DAEC0[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(8, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(24, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DAED8[] =
+{
+ gSpriteAnim_83DAEC0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAEDC =
+{
+ .tileTag = 10177,
+ .paletteTag = 10177,
+ .oam = &gOamData_837DF74,
+ .anims = gSpriteAnimTable_83DAED8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DE0FC,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAEF4[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAF04[] =
+{
+ gSpriteAffineAnim_83DAEF4,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DAF08 =
+{
+ .tileTag = 10188,
+ .paletteTag = 10188,
+ .oam = &gOamData_837E07C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DE7B8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAF20 =
+{
+ .tileTag = 10199,
+ .paletteTag = 10199,
+ .oam = &gOamData_837E074,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DEF3C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAF38 =
+{
+ .tileTag = 10200,
+ .paletteTag = 10200,
+ .oam = &gOamData_837E054,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DF0B8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAF50 =
+{
+ .tileTag = 10221,
+ .paletteTag = 10221,
+ .oam = &gOamData_837E054,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DF0B8,
+};
+
+const union AnimCmd gSpriteAnim_83DAF68[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(24, 4),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DAF7C[] =
+{
+ gSpriteAnim_83DAF68,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DAF80 =
+{
+ .tileTag = 10253,
+ .paletteTag = 10253,
+ .oam = &gOamData_837E094,
+ .anims = gSpriteAnimTable_83DAF7C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DF3D8,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DAF98 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DF49C,
+};
diff --git a/src/battle/anim/glitter.c b/src/battle/anim/glitter.c
index d73b46bbd..fb7443575 100644
--- a/src/battle/anim/glitter.c
+++ b/src/battle/anim/glitter.c
@@ -8,9 +8,52 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CD140(struct Sprite* sprite);
+void sub_80CD190(struct Sprite* sprite);
+
// glitter (the sparkling effect seen on Pokemon, usually after healing or a beneficial effect.)
// Used by Heal Bell, Cosmic Power, and Aromatherapy.
+const union AnimCmd gSpriteAnim_83D6C60[] =
+{
+ ANIMCMD_FRAME(0, 7),
+ ANIMCMD_FRAME(16, 7),
+ ANIMCMD_FRAME(32, 7),
+ ANIMCMD_FRAME(48, 7),
+ ANIMCMD_FRAME(64, 7),
+ ANIMCMD_FRAME(80, 7),
+ ANIMCMD_FRAME(96, 7),
+ ANIMCMD_FRAME(112, 7),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6C84[] =
+{
+ gSpriteAnim_83D6C60,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6C88 =
+{
+ .tileTag = 10049,
+ .paletteTag = 10049,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6C84,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CD140,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6CA0 =
+{
+ .tileTag = 10049,
+ .paletteTag = 10049,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6C84,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CD190,
+};
+
void sub_80CD140(struct Sprite* sprite)
{
if (!gBattleAnimArgs[2])
diff --git a/src/battle/anim/glow.c b/src/battle/anim/glow.c
deleted file mode 100644
index 174655080..000000000
--- a/src/battle/anim/glow.c
+++ /dev/null
@@ -1,55 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-#include "ewram.h"
-#include "palette.h"
-#include "decompress.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u16 gUnknown_083D7A5C[5];
-
-extern const u8 gBattleAnimSpritePalette_206[];
-
-// glow (a whitening effect where the Pokemon glows white in a cycle.)
-// Used in Heal Bell.
-
-void sub_80D1ADC(u8 taskId)
-{
- int i;
- u8 sp[8];
- void* src;
- void* dest;
- void* what;
- sp[0] = IndexOfSpritePaletteTag(0x27DE);
- for (i = 1; i <= 4; i++)
- {
- sp[i] = AllocSpritePalette(0x2710 - i);
- }
-
- src = &gBattleAnimSpritePalette_206;
- dest = (IsContest()) ? gSharedMem + 0x18000 - 0x3800: gSharedMem + 0x18000;
- LZDecompressWram(src, dest);
- for (i = 0; i <= 4; i++)
- {
- what = ((IsContest()) ? gSharedMem + 0x14800 : gSharedMem + 0x18000) + (i << 5);
- LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32);
- }
-
- DestroyAnimVisualTask(taskId);
-}
-
-void sub_80D1B80(u8 taskId)
-{
- int i;
- for (i = 0; i < 5; i++)
- {
- FreeSpritePaletteByTag(gUnknown_083D7A5C[i]);
- }
-
- DestroyAnimVisualTask(taskId);
-}
diff --git a/src/battle/anim/grip.c b/src/battle/anim/grip.c
index a56a02d82..1ec779c09 100644
--- a/src/battle/anim/grip.c
+++ b/src/battle/anim/grip.c
@@ -8,11 +8,45 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D0178(struct Sprite* sprite);
static void sub_80D020C(struct Sprite* sprite);
// grip (does a slash which is capable of mirroring for the effect of "gripping".)
// Used in Vice Grip.
+const union AnimCmd gSpriteAnim_83D7674[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 20),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D7684[] =
+{
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 20, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7694[] =
+{
+ gSpriteAnim_83D7674,
+ gSpriteAnim_83D7684,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D769C =
+{
+ .tileTag = 10138,
+ .paletteTag = 10138,
+ .oam = &gOamData_837E054,
+ .anims = gSpriteAnimTable_83D7694,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D0178,
+};
+
void sub_80D0178(struct Sprite* sprite)
{
s16 r7 = 32;
@@ -37,7 +71,7 @@ void sub_80D0178(struct Sprite* sprite)
StoreSpriteCallbackInData(sprite, sub_80D020C);
}
-void sub_80D020C(struct Sprite* sprite)
+static void sub_80D020C(struct Sprite* sprite)
{
if (sprite->animEnded == 1)
DestroyAnimSprite(sprite);
diff --git a/src/battle/anim/ground.c b/src/battle/anim/ground.c
new file mode 100755
index 000000000..a523df20e
--- /dev/null
+++ b/src/battle/anim/ground.c
@@ -0,0 +1,125 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "battle_anim.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+void sub_80E0F1C(struct Sprite *sprite);
+void sub_80E1004(struct Sprite *sprite);
+void sub_80E1078(struct Sprite *sprite);
+void sub_80E1078(struct Sprite *sprite);
+void sub_80E1108(struct Sprite *sprite);
+void sub_80E1728(struct Sprite *sprite);
+void sub_80E17CC(struct Sprite *sprite);
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB2A0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 15, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB2B0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB2C0[] =
+{
+ gSpriteAffineAnim_83DB2A0,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB2C4[] =
+{
+ gSpriteAffineAnim_83DB2B0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB2C8 =
+{
+ .tileTag = 10000,
+ .paletteTag = 10000,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB2C0,
+ .callback = sub_80E0F1C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB2E0 =
+{
+ .tileTag = 10000,
+ .paletteTag = 10000,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB2C4,
+ .callback = sub_80E1004,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB2F8 =
+{
+ .tileTag = 10074,
+ .paletteTag = 10074,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1078,
+};
+
+const union AnimCmd gSpriteAnim_83DB310[] =
+{
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DB318[] =
+{
+ gSpriteAnim_83DB310,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB31C =
+{
+ .tileTag = 10074,
+ .paletteTag = 10074,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83DB318,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1078,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB334 =
+{
+ .tileTag = 10074,
+ .paletteTag = 10074,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1108,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB34C =
+{
+ .tileTag = 10074,
+ .paletteTag = 10074,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1728,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB364 =
+{
+ .tileTag = 10281,
+ .paletteTag = 10281,
+ .oam = &gOamData_837DF54,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E17CC,
+};
diff --git a/src/battle/anim/grow.c b/src/battle/anim/grow.c
index 924629048..ad535ad7f 100644
--- a/src/battle/anim/grow.c
+++ b/src/battle/anim/grow.c
@@ -8,22 +8,28 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct AffineAnimFrameCmd gUnknown_083D7714;
-
static void sub_80D0904(u8 taskId);
// grow (grows a Pokemon then shrinks back to normal size.)
// Used in Swagger and Bulk Up.
+const union AffineAnimCmd gSpriteAffineAnim_83D7714[] =
+{
+ AFFINEANIMCMD_FRAME(-4, -5, 0, 12),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 24),
+ AFFINEANIMCMD_FRAME(4, 5, 0, 12),
+ AFFINEANIMCMD_END,
+};
+
void sub_80D08C8(u8 taskId)
{
struct Task* task = &gTasks[taskId];
u8 spriteId = GetAnimBattlerSpriteId(0);
- sub_80798F4(task, spriteId, &gUnknown_083D7714);
+ sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D7714);
task->func = sub_80D0904;
}
-void sub_80D0904(u8 taskId)
+static void sub_80D0904(u8 taskId)
{
struct Task* task = &gTasks[taskId];
if (!sub_807992C(task))
diff --git a/src/battle/anim/guard.c b/src/battle/anim/guard.c
index d54fa4abc..341f74372 100644
--- a/src/battle/anim/guard.c
+++ b/src/battle/anim/guard.c
@@ -8,9 +8,40 @@ extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern u16 gBattleTypeFlags;
+void sub_80D3014(struct Sprite *sprite);
+
// guard (moves guard rings upwards)
// Used in Safeguard.
+const union AffineAnimCmd gSpriteAffineAnim_83D7D4C[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7D5C[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7D6C[] =
+{
+ gSpriteAffineAnim_83D7D4C,
+ gSpriteAffineAnim_83D7D5C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7D74 =
+{
+ .tileTag = 10244,
+ .paletteTag = 10244,
+ .oam = &gOamData_837E13C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7D6C,
+ .callback = sub_80D3014,
+};
+
void sub_80D3014(struct Sprite *sprite)
{
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsAnimBankSpriteVisible(gAnimBankAttacker ^ 2))
diff --git a/src/battle/anim/guillotine.c b/src/battle/anim/guillotine.c
index 0768e8334..eb1bc7733 100644
--- a/src/battle/anim/guillotine.c
+++ b/src/battle/anim/guillotine.c
@@ -8,6 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D0228(struct Sprite* sprite);
static void sub_80D02D0(struct Sprite* sprite);
static void sub_80D0344(struct Sprite* sprite);
static void sub_80D03A8(struct Sprite* sprite);
@@ -15,6 +16,39 @@ static void sub_80D03A8(struct Sprite* sprite);
// guillotine (does a reverse grip where the slices can reverse at a given period.)
// Used in Guillotine.
+const union AnimCmd gSpriteAnim_83D76B4[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D76C4[] =
+{
+ ANIMCMD_FRAME(0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 1, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D76D4[] =
+{
+ gSpriteAnim_83D76B4,
+ gSpriteAnim_83D76C4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D76DC =
+{
+ .tileTag = 10138,
+ .paletteTag = 10138,
+ .oam = &gOamData_837E054,
+ .anims = gSpriteAnimTable_83D76D4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D0228,
+};
+
void sub_80D0228(struct Sprite* sprite)
{
s16 r8 = 32;
@@ -43,7 +77,7 @@ void sub_80D0228(struct Sprite* sprite)
sprite->callback = sub_80D02D0;
}
-void sub_80D02D0(struct Sprite* sprite)
+static void sub_80D02D0(struct Sprite* sprite)
{
if (TranslateAnimSpriteByDeltas(sprite) && sprite->animEnded == 1)
{
@@ -62,7 +96,7 @@ void sub_80D02D0(struct Sprite* sprite)
}
}
-void sub_80D0344(struct Sprite* sprite)
+static void sub_80D0344(struct Sprite* sprite)
{
if (sprite->data[3])
{
@@ -83,7 +117,7 @@ void sub_80D0344(struct Sprite* sprite)
}
}
-void sub_80D03A8(struct Sprite* sprite)
+static void sub_80D03A8(struct Sprite* sprite)
{
if (TranslateAnimSpriteByDeltas(sprite) != 0)
DestroyAnimSprite(sprite);
diff --git a/src/battle/anim/heal.c b/src/battle/anim/heal.c
index a8c14ea1c..c2bce0e77 100644
--- a/src/battle/anim/heal.c
+++ b/src/battle/anim/heal.c
@@ -7,9 +7,36 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CBAA4(struct Sprite* sprite);
+
// heal (healing sparkles on a Pokemon)
// Used in Present, if the move heals instead of damages.
+const union AnimCmd gSpriteAnim_83D674C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(12, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6760[] =
+{
+ gSpriteAnim_83D674C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6764 =
+{
+ .tileTag = 10195,
+ .paletteTag = 10195,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6760,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CBAA4,
+};
+
void sub_80CBAA4(struct Sprite* sprite)
{
if (sprite->data[0] == 0)
diff --git a/src/battle/anim/heal_bell.c b/src/battle/anim/heal_bell.c
new file mode 100644
index 000000000..09029c9ff
--- /dev/null
+++ b/src/battle/anim/heal_bell.c
@@ -0,0 +1,132 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "battle_anim.h"
+#include "sound.h"
+#include "ewram.h"
+#include "palette.h"
+#include "decompress.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+extern const u8 gBattleAnimSpritePalette_206[];
+
+void sub_80D1C08(struct Sprite* sprite);
+
+// Used in Heal Bell.
+
+const union AnimCmd gSpriteAnim_83D7A08[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 15),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 15, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 6, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 15),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7A40[] =
+{
+ gSpriteAnim_83D7A08,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7A44 =
+{
+ .tileTag = 10205,
+ .paletteTag = 10205,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7A40,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80793C4,
+};
+
+const u16 gUnknown_083D7A5C[] =
+{
+ 10206,
+ 9999,
+ 9998,
+ 9997,
+ 9996,
+ 0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7A68 =
+{
+ .tileTag = 10206,
+ .paletteTag = 10206,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D1C08,
+};
+
+void sub_80D1ADC(u8 taskId)
+{
+ int i;
+ u8 sp[8];
+ void* src;
+ void* dest;
+ void* what;
+ sp[0] = IndexOfSpritePaletteTag(0x27DE);
+ for (i = 1; i <= 4; i++)
+ {
+ sp[i] = AllocSpritePalette(0x2710 - i);
+ }
+
+ src = &gBattleAnimSpritePalette_206;
+ dest = (IsContest()) ? gSharedMem + 0x18000 - 0x3800: gSharedMem + 0x18000;
+ LZDecompressWram(src, dest);
+ for (i = 0; i <= 4; i++)
+ {
+ what = ((IsContest()) ? gSharedMem + 0x14800 : gSharedMem + 0x18000) + (i << 5);
+ LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32);
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_80D1B80(u8 taskId)
+{
+ int i;
+ for (i = 0; i < 5; i++)
+ {
+ FreeSpritePaletteByTag(gUnknown_083D7A5C[i]);
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_80D1BA8(struct Sprite* sprite, u8 a, u8 b)
+{
+ u8 tile;
+ tile = (b & 1);
+ tile = ((-tile | tile) >> 31) & 32;
+ sprite->oam.tileNum += tile + (a << 2);
+ sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083D7A5C[b >> 1]);
+}
+
+void sub_80D1C08(struct Sprite* sprite)
+{
+ InitAnimSpritePos(sprite, 0);
+ if (GetBattlerSide(gAnimBankAttacker) != 0)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[3];
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+ sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]);
+}
diff --git a/src/battle/anim/heart_1.c b/src/battle/anim/heart_1.c
index 857169e62..5522d4551 100644
--- a/src/battle/anim/heart_1.c
+++ b/src/battle/anim/heart_1.c
@@ -8,9 +8,22 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D1C80(struct Sprite* sprite);
+
// heart_1 (a floating heart in a wave pattern upward.)
// Used in Charm, Covet, and when a Pokemon is infatuated.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7A80 =
+{
+ .tileTag = 10210,
+ .paletteTag = 10210,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D1C80,
+};
+
void sub_80D1C80(struct Sprite* sprite)
{
if (++sprite->data[0] == 1)
diff --git a/src/battle/anim/heated_rock.c b/src/battle/anim/heated_rock.c
deleted file mode 100644
index 6f1a1344a..000000000
--- a/src/battle/anim/heated_rock.c
+++ /dev/null
@@ -1,129 +0,0 @@
-#include "global.h"
-#include "battle_anim.h"
-#include "rom_8077ABC.h"
-
-extern s16 gBattleAnimArgs[8];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-extern u16 gBattleTypeFlags;
-
-void sub_80D59B0(struct Sprite *);
-static void sub_80D5A74(struct Sprite *);
-
-// heated_rock (moves heated rock sprites)
-// Used in Eruption.
-
-void sub_80D58FC(struct Sprite *sprite)
-{
- sub_80D59B0(sprite);
-
- if (sprite->invisible)
- {
- gTasks[sprite->data[6]].data[sprite->data[7]]--;
- DestroySprite(sprite);
- }
-}
-
-u16 sub_80D5940(u8 spriteId)
-{
- u16 var1 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y + gSprites[spriteId].centerToCornerVecY;
-
- if (GetBattlerSide(gAnimBankAttacker) == 0)
- {
- var1 = ((var1 << 16) + 0x4A0000) >> 16;
- }
- else
- {
- var1 = ((var1 << 16) + 0x2C0000) >> 16;
- }
-
- return var1;
-}
-
-void sub_80D5994(struct Sprite *sprite, s16 x, s16 y)
-{
- sprite->data[0] = 0;
- sprite->data[1] = 0;
- sprite->data[2] = (u16)sprite->pos1.x * 8;
- sprite->data[3] = (u16)sprite->pos1.y * 8;
- sprite->data[4] = x * 8;
- sprite->data[5] = y * 8;
-}
-
-void sub_80D59B0(struct Sprite *sprite)
-{
- int var1;
- if (++sprite->data[0] > 2)
- {
- sprite->data[0] = 0;
- ++sprite->data[1];
- var1 = (u16)sprite->data[1] * (u16)sprite->data[1];
- sprite->data[3] += var1;
- }
-
- sprite->data[2] += sprite->data[4];
- sprite->pos1.x = sprite->data[2] >> 3;
- sprite->data[3] += sprite->data[5];
- sprite->pos1.y = sprite->data[3] >> 3;
-
- if (sprite->pos1.x < -8 || sprite->pos1.x > 0xf8 || sprite->pos1.y < -8 || sprite->pos1.y > 120)
- sprite->invisible = TRUE;
-}
-
-void sub_80D5A20(struct Sprite *sprite)
-{
- sprite->pos1.x = gBattleAnimArgs[0];
- sprite->pos1.y = gBattleAnimArgs[1];
-
- sprite->data[0] = 0;
- sprite->data[1] = 0;
- sprite->data[2] = 0;
- sprite->data[6] = gBattleAnimArgs[2];
- sprite->data[7] = gBattleAnimArgs[3];
-
- sprite->oam.tileNum += gBattleAnimArgs[4] * 16;
- sprite->callback = sub_80D5A74;
-}
-
-static void sub_80D5A74(struct Sprite *sprite)
-{
- switch (sprite->data[0])
- {
- case 0:
- if (sprite->data[6] != 0)
- {
- sprite->data[6]--;
- return;
- }
-
- sprite->data[0]++;
- // fall through
- case 1:
- sprite->pos1.y += 8;
- if (sprite->pos1.y >= sprite->data[7])
- {
- sprite->pos1.y = sprite->data[7];
- sprite->data[0]++;
- }
- break;
- case 2:
- if (++sprite->data[1] > 1)
- {
- sprite->data[1] = 0;
- if ((++sprite->data[2] & 1) != 0)
- {
- sprite->pos2.y = -3;
- }
- else
- {
- sprite->pos2.y = 3;
- }
- }
-
- if (++sprite->data[3] > 16)
- {
- DestroyAnimSprite(sprite);
- }
- break;
- }
-}
diff --git a/src/battle/anim/hidden_power_orbit.c b/src/battle/anim/hidden_power_orbit.c
new file mode 100644
index 000000000..ed680b2bd
--- /dev/null
+++ b/src/battle/anim/hidden_power_orbit.c
@@ -0,0 +1,120 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "battle_anim.h"
+#include "sound.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+void AnimOrbitFast(struct Sprite* sprite);
+void AnimOrbitScatter(struct Sprite* sprite);
+static void AnimOrbitFastStep(struct Sprite* sprite);
+static void AnimOrbitScatterStep(struct Sprite* sprite);
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7AF8[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7B10[] =
+{
+ gSpriteAffineAnim_83D7AF8,
+};
+
+const struct SpriteTemplate gHiddenPowerOrbSpriteTemplate =
+{
+ .tileTag = 10217,
+ .paletteTag = 10217,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7B10,
+ .callback = AnimOrbitFast,
+};
+
+const struct SpriteTemplate gHiddenPowerOrbScatterSpriteTemplate =
+{
+ .tileTag = 10217,
+ .paletteTag = 10217,
+ .oam = &gOamData_837DFEC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7B10,
+ .callback = AnimOrbitScatter,
+};
+
+// Orbits a sphere in an ellipse around the mon.
+// Used by MOVE_HIDDEN_POWER
+// arg 0: duration
+// arg 1: initial wave offset
+void AnimOrbitFast(struct Sprite* sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+ sprite->affineAnimPaused = 1;
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[7] = sub_8079E90(gAnimBankAttacker);
+ sprite->callback = AnimOrbitFastStep;
+ sprite->callback(sprite);
+}
+
+static void AnimOrbitFastStep(struct Sprite* sprite)
+{
+ if ((u16)(sprite->data[1] - 0x40) <= 0x7F)
+ sprite->subpriority = sprite->data[7] + 1;
+ else
+ sprite->subpriority = sprite->data[7] - 1;
+
+ sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8);
+ sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8);
+ sprite->data[1] = (sprite->data[1] + 9) & 0xFF;
+ switch (sprite->data[5])
+ {
+ case 1:
+ sprite->data[2] -= 0x400;
+ sprite->data[3] -= 0x100;
+ if (++sprite->data[4] == sprite->data[0])
+ {
+ sprite->data[5] = 2;
+ return;
+ }
+ break;
+ case 0:
+ sprite->data[2] += 0x400;
+ sprite->data[3] += 0x100;
+ if (++sprite->data[4] == sprite->data[0])
+ {
+ sprite->data[4] = 0;
+ sprite->data[5] = 1;
+ }
+ break;
+ }
+
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ DestroyAnimSprite(sprite);
+}
+
+// Moves orbs away from the mon, based on where they are in their orbit.
+// Used in MOVE_HIDDEN_POWER.
+// arg 0: initial wave offset
+void AnimOrbitScatter(struct Sprite* sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+ sprite->data[0] = Sin(gBattleAnimArgs[0], 10);
+ sprite->data[1] = Cos(gBattleAnimArgs[0], 7);
+ sprite->callback = AnimOrbitScatterStep;
+}
+
+static void AnimOrbitScatterStep(struct Sprite* sprite)
+{
+ sprite->pos2.x += sprite->data[0];
+ sprite->pos2.y += sprite->data[1];
+ if (sprite->pos1.x + sprite->pos2.x + 16 > 0x110u || sprite->pos1.y + sprite->pos2.y > 0xA0 || sprite->pos1.y + sprite->pos2.y < -16)
+ DestroyAnimSprite(sprite);
+}
diff --git a/src/battle/anim/homing.c b/src/battle/anim/homing.c
index b24fcf4b1..5cd2a3ddb 100644
--- a/src/battle/anim/homing.c
+++ b/src/battle/anim/homing.c
@@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CC6CC(struct Sprite* sprite);
static void sub_80CC7D4(struct Sprite* sprite);
// homing (the spinning effect of sprites going inward in a static rotation.)
// Used by Needle Arm.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6994 =
+{
+ .tileTag = 10266,
+ .paletteTag = 10266,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC6CC,
+};
+
void sub_80CC6CC(struct Sprite* sprite)
{
u8 a;
@@ -69,7 +81,7 @@ void sub_80CC6CC(struct Sprite* sprite)
}
}
-void sub_80CC7D4(struct Sprite* sprite)
+static void sub_80CC7D4(struct Sprite* sprite)
{
if (sprite->data[0])
{
diff --git a/src/battle/anim/hop.c b/src/battle/anim/hop.c
index 7d1b2fd01..3aba79511 100644
--- a/src/battle/anim/hop.c
+++ b/src/battle/anim/hop.c
@@ -7,9 +7,67 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CB94C(struct Sprite* sprite);
+void sub_80CBA28(struct Sprite* sprite);
+
// hop (where a sprite "hops" across the screen)
// Used by Present, Trick, and the item knock off effect.
+const union AnimCmd gSpriteAnim_83D66B0[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D66B8[] =
+{
+ gSpriteAnim_83D66B0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D66BC[] = {
+ AFFINEANIMCMD_FRAME(0, 0, -4, 10),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 20),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D66DC[] = {
+ AFFINEANIMCMD_FRAME(0, 0, -1, 2),
+ AFFINEANIMCMD_FRAME(0, 0, 1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, -1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, -1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 1, 2),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6714[] = {
+ gSpriteAffineAnim_83D66BC,
+ gSpriteAffineAnim_83D66DC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D671C =
+{
+ .tileTag = 10224,
+ .paletteTag = 10224,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D66B8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6714,
+ .callback = sub_80CB94C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6734 =
+{
+ .tileTag = 10224,
+ .paletteTag = 10224,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D66B8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6714,
+ .callback = sub_80CBA28,
+};
+
void sub_80CB7EC(struct Sprite* sprite, s16 c)
{
s32 a = (sprite->pos1.x * 256) | sprite->pos1.y;
diff --git a/src/battle/anim/hop_2.c b/src/battle/anim/hop_2.c
index 861f428da..ab239f3c4 100644
--- a/src/battle/anim/hop_2.c
+++ b/src/battle/anim/hop_2.c
@@ -11,12 +11,26 @@ extern u8 gAnimBankTarget;
extern void sub_80CB7EC(struct Sprite* sprite, s16 c);
extern bool8 sub_80CB814(struct Sprite* sprite);
extern void sub_80CB8B8(struct Sprite* sprite);
+extern const union AnimCmd *const gSpriteAnimTable_83D66B8[];
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6714[];
+void sub_80CBAE8(struct Sprite* sprite);
static void sub_80CBB60(struct Sprite* sprite);
// hop_2
// Used in item steal.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D677C =
+{
+ .tileTag = 10224,
+ .paletteTag = 10224,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D66B8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6714,
+ .callback = sub_80CBAE8,
+};
+
void sub_80CBAE8(struct Sprite* sprite)
{
s16 p1;
@@ -43,7 +57,7 @@ void sub_80CBAE8(struct Sprite* sprite)
sprite->callback = sub_80CBB60;
}
-void sub_80CBB60(struct Sprite* sprite)
+static void sub_80CBB60(struct Sprite* sprite)
{
int zero;
sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]);
diff --git a/src/battle/anim/ice.c b/src/battle/anim/ice.c
new file mode 100755
index 000000000..50c8b9030
--- /dev/null
+++ b/src/battle/anim/ice.c
@@ -0,0 +1,495 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "battle_anim.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+void sub_80D7704(struct Sprite *sprite);
+void sub_80D78EC(struct Sprite *sprite);
+void sub_80D792C(struct Sprite *sprite);
+void sub_80D79B4(struct Sprite *sprite);
+void sub_80D7A64(struct Sprite *sprite);
+void sub_80D7CD4(struct Sprite *sprite);
+void sub_80D7E88(struct Sprite *sprite);
+void sub_80D7F10(struct Sprite *sprite);
+void sub_80D83E0(struct Sprite *sprite);
+void sub_80D8700(struct Sprite *sprite);
+void sub_80D8D1C(struct Sprite *sprite);
+void sub_807A9BC(struct Sprite *sprite);
+void unc_080B06FC(struct Sprite *sprite);
+void sub_80D8F10(struct Sprite *sprite);
+
+const union AnimCmd gSpriteAnim_83D9B58[] =
+{
+ ANIMCMD_FRAME(0, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(1, 5, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9B64[] =
+{
+ gSpriteAnim_83D9B58,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9B68 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D7704,
+};
+
+const union AnimCmd gSpriteAnim_83D9B80[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9B88[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9B90[] =
+{
+ ANIMCMD_FRAME(6, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9B98[] =
+{
+ ANIMCMD_FRAME(7, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9BA0[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9BA8[] =
+{
+ ANIMCMD_FRAME(12, 6),
+ ANIMCMD_FRAME(13, 6),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9BB4[] =
+{
+ gSpriteAnim_83D9B80,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9BB8[] =
+{
+ gSpriteAnim_83D9B88,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9BBC[] =
+{
+ gSpriteAnim_83D9B90,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9BC0[] =
+{
+ gSpriteAnim_83D9B98,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9BC4[] =
+{
+ gSpriteAnim_83D9BA0,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9BC8[] =
+{
+ gSpriteAnim_83D9BA8,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9BCC[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 40, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9BDC[] =
+{
+ gSpriteAffineAnim_83D9BCC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BE0 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837E144,
+ .anims = gSpriteAnimTable_83D9BB8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9BDC,
+ .callback = sub_80D78EC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BF8 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837E044,
+ .anims = gSpriteAnimTable_83D9BBC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D78EC,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9C10[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9C20[] =
+{
+ gSpriteAffineAnim_83D9C10,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C24 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837E0E4,
+ .anims = gSpriteAnimTable_83D9BB8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9C20,
+ .callback = sub_80D792C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C3C =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837E044,
+ .anims = gSpriteAnimTable_83D9BBC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D792C,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9C54[] =
+{
+ AFFINEANIMCMD_FRAME(0xCE, 0xCE, 0, 0),
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9C74[] =
+{
+ gSpriteAffineAnim_83D9C54,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C78 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837E0E4,
+ .anims = gSpriteAnimTable_83D9BB8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9C74,
+ .callback = sub_80D79B4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C90 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837E0A4,
+ .anims = gSpriteAnimTable_83D9BBC,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9C74,
+ .callback = sub_80D79B4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CA8 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D9BC0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D7A64,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CC0 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D9BC4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D7CD4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CD8 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D9BC0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D7CD4,
+};
+
+const union AnimCmd gSpriteAnim_83D9CF0[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(6, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9D10[] =
+{
+ gSpriteAnim_83D9CF0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D14 =
+{
+ .tileTag = 10142,
+ .paletteTag = 10142,
+ .oam = &gOamData_837E084,
+ .anims = gSpriteAnimTable_83D9D10,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D7E88,
+};
+
+const union AnimCmd gSpriteAnim_83D9D2C[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(8, 8),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9D38[] =
+{
+ gSpriteAnim_83D9D2C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D3C =
+{
+ .tileTag = 10144,
+ .paletteTag = 10144,
+ .oam = &gOamData_837E074,
+ .anims = gSpriteAnimTable_83D9D38,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D7F10,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D54 =
+{
+ .tileTag = 10172,
+ .paletteTag = 10172,
+ .oam = &gOamData_837E074,
+ .anims = gSpriteAnimTable_83D9D38,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D7F10,
+};
+
+const u8 gUnknown_083D9D6C[] =
+{
+ 0, 1, 2, 2, 2, 2, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 8, 9,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D80 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D83E0,
+};
+
+const u8 gUnknown_083D9D98[] =
+{
+ 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9DAC =
+{
+ .tileTag = 10172,
+ .paletteTag = 10172,
+ .oam = &gOamData_837E074,
+ .anims = gSpriteAnimTable_83D9D38,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D8700,
+};
+
+// bitfield array
+const u32 gUnknown_083D9DC4[] =
+{
+ 0x2001E064,
+ 0x0001E055,
+ 0x1011E0F2,
+ 0x1021E042,
+ 0x0031E0B6,
+ 0x2001E03C,
+ 0x0011E0D6,
+ 0x1001E071,
+ 0x1031E0D2,
+ 0x0021E026,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9DEC[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9DFC[] =
+{
+ AFFINEANIMCMD_FRAME(0xF0, 0xF0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9E0C[] =
+{
+ AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9E1C[] =
+{
+ AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9E2C[] =
+{
+ gSpriteAffineAnim_83D9DEC,
+ gSpriteAffineAnim_83D9DFC,
+ gSpriteAffineAnim_83D9E0C,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9E38[] =
+{
+ gSpriteAffineAnim_83D9E1C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9E3C =
+{
+ .tileTag = 10263,
+ .paletteTag = 10263,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9E2C,
+ .callback = sub_80D8D1C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9E54 =
+{
+ .tileTag = 10263,
+ .paletteTag = 10263,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9E38,
+ .callback = sub_807A9BC,
+};
+
+const union AnimCmd gSpriteAnim_83D9E6C[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9E74[] =
+{
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9E88[] =
+{
+ gSpriteAnim_83D9E6C,
+ gSpriteAnim_83D9E74,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9E90[] =
+{
+ AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9EA0[] =
+{
+ AFFINEANIMCMD_FRAME(0x118, 0x118, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9EB0[] =
+{
+ AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9EC0[] =
+{
+ AFFINEANIMCMD_FRAME(0x180, 0x180, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D9ED0[] =
+{
+ AFFINEANIMCMD_FRAME(0x1C0, 0x1C0, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9EE0[] =
+{
+ gSpriteAffineAnim_83D9E90,
+ gSpriteAffineAnim_83D9EA0,
+ gSpriteAffineAnim_83D9EB0,
+ gSpriteAffineAnim_83D9EC0,
+ gSpriteAffineAnim_83D9ED0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9EF4 =
+{
+ .tileTag = 10043,
+ .paletteTag = 10043,
+ .oam = &gOamData_837DFF4,
+ .anims = gSpriteAnimTable_83D9E88,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9EE0,
+ .callback = unc_080B06FC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F0C =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D9BBC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D8F10,
+};
diff --git a/src/battle/anim/kiss_fountain.c b/src/battle/anim/kiss_fountain.c
index d3270ee65..8ab3fcded 100644
--- a/src/battle/anim/kiss_fountain.c
+++ b/src/battle/anim/kiss_fountain.c
@@ -8,9 +8,22 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D1FDC(struct Sprite* sprite);
+
// kiss_fountain (a series of hearts pour out of a target Pokemon.)
// Used in Attract and Sweet Kiss.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7AC8 =
+{
+ .tileTag = 10216,
+ .paletteTag = 10216,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D1FDC,
+};
+
void sub_80D1FDC(struct Sprite* sprite)
{
if (sprite->data[0] == 0)
diff --git a/src/battle/anim/leaf.c b/src/battle/anim/leaf.c
index ca2af257d..d31e4dbd6 100644
--- a/src/battle/anim/leaf.c
+++ b/src/battle/anim/leaf.c
@@ -1,18 +1,120 @@
#include "global.h"
+#include "battle.h"
+#include "battle_anim.h"
#include "rom_8077ABC.h"
#include "trig.h"
-#include "battle_anim.h"
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CAED8(struct Sprite* sprite);
+void AnimMoveTwisterParticle(struct Sprite* sprite);
+void AnimTranslateLinearSingleSineWave(struct Sprite* sprite);
static void sub_80CAF20(struct Sprite* sprite);
static void sub_80CAF6C(struct Sprite* sprite);
+static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite);
+static void AnimMoveTwisterParticleStep(struct Sprite* sprite);
// leaf
// Used by Razor Leaf and Twister.
+const union AnimCmd gSpriteAnim_83D6458[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(20, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_83D6484[] =
+{
+ ANIMCMD_FRAME(24, 5),
+ ANIMCMD_FRAME(28, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6494[] =
+{
+ gSpriteAnim_83D6458,
+ gSpriteAnim_83D6484,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D649C =
+{
+ .tileTag = 10063,
+ .paletteTag = 10063,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6494,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CAED8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D64B4 =
+{
+ .tileTag = 10063,
+ .paletteTag = 10063,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6494,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveTwisterParticle,
+};
+
+const union AnimCmd gSpriteAnim_83D64CC[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D64E0[] =
+{
+ gSpriteAnim_83D64CC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D64E4 =
+{
+ .tileTag = 10160,
+ .paletteTag = 10160,
+ .oam = &gOamData_837DF54,
+ .anims = gSpriteAnimTable_83D64E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimTranslateLinearSingleSineWave,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D64FC[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D650C[] = {
+ gSpriteAffineAnim_83D64FC,
+};
+
+const struct SpriteTemplate gSwiftStarSpriteTemplate =
+{
+ .tileTag = 10174,
+ .paletteTag = 10174,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D650C,
+ .callback = AnimTranslateLinearSingleSineWave,
+};
+
void sub_80CAED8(struct Sprite* sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
@@ -23,7 +125,7 @@ void sub_80CAED8(struct Sprite* sprite)
sprite->callback = sub_80CAF20;
}
-void sub_80CAF20(struct Sprite* sprite)
+static void sub_80CAF20(struct Sprite* sprite)
{
if (!sprite->data[2])
{
@@ -49,7 +151,7 @@ void sub_80CAF20(struct Sprite* sprite)
}
}
-void sub_80CAF6C(struct Sprite* sprite)
+static void sub_80CAF6C(struct Sprite* sprite)
{
if (GetBattlerSide(gAnimBankAttacker))
{
@@ -72,3 +174,135 @@ void sub_80CAF6C(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
}
+
+// Animates a sprite that moves linearly from one location to another, with a
+// single-cycle sine wave added to the y position along the way.
+// Used by Razor Leaf and Magical Leaf.
+// arg 0: initial x offset
+// arg 1: initial y offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: translation duration
+// arg 5: wave amplitude
+// arg 6: target between double battle opponents (boolean)
+void AnimTranslateLinearSingleSineWave(struct Sprite* sprite)
+{
+ InitAnimSpritePos(sprite, 1);
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ {
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ }
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ if (!gBattleAnimArgs[6])
+ {
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3];
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]);
+ sprite->data[2] += gBattleAnimArgs[2];
+ sprite->data[4] += gBattleAnimArgs[3];
+ }
+
+ sprite->data[5] = gBattleAnimArgs[5];
+ InitAnimSpriteTranslationOverDuration(sprite);
+ if (GetBattlerSide(gAnimBankAttacker) == GetBattlerSide(gAnimBankTarget))
+ {
+ sprite->data[0] = 1;
+ }
+ else
+ {
+ sprite->data[0] = 0;
+ }
+
+ sprite->callback = AnimTranslateLinearSingleSineWaveStep;
+}
+
+static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite)
+{
+ bool8 destroy = FALSE;
+ s16 a = sprite->data[0];
+ s16 b = sprite->data[7];
+ s16 r0;
+
+ sprite->data[0] = 1;
+ TranslateAnimSpriteLinearAndSine(sprite);
+ r0 = sprite->data[7];
+ sprite->data[0] = a;
+ if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0)
+ sprite->oam.affineParam++;
+
+ if (sprite->oam.affineParam != 0 && sprite->data[0] != 0)
+ {
+ sprite->invisible ^= 1;
+ sprite->oam.affineParam++;
+ if (sprite->oam.affineParam == 0x1E)
+ destroy = TRUE;
+ }
+
+ if (sprite->pos1.x + sprite->pos2.x > 256
+ || sprite->pos1.x + sprite->pos2.x < -16
+ || sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ destroy = TRUE;
+
+ if (destroy)
+ DestroyAnimSprite(sprite);
+}
+
+// Animates particles in the Twister move animation.
+// arg 0: duration
+// arg 1: total y delta (the particles rise upward)
+// arg 2: wave period (higher means faster wave)
+// arg 3: wave amplitude
+// arg 4: speedup frame (particles move faster at the end of the animation)
+void AnimMoveTwisterParticle(struct Sprite* sprite)
+{
+ if (!IsContest() && IsDoubleBattle() == TRUE)
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y);
+ }
+
+ sprite->pos1.y += 32;
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[2] = gBattleAnimArgs[2];
+ sprite->data[3] = gBattleAnimArgs[3];
+ sprite->data[4] = gBattleAnimArgs[4];
+ sprite->callback = AnimMoveTwisterParticleStep;
+}
+
+static void AnimMoveTwisterParticleStep(struct Sprite* sprite)
+{
+ if (sprite->data[1] == 0xFF)
+ {
+ sprite->pos1.y -= 2;
+ }
+ else if (sprite->data[1] > 0)
+ {
+ sprite->pos1.y -= 2;
+ sprite->data[1] -= 2;
+ }
+
+ sprite->data[5] += sprite->data[2];
+ if (sprite->data[0] < sprite->data[4])
+ sprite->data[5] += sprite->data[2];
+
+ sprite->data[5] &= 0xFF;
+ sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]);
+ sprite->pos2.y = Sin(sprite->data[5], 5);
+ if (sprite->data[5] <= 0x7F)
+ {
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget) - 1;
+ }
+ else
+ {
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1;
+ }
+
+ sprite->data[0]--;
+ if (!sprite->data[0])
+ DestroyAnimSprite(sprite);
+}
diff --git a/src/battle/anim/lunge.c b/src/battle/anim/lunge.c
new file mode 100644
index 000000000..13cabb422
--- /dev/null
+++ b/src/battle/anim/lunge.c
@@ -0,0 +1,339 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "battle_anim.h"
+#include "sound.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+extern u8 gBankSpriteIds[];
+
+void sub_80CD774(struct Sprite* sprite);
+void sub_80CD9C4(struct Sprite* sprite);
+static void sub_80CD7CC(struct Sprite* sprite);
+static void sub_80CD81C(struct Sprite* sprite);
+static void sub_80CD8A8(struct Sprite* sprite);
+static void sub_80CD8F8(struct Sprite* sprite);
+static void sub_80CD91C(struct Sprite* sprite);
+static void sub_80CD9B8(struct Sprite* sprite);
+static void sub_80CD9D4(struct Sprite* sprite);
+static void sub_80CDB60(u8 taskId);
+static void sub_80CDD20(u8 taskId);
+
+// lunge_1 (makes the pokemon sprite do a "lunge" where it leans back to attack, usually with its head or horn.)
+// Used in Drill Peck, Headbutt, Horn Attack, and Horn Drill.
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6DE4 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CD774,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6DFC =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CD9C4,
+};
+
+void sub_80CD774(struct Sprite* sprite)
+{
+ sprite->invisible = 1;
+ sprite->data[0] = 0;
+ switch (gBattleAnimArgs[0])
+ {
+ case 0:
+ sprite->callback = sub_80CD7CC;
+ break;
+ case 1:
+ sprite->callback = sub_80CD8A8;
+ break;
+ case 2:
+ sprite->callback = sub_80CD8F8;
+ break;
+ default:
+ sprite->callback = sub_80CD9B8;
+ break;
+ }
+}
+
+static void sub_80CD7CC(struct Sprite* sprite)
+{
+ sprite->data[0] = 6;
+ sprite->data[1] = (GetBattlerSide(gAnimBankAttacker)) ? 2 : -2;
+ sprite->data[2] = 0;
+ sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
+ StoreSpriteCallbackInData(sprite, sub_80CD81C);
+ sprite->callback = TranslateMonBGUntil;
+}
+
+static void sub_80CD81C(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
+ sub_8078E70(sprite->data[3], 0);
+ sprite->data[4] = (sprite->data[6] = GetBattlerSide(gAnimBankAttacker)) ? 0x300 : 0xFFFFFD00;
+ sprite->data[5] = 0;
+ }
+
+ sprite->data[5] += sprite->data[4];
+ obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
+ sub_8078F9C(sprite->data[3]);
+ if (++sprite->data[0] > 3)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_80CD9B8;
+ }
+}
+
+static void sub_80CD8A8(struct Sprite* sprite)
+{
+ sprite->data[0] = 4;
+ sprite->data[1] = (GetBattlerSide(gAnimBankAttacker)) ? -3 : 3;
+ sprite->data[2] = 0;
+ sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
+ StoreSpriteCallbackInData(sprite, sub_80CD9B8);
+ sprite->callback = TranslateMonBGUntil;
+}
+
+static void sub_80CD8F8(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 8)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_80CD91C;
+ }
+}
+
+static void sub_80CD91C(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
+ sprite->data[6] = GetBattlerSide(gAnimBankAttacker);
+ if (GetBattlerSide(gAnimBankAttacker))
+ {
+ sprite->data[4] = 0xFC00;
+ sprite->data[5] = 0xC00;
+ }
+ else
+ {
+ sprite->data[4] = 0x400;
+ sprite->data[5] = 0xF400;
+ }
+ }
+
+ sprite->data[5] += sprite->data[4];
+ obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
+ sub_8078F9C(sprite->data[3]);
+ if (++sprite->data[0] > 2)
+ {
+ sub_8078F40(sprite->data[3]);
+ sprite->callback = sub_80CD9B8;
+ }
+}
+
+static void sub_80CD9B8(struct Sprite* sprite)
+{
+ DestroyAnimSprite(sprite);
+}
+
+void sub_80CD9C4(struct Sprite* sprite)
+{
+ sprite->data[0] = 0;
+ sprite->callback = sub_80CD9D4;
+}
+
+static void sub_80CD9D4(struct Sprite* sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->data[1] = 0;
+ sprite->data[2] = gBankSpriteIds[gAnimBankAttacker];
+ sprite->data[3] = GetBattlerSide(gAnimBankAttacker);
+ sprite->data[4] = (sprite->data[3] != 0) ? 0x200 : -0x200;
+ sprite->data[5] = 0;
+ sub_8078E70(sprite->data[2], 0);
+ sprite->data[0]++;
+ case 1:
+ sprite->data[5] += sprite->data[4];
+ obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
+ sub_8078F9C(sprite->data[2]);
+ if (++sprite->data[1] > 3)
+ {
+ sprite->data[1] = 0;
+ sprite->data[4] *= -1;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->data[5] += sprite->data[4];
+ obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
+ sub_8078F9C(sprite->data[2]);
+ if (++sprite->data[1] > 3)
+ {
+ sub_8078F40(sprite->data[2]);
+ DestroyAnimSprite(sprite);
+ }
+ break;
+ }
+}
+
+void sub_80CDAC8(u8 taskId)
+{
+ u8 a;
+
+ gTasks[taskId].data[0] = gBankSpriteIds[gAnimBankAttacker];
+ a = GetBattlerSide(gAnimBankAttacker);
+ gTasks[taskId].data[1] = a;
+ gTasks[taskId].data[2] = 0;
+ switch (gBattleAnimArgs[0])
+ {
+ default:
+ DestroyAnimVisualTask(taskId);
+ break;
+ case 0:
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3] = 8;
+ gTasks[taskId].data[4] = 0;
+ gTasks[taskId].data[5] = 3;
+ if (a == 0)
+ gTasks[taskId].data[5] *= -1;
+
+ gTasks[taskId].func = sub_80CDB60;
+ break;
+ case 1:
+ gTasks[taskId].data[3] = 8;
+ gTasks[taskId].data[4] = 0x600;
+ gTasks[taskId].data[5] = 0xC0;
+ if (a == 0)
+ {
+ gTasks[taskId].data[4] = -gTasks[taskId].data[4];
+ gTasks[taskId].data[5] = -gTasks[taskId].data[5];
+ }
+
+ gTasks[taskId].func = sub_80CDD20;
+ break;
+ }
+}
+
+void sub_80CDB60(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ switch (task->data[2])
+ {
+ case 0:
+ if (task->data[3])
+ {
+ task->data[4] += task->data[5];
+ gSprites[task->data[0]].pos2.x = task->data[4];
+ task->data[3]--;
+ }
+ else
+ {
+ task->data[3] = 8;
+ task->data[4] = 0;
+ task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0;
+ sub_8078E70(task->data[0], 0);
+ task->data[2]++;
+ }
+ break;
+ case 1:
+ if (task->data[3])
+ {
+ task->data[4] += task->data[5];
+ obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]);
+ sub_8078F9C(task->data[0]);
+ task->data[3]--;
+ }
+ else
+ {
+ task->data[3] = 8;
+ task->data[4] = gSprites[task->data[0]].pos2.x;
+ task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2;
+ task->data[6] = 1;
+ task->data[2]++;
+ }
+ break;
+ case 2:
+ if (task->data[3])
+ {
+ if (task->data[6])
+ {
+ task->data[6]--;
+ }
+ else
+ {
+ if (task->data[3] & 1)
+ gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5];
+ else
+ gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5];
+
+ task->data[6] = 1;
+ task->data[3]--;
+ }
+ }
+ else
+ {
+ gSprites[task->data[0]].pos2.x = task->data[4];
+ task->data[3] = 12;
+ task->data[2]++;
+ }
+ break;
+ case 3:
+ if (task->data[3])
+ {
+ task->data[3]--;
+ }
+ else
+ {
+ task->data[3] = 3;
+ task->data[4] = gSprites[task->data[0]].pos2.x;
+ task->data[5] = (task->data[1] == 0) ? 8 : -8;
+ task->data[2]++;
+ }
+ break;
+ case 4:
+ if (task->data[3])
+ {
+ task->data[4] += task->data[5];
+ gSprites[task->data[0]].pos2.x = task->data[4];
+ task->data[3]--;
+ }
+ else
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_80CDD20(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (task->data[3])
+ {
+ task->data[4] -= task->data[5];
+ obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]);
+ sub_8078F9C(task->data[0]);
+ task->data[3]--;
+ }
+ else
+ {
+ sub_8078F40(task->data[0]);
+ DestroyAnimVisualTask(taskId);
+ }
+}
diff --git a/src/battle/anim/lunge_1.c b/src/battle/anim/lunge_1.c
deleted file mode 100644
index 949fb89f4..000000000
--- a/src/battle/anim/lunge_1.c
+++ /dev/null
@@ -1,124 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u8 gBankSpriteIds[];
-
-static void sub_80CD7CC(struct Sprite* sprite);
-static void sub_80CD81C(struct Sprite* sprite);
-static void sub_80CD8A8(struct Sprite* sprite);
-static void sub_80CD8F8(struct Sprite* sprite);
-static void sub_80CD91C(struct Sprite* sprite);
-static void sub_80CD9B8(struct Sprite* sprite);
-
-// lunge_1 (makes the pokemon sprite do a "lunge" where it leans back to attack, usually with its head or horn.)
-// Used in Drill Peck, Headbutt, Horn Attack, and Horn Drill.
-
-void sub_80CD774(struct Sprite* sprite)
-{
- sprite->invisible = 1;
- sprite->data[0] = 0;
- switch (gBattleAnimArgs[0])
- {
- case 0:
- sprite->callback = sub_80CD7CC;
- break;
- case 1:
- sprite->callback = sub_80CD8A8;
- break;
- case 2:
- sprite->callback = sub_80CD8F8;
- break;
- default:
- sprite->callback = sub_80CD9B8;
- break;
- }
-}
-
-void sub_80CD7CC(struct Sprite* sprite)
-{
- sprite->data[0] = 6;
- sprite->data[1] = (GetBattlerSide(gAnimBankAttacker)) ? 2 : -2;
- sprite->data[2] = 0;
- sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
- StoreSpriteCallbackInData(sprite, sub_80CD81C);
- sprite->callback = TranslateMonBGUntil;
-}
-
-void sub_80CD81C(struct Sprite* sprite)
-{
- if (sprite->data[0] == 0)
- {
- sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
- sub_8078E70(sprite->data[3], 0);
- sprite->data[4] = (sprite->data[6] = GetBattlerSide(gAnimBankAttacker)) ? 0x300 : 0xFFFFFD00;
- sprite->data[5] = 0;
- }
-
- sprite->data[5] += sprite->data[4];
- obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
- sub_8078F9C(sprite->data[3]);
- if (++sprite->data[0] > 3)
- {
- sprite->data[0] = 0;
- sprite->callback = sub_80CD9B8;
- }
-}
-
-void sub_80CD8A8(struct Sprite* sprite)
-{
- sprite->data[0] = 4;
- sprite->data[1] = (GetBattlerSide(gAnimBankAttacker)) ? -3 : 3;
- sprite->data[2] = 0;
- sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
- StoreSpriteCallbackInData(sprite, sub_80CD9B8);
- sprite->callback = TranslateMonBGUntil;
-}
-
-void sub_80CD8F8(struct Sprite* sprite)
-{
- if (++sprite->data[0] > 8)
- {
- sprite->data[0] = 0;
- sprite->callback = sub_80CD91C;
- }
-}
-
-void sub_80CD91C(struct Sprite* sprite)
-{
- if (sprite->data[0] == 0)
- {
- sprite->data[3] = gBankSpriteIds[gAnimBankAttacker];
- sprite->data[6] = GetBattlerSide(gAnimBankAttacker);
- if (GetBattlerSide(gAnimBankAttacker))
- {
- sprite->data[4] = 0xFC00;
- sprite->data[5] = 0xC00;
- }
- else
- {
- sprite->data[4] = 0x400;
- sprite->data[5] = 0xF400;
- }
- }
-
- sprite->data[5] += sprite->data[4];
- obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
- sub_8078F9C(sprite->data[3]);
- if (++sprite->data[0] > 2)
- {
- sub_8078F40(sprite->data[3]);
- sprite->callback = sub_80CD9B8;
- }
-}
-
-void sub_80CD9B8(struct Sprite* sprite)
-{
- DestroyAnimSprite(sprite);
-}
diff --git a/src/battle/anim/lunge_2.c b/src/battle/anim/lunge_2.c
deleted file mode 100644
index c0100922c..000000000
--- a/src/battle/anim/lunge_2.c
+++ /dev/null
@@ -1,163 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u8 gBankSpriteIds[];
-
-static void sub_80CDB60(u8 taskId);
-static void sub_80CDD20(u8 taskId);
-
-// lunge_2
-// Drill Peck
-
-void sub_80CDAC8(u8 taskId)
-{
- u8 a;
-
- gTasks[taskId].data[0] = gBankSpriteIds[gAnimBankAttacker];
- a = GetBattlerSide(gAnimBankAttacker);
- gTasks[taskId].data[1] = a;
- gTasks[taskId].data[2] = 0;
- switch (gBattleAnimArgs[0])
- {
- default:
- DestroyAnimVisualTask(taskId);
- break;
- case 0:
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].data[3] = 8;
- gTasks[taskId].data[4] = 0;
- gTasks[taskId].data[5] = 3;
- if (a == 0)
- gTasks[taskId].data[5] *= -1;
-
- gTasks[taskId].func = sub_80CDB60;
- break;
- case 1:
- gTasks[taskId].data[3] = 8;
- gTasks[taskId].data[4] = 0x600;
- gTasks[taskId].data[5] = 0xC0;
- if (a == 0)
- {
- gTasks[taskId].data[4] = -gTasks[taskId].data[4];
- gTasks[taskId].data[5] = -gTasks[taskId].data[5];
- }
-
- gTasks[taskId].func = sub_80CDD20;
- break;
- }
-}
-
-void sub_80CDB60(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
- switch (task->data[2])
- {
- case 0:
- if (task->data[3])
- {
- task->data[4] += task->data[5];
- gSprites[task->data[0]].pos2.x = task->data[4];
- task->data[3]--;
- }
- else
- {
- task->data[3] = 8;
- task->data[4] = 0;
- task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0;
- sub_8078E70(task->data[0], 0);
- task->data[2]++;
- }
- break;
- case 1:
- if (task->data[3])
- {
- task->data[4] += task->data[5];
- obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]);
- sub_8078F9C(task->data[0]);
- task->data[3]--;
- }
- else
- {
- task->data[3] = 8;
- task->data[4] = gSprites[task->data[0]].pos2.x;
- task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2;
- task->data[6] = 1;
- task->data[2]++;
- }
- break;
- case 2:
- if (task->data[3])
- {
- if (task->data[6])
- {
- task->data[6]--;
- }
- else
- {
- if (task->data[3] & 1)
- gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5];
- else
- gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5];
-
- task->data[6] = 1;
- task->data[3]--;
- }
- }
- else
- {
- gSprites[task->data[0]].pos2.x = task->data[4];
- task->data[3] = 12;
- task->data[2]++;
- }
- break;
- case 3:
- if (task->data[3])
- {
- task->data[3]--;
- }
- else
- {
- task->data[3] = 3;
- task->data[4] = gSprites[task->data[0]].pos2.x;
- task->data[5] = (task->data[1] == 0) ? 8 : -8;
- task->data[2]++;
- }
- break;
- case 4:
- if (task->data[3])
- {
- task->data[4] += task->data[5];
- gSprites[task->data[0]].pos2.x = task->data[4];
- task->data[3]--;
- }
- else
- {
- DestroyAnimVisualTask(taskId);
- }
- break;
- }
-}
-
-void sub_80CDD20(u8 taskId)
-{
- struct Task* task = &gTasks[taskId];
- if (task->data[3])
- {
- task->data[4] -= task->data[5];
- obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]);
- sub_8078F9C(task->data[0]);
- task->data[3]--;
- }
- else
- {
- sub_8078F40(task->data[0]);
- DestroyAnimVisualTask(taskId);
- }
-}
diff --git a/src/battle/anim/money.c b/src/battle/anim/money.c
index 1407e8cd7..3960b5e1a 100644
--- a/src/battle/anim/money.c
+++ b/src/battle/anim/money.c
@@ -8,11 +8,57 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CFE9C(struct Sprite* sprite);
+void sub_80CFF50(struct Sprite* sprite);
static void sub_80CFF68(struct Sprite* sprite);
// money
// Used by Pay Day.
+const union AnimCmd gSpriteAnim_83D75C4[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D75CC[] =
+{
+ gSpriteAnim_83D75C4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D75D0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D75E0[] =
+{
+ gSpriteAffineAnim_83D75D0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D75E4 =
+{
+ .tileTag = 10100,
+ .paletteTag = 10100,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83D75CC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CFE9C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D75FC =
+{
+ .tileTag = 10100,
+ .paletteTag = 10100,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83D75CC,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D75E0,
+ .callback = sub_80CFF50,
+};
+
void sub_80CFE9C(struct Sprite* sprite)
{
s16 r6;
@@ -43,7 +89,7 @@ void sub_80CFF50(struct Sprite* sprite)
sprite->callback = sub_80CFF68;
}
-void sub_80CFF68(struct Sprite* sprite)
+static void sub_80CFF68(struct Sprite* sprite)
{
sprite->data[0] += 0x80;
sprite->pos2.x = sprite->data[0] >> 8;
diff --git a/src/battle/anim/moon.c b/src/battle/anim/moon.c
index c532e8057..6e889008e 100644
--- a/src/battle/anim/moon.c
+++ b/src/battle/anim/moon.c
@@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CE30C(struct Sprite* sprite);
static void sub_80CE354(struct Sprite* sprite);
// moon (shows a moon image.)
// Used in Moonlight.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8 =
+{
+ .tileTag = 10194,
+ .paletteTag = 10194,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CE30C,
+};
+
void sub_80CE30C(struct Sprite* sprite)
{
if (IsContest())
@@ -32,7 +44,7 @@ void sub_80CE30C(struct Sprite* sprite)
sprite->callback = sub_80CE354;
}
-void sub_80CE354(struct Sprite* sprite)
+static void sub_80CE354(struct Sprite* sprite)
{
if (sprite->data[0])
DestroyAnimSprite(sprite);
diff --git a/src/battle/anim/musical.c b/src/battle/anim/musical.c
new file mode 100644
index 000000000..17836ace7
--- /dev/null
+++ b/src/battle/anim/musical.c
@@ -0,0 +1,393 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "battle_anim.h"
+#include "sound.h"
+#include "palette.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+void sub_80CEB0C(struct Sprite* sprite);
+void sub_80CECE8(struct Sprite* sprite);
+void sub_80CEDF0(struct Sprite* sprite);
+void sub_80CEE60(struct Sprite* sprite);
+static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e);
+static void sub_80CEC1C(struct Sprite* sprite);
+static void sub_80CED78(struct Sprite* sprite);
+static void sub_80CEEE8(struct Sprite* sprite);
+
+const union AnimCmd gSpriteAnim_83D7098[] =
+{
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D70A0[] =
+{
+ ANIMCMD_FRAME(4, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D70A8[] =
+{
+ ANIMCMD_FRAME(8, 41),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D70B0[] =
+{
+ ANIMCMD_FRAME(12, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D70B8[] =
+{
+ ANIMCMD_FRAME(16, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D70C0[] =
+{
+ ANIMCMD_FRAME(20, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D70C8[] =
+{
+ ANIMCMD_FRAME(0, 10, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D70D0[] =
+{
+ ANIMCMD_FRAME(4, 10, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D70D8[] =
+{
+ gSpriteAnim_83D7098,
+ gSpriteAnim_83D70A0,
+ gSpriteAnim_83D70A8,
+ gSpriteAnim_83D70B0,
+ gSpriteAnim_83D70B8,
+ gSpriteAnim_83D70C0,
+ gSpriteAnim_83D70C8,
+ gSpriteAnim_83D70D0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D70F8[] =
+{
+ AFFINEANIMCMD_FRAME(0xC, 0xC, 0, 16),
+ AFFINEANIMCMD_FRAME(0xFFF4, 0xFFF4, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7110[] =
+{
+ gSpriteAffineAnim_83D70F8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7114 =
+{
+ .tileTag = 10072,
+ .paletteTag = 10072,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83D70D8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7110,
+ .callback = sub_80CEB0C,
+};
+
+const u16 gUnknown_083D712C[][6] =
+{
+ {10072, RGB(31, 31, 31), RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)},
+ {10097, RGB(31, 31, 31), RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)},
+ {10185, RGB(31, 31, 31), RGB(31, 31, 24), RGB(31, 31, 17), RGB(31, 31, 10), RGB(31, 31, 3)},
+ {10175, RGB(31, 31, 31), RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)},
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D715C =
+{
+ .tileTag = 10072,
+ .paletteTag = 10072,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83D70D8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7110,
+ .callback = sub_80CECE8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7174 =
+{
+ .tileTag = 10193,
+ .paletteTag = 10193,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CEDF0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D718C[] =
+{
+ AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D71A4[] =
+{
+ gSpriteAffineAnim_83D718C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D71A8 =
+{
+ .tileTag = 10072,
+ .paletteTag = 10072,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83D70D8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D71A4,
+ .callback = sub_80CEE60,
+};
+
+// musical (music notes, drum)
+// Used by Grasswhistle, Belly Drum, and Sing.
+
+// rainbow effect for musical notes
+void sub_80CEA20(u8 taskId)
+{
+ u16 i;
+ u16 j;
+ u16 index;
+
+ index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]);
+ if (index != 0xFF)
+ {
+ index = (index << 4) + 0x100;
+ for (i = 1; i < 6; i++)
+ {
+ gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i];
+ }
+ }
+
+ for (j = 1; j < 4; j++)
+ {
+ index = AllocSpritePalette(gUnknown_083D712C[j][0]);
+ if (index != 0xFF)
+ {
+ index = (index << 4) + 0x100;
+ for (i = 1; i < 6; i++)
+ {
+ gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i];
+ }
+ }
+ }
+ DestroyAnimVisualTask(taskId);
+}
+
+// clears the rainbow effect for musical notes.
+void sub_80CEAD8(u8 taskId)
+{
+ u16 i;
+ for (i = 1; i < 4; i++)
+ {
+ FreeSpritePaletteByTag(gUnknown_083D712C[i][0]);
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_80CEB0C(struct Sprite* sprite)
+{
+ u8 index;
+ u8 a;
+ u8 b;
+ sub_8078650(sprite);
+ StartSpriteAnim(sprite, gBattleAnimArgs[0]);
+ if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF)
+ sprite->oam.paletteNum = index;
+
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[2] = 0;
+ sprite->data[3] = gBattleAnimArgs[2];
+ if (IsContest())
+ {
+ a = 0x30;
+ b = 0x28;
+ }
+ else
+ {
+ a = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+ b = GetBattlerSpriteCoord(gAnimBankTarget, 3);
+ }
+
+ sprite->data[4] = sprite->pos1.x << 4;
+ sprite->data[5] = sprite->pos1.y << 4;
+ sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 0x28);
+ sprite->callback = sub_80CEC1C;
+}
+
+static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e)
+{
+ int f;
+ int g;
+ if (a < 0)
+ e = -e;
+
+ f = a << 8;
+ g = f / e;
+ if (g == 0)
+ g = 1;
+
+ *c = f / g;
+ *d = (b << 8) / g;
+}
+
+static void sub_80CEC1C(struct Sprite* sprite)
+{
+ int b;
+ s16 a;
+ int c;
+ u8 index;
+ sprite->data[0]++;
+ b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8);
+ sprite->data[4] += sprite->data[6];
+ sprite->data[5] += sprite->data[7];
+ sprite->pos1.x = sprite->data[4] >> 4;
+ sprite->pos1.y = sprite->data[5] >> 4;
+ sprite->pos2.y = Sin(b, 15);
+ a = (u16)sprite->pos1.y;
+ c = (u16)sprite->pos1.x;
+
+ if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80)
+ {
+ move_anim_8074EE0(sprite);
+ }
+ else
+ {
+ if (sprite->data[3] && ++sprite->data[2] > sprite->data[3])
+ {
+ sprite->data[2] = 0;
+ if (++sprite->data[1] > 3)
+ sprite->data[1] = 0;
+
+ index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data[1]][0]);
+ if (index != 0xFF)
+ sprite->oam.paletteNum = index;
+ }
+ }
+}
+
+// note_scatter
+// Used by Teeter Dance.
+
+void sub_80CECE8(struct Sprite* sprite)
+{
+ int a;
+ if (GetBattlerSide(gAnimBankAttacker) == 1)
+ {
+ a = gBattleAnimArgs[1];
+ (u16)gBattleAnimArgs[1] = -a;
+ }
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + gBattleAnimArgs[2];
+ StartSpriteAnim(sprite, gBattleAnimArgs[0]);
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ sprite->data[4] = sprite->pos1.x << 4;
+ sprite->data[5] = sprite->pos1.y << 4;
+ sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5;
+ sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5;
+ sprite->callback = sub_80CED78;
+}
+
+static void sub_80CED78(struct Sprite* sprite)
+{
+ sprite->data[4] += sprite->data[6];
+ sprite->data[5] += sprite->data[7];
+ sprite->pos1.x = sprite->data[4] >> 4;
+ sprite->pos1.y = sprite->data[5] >> 4;
+ if (sprite->data[0] > 5 && sprite->data[3] == 0)
+ {
+ sprite->data[2] = (sprite->data[2] + 16) & 0xFF;
+ sprite->pos2.x = Cos(sprite->data[2], 18);
+ sprite->pos2.y = Sin(sprite->data[2], 18);
+ if (sprite->data[2] == 0)
+ sprite->data[3] = 1;
+ }
+
+ if (++sprite->data[0] == 0x30)
+ move_anim_8074EE0(sprite);
+}
+
+// drum (using hands to slap the Pokemon's belly in a rhythm.)
+// Used in Belly Drum.
+
+void sub_80CEDF0(struct Sprite* sprite)
+{
+ s16 a;
+ if (gBattleAnimArgs[0] == 1)
+ {
+ sprite->oam.matrixNum = 8;
+ a = 16;
+ }
+ else
+ {
+ a = -16;
+ }
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + a;
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + 8;
+ sprite->data[0] = 8;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+}
+
+// note_scatter_2 (slower scatter of notes.)
+// Used in Belly Drum.
+
+void sub_80CEE60(struct Sprite* sprite)
+{
+ s16 a;
+ u8 index;
+ sub_8078650(sprite);
+ sprite->pos1.y += 8;
+ StartSpriteAnim(sprite, gBattleAnimArgs[1]);
+ index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]);
+ if (index != 0xFF)
+ sprite->oam.paletteNum = index;
+
+ a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20;
+ sprite->data[0] = 40;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = a + sprite->data[1];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->data[3] - 40;
+ InitAnimSpriteTranslationDeltas(sprite);
+ sprite->data[5] = gBattleAnimArgs[3];
+ sprite->callback = sub_80CEEE8;
+}
+
+static void sub_80CEEE8(struct Sprite* sprite)
+{
+ if (TranslateAnimSpriteByDeltas(sprite) == 0)
+ {
+ s16 a;
+ a = Sin(sprite->data[5], 8);
+ if (sprite->pos2.x < 0)
+ a = -a;
+
+ sprite->pos2.x += a;
+ sprite->pos2.y += Sin(sprite->data[5], 4);
+ sprite->data[5] = (sprite->data[5] + 8) & 0xFF;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
diff --git a/src/battle/anim/noise.c b/src/battle/anim/noise.c
index 0b6498318..6a6f6c10a 100644
--- a/src/battle/anim/noise.c
+++ b/src/battle/anim/noise.c
@@ -6,11 +6,23 @@ extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D2D68(struct Sprite* sprite);
static void sub_80D2E30(struct Sprite *);
// noise (moving music note)
// Used in Uproar.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7CC8 =
+{
+ .tileTag = 10225,
+ .paletteTag = 10225,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2D68,
+};
+
void sub_80D2D68(struct Sprite* sprite)
{
int var1;
diff --git a/src/battle/anim/normal.c b/src/battle/anim/normal.c
new file mode 100755
index 000000000..8303e7c68
--- /dev/null
+++ b/src/battle/anim/normal.c
@@ -0,0 +1,240 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "battle_anim.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+
+void sub_80E1CB4(struct Sprite *sprite);
+void sub_80E1D84(struct Sprite *sprite);
+void sub_80E1E2C(struct Sprite *sprite);
+void sub_80E1F3C(struct Sprite *sprite);
+void sub_80E24B8(struct Sprite *sprite);
+void sub_80E27A0(struct Sprite *sprite);
+void sub_80E2838(struct Sprite *sprite);
+void sub_80E27A0(struct Sprite *sprite);
+void sub_80E2870(struct Sprite *sprite);
+void sub_80E2908(struct Sprite *sprite);
+void sub_80E2978(struct Sprite *sprite);
+void sub_80E29C0(struct Sprite *sprite);
+void sub_80E27E8(struct Sprite *sprite);
+
+const union AnimCmd gSpriteAnim_83DB37C[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 8),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_83DB390[] =
+{
+ ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(8, 8),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DB3A4[] =
+{
+ gSpriteAnim_83DB37C,
+ gSpriteAnim_83DB390,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB3AC =
+{
+ .tileTag = 10073,
+ .paletteTag = 10073,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83DB3A4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1CB4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB3C4 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1D84,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB3DC =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1E2C,
+};
+
+const union AnimCmd gSpriteAnim_83DB3F4[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DB40C[] =
+{
+ gSpriteAnim_83DB3F4,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DB410 =
+{
+ .tileTag = 10071,
+ .paletteTag = 10071,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DB40C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E1F3C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB428 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E24B8,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB440[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB450[] =
+{
+ AFFINEANIMCMD_FRAME(0xD8, 0xD8, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB468[] =
+{
+ AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DB480[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB498[] =
+{
+ gSpriteAffineAnim_83DB440,
+ gSpriteAffineAnim_83DB450,
+ gSpriteAffineAnim_83DB468,
+ gSpriteAffineAnim_83DB480,
+};
+
+const struct SpriteTemplate gBasicHitSplatSpriteTemplate =
+{
+ .tileTag = 10135,
+ .paletteTag = 10135,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB498,
+ .callback = sub_80E27A0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB4C0 =
+{
+ .tileTag = 10135,
+ .paletteTag = 10135,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB498,
+ .callback = sub_80E2838,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB4D8 =
+{
+ .tileTag = 10148,
+ .paletteTag = 10148,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB498,
+ .callback = sub_80E27A0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB4F0 =
+{
+ .tileTag = 10135,
+ .paletteTag = 10135,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB498,
+ .callback = sub_80E2870,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB508 =
+{
+ .tileTag = 10135,
+ .paletteTag = 10135,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB498,
+ .callback = sub_80E2908,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB520 =
+{
+ .tileTag = 10285,
+ .paletteTag = 10285,
+ .oam = &gOamData_837E054,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80E2978,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB538 =
+{
+ .tileTag = 10135,
+ .paletteTag = 10135,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB498,
+ .callback = sub_80E29C0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB550 =
+{
+ .tileTag = 10135,
+ .paletteTag = 10135,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB498,
+ .callback = sub_80E27E8,
+};
+
+const u16 gUnknown_083DB568 = RGB(31, 31, 31);
diff --git a/src/battle/anim/note_rain.c b/src/battle/anim/note_rain.c
index 4e12c7e1a..26ae96c3a 100644
--- a/src/battle/anim/note_rain.c
+++ b/src/battle/anim/note_rain.c
@@ -8,30 +8,5 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern u16 gUnknown_083D7A5C[5];
-
// note_rain (notes rain from a source point, usually a bell.)
// Used in Heal Bell.
-
-void sub_80D1BA8(struct Sprite* sprite, u8 a, u8 b)
-{
- u8 tile;
- tile = (b & 1);
- tile = ((-tile | tile) >> 31) & 32;
- sprite->oam.tileNum += tile + (a << 2);
- sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083D7A5C[b >> 1]);
-}
-
-void sub_80D1C08(struct Sprite* sprite)
-{
- InitAnimSpritePos(sprite, 0);
- if (GetBattlerSide(gAnimBankAttacker) != 0)
- gBattleAnimArgs[2] = -gBattleAnimArgs[2];
-
- sprite->data[0] = gBattleAnimArgs[4];
- sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[2];
- sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[3];
- sprite->callback = StartTranslateAnimSpriteByDeltas;
- StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
- sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]);
-}
diff --git a/src/battle/anim/note_scatter.c b/src/battle/anim/note_scatter.c
deleted file mode 100644
index 53afa7d78..000000000
--- a/src/battle/anim/note_scatter.c
+++ /dev/null
@@ -1,54 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-static void sub_80CED78(struct Sprite* sprite);
-
-// note_scatter
-// Used by Teeter Dance.
-
-void sub_80CECE8(struct Sprite* sprite)
-{
- int a;
- if (GetBattlerSide(gAnimBankAttacker) == 1)
- {
- a = gBattleAnimArgs[1];
- (u16)gBattleAnimArgs[1] = -a;
- }
-
- sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[1];
- sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + gBattleAnimArgs[2];
- StartSpriteAnim(sprite, gBattleAnimArgs[0]);
- sprite->data[2] = 0;
- sprite->data[3] = 0;
- sprite->data[4] = sprite->pos1.x << 4;
- sprite->data[5] = sprite->pos1.y << 4;
- sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5;
- sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5;
- sprite->callback = sub_80CED78;
-}
-
-void sub_80CED78(struct Sprite* sprite)
-{
- sprite->data[4] += sprite->data[6];
- sprite->data[5] += sprite->data[7];
- sprite->pos1.x = sprite->data[4] >> 4;
- sprite->pos1.y = sprite->data[5] >> 4;
- if (sprite->data[0] > 5 && sprite->data[3] == 0)
- {
- sprite->data[2] = (sprite->data[2] + 16) & 0xFF;
- sprite->pos2.x = Cos(sprite->data[2], 18);
- sprite->pos2.y = Sin(sprite->data[2], 18);
- if (sprite->data[2] == 0)
- sprite->data[3] = 1;
- }
-
- if (++sprite->data[0] == 0x30)
- move_anim_8074EE0(sprite);
-}
diff --git a/src/battle/anim/note_scatter_2.c b/src/battle/anim/note_scatter_2.c
deleted file mode 100644
index 262afb8bf..000000000
--- a/src/battle/anim/note_scatter_2.c
+++ /dev/null
@@ -1,57 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u16 gUnknown_083D712C[4][6];
-
-static void sub_80CEEE8(struct Sprite* sprite);
-
-// note_scatter_2 (slower scatter of notes.)
-// Used in Belly Drum.
-
-void sub_80CEE60(struct Sprite* sprite)
-{
- s16 a;
- u8 index;
- sub_8078650(sprite);
- sprite->pos1.y += 8;
- StartSpriteAnim(sprite, gBattleAnimArgs[1]);
- index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]);
- if (index != 0xFF)
- sprite->oam.paletteNum = index;
-
- a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20;
- sprite->data[0] = 40;
- sprite->data[1] = sprite->pos1.x;
- sprite->data[2] = a + sprite->data[1];
- sprite->data[3] = sprite->pos1.y;
- sprite->data[4] = sprite->data[3] - 40;
- InitAnimSpriteTranslationDeltas(sprite);
- sprite->data[5] = gBattleAnimArgs[3];
- sprite->callback = sub_80CEEE8;
-}
-
-void sub_80CEEE8(struct Sprite* sprite)
-{
- if (TranslateAnimSpriteByDeltas(sprite) == 0)
- {
- s16 a;
- a = Sin(sprite->data[5], 8);
- if (sprite->pos2.x < 0)
- a = -a;
-
- sprite->pos2.x += a;
- sprite->pos2.y += Sin(sprite->data[5], 4);
- sprite->data[5] = (sprite->data[5] + 8) & 0xFF;
- }
- else
- {
- DestroyAnimSprite(sprite);
- }
-}
diff --git a/src/battle/anim/note_spin.c b/src/battle/anim/note_spin.c
index 026ee1856..c3d6bdf52 100644
--- a/src/battle/anim/note_spin.c
+++ b/src/battle/anim/note_spin.c
@@ -7,12 +7,63 @@ extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern const union AnimCmd *const gSpriteAnimTable_83D70D8[];
+
+void sub_80D2E68(struct Sprite *sprite);
+void sub_80D2EC8(struct Sprite *sprite);
static void sub_80D2F80(struct Sprite *);
static void sub_80D2FA4(struct Sprite *);
// note_spin (spins music notes around, and rotates them)
// Used in Perish Song.
+const union AffineAnimCmd gSpriteAffineAnim_83D7CE0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 5),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7CF0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 16),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7D00[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 16),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7D10[] =
+{
+ gSpriteAffineAnim_83D7CE0,
+ gSpriteAffineAnim_83D7CF0,
+ gSpriteAffineAnim_83D7D00,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7D1C =
+{
+ .tileTag = 10206,
+ .paletteTag = 10206,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83D70D8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7D10,
+ .callback = sub_80D2EC8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7D34 =
+{
+ .tileTag = 10206,
+ .paletteTag = 10206,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83D70D8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7D10,
+ .callback = sub_80D2E68,
+};
+
void sub_80D2E68(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
diff --git a/src/battle/anim/note_wave.c b/src/battle/anim/note_wave.c
deleted file mode 100644
index 1f3db8c56..000000000
--- a/src/battle/anim/note_wave.c
+++ /dev/null
@@ -1,143 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-#include "palette.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u16 gUnknown_083D712C[4][6];
-
-static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e);
-static void sub_80CEC1C(struct Sprite* sprite);
-
-// note_wave
-// Used by Grasswhistle, Belly Drum, and Sing.
-
-// rainbow effect for musical notes
-void sub_80CEA20(u8 taskId)
-{
- u16 i;
- u16 j;
- u16 index;
-
- index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]);
- if (index != 0xFF)
- {
- index = (index << 4) + 0x100;
- for (i = 1; i < 6; i++)
- {
- gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i];
- }
- }
-
- for (j = 1; j < 4; j++)
- {
- index = AllocSpritePalette(gUnknown_083D712C[j][0]);
- if (index != 0xFF)
- {
- index = (index << 4) + 0x100;
- for (i = 1; i < 6; i++)
- {
- gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i];
- }
- }
- }
- DestroyAnimVisualTask(taskId);
-}
-
-// clears the rainbow effect for musical notes.
-void sub_80CEAD8(u8 taskId)
-{
- u16 i;
- for (i = 1; i < 4; i++)
- {
- FreeSpritePaletteByTag(gUnknown_083D712C[i][0]);
- }
-
- DestroyAnimVisualTask(taskId);
-}
-
-void sub_80CEB0C(struct Sprite* sprite)
-{
- u8 index;
- u8 a;
- u8 b;
- sub_8078650(sprite);
- StartSpriteAnim(sprite, gBattleAnimArgs[0]);
- if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF)
- sprite->oam.paletteNum = index;
-
- sprite->data[1] = gBattleAnimArgs[1];
- sprite->data[2] = 0;
- sprite->data[3] = gBattleAnimArgs[2];
- if (IsContest())
- {
- a = 0x30;
- b = 0x28;
- }
- else
- {
- a = GetBattlerSpriteCoord(gAnimBankTarget, 2);
- b = GetBattlerSpriteCoord(gAnimBankTarget, 3);
- }
-
- sprite->data[4] = sprite->pos1.x << 4;
- sprite->data[5] = sprite->pos1.y << 4;
- sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 0x28);
- sprite->callback = sub_80CEC1C;
-}
-
-void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e)
-{
- int f;
- int g;
- if (a < 0)
- e = -e;
-
- f = a << 8;
- g = f / e;
- if (g == 0)
- g = 1;
-
- *c = f / g;
- *d = (b << 8) / g;
-}
-
-void sub_80CEC1C(struct Sprite* sprite)
-{
- int b;
- s16 a;
- int c;
- u8 index;
- sprite->data[0]++;
- b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8);
- sprite->data[4] += sprite->data[6];
- sprite->data[5] += sprite->data[7];
- sprite->pos1.x = sprite->data[4] >> 4;
- sprite->pos1.y = sprite->data[5] >> 4;
- sprite->pos2.y = Sin(b, 15);
- a = (u16)sprite->pos1.y;
- c = (u16)sprite->pos1.x;
-
- if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80)
- {
- move_anim_8074EE0(sprite);
- }
- else
- {
- if (sprite->data[3] && ++sprite->data[2] > sprite->data[3])
- {
- sprite->data[2] = 0;
- if (++sprite->data[1] > 3)
- sprite->data[1] = 0;
-
- index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data[1]][0]);
- if (index != 0xFF)
- sprite->oam.paletteNum = index;
- }
- }
-}
diff --git a/src/battle/anim/orbit.c b/src/battle/anim/orbit.c
index b4a641cc2..e76e0923e 100644
--- a/src/battle/anim/orbit.c
+++ b/src/battle/anim/orbit.c
@@ -7,12 +7,85 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CABF8(struct Sprite* sprite);
+void sub_80CAD54(struct Sprite* sprite);
+void sub_80CAE20(struct Sprite* sprite);
static void sub_80CAC44(struct Sprite* sprite);
static void sub_80CADA8(struct Sprite* sprite);
static void sub_80CAE74(struct Sprite* sprite);
-// orbit (The effect of a sprite rotating around another one in a pseudo 3D effect.)
-// Used by Spore, Cotton Spore, and Petal Dance.
+const union AnimCmd gSpriteAnim_83D63E0[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D63E8[] =
+{
+ ANIMCMD_FRAME(4, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D63F0[] =
+{
+ gSpriteAnim_83D63E0,
+ gSpriteAnim_83D63E8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D63F8 =
+{
+ .tileTag = 10158,
+ .paletteTag = 10158,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D63F0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CABF8,
+};
+
+const union AnimCmd gSpriteAnim_83D6410[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6418[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6420[] =
+{
+ gSpriteAnim_83D6410,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6424[] =
+{
+ gSpriteAnim_83D6418,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6428 =
+{
+ .tileTag = 10159,
+ .paletteTag = 10159,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6420,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CAD54,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6440 =
+{
+ .tileTag = 10159,
+ .paletteTag = 10159,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D6424,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CAE20,
+};
void sub_80CABF8(struct Sprite* sprite)
{
@@ -29,7 +102,7 @@ void sub_80CABF8(struct Sprite* sprite)
sub_80CAC44(sprite);
}
-void sub_80CAC44(struct Sprite* sprite)
+static void sub_80CAC44(struct Sprite* sprite)
{
u8 var1;
@@ -91,7 +164,7 @@ void sub_80CAD54(struct Sprite* sprite)
sub_80CADA8(sprite);
}
-void sub_80CADA8(struct Sprite* sprite)
+static void sub_80CADA8(struct Sprite* sprite)
{
if (!TranslateAnimSpriteByDeltas(sprite))
{
@@ -128,7 +201,7 @@ void sub_80CAE20(struct Sprite* sprite)
sub_80CAE74(sprite);
}
-void sub_80CAE74(struct Sprite* sprite)
+static void sub_80CAE74(struct Sprite* sprite)
{
if (!TranslateAnimSpriteByDeltas(sprite))
{
diff --git a/src/battle/anim/orbit_fast.c b/src/battle/anim/orbit_fast.c
deleted file mode 100644
index 67a59583f..000000000
--- a/src/battle/anim/orbit_fast.c
+++ /dev/null
@@ -1,63 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-static void AnimOrbitFastStep(struct Sprite* sprite);
-
-// Orbits a sphere in an ellipse around the mon.
-// Used by MOVE_HIDDEN_POWER
-// arg 0: duration
-// arg 1: initial wave offset
-void AnimOrbitFast(struct Sprite* sprite)
-{
- sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
- sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
- sprite->affineAnimPaused = 1;
- sprite->data[0] = gBattleAnimArgs[0];
- sprite->data[1] = gBattleAnimArgs[1];
- sprite->data[7] = sub_8079E90(gAnimBankAttacker);
- sprite->callback = AnimOrbitFastStep;
- sprite->callback(sprite);
-}
-
-static void AnimOrbitFastStep(struct Sprite* sprite)
-{
- if ((u16)(sprite->data[1] - 0x40) <= 0x7F)
- sprite->subpriority = sprite->data[7] + 1;
- else
- sprite->subpriority = sprite->data[7] - 1;
-
- sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8);
- sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8);
- sprite->data[1] = (sprite->data[1] + 9) & 0xFF;
- switch (sprite->data[5])
- {
- case 1:
- sprite->data[2] -= 0x400;
- sprite->data[3] -= 0x100;
- if (++sprite->data[4] == sprite->data[0])
- {
- sprite->data[5] = 2;
- return;
- }
- break;
- case 0:
- sprite->data[2] += 0x400;
- sprite->data[3] += 0x100;
- if (++sprite->data[4] == sprite->data[0])
- {
- sprite->data[4] = 0;
- sprite->data[5] = 1;
- }
- break;
- }
-
- if ((u16)gBattleAnimArgs[7] == 0xFFFF)
- DestroyAnimSprite(sprite);
-}
diff --git a/src/battle/anim/orbit_scatter.c b/src/battle/anim/orbit_scatter.c
deleted file mode 100644
index bd03ee78c..000000000
--- a/src/battle/anim/orbit_scatter.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-static void AnimOrbitScatterStep(struct Sprite* sprite);
-
-// Moves orbs away from the mon, based on where they are in their orbit.
-// Used in MOVE_HIDDEN_POWER.
-// arg 0: initial wave offset
-void AnimOrbitScatter(struct Sprite* sprite)
-{
- sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
- sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
- sprite->data[0] = Sin(gBattleAnimArgs[0], 10);
- sprite->data[1] = Cos(gBattleAnimArgs[0], 7);
- sprite->callback = AnimOrbitScatterStep;
-}
-
-static void AnimOrbitScatterStep(struct Sprite* sprite)
-{
- sprite->pos2.x += sprite->data[0];
- sprite->pos2.y += sprite->data[1];
- if (sprite->pos1.x + sprite->pos2.x + 16 > 0x110u || sprite->pos1.y + sprite->pos2.y > 0xA0 || sprite->pos1.y + sprite->pos2.y < -16)
- DestroyAnimSprite(sprite);
-}
diff --git a/src/battle/anim/orbs.c b/src/battle/anim/orbs.c
index 53c16d8d7..af6568bd8 100644
--- a/src/battle/anim/orbs.c
+++ b/src/battle/anim/orbs.c
@@ -8,11 +8,184 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CA7B0(struct Sprite* sprite);
+void sub_80CA800(struct Sprite* sprite);
+void sub_80CA858(struct Sprite* sprite);
+void sub_80CA9A8(struct Sprite* sprite);
+void sub_80CAA14(struct Sprite* sprite);
static void sub_80CA8B4(struct Sprite* sprite);
static void sub_80CA9F8(struct Sprite* sprite);
static void sub_80CAACC(struct Sprite* sprite);
-extern struct SpriteTemplate gSpriteTemplate_83D631C;
+const union AnimCmd gSpriteAnim_83D626C[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6274[] =
+{
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D627C[] =
+{
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6284[] =
+{
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D628C[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6294[] =
+{
+ ANIMCMD_FRAME(5, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D629C[] =
+{
+ ANIMCMD_FRAME(6, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D62A4[] =
+{
+ ANIMCMD_FRAME(7, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D62AC[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D62B4[] =
+{
+ gSpriteAnim_83D626C,
+ gSpriteAnim_83D6274,
+ gSpriteAnim_83D627C,
+ gSpriteAnim_83D6284,
+ gSpriteAnim_83D628C,
+ gSpriteAnim_83D6294,
+ gSpriteAnim_83D629C,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D62D0[] =
+{
+ gSpriteAnim_83D62A4,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D62D4[] =
+{
+ gSpriteAnim_83D62AC,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D62D8[] = {
+ AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D62E8[] = {
+ gSpriteAffineAnim_83D62D8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D62EC =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837E0AC,
+ .anims = gSpriteAnimTable_83D62D4,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D62E8,
+ .callback = sub_80CA7B0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6304 =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D62B4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CA800,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D631C =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D62D0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CA858,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6334[] = {
+ AFFINEANIMCMD_FRAME(320, 320, 0, 0),
+ AFFINEANIMCMD_FRAME(-14, -14, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D634C[] = {
+ gSpriteAffineAnim_83D6334,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6350 =
+{
+ .tileTag = 10235,
+ .paletteTag = 10235,
+ .oam = &gOamData_837DFE4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D634C,
+ .callback = sub_80CA7B0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6368[] = {
+ AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6378[] = {
+ gSpriteAffineAnim_83D6368,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D637C =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837E0AC,
+ .anims = gSpriteAnimTable_83D62D4,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6378,
+ .callback = sub_80CA9A8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6394 =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D62B4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CAA14,
+};
+
// orbs
// Used by Solar Beam, Absorb, Hyper Beam, and Leech Seed.
@@ -52,7 +225,7 @@ void sub_80CA858(struct Sprite* sprite)
sub_80CA8B4(sprite);
}
-void sub_80CA8B4(struct Sprite* sprite)
+static void sub_80CA8B4(struct Sprite* sprite)
{
if (TranslateAnimSpriteByDeltas(sprite))
{
@@ -103,7 +276,7 @@ void sub_80CA9A8(struct Sprite* sprite)
sprite->callback = sub_80CA9F8;
}
-void sub_80CA9F8(struct Sprite* sprite)
+static void sub_80CA9F8(struct Sprite* sprite)
{
if (TranslateAnimSpriteLinearAndSine(sprite))
DestroyAnimSprite(sprite);
@@ -139,7 +312,7 @@ void sub_80CAA14(struct Sprite* sprite)
sub_80CAACC(sprite);
}
-void sub_80CAACC(struct Sprite* sprite)
+static void sub_80CAACC(struct Sprite* sprite)
{
if (sub_8078CE8(sprite))
{
diff --git a/src/battle/anim/osmose.c b/src/battle/anim/osmose.c
index cca7af76e..dad5605f7 100644
--- a/src/battle/anim/osmose.c
+++ b/src/battle/anim/osmose.c
@@ -7,9 +7,34 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-// osmose (I didn't want to use "absorb" as thats confusing)
+void sub_80CB768(struct Sprite* sprite);
+
+// osmose
// Used by Ingrain.
+const union AnimCmd gSpriteAnim_83D6688[] =
+{
+ ANIMCMD_FRAME(3, 3),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6694[] =
+{
+ gSpriteAnim_83D6688,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6698 =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D6694,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CB768,
+};
+
void sub_80CB768(struct Sprite* sprite)
{
if (!sprite->data[0])
diff --git a/src/battle/anim/perceive.c b/src/battle/anim/perceive.c
index 14db096c6..ceca55141 100644
--- a/src/battle/anim/perceive.c
+++ b/src/battle/anim/perceive.c
@@ -8,10 +8,38 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D2920(struct Sprite* sprite);
+
// perceive (shows a sparkle in a set of eyes, usually for heightened perception.)
// Used in Glare, Tickle, and Scary Face.
-void sub_80D2904(struct Sprite* sprite)
+const union AnimCmd gSpriteAnim_83D7B78[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7B90[] =
+{
+ gSpriteAnim_83D7B78,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7B94 =
+{
+ .tileTag = 10218,
+ .paletteTag = 10218,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D7B90,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2920,
+};
+
+static void sub_80D2904(struct Sprite* sprite)
{
if (sprite->animEnded)
DestroyAnimSprite(sprite);
diff --git a/src/battle/anim/poison.c b/src/battle/anim/poison.c
index 2cc104c07..4d6673adf 100644
--- a/src/battle/anim/poison.c
+++ b/src/battle/anim/poison.c
@@ -7,11 +7,191 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-void sub_80D9DD4(struct Sprite *sprite);
-void sub_80D9E78(struct Sprite *sprite);
-void sub_80D9EE8(struct Sprite *sprite);
+extern const union AnimCmd *const gSpriteAnimTable_83D9310[];
+
+void sub_80793C4(struct Sprite *sprite);
+void sub_80D9D70(struct Sprite *sprite);
+void sub_80D9DF0(struct Sprite *sprite);
+void sub_80D9E94(struct Sprite *sprite);
+void sub_80D9F14(struct Sprite *sprite);
+void AnimBubbleEffect(struct Sprite *sprite);
+static void sub_80D9DD4(struct Sprite *sprite);
+static void sub_80D9E78(struct Sprite *sprite);
+static void sub_80D9EE8(struct Sprite *sprite);
static void AnimBubbleEffectStep(struct Sprite *sprite);
+const union AnimCmd gSpriteAnim_83DA22C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(24, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA240[] =
+{
+ gSpriteAnim_83DA22C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA244 =
+{
+ .tileTag = 10151,
+ .paletteTag = 10151,
+ .oam = &gOamData_837DF74,
+ .anims = gSpriteAnimTable_83DA240,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80793C4,
+};
+
+const union AnimCmd gSpriteAnim_83DA25C[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA264[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA26C[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA274[] =
+{
+ gSpriteAnim_83DA25C,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA278[] =
+{
+ gSpriteAnim_83DA264,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA27C[] =
+{
+ gSpriteAnim_83DA26C,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA280[] =
+{
+ AFFINEANIMCMD_FRAME(0x160, 0x160, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA2A0[] =
+{
+ AFFINEANIMCMD_FRAME(0xEC, 0xEC, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA2B0[] =
+{
+ gSpriteAffineAnim_83DA280,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA2B4[] =
+{
+ gSpriteAffineAnim_83DA2A0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA2B8 =
+{
+ .tileTag = 10150,
+ .paletteTag = 10150,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83DA274,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA2B0,
+ .callback = sub_80D9D70,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA2D0 =
+{
+ .tileTag = 10150,
+ .paletteTag = 10150,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83DA274,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA2B0,
+ .callback = sub_80D9DF0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA2E8 =
+{
+ .tileTag = 10150,
+ .paletteTag = 10150,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83DA27C,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA2B4,
+ .callback = sub_80D9E94,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA300[] =
+{
+ AFFINEANIMCMD_FRAME(0xFFF0, 0x10, 0, 6),
+ AFFINEANIMCMD_FRAME(0x10, 0xFFF0, 0, 6),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA318[] =
+{
+ gSpriteAffineAnim_83DA300,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA31C =
+{
+ .tileTag = 10150,
+ .paletteTag = 10150,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83DA278,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA318,
+ .callback = sub_80D9F14,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA334[] =
+{
+ AFFINEANIMCMD_FRAME(0x9C, 0x9C, 0, 0),
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 20),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA34C[] =
+{
+ gSpriteAffineAnim_83DA334,
+};
+
+const struct SpriteTemplate gPoisonBubbleSpriteTemplate =
+{
+ .tileTag = 10150,
+ .paletteTag = 10150,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83DA274,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA34C,
+ .callback = AnimBubbleEffect,
+};
+
+const struct SpriteTemplate gWaterBubbleSpriteTemplate =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837E0AC,
+ .anims = gSpriteAnimTable_83D9310,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA34C,
+ .callback = AnimBubbleEffect,
+};
+
void sub_80D9D70(struct Sprite *sprite)
{
if (!gBattleAnimArgs[3])
@@ -29,7 +209,7 @@ void sub_80D9D70(struct Sprite *sprite)
sprite->callback = sub_80D9DD4;
}
-void sub_80D9DD4(struct Sprite *sprite) // same as sub_80D9E78
+static void sub_80D9DD4(struct Sprite *sprite) // same as sub_80D9E78
{
if (TranslateAnimSpriteLinearAndSine(sprite))
DestroyAnimSprite(sprite);
@@ -57,7 +237,7 @@ void sub_80D9DF0(struct Sprite *sprite)
sprite->callback = sub_80D9E78;
}
-void sub_80D9E78(struct Sprite *sprite) // same as sub_80D9DD4
+static void sub_80D9E78(struct Sprite *sprite) // same as sub_80D9DD4
{
if (TranslateAnimSpriteLinearAndSine(sprite))
DestroyAnimSprite(sprite);
@@ -79,7 +259,7 @@ void sub_80D9E94(struct Sprite *sprite)
sprite->callback = sub_80D9EE8;
}
-void sub_80D9EE8(struct Sprite *sprite)
+static void sub_80D9EE8(struct Sprite *sprite)
{
sub_8078394(sprite);
diff --git a/src/battle/anim/powder.c b/src/battle/anim/powder.c
index 88339522e..046d3c20c 100644
--- a/src/battle/anim/powder.c
+++ b/src/battle/anim/powder.c
@@ -6,8 +6,60 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
+void AnimMovePowderParticle(struct Sprite* sprite);
static void AnimMovePowderParticleStep(struct Sprite* sprite);
+const union AnimCmd gSpriteAnim_83D61FC[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(6, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(10, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_FRAME(14, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6220[] =
+{
+ gSpriteAnim_83D61FC,
+};
+
+const struct SpriteTemplate gSleepPowderParticleSpriteTemplate =
+{
+ .tileTag = 10067,
+ .paletteTag = 10067,
+ .oam = &gOamData_837DF64,
+ .anims = gSpriteAnimTable_83D6220,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
+const struct SpriteTemplate gStunSporeParticleSpriteTemplate =
+{
+ .tileTag = 10068,
+ .paletteTag = 10068,
+ .oam = &gOamData_837DF64,
+ .anims = gSpriteAnimTable_83D6220,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
+const struct SpriteTemplate gPoisonPowderParticleSpriteTemplate =
+{
+ .tileTag = 10065,
+ .paletteTag = 10065,
+ .oam = &gOamData_837DF64,
+ .anims = gSpriteAnimTable_83D6220,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
// Animates the falling particles that horizontally wave back and forth.
// Used by Sleep Powder, Stun Spore, and Poison Powder.
// arg 0: initial x pixel offset
diff --git a/src/battle/anim/psychic.c b/src/battle/anim/psychic.c
index 7babb3a19..a63652646 100644
--- a/src/battle/anim/psychic.c
+++ b/src/battle/anim/psychic.c
@@ -16,12 +16,13 @@ extern u16 gBattle_BG1_X;
extern u16 gBattle_BG2_X;
extern u8 gBankSpriteIds[];
-extern const union AffineAnimCmd *const gUnknown_083DA888[];
-extern struct AffineAnimFrameCmd gUnknown_083DA8A4;
-extern struct AffineAnimFrameCmd gUnknown_083DA8C4;
-extern const struct SpriteTemplate gSpriteTemplate_83DA8DC;
-extern const struct SpriteTemplate gSpriteTemplate_83DA9AC;
-
+void sub_80DB74C(struct Sprite *sprite);
+void sub_80DBA4C(struct Sprite *sprite);
+void sub_80DBAF4(struct Sprite *sprite);
+void sub_80DBB70(struct Sprite *sprite);
+void sub_80DC068(struct Sprite *sprite);
+void sub_80DC2B0(struct Sprite *sprite);
+void sub_80DC700(struct Sprite *sprite);
static void sub_80DB88C(struct Sprite *sprite);
static void sub_80DB8C0(struct Sprite *sprite);
static void sub_80DB92C(struct Sprite *sprite);
@@ -35,6 +36,395 @@ static void sub_80DC1FC(u8 taskId);
static void sub_80DC3F4(u8 taskId);
void sub_80DC5F4(u8 taskId);
+const union AffineAnimCmd gSpriteAffineAnim_83DA674[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFFE, 0xFFFE, -10, 120),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA68C[] =
+{
+ gSpriteAffineAnim_83DA674,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA690 =
+{
+ .tileTag = 10196,
+ .paletteTag = 10196,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA68C,
+ .callback = sub_80793C4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA6A8 =
+{
+ .tileTag = 10166,
+ .paletteTag = 10166,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB74C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA6C0 =
+{
+ .tileTag = 10167,
+ .paletteTag = 10167,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB74C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA6D8 =
+{
+ .tileTag = 10168,
+ .paletteTag = 10168,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB74C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA6F0 =
+{
+ .tileTag = 10169,
+ .paletteTag = 10169,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB74C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA708 =
+{
+ .tileTag = 10170,
+ .paletteTag = 10170,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DB74C,
+};
+
+const union AnimCmd gSpriteAnim_83DA720[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA738[] =
+{
+ gSpriteAnim_83DA720,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA73C =
+{
+ .tileTag = 10071,
+ .paletteTag = 10071,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DA738,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DBA4C,
+};
+
+const union AnimCmd gSpriteAnim_83DA754[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA768[] =
+{
+ gSpriteAnim_83DA754,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA76C =
+{
+ .tileTag = 10070,
+ .paletteTag = 10070,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83DA768,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DBA4C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA784 =
+{
+ .tileTag = 10163,
+ .paletteTag = 10163,
+ .oam = &gOamData_837DF74,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const union AnimCmd gSpriteAnim_83DA79C[] =
+{
+ ANIMCMD_FRAME(8, 60, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 22, .hFlip = TRUE),
+ ANIMCMD_LOOP(0),
+ ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 5, .hFlip = TRUE),
+ ANIMCMD_LOOP(1),
+ ANIMCMD_FRAME(8, 22, .hFlip = TRUE),
+ ANIMCMD_FRAME(24, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(40, 22, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DA7DC[] =
+{
+ ANIMCMD_FRAME(8, 60),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(8, 22),
+ ANIMCMD_LOOP(0),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_LOOP(1),
+ ANIMCMD_FRAME(8, 22),
+ ANIMCMD_FRAME(24, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(40, 22),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA81C[] =
+{
+ gSpriteAnim_83DA79C,
+ gSpriteAnim_83DA7DC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA824 =
+{
+ .tileTag = 10097,
+ .paletteTag = 10097,
+ .oam = &gOamData_837DF74,
+ .anims = gSpriteAnimTable_83DA81C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DBAF4,
+};
+
+const union AnimCmd gSpriteAnim_83DA83C[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_FRAME(64, 6),
+ ANIMCMD_FRAME(80, 6),
+ ANIMCMD_FRAME(96, 18),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DA85C[] =
+{
+ gSpriteAnim_83DA83C,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_3DA860[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 4, 4),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 8),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 4),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_083DA888[] =
+{
+ gSpriteAffineAnim_3DA860,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA88C =
+{
+ .tileTag = 10093,
+ .paletteTag = 10093,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DA85C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DBB70,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_083DA8A4[] =
+{
+ AFFINEANIMCMD_FRAME(-8, 10, 0, 16),
+ AFFINEANIMCMD_FRAME(18, -18, 0, 16),
+ AFFINEANIMCMD_FRAME(-20, 16, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_083DA8C4[] =
+{
+ AFFINEANIMCMD_FRAME(64, -4, 0, 20),
+ AFFINEANIMCMD_FRAME(0, 0, 0, -56),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DA8DC =
+{
+ .tileTag = 10249,
+ .paletteTag = 10249,
+ .oam = &gOamData_837E04C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA8F4 =
+{
+ .tileTag = 10250,
+ .paletteTag = 10250,
+ .oam = &gOamData_837DF3C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DC068,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA90C[] =
+{
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 8),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA924[] =
+{
+ AFFINEANIMCMD_FRAME(0xF0, 0xF0, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 6),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 2),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA94C[] =
+{
+ AFFINEANIMCMD_FRAME(0xD0, 0xD0, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 4),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 4),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA974[] =
+{
+ AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 2),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 6),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA99C[] =
+{
+ gSpriteAffineAnim_83DA90C,
+ gSpriteAffineAnim_83DA924,
+ gSpriteAffineAnim_83DA94C,
+ gSpriteAffineAnim_83DA974,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DA9AC =
+{
+ .tileTag = 10251,
+ .paletteTag = 10251,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA99C,
+ .callback = sub_80DC2B0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA9C4[] =
+{
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 120),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA9DC[] =
+{
+ gSpriteAffineAnim_83DA9C4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA9E0 =
+{
+ .tileTag = 10267,
+ .paletteTag = 10267,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA9DC,
+ .callback = sub_80793C4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DA9F8[] =
+{
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 17),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 10),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 10),
+ AFFINEANIMCMD_LOOP(4),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 5),
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 5),
+ AFFINEANIMCMD_LOOP(7),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAA50[] =
+{
+ AFFINEANIMCMD_FRAME(0xFFEC, 0x18, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAA60[] =
+{
+ gSpriteAffineAnim_83DA9F8,
+ gSpriteAffineAnim_83DAA50,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAA68 =
+{
+ .tileTag = 10212,
+ .paletteTag = 10212,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DAA60,
+ .callback = sub_80DC700,
+};
void sub_80DB74C(struct Sprite *sprite)
{
@@ -254,7 +644,7 @@ void sub_80DBB70(struct Sprite *sprite)
static void sub_80DBC00(struct Sprite *sprite)
{
sprite->oam.affineMode = 1;
- sprite->affineAnims = gUnknown_083DA888;
+ sprite->affineAnims = gSpriteAffineAnimTable_083DA888;
sprite->data[0] = 0;
InitSpriteAffineAnim(sprite);
sprite->callback = sub_80DBC34;
@@ -287,7 +677,7 @@ void sub_80DBC94(u8 taskId)
struct Task *task = &gTasks[taskId];
u8 spriteId = GetAnimBattlerSpriteId(0);
task->data[0] = spriteId;
- sub_80798F4(task, spriteId, &gUnknown_083DA8A4);
+ sub_80798F4(task, spriteId, &gSpriteAffineAnim_083DA8A4);
task->func = sub_80DBCD0;
}
@@ -308,7 +698,7 @@ void sub_80DBCFC(u8 taskId)
task->data[2] = 0;
task->data[3] = GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER ? 4 : 8;
- sub_80798F4(task, task->data[0], &gUnknown_083DA8C4);
+ sub_80798F4(task, task->data[0], &gSpriteAffineAnim_083DA8C4);
task->func = sub_80DBD58;
}
diff --git a/src/battle/anim/rain.c b/src/battle/anim/rain.c
index b38233e3c..421304be8 100644
--- a/src/battle/anim/rain.c
+++ b/src/battle/anim/rain.c
@@ -5,13 +5,44 @@
#include "task.h"
extern s16 gBattleAnimArgs[8];
-extern const struct SpriteTemplate gSpriteTemplate_83D9130[];
-static void MoveAnimRaindrop(struct Sprite *);
+void SetAnimRaindropCallback(struct Sprite *sprite);
+static void MoveAnimRaindrop(struct Sprite *sprite);
// rain (spawns and animates raindrops)
// Used in Rain Dance and general rain animation.
+ const u8 gUnknown_3D7D8C[] = INCBIN_U8("graphics/unknown/unknown_3D7D8C.4bpp");
+ const u8 gUnknown_3D810C[] = INCBIN_U8("graphics/unknown/unknown_3D810C.bin");
+
+ const union AnimCmd gSpriteAnim_83D910C[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(8, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(24, 6),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(40, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D912C[] =
+{
+ gSpriteAnim_83D910C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9130 =
+{
+ .tileTag = 10115,
+ .paletteTag = 10115,
+ .oam = &gOamData_837DF74,
+ .anims = gSpriteAnimTable_83D912C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SetAnimRaindropCallback,
+};
+
void CreateAnimRaindrops(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
@@ -27,7 +58,7 @@ void CreateAnimRaindrops(u8 taskId)
{
u8 x = Random() % 240;
u8 y = Random() % 80;
- CreateSprite(gSpriteTemplate_83D9130, x, y, 4);
+ CreateSprite(&gSpriteTemplate_83D9130, x, y, 4);
}
if (gTasks[taskId].data[0] == gTasks[taskId].data[3])
diff --git a/src/battle/anim/ring.c b/src/battle/anim/ring.c
index b317cdaed..024728ecc 100644
--- a/src/battle/anim/ring.c
+++ b/src/battle/anim/ring.c
@@ -12,11 +12,201 @@ extern u8 gAnimBankTarget;
extern u8 gBankSpriteIds[];
+void sub_80D0FD8(struct Sprite* sprite);
+void sub_80D10B8(struct Sprite* sprite);
+void sub_80D1318(struct Sprite* sprite);
+void sub_80D1368(struct Sprite* sprite);
static void sub_80D1098(struct Sprite* sprite);
+static void sub_80D13AC(struct Sprite* sprite);
+static void sub_80D1424(struct Sprite* sprite);
+static void sub_80D144C(struct Sprite* sprite);
+static void sub_80D14C4(struct Sprite* sprite);
+static void sub_80D1504(struct Sprite* sprite);
+static void sub_80D154C(struct Sprite* sprite);
+static void sub_80D158C(struct Sprite* sprite);
// ring (a ring that stretches outward from the Pokemon.)
// Used in Aromatherapy and Heal Bell.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D77F8 =
+{
+ .tileTag = 10197,
+ .paletteTag = 10197,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8079534,
+};
+
+const union AnimCmd gSpriteAnim_83D7810[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7824[] =
+{
+ gSpriteAnim_83D7810,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7828 =
+{
+ .tileTag = 10198,
+ .paletteTag = 10198,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7824,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80793C4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7840[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 4),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7860[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7870[] =
+{
+ AFFINEANIMCMD_FRAME(0xFFF8, 0x4, 0, 8),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0x10, 0xFFF8, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0x8, 0, 8),
+ AFFINEANIMCMD_LOOP(1),
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D78B0[] =
+{
+ gSpriteAffineAnim_83D7840,
+ gSpriteAffineAnim_83D7860,
+ gSpriteAffineAnim_83D7870,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D78BC =
+{
+ .tileTag = 10202,
+ .paletteTag = 10202,
+ .oam = &gOamData_837E114,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D78B0,
+ .callback = sub_80D1368,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D78D4[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 30),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D78EC[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 15),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7904[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 45),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D791C[] =
+{
+ gSpriteAffineAnim_83D78D4,
+ gSpriteAffineAnim_83D78EC,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7924[] =
+{
+ gSpriteAffineAnim_83D7904,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7928 =
+{
+ .tileTag = 10203,
+ .paletteTag = 10203,
+ .oam = &gOamData_837DFFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D791C,
+ .callback = sub_80793C4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D7940[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 30),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7958[] =
+{
+ gSpriteAffineAnim_83D7940,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D795C =
+{
+ .tileTag = 10203,
+ .paletteTag = 10203,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7958,
+ .callback = sub_80793C4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7974 =
+{
+ .tileTag = 10203,
+ .paletteTag = 10203,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D791C,
+ .callback = sub_80D0FD8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D798C =
+{
+ .tileTag = 10203,
+ .paletteTag = 10203,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7924,
+ .callback = sub_80D10B8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D79A4 =
+{
+ .tileTag = 10203,
+ .paletteTag = 10203,
+ .oam = &gOamData_837E11C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D791C,
+ .callback = sub_80D1318,
+};
+
void sub_80D0FD8(struct Sprite* sprite)
{
u8 bank = 0;
@@ -154,3 +344,105 @@ void sub_80D1318(struct Sprite* sprite)
sprite->callback = sub_80793C4;
sub_80793C4(sprite);
}
+
+void sub_80D1368(struct Sprite* sprite)
+{
+ s16 r1;
+ InitAnimSpritePos(sprite, 0);
+ r1 = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0;
+ sprite->data[0] = 0x380;
+ sprite->data[1] = r1;
+ sprite->data[7] = gBattleAnimArgs[2];
+ sprite->callback = sub_80D13AC;
+}
+
+static void sub_80D13AC(struct Sprite* sprite)
+{
+ s16 add;
+ sprite->pos2.y -= (sprite->data[0] >> 8);
+ sprite->pos2.x = sprite->data[1] >> 8;
+ sprite->data[0] -= 32;
+ add = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0;
+ sprite->data[1] += add;
+ if (sprite->pos2.y > 0)
+ {
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[0] = 0;
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->callback = sub_80D1424;
+ }
+}
+
+static void sub_80D1424(struct Sprite* sprite)
+{
+ if (sprite->data[0]++ > 19)
+ {
+ StartSpriteAffineAnim(sprite, 2);
+ sprite->callback = sub_80D144C;
+ }
+}
+
+static void sub_80D144C(struct Sprite* sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->data[0] = 0;
+ if (sprite->data[7] == 0)
+ {
+ sprite->oam.tileNum += 16;
+ sprite->callback = sub_80D14C4;
+ }
+ else
+ {
+ sprite->oam.tileNum += 32;
+ sprite->callback = sub_80D154C;
+ }
+ }
+}
+
+static void sub_80D14C4(struct Sprite* sprite)
+{
+ sprite->pos2.y -= 2;
+ if (++sprite->data[0] == 9)
+ {
+ sprite->data[0] = 16;
+ sprite->data[1] = 0;
+ REG_BLDCNT = 0x3F40;
+ REG_BLDALPHA = sprite->data[0];
+ sprite->callback = sub_80D1504;
+ }
+}
+
+static void sub_80D1504(struct Sprite* sprite)
+{
+ if (sprite->data[1]++ % 3 == 0)
+ {
+ sprite->data[0]--;
+ REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8);
+ if (sprite->data[0] == 0)
+ sprite->callback = sub_80D154C;
+ }
+}
+
+static void sub_80D154C(struct Sprite* sprite)
+{
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ {
+ sprite->invisible = 1;
+ if (sprite->data[7] == 0)
+ sprite->callback = sub_80D158C;
+ else
+ sprite->callback = DestroyAnimSprite;
+ }
+}
+
+static void sub_80D158C(struct Sprite* sprite)
+{
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ DestroyAnimSprite(sprite);
+}
diff --git a/src/battle/anim/rock.c b/src/battle/anim/rock.c
index 73be7c42b..595df3168 100644
--- a/src/battle/anim/rock.c
+++ b/src/battle/anim/rock.c
@@ -20,11 +20,20 @@ extern u16 gBattle_BG3_Y;
extern const u8 gBattleAnimBackgroundTilemap_SandstormBrew[];
extern const u8 gBattleAnimBackgroundImage_SandstormBrew[];
extern const u16 gBattleAnimSpritePalette_261[];
-extern const struct SpriteTemplate gSpriteTemplate_83DAD78;
-extern const struct SpriteTemplate gSpriteTemplate_83DAD90;
-
-extern const struct SubspriteTable gUnknown_083DAD10;
-
+extern const union AnimCmd *const gSpriteAnimTable_83D91F0[];
+extern const union AnimCmd *const gSpriteAnimTable_83D95E0[];
+
+extern void AnimMoveTwisterParticle(struct Sprite *sprite);
+
+void sub_80DCE9C(struct Sprite *sprite);
+void sub_80DCF60(struct Sprite *sprite);
+void sub_80DCFE4(struct Sprite *sprite);
+void sub_80DD3AC(struct Sprite *sprite);
+void sub_80DD490(struct Sprite *sprite);
+void sub_80DD87C(struct Sprite *sprite);
+void sub_80DD8E8(struct Sprite *sprite);
+void sub_80DD978(struct Sprite *sprite);
+void sub_80DD9A4(struct Sprite *sprite);
static void sub_80DCF1C(struct Sprite *sprite);
static void sub_80DD02C(struct Sprite *sprite);
static void sub_80DD190(u8 taskId);
@@ -34,6 +43,280 @@ static u8 sub_80DD8BC(void);
static void sub_80DD928(struct Sprite *sprite);
static void sub_80DD9FC(struct Sprite *sprite);
+const union AnimCmd gSpriteAnim_83DAC28[] =
+{
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DAC30[] =
+{
+ ANIMCMD_FRAME(48, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DAC38[] =
+{
+ ANIMCMD_FRAME(64, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DAC40[] =
+{
+ gSpriteAnim_83DAC28,
+ gSpriteAnim_83DAC30,
+ gSpriteAnim_83DAC38,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAC4C =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DAC40,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DCE9C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAC64 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DAC40,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DCF60,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAC7C =
+{
+ .tileTag = 10074,
+ .paletteTag = 10074,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DCFE4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DAC94[] =
+{
+ AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x2, 0xFFFD, 0, 5),
+ AFFINEANIMCMD_FRAME(0xFFFE, 0x3, 0, 5),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DACB4[] =
+{
+ gSpriteAffineAnim_83DAC94,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACB8 =
+{
+ .tileTag = 10149,
+ .paletteTag = 10149,
+ .oam = &gOamData_837E0AC,
+ .anims = gSpriteAnimTable_83D91F0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DACB4,
+ .callback = sub_80DCFE4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACD0 =
+{
+ .tileTag = 10029,
+ .paletteTag = 10029,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D95E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DCFE4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACE8 =
+{
+ .tileTag = 10261,
+ .paletteTag = 10261,
+ .oam = &gOamData_837DF54,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DD3AC,
+};
+
+const struct Subsprite gSubspriteTable_83DAD00[] =
+{
+ {.x = -16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .size = 2, .tileOffset = 0, .priority = 1},
+ {.x = 16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .size = 2, .tileOffset = 8, .priority = 1},
+};
+
+const struct SubspriteTable gSubspriteTables_83DAD10[] =
+{
+ {ARRAY_COUNT(gSubspriteTable_83DAD00), gSubspriteTable_83DAD00},
+};
+
+const union AnimCmd gSpriteAnim_83DAD18[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DAD20[] =
+{
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DAD28[] =
+{
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DAD30[] =
+{
+ ANIMCMD_FRAME(48, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DAD38[] =
+{
+ ANIMCMD_FRAME(64, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83DAD40[] =
+{
+ ANIMCMD_FRAME(80, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DAD48[] =
+{
+ gSpriteAnim_83DAD18,
+ gSpriteAnim_83DAD20,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DAD50[] =
+{
+ gSpriteAnim_83DAD28,
+ gSpriteAnim_83DAD30,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83DAD58[] =
+{
+ gSpriteAnim_83DAD38,
+ gSpriteAnim_83DAD40,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAD60 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DAD48,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DD490,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DAD78 =
+{
+ .tileTag = 10074,
+ .paletteTag = 10074,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DD87C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83DAD90 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DD87C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DADA8 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DAD48,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80DD8E8,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DADC0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -5, 5),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83DADD0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 5, 5),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83DADE0[] =
+{
+ gSpriteAffineAnim_83DADC0,
+ gSpriteAffineAnim_83DADD0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DADE8 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83DAD48,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DADE0,
+ .callback = sub_80DD978,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE00 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83DAD48,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DADE0,
+ .callback = sub_80DD9A4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE18 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83DAD58,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DADE0,
+ .callback = AnimMoveTwisterParticle,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAE30 =
+{
+ .tileTag = 10058,
+ .paletteTag = 10058,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83DAD50,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DADE0,
+ .callback = sub_807A9BC,
+};
void sub_80DCE9C(struct Sprite *sprite)
{
@@ -244,7 +527,7 @@ void sub_80DD3AC(struct Sprite *sprite)
}
sprite->pos1.y = gBattleAnimArgs[0];
- SetSubspriteTables(sprite, &gUnknown_083DAD10);
+ SetSubspriteTables(sprite, gSubspriteTables_83DAD10);
sprite->data[1] = gBattleAnimArgs[1];
sprite->data[2] = gBattleAnimArgs[2];
sprite->data[0]++;
diff --git a/src/battle/anim/roots.c b/src/battle/anim/roots.c
index 30c2d9652..b9b76c584 100644
--- a/src/battle/anim/roots.c
+++ b/src/battle/anim/roots.c
@@ -6,14 +6,79 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-
extern s16 gUnknown_03000728[];
+void sub_80CB59C(struct Sprite* sprite);
+void sub_80CB620(struct Sprite *sprite);
static void sub_80CB710(struct Sprite* sprite);
// roots
// Used by Ingrain and Frenzy Plant.
+const union AnimCmd gSpriteAnim_83D6600[] =
+{
+ ANIMCMD_FRAME(0, 7),
+ ANIMCMD_FRAME(16, 7),
+ ANIMCMD_FRAME(32, 7),
+ ANIMCMD_FRAME(48, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6614[] =
+{
+ ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 7, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6628[] =
+{
+ ANIMCMD_FRAME(0, 7),
+ ANIMCMD_FRAME(16, 7),
+ ANIMCMD_FRAME(32, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6638[] =
+{
+ ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 7, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6648[] =
+{
+ gSpriteAnim_83D6600,
+ gSpriteAnim_83D6614,
+ gSpriteAnim_83D6628,
+ gSpriteAnim_83D6638,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6658 =
+{
+ .tileTag = 10223,
+ .paletteTag = 10223,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6648,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CB59C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6670 =
+{
+ .tileTag = 10223,
+ .paletteTag = 10223,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6648,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CB620,
+};
+
void sub_80CB59C(struct Sprite* sprite)
{
if (!sprite->data[0])
@@ -57,7 +122,7 @@ void sub_80CB620(struct Sprite *sprite)
gUnknown_03000728[3] = e2;
}
-void sub_80CB710(struct Sprite* sprite)
+static void sub_80CB710(struct Sprite* sprite)
{
if (++sprite->data[0] > (sprite->data[2] - 10))
sprite->invisible = sprite->data[0] % 2;
diff --git a/src/battle/anim/scan.c b/src/battle/anim/scan.c
index abd54cef3..05859d31c 100644
--- a/src/battle/anim/scan.c
+++ b/src/battle/anim/scan.c
@@ -9,8 +9,8 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern s8 gUnknown_083D6DDC[4][2];
-
+void sub_80CD3E0(struct Sprite* sprite);
+void sub_80CD6CC(struct Sprite* sprite);
static void sub_80CD408(struct Sprite* sprite);
static void sub_80CD4B8(struct Sprite* sprite);
static void sub_80CD4EC(struct Sprite* sprite);
@@ -21,6 +21,36 @@ static void sub_80CD67C(struct Sprite* sprite);
// scan
// Used by Lock-On.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6DAC =
+{
+ .tileTag = 10014,
+ .paletteTag = 10014,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CD3E0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6DC4 =
+{
+ .tileTag = 10014,
+ .paletteTag = 10014,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CD6CC,
+};
+
+const s8 gUnknown_083D6DDC[][2] =
+{
+ { 64, 64},
+ { 0, -64},
+ {-64, 64},
+ { 32, -32},
+};
+
void sub_80CD3E0(struct Sprite* sprite)
{
sprite->pos1.x -= 32;
@@ -30,7 +60,7 @@ void sub_80CD3E0(struct Sprite* sprite)
StoreSpriteCallbackInData(sprite, sub_80CD408);
}
-void sub_80CD408(struct Sprite* sprite)
+static void sub_80CD408(struct Sprite* sprite)
{
switch (sprite->data[5] & 1)
{
@@ -57,7 +87,7 @@ void sub_80CD408(struct Sprite* sprite)
sprite->data[5] ^= 1;
}
-void sub_80CD4B8(struct Sprite* sprite)
+static void sub_80CD4B8(struct Sprite* sprite)
{
if ((sprite->data[5] >> 8) == 4)
{
@@ -71,7 +101,7 @@ void sub_80CD4B8(struct Sprite* sprite)
}
}
-void sub_80CD4EC(struct Sprite* sprite)
+static void sub_80CD4EC(struct Sprite* sprite)
{
s16 a;
s16 b;
@@ -117,7 +147,7 @@ void sub_80CD4EC(struct Sprite* sprite)
}
}
-void sub_80CD5A8(struct Sprite* sprite)
+static void sub_80CD5A8(struct Sprite* sprite)
{
if (sprite->data[2] == 0)
{
@@ -144,7 +174,7 @@ void sub_80CD5A8(struct Sprite* sprite)
}
}
-void sub_80CD654(struct Sprite* sprite)
+static void sub_80CD654(struct Sprite* sprite)
{
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
{
@@ -154,7 +184,7 @@ void sub_80CD654(struct Sprite* sprite)
}
}
-void sub_80CD67C(struct Sprite* sprite)
+static void sub_80CD67C(struct Sprite* sprite)
{
if (sprite->data[0] % 3 == 0)
{
diff --git a/src/battle/anim/seed.c b/src/battle/anim/seed.c
index d7c56e7a8..11eebada0 100644
--- a/src/battle/anim/seed.c
+++ b/src/battle/anim/seed.c
@@ -7,9 +7,40 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void AnimLeechSeed(struct Sprite* sprite);
static void AnimLeechSeedStep(struct Sprite* sprite);
static void AnimLeechSeedSprouts(struct Sprite* sprite);
+const union AnimCmd gSpriteAnim_83D63AC[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D63B4[] =
+{
+ ANIMCMD_FRAME(4, 7),
+ ANIMCMD_FRAME(8, 7),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D63C0[] =
+{
+ gSpriteAnim_83D63AC,
+ gSpriteAnim_83D63B4,
+};
+
+const struct SpriteTemplate gLeechSeedSpriteTemplate =
+{
+ .tileTag = 10006,
+ .paletteTag = 10006,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D63C0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimLeechSeed,
+};
+
// seed (sprouts a sapling from a seed.)
// Used by Leech Seed.
// arg 0: initial x pixel offset
diff --git a/src/battle/anim/shield.c b/src/battle/anim/shield.c
index 323df4ab2..d858f5100 100644
--- a/src/battle/anim/shield.c
+++ b/src/battle/anim/shield.c
@@ -9,11 +9,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CCD24(struct Sprite* sprite);
static void sub_80CCE0C(struct Sprite* sprite);
// shield
// Used by Protect.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6BE8 =
+{
+ .tileTag = 10280,
+ .paletteTag = 10280,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CCD24,
+};
+
void sub_80CCD24(struct Sprite* sprite)
{
if (IsContest() != 0)
@@ -36,7 +48,7 @@ void sub_80CCD24(struct Sprite* sprite)
sprite->callback = sub_80CCE0C;
}
-void sub_80CCE0C(struct Sprite* sprite)
+static void sub_80CCE0C(struct Sprite* sprite)
{
int a;
int i;
diff --git a/src/battle/anim/shimmer.c b/src/battle/anim/shimmer.c
index 9e7bea1e4..78b430094 100644
--- a/src/battle/anim/shimmer.c
+++ b/src/battle/anim/shimmer.c
@@ -9,11 +9,20 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern u16 gUnknown_083D6984[];
-
// shimmer
// Used by Magical Leaf.
+static const u16 sMagicalLeafBlendColors[] =
+{
+ RGB(31, 0, 0),
+ RGB(31, 19, 0),
+ RGB(31, 31, 0),
+ RGB(0, 31, 0),
+ RGB(5, 14, 31),
+ RGB(22, 10, 31),
+ RGB(22, 21, 31),
+};
+
void sub_80CC5F8(u8 taskId)
{
struct Task* task = &gTasks[taskId];
@@ -29,8 +38,8 @@ void sub_80CC5F8(u8 taskId)
if (task->data[9] >= 0)
{
task->data[9] = 0;
- BlendPalette(task->data[8], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]);
- BlendPalette(task->data[12], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]);
+ BlendPalette(task->data[8], 0x10, task->data[10], sMagicalLeafBlendColors[task->data[11]]);
+ BlendPalette(task->data[12], 0x10, task->data[10], sMagicalLeafBlendColors[task->data[11]]);
task->data[10]++;
if (task->data[10] == 17)
{
diff --git a/src/battle/anim/shock.c b/src/battle/anim/shock.c
index 19e4d0fb2..5b82d9319 100644
--- a/src/battle/anim/shock.c
+++ b/src/battle/anim/shock.c
@@ -8,11 +8,62 @@ extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern struct OamMatrix gOamMatrices[];
+void sub_80D6294(struct Sprite *sprite);
+void sub_80D6328(struct Sprite *sprite);
extern void sub_80DA48C(struct Sprite *);
// shock (moves the little electricity lines)
// Used in Shock.
+const union AnimCmd gSpriteAnim_83D9824[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_FRAME(80, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9840[] =
+{
+ gSpriteAnim_83D9824,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9844 =
+{
+ .tileTag = 10079,
+ .paletteTag = 10079,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9840,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D6294,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D985C =
+{
+ .tileTag = 10011,
+ .paletteTag = 10011,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D6328,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9874 =
+{
+ .tileTag = 10171,
+ .paletteTag = 10171,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
void sub_80D6294(struct Sprite *sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 2);
diff --git a/src/battle/anim/slash.c b/src/battle/anim/slash.c
index 68a1b81ef..f71bc6eaa 100644
--- a/src/battle/anim/slash.c
+++ b/src/battle/anim/slash.c
@@ -8,6 +8,9 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CDD74(struct Sprite* sprite);
+void sub_80CDDDC(struct Sprite* sprite);
+void sub_80CDE24(struct Sprite* sprite);
static void sub_80CDE78(struct Sprite* sprite);
static void sub_80CDEB0(struct Sprite* sprite);
static void sub_80CDEC0(struct Sprite* sprite);
@@ -15,6 +18,60 @@ static void sub_80CDEC0(struct Sprite* sprite);
// slash (a cutting animation)
// Used in Slash and False Swipe.
+const union AnimCmd gSpriteAnim_83D6E14[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6E28[] =
+{
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6E30[] =
+{
+ gSpriteAnim_83D6E14,
+ gSpriteAnim_83D6E28,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6E38 =
+{
+ .tileTag = 10183,
+ .paletteTag = 10183,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6E30,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CDD74,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6E50 =
+{
+ .tileTag = 10286,
+ .paletteTag = 10286,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6E30,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CDDDC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6E68 =
+{
+ .tileTag = 10286,
+ .paletteTag = 10286,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6E30,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CDE24,
+};
+
void sub_80CDD74(struct Sprite* sprite)
{
if (gBattleAnimArgs[0] == 0)
@@ -52,7 +109,7 @@ void sub_80CDE24(struct Sprite* sprite)
sprite->callback = sub_80CDEC0;
}
-void sub_80CDE78(struct Sprite* sprite)
+static void sub_80CDE78(struct Sprite* sprite)
{
if (++sprite->data[0] > 8)
{
@@ -64,14 +121,14 @@ void sub_80CDE78(struct Sprite* sprite)
}
}
-void sub_80CDEB0(struct Sprite* sprite)
+static void sub_80CDEB0(struct Sprite* sprite)
{
sprite->data[0] = 0;
sprite->data[1] = 0;
sprite->callback = sub_80CDEC0;
}
-void sub_80CDEC0(struct Sprite* sprite)
+static void sub_80CDEC0(struct Sprite* sprite)
{
if (++sprite->data[0] > 1)
{
diff --git a/src/battle/anim/sleep.c b/src/battle/anim/sleep.c
index cc3518395..40b984be7 100644
--- a/src/battle/anim/sleep.c
+++ b/src/battle/anim/sleep.c
@@ -8,11 +8,68 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CD328(struct Sprite* sprite);
static void sub_80CD394(struct Sprite* sprite);
// sleep (the "ZZZ" graphical effect)
// Used by Rest and the sleep turn when the Pokemon is still asleep.
+const union AnimCmd gSpriteAnim_83D6D20[] =
+{
+ ANIMCMD_FRAME(0, 40),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6D28[] =
+{
+ gSpriteAnim_83D6D20,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6D2C[] =
+{
+ AFFINEANIMCMD_FRAME(0x14, 0x14, -30, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 1, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6D44[] =
+{
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24),
+ AFFINEANIMCMD_LOOP(10),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6D5C[] =
+{
+ AFFINEANIMCMD_FRAME(0x14, 0x14, 30, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, -1, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6D74[] =
+{
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 24),
+ AFFINEANIMCMD_LOOP(10),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6D8C[] =
+{
+ gSpriteAffineAnim_83D6D2C,
+ gSpriteAffineAnim_83D6D5C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6D94 =
+{
+ .tileTag = 10228,
+ .paletteTag = 10228,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D6D28,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6D8C,
+ .callback = sub_80CD328,
+};
+
void sub_80CD328(struct Sprite* sprite)
{
sub_8078650(sprite);
@@ -33,7 +90,7 @@ void sub_80CD328(struct Sprite* sprite)
sprite->callback = sub_80CD394;
}
-void sub_80CD394(struct Sprite* sprite)
+static void sub_80CD394(struct Sprite* sprite)
{
sprite->pos2.y = -(sprite->data[0] / 0x28);
sprite->pos2.x = sprite->data[4] / 10;
diff --git a/src/battle/anim/slice.c b/src/battle/anim/slice.c
index 8e7f35f46..4da414cbf 100644
--- a/src/battle/anim/slice.c
+++ b/src/battle/anim/slice.c
@@ -8,8 +8,46 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void AnimCuttingSlice(struct Sprite* sprite);
+void sub_80CC9BC(struct Sprite* sprite);
static void AnimSliceStep(struct Sprite* sprite);
+const union AnimCmd gSpriteAnim_83D6B10[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6B24[] =
+{
+ gSpriteAnim_83D6B10,
+};
+
+const struct SpriteTemplate gCuttingSliceSpriteTemplate =
+{
+ .tileTag = 10138,
+ .paletteTag = 10138,
+ .oam = &gOamData_837E054,
+ .anims = gSpriteAnimTable_83D6B24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimCuttingSlice,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6B40 =
+{
+ .tileTag = 10138,
+ .paletteTag = 10138,
+ .oam = &gOamData_837E054,
+ .anims = gSpriteAnimTable_83D6B24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC9BC,
+};
+
// Moves the sprite in a diagonally slashing motion across the target mon.
// Used by moves such as MOVE_CUT and MOVE_AERIAL_ACE.
// arg 0: initial x pixel offset
diff --git a/src/battle/anim/smoke.c b/src/battle/anim/smoke.c
deleted file mode 100644
index 7ab873e63..000000000
--- a/src/battle/anim/smoke.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-// smoke (smoke on the ground around a sprite.)
-// Used in Extremespeed.
-
-void sub_80D1A70(struct Sprite* sprite)
-{
- sprite->invisible = gTasks[sprite->data[0]].data[5];
- if (sprite->animEnded)
- {
- gTasks[sprite->data[0]].data[sprite->data[1]]--;
- DestroySprite(sprite);
- }
-}
diff --git a/src/battle/anim/sonic.c b/src/battle/anim/sonic.c
index a882be73c..0494c42ed 100644
--- a/src/battle/anim/sonic.c
+++ b/src/battle/anim/sonic.c
@@ -3,11 +3,114 @@
#include "trig.h"
#include "battle_anim.h"
#include "sound.h"
+#include "battle.h"
#include "battle_anim_80CA710.h"
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern u8 gBanksBySide[];
+extern u16 gBattleTypeFlags;
+
+extern void sub_80D4CA4(struct Sprite *sprite);
+
+void AnimSonicBoomProjectile(struct Sprite* sprite);
+void sub_80CF8B8(struct Sprite* sprite);
+
+const struct SpriteTemplate gSonicBoomSpriteTemplate =
+{
+ .tileTag = 10003,
+ .paletteTag = 10003,
+ .oam = &gOamData_837E134,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSonicBoomProjectile,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D74BC =
+{
+ .tileTag = 10003,
+ .paletteTag = 10003,
+ .oam = &gOamData_837E074,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CF8B8,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D74D4[] =
+{
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
+ AFFINEANIMCMD_FRAME(0x7, 0x7, 0, -56),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D74EC[] =
+{
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D752C[] =
+{
+ gSpriteAffineAnim_83D74D4,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7530[] =
+{
+ gSpriteAffineAnim_83D74EC,
+};
+
+const struct SpriteTemplate gSupersonicWaveSpriteTemplate =
+{
+ .tileTag = 10163,
+ .paletteTag = 10163,
+ .oam = &gOamData_837E034,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D752C,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gScreechWaveSpriteTemplate =
+{
+ .tileTag = 10164,
+ .paletteTag = 10164,
+ .oam = &gOamData_837E034,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D752C,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7564 =
+{
+ .tileTag = 10260,
+ .paletteTag = 10260,
+ .oam = &gOamData_837E03C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D752C,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D757C =
+{
+ .tileTag = 10288,
+ .paletteTag = 10288,
+ .oam = &gOamData_837E034,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7530,
+ .callback = sub_80D4CA4,
+};
// Moves a projectile towards the target mon. The sprite is rotated to be pointing
// in the same direction it's moving.
@@ -138,3 +241,137 @@ void sub_80CF8B8(struct Sprite* sprite)
sprite->callback = sub_80CF814;
}
}
+
+void sub_80CF9F8(u8 taskId)
+{
+ if (gTasks[taskId].data[1] == 0)
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_80CFA20(u8 taskId)
+{
+ if (gTasks[taskId].data[0]-- <= 0)
+ {
+ u8 spriteId;
+ struct Sprite* sprite;
+ spriteId = CreateSprite(&gSpriteTemplate_83D74BC, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]);
+ sprite = &gSprites[spriteId];
+ switch (gTasks[taskId].data[4])
+ {
+ case 1:
+ sprite->oam.matrixNum |= 24;
+ break;
+ case 2:
+ sprite->oam.matrixNum = 8;
+ break;
+ }
+
+ sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6];
+ sprite->data[7] = taskId;
+ gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId;
+ gTasks[taskId].data[0] = gTasks[taskId].data[3];
+ gTasks[taskId].data[1]++;
+ PlaySE12WithPanning(0x9A, BattleAnimAdjustPanning(-0x3F));
+ if (gTasks[taskId].data[1] > 2)
+ gTasks[taskId].func = sub_80CF9F8;
+ }
+}
+
+void sub_80CFB04(u8 taskId)
+{
+ s16 r9 = 0;
+ s16 r6 = 0;
+ s16 sp1 = 0;
+ s16 sp2 = 0;
+ s16 r4;
+
+ if (IsContest())
+ {
+ gTasks[taskId].data[4] = 2;
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ if (gBattleAnimArgs[2] & 1)
+ gBattleAnimArgs[2] &= ~1;
+ else
+ gBattleAnimArgs[2] |= 1;
+ }
+ else
+ {
+ if ((gBanksBySide[gAnimBankTarget] & 1) == 0)
+ {
+ gTasks[taskId].data[4] = 1;
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ if (gBattleAnimArgs[2] & 1)
+ gBattleAnimArgs[2] &= ~1;
+ else
+ gBattleAnimArgs[2] |= 1;
+ }
+ }
+ r6 = gTasks[taskId].data[9] = GetBattlerSpriteCoord(gAnimBankAttacker, 0);
+ r9 = gTasks[taskId].data[10] = GetBattlerSpriteCoord(gAnimBankAttacker, 1);
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ && IsAnimBankSpriteVisible(gAnimBankTarget ^ 2))
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 0, &sp1, &sp2);
+ }
+ else
+ {
+ sp1 = GetBattlerSpriteCoord(gAnimBankTarget, 0);
+ sp2 = GetBattlerSpriteCoord(gAnimBankTarget, 1);
+ }
+
+ sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0];
+ sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1];
+ if (sp1 >= r6)
+ r4 = sp1 - r6;
+ else
+ r4 = r6 - sp1;
+
+ gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1));
+ gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80);
+ gTasks[taskId].data[7] = gBattleAnimArgs[2];
+ if (sp2 >= r9)
+ {
+ r4 = sp2 - r9;
+ gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) & ~1;
+ }
+ else
+ {
+ r4 = r9 - sp2;
+ gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1;
+ }
+
+ gTasks[taskId].data[3] = gBattleAnimArgs[3];
+ if (gBattleAnimArgs[4] & 0x80)
+ {
+ gBattleAnimArgs[4] ^= 0x80;
+ if (gBattleAnimArgs[4] >= 64)
+ {
+ u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64);
+ gTasks[taskId].data[2] = var;
+ }
+ else
+ {
+ u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4];
+ gTasks[taskId].data[2] = var;
+ }
+ }
+ else
+ {
+ if (gBattleAnimArgs[4] >= 64)
+ {
+ u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64);
+ gTasks[taskId].data[2] = var;
+ }
+ else
+ {
+ u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4];
+ gTasks[taskId].data[2] = var;
+ }
+ }
+
+ if (gTasks[taskId].data[2] < 3)
+ gTasks[taskId].data[2] = 3;
+
+ gTasks[taskId].func = sub_80CFA20;
+}
diff --git a/src/battle/anim/sonic_task.c b/src/battle/anim/sonic_task.c
deleted file mode 100644
index dc5d60efa..000000000
--- a/src/battle/anim/sonic_task.c
+++ /dev/null
@@ -1,152 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-#include "battle_anim_80CA710.h"
-#include "battle.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u8 gBanksBySide[];
-extern u16 gBattleTypeFlags;
-extern struct SpriteTemplate gSpriteTemplate_83D74BC;
-
-// sonic_task (the task functions for the "sonic" effect.)
-// Used in Air Cutter and Sonic Boom.
-
-void sub_80CF9F8(u8 taskId)
-{
- if (gTasks[taskId].data[1] == 0)
- DestroyAnimVisualTask(taskId);
-}
-
-void sub_80CFA20(u8 taskId)
-{
- if (gTasks[taskId].data[0]-- <= 0)
- {
- u8 spriteId;
- struct Sprite* sprite;
- spriteId = CreateSprite(&gSpriteTemplate_83D74BC, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]);
- sprite = &gSprites[spriteId];
- switch (gTasks[taskId].data[4])
- {
- case 1:
- sprite->oam.matrixNum |= 24;
- break;
- case 2:
- sprite->oam.matrixNum = 8;
- break;
- }
-
- sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6];
- sprite->data[7] = taskId;
- gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId;
- gTasks[taskId].data[0] = gTasks[taskId].data[3];
- gTasks[taskId].data[1]++;
- PlaySE12WithPanning(0x9A, BattleAnimAdjustPanning(-0x3F));
- if (gTasks[taskId].data[1] > 2)
- gTasks[taskId].func = sub_80CF9F8;
- }
-}
-
-void sub_80CFB04(u8 taskId)
-{
- s16 r9 = 0;
- s16 r6 = 0;
- s16 sp1 = 0;
- s16 sp2 = 0;
- s16 r4;
-
- if (IsContest())
- {
- gTasks[taskId].data[4] = 2;
- gBattleAnimArgs[0] = -gBattleAnimArgs[0];
- if (gBattleAnimArgs[2] & 1)
- gBattleAnimArgs[2] &= ~1;
- else
- gBattleAnimArgs[2] |= 1;
- }
- else
- {
- if ((gBanksBySide[gAnimBankTarget] & 1) == 0)
- {
- gTasks[taskId].data[4] = 1;
- gBattleAnimArgs[0] = -gBattleAnimArgs[0];
- gBattleAnimArgs[1] = -gBattleAnimArgs[1];
- if (gBattleAnimArgs[2] & 1)
- gBattleAnimArgs[2] &= ~1;
- else
- gBattleAnimArgs[2] |= 1;
- }
- }
- r6 = gTasks[taskId].data[9] = GetBattlerSpriteCoord(gAnimBankAttacker, 0);
- r9 = gTasks[taskId].data[10] = GetBattlerSpriteCoord(gAnimBankAttacker, 1);
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- && IsAnimBankSpriteVisible(gAnimBankTarget ^ 2))
- {
- SetAverageBattlerPositions(gAnimBankTarget, 0, &sp1, &sp2);
- }
- else
- {
- sp1 = GetBattlerSpriteCoord(gAnimBankTarget, 0);
- sp2 = GetBattlerSpriteCoord(gAnimBankTarget, 1);
- }
-
- sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0];
- sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1];
- if (sp1 >= r6)
- r4 = sp1 - r6;
- else
- r4 = r6 - sp1;
-
- gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1));
- gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80);
- gTasks[taskId].data[7] = gBattleAnimArgs[2];
- if (sp2 >= r9)
- {
- r4 = sp2 - r9;
- gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) & ~1;
- }
- else
- {
- r4 = r9 - sp2;
- gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1;
- }
-
- gTasks[taskId].data[3] = gBattleAnimArgs[3];
- if (gBattleAnimArgs[4] & 0x80)
- {
- gBattleAnimArgs[4] ^= 0x80;
- if (gBattleAnimArgs[4] >= 64)
- {
- u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64);
- gTasks[taskId].data[2] = var;
- }
- else
- {
- u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4];
- gTasks[taskId].data[2] = var;
- }
- }
- else
- {
- if (gBattleAnimArgs[4] >= 64)
- {
- u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64);
- gTasks[taskId].data[2] = var;
- }
- else
- {
- u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4];
- gTasks[taskId].data[2] = var;
- }
- }
-
- if (gTasks[taskId].data[2] < 3)
- gTasks[taskId].data[2] = 3;
-
- gTasks[taskId].func = sub_80CFA20;
-}
diff --git a/src/battle/anim/spin_finger.c b/src/battle/anim/spin_finger.c
deleted file mode 100644
index 1ce3aa0d0..000000000
--- a/src/battle/anim/spin_finger.c
+++ /dev/null
@@ -1,73 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern void sub_80CF088(struct Sprite* sprite);
-static void sub_80CF138(struct Sprite* sprite);
-static void sub_80CF158(struct Sprite* sprite);
-
-// spin_finger
-// Used in Follow Me.
-
-void sub_80CF0BC(struct Sprite* sprite)
-{
- u8 bank;
- if (gBattleAnimArgs[0] == 0)
- bank = gAnimBankAttacker;
- else
- bank = gAnimBankTarget;
-
- sprite->pos1.x = GetBattlerSpriteCoord(bank, 0);
- sprite->pos1.y = sub_807A100(bank, 2);
- if (sprite->pos1.y <= 9)
- sprite->pos1.y = 10;
-
- sprite->data[0] = 1;
- sprite->data[1] = 0;
- sprite->data[2] = sprite->subpriority;
- sprite->data[3] = sprite->subpriority + 4;
- sprite->data[4] = 0;
- StoreSpriteCallbackInData(sprite, sub_80CF138);
- sprite->callback = sub_80785E4;
-}
-
-void sub_80CF138(struct Sprite* sprite)
-{
- if (++sprite->data[4] > 12)
- sprite->callback = sub_80CF158;
-}
-
-void sub_80CF158(struct Sprite* sprite)
-{
- s16 temp;
- s16 temp2;
- sprite->data[1] += 4;
- if (sprite->data[1] > 0xFE)
- {
- if (--sprite->data[0] == 0)
- {
- sprite->pos2.x = 0;
- sprite->callback = sub_80CF088;
- return;
- }
- else
- {
- sprite->data[1] &= 0xFF;
- }
- }
-
- if (sprite->data[1] > 0x4F)
- sprite->subpriority = sprite->data[3];
-
- if (sprite->data[1] > 0x9F)
- sprite->subpriority = sprite->data[2];
-
- temp = gSineTable[sprite->data[1]];
- sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1);
-}
diff --git a/src/battle/anim/spit.c b/src/battle/anim/spit.c
index 36fcb788c..792d7e0eb 100644
--- a/src/battle/anim/spit.c
+++ b/src/battle/anim/spit.c
@@ -8,10 +8,35 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D28AC(struct Sprite* sprite);
+
// spit (hurls sprites outward from the pokemon. Similar to orbit_fast, but takes another argument.)
// Used in Spit Up.
-void sub_80D287C(struct Sprite* sprite)
+const union AffineAnimCmd gSpriteAffineAnim_83D7B44[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7B5C[] =
+{
+ gSpriteAffineAnim_83D7B44,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7B60 =
+{
+ .tileTag = 10237,
+ .paletteTag = 10237,
+ .oam = &gOamData_837DFE4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7B5C,
+ .callback = sub_80D28AC,
+};
+
+static void sub_80D287C(struct Sprite* sprite)
{
sprite->pos2.x += sprite->data[0];
sprite->pos2.y += sprite->data[1];
diff --git a/src/battle/anim/splash.c b/src/battle/anim/splash.c
index d6caaf0f6..c01748953 100644
--- a/src/battle/anim/splash.c
+++ b/src/battle/anim/splash.c
@@ -8,13 +8,19 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct AffineAnimFrameCmd gUnknown_083D76F4;
-
static void sub_80D07AC(u8 taskId);
// splash (splash effect of hopping up and down)
// Used in Splash, Mud Sport, and Sketch.
+const union AffineAnimCmd gSpriteAffineAnim_83D76F4[] =
+{
+ AFFINEANIMCMD_FRAME(-6, 4, 0, 8),
+ AFFINEANIMCMD_FRAME(10, -10, 0, 8),
+ AFFINEANIMCMD_FRAME(-4, 6, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
void sub_80D074C(u8 taskId)
{
struct Task* task = &gTasks[taskId];
@@ -30,7 +36,7 @@ void sub_80D074C(u8 taskId)
task->data[2] = gBattleAnimArgs[1];
task->data[3] = 0;
task->data[4] = 0;
- sub_80798F4(task, spriteId, &gUnknown_083D76F4);
+ sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D76F4);
task->func = sub_80D07AC;
}
}
@@ -78,7 +84,7 @@ void sub_80D07AC(u8 taskId)
}
else
{
- sub_80798F4(task, task->data[0], &gUnknown_083D76F4);
+ sub_80798F4(task, task->data[0], &gSpriteAffineAnim_83D76F4);
task->data[1] = 0;
}
}
diff --git a/src/battle/anim/startle.c b/src/battle/anim/startle.c
index 95462bd9f..b23c7ac9e 100644
--- a/src/battle/anim/startle.c
+++ b/src/battle/anim/startle.c
@@ -8,18 +8,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct AffineAnimFrameCmd gUnknown_083D7A98;
-
// startle (the pokemon sprite shrivels upward and restores after a brief time.)
// Used in Fake Out, Trick, and Astonish.
+const union AffineAnimCmd gSpriteAffineAnim_83D7A98[] =
+{
+ AFFINEANIMCMD_FRAME(0x000A, 0xFFF3, 0x00, 0x0A),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0x000D, 0x00, 0x0A),
+ AFFINEANIMCMD_END,
+};
+
// opponent
void sub_80D1E38(u8 taskId)
{
u8 spriteId = GetAnimBattlerSpriteId(1);
if (++gTasks[taskId].data[0] == 1)
{
- sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(1), &gUnknown_083D7A98);
+ sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(1), &gSpriteAffineAnim_83D7A98);
gSprites[spriteId].pos2.x = 4;
}
else
@@ -40,7 +45,7 @@ void sub_80D1EC8(u8 taskId)
u8 spriteId = GetAnimBattlerSpriteId(0);
if (++gTasks[taskId].data[0] == 1)
{
- sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(0), &gUnknown_083D7A98);
+ sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(0), &gSpriteAffineAnim_83D7A98);
gSprites[spriteId].pos2.x = 4;
}
else
diff --git a/src/battle/anim/strike.c b/src/battle/anim/strike.c
index 775485a79..79dd833a9 100644
--- a/src/battle/anim/strike.c
+++ b/src/battle/anim/strike.c
@@ -8,11 +8,52 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CE670(struct Sprite* sprite);
static void sub_80CE798(struct Sprite* sprite);
// strike (A red strike towards the opponent.)
// Used in Horn Attack, Fury Attack, and Horn Drill.
+const union AnimCmd gSpriteAnim_83D7010[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_FRAME(80, 3),
+ ANIMCMD_FRAME(96, 2),
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7034[] =
+{
+ gSpriteAnim_83D7010,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7038 =
+{
+ .tileTag = 10031,
+ .paletteTag = 10031,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7034,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80793C4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7050 =
+{
+ .tileTag = 10020,
+ .paletteTag = 10020,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CE670,
+};
+
void sub_80CE670(struct Sprite* sprite)
{
if (gBattleAnimArgs[2] <= 1)
@@ -60,7 +101,7 @@ void sub_80CE670(struct Sprite* sprite)
sprite->callback = sub_80CE798;
}
-void sub_80CE798(struct Sprite* sprite)
+static void sub_80CE798(struct Sprite* sprite)
{
sprite->data[2] += sprite->data[3];
sprite->data[4] += sprite->data[5];
diff --git a/src/battle/anim/struggle.c b/src/battle/anim/struggle.c
index 6a1355e1b..2bcf3727e 100644
--- a/src/battle/anim/struggle.c
+++ b/src/battle/anim/struggle.c
@@ -7,8 +7,44 @@ extern s16 gBattleAnimArgs[8];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80D2C38(struct Sprite *sprite);
static void sub_80D2CC4(struct Sprite *);
+const union AnimCmd gSpriteAnim_83D7C60[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(16, 8),
+ ANIMCMD_FRAME(32, 8),
+ ANIMCMD_FRAME(16, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D7C74[] =
+{
+ ANIMCMD_FRAME(16, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7C88[] =
+{
+ gSpriteAnim_83D7C60,
+ gSpriteAnim_83D7C74,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7C90 =
+{
+ .tileTag = 10215,
+ .paletteTag = 10215,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7C88,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2C38,
+};
+
void sub_80D2C38(struct Sprite *sprite)
{
if (gBattleAnimArgs[2] == 0)
diff --git a/src/battle/anim/sunlight.c b/src/battle/anim/sunlight.c
index 88112c74a..7efc85b37 100644
--- a/src/battle/anim/sunlight.c
+++ b/src/battle/anim/sunlight.c
@@ -2,9 +2,34 @@
#include "battle_anim.h"
#include "rom_8077ABC.h"
+void sub_80D517C(struct Sprite *sprite);
+
// sunlight (creates sunlight orbs)
// Used in Sunny Day
+const union AffineAnimCmd gSpriteAffineAnim_83D9594[] =
+{
+ AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0),
+ AFFINEANIMCMD_FRAME(0x2, 0x2, 10, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D95AC[] =
+{
+ gSpriteAffineAnim_83D9594,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D95B0 =
+{
+ .tileTag = 10157,
+ .paletteTag = 10157,
+ .oam = &gOamData_837E0B4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D95AC,
+ .callback = sub_80D517C,
+};
+
void sub_80D517C(struct Sprite *sprite)
{
sprite->pos1.x = 0;
diff --git a/src/battle/anim/swipe.c b/src/battle/anim/swipe.c
index 922b11a5f..df7a0e91f 100644
--- a/src/battle/anim/swipe.c
+++ b/src/battle/anim/swipe.c
@@ -4,6 +4,43 @@
extern s16 gBattleAnimArgs[8];
+void sub_80D2BE8(struct Sprite *sprite);
+
+const union AnimCmd gSpriteAnim_83D7C18[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D7C2C[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7C40[] =
+{
+ gSpriteAnim_83D7C18,
+ gSpriteAnim_83D7C2C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7C48 =
+{
+ .tileTag = 10222,
+ .paletteTag = 10222,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7C40,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D2BE8,
+};
+
void sub_80D2BE8(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
diff --git a/src/battle/anim/switch.c b/src/battle/anim/switch.c
index c4082b6aa..fcb1d9fc3 100644
--- a/src/battle/anim/switch.c
+++ b/src/battle/anim/switch.c
@@ -7,9 +7,11 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern const union AffineAnimCmd gSpriteAffineAnim_83D66BC[];
+extern const union AffineAnimCmd gSpriteAffineAnim_83D66DC[];
+extern const union AnimCmd *const gSpriteAnimTable_83D66B8[];
-extern s8 gUnknown_083D680C[11][3];
-
+void sub_80CBBF0(struct Sprite* sprite);
static void sub_80CBC8C(struct Sprite* sprite);
static void sub_80CBCF8(struct Sprite* sprite);
static void sub_80CBDB0(struct Sprite* sprite);
@@ -17,6 +19,56 @@ static void sub_80CBDB0(struct Sprite* sprite);
// switch (makes an item and circles it from side to side on the field.)
// Used in Trick.
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6794[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 3),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D67A4[] = {
+ AFFINEANIMCMD_FRAME(0, -10, 0, 3),
+ AFFINEANIMCMD_FRAME(0, -6, 0, 3),
+ AFFINEANIMCMD_FRAME(0, -2, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 2, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 6, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 10, 0, 3),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D67E4[] = {
+ gSpriteAffineAnim_83D6794,
+ gSpriteAffineAnim_83D67A4,
+ gSpriteAffineAnim_83D66BC,
+ gSpriteAffineAnim_83D66DC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D67F4 =
+{
+ .tileTag = 10224,
+ .paletteTag = 10224,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D66B8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D67E4,
+ .callback = sub_80CBBF0,
+};
+
+const s8 gUnknown_083D680C[][3] =
+{
+ {5, 24, 1},
+ {0, 4, 0},
+ {8, 16, -1},
+ {0, 2, 0},
+ {8, 16, 1},
+ {0, 2, 0},
+ {8, 16, 1},
+ {0, 2, 0},
+ {8, 16, 1},
+ {0, 16, 0},
+ {0, 0, 127},
+};
+
void sub_80CBBF0(struct Sprite* sprite)
{
int a;
@@ -27,7 +79,7 @@ void sub_80CBBF0(struct Sprite* sprite)
if (!IsContest())
{
sprite->data[1] = gBattleAnimArgs[1];
- sprite->pos1.x = 0x78;
+ sprite->pos1.x = 120;
}
else
{
@@ -38,13 +90,13 @@ void sub_80CBBF0(struct Sprite* sprite)
b = a;
sprite->data[1] = a - ((b >> 8) << 8);
- sprite->pos1.x = 0x46;
+ sprite->pos1.x = 70;
}
sprite->pos1.y = gBattleAnimArgs[0];
sprite->data[2] = gBattleAnimArgs[0];
sprite->data[4] = 20;
- sprite->pos2.x = Cos(sprite->data[1], 0x3C);
+ sprite->pos2.x = Cos(sprite->data[1], 60);
sprite->pos2.y = Sin(sprite->data[1], 20);
sprite->callback = sub_80CBC8C;
if (sprite->data[1] > 0 && sprite->data[1] < 0xC0)
@@ -54,7 +106,7 @@ void sub_80CBBF0(struct Sprite* sprite)
}
}
-void sub_80CBC8C(struct Sprite* sprite)
+static void sub_80CBC8C(struct Sprite* sprite)
{
switch (sprite->data[3])
{
@@ -84,7 +136,7 @@ void sub_80CBC8C(struct Sprite* sprite)
}
}
-void sub_80CBCF8(struct Sprite* sprite)
+static void sub_80CBCF8(struct Sprite* sprite)
{
if (sprite->data[2] == gUnknown_083D680C[sprite->data[0]][1])
{
@@ -113,12 +165,12 @@ void sub_80CBCF8(struct Sprite* sprite)
}
}
- sprite->pos2.x = Cos(sprite->data[1], 0x3C);
+ sprite->pos2.x = Cos(sprite->data[1], 60);
sprite->pos2.y = Sin(sprite->data[1], 20);
}
}
-void sub_80CBDB0(struct Sprite* sprite)
+static void sub_80CBDB0(struct Sprite* sprite)
{
if (sprite->data[0] > 20)
DestroyAnimSprite(sprite);
diff --git a/src/battle/anim/sword.c b/src/battle/anim/sword.c
index 3367cca07..7fb410224 100644
--- a/src/battle/anim/sword.c
+++ b/src/battle/anim/sword.c
@@ -8,11 +8,36 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CF690(struct Sprite* sprite);
static void sub_80CF6B4(struct Sprite* sprite);
// sword (sword appears and floats upward.)
// Used in Swords Dance.
+const union AffineAnimCmd gSpriteAffineAnim_83D7468[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x14, 0x0, 0, 12),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7488[] =
+{
+ gSpriteAffineAnim_83D7468,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D748C =
+{
+ .tileTag = 10005,
+ .paletteTag = 10005,
+ .oam = &gOamData_837E0FC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D7488,
+ .callback = sub_80CF690,
+};
+
void sub_80CF690(struct Sprite* sprite)
{
InitAnimSpritePos(sprite, 0);
@@ -20,7 +45,7 @@ void sub_80CF690(struct Sprite* sprite)
StoreSpriteCallbackInData(sprite, sub_80CF6B4);
}
-void sub_80CF6B4(struct Sprite* sprite)
+static void sub_80CF6B4(struct Sprite* sprite)
{
sprite->data[0] = 6;
sprite->data[2] = sprite->pos1.x;
diff --git a/src/battle/anim/taunt_finger.c b/src/battle/anim/taunt_finger.c
deleted file mode 100644
index c512f8cf4..000000000
--- a/src/battle/anim/taunt_finger.c
+++ /dev/null
@@ -1,56 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern void sub_80CEF44(u8 bank, struct Sprite* sprite);
-static void sub_80CF228(struct Sprite* sprite);
-static void sub_80CF264(struct Sprite* sprite);
-
-// taunt_finger
-// Used in Taunt.
-
-void sub_80CF1C8(struct Sprite* sprite)
-{
- u8 bank;
- if (gBattleAnimArgs[0] == 0)
- bank = gAnimBankAttacker;
- else
- bank = gAnimBankTarget;
-
- sub_80CEF44(bank, sprite);
- if (GetBattlerSide(bank) == 0)
- {
- StartSpriteAnim(sprite, 0);
- sprite->data[0] = 2;
- }
- else
- {
- StartSpriteAnim(sprite, 1);
- sprite->data[0] = 3;
- }
-
- sprite->callback = sub_80CF228;
-}
-
-void sub_80CF228(struct Sprite* sprite)
-{
- if (++sprite->data[1] > 10)
- {
- sprite->data[1] = 0;
- StartSpriteAnim(sprite, sprite->data[0]);
- StoreSpriteCallbackInData(sprite, sub_80CF264);
- sprite->callback = sub_8078600;
- }
-}
-
-void sub_80CF264(struct Sprite* sprite)
-{
- if (++sprite->data[1] > 5)
- DestroyAnimSprite(sprite);
-}
diff --git a/src/battle/anim/tendrils.c b/src/battle/anim/tendrils.c
index 4ef704f3a..55e2c21bb 100644
--- a/src/battle/anim/tendrils.c
+++ b/src/battle/anim/tendrils.c
@@ -7,12 +7,67 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CB25C(struct Sprite* sprite);
static void sub_80CB298(struct Sprite* sprite);
static void sub_80CB2D4(struct Sprite* sprite);
// tendrils
// Used by Constrict.
+const union AnimCmd gSpriteAnim_83D6528[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_FRAME(96, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D653C[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(96, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6550[] =
+{
+ gSpriteAnim_83D6528,
+ gSpriteAnim_83D653C,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6558[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
+ AFFINEANIMCMD_FRAME(11, 0, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6578[] = {
+ AFFINEANIMCMD_FRAME(-256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(11, 0, 0, 6),
+ AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6598[] = {
+ gSpriteAffineAnim_83D6558,
+ gSpriteAffineAnim_83D6578,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D65A0 =
+{
+ .tileTag = 10186,
+ .paletteTag = 10186,
+ .oam = &gOamData_837DFBC,
+ .anims = gSpriteAnimTable_83D6550,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6598,
+ .callback = sub_80CB25C,
+};
+
void sub_80CB25C(struct Sprite* sprite)
{
sub_8078764(sprite, 0);
@@ -23,7 +78,7 @@ void sub_80CB25C(struct Sprite* sprite)
sprite->callback = sub_80CB298;
}
-void sub_80CB298(struct Sprite* sprite)
+static void sub_80CB298(struct Sprite* sprite)
{
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
{
@@ -34,7 +89,7 @@ void sub_80CB298(struct Sprite* sprite)
}
}
-void sub_80CB2D4(struct Sprite* sprite)
+static void sub_80CB2D4(struct Sprite* sprite)
{
GetAnimBattlerSpriteId(1);
if (!sprite->data[2])
diff --git a/src/battle/anim/thought.c b/src/battle/anim/thought.c
index 5163cbfad..d39520dac 100644
--- a/src/battle/anim/thought.c
+++ b/src/battle/anim/thought.c
@@ -8,11 +8,67 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CEF9C(struct Sprite* sprite);
static void sub_80CF008(struct Sprite* sprite);
// thought (thought bubble)
// Used in Metronome and Taunt.
+const union AnimCmd gSpriteAnim_83D71C0[] =
+{
+ ANIMCMD_FRAME(0, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 2, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D71D4[] =
+{
+ ANIMCMD_FRAME(48, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 2, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D71E8[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D71FC[] =
+{
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7210[] =
+{
+ gSpriteAnim_83D71C0,
+ gSpriteAnim_83D71E8,
+ gSpriteAnim_83D71D4,
+ gSpriteAnim_83D71FC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7220 =
+{
+ .tileTag = 10209,
+ .paletteTag = 10209,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D7210,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CEF9C,
+};
+
void sub_80CEF44(u8 bank, struct Sprite* sprite)
{
if (GetBattlerSide(bank) == 0)
@@ -41,7 +97,7 @@ void sub_80CEF9C(struct Sprite* sprite)
sprite->callback = sub_8078600;
}
-void sub_80CF008(struct Sprite* sprite)
+static void sub_80CF008(struct Sprite* sprite)
{
if (--sprite->data[0] == 0)
{
diff --git a/src/battle/anim/thrashing.c b/src/battle/anim/thrashing.c
index bc1fc4842..38dccb83f 100644
--- a/src/battle/anim/thrashing.c
+++ b/src/battle/anim/thrashing.c
@@ -8,14 +8,22 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct AffineAnimFrameCmd gUnknown_083D77B0;
-
static void sub_80D0A8C(u8 taskId);
static void sub_80D0B3C(u8 taskId);
// thrashing (the movement of the Pokemon left/right repeatedly, with up/down movements below.)
// Used by Thrash.
+const union AffineAnimCmd gSpriteAffineAnim_83D77B0[] =
+{
+ AFFINEANIMCMD_FRAME(-10, 9, 0, 7),
+ AFFINEANIMCMD_FRAME(20, -20, 0, 7),
+ AFFINEANIMCMD_FRAME(-20, 20, 0, 7),
+ AFFINEANIMCMD_FRAME(10, -9, 0, 7),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_END,
+};
+
// left/right movements
void sub_80D0A4C(u8 taskId)
{
@@ -23,11 +31,11 @@ void sub_80D0A4C(u8 taskId)
u8 spriteId = GetAnimBattlerSpriteId(0);
task->data[0] = spriteId;
task->data[1] = 0;
- sub_80798F4(task, spriteId, &gUnknown_083D77B0);
+ sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D77B0);
task->func = sub_80D0A8C;
}
-void sub_80D0A8C(u8 taskId)
+static void sub_80D0A8C(u8 taskId)
{
struct Task* task = &gTasks[taskId];
if (!sub_807992C(task))
@@ -54,7 +62,7 @@ void sub_80D0AB8(u8 taskId)
task->func = sub_80D0B3C;
}
-void sub_80D0B3C(u8 taskId)
+static void sub_80D0B3C(u8 taskId)
{
struct Task* task = &gTasks[taskId];
if (++task->data[7] > 2)
diff --git a/src/battle/anim/thunder.c b/src/battle/anim/thunder.c
index 70d4dc232..9cd04e61f 100644
--- a/src/battle/anim/thunder.c
+++ b/src/battle/anim/thunder.c
@@ -7,11 +7,38 @@ extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern u16 gBattleTypeFlags;
+void sub_80D61C8(struct Sprite *sprite);
static void sub_80D6218(struct Sprite *);
// thunder (positions the lightning bolts)
// Used in Thunder, Thunder Punch, and Tri Attack.
+const union AnimCmd gSpriteAnim_83D97B4[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 8),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D97CC[] =
+{
+ gSpriteAnim_83D97B4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D97D0 =
+{
+ .tileTag = 10037,
+ .paletteTag = 10037,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D97CC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D61C8,
+};
+
void sub_80D61C8(struct Sprite *sprite)
{
if (GetBattlerSide(gAnimBankAttacker) != 0)
diff --git a/src/battle/anim/tile.c b/src/battle/anim/tile.c
new file mode 100644
index 000000000..a10850808
--- /dev/null
+++ b/src/battle/anim/tile.c
@@ -0,0 +1,219 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "battle_interface.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "sound.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+extern u8 gBattlersCount;
+extern u8 gHealthboxIDs[];
+
+void sub_80CE09C(struct Sprite* sprite);
+void sub_80CE17C(struct Sprite* sprite);
+static void sub_80CE1AC(struct Sprite* sprite);
+
+// tile_in (flips a white tile from the scene into facing the player.)
+// Used in Conversion.
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6F08 =
+{
+ .tileTag = 10017,
+ .paletteTag = 10017,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const union AnimCmd gSpriteAnim_83D6F20[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6F38[] =
+{
+ gSpriteAnim_83D6F20,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6F3C =
+{
+ .tileTag = 10030,
+ .paletteTag = 10030,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6F38,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80793C4,
+};
+
+const union AnimCmd gSpriteAnim_83D6F54[] =
+{
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6F68[] =
+{
+ gSpriteAnim_83D6F54,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6F6C[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6F7C[] =
+{
+ gSpriteAffineAnim_83D6F6C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6F80 =
+{
+ .tileTag = 10018,
+ .paletteTag = 10018,
+ .oam = &gOamData_837E104,
+ .anims = gSpriteAnimTable_83D6F68,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6F7C,
+ .callback = sub_80CE09C,
+};
+
+const union AnimCmd gSpriteAnim_83D6F98[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6FAC[] =
+{
+ gSpriteAnim_83D6F98,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FB0 =
+{
+ .tileTag = 10018,
+ .paletteTag = 10018,
+ .oam = &gOamData_837E104,
+ .anims = gSpriteAnimTable_83D6FAC,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6F7C,
+ .callback = sub_80CE17C,
+};
+
+void sub_80CE09C(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[1];
+ if (IsContest())
+ sprite->pos1.y += 10;
+ sprite->data[0]++;
+ }
+
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_80CE108(u8 taskId)
+{
+ if (gTasks[taskId].data[2] == 1)
+ {
+ gBattleAnimArgs[7] = 0xFFFF;
+ gTasks[taskId].data[2]++;
+ }
+ else if (gTasks[taskId].data[2] == 2)
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ if (++gTasks[taskId].data[0] == 4)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1]++;
+ REG_BLDALPHA = (gTasks[taskId].data[1] << 8) | (16 - gTasks[taskId].data[1]);
+ if (gTasks[taskId].data[1] == 16)
+ gTasks[taskId].data[2]++;
+ }
+ }
+}
+
+void sub_80CE17C(struct Sprite* sprite)
+{
+ sub_8078764(sprite, 0);
+ sprite->animPaused = 1;
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->callback = sub_80CE1AC;
+}
+
+static void sub_80CE1AC(struct Sprite* sprite)
+{
+ if (sprite->data[0])
+ {
+ sprite->data[0]--;
+ }
+ else
+ {
+ sprite->animPaused = 0;
+ sprite->data[0] = 30;
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+ sprite->callback = StartTranslateAnimSpriteByDeltas;
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+ }
+}
+
+void sub_80CE210(u8 taskId)
+{
+ if (++gTasks[taskId].data[0] == 4)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1]++;
+ REG_BLDALPHA = gTasks[taskId].data[1] | ((16 - gTasks[taskId].data[1]) << 8);
+ if (gTasks[taskId].data[1] == 16)
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void unref_sub_80CE260(u8 taskId)
+{
+ u8 i;
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (gBattleAnimArgs[0] == 1 && GetBattlerSide(i) == 0)
+ sub_8043DB0(gHealthboxIDs[i]);
+
+ if (gBattleAnimArgs[1] == 1 && GetBattlerSide(i) == 1)
+ sub_8043DB0(gHealthboxIDs[i]);
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void unref_sub_80CE2D4(u8 taskId)
+{
+ u8 i;
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ sub_8043DFC(gHealthboxIDs[i]);
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
diff --git a/src/battle/anim/tile_in.c b/src/battle/anim/tile_in.c
deleted file mode 100644
index b1d804317..000000000
--- a/src/battle/anim/tile_in.c
+++ /dev/null
@@ -1,51 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-// tile_in (flips a white tile from the scene into facing the player.)
-// Used in Conversion.
-
-void sub_80CE09C(struct Sprite* sprite)
-{
- if (sprite->data[0] == 0)
- {
- sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[0];
- sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[1];
- if (IsContest())
- sprite->pos1.y += 10;
- sprite->data[0]++;
- }
-
- if ((u16)gBattleAnimArgs[7] == 0xFFFF)
- DestroyAnimSprite(sprite);
-}
-
-void sub_80CE108(u8 taskId)
-{
- if (gTasks[taskId].data[2] == 1)
- {
- gBattleAnimArgs[7] = 0xFFFF;
- gTasks[taskId].data[2]++;
- }
- else if (gTasks[taskId].data[2] == 2)
- {
- DestroyAnimVisualTask(taskId);
- }
- else
- {
- if (++gTasks[taskId].data[0] == 4)
- {
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1]++;
- REG_BLDALPHA = (gTasks[taskId].data[1] << 8) | (16 - gTasks[taskId].data[1]);
- if (gTasks[taskId].data[1] == 16)
- gTasks[taskId].data[2]++;
- }
- }
-}
diff --git a/src/battle/anim/tile_out.c b/src/battle/anim/tile_out.c
deleted file mode 100644
index 04f51e556..000000000
--- a/src/battle/anim/tile_out.c
+++ /dev/null
@@ -1,81 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-#include "battle_interface.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u8 gBattlersCount;
-extern u8 gHealthboxIDs[];
-
-static void sub_80CE1AC(struct Sprite* sprite);
-
-// tile_out (makes a tile fly inward into a center point.)
-// Used in Conversion 2.
-
-void sub_80CE17C(struct Sprite* sprite)
-{
- sub_8078764(sprite, 0);
- sprite->animPaused = 1;
- sprite->data[0] = gBattleAnimArgs[2];
- sprite->callback = sub_80CE1AC;
-}
-
-void sub_80CE1AC(struct Sprite* sprite)
-{
- if (sprite->data[0])
- {
- sprite->data[0]--;
- }
- else
- {
- sprite->animPaused = 0;
- sprite->data[0] = 30;
- sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
- sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
- sprite->callback = StartTranslateAnimSpriteByDeltas;
- StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
- }
-}
-
-void sub_80CE210(u8 taskId)
-{
- if (++gTasks[taskId].data[0] == 4)
- {
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1]++;
- REG_BLDALPHA = gTasks[taskId].data[1] | ((16 - gTasks[taskId].data[1]) << 8);
- if (gTasks[taskId].data[1] == 16)
- DestroyAnimVisualTask(taskId);
- }
-}
-
-void unref_sub_80CE260(u8 taskId)
-{
- u8 i;
- for (i = 0; i < gBattlersCount; i++)
- {
- if (gBattleAnimArgs[0] == 1 && GetBattlerSide(i) == 0)
- sub_8043DB0(gHealthboxIDs[i]);
-
- if (gBattleAnimArgs[1] == 1 && GetBattlerSide(i) == 1)
- sub_8043DB0(gHealthboxIDs[i]);
- }
-
- DestroyAnimVisualTask(taskId);
-}
-
-void unref_sub_80CE2D4(u8 taskId)
-{
- u8 i;
- for (i = 0; i < gBattlersCount; i++)
- {
- sub_8043DFC(gHealthboxIDs[i]);
- }
-
- DestroyAnimVisualTask(taskId);
-}
diff --git a/src/battle/anim/twinkle.c b/src/battle/anim/twinkle.c
index 34082cc2f..bfe0c8da2 100644
--- a/src/battle/anim/twinkle.c
+++ b/src/battle/anim/twinkle.c
@@ -8,11 +8,37 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CE36C(struct Sprite* sprite);
static void sub_80CE3B0(struct Sprite* sprite);
// twinkle (a tiny twinkling star appears above the Pokemon and descends toward the Pokemon.)
// Used in Moonlight.
+const union AnimCmd gSpriteAnim_83D6FE0[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_FRAME(8, 8),
+ ANIMCMD_FRAME(12, 8),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6FF4[] =
+{
+ gSpriteAnim_83D6FE0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8 =
+{
+ .tileTag = 10195,
+ .paletteTag = 10195,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6FF4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CE36C,
+};
+
void sub_80CE36C(struct Sprite* sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[0];
@@ -25,7 +51,7 @@ void sub_80CE36C(struct Sprite* sprite)
sprite->callback = sub_80CE3B0;
}
-void sub_80CE3B0(struct Sprite* sprite)
+static void sub_80CE3B0(struct Sprite* sprite)
{
if (++sprite->data[1] > 1)
{
diff --git a/src/battle/anim/unused_1.c b/src/battle/anim/unused_1.c
index d7e5fbfe4..15050b54c 100644
--- a/src/battle/anim/unused_1.c
+++ b/src/battle/anim/unused_1.c
@@ -8,9 +8,73 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CC8C8(struct Sprite* sprite);
+
// unused effect file.
// Seems to be a beta effect for Beat Up, possibly.
+const union AffineAnimCmd gSpriteAffineAnim_83D6A58[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6A68[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 32, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6A78[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 64, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6A88[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 96, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6A98[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -128, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6AA8[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -96, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6AB8[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -64, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6AC8[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -32, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6AD8[] = {
+ gSpriteAffineAnim_83D6A58,
+ gSpriteAffineAnim_83D6A68,
+ gSpriteAffineAnim_83D6A78,
+ gSpriteAffineAnim_83D6A88,
+ gSpriteAffineAnim_83D6A98,
+ gSpriteAffineAnim_83D6AA8,
+ gSpriteAffineAnim_83D6AB8,
+ gSpriteAffineAnim_83D6AC8,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6AF8 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6AD8,
+ .callback = sub_80CC8C8,
+};
+
void sub_80CC8C8(struct Sprite* sprite)
{
sprite->pos1.x += gBattleAnimArgs[0];
diff --git a/src/battle/anim/unused_2.c b/src/battle/anim/unused_2.c
index 71e5e92d7..f4ebe0e74 100644
--- a/src/battle/anim/unused_2.c
+++ b/src/battle/anim/unused_2.c
@@ -8,11 +8,97 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CCC50(struct Sprite* sprite);
static void sub_80CCCB4(struct Sprite* sprite);
// unused_2 (unknown effect with music notes.)
// possibly another unused effect. Unknown usage.
+const union AnimCmd gSpriteAnim_83D6B58[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B60[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B68[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B70[] =
+{
+ ANIMCMD_FRAME(12, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B78[] =
+{
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B80[] =
+{
+ ANIMCMD_FRAME(20, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B88[] =
+{
+ ANIMCMD_FRAME(0, 1, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B90[] =
+{
+ ANIMCMD_FRAME(4, 1, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6B98[] =
+{
+ ANIMCMD_FRAME(8, 1, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6BA0[] =
+{
+ ANIMCMD_FRAME(12, 1, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6BA8[] =
+{
+ gSpriteAnim_83D6B58,
+ gSpriteAnim_83D6B60,
+ gSpriteAnim_83D6B68,
+ gSpriteAnim_83D6B70,
+ gSpriteAnim_83D6B78,
+ gSpriteAnim_83D6B80,
+ gSpriteAnim_83D6B88,
+ gSpriteAnim_83D6B90,
+ gSpriteAnim_83D6B98,
+ gSpriteAnim_83D6BA0,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6BD0 =
+{
+ .tileTag = 10072,
+ .paletteTag = 10072,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6BA8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CCC50,
+};
+
void unref_sub_80CCB6C(struct Sprite* sprite)
{
if (sprite->data[2] > 1)
@@ -62,7 +148,7 @@ void sub_80CCC50(struct Sprite* sprite)
sub_80CCCB4(sprite);
}
-void sub_80CCCB4(struct Sprite* sprite)
+static void sub_80CCCB4(struct Sprite* sprite)
{
sprite->pos2.x = Cos(sprite->data[0], 100);
sprite->pos2.y = Sin(sprite->data[0], 20);
diff --git a/src/battle/anim/unused_3.c b/src/battle/anim/unused_3.c
index a89ed0246..1c3ab978e 100644
--- a/src/battle/anim/unused_3.c
+++ b/src/battle/anim/unused_3.c
@@ -8,10 +8,53 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CD274(struct Sprite* sprite);
static void sub_80CD2D4(struct Sprite* sprite);
// unused_3 (seems to be some sort of popping effect with a growing diamond shape)
-// yet another unused effect...
+
+const union AnimCmd gSpriteAnim_83D6CB8[] =
+{
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_FRAME(4, 10),
+ ANIMCMD_FRAME(8, 10),
+ ANIMCMD_FRAME(12, 10),
+ ANIMCMD_FRAME(16, 26),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(20, 5),
+ ANIMCMD_FRAME(24, 15),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6CDC[] =
+{
+ ANIMCMD_FRAME(0, 10, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 10, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 10, .hFlip = TRUE),
+ ANIMCMD_FRAME(12, 10, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 26, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(20, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(24, 15, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6D00[] =
+{
+ gSpriteAnim_83D6CB8,
+ gSpriteAnim_83D6CDC,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6D08 =
+{
+ .tileTag = 10032,
+ .paletteTag = 10032,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6D00,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CD274,
+};
void sub_80CD274(struct Sprite* sprite)
{
@@ -31,7 +74,7 @@ void sub_80CD274(struct Sprite* sprite)
sprite->callback = sub_80CD2D4;
}
-void sub_80CD2D4(struct Sprite* sprite)
+static void sub_80CD2D4(struct Sprite* sprite)
{
if (++sprite->data[0] > 30)
{
diff --git a/src/battle/anim/unused_4.c b/src/battle/anim/unused_4.c
deleted file mode 100644
index 63940f3e1..000000000
--- a/src/battle/anim/unused_4.c
+++ /dev/null
@@ -1,58 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern u8 gBankSpriteIds[];
-
-static void sub_80CD9D4(struct Sprite* sprite);
-
-// unused_4
-// Unknown usage.
-
-void sub_80CD9C4(struct Sprite* sprite)
-{
- sprite->data[0] = 0;
- sprite->callback = sub_80CD9D4;
-}
-
-void sub_80CD9D4(struct Sprite* sprite)
-{
- switch (sprite->data[0])
- {
- case 0:
- sprite->data[1] = 0;
- sprite->data[2] = gBankSpriteIds[gAnimBankAttacker];
- sprite->data[3] = GetBattlerSide(gAnimBankAttacker);
- sprite->data[4] = (sprite->data[3] != 0) ? 0x200 : -0x200;
- sprite->data[5] = 0;
- sub_8078E70(sprite->data[2], 0);
- sprite->data[0]++;
- case 1:
- sprite->data[5] += sprite->data[4];
- obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
- sub_8078F9C(sprite->data[2]);
- if (++sprite->data[1] > 3)
- {
- sprite->data[1] = 0;
- sprite->data[4] *= -1;
- sprite->data[0]++;
- }
- break;
- case 2:
- sprite->data[5] += sprite->data[4];
- obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
- sub_8078F9C(sprite->data[2]);
- if (++sprite->data[1] > 3)
- {
- sub_8078F40(sprite->data[2]);
- DestroyAnimSprite(sprite);
- }
- break;
- }
-}
diff --git a/src/battle/anim/unused_5.c b/src/battle/anim/unused_5.c
index 421cdd6bf..af9a8a037 100644
--- a/src/battle/anim/unused_5.c
+++ b/src/battle/anim/unused_5.c
@@ -8,8 +8,21 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CF280(struct Sprite* sprite);
+
// unused_5
+const struct SpriteTemplate gSpriteTemplate_83D7370 =
+{
+ .tileTag = 10064,
+ .paletteTag = 10064,
+ .oam = &gOamData_837DF34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CF280,
+};
+
void sub_80CF280(struct Sprite* sprite)
{
sub_8078650(sprite);
diff --git a/src/battle/anim/unused_6.c b/src/battle/anim/unused_6.c
index 37e2031b0..5b37d32c9 100644
--- a/src/battle/anim/unused_6.c
+++ b/src/battle/anim/unused_6.c
@@ -9,10 +9,34 @@ extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern void sub_80CEF44(u8 bank, struct Sprite* sprite);
+
+void sub_80CF2D0(struct Sprite* sprite);
static void sub_80CF310(struct Sprite* sprite);
// unused_6
+const union AnimCmd gSpriteAnim_83D7388[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D7390[] =
+{
+ gSpriteAnim_83D7388,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D7394 =
+{
+ .tileTag = 10072,
+ .paletteTag = 10072,
+ .oam = &gOamData_837DF2C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CF2D0,
+};
+
void sub_80CF2D0(struct Sprite* sprite)
{
u8 bank;
@@ -27,7 +51,7 @@ void sub_80CF2D0(struct Sprite* sprite)
sprite->callback = sub_80CF310;
}
-void sub_80CF310(struct Sprite* sprite)
+static void sub_80CF310(struct Sprite* sprite)
{
switch (sprite->data[0])
{
diff --git a/src/battle/anim/unused_7.c b/src/battle/anim/unused_7.c
index a2f00db31..fa3facdda 100644
--- a/src/battle/anim/unused_7.c
+++ b/src/battle/anim/unused_7.c
@@ -10,9 +10,22 @@ extern u8 gAnimBankTarget;
extern u8 gBankSpriteIds[];
+void sub_80CF3C4(struct Sprite* sprite);
+
// unused_7
-void sub_80CF374(struct Sprite* sprite)
+const struct SpriteTemplate gSpriteTemplate_83D73AC =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CF3C4,
+};
+
+static void sub_80CF374(struct Sprite* sprite)
{
s16 temp;
gSprites[sprite->data[2]].pos2.x += sprite->data[1];
diff --git a/src/battle/anim/unused_8.c b/src/battle/anim/unused_8.c
index c67ec2754..a005bee1c 100644
--- a/src/battle/anim/unused_8.c
+++ b/src/battle/anim/unused_8.c
@@ -7,12 +7,62 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB1B0[];
+void sub_80CF458(struct Sprite* sprite);
static void sub_80CF490(struct Sprite* sprite);
static void sub_80CF4B8(struct Sprite* sprite);
// unused_8
+const struct SpriteTemplate gSpriteTemplate_83D73C4 =
+{
+ .tileTag = 10145,
+ .paletteTag = 10145,
+ .oam = &gOamData_837E0BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DB1B0,
+ .callback = sub_80CF458,
+};
+
+const union AnimCmd gSpriteAnim_83D73DC[] =
+{
+ ANIMCMD_FRAME(0, 9),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D73F0[] =
+{
+ gSpriteAnim_83D73DC,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D73F4[] =
+{
+ AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0),
+ AFFINEANIMCMD_FRAME(0x9, 0x9, 0, 18),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D740C[] =
+{
+ gSpriteAffineAnim_83D73F4,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D7410 =
+{
+ .tileTag = 10007,
+ .paletteTag = 10007,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D73F0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D740C,
+ .callback = sub_80793C4,
+};
+
void sub_80CF458(struct Sprite* sprite)
{
InitAnimSpritePos(sprite, 1);
@@ -23,7 +73,7 @@ void sub_80CF458(struct Sprite* sprite)
StoreSpriteCallbackInData(sprite, sub_80CF490);
}
-void sub_80CF490(struct Sprite* sprite)
+static void sub_80CF490(struct Sprite* sprite)
{
sprite->data[0] = sprite->data[1];
sprite->data[2] = sprite->pos1.x;
@@ -32,7 +82,7 @@ void sub_80CF490(struct Sprite* sprite)
StoreSpriteCallbackInData(sprite, sub_80CF4B8);
}
-void sub_80CF4B8(struct Sprite* sprite)
+static void sub_80CF4B8(struct Sprite* sprite)
{
if (sprite->data[5] == 0)
DestroyAnimSprite(sprite);
diff --git a/src/battle/anim/unused_9.c b/src/battle/anim/unused_9.c
index 8e3f0a8b7..d8dda35b3 100644
--- a/src/battle/anim/unused_9.c
+++ b/src/battle/anim/unused_9.c
@@ -9,13 +9,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct SpriteTemplate gSpriteTemplate_83D75AC;
-
+void sub_80CFDFC(struct Sprite* sprite);
static void sub_80CFE2C(struct Sprite* sprite);
// unused_9? (Most likely an unused effect.)
// I cannot find any reference to this sprite template used to call this.
+const struct SpriteTemplate gSpriteTemplate_83D75AC =
+{
+ .tileTag = 10178,
+ .paletteTag = 10178,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CFDFC,
+};
+
void sub_80CFDFC(struct Sprite* sprite)
{
InitAnimSpritePos(sprite, 0);
@@ -24,7 +34,7 @@ void sub_80CFDFC(struct Sprite* sprite)
}
#ifdef NONMATCHING
-void sub_80CFE2C(struct Sprite* sprite)
+static void sub_80CFE2C(struct Sprite* sprite)
{
u16 r7;
u16 r5;
@@ -46,7 +56,7 @@ void sub_80CFE2C(struct Sprite* sprite)
}
#else
NAKED
-void sub_80CFE2C(struct Sprite* sprite)
+static void sub_80CFE2C(struct Sprite* sprite)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
diff --git a/src/battle/anim/uproar.c b/src/battle/anim/uproar.c
index 538ca9b20..c78f89fef 100644
--- a/src/battle/anim/uproar.c
+++ b/src/battle/anim/uproar.c
@@ -6,19 +6,25 @@
extern s16 gBattleAnimArgs[8];
-extern const union AffineAnimCmd gUnknown_083D7CA8[];
+static void sub_80D2D3C(u8);
-void sub_80D2D3C(u8);
+const union AffineAnimCmd gSpriteAffineAnim_83D7CA8[] =
+{
+ AFFINEANIMCMD_FRAME(-12, 8, 0, 4),
+ AFFINEANIMCMD_FRAME(20, -20, 0, 4),
+ AFFINEANIMCMD_FRAME(-8, 12, 0, 4),
+ AFFINEANIMCMD_END,
+};
void sub_80D2CF8(u8 taskId)
{
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
- sub_80798F4(&gTasks[taskId], spriteId, gUnknown_083D7CA8);
+ sub_80798F4(&gTasks[taskId], spriteId, gSpriteAffineAnim_83D7CA8);
gTasks[taskId].func = sub_80D2D3C;
}
-void sub_80D2D3C(u8 taskId)
+static void sub_80D2D3C(u8 taskId)
{
if (!sub_807992C(&gTasks[taskId]))
DestroyAnimVisualTask(taskId);
diff --git a/src/battle/anim/water.c b/src/battle/anim/water.c
index a7e1883f3..0afe133f0 100644
--- a/src/battle/anim/water.c
+++ b/src/battle/anim/water.c
@@ -8,7 +8,187 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-static void sub_80D3874(struct Sprite *);
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA318[];
+extern const union AnimCmd *const gSpriteAnimTable_83D9BC8[];
+
+void sub_80D37FC(struct Sprite *sprite);
+void sub_80D3838(struct Sprite *sprite);
+void sub_80D4044(struct Sprite *sprite);
+void sub_80D452C(struct Sprite *sprite);
+void sub_80D4BF0(struct Sprite *sprite);
+void sub_80D4C64(struct Sprite *sprite);
+static void sub_80D3874(struct Sprite *sprite);
+
+const union AnimCmd gSpriteAnim_83D9300[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9308[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9310[] =
+{
+ gSpriteAnim_83D9300,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9314[] =
+{
+ gSpriteAnim_83D9308,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9318 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837E04C,
+ .anims = gSpriteAnimTable_83D9310,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80794A8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9330 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837E10C,
+ .anims = gSpriteAnimTable_83D9314,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83DA318,
+ .callback = sub_80D37FC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9348 =
+{
+ .tileTag = 10141,
+ .paletteTag = 10141,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D9BC8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D3838,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9360 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D4044,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9378 =
+{
+ .tileTag = 10268,
+ .paletteTag = 10268,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D452C,
+};
+
+const union AnimCmd gSpriteAnim_83D9390[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9398[] =
+{
+ ANIMCMD_FRAME(9, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D93A0[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D93A8[] =
+{
+ gSpriteAnim_83D9390,
+ gSpriteAnim_83D9398,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D93B0[] =
+{
+ gSpriteAnim_83D93A0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D93B4[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D93CC[] =
+{
+ AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D93E4[] =
+{
+ AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D93FC[] =
+{
+ gSpriteAffineAnim_83D93B4,
+ gSpriteAffineAnim_83D93CC,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9404[] =
+{
+ gSpriteAffineAnim_83D93E4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9408 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D93A8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D4BF0,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D9420 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837DF84,
+ .anims = gSpriteAnimTable_83D93A8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D93FC,
+ .callback = sub_80D4C64,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9438 =
+{
+ .tileTag = 10155,
+ .paletteTag = 10155,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83D93B0,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D9404,
+ .callback = sub_807A9BC,
+};
void sub_80D37FC(struct Sprite *sprite)
{
diff --git a/src/battle/anim/wave_finger.c b/src/battle/anim/wave_finger.c
deleted file mode 100644
index 2cf68c34c..000000000
--- a/src/battle/anim/wave_finger.c
+++ /dev/null
@@ -1,39 +0,0 @@
-#include "global.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-#include "sound.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-extern void sub_80CEF44(u8 bank, struct Sprite* sprite);
-void sub_80CF088(struct Sprite* sprite);
-
-// wave_finger
-// Used by Metronome.
-
-void sub_80CF040(struct Sprite* sprite)
-{
- u8 bank;
- if (gBattleAnimArgs[0] == 0)
- bank = gAnimBankAttacker;
- else
- bank = gAnimBankTarget;
-
- sub_80CEF44(bank, sprite);
- sprite->data[0] = 0;
- StoreSpriteCallbackInData(sprite, sub_80CF088);
- sprite->callback = sub_80785E4;
-}
-
-void sub_80CF088(struct Sprite* sprite)
-{
- if (++sprite->data[0] > 16)
- {
- StartSpriteAffineAnim(sprite, 1);
- StoreSpriteCallbackInData(sprite, move_anim_8074EE0);
- sprite->callback = sub_80785E4;
- }
-}
diff --git a/src/battle/anim/whip.c b/src/battle/anim/whip.c
index 08b24369d..e6e004932 100644
--- a/src/battle/anim/whip.c
+++ b/src/battle/anim/whip.c
@@ -8,16 +8,101 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CC82C(struct Sprite* sprite);
+void sub_80CC884(struct Sprite* sprite);
+
// whip (does a hitting animation that uses a rotating sprite to invoke the sprite getting hit.)
// Used by Slam and Vine Whip.
-void sub_80CC810(struct Sprite* sprite)
+const union AnimCmd gSpriteAnim_83D69AC[] =
+{
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_FRAME(80, 3),
+ ANIMCMD_FRAME(96, 3),
+ ANIMCMD_FRAME(112, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D69C0[] =
+{
+ ANIMCMD_FRAME(64, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(80, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(96, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(112, 6, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D69D4[] =
+{
+ gSpriteAnim_83D69AC,
+ gSpriteAnim_83D69C0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D69DC =
+{
+ .tileTag = 10056,
+ .paletteTag = 10056,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D69D4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC884,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D69F4 =
+{
+ .tileTag = 10287,
+ .paletteTag = 10287,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D69D4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC884,
+};
+
+const union AnimCmd gSpriteAnim_83D6A0C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6A24[] =
+{
+ gSpriteAnim_83D6A0C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6A28 =
+{
+ .tileTag = 10021,
+ .paletteTag = 10021,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6A24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC82C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6A40 =
+{
+ .tileTag = 10022,
+ .paletteTag = 10022,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6A24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC82C,
+};
+
+static void sub_80CC810(struct Sprite* sprite)
{
if (sprite->animEnded)
DestroyAnimSprite(sprite);
}
-// unused, beta effect for diagonal sprite movement?
void sub_80CC82C(struct Sprite* sprite)
{
if (GetBattlerSide(gAnimBankAttacker) != 0)
diff --git a/src/battle/anim/wisp_fire.c b/src/battle/anim/wisp_fire.c
index 5a51986c7..c96a3a86f 100644
--- a/src/battle/anim/wisp_fire.c
+++ b/src/battle/anim/wisp_fire.c
@@ -9,12 +9,45 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankTarget;
extern u8 gAnimBankAttacker;
-
extern u8 gBankSpriteIds[];
-extern s8 gUnknown_083D9794[16];
-extern s8 gUnknown_083D97A4[16];
-void sub_80D5E4C(u8 taskId);
+void sub_80D5CC0(struct Sprite *sprite);
+static void sub_80D5E4C(u8 taskId);
+
+const union AnimCmd gSpriteAnim_83D9764[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D9778[] =
+{
+ gSpriteAnim_83D9764,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D977C =
+{
+ .tileTag = 10232,
+ .paletteTag = 10232,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D9778,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5CC0,
+};
+
+const s8 gUnknown_083D9794[16] =
+{
+ -1, -1, 0, 1, 1, 0, 0, -1, -1, 1, 1, 0, 0, -1, 0, 1,
+};
+
+const s8 gUnknown_083D97A4[16] =
+{
+ -1, 0, 1, 0, -1, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, 1,
+};
void sub_80D5CC0(struct Sprite *sprite)
{
@@ -66,7 +99,7 @@ void sub_80D5DDC(u8 taskId)
task->func = sub_80D5E4C;
}
-void sub_80D5E4C(u8 taskId)
+static void sub_80D5E4C(u8 taskId)
{
struct Task *task = &gTasks[taskId];
diff --git a/src/battle/anim/wisp_orb.c b/src/battle/anim/wisp_orb.c
index 90b90acb7..32373ca2a 100644
--- a/src/battle/anim/wisp_orb.c
+++ b/src/battle/anim/wisp_orb.c
@@ -11,11 +11,58 @@ extern u8 gAnimBankTarget;
extern u16 gBattleTypeFlags;
extern u8 gUnknown_0202F7D2;
+void sub_80D5B0C(struct Sprite *sprite);
static void sub_80D5C5C(struct Sprite *);
// wisp_orb (animates the wisp orbs)
// Used in Will-O-Wisp
+const union AnimCmd gSpriteAnim_83D9710[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_83D9724[] =
+{
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D972C[] =
+{
+ ANIMCMD_FRAME(20, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D9734[] =
+{
+ ANIMCMD_FRAME(20, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D973C[] =
+{
+ gSpriteAnim_83D9710,
+ gSpriteAnim_83D9724,
+ gSpriteAnim_83D972C,
+ gSpriteAnim_83D9734,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D974C =
+{
+ .tileTag = 10231,
+ .paletteTag = 10231,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D973C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5B0C,
+};
+
void sub_80D5B0C(struct Sprite *sprite)
{
switch (sprite->data[0])
diff --git a/src/main.c b/src/main.c
index 54a443e80..d7ef91df0 100644
--- a/src/main.c
+++ b/src/main.c
@@ -68,7 +68,7 @@ u8 gSoftResetDisabled;
IntrFunc gIntrTable[INTR_COUNT];
bool8 gLinkVSyncDisabled;
u32 IntrMain_Buffer[0x200];
-u8 gPcmDmaCounter;
+s8 gPcmDmaCounter;
EWRAM_DATA u8 gSharedMem[0x20000] = {0};
EWRAM_DATA void (**gFlashTimerIntrFunc)(void) = NULL;
diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c
index 912b9aabd..72972bf06 100644
--- a/src/pokedex_cry_screen.c
+++ b/src/pokedex_cry_screen.c
@@ -1,26 +1,200 @@
#include "global.h"
+#include "m4a.h"
+#include "main.h"
#include "pokedex_cry_screen.h"
#include "palette.h"
#include "sprite.h"
#include "ewram.h"
+#include "trig.h"
+#include "sound.h"
+
+extern struct SoundInfo gSoundInfo;
+extern struct MusicPlayerInfo gMPlay_BGM;
struct Unk201C800 {
- u8 unk_0;
- u8 unk_1;
+ s8 unk_0;
+ s8 unk_1;
u8 unk_2;
- u8 filler_3;
u16 unk_4;
};
+struct PokedexCryScreen_201C000
+{
+ u8 unk0000[0x10];
+ u8 unk0010;
+ u8 unk0011;
+ u8 unk0012;
+ u16 unk0014;
+ u8 unk0016;
+ u16 species;
+ u8 unk001A;
+ u8 unk001B;
+};
+
+void sub_811A0A0(u16 species);
+void sub_811A0C0(void);
+void sub_811A124(void);
+void sub_811A15C(u8);
+void sub_811A1C8(u8, u8);
+void sub_811A324(void);
+void sub_811A350(u8, u16, u8);
+void sub_811A534(struct Sprite *);
+void sub_811A6D8(s8);
+
extern u8 gUnknown_03005E98;
// data/pokedex_cry_screen.o
+
+const u16 CryMeterNeedlePalette[] = INCBIN_U16("graphics/pokedex/cry_meter_needle.gbapal");
+const u8 CryMeterNeedleTiles[] = INCBIN_U8("graphics/pokedex/cry_meter_needle.4bpp");
+
+#if ENGLISH
+const u16 gUnknown_083FAE7C[] = INCBIN_U16("graphics/pokedex/cry_meter_map.bin");
+const u16 gUnknown_083FAF1C[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal");
+const u8 gUnknown_083FAF3C[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz");
+#else
extern const u16 gUnknown_083FAE7C[];
extern const u16 gUnknown_083FAF1C[];
extern const u8 gUnknown_083FAF3C[];
-extern struct SpriteTemplate gSpriteTemplate_83FB774;
-extern const struct SpriteSheet gCryMeterNeedleSpriteSheets[];
-extern const struct SpritePalette gCryMeterNeedleSpritePalettes[];
+#endif // ENGLISH
+
+const u16 gUnknown_083FB274[][72] = {
+ {
+ 0x0000, 0x0004, 0x0008, 0x000C, 0x0010, 0x0014, 0x0018, 0x001C,
+ 0x0400, 0x0404, 0x0408, 0x040C, 0x0410, 0x0414, 0x0418, 0x041C,
+ 0x0800, 0x0804, 0x0808, 0x080C, 0x0810, 0x0814, 0x0818, 0x081C,
+ 0x0C00, 0x0C04, 0x0C08, 0x0C0C, 0x0C10, 0x0C14, 0x0C18, 0x0C1C,
+ 0x1000, 0x1004, 0x1008, 0x100C, 0x1010, 0x1014, 0x1018, 0x101C,
+ 0x1400, 0x1404, 0x1408, 0x140C, 0x1410, 0x1414, 0x1418, 0x141C,
+ 0x1800, 0x1804, 0x1808, 0x180C, 0x1810, 0x1814, 0x1818, 0x181C,
+ 0x1C00, 0x1C04, 0x1C08, 0x1C0C, 0x1C10, 0x1C14, 0x1C18, 0x1C1C,
+ 0x2000, 0x2004, 0x2008, 0x200C, 0x2010, 0x2014, 0x2018, 0x201C
+ }, {
+ 0x0000, 0x0004, 0x0008, 0x000C, 0x0010, 0x0014, 0x0018, 0x001C,
+ 0x0400, 0x0404, 0x0408, 0x040C, 0x0410, 0x0414, 0x0418, 0x041C,
+ 0x0800, 0x0804, 0x0808, 0x080C, 0x0810, 0x0814, 0x0818, 0x081C,
+ 0x0C00, 0x0C04, 0x0C08, 0x0C0C, 0x0C10, 0x0C14, 0x0C18, 0x0C1C,
+ 0x1000, 0x1004, 0x1008, 0x100C, 0x1010, 0x1014, 0x1018, 0x101C,
+ 0x1400, 0x1404, 0x1408, 0x140C, 0x1410, 0x1414, 0x1418, 0x141C,
+ 0x1800, 0x1804, 0x1808, 0x180C, 0x1810, 0x1814, 0x1818, 0x181C,
+ 0x1C00, 0x1C04, 0x1C08, 0x1C0C, 0x1C10, 0x1C14, 0x1C18, 0x1C1C,
+ 0x2000, 0x2004, 0x2008, 0x200C, 0x2010, 0x2014, 0x2018, 0x201C
+ }, {
+ 0x0001, 0x0005, 0x0009, 0x000D, 0x0011, 0x0015, 0x0019, 0x001D,
+ 0x0401, 0x0405, 0x0409, 0x040D, 0x0411, 0x0415, 0x0419, 0x041D,
+ 0x0801, 0x0805, 0x0809, 0x080D, 0x0811, 0x0815, 0x0819, 0x081D,
+ 0x0C01, 0x0C05, 0x0C09, 0x0C0D, 0x0C11, 0x0C15, 0x0C19, 0x0C1D,
+ 0x1001, 0x1005, 0x1009, 0x100D, 0x1011, 0x1015, 0x1019, 0x101D,
+ 0x1401, 0x1405, 0x1409, 0x140D, 0x1411, 0x1415, 0x1419, 0x141D,
+ 0x1801, 0x1805, 0x1809, 0x180D, 0x1811, 0x1815, 0x1819, 0x181D,
+ 0x1C01, 0x1C05, 0x1C09, 0x1C0D, 0x1C11, 0x1C15, 0x1C19, 0x1C1D,
+ 0x2001, 0x2005, 0x2009, 0x200D, 0x2011, 0x2015, 0x2019, 0x201D
+ }, {
+ 0x0001, 0x0005, 0x0009, 0x000D, 0x0011, 0x0015, 0x0019, 0x001D,
+ 0x0401, 0x0405, 0x0409, 0x040D, 0x0411, 0x0415, 0x0419, 0x041D,
+ 0x0801, 0x0805, 0x0809, 0x080D, 0x0811, 0x0815, 0x0819, 0x081D,
+ 0x0C01, 0x0C05, 0x0C09, 0x0C0D, 0x0C11, 0x0C15, 0x0C19, 0x0C1D,
+ 0x1001, 0x1005, 0x1009, 0x100D, 0x1011, 0x1015, 0x1019, 0x101D,
+ 0x1401, 0x1405, 0x1409, 0x140D, 0x1411, 0x1415, 0x1419, 0x141D,
+ 0x1801, 0x1805, 0x1809, 0x180D, 0x1811, 0x1815, 0x1819, 0x181D,
+ 0x1C01, 0x1C05, 0x1C09, 0x1C0D, 0x1C11, 0x1C15, 0x1C19, 0x1C1D,
+ 0x2001, 0x2005, 0x2009, 0x200D, 0x2011, 0x2015, 0x2019, 0x201D
+ }, {
+ 0x0002, 0x0006, 0x000A, 0x000E, 0x0012, 0x0016, 0x001A, 0x001E,
+ 0x0402, 0x0406, 0x040A, 0x040E, 0x0412, 0x0416, 0x041A, 0x041E,
+ 0x0802, 0x0806, 0x080A, 0x080E, 0x0812, 0x0816, 0x081A, 0x081E,
+ 0x0C02, 0x0C06, 0x0C0A, 0x0C0E, 0x0C12, 0x0C16, 0x0C1A, 0x0C1E,
+ 0x1002, 0x1006, 0x100A, 0x100E, 0x1012, 0x1016, 0x101A, 0x101E,
+ 0x1402, 0x1406, 0x140A, 0x140E, 0x1412, 0x1416, 0x141A, 0x141E,
+ 0x1802, 0x1806, 0x180A, 0x180E, 0x1812, 0x1816, 0x181A, 0x181E,
+ 0x1C02, 0x1C06, 0x1C0A, 0x1C0E, 0x1C12, 0x1C16, 0x1C1A, 0x1C1E,
+ 0x2002, 0x2006, 0x200A, 0x200E, 0x2012, 0x2016, 0x201A, 0x201E
+ }, {
+ 0x0002, 0x0006, 0x000A, 0x000E, 0x0012, 0x0016, 0x001A, 0x001E,
+ 0x0402, 0x0406, 0x040A, 0x040E, 0x0412, 0x0416, 0x041A, 0x041E,
+ 0x0802, 0x0806, 0x080A, 0x080E, 0x0812, 0x0816, 0x081A, 0x081E,
+ 0x0C02, 0x0C06, 0x0C0A, 0x0C0E, 0x0C12, 0x0C16, 0x0C1A, 0x0C1E,
+ 0x1002, 0x1006, 0x100A, 0x100E, 0x1012, 0x1016, 0x101A, 0x101E,
+ 0x1402, 0x1406, 0x140A, 0x140E, 0x1412, 0x1416, 0x141A, 0x141E,
+ 0x1802, 0x1806, 0x180A, 0x180E, 0x1812, 0x1816, 0x181A, 0x181E,
+ 0x1C02, 0x1C06, 0x1C0A, 0x1C0E, 0x1C12, 0x1C16, 0x1C1A, 0x1C1E,
+ 0x2002, 0x2006, 0x200A, 0x200E, 0x2012, 0x2016, 0x201A, 0x201E
+ }, {
+ 0x0003, 0x0007, 0x000B, 0x000F, 0x0013, 0x0017, 0x001B, 0x001F,
+ 0x0403, 0x0407, 0x040B, 0x040F, 0x0413, 0x0417, 0x041B, 0x041F,
+ 0x0803, 0x0807, 0x080B, 0x080F, 0x0813, 0x0817, 0x081B, 0x081F,
+ 0x0C03, 0x0C07, 0x0C0B, 0x0C0F, 0x0C13, 0x0C17, 0x0C1B, 0x0C1F,
+ 0x1003, 0x1007, 0x100B, 0x100F, 0x1013, 0x1017, 0x101B, 0x101F,
+ 0x1403, 0x1407, 0x140B, 0x140F, 0x1413, 0x1417, 0x141B, 0x141F,
+ 0x1803, 0x1807, 0x180B, 0x180F, 0x1813, 0x1817, 0x181B, 0x181F,
+ 0x1C03, 0x1C07, 0x1C0B, 0x1C0F, 0x1C13, 0x1C17, 0x1C1B, 0x1C1F,
+ 0x2003, 0x2007, 0x200B, 0x200F, 0x2013, 0x2017, 0x201B, 0x201F
+ }, {
+ 0x0003, 0x0007, 0x000B, 0x000F, 0x0013, 0x0017, 0x001B, 0x001F,
+ 0x0403, 0x0407, 0x040B, 0x040F, 0x0413, 0x0417, 0x041B, 0x041F,
+ 0x0803, 0x0807, 0x080B, 0x080F, 0x0813, 0x0817, 0x081B, 0x081F,
+ 0x0C03, 0x0C07, 0x0C0B, 0x0C0F, 0x0C13, 0x0C17, 0x0C1B, 0x0C1F,
+ 0x1003, 0x1007, 0x100B, 0x100F, 0x1013, 0x1017, 0x101B, 0x101F,
+ 0x1403, 0x1407, 0x140B, 0x140F, 0x1413, 0x1417, 0x141B, 0x141F,
+ 0x1803, 0x1807, 0x180B, 0x180F, 0x1813, 0x1817, 0x181B, 0x181F,
+ 0x1C03, 0x1C07, 0x1C0B, 0x1C0F, 0x1C13, 0x1C17, 0x1C1B, 0x1C1F,
+ 0x2003, 0x2007, 0x200B, 0x200F, 0x2013, 0x2017, 0x201B, 0x201F
+ }
+};
+
+struct PokedexCryScreen_201C000 * const gPokedexCryScreenPtr = (struct PokedexCryScreen_201C000 *)(gSharedMem + 0x1c000);
+
+const u16 gUnknown_083FB6F8[] = INCBIN_U16("graphics/pokedex/83FB6F8.gbapal");
+const u16 gUnknown_083FB718[] = INCBIN_U16("graphics/pokedex/83FB718.4bpp");
+
+const u8 gUnknown_083FB738[] = {0xF0, 0x0F};
+const u8 gUnknown_083FB73A[][16] = {
+ {
+ 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08,
+ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
+ }, {
+ 0xF0, 0xE0, 0xD0, 0xC0, 0xB0, 0xA0, 0x90, 0x80,
+ 0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0
+ }
+};
+
+struct Unk201C800 * const gPokedexCryScreenPtr2 = (struct Unk201C800 *)(gSharedMem + 0x1c800);
+
+union AnimCmd gSpriteAnim_83FB760[] = {
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_END
+};
+
+const union AnimCmd * gSpriteAnimTable_83FB768[] = {
+ gSpriteAnim_83FB760
+};
+
+struct OamData gOamData_83FB76C = {
+ .y = 160,
+ .affineMode = ST_OAM_AFFINE_NORMAL,
+ .size = 3,
+ .priority = 1
+};
+
+struct SpriteTemplate gSpriteTemplate_83FB774 = {
+ 0x2000,
+ 0x2000,
+ &gOamData_83FB76C,
+ gSpriteAnimTable_83FB768,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_811A534
+};
+
+struct SpriteSheet gCryMeterNeedleSpriteSheets[] = {
+ {CryMeterNeedleTiles, 0x800, 0x2000},
+ {}
+};
+
+struct SpritePalette gCryMeterNeedleSpritePalettes[] = {
+ {CryMeterNeedlePalette, 0x2000},
+ {}
+};
#if ENGLISH
#define CRY_METER_MAP_WIDTH 10
@@ -28,6 +202,626 @@ extern const struct SpritePalette gCryMeterNeedleSpritePalettes[];
#define CRY_METER_MAP_WIDTH 32
#endif
+#ifdef NONMATCHING
+u8 sub_8119E3C(struct CryRelatedStruct *cry, u8 arg1)
+{
+ u8 i;
+ u8 j;
+ u16 r6;
+ u16 r7;
+ u8 r9 = FALSE;
+ u32 offset;
+
+ switch (gUnknown_03005E98)
+ {
+ case 0:
+ gPokedexCryScreenPtr->unk0014 = cry->unk0;
+ gPokedexCryScreenPtr->unk0016 = cry->yPos;
+ gPokedexCryScreenPtr->unk001A = 0;
+ gPokedexCryScreenPtr->unk001B = 0;
+ gPokedexCryScreenPtr->unk0010 = 0;
+ gPokedexCryScreenPtr->unk0012 = 28;
+ gPokedexCryScreenPtr->unk0011 = 0;
+ sub_811A350(arg1, -8 * cry->xPos, 0);
+ for (i = 0; i < 7; i++)
+ {
+ for (j = 0; j < 32; j++)
+ {
+ DmaCopy16(3, gUnknown_083FB718, gSharedMem[32 * i + j], 32);
+ }
+ }
+ gUnknown_03005E98++;
+ break;
+ case 1:
+ r7 = cry->unk2 << 11;
+ r6 = (cry->paletteNo << 12) + ((unsigned)(cry->unk0 << 18) >> 23);
+ for (i = 0; i < 7; i++)
+ {
+ for (j = 0; j < 32; j++)
+ {
+ offset = j << 1;
+ offset += i << 6;
+ offset += r7;
+ *((u16 *)(VRAM + offset)) = r6++;
+ }
+ }
+ for (i = 0; i < gPokedexCryScreenPtr->unk0016 * 8; i++)
+ {
+ sub_811A1C8(i, 0);
+ }
+ gUnknown_03005E98++;
+ break;
+ case 2:
+ sub_811A324();
+ LoadPalette(gUnknown_083FB6F8, cry->paletteNo * 16, 32);
+ r9 = TRUE;
+ break;
+ }
+ return r9;
+}
+#else
+NAKED u8 sub_8119E3C(struct CryRelatedStruct *cry, u8 arg1)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r9\n"
+ "\tmov r6, r8\n"
+ "\tpush {r6,r7}\n"
+ "\tadds r5, r0, 0\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r2, r1, 24\n"
+ "\tmovs r0, 0\n"
+ "\tmov r9, r0\n"
+ "\tldr r6, _08119E60 @ =gUnknown_03005E98\n"
+ "\tldrb r0, [r6]\n"
+ "\tcmp r0, 0x1\n"
+ "\tbeq _08119EE0\n"
+ "\tcmp r0, 0x1\n"
+ "\tbgt _08119E64\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08119E6A\n"
+ "\tb _08119F74\n"
+ "\t.align 2, 0\n"
+ "_08119E60: .4byte gUnknown_03005E98\n"
+ "_08119E64:\n"
+ "\tcmp r0, 0x2\n"
+ "\tbeq _08119F60\n"
+ "\tb _08119F74\n"
+ "_08119E6A:\n"
+ "\tldr r4, _08119ECC @ =gSharedMem + 0x1C000\n"
+ "\tldrh r0, [r5]\n"
+ "\tmovs r1, 0\n"
+ "\tstrh r0, [r4, 0x14]\n"
+ "\tldrb r0, [r5, 0x5]\n"
+ "\tstrb r0, [r4, 0x16]\n"
+ "\tstrb r1, [r4, 0x1A]\n"
+ "\tstrb r1, [r4, 0x1B]\n"
+ "\tstrb r1, [r4, 0x10]\n"
+ "\tmovs r0, 0x1C\n"
+ "\tstrb r0, [r4, 0x12]\n"
+ "\tstrb r1, [r4, 0x11]\n"
+ "\tldrb r1, [r5, 0x4]\n"
+ "\tlsls r1, 19\n"
+ "\tnegs r1, r1\n"
+ "\tasrs r1, 16\n"
+ "\tadds r0, r2, 0\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_811A350\n"
+ "\tmovs r0, 0\n"
+ "\tmov r12, r6\n"
+ "\tldr r1, _08119ED0 @ =0x040000d4\n"
+ "\tldr r7, _08119ED4 @ =gUnknown_083FB718\n"
+ "\tldr r2, _08119ED8 @ =0xfffe4000\n"
+ "\tadds r6, r4, r2\n"
+ "\tldr r5, _08119EDC @ =0x80000010\n"
+ "_08119EA0:\n"
+ "\tmovs r3, 0\n"
+ "\tadds r4, r0, 0x1\n"
+ "\tlsls r2, r0, 5\n"
+ "_08119EA6:\n"
+ "\tstr r7, [r1]\n"
+ "\tadds r0, r2, r3\n"
+ "\tlsls r0, 5\n"
+ "\tadds r0, r6\n"
+ "\tstr r0, [r1, 0x4]\n"
+ "\tstr r5, [r1, 0x8]\n"
+ "\tldr r0, [r1, 0x8]\n"
+ "\tadds r0, r3, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r3, r0, 24\n"
+ "\tcmp r3, 0x1F\n"
+ "\tbls _08119EA6\n"
+ "\tlsls r0, r4, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x6\n"
+ "\tbls _08119EA0\n"
+ "\tmov r1, r12\n"
+ "\tb _08119F50\n"
+ "\t.align 2, 0\n"
+ "_08119ECC: .4byte gSharedMem + 0x1C000\n"
+ "_08119ED0: .4byte 0x040000d4\n"
+ "_08119ED4: .4byte gUnknown_083FB718\n"
+ "_08119ED8: .4byte 0xfffe4000\n"
+ "_08119EDC: .4byte 0x80000010\n"
+ "_08119EE0:\n"
+ "\tldrb r0, [r5, 0x2]\n"
+ "\tlsls r0, 27\n"
+ "\tlsrs r7, r0, 16\n"
+ "\tldrb r1, [r5, 0x3]\n"
+ "\tlsls r1, 12\n"
+ "\tldrh r0, [r5]\n"
+ "\tlsls r0, 18\n"
+ "\tlsrs r0, 23\n"
+ "\tadds r1, r0\n"
+ "\tlsls r1, 16\n"
+ "\tlsrs r6, r1, 16\n"
+ "\tmovs r0, 0\n"
+ "\tldr r2, _08119F58 @ =gSharedMem + 0x1C000\n"
+ "\tmov r8, r2\n"
+ "\tmovs r1, 0xC0\n"
+ "\tlsls r1, 19\n"
+ "\tmov r12, r1\n"
+ "_08119F02:\n"
+ "\tmovs r3, 0\n"
+ "\tadds r4, r0, 0x1\n"
+ "\tlsls r5, r0, 6\n"
+ "_08119F08:\n"
+ "\tlsls r1, r3, 1\n"
+ "\tadds r1, r5\n"
+ "\tadds r1, r7\n"
+ "\tadd r1, r12\n"
+ "\tadds r2, r6, 0\n"
+ "\tadds r0, r2, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tstrh r2, [r1]\n"
+ "\tadds r0, r3, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r3, r0, 24\n"
+ "\tcmp r3, 0x1F\n"
+ "\tbls _08119F08\n"
+ "\tlsls r0, r4, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x6\n"
+ "\tbls _08119F02\n"
+ "\tmov r2, r8\n"
+ "\tldrb r0, [r2, 0x16]\n"
+ "\tmovs r4, 0\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08119F4E\n"
+ "\tmov r5, r8\n"
+ "_08119F38:\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0\n"
+ "\tbl sub_811A1C8\n"
+ "\tadds r0, r4, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tldrb r0, [r5, 0x16]\n"
+ "\tlsls r0, 3\n"
+ "\tcmp r4, r0\n"
+ "\tblt _08119F38\n"
+ "_08119F4E:\n"
+ "\tldr r1, _08119F5C @ =gUnknown_03005E98\n"
+ "_08119F50:\n"
+ "\tldrb r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "\tb _08119F74\n"
+ "\t.align 2, 0\n"
+ "_08119F58: .4byte gSharedMem + 0x1C000\n"
+ "_08119F5C: .4byte gUnknown_03005E98\n"
+ "_08119F60:\n"
+ "\tbl sub_811A324\n"
+ "\tldr r0, _08119F84 @ =gUnknown_083FB6F8\n"
+ "\tldrb r1, [r5, 0x3]\n"
+ "\tlsls r1, 4\n"
+ "\tmovs r2, 0x20\n"
+ "\tbl LoadPalette\n"
+ "\tmovs r0, 0x1\n"
+ "\tmov r9, r0\n"
+ "_08119F74:\n"
+ "\tmov r0, r9\n"
+ "\tpop {r3,r4}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1\n"
+ "\t.align 2, 0\n"
+ "_08119F84: .4byte gUnknown_083FB6F8");
+}
+#endif // NONMATCHING
+
+void sub_8119F88(u8 a0)
+{
+ u8 r4;
+ sub_811A324();
+ sub_811A15C(a0);
+ if (gPokedexCryScreenPtr->unk001B)
+ gPokedexCryScreenPtr->unk001B--;
+ if (gPokedexCryScreenPtr->unk001A && !--gPokedexCryScreenPtr->unk001A)
+ {
+ sub_811A0A0(gPokedexCryScreenPtr->species);
+ sub_811A124();
+ return;
+ }
+ if (gPokedexCryScreenPtr->unk0010 == 0)
+ {
+ sub_811A124();
+ return;
+ }
+ if (gPokedexCryScreenPtr->unk0010 == 1)
+ {
+ sub_811A0C0();
+ }
+ else if (gPokedexCryScreenPtr->unk0010 > 8)
+ {
+ if (!IsCryPlaying())
+ {
+ sub_811A124();
+ gPokedexCryScreenPtr->unk0010 = 0;
+ return;
+ }
+ sub_811A0C0();
+ gPokedexCryScreenPtr->unk0010 = 1;
+ }
+ r4 = 2 * (gPokedexCryScreenPtr->unk0010 - 1);
+ sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 2, gPokedexCryScreenPtr->unk0000[r4]);
+ sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 1, gPokedexCryScreenPtr->unk0000[r4 + 1]);
+ gPokedexCryScreenPtr->unk0010++;
+}
+
+void sub_811A050(u16 species)
+{
+ if (gMPlay_BGM.status & MUSICPLAYER_STATUS_PAUSE && !gPokedexCryScreenPtr->unk001A)
+ {
+ if (!gPokedexCryScreenPtr->unk001B)
+ {
+ gPokedexCryScreenPtr->unk001B = 4;
+ if (IsCryPlaying() == TRUE)
+ {
+ StopCry();
+ gPokedexCryScreenPtr->species = species;
+ gPokedexCryScreenPtr->unk001A = 2;
+ }
+ else
+ sub_811A0A0(species);
+ }
+ }
+}
+
+void sub_811A0A0(u16 species)
+{
+ PlayCry2(species, 0, 0x7d, 10);
+ gPokedexCryScreenPtr->unk0010 = 1;
+}
+
+#ifdef NONMATCHING
+void sub_811A0C0(void)
+{
+ const s8 * src;
+ u8 i;
+ if (gPcmDmaCounter < 2)
+ src = gSoundInfo.pcmBuffer;
+ else
+ src = gSoundInfo.pcmBuffer + (gSoundInfo.pcmDmaPeriod + 1 - gPcmDmaCounter) * gSoundInfo.pcmSamplesPerVBlank;
+ src += PCM_DMA_BUF_SIZE;
+ for (i = 0; i < 16; i++)
+ gPokedexCryScreenPtr->unk0000[i] = src[i * 2] * 2;
+}
+#else
+NAKED void sub_811A0C0(void)
+{
+ asm_unified("\tpush {r4,lr}\n"
+ "\tldr r3, _0811A0D0 @ =gPcmDmaCounter\n"
+ "\tmovs r0, 0\n"
+ "\tldrsb r0, [r3, r0]\n"
+ "\tcmp r0, 0x1\n"
+ "\tbgt _0811A0D8\n"
+ "\tldr r0, _0811A0D4 @ =gSoundInfo + 0x350\n"
+ "\tb _0811A0F0\n"
+ "\t.align 2, 0\n"
+ "_0811A0D0: .4byte gPcmDmaCounter\n"
+ "_0811A0D4: .4byte gSoundInfo + 0x350\n"
+ "_0811A0D8:\n"
+ "\tldr r2, _0811A11C @ =gSoundInfo\n"
+ "\tldrb r1, [r2, 0xB]\n"
+ "\tmovs r0, 0\n"
+ "\tldrsb r0, [r3, r0]\n"
+ "\tsubs r0, 0x1\n"
+ "\tsubs r1, r0\n"
+ "\tldr r0, [r2, 0x10]\n"
+ "\tmuls r0, r1\n"
+ "\tmovs r1, 0xD4\n"
+ "\tlsls r1, 2\n"
+ "\tadds r2, r1\n"
+ "\tadds r0, r2\n"
+ "_0811A0F0:\n"
+ "\tmovs r1, 0xC6\n"
+ "\tlsls r1, 3\n"
+ "\tadds r3, r0, r1\n"
+ "\tmovs r2, 0\n"
+ "\tldr r4, _0811A120 @ =gSharedMem + 0x1C000\n"
+ "_0811A0FA:\n"
+ "\tadds r1, r2, r4\n"
+ "\tlsls r0, r2, 1\n"
+ "\tadds r0, r3\n"
+ "\tldrb r0, [r0]\n"
+ "\tlsls r0, 24\n"
+ "\tasrs r0, 24\n"
+ "\tlsls r0, 1\n"
+ "\tstrb r0, [r1]\n"
+ "\tadds r0, r2, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r2, r0, 24\n"
+ "\tcmp r2, 0xF\n"
+ "\tbls _0811A0FA\n"
+ "\tpop {r4}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_0811A11C: .4byte gSoundInfo\n"
+ "_0811A120: .4byte gSharedMem + 0x1C000");
+}
+#endif // NONMATCHING
+
+void sub_811A124(void)
+{
+ sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 2, 0);
+ sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 1, 0);
+}
+
+void sub_811A15C(u8 a0)
+{
+ u8 i;
+ u16 r3;
+ sub_811A350(a0, gPokedexCryScreenPtr->unk0011, 0);
+ gPokedexCryScreenPtr->unk0011 += 2;
+ r3 = (gPokedexCryScreenPtr->unk0011 / 8 + gPokedexCryScreenPtr->unk0016 + 1) % 32;
+ for (i = 0; i < 7; i++)
+ {
+ DmaCopy16(3, gUnknown_083FB718, &gSharedMem[32 * (32 * i + r3)], 32);
+ }
+}
+
+#ifdef NONMATCHING
+void sub_811A1C8(u8 a0, u8 a1)
+{
+ u8 sp0;
+ u8 r7;
+ u8 r8;
+ u16 r1 = (a1 + 127) << 8;
+ u8 i = r1 / 1152.0;
+ if (i > 71 - 16)
+ i = 71 - 16;
+ sp0 = i;
+ r7 = a0 % 2;
+ r8 = a0 / 8;
+ if (i > gPokedexCryScreenPtr->unk0012)
+ {
+ do
+ {
+ gSharedMem[(u16)(r8 * 32 + gUnknown_083FB274[a0 % 8][i])] &= gUnknown_083FB738[r7];
+ gSharedMem[(u16)(r8 * 32 + gUnknown_083FB274[a0 % 8][i])] |= gUnknown_083FB73A[r7][((i / 3) - 1) & 0x0F];
+ i--;
+ } while (i > gPokedexCryScreenPtr->unk0012);
+ }
+ else
+ {
+ do
+ {
+ gSharedMem[(u16)(r8 * 32 + gUnknown_083FB274[a0 % 8][i])] &= gUnknown_083FB738[r7];
+ gSharedMem[(u16)(r8 * 32 + gUnknown_083FB274[a0 % 8][i])] |= gUnknown_083FB73A[r7][((i / 3) - 1) & 0x0F];
+ i++;
+ } while (i < gPokedexCryScreenPtr->unk0012);
+ }
+ gPokedexCryScreenPtr->unk0012 = sp0;
+}
+#else
+NAKED void sub_811A1C8(u8 a0, u8 a1)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0xC\n"
+ "\tlsls r5, r0, 24\n"
+ "\tlsrs r4, r5, 24\n"
+ "\tlsls r1, 24\n"
+ "\tmovs r0, 0xFE\n"
+ "\tlsls r0, 23\n"
+ "\tadds r1, r0\n"
+ "\tlsrs r1, 16\n"
+ "\tadds r0, r1, 0\n"
+ "\tbl __floatsidf\n"
+ "\tldr r3, _0811A280 @ =0x00000000\n"
+ "\tldr r2, _0811A27C @ =0x40920000\n"
+ "\tbl __divdf3\n"
+ "\tbl __fixunsdfsi\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "\tcmp r6, 0x37\n"
+ "\tbls _0811A1FE\n"
+ "\tmovs r6, 0x37\n"
+ "_0811A1FE:\n"
+ "\tstr r6, [sp]\n"
+ "\tmovs r7, 0x1\n"
+ "\tands r7, r4\n"
+ "\tldr r0, _0811A284 @ =gSharedMem + 0x1C000\n"
+ "\tmov r10, r0\n"
+ "\tlsrs r5, 27\n"
+ "\tmov r8, r5\n"
+ "\tldr r0, _0811A288 @ =gUnknown_083FB738\n"
+ "\tmov r1, r10\n"
+ "\tldrb r1, [r1, 0x12]\n"
+ "\tcmp r6, r1\n"
+ "\tbls _0811A298\n"
+ "\tadds r0, r7, r0\n"
+ "\tldrb r0, [r0]\n"
+ "\tmov r9, r0\n"
+ "\tmovs r2, 0x7\n"
+ "\tands r2, r4\n"
+ "_0811A220:\n"
+ "\tlsls r1, r6, 1\n"
+ "\tlsls r0, r2, 3\n"
+ "\tadds r0, r2\n"
+ "\tlsls r0, 4\n"
+ "\tadds r1, r0\n"
+ "\tldr r3, _0811A28C @ =gUnknown_083FB274\n"
+ "\tadds r1, r3\n"
+ "\tmov r3, r8\n"
+ "\tlsls r0, r3, 5\n"
+ "\tldrh r1, [r1]\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tldr r1, _0811A290 @ =gSharedMem\n"
+ "\tadds r5, r0, r1\n"
+ "\tldrb r4, [r5]\n"
+ "\tmov r3, r9\n"
+ "\tands r4, r3\n"
+ "\tstrb r4, [r5]\n"
+ "\tadds r0, r6, 0\n"
+ "\tmovs r1, 0x3\n"
+ "\tstr r2, [sp, 0x8]\n"
+ "\tbl __udivsi3\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tsubs r0, 0x1\n"
+ "\tmovs r1, 0xF\n"
+ "\tands r0, r1\n"
+ "\tlsls r1, r7, 4\n"
+ "\tadds r0, r1\n"
+ "\tldr r1, _0811A294 @ =gUnknown_083FB73A\n"
+ "\tadds r0, r1\n"
+ "\tldrb r0, [r0]\n"
+ "\torrs r4, r0\n"
+ "\tstrb r4, [r5]\n"
+ "\tsubs r0, r6, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "\tldr r2, [sp, 0x8]\n"
+ "\tldr r3, _0811A284 @ =gSharedMem + 0x1C000\n"
+ "\tldrb r3, [r3, 0x12]\n"
+ "\tcmp r6, r3\n"
+ "\tbhi _0811A220\n"
+ "\tb _0811A2FA\n"
+ "\t.align 2, 0\n"
+ "_0811A27C: .4byte 0x40920000\n"
+ "_0811A280: .4byte 0x00000000\n"
+ "_0811A284: .4byte gSharedMem + 0x1C000\n"
+ "_0811A288: .4byte gUnknown_083FB738\n"
+ "_0811A28C: .4byte gUnknown_083FB274\n"
+ "_0811A290: .4byte gSharedMem\n"
+ "_0811A294: .4byte gUnknown_083FB73A\n"
+ "_0811A298:\n"
+ "\tlsls r1, r7, 4\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tadds r0, r7, r0\n"
+ "\tldrb r0, [r0]\n"
+ "\tmov r9, r0\n"
+ "\tmovs r7, 0x7\n"
+ "\tands r7, r4\n"
+ "_0811A2A6:\n"
+ "\tlsls r1, r6, 1\n"
+ "\tlsls r0, r7, 3\n"
+ "\tadds r0, r7\n"
+ "\tlsls r0, 4\n"
+ "\tadds r1, r0\n"
+ "\tldr r2, _0811A314 @ =gUnknown_083FB274\n"
+ "\tadds r1, r2\n"
+ "\tmov r3, r8\n"
+ "\tlsls r0, r3, 5\n"
+ "\tldrh r1, [r1]\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tldr r1, _0811A318 @ =gSharedMem\n"
+ "\tadds r5, r0, r1\n"
+ "\tldrb r4, [r5]\n"
+ "\tmov r2, r9\n"
+ "\tands r4, r2\n"
+ "\tstrb r4, [r5]\n"
+ "\tadds r0, r6, 0\n"
+ "\tmovs r1, 0x3\n"
+ "\tbl __udivsi3\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tsubs r0, 0x1\n"
+ "\tmovs r1, 0xF\n"
+ "\tands r0, r1\n"
+ "\tldr r3, [sp, 0x4]\n"
+ "\tadds r0, r3\n"
+ "\tldr r1, _0811A31C @ =gUnknown_083FB73A\n"
+ "\tadds r0, r1\n"
+ "\tldrb r0, [r0]\n"
+ "\torrs r4, r0\n"
+ "\tstrb r4, [r5]\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "\tldr r2, _0811A320 @ =gSharedMem + 0x1C000\n"
+ "\tldrb r2, [r2, 0x12]\n"
+ "\tcmp r6, r2\n"
+ "\tbcc _0811A2A6\n"
+ "_0811A2FA:\n"
+ "\tmov r3, sp\n"
+ "\tldrb r0, [r3]\n"
+ "\tmov r3, r10\n"
+ "\tstrb r0, [r3, 0x12]\n"
+ "\tadd sp, 0xC\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_0811A314: .4byte gUnknown_083FB274\n"
+ "_0811A318: .4byte gSharedMem\n"
+ "_0811A31C: .4byte gUnknown_083FB73A\n"
+ "_0811A320: .4byte gSharedMem + 0x1C000");
+}
+#endif // NONMATCHING
+
+void sub_811A324(void)
+{
+ DmaCopy16(3, gSharedMem, VRAM + gPokedexCryScreenPtr->unk0014, 0x1c00);
+}
+
+void sub_811A350(u8 a0, u16 a1, u8 a2)
+{
+ switch (a0)
+ {
+ case 0:
+ if (a2)
+ REG_BG0VOFS = a1;
+ else
+ REG_BG0HOFS = a1;
+ break;
+ case 1:
+ if (a2)
+ REG_BG1VOFS = a1;
+ else
+ REG_BG1HOFS = a1;
+ break;
+ case 2:
+ if (a2)
+ REG_BG2VOFS = a1;
+ else
+ REG_BG2HOFS = a1;
+ break;
+ case 3:
+ if (a2)
+ REG_BG3VOFS = a1;
+ else
+ REG_BG3HOFS = a1;
+ break;
+ }
+}
+
u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) {
int returnVal = FALSE;
@@ -68,10 +862,10 @@ u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) {
{
LoadSpriteSheets(gCryMeterNeedleSpriteSheets);
LoadSpritePalettes(gCryMeterNeedleSpritePalettes);
- EWRAM_1C800.unk_4 = CreateSprite(&gSpriteTemplate_83FB774, 40 + cry->xPos * 8, 56 + cry->yPos * 8, 1);
- EWRAM_1C800.unk_0 = 0x20;
- EWRAM_1C800.unk_1 = 0x20;
- EWRAM_1C800.unk_2 = 0;
+ gPokedexCryScreenPtr2->unk_4 = CreateSprite(&gSpriteTemplate_83FB774, 40 + cry->xPos * 8, 56 + cry->yPos * 8, 1);
+ gPokedexCryScreenPtr2->unk_0 = 0x20;
+ gPokedexCryScreenPtr2->unk_1 = 0x20;
+ gPokedexCryScreenPtr2->unk_2 = 0;
returnVal = TRUE;
break;
@@ -80,3 +874,85 @@ u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) {
return returnVal;
}
+
+void DestroyCryMeterNeedleSprite(void)
+{
+ FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gPokedexCryScreenPtr2->unk_4].oam.paletteNum));
+ DestroySprite(gSprites + gPokedexCryScreenPtr2->unk_4);
+}
+
+void sub_811A534(struct Sprite * sprite)
+{
+ u16 i;
+ s8 r3;
+ s16 x;
+ s16 y;
+ struct ObjAffineSrcData sp04;
+ struct OamMatrix sp0c;
+ u8 * r0;
+
+ gSprites[gPokedexCryScreenPtr2->unk_4].oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ gSprites[gPokedexCryScreenPtr2->unk_4].oam.affineParam = 0;
+ switch (gPokedexCryScreenPtr->unk0010)
+ {
+ case 0:
+ gPokedexCryScreenPtr2->unk_1 = 0x20;
+ if (gPokedexCryScreenPtr2->unk_0 > 0)
+ {
+ if (gPokedexCryScreenPtr2->unk_2 != 1)
+ gPokedexCryScreenPtr2->unk_2--;
+ }
+ else
+ gPokedexCryScreenPtr2->unk_2 = 5;
+ break;
+ case 2:
+ r3 = 0;
+ for (i = 0; i < 16; i++)
+ {
+ if (r3 < gPokedexCryScreenPtr->unk0000[i])
+ r3 = gPokedexCryScreenPtr->unk0000[i];
+ }
+ sub_811A6D8(r3 * 0xd0 / 0x100);
+ break;
+ case 6:
+ r0 = &gPokedexCryScreenPtr->unk0000[10];
+ sub_811A6D8(*r0 * 0xd0 / 0x100);
+ break;
+ }
+ if (gPokedexCryScreenPtr2->unk_0 == gPokedexCryScreenPtr2->unk_1)
+ ;
+ else if (gPokedexCryScreenPtr2->unk_0 < gPokedexCryScreenPtr2->unk_1)
+ {
+ if ((gPokedexCryScreenPtr2->unk_0 += gPokedexCryScreenPtr2->unk_2) > gPokedexCryScreenPtr2->unk_1)
+ {
+ gPokedexCryScreenPtr2->unk_0 = gPokedexCryScreenPtr2->unk_1;
+ gPokedexCryScreenPtr2->unk_1 = 0;
+ }
+ }
+ else
+ {
+ if ((gPokedexCryScreenPtr2->unk_0 -= gPokedexCryScreenPtr2->unk_2) < gPokedexCryScreenPtr2->unk_1)
+ {
+ gPokedexCryScreenPtr2->unk_0 = gPokedexCryScreenPtr2->unk_1;
+ gPokedexCryScreenPtr2->unk_1 = 0;
+ }
+ }
+ sp04.xScale = 0x100;
+ sp04.yScale = 0x100;
+ sp04.rotation = gPokedexCryScreenPtr2->unk_0 * 256;
+ ObjAffineSet(&sp04, &sp0c, 1, 2);
+ SetOamMatrix(0, sp0c.a, sp0c.b, sp0c.c, sp0c.d);
+ x = gSineTable[((gPokedexCryScreenPtr2->unk_0 + 0x7F) & 0xFF)];
+ y = gSineTable[((gPokedexCryScreenPtr2->unk_0 + 0x7F) & 0xFF) + 0x40];
+ sprite->pos2.x = x * 24 / 256;
+ sprite->pos2.y = y * 24 / 256;
+}
+
+void sub_811A6D8(s8 a0)
+{
+ u16 r2 = (0x20 - a0) & 0xff;
+ if (r2 > 0x20 && r2 < 0xe0)
+ r2 = 0xe0;
+ gPokedexCryScreenPtr2->unk_1 = r2;
+ gPokedexCryScreenPtr2->unk_2 = 5;
+}
diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c
index cccedc89c..a10fd45b8 100644
--- a/src/rom_8077ABC.c
+++ b/src/rom_8077ABC.c
@@ -56,7 +56,6 @@ struct Struct_2017810
#define BG2CNT (*(vBgCnt *)REG_ADDR_BG2CNT)
#define BG3CNT (*(vBgCnt *)REG_ADDR_BG3CNT)
-extern struct OamData gOamData_837DF9C[];
extern const union AnimCmd *const gDummySpriteAnimTable[];
extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[];
@@ -129,7 +128,7 @@ const struct SpriteTemplate gSpriteTemplate_837F5B0[] =
{
.tileTag = 55125,
.paletteTag = 55125,
- .oam = gOamData_837DF9C,
+ .oam = &gOamData_837DF9C,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -138,7 +137,7 @@ const struct SpriteTemplate gSpriteTemplate_837F5B0[] =
{
.tileTag = 55126,
.paletteTag = 55126,
- .oam = gOamData_837DF9C,
+ .oam = &gOamData_837DF9C,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,