diff options
author | YamaArashi <shadow962@live.com> | 2016-09-28 20:57:41 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-09-28 20:58:03 -0700 |
commit | 3b7dfcd93bb4f7440ad72311b302e449ecd6ea4f (patch) | |
tree | 4172f5561bc96a88812b2f65058ed5979d0119c6 /src | |
parent | 41e4ec0d0229b1f400af1bd2294b8bcdfa599d16 (diff) |
initial decompilation of sound code
Diffstat (limited to 'src')
-rw-r--r-- | src/sound.c | 578 |
1 files changed, 578 insertions, 0 deletions
diff --git a/src/sound.c b/src/sound.c new file mode 100644 index 000000000..141902b1f --- /dev/null +++ b/src/sound.c @@ -0,0 +1,578 @@ +#include "global.h" +#include "gba/m4a_internal.h" +#include "task.h" + +struct Fanfare +{ + u16 songNum; + u16 duration; +}; + +extern u32 speciesid_conv(u32); + +void sound_sources_off(void); + +void map_music_set_to_zero(void); + +extern u16 gUnknown_020239F8; +extern struct MusicPlayerInfo *gUnknown_0202F79C; +extern u8 gUnknown_0202F7A0; + +extern u16 gUnknown_030006D4; +extern u16 gUnknown_030006D6; +extern u8 gUnknown_030006D8; +extern u8 gUnknown_030006D9; +extern u16 gUnknown_030006DA; + +extern u8 gUnknown_03004AEC; +extern struct MusicPlayerInfo gUnknown_03007380; +extern struct MusicPlayerInfo gUnknown_030073C0; +extern struct MusicPlayerInfo gUnknown_03007400; +extern struct MusicPlayerInfo gUnknown_03007450; + +extern struct Fanfare gUnknown_0837DEF4[]; + +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[]; + +u8 sub_8075028(void); +u8 task_is_not_running_overworld_fanfare(void); +u8 sub_8074E14(void); +void sub_8074F6C(u16, u8); +void task50_overworld_fanfare(u8); +void task_add_50_overworld_fanfare_if_not_running(void); +void play_sound_effect(u8); +void sub_80751C0(u16 species, s8 a2, s8 a3, u8 a4, u8 a5); +void sub_8075408(u8); +void sub_8075450(void); +void sub_8075474(u16); + +void sound_sources_off(void) +{ + gUnknown_03004AEC = 0; + map_music_set_to_zero(); +} + +void sound_something(void) +{ + switch (gUnknown_030006D8) + { + case 0: + break; + case 1: + gUnknown_030006D8 = 2; + sub_8075474(gUnknown_030006D4); + break; + case 2: + case 3: + case 4: + break; + case 5: + if (sub_8075028()) + { + gUnknown_030006D6 = 0; + gUnknown_030006D8 = 0; + } + break; + case 6: + if (sub_8075028() && task_is_not_running_overworld_fanfare()) + { + gUnknown_030006D4 = gUnknown_030006D6; + gUnknown_030006D6 = 0; + gUnknown_030006D8 = 2; + sub_8075474(gUnknown_030006D4); + } + break; + case 7: + if (sub_8075028() && task_is_not_running_overworld_fanfare()) + { + sub_8074F6C(gUnknown_030006D6, gUnknown_030006D9); + gUnknown_030006D4 = gUnknown_030006D6; + gUnknown_030006D6 = 0; + gUnknown_030006D8 = 2; + gUnknown_030006D9 = 0; + } + break; + } +} + +void map_music_set_to_zero(void) +{ + gUnknown_030006D4 = 0; + gUnknown_030006D6 = 0; + gUnknown_030006D8 = 0; + gUnknown_030006D9 = 0; +} + +u16 current_map_music_get(void) +{ + return gUnknown_030006D4; +} + +void current_map_music_set(u16 a1) +{ + gUnknown_030006D4 = a1; + gUnknown_030006D6 = 0; + gUnknown_030006D8 = 1; +} + +void sub_8074D08(void) +{ + gUnknown_030006D4 = 0; + gUnknown_030006D6 = 0; + gUnknown_030006D8 = 1; +} + +void sub_8074D28(u8 a1) +{ + if (sub_8074E14()) + play_sound_effect(a1); + gUnknown_030006D4 = 0; + gUnknown_030006D6 = 0; + gUnknown_030006D8 = 5; +} + +void sub_8074D60(u16 a1, u8 a2) +{ + sub_8074D28(a2); + gUnknown_030006D4 = 0; + gUnknown_030006D6 = a1; + gUnknown_030006D8 = 6; +} + +void sub_8074D94(u16 a1, u8 a2, u8 a3) +{ + sub_8074D28(a2); + gUnknown_030006D4 = 0; + gUnknown_030006D6 = a1; + gUnknown_030006D8 = 7; + gUnknown_030006D9 = a3; +} + +void unref_sub_8074DD8(u16 a1, u8 a2) +{ + sub_8074F6C(a1, a2); + gUnknown_030006D4 = a1; + gUnknown_030006D6 = 0; + gUnknown_030006D8 = 2; + gUnknown_030006D9 = 0; +} + +bool8 sub_8074E14(void) +{ + if (gUnknown_030006D8 == 6) + return FALSE; + if (gUnknown_030006D8 == 5) + return FALSE; + if (gUnknown_030006D8 == 7) + return FALSE; + return TRUE; +} + +void pause_music_for_sound_maybe(u8 a1) +{ + struct Fanfare *fanfares; + struct Fanfare *fanfare; + u16 songNum; + m4aMPlayStop(&gUnknown_03007380); + fanfares = gUnknown_0837DEF4; + fanfare = &fanfares[a1]; + songNum = fanfare->songNum; + gUnknown_030006DA = fanfare->duration; + m4aSongNumStart(songNum); +} + +bool8 ducking_tick(u8 a1) +{ + if (gUnknown_030006DA) + { + gUnknown_030006DA--; + return FALSE; + } + else + { + if (!a1) + m4aMPlayContinue(&gUnknown_03007380); + else + m4aSongNumStart(0); + + return TRUE; + } +} + +void unref_sub_8074EA4(u8 a1) +{ + m4aSongNumStop(gUnknown_0837DEF4[a1].songNum); +} + +void fanfare_play(u16 a1) +{ + s32 i; + for (i = 0; (u32)i < 12; i++) + { + struct Fanfare *fanfare = &gUnknown_0837DEF4[i]; + if (fanfare->songNum == a1) + { + pause_music_for_sound_maybe(i); + task_add_50_overworld_fanfare_if_not_running(); + return; + } + } + + pause_music_for_sound_maybe(0); + task_add_50_overworld_fanfare_if_not_running(); +} + +bool8 task_is_not_running_overworld_fanfare(void) +{ + if (FuncIsActiveTask(task50_overworld_fanfare) == TRUE) + return FALSE; + return TRUE; +} + +void task50_overworld_fanfare(u8 taskId) +{ + if (gUnknown_030006DA) + { + gUnknown_030006DA--; + } + else + { + m4aMPlayContinue(&gUnknown_03007380); + DestroyTask(taskId); + } +} + +void task_add_50_overworld_fanfare_if_not_running(void) +{ + if (FuncIsActiveTask(task50_overworld_fanfare) != TRUE) + CreateTask(task50_overworld_fanfare, 80); +} + +void sub_8074F6C(u16 a1, u8 a2) +{ + if (gUnknown_03004AEC) + a1 = 0; + m4aSongNumStart(a1); + m4aMPlayImmInit(&gUnknown_03007380); + m4aMPlayVolumeControl(&gUnknown_03007380, 0xFFFF, 0); + m4aSongNumStop(a1); + sub_81DE0F0(&gUnknown_03007380, a2); +} + +void sub_8074FB8(u8 a1) +{ + sub_81DE0D0(&gUnknown_03007380, a1); +} + +bool8 sub_8074FD0(void) +{ + if (gUnknown_03007380.status & MUSICPLAYER_STATUS_PAUSE) + return TRUE; + if (!(gUnknown_03007380.status & MUSICPLAYER_STATUS_TRACK)) + return TRUE; + return FALSE; +} + +void sub_8074FF8(u8 a1) +{ + sub_81DE0F0(&gUnknown_03007380, a1); +} + +void play_sound_effect(u8 a1) +{ + m4aMPlayFadeOut(&gUnknown_03007380, a1); +} + +bool8 sub_8075028(void) +{ + if (!(gUnknown_03007380.status & MUSICPLAYER_STATUS_TRACK)) + return TRUE; + return FALSE; +} + +void cry_related(u16 a1, u8 a2) +{ + m4aMPlayVolumeControl(&gUnknown_03007380, 0xFFFF, 85); + sub_80751C0(a1, a2, 0x7D, 0xA, 0); + gUnknown_0202F7A0 = 2; + sub_8075450(); +} + +void sub_8075090(u16 a1, s8 a2, s8 a3, u8 a4) +{ + sub_80751C0(a1, a2, a3, a4, 0); +} + +void sub_80750B4(u16 a1, s8 a2, u8 a3) +{ + if (a3 == 1) + { + sub_80751C0(a1, a2, 0x7D, 0xA, 1); + } + else + { + m4aMPlayVolumeControl(&gUnknown_03007380, 0xFFFF, 85); + sub_80751C0(a1, a2, 0x7D, 0xA, a3); + gUnknown_0202F7A0 = 2; + sub_8075450(); + } +} + +void sub_8075114(u16 a1, s8 a2, u8 a3) +{ + if (a3 == 1) + { + sub_80751C0(a1, a2, 0x7D, 0xA, 1); + } + else + { + if (!(gUnknown_020239F8 & 0x40)) + m4aMPlayVolumeControl(&gUnknown_03007380, 0xFFFF, 85); + sub_80751C0(a1, a2, 0x7D, 0xA, a3); + } +} + +void sub_8075178(u16 a1, u8 a2) +{ + m4aMPlayVolumeControl(&gUnknown_03007380, 0xFFFF, 85); + sub_80751C0(a1, 0, 0x7D, 0xA, a2); + gUnknown_0202F7A0 = 2; + sub_8075450(); +} + +#define GET_CRY_PTR(a, b)\ +{\ + u32 ptr1;\ + struct MusicPlayerInfo *ptr2;\ + if (v0)\ + ptr1 = (u32)&a[index];\ + else\ + ptr1 = (u32)&b[index];\ + ptr2 = sub_81DF43C(ptr1);\ + gUnknown_0202F79C = ptr2;\ + break;\ +} + +void sub_80751C0(u16 species, s8 a2, s8 a3, u8 a4, u8 a5) +{ + u32 cryId; + u32 v0; + u32 v1; + u32 v2; + u32 v3; + u32 v4; + u32 index; + u8 table; + + species--; + + cryId = species; + + v0 = 0; + v1 = 0; + v2 = 140; + v3 = 15360; + v4 = 0; + + switch (a5) + { + case 0: + break; + case 1: + v2 = 20; + v1 = 225; + break; + case 2: + v2 = 30; + v1 = 225; + v3 = 15600; + v4 = 20; + a3 = 80; + break; + case 3: + v2 = 50; + v1 = 200; + v3 = 14800; + break; + case 4: + v2 = 20; + v1 = 220; + v3 = 15800; + break; + case 5: + v1 = 200; + v3 = 14500; + break; + } + + sub_81DF50C(a3); + sub_81DF520(a2); + sub_81DF538(v3); + sub_81DF570(v2); + sub_81DF588(0); + sub_81DF57C(v1); + sub_81DF5AC(v4); + sub_81DF618(a4); + + asm(""); + asm(""); + asm(""); + asm(""); + asm(""); + asm(""); + asm(""); + + cryId = speciesid_conv(cryId); + index = 0x7F; + asm("" ::: "r0"); + index &= cryId; + table = cryId >> 7; + + switch (table) + { + case 0: GET_CRY_PTR(voicegroup_84537C0, voicegroup_8452590); + case 1: GET_CRY_PTR(voicegroup_8453DC0, voicegroup_8452B90); + case 2: GET_CRY_PTR(voicegroup_84543C0, voicegroup_8453190); + case 3: GET_CRY_PTR(voicegroup_84549C0, voicegroup_8453790); + } +} + +bool8 sub_8075374(void) +{ + if (FuncIsActiveTask(sub_8075408) == TRUE) + { + return FALSE; + } + else + { + ClearPokemonCrySongs(); + return TRUE; + } +} + +void sub_8075398(void) +{ + m4aMPlayStop(gUnknown_0202F79C); + ClearPokemonCrySongs(); +} + +void sub_80753B0(void) +{ + m4aMPlayStop(gUnknown_0202F79C); +} + +bool8 sub_80753C4(void) +{ + if (sub_81DF594(gUnknown_0202F79C)) + { + return TRUE; + } + else + { + ClearPokemonCrySongs(); + return FALSE; + } +} + +bool8 sub_80753E8(void) +{ + if (sub_81DF594(gUnknown_0202F79C)) + return TRUE; + else + return FALSE; +} + +void sub_8075408(u8 taskId) +{ + if (gUnknown_0202F7A0) + { + gUnknown_0202F7A0--; + } + else if (!sub_81DF594(gUnknown_0202F79C)) + { + m4aMPlayVolumeControl(&gUnknown_03007380, 0xFFFF, 256); + DestroyTask(taskId); + } +} + +void sub_8075450(void) +{ + if (FuncIsActiveTask(sub_8075408) != TRUE) + CreateTask(sub_8075408, 80); +} + +void sub_8075474(u16 a1) +{ + if (gUnknown_03004AEC) + a1 = 0; + m4aSongNumStart(a1); +} + +void audio_play(u16 songNum) +{ + m4aSongNumStart(songNum); +} + +void audio_play_and_stuff(u16 a1, u8 a2) +{ + m4aSongNumStart(a1); + m4aMPlayImmInit(&gUnknown_030073C0); + m4aMPlayImmInit(&gUnknown_03007400); + m4aMPlayPanpotControl(&gUnknown_030073C0, 0xFFFF, a2); + m4aMPlayPanpotControl(&gUnknown_03007400, 0xFFFF, a2); +} + +void sub_80754F8(u16 a1, u8 a2) +{ + m4aSongNumStart(a1); + m4aMPlayImmInit(&gUnknown_030073C0); + m4aMPlayPanpotControl(&gUnknown_030073C0, 0xFFFF, a2); +} + +void sub_807552C(u16 a1, u8 a2) +{ + m4aSongNumStart(a1); + m4aMPlayImmInit(&gUnknown_03007400); + m4aMPlayPanpotControl(&gUnknown_03007400, 0xFFFF, a2); +} + +void sub_8075560(u8 a1) +{ + m4aMPlayPanpotControl(&gUnknown_030073C0, 0xFFFF, a1); + m4aMPlayPanpotControl(&gUnknown_03007400, 0xFFFF, a1); +} + +bool8 mplay_has_finished_maybe(void) +{ + if ((gUnknown_030073C0.status & MUSICPLAYER_STATUS_PAUSE) && (gUnknown_03007400.status & MUSICPLAYER_STATUS_PAUSE)) + return FALSE; + if (!(gUnknown_030073C0.status & MUSICPLAYER_STATUS_TRACK) && !(gUnknown_03007400.status & MUSICPLAYER_STATUS_TRACK)) + return FALSE; + return TRUE; +} + +bool8 sub_80755D4(void) +{ + if (gUnknown_03007380.status & MUSICPLAYER_STATUS_PAUSE) + return FALSE; + if (!(gUnknown_03007380.status & MUSICPLAYER_STATUS_TRACK)) + return FALSE; + return TRUE; +} + +bool8 sub_80755FC(void) +{ + if (gUnknown_03007450.status & MUSICPLAYER_STATUS_PAUSE) + return FALSE; + if (!(gUnknown_03007450.status & MUSICPLAYER_STATUS_TRACK)) + return FALSE; + return TRUE; +} |