decompile sound.s

This commit is contained in:
DizzyEggg
2017-09-02 17:03:46 +02:00
parent 2089dd0f86
commit 591837e3c3
76 changed files with 1282 additions and 1658 deletions
+264 -10
View File
@@ -8,6 +8,8 @@
#include "songs.h"
#include "task.h"
extern u16 SpeciesToCryId(u16);
struct Fanfare
{
u16 songNum;
@@ -32,15 +34,8 @@ extern struct MusicPlayerInfo gMPlay_SE1;
extern struct MusicPlayerInfo gMPlay_SE2;
extern struct MusicPlayerInfo gMPlay_SE3;
extern struct ToneData voicegroup_8452590[];
extern struct ToneData voicegroup_8452B90[];
extern struct ToneData voicegroup_8453190[];
extern struct ToneData voicegroup_8453790[];
extern struct ToneData voicegroup_84537C0[];
extern struct ToneData voicegroup_8453DC0[];
extern struct ToneData voicegroup_84543C0[];
extern struct ToneData voicegroup_84549C0[];
extern struct ToneData gCryTable[];
extern struct ToneData gCryTable2[];
extern const struct Fanfare sFanfares[];
@@ -48,7 +43,7 @@ static void Task_Fanfare(u8 taskId);
static void CreateFanfareTask(void);
void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode);
static void Task_DuckBGMForPokemonCry(u8 taskId);
void RestoreBGMVolumeAfterPokemonCry(void);
static void RestoreBGMVolumeAfterPokemonCry(void);
#define CRY_VOLUME 120 // was 125 in R/S
@@ -356,3 +351,262 @@ void PlayCry5(u16 species, u8 mode)
gPokemonCryBGMDuckingCounter = 2;
RestoreBGMVolumeAfterPokemonCry();
}
void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode)
{
bool32 v0;
u32 release;
u32 length;
u32 pitch;
u32 chorus;
u32 index;
u8 table;
species--;
length = 140;
v0 = FALSE;
release = 0;
pitch = 15360;
chorus = 0;
switch (mode)
{
case 0:
break;
case 1:
length = 20;
release = 225;
break;
case 2:
release = 225;
pitch = 15600;
chorus = 20;
volume = 90;
break;
case 3:
length = 50;
release = 200;
pitch = 15800;
chorus = 20;
volume = 90;
break;
case 4:
length = 25;
v0 = TRUE;
release = 100;
pitch = 15600;
chorus = 192;
volume = 90;
break;
case 5:
release = 200;
pitch = 14440;
break;
case 6:
release = 220;
pitch = 15555;
chorus = 192;
volume = 70;
break;
case 7:
length = 10;
release = 100;
pitch = 14848;
break;
case 8:
length = 60;
release = 225;
pitch = 15616;
break;
case 9:
length = 15;
v0 = TRUE;
release = 125;
pitch = 15200;
break;
case 10:
length = 100;
release = 225;
pitch = 15200;
break;
case 12:
length = 20;
release = 225;
case 11:
pitch = 15000;
break;
}
SetPokemonCryVolume(volume);
SetPokemonCryPanpot(pan);
SetPokemonCryPitch(pitch);
SetPokemonCryLength(length);
SetPokemonCryProgress(0);
SetPokemonCryRelease(release);
SetPokemonCryChorus(chorus);
SetPokemonCryPriority(priority);
// This is a fancy way to get a cry of a pokemon.
// It creates 4 sets of 128 mini cry tables.
// If you wish to expand pokemon, you need to
// append new cases to the switch.
species = SpeciesToCryId(species);
index = species & 0x7F;
table = species / 128;
switch (table)
{
case 0:
gMPlay_PokemonCry = SetPokemonCryTone(
v0 ? &gCryTable2[(128 * 0) + index] : &gCryTable[(128 * 0) + index]);
break;
case 1:
gMPlay_PokemonCry = SetPokemonCryTone(
v0 ? &gCryTable2[(128 * 1) + index] : &gCryTable[(128 * 1) + index]);
break;
case 2:
gMPlay_PokemonCry = SetPokemonCryTone(
v0 ? &gCryTable2[(128 * 2) + index] : &gCryTable[(128 * 2) + index]);
break;
case 3:
gMPlay_PokemonCry = SetPokemonCryTone(
v0 ? &gCryTable2[(128 * 3) + index] : &gCryTable[(128 * 3) + index]);
break;
}
}
bool8 IsCryFinished(void)
{
if (FuncIsActiveTask(Task_DuckBGMForPokemonCry) == TRUE)
{
return FALSE;
}
else
{
ClearPokemonCrySongs();
return TRUE;
}
}
void StopCryAndClearCrySongs(void)
{
m4aMPlayStop(gMPlay_PokemonCry);
ClearPokemonCrySongs();
}
void StopCry(void)
{
m4aMPlayStop(gMPlay_PokemonCry);
}
bool8 IsCryPlayingOrClearCrySongs(void)
{
if (IsPokemonCryPlaying(gMPlay_PokemonCry))
{
return TRUE;
}
else
{
ClearPokemonCrySongs();
return FALSE;
}
}
bool8 IsCryPlaying(void)
{
if (IsPokemonCryPlaying(gMPlay_PokemonCry))
return TRUE;
else
return FALSE;
}
static void Task_DuckBGMForPokemonCry(u8 taskId)
{
if (gPokemonCryBGMDuckingCounter)
{
gPokemonCryBGMDuckingCounter--;
return;
}
if (!IsPokemonCryPlaying(gMPlay_PokemonCry))
{
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
DestroyTask(taskId);
}
}
static void RestoreBGMVolumeAfterPokemonCry(void)
{
if (FuncIsActiveTask(Task_DuckBGMForPokemonCry) != TRUE)
CreateTask(Task_DuckBGMForPokemonCry, 80);
}
void PlayBGM(u16 songNum)
{
if (gDisableMusic)
songNum = 0;
if (songNum == 0xFFFF)
songNum = 0;
m4aSongNumStart(songNum);
}
void PlaySE(u16 songNum)
{
m4aSongNumStart(songNum);
}
void PlaySE12WithPanning(u16 songNum, s8 pan)
{
m4aSongNumStart(songNum);
m4aMPlayImmInit(&gMPlay_SE1);
m4aMPlayImmInit(&gMPlay_SE2);
m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, pan);
m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan);
}
void PlaySE1WithPanning(u16 songNum, s8 pan)
{
m4aSongNumStart(songNum);
m4aMPlayImmInit(&gMPlay_SE1);
m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, pan);
}
void PlaySE2WithPanning(u16 songNum, s8 pan)
{
m4aSongNumStart(songNum);
m4aMPlayImmInit(&gMPlay_SE2);
m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan);
}
void SE12PanpotControl(s8 pan)
{
m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, pan);
m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan);
}
bool8 IsSEPlaying(void)
{
if ((gMPlay_SE1.status & MUSICPLAYER_STATUS_PAUSE) && (gMPlay_SE2.status & MUSICPLAYER_STATUS_PAUSE))
return FALSE;
if (!(gMPlay_SE1.status & MUSICPLAYER_STATUS_TRACK) && !(gMPlay_SE2.status & MUSICPLAYER_STATUS_TRACK))
return FALSE;
return TRUE;
}
bool8 IsBGMPlaying(void)
{
if (gMPlay_BGM.status & MUSICPLAYER_STATUS_PAUSE)
return FALSE;
if (!(gMPlay_BGM.status & MUSICPLAYER_STATUS_TRACK))
return FALSE;
return TRUE;
}
bool8 IsSpecialSEPlaying(void)
{
if (gMPlay_SE3.status & MUSICPLAYER_STATUS_PAUSE)
return FALSE;
if (!(gMPlay_SE3.status & MUSICPLAYER_STATUS_TRACK))
return FALSE;
return TRUE;
}
+5 -5
View File
@@ -12,7 +12,7 @@ extern u8 GetKeypadIconWidth(u8 keypadIconId);
extern void CopyWindowToVram(u8 windowId, u8 mode);
extern u16 Font6Func(struct TextPrinter *textPrinter);
extern u32 GetGlyphWidthFont6(u16 glyphId, bool32 isJapanese);
extern void audio_play(u16 songNum);
extern void PlaySE(u16 songNum);
extern u8* sub_81AFC74(u8 a1);
EWRAM_DATA struct TextPrinter gTempTextPrinter = {0};
@@ -1986,7 +1986,7 @@ bool8 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter)
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
result = TRUE;
audio_play(5);
PlaySE(5);
}
}
return result;
@@ -2004,7 +2004,7 @@ bool8 TextPrinterWait(struct TextPrinter *textPrinter)
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
result = TRUE;
audio_play(5);
PlaySE(5);
}
}
return result;
@@ -2394,7 +2394,7 @@ _08005A76:\n\
add r1, #0x1\n\
str r1, [r6]\n\
add r0, r3, #0\n\
bl audio_play\n\
bl PlaySE\n\
b _08005A0A\n\
_08005A90:\n\
ldr r1, [r6]\n\
@@ -2751,7 +2751,7 @@ _08005D44:\n\
strb r0, [r6, #0x1C]\n\
b _08005B56\n\
_08005D48:\n\
bl mplay_has_finished_maybe\n\
bl IsSEPlaying\n\
lsl r0, #24\n\
lsr r0, #24\n\
cmp r0, #0\n\