Skip to content

Commit

Permalink
Finalize Bottle Override in Chest Contents (#34)
Browse files Browse the repository at this point in the history
* Fix bottle logic not applying properly.

Remove rnd namespace as that is the namespace we're currently in.

* Fix enGinkoMan override.

Finalize fix for bottle overrides in chests as well.
  • Loading branch information
PhlexPlexico committed Mar 10, 2024
1 parent d26dbd0 commit 30f1e60
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 69 deletions.
30 changes: 15 additions & 15 deletions code/include/rnd/savefile.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include "z3d/z3DVec.h"

// Increment the version number whenever the ExtSaveData structure is changed
#define EXTSAVEDATA_VERSION 14
#define EXTSAVEDATA_VERSION 15
#define SAVEFILE_SCENES_DISCOVERED_IDX_COUNT 4
#define SAVEFILE_SPOILER_ITEM_MAX 512

Expand Down Expand Up @@ -73,20 +73,20 @@ namespace rnd {
BitField<29, 1, u64> enOshGivenItem;
BitField<30, 1, u64> enGoGivenItem;
BitField<31, 1, u64> enBoss02GivenItem;
BitField<32, 1, u64> enGinkoManGivenItem;
BitField<33, 1, u64> enShnGivenItem;
BitField<34, 1, u64> enObjMoonStoneGivenItem;
BitField<35, 1, u64> enTownDeedGivenItem;
BitField<36, 1, u64> enSwampDeedGivenItem;
BitField<37, 1, u64> enMtnDeedGivenItem;
BitField<38, 1, u64> enOcnDeedGivenItem;
BitField<39, 1, u64> bottleMilkGiven;
BitField<40, 1, u64> bottleGoldDustGiven;
BitField<41, 1, u64> bottleSeahorseGiven;
BitField<42, 1, u64> bottleChateuGiven;
BitField<43, 1, u64> bottleMysteryMilkGiven;
BitField<44, 2, u64> progressiveSwordUpgrade;
BitField<45, 18, u64> unused;
BitField<32, 2, u64> enGinkoManGivenItem;
BitField<34, 1, u64> enShnGivenItem;
BitField<35, 1, u64> enObjMoonStoneGivenItem;
BitField<36, 1, u64> enTownDeedGivenItem;
BitField<37, 1, u64> enSwampDeedGivenItem;
BitField<38, 1, u64> enMtnDeedGivenItem;
BitField<39, 1, u64> enOcnDeedGivenItem;
BitField<40, 1, u64> bottleMilkGiven;
BitField<41, 1, u64> bottleGoldDustGiven;
BitField<42, 1, u64> bottleSeahorseGiven;
BitField<43, 1, u64> bottleChateuGiven;
BitField<44, 1, u64> bottleMysteryMilkGiven;
BitField<45, 2, u64> progressiveSwordUpgrade;
BitField<46, 18, u64> unused;
};
GivenItemRegister givenItemChecks;
union FairyCollectRegister {
Expand Down
65 changes: 11 additions & 54 deletions code/source/rnd/item_override.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,10 @@ namespace rnd {
gExtSaveData.givenItemChecks.enOskGivenItem = 1;
} else if (actorId == game::act::Id::EnKitan) {
getItemId = incomingNegative ? -0x03 : 0x03;
} else if (actorId == game::act::Id::EnGinkoMan) {
if (gExtSaveData.givenItemChecks.enGinkoManGivenItem == 1) {
getItemId = incomingNegative ? -0x03 : 0x03;
}
}

return getItemId;
Expand Down Expand Up @@ -471,12 +475,9 @@ namespace rnd {
} else if ((s16)storedGetItemId == -(s16)GetItemID::GI_MASK_GIANTS) {
gExtSaveData.givenItemChecks.enBoss02GivenItem = 1;
} else if (storedActorId == game::act::Id::EnGinkoMan) {
game::SaveData& saveData = game::GetCommonData().save;
if (gExtSaveData.givenItemChecks.enGinkoManGivenItem == 0) {
saveData.anonymous_77 = saveData.anonymous_77 | 8;
gExtSaveData.givenItemChecks.enGinkoManGivenItem = 1;
} else if (gExtSaveData.givenItemChecks.enGinkoManGivenItem == 1) {
saveData.anonymous_117 = saveData.anonymous_117 | 8;
gExtSaveData.givenItemChecks.enGinkoManGivenItem = 2;
}
} else if (storedActorId == game::act::Id::EnShn) {
Expand Down Expand Up @@ -563,44 +564,6 @@ namespace rnd {
return;
}

u16 ItemOverride_SetBottleRefill(u16 refItemId) {
switch (refItemId) {
case 0x60:
if (gExtSaveData.givenItemChecks.bottleMilkGiven == 1) {
storedGetItemId = GetItemID::GI_BOTTLE_MILK_REFILL;
return 0x92;
}
break;
case 0x6A:
if (gExtSaveData.givenItemChecks.bottleGoldDustGiven == 1) {
storedGetItemId = GetItemID::GI_BOTTLE_GOLD_DUST_REFILL;
return 0x93;
}
break;
case 0x6F:
if (gExtSaveData.givenItemChecks.bottleChateuGiven == 1) {
storedGetItemId = GetItemID::GI_BOTTLE_CHATEAU_ROMANI_REFILL;
return 0x91;
}
break;
case 0x6E:
if (gExtSaveData.givenItemChecks.bottleSeahorseGiven == 1) {
storedGetItemId = GetItemID::GI_BOTTLE_SEAHORSE_REFILL;
return 0x95;
}
break;
case 0x70:
if (gExtSaveData.givenItemChecks.bottleMysteryMilkGiven == 0) {
storedGetItemId = GetItemID::GI_BOTTLE_MYSTERY_MILK_REFILL;
return 0x94;
}
break;
default:
return (u16)GetItemID::GI_RUPEE_BLUE;
}
return (u16)refItemId;
}

u8 ItemOverride_SetProgressiveItemDraw(ItemOverride override) {
game::SaveData saveData = game::GetCommonData().save;
if (override.value.getItemId == 0x12) { // Ice trap
Expand Down Expand Up @@ -696,11 +659,14 @@ namespace rnd {
player->get_item_id = incomingGetItemId;
return;
} else if (override.key.type == ItemOverride_Type::OVR_CHEST &&
gExtSaveData.chestRewarded[override.key.scene][override.key.flag] == 1) {
gExtSaveData.chestRewarded[override.key.scene][override.key.flag] == 1 &&
(override.value.getItemId != 0x60 || override.value.getItemId != 0x6A ||
(override.value.getItemId < 0x6E && override.value.getItemId > 0x70))) {
// Override was already given, check to see if we're a refill item now, if not, give a blue rupee instead.
u16 overrideGetItemId = ItemOverride_SetBottleRefill(override.value.getItemId);
override.value.getItemId = overrideGetItemId;
override.value.looksLikeItemId = overrideGetItemId;
// Only do this for items that are not bottle refills.
// Bottle logic is taken care of in the ItemUpgrade function.
override.value.getItemId = 0x02;
override.value.looksLikeItemId = 0x02;
}

// This check is mainly to ensure we do not have repeatable progressive items within these base items.
Expand Down Expand Up @@ -735,15 +701,6 @@ namespace rnd {
}
}

// If we are a bottled item, store the GID to write the ext data. This will ensure through
// ItemUpgrade_BottleRefill that we get a refill on a bottle instead of a new bottle.
if (override.value.getItemId == 0x60 || override.value.getItemId == 0x6A ||
(override.value.getItemId > 0x6D && override.value.getItemId < 0x71)) {
storedGetItemId = (GetItemID) override.value.getItemId;
u16 overrideGetItemId = ItemOverride_SetBottleRefill(override.value.getItemId);
override.value.getItemId = overrideGetItemId;
override.value.looksLikeItemId = overrideGetItemId;
}
ItemOverride_Activate(override);
s16 baseItemId = rActiveItemRow->baseItemId;

Expand Down

0 comments on commit 30f1e60

Please sign in to comment.