m_submenu OK (#166)

* m_submenu OK

* mSM_load_player_anime no warning
This commit is contained in:
Prakxo
2024-04-11 04:00:41 +02:00
committed by GitHub
parent fce490d951
commit 7146ace5cb
8 changed files with 101 additions and 80 deletions
+2 -2
View File
@@ -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();
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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;
+92 -72
View File
@@ -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;
if (player != NULL) {
ObjectExchangeBank* exchange = &play->objectExchangeBank;
ObjectStatus* status = &exchange->status[mSc_bank_regist_check(exchange, 9)];
s32 i;
temp_v0 = get_player_actor_withoutCheck(game_play);
if (temp_v0 == NULL) {
return;
}
for (i = 0; i < 2; i++, status++) {
u8* segment = status->segment;
if (i == 0) {
func_800B1D94_jp(segment, player->unk_0DAC);
var_s4 = game_play->objectExchangeBank.status;
var_s4 += mSc_bank_regist_check(&game_play->objectExchangeBank, 9);
} else {
func_800B1D94_jp(segment, player->unk_0DB0);
}
for (var_s3 = 0; var_s3 < 2; var_s3++, var_s4++) {
segment = var_s4->segment;
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 (var_s3 == 0) {
func_800B1D94_jp(segment, temp_v0->unk_0DAC);
} else {
func_800B1D94_jp(segment, temp_v0->unk_0DB0);
//! FAKE
if (segment && segment) {}
}
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]);
}
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();
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;
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;
if (mMsg_Check_main_hide(sp24) != 0) {
return;
}
if (mMsg_Check_not_series_main_wait(sp24) == 0) {
return;
}
{
UNUSED s32 scoped[1];
scoped[0] = 0;
}
mMsg_sound_spec_change_voice(sp24);
if (mMsg_Check_main_hide(window) == FALSE && mMsg_Check_not_series_main_wait(window)) {
mMsg_sound_spec_change_voice(window);
}
if (submenu) {};
}
}
#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];
#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_submenu/mSM_Object_Exchange_keep_new_MenuTexAndPallet.s")
status->id = bankId;
status->vram = (void*)play->objectExchangeBank.unk1800;
status->segment = (void*)play->objectExchangeBank.unk1800;
status->size = size;
#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_submenu/mSM_Object_Exchange_keep_new_Menu.s")
if (exchange->num < OBJECT_EXCHANGE_BANK_MAX - 1) {
exchange->unk1800 = ALIGN16(exchange->unk1800 + size);
exchange->num++;
}
#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_submenu/mSM_Get_ground_tex_p.s")
return status->vram;
}
#pragma GLOBAL_ASM("asm/jp/nonmatchings/code/m_submenu/mSM_Get_ground_pallet_p.s")
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;
}
return play->groundTexPtrs[idx];
}
u8* mSM_Get_ground_pallet_p(Game_Play* play) {
s32 idx = play->unk_1DAC;
if (idx < 0) {
return NULL;
}
return play->groundPalPtrs[idx];
}
+1 -1
View File
@@ -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];
+2 -1
View File
@@ -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;