Document upgrades

This commit is contained in:
Pablo 2025-08-01 17:37:50 +02:00
parent 4c2a451b9c
commit 1acc53cfc6
21 changed files with 300 additions and 121 deletions

View File

@ -3,6 +3,7 @@
#include "ultra64.h"
#include "item.h"
#include "upgrade.h"
struct PlayState;

View File

@ -76,18 +76,6 @@ typedef enum EquipValueBoots {
/* 4 */ EQUIP_VALUE_BOOTS_MAX
} EquipValueBoots;
typedef enum UpgradeType {
/* 0x00 */ UPG_QUIVER,
/* 0x01 */ UPG_BOMB_BAG,
/* 0x02 */ UPG_STRENGTH,
/* 0x03 */ UPG_SCALE,
/* 0x04 */ UPG_WALLET,
/* 0x05 */ UPG_BULLET_BAG,
/* 0x06 */ UPG_DEKU_STICKS,
/* 0x07 */ UPG_DEKU_NUTS,
/* 0x08 */ UPG_MAX
} UpgradeType;
typedef enum QuestItem {
/* 0x00 */ QUEST_MEDALLION_FOREST,
/* 0x01 */ QUEST_MEDALLION_FIRE,

View File

@ -485,10 +485,6 @@ typedef enum LinkAge {
#define TUNIC_EQUIP_TO_PLAYER(tunicEquip) ((tunicEquip) - 1)
#define BOOTS_EQUIP_TO_PLAYER(bootsEquip) ((bootsEquip) - 1)
#define CUR_UPG_VALUE(upg) ((s32)(gSaveContext.save.info.inventory.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
#define CAPACITY(upg, value) gUpgradeCapacities[upg][value]
#define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg))
#define CHECK_QUEST_ITEM(item) (gSaveContext.save.info.inventory.questItems & gBitFlags[item])
#define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.info.inventory.dungeonItems[dungeonIndex] & gBitFlags[item])

163
include/upgrade.h Normal file
View File

@ -0,0 +1,163 @@
#ifndef UPGRADE_H
#define UPGRADE_H
#include "assert.h"
#include "ultra64/ultratypes.h"
typedef enum UpgradeType {
/* 0x00 */ UPG_QUIVER,
/* 0x01 */ UPG_BOMB_BAG,
/* 0x02 */ UPG_STRENGTH,
/* 0x03 */ UPG_SCALE,
/* 0x04 */ UPG_WALLET,
/* 0x05 */ UPG_BULLET_BAG,
/* 0x06 */ UPG_DEKU_STICKS,
/* 0x07 */ UPG_DEKU_NUTS,
/* 0x08 */ UPG_MAX
} UpgradeType;
#define BIT_WIDTH_UPG_QUIVER 3
typedef enum QuiverUpgrades {
/* 0 */ UPG_QUIVER_NONE,
/* 1 */ UPG_QUIVER_NORMAL,
/* 2 */ UPG_QUIVER_BIG,
/* 3 */ UPG_QUIVER_BIGGEST,
/* 4 */ UPG_QUIVER_MAX
} QuiverUpgrades;
static_assert(UPG_QUIVER_MAX <= 1 << BIT_WIDTH_UPG_QUIVER, "All quiver upgrade values should fit in its assigned bitwidth");
#define BIT_WIDTH_UPG_BOMB_BAG 3
typedef enum BombBagUpgrades {
/* 0 */ UPG_BOMB_BAG_NONE,
/* 1 */ UPG_BOMB_BAG_NORMAL,
/* 2 */ UPG_BOMB_BAG_BIG,
/* 3 */ UPG_BOMB_BAG_BIGGEST,
/* 4 */ UPG_BOMB_BAG_MAX
} BombBagUpgrades;
static_assert(UPG_BOMB_BAG_MAX <= 1 << BIT_WIDTH_UPG_BOMB_BAG, "All bomb bag upgrade values should fit in its assigned bitwidth");
#define BIT_WIDTH_UPG_STRENGTH 3
typedef enum StrengthUpgrades {
/* 0 */ UPG_STRENGTH_NONE,
/* 1 */ UPG_STRENGTH_GORON_BRACELET,
/* 2 */ UPG_STRENGTH_SILVER_GAUNTLETS,
/* 3 */ UPG_STRENGTH_GOLD_GAUNTLETS,
/* 4 */ UPG_STRENGTH_MAX
} StrengthUpgrades;
static_assert(UPG_STRENGTH_MAX <= 1 << BIT_WIDTH_UPG_STRENGTH, "All strength upgrade values should fit in its assigned bitwidth");
#define BIT_WIDTH_UPG_SCALE 3
typedef enum ScaleUpgrades {
/* 0 */ UPG_SCALE_NONE,
/* 1 */ UPG_SCALE_SILVER,
/* 2 */ UPG_SCALE_GOLD,
/* 3 */ UPG_SCALE_MAX
} ScaleUpgrades;
static_assert(UPG_SCALE_MAX <= 1 << BIT_WIDTH_UPG_SCALE, "All scale upgrade values should fit in its assigned bitwidth");
#define BIT_WIDTH_UPG_WALLET 2
typedef enum WalletUpgrades {
/* 0 */ UPG_WALLET_CHILD,
/* 1 */ UPG_WALLET_ADULT,
/* 2 */ UPG_WALLET_GIANT,
/* 3 */ UPG_WALLET_MAX
} WalletUpgrades;
static_assert(UPG_WALLET_MAX <= 1 << BIT_WIDTH_UPG_WALLET, "All wallet upgrade values should fit in its assigned bitwidth");
#define BIT_WIDTH_UPG_BULLET_BAG 3
typedef enum BulletBagUpgrades {
/* 0 */ UPG_BULLET_BAG_NONE,
/* 1 */ UPG_BULLET_BAG_NORMAL,
/* 2 */ UPG_BULLET_BAG_BIG,
/* 3 */ UPG_BULLET_BAG_BIGGEST,
/* 4 */ UPG_BULLET_BAG_MAX
} BulletBagUpgrades;
static_assert(UPG_BULLET_BAG_MAX <= 1 << BIT_WIDTH_UPG_BULLET_BAG, "All bullet bag upgrade values should fit in its assigned bitwidth");
#define BIT_WIDTH_UPG_DEKU_STICKS 3
typedef enum DekuStickUpgrades {
/* 0 */ UPG_DEKU_STICKS_NONE,
/* 1 */ UPG_DEKU_STICKS_10,
/* 2 */ UPG_DEKU_STICKS_20,
/* 3 */ UPG_DEKU_STICKS_30,
/* 4 */ UPG_DEKU_STICKS_MAX
} DekuStickUpgrades;
static_assert(UPG_DEKU_STICKS_MAX <= 1 << BIT_WIDTH_UPG_DEKU_STICKS, "All deku stick upgrade values should fit in its assigned bitwidth");
#define BIT_WIDTH_UPG_DEKU_NUTS 3
typedef enum DekuNutUpgrades {
/* 0 */ UPG_DEKU_NUTS_NONE,
/* 1 */ UPG_DEKU_NUTS_20,
/* 2 */ UPG_DEKU_NUTS_30,
/* 3 */ UPG_DEKU_NUTS_40,
/* 4 */ UPG_DEKU_NUTS_MAX
} DekuNutUpgrades;
static_assert(UPG_DEKU_NUTS_MAX <= 1 << BIT_WIDTH_UPG_DEKU_NUTS, "All deku nut upgrade values should fit in its assigned bitwidth");
#define BITS_PER_BYTE 8
static_assert(
BIT_WIDTH_UPG_QUIVER +
BIT_WIDTH_UPG_BOMB_BAG +
BIT_WIDTH_UPG_STRENGTH +
BIT_WIDTH_UPG_SCALE +
BIT_WIDTH_UPG_WALLET +
BIT_WIDTH_UPG_BULLET_BAG +
BIT_WIDTH_UPG_DEKU_STICKS +
BIT_WIDTH_UPG_DEKU_NUTS < sizeof(u32) * BITS_PER_BYTE,
"Upgrades must fit in a u32"
);
#define SHIFT_UPG_QUIVER 0
#define SHIFT_UPG_BOMB_BAG (SHIFT_UPG_QUIVER + BIT_WIDTH_UPG_QUIVER)
#define SHIFT_UPG_STRENGTH (SHIFT_UPG_BOMB_BAG + BIT_WIDTH_UPG_BOMB_BAG)
#define SHIFT_UPG_SCALE (SHIFT_UPG_STRENGTH + BIT_WIDTH_UPG_STRENGTH)
#define SHIFT_UPG_WALLET (SHIFT_UPG_SCALE + BIT_WIDTH_UPG_SCALE)
#define SHIFT_UPG_BULLET_BAG (SHIFT_UPG_WALLET + BIT_WIDTH_UPG_WALLET)
#define SHIFT_UPG_DEKU_STICKS (SHIFT_UPG_BULLET_BAG + BIT_WIDTH_UPG_BULLET_BAG)
#define SHIFT_UPG_DEKU_NUTS (SHIFT_UPG_DEKU_STICKS + BIT_WIDTH_UPG_DEKU_STICKS)
#ifndef GLUE
# define GLUE(a, b) a##b
#endif
#ifndef GLUE2
# define GLUE2(a, b) GLUE(a, b)
#endif
#define GET_UPGRADE_BITMASK(upg) (((1 << GLUE2(BIT_WIDTH_, upg)) - 1) << GLUE2(SHIFT_, upg))
#define GET_PACKED_UPGRADE_VALUE(upgValue, upg) ((upgValue & ((1 << GLUE2(BIT_WIDTH_, upg)) - 1)) << GLUE2(SHIFT_, upg))
#define GET_PACKED_UPGRADES_VALUE(quiver, bombBag, strength, scale, wallet, bulletBag, dekuSticks, dekuNuts) \
( \
GET_PACKED_UPGRADE_VALUE(quiver, UPG_QUIVER) | \
GET_PACKED_UPGRADE_VALUE(bombBag, UPG_BOMB_BAG) | \
GET_PACKED_UPGRADE_VALUE(strength, UPG_STRENGTH) | \
GET_PACKED_UPGRADE_VALUE(scale, UPG_SCALE) | \
GET_PACKED_UPGRADE_VALUE(wallet, UPG_WALLET) | \
GET_PACKED_UPGRADE_VALUE(bulletBag, UPG_BULLET_BAG) | \
GET_PACKED_UPGRADE_VALUE(dekuSticks, UPG_DEKU_STICKS) | \
GET_PACKED_UPGRADE_VALUE(dekuNuts, UPG_DEKU_NUTS) \
)
#define CUR_UPG_VALUE(upg) ((s32)(gSaveContext.save.info.inventory.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
#define CAPACITY(upg, value) gUpgradeCapacities[upg][value]
#define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg))
#endif

View File

@ -31,24 +31,25 @@ u16 gEquipNegMasks[EQUIP_TYPE_MAX] = {
};
u32 gUpgradeMasks[UPG_MAX] = {
0x00000007, // UPG_QUIVER
0x00000038, // UPG_BOMB_BAG
0x000001C0, // UPG_STRENGTH
0x00000E00, // UPG_SCALE
0x00003000, // UPG_WALLET
0x0001C000, // UPG_BULLET_BAG
0x000E0000, // UPG_DEKU_STICKS
0x00700000, // UPG_DEKU_NUTS
GET_UPGRADE_BITMASK(UPG_QUIVER),
GET_UPGRADE_BITMASK(UPG_BOMB_BAG),
GET_UPGRADE_BITMASK(UPG_STRENGTH),
GET_UPGRADE_BITMASK(UPG_SCALE),
GET_UPGRADE_BITMASK(UPG_WALLET),
GET_UPGRADE_BITMASK(UPG_BULLET_BAG),
GET_UPGRADE_BITMASK(UPG_DEKU_STICKS),
GET_UPGRADE_BITMASK(UPG_DEKU_NUTS),
};
u32 gUpgradeNegMasks[UPG_MAX] = {
~0x00000007, // UPG_QUIVER
~0x00000038, // UPG_BOMB_BAG
~0x000001C0, // UPG_STRENGTH
~0x00000E00, // UPG_SCALE
~0x00003000, // UPG_WALLET
~0x0001C000, // UPG_BULLET_BAG
~0x000E0000, // UPG_DEKU_STICKS
~0x00700000, // UPG_DEKU_NUTS
~GET_UPGRADE_BITMASK(UPG_QUIVER),
~GET_UPGRADE_BITMASK(UPG_BOMB_BAG),
~GET_UPGRADE_BITMASK(UPG_STRENGTH),
~GET_UPGRADE_BITMASK(UPG_SCALE),
~GET_UPGRADE_BITMASK(UPG_WALLET),
~GET_UPGRADE_BITMASK(UPG_BULLET_BAG),
~GET_UPGRADE_BITMASK(UPG_DEKU_STICKS),
~GET_UPGRADE_BITMASK(UPG_DEKU_NUTS),
};
u8 gEquipShifts[EQUIP_TYPE_MAX] = {
@ -59,14 +60,14 @@ u8 gEquipShifts[EQUIP_TYPE_MAX] = {
};
u8 gUpgradeShifts[UPG_MAX] = {
0, // UPG_QUIVER
3, // UPG_BOMB_BAG
6, // UPG_STRENGTH
9, // UPG_SCALE
12, // UPG_WALLET
14, // UPG_BULLET_BAG
17, // UPG_DEKU_STICKS
20, // UPG_DEKU_NUTS
SHIFT_UPG_QUIVER,
SHIFT_UPG_BOMB_BAG,
SHIFT_UPG_STRENGTH,
SHIFT_UPG_SCALE,
SHIFT_UPG_WALLET,
SHIFT_UPG_BULLET_BAG,
SHIFT_UPG_DEKU_STICKS,
SHIFT_UPG_DEKU_NUTS,
};
u16 gUpgradeCapacities[UPG_MAX][4] = {

View File

@ -1503,10 +1503,10 @@ u8 Item_Give(PlayState* play, u8 item) {
return ITEM_NONE;
}
} else if ((item == ITEM_QUIVER_30) || (item == ITEM_BOW)) {
if (CUR_UPG_VALUE(UPG_QUIVER) == 0) {
Inventory_ChangeUpgrade(UPG_QUIVER, 1);
if (CUR_UPG_VALUE(UPG_QUIVER) == UPG_QUIVER_NONE) {
Inventory_ChangeUpgrade(UPG_QUIVER, UPG_QUIVER_NORMAL);
INV_CONTENT(ITEM_BOW) = ITEM_BOW;
AMMO(ITEM_BOW) = CAPACITY(UPG_QUIVER, 1);
AMMO(ITEM_BOW) = CAPACITY(UPG_QUIVER, UPG_QUIVER_NORMAL);
return ITEM_NONE;
} else {
AMMO(ITEM_BOW)++;
@ -1515,26 +1515,26 @@ u8 Item_Give(PlayState* play, u8 item) {
}
}
} else if (item == ITEM_QUIVER_40) {
Inventory_ChangeUpgrade(UPG_QUIVER, 2);
AMMO(ITEM_BOW) = CAPACITY(UPG_QUIVER, 2);
Inventory_ChangeUpgrade(UPG_QUIVER, UPG_QUIVER_BIG);
AMMO(ITEM_BOW) = CAPACITY(UPG_QUIVER, UPG_QUIVER_BIG);
return ITEM_NONE;
} else if (item == ITEM_QUIVER_50) {
Inventory_ChangeUpgrade(UPG_QUIVER, 3);
AMMO(ITEM_BOW) = CAPACITY(UPG_QUIVER, 3);
Inventory_ChangeUpgrade(UPG_QUIVER, UPG_QUIVER_BIGGEST);
AMMO(ITEM_BOW) = CAPACITY(UPG_QUIVER, UPG_QUIVER_BIGGEST);
return ITEM_NONE;
} else if (item == ITEM_BULLET_BAG_40) {
Inventory_ChangeUpgrade(UPG_BULLET_BAG, 2);
AMMO(ITEM_SLINGSHOT) = CAPACITY(UPG_BULLET_BAG, 2);
Inventory_ChangeUpgrade(UPG_BULLET_BAG, UPG_BULLET_BAG_BIG);
AMMO(ITEM_SLINGSHOT) = CAPACITY(UPG_BULLET_BAG, UPG_BULLET_BAG_BIG);
return ITEM_NONE;
} else if (item == ITEM_BULLET_BAG_50) {
Inventory_ChangeUpgrade(UPG_BULLET_BAG, 3);
AMMO(ITEM_SLINGSHOT) = CAPACITY(UPG_BULLET_BAG, 3);
Inventory_ChangeUpgrade(UPG_BULLET_BAG, UPG_BULLET_BAG_BIGGEST);
AMMO(ITEM_SLINGSHOT) = CAPACITY(UPG_BULLET_BAG, UPG_BULLET_BAG_BIGGEST);
return ITEM_NONE;
} else if (item == ITEM_BOMB_BAG_20) {
if (CUR_UPG_VALUE(UPG_BOMB_BAG) == 0) {
Inventory_ChangeUpgrade(UPG_BOMB_BAG, 1);
if (CUR_UPG_VALUE(UPG_BOMB_BAG) == UPG_BOMB_BAG_NONE) {
Inventory_ChangeUpgrade(UPG_BOMB_BAG, UPG_BOMB_BAG_NORMAL);
INV_CONTENT(ITEM_BOMB) = ITEM_BOMB;
AMMO(ITEM_BOMB) = CAPACITY(UPG_BOMB_BAG, 1);
AMMO(ITEM_BOMB) = CAPACITY(UPG_BOMB_BAG, UPG_BOMB_BAG_NORMAL);
return ITEM_NONE;
} else {
AMMO(ITEM_BOMB)++;
@ -1543,61 +1543,61 @@ u8 Item_Give(PlayState* play, u8 item) {
}
}
} else if (item == ITEM_BOMB_BAG_30) {
Inventory_ChangeUpgrade(UPG_BOMB_BAG, 2);
AMMO(ITEM_BOMB) = CAPACITY(UPG_BOMB_BAG, 2);
Inventory_ChangeUpgrade(UPG_BOMB_BAG, UPG_BOMB_BAG_BIG);
AMMO(ITEM_BOMB) = CAPACITY(UPG_BOMB_BAG, UPG_BOMB_BAG_BIG);
return ITEM_NONE;
} else if (item == ITEM_BOMB_BAG_40) {
Inventory_ChangeUpgrade(UPG_BOMB_BAG, 3);
AMMO(ITEM_BOMB) = CAPACITY(UPG_BOMB_BAG, 3);
Inventory_ChangeUpgrade(UPG_BOMB_BAG, UPG_BOMB_BAG_BIGGEST);
AMMO(ITEM_BOMB) = CAPACITY(UPG_BOMB_BAG, UPG_BOMB_BAG_BIGGEST);
return ITEM_NONE;
} else if (item == ITEM_STRENGTH_GORONS_BRACELET) {
Inventory_ChangeUpgrade(UPG_STRENGTH, 1);
Inventory_ChangeUpgrade(UPG_STRENGTH, UPG_STRENGTH_GORON_BRACELET);
return ITEM_NONE;
} else if (item == ITEM_STRENGTH_SILVER_GAUNTLETS) {
Inventory_ChangeUpgrade(UPG_STRENGTH, 2);
Inventory_ChangeUpgrade(UPG_STRENGTH, UPG_STRENGTH_SILVER_GAUNTLETS);
return ITEM_NONE;
} else if (item == ITEM_STRENGTH_GOLD_GAUNTLETS) {
Inventory_ChangeUpgrade(UPG_STRENGTH, 3);
Inventory_ChangeUpgrade(UPG_STRENGTH, UPG_STRENGTH_GOLD_GAUNTLETS);
return ITEM_NONE;
} else if (item == ITEM_SCALE_SILVER) {
Inventory_ChangeUpgrade(UPG_SCALE, 1);
Inventory_ChangeUpgrade(UPG_SCALE, UPG_SCALE_SILVER);
return ITEM_NONE;
} else if (item == ITEM_SCALE_GOLDEN) {
Inventory_ChangeUpgrade(UPG_SCALE, 2);
Inventory_ChangeUpgrade(UPG_SCALE, UPG_SCALE_GOLD);
return ITEM_NONE;
} else if (item == ITEM_ADULTS_WALLET) {
Inventory_ChangeUpgrade(UPG_WALLET, 1);
Inventory_ChangeUpgrade(UPG_WALLET, UPG_WALLET_ADULT);
return ITEM_NONE;
} else if (item == ITEM_GIANTS_WALLET) {
Inventory_ChangeUpgrade(UPG_WALLET, 2);
Inventory_ChangeUpgrade(UPG_WALLET, UPG_WALLET_GIANT);
return ITEM_NONE;
} else if (item == ITEM_DEKU_STICK_UPGRADE_20) {
if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_DEKU_STICK) = ITEM_DEKU_STICK;
}
Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 2);
AMMO(ITEM_DEKU_STICK) = CAPACITY(UPG_DEKU_STICKS, 2);
Inventory_ChangeUpgrade(UPG_DEKU_STICKS, UPG_DEKU_STICKS_20);
AMMO(ITEM_DEKU_STICK) = CAPACITY(UPG_DEKU_STICKS, UPG_DEKU_STICKS_20);
return ITEM_NONE;
} else if (item == ITEM_DEKU_STICK_UPGRADE_30) {
if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_DEKU_STICK) = ITEM_DEKU_STICK;
}
Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 3);
AMMO(ITEM_DEKU_STICK) = CAPACITY(UPG_DEKU_STICKS, 3);
Inventory_ChangeUpgrade(UPG_DEKU_STICKS, UPG_DEKU_STICKS_30);
AMMO(ITEM_DEKU_STICK) = CAPACITY(UPG_DEKU_STICKS, UPG_DEKU_STICKS_30);
return ITEM_NONE;
} else if (item == ITEM_DEKU_NUT_UPGRADE_30) {
if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_DEKU_NUT) = ITEM_DEKU_NUT;
}
Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 2);
AMMO(ITEM_DEKU_NUT) = CAPACITY(UPG_DEKU_NUTS, 2);
Inventory_ChangeUpgrade(UPG_DEKU_NUTS, UPG_DEKU_NUTS_30);
AMMO(ITEM_DEKU_NUT) = CAPACITY(UPG_DEKU_NUTS, UPG_DEKU_NUTS_30);
return ITEM_NONE;
} else if (item == ITEM_DEKU_NUT_UPGRADE_40) {
if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_DEKU_NUT) = ITEM_DEKU_NUT;
}
Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 3);
AMMO(ITEM_DEKU_NUT) = CAPACITY(UPG_DEKU_NUTS, 3);
Inventory_ChangeUpgrade(UPG_DEKU_NUTS, UPG_DEKU_NUTS_40);
AMMO(ITEM_DEKU_NUT) = CAPACITY(UPG_DEKU_NUTS, UPG_DEKU_NUTS_40);
return ITEM_NONE;
} else if (item == ITEM_LONGSHOT) {
INV_CONTENT(item) = item;
@ -1610,7 +1610,7 @@ u8 Item_Give(PlayState* play, u8 item) {
return ITEM_NONE;
} else if (item == ITEM_DEKU_STICK) {
if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 1);
Inventory_ChangeUpgrade(UPG_DEKU_STICKS, UPG_DEKU_STICKS_10);
AMMO(ITEM_DEKU_STICK) = 1;
} else {
AMMO(ITEM_DEKU_STICK)++;
@ -1620,7 +1620,7 @@ u8 Item_Give(PlayState* play, u8 item) {
}
} else if ((item == ITEM_DEKU_STICKS_5) || (item == ITEM_DEKU_STICKS_10)) {
if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 1);
Inventory_ChangeUpgrade(UPG_DEKU_STICKS, UPG_DEKU_STICKS_10);
AMMO(ITEM_DEKU_STICK) = sAmmoRefillCounts[item - ITEM_DEKU_STICKS_5];
} else {
AMMO(ITEM_DEKU_STICK) += sAmmoRefillCounts[item - ITEM_DEKU_STICKS_5];
@ -1631,7 +1631,7 @@ u8 Item_Give(PlayState* play, u8 item) {
item = ITEM_DEKU_STICK;
} else if (item == ITEM_DEKU_NUT) {
if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 1);
Inventory_ChangeUpgrade(UPG_DEKU_NUTS, UPG_DEKU_NUTS_20);
AMMO(ITEM_DEKU_NUT) = ITEM_DEKU_NUT;
} else {
AMMO(ITEM_DEKU_NUT)++;
@ -1641,7 +1641,7 @@ u8 Item_Give(PlayState* play, u8 item) {
}
} else if ((item == ITEM_DEKU_NUTS_5) || (item == ITEM_DEKU_NUTS_10)) {
if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 1);
Inventory_ChangeUpgrade(UPG_DEKU_NUTS, UPG_DEKU_NUTS_20);
AMMO(ITEM_DEKU_NUT) += sAmmoRefillCounts[item - ITEM_DEKU_NUTS_5];
PRINTF(T("デクの実 %d(%d)=%d BS_count=%d\n", "Deku Nuts %d(%d)=%d BS_count=%d\n"), item, ITEM_DEKU_NUTS_5,
item - ITEM_DEKU_NUTS_5, sAmmoRefillCounts[item - ITEM_DEKU_NUTS_5]);
@ -1696,7 +1696,7 @@ u8 Item_Give(PlayState* play, u8 item) {
return ITEM_BOW;
} else if (item == ITEM_SLINGSHOT) {
Inventory_ChangeUpgrade(UPG_BULLET_BAG, 1);
Inventory_ChangeUpgrade(UPG_BULLET_BAG, UPG_BULLET_BAG_NORMAL);
INV_CONTENT(ITEM_SLINGSHOT) = ITEM_SLINGSHOT;
AMMO(ITEM_SLINGSHOT) = 30;
return ITEM_NONE;
@ -1938,7 +1938,7 @@ u8 Item_CheckObtainability(u8 item) {
} else if ((item == ITEM_BOMBCHUS_5) || (item == ITEM_BOMBCHUS_20)) {
return ITEM_NONE;
} else if ((item == ITEM_QUIVER_30) || (item == ITEM_BOW)) {
if (CUR_UPG_VALUE(UPG_QUIVER) == 0) {
if (CUR_UPG_VALUE(UPG_QUIVER) == UPG_QUIVER_NONE) {
return ITEM_NONE;
} else {
return 0;
@ -1948,7 +1948,7 @@ u8 Item_CheckObtainability(u8 item) {
} else if ((item == ITEM_BULLET_BAG_40) || (item == ITEM_BULLET_BAG_50)) {
return ITEM_NONE;
} else if ((item == ITEM_BOMB_BAG_20) || (item == ITEM_BOMB)) {
if (CUR_UPG_VALUE(UPG_BOMB_BAG) == 0) {
if (CUR_UPG_VALUE(UPG_BOMB_BAG) == UPG_BOMB_BAG_NONE) {
return ITEM_NONE;
} else {
return 0;
@ -3186,8 +3186,16 @@ void Interface_Draw(PlayState* play) {
static s16 D_80125B1C[][3] = {
{ 0, 150, 0 }, { 100, 255, 0 }, { 255, 255, 255 }, { 0, 0, 0 }, { 255, 255, 255 },
};
static s16 rupeeDigitsFirst[] = { 1, 0, 0 };
static s16 rupeeDigitsCount[] = { 2, 3, 3 };
static s16 rupeeDigitsFirst[] = {
1, // UPG_WALLET_CHILD
0, // UPG_WALLET_ADULT
0 // UPG_WALLET_GIANT
};
static s16 rupeeDigitsCount[] = {
2, // UPG_WALLET_CHILD
3, // UPG_WALLET_ADULT
3 // UPG_WALLET_GIANT
};
static s16 spoilingItemEntrances[] = { ENTR_LOST_WOODS_2, ENTR_ZORAS_DOMAIN_3, ENTR_ZORAS_DOMAIN_3 };
static f32 D_80125B54[] = { -40.0f, -35.0f }; // unused
static s16 D_80125B5C[] = { 91, 91 }; // unused

View File

@ -815,7 +815,7 @@ s32 Player_GetStrength(void) {
if (LINK_IS_ADULT) {
return strengthUpgrade;
} else if (strengthUpgrade != 0) {
} else if (strengthUpgrade != UPG_STRENGTH_NONE) {
return PLAYER_STR_BRACELET;
} else {
return PLAYER_STR_NONE;
@ -1132,10 +1132,10 @@ void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dL
if (LINK_IS_ADULT) {
s32 strengthUpgrade = CUR_UPG_VALUE(UPG_STRENGTH);
if (strengthUpgrade >= 2) { // silver or gold gauntlets
if (strengthUpgrade >= UPG_STRENGTH_SILVER_GAUNTLETS) {
gDPPipeSync(POLY_OPA_DISP++);
color = &sGauntletColors[strengthUpgrade - 2];
color = &sGauntletColors[strengthUpgrade - UPG_STRENGTH_SILVER_GAUNTLETS];
gDPSetEnvColor(POLY_OPA_DISP++, color->r, color->g, color->b, 0);
gSPDisplayList(POLY_OPA_DISP++, gLinkAdultLeftGauntletPlate1DL);

View File

@ -185,7 +185,16 @@ static Inventory sNewSaveInventory = {
// equipment
(((1 << EQUIP_INV_TUNIC_KOKIRI) << (EQUIP_TYPE_TUNIC * 4)) |
((1 << EQUIP_INV_BOOTS_KOKIRI) << (EQUIP_TYPE_BOOTS * 4))),
0, // upgrades
GET_PACKED_UPGRADES_VALUE(
UPG_QUIVER_NONE,
UPG_BOMB_BAG_NONE,
UPG_STRENGTH_NONE,
UPG_SCALE_NONE,
UPG_WALLET_CHILD,
UPG_BULLET_BAG_NONE,
UPG_DEKU_STICKS_NONE,
UPG_DEKU_NUTS_NONE
), // upgrades
0, // questItems
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // dungeonItems
{
@ -345,7 +354,16 @@ static Inventory sDebugSaveInventory = {
(((1 << EQUIP_INV_BOOTS_KOKIRI) << (EQUIP_TYPE_BOOTS * 4)) |
((1 << EQUIP_INV_BOOTS_IRON) << (EQUIP_TYPE_BOOTS * 4)) |
((1 << EQUIP_INV_BOOTS_HOVER) << (EQUIP_TYPE_BOOTS * 4)))),
0x125249, // upgrades
GET_PACKED_UPGRADES_VALUE(
UPG_QUIVER_NORMAL,
UPG_BOMB_BAG_NORMAL,
UPG_STRENGTH_GORON_BRACELET,
UPG_SCALE_SILVER,
UPG_WALLET_ADULT,
UPG_BULLET_BAG_NORMAL,
UPG_DEKU_STICKS_10,
UPG_DEKU_NUTS_20
), // upgrades
0x1E3FFFF, // questItems
{ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // dungeonItems
{ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 }, // dungeonKeys

View File

@ -410,13 +410,13 @@ void EnDns_Talk(EnDns* this, PlayState* play) {
void EnDns_OfferSaleItem(EnDns* this, PlayState* play) {
if (DNS_GET_TYPE(&this->actor) == DNS_TYPE_DEKU_STICK_UPGRADE) {
if (CUR_UPG_VALUE(UPG_DEKU_STICKS) < 2) {
if (CUR_UPG_VALUE(UPG_DEKU_STICKS) < UPG_DEKU_STICKS_20) {
Actor_OfferGetItem(&this->actor, play, GI_DEKU_STICK_UPGRADE_20, 130.0f, 100.0f);
} else {
Actor_OfferGetItem(&this->actor, play, GI_DEKU_STICK_UPGRADE_30, 130.0f, 100.0f);
}
} else if (DNS_GET_TYPE(&this->actor) == DNS_TYPE_DEKU_NUT_UPGRADE) {
if (CUR_UPG_VALUE(UPG_DEKU_NUTS) < 2) {
if (CUR_UPG_VALUE(UPG_DEKU_NUTS) < UPG_DEKU_NUTS_30) {
Actor_OfferGetItem(&this->actor, play, GI_DEKU_NUT_UPGRADE_30, 130.0f, 100.0f);
} else {
Actor_OfferGetItem(&this->actor, play, GI_DEKU_NUT_UPGRADE_40, 130.0f, 100.0f);

View File

@ -205,7 +205,7 @@ void EnDntJiji_Walk(EnDntJiji* this, PlayState* play) {
this->actor.speed = 3.0f;
}
if (this->actor.xzDistToPlayer < 100.0f) {
if (CUR_UPG_VALUE(UPG_DEKU_STICKS) == 1) {
if (CUR_UPG_VALUE(UPG_DEKU_STICKS) == UPG_DEKU_STICKS_10) {
this->getItemId = GI_DEKU_STICK_UPGRADE_20;
} else {
this->getItemId = GI_DEKU_STICK_UPGRADE_30;
@ -237,7 +237,7 @@ void EnDntJiji_SetupCower(EnDntJiji* this, PlayState* play) {
EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 3.0f, 0, 9, 3, 10, HAHEN_OBJECT_DEFAULT, 10, NULL);
Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP);
if ((CUR_UPG_VALUE(UPG_DEKU_NUTS) == 1) || (CUR_UPG_VALUE(UPG_DEKU_NUTS) == 0)) {
if ((CUR_UPG_VALUE(UPG_DEKU_NUTS) == UPG_DEKU_NUTS_20) || (CUR_UPG_VALUE(UPG_DEKU_NUTS) == UPG_DEKU_NUTS_NONE)) {
this->getItemId = GI_DEKU_NUT_UPGRADE_30;
} else {
this->getItemId = GI_DEKU_NUT_UPGRADE_40;

View File

@ -117,7 +117,7 @@ u16 EnDu_GetTextId(PlayState* play, Actor* actor) {
if (textId != 0) {
return textId;
}
if (CUR_UPG_VALUE(UPG_STRENGTH) != 0) {
if (CUR_UPG_VALUE(UPG_STRENGTH) != UPG_STRENGTH_NONE) {
if (CHECK_QUEST_ITEM(QUEST_GORON_RUBY)) {
return 0x301E;
} else {
@ -522,7 +522,7 @@ void func_809FEB08(EnDu* this, PlayState* play) {
EnDu_SetupAction(this, func_809FE3C0);
return;
}
if (CUR_UPG_VALUE(UPG_STRENGTH) <= 0) {
if (CUR_UPG_VALUE(UPG_STRENGTH) < UPG_STRENGTH_GORON_BRACELET) {
this->actor.textId = 0x301C;
EnDu_SetupAction(this, func_809FEC14);
} else {

View File

@ -405,7 +405,7 @@ void EnExItem_TargetPrizeApproach(EnExItem* this, PlayState* play) {
this->actor.draw = NULL;
Player_SetCsActionWithHaltedActors(play, NULL, PLAYER_CSACTION_7);
this->actor.parent = NULL;
if (CUR_UPG_VALUE(UPG_BULLET_BAG) == 1) {
if (CUR_UPG_VALUE(UPG_BULLET_BAG) == UPG_BULLET_BAG_NORMAL) {
getItemId = GI_BULLET_BAG_40;
} else {
getItemId = GI_BULLET_BAG_50;
@ -421,7 +421,7 @@ void EnExItem_TargetPrizeGive(EnExItem* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actionFunc = EnExItem_TargetPrizeFinish;
} else {
getItemId = (CUR_UPG_VALUE(UPG_BULLET_BAG) == 2) ? GI_BULLET_BAG_50 : GI_BULLET_BAG_40;
getItemId = (CUR_UPG_VALUE(UPG_BULLET_BAG) == UPG_BULLET_BAG_BIG) ? GI_BULLET_BAG_50 : GI_BULLET_BAG_40;
Actor_OfferGetItem(&this->actor, play, getItemId, 2000.0f, 1000.0f);
}

View File

@ -516,10 +516,10 @@ void EnGe1_WaitTillItemGiven_Archery(EnGe1* this, PlayState* play) {
if (this->stateFlags & GE1_STATE_GIVE_QUIVER) {
switch (CUR_UPG_VALUE(UPG_QUIVER)) {
//! @bug Asschest. See next function for details
case 1:
case UPG_QUIVER_NORMAL:
getItemId = GI_QUIVER_40;
break;
case 2:
case UPG_QUIVER_BIG:
getItemId = GI_QUIVER_50;
break;
}
@ -544,10 +544,10 @@ void EnGe1_BeginGiveItem_Archery(EnGe1* this, PlayState* play) {
//! over from the previous function run in EnGe1_Update, namely EnGe1_CueUpAnimation. The top stack variable
//! in that function is &this->skelAnime = thisx + 198, and depending on where this loads in memory, the
//! getItemId changes.
case 1:
case UPG_QUIVER_NORMAL:
getItemId = GI_QUIVER_40;
break;
case 2:
case UPG_QUIVER_BIG:
getItemId = GI_QUIVER_50;
break;
}

View File

@ -275,7 +275,7 @@ s16 EnGo_UpdateTalkState(PlayState* play, Actor* thisx) {
switch (thisx->textId) {
case 0x300A:
if (play->msgCtx.choiceIndex == 0) {
if (CUR_UPG_VALUE(UPG_STRENGTH) != 0 || GET_INFTABLE(INFTABLE_EB)) {
if (CUR_UPG_VALUE(UPG_STRENGTH) != UPG_STRENGTH_NONE || GET_INFTABLE(INFTABLE_EB)) {
thisx->textId = 0x300B;
} else {
thisx->textId = 0x300C;

View File

@ -383,7 +383,7 @@ s16 EnGo2_UpdateTalkStateGoronDmtBombFlower(PlayState* play, EnGo2* this) {
// Ask question to DMT Goron by bomb flower
if (this->actor.textId == 0x300A) {
if (play->msgCtx.choiceIndex == 0) {
this->actor.textId = CUR_UPG_VALUE(UPG_STRENGTH) != 0 ? 0x300B : 0x300C;
this->actor.textId = CUR_UPG_VALUE(UPG_STRENGTH) != UPG_STRENGTH_NONE ? 0x300B : 0x300C;
} else {
this->actor.textId = 0x300D;
}
@ -482,10 +482,10 @@ u16 EnGo2_GetTextIdGoronCityLowestFloor(PlayState* play, EnGo2* this) {
} else if (CHECK_QUEST_ITEM(QUEST_GORON_RUBY)) {
return 0x3027;
} else {
return CUR_UPG_VALUE(UPG_STRENGTH) != 0 ? 0x302C
: !Flags_GetSwitch(play, 0x1B) ? 0x3017
: GET_INFTABLE(INFTABLE_F8) ? 0x3019
: 0x3018;
return CUR_UPG_VALUE(UPG_STRENGTH) != UPG_STRENGTH_NONE ? 0x302C
: !Flags_GetSwitch(play, 0x1B) ? 0x3017
: GET_INFTABLE(INFTABLE_F8) ? 0x3019
: 0x3018;
}
}

View File

@ -536,7 +536,7 @@ void EnOssan_TalkGoronShopkeeper(PlayState* play) {
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
if (GET_EVENTCHKINF(EVENTCHKINF_25)) {
Message_ContinueTextbox(play, 0x3028);
} else if (CUR_UPG_VALUE(UPG_STRENGTH) != 0) {
} else if (CUR_UPG_VALUE(UPG_STRENGTH) != UPG_STRENGTH_NONE) {
Message_ContinueTextbox(play, 0x302D);
} else {
Message_ContinueTextbox(play, 0x300F);

View File

@ -247,11 +247,11 @@ void EnSth_GivePlayerItem(EnSth* this, PlayState* play) {
case 1:
case 3:
switch (CUR_UPG_VALUE(UPG_WALLET)) {
case 0:
case UPG_WALLET_CHILD:
getItemId = GI_WALLET_ADULT;
break;
case 1:
case UPG_WALLET_ADULT:
getItemId = GI_WALLET_GIANT;
break;
}

View File

@ -360,7 +360,7 @@ void EnSyatekiMan_EndGame(EnSyatekiMan* this, PlayState* play) {
if (!GET_ITEMGETINF(ITEMGETINF_0D)) {
PRINTF(VT_FGCOL(GREEN) "☆☆☆☆☆ Equip_Pachinko ☆☆☆☆☆ %d\n" VT_RST,
CUR_UPG_VALUE(UPG_BULLET_BAG));
if (CUR_UPG_VALUE(UPG_BULLET_BAG) == 1) {
if (CUR_UPG_VALUE(UPG_BULLET_BAG) == UPG_BULLET_BAG_NORMAL) {
this->getItemId = GI_BULLET_BAG_40;
} else {
this->getItemId = GI_BULLET_BAG_50;
@ -372,13 +372,13 @@ void EnSyatekiMan_EndGame(EnSyatekiMan* this, PlayState* play) {
if (!GET_ITEMGETINF(ITEMGETINF_0E)) {
PRINTF(VT_FGCOL(GREEN) "☆☆☆☆☆ Equip_Bow ☆☆☆☆☆ %d\n" VT_RST, CUR_UPG_VALUE(UPG_QUIVER));
switch (CUR_UPG_VALUE(UPG_QUIVER)) {
case 0:
case UPG_QUIVER_NONE:
this->getItemId = GI_RUPEE_PURPLE;
break;
case 1:
case UPG_QUIVER_NORMAL:
this->getItemId = GI_QUIVER_40;
break;
case 2:
case UPG_QUIVER_BIG:
this->getItemId = GI_QUIVER_50;
break;
}

View File

@ -10888,7 +10888,11 @@ void func_80847298(Player* this) {
this->unk_6AE_rotFlags = 0;
}
static f32 D_80854784[] = { 120.0f, 240.0f, 360.0f };
static f32 sDiveDepths[] = {
120.0f, // UPG_SCALE_NONE
240.0f, // UPG_SCALE_SILVER
360.0f // UPG_SCALE_GOLD
};
/**
* Updates the two main interface elements that player is responsible for:
@ -10970,7 +10974,7 @@ void Player_UpdateInterface(PlayState* play, Player* this) {
static u8 sDiveNumberDoActions[] = { DO_ACTION_1, DO_ACTION_2, DO_ACTION_3, DO_ACTION_4,
DO_ACTION_5, DO_ACTION_6, DO_ACTION_7, DO_ACTION_8 };
sp24 = (D_80854784[CUR_UPG_VALUE(UPG_SCALE)] - this->actor.depthInWater) / 40.0f;
sp24 = (sDiveDepths[CUR_UPG_VALUE(UPG_SCALE)] - this->actor.depthInWater) / 40.0f;
sp24 = CLAMP(sp24, 0, 7);
doAction = sDiveNumberDoActions[sp24];
} else if (sp1C && !(this->stateFlags2 & PLAYER_STATE2_10)) {
@ -13637,7 +13641,7 @@ void Player_Action_8084DC48(Player* this, PlayState* play) {
if (CHECK_BTN_ALL(sControlInput->cur.button, BTN_A) && !Player_ActionHandler_2(this, play) &&
!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
(this->actor.depthInWater < D_80854784[CUR_UPG_VALUE(UPG_SCALE)])) {
(this->actor.depthInWater < sDiveDepths[CUR_UPG_VALUE(UPG_SCALE)])) {
func_8084DBC4(play, this, -2.0f);
} else {
this->av1.actionVar1++;

View File

@ -239,7 +239,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
if (pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) {
//! @bug Assumes adult always has bullet bag (as adult this should rely on `UPG_QUIVER`)
if (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0) {
if (CUR_UPG_VALUE(UPG_BULLET_BAG) != UPG_BULLET_BAG_NONE) {
cursorMoveResult = 1;
}
} else {
@ -329,7 +329,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
if (pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) {
if (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0) {
if (CUR_UPG_VALUE(UPG_BULLET_BAG) != UPG_BULLET_BAG_NONE) {
cursorMoveResult = 1;
}
} else {
@ -383,7 +383,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
while (true) {
if (cursorX == EQUIP_CURSOR_X_UPG) {
if (cursorY == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) {
if (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0) {
if (CUR_UPG_VALUE(UPG_BULLET_BAG) != UPG_BULLET_BAG_NONE) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
@ -466,7 +466,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
if ((pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) &&
(CUR_UPG_VALUE(UPG_BULLET_BAG) != 0)) {
(CUR_UPG_VALUE(UPG_BULLET_BAG) != UPG_BULLET_BAG_NONE)) {
cursorItem = ITEM_BULLET_BAG_30 + CUR_UPG_VALUE(UPG_BULLET_BAG) - 1;
} else {
cursorItem = ITEM_QUIVER_30 + sUpgradeItemOffsets[pauseCtx->cursorY[PAUSE_EQUIP]] +
@ -475,7 +475,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
} else {
if ((pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) &&
(CUR_UPG_VALUE(UPG_QUIVER) == 0)) {
(CUR_UPG_VALUE(UPG_QUIVER) == UPG_QUIVER_NONE)) {
cursorItem = ITEM_BULLET_BAG_30 + CUR_UPG_VALUE(UPG_BULLET_BAG) - 1;
} else {
cursorItem = ITEM_QUIVER_30 + sUpgradeItemOffsets[pauseCtx->cursorY[PAUSE_EQUIP]] +

View File

@ -3916,7 +3916,7 @@ void KaleidoScope_Update(PlayState* play) {
pauseCtx->worldMapPoints[WORLD_MAP_POINT_GERUDO_VALLEY] = WORLD_MAP_POINT_STATE_SHOW;
}
if (CUR_UPG_VALUE(UPG_SCALE)) {
if (CUR_UPG_VALUE(UPG_SCALE) != UPG_SCALE_NONE) {
pauseCtx->worldMapPoints[WORLD_MAP_POINT_LAKE_HYLIA] = WORLD_MAP_POINT_STATE_SHOW;
}
if (CHECK_OWNED_EQUIP(EQUIP_TYPE_BOOTS, EQUIP_INV_BOOTS_IRON)) {