summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrakxo <87568477+Prakxo@users.noreply.github.com>2024-05-21 18:21:23 +0200
committerGitHub <noreply@github.com>2024-05-21 09:21:23 -0700
commit8f73c61ec5b1505582d9d83aea99adff718a78e3 (patch)
tree977c8fab65f93d351fdc2f091957398f9b0e87b2
parent448405671db5a0c0ffd5d62c04c333d7e3b4e7fc (diff)
second_game OK (#190)
-rw-r--r--include/69CB30.h13
-rw-r--r--include/game.h2
-rw-r--r--include/m_private.h4
-rw-r--r--include/padmgr.h2
-rw-r--r--include/sys_math.h2
-rw-r--r--linker_scripts/jp/symbol_addrs_code.txt2
-rw-r--r--src/code/m_private.c2
-rw-r--r--src/overlays/gamestates/ovl_second_game/second_game.c44
-rw-r--r--yamls/jp/overlays.yaml2
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