From 93112c732cf2266e604bd950e524ab0a52bae35b Mon Sep 17 00:00:00 2001 From: Jesper Arvidsson Date: Mon, 29 Dec 2025 21:58:10 +0100 Subject: [PATCH 1/5] First Build --- .../object_box/gBoxChestCornerHealthTex | Bin 0 -> 2140 bytes .../objects/object_box/gBoxChestCornerJunkTex | Bin 0 -> 2140 bytes .../object_box/gBoxChestCornerLesserTex | Bin 0 -> 2140 bytes .../object_box/gBoxChestCornerMajorTex | Bin 0 -> 2140 bytes .../objects/object_box/gBoxChestCornerMaskTex | Bin 0 -> 2140 bytes .../object_box/gBoxChestCornerSkullTokenTex | Bin 0 -> 2140 bytes .../object_box/gBoxChestCornerSmallKeyTex | Bin 0 -> 2140 bytes .../object_box/gBoxChestCornerStrayFairyTex | Bin 0 -> 2140 bytes .../objects/object_box/gBoxChestLockHealthTex | Bin 0 -> 4188 bytes .../objects/object_box/gBoxChestLockJunkTex | Bin 0 -> 4188 bytes .../objects/object_box/gBoxChestLockLesserTex | Bin 0 -> 4188 bytes .../objects/object_box/gBoxChestLockMajorTex | Bin 0 -> 4188 bytes .../objects/object_box/gBoxChestLockMaskTex | Bin 0 -> 4188 bytes .../object_box/gBoxChestLockSkullTokenTex | Bin 0 -> 4188 bytes .../object_box/gBoxChestLockSmallKeyTex | Bin 0 -> 4188 bytes .../object_box/gBoxChestLockStrayFairyTex | Bin 0 -> 4188 bytes .../objects/object_box/gChestBodyFairyDL | 13 ++ .../object_box/gChestBodyFairyDL_tri_0 | 33 ++++ .../object_box/gChestBodyFairyDL_tri_1 | 7 + .../object_box/gChestBodyFairyDL_vtx_0 | 46 +++++ .../object_box/gChestBodyFairyDL_vtx_1 | 6 + .../objects/object_box/gChestBodyHeartDL | 13 ++ .../object_box/gChestBodyHeartDL_tri_0 | 33 ++++ .../object_box/gChestBodyHeartDL_tri_1 | 7 + .../object_box/gChestBodyHeartDL_vtx_0 | 46 +++++ .../object_box/gChestBodyHeartDL_vtx_1 | 6 + .../objects/object_box/gChestBodyJunkDL | 13 ++ .../objects/object_box/gChestBodyJunkDL_tri_0 | 33 ++++ .../objects/object_box/gChestBodyJunkDL_tri_1 | 7 + .../objects/object_box/gChestBodyJunkDL_vtx_0 | 46 +++++ .../objects/object_box/gChestBodyJunkDL_vtx_1 | 6 + .../objects/object_box/gChestBodyMajorDL | 13 ++ .../object_box/gChestBodyMajorDL_tri_0 | 33 ++++ .../object_box/gChestBodyMajorDL_tri_1 | 7 + .../object_box/gChestBodyMajorDL_vtx_0 | 46 +++++ .../object_box/gChestBodyMajorDL_vtx_1 | 6 + .../objects/object_box/gChestBodyMaskDL | 13 ++ .../objects/object_box/gChestBodyMaskDL_tri_0 | 33 ++++ .../objects/object_box/gChestBodyMaskDL_tri_1 | 7 + .../objects/object_box/gChestBodyMaskDL_vtx_0 | 46 +++++ .../objects/object_box/gChestBodyMaskDL_vtx_1 | 6 + .../objects/object_box/gChestBodyMinorDL | 13 ++ .../object_box/gChestBodyMinorDL_tri_0 | 33 ++++ .../object_box/gChestBodyMinorDL_tri_1 | 7 + .../object_box/gChestBodyMinorDL_vtx_0 | 46 +++++ .../object_box/gChestBodyMinorDL_vtx_1 | 6 + .../objects/object_box/gChestBodySmallKeyDL | 13 ++ .../object_box/gChestBodySmallKeyDL_tri_0 | 33 ++++ .../object_box/gChestBodySmallKeyDL_tri_1 | 7 + .../object_box/gChestBodySmallKeyDL_vtx_0 | 46 +++++ .../object_box/gChestBodySmallKeyDL_vtx_1 | 6 + .../objects/object_box/gChestBodyTokenDL | 13 ++ .../object_box/gChestBodyTokenDL_tri_0 | 33 ++++ .../object_box/gChestBodyTokenDL_tri_1 | 7 + .../object_box/gChestBodyTokenDL_vtx_0 | 46 +++++ .../object_box/gChestBodyTokenDL_vtx_1 | 6 + .../objects/object_box/gChestLidFairyDL | 11 ++ .../objects/object_box/gChestLidFairyDL_tri_0 | 128 ++++++++++++ .../objects/object_box/gChestLidFairyDL_vtx_0 | 187 ++++++++++++++++++ .../objects/object_box/gChestLidHeartDL | 11 ++ .../objects/object_box/gChestLidHeartDL_tri_0 | 128 ++++++++++++ .../objects/object_box/gChestLidHeartDL_tri_1 | 7 + .../objects/object_box/gChestLidHeartDL_vtx_0 | 187 ++++++++++++++++++ .../objects/object_box/gChestLidHeartDL_vtx_1 | 6 + .../custom/objects/object_box/gChestLidJunkDL | 11 ++ .../objects/object_box/gChestLidJunkDL_tri_0 | 128 ++++++++++++ .../objects/object_box/gChestLidJunkDL_vtx_0 | 187 ++++++++++++++++++ .../objects/object_box/gChestLidMajorDL | 11 ++ .../objects/object_box/gChestLidMajorDL_tri_0 | 128 ++++++++++++ .../objects/object_box/gChestLidMajorDL_vtx_0 | 187 ++++++++++++++++++ .../custom/objects/object_box/gChestLidMaskDL | 11 ++ .../objects/object_box/gChestLidMaskDL_tri_0 | 128 ++++++++++++ .../objects/object_box/gChestLidMaskDL_vtx_0 | 187 ++++++++++++++++++ .../objects/object_box/gChestLidMinorDL | 11 ++ .../objects/object_box/gChestLidMinorDL_tri_0 | 128 ++++++++++++ .../objects/object_box/gChestLidMinorDL_vtx_0 | 187 ++++++++++++++++++ .../objects/object_box/gChestLidSmallKeyDL | 11 ++ .../object_box/gChestLidSmallKeyDL_tri_0 | 128 ++++++++++++ .../object_box/gChestLidSmallKeyDL_vtx_0 | 187 ++++++++++++++++++ .../objects/object_box/gChestLidTokenDL | 11 ++ .../objects/object_box/gChestLidTokenDL_tri_0 | 128 ++++++++++++ .../objects/object_box/gChestLidTokenDL_vtx_0 | 187 ++++++++++++++++++ .../object_box/mat_gChestBodyFairyDL_Front | 21 ++ .../object_box/mat_gChestBodyFairyDL_Sides | 21 ++ .../object_box/mat_gChestBodyHeartDL_Front | 21 ++ .../object_box/mat_gChestBodyHeartDL_Sides | 21 ++ .../object_box/mat_gChestBodyJunkDL_Front | 21 ++ .../object_box/mat_gChestBodyJunkDL_Sides | 21 ++ .../object_box/mat_gChestBodyMajorDL_Front | 21 ++ .../object_box/mat_gChestBodyMajorDL_Sides | 21 ++ .../object_box/mat_gChestBodyMaskDL_Front | 21 ++ .../object_box/mat_gChestBodyMaskDL_Sides | 21 ++ .../object_box/mat_gChestBodyMinorDL_Front | 21 ++ .../object_box/mat_gChestBodyMinorDL_Sides | 21 ++ .../object_box/mat_gChestBodySmallKeyDL_Front | 21 ++ .../object_box/mat_gChestBodySmallKeyDL_Sides | 21 ++ .../object_box/mat_gChestBodyTokenDL_Front | 21 ++ .../object_box/mat_gChestBodyTokenDL_Sides | 21 ++ .../object_box/mat_gChestLidFairyDL_Sides | 21 ++ .../object_box/mat_gChestLidHeartDL_Front | 21 ++ .../object_box/mat_gChestLidHeartDL_Sides | 21 ++ .../object_box/mat_gChestLidJunkDL_Sides | 21 ++ .../object_box/mat_gChestLidMajorDL_Sides | 21 ++ .../object_box/mat_gChestLidMaskDL_Sides | 21 ++ .../object_box/mat_gChestLidMinorDL_Sides | 21 ++ .../object_box/mat_gChestLidSmallKeyDL_Sides | 21 ++ .../object_box/mat_gChestLidTokenDL_Sides | 21 ++ soh/assets/soh_assets.h | 36 ++++ soh/src/overlays/actors/ovl_En_Box/z_en_box.c | 118 +++++------ 109 files changed, 4084 insertions(+), 56 deletions(-) create mode 100644 soh/assets/custom/objects/object_box/gBoxChestCornerHealthTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestCornerJunkTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestCornerLesserTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestCornerMajorTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestCornerMaskTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestCornerSkullTokenTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestCornerSmallKeyTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestCornerStrayFairyTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestLockHealthTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestLockJunkTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestLockLesserTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestLockMajorTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestLockMaskTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestLockSkullTokenTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestLockSmallKeyTex create mode 100644 soh/assets/custom/objects/object_box/gBoxChestLockStrayFairyTex create mode 100644 soh/assets/custom/objects/object_box/gChestBodyFairyDL create mode 100644 soh/assets/custom/objects/object_box/gChestBodyFairyDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyFairyDL_tri_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyFairyDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyFairyDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyHeartDL create mode 100644 soh/assets/custom/objects/object_box/gChestBodyHeartDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyHeartDL_tri_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyHeartDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyHeartDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyJunkDL create mode 100644 soh/assets/custom/objects/object_box/gChestBodyJunkDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyJunkDL_tri_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyJunkDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyJunkDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMajorDL create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMajorDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMajorDL_tri_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMajorDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMajorDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMaskDL create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMaskDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMaskDL_tri_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMaskDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMaskDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMinorDL create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMinorDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMinorDL_tri_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMinorDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyMinorDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodySmallKeyDL create mode 100644 soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_tri_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyTokenDL create mode 100644 soh/assets/custom/objects/object_box/gChestBodyTokenDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyTokenDL_tri_1 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyTokenDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestBodyTokenDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_box/gChestLidFairyDL create mode 100644 soh/assets/custom/objects/object_box/gChestLidFairyDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidFairyDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidHeartDL create mode 100644 soh/assets/custom/objects/object_box/gChestLidHeartDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidHeartDL_tri_1 create mode 100644 soh/assets/custom/objects/object_box/gChestLidHeartDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidHeartDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_box/gChestLidJunkDL create mode 100644 soh/assets/custom/objects/object_box/gChestLidJunkDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidJunkDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidMajorDL create mode 100644 soh/assets/custom/objects/object_box/gChestLidMajorDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidMajorDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidMaskDL create mode 100644 soh/assets/custom/objects/object_box/gChestLidMaskDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidMaskDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidMinorDL create mode 100644 soh/assets/custom/objects/object_box/gChestLidMinorDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidMinorDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidSmallKeyDL create mode 100644 soh/assets/custom/objects/object_box/gChestLidSmallKeyDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidSmallKeyDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidTokenDL create mode 100644 soh/assets/custom/objects/object_box/gChestLidTokenDL_tri_0 create mode 100644 soh/assets/custom/objects/object_box/gChestLidTokenDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodyFairyDL_Front create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodyFairyDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodyHeartDL_Front create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodyHeartDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodyJunkDL_Front create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodyJunkDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodyMajorDL_Front create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodyMajorDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodyMaskDL_Front create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodyMaskDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodyMinorDL_Front create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodyMinorDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodySmallKeyDL_Front create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodySmallKeyDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodyTokenDL_Front create mode 100644 soh/assets/custom/objects/object_box/mat_gChestBodyTokenDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestLidFairyDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestLidHeartDL_Front create mode 100644 soh/assets/custom/objects/object_box/mat_gChestLidHeartDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestLidJunkDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestLidMajorDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestLidMaskDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestLidMinorDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestLidSmallKeyDL_Sides create mode 100644 soh/assets/custom/objects/object_box/mat_gChestLidTokenDL_Sides diff --git a/soh/assets/custom/objects/object_box/gBoxChestCornerHealthTex b/soh/assets/custom/objects/object_box/gBoxChestCornerHealthTex new file mode 100644 index 0000000000000000000000000000000000000000..19ef32122dcce7f492b60a0fa5e17a9181cdc572 GIT binary patch literal 2140 zcma)7ziaDO6m~n+yur_ikO&i=oh+%RIG&7$B1{G$LJ_V=WfMXavUt>}smOSFLU<5D z1QATIv-xdr?pA__AWV1&^JtBEWbVJv@4GiYN~iiD>H6q?=X~eKJt`Cmgi4$DT#71~ zo1q?<4^GJ`nW3Gz=Ai6$UDJ*H*eMH5*Z<;0_5&mvl*D_}i};kh?JT-U*U=>1;CVCK zpY6~0({*|i_5Ixc;^&c?LZ9}<)sOm-4Z+>dCEh8|uZT)F>3X`E?N2xJ%UNw!qXl5r zv_+j1cshghKd#>J^h_-+P+*04?xepn;U9Wh5Pl|7|Hhx}iQ_fD`g}LPk{o6=ti)Pq z@1%vM=nf1zpZlHqoI=Y!(k_Fi?I}jOxuqFOO|AKeAde|}!76*%# z(JMP$r`szDOE-wCKZHfve2#1XHHx*sZ<*o1(tvNgYZQrh6L00Mf(kPdRKRUDRLKfF zCg}uP^4V}D@Rk`4RX6FCDP}f^-FRR*-GMdeI*Oy{p&n|XW|*0sIm!TfH+GXjw^z0^ z;L&k<7*qnV^m4pQ+!*{7T5x09Gc)Z(AM0c0hBjeU2rcX>>_?{@ZBW5Ua0clQD||8n zFNYt&g;x0wLJMR^vE+Gp-`N@M9KS!V-XAWQ0p2MG_ph?xs`^KDgq@=*MEoB~e50t3 z8}EL^opuo&c%uS>yS)T=WPo?g&XPh~Y^QU#6$Sdr>D;jx_`a_A7)Z7X25pV@3YO zIo6Op_6xdAk>3_grw1>NZ1{*|=Q3h99;%oOI1St@PGCIfdP$%Lm7(h6go-cI)PCSB z$DGGZhXo4}qmrCBr~{Z18DN4Tm&ma|3hV42)i}C#N@@RN9&M*-`lp}6gFqp6%qwDAF<@e_@5Jfkq)Pq)bVNk8 literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_box/gBoxChestCornerJunkTex b/soh/assets/custom/objects/object_box/gBoxChestCornerJunkTex new file mode 100644 index 0000000000000000000000000000000000000000..6516ae7ea3f04616dc309847edc94557880a2ec1 GIT binary patch literal 2140 zcmb7Fv5wm?47D2^Vj#|3(yyNl1|NedQmfQFc^!;;D_@^q0 zZ@)ykl}g|A&3QbJZn|tPo7?Gjx?k^Cye}I!xe05q=^LP1_gX5pTS4D7t?Qd5x*wqz zH1MsvUt6bma#O3^!cM)#zm_>aBkxw8XH>kz4m~53_?5X^73D|8qN}nx)Q(aeyp+&b zc|K6YsvZ}bi7^9u%VW6QDCq;mqkZ;WkPQC+@c z$pv@AdR*>S_c}-K*4CQ+pj=$Da~)@Uig6NOmCvl)Sr%vv?p!p?rPULU`n3q=7+x$= zYgp=Uf8-4r@K4t7a!iK#Kk&Dc?>~(n_kb7O5$DmP+F|5)!^YDK=aQk*Nkxxg9;~Au z-jM11u|5QDWHkCiBrzVZ!F`ta27Vj-spWAIJJ&s!Cw$zZ=y@kN^Mx literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_box/gBoxChestCornerLesserTex b/soh/assets/custom/objects/object_box/gBoxChestCornerLesserTex new file mode 100644 index 0000000000000000000000000000000000000000..09389403826cd4d7d7c1273a0e72debf7167f085 GIT binary patch literal 2140 zcmb7Fv5wk65Va#AK?kDYL}NN%=j(tb*eDW56CDmxB#Vk43EKK})rqgjFQl=k5f!>7 zzmQ+Zdow$0bCIHiC$r<(eKWH&v+F2|qOYI6e2y{x`tkiIABg|_`+${+f0Xp?V-(@( zM$!GV;N|}1;T&+859Y&STWr_I&2{ru-BsiLZeLa7>TdJ4J{GUVc3#ehST!Jf(tCIg zTv#D{cA50%gSD}%{SNH$=B*e~UwAh8liq#@3&A_B7Nu%8*OI=$_TI0m2Op~l#C_}k z0&Q88v-6}^3=uoL1~y`+e#Qtr5P$IeaE{`xAc_f*h!wc%wy^dSx%&aET0l?x&)j`mbcWUbyh3ixH>M}qV{l*1rL4NG4PRdW+^ptm|rv+i&pm`LK*+{_-w2RvKf5sl{wEfj9d3)?U3Cus@ zKUj`9B4@w<17w| zZJ9Z;*T;8}bH6p<_pPJ#lj^NLyyMo#)XmVnc)*Zsk!z3ChW6OQ=yFsc_x<cktiyleV5Wfh#D$+^6%Rmnq`NpiWL$0M)|ZFZ|t zv|(%FCSQ8HTm88n8J3l{ns2I84Qr^~!nN{ks7A5XMaRT>OJx2PdOtV!rt;)J)S4Ek zF^K;dZ*j7e+kL10IWH^yjVpJpXhICjbZN4#)^AJ07pvHx-q~Uy?3N6L#gpdxZE5a# r&NugcW5vgOV~dfjxA;z#?Jvsz$##D2M2Sa6a1(_^ZRg5zkmkPuwk|t2 literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_box/gBoxChestCornerMajorTex b/soh/assets/custom/objects/object_box/gBoxChestCornerMajorTex new file mode 100644 index 0000000000000000000000000000000000000000..a95405ab8ea9e35bc09994f5b5e1228a0dc4c7b8 GIT binary patch literal 2140 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 LY{x`A%3AmrO@!VS literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockHealthTex b/soh/assets/custom/objects/object_box/gBoxChestLockHealthTex new file mode 100644 index 0000000000000000000000000000000000000000..aa7d744c11d958f4932ac20f0ee825ada8ea6980 GIT binary patch literal 4188 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 Sp3(Qc2Obr27++_WpZ@{409f+? literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockJunkTex b/soh/assets/custom/objects/object_box/gBoxChestLockJunkTex new file mode 100644 index 0000000000000000000000000000000000000000..5b12512b958df7d1ec33a37abf4ae9a2057763c4 GIT binary patch literal 4188 zcma)9v2GhV5M7^(6_CPd0;^QJrAt+JTL_R02!@3KcT#1mlUxa^gln>JAtWjcNU417 zwfThuT)1$NDo}gf)%k_+&Es%LNcq9*|M~JS{;vDe zzh9hW$NhhEfBruFS`_a8wkU3%W~VtVdW+s_y;?Ufpigf;z1a@8!^Z~_`WORmwZ3`E zH2`gRNXB@eQ~WXOvtGYh^kVC3fA!LDR%^AsTIcB5DXjOK$A^9s!NNojiF`(n;I=TPLqm zaiY`;J&YK>-8kDRi6_olL%Z<7JW!9+KCqo<)zEpizKub`NaTb6F|R5!so)p1^6&Kr zeCN3;bD|ctZ%B;$(SWbYi^0Vp*MN6wL2F#~&*DcsbaXd?+#9vB)hD$=qv1Qx;C46i z^tf35(6-DX_>VV}iF@j+wT!hy!0;hA=}dM0hDI;M)bQSVDo0)PEafm8m_Mq2c1oX2 z#_YnDS)>Fb$oO&fx!PovL^T?`4E3WU9n~1@zrJ>I4k};AEPw6V=|l|SttYNjj`}g- zyYV2Q>jyK^d~1uip>NsLKHIc@Vky;dtfD^O{`r^Dj}By=1iWCsp4 zT$Oj{@L;-E`-kht>u`HF_vx@YoEG9;?B89UK?B!MOLlik>!~9xP8HOYduHPa#edyV-XX^y>hyR!bBoMzvkM{NCb1NjAI#@08jtIC>)KBf|XR>1kc;3e| zbW)JzP7vZIV={l#&&9y@G&CpE81FTCE&5ks#TSU(dctL<{CcrJlCXgJkS{I zV}-bLK~|Bky!a$K-WUJzr8(;{D|)W{YzzOnex?4rmB`h`p7Bd}Ci%-}_u8yY zj`71+v_w^MU|ja>B+of6BN9L0!~)363=^z;<3LO**R#vm<#*F!++|I z`G!KTE8ljtecx?TyjGab6Z)vlqX*rO_%`Glp8tbazXNqC8v&_U!KF$$V;_c zRU>~`1Gtg#Ze@2=+%n-CG7PEX)VTX3?uzjp_3>dlT**D}7+zMa+%loDd6B!Sx39O% n?T}g(AKNBJM;N`sJF?75Zos+!x&8c(2_JaJR_m|Ne$o2@+fMTt literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockLesserTex b/soh/assets/custom/objects/object_box/gBoxChestLockLesserTex new file mode 100644 index 0000000000000000000000000000000000000000..d657c19f6bac8d09a0de4574a57061f3df750e34 GIT binary patch literal 4188 zcma)9&1xe@5S9XiR|kWI5AouQe3NccPLeLsNCML8TlQ|UD%3O6-CzB6Rd-h|m&^Uu{q>hTp8x#y z`EUO5`rW@DFtdbz3xECn@pCSR|5h$nxvVTJ%i0<>i_Kzt0Gjruy-$ZvhtI>e!`;*2 z=?Q2!+#S9>d_H{YedBy$!U!_BHupeY*(x z+rYy%`ly1Llx6tL`mcJ=S#RDG{Y`#3EypFHo!C)+M@hbQj4kGUkT#}#mAsYzHoeIk zZDnulDP{OlrwpzkWzsrcr>xKEN4!ce$JI_Xt+EBx(<*EclJ6?GW0W(}x{!W(`Q=#q zrJb|oT%83pDK2;H+l@dolV43+i-SdrH0QrgQb}T&=;bs}G&y?t^?4E{(E)gngbz89 zgi9Sys-fJnT=s z=HQLFjfnG|7tEjLQ~DzCUm5s1{%Gg?XK064F4l@S*YI_f4y^D1FX1M<=sD_PYtJ!> z1(nb2yDE1$UsqkQ3*{g)F~$fYu@^KKEyaG#z8x34K0=uvj2Xpct$srnTYt&Et8eGd ztC4sswm$EFNK4D)nnDs=5Ov{~^h%G8qyK}=u=s^NL6pRZg(QMUBq|wqb&2UD(imh+ z;Z5w<{A2tx14tS-h$F^hSH84GPaOUEO?9 z`6bQ&j%B8-uR{=JYft=WqrX4exE1`}W`@_8V5?jNMWn19*G+bT)-36MxjF7m#*^gT z{k!`BFS?5c8P@5OeIw3i=i?-rT-xcKS zLGow$MrK-G*lF|nxdlA2SpAF1*!Jb5oGP+RiE zwfxsv(h44L5;g2muW0-vkzYUJ#lt$+uO2ZZ<}SIAu>QwqUv84<_R;x&rFgE5Tf5ZZ zbR~h+HIY%^&kM)h^JJ7@1@0%~+LHGT%|D);wu+K9_y$+)lZyp2c3s&8bT^Rw;v-uAg;Z;6anmupNbwq&ChPi88^)-#*ngTuz3)(e+8>f}z}&f^ zjGOKy#FN?s#;;-x13bsjBXhsRx&IpfrH`A+bd#B2V#EK#Y*Qe-{e%iIGzt$#_s z$@lw5;5o5cB1%qmJr#V*`v+r>H+{h~DgxiTnYaV+WPi;k#OwWm>&v@aYwpi6dy6B9 zU*QIhn8Wi=>y+Nq-9I27vjlB8yG8NIbCvx{No4r;6gcvvmh*%30H>*)qXE8~ob~tn z_#f}%x!>J=}*ZgJamyTEw{B ziToqhS@4_q*lY`*v@0aN8#bbb$wwta4vh5>xAyM5Bhi7|2z7AsrOrWxxQjDPPC?EQ zZk98+sR)kofjr~8_Ne}>(okiB1I{1BF0+VlE~kQ1Nlzm;2lEuq96&`TH7cq^t5J6c zs8X#;Y!8~-y4SpH+f&UThtF!<_JCZqMrEDnajXq>*JfXD+E{t{R%H%%m8;=H={jQk mT#dR`W3x)6RZ;;Cd`L8PUlcCn=T4AHc47E48_WT!?{M2Ls literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockMajorTex b/soh/assets/custom/objects/object_box/gBoxChestLockMajorTex new file mode 100644 index 0000000000000000000000000000000000000000..8873ab192b45d7b32dafbc05399f5187a5f2d706 GIT binary patch literal 4188 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 literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockSkullTokenTex b/soh/assets/custom/objects/object_box/gBoxChestLockSkullTokenTex new file mode 100644 index 0000000000000000000000000000000000000000..bcd26d00313275fa42cd544fa653aeb6054af1f8 GIT binary patch literal 4188 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 lW7C#MRwWy7vZe0+5BdMGp&#gcN9P+hcHGri literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockSmallKeyTex b/soh/assets/custom/objects/object_box/gBoxChestLockSmallKeyTex new file mode 100644 index 0000000000000000000000000000000000000000..95bd6c6f1b0eeccfe1c9a449a3d64a217d3a2f73 GIT binary patch literal 4188 zcma)BAx8O3oV071a&Z6=nW~oZlSY>$^pwc!YuBeZJ0fo{y>3YPBD4|N56Rz5n~4n}6}r z$N&594?5Y>>(6@m?{9yq)%0rAYSV+S$=X+b&-MB_YrbCNJ(s`xJ-?6guUf3(fB#3v zXvu}#tUYVbv+p(iw{P>zCnxLt9xX`EvqiZ&F3MSZdKf>qir%)jZ555s2yf1kn^w^( zIz>9b*IC;qqxQ*~PxEYbEW2fQb)2lL)7wrZKU#Lr8=+MsdUd2_crjVeGoQp(ysUFk z@=NklBiLqtFj+tBJCf8Tk3t>Y<8Nr#P}iohrMtHoE(7(Y(nQB_5UC{0h7LlGd+xp&sg;N*i}t#dN(o zu8z|KCx;iE;(FKH4lj`Rm0y7)cdKic*3)`#r%O8Ui73-Y0=`O_%7=^d<9dag5|eD zME(#FXs(XrhuHG_=uJ=Y_T*1Tc#%!?Vg2r1g(Gn&lEJOBhWzjXELX?wIZ}7GmUje- zO!*7-fwJHWG{}khAo*S1gqvi{o*8Xo80aL@AcWt8(>L_l|0Kv4ed8Sd`NC`B2q$^} zjz`X>^09@x!cX#?BR&xJrIWk6cOU=G9el-m;wN$}3Go8#l{6m+q#8#t_iDlLX(HJ!t^F3x_ zp#JGzN0nL{`SIQeprNW5StEC;&I`FJB7BnG0lm?-elH&pSRK>%6~lDeERB^yygX0)^h{69sY*)+T$-pEs|f~RXS37=J| z(?izu)XneF5ar3~;!`>RKXaIvshr51q*!TEAP?d&03Y&u&vfoge=*+I)Qp$|Tg+py zY=p(9S9vnge*1g*>0x*YYhW3f^AzMx#e2z5{=uYTGw{^0|M=sLqa~|m$?%f>f|KKK zeZ}N{5x&A6&cdMa{(JeX*-#f0<96AVF=j@?FHN^9mPS~KBgn%b^VfR>b=a?R-`kFs zaUUqVpEa35tbYy?NywX29N0w$Ob?D{^uZmhRTR}k^(1DJGGoX4Dlg*WJgYKQcHcYy z=EFqYBUX+l(sZ2;sI}kr5@8C9!i!^T{1oM>-tkhgQ={Sw@{{{U)y?G73-dv9>5`0s zRZEgFg$`K*b3n9(V;tEg+3g|4PV*|mIc>ls?* zOz}2C`e=FG5i{8d^#4oNB*U?8676bCm%CeabnPWDiP{y9!swZ-gCHFdz0570e?bGe z(AE{0fb>jFia>qR%VbGBB%Vdtf6MlOeKrj`RMmxVoNKl`ID&`LrKvc)NF?9evQw4a zdAlQSR^3eU6^_yZUd|Bm-m*Z+=g4>x!VB^<Kb57gdzXPMx_nuiy7Dmj!ZTbQAgQAKi1qY z=$v#Av}>c(){OinXG6qyu$gD*!cLS2GvA3blR2$v@jla5L@m&p@vBul?5ROlOL~ew zxuIWp{=mC9|GMYny{FA4AAMj(Hv$Zu9^g0K(f-r7!b|t9^APtVHtx|fzbD6R%ULrC zZvqizS1^XCoqy!%3XAgL+le8HuG-jlcz_kxGH0fT@Pa&2{INsmZ?3pu)SLdvoXBFl88{06oZ13m@)XM0YO~FqaJX6TJ_z#cRpO9gn zNJ6Gc{dx2AhI|KAFbGxCU@*MYvzD|x><2HfO3y`=jgI8O7p_pJo7~d$x4wFUS!peB z4hCXd9_oDf%FayG#V>PtVcWTS&%=J6<@Z>DCDaLAS3Stf^l|h&Z!fZW7N4P>-dN!;a!kzl XByMlwdEUKKzW$Gv;(L@v!+8H6+$T_S literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockStrayFairyTex b/soh/assets/custom/objects/object_box/gBoxChestLockStrayFairyTex new file mode 100644 index 0000000000000000000000000000000000000000..662451f5a87c3264015e15121263f31e89518942 GIT binary patch literal 4188 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 literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_box/gChestBodyFairyDL b/soh/assets/custom/objects/object_box/gChestBodyFairyDL new file mode 100644 index 00000000000..4d57ef81b24 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyFairyDL @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyFairyDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_tri_0 new file mode 100644 index 00000000000..80f48e5a62b --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_tri_0 @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyFairyDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_tri_1 new file mode 100644 index 00000000000..58fe1eaa15c --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_tri_1 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyFairyDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_vtx_0 new file mode 100644 index 00000000000..3ab83b21e4d --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_vtx_0 @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyFairyDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_vtx_1 new file mode 100644 index 00000000000..d804c927222 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_vtx_1 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyHeartDL b/soh/assets/custom/objects/object_box/gChestBodyHeartDL new file mode 100644 index 00000000000..8274b7b9125 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyHeartDL @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyHeartDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_tri_0 new file mode 100644 index 00000000000..16a977ac8a8 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_tri_0 @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyHeartDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_tri_1 new file mode 100644 index 00000000000..198755bf37b --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_tri_1 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyHeartDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_vtx_0 new file mode 100644 index 00000000000..3ab83b21e4d --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_vtx_0 @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyHeartDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_vtx_1 new file mode 100644 index 00000000000..d804c927222 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_vtx_1 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyJunkDL b/soh/assets/custom/objects/object_box/gChestBodyJunkDL new file mode 100644 index 00000000000..19347988547 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyJunkDL @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyJunkDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_tri_0 new file mode 100644 index 00000000000..ecbf68afd3b --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_tri_0 @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyJunkDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_tri_1 new file mode 100644 index 00000000000..b86a8ddf1e2 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_tri_1 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyJunkDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_vtx_0 new file mode 100644 index 00000000000..3ab83b21e4d --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_vtx_0 @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyJunkDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_vtx_1 new file mode 100644 index 00000000000..d804c927222 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_vtx_1 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMajorDL b/soh/assets/custom/objects/object_box/gChestBodyMajorDL new file mode 100644 index 00000000000..e6d43964e74 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMajorDL @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMajorDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_tri_0 new file mode 100644 index 00000000000..7ba89ed2f4f --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_tri_0 @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMajorDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_tri_1 new file mode 100644 index 00000000000..0520b4ced97 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_tri_1 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMajorDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_vtx_0 new file mode 100644 index 00000000000..3ab83b21e4d --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_vtx_0 @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMajorDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_vtx_1 new file mode 100644 index 00000000000..d804c927222 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_vtx_1 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMaskDL b/soh/assets/custom/objects/object_box/gChestBodyMaskDL new file mode 100644 index 00000000000..e7e50148854 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMaskDL @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMaskDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_tri_0 new file mode 100644 index 00000000000..5f08fa47885 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_tri_0 @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMaskDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_tri_1 new file mode 100644 index 00000000000..5128578faa7 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_tri_1 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMaskDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_vtx_0 new file mode 100644 index 00000000000..3ab83b21e4d --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_vtx_0 @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMaskDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_vtx_1 new file mode 100644 index 00000000000..d804c927222 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_vtx_1 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMinorDL b/soh/assets/custom/objects/object_box/gChestBodyMinorDL new file mode 100644 index 00000000000..b3a1648b509 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMinorDL @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMinorDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_tri_0 new file mode 100644 index 00000000000..19115d1d4e3 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_tri_0 @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMinorDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_tri_1 new file mode 100644 index 00000000000..c70314950b7 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_tri_1 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMinorDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_vtx_0 new file mode 100644 index 00000000000..3ab83b21e4d --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_vtx_0 @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyMinorDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_vtx_1 new file mode 100644 index 00000000000..d804c927222 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_vtx_1 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL new file mode 100644 index 00000000000..0ff014d4653 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_tri_0 new file mode 100644 index 00000000000..40441e41eaa --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_tri_0 @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_tri_1 new file mode 100644 index 00000000000..92ce38964fe --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_tri_1 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_vtx_0 new file mode 100644 index 00000000000..3ab83b21e4d --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_vtx_0 @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_vtx_1 new file mode 100644 index 00000000000..d804c927222 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_vtx_1 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyTokenDL b/soh/assets/custom/objects/object_box/gChestBodyTokenDL new file mode 100644 index 00000000000..70336c4e365 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyTokenDL @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyTokenDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_tri_0 new file mode 100644 index 00000000000..9884085ec0b --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_tri_0 @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyTokenDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_tri_1 new file mode 100644 index 00000000000..f6c1aceaab8 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_tri_1 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyTokenDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_vtx_0 new file mode 100644 index 00000000000..3ab83b21e4d --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_vtx_0 @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestBodyTokenDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_vtx_1 new file mode 100644 index 00000000000..d804c927222 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_vtx_1 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidFairyDL b/soh/assets/custom/objects/object_box/gChestLidFairyDL new file mode 100644 index 00000000000..9b32a374bb9 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidFairyDL @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidFairyDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidFairyDL_tri_0 new file mode 100644 index 00000000000..4a0c6750e80 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidFairyDL_tri_0 @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidFairyDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidFairyDL_vtx_0 new file mode 100644 index 00000000000..c021e6e194c --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidFairyDL_vtx_0 @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidHeartDL b/soh/assets/custom/objects/object_box/gChestLidHeartDL new file mode 100644 index 00000000000..11b40b47fea --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidHeartDL @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidHeartDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidHeartDL_tri_0 new file mode 100644 index 00000000000..da15c231bc0 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidHeartDL_tri_0 @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidHeartDL_tri_1 b/soh/assets/custom/objects/object_box/gChestLidHeartDL_tri_1 new file mode 100644 index 00000000000..9b827f5c283 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidHeartDL_tri_1 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidHeartDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidHeartDL_vtx_0 new file mode 100644 index 00000000000..c021e6e194c --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidHeartDL_vtx_0 @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidHeartDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestLidHeartDL_vtx_1 new file mode 100644 index 00000000000..d804c927222 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidHeartDL_vtx_1 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidJunkDL b/soh/assets/custom/objects/object_box/gChestLidJunkDL new file mode 100644 index 00000000000..85ccf46f223 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidJunkDL @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidJunkDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidJunkDL_tri_0 new file mode 100644 index 00000000000..660512b84a7 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidJunkDL_tri_0 @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidJunkDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidJunkDL_vtx_0 new file mode 100644 index 00000000000..c021e6e194c --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidJunkDL_vtx_0 @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidMajorDL b/soh/assets/custom/objects/object_box/gChestLidMajorDL new file mode 100644 index 00000000000..5def569bd06 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidMajorDL @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidMajorDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidMajorDL_tri_0 new file mode 100644 index 00000000000..8b50e76c6ce --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidMajorDL_tri_0 @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidMajorDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidMajorDL_vtx_0 new file mode 100644 index 00000000000..c021e6e194c --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidMajorDL_vtx_0 @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidMaskDL b/soh/assets/custom/objects/object_box/gChestLidMaskDL new file mode 100644 index 00000000000..86c5b1dddbc --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidMaskDL @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidMaskDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidMaskDL_tri_0 new file mode 100644 index 00000000000..e7092d44100 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidMaskDL_tri_0 @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidMaskDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidMaskDL_vtx_0 new file mode 100644 index 00000000000..c021e6e194c --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidMaskDL_vtx_0 @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidMinorDL b/soh/assets/custom/objects/object_box/gChestLidMinorDL new file mode 100644 index 00000000000..741f0f5e2a0 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidMinorDL @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidMinorDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidMinorDL_tri_0 new file mode 100644 index 00000000000..e4f63d2356f --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidMinorDL_tri_0 @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidMinorDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidMinorDL_vtx_0 new file mode 100644 index 00000000000..c021e6e194c --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidMinorDL_vtx_0 @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL b/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL new file mode 100644 index 00000000000..bc6711abd4c --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL_tri_0 new file mode 100644 index 00000000000..a821cece1d1 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL_tri_0 @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL_vtx_0 new file mode 100644 index 00000000000..c021e6e194c --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL_vtx_0 @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidTokenDL b/soh/assets/custom/objects/object_box/gChestLidTokenDL new file mode 100644 index 00000000000..6e11a9d8e8e --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidTokenDL @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidTokenDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidTokenDL_tri_0 new file mode 100644 index 00000000000..a9e53fb19c7 --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidTokenDL_tri_0 @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/gChestLidTokenDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidTokenDL_vtx_0 new file mode 100644 index 00000000000..c021e6e194c --- /dev/null +++ b/soh/assets/custom/objects/object_box/gChestLidTokenDL_vtx_0 @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyFairyDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodyFairyDL_Front new file mode 100644 index 00000000000..8437c770fc1 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodyFairyDL_Front @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyFairyDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodyFairyDL_Sides new file mode 100644 index 00000000000..549c67b6b71 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodyFairyDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyHeartDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodyHeartDL_Front new file mode 100644 index 00000000000..e3f7038b712 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodyHeartDL_Front @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyHeartDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodyHeartDL_Sides new file mode 100644 index 00000000000..039ef18b0fa --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodyHeartDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyJunkDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodyJunkDL_Front new file mode 100644 index 00000000000..879cce7cec1 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodyJunkDL_Front @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyJunkDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodyJunkDL_Sides new file mode 100644 index 00000000000..31ef4175081 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodyJunkDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyMajorDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodyMajorDL_Front new file mode 100644 index 00000000000..d3496b842ba --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodyMajorDL_Front @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyMajorDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodyMajorDL_Sides new file mode 100644 index 00000000000..f9068da8bcf --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodyMajorDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyMaskDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodyMaskDL_Front new file mode 100644 index 00000000000..25b85080b5b --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodyMaskDL_Front @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyMaskDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodyMaskDL_Sides new file mode 100644 index 00000000000..e09c1740098 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodyMaskDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyMinorDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodyMinorDL_Front new file mode 100644 index 00000000000..a9d13587bb1 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodyMinorDL_Front @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyMinorDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodyMinorDL_Sides new file mode 100644 index 00000000000..c70d5a0ce51 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodyMinorDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodySmallKeyDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodySmallKeyDL_Front new file mode 100644 index 00000000000..adaae64a8ac --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodySmallKeyDL_Front @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodySmallKeyDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodySmallKeyDL_Sides new file mode 100644 index 00000000000..729cc7b688a --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodySmallKeyDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyTokenDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodyTokenDL_Front new file mode 100644 index 00000000000..eefc3457c10 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodyTokenDL_Front @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyTokenDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodyTokenDL_Sides new file mode 100644 index 00000000000..5c609652ad9 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestBodyTokenDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidFairyDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidFairyDL_Sides new file mode 100644 index 00000000000..549c67b6b71 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestLidFairyDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidHeartDL_Front b/soh/assets/custom/objects/object_box/mat_gChestLidHeartDL_Front new file mode 100644 index 00000000000..e3f7038b712 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestLidHeartDL_Front @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidHeartDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidHeartDL_Sides new file mode 100644 index 00000000000..039ef18b0fa --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestLidHeartDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidJunkDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidJunkDL_Sides new file mode 100644 index 00000000000..31ef4175081 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestLidJunkDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidMajorDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidMajorDL_Sides new file mode 100644 index 00000000000..f9068da8bcf --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestLidMajorDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidMaskDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidMaskDL_Sides new file mode 100644 index 00000000000..e09c1740098 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestLidMaskDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidMinorDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidMinorDL_Sides new file mode 100644 index 00000000000..c70d5a0ce51 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestLidMinorDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidSmallKeyDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidSmallKeyDL_Sides new file mode 100644 index 00000000000..729cc7b688a --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestLidSmallKeyDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidTokenDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidTokenDL_Sides new file mode 100644 index 00000000000..5c609652ad9 --- /dev/null +++ b/soh/assets/custom/objects/object_box/mat_gChestLidTokenDL_Sides @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/soh_assets.h b/soh/assets/soh_assets.h index 3c3ddcf5a7e..b29b965822a 100644 --- a/soh/assets/soh_assets.h +++ b/soh/assets/soh_assets.h @@ -38,6 +38,42 @@ static const ALIGN_ASSET(2) char gSkullTreasureChestFrontTex[] = dgSkullTreasure #define dgSkullTreasureChestSideAndTopTex "__OTR__objects/object_box/gSkullTreasureChestSideAndTopTex" static const ALIGN_ASSET(2) char gSkullTreasureChestSideAndTopTex[] = dgSkullTreasureChestSideAndTopTex; +#define dgChestBodyHeartDL "__OTR__objects/object_box/gChestBodyHeartDL" +static const ALIGN_ASSET(2) char gChestBodyHeartDL[] = dgChestBodyHeartDL; + +#define dgChestLidHeartDL "__OTR__objects/object_box/gChestLidHeartDL" +static const ALIGN_ASSET(2) char gChestLidHeartDL[] = dgChestLidHeartDL; + +#define dgChestBodyJunkDL "__OTR__objects/object_box/gChestBodyJunkDL" +static const ALIGN_ASSET(2) char gChestBodyJunkDL[] = dgChestBodyJunkDL; + +#define dgChestLidJunkDL "__OTR__objects/object_box/gChestLidJunkDL" +static const ALIGN_ASSET(2) char gChestLidJunkDL[] = dgChestLidJunkDL; + +#define dgChestBodyMajorDL "__OTR__objects/object_box/gChestBodyMajorDL" +static const ALIGN_ASSET(2) char gChestBodyMajorDL[] = dgChestBodyMajorDL; + +#define dgChestLidMajorDL "__OTR__objects/object_box/gChestLidMajorDL" +static const ALIGN_ASSET(2) char gChestLidMajorDL[] = dgChestLidMajorDL; + +#define dgChestBodyMinorDL "__OTR__objects/object_box/gChestBodyMinorDL" +static const ALIGN_ASSET(2) char gChestBodyMinorDL[] = dgChestBodyMinorDL; + +#define dgChestLidMinorDL "__OTR__objects/object_box/gChestLidMinorDL" +static const ALIGN_ASSET(2) char gChestLidMinorDL[] = dgChestLidMinorDL; + +#define dgChestBodySmallKeyDL "__OTR__objects/object_box/gChestBodySmallKeyDL" +static const ALIGN_ASSET(2) char gChestBodySmallKeyDL[] = dgChestBodySmallKeyDL; + +#define dgChestLidSmallKeyDL "__OTR__objects/object_box/gChestLidSmallKeyDL" +static const ALIGN_ASSET(2) char gChestLidSmallKeyDL[] = dgChestLidSmallKeyDL; + +#define dgChestBodyTokenDL "__OTR__objects/object_box/gChestBodyTokenDL" +static const ALIGN_ASSET(2) char gChestBodyTokenDL[] = dgChestBodyTokenDL; + +#define dgChestLidTokenDL "__OTR__objects/object_box/gChestLidTokenDL" +static const ALIGN_ASSET(2) char gChestLidTokenDL[] = dgChestLidTokenDL; + #define dgTitleRandomizerSubtitleTex "__OTR__objects/object_mag/gTitleRandomizerSubtitleTex" static const ALIGN_ASSET(2) char gTitleRandomizerSubtitleTex[] = dgTitleRandomizerSubtitleTex; 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 92ad93fb186..238a7849f69 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 @@ -93,6 +93,16 @@ u8 hasCreatedRandoChestTextures = 0; u8 hasCustomChestDLs = 0; u8 hasChristmasChestTexturesAvailable = 0; +static Gfx* EnBox_LoadChestDL(const char* dlName, const char* fallbackName) { + Gfx* dl = ResourceMgr_LoadGfxByName(dlName); + + if (dl == NULL && fallbackName != NULL) { + dl = ResourceMgr_LoadGfxByName(fallbackName); + } + + return dl; +} + void EnBox_SetupAction(EnBox* this, EnBoxActionFunc actionFunc) { this->actionFunc = actionFunc; } @@ -580,97 +590,93 @@ void EnBox_UpdateSizeAndTexture(EnBox* this, PlayState* play) { int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0); GetItemCategory getItemCategory; + GetItemEntry chestItem = this->getItemEntry; int isVanilla = csmc == CSMC_DISABLED || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)) || (play->sceneNum == SCENE_TREASURE_BOX_SHOP && this->dyna.actor.room != 6); // Exclude treasure game chests except for the final room if (!isVanilla) { - GetItemEntry test = this->getItemEntry; - getItemCategory = this->getItemEntry.getItemCategory; + getItemCategory = chestItem.getItemCategory; // If they have bombchus, don't consider the bombchu item major if (INV_CONTENT(ITEM_BOMBCHU) == ITEM_BOMBCHU && - ((this->getItemEntry.modIndex == MOD_RANDOMIZER && - this->getItemEntry.getItemId == RG_PROGRESSIVE_BOMBCHU_BAG) || - (this->getItemEntry.modIndex == MOD_NONE && - (this->getItemEntry.getItemId == GI_BOMBCHUS_5 || this->getItemEntry.getItemId == GI_BOMBCHUS_10 || - this->getItemEntry.getItemId == GI_BOMBCHUS_20)))) { + ((chestItem.modIndex == MOD_RANDOMIZER && chestItem.getItemId == RG_PROGRESSIVE_BOMBCHU_BAG) || + (chestItem.modIndex == MOD_NONE && + (chestItem.getItemId == GI_BOMBCHUS_5 || chestItem.getItemId == GI_BOMBCHUS_10 || + chestItem.getItemId == GI_BOMBCHUS_20)))) { getItemCategory = ITEM_CATEGORY_JUNK; // If it's a bottle and they already have one, consider the item lesser - } else if ((this->getItemEntry.modIndex == MOD_RANDOMIZER && - this->getItemEntry.getItemId >= RG_BOTTLE_WITH_RED_POTION && - this->getItemEntry.getItemId <= RG_BOTTLE_WITH_POE) || - (this->getItemEntry.modIndex == MOD_NONE && - (this->getItemEntry.getItemId == GI_BOTTLE || this->getItemEntry.getItemId == GI_MILK_BOTTLE))) { + } else if ((chestItem.modIndex == MOD_RANDOMIZER && chestItem.getItemId >= RG_BOTTLE_WITH_RED_POTION && + chestItem.getItemId <= RG_BOTTLE_WITH_POE) || + (chestItem.modIndex == MOD_NONE && + (chestItem.getItemId == GI_BOTTLE || chestItem.getItemId == GI_MILK_BOTTLE))) { if (gSaveContext.inventory.items[SLOT_BOTTLE_1] != ITEM_NONE) { getItemCategory = ITEM_CATEGORY_LESSER; } } } - // Change size - if (!isVanilla && (csmc == CSMC_BOTH || csmc == CSMC_SIZE)) { - 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); - } + // Always keep vanilla size; CSMC no longer alters scale + 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); } - // Change texture - if (!isVanilla && hasCreatedRandoChestTextures && !hasCustomChestDLs && - (csmc == CSMC_BOTH || csmc == CSMC_TEXTURE)) { + // Change model/texture + if (!isVanilla && (csmc == CSMC_BOTH || csmc == CSMC_TEXTURE)) { switch (getItemCategory) { case ITEM_CATEGORY_MAJOR: - this->boxBodyDL = gGoldTreasureChestChestFrontDL; - this->boxLidDL = gGoldTreasureChestChestSideAndLidDL; + this->boxBodyDL = EnBox_LoadChestDL(gChestBodyMajorDL, gTreasureChestChestFrontDL); + this->boxLidDL = EnBox_LoadChestDL(gChestLidMajorDL, gTreasureChestChestSideAndLidDL); break; case ITEM_CATEGORY_SKULLTULA_TOKEN: - this->boxBodyDL = gSkullTreasureChestChestFrontDL; - this->boxLidDL = gSkullTreasureChestChestSideAndLidDL; + this->boxBodyDL = EnBox_LoadChestDL(gChestBodyTokenDL, gTreasureChestChestFrontDL); + this->boxLidDL = EnBox_LoadChestDL(gChestLidTokenDL, gTreasureChestChestSideAndLidDL); break; case ITEM_CATEGORY_SMALL_KEY: - this->boxBodyDL = gKeyTreasureChestChestFrontDL; - this->boxLidDL = gKeyTreasureChestChestSideAndLidDL; + this->boxBodyDL = EnBox_LoadChestDL(gChestBodySmallKeyDL, gTreasureChestChestFrontDL); + this->boxLidDL = EnBox_LoadChestDL(gChestLidSmallKeyDL, gTreasureChestChestSideAndLidDL); break; case ITEM_CATEGORY_BOSS_KEY: - this->boxBodyDL = gTreasureChestBossKeyChestFrontDL; - this->boxLidDL = gTreasureChestBossKeyChestSideAndTopDL; + this->boxBodyDL = EnBox_LoadChestDL(gTreasureChestBossKeyChestFrontDL, gTreasureChestChestFrontDL); + this->boxLidDL = + EnBox_LoadChestDL(gTreasureChestBossKeyChestSideAndTopDL, gTreasureChestChestSideAndLidDL); break; case ITEM_CATEGORY_LESSER: + switch (chestItem.itemId) { + case ITEM_HEART_PIECE: + case ITEM_HEART_PIECE_2: + case ITEM_HEART_CONTAINER: + this->boxBodyDL = EnBox_LoadChestDL(gChestBodyHeartDL, gTreasureChestChestFrontDL); + this->boxLidDL = EnBox_LoadChestDL(gChestLidHeartDL, gTreasureChestChestSideAndLidDL); + break; + default: + this->boxBodyDL = EnBox_LoadChestDL(gChestBodyMinorDL, gTreasureChestChestFrontDL); + this->boxLidDL = EnBox_LoadChestDL(gChestLidMinorDL, gTreasureChestChestSideAndLidDL); + break; + } + break; case ITEM_CATEGORY_JUNK: default: - this->boxBodyDL = gTreasureChestChestFrontDL; - this->boxLidDL = gTreasureChestChestSideAndLidDL; + this->boxBodyDL = EnBox_LoadChestDL(gChestBodyJunkDL, gTreasureChestChestFrontDL); + this->boxLidDL = EnBox_LoadChestDL(gChestLidJunkDL, gTreasureChestChestSideAndLidDL); break; } } else { if (this->type != ENBOX_TYPE_DECORATED_BIG) { - this->boxBodyDL = gTreasureChestChestFrontDL; - this->boxLidDL = gTreasureChestChestSideAndLidDL; + this->boxBodyDL = EnBox_LoadChestDL(gTreasureChestChestFrontDL, NULL); + this->boxLidDL = EnBox_LoadChestDL(gTreasureChestChestSideAndLidDL, NULL); } else { - this->boxBodyDL = gTreasureChestBossKeyChestFrontDL; - this->boxLidDL = gTreasureChestBossKeyChestSideAndTopDL; + this->boxBodyDL = EnBox_LoadChestDL(gTreasureChestBossKeyChestFrontDL, gTreasureChestChestFrontDL); + this->boxLidDL = EnBox_LoadChestDL(gTreasureChestBossKeyChestSideAndTopDL, gTreasureChestChestSideAndLidDL); } } From f1ddf9e73f251dfc5a0e7fc1841bc9595f1b1db5 Mon Sep 17 00:00:00 2001 From: Jesper Arvidsson Date: Sat, 3 Jan 2026 19:50:24 +0100 Subject: [PATCH 2/5] Update Cvar menu --- soh/soh/SohGui/SohMenuEnhancements.cpp | 34 +++++++++----------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/soh/soh/SohGui/SohMenuEnhancements.cpp b/soh/soh/SohGui/SohMenuEnhancements.cpp index 1136a656ccc..85c9b954c64 100644 --- a/soh/soh/SohGui/SohMenuEnhancements.cpp +++ b/soh/soh/SohGui/SohMenuEnhancements.cpp @@ -46,13 +46,6 @@ static const std::unordered_map skipForcedDialogOptions = { FORCED_DIALOG_SKIP_ALL, "All" }, }; -static const std::unordered_map chestStyleMatchesContentsOptions = { - { CSMC_DISABLED, "Disabled" }, - { CSMC_BOTH, "Both" }, - { CSMC_TEXTURE, "Texture Only" }, - { CSMC_SIZE, "Size Only" }, -}; - static const std::unordered_map timeTravelOptions = { { TIME_TRAVEL_DISABLED, "Disabled" }, { TIME_TRAVEL_OOT, "Ocarina of Time" }, @@ -173,31 +166,26 @@ void SohMenu::AddMenuEnhancements() { "This doesn't work if the save was made in grottos, fairy fountains, or dungeons.")); AddWidget(path, "Containers Match Contents", WIDGET_SEPARATOR_TEXT); - AddWidget(path, "Chest Size & Texture Matches Contents", WIDGET_CVAR_COMBOBOX) + AddWidget(path, "Containers Match Contents", WIDGET_CVAR_CHECKBOX) .CVar(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents")) .Callback([](WidgetInfo& info) { if (CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED) == CSMC_DISABLED) { CVarSetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0); + } else { + CVarSetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_TEXTURE); } }) - .Options(ComboboxOptions() - .ComboMap(chestStyleMatchesContentsOptions) - .DefaultIndex(CSMC_DISABLED) - .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 chests\n" - " - Boss keys: Vanilla size and texture\n" - " - Skulltula Tokens: Small Skulltula chest\n" - "\n" - "NOTE: Textures will not apply if you are using a mod pack with a custom chest model.")); - AddWidget(path, "Chests of Agony", WIDGET_CVAR_CHECKBOX) + .Options(CheckboxOptions() + .DefaultValue(false) + .Tooltip("Toggle to change container textures to match their contents in randomizer games.\n" + "Categories: Major items, Lesser items, Junk items, Small keys, Boss keys, Skulltula Tokens.")); + AddWidget(path, "Containers of Agony", WIDGET_CVAR_CHECKBOX) .CVar(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony")) .PreFunc([](WidgetInfo& info) { - info.isHidden = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchesContents"), CSMC_DISABLED); + info.isHidden = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED) == + CSMC_DISABLED; }) - .Options(CheckboxOptions().Tooltip("Only change the size/texture of chests if you have the Stone of Agony.")); + .Options(CheckboxOptions().Tooltip("Only change the texture of chests if you have the Stone of Agony.")); AddWidget(path, "Time of Day", WIDGET_SEPARATOR_TEXT); AddWidget(path, "Nighttime GS Always Spawn", WIDGET_CVAR_CHECKBOX) From 745acb41e10664fd085b707df36f2311f5f8b107 Mon Sep 17 00:00:00 2001 From: Jesper Arvidsson Date: Sat, 3 Jan 2026 22:48:40 +0100 Subject: [PATCH 3/5] Implement Reviewed code and Clang --- soh/soh/Enhancements/enhancementTypes.h | 7 --- .../Enhancements/item-tables/ItemTableTypes.h | 2 +- .../Enhancements/randomizer/ShuffleCrates.cpp | 11 ++--- .../Enhancements/randomizer/ShuffleGrass.cpp | 5 +-- .../Enhancements/randomizer/ShuffleTrees.cpp | 5 +-- .../Enhancements/timesaver_hook_handlers.cpp | 3 -- soh/soh/SohGui/SohMenuEnhancements.cpp | 14 +++--- soh/src/overlays/actors/ovl_En_Box/z_en_box.c | 45 +++---------------- 8 files changed, 21 insertions(+), 71 deletions(-) diff --git a/soh/soh/Enhancements/enhancementTypes.h b/soh/soh/Enhancements/enhancementTypes.h index be0a3990f3a..2b380b249bd 100644 --- a/soh/soh/Enhancements/enhancementTypes.h +++ b/soh/soh/Enhancements/enhancementTypes.h @@ -7,13 +7,6 @@ typedef enum { WARP_MODE_OVERRIDE_VANILLA_AS_MQ, } BetterDebugWarpOverrideMQMode; -typedef enum { - CSMC_DISABLED, - CSMC_BOTH, - CSMC_TEXTURE, - CSMC_SIZE, -} ChestStyleMatchesContentsType; - typedef enum { SGIA_DISABLED, SGIA_JUNK, diff --git a/soh/soh/Enhancements/item-tables/ItemTableTypes.h b/soh/soh/Enhancements/item-tables/ItemTableTypes.h index 46b4cbb5b74..e8e7fdbd636 100644 --- a/soh/soh/Enhancements/item-tables/ItemTableTypes.h +++ b/soh/soh/Enhancements/item-tables/ItemTableTypes.h @@ -64,7 +64,7 @@ typedef struct GetItemEntry { /* 0x0C */ uint16_t collectable; // determines whether the item can be collected on the overworld. Will be true in most cases. /* 0x0E */ GetItemFrom getItemFrom; - /* 0x0F */ GetItemCategory getItemCategory; // Primarily made and used for chest size/texture matches contents + /* 0x0F */ GetItemCategory getItemCategory; // Primarily made and used for container texture matches contents /* 0x10 */ uint16_t drawItemId; // Will be a copy of itemId unless the item is an ice trap. Needed for particles to // function on ice traps. /* 0x11 */ uint16_t drawModIndex; // Will be a copy of modIndex unless the item is an ice trap. Needed for particles diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index c4c4e1a7a11..26a0c43e5d4 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -21,11 +21,10 @@ extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play); extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { GetItemCategory getItemCategory; auto crateActor = ((ObjKibako2*)thisx); - int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); + bool csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), 0); int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0); - int isVanilla = - csmc == CSMC_DISABLED || csmc == CSMC_SIZE || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)); + int isVanilla = !csmc || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)); if (isVanilla) { Gfx_DrawDListOpa(play, (Gfx*)gLargeRandoCrateDL); @@ -85,7 +84,6 @@ extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { break; } break; - case ITEM_CATEGORY_JUNK: default: Gfx_DrawDListOpa(play, (Gfx*)gLargeJunkCrateDL); break; @@ -95,11 +93,10 @@ extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { extern "C" void ObjKibako_RandomizerDraw(Actor* thisx, PlayState* play) { GetItemCategory getItemCategory; auto smallCrateActor = ((ObjKibako*)thisx); - int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); + bool csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), 0); int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0); - int isVanilla = - csmc == CSMC_DISABLED || csmc == CSMC_SIZE || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)); + int isVanilla = !csmc || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)); if (isVanilla) { Gfx_DrawDListOpa(play, (Gfx*)gSmallRandoCrateDL); diff --git a/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp b/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp index 67f090da77a..9acfae7cd45 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp @@ -34,11 +34,10 @@ extern "C" void EnKusa_RandomizerDraw(Actor* thisx, PlayState* play) { if (grassIdentity != nullptr && grassIdentity->randomizerCheck != RC_MAX && Flags_GetRandomizerInf(grassIdentity->randomizerInf) == 0) { - int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); + bool csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), 0); int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0); - if ((csmc == CSMC_BOTH || csmc == CSMC_TEXTURE) && - (!requiresStoneAgony || (requiresStoneAgony && CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)))) { + if (csmc && (!requiresStoneAgony || (requiresStoneAgony && CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)))) { auto itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(grassIdentity->randomizerCheck, true, GI_NONE); GetItemCategory getItemCategory = itemEntry.getItemCategory; diff --git a/soh/soh/Enhancements/randomizer/ShuffleTrees.cpp b/soh/soh/Enhancements/randomizer/ShuffleTrees.cpp index b79ae1e4b83..9ca897a8b8a 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleTrees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleTrees.cpp @@ -52,10 +52,9 @@ extern "C" void EnWood02_RandomizerDraw(Actor* thisx, PlayState* play) { return; } - int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); + bool csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), 0); int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0); - int isVanilla = - csmc == CSMC_DISABLED || csmc == CSMC_SIZE || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)); + int isVanilla = !csmc || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)); if (isVanilla) { getItemCategory = ITEM_CATEGORY_JUNK; diff --git a/soh/soh/Enhancements/timesaver_hook_handlers.cpp b/soh/soh/Enhancements/timesaver_hook_handlers.cpp index 46b4c61b4fc..56d6e652d2a 100644 --- a/soh/soh/Enhancements/timesaver_hook_handlers.cpp +++ b/soh/soh/Enhancements/timesaver_hook_handlers.cpp @@ -852,9 +852,6 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li case VB_PLAY_SLOW_CHEST_CS: { if (CVarGetInteger(CVAR_ENHANCEMENT("FastChests"), 0)) { *should = false; - } else if (CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED) && *should) { - EnBox* enBox = va_arg(args, EnBox*); - *should = enBox->dyna.actor.scale.x != 0.005f; } break; } diff --git a/soh/soh/SohGui/SohMenuEnhancements.cpp b/soh/soh/SohGui/SohMenuEnhancements.cpp index 85c9b954c64..b79ed4c5af2 100644 --- a/soh/soh/SohGui/SohMenuEnhancements.cpp +++ b/soh/soh/SohGui/SohMenuEnhancements.cpp @@ -169,21 +169,17 @@ void SohMenu::AddMenuEnhancements() { AddWidget(path, "Containers Match Contents", WIDGET_CVAR_CHECKBOX) .CVar(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents")) .Callback([](WidgetInfo& info) { - if (CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED) == CSMC_DISABLED) { + if (!CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), 0)) { CVarSetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0); - } else { - CVarSetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_TEXTURE); } }) - .Options(CheckboxOptions() - .DefaultValue(false) - .Tooltip("Toggle to change container textures to match their contents in randomizer games.\n" - "Categories: Major items, Lesser items, Junk items, Small keys, Boss keys, Skulltula Tokens.")); + .Options(CheckboxOptions().DefaultValue(false).Tooltip( + "Toggle to change container textures to match their contents in randomizer games.\n" + "Categories: Major items, Lesser items, Junk items, Small keys, Boss keys, Skulltula Tokens.")); AddWidget(path, "Containers of Agony", WIDGET_CVAR_CHECKBOX) .CVar(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony")) .PreFunc([](WidgetInfo& info) { - info.isHidden = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED) == - CSMC_DISABLED; + info.isHidden = !CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), 0); }) .Options(CheckboxOptions().Tooltip("Only change the texture of chests if you have the Stone of Agony.")); 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 238a7849f69..5c037b29ccd 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 @@ -55,7 +55,7 @@ void EnBox_AppearAnimation(EnBox*, PlayState*); void EnBox_WaitOpen(EnBox*, PlayState*); void EnBox_Open(EnBox*, PlayState*); void EnBox_CreateExtraChestTextures(); -void EnBox_UpdateSizeAndTexture(EnBox*, PlayState*); +void EnBox_UpdateTexture(EnBox*, PlayState*); const ActorInit En_Box_InitVars = { ACTOR_EN_BOX, @@ -213,7 +213,7 @@ void EnBox_Init(Actor* thisx, PlayState* play2) { } } - EnBox_UpdateSizeAndTexture(this, play); + EnBox_UpdateTexture(this, play); // 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 (play->sceneNum == SCENE_FOREST_TEMPLE && this->dyna.actor.params == 10222) { @@ -552,7 +552,7 @@ void EnBox_SpawnIceSmoke(EnBox* this, PlayState* play) { void EnBox_Update(Actor* thisx, PlayState* play) { EnBox* this = (EnBox*)thisx; - EnBox_UpdateSizeAndTexture(this, play); + EnBox_UpdateTexture(this, play); if (this->movementFlags & ENBOX_MOVE_STICK_TO_GROUND) { this->movementFlags &= ~ENBOX_MOVE_STICK_TO_GROUND; @@ -585,14 +585,14 @@ void EnBox_Update(Actor* thisx, PlayState* play) { } } -void EnBox_UpdateSizeAndTexture(EnBox* this, PlayState* play) { +void EnBox_UpdateTexture(EnBox* this, PlayState* play) { EnBox_CreateExtraChestTextures(); - int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); + bool csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), 0); int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0); GetItemCategory getItemCategory; GetItemEntry chestItem = this->getItemEntry; - int isVanilla = csmc == CSMC_DISABLED || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)) || + int isVanilla = !csmc || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)) || (play->sceneNum == SCENE_TREASURE_BOX_SHOP && this->dyna.actor.room != 6); // Exclude treasure game chests except for the final room @@ -616,7 +616,6 @@ void EnBox_UpdateSizeAndTexture(EnBox* this, PlayState* play) { } } - // Always keep vanilla size; CSMC no longer alters scale switch (this->type) { case ENBOX_TYPE_SMALL: case ENBOX_TYPE_6: @@ -631,7 +630,7 @@ void EnBox_UpdateSizeAndTexture(EnBox* this, PlayState* play) { } // Change model/texture - if (!isVanilla && (csmc == CSMC_BOTH || csmc == CSMC_TEXTURE)) { + if (!isVanilla) { switch (getItemCategory) { case ITEM_CATEGORY_MAJOR: this->boxBodyDL = EnBox_LoadChestDL(gChestBodyMajorDL, gTreasureChestChestFrontDL); @@ -690,36 +689,6 @@ void EnBox_UpdateSizeAndTexture(EnBox* this, PlayState* play) { this->boxLidDL = gChristmasGreenTreasureChestChestSideAndLidDL; } } - - // Chest Sizes Match Contents can make certain chests unreachable, so nudge - // the ones that cause problems. - // https://github.com/gamestabled/OoT3D_Randomizer/blob/68cf3f190d319e554bdeebc7f16e67578430dbc3/code/src/actors/chest.c#L57 - s16 params = this->dyna.actor.params; - s16 sceneNum = play->sceneNum; - s16 room = this->dyna.actor.room; - s16 isLarge = this->dyna.actor.scale.x == 0.01f; - - // Make Ganon's Castle Zelda's Lullaby chest reachable when large. - if ((params & 0xF000) == 0x8000 && sceneNum == SCENE_INSIDE_GANONS_CASTLE && room == 9) { - this->dyna.actor.world.pos.z = isLarge ? -962.0f : -952.0f; - } - - // Make MQ Deku Tree Song of Time chest reachable when large. - if (params == 0x5AA0 && sceneNum == SCENE_DEKU_TREE && room == 5) { - this->dyna.actor.world.pos.x = isLarge ? -1380.0f : -1376.0f; - } - - // Make Ganon's Castle Gold Gauntlets chest reachable with hookshot from the - // switch platform when small. - if (params == 0x36C5 && sceneNum == SCENE_INSIDE_GANONS_CASTLE && room == 12) { - this->dyna.actor.world.pos.x = isLarge ? 1757.0f : 1777.0f; - this->dyna.actor.world.pos.z = isLarge ? -3595.0f : -3626.0f; - } - - // Make Spirit Temple Compass Chest reachable with hookshot when small. - if (params == 0x3804 && sceneNum == SCENE_SPIRIT_TEMPLE && room == 14) { - this->dyna.actor.world.pos.x = isLarge ? 358.0f : 400.0f; - } } void EnBox_CreateExtraChestTextures() { From dcc9c6f40feb1825edb6d942fdb12d40df1e104d Mon Sep 17 00:00:00 2001 From: Jesper Arvidsson Date: Sun, 4 Jan 2026 12:29:33 +0100 Subject: [PATCH 4/5] Implement Health Category --- .../Enhancements/item-tables/ItemTableTypes.h | 9 +++--- .../Enhancements/randomizer/ShuffleCrates.cpp | 28 ++++++------------- .../Enhancements/randomizer/ShuffleGrass.cpp | 16 +++-------- .../Enhancements/randomizer/ShuffleTrees.cpp | 16 ++++------- .../Enhancements/randomizer/hook_handlers.cpp | 1 + soh/soh/Enhancements/randomizer/item_list.cpp | 8 +++--- soh/soh/OTRGlobals.cpp | 8 +++--- soh/src/overlays/actors/ovl_En_Box/z_en_box.c | 19 ++++--------- 8 files changed, 38 insertions(+), 67 deletions(-) diff --git a/soh/soh/Enhancements/item-tables/ItemTableTypes.h b/soh/soh/Enhancements/item-tables/ItemTableTypes.h index e8e7fdbd636..eae97a6cc87 100644 --- a/soh/soh/Enhancements/item-tables/ItemTableTypes.h +++ b/soh/soh/Enhancements/item-tables/ItemTableTypes.h @@ -24,10 +24,11 @@ typedef enum GetItemFrom { typedef enum GetItemCategory { /* 0x00 */ ITEM_CATEGORY_JUNK, /* 0x01 */ ITEM_CATEGORY_LESSER, - /* 0x02 */ ITEM_CATEGORY_BOSS_KEY, - /* 0x03 */ ITEM_CATEGORY_SMALL_KEY, - /* 0x04 */ ITEM_CATEGORY_SKULLTULA_TOKEN, - /* 0x05 */ ITEM_CATEGORY_MAJOR, + /* 0x02 */ ITEM_CATEGORY_HEALTH, + /* 0x03 */ ITEM_CATEGORY_BOSS_KEY, + /* 0x04 */ ITEM_CATEGORY_SMALL_KEY, + /* 0x05 */ ITEM_CATEGORY_SKULLTULA_TOKEN, + /* 0x06 */ ITEM_CATEGORY_MAJOR, } GetItemCategory; #define GET_ITEM(itemId, objectId, drawId, textId, field, chestAnim, itemCategory, modIndex, getItemId) \ diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index 26a0c43e5d4..5bb6bacab12 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -72,17 +72,11 @@ extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { case ITEM_CATEGORY_BOSS_KEY: Gfx_DrawDListOpa(play, (Gfx*)gLargeBossKeyCrateDL); break; + case ITEM_CATEGORY_HEALTH: + Gfx_DrawDListOpa(play, (Gfx*)gLargeHeartCrateDL); + break; case ITEM_CATEGORY_LESSER: - switch (crateItem.itemId) { - case ITEM_HEART_PIECE: - case ITEM_HEART_PIECE_2: - case ITEM_HEART_CONTAINER: - Gfx_DrawDListOpa(play, (Gfx*)gLargeHeartCrateDL); - break; - default: - Gfx_DrawDListOpa(play, (Gfx*)gLargeMinorCrateDL); - break; - } + Gfx_DrawDListOpa(play, (Gfx*)gLargeMinorCrateDL); break; default: Gfx_DrawDListOpa(play, (Gfx*)gLargeJunkCrateDL); @@ -144,17 +138,11 @@ extern "C" void ObjKibako_RandomizerDraw(Actor* thisx, PlayState* play) { case ITEM_CATEGORY_BOSS_KEY: Gfx_DrawDListOpa(play, (Gfx*)gSmallBossKeyCrateDL); break; + case ITEM_CATEGORY_HEALTH: + Gfx_DrawDListOpa(play, (Gfx*)gSmallHeartCrateDL); + break; case ITEM_CATEGORY_LESSER: - switch (smallCrateItem.itemId) { - case ITEM_HEART_PIECE: - case ITEM_HEART_PIECE_2: - case ITEM_HEART_CONTAINER: - Gfx_DrawDListOpa(play, (Gfx*)gSmallHeartCrateDL); - break; - default: - Gfx_DrawDListOpa(play, (Gfx*)gSmallMinorCrateDL); - break; - } + Gfx_DrawDListOpa(play, (Gfx*)gSmallMinorCrateDL); break; case ITEM_CATEGORY_JUNK: default: diff --git a/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp b/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp index 9acfae7cd45..76cacad33f2 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp @@ -47,18 +47,10 @@ extern "C" void EnKusa_RandomizerDraw(Actor* thisx, PlayState* play) { DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushJunkDL, (Gfx*)gRandoCuttableGrassJunkDL, play); break; case ITEM_CATEGORY_LESSER: - switch (itemEntry.itemId) { - case ITEM_HEART_PIECE: - case ITEM_HEART_PIECE_2: - case ITEM_HEART_CONTAINER: - DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushHeartDL, (Gfx*)gRandoCuttableGrassHeartDL, - play); - break; - default: - DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushMinorDL, (Gfx*)gRandoCuttableGrassMinorDL, - play); - break; - } + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushMinorDL, (Gfx*)gRandoCuttableGrassMinorDL, play); + break; + case ITEM_CATEGORY_HEALTH: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushHeartDL, (Gfx*)gRandoCuttableGrassHeartDL, play); break; case ITEM_CATEGORY_BOSS_KEY: DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushBossKeyDL, (Gfx*)gRandoCuttableGrassBossKeyDL, play); diff --git a/soh/soh/Enhancements/randomizer/ShuffleTrees.cpp b/soh/soh/Enhancements/randomizer/ShuffleTrees.cpp index 9ca897a8b8a..933cdea3d88 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleTrees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleTrees.cpp @@ -102,18 +102,14 @@ extern "C" void EnWood02_RandomizerDraw(Actor* thisx, PlayState* play) { Matrix_Scale(0.1, 0.05, 0.1, MTXMODE_APPLY); Gfx_DrawDListOpa(play, (Gfx*)gSmallBossKeyCrateDL); break; + case ITEM_CATEGORY_HEALTH: + Matrix_Scale(0.1, 0.05, 0.1, MTXMODE_APPLY); + Gfx_DrawDListOpa(play, (Gfx*)gSmallHeartCrateDL); + break; case ITEM_CATEGORY_LESSER: Matrix_Scale(0.1, 0.05, 0.1, MTXMODE_APPLY); - switch (treeItem.itemId) { - case ITEM_HEART_PIECE: - case ITEM_HEART_PIECE_2: - case ITEM_HEART_CONTAINER: - Gfx_DrawDListOpa(play, (Gfx*)gSmallHeartCrateDL); - break; - default: - Gfx_DrawDListOpa(play, (Gfx*)gSmallMinorCrateDL); - break; - } + Gfx_DrawDListOpa(play, (Gfx*)gSmallMinorCrateDL); + break; case ITEM_CATEGORY_JUNK: default: Matrix_Scale(0.04, 0.02, 0.04, MTXMODE_APPLY); diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index c7de846766c..8f73310266a 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -386,6 +386,7 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() { getItemEntry.modIndex == MOD_RANDOMIZER) && (getItemEntry.getItemCategory == ITEM_CATEGORY_JUNK || getItemEntry.getItemCategory == ITEM_CATEGORY_SKULLTULA_TOKEN || + getItemEntry.getItemCategory == ITEM_CATEGORY_HEALTH || getItemEntry.getItemCategory == ITEM_CATEGORY_LESSER || // Treat small keys as junk if Skeleton Key is obtained. (getItemEntry.getItemCategory == ITEM_CATEGORY_SMALL_KEY && diff --git a/soh/soh/Enhancements/randomizer/item_list.cpp b/soh/soh/Enhancements/randomizer/item_list.cpp index fb071fcdfe0..bfd487ed658 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-Paß" }, 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); @@ -258,8 +258,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", "Goldener 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", "Herzteil" }, 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", "Herzteil" }, 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", "Lon Lon-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); @@ -282,7 +282,7 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_GREEN_POTION_REFILL] = Item(RG_GREEN_POTION_REFILL, Text{ "Green Potion Refill", "Recharge de Potion Verte", "Grünes Elixier" }, 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", "Blaues Elixier" }, 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)", "Herzteil (Truhenlotterie)" }, 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)", "Herzteil (Truhenlotterie)" }, 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 (Truhenlotterie)" }, 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-Nüsse kaufen (5)" }, ITEMTYPE_SHOP, GI_NUTS_5_2, true, LOGIC_NUT_ACCESS, RHT_DEKU_NUTS_5, ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 15); diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 14b7d279fae..9637c0ff16f 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -704,8 +704,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), @@ -722,7 +722,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), @@ -761,7 +761,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 5c037b29ccd..70b53942a00 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 @@ -649,22 +649,15 @@ void EnBox_UpdateTexture(EnBox* this, PlayState* play) { this->boxLidDL = EnBox_LoadChestDL(gTreasureChestBossKeyChestSideAndTopDL, gTreasureChestChestSideAndLidDL); break; + case ITEM_CATEGORY_HEALTH: + this->boxBodyDL = EnBox_LoadChestDL(gChestBodyHeartDL, gTreasureChestChestFrontDL); + this->boxLidDL = EnBox_LoadChestDL(gChestLidHeartDL, gTreasureChestChestSideAndLidDL); + break; case ITEM_CATEGORY_LESSER: - switch (chestItem.itemId) { - case ITEM_HEART_PIECE: - case ITEM_HEART_PIECE_2: - case ITEM_HEART_CONTAINER: - this->boxBodyDL = EnBox_LoadChestDL(gChestBodyHeartDL, gTreasureChestChestFrontDL); - this->boxLidDL = EnBox_LoadChestDL(gChestLidHeartDL, gTreasureChestChestSideAndLidDL); - break; - default: - this->boxBodyDL = EnBox_LoadChestDL(gChestBodyMinorDL, gTreasureChestChestFrontDL); - this->boxLidDL = EnBox_LoadChestDL(gChestLidMinorDL, gTreasureChestChestSideAndLidDL); - break; - } + this->boxBodyDL = EnBox_LoadChestDL(gChestBodyMinorDL, gTreasureChestChestFrontDL); + this->boxLidDL = EnBox_LoadChestDL(gChestLidMinorDL, gTreasureChestChestSideAndLidDL); break; case ITEM_CATEGORY_JUNK: - default: this->boxBodyDL = EnBox_LoadChestDL(gChestBodyJunkDL, gTreasureChestChestFrontDL); this->boxLidDL = EnBox_LoadChestDL(gChestLidJunkDL, gTreasureChestChestSideAndLidDL); break; From 025f98de0ae04eead7fe68271eac4e9c87df5734 Mon Sep 17 00:00:00 2001 From: Jesper Arvidsson Date: Sun, 4 Jan 2026 12:48:20 +0100 Subject: [PATCH 5/5] 2 small things --- soh/soh/SohGui/SohMenuEnhancements.cpp | 2 +- soh/src/overlays/actors/ovl_En_Box/z_en_box.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/soh/soh/SohGui/SohMenuEnhancements.cpp b/soh/soh/SohGui/SohMenuEnhancements.cpp index b79ed4c5af2..f0bc173ca8c 100644 --- a/soh/soh/SohGui/SohMenuEnhancements.cpp +++ b/soh/soh/SohGui/SohMenuEnhancements.cpp @@ -181,7 +181,7 @@ void SohMenu::AddMenuEnhancements() { .PreFunc([](WidgetInfo& info) { info.isHidden = !CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), 0); }) - .Options(CheckboxOptions().Tooltip("Only change the texture of chests if you have the Stone of Agony.")); + .Options(CheckboxOptions().Tooltip("Only change the texture of containers if you have the Stone of Agony.")); AddWidget(path, "Time of Day", WIDGET_SEPARATOR_TEXT); AddWidget(path, "Nighttime GS Always Spawn", WIDGET_CVAR_CHECKBOX) 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 70b53942a00..50b1a3ef2d6 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 @@ -658,6 +658,7 @@ void EnBox_UpdateTexture(EnBox* this, PlayState* play) { this->boxLidDL = EnBox_LoadChestDL(gChestLidMinorDL, gTreasureChestChestSideAndLidDL); break; case ITEM_CATEGORY_JUNK: + default: this->boxBodyDL = EnBox_LoadChestDL(gChestBodyJunkDL, gTreasureChestChestFrontDL); this->boxLidDL = EnBox_LoadChestDL(gChestLidJunkDL, gTreasureChestChestSideAndLidDL); break;