Fix Golden Wolf item persistence

This commit is contained in:
Luke Street
2026-08-21 20:45:43 -06:00
parent 42805210df
commit 8f5ecdba1c
7 changed files with 82 additions and 14 deletions
+11 -1
View File
@@ -159,9 +159,19 @@ int daObjLife_c::create() {
if (mItemOverridden) {
fopAcM_SetParam(this, (params & 0xFFFFFF00) | resolvedItem);
}
} else if (mGoldenWolfItem) {
mOriginalItemNo = mItemGiveOriginalNo;
const u16 obtainedItemFlag = static_cast<u16>(field_0x938);
const u8 resolvedItem =
dusk::mods::item_check_golden_wolf(obtainedItemFlag, mOriginalItemNo, this);
mItemGiveTag = dusk::mods::item_give_tag_golden_wolf(obtainedItemFlag);
mItemOverridden = resolvedItem != mOriginalItemNo;
if (resolvedItem != parameterItemNo) {
fopAcM_SetParam(this, (params & 0xFFFFFF00) | resolvedItem);
}
} else {
mOriginalItemNo = mItemGiveOriginalNo;
mItemOverridden = parameterItemNo != mItemGiveOriginalNo;
mItemOverridden = parameterItemNo != mOriginalItemNo;
}
mOverrideHover =
mItemOverridden &&
+2
View File
@@ -25,12 +25,14 @@ ItemCheckResult item_check_commit(uint32_t giveTag, uint8_t itemNo, fopAc_ac_c*
uint8_t item_check_chest(uint8_t boxNo, uint8_t itemNo, fopAc_ac_c* chest);
uint8_t item_check_boss(uint8_t itemNo, fopAc_ac_c* boss);
uint8_t item_check_freestanding(uint8_t bitNo, uint8_t itemNo, fopAc_ac_c* item);
uint8_t item_check_golden_wolf(uint16_t eventFlag, uint8_t itemNo, fopAc_ac_c* item);
uint8_t item_check_shop(uint8_t itemNo, fopAc_ac_c* giver);
uint32_t item_give_tag(const char* name);
uint32_t item_give_tag_chest(uint8_t boxNo);
uint32_t item_give_tag_boss();
uint32_t item_give_tag_freestanding(uint8_t bitNo);
uint32_t item_give_tag_golden_wolf(uint16_t eventFlag);
uint32_t item_give_tag_poe(uint8_t bitNo);
uint32_t item_give_tag_shop(uint8_t itemNo);
uint32_t item_give_tag_bug(uint8_t insectId);
+16
View File
@@ -143,6 +143,10 @@ std::string freestanding_check_name(uint8_t bitNo) {
return fmt::format("freestanding:{}:{}", current_stage_name(), bitNo);
}
std::string golden_wolf_check_name(uint16_t eventFlag) {
return fmt::format("golden_wolf:{}", eventFlag);
}
std::string poe_check_name(uint8_t bitNo) {
return fmt::format("poe:{}:{}", current_stage_name(), bitNo);
}
@@ -274,6 +278,14 @@ uint8_t item_check_freestanding(uint8_t bitNo, uint8_t itemNo, fopAc_ac_c* item)
return item_check(name.c_str(), itemNo, item);
}
uint8_t item_check_golden_wolf(uint16_t eventFlag, uint8_t itemNo, fopAc_ac_c* item) {
if (s_modChecks.empty()) {
return itemNo;
}
const auto name = golden_wolf_check_name(eventFlag);
return item_check(name.c_str(), itemNo, item);
}
uint8_t item_check_shop(uint8_t itemNo, fopAc_ac_c* giver) {
if (s_modChecks.empty()) {
return itemNo;
@@ -314,6 +326,10 @@ uint32_t item_give_tag_freestanding(uint8_t bitNo) {
return item_give_tag(freestanding_check_name(bitNo).c_str());
}
uint32_t item_give_tag_golden_wolf(uint16_t eventFlag) {
return item_give_tag(golden_wolf_check_name(eventFlag).c_str());
}
uint32_t item_give_tag_poe(uint8_t bitNo) {
return item_give_tag(poe_check_name(bitNo).c_str());
}