diff --git a/config/GMPE01_00/splits.txt b/config/GMPE01_00/splits.txt index 91fea830..7fd7dbde 100644 --- a/config/GMPE01_00/splits.txt +++ b/config/GMPE01_00/splits.txt @@ -258,7 +258,7 @@ game/armem.c: .bss start:0x801967E0 end:0x80196EC0 .sbss start:0x801D3E00 end:0x801D3E10 -game/code_800498F0.c: +game/chrman.c: .text start:0x800498F0 end:0x80050C5C .data start:0x801307C8 end:0x801311E8 .bss start:0x80196EC0 end:0x80197650 @@ -341,16 +341,22 @@ game/board/model.c: .sdata2 start:0x801D5300 end:0x801D5318 game/board/window.c: - .text start:0x8006FD7C end:0x800714F8 + .text start:0x8006FD7C end:0x80070D84 .rodata start:0x8011DE60 end:0x8011DED0 - .data start:0x80139AA0 end:0x80139B00 + .data start:0x80139AA0 end:0x80139AE8 .bss start:0x8019D998 end:0x8019D9F8 - .sdata start:0x801D36E0 end:0x801D36F0 - .sbss start:0x801D3F68 end:0x801D3F98 + .sdata start:0x801D36E0 end:0x801D36E8 + .sbss start:0x801D3F68 end:0x801D3F90 .sdata2 start:0x801D5318 end:0x801D5328 +game/board/board_snd.c: + .text start:0x80070D84 end:0x80071290 + .data start:0x80139AE8 end:0x80139B00 + .sdata start:0x801D36E8 end:0x801D36F0 + .sbss start:0x801D3F90 end:0x801D3F98 + game/board/com.c: - .text start:0x800714F8 end:0x800729A4 + .text start:0x80071290 end:0x800729A4 .data start:0x80139B00 end:0x80139BC8 .sdata start:0x801D36F0 end:0x801D36F8 .sdata2 start:0x801D5328 end:0x801D5350 @@ -426,7 +432,7 @@ game/board/star.c: .sdata2 start:0x801D5898 end:0x801D5938 game/board/dice_roll.c: - .text start:0x80085CC8 end:0x8008831C + .text start:0x80085CC8 end:0x80088368 .rodata start:0x8011E0B0 end:0x8011E118 .data start:0x8013A368 end:0x8013A408 .bss start:0x801A4AE0 end:0x801A4AF0 @@ -435,7 +441,7 @@ game/board/dice_roll.c: .sdata2 start:0x801D5938 end:0x801D59E0 game/board/ui.c: - .text start:0x8008831C end:0x8008DF68 + .text start:0x80088368 end:0x8008DF68 .rodata start:0x8011E118 end:0x8011E200 .data start:0x8013A408 end:0x8013A608 .bss start:0x801A4AF0 end:0x801A4B80 @@ -830,15 +836,95 @@ dolphin/gx/GXStubs.c: dolphin/gx/GXDisplayList.c: .text start:0x800CF018 end:0x800CF224 + .bss start:0x801A6778 end:0x801A6C98 + .sbss start:0x801D4600 end:0x801D4608 dolphin/gx/GXTransform.c: .text start:0x800CF224 end:0x800CF9D8 - .sdata2 start:0x801D64D0 end:0x801D64F8 + .sdata2 start:0x801D64D0 end:0x801D64F0 dolphin/gx/GXPerf.c: .text start:0x800CF9D8 end:0x800D09A4 .data start:0x8013DDA0 end:0x8013DEE8 +dolphin/card/CARDBios.c: + .text start:0x800D09A4 end:0x800D1CC4 + .data start:0x8013DEE8 end:0x8013DF00 + .bss start:0x801A6C98 end:0x801A6ED8 + +dolphin/card/CARDUnlock.c: + .text start:0x800D1CC4 end:0x800D2F24 + .data start:0x8013DF00 end:0x8013E060 + +dolphin/card/CARDRdwr.c: + .text start:0x800D2F24 end:0x800D31A4 + +dolphin/card/CARDBlock.c: + .text start:0x800D31A4 end:0x800D35A8 + +dolphin/card/CARDDir.c: + .text start:0x800D35A8 end:0x800D380C + +dolphin/card/CARDCheck.c: + .text start:0x800D380C end:0x800D4774 + +dolphin/card/CARDMount.c: + .text start:0x800D4774 end:0x800D5234 + .data start:0x8013E060 end:0x8013E0A0 + +dolphin/card/CARDFormat.c: + .text start:0x800D5234 end:0x800D5A24 + +dolphin/card/CARDOpen.c: + .text start:0x800D5A24 end:0x800D5E78 + +dolphin/card/CARDCreate.c: + .text start:0x800D5E78 end:0x800D6210 + +dolphin/card/CARDRead.c: + .text start:0x800D6210 end:0x800D6688 + +dolphin/card/CARDWrite.c: + .text start:0x800D6688 end:0x800D6A04 + +dolphin/card/CARDDelete.c: + .text start:0x800D6A04 end:0x800D6C00 + +dolphin/card/CARDStat.c: + .text start:0x800D6C00 end:0x800D70E0 + +dolphin/card/CARDNet.c: + .text start:0x800D70E0 end:0x800D71A4 + +dolphin/exi/EXIBios.c: + .text start:0x800D71A4 end:0x800D8A78 + .bss start:0x801A6ED8 end:0x801A6F98 + +dolphin/exi/EXIUart.c: + .text start:0x800D8A78 end:0x800D8CE8 + .sbss start:0x801D4608 end:0x801D4618 + +dolphin/si/SIBios.c: + .text start:0x800D8CE8 end:0x800DA3C8 + .data start:0x8013E0A0 end:0x8013E170 + .bss start:0x801A6F98 end:0x801A71A0 + .sbss start:0x801D4618 end:0x801D4628 + +dolphin/si/SISamplingRate.c: + .text start:0x800DA3C8 end:0x800DA4D0 + .data start:0x8013E170 end:0x8013E208 + .sbss start:0x801D4628 end:0x801D4640 + +dolphin/thp/THPDec.c: + .text start:0x800DA4D0 end:0x800E1A10 + .rodata start:0x8011E440 end:0x8011E4D0 + .bss start:0x801A71A0 end:0x801A72D0 + .sbss start:0x801D4640 end:0x801D4758 + .sdata2 start:0x801D64F0 end:0x801D6510 + +dolphin/thp/THPAudio.c: + .text start:0x800E1A10 end:0x800E1F40 + Runtime.PPCEABI.H/global_destructor_chain.c: .text start:0x800E2008 end:0x800E2068 .dtors start:0x8011DCE8 end:0x8011DCEC @@ -858,3 +944,6 @@ Runtime.PPCEABI.H/Gecko_ExceptionPPC.cp: .data start:0x8013E218 end:0x8013E300 .bss start:0x801A72D0 end:0x801A72E0 .sdata start:0x801D39B8 end:0x801D39C8 + +game/kerent.c: + .text start:0x8011CCC4 end:0x8011DCA8 diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 81ce66bb..227e0b18 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -664,7 +664,7 @@ MGSeqSetParam = .text:0x80035968; // type:function size:0x4C MGSeqKill = .text:0x800359B4; // type:function size:0x58 MGSeqKillAll = .text:0x80035A0C; // type:function size:0x3C MGSeqIsDone = .text:0x80035A48; // type:function size:0xA4 -MGSeqDummy_80035AEC = .text:0x80035AEC; // type:function size:0x4 +MGSeqStub = .text:0x80035AEC; // type:function size:0x4 MGSeqSprKill = .text:0x80035AF0; // type:function size:0x8C SeqInitTimer = .text:0x80035B7C; // type:function size:0x2E0 scope:local SeqUpdateTimer = .text:0x80035E5C; // type:function size:0x69C scope:local @@ -999,92 +999,92 @@ HuRestartSystem = .text:0x8005AE34; // type:function size:0xDC HuSoftResetCheck = .text:0x8005AF10; // type:function size:0xFC scope:local HuSoftResetCountCheck = .text:0x8005B00C; // type:function size:0xCC scope:local HuSoftResetPostProc = .text:0x8005B0D8; // type:function size:0x78 scope:local -fn_8005B150 = .text:0x8005B150; // type:function size:0x2E0 -fn_8005B430 = .text:0x8005B430; // type:function size:0x64 -fn_8005B494 = .text:0x8005B494; // type:function size:0x9C -fn_8005B530 = .text:0x8005B530; // type:function size:0xCC -fn_8005B5FC = .text:0x8005B5FC; // type:function size:0xAC +BoardInit = .text:0x8005B150; // type:function size:0x2E0 +InitBoardFunc = .text:0x8005B430; // type:function size:0x64 scope:local +ExecBoardFunc = .text:0x8005B494; // type:function size:0x9C scope:local +KillBoardFunc = .text:0x8005B530; // type:function size:0xCC scope:local +BoardKill = .text:0x8005B5FC; // type:function size:0xAC fn_8005B6A8 = .text:0x8005B6A8; // type:function size:0x48 -fn_8005B6F0 = .text:0x8005B6F0; // type:function size:0x74 -fn_8005B764 = .text:0x8005B764; // type:function size:0x48 -fn_8005B7AC = .text:0x8005B7AC; // type:function size:0x524 +BoardSetPauseEnable = .text:0x8005B6F0; // type:function size:0x74 +BoardGetPauseEnable = .text:0x8005B764; // type:function size:0x48 +BoardSetSave = .text:0x8005B7AC; // type:function size:0x524 fn_8005BCD0 = .text:0x8005BCD0; // type:function size:0x160 -fn_8005BE30 = .text:0x8005BE30; // type:function size:0x160 -fn_8005BF90 = .text:0x8005BF90; // type:function size:0xC -fn_8005BF9C = .text:0x8005BF9C; // type:function size:0x7D0 -fn_8005C76C = .text:0x8005C76C; // type:function size:0x8C -fn_8005C7F8 = .text:0x8005C7F8; // type:function size:0x28C -fn_8005CA84 = .text:0x8005CA84; // type:function size:0xC4 -fn_8005CB48 = .text:0x8005CB48; // type:function size:0x8C -fn_8005CBD4 = .text:0x8005CBD4; // type:function size:0x410 -fn_8005CFE4 = .text:0x8005CFE4; // type:function size:0x128 +BoardLoadConfig = .text:0x8005BE30; // type:function size:0x160 +DestroyBoardMainProc = .text:0x8005BF90; // type:function size:0xC scope:local +BoardMainProcFunc = .text:0x8005BF9C; // type:function size:0x7D0 scope:local +BoardTurnNext = .text:0x8005C76C; // type:function size:0x8C +BoardIsTurnCont = .text:0x8005C7F8; // type:function size:0x28C +BoardSetNextOvl = .text:0x8005CA84; // type:function size:0xC4 +BoardHasStarted = .text:0x8005CB48; // type:function size:0x8C +CreateBoard = .text:0x8005CBD4; // type:function size:0x410 scope:local +DestroyBoard = .text:0x8005CFE4; // type:function size:0x128 scope:local fn_8005D10C = .text:0x8005D10C; // type:function size:0xC fn_8005D118 = .text:0x8005D118; // type:function size:0x44 fn_8005D15C = .text:0x8005D15C; // type:function size:0x50 -fn_8005D1AC = .text:0x8005D1AC; // type:function size:0x3C -fn_8005D1E8 = .text:0x8005D1E8; // type:function size:0x48 -fn_8005D230 = .text:0x8005D230; // type:function size:0x54 -fn_8005D284 = .text:0x8005D284; // type:function size:0x2AC -fn_8005D530 = .text:0x8005D530; // type:function size:0x48 -fn_8005D578 = .text:0x8005D578; // type:function size:0x48 -fn_8005D5C0 = .text:0x8005D5C0; // type:function size:0x48 -fn_8005D608 = .text:0x8005D608; // type:function size:0x20 -fn_8005D628 = .text:0x8005D628; // type:function size:0xA8 -fn_8005D6D0 = .text:0x8005D6D0; // type:function size:0xBC -fn_8005D78C = .text:0x8005D78C; // type:function size:0x28 -fn_8005D7B4 = .text:0x8005D7B4; // type:function size:0x50 -fn_8005D804 = .text:0x8005D804; // type:function size:0x30 -fn_8005D834 = .text:0x8005D834; // type:function size:0xB4 -fn_8005D8E8 = .text:0x8005D8E8; // type:function size:0x40 -fn_8005D928 = .text:0x8005D928; // type:function size:0x44 -fn_8005D96C = .text:0x8005D96C; // type:function size:0x28 -fn_8005D994 = .text:0x8005D994; // type:function size:0x3C -fn_8005D9D0 = .text:0x8005D9D0; // type:function size:0x3C -fn_8005DA0C = .text:0x8005DA0C; // type:function size:0x28 -fn_8005DA34 = .text:0x8005DA34; // type:function size:0x28 -fn_8005DA5C = .text:0x8005DA5C; // type:function size:0x24 -fn_8005DA80 = .text:0x8005DA80; // type:function size:0x20 -fn_8005DAA0 = .text:0x8005DAA0; // type:function size:0x24 -fn_8005DAC4 = .text:0x8005DAC4; // type:function size:0x24 -fn_8005DAE8 = .text:0x8005DAE8; // type:function size:0x3C -fn_8005DB24 = .text:0x8005DB24; // type:function size:0x48 -fn_8005DB6C = .text:0x8005DB6C; // type:function size:0x230 -fn_8005DD9C = .text:0x8005DD9C; // type:function size:0x20 -fn_8005DDBC = .text:0x8005DDBC; // type:function size:0x2BC +BoardCameraBackup = .text:0x8005D1AC; // type:function size:0x3C +BoardCameraRestore = .text:0x8005D1E8; // type:function size:0x48 +BoardCameraScissorSet = .text:0x8005D230; // type:function size:0x54 +BoardCameraViewSet = .text:0x8005D284; // type:function size:0x2AC +BoardCameraPosGet = .text:0x8005D530; // type:function size:0x48 +BoardCameraTargetGet = .text:0x8005D578; // type:function size:0x48 +BoardCameraRotGet = .text:0x8005D5C0; // type:function size:0x48 +BoardCameraZoomGet = .text:0x8005D608; // type:function size:0x20 +BoardCameraDirGet = .text:0x8005D628; // type:function size:0xA8 +BoardCameraPointDirGet = .text:0x8005D6D0; // type:function size:0xBC +BoardCameraSet = .text:0x8005D78C; // type:function size:0x28 +BoardCameraVisibleSet = .text:0x8005D7B4; // type:function size:0x50 +BoardCameraOffsetSet = .text:0x8005D804; // type:function size:0x30 +BoardCameraTargetSetPlayer = .text:0x8005D834; // type:function size:0xB4 +BoardCameraTargetSetModel = .text:0x8005D8E8; // type:function size:0x40 +BoardCameraSTargetetSpace = .text:0x8005D928; // type:function size:0x44 +BoardCameraVecCalcFuncSet = .text:0x8005D96C; // type:function size:0x28 +BoardCameraQuakeSet = .text:0x8005D994; // type:function size:0x3C +BoardCameraQuakeReset = .text:0x8005D9D0; // type:function size:0x3C +BoardCameraTargetSet = .text:0x8005DA0C; // type:function size:0x28 +BoardCameraPosSet = .text:0x8005DA34; // type:function size:0x28 +BoardCameraAngleZoomSet = .text:0x8005DA5C; // type:function size:0x24 +BoardCameraZoomSet = .text:0x8005DA80; // type:function size:0x20 +BoardCameraAngleSet = .text:0x8005DAA0; // type:function size:0x24 +BoardCameraNearFarSet = .text:0x8005DAC4; // type:function size:0x24 +BoardCameraNearFarGet = .text:0x8005DAE8; // type:function size:0x3C +BoardCameraStartMotion = .text:0x8005DB24; // type:function size:0x48 +BoardCameraStartMotion2 = .text:0x8005DB6C; // type:function size:0x230 +BoardCameraFovSet = .text:0x8005DD9C; // type:function size:0x20 +BoardCameraCullCheck = .text:0x8005DDBC; // type:function size:0x2BC fn_8005E078 = .text:0x8005E078; // type:function size:0x48 fn_8005E0C0 = .text:0x8005E0C0; // type:function size:0x58 -fn_8005E118 = .text:0x8005E118; // type:function size:0x24C -fn_8005E364 = .text:0x8005E364; // type:function size:0x350 -fn_8005E6B4 = .text:0x8005E6B4; // type:function size:0xE4 -fn_8005E798 = .text:0x8005E798; // type:function size:0x764 -fn_8005EEFC = .text:0x8005EEFC; // type:function size:0x48 -fn_8005EF44 = .text:0x8005EF44; // type:function size:0x48 -fn_8005EF8C = .text:0x8005EF8C; // type:function size:0x170 -fn_8005F0FC = .text:0x8005F0FC; // type:function size:0x60 -fn_8005F15C = .text:0x8005F15C; // type:function size:0xC4 -fn_8005F220 = .text:0x8005F220; // type:function size:0x74 -fn_8005F294 = .text:0x8005F294; // type:function size:0x28 -fn_8005F2BC = .text:0x8005F2BC; // type:function size:0x28 -fn_8005F2E4 = .text:0x8005F2E4; // type:function size:0x48 -fn_8005F32C = .text:0x8005F32C; // type:function size:0x10C +BoardCameraInit = .text:0x8005E118; // type:function size:0x24C +BoardCameraUpdate = .text:0x8005E364; // type:function size:0x350 +BoardCameraCalcTarget = .text:0x8005E6B4; // type:function size:0xE4 +BoardCameraCalcVec = .text:0x8005E798; // type:function size:0x764 +BoardMGDoneFlagSet = .text:0x8005EEFC; // type:function size:0x48 +BoardMGDoneFlagGet = .text:0x8005EF44; // type:function size:0x48 +BoardMGExit = .text:0x8005EF8C; // type:function size:0x170 +BoardMGKill = .text:0x8005F0FC; // type:function size:0x60 +BoardMGExec = .text:0x8005F15C; // type:function size:0xC4 +BoardMGCreate = .text:0x8005F220; // type:function size:0x74 +BoardMGStartFlagSet = .text:0x8005F294; // type:function size:0x28 +BoardMGStartFlagReset = .text:0x8005F2BC; // type:function size:0x28 +BoardMGStartFlagGet = .text:0x8005F2E4; // type:function size:0x48 +BoardMTXCalcLookAt = .text:0x8005F32C; // type:function size:0x10C fn_8005F438 = .text:0x8005F438; // type:function size:0x330 fn_8005F768 = .text:0x8005F768; // type:function size:0x390 -fn_8005FAF8 = .text:0x8005FAF8; // type:function size:0x24 -fn_8005FB1C = .text:0x8005FB1C; // type:function size:0x24 -fn_8005FB40 = .text:0x8005FB40; // type:function size:0x50 -fn_8005FB90 = .text:0x8005FB90; // type:function size:0x58 -fn_8005FBE8 = .text:0x8005FBE8; // type:function size:0x134 -fn_8005FD1C = .text:0x8005FD1C; // type:function size:0x15C -fn_8005FE78 = .text:0x8005FE78; // type:function size:0x7C -fn_8005FEF4 = .text:0x8005FEF4; // type:function size:0x34 -fn_8005FF28 = .text:0x8005FF28; // type:function size:0x1C0 -fn_800600E8 = .text:0x800600E8; // type:function size:0x6C -fn_80060154 = .text:0x80060154; // type:function size:0xD4 -fn_80060228 = .text:0x80060228; // type:function size:0x174 -fn_8006039C = .text:0x8006039C; // type:function size:0x5C -fn_800603F8 = .text:0x800603F8; // type:function size:0x34 -fn_8006042C = .text:0x8006042C; // type:function size:0x178 -fn_800605A4 = .text:0x800605A4; // type:function size:0x350 +BoardRandInit = .text:0x8005FAF8; // type:function size:0x24 +BoardRand = .text:0x8005FB1C; // type:function size:0x24 +BoardRandMod = .text:0x8005FB40; // type:function size:0x50 +BoardRandFloat = .text:0x8005FB90; // type:function size:0x58 +BoardVecMagXZCalc = .text:0x8005FBE8; // type:function size:0x134 +BoardVecMagXZCheck = .text:0x8005FD1C; // type:function size:0x15C +BoardVecCalcDAngleVec = .text:0x8005FE78; // type:function size:0x7C +BoardVecCalcDAngle = .text:0x8005FEF4; // type:function size:0x34 +BoardVecCalcDAngleMod = .text:0x8005FF28; // type:function size:0x1C0 +BoardVecMag2Check = .text:0x800600E8; // type:function size:0x6C +BoardFilterFadeOut = .text:0x80060154; // type:function size:0xD4 +BoardFilterFadeIn = .text:0x80060228; // type:function size:0x174 +BoardFilterFadeIsDone = .text:0x8006039C; // type:function size:0x5C +BoardFilterFadeAlive = .text:0x800603F8; // type:function size:0x34 +BoardFilterFadeUpdate = .text:0x8006042C; // type:function size:0x178 +BoardFilterFadeDraw = .text:0x800605A4; // type:function size:0x350 fn_800608F4 = .text:0x800608F4; // type:function size:0x164 fn_80060A58 = .text:0x80060A58; // type:function size:0x24 fn_80060A7C = .text:0x80060A7C; // type:function size:0x88 @@ -1092,9 +1092,9 @@ fn_80060B04 = .text:0x80060B04; // type:function size:0xB8 fn_80060BBC = .text:0x80060BBC; // type:function size:0x564 fn_80061120 = .text:0x80061120; // type:function size:0x14C fn_8006126C = .text:0x8006126C; // type:function size:0x254 -fn_800614C0 = .text:0x800614C0; // type:function size:0x2B4 -fn_80061774 = .text:0x80061774; // type:function size:0x2AC -fn_80061A20 = .text:0x80061A20; // type:function size:0xAC +BoardTurnRemainInit = .text:0x800614C0; // type:function size:0x2B4 +BoardTurnRemainUpdate = .text:0x80061774; // type:function size:0x2AC +BoardTurnRemainHide = .text:0x80061A20; // type:function size:0xAC fn_80061ACC = .text:0x80061ACC; // type:function size:0x80 fn_80061B4C = .text:0x80061B4C; // type:function size:0x54 fn_80061BA0 = .text:0x80061BA0; // type:function size:0x3A4 @@ -1104,7 +1104,7 @@ fn_80061FC4 = .text:0x80061FC4; // type:function size:0xC fn_80061FD0 = .text:0x80061FD0; // type:function size:0xC fn_80061FDC = .text:0x80061FDC; // type:function size:0x78 fn_80062054 = .text:0x80062054; // type:function size:0x78 -fn_800620CC = .text:0x800620CC; // type:function size:0x80 +BoardPlayerIsAllCom = .text:0x800620CC; // type:function size:0x80 fn_8006214C = .text:0x8006214C; // type:function size:0x16C fn_800622B8 = .text:0x800622B8; // type:function size:0x588 fn_80062840 = .text:0x80062840; // type:function size:0xFC @@ -1289,32 +1289,32 @@ fn_8006F8A8 = .text:0x8006F8A8; // type:function size:0x9C fn_8006F944 = .text:0x8006F944; // type:function size:0x178 fn_8006FABC = .text:0x8006FABC; // type:function size:0x194 fn_8006FC50 = .text:0x8006FC50; // type:function size:0x12C -fn_8006FD7C = .text:0x8006FD7C; // type:function size:0x24 -fn_8006FDA0 = .text:0x8006FDA0; // type:function size:0x34 -fn_8006FDD4 = .text:0x8006FDD4; // type:function size:0x24 -fn_8006FDF8 = .text:0x8006FDF8; // type:function size:0x6C -fn_8006FE64 = .text:0x8006FE64; // type:function size:0x514 +BoardWinInit = .text:0x8006FD7C; // type:function size:0x24 +lbl_8006FDA0 = .text:0x8006FDA0; // type:function size:0x34 +BoardWinKillAll = .text:0x8006FDD4; // type:function size:0x24 +BoardWinDestroy = .text:0x8006FDF8; // type:function size:0x6C +BoardWinProc = .text:0x8006FE64; // type:function size:0x514 BoardWinChoiceGet = .text:0x80070378; // type:function size:0xC -fn_80070384 = .text:0x80070384; // type:function size:0xC -fn_80070390 = .text:0x80070390; // type:function size:0x1A0 +BoardWinPause = .text:0x80070384; // type:function size:0xC +BoardWinCreateChoice = .text:0x80070390; // type:function size:0x1A0 BoardWinCreate = .text:0x80070530; // type:function size:0x1A0 -fn_800706D0 = .text:0x800706D0; // type:function size:0x18 +BoardWinInsertMesSet = .text:0x800706D0; // type:function size:0x18 BoardWinWait = .text:0x800706E8; // type:function size:0x50 BoardWinKill = .text:0x80070738; // type:function size:0x38 -fn_80070770 = .text:0x80070770; // type:function size:0x48 -fn_800707B8 = .text:0x800707B8; // type:function size:0x48 -fn_80070800 = .text:0x80070800; // type:function size:0x1C -fn_8007081C = .text:0x8007081C; // type:function size:0xC -fn_80070828 = .text:0x80070828; // type:function size:0x64 -fn_8007088C = .text:0x8007088C; // type:function size:0x50 -fn_800708DC = .text:0x800708DC; // type:function size:0x38 -fn_80070914 = .text:0x80070914; // type:function size:0x44 -fn_80070958 = .text:0x80070958; // type:function size:0x38 -fn_80070990 = .text:0x80070990; // type:function size:0x38 -fn_800709C8 = .text:0x800709C8; // type:function size:0x38 -fn_80070A00 = .text:0x80070A00; // type:function size:0x168 -fn_80070B68 = .text:0x80070B68; // type:function size:0x214 -fn_80070D7C = .text:0x80070D7C; // type:function size:0x8 +BoardWinSetAttr = .text:0x80070770; // type:function size:0x48 +BoardWinResetAttr = .text:0x800707B8; // type:function size:0x48 +BoardWinChoiceDisable = .text:0x80070800; // type:function size:0x1C +BoardWinKeyWait = .text:0x8007081C; // type:function size:0xC +BoardWinSpeedGet = .text:0x80070828; // type:function size:0x64 +BoardWinSpeedSet = .text:0x8007088C; // type:function size:0x50 +BoardWinChoiceNowGet = .text:0x800708DC; // type:function size:0x38 +BoardWinPriSet = .text:0x80070914; // type:function size:0x44 +BoardWinChoiceNowGet2 = .text:0x80070958; // type:function size:0x38 +BoardWinPortraitGet = .text:0x80070990; // type:function size:0x38 +BoardWinPortraitGetStar = .text:0x800709C8; // type:function size:0x38 +BoardWinPlayerSet = .text:0x80070A00; // type:function size:0x168 +BoardWinStartComKeySet = .text:0x80070B68; // type:function size:0x214 +BoardWinComKeyFuncSet = .text:0x80070D7C; // type:function size:0x8 fn_80070D84 = .text:0x80070D84; // type:function size:0x68 fn_80070DEC = .text:0x80070DEC; // type:function size:0xD0 fn_80070EBC = .text:0x80070EBC; // type:function size:0x2C @@ -4652,7 +4652,8 @@ lbl_8011E3D0 = .rodata:0x8011E3D0; // type:object size:0x20 data:4byte lbl_8011E3F0 = .rodata:0x8011E3F0; // type:object size:0x20 data:4byte lbl_8011E410 = .rodata:0x8011E410; // type:object size:0x20 data:4byte lbl_8011E430 = .rodata:0x8011E430; // type:object size:0x10 data:4byte -lbl_8011E440 = .rodata:0x8011E440; // type:object size:0x90 data:byte +__THPJpegNaturalOrder = .rodata:0x8011E440; // type:object size:0x50 data:byte +__THPAANScaleFactor = .rodata:0x8011E490; // type:object size:0x40 data:byte lbl_8011E4D0 = .rodata:0x8011E4D0; // type:object size:0x10 lbl_8011E4E0 = .rodata:0x8011E4E0; // type:object size:0x10 lbl_8011E4F0 = .rodata:0x8011E4F0; // type:object size:0x18 data:double @@ -5138,11 +5139,11 @@ jumptable_80139720 = .data:0x80139720; // type:object size:0x34 scope:local bmpMes$493 = .data:0x80139754; // type:object size:0x18 scope:local lbl_8013976C = .data:0x8013976C; // type:object size:0x13 data:string lbl_8013977F = .data:0x8013977F; // type:object size:0x19 -lbl_80139798 = .data:0x80139798; // type:object size:0x24 +camViewTbl = .data:0x80139798; // type:object size:0x24 scope:local jumptable_801397BC = .data:0x801397BC; // type:object size:0x24 scope:local lbl_801397E0 = .data:0x801397E0; // type:object size:0x48 -lbl_80139828 = .data:0x80139828; // type:object size:0xC -lbl_80139834 = .data:0x80139834; // type:object size:0x30 +turnRemainSprTbl = .data:0x80139828; // type:object size:0xC scope:local +turnRemainSprPosTbl = .data:0x80139834; // type:object size:0x30 scope:local lbl_80139864 = .data:0x80139864; // type:object size:0x10 lbl_80139874 = .data:0x80139874; // type:object size:0x24 lbl_80139898 = .data:0x80139898; // type:object size:0x10 @@ -5158,8 +5159,8 @@ lbl_8013993C = .data:0x8013993C; // type:object size:0xA0 lbl_801399DC = .data:0x801399DC; // type:object size:0x20 lbl_801399FC = .data:0x801399FC; // type:object size:0x74 lbl_80139A70 = .data:0x80139A70; // type:object size:0x30 -lbl_80139AA0 = .data:0x80139AA0; // type:object size:0x24 -lbl_80139AC4 = .data:0x80139AC4; // type:object size:0x24 +PortraitTbl = .data:0x80139AA0; // type:object size:0x24 scope:local +StarPortraitTbl = .data:0x80139AC4; // type:object size:0x24 scope:local lbl_80139AE8 = .data:0x80139AE8; // type:object size:0x18 COMItemWeightTbl = .data:0x80139B00; // type:object size:0x60 scope:local COMItemUseCheckFuncTbl = .data:0x80139B60; // type:object size:0x38 scope:local @@ -5330,13 +5331,14 @@ p2f$194 = .data:0x8013DD80; // type:object size:0x20 scope:local jumptable_8013DDA0 = .data:0x8013DDA0; // type:object size:0x5C scope:local jumptable_8013DDFC = .data:0x8013DDFC; // type:object size:0x90 scope:local jumptable_8013DE8C = .data:0x8013DE8C; // type:object size:0x5C scope:local -lbl_8013DEE8 = .data:0x8013DEE8; // type:object size:0x18 -lbl_8013DF00 = .data:0x8013DF00; // type:object size:0x160 -lbl_8013E060 = .data:0x8013E060; // type:object size:0x20 -lbl_8013E080 = .data:0x8013E080; // type:object size:0x20 +ResetFunctionInfo = .data:0x8013DEE8; // type:object size:0x10 scope:local +CardData = .data:0x8013DF00; // type:object size:0x160 scope:local align:32 +SectorSizeTable = .data:0x8013E060; // type:object size:0x20 scope:local +LatencyTable = .data:0x8013E080; // type:object size:0x20 scope:local Si = .data:0x8013E0A0; // type:object size:0x14 scope:local data:4byte Type = .data:0x8013E0B4; // type:object size:0x10 scope:local XYNTSC = .data:0x8013E170; // type:object size:0x30 scope:local +XYPAL = .data:0x8013E1A0; // type:object size:0x30 scope:local lbl_8013E208 = .data:0x8013E208; // type:object size:0x10 jumptable_8013E218 = .data:0x8013E218; // type:object size:0x44 scope:local jumptable_8013E25C = .data:0x8013E25C; // type:object size:0x44 scope:local @@ -5493,13 +5495,13 @@ padStat$377 = .bss:0x8019C460; // type:object size:0x30 scope:local ToeMessageArray = .bss:0x8019C490; // type:object size:0x40 scope:local ToeThread = .bss:0x8019C4D0; // type:object size:0x310 scope:local align:8 ToeThreadStack = .bss:0x8019C7E0; // type:object size:0x1000 scope:local -lbl_8019D7E0 = .bss:0x8019D7E0; // type:object size:0xC4 data:byte -lbl_8019D8A4 = .bss:0x8019D8A4; // type:object size:0xC4 +boardCamera = .bss:0x8019D7E0; // type:object size:0xC4 data:byte +boardCameraBackup = .bss:0x8019D8A4; // type:object size:0xC4 lbl_8019D968 = .bss:0x8019D968; // type:object size:0x10 lbl_8019D978 = .bss:0x8019D978; // type:object size:0x10 lbl_8019D988 = .bss:0x8019D988; // type:object size:0x10 -lbl_8019D998 = .bss:0x8019D998; // type:object size:0x20 -lbl_8019D9B8 = .bss:0x8019D9B8; // type:object size:0x40 +winInsertMesTbl = .bss:0x8019D998; // type:object size:0x20 scope:local +choiceDisableTbl = .bss:0x8019D9B8; // type:object size:0x40 scope:local lbl_8019D9F8 = .bss:0x8019D9F8; // type:object size:0xC data:float lbl_8019DA04 = .bss:0x8019DA04; // type:object size:0xC data:4byte SpaceData = .bss:0x8019DA10; // type:object size:0x7000 scope:local data:float @@ -5569,18 +5571,25 @@ Origin = .bss:0x801A61C0; // type:object size:0x1E scope:local CmdProbeDevice = .bss:0x801A61F0; // type:object size:0x10 scope:local gxData = .bss:0x801A6200; // type:object size:0x4F8 scope:local FifoObj = .bss:0x801A66F8; // type:object size:0x80 -lbl_801A6778 = .bss:0x801A6778; // type:object size:0x520 data:4byte -lbl_801A6C98 = .bss:0x801A6C98; // type:object size:0x220 data:4byte -lbl_801A6EB8 = .bss:0x801A6EB8; // type:object size:0x20 +DisplayListFifo = .bss:0x801A6778; // type:object size:0x24 scope:local data:4byte +__savedGXdata = .bss:0x801A679C; // type:object size:0x4F8 scope:local data:4byte +__CARDBlock = .bss:0x801A6C98; // type:object size:0x220 data:4byte +__CARDDiskNone = .bss:0x801A6EB8; // type:object size:0x20 Ecb = .bss:0x801A6ED8; // type:object size:0xC0 scope:local data:4byte -Packet = .bss:0x801A6F98; // type:object size:0x80 scope:local data:4byte -lbl_801A7018 = .bss:0x801A7018; // type:object size:0xA0 -TypeTime = .bss:0x801A70B8; // type:object size:0x20 scope:local -lbl_801A70D8 = .bss:0x801A70D8; // type:object size:0x20 -lbl_801A70F8 = .bss:0x801A70F8; // type:object size:0x40 -lbl_801A7138 = .bss:0x801A7138; // type:object size:0x68 data:4byte -lbl_801A71A0 = .bss:0x801A71A0; // type:object size:0x118 -lbl_801A72B8 = .bss:0x801A72B8; // type:object size:0x18 data:4byte +Packet = .bss:0x801A6F98; // type:object size:0x80 scope:local align:8 data:4byte +Alarm = .bss:0x801A7018; // type:object size:0xA0 scope:local align:8 +TypeTime = .bss:0x801A70B8; // type:object size:0x20 scope:local align:8 +XferTime = .bss:0x801A70D8; // type:object size:0x20 scope:local align:8 +TypeCallback = .bss:0x801A70F8; // type:object size:0x40 scope:local +RDSTHandler = .bss:0x801A7138; // type:object size:0x10 scope:local data:4byte +InputBufferValid = .bss:0x801A7148; // type:object size:0x10 scope:local data:4byte +InputBuffer = .bss:0x801A7158; // type:object size:0x20 scope:local data:4byte +InputBufferVcount = .bss:0x801A7178; // type:object size:0x10 scope:local data:4byte +cmdFixDevice$327 = .bss:0x801A7188; // type:object size:0x10 scope:local data:4byte +__THPIDCTWorkspace = .bss:0x801A71A0; // type:object size:0x100 scope:local align:32 +__THPLCWork512 = .bss:0x801A72A0; // type:object size:0xC scope:local +__THPLCWork640 = .bss:0x801A72AC; // type:object size:0xC scope:local +__THPMCUBuffer = .bss:0x801A72B8; // type:object size:0x18 scope:local data:4byte fragmentinfo = .bss:0x801A72D0; // type:object size:0xC scope:local data:4byte __atexit_funcs = .bss:0x801A72E0; // type:object size:0x100 scope:local stderr_buff = .bss:0x801A73E0; // type:object size:0x38 data:4byte @@ -5741,7 +5750,7 @@ lbl_801D35D0 = .sdata:0x801D35D0; // type:object size:0x8 lbl_801D35D8 = .sdata:0x801D35D8; // type:object size:0x8 colorN$400 = .sdata:0x801D35E0; // type:object size:0x4 data:byte colorN$444 = .sdata:0x801D35E4; // type:object size:0x4 data:byte -winPrio = .sdata:0x801D35E8; // type:object size:0x8 data:2byte +winPrio = .sdata:0x801D35E8; // type:object size:0x8 scope:local data:2byte lbl_801D35F0 = .sdata:0x801D35F0; // type:object size:0x8 lbl_801D35F8 = .sdata:0x801D35F8; // type:object size:0x8 lbl_801D3600 = .sdata:0x801D3600; // type:object size:0x8 @@ -5758,15 +5767,12 @@ SaveEnableF = .sdata:0x801D3640; // type:object size:0x4 data:4byte lbl_801D3644 = .sdata:0x801D3644; // type:object size:0x2 data:string lbl_801D3646 = .sdata:0x801D3646; // type:object size:0x2 data:string SlotNameTbl = .sdata:0x801D3648; // type:object size:0x8 scope:local -saveMessWin = .sdata:0x801D3650; // type:object size:0x8 scope:local data:4byte +saveMessWin = .sdata:0x801D3650; // type:object size:0x4 scope:local data:4byte SR_PushTime = .sdata:0x801D3658; // type:object size:0x8 scope:local data:2byte SR_ResetPad = .sdata:0x801D3660; // type:object size:0x1 scope:local data:byte Xfb = .sdata:0x801D3664; // type:object size:0x8 scope:local data:4byte -lbl_801D3670 = .sdata:0x801D3670; // type:object size:0x4 data:4byte -lbl_801D3674 = .sdata:0x801D3674; // type:object size:0x1 data:byte -lbl_801D3675 = .sdata:0x801D3675; // type:object size:0x1 data:byte -lbl_801D3676 = .sdata:0x801D3676; // type:object size:0x1 data:byte -lbl_801D3677 = .sdata:0x801D3677; // type:object size:0x1 data:byte +boardNextScene = .sdata:0x801D3670; // type:object size:0x4 scope:local data:4byte +filterColor = .sdata:0x801D3674; // type:object size:0x4 scope:local data:byte lbl_801D3678 = .sdata:0x801D3678; // type:object size:0x8 lbl_801D3680 = .sdata:0x801D3680; // type:object size:0x2 data:2byte lbl_801D3682 = .sdata:0x801D3682; // type:object size:0x2 data:2byte @@ -5785,7 +5791,7 @@ lbl_801D36C0 = .sdata:0x801D36C0; // type:object size:0x6 data:string lbl_801D36C6 = .sdata:0x801D36C6; // type:object size:0x6 data:string lbl_801D36CC = .sdata:0x801D36CC; // type:object size:0x6 data:string lbl_801D36D2 = .sdata:0x801D36D2; // type:object size:0xE -lbl_801D36E0 = .sdata:0x801D36E0; // type:object size:0x8 data:2byte +windowID = .sdata:0x801D36E0; // type:object size:0x2 scope:local data:2byte lbl_801D36E8 = .sdata:0x801D36E8; // type:object size:0x8 data:4byte lbl_801D36F0 = .sdata:0x801D36F0; // type:object size:0x8 data:byte lbl_801D36F8 = .sdata:0x801D36F8; // type:object size:0x2 data:2byte @@ -6240,25 +6246,25 @@ trychkBusyWait = .sbss:0x801D3EC4; // type:object size:0x4 scope:local data:4byt XfbProg = .sbss:0x801D3EC8; // type:object size:0x4 scope:local data:4byte XfbH = .sbss:0x801D3ECC; // type:object size:0x2 scope:local data:2byte XfbW = .sbss:0x801D3ECE; // type:object size:0x2 scope:local data:2byte -lbl_801D3ED0 = .sbss:0x801D3ED0; // type:object size:0x4 data:4byte -lbl_801D3ED4 = .sbss:0x801D3ED4; // type:object size:0x4 data:4byte -lbl_801D3ED8 = .sbss:0x801D3ED8; // type:object size:0x4 data:4byte +boardMainProc = .sbss:0x801D3ED0; // type:object size:0x4 data:4byte +boardObjMan = .sbss:0x801D3ED4; // type:object size:0x4 data:4byte +boardCameraObj = .sbss:0x801D3ED8; // type:object size:0x4 data:4byte lbl_801D3EDC = .sbss:0x801D3EDC; // type:object size:0x4 data:4byte -lbl_801D3EE0 = .sbss:0x801D3EE0; // type:object size:0x4 data:4byte -lbl_801D3EE4 = .sbss:0x801D3EE4; // type:object size:0x4 data:4byte -lbl_801D3EE8 = .sbss:0x801D3EE8; // type:object size:0x4 data:4byte +boardCameraUseBackup = .sbss:0x801D3EE0; // type:object size:0x4 data:4byte +boardCreateFunc = .sbss:0x801D3EE4; // type:object size:0x4 scope:local data:4byte +boardDestroyFunc = .sbss:0x801D3EE8; // type:object size:0x4 scope:local data:4byte lbl_801D3EEC = .sbss:0x801D3EEC; // type:object size:0x4 data:4byte lbl_801D3EF0 = .sbss:0x801D3EF0; // type:object size:0x4 data:4byte -lbl_801D3EF4 = .sbss:0x801D3EF4; // type:object size:0x4 data:4byte +boardTurnFunc = .sbss:0x801D3EF4; // type:object size:0x4 data:4byte lbl_801D3EF8 = .sbss:0x801D3EF8; // type:object size:0x4 data:4byte lbl_801D3EFC = .sbss:0x801D3EFC; // type:object size:0x4 data:4byte lbl_801D3F00 = .sbss:0x801D3F00; // type:object size:0x4 data:4byte -lbl_801D3F04 = .sbss:0x801D3F04; // type:object size:0x4 data:4byte -lbl_801D3F08 = .sbss:0x801D3F08; // type:object size:0x4 data:4byte +boardPlayerEffect = .sbss:0x801D3F04; // type:object size:0x4 data:4byte +boardFilterObj = .sbss:0x801D3F08; // type:object size:0x4 data:4byte lbl_801D3F0C = .sbss:0x801D3F0C; // type:object size:0x4 data:4byte -lbl_801D3F10 = .sbss:0x801D3F10; // type:object size:0x4 data:4byte +boardTurnRemainObj = .sbss:0x801D3F10; // type:object size:0x4 data:4byte boardRandSeed = .sbss:0x801D3F14; // type:object size:0x4 data:4byte -lbl_801D3F18 = .sbss:0x801D3F18; // type:object size:0x8 data:4byte +boardMainObj = .sbss:0x801D3F18; // type:object size:0x8 data:4byte lbl_801D3F20 = .sbss:0x801D3F20; // type:object size:0x4 data:4byte lbl_801D3F24 = .sbss:0x801D3F24; // type:object size:0x4 data:4byte lbl_801D3F28 = .sbss:0x801D3F28; // type:object size:0x4 data:4byte @@ -6273,21 +6279,21 @@ lbl_801D3F4E = .sbss:0x801D3F4E; // type:object size:0xA lbl_801D3F58 = .sbss:0x801D3F58; // type:object size:0x4 data:4byte lbl_801D3F5C = .sbss:0x801D3F5C; // type:object size:0x4 data:4byte lbl_801D3F60 = .sbss:0x801D3F60; // type:object size:0x8 data:2byte -lbl_801D3F68 = .sbss:0x801D3F68; // type:object size:0x4 data:4byte -lbl_801D3F6C = .sbss:0x801D3F6C; // type:object size:0x4 data:4byte +winProc = .sbss:0x801D3F68; // type:object size:0x4 scope:local data:4byte +comKeyFunc = .sbss:0x801D3F6C; // type:object size:0x4 scope:local data:4byte lbl_801D3F70 = .sbss:0x801D3F70; // type:object size:0x8 data:float -lbl_801D3F78 = .sbss:0x801D3F78; // type:object size:0x4 data:4byte -lbl_801D3F7C = .sbss:0x801D3F7C; // type:object size:0x4 data:4byte -lbl_801D3F80 = .sbss:0x801D3F80; // type:object size:0x2 data:2byte -lbl_801D3F82 = .sbss:0x801D3F82; // type:object size:0x2 data:2byte -lbl_801D3F84 = .sbss:0x801D3F84; // type:object size:0x2 data:2byte -lbl_801D3F86 = .sbss:0x801D3F86; // type:object size:0x1 data:byte -lbl_801D3F87 = .sbss:0x801D3F87; // type:object size:0x1 data:byte -lbl_801D3F88 = .sbss:0x801D3F88; // type:object size:0x1 data:byte -lbl_801D3F89 = .sbss:0x801D3F89; // type:object size:0x1 data:byte -lbl_801D3F8A = .sbss:0x801D3F8A; // type:object size:0x1 data:byte -lbl_801D3F8B = .sbss:0x801D3F8B; // type:object size:0x1 data:byte -lbl_801D3F8C = .sbss:0x801D3F8C; // type:object size:0x1 data:byte +winAttr = .sbss:0x801D3F78; // type:object size:0x4 scope:local data:4byte +winMess = .sbss:0x801D3F7C; // type:object size:0x4 scope:local data:4byte +defaultChoice = .sbss:0x801D3F80; // type:object size:0x2 scope:local data:2byte +messSpeed = .sbss:0x801D3F82; // type:object size:0x2 scope:local data:2byte +winPrio = .sbss:0x801D3F84; // type:object size:0x2 scope:local data:2byte +winWait = .sbss:0x801D3F86; // type:object size:0x1 scope:local data:byte +winPause = .sbss:0x801D3F87; // type:object size:0x1 scope:local data:byte +disablePlayer = .sbss:0x801D3F88; // type:object size:0x1 scope:local data:byte +winPosIdx = .sbss:0x801D3F89; // type:object size:0x1 scope:local data:byte +winFrame = .sbss:0x801D3F8A; // type:object size:0x1 scope:local data:byte +autoPickF = .sbss:0x801D3F8B; // type:object size:0x1 scope:local data:byte +winChoice = .sbss:0x801D3F8C; // type:object size:0x1 scope:local data:byte lbl_801D3F90 = .sbss:0x801D3F90; // type:object size:0x8 lbl_801D3F98 = .sbss:0x801D3F98; // type:object size:0x4 data:4byte lbl_801D3F9C = .sbss:0x801D3F9C; // type:object size:0x1 data:byte @@ -6694,32 +6700,32 @@ TokenCB = .sbss:0x801D45E8; // type:object size:0x4 scope:local data:4byte DrawDoneCB = .sbss:0x801D45EC; // type:object size:0x4 scope:local data:4byte DrawDone = .sbss:0x801D45F0; // type:object size:0x1 scope:local data:byte FinishQueue = .sbss:0x801D45F4; // type:object size:0x8 scope:local -lbl_801D4600 = .sbss:0x801D4600; // type:object size:0x8 data:4byte -lbl_801D4608 = .sbss:0x801D4608; // type:object size:0x4 data:4byte -lbl_801D460C = .sbss:0x801D460C; // type:object size:0x4 data:4byte -lbl_801D4610 = .sbss:0x801D4610; // type:object size:0x4 data:4byte -lbl_801D4614 = .sbss:0x801D4614; // type:object size:0x4 data:4byte -lbl_801D4618 = .sbss:0x801D4618; // type:object size:0x4 +OldCPUFifo = .sbss:0x801D4600; // type:object size:0x4 scope:local data:4byte +Chan = .sbss:0x801D4608; // type:object size:0x4 scope:local data:4byte +Dev = .sbss:0x801D460C; // type:object size:0x4 scope:local data:4byte +Enabled = .sbss:0x801D4610; // type:object size:0x4 scope:local data:4byte +BarnacleEnabled = .sbss:0x801D4614; // type:object size:0x4 scope:local data:4byte +cmdTypeAndStatus$78 = .sbss:0x801D4618; // type:object size:0x4 scope:local cmdTypeAndStatus$371 = .sbss:0x801D461C; // type:object size:0x4 scope:local -lbl_801D4620 = .sbss:0x801D4620; // type:object size:0x8 data:4byte +__PADFixBits = .sbss:0x801D4620; // type:object size:0x8 data:4byte SamplingRate = .sbss:0x801D4628; // type:object size:0x4 scope:local data:4byte -lbl_801D4640 = .sbss:0x801D4640; // type:object size:0x20 data:4byte -lbl_801D4660 = .sbss:0x801D4660; // type:object size:0x20 data:4byte -lbl_801D4680 = .sbss:0x801D4680; // type:object size:0x20 data:4byte -lbl_801D46A0 = .sbss:0x801D46A0; // type:object size:0x20 data:4byte -lbl_801D46C0 = .sbss:0x801D46C0; // type:object size:0x20 data:4byte -lbl_801D46E0 = .sbss:0x801D46E0; // type:object size:0x4 data:4byte -lbl_801D46E4 = .sbss:0x801D46E4; // type:object size:0x4 data:4byte -lbl_801D46E8 = .sbss:0x801D46E8; // type:object size:0x4 data:4byte -lbl_801D46EC = .sbss:0x801D46EC; // type:object size:0x14 data:4byte -lbl_801D4700 = .sbss:0x801D4700; // type:object size:0x20 data:4byte -lbl_801D4720 = .sbss:0x801D4720; // type:object size:0x20 data:4byte -lbl_801D4740 = .sbss:0x801D4740; // type:object size:0x4 data:4byte -lbl_801D4744 = .sbss:0x801D4744; // type:object size:0x4 data:4byte -lbl_801D4748 = .sbss:0x801D4748; // type:object size:0x4 data:4byte -lbl_801D474C = .sbss:0x801D474C; // type:object size:0x4 data:4byte -lbl_801D4750 = .sbss:0x801D4750; // type:object size:0x4 data:4byte -lbl_801D4754 = .sbss:0x801D4754; // type:object size:0x4 data:4byte +Ydchuff = .sbss:0x801D4640; // type:object size:0x4 scope:local align:32 data:4byte +Udchuff = .sbss:0x801D4660; // type:object size:0x4 scope:local align:32 data:4byte +Vdchuff = .sbss:0x801D4680; // type:object size:0x4 scope:local align:32 data:4byte +Yachuff = .sbss:0x801D46A0; // type:object size:0x4 scope:local align:32 data:4byte +Uachuff = .sbss:0x801D46C0; // type:object size:0x4 scope:local align:32 data:4byte +Vachuff = .sbss:0x801D46E0; // type:object size:0x4 scope:local align:32 data:4byte +__THPHuffmanBits = .sbss:0x801D46E4; // type:object size:0x4 scope:local data:4byte +__THPHuffmanSizeTab = .sbss:0x801D46E8; // type:object size:0x4 scope:local data:4byte +__THPHuffmanCodeTab = .sbss:0x801D46EC; // type:object size:0x4 scope:local data:4byte +Gbase = .sbss:0x801D4700; // type:object size:0x20 align:32 data:4byte +Gwid = .sbss:0x801D4720; // type:object size:0x20 align:32 data:4byte +Gq = .sbss:0x801D4740; // type:object size:0x4 scope:local align:32 data:4byte +__THPOldGQR5 = .sbss:0x801D4744; // type:object size:0x4 scope:local data:4byte +__THPOldGQR6 = .sbss:0x801D4748; // type:object size:0x4 scope:local data:4byte +__THPWorkArea = .sbss:0x801D474C; // type:object size:0x4 scope:local data:4byte +__THPInfo = .sbss:0x801D4750; // type:object size:0x4 scope:local data:4byte +__THPInitFlag = .sbss:0x801D4754; // type:object size:0x4 scope:local data:4byte __global_destructor_chain = .sbss:0x801D4758; // type:object size:0x4 scope:global data:4byte __aborting = .sbss:0x801D4760; // type:object size:0x4 scope:global data:4byte __atexit_curr_func = .sbss:0x801D4764; // type:object size:0x4 scope:local data:4byte diff --git a/configure.py b/configure.py index 55289681..90bde830 100644 --- a/configure.py +++ b/configure.py @@ -268,21 +268,22 @@ config.libs = [ Object(Matching, "game/wipe.c"), Object(Matching, "game/window.c"), Object(Matching, "game/messdata.c"), - Object(NonMatching, "game/card.c"), + Object(Matching, "game/card.c"), Object(Matching, "game/armem.c"), - Object(NonMatching, "game/code_800498F0.c"), + Object(NonMatching, "game/chrman.c"), Object(NonMatching, "game/mapspace.c"), Object(NonMatching, "game/THPSimple.c"), Object(NonMatching, "game/THPDraw.c"), Object(NonMatching, "game/thpmain.c"), Object(NonMatching, "game/objsub.c"), - Object(NonMatching, "game/flag.c"), - Object(NonMatching, "game/saveload.c"), + Object(Matching, "game/flag.c"), + Object(Matching, "game/saveload.c"), Object(NonMatching, "game/sreset.c"), Object(NonMatching, "game/board/main.c"), Object(NonMatching, "game/board/board.c"), Object(NonMatching, "game/board/model.c"), Object(NonMatching, "game/board/window.c"), + Object(NonMatching, "game/board/board_snd.c"), Object(NonMatching, "game/board/com.c"), Object(NonMatching, "game/board/overhead.c"), Object(NonMatching, "game/board/space.c"), @@ -308,6 +309,7 @@ config.libs = [ Object(NonMatching, "game/board/pause.c"), Object(NonMatching, "game/board/com_path.c"), Object(NonMatching, "game/board/tutorial.c"), + Object(NonMatching, "game/kerent.c"), ], }, DolphinLib( @@ -436,6 +438,47 @@ config.libs = [ Object(NonMatching, "dolphin/gx/GXPerf.c"), ], ), + DolphinLib( + "card", + [ + Object(NonMatching, "dolphin/card/CARDBios.c"), + Object(NonMatching, "dolphin/card/CARDUnlock.c"), + Object(NonMatching, "dolphin/card/CARDRdwr.c"), + Object(NonMatching, "dolphin/card/CARDBlock.c"), + Object(NonMatching, "dolphin/card/CARDDir.c"), + Object(NonMatching, "dolphin/card/CARDCheck.c"), + Object(NonMatching, "dolphin/card/CARDMount.c"), + Object(NonMatching, "dolphin/card/CARDFormat.c"), + Object(NonMatching, "dolphin/card/CARDOpen.c"), + Object(NonMatching, "dolphin/card/CARDCreate.c"), + Object(NonMatching, "dolphin/card/CARDRead.c"), + Object(NonMatching, "dolphin/card/CARDWrite.c"), + Object(NonMatching, "dolphin/card/CARDDelete.c"), + Object(NonMatching, "dolphin/card/CARDStat.c"), + Object(NonMatching, "dolphin/card/CARDNet.c"), + ], + ), + DolphinLib( + "exi", + [ + Object(NonMatching, "dolphin/exi/EXIBios.c"), + Object(NonMatching, "dolphin/exi/EXIUart.c"), + ], + ), + DolphinLib( + "si", + [ + Object(NonMatching, "dolphin/si/SIBios.c"), + Object(NonMatching, "dolphin/si/SISamplingRate.c"), + ], + ), + DolphinLib( + "thp", + [ + Object(NonMatching, "dolphin/thp/THPDec.c"), + Object(NonMatching, "dolphin/thp/THPAudio.c"), + ], + ), { "lib": "Runtime.PPCEABI.H", "mw_version": config.linker_version, diff --git a/include/common_structs.h b/include/common_structs.h index e4db9271..190e7251 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -14,8 +14,8 @@ typedef struct player_config { typedef struct system_state { /* 0x00 */ struct { - u16 story : 1; - u16 team : 1; + u8 story : 1; + u8 team : 1; u8 : 7; }; /* 0x02 */ struct { @@ -46,8 +46,9 @@ typedef struct system_state { /* 0x32 */ char unk_32[0x2]; /* 0x34 */ u16 mg_next; /* 0x36 */ s16 mg_next_extra; -/* 0x38 */ u8 flag[3][16]; -/* 0x68 */ u8 unk_68[0x74]; +/* 0x38 */ s16 unk_38; +/* 0x3A */ u8 flag[3][16]; +/* 0x6A */ u8 unk_6A[0x72]; } SystemState; //8018fcf8, sizeof 0xDC typedef struct player_state { diff --git a/include/functions.h b/include/functions.h index bdda3cf9..ceccdb8a 100644 --- a/include/functions.h +++ b/include/functions.h @@ -43,21 +43,19 @@ void MGSeqKillAll(void); void MGSeqPracticeStart(void); void fn_8004D6F4(s16 arg); -s32 _CheckFlag(u32 flag); - void BoardWinCreate(s16, s32, s32); void BoardWinKill(void); void BoardWinWait(void); s32 rand8(void); -void fn_8005D8E8(void); -void fn_8005DB6C(s16, Vec*, s32, f32, f32, s32); +void BoardCameraTargetSetModel(s16 model); +void BoardCameraStartMotion2(s16, Vec*, s32, f32, f32, s32); void fn_8005E0C0(void); void fn_80074210(s32, s32, Vec*); void fn_8007A360(s32); void fn_8007F894(void); -void fn_80083F84(void); +s16 fn_80083F84(void); void fn_800884F4(s32); void fn_800A4C88(void); void fn_800A6B10(void); @@ -71,7 +69,7 @@ f32 fn_8006F128(s32); void fn_8006F61C(s16, s32); void fn_800B42BC(s16); s32 fn_8006DBD4(s16); -void fn_8005B150(void*, void*); +void BoardInit(void*, void*); void fn_8006F2E8(s32, Vec*); void fn_8005D10C(void*, void*); s16 fn_8006D9A4(s32, void*, s32); @@ -95,7 +93,7 @@ void fn_80083EDC(s16); void fn_800A4F6C(s16); void fn_800B3FD8(void*); void fn_800B4274(s32, s32); -void fn_8005D5C0(Vec*); +void BoardCameraRotGet(Vec*); void fn_8006F338(s16, f32, f32, f32); s32 fn_8005B6A8(void); void fn_8006EFBC(s16, Mtx); diff --git a/include/game/card.h b/include/game/card.h new file mode 100644 index 00000000..96d621b4 --- /dev/null +++ b/include/game/card.h @@ -0,0 +1,23 @@ +#ifndef _GAME_CARD_H +#define _GAME_CARD_H + +#include "dolphin.h" + +extern u8 UnMountCnt; + +void HuCardInit(void); +s32 HuCardCheck(void); +s32 HuCardSlotCheck(s16 slot); +s32 HuCardMount(s16 slot); +void HuCardUnMount(s16 slot); +s32 HuCardFormat(s16 slot); +s32 HuCardOpen(s16 slot, const char *fileName, CARDFileInfo *fileInfo); +s32 HuCardRead(CARDFileInfo *fileInfo, void *addr, s32 length, s32 offset); +s32 HuCardCreate(s16 slot, const char *fileName, s32 size, CARDFileInfo *fileInfo); +s32 HuCardClose(CARDFileInfo *fileInfo); +s32 HuCardWrite(CARDFileInfo *fileInfo, const void *addr, s32 length, s32 offset); +s32 HuCardDelete(s16 slot, const char *fileName); +s32 HuCardSectorSizeGet(s16 slot); +s32 HuCardFreeSpaceGet(s16 slot, u32 *byteNotUsed, u32 *filesNotUsed); + +#endif \ No newline at end of file diff --git a/include/game/flag.h b/include/game/flag.h new file mode 100644 index 00000000..159a959d --- /dev/null +++ b/include/game/flag.h @@ -0,0 +1,11 @@ +#ifndef _GAME_FLAG_H +#define _GAME_FLAG_H + +#define FLAG_ID_MAKE(group, index) (((group) << 16)|(index)) + +s32 _CheckFlag(u32 flag); +void _SetFlag(u32 flag); +void _ClearFlag(u32 flag); +void _InitFlag(void); + +#endif \ No newline at end of file diff --git a/include/game/hsfman.h b/include/game/hsfman.h index a0cb9364..dba0ec48 100644 --- a/include/game/hsfman.h +++ b/include/game/hsfman.h @@ -206,7 +206,7 @@ void Hu3DCameraPerspectiveSet(s32, f32, f32, f32, f32); void Hu3DCameraViewportSet(s32, f32, f32, f32, f32, f32, f32); void Hu3DCameraScissorSet(s32, s32, s32, s32, s32); void Hu3DCameraPosSet(s32, f32, f32, f32, f32, f32, f32, f32, f32, f32); -void Hu3DCameraPosSetV(s32, Vec, Vec, Vec); +void Hu3DCameraPosSetV(s32 cam, Vec *pos, Vec *up, Vec *target); void Hu3DCameraKill(s32); void Hu3DCameraAllKill(void); void Hu3DCameraSet(s32, Mtx); diff --git a/include/game/saveload.h b/include/game/saveload.h new file mode 100644 index 00000000..9581fbcd --- /dev/null +++ b/include/game/saveload.h @@ -0,0 +1,35 @@ +#ifndef _GAME_SAVELOAD_H +#define _GAME_SAVELOAD_H + +#include "common.h" + +s32 SLFileOpen(char *arg0); +s32 SLFileCreate(char *arg0, u32 arg1, void *arg2); +s32 SLFileWrite(s32 arg0, void *arg1); +s32 SLFileRead(s32 arg0, void *arg1); +s32 SLFileClose(void); +void SLCurSlotNoSet(s16 arg0); +void SLCurBoxNoSet(s8 arg0); +void SLSaveFlagSet(s32 arg0); +s32 SLSaveFlagGet(void); +void SLSaveDataMake(s32 arg0, OSTime *arg1); +void SLSaveDataInfoSet(OSTime *arg0); +void SLCommonSet(void); +void SLSaveBoard(void); +void SLSaveBoardBackup(void); +s32 SLSave(void); +s32 SLLoad(void); +void SLLoadGameStat(void); +void SLLoadBoard(void); +void SLLoadBoardBackup(void); +void SLSerialNoGet(void); +BOOL SLSerialNoCheck(void); +BOOL SLCheckSumCheck(void); +u16 SLCheckSumGet(void); +void SLCheckSumSet(void); +s32 SLStatSet(s32 arg0); +s32 SLCardMount(s16 arg0); +s32 SLFormat(s16 arg0); +s16 SLMessOut(s16 arg0); + +#endif diff --git a/include/game/window.h b/include/game/window.h index 7596f913..1fbff332 100644 --- a/include/game/window.h +++ b/include/game/window.h @@ -75,6 +75,8 @@ typedef struct { /* 0x160 */ u8 ATTRIBUTE_ALIGN(32) mess_pal[10][3]; } WindowData; // Size 0x180 +extern WindowData winData[32]; + void HuWindowInit(void); void HuWinInit(s32 mess_data_no); s16 HuWinCreate(float x, float y, s16 w, s16 h, s16 frame); diff --git a/src/REL/w10Dll/w10Dll2.c b/src/REL/w10Dll/w10Dll2.c index 72ceaee4..9c806452 100644 --- a/src/REL/w10Dll/w10Dll2.c +++ b/src/REL/w10Dll/w10Dll2.c @@ -53,7 +53,7 @@ void fn_1_C20(void) { } Hu3D2Dto3D(&lbl_1_data_80[lbl_1_bss_1C], 1, &sp14); fn_8006F158(lbl_1_bss_1E, &sp14); - fn_8005D5C0(&sp8); + BoardCameraRotGet(&sp8); PSMTXRotRad(sp20, 'y', 0.2617994f); fn_8006EFBC(lbl_1_bss_1E, sp20); fn_8006F270(lbl_1_bss_1E, sp8.x, 0.0f, 0.0f); diff --git a/src/REL/w10Dll/w10Dll3.c b/src/REL/w10Dll/w10Dll3.c index 21d5cf1b..39d76c2f 100644 --- a/src/REL/w10Dll/w10Dll3.c +++ b/src/REL/w10Dll/w10Dll3.c @@ -185,33 +185,32 @@ void fn_1_13A4(void) { temp_r3_2 = fn_800745F0(0, 0x80000); fn_80074210(0, temp_r3_2, &sp14); fn_8006F158(lbl_1_bss_0->unk8, &sp14); - fn_8005DB6C(lbl_1_bss_0->unk8, &sp8, 0, 3200.0f, -1.0f, 0x1E); + BoardCameraStartMotion2(lbl_1_bss_0->unk8, &sp8, 0, 3200.0f, -1.0f, 0x1E); fn_8005E0C0(); fn_1_BA0(0x2E002C); fn_8007A360(temp_r3_2); - fn_8005DB6C(lbl_1_bss_0->unk8, &sp8, 0, 3200.0f, -1.0f, 0x1E); + BoardCameraStartMotion2(lbl_1_bss_0->unk8, &sp8, 0, 3200.0f, -1.0f, 0x1E); fn_8005E0C0(); temp_r3_2 = fn_800745F0(0, 0x10000000); fn_80074210(0, temp_r3_2, &sp14); fn_8006F158(lbl_1_bss_0->unk8, &sp14); - fn_8005DB6C(lbl_1_bss_0->unk8, &sp8, 0, 3200.0f, -1.0f, 0x1E); + BoardCameraStartMotion2(lbl_1_bss_0->unk8, &sp8, 0, 3200.0f, -1.0f, 0x1E); fn_8005E0C0(); fn_1_BA0(0x2E002E); fn_8007F894(); - fn_8005DB6C(lbl_1_bss_0->unk8, &sp8, 0, 3200.0f, -1.0f, 0x1E); + BoardCameraStartMotion2(lbl_1_bss_0->unk8, &sp8, 0, 3200.0f, -1.0f, 0x1E); fn_8005E0C0(); temp_r3_2 = fn_800745F0(0, 0x08000000); fn_80074210(0, temp_r3_2, &sp14); fn_8006F158(lbl_1_bss_0->unk8, &sp14); - fn_8005DB6C(lbl_1_bss_0->unk8, &sp8, 0, 3200.0f, -1.0f, 0x1E); + BoardCameraStartMotion2(lbl_1_bss_0->unk8, &sp8, 0, 3200.0f, -1.0f, 0x1E); fn_8005E0C0(); fn_1_BA0(0x2E0030); fn_800A6B10(); - fn_8005DB6C(lbl_1_bss_0->unk8, &sp8, 0, 3200.0f, -1.0f, 0x1E); + BoardCameraStartMotion2(lbl_1_bss_0->unk8, &sp8, 0, 3200.0f, -1.0f, 0x1E); fn_8005E0C0(); fn_1_BA0(0x2E0032); - fn_80083F84(); - fn_8005D8E8(); + BoardCameraTargetSetModel(fn_80083F84()); fn_8005E0C0(); fn_1_BA0(0x2E0033); fn_1_BA0(0x2E0034); @@ -229,7 +228,7 @@ void fn_1_13A4(void) { if (lbl_1_bss_C == 0) { lbl_1_bss_C = 1; fn_80070EE8(0, 0x1F3); - fn_8005B5FC(); + BoardKill(); } fn_800B3FD8(NULL); while (1) { diff --git a/src/REL/w10Dll/w10Dll4.c b/src/REL/w10Dll/w10Dll4.c index 4f0376d9..a5232ba6 100644 --- a/src/REL/w10Dll/w10Dll4.c +++ b/src/REL/w10Dll/w10Dll4.c @@ -153,7 +153,7 @@ void fn_1_1984(void) { lbl_1_bss_C = 1; OSReport(lbl_1_data_98); fn_80070EE8(0, 0x1F3); - fn_8005B5FC(); + BoardKill(); fn_800B3FD8(NULL); } } @@ -182,7 +182,7 @@ int fn_1_1AAC(s16 arg0, s32 arg1) { lbl_1_bss_C = 1; OSReport(lbl_1_data_98); fn_80070EE8(0, 0x1F3); - fn_8005B5FC(); + BoardKill(); fn_800B3FD8(NULL); } } diff --git a/src/REL/w10Dll/w10Dll_init.c b/src/REL/w10Dll/w10Dll_init.c index ed4247bb..558cb29c 100644 --- a/src/REL/w10Dll/w10Dll_init.c +++ b/src/REL/w10Dll/w10Dll_init.c @@ -1,7 +1,7 @@ #include "include/REL/w10Dll.h" void fn_1_0(void) { - fn_8005B150(&fn_1_E0, &fn_1_6D8); + BoardInit(&fn_1_E0, &fn_1_6D8); } int _prolog(void) { @@ -10,7 +10,7 @@ int _prolog(void) { (**ctors)(); ctors++; } - fn_8005B150(&fn_1_E0, &fn_1_6D8); + fn_1_0(); return 0; } diff --git a/src/game/card.c b/src/game/card.c new file mode 100644 index 00000000..845bf3b0 --- /dev/null +++ b/src/game/card.c @@ -0,0 +1,181 @@ +#include "dolphin.h" +#include "game/memory.h" +#include "game/card.h" + +static void *cardWork; +u8 UnMountCnt; + +static void MountCallBack(s32 chan, s32 result); + +void HuCardInit(void) +{ + CARDInit(); + cardWork = HuMemDirectMalloc(HEAP_SYSTEM, CARD_WORKAREA_SIZE); +} + +s32 HuCardCheck(void) +{ + s32 ret = 0; + s32 memSize, sectorSize; + s32 result; + do { + result = CARDProbeEx(0, &memSize, §orSize); + } while(result == CARD_RESULT_BUSY); + if(result == CARD_RESULT_READY) { + ret |= 1; + OSReport("SlotA Card MemSize %x,Sector Size %x\n", memSize, sectorSize); + HuCardMount(0); + } + do { + result = CARDProbeEx(1, &memSize, §orSize); + } while(result == CARD_RESULT_BUSY); + if(result == CARD_RESULT_READY) { + ret |= 2; + OSReport("SlotB Card MemSize %x,Sector Size %x\n", memSize, sectorSize); + HuCardMount(1); + } + return ret; +} + +s32 HuCardSlotCheck(s16 slot) +{ + s32 memSize, sectorSize; + s32 result; + do { + result = CARDProbeEx(slot, &memSize, §orSize); + } while(result == CARD_RESULT_BUSY); + if(result < 0) { + return result; + } else { + return sectorSize; + } +} + +s32 HuCardMount(s16 slot) +{ + s32 memSize, sectorSize; + s32 result; + do { + result = CARDProbeEx(slot, &memSize, §orSize); + } while(result == CARD_RESULT_BUSY); + if(result < 0) { + return result; + } else { + result = CARDMount(slot, cardWork, MountCallBack); + if(result == CARD_RESULT_FATAL_ERROR || result == CARD_RESULT_IOERROR) { + return CARD_RESULT_FATAL_ERROR; + } + if(result == CARD_RESULT_ENCODING) { + return CARD_RESULT_BROKEN; + } + if(result < 0 && result != CARD_RESULT_BROKEN) { + return result; + } + result = CARDCheck(slot); + if(result == CARD_RESULT_FATAL_ERROR || result == CARD_RESULT_IOERROR) { + return CARD_RESULT_FATAL_ERROR; + } + if(result == CARD_RESULT_ENCODING) { + return CARD_RESULT_BROKEN; + } + return result; + } +} + +void HuCardUnMount(s16 slot) +{ + CARDUnmount(slot); +} + +s32 HuCardFormat(s16 slot) +{ + s32 result = CARDFormat(slot); + if(result == CARD_RESULT_FATAL_ERROR || result == CARD_RESULT_IOERROR) { + return CARD_RESULT_FATAL_ERROR; + } + return result; +} + +static void MountCallBack(s32 chan, s32 result) +{ + UnMountCnt = (1 << chan); +} + +s32 HuCardOpen(s16 slot, const char *fileName, CARDFileInfo *fileInfo) +{ + s32 result = CARDOpen(slot, fileName, fileInfo); + if(result == CARD_RESULT_FATAL_ERROR || result == CARD_RESULT_IOERROR) { + return CARD_RESULT_FATAL_ERROR; + } + if(result == CARD_RESULT_ENCODING) { + return CARD_RESULT_BROKEN; + } + return result; +} + +s32 HuCardRead(CARDFileInfo *fileInfo, void *addr, s32 length, s32 offset) +{ + s32 result = CARDRead(fileInfo, addr, length, offset); + if(result == CARD_RESULT_FATAL_ERROR || result == CARD_RESULT_IOERROR) { + return CARD_RESULT_FATAL_ERROR; + } + return result; +} + +s32 HuCardCreate(s16 slot, const char *fileName, s32 size, CARDFileInfo *fileInfo) +{ + s32 sectorSize; + s32 byteNotUsed, filesNotUsed; + s32 result; + result = CARDGetSectorSize(slot, (u32 *)§orSize); + if(result == CARD_RESULT_FATAL_ERROR || result == CARD_RESULT_NOCARD) { + return result; + } + if(size % sectorSize) { + size = sectorSize*(size+((sectorSize-1)/sectorSize)); + } + result = CARDFreeBlocks(slot, &byteNotUsed, &filesNotUsed); + if(result != 0) { + return result; + } + if(filesNotUsed <= 0 || byteNotUsed < size) { + return CARD_RESULT_INSSPACE; + } + result = CARDCreate(slot, fileName, size, fileInfo); + return result; +} + +s32 HuCardClose(CARDFileInfo *fileInfo) +{ + s32 result = CARDClose(fileInfo); + return result; +} + +s32 HuCardWrite(CARDFileInfo *fileInfo, const void *addr, s32 length, s32 offset) +{ + s32 result = CARDWrite(fileInfo, addr, length, offset); + return result; +} + +s32 HuCardDelete(s16 slot, const char *fileName) +{ + s32 result = CARDDelete(slot, fileName); + return result; +} + +s32 HuCardSectorSizeGet(s16 slot) +{ + u32 sectorSize; + s32 result = CARDGetSectorSize(slot, §orSize); + if(result < 0) { + return result; + } else { + return sectorSize; + } +} + +s32 HuCardFreeSpaceGet(s16 slot, u32 *byteNotUsed, u32 *filesNotUsed) +{ + s32 result = CARDFreeBlocks(slot, (s32 *)byteNotUsed, (s32 *)filesNotUsed); + return result; +} \ No newline at end of file diff --git a/src/game/flag.c b/src/game/flag.c new file mode 100644 index 00000000..c9b8c8d4 --- /dev/null +++ b/src/game/flag.c @@ -0,0 +1,41 @@ +#include "common.h" + +static u8 _Sys_Flag[16]; + +static u8 *GetFlagPtr(u32 flag) +{ + u8 *ret; + u32 group = flag >> 16; + if((flag & 0xFFFF0000) == 0x30000) { + ret = _Sys_Flag; + } else { + ret = &GWSystem.flag[group][0]; + } + return ret; +} + +u32 _CheckFlag(u32 flag) +{ + u8 *flag_ptr = GetFlagPtr(flag); + u16 index = flag; + return flag_ptr[index/8] & (1 << (index % 8)); +} + +void _SetFlag(u32 flag) +{ + u8 *flag_ptr = GetFlagPtr(flag); + u16 index = flag; + flag_ptr[index/8] |= (1 << (index % 8)); +} + +void _ClearFlag(u32 flag) +{ + u8 *flag_ptr = GetFlagPtr(flag); + u16 index = flag; + flag_ptr[index/8] &= ~(1 << (index % 8)); +} + +void _InitFlag(void) +{ + memset(_Sys_Flag, 0, sizeof(_Sys_Flag)); +} \ No newline at end of file diff --git a/src/game/gamework.c b/src/game/gamework.c index c44d4a05..d0bd669c 100644 --- a/src/game/gamework.c +++ b/src/game/gamework.c @@ -1,6 +1,7 @@ #include "common.h" #include "string.h" #include "game/gamework.h" +#include "game/flag.h" GameStat GWGameStatDefault; GameStat GWGameStat; @@ -144,7 +145,7 @@ s16 GWGetMessSpeed(void) void GWSetMGRecord(int index, s32 value) { - if(!_CheckFlag(0x1000C)) { + if(!_CheckFlag(FLAG_ID_MAKE(1, 12))) { GWGameStat.mg_record[index] = value; } } @@ -297,7 +298,7 @@ s16 GWGetCoins(int player) void GWSetCoins(int player, s16 value) { - if(!_CheckFlag(0x1000C)) { + if(!_CheckFlag(FLAG_ID_MAKE(1, 12))) { if(value < 0) { value = 0; } diff --git a/src/game/hsfman.c b/src/game/hsfman.c index d15e4893..4731a093 100644 --- a/src/game/hsfman.c +++ b/src/game/hsfman.c @@ -1165,7 +1165,7 @@ void Hu3DCameraPosSet(s32 cam, f32 x, f32 y, f32 z, f32 ux, f32 uy, f32 uz, f32 } } -void Hu3DCameraPosSetV(s32 cam, Vec pos, Vec up, Vec target) { +void Hu3DCameraPosSetV(s32 cam, Vec *pos, Vec *up, Vec *target) { s16 mask; s16 i; CameraData* cam_ptr; @@ -1173,9 +1173,9 @@ void Hu3DCameraPosSetV(s32 cam, Vec pos, Vec up, Vec target) { for (i = 0, mask = 1; i < 0x10; i++, mask <<= 1) { if ((cam & mask) != 0) { cam_ptr = &Hu3DCamera[i]; - cam_ptr->pos = pos; - cam_ptr->up = up; - cam_ptr->target = target; + cam_ptr->pos = *pos; + cam_ptr->up = *up; + cam_ptr->target = *target; } } } diff --git a/src/game/objmain.c b/src/game/objmain.c index 6935918b..7be27e96 100644 --- a/src/game/objmain.c +++ b/src/game/objmain.c @@ -2,6 +2,7 @@ #include "game/printfunc.h" #include "game/object.h" #include "game/pad.h" +#include "game/flag.h" #define OM_OVL_HIS_MAX 16 #define OM_MAX_GROUPS 10 @@ -80,7 +81,7 @@ static void omWatchOverlayProc(void) omovlevtno = omnextovlevtno; omovlstat = omnextovlstat; omnextovl = OVL_INVALID; - if(_CheckFlag(0x1000C)) { + if(_CheckFlag(FLAG_ID_MAKE(1, 12))) { MGSeqPracticeStart(); } omSysPauseEnable(TRUE); diff --git a/src/game/saveload.c b/src/game/saveload.c new file mode 100644 index 00000000..dce185aa --- /dev/null +++ b/src/game/saveload.c @@ -0,0 +1,795 @@ +#include "game/saveload.h" +#include "game/data.h" +#include "game/pad.h" +#include "game/window.h" +#include "game/flag.h" +#include "game/card.h" + +#include "string.h" + +static s16 SLCreateSaveWin(void); +static void SLKillSaveWin(void); + + +extern u8 UnMountCnt; + +CARDFileInfo curFileInfo; +u8 ATTRIBUTE_ALIGN(32) saveBuf[0x4000]; + +u64 SLSerialNo; +s32 saveExecF; +u8 curBoxNo; +s16 curSlotNo; + +u8 lbl_80132150[64] = { + "Mario Party 4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "File 0 00/00/0000" +}; + +char *SaveFileNameTbl[] = { + "MARIPA4BOX0", + "MARIPA4BOX1", + "MARIPA4BOX2" +}; + +s32 SaveEnableF = 1; + +static char *SlotNameTbl[] = { + "A", + "B" +}; + +static s32 saveMessWin = -1; + +s32 SLFileOpen(char *arg0) { + s32 temp_r3; + + if (SaveEnableF == 0) { + return 0; + } + while (1) { + temp_r3 = SLCardMount(curSlotNo); + if (temp_r3 < 0) { + return temp_r3; + } + temp_r3 = HuCardOpen(curSlotNo, arg0, &curFileInfo); + if (temp_r3 == CARD_RESULT_NOFILE) { + return CARD_RESULT_NOFILE; + } + if (temp_r3 == CARD_RESULT_WRONGDEVICE) { + SLMessOut(7); + return CARD_RESULT_FATAL_ERROR; + } + if (temp_r3 == CARD_RESULT_FATAL_ERROR) { + SLMessOut(1); + return CARD_RESULT_FATAL_ERROR; + } + if (temp_r3 == CARD_RESULT_NOCARD) { + SLMessOut(0); + return CARD_RESULT_NOCARD; + } + if (temp_r3 == CARD_RESULT_BROKEN) { + temp_r3 = HuCardSectorSizeGet(curSlotNo); + if (temp_r3 > 0 && temp_r3 != 0x2000) { + SLMessOut(8); + return CARD_RESULT_WRONGDEVICE; + } + UnMountCnt = 0; + temp_r3 = SLMessOut(5); + if (temp_r3 == 0) { + temp_r3 = SLFormat(curSlotNo); + if (temp_r3 != 0) { + return temp_r3; + } + } else { + return CARD_RESULT_NOFILE; + } + } else { + return CARD_RESULT_READY; + } + } +} + +s32 SLFileCreate(char *arg0, u32 arg1, void *arg2) { + float sp18[2]; + u32 sp14; + u32 sp10; + s32 temp_r30; + s32 temp_r31; + + if (SaveEnableF == 0) { + return 0; + } + temp_r31 = SLCardMount(curSlotNo); + if (temp_r31 < 0) { + return temp_r31; + } + temp_r31 = HuCardSectorSizeGet(curSlotNo); + if (temp_r31 < 0 && temp_r31 != 0x2000) { + SLMessOut(8); + return CARD_RESULT_FATAL_ERROR; + } + temp_r31 = HuCardFreeSpaceGet(curSlotNo, &sp14, &sp10); + if (sp10 == 0 && arg1 > sp14) { + SLMessOut(4); + return CARD_RESULT_INSSPACE; + } + if (sp10 == 0) { + SLMessOut(2); + return CARD_RESULT_INSSPACE; + } + if (arg1 > sp14) { + SLMessOut(3); + return CARD_RESULT_INSSPACE; + } + HuWinInit(1); + HuWinMesMaxSizeGet(1, sp18, 0x10000B); + temp_r30 = HuWinExCreateStyled(-10000.0f, 200.0f, sp18[0], sp18[1], -1, 2); + HuWinExAnimIn(temp_r30); + HuWinMesSet(temp_r30, 0x10000B); + HuWinMesWait(temp_r30); + _SetFlag(FLAG_ID_MAKE(3, 0)); + temp_r31 = HuCardCreate(curSlotNo, arg0, arg1, &curFileInfo); + _ClearFlag(0x30000); + if (temp_r31 < 0) { + HuWinExAnimOut(temp_r30); + HuWinExCleanup(temp_r30); + } + if (temp_r31 == CARD_RESULT_NOCARD) { + SLMessOut(0); + return CARD_RESULT_NOCARD; + } + if (temp_r31 < 0) { + SLMessOut(1); + return CARD_RESULT_FATAL_ERROR; + } + _SetFlag(FLAG_ID_MAKE(3, 0)); + temp_r31 = HuCardWrite(&curFileInfo, arg2, arg1, 0); + _ClearFlag(FLAG_ID_MAKE(3, 0)); + if (temp_r31 < 0) { + HuWinExAnimOut(temp_r30); + HuWinExCleanup(temp_r30); + } + if (temp_r31 == CARD_RESULT_NOCARD) { + SLMessOut(0); + return CARD_RESULT_NOCARD; + } + if (temp_r31 < 0) { + SLMessOut(1); + return CARD_RESULT_FATAL_ERROR; + } + _SetFlag(FLAG_ID_MAKE(3, 0)); + temp_r31 = SLStatSet(1); + _ClearFlag(FLAG_ID_MAKE(3, 0)); + HuWinExAnimOut(temp_r30); + HuWinExCleanup(temp_r30); + if (temp_r31 < 0) { + return temp_r31; + } + return 0; +} + +s32 SLFileWrite(s32 arg0, void *arg1) { + float sp10[2]; + s32 temp_r31; + s32 var_r30; + + if (SaveEnableF == 0) { + return 0; + } + HuWinInit(1); + HuWinMesMaxSizeGet(1, sp10, 0x10000B); + temp_r31 = HuWinExCreateStyled(-10000.0f, 200.0f, sp10[0], sp10[1], -1, 2); + HuWinExAnimIn(temp_r31); + HuWinMesSet(temp_r31, 0x10000B); + HuWinMesWait(temp_r31); + HuPrcSleep(0x3C); + _SetFlag(FLAG_ID_MAKE(3, 0)); + var_r30 = HuCardWrite(&curFileInfo, arg1, arg0, 0); + if (var_r30 == 0) { + var_r30 = SLStatSet(1); + } + _ClearFlag(FLAG_ID_MAKE(3, 0)); + HuWinExAnimOut(temp_r31); + HuWinExCleanup(temp_r31); + return var_r30; +} + +s32 SLFileRead(s32 arg0, void *arg1) { + s32 temp_r3; + + if (SaveEnableF == 0) { + return 0; + } + temp_r3 = HuCardRead(&curFileInfo, arg1, arg0, 0); + if (temp_r3 == CARD_RESULT_NOCARD) { + SLMessOut(0); + } else if (temp_r3 < 0) { + SLMessOut(1); + } + return temp_r3; +} + +s32 SLFileClose(void) { + s32 temp_r31; + + if (SaveEnableF == 0) { + return 0; + } + temp_r31 = HuCardClose(&curFileInfo); + return temp_r31; +} + +void SLCurSlotNoSet(s16 arg0) { + curSlotNo = arg0; +} + +void SLCurBoxNoSet(s8 arg0) { + curBoxNo = arg0; +} + +void SLSaveFlagSet(s32 arg0) { + if (arg0 == 0) { + GWGameStat.party_continue = 0; + GWGameStat.story_continue = 0; + } + SaveEnableF = arg0; +} + +s32 SLSaveFlagGet(void) { + return SaveEnableF; +} + +void SLSaveDataMake(s32 arg0, OSTime *arg1) { + AnimData *temp_r3; + u8 *var_r30; + s32 i; + + var_r30 = saveBuf; + if (arg0 != 0) { + for (i = 0; i < 0x4000; i++) { + var_r30[i] = 0xFF; + } + } + for (i = 0; i < 0x20; i++) { + var_r30[i] = lbl_80132150[i]; + } + for (i = 0; i < 0x20; i++) { + (&var_r30[0x20])[i] = lbl_80132150[i + 0x20]; + } + temp_r3 = HuSprAnimRead(HuDataSelHeapReadNum(0x86001F, MEMORY_DEFAULT_NUM, HEAP_DATA)); + memcpy(var_r30 + 0x40, temp_r3->bmp->data, 0xC00); + memcpy(var_r30 + 0xC40, temp_r3->bmp->palData, 0x200); + temp_r3 = HuSprAnimRead(HuDataSelHeapReadNum(curBoxNo + 0x86001C, MEMORY_DEFAULT_NUM, HEAP_DATA)); + memcpy(var_r30 + 0xE40, temp_r3->bmp->data, 0x1000); + memcpy(var_r30 + 0x1E40, temp_r3->bmp->palData, 0x200); + SLSaveDataInfoSet(arg1); +} + +void SLSaveDataInfoSet(OSTime *arg0) { + s16 temp_r30; + s16 temp_r31; + OSCalendarTime sp8; + + OSTicksToCalendarTime(*arg0, &sp8); + saveBuf[0x25] = curBoxNo + 0x31; + temp_r31 = (sp8.mon + 1) / 10; + saveBuf[0x28] = temp_r31 + 0x30; + temp_r31 = (sp8.mon + 1) % 10; + saveBuf[0x29] = temp_r31 + 0x30; + temp_r31 = sp8.mday / 10; + saveBuf[0x2B] = temp_r31 + 0x30; + temp_r31 = sp8.mday % 10; + saveBuf[0x2C] = temp_r31 + 0x30; + temp_r30 = sp8.year; + temp_r31 = temp_r30 / 1000; + saveBuf[0x2E] = temp_r31 + 0x30; + temp_r30 -= temp_r31 * 1000; + temp_r31 = temp_r30 / 100; + saveBuf[0x2F] = temp_r31 + 0x30; + temp_r30 -= temp_r31 * 100; + temp_r31 = temp_r30 / 10; + saveBuf[0x30] = temp_r31 + 0x30; + temp_r30 -= temp_r31 * 10; + saveBuf[0x31] = temp_r30 + 0x30; +} + +void SLCommonSet(void) { + OSTime temp_r28; + + temp_r28 = OSGetTime(); + GWGameStat.create_time = temp_r28; + memcpy(saveBuf + 0x2040, &GWGameStat, 0x118); + SLSaveDataInfoSet(&temp_r28); +} + +void SLSaveBoard(void) { + s16 i; + + memcpy(saveBuf + 0x2158, &GWSystem, 0xDC); + for (i = 0; i < 4; i++) { + memcpy(&saveBuf[i * 0x30 + 0x2234], &GWPlayer[i], 0x30); + } +} + +void SLSaveBoardBackup(void) { + s16 i; + + memcpy(saveBuf + 0x22F4, &GWSystem, 0xDC); + for (i = 0; i < 4; i++) { + memcpy(&saveBuf[i * 0x30 + 0x23D0], &GWPlayer[i], 0x30); + } +} + +s32 SLSave(void) { + s32 var_r31; + + while (1) { + SLCheckSumSet(); + var_r31 = SLFileOpen(SaveFileNameTbl[curBoxNo]); + if (var_r31 == CARD_RESULT_NOFILE) { + if (!SLSerialNoCheck()) { + SLMessOut(9); + } else { + SLCreateSaveWin(); + var_r31 = SLFileCreate(SaveFileNameTbl[curBoxNo], 0x4000, saveBuf); + SLKillSaveWin(); + if (var_r31 >= 0) { + SLSerialNoGet(); + goto block_32; + } + } + } else { + if (var_r31 == CARD_RESULT_NOCARD) { + var_r31 = SLMessOut(0xA); + if (var_r31 != 0) { + SLMessOut(0xB); + continue; + } + SLSaveFlagSet(0); + break; + } + if (var_r31 >= 0) { + if (!SLSerialNoCheck()) { + SLMessOut(9); + } else { + SLCreateSaveWin(); + var_r31 = SLFileWrite(0x4000, saveBuf); + SLKillSaveWin(); + if (var_r31 == CARD_RESULT_NOCARD) { + SLMessOut(0); + } else if (var_r31 == CARD_RESULT_WRONGDEVICE) { + SLMessOut(7); + } else if (var_r31 == CARD_RESULT_BROKEN) { + var_r31 = HuCardSectorSizeGet(curSlotNo); + if (var_r31 > 0 && var_r31 != 0x2000) { + SLMessOut(8); + goto block_36; + } + UnMountCnt = 0; + var_r31 = SLMessOut(5); + if (var_r31 == 0) { + var_r31 = SLFormat(curSlotNo); + if (var_r31 != 0) { + return var_r31; + } + continue; + } else { + var_r31 = CARD_RESULT_BROKEN; + } + } else if (var_r31 < 0) { + SLMessOut(1); + } +block_32: + SLFileClose(); + if (var_r31 >= 0) { + HuCardUnMount(curSlotNo); + return 1; + } + } + } + } +block_36: + var_r31 = SLMessOut(0xA); + if (var_r31 != 0) { + SLMessOut(0xB); + } else { + SLSaveFlagSet(0); + break; + } + } + HuCardUnMount(curSlotNo); + return 0; +} + +static s16 SLCreateSaveWin(void) { + float sp8[2]; + s16 temp_r3; + + HuWinInit(1); + HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + HuWinMesMaxSizeGet(1, sp8, 0x100044); + temp_r3 = HuWinExCreateStyled(-10000.0f, 150.0f, sp8[0], sp8[1], -1, 2); + saveMessWin = temp_r3; + HuWinExAnimIn(temp_r3); + HuWinInsertMesSet(temp_r3, MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + HuWinMesSet(temp_r3, 0x100044); + HuWinMesWait(temp_r3); + return temp_r3; +} + +static void SLKillSaveWin(void) { + if (saveMessWin != -1) { + HuWinExAnimOut(saveMessWin); + HuWinExCleanup(saveMessWin); + saveMessWin = -1; + } +} + +s32 SLLoad(void) { + s32 var_r31; + u16 *temp_r29; + u16 temp_r27; + + var_r31 = SLFileOpen(SaveFileNameTbl[curBoxNo]); + if (var_r31 >= 0) { + var_r31 = SLFileRead(0x4000, saveBuf); + SLFileClose(); + if (var_r31 >= 0) { + temp_r29 = (u16*) &saveBuf[0x2490]; + temp_r27 = SLCheckSumGet(); + *temp_r29 == temp_r27; + } + } + HuCardUnMount(curSlotNo); + return 0; +} + +void SLLoadGameStat(void) { + memcpy(&GWGameStat, saveBuf + 0x2040, 0x118); +} + +void SLLoadBoard(void) { + s16 i; + + memcpy(&GWSystem, saveBuf + 0x2158, 0xDC); + for (i = 0; i < 4; i++) { + memcpy(&GWPlayer[i], &saveBuf[i * 0x30 + 0x2234], 0x30); + GWPlayerCfg[i].character = GWPlayer[i].character; + GWPlayerCfg[i].pad_idx = GWPlayer[i].port; + GWPlayerCfg[i].diff = GWPlayer[i].diff; + GWPlayerCfg[i].iscom = GWPlayer[i].com; + GWPlayerCfg[i].group = GWPlayer[i].team; + } +} + +void SLLoadBoardBackup(void) { + s16 i; + + memcpy(&GWSystem, saveBuf + 0x22F4, 0xDC); + for (i = 0; i < 4; i++) { + memcpy(&GWPlayer[i], &saveBuf[i * 0x30 + 0x23D0], 0x30); + GWPlayerCfg[i].character = GWPlayer[i].character; + GWPlayerCfg[i].pad_idx = GWPlayer[i].port; + GWPlayerCfg[i].diff = GWPlayer[i].diff; + GWPlayerCfg[i].iscom = GWPlayer[i].com; + GWPlayerCfg[i].group = 0; + } +} + +void SLSerialNoGet(void) { + CARDGetSerialNo(curSlotNo, &SLSerialNo); +} + +BOOL SLSerialNoCheck(void) { + s32 var_r31; + u64 sp8; + + if (SLSerialNo == 0) { + return TRUE; + } + var_r31 = CARDGetSerialNo(curSlotNo, &sp8); + if (var_r31 < 0) { + return TRUE; + } + if (sp8 != SLSerialNo) { + return FALSE; + } + return TRUE; +} + +BOOL SLCheckSumCheck(void) { + u16 *temp_r31 = (u16*) &saveBuf[0x2490]; + u16 temp_r3 = SLCheckSumGet(); + + if (*temp_r31 == temp_r3) { + return TRUE; + } + return FALSE; +} + +u16 SLCheckSumGet(void) { + u32 i; + u32 var_r30; + + for (i = var_r30 = 0; i < 0x2490; i++) { + var_r30 += saveBuf[i]; + } + var_r30 = ~var_r30; + return (u16) var_r30 & 0xFFFF; +} + +void SLCheckSumSet(void) { + u16 temp_r31 = SLCheckSumGet(); + + saveBuf[0x2490] = (temp_r31 >> 8) & 0xFF; + saveBuf[0x2491] = temp_r31; +} + +s32 SLStatSet(s32 arg0) { + CARDStat sp8; + s32 temp_r29; + s32 temp_r3; + + temp_r29 = curFileInfo.fileNo; + temp_r3 = CARDGetStatus(curSlotNo, temp_r29, &sp8); + if (temp_r3 == -3) { + if (arg0 != 0) { + SLMessOut(0); + } + return -3; + } + if (temp_r3 < 0) { + if (arg0 != 0) { + SLMessOut(1); + } + return CARD_RESULT_FATAL_ERROR; + } + sp8.commentAddr = 0; + sp8.iconAddr = 0x40; + CARDSetBannerFormat(&sp8, CARD_STAT_BANNER_C8); + CARDSetIconFormat(&sp8, 0, CARD_STAT_ICON_C8); + CARDSetIconFormat(&sp8, 1, CARD_STAT_ICON_C8); + CARDSetIconFormat(&sp8, 2, CARD_STAT_ICON_C8); + CARDSetIconFormat(&sp8, 3, CARD_STAT_ICON_C8); + CARDSetIconSpeed(&sp8, 0, CARD_STAT_SPEED_MIDDLE); + CARDSetIconSpeed(&sp8, 1, CARD_STAT_SPEED_MIDDLE); + CARDSetIconSpeed(&sp8, 2, CARD_STAT_SPEED_MIDDLE); + CARDSetIconSpeed(&sp8, 3, CARD_STAT_SPEED_MIDDLE); + CARDSetIconSpeed(&sp8, 4, CARD_STAT_SPEED_END); + CARDSetIconAnim(&sp8, CARD_STAT_ANIM_LOOP); + + temp_r3 = CARDSetStatus(curSlotNo, temp_r29, &sp8); + if (temp_r3 == CARD_RESULT_NOCARD) { + if (arg0 != 0) { + SLMessOut(0); + } + return CARD_RESULT_NOCARD; + } + if (temp_r3 < 0) { + if (arg0 != 0) { + SLMessOut(1); + } + return CARD_RESULT_FATAL_ERROR; + } + return temp_r3; +} + +s32 SLCardMount(s16 arg0) { + s32 temp_r3; + + while (1) { + temp_r3 = HuCardMount(curSlotNo); + if (temp_r3 == CARD_RESULT_WRONGDEVICE) { + SLMessOut(7); + return temp_r3; + } + if (temp_r3 == CARD_RESULT_FATAL_ERROR) { + SLMessOut(1); + return CARD_RESULT_FATAL_ERROR; + } + if (temp_r3 == CARD_RESULT_NOCARD) { + SLMessOut(0); + return CARD_RESULT_NOCARD; + } + if (temp_r3 == CARD_RESULT_BROKEN) { + temp_r3 = HuCardSectorSizeGet(curSlotNo); + if (temp_r3 > 0 && temp_r3 != 0x2000) { + SLMessOut(8); + return CARD_RESULT_WRONGDEVICE; + } + UnMountCnt = 0; + temp_r3 = SLMessOut(5); + if (temp_r3 == 0) { + temp_r3 = SLFormat(curSlotNo); + if (temp_r3 != 0) { + return temp_r3; + } + } else { + return CARD_RESULT_FATAL_ERROR; + } + } else { + break; + } + } + temp_r3 = HuCardSectorSizeGet(curSlotNo); + if (temp_r3 < 0) { + SLMessOut(1); + return temp_r3; + } + if (temp_r3 != 0x2000) { + SLMessOut(8); + return CARD_RESULT_WRONGDEVICE; + } + return 0; +} + +s32 SLFormat(s16 arg0) { + float sp8[2]; + s16 temp_r24; + s16 temp_r3; + s16 temp_r3_2; + OSTime temp_r19; + + HuWinInit(1); + HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(16, 56)); + temp_r3 = HuWinExCreateStyled(-10000.0f, 150.0f, sp8[0], sp8[1], -1, 2); + HuWinExAnimIn(temp_r3); + HuWinInsertMesSet(temp_r3, MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + HuWinMesSet(temp_r3, MAKE_MESSID(16, 56)); + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(16, 11)); + temp_r3_2 = HuWinExCreateStyled(-10000.0f, 200.0f, sp8[0], sp8[1], -1, 2); + HuWinExAnimIn(temp_r3_2); + HuWinMesSet(temp_r3_2, MAKE_MESSID(16, 11)); + HuWinMesWait(temp_r3_2); + HuPrcSleep(0x1E); + if (UnMountCnt & (1 << curSlotNo)) { + HuWinExAnimOut(temp_r3); + HuWinExCleanup(temp_r3); + HuWinExAnimOut(temp_r3_2); + HuWinExCleanup(temp_r3_2); + SLMessOut(0xC); + return 0; + } + _SetFlag(FLAG_ID_MAKE(3, 0)); + temp_r24 = HuCardFormat(curSlotNo); + _ClearFlag(FLAG_ID_MAKE(3, 0)); + if (temp_r24 < 0) { + HuWinExAnimOut(temp_r3); + HuWinExCleanup(temp_r3); + HuWinExAnimOut(temp_r3_2); + HuWinExCleanup(temp_r3_2); + } + if (temp_r24 == CARD_RESULT_FATAL_ERROR) { + SLMessOut(6); + SLMessOut(1); + return CARD_RESULT_FATAL_ERROR; + } + if (temp_r24 == CARD_RESULT_NOCARD) { + SLMessOut(0); + return CARD_RESULT_NOCARD; + } + if (temp_r24 == CARD_RESULT_WRONGDEVICE) { + SLMessOut(7); + return temp_r24; + } + HuWinExAnimOut(temp_r3); + HuWinExCleanup(temp_r3); + HuWinExAnimOut(temp_r3_2); + HuWinExCleanup(temp_r3_2); + CARDGetSerialNo(curSlotNo, &SLSerialNo); + curBoxNo = 0; + temp_r19 = OSGetTime(); + SLSaveDataMake(0, &temp_r19); + SLCheckSumSet(); + return temp_r24; +} + +s16 SLMessOut(s16 arg0) { + WindowData *var_r26; + float sp8[2]; + u32 var_r29; + s32 var_r31; + s32 var_r27; + s16 temp_r3; + s16 var_r28; + + var_r28 = -1; + var_r29 = 0; + var_r27 = 0; + HuWinInit(1); + SLKillSaveWin(); + switch (arg0) { + case 0: + var_r31 = MAKE_MESSID(16, 2); + break; + case 1: + var_r31 = MAKE_MESSID(16, 83); + HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + break; + case 2: + HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + var_r31 = MAKE_MESSID(16, 74); + break; + case 3: + var_r31 = MAKE_MESSID(16, 74); + HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + break; + case 4: + var_r31 = MAKE_MESSID(16, 74); + HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + break; + case 5: + HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + var_r31 = MAKE_MESSID(16, 4); + var_r27 = 1; + break; + case 6: + var_r31 = MAKE_MESSID(16, 54); + break; + case 7: + HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + var_r31 = MAKE_MESSID(16, 55); + break; + case 8: + HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + var_r31 = MAKE_MESSID(16, 57); + break; + case 9: + HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + var_r31 = MAKE_MESSID(16, 69); + break; + case 10: + var_r31 = MAKE_MESSID(16, 70); + var_r27 = 1; + break; + case 11: + HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + var_r31 = MAKE_MESSID(16, 72); + break; + case 12: + var_r31 = MAKE_MESSID(16, 80); + break; + } + if (var_r31 == MAKE_MESSID(16, 4)) { + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(16, 78)); + } else { + HuWinMesMaxSizeGet(1, sp8, var_r31); + } + temp_r3 = HuWinExCreateStyled(-10000.0f, 200.0f, sp8[0], sp8[1], -1, 2); + var_r26 = &winData[temp_r3]; + var_r26->active_pad = 1; + if (var_r29 != 0) { + HuWinInsertMesSet(temp_r3, var_r29, 0); + } + HuWinAttrSet(temp_r3, 0x10); + HuWinExAnimIn(temp_r3); + HuWinMesSet(temp_r3, var_r31); + HuWinMesWait(temp_r3); + if (var_r27 != 0) { + var_r28 = HuWinChoiceGet(temp_r3, 1); + if (arg0 == 5 && var_r28 == 0) { + HuWinMesSet(temp_r3, MAKE_MESSID(16, 78)); + HuWinMesWait(temp_r3); + var_r28 = HuWinChoiceGet(temp_r3, 1); + } + } + if (arg0 == 0xB) { + while (!(HuPadBtnDown[0] & 0x100)) { + HuPrcVSleep(); + } + } + HuWinExAnimOut(temp_r3); + HuWinExCleanup(temp_r3); + return var_r28; +} diff --git a/src/game/window.c b/src/game/window.c index 5fdb5680..9e51c867 100644 --- a/src/game/window.c +++ b/src/game/window.c @@ -185,7 +185,7 @@ static s32 winVoiceTbl[] = { 0x49 }; -s16 winPrio = 1000; +static s16 winPrio = 1000; void HuWindowInit(void) { s16 i; diff --git a/src/game/wipe.c b/src/game/wipe.c index 087c1260..99041ebd 100644 --- a/src/game/wipe.c +++ b/src/game/wipe.c @@ -1,6 +1,7 @@ #include "dolphin.h" #include "game/wipe.h" #include "game/memory.h" +#include "game/flag.h" extern s8 lbl_801D429C; @@ -110,7 +111,7 @@ void WipeExecAlways(void) void WipeCreate(s16 mode, s16 type, s16 duration) { WipeState *wipe; - if(_CheckFlag(0x1000B) && lbl_801D429C) { + if(_CheckFlag(FLAG_ID_MAKE(1, 11)) && lbl_801D429C) { return; } wipe = &wipeData;