summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Hensley <hensley.derek58@gmail.com>2025-01-19 08:05:03 -0800
committerGitHub <noreply@github.com>2025-01-19 09:05:03 -0700
commit6baf5141be2c6ea17eafe2f1350dc7a1c0d65b85 (patch)
treecf91c1766fc5b0badc297cf32d7157393f4f36a3
parenta9e52e5a551e05de85e6ecf1d73ffbd455d0d3d0 (diff)
m_cpak OK (#238)
* Yaml setup * mCPk_InitPak * mCPk_get_pkinfo * mCPk_PakOpen * func_80079080_jp * mCPk_SavePak * func_8007919C_jp * func_80079378_jp * func_8007920C_jp * func_80078EE0_jp * func_80078EB4_jp * func_8007942C_jp * func_800792FC_jp * func_800793A8_jp * func_80079D00_jp * func_80079BF8_jp * func_80079B28_jp * func_80079EA4_jp * func_800794E4_jp * func_80078F08_jp * func_80079030_jp * func_80078FE8_jp * func_8007967C_jp * func_80079708_jp * func_80079760_jp * func_80079838_jp * func_800798DC_jp * func_80079A24_jp * func_80079AAC_jp * func_80079E54_jp * func_80079D50_jp * func_80079E14_jp * func_80079EDC_jp * func_8007A008_jp * func_80079F44_jp * func_8007A080_jp * func_80078F34_jp * Some cleanup * m_cpak
-rw-r--r--include/69CB30.h52
-rw-r--r--include/6B8F20.h2
-rw-r--r--include/6F12E0.h22
-rw-r--r--include/code_variables.h10
-rw-r--r--include/m_cpak.h90
-rw-r--r--include/m_flashrom.h6
-rw-r--r--linker_scripts/jp/symbol_addrs_code.txt15
-rw-r--r--src/code/m_cpak.c601
-rw-r--r--src/code/m_private.c2
-rw-r--r--src/code/m_start_data_init.c2
-rw-r--r--src/overlays/gamestates/ovl_save_menu/save_menu.c2
-rw-r--r--src/overlays/gamestates/ovl_second_game/second_game.c4
-rw-r--r--src/overlays/gamestates/ovl_trademark/m_trademark.c2
-rw-r--r--yamls/jp/code.yaml8
14 files changed, 723 insertions, 95 deletions
diff --git a/include/69CB30.h b/include/69CB30.h
deleted file mode 100644
index 8e5d298..0000000
--- a/include/69CB30.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef C_69CB30_H
-#define C_69CB30_H
-
-#include "ultra64.h"
-#include "unk.h"
-
-struct Animal_c;
-struct PrivateInfo;
-
-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();
-// void func_80078F34_jp();
-// void func_80078FE8_jp();
-// void func_80079030_jp();
-// void func_80079080_jp();
-UNK_RET mCPk_InitPak(UNK_TYPE arg0);
-// void func_8007919C_jp();
-// void func_8007920C_jp();
-// void func_800792FC_jp();
-// void func_80079378_jp();
-// void func_800793A8_jp();
-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();
-// void func_80079760_jp();
-// void func_80079838_jp();
-// void func_800798DC_jp();
-// void func_80079A24_jp();
-// void func_80079AAC_jp();
-// void func_80079B28_jp();
-// void func_80079BF8_jp();
-// void func_80079D00_jp();
-// void func_80079D50_jp();
-// void func_80079E14_jp();
-// void func_80079E54_jp();
-// void func_80079EA4_jp();
-// void func_80079EDC_jp();
-// void func_80079F44_jp();
-// void func_8007A008_jp();
-PakInfo* mCPk_get_pkinfo(void);
-// void func_8007A080_jp();
-
-#endif
diff --git a/include/6B8F20.h b/include/6B8F20.h
index e14aba4..a829368 100644
--- a/include/6B8F20.h
+++ b/include/6B8F20.h
@@ -36,6 +36,6 @@ void func_80095414_jp(void);
// void func_800965A8_jp();
// void func_800965F4_jp();
// void func_800966D8_jp();
-// void func_800966E0_jp();
+UNK_RET func_800966E0_jp(void);
#endif
diff --git a/include/6F12E0.h b/include/6F12E0.h
index 168b25f..18f721e 100644
--- a/include/6F12E0.h
+++ b/include/6F12E0.h
@@ -3,16 +3,18 @@
#include "ultra64.h"
-// void func_800CD640_jp();
-// void func_800CD68C_jp();
-// void func_800CD730_jp();
-// void func_800CD760_jp();
-// void func_800CD82C_jp();
-// void func_800CD8F8_jp();
-// void func_800CD990_jp();
-// void func_800CD9F0_jp();
-// void func_800CDA4C_jp();
-// void func_800CDA90_jp();
+#include "m_cpak.h"
+
+void func_800CD640_jp(PakInfo74Struct* arg0, void*, void*);
+UNK_RET func_800CD68C_jp(PakInfo04Struct* arg0, UNK_TYPE arg1);
+size_t func_800CD730_jp(PakInfo04Struct* arg0);
+UNK_RET func_800CD760_jp(PakInfo04Struct* arg0, UNK_TYPE arg1, u32 arg2, void* arg3);
+UNK_RET func_800CD82C_jp(PakInfo04Struct* arg0, UNK_TYPE arg1, u32 arg2, void* arg3);
+UNK_RET func_800CD8F8_jp(PakInfo04Struct* arg0, PakInfo74Struct* arg1, u32 arg2);
+UNK_RET func_800CD990_jp(PakInfo04Struct* arg0, PakInfo74Struct* arg1);
+void func_800CD9F0_jp(PakInfo04Struct* arg0, PakInfo74Struct* arg1);
+UNK_RET func_800CDA4C_jp(PakInfo04Struct* arg0, PakInfo94Struct* arg1);
+UNK_RET func_800CDA90_jp(PakInfo04Struct* arg0, UNK_PTR, UNK_PTR);
// void func_800CDAD0_jp();
// void func_800CDB10_jp();
// void func_800CDBE0_jp();
diff --git a/include/code_variables.h b/include/code_variables.h
index 42b5de2..b1e0978 100644
--- a/include/code_variables.h
+++ b/include/code_variables.h
@@ -184,11 +184,6 @@ extern s32 CanLookGokiCount;
// extern UNK_TYPE D_80104688_jp;
// extern UNK_TYPE D_80104690_jp;
-// extern UNK_TYPE D_80104790_jp;
-// extern UNK_TYPE D_80104794_jp;
-// extern UNK_TYPE D_80104798_jp;
-// extern UNK_TYPE D_8010479C_jp;
-// extern UNK_TYPE D_801047A4_jp;
// extern UNK_TYPE D_801047A8_jp;
// extern UNK_TYPE D_801047B0_jp;
// extern UNK_TYPE D_801047B8_jp;
@@ -1120,9 +1115,6 @@ extern u8 D_80113854_jp;
// extern UNK_TYPE RO_FLT_801167EC_jp;
// extern UNK_TYPE RO_FLT_801167F0_jp;
// extern UNK_TYPE RO_FLT_801167F4_jp;
-// extern UNK_TYPE RO_80116800_jp;
-// extern UNK_TYPE RO_STR_80116804_jp;
-// extern UNK_TYPE RO_80116808_jp;
// extern UNK_TYPE jtbl_80116810_jp;
// extern UNK_TYPE RO_FLT_80116828_jp;
// extern UNK_TYPE RO_STR_80116830_jp;
@@ -1777,8 +1769,6 @@ extern u16 D_80000400[];
// extern UNK_TYPE B_80126D60_jp;
// extern UNK_TYPE B_80126E60_jp;
-// extern UNK_TYPE B_80137960_jp;
-// extern UNK_TYPE B_80137C40_jp;
// extern UNK_TYPE B_80137C48_jp;
// extern UNK_TYPE B_80138818_jp;
// extern UNK_TYPE B_80138E40_jp;
diff --git a/include/m_cpak.h b/include/m_cpak.h
new file mode 100644
index 0000000..0a6c723
--- /dev/null
+++ b/include/m_cpak.h
@@ -0,0 +1,90 @@
+#ifndef M_CPAK_H
+#define M_CPAK_H
+
+#include "ultra64.h"
+#include "unk.h"
+
+#include "m_npc.h"
+#include "m_private.h"
+
+typedef struct B80137C40Unk0000Struct {
+ /* 0x0000 */ u16 unk_0000;
+ /* 0x0002 */ UNK_TYPE1 unk_0002[0x0006];
+ /* 0x0008 */ PrivateInfo priv;
+ /* 0x0BD8 */ Animal_c animal;
+ /* 0x1100 */ u16 unk_1100;
+ /* 0x1102 */ UNK_TYPE1 unk_1102[0x00FE];
+} B80137C40Unk0000Struct; // size = 0x1200
+
+typedef struct B80137C40Struct {
+ /* 0x0000 */ B80137C40Unk0000Struct unk_0000;
+ /* 0x1200 */ OSMesgQueue* unk_1200;
+ /* 0x1204 */ UNK_TYPE unk_1204;
+ /* 0x1208 */ u16 unk_1208;
+} B80137C40Struct; // size = 0x1208
+
+// For alignment this can only have members of size 1 or 2
+typedef struct D80104798Struct {
+ /* 0x0 */ UNK_TYPE1 unk0[0x10];
+} D80104798Struct; // size 0x10
+
+typedef struct D801047A8Struct {
+ /* 0x0 */ UNK_TYPE1 unk_0[0x08];
+} D801047A8Struct; // size <= 0x8
+
+typedef struct D801047B0Struct {
+ /* 0x0000 */ u16 unk_0000;
+ /* 0x0002 */ UNK_TYPE1 unk_0002[0x66FE];
+} D801047B0Struct; // size = 0x6700;
+
+typedef struct PakInfo74Struct {
+ /* 0x00 */ size_t unk_00;
+ /* 0x04 */ UNK_TYPE1 unk_04[0x6];
+ /* 0x0A */ char unk_0A[4];
+ /* 0x0E */ D80104798Struct unk_0E;
+ /* 0x1E */ UNK_TYPE1 unk_1E[0x2];
+} PakInfo74Struct; // size = 0x20
+
+typedef struct PakInfo94Struct {
+ /* 0x00 */ UNK_TYPE1 unk_00[0x20];
+} PakInfo94Struct; // size = 0x20
+
+typedef struct PakInfo04Struct {
+ /* 0x00 */ OSPfs pfs;
+ /* 0x68 */ s32 unk_68;
+ /* 0x6C */ s32 unk_6C;
+} PakInfo04Struct; // size = 0x70
+
+typedef struct PakInfo {
+ /* 0x000 */ UNK_TYPE unk_00;
+ /* 0x004 */ PakInfo04Struct unk_04;
+ /* 0x074 */ PakInfo74Struct unk_74;
+ /* 0x090 */ PakInfo94Struct unk_94[16];
+ /* 0x294 */ s32 unk_294[16];
+ /* 0x2D4 */ size_t unk_2D4;
+ /* 0x2D8 */ s32 unk_2D8;
+ /* 0x2DC */ s32 unk_2DC;
+} PakInfo; // size >= 0x2DC
+
+UNK_RET mCPk_PakOpen(PakInfo* info, s32 arg1);
+UNK_RET func_80078F08_jp(PakInfo* info);
+s32 func_80078FE8_jp(PakInfo* info);
+void func_80079080_jp(B80137C40Struct* arg0);
+UNK_RET mCPk_InitPak(UNK_TYPE arg0);
+PrivateInfo* func_800793A8_jp(void);
+s32 mCPk_SavePak(PrivateInfo* priv, Animal_c* animal, PakInfo* info);
+s32 func_8007942C_jp(PrivateInfo* priv, Animal_c* animal, PakInfo* info);
+s32 func_80079760_jp(void);
+void* func_80079838_jp(void);
+s32 func_800798DC_jp(PakInfo* info);
+UNK_RET func_80079AAC_jp(void);
+UNK_RET func_80079D00_jp(void);
+s32 func_80079E54_jp(D801047B0Struct* arg0, PakInfo* arg1);
+UNK_RET func_80079EA4_jp(UNK_PTR, PakInfo* info);
+void func_80079EDC_jp(void);
+s32 func_80079F44_jp(void);
+void func_8007A008_jp(void);
+PakInfo* mCPk_get_pkinfo(void);
+s32 func_8007A080_jp(void);
+
+#endif
diff --git a/include/m_flashrom.h b/include/m_flashrom.h
index e6b3fdd..e6a026a 100644
--- a/include/m_flashrom.h
+++ b/include/m_flashrom.h
@@ -13,8 +13,8 @@ struct CommonData;
void func_8008EE24_jp(void);
// void func_8008EE5C_jp();
// void func_8008EE6C_jp();
-// void func_8008EE7C_jp();
-// void func_8008EEB4_jp();
+u16 func_8008EE7C_jp(UNK_PTR, s32);
+u16 func_8008EEB4_jp(void*, UNK_TYPE, u16);
// void func_8008EEE8_jp();
// void func_8008EF0C_jp();
s32 mFRm_CheckSaveData(void);
@@ -46,7 +46,7 @@ void func_8008FA50_jp(void);
// void func_8008FDD4_jp();
// void func_8008FE74_jp();
// void func_8008FF60_jp();
-// void func_80090044_jp();
+s32 func_80090044_jp(void);
// void func_800900B0_jp();
#endif
diff --git a/linker_scripts/jp/symbol_addrs_code.txt b/linker_scripts/jp/symbol_addrs_code.txt
index d3f3609..45f03e4 100644
--- a/linker_scripts/jp/symbol_addrs_code.txt
+++ b/linker_scripts/jp/symbol_addrs_code.txt
@@ -4362,11 +4362,11 @@ oc_collision_function = 0x8010471C; // size:0x24
occ_collision_function = 0x80104740; //
OCCClearFunctionTable = 0x80104764; //
status_org = 0x80104770; //
-D_80104790_jp = 0x80104790; //
+D_80104790_jp = 0x80104790; // type:s32
D_80104794_jp = 0x80104794; //
D_80104798_jp = 0x80104798; //
D_8010479C_jp = 0x8010479C; //
-D_801047A4_jp = 0x801047A4; //
+g_paks_info_p = 0x801047A4; //
D_801047A8_jp = 0x801047A8; //
D_801047B0_jp = 0x801047B0; //
D_801047B8_jp = 0x801047B8; //
@@ -5329,7 +5329,7 @@ RO_FLT_801167E8_jp = 0x801167E8; // type:f32
RO_FLT_801167EC_jp = 0x801167EC; // type:f32
RO_FLT_801167F0_jp = 0x801167F0; // type:f32
RO_FLT_801167F4_jp = 0x801167F4; // type:f32
-RO_80116800_jp = 0x80116800; //
+RO_STR_80116800_jp = 0x80116800; // type:asciz
RO_STR_80116804_jp = 0x80116804; // type:asciz
RO_80116808_jp = 0x80116808; //
jtbl_80116810_jp = 0x80116810; // type:jtbl
@@ -5996,12 +5996,9 @@ B_80126E9C_jp = 0x80126E9C; //
common_data = 0x80126EA0; // size:0x10AB8
-B_80137960_jp = 0x80137960; //
-B_80137C40_jp = 0x80137C40; //
-B_80137C48_jp = 0x80137C48; //
-B_80138818_jp = 0x80138818; //
-B_80138E40_jp = 0x80138E40; //
-B_80138E44_jp = 0x80138E44; //
+l_paks_info = 0x80137960; //
+B_80137C40_jp = 0x80137C40; // size:0x1208
+
debug_mode = 0x80138E50; //
debug_display = 0x80138E60; //
B_80138E70_jp = 0x80138E70; // type:s8
diff --git a/src/code/m_cpak.c b/src/code/m_cpak.c
new file mode 100644
index 0000000..beb8290
--- /dev/null
+++ b/src/code/m_cpak.c
@@ -0,0 +1,601 @@
+#include "m_cpak.h"
+#include "global.h"
+
+#include "m_flashrom.h"
+#include "m_lib.h"
+#include "m_malloc.h"
+
+#include "padmgr.h"
+
+#include "6B8F20.h"
+#include "6F12E0.h"
+
+extern PakInfo l_paks_info;
+extern B80137C40Struct B_80137C40_jp;
+
+extern D80104798Struct D_8010EF70_jp;
+
+UNK_TYPE2 D_80104790_jp = 0x3031;
+UNK_TYPE D_80104794_jp = 0x4E41464A;
+D80104798Struct* D_80104798_jp = &D_8010EF70_jp;
+char* D_8010479C_jp[2] = { "\x1A", "\x1B" };
+PakInfo* g_paks_info_p = &l_paks_info;
+D801047A8Struct D_801047A8_jp = { { 0xD4, 0x8E, 0xA6, 0x90, 0x85, 0x42, 0x00, 0x00 } };
+
+const size_t RO_80116808_jp[2] = { sizeof(B80137C40Unk0000Struct), sizeof(D801047B0Struct) };
+
+UNK_RET mCPk_PakOpen(PakInfo* info, s32 arg1) {
+ return func_800CD68C_jp(&info->unk_04, arg1);
+}
+
+UNK_RET func_80078EB4_jp(PakInfo* info) {
+ return func_800CD8F8_jp(&info->unk_04, &info->unk_74, info->unk_74.unk_00);
+}
+
+UNK_RET func_80078EE0_jp(PakInfo* info) {
+ return func_800CD990_jp(&info->unk_04, &info->unk_74);
+}
+
+UNK_RET func_80078F08_jp(PakInfo* info) {
+ return func_800CDA90_jp(&info->unk_04, &info->unk_2D8, &info->unk_2DC);
+}
+
+s32 func_80078F34_jp(PakInfo* info) {
+ PakInfo04Struct* var_s2 = &info->unk_04;
+ PakInfo94Struct* var_s3 = info->unk_94;
+ s32* var_s1 = info->unk_294;
+ s32 i;
+ s32 temp_v0;
+
+ for (i = 0; i < ARRAY_COUNT(info->unk_94); i++) {
+ var_s1[i] = 0;
+ var_s2->unk_68 = i;
+ temp_v0 = func_800CDA4C_jp(var_s2, &var_s3[i]);
+ if (temp_v0 == 0) {
+ if (var_s2->unk_6C == 5) {
+ var_s1[i] = -1;
+ continue;
+ }
+
+ return temp_v0;
+ }
+ }
+
+ return temp_v0;
+}
+
+s32 func_80078FE8_jp(PakInfo* info) {
+ s32 sp1C = FALSE;
+
+ info->unk_2D4 = func_800CD730_jp(&info->unk_04);
+ if (info->unk_04.unk_6C == 0) {
+ sp1C = TRUE;
+ }
+ return sp1C;
+}
+
+s32 func_80079030_jp(PakInfo* info) {
+ s32 sp1C = FALSE;
+
+ if ((func_80078FE8_jp(info) == TRUE) && (info->unk_2D4 >= info->unk_74.unk_00)) {
+ sp1C = TRUE;
+ }
+ return sp1C;
+}
+
+void func_80079080_jp(B80137C40Struct* arg0) {
+ arg0->unk_0000.unk_0000 = 0;
+ mPr_ClearPrivateInfo(&arg0->unk_0000.priv);
+ mNpc_ClearAnimalInfo(&arg0->unk_0000.animal);
+ arg0->unk_0000.unk_1100 = 0xFFFF;
+}
+
+UNK_RET mCPk_InitPak(UNK_TYPE arg0) {
+ PakInfo* sp2C;
+ PakInfo74Struct* sp28;
+ PakInfo94Struct* tmp;
+ s32 i;
+ s32 temp_s1;
+
+ sp2C = mCPk_get_pkinfo();
+ sp2C->unk_00 = 0;
+
+ sp28 = &sp2C->unk_74;
+ bzero(sp28, sizeof(PakInfo74Struct));
+
+ tmp = sp2C->unk_94;
+ for (i = 0; i < ARRAY_COUNT(sp2C->unk_94); i++) {
+ bzero(tmp, sizeof(PakInfo94Struct));
+ tmp++;
+ }
+
+ func_800CD640_jp(sp28, &D_80104790_jp, &D_80104794_jp);
+ bcopy(D_80104798_jp, &sp28->unk_0E, sizeof(D80104798Struct));
+ temp_s1 = mCPk_PakOpen(sp2C, arg0);
+ func_80079080_jp(&B_80137C40_jp);
+ B_80137C40_jp.unk_1200 = NULL;
+ B_80137C40_jp.unk_1204 = 0;
+ B_80137C40_jp.unk_1208 = 0xFFFF;
+ return temp_s1;
+}
+
+void func_8007919C_jp(PakInfo* info, u8 arg1) {
+ PakInfo74Struct* sp20 = &info->unk_74;
+
+ if (arg1 < 2) {
+ bcopy(D_8010479C_jp[arg1], sp20->unk_0A, sizeof(sp20->unk_0A));
+ sp20->unk_00 = RO_80116808_jp[arg1];
+ }
+}
+
+UNK_RET func_8007920C_jp(PakInfo* info, void* arg1) {
+ s32 var_v0;
+ s32 var_s1;
+ u32 tmp;
+
+ for (var_s1 = 0; var_s1 < 1; var_s1++) {
+ PakInfo04Struct* temp_s3 = &info->unk_04;
+
+ B_80137C40_jp.unk_1200 = padmgr_LockSerialMesgQ();
+ var_v0 = func_80078EE0_jp(info);
+
+ if (temp_s3->unk_6C == 5) {
+ var_v0 = func_80078EB4_jp(info);
+ }
+
+ if ((var_v0 == 1) || (temp_s3->unk_6C == 9)) {
+ tmp = info->unk_74.unk_00;
+ var_v0 = func_800CD760_jp(temp_s3, 0, tmp, arg1);
+ }
+ padmgr_UnlockSerialMesgQ(B_80137C40_jp.unk_1200);
+ }
+
+ return var_v0;
+}
+
+s32 func_800792FC_jp(PakInfo* info, void* arg1) {
+ s32 sp1C;
+ u32 tmp;
+
+ B_80137C40_jp.unk_1200 = padmgr_LockSerialMesgQ();
+ sp1C = func_80078EE0_jp(info);
+
+ if (sp1C == 1) {
+ tmp = info->unk_74.unk_00;
+ sp1C = func_800CD82C_jp(&info->unk_04, 0, tmp, arg1);
+ if (sp1C == 0) {
+ sp1C = -1;
+ }
+ }
+
+ padmgr_UnlockSerialMesgQ(B_80137C40_jp.unk_1200);
+
+ return sp1C;
+}
+
+void func_80079378_jp(PrivateInfo* priv) {
+ if (priv != NULL) {
+ mem_copy((void*)&B_80137C40_jp.unk_0000.priv, (void*)priv, sizeof(PrivateInfo));
+ }
+}
+
+PrivateInfo* func_800793A8_jp(void) {
+ return &B_80137C40_jp.unk_0000.priv;
+}
+
+s32 mCPk_SavePak(PrivateInfo* priv, Animal_c* animal, PakInfo* info) {
+ func_8007919C_jp(info, 0);
+ func_80079378_jp(priv);
+ mem_copy((void*)&B_80137C40_jp.unk_0000.animal, (void*)animal, sizeof(Animal_c));
+ B_80137C40_jp.unk_0000.unk_0000 =
+ func_8008EEB4_jp(&B_80137C40_jp.unk_0000, sizeof(B80137C40Unk0000Struct), B_80137C40_jp.unk_0000.unk_0000);
+
+ return func_8007920C_jp(info, &B_80137C40_jp);
+}
+
+s32 func_8007942C_jp(PrivateInfo* priv, Animal_c* animal, PakInfo* info) {
+ s32 sp1C;
+
+ func_8007919C_jp(info, 0);
+ sp1C = func_800792FC_jp(info, &B_80137C40_jp);
+
+ if (sp1C == 1) {
+ B_80137C40_jp.unk_1204 = 1;
+ }
+
+ if (sp1C == 1) {
+ if (mPr_CheckPrivate(&B_80137C40_jp.unk_0000.priv) == TRUE) {
+ mem_copy((void*)priv, (void*)&B_80137C40_jp.unk_0000.priv, sizeof(PrivateInfo));
+ mem_copy((void*)animal, (void*)&B_80137C40_jp.unk_0000.animal, sizeof(Animal_c));
+ } else {
+ sp1C = 0;
+ }
+ } else {
+ sp1C = 0;
+ }
+
+ return sp1C;
+}
+
+s32 func_800794E4_jp(s32* arg0, s32 arg1, PakInfo* arg2, void* arg3) {
+ PakInfo04Struct* unkStruct = &arg2->unk_04;
+ void* var_a3;
+ s32 sp24 = FALSE;
+ UNUSED s32 pad[2];
+
+ *arg0 = 5;
+ B_80137C40_jp.unk_1200 = padmgr_LockSerialMesgQ();
+ if ((func_80078EE0_jp(arg2) == 1) || (unkStruct->unk_6C == 9)) {
+ var_a3 = (arg1 == 0) ? &B_80137C40_jp : arg3;
+ if ((var_a3 != NULL) && (func_800CD82C_jp(unkStruct, 0, arg2->unk_74.unk_00, var_a3) == 1)) {
+ if (arg1 == 0) {
+ if (!mPr_NullCheckPersonalID(&B_80137C40_jp.unk_0000.priv.playerId)) {
+ B_80137C40_jp.unk_1204 = 1;
+ *arg0 = 0;
+ } else {
+ *arg0 = 2;
+ }
+ } else {
+ *arg0 = 2;
+ }
+ sp24 = TRUE;
+ }
+ } else if (unkStruct->unk_6C == 5) {
+ if ((func_80078F08_jp(arg2) == 1) && (arg2->unk_2DC >= 0x10)) {
+ *arg0 = 4;
+ sp24 = TRUE;
+ } else if (func_80079030_jp(arg2) == TRUE) {
+ *arg0 = 1;
+ sp24 = TRUE;
+ } else if (unkStruct->unk_6C == 0) {
+ *arg0 = 3;
+ sp24 = TRUE;
+ }
+ }
+ padmgr_UnlockSerialMesgQ(B_80137C40_jp.unk_1200);
+ return sp24;
+}
+
+s32 func_8007967C_jp(s32* arg0, s32 arg1, PakInfo* arg2) {
+ UNUSED s32 pad;
+ s32 sp20;
+ void* sp1C;
+
+ if (arg1 == 0) {
+ sp1C = &B_80137C40_jp;
+ } else {
+ sp1C = zelda_malloc(arg2->unk_74.unk_00);
+ }
+
+ sp20 = func_800794E4_jp(arg0, arg1, arg2, sp1C);
+ if ((arg1 != 0) && (sp1C != NULL)) {
+ zelda_free(sp1C);
+ }
+
+ return sp20;
+}
+
+UNK_RET func_80079708_jp(s32 arg0) {
+ s32 var_v1;
+
+ switch (arg0) {
+ case 0:
+ var_v1 = 4;
+ break;
+
+ case 1:
+ case 2:
+ var_v1 = 3;
+ break;
+
+ case 3:
+ var_v1 = 2;
+ break;
+
+ case 4:
+ var_v1 = 6;
+ break;
+
+ case 5:
+ var_v1 = 5;
+ break;
+
+ default:
+ var_v1 = 5;
+ break;
+ }
+
+ return var_v1;
+}
+
+s32 func_80079760_jp(void) {
+ PakInfo* info = mCPk_get_pkinfo();
+ PrivateInfo* iter = &common_data.save.saveFilePrivateInfo[0];
+ s32 sp34 = -1;
+ s32 temp_v0_2;
+ s32 i;
+
+ func_8007919C_jp(info, 0);
+
+ temp_v0_2 = func_800792FC_jp(info, &B_80137C40_jp);
+
+ if (temp_v0_2 == 1) {
+ B_80137C40_jp.unk_1204 = 1;
+ }
+
+ if ((temp_v0_2 == 1) && !mPr_NullCheckPersonalID(&B_80137C40_jp.unk_0000.priv.playerId)) {
+ sp34 = 4;
+ for (i = 0; i < ARRAY_COUNT(common_data.save.saveFilePrivateInfo); i++) {
+ if (mPr_CheckCmpPrivate(&B_80137C40_jp.unk_0000.priv, iter) == TRUE) {
+ sp34 = i;
+ break;
+ }
+ iter++;
+ }
+ }
+
+ return sp34;
+}
+
+void* func_80079838_jp(void) {
+ PersonalID_c* id = NULL;
+ PakInfo* info = mCPk_get_pkinfo();
+ void* sp24 = &D_801047A8_jp;
+
+ if (B_80137C40_jp.unk_1204 == 0) {
+ func_8007919C_jp(info, 0);
+ if (func_800792FC_jp(info, &B_80137C40_jp) == 1) {
+ B_80137C40_jp.unk_1204 = 1;
+ id = &B_80137C40_jp.unk_0000.priv.playerId;
+ }
+ } else {
+ id = &B_80137C40_jp.unk_0000.priv.playerId;
+ }
+
+ if ((id != NULL) && !mPr_NullCheckPersonalID(id)) {
+ sp24 = id;
+ }
+
+ return sp24;
+}
+
+s32 func_800798DC_jp(PakInfo* info) {
+ UNUSED s32 pad;
+ u32 temp_v0;
+ s32 sp24 = FALSE;
+
+ if (B_80137C40_jp.unk_1204 == 0) {
+ func_8007919C_jp(info, 0);
+ if (func_800792FC_jp(info, &B_80137C40_jp) == 1) {
+ B_80137C40_jp.unk_1204 = 1;
+ }
+ }
+ if (B_80137C40_jp.unk_1204 == 1) {
+ temp_v0 = fqrand() * 65534.0f;
+ B_80137C40_jp.unk_1208 = temp_v0;
+ B_80137C40_jp.unk_0000.unk_1100 = temp_v0;
+ B_80137C40_jp.unk_0000.unk_0000 =
+ func_8008EEB4_jp(&B_80137C40_jp, sizeof(B80137C40Unk0000Struct), B_80137C40_jp.unk_0000.unk_0000);
+
+ if (func_8007920C_jp(info, &B_80137C40_jp) == 1) {
+ sp24 = TRUE;
+ }
+ }
+ return sp24;
+}
+
+s32 func_80079A24_jp(PakInfo* info) {
+ s32 sp1C;
+
+ if (B_80137C40_jp.unk_1208 != 0xFFFF) {
+ sp1C = FALSE;
+ func_8007919C_jp(info, 0);
+ if (func_800792FC_jp(info, &B_80137C40_jp) == 1) {
+ B_80137C40_jp.unk_1204 = 1;
+ if (B_80137C40_jp.unk_1208 == B_80137C40_jp.unk_0000.unk_1100) {
+ sp1C = TRUE;
+ }
+ }
+ } else {
+ sp1C = TRUE;
+ }
+ return sp1C;
+}
+
+UNK_RET func_80079AAC_jp(void) {
+ PakInfo* info = mCPk_get_pkinfo();
+ s32 sp20 = 0;
+ s32 sp1C;
+
+ func_8007919C_jp(info, 0);
+
+ if (func_80079A24_jp(info) == 1) {
+ if (func_8007967C_jp(&sp1C, 0, info) == 1) {
+ sp20 = func_80079708_jp(sp1C);
+ }
+ } else {
+ sp20 = 1;
+ }
+
+ return sp20;
+}
+
+void func_80079B28_jp(UNK_PTR arg0, u32 arg1, PakInfo* info) {
+ UNUSED s32 pad[2];
+ s32 temp_v0 = func_80079EA4_jp(arg0, info);
+ OSMesgQueue* queue;
+ PakInfo* info2;
+
+ if (temp_v0 == 1) {
+ if (func_8008EE7C_jp(arg0, arg1) != 0) {
+ func_8007919C_jp(info, 1);
+ queue = padmgr_LockSerialMesgQ();
+ func_800CD9F0_jp(&info->unk_04, &info->unk_74);
+ padmgr_UnlockSerialMesgQ(queue);
+ }
+ } else if (temp_v0 == -1) {
+ info2 = mCPk_get_pkinfo();
+ func_8007919C_jp(info2, 1);
+ B_80137C40_jp.unk_1200 = padmgr_LockSerialMesgQ();
+ func_800CD9F0_jp(&info2->unk_04, &info2->unk_74);
+ padmgr_UnlockSerialMesgQ(B_80137C40_jp.unk_1200);
+ }
+}
+
+UNK_RET func_80079BF8_jp(PakInfo* info) {
+ UNUSED s32 pad;
+ s32 sp28;
+ s32 sp24 = 0;
+ UNK_PTR sp20;
+
+ if (!mLd_PlayerManKindCheck()) {
+ func_8007919C_jp(info, 1);
+ sp20 = zelda_malloc(info->unk_74.unk_00);
+ if (sp20 != NULL) {
+ func_80079B28_jp(sp20, info->unk_74.unk_00, info);
+ }
+ if (func_800794E4_jp(&sp28, 1, info, sp20) == TRUE) {
+ sp24 = func_80079708_jp(sp28);
+ }
+ if (sp20 != NULL) {
+ zelda_free(sp20);
+ }
+ } else if (func_800966E0_jp() == 1) {
+ func_8007919C_jp(info, 0);
+ if (func_80079A24_jp(info) == 1) {
+ if (func_8007967C_jp(&sp28, 0, info) == 1) {
+ sp24 = func_80079708_jp(sp28);
+ }
+ } else {
+ sp24 = 1;
+ }
+ }
+
+ return sp24;
+}
+
+UNK_RET func_80079D00_jp(void) {
+ PakInfo* info = mCPk_get_pkinfo();
+ s32 sp18 = 0;
+
+ if (mCPk_PakOpen(info, 0) == 1) {
+ sp18 = func_80079BF8_jp(info);
+ }
+
+ return sp18;
+}
+
+s32 func_80079D50_jp(D801047B0Struct* arg0, PakInfo* info, u8* index) {
+ func_8007919C_jp(info, 1);
+ arg0->unk_0000 = func_8008EEB4_jp(arg0, sizeof(D801047B0Struct), arg0->unk_0000);
+ if (func_8007920C_jp(info, arg0) == 1) {
+ if (mLd_PlayerManKindCheck()) {
+ if (mCPk_SavePak(common_data.privateInfo, mNpc_GetInAnimalP(), info) == 1) {
+ *index = 1;
+ return 0;
+ }
+ return -1;
+ }
+
+ *index = 1;
+ return 0;
+ }
+
+ *index = 0;
+ return -1;
+}
+
+s32 func_80079E14_jp(UNUSED D801047B0Struct* arg0, UNUSED PakInfo* info, u8* arg2) {
+ s32 temp_v0 = func_80090044_jp();
+
+ if (temp_v0 != 0) {
+ *arg2 = 0;
+ }
+
+ return temp_v0;
+}
+
+typedef s32 (*D801047B0Func)(D801047B0Struct*, PakInfo*, u8*);
+D801047B0Func D_801047B0_jp[2] = { func_80079D50_jp, func_80079E14_jp };
+
+s32 func_80079E54_jp(D801047B0Struct* arg0, PakInfo* arg1) {
+ static u8 D_801047B8_jp = 0;
+
+ if (D_801047B8_jp >= ARRAY_COUNT(D_801047B0_jp)) {
+ D_801047B8_jp = 0;
+ }
+
+ return D_801047B0_jp[D_801047B8_jp](arg0, arg1, &D_801047B8_jp);
+}
+
+s32 func_80079EA4_jp(UNK_PTR arg0, PakInfo* info) {
+ func_8007919C_jp(info, 1);
+ return func_800792FC_jp(info, arg0);
+}
+
+void func_80079EDC_jp(void) {
+ PakInfo* info = mCPk_get_pkinfo();
+
+ func_80079080_jp(&B_80137C40_jp);
+ func_8007919C_jp(info, 0);
+ B_80137C40_jp.unk_0000.unk_0000 =
+ func_8008EEB4_jp(&B_80137C40_jp, sizeof(B80137C40Unk0000Struct), B_80137C40_jp.unk_0000.unk_0000);
+ func_8007920C_jp(info, &B_80137C40_jp);
+}
+
+s32 func_80079F44_jp(void) {
+ PakInfo* info = mCPk_get_pkinfo();
+ u16 sp2A = 0;
+ s32 sp24;
+ s32 var_s0 = 0;
+
+ func_8007919C_jp(info, 0);
+
+ sp24 = func_800792FC_jp(info, &B_80137C40_jp);
+
+ if (sp24 == 1) {
+ B_80137C40_jp.unk_1204 = 1;
+ sp2A = func_8008EE7C_jp(&B_80137C40_jp, sizeof(B80137C40Unk0000Struct));
+ } else if (sp24 == -1) {
+ var_s0 = -2;
+ } else {
+ var_s0 = -1;
+ }
+
+ if ((sp24 == 1) && (sp2A == 0)) {
+ var_s0 = 1;
+ } else {
+ B_80137C40_jp.unk_1204 = 0;
+ func_80079080_jp(&B_80137C40_jp);
+ }
+
+ return var_s0;
+}
+
+void func_8007A008_jp(void) {
+ PakInfo* info = mCPk_get_pkinfo();
+ s32 temp_v0 = func_80079F44_jp();
+ OSMesgQueue* queue;
+
+ if ((temp_v0 == 0) || (temp_v0 == -2)) {
+ func_8007919C_jp(info, 0);
+ queue = padmgr_LockSerialMesgQ();
+ func_800CD9F0_jp(&info->unk_04, &info->unk_74);
+ padmgr_UnlockSerialMesgQ(queue);
+ }
+}
+
+PakInfo* mCPk_get_pkinfo(void) {
+ return g_paks_info_p;
+}
+
+s32 func_8007A080_jp(void) {
+ PakInfo* info = mCPk_get_pkinfo();
+ s32 var_v1 = TRUE;
+
+ if ((info != NULL) && (info->unk_04.unk_6C == 10)) {
+ var_v1 = FALSE;
+ }
+
+ return var_v1;
+}
diff --git a/src/code/m_private.c b/src/code/m_private.c
index 2c25f70..f957663 100644
--- a/src/code/m_private.c
+++ b/src/code/m_private.c
@@ -7,7 +7,7 @@
#include "m_room_type.h"
#include "m_field_info.h"
#include "6E3240.h"
-#include "69CB30.h"
+#include "m_cpak.h"
#include "m_handbill.h"
#include "m_house.h"
#include "6DA460.h"
diff --git a/src/code/m_start_data_init.c b/src/code/m_start_data_init.c
index 341504d..9c59a61 100644
--- a/src/code/m_start_data_init.c
+++ b/src/code/m_start_data_init.c
@@ -1,5 +1,4 @@
#include "m_start_data_init.h"
-#include "69CB30.h"
#include "6A83A0.h"
#include "6B81C0.h"
#include "6BA500.h"
@@ -17,6 +16,7 @@
#include "m_all_grow.h"
#include "m_cockroach.h"
#include "m_common_data.h"
+#include "m_cpak.h"
#include "m_event.h"
#include "m_field_info.h"
#include "m_field_make.h"
diff --git a/src/overlays/gamestates/ovl_save_menu/save_menu.c b/src/overlays/gamestates/ovl_save_menu/save_menu.c
index e29aeac..22cec06 100644
--- a/src/overlays/gamestates/ovl_save_menu/save_menu.c
+++ b/src/overlays/gamestates/ovl_save_menu/save_menu.c
@@ -5,7 +5,7 @@
#include "m_common_data.h"
#include "macros.h"
#include "m_flashrom.h"
-#include "69CB30.h"
+#include "m_cpak.h"
#include "6B3DC0.h"
#include "m_rcp.h"
#include "sys_matrix.h"
diff --git a/src/overlays/gamestates/ovl_second_game/second_game.c b/src/overlays/gamestates/ovl_second_game/second_game.c
index c823089..afa4e2f 100644
--- a/src/overlays/gamestates/ovl_second_game/second_game.c
+++ b/src/overlays/gamestates/ovl_second_game/second_game.c
@@ -2,8 +2,8 @@
#include "libc/stdbool.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 "m_cpak.h"
#include "padmgr.h"
#include "sys_math.h"
#include "attributes.h"
@@ -14,7 +14,7 @@ void second_game_main(Game* game) {
Game_SecondGame* secondGame = (Game_SecondGame*)game;
if (mCPk_PakOpen(info, 0) == 0) {
- if (info->unk_70 == 1 || info->unk_70 == 11) {
+ if (info->unk_04.unk_6C == 1 || info->unk_04.unk_6C == 11) {
mempak = 0;
} else {
mempak = 1;
diff --git a/src/overlays/gamestates/ovl_trademark/m_trademark.c b/src/overlays/gamestates/ovl_trademark/m_trademark.c
index 819f723..9b4c96e 100644
--- a/src/overlays/gamestates/ovl_trademark/m_trademark.c
+++ b/src/overlays/gamestates/ovl_trademark/m_trademark.c
@@ -18,7 +18,7 @@
#include "libc64/qrand.h"
#include "m_std_dma.h"
#include "m_bgm.h"
-#include "69CB30.h"
+#include "m_cpak.h"
#include "6B3DC0.h"
#include "6B8F20.h"
#include "6EC9E0.h"
diff --git a/yamls/jp/code.yaml b/yamls/jp/code.yaml
index 03939af..0ce6406 100644
--- a/yamls/jp/code.yaml
+++ b/yamls/jp/code.yaml
@@ -24,7 +24,7 @@
- [0x69A7E0, c, code/m_collision_obj]
- [0x69C6B0, c, code/m_common_data]
- [0x69C770, c, code/m_controller]
- - [0x69CB30, asm, code/69CB30]
+ - [0x69CB30, c, code/m_cpak]
- [0x69DD60, c, code/m_debug]
- [0x69DDF0, c, code/m_debug_display]
- [0x69E2C0, asm, code/69E2C0]
@@ -159,7 +159,7 @@
- [0x727908]
- [0x7279F0, data, code/7279F0]
- [0x728340, .data, code/m_collision_obj]
- - [0x728430, data, code/69CB30]
+ - [0x728430, .data, code/m_cpak]
- [0x728460, .data, code/m_debug_display]
- [0x7284B0, data, code/69E2C0]
- [0x7286C0, .data, code/m_demo]
@@ -225,7 +225,7 @@
- [0x73A0F0, rodata, code/73A0F0]
- [0x73A480, .rodata, code/m_collision_obj]
- [0x73A490, .rodata, code/m_controller]
- - [0x73A4A0, rodata, code/73A4A0]
+ - [0x73A4A0, .rodata, code/m_cpak]
- [0x73A4D0, rodata, code/73A4D0]
- [0x73A6A0, .rodata, code/m_demo]
- [0x73A730, rodata, code/73A730]
@@ -304,7 +304,7 @@
- { start: 0x74AB40, type: bss, vram: 0x80123F80, name: code/80123F80}
- { start: 0x73F4D0, type: .bss, vram: 0x80126E70, name: code/m_collision_obj }
- { start: 0x74AB40, type: .bss, vram: 0x80126EA0, name: code/m_common_data }
- - { start: 0x75B600, type: bss, vram: 0x80137960, name: code/80137960 }
+ - { start: 0x75B600, type: bss, vram: 0x80137960, name: code/m_cpak }
- { start: 0x73F4D0, type: .bss, vram: 0x80138E50, name: code/m_debug}
- { start: 0x73F4D0, type: .bss, vram: 0x80138E60, name: code/m_debug_display}
- { start: 0x73F4D0, type: bss, vram: 0x80138E70, name: code/80138E70 }