diff options
| author | Prakxo <87568477+Prakxo@users.noreply.github.com> | 2024-05-21 18:21:23 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-21 09:21:23 -0700 |
| commit | 8f73c61ec5b1505582d9d83aea99adff718a78e3 (patch) | |
| tree | 977c8fab65f93d351fdc2f091957398f9b0e87b2 | |
| parent | 448405671db5a0c0ffd5d62c04c333d7e3b4e7fc (diff) | |
second_game OK (#190)
| -rw-r--r-- | include/69CB30.h | 13 | ||||
| -rw-r--r-- | include/game.h | 2 | ||||
| -rw-r--r-- | include/m_private.h | 4 | ||||
| -rw-r--r-- | include/padmgr.h | 2 | ||||
| -rw-r--r-- | include/sys_math.h | 2 | ||||
| -rw-r--r-- | linker_scripts/jp/symbol_addrs_code.txt | 2 | ||||
| -rw-r--r-- | src/code/m_private.c | 2 | ||||
| -rw-r--r-- | src/overlays/gamestates/ovl_second_game/second_game.c | 44 | ||||
| -rw-r--r-- | yamls/jp/overlays.yaml | 2 |
9 files changed, 62 insertions, 11 deletions
diff --git a/include/69CB30.h b/include/69CB30.h index dc18253..0964515 100644 --- a/include/69CB30.h +++ b/include/69CB30.h @@ -6,7 +6,12 @@ struct Animal_c; struct PrivateInfo; -s32 mCPk_PakOpen(void* arg0, s32 arg1); +typedef struct PakInfo { + /* 0x00 */ UNK_TYPE1 unk_00[0x70]; + /* 0x70 */ s32 unk_70; +} PakInfo; // size >= 0x70 + +s32 mCPk_PakOpen(PakInfo* info, s32 arg1); // void func_80078EB4_jp(); // void func_80078EE0_jp(); // void func_80078F08_jp(); @@ -20,8 +25,8 @@ s32 mCPk_PakOpen(void* arg0, s32 arg1); // void func_800792FC_jp(); // void func_80079378_jp(); // void func_800793A8_jp(); -s32 mCPk_SavePak(struct PrivateInfo*, struct Animal_c*, void*); -s32 func_8007942C_jp(struct PrivateInfo*, struct Animal_c*, void*); +s32 mCPk_SavePak(struct PrivateInfo*, struct Animal_c*, PakInfo*); +s32 func_8007942C_jp(struct PrivateInfo*, struct Animal_c*, PakInfo*); // void func_800794E4_jp(); // void func_8007967C_jp(); // void func_80079708_jp(); @@ -40,7 +45,7 @@ s32 func_8007942C_jp(struct PrivateInfo*, struct Animal_c*, void*); // void func_80079EDC_jp(); // void func_80079F44_jp(); // void func_8007A008_jp(); -void* mCPk_get_pkinfo(void); +PakInfo* mCPk_get_pkinfo(void); // void func_8007A080_jp(); #endif diff --git a/include/game.h b/include/game.h index 21d67dc..7251b80 100644 --- a/include/game.h +++ b/include/game.h @@ -56,7 +56,7 @@ typedef struct Game { /* 0x88 */ GameAlloc alloc; /* 0x9C */ u8 unk_9C; /* 0x9D */ u8 unk_9D; - /* 0x9E */ UNK_TYPE1 unk9E[0x1]; + /* 0x9E */ s8 unk9E; /* 0x9F */ u8 running; /* 0xA0 */ s32 frameCounter; /* 0xA4 */ UNK_TYPE1 unk_A4[0x4]; diff --git a/include/m_private.h b/include/m_private.h index 9d9e20a..d7e0855 100644 --- a/include/m_private.h +++ b/include/m_private.h @@ -9,6 +9,8 @@ #include "m_museum.h" #include "unk.h" +struct PakInfo; + #define mPr_FOREIGN_MAP_COUNT 8 #define mPr_INVENTORY_MAIL_COUNT 10 #define PLAYER_NUM 4 @@ -124,7 +126,7 @@ s16 mPr_GetMoneyPower(void); s16 mPr_GetGoodsPower(void); s32 mPr_CheckMuseumAddress(PrivateInfo* priv); s32 mPr_CheckMuseumInfoMail(PrivateInfo* priv); -s32 mPr_LoadPak_and_SetPrivateInfo2(u8 player, void* pak); +s32 mPr_LoadPak_and_SetPrivateInfo2(u8 player, struct PakInfo* pak); void mPr_ClearMotherMailInfo(PrivateMotherMail* motherMail); s32 mPr_GetMotherMailPaperType(s32 month, s32 day); void mPr_GetMotherMail(Mail_c* mail, PersonalID_c* pid, u16 present, s32 stationery, s32 mailNumber); diff --git a/include/padmgr.h b/include/padmgr.h index af1220f..2eba2ee 100644 --- a/include/padmgr.h +++ b/include/padmgr.h @@ -52,7 +52,7 @@ void padmgr_ClearPadData(Input inputs[4]); // void padmgr_Init(); // void func_800D763C_jp(); // void func_800D765C_jp(); -// void func_800D7678_jp(); +s32 padmgr_isConnectedAnyPak(s32 arg0); extern Padmgr padmgr_class; diff --git a/include/sys_math.h b/include/sys_math.h index 599e94f..31e986f 100644 --- a/include/sys_math.h +++ b/include/sys_math.h @@ -13,7 +13,7 @@ #define RANDOM2(n) ((s32)RANDOM_F2(n)) // void reverse_u32(); -// void init_rnd(); +void init_rnd(void); // void ffact(); // void ifact(); // void powi(); diff --git a/linker_scripts/jp/symbol_addrs_code.txt b/linker_scripts/jp/symbol_addrs_code.txt index 1db2fc8..c53d247 100644 --- a/linker_scripts/jp/symbol_addrs_code.txt +++ b/linker_scripts/jp/symbol_addrs_code.txt @@ -3517,7 +3517,7 @@ padmgr_MainProc = 0x800D73F0; // type:func padmgr_Init = 0x800D753C; // type:func func_800D763C_jp = 0x800D763C; // type:func func_800D765C_jp = 0x800D765C; // type:func -func_800D7678_jp = 0x800D7678; // type:func +padmgr_isConnectedAnyPak = 0x800D7678; // type:func func_800D76A0_jp = 0x800D76A0; // type:func func_800D7794_jp = 0x800D7794; // type:func func_800D78F4_jp = 0x800D78F4; // type:func diff --git a/src/code/m_private.c b/src/code/m_private.c index 7560a8d..3c816d4 100644 --- a/src/code/m_private.c +++ b/src/code/m_private.c @@ -663,7 +663,7 @@ s32 mPr_CheckMuseumInfoMail(PrivateInfo* priv) { return res; } -s32 mPr_LoadPak_and_SetPrivateInfo2(u8 player, void* pak) { +s32 mPr_LoadPak_and_SetPrivateInfo2(u8 player, PakInfo* pak) { PrivateInfo* priv; s32 res = FALSE; s32 save = func_8007942C_jp(&g_foreigner_private, mNpc_GetInAnimalP(), pak); diff --git a/src/overlays/gamestates/ovl_second_game/second_game.c b/src/overlays/gamestates/ovl_second_game/second_game.c new file mode 100644 index 0000000..3fe3dcd --- /dev/null +++ b/src/overlays/gamestates/ovl_second_game/second_game.c @@ -0,0 +1,44 @@ +#include "second_game.h" +#include "overlays/gamestates/ovl_trademark/m_trademark.h" +#include "overlays/gamestates/ovl_cpedit/m_cpedit.h" +#include "69CB30.h" +#include "m_common_data.h" +#include "padmgr.h" +#include "sys_math.h" +#include "attributes.h" + +void second_game_main(Game* game) { + PakInfo* info = mCPk_get_pkinfo(); + s32 mempak; + Game_SecondGame* secondGame = (Game_SecondGame*)game; + + if (mCPk_PakOpen(info, 0) == 0) { + if (info->unk_70 == 1 || info->unk_70 == 11) { + mempak = 0; + } else { + mempak = 1; + } + } else { + mempak = 1; + } + + if ((chkButton(START_BUTTON) != 0) && (mempak != 0)) { + STOP_GAMESTATE(&secondGame->state); + SET_NEXT_GAMESTATE(&secondGame->state, cpedit_init, sizeof(Game_CPEdit)); + } else { + STOP_GAMESTATE(&secondGame->state); + SET_NEXT_GAMESTATE(&secondGame->state, trademark_init, sizeof(Game_Trademark)); + } + + secondGame->state.unk9E = 1; +} + +void second_game_cleanup(UNUSED Game* game) { +} + +void second_game_init(Game* game) { + game->main = second_game_main; + game->destroy = second_game_cleanup; + init_rnd(); + common_data.unk_10AB0 = padmgr_isConnectedAnyPak(0) != 0; +} diff --git a/yamls/jp/overlays.yaml b/yamls/jp/overlays.yaml index 858b789..47dad0f 100644 --- a/yamls/jp/overlays.yaml +++ b/yamls/jp/overlays.yaml @@ -65,7 +65,7 @@ compress: True bss_size: 0x0 subsegments: - - [0x743B70, asm, overlays/gamestates/ovl_second_game/second_game] + - [0x743B70, c, overlays/gamestates/ovl_second_game/second_game] - name: ovl_second_game_reloc type: code start: 0x743CA0 |
