Fully matched msm (US)
This commit is contained in:
parent
ac43740d3d
commit
45887a1624
11 changed files with 1252 additions and 55 deletions
|
|
@ -841,9 +841,9 @@ config.libs = [
|
||||||
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmsys.c"),
|
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmsys.c"),
|
||||||
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmmem.c"),
|
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmmem.c"),
|
||||||
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmfio.c"),
|
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmfio.c"),
|
||||||
Object(NonMatching, "msm/msmmus.c"),
|
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmmus.c"),
|
||||||
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmse.c"),
|
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmse.c"),
|
||||||
Object(NonMatching, "msm/msmstream.c"),
|
Object(MatchingFor("GMPE01_00", "GMPE01_01"), "msm/msmstream.c"),
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@
|
||||||
#define MSM_ERR_REMOVEDID -122
|
#define MSM_ERR_REMOVEDID -122
|
||||||
#define MSM_ERR_MUSGRP_NOTLOADED -123
|
#define MSM_ERR_MUSGRP_NOTLOADED -123
|
||||||
#define MSM_ERR_OUTOFMUS -130
|
#define MSM_ERR_OUTOFMUS -130
|
||||||
|
#define MSM_ERR_8C -140
|
||||||
|
|
||||||
#define MSM_VOL_MAX 127
|
#define MSM_VOL_MAX 127
|
||||||
#define MSM_PAN_LEFT 32
|
#define MSM_PAN_LEFT 32
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,6 @@
|
||||||
#include "game/msm.h"
|
#include "game/msm.h"
|
||||||
#include "msm/msmsys.h"
|
#include "msm/msmsys.h"
|
||||||
|
|
||||||
#include "dolphin.h"
|
|
||||||
|
|
||||||
void msmMusFdoutEnd(void);
|
void msmMusFdoutEnd(void);
|
||||||
void msmMusPeriodicProc(void);
|
void msmMusPeriodicProc(void);
|
||||||
s32 msmMusGetMidiCtrl(int musNo, s32 channel, s32 ctrl);
|
s32 msmMusGetMidiCtrl(int musNo, s32 channel, s32 ctrl);
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,6 @@
|
||||||
#include "game/msm.h"
|
#include "game/msm.h"
|
||||||
#include "msm/msmsys.h"
|
#include "msm/msmsys.h"
|
||||||
|
|
||||||
#include "dolphin.h"
|
|
||||||
|
|
||||||
void msmSePeriodicProc(void);
|
void msmSePeriodicProc(void);
|
||||||
MSMSE* msmSeGetIndexPtr(s32 arg0);
|
MSMSE* msmSeGetIndexPtr(s32 arg0);
|
||||||
void msmSeDelListener(void);
|
void msmSeDelListener(void);
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,22 @@
|
||||||
#ifndef MSMSTREAM_H
|
#ifndef MSMSTREAM_H
|
||||||
#define MSMSTREAM_H
|
#define MSMSTREAM_H
|
||||||
|
|
||||||
#include "dolphin/types.h"
|
#include "game/msm.h"
|
||||||
|
|
||||||
|
s32 msmStreamGetStatus(int streamNo);
|
||||||
|
void msmStreamSetMasterVolume(s32 arg0);
|
||||||
|
void msmStreamStopAll(s32 speed);
|
||||||
|
s32 msmStreamStop(int streamNo, s32 speed);
|
||||||
|
int msmStreamPlay(int streamId, MSM_STREAMPARAM* streamParam);
|
||||||
void msmStreamPeriodicProc(void);
|
void msmStreamPeriodicProc(void);
|
||||||
void msmStreamSetOutputMode(s32);
|
void msmStreamSetOutputMode(s32 arg0);
|
||||||
void msmStreamAmemFree(void);
|
void msmStreamAmemFree(void);
|
||||||
s32 msmStreamAmemAlloc(void);
|
s32 msmStreamAmemAlloc(void);
|
||||||
s32 msmStreamInit(char *);
|
s32 msmStreamInit(char* arg0);
|
||||||
|
void msmStreamPauseOff(s32 arg0);
|
||||||
|
void msmStreamPauseOn(s32 streamNo, s32 arg1);
|
||||||
|
s32 msmStreamPackStartStereo(s32 arg0, MSM_STREAMPARAM* arg1, s32 arg2);
|
||||||
|
s32 msmStreamPackStartMono(s32 arg0, MSM_STREAMPARAM* arg1, s32 arg2);
|
||||||
|
void msmStreamSlotOff(s32 streamNo);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef MSMSYS_H
|
#ifndef MSMSYS_H
|
||||||
#define MSMSYS_H
|
#define MSMSYS_H
|
||||||
|
|
||||||
#include "musyx/musyx.h"
|
#include "game/msm.h" // TODO remove, only for decomp
|
||||||
|
|
||||||
#include "dolphin.h"
|
#include "dolphin.h"
|
||||||
|
|
||||||
|
|
@ -167,4 +167,23 @@ typedef struct _sysData {
|
||||||
s32 unk4F8;
|
s32 unk4F8;
|
||||||
} sysData;
|
} sysData;
|
||||||
|
|
||||||
|
s32 msmSysSearchGroupStack(s32 arg0, s32 arg1);
|
||||||
|
s32 msmSysGroupInit(DVDFileInfo *arg0);
|
||||||
|
void msmSysIrqDisable(void);
|
||||||
|
void msmSysIrqEnable(void);
|
||||||
|
BOOL msmSysCheckBaseGroup(s32 arg0);
|
||||||
|
void *msmSysGetGroupDataPtr(s32 arg0);
|
||||||
|
BOOL msmSysCheckLoadGroupID(s32 arg0);
|
||||||
|
void msmSysRegularProc(void);
|
||||||
|
s32 msmSysGetOutputMode(void);
|
||||||
|
s32 msmSysSetOutputMode(SND_OUTPUTMODE mode);
|
||||||
|
s32 msmSysSetAux(s32 arg0, s32 arg1);
|
||||||
|
s32 msmSysGetSampSize(BOOL baseGrp);
|
||||||
|
s32 msmSysDelGroupAll(void);
|
||||||
|
s32 msmSysDelGroupBase(s32 grpNum);
|
||||||
|
s32 msmSysLoadGroupBase(s32 arg0, void *arg1);
|
||||||
|
s32 msmSysLoadGroupSet(s32 arg0, void *arg1);
|
||||||
|
void msmSysCheckInit(void);
|
||||||
|
s32 msmSysInit(MSM_INIT *init, MSM_ARAM *aram);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -54,15 +54,12 @@ void msmMemFree(void* arg0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void* msmMemAlloc(u32 arg0) {
|
void* msmMemAlloc(u32 arg0) {
|
||||||
unkMemStruct* memC;
|
|
||||||
s32 temp_r0;
|
s32 temp_r0;
|
||||||
u32 var_r5;
|
u32 var_r5;
|
||||||
u32 var_r7;
|
u32 var_r7;
|
||||||
unkStruct* temp_r5;
|
unkStruct* temp_r5;
|
||||||
unkStruct* var_r8;
|
unkStruct* var_r8;
|
||||||
unkStruct* temp_r9;
|
unkStruct* temp_r9;
|
||||||
unkStruct* temp_r6;
|
|
||||||
unkStruct* temp_r4;
|
|
||||||
|
|
||||||
var_r7 = arg0 + 0x20;
|
var_r7 = arg0 + 0x20;
|
||||||
temp_r0 = var_r7 & 0x1F;
|
temp_r0 = var_r7 & 0x1F;
|
||||||
|
|
|
||||||
144
src/msm/msmmus.c
144
src/msm/msmmus.c
|
|
@ -1,4 +1,5 @@
|
||||||
#include "msm/msmmus.h"
|
#include "msm/msmmus.h"
|
||||||
|
#include "msm/msmmem.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/* 0x00 */ s16 unk00;
|
/* 0x00 */ s16 unk00;
|
||||||
|
|
@ -51,6 +52,11 @@ typedef struct {
|
||||||
/* 0x01C */ char unk70[0x108];
|
/* 0x01C */ char unk70[0x108];
|
||||||
} msmMusStruct02; // Size 0x178
|
} msmMusStruct02; // Size 0x178
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0x00 */ char unk00[0xC];
|
||||||
|
/* 0x0C */ s32 unk0C;
|
||||||
|
} UnkGroupDataPtr; // Size unknown
|
||||||
|
|
||||||
static msmMusStruct02 mus;
|
static msmMusStruct02 mus;
|
||||||
|
|
||||||
static void msmMusPauseSub(msmMusStruct00* arg0, BOOL pause, s32 speed) {
|
static void msmMusPauseSub(msmMusStruct00* arg0, BOOL pause, s32 speed) {
|
||||||
|
|
@ -199,13 +205,11 @@ s32 msmMusGetMidiCtrl(int musNo, s32 channel, s32 ctrl) {
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 msmMusGetNumPlay(BOOL baseGrp) {
|
s32 msmMusGetNumPlay(BOOL baseGrp) {
|
||||||
msmMusStruct02* mus_ptr = &mus;
|
|
||||||
|
|
||||||
switch (baseGrp) {
|
switch (baseGrp) {
|
||||||
case FALSE:
|
case FALSE:
|
||||||
return mus_ptr->unk03 + mus_ptr->unk04;
|
return mus.unk03 + mus.unk04;
|
||||||
default:
|
default:
|
||||||
return mus_ptr->unk03;
|
return mus.unk03;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -227,7 +231,7 @@ s32 msmMusSetParam(s32 arg0, MSM_MUSPARAM* arg1) {
|
||||||
return MSM_ERR_OUTOFMUS;
|
return MSM_ERR_OUTOFMUS;
|
||||||
}
|
}
|
||||||
temp_r31 = &mus.unk18[arg0];
|
temp_r31 = &mus.unk18[arg0];
|
||||||
if (arg1->flag & 2) {
|
if (arg1->flag & MSM_MUSPARAM_VOL) {
|
||||||
temp_r31->unk2C = arg1->fadeSpeed / 15;
|
temp_r31->unk2C = arg1->fadeSpeed / 15;
|
||||||
if (temp_r31->unk2C != 0) {
|
if (temp_r31->unk2C != 0) {
|
||||||
temp_r31->unk05 = 1;
|
temp_r31->unk05 = 1;
|
||||||
|
|
@ -240,7 +244,7 @@ s32 msmMusSetParam(s32 arg0, MSM_MUSPARAM* arg1) {
|
||||||
sndSeqVolume(temp_r31->unk02 * temp_r31->unk03 * temp_r31->unk1C * temp_r31->unk28 / 2048383, 0, temp_r31->unk08, 0);
|
sndSeqVolume(temp_r31->unk02 * temp_r31->unk03 * temp_r31->unk1C * temp_r31->unk28 / 2048383, 0, temp_r31->unk08, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (arg1->flag & 0x10) {
|
if (arg1->flag & MSM_MUSPARAM_SPEED) {
|
||||||
sndSeqSpeed(temp_r31->unk08, (arg1->speed << 8) / 100);
|
sndSeqSpeed(temp_r31->unk08, (arg1->speed << 8) / 100);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -335,8 +339,128 @@ s32 msmMusStop(int musNo, s32 speed) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: https://decomp.me/scratch/PGpbJ
|
int msmMusPlay(int musId, MSM_MUSPARAM* musParam) {
|
||||||
// msmMusPlay
|
s32 var_r30;
|
||||||
|
int var_r29;
|
||||||
|
s32 temp_r3_3;
|
||||||
|
UnkGroupDataPtr* temp_r3_2;
|
||||||
|
msmMusStruct01* temp_r28;
|
||||||
|
msmMusStruct00* temp_r27;
|
||||||
|
DVDFileInfo sp10;
|
||||||
|
|
||||||
// TODO: https://decomp.me/scratch/24daZ
|
if (musId < 0 || musId >= mus.unk00) {
|
||||||
// msmMusInit
|
return MSM_ERR_INVALIDID;
|
||||||
|
}
|
||||||
|
temp_r28 = &mus.unk0C[musId];
|
||||||
|
if (temp_r28->unk00 == 0xFFFF) {
|
||||||
|
return MSM_ERR_REMOVEDID;
|
||||||
|
}
|
||||||
|
if (msmSysCheckLoadGroupID(temp_r28->unk00) == 0) {
|
||||||
|
return MSM_ERR_GRP_NOTLOADED;
|
||||||
|
}
|
||||||
|
var_r30 = (musParam != NULL) ? musParam->flag : 0;
|
||||||
|
var_r29 = (var_r30 & MSM_MUSPARAM_CHAN) ? musParam->chan : 0;
|
||||||
|
if (var_r29 < 0 || var_r29 >= mus.unk02) {
|
||||||
|
return MSM_ERR_OUTOFMUS;
|
||||||
|
}
|
||||||
|
temp_r27 = &mus.unk18[var_r29];
|
||||||
|
if (temp_r27->unk04 != 0) {
|
||||||
|
sndSeqStop(temp_r27->unk08);
|
||||||
|
}
|
||||||
|
if (temp_r28->unk0C < 0) {
|
||||||
|
if (temp_r27->unk00 != musId) {
|
||||||
|
if (msmFioOpen(mus.unk08, &sp10) != 1) {
|
||||||
|
return MSM_ERR_OPENFAIL;
|
||||||
|
}
|
||||||
|
if (msmFioRead(&sp10, temp_r27->unk0C, temp_r28->unk08, temp_r28->unk04 + mus.unk10) < 0) {
|
||||||
|
msmFioClose(&sp10);
|
||||||
|
return MSM_ERR_READFAIL;
|
||||||
|
}
|
||||||
|
msmFioClose(&sp10);
|
||||||
|
temp_r27->unk10 = temp_r27->unk0C;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
temp_r3_2 = msmSysGetGroupDataPtr(temp_r28->unk0C);
|
||||||
|
if (temp_r3_2 == NULL) {
|
||||||
|
return MSM_ERR_MUSGRP_NOTLOADED;
|
||||||
|
}
|
||||||
|
temp_r27->unk10 = (void*) ((u32) temp_r3_2 + temp_r3_2->unk0C + temp_r28->unk04);
|
||||||
|
}
|
||||||
|
temp_r27->unk05 = 1;
|
||||||
|
temp_r27->unk03 = temp_r28->unk0D;
|
||||||
|
temp_r27->unk2C = 0;
|
||||||
|
temp_r27->unk20 = 0;
|
||||||
|
temp_r27->unk14 = 0;
|
||||||
|
temp_r27->unk28 = 0x7F;
|
||||||
|
temp_r27->unk1C = 0x7F;
|
||||||
|
temp_r27->unk38.flags = 4;
|
||||||
|
temp_r27->unk38.volume.time = 0;
|
||||||
|
temp_r27->unk02 = (var_r30 & MSM_MUSPARAM_VOL) ? musParam->vol : 0x7F;
|
||||||
|
temp_r27->unk38.volume.target = temp_r27->unk03 * temp_r27->unk1C * temp_r27->unk02 / 16129;
|
||||||
|
if (var_r30 & MSM_MUSPARAM_PAUSE) {
|
||||||
|
temp_r27->unk38.flags |= 0x10;
|
||||||
|
}
|
||||||
|
if (var_r30 & MSM_MUSPARAM_SPEED) {
|
||||||
|
temp_r27->unk38.flags |= 2;
|
||||||
|
temp_r27->unk38.speed = musParam->speed * 256 / 100;
|
||||||
|
}
|
||||||
|
if (var_r30 & MSM_MUSPARAM_FADESPEED) {
|
||||||
|
temp_r27->unk14 = -(musParam->fadeSpeed / 15);
|
||||||
|
if (temp_r27->unk14 != 0) {
|
||||||
|
temp_r27->unk18 = 0;
|
||||||
|
temp_r27->unk1C = 0;
|
||||||
|
temp_r27->unk38.volume.target = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
temp_r3_3 = sndSeqPlayEx(temp_r28->unk00, temp_r28->unk02, temp_r27->unk10, &temp_r27->unk38, 0);
|
||||||
|
if (temp_r3_3 == SND_ID_ERROR) {
|
||||||
|
temp_r27->unk05 = 0;
|
||||||
|
return MSM_ERR_PLAYFAIL;
|
||||||
|
}
|
||||||
|
temp_r27->unk08 = temp_r3_3;
|
||||||
|
temp_r27->unk00 = musId;
|
||||||
|
temp_r27->unk04 = (temp_r27->unk38.flags & 0x10) ? 3 : 2;
|
||||||
|
temp_r27->unk05 = 0;
|
||||||
|
return var_r29;
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 msmMusInit(sysData* arg0, DVDFileInfo* arg1) {
|
||||||
|
s32 temp_r4;
|
||||||
|
s32 var_r8;
|
||||||
|
|
||||||
|
mus.unk00 = 0;
|
||||||
|
mus.unk02 = 0;
|
||||||
|
mus.unk04 = 0;
|
||||||
|
mus.unk03 = 0;
|
||||||
|
if (arg0->unk10->unk4 == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
temp_r4 = arg0->unkC->unk2C;
|
||||||
|
if (temp_r4 == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ((mus.unk0C = msmMemAlloc(temp_r4)) == NULL) {
|
||||||
|
return MSM_ERR_OUTOFMEM;
|
||||||
|
}
|
||||||
|
if (msmFioRead(arg1, mus.unk0C, arg0->unkC->unk2C, arg0->unkC->unk28) < 0) {
|
||||||
|
return MSM_ERR_READFAIL;
|
||||||
|
}
|
||||||
|
temp_r4 = arg0->unk10->unk20;
|
||||||
|
if (temp_r4 != 0) {
|
||||||
|
if ((mus.unk14 = msmMemAlloc(temp_r4 * arg0->unk10->unk8)) == NULL) {
|
||||||
|
return MSM_ERR_OUTOFMEM;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mus.unk14 = NULL;
|
||||||
|
}
|
||||||
|
mus.unk00 = arg0->unk10->unk4;
|
||||||
|
mus.unk02 = arg0->unk10->unk8;
|
||||||
|
mus.unk10 = arg0->unkC->unk48;
|
||||||
|
mus.unk08 = arg0->unk0;
|
||||||
|
for (var_r8 = 0; var_r8 < mus.unk02; var_r8++) {
|
||||||
|
mus.unk18[var_r8].unk0C = (void*) ((u32) mus.unk14 + arg0->unk10->unk20 * var_r8);
|
||||||
|
mus.unk18[var_r8].unk00 = -1;
|
||||||
|
mus.unk18[var_r8].unk05 = 0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -231,7 +231,6 @@ s32 msmSeUpdataListener(Vec* pos, Vec* heading) {
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 msmSeSetListener(Vec* pos, Vec* heading, float sndDist, float sndSpeed, MSM_SELISTENER* listener) {
|
s32 msmSeSetListener(Vec* pos, Vec* heading, float sndDist, float sndSpeed, MSM_SELISTENER* listener) {
|
||||||
msmSeStruct02* se_ptr = &se;
|
|
||||||
SND_FVECTOR* temp_b0;
|
SND_FVECTOR* temp_b0;
|
||||||
SND_FVECTOR* temp_a4;
|
SND_FVECTOR* temp_a4;
|
||||||
SND_FVECTOR* temp_c8;
|
SND_FVECTOR* temp_c8;
|
||||||
|
|
@ -241,10 +240,10 @@ s32 msmSeSetListener(Vec* pos, Vec* heading, float sndDist, float sndSpeed, MSM_
|
||||||
float var_f0;
|
float var_f0;
|
||||||
float var_f0_2;
|
float var_f0_2;
|
||||||
|
|
||||||
temp_a4 = &se_ptr->unkA4;
|
temp_a4 = &se.unkA4;
|
||||||
temp_c8 = &se_ptr->unkC8;
|
temp_c8 = &se.unkC8;
|
||||||
temp_bc = &se_ptr->unkBC;
|
temp_bc = &se.unkBC;
|
||||||
temp_b0 = &se_ptr->unkB0;
|
temp_b0 = &se.unkB0;
|
||||||
temp_a4->x = pos->x;
|
temp_a4->x = pos->x;
|
||||||
temp_a4->y = pos->y;
|
temp_a4->y = pos->y;
|
||||||
temp_a4->z = pos->z;
|
temp_a4->z = pos->z;
|
||||||
|
|
@ -254,18 +253,18 @@ s32 msmSeSetListener(Vec* pos, Vec* heading, float sndDist, float sndSpeed, MSM_
|
||||||
temp_bc->y = heading->y;
|
temp_bc->y = heading->y;
|
||||||
temp_bc->z = heading->z;
|
temp_bc->z = heading->z;
|
||||||
temp_b0->x = temp_b0->y = temp_b0->z = 0.0f;
|
temp_b0->x = temp_b0->y = temp_b0->z = 0.0f;
|
||||||
se_ptr->unkD4 = sndDist;
|
se.unkD4 = sndDist;
|
||||||
var_r3 = (listener != NULL) ? listener->flag : 0;
|
var_r3 = (listener != NULL) ? listener->flag : 0;
|
||||||
var_f4 = (var_r3 & 1) ? listener->startDis : 0.0f;
|
var_f4 = (var_r3 & 1) ? listener->startDis : 0.0f;
|
||||||
var_f0 = (var_r3 & 2) ? listener->frontSurDis : (var_f4 + sndDist * 0.25f);
|
var_f0 = (var_r3 & 2) ? listener->frontSurDis : (var_f4 + sndDist * 0.25f);
|
||||||
var_f0_2 = (var_r3 & 4) ? listener->backSurDis : (var_f4 + sndDist * 0.25f);
|
var_f0_2 = (var_r3 & 4) ? listener->backSurDis : (var_f4 + sndDist * 0.25f);
|
||||||
if ((s32) sndAddListenerEx(&se_ptr->unk14, temp_a4, temp_b0, temp_bc, temp_c8,
|
if ((s32) sndAddListenerEx(&se.unk14, temp_a4, temp_b0, temp_bc, temp_c8,
|
||||||
var_f0, var_f0_2, sndSpeed, -var_f4, 1, 0x7F, NULL) == FALSE)
|
var_f0, var_f0_2, sndSpeed, -var_f4, 1, 0x7F, NULL) == FALSE)
|
||||||
{
|
{
|
||||||
se_ptr->unkDA = 0;
|
se.unkDA = 0;
|
||||||
return MSM_ERR_22;
|
return MSM_ERR_22;
|
||||||
}
|
}
|
||||||
se_ptr->unkDA = 1;
|
se.unkDA = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -287,13 +286,11 @@ s32 msmSeGetEntryID(s32 seId, int* seNo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 msmSeGetNumPlay(BOOL baseGrp) {
|
s32 msmSeGetNumPlay(BOOL baseGrp) {
|
||||||
msmSeStruct02* se_ptr = &se;
|
|
||||||
|
|
||||||
switch (baseGrp) {
|
switch (baseGrp) {
|
||||||
case FALSE:
|
case FALSE:
|
||||||
return se_ptr->unk06 + se_ptr->unk05;
|
return se.unk06 + se.unk05;
|
||||||
default:
|
default:
|
||||||
return se_ptr->unk06;
|
return se.unk06;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -409,12 +406,11 @@ void msmSePauseAll(BOOL pause, s32 speed) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void msmSeStopAll(BOOL checkGrp, s32 speed) {
|
void msmSeStopAll(BOOL checkGrp, s32 speed) {
|
||||||
msmSeStruct02* se_ptr = &se;
|
|
||||||
msmSeStruct00* temp_r28;
|
msmSeStruct00* temp_r28;
|
||||||
s32 var_r27;
|
s32 var_r27;
|
||||||
|
|
||||||
for (var_r27 = 0; var_r27 < se_ptr->unk04; var_r27++) {
|
for (var_r27 = 0; var_r27 < se.unk04; var_r27++) {
|
||||||
temp_r28 = &se_ptr->unk10[var_r27];
|
temp_r28 = &se.unk10[var_r27];
|
||||||
if (temp_r28->unk0A == 0) {
|
if (temp_r28->unk0A == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -435,7 +431,7 @@ void msmSeStopAll(BOOL checkGrp, s32 speed) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (msmSysCheckBaseGroup(se_ptr->unk0C[temp_r28->unk08].groupId) == 0) {
|
if (msmSysCheckBaseGroup(se.unk0C[temp_r28->unk08].groupId) == 0) {
|
||||||
temp_r28->unk34 = speed / 15;
|
temp_r28->unk34 = speed / 15;
|
||||||
if (temp_r28->unk34 != 0) {
|
if (temp_r28->unk34 != 0) {
|
||||||
temp_r28->unk38 = temp_r28->unk34;
|
temp_r28->unk38 = temp_r28->unk34;
|
||||||
|
|
@ -479,40 +475,39 @@ s32 msmSeStop(int seNo, s32 speed) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline BOOL msmSeInline00(msmSeStruct02* arg0, msmSeStruct00* arg1, MSM_SEPARAM* param) {
|
static inline BOOL msmSeInline00(msmSeStruct00* arg0, MSM_SEPARAM* param) {
|
||||||
BOOL var_r0 = FALSE;
|
BOOL var_r0 = FALSE;
|
||||||
|
|
||||||
if (param != NULL) {
|
if (param != NULL) {
|
||||||
if (param->flag & MSM_SEPARAM_VOL) {
|
if (param->flag & MSM_SEPARAM_VOL) {
|
||||||
arg1->unk0C = param->vol;
|
arg0->unk0C = param->vol;
|
||||||
}
|
}
|
||||||
if (param->flag & MSM_SEPARAM_PAN) {
|
if (param->flag & MSM_SEPARAM_PAN) {
|
||||||
arg1->unk0D = param->pan;
|
arg0->unk0D = param->pan;
|
||||||
}
|
}
|
||||||
if (param->flag & MSM_SEPARAM_PITCH) {
|
if (param->flag & MSM_SEPARAM_PITCH) {
|
||||||
arg1->unk0E = param->pitch;
|
arg0->unk0E = param->pitch;
|
||||||
}
|
}
|
||||||
if (param->flag & MSM_SEPARAM_SPAN) {
|
if (param->flag & MSM_SEPARAM_SPAN) {
|
||||||
arg1->unk10 = param->span;
|
arg0->unk10 = param->span;
|
||||||
}
|
}
|
||||||
if (param->flag & MSM_SEPARAM_AUXVOLA) {
|
if (param->flag & MSM_SEPARAM_AUXVOLA) {
|
||||||
arg1->unk11 = param->auxAVol;
|
arg0->unk11 = param->auxAVol;
|
||||||
}
|
}
|
||||||
if (param->flag & MSM_SEPARAM_AUXVOLB) {
|
if (param->flag & MSM_SEPARAM_AUXVOLB) {
|
||||||
arg1->unk12 = param->auxBVol;
|
arg0->unk12 = param->auxBVol;
|
||||||
}
|
}
|
||||||
if ((param->flag & MSM_SEPARAM_POS) && arg0->unkDA != 0) {
|
if ((param->flag & MSM_SEPARAM_POS) && se.unkDA != 0) {
|
||||||
var_r0 = TRUE;
|
var_r0 = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
arg1->unk14.paraArray = arg1->unk1C;
|
arg0->unk14.paraArray = arg0->unk1C;
|
||||||
return var_r0;
|
return var_r0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int msmSePlay(int seId, MSM_SEPARAM* param) {
|
int msmSePlay(int seId, MSM_SEPARAM* param) {
|
||||||
msmSeStruct00* var_r30;
|
msmSeStruct00* var_r30;
|
||||||
SND_EMITTER* var_r29;
|
SND_EMITTER* var_r29;
|
||||||
msmSeStruct02* se_ptr = &se;
|
|
||||||
MSMSE* temp_r9;
|
MSMSE* temp_r9;
|
||||||
int var_r3_2;
|
int var_r3_2;
|
||||||
s32 var_r4;
|
s32 var_r4;
|
||||||
|
|
@ -549,7 +544,7 @@ int msmSePlay(int seId, MSM_SEPARAM* param) {
|
||||||
var_r30->unk48 = 0x7F;
|
var_r30->unk48 = 0x7F;
|
||||||
var_r30->unk3C = 0x7F;
|
var_r30->unk3C = 0x7F;
|
||||||
var_r30->unkB4 = 0;
|
var_r30->unkB4 = 0;
|
||||||
if (msmSeInline00(se_ptr, var_r30, param)) {
|
if (msmSeInline00(var_r30, param)) {
|
||||||
var_r30->unk9C.x = param->pos.x;
|
var_r30->unk9C.x = param->pos.x;
|
||||||
var_r30->unk9C.y = param->pos.y;
|
var_r30->unk9C.y = param->pos.y;
|
||||||
var_r30->unk9C.z = param->pos.z;
|
var_r30->unk9C.z = param->pos.z;
|
||||||
|
|
@ -567,7 +562,7 @@ int msmSePlay(int seId, MSM_SEPARAM* param) {
|
||||||
var_r6_2 = 8;
|
var_r6_2 = 8;
|
||||||
}
|
}
|
||||||
var_r30->unkB4 = temp_r9->doppler;
|
var_r30->unkB4 = temp_r9->doppler;
|
||||||
var_r30->unk00 = sndAddEmitterParaEx(var_r29, &var_r30->unk9C, &var_r30->unkA8, se_ptr->unkD4, temp_r9->comp / 127.0f, var_r6_2, temp_r9->fxId, se_ptr->unkD8++, var_r30->unk0C * var_r30->unk30 / 127, 0, NULL, &var_r30->unk14);
|
var_r30->unk00 = sndAddEmitterParaEx(var_r29, &var_r30->unk9C, &var_r30->unkA8, se.unkD4, temp_r9->comp / 127.0f, var_r6_2, temp_r9->fxId, se.unkD8++, var_r30->unk0C * var_r30->unk30 / 127, 0, NULL, &var_r30->unk14);
|
||||||
if (var_r29 != NULL) {
|
if (var_r29 != NULL) {
|
||||||
if (!sndCheckEmitter(var_r29)) {
|
if (!sndCheckEmitter(var_r29)) {
|
||||||
return MSM_ERR_PLAYFAIL;
|
return MSM_ERR_PLAYFAIL;
|
||||||
|
|
@ -612,7 +607,7 @@ int msmSePlay(int seId, MSM_SEPARAM* param) {
|
||||||
}
|
}
|
||||||
var_r30->unk0B = 1;
|
var_r30->unk0B = 1;
|
||||||
var_r30->unk08 = seId;
|
var_r30->unk08 = seId;
|
||||||
var_r30->unk04 = se_ptr->unk08++;
|
var_r30->unk04 = se.unk08++;
|
||||||
var_r30->unk0A = 2;
|
var_r30->unk0A = 2;
|
||||||
var_r30->unk0B = 0;
|
var_r30->unk0B = 0;
|
||||||
return var_r30->unk04;
|
return var_r30->unk04;
|
||||||
|
|
|
||||||
1057
src/msm/msmstream.c
Executable file
1057
src/msm/msmstream.c
Executable file
File diff suppressed because it is too large
Load diff
|
|
@ -5,8 +5,6 @@
|
||||||
#include "msm/msmse.h"
|
#include "msm/msmse.h"
|
||||||
#include "msm/msmstream.h"
|
#include "msm/msmstream.h"
|
||||||
|
|
||||||
#include "game/msm.h" // TODO remove, only for decomp
|
|
||||||
|
|
||||||
static sysData sys;
|
static sysData sys;
|
||||||
|
|
||||||
static void msmSysServer(void)
|
static void msmSysServer(void)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue