don't change save file length and use unused slot for ghost lantern

This commit is contained in:
MelonSpeedruns
2026-05-08 16:32:12 -04:00
parent b51e672540
commit 9e0966e069
11 changed files with 46 additions and 49 deletions
-1
View File
@@ -2386,7 +2386,6 @@ public:
void setGroundFishingRodActor();
int procFishingCastInit();
int procFishingCast();
void procLensOfTruthOn();
int procFishingFoodInit();
int procFishingFood();
f32 getCrawlMoveAnmSpeed();
+2 -2
View File
@@ -71,7 +71,7 @@ void item_func_WOOD_STICK();
void item_func_BOOMERANG();
void item_func_SPINNER();
void item_func_IRONBALL();
void item_func_LENS_OF_TRUTH();
void item_func_GHOST_LANTERN();
void item_func_BOW();
void item_func_HOOKSHOT();
void item_func_HVY_BOOTS();
@@ -261,7 +261,7 @@ int item_getcheck_func_WOOD_STICK();
int item_getcheck_func_BOOMERANG();
int item_getcheck_func_SPINNER();
int item_getcheck_func_IRONBALL();
int item_getcheck_func_LENS_OF_TRUTH();
int item_getcheck_func_GHOST_LANTERN();
int item_getcheck_func_BOW();
int item_getcheck_func_HOOKSHOT();
int item_getcheck_func_HVY_BOOTS();
+1 -1
View File
@@ -317,7 +317,7 @@ enum {
/* 0xDE */ dItemNo_NOENTRY_222_e,
/* 0xDF */ dItemNo_NOENTRY_223_e,
/* 0xE0 */ dItemNo_POU_SPIRIT_e,
/* 0xE1 */ dItemNo_LENS_OF_TRUTH_e,
/* 0xE1 */ dItemNo_GHOST_LANTERN_e,
/* 0xE2 */ dItemNo_NOENTRY_226_e,
/* 0xE3 */ dItemNo_NOENTRY_227_e,
/* 0xE4 */ dItemNo_NOENTRY_228_e,
+4 -5
View File
@@ -15,7 +15,7 @@ static const int MAX_SELECT_ITEM = 4;
static const int SELECT_ITEM_NUM = 2;
static const int MAX_EQUIPMENT = 6;
static const int MAX_EVENTS = 256;
static const int MAX_ITEM_SLOTS = 25;
static const int MAX_ITEM_SLOTS = 24;
static const int LIGHT_DROP_STAGE = 4;
static const int LETTER_INFO_BIT = 64;
static const int MAX_INSECT_NUM = 24;
@@ -75,8 +75,7 @@ enum ItemSlots {
/* 0x14 */ SLOT_20,
/* 0x15 */ SLOT_21,
/* 0x16 */ SLOT_22,
/* 0x17 */ SLOT_23,
/* 0x18 */ SLOT_24,
/* 0x17 */ SLOT_23
};
enum CollectItem {
@@ -350,8 +349,8 @@ public:
static const int BOMB_BAG_MAX = 3;
static const int BOTTLE_MAX = 4;
/* 0x00 */ u8 mItems[25];
/* 0x18 */ u8 mItemSlots[25];
/* 0x00 */ u8 mItems[24];
/* 0x18 */ u8 mItemSlots[24];
}; // Size: 0x30
class dSv_player_get_item_c {
+12 -22
View File
@@ -6096,7 +6096,7 @@ void daAlink_c::setItemMatrix(int param_0) {
modelCalc(mpKanteraGlowModel);
}
if (mEquipItem == dItemNo_LENS_OF_TRUTH_e) {
if (mEquipItem == dItemNo_GHOST_LANTERN_e) {
simpleAnmPlay(mpGhostLanternGlowBtk);
mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(mLeftItemJntNo));
@@ -6931,7 +6931,7 @@ const daAlink_BckData* daAlink_c::getMainBckData(daAlink_c::daAlink_ANM i_anmID)
{dRes_ID_ALANM_BCK_WAITHS_e, dRes_ID_ALANM_BCK_WAITHK_e},
};
if (mEquipItem == dItemNo_KANTERA_e || mEquipItem == dItemNo_LENS_OF_TRUTH_e) {
if (mEquipItem == dItemNo_KANTERA_e || mEquipItem == dItemNo_GHOST_LANTERN_e) {
if (i_anmID == ANM_WAIT) {
return &kandelaarAnm[0];
}
@@ -12073,7 +12073,7 @@ void daAlink_c::itemUnequip(u16 i_itemID, f32 i_playSpeed) {
const daAlinkHIO_anm_c* anm_data;
if (i_itemID == dItemNo_BOOMERANG_e || i_itemID == dItemNo_COPY_ROD_e ||
i_itemID == dItemNo_KANTERA_e || i_itemID == dItemNo_LENS_OF_TRUTH_e ||
i_itemID == dItemNo_KANTERA_e || i_itemID == dItemNo_GHOST_LANTERN_e ||
i_itemID == dItemNo_HOOKSHOT_e || checkBottleItem(i_itemID))
{
anm_id = dRes_ID_ALANM_BCK_TAKEL_e;
@@ -14163,7 +14163,7 @@ BOOL daAlink_c::setItemModel() {
}
}
if (mEquipItem == dItemNo_LENS_OF_TRUTH_e) {
if (mEquipItem == dItemNo_GHOST_LANTERN_e) {
setGhostLanternModel();
return 1;
}
@@ -14509,17 +14509,9 @@ enum daAlink_ItemProc {
/* 13 */ ITEM_PROC_BOTTLE_SWING,
/* 14 */ ITEM_PROC_NOT_USE_ITEM,
/* 15 */ ITEM_PROC_GRASS_WHISTLE,
/* 16 */ ITEM_PROC_LENS_OF_TRUTH,
/* 16 */ ITEM_PROC_GHOST_LANTERN,
};
void daAlink_c::procLensOfTruthOn() {
if (!checkWolfEyeUp()) {
onWolfEyeUp();
} else {
offWolfEyeUp();
}
}
int daAlink_c::changeItemTriggerKeepProc(u8 i_selItemIdx, int i_procType) {
u32 sel_item = dComIfGp_getSelectItem(i_selItemIdx);
mSelectItemId = i_selItemIdx;
@@ -14543,9 +14535,7 @@ int daAlink_c::changeItemTriggerKeepProc(u8 i_selItemIdx, int i_procType) {
procKandelaarPourInit();
}
}
else if (i_procType == ITEM_PROC_LENS_OF_TRUTH) {
procLensOfTruthOn();
} else if (i_procType == ITEM_PROC_FISHING_FOOD) {
else if (i_procType == ITEM_PROC_FISHING_FOOD) {
procFishingFoodInit();
} else if (i_procType == ITEM_PROC_BOOTS_EQUIP) {
procBootsEquipInit();
@@ -14854,7 +14844,7 @@ void daAlink_c::setGhostLanternLight() {
f32 lightPower = 0.0f;
daE_HP_c* foundPoe = (daE_HP_c*)fopAcM_Search(srchPoe, this);
if (mEquipItem == dItemNo_LENS_OF_TRUTH_e && foundPoe != NULL) {
if (mEquipItem == dItemNo_GHOST_LANTERN_e && foundPoe != NULL) {
lightPower = 1.0f;
}
@@ -18282,7 +18272,7 @@ int daAlink_c::execute() {
resetUpperAnime(UPPER_2, 5.0f);
}
if ((mEquipItem == dItemNo_KANTERA_e || mEquipItem == dItemNo_LENS_OF_TRUTH_e) &&
if ((mEquipItem == dItemNo_KANTERA_e || mEquipItem == dItemNo_GHOST_LANTERN_e) &&
checkNoUpperAnime() && !checkKandelaarEquipAnime() &&
(checkModeFlg(MODE_UNK_1000) || mProcID == PROC_CROUCH))
{
@@ -18639,7 +18629,7 @@ int daAlink_c::execute() {
#endif
setEffect();
if (mEquipItem == dItemNo_LENS_OF_TRUTH_e) {
if (mEquipItem == dItemNo_GHOST_LANTERN_e) {
cXyz effscale(0.75f, 0.75f, 0.75f);
static u16 particleNmaeDt[2] = {
@@ -19358,7 +19348,7 @@ void daAlink_c::shadowDraw() {
dComIfGd_addRealShadow(shadowID, mpKanteraModel);
}
if (mEquipItem == dItemNo_LENS_OF_TRUTH_e) {
if (mEquipItem == dItemNo_GHOST_LANTERN_e) {
dComIfGd_addRealShadow(shadowID, mpGhostLanternModel);
}
@@ -19522,7 +19512,7 @@ int daAlink_c::draw() {
}
}
if (mEquipItem == dItemNo_LENS_OF_TRUTH_e) {
if (mEquipItem == dItemNo_GHOST_LANTERN_e) {
daE_HP_c* foundPoe = (daE_HP_c*)fopAcM_Search(srchPoe, this);
for (s32 i = 0; i < 2; i++) {
@@ -19842,7 +19832,7 @@ int daAlink_c::draw() {
basicModelDraw(mpKanteraGlowModel);
}
if (mEquipItem == dItemNo_LENS_OF_TRUTH_e) {
if (mEquipItem == dItemNo_GHOST_LANTERN_e) {
daE_HP_c* foundPoe = (daE_HP_c*)fopAcM_Search(srchPoe, this);
modelDraw(mpGhostLanternModel, isPlayerNoDraw);
if (foundPoe != NULL) {
+1 -1
View File
@@ -2183,7 +2183,7 @@ void daAlink_c::setGetSubBgm(int i_itemNo) {
/* dItemNo_NOENTRY_222_e */ SETYPE_NONE,
/* dItemNo_NOENTRY_223_e */ SETYPE_NONE,
/* dItemNo_POU_SPIRIT_e */ SETYPE_ITEM_GET_POU,
/* dItemNo_LENS_OF_TRUTH_e */ SETYPE_NONE,
/* dItemNo_GHOST_LANTERN_e */ SETYPE_ITEM_GET,
/* dItemNo_NOENTRY_226_e */ SETYPE_NONE,
/* dItemNo_NOENTRY_227_e */ SETYPE_NONE,
/* dItemNo_NOENTRY_228_e */ SETYPE_NONE,
+6 -6
View File
@@ -236,7 +236,7 @@ static void (*item_func_ptr[256])() = {
item_func_noentry,
item_func_noentry,
item_func_POU_SPIRIT,
item_func_LENS_OF_TRUTH,
item_func_GHOST_LANTERN,
item_func_noentry,
item_func_noentry,
item_func_noentry,
@@ -504,7 +504,7 @@ static int (*item_getcheck_func_ptr[256])() = {
item_getcheck_func_noentry,
item_getcheck_func_noentry,
item_getcheck_func_POU_SPIRIT,
item_getcheck_func_LENS_OF_TRUTH,
item_getcheck_func_GHOST_LANTERN,
item_getcheck_func_noentry,
item_getcheck_func_noentry,
item_getcheck_func_noentry,
@@ -791,8 +791,8 @@ void item_func_IRONBALL() {
dComIfGs_setItem(SLOT_6, dItemNo_IRONBALL_e);
}
void item_func_LENS_OF_TRUTH() {
dComIfGs_setItem(SLOT_24, dItemNo_LENS_OF_TRUTH_e);
void item_func_GHOST_LANTERN() {
dComIfGs_setItem(SLOT_7, dItemNo_GHOST_LANTERN_e);
}
void item_func_BOW() {
@@ -1457,8 +1457,8 @@ int item_getcheck_func_IRONBALL() {
return dComIfGs_getItem(SLOT_6, true) == dItemNo_IRONBALL_e ? TRUE : FALSE;
}
int item_getcheck_func_LENS_OF_TRUTH() {
return dComIfGs_getItem(SLOT_24, true) == dItemNo_LENS_OF_TRUTH_e ? TRUE : FALSE;
int item_getcheck_func_GHOST_LANTERN() {
return dComIfGs_getItem(SLOT_7, true) == dItemNo_GHOST_LANTERN_e ? TRUE : FALSE;
}
int item_getcheck_func_BOW() {
+4 -4
View File
@@ -434,14 +434,14 @@ u8 dSv_player_item_c::getItem(int i_slotNo, bool i_checkCombo) const {
void dSv_player_item_c::setLineUpItem() {
static u8 i_item_lst[24] = {
10, 8, 6, 2, 9, 4, 3,
0, 1, 23, 20, 5, 15, 16,
17, 11, 12, 13, 14, 19, 18,
22, 21, 24
0, 1, 7, 23, 20, 5, 15,
16, 17, 11, 12, 13, 14, 19,
18, 22, 21
};
int slot_idx = 0;
for (int i = 0; i < 25; i++) {
for (int i = 0; i < 24; i++) {
mItemSlots[i] = dItemNo_NONE_e;
}
+6 -6
View File
@@ -251,7 +251,7 @@ namespace dusk {
{ dItemNo_NOENTRY_222_e, {"Reserved"} },
{ dItemNo_NOENTRY_223_e, {"Reserved"} },
{ dItemNo_POU_SPIRIT_e, {"Poe Soul"} },
{ dItemNo_LENS_OF_TRUTH_e, {"Lens of Truth", ITEMTYPE_EQUIP_e} },
{ dItemNo_GHOST_LANTERN_e, {"Ghost Lantern", ITEMTYPE_EQUIP_e} },
{ dItemNo_NOENTRY_226_e, {"Reserved"} },
{ dItemNo_NOENTRY_227_e, {"Reserved"} },
{ dItemNo_NOENTRY_228_e, {"Reserved"} },
@@ -393,6 +393,7 @@ namespace dusk {
{ SLOT_4, dItemNo_BOW_e },
{ SLOT_5, dItemNo_HAWK_EYE_e },
{ SLOT_6, dItemNo_IRONBALL_e },
{ SLOT_7, dItemNo_GHOST_LANTERN_e},
{ SLOT_8, dItemNo_COPY_ROD_e },
{ SLOT_9, dItemNo_HOOKSHOT_e },
{ SLOT_10, dItemNo_W_HOOKSHOT_e },
@@ -408,7 +409,6 @@ namespace dusk {
{ SLOT_21, dItemNo_HORSE_FLUTE_e },
{ SLOT_22, dItemNo_ANCIENT_DOCUMENT_e },
{ SLOT_23, dItemNo_PACHINKO_e },
{ SLOT_24, dItemNo_LENS_OF_TRUTH_e},
};
ImGuiSaveEditor::ImGuiSaveEditor() {}
@@ -534,7 +534,7 @@ namespace dusk {
selectItemData = 0xFF;
}
for (int i = 0; i < 25; i++) {
for (int i = 0; i < 24; i++) {
u8 itemNo = item.mItems[i];
if (ImGui::Selectable(fmt::format("Slot {0} ({1})", i, itemMap.find(itemNo)->second.m_name).c_str())) {
selectItemData = i;
@@ -821,19 +821,19 @@ namespace dusk {
if (ImGui::TreeNode("Item Wheel")) {
if (ImGui::Button("Default All##inv_default_all")) {
for (int slot = 0; slot < 25; slot++) {
for (int slot = 0; slot < 24; slot++) {
dComIfGs_setItem(slot, getSlotDefault(slot));
}
}
ImGui::SameLine();
if (ImGui::Button("Clear All##inv_clear_all")) {
for (int slot = 0; slot < 25; slot++) {
for (int slot = 0; slot < 24; slot++) {
dComIfGs_setItem(slot, dItemNo_NONE_e);
}
}
ImGuiBeginGroupPanel("Items", { 200, 100 });
for (int slot = 0; slot < 25; slot++) {
for (int slot = 0; slot < 24; slot++) {
ImGui::Text("Slot %02d (%s): ", slot, itemMap.find(getSlotDefault(slot))->second.m_name.c_str());
ImGui::SameLine(240.0f);
if (ImGui::BeginCombo(fmt::format("##ItemComboBox{}", slot).c_str(), itemMap.find(item.mItems[slot])->second.m_name.c_str())) {
+1 -1
View File
@@ -451,7 +451,7 @@ std::map<int, itemInfo> itemMap = {
{dItemNo_NOENTRY_222_e, {"Reserved"}},
{dItemNo_NOENTRY_223_e, {"Reserved"}},
{dItemNo_POU_SPIRIT_e, {"Poe Soul"}},
{dItemNo_NOENTRY_225_e, {"Reserved"}},
{dItemNo_GHOST_LANTERN_e, {"Reserved"}},
{dItemNo_NOENTRY_226_e, {"Reserved"}},
{dItemNo_NOENTRY_227_e, {"Reserved"}},
{dItemNo_NOENTRY_228_e, {"Reserved"}},
+9
View File
@@ -28,6 +28,8 @@
#include "tracy/Tracy.hpp"
#include <dusk/gamepad_color.h>
#include <dusk/autosave.h>
#include <d/actor/d_a_npc.h>
#include <d/d_item.h>
#endif
fapGm_HIO_c::fapGm_HIO_c() {
@@ -743,6 +745,13 @@ static void duskExecute() {
handleGamepadColor();
updateAutoSave();
if (daNpcT_chkEvtBit(0x2B6)) {
execItemGet(dItemNo_GHOST_LANTERN_e);
} else {
dComIfGs_offItemFirstBit(dItemNo_GHOST_LANTERN_e);
dComIfGp_setItem(SLOT_7, dItemNo_NONE_e);
}
if (dusk::getSettings().game.recordingMode) {
Z2GetSeqMgr()->bgmAllMute(0, 0);
}