diff options
-rw-r--r-- | data/battle_anim_80CA710.s | 721 | ||||
-rw-r--r-- | include/battle_anim.h | 73 | ||||
-rw-r--r-- | ld_script.txt | 20 | ||||
-rw-r--r-- | src/battle/anim/copy_orb.c | 31 | ||||
-rw-r--r-- | src/battle/anim/cutter.c | 144 | ||||
-rw-r--r-- | src/battle/anim/flying_path.c | 74 | ||||
-rw-r--r-- | src/battle/anim/flying_petals.c | 100 | ||||
-rw-r--r-- | src/battle/anim/heal.c | 27 | ||||
-rw-r--r-- | src/battle/anim/homing.c | 14 | ||||
-rw-r--r-- | src/battle/anim/hop.c | 58 | ||||
-rw-r--r-- | src/battle/anim/hop_2.c | 16 | ||||
-rw-r--r-- | src/battle/anim/leaf.c | 240 | ||||
-rw-r--r-- | src/battle/anim/orbit.c | 83 | ||||
-rw-r--r-- | src/battle/anim/orbs.c | 181 | ||||
-rw-r--r-- | src/battle/anim/osmose.c | 27 | ||||
-rw-r--r-- | src/battle/anim/powder.c | 52 | ||||
-rw-r--r-- | src/battle/anim/roots.c | 69 | ||||
-rw-r--r-- | src/battle/anim/seed.c | 31 | ||||
-rw-r--r-- | src/battle/anim/shimmer.c | 17 | ||||
-rw-r--r-- | src/battle/anim/switch.c | 70 | ||||
-rw-r--r-- | src/battle/anim/tendrils.c | 59 | ||||
-rw-r--r-- | src/battle/anim/unused_1.c | 64 | ||||
-rw-r--r-- | src/battle/anim/whip.c | 89 | ||||
-rw-r--r-- | src/rom_8077ABC.c | 5 |
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, |