mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-06-29 03:41:09 -04:00
Rename code file for inventory functions (#4783)
This commit is contained in:
@@ -0,0 +1,235 @@
|
||||
#include "global.h"
|
||||
#include "textures/icon_item_static/icon_item_static.h"
|
||||
#include "textures/icon_item_24_static/icon_item_24_static.h"
|
||||
#include "textures/parameter_static/parameter_static.h"
|
||||
|
||||
// Bit Flag array in which gBitFlags[n] is literally (1 << n)
|
||||
u32 gBitFlags[] = {
|
||||
(1 << 0), (1 << 1), (1 << 2), (1 << 3), (1 << 4), (1 << 5), (1 << 6), (1 << 7),
|
||||
(1 << 8), (1 << 9), (1 << 10), (1 << 11), (1 << 12), (1 << 13), (1 << 14), (1 << 15),
|
||||
(1 << 16), (1 << 17), (1 << 18), (1 << 19), (1 << 20), (1 << 21), (1 << 22), (1 << 23),
|
||||
(1 << 24), (1 << 25), (1 << 26), (1 << 27), (1 << 28), (1 << 29), (1 << 30), (1 << 31),
|
||||
};
|
||||
|
||||
u16 gEquipMasks[] = { 0x000F, 0x00F0, 0x0F00, 0xF000 };
|
||||
u16 gEquipNegMasks[] = { 0xFFF0, 0xFF0F, 0xF0FF, 0x0FFF };
|
||||
u32 gUpgradeMasks[] = {
|
||||
0x00000007, 0x00000038, 0x000001C0, 0x00000E00, 0x00003000, 0x0001C000, 0x000E0000, 0x00700000,
|
||||
};
|
||||
u32 gUpgradeNegMasks[] = {
|
||||
0xFFFFFFF8, 0xFFFFFFC7, 0xFFFFFE3F, 0xFFFFF1FF, 0xFFFFCFFF, 0xFFFE3FFF, 0xFFF1FFFF, 0xFF8FFFFF,
|
||||
};
|
||||
u8 gEquipShifts[] = { 0, 4, 8, 12 };
|
||||
u8 gUpgradeShifts[] = { 0, 3, 6, 9, 12, 14, 17, 20 };
|
||||
|
||||
u16 gUpgradeCapacities[][4] = {
|
||||
{ 0, 30, 40, 50 }, // Quivers
|
||||
{ 0, 20, 30, 40 }, // Bomb Bags
|
||||
{ 0, 0, 0, 0 }, // Unused (Scale)
|
||||
{ 0, 0, 0, 0 }, // Unused (Strength)
|
||||
{ 99, 200, 500, 999 }, // Wallets
|
||||
{ 0, 30, 40, 50 }, // Deku Seed Bullet Bags
|
||||
{ 0, 10, 20, 30 }, // Deku Stick Upgrades
|
||||
{ 0, 20, 30, 40 }, // Deku Nut Upgrades
|
||||
};
|
||||
|
||||
u32 gGsFlagsMasks[] = { 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000 };
|
||||
u32 gGsFlagsShifts[] = { 0, 8, 16, 24 };
|
||||
|
||||
void* gItemIcons[] = {
|
||||
gItemIconDekuStickTex,
|
||||
gItemIconDekuNutTex,
|
||||
gItemIconBombTex,
|
||||
gItemIconBowTex,
|
||||
gItemIconArrowFireTex,
|
||||
gItemIconDinsFireTex,
|
||||
gItemIconSlingshotTex,
|
||||
gItemIconOcarinaFairyTex,
|
||||
gItemIconOcarinaOfTimeTex,
|
||||
gItemIconBombchuTex,
|
||||
gItemIconHookshotTex,
|
||||
gItemIconLongshotTex,
|
||||
gItemIconArrowIceTex,
|
||||
gItemIconFaroresWindTex,
|
||||
gItemIconBoomerangTex,
|
||||
gItemIconLensOfTruthTex,
|
||||
gItemIconMagicBeanTex,
|
||||
gItemIconHammerTex,
|
||||
gItemIconArrowLightTex,
|
||||
gItemIconNayrusLoveTex,
|
||||
gItemIconBottleEmptyTex,
|
||||
gItemIconBottlePotionRedTex,
|
||||
gItemIconBottlePotionGreenTex,
|
||||
gItemIconBottlePotionBlueTex,
|
||||
gItemIconBottleFairyTex,
|
||||
gItemIconBottleFishTex,
|
||||
gItemIconBottleMilkFullTex,
|
||||
gItemIconBottleRutosLetterTex,
|
||||
gItemIconBottleBlueFireTex,
|
||||
gItemIconBottleBugTex,
|
||||
gItemIconBottleBigPoeTex,
|
||||
gItemIconBottleMilkHalfTex,
|
||||
gItemIconBottlePoeTex,
|
||||
gItemIconWeirdEggTex,
|
||||
gItemIconChickenTex,
|
||||
gItemIconZeldasLetterTex,
|
||||
gItemIconMaskKeatonTex,
|
||||
gItemIconMaskSkullTex,
|
||||
gItemIconMaskSpookyTex,
|
||||
gItemIconMaskBunnyHoodTex,
|
||||
gItemIconMaskGoronTex,
|
||||
gItemIconMaskZoraTex,
|
||||
gItemIconMaskGerudoTex,
|
||||
gItemIconMaskTruthTex,
|
||||
gItemIconSoldOutTex,
|
||||
gItemIconPocketEggTex,
|
||||
gItemIconPocketCuccoTex,
|
||||
gItemIconCojiroTex,
|
||||
gItemIconOddMushroomTex,
|
||||
gItemIconOddPotionTex,
|
||||
gItemIconPoachersSawTex,
|
||||
gItemIconBrokenGoronsSwordTex,
|
||||
gItemIconPrescriptionTex,
|
||||
gItemIconEyeballFrogTex,
|
||||
gItemIconEyeDropsTex,
|
||||
gItemIconClaimCheckTex,
|
||||
gItemIconBowFireTex,
|
||||
gItemIconBowIceTex,
|
||||
gItemIconBowLightTex,
|
||||
gItemIconSwordKokiriTex,
|
||||
gItemIconSwordMasterTex,
|
||||
gItemIconSwordBiggoronTex,
|
||||
gItemIconShieldDekuTex,
|
||||
gItemIconShieldHylianTex,
|
||||
gItemIconShieldMirrorTex,
|
||||
gItemIconTunicKokiriTex,
|
||||
gItemIconTunicGoronTex,
|
||||
gItemIconTunicZoraTex,
|
||||
gItemIconBootsKokiriTex,
|
||||
gItemIconBootsIronTex,
|
||||
gItemIconBootsHoverTex,
|
||||
gItemIconBulletBag30Tex,
|
||||
gItemIconBulletBag40Tex,
|
||||
gItemIconBulletBag50Tex,
|
||||
gItemIconQuiver30Tex,
|
||||
gItemIconQuiver40Tex,
|
||||
gItemIconQuiver50Tex,
|
||||
gItemIconBombBag20Tex,
|
||||
gItemIconBombBag30Tex,
|
||||
gItemIconBombBag40Tex,
|
||||
gItemIconGoronsBraceletTex,
|
||||
gItemIconSilverGauntletsTex,
|
||||
gItemIconGoldenGauntletsTex,
|
||||
gItemIconScaleSilverTex,
|
||||
gItemIconScaleGoldenTex,
|
||||
gItemIconBrokenGiantsKnifeTex,
|
||||
gItemIconAdultsWalletTex,
|
||||
gItemIconGiantsWalletTex,
|
||||
gItemIconDekuSeedsTex,
|
||||
gItemIconFishingPoleTex,
|
||||
gSongNoteTex,
|
||||
gSongNoteTex,
|
||||
gSongNoteTex,
|
||||
gSongNoteTex,
|
||||
gSongNoteTex,
|
||||
gSongNoteTex,
|
||||
gSongNoteTex,
|
||||
gSongNoteTex,
|
||||
gSongNoteTex,
|
||||
gSongNoteTex,
|
||||
gSongNoteTex,
|
||||
gSongNoteTex,
|
||||
gQuestIconMedallionForestTex,
|
||||
gQuestIconMedallionFireTex,
|
||||
gQuestIconMedallionWaterTex,
|
||||
gQuestIconMedallionSpiritTex,
|
||||
gQuestIconMedallionShadowTex,
|
||||
gQuestIconMedallionLightTex,
|
||||
gQuestIconKokiriEmeraldTex,
|
||||
gQuestIconGoronRubyTex,
|
||||
gQuestIconZoraSapphireTex,
|
||||
gQuestIconStoneOfAgonyTex,
|
||||
gQuestIconGerudosCardTex,
|
||||
gQuestIconGoldSkulltulaTex,
|
||||
gQuestIconHeartContainerTex,
|
||||
gQuestIconHeartPieceTex,
|
||||
gQuestIconDungeonBossKeyTex,
|
||||
gQuestIconDungeonCompassTex,
|
||||
gQuestIconDungeonMapTex,
|
||||
gQuestIconSmallKeyTex,
|
||||
gQuestIconMagicJarSmallTex,
|
||||
gQuestIconMagicJarBigTex,
|
||||
gHeartPieceIcon1Tex,
|
||||
gHeartPieceIcon2Tex,
|
||||
gHeartPieceIcon3Tex,
|
||||
gOcarinaBtnIconCUpTex,
|
||||
gOcarinaBtnIconCDownTex,
|
||||
gOcarinaBtnIconCLeftTex,
|
||||
gOcarinaBtnIconCRightTex,
|
||||
gOcarinaBtnIconATex,
|
||||
};
|
||||
|
||||
// Used to map item IDs to inventory slots
|
||||
u8 gItemSlots[] = {
|
||||
SLOT_STICK, SLOT_NUT, SLOT_BOMB, SLOT_BOW, SLOT_ARROW_FIRE, SLOT_DINS_FIRE,
|
||||
SLOT_SLINGSHOT, SLOT_OCARINA, SLOT_OCARINA, SLOT_BOMBCHU, SLOT_HOOKSHOT, SLOT_HOOKSHOT,
|
||||
SLOT_ARROW_ICE, SLOT_FARORES_WIND, SLOT_BOOMERANG, SLOT_LENS, SLOT_BEAN, SLOT_HAMMER,
|
||||
SLOT_ARROW_LIGHT, SLOT_NAYRUS_LOVE, SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_BOTTLE_1,
|
||||
SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_BOTTLE_1,
|
||||
SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_BOTTLE_1, SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, SLOT_TRADE_CHILD,
|
||||
SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, SLOT_TRADE_CHILD,
|
||||
SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, SLOT_TRADE_CHILD, SLOT_TRADE_ADULT, SLOT_TRADE_ADULT, SLOT_TRADE_ADULT,
|
||||
SLOT_TRADE_ADULT, SLOT_TRADE_ADULT, SLOT_TRADE_ADULT, SLOT_TRADE_ADULT, SLOT_TRADE_ADULT, SLOT_TRADE_ADULT,
|
||||
SLOT_TRADE_ADULT, SLOT_TRADE_ADULT,
|
||||
};
|
||||
|
||||
void Inventory_ChangeEquipment(s16 equipment, u16 value) {
|
||||
gSaveContext.equips.equipment &= gEquipNegMasks[equipment];
|
||||
gSaveContext.equips.equipment |= value << gEquipShifts[equipment];
|
||||
}
|
||||
|
||||
u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
s32 pad;
|
||||
u16 equipValue = gSaveContext.equips.equipment & gEquipMasks[equipment];
|
||||
|
||||
// "Erasing equipment item = %d zzz=%d"
|
||||
osSyncPrintf("装備アイテム抹消 = %d zzz=%d\n", equipment, equipValue);
|
||||
|
||||
if (equipValue) {
|
||||
equipValue >>= gEquipShifts[equipment];
|
||||
|
||||
gSaveContext.equips.equipment &= gEquipNegMasks[equipment];
|
||||
gSaveContext.inventory.equipment ^= OWNED_EQUIP_FLAG(equipment, equipValue - 1);
|
||||
|
||||
if (equipment == EQUIP_TYPE_TUNIC) {
|
||||
gSaveContext.equips.equipment |= EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4);
|
||||
// non-vanilla: remove goron and zora tunics from item buttons if assignable tunics is on
|
||||
if (CVarGetInteger(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 0) && equipValue != EQUIP_VALUE_TUNIC_KOKIRI) {
|
||||
ItemID item = (equipValue == EQUIP_VALUE_TUNIC_GORON ? ITEM_TUNIC_GORON : ITEM_TUNIC_ZORA);
|
||||
for (int i = 1; i < ARRAY_COUNT(gSaveContext.equips.buttonItems); i++) {
|
||||
if (gSaveContext.equips.buttonItems[i] == item) {
|
||||
gSaveContext.equips.buttonItems[i] = ITEM_NONE;
|
||||
gSaveContext.equips.cButtonSlots[i - 1] = SLOT_NONE;
|
||||
}
|
||||
}
|
||||
}
|
||||
// end non-vanilla
|
||||
}
|
||||
|
||||
if (equipment == EQUIP_TYPE_SWORD) {
|
||||
gSaveContext.equips.buttonItems[0] = ITEM_NONE;
|
||||
gSaveContext.infTable[29] = 1;
|
||||
}
|
||||
|
||||
Player_SetEquipmentData(play, player);
|
||||
play->pauseCtx.cursorSpecialPos = PAUSE_CURSOR_PAGE_LEFT;
|
||||
}
|
||||
|
||||
return equipValue;
|
||||
}
|
||||
|
||||
void Inventory_ChangeUpgrade(s16 upgrade, s16 value) {
|
||||
gSaveContext.inventory.upgrades &= gUpgradeNegMasks[upgrade];
|
||||
gSaveContext.inventory.upgrades |= value << gUpgradeShifts[upgrade];
|
||||
}
|
||||
Reference in New Issue
Block a user