summaryrefslogtreecommitdiff
path: root/soh/src/code/code_80097A00.c
diff options
context:
space:
mode:
authorM4xw <m4x@m4xw.net>2022-03-22 02:51:23 +0100
committerM4xw <m4x@m4xw.net>2022-03-22 02:51:23 +0100
commit39cc86c2608e2f75ace33fc7f43bc4f2ad743f1a (patch)
tree0d3fd9e995d7484eaaeb158ac808bd6a39121189 /soh/src/code/code_80097A00.c
parent0bb0e7b53bd80bdc7f78e08c441691737e039b2b (diff)
git subrepo clone https://github.com/HarbourMasters/soh.git
subrepo: subdir: "soh" merged: "ba904bbd0" upstream: origin: "https://github.com/HarbourMasters/soh.git" branch: "master" commit: "ba904bbd0" git-subrepo: version: "0.4.1" origin: "???" commit: "???"
Diffstat (limited to 'soh/src/code/code_80097A00.c')
-rw-r--r--soh/src/code/code_80097A00.c224
1 files changed, 224 insertions, 0 deletions
diff --git a/soh/src/code/code_80097A00.c b/soh/src/code/code_80097A00.c
new file mode 100644
index 000000000..f07102b0f
--- /dev/null
+++ b/soh/src/code/code_80097A00.c
@@ -0,0 +1,224 @@
+#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, 500 }, // 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[] = {
+ gDekuStickIconTex,
+ gDekuNutIconTex,
+ gBombIconTex,
+ gFairyBowIconTex,
+ gFireArrowIconTex,
+ gDinsFireIconTex,
+ gFairySlingshotIconTex,
+ gFairyOcarinaIconTex,
+ gOcarinaofTimeIconTex,
+ gBombchuIconTex,
+ gHookshotIconTex,
+ gLongshotIconTex,
+ gIceArrowIconTex,
+ gFaroresWindIconTex,
+ gBoomerangIconTex,
+ gLensofTruthIconTex,
+ gMagicBeansIconTex,
+ gMegatonHammerIconTex,
+ gLightArrowIconTex,
+ gNayrusLoveIconTex,
+ gEmptyBottleIconTex,
+ gRedPotionIconTex,
+ gGreenPotionIconTex,
+ gBluePotionIconTex,
+ gBottledFairyIconTex,
+ gFishIconTex,
+ gMilkFullIconTex,
+ gRutosLetterIconTex,
+ gBlueFireIconTex,
+ gBugIconTex,
+ gBigPoeIconTex,
+ gMilkhalfIconTex,
+ gPoeIconTex,
+ gWeirdEggIconTex,
+ gCuccoIconTex,
+ gZeldasLetterIconTex,
+ gKeatonMaskIconTex,
+ gSkullMaskIconTex,
+ gSpookyMaskIconTex,
+ gBunnyHoodIconTex,
+ gGoronMaskIconTex,
+ gZoraMaskIconTex,
+ gGerudoMaskIconTex,
+ gMaskofTruthIconTex,
+ gSoldOutIconTex,
+ gPocketEggIconTex,
+ gPocketCuccoIconTex,
+ gCojiroIconTex,
+ gOddMushroomIconTex,
+ gOddPotionIconTex,
+ gPoachersSawIconTex,
+ gBrokenBiggoronSwordIconTex,
+ gPrescriptionIconTex,
+ gEyeBallFrogIconTex,
+ gEyeDropsIconTex,
+ gClaimCheckIconTex,
+ gFairyBowFireIconTex,
+ gFairyBowIceIconTex,
+ gFairyBowLightIconTex,
+ gKokiriSwordIconTex,
+ gMasterSwordIconTex,
+ gBiggoronSwordIconTex,
+ gDekuShieldIconTex,
+ gHylianShieldIconTex,
+ gMirrorShieldIconTex,
+ gKokiriTunicIconTex,
+ gGoronTunicIconTex,
+ gZoraTunicIconTex,
+ gKokiriBootsIconTex,
+ gIronBootsIconTex,
+ gHoverBootsIconTex,
+ gBulletBag30IconTex,
+ gBulletBag40IconTex,
+ gBulletBag50IconTex,
+ gQuiver30IconTex,
+ gQuiver40IconTex,
+ gQuiver50IconTex,
+ gBombBag20IconTex,
+ gBombBag30IconTex,
+ gBombBag40IconTex,
+ gGoronsBraceletIconTex,
+ gSilverGauntletsIconTex,
+ gGoldenGauntletsIconTex,
+ gSilverScaleIconTex,
+ gGoldenScaleIconTex,
+ gBrokenGiantsKnifeIconTex,
+ gAdultsWalletIconTex,
+ gGiantsWalletIconTex,
+ gDekuSeedsIconTex,
+ gFishingPoleIconTex,
+ gSongNoteTex,
+ gSongNoteTex,
+ gSongNoteTex,
+ gSongNoteTex,
+ gSongNoteTex,
+ gSongNoteTex,
+ gSongNoteTex,
+ gSongNoteTex,
+ gSongNoteTex,
+ gSongNoteTex,
+ gSongNoteTex,
+ gSongNoteTex,
+ gForestMedallionIconTex,
+ gFireMedallionIconTex,
+ gWaterMedallionIconTex,
+ gSpiritMedallionIconTex,
+ gShadowMedallionIconTex,
+ gLightMedallionIconTex,
+ gKokiriEmeraldIconTex,
+ gGoronRubyIconTex,
+ gZoraSapphireIconTex,
+ gStoneOfAgonyIconTex,
+ gGerudosCardIconTex,
+ gGoldSkulltulaIconTex,
+ gHeartContainerIconTex,
+ gUnusedPieceOfHeartIconTex,
+ gBossKeyIconTex,
+ gCompassIconTex,
+ gDungeonMapIconTex,
+ gSmallKeyIconTex,
+ gSmallMagicJarIconTex,
+ gBigMagicJarIconTex,
+ gHeartPieceIcon1Tex,
+ gHeartPieceIcon2Tex,
+ gHeartPieceIcon3Tex,
+ gOcarinaCUpTex,
+ gOcarinaCDownTex,
+ gOcarinaCLeftTex,
+ gOcarinaCRightTex,
+ gOcarinaATex,
+};
+
+// 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(GlobalContext* globalCtx, s16 equipment) {
+ Player* player = GET_PLAYER(globalCtx);
+ s32 pad;
+ u16 sp26 = gSaveContext.equips.equipment & gEquipMasks[equipment];
+
+ // "Erasing equipment item = %d zzz=%d"
+ osSyncPrintf("装備アイテム抹消 = %d zzz=%d\n", equipment, sp26);
+
+ if (sp26) {
+ sp26 >>= gEquipShifts[equipment];
+
+ gSaveContext.equips.equipment &= gEquipNegMasks[equipment];
+ gSaveContext.inventory.equipment ^= gBitFlags[sp26 - 1] << gEquipShifts[equipment];
+
+ if (equipment == EQUIP_TUNIC) {
+ gSaveContext.equips.equipment |= 0x0100;
+ }
+
+ if (equipment == EQUIP_SWORD) {
+ gSaveContext.equips.buttonItems[0] = ITEM_NONE;
+ gSaveContext.infTable[29] = 1;
+ }
+
+ Player_SetEquipmentData(globalCtx, player);
+ globalCtx->pauseCtx.cursorSpecialPos = PAUSE_CURSOR_PAGE_LEFT;
+ }
+
+ return sp26;
+}
+
+void Inventory_ChangeUpgrade(s16 upgrade, s16 value) {
+ gSaveContext.inventory.upgrades &= gUpgradeNegMasks[upgrade];
+ gSaveContext.inventory.upgrades |= value << gUpgradeShifts[upgrade];
+}