summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/battle_anim_80CA710.s721
-rw-r--r--include/battle_anim.h73
-rw-r--r--ld_script.txt20
-rw-r--r--src/battle/anim/copy_orb.c31
-rw-r--r--src/battle/anim/cutter.c144
-rw-r--r--src/battle/anim/flying_path.c74
-rw-r--r--src/battle/anim/flying_petals.c100
-rw-r--r--src/battle/anim/heal.c27
-rw-r--r--src/battle/anim/homing.c14
-rw-r--r--src/battle/anim/hop.c58
-rw-r--r--src/battle/anim/hop_2.c16
-rw-r--r--src/battle/anim/leaf.c240
-rw-r--r--src/battle/anim/orbit.c83
-rw-r--r--src/battle/anim/orbs.c181
-rw-r--r--src/battle/anim/osmose.c27
-rw-r--r--src/battle/anim/powder.c52
-rw-r--r--src/battle/anim/roots.c69
-rw-r--r--src/battle/anim/seed.c31
-rw-r--r--src/battle/anim/shimmer.c17
-rw-r--r--src/battle/anim/switch.c70
-rw-r--r--src/battle/anim/tendrils.c59
-rw-r--r--src/battle/anim/unused_1.c64
-rw-r--r--src/battle/anim/whip.c89
-rw-r--r--src/rom_8077ABC.c5
24 files changed, 1355 insertions, 910 deletions
diff --git a/data/battle_anim_80CA710.s b/data/battle_anim_80CA710.s
index b5ca446cf..3cc5d05a9 100644
--- a/data/battle_anim_80CA710.s
+++ b/data/battle_anim_80CA710.s
@@ -4,727 +4,6 @@
.section .rodata
.align 2
-gSpriteAnim_83D61FC:: @ 83D61FC
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 2, 5
- obj_image_anim_frame 4, 5
- obj_image_anim_frame 6, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_frame 10, 5
- obj_image_anim_frame 12, 5
- obj_image_anim_frame 14, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D6220:: @ 83D6220
- .4byte gSpriteAnim_83D61FC
-
- .align 2
-gSleepPowderParticleSpriteTemplate:: @ 83D6224
- spr_template 10067, 10067, gOamData_837DF64, gSpriteAnimTable_83D6220, NULL, gDummySpriteAffineAnimTable, AnimMovePowderParticle
-
- .align 2
-gStunSporeParticleSpriteTemplate:: @ 83D623C
- spr_template 10068, 10068, gOamData_837DF64, gSpriteAnimTable_83D6220, NULL, gDummySpriteAffineAnimTable, AnimMovePowderParticle
-
- .align 2
-gPoisonPowderParticleSpriteTemplate:: @ 83D6254
- spr_template 10065, 10065, gOamData_837DF64, gSpriteAnimTable_83D6220, NULL, gDummySpriteAffineAnimTable, AnimMovePowderParticle
-
- .align 2
-gSpriteAnim_83D626C:: @ 83D626C
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6274:: @ 83D6274
- obj_image_anim_frame 1, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D627C:: @ 83D627C
- obj_image_anim_frame 2, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6284:: @ 83D6284
- obj_image_anim_frame 3, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D628C:: @ 83D628C
- obj_image_anim_frame 4, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6294:: @ 83D6294
- obj_image_anim_frame 5, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D629C:: @ 83D629C
- obj_image_anim_frame 6, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D62A4:: @ 83D62A4
- obj_image_anim_frame 7, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D62AC:: @ 83D62AC
- obj_image_anim_frame 8, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D62B4:: @ 83D62B4
- .4byte gSpriteAnim_83D626C
- .4byte gSpriteAnim_83D6274
- .4byte gSpriteAnim_83D627C
- .4byte gSpriteAnim_83D6284
- .4byte gSpriteAnim_83D628C
- .4byte gSpriteAnim_83D6294
- .4byte gSpriteAnim_83D629C
-
- .align 2
-gSpriteAnimTable_83D62D0:: @ 83D62D0
- .4byte gSpriteAnim_83D62A4
-
- .align 2
-gSpriteAnimTable_83D62D4:: @ 83D62D4
- .4byte gSpriteAnim_83D62AC
-
- .align 2
-gSpriteAffineAnim_83D62D8:: @ 83D62D8
- obj_rot_scal_anim_frame 0xFFFB, 0xFFFB, 0, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D62E8:: @ 83D62E8
- .4byte gSpriteAffineAnim_83D62D8
-
- .align 2
-gBattleAnimSpriteTemplate_83D62EC:: @ 83D62EC
- spr_template 10147, 10147, gOamData_837E0AC, gSpriteAnimTable_83D62D4, NULL, gSpriteAffineAnimTable_83D62E8, sub_80CA7B0
-
- .align 2
-gBattleAnimSpriteTemplate_83D6304:: @ 83D6304
- spr_template 10147, 10147, gOamData_837DF24, gSpriteAnimTable_83D62B4, NULL, gDummySpriteAffineAnimTable, sub_80CA800
-
- .align 2
-gSpriteTemplate_83D631C:: @ 83D631C
- spr_template 10147, 10147, gOamData_837DF24, gSpriteAnimTable_83D62D0, NULL, gDummySpriteAffineAnimTable, sub_80CA858
-
- .align 2
-gSpriteAffineAnim_83D6334:: @ 83D6334
- obj_rot_scal_anim_frame 0x140, 0x140, 0, 0
- obj_rot_scal_anim_frame 0xFFF2, 0xFFF2, 0, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83D634C:: @ 83D634C
- .4byte gSpriteAffineAnim_83D6334
-
- .align 2
-gBattleAnimSpriteTemplate_83D6350:: @ 83D6350
- spr_template 10235, 10235, gOamData_837DFE4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D634C, sub_80CA7B0
-
- .align 2
-gSpriteAffineAnim_83D6368:: @ 83D6368
- obj_rot_scal_anim_frame 0xFFFB, 0xFFFB, 0, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D6378:: @ 83D6378
- .4byte gSpriteAffineAnim_83D6368
-
- .align 2
-gBattleAnimSpriteTemplate_83D637C:: @ 83D637C
- spr_template 10147, 10147, gOamData_837E0AC, gSpriteAnimTable_83D62D4, NULL, gSpriteAffineAnimTable_83D6378, sub_80CA9A8
-
- .align 2
-gBattleAnimSpriteTemplate_83D6394:: @ 83D6394
- spr_template 10147, 10147, gOamData_837DF24, gSpriteAnimTable_83D62B4, NULL, gDummySpriteAffineAnimTable, sub_80CAA14
-
- .align 2
-gSpriteAnim_83D63AC:: @ 83D63AC
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D63B4:: @ 83D63B4
- obj_image_anim_frame 4, 7
- obj_image_anim_frame 8, 7
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D63C0:: @ 83D63C0
- .4byte gSpriteAnim_83D63AC
- .4byte gSpriteAnim_83D63B4
-
- .align 2
-gLeechSeedSpriteTemplate:: @ 83D63C8
- spr_template 10006, 10006, gOamData_837DF2C, gSpriteAnimTable_83D63C0, NULL, gDummySpriteAffineAnimTable, AnimLeechSeed
-
- .align 2
-gSpriteAnim_83D63E0:: @ 83D63E0
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D63E8:: @ 83D63E8
- obj_image_anim_frame 4, 7
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D63F0:: @ 83D63F0
- .4byte gSpriteAnim_83D63E0
- .4byte gSpriteAnim_83D63E8
-
- .align 2
-gBattleAnimSpriteTemplate_83D63F8:: @ 83D63F8
- spr_template 10158, 10158, gOamData_837DF2C, gSpriteAnimTable_83D63F0, NULL, gDummySpriteAffineAnimTable, sub_80CABF8
-
- .align 2
-gSpriteAnim_83D6410:: @ 83D6410
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6418:: @ 83D6418
- obj_image_anim_frame 4, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6420:: @ 83D6420
- .4byte gSpriteAnim_83D6410
-
- .align 2
-gSpriteAnimTable_83D6424:: @ 83D6424
- .4byte gSpriteAnim_83D6418
-
- .align 2
-gBattleAnimSpriteTemplate_83D6428:: @ 83D6428
- spr_template 10159, 10159, gOamData_837DF2C, gSpriteAnimTable_83D6420, NULL, gDummySpriteAffineAnimTable, sub_80CAD54
-
- .align 2
-gBattleAnimSpriteTemplate_83D6440:: @ 83D6440
- spr_template 10159, 10159, gOamData_837DF24, gSpriteAnimTable_83D6424, NULL, gDummySpriteAffineAnimTable, sub_80CAE20
-
- .align 2
-gSpriteAnim_83D6458:: @ 83D6458
- obj_image_anim_frame 0, 5
- obj_image_anim_frame 4, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_frame 12, 5
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 20, 5
- obj_image_anim_frame 16, 5
- obj_image_anim_frame 12, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_frame 4, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_83D6484:: @ 83D6484
- obj_image_anim_frame 24, 5
- obj_image_anim_frame 28, 5
- obj_image_anim_frame 32, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6494:: @ 83D6494
- .4byte gSpriteAnim_83D6458
- .4byte gSpriteAnim_83D6484
-
- .align 2
-gBattleAnimSpriteTemplate_83D649C:: @ 83D649C
- spr_template 10063, 10063, gOamData_837DF2C, gSpriteAnimTable_83D6494, NULL, gDummySpriteAffineAnimTable, sub_80CAED8
-
- .align 2
-gBattleAnimSpriteTemplate_83D64B4:: @ 83D64B4
- spr_template 10063, 10063, gOamData_837DF2C, gSpriteAnimTable_83D6494, NULL, gDummySpriteAffineAnimTable, AnimMoveTwisterParticle
-
- .align 2
-gSpriteAnim_83D64CC:: @ 83D64CC
- obj_image_anim_frame 0, 3
- obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_V_FLIP
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D64E0:: @ 83D64E0
- .4byte gSpriteAnim_83D64CC
-
- .align 2
-gBattleAnimSpriteTemplate_83D64E4:: @ 83D64E4
- spr_template 10160, 10160, gOamData_837DF54, gSpriteAnimTable_83D64E0, NULL, gDummySpriteAffineAnimTable, AnimTranslateLinearSingleSineWave
-
- .align 2
-gSpriteAffineAnim_83D64FC:: @ 83D64FC
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D650C:: @ 83D650C
- .4byte gSpriteAffineAnim_83D64FC
-
- .align 2
-gSwiftStarSpriteTemplate:: @ 83D6510
- spr_template 10174, 10174, gOamData_837DF94, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D650C, AnimTranslateLinearSingleSineWave
-
- .align 2
-gSpriteAnim_83D6528:: @ 83D6528
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 32, 4
- obj_image_anim_frame 64, 4
- obj_image_anim_frame 96, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D653C:: @ 83D653C
- obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 64, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 96, 4, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6550:: @ 83D6550
- .4byte gSpriteAnim_83D6528
- .4byte gSpriteAnim_83D653C
-
- .align 2
-gSpriteAffineAnim_83D6558:: @ 83D6558
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_frame 0xFFF5, 0x0, 0, 6
- obj_rot_scal_anim_frame 0xB, 0x0, 0, 6
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6578:: @ 83D6578
- obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0
- obj_rot_scal_anim_frame 0xB, 0x0, 0, 6
- obj_rot_scal_anim_frame 0xFFF5, 0x0, 0, 6
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D6598:: @ 83D6598
- .4byte gSpriteAffineAnim_83D6558
- .4byte gSpriteAffineAnim_83D6578
-
- .align 2
-gBattleAnimSpriteTemplate_83D65A0:: @ 83D65A0
- spr_template 10186, 10186, gOamData_837DFBC, gSpriteAnimTable_83D6550, NULL, gSpriteAffineAnimTable_83D6598, sub_80CB25C
-
- .align 2
-gSpriteAffineAnim_83D65B8:: @ 83D65B8
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 0
- obj_rot_scal_anim_frame 0x30, 0x30, 0, 14
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D65D0:: @ 83D65D0
- obj_rot_scal_anim_frame 0xFFF0, 0xFFF0, 0, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83D65E0:: @ 83D65E0
- .4byte gSpriteAffineAnim_83D65B8
- .4byte gSpriteAffineAnim_83D65D0
-
- .align 2
-gBattleAnimSpriteTemplate_83D65E8:: @ 83D65E8
- spr_template 10147, 10147, gOamData_837DFEC, gSpriteAnimTable_83D62D4, NULL, gSpriteAffineAnimTable_83D65E0, sub_80CB4CC
-
- .align 2
-gSpriteAnim_83D6600:: @ 83D6600
- obj_image_anim_frame 0, 7
- obj_image_anim_frame 16, 7
- obj_image_anim_frame 32, 7
- obj_image_anim_frame 48, 7
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6614:: @ 83D6614
- obj_image_anim_frame 0, 7, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 7, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 7, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 48, 7, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6628:: @ 83D6628
- obj_image_anim_frame 0, 7
- obj_image_anim_frame 16, 7
- obj_image_anim_frame 32, 7
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6638:: @ 83D6638
- obj_image_anim_frame 0, 7, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 16, 7, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 32, 7, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6648:: @ 83D6648
- .4byte gSpriteAnim_83D6600
- .4byte gSpriteAnim_83D6614
- .4byte gSpriteAnim_83D6628
- .4byte gSpriteAnim_83D6638
-
- .align 2
-gBattleAnimSpriteTemplate_83D6658:: @ 83D6658
- spr_template 10223, 10223, gOamData_837DF34, gSpriteAnimTable_83D6648, NULL, gDummySpriteAffineAnimTable, sub_80CB59C
-
- .align 2
-gBattleAnimSpriteTemplate_83D6670:: @ 83D6670
- spr_template 10223, 10223, gOamData_837DF34, gSpriteAnimTable_83D6648, NULL, gDummySpriteAffineAnimTable, sub_80CB620
-
- .align 2
-gSpriteAnim_83D6688:: @ 83D6688
- obj_image_anim_frame 3, 3
- obj_image_anim_frame 0, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83D6694:: @ 83D6694
- .4byte gSpriteAnim_83D6688
-
- .align 2
-gBattleAnimSpriteTemplate_83D6698:: @ 83D6698
- spr_template 10147, 10147, gOamData_837DF24, gSpriteAnimTable_83D6694, NULL, gDummySpriteAffineAnimTable, sub_80CB768
-
- .align 2
-gSpriteAnim_83D66B0:: @ 83D66B0
- obj_image_anim_frame 0, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D66B8:: @ 83D66B8
- .4byte gSpriteAnim_83D66B0
-
- .align 2
-gSpriteAffineAnim_83D66BC:: @ 83D66BC
- obj_rot_scal_anim_frame 0x0, 0x0, -4, 10
- obj_rot_scal_anim_frame 0x0, 0x0, 4, 20
- obj_rot_scal_anim_frame 0x0, 0x0, -4, 10
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D66DC:: @ 83D66DC
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 2
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 4
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 4
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 4
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 4
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 2
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D6714:: @ 83D6714
- .4byte gSpriteAffineAnim_83D66BC
- .4byte gSpriteAffineAnim_83D66DC
-
- .align 2
-gBattleAnimSpriteTemplate_83D671C:: @ 83D671C
- spr_template 10224, 10224, gOamData_837DF94, gSpriteAnimTable_83D66B8, NULL, gSpriteAffineAnimTable_83D6714, sub_80CB94C
-
- .align 2
-gBattleAnimSpriteTemplate_83D6734:: @ 83D6734
- spr_template 10224, 10224, gOamData_837DF94, gSpriteAnimTable_83D66B8, NULL, gSpriteAffineAnimTable_83D6714, sub_80CBA28
-
- .align 2
-gSpriteAnim_83D674C:: @ 83D674C
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 4, 4
- obj_image_anim_frame 8, 4
- obj_image_anim_frame 12, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6760:: @ 83D6760
- .4byte gSpriteAnim_83D674C
-
- .align 2
-gBattleAnimSpriteTemplate_83D6764:: @ 83D6764
- spr_template 10195, 10195, gOamData_837DF2C, gSpriteAnimTable_83D6760, NULL, gDummySpriteAffineAnimTable, sub_80CBAA4
-
- .align 2
-gBattleAnimSpriteTemplate_83D677C:: @ 83D677C
- spr_template 10224, 10224, gOamData_837DF94, gSpriteAnimTable_83D66B8, NULL, gSpriteAffineAnimTable_83D6714, sub_80CBAE8
-
- .align 2
-gSpriteAffineAnim_83D6794:: @ 83D6794
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 3
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D67A4:: @ 83D67A4
- obj_rot_scal_anim_frame 0x0, 0xFFF6, 0, 3
- obj_rot_scal_anim_frame 0x0, 0xFFFA, 0, 3
- obj_rot_scal_anim_frame 0x0, 0xFFFE, 0, 3
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 3
- obj_rot_scal_anim_frame 0x0, 0x2, 0, 3
- obj_rot_scal_anim_frame 0x0, 0x6, 0, 3
- obj_rot_scal_anim_frame 0x0, 0xA, 0, 3
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D67E4:: @ 83D67E4
- .4byte gSpriteAffineAnim_83D6794
- .4byte gSpriteAffineAnim_83D67A4
- .4byte gSpriteAffineAnim_83D66BC
- .4byte gSpriteAffineAnim_83D66DC
-
- .align 2
-gBattleAnimSpriteTemplate_83D67F4:: @ 83D67F4
- spr_template 10224, 10224, gOamData_837DF94, gSpriteAnimTable_83D66B8, NULL, gSpriteAffineAnimTable_83D67E4, sub_80CBBF0
-
-gUnknown_083D680C:: @ 83D680C
- .byte 5, 24, 1
- .byte 0, 4, 0
- .byte 8, 16, -1
- .byte 0, 2, 0
- .byte 8, 16, 1
- .byte 0, 2, 0
- .byte 8, 16, 1
- .byte 0, 2, 0
- .byte 8, 16, 1
- .byte 0, 16, 0
- .byte 0, 0, 127
-
- .align 2
-gSpriteAnim_83D6830:: @ 83D6830
- obj_image_anim_frame 28, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6838:: @ 83D6838
- obj_image_anim_frame 32, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6840:: @ 83D6840
- obj_image_anim_frame 20, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6848:: @ 83D6848
- obj_image_anim_frame 28, 1, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6850:: @ 83D6850
- obj_image_anim_frame 16, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6858:: @ 83D6858
- obj_image_anim_frame 16, 1, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D6860:: @ 83D6860
- obj_image_anim_frame 28, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6868:: @ 83D6868
- .4byte gSpriteAnim_83D6830
- .4byte gSpriteAnim_83D6838
- .4byte gSpriteAnim_83D6840
- .4byte gSpriteAnim_83D6848
- .4byte gSpriteAnim_83D6850
- .4byte gSpriteAnim_83D6858
- .4byte gSpriteAnim_83D6860
-
- .align 2
-gSpriteTemplate_83D6884:: @ 83D6884
- spr_template 10063, 10063, gOamData_837DF2C, gSpriteAnimTable_83D6868, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gSpriteAffineAnim_83D689C:: @ 83D689C
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, 4, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83D68B4:: @ 83D68B4
- .4byte gSpriteAffineAnim_83D689C
-
- .align 2
-gBattleAnimSpriteTemplate_83D68B8:: @ 83D68B8
- spr_template 10159, 10159, gOamData_837DF24, gSpriteAnimTable_83D6424, NULL, gDummySpriteAffineAnimTable, sub_80CC474
-
- .align 2
-gBattleAnimSpriteTemplate_83D68D0:: @ 83D68D0
- spr_template 10159, 10159, gOamData_837DF8C, gSpriteAnimTable_83D6420, NULL, gSpriteAffineAnimTable_83D68B4, sub_80CC474
-
- .align 2
-gSpriteAffineAnim_83D68E8:: @ 83D68E8
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, -10, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnim_83D6900:: @ 83D6900
- obj_rot_scal_anim_frame 0xC0, 0xC0, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, -12, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnim_83D6918:: @ 83D6918
- obj_rot_scal_anim_frame 0x8F, 0x8F, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, -15, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_83D6930:: @ 83D6930
- .4byte gSpriteAffineAnim_83D68E8
-
- .align 2
-gSpriteAffineAnimTable_83D6934:: @ 83D6934
- .4byte gSpriteAffineAnim_83D6900
-
- .align 2
-gSpriteAffineAnimTable_83D6938:: @ 83D6938
- .4byte gSpriteAffineAnim_83D6918
-
- .align 2
-gBattleAnimSpriteTemplate_83D693C:: @ 83D693C
- spr_template 10271, 10271, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D6930, sub_80CC474
-
- .align 2
-gBattleAnimSpriteTemplate_83D6954:: @ 83D6954
- spr_template 10271, 10271, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D6934, sub_80CC474
-
- .align 2
-gBattleAnimSpriteTemplate_83D696C:: @ 83D696C
- spr_template 10271, 10271, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D6938, sub_80CC474
-
- .align 1
-gUnknown_083D6984:: @ 83D6984
- .2byte 0x1F
- .2byte 0x27F
- .2byte 0x3FF
- .2byte 0x3E0
- .2byte 0x7DC5
- .2byte 0x7D56
- .2byte 0x7EB6
-
- .align 2
-gBattleAnimSpriteTemplate_83D6994:: @ 83D6994
- spr_template 10266, 10266, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CC6CC
-
- .align 2
-gSpriteAnim_83D69AC:: @ 83D69AC
- obj_image_anim_frame 64, 3
- obj_image_anim_frame 80, 3
- obj_image_anim_frame 96, 3
- obj_image_anim_frame 112, 6
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83D69C0:: @ 83D69C0
- obj_image_anim_frame 64, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 80, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 96, 3, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_frame 112, 6, OBJ_IMAGE_ANIM_H_FLIP
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D69D4:: @ 83D69D4
- .4byte gSpriteAnim_83D69AC
- .4byte gSpriteAnim_83D69C0
-
- .align 2
-gBattleAnimSpriteTemplate_83D69DC:: @ 83D69DC
- spr_template 10056, 10056, gOamData_837DF34, gSpriteAnimTable_83D69D4, NULL, gDummySpriteAffineAnimTable, sub_80CC884
-
- .align 2
-gBattleAnimSpriteTemplate_83D69F4:: @ 83D69F4
- spr_template 10287, 10287, gOamData_837DF34, gSpriteAnimTable_83D69D4, NULL, gDummySpriteAffineAnimTable, sub_80CC884
-
- .align 2
-gSpriteAnim_83D6A0C:: @ 83D6A0C
- obj_image_anim_frame 0, 4
- obj_image_anim_frame 16, 4
- obj_image_anim_frame 32, 4
- obj_image_anim_frame 48, 4
- obj_image_anim_frame 64, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83D6A24:: @ 83D6A24
- .4byte gSpriteAnim_83D6A0C
-
- .align 2
-gSpriteTemplate_83D6A28:: @ 83D6A28
- spr_template 10021, 10021, gOamData_837DF34, gSpriteAnimTable_83D6A24, NULL, gDummySpriteAffineAnimTable, sub_80CC82C
-
- .align 2
-gSpriteTemplate_83D6A40:: @ 83D6A40
- spr_template 10022, 10022, gOamData_837DF34, gSpriteAnimTable_83D6A24, NULL, gDummySpriteAffineAnimTable, sub_80CC82C
-
- .align 2
-gSpriteAffineAnim_83D6A58:: @ 83D6A58
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6A68:: @ 83D6A68
- obj_rot_scal_anim_frame 0x100, 0x100, 32, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6A78:: @ 83D6A78
- obj_rot_scal_anim_frame 0x100, 0x100, 64, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6A88:: @ 83D6A88
- obj_rot_scal_anim_frame 0x100, 0x100, 96, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6A98:: @ 83D6A98
- obj_rot_scal_anim_frame 0x100, 0x100, -128, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6AA8:: @ 83D6AA8
- obj_rot_scal_anim_frame 0x100, 0x100, -96, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6AB8:: @ 83D6AB8
- obj_rot_scal_anim_frame 0x100, 0x100, -64, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83D6AC8:: @ 83D6AC8
- obj_rot_scal_anim_frame 0x100, 0x100, -32, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83D6AD8:: @ 83D6AD8
- .4byte gSpriteAffineAnim_83D6A58
- .4byte gSpriteAffineAnim_83D6A68
- .4byte gSpriteAffineAnim_83D6A78
- .4byte gSpriteAffineAnim_83D6A88
- .4byte gSpriteAffineAnim_83D6A98
- .4byte gSpriteAffineAnim_83D6AA8
- .4byte gSpriteAffineAnim_83D6AB8
- .4byte gSpriteAffineAnim_83D6AC8
-
- .align 2
-gSpriteTemplate_83D6AF8:: @ 83D6AF8
- spr_template 10143, 10143, gOamData_837DF94, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D6AD8, sub_80CC8C8
-
- .align 2
gSpriteAnim_83D6B10:: @ 83D6B10
obj_image_anim_frame 0, 5
obj_image_anim_frame 16, 5
diff --git a/include/battle_anim.h b/include/battle_anim.h
index ce9bb13de..b5b85625e 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -40,6 +40,79 @@ extern u8 gAnimFriendship;
extern u8 gAnimMoveTurn;
extern struct DisableStruct *gAnimDisableStructPtr;
+extern const struct OamData gOamData_837DF24;
+extern const struct OamData gOamData_837DF2C;
+extern const struct OamData gOamData_837DF34;
+extern const struct OamData gOamData_837DF3C;
+extern const struct OamData gOamData_837DF44;
+extern const struct OamData gOamData_837DF4C;
+extern const struct OamData gOamData_837DF54;
+extern const struct OamData gOamData_837DF5C;
+extern const struct OamData gOamData_837DF64;
+extern const struct OamData gOamData_837DF6C;
+extern const struct OamData gOamData_837DF74;
+extern const struct OamData gOamData_837DF7C;
+extern const struct OamData gOamData_837DF84;
+extern const struct OamData gOamData_837DF8C;
+extern const struct OamData gOamData_837DF94;
+extern const struct OamData gOamData_837DF9C;
+extern const struct OamData gOamData_837DFA4;
+extern const struct OamData gOamData_837DFAC;
+extern const struct OamData gOamData_837DFB4;
+extern const struct OamData gOamData_837DFBC;
+extern const struct OamData gOamData_837DFC4;
+extern const struct OamData gOamData_837DFCC;
+extern const struct OamData gOamData_837DFD4;
+extern const struct OamData gOamData_837DFDC;
+extern const struct OamData gOamData_837DFE4;
+extern const struct OamData gOamData_837DFEC;
+extern const struct OamData gOamData_837DFF4;
+extern const struct OamData gOamData_837DFFC;
+extern const struct OamData gOamData_837D004;
+extern const struct OamData gOamData_837D00C;
+extern const struct OamData gOamData_837E014;
+extern const struct OamData gOamData_837E01C;
+extern const struct OamData gOamData_837E024;
+extern const struct OamData gOamData_837E02C;
+extern const struct OamData gOamData_837E034;
+extern const struct OamData gOamData_837E03C;
+extern const struct OamData gOamData_837E044;
+extern const struct OamData gOamData_837E04C;
+extern const struct OamData gOamData_837E054;
+extern const struct OamData gOamData_837E05C;
+extern const struct OamData gOamData_837E064;
+extern const struct OamData gOamData_837E06C;
+extern const struct OamData gOamData_837E074;
+extern const struct OamData gOamData_837E07C;
+extern const struct OamData gOamData_837E084;
+extern const struct OamData gOamData_837E08C;
+extern const struct OamData gOamData_837E094;
+extern const struct OamData gOamData_837E09C;
+extern const struct OamData gOamData_837E0A4;
+extern const struct OamData gOamData_837E0AC;
+extern const struct OamData gOamData_837E0B4;
+extern const struct OamData gOamData_837E0BC;
+extern const struct OamData gOamData_837E0C4;
+extern const struct OamData gOamData_837E0CC;
+extern const struct OamData gOamData_837E0D4;
+extern const struct OamData gOamData_837E0DC;
+extern const struct OamData gOamData_837E0E4;
+extern const struct OamData gOamData_837E0EC;
+extern const struct OamData gOamData_837E0F4;
+extern const struct OamData gOamData_837E0FC;
+extern const struct OamData gOamData_837E104;
+extern const struct OamData gOamData_837E10C;
+extern const struct OamData gOamData_837E114;
+extern const struct OamData gOamData_837E11C;
+extern const struct OamData gOamData_837E124;
+extern const struct OamData gOamData_837E12C;
+extern const struct OamData gOamData_837E134;
+extern const struct OamData gOamData_837E13C;
+extern const struct OamData gOamData_837E144;
+extern const struct OamData gOamData_837E14C;
+extern const struct OamData gOamData_837E154;
+extern const struct OamData gOamData_837E15C;
+
void DoMoveAnim(u16 move);
void LaunchBattleAnimation(const u8 *const moveAnims[], u16 b, u8 c);
bool8 IsAnimBankSpriteVisible(u8 a);
diff --git a/ld_script.txt b/ld_script.txt
index a0c9a8bb7..86829f0b5 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -181,7 +181,6 @@ SECTIONS {
src/battle/anim/seed.o(.text);
src/battle/anim/orbit.o(.text);
src/battle/anim/leaf.o(.text);
- src/battle/anim/cutter.o(.text);
src/battle/anim/tendrils.o(.text);
src/battle/anim/silhouette.o(.text);
src/battle/anim/copy_orb.o(.text);
@@ -606,6 +605,25 @@ SECTIONS {
src/field_special_scene.o(.rodata);
src/rotating_gate.o(.rodata);
src/item_use.o(.rodata);
+ src/battle/anim/powder.o(.rodata);
+ src/battle/anim/orbs.o(.rodata);
+ src/battle/anim/seed.o(.rodata);
+ src/battle/anim/orbit.o(.rodata);
+ src/battle/anim/leaf.o(.rodata);
+ src/battle/anim/tendrils.o(.rodata);
+ src/battle/anim/copy_orb.o(.rodata);
+ src/battle/anim/roots.o(.rodata);
+ src/battle/anim/osmose.o(.rodata);
+ src/battle/anim/hop.o(.rodata);
+ src/battle/anim/heal.o(.rodata);
+ src/battle/anim/hop_2.o(.rodata);
+ src/battle/anim/switch.o(.rodata);
+ src/battle/anim/flying_path.o(.rodata);
+ src/battle/anim/flying_petals.o(.rodata);
+ src/battle/anim/shimmer.o(.rodata);
+ src/battle/anim/homing.o(.rodata);
+ src/battle/anim/whip.o(.rodata);
+ src/battle/anim/unused_1.o(.rodata);
data/battle_anim_80CA710.o(.rodata);
src/battle/anim/battle_intro.o(.rodata);
src/bike.o(.rodata);
diff --git a/src/battle/anim/copy_orb.c b/src/battle/anim/copy_orb.c
index ac60d2c2b..d554a7e26 100644
--- a/src/battle/anim/copy_orb.c
+++ b/src/battle/anim/copy_orb.c
@@ -7,9 +7,40 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern const union AnimCmd *const gSpriteAnimTable_83D62D4[];
+
+void sub_80CB4CC(struct Sprite* sprite);
+
// copy_orb
// Used in Mimic.
+const union AffineAnimCmd gSpriteAffineAnim_83D65B8[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 0),
+ AFFINEANIMCMD_FRAME(48, 48, 0, 14),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D65D0[] = {
+ AFFINEANIMCMD_FRAME(-16, -16, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D65E0[] = {
+ gSpriteAffineAnim_83D65B8,
+ gSpriteAffineAnim_83D65D0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D65E8 =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DFEC,
+ .anims = gSpriteAnimTable_83D62D4,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D65E0,
+ .callback = sub_80CB4CC,
+};
+
void sub_80CB4CC(struct Sprite* sprite)
{
switch (sprite->data[0])
diff --git a/src/battle/anim/cutter.c b/src/battle/anim/cutter.c
deleted file mode 100644
index bc7478053..000000000
--- a/src/battle/anim/cutter.c
+++ /dev/null
@@ -1,144 +0,0 @@
-#include "global.h"
-#include "battle.h"
-#include "rom_8077ABC.h"
-#include "trig.h"
-#include "battle_anim.h"
-
-extern s16 gBattleAnimArgs[];
-extern u8 gAnimBankAttacker;
-extern u8 gAnimBankTarget;
-
-static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite);
-static void AnimMoveTwisterParticleStep(struct Sprite* sprite);
-
-// Animates a sprite that moves linearly from one location to another, with a
-// single-cycle sine wave added to the y position along the way.
-// Used by Razor Leaf and Magical Leaf.
-// arg 0: initial x offset
-// arg 1: initial y offset
-// arg 2: target x offset
-// arg 3: target y offset
-// arg 4: translation duration
-// arg 5: wave amplitude
-// arg 6: target between double battle opponents (boolean)
-void AnimTranslateLinearSingleSineWave(struct Sprite* sprite)
-{
- InitAnimSpritePos(sprite, 1);
- if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
- {
- gBattleAnimArgs[2] = -gBattleAnimArgs[2];
- }
-
- sprite->data[0] = gBattleAnimArgs[4];
- if (!gBattleAnimArgs[6])
- {
- sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2];
- sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3];
- }
- else
- {
- SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]);
- sprite->data[2] += gBattleAnimArgs[2];
- sprite->data[4] += gBattleAnimArgs[3];
- }
-
- sprite->data[5] = gBattleAnimArgs[5];
- InitAnimSpriteTranslationOverDuration(sprite);
- if (GetBattlerSide(gAnimBankAttacker) == GetBattlerSide(gAnimBankTarget))
- {
- sprite->data[0] = 1;
- }
- else
- {
- sprite->data[0] = 0;
- }
-
- sprite->callback = AnimTranslateLinearSingleSineWaveStep;
-}
-
-static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite)
-{
- bool8 destroy = FALSE;
- s16 a = sprite->data[0];
- s16 b = sprite->data[7];
- s16 r0;
-
- sprite->data[0] = 1;
- TranslateAnimSpriteLinearAndSine(sprite);
- r0 = sprite->data[7];
- sprite->data[0] = a;
- if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0)
- sprite->oam.affineParam++;
-
- if (sprite->oam.affineParam != 0 && sprite->data[0] != 0)
- {
- sprite->invisible ^= 1;
- sprite->oam.affineParam++;
- if (sprite->oam.affineParam == 0x1E)
- destroy = TRUE;
- }
-
- if (sprite->pos1.x + sprite->pos2.x > 256
- || sprite->pos1.x + sprite->pos2.x < -16
- || sprite->pos1.y + sprite->pos2.y > 160
- || sprite->pos1.y + sprite->pos2.y < -16)
- destroy = TRUE;
-
- if (destroy)
- DestroyAnimSprite(sprite);
-}
-
-// Animates particles in the Twister move animation.
-// arg 0: duration
-// arg 1: total y delta (the particles rise upward)
-// arg 2: wave period (higher means faster wave)
-// arg 3: wave amplitude
-// arg 4: speedup frame (particles move faster at the end of the animation)
-void AnimMoveTwisterParticle(struct Sprite* sprite)
-{
- if (!IsContest() && IsDoubleBattle() == TRUE)
- {
- SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y);
- }
-
- sprite->pos1.y += 32;
- sprite->data[0] = gBattleAnimArgs[0];
- sprite->data[1] = gBattleAnimArgs[1];
- sprite->data[2] = gBattleAnimArgs[2];
- sprite->data[3] = gBattleAnimArgs[3];
- sprite->data[4] = gBattleAnimArgs[4];
- sprite->callback = AnimMoveTwisterParticleStep;
-}
-
-static void AnimMoveTwisterParticleStep(struct Sprite* sprite)
-{
- if (sprite->data[1] == 0xFF)
- {
- sprite->pos1.y -= 2;
- }
- else if (sprite->data[1] > 0)
- {
- sprite->pos1.y -= 2;
- sprite->data[1] -= 2;
- }
-
- sprite->data[5] += sprite->data[2];
- if (sprite->data[0] < sprite->data[4])
- sprite->data[5] += sprite->data[2];
-
- sprite->data[5] &= 0xFF;
- sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]);
- sprite->pos2.y = Sin(sprite->data[5], 5);
- if (sprite->data[5] <= 0x7F)
- {
- sprite->oam.priority = sub_8079ED4(gAnimBankTarget) - 1;
- }
- else
- {
- sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1;
- }
-
- sprite->data[0]--;
- if (!sprite->data[0])
- DestroyAnimSprite(sprite);
-}
diff --git a/src/battle/anim/flying_path.c b/src/battle/anim/flying_path.c
index 5e9de8cb1..b190e9e8c 100644
--- a/src/battle/anim/flying_path.c
+++ b/src/battle/anim/flying_path.c
@@ -8,8 +8,6 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern struct SpriteTemplate gSpriteTemplate_83D6884;
-
static void sub_80CBF5C(u8 taskId);
static s16 sub_80CC338(struct Sprite* sprite);
static void sub_80CC358(struct Task* task, u8 taskId);
@@ -18,6 +16,70 @@ static void sub_80CC408(struct Sprite* sprite);
// flying_path (guides a sprite along a specific path.)
// Used by Leaf Blade.
+const union AnimCmd gSpriteAnim_83D6830[] =
+{
+ ANIMCMD_FRAME(28, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6838[] =
+{
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6840[] =
+{
+ ANIMCMD_FRAME(20, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6848[] =
+{
+ ANIMCMD_FRAME(28, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6850[] =
+{
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6858[] =
+{
+ ANIMCMD_FRAME(16, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6860[] =
+{
+ ANIMCMD_FRAME(28, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6868[] =
+{
+ gSpriteAnim_83D6830,
+ gSpriteAnim_83D6838,
+ gSpriteAnim_83D6840,
+ gSpriteAnim_83D6848,
+ gSpriteAnim_83D6850,
+ gSpriteAnim_83D6858,
+ gSpriteAnim_83D6860,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6884 =
+{
+ .tileTag = 10063,
+ .paletteTag = 10063,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6868,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
void sub_80CBDF4(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -44,7 +106,7 @@ void sub_80CBDF4(u8 taskId)
task->func = sub_80CBF5C;
}
-void sub_80CBF5C(u8 taskId)
+static void sub_80CBF5C(u8 taskId)
{
struct Task* task = &gTasks[taskId];
struct Sprite* sprite = &gSprites[task->data[2]];
@@ -244,7 +306,7 @@ void sub_80CBF5C(u8 taskId)
}
}
-s16 sub_80CC338(struct Sprite* sprite)
+static s16 sub_80CC338(struct Sprite* sprite)
{
s16 var = 8;
if (sprite->data[4] < sprite->pos1.y)
@@ -253,7 +315,7 @@ s16 sub_80CC338(struct Sprite* sprite)
return var;
}
-void sub_80CC358(struct Task* task, u8 taskId)
+static void sub_80CC358(struct Task* task, u8 taskId)
{
task->data[14]++;
if (task->data[14] > 0)
@@ -279,7 +341,7 @@ void sub_80CC358(struct Task* task, u8 taskId)
}
}
-void sub_80CC408(struct Sprite* sprite)
+static void sub_80CC408(struct Sprite* sprite)
{
sprite->data[0]++;
if (sprite->data[0] > 1)
diff --git a/src/battle/anim/flying_petals.c b/src/battle/anim/flying_petals.c
index c7a596b56..4696cbc6c 100644
--- a/src/battle/anim/flying_petals.c
+++ b/src/battle/anim/flying_petals.c
@@ -7,12 +7,110 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern const union AnimCmd *const gSpriteAnimTable_83D6424[];
+extern const union AnimCmd *const gSpriteAnimTable_83D6420[];
+void sub_80CC474(struct Sprite* sprite);
static void sub_80CC580(struct Sprite* sprite);
// flying_petals (petals fly across the screen.)
// Used by Aromatherapy.
+const union AffineAnimCmd gSpriteAffineAnim_83D689C[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D68B4[] = {
+ gSpriteAffineAnim_83D689C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D68B8 =
+{
+ .tileTag = 10159,
+ .paletteTag = 10159,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D6424,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC474,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D68D0 =
+{
+ .tileTag = 10159,
+ .paletteTag = 10159,
+ .oam = &gOamData_837DF8C,
+ .anims = gSpriteAnimTable_83D6420,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D68B4,
+ .callback = sub_80CC474,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D68E8[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -10, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6900[] = {
+ AFFINEANIMCMD_FRAME(192, 192, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -12, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6918[] = {
+ AFFINEANIMCMD_FRAME(143, 143, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -15, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6930[] = {
+ gSpriteAffineAnim_83D68E8,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6934[] = {
+ gSpriteAffineAnim_83D6900,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6938[] = {
+ gSpriteAffineAnim_83D6918,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D693C =
+{
+ .tileTag = 10271,
+ .paletteTag = 10271,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6930,
+ .callback = sub_80CC474,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6954 =
+{
+ .tileTag = 10271,
+ .paletteTag = 10271,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6934,
+ .callback = sub_80CC474,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D696C =
+{
+ .tileTag = 10271,
+ .paletteTag = 10271,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6938,
+ .callback = sub_80CC474,
+};
+
void sub_80CC474(struct Sprite* sprite)
{
u8 bank;
@@ -61,7 +159,7 @@ void sub_80CC474(struct Sprite* sprite)
sprite->callback = sub_80CC580;
}
-void sub_80CC580(struct Sprite* sprite)
+static void sub_80CC580(struct Sprite* sprite)
{
int a = sprite->data[7];
sprite->data[7]++;
diff --git a/src/battle/anim/heal.c b/src/battle/anim/heal.c
index a8c14ea1c..c2bce0e77 100644
--- a/src/battle/anim/heal.c
+++ b/src/battle/anim/heal.c
@@ -7,9 +7,36 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CBAA4(struct Sprite* sprite);
+
// heal (healing sparkles on a Pokemon)
// Used in Present, if the move heals instead of damages.
+const union AnimCmd gSpriteAnim_83D674C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(12, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6760[] =
+{
+ gSpriteAnim_83D674C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6764 =
+{
+ .tileTag = 10195,
+ .paletteTag = 10195,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6760,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CBAA4,
+};
+
void sub_80CBAA4(struct Sprite* sprite)
{
if (sprite->data[0] == 0)
diff --git a/src/battle/anim/homing.c b/src/battle/anim/homing.c
index b24fcf4b1..5cd2a3ddb 100644
--- a/src/battle/anim/homing.c
+++ b/src/battle/anim/homing.c
@@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CC6CC(struct Sprite* sprite);
static void sub_80CC7D4(struct Sprite* sprite);
// homing (the spinning effect of sprites going inward in a static rotation.)
// Used by Needle Arm.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6994 =
+{
+ .tileTag = 10266,
+ .paletteTag = 10266,
+ .oam = &gOamData_837DF8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC6CC,
+};
+
void sub_80CC6CC(struct Sprite* sprite)
{
u8 a;
@@ -69,7 +81,7 @@ void sub_80CC6CC(struct Sprite* sprite)
}
}
-void sub_80CC7D4(struct Sprite* sprite)
+static void sub_80CC7D4(struct Sprite* sprite)
{
if (sprite->data[0])
{
diff --git a/src/battle/anim/hop.c b/src/battle/anim/hop.c
index 7d1b2fd01..3aba79511 100644
--- a/src/battle/anim/hop.c
+++ b/src/battle/anim/hop.c
@@ -7,9 +7,67 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CB94C(struct Sprite* sprite);
+void sub_80CBA28(struct Sprite* sprite);
+
// hop (where a sprite "hops" across the screen)
// Used by Present, Trick, and the item knock off effect.
+const union AnimCmd gSpriteAnim_83D66B0[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D66B8[] =
+{
+ gSpriteAnim_83D66B0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D66BC[] = {
+ AFFINEANIMCMD_FRAME(0, 0, -4, 10),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 20),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D66DC[] = {
+ AFFINEANIMCMD_FRAME(0, 0, -1, 2),
+ AFFINEANIMCMD_FRAME(0, 0, 1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, -1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, -1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 1, 2),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6714[] = {
+ gSpriteAffineAnim_83D66BC,
+ gSpriteAffineAnim_83D66DC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D671C =
+{
+ .tileTag = 10224,
+ .paletteTag = 10224,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D66B8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6714,
+ .callback = sub_80CB94C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6734 =
+{
+ .tileTag = 10224,
+ .paletteTag = 10224,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D66B8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6714,
+ .callback = sub_80CBA28,
+};
+
void sub_80CB7EC(struct Sprite* sprite, s16 c)
{
s32 a = (sprite->pos1.x * 256) | sprite->pos1.y;
diff --git a/src/battle/anim/hop_2.c b/src/battle/anim/hop_2.c
index 861f428da..ab239f3c4 100644
--- a/src/battle/anim/hop_2.c
+++ b/src/battle/anim/hop_2.c
@@ -11,12 +11,26 @@ extern u8 gAnimBankTarget;
extern void sub_80CB7EC(struct Sprite* sprite, s16 c);
extern bool8 sub_80CB814(struct Sprite* sprite);
extern void sub_80CB8B8(struct Sprite* sprite);
+extern const union AnimCmd *const gSpriteAnimTable_83D66B8[];
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6714[];
+void sub_80CBAE8(struct Sprite* sprite);
static void sub_80CBB60(struct Sprite* sprite);
// hop_2
// Used in item steal.
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D677C =
+{
+ .tileTag = 10224,
+ .paletteTag = 10224,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D66B8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6714,
+ .callback = sub_80CBAE8,
+};
+
void sub_80CBAE8(struct Sprite* sprite)
{
s16 p1;
@@ -43,7 +57,7 @@ void sub_80CBAE8(struct Sprite* sprite)
sprite->callback = sub_80CBB60;
}
-void sub_80CBB60(struct Sprite* sprite)
+static void sub_80CBB60(struct Sprite* sprite)
{
int zero;
sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]);
diff --git a/src/battle/anim/leaf.c b/src/battle/anim/leaf.c
index ca2af257d..d31e4dbd6 100644
--- a/src/battle/anim/leaf.c
+++ b/src/battle/anim/leaf.c
@@ -1,18 +1,120 @@
#include "global.h"
+#include "battle.h"
+#include "battle_anim.h"
#include "rom_8077ABC.h"
#include "trig.h"
-#include "battle_anim.h"
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CAED8(struct Sprite* sprite);
+void AnimMoveTwisterParticle(struct Sprite* sprite);
+void AnimTranslateLinearSingleSineWave(struct Sprite* sprite);
static void sub_80CAF20(struct Sprite* sprite);
static void sub_80CAF6C(struct Sprite* sprite);
+static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite);
+static void AnimMoveTwisterParticleStep(struct Sprite* sprite);
// leaf
// Used by Razor Leaf and Twister.
+const union AnimCmd gSpriteAnim_83D6458[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(20, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gSpriteAnim_83D6484[] =
+{
+ ANIMCMD_FRAME(24, 5),
+ ANIMCMD_FRAME(28, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6494[] =
+{
+ gSpriteAnim_83D6458,
+ gSpriteAnim_83D6484,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D649C =
+{
+ .tileTag = 10063,
+ .paletteTag = 10063,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6494,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CAED8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D64B4 =
+{
+ .tileTag = 10063,
+ .paletteTag = 10063,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6494,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveTwisterParticle,
+};
+
+const union AnimCmd gSpriteAnim_83D64CC[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D64E0[] =
+{
+ gSpriteAnim_83D64CC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D64E4 =
+{
+ .tileTag = 10160,
+ .paletteTag = 10160,
+ .oam = &gOamData_837DF54,
+ .anims = gSpriteAnimTable_83D64E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimTranslateLinearSingleSineWave,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D64FC[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D650C[] = {
+ gSpriteAffineAnim_83D64FC,
+};
+
+const struct SpriteTemplate gSwiftStarSpriteTemplate =
+{
+ .tileTag = 10174,
+ .paletteTag = 10174,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D650C,
+ .callback = AnimTranslateLinearSingleSineWave,
+};
+
void sub_80CAED8(struct Sprite* sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
@@ -23,7 +125,7 @@ void sub_80CAED8(struct Sprite* sprite)
sprite->callback = sub_80CAF20;
}
-void sub_80CAF20(struct Sprite* sprite)
+static void sub_80CAF20(struct Sprite* sprite)
{
if (!sprite->data[2])
{
@@ -49,7 +151,7 @@ void sub_80CAF20(struct Sprite* sprite)
}
}
-void sub_80CAF6C(struct Sprite* sprite)
+static void sub_80CAF6C(struct Sprite* sprite)
{
if (GetBattlerSide(gAnimBankAttacker))
{
@@ -72,3 +174,135 @@ void sub_80CAF6C(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
}
+
+// Animates a sprite that moves linearly from one location to another, with a
+// single-cycle sine wave added to the y position along the way.
+// Used by Razor Leaf and Magical Leaf.
+// arg 0: initial x offset
+// arg 1: initial y offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: translation duration
+// arg 5: wave amplitude
+// arg 6: target between double battle opponents (boolean)
+void AnimTranslateLinearSingleSineWave(struct Sprite* sprite)
+{
+ InitAnimSpritePos(sprite, 1);
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ {
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ }
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ if (!gBattleAnimArgs[6])
+ {
+ sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3];
+ }
+ else
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]);
+ sprite->data[2] += gBattleAnimArgs[2];
+ sprite->data[4] += gBattleAnimArgs[3];
+ }
+
+ sprite->data[5] = gBattleAnimArgs[5];
+ InitAnimSpriteTranslationOverDuration(sprite);
+ if (GetBattlerSide(gAnimBankAttacker) == GetBattlerSide(gAnimBankTarget))
+ {
+ sprite->data[0] = 1;
+ }
+ else
+ {
+ sprite->data[0] = 0;
+ }
+
+ sprite->callback = AnimTranslateLinearSingleSineWaveStep;
+}
+
+static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite)
+{
+ bool8 destroy = FALSE;
+ s16 a = sprite->data[0];
+ s16 b = sprite->data[7];
+ s16 r0;
+
+ sprite->data[0] = 1;
+ TranslateAnimSpriteLinearAndSine(sprite);
+ r0 = sprite->data[7];
+ sprite->data[0] = a;
+ if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0)
+ sprite->oam.affineParam++;
+
+ if (sprite->oam.affineParam != 0 && sprite->data[0] != 0)
+ {
+ sprite->invisible ^= 1;
+ sprite->oam.affineParam++;
+ if (sprite->oam.affineParam == 0x1E)
+ destroy = TRUE;
+ }
+
+ if (sprite->pos1.x + sprite->pos2.x > 256
+ || sprite->pos1.x + sprite->pos2.x < -16
+ || sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ destroy = TRUE;
+
+ if (destroy)
+ DestroyAnimSprite(sprite);
+}
+
+// Animates particles in the Twister move animation.
+// arg 0: duration
+// arg 1: total y delta (the particles rise upward)
+// arg 2: wave period (higher means faster wave)
+// arg 3: wave amplitude
+// arg 4: speedup frame (particles move faster at the end of the animation)
+void AnimMoveTwisterParticle(struct Sprite* sprite)
+{
+ if (!IsContest() && IsDoubleBattle() == TRUE)
+ {
+ SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y);
+ }
+
+ sprite->pos1.y += 32;
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[2] = gBattleAnimArgs[2];
+ sprite->data[3] = gBattleAnimArgs[3];
+ sprite->data[4] = gBattleAnimArgs[4];
+ sprite->callback = AnimMoveTwisterParticleStep;
+}
+
+static void AnimMoveTwisterParticleStep(struct Sprite* sprite)
+{
+ if (sprite->data[1] == 0xFF)
+ {
+ sprite->pos1.y -= 2;
+ }
+ else if (sprite->data[1] > 0)
+ {
+ sprite->pos1.y -= 2;
+ sprite->data[1] -= 2;
+ }
+
+ sprite->data[5] += sprite->data[2];
+ if (sprite->data[0] < sprite->data[4])
+ sprite->data[5] += sprite->data[2];
+
+ sprite->data[5] &= 0xFF;
+ sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]);
+ sprite->pos2.y = Sin(sprite->data[5], 5);
+ if (sprite->data[5] <= 0x7F)
+ {
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget) - 1;
+ }
+ else
+ {
+ sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1;
+ }
+
+ sprite->data[0]--;
+ if (!sprite->data[0])
+ DestroyAnimSprite(sprite);
+}
diff --git a/src/battle/anim/orbit.c b/src/battle/anim/orbit.c
index b4a641cc2..e76e0923e 100644
--- a/src/battle/anim/orbit.c
+++ b/src/battle/anim/orbit.c
@@ -7,12 +7,85 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CABF8(struct Sprite* sprite);
+void sub_80CAD54(struct Sprite* sprite);
+void sub_80CAE20(struct Sprite* sprite);
static void sub_80CAC44(struct Sprite* sprite);
static void sub_80CADA8(struct Sprite* sprite);
static void sub_80CAE74(struct Sprite* sprite);
-// orbit (The effect of a sprite rotating around another one in a pseudo 3D effect.)
-// Used by Spore, Cotton Spore, and Petal Dance.
+const union AnimCmd gSpriteAnim_83D63E0[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D63E8[] =
+{
+ ANIMCMD_FRAME(4, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D63F0[] =
+{
+ gSpriteAnim_83D63E0,
+ gSpriteAnim_83D63E8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D63F8 =
+{
+ .tileTag = 10158,
+ .paletteTag = 10158,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D63F0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CABF8,
+};
+
+const union AnimCmd gSpriteAnim_83D6410[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6418[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6420[] =
+{
+ gSpriteAnim_83D6410,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6424[] =
+{
+ gSpriteAnim_83D6418,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6428 =
+{
+ .tileTag = 10159,
+ .paletteTag = 10159,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D6420,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CAD54,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6440 =
+{
+ .tileTag = 10159,
+ .paletteTag = 10159,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D6424,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CAE20,
+};
void sub_80CABF8(struct Sprite* sprite)
{
@@ -29,7 +102,7 @@ void sub_80CABF8(struct Sprite* sprite)
sub_80CAC44(sprite);
}
-void sub_80CAC44(struct Sprite* sprite)
+static void sub_80CAC44(struct Sprite* sprite)
{
u8 var1;
@@ -91,7 +164,7 @@ void sub_80CAD54(struct Sprite* sprite)
sub_80CADA8(sprite);
}
-void sub_80CADA8(struct Sprite* sprite)
+static void sub_80CADA8(struct Sprite* sprite)
{
if (!TranslateAnimSpriteByDeltas(sprite))
{
@@ -128,7 +201,7 @@ void sub_80CAE20(struct Sprite* sprite)
sub_80CAE74(sprite);
}
-void sub_80CAE74(struct Sprite* sprite)
+static void sub_80CAE74(struct Sprite* sprite)
{
if (!TranslateAnimSpriteByDeltas(sprite))
{
diff --git a/src/battle/anim/orbs.c b/src/battle/anim/orbs.c
index 53c16d8d7..af6568bd8 100644
--- a/src/battle/anim/orbs.c
+++ b/src/battle/anim/orbs.c
@@ -8,11 +8,184 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CA7B0(struct Sprite* sprite);
+void sub_80CA800(struct Sprite* sprite);
+void sub_80CA858(struct Sprite* sprite);
+void sub_80CA9A8(struct Sprite* sprite);
+void sub_80CAA14(struct Sprite* sprite);
static void sub_80CA8B4(struct Sprite* sprite);
static void sub_80CA9F8(struct Sprite* sprite);
static void sub_80CAACC(struct Sprite* sprite);
-extern struct SpriteTemplate gSpriteTemplate_83D631C;
+const union AnimCmd gSpriteAnim_83D626C[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6274[] =
+{
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D627C[] =
+{
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6284[] =
+{
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D628C[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6294[] =
+{
+ ANIMCMD_FRAME(5, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D629C[] =
+{
+ ANIMCMD_FRAME(6, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D62A4[] =
+{
+ ANIMCMD_FRAME(7, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D62AC[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D62B4[] =
+{
+ gSpriteAnim_83D626C,
+ gSpriteAnim_83D6274,
+ gSpriteAnim_83D627C,
+ gSpriteAnim_83D6284,
+ gSpriteAnim_83D628C,
+ gSpriteAnim_83D6294,
+ gSpriteAnim_83D629C,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D62D0[] =
+{
+ gSpriteAnim_83D62A4,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D62D4[] =
+{
+ gSpriteAnim_83D62AC,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D62D8[] = {
+ AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D62E8[] = {
+ gSpriteAffineAnim_83D62D8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D62EC =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837E0AC,
+ .anims = gSpriteAnimTable_83D62D4,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D62E8,
+ .callback = sub_80CA7B0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6304 =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D62B4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CA800,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D631C =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D62D0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CA858,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6334[] = {
+ AFFINEANIMCMD_FRAME(320, 320, 0, 0),
+ AFFINEANIMCMD_FRAME(-14, -14, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D634C[] = {
+ gSpriteAffineAnim_83D6334,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6350 =
+{
+ .tileTag = 10235,
+ .paletteTag = 10235,
+ .oam = &gOamData_837DFE4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D634C,
+ .callback = sub_80CA7B0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6368[] = {
+ AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6378[] = {
+ gSpriteAffineAnim_83D6368,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D637C =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837E0AC,
+ .anims = gSpriteAnimTable_83D62D4,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6378,
+ .callback = sub_80CA9A8,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6394 =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D62B4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CAA14,
+};
+
// orbs
// Used by Solar Beam, Absorb, Hyper Beam, and Leech Seed.
@@ -52,7 +225,7 @@ void sub_80CA858(struct Sprite* sprite)
sub_80CA8B4(sprite);
}
-void sub_80CA8B4(struct Sprite* sprite)
+static void sub_80CA8B4(struct Sprite* sprite)
{
if (TranslateAnimSpriteByDeltas(sprite))
{
@@ -103,7 +276,7 @@ void sub_80CA9A8(struct Sprite* sprite)
sprite->callback = sub_80CA9F8;
}
-void sub_80CA9F8(struct Sprite* sprite)
+static void sub_80CA9F8(struct Sprite* sprite)
{
if (TranslateAnimSpriteLinearAndSine(sprite))
DestroyAnimSprite(sprite);
@@ -139,7 +312,7 @@ void sub_80CAA14(struct Sprite* sprite)
sub_80CAACC(sprite);
}
-void sub_80CAACC(struct Sprite* sprite)
+static void sub_80CAACC(struct Sprite* sprite)
{
if (sub_8078CE8(sprite))
{
diff --git a/src/battle/anim/osmose.c b/src/battle/anim/osmose.c
index cca7af76e..dad5605f7 100644
--- a/src/battle/anim/osmose.c
+++ b/src/battle/anim/osmose.c
@@ -7,9 +7,34 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-// osmose (I didn't want to use "absorb" as thats confusing)
+void sub_80CB768(struct Sprite* sprite);
+
+// osmose
// Used by Ingrain.
+const union AnimCmd gSpriteAnim_83D6688[] =
+{
+ ANIMCMD_FRAME(3, 3),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6694[] =
+{
+ gSpriteAnim_83D6688,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6698 =
+{
+ .tileTag = 10147,
+ .paletteTag = 10147,
+ .oam = &gOamData_837DF24,
+ .anims = gSpriteAnimTable_83D6694,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CB768,
+};
+
void sub_80CB768(struct Sprite* sprite)
{
if (!sprite->data[0])
diff --git a/src/battle/anim/powder.c b/src/battle/anim/powder.c
index 88339522e..046d3c20c 100644
--- a/src/battle/anim/powder.c
+++ b/src/battle/anim/powder.c
@@ -6,8 +6,60 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
+void AnimMovePowderParticle(struct Sprite* sprite);
static void AnimMovePowderParticleStep(struct Sprite* sprite);
+const union AnimCmd gSpriteAnim_83D61FC[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(6, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(10, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_FRAME(14, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6220[] =
+{
+ gSpriteAnim_83D61FC,
+};
+
+const struct SpriteTemplate gSleepPowderParticleSpriteTemplate =
+{
+ .tileTag = 10067,
+ .paletteTag = 10067,
+ .oam = &gOamData_837DF64,
+ .anims = gSpriteAnimTable_83D6220,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
+const struct SpriteTemplate gStunSporeParticleSpriteTemplate =
+{
+ .tileTag = 10068,
+ .paletteTag = 10068,
+ .oam = &gOamData_837DF64,
+ .anims = gSpriteAnimTable_83D6220,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
+const struct SpriteTemplate gPoisonPowderParticleSpriteTemplate =
+{
+ .tileTag = 10065,
+ .paletteTag = 10065,
+ .oam = &gOamData_837DF64,
+ .anims = gSpriteAnimTable_83D6220,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
// Animates the falling particles that horizontally wave back and forth.
// Used by Sleep Powder, Stun Spore, and Poison Powder.
// arg 0: initial x pixel offset
diff --git a/src/battle/anim/roots.c b/src/battle/anim/roots.c
index 30c2d9652..b9b76c584 100644
--- a/src/battle/anim/roots.c
+++ b/src/battle/anim/roots.c
@@ -6,14 +6,79 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-
extern s16 gUnknown_03000728[];
+void sub_80CB59C(struct Sprite* sprite);
+void sub_80CB620(struct Sprite *sprite);
static void sub_80CB710(struct Sprite* sprite);
// roots
// Used by Ingrain and Frenzy Plant.
+const union AnimCmd gSpriteAnim_83D6600[] =
+{
+ ANIMCMD_FRAME(0, 7),
+ ANIMCMD_FRAME(16, 7),
+ ANIMCMD_FRAME(32, 7),
+ ANIMCMD_FRAME(48, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6614[] =
+{
+ ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 7, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6628[] =
+{
+ ANIMCMD_FRAME(0, 7),
+ ANIMCMD_FRAME(16, 7),
+ ANIMCMD_FRAME(32, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D6638[] =
+{
+ ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 7, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6648[] =
+{
+ gSpriteAnim_83D6600,
+ gSpriteAnim_83D6614,
+ gSpriteAnim_83D6628,
+ gSpriteAnim_83D6638,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6658 =
+{
+ .tileTag = 10223,
+ .paletteTag = 10223,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6648,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CB59C,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6670 =
+{
+ .tileTag = 10223,
+ .paletteTag = 10223,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6648,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CB620,
+};
+
void sub_80CB59C(struct Sprite* sprite)
{
if (!sprite->data[0])
@@ -57,7 +122,7 @@ void sub_80CB620(struct Sprite *sprite)
gUnknown_03000728[3] = e2;
}
-void sub_80CB710(struct Sprite* sprite)
+static void sub_80CB710(struct Sprite* sprite)
{
if (++sprite->data[0] > (sprite->data[2] - 10))
sprite->invisible = sprite->data[0] % 2;
diff --git a/src/battle/anim/seed.c b/src/battle/anim/seed.c
index d7c56e7a8..11eebada0 100644
--- a/src/battle/anim/seed.c
+++ b/src/battle/anim/seed.c
@@ -7,9 +7,40 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void AnimLeechSeed(struct Sprite* sprite);
static void AnimLeechSeedStep(struct Sprite* sprite);
static void AnimLeechSeedSprouts(struct Sprite* sprite);
+const union AnimCmd gSpriteAnim_83D63AC[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D63B4[] =
+{
+ ANIMCMD_FRAME(4, 7),
+ ANIMCMD_FRAME(8, 7),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D63C0[] =
+{
+ gSpriteAnim_83D63AC,
+ gSpriteAnim_83D63B4,
+};
+
+const struct SpriteTemplate gLeechSeedSpriteTemplate =
+{
+ .tileTag = 10006,
+ .paletteTag = 10006,
+ .oam = &gOamData_837DF2C,
+ .anims = gSpriteAnimTable_83D63C0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimLeechSeed,
+};
+
// seed (sprouts a sapling from a seed.)
// Used by Leech Seed.
// arg 0: initial x pixel offset
diff --git a/src/battle/anim/shimmer.c b/src/battle/anim/shimmer.c
index 9e7bea1e4..78b430094 100644
--- a/src/battle/anim/shimmer.c
+++ b/src/battle/anim/shimmer.c
@@ -9,11 +9,20 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
-extern u16 gUnknown_083D6984[];
-
// shimmer
// Used by Magical Leaf.
+static const u16 sMagicalLeafBlendColors[] =
+{
+ RGB(31, 0, 0),
+ RGB(31, 19, 0),
+ RGB(31, 31, 0),
+ RGB(0, 31, 0),
+ RGB(5, 14, 31),
+ RGB(22, 10, 31),
+ RGB(22, 21, 31),
+};
+
void sub_80CC5F8(u8 taskId)
{
struct Task* task = &gTasks[taskId];
@@ -29,8 +38,8 @@ void sub_80CC5F8(u8 taskId)
if (task->data[9] >= 0)
{
task->data[9] = 0;
- BlendPalette(task->data[8], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]);
- BlendPalette(task->data[12], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]);
+ BlendPalette(task->data[8], 0x10, task->data[10], sMagicalLeafBlendColors[task->data[11]]);
+ BlendPalette(task->data[12], 0x10, task->data[10], sMagicalLeafBlendColors[task->data[11]]);
task->data[10]++;
if (task->data[10] == 17)
{
diff --git a/src/battle/anim/switch.c b/src/battle/anim/switch.c
index c4082b6aa..fcb1d9fc3 100644
--- a/src/battle/anim/switch.c
+++ b/src/battle/anim/switch.c
@@ -7,9 +7,11 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+extern const union AffineAnimCmd gSpriteAffineAnim_83D66BC[];
+extern const union AffineAnimCmd gSpriteAffineAnim_83D66DC[];
+extern const union AnimCmd *const gSpriteAnimTable_83D66B8[];
-extern s8 gUnknown_083D680C[11][3];
-
+void sub_80CBBF0(struct Sprite* sprite);
static void sub_80CBC8C(struct Sprite* sprite);
static void sub_80CBCF8(struct Sprite* sprite);
static void sub_80CBDB0(struct Sprite* sprite);
@@ -17,6 +19,56 @@ static void sub_80CBDB0(struct Sprite* sprite);
// switch (makes an item and circles it from side to side on the field.)
// Used in Trick.
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6794[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 3),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D67A4[] = {
+ AFFINEANIMCMD_FRAME(0, -10, 0, 3),
+ AFFINEANIMCMD_FRAME(0, -6, 0, 3),
+ AFFINEANIMCMD_FRAME(0, -2, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 2, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 6, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 10, 0, 3),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D67E4[] = {
+ gSpriteAffineAnim_83D6794,
+ gSpriteAffineAnim_83D67A4,
+ gSpriteAffineAnim_83D66BC,
+ gSpriteAffineAnim_83D66DC,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D67F4 =
+{
+ .tileTag = 10224,
+ .paletteTag = 10224,
+ .oam = &gOamData_837DF94,
+ .anims = gSpriteAnimTable_83D66B8,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D67E4,
+ .callback = sub_80CBBF0,
+};
+
+const s8 gUnknown_083D680C[][3] =
+{
+ {5, 24, 1},
+ {0, 4, 0},
+ {8, 16, -1},
+ {0, 2, 0},
+ {8, 16, 1},
+ {0, 2, 0},
+ {8, 16, 1},
+ {0, 2, 0},
+ {8, 16, 1},
+ {0, 16, 0},
+ {0, 0, 127},
+};
+
void sub_80CBBF0(struct Sprite* sprite)
{
int a;
@@ -27,7 +79,7 @@ void sub_80CBBF0(struct Sprite* sprite)
if (!IsContest())
{
sprite->data[1] = gBattleAnimArgs[1];
- sprite->pos1.x = 0x78;
+ sprite->pos1.x = 120;
}
else
{
@@ -38,13 +90,13 @@ void sub_80CBBF0(struct Sprite* sprite)
b = a;
sprite->data[1] = a - ((b >> 8) << 8);
- sprite->pos1.x = 0x46;
+ sprite->pos1.x = 70;
}
sprite->pos1.y = gBattleAnimArgs[0];
sprite->data[2] = gBattleAnimArgs[0];
sprite->data[4] = 20;
- sprite->pos2.x = Cos(sprite->data[1], 0x3C);
+ sprite->pos2.x = Cos(sprite->data[1], 60);
sprite->pos2.y = Sin(sprite->data[1], 20);
sprite->callback = sub_80CBC8C;
if (sprite->data[1] > 0 && sprite->data[1] < 0xC0)
@@ -54,7 +106,7 @@ void sub_80CBBF0(struct Sprite* sprite)
}
}
-void sub_80CBC8C(struct Sprite* sprite)
+static void sub_80CBC8C(struct Sprite* sprite)
{
switch (sprite->data[3])
{
@@ -84,7 +136,7 @@ void sub_80CBC8C(struct Sprite* sprite)
}
}
-void sub_80CBCF8(struct Sprite* sprite)
+static void sub_80CBCF8(struct Sprite* sprite)
{
if (sprite->data[2] == gUnknown_083D680C[sprite->data[0]][1])
{
@@ -113,12 +165,12 @@ void sub_80CBCF8(struct Sprite* sprite)
}
}
- sprite->pos2.x = Cos(sprite->data[1], 0x3C);
+ sprite->pos2.x = Cos(sprite->data[1], 60);
sprite->pos2.y = Sin(sprite->data[1], 20);
}
}
-void sub_80CBDB0(struct Sprite* sprite)
+static void sub_80CBDB0(struct Sprite* sprite)
{
if (sprite->data[0] > 20)
DestroyAnimSprite(sprite);
diff --git a/src/battle/anim/tendrils.c b/src/battle/anim/tendrils.c
index 4ef704f3a..55e2c21bb 100644
--- a/src/battle/anim/tendrils.c
+++ b/src/battle/anim/tendrils.c
@@ -7,12 +7,67 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CB25C(struct Sprite* sprite);
static void sub_80CB298(struct Sprite* sprite);
static void sub_80CB2D4(struct Sprite* sprite);
// tendrils
// Used by Constrict.
+const union AnimCmd gSpriteAnim_83D6528[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_FRAME(96, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D653C[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(96, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6550[] =
+{
+ gSpriteAnim_83D6528,
+ gSpriteAnim_83D653C,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6558[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
+ AFFINEANIMCMD_FRAME(11, 0, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6578[] = {
+ AFFINEANIMCMD_FRAME(-256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(11, 0, 0, 6),
+ AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6598[] = {
+ gSpriteAffineAnim_83D6558,
+ gSpriteAffineAnim_83D6578,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D65A0 =
+{
+ .tileTag = 10186,
+ .paletteTag = 10186,
+ .oam = &gOamData_837DFBC,
+ .anims = gSpriteAnimTable_83D6550,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6598,
+ .callback = sub_80CB25C,
+};
+
void sub_80CB25C(struct Sprite* sprite)
{
sub_8078764(sprite, 0);
@@ -23,7 +78,7 @@ void sub_80CB25C(struct Sprite* sprite)
sprite->callback = sub_80CB298;
}
-void sub_80CB298(struct Sprite* sprite)
+static void sub_80CB298(struct Sprite* sprite)
{
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
{
@@ -34,7 +89,7 @@ void sub_80CB298(struct Sprite* sprite)
}
}
-void sub_80CB2D4(struct Sprite* sprite)
+static void sub_80CB2D4(struct Sprite* sprite)
{
GetAnimBattlerSpriteId(1);
if (!sprite->data[2])
diff --git a/src/battle/anim/unused_1.c b/src/battle/anim/unused_1.c
index d7e5fbfe4..15050b54c 100644
--- a/src/battle/anim/unused_1.c
+++ b/src/battle/anim/unused_1.c
@@ -8,9 +8,73 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CC8C8(struct Sprite* sprite);
+
// unused effect file.
// Seems to be a beta effect for Beat Up, possibly.
+const union AffineAnimCmd gSpriteAffineAnim_83D6A58[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6A68[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 32, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6A78[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 64, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6A88[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 96, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6A98[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -128, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6AA8[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -96, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6AB8[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -64, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83D6AC8[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -32, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83D6AD8[] = {
+ gSpriteAffineAnim_83D6A58,
+ gSpriteAffineAnim_83D6A68,
+ gSpriteAffineAnim_83D6A78,
+ gSpriteAffineAnim_83D6A88,
+ gSpriteAffineAnim_83D6A98,
+ gSpriteAffineAnim_83D6AA8,
+ gSpriteAffineAnim_83D6AB8,
+ gSpriteAffineAnim_83D6AC8,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6AF8 =
+{
+ .tileTag = 10143,
+ .paletteTag = 10143,
+ .oam = &gOamData_837DF94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83D6AD8,
+ .callback = sub_80CC8C8,
+};
+
void sub_80CC8C8(struct Sprite* sprite)
{
sprite->pos1.x += gBattleAnimArgs[0];
diff --git a/src/battle/anim/whip.c b/src/battle/anim/whip.c
index 08b24369d..e6e004932 100644
--- a/src/battle/anim/whip.c
+++ b/src/battle/anim/whip.c
@@ -8,16 +8,101 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
+void sub_80CC82C(struct Sprite* sprite);
+void sub_80CC884(struct Sprite* sprite);
+
// whip (does a hitting animation that uses a rotating sprite to invoke the sprite getting hit.)
// Used by Slam and Vine Whip.
-void sub_80CC810(struct Sprite* sprite)
+const union AnimCmd gSpriteAnim_83D69AC[] =
+{
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_FRAME(80, 3),
+ ANIMCMD_FRAME(96, 3),
+ ANIMCMD_FRAME(112, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83D69C0[] =
+{
+ ANIMCMD_FRAME(64, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(80, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(96, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(112, 6, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D69D4[] =
+{
+ gSpriteAnim_83D69AC,
+ gSpriteAnim_83D69C0,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D69DC =
+{
+ .tileTag = 10056,
+ .paletteTag = 10056,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D69D4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC884,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_83D69F4 =
+{
+ .tileTag = 10287,
+ .paletteTag = 10287,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D69D4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC884,
+};
+
+const union AnimCmd gSpriteAnim_83D6A0C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83D6A24[] =
+{
+ gSpriteAnim_83D6A0C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6A28 =
+{
+ .tileTag = 10021,
+ .paletteTag = 10021,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6A24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC82C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83D6A40 =
+{
+ .tileTag = 10022,
+ .paletteTag = 10022,
+ .oam = &gOamData_837DF34,
+ .anims = gSpriteAnimTable_83D6A24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80CC82C,
+};
+
+static void sub_80CC810(struct Sprite* sprite)
{
if (sprite->animEnded)
DestroyAnimSprite(sprite);
}
-// unused, beta effect for diagonal sprite movement?
void sub_80CC82C(struct Sprite* sprite)
{
if (GetBattlerSide(gAnimBankAttacker) != 0)
diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c
index cccedc89c..a10fd45b8 100644
--- a/src/rom_8077ABC.c
+++ b/src/rom_8077ABC.c
@@ -56,7 +56,6 @@ struct Struct_2017810
#define BG2CNT (*(vBgCnt *)REG_ADDR_BG2CNT)
#define BG3CNT (*(vBgCnt *)REG_ADDR_BG3CNT)
-extern struct OamData gOamData_837DF9C[];
extern const union AnimCmd *const gDummySpriteAnimTable[];
extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[];
@@ -129,7 +128,7 @@ const struct SpriteTemplate gSpriteTemplate_837F5B0[] =
{
.tileTag = 55125,
.paletteTag = 55125,
- .oam = gOamData_837DF9C,
+ .oam = &gOamData_837DF9C,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -138,7 +137,7 @@ const struct SpriteTemplate gSpriteTemplate_837F5B0[] =
{
.tileTag = 55126,
.paletteTag = 55126,
- .oam = gOamData_837DF9C,
+ .oam = &gOamData_837DF9C,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,