summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle/anim/sfx.c280
-rw-r--r--src/battle/battle_anim.c6
-rw-r--r--src/unused_81258BC.c36
3 files changed, 319 insertions, 3 deletions
diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c
new file mode 100644
index 000000000..10ef1681e
--- /dev/null
+++ b/src/battle/anim/sfx.c
@@ -0,0 +1,280 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "contest.h"
+#include "ewram.h"
+#include "rom_8077ABC.h"
+#include "sound.h"
+#include "task.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+extern u16 gBattlePartyID[];
+extern u16 gAnimSpeciesByBanks[];
+extern u8 gUnknown_0202F7D2;
+
+static void sub_812AF98(u8 taskId);
+static void sub_812B004(u8 taskId);
+static void sub_812B108(u8 taskId);
+static void sub_812B404(u8 taskId);
+
+// used in 1 move:
+// Move_FIRE_BLAST
+void sub_812AF30(u8 taskId)
+{
+ s8 sourcePan, targetPan, panIncrement;
+
+ TASK.data[0] = gBattleAnimArgs[0];
+ TASK.data[1] = gBattleAnimArgs[1];
+
+ sourcePan = BattleAnimAdjustPanning(-64);
+ targetPan = BattleAnimAdjustPanning(63);
+ panIncrement = CalculatePanIncrement(sourcePan, targetPan, 2);
+
+ TASK.data[2] = sourcePan;
+ TASK.data[3] = targetPan;
+ TASK.data[4] = panIncrement;
+ TASK.data[10] = 10;
+
+ TASK.func = sub_812AF98;
+}
+
+static void sub_812AF98(u8 taskId)
+{
+ s16 pan = TASK.data[2];
+ s8 dPan = TASK.data[4];
+
+ 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);
+ }
+ pan += dPan;
+ TASK.data[2] = sub_8077104(pan, dPan);
+ }
+}
+
+static void sub_812B004(u8 taskId)
+{
+ s8 pan;
+
+ if (++TASK.data[10] == 6)
+ {
+ TASK.data[10] = 0;
+
+ pan = BattleAnimAdjustPanning(63);
+ PlaySE12WithPanning(TASK.data[1], pan);
+
+ if (++TASK.data[11] == 2)
+ {
+ DestroyAnimSoundTask(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 = 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] = 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] = pan1;
+ TASK.data[12] = r9;
+
+ TASK.func = sub_812B108;
+ TASK.func(taskId);
+}
+
+static void sub_812B108(u8 taskId)
+{
+ if (TASK.data[12]++ == TASK.data[6])
+ {
+ TASK.data[12] = 0;
+ PlaySE12WithPanning(TASK.data[0], TASK.data[11]);
+
+ if (--TASK.data[4] == 0)
+ {
+ DestroyAnimSoundTask(taskId);
+ return;
+ }
+ }
+
+ if (TASK.data[10]++ == TASK.data[5])
+ {
+ u16 dPan, oldPan;
+ TASK.data[10] = 0;
+ 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;
+ s8 pan = BattleAnimAdjustPanning(-64);
+
+ if (IsContest())
+ {
+ if (!gBattleAnimArgs[0])
+ species = shared19348.unk0;
+ else
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ u8 bank;
+ if (gBattleAnimArgs[0] == 0)
+ bank = gAnimBankAttacker;
+ else if (gBattleAnimArgs[0] == 1)
+ bank = gAnimBankTarget;
+ else if (gBattleAnimArgs[0] == 2)
+ bank = gAnimBankAttacker ^ 0x2;
+ else
+ bank = gAnimBankTarget ^ 0x2;
+
+ if (gBattleAnimArgs[0] == 1 || gBattleAnimArgs[0] == 3)
+ {
+ if (!IsAnimBankSpriteVisible(bank))
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+ }
+
+ if (GetBankSide(bank))
+ species = GetMonData(&gEnemyParty[gBattlePartyID[bank]], 0xB);
+ else
+ species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], 0xB);
+ }
+
+ if (species != 0)
+ {
+ s16 mode = gBattleAnimArgs[1];
+ if (mode == 0xFF)
+ PlayCry1(species, pan);
+ else
+ PlayCry3(species, pan, mode);
+ }
+
+ 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;
+ TASK.func(taskId);
+}
+
+static 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;
diff --git a/src/unused_81258BC.c b/src/unused_81258BC.c
new file mode 100644
index 000000000..c509ea4c9
--- /dev/null
+++ b/src/unused_81258BC.c
@@ -0,0 +1,36 @@
+#include "constants/songs.h"
+#include "global.h"
+#include "menu.h"
+#include "mystery_event_script.h"
+#include "sound.h"
+#include "text.h"
+
+void sub_812AF10(void);
+
+bool8 unref_sub_812AECC(u8 *script)
+{
+ u8 result = RunMysteryEventScript(script);
+ switch (result)
+ {
+ case 0:
+ return FALSE;
+ case 1:
+ PlaySE(SE_BOO);
+ return TRUE;
+ case 2:
+ sub_812AF10();
+ return FALSE;
+ case 3:
+ PlaySE(SE_BOO);
+ sub_812AF10();
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+void sub_812AF10(void)
+{
+ MenuDrawTextWindow(2, 14, 27, 19);
+ MenuPrint(gStringVar4, 3, 15);
+} \ No newline at end of file