diff options
author | Evan <eroelke@gmail.com> | 2019-11-30 11:36:22 -0500 |
---|---|---|
committer | Evan <eroelke@gmail.com> | 2019-12-04 14:54:51 -0700 |
commit | 0b547dff4db52a6101d3841450178d4ef3aff724 (patch) | |
tree | 3453a03ccc3ed02edcd6c5d752c8fc1400ded2c9 | |
parent | 1196d0b53364e69e2faea5b891fe69390d071124 (diff) |
start decompilation
-rw-r--r-- | asm/battle_anim.s | 125 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle_anim.c | 136 | ||||
-rw-r--r-- | sym_ewram.txt | 71 |
4 files changed, 138 insertions, 195 deletions
diff --git a/asm/battle_anim.s b/asm/battle_anim.s index 42d099c4c..94f74c261 100644 --- a/asm/battle_anim.s +++ b/asm/battle_anim.s @@ -5,131 +5,6 @@ .text - thumb_func_start ClearBattleAnimationVars -ClearBattleAnimationVars: @ 80724C0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r0, _08072554 @ =gUnknown_2037EE0 - movs r1, 0 - strb r1, [r0] - ldr r0, _08072558 @ =gAnimScriptActive - strb r1, [r0] - ldr r0, _0807255C @ =gAnimVisualTaskCount - strb r1, [r0] - ldr r0, _08072560 @ =gUnknown_2037EE3 - strb r1, [r0] - ldr r0, _08072564 @ =gAnimDisableStructPtr - movs r1, 0 - str r1, [r0] - ldr r0, _08072568 @ =gAnimMoveDmg - str r1, [r0] - ldr r0, _0807256C @ =gAnimMovePower - movs r2, 0 - strh r1, [r0] - ldr r0, _08072570 @ =gAnimFriendship - strb r2, [r0] - ldr r4, _08072574 @ =gUnknown_2037F14 - ldr r5, _08072578 @ =gAnimMoveTurn - ldr r6, _0807257C @ =gUnknown_2037F17 - ldr r7, _08072580 @ =gUnknown_2037F18 - ldr r0, _08072584 @ =gBattleAnimAttacker - mov r12, r0 - ldr r1, _08072588 @ =gBattleAnimTarget - mov r8, r1 - ldr r0, _0807258C @ =gUnknown_2037F24 - mov r9, r0 - ldr r1, _08072590 @ =0x0000ffff - adds r3, r1, 0 - ldr r1, _08072594 @ =gUnknown_2037EEE - movs r2, 0x7 -_0807250A: - ldrh r0, [r1] - orrs r0, r3 - strh r0, [r1] - adds r1, 0x2 - subs r2, 0x1 - cmp r2, 0 - bge _0807250A - ldr r1, _08072598 @ =gBattleAnimArgs - movs r2, 0 - adds r0, r1, 0 - adds r0, 0xE -_08072520: - strh r2, [r0] - subs r0, 0x2 - cmp r0, r1 - bge _08072520 - movs r1, 0 - movs r0, 0xFF - strb r0, [r4] - movs r0, 0x1 - negs r0, r0 - strb r0, [r4, 0x1] - strb r1, [r5] - strb r1, [r6] - movs r0, 0 - strh r1, [r7] - mov r1, r12 - strb r0, [r1] - mov r1, r8 - strb r0, [r1] - mov r1, r9 - strb r0, [r1] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08072554: .4byte gUnknown_2037EE0 -_08072558: .4byte gAnimScriptActive -_0807255C: .4byte gAnimVisualTaskCount -_08072560: .4byte gUnknown_2037EE3 -_08072564: .4byte gAnimDisableStructPtr -_08072568: .4byte gAnimMoveDmg -_0807256C: .4byte gAnimMovePower -_08072570: .4byte gAnimFriendship -_08072574: .4byte gUnknown_2037F14 -_08072578: .4byte gAnimMoveTurn -_0807257C: .4byte gUnknown_2037F17 -_08072580: .4byte gUnknown_2037F18 -_08072584: .4byte gBattleAnimAttacker -_08072588: .4byte gBattleAnimTarget -_0807258C: .4byte gUnknown_2037F24 -_08072590: .4byte 0x0000ffff -_08072594: .4byte gUnknown_2037EEE -_08072598: .4byte gBattleAnimArgs - thumb_func_end ClearBattleAnimationVars - - thumb_func_start DoMoveAnim -DoMoveAnim: @ 807259C - push {lr} - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - ldr r2, _080725C0 @ =gBattleAnimAttacker - ldr r0, _080725C4 @ =gBattlerAttacker - ldrb r0, [r0] - strb r0, [r2] - ldr r2, _080725C8 @ =gBattleAnimTarget - ldr r0, _080725CC @ =gBattlerTarget - ldrb r0, [r0] - strb r0, [r2] - ldr r0, _080725D0 @ =gBattleAnims_Moves - movs r2, 0x1 - bl LaunchBattleAnimation - pop {r0} - bx r0 - .align 2, 0 -_080725C0: .4byte gBattleAnimAttacker -_080725C4: .4byte gBattlerAttacker -_080725C8: .4byte gBattleAnimTarget -_080725CC: .4byte gBattlerTarget -_080725D0: .4byte gBattleAnims_Moves - thumb_func_end DoMoveAnim thumb_func_start LaunchBattleAnimation LaunchBattleAnimation: @ 80725D4 diff --git a/ld_script.txt b/ld_script.txt index cf7005555..4fd74f9c5 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -111,6 +111,7 @@ SECTIONS { src/tileset_anims.o(.text); src/palette.o(.text); src/sound.o(.text); + src/battle_anim.o(.text); asm/battle_anim.o(.text); src/battle_anim_mons.o(.text); src/task.o(.text); diff --git a/src/battle_anim.c b/src/battle_anim.c new file mode 100644 index 000000000..64f01beb1 --- /dev/null +++ b/src/battle_anim.c @@ -0,0 +1,136 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_controllers.h" +#include "battle_interface.h" + +// Defines +#define ANIM_SPRITE_INDEX_COUNT 8 + +// RAM +EWRAM_DATA static const u8 *sBattleAnimScriptPtr = NULL; +EWRAM_DATA static const u8 *sBattleAnimScriptRetAddr = NULL; +EWRAM_DATA void (*gAnimScriptCallback)(void) = NULL; +EWRAM_DATA static s8 gAnimFramesToWait = 0; +EWRAM_DATA bool8 gAnimScriptActive = FALSE; +EWRAM_DATA u8 gAnimVisualTaskCount = 0; +EWRAM_DATA u8 gAnimSoundTaskCount = 0; +EWRAM_DATA struct DisableStruct *gAnimDisableStructPtr = NULL; +EWRAM_DATA s32 gAnimMoveDmg = 0; +EWRAM_DATA u16 gAnimMovePower = 0; +EWRAM_DATA static u16 sAnimSpriteIndexArray[ANIM_SPRITE_INDEX_COUNT] = {0}; +EWRAM_DATA u8 gAnimFriendship = 0; +EWRAM_DATA u16 gWeatherMoveAnim = 0; +EWRAM_DATA s16 gBattleAnimArgs[ANIM_ARGS_COUNT] = {0}; +EWRAM_DATA static u16 sSoundAnimFramesToWait = 0; +EWRAM_DATA static u8 sMonAnimTaskIdArray[2] = {0}; +EWRAM_DATA u8 gAnimMoveTurn = 0; +EWRAM_DATA static u8 sAnimBackgroundFadeState = 0; +EWRAM_DATA static u16 sAnimMoveIndex = 0; // Set but unused. +EWRAM_DATA u8 gBattleAnimAttacker = 0; +EWRAM_DATA u8 gBattleAnimTarget = 0; +EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gUnknown_2037F24 = 0; + +// Data + +// Function Declarations + + +void ClearBattleAnimationVars(void) +{ + s32 i; + + gAnimFramesToWait = 0; + gAnimScriptActive = FALSE; + gAnimVisualTaskCount = 0; + gAnimSoundTaskCount = 0; + gAnimDisableStructPtr = NULL; + gAnimMoveDmg = 0; + gAnimMovePower = 0; + gAnimFriendship = 0; + + // Clear index array. + for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++) + sAnimSpriteIndexArray[i] |= 0xFFFF; + + // Clear anim args. + for (i = 0; i < ANIM_ARGS_COUNT; i++) + gBattleAnimArgs[i] = 0; + + sMonAnimTaskIdArray[0] = 0xFF; + sMonAnimTaskIdArray[1] = (s8)0xFF; + gAnimMoveTurn = 0; + sAnimBackgroundFadeState = 0; + sAnimMoveIndex = 0; + gBattleAnimAttacker = 0; + gBattleAnimTarget = 0; + gUnknown_2037F24 = 0; +} + +void DoMoveAnim(u16 move) +{ + gBattleAnimAttacker = gBattlerAttacker; + gBattleAnimTarget = gBattlerTarget; + LaunchBattleAnimation(gBattleAnims_Moves, move, TRUE); +} + +void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim) +{ + s32 i; + + if (!IsContest()) + { + sub_80A8278(); + UpdateOamPriorityInAllHealthboxes(0); + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (GetBattlerSide(i) != B_SIDE_PLAYER) + gAnimBattlerSpecies[i] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); + else + gAnimBattlerSpecies[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); + } + } + else + { + for (i = 0; i < 4; i++) + gAnimBattlerSpecies[i] = gContestResources->field_18->species; + } + + if (!isMoveAnim) + sAnimMoveIndex = 0; + else + sAnimMoveIndex = tableId; + + for (i = 0; i < ANIM_ARGS_COUNT; i++) + gBattleAnimArgs[i] = 0; + + sMonAnimTaskIdArray[0] = 0xFF; + sMonAnimTaskIdArray[1] = 0xFF; + sBattleAnimScriptPtr = animsTable[tableId]; + gAnimScriptActive = TRUE; + gAnimFramesToWait = 0; + gAnimScriptCallback = RunAnimScriptCommand; + + for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++) + sAnimSpriteIndexArray[i] = 0xFFFF; + + if (isMoveAnim) + { + for (i = 0; gMovesWithQuietBGM[i] != 0xFFFF; i++) + { + if (tableId == gMovesWithQuietBGM[i]) + { + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 128); + break; + } + } + } + + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + gBattle_WIN1H = 0; + gBattle_WIN1V = 0; +} + + diff --git a/sym_ewram.txt b/sym_ewram.txt index e068902f2..d06732e80 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -119,77 +119,8 @@ gUnknown_203709C: @ 203709C .include "src/palette.o" .align 2 .include "src/sound.o" - .align 2 -gUnknown_2037ED4: @ 2037ED4 - .space 0x4 - -gUnknown_2037ED8: @ 2037ED8 - .space 0x4 - -gAnimScriptCallback: @ 2037EDC - .space 0x4 - -gUnknown_2037EE0: @ 2037EE0 - .space 0x1 - -gAnimScriptActive: @ 2037EE1 - .space 0x1 - -gAnimVisualTaskCount: @ 2037EE2 - .space 0x1 - -gUnknown_2037EE3: @ 2037EE3 - .space 0x1 - -gAnimDisableStructPtr: @ 2037EE4 - .space 0x4 - -gAnimMoveDmg: @ 2037EE8 - .space 0x4 - -gAnimMovePower: @ 2037EEC - .space 0x2 - -gUnknown_2037EEE: @ 2037EEE - .space 0x10 - -gAnimFriendship: @ 2037EFE - .space 0x2 - -gWeatherMoveAnim: @ 2037F00 - .space 0x2 - -gBattleAnimArgs: @ 2037F02 - .space 0x10 - -gUnknown_2037F12: @ 2037F12 - .space 0x2 - -gUnknown_2037F14: @ 2037F14 - .space 0x2 - -gAnimMoveTurn: @ 2037F16 - .space 0x1 - -gUnknown_2037F17: @ 2037F17 - .space 0x1 - -gUnknown_2037F18: @ 2037F18 - .space 0x2 - -gBattleAnimAttacker: @ 2037F1A - .space 0x1 - -gBattleAnimTarget: @ 2037F1B - .space 0x1 - -gAnimBattlerSpecies: @ 2037F1C - .space 0x8 - -gUnknown_2037F24: @ 2037F24 - .space 0x4 - + .include "src/battle_anim.o" .align 2 .include "src/battle_anim_mons.o" .align 2 |