diff options
| author | Derek Hensley <hensley.derek58@gmail.com> | 2025-01-19 08:05:03 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-19 09:05:03 -0700 |
| commit | 6baf5141be2c6ea17eafe2f1350dc7a1c0d65b85 (patch) | |
| tree | cf91c1766fc5b0badc297cf32d7157393f4f36a3 | |
| parent | a9e52e5a551e05de85e6ecf1d73ffbd455d0d3d0 (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.h | 52 | ||||
| -rw-r--r-- | include/6B8F20.h | 2 | ||||
| -rw-r--r-- | include/6F12E0.h | 22 | ||||
| -rw-r--r-- | include/code_variables.h | 10 | ||||
| -rw-r--r-- | include/m_cpak.h | 90 | ||||
| -rw-r--r-- | include/m_flashrom.h | 6 | ||||
| -rw-r--r-- | linker_scripts/jp/symbol_addrs_code.txt | 15 | ||||
| -rw-r--r-- | src/code/m_cpak.c | 601 | ||||
| -rw-r--r-- | src/code/m_private.c | 2 | ||||
| -rw-r--r-- | src/code/m_start_data_init.c | 2 | ||||
| -rw-r--r-- | src/overlays/gamestates/ovl_save_menu/save_menu.c | 2 | ||||
| -rw-r--r-- | src/overlays/gamestates/ovl_second_game/second_game.c | 4 | ||||
| -rw-r--r-- | src/overlays/gamestates/ovl_trademark/m_trademark.c | 2 | ||||
| -rw-r--r-- | yamls/jp/code.yaml | 8 |
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 } |
