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 /src | |
parent | 1196d0b53364e69e2faea5b891fe69390d071124 (diff) |
start decompilation
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_anim.c | 136 |
1 files changed, 136 insertions, 0 deletions
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; +} + + |