diff --git a/CMakeLists.txt b/CMakeLists.txt index a2f33477..b39274aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -189,4 +189,4 @@ foreach (dir ${REL_DIRS}) endif () endforeach () -add_dependencies(marioparty4 bootDll) +add_dependencies(marioparty4 bootDll modeseldll) diff --git a/dol.def b/dol.def index 4f78d292..3ae6375d 100644 --- a/dol.def +++ b/dol.def @@ -1,7 +1,18 @@ EXPORTS game_main + C_MTXCopy + C_MTXScale + C_VECAdd + C_VECScale + C_VECSubtract + C_VECNormalize + C_VECMag + C_VECCrossProduct + mtxRotCat byteswap_u32 byteswap_s32 + msmMusSetMasterVolume + msmSysGetOutputMode BoardRollExec BoardRollKill BoardDiceValueSet @@ -390,12 +401,30 @@ EXPORTS espTPLvlSet espZRotSet HuAudFXPlay + HuAudFXStop + HuAudSeqPlay + HuAudSeqAllFadeOut HuAudSStreamAllFadeOut HuAudSStreamPlay HuAudSndGrpSetSet HuMemDirectMalloc + HuMemDirectMallocNum HuMemDirectFree + HuDataInit + HuDataDirRead + HuDataRead + HuDataReadNum + HuDataReadMulti + HuDataDirReadAsync + HuDataDirReadNumAsync + HuDataSelHeapRead HuDataSelHeapReadNum + HuDataGetSize + HuDataDirClose + HuDataDirCloseNum + HuDataClose + HuDataCloseMulti + HuDataReadNumHeapShortForce HuDecodeData Hu3DLayerHookSet Hu3DNoSyncSet @@ -597,16 +626,32 @@ EXPORTS Hu3DProjectionPosSet Hu3DProjectionTPLvlSet Hu3DProjectionKill - HuPrcEnd + HuPrcInit + HuPrcCall HuPrcCreate - HuPrcCurrentGet + HuPrcKill + HuPrcEnd + HuPrcWakeup HuPrcSleep HuPrcVSleep + HuPrcCurrentGet + HuPrcDestructorSet + HuPrcDestructorSet2 + HuPrcChildCreate + HuPrcChildLink + HuPrcChildUnlink + HuPrcChildKill + HuPrcMemAlloc + HuPrcMemFree HuSetVecF HuSprAnimRead + HuSprBankSet HuSprCreate HuSprGrpCreate HuSprGrpMemberSet + HuSprGrpPosSet + HuSprGrpScaleSet + HuSprGrpScissorSet HuSprGrpKill HuSprAttrSet HuSprAttrReset @@ -626,6 +671,45 @@ EXPORTS HuTHPFrameGet HuTHPTotalFrameGet HuTHPSetVolume + HuCardCheck + HuCardMount + HuCardUnMount + HuCardFormat + HuCardOpen + HuCardRead + HuCardCreate + HuCardClose + HuCardWrite + HuCardDelete + HuCardSectorSizeGet + HuCardFreeSpaceGet + HuCardSlotCheck + SLFileOpen + SLFileCreate + SLFileWrite + SLFileClose + SLFileRead + SLCurSlotNoSet + SLSaveDataMake + SLCommonSet + SLSaveBoard + SLSaveBoardStory + SLSave + SLLoadGameStat + SLLoadBoard + SLLoadBoardStory + SLLoad + SLCurBoxNoSet + SLSaveFlagSet + SLSaveFlagGet + SLCheckSumCheck + SLCheckSumSet + SLSerialNoGet + SLSerialNoCheck + SLStatSet + _CheckFlag + _SetFlag + _ClearFlag HuWindowInit HuWinInit HuWinCreate @@ -709,15 +793,21 @@ EXPORTS MGSeqInit MGSeqCreate MGSeqPosSet + omAddObjEx + omGameSysInit omOvlCallEx - omOvlReturnEx + omOvlGotoEx omOvlHisChg omOvlHisGet + omOvlReturnEx omInitObjMan OSGetTick + OSGetTime + OSTicksToCalendarTime OSReport WipeColorSet WipeCreate WipeExecAlways WipeInit WipeStatGet + GWGameStatReset diff --git a/include/game/card.h b/include/game/card.h index 96d621b4..58c0b5d3 100644 --- a/include/game/card.h +++ b/include/game/card.h @@ -2,8 +2,9 @@ #define _GAME_CARD_H #include "dolphin.h" +#include "version.h" -extern u8 UnMountCnt; +SHARED_SYM extern u8 UnMountCnt; void HuCardInit(void); s32 HuCardCheck(void); diff --git a/include/game/hsfman.h b/include/game/hsfman.h index 4200f658..1dc67897 100644 --- a/include/game/hsfman.h +++ b/include/game/hsfman.h @@ -5,6 +5,7 @@ #include "game/hsfanim.h" #include "game/hsfformat.h" #include "game/memory.h" +#include "version.h" #define HU3D_MODEL_MAX 512 #define HU3D_MOTION_MAX 256 @@ -297,7 +298,7 @@ void Hu3DProjectionPosSet(s16, Vec *, Vec *, Vec *); void Hu3DProjectionTPLvlSet(s16, float); void Hu3DMipMapSet(char *, s16, s32, float); -extern ModelData Hu3DData[0x200]; +SHARED_SYM extern ModelData Hu3DData[0x200]; extern CameraData Hu3DCamera[0x10]; extern AnimData *reflectAnim[5]; extern AnimData *hiliteAnim[4]; diff --git a/include/game/objsub.h b/include/game/objsub.h index d42531e5..bb8bb297 100644 --- a/include/game/objsub.h +++ b/include/game/objsub.h @@ -4,6 +4,7 @@ #include "dolphin.h" #include "game/process.h" #include "game/gamework_data.h" +#include "version.h" typedef struct mg_info { u16 ovl; @@ -27,10 +28,10 @@ extern s16 mgBattleStar[4]; extern s16 mgBattleStarMax; extern u8 lbl_801D3E94; extern u32 mgRecordExtra; -extern s32 mgQuitExtraF; -extern s32 mgPracticeEnableF; +SHARED_SYM extern s32 mgQuitExtraF; +SHARED_SYM extern s32 mgPracticeEnableF; extern s32 mgInstExitEnableF; -extern u8 mgBoardHostEnableF; +SHARED_SYM extern u8 mgBoardHostEnableF; extern s16 mgTicTacToeGrid[3][3]; extern u8 mgIndexList[256]; diff --git a/include/game/saveload.h b/include/game/saveload.h index d17712a3..3adb40de 100644 --- a/include/game/saveload.h +++ b/include/game/saveload.h @@ -24,13 +24,13 @@ typedef union save_buf_all { u8 ATTRIBUTE_ALIGN(32) buf[SAVE_BUF_SIZE]; } SaveBufAll; -extern char *SaveFileNameTbl[]; -extern CARDFileInfo curFileInfo; -extern SaveBufAll saveBuf; +SHARED_SYM extern char *SaveFileNameTbl[]; +SHARED_SYM extern CARDFileInfo curFileInfo; +SHARED_SYM extern SaveBufAll saveBuf; extern u64 SLSerialNo; extern s32 saveExecF; extern u8 curBoxNo; -extern s16 curSlotNo; +SHARED_SYM extern s16 curSlotNo; s32 SLFileOpen(char *fileName); s32 SLFileCreate(char *fileName, u32 size, void *addr); diff --git a/src/REL/selmenuDll/main.c b/src/REL/selmenuDll/main.c index ad413ed8..37c33b65 100644 --- a/src/REL/selmenuDll/main.c +++ b/src/REL/selmenuDll/main.c @@ -907,9 +907,12 @@ static void SMSound3DDraw(void); static void SMSound3DInit(omObjData *object) { +#ifdef __MWERKS__ + // TODO PC s8 *data = msmSeGetIndexPtr(emiCompDataNo); emiCompVal = data[12]; object->func = SMSound3DUpdate; +#endif } static void SMSound3DUpdate(omObjData *object) diff --git a/src/game/card.c b/src/game/card.c index 97fdd32d..a057ed46 100644 --- a/src/game/card.c +++ b/src/game/card.c @@ -4,7 +4,7 @@ #include "version.h" static void *cardWork; -u8 UnMountCnt; +SHARED_SYM u8 UnMountCnt; static void MountCallBack(s32 chan, s32 result); diff --git a/src/game/chrman.c b/src/game/chrman.c index 69ee3f20..079d92b5 100755 --- a/src/game/chrman.c +++ b/src/game/chrman.c @@ -91,8 +91,8 @@ static UnkCharInstanceStruct charInstance[8]; static s16 effectMdl[8]; static EffectParamData *particleData[8]; static Process *itemHookProcess[32]; -static u16 lbl_801975B0[8]; -static u8 lbl_801975C0[0x90]; // Unused? +static u16 effectFlag[15]; +static u8 lbl_801975C0[0x82]; // Unused? static s32 skipAnimUpdate; static void *effectAMemP; @@ -1135,7 +1135,7 @@ void CharModelKill(s16 character) CharModelKill(i); } for (i = 0; i < 15; i++) { - lbl_801975B0[i] = 0; + effectFlag[i] = 0; } return; } @@ -1736,10 +1736,10 @@ void CharModelEffectEnableSet(s16 character, s32 arg1) if (character >= 8) { if (arg1 == 0) { - lbl_801975B0[character] |= 0x10; + effectFlag[character] |= 0x10; } else { - lbl_801975B0[character] &= ~0x10; + effectFlag[character] &= ~0x10; } return; } @@ -1835,7 +1835,7 @@ static void UpdateNpcEffect(void) temp_r26 = Hu3DMotionTimeGet(temp_r25); switch (temp_r27[2]) { case 0: - if (!(temp_r26 & 0xF) && !(lbl_801975B0[temp_r28] & 0x10)) { + if (!(temp_r26 & 0xF) && !(effectFlag[temp_r28] & 0x10)) { effectDustParam.unk0C.x = 2.0 * -sind(temp_r30->rot.y); effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(10); effectDustParam.unk0C.z = 2.0 * -cosd(temp_r30->rot.y); @@ -1854,7 +1854,7 @@ static void UpdateNpcEffect(void) } break; case 1: - if (!(temp_r26 & 3) && !(lbl_801975B0[temp_r28] & 0x10)) { + if (!(temp_r26 & 3) && !(effectFlag[temp_r28] & 0x10)) { effectDustParam.unk0C.x = 4.0 * -sind(temp_r30->rot.y); effectDustParam.unk0C.y = 2.0 + 0.1 * frandmod(10); effectDustParam.unk0C.z = 4.0 * -cosd(temp_r30->rot.y); @@ -1874,7 +1874,7 @@ static void UpdateNpcEffect(void) break; case 2: if (temp_r28 != -1) { - if (!(temp_r26 & 0x1F) && !(lbl_801975B0[temp_r28] & 0x10)) { + if (!(temp_r26 & 0x1F) && !(effectFlag[temp_r28] & 0x10)) { effectDustParam.unk0C.x = 2.0 * -sind(temp_r30->rot.y); effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(10); effectDustParam.unk0C.z = 2.0 * -cosd(temp_r30->rot.y); @@ -1893,7 +1893,7 @@ static void UpdateNpcEffect(void) break; case 3: if (temp_r28 != -1) { - if (!(temp_r26 & 3) && !(lbl_801975B0[temp_r28] & 0x10)) { + if (!(temp_r26 & 3) && !(effectFlag[temp_r28] & 0x10)) { effectDustParam.unk0C.x = 2.0 * -sind(temp_r30->rot.y); effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(10); effectDustParam.unk0C.z = 2.0 * -cosd(temp_r30->rot.y); @@ -1912,7 +1912,7 @@ static void UpdateNpcEffect(void) break; case 4: if (temp_r28 != -1) { - if (!(temp_r26 & 7) && !(lbl_801975B0[temp_r28] & 0x10)) { + if (!(temp_r26 & 7) && !(effectFlag[temp_r28] & 0x10)) { effectDustParam.unk0C.x = 2.0 * -sind(temp_r30->rot.y); effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(10); effectDustParam.unk0C.z = 2.0 * -cosd(temp_r30->rot.y); @@ -1933,7 +1933,7 @@ static void UpdateNpcEffect(void) if (temp_r26 != 0) { break; } - if (lbl_801975B0[temp_r28] & 0x10) { + if (effectFlag[temp_r28] & 0x10) { break; } for (i = 0; i < 8; i++) { diff --git a/src/game/hsfman.c b/src/game/hsfman.c index affdee2c..97e1b2d2 100644 --- a/src/game/hsfman.c +++ b/src/game/hsfman.c @@ -22,7 +22,7 @@ #define SHADOW_HEAP_SIZE 0x9000 -ModelData Hu3DData[HU3D_MODEL_MAX]; +SHARED_SYM ModelData Hu3DData[HU3D_MODEL_MAX]; CameraData Hu3DCamera[HU3D_CAM_MAX]; static s16 layerNum[8]; static void (*layerHook[8])(s16); diff --git a/src/game/objdll.c b/src/game/objdll.c index ec0b6b5a..467032ef 100644 --- a/src/game/objdll.c +++ b/src/game/objdll.c @@ -140,7 +140,7 @@ void omDLLUnlink(omDllData *dll_ptr, s16 flag) { OSReport("odjdll>Unlink DLL:%s\n", dll_ptr->name); #ifdef _WIN32 - FreeLibrary(dll_ptr->hModule); + FreeLibrary(dll_ptr->hModule); #else if(flag == 1) { OSReport("objdll>Unlink DLL epilog\n"); diff --git a/src/game/objmain.c b/src/game/objmain.c index 479466a5..a936f7f1 100644 --- a/src/game/objmain.c +++ b/src/game/objmain.c @@ -8,6 +8,8 @@ #include #include "game/pad.h" #include "game/printfunc.h" +#include "game/minigame_seq.h" +#include "game/window.h" #define OM_OVL_HIS_MAX 16 @@ -46,6 +48,11 @@ char omUPauseFlag; SHARED_SYM s16 omSysExitReq; s16 omdispinfo; +#ifdef TARGET_PC +OverlayID pcOvlToKill = OVL_INVALID; +s16 pcOvlKillArg = 0; +#endif + static omOvlHisData omovlhis[OM_OVL_HIS_MAX]; u8 omSysPauseEnableFlag = TRUE; @@ -63,16 +70,19 @@ void omMasterInit(s32 prio, FileListEntry *ovl_list, s32 ovl_count, OverlayID st omovlhisidx = -1; omOvlCallEx(start_ovl, 1, 0, 0); omDBGSysKeyObj = NULL; -#ifdef __MWERKS__ - // TODO PC omSysPauseEnable(TRUE); -#endif } static void omWatchOverlayProc(void) { while (1) { if (omcurovl == OVL_INVALID) { +#ifdef TARGET_PC + if (pcOvlToKill >= 0) { + omDLLNumEnd(pcOvlToKill, pcOvlKillArg); + pcOvlToKill = OVL_INVALID; + } +#endif if (omnextovl >= 0 && fadeStat == 0) { HuPrcSleep(0); OSReport("++++++++++++++++++++ Start New OVL %d (EVT:%d STAT:0x%08x) ++++++++++++++++++\n", omnextovl, omnextovlevtno, omnextovlstat); @@ -84,22 +94,16 @@ static void omWatchOverlayProc(void) OSReport("objman>Init esp\n"); espInit(); OSReport("objman>Call objectsetup\n"); -#ifdef __MWERKS__ - // TODO PC HuAudVoiceInit(omnextovl); HuAudDllSndGrpSet(omnextovl); -#endif omcurovl = omnextovl; omovlevtno = omnextovlevtno; omovlstat = omnextovlstat; omnextovl = OVL_INVALID; -#ifdef __MWERKS__ - // TODO PC if (_CheckFlag(FLAG_ID_MAKE(1, 12))) { MGSeqPracticeInit(); } omSysPauseEnable(TRUE); -#endif omcurdll = omDLLStart(omcurovl, 0); OSReport("objman>ObjectSetup end\n"); if (omcurovl != OVL_INVALID) { @@ -130,6 +134,7 @@ void omOvlCallEx(OverlayID overlay, s16 arg2, s32 event, s32 stat) omovlhis[++omovlhisidx].overlay = overlay; omovlhis[omovlhisidx].event = event; omovlhis[omovlhisidx].stat = stat; + omOvlGotoEx(overlay, arg2, event, stat); } @@ -157,16 +162,10 @@ void omOvlReturnEx(s16 level, s16 arg2) void omOvlKill(s16 arg) { -#ifdef __MWERKS__ - // TODO PC CharModelKill(-1); MGSeqKillAll(); -#endif Hu3DAllKill(); -#ifdef __MWERKS__ - // TODO PC HuWinAllKill(); -#endif HuSprClose(); HuPrcChildKill(omwatchproc); HuMemDirectFreeNum(HEAP_SYSTEM, MEMORY_DEFAULT_NUM); @@ -174,13 +173,16 @@ void omOvlKill(s16 arg) HuMemDirectFreeNum(HEAP_DVD, MEMORY_DEFAULT_NUM); HuMemDirectFreeNum(HEAP_DATA, MEMORY_DEFAULT_NUM); HuPadRumbleAllStop(); -#ifdef __MWERKS__ - // TODO PC HuAudFXListnerKill(); -#endif OSReport("OvlKill %d\n", arg); omSysExitReq = FALSE; +#ifdef TARGET_PC + // this function is called from the DLL, we can't kill it directly here + pcOvlToKill = omcurovl; + pcOvlKillArg = arg; +#else omDLLNumEnd(omcurovl, arg); +#endif omcurovl = OVL_INVALID; omDBGSysKeyObj = NULL; } diff --git a/src/game/objsub.c b/src/game/objsub.c index da63840e..231d181d 100644 --- a/src/game/objsub.c +++ b/src/game/objsub.c @@ -1168,10 +1168,10 @@ s16 mgBattleStar[4]; s16 mgBattleStarMax; u8 lbl_801D3E94; u32 mgRecordExtra; -s32 mgQuitExtraF; -s32 mgPracticeEnableF; +SHARED_SYM s32 mgQuitExtraF; +SHARED_SYM s32 mgPracticeEnableF; s32 mgInstExitEnableF; -u8 mgBoardHostEnableF; +SHARED_SYM u8 mgBoardHostEnableF; s16 mgTicTacToeGrid[3][3]; u8 mgIndexList[256]; diff --git a/src/game/saveload.c b/src/game/saveload.c index df1e5d6e..6fd9ea19 100644 --- a/src/game/saveload.c +++ b/src/game/saveload.c @@ -27,13 +27,13 @@ static void SLKillSaveWin(void); extern u8 UnMountCnt; -CARDFileInfo curFileInfo; -SaveBufAll saveBuf; +SHARED_SYM CARDFileInfo curFileInfo; +SHARED_SYM SaveBufAll saveBuf; u64 SLSerialNo; s32 saveExecF; u8 curBoxNo; -s16 curSlotNo; +SHARED_SYM s16 curSlotNo; #if VERSION_JP static u8 commentTbl[2][32] = { "マリオパーティ4", "??月??日 データ?です。" }; @@ -42,7 +42,7 @@ static u8 sjisNumTbl[20] = "0123456789"; static u8 commentTbl[2][32] = { "Mario Party 4", "File 0 00/00/0000" }; #endif -char *SaveFileNameTbl[] = { "MARIPA4BOX0", "MARIPA4BOX1", "MARIPA4BOX2" }; +SHARED_SYM char *SaveFileNameTbl[] = { "MARIPA4BOX0", "MARIPA4BOX1", "MARIPA4BOX2" }; s32 SaveEnableF = 1; diff --git a/src/port/stubs.c b/src/port/stubs.c index e0e09f3b..df991ea1 100644 --- a/src/port/stubs.c +++ b/src/port/stubs.c @@ -686,6 +686,15 @@ s32 msmMusSetParam(s32 arg0, MSM_MUSPARAM* arg1) return 0; } +void msmMusSetMasterVolume(s32 vol) +{ +} + +s32 msmSysGetOutputMode(void) +{ + return 0; +} + s32 HuSoftResetButtonCheck(void) { //puts("HuSoftResetButtonCheck is a stub");