diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-04-29 12:52:21 -0700 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-04-29 12:52:21 -0700 |
commit | c88cf196af0f099f4daa7cbc06b9b0df9a31c60c (patch) | |
tree | f90fb1f81857964a3bd24962a13573c7c74ca921 | |
parent | db5067c512a33ef913bb3e2d4cbef589d32a48a6 (diff) |
Move another chunk of battle anim .rodata
63 files changed, 2539 insertions, 2019 deletions
diff --git a/data/battle_anim_80CA710.s b/data/battle_anim_80CA710.s index 5972e967c..26f9aaaf1 100644 --- a/data/battle_anim_80CA710.s +++ b/data/battle_anim_80CA710.s @@ -4,1002 +4,6 @@ .section .rodata .align 2 -gSpriteAnim_83D7098:: @ 83D7098 - obj_image_anim_frame 0, 10 - obj_image_anim_end - - .align 2 -gSpriteAnim_83D70A0:: @ 83D70A0 - obj_image_anim_frame 4, 10 - obj_image_anim_end - - .align 2 -gSpriteAnim_83D70A8:: @ 83D70A8 - obj_image_anim_frame 8, 41 - obj_image_anim_end - - .align 2 -gSpriteAnim_83D70B0:: @ 83D70B0 - obj_image_anim_frame 12, 10 - obj_image_anim_end - - .align 2 -gSpriteAnim_83D70B8:: @ 83D70B8 - obj_image_anim_frame 16, 10 - obj_image_anim_end - - .align 2 -gSpriteAnim_83D70C0:: @ 83D70C0 - obj_image_anim_frame 20, 10 - obj_image_anim_end - - .align 2 -gSpriteAnim_83D70C8:: @ 83D70C8 - obj_image_anim_frame 0, 10, OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_end - - .align 2 -gSpriteAnim_83D70D0:: @ 83D70D0 - obj_image_anim_frame 4, 10, OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D70D8:: @ 83D70D8 - .4byte gSpriteAnim_83D7098 - .4byte gSpriteAnim_83D70A0 - .4byte gSpriteAnim_83D70A8 - .4byte gSpriteAnim_83D70B0 - .4byte gSpriteAnim_83D70B8 - .4byte gSpriteAnim_83D70C0 - .4byte gSpriteAnim_83D70C8 - .4byte gSpriteAnim_83D70D0 - - .align 2 -gSpriteAffineAnim_83D70F8:: @ 83D70F8 - obj_rot_scal_anim_frame 0xC, 0xC, 0, 16 - obj_rot_scal_anim_frame 0xFFF4, 0xFFF4, 0, 16 - obj_rot_scal_anim_jump 0 - - .align 2 -gSpriteAffineAnimTable_83D7110:: @ 83D7110 - .4byte gSpriteAffineAnim_83D70F8 - - .align 2 -gBattleAnimSpriteTemplate_83D7114:: @ 83D7114 - spr_template 10072, 10072, gOamData_837DFEC, gSpriteAnimTable_83D70D8, NULL, gSpriteAffineAnimTable_83D7110, sub_80CEB0C - - .align 2 -gUnknown_083D712C:: @ 83D712C - .2byte 10072,0x7FFF,0x735F,0x6ADF,0x623F,0x59BF - .2byte 10097,0x7FFF,0x6BF9,0x57F4,0x43EF,0x33EA - .2byte 10185,0x7FFF,0x63FF,0x47FF,0x2BFF,0x0FFF - .2byte 10175,0x7FFF,0x7F9A,0x7F55,0x7F10,0x7ECC - - .align 2 -gBattleAnimSpriteTemplate_83D715C:: @ 83D715C - spr_template 10072, 10072, gOamData_837DFEC, gSpriteAnimTable_83D70D8, NULL, gSpriteAffineAnimTable_83D7110, sub_80CECE8 - - .align 2 -gBattleAnimSpriteTemplate_83D7174:: @ 83D7174 - spr_template 10193, 10193, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CEDF0 - - .align 2 -gSpriteAffineAnim_83D718C:: @ 83D718C - obj_rot_scal_anim_frame 0xA0, 0xA0, 0, 0 - obj_rot_scal_anim_frame 0x4, 0x4, 0, 1 - obj_rot_scal_anim_jump 1 - - .align 2 -gSpriteAffineAnimTable_83D71A4:: @ 83D71A4 - .4byte gSpriteAffineAnim_83D718C - - .align 2 -gBattleAnimSpriteTemplate_83D71A8:: @ 83D71A8 - spr_template 10072, 10072, gOamData_837DFEC, gSpriteAnimTable_83D70D8, NULL, gSpriteAffineAnimTable_83D71A4, sub_80CEE60 - - .align 2 -gSpriteAnim_83D71C0:: @ 83D71C0 - obj_image_anim_frame 0, 2, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 16, 2, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 32, 2, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 48, 2, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_end - - .align 2 -gSpriteAnim_83D71D4:: @ 83D71D4 - obj_image_anim_frame 48, 2, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 32, 2, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 16, 2, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 0, 2, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_end - - .align 2 -gSpriteAnim_83D71E8:: @ 83D71E8 - obj_image_anim_frame 0, 2 - obj_image_anim_frame 16, 2 - obj_image_anim_frame 32, 2 - obj_image_anim_frame 48, 2 - obj_image_anim_end - - .align 2 -gSpriteAnim_83D71FC:: @ 83D71FC - obj_image_anim_frame 48, 2 - obj_image_anim_frame 32, 2 - obj_image_anim_frame 16, 2 - obj_image_anim_frame 0, 2 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D7210:: @ 83D7210 - .4byte gSpriteAnim_83D71C0 - .4byte gSpriteAnim_83D71E8 - .4byte gSpriteAnim_83D71D4 - .4byte gSpriteAnim_83D71FC - - .align 2 -gBattleAnimSpriteTemplate_83D7220:: @ 83D7220 - spr_template 10209, 10209, gOamData_837DF34, gSpriteAnimTable_83D7210, NULL, gDummySpriteAffineAnimTable, sub_80CEF9C - - .align 2 -gSpriteAffineAnim_83D7238:: @ 83D7238 - obj_rot_scal_anim_frame 0x10, 0x10, 0, 0 - obj_rot_scal_anim_frame 0x1E, 0x1E, 0, 8 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_83D7250:: @ 83D7250 - obj_rot_scal_anim_frame 0x0, 0x0, 4, 11 - obj_rot_scal_anim_frame 0x0, 0x0, -4, 11 - obj_rot_scal_anim_loop 2 - obj_rot_scal_anim_frame 0xFFE2, 0xFFE2, 0, 8 - obj_rot_scal_anim_end - - .align 2 -@ unused - obj_rot_scal_anim_frame 16, 16, 0, 0 - obj_rot_scal_anim_frame 30, 30, 0, 8 - obj_rot_scal_anim_frame 0, 0, 0, 16 - obj_rot_scal_anim_loop 0 - obj_rot_scal_anim_frame 0, 0, 4, 11 - obj_rot_scal_anim_frame 0, 0, -4, 11 - obj_rot_scal_anim_loop 2 - obj_rot_scal_anim_frame -30, -30, 0, 8 - obj_rot_scal_anim_end 0 - - .align 2 -gSpriteAffineAnimTable_83D72C0:: @ 83D72C0 - .4byte gSpriteAffineAnim_83D7238 - .4byte gSpriteAffineAnim_83D7250 - - .align 2 -gBattleAnimSpriteTemplate_83D72C8:: @ 83D72C8 - spr_template 10064, 10064, gOamData_837DFF4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D72C0, sub_80CF040 - - .align 2 -gBattleAnimSpriteTemplate_83D72E0:: @ 83D72E0 - spr_template 10064, 10064, gOamData_837DF94, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D72C0, sub_80CF0BC - - .align 2 -gSpriteAnim_83D72F8:: @ 83D72F8 - obj_image_anim_frame 0, 1 - obj_image_anim_end - - .align 2 -gSpriteAnim_83D7300:: @ 83D7300 - obj_image_anim_frame 0, 1, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_end - - .align 2 -gSpriteAnim_83D7308:: @ 83D7308 - obj_image_anim_frame 0, 4 - obj_image_anim_frame 16, 4 - obj_image_anim_frame 32, 4 - obj_image_anim_frame 16, 4 - obj_image_anim_frame 0, 4 - obj_image_anim_frame 16, 4 - obj_image_anim_frame 32, 4 - obj_image_anim_end - - .align 2 -gSpriteAnim_83D7328:: @ 83D7328 - obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D7348:: @ 83D7348 - .4byte gSpriteAnim_83D72F8 - .4byte gSpriteAnim_83D7300 - .4byte gSpriteAnim_83D7308 - .4byte gSpriteAnim_83D7328 - - .align 2 -gBattleAnimSpriteTemplate_83D7358:: @ 83D7358 - spr_template 10214, 10214, gOamData_837DF34, gSpriteAnimTable_83D7348, NULL, gDummySpriteAffineAnimTable, sub_80CF1C8 - - .align 2 -gSpriteTemplate_83D7370:: @ 83D7370 - spr_template 10064, 10064, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CF280 - - .align 2 -gSpriteAnim_83D7388:: @ 83D7388 - obj_image_anim_frame 4, 1 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D7390:: @ 83D7390 - .4byte gSpriteAnim_83D7388 - - .align 2 -gSpriteTemplate_83D7394:: @ 83D7394 - spr_template 10072, 10072, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CF2D0 - - .align 2 -gSpriteTemplate_83D73AC:: @ 83D73AC - spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CF3C4 - - .align 2 -gSpriteTemplate_83D73C4:: @ 83D73C4 - spr_template 10145, 10145, gOamData_837E0BC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83DB1B0, sub_80CF458 - - .align 2 -gSpriteAnim_83D73DC:: @ 83D73DC - obj_image_anim_frame 0, 9 - obj_image_anim_frame 16, 3 - obj_image_anim_frame 32, 3 - obj_image_anim_frame 48, 3 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D73F0:: @ 83D73F0 - .4byte gSpriteAnim_83D73DC - - .align 2 -gSpriteAffineAnim_83D73F4:: @ 83D73F4 - obj_rot_scal_anim_frame 0x50, 0x50, 0, 0 - obj_rot_scal_anim_frame 0x9, 0x9, 0, 18 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_83D740C:: @ 83D740C - .4byte gSpriteAffineAnim_83D73F4 - - .align 2 -gSpriteTemplate_83D7410:: @ 83D7410 - spr_template 10007, 10007, gOamData_837DF94, gSpriteAnimTable_83D73F0, NULL, gSpriteAffineAnimTable_83D740C, sub_80793C4 - - .align 2 -gSpriteAnim_83D7428:: @ 83D7428 - obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 8, 3, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 16, 3, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 24, 3, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 32, 3, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 40, 3, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 48, 3, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_loop 1 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D744C:: @ 83D744C - .4byte gSpriteAnim_83D7428 - - .align 2 -gBattleAnimSpriteTemplate_83D7450:: @ 83D7450 - spr_template 10075, 10075, gOamData_837DF54, gSpriteAnimTable_83D744C, NULL, gDummySpriteAffineAnimTable, sub_80CF610 - - .align 2 -gSpriteAffineAnim_83D7468:: @ 83D7468 - obj_rot_scal_anim_frame 0x10, 0x100, 0, 0 - obj_rot_scal_anim_frame 0x14, 0x0, 0, 12 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 32 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_83D7488:: @ 83D7488 - .4byte gSpriteAffineAnim_83D7468 - - .align 2 -gBattleAnimSpriteTemplate_83D748C:: @ 83D748C - spr_template 10005, 10005, gOamData_837E0FC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7488, sub_80CF690 - - .align 2 -gSonicBoomSpriteTemplate:: @ 83D74A4 - spr_template 10003, 10003, gOamData_837E134, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, AnimSonicBoomProjectile - - .align 2 -gSpriteTemplate_83D74BC:: @ 83D74BC - spr_template 10003, 10003, gOamData_837E074, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CF8B8 - - .align 2 -gSpriteAffineAnim_83D74D4:: @ 83D74D4 - obj_rot_scal_anim_frame 0x20, 0x20, 0, 0 - obj_rot_scal_anim_frame 0x7, 0x7, 0, -56 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_83D74EC:: @ 83D74EC - obj_rot_scal_anim_frame 0x5, 0x5, 0, 10 - obj_rot_scal_anim_frame 0xFFF6, 0xFFF6, 0, 10 - obj_rot_scal_anim_frame 0xA, 0xA, 0, 10 - obj_rot_scal_anim_frame 0xFFF6, 0xFFF6, 0, 10 - obj_rot_scal_anim_frame 0xA, 0xA, 0, 10 - obj_rot_scal_anim_frame 0xFFF6, 0xFFF6, 0, 10 - obj_rot_scal_anim_frame 0xA, 0xA, 0, 10 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_83D752C:: @ 83D752C - .4byte gSpriteAffineAnim_83D74D4 - - .align 2 -gSpriteAffineAnimTable_83D7530:: @ 83D7530 - .4byte gSpriteAffineAnim_83D74EC - - .align 2 -gSupersonicWaveSpriteTemplate:: @ 83D7534 - spr_template 10163, 10163, gOamData_837E034, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D752C, TranslateAnimSpriteToTargetMonLocation - - .align 2 -gScreechWaveSpriteTemplate:: @ 83D754C - spr_template 10164, 10164, gOamData_837E034, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D752C, TranslateAnimSpriteToTargetMonLocation - - .align 2 -gBattleAnimSpriteTemplate_83D7564:: @ 83D7564 - spr_template 10260, 10260, gOamData_837E03C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D752C, TranslateAnimSpriteToTargetMonLocation - - .align 2 -gBattleAnimSpriteTemplate_83D757C:: @ 83D757C - spr_template 10288, 10288, gOamData_837E034, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7530, sub_80D4CA4 - - .align 2 -gBattleAnimSpriteTemplate_83D7594:: @ 83D7594 - spr_template 10175, 10175, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80794A8 - - .align 2 -gSpriteTemplate_83D75AC:: @ 83D75AC - spr_template 10178, 10178, gOamData_837E05C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80CFDFC - - .align 2 -gSpriteAnim_83D75C4:: @ 83D75C4 - obj_image_anim_frame 8, 1 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D75CC:: @ 83D75CC - .4byte gSpriteAnim_83D75C4 - - .align 2 -gSpriteAffineAnim_83D75D0:: @ 83D75D0 - obj_rot_scal_anim_frame 0x0, 0x0, 10, 1 - obj_rot_scal_anim_jump 0 - - .align 2 -gSpriteAffineAnimTable_83D75E0:: @ 83D75E0 - .4byte gSpriteAffineAnim_83D75D0 - - .align 2 -gBattleAnimSpriteTemplate_83D75E4:: @ 83D75E4 - spr_template 10100, 10100, gOamData_837DF8C, gSpriteAnimTable_83D75CC, NULL, gDummySpriteAffineAnimTable, sub_80CFE9C - - .align 2 -gBattleAnimSpriteTemplate_83D75FC:: @ 83D75FC - spr_template 10100, 10100, gOamData_837DF8C, gSpriteAnimTable_83D75CC, NULL, gSpriteAffineAnimTable_83D75E0, sub_80CFF50 - - .align 2 -gSpriteAffineAnim_83D7614:: @ 83D7614 - obj_rot_scal_anim_frame 0x0, 0x0, 20, 1 - obj_rot_scal_anim_jump 0 - - .align 2 -gSpriteAffineAnimTable_83D7624:: @ 83D7624 - .4byte gSpriteAffineAnim_83D7614 - - .align 2 -gBattleAnimSpriteTemplate_83D7628:: @ 83D7628 - spr_template 10006, 10006, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7624, sub_80CFFD8 - - .align 2 -gSpriteAffineAnim_83D7640:: @ 83D7640 - obj_rot_scal_anim_frame 0x10, 0x100, 0, 0 - obj_rot_scal_anim_frame 0x4, 0x0, 0, 40 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_83D7658:: @ 83D7658 - .4byte gSpriteAffineAnim_83D7640 - - .align 2 -gBattleAnimSpriteTemplate_83D765C:: @ 83D765C - spr_template 10009, 10009, gOamData_837DFDC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7658, sub_80D0118 - - .align 2 -gSpriteAnim_83D7674:: @ 83D7674 - obj_image_anim_frame 0, 3 - obj_image_anim_frame 16, 3 - obj_image_anim_frame 32, 20 - obj_image_anim_end - - .align 2 -gSpriteAnim_83D7684:: @ 83D7684 - obj_image_anim_frame 0, 3, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 16, 3, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 32, 20, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D7694:: @ 83D7694 - .4byte gSpriteAnim_83D7674 - .4byte gSpriteAnim_83D7684 - - .align 2 -gBattleAnimSpriteTemplate_83D769C:: @ 83D769C - spr_template 10138, 10138, gOamData_837E054, gSpriteAnimTable_83D7694, NULL, gDummySpriteAffineAnimTable, sub_80D0178 - - .align 2 -gSpriteAnim_83D76B4:: @ 83D76B4 - obj_image_anim_frame 0, 2 - obj_image_anim_frame 16, 2 - obj_image_anim_frame 32, 1 - obj_image_anim_end - - .align 2 -gSpriteAnim_83D76C4:: @ 83D76C4 - obj_image_anim_frame 0, 2, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 16, 2, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 32, 1, OBJ_IMAGE_ANIM_V_FLIP | OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D76D4:: @ 83D76D4 - .4byte gSpriteAnim_83D76B4 - .4byte gSpriteAnim_83D76C4 - - .align 2 -gBattleAnimSpriteTemplate_83D76DC:: @ 83D76DC - spr_template 10138, 10138, gOamData_837E054, gSpriteAnimTable_83D76D4, NULL, gDummySpriteAffineAnimTable, sub_80D0228 - - .align 2 -gUnknown_083D76F4:: @ 83D76F4 - obj_rot_scal_anim_frame -6, 4, 0, 8 - obj_rot_scal_anim_frame 10, -10, 0, 8 - obj_rot_scal_anim_frame -4, 6, 0, 8 - obj_rot_scal_anim_end 0 - - .align 2 -gUnknown_083D7714:: @ 83D7714 - obj_rot_scal_anim_frame -4, -5, 0, 12 - obj_rot_scal_anim_frame 0, 0, 0, 24 - obj_rot_scal_anim_frame 4, 5, 0, 12 - obj_rot_scal_anim_end 0 - - .align 2 -gSpriteAnim_83D7734:: @ 83D7734 - obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 4, 40, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 12, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_end - - .align 2 -gSpriteAnim_83D7748:: @ 83D7748 - obj_image_anim_frame 0, 4 - obj_image_anim_frame 4, 40 - obj_image_anim_frame 8, 4 - obj_image_anim_frame 12, 4 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D775C:: @ 83D775C - .4byte gSpriteAnim_83D7734 - .4byte gSpriteAnim_83D7748 - - .align 2 -gBattleAnimSpriteTemplate_83D7764:: @ 83D7764 - spr_template 10086, 10086, gOamData_837DF2C, gSpriteAnimTable_83D775C, NULL, gDummySpriteAffineAnimTable, sub_80D0930 - - .align 2 -gSpriteAffineAnim_83D777C:: @ 83D777C - obj_rot_scal_anim_frame 0xB, 0xB, 0, 8 - obj_rot_scal_anim_frame 0xFFF5, 0xFFF5, 0, 8 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_83D7794:: @ 83D7794 - .4byte gSpriteAffineAnim_83D777C - - .align 2 -gBattleAnimSpriteTemplate_83D7798:: @ 83D7798 - spr_template 10087, 10087, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7794, sub_80D09C0 - - .align 2 -gUnknown_083D77B0:: @ 83D77B0 - obj_rot_scal_anim_frame -10, 9, 0, 7 - obj_rot_scal_anim_frame 20, -20, 0, 7 - obj_rot_scal_anim_frame -20, 20, 0, 7 - obj_rot_scal_anim_frame 10, -9, 0, 7 - obj_rot_scal_anim_loop 2 - obj_rot_scal_anim_end 0 - - .align 2 -gBattleAnimSpriteTemplate_83D77E0:: @ 83D77E0 - spr_template 10002, 10002, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D0E30 - - .align 2 -gBattleAnimSpriteTemplate_83D77F8:: @ 83D77F8 - spr_template 10197, 10197, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8079534 - - .align 2 -gSpriteAnim_83D7810:: @ 83D7810 - obj_image_anim_frame 0, 5 - obj_image_anim_frame 16, 5 - obj_image_anim_frame 32, 5 - obj_image_anim_frame 48, 5 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D7824:: @ 83D7824 - .4byte gSpriteAnim_83D7810 - - .align 2 -gBattleAnimSpriteTemplate_83D7828:: @ 83D7828 - spr_template 10198, 10198, gOamData_837DF34, gSpriteAnimTable_83D7824, NULL, gDummySpriteAffineAnimTable, sub_80793C4 - - .align 2 -gSpriteAffineAnim_83D7840:: @ 83D7840 - obj_rot_scal_anim_frame 0x0, 0x0, -8, 2 - obj_rot_scal_anim_frame 0x0, 0x0, 8, 4 - obj_rot_scal_anim_frame 0x0, 0x0, -8, 2 - obj_rot_scal_anim_jump 0 - - .align 2 -gSpriteAffineAnim_83D7860:: @ 83D7860 - obj_rot_scal_anim_frame 0x100, 0x100, 0, 0 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_83D7870:: @ 83D7870 - obj_rot_scal_anim_frame 0xFFF8, 0x4, 0, 8 - obj_rot_scal_anim_loop 0 - obj_rot_scal_anim_frame 0x10, 0xFFF8, 0, 8 - obj_rot_scal_anim_frame 0xFFF0, 0x8, 0, 8 - obj_rot_scal_anim_loop 1 - obj_rot_scal_anim_frame 0x100, 0x100, 0, 0 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 15 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_83D78B0:: @ 83D78B0 - .4byte gSpriteAffineAnim_83D7840 - .4byte gSpriteAffineAnim_83D7860 - .4byte gSpriteAffineAnim_83D7870 - - .align 2 -gBattleAnimSpriteTemplate_83D78BC:: @ 83D78BC - spr_template 10202, 10202, gOamData_837E114, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D78B0, sub_80D1368 - - .align 2 -gSpriteAffineAnim_83D78D4:: @ 83D78D4 - obj_rot_scal_anim_frame 0x10, 0x10, 0, 0 - obj_rot_scal_anim_frame 0x10, 0x10, 0, 30 - obj_rot_scal_anim_end 1 - - .align 2 -gSpriteAffineAnim_83D78EC:: @ 83D78EC - obj_rot_scal_anim_frame 0x10, 0x10, 0, 0 - obj_rot_scal_anim_frame 0x20, 0x20, 0, 15 - obj_rot_scal_anim_end 1 - - .align 2 -gSpriteAffineAnim_83D7904:: @ 83D7904 - obj_rot_scal_anim_frame 0x10, 0x10, 0, 0 - obj_rot_scal_anim_frame 0xB, 0xB, 0, 45 - obj_rot_scal_anim_end 1 - - .align 2 -gSpriteAffineAnimTable_83D791C:: @ 83D791C - .4byte gSpriteAffineAnim_83D78D4 - .4byte gSpriteAffineAnim_83D78EC - - .align 2 -gSpriteAffineAnimTable_83D7924:: @ 83D7924 - .4byte gSpriteAffineAnim_83D7904 - - .align 2 -gBattleAnimSpriteTemplate_83D7928:: @ 83D7928 - spr_template 10203, 10203, gOamData_837DFFC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D791C, sub_80793C4 - - .align 2 -gSpriteAffineAnim_83D7940:: @ 83D7940 - obj_rot_scal_anim_frame 0x200, 0x200, 0, 0 - obj_rot_scal_anim_frame 0xFFF0, 0xFFF0, 0, 30 - obj_rot_scal_anim_end 1 - - .align 2 -gSpriteAffineAnimTable_83D7958:: @ 83D7958 - .4byte gSpriteAffineAnim_83D7940 - - .align 2 -gBattleAnimSpriteTemplate_83D795C:: @ 83D795C - spr_template 10203, 10203, gOamData_837E11C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7958, sub_80793C4 - - .align 2 -gBattleAnimSpriteTemplate_83D7974:: @ 83D7974 - spr_template 10203, 10203, gOamData_837E11C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D791C, sub_80D0FD8 - - .align 2 -gBattleAnimSpriteTemplate_83D798C:: @ 83D798C - spr_template 10203, 10203, gOamData_837E11C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7924, sub_80D10B8 - - .align 2 -gBattleAnimSpriteTemplate_83D79A4:: @ 83D79A4 - spr_template 10203, 10203, gOamData_837E11C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D791C, sub_80D1318 - - .align 2 -gUnknown_083D79BC:: @ 83D79BC - obj_rot_scal_anim_frame 96, -13, 0, 8 - obj_rot_scal_anim_end 0 - - .align 2 -gSpriteAnim_83D79CC:: @ 83D79CC - obj_image_anim_frame 0, 3 - obj_image_anim_frame 4, 3 - obj_image_anim_frame 8, 3 - obj_image_anim_frame 4, 3 - obj_image_anim_frame 0, 3 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D79E4:: @ 83D79E4 - .4byte gSpriteAnim_83D79CC - - .align 2 -gSpriteTemplate_83D79E8:: @ 83D79E8 - spr_template 10207, 10207, gOamData_837DF2C, gSpriteAnimTable_83D79E4, NULL, gDummySpriteAffineAnimTable, sub_80D1A70 - -gUnknown_083D7A00:: @ 83D7A00 - .byte 30, 28 - .byte -20, 24 - .byte 16, 26 - .byte -10, 28 - - .align 2 -gSpriteAnim_83D7A08:: @ 83D7A08 - obj_image_anim_frame 0, 6 - obj_image_anim_frame 16, 6 - obj_image_anim_frame 32, 15 - obj_image_anim_frame 16, 6 - obj_image_anim_frame 0, 6 - obj_image_anim_frame 16, 6, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 32, 15, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 16, 6, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 0, 6 - obj_image_anim_frame 16, 6 - obj_image_anim_frame 32, 15 - obj_image_anim_frame 16, 6 - obj_image_anim_frame 0, 6 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D7A40:: @ 83D7A40 - .4byte gSpriteAnim_83D7A08 - - .align 2 -gBattleAnimSpriteTemplate_83D7A44:: @ 83D7A44 - spr_template 10205, 10205, gOamData_837DF34, gSpriteAnimTable_83D7A40, NULL, gDummySpriteAffineAnimTable, sub_80793C4 - - .align 2 -gUnknown_083D7A5C:: @ 83D7A5C - .2byte 10206 - .2byte 9999 - .2byte 9998 - .2byte 9997 - .2byte 9996 - .2byte 0 - - .align 2 -gBattleAnimSpriteTemplate_83D7A68:: @ 83D7A68 - spr_template 10206, 10206, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D1C08 - - .align 2 -gBattleAnimSpriteTemplate_83D7A80:: @ 83D7A80 - spr_template 10210, 10210, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D1C80 - - .align 2 -gUnknown_083D7A98:: @ 83D7A98 - obj_rot_scal_anim_frame 0x000A, 0xFFF3, 0x00, 0x0A - obj_rot_scal_anim_frame 0xFFF6, 0x000D, 0x00, 0x0A - obj_rot_scal_anim_end - - .align 2 -gBattleAnimSpriteTemplate_83D7AB0:: @ 83D7AB0 - spr_template 10216, 10216, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D1F58 - - .align 2 -gBattleAnimSpriteTemplate_83D7AC8:: @ 83D7AC8 - spr_template 10216, 10216, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D1FDC - - .align 2 -gBattleAnimSpriteTemplate_83D7AE0:: @ 83D7AE0 - spr_template 10216, 10216, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D2064 - - .align 2 -gSpriteAffineAnim_83D7AF8:: @ 83D7AF8 - obj_rot_scal_anim_frame 0x80, 0x80, 0, 0 - obj_rot_scal_anim_frame 0x8, 0x8, 0, 1 - obj_rot_scal_anim_jump 1 - - .align 2 -gSpriteAffineAnimTable_83D7B10:: @ 83D7B10 - .4byte gSpriteAffineAnim_83D7AF8 - - .align 2 -gHiddenPowerOrbSpriteTemplate:: @ 83D7B14 - spr_template 10217, 10217, gOamData_837DF8C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7B10, AnimOrbitFast - - .align 2 -gHiddenPowerOrbScatterSpriteTemplate:: @ 83D7B2C - spr_template 10217, 10217, gOamData_837DFEC, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7B10, AnimOrbitScatter - - .align 2 -gSpriteAffineAnim_83D7B44:: @ 83D7B44 - obj_rot_scal_anim_frame 0x80, 0x80, 0, 0 - obj_rot_scal_anim_frame 0x8, 0x8, 0, 1 - obj_rot_scal_anim_jump 1 - - .align 2 -gSpriteAffineAnimTable_83D7B5C:: @ 83D7B5C - .4byte gSpriteAffineAnim_83D7B44 - - .align 2 -gBattleAnimSpriteTemplate_83D7B60:: @ 83D7B60 - spr_template 10237, 10237, gOamData_837DFE4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7B5C, sub_80D28AC - - .align 2 -gSpriteAnim_83D7B78:: @ 83D7B78 - obj_image_anim_frame 0, 4 - obj_image_anim_frame 4, 4 - obj_image_anim_frame 8, 4 - obj_image_anim_frame 4, 4 - obj_image_anim_frame 0, 4 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D7B90:: @ 83D7B90 - .4byte gSpriteAnim_83D7B78 - - .align 2 -gBattleAnimSpriteTemplate_83D7B94:: @ 83D7B94 - spr_template 10218, 10218, gOamData_837DF2C, gSpriteAnimTable_83D7B90, NULL, gDummySpriteAffineAnimTable, sub_80D2920 - - .align 2 -gSpriteAnim_83D7BAC:: @ 83D7BAC - obj_image_anim_frame 0, 24 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D7BB4:: @ 83D7BB4 - .4byte gSpriteAnim_83D7BAC - - .align 2 -gBattleAnimSpriteTemplate_83D7BB8:: @ 83D7BB8 - spr_template 10220, 10220, gOamData_837DF34, gSpriteAnimTable_83D7BB4, NULL, gDummySpriteAffineAnimTable, sub_80D2938 - - .align 2 -gBattleAnimSpriteTemplate_83D7BD0:: @ 83D7BD0 - spr_template 10219, 10219, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D2A38 - - .align 2 -gSpriteAnim_83D7BE8:: @ 83D7BE8 - obj_image_anim_frame 0, 3 - obj_image_anim_jump 0 - - .align 2 -gSpriteAnim_83D7BF0:: @ 83D7BF0 - obj_image_anim_frame 16, 3 - obj_image_anim_jump 0 - - .align 2 -gSpriteAnimTable_83D7BF8:: @ 83D7BF8 - .4byte gSpriteAnim_83D7BE8 - .4byte gSpriteAnim_83D7BF0 - - .align 2 -gBattleAnimSpriteTemplate_83D7C00:: @ 83D7C00 - spr_template 10221, 10221, gOamData_837DF34, gSpriteAnimTable_83D7BF8, NULL, gDummySpriteAffineAnimTable, sub_80D2ABC - - .align 2 -gSpriteAnim_83D7C18:: @ 83D7C18 - obj_image_anim_frame 0, 4 - obj_image_anim_frame 16, 4 - obj_image_anim_frame 32, 4 - obj_image_anim_frame 48, 4 - obj_image_anim_end - - .align 2 -gSpriteAnim_83D7C2C:: @ 83D7C2C - obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 16, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 32, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 48, 4, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D7C40:: @ 83D7C40 - .4byte gSpriteAnim_83D7C18 - .4byte gSpriteAnim_83D7C2C - - .align 2 -gBattleAnimSpriteTemplate_83D7C48:: @ 83D7C48 - spr_template 10222, 10222, gOamData_837DF34, gSpriteAnimTable_83D7C40, NULL, gDummySpriteAffineAnimTable, sub_80D2BE8 - - .align 2 -gSpriteAnim_83D7C60:: @ 83D7C60 - obj_image_anim_frame 0, 8 - obj_image_anim_frame 16, 8 - obj_image_anim_frame 32, 8 - obj_image_anim_frame 16, 8 - obj_image_anim_end - - .align 2 -gSpriteAnim_83D7C74:: @ 83D7C74 - obj_image_anim_frame 16, 8, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 32, 8, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 16, 8, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_frame 0, 8, OBJ_IMAGE_ANIM_H_FLIP - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D7C88:: @ 83D7C88 - .4byte gSpriteAnim_83D7C60 - .4byte gSpriteAnim_83D7C74 - - .align 2 -gBattleAnimSpriteTemplate_83D7C90:: @ 83D7C90 - spr_template 10215, 10215, gOamData_837DF34, gSpriteAnimTable_83D7C88, NULL, gDummySpriteAffineAnimTable, sub_80D2C38 - - .align 2 -gUnknown_083D7CA8:: @ 83D7CA8 - obj_rot_scal_anim_frame -12, 8, 0, 4 - obj_rot_scal_anim_frame 20, -20, 0, 4 - obj_rot_scal_anim_frame -8, 12, 0, 4 - obj_rot_scal_anim_end 0 - - .align 2 -gBattleAnimSpriteTemplate_83D7CC8:: @ 83D7CC8 - spr_template 10225, 10225, gOamData_837DF34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D2D68 - - .align 2 -gSpriteAffineAnim_83D7CE0:: @ 83D7CE0 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 5 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_83D7CF0:: @ 83D7CF0 - obj_rot_scal_anim_frame 0x0, 0x0, -8, 16 - obj_rot_scal_anim_end 1 - - .align 2 -gSpriteAffineAnim_83D7D00:: @ 83D7D00 - obj_rot_scal_anim_frame 0x0, 0x0, 8, 16 - obj_rot_scal_anim_end 1 - - .align 2 -gSpriteAffineAnimTable_83D7D10:: @ 83D7D10 - .4byte gSpriteAffineAnim_83D7CE0 - .4byte gSpriteAffineAnim_83D7CF0 - .4byte gSpriteAffineAnim_83D7D00 - - .align 2 -gBattleAnimSpriteTemplate_83D7D1C:: @ 83D7D1C - spr_template 10206, 10206, gOamData_837DF8C, gSpriteAnimTable_83D70D8, NULL, gSpriteAffineAnimTable_83D7D10, sub_80D2EC8 - - .align 2 -gBattleAnimSpriteTemplate_83D7D34:: @ 83D7D34 - spr_template 10206, 10206, gOamData_837DF8C, gSpriteAnimTable_83D70D8, NULL, gSpriteAffineAnimTable_83D7D10, sub_80D2E68 - - .align 2 -gSpriteAffineAnim_83D7D4C:: @ 83D7D4C - obj_rot_scal_anim_frame 0x100, 0x100, 0, 0 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_83D7D5C:: @ 83D7D5C - obj_rot_scal_anim_frame 0x200, 0x100, 0, 0 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_83D7D6C:: @ 83D7D6C - .4byte gSpriteAffineAnim_83D7D4C - .4byte gSpriteAffineAnim_83D7D5C - - .align 2 -gBattleAnimSpriteTemplate_83D7D74:: @ 83D7D74 - spr_template 10244, 10244, gOamData_837E13C, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83D7D6C, sub_80D3014 - - .align 2 - .incbin "graphics/unknown/unknown_3D7D8C.4bpp" - .incbin "graphics/unknown/unknown_3D810C.bin" - - .align 2 -gSpriteAnim_83D910C:: @ 83D910C - obj_image_anim_frame 0, 2 - obj_image_anim_frame 8, 2 - obj_image_anim_frame 16, 2 - obj_image_anim_frame 24, 6 - obj_image_anim_frame 32, 2 - obj_image_anim_frame 40, 2 - obj_image_anim_frame 48, 2 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D912C:: @ 83D912C - .4byte gSpriteAnim_83D910C - - .align 2 -gSpriteTemplate_83D9130:: @ 83D9130 - spr_template 10115, 10115, gOamData_837DF74, gSpriteAnimTable_83D912C, NULL, gDummySpriteAffineAnimTable, SetAnimRaindropCallback - - .align 2 -gSpriteAffineAnim_83D9148:: @ 83D9148 - obj_rot_scal_anim_frame 0xFFFB, 0xFFFB, 0, 10 - obj_rot_scal_anim_frame 0x5, 0x5, 0, 10 - obj_rot_scal_anim_jump 0 - - .align 2 -gSpriteAffineAnimTable_83D9160:: @ 83D9160 - .4byte gSpriteAffineAnim_83D9148 - - .align 2 -gSpriteAnim_83D9164:: @ 83D9164 - obj_image_anim_frame 0, 1 - obj_image_anim_frame 4, 5 - obj_image_anim_frame 8, 5 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D9174:: @ 83D9174 - .4byte gSpriteAnim_83D9164 - - .align 2 -gBattleAnimSpriteTemplate_83D9178:: @ 83D9178 - spr_template 10146, 10146, gOamData_837E0AC, gSpriteAnimTable_83D9174, NULL, gSpriteAffineAnimTable_83D9160, sub_80D31C8 - - .align 2 -gSpriteAnim_83D9190:: @ 83D9190 - obj_image_anim_frame 0, 1 - obj_image_anim_end - - .align 2 -gSpriteAnim_83D9198:: @ 83D9198 - obj_image_anim_frame 4, 1 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D91A0:: @ 83D91A0 - .4byte gSpriteAnim_83D9190 - .4byte gSpriteAnim_83D9198 - - .align 2 -gSpriteAffineAnim_83D91A8:: @ 83D91A8 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 1 - obj_rot_scal_anim_frame 0x60, 0x60, 0, 1 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_83D91C0:: @ 83D91C0 - .4byte gSpriteAffineAnim_83D91A8 - - .align 2 -gBattleAnimSpriteTemplate_83D91C4:: @ 83D91C4 - spr_template 10140, 10140, gOamData_837E024, gSpriteAnimTable_83D91A0, NULL, gSpriteAffineAnimTable_83D91C0, sub_80D33B4 - - .align 2 gSpriteAnim_83D91DC:: @ 83D91DC obj_image_anim_frame 0, 1 obj_image_anim_frame 4, 1 diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h index 7215e7fb3..f1e8cbde4 100644 --- a/include/rom_8077ABC.h +++ b/include/rom_8077ABC.h @@ -106,5 +106,6 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite); void sub_80789D4(bool8 a1); void sub_8079AB8(u8 sprite, u8 sprite2); u8 sub_807A4A0(int bank, u8 sprite, int species); +void sub_80794A8(struct Sprite *sprite); #endif // GUARD_ROM_8077ABC_H diff --git a/include/sprite.h b/include/sprite.h index 3ad418356..9a5deb3c4 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -100,12 +100,19 @@ struct AffineAnimJumpCmd u16 target; }; +struct AffineAnimEndCmdAlt +{ + s16 type; + u16 val; +}; + union AffineAnimCmd { s16 type; struct AffineAnimFrameCmd frame; struct AffineAnimLoopCmd loop; struct AffineAnimJumpCmd jump; + struct AffineAnimEndCmdAlt end; // unused in code }; #define AFFINEANIMCMDTYPE_LOOP 0x7FFD @@ -120,6 +127,8 @@ union AffineAnimCmd {.jump = {.type = AFFINEANIMCMDTYPE_JUMP, .target = _target}} #define AFFINEANIMCMD_END \ {.type = AFFINEANIMCMDTYPE_END} +#define AFFINEANIMCMD_END_ALT(_val) \ + {.end = {.type = AFFINEANIMCMDTYPE_END, .val = _val}} struct AffineAnimState { diff --git a/ld_script.txt b/ld_script.txt index 7295d8063..57512c53d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -215,14 +215,9 @@ SECTIONS { src/battle/anim/strike.o(.text); src/battle/anim/evasion.o(.text); src/battle/anim/fang.o(.text); - src/battle/anim/note_wave.o(.text); - src/battle/anim/note_scatter.o(.text); - src/battle/anim/drum.o(.text); - src/battle/anim/note_scatter_2.o(.text); + src/battle/anim/musical.o(.text); src/battle/anim/thought.o(.text); - src/battle/anim/wave_finger.o(.text); - src/battle/anim/spin_finger.o(.text); - src/battle/anim/taunt_finger.o(.text); + src/battle/anim/finger.o(.text); src/battle/anim/unused_5.o(.text); src/battle/anim/unused_6.o(.text); src/battle/anim/unused_7.o(.text); @@ -231,7 +226,6 @@ SECTIONS { src/battle/anim/alert.o(.text); src/battle/anim/sword.o(.text); src/battle/anim/sonic.o(.text); - src/battle/anim/sonic_task.o(.text); src/battle/anim/unused_9.o(.text); src/battle/anim/money.o(.text); src/battle/anim/bullet.o(.text); @@ -247,11 +241,8 @@ SECTIONS { src/battle/anim/thrashing.o(.text); src/battle/anim/draw.o(.text); src/battle/anim/ring.o(.text); - src/battle/anim/egg.o(.text); src/battle/anim/espeed.o(.text); - src/battle/anim/smoke.o(.text); - src/battle/anim/glow.o(.text); - src/battle/anim/note_rain.o(.text); + src/battle/anim/heal_bell.o(.text); src/battle/anim/heart_1.o(.text); src/battle/anim/curtain.o(.text); src/battle/anim/startle.o(.text); @@ -260,8 +251,7 @@ SECTIONS { src/battle/anim/flying_hearts.o(.text); src/battle/anim/love_bg.o(.text); src/battle/anim/scary_face.o(.text); - src/battle/anim/orbit_fast.o(.text); - src/battle/anim/orbit_scatter.o(.text); + src/battle/anim/hidden_power_orbit.o(.text); src/battle/anim/spit.o(.text); src/battle/anim/perceive.o(.text); src/battle/anim/angel.o(.text); @@ -638,6 +628,52 @@ SECTIONS { src/battle/anim/twinkle.o(.rodata); src/battle/anim/strike.o(.rodata); src/battle/anim/fang.o(.rodata); + src/battle/anim/musical.o(.rodata); + src/battle/anim/thought.o(.rodata); + src/battle/anim/finger.o(.rodata); + src/battle/anim/unused_5.o(.rodata); + src/battle/anim/unused_6.o(.rodata); + src/battle/anim/unused_7.o(.rodata); + src/battle/anim/unused_8.o(.rodata); + src/battle/anim/alert.o(.rodata); + src/battle/anim/sword.o(.rodata); + src/battle/anim/sonic.o(.rodata); + src/battle/anim/egg.o(.rodata); + src/battle/anim/unused_9.o(.rodata); + src/battle/anim/money.o(.rodata); + src/battle/anim/bullet.o(.rodata); + src/battle/anim/cyclone.o(.rodata); + src/battle/anim/grip.o(.rodata); + src/battle/anim/guillotine.o(.rodata); + src/battle/anim/splash.o(.rodata); + src/battle/anim/grow.o(.rodata); + src/battle/anim/breath.o(.rodata); + src/battle/anim/anger.o(.rodata); + src/battle/anim/thrashing.o(.rodata); + src/battle/anim/draw.o(.rodata); + src/battle/anim/ring.o(.rodata); + src/battle/anim/espeed.o(.rodata); + src/battle/anim/heal_bell.o(.rodata); + src/battle/anim/heart_1.o(.rodata); + src/battle/anim/startle.o(.rodata); + src/battle/anim/blow_kiss.o(.rodata); + src/battle/anim/kiss_fountain.o(.rodata); + src/battle/anim/flying_hearts.o(.rodata); + src/battle/anim/hidden_power_orbit.o(.rodata); + src/battle/anim/spit.o(.rodata); + src/battle/anim/perceive.o(.rodata); + src/battle/anim/angel.o(.rodata); + src/battle/anim/angel_kiss.o(.rodata); + src/battle/anim/devil.o(.rodata); + src/battle/anim/swipe.o(.rodata); + src/battle/anim/struggle.o(.rodata); + src/battle/anim/uproar.o(.rodata); + src/battle/anim/noise.o(.rodata); + src/battle/anim/note_spin.o(.rodata); + src/battle/anim/guard.o(.rodata); + src/battle/anim/rain.o(.rodata); + src/battle/anim/bubble.o(.rodata); + src/battle/anim/aurora.o(.rodata); data/battle_anim_80CA710.o(.rodata); src/battle/anim/battle_intro.o(.rodata); src/bike.o(.rodata); diff --git a/src/battle/anim/alert.c b/src/battle/anim/alert.c index 72f8ec947..04ae15a5e 100644 --- a/src/battle/anim/alert.c +++ b/src/battle/anim/alert.c @@ -8,9 +8,40 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CF610(struct Sprite* sprite); + // alert (red thunder from the sides of a Pokemon, simulating more alert behavior.) // Used in Kinesis. +const union AnimCmd gSpriteAnim_83D7428[] = +{ + ANIMCMD_FRAME(0, 3, .hFlip = TRUE), + ANIMCMD_FRAME(8, 3, .hFlip = TRUE), + ANIMCMD_FRAME(16, 3, .hFlip = TRUE), + ANIMCMD_FRAME(24, 3, .hFlip = TRUE), + ANIMCMD_FRAME(32, 3, .hFlip = TRUE), + ANIMCMD_FRAME(40, 3, .hFlip = TRUE), + ANIMCMD_FRAME(48, 3, .hFlip = TRUE), + ANIMCMD_LOOP(1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D744C[] = +{ + gSpriteAnim_83D7428, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7450 = +{ + .tileTag = 10075, + .paletteTag = 10075, + .oam = &gOamData_837DF54, + .anims = gSpriteAnimTable_83D744C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CF610, +}; + void sub_80CF610(struct Sprite* sprite) { sub_8078650(sprite); diff --git a/src/battle/anim/angel.c b/src/battle/anim/angel.c index 5ec083887..be5b82ea1 100644 --- a/src/battle/anim/angel.c +++ b/src/battle/anim/angel.c @@ -8,9 +8,33 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D2938(struct Sprite* sprite); + // angel (a little angel descends from somewhere towards a position) // Used in Sweet Kiss. +const union AnimCmd gSpriteAnim_83D7BAC[] = +{ + ANIMCMD_FRAME(0, 24), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7BB4[] = +{ + gSpriteAnim_83D7BAC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7BB8 = +{ + .tileTag = 10220, + .paletteTag = 10220, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7BB4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2938, +}; + void sub_80D2938(struct Sprite* sprite) { s16 r5; diff --git a/src/battle/anim/angel_kiss.c b/src/battle/anim/angel_kiss.c index d5be6e2af..64abff6cf 100644 --- a/src/battle/anim/angel_kiss.c +++ b/src/battle/anim/angel_kiss.c @@ -9,10 +9,23 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D2A38(struct Sprite* sprite); + // angel_kiss (a different variation of kiss_fountain.) // Used in Sweet Kiss. -void sub_80D29CC(struct Sprite* sprite) +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7BD0 = +{ + .tileTag = 10219, + .paletteTag = 10219, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2A38, +}; + +static void sub_80D29CC(struct Sprite* sprite) { sprite->data[5]++; sprite->pos2.x = Sin(sprite->data[3], 5); @@ -50,38 +63,3 @@ void sub_80D2A38(struct Sprite* sprite) } } } - -// this is for the next file, but i didnt feel like deleting it from the original 80C file. -/* void sub_80D2ABC(struct Sprite* sprite) -{ - int var; - s16 var2; - int var3; - if (sprite->data[3] == 0) - { - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - StartSpriteAnim(sprite, 0); - sprite->subpriority = sub_8079E90(gAnimBankTarget) - 1; - sprite->data[2] = 1; - } - - sprite->data[0] += sprite->data[2]; - var = sprite->data[0] * 4; - if (var < 0) - var += 0xFF; - - sprite->data[1] = (sprite->data[0] * 4) -(((var) >> 8) << 8); - if (sprite->data[1] < 0) - sprite->data[1] = 0; - - var3 = sprite->data[1]; - var2 = sprite->data[0]; - var2 /= 4; - sprite->pos2.x = Cos(var3, 30 - var2); - var3 = sprite->data[1]; - var2 = sprite->data[0] / 8; - sprite->pos2.x = Sin(var3, 10 - var2); - if (sprite->data[1] > 0x80 && sprite->data[2] > 0) - sprite->data[2] = 0xFFFF; -} */ diff --git a/src/battle/anim/anger.c b/src/battle/anim/anger.c index 4ea56636b..a50404ddf 100644 --- a/src/battle/anim/anger.c +++ b/src/battle/anim/anger.c @@ -8,9 +8,34 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D09C0(struct Sprite* sprite); + // anger (anger emotes, usually above the Pokemon's head, indicating annoyed emotions.) // Used in Frustration, Rage, Swagger, Torment, and Taunt. +const union AffineAnimCmd gSpriteAffineAnim_83D777C[] = +{ + AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 8), + AFFINEANIMCMD_FRAME(0xFFF5, 0xFFF5, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7794[] = +{ + gSpriteAffineAnim_83D777C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7798 = +{ + .tileTag = 10087, + .paletteTag = 10087, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7794, + .callback = sub_80D09C0, +}; + void sub_80D09C0(struct Sprite* sprite) { u8 bank; diff --git a/src/battle/anim/aurora.c b/src/battle/anim/aurora.c index de145d6a4..5aff17f48 100644 --- a/src/battle/anim/aurora.c +++ b/src/battle/anim/aurora.c @@ -9,9 +9,51 @@ extern s16 gBattleAnimArgs[8]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D33B4(struct Sprite *sprite); static void sub_80D344C(struct Sprite *); static void sub_80D34D4(u8); +const union AnimCmd gSpriteAnim_83D9190[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D9198[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D91A0[] = +{ + gSpriteAnim_83D9190, + gSpriteAnim_83D9198, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D91A8[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1), + AFFINEANIMCMD_FRAME(0x60, 0x60, 0, 1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D91C0[] = +{ + gSpriteAffineAnim_83D91A8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91C4 = +{ + .tileTag = 10140, + .paletteTag = 10140, + .oam = &gOamData_837E024, + .anims = gSpriteAnimTable_83D91A0, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D91C0, + .callback = sub_80D33B4, +}; + void sub_80D33B4(struct Sprite *sprite) { s16 r6; diff --git a/src/battle/anim/blow_kiss.c b/src/battle/anim/blow_kiss.c index 6d762bc7f..0235794c2 100644 --- a/src/battle/anim/blow_kiss.c +++ b/src/battle/anim/blow_kiss.c @@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D1F58(struct Sprite* sprite); static void sub_80D1FA4(struct Sprite* sprite); // blow_kiss (a heart floating across the screen.) // Used in Attract. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7AB0 = +{ + .tileTag = 10216, + .paletteTag = 10216, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D1F58, +}; + void sub_80D1F58(struct Sprite* sprite) { InitAnimSpritePos(sprite, 1); @@ -25,7 +37,7 @@ void sub_80D1F58(struct Sprite* sprite) sprite->callback = sub_80D1FA4; } -void sub_80D1FA4(struct Sprite* sprite) +static void sub_80D1FA4(struct Sprite* sprite) { if (TranslateAnimSpriteByDeltas(sprite) == 0) { diff --git a/src/battle/anim/breath.c b/src/battle/anim/breath.c index 58b5066c0..87c737fac 100644 --- a/src/battle/anim/breath.c +++ b/src/battle/anim/breath.c @@ -8,9 +8,46 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D0930(struct Sprite* sprite); + // breath (a puff of smoke, usually from the mouth or nose of the Pokemon.) // Used in Swagger and Bulk Up. +const union AnimCmd gSpriteAnim_83D7734[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(4, 40, .hFlip = TRUE), + ANIMCMD_FRAME(8, 4, .hFlip = TRUE), + ANIMCMD_FRAME(12, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D7748[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 40), + ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(12, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D775C[] = +{ + gSpriteAnim_83D7734, + gSpriteAnim_83D7748, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7764 = +{ + .tileTag = 10086, + .paletteTag = 10086, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D775C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D0930, +}; + void sub_80D0930(struct Sprite* sprite) { if (GetBattlerSide(gAnimBankAttacker) == 0) diff --git a/src/battle/anim/bubble.c b/src/battle/anim/bubble.c index 27791eedf..e024091d7 100644 --- a/src/battle/anim/bubble.c +++ b/src/battle/anim/bubble.c @@ -8,6 +8,7 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D31C8(struct Sprite* sprite); static void sub_80D32E8(struct Sprite *sprite); static void sub_80D3370(struct Sprite *sprite); static void sub_80D3398(struct Sprite *sprite); @@ -15,6 +16,42 @@ static void sub_80D3398(struct Sprite *sprite); // bubble (indidivual bubble that floats around) // Used in Bubble and Bubblebeam +const union AffineAnimCmd gSpriteAffineAnim_83D9148[] = +{ + AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 10), + AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9160[] = +{ + gSpriteAffineAnim_83D9148, +}; + +const union AnimCmd gSpriteAnim_83D9164[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D9174[] = +{ + gSpriteAnim_83D9164, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9178 = +{ + .tileTag = 10146, + .paletteTag = 10146, + .oam = &gOamData_837E0AC, + .anims = gSpriteAnimTable_83D9174, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D9160, + .callback = sub_80D31C8, +}; + void sub_80D31C8(struct Sprite* sprite) { u8 newSpriteId; diff --git a/src/battle/anim/bullet.c b/src/battle/anim/bullet.c index 035adf394..764903247 100644 --- a/src/battle/anim/bullet.c +++ b/src/battle/anim/bullet.c @@ -9,12 +9,35 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CFFD8(struct Sprite* sprite); static void sub_80D0030(struct Sprite* sprite); static void sub_80D00B4(struct Sprite* sprite); // bullet (shoot seeds as ammunition.) // Used by Bullet Seed. +const union AffineAnimCmd gSpriteAffineAnim_83D7614[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7624[] = +{ + gSpriteAffineAnim_83D7614, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7628 = +{ + .tileTag = 10006, + .paletteTag = 10006, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7624, + .callback = sub_80CFFD8, +}; + void sub_80CFFD8(struct Sprite* sprite) { InitAnimSpritePos(sprite, 1); @@ -26,7 +49,7 @@ void sub_80CFFD8(struct Sprite* sprite) StoreSpriteCallbackInData(sprite, sub_80D0030); } -void sub_80D0030(struct Sprite* sprite) +static void sub_80D0030(struct Sprite* sprite) { int i; u16 rand; @@ -50,7 +73,7 @@ void sub_80D0030(struct Sprite* sprite) sprite->affineAnimPaused = 0; } -void sub_80D00B4(struct Sprite* sprite) +static void sub_80D00B4(struct Sprite* sprite) { sprite->data[0] += sprite->data[7]; sprite->pos2.x = sprite->data[0] >> 8; diff --git a/src/battle/anim/cyclone.c b/src/battle/anim/cyclone.c index 9bfa95e92..8b868a436 100644 --- a/src/battle/anim/cyclone.c +++ b/src/battle/anim/cyclone.c @@ -8,9 +8,34 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D0118(struct Sprite* sprite); + // cyclone (creates a circling motion like a cyclone, usually a wind sprite.) // Used in Razor Wind. +const union AffineAnimCmd gSpriteAffineAnim_83D7640[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x0, 0, 40), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7658[] = +{ + gSpriteAffineAnim_83D7640, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D765C = +{ + .tileTag = 10009, + .paletteTag = 10009, + .oam = &gOamData_837DFDC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7658, + .callback = sub_80D0118, +}; + void sub_80D0118(struct Sprite* sprite) { InitAnimSpritePos(sprite, 0); diff --git a/src/battle/anim/devil.c b/src/battle/anim/devil.c index c628abfc0..8183be2ba 100644 --- a/src/battle/anim/devil.c +++ b/src/battle/anim/devil.c @@ -7,6 +7,37 @@ extern s16 gBattleAnimArgs[8]; extern u8 gAnimBankTarget; +void sub_80D2ABC(struct Sprite *sprite); + +const union AnimCmd gSpriteAnim_83D7BE8[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_83D7BF0[] = +{ + ANIMCMD_FRAME(16, 3), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83D7BF8[] = +{ + gSpriteAnim_83D7BE8, + gSpriteAnim_83D7BF0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7C00 = +{ + .tileTag = 10221, + .paletteTag = 10221, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7BF8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2ABC, +}; + void sub_80D2ABC(struct Sprite *sprite) { if (sprite->data[3] == 0) diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c index 9eea43220..08b09337f 100644 --- a/src/battle/anim/draw.c +++ b/src/battle/anim/draw.c @@ -12,12 +12,24 @@ extern u8 gAnimBankTarget; extern u16 gBattle_BG2_X; extern u16 gBattle_BG1_X; +void sub_80D0E30(struct Sprite* sprite); static void sub_80D0D68(u8 taskId); static void sub_80D0E8C(struct Sprite* sprite); // draw (draws the Pokemon into the world using a pencil.) // Used in Sketch. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D77E0 = +{ + .tileTag = 10002, + .paletteTag = 10002, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D0E30, +}; + void sub_80D0C88(u8 taskId) { struct Task* task = &gTasks[taskId]; @@ -59,7 +71,7 @@ void sub_80D0C88(u8 taskId) task->func = sub_80D0D68; } -void sub_80D0D68(u8 taskId) +static void sub_80D0D68(u8 taskId) { struct Task* task = &gTasks[taskId]; @@ -120,7 +132,7 @@ void sub_80D0E30(struct Sprite* sprite) sprite->callback = sub_80D0E8C; } -void sub_80D0E8C(struct Sprite* sprite) +static void sub_80D0E8C(struct Sprite* sprite) { switch (sprite->data[0]) { diff --git a/src/battle/anim/drum.c b/src/battle/anim/drum.c deleted file mode 100644 index 8dea7e608..000000000 --- a/src/battle/anim/drum.c +++ /dev/null @@ -1,32 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -// drum (using hands to slap the Pokemon's belly in a rhythm.) -// Used in Belly Drum. - -void sub_80CEDF0(struct Sprite* sprite) -{ - s16 a; - if (gBattleAnimArgs[0] == 1) - { - sprite->oam.matrixNum = 8; - a = 16; - } - else - { - a = -16; - } - - sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + a; - sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + 8; - sprite->data[0] = 8; - sprite->callback = WaitAnimForDuration; - StoreSpriteCallbackInData(sprite, DestroyAnimSprite); -} diff --git a/src/battle/anim/egg.c b/src/battle/anim/egg.c index 44ff484f2..5b6d56dac 100644..100755 --- a/src/battle/anim/egg.c +++ b/src/battle/anim/egg.c @@ -2,121 +2,15 @@ #include "rom_8077ABC.h" #include "trig.h" #include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -static void sub_80D13AC(struct Sprite* sprite); -static void sub_80D1424(struct Sprite* sprite); -static void sub_80D144C(struct Sprite* sprite); -static void sub_80D14C4(struct Sprite* sprite); -static void sub_80D1504(struct Sprite* sprite); -static void sub_80D154C(struct Sprite* sprite); -static void sub_80D158C(struct Sprite* sprite); - -// egg (a hatching egg) -// Used in Softboiled. - -void sub_80D1368(struct Sprite* sprite) -{ - s16 r1; - InitAnimSpritePos(sprite, 0); - r1 = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0; - sprite->data[0] = 0x380; - sprite->data[1] = r1; - sprite->data[7] = gBattleAnimArgs[2]; - sprite->callback = sub_80D13AC; -} - -void sub_80D13AC(struct Sprite* sprite) -{ - s16 add; - sprite->pos2.y -= (sprite->data[0] >> 8); - sprite->pos2.x = sprite->data[1] >> 8; - sprite->data[0] -= 32; - add = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0; - sprite->data[1] += add; - if (sprite->pos2.y > 0) - { - sprite->pos1.y += sprite->pos2.y; - sprite->pos1.x += sprite->pos2.x; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - sprite->data[0] = 0; - StartSpriteAffineAnim(sprite, 1); - sprite->callback = sub_80D1424; - } -} - -void sub_80D1424(struct Sprite* sprite) -{ - if (sprite->data[0]++ > 19) - { - StartSpriteAffineAnim(sprite, 2); - sprite->callback = sub_80D144C; - } -} - -void sub_80D144C(struct Sprite* sprite) -{ - if (sprite->affineAnimEnded) - { - StartSpriteAffineAnim(sprite, 1); - sprite->data[0] = 0; - if (sprite->data[7] == 0) - { - sprite->oam.tileNum += 16; - sprite->callback = sub_80D14C4; - } - else - { - sprite->oam.tileNum += 32; - sprite->callback = sub_80D154C; - } - } -} - -void sub_80D14C4(struct Sprite* sprite) -{ - sprite->pos2.y -= 2; - if (++sprite->data[0] == 9) - { - sprite->data[0] = 16; - sprite->data[1] = 0; - REG_BLDCNT = 0x3F40; - REG_BLDALPHA = sprite->data[0]; - sprite->callback = sub_80D1504; - } -} - -void sub_80D1504(struct Sprite* sprite) -{ - if (sprite->data[1]++ % 3 == 0) - { - sprite->data[0]--; - REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8); - if (sprite->data[0] == 0) - sprite->callback = sub_80D154C; - } -} - -void sub_80D154C(struct Sprite* sprite) -{ - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - { - sprite->invisible = 1; - if (sprite->data[7] == 0) - sprite->callback = sub_80D158C; - else - sprite->callback = DestroyAnimSprite; - } -} - -void sub_80D158C(struct Sprite* sprite) -{ - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - DestroyAnimSprite(sprite); -} +#include "random.h" + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7594 = +{ + .tileTag = 10175, + .paletteTag = 10175, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80794A8, +}; diff --git a/src/battle/anim/espeed.c b/src/battle/anim/espeed.c index 2e80afff7..a4f11c823 100644 --- a/src/battle/anim/espeed.c +++ b/src/battle/anim/espeed.c @@ -8,11 +8,7 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern s8 gUnknown_083D7A00[4][2]; - -extern struct AffineAnimFrameCmd gUnknown_083D79BC; -extern struct SpriteTemplate gSpriteTemplate_83D79E8; - +void sub_80D1A70(struct Sprite* sprite); static void sub_80D15E0(u8 taskId); static void sub_80D16A0(u8 taskId); static void sub_80D1808(u8 taskId); @@ -21,13 +17,53 @@ static void sub_80D1930(u8 taskId); // espeed (the Pokemon's width decreases as the sprite becomes vertically compressed) // Used in Extremespeed. +const union AffineAnimCmd gSpriteAffineAnim_83D79BC[] = +{ + AFFINEANIMCMD_FRAME(96, -13, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D79CC[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(4, 3), + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(4, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D79E4[] = +{ + gSpriteAnim_83D79CC, +}; + +const struct SpriteTemplate gSpriteTemplate_83D79E8 = +{ + .tileTag = 10207, + .paletteTag = 10207, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D79E4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D1A70, +}; + +const s8 gUnknown_083D7A00[][2] = +{ + {30, 28}, + {-20, 24}, + {16, 26}, + {-10, 28}, +}; + // apply espeed void sub_80D15A4(u8 taskId) { struct Task* task = &gTasks[taskId]; u8 spriteId = GetAnimBattlerSpriteId(0); task->data[0] = spriteId; - sub_80798F4(task, spriteId, &gUnknown_083D79BC); + sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D79BC); task->func = sub_80D15E0; } @@ -239,3 +275,13 @@ void sub_80D1930(u8 taskId) break; } } + +void sub_80D1A70(struct Sprite* sprite) +{ + sprite->invisible = gTasks[sprite->data[0]].data[5]; + if (sprite->animEnded) + { + gTasks[sprite->data[0]].data[sprite->data[1]]--; + DestroySprite(sprite); + } +} diff --git a/src/battle/anim/finger.c b/src/battle/anim/finger.c new file mode 100644 index 000000000..66ca4ca06 --- /dev/null +++ b/src/battle/anim/finger.c @@ -0,0 +1,256 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +extern void sub_80CEF44(u8 bank, struct Sprite* sprite); + +void sub_80CF040(struct Sprite* sprite); +void sub_80CF0BC(struct Sprite* sprite); +void sub_80CF1C8(struct Sprite* sprite); +static void sub_80CF088(struct Sprite* sprite); +static void sub_80CF138(struct Sprite* sprite); +static void sub_80CF158(struct Sprite* sprite); +static void sub_80CF228(struct Sprite* sprite); +static void sub_80CF264(struct Sprite* sprite); + +// wave_finger +// Used by Metronome, Follow Me, and Taunt. + +const union AffineAnimCmd gSpriteAffineAnim_83D7238[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x1E, 0x1E, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7250[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 11), + AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 11), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7278[] = +{ + AFFINEANIMCMD_FRAME(16, 16, 0, 0), + AFFINEANIMCMD_FRAME(30, 30, 0, 8), + AFFINEANIMCMD_FRAME(0, 0, 0, 16), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0, 0, 4, 11), + AFFINEANIMCMD_FRAME(0, 0, -4, 11), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_FRAME(-30, -30, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D72C0[] = +{ + gSpriteAffineAnim_83D7238, + gSpriteAffineAnim_83D7250, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D72C8 = +{ + .tileTag = 10064, + .paletteTag = 10064, + .oam = &gOamData_837DFF4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D72C0, + .callback = sub_80CF040, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D72E0 = +{ + .tileTag = 10064, + .paletteTag = 10064, + .oam = &gOamData_837DF94, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D72C0, + .callback = sub_80CF0BC, +}; + +const union AnimCmd gSpriteAnim_83D72F8[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D7300[] = +{ + ANIMCMD_FRAME(0, 1, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D7308[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D7328[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7348[] = +{ + gSpriteAnim_83D72F8, + gSpriteAnim_83D7300, + gSpriteAnim_83D7308, + gSpriteAnim_83D7328, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7358 = +{ + .tileTag = 10214, + .paletteTag = 10214, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7348, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CF1C8, +}; + +void sub_80CF040(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gAnimBankAttacker; + else + bank = gAnimBankTarget; + + sub_80CEF44(bank, sprite); + sprite->data[0] = 0; + StoreSpriteCallbackInData(sprite, sub_80CF088); + sprite->callback = sub_80785E4; +} + +static void sub_80CF088(struct Sprite* sprite) +{ + if (++sprite->data[0] > 16) + { + StartSpriteAffineAnim(sprite, 1); + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_80785E4; + } +} + +void sub_80CF0BC(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gAnimBankAttacker; + else + bank = gAnimBankTarget; + + sprite->pos1.x = GetBattlerSpriteCoord(bank, 0); + sprite->pos1.y = sub_807A100(bank, 2); + if (sprite->pos1.y <= 9) + sprite->pos1.y = 10; + + sprite->data[0] = 1; + sprite->data[1] = 0; + sprite->data[2] = sprite->subpriority; + sprite->data[3] = sprite->subpriority + 4; + sprite->data[4] = 0; + StoreSpriteCallbackInData(sprite, sub_80CF138); + sprite->callback = sub_80785E4; +} + +static void sub_80CF138(struct Sprite* sprite) +{ + if (++sprite->data[4] > 12) + sprite->callback = sub_80CF158; +} + +static void sub_80CF158(struct Sprite* sprite) +{ + s16 temp; + s16 temp2; + sprite->data[1] += 4; + if (sprite->data[1] > 0xFE) + { + if (--sprite->data[0] == 0) + { + sprite->pos2.x = 0; + sprite->callback = sub_80CF088; + return; + } + else + { + sprite->data[1] &= 0xFF; + } + } + + if (sprite->data[1] > 0x4F) + sprite->subpriority = sprite->data[3]; + + if (sprite->data[1] > 0x9F) + sprite->subpriority = sprite->data[2]; + + temp = gSineTable[sprite->data[1]]; + sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1); +} + +void sub_80CF1C8(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gAnimBankAttacker; + else + bank = gAnimBankTarget; + + sub_80CEF44(bank, sprite); + if (GetBattlerSide(bank) == 0) + { + StartSpriteAnim(sprite, 0); + sprite->data[0] = 2; + } + else + { + StartSpriteAnim(sprite, 1); + sprite->data[0] = 3; + } + + sprite->callback = sub_80CF228; +} + +static void sub_80CF228(struct Sprite* sprite) +{ + if (++sprite->data[1] > 10) + { + sprite->data[1] = 0; + StartSpriteAnim(sprite, sprite->data[0]); + StoreSpriteCallbackInData(sprite, sub_80CF264); + sprite->callback = sub_8078600; + } +} + +static void sub_80CF264(struct Sprite* sprite) +{ + if (++sprite->data[1] > 5) + DestroyAnimSprite(sprite); +} diff --git a/src/battle/anim/flying_hearts.c b/src/battle/anim/flying_hearts.c index f20416535..2bba6c4cb 100644 --- a/src/battle/anim/flying_hearts.c +++ b/src/battle/anim/flying_hearts.c @@ -8,11 +8,23 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D2064(struct Sprite* sprite); static void sub_80D2094(struct Sprite* sprite); // flying_hearts (hearts float upward from the bottom of the screen.) // Used in Attract. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7AE0 = +{ + .tileTag = 10216, + .paletteTag = 10216, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2064, +}; + void sub_80D2064(struct Sprite* sprite) { sprite->pos1.x = gBattleAnimArgs[0]; @@ -23,7 +35,7 @@ void sub_80D2064(struct Sprite* sprite) StoreSpriteCallbackInData(sprite, sub_80D2094); } -void sub_80D2094(struct Sprite* sprite) +static void sub_80D2094(struct Sprite* sprite) { s16 y; sprite->data[2] += sprite->data[1]; diff --git a/src/battle/anim/glow.c b/src/battle/anim/glow.c deleted file mode 100644 index 174655080..000000000 --- a/src/battle/anim/glow.c +++ /dev/null @@ -1,55 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "ewram.h" -#include "palette.h" -#include "decompress.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern u16 gUnknown_083D7A5C[5]; - -extern const u8 gBattleAnimSpritePalette_206[]; - -// glow (a whitening effect where the Pokemon glows white in a cycle.) -// Used in Heal Bell. - -void sub_80D1ADC(u8 taskId) -{ - int i; - u8 sp[8]; - void* src; - void* dest; - void* what; - sp[0] = IndexOfSpritePaletteTag(0x27DE); - for (i = 1; i <= 4; i++) - { - sp[i] = AllocSpritePalette(0x2710 - i); - } - - src = &gBattleAnimSpritePalette_206; - dest = (IsContest()) ? gSharedMem + 0x18000 - 0x3800: gSharedMem + 0x18000; - LZDecompressWram(src, dest); - for (i = 0; i <= 4; i++) - { - what = ((IsContest()) ? gSharedMem + 0x14800 : gSharedMem + 0x18000) + (i << 5); - LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32); - } - - DestroyAnimVisualTask(taskId); -} - -void sub_80D1B80(u8 taskId) -{ - int i; - for (i = 0; i < 5; i++) - { - FreeSpritePaletteByTag(gUnknown_083D7A5C[i]); - } - - DestroyAnimVisualTask(taskId); -} diff --git a/src/battle/anim/grip.c b/src/battle/anim/grip.c index a56a02d82..1ec779c09 100644 --- a/src/battle/anim/grip.c +++ b/src/battle/anim/grip.c @@ -8,11 +8,45 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D0178(struct Sprite* sprite); static void sub_80D020C(struct Sprite* sprite); // grip (does a slash which is capable of mirroring for the effect of "gripping".) // Used in Vice Grip. +const union AnimCmd gSpriteAnim_83D7674[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 20), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D7684[] = +{ + ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 20, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7694[] = +{ + gSpriteAnim_83D7674, + gSpriteAnim_83D7684, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D769C = +{ + .tileTag = 10138, + .paletteTag = 10138, + .oam = &gOamData_837E054, + .anims = gSpriteAnimTable_83D7694, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D0178, +}; + void sub_80D0178(struct Sprite* sprite) { s16 r7 = 32; @@ -37,7 +71,7 @@ void sub_80D0178(struct Sprite* sprite) StoreSpriteCallbackInData(sprite, sub_80D020C); } -void sub_80D020C(struct Sprite* sprite) +static void sub_80D020C(struct Sprite* sprite) { if (sprite->animEnded == 1) DestroyAnimSprite(sprite); diff --git a/src/battle/anim/grow.c b/src/battle/anim/grow.c index 924629048..ad535ad7f 100644 --- a/src/battle/anim/grow.c +++ b/src/battle/anim/grow.c @@ -8,22 +8,28 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern struct AffineAnimFrameCmd gUnknown_083D7714; - static void sub_80D0904(u8 taskId); // grow (grows a Pokemon then shrinks back to normal size.) // Used in Swagger and Bulk Up. +const union AffineAnimCmd gSpriteAffineAnim_83D7714[] = +{ + AFFINEANIMCMD_FRAME(-4, -5, 0, 12), + AFFINEANIMCMD_FRAME(0, 0, 0, 24), + AFFINEANIMCMD_FRAME(4, 5, 0, 12), + AFFINEANIMCMD_END, +}; + void sub_80D08C8(u8 taskId) { struct Task* task = &gTasks[taskId]; u8 spriteId = GetAnimBattlerSpriteId(0); - sub_80798F4(task, spriteId, &gUnknown_083D7714); + sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D7714); task->func = sub_80D0904; } -void sub_80D0904(u8 taskId) +static void sub_80D0904(u8 taskId) { struct Task* task = &gTasks[taskId]; if (!sub_807992C(task)) diff --git a/src/battle/anim/guard.c b/src/battle/anim/guard.c index d54fa4abc..341f74372 100644 --- a/src/battle/anim/guard.c +++ b/src/battle/anim/guard.c @@ -8,9 +8,40 @@ extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern u16 gBattleTypeFlags; +void sub_80D3014(struct Sprite *sprite); + // guard (moves guard rings upwards) // Used in Safeguard. +const union AffineAnimCmd gSpriteAffineAnim_83D7D4C[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7D5C[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7D6C[] = +{ + gSpriteAffineAnim_83D7D4C, + gSpriteAffineAnim_83D7D5C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7D74 = +{ + .tileTag = 10244, + .paletteTag = 10244, + .oam = &gOamData_837E13C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7D6C, + .callback = sub_80D3014, +}; + void sub_80D3014(struct Sprite *sprite) { if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsAnimBankSpriteVisible(gAnimBankAttacker ^ 2)) diff --git a/src/battle/anim/guillotine.c b/src/battle/anim/guillotine.c index 0768e8334..eb1bc7733 100644 --- a/src/battle/anim/guillotine.c +++ b/src/battle/anim/guillotine.c @@ -8,6 +8,7 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D0228(struct Sprite* sprite); static void sub_80D02D0(struct Sprite* sprite); static void sub_80D0344(struct Sprite* sprite); static void sub_80D03A8(struct Sprite* sprite); @@ -15,6 +16,39 @@ static void sub_80D03A8(struct Sprite* sprite); // guillotine (does a reverse grip where the slices can reverse at a given period.) // Used in Guillotine. +const union AnimCmd gSpriteAnim_83D76B4[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D76C4[] = +{ + ANIMCMD_FRAME(0, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(16, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 1, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D76D4[] = +{ + gSpriteAnim_83D76B4, + gSpriteAnim_83D76C4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D76DC = +{ + .tileTag = 10138, + .paletteTag = 10138, + .oam = &gOamData_837E054, + .anims = gSpriteAnimTable_83D76D4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D0228, +}; + void sub_80D0228(struct Sprite* sprite) { s16 r8 = 32; @@ -43,7 +77,7 @@ void sub_80D0228(struct Sprite* sprite) sprite->callback = sub_80D02D0; } -void sub_80D02D0(struct Sprite* sprite) +static void sub_80D02D0(struct Sprite* sprite) { if (TranslateAnimSpriteByDeltas(sprite) && sprite->animEnded == 1) { @@ -62,7 +96,7 @@ void sub_80D02D0(struct Sprite* sprite) } } -void sub_80D0344(struct Sprite* sprite) +static void sub_80D0344(struct Sprite* sprite) { if (sprite->data[3]) { @@ -83,7 +117,7 @@ void sub_80D0344(struct Sprite* sprite) } } -void sub_80D03A8(struct Sprite* sprite) +static void sub_80D03A8(struct Sprite* sprite) { if (TranslateAnimSpriteByDeltas(sprite) != 0) DestroyAnimSprite(sprite); diff --git a/src/battle/anim/heal_bell.c b/src/battle/anim/heal_bell.c new file mode 100644 index 000000000..09029c9ff --- /dev/null +++ b/src/battle/anim/heal_bell.c @@ -0,0 +1,132 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "ewram.h" +#include "palette.h" +#include "decompress.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +extern const u8 gBattleAnimSpritePalette_206[]; + +void sub_80D1C08(struct Sprite* sprite); + +// Used in Heal Bell. + +const union AnimCmd gSpriteAnim_83D7A08[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6, .hFlip = TRUE), + ANIMCMD_FRAME(32, 15, .hFlip = TRUE), + ANIMCMD_FRAME(16, 6, .hFlip = TRUE), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(0, 6), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7A40[] = +{ + gSpriteAnim_83D7A08, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7A44 = +{ + .tileTag = 10205, + .paletteTag = 10205, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7A40, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80793C4, +}; + +const u16 gUnknown_083D7A5C[] = +{ + 10206, + 9999, + 9998, + 9997, + 9996, + 0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7A68 = +{ + .tileTag = 10206, + .paletteTag = 10206, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D1C08, +}; + +void sub_80D1ADC(u8 taskId) +{ + int i; + u8 sp[8]; + void* src; + void* dest; + void* what; + sp[0] = IndexOfSpritePaletteTag(0x27DE); + for (i = 1; i <= 4; i++) + { + sp[i] = AllocSpritePalette(0x2710 - i); + } + + src = &gBattleAnimSpritePalette_206; + dest = (IsContest()) ? gSharedMem + 0x18000 - 0x3800: gSharedMem + 0x18000; + LZDecompressWram(src, dest); + for (i = 0; i <= 4; i++) + { + what = ((IsContest()) ? gSharedMem + 0x14800 : gSharedMem + 0x18000) + (i << 5); + LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32); + } + + DestroyAnimVisualTask(taskId); +} + +void sub_80D1B80(u8 taskId) +{ + int i; + for (i = 0; i < 5; i++) + { + FreeSpritePaletteByTag(gUnknown_083D7A5C[i]); + } + + DestroyAnimVisualTask(taskId); +} + +static void sub_80D1BA8(struct Sprite* sprite, u8 a, u8 b) +{ + u8 tile; + tile = (b & 1); + tile = ((-tile | tile) >> 31) & 32; + sprite->oam.tileNum += tile + (a << 2); + sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083D7A5C[b >> 1]); +} + +void sub_80D1C08(struct Sprite* sprite) +{ + InitAnimSpritePos(sprite, 0); + if (GetBattlerSide(gAnimBankAttacker) != 0) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[3]; + sprite->callback = StartTranslateAnimSpriteByDeltas; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); +} diff --git a/src/battle/anim/heart_1.c b/src/battle/anim/heart_1.c index 857169e62..5522d4551 100644 --- a/src/battle/anim/heart_1.c +++ b/src/battle/anim/heart_1.c @@ -8,9 +8,22 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D1C80(struct Sprite* sprite); + // heart_1 (a floating heart in a wave pattern upward.) // Used in Charm, Covet, and when a Pokemon is infatuated. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7A80 = +{ + .tileTag = 10210, + .paletteTag = 10210, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D1C80, +}; + void sub_80D1C80(struct Sprite* sprite) { if (++sprite->data[0] == 1) diff --git a/src/battle/anim/hidden_power_orbit.c b/src/battle/anim/hidden_power_orbit.c new file mode 100644 index 000000000..ed680b2bd --- /dev/null +++ b/src/battle/anim/hidden_power_orbit.c @@ -0,0 +1,120 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +void AnimOrbitFast(struct Sprite* sprite); +void AnimOrbitScatter(struct Sprite* sprite); +static void AnimOrbitFastStep(struct Sprite* sprite); +static void AnimOrbitScatterStep(struct Sprite* sprite); + +const union AffineAnimCmd gSpriteAffineAnim_83D7AF8[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7B10[] = +{ + gSpriteAffineAnim_83D7AF8, +}; + +const struct SpriteTemplate gHiddenPowerOrbSpriteTemplate = +{ + .tileTag = 10217, + .paletteTag = 10217, + .oam = &gOamData_837DF8C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7B10, + .callback = AnimOrbitFast, +}; + +const struct SpriteTemplate gHiddenPowerOrbScatterSpriteTemplate = +{ + .tileTag = 10217, + .paletteTag = 10217, + .oam = &gOamData_837DFEC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7B10, + .callback = AnimOrbitScatter, +}; + +// Orbits a sphere in an ellipse around the mon. +// Used by MOVE_HIDDEN_POWER +// arg 0: duration +// arg 1: initial wave offset +void AnimOrbitFast(struct Sprite* sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->affineAnimPaused = 1; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[7] = sub_8079E90(gAnimBankAttacker); + sprite->callback = AnimOrbitFastStep; + sprite->callback(sprite); +} + +static void AnimOrbitFastStep(struct Sprite* sprite) +{ + if ((u16)(sprite->data[1] - 0x40) <= 0x7F) + sprite->subpriority = sprite->data[7] + 1; + else + sprite->subpriority = sprite->data[7] - 1; + + sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); + sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8); + sprite->data[1] = (sprite->data[1] + 9) & 0xFF; + switch (sprite->data[5]) + { + case 1: + sprite->data[2] -= 0x400; + sprite->data[3] -= 0x100; + if (++sprite->data[4] == sprite->data[0]) + { + sprite->data[5] = 2; + return; + } + break; + case 0: + sprite->data[2] += 0x400; + sprite->data[3] += 0x100; + if (++sprite->data[4] == sprite->data[0]) + { + sprite->data[4] = 0; + sprite->data[5] = 1; + } + break; + } + + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + DestroyAnimSprite(sprite); +} + +// Moves orbs away from the mon, based on where they are in their orbit. +// Used in MOVE_HIDDEN_POWER. +// arg 0: initial wave offset +void AnimOrbitScatter(struct Sprite* sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->data[0] = Sin(gBattleAnimArgs[0], 10); + sprite->data[1] = Cos(gBattleAnimArgs[0], 7); + sprite->callback = AnimOrbitScatterStep; +} + +static void AnimOrbitScatterStep(struct Sprite* sprite) +{ + sprite->pos2.x += sprite->data[0]; + sprite->pos2.y += sprite->data[1]; + if (sprite->pos1.x + sprite->pos2.x + 16 > 0x110u || sprite->pos1.y + sprite->pos2.y > 0xA0 || sprite->pos1.y + sprite->pos2.y < -16) + DestroyAnimSprite(sprite); +} diff --git a/src/battle/anim/kiss_fountain.c b/src/battle/anim/kiss_fountain.c index d3270ee65..8ab3fcded 100644 --- a/src/battle/anim/kiss_fountain.c +++ b/src/battle/anim/kiss_fountain.c @@ -8,9 +8,22 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D1FDC(struct Sprite* sprite); + // kiss_fountain (a series of hearts pour out of a target Pokemon.) // Used in Attract and Sweet Kiss. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7AC8 = +{ + .tileTag = 10216, + .paletteTag = 10216, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D1FDC, +}; + void sub_80D1FDC(struct Sprite* sprite) { if (sprite->data[0] == 0) diff --git a/src/battle/anim/money.c b/src/battle/anim/money.c index 1407e8cd7..3960b5e1a 100644 --- a/src/battle/anim/money.c +++ b/src/battle/anim/money.c @@ -8,11 +8,57 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CFE9C(struct Sprite* sprite); +void sub_80CFF50(struct Sprite* sprite); static void sub_80CFF68(struct Sprite* sprite); // money // Used by Pay Day. +const union AnimCmd gSpriteAnim_83D75C4[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D75CC[] = +{ + gSpriteAnim_83D75C4, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D75D0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D75E0[] = +{ + gSpriteAffineAnim_83D75D0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D75E4 = +{ + .tileTag = 10100, + .paletteTag = 10100, + .oam = &gOamData_837DF8C, + .anims = gSpriteAnimTable_83D75CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CFE9C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D75FC = +{ + .tileTag = 10100, + .paletteTag = 10100, + .oam = &gOamData_837DF8C, + .anims = gSpriteAnimTable_83D75CC, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D75E0, + .callback = sub_80CFF50, +}; + void sub_80CFE9C(struct Sprite* sprite) { s16 r6; @@ -43,7 +89,7 @@ void sub_80CFF50(struct Sprite* sprite) sprite->callback = sub_80CFF68; } -void sub_80CFF68(struct Sprite* sprite) +static void sub_80CFF68(struct Sprite* sprite) { sprite->data[0] += 0x80; sprite->pos2.x = sprite->data[0] >> 8; diff --git a/src/battle/anim/musical.c b/src/battle/anim/musical.c new file mode 100644 index 000000000..17836ace7 --- /dev/null +++ b/src/battle/anim/musical.c @@ -0,0 +1,393 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +void sub_80CEB0C(struct Sprite* sprite); +void sub_80CECE8(struct Sprite* sprite); +void sub_80CEDF0(struct Sprite* sprite); +void sub_80CEE60(struct Sprite* sprite); +static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); +static void sub_80CEC1C(struct Sprite* sprite); +static void sub_80CED78(struct Sprite* sprite); +static void sub_80CEEE8(struct Sprite* sprite); + +const union AnimCmd gSpriteAnim_83D7098[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D70A0[] = +{ + ANIMCMD_FRAME(4, 10), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D70A8[] = +{ + ANIMCMD_FRAME(8, 41), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D70B0[] = +{ + ANIMCMD_FRAME(12, 10), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D70B8[] = +{ + ANIMCMD_FRAME(16, 10), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D70C0[] = +{ + ANIMCMD_FRAME(20, 10), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D70C8[] = +{ + ANIMCMD_FRAME(0, 10, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D70D0[] = +{ + ANIMCMD_FRAME(4, 10, .vFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D70D8[] = +{ + gSpriteAnim_83D7098, + gSpriteAnim_83D70A0, + gSpriteAnim_83D70A8, + gSpriteAnim_83D70B0, + gSpriteAnim_83D70B8, + gSpriteAnim_83D70C0, + gSpriteAnim_83D70C8, + gSpriteAnim_83D70D0, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D70F8[] = +{ + AFFINEANIMCMD_FRAME(0xC, 0xC, 0, 16), + AFFINEANIMCMD_FRAME(0xFFF4, 0xFFF4, 0, 16), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7110[] = +{ + gSpriteAffineAnim_83D70F8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7114 = +{ + .tileTag = 10072, + .paletteTag = 10072, + .oam = &gOamData_837DFEC, + .anims = gSpriteAnimTable_83D70D8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7110, + .callback = sub_80CEB0C, +}; + +const u16 gUnknown_083D712C[][6] = +{ + {10072, RGB(31, 31, 31), RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)}, + {10097, RGB(31, 31, 31), RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)}, + {10185, RGB(31, 31, 31), RGB(31, 31, 24), RGB(31, 31, 17), RGB(31, 31, 10), RGB(31, 31, 3)}, + {10175, RGB(31, 31, 31), RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)}, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D715C = +{ + .tileTag = 10072, + .paletteTag = 10072, + .oam = &gOamData_837DFEC, + .anims = gSpriteAnimTable_83D70D8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7110, + .callback = sub_80CECE8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7174 = +{ + .tileTag = 10193, + .paletteTag = 10193, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CEDF0, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D718C[] = +{ + AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D71A4[] = +{ + gSpriteAffineAnim_83D718C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D71A8 = +{ + .tileTag = 10072, + .paletteTag = 10072, + .oam = &gOamData_837DFEC, + .anims = gSpriteAnimTable_83D70D8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D71A4, + .callback = sub_80CEE60, +}; + +// musical (music notes, drum) +// Used by Grasswhistle, Belly Drum, and Sing. + +// rainbow effect for musical notes +void sub_80CEA20(u8 taskId) +{ + u16 i; + u16 j; + u16 index; + + index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]); + if (index != 0xFF) + { + index = (index << 4) + 0x100; + for (i = 1; i < 6; i++) + { + gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; + } + } + + for (j = 1; j < 4; j++) + { + index = AllocSpritePalette(gUnknown_083D712C[j][0]); + if (index != 0xFF) + { + index = (index << 4) + 0x100; + for (i = 1; i < 6; i++) + { + gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i]; + } + } + } + DestroyAnimVisualTask(taskId); +} + +// clears the rainbow effect for musical notes. +void sub_80CEAD8(u8 taskId) +{ + u16 i; + for (i = 1; i < 4; i++) + { + FreeSpritePaletteByTag(gUnknown_083D712C[i][0]); + } + + DestroyAnimVisualTask(taskId); +} + +void sub_80CEB0C(struct Sprite* sprite) +{ + u8 index; + u8 a; + u8 b; + sub_8078650(sprite); + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF) + sprite->oam.paletteNum = index; + + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = 0; + sprite->data[3] = gBattleAnimArgs[2]; + if (IsContest()) + { + a = 0x30; + b = 0x28; + } + else + { + a = GetBattlerSpriteCoord(gAnimBankTarget, 2); + b = GetBattlerSpriteCoord(gAnimBankTarget, 3); + } + + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 0x28); + sprite->callback = sub_80CEC1C; +} + +static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e) +{ + int f; + int g; + if (a < 0) + e = -e; + + f = a << 8; + g = f / e; + if (g == 0) + g = 1; + + *c = f / g; + *d = (b << 8) / g; +} + +static void sub_80CEC1C(struct Sprite* sprite) +{ + int b; + s16 a; + int c; + u8 index; + sprite->data[0]++; + b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + sprite->pos2.y = Sin(b, 15); + a = (u16)sprite->pos1.y; + c = (u16)sprite->pos1.x; + + if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80) + { + move_anim_8074EE0(sprite); + } + else + { + if (sprite->data[3] && ++sprite->data[2] > sprite->data[3]) + { + sprite->data[2] = 0; + if (++sprite->data[1] > 3) + sprite->data[1] = 0; + + index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data[1]][0]); + if (index != 0xFF) + sprite->oam.paletteNum = index; + } + } +} + +// note_scatter +// Used by Teeter Dance. + +void sub_80CECE8(struct Sprite* sprite) +{ + int a; + if (GetBattlerSide(gAnimBankAttacker) == 1) + { + a = gBattleAnimArgs[1]; + (u16)gBattleAnimArgs[1] = -a; + } + + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + gBattleAnimArgs[2]; + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5; + sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5; + sprite->callback = sub_80CED78; +} + +static void sub_80CED78(struct Sprite* sprite) +{ + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + if (sprite->data[0] > 5 && sprite->data[3] == 0) + { + sprite->data[2] = (sprite->data[2] + 16) & 0xFF; + sprite->pos2.x = Cos(sprite->data[2], 18); + sprite->pos2.y = Sin(sprite->data[2], 18); + if (sprite->data[2] == 0) + sprite->data[3] = 1; + } + + if (++sprite->data[0] == 0x30) + move_anim_8074EE0(sprite); +} + +// drum (using hands to slap the Pokemon's belly in a rhythm.) +// Used in Belly Drum. + +void sub_80CEDF0(struct Sprite* sprite) +{ + s16 a; + if (gBattleAnimArgs[0] == 1) + { + sprite->oam.matrixNum = 8; + a = 16; + } + else + { + a = -16; + } + + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + a; + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + 8; + sprite->data[0] = 8; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +// note_scatter_2 (slower scatter of notes.) +// Used in Belly Drum. + +void sub_80CEE60(struct Sprite* sprite) +{ + s16 a; + u8 index; + sub_8078650(sprite); + sprite->pos1.y += 8; + StartSpriteAnim(sprite, gBattleAnimArgs[1]); + index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]); + if (index != 0xFF) + sprite->oam.paletteNum = index; + + a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20; + sprite->data[0] = 40; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = a + sprite->data[1]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->data[3] - 40; + InitAnimSpriteTranslationDeltas(sprite); + sprite->data[5] = gBattleAnimArgs[3]; + sprite->callback = sub_80CEEE8; +} + +static void sub_80CEEE8(struct Sprite* sprite) +{ + if (TranslateAnimSpriteByDeltas(sprite) == 0) + { + s16 a; + a = Sin(sprite->data[5], 8); + if (sprite->pos2.x < 0) + a = -a; + + sprite->pos2.x += a; + sprite->pos2.y += Sin(sprite->data[5], 4); + sprite->data[5] = (sprite->data[5] + 8) & 0xFF; + } + else + { + DestroyAnimSprite(sprite); + } +} diff --git a/src/battle/anim/noise.c b/src/battle/anim/noise.c index 0b6498318..6a6f6c10a 100644 --- a/src/battle/anim/noise.c +++ b/src/battle/anim/noise.c @@ -6,11 +6,23 @@ extern s16 gBattleAnimArgs[8]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D2D68(struct Sprite* sprite); static void sub_80D2E30(struct Sprite *); // noise (moving music note) // Used in Uproar. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7CC8 = +{ + .tileTag = 10225, + .paletteTag = 10225, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2D68, +}; + void sub_80D2D68(struct Sprite* sprite) { int var1; diff --git a/src/battle/anim/note_rain.c b/src/battle/anim/note_rain.c index 4e12c7e1a..26ae96c3a 100644 --- a/src/battle/anim/note_rain.c +++ b/src/battle/anim/note_rain.c @@ -8,30 +8,5 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern u16 gUnknown_083D7A5C[5]; - // note_rain (notes rain from a source point, usually a bell.) // Used in Heal Bell. - -void sub_80D1BA8(struct Sprite* sprite, u8 a, u8 b) -{ - u8 tile; - tile = (b & 1); - tile = ((-tile | tile) >> 31) & 32; - sprite->oam.tileNum += tile + (a << 2); - sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083D7A5C[b >> 1]); -} - -void sub_80D1C08(struct Sprite* sprite) -{ - InitAnimSpritePos(sprite, 0); - if (GetBattlerSide(gAnimBankAttacker) != 0) - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[3]; - sprite->callback = StartTranslateAnimSpriteByDeltas; - StoreSpriteCallbackInData(sprite, DestroyAnimSprite); - sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); -} diff --git a/src/battle/anim/note_scatter.c b/src/battle/anim/note_scatter.c deleted file mode 100644 index 53afa7d78..000000000 --- a/src/battle/anim/note_scatter.c +++ /dev/null @@ -1,54 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -static void sub_80CED78(struct Sprite* sprite); - -// note_scatter -// Used by Teeter Dance. - -void sub_80CECE8(struct Sprite* sprite) -{ - int a; - if (GetBattlerSide(gAnimBankAttacker) == 1) - { - a = gBattleAnimArgs[1]; - (u16)gBattleAnimArgs[1] = -a; - } - - sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[1]; - sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + gBattleAnimArgs[2]; - StartSpriteAnim(sprite, gBattleAnimArgs[0]); - sprite->data[2] = 0; - sprite->data[3] = 0; - sprite->data[4] = sprite->pos1.x << 4; - sprite->data[5] = sprite->pos1.y << 4; - sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5; - sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5; - sprite->callback = sub_80CED78; -} - -void sub_80CED78(struct Sprite* sprite) -{ - sprite->data[4] += sprite->data[6]; - sprite->data[5] += sprite->data[7]; - sprite->pos1.x = sprite->data[4] >> 4; - sprite->pos1.y = sprite->data[5] >> 4; - if (sprite->data[0] > 5 && sprite->data[3] == 0) - { - sprite->data[2] = (sprite->data[2] + 16) & 0xFF; - sprite->pos2.x = Cos(sprite->data[2], 18); - sprite->pos2.y = Sin(sprite->data[2], 18); - if (sprite->data[2] == 0) - sprite->data[3] = 1; - } - - if (++sprite->data[0] == 0x30) - move_anim_8074EE0(sprite); -} diff --git a/src/battle/anim/note_scatter_2.c b/src/battle/anim/note_scatter_2.c deleted file mode 100644 index 262afb8bf..000000000 --- a/src/battle/anim/note_scatter_2.c +++ /dev/null @@ -1,57 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern u16 gUnknown_083D712C[4][6]; - -static void sub_80CEEE8(struct Sprite* sprite); - -// note_scatter_2 (slower scatter of notes.) -// Used in Belly Drum. - -void sub_80CEE60(struct Sprite* sprite) -{ - s16 a; - u8 index; - sub_8078650(sprite); - sprite->pos1.y += 8; - StartSpriteAnim(sprite, gBattleAnimArgs[1]); - index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]); - if (index != 0xFF) - sprite->oam.paletteNum = index; - - a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20; - sprite->data[0] = 40; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = a + sprite->data[1]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sprite->data[3] - 40; - InitAnimSpriteTranslationDeltas(sprite); - sprite->data[5] = gBattleAnimArgs[3]; - sprite->callback = sub_80CEEE8; -} - -void sub_80CEEE8(struct Sprite* sprite) -{ - if (TranslateAnimSpriteByDeltas(sprite) == 0) - { - s16 a; - a = Sin(sprite->data[5], 8); - if (sprite->pos2.x < 0) - a = -a; - - sprite->pos2.x += a; - sprite->pos2.y += Sin(sprite->data[5], 4); - sprite->data[5] = (sprite->data[5] + 8) & 0xFF; - } - else - { - DestroyAnimSprite(sprite); - } -} diff --git a/src/battle/anim/note_spin.c b/src/battle/anim/note_spin.c index 026ee1856..c3d6bdf52 100644 --- a/src/battle/anim/note_spin.c +++ b/src/battle/anim/note_spin.c @@ -7,12 +7,63 @@ extern s16 gBattleAnimArgs[8]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +extern const union AnimCmd *const gSpriteAnimTable_83D70D8[]; + +void sub_80D2E68(struct Sprite *sprite); +void sub_80D2EC8(struct Sprite *sprite); static void sub_80D2F80(struct Sprite *); static void sub_80D2FA4(struct Sprite *); // note_spin (spins music notes around, and rotates them) // Used in Perish Song. +const union AffineAnimCmd gSpriteAffineAnim_83D7CE0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 5), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7CF0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 16), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7D00[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 16), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7D10[] = +{ + gSpriteAffineAnim_83D7CE0, + gSpriteAffineAnim_83D7CF0, + gSpriteAffineAnim_83D7D00, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7D1C = +{ + .tileTag = 10206, + .paletteTag = 10206, + .oam = &gOamData_837DF8C, + .anims = gSpriteAnimTable_83D70D8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7D10, + .callback = sub_80D2EC8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7D34 = +{ + .tileTag = 10206, + .paletteTag = 10206, + .oam = &gOamData_837DF8C, + .anims = gSpriteAnimTable_83D70D8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7D10, + .callback = sub_80D2E68, +}; + void sub_80D2E68(struct Sprite *sprite) { if (sprite->data[0] == 0) diff --git a/src/battle/anim/note_wave.c b/src/battle/anim/note_wave.c deleted file mode 100644 index 1f3db8c56..000000000 --- a/src/battle/anim/note_wave.c +++ /dev/null @@ -1,143 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "palette.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern u16 gUnknown_083D712C[4][6]; - -static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); -static void sub_80CEC1C(struct Sprite* sprite); - -// note_wave -// Used by Grasswhistle, Belly Drum, and Sing. - -// rainbow effect for musical notes -void sub_80CEA20(u8 taskId) -{ - u16 i; - u16 j; - u16 index; - - index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]); - if (index != 0xFF) - { - index = (index << 4) + 0x100; - for (i = 1; i < 6; i++) - { - gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; - } - } - - for (j = 1; j < 4; j++) - { - index = AllocSpritePalette(gUnknown_083D712C[j][0]); - if (index != 0xFF) - { - index = (index << 4) + 0x100; - for (i = 1; i < 6; i++) - { - gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i]; - } - } - } - DestroyAnimVisualTask(taskId); -} - -// clears the rainbow effect for musical notes. -void sub_80CEAD8(u8 taskId) -{ - u16 i; - for (i = 1; i < 4; i++) - { - FreeSpritePaletteByTag(gUnknown_083D712C[i][0]); - } - - DestroyAnimVisualTask(taskId); -} - -void sub_80CEB0C(struct Sprite* sprite) -{ - u8 index; - u8 a; - u8 b; - sub_8078650(sprite); - StartSpriteAnim(sprite, gBattleAnimArgs[0]); - if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF) - sprite->oam.paletteNum = index; - - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[2] = 0; - sprite->data[3] = gBattleAnimArgs[2]; - if (IsContest()) - { - a = 0x30; - b = 0x28; - } - else - { - a = GetBattlerSpriteCoord(gAnimBankTarget, 2); - b = GetBattlerSpriteCoord(gAnimBankTarget, 3); - } - - sprite->data[4] = sprite->pos1.x << 4; - sprite->data[5] = sprite->pos1.y << 4; - sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 0x28); - sprite->callback = sub_80CEC1C; -} - -void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e) -{ - int f; - int g; - if (a < 0) - e = -e; - - f = a << 8; - g = f / e; - if (g == 0) - g = 1; - - *c = f / g; - *d = (b << 8) / g; -} - -void sub_80CEC1C(struct Sprite* sprite) -{ - int b; - s16 a; - int c; - u8 index; - sprite->data[0]++; - b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); - sprite->data[4] += sprite->data[6]; - sprite->data[5] += sprite->data[7]; - sprite->pos1.x = sprite->data[4] >> 4; - sprite->pos1.y = sprite->data[5] >> 4; - sprite->pos2.y = Sin(b, 15); - a = (u16)sprite->pos1.y; - c = (u16)sprite->pos1.x; - - if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80) - { - move_anim_8074EE0(sprite); - } - else - { - if (sprite->data[3] && ++sprite->data[2] > sprite->data[3]) - { - sprite->data[2] = 0; - if (++sprite->data[1] > 3) - sprite->data[1] = 0; - - index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data[1]][0]); - if (index != 0xFF) - sprite->oam.paletteNum = index; - } - } -} diff --git a/src/battle/anim/orbit_fast.c b/src/battle/anim/orbit_fast.c deleted file mode 100644 index 67a59583f..000000000 --- a/src/battle/anim/orbit_fast.c +++ /dev/null @@ -1,63 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -static void AnimOrbitFastStep(struct Sprite* sprite); - -// Orbits a sphere in an ellipse around the mon. -// Used by MOVE_HIDDEN_POWER -// arg 0: duration -// arg 1: initial wave offset -void AnimOrbitFast(struct Sprite* sprite) -{ - sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); - sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); - sprite->affineAnimPaused = 1; - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[7] = sub_8079E90(gAnimBankAttacker); - sprite->callback = AnimOrbitFastStep; - sprite->callback(sprite); -} - -static void AnimOrbitFastStep(struct Sprite* sprite) -{ - if ((u16)(sprite->data[1] - 0x40) <= 0x7F) - sprite->subpriority = sprite->data[7] + 1; - else - sprite->subpriority = sprite->data[7] - 1; - - sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); - sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8); - sprite->data[1] = (sprite->data[1] + 9) & 0xFF; - switch (sprite->data[5]) - { - case 1: - sprite->data[2] -= 0x400; - sprite->data[3] -= 0x100; - if (++sprite->data[4] == sprite->data[0]) - { - sprite->data[5] = 2; - return; - } - break; - case 0: - sprite->data[2] += 0x400; - sprite->data[3] += 0x100; - if (++sprite->data[4] == sprite->data[0]) - { - sprite->data[4] = 0; - sprite->data[5] = 1; - } - break; - } - - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - DestroyAnimSprite(sprite); -} diff --git a/src/battle/anim/orbit_scatter.c b/src/battle/anim/orbit_scatter.c deleted file mode 100644 index bd03ee78c..000000000 --- a/src/battle/anim/orbit_scatter.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -static void AnimOrbitScatterStep(struct Sprite* sprite); - -// Moves orbs away from the mon, based on where they are in their orbit. -// Used in MOVE_HIDDEN_POWER. -// arg 0: initial wave offset -void AnimOrbitScatter(struct Sprite* sprite) -{ - sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); - sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); - sprite->data[0] = Sin(gBattleAnimArgs[0], 10); - sprite->data[1] = Cos(gBattleAnimArgs[0], 7); - sprite->callback = AnimOrbitScatterStep; -} - -static void AnimOrbitScatterStep(struct Sprite* sprite) -{ - sprite->pos2.x += sprite->data[0]; - sprite->pos2.y += sprite->data[1]; - if (sprite->pos1.x + sprite->pos2.x + 16 > 0x110u || sprite->pos1.y + sprite->pos2.y > 0xA0 || sprite->pos1.y + sprite->pos2.y < -16) - DestroyAnimSprite(sprite); -} diff --git a/src/battle/anim/perceive.c b/src/battle/anim/perceive.c index 14db096c6..ceca55141 100644 --- a/src/battle/anim/perceive.c +++ b/src/battle/anim/perceive.c @@ -8,10 +8,38 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D2920(struct Sprite* sprite); + // perceive (shows a sparkle in a set of eyes, usually for heightened perception.) // Used in Glare, Tickle, and Scary Face. -void sub_80D2904(struct Sprite* sprite) +const union AnimCmd gSpriteAnim_83D7B78[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7B90[] = +{ + gSpriteAnim_83D7B78, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7B94 = +{ + .tileTag = 10218, + .paletteTag = 10218, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_83D7B90, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2920, +}; + +static void sub_80D2904(struct Sprite* sprite) { if (sprite->animEnded) DestroyAnimSprite(sprite); diff --git a/src/battle/anim/rain.c b/src/battle/anim/rain.c index b38233e3c..421304be8 100644 --- a/src/battle/anim/rain.c +++ b/src/battle/anim/rain.c @@ -5,13 +5,44 @@ #include "task.h" extern s16 gBattleAnimArgs[8]; -extern const struct SpriteTemplate gSpriteTemplate_83D9130[]; -static void MoveAnimRaindrop(struct Sprite *); +void SetAnimRaindropCallback(struct Sprite *sprite); +static void MoveAnimRaindrop(struct Sprite *sprite); // rain (spawns and animates raindrops) // Used in Rain Dance and general rain animation. + const u8 gUnknown_3D7D8C[] = INCBIN_U8("graphics/unknown/unknown_3D7D8C.4bpp"); + const u8 gUnknown_3D810C[] = INCBIN_U8("graphics/unknown/unknown_3D810C.bin"); + + const union AnimCmd gSpriteAnim_83D910C[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(8, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(24, 6), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(40, 2), + ANIMCMD_FRAME(48, 2), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D912C[] = +{ + gSpriteAnim_83D910C, +}; + +const struct SpriteTemplate gSpriteTemplate_83D9130 = +{ + .tileTag = 10115, + .paletteTag = 10115, + .oam = &gOamData_837DF74, + .anims = gSpriteAnimTable_83D912C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SetAnimRaindropCallback, +}; + void CreateAnimRaindrops(u8 taskId) { if (gTasks[taskId].data[0] == 0) @@ -27,7 +58,7 @@ void CreateAnimRaindrops(u8 taskId) { u8 x = Random() % 240; u8 y = Random() % 80; - CreateSprite(gSpriteTemplate_83D9130, x, y, 4); + CreateSprite(&gSpriteTemplate_83D9130, x, y, 4); } if (gTasks[taskId].data[0] == gTasks[taskId].data[3]) diff --git a/src/battle/anim/ring.c b/src/battle/anim/ring.c index b317cdaed..024728ecc 100644 --- a/src/battle/anim/ring.c +++ b/src/battle/anim/ring.c @@ -12,11 +12,201 @@ extern u8 gAnimBankTarget; extern u8 gBankSpriteIds[]; +void sub_80D0FD8(struct Sprite* sprite); +void sub_80D10B8(struct Sprite* sprite); +void sub_80D1318(struct Sprite* sprite); +void sub_80D1368(struct Sprite* sprite); static void sub_80D1098(struct Sprite* sprite); +static void sub_80D13AC(struct Sprite* sprite); +static void sub_80D1424(struct Sprite* sprite); +static void sub_80D144C(struct Sprite* sprite); +static void sub_80D14C4(struct Sprite* sprite); +static void sub_80D1504(struct Sprite* sprite); +static void sub_80D154C(struct Sprite* sprite); +static void sub_80D158C(struct Sprite* sprite); // ring (a ring that stretches outward from the Pokemon.) // Used in Aromatherapy and Heal Bell. +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D77F8 = +{ + .tileTag = 10197, + .paletteTag = 10197, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8079534, +}; + +const union AnimCmd gSpriteAnim_83D7810[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7824[] = +{ + gSpriteAnim_83D7810, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7828 = +{ + .tileTag = 10198, + .paletteTag = 10198, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7824, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80793C4, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7840[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7860[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7870[] = +{ + AFFINEANIMCMD_FRAME(0xFFF8, 0x4, 0, 8), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0x10, 0xFFF8, 0, 8), + AFFINEANIMCMD_FRAME(0xFFF0, 0x8, 0, 8), + AFFINEANIMCMD_LOOP(1), + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D78B0[] = +{ + gSpriteAffineAnim_83D7840, + gSpriteAffineAnim_83D7860, + gSpriteAffineAnim_83D7870, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D78BC = +{ + .tileTag = 10202, + .paletteTag = 10202, + .oam = &gOamData_837E114, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D78B0, + .callback = sub_80D1368, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D78D4[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 30), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D78EC[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 15), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7904[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 45), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D791C[] = +{ + gSpriteAffineAnim_83D78D4, + gSpriteAffineAnim_83D78EC, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7924[] = +{ + gSpriteAffineAnim_83D7904, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7928 = +{ + .tileTag = 10203, + .paletteTag = 10203, + .oam = &gOamData_837DFFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D791C, + .callback = sub_80793C4, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D7940[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 30), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7958[] = +{ + gSpriteAffineAnim_83D7940, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D795C = +{ + .tileTag = 10203, + .paletteTag = 10203, + .oam = &gOamData_837E11C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7958, + .callback = sub_80793C4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7974 = +{ + .tileTag = 10203, + .paletteTag = 10203, + .oam = &gOamData_837E11C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D791C, + .callback = sub_80D0FD8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D798C = +{ + .tileTag = 10203, + .paletteTag = 10203, + .oam = &gOamData_837E11C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7924, + .callback = sub_80D10B8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D79A4 = +{ + .tileTag = 10203, + .paletteTag = 10203, + .oam = &gOamData_837E11C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D791C, + .callback = sub_80D1318, +}; + void sub_80D0FD8(struct Sprite* sprite) { u8 bank = 0; @@ -154,3 +344,105 @@ void sub_80D1318(struct Sprite* sprite) sprite->callback = sub_80793C4; sub_80793C4(sprite); } + +void sub_80D1368(struct Sprite* sprite) +{ + s16 r1; + InitAnimSpritePos(sprite, 0); + r1 = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0; + sprite->data[0] = 0x380; + sprite->data[1] = r1; + sprite->data[7] = gBattleAnimArgs[2]; + sprite->callback = sub_80D13AC; +} + +static void sub_80D13AC(struct Sprite* sprite) +{ + s16 add; + sprite->pos2.y -= (sprite->data[0] >> 8); + sprite->pos2.x = sprite->data[1] >> 8; + sprite->data[0] -= 32; + add = (GetBattlerSide(gAnimBankAttacker)) ? -0xA0 : 0xA0; + sprite->data[1] += add; + if (sprite->pos2.y > 0) + { + sprite->pos1.y += sprite->pos2.y; + sprite->pos1.x += sprite->pos2.x; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 0; + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_80D1424; + } +} + +static void sub_80D1424(struct Sprite* sprite) +{ + if (sprite->data[0]++ > 19) + { + StartSpriteAffineAnim(sprite, 2); + sprite->callback = sub_80D144C; + } +} + +static void sub_80D144C(struct Sprite* sprite) +{ + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 1); + sprite->data[0] = 0; + if (sprite->data[7] == 0) + { + sprite->oam.tileNum += 16; + sprite->callback = sub_80D14C4; + } + else + { + sprite->oam.tileNum += 32; + sprite->callback = sub_80D154C; + } + } +} + +static void sub_80D14C4(struct Sprite* sprite) +{ + sprite->pos2.y -= 2; + if (++sprite->data[0] == 9) + { + sprite->data[0] = 16; + sprite->data[1] = 0; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = sprite->data[0]; + sprite->callback = sub_80D1504; + } +} + +static void sub_80D1504(struct Sprite* sprite) +{ + if (sprite->data[1]++ % 3 == 0) + { + sprite->data[0]--; + REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8); + if (sprite->data[0] == 0) + sprite->callback = sub_80D154C; + } +} + +static void sub_80D154C(struct Sprite* sprite) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + sprite->invisible = 1; + if (sprite->data[7] == 0) + sprite->callback = sub_80D158C; + else + sprite->callback = DestroyAnimSprite; + } +} + +static void sub_80D158C(struct Sprite* sprite) +{ + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimSprite(sprite); +} diff --git a/src/battle/anim/smoke.c b/src/battle/anim/smoke.c deleted file mode 100644 index 7ab873e63..000000000 --- a/src/battle/anim/smoke.c +++ /dev/null @@ -1,22 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -// smoke (smoke on the ground around a sprite.) -// Used in Extremespeed. - -void sub_80D1A70(struct Sprite* sprite) -{ - sprite->invisible = gTasks[sprite->data[0]].data[5]; - if (sprite->animEnded) - { - gTasks[sprite->data[0]].data[sprite->data[1]]--; - DestroySprite(sprite); - } -} diff --git a/src/battle/anim/sonic.c b/src/battle/anim/sonic.c index a882be73c..0494c42ed 100644 --- a/src/battle/anim/sonic.c +++ b/src/battle/anim/sonic.c @@ -3,11 +3,114 @@ #include "trig.h" #include "battle_anim.h" #include "sound.h" +#include "battle.h" #include "battle_anim_80CA710.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +extern u8 gBanksBySide[]; +extern u16 gBattleTypeFlags; + +extern void sub_80D4CA4(struct Sprite *sprite); + +void AnimSonicBoomProjectile(struct Sprite* sprite); +void sub_80CF8B8(struct Sprite* sprite); + +const struct SpriteTemplate gSonicBoomSpriteTemplate = +{ + .tileTag = 10003, + .paletteTag = 10003, + .oam = &gOamData_837E134, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSonicBoomProjectile, +}; + +const struct SpriteTemplate gSpriteTemplate_83D74BC = +{ + .tileTag = 10003, + .paletteTag = 10003, + .oam = &gOamData_837E074, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CF8B8, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D74D4[] = +{ + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), + AFFINEANIMCMD_FRAME(0x7, 0x7, 0, -56), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D74EC[] = +{ + AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10), + AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10), + AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10), + AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10), + AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10), + AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10), + AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D752C[] = +{ + gSpriteAffineAnim_83D74D4, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7530[] = +{ + gSpriteAffineAnim_83D74EC, +}; + +const struct SpriteTemplate gSupersonicWaveSpriteTemplate = +{ + .tileTag = 10163, + .paletteTag = 10163, + .oam = &gOamData_837E034, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D752C, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +const struct SpriteTemplate gScreechWaveSpriteTemplate = +{ + .tileTag = 10164, + .paletteTag = 10164, + .oam = &gOamData_837E034, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D752C, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7564 = +{ + .tileTag = 10260, + .paletteTag = 10260, + .oam = &gOamData_837E03C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D752C, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D757C = +{ + .tileTag = 10288, + .paletteTag = 10288, + .oam = &gOamData_837E034, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7530, + .callback = sub_80D4CA4, +}; // Moves a projectile towards the target mon. The sprite is rotated to be pointing // in the same direction it's moving. @@ -138,3 +241,137 @@ void sub_80CF8B8(struct Sprite* sprite) sprite->callback = sub_80CF814; } } + +void sub_80CF9F8(u8 taskId) +{ + if (gTasks[taskId].data[1] == 0) + DestroyAnimVisualTask(taskId); +} + +void sub_80CFA20(u8 taskId) +{ + if (gTasks[taskId].data[0]-- <= 0) + { + u8 spriteId; + struct Sprite* sprite; + spriteId = CreateSprite(&gSpriteTemplate_83D74BC, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]); + sprite = &gSprites[spriteId]; + switch (gTasks[taskId].data[4]) + { + case 1: + sprite->oam.matrixNum |= 24; + break; + case 2: + sprite->oam.matrixNum = 8; + break; + } + + sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6]; + sprite->data[7] = taskId; + gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId; + gTasks[taskId].data[0] = gTasks[taskId].data[3]; + gTasks[taskId].data[1]++; + PlaySE12WithPanning(0x9A, BattleAnimAdjustPanning(-0x3F)); + if (gTasks[taskId].data[1] > 2) + gTasks[taskId].func = sub_80CF9F8; + } +} + +void sub_80CFB04(u8 taskId) +{ + s16 r9 = 0; + s16 r6 = 0; + s16 sp1 = 0; + s16 sp2 = 0; + s16 r4; + + if (IsContest()) + { + gTasks[taskId].data[4] = 2; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + if (gBattleAnimArgs[2] & 1) + gBattleAnimArgs[2] &= ~1; + else + gBattleAnimArgs[2] |= 1; + } + else + { + if ((gBanksBySide[gAnimBankTarget] & 1) == 0) + { + gTasks[taskId].data[4] = 1; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + if (gBattleAnimArgs[2] & 1) + gBattleAnimArgs[2] &= ~1; + else + gBattleAnimArgs[2] |= 1; + } + } + r6 = gTasks[taskId].data[9] = GetBattlerSpriteCoord(gAnimBankAttacker, 0); + r9 = gTasks[taskId].data[10] = GetBattlerSpriteCoord(gAnimBankAttacker, 1); + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && IsAnimBankSpriteVisible(gAnimBankTarget ^ 2)) + { + SetAverageBattlerPositions(gAnimBankTarget, 0, &sp1, &sp2); + } + else + { + sp1 = GetBattlerSpriteCoord(gAnimBankTarget, 0); + sp2 = GetBattlerSpriteCoord(gAnimBankTarget, 1); + } + + sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0]; + sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1]; + if (sp1 >= r6) + r4 = sp1 - r6; + else + r4 = r6 - sp1; + + gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1)); + gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80); + gTasks[taskId].data[7] = gBattleAnimArgs[2]; + if (sp2 >= r9) + { + r4 = sp2 - r9; + gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) & ~1; + } + else + { + r4 = r9 - sp2; + gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1; + } + + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + if (gBattleAnimArgs[4] & 0x80) + { + gBattleAnimArgs[4] ^= 0x80; + if (gBattleAnimArgs[4] >= 64) + { + u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64); + gTasks[taskId].data[2] = var; + } + else + { + u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4]; + gTasks[taskId].data[2] = var; + } + } + else + { + if (gBattleAnimArgs[4] >= 64) + { + u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64); + gTasks[taskId].data[2] = var; + } + else + { + u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4]; + gTasks[taskId].data[2] = var; + } + } + + if (gTasks[taskId].data[2] < 3) + gTasks[taskId].data[2] = 3; + + gTasks[taskId].func = sub_80CFA20; +} diff --git a/src/battle/anim/sonic_task.c b/src/battle/anim/sonic_task.c deleted file mode 100644 index dc5d60efa..000000000 --- a/src/battle/anim/sonic_task.c +++ /dev/null @@ -1,152 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "battle_anim_80CA710.h" -#include "battle.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern u8 gBanksBySide[]; -extern u16 gBattleTypeFlags; -extern struct SpriteTemplate gSpriteTemplate_83D74BC; - -// sonic_task (the task functions for the "sonic" effect.) -// Used in Air Cutter and Sonic Boom. - -void sub_80CF9F8(u8 taskId) -{ - if (gTasks[taskId].data[1] == 0) - DestroyAnimVisualTask(taskId); -} - -void sub_80CFA20(u8 taskId) -{ - if (gTasks[taskId].data[0]-- <= 0) - { - u8 spriteId; - struct Sprite* sprite; - spriteId = CreateSprite(&gSpriteTemplate_83D74BC, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]); - sprite = &gSprites[spriteId]; - switch (gTasks[taskId].data[4]) - { - case 1: - sprite->oam.matrixNum |= 24; - break; - case 2: - sprite->oam.matrixNum = 8; - break; - } - - sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6]; - sprite->data[7] = taskId; - gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId; - gTasks[taskId].data[0] = gTasks[taskId].data[3]; - gTasks[taskId].data[1]++; - PlaySE12WithPanning(0x9A, BattleAnimAdjustPanning(-0x3F)); - if (gTasks[taskId].data[1] > 2) - gTasks[taskId].func = sub_80CF9F8; - } -} - -void sub_80CFB04(u8 taskId) -{ - s16 r9 = 0; - s16 r6 = 0; - s16 sp1 = 0; - s16 sp2 = 0; - s16 r4; - - if (IsContest()) - { - gTasks[taskId].data[4] = 2; - gBattleAnimArgs[0] = -gBattleAnimArgs[0]; - if (gBattleAnimArgs[2] & 1) - gBattleAnimArgs[2] &= ~1; - else - gBattleAnimArgs[2] |= 1; - } - else - { - if ((gBanksBySide[gAnimBankTarget] & 1) == 0) - { - gTasks[taskId].data[4] = 1; - gBattleAnimArgs[0] = -gBattleAnimArgs[0]; - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - if (gBattleAnimArgs[2] & 1) - gBattleAnimArgs[2] &= ~1; - else - gBattleAnimArgs[2] |= 1; - } - } - r6 = gTasks[taskId].data[9] = GetBattlerSpriteCoord(gAnimBankAttacker, 0); - r9 = gTasks[taskId].data[10] = GetBattlerSpriteCoord(gAnimBankAttacker, 1); - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - && IsAnimBankSpriteVisible(gAnimBankTarget ^ 2)) - { - SetAverageBattlerPositions(gAnimBankTarget, 0, &sp1, &sp2); - } - else - { - sp1 = GetBattlerSpriteCoord(gAnimBankTarget, 0); - sp2 = GetBattlerSpriteCoord(gAnimBankTarget, 1); - } - - sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0]; - sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1]; - if (sp1 >= r6) - r4 = sp1 - r6; - else - r4 = r6 - sp1; - - gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1)); - gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80); - gTasks[taskId].data[7] = gBattleAnimArgs[2]; - if (sp2 >= r9) - { - r4 = sp2 - r9; - gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) & ~1; - } - else - { - r4 = r9 - sp2; - gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1; - } - - gTasks[taskId].data[3] = gBattleAnimArgs[3]; - if (gBattleAnimArgs[4] & 0x80) - { - gBattleAnimArgs[4] ^= 0x80; - if (gBattleAnimArgs[4] >= 64) - { - u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64); - gTasks[taskId].data[2] = var; - } - else - { - u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4]; - gTasks[taskId].data[2] = var; - } - } - else - { - if (gBattleAnimArgs[4] >= 64) - { - u16 var = sub_8079E90(gAnimBankTarget) + (gBattleAnimArgs[4] - 64); - gTasks[taskId].data[2] = var; - } - else - { - u16 var = sub_8079E90(gAnimBankTarget) - gBattleAnimArgs[4]; - gTasks[taskId].data[2] = var; - } - } - - if (gTasks[taskId].data[2] < 3) - gTasks[taskId].data[2] = 3; - - gTasks[taskId].func = sub_80CFA20; -} diff --git a/src/battle/anim/spin_finger.c b/src/battle/anim/spin_finger.c deleted file mode 100644 index 1ce3aa0d0..000000000 --- a/src/battle/anim/spin_finger.c +++ /dev/null @@ -1,73 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern void sub_80CF088(struct Sprite* sprite); -static void sub_80CF138(struct Sprite* sprite); -static void sub_80CF158(struct Sprite* sprite); - -// spin_finger -// Used in Follow Me. - -void sub_80CF0BC(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gAnimBankAttacker; - else - bank = gAnimBankTarget; - - sprite->pos1.x = GetBattlerSpriteCoord(bank, 0); - sprite->pos1.y = sub_807A100(bank, 2); - if (sprite->pos1.y <= 9) - sprite->pos1.y = 10; - - sprite->data[0] = 1; - sprite->data[1] = 0; - sprite->data[2] = sprite->subpriority; - sprite->data[3] = sprite->subpriority + 4; - sprite->data[4] = 0; - StoreSpriteCallbackInData(sprite, sub_80CF138); - sprite->callback = sub_80785E4; -} - -void sub_80CF138(struct Sprite* sprite) -{ - if (++sprite->data[4] > 12) - sprite->callback = sub_80CF158; -} - -void sub_80CF158(struct Sprite* sprite) -{ - s16 temp; - s16 temp2; - sprite->data[1] += 4; - if (sprite->data[1] > 0xFE) - { - if (--sprite->data[0] == 0) - { - sprite->pos2.x = 0; - sprite->callback = sub_80CF088; - return; - } - else - { - sprite->data[1] &= 0xFF; - } - } - - if (sprite->data[1] > 0x4F) - sprite->subpriority = sprite->data[3]; - - if (sprite->data[1] > 0x9F) - sprite->subpriority = sprite->data[2]; - - temp = gSineTable[sprite->data[1]]; - sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1); -} diff --git a/src/battle/anim/spit.c b/src/battle/anim/spit.c index 36fcb788c..792d7e0eb 100644 --- a/src/battle/anim/spit.c +++ b/src/battle/anim/spit.c @@ -8,10 +8,35 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D28AC(struct Sprite* sprite); + // spit (hurls sprites outward from the pokemon. Similar to orbit_fast, but takes another argument.) // Used in Spit Up. -void sub_80D287C(struct Sprite* sprite) +const union AffineAnimCmd gSpriteAffineAnim_83D7B44[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7B5C[] = +{ + gSpriteAffineAnim_83D7B44, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7B60 = +{ + .tileTag = 10237, + .paletteTag = 10237, + .oam = &gOamData_837DFE4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7B5C, + .callback = sub_80D28AC, +}; + +static void sub_80D287C(struct Sprite* sprite) { sprite->pos2.x += sprite->data[0]; sprite->pos2.y += sprite->data[1]; diff --git a/src/battle/anim/splash.c b/src/battle/anim/splash.c index d6caaf0f6..c01748953 100644 --- a/src/battle/anim/splash.c +++ b/src/battle/anim/splash.c @@ -8,13 +8,19 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern struct AffineAnimFrameCmd gUnknown_083D76F4; - static void sub_80D07AC(u8 taskId); // splash (splash effect of hopping up and down) // Used in Splash, Mud Sport, and Sketch. +const union AffineAnimCmd gSpriteAffineAnim_83D76F4[] = +{ + AFFINEANIMCMD_FRAME(-6, 4, 0, 8), + AFFINEANIMCMD_FRAME(10, -10, 0, 8), + AFFINEANIMCMD_FRAME(-4, 6, 0, 8), + AFFINEANIMCMD_END, +}; + void sub_80D074C(u8 taskId) { struct Task* task = &gTasks[taskId]; @@ -30,7 +36,7 @@ void sub_80D074C(u8 taskId) task->data[2] = gBattleAnimArgs[1]; task->data[3] = 0; task->data[4] = 0; - sub_80798F4(task, spriteId, &gUnknown_083D76F4); + sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D76F4); task->func = sub_80D07AC; } } @@ -78,7 +84,7 @@ void sub_80D07AC(u8 taskId) } else { - sub_80798F4(task, task->data[0], &gUnknown_083D76F4); + sub_80798F4(task, task->data[0], &gSpriteAffineAnim_83D76F4); task->data[1] = 0; } } diff --git a/src/battle/anim/startle.c b/src/battle/anim/startle.c index 95462bd9f..b23c7ac9e 100644 --- a/src/battle/anim/startle.c +++ b/src/battle/anim/startle.c @@ -8,18 +8,23 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern struct AffineAnimFrameCmd gUnknown_083D7A98; - // startle (the pokemon sprite shrivels upward and restores after a brief time.) // Used in Fake Out, Trick, and Astonish. +const union AffineAnimCmd gSpriteAffineAnim_83D7A98[] = +{ + AFFINEANIMCMD_FRAME(0x000A, 0xFFF3, 0x00, 0x0A), + AFFINEANIMCMD_FRAME(0xFFF6, 0x000D, 0x00, 0x0A), + AFFINEANIMCMD_END, +}; + // opponent void sub_80D1E38(u8 taskId) { u8 spriteId = GetAnimBattlerSpriteId(1); if (++gTasks[taskId].data[0] == 1) { - sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(1), &gUnknown_083D7A98); + sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(1), &gSpriteAffineAnim_83D7A98); gSprites[spriteId].pos2.x = 4; } else @@ -40,7 +45,7 @@ void sub_80D1EC8(u8 taskId) u8 spriteId = GetAnimBattlerSpriteId(0); if (++gTasks[taskId].data[0] == 1) { - sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(0), &gUnknown_083D7A98); + sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(0), &gSpriteAffineAnim_83D7A98); gSprites[spriteId].pos2.x = 4; } else diff --git a/src/battle/anim/struggle.c b/src/battle/anim/struggle.c index 6a1355e1b..2bcf3727e 100644 --- a/src/battle/anim/struggle.c +++ b/src/battle/anim/struggle.c @@ -7,8 +7,44 @@ extern s16 gBattleAnimArgs[8]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80D2C38(struct Sprite *sprite); static void sub_80D2CC4(struct Sprite *); +const union AnimCmd gSpriteAnim_83D7C60[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(16, 8), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D7C74[] = +{ + ANIMCMD_FRAME(16, 8, .hFlip = TRUE), + ANIMCMD_FRAME(32, 8, .hFlip = TRUE), + ANIMCMD_FRAME(16, 8, .hFlip = TRUE), + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7C88[] = +{ + gSpriteAnim_83D7C60, + gSpriteAnim_83D7C74, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7C90 = +{ + .tileTag = 10215, + .paletteTag = 10215, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7C88, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2C38, +}; + void sub_80D2C38(struct Sprite *sprite) { if (gBattleAnimArgs[2] == 0) diff --git a/src/battle/anim/swipe.c b/src/battle/anim/swipe.c index 922b11a5f..df7a0e91f 100644 --- a/src/battle/anim/swipe.c +++ b/src/battle/anim/swipe.c @@ -4,6 +4,43 @@ extern s16 gBattleAnimArgs[8]; +void sub_80D2BE8(struct Sprite *sprite); + +const union AnimCmd gSpriteAnim_83D7C18[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D7C2C[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_FRAME(48, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7C40[] = +{ + gSpriteAnim_83D7C18, + gSpriteAnim_83D7C2C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7C48 = +{ + .tileTag = 10222, + .paletteTag = 10222, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7C40, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D2BE8, +}; + void sub_80D2BE8(struct Sprite *sprite) { if (sprite->data[0] == 0) diff --git a/src/battle/anim/sword.c b/src/battle/anim/sword.c index 3367cca07..7fb410224 100644 --- a/src/battle/anim/sword.c +++ b/src/battle/anim/sword.c @@ -8,11 +8,36 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CF690(struct Sprite* sprite); static void sub_80CF6B4(struct Sprite* sprite); // sword (sword appears and floats upward.) // Used in Swords Dance. +const union AffineAnimCmd gSpriteAffineAnim_83D7468[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x14, 0x0, 0, 12), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D7488[] = +{ + gSpriteAffineAnim_83D7468, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D748C = +{ + .tileTag = 10005, + .paletteTag = 10005, + .oam = &gOamData_837E0FC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D7488, + .callback = sub_80CF690, +}; + void sub_80CF690(struct Sprite* sprite) { InitAnimSpritePos(sprite, 0); @@ -20,7 +45,7 @@ void sub_80CF690(struct Sprite* sprite) StoreSpriteCallbackInData(sprite, sub_80CF6B4); } -void sub_80CF6B4(struct Sprite* sprite) +static void sub_80CF6B4(struct Sprite* sprite) { sprite->data[0] = 6; sprite->data[2] = sprite->pos1.x; diff --git a/src/battle/anim/taunt_finger.c b/src/battle/anim/taunt_finger.c deleted file mode 100644 index c512f8cf4..000000000 --- a/src/battle/anim/taunt_finger.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern void sub_80CEF44(u8 bank, struct Sprite* sprite); -static void sub_80CF228(struct Sprite* sprite); -static void sub_80CF264(struct Sprite* sprite); - -// taunt_finger -// Used in Taunt. - -void sub_80CF1C8(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gAnimBankAttacker; - else - bank = gAnimBankTarget; - - sub_80CEF44(bank, sprite); - if (GetBattlerSide(bank) == 0) - { - StartSpriteAnim(sprite, 0); - sprite->data[0] = 2; - } - else - { - StartSpriteAnim(sprite, 1); - sprite->data[0] = 3; - } - - sprite->callback = sub_80CF228; -} - -void sub_80CF228(struct Sprite* sprite) -{ - if (++sprite->data[1] > 10) - { - sprite->data[1] = 0; - StartSpriteAnim(sprite, sprite->data[0]); - StoreSpriteCallbackInData(sprite, sub_80CF264); - sprite->callback = sub_8078600; - } -} - -void sub_80CF264(struct Sprite* sprite) -{ - if (++sprite->data[1] > 5) - DestroyAnimSprite(sprite); -} diff --git a/src/battle/anim/thought.c b/src/battle/anim/thought.c index 5163cbfad..d39520dac 100644 --- a/src/battle/anim/thought.c +++ b/src/battle/anim/thought.c @@ -8,11 +8,67 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CEF9C(struct Sprite* sprite); static void sub_80CF008(struct Sprite* sprite); // thought (thought bubble) // Used in Metronome and Taunt. +const union AnimCmd gSpriteAnim_83D71C0[] = +{ + ANIMCMD_FRAME(0, 2, .hFlip = TRUE), + ANIMCMD_FRAME(16, 2, .hFlip = TRUE), + ANIMCMD_FRAME(32, 2, .hFlip = TRUE), + ANIMCMD_FRAME(48, 2, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D71D4[] = +{ + ANIMCMD_FRAME(48, 2, .hFlip = TRUE), + ANIMCMD_FRAME(32, 2, .hFlip = TRUE), + ANIMCMD_FRAME(16, 2, .hFlip = TRUE), + ANIMCMD_FRAME(0, 2, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D71E8[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(48, 2), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D71FC[] = +{ + ANIMCMD_FRAME(48, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7210[] = +{ + gSpriteAnim_83D71C0, + gSpriteAnim_83D71E8, + gSpriteAnim_83D71D4, + gSpriteAnim_83D71FC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7220 = +{ + .tileTag = 10209, + .paletteTag = 10209, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_83D7210, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CEF9C, +}; + void sub_80CEF44(u8 bank, struct Sprite* sprite) { if (GetBattlerSide(bank) == 0) @@ -41,7 +97,7 @@ void sub_80CEF9C(struct Sprite* sprite) sprite->callback = sub_8078600; } -void sub_80CF008(struct Sprite* sprite) +static void sub_80CF008(struct Sprite* sprite) { if (--sprite->data[0] == 0) { diff --git a/src/battle/anim/thrashing.c b/src/battle/anim/thrashing.c index bc1fc4842..38dccb83f 100644 --- a/src/battle/anim/thrashing.c +++ b/src/battle/anim/thrashing.c @@ -8,14 +8,22 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern struct AffineAnimFrameCmd gUnknown_083D77B0; - static void sub_80D0A8C(u8 taskId); static void sub_80D0B3C(u8 taskId); // thrashing (the movement of the Pokemon left/right repeatedly, with up/down movements below.) // Used by Thrash. +const union AffineAnimCmd gSpriteAffineAnim_83D77B0[] = +{ + AFFINEANIMCMD_FRAME(-10, 9, 0, 7), + AFFINEANIMCMD_FRAME(20, -20, 0, 7), + AFFINEANIMCMD_FRAME(-20, 20, 0, 7), + AFFINEANIMCMD_FRAME(10, -9, 0, 7), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_END, +}; + // left/right movements void sub_80D0A4C(u8 taskId) { @@ -23,11 +31,11 @@ void sub_80D0A4C(u8 taskId) u8 spriteId = GetAnimBattlerSpriteId(0); task->data[0] = spriteId; task->data[1] = 0; - sub_80798F4(task, spriteId, &gUnknown_083D77B0); + sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D77B0); task->func = sub_80D0A8C; } -void sub_80D0A8C(u8 taskId) +static void sub_80D0A8C(u8 taskId) { struct Task* task = &gTasks[taskId]; if (!sub_807992C(task)) @@ -54,7 +62,7 @@ void sub_80D0AB8(u8 taskId) task->func = sub_80D0B3C; } -void sub_80D0B3C(u8 taskId) +static void sub_80D0B3C(u8 taskId) { struct Task* task = &gTasks[taskId]; if (++task->data[7] > 2) diff --git a/src/battle/anim/unused_5.c b/src/battle/anim/unused_5.c index 421cdd6bf..af9a8a037 100644 --- a/src/battle/anim/unused_5.c +++ b/src/battle/anim/unused_5.c @@ -8,8 +8,21 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80CF280(struct Sprite* sprite); + // unused_5 +const struct SpriteTemplate gSpriteTemplate_83D7370 = +{ + .tileTag = 10064, + .paletteTag = 10064, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CF280, +}; + void sub_80CF280(struct Sprite* sprite) { sub_8078650(sprite); diff --git a/src/battle/anim/unused_6.c b/src/battle/anim/unused_6.c index 37e2031b0..5b37d32c9 100644 --- a/src/battle/anim/unused_6.c +++ b/src/battle/anim/unused_6.c @@ -9,10 +9,34 @@ extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern void sub_80CEF44(u8 bank, struct Sprite* sprite); + +void sub_80CF2D0(struct Sprite* sprite); static void sub_80CF310(struct Sprite* sprite); // unused_6 +const union AnimCmd gSpriteAnim_83D7388[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D7390[] = +{ + gSpriteAnim_83D7388, +}; + +const struct SpriteTemplate gSpriteTemplate_83D7394 = +{ + .tileTag = 10072, + .paletteTag = 10072, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CF2D0, +}; + void sub_80CF2D0(struct Sprite* sprite) { u8 bank; @@ -27,7 +51,7 @@ void sub_80CF2D0(struct Sprite* sprite) sprite->callback = sub_80CF310; } -void sub_80CF310(struct Sprite* sprite) +static void sub_80CF310(struct Sprite* sprite) { switch (sprite->data[0]) { diff --git a/src/battle/anim/unused_7.c b/src/battle/anim/unused_7.c index a2f00db31..fa3facdda 100644 --- a/src/battle/anim/unused_7.c +++ b/src/battle/anim/unused_7.c @@ -10,9 +10,22 @@ extern u8 gAnimBankTarget; extern u8 gBankSpriteIds[]; +void sub_80CF3C4(struct Sprite* sprite); + // unused_7 -void sub_80CF374(struct Sprite* sprite) +const struct SpriteTemplate gSpriteTemplate_83D73AC = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CF3C4, +}; + +static void sub_80CF374(struct Sprite* sprite) { s16 temp; gSprites[sprite->data[2]].pos2.x += sprite->data[1]; diff --git a/src/battle/anim/unused_8.c b/src/battle/anim/unused_8.c index c67ec2754..a005bee1c 100644 --- a/src/battle/anim/unused_8.c +++ b/src/battle/anim/unused_8.c @@ -7,12 +7,62 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB1B0[]; +void sub_80CF458(struct Sprite* sprite); static void sub_80CF490(struct Sprite* sprite); static void sub_80CF4B8(struct Sprite* sprite); // unused_8 +const struct SpriteTemplate gSpriteTemplate_83D73C4 = +{ + .tileTag = 10145, + .paletteTag = 10145, + .oam = &gOamData_837E0BC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DB1B0, + .callback = sub_80CF458, +}; + +const union AnimCmd gSpriteAnim_83D73DC[] = +{ + ANIMCMD_FRAME(0, 9), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D73F0[] = +{ + gSpriteAnim_83D73DC, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83D73F4[] = +{ + AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0), + AFFINEANIMCMD_FRAME(0x9, 0x9, 0, 18), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83D740C[] = +{ + gSpriteAffineAnim_83D73F4, +}; + +const struct SpriteTemplate gSpriteTemplate_83D7410 = +{ + .tileTag = 10007, + .paletteTag = 10007, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83D73F0, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D740C, + .callback = sub_80793C4, +}; + void sub_80CF458(struct Sprite* sprite) { InitAnimSpritePos(sprite, 1); @@ -23,7 +73,7 @@ void sub_80CF458(struct Sprite* sprite) StoreSpriteCallbackInData(sprite, sub_80CF490); } -void sub_80CF490(struct Sprite* sprite) +static void sub_80CF490(struct Sprite* sprite) { sprite->data[0] = sprite->data[1]; sprite->data[2] = sprite->pos1.x; @@ -32,7 +82,7 @@ void sub_80CF490(struct Sprite* sprite) StoreSpriteCallbackInData(sprite, sub_80CF4B8); } -void sub_80CF4B8(struct Sprite* sprite) +static void sub_80CF4B8(struct Sprite* sprite) { if (sprite->data[5] == 0) DestroyAnimSprite(sprite); diff --git a/src/battle/anim/unused_9.c b/src/battle/anim/unused_9.c index 8e3f0a8b7..d8dda35b3 100644 --- a/src/battle/anim/unused_9.c +++ b/src/battle/anim/unused_9.c @@ -9,13 +9,23 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -extern struct SpriteTemplate gSpriteTemplate_83D75AC; - +void sub_80CFDFC(struct Sprite* sprite); static void sub_80CFE2C(struct Sprite* sprite); // unused_9? (Most likely an unused effect.) // I cannot find any reference to this sprite template used to call this. +const struct SpriteTemplate gSpriteTemplate_83D75AC = +{ + .tileTag = 10178, + .paletteTag = 10178, + .oam = &gOamData_837E05C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80CFDFC, +}; + void sub_80CFDFC(struct Sprite* sprite) { InitAnimSpritePos(sprite, 0); @@ -24,7 +34,7 @@ void sub_80CFDFC(struct Sprite* sprite) } #ifdef NONMATCHING -void sub_80CFE2C(struct Sprite* sprite) +static void sub_80CFE2C(struct Sprite* sprite) { u16 r7; u16 r5; @@ -46,7 +56,7 @@ void sub_80CFE2C(struct Sprite* sprite) } #else NAKED -void sub_80CFE2C(struct Sprite* sprite) +static void sub_80CFE2C(struct Sprite* sprite) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ diff --git a/src/battle/anim/uproar.c b/src/battle/anim/uproar.c index 538ca9b20..c78f89fef 100644 --- a/src/battle/anim/uproar.c +++ b/src/battle/anim/uproar.c @@ -6,19 +6,25 @@ extern s16 gBattleAnimArgs[8]; -extern const union AffineAnimCmd gUnknown_083D7CA8[]; +static void sub_80D2D3C(u8); -void sub_80D2D3C(u8); +const union AffineAnimCmd gSpriteAffineAnim_83D7CA8[] = +{ + AFFINEANIMCMD_FRAME(-12, 8, 0, 4), + AFFINEANIMCMD_FRAME(20, -20, 0, 4), + AFFINEANIMCMD_FRAME(-8, 12, 0, 4), + AFFINEANIMCMD_END, +}; void sub_80D2CF8(u8 taskId) { u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - sub_80798F4(&gTasks[taskId], spriteId, gUnknown_083D7CA8); + sub_80798F4(&gTasks[taskId], spriteId, gSpriteAffineAnim_83D7CA8); gTasks[taskId].func = sub_80D2D3C; } -void sub_80D2D3C(u8 taskId) +static void sub_80D2D3C(u8 taskId) { if (!sub_807992C(&gTasks[taskId])) DestroyAnimVisualTask(taskId); diff --git a/src/battle/anim/wave_finger.c b/src/battle/anim/wave_finger.c deleted file mode 100644 index 2cf68c34c..000000000 --- a/src/battle/anim/wave_finger.c +++ /dev/null @@ -1,39 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -extern void sub_80CEF44(u8 bank, struct Sprite* sprite); -void sub_80CF088(struct Sprite* sprite); - -// wave_finger -// Used by Metronome. - -void sub_80CF040(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gAnimBankAttacker; - else - bank = gAnimBankTarget; - - sub_80CEF44(bank, sprite); - sprite->data[0] = 0; - StoreSpriteCallbackInData(sprite, sub_80CF088); - sprite->callback = sub_80785E4; -} - -void sub_80CF088(struct Sprite* sprite) -{ - if (++sprite->data[0] > 16) - { - StartSpriteAffineAnim(sprite, 1); - StoreSpriteCallbackInData(sprite, move_anim_8074EE0); - sprite->callback = sub_80785E4; - } -} |