From e5cc09a96f6096c9b68e1466a90d096162284117 Mon Sep 17 00:00:00 2001 From: Garrett Cox Date: Thu, 20 Oct 2022 21:33:04 -0500 Subject: [PATCH] Chest size and texture matches contents (#1778) * Implement most of chest size and texture matches contents, just need an item table * Add GetItemCategory to getItem tables * Revert changes that tie chest size and texture to randomizer * Support chest size & texture as an enhancement that works on outside of rando * Add gChestSizeAndTextureMatchesContents to rando preset * Prevent gChestSizeAndTextureMatchesContents in chest minigame * Fix for forest temple boss key chest * Add options for texture or size only --- .../gGoldTreasureChestFrontTex.rgb5a1.png | Bin 0 -> 4727 bytes ...gGoldTreasureChestSideAndTopTex.rgb5a1.png | Bin 0 -> 2338 bytes .../gKeyTreasureChestFrontTex.rgb5a1.png | Bin 0 -> 4233 bytes .../gKeyTreasureChestSideAndTopTex.rgb5a1.png | Bin 0 -> 2184 bytes .../gSkullTreasureChestFrontTex.rgb5a1.png | Bin 0 -> 4265 bytes ...SkullTreasureChestSideAndTopTex.rgb5a1.png | Bin 0 -> 1979 bytes .../Enhancements/item-tables/ItemTableTypes.h | 16 +- .../Enhancements/randomizer/randomizer.cpp | 147 +++++----- soh/soh/Enhancements/randomizer/randomizer.h | 2 +- soh/soh/GameMenuBar.cpp | 16 ++ soh/soh/OTRGlobals.cpp | 250 +++++++++--------- soh/soh/OTRGlobals.h | 1 + .../ovl_Bg_Mori_Hineri/z_bg_mori_hineri.c | 39 +-- soh/src/overlays/actors/ovl_En_Box/z_en_box.c | 188 +++++++++++-- soh/src/overlays/actors/ovl_En_Box/z_en_box.h | 2 + 15 files changed, 412 insertions(+), 249 deletions(-) create mode 100644 OTRExporter/assets/objects/object_box/gGoldTreasureChestFrontTex.rgb5a1.png create mode 100644 OTRExporter/assets/objects/object_box/gGoldTreasureChestSideAndTopTex.rgb5a1.png create mode 100644 OTRExporter/assets/objects/object_box/gKeyTreasureChestFrontTex.rgb5a1.png create mode 100644 OTRExporter/assets/objects/object_box/gKeyTreasureChestSideAndTopTex.rgb5a1.png create mode 100644 OTRExporter/assets/objects/object_box/gSkullTreasureChestFrontTex.rgb5a1.png create mode 100644 OTRExporter/assets/objects/object_box/gSkullTreasureChestSideAndTopTex.rgb5a1.png diff --git a/OTRExporter/assets/objects/object_box/gGoldTreasureChestFrontTex.rgb5a1.png b/OTRExporter/assets/objects/object_box/gGoldTreasureChestFrontTex.rgb5a1.png new file mode 100644 index 0000000000000000000000000000000000000000..d63811e9c8e2499857682632fb907852a7c4cdfa GIT binary patch literal 4727 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 FV1jt(8%O{E literal 0 HcmV?d00001 diff --git a/OTRExporter/assets/objects/object_box/gGoldTreasureChestSideAndTopTex.rgb5a1.png b/OTRExporter/assets/objects/object_box/gGoldTreasureChestSideAndTopTex.rgb5a1.png new file mode 100644 index 0000000000000000000000000000000000000000..b2e914b4949ab3dfd798cea12a6aa6b7861c64f6 GIT binary patch literal 2338 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 literal 0 HcmV?d00001 diff --git a/OTRExporter/assets/objects/object_box/gKeyTreasureChestSideAndTopTex.rgb5a1.png b/OTRExporter/assets/objects/object_box/gKeyTreasureChestSideAndTopTex.rgb5a1.png new file mode 100644 index 0000000000000000000000000000000000000000..8d320f250aeadcc995df6067173f071c068f054f GIT binary patch literal 2184 zcmV;32zU31P)&9GPgm7`EeHGbx!s8a3)W;)wQKEft@VB1R&T%kwrH)f*6zbOcPDPv zj4>Ev&|0IE;^wKfQfsA@Le80-GbyDzakG|lrj)Y(Mgu6N_Mx@D6E|zO-?{yW$fu&# z`hTqf*xMT`rTFcyUI(QRsdyhigq#y1V64Gf%P-&j4WE2&HvRDrULlu^0u(UCh;t4^ z&_<(mL$KBgfO_Yhcf=U8huK=ouiy9u^I6By;Q={CrfFieT9I>M7)KtgFPNstTfh6m z9?I8VeVLpRi^ZJ7gB2I+hm2!HL>Q+L=K|Ima?U8F5fO~hj}Ta|*E~Ew=d({f$@hQs zGrsi9GdO4Q&VYb*7OfPiU@!E$A?fW#uzFPr%08G)*5FFRVpIvN+^gx z@DBCvyYI?ovtc|x=h@AM-=CiHh0{}xo_dNOeg75iogAUH1}fGVQc8pnxE@9>HkbVR zt>5wT3(v8f_jDnUVq|r&B7~0n_wRFjd_q6#n8uNu3o#~2$$((3ZwO2uf6TMnEyL4K z^VJVN;1AAm{JGDejY1pE#lp8Pm;2`Y*4MvA@Se-}66@ke9$@&_OA=X>{f{PD+8z;dzR)Y5P~P?La7C%G~4YpQZq3o7Rx0(_81Lt$SD(3L@7nd8E*~F?+}=so?^V`-LB({ zr>7jAp7O(2zs+j7;OyfwoOg&+taUi=&`P6}km7`M4(|faIS!T!Qi?e5nT8Q`}&h3X(A*M*mh3jFY)=El=m@-q!Xr&)b!EM6%&6_{xi=Tgr<#NV2wjair&|1-V z9mY8{aQhOSEGFO*dj*br5Y&J}jAhqH`zzl|yz9;k@B^Ln3aYQLa*L9R~3jwV) zKmX}#%=;d#C$__YwH9Lx)&~UP@_HcWOBCRItG~6D`Fy_HSkr|-6=}7X$~cZVZyBc% zjiT>bxpL0L7_ql$cDo%gN^^ZZP-{U%aL%>_m7<@`2+om9q2$bVd(AXW7^8_Pk#nI7 zo?#g1`koLvE-p40>(N@1a^dRwg2UATwN{k6RRXOwhX+gUog4v*7^nRS8+$222mok- zuJ4dqDYamX!TUhhYn-u!uE#oyRH2WFI1Q~Y0IM}u+bc>bjSFt;z zYbBS0Qs8WZuJ1Yop(;3Bt(am&D@{xh4U|%d(}=YWYYjfk$SF}uLv@-WT^I1)wG!-= zPuNSUNZnIy-N|Q)5$8Npi~!`Eu{#|pJCvGaYsPUxq@t9f)`q0_eqTC~c9=T|TwPre zoY`%jP)d<=CFP7UdfzAYwn7@qG)*|?n}UX>|4J#GGbp90Q^cCagg2!~DN}{JJ@EGr zKf*ar@RpP^&e?YIT(HLM63VR)^rP>bZAovhhjz-+`Xa>yyZwzZZF-#Dn-~%9PQjo4 z@>jm|((|kqbAX+W!!V45;4#J^B9vO8RmhrP4WD6YqWE_BUqA*2{V zDU{aK(vnQ6ojQcTG(}1&jN`aRU>pa!uBVjxX;b>@%P*oebUx5`JqpEQK1V4o2_f+B|NMv5V!=3#EEjXM(mYtN zG5Qm7{F5Jkj~p{8HusZj!DvfLiOuGcS>Mxl9m6m*OD%%$I)e9%(}Y4;Ef#z2(7Q%E zJXmpjc-Rc9RJ78J)2<}95m>L+oPOq*m?9$FA|1_>PdN^+4(t( z`HWKA{UA;gRiNtvo%ammNUens0@gbE*^F@*@A8229<41(Tci{~aeckT7)Qz(+1&wB zZobc1Llt&orr2JOh}tn`g({V+>k(@$DQBEDY_0}MsZ23ZYrb28;2a@1j5Z_$&>S5d z>=GGRt(F+w#;lgYxbuW5rDoZ3#%R-SL#Ev~wb58(Sg$wqoyS>2%7w3eGgpC0000< KMNUMnLSTY;0y@C} literal 0 HcmV?d00001 diff --git a/OTRExporter/assets/objects/object_box/gSkullTreasureChestFrontTex.rgb5a1.png b/OTRExporter/assets/objects/object_box/gSkullTreasureChestFrontTex.rgb5a1.png new file mode 100644 index 0000000000000000000000000000000000000000..00f0b39e44bfeb54234336642b70db3e275bb799 GIT binary patch literal 4265 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 LNkvXXu0mjfHpe@` literal 0 HcmV?d00001 diff --git a/OTRExporter/assets/objects/object_box/gSkullTreasureChestSideAndTopTex.rgb5a1.png b/OTRExporter/assets/objects/object_box/gSkullTreasureChestSideAndTopTex.rgb5a1.png new file mode 100644 index 0000000000000000000000000000000000000000..0a09e2b6f160a1971f004210f0dcd161e9e7bf4e GIT binary patch literal 1979 zcmV;s2SoUZP)Zph zz(4-{JKq2GAK34&sI{`&?U<$wpMU;}>+5SCA0N58x+3R+Pe1*LkN@%kKltT`ynOi% zYKDlAlCdl+@{^zbJZg0!0(VEXZ@SEEw_8MnWm#F48GveO0EX04K^#{;FVm}PPv*lu@}Qkmxy zX2#v!9j{)!;_jQ@;^A;04+9Z#DQp}kYIW3%aU3vHA|Mc6e&Y^RB_deYg1a+KBW4M` zzrSZ32h@ze|LM0Z^NDesnCBBBf{2jw!2SIj_WM2aJmcZ4%fjh&WVhR~EHmRcvMy~@ z5kUl$QnCaNzp; z-)1`vmr{cun}I;7j*1ZBd!U1Vx*=;8Psym91MNn0$J0i4B3e@UI??^fxj~tIj zh9UDp-(bVYGA}IiN@wKdWvU=T5J+$Bc@z-=5m?f8GBZ>a(Kd54Lj+PvXi`*!WnD?v z*H;{mN2X~a`2#O*HmE70+U6-j_2|4UxI=ibmKA?%o zNI7+22Wgrna?Ug?7}GT1?#y#R1%5EWFU zvmp?njYgE}wSn;A;eqXT$GWbRrBK}=g0)m28UQ^|vreNxqMcMl(WFenz*1JmoEgVV zN=5`-0UhmNIJ4k*JT=z5cyY^DUw*|jjx6gF%UU|$o2aNX28bxNRLWW!E~+CUlu{cc zr2+D2g<)P$Y3P5ZaZ|>#mJkiR>7So`#P!WB^RjTLC&tcU(WYe9XV;1m%&gN>8a|{6 zN*8{JU|C8pP~XBxu&gVp2?$Ku&(p_${ebs=^&uikmcqknrWB`^f~s=8-!w-omGD4h zrB)}UW~)QCWDV23yFKD0F6ROI7w}Ge#!u4)K-hKDGk%y6C7&*N9 z7gJ6bWm9ce1YdWM{(i>CS$0LFWeOVlJ)R}^EE!Fdn!;I9($)2gO9EaSCxN=^HCnleIQX1$C+MM={%Qc5M~MA{5&$4pEEyUoD7 zG}LaV0T0J4;kDw?^xi!X;OVq9dI~IS?VB{w*-s-m>xGilYsXL`s*^;7vbOxUt`4Ix zW@BC|0c@s$>fWzHsZKIw$eCnHsg-fe3`1_6NZQ=6t7&xX1g%5sS}AL7*~6W5I?W8@ zfT}VL#%4%8GpInO3F$tO={0{qnlDak44&O#hV=02*yD%d$#U044GP; zX&R6rF$}3m=v$n(WaMPzln8<$50?`}w3CVT%}b?tMQHkeMvzx;Z1N`EyUoa2Ycr#p zn_KShUvp#NJ>h^-s^cr@S~*IirAMIh)EBEvyWQp$L73{V8s797HzQrjuk=WNv}7p(JwNVD#y$InsiYcG+O3_BjYHnU1+8bt)# z?S}o;wrw1s$=IcIQMj|~opZgOgGNt5XR_B?iReBNJxhAvM7Q(C7zs#29w=pPAQ}US zXQ8MSsy~Z~s*sXmDim?dqyjf?Erq^pW&9CMtxq)N_vWDn=f)`vfi6)Jk;0Dy1}e_Galij?Iowrdx`BbWnR!N;A^o@S1Vl zpsKunec;XG@j2z5JxHFTCubn_q$ET~{P~&Ax&CKGMb8{;AvXGRJ({Jz{qZ+^?-#%4 z?(REGLt-=Lu5i-X)4+F*<itemLocations[randomizerCheck]; } -GetItemEntry Randomizer::GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId) { +GetItemEntry Randomizer::GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId, bool checkObtainability) { RandomizerGetData rgData = this->itemLocations[GetCheckFromActor(actorId, sceneNum, actorParams)]; - return GetItemEntryFromRGData(rgData, ogItemId); + return GetItemEntryFromRGData(rgData, ogItemId, checkObtainability); } ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerCheck(RandomizerCheck randomizerCheck) { @@ -3877,7 +3877,6 @@ void DrawRandoEditor(bool& open) { const char* randoHintClarity[3] = { "Obscure", "Ambiguous", "Clear" }; const char* randoHintDistribution[4] = { "Useless", "Balanced", "Strong", "Very Strong" }; const char* randoStartingTime[2] = { "Day", "Night" }; - const char* randoChestSizeAndColor[2] = { "Vanilla", "Match contents" }; const char* randoRandomTrapDamage[3] = { "Basic", "Advanced", "Off" }; // Item Pool Settings @@ -5399,85 +5398,85 @@ class ExtendedVanillaTableInvalidItemIdException: public std::exception { void InitRandoItemTable() { // These entries have ItemIDs from vanilla, but not GetItemIDs or entries in the old sGetItemTable GetItemEntry extendedVanillaGetItemTable[] = { - GET_ITEM(ITEM_MEDALLION_LIGHT, OBJECT_GI_MEDAL, GID_MEDALLION_LIGHT, 0x40, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_LIGHT_MEDALLION), - GET_ITEM(ITEM_MEDALLION_FOREST, OBJECT_GI_MEDAL, GID_MEDALLION_FOREST, 0x3E, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_FOREST_MEDALLION), - GET_ITEM(ITEM_MEDALLION_FIRE, OBJECT_GI_MEDAL, GID_MEDALLION_FIRE, 0x3C, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_FIRE_MEDALLION), - GET_ITEM(ITEM_MEDALLION_WATER, OBJECT_GI_MEDAL, GID_MEDALLION_WATER, 0x3D, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_WATER_MEDALLION), - GET_ITEM(ITEM_MEDALLION_SHADOW, OBJECT_GI_MEDAL, GID_MEDALLION_SHADOW, 0x41, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_SHADOW_MEDALLION), - GET_ITEM(ITEM_MEDALLION_SPIRIT, OBJECT_GI_MEDAL, GID_MEDALLION_SPIRIT, 0x3F, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_SPIRIT_MEDALLION), + GET_ITEM(ITEM_MEDALLION_LIGHT, OBJECT_GI_MEDAL, GID_MEDALLION_LIGHT, 0x40, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_LIGHT_MEDALLION), + GET_ITEM(ITEM_MEDALLION_FOREST, OBJECT_GI_MEDAL, GID_MEDALLION_FOREST, 0x3E, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_FOREST_MEDALLION), + GET_ITEM(ITEM_MEDALLION_FIRE, OBJECT_GI_MEDAL, GID_MEDALLION_FIRE, 0x3C, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_FIRE_MEDALLION), + GET_ITEM(ITEM_MEDALLION_WATER, OBJECT_GI_MEDAL, GID_MEDALLION_WATER, 0x3D, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_WATER_MEDALLION), + GET_ITEM(ITEM_MEDALLION_SHADOW, OBJECT_GI_MEDAL, GID_MEDALLION_SHADOW, 0x41, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_SHADOW_MEDALLION), + GET_ITEM(ITEM_MEDALLION_SPIRIT, OBJECT_GI_MEDAL, GID_MEDALLION_SPIRIT, 0x3F, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_SPIRIT_MEDALLION), - GET_ITEM(ITEM_KOKIRI_EMERALD, OBJECT_GI_JEWEL, GID_KOKIRI_EMERALD, 0x80, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_KOKIRI_EMERALD), - GET_ITEM(ITEM_GORON_RUBY, OBJECT_GI_JEWEL, GID_GORON_RUBY, 0x81, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_GORON_RUBY), - GET_ITEM(ITEM_ZORA_SAPPHIRE, OBJECT_GI_JEWEL, GID_ZORA_SAPPHIRE, 0x82, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_ZORA_SAPPHIRE), + GET_ITEM(ITEM_KOKIRI_EMERALD, OBJECT_GI_JEWEL, GID_KOKIRI_EMERALD, 0x80, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_KOKIRI_EMERALD), + GET_ITEM(ITEM_GORON_RUBY, OBJECT_GI_JEWEL, GID_GORON_RUBY, 0x81, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_GORON_RUBY), + GET_ITEM(ITEM_ZORA_SAPPHIRE, OBJECT_GI_JEWEL, GID_ZORA_SAPPHIRE, 0x82, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_ZORA_SAPPHIRE), - GET_ITEM(ITEM_SONG_LULLABY, OBJECT_GI_MELODY, GID_SONG_ZELDA, 0xD4, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_ZELDAS_LULLABY), - GET_ITEM(ITEM_SONG_SUN, OBJECT_GI_MELODY, GID_SONG_SUN, 0xD3, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_SUNS_SONG), - GET_ITEM(ITEM_SONG_EPONA, OBJECT_GI_MELODY, GID_SONG_EPONA, 0xD2, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_EPONAS_SONG), - GET_ITEM(ITEM_SONG_STORMS, OBJECT_GI_MELODY, GID_SONG_STORM, 0xD6, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_SONG_OF_STORMS), - GET_ITEM(ITEM_SONG_TIME, OBJECT_GI_MELODY, GID_SONG_TIME, 0xD5, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_SONG_OF_TIME), - GET_ITEM(ITEM_SONG_SARIA, OBJECT_GI_MELODY, GID_SONG_SARIA, 0xD1, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_SARIAS_SONG), + GET_ITEM(ITEM_SONG_LULLABY, OBJECT_GI_MELODY, GID_SONG_ZELDA, 0xD4, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_ZELDAS_LULLABY), + GET_ITEM(ITEM_SONG_SUN, OBJECT_GI_MELODY, GID_SONG_SUN, 0xD3, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_SUNS_SONG), + GET_ITEM(ITEM_SONG_EPONA, OBJECT_GI_MELODY, GID_SONG_EPONA, 0xD2, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_EPONAS_SONG), + GET_ITEM(ITEM_SONG_STORMS, OBJECT_GI_MELODY, GID_SONG_STORM, 0xD6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_SONG_OF_STORMS), + GET_ITEM(ITEM_SONG_TIME, OBJECT_GI_MELODY, GID_SONG_TIME, 0xD5, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_SONG_OF_TIME), + GET_ITEM(ITEM_SONG_SARIA, OBJECT_GI_MELODY, GID_SONG_SARIA, 0xD1, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_SARIAS_SONG), - GET_ITEM(ITEM_SONG_MINUET, OBJECT_GI_MELODY, GID_SONG_MINUET, 0x73, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_MINUET_OF_FOREST), - GET_ITEM(ITEM_SONG_BOLERO, OBJECT_GI_MELODY, GID_SONG_BOLERO, 0x74, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_BOLERO_OF_FIRE), - GET_ITEM(ITEM_SONG_SERENADE, OBJECT_GI_MELODY, GID_SONG_SERENADE, 0x75, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_SERENADE_OF_WATER), - GET_ITEM(ITEM_SONG_NOCTURNE, OBJECT_GI_MELODY, GID_SONG_NOCTURNE, 0x77, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_NOCTURNE_OF_SHADOW), - GET_ITEM(ITEM_SONG_REQUIEM, OBJECT_GI_MELODY, GID_SONG_REQUIEM, 0x76, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_REQUIEM_OF_SPIRIT), - GET_ITEM(ITEM_SONG_PRELUDE, OBJECT_GI_MELODY, GID_SONG_PRELUDE, 0x78, 0x80, CHEST_ANIM_LONG, MOD_NONE, RG_PRELUDE_OF_LIGHT), + GET_ITEM(ITEM_SONG_MINUET, OBJECT_GI_MELODY, GID_SONG_MINUET, 0x73, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_MINUET_OF_FOREST), + GET_ITEM(ITEM_SONG_BOLERO, OBJECT_GI_MELODY, GID_SONG_BOLERO, 0x74, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_BOLERO_OF_FIRE), + GET_ITEM(ITEM_SONG_SERENADE, OBJECT_GI_MELODY, GID_SONG_SERENADE, 0x75, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_SERENADE_OF_WATER), + GET_ITEM(ITEM_SONG_NOCTURNE, OBJECT_GI_MELODY, GID_SONG_NOCTURNE, 0x77, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_NOCTURNE_OF_SHADOW), + GET_ITEM(ITEM_SONG_REQUIEM, OBJECT_GI_MELODY, GID_SONG_REQUIEM, 0x76, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_REQUIEM_OF_SPIRIT), + GET_ITEM(ITEM_SONG_PRELUDE, OBJECT_GI_MELODY, GID_SONG_PRELUDE, 0x78, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, RG_PRELUDE_OF_LIGHT), }; // These do not have ItemIDs or GetItemIDs from vanilla, so I'm using their // RandomizerGet enum values for both. GetItemEntry randoGetItemTable[] = { - GET_ITEM(RG_ICE_TRAP, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, MOD_RANDOMIZER, RG_ICE_TRAP), - GET_ITEM(RG_MAGIC_SINGLE, OBJECT_GI_MAGICPOT, GID_MAGIC_SMALL, 0xE4, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_MAGIC_SINGLE), - GET_ITEM(RG_MAGIC_DOUBLE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0xE8, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_MAGIC_DOUBLE), - GET_ITEM(RG_DOUBLE_DEFENSE, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xE9, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_DOUBLE_DEFENSE), - GET_ITEM(RG_BOTTLE_WITH_RED_POTION, OBJECT_GI_LIQUID, GID_POTION_RED, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_BOTTLE_WITH_RED_POTION), - GET_ITEM(RG_BOTTLE_WITH_GREEN_POTION, OBJECT_GI_LIQUID, GID_POTION_GREEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_BOTTLE_WITH_GREEN_POTION), - GET_ITEM(RG_BOTTLE_WITH_BLUE_POTION, OBJECT_GI_LIQUID, GID_POTION_BLUE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_BOTTLE_WITH_BLUE_POTION), - GET_ITEM(RG_BOTTLE_WITH_FAIRY, OBJECT_GI_BOTTLE, GID_BOTTLE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_BOTTLE_WITH_FAIRY), - GET_ITEM(RG_BOTTLE_WITH_FISH, OBJECT_GI_FISH, GID_FISH, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_BOTTLE_WITH_FISH), - GET_ITEM(RG_BOTTLE_WITH_BLUE_FIRE, OBJECT_GI_FIRE, GID_BLUE_FIRE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_BOTTLE_WITH_BLUE_FIRE), - GET_ITEM(RG_BOTTLE_WITH_BUGS, OBJECT_GI_INSECT, GID_BUG, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_BOTTLE_WITH_BUGS), - GET_ITEM(RG_BOTTLE_WITH_POE, OBJECT_GI_GHOST, GID_POE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_BOTTLE_WITH_POE), - GET_ITEM(RG_BOTTLE_WITH_BIG_POE, OBJECT_GI_GHOST, GID_BIG_POE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_BOTTLE_WITH_BIG_POE), - GET_ITEM(RG_GERUDO_FORTRESS_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, MOD_RANDOMIZER, RG_GERUDO_FORTRESS_SMALL_KEY), - GET_ITEM(RG_FOREST_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, MOD_RANDOMIZER, RG_FOREST_TEMPLE_SMALL_KEY), - GET_ITEM(RG_FIRE_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, MOD_RANDOMIZER, RG_FIRE_TEMPLE_SMALL_KEY), - GET_ITEM(RG_WATER_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, MOD_RANDOMIZER, RG_WATER_TEMPLE_SMALL_KEY), - GET_ITEM(RG_SPIRIT_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, MOD_RANDOMIZER, RG_SPIRIT_TEMPLE_SMALL_KEY), - GET_ITEM(RG_SHADOW_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, MOD_RANDOMIZER, RG_SHADOW_TEMPLE_SMALL_KEY), - GET_ITEM(RG_BOTTOM_OF_THE_WELL_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, MOD_RANDOMIZER, RG_BOTTOM_OF_THE_WELL_SMALL_KEY), - GET_ITEM(RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, MOD_RANDOMIZER, RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY), - GET_ITEM(RG_GANONS_CASTLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, MOD_RANDOMIZER, RG_GANONS_CASTLE_SMALL_KEY), - GET_ITEM(RG_FOREST_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_FOREST_TEMPLE_BOSS_KEY), - GET_ITEM(RG_FIRE_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_FIRE_TEMPLE_BOSS_KEY), - GET_ITEM(RG_WATER_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_WATER_TEMPLE_BOSS_KEY), - GET_ITEM(RG_SPIRIT_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_SPIRIT_TEMPLE_BOSS_KEY), - GET_ITEM(RG_SHADOW_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_SHADOW_TEMPLE_BOSS_KEY), - GET_ITEM(RG_GANONS_CASTLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_GANONS_CASTLE_BOSS_KEY), - GET_ITEM(RG_DEKU_TREE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_DEKU_TREE_MAP), - GET_ITEM(RG_DODONGOS_CAVERN_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_DODONGOS_CAVERN_MAP), - GET_ITEM(RG_JABU_JABUS_BELLY_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_JABU_JABUS_BELLY_MAP), - GET_ITEM(RG_FOREST_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_FOREST_TEMPLE_MAP), - GET_ITEM(RG_FIRE_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_FIRE_TEMPLE_MAP), - GET_ITEM(RG_WATER_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_WATER_TEMPLE_MAP), - GET_ITEM(RG_SPIRIT_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_SPIRIT_TEMPLE_MAP), - GET_ITEM(RG_SHADOW_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_SHADOW_TEMPLE_MAP), - GET_ITEM(RG_BOTTOM_OF_THE_WELL_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_BOTTOM_OF_THE_WELL_MAP), - GET_ITEM(RG_ICE_CAVERN_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_ICE_CAVERN_MAP), - GET_ITEM(RG_DEKU_TREE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_DEKU_TREE_COMPASS), - GET_ITEM(RG_DODONGOS_CAVERN_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_DODONGOS_CAVERN_COMPASS), - GET_ITEM(RG_JABU_JABUS_BELLY_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_JABU_JABUS_BELLY_COMPASS), - GET_ITEM(RG_FOREST_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_FOREST_TEMPLE_COMPASS), - GET_ITEM(RG_FIRE_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_FIRE_TEMPLE_COMPASS), - GET_ITEM(RG_WATER_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_WATER_TEMPLE_COMPASS), - GET_ITEM(RG_SPIRIT_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_SPIRIT_TEMPLE_COMPASS), - GET_ITEM(RG_SHADOW_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_SHADOW_TEMPLE_COMPASS), - GET_ITEM(RG_BOTTOM_OF_THE_WELL_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_BOTTOM_OF_THE_WELL_COMPASS), - GET_ITEM(RG_ICE_CAVERN_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_ICE_CAVERN_COMPASS), - GET_ITEM(RG_MAGIC_BEAN_PACK, OBJECT_GI_BEAN, GID_BEAN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_MAGIC_BEAN_PACK), - GET_ITEM(RG_TYCOON_WALLET, OBJECT_GI_PURSE, GID_WALLET_GIANT, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, MOD_RANDOMIZER, RG_TYCOON_WALLET), + GET_ITEM(RG_ICE_TRAP, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_ICE_TRAP), + GET_ITEM(RG_MAGIC_SINGLE, OBJECT_GI_MAGICPOT, GID_MAGIC_SMALL, 0xE4, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_MAGIC_SINGLE), + GET_ITEM(RG_MAGIC_DOUBLE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0xE8, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_MAGIC_DOUBLE), + GET_ITEM(RG_DOUBLE_DEFENSE, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xE9, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_DOUBLE_DEFENSE), + GET_ITEM(RG_BOTTLE_WITH_RED_POTION, OBJECT_GI_LIQUID, GID_POTION_RED, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_BOTTLE_WITH_RED_POTION), + GET_ITEM(RG_BOTTLE_WITH_GREEN_POTION, OBJECT_GI_LIQUID, GID_POTION_GREEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_BOTTLE_WITH_GREEN_POTION), + GET_ITEM(RG_BOTTLE_WITH_BLUE_POTION, OBJECT_GI_LIQUID, GID_POTION_BLUE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_BOTTLE_WITH_BLUE_POTION), + GET_ITEM(RG_BOTTLE_WITH_FAIRY, OBJECT_GI_BOTTLE, GID_BOTTLE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_BOTTLE_WITH_FAIRY), + GET_ITEM(RG_BOTTLE_WITH_FISH, OBJECT_GI_FISH, GID_FISH, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_BOTTLE_WITH_FISH), + GET_ITEM(RG_BOTTLE_WITH_BLUE_FIRE, OBJECT_GI_FIRE, GID_BLUE_FIRE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_BOTTLE_WITH_BLUE_FIRE), + GET_ITEM(RG_BOTTLE_WITH_BUGS, OBJECT_GI_INSECT, GID_BUG, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_BOTTLE_WITH_BUGS), + GET_ITEM(RG_BOTTLE_WITH_POE, OBJECT_GI_GHOST, GID_POE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_BOTTLE_WITH_POE), + GET_ITEM(RG_BOTTLE_WITH_BIG_POE, OBJECT_GI_GHOST, GID_BIG_POE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_BOTTLE_WITH_BIG_POE), + GET_ITEM(RG_GERUDO_FORTRESS_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_GERUDO_FORTRESS_SMALL_KEY), + GET_ITEM(RG_FOREST_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_FOREST_TEMPLE_SMALL_KEY), + GET_ITEM(RG_FIRE_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_FIRE_TEMPLE_SMALL_KEY), + GET_ITEM(RG_WATER_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_WATER_TEMPLE_SMALL_KEY), + GET_ITEM(RG_SPIRIT_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_SPIRIT_TEMPLE_SMALL_KEY), + GET_ITEM(RG_SHADOW_TEMPLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_SHADOW_TEMPLE_SMALL_KEY), + GET_ITEM(RG_BOTTOM_OF_THE_WELL_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_BOTTOM_OF_THE_WELL_SMALL_KEY), + GET_ITEM(RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY), + GET_ITEM(RG_GANONS_CASTLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_GANONS_CASTLE_SMALL_KEY), + GET_ITEM(RG_FOREST_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, RG_FOREST_TEMPLE_BOSS_KEY), + GET_ITEM(RG_FIRE_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, RG_FIRE_TEMPLE_BOSS_KEY), + GET_ITEM(RG_WATER_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, RG_WATER_TEMPLE_BOSS_KEY), + GET_ITEM(RG_SPIRIT_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, RG_SPIRIT_TEMPLE_BOSS_KEY), + GET_ITEM(RG_SHADOW_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, RG_SHADOW_TEMPLE_BOSS_KEY), + GET_ITEM(RG_GANONS_CASTLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, RG_GANONS_CASTLE_BOSS_KEY), + GET_ITEM(RG_DEKU_TREE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_DEKU_TREE_MAP), + GET_ITEM(RG_DODONGOS_CAVERN_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_DODONGOS_CAVERN_MAP), + GET_ITEM(RG_JABU_JABUS_BELLY_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_JABU_JABUS_BELLY_MAP), + GET_ITEM(RG_FOREST_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_FOREST_TEMPLE_MAP), + GET_ITEM(RG_FIRE_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_FIRE_TEMPLE_MAP), + GET_ITEM(RG_WATER_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_WATER_TEMPLE_MAP), + GET_ITEM(RG_SPIRIT_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_SPIRIT_TEMPLE_MAP), + GET_ITEM(RG_SHADOW_TEMPLE_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_SHADOW_TEMPLE_MAP), + GET_ITEM(RG_BOTTOM_OF_THE_WELL_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_BOTTOM_OF_THE_WELL_MAP), + GET_ITEM(RG_ICE_CAVERN_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_ICE_CAVERN_MAP), + GET_ITEM(RG_DEKU_TREE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_DEKU_TREE_COMPASS), + GET_ITEM(RG_DODONGOS_CAVERN_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_DODONGOS_CAVERN_COMPASS), + GET_ITEM(RG_JABU_JABUS_BELLY_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_JABU_JABUS_BELLY_COMPASS), + GET_ITEM(RG_FOREST_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_FOREST_TEMPLE_COMPASS), + GET_ITEM(RG_FIRE_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_FIRE_TEMPLE_COMPASS), + GET_ITEM(RG_WATER_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_WATER_TEMPLE_COMPASS), + GET_ITEM(RG_SPIRIT_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_SPIRIT_TEMPLE_COMPASS), + GET_ITEM(RG_SHADOW_TEMPLE_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_SHADOW_TEMPLE_COMPASS), + GET_ITEM(RG_BOTTOM_OF_THE_WELL_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_BOTTOM_OF_THE_WELL_COMPASS), + GET_ITEM(RG_ICE_CAVERN_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_ICE_CAVERN_COMPASS), + GET_ITEM(RG_MAGIC_BEAN_PACK, OBJECT_GI_BEAN, GID_BEAN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_MAGIC_BEAN_PACK), + GET_ITEM(RG_TYCOON_WALLET, OBJECT_GI_PURSE, GID_WALLET_GIANT, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_TYCOON_WALLET), }; ItemTableManager::Instance->AddItemTable(MOD_RANDOMIZER); for (int i = 0; i < ARRAY_COUNT(extendedVanillaGetItemTable); i++) { diff --git a/soh/soh/Enhancements/randomizer/randomizer.h b/soh/soh/Enhancements/randomizer/randomizer.h index c474b61e0..199e94552 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.h +++ b/soh/soh/Enhancements/randomizer/randomizer.h @@ -68,7 +68,7 @@ class Randomizer { ScrubIdentity IdentifyScrub(s32 sceneNum, s32 actorParams, s32 respawnData); ShopItemIdentity IdentifyShopItem(s32 sceneNum, u8 slotIndex); GetItemEntry GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogItemId, bool checkObtainability = true); - GetItemEntry GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId); + GetItemEntry GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId, bool checkObtainability = true); GetItemID GetItemIdFromRandomizerGet(RandomizerGet randoGet, GetItemID ogItemId); ItemObtainability GetItemObtainabilityFromRandomizerCheck(RandomizerCheck randomizerCheck); ItemObtainability GetItemObtainabilityFromRandomizerGet(RandomizerGet randomizerCheck); diff --git a/soh/soh/GameMenuBar.cpp b/soh/soh/GameMenuBar.cpp index d4059adad..9735fcce5 100644 --- a/soh/soh/GameMenuBar.cpp +++ b/soh/soh/GameMenuBar.cpp @@ -170,6 +170,8 @@ namespace GameMenuBar { CVar_SetS32("gMMBunnyHood", 0); // Fast Chests CVar_SetS32("gFastChests", 0); + // Chest size & texture matches contents + CVar_SetS32("gChestSizeAndTextureMatchesContents", 0); // Fast Drops CVar_SetS32("gFastDrops", 0); // Better Owl @@ -479,6 +481,8 @@ namespace GameMenuBar { CVar_SetS32("gDayGravePull", 1); // Pull out Ocarina to Summon Scarecrow CVar_SetS32("gSkipScarecrow", 1); + // Chest size & texture matches contents + CVar_SetS32("gChestSizeAndTextureMatchesContents", 1); // Pause link animation (0 to 16) CVar_SetS32("gPauseLiveLink", 16); @@ -786,6 +790,18 @@ namespace GameMenuBar { UIWidgets::Tooltip("Stops the game from freezing the player when picking up Gold Skulltulas"); UIWidgets::PaddedEnhancementCheckbox("Fast Chests", "gFastChests", true, false); UIWidgets::Tooltip("Kick open every chest"); + UIWidgets::PaddedText("Chest size & texture matches contents", true, false); + const char* chestSizeAndTextureMatchesContentsOptions[4] = { "Disabled", "Both", "Texture Only", "Size Only"}; + UIWidgets::EnhancementCombobox("gChestSizeAndTextureMatchesContents", chestSizeAndTextureMatchesContentsOptions, 4, 0); + UIWidgets::Tooltip( + "Chest sizes and textures are changed to help identify the item inside.\n" + " - Major items: Large gold chests\n" + " - Lesser items: Large brown chests\n" + " - Junk items: Small brown chests\n" + " - Small keys: Small silver chest\n" + " - Boss keys: Vanilla size and texture\n" + " - Skulltula Tokens: Small skulltula chest\n" + ); UIWidgets::PaddedEnhancementCheckbox("Skip Pickup Messages", "gFastDrops", true, false); UIWidgets::Tooltip("Skip pickup messages for new consumable items and bottle swipes"); UIWidgets::PaddedEnhancementCheckbox("Better Owl", "gBetterOwl", true, false); diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 03d9fdb8b..7adead824 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -259,129 +259,129 @@ extern "C" void OTRAudio_Exit() { extern "C" void VanillaItemTable_Init() { static GetItemEntry getItemTable[] = { - GET_ITEM(ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, MOD_NONE, GI_BOMBS_5), - GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, MOD_NONE, GI_NUTS_5), - GET_ITEM(ITEM_BOMBCHU, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, MOD_NONE, GI_BOMBCHUS_10), - GET_ITEM(ITEM_BOW, OBJECT_GI_BOW, GID_BOW, 0x31, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BOW), - GET_ITEM(ITEM_SLINGSHOT, OBJECT_GI_PACHINKO, GID_SLINGSHOT, 0x30, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_SLINGSHOT), - GET_ITEM(ITEM_BOOMERANG, OBJECT_GI_BOOMERANG, GID_BOOMERANG, 0x35, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BOOMERANG), - GET_ITEM(ITEM_STICK, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT, MOD_NONE, GI_STICKS_1), - GET_ITEM(ITEM_HOOKSHOT, OBJECT_GI_HOOKSHOT, GID_HOOKSHOT, 0x36, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_HOOKSHOT), - GET_ITEM(ITEM_LONGSHOT, OBJECT_GI_HOOKSHOT, GID_LONGSHOT, 0x4F, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_LONGSHOT), - GET_ITEM(ITEM_LENS, OBJECT_GI_GLASSES, GID_LENS, 0x39, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_LENS), - GET_ITEM(ITEM_LETTER_ZELDA, OBJECT_GI_LETTER, GID_LETTER_ZELDA, 0x69, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_LETTER_ZELDA), - GET_ITEM(ITEM_OCARINA_TIME, OBJECT_GI_OCARINA, GID_OCARINA_TIME, 0x3A, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_OCARINA_OOT), - GET_ITEM(ITEM_HAMMER, OBJECT_GI_HAMMER, GID_HAMMER, 0x38, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_HAMMER), - GET_ITEM(ITEM_COJIRO, OBJECT_GI_NIWATORI, GID_COJIRO, 0x02, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_COJIRO), - GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x42, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BOTTLE), - GET_ITEM(ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_POTION_RED), - GET_ITEM(ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x44, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_POTION_GREEN), - GET_ITEM(ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x45, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_POTION_BLUE), - GET_ITEM(ITEM_FAIRY, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x46, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_FAIRY), - GET_ITEM(ITEM_MILK_BOTTLE, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_MILK_BOTTLE), - GET_ITEM(ITEM_LETTER_RUTO, OBJECT_GI_BOTTLE_LETTER, GID_LETTER_RUTO, 0x99, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_LETTER_RUTO), - GET_ITEM(ITEM_BEAN, OBJECT_GI_BEAN, GID_BEAN, 0x48, 0x80, CHEST_ANIM_SHORT, MOD_NONE, GI_BEAN), - GET_ITEM(ITEM_MASK_SKULL, OBJECT_GI_SKJ_MASK, GID_MASK_SKULL, 0x10, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_MASK_SKULL), - GET_ITEM(ITEM_MASK_SPOOKY, OBJECT_GI_REDEAD_MASK, GID_MASK_SPOOKY, 0x11, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_MASK_SPOOKY), - GET_ITEM(ITEM_CHICKEN, OBJECT_GI_NIWATORI, GID_CHICKEN, 0x48, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_CHICKEN), - GET_ITEM(ITEM_MASK_KEATON, OBJECT_GI_KI_TAN_MASK, GID_MASK_KEATON, 0x12, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_MASK_KEATON), - GET_ITEM(ITEM_MASK_BUNNY, OBJECT_GI_RABIT_MASK, GID_MASK_BUNNY, 0x13, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_MASK_BUNNY), - GET_ITEM(ITEM_MASK_TRUTH, OBJECT_GI_TRUTH_MASK, GID_MASK_TRUTH, 0x17, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_MASK_TRUTH), - GET_ITEM(ITEM_POCKET_EGG, OBJECT_GI_EGG, GID_EGG, 0x01, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_POCKET_EGG), - GET_ITEM(ITEM_POCKET_CUCCO, OBJECT_GI_NIWATORI, GID_CHICKEN, 0x48, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_POCKET_CUCCO), - GET_ITEM(ITEM_ODD_MUSHROOM, OBJECT_GI_MUSHROOM, GID_ODD_MUSHROOM, 0x03, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_ODD_MUSHROOM), - GET_ITEM(ITEM_ODD_POTION, OBJECT_GI_POWDER, GID_ODD_POTION, 0x04, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_ODD_POTION), - GET_ITEM(ITEM_SAW, OBJECT_GI_SAW, GID_SAW, 0x05, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_SAW), - GET_ITEM(ITEM_SWORD_BROKEN, OBJECT_GI_BROKENSWORD, GID_SWORD_BROKEN, 0x08, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_SWORD_BROKEN), - GET_ITEM(ITEM_PRESCRIPTION, OBJECT_GI_PRESCRIPTION, GID_PRESCRIPTION, 0x09, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_PRESCRIPTION), - GET_ITEM(ITEM_FROG, OBJECT_GI_FROG, GID_FROG, 0x0D, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_FROG), - GET_ITEM(ITEM_EYEDROPS, OBJECT_GI_EYE_LOTION, GID_EYEDROPS, 0x0E, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_EYEDROPS), - GET_ITEM(ITEM_CLAIM_CHECK, OBJECT_GI_TICKETSTONE, GID_CLAIM_CHECK, 0x0A, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_CLAIM_CHECK), - GET_ITEM(ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0xA4, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_SWORD_KOKIRI), - GET_ITEM(ITEM_SWORD_BGS, OBJECT_GI_LONGSWORD, GID_SWORD_BGS, 0x4B, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_SWORD_KNIFE), - GET_ITEM(ITEM_SHIELD_DEKU, OBJECT_GI_SHIELD_1, GID_SHIELD_DEKU, 0x4C, 0xA0, CHEST_ANIM_SHORT, MOD_NONE, GI_SHIELD_DEKU), - GET_ITEM(ITEM_SHIELD_HYLIAN, OBJECT_GI_SHIELD_2, GID_SHIELD_HYLIAN, 0x4D, 0xA0, CHEST_ANIM_SHORT, MOD_NONE, GI_SHIELD_HYLIAN), - GET_ITEM(ITEM_SHIELD_MIRROR, OBJECT_GI_SHIELD_3, GID_SHIELD_MIRROR, 0x4E, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_SHIELD_MIRROR), - GET_ITEM(ITEM_TUNIC_GORON, OBJECT_GI_CLOTHES, GID_TUNIC_GORON, 0x50, 0xA0, CHEST_ANIM_LONG, MOD_NONE, GI_TUNIC_GORON), - GET_ITEM(ITEM_TUNIC_ZORA, OBJECT_GI_CLOTHES, GID_TUNIC_ZORA, 0x51, 0xA0, CHEST_ANIM_LONG, MOD_NONE, GI_TUNIC_ZORA), - GET_ITEM(ITEM_BOOTS_IRON, OBJECT_GI_BOOTS_2, GID_BOOTS_IRON, 0x53, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BOOTS_IRON), - GET_ITEM(ITEM_BOOTS_HOVER, OBJECT_GI_HOVERBOOTS, GID_BOOTS_HOVER, 0x54, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BOOTS_HOVER), - GET_ITEM(ITEM_QUIVER_40, OBJECT_GI_ARROWCASE, GID_QUIVER_40, 0x56, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_QUIVER_40), - GET_ITEM(ITEM_QUIVER_50, OBJECT_GI_ARROWCASE, GID_QUIVER_50, 0x57, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_QUIVER_50), - GET_ITEM(ITEM_BOMB_BAG_20, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_20, 0x58, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BOMB_BAG_20), - GET_ITEM(ITEM_BOMB_BAG_30, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_30, 0x59, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BOMB_BAG_30), - GET_ITEM(ITEM_BOMB_BAG_40, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, 0x5A, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BOMB_BAG_40), - GET_ITEM(ITEM_GAUNTLETS_SILVER, OBJECT_GI_GLOVES, GID_GAUNTLETS_SILVER, 0x5B, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_GAUNTLETS_SILVER), - GET_ITEM(ITEM_GAUNTLETS_GOLD, OBJECT_GI_GLOVES, GID_GAUNTLETS_GOLD, 0x5C, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_GAUNTLETS_GOLD), - GET_ITEM(ITEM_SCALE_SILVER, OBJECT_GI_SCALE, GID_SCALE_SILVER, 0xCD, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_SCALE_SILVER), - GET_ITEM(ITEM_SCALE_GOLDEN, OBJECT_GI_SCALE, GID_SCALE_GOLDEN, 0xCE, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_SCALE_GOLD), - GET_ITEM(ITEM_STONE_OF_AGONY, OBJECT_GI_MAP, GID_STONE_OF_AGONY, 0x68, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_STONE_OF_AGONY), - GET_ITEM(ITEM_GERUDO_CARD, OBJECT_GI_GERUDO, GID_GERUDO_CARD, 0x7B, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_GERUDO_CARD), - GET_ITEM(ITEM_OCARINA_FAIRY, OBJECT_GI_OCARINA_0, GID_OCARINA_FAIRY, 0x4A, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_OCARINA_FAIRY), - GET_ITEM(ITEM_SEEDS, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT, MOD_NONE, GI_SEEDS_5), - GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_HEART_CONTAINER), - GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC2, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_HEART_PIECE), - GET_ITEM(ITEM_KEY_BOSS, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, 0xC7, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_KEY_BOSS), - GET_ITEM(ITEM_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, 0x67, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_COMPASS), - GET_ITEM(ITEM_DUNGEON_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, 0x66, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_MAP), - GET_ITEM(ITEM_KEY_SMALL, OBJECT_GI_KEY, GID_KEY_SMALL, 0x60, 0x80, CHEST_ANIM_SHORT, MOD_NONE, GI_KEY_SMALL), - GET_ITEM(ITEM_MAGIC_SMALL, OBJECT_GI_MAGICPOT, GID_MAGIC_SMALL, 0x52, 0x6F, CHEST_ANIM_SHORT, MOD_NONE, GI_MAGIC_SMALL), - GET_ITEM(ITEM_MAGIC_LARGE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0x52, 0x6E, CHEST_ANIM_SHORT, MOD_NONE, GI_MAGIC_LARGE), - GET_ITEM(ITEM_WALLET_ADULT, OBJECT_GI_PURSE, GID_WALLET_ADULT, 0x5E, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_WALLET_ADULT), - GET_ITEM(ITEM_WALLET_GIANT, OBJECT_GI_PURSE, GID_WALLET_GIANT, 0x5F, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_WALLET_GIANT), - GET_ITEM(ITEM_WEIRD_EGG, OBJECT_GI_EGG, GID_EGG, 0x9A, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_WEIRD_EGG), - GET_ITEM(ITEM_HEART, OBJECT_GI_HEART, GID_HEART, 0x55, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_HEART), - GET_ITEM(ITEM_ARROWS_SMALL, OBJECT_GI_ARROW, GID_ARROWS_SMALL, 0xE6, 0x48, CHEST_ANIM_SHORT, MOD_NONE, GI_ARROWS_SMALL), - GET_ITEM(ITEM_ARROWS_MEDIUM, OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, 0xE6, 0x49, CHEST_ANIM_SHORT, MOD_NONE, GI_ARROWS_MEDIUM), - GET_ITEM(ITEM_ARROWS_LARGE, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0xE6, 0x4A, CHEST_ANIM_SHORT, MOD_NONE, GI_ARROWS_LARGE), - GET_ITEM(ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0x6F, 0x00, CHEST_ANIM_SHORT, MOD_NONE, GI_RUPEE_GREEN), - GET_ITEM(ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0xCC, 0x01, CHEST_ANIM_SHORT, MOD_NONE, GI_RUPEE_BLUE), - GET_ITEM(ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0xF0, 0x02, CHEST_ANIM_SHORT, MOD_NONE, GI_RUPEE_RED), - GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_HEART_CONTAINER_2), - GET_ITEM(ITEM_MILK, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_MILK), - GET_ITEM(ITEM_MASK_GORON, OBJECT_GI_GOLONMASK, GID_MASK_GORON, 0x14, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_MASK_GORON), - GET_ITEM(ITEM_MASK_ZORA, OBJECT_GI_ZORAMASK, GID_MASK_ZORA, 0x15, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_MASK_ZORA), - GET_ITEM(ITEM_MASK_GERUDO, OBJECT_GI_GERUDOMASK, GID_MASK_GERUDO, 0x16, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_MASK_GERUDO), - GET_ITEM(ITEM_BRACELET, OBJECT_GI_BRACELET, GID_BRACELET, 0x79, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BRACELET), - GET_ITEM(ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0xF1, 0x14, CHEST_ANIM_SHORT, MOD_NONE, GI_RUPEE_PURPLE), - GET_ITEM(ITEM_RUPEE_GOLD, OBJECT_GI_RUPY, GID_RUPEE_GOLD, 0xF2, 0x13, CHEST_ANIM_SHORT, MOD_NONE, GI_RUPEE_GOLD), - GET_ITEM(ITEM_SWORD_BGS, OBJECT_GI_LONGSWORD, GID_SWORD_BGS, 0x0C, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_SWORD_BGS), - GET_ITEM(ITEM_ARROW_FIRE, OBJECT_GI_M_ARROW, GID_ARROW_FIRE, 0x70, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_ARROW_FIRE), - GET_ITEM(ITEM_ARROW_ICE, OBJECT_GI_M_ARROW, GID_ARROW_ICE, 0x71, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_ARROW_ICE), - GET_ITEM(ITEM_ARROW_LIGHT, OBJECT_GI_M_ARROW, GID_ARROW_LIGHT, 0x72, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_ARROW_LIGHT), - GET_ITEM(ITEM_SKULL_TOKEN, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, 0xB4, 0x80, CHEST_ANIM_SHORT, MOD_NONE, GI_SKULL_TOKEN), - GET_ITEM(ITEM_DINS_FIRE, OBJECT_GI_GODDESS, GID_DINS_FIRE, 0xAD, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_DINS_FIRE), - GET_ITEM(ITEM_FARORES_WIND, OBJECT_GI_GODDESS, GID_FARORES_WIND, 0xAE, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_FARORES_WIND), - GET_ITEM(ITEM_NAYRUS_LOVE, OBJECT_GI_GODDESS, GID_NAYRUS_LOVE, 0xAF, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_NAYRUS_LOVE), - GET_ITEM(ITEM_BULLET_BAG_30, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, 0x07, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BULLET_BAG_30), - GET_ITEM(ITEM_BULLET_BAG_40, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, 0x07, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BULLET_BAG_40), - GET_ITEM(ITEM_STICKS_5, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT, MOD_NONE, GI_STICKS_5), - GET_ITEM(ITEM_STICKS_10, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT, MOD_NONE, GI_STICKS_10), - GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, MOD_NONE, GI_NUTS_5_2), - GET_ITEM(ITEM_NUTS_10, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, MOD_NONE, GI_NUTS_10), - GET_ITEM(ITEM_BOMB, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, MOD_NONE, GI_BOMBS_1), - GET_ITEM(ITEM_BOMBS_10, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, MOD_NONE, GI_BOMBS_10), - GET_ITEM(ITEM_BOMBS_20, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, MOD_NONE, GI_BOMBS_20), - GET_ITEM(ITEM_BOMBS_30, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, MOD_NONE, GI_BOMBS_30), - GET_ITEM(ITEM_SEEDS_30, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT, MOD_NONE, GI_SEEDS_30), - GET_ITEM(ITEM_BOMBCHUS_5, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, MOD_NONE, GI_BOMBCHUS_5), - GET_ITEM(ITEM_BOMBCHUS_20, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, MOD_NONE, GI_BOMBCHUS_20), - GET_ITEM(ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x47, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_FISH), - GET_ITEM(ITEM_BUG, OBJECT_GI_INSECT, GID_BUG, 0x7A, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BUGS), - GET_ITEM(ITEM_BLUE_FIRE, OBJECT_GI_FIRE, GID_BLUE_FIRE, 0x5D, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BLUE_FIRE), - GET_ITEM(ITEM_POE, OBJECT_GI_GHOST, GID_POE, 0x97, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_POE), - GET_ITEM(ITEM_BIG_POE, OBJECT_GI_GHOST, GID_BIG_POE, 0xF9, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BIG_POE), - GET_ITEM(ITEM_KEY_SMALL, OBJECT_GI_KEY, GID_KEY_SMALL, 0xF3, 0x80, CHEST_ANIM_SHORT, MOD_NONE, GI_DOOR_KEY), - GET_ITEM(ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0xF4, 0x00, CHEST_ANIM_SHORT, MOD_NONE, GI_RUPEE_GREEN_LOSE), - GET_ITEM(ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0xF5, 0x01, CHEST_ANIM_SHORT, MOD_NONE, GI_RUPEE_BLUE_LOSE), - GET_ITEM(ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0xF6, 0x02, CHEST_ANIM_SHORT, MOD_NONE, GI_RUPEE_RED_LOSE), - GET_ITEM(ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0xF7, 0x14, CHEST_ANIM_SHORT, MOD_NONE, GI_RUPEE_PURPLE_LOSE), - GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_HEART_PIECE_WIN), - GET_ITEM(ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x90, 0x80, CHEST_ANIM_SHORT, MOD_NONE, GI_STICK_UPGRADE_20), - GET_ITEM(ITEM_STICK_UPGRADE_30, OBJECT_GI_STICK, GID_STICK, 0x91, 0x80, CHEST_ANIM_SHORT, MOD_NONE, GI_STICK_UPGRADE_30), - GET_ITEM(ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0xA7, 0x80, CHEST_ANIM_SHORT, MOD_NONE, GI_NUT_UPGRADE_30), - GET_ITEM(ITEM_NUT_UPGRADE_40, OBJECT_GI_NUTS, GID_NUTS, 0xA8, 0x80, CHEST_ANIM_SHORT, MOD_NONE, GI_NUT_UPGRADE_40), - GET_ITEM(ITEM_BULLET_BAG_50, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG_50, 0x6C, 0x80, CHEST_ANIM_LONG, MOD_NONE, GI_BULLET_BAG_50), + GET_ITEM(ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_BOMBS_5), + GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_NUTS_5), + GET_ITEM(ITEM_BOMBCHU, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_BOMBCHUS_10), + GET_ITEM(ITEM_BOW, OBJECT_GI_BOW, GID_BOW, 0x31, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_BOW), + GET_ITEM(ITEM_SLINGSHOT, OBJECT_GI_PACHINKO, GID_SLINGSHOT, 0x30, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_SLINGSHOT), + GET_ITEM(ITEM_BOOMERANG, OBJECT_GI_BOOMERANG, GID_BOOMERANG, 0x35, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_BOOMERANG), + GET_ITEM(ITEM_STICK, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_STICKS_1), + GET_ITEM(ITEM_HOOKSHOT, OBJECT_GI_HOOKSHOT, GID_HOOKSHOT, 0x36, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_HOOKSHOT), + GET_ITEM(ITEM_LONGSHOT, OBJECT_GI_HOOKSHOT, GID_LONGSHOT, 0x4F, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_LONGSHOT), + GET_ITEM(ITEM_LENS, OBJECT_GI_GLASSES, GID_LENS, 0x39, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_LENS), + GET_ITEM(ITEM_LETTER_ZELDA, OBJECT_GI_LETTER, GID_LETTER_ZELDA, 0x69, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_LETTER_ZELDA), + GET_ITEM(ITEM_OCARINA_TIME, OBJECT_GI_OCARINA, GID_OCARINA_TIME, 0x3A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_OCARINA_OOT), + GET_ITEM(ITEM_HAMMER, OBJECT_GI_HAMMER, GID_HAMMER, 0x38, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_HAMMER), + GET_ITEM(ITEM_COJIRO, OBJECT_GI_NIWATORI, GID_COJIRO, 0x02, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_COJIRO), + GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x42, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_BOTTLE), + GET_ITEM(ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, GI_POTION_RED), + GET_ITEM(ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x44, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, GI_POTION_GREEN), + GET_ITEM(ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x45, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, GI_POTION_BLUE), + GET_ITEM(ITEM_FAIRY, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x46, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, GI_FAIRY), + GET_ITEM(ITEM_MILK_BOTTLE, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_MILK_BOTTLE), + GET_ITEM(ITEM_LETTER_RUTO, OBJECT_GI_BOTTLE_LETTER, GID_LETTER_RUTO, 0x99, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_LETTER_RUTO), + GET_ITEM(ITEM_BEAN, OBJECT_GI_BEAN, GID_BEAN, 0x48, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_BEAN), + GET_ITEM(ITEM_MASK_SKULL, OBJECT_GI_SKJ_MASK, GID_MASK_SKULL, 0x10, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_MASK_SKULL), + GET_ITEM(ITEM_MASK_SPOOKY, OBJECT_GI_REDEAD_MASK, GID_MASK_SPOOKY, 0x11, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_MASK_SPOOKY), + GET_ITEM(ITEM_CHICKEN, OBJECT_GI_NIWATORI, GID_CHICKEN, 0x48, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_CHICKEN), + GET_ITEM(ITEM_MASK_KEATON, OBJECT_GI_KI_TAN_MASK, GID_MASK_KEATON, 0x12, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_MASK_KEATON), + GET_ITEM(ITEM_MASK_BUNNY, OBJECT_GI_RABIT_MASK, GID_MASK_BUNNY, 0x13, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_MASK_BUNNY), + GET_ITEM(ITEM_MASK_TRUTH, OBJECT_GI_TRUTH_MASK, GID_MASK_TRUTH, 0x17, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_MASK_TRUTH), + GET_ITEM(ITEM_POCKET_EGG, OBJECT_GI_EGG, GID_EGG, 0x01, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_POCKET_EGG), + GET_ITEM(ITEM_POCKET_CUCCO, OBJECT_GI_NIWATORI, GID_CHICKEN, 0x48, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_POCKET_CUCCO), + GET_ITEM(ITEM_ODD_MUSHROOM, OBJECT_GI_MUSHROOM, GID_ODD_MUSHROOM, 0x03, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_ODD_MUSHROOM), + GET_ITEM(ITEM_ODD_POTION, OBJECT_GI_POWDER, GID_ODD_POTION, 0x04, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_ODD_POTION), + GET_ITEM(ITEM_SAW, OBJECT_GI_SAW, GID_SAW, 0x05, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_SAW), + GET_ITEM(ITEM_SWORD_BROKEN, OBJECT_GI_BROKENSWORD, GID_SWORD_BROKEN, 0x08, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_SWORD_BROKEN), + GET_ITEM(ITEM_PRESCRIPTION, OBJECT_GI_PRESCRIPTION, GID_PRESCRIPTION, 0x09, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_PRESCRIPTION), + GET_ITEM(ITEM_FROG, OBJECT_GI_FROG, GID_FROG, 0x0D, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_FROG), + GET_ITEM(ITEM_EYEDROPS, OBJECT_GI_EYE_LOTION, GID_EYEDROPS, 0x0E, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_EYEDROPS), + GET_ITEM(ITEM_CLAIM_CHECK, OBJECT_GI_TICKETSTONE, GID_CLAIM_CHECK, 0x0A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_CLAIM_CHECK), + GET_ITEM(ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0xA4, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_SWORD_KOKIRI), + GET_ITEM(ITEM_SWORD_BGS, OBJECT_GI_LONGSWORD, GID_SWORD_BGS, 0x4B, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_SWORD_KNIFE), + GET_ITEM(ITEM_SHIELD_DEKU, OBJECT_GI_SHIELD_1, GID_SHIELD_DEKU, 0x4C, 0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, GI_SHIELD_DEKU), + GET_ITEM(ITEM_SHIELD_HYLIAN, OBJECT_GI_SHIELD_2, GID_SHIELD_HYLIAN, 0x4D, 0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, GI_SHIELD_HYLIAN), + GET_ITEM(ITEM_SHIELD_MIRROR, OBJECT_GI_SHIELD_3, GID_SHIELD_MIRROR, 0x4E, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_SHIELD_MIRROR), + GET_ITEM(ITEM_TUNIC_GORON, OBJECT_GI_CLOTHES, GID_TUNIC_GORON, 0x50, 0xA0, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_TUNIC_GORON), + GET_ITEM(ITEM_TUNIC_ZORA, OBJECT_GI_CLOTHES, GID_TUNIC_ZORA, 0x51, 0xA0, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_TUNIC_ZORA), + GET_ITEM(ITEM_BOOTS_IRON, OBJECT_GI_BOOTS_2, GID_BOOTS_IRON, 0x53, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_BOOTS_IRON), + GET_ITEM(ITEM_BOOTS_HOVER, OBJECT_GI_HOVERBOOTS, GID_BOOTS_HOVER, 0x54, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_BOOTS_HOVER), + GET_ITEM(ITEM_QUIVER_40, OBJECT_GI_ARROWCASE, GID_QUIVER_40, 0x56, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_QUIVER_40), + GET_ITEM(ITEM_QUIVER_50, OBJECT_GI_ARROWCASE, GID_QUIVER_50, 0x57, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_QUIVER_50), + GET_ITEM(ITEM_BOMB_BAG_20, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_20, 0x58, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_BOMB_BAG_20), + GET_ITEM(ITEM_BOMB_BAG_30, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_30, 0x59, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_BOMB_BAG_30), + GET_ITEM(ITEM_BOMB_BAG_40, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, 0x5A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_BOMB_BAG_40), + GET_ITEM(ITEM_GAUNTLETS_SILVER, OBJECT_GI_GLOVES, GID_GAUNTLETS_SILVER, 0x5B, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_GAUNTLETS_SILVER), + GET_ITEM(ITEM_GAUNTLETS_GOLD, OBJECT_GI_GLOVES, GID_GAUNTLETS_GOLD, 0x5C, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_GAUNTLETS_GOLD), + GET_ITEM(ITEM_SCALE_SILVER, OBJECT_GI_SCALE, GID_SCALE_SILVER, 0xCD, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_SCALE_SILVER), + GET_ITEM(ITEM_SCALE_GOLDEN, OBJECT_GI_SCALE, GID_SCALE_GOLDEN, 0xCE, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_SCALE_GOLD), + GET_ITEM(ITEM_STONE_OF_AGONY, OBJECT_GI_MAP, GID_STONE_OF_AGONY, 0x68, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_STONE_OF_AGONY), + 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_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), + GET_ITEM(ITEM_KEY_SMALL, OBJECT_GI_KEY, GID_KEY_SMALL, 0x60, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_NONE, GI_KEY_SMALL), + GET_ITEM(ITEM_MAGIC_SMALL, OBJECT_GI_MAGICPOT, GID_MAGIC_SMALL, 0x52, 0x6F, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_MAGIC_SMALL), + GET_ITEM(ITEM_MAGIC_LARGE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0x52, 0x6E, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_MAGIC_LARGE), + GET_ITEM(ITEM_WALLET_ADULT, OBJECT_GI_PURSE, GID_WALLET_ADULT, 0x5E, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_WALLET_ADULT), + GET_ITEM(ITEM_WALLET_GIANT, OBJECT_GI_PURSE, GID_WALLET_GIANT, 0x5F, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_WALLET_GIANT), + GET_ITEM(ITEM_WEIRD_EGG, OBJECT_GI_EGG, GID_EGG, 0x9A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_WEIRD_EGG), + GET_ITEM(ITEM_HEART, OBJECT_GI_HEART, GID_HEART, 0x55, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, GI_HEART), + GET_ITEM(ITEM_ARROWS_SMALL, OBJECT_GI_ARROW, GID_ARROWS_SMALL, 0xE6, 0x48, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_ARROWS_SMALL), + GET_ITEM(ITEM_ARROWS_MEDIUM, OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, 0xE6, 0x49, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_ARROWS_MEDIUM), + GET_ITEM(ITEM_ARROWS_LARGE, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0xE6, 0x4A, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_ARROWS_LARGE), + GET_ITEM(ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0x6F, 0x00, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, 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_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), + GET_ITEM(ITEM_MASK_GERUDO, OBJECT_GI_GERUDOMASK, GID_MASK_GERUDO, 0x16, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_MASK_GERUDO), + GET_ITEM(ITEM_BRACELET, OBJECT_GI_BRACELET, GID_BRACELET, 0x79, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_BRACELET), + GET_ITEM(ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0xF1, 0x14, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_RUPEE_PURPLE), + GET_ITEM(ITEM_RUPEE_GOLD, OBJECT_GI_RUPY, GID_RUPEE_GOLD, 0xF2, 0x13, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, GI_RUPEE_GOLD), + GET_ITEM(ITEM_SWORD_BGS, OBJECT_GI_LONGSWORD, GID_SWORD_BGS, 0x0C, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_SWORD_BGS), + GET_ITEM(ITEM_ARROW_FIRE, OBJECT_GI_M_ARROW, GID_ARROW_FIRE, 0x70, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_ARROW_FIRE), + GET_ITEM(ITEM_ARROW_ICE, OBJECT_GI_M_ARROW, GID_ARROW_ICE, 0x71, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_ARROW_ICE), + GET_ITEM(ITEM_ARROW_LIGHT, OBJECT_GI_M_ARROW, GID_ARROW_LIGHT, 0x72, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_ARROW_LIGHT), + GET_ITEM(ITEM_SKULL_TOKEN, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, 0xB4, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SKULLTULA_TOKEN, MOD_NONE, GI_SKULL_TOKEN), + GET_ITEM(ITEM_DINS_FIRE, OBJECT_GI_GODDESS, GID_DINS_FIRE, 0xAD, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_DINS_FIRE), + GET_ITEM(ITEM_FARORES_WIND, OBJECT_GI_GODDESS, GID_FARORES_WIND, 0xAE, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_FARORES_WIND), + GET_ITEM(ITEM_NAYRUS_LOVE, OBJECT_GI_GODDESS, GID_NAYRUS_LOVE, 0xAF, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_NAYRUS_LOVE), + GET_ITEM(ITEM_BULLET_BAG_30, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, 0x07, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_BULLET_BAG_30), + GET_ITEM(ITEM_BULLET_BAG_40, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, 0x07, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_BULLET_BAG_40), + GET_ITEM(ITEM_STICKS_5, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_STICKS_5), + GET_ITEM(ITEM_STICKS_10, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_STICKS_10), + GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_NUTS_5_2), + GET_ITEM(ITEM_NUTS_10, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_NUTS_10), + GET_ITEM(ITEM_BOMB, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_BOMBS_1), + GET_ITEM(ITEM_BOMBS_10, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_BOMBS_10), + GET_ITEM(ITEM_BOMBS_20, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_BOMBS_20), + GET_ITEM(ITEM_BOMBS_30, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_BOMBS_30), + GET_ITEM(ITEM_SEEDS_30, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_SEEDS_30), + GET_ITEM(ITEM_BOMBCHUS_5, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_BOMBCHUS_5), + GET_ITEM(ITEM_BOMBCHUS_20, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_BOMBCHUS_20), + GET_ITEM(ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x47, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, GI_FISH), + GET_ITEM(ITEM_BUG, OBJECT_GI_INSECT, GID_BUG, 0x7A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, GI_BUGS), + GET_ITEM(ITEM_BLUE_FIRE, OBJECT_GI_FIRE, GID_BLUE_FIRE, 0x5D, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, GI_BLUE_FIRE), + GET_ITEM(ITEM_POE, OBJECT_GI_GHOST, GID_POE, 0x97, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, GI_POE), + GET_ITEM(ITEM_BIG_POE, OBJECT_GI_GHOST, GID_BIG_POE, 0xF9, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, GI_BIG_POE), + GET_ITEM(ITEM_KEY_SMALL, OBJECT_GI_KEY, GID_KEY_SMALL, 0xF3, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_NONE, GI_DOOR_KEY), + GET_ITEM(ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0xF4, 0x00, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_RUPEE_GREEN_LOSE), + 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_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), + GET_ITEM(ITEM_NUT_UPGRADE_40, OBJECT_GI_NUTS, GID_NUTS, 0xA8, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, GI_NUT_UPGRADE_40), + GET_ITEM(ITEM_BULLET_BAG_50, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG_50, 0x6C, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_BULLET_BAG_50), GET_ITEM_NONE, GET_ITEM_NONE, GET_ITEM_NONE // GI_MAX - if you need to add to this table insert it before this entry. @@ -1860,6 +1860,10 @@ extern "C" GetItemEntry Randomizer_GetItemFromActor(s16 actorId, s16 sceneNum, s return OTRGlobals::Instance->gRandomizer->GetItemFromActor(actorId, sceneNum, actorParams, ogId); } +extern "C" GetItemEntry Randomizer_GetItemFromActorWithoutObtainabilityCheck(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogId) { + return OTRGlobals::Instance->gRandomizer->GetItemFromActor(actorId, sceneNum, actorParams, ogId, false); +} + extern "C" GetItemEntry Randomizer_GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId) { return OTRGlobals::Instance->gRandomizer->GetItemFromKnownCheck(randomizerCheck, ogId); } diff --git a/soh/soh/OTRGlobals.h b/soh/soh/OTRGlobals.h index 1242dfb4d..4a3b06c84 100644 --- a/soh/soh/OTRGlobals.h +++ b/soh/soh/OTRGlobals.h @@ -119,6 +119,7 @@ void Randomizer_LoadMasterQuestDungeons(const char* spoilerFileName); void Randomizer_LoadItemLocations(const char* spoilerFileName, bool silent); bool Randomizer_IsTrialRequired(RandomizerInf trial); GetItemEntry Randomizer_GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogId); +GetItemEntry Randomizer_GetItemFromActorWithoutObtainabilityCheck(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogId); GetItemEntry Randomizer_GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId); GetItemEntry Randomizer_GetItemFromKnownCheckWithoutObtainabilityCheck(RandomizerCheck randomizerCheck, GetItemID ogId); ItemObtainability Randomizer_GetItemObtainabilityFromRandomizerCheck(RandomizerCheck randomizerCheck); diff --git a/soh/src/overlays/actors/ovl_Bg_Mori_Hineri/z_bg_mori_hineri.c b/soh/src/overlays/actors/ovl_Bg_Mori_Hineri/z_bg_mori_hineri.c index 997141f94..e848c1625 100644 --- a/soh/src/overlays/actors/ovl_Bg_Mori_Hineri/z_bg_mori_hineri.c +++ b/soh/src/overlays/actors/ovl_Bg_Mori_Hineri/z_bg_mori_hineri.c @@ -140,7 +140,9 @@ void func_808A39FC(BgMoriHineri* this, GlobalContext* globalCtx) { colHeader = NULL; this->dyna.actor.draw = BgMoriHineri_DrawHallAndRoom; if (this->dyna.actor.params == 0) { - this->actionFunc = func_808A3C8C; + // In vanilla this actionFunc is set to func_808A3C8C, and the boss key chest is rendered from scratch in BgMoriHineri_DrawHallAndRoom + // In SOH we instead spawn the en_box actor, which allows the rendering to be handled consistently with the rest of the chests in the game + this->actionFunc = BgMoriHineri_SpawnBossKeyChest; CollisionHeader_GetVirtual(&object_mori_hineri1_Col_0054B8, &colHeader); } else if (this->dyna.actor.params == 1) { this->actionFunc = BgMoriHineri_SpawnBossKeyChest; @@ -161,9 +163,15 @@ void BgMoriHineri_DoNothing(BgMoriHineri* this, GlobalContext* globalCtx) { } void BgMoriHineri_SpawnBossKeyChest(BgMoriHineri* this, GlobalContext* globalCtx) { - Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_BOX, this->dyna.actor.world.pos.x + 147.0f, - this->dyna.actor.world.pos.y + -245.0f, this->dyna.actor.world.pos.z + -453.0f, 0, 0x4000, 0, 0x27EE); - this->actionFunc = BgMoriHineri_DoNothing; + if (this->dyna.actor.params == 0) { + Object_Spawn(&globalCtx->objectCtx, OBJECT_BOX); + Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_BOX, -1515.0f, 1440.0f, -3475.0f, -0x4000, 0x4000, 0, 0x27EE); + this->actionFunc = func_808A3C8C; + } else { + Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_BOX, this->dyna.actor.world.pos.x + 147.0f, + this->dyna.actor.world.pos.y + -245.0f, this->dyna.actor.world.pos.z + -453.0f, 0, 0x4000, 0, 0x27EE); + this->actionFunc = BgMoriHineri_DoNothing; + } } void func_808A3C8C(BgMoriHineri* this, GlobalContext* globalCtx) { @@ -255,29 +263,6 @@ void BgMoriHineri_DrawHallAndRoom(Actor* thisx, GlobalContext* globalCtx) { G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gDungeonDoorDL); } - if ((this->boxObjIdx > 0) && ((this->boxObjIdx = Object_GetIndex(&globalCtx->objectCtx, OBJECT_BOX)) > 0) && - Object_IsLoaded(&globalCtx->objectCtx, this->boxObjIdx)) { - gSPSegment(POLY_OPA_DISP++, 0x06, globalCtx->objectCtx.status[this->boxObjIdx].segment); - gSPSegment(POLY_OPA_DISP++, 0x08, &D_80116280[2]); - Matrix_Put(&mtx); - Matrix_Translate(147.0f, -245.0f, -453.0f, MTXMODE_APPLY); - Matrix_RotateY(M_PI / 2, MTXMODE_APPLY); - Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gTreasureChestBossKeyChestFrontDL); - Matrix_Put(&mtx); - Matrix_Translate(167.0f, -218.0f, -453.0f, MTXMODE_APPLY); - if (Flags_GetTreasure(globalCtx, 0xE)) { - Matrix_RotateZ(0x3500 * (M_PI / 0x8000), MTXMODE_APPLY); - } else { - Matrix_RotateZ(M_PI, MTXMODE_APPLY); - } - Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(globalCtx->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gTreasureChestBossKeyChestSideAndTopDL); - } CLOSE_DISPS(globalCtx->state.gfxCtx); } 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 8b2f10ebd..57a081dd2 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 @@ -48,6 +48,8 @@ void EnBox_AppearInit(EnBox*, GlobalContext*); void EnBox_AppearAnimation(EnBox*, GlobalContext*); void EnBox_WaitOpen(EnBox*, GlobalContext*); void EnBox_Open(EnBox*, GlobalContext*); +void EnBox_CreateExtraChestTextures(); +void EnBox_UpdateSizeAndTexture(EnBox*, GlobalContext*); const ActorInit En_Box_InitVars = { ACTOR_EN_BOX, @@ -72,6 +74,14 @@ static InitChainEntry sInitChain[] = { static UNK_TYPE sUnused; GetItemEntry sItem; +Gfx gSkullTreasureChestChestSideAndLidDL[116] = {0}; +Gfx gGoldTreasureChestChestSideAndLidDL[116] = {0}; +Gfx gKeyTreasureChestChestSideAndLidDL[116] = {0}; +Gfx gSkullTreasureChestChestFrontDL[128] = {0}; +Gfx gGoldTreasureChestChestFrontDL[128] = {0}; +Gfx gKeyTreasureChestChestFrontDL[128] = {0}; +u8 hasCreatedRandoChestTextures = 0; + void EnBox_SetupAction(EnBox* this, EnBoxActionFunc actionFunc) { this->actionFunc = actionFunc; } @@ -174,17 +184,11 @@ void EnBox_Init(Actor* thisx, GlobalContext* globalCtx2) { SkelAnime_Init(globalCtx, &this->skelanime, &gTreasureChestSkel, anim, this->jointTable, this->morphTable, 5); Animation_Change(&this->skelanime, anim, 1.5f, animFrameStart, endFrame, ANIMMODE_ONCE, 0.0f); - switch (this->type) { - case ENBOX_TYPE_SMALL: - case ENBOX_TYPE_6: - case ENBOX_TYPE_ROOM_CLEAR_SMALL: - case ENBOX_TYPE_SWITCH_FLAG_FALL_SMALL: - Actor_SetScale(&this->dyna.actor, 0.005f); - Actor_SetFocus(&this->dyna.actor, 20.0f); - break; - default: - Actor_SetScale(&this->dyna.actor, 0.01f); - Actor_SetFocus(&this->dyna.actor, 40.0f); + EnBox_UpdateSizeAndTexture(this, globalCtx); + // For SOH we spawn a chest actor instead of rendering the object from scratch for forest boss + // key chest, and it's up on the wall so disable gravity for it. + if (globalCtx->sceneNum == SCENE_BMORI1 && this->dyna.actor.params == 10222) { + this->movementFlags = ENBOX_MOVE_IMMOBILE; } } @@ -575,6 +579,8 @@ void EnBox_SpawnIceSmoke(EnBox* this, GlobalContext* globalCtx) { void EnBox_Update(Actor* thisx, GlobalContext* globalCtx) { EnBox* this = (EnBox*)thisx; + EnBox_UpdateSizeAndTexture(this, globalCtx); + if (this->movementFlags & ENBOX_MOVE_STICK_TO_GROUND) { this->movementFlags &= ~ENBOX_MOVE_STICK_TO_GROUND; EnBox_ClipToGround(this, globalCtx); @@ -604,6 +610,154 @@ void EnBox_Update(Actor* thisx, GlobalContext* globalCtx) { this->iceSmokeTimer < 100) EnBox_SpawnIceSmoke(this, globalCtx); } +void EnBox_UpdateSizeAndTexture(EnBox* this, GlobalContext* globalCtx) { + EnBox_CreateExtraChestTextures(); + int cvar = CVar_GetS32("gChestSizeAndTextureMatchesContents", 0); + GetItemCategory getItemCategory; + + if (globalCtx->sceneNum != SCENE_TAKARAYA && cvar > 0) { + GetItemEntry getItemEntry = GET_ITEM_NONE; + + if (gSaveContext.n64ddFlag) { + getItemEntry = Randomizer_GetItemFromActorWithoutObtainabilityCheck(this->dyna.actor.id, globalCtx->sceneNum, this->dyna.actor.params, this->dyna.actor.params >> 5 & 0x7F); + } else { + getItemEntry = ItemTable_RetrieveEntry(MOD_NONE, this->dyna.actor.params >> 5 & 0x7F); + } + + getItemCategory = getItemEntry.getItemCategory; + // If they don't have bombchu's yet consider the bombchu item major + if (getItemEntry.gid == GID_BOMBCHU && INV_CONTENT(ITEM_BOMBCHU) != ITEM_BOMBCHU) { + getItemCategory = ITEM_CATEGORY_MAJOR; + } + } + + if (globalCtx->sceneNum != SCENE_TAKARAYA && (cvar == 1 || cvar == 3)) { + switch (getItemCategory) { + case ITEM_CATEGORY_JUNK: + case ITEM_CATEGORY_SMALL_KEY: + case ITEM_CATEGORY_SKULLTULA_TOKEN: + Actor_SetScale(&this->dyna.actor, 0.005f); + Actor_SetFocus(&this->dyna.actor, 20.0f); + break; + default: + Actor_SetScale(&this->dyna.actor, 0.01f); + Actor_SetFocus(&this->dyna.actor, 40.0f); + break; + } + } else { + switch (this->type) { + case ENBOX_TYPE_SMALL: + case ENBOX_TYPE_6: + case ENBOX_TYPE_ROOM_CLEAR_SMALL: + case ENBOX_TYPE_SWITCH_FLAG_FALL_SMALL: + Actor_SetScale(&this->dyna.actor, 0.005f); + Actor_SetFocus(&this->dyna.actor, 20.0f); + break; + default: + Actor_SetScale(&this->dyna.actor, 0.01f); + Actor_SetFocus(&this->dyna.actor, 40.0f); + } + } + + if (globalCtx->sceneNum != SCENE_TAKARAYA && (cvar == 1 || cvar == 2)) { + switch (getItemCategory) { + case ITEM_CATEGORY_MAJOR: + this->boxBodyDL = gGoldTreasureChestChestFrontDL; + this->boxLidDL = gGoldTreasureChestChestSideAndLidDL; + break; + case ITEM_CATEGORY_SKULLTULA_TOKEN: + this->boxBodyDL = gSkullTreasureChestChestFrontDL; + this->boxLidDL = gSkullTreasureChestChestSideAndLidDL; + break; + case ITEM_CATEGORY_SMALL_KEY: + this->boxBodyDL = gKeyTreasureChestChestFrontDL; + this->boxLidDL = gKeyTreasureChestChestSideAndLidDL; + break; + case ITEM_CATEGORY_BOSS_KEY: + this->boxBodyDL = gTreasureChestBossKeyChestFrontDL; + this->boxLidDL = gTreasureChestBossKeyChestSideAndTopDL; + break; + case ITEM_CATEGORY_LESSER: + case ITEM_CATEGORY_JUNK: + default: + this->boxBodyDL = gTreasureChestChestFrontDL; + this->boxLidDL = gTreasureChestChestSideAndLidDL; + break; + } + } else { + if (this->type != ENBOX_TYPE_DECORATED_BIG) { + this->boxBodyDL = gTreasureChestChestFrontDL; + this->boxLidDL = gTreasureChestChestSideAndLidDL; + } else { + this->boxBodyDL = gTreasureChestBossKeyChestFrontDL; + this->boxLidDL = gTreasureChestBossKeyChestSideAndTopDL; + } + } +} + +void EnBox_CreateExtraChestTextures() { + if (hasCreatedRandoChestTextures) return; + Gfx gTreasureChestChestTextures[] = { + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, ResourceMgr_LoadFileRaw("assets/objects/object_box/gSkullTreasureChestFrontTex")), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, ResourceMgr_LoadFileRaw("assets/objects/object_box/gSkullTreasureChestSideAndTopTex")), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, ResourceMgr_LoadFileRaw("assets/objects/object_box/gGoldTreasureChestFrontTex")), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, ResourceMgr_LoadFileRaw("assets/objects/object_box/gGoldTreasureChestSideAndTopTex")), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, ResourceMgr_LoadFileRaw("assets/objects/object_box/gKeyTreasureChestFrontTex")), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, ResourceMgr_LoadFileRaw("assets/objects/object_box/gKeyTreasureChestSideAndTopTex")), + }; + + Gfx* frontCmd = ResourceMgr_LoadGfxByName(gTreasureChestChestFrontDL); + int frontIndex = 0; + while (frontCmd->words.w0 >> 24 != G_ENDDL) { + gSkullTreasureChestChestFrontDL[frontIndex] = *frontCmd; + gGoldTreasureChestChestFrontDL[frontIndex] = *frontCmd; + gKeyTreasureChestChestFrontDL[frontIndex] = *frontCmd; + frontIndex++; + ++frontCmd; + } + gSkullTreasureChestChestFrontDL[frontIndex] = *frontCmd; + gGoldTreasureChestChestFrontDL[frontIndex] = *frontCmd; + gKeyTreasureChestChestFrontDL[frontIndex] = *frontCmd; + + gSkullTreasureChestChestFrontDL[5] = gTreasureChestChestTextures[0]; + gSkullTreasureChestChestFrontDL[23] = gTreasureChestChestTextures[1]; + gSkullTreasureChestChestFrontDL[37] = gTreasureChestChestTextures[0]; + gSkullTreasureChestChestFrontDL[50] = gTreasureChestChestTextures[1]; + gGoldTreasureChestChestFrontDL[5] = gTreasureChestChestTextures[2]; + gGoldTreasureChestChestFrontDL[23] = gTreasureChestChestTextures[3]; + gGoldTreasureChestChestFrontDL[37] = gTreasureChestChestTextures[2]; + gGoldTreasureChestChestFrontDL[50] = gTreasureChestChestTextures[3]; + gKeyTreasureChestChestFrontDL[5] = gTreasureChestChestTextures[4]; + gKeyTreasureChestChestFrontDL[23] = gTreasureChestChestTextures[5]; + gKeyTreasureChestChestFrontDL[37] = gTreasureChestChestTextures[4]; + gKeyTreasureChestChestFrontDL[50] = gTreasureChestChestTextures[5]; + + Gfx* sideCmd = ResourceMgr_LoadGfxByName(gTreasureChestChestSideAndLidDL); + int sideIndex = 0; + while (sideCmd->words.w0 >> 24 != G_ENDDL) { + gSkullTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; + gGoldTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; + gKeyTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; + sideIndex++; + ++sideCmd; + } + gSkullTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; + gGoldTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; + gKeyTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; + + gSkullTreasureChestChestSideAndLidDL[5] = gTreasureChestChestTextures[0]; + gSkullTreasureChestChestSideAndLidDL[29] = gTreasureChestChestTextures[1]; + gSkullTreasureChestChestSideAndLidDL[45] = gTreasureChestChestTextures[0]; + gGoldTreasureChestChestSideAndLidDL[5] = gTreasureChestChestTextures[2]; + gGoldTreasureChestChestSideAndLidDL[29] = gTreasureChestChestTextures[3]; + gGoldTreasureChestChestSideAndLidDL[45] = gTreasureChestChestTextures[2]; + gKeyTreasureChestChestSideAndLidDL[5] = gTreasureChestChestTextures[4]; + gKeyTreasureChestChestSideAndLidDL[29] = gTreasureChestChestTextures[5]; + gKeyTreasureChestChestSideAndLidDL[45] = gTreasureChestChestTextures[4]; + + hasCreatedRandoChestTextures = 1; +} + void EnBox_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx, Gfx** gfx) { EnBox* this = (EnBox*)thisx; s32 pad; @@ -611,19 +765,11 @@ void EnBox_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Ve if (limbIndex == 1) { gSPMatrix((*gfx)++, MATRIX_NEWMTX(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - if (this->type != ENBOX_TYPE_DECORATED_BIG) { - gSPDisplayList((*gfx)++, gTreasureChestChestFrontDL); - } else { - gSPDisplayList((*gfx)++, gTreasureChestBossKeyChestFrontDL); - } + gSPDisplayList((*gfx)++, this->boxBodyDL); } else if (limbIndex == 3) { gSPMatrix((*gfx)++, MATRIX_NEWMTX(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - if (this->type != ENBOX_TYPE_DECORATED_BIG) { - gSPDisplayList((*gfx)++, gTreasureChestChestSideAndLidDL); - } else { - gSPDisplayList((*gfx)++, gTreasureChestBossKeyChestSideAndTopDL); - } + gSPDisplayList((*gfx)++, this->boxLidDL); } } diff --git a/soh/src/overlays/actors/ovl_En_Box/z_en_box.h b/soh/src/overlays/actors/ovl_En_Box/z_en_box.h index f6e698ed5..12423c4d1 100644 --- a/soh/src/overlays/actors/ovl_En_Box/z_en_box.h +++ b/soh/src/overlays/actors/ovl_En_Box/z_en_box.h @@ -45,6 +45,8 @@ typedef struct EnBox { /* 0x01F9 */ u8 type; /* 0x01FA */ u8 iceSmokeTimer; /* 0x01FB */ u8 unk_1FB; + /* */ Gfx* boxLidDL; + /* */ Gfx* boxBodyDL; } EnBox; // size = 0x01FC #endif