summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_anim_sfx.s108
-rw-r--r--include/battle_anim.h2
-rw-r--r--src/battle/anim/sfx.c113
3 files changed, 115 insertions, 108 deletions
diff --git a/asm/battle_anim_sfx.s b/asm/battle_anim_sfx.s
index 520c119cb..ef6a0181d 100644
--- a/asm/battle_anim_sfx.s
+++ b/asm/battle_anim_sfx.s
@@ -5,114 +5,6 @@
.text
- thumb_func_start sub_812AF30
-sub_812AF30: @ 812AF30
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0812AF8C @ =gTasks
- lsls r6, r0, 2
- adds r6, r0
- lsls r6, 3
- adds r6, r1
- ldr r1, _0812AF90 @ =gBattleAnimArgs
- ldrh r0, [r1]
- strh r0, [r6, 0x8]
- ldrh r0, [r1, 0x2]
- strh r0, [r6, 0xA]
- movs r0, 0x40
- negs r0, r0
- bl BattleAnimAdjustPanning
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x3F
- bl BattleAnimAdjustPanning
- adds r5, r0, 0
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x2
- bl CalculatePanIncrement
- strh r4, [r6, 0xC]
- strh r5, [r6, 0xE]
- lsls r0, 24
- asrs r0, 24
- strh r0, [r6, 0x10]
- movs r0, 0xA
- strh r0, [r6, 0x1C]
- ldr r0, _0812AF94 @ =sub_812AF98
- str r0, [r6]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812AF8C: .4byte gTasks
-_0812AF90: .4byte gBattleAnimArgs
-_0812AF94: .4byte sub_812AF98
- thumb_func_end sub_812AF30
-
- thumb_func_start sub_812AF98
-sub_812AF98: @ 812AF98
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0812AFC8 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrh r5, [r4, 0xC]
- ldrb r6, [r4, 0x10]
- ldrh r0, [r4, 0x1E]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r4, 0x1E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x6F
- bne _0812AFD0
- movs r0, 0x5
- strh r0, [r4, 0x1C]
- strh r1, [r4, 0x1E]
- ldr r0, _0812AFCC @ =sub_812B004
- str r0, [r4]
- b _0812AFFE
- .align 2, 0
-_0812AFC8: .4byte gTasks
-_0812AFCC: .4byte sub_812B004
-_0812AFD0:
- ldrh r0, [r4, 0x1C]
- adds r0, 0x1
- strh r0, [r4, 0x1C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB
- bne _0812AFEA
- strh r1, [r4, 0x1C]
- ldrh r0, [r4, 0x8]
- lsls r1, r5, 24
- asrs r1, 24
- bl PlaySE12WithPanning
-_0812AFEA:
- lsls r1, r6, 24
- asrs r1, 24
- lsls r0, r5, 16
- asrs r0, 16
- adds r0, r1
- lsls r0, 16
- asrs r0, 16
- bl sub_8077104
- strh r0, [r4, 0xC]
-_0812AFFE:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_812AF98
-
thumb_func_start sub_812B004
sub_812B004: @ 812B004
push {r4,r5,lr}
diff --git a/include/battle_anim.h b/include/battle_anim.h
index d456950f6..99167d7c6 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -60,5 +60,7 @@ void DestroyAnimVisualTask(u8 task);
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);
#endif
diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c
index 265271ac5..a66a15371 100644
--- a/src/battle/anim/sfx.c
+++ b/src/battle/anim/sfx.c
@@ -1,2 +1,115 @@
#include "global.h"
+#include "battle_anim.h"
+#include "sound.h"
+#include "task.h"
+
+extern s16 gBattleAnimArgs[];
+
+void sub_812AF98(u8 taskId);
+void sub_812B004(u8 taskId);
+void sub_812B004(u8 taskId);
+
+void sub_812AF30(u8 taskId)
+{
+ s8 sourcePan, targetPan, incrementPan;
+
+ TASK.data[0] = gBattleAnimArgs[0];
+ TASK.data[1] = gBattleAnimArgs[1];
+
+ sourcePan = BattleAnimAdjustPanning(-64);
+ targetPan = BattleAnimAdjustPanning(63);
+ incrementPan = CalculatePanIncrement(sourcePan, targetPan, 2);
+
+ TASK.data[2] = sourcePan;
+ TASK.data[3] = targetPan;
+ TASK.data[4] = incrementPan;
+ TASK.data[10] = 10;
+
+ TASK.func = sub_812AF98;
+}
+
+#ifdef NONMATCHING
+void sub_812AF98(u8 taskId) // r4 := TASK
+{
+ s16 pan = TASK.data[2]; // r5
+ s8 var0 = TASK.data[4]; // r6
+
+ if (++TASK.data[11] == 111)
+ {
+ TASK.data[10] = 5;
+ TASK.data[11] = 0;
+ TASK.func = sub_812B004;
+ }
+ else
+ {
+ if (++TASK.data[10] == 11)
+ {
+ TASK.data[10] = 0;
+ PlaySE12WithPanning(TASK.data[0], pan);
+ }
+ TASK.data[2] = sub_8077104(var0 + pan);
+ }
+}
+#else
+__attribute__((naked))
+void sub_812AF98(u8 taskId)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ ldr r2, _0812AFC8 @ =gTasks\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 3\n\
+ adds r4, r1, r2\n\
+ ldrh r5, [r4, 0xC]\n\
+ ldrb r6, [r4, 0x10]\n\
+ ldrh r0, [r4, 0x1E]\n\
+ adds r0, 0x1\n\
+ movs r1, 0\n\
+ strh r0, [r4, 0x1E]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x6F\n\
+ bne _0812AFD0\n\
+ movs r0, 0x5\n\
+ strh r0, [r4, 0x1C]\n\
+ strh r1, [r4, 0x1E]\n\
+ ldr r0, _0812AFCC @ =sub_812B004\n\
+ str r0, [r4]\n\
+ b _0812AFFE\n\
+ .align 2, 0\n\
+_0812AFC8: .4byte gTasks\n\
+_0812AFCC: .4byte sub_812B004\n\
+_0812AFD0:\n\
+ ldrh r0, [r4, 0x1C]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4, 0x1C]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0xB\n\
+ bne _0812AFEA\n\
+ strh r1, [r4, 0x1C]\n\
+ ldrh r0, [r4, 0x8]\n\
+ lsls r1, r5, 24\n\
+ asrs r1, 24\n\
+ bl PlaySE12WithPanning\n\
+_0812AFEA:\n\
+ lsls r1, r6, 24\n\
+ asrs r1, 24\n\
+ lsls r0, r5, 16\n\
+ asrs r0, 16\n\
+ adds r0, r1\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ bl sub_8077104\n\
+ strh r0, [r4, 0xC]\n\
+_0812AFFE:\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING