summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan <eroelke@gmail.com>2019-11-30 11:36:22 -0500
committerEvan <eroelke@gmail.com>2019-12-04 14:54:51 -0700
commit0b547dff4db52a6101d3841450178d4ef3aff724 (patch)
tree3453a03ccc3ed02edcd6c5d752c8fc1400ded2c9
parent1196d0b53364e69e2faea5b891fe69390d071124 (diff)
start decompilation
-rw-r--r--asm/battle_anim.s125
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle_anim.c136
-rw-r--r--sym_ewram.txt71
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