mirror of https://github.com/zeldaret/tmc.git
decompile audio
This commit is contained in:
parent
c77414731d
commit
58b4df70b5
|
|
@ -981,59 +981,3 @@ _080A31FC:
|
|||
_080A3200:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start InitSound
|
||||
InitSound: @ 0xInitSound
|
||||
push {lr}
|
||||
bl sub_080A3210
|
||||
bl m4aSoundInit
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_080A3210
|
||||
sub_080A3210: @ 0x080A3210
|
||||
push {r4, lr}
|
||||
ldr r4, _080A3230 @ =gUnk_02021EE0
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x18
|
||||
bl MemClear
|
||||
bl sub_080A35C8
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #1
|
||||
strh r0, [r4, #0x12]
|
||||
strh r0, [r4, #4]
|
||||
bl m4aMPlayAllStop
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_080A3230: .4byte gUnk_02021EE0
|
||||
|
||||
thumb_func_start sub_080A3234
|
||||
sub_080A3234: @ 0x080A3234
|
||||
push {lr}
|
||||
ldr r1, _080A3244 @ =gUnk_02021EE0
|
||||
strh r0, [r1, #8]
|
||||
strh r0, [r1, #0xa]
|
||||
ldrh r0, [r1, #0x14]
|
||||
bl sub_080A353C
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_080A3244: .4byte gUnk_02021EE0
|
||||
|
||||
thumb_func_start sub_080A3248
|
||||
sub_080A3248: @ 0x080A3248
|
||||
push {lr}
|
||||
ldr r1, _080A3258 @ =gUnk_02021EE0
|
||||
strh r0, [r1, #0x10]
|
||||
strh r0, [r1, #0xe]
|
||||
ldrh r0, [r1, #0x14]
|
||||
bl sub_080A353C
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_080A3258: .4byte gUnk_02021EE0
|
||||
|
||||
thumb_func_start sub_080A325C
|
||||
sub_080A325C: @ 0x080A325C
|
||||
ldr r1, _080A3264 @ =gUnk_02021EE0
|
||||
strh r0, [r1, #0x12]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_080A3264: .4byte gUnk_02021EE0
|
||||
|
|
|
|||
|
|
@ -6,201 +6,6 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_080A3480
|
||||
sub_080A3480: @ 0x080A3480
|
||||
push {r4, lr}
|
||||
ldr r4, _080A34A4 @ =gUnk_02021EE0
|
||||
movs r0, #0xa
|
||||
ldrsh r1, [r4, r0]
|
||||
movs r2, #8
|
||||
ldrsh r0, [r4, r2]
|
||||
cmp r1, r0
|
||||
beq _080A34C4
|
||||
adds r0, r1, #0
|
||||
movs r2, #8
|
||||
ldrsh r1, [r4, r2]
|
||||
bl sub_080A3518
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
bne _080A34A8
|
||||
ldrh r0, [r4, #0xa]
|
||||
b _080A34AC
|
||||
.align 2, 0
|
||||
_080A34A4: .4byte gUnk_02021EE0
|
||||
_080A34A8:
|
||||
ldrh r0, [r4, #8]
|
||||
adds r0, r0, r1
|
||||
_080A34AC:
|
||||
strh r0, [r4, #8]
|
||||
movs r1, #8
|
||||
ldrsh r0, [r4, r1]
|
||||
cmp r0, #0
|
||||
bge _080A34BC
|
||||
movs r0, #0
|
||||
strh r0, [r4, #0xa]
|
||||
strh r0, [r4, #8]
|
||||
_080A34BC:
|
||||
ldrh r0, [r4, #0x14]
|
||||
bl sub_080A353C
|
||||
b _080A3516
|
||||
_080A34C4:
|
||||
movs r2, #0x10
|
||||
ldrsh r1, [r4, r2]
|
||||
movs r2, #0xe
|
||||
ldrsh r0, [r4, r2]
|
||||
cmp r1, r0
|
||||
beq _080A3516
|
||||
adds r0, r1, #0
|
||||
movs r2, #0xe
|
||||
ldrsh r1, [r4, r2]
|
||||
bl sub_080A3518
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
bne _080A34FC
|
||||
ldrb r0, [r4, #2]
|
||||
ldrh r2, [r4, #0x10]
|
||||
cmp r0, #0
|
||||
beq _080A34F8
|
||||
cmp r2, #0
|
||||
bne _080A34F8
|
||||
strb r1, [r4, #2]
|
||||
strh r1, [r4, #0x14]
|
||||
movs r0, #0
|
||||
bl m4aSongNumStop
|
||||
b _080A3502
|
||||
_080A34F8:
|
||||
strh r2, [r4, #0xe]
|
||||
b _080A3502
|
||||
_080A34FC:
|
||||
ldrh r0, [r4, #0xe]
|
||||
adds r0, r0, r1
|
||||
strh r0, [r4, #0xe]
|
||||
_080A3502:
|
||||
movs r1, #0xe
|
||||
ldrsh r0, [r4, r1]
|
||||
cmp r0, #0
|
||||
bge _080A3510
|
||||
movs r0, #0
|
||||
strh r0, [r4, #0x10]
|
||||
strh r0, [r4, #0xe]
|
||||
_080A3510:
|
||||
ldrh r0, [r4, #0x14]
|
||||
bl sub_080A353C
|
||||
_080A3516:
|
||||
pop {r4, pc}
|
||||
|
||||
thumb_func_start sub_080A3518
|
||||
sub_080A3518: @ 0x080A3518
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
subs r0, r2, r1
|
||||
cmp r0, #0
|
||||
ble _080A352C
|
||||
adds r1, #4
|
||||
cmp r2, r1
|
||||
ble _080A3532
|
||||
movs r0, #4
|
||||
b _080A353A
|
||||
_080A352C:
|
||||
subs r1, #4
|
||||
cmp r2, r1
|
||||
blt _080A3536
|
||||
_080A3532:
|
||||
movs r0, #0
|
||||
b _080A353A
|
||||
_080A3536:
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
_080A353A:
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_080A353C
|
||||
sub_080A353C: @ 0x080A353C
|
||||
push {r4, r5, lr}
|
||||
adds r3, r0, #0
|
||||
cmp r3, #0
|
||||
beq _080A358C
|
||||
subs r0, r3, #1
|
||||
cmp r0, #0x62
|
||||
bhi _080A3558
|
||||
ldr r0, _080A3554 @ =gUnk_02021EE0
|
||||
movs r1, #0xe
|
||||
ldrsh r5, [r0, r1]
|
||||
b _080A355E
|
||||
.align 2, 0
|
||||
_080A3554: .4byte gUnk_02021EE0
|
||||
_080A3558:
|
||||
ldr r0, _080A3590 @ =gUnk_02021EE0
|
||||
movs r1, #0x12
|
||||
ldrsh r5, [r0, r1]
|
||||
_080A355E:
|
||||
movs r1, #8
|
||||
ldrsh r0, [r0, r1]
|
||||
muls r0, r5, r0
|
||||
lsrs r5, r0, #8
|
||||
ldr r2, _080A3594 @ =gMPlayTable
|
||||
ldr r1, _080A3598 @ =gSongTable
|
||||
lsls r0, r3, #3
|
||||
adds r0, r0, r1
|
||||
ldrh r1, [r0, #4]
|
||||
lsls r0, r1, #1
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r2
|
||||
ldr r4, [r0]
|
||||
adds r0, r4, #0
|
||||
bl m4aMPlayImmInit
|
||||
ldr r1, _080A359C @ =0x0000FFFF
|
||||
lsls r2, r5, #0x10
|
||||
lsrs r2, r2, #0x10
|
||||
adds r0, r4, #0
|
||||
bl m4aMPlayVolumeControl
|
||||
_080A358C:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_080A3590: .4byte gUnk_02021EE0
|
||||
_080A3594: .4byte gMPlayTable
|
||||
_080A3598: .4byte gSongTable
|
||||
_080A359C: .4byte 0x0000FFFF
|
||||
|
||||
thumb_func_start sub_080A35A0
|
||||
sub_080A35A0: @ 0x080A35A0
|
||||
push {lr}
|
||||
ldr r2, _080A35B0 @ =gUnk_02021EE0
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #1
|
||||
strh r1, [r2, #0xa]
|
||||
bl sub_080A353C
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_080A35B0: .4byte gUnk_02021EE0
|
||||
|
||||
thumb_func_start sub_080A35B4
|
||||
sub_080A35B4: @ 0x080A35B4
|
||||
push {lr}
|
||||
ldr r2, _080A35C4 @ =gUnk_02021EE0
|
||||
movs r1, #0
|
||||
strh r1, [r2, #0xa]
|
||||
bl sub_080A353C
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_080A35C4: .4byte gUnk_02021EE0
|
||||
|
||||
thumb_func_start sub_080A35C8
|
||||
sub_080A35C8: @ 0x080A35C8
|
||||
ldr r1, _080A35DC @ =gUnk_02021EE0
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #1
|
||||
strh r0, [r1, #6]
|
||||
strh r0, [r1, #8]
|
||||
strh r0, [r1, #0xa]
|
||||
strh r0, [r1, #0xc]
|
||||
strh r0, [r1, #0xe]
|
||||
strh r0, [r1, #0x10]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_080A35DC: .4byte gUnk_02021EE0
|
||||
|
||||
thumb_func_start HandleCreditsScreen
|
||||
HandleCreditsScreen: @ 0x080A35E0
|
||||
push {lr}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
.section .rodata
|
||||
|
||||
song_08DCC48C:: @ 08DCC48C
|
||||
sfxNone:: @ 08DCC48C
|
||||
.incbin "baserom.gba", 0xDCC48C, 0x0000240
|
||||
|
||||
bgmCastleTournament:: @ 08DCC6CC
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ typedef enum {
|
|||
BGM_VAATI_THEME,
|
||||
BGM_EZLO_THEME,
|
||||
BGM_STORY,
|
||||
BGM_FESTIVAL_APPROACH, //0x10
|
||||
BGM_FESTIVAL_APPROACH,
|
||||
BGM_BEAT_VAATI,
|
||||
BGM_UNUSED_12,
|
||||
BGM_BEANSTALK,
|
||||
|
|
@ -39,7 +39,7 @@ typedef enum {
|
|||
BGM_MINISH_WOODS,
|
||||
BGM_CRENEL_STORM,
|
||||
BGM_CASTOR_WILDS,
|
||||
BGM_HYRULE_TOWN, //0x20
|
||||
BGM_HYRULE_TOWN,
|
||||
BGM_ROYAL_VALLEY,
|
||||
BGM_CLOUD_TOPS,
|
||||
BGM_DARK_HYRULE_CASTLE,
|
||||
|
|
@ -55,7 +55,7 @@ typedef enum {
|
|||
BGM_FIGHT_THEME,
|
||||
BGM_BOSS_THEME,
|
||||
BGM_VAATI_REBORN,
|
||||
BGM_VAATI_TRANSFIGURED, // 0x30
|
||||
BGM_VAATI_TRANSFIGURED,
|
||||
BGM_CASTLE_COLLAPSE,
|
||||
BGM_VAATI_WRATH,
|
||||
BGM_FIGHT_THEME2,
|
||||
|
|
@ -71,7 +71,7 @@ typedef enum {
|
|||
BGM_UNUSED_3D,
|
||||
BGM_UNUSED_3E,
|
||||
BGM_UNUSED_3F,
|
||||
BGM_UNUSED_40, // 0x40
|
||||
BGM_UNUSED_40,
|
||||
BGM_UNUSED_41,
|
||||
BGM_UNUSED_42,
|
||||
BGM_UNUSED_43,
|
||||
|
|
@ -152,7 +152,7 @@ typedef enum {
|
|||
SFX_VO_EZLO1,
|
||||
SFX_VO_EZLO2,
|
||||
SFX_VO_EZLO3,
|
||||
SFX_VO_EZLO4, //0x90
|
||||
SFX_VO_EZLO4,
|
||||
SFX_VO_EZLO5,
|
||||
SFX_VO_EZLO6,
|
||||
SFX_VO_EZLO7,
|
||||
|
|
@ -574,6 +574,7 @@ typedef enum {
|
|||
SONG_UNK_11 = 0x80110000,
|
||||
} Sound;
|
||||
|
||||
void InitSound(void);
|
||||
void SoundReq(Sound sound);
|
||||
|
||||
#endif // AUDIO_H
|
||||
|
|
|
|||
|
|
@ -60,11 +60,14 @@ typedef struct MusicPlayer {
|
|||
extern const MusicPlayer gMPlayTable[];
|
||||
extern const Song gSongTable[];
|
||||
|
||||
void m4aSoundInit(void);
|
||||
void m4aSongNumStart(u16 n);
|
||||
void m4aSongNumStartOrContinue(u16 n);
|
||||
void m4aSongNumStop(u16 n);
|
||||
void m4aMPlayAllStop(void);
|
||||
void m4aMPlayImmInit(MusicPlayerInfo* mplayInfo);
|
||||
void m4aMPlayTempoControl(MusicPlayerInfo* mplayInfo, u16 tempo);
|
||||
void m4aMPlayVolumeControl(MusicPlayerInfo* mplayInfo, u16 trackBits, u16 volume);
|
||||
void m4aSoundVSyncOn(void);
|
||||
void m4aSoundVSyncOff(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -79,7 +79,6 @@ extern UI gUnk_02032EC0;
|
|||
|
||||
void InitScreen(u32 screen);
|
||||
|
||||
extern void InitSound(void);
|
||||
extern void sub_08056208(void);
|
||||
extern void sub_0804FFE4(void);
|
||||
extern void sub_080ADD30(void);
|
||||
|
|
|
|||
|
|
@ -190,10 +190,10 @@ typedef struct struct_02021EE0 {
|
|||
s16 unk_06;
|
||||
s16 unk_08;
|
||||
s16 unk_0a;
|
||||
u16 unk_0c;
|
||||
u16 unk_0e;
|
||||
u16 unk_10;
|
||||
u16 unk_12;
|
||||
s16 unk_0c;
|
||||
s16 unk_0e;
|
||||
s16 unk_10;
|
||||
s16 unk_12;
|
||||
u16 currentBgm;
|
||||
} struct_02021EE0;
|
||||
|
||||
|
|
|
|||
141
src/audio.c
141
src/audio.c
|
|
@ -2,17 +2,49 @@
|
|||
#include "main.h"
|
||||
#include "gba/m4a.h"
|
||||
#include "audio.h"
|
||||
#include "utils.h"
|
||||
#include "structures.h"
|
||||
|
||||
extern void sub_080A35A0(u32);
|
||||
extern void sub_080A35C8(void);
|
||||
extern void sub_080A353C(u32);
|
||||
extern void sub_080A3234(u32);
|
||||
extern void sub_080A35B4(u32);
|
||||
s32 sub_080A3518(s32, s32);
|
||||
void sub_080A353C(u32);
|
||||
void sub_080A35A0(u32);
|
||||
void sub_080A35B4(u32);
|
||||
void sub_080A35C8(void);
|
||||
|
||||
#define IS_BGM(song) (song) - 1 <= NUM_BGM - 1
|
||||
#define IS_SFX(song) (song) - 1 > NUM_BGM - 1
|
||||
|
||||
void sub_080A3210(void);
|
||||
|
||||
void InitSound(void){
|
||||
sub_080A3210();
|
||||
m4aSoundInit();
|
||||
}
|
||||
|
||||
void sub_080A3210(void){
|
||||
MemClear(&gUnk_02021EE0, 0x18);
|
||||
sub_080A35C8();
|
||||
gUnk_02021EE0.unk_12 = 0x100;
|
||||
gUnk_02021EE0.unk_04 = 0x100;
|
||||
m4aMPlayAllStop();
|
||||
}
|
||||
|
||||
void sub_080A3234(u32 arg){
|
||||
gUnk_02021EE0.unk_08 = arg;
|
||||
gUnk_02021EE0.unk_0a = arg;
|
||||
sub_080A353C(gUnk_02021EE0.currentBgm);
|
||||
}
|
||||
|
||||
void sub_080A3248(u32 arg){
|
||||
gUnk_02021EE0.unk_10 = arg;
|
||||
gUnk_02021EE0.unk_0e = arg;
|
||||
sub_080A353C(gUnk_02021EE0.currentBgm);
|
||||
}
|
||||
|
||||
void sub_080A325C(u32 arg){
|
||||
gUnk_02021EE0.unk_12 = arg;
|
||||
}
|
||||
|
||||
void SoundReq(Sound sound) {
|
||||
u32 song;
|
||||
struct_02021EE0* ptr;
|
||||
|
|
@ -111,7 +143,102 @@ void SoundReq(Sound sound) {
|
|||
}
|
||||
}
|
||||
|
||||
extern const SongHeader song_08DCC48C;
|
||||
void sub_080A3480(void) {
|
||||
u32 iVar2;
|
||||
struct_02021EE0* ptr = &gUnk_02021EE0;
|
||||
|
||||
if (ptr->unk_0a != ptr->unk_08) {
|
||||
iVar2 = sub_080A3518(ptr->unk_0a, ptr->unk_08);
|
||||
if (iVar2 == 0) {
|
||||
ptr->unk_08 = ptr->unk_0a;
|
||||
} else {
|
||||
ptr->unk_08 = ptr->unk_08 + iVar2;
|
||||
}
|
||||
if (ptr->unk_08 < 0) {
|
||||
ptr->unk_0a = 0;
|
||||
ptr->unk_08 = 0;
|
||||
}
|
||||
sub_080A353C(ptr->currentBgm);
|
||||
} else {
|
||||
if (ptr->unk_10 != ptr->unk_0e) {
|
||||
iVar2 = sub_080A3518(ptr->unk_10, ptr->unk_0e);
|
||||
if (iVar2 == 0) {
|
||||
if (ptr->unk_02 != 0 && ptr->unk_10 == 0) {
|
||||
ptr->unk_02 = 0;
|
||||
ptr->currentBgm = 0;
|
||||
m4aSongNumStop(0);
|
||||
} else {
|
||||
ptr->unk_0e = ptr->unk_10;
|
||||
}
|
||||
} else {
|
||||
ptr->unk_0e += iVar2;
|
||||
}
|
||||
if (ptr->unk_0e < 0) {
|
||||
ptr->unk_10 = 0;
|
||||
ptr->unk_0e = 0;
|
||||
}
|
||||
sub_080A353C(ptr->currentBgm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s32 sub_080A3518(s32 unk_1, s32 unk_2){
|
||||
if (unk_1 - unk_2 >= 1) {
|
||||
unk_2 += 4;
|
||||
if (unk_1 > unk_2)
|
||||
return 4;
|
||||
else
|
||||
return 0;
|
||||
} else {
|
||||
unk_2 -= 4;
|
||||
if (unk_1 < unk_2)
|
||||
return -4;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080A353C(u32 song){
|
||||
u32 volume;
|
||||
u32 iVar2;
|
||||
MusicPlayerInfo* musicPlayerInfo;
|
||||
|
||||
if(song == 0)
|
||||
return;
|
||||
|
||||
if (IS_BGM(song)) {
|
||||
volume = gUnk_02021EE0.unk_0e;
|
||||
}
|
||||
else{
|
||||
volume = gUnk_02021EE0.unk_12;
|
||||
}
|
||||
iVar2 = gUnk_02021EE0.unk_08;
|
||||
volume = iVar2 * volume / 0x100;
|
||||
musicPlayerInfo = gMPlayTable[gSongTable[song].ms].info;
|
||||
m4aMPlayImmInit(musicPlayerInfo);
|
||||
m4aMPlayVolumeControl(musicPlayerInfo, 0xffff, volume);
|
||||
}
|
||||
|
||||
void sub_080A35A0(u32 song){
|
||||
gUnk_02021EE0.unk_0a = 0x100;
|
||||
sub_080A353C(song);
|
||||
}
|
||||
|
||||
void sub_080A35B4(u32 song){
|
||||
gUnk_02021EE0.unk_0a = 0;
|
||||
sub_080A353C(song);
|
||||
}
|
||||
|
||||
void sub_080A35C8(){
|
||||
gUnk_02021EE0.unk_06 = 0x100;
|
||||
gUnk_02021EE0.unk_08 = 0x100;
|
||||
gUnk_02021EE0.unk_0a = 0x100;
|
||||
gUnk_02021EE0.unk_0c = 0x100;
|
||||
gUnk_02021EE0.unk_0e = 0x100;
|
||||
gUnk_02021EE0.unk_10 = 0x100;
|
||||
}
|
||||
|
||||
extern const SongHeader sfxNone;
|
||||
extern const SongHeader bgmCastleTournament;
|
||||
extern const SongHeader bgmVaatiMotif;
|
||||
extern const SongHeader bgmTitleScreen;
|
||||
|
|
@ -621,7 +748,7 @@ extern const SongHeader sfx220;
|
|||
extern const SongHeader sfx221;
|
||||
|
||||
const Song gSongTable[] = {
|
||||
{ &song_08DCC48C, 0x001f, 0x001f },
|
||||
{ &sfxNone, 0x001f, 0x001f },
|
||||
{ &bgmCastleTournament, 0x001f, 0x001f },
|
||||
{ &bgmVaatiMotif, 0x001f, 0x001f },
|
||||
{ &bgmTitleScreen, 0x001f, 0x001f },
|
||||
|
|
|
|||
Loading…
Reference in New Issue