diff options
| author | Prakxo <87568477+Prakxo@users.noreply.github.com> | 2024-04-11 04:00:41 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-10 19:00:41 -0700 |
| commit | 7146ace5cb89772c195a41ee41b375cf4fe2166e (patch) | |
| tree | 5d0b1990c32b0a09f999c246bde84d9121272e6d | |
| parent | fce490d951900c593f25329cdfef0f47263d5e43 (diff) | |
m_submenu OK (#166)
* m_submenu OK
* mSM_load_player_anime no warning
| -rw-r--r-- | include/m_player_lib.h | 4 | ||||
| -rw-r--r-- | include/m_private.h | 2 | ||||
| -rw-r--r-- | include/m_scene.h | 2 | ||||
| -rw-r--r-- | linker_scripts/jp/symbol_addrs_code.txt | 2 | ||||
| -rw-r--r-- | src/code/m_scene.c | 2 | ||||
| -rw-r--r-- | src/code/m_submenu.c | 164 | ||||
| -rw-r--r-- | src/overlays/actors/player_actor/m_player.h | 2 | ||||
| -rw-r--r-- | src/overlays/gamestates/ovl_play/m_play.h | 3 |
8 files changed, 101 insertions, 80 deletions
diff --git a/include/m_player_lib.h b/include/m_player_lib.h index fa473d1..acdffe9 100644 --- a/include/m_player_lib.h +++ b/include/m_player_lib.h @@ -23,7 +23,7 @@ UNK_RET func_800B131C_jp(UNK_TYPE arg0); // void func_800B1590_jp(); // void func_800B1614_jp(); // void func_800B1650_jp(); -void func_800B167C_jp(s32 arg0, UNK_RET arg1); +void func_800B167C_jp(u8* arg0, UNK_RET arg1); // void func_800B16D0_jp(); // void func_800B16F8_jp(); void func_800B1784_jp(struct Game_Play*); @@ -51,7 +51,7 @@ UNK_RET func_800B1D94_jp(void* segment, UNK_TYPE arg1); // void func_800B1DE8_jp(); // void func_800B1E94_jp(); void mPlib_change_player_cloth_info_lv2(struct PrivateInfo*, u16); -// void func_800B1EDC_jp(); +void mPlib_Load_PlayerTexAndPallet(u8*, u8*, s32); // void func_800B1F74_jp(); // void func_800B1F84_jp(); // void func_800B1FAC_jp(); diff --git a/include/m_private.h b/include/m_private.h index 2eecc56..9d9e20a 100644 --- a/include/m_private.h +++ b/include/m_private.h @@ -55,7 +55,7 @@ typedef struct PrivateInfo { /* 0x3EC */ UNK_TYPE1 unk_3EC[0x2]; /* 0x3EE */ MailHeaderCommon savedMailHeader; /* 0x40A */ Mail_c mail[mPr_INVENTORY_MAIL_COUNT]; - /* 0xA72 */ s16 backgroundTextureId; + /* 0xA72 */ u16 backgroundTextureId; /* 0xA74 */ u8 exists; /* 0xA75 */ u8 hintCount; /* 0xA76 */ PrivateCloth cloth; diff --git a/include/m_scene.h b/include/m_scene.h index c847c8d..1c9b9a1 100644 --- a/include/m_scene.h +++ b/include/m_scene.h @@ -18,7 +18,7 @@ typedef struct ActorEntry { typedef struct ObjectStatus { /* 0x00 */ s16 id; - /* 0x04 */ void* segment; + /* 0x04 */ u8* segment; /* 0x08 */ void* vram; /* 0x0C */ uintptr_t vrom; /* 0x10 */ size_t size; diff --git a/linker_scripts/jp/symbol_addrs_code.txt b/linker_scripts/jp/symbol_addrs_code.txt index 2cbfd29..647d7da 100644 --- a/linker_scripts/jp/symbol_addrs_code.txt +++ b/linker_scripts/jp/symbol_addrs_code.txt @@ -2546,7 +2546,7 @@ func_800B1D94_jp = 0x800B1D94; // type:func func_800B1DE8_jp = 0x800B1DE8; // type:func func_800B1E94_jp = 0x800B1E94; // type:func mPlib_change_player_cloth_info_lv2 = 0x800B1EB0; // type:func -func_800B1EDC_jp = 0x800B1EDC; // type:func +mPlib_Load_PlayerTexAndPallet = 0x800B1EDC; // type:func func_800B1F74_jp = 0x800B1F74; // type:func func_800B1F84_jp = 0x800B1F84; // type:func func_800B1FAC_jp = 0x800B1FAC; // type:func diff --git a/src/code/m_scene.c b/src/code/m_scene.c index 4514b2f..e29fa0c 100644 --- a/src/code/m_scene.c +++ b/src/code/m_scene.c @@ -144,7 +144,7 @@ u32 mSc_secure_exchange_keep_bank(ObjectExchangeBank* objectExchangeBank, s16 id } else { objectStatus->id = id; - objectStatus->segment = (void*)objectExchangeBank->unk1800; + objectStatus->segment = (u8*)objectExchangeBank->unk1800; objectStatus->vram = (void*)objectExchangeBank->unk1800; objectStatus->vrom = 0; objectStatus->size = size; diff --git a/src/code/m_submenu.c b/src/code/m_submenu.c index cf7e269..079c25b 100644 --- a/src/code/m_submenu.c +++ b/src/code/m_submenu.c @@ -57,50 +57,37 @@ s32 SubmenuArea_IsPlayer(void) { return SubmenuArea_visit == playerActorOvl; } +void mSM_load_player_anime(Game_Play* play) { + Player* player = get_player_actor_withoutCheck(play); + Player* playerTemp; -#ifdef NON_MATCHING -// regalloc -void mSM_load_player_anime(Game_Play* game_play) { - ObjectStatus* var_s4; - s32 var_s0; - s32 var_s3; - Player* temp_v0; - void* segment; - - temp_v0 = get_player_actor_withoutCheck(game_play); - if (temp_v0 == NULL) { - return; - } - - var_s4 = game_play->objectExchangeBank.status; - var_s4 += mSc_bank_regist_check(&game_play->objectExchangeBank, 9); + if (player != NULL) { + ObjectExchangeBank* exchange = &play->objectExchangeBank; + ObjectStatus* status = &exchange->status[mSc_bank_regist_check(exchange, 9)]; + s32 i; - for (var_s3 = 0; var_s3 < 2; var_s3++, var_s4++) { - segment = var_s4->segment; + for (i = 0; i < 2; i++, status++) { + u8* segment = status->segment; + if (i == 0) { + func_800B1D94_jp(segment, player->unk_0DAC); - if (var_s3 == 0) { - func_800B1D94_jp(segment, temp_v0->unk_0DAC); - } else { - func_800B1D94_jp(segment, temp_v0->unk_0DB0); - //! FAKE - if (segment && segment) {} - } + } else { + func_800B1D94_jp(segment, player->unk_0DB0); + } - var_s0 = temp_v0->unk_0DBC[var_s3]; - if (temp_v0->unk_0DDC[var_s3] >= 0) { - func_800B167C_jp(var_s0, temp_v0->unk_0DDC[var_s3]); - var_s0 += func_800B131C_jp(temp_v0->unk_0DDC[var_s3]); - } + segment = player->unk_0DBC[i]; + playerTemp = player; + if (player->unk_0DDC[i] >= 0) { + func_800B167C_jp(segment, playerTemp->unk_0DDC[i]); + segment += func_800B131C_jp(playerTemp->unk_0DDC[i]); + } - if (temp_v0->unk_0DE4[var_s3] >= 0) { - func_800B167C_jp(var_s0, temp_v0->unk_0DE4[var_s3]); + if (playerTemp->unk_0DE4[i] >= 0) { + func_800B167C_jp(segment, playerTemp->unk_0DE4[i]); + } } } } -#else -void mSM_load_player_anime(Game_Play* game_play); -#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_submenu/mSM_load_player_anime.s") -#endif void SubmenuArea_DoLink(SubmenuArea* area, Submenu* submenu, SubmenuAreaIndex index) { area->allocatedRamAddr = D_8010DCE0_jp; @@ -483,16 +470,10 @@ void mSM_move_LINKWait(Submenu* submenu) { void mSM_move_Play(Submenu* submenu) { submenu->move(submenu); } - -#ifdef NON_MATCHING -// likely branch instead of normal branch void mSM_move_End(Submenu* submenu) { - UNUSED s32 pad; - Game_Play* sp28; - UNK_PTR sp24; - UNUSED s32 sp20[1]; - - sp28 = (Game_Play*)gamePT; + SubmenuArea* area = &SubmenuArea_dlftbl[0]; + Game_Play* play = (Game_Play*)gamePT; + UNK_PTR window; submenu->move(submenu); submenu->moveProcIndex = MSM_MOVE_PROC_WAIT; submenu->programId = SUBMENU_PROGRAM_0; @@ -501,32 +482,28 @@ void mSM_move_End(Submenu* submenu) { SetGameFrame(2); - if (submenu->unk_00 == 4) { - return; - } + if (submenu->unk_00 != 4) { + window = mMsg_Get_base_window_p(); + + submenu->unk_00 = 0; + mSc_dmacopy_all_exchange_bank(&play->objectExchangeBank); + SubmenuArea_DoUnlink(area, submenu); + load_player(submenu); + mSM_load_player_anime(play); + submenu->unk_E3 = 1; + + { + UNUSED s32 scoped[1]; + scoped[0] = 0; + } - sp24 = mMsg_Get_base_window_p(); - submenu->unk_00 = 0; - mSc_dmacopy_all_exchange_bank(&sp28->objectExchangeBank); - SubmenuArea_DoUnlink(SubmenuArea_dlftbl, submenu); - load_player(submenu); - mSM_load_player_anime(sp28); - submenu->unk_E3 = 1; - sp20[0] = 0; + if (mMsg_Check_main_hide(window) == FALSE && mMsg_Check_not_series_main_wait(window)) { + mMsg_sound_spec_change_voice(window); + } - if (mMsg_Check_main_hide(sp24) != 0) { - return; - } - if (mMsg_Check_not_series_main_wait(sp24) == 0) { - return; + if (submenu) {}; } - - mMsg_sound_spec_change_voice(sp24); } -#else -void mSM_move_End(Submenu* submenu); -#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_submenu/mSM_move_End.s") -#endif typedef void (*MoveProcFunc)(Submenu*); @@ -704,12 +681,55 @@ u32 mSM_check_open_inventory_itemlist(InventoryItemList itemlist, s32 arg1) { return ret; } -#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_submenu/mSM_Object_Exchange_keep_new.s") +void* mSM_Object_Exchange_keep_new(Game_Play* play, s16 bankId, u32 size) { + ObjectExchangeBank* exchange = &play->objectExchangeBank; + ObjectStatus* status = &exchange->status[play->objectExchangeBank.num]; + + status->id = bankId; + status->vram = (void*)play->objectExchangeBank.unk1800; + status->segment = (void*)play->objectExchangeBank.unk1800; + status->size = size; + + if (exchange->num < OBJECT_EXCHANGE_BANK_MAX - 1) { + exchange->unk1800 = ALIGN16(exchange->unk1800 + size); + exchange->num++; + } + + return status->vram; +} + +void mSM_Object_Exchange_keep_new_MenuTexAndPallet(Game_Play* play, s32 idx) { + u8* texPtr = mSM_Object_Exchange_keep_new(play, 14, (32 * 32) / 2); + u8* palPtr = mSM_Object_Exchange_keep_new(play, 15, 16 * sizeof(u16)); + + play->groundTexPtrs[idx] = texPtr; + play->groundPalPtrs[idx] = palPtr; + + mPlib_Load_PlayerTexAndPallet(texPtr, palPtr, common_data.privateInfo->backgroundTextureId - 0x2400); +} + +void mSM_Object_Exchange_keep_new_Menu(Game_Play* play) { + play->unk_1DAC = 0; + mSM_Object_Exchange_keep_new_MenuTexAndPallet(play, 0); + mSM_Object_Exchange_keep_new_MenuTexAndPallet(play, 1); +} + +u8* mSM_Get_ground_tex_p(Game_Play* play) { + s32 idx = play->unk_1DAC; + + if (idx < 0) { + return NULL; + } -#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_submenu/mSM_Object_Exchange_keep_new_MenuTexAndPallet.s") + return play->groundTexPtrs[idx]; +} -#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_submenu/mSM_Object_Exchange_keep_new_Menu.s") +u8* mSM_Get_ground_pallet_p(Game_Play* play) { + s32 idx = play->unk_1DAC; -#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_submenu/mSM_Get_ground_tex_p.s") + if (idx < 0) { + return NULL; + } -#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_submenu/mSM_Get_ground_pallet_p.s") + return play->groundPalPtrs[idx]; +} diff --git a/src/overlays/actors/player_actor/m_player.h b/src/overlays/actors/player_actor/m_player.h index ca4451c..fbf6436 100644 --- a/src/overlays/actors/player_actor/m_player.h +++ b/src/overlays/actors/player_actor/m_player.h @@ -25,7 +25,7 @@ typedef struct Player { /* 0x0DAC */ UNK_TYPE unk_0DAC; /* 0x0DB0 */ UNK_TYPE unk_0DB0; /* 0x0DB4 */ UNK_TYPE1 unk_0DB4[0x8]; - /* 0x0DBC */ UNK_TYPE unk_0DBC[2]; + /* 0x0DBC */ u8* unk_0DBC[2]; /* 0x0DC4 */ UNK_TYPE1 unk_0DC4[0x18]; /* 0x0DDC */ UNK_TYPE unk_0DDC[2]; /* 0x0DE4 */ UNK_TYPE unk_0DE4[2]; diff --git a/src/overlays/gamestates/ovl_play/m_play.h b/src/overlays/gamestates/ovl_play/m_play.h index b86d38c..27b28bc 100644 --- a/src/overlays/gamestates/ovl_play/m_play.h +++ b/src/overlays/gamestates/ovl_play/m_play.h @@ -78,7 +78,8 @@ typedef struct Game_Play { /* 0x1CBC */ Submenu submenu; /* 0x1DAC */ s8 unk_1DAC; /* 0x1DAD */ UNK_TYPE1 unk_1DAD[0x3]; - /* 0x1DB0 */ UNK_TYPE1 unk_1DB0[0x10]; + /* 0x1DB0 */ u8* groundTexPtrs[2]; + /* 0x1DB8 */ u8* groundPalPtrs[2]; /* 0x1DC0 */ PreRender unk_1DC0; /* 0x1E10 */ DoorInfo sceneDoorInfo; /* 0x1E18 */ s32 unk_1E18; |
