From 37058e1047f5fd7bb5da194afb36c98221b50bdf Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Sat, 14 Jun 2025 20:56:56 +0000 Subject: [PATCH] Heart Chest texture from 2ship --- .../gHealthTreasureChestFrontTex.rgb5a1.png | Bin 0 -> 5338 bytes ...ealthTreasureChestSideAndTopTex.rgb5a1.png | Bin 0 -> 2747 bytes soh/assets/soh_assets.h | 6 +++++ .../Enhancements/item-tables/ItemTableTypes.h | 11 ++++----- .../Enhancements/randomizer/ShuffleCrates.cpp | 14 ++++-------- .../Enhancements/randomizer/ShuffleGrass.cpp | 16 ++++--------- .../Enhancements/randomizer/hook_handlers.cpp | 1 + soh/soh/Enhancements/randomizer/item_list.cpp | 10 ++++----- soh/soh/OTRGlobals.cpp | 8 +++---- soh/src/overlays/actors/ovl_En_Box/z_en_box.c | 21 ++++++++++++++++++ 10 files changed, 51 insertions(+), 36 deletions(-) create mode 100644 soh/assets/custom/objects/object_box/gHealthTreasureChestFrontTex.rgb5a1.png create mode 100644 soh/assets/custom/objects/object_box/gHealthTreasureChestSideAndTopTex.rgb5a1.png diff --git a/soh/assets/custom/objects/object_box/gHealthTreasureChestFrontTex.rgb5a1.png b/soh/assets/custom/objects/object_box/gHealthTreasureChestFrontTex.rgb5a1.png new file mode 100644 index 0000000000000000000000000000000000000000..2ecb69a1404e6d225efd632d3d3040f12106018f GIT binary patch literal 5338 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 literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_box/gHealthTreasureChestSideAndTopTex.rgb5a1.png b/soh/assets/custom/objects/object_box/gHealthTreasureChestSideAndTopTex.rgb5a1.png new file mode 100644 index 0000000000000000000000000000000000000000..76d53be1e23b83e267b6635eef5bf13cad848549 GIT binary patch literal 2747 zcmV;s3PkmZP)YAX9X8WNB|8RBvx=!KdMT000Us zNkl1w*bAW*iUkElS}iqcGo8%No|%34_V>M~b@bx> zX0%={SSU4yGTw`Bs)G(H-5TJih} z-Q7o9iYdXb;NKt5V%2;ElY{|j#3HQ$ySYx=nwZ+D`V%2usx_ghDGlf=E zg`q48QVd9K7#Eh#J6h)ud!Kqc4}+(8#UJtdD>pI9;A3P|l{BjrMhT`HTc89IXje<3 z>uGz(!Tr1BoB+vuJYsuu4k;77!&pmjJt;*Z5MzWaNJ5ZuW>MGc0E9pY$(y3(vv2=A z-t~|&-gQLhFonSsCBb*tQAPBToC00F;`nUA)^r1;MvzD;QdVP%szL}sUiZ3QEU4=m zfDj{#)sm1i;_=V?>`(zAcvH6A{P+#pzQwyhOp&emoSYIldW4V|Q=qga1HSKAE|<9A zP|BdBpe*e$xY8iBq?$|tN$>&JwRqQaR<9s~H3eet(?64i7%<>QIOXQcpFjvjSy*BS zSZfK+p$o%kx`D9;!8yo@X0?2X7sYrAWKs;creU;k4s8q}214IKX83*s=n%S&u5A(f zufLNYO#QPbw|U{|=kUREyf|gCTA`F;b2?-1;tpkD*qlx2oM-#uMf#>eD2eYKAn3Xd zTNIE%SxYsZ02yscg6nX7kMCPZnGCGD7V-G&@8kyv_}tYtC1zHNqvSefnjM4}pX}b<(G}aU-q43eucHO!KYpnms(Jih&d!1!db8!DIDT9)d zRnzk5#S18T8)^DDy%ky6xZJ`kO6^2Dao>~5&NHdJ2!`Sm_54Bjkx5KFTILF&^brbH3%v3 z!4pHIEK7U{ESup!```#6;DaN_Oyhf|)r1@qWogJckz&SsM;AO&C}Ij|DM5f13bFI_ z^Z5Z;xF5YsWyYkGNI5c}jHrx32&k%(w&~DD5mO?kOz$01u30ld${D2%A$Wv<7z4cz z#2ArkAULfgg(*-{;GFyM03K;q>|EI8@Z^{-_Uvt6V0U{HEfq!^l#<*#IiV^G+Ro8; z9SMOk1$A5FqlW}a8+>r|ZYX_BiPp6kWk5mGv`niCK}J0J`a5}f=N9wFpQ8MaZ*%q0 zJx=N~VoY4#KF@4iF)l5qXJ_~j(NZuOjR+|dlc(*6mMrUrm@-ldQp!j<^ttN?`c+aO zr6j~i&WTBBnOckZ$S-~_OKnhvW%BK>b9rZ%-g%@D*rK2^nw;~%p5!&13hJi8mL(xZ zy!Uk8lXIjp6=*>UnSMPZE<}9rNU1PdAq6~k{ygVq8;IwB={K?}235m9ewAmQdMPwo_dz)c#Kq%umAJ6h%s_y=MiE`94(FsIijV)nu4b7&`Q#}9x{x|5j*EL zSv55=B@T~Hn9pX2PyFVWveX6ISkyoK1wXO>B-65FJ{hC6HD5Vy?O{-&UsqbvTRxwizPmKobxoU<@9XDs&Clay~1oV;lFo&4+E$P=i@*FbPwziL(>A2FcCX5E*dYY0>V_CR zN*kmAEd{o)w9Zp^E%#1ODGN(g6lkp&wDLgDWEfQio6|WV28^~8#vnfZJAaTLY&7!k z{)9JP{y2qH9G{(X`TPZXpSXQ=moB6=rFynEwg|}+W9Hm!i$vyRdB%sw$4CT5Nj5h& z&{`8hpzRvw;|Uw%DN0JZ5D6&}QbfG*r9a9KHk#dU{xz?C>?b)nJA(}8=NtH#S++d~ zCksYpxfY?4>1cv23yu~iI3MYIMP zKcDaX+qc+x?j>Hn_g#MKqt`h+K4Mf9Y;Md^MZx!Pf582d1@qaQm=aCjF)B-}wd*Bz z*rt2uY5JbSlVg@m&A1#f8&^z9OWQlDqM#~AELJNb4C3Vf(($X~%*_{Gq_mb8Bcq}~ zD#hW+lH=8qh@kBqg()b@lG2tKApya`@ewX2e2TPPPbM?6mdXtC()0~6By?f1+F(pc z&YAxK;$MIJ`#uqK0000EWmrjOO-%qQ00008000000002eQ(ITEM00_SOH_GIVE_ITEM_ENTRY | 0x8000)); } diff --git a/soh/soh/Enhancements/randomizer/item_list.cpp b/soh/soh/Enhancements/randomizer/item_list.cpp index 56001db48..5be32a54e 100644 --- a/soh/soh/Enhancements/randomizer/item_list.cpp +++ b/soh/soh/Enhancements/randomizer/item_list.cpp @@ -41,7 +41,7 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_GERUDO_MEMBERSHIP_CARD] = Item(RG_GERUDO_MEMBERSHIP_CARD, Text{ "Gerudo Membership Card", "Carte Gerudo", "Gerudo-Pass" }, ITEMTYPE_ITEM, GI_GERUDO_CARD, true, LOGIC_GERUDO_CARD, RHT_GERUDO_MEMBERSHIP_CARD, ITEM_GERUDO_CARD, OBJECT_GI_GERUDO, GID_GERUDO_CARD, 0x7B, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); itemTable[RG_MAGIC_BEAN] = Item(RG_MAGIC_BEAN, Text{ "Magic Bean", "Haricots Magiques", "Wundererbse" }, ITEMTYPE_ITEM, GI_BEAN, true, LOGIC_MAGIC_BEAN, RHT_MAGIC_BEAN, ITEM_BEAN, OBJECT_GI_BEAN, GID_BEAN, 0x48, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, MOD_NONE); itemTable[RG_MAGIC_BEAN_PACK] = Item(RG_MAGIC_BEAN_PACK, Text{ "Magic Bean Pack", "Paquet de Haricots Magiques", "Wundererbsen-Packung" }, ITEMTYPE_ITEM, RG_MAGIC_BEAN_PACK, true, LOGIC_MAGIC_BEAN, RHT_MAGIC_BEAN_PACK, RG_MAGIC_BEAN_PACK, OBJECT_GI_BEAN, GID_BEAN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_DOUBLE_DEFENSE] = Item(RG_DOUBLE_DEFENSE, Text{ "Double Defense", "Double Défence", "Doppelte Verteidigung" }, ITEMTYPE_ITEM, RG_DOUBLE_DEFENSE, true, LOGIC_DOUBLE_DEFENSE, RHT_DOUBLE_DEFENSE, RG_DOUBLE_DEFENSE, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xE9, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + itemTable[RG_DOUBLE_DEFENSE] = Item(RG_DOUBLE_DEFENSE, Text{ "Double Defense", "Double Défence", "Doppelte Verteidigung" }, ITEMTYPE_ITEM, RG_DOUBLE_DEFENSE, true, LOGIC_DOUBLE_DEFENSE, RHT_DOUBLE_DEFENSE, RG_DOUBLE_DEFENSE, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xE9, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_RANDOMIZER); itemTable[RG_DOUBLE_DEFENSE].SetCustomDrawFunc(Randomizer_DrawDoubleDefense); // Trade Quest Items itemTable[RG_WEIRD_EGG] = Item(RG_WEIRD_EGG, Text{ "Weird Egg", "Oeuf Curieux", "Seltsames Ei" }, ITEMTYPE_ITEM, GI_WEIRD_EGG, true, LOGIC_WEIRD_EGG, RHT_WEIRD_EGG, ITEM_WEIRD_EGG, OBJECT_GI_EGG, GID_EGG, 0x9A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); @@ -259,8 +259,8 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_RED_RUPEE] = Item(RG_RED_RUPEE, Text{ "Red Rupee", "Rubis Rouge", "Roter Rubin" }, ITEMTYPE_ITEM, GI_RUPEE_RED, false, LOGIC_NONE, RHT_RED_RUPEE, ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0xF0, 0x02, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); itemTable[RG_PURPLE_RUPEE] = Item(RG_PURPLE_RUPEE, Text{ "Purple Rupee", "Rubis Pourpre", "Violetter Rubin" }, ITEMTYPE_ITEM, GI_RUPEE_PURPLE, false, LOGIC_NONE, RHT_PURPLE_RUPEE, ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0xF1, 0x14, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE); itemTable[RG_HUGE_RUPEE] = Item(RG_HUGE_RUPEE, Text{ "Huge Rupee", "Énorme Rubis", "Riesiger Rubin" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, false, LOGIC_NONE, RHT_HUGE_RUPEE, ITEM_RUPEE_GOLD, OBJECT_GI_RUPY, GID_RUPEE_GOLD, 0xF2, 0x13, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_PIECE_OF_HEART] = Item(RG_PIECE_OF_HEART, Text{ "Piece of Heart", "Quart de Coeur", "Herzstück" }, ITEMTYPE_ITEM, GI_HEART_PIECE, true, LOGIC_PIECE_OF_HEART, RHT_PIECE_OF_HEART, ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC2, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); - itemTable[RG_HEART_CONTAINER] = Item(RG_HEART_CONTAINER, Text{ "Heart Container", "Réceptacle de Coeur", "Herzcontainer" }, ITEMTYPE_ITEM, GI_HEART_CONTAINER_2, true, LOGIC_HEART_CONTAINER, RHT_HEART_CONTAINER, ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); + itemTable[RG_PIECE_OF_HEART] = Item(RG_PIECE_OF_HEART, Text{ "Piece of Heart", "Quart de Coeur", "Herzstück" }, ITEMTYPE_ITEM, GI_HEART_PIECE, true, LOGIC_PIECE_OF_HEART, RHT_PIECE_OF_HEART, ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC2, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_NONE); + itemTable[RG_HEART_CONTAINER] = Item(RG_HEART_CONTAINER, Text{ "Heart Container", "Réceptacle de Coeur", "Herzcontainer" }, ITEMTYPE_ITEM, GI_HEART_CONTAINER_2, true, LOGIC_HEART_CONTAINER, RHT_HEART_CONTAINER, ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_NONE); itemTable[RG_ICE_TRAP] = Item(RG_ICE_TRAP, Text{ "Ice Trap", "Piège de Glace", "Eisfalle" }, ITEMTYPE_ITEM, RG_ICE_TRAP, false, LOGIC_NONE, RHT_ICE_TRAP, RG_ICE_TRAP, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_MILK] = Item(RG_MILK, Text{ "Milk", "Lait", "Milch" }, ITEMTYPE_ITEM, GI_MILK, false, LOGIC_NONE, RHT_NONE, ITEM_MILK, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); itemTable[RG_FISH] = Item(RG_FISH, Text{ "Fish", "Poisson", "Fisch" }, ITEMTYPE_ITEM, GI_FISH, false, LOGIC_NONE, RHT_NONE, ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x47, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); @@ -283,10 +283,10 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_GREEN_POTION_REFILL] = Item(RG_GREEN_POTION_REFILL, Text{ "Green Potion Refill", "Recharge de Potion Verte", "Nachfüllpackung des grünen Elixiers" }, ITEMTYPE_REFILL, GI_POTION_GREEN, false, LOGIC_NONE, RHT_NONE, ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x44, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); itemTable[RG_BLUE_POTION_REFILL] = Item(RG_BLUE_POTION_REFILL, Text{ "Blue Potion Refill", "Recharge de Potion Bleue", "Nachfüllpackung des blauen Elixiers" }, ITEMTYPE_REFILL, GI_POTION_BLUE, false, LOGIC_NONE, RHT_NONE, ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x45, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE); // Treasure Game - itemTable[RG_TREASURE_GAME_HEART] = Item(RG_TREASURE_GAME_HEART, Text{ "Piece of Heart (WINNER)", "Quart de Coeur (Chasse-aux-Trésors)", "Herzstück (Schatztruhenminispiel)" }, ITEMTYPE_ITEM, GI_HEART_PIECE_WIN, true, LOGIC_PIECE_OF_HEART, RHT_TREASURE_GAME_HEART, ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE); + itemTable[RG_TREASURE_GAME_HEART] = Item(RG_TREASURE_GAME_HEART, Text{ "Piece of Heart (WINNER)", "Quart de Coeur (Chasse-aux-Trésors)", "Herzstück (Schatztruhenminispiel)" }, ITEMTYPE_ITEM, GI_HEART_PIECE_WIN, true, LOGIC_PIECE_OF_HEART, RHT_TREASURE_GAME_HEART, ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_NONE); itemTable[RG_TREASURE_GAME_GREEN_RUPEE] = Item(RG_TREASURE_GAME_GREEN_RUPEE, Text{ "Green Rupee (LOSER)", "Rubis Vert (Chasse-aux-Trésors)", "Grüner Rubin (Schatztruhenminispiel)" }, ITEMTYPE_ITEM, GI_RUPEE_GREEN_LOSE, false, LOGIC_NONE, RHT_TREASURE_GAME_GREEN_RUPEE, ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0xF4, 0x00, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, MOD_NONE); // Shop - itemTable[RG_BUY_DEKU_NUTS_5] = Item(RG_BUY_DEKU_NUTS_5, Text{ "Buy Deku Nut (5)", "Acheter: Noix Mojo (5)", "Deku-Nuß kaufen (5)" }, ITEMTYPE_SHOP, GI_NUTS_5_2, true, LOGIC_BUY_NUTS, RHT_DEKU_NUTS_5, ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 15); + itemTable[RG_BUY_DEKU_NUTS_5] = Item(RG_BUY_DEKU_NUTS_5, Text{ "Buy Deku Nut (5)", "Acheter: Noix Mojo (5)", "Deku-Nuß kaufen (5)" }, ITEMTYPE_SHOP, GI_NUTS_5_2, true, LOGIC_BUY_NUTS, RHT_DEKU_NUTS_5, ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 15); itemTable[RG_BUY_ARROWS_30] = Item(RG_BUY_ARROWS_30, Text{ "Buy Arrows (30)", "Acheter: Flèches (30)", "Pfeile kaufen (30)" }, ITEMTYPE_SHOP, GI_ARROWS_MEDIUM, true, LOGIC_BUY_ARROW, RHT_ARROWS_30, ITEM_ARROWS_MEDIUM, OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, 0xE6, 0x49, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 60); itemTable[RG_BUY_ARROWS_50] = Item(RG_BUY_ARROWS_50, Text{ "Buy Arrows (50)", "Acheter: Flèches (50)", "Pfeile kaufen (50)" }, ITEMTYPE_SHOP, GI_ARROWS_LARGE, true, LOGIC_BUY_ARROW, RHT_ARROWS_30, ITEM_ARROWS_LARGE, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0xE6, 0x4A, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 90); itemTable[RG_BUY_BOMBS_525] = Item(RG_BUY_BOMBS_525, Text{ "Buy Bombs (5) [25]", "Acheter: Bombes (5) [25]", "Bomben kaufen (5) [25]" }, ITEMTYPE_SHOP, GI_BOMBS_5, true, LOGIC_BUY_BOMB, RHT_BOMBS_5, ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 25); diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 9ac03b48e..1ccbe514a 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -682,8 +682,8 @@ extern "C" void VanillaItemTable_Init() { GET_ITEM(ITEM_GERUDO_CARD, OBJECT_GI_GERUDO, GID_GERUDO_CARD, 0x7B, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_GERUDO_CARD), GET_ITEM(ITEM_OCARINA_FAIRY, OBJECT_GI_OCARINA_0, GID_OCARINA_FAIRY, 0x4A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_OCARINA_FAIRY), GET_ITEM(ITEM_SEEDS, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_SEEDS_5), - GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_HEART_CONTAINER), - GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC2, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_HEART_PIECE), + GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_NONE, GI_HEART_CONTAINER), + GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC2, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_NONE, GI_HEART_PIECE), GET_ITEM(ITEM_KEY_BOSS, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, 0xC7, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_NONE, GI_KEY_BOSS), GET_ITEM(ITEM_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, 0x67, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_COMPASS), GET_ITEM(ITEM_DUNGEON_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, 0x66, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_MAP), @@ -700,7 +700,7 @@ extern "C" void VanillaItemTable_Init() { GET_ITEM(ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0x6F, 0x00, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_RUPEE_GREEN), GET_ITEM(ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0xCC, 0x01, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_RUPEE_BLUE), GET_ITEM(ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0xF0, 0x02, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_RUPEE_RED), - GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_HEART_CONTAINER_2), + GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_NONE, GI_HEART_CONTAINER_2), GET_ITEM(ITEM_MILK, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, GI_MILK), GET_ITEM(ITEM_MASK_GORON, OBJECT_GI_GOLONMASK, GID_MASK_GORON, 0x14, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_MASK_GORON), GET_ITEM(ITEM_MASK_ZORA, OBJECT_GI_ZORAMASK, GID_MASK_ZORA, 0x15, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_MASK_ZORA), @@ -739,7 +739,7 @@ extern "C" void VanillaItemTable_Init() { GET_ITEM(ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0xF5, 0x01, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_RUPEE_BLUE_LOSE), GET_ITEM(ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0xF6, 0x02, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_RUPEE_RED_LOSE), GET_ITEM(ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0xF7, 0x14, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_RUPEE_PURPLE_LOSE), - GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_HEART_PIECE_WIN), + GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_NONE, GI_HEART_PIECE_WIN), GET_ITEM(ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x90, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, GI_STICK_UPGRADE_20), GET_ITEM(ITEM_STICK_UPGRADE_30, OBJECT_GI_STICK, GID_STICK, 0x91, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, GI_STICK_UPGRADE_30), GET_ITEM(ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0xA7, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, GI_NUT_UPGRADE_30), diff --git a/soh/src/overlays/actors/ovl_En_Box/z_en_box.c b/soh/src/overlays/actors/ovl_En_Box/z_en_box.c index 9a3a8fb77..935149532 100644 --- a/soh/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/soh/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -84,11 +84,13 @@ Gfx gGoldTreasureChestChestSideAndLidDL[116] = { 0 }; Gfx gKeyTreasureChestChestSideAndLidDL[116] = { 0 }; Gfx gChristmasRedTreasureChestChestSideAndLidDL[116] = { 0 }; Gfx gChristmasGreenTreasureChestChestSideAndLidDL[116] = { 0 }; +Gfx gHealthTreasureChestChestSideAndLidDL[116] = { 0 }; Gfx gSkullTreasureChestChestFrontDL[128] = { 0 }; Gfx gGoldTreasureChestChestFrontDL[128] = { 0 }; Gfx gKeyTreasureChestChestFrontDL[128] = { 0 }; Gfx gChristmasRedTreasureChestChestFrontDL[128] = { 0 }; Gfx gChristmasGreenTreasureChestChestFrontDL[128] = { 0 }; +Gfx gHealthTreasureChestChestFrontDL[128] = { 0 }; u8 hasCreatedRandoChestTextures = 0; u8 hasCustomChestDLs = 0; u8 hasChristmasChestTexturesAvailable = 0; @@ -655,6 +657,10 @@ void EnBox_UpdateSizeAndTexture(EnBox* this, PlayState* play) { this->boxBodyDL = gTreasureChestBossKeyChestFrontDL; this->boxLidDL = gTreasureChestBossKeyChestSideAndTopDL; break; + case ITEM_CATEGORY_HEALTH: + this->boxBodyDL = gHealthTreasureChestChestFrontDL; + this->boxLidDL = gHealthTreasureChestChestSideAndLidDL; + break; case ITEM_CATEGORY_LESSER: case ITEM_CATEGORY_JUNK: default: @@ -740,6 +746,8 @@ void EnBox_CreateExtraChestTextures() { gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gChristmasRedTreasureChestSideAndTopTex), gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gChristmasGreenTreasureChestFrontTex), gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gChristmasGreenTreasureChestSideAndTopTex), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gHealthTreasureChestFrontTex), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gHealthTreasureChestSideAndTopTex), }; Gfx gNoOp[] = { gsDPNoOp() }; @@ -752,6 +760,7 @@ void EnBox_CreateExtraChestTextures() { gKeyTreasureChestChestFrontDL[frontIndex] = *frontCmd; gChristmasRedTreasureChestChestFrontDL[frontIndex] = *frontCmd; gChristmasGreenTreasureChestChestFrontDL[frontIndex] = *frontCmd; + gHealthTreasureChestChestFrontDL[frontIndex] = *frontCmd; // Set the second instruction of img OTR hash opcode to noop, since we will replace it with the // OTR filepath opcode below @@ -764,6 +773,7 @@ void EnBox_CreateExtraChestTextures() { gKeyTreasureChestChestFrontDL[frontIndex] = gNoOp[0]; gChristmasRedTreasureChestChestFrontDL[frontIndex] = gNoOp[0]; gChristmasGreenTreasureChestChestFrontDL[frontIndex] = gNoOp[0]; + gHealthTreasureChestChestFrontDL[frontIndex] = gNoOp[0]; } frontIndex++; @@ -774,6 +784,7 @@ void EnBox_CreateExtraChestTextures() { gKeyTreasureChestChestFrontDL[frontIndex] = *frontCmd; gChristmasRedTreasureChestChestFrontDL[frontIndex] = *frontCmd; gChristmasGreenTreasureChestChestFrontDL[frontIndex] = *frontCmd; + gHealthTreasureChestChestFrontDL[frontIndex] = *frontCmd; gSkullTreasureChestChestFrontDL[5] = gTreasureChestChestTextures[0]; gSkullTreasureChestChestFrontDL[23] = gTreasureChestChestTextures[1]; @@ -795,6 +806,10 @@ void EnBox_CreateExtraChestTextures() { gChristmasGreenTreasureChestChestFrontDL[23] = gTreasureChestChestTextures[9]; gChristmasGreenTreasureChestChestFrontDL[37] = gTreasureChestChestTextures[8]; gChristmasGreenTreasureChestChestFrontDL[50] = gTreasureChestChestTextures[9]; + gHealthTreasureChestChestFrontDL[5] = gTreasureChestChestTextures[10]; + gHealthTreasureChestChestFrontDL[23] = gTreasureChestChestTextures[11]; + gHealthTreasureChestChestFrontDL[37] = gTreasureChestChestTextures[10]; + gHealthTreasureChestChestFrontDL[50] = gTreasureChestChestTextures[11]; Gfx* sideCmd = ResourceMgr_LoadGfxByName(gTreasureChestChestSideAndLidDL); int sideIndex = 0; @@ -804,6 +819,7 @@ void EnBox_CreateExtraChestTextures() { gKeyTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; gChristmasRedTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; gChristmasGreenTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; + gHealthTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; // Set the second instruction of img OTR hash opcode to noop, since we will replace it with the // OTR filepath opcode below @@ -816,6 +832,7 @@ void EnBox_CreateExtraChestTextures() { gKeyTreasureChestChestSideAndLidDL[sideIndex] = gNoOp[0]; gChristmasRedTreasureChestChestSideAndLidDL[sideIndex] = gNoOp[0]; gChristmasGreenTreasureChestChestSideAndLidDL[sideIndex] = gNoOp[0]; + gHealthTreasureChestChestSideAndLidDL[sideIndex] = gNoOp[0]; } sideIndex++; @@ -826,6 +843,7 @@ void EnBox_CreateExtraChestTextures() { gKeyTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; gChristmasRedTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; gChristmasGreenTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; + gHealthTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; gSkullTreasureChestChestSideAndLidDL[5] = gTreasureChestChestTextures[0]; gSkullTreasureChestChestSideAndLidDL[29] = gTreasureChestChestTextures[1]; @@ -842,6 +860,9 @@ void EnBox_CreateExtraChestTextures() { gChristmasGreenTreasureChestChestSideAndLidDL[5] = gTreasureChestChestTextures[8]; gChristmasGreenTreasureChestChestSideAndLidDL[29] = gTreasureChestChestTextures[9]; gChristmasGreenTreasureChestChestSideAndLidDL[45] = gTreasureChestChestTextures[8]; + gHealthTreasureChestChestSideAndLidDL[5] = gTreasureChestChestTextures[10]; + gHealthTreasureChestChestSideAndLidDL[29] = gTreasureChestChestTextures[11]; + gHealthTreasureChestChestSideAndLidDL[45] = gTreasureChestChestTextures[10]; ResourceMgr_ListFiles("objects/object_box/gChristmas*", &hasChristmasChestTexturesAvailable); hasCreatedRandoChestTextures = 1;