From ab8dee5c141f54f038569e1fffd0c91594aae5a3 Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Sun, 3 Jan 2021 02:15:52 -0800 Subject: [PATCH] dSv_player_item_c setWarashibeItem (#56) * dsv_player_item_c::setWarashibeItem * add slot name Co-authored-by: Pheenoh --- .../d/d_com/d_com_inf_game/d_com_inf_game.h | 5 +++ include/d/d_save/d_save/asm/func_80033C2C.s | 38 ------------------- src/d/d_save/d_save.cpp | 18 +++++++-- 3 files changed, 20 insertions(+), 41 deletions(-) delete mode 100644 include/d/d_save/d_save/asm/func_80033C2C.s diff --git a/include/d/d_com/d_com_inf_game/d_com_inf_game.h b/include/d/d_com/d_com_inf_game/d_com_inf_game.h index ca36e869079..e7718fd23d5 100644 --- a/include/d/d_com/d_com_inf_game/d_com_inf_game.h +++ b/include/d/d_com/d_com_inf_game/d_com_inf_game.h @@ -66,6 +66,8 @@ public: dStage_roomControl_c& getRoomControl() { return room_control; } item_func& getGiveItem() { return give_item; } u8& getUnkHeart() { return unk_heart; } + void setUnkWarashibe1(u8 num) { field_0x4ec0[0x85] = num; } + void setUnkWarashibe2(u8 num) { field_0x4ec0[0x86] = num; } private: /* 0x00000 */ dBgS dbgs; @@ -117,6 +119,9 @@ public: // temp until we map the item short function names item_func& getPlayGiveItem() { return play.getGiveItem(); } u8& getPlayUnkHeart() { return play.getUnkHeart(); } + // temp for setWarashibeItem + void setPlayUnkWarashibe1(u8 num) { play.setUnkWarashibe1(num); } + void setPlayUnkWarashibe2(u8 num) { play.setUnkWarashibe2(num); } /* 0x00000 */ dSv_info_c info; /* 0x00EEB */ u8 field_0xeeb[0x39]; /* 0x00F24 */ u32 saveTotalTime; diff --git a/include/d/d_save/d_save/asm/func_80033C2C.s b/include/d/d_save/d_save/asm/func_80033C2C.s deleted file mode 100644 index c61df03a78e..00000000000 --- a/include/d/d_save/d_save/asm/func_80033C2C.s +++ /dev/null @@ -1,38 +0,0 @@ -/* 80033C2C 00030B6C 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80033C30 00030B70 7C 08 02 A6 */ mflr r0 -/* 80033C34 00030B74 90 01 00 24 */ stw r0, 0x24(r1) -/* 80033C38 00030B78 39 61 00 20 */ addi r11, r1, 0x20 -/* 80033C3C 00030B7C 48 32 E5 A1 */ bl _savegpr_29 -/* 80033C40 00030B80 7C 9D 23 78 */ mr r29, r4 -/* 80033C44 00030B84 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha -/* 80033C48 00030B88 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l -/* 80033C4C 00030B8C 38 63 00 9C */ addi r3, r3, 0x9c -/* 80033C50 00030B90 38 80 00 15 */ li r4, 0x15 -/* 80033C54 00030B94 7F A5 EB 78 */ mr r5, r29 -/* 80033C58 00030B98 4B FF F3 61 */ bl setItem__17dSv_player_item_cFiUc -/* 80033C5C 00030B9C 38 00 00 15 */ li r0, 0x15 -/* 80033C60 00030BA0 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha -/* 80033C64 00030BA4 3B E3 61 C0 */ addi r31, r3, g_dComIfG_gameInfo@l -/* 80033C68 00030BA8 98 1F 5E 7D */ stb r0, 0x5e7d(r31) -/* 80033C6C 00030BAC 9B BF 5E 7E */ stb r29, 0x5e7e(r31) -/* 80033C70 00030BB0 3B A0 00 00 */ li r29, 0 -lbl_80033C74: -/* 80033C74 00030BB4 7F E3 FB 78 */ mr r3, r31 -/* 80033C78 00030BB8 57 BE 06 3E */ clrlwi r30, r29, 0x18 -/* 80033C7C 00030BBC 7F C4 F3 78 */ mr r4, r30 -/* 80033C80 00030BC0 4B FF ED DD */ bl getSelectItemIndex__21dSv_player_status_a_cCFi -/* 80033C84 00030BC4 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 80033C88 00030BC8 28 00 00 15 */ cmplwi r0, 0x15 -/* 80033C8C 00030BCC 40 82 00 0C */ bne lbl_80033C98 -/* 80033C90 00030BD0 7F C3 F3 78 */ mr r3, r30 -/* 80033C94 00030BD4 4B FF A1 61 */ bl dComIfGp_setSelectItem -lbl_80033C98: -/* 80033C98 00030BD8 3B BD 00 01 */ addi r29, r29, 1 -/* 80033C9C 00030BDC 2C 1D 00 04 */ cmpwi r29, 4 -/* 80033CA0 00030BE0 41 80 FF D4 */ blt lbl_80033C74 -/* 80033CA4 00030BE4 39 61 00 20 */ addi r11, r1, 0x20 -/* 80033CA8 00030BE8 48 32 E5 81 */ bl _restgpr_29 -/* 80033CAC 00030BEC 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80033CB0 00030BF0 7C 08 03 A6 */ mtlr r0 -/* 80033CB4 00030BF4 38 21 00 20 */ addi r1, r1, 0x20 -/* 80033CB8 00030BF8 4E 80 00 20 */ blr \ No newline at end of file diff --git a/src/d/d_save/d_save.cpp b/src/d/d_save/d_save.cpp index 0bb7d5823d9..ae961056b0b 100644 --- a/src/d/d_save/d_save.cpp +++ b/src/d/d_save/d_save.cpp @@ -569,9 +569,21 @@ u8 dSv_player_item_c::checkBombBag(u8 param_1) { return counter; } -asm void dSv_player_item_c::setWarashibeItem(u8) { - nofralloc -#include "d/d_save/d_save/asm/func_80033C2C.s" +void dSv_player_item_c::setWarashibeItem(u8 i_item_id) { + u32 select_item_index; + + g_dComIfG_gameInfo.info.getSaveFile().getPlayer().getPlayerItem().setItem(SLOT_21, i_item_id); + g_dComIfG_gameInfo.setPlayUnkWarashibe1(SLOT_21); + g_dComIfG_gameInfo.setPlayUnkWarashibe2(i_item_id); + + for (int i = 0; i < 4; i++) { + select_item_index = + g_dComIfG_gameInfo.info.getSaveFile().getPlayer().getPlayerStatusA().getSelectItemIndex( + (u8)i); + if (select_item_index == SLOT_21) { + dComIfGp_setSelectItem((u8)i); + } + } } void dSv_player_item_c::setRodTypeLevelUp(void) {