summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Willems (M17.1) <progreon@gmail.com>2018-01-09 02:38:57 +0100
committerMarco Willems (M17.1) <progreon@gmail.com>2018-01-09 02:38:57 +0100
commit353a083d97be81cbc612ecb8de46b62a0e523362 (patch)
tree4533731bd3624398e7a62e932f116e1a5ca1aa0b
parent4bdab579016705c6dc914e3d2af2d608eb256a9b (diff)
Finished decompiling battle_anim_sfx
-rw-r--r--asm/battle_anim_sfx.s224
-rw-r--r--include/battle_anim.h2
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle/anim/sfx.c149
-rw-r--r--src/battle/battle_anim.c6
5 files changed, 127 insertions, 255 deletions
diff --git a/asm/battle_anim_sfx.s b/asm/battle_anim_sfx.s
deleted file mode 100644
index 7d196ce97..000000000
--- a/asm/battle_anim_sfx.s
+++ /dev/null
@@ -1,224 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_812B2B8
-sub_812B2B8: @ 812B2B8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0x40
- negs r0, r0
- bl BattleAnimAdjustPanning
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _0812B2DC
- ldr r0, _0812B2D8 @ =gSharedMem + 0x19348
- b _0812B2E6
- .align 2, 0
-_0812B2D8: .4byte gSharedMem + 0x19348
-_0812B2DC:
- ldr r1, _0812B304 @ =gAnimSpeciesByBanks
- ldr r0, _0812B308 @ =gAnimBankAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
-_0812B2E6:
- ldrh r0, [r0]
- cmp r0, 0
- beq _0812B2F6
- lsls r1, r4, 24
- asrs r1, 24
- movs r2, 0x4
- bl PlayCry3
-_0812B2F6:
- adds r0, r5, 0
- bl DestroyAnimVisualTask
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B304: .4byte gAnimSpeciesByBanks
-_0812B308: .4byte gAnimBankAttacker
- thumb_func_end sub_812B2B8
-
- thumb_func_start sub_812B30C
-sub_812B30C: @ 812B30C
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _0812B33C @ =gBattleAnimArgs
- ldrh r5, [r0]
- ldrb r0, [r0, 0x2]
- lsls r0, 24
- asrs r0, 24
- bl BattleAnimAdjustPanning
- adds r1, r0, 0
- lsls r1, 24
- asrs r1, 24
- adds r0, r5, 0
- bl PlaySE1WithPanning
- adds r0, r4, 0
- bl DestroyAnimVisualTask
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B33C: .4byte gBattleAnimArgs
- thumb_func_end sub_812B30C
-
- thumb_func_start sub_812B340
-sub_812B340: @ 812B340
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _0812B370 @ =gBattleAnimArgs
- ldrh r5, [r0]
- ldrb r0, [r0, 0x2]
- lsls r0, 24
- asrs r0, 24
- bl BattleAnimAdjustPanning
- adds r1, r0, 0
- lsls r1, 24
- asrs r1, 24
- adds r0, r5, 0
- bl PlaySE2WithPanning
- adds r0, r4, 0
- bl DestroyAnimVisualTask
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B370: .4byte gBattleAnimArgs
- thumb_func_end sub_812B340
-
- thumb_func_start sub_812B374
-sub_812B374: @ 812B374
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- mov r8, r0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, _0812B3F8 @ =gBattleAnimArgs
- ldrb r5, [r0, 0x2]
- ldrb r6, [r0, 0x4]
- ldrh r1, [r0, 0x6]
- mov r9, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- bl BattleAnimAdjustPanning
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- asrs r5, 24
- adds r0, r5, 0
- bl BattleAnimAdjustPanning
- adds r5, r0, 0
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- lsls r6, 24
- asrs r6, 24
- adds r0, r4, 0
- adds r1, r5, 0
- adds r2, r6, 0
- bl CalculatePanIncrement
- ldr r2, _0812B3FC @ =gTasks
- mov r3, r8
- lsls r1, r3, 2
- add r1, r8
- lsls r1, 3
- adds r1, r2
- movs r2, 0
- strh r4, [r1, 0xA]
- strh r5, [r1, 0xC]
- lsls r0, 24
- asrs r0, 24
- strh r0, [r1, 0xE]
- mov r0, r9
- strh r0, [r1, 0x12]
- strh r2, [r1, 0x1C]
- strh r4, [r1, 0x1E]
- ldr r2, _0812B400 @ =sub_812B404
- str r2, [r1]
- mov r0, r8
- bl _call_via_r2
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B3F8: .4byte gBattleAnimArgs
-_0812B3FC: .4byte gTasks
-_0812B400: .4byte sub_812B404
- thumb_func_end sub_812B374
-
- thumb_func_start sub_812B404
-sub_812B404: @ 812B404
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- ldr r1, _0812B45C @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- ldrh r2, [r4, 0xE]
- ldrh r0, [r4, 0x1C]
- adds r1, r0, 0x1
- strh r1, [r4, 0x1C]
- lsls r0, 16
- asrs r0, 16
- movs r3, 0x12
- ldrsh r1, [r4, r3]
- cmp r0, r1
- bne _0812B43E
- movs r0, 0
- strh r0, [r4, 0x1C]
- ldrh r1, [r4, 0x1E]
- adds r0, r2, r1
- strh r0, [r4, 0x1E]
- movs r2, 0x1E
- ldrsh r0, [r4, r2]
- bl sub_8077104
- strh r0, [r4, 0x1E]
-_0812B43E:
- ldr r1, _0812B460 @ =gUnknown_0202F7D2
- ldrh r0, [r4, 0x1E]
- strb r0, [r1]
- movs r3, 0x1E
- ldrsh r1, [r4, r3]
- movs r2, 0xC
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _0812B456
- adds r0, r5, 0
- bl DestroyAnimVisualTask
-_0812B456:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B45C: .4byte gTasks
-_0812B460: .4byte gUnknown_0202F7D2
- thumb_func_end sub_812B404
-
- .align 2, 0 @ Don't pad with nop.
- \ No newline at end of file
diff --git a/include/battle_anim.h b/include/battle_anim.h
index 7b966cf4c..a94e6d13c 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -61,7 +61,7 @@ bool8 IsAnimBankSpriteVisible(u8);
s8 BattleAnimAdjustPanning(s8 a);
void sub_80763FC(u16 a, u16 *b, u32 c, u8 d);
s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
-s16 sub_8077104(s16 a);
+s16 sub_8077104(s16 newPan, int oldPan);
void DestroyAnimSoundTask(u8 taskId);
#endif
diff --git a/ld_script.txt b/ld_script.txt
index b2d17b5ec..4f99cff99 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -357,7 +357,6 @@ SECTIONS {
asm/contest_ai.o(.text);
src/unused/unused_81258BC.o(.text);
src/battle/anim/sfx.o(.text);
- asm/battle_anim_sfx.o(.text);
src/battle/battle_controller_safari.o(.text);
src/field/fldeff_sweetscent.o(.text);
asm/battle_anim_812C144.o(.text);
diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c
index cb61a566f..470fea3cc 100644
--- a/src/battle/anim/sfx.c
+++ b/src/battle/anim/sfx.c
@@ -10,26 +10,31 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern u16 gBattlePartyID[];
+extern u16 gAnimSpeciesByBanks[];
+extern u8 gUnknown_0202F7D2;
void sub_812AF98(u8 taskId);
void sub_812B004(u8 taskId);
void sub_812B004(u8 taskId);
void sub_812B108(u8 taskId);
+void sub_812B404(u8 taskId);
+// used in 1 move:
+// Move_FIRE_BLAST
void sub_812AF30(u8 taskId)
{
- s8 sourcePan, targetPan, incrementPan;
+ s8 sourcePan, targetPan, panIncrement;
TASK.data[0] = gBattleAnimArgs[0];
TASK.data[1] = gBattleAnimArgs[1];
sourcePan = BattleAnimAdjustPanning(-64);
targetPan = BattleAnimAdjustPanning(63);
- incrementPan = CalculatePanIncrement(sourcePan, targetPan, 2);
+ panIncrement = CalculatePanIncrement(sourcePan, targetPan, 2);
TASK.data[2] = sourcePan;
TASK.data[3] = targetPan;
- TASK.data[4] = incrementPan;
+ TASK.data[4] = panIncrement;
TASK.data[10] = 10;
TASK.func = sub_812AF98;
@@ -38,7 +43,7 @@ void sub_812AF30(u8 taskId)
void sub_812AF98(u8 taskId)
{
s16 pan = TASK.data[2];
- s8 var0 = TASK.data[4];
+ s8 dPan = TASK.data[4];
if (++TASK.data[11] == 111)
{
@@ -53,8 +58,8 @@ void sub_812AF98(u8 taskId)
TASK.data[10] = 0;
PlaySE12WithPanning(TASK.data[0], pan);
}
- pan += var0;
- TASK.data[2] = sub_8077104(pan);
+ pan += dPan;
+ TASK.data[2] = sub_8077104(pan, dPan);
}
}
@@ -66,7 +71,7 @@ void sub_812B004(u8 taskId)
{
TASK.data[10] = 0;
- pan = BattleAnimAdjustPanning(0x3f);
+ pan = BattleAnimAdjustPanning(63);
PlaySE12WithPanning(TASK.data[1], pan);
if (++TASK.data[11] == 2)
@@ -76,31 +81,32 @@ void sub_812B004(u8 taskId)
}
}
+// used in 7 moves:
+// Move_ICE_BEAM, Move_AURORA_BEAM, Move_PSYBEAM,
+// Move_PSYWAVE, Move_SHADOW_BALL, Move_TRI_ATTACK,
+// Move_HYPER_BEAM
void sub_812B058(u8 taskId)
{
- s16 sp;
- u8 r10, r7, r9;
- s8 r5, r6, r4, r0;
-
- sp = gBattleAnimArgs[0];
- r5 = gBattleAnimArgs[2];
- r6 = gBattleAnimArgs[3];
- r10 = gBattleAnimArgs[4];
- r7 = gBattleAnimArgs[5];
- r9 = gBattleAnimArgs[6];
- r4 = BattleAnimAdjustPanning(gBattleAnimArgs[1]);
- r5 = BattleAnimAdjustPanning(r5);
- r0 = CalculatePanIncrement(r4, r5, r6);
+ s16 sp = gBattleAnimArgs[0];
+ s8 r5 = gBattleAnimArgs[2];
+ s8 panIncrement = gBattleAnimArgs[3];
+ u8 r10 = gBattleAnimArgs[4]; // number of times the sound must be played
+ u8 r7 = gBattleAnimArgs[5];
+ u8 r9 = gBattleAnimArgs[6];
+
+ s8 pan1 = BattleAnimAdjustPanning(gBattleAnimArgs[1]);
+ s8 pan2 = BattleAnimAdjustPanning(r5);
+ panIncrement = CalculatePanIncrement(pan1, pan2, panIncrement);
TASK.data[0] = sp;
- TASK.data[1] = r4;
- TASK.data[2] = r5;
- TASK.data[3] = r0;
+ TASK.data[1] = pan1;
+ TASK.data[2] = pan2;
+ TASK.data[3] = panIncrement;
TASK.data[4] = r10;
TASK.data[5] = r7;
TASK.data[6] = r9;
TASK.data[10] = 0;
- TASK.data[11] = r4;
+ TASK.data[11] = pan1;
TASK.data[12] = r9;
TASK.func = sub_812B108;
@@ -123,15 +129,20 @@ void sub_812B108(u8 taskId)
if (TASK.data[10]++ == TASK.data[5])
{
+ u16 dPan, oldPan;
TASK.data[10] = 0;
- TASK.data[11] += TASK.data[3];
- TASK.data[11] = sub_8077104(TASK.data[11]);
+ dPan = TASK.data[3];
+ oldPan = TASK.data[11];
+ TASK.data[11] = dPan + oldPan;
+ TASK.data[11] = sub_8077104(TASK.data[11], oldPan);
}
}
// #define shared19348 (*(struct UnknownContestStruct8 *)(gSharedMem + 0x19348))
// #define EWRAM_19348 (*(u16 *)(gSharedMem + 0x19348))
+// used in 3 moves:
+// Move_HOWL, Move_ROAR, Move_GROWL
void sub_812B18C(u8 taskId)
{
u16 species = 0;
@@ -181,4 +192,90 @@ void sub_812B18C(u8 taskId)
}
DestroyAnimVisualTask(taskId);
+}
+
+// used in Move_HYPER_VOICE
+void sub_812B2B8(u8 taskId)
+{
+ u16 species;
+ s8 pan = BattleAnimAdjustPanning(-64);
+
+ if (IsContest())
+ species = shared19348.unk0;
+ else
+ species = gAnimSpeciesByBanks[gAnimBankAttacker];
+
+ if (species != 0)
+ PlayCry3(species, pan, 4);
+
+ DestroyAnimVisualTask(taskId);
+}
+
+// used in 6 moves:
+// Move_SKY_ATTACK, Move_LUSTER_PURGE, Move_FLATTER,
+// Move_DRAGON_CLAW, Move_RETURN, Move_COSMIC_POWER,
+void sub_812B30C(u8 taskId)
+{
+ u16 songNum = gBattleAnimArgs[0];
+ s8 pan = BattleAnimAdjustPanning(gBattleAnimArgs[1]);
+ PlaySE1WithPanning(songNum, pan);
+
+ DestroyAnimVisualTask(taskId);
+}
+
+// used in 6 moves:
+// Move_SKY_ATTACK, Move_SUPERPOWER, Move_ENCORE,
+// Move_FLATTER, Move_RETURN, Move_COSMIC_POWER
+void sub_812B340(u8 taskId)
+{
+ u16 songNum = gBattleAnimArgs[0];
+ s8 pan = BattleAnimAdjustPanning(gBattleAnimArgs[1]);
+ PlaySE2WithPanning(songNum, pan);
+
+ DestroyAnimVisualTask(taskId);
+}
+
+// used in 2 moves:
+// Move_CONFUSE_RAY, Move_WILL_O_WISP
+void sub_812B374(u8 taskId)
+{
+ u8 r5 = gBattleAnimArgs[1];
+ s8 panIncrement = gBattleAnimArgs[2];
+ s16 r9 = gBattleAnimArgs[3];
+ s8 r1 = gBattleAnimArgs[0];
+
+ s8 sourcePan = BattleAnimAdjustPanning(r1);
+ s8 targetPan = BattleAnimAdjustPanning(r5);
+ panIncrement = CalculatePanIncrement(sourcePan, targetPan, panIncrement);
+
+ TASK.data[1] = sourcePan;
+ TASK.data[2] = targetPan;
+ TASK.data[3] = panIncrement;
+ TASK.data[5] = r9;
+ TASK.data[10] = 0;
+ TASK.data[11] = sourcePan;
+
+ TASK.func = sub_812B404;
+ sub_812B404(taskId);
+}
+
+void sub_812B404(u8 taskId)
+{
+ u16 dPan = TASK.data[3];
+
+ if (TASK.data[10]++ == TASK.data[5])
+ {
+ u16 oldPan;
+ TASK.data[10] = 0;
+ oldPan = TASK.data[11];
+ TASK.data[11] = dPan + oldPan;
+ TASK.data[11] = sub_8077104(TASK.data[11], oldPan);
+ }
+
+ gUnknown_0202F7D2 = TASK.data[11];
+
+ if (TASK.data[11] == TASK.data[2])
+ {
+ DestroyAnimVisualTask(taskId);
+ }
} \ No newline at end of file
diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c
index 8242a1ddd..a0c74be1d 100644
--- a/src/battle/battle_anim.c
+++ b/src/battle/battle_anim.c
@@ -43,7 +43,7 @@ EWRAM_DATA u16 sAnimMoveIndex = 0; // set but unused.
EWRAM_DATA u8 gAnimBankAttacker = 0;
EWRAM_DATA u8 gAnimBankTarget = 0;
EWRAM_DATA u16 gAnimSpeciesByBanks[4] = {0};
-EWRAM_DATA u8 gUnknown_0202F7D2 = 0;
+EWRAM_DATA u8 gUnknown_0202F7D2 = 0; // some global pan variable
extern u16 gBattle_BG1_Y;
extern u16 gBattle_WIN1H;
extern u16 gBattle_WIN0V;
@@ -1489,9 +1489,9 @@ s8 BattleAnimAdjustPanning2(s8 pan)
return pan;
}
-s16 sub_8077104(s16 a)
+s16 sub_8077104(s16 newPan, int oldPan)
{
- s16 var = a;
+ s16 var = newPan;
if (var > 63)
var = 63;