summaryrefslogtreecommitdiff
path: root/soh/src/code
diff options
context:
space:
mode:
authorinspectredc <78732756+inspectredc@users.noreply.github.com>2023-05-30 23:44:58 +0100
committerGitHub <noreply@github.com>2023-05-30 18:44:58 -0400
commite8eaac4d77a3751a463bdc4991d51c931a21698a (patch)
tree344edf640e3004f7e0b0177a7da79d98af065c83 /soh/src/code
parent71662c56b5fd17bebee73181c12f7098794f3014 (diff)
Fix: Switch Age with Enchancements giving kokiri sword (#2929)
* fix sword * separated flow path for switch age enhancements * Added comments
Diffstat (limited to 'soh/src/code')
-rw-r--r--soh/src/code/z_parameter.c42
1 files changed, 33 insertions, 9 deletions
diff --git a/soh/src/code/z_parameter.c b/soh/src/code/z_parameter.c
index 410fd22a4..5092dc79e 100644
--- a/soh/src/code/z_parameter.c
+++ b/soh/src/code/z_parameter.c
@@ -1400,12 +1400,7 @@ void Inventory_SwapAgeEquipment(void) {
if (i != 0) {
gSaveContext.childEquips.buttonItems[i] = gSaveContext.equips.buttonItems[i];
} else {
- if ((CVarGetInteger("gSwitchAge", 0) || CVarGetInteger("gSwitchTimeline", 0)) &&
- (gSaveContext.infTable[29] & 1)) {
- gSaveContext.childEquips.buttonItems[i] = ITEM_NONE;
- } else {
- gSaveContext.childEquips.buttonItems[i] = ITEM_SWORD_KOKIRI;
- }
+ gSaveContext.childEquips.buttonItems[i] = ITEM_SWORD_KOKIRI;
}
if (i != 0) {
@@ -1473,6 +1468,13 @@ void Inventory_SwapAgeEquipment(void) {
gSaveContext.infTable[29] |= 1;
}
+ // When using enhancements, set swordless flag if player doesn't have kokiri sword or hasn't equipped a sword yet.
+ // Then set the child equips button items to item none to ensure kokiri sword is not equipped
+ if ((CVarGetInteger("gSwitchAge", 0) || CVarGetInteger("gSwitchTimeline", 0)) && ((1 << 0 & gSaveContext.inventory.equipment) == 0 || gSaveContext.infTable[29] & 1)) {
+ gSaveContext.infTable[29] |= 1;
+ gSaveContext.childEquips.buttonItems[0] = ITEM_NONE;
+ }
+
for (i = 0; i < ARRAY_COUNT(gSaveContext.equips.buttonItems); i++) {
gSaveContext.adultEquips.buttonItems[i] = gSaveContext.equips.buttonItems[i];
@@ -1482,10 +1484,32 @@ void Inventory_SwapAgeEquipment(void) {
}
gSaveContext.adultEquips.equipment = gSaveContext.equips.equipment;
+ // Switching age using enhancements separated out to make vanilla flow clear
+ if (CVarGetInteger("gSwitchAge", 0) || CVarGetInteger("gSwitchTimeline", 0)) {
+ for (i = 0; i < ARRAY_COUNT(gSaveContext.equips.buttonItems); i++) {
+ gSaveContext.equips.buttonItems[i] = gSaveContext.childEquips.buttonItems[i];
+
+ if (i != 0) {
+ gSaveContext.equips.cButtonSlots[i - 1] = gSaveContext.childEquips.cButtonSlots[i - 1];
+ }
+
+ if (((gSaveContext.equips.buttonItems[i] >= ITEM_BOTTLE) &&
+ (gSaveContext.equips.buttonItems[i] <= ITEM_POE)) ||
+ ((gSaveContext.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
+ (gSaveContext.equips.buttonItems[i] <= ITEM_CLAIM_CHECK))) {
+ osSyncPrintf("Register_Item_Pt(%d)=%d\n", i, gSaveContext.equips.cButtonSlots[i - 1]);
+ gSaveContext.equips.buttonItems[i] =
+ gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[i - 1]];
+ }
+ }
- if (gSaveContext.childEquips.buttonItems[0] != ITEM_NONE ||
- CVarGetInteger("gSwitchAge", 0) ||
- CVarGetInteger("gSwitchTimeline", 0)) {
+ gSaveContext.equips.equipment = gSaveContext.childEquips.equipment;
+ gSaveContext.equips.equipment &= 0xFFF0;
+ // Equips kokiri sword in the inventory screen only if kokiri sword exists in inventory and a sword has been equipped already
+ if (!((1 << 0 & gSaveContext.inventory.equipment) == 0) && !(gSaveContext.infTable[29] & 1)) {
+ gSaveContext.equips.equipment |= 0x0001;
+ }
+ } else if (gSaveContext.childEquips.buttonItems[0] != ITEM_NONE) {
for (i = 0; i < ARRAY_COUNT(gSaveContext.equips.buttonItems); i++) {
gSaveContext.equips.buttonItems[i] = gSaveContext.childEquips.buttonItems[i];