diff --git a/config/GMPE01_00/rels/resultDll/symbols.txt b/config/GMPE01_00/rels/resultDll/symbols.txt index acded739..64910ff2 100644 --- a/config/GMPE01_00/rels/resultDll/symbols.txt +++ b/config/GMPE01_00/rels/resultDll/symbols.txt @@ -31,70 +31,70 @@ fn_1_927C = .text:0x0000927C; // type:function size:0x138 fn_1_93B4 = .text:0x000093B4; // type:function size:0x78 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 data:double -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 data:double -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 data:double -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 data:float -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 data:float -lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 data:float -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 data:double -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 data:double -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 data:double -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 data:double -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x8 data:double -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x8 data:double -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x8 data:double -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 data:float -lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x10 data:4byte -lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 data:float -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 data:float -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 data:float -lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 data:float -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x8 data:double -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 data:double -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 data:double -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 scope:local data:double +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 scope:local data:double +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 scope:local data:double +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 scope:local data:float +lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 scope:local data:float +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 scope:local data:float +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 scope:local data:float +lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 scope:local data:float +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x8 scope:local data:double +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 scope:local data:double +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 scope:local data:double +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 scope:local data:float lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 data:float lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 data:float @@ -137,20 +137,20 @@ lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data: lbl_1_data_0 = .data:0x00000000; // type:object size:0x2A4 lbl_1_data_2A4 = .data:0x000002A4; // type:object size:0xDC data:4byte lbl_1_data_380 = .data:0x00000380; // type:object size:0x2 data:2byte -lbl_1_data_382 = .data:0x00000382; // type:object size:0x26 data:string +lbl_1_data_382 = .data:0x00000382; // type:object size:0x26 scope:local data:string lbl_1_data_3A8 = .data:0x000003A8; // type:object size:0x18 lbl_1_data_3C0 = .data:0x000003C0; // type:object size:0x18 lbl_1_data_3D8 = .data:0x000003D8; // type:object size:0x20 lbl_1_data_3F8 = .data:0x000003F8; // type:object size:0x10 lbl_1_data_408 = .data:0x00000408; // type:object size:0x30 lbl_1_data_438 = .data:0x00000438; // type:object size:0x10 -lbl_1_data_448 = .data:0x00000448; // type:object size:0x8 +lbl_1_data_448 = .data:0x00000448; // type:object size:0x8 scope:local lbl_1_data_450 = .data:0x00000450; // type:object size:0x18 lbl_1_data_468 = .data:0x00000468; // type:object size:0x20 lbl_1_data_488 = .data:0x00000488; // type:object size:0x30 -lbl_1_data_4B8 = .data:0x000004B8; // type:object size:0x11 data:string -lbl_1_data_4C9 = .data:0x000004C9; // type:object size:0x11 data:string -lbl_1_data_4DA = .data:0x000004DA; // type:object size:0xB data:string +lbl_1_data_4B8 = .data:0x000004B8; // type:object size:0x11 scope:local data:string +lbl_1_data_4C9 = .data:0x000004C9; // type:object size:0x11 scope:local data:string +lbl_1_data_4DA = .data:0x000004DA; // type:object size:0xB scope:local data:string lbl_1_data_4E8 = .data:0x000004E8; // type:object size:0x270 lbl_1_data_758 = .data:0x00000758; // type:object size:0x28 lbl_1_data_780 = .data:0x00000780; // type:object size:0x70 diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 76969889..77ad7c84 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -972,14 +972,14 @@ SLSaveDataMake = .text:0x80058860; // type:function size:0x154 SLSaveDataInfoSet = .text:0x800589B4; // type:function size:0x218 SLCommonSet = .text:0x80058BCC; // type:function size:0x254 SLSaveBoard = .text:0x80058E20; // type:function size:0x8C -SLSaveBoardBackup = .text:0x80058EAC; // type:function size:0x8C +SLSaveBoardStory = .text:0x80058EAC; // type:function size:0x8C SLSave = .text:0x80058F38; // type:function size:0x380 SLCreateSaveWin = .text:0x800592B8; // type:function size:0xDC scope:local SLKillSaveWin = .text:0x80059394; // type:function size:0x48 scope:local SLLoad = .text:0x800593DC; // type:function size:0x110 SLLoadGameStat = .text:0x800594EC; // type:function size:0x38 SLLoadBoard = .text:0x80059524; // type:function size:0x1A0 -SLLoadBoardBackup = .text:0x800596C4; // type:function size:0x184 +SLLoadBoardStory = .text:0x800596C4; // type:function size:0x184 SLSerialNoGet = .text:0x80059848; // type:function size:0x28 SLSerialNoCheck = .text:0x80059870; // type:function size:0xA0 SLCheckSumCheck = .text:0x80059910; // type:function size:0x60 diff --git a/configure.py b/configure.py index 859c3d18..e02757d7 100644 --- a/configure.py +++ b/configure.py @@ -1053,7 +1053,7 @@ config.libs = [ Rel('resultDll', objects = { Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/resultDll/main.c"), + Object(Matching, "REL/resultDll/main.c"), Object(NonMatching, "REL/resultDll/battle.c"), Object(Matching, "REL/resultDll/datalist.c"), } diff --git a/include/game/gamework_data.h b/include/game/gamework_data.h index fa11d647..5b3b87e5 100644 --- a/include/game/gamework_data.h +++ b/include/game/gamework_data.h @@ -234,6 +234,11 @@ static inline void GWLuckyValueSet(s32 value) GWSystem.lucky_value = value; } +static inline s16 GWPlayerCoinBattleGet(s32 player) +{ + return GWPlayer[player].coins_battle; +} + static inline s16 GWPlayerCoinCollectGet(s32 player) { return GWPlayer[player].coin_collect; diff --git a/include/game/saveload.h b/include/game/saveload.h index d75df8af..97e26817 100644 --- a/include/game/saveload.h +++ b/include/game/saveload.h @@ -15,8 +15,8 @@ typedef struct save_buf_data { GameStat stat; SystemState system; PlayerState player[4]; - SystemState systemBackup; - PlayerState playerBackup[4]; + SystemState systemStory; + PlayerState playerStory[4]; } SaveBufData; typedef union save_buf_all { @@ -24,7 +24,12 @@ typedef union save_buf_all { u8 ATTRIBUTE_ALIGN(32) buf[SAVE_BUF_SIZE]; } SaveBufAll; +extern CARDFileInfo curFileInfo; extern SaveBufAll saveBuf; +extern u64 SLSerialNo; +extern s32 saveExecF; +extern u8 curBoxNo; +extern s16 curSlotNo; s32 SLFileOpen(char *fileName); s32 SLFileCreate(char *fileName, u32 size, void *addr); @@ -39,12 +44,12 @@ void SLSaveDataMake(s32 erase, OSTime *time); void SLSaveDataInfoSet(OSTime *time); void SLCommonSet(void); void SLSaveBoard(void); -void SLSaveBoardBackup(void); +void SLSaveBoardStory(void); s32 SLSave(void); s32 SLLoad(void); void SLLoadGameStat(void); void SLLoadBoard(void); -void SLLoadBoardBackup(void); +void SLLoadBoardStory(void); void SLSerialNoGet(void); BOOL SLSerialNoCheck(void); BOOL SLCheckSumCheck(void); diff --git a/src/REL/resultDll/main.c b/src/REL/resultDll/main.c index a9c1eacc..b7839e9f 100644 --- a/src/REL/resultDll/main.c +++ b/src/REL/resultDll/main.c @@ -10,6 +10,7 @@ #include "game/audio.h" #include "game/wipe.h" #include "game/pad.h" +#include "game/armem.h" #include "game/saveload.h" #include "game/gamework.h" #include "game/board/player.h" @@ -385,7 +386,7 @@ void fn_1_B78(void) lbl_1_bss_12[i][4] = HuSprCreate(anim2, 0, 0); HuSprGrpMemberSet(lbl_1_bss_3A[i], 4, lbl_1_bss_12[i][4]); HuSprPosSet(lbl_1_bss_3A[i], 4, 60.0f, -25.0f); - HuSprGrpPosSet(lbl_1_bss_3A[i], lbl_1_data_3D8[(i*2)], lbl_1_data_3D8[(i*2)+1]); + HuSprGrpPosSet(lbl_1_bss_3A[i], lbl_1_data_438[(i*2)], lbl_1_data_438[(i*2)+1]); fn_1_3CAC(lbl_1_bss_3A[i], 9); HuSprGrpScaleSet(lbl_1_bss_3A[i], 0.0f, 0.0f); } @@ -687,7 +688,7 @@ void fn_1_2ADC(void) temp_r27 = temp_r28-(i*20); if(temp_r27 <= 20) { if(temp_r27 <= 10) { - HuSprScaleSet(lbl_1_bss_52, i, 1.0f, sin(M_PI*(9.0f*temp_r27)/180.0)); + HuSprScaleSet(lbl_1_bss_52, i, 1.0f, cos(M_PI*(9.0f*temp_r27)/180.0)); } else { HuSprAttrSet(lbl_1_bss_52, i, 4); HuSprAttrReset(lbl_1_data_380, i, 4); @@ -841,4 +842,459 @@ void fn_1_3E08(void) } } } +} + +s32 lbl_1_data_450[] = { + DATADIR_W01, + DATADIR_W02, + DATADIR_W03, + DATADIR_W04, + DATADIR_W05, + DATADIR_W06 +}; + +void fn_1_3FD8(void) +{ + s32 status; + u32 ardma; + if(!_CheckFlag(0x10000)) { + lbl_1_bss_178 = 1; + HuPrcEnd(); + while(1) { + HuPrcVSleep(); + } + } + status = HuDataDirReadAsync(DATADIR_BOARD); + if(status != -1) { + while(!HuDataGetAsyncStat(status)) { + HuPrcVSleep(); + } + } + ardma = HuAR_MRAMtoARAM(DATADIR_BOARD); + if(ardma) { + while(HuARDMACheck()) { + HuPrcVSleep(); + } + } + HuDataDirClose(DATADIR_BOARD); + status = HuDataDirReadAsync(lbl_1_data_450[GWSystem.board]); + if(status != -1) { + while(!HuDataGetAsyncStat(status)) { + HuPrcVSleep(); + } + } + lbl_1_bss_178 = 1; + HuPrcEnd(); + while(1) { + HuPrcVSleep(); + } +} + +void fn_1_40DC(void) +{ + s16 i; + s16 sp8[5]; + fn_1_423C(sp8); + sp8[lbl_1_bss_172] += sp8[4]; + for(i=0; i<4; i++) { + GWCoinsAdd(i, sp8[i]); + GWPlayerCoinWinSet(i, 0); + GWPlayerCoinCollectSet(i, 0); + if(mgInfoTbl[GWSystem.mg_next].type != 4) { + GWPlayer[i].coins_mg += sp8[i]; + if(GWPlayer[i].coins_mg > 9999) { + GWPlayer[i].coins_mg = 9999; + } + } + } +} + +void fn_1_423C(s16 *data) +{ + s16 i; + s32 coin; + u32 mul_coin; + u32 coin_battle; + s16 temp_r26; + s16 mgtype; + float sp10[4]; + s16 sp8[4]; + mgtype = mgInfoTbl[GWSystem.mg_next].type; + switch(mgtype) { + case 4: + temp_r26 = 0; + for(i=coin_battle=0; i<4; i++) { + coin_battle += GWPlayerCoinBattleGet(i); + } + sp8[0] = sp8[1] = sp8[2] = sp8[3] = 0; + for(i=0; i<4; i++) { + sp8[GWPlayerCoinWinGet(i)]++; + } + sp10[0] = sp10[1] = sp10[2] = sp10[3] = 0; + if(sp8[0] == 1 && sp8[1] == 1 && sp8[2] == 1) { + sp10[0] = 0.7f; + sp10[1] = 0.3f; + } else if(sp8[0] ==2) { + sp10[0] = 0.5f; + } else if(sp8[0] == 3) { + sp10[0] = 0.3333333f; + } else if(sp8[0] == 1 && sp8[1] == 2) { + sp10[0] = 0.6f; + sp10[1] = 0.2f; + } else if(sp8[0] == 1 && sp8[1] == 3) { + sp10[0] = 0.7f; + sp10[1] = 0.1f; + } else if(sp8[0] == 1 && sp8[1] == 1 && sp8[2] == 2) { + sp10[0] = 0.7f; + sp10[1] = 0.3f; + } else if(sp8[0] == 4) { + sp10[0] = 0.25f; + } else { + temp_r26 = 1; + } + for(i=coin=0; i<4; i++) { + if(!temp_r26) { + mul_coin = coin_battle*sp10[GWPlayerCoinWinGet(i)]; + } else { + mul_coin = GWPlayerCoinBattleGet(i); + } + data[i] = mul_coin; + coin += mul_coin; + } + if(coin < coin_battle) { + data[4] = coin_battle-coin; + } else { + data[4] = 0; + } + break; + + default: + for(i=0; i<4; i++) { + coin = GWPlayerCoinWinGet(i)+GWPlayerCoinCollectGet(i); + mul_coin = GWLuckyValueGet(); + if(mul_coin == 0) { + mul_coin = 1; + } + coin *= mul_coin; + data[i] = coin; + } + break; + } +} + +void fn_1_461C(void) +{ + s16 sprite; + Hu3DAllKill(); + HuSprClose(); + HuSprInit(); + espInit(); + HuPrcVSleep(); + sprite = espEntry(0x860020, 5000, 0); + espPosSet(sprite, 288.0, 240.0); + espAttrReset(sprite, 4); + Hu3DBGColorSet(0, 0, 0); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20); + while(WipeStatGet()) { + HuPrcVSleep(); + } + if(GWSaveModeGet() == 2) { + GWSystem.save_mode = 1; + } + if(GWPartyGet() == 1) { + GWGameStat.party_continue = 1; + SLSaveBoard(); + } else { + GWGameStat.story_continue = 1; + SLSaveBoardStory(); + } + SLCommonSet(); + if(SLSave()) { + saveExecF = 1; + } else { + GWSystem.save_mode = 1; + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 20); + while(WipeStatGet()) { + HuPrcVSleep(); + } +} + +s32 lbl_1_data_468[] = { + DATADIR_MARIOMDL1, + DATADIR_LUIGIMDL1, + DATADIR_PEACHMDL1, + DATADIR_YOSHIMDL1, + DATADIR_WARIOMDL1, + DATADIR_DONKEYMDL1, + DATADIR_DAISYMDL1, + DATADIR_WALUIGIMDL1 +}; + +Vec lbl_1_data_488[] = { + { 160, 185, 500 }, + { 240, 185, 500 }, + { 160, 355, 500 }, + { 240, 355, 500 }, +}; + +void fn_1_47FC(void) +{ + s16 temp_r31; + s16 temp_r24; + s16 temp_r21; + s16 temp_r20; + s16 temp_r19; + s16 temp_r18; + s16 temp_r17; + Vec sp40; + Vec sp34; + s16 sp2C[4]; + s16 sp28[2]; + s16 sp24[2]; + s16 sp20[2]; + s16 sp1C[2]; + s16 sp18[2]; + AnimData *sp14; + s32 sp10; + s16 spC; + s16 spA; + s16 sp8; + WipeColorSet(0, 0, 0); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 10); + while(WipeStatGet()) { + HuPrcVSleep(); + } + espAttrSet(lbl_1_bss_1A1A[0], 4); + espAttrSet(lbl_1_bss_1A1A[1], 4); + for(temp_r31=0; temp_r31<2; temp_r31++) { + Hu3DModelAttrSet(lbl_1_bss_1A9C[temp_r31+6], 1); + Hu3DModelAttrSet(lbl_1_bss_1A9C[temp_r31+10], 1); + } + for(temp_r31=0; temp_r31<4; temp_r31++) { + espAttrSet(lbl_1_bss_1A1A[temp_r31+6], 4); + } + for(temp_r31=4; temp_r31<8; temp_r31++) { + Hu3DModelAttrSet(lbl_1_bss_158[temp_r31], 1); + } + for(temp_r31=4; temp_r31<8; temp_r31++) { + HuSprGrpTPLvlSet(lbl_1_bss_CE[temp_r31], 0.0f); + } + for(temp_r31=0; temp_r31<4; temp_r31++) { + for(temp_r19=0; temp_r19<4; temp_r19++) { + Hu3DModelAttrSet(lbl_1_bss_5C[GWPlayerCfg[temp_r31].character][temp_r19], 1); + } + Hu3DModelAttrSet(lbl_1_bss_54[temp_r31], 1); + } + HuSprGrpKill(lbl_1_bss_9C); + HuSprGrpKill(lbl_1_bss_52); + if(lbl_1_data_380 != -1) { + HuSprGrpKill(lbl_1_data_380); + } + sp28[0] = sp28[1] = 0; + sp24[0] = sp24[1] = 0; + sp1C[0] = 0; + sp1C[1] = 2; + for(temp_r31=0; temp_r31<4; temp_r31++) { + temp_r17 = GWPlayer[temp_r31].team; + sp28[temp_r17] += BoardPlayerCoinsGet(temp_r31); + sp24[temp_r17] += GWStarsGet(temp_r31); + sp2C[sp1C[temp_r17]++] = GWPlayerCfg[temp_r31].character; + } + sp18[0] = 0; + sp18[1] = 1; + if(sp24[0] > sp24[1]) { + lbl_1_bss_8 = 0; + } else { + if(sp24[0] == sp24[1]) { + if(sp28[0] > sp28[1]) { + lbl_1_bss_8 =0; + } else if(sp28[0] == sp28[1]) { + sp18[0] = sp18[1] = 0; + lbl_1_bss_8 = 0; + } else { + lbl_1_bss_8 = 1; + } + } else { + lbl_1_bss_8 = 1; + } + } + HuSprAttrReset(lbl_1_bss_170, 0, 4); + HuSprAttrReset(lbl_1_bss_170, 1, 4); + HuSprPosSet(lbl_1_bss_170, 1, 0, -180); + HuSprAttrReset(lbl_1_bss_170, 2, 4); + HuSprAttrReset(lbl_1_bss_170, 3, 4); + if(lbl_1_bss_8 == 0) { + sp20[0] = -55; + sp20[1] = 115; + } else { + sp20[0] = 115; + sp20[1] = -55; + temp_r24 = sp2C[0]; + sp2C[0] = sp2C[2]; + sp2C[2] = temp_r24; + temp_r24 = sp2C[1]; + sp2C[1] = sp2C[3]; + sp2C[3] = temp_r24; + temp_r24 = sp28[0]; + sp28[0] = sp28[1]; + sp28[1] = temp_r24; + temp_r24 = sp24[0]; + sp24[0] = sp24[1]; + sp24[1] = temp_r24; + } + HuSprPosSet(lbl_1_bss_170, 2, 0, sp20[0]); + HuSprPosSet(lbl_1_bss_170, 3, 0, sp20[1]); + HuSprGrpPosSet(lbl_1_bss_170, 288, 240); + for(temp_r31=0; temp_r31<4; temp_r31++) { + if(temp_r31 < 2) { + sp10 = 0; + } else { + sp10 = 1; + } + temp_r18 = lbl_1_bss_5C[sp2C[temp_r31]][sp10]; + Hu3DAnimCreate(lbl_1_bss_E4[sp2C[temp_r31]][0], temp_r18, "ys22"); + Hu3DModelAttrReset(temp_r18, 1); + Hu3D2Dto3D(&lbl_1_data_488[temp_r31], 1, &sp40); + Hu3DModelPosSetV(temp_r18, &sp40); + Hu3DModelRotSet(temp_r18, 0, 0, 0); + sp34 = lbl_1_data_488[temp_r31]; + sp34.y += 5.0f; + sp34.x += 3.0f; + sp34.z += 200.0f; + Hu3D2Dto3D(&sp34, 1, &sp40); + Hu3DModelPosSetV(lbl_1_bss_168[temp_r31], &sp40); + } + spC = HuSprGrpCreate(2); + for(temp_r31=0; temp_r31<2; temp_r31++) { + sp14 = HuSprAnimReadFile(0x6F0016+sp18[temp_r31]); + spA = HuSprCreate(sp14, temp_r31, 0); + HuSprGrpMemberSet(spC, temp_r31, spA); + HuSprPosSet(spC, temp_r31, (lbl_1_data_488[temp_r31*2].x)-80.0f, lbl_1_data_488[temp_r31*2].y); + sp34 = lbl_1_data_488[temp_r31*2]; + sp34.x += 180.0f; + sp34.y -= 35.0f; + Hu3D2Dto3D(&sp34, 1, &sp40); + Hu3DModelPosSetV(lbl_1_bss_1A9C[temp_r31+4], &sp40); + sp34.y += 5.0f; + sp34.x += 3.0f; + sp34.z += 200.0f; + Hu3D2Dto3D(&sp34, 1, &sp40); + Hu3DModelPosSetV(lbl_1_bss_158[temp_r31*2], &sp40); + espPosSet(lbl_1_bss_1A1A[(temp_r31*2)+2], 230.0f+lbl_1_data_488[temp_r31*2].x, lbl_1_data_488[temp_r31*2].y-35.0f); + fn_1_3B50(lbl_1_bss_CE[temp_r31*2], sp24[temp_r31]); + HuSprGrpPosSet(lbl_1_bss_CE[temp_r31*2], 320.0f+lbl_1_data_488[temp_r31*2].x, lbl_1_data_488[temp_r31*2].y-35.0f); + sp34 = lbl_1_data_488[temp_r31*2]; + sp34.x += 180.0f; + sp34.y += 35.0f; + Hu3D2Dto3D(&sp34, 1, &sp40); + Hu3DModelPosSetV(lbl_1_bss_1A9C[temp_r31+8], &sp40); + sp34.y += 5.0f; + sp34.x += 3.0f; + sp34.z += 200.0f; + Hu3D2Dto3D(&sp34, 1, &sp40); + Hu3DModelPosSetV(lbl_1_bss_158[(temp_r31*2)+1], &sp40); + espPosSet(lbl_1_bss_1A1A[(temp_r31*2)+3], 230.0f+lbl_1_data_488[temp_r31*2].x, 35.0f+lbl_1_data_488[temp_r31*2].y); + fn_1_3B50(lbl_1_bss_CE[(temp_r31*2)+1], sp28[temp_r31]); + HuSprGrpPosSet(lbl_1_bss_CE[(temp_r31*2)+1], 320.0f+lbl_1_data_488[temp_r31*2].x, 35.0f+lbl_1_data_488[temp_r31*2].y); + } + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10); + while(WipeStatGet()) { + HuPrcVSleep(); + } + temp_r21 = HuWinCreate(-10000.0f, 400.0f, 320, 40, 0); + HuWinMesSpeedSet(temp_r21, 0); + HuWinBGTPLvlSet(temp_r21, 0); + HuWinPriSet(temp_r21, 5); + HuWinAttrSet(temp_r21, 0x800); + HuWinMesSet(temp_r21, 0x240007); + HuPrcSleep(4); + temp_r31 = 0; + while(1) { + if(lbl_1_bss_4 && temp_r31 > 120) { + break; + } + for(temp_r20=sp8=0; temp_r20<4; temp_r20++) { + if(!GWPlayerCfg[temp_r20].iscom) { + sp8 |= HuPadBtnDown[GWPlayerCfg[temp_r20].pad_idx]; + } + } + if(sp8 & PAD_BUTTON_A) { + HuAudFXPlay(28); + break; + } + HuPrcVSleep(); + temp_r31++; + } + HuWinKill(temp_r21); +} + +void fn_1_5880(omObjData *object) +{ + Vec pos; + Vec offset; + Vec dir; + Vec y_offset; + + f32 z_rot; + s8 stick_pos; + + if(HuPadBtn[0] & PAD_BUTTON_UP) { + CRot.x += 2.0f; + } + if(HuPadBtn[0] & PAD_BUTTON_DOWN) { + CRot.x -= 2.0f; + } + if(HuPadBtn[0] & PAD_BUTTON_LEFT) { + CRot.y += 2.0f; + } + if(HuPadBtn[0] & PAD_BUTTON_RIGHT) { + CRot.y -= 2.0f; + } + if(HuPadBtnDown[0] & PAD_BUTTON_B) { + OSReport("CRot %f,%f,%f\n", CRot.x, CRot.y, CRot.z); + OSReport("Center %f,%f,%f\n", Center.x, Center.y, Center.z); + OSReport("CZoom %f\n", CZoom); + } + + CZoom += HuPadTrigL[0] / 2; + CZoom -= HuPadTrigR[0] / 2; + + pos.x = Center.x + (CZoom * (sin((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0))); + pos.y = (Center.y + (CZoom * -sin((M_PI * CRot.x) / 180.0))); + pos.z = (Center.z + (CZoom * (cos((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0)))); + offset.x = Center.x - pos.x; + offset.y = Center.y - pos.y; + offset.z = Center.z - pos.z; + dir.x = (sin((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); + dir.y = cos((M_PI * CRot.x) / 180.0); + dir.z = (cos((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); + z_rot = CRot.z; + y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cos((M_PI * z_rot) / 180.0)) + + dir.y * (offset.x * offset.y * (1.0f - cos((M_PI * z_rot) / 180.0)) - offset.z * sin((M_PI * z_rot) / 180.0)) + + dir.z * (offset.x * offset.z * (1.0f - cos((M_PI * z_rot) / 180.0)) + offset.y * sin((M_PI * z_rot) / 180.0)); + + y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cos((M_PI * z_rot) / 180.0)) + + dir.x * (offset.x * offset.y * (1.0f - cos((M_PI * z_rot) / 180.0)) + offset.z * sin((M_PI * z_rot) / 180.0)) + + dir.z * (offset.y * offset.z * (1.0f - cos((M_PI * z_rot) / 180.0)) - offset.x * sin((M_PI * z_rot) / 180.0)); + + y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cos((M_PI * z_rot) / 180.0)) + + (dir.x * (offset.x * offset.z * (1.0 - cos((M_PI * z_rot) / 180.0)) - offset.y * sin((M_PI * z_rot) / 180.0)) + + dir.y * (offset.y * offset.z * (1.0 - cos((M_PI * z_rot) / 180.0)) + offset.x * sin((M_PI * z_rot) / 180.0))); + + PSVECCrossProduct(&dir, &offset, &offset); + PSVECNormalize(&offset, &offset); + stick_pos = (HuPadSubStkX[0] & 0xF8); + if (stick_pos != 0) { + Center.x += 0.05f * (offset.x * stick_pos); + Center.y += 0.05f * (offset.y * stick_pos); + Center.z += 0.05f * (offset.z * stick_pos); + } + PSVECNormalize(&y_offset, &offset); + stick_pos = -(HuPadSubStkY[0] & 0xF8); + if (stick_pos != 0) { + Center.x += 0.05f * (offset.x * stick_pos); + Center.y += 0.05f * (offset.y * stick_pos); + Center.z += 0.05f * (offset.z * stick_pos); + } } \ No newline at end of file diff --git a/src/game/kerent.c b/src/game/kerent.c index fb99d976..bbde6772 100644 --- a/src/game/kerent.c +++ b/src/game/kerent.c @@ -578,11 +578,11 @@ void SLCurSlotNoSet(void); void SLSaveDataMake(void); void SLCommonSet(void); void SLSaveBoard(void); -void SLSaveBoardBackup(void); +void SLSaveBoardStory(void); void SLSave(void); void SLLoadGameStat(void); void SLLoadBoard(void); -void SLLoadBoardBackup(void); +void SLLoadBoardStory(void); void SLLoad(void); void SLCurBoxNoSet(void); void SLSaveFlagSet(void); @@ -1595,11 +1595,11 @@ extern void _kerjmp_SLCurSlotNoSet(void); extern void _kerjmp_SLSaveDataMake(void); extern void _kerjmp_SLCommonSet(void); extern void _kerjmp_SLSaveBoard(void); -extern void _kerjmp_SLSaveBoardBackup(void); +extern void _kerjmp_SLSaveBoardStory(void); extern void _kerjmp_SLSave(void); extern void _kerjmp_SLLoadGameStat(void); extern void _kerjmp_SLLoadBoard(void); -extern void _kerjmp_SLLoadBoardBackup(void); +extern void _kerjmp_SLLoadBoardStory(void); extern void _kerjmp_SLLoad(void); extern void _kerjmp_SLCurBoxNoSet(void); extern void _kerjmp_SLSaveFlagSet(void); @@ -3195,16 +3195,16 @@ asm void _kerent(void) { b SLCommonSet entry _kerjmp_SLSaveBoard b SLSaveBoard - entry _kerjmp_SLSaveBoardBackup - b SLSaveBoardBackup + entry _kerjmp_SLSaveBoardStory + b SLSaveBoardStory entry _kerjmp_SLSave b SLSave entry _kerjmp_SLLoadGameStat b SLLoadGameStat entry _kerjmp_SLLoadBoard b SLLoadBoard - entry _kerjmp_SLLoadBoardBackup - b SLLoadBoardBackup + entry _kerjmp_SLLoadBoardStory + b SLLoadBoardStory entry _kerjmp_SLLoad b SLLoad entry _kerjmp_SLCurBoxNoSet diff --git a/src/game/saveload.c b/src/game/saveload.c index 2859f33a..de336950 100644 --- a/src/game/saveload.c +++ b/src/game/saveload.c @@ -12,7 +12,7 @@ #include "stddef.h" #define SAVE_GET_PLAYER(player_idx) &saveBuf.buf[((player_idx)*sizeof(PlayerState))+offsetof(SaveBufData, player)] -#define SAVE_GET_PLAYER_BACKUP(player_idx) &saveBuf.buf[((player_idx)*sizeof(PlayerState))+offsetof(SaveBufData, playerBackup)] +#define SAVE_GET_PLAYER_STORY(player_idx) &saveBuf.buf[((player_idx)*sizeof(PlayerState))+offsetof(SaveBufData, playerStory)] static s16 SLCreateSaveWin(void); static void SLKillSaveWin(void); @@ -319,12 +319,12 @@ void SLSaveBoard(void) { } } -void SLSaveBoardBackup(void) { +void SLSaveBoardStory(void) { s16 i; - memcpy(&saveBuf.data.systemBackup, &GWSystem, sizeof(SystemState)); + memcpy(&saveBuf.data.systemStory, &GWSystem, sizeof(SystemState)); for (i = 0; i < 4; i++) { - memcpy(SAVE_GET_PLAYER_BACKUP(i), &GWPlayer[i], sizeof(PlayerState)); + memcpy(SAVE_GET_PLAYER_STORY(i), &GWPlayer[i], sizeof(PlayerState)); } } @@ -470,12 +470,12 @@ void SLLoadBoard(void) { } } -void SLLoadBoardBackup(void) { +void SLLoadBoardStory(void) { s16 i; - memcpy(&GWSystem, &saveBuf.data.systemBackup, 0xDC); + memcpy(&GWSystem, &saveBuf.data.systemStory, 0xDC); for (i = 0; i < 4; i++) { - memcpy(&GWPlayer[i], SAVE_GET_PLAYER_BACKUP(i), sizeof(PlayerState)); + memcpy(&GWPlayer[i], SAVE_GET_PLAYER_STORY(i), sizeof(PlayerState)); GWPlayerCfg[i].character = GWPlayer[i].character; GWPlayerCfg[i].pad_idx = GWPlayer[i].port; GWPlayerCfg[i].diff = GWPlayer[i].diff;