summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/battle_anim_80CA710.s996
-rw-r--r--include/rom_8077ABC.h1
-rw-r--r--include/sprite.h9
-rw-r--r--ld_script.txt64
-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/blow_kiss.c14
-rw-r--r--src/battle/anim/breath.c37
-rw-r--r--src/battle/anim/bubble.c37
-rw-r--r--src/battle/anim/bullet.c27
-rw-r--r--src/battle/anim/cyclone.c25
-rw-r--r--src/battle/anim/devil.c31
-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/espeed.c58
-rw-r--r--src/battle/anim/finger.c256
-rw-r--r--src/battle/anim/flying_hearts.c14
-rw-r--r--src/battle/anim/glow.c55
-rw-r--r--src/battle/anim/grip.c36
-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_bell.c132
-rw-r--r--src/battle/anim/heart_1.c13
-rw-r--r--src/battle/anim/hidden_power_orbit.c120
-rw-r--r--src/battle/anim/kiss_fountain.c13
-rw-r--r--src/battle/anim/money.c48
-rw-r--r--src/battle/anim/musical.c393
-rw-r--r--src/battle/anim/noise.c12
-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_fast.c63
-rw-r--r--src/battle/anim/orbit_scatter.c31
-rw-r--r--src/battle/anim/perceive.c30
-rw-r--r--src/battle/anim/rain.c37
-rw-r--r--src/battle/anim/ring.c292
-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/struggle.c36
-rw-r--r--src/battle/anim/swipe.c37
-rw-r--r--src/battle/anim/sword.c27
-rw-r--r--src/battle/anim/taunt_finger.c56
-rw-r--r--src/battle/anim/thought.c58
-rw-r--r--src/battle/anim/thrashing.c18
-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/wave_finger.c39
63 files changed, 2539 insertions, 2019 deletions
diff --git a/data/battle_anim_80CA710.s b/data/battle_anim_80CA710.s
index 5972e967c..26f9aaaf1 100644
--- a/data/battle_anim_80CA710.s
+++ b/data/battle_anim_80CA710.s
@@ -4,1002 +4,6 @@
.section .rodata
.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
diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h
index 7215e7fb3..f1e8cbde4 100644
--- a/include/rom_8077ABC.h
+++ b/include/rom_8077ABC.h
@@ -106,5 +106,6 @@ 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);
#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 7295d8063..57512c53d 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -215,14 +215,9 @@ SECTIONS {
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);
@@ -231,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);
@@ -247,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);
@@ -260,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);
@@ -638,6 +628,52 @@ SECTIONS {
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);
data/battle_anim_80CA710.o(.rodata);
src/battle/anim/battle_intro.o(.rodata);
src/bike.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/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/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/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/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/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/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/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/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/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/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/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_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/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/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/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/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/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_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/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/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/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/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/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/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/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/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/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;
- }
-}