From a7fa8cc241d7f6e08d3744644cf8e93599f190a0 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Mon, 19 Feb 2024 19:04:23 -0800 Subject: Clean2 (#1605) * AnimationContext_Update * TransitionTile_InitGraphics * disasm files * gPlayerFormItemRestrictions -> code_8012EC80 * fix * Extract gCircleTex * Const fixes * gPlayerFormItemRestrictions suggestions * Setup_InitRegs * z_inventory --- src/code/code_8012EC80.c | 727 ------------------------ src/code/title_setup.c | 4 +- src/code/z_actor.c | 3 +- src/code/z_circle_tex.c | 5 + src/code/z_fbdemo.c | 40 +- src/code/z_fbdemo_circle.c | 5 +- src/code/z_inventory.c | 1315 ++++++++++++++++++++++++++++++++++++++++++++ src/code/z_skelanime.c | 3 +- 8 files changed, 1352 insertions(+), 750 deletions(-) delete mode 100644 src/code/code_8012EC80.c create mode 100644 src/code/z_circle_tex.c create mode 100644 src/code/z_inventory.c (limited to 'src/code') diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c deleted file mode 100644 index 768c0b8dc..000000000 --- a/src/code/code_8012EC80.c +++ /dev/null @@ -1,727 +0,0 @@ -#include "global.h" -#include "interface/parameter_static/parameter_static.h" -#include "archives/icon_item_static/icon_item_static_yar.h" -#include "archives/icon_item_24_static/icon_item_24_static_yar.h" - -// Bit Flag array in which gBitFlags[n] is (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), -}; - -// four-bit masks -u16 gEquipMasks[] = { - 0xF << 0, // Sword - 0xF << 4, // Shield - 0xF << 8, // Unused (Tunic) - 0xF << 12, // Unused (Boots) -}; - -// four-bit masks -u16 gEquipNegMasks[] = { - ~(0xF << 0), // Sword - ~(0xF << 4), // Shield - ~(0xF << 8), // Unused (Tunic) - (u16) ~(0xF << 12), // Unused (Boots) -}; - -// 3 = two bit masks -// 7 = three bit masks -u32 gUpgradeMasks[] = { - 7 << 0, // Quivers - 7 << 3, // Bomb Bags - 7 << 6, // Unused (Strength) - 7 << 9, // Unused (Scale) - 3 << 12, // Wallets - 7 << 14, // Unused (Deku Seed Bullet Bags) - 7 << 17, // Unused (Deku Stick) - 7 << 20, // Unused (Deku Nut) -}; - -// 3 = two-bit masks -// 7 = three-bit masks -u32 gUpgradeNegMasks[] = { - ~(7 << 0), // UPG_QUIVER - ~(7 << 3), // UPG_BOMB_BAG - ~(7 << 6), // UPG_STRENGTH - ~(7 << 9), // UPG_SCALE - ~(3 << 12), // UPG_WALLET - ~(7 << 14), // UPG_BULLET_BAG - ~(7 << 17), // UPG_DEKU_STICKS - ~(7 << 20), // UPG_DEKU_NUTS -}; - -u8 gEquipShifts[] = { - 0, // Sword - 4, // Shield - 8, // Unused (Tunic) - 12, // Unused (Boots) -}; - -u8 gUpgradeShifts[] = { - 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 -}; - -u16 gUpgradeCapacities[][4] = { - { 0, 30, 40, 50 }, // UPG_QUIVER - { 0, 20, 30, 40 }, // UPG_BOMB_BAG - { 0, 0, 0, 0 }, // UPG_STRENGTH - { 0, 0, 0, 0 }, // UPG_SCALE - { 99, 200, 500, 500 }, // UPG_WALLET - { 0, 30, 40, 50 }, // UPG_BULLET_BAG - { 0, 10, 20, 30 }, // UPG_DEKU_STICKS - { 0, 20, 30, 40 }, // UPG_DEKU_NUTS -}; - -// eight-bit masks -u32 gGsFlagsMask[] = { - 0xFF << 0, - 0xFF << 8, - 0xFF << 16, - 0xFF << 24, -}; - -u32 gGsFlagsShift[] = { - 0, - 8, - 16, - 24, -}; - -TexturePtr gItemIcons[] = { - gItemIconOcarinaOfTimeTex, // ITEM_OCARINA_OF_TIME - gItemIconBowTex, // ITEM_BOW - gItemIconFireArrowTex, // ITEM_ARROW_FIRE - gItemIconIceArrowTex, // ITEM_ARROW_ICE - gItemIconLightArrowTex, // ITEM_ARROW_LIGHT - gItemIconFairyOcarinaTex, // ITEM_OCARINA_FAIRY - gItemIconBombTex, // ITEM_BOMB - gItemIconBombchuTex, // ITEM_BOMBCHU - gItemIconDekuStickTex, // ITEM_DEKU_STICK - gItemIconDekuNutTex, // ITEM_DEKU_NUT - gItemIconMagicBeansTex, // ITEM_MAGIC_BEANS - gItemIconSlingshotTex, // ITEM_SLINGSHOT - gItemIconPowderKegTex, // ITEM_POWDER_KEG - gItemIconPictographBoxTex, // ITEM_PICTOGRAPH_BOX - gItemIconLensofTruthTex, // ITEM_LENS_OF_TRUTH - gItemIconHookshotTex, // ITEM_HOOKSHOT - gItemIconGreatFairysSwordTex, // ITEM_SWORD_GREAT_FAIRY - gItemIconLongshotTex, // ITEM_LONGSHOT - gItemIconEmptyBottleTex, // ITEM_BOTTLE - gItemIconRedPotionTex, // ITEM_POTION_RED - gItemIconGreenPotionTex, // ITEM_POTION_GREEN - gItemIconBluePotionTex, // ITEM_POTION_BLUE - gItemIconBottledFairyTex, // ITEM_FAIRY - gItemIconBottledDekuPrincessTex, // ITEM_DEKU_PRINCESS - gItemIconBottledFullMilkTex, // ITEM_MILK_BOTTLE - gItemIconBottledHalfMilkTex, // ITEM_MILK_HALF - gItemIconBottledFishTex, // ITEM_FISH - gItemIconBottledBugTex, // ITEM_BUG - gItemIconBottledBlueFireTex, // ITEM_BLUE_FIRE - gItemIconBottledPoeTex, // ITEM_POE - gItemIconBottledBigPoeTex, // ITEM_BIG_POE - gItemIconSpringWaterTex, // ITEM_SPRING_WATER - gItemIconHotSpringWaterTex, // ITEM_HOT_SPRING_WATER - gItemIconBottledZoraEggTex, // ITEM_ZORA_EGG - gItemIconBottledGoldDustTex, // ITEM_GOLD_DUST - gItemIconBottledMushroomTex, // ITEM_MUSHROOM - gItemIconBottledSeahorseTex, // ITEM_SEAHORSE - gItemIconChateauRomaniTex, // ITEM_CHATEAU - gItemIconBottledHylianLoachTex, // ITEM_HYLIAN_LOACH - gItemIconEmptyBottle2Tex, // ITEM_OBABA_DRINK - gItemIconMoonsTearTex, // ITEM_MOONS_TEAR - gItemIconLandDeedTex, // ITEM_DEED_LAND - gItemIconSwampDeedTex, // ITEM_DEED_SWAMP - gItemIconMountainDeedTex, // ITEM_DEED_MOUNTAIN - gItemIconOceanDeedTex, // ITEM_DEED_OCEAN - gItemIconRoomKeyTex, // ITEM_ROOM_KEY - gItemIconLetterToMamaTex, // ITEM_LETTER_MAMA - gItemIconLetterToKafeiTex, // ITEM_LETTER_TO_KAFEI - gItemIconPendantOfMemoriesTex, // ITEM_PENDANT_OF_MEMORIES - gItemIconTingleMapTex, // ITEM_TINGLE_MAP - gItemIconDekuMaskTex, // ITEM_MASK_DEKU - gItemIconGoronMaskTex, // ITEM_MASK_GORON - gItemIconZoraMaskTex, // ITEM_MASK_ZORA - gItemIconFierceDeityMaskTex, // ITEM_MASK_FIERCE_DEITY - gItemIconMaskOfTruthTex, // ITEM_MASK_TRUTH - gItemIconKafeisMaskTex, // ITEM_MASK_KAFEIS_MASK - gItemIconAllNightMaskTex, // ITEM_MASK_ALL_NIGHT - gItemIconBunnyHoodTex, // ITEM_MASK_BUNNY - gItemIconKeatonMaskTex, // ITEM_MASK_KEATON - gItemIconGaroMaskTex, // ITEM_MASK_GARO - gItemIconRomaniMaskTex, // ITEM_MASK_ROMANI - gItemIconCircusLeaderMaskTex, // ITEM_MASK_CIRCUS_LEADER - gItemIconPostmansHatTex, // ITEM_MASK_POSTMAN - gItemIconCouplesMaskTex, // ITEM_MASK_COUPLE - gItemIconGreatFairyMaskTex, // ITEM_MASK_GREAT_FAIRY - gItemIconGibdoMaskTex, // ITEM_MASK_GIBDO - gItemIconDonGeroMaskTex, // ITEM_MASK_DON_GERO - gItemIconKamaroMaskTex, // ITEM_MASK_KAMARO - gItemIconCaptainsHatTex, // ITEM_MASK_CAPTAIN - gItemIconStoneMaskTex, // ITEM_MASK_STONE - gItemIconBremenMaskTex, // ITEM_MASK_BREMEN - gItemIconBlastMaskTex, // ITEM_MASK_BLAST - gItemIconMaskOfScentsTex, // ITEM_MASK_SCENTS - gItemIconGiantsMaskTex, // ITEM_MASK_GIANT - gItemIconBowFireTex, // ITEM_BOW_FIRE - gItemIconBowIceTex, // ITEM_BOW_ICE - gItemIconBowLightTex, // ITEM_BOW_LIGHT - gItemIconKokiriSwordTex, // ITEM_SWORD_KOKIRI - gItemIconRazorSwordTex, // ITEM_SWORD_RAZOR - gItemIconGildedSwordTex, // ITEM_SWORD_GILDED - gItemIconFierceDeitySwordTex, // ITEM_SWORD_DEITY - gItemIconHerosShieldTex, // ITEM_SHIELD_HERO - gItemIconMirrorShieldTex, // ITEM_SHIELD_MIRROR - gItemIconQuiver30Tex, // ITEM_QUIVER_30 - gItemIconQuiver40Tex, // ITEM_QUIVER_40 - gItemIconQuiver50Tex, // ITEM_QUIVER_50 - gItemIconBombBag20Tex, // ITEM_BOMB_BAG_20 - gItemIconBombBag30Tex, // ITEM_BOMB_BAG_30 - gItemIconBombBag40Tex, // ITEM_BOMB_BAG_40 - gItemIconDefaultWalletTex, // ITEM_WALLET_DEFAULT - gItemIconAdultsWalletTex, // ITEM_WALLET_ADULT - gItemIconGiantsWalletTex, // ITEM_WALLET_GIANT - gItemIconFishingRodTex, // ITEM_FISHING_ROD - gItemIconOdolwasRemainsTex, // ITEM_REMAINS_ODOLWA - gItemIconGohtsRemainsTex, // ITEM_REMAINS_GOHT - gItemIconGyorgsRemainsTex, // ITEM_REMAINS_GYORG - gItemIconTwinmoldsRemainsTex, // ITEM_REMAINS_TWINMOLD - gItemIconSongNoteTex, // ITEM_SONG_SONATA - gItemIconSongNoteTex, // ITEM_SONG_LULLABY - gItemIconSongNoteTex, // ITEM_SONG_NOVA - gItemIconSongNoteTex, // ITEM_SONG_ELEGY - gItemIconSongNoteTex, // ITEM_SONG_OATH - gItemIconSongNoteTex, // ITEM_SONG_SARIA - gItemIconSongNoteTex, // ITEM_SONG_TIME - gItemIconSongNoteTex, // ITEM_SONG_HEALING - gItemIconSongNoteTex, // ITEM_SONG_EPONA - gItemIconSongNoteTex, // ITEM_SONG_SOARING - gItemIconSongNoteTex, // ITEM_SONG_STORMS - gItemIconSongNoteTex, // ITEM_SONG_SUN - gItemIconBombersNotebookTex, // ITEM_BOMBERS_NOTEBOOK - gQuestIconGoldSkulltulaTex, // ITEM_SKULL_TOKEN - gQuestIconHeartContainerTex, // ITEM_HEART_CONTAINER - gQuestIconPieceOfHeartTex, // ITEM_HEART_PIECE - gItemIconSongNoteTex, // - gItemIconSongNoteTex, // - gItemIconSongNoteTex, // ITEM_SONG_LULLABY_INTRO - gQuestIconBossKeyTex, // ITEM_KEY_BOSS - gQuestIconDungeonMapTex, // ITEM_COMPASS - gQuestIconCompassTex, // ITEM_DUNGEON_MAP - gQuestIconGoldSkulltula2Tex, // ITEM_STRAY_FAIRIES - gQuestIconSmallKeyTex, // ITEM_KEY_SMALL - gQuestIconSmallMagicJarTex, // ITEM_MAGIC_JAR_SMALL - gQuestIconBigMagicJarTex, // ITEM_MAGIC_JAR_BIG - gItemIconHeartPiece1Tex, // ITEM_HEART_PIECE_2 - gItemIconHeartPiece2Tex, // ITEM_INVALID_1 - gItemIconHeartPiece3Tex, // ITEM_INVALID_2 - gOcarinaCUpTex, // ITEM_INVALID_3 - gOcarinaCDownTex, // ITEM_INVALID_4 - gOcarinaCLeftTex, // ITEM_INVALID_5 - gOcarinaCRightTex, // ITEM_INVALID_6 - gOcarinaATex, // ITEM_INVALID_7 -}; - -// Used to map item IDs to inventory slots -u8 gItemSlots[] = { - SLOT_OCARINA, // ITEM_OCARINA_OF_TIME - SLOT_BOW, // ITEM_BOW - SLOT_ARROW_FIRE, // ITEM_ARROW_FIRE - SLOT_ARROW_ICE, // ITEM_ARROW_ICE - SLOT_ARROW_LIGHT, // ITEM_ARROW_LIGHT - SLOT_TRADE_DEED, // ITEM_OCARINA_FAIRY - SLOT_BOMB, // ITEM_BOMB - SLOT_BOMBCHU, // ITEM_BOMBCHU - SLOT_DEKU_STICK, // ITEM_DEKU_STICK - SLOT_DEKU_NUT, // ITEM_DEKU_NUT - SLOT_MAGIC_BEANS, // ITEM_MAGIC_BEANS - SLOT_TRADE_KEY_MAMA, // ITEM_SLINGSHOT - SLOT_POWDER_KEG, // ITEM_POWDER_KEG - SLOT_PICTOGRAPH_BOX, // ITEM_PICTOGRAPH_BOX - SLOT_LENS_OF_TRUTH, // ITEM_LENS_OF_TRUTH - SLOT_HOOKSHOT, // ITEM_HOOKSHOT - SLOT_SWORD_GREAT_FAIRY, // ITEM_SWORD_GREAT_FAIRY - SLOT_BOTTLE_1, // ITEM_LONGSHOT - SLOT_BOTTLE_1, // ITEM_BOTTLE - SLOT_BOTTLE_1, // ITEM_POTION_RED - SLOT_BOTTLE_1, // ITEM_POTION_GREEN - SLOT_BOTTLE_1, // ITEM_POTION_BLUE - SLOT_BOTTLE_1, // ITEM_FAIRY - SLOT_BOTTLE_1, // ITEM_DEKU_PRINCESS - SLOT_BOTTLE_1, // ITEM_MILK_BOTTLE - SLOT_BOTTLE_1, // ITEM_MILK_HALF - SLOT_BOTTLE_1, // ITEM_FISH - SLOT_BOTTLE_1, // ITEM_BUG - SLOT_BOTTLE_1, // ITEM_BLUE_FIRE - SLOT_BOTTLE_1, // ITEM_POE - SLOT_BOTTLE_1, // ITEM_BIG_POE - SLOT_BOTTLE_1, // ITEM_SPRING_WATER - SLOT_BOTTLE_1, // ITEM_HOT_SPRING_WATER - SLOT_BOTTLE_1, // ITEM_ZORA_EGG - SLOT_BOTTLE_1, // ITEM_GOLD_DUST - SLOT_BOTTLE_1, // ITEM_MUSHROOM - SLOT_BOTTLE_1, // ITEM_SEAHORSE - SLOT_BOTTLE_1, // ITEM_CHATEAU - SLOT_BOTTLE_1, // ITEM_HYLIAN_LOACH - SLOT_BOTTLE_1, // ITEM_OBABA_DRINK - SLOT_TRADE_DEED, // ITEM_MOONS_TEAR - SLOT_TRADE_DEED, // ITEM_DEED_LAND - SLOT_TRADE_DEED, // ITEM_DEED_SWAMP - SLOT_TRADE_DEED, // ITEM_DEED_MOUNTAIN - SLOT_TRADE_DEED, // ITEM_DEED_OCEAN - SLOT_TRADE_KEY_MAMA, // ITEM_ROOM_KEY - SLOT_TRADE_KEY_MAMA, // ITEM_LETTER_MAMA - SLOT_TRADE_COUPLE, // ITEM_LETTER_TO_KAFEI - SLOT_TRADE_COUPLE, // ITEM_PENDANT_OF_MEMORIES - SLOT_TRADE_COUPLE, // ITEM_TINGLE_MAP - SLOT_MASK_DEKU, // ITEM_MASK_DEKU - SLOT_MASK_GORON, // ITEM_MASK_GORON - SLOT_MASK_ZORA, // ITEM_MASK_ZORA - SLOT_MASK_FIERCE_DEITY, // ITEM_MASK_FIERCE_DEITY - SLOT_MASK_TRUTH, // ITEM_MASK_TRUTH - SLOT_MASK_KAFEIS_MASK, // ITEM_MASK_KAFEIS_MASK - SLOT_MASK_ALL_NIGHT, // ITEM_MASK_ALL_NIGHT - SLOT_MASK_BUNNY, // ITEM_MASK_BUNNY - SLOT_MASK_KEATON, // ITEM_MASK_KEATON - SLOT_MASK_GARO, // ITEM_MASK_GARO - SLOT_MASK_ROMANI, // ITEM_MASK_ROMANI - SLOT_MASK_CIRCUS_LEADER, // ITEM_MASK_CIRCUS_LEADER - SLOT_MASK_POSTMAN, // ITEM_MASK_POSTMAN - SLOT_MASK_COUPLE, // ITEM_MASK_COUPLE - SLOT_MASK_GREAT_FAIRY, // ITEM_MASK_GREAT_FAIRY - SLOT_MASK_GIBDO, // ITEM_MASK_GIBDO - SLOT_MASK_DON_GERO, // ITEM_MASK_DON_GERO - SLOT_MASK_KAMARO, // ITEM_MASK_KAMARO - SLOT_MASK_CAPTAIN, // ITEM_MASK_CAPTAIN - SLOT_MASK_STONE, // ITEM_MASK_STONE - SLOT_MASK_BREMEN, // ITEM_MASK_BREMEN - SLOT_MASK_BLAST, // ITEM_MASK_BLAST - SLOT_MASK_SCENTS, // ITEM_MASK_SCENTS - SLOT_MASK_GIANT, // ITEM_MASK_GIANT - SLOT_BOW, // ITEM_BOW_FIRE - SLOT_BOW, // ITEM_BOW_ICE - SLOT_BOW, // ITEM_BOW_LIGHT -}; - -s16 gItemPrices[] = { - 0, // ITEM_OCARINA_OF_TIME - 0, // ITEM_BOW - 0, // ITEM_ARROW_FIRE - 0, // ITEM_ARROW_ICE - 0, // ITEM_ARROW_LIGHT - 0, // ITEM_OCARINA_FAIRY - 0, // ITEM_BOMB - 0, // ITEM_BOMBCHU - 0, // ITEM_DEKU_STICK - 0, // ITEM_DEKU_NUT - 0, // ITEM_MAGIC_BEANS - 0, // ITEM_SLINGSHOT - 0, // ITEM_POWDER_KEG - 0, // ITEM_PICTOGRAPH_BOX - 0, // ITEM_LENS_OF_TRUTH - 0, // ITEM_HOOKSHOT - 0, // ITEM_SWORD_GREAT_FAIRY - 0, // ITEM_LONGSHOT - 0, // ITEM_BOTTLE - 20, // ITEM_POTION_RED - 20, // ITEM_POTION_GREEN - 20, // ITEM_POTION_BLUE - 20, // ITEM_FAIRY - 0, // ITEM_DEKU_PRINCESS - 20, // ITEM_MILK_BOTTLE - 5, // ITEM_MILK_HALF - 20, // ITEM_FISH - 20, // ITEM_BUG - 50, // ITEM_BLUE_FIRE - 50, // ITEM_POE - 200, // ITEM_BIG_POE - 20, // ITEM_SPRING_WATER - 20, // ITEM_HOT_SPRING_WATER - 20, // ITEM_ZORA_EGG - 200, // ITEM_GOLD_DUST - 5, // ITEM_MUSHROOM - 0, // ITEM_SEAHORSE - 200, // ITEM_CHATEAU - 20, // ITEM_HYLIAN_LOACH - 0, // ITEM_OBABA_DRINK - 0, // ITEM_MOONS_TEAR - 0, // ITEM_DEED_LAND - 0, // ITEM_DEED_SWAMP - 0, // ITEM_DEED_MOUNTAIN - 0, // ITEM_DEED_OCEAN - 0, // ITEM_ROOM_KEY - 0, // ITEM_LETTER_MAMA - 0, // ITEM_LETTER_KAFEI - 0, // ITEM_PENDANT_OF_MEMORIES - 0, // ITEM_TINGLE_MAP -}; - -// Used to map scene indexes to their region in Termina -u16 gSceneIdsPerRegion[REGION_MAX][27] = { - // REGION_GREAT_BAY - { - SCENE_30GYOSON, - SCENE_LABO, - SCENE_FISHERMAN, - SCENE_SINKAI, - SCENE_31MISAKI, - SCENE_TORIDE, - SCENE_KAIZOKU, - SCENE_PIRATE, - SCENE_35TAKI, - SCENE_KINDAN2, - 0xFFFF, - }, - // REGION_ZORA_HALL - { - SCENE_33ZORACITY, - SCENE_BANDROOM, - 0xFFFF, - }, - // REGION_ROMANI_RANCH - { - SCENE_F01, - SCENE_ROMANYMAE, - SCENE_OMOYA, - SCENE_F01C, - SCENE_F01_B, - SCENE_KOEPONARACE, - 0xFFFF, - }, - // REGION_DEKU_PALACE - { - SCENE_22DEKUCITY, - SCENE_DEKU_KING, - SCENE_26SARUNOMORI, - SCENE_DANPEI, - 0xFFFF, - }, - // REGION_WOODFALL - { - SCENE_20SICHITAI, - SCENE_20SICHITAI2, - SCENE_MAP_SHOP, - SCENE_WITCH_SHOP, - SCENE_21MITURINMAE, - SCENE_KINSTA1, - 0xFFFF, - }, - // REGION_CLOCK_TOWN - { - SCENE_00KEIKOKU, SCENE_TENMON_DAI, SCENE_13HUBUKINOMITI, SCENE_24KEMONOMITI, SCENE_SYATEKI_MORI, - SCENE_IKANAMAE, SCENE_TOWN, SCENE_SYATEKI_MIZU, SCENE_BOWLING, SCENE_TAKARAYA, - SCENE_YADOYA, SCENE_SONCHONOIE, SCENE_MILK_BAR, SCENE_ICHIBA, SCENE_BOMYA, - SCENE_AYASHIISHOP, SCENE_8ITEMSHOP, SCENE_DOUJOU, SCENE_POSTHOUSE, SCENE_TAKARAKUJI, - SCENE_BACKTOWN, SCENE_CLOCKTOWER, SCENE_INSIDETOWER, SCENE_OKUJOU, SCENE_ALLEY, - SCENE_DEKUTES, 0xFFFF, - }, - // REGION_SNOWHEAD - { - SCENE_10YUKIYAMANOMURA, - SCENE_10YUKIYAMANOMURA2, - SCENE_KAJIYA, - SCENE_12HAKUGINMAE, - SCENE_14YUKIDAMANOMITI, - SCENE_GORONRACE, - SCENE_GORON_HAKA, - SCENE_17SETUGEN, - SCENE_17SETUGEN2, - 0xFFFF, - }, - // REGION_IKANA_GRAVEYARD - { - SCENE_BOTI, - SCENE_DANPEI2TEST, - 0xFFFF, - }, - // REGION_IKANA_CANYON - { - SCENE_CASTLE, - SCENE_IKNINSIDE, - SCENE_IKANA, - SCENE_SECOM, - SCENE_MUSICHOUSE, - SCENE_RANDOM, - SCENE_REDEAD, - SCENE_TOUGITES, - SCENE_HAKASHITA, - 0xFFFF, - }, - // REGION_GORON_VILLAGE - { - SCENE_11GORONNOSATO, - SCENE_11GORONNOSATO2, - SCENE_16GORON_HOUSE, - SCENE_GORONSHOP, - 0xFFFF, - }, - // REGION_STONE_TOWER - { - SCENE_F40, - SCENE_F41, - 0xFFFF, - }, -}; - -s32 Inventory_GetBtnBItem(PlayState* play) { - if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) { - return ITEM_NONE; - } else if (gSaveContext.bButtonStatus == BTN_DISABLED) { - return ITEM_NONE; - } else if (CUR_FORM_EQUIP(EQUIP_SLOT_B) == ITEM_NONE) { - if (play->interfaceCtx.unk_21C != 0) { - if (play->interfaceCtx.bButtonDoAction != 0) { - return play->interfaceCtx.bButtonDoAction; - } - } - return ITEM_NONE; - } else { - return CUR_FORM_EQUIP(EQUIP_SLOT_B); - } -} - -/** - * Only changes shield - */ -void Inventory_ChangeEquipment(s16 value) { - SET_EQUIP_VALUE(EQUIP_TYPE_SHIELD, value); -} - -/** - * Only deletes shield, equipment argument unused and is a remnant of OoT - */ -u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) { - Player* player = GET_PLAYER(play); - - if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) != EQUIP_VALUE_SHIELD_NONE) { - SET_EQUIP_VALUE(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_NONE); - Player_SetEquipmentData(play, player); - return true; - } - - return false; -} - -void Inventory_ChangeUpgrade(s16 upgrade, u32 value) { - u32 upgrades = GET_SAVE_INVENTORY_UPGRADES; - - upgrades &= gUpgradeNegMasks[upgrade]; - upgrades |= value << gUpgradeShifts[upgrade]; - - gSaveContext.save.saveInfo.inventory.upgrades = upgrades; -} - -s32 Inventory_IsMapVisible(s16 sceneId) { - s16 index = 0; - - /** - * a single index of scenesVisible can only hold 32 bits. So for every 32 scenes in the scene enum, - * increment to the next index of scenesVisible so that every scene gets a unique flag in scenesVisible, - * 224 bits were allocated to this although there are only 112 scenes - */ - if (sceneId >= 0x20) { - if (sceneId < 0x40) { - index = 1; - } else if (sceneId < 0x60) { - index = 2; - } else if (sceneId < 0x80) { - index = 3; - } else if (sceneId < 0xA0) { - index = 4; - } else if (sceneId < 0xC0) { - index = 5; - } else if (sceneId < 0xE0) { - index = 6; - } - } - - if (gSaveContext.save.saveInfo.scenesVisible[index] & gBitFlags[sceneId - (index << 5)]) { - return true; - } - - return false; -} - -static u16 sSceneIdsPerTingleMap[TINGLE_MAP_MAX][12] = { - { - // TINGLE_MAP_CLOCK_TOWN - SCENE_00KEIKOKU, - SCENE_BOTI, - SCENE_13HUBUKINOMITI, - SCENE_24KEMONOMITI, - SCENE_IKANAMAE, - SCENE_TOWN, - SCENE_ICHIBA, - SCENE_BACKTOWN, - SCENE_CLOCKTOWER, - SCENE_ALLEY, - 0xFFFF, - }, - { - // TINGLE_MAP_WOODFALL - SCENE_20SICHITAI, - SCENE_20SICHITAI2, - SCENE_21MITURINMAE, - SCENE_22DEKUCITY, - SCENE_DEKU_KING, - SCENE_KINSTA1, - 0xFFFF, - }, - { - // TINGLE_MAP_SNOWHEAD - SCENE_10YUKIYAMANOMURA, - SCENE_10YUKIYAMANOMURA2, - SCENE_11GORONNOSATO, - SCENE_11GORONNOSATO2, - SCENE_16GORON_HOUSE, - SCENE_12HAKUGINMAE, - SCENE_14YUKIDAMANOMITI, - SCENE_GORONRACE, - SCENE_17SETUGEN, - SCENE_17SETUGEN2, - 0xFFFF, - }, - { - // TINGLE_MAP_ROMANI_RANCH - SCENE_F01, - SCENE_ROMANYMAE, - SCENE_OMOYA, - SCENE_F01C, - SCENE_F01_B, - SCENE_KOEPONARACE, - 0xFFFF, - }, - { - // TINGLE_MAP_GREAT_BAY - SCENE_30GYOSON, - SCENE_SINKAI, - SCENE_31MISAKI, - SCENE_TORIDE, - SCENE_KAIZOKU, - SCENE_33ZORACITY, - SCENE_35TAKI, - 0xFFFF, - }, - { - // TINGLE_MAP_STONE_TOWER - SCENE_F40, - SCENE_F41, - SCENE_CASTLE, - SCENE_IKANA, - SCENE_REDEAD, - 0xFFFF, - }, -}; - -/** - * Removing clouds from the World Map is achieved by purchasing a tingle map - */ -void Inventory_SetWorldMapCloudVisibility(s16 tingleIndex) { - s16 i = 0; - s16 index = 0; - u16(*tingleMapSceneIds)[] = &sSceneIdsPerTingleMap[tingleIndex]; - - if ((tingleIndex >= 0) && (tingleIndex < TINGLE_MAP_MAX)) { - while (true) { - if ((*tingleMapSceneIds)[i] == 0xFFFF) { - break; - } - - /** - * a single index of scenesVisible can only hold 32 bits. So for every 32 scenes in the scene enum, - * increment to the next index of scenesVisible so that every scene gets a unique flag in scenesVisible, - * 224 bits were allocated to this although there are only 112 scenes - */ - if (((s16)(*tingleMapSceneIds)[i]) < 0x20) { - index = 0; - } else if (((s16)(*tingleMapSceneIds)[i]) < 0x40) { - index = 1; - } else if (((s16)(*tingleMapSceneIds)[i]) < 0x60) { - index = 2; - } else if (((s16)(*tingleMapSceneIds)[i]) < 0x80) { - index = 3; - } else if (((s16)(*tingleMapSceneIds)[i]) < 0xA0) { - index = 4; - } else if (((s16)(*tingleMapSceneIds)[i]) < 0xC0) { - index = 5; - } else if (((s16)(*tingleMapSceneIds)[i]) < 0xE0) { - index = 6; - } - - gSaveContext.save.saveInfo.scenesVisible[index] = gSaveContext.save.saveInfo.scenesVisible[index] | - gBitFlags[(s16)(*tingleMapSceneIds)[i] - (index << 5)]; - i++; - } - - if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_CLOCK_TOWN]) { - gSaveContext.save.saveInfo.worldMapCloudVisibility |= 3; - } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_WOODFALL]) { - gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x1C; - } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_SNOWHEAD]) { - gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0xE0; - } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_ROMANI_RANCH]) { - gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x100; - } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_GREAT_BAY]) { - gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x1E00; - } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_STONE_TOWER]) { - gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x6000; - } - } - - R_MINIMAP_DISABLED = false; -} - -/** - * Also stores the players filename into dekuPlaygroundPlayerName - */ -void Inventory_SaveDekuPlaygroundHighScore(s16 timerId) { - s16 i; - - gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1] = gSaveContext.timerCurTimes[timerId]; - - for (i = 0; i < 8; i++) { - gSaveContext.save.saveInfo.inventory.dekuPlaygroundPlayerName[CURRENT_DAY - 1][i] = - gSaveContext.save.saveInfo.playerData.playerName[i]; - } -} - -void Inventory_IncrementSkullTokenCount(s16 sceneIndex) { - if (sceneIndex == SCENE_KINSTA1) { - // Swamp Spider House (increment high bits of skullTokenCount) - gSaveContext.save.saveInfo.skullTokenCount = - ((u16)(((gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000) >> 0x10) + 1) << 0x10) | - (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF); - } else { - // Ocean Spider House (increment low bits of skullTokenCount) - gSaveContext.save.saveInfo.skullTokenCount = (((u16)gSaveContext.save.saveInfo.skullTokenCount + 1) & 0xFFFF) | - (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000); - } -} - -s16 Inventory_GetSkullTokenCount(s16 sceneIndex) { - if (sceneIndex == SCENE_KINSTA1) { - // Swamp Spider House - return (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000) >> 0x10; - } else { - // Ocean Spider House - return gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF; - } -} - -void Inventory_SaveLotteryCodeGuess(PlayState* play) { - u16 lotteryCodeGuess; - - lotteryCodeGuess = ((play->msgCtx.unk12054[0] & 0xF) << 8); // First Digit - lotteryCodeGuess |= ((play->msgCtx.unk12054[1] & 0xF) << 4); // Second Digit - lotteryCodeGuess |= (play->msgCtx.unk12054[2] & 0xF); // Third Digit - HS_SET_LOTTERY_CODE_GUESS(lotteryCodeGuess); -} diff --git a/src/code/title_setup.c b/src/code/title_setup.c index 7ebac28ce..83b16f87e 100644 --- a/src/code/title_setup.c +++ b/src/code/title_setup.c @@ -1,7 +1,7 @@ #include "z_title_setup.h" #include "overlays/gamestates/ovl_title/z_title.h" -void Setup_SetRegs(void) { +void Setup_InitRegs(void) { XREG(2) = 0; XREG(10) = 26; XREG(11) = 20; @@ -50,7 +50,7 @@ void Setup_SetRegs(void) { void Setup_InitImpl(SetupState* this) { SysFlashrom_InitFlash(); SaveContext_Init(); - Setup_SetRegs(); + Setup_InitRegs(); STOP_GAMESTATE(&this->state); SET_NEXT_GAMESTATE(&this->state, ConsoleLogo_Init, sizeof(ConsoleLogoState)); diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 5f3593f76..2cf96f760 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -30,6 +30,7 @@ struct Actor* D_801ED920; // 2 funcs. 1 out of z_actor #include "z64actor.h" +#include "z64circle_tex.h" #include "z64horse.h" #include "z64malloc.h" #include "z64quake.h" @@ -2820,7 +2821,7 @@ s32 Actor_AddToLensActors(PlayState* play, Actor* actor) { } void Actor_DrawLensOverlay(Gfx** gfxP, s32 lensMaskSize) { - TransitionCircle_LoadAndSetTexture(gfxP, gCircleTex, 4, 0, 6, 6, + TransitionCircle_LoadAndSetTexture(gfxP, gCircleTex, G_IM_FMT_I, 0, 6, 6, ((LENS_MASK_ACTIVE_SIZE - lensMaskSize) * 0.003f) + 1.0f); } diff --git a/src/code/z_circle_tex.c b/src/code/z_circle_tex.c new file mode 100644 index 000000000..2306f5477 --- /dev/null +++ b/src/code/z_circle_tex.c @@ -0,0 +1,5 @@ +#include "ultra64.h" + +const u64 gCircleTex[] = { +#include "assets/code/circle_tex/circle.i4.inc.c" +}; diff --git a/src/code/z_fbdemo.c b/src/code/z_fbdemo.c index bd7f5393a..2f1ecdb54 100644 --- a/src/code/z_fbdemo.c +++ b/src/code/z_fbdemo.c @@ -27,6 +27,22 @@ Gfx sTransTileSetupDL[] = { gsSPEndDisplayList(), }; +#define SET_VERTEX(vtx, x, y, z, f, s, t, nx, ny, nz, alpha) \ + { \ + Vtx_tn* vtxn = &(vtx)->n; \ + vtxn->ob[0] = (x); \ + vtxn->ob[1] = (y); \ + vtxn->ob[2] = (z); \ + vtxn->flag = 0; \ + vtxn->tc[0] = (s); \ + vtxn->tc[1] = (t); \ + vtxn->n[0] = (nx); \ + vtxn->n[1] = (ny); \ + vtxn->n[2] = (nz); \ + vtxn->a = (alpha); \ + } \ + (void)0 + void TransitionTile_InitGraphics(TransitionTile* this) { s32 frame; s32 col; @@ -44,24 +60,14 @@ void TransitionTile_InitGraphics(TransitionTile* this) { for (frame = 0; frame < 2; frame++) { this->frame = frame; vtx = (this->frame == 0) ? this->vtxFrame1 : this->vtxFrame2; - for (rowTex = 0, row = 0; row < (this->rows + 1); row++, rowTex += 0x20) { - for (colTex = 0, col = 0; col < (this->cols + 1); col++, colTex += 0x20) { - Vtx_tn* vtxn = &vtx->n; - - // clang-format off - vtx++; \ - vtxn->tc[0] = colTex << 6; \ - vtxn->ob[0] = col * 0x20; \ - vtxn->ob[1] = row * 0x20; \ - vtxn->ob[2] = -5; \ - vtxn->flag = 0; \ - vtxn->tc[1] = rowTex << 6; \ - vtxn->n[0] = 0; \ - vtxn->n[1] = 0; \ - vtxn->n[2] = 120; \ - vtxn->a = 255; - // clang-format on + rowTex = 0; + for (row = 0; row < (this->rows + 1); row++) { + colTex = 0; + for (col = 0; col < (this->cols + 1); col++) { + SET_VERTEX(vtx++, col * 0x20, row * 0x20, -5, 0, colTex << 6, rowTex << 6, 0, 0, 120, 255); + colTex += 0x20; } + rowTex += 0x20; } } diff --git a/src/code/z_fbdemo_circle.c b/src/code/z_fbdemo_circle.c index 81322284f..55c8c7fe8 100644 --- a/src/code/z_fbdemo_circle.c +++ b/src/code/z_fbdemo_circle.c @@ -1,8 +1,9 @@ #include "z64transition.h" +#include "main.h" #include "sys_cfb.h" +#include "z64circle_tex.h" #include "z64math.h" -#include "variables.h" typedef enum TransitionCircleDirection { /* 0 */ TRANS_CIRCLE_DIR_IN, @@ -92,7 +93,7 @@ void TransitionCircle_SetType(void* thisx, s32 type) { } } -void TransitionCircle_LoadAndSetTexture(Gfx** gfxp, TexturePtr texture, s32 fmt, s32 arg3, s32 masks, s32 maskt, +void TransitionCircle_LoadAndSetTexture(Gfx** gfxp, void const* texture, s32 fmt, s32 arg3, s32 masks, s32 maskt, f32 arg6) { Gfx* gfx = *gfxp; s32 xh = gCfbWidth; diff --git a/src/code/z_inventory.c b/src/code/z_inventory.c new file mode 100644 index 000000000..cb73b9da1 --- /dev/null +++ b/src/code/z_inventory.c @@ -0,0 +1,1315 @@ +#include "global.h" +#include "interface/parameter_static/parameter_static.h" +#include "archives/icon_item_static/icon_item_static_yar.h" +#include "archives/icon_item_24_static/icon_item_24_static_yar.h" + +// Bit Flag array in which gBitFlags[n] is (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), +}; + +// four-bit masks +u16 gEquipMasks[] = { + 0xF << 0, // Sword + 0xF << 4, // Shield + 0xF << 8, // Unused (Tunic) + 0xF << 12, // Unused (Boots) +}; + +// four-bit masks +u16 gEquipNegMasks[] = { + ~(0xF << 0), // Sword + ~(0xF << 4), // Shield + ~(0xF << 8), // Unused (Tunic) + (u16) ~(0xF << 12), // Unused (Boots) +}; + +// 3 = two bit masks +// 7 = three bit masks +u32 gUpgradeMasks[] = { + 7 << 0, // Quivers + 7 << 3, // Bomb Bags + 7 << 6, // Unused (Strength) + 7 << 9, // Unused (Scale) + 3 << 12, // Wallets + 7 << 14, // Unused (Deku Seed Bullet Bags) + 7 << 17, // Unused (Deku Stick) + 7 << 20, // Unused (Deku Nut) +}; + +// 3 = two-bit masks +// 7 = three-bit masks +u32 gUpgradeNegMasks[] = { + ~(7 << 0), // UPG_QUIVER + ~(7 << 3), // UPG_BOMB_BAG + ~(7 << 6), // UPG_STRENGTH + ~(7 << 9), // UPG_SCALE + ~(3 << 12), // UPG_WALLET + ~(7 << 14), // UPG_BULLET_BAG + ~(7 << 17), // UPG_DEKU_STICKS + ~(7 << 20), // UPG_DEKU_NUTS +}; + +u8 gEquipShifts[] = { + 0, // Sword + 4, // Shield + 8, // Unused (Tunic) + 12, // Unused (Boots) +}; + +u8 gUpgradeShifts[] = { + 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 +}; + +u16 gUpgradeCapacities[][4] = { + { 0, 30, 40, 50 }, // UPG_QUIVER + { 0, 20, 30, 40 }, // UPG_BOMB_BAG + { 0, 0, 0, 0 }, // UPG_STRENGTH + { 0, 0, 0, 0 }, // UPG_SCALE + { 99, 200, 500, 500 }, // UPG_WALLET + { 0, 30, 40, 50 }, // UPG_BULLET_BAG + { 0, 10, 20, 30 }, // UPG_DEKU_STICKS + { 0, 20, 30, 40 }, // UPG_DEKU_NUTS +}; + +// eight-bit masks +u32 gGsFlagsMask[] = { + 0xFF << 0, + 0xFF << 8, + 0xFF << 16, + 0xFF << 24, +}; + +u32 gGsFlagsShift[] = { + 0, + 8, + 16, + 24, +}; + +TexturePtr gItemIcons[] = { + gItemIconOcarinaOfTimeTex, // ITEM_OCARINA_OF_TIME + gItemIconBowTex, // ITEM_BOW + gItemIconFireArrowTex, // ITEM_ARROW_FIRE + gItemIconIceArrowTex, // ITEM_ARROW_ICE + gItemIconLightArrowTex, // ITEM_ARROW_LIGHT + gItemIconFairyOcarinaTex, // ITEM_OCARINA_FAIRY + gItemIconBombTex, // ITEM_BOMB + gItemIconBombchuTex, // ITEM_BOMBCHU + gItemIconDekuStickTex, // ITEM_DEKU_STICK + gItemIconDekuNutTex, // ITEM_DEKU_NUT + gItemIconMagicBeansTex, // ITEM_MAGIC_BEANS + gItemIconSlingshotTex, // ITEM_SLINGSHOT + gItemIconPowderKegTex, // ITEM_POWDER_KEG + gItemIconPictographBoxTex, // ITEM_PICTOGRAPH_BOX + gItemIconLensofTruthTex, // ITEM_LENS_OF_TRUTH + gItemIconHookshotTex, // ITEM_HOOKSHOT + gItemIconGreatFairysSwordTex, // ITEM_SWORD_GREAT_FAIRY + gItemIconLongshotTex, // ITEM_LONGSHOT + gItemIconEmptyBottleTex, // ITEM_BOTTLE + gItemIconRedPotionTex, // ITEM_POTION_RED + gItemIconGreenPotionTex, // ITEM_POTION_GREEN + gItemIconBluePotionTex, // ITEM_POTION_BLUE + gItemIconBottledFairyTex, // ITEM_FAIRY + gItemIconBottledDekuPrincessTex, // ITEM_DEKU_PRINCESS + gItemIconBottledFullMilkTex, // ITEM_MILK_BOTTLE + gItemIconBottledHalfMilkTex, // ITEM_MILK_HALF + gItemIconBottledFishTex, // ITEM_FISH + gItemIconBottledBugTex, // ITEM_BUG + gItemIconBottledBlueFireTex, // ITEM_BLUE_FIRE + gItemIconBottledPoeTex, // ITEM_POE + gItemIconBottledBigPoeTex, // ITEM_BIG_POE + gItemIconSpringWaterTex, // ITEM_SPRING_WATER + gItemIconHotSpringWaterTex, // ITEM_HOT_SPRING_WATER + gItemIconBottledZoraEggTex, // ITEM_ZORA_EGG + gItemIconBottledGoldDustTex, // ITEM_GOLD_DUST + gItemIconBottledMushroomTex, // ITEM_MUSHROOM + gItemIconBottledSeahorseTex, // ITEM_SEAHORSE + gItemIconChateauRomaniTex, // ITEM_CHATEAU + gItemIconBottledHylianLoachTex, // ITEM_HYLIAN_LOACH + gItemIconEmptyBottle2Tex, // ITEM_OBABA_DRINK + gItemIconMoonsTearTex, // ITEM_MOONS_TEAR + gItemIconLandDeedTex, // ITEM_DEED_LAND + gItemIconSwampDeedTex, // ITEM_DEED_SWAMP + gItemIconMountainDeedTex, // ITEM_DEED_MOUNTAIN + gItemIconOceanDeedTex, // ITEM_DEED_OCEAN + gItemIconRoomKeyTex, // ITEM_ROOM_KEY + gItemIconLetterToMamaTex, // ITEM_LETTER_MAMA + gItemIconLetterToKafeiTex, // ITEM_LETTER_TO_KAFEI + gItemIconPendantOfMemoriesTex, // ITEM_PENDANT_OF_MEMORIES + gItemIconTingleMapTex, // ITEM_TINGLE_MAP + gItemIconDekuMaskTex, // ITEM_MASK_DEKU + gItemIconGoronMaskTex, // ITEM_MASK_GORON + gItemIconZoraMaskTex, // ITEM_MASK_ZORA + gItemIconFierceDeityMaskTex, // ITEM_MASK_FIERCE_DEITY + gItemIconMaskOfTruthTex, // ITEM_MASK_TRUTH + gItemIconKafeisMaskTex, // ITEM_MASK_KAFEIS_MASK + gItemIconAllNightMaskTex, // ITEM_MASK_ALL_NIGHT + gItemIconBunnyHoodTex, // ITEM_MASK_BUNNY + gItemIconKeatonMaskTex, // ITEM_MASK_KEATON + gItemIconGaroMaskTex, // ITEM_MASK_GARO + gItemIconRomaniMaskTex, // ITEM_MASK_ROMANI + gItemIconCircusLeaderMaskTex, // ITEM_MASK_CIRCUS_LEADER + gItemIconPostmansHatTex, // ITEM_MASK_POSTMAN + gItemIconCouplesMaskTex, // ITEM_MASK_COUPLE + gItemIconGreatFairyMaskTex, // ITEM_MASK_GREAT_FAIRY + gItemIconGibdoMaskTex, // ITEM_MASK_GIBDO + gItemIconDonGeroMaskTex, // ITEM_MASK_DON_GERO + gItemIconKamaroMaskTex, // ITEM_MASK_KAMARO + gItemIconCaptainsHatTex, // ITEM_MASK_CAPTAIN + gItemIconStoneMaskTex, // ITEM_MASK_STONE + gItemIconBremenMaskTex, // ITEM_MASK_BREMEN + gItemIconBlastMaskTex, // ITEM_MASK_BLAST + gItemIconMaskOfScentsTex, // ITEM_MASK_SCENTS + gItemIconGiantsMaskTex, // ITEM_MASK_GIANT + gItemIconBowFireTex, // ITEM_BOW_FIRE + gItemIconBowIceTex, // ITEM_BOW_ICE + gItemIconBowLightTex, // ITEM_BOW_LIGHT + gItemIconKokiriSwordTex, // ITEM_SWORD_KOKIRI + gItemIconRazorSwordTex, // ITEM_SWORD_RAZOR + gItemIconGildedSwordTex, // ITEM_SWORD_GILDED + gItemIconFierceDeitySwordTex, // ITEM_SWORD_DEITY + gItemIconHerosShieldTex, // ITEM_SHIELD_HERO + gItemIconMirrorShieldTex, // ITEM_SHIELD_MIRROR + gItemIconQuiver30Tex, // ITEM_QUIVER_30 + gItemIconQuiver40Tex, // ITEM_QUIVER_40 + gItemIconQuiver50Tex, // ITEM_QUIVER_50 + gItemIconBombBag20Tex, // ITEM_BOMB_BAG_20 + gItemIconBombBag30Tex, // ITEM_BOMB_BAG_30 + gItemIconBombBag40Tex, // ITEM_BOMB_BAG_40 + gItemIconDefaultWalletTex, // ITEM_WALLET_DEFAULT + gItemIconAdultsWalletTex, // ITEM_WALLET_ADULT + gItemIconGiantsWalletTex, // ITEM_WALLET_GIANT + gItemIconFishingRodTex, // ITEM_FISHING_ROD + gItemIconOdolwasRemainsTex, // ITEM_REMAINS_ODOLWA + gItemIconGohtsRemainsTex, // ITEM_REMAINS_GOHT + gItemIconGyorgsRemainsTex, // ITEM_REMAINS_GYORG + gItemIconTwinmoldsRemainsTex, // ITEM_REMAINS_TWINMOLD + gItemIconSongNoteTex, // ITEM_SONG_SONATA + gItemIconSongNoteTex, // ITEM_SONG_LULLABY + gItemIconSongNoteTex, // ITEM_SONG_NOVA + gItemIconSongNoteTex, // ITEM_SONG_ELEGY + gItemIconSongNoteTex, // ITEM_SONG_OATH + gItemIconSongNoteTex, // ITEM_SONG_SARIA + gItemIconSongNoteTex, // ITEM_SONG_TIME + gItemIconSongNoteTex, // ITEM_SONG_HEALING + gItemIconSongNoteTex, // ITEM_SONG_EPONA + gItemIconSongNoteTex, // ITEM_SONG_SOARING + gItemIconSongNoteTex, // ITEM_SONG_STORMS + gItemIconSongNoteTex, // ITEM_SONG_SUN + gItemIconBombersNotebookTex, // ITEM_BOMBERS_NOTEBOOK + gQuestIconGoldSkulltulaTex, // ITEM_SKULL_TOKEN + gQuestIconHeartContainerTex, // ITEM_HEART_CONTAINER + gQuestIconPieceOfHeartTex, // ITEM_HEART_PIECE + gItemIconSongNoteTex, // ITEM_71 + gItemIconSongNoteTex, // ITEM_72 + gItemIconSongNoteTex, // ITEM_SONG_LULLABY_INTRO + gQuestIconBossKeyTex, // ITEM_KEY_BOSS + gQuestIconDungeonMapTex, // ITEM_COMPASS + gQuestIconCompassTex, // ITEM_DUNGEON_MAP + gQuestIconGoldSkulltula2Tex, // ITEM_STRAY_FAIRIES + gQuestIconSmallKeyTex, // ITEM_KEY_SMALL + gQuestIconSmallMagicJarTex, // ITEM_MAGIC_JAR_SMALL + gQuestIconBigMagicJarTex, // ITEM_MAGIC_JAR_BIG + gItemIconHeartPiece1Tex, // ITEM_HEART_PIECE_2 + gItemIconHeartPiece2Tex, // ITEM_INVALID_1 + gItemIconHeartPiece3Tex, // ITEM_INVALID_2 + gOcarinaCUpTex, // ITEM_INVALID_3 + gOcarinaCDownTex, // ITEM_INVALID_4 + gOcarinaCLeftTex, // ITEM_INVALID_5 + gOcarinaCRightTex, // ITEM_INVALID_6 + gOcarinaATex, // ITEM_INVALID_7 +}; + +// Used to map item IDs to inventory slots +u8 gItemSlots[] = { + SLOT_OCARINA, // ITEM_OCARINA_OF_TIME + SLOT_BOW, // ITEM_BOW + SLOT_ARROW_FIRE, // ITEM_ARROW_FIRE + SLOT_ARROW_ICE, // ITEM_ARROW_ICE + SLOT_ARROW_LIGHT, // ITEM_ARROW_LIGHT + SLOT_TRADE_DEED, // ITEM_OCARINA_FAIRY + SLOT_BOMB, // ITEM_BOMB + SLOT_BOMBCHU, // ITEM_BOMBCHU + SLOT_DEKU_STICK, // ITEM_DEKU_STICK + SLOT_DEKU_NUT, // ITEM_DEKU_NUT + SLOT_MAGIC_BEANS, // ITEM_MAGIC_BEANS + SLOT_TRADE_KEY_MAMA, // ITEM_SLINGSHOT + SLOT_POWDER_KEG, // ITEM_POWDER_KEG + SLOT_PICTOGRAPH_BOX, // ITEM_PICTOGRAPH_BOX + SLOT_LENS_OF_TRUTH, // ITEM_LENS_OF_TRUTH + SLOT_HOOKSHOT, // ITEM_HOOKSHOT + SLOT_SWORD_GREAT_FAIRY, // ITEM_SWORD_GREAT_FAIRY + SLOT_BOTTLE_1, // ITEM_LONGSHOT + SLOT_BOTTLE_1, // ITEM_BOTTLE + SLOT_BOTTLE_1, // ITEM_POTION_RED + SLOT_BOTTLE_1, // ITEM_POTION_GREEN + SLOT_BOTTLE_1, // ITEM_POTION_BLUE + SLOT_BOTTLE_1, // ITEM_FAIRY + SLOT_BOTTLE_1, // ITEM_DEKU_PRINCESS + SLOT_BOTTLE_1, // ITEM_MILK_BOTTLE + SLOT_BOTTLE_1, // ITEM_MILK_HALF + SLOT_BOTTLE_1, // ITEM_FISH + SLOT_BOTTLE_1, // ITEM_BUG + SLOT_BOTTLE_1, // ITEM_BLUE_FIRE + SLOT_BOTTLE_1, // ITEM_POE + SLOT_BOTTLE_1, // ITEM_BIG_POE + SLOT_BOTTLE_1, // ITEM_SPRING_WATER + SLOT_BOTTLE_1, // ITEM_HOT_SPRING_WATER + SLOT_BOTTLE_1, // ITEM_ZORA_EGG + SLOT_BOTTLE_1, // ITEM_GOLD_DUST + SLOT_BOTTLE_1, // ITEM_MUSHROOM + SLOT_BOTTLE_1, // ITEM_SEAHORSE + SLOT_BOTTLE_1, // ITEM_CHATEAU + SLOT_BOTTLE_1, // ITEM_HYLIAN_LOACH + SLOT_BOTTLE_1, // ITEM_OBABA_DRINK + SLOT_TRADE_DEED, // ITEM_MOONS_TEAR + SLOT_TRADE_DEED, // ITEM_DEED_LAND + SLOT_TRADE_DEED, // ITEM_DEED_SWAMP + SLOT_TRADE_DEED, // ITEM_DEED_MOUNTAIN + SLOT_TRADE_DEED, // ITEM_DEED_OCEAN + SLOT_TRADE_KEY_MAMA, // ITEM_ROOM_KEY + SLOT_TRADE_KEY_MAMA, // ITEM_LETTER_MAMA + SLOT_TRADE_COUPLE, // ITEM_LETTER_TO_KAFEI + SLOT_TRADE_COUPLE, // ITEM_PENDANT_OF_MEMORIES + SLOT_TRADE_COUPLE, // ITEM_TINGLE_MAP + SLOT_MASK_DEKU, // ITEM_MASK_DEKU + SLOT_MASK_GORON, // ITEM_MASK_GORON + SLOT_MASK_ZORA, // ITEM_MASK_ZORA + SLOT_MASK_FIERCE_DEITY, // ITEM_MASK_FIERCE_DEITY + SLOT_MASK_TRUTH, // ITEM_MASK_TRUTH + SLOT_MASK_KAFEIS_MASK, // ITEM_MASK_KAFEIS_MASK + SLOT_MASK_ALL_NIGHT, // ITEM_MASK_ALL_NIGHT + SLOT_MASK_BUNNY, // ITEM_MASK_BUNNY + SLOT_MASK_KEATON, // ITEM_MASK_KEATON + SLOT_MASK_GARO, // ITEM_MASK_GARO + SLOT_MASK_ROMANI, // ITEM_MASK_ROMANI + SLOT_MASK_CIRCUS_LEADER, // ITEM_MASK_CIRCUS_LEADER + SLOT_MASK_POSTMAN, // ITEM_MASK_POSTMAN + SLOT_MASK_COUPLE, // ITEM_MASK_COUPLE + SLOT_MASK_GREAT_FAIRY, // ITEM_MASK_GREAT_FAIRY + SLOT_MASK_GIBDO, // ITEM_MASK_GIBDO + SLOT_MASK_DON_GERO, // ITEM_MASK_DON_GERO + SLOT_MASK_KAMARO, // ITEM_MASK_KAMARO + SLOT_MASK_CAPTAIN, // ITEM_MASK_CAPTAIN + SLOT_MASK_STONE, // ITEM_MASK_STONE + SLOT_MASK_BREMEN, // ITEM_MASK_BREMEN + SLOT_MASK_BLAST, // ITEM_MASK_BLAST + SLOT_MASK_SCENTS, // ITEM_MASK_SCENTS + SLOT_MASK_GIANT, // ITEM_MASK_GIANT + SLOT_BOW, // ITEM_BOW_FIRE + SLOT_BOW, // ITEM_BOW_ICE + SLOT_BOW, // ITEM_BOW_LIGHT +}; + +s16 gItemPrices[] = { + 0, // ITEM_OCARINA_OF_TIME + 0, // ITEM_BOW + 0, // ITEM_ARROW_FIRE + 0, // ITEM_ARROW_ICE + 0, // ITEM_ARROW_LIGHT + 0, // ITEM_OCARINA_FAIRY + 0, // ITEM_BOMB + 0, // ITEM_BOMBCHU + 0, // ITEM_DEKU_STICK + 0, // ITEM_DEKU_NUT + 0, // ITEM_MAGIC_BEANS + 0, // ITEM_SLINGSHOT + 0, // ITEM_POWDER_KEG + 0, // ITEM_PICTOGRAPH_BOX + 0, // ITEM_LENS_OF_TRUTH + 0, // ITEM_HOOKSHOT + 0, // ITEM_SWORD_GREAT_FAIRY + 0, // ITEM_LONGSHOT + 0, // ITEM_BOTTLE + 20, // ITEM_POTION_RED + 20, // ITEM_POTION_GREEN + 20, // ITEM_POTION_BLUE + 20, // ITEM_FAIRY + 0, // ITEM_DEKU_PRINCESS + 20, // ITEM_MILK_BOTTLE + 5, // ITEM_MILK_HALF + 20, // ITEM_FISH + 20, // ITEM_BUG + 50, // ITEM_BLUE_FIRE + 50, // ITEM_POE + 200, // ITEM_BIG_POE + 20, // ITEM_SPRING_WATER + 20, // ITEM_HOT_SPRING_WATER + 20, // ITEM_ZORA_EGG + 200, // ITEM_GOLD_DUST + 5, // ITEM_MUSHROOM + 0, // ITEM_SEAHORSE + 200, // ITEM_CHATEAU + 20, // ITEM_HYLIAN_LOACH + 0, // ITEM_OBABA_DRINK + 0, // ITEM_MOONS_TEAR + 0, // ITEM_DEED_LAND + 0, // ITEM_DEED_SWAMP + 0, // ITEM_DEED_MOUNTAIN + 0, // ITEM_DEED_OCEAN + 0, // ITEM_ROOM_KEY + 0, // ITEM_LETTER_MAMA + 0, // ITEM_LETTER_KAFEI + 0, // ITEM_PENDANT_OF_MEMORIES + 0, // ITEM_TINGLE_MAP +}; + +// Used to map scene indexes to their region in Termina +u16 gSceneIdsPerRegion[REGION_MAX][27] = { + // REGION_GREAT_BAY + { + SCENE_30GYOSON, + SCENE_LABO, + SCENE_FISHERMAN, + SCENE_SINKAI, + SCENE_31MISAKI, + SCENE_TORIDE, + SCENE_KAIZOKU, + SCENE_PIRATE, + SCENE_35TAKI, + SCENE_KINDAN2, + 0xFFFF, + }, + // REGION_ZORA_HALL + { + SCENE_33ZORACITY, + SCENE_BANDROOM, + 0xFFFF, + }, + // REGION_ROMANI_RANCH + { + SCENE_F01, + SCENE_ROMANYMAE, + SCENE_OMOYA, + SCENE_F01C, + SCENE_F01_B, + SCENE_KOEPONARACE, + 0xFFFF, + }, + // REGION_DEKU_PALACE + { + SCENE_22DEKUCITY, + SCENE_DEKU_KING, + SCENE_26SARUNOMORI, + SCENE_DANPEI, + 0xFFFF, + }, + // REGION_WOODFALL + { + SCENE_20SICHITAI, + SCENE_20SICHITAI2, + SCENE_MAP_SHOP, + SCENE_WITCH_SHOP, + SCENE_21MITURINMAE, + SCENE_KINSTA1, + 0xFFFF, + }, + // REGION_CLOCK_TOWN + { + SCENE_00KEIKOKU, SCENE_TENMON_DAI, SCENE_13HUBUKINOMITI, SCENE_24KEMONOMITI, SCENE_SYATEKI_MORI, + SCENE_IKANAMAE, SCENE_TOWN, SCENE_SYATEKI_MIZU, SCENE_BOWLING, SCENE_TAKARAYA, + SCENE_YADOYA, SCENE_SONCHONOIE, SCENE_MILK_BAR, SCENE_ICHIBA, SCENE_BOMYA, + SCENE_AYASHIISHOP, SCENE_8ITEMSHOP, SCENE_DOUJOU, SCENE_POSTHOUSE, SCENE_TAKARAKUJI, + SCENE_BACKTOWN, SCENE_CLOCKTOWER, SCENE_INSIDETOWER, SCENE_OKUJOU, SCENE_ALLEY, + SCENE_DEKUTES, 0xFFFF, + }, + // REGION_SNOWHEAD + { + SCENE_10YUKIYAMANOMURA, + SCENE_10YUKIYAMANOMURA2, + SCENE_KAJIYA, + SCENE_12HAKUGINMAE, + SCENE_14YUKIDAMANOMITI, + SCENE_GORONRACE, + SCENE_GORON_HAKA, + SCENE_17SETUGEN, + SCENE_17SETUGEN2, + 0xFFFF, + }, + // REGION_IKANA_GRAVEYARD + { + SCENE_BOTI, + SCENE_DANPEI2TEST, + 0xFFFF, + }, + // REGION_IKANA_CANYON + { + SCENE_CASTLE, + SCENE_IKNINSIDE, + SCENE_IKANA, + SCENE_SECOM, + SCENE_MUSICHOUSE, + SCENE_RANDOM, + SCENE_REDEAD, + SCENE_TOUGITES, + SCENE_HAKASHITA, + 0xFFFF, + }, + // REGION_GORON_VILLAGE + { + SCENE_11GORONNOSATO, + SCENE_11GORONNOSATO2, + SCENE_16GORON_HOUSE, + SCENE_GORONSHOP, + 0xFFFF, + }, + // REGION_STONE_TOWER + { + SCENE_F40, + SCENE_F41, + 0xFFFF, + }, +}; + +s32 Inventory_GetBtnBItem(PlayState* play) { + if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) { + return ITEM_NONE; + } else if (gSaveContext.bButtonStatus == BTN_DISABLED) { + return ITEM_NONE; + } else if (CUR_FORM_EQUIP(EQUIP_SLOT_B) == ITEM_NONE) { + if (play->interfaceCtx.unk_21C != 0) { + if (play->interfaceCtx.bButtonDoAction != 0) { + return play->interfaceCtx.bButtonDoAction; + } + } + return ITEM_NONE; + } else { + return CUR_FORM_EQUIP(EQUIP_SLOT_B); + } +} + +/** + * Only changes shield + */ +void Inventory_ChangeEquipment(s16 value) { + SET_EQUIP_VALUE(EQUIP_TYPE_SHIELD, value); +} + +/** + * Only deletes shield, equipment argument unused and is a remnant of OoT + */ +u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) { + Player* player = GET_PLAYER(play); + + if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) != EQUIP_VALUE_SHIELD_NONE) { + SET_EQUIP_VALUE(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_NONE); + Player_SetEquipmentData(play, player); + return true; + } + + return false; +} + +void Inventory_ChangeUpgrade(s16 upgrade, u32 value) { + u32 upgrades = GET_SAVE_INVENTORY_UPGRADES; + + upgrades &= gUpgradeNegMasks[upgrade]; + upgrades |= value << gUpgradeShifts[upgrade]; + + gSaveContext.save.saveInfo.inventory.upgrades = upgrades; +} + +s32 Inventory_IsMapVisible(s16 sceneId) { + s16 index = 0; + + /** + * a single index of scenesVisible can only hold 32 bits. So for every 32 scenes in the scene enum, + * increment to the next index of scenesVisible so that every scene gets a unique flag in scenesVisible, + * 224 bits were allocated to this although there are only 112 scenes + */ + if (sceneId >= 0x20) { + if (sceneId < 0x40) { + index = 1; + } else if (sceneId < 0x60) { + index = 2; + } else if (sceneId < 0x80) { + index = 3; + } else if (sceneId < 0xA0) { + index = 4; + } else if (sceneId < 0xC0) { + index = 5; + } else if (sceneId < 0xE0) { + index = 6; + } + } + + if (gSaveContext.save.saveInfo.scenesVisible[index] & gBitFlags[sceneId - (index << 5)]) { + return true; + } + + return false; +} + +static u16 sSceneIdsPerTingleMap[TINGLE_MAP_MAX][12] = { + { + // TINGLE_MAP_CLOCK_TOWN + SCENE_00KEIKOKU, + SCENE_BOTI, + SCENE_13HUBUKINOMITI, + SCENE_24KEMONOMITI, + SCENE_IKANAMAE, + SCENE_TOWN, + SCENE_ICHIBA, + SCENE_BACKTOWN, + SCENE_CLOCKTOWER, + SCENE_ALLEY, + 0xFFFF, + }, + { + // TINGLE_MAP_WOODFALL + SCENE_20SICHITAI, + SCENE_20SICHITAI2, + SCENE_21MITURINMAE, + SCENE_22DEKUCITY, + SCENE_DEKU_KING, + SCENE_KINSTA1, + 0xFFFF, + }, + { + // TINGLE_MAP_SNOWHEAD + SCENE_10YUKIYAMANOMURA, + SCENE_10YUKIYAMANOMURA2, + SCENE_11GORONNOSATO, + SCENE_11GORONNOSATO2, + SCENE_16GORON_HOUSE, + SCENE_12HAKUGINMAE, + SCENE_14YUKIDAMANOMITI, + SCENE_GORONRACE, + SCENE_17SETUGEN, + SCENE_17SETUGEN2, + 0xFFFF, + }, + { + // TINGLE_MAP_ROMANI_RANCH + SCENE_F01, + SCENE_ROMANYMAE, + SCENE_OMOYA, + SCENE_F01C, + SCENE_F01_B, + SCENE_KOEPONARACE, + 0xFFFF, + }, + { + // TINGLE_MAP_GREAT_BAY + SCENE_30GYOSON, + SCENE_SINKAI, + SCENE_31MISAKI, + SCENE_TORIDE, + SCENE_KAIZOKU, + SCENE_33ZORACITY, + SCENE_35TAKI, + 0xFFFF, + }, + { + // TINGLE_MAP_STONE_TOWER + SCENE_F40, + SCENE_F41, + SCENE_CASTLE, + SCENE_IKANA, + SCENE_REDEAD, + 0xFFFF, + }, +}; + +/** + * Removing clouds from the World Map is achieved by purchasing a tingle map + */ +void Inventory_SetWorldMapCloudVisibility(s16 tingleIndex) { + s16 i = 0; + s16 index = 0; + u16(*tingleMapSceneIds)[] = &sSceneIdsPerTingleMap[tingleIndex]; + + if ((tingleIndex >= 0) && (tingleIndex < TINGLE_MAP_MAX)) { + while (true) { + if ((*tingleMapSceneIds)[i] == 0xFFFF) { + break; + } + + /** + * a single index of scenesVisible can only hold 32 bits. So for every 32 scenes in the scene enum, + * increment to the next index of scenesVisible so that every scene gets a unique flag in scenesVisible, + * 224 bits were allocated to this although there are only 112 scenes + */ + if (((s16)(*tingleMapSceneIds)[i]) < 0x20) { + index = 0; + } else if (((s16)(*tingleMapSceneIds)[i]) < 0x40) { + index = 1; + } else if (((s16)(*tingleMapSceneIds)[i]) < 0x60) { + index = 2; + } else if (((s16)(*tingleMapSceneIds)[i]) < 0x80) { + index = 3; + } else if (((s16)(*tingleMapSceneIds)[i]) < 0xA0) { + index = 4; + } else if (((s16)(*tingleMapSceneIds)[i]) < 0xC0) { + index = 5; + } else if (((s16)(*tingleMapSceneIds)[i]) < 0xE0) { + index = 6; + } + + gSaveContext.save.saveInfo.scenesVisible[index] = gSaveContext.save.saveInfo.scenesVisible[index] | + gBitFlags[(s16)(*tingleMapSceneIds)[i] - (index << 5)]; + i++; + } + + if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_CLOCK_TOWN]) { + gSaveContext.save.saveInfo.worldMapCloudVisibility |= 3; + } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_WOODFALL]) { + gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x1C; + } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_SNOWHEAD]) { + gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0xE0; + } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_ROMANI_RANCH]) { + gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x100; + } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_GREAT_BAY]) { + gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x1E00; + } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_STONE_TOWER]) { + gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x6000; + } + } + + R_MINIMAP_DISABLED = false; +} + +/** + * Also stores the players filename into dekuPlaygroundPlayerName + */ +void Inventory_SaveDekuPlaygroundHighScore(s16 timerId) { + s16 i; + + gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1] = gSaveContext.timerCurTimes[timerId]; + + for (i = 0; i < 8; i++) { + gSaveContext.save.saveInfo.inventory.dekuPlaygroundPlayerName[CURRENT_DAY - 1][i] = + gSaveContext.save.saveInfo.playerData.playerName[i]; + } +} + +void Inventory_IncrementSkullTokenCount(s16 sceneIndex) { + if (sceneIndex == SCENE_KINSTA1) { + // Swamp Spider House (increment high bits of skullTokenCount) + gSaveContext.save.saveInfo.skullTokenCount = + ((u16)(((gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000) >> 0x10) + 1) << 0x10) | + (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF); + } else { + // Ocean Spider House (increment low bits of skullTokenCount) + gSaveContext.save.saveInfo.skullTokenCount = (((u16)gSaveContext.save.saveInfo.skullTokenCount + 1) & 0xFFFF) | + (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000); + } +} + +s16 Inventory_GetSkullTokenCount(s16 sceneIndex) { + if (sceneIndex == SCENE_KINSTA1) { + // Swamp Spider House + return (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000) >> 0x10; + } else { + // Ocean Spider House + return gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF; + } +} + +void Inventory_SaveLotteryCodeGuess(PlayState* play) { + u16 lotteryCodeGuess; + + lotteryCodeGuess = ((play->msgCtx.unk12054[0] & 0xF) << 8); // First Digit + lotteryCodeGuess |= ((play->msgCtx.unk12054[1] & 0xF) << 4); // Second Digit + lotteryCodeGuess |= (play->msgCtx.unk12054[2] & 0xF); // Third Digit + HS_SET_LOTTERY_CODE_GUESS(lotteryCodeGuess); +} + +u8 gPlayerFormItemRestrictions[PLAYER_FORM_MAX][114] = { + // PLAYER_FORM_FIERCE_DEITY + { + false, // ITEM_OCARINA_OF_TIME + false, // ITEM_BOW + false, // ITEM_ARROW_FIRE + false, // ITEM_ARROW_ICE + false, // ITEM_ARROW_LIGHT + false, // ITEM_OCARINA_FAIRY + false, // ITEM_BOMB + false, // ITEM_BOMBCHU + false, // ITEM_DEKU_STICK + false, // ITEM_DEKU_NUT + false, // ITEM_MAGIC_BEANS + false, // ITEM_SLINGSHOT + false, // ITEM_POWDER_KEG + false, // ITEM_PICTOGRAPH_BOX + false, // ITEM_LENS_OF_TRUTH + false, // ITEM_HOOKSHOT + false, // ITEM_SWORD_GREAT_FAIRY + false, // ITEM_LONGSHOT + true, // ITEM_BOTTLE + true, // ITEM_POTION_RED + true, // ITEM_POTION_GREEN + true, // ITEM_POTION_BLUE + true, // ITEM_FAIRY + true, // ITEM_DEKU_PRINCESS + true, // ITEM_MILK_BOTTLE + true, // ITEM_MILK_HALF + true, // ITEM_FISH + true, // ITEM_BUG + true, // ITEM_BLUE_FIRE + true, // ITEM_POE + true, // ITEM_BIG_POE + true, // ITEM_SPRING_WATER + true, // ITEM_HOT_SPRING_WATER + true, // ITEM_ZORA_EGG + true, // ITEM_GOLD_DUST + true, // ITEM_MUSHROOM + true, // ITEM_SEAHORSE + true, // ITEM_CHATEAU + true, // ITEM_HYLIAN_LOACH + true, // ITEM_OBABA_DRINK + false, // ITEM_MOONS_TEAR + false, // ITEM_DEED_LAND + false, // ITEM_DEED_SWAMP + false, // ITEM_DEED_MOUNTAIN + false, // ITEM_DEED_OCEAN + false, // ITEM_ROOM_KEY + false, // ITEM_LETTER_MAMA + false, // ITEM_LETTER_TO_KAFEI + false, // ITEM_PENDANT_OF_MEMORIES + false, // ITEM_TINGLE_MAP + false, // ITEM_MASK_DEKU + false, // ITEM_MASK_GORON + false, // ITEM_MASK_ZORA + true, // ITEM_MASK_FIERCE_DEITY + false, // ITEM_MASK_TRUTH + false, // ITEM_MASK_KAFEIS_MASK + false, // ITEM_MASK_ALL_NIGHT + false, // ITEM_MASK_BUNNY + false, // ITEM_MASK_KEATON + false, // ITEM_MASK_GARO + false, // ITEM_MASK_ROMANI + false, // ITEM_MASK_CIRCUS_LEADER + false, // ITEM_MASK_POSTMAN + false, // ITEM_MASK_COUPLE + false, // ITEM_MASK_GREAT_FAIRY + false, // ITEM_MASK_GIBDO + false, // ITEM_MASK_DON_GERO + false, // ITEM_MASK_KAMARO + false, // ITEM_MASK_CAPTAIN + false, // ITEM_MASK_STONE + false, // ITEM_MASK_BREMEN + false, // ITEM_MASK_BLAST + false, // ITEM_MASK_SCENTS + false, // ITEM_MASK_GIANT + false, // ITEM_BOW_FIRE + false, // ITEM_BOW_ICE + false, // ITEM_BOW_LIGHT + false, // ITEM_SWORD_KOKIRI + false, // ITEM_SWORD_RAZOR + false, // ITEM_SWORD_GILDED + false, // ITEM_SWORD_DEITY + false, // ITEM_SHIELD_HERO + false, // ITEM_SHIELD_MIRROR + false, // ITEM_QUIVER_30 + false, // ITEM_QUIVER_40 + false, // ITEM_QUIVER_50 + false, // ITEM_BOMB_BAG_20 + false, // ITEM_BOMB_BAG_30 + false, // ITEM_BOMB_BAG_40 + false, // ITEM_WALLET_DEFAULT + false, // ITEM_WALLET_ADULT + false, // ITEM_WALLET_GIANT + false, // ITEM_FISHING_ROD + false, // ITEM_REMAINS_ODOLWA + false, // ITEM_REMAINS_GOHT + false, // ITEM_REMAINS_GYORG + false, // ITEM_REMAINS_TWINMOLD + false, // ITEM_SONG_SONATA + false, // ITEM_SONG_LULLABY + false, // ITEM_SONG_NOVA + false, // ITEM_SONG_ELEGY + false, // ITEM_SONG_OATH + false, // ITEM_SONG_SARIA + false, // ITEM_SONG_TIME + false, // ITEM_SONG_HEALING + false, // ITEM_SONG_EPONA + false, // ITEM_SONG_SOARING + false, // ITEM_SONG_STORMS + false, // ITEM_SONG_SUN + false, // ITEM_BOMBERS_NOTEBOOK + false, // ITEM_SKULL_TOKEN + false, // ITEM_HEART_CONTAINER + false, // ITEM_HEART_PIECE + false, // ITEM_71 + }, + // PLAYER_FORM_GORON + { + true, // ITEM_OCARINA_OF_TIME + false, // ITEM_BOW + false, // ITEM_ARROW_FIRE + false, // ITEM_ARROW_ICE + false, // ITEM_ARROW_LIGHT + false, // ITEM_OCARINA_FAIRY + false, // ITEM_BOMB + false, // ITEM_BOMBCHU + false, // ITEM_DEKU_STICK + false, // ITEM_DEKU_NUT + false, // ITEM_MAGIC_BEANS + false, // ITEM_SLINGSHOT + true, // ITEM_POWDER_KEG + true, // ITEM_PICTOGRAPH_BOX + true, // ITEM_LENS_OF_TRUTH + false, // ITEM_HOOKSHOT + false, // ITEM_SWORD_GREAT_FAIRY + false, // ITEM_LONGSHOT + true, // ITEM_BOTTLE + true, // ITEM_POTION_RED + true, // ITEM_POTION_GREEN + true, // ITEM_POTION_BLUE + true, // ITEM_FAIRY + true, // ITEM_DEKU_PRINCESS + true, // ITEM_MILK_BOTTLE + true, // ITEM_MILK_HALF + true, // ITEM_FISH + true, // ITEM_BUG + true, // ITEM_BLUE_FIRE + true, // ITEM_POE + true, // ITEM_BIG_POE + true, // ITEM_SPRING_WATER + true, // ITEM_HOT_SPRING_WATER + true, // ITEM_ZORA_EGG + true, // ITEM_GOLD_DUST + true, // ITEM_MUSHROOM + true, // ITEM_SEAHORSE + true, // ITEM_CHATEAU + true, // ITEM_HYLIAN_LOACH + true, // ITEM_OBABA_DRINK + true, // ITEM_MOONS_TEAR + true, // ITEM_DEED_LAND + true, // ITEM_DEED_SWAMP + true, // ITEM_DEED_MOUNTAIN + true, // ITEM_DEED_OCEAN + true, // ITEM_ROOM_KEY + true, // ITEM_LETTER_MAMA + true, // ITEM_LETTER_TO_KAFEI + true, // ITEM_PENDANT_OF_MEMORIES + true, // ITEM_TINGLE_MAP + true, // ITEM_MASK_DEKU + true, // ITEM_MASK_GORON + true, // ITEM_MASK_ZORA + true, // ITEM_MASK_FIERCE_DEITY + false, // ITEM_MASK_TRUTH + false, // ITEM_MASK_KAFEIS_MASK + false, // ITEM_MASK_ALL_NIGHT + false, // ITEM_MASK_BUNNY + false, // ITEM_MASK_KEATON + false, // ITEM_MASK_GARO + false, // ITEM_MASK_ROMANI + false, // ITEM_MASK_CIRCUS_LEADER + false, // ITEM_MASK_POSTMAN + false, // ITEM_MASK_COUPLE + false, // ITEM_MASK_GREAT_FAIRY + false, // ITEM_MASK_GIBDO + false, // ITEM_MASK_DON_GERO + false, // ITEM_MASK_KAMARO + false, // ITEM_MASK_CAPTAIN + false, // ITEM_MASK_STONE + false, // ITEM_MASK_BREMEN + false, // ITEM_MASK_BLAST + false, // ITEM_MASK_SCENTS + false, // ITEM_MASK_GIANT + false, // ITEM_BOW_FIRE + false, // ITEM_BOW_ICE + false, // ITEM_BOW_LIGHT + false, // ITEM_SWORD_KOKIRI + false, // ITEM_SWORD_RAZOR + false, // ITEM_SWORD_GILDED + false, // ITEM_SWORD_DEITY + false, // ITEM_SHIELD_HERO + false, // ITEM_SHIELD_MIRROR + false, // ITEM_QUIVER_30 + false, // ITEM_QUIVER_40 + false, // ITEM_QUIVER_50 + false, // ITEM_BOMB_BAG_20 + false, // ITEM_BOMB_BAG_30 + false, // ITEM_BOMB_BAG_40 + false, // ITEM_WALLET_DEFAULT + false, // ITEM_WALLET_ADULT + false, // ITEM_WALLET_GIANT + false, // ITEM_FISHING_ROD + false, // ITEM_REMAINS_ODOLWA + false, // ITEM_REMAINS_GOHT + false, // ITEM_REMAINS_GYORG + false, // ITEM_REMAINS_TWINMOLD + false, // ITEM_SONG_SONATA + false, // ITEM_SONG_LULLABY + false, // ITEM_SONG_NOVA + false, // ITEM_SONG_ELEGY + false, // ITEM_SONG_OATH + false, // ITEM_SONG_SARIA + false, // ITEM_SONG_TIME + false, // ITEM_SONG_HEALING + false, // ITEM_SONG_EPONA + false, // ITEM_SONG_SOARING + false, // ITEM_SONG_STORMS + false, // ITEM_SONG_SUN + false, // ITEM_BOMBERS_NOTEBOOK + false, // ITEM_SKULL_TOKEN + false, // ITEM_HEART_CONTAINER + false, // ITEM_HEART_PIECE + false, // ITEM_71 + }, + // PLAYER_FORM_ZORA + { + true, // ITEM_OCARINA_OF_TIME + false, // ITEM_BOW + false, // ITEM_ARROW_FIRE + false, // ITEM_ARROW_ICE + false, // ITEM_ARROW_LIGHT + false, // ITEM_OCARINA_FAIRY + false, // ITEM_BOMB + false, // ITEM_BOMBCHU + false, // ITEM_DEKU_STICK + false, // ITEM_DEKU_NUT + false, // ITEM_MAGIC_BEANS + false, // ITEM_SLINGSHOT + false, // ITEM_POWDER_KEG + true, // ITEM_PICTOGRAPH_BOX + true, // ITEM_LENS_OF_TRUTH + false, // ITEM_HOOKSHOT + false, // ITEM_SWORD_GREAT_FAIRY + false, // ITEM_LONGSHOT + true, // ITEM_BOTTLE + true, // ITEM_POTION_RED + true, // ITEM_POTION_GREEN + true, // ITEM_POTION_BLUE + true, // ITEM_FAIRY + true, // ITEM_DEKU_PRINCESS + true, // ITEM_MILK_BOTTLE + true, // ITEM_MILK_HALF + true, // ITEM_FISH + true, // ITEM_BUG + true, // ITEM_BLUE_FIRE + true, // ITEM_POE + true, // ITEM_BIG_POE + true, // ITEM_SPRING_WATER + true, // ITEM_HOT_SPRING_WATER + true, // ITEM_ZORA_EGG + true, // ITEM_GOLD_DUST + true, // ITEM_MUSHROOM + true, // ITEM_SEAHORSE + true, // ITEM_CHATEAU + true, // ITEM_HYLIAN_LOACH + true, // ITEM_OBABA_DRINK + true, // ITEM_MOONS_TEAR + true, // ITEM_DEED_LAND + true, // ITEM_DEED_SWAMP + true, // ITEM_DEED_MOUNTAIN + true, // ITEM_DEED_OCEAN + true, // ITEM_ROOM_KEY + true, // ITEM_LETTER_MAMA + true, // ITEM_LETTER_TO_KAFEI + true, // ITEM_PENDANT_OF_MEMORIES + true, // ITEM_TINGLE_MAP + true, // ITEM_MASK_DEKU + true, // ITEM_MASK_GORON + true, // ITEM_MASK_ZORA + true, // ITEM_MASK_FIERCE_DEITY + false, // ITEM_MASK_TRUTH + false, // ITEM_MASK_KAFEIS_MASK + false, // ITEM_MASK_ALL_NIGHT + false, // ITEM_MASK_BUNNY + false, // ITEM_MASK_KEATON + false, // ITEM_MASK_GARO + false, // ITEM_MASK_ROMANI + false, // ITEM_MASK_CIRCUS_LEADER + false, // ITEM_MASK_POSTMAN + false, // ITEM_MASK_COUPLE + false, // ITEM_MASK_GREAT_FAIRY + false, // ITEM_MASK_GIBDO + false, // ITEM_MASK_DON_GERO + false, // ITEM_MASK_KAMARO + false, // ITEM_MASK_CAPTAIN + false, // ITEM_MASK_STONE + false, // ITEM_MASK_BREMEN + false, // ITEM_MASK_BLAST + false, // ITEM_MASK_SCENTS + false, // ITEM_MASK_GIANT + false, // ITEM_BOW_FIRE + false, // ITEM_BOW_ICE + false, // ITEM_BOW_LIGHT + false, // ITEM_SWORD_KOKIRI + false, // ITEM_SWORD_RAZOR + false, // ITEM_SWORD_GILDED + false, // ITEM_SWORD_DEITY + false, // ITEM_SHIELD_HERO + false, // ITEM_SHIELD_MIRROR + false, // ITEM_QUIVER_30 + false, // ITEM_QUIVER_40 + false, // ITEM_QUIVER_50 + false, // ITEM_BOMB_BAG_20 + false, // ITEM_BOMB_BAG_30 + false, // ITEM_BOMB_BAG_40 + false, // ITEM_WALLET_DEFAULT + false, // ITEM_WALLET_ADULT + false, // ITEM_WALLET_GIANT + false, // ITEM_FISHING_ROD + false, // ITEM_REMAINS_ODOLWA + false, // ITEM_REMAINS_GOHT + false, // ITEM_REMAINS_GYORG + false, // ITEM_REMAINS_TWINMOLD + false, // ITEM_SONG_SONATA + false, // ITEM_SONG_LULLABY + false, // ITEM_SONG_NOVA + false, // ITEM_SONG_ELEGY + false, // ITEM_SONG_OATH + false, // ITEM_SONG_SARIA + false, // ITEM_SONG_TIME + false, // ITEM_SONG_HEALING + false, // ITEM_SONG_EPONA + false, // ITEM_SONG_SOARING + false, // ITEM_SONG_STORMS + false, // ITEM_SONG_SUN + false, // ITEM_BOMBERS_NOTEBOOK + false, // ITEM_SKULL_TOKEN + false, // ITEM_HEART_CONTAINER + false, // ITEM_HEART_PIECE + false, // ITEM_71 + }, + // PLAYER_FORM_DEKU + { + true, // ITEM_OCARINA_OF_TIME + false, // ITEM_BOW + false, // ITEM_ARROW_FIRE + false, // ITEM_ARROW_ICE + false, // ITEM_ARROW_LIGHT + false, // ITEM_OCARINA_FAIRY + false, // ITEM_BOMB + false, // ITEM_BOMBCHU + false, // ITEM_DEKU_STICK + true, // ITEM_DEKU_NUT + false, // ITEM_MAGIC_BEANS + false, // ITEM_SLINGSHOT + false, // ITEM_POWDER_KEG + true, // ITEM_PICTOGRAPH_BOX + true, // ITEM_LENS_OF_TRUTH + false, // ITEM_HOOKSHOT + false, // ITEM_SWORD_GREAT_FAIRY + false, // ITEM_LONGSHOT + true, // ITEM_BOTTLE + true, // ITEM_POTION_RED + true, // ITEM_POTION_GREEN + true, // ITEM_POTION_BLUE + true, // ITEM_FAIRY + true, // ITEM_DEKU_PRINCESS + true, // ITEM_MILK_BOTTLE + true, // ITEM_MILK_HALF + true, // ITEM_FISH + true, // ITEM_BUG + true, // ITEM_BLUE_FIRE + true, // ITEM_POE + true, // ITEM_BIG_POE + true, // ITEM_SPRING_WATER + true, // ITEM_HOT_SPRING_WATER + true, // ITEM_ZORA_EGG + true, // ITEM_GOLD_DUST + true, // ITEM_MUSHROOM + true, // ITEM_SEAHORSE + true, // ITEM_CHATEAU + true, // ITEM_HYLIAN_LOACH + true, // ITEM_OBABA_DRINK + true, // ITEM_MOONS_TEAR + true, // ITEM_DEED_LAND + true, // ITEM_DEED_SWAMP + true, // ITEM_DEED_MOUNTAIN + true, // ITEM_DEED_OCEAN + true, // ITEM_ROOM_KEY + true, // ITEM_LETTER_MAMA + true, // ITEM_LETTER_TO_KAFEI + true, // ITEM_PENDANT_OF_MEMORIES + true, // ITEM_TINGLE_MAP + true, // ITEM_MASK_DEKU + true, // ITEM_MASK_GORON + true, // ITEM_MASK_ZORA + true, // ITEM_MASK_FIERCE_DEITY + false, // ITEM_MASK_TRUTH + false, // ITEM_MASK_KAFEIS_MASK + false, // ITEM_MASK_ALL_NIGHT + false, // ITEM_MASK_BUNNY + false, // ITEM_MASK_KEATON + false, // ITEM_MASK_GARO + false, // ITEM_MASK_ROMANI + false, // ITEM_MASK_CIRCUS_LEADER + false, // ITEM_MASK_POSTMAN + false, // ITEM_MASK_COUPLE + false, // ITEM_MASK_GREAT_FAIRY + false, // ITEM_MASK_GIBDO + false, // ITEM_MASK_DON_GERO + false, // ITEM_MASK_KAMARO + false, // ITEM_MASK_CAPTAIN + false, // ITEM_MASK_STONE + false, // ITEM_MASK_BREMEN + false, // ITEM_MASK_BLAST + false, // ITEM_MASK_SCENTS + false, // ITEM_MASK_GIANT + false, // ITEM_BOW_FIRE + false, // ITEM_BOW_ICE + false, // ITEM_BOW_LIGHT + false, // ITEM_SWORD_KOKIRI + false, // ITEM_SWORD_RAZOR + false, // ITEM_SWORD_GILDED + false, // ITEM_SWORD_DEITY + false, // ITEM_SHIELD_HERO + false, // ITEM_SHIELD_MIRROR + false, // ITEM_QUIVER_30 + false, // ITEM_QUIVER_40 + false, // ITEM_QUIVER_50 + false, // ITEM_BOMB_BAG_20 + false, // ITEM_BOMB_BAG_30 + false, // ITEM_BOMB_BAG_40 + false, // ITEM_WALLET_DEFAULT + false, // ITEM_WALLET_ADULT + false, // ITEM_WALLET_GIANT + false, // ITEM_FISHING_ROD + false, // ITEM_REMAINS_ODOLWA + false, // ITEM_REMAINS_GOHT + false, // ITEM_REMAINS_GYORG + false, // ITEM_REMAINS_TWINMOLD + false, // ITEM_SONG_SONATA + false, // ITEM_SONG_LULLABY + false, // ITEM_SONG_NOVA + false, // ITEM_SONG_ELEGY + false, // ITEM_SONG_OATH + false, // ITEM_SONG_SARIA + false, // ITEM_SONG_TIME + false, // ITEM_SONG_HEALING + false, // ITEM_SONG_EPONA + false, // ITEM_SONG_SOARING + false, // ITEM_SONG_STORMS + false, // ITEM_SONG_SUN + false, // ITEM_BOMBERS_NOTEBOOK + false, // ITEM_SKULL_TOKEN + false, // ITEM_HEART_CONTAINER + false, // ITEM_HEART_PIECE + false, // ITEM_71 + }, + // PLAYER_FORM_HUMAN + { + true, // ITEM_OCARINA_OF_TIME + true, // ITEM_BOW + true, // ITEM_ARROW_FIRE + true, // ITEM_ARROW_ICE + true, // ITEM_ARROW_LIGHT + true, // ITEM_OCARINA_FAIRY + true, // ITEM_BOMB + true, // ITEM_BOMBCHU + true, // ITEM_DEKU_STICK + true, // ITEM_DEKU_NUT + true, // ITEM_MAGIC_BEANS + true, // ITEM_SLINGSHOT + false, // ITEM_POWDER_KEG + true, // ITEM_PICTOGRAPH_BOX + true, // ITEM_LENS_OF_TRUTH + true, // ITEM_HOOKSHOT + true, // ITEM_SWORD_GREAT_FAIRY + true, // ITEM_LONGSHOT + true, // ITEM_BOTTLE + true, // ITEM_POTION_RED + true, // ITEM_POTION_GREEN + true, // ITEM_POTION_BLUE + true, // ITEM_FAIRY + true, // ITEM_DEKU_PRINCESS + true, // ITEM_MILK_BOTTLE + true, // ITEM_MILK_HALF + true, // ITEM_FISH + true, // ITEM_BUG + true, // ITEM_BLUE_FIRE + true, // ITEM_POE + true, // ITEM_BIG_POE + true, // ITEM_SPRING_WATER + true, // ITEM_HOT_SPRING_WATER + true, // ITEM_ZORA_EGG + true, // ITEM_GOLD_DUST + true, // ITEM_MUSHROOM + true, // ITEM_SEAHORSE + true, // ITEM_CHATEAU + true, // ITEM_HYLIAN_LOACH + true, // ITEM_OBABA_DRINK + true, // ITEM_MOONS_TEAR + true, // ITEM_DEED_LAND + true, // ITEM_DEED_SWAMP + true, // ITEM_DEED_MOUNTAIN + true, // ITEM_DEED_OCEAN + true, // ITEM_ROOM_KEY + true, // ITEM_LETTER_MAMA + true, // ITEM_LETTER_TO_KAFEI + true, // ITEM_PENDANT_OF_MEMORIES + true, // ITEM_TINGLE_MAP + true, // ITEM_MASK_DEKU + true, // ITEM_MASK_GORON + true, // ITEM_MASK_ZORA + true, // ITEM_MASK_FIERCE_DEITY + true, // ITEM_MASK_TRUTH + true, // ITEM_MASK_KAFEIS_MASK + true, // ITEM_MASK_ALL_NIGHT + true, // ITEM_MASK_BUNNY + true, // ITEM_MASK_KEATON + true, // ITEM_MASK_GARO + true, // ITEM_MASK_ROMANI + true, // ITEM_MASK_CIRCUS_LEADER + true, // ITEM_MASK_POSTMAN + true, // ITEM_MASK_COUPLE + true, // ITEM_MASK_GREAT_FAIRY + true, // ITEM_MASK_GIBDO + true, // ITEM_MASK_DON_GERO + true, // ITEM_MASK_KAMARO + true, // ITEM_MASK_CAPTAIN + true, // ITEM_MASK_STONE + true, // ITEM_MASK_BREMEN + true, // ITEM_MASK_BLAST + true, // ITEM_MASK_SCENTS + true, // ITEM_MASK_GIANT + true, // ITEM_BOW_FIRE + true, // ITEM_BOW_ICE + true, // ITEM_BOW_LIGHT + false, // ITEM_SWORD_KOKIRI + false, // ITEM_SWORD_RAZOR + false, // ITEM_SWORD_GILDED + false, // ITEM_SWORD_DEITY + false, // ITEM_SHIELD_HERO + false, // ITEM_SHIELD_MIRROR + false, // ITEM_QUIVER_30 + false, // ITEM_QUIVER_40 + false, // ITEM_QUIVER_50 + false, // ITEM_BOMB_BAG_20 + false, // ITEM_BOMB_BAG_30 + false, // ITEM_BOMB_BAG_40 + false, // ITEM_WALLET_DEFAULT + false, // ITEM_WALLET_ADULT + false, // ITEM_WALLET_GIANT + false, // ITEM_FISHING_ROD + false, // ITEM_REMAINS_ODOLWA + false, // ITEM_REMAINS_GOHT + false, // ITEM_REMAINS_GYORG + false, // ITEM_REMAINS_TWINMOLD + false, // ITEM_SONG_SONATA + false, // ITEM_SONG_LULLABY + false, // ITEM_SONG_NOVA + false, // ITEM_SONG_ELEGY + false, // ITEM_SONG_OATH + false, // ITEM_SONG_SARIA + false, // ITEM_SONG_TIME + false, // ITEM_SONG_HEALING + false, // ITEM_SONG_EPONA + false, // ITEM_SONG_SOARING + false, // ITEM_SONG_STORMS + false, // ITEM_SONG_SUN + false, // ITEM_BOMBERS_NOTEBOOK + false, // ITEM_SKULL_TOKEN + false, // ITEM_HEART_CONTAINER + false, // ITEM_HEART_PIECE + false, // ITEM_71 + }, +}; diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c index acacfcd15..4c0529012 100644 --- a/src/code/z_skelanime.c +++ b/src/code/z_skelanime.c @@ -1187,8 +1187,9 @@ void AnimationContext_MoveActor(PlayState* play, AnimationEntryData* data) { void AnimationContext_Update(PlayState* play, AnimationContext* animationCtx) { AnimationEntry* entry = animationCtx->entries; - for (; animationCtx->animationCount != 0; entry++, animationCtx->animationCount--) { + for (; animationCtx->animationCount != 0; animationCtx->animationCount--) { sAnimationLoadDone[entry->type](play, &entry->data); + entry++; } sAnimQueueFlags = 1; -- cgit v1.2.3