mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-25 07:28:17 -05:00
decomp UpdateSound and label more music stuff
This commit is contained in:
parent
a4bf7fa76a
commit
dfffb31195
|
|
@ -4261,7 +4261,7 @@ _0809FD82:
|
|||
bl _0809EAE0
|
||||
_0809FD90:
|
||||
adds r0, r1, 0
|
||||
bl sub_8011914
|
||||
bl xxx_call_queue_bgm
|
||||
bl _0809EAE0
|
||||
.align 2, 0
|
||||
_0809FD9C: .4byte 0x000003e7
|
||||
|
|
@ -8781,7 +8781,7 @@ _080A2304:
|
|||
ldr r5, _080A231C
|
||||
cmp r0, r5
|
||||
beq _080A236A
|
||||
bl sub_8011914
|
||||
bl xxx_call_queue_bgm
|
||||
_080A2312:
|
||||
strh r5, [r4]
|
||||
b _080A1EBE
|
||||
|
|
|
|||
362
asm/music.s
362
asm/music.s
|
|
@ -1,362 +0,0 @@
|
|||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start UpdateSound
|
||||
UpdateSound:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
bl m4aSoundMain
|
||||
ldr r4, _0800C680
|
||||
ldrh r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _0800C670
|
||||
b _0800C7E0
|
||||
_0800C670:
|
||||
cmp r0, 0x2
|
||||
beq _0800C6C0
|
||||
cmp r0, 0x2
|
||||
bgt _0800C684
|
||||
cmp r0, 0x1
|
||||
beq _0800C68E
|
||||
b _0800C8A2
|
||||
.align 2, 0
|
||||
_0800C680: .4byte gUnknown_202D690
|
||||
_0800C684:
|
||||
cmp r0, 0x3
|
||||
beq _0800C700
|
||||
cmp r0, 0x4
|
||||
beq _0800C730
|
||||
b _0800C8A2
|
||||
_0800C68E:
|
||||
ldr r2, _0800C69C
|
||||
ldrh r0, [r2]
|
||||
cmp r0, 0
|
||||
beq _0800C6A0
|
||||
subs r0, 0x1
|
||||
strh r0, [r2]
|
||||
b _0800C8A2
|
||||
.align 2, 0
|
||||
_0800C69C: .4byte gUnknown_202D692
|
||||
_0800C6A0:
|
||||
ldr r3, _0800C6B4
|
||||
ldrh r1, [r3]
|
||||
ldr r0, _0800C6B8
|
||||
cmp r1, r0
|
||||
bne _0800C6BC
|
||||
movs r0, 0x4
|
||||
strh r0, [r4]
|
||||
movs r0, 0x20
|
||||
strh r0, [r2]
|
||||
b _0800C8A2
|
||||
.align 2, 0
|
||||
_0800C6B4: .4byte gCurrentFanfareSong
|
||||
_0800C6B8: .4byte 0x000003e5
|
||||
_0800C6BC:
|
||||
ldrh r0, [r3]
|
||||
b _0800C6E4
|
||||
_0800C6C0:
|
||||
ldr r0, _0800C6F0
|
||||
ldrh r1, [r0]
|
||||
ldr r0, _0800C6F4
|
||||
cmp r1, r0
|
||||
beq _0800C6D8
|
||||
movs r0, 0
|
||||
bl IsMusicPlayerPlaying
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0800C6D8
|
||||
b _0800C8A2
|
||||
_0800C6D8:
|
||||
ldr r2, _0800C6F8
|
||||
ldrh r1, [r2]
|
||||
ldr r0, _0800C6FC
|
||||
cmp r1, r0
|
||||
beq _0800C718
|
||||
ldrh r0, [r2]
|
||||
_0800C6E4:
|
||||
bl m4aSongNumStart
|
||||
movs r0, 0x3
|
||||
strh r0, [r4]
|
||||
b _0800C8A2
|
||||
.align 2, 0
|
||||
_0800C6F0: .4byte gCurrentBGSong
|
||||
_0800C6F4: .4byte 0x000003e7
|
||||
_0800C6F8: .4byte gCurrentFanfareSong
|
||||
_0800C6FC: .4byte 0x000003e5
|
||||
_0800C700:
|
||||
ldr r0, _0800C724
|
||||
ldrh r1, [r0]
|
||||
ldr r0, _0800C728
|
||||
cmp r1, r0
|
||||
beq _0800C718
|
||||
movs r0, 0x1
|
||||
bl IsMusicPlayerPlaying
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0800C718
|
||||
b _0800C8A2
|
||||
_0800C718:
|
||||
movs r0, 0x4
|
||||
strh r0, [r4]
|
||||
ldr r1, _0800C72C
|
||||
movs r0, 0x20
|
||||
strh r0, [r1]
|
||||
b _0800C8A2
|
||||
.align 2, 0
|
||||
_0800C724: .4byte gCurrentFanfareSong
|
||||
_0800C728: .4byte 0x000003e5
|
||||
_0800C72C: .4byte gUnknown_202D692
|
||||
_0800C730:
|
||||
ldr r0, _0800C74C
|
||||
ldrh r1, [r0]
|
||||
ldr r0, _0800C750
|
||||
cmp r1, r0
|
||||
beq _0800C754
|
||||
movs r0, 0x1
|
||||
bl IsMusicPlayerPlaying
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0800C748
|
||||
b _0800C8A2
|
||||
_0800C748:
|
||||
b _0800C75A
|
||||
.align 2, 0
|
||||
_0800C74C: .4byte gCurrentFanfareSong
|
||||
_0800C750: .4byte 0x000003e5
|
||||
_0800C754:
|
||||
ldr r0, _0800C76C
|
||||
bl m4aMPlayStop
|
||||
_0800C75A:
|
||||
ldr r1, _0800C770
|
||||
ldrh r0, [r1]
|
||||
adds r2, r0, 0
|
||||
cmp r2, 0
|
||||
beq _0800C774
|
||||
subs r0, 0x1
|
||||
strh r0, [r1]
|
||||
b _0800C8A2
|
||||
.align 2, 0
|
||||
_0800C76C: .4byte gMPlayInfo_Fanfare
|
||||
_0800C770: .4byte gUnknown_202D692
|
||||
_0800C774:
|
||||
ldr r3, _0800C794
|
||||
ldrh r1, [r3]
|
||||
ldr r0, _0800C798
|
||||
cmp r1, r0
|
||||
beq _0800C7B4
|
||||
ldr r1, _0800C79C
|
||||
movs r0, 0x1
|
||||
strh r0, [r1]
|
||||
ldr r0, _0800C7A0
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _0800C7A4
|
||||
ldrh r0, [r3]
|
||||
bl m4aSongNumStart
|
||||
b _0800C7BE
|
||||
.align 2, 0
|
||||
_0800C794: .4byte gCurrentBGSong
|
||||
_0800C798: .4byte 0x000003e7
|
||||
_0800C79C: .4byte gBGMusicPlayerState
|
||||
_0800C7A0: .4byte gRestartBGM
|
||||
_0800C7A4:
|
||||
ldr r0, _0800C7B0
|
||||
movs r1, 0x4
|
||||
bl m4aMPlayFadeIn
|
||||
b _0800C7BE
|
||||
.align 2, 0
|
||||
_0800C7B0: .4byte gMPlayInfo_BGM
|
||||
_0800C7B4:
|
||||
ldr r0, _0800C7CC
|
||||
strh r2, [r0]
|
||||
ldr r0, _0800C7D0
|
||||
bl m4aMPlayStop
|
||||
_0800C7BE:
|
||||
ldr r1, _0800C7D4
|
||||
movs r0, 0
|
||||
strh r0, [r1]
|
||||
ldr r1, _0800C7D8
|
||||
ldr r2, _0800C7DC
|
||||
b _0800C84C
|
||||
.align 2, 0
|
||||
_0800C7CC: .4byte gBGMusicPlayerState
|
||||
_0800C7D0: .4byte gMPlayInfo_BGM
|
||||
_0800C7D4: .4byte gUnknown_202D690
|
||||
_0800C7D8: .4byte gCurrentFanfareSong
|
||||
_0800C7DC: .4byte 0x000003e5
|
||||
_0800C7E0:
|
||||
ldr r5, _0800C810
|
||||
ldrh r0, [r5]
|
||||
cmp r0, 0
|
||||
beq _0800C864
|
||||
cmp r0, 0x3
|
||||
bgt _0800C8A2
|
||||
cmp r0, 0x2
|
||||
bge _0800C81C
|
||||
cmp r0, 0x1
|
||||
bne _0800C8A2
|
||||
ldr r0, _0800C814
|
||||
ldrh r1, [r0]
|
||||
ldr r0, _0800C818
|
||||
cmp r1, r0
|
||||
beq _0800C80A
|
||||
movs r0, 0
|
||||
bl IsMusicPlayerPlaying
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0800C8A2
|
||||
_0800C80A:
|
||||
movs r0, 0x2
|
||||
strh r0, [r5]
|
||||
b _0800C8A2
|
||||
.align 2, 0
|
||||
_0800C810: .4byte gBGMusicPlayerState
|
||||
_0800C814: .4byte gCurrentBGSong
|
||||
_0800C818: .4byte 0x000003e7
|
||||
_0800C81C:
|
||||
ldr r0, _0800C834
|
||||
ldrh r1, [r0]
|
||||
ldr r0, _0800C838
|
||||
cmp r1, r0
|
||||
beq _0800C83C
|
||||
movs r0, 0
|
||||
bl IsMusicPlayerPlaying
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0800C8A2
|
||||
b _0800C842
|
||||
.align 2, 0
|
||||
_0800C834: .4byte gCurrentBGSong
|
||||
_0800C838: .4byte 0x000003e7
|
||||
_0800C83C:
|
||||
ldr r0, _0800C854
|
||||
bl m4aMPlayStop
|
||||
_0800C842:
|
||||
ldr r1, _0800C858
|
||||
movs r0, 0
|
||||
strh r0, [r1]
|
||||
ldr r1, _0800C85C
|
||||
ldr r2, _0800C860
|
||||
_0800C84C:
|
||||
adds r0, r2, 0
|
||||
strh r0, [r1]
|
||||
b _0800C8A2
|
||||
.align 2, 0
|
||||
_0800C854: .4byte gMPlayInfo_BGM
|
||||
_0800C858: .4byte gBGMusicPlayerState
|
||||
_0800C85C: .4byte gCurrentBGSong
|
||||
_0800C860: .4byte 0x000003e7
|
||||
_0800C864:
|
||||
movs r0, 0
|
||||
bl IsMusicPlayerPlaying
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0
|
||||
bne _0800C8A2
|
||||
ldr r6, _0800C890
|
||||
ldrh r2, [r6]
|
||||
adds r1, r2, 0
|
||||
ldr r4, _0800C894
|
||||
cmp r1, r4
|
||||
beq _0800C89C
|
||||
movs r0, 0x1
|
||||
strh r0, [r5]
|
||||
ldr r0, _0800C898
|
||||
strh r2, [r0]
|
||||
adds r0, r1, 0
|
||||
bl m4aSongNumStart
|
||||
strh r4, [r6]
|
||||
b _0800C8A2
|
||||
.align 2, 0
|
||||
_0800C890: .4byte gUnknown_202D68C
|
||||
_0800C894: .4byte 0x000003e7
|
||||
_0800C898: .4byte gCurrentBGSong
|
||||
_0800C89C:
|
||||
strh r0, [r5]
|
||||
ldr r0, _0800C8C4
|
||||
strh r1, [r0]
|
||||
_0800C8A2:
|
||||
movs r5, 0x2
|
||||
ldr r4, _0800C8C8
|
||||
ldr r0, _0800C8CC
|
||||
mov r8, r0
|
||||
movs r6, 0x18
|
||||
movs r7, 0
|
||||
_0800C8AE:
|
||||
ldrh r1, [r4, 0x2]
|
||||
cmp r1, r8
|
||||
beq _0800C926
|
||||
ldrh r0, [r4]
|
||||
cmp r0, 0x1
|
||||
beq _0800C8D0
|
||||
cmp r0, 0x1
|
||||
ble _0800C926
|
||||
cmp r0, 0x2
|
||||
beq _0800C8F0
|
||||
b _0800C926
|
||||
.align 2, 0
|
||||
_0800C8C4: .4byte gCurrentBGSong
|
||||
_0800C8C8: .4byte gUnknown_3000FE8
|
||||
_0800C8CC: .4byte 0x000003e5
|
||||
_0800C8D0:
|
||||
ldr r0, _0800C8EC
|
||||
cmp r1, r0
|
||||
beq _0800C8E4
|
||||
lsls r0, r5, 16
|
||||
lsrs r0, 16
|
||||
bl IsMusicPlayerPlaying
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0800C926
|
||||
_0800C8E4:
|
||||
movs r0, 0x2
|
||||
strh r0, [r4]
|
||||
b _0800C926
|
||||
.align 2, 0
|
||||
_0800C8EC: .4byte 0x000003e7
|
||||
_0800C8F0:
|
||||
lsls r0, r5, 16
|
||||
lsrs r0, 16
|
||||
bl IsMusicPlayerPlaying
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0
|
||||
beq _0800C91C
|
||||
ldrb r0, [r4, 0x6]
|
||||
cmp r0, 0
|
||||
beq _0800C926
|
||||
strb r7, [r4, 0x6]
|
||||
ldr r0, _0800C918
|
||||
adds r0, r6, r0
|
||||
ldr r0, [r0]
|
||||
ldrh r2, [r4, 0x4]
|
||||
movs r1, 0xFF
|
||||
bl m4aMPlayVolumeControl
|
||||
b _0800C926
|
||||
.align 2, 0
|
||||
_0800C918: .4byte gMPlayTable
|
||||
_0800C91C:
|
||||
strh r0, [r4]
|
||||
mov r1, r8
|
||||
strh r1, [r4, 0x2]
|
||||
strh r0, [r4, 0x4]
|
||||
strb r7, [r4, 0x6]
|
||||
_0800C926:
|
||||
adds r6, 0xC
|
||||
adds r5, 0x1
|
||||
adds r4, 0x8
|
||||
cmp r5, 0x6
|
||||
ble _0800C8AE
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end UpdateSound
|
||||
|
||||
.align 2,0
|
||||
|
|
@ -11,12 +11,12 @@ bool8 IsFanfare(u32 songIndex);
|
|||
u16 GetMusicPlayerIndex(u16 songIndex);
|
||||
bool8 IsMusicPlayerPlaying(u16 songIndex);
|
||||
void StartNewBGM(u16 songIndex);
|
||||
void FadeInNewBGM(u16 SongIndex, u16 speed);
|
||||
void FadeInNewBGM(u16 songIndex, u16 speed);
|
||||
u16 GetCurrentBGSong(void);
|
||||
void sub_800BF48(u16 SongIndex);
|
||||
void QueueBGM(u16 songIndex);
|
||||
void StopBGM(void); // stops all BGM, fanfares and SE's
|
||||
void FadeOutBGM(u16 speed);
|
||||
void PlayFanfareSE(u16 SongIndex, u16 param_2);
|
||||
void PlayFanfareSE(u16 songIndex, u16 volume);
|
||||
void StopFanfareSE(u16 songIndex);
|
||||
void FadeOutFanfareSE(u16 songIndex, u16 speed);
|
||||
bool8 IsFanfareSEPlaying(u16 songIndex);
|
||||
|
|
@ -36,6 +36,7 @@ enum MusicPlayerIndex
|
|||
INDEX_SE6,
|
||||
};
|
||||
|
||||
// TODO: continue to doc the rest of BG/Fanfare Player States
|
||||
enum BG_Player_State
|
||||
{
|
||||
BG_PLAYER_STATE_INITIALIZE = 0,
|
||||
|
|
@ -43,4 +44,10 @@ enum BG_Player_State
|
|||
BG_PLAYER_STATE_STOPPED = 4,
|
||||
};
|
||||
|
||||
enum Fanfare_Player_State
|
||||
{
|
||||
FANFARE_PLAYER_STATE_INITIALIZE = 0,
|
||||
FANFARE_PLAYER_STATE_PLAYING = 3,
|
||||
};
|
||||
|
||||
#endif //GUARD_MUSIC_H
|
||||
|
|
|
|||
|
|
@ -72,8 +72,6 @@ SECTIONS {
|
|||
src/file_system.o(.text);
|
||||
src/main.o(.text);
|
||||
asm/code_800B5F0.o(.text);
|
||||
src/music_pre.o(.text);
|
||||
asm/music.o(.text);
|
||||
src/music.o(.text);
|
||||
src/code_800C9CC.o(.text);
|
||||
src/cpu.o(.text);
|
||||
|
|
|
|||
|
|
@ -191,9 +191,9 @@ void xxx_call_fade_in_new_bgm(u16 songIndex, u16 speed)
|
|||
FadeInNewBGM(songIndex, speed);
|
||||
}
|
||||
|
||||
void sub_8011914(u16 songIndex)
|
||||
void xxx_call_queue_bgm(u16 songIndex)
|
||||
{
|
||||
sub_800BF48(songIndex);
|
||||
QueueBGM(songIndex);
|
||||
}
|
||||
|
||||
void xxx_call_stop_bgm()
|
||||
|
|
|
|||
1123
src/music.c
1123
src/music.c
File diff suppressed because it is too large
Load Diff
945
src/music_pre.c
945
src/music_pre.c
|
|
@ -1,945 +0,0 @@
|
|||
#include "global.h"
|
||||
#include "gba/io_reg.h"
|
||||
#include "m4a.h"
|
||||
#include "bg.h"
|
||||
#include "music.h"
|
||||
#include "input.h"
|
||||
#include "constants/bg_music.h"
|
||||
|
||||
extern bool8 EnableInterrupts(void);
|
||||
extern bool8 DisableInterrupts(void);
|
||||
extern void SoundBiasReset();
|
||||
extern void SoundBiasSet();
|
||||
extern void AckInterrupt(u16);
|
||||
extern void nullsub_25();
|
||||
extern void nullsub_18();
|
||||
extern void UpdateSound();
|
||||
extern void nullsub_21(u16);
|
||||
|
||||
typedef void (*IntrCallback)(void);
|
||||
extern IntrCallback gIntrCallbacks[];
|
||||
|
||||
struct unkStruct_202D648
|
||||
{
|
||||
s16 unk0;
|
||||
s16 unk2; // Vcount??
|
||||
IntrCallback unk4; // some function... just making it IntrCallback for now
|
||||
};
|
||||
extern struct unkStruct_202D648 gUnknown_202D648[8];
|
||||
extern struct unkStruct_202D648 gUnknown_202D608[8];
|
||||
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM; // BGM??
|
||||
extern u32 gUnknown_203B0A0;
|
||||
extern u32 gUnknown_203B0A4;
|
||||
extern u16 gBGMusicPlayerState;
|
||||
extern u16 gCurrentBGSong;
|
||||
extern u16 gUnknown_202D68C;
|
||||
extern u16 gCurrentFanfareSong;
|
||||
extern u16 gUnknown_202D690;
|
||||
extern u16 gUnknown_202D692;
|
||||
extern bool8 gRestartBGM;
|
||||
extern u8 gUnknown_203B099;
|
||||
extern u8 gUnknown_203B09B;
|
||||
extern u32 gUnknown_203B09C;
|
||||
extern u8 gUnknown_203B09A;
|
||||
|
||||
extern u32 gUnknown_203B0A0;
|
||||
extern s16 gUnknown_203B0AA;
|
||||
extern s16 gUnknown_203B0AC;
|
||||
extern s16 gUnknown_203B0AE;
|
||||
extern s16 gUnknown_203B0B0;
|
||||
extern s16 gUnknown_203B0B2;
|
||||
|
||||
// PMD keeps it's own copy of music players for some reason
|
||||
struct PMDMusicPlayer
|
||||
{
|
||||
u16 unk0;
|
||||
u16 songIndex;
|
||||
u16 unk4;
|
||||
u8 unk6;
|
||||
};
|
||||
|
||||
extern struct PMDMusicPlayer gUnknown_3000FD8[8];
|
||||
extern struct PMDMusicPlayer gUnknown_3000FE8[8];
|
||||
|
||||
extern u8 gUnknown_202D7FE;
|
||||
extern u16 gBldCnt;
|
||||
extern struct BGControlStruct gBG0Control;
|
||||
extern struct BGControlStruct gBG1Control;
|
||||
extern struct BGControlStruct gBG2Control;
|
||||
extern struct BGControlStruct gBG3Control;
|
||||
|
||||
enum
|
||||
{
|
||||
BG0,
|
||||
BG1,
|
||||
BG2,
|
||||
BG3,
|
||||
NUM_BGS
|
||||
};
|
||||
|
||||
extern void SoundVSync();
|
||||
extern void BlinkSavingIcon();
|
||||
|
||||
void StopBGM(void);
|
||||
void xxx_update_bg_sound_input(void);
|
||||
|
||||
void UnusedIntrFunc(void)
|
||||
{
|
||||
}
|
||||
|
||||
void VBlankIntr(void)
|
||||
{
|
||||
int index;
|
||||
|
||||
gUnknown_203B0A0++;
|
||||
SoundVSync();
|
||||
BlinkSavingIcon();
|
||||
if (gIntrCallbacks[1] != NULL) {
|
||||
gIntrCallbacks[1]();
|
||||
}
|
||||
for(index = 0; index < gUnknown_203B0AA; index++) {
|
||||
gUnknown_202D648[index] = gUnknown_202D608[index];
|
||||
}
|
||||
gUnknown_203B0AC = gUnknown_203B0AA;
|
||||
gUnknown_203B0AE = -1;
|
||||
gUnknown_203B0B0 = -1;
|
||||
gUnknown_203B0B2 = -1;
|
||||
REG_DISPSTAT = DISPSTAT_VBLANK_INTR | DISPSTAT_VCOUNT_INTR;
|
||||
if (gUnknown_203B099 == 0) {
|
||||
UpdateSound();
|
||||
}
|
||||
AckInterrupt(INTR_FLAG_VBLANK);
|
||||
}
|
||||
|
||||
// Registers are a little off.. seems to be around the while loop
|
||||
#ifdef NONMATCHING
|
||||
void VCountIntr(void)
|
||||
{
|
||||
s32 sVar1;
|
||||
s32 sVar2;
|
||||
|
||||
// Hack to get the lsr/asr shifts
|
||||
sVar2 = REG_VCOUNT << 16;
|
||||
sVar2 = sVar2 >> 16;
|
||||
|
||||
if (gUnknown_203B0AE < 0) {
|
||||
if (gIntrCallbacks[2] != 0) {
|
||||
gIntrCallbacks[2]();
|
||||
}
|
||||
gUnknown_203B0AE = 0;
|
||||
}
|
||||
if (gUnknown_203B0AE < gUnknown_203B0AC) {
|
||||
sVar1 = gUnknown_202D648[gUnknown_203B0AE].unk2;
|
||||
while (sVar1 <= sVar2) {
|
||||
if ( gUnknown_202D648[gUnknown_203B0AE].unk4 != NULL) {
|
||||
gUnknown_202D648[gUnknown_203B0AE].unk4();
|
||||
}
|
||||
gUnknown_203B0AE++;
|
||||
if (gUnknown_203B0AC >= gUnknown_203B0AE) break;
|
||||
sVar1 = gUnknown_202D648[gUnknown_203B0AE].unk2;
|
||||
}
|
||||
if (gUnknown_203B0AE < gUnknown_203B0AC) {
|
||||
REG_DISPSTAT = gUnknown_202D648[gUnknown_203B0AE].unk2 << 8 | DISPSTAT_VBLANK_INTR | DISPSTAT_VCOUNT_INTR;
|
||||
}
|
||||
}
|
||||
AckInterrupt(INTR_FLAG_VCOUNT);
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void VCountIntr(void)
|
||||
{
|
||||
asm_unified(
|
||||
"\tpush {r4-r7,lr}\n"
|
||||
"\tmov r7, r8\n"
|
||||
"\tpush {r7}\n"
|
||||
"\tldr r0, _0800BA44\n"
|
||||
"\tldrh r0, [r0]\n"
|
||||
"\tlsls r0, 16\n"
|
||||
"\tasrs r6, r0, 16\n"
|
||||
"\tldr r0, _0800BA48\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tldrsh r1, [r0, r2]\n"
|
||||
"\tadds r7, r0, 0\n"
|
||||
"\tcmp r1, 0\n"
|
||||
"\tbge _0800B9B2\n"
|
||||
"\tldr r0, _0800BA4C\n"
|
||||
"\tldr r0, [r0, 0x8]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _0800B9AE\n"
|
||||
"\tbl _call_via_r0\n"
|
||||
"_0800B9AE:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tstrh r0, [r7]\n"
|
||||
"_0800B9B2:\n"
|
||||
"\tldr r0, _0800BA50\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tldrsh r2, [r7, r3]\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tldrsh r1, [r0, r3]\n"
|
||||
"\tmov r8, r0\n"
|
||||
"\tcmp r2, r1\n"
|
||||
"\tbge _0800BA34\n"
|
||||
"\tldr r1, _0800BA54\n"
|
||||
"\tadds r0, r2, 0\n"
|
||||
"\tlsls r0, 3\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tmovs r3, 0x2\n"
|
||||
"\tldrsh r0, [r0, r3]\n"
|
||||
"\tcmp r0, r6\n"
|
||||
"\tbgt _0800BA10\n"
|
||||
"\tadds r5, r1, 0\n"
|
||||
"\tadds r4, r7, 0\n"
|
||||
"_0800B9D6:\n"
|
||||
"\tmovs r1, 0\n"
|
||||
"\tldrsh r0, [r4, r1]\n"
|
||||
"\tlsls r0, 3\n"
|
||||
"\tadds r1, r5, 0x4\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _0800B9EA\n"
|
||||
"\tbl _call_via_r0\n"
|
||||
"_0800B9EA:\n"
|
||||
"\tldrh r0, [r4]\n"
|
||||
"\tadds r0, 0x1\n"
|
||||
"\tstrh r0, [r4]\n"
|
||||
"\tldr r1, _0800BA50\n"
|
||||
"\tlsls r0, 16\n"
|
||||
"\tasrs r0, 16\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tldrsh r1, [r1, r2]\n"
|
||||
"\tcmp r0, r1\n"
|
||||
"\tbge _0800BA34\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tldrsh r0, [r4, r3]\n"
|
||||
"\tlsls r0, 3\n"
|
||||
"\tadds r0, r5\n"
|
||||
"\tmovs r1, 0x2\n"
|
||||
"\tldrsh r0, [r0, r1]\n"
|
||||
"\tldr r7, _0800BA48\n"
|
||||
"\tcmp r0, r6\n"
|
||||
"\tble _0800B9D6\n"
|
||||
"_0800BA10:\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tldrsh r1, [r7, r2]\n"
|
||||
"\tmov r3, r8\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tldrsh r0, [r3, r2]\n"
|
||||
"\tcmp r1, r0\n"
|
||||
"\tbge _0800BA34\n"
|
||||
"\tldr r2, _0800BA58\n"
|
||||
"\tldr r1, _0800BA54\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tldrsh r0, [r7, r3]\n"
|
||||
"\tlsls r0, 3\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tldrh r0, [r0, 0x2]\n"
|
||||
"\tlsls r0, 8\n"
|
||||
"\tmovs r1, 0x28\n"
|
||||
"\torrs r0, r1\n"
|
||||
"\tstrh r0, [r2]\n"
|
||||
"_0800BA34:\n"
|
||||
"\tmovs r0, 0x4\n"
|
||||
"\tbl AckInterrupt\n"
|
||||
"\tpop {r3}\n"
|
||||
"\tmov r8, r3\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r0}\n"
|
||||
"\tbx r0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_0800BA44: .4byte 0x04000006\n"
|
||||
"_0800BA48: .4byte gUnknown_203B0AE\n"
|
||||
"_0800BA4C: .4byte gIntrCallbacks\n"
|
||||
"_0800BA50: .4byte gUnknown_203B0AC\n"
|
||||
"_0800BA54: .4byte gUnknown_202D648\n"
|
||||
"_0800BA58: .4byte 0x04000004"
|
||||
);
|
||||
}
|
||||
#endif
|
||||
|
||||
void sub_800BA5C(void)
|
||||
{
|
||||
if(gUnknown_203B09A != 0)
|
||||
{
|
||||
gUnknown_203B09C++;
|
||||
xxx_update_bg_sound_input();
|
||||
}
|
||||
gUnknown_203B09A = 1;
|
||||
gUnknown_203B09B = 0;
|
||||
gUnknown_203B09C = 0;
|
||||
nullsub_25();
|
||||
|
||||
while(REG_VCOUNT > 159){}
|
||||
|
||||
gUnknown_203B099 = 1;
|
||||
VBlankIntrWait();
|
||||
nullsub_18();
|
||||
}
|
||||
|
||||
void xxx_update_bg_sound_input(void)
|
||||
{
|
||||
if(gUnknown_203B09B != 0){
|
||||
gUnknown_203B09C++;
|
||||
}
|
||||
else {
|
||||
gUnknown_203B09B = 1;
|
||||
gUnknown_203B09A = 0;
|
||||
gUnknown_203B09C = 0;
|
||||
UpdateBGControlRegisters();
|
||||
if(gUnknown_203B099 != 0)
|
||||
UpdateSound();
|
||||
UpdateInput();
|
||||
gUnknown_203B099 = 0;
|
||||
gUnknown_203B0A4 = gUnknown_203B0A0;
|
||||
}
|
||||
}
|
||||
|
||||
void Timer3Intr(void)
|
||||
{
|
||||
if(gIntrCallbacks[4])
|
||||
gIntrCallbacks[4]();
|
||||
AckInterrupt(INTR_FLAG_TIMER3);
|
||||
}
|
||||
|
||||
// Unused
|
||||
u32 sub_800BB34(void)
|
||||
{
|
||||
return gUnknown_203B0A0;
|
||||
}
|
||||
|
||||
void nullsub_178(void)
|
||||
{
|
||||
}
|
||||
|
||||
// Unused
|
||||
void sub_800BB44(void)
|
||||
{
|
||||
u16 ie_store;
|
||||
u16 dispcnt_store;
|
||||
bool8 interrupt_flag;
|
||||
|
||||
while(REG_KEYINPUT != KEYS_MASK){}
|
||||
|
||||
interrupt_flag = DisableInterrupts();
|
||||
|
||||
while(REG_VCOUNT < 160){}
|
||||
|
||||
dispcnt_store = REG_DISPCNT;
|
||||
REG_DISPCNT = DISPCNT_FORCED_BLANK;
|
||||
|
||||
*(vu16 *)BG_PLTT = RGB_WHITE;
|
||||
|
||||
ie_store = REG_IE;
|
||||
REG_IE = INTR_FLAG_KEYPAD | INTR_FLAG_GAMEPAK;
|
||||
|
||||
REG_KEYCNT = KEY_AND_INTR | R_BUTTON | L_BUTTON | SELECT_BUTTON; // 0x8304
|
||||
REG_IME = 1;
|
||||
|
||||
SoundBiasReset();
|
||||
asm("swi 0x3");
|
||||
SoundBiasSet();
|
||||
|
||||
REG_IME = 0;
|
||||
REG_IE = ie_store;
|
||||
REG_KEYCNT = 0;
|
||||
REG_DISPCNT = dispcnt_store;
|
||||
*(vu16 *)BG_PLTT = RGB_BLACK;
|
||||
|
||||
if(interrupt_flag)
|
||||
EnableInterrupts();
|
||||
while(REG_KEYINPUT != KEYS_MASK){}
|
||||
}
|
||||
|
||||
void nullsub_17(void)
|
||||
{
|
||||
}
|
||||
|
||||
void UpdateBGControlRegisters(void)
|
||||
{
|
||||
u32 BGCNT_Priority[NUM_BGS];
|
||||
|
||||
if(gUnknown_202D7FE == 1)
|
||||
{
|
||||
BGCNT_Priority[BG0] = BGCNT_PRIORITY(1);
|
||||
BGCNT_Priority[BG1] = BGCNT_PRIORITY(2);
|
||||
BGCNT_Priority[BG2] = BGCNT_PRIORITY(0);
|
||||
BGCNT_Priority[BG3] = BGCNT_PRIORITY(3);
|
||||
}
|
||||
else
|
||||
{
|
||||
BGCNT_Priority[BG0] = BGCNT_PRIORITY(0);
|
||||
BGCNT_Priority[BG1] = BGCNT_PRIORITY(1);
|
||||
BGCNT_Priority[BG2] = BGCNT_PRIORITY(2);
|
||||
BGCNT_Priority[BG3] = BGCNT_PRIORITY(3);
|
||||
}
|
||||
|
||||
REG_BG0HOFS = gBG0Control.hofs;
|
||||
REG_BG0VOFS = gBG0Control.vofs;
|
||||
REG_BG1HOFS = gBG1Control.hofs;
|
||||
REG_BG1VOFS = gBG1Control.vofs;
|
||||
REG_BG2HOFS = gBG2Control.hofs;
|
||||
REG_BG2VOFS = gBG2Control.vofs;
|
||||
REG_BG3HOFS = gBG3Control.hofs;
|
||||
REG_BG3VOFS = gBG3Control.vofs;
|
||||
|
||||
REG_BG0CNT = BGCNT_Priority[BG0] | BGCNT_SCREENBASE(12) | BGCNT_CHARBASE(0) | BGCNT_WRAP; // 0x2C00
|
||||
REG_BG1CNT = BGCNT_Priority[BG1] | BGCNT_SCREENBASE(13) | BGCNT_CHARBASE(0) | BGCNT_WRAP; // 0x2D00
|
||||
if(gBG2Control.unk2 == 0x8000)
|
||||
REG_BG2CNT = BGCNT_Priority[BG2] | BGCNT_SCREENBASE(14) | BGCNT_CHARBASE(2) | BGCNT_WRAP; // 0x2E08
|
||||
else
|
||||
REG_BG2CNT = BGCNT_Priority[BG2] | BGCNT_SCREENBASE(14) | BGCNT_CHARBASE(0) | BGCNT_WRAP; // 0x2E00
|
||||
REG_BG3CNT = BGCNT_Priority[BG3] | BGCNT_SCREENBASE(15) | BGCNT_CHARBASE(2) | BGCNT_WRAP;
|
||||
REG_BLDCNT = gBldCnt;
|
||||
}
|
||||
|
||||
void InitMusic(void)
|
||||
{
|
||||
s32 playerIndex;
|
||||
|
||||
struct PMDMusicPlayer *musicPlayer;
|
||||
|
||||
DmaStop(0);
|
||||
DmaStop(1);
|
||||
DmaStop(2);
|
||||
DmaStop(3);
|
||||
|
||||
m4aSoundInit();
|
||||
|
||||
gBGMusicPlayerState = 0;
|
||||
gCurrentBGSong = 999;
|
||||
gUnknown_202D68C = 999;
|
||||
gCurrentFanfareSong = 997;
|
||||
gUnknown_202D690 = 0;
|
||||
gUnknown_202D692 = 0;
|
||||
gRestartBGM = FALSE;
|
||||
|
||||
for(playerIndex = INDEX_BGM, musicPlayer = &gUnknown_3000FD8[0]; playerIndex < INDEX_SE6 + 1; playerIndex++, musicPlayer++)
|
||||
{
|
||||
musicPlayer->unk0 = 0;
|
||||
musicPlayer->songIndex = 997;
|
||||
musicPlayer->unk4 = 0;
|
||||
musicPlayer->unk6 = 0;
|
||||
}
|
||||
nullsub_19();
|
||||
}
|
||||
|
||||
void StopAllMusic(void)
|
||||
{
|
||||
StopBGM();
|
||||
StopFanfareSE(998);
|
||||
StopFanfareSE(997);
|
||||
}
|
||||
|
||||
void StartNewBGM(u16 songIndex)
|
||||
{
|
||||
bool8 interrupt_flag;
|
||||
|
||||
if(!IsBGSong(songIndex))
|
||||
return;
|
||||
if(songIndex == 999)
|
||||
return;
|
||||
if(songIndex == gCurrentBGSong)
|
||||
{
|
||||
if((u16)(gBGMusicPlayerState - 1) <= 1)
|
||||
return;
|
||||
}
|
||||
if(GetMusicPlayerIndex(songIndex) != INDEX_BGM)
|
||||
{
|
||||
nullsub_20(songIndex);
|
||||
return;
|
||||
}
|
||||
interrupt_flag = DisableInterrupts();
|
||||
gCurrentBGSong = songIndex;
|
||||
gRestartBGM = TRUE;
|
||||
|
||||
if(gUnknown_202D690 == 0)
|
||||
{
|
||||
gBGMusicPlayerState = BG_PLAYER_STATE_PLAYING;
|
||||
m4aSongNumStart(songIndex);
|
||||
}
|
||||
if(interrupt_flag)
|
||||
EnableInterrupts();
|
||||
}
|
||||
|
||||
void FadeInNewBGM(u16 songIndex, u16 speed)
|
||||
{
|
||||
bool8 interrupt_flag;
|
||||
|
||||
if(!IsBGSong(songIndex))
|
||||
return;
|
||||
if(songIndex == 999)
|
||||
return;
|
||||
if(songIndex == gCurrentBGSong)
|
||||
{
|
||||
if((u16)(gBGMusicPlayerState - 1) <= 1)
|
||||
return;
|
||||
}
|
||||
|
||||
if((speed > 256))
|
||||
{
|
||||
speed = 16;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if((speed >>= 4) == 0)
|
||||
{
|
||||
speed = 1;
|
||||
}
|
||||
}
|
||||
|
||||
interrupt_flag = DisableInterrupts();
|
||||
gCurrentBGSong = songIndex;
|
||||
gRestartBGM = TRUE;
|
||||
|
||||
if(gUnknown_202D690 == 0)
|
||||
{
|
||||
gBGMusicPlayerState = BG_PLAYER_STATE_PLAYING;
|
||||
m4aSongNumStart(songIndex);
|
||||
m4aMPlayImmInit(&gMPlayInfo_BGM);
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFF, 0);
|
||||
m4aSongNumStop(songIndex);
|
||||
m4aMPlayFadeIn(&gMPlayInfo_BGM, speed);
|
||||
}
|
||||
if(interrupt_flag)
|
||||
EnableInterrupts();
|
||||
}
|
||||
|
||||
void sub_800BF48(u16 songIndex)
|
||||
{
|
||||
u16 preload = gCurrentBGSong;
|
||||
if(preload == 999)
|
||||
{
|
||||
StartNewBGM(songIndex);
|
||||
gUnknown_202D68C = preload;
|
||||
return;
|
||||
}
|
||||
gUnknown_202D68C = songIndex;
|
||||
}
|
||||
|
||||
void StopBGM(void)
|
||||
{
|
||||
bool8 interrupt_flag = DisableInterrupts();
|
||||
if(gUnknown_202D690 == 0)
|
||||
{
|
||||
if(gCurrentBGSong != 999)
|
||||
{
|
||||
m4aMPlayStop(&gMPlayInfo_BGM);
|
||||
}
|
||||
}
|
||||
gCurrentBGSong = 999;
|
||||
gUnknown_202D68C = 999;
|
||||
if(interrupt_flag)
|
||||
EnableInterrupts();
|
||||
}
|
||||
|
||||
void FadeOutBGM(u16 speed)
|
||||
{
|
||||
|
||||
u32 comparison;
|
||||
bool8 interrupt_flag;
|
||||
|
||||
// TODO clean this comparison up
|
||||
comparison = 0x80 << 17; // 16777216
|
||||
if((speed * 65536) > comparison)
|
||||
{
|
||||
speed = 16;
|
||||
}
|
||||
else
|
||||
{
|
||||
if((speed >>= 4) == 0)
|
||||
{
|
||||
speed = 1;
|
||||
}
|
||||
}
|
||||
interrupt_flag = DisableInterrupts();
|
||||
if(gUnknown_202D690 == 0)
|
||||
{
|
||||
if(gCurrentBGSong != 999)
|
||||
{
|
||||
if(gBGMusicPlayerState == 2)
|
||||
{
|
||||
gBGMusicPlayerState = 3;
|
||||
m4aMPlayFadeOut(&gMPlayInfo_BGM, speed);
|
||||
}
|
||||
else
|
||||
{
|
||||
gCurrentBGSong = 999;
|
||||
m4aMPlayStop(&gMPlayInfo_BGM);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gCurrentBGSong = 999;
|
||||
}
|
||||
gUnknown_202D68C = 999;
|
||||
if(interrupt_flag)
|
||||
EnableInterrupts();
|
||||
}
|
||||
|
||||
u16 GetCurrentBGSong(void)
|
||||
{
|
||||
return gCurrentBGSong;
|
||||
}
|
||||
|
||||
void PlayFanfareSE(u16 songIndex, u16 param_2)
|
||||
{
|
||||
bool8 interrupt_flag;
|
||||
bool8 interrupt_flag2;
|
||||
u16 playerIndex;
|
||||
struct PMDMusicPlayer *musicPlayer;
|
||||
|
||||
if (songIndex == 997)
|
||||
return;
|
||||
if (param_2 > 256)
|
||||
param_2 = 256;
|
||||
|
||||
if (IsFanfare(songIndex))
|
||||
{
|
||||
if (GetMusicPlayerIndex(songIndex) == INDEX_FANFARE) {
|
||||
interrupt_flag = DisableInterrupts();
|
||||
gCurrentFanfareSong = songIndex;
|
||||
if(gUnknown_202D690 == 0)
|
||||
{
|
||||
if (gCurrentBGSong != 999)
|
||||
{
|
||||
if ((u16)(gBGMusicPlayerState - 1) < 2)
|
||||
{
|
||||
gUnknown_202D690 = 1;
|
||||
gUnknown_202D692 = 16;
|
||||
gRestartBGM = FALSE;
|
||||
m4aMPlayFadeOutTemporarily(&gMPlayInfo_BGM, 1);
|
||||
}
|
||||
else if (gBGMusicPlayerState == 3)
|
||||
gUnknown_202D690 = 2;
|
||||
else
|
||||
{
|
||||
gUnknown_202D690 = 3;
|
||||
m4aMPlayStop(&gMPlayInfo_BGM);
|
||||
m4aSongNumStart(gCurrentFanfareSong);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_202D690 = 3;
|
||||
m4aMPlayStop(&gMPlayInfo_BGM);
|
||||
m4aSongNumStart(gCurrentFanfareSong);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (1 < (u16)(gUnknown_202D690 - 1))
|
||||
{
|
||||
m4aMPlayStop(&gMPlayInfo_BGM);
|
||||
m4aSongNumStart(gCurrentFanfareSong);
|
||||
gUnknown_202D690 = 3;
|
||||
}
|
||||
}
|
||||
switch(gCurrentBGSong)
|
||||
{
|
||||
case MUS_RAYQUAZAS_DOMAIN:
|
||||
case MUS_FRIEND_AREA_STRATOS_LOOKOUT:
|
||||
case MUS_FRIEND_AREA_RAINBOW_PEAK:
|
||||
case MUS_DREAM_EATER:
|
||||
case MUS_FRIEND_AREA_DEEPSEA_CURRENT:
|
||||
case MUS_FRIEND_AREA_SEAFLOOR_CAVE:
|
||||
case MUS_FRIEND_AREA_VOLCANIC_PIT:
|
||||
case MUS_FRIEND_AREA_CRYPTIC_CAVE:
|
||||
case MUS_THE_OTHER_SIDE:
|
||||
case MUS_THE_MOUNTAIN_OF_FIRE:
|
||||
case MUS_FRIEND_AREA_LEGENDARY_ISLAND:
|
||||
case MUS_FRIEND_AREA_SOUTHERN_ISLAND:
|
||||
case MUS_FRIEND_AREA_ENCLOSED_ISLAND:
|
||||
case MUS_FRIEND_AREA_FINAL_ISLAND:
|
||||
case MUS_FRIEND_AREA_HEALING_FOREST:
|
||||
gRestartBGM = TRUE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (interrupt_flag)
|
||||
EnableInterrupts();
|
||||
}
|
||||
else
|
||||
{
|
||||
nullsub_20(songIndex);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!IsSoundEffect(songIndex))
|
||||
return;
|
||||
playerIndex = GetMusicPlayerIndex(songIndex);
|
||||
musicPlayer = &gUnknown_3000FD8[playerIndex]; // need to load this before comparison to match
|
||||
if (playerIndex < INDEX_SE1)
|
||||
nullsub_20(songIndex);
|
||||
else
|
||||
{
|
||||
interrupt_flag2 = DisableInterrupts();
|
||||
m4aSongNumStart(songIndex);
|
||||
musicPlayer->unk0 = 1;
|
||||
musicPlayer->songIndex = songIndex;
|
||||
if(param_2 == 256)
|
||||
{
|
||||
musicPlayer->unk6 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
musicPlayer->unk6 = 1;
|
||||
}
|
||||
musicPlayer->unk4 = param_2;
|
||||
if (interrupt_flag2)
|
||||
EnableInterrupts();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SetSoundEffectVolume(u16 songIndex, u16 volume)
|
||||
{
|
||||
bool8 interrupt_flag;
|
||||
u16 playerIndex;
|
||||
struct MusicPlayerInfo *info;
|
||||
struct PMDMusicPlayer *musicPlayer;
|
||||
|
||||
if (256 < volume) {
|
||||
volume = 256;
|
||||
}
|
||||
|
||||
if ((!IsFanfare(songIndex)) && (IsSoundEffect(songIndex))) {
|
||||
playerIndex = GetMusicPlayerIndex(songIndex);
|
||||
info = gMPlayTable[playerIndex].info;
|
||||
musicPlayer = &gUnknown_3000FD8[playerIndex];
|
||||
if (playerIndex >= INDEX_SE1) {
|
||||
interrupt_flag = DisableInterrupts();
|
||||
if (musicPlayer->songIndex == songIndex) {
|
||||
m4aMPlayVolumeControl(info, 0xf, volume);
|
||||
}
|
||||
if (interrupt_flag)
|
||||
EnableInterrupts();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StopFanfareSE(u16 songIndex)
|
||||
{
|
||||
// Each section needs a var for interrupts..
|
||||
char cVar1;
|
||||
char cVar2;
|
||||
char cVar3;
|
||||
char cVar4;
|
||||
|
||||
u32 playerIndex;
|
||||
s32 playerIndex2;
|
||||
struct MusicPlayerInfo *info;
|
||||
struct PMDMusicPlayer *musicPlayer;
|
||||
struct PMDMusicPlayer *musicPlayer1;
|
||||
|
||||
if (songIndex == 997) {
|
||||
cVar1 = DisableInterrupts();
|
||||
|
||||
for(playerIndex2 = INDEX_SE1, musicPlayer1 = &gUnknown_3000FE8[0]; playerIndex2 < INDEX_SE6; playerIndex2++, musicPlayer1++)
|
||||
{
|
||||
m4aMPlayStop(gMPlayTable[playerIndex2].info);
|
||||
musicPlayer1->unk0 = 0;
|
||||
musicPlayer1->songIndex = 997;
|
||||
musicPlayer1->unk4 = 0;
|
||||
musicPlayer1->unk6 = 0;
|
||||
}
|
||||
if (cVar1 != '\0') {
|
||||
EnableInterrupts();
|
||||
}
|
||||
}
|
||||
else if (IsSoundEffect(songIndex))
|
||||
{
|
||||
playerIndex = GetMusicPlayerIndex(songIndex);
|
||||
info = gMPlayTable[playerIndex].info;
|
||||
musicPlayer = &gUnknown_3000FD8[playerIndex];
|
||||
if (playerIndex < INDEX_SE1) {
|
||||
nullsub_21(songIndex);
|
||||
}
|
||||
else {
|
||||
cVar2 = DisableInterrupts();
|
||||
if (musicPlayer->songIndex == songIndex) {
|
||||
m4aMPlayStop(info);
|
||||
musicPlayer->unk0 = 0;
|
||||
musicPlayer->songIndex = 997;
|
||||
musicPlayer->unk4 = 0;
|
||||
musicPlayer->unk6 = 0;
|
||||
}
|
||||
if (cVar2 != '\0') {
|
||||
EnableInterrupts();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (songIndex == 998)
|
||||
{
|
||||
cVar3 = DisableInterrupts();
|
||||
if (gUnknown_202D690 != 0) {
|
||||
if (gCurrentFanfareSong != 997) {
|
||||
gCurrentFanfareSong = 997;
|
||||
m4aMPlayStop(&gMPlayInfo_Fanfare);
|
||||
}
|
||||
}
|
||||
if (cVar3 != '\0') {
|
||||
EnableInterrupts();
|
||||
}
|
||||
}
|
||||
else if (IsFanfare(songIndex))
|
||||
{
|
||||
cVar4 = DisableInterrupts();
|
||||
if (gUnknown_202D690 != 0) {
|
||||
if (gCurrentFanfareSong == songIndex) {
|
||||
gCurrentFanfareSong = 997;
|
||||
m4aMPlayStop(&gMPlayInfo_Fanfare);
|
||||
}
|
||||
}
|
||||
if (cVar4 != '\0') {
|
||||
EnableInterrupts();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FadeOutFanfareSE(u16 songIndex, u16 speed)
|
||||
{
|
||||
char cVar1;
|
||||
char cVar2;
|
||||
char cVar3;
|
||||
char cVar4;
|
||||
u32 comparison;
|
||||
s32 playerIndex2;
|
||||
u32 playerIndex;
|
||||
struct PMDMusicPlayer *musicPlayer;
|
||||
struct PMDMusicPlayer *musicPlayer1;
|
||||
struct MusicPlayerInfo *playerInfo;
|
||||
|
||||
comparison = 0x80 << 17; // 16777216
|
||||
if((speed * 65536) > comparison)
|
||||
{
|
||||
speed = 16;
|
||||
}
|
||||
else
|
||||
{
|
||||
if((speed >>= 4) == 0)
|
||||
{
|
||||
speed = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (songIndex == 997) {
|
||||
cVar1 = DisableInterrupts();
|
||||
for(playerIndex2 = INDEX_SE1, musicPlayer1 = &gUnknown_3000FE8[0]; playerIndex2 < INDEX_SE6; playerIndex2++, musicPlayer1++)
|
||||
{
|
||||
if (musicPlayer1->songIndex != 997) {
|
||||
if (IsMusicPlayerPlaying(playerIndex2)) {
|
||||
m4aMPlayFadeOut(gMPlayTable[playerIndex2].info,speed);
|
||||
}
|
||||
else {
|
||||
m4aMPlayStop(gMPlayTable[playerIndex2].info);
|
||||
musicPlayer1->unk0 = 0;
|
||||
musicPlayer1->songIndex = 997;
|
||||
musicPlayer1->unk4 = 0;
|
||||
musicPlayer1->unk6 = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (cVar1 != '\0') {
|
||||
EnableInterrupts();
|
||||
}
|
||||
}
|
||||
else if (IsSoundEffect(songIndex)) {
|
||||
playerIndex = GetMusicPlayerIndex(songIndex);
|
||||
musicPlayer = &gUnknown_3000FD8[playerIndex];
|
||||
playerInfo = gMPlayTable[playerIndex].info;
|
||||
cVar2 = DisableInterrupts();
|
||||
if (musicPlayer->songIndex != 997) {
|
||||
if (IsMusicPlayerPlaying(playerIndex)) {
|
||||
m4aMPlayFadeOut(playerInfo,speed);
|
||||
}
|
||||
else {
|
||||
m4aMPlayStop(playerInfo);
|
||||
musicPlayer->unk0 = 0;
|
||||
musicPlayer->songIndex = 997;
|
||||
musicPlayer->unk4 = 0;
|
||||
musicPlayer->unk6 = 0;
|
||||
}
|
||||
}
|
||||
if (cVar2 != '\0') {
|
||||
EnableInterrupts();
|
||||
}
|
||||
}
|
||||
else if (songIndex == 998) {
|
||||
cVar3 = DisableInterrupts();
|
||||
if ((gUnknown_202D690 != 0) && (gCurrentFanfareSong != 997)) {
|
||||
if (IsMusicPlayerPlaying(INDEX_FANFARE)) {
|
||||
m4aMPlayFadeOut(&gMPlayInfo_Fanfare,speed);
|
||||
}
|
||||
else {
|
||||
m4aMPlayStop(&gMPlayInfo_Fanfare);
|
||||
gCurrentFanfareSong = 997;
|
||||
}
|
||||
}
|
||||
if (cVar3 != '\0') {
|
||||
EnableInterrupts();
|
||||
}
|
||||
}
|
||||
else if (IsFanfare(songIndex)) {
|
||||
cVar4 = DisableInterrupts();
|
||||
if ((gUnknown_202D690 != 0) && (gCurrentFanfareSong == songIndex)) {
|
||||
if (IsMusicPlayerPlaying(INDEX_FANFARE)) {
|
||||
m4aMPlayFadeOut(&gMPlayInfo_Fanfare,speed);
|
||||
}
|
||||
else {
|
||||
m4aMPlayStop(&gMPlayInfo_Fanfare);
|
||||
gCurrentFanfareSong = 997;
|
||||
}
|
||||
}
|
||||
if (cVar4 != '\0') {
|
||||
EnableInterrupts();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 IsFanfareSEPlaying(u16 songIndex)
|
||||
{
|
||||
u32 playerIndex;
|
||||
struct PMDMusicPlayer *musicPlayer;
|
||||
register u32 songIndex_u32 asm("r4");
|
||||
register u32 songIndex_u32_2 asm("r5");
|
||||
|
||||
songIndex_u32 = songIndex;
|
||||
songIndex_u32_2 = songIndex_u32;
|
||||
|
||||
if (IsFanfare(songIndex_u32)) {
|
||||
if ((gUnknown_202D690 != 0) && (gCurrentFanfareSong == songIndex_u32)) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (IsSoundEffect(songIndex_u32)) {
|
||||
playerIndex = GetMusicPlayerIndex(songIndex_u32);
|
||||
musicPlayer = &gUnknown_3000FD8[playerIndex];
|
||||
if ((INDEX_SE1 <= playerIndex) && (musicPlayer->songIndex == songIndex_u32_2)) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void SoundVSync(void)
|
||||
{
|
||||
u8 cVar1;
|
||||
|
||||
cVar1 = DisableInterrupts();
|
||||
m4aSoundVSync();
|
||||
if(cVar1)
|
||||
EnableInterrupts();
|
||||
}
|
||||
|
||||
|
||||
void nullsub_18(void)
|
||||
{
|
||||
}
|
||||
|
|
@ -317,13 +317,13 @@ gBGMusicPlayerState = .; /* 202D688 */
|
|||
gCurrentBGSong = .; /* 202D68A */
|
||||
. += 0x2;
|
||||
|
||||
gUnknown_202D68C = .; /* 202D68C */
|
||||
gQueuedBGSong = .; /* 202D68C */
|
||||
. += 0x2;
|
||||
|
||||
gCurrentFanfareSong = .; /* 202D68E */
|
||||
. += 0x2;
|
||||
|
||||
gUnknown_202D690 = .; /* 202D690 */
|
||||
gFanfareMusicPlayerState = .; /* 202D690 */
|
||||
. += 0x2;
|
||||
|
||||
gUnknown_202D692 = .; /* 202D692 */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user