From a134d2c59a6cbccbe739fb8f73413a4d331b5114 Mon Sep 17 00:00:00 2001
From: Reppan <72985260+Jepvid@users.noreply.github.com>
Date: Sun, 4 Jan 2026 14:37:41 +0100
Subject: [PATCH] Update CSMC to CMC and update chests to other shuffles
(#6085)
---
.../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/soh/Enhancements/enhancementTypes.h | 7 -
.../Enhancements/item-tables/ItemTableTypes.h | 11 +-
.../Enhancements/randomizer/ShuffleCrates.cpp | 41 ++--
.../Enhancements/randomizer/ShuffleGrass.cpp | 21 +-
.../Enhancements/randomizer/ShuffleTrees.cpp | 21 +-
.../Enhancements/randomizer/hook_handlers.cpp | 1 +
soh/soh/Enhancements/randomizer/item_list.cpp | 8 +-
.../Enhancements/timesaver_hook_handlers.cpp | 3 -
soh/soh/OTRGlobals.cpp | 8 +-
soh/soh/SohGui/SohMenuEnhancements.cpp | 32 +--
soh/src/overlays/actors/ovl_En_Box/z_en_box.c | 153 ++++++--------
119 files changed, 4133 insertions(+), 195 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`Cmg
i4$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+5BdMGpgcN9P+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 000000000..4d57ef81b
--- /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 000000000..80f48e5a6
--- /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 000000000..58fe1eaa1
--- /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 000000000..3ab83b21e
--- /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 000000000..d804c9272
--- /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 000000000..8274b7b91
--- /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 000000000..16a977ac8
--- /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 000000000..198755bf3
--- /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 000000000..3ab83b21e
--- /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 000000000..d804c9272
--- /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 000000000..193479885
--- /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 000000000..ecbf68afd
--- /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 000000000..b86a8ddf1
--- /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 000000000..3ab83b21e
--- /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 000000000..d804c9272
--- /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 000000000..e6d43964e
--- /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 000000000..7ba89ed2f
--- /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 000000000..0520b4ced
--- /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 000000000..3ab83b21e
--- /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 000000000..d804c9272
--- /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 000000000..e7e501488
--- /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 000000000..5f08fa478
--- /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 000000000..5128578fa
--- /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 000000000..3ab83b21e
--- /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 000000000..d804c9272
--- /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 000000000..b3a1648b5
--- /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 000000000..19115d1d4
--- /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 000000000..c70314950
--- /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 000000000..3ab83b21e
--- /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 000000000..d804c9272
--- /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 000000000..0ff014d46
--- /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 000000000..40441e41e
--- /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 000000000..92ce38964
--- /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 000000000..3ab83b21e
--- /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 000000000..d804c9272
--- /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 000000000..70336c4e3
--- /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 000000000..9884085ec
--- /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 000000000..f6c1aceaa
--- /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 000000000..3ab83b21e
--- /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 000000000..d804c9272
--- /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 000000000..9b32a374b
--- /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 000000000..4a0c6750e
--- /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 000000000..c021e6e19
--- /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 000000000..11b40b47f
--- /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 000000000..da15c231b
--- /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 000000000..9b827f5c2
--- /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 000000000..c021e6e19
--- /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 000000000..d804c9272
--- /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 000000000..85ccf46f2
--- /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 000000000..660512b84
--- /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 000000000..c021e6e19
--- /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 000000000..5def569bd
--- /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 000000000..8b50e76c6
--- /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 000000000..c021e6e19
--- /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 000000000..86c5b1ddd
--- /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 000000000..e7092d441
--- /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 000000000..c021e6e19
--- /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 000000000..741f0f5e2
--- /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 000000000..e4f63d235
--- /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 000000000..c021e6e19
--- /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 000000000..bc6711abd
--- /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 000000000..a821cece1
--- /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 000000000..c021e6e19
--- /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 000000000..6e11a9d8e
--- /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 000000000..a9e53fb19
--- /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 000000000..c021e6e19
--- /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 000000000..8437c770f
--- /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 000000000..549c67b6b
--- /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 000000000..e3f7038b7
--- /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 000000000..039ef18b0
--- /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 000000000..879cce7ce
--- /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 000000000..31ef41750
--- /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 000000000..d3496b842
--- /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 000000000..f9068da8b
--- /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 000000000..25b85080b
--- /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 000000000..e09c17400
--- /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 000000000..a9d13587b
--- /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 000000000..c70d5a0ce
--- /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 000000000..adaae64a8
--- /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 000000000..729cc7b68
--- /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 000000000..eefc3457c
--- /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 000000000..5c609652a
--- /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 000000000..549c67b6b
--- /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 000000000..e3f7038b7
--- /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 000000000..039ef18b0
--- /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 000000000..31ef41750
--- /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 000000000..f9068da8b
--- /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 000000000..e09c17400
--- /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 000000000..c70d5a0ce
--- /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 000000000..729cc7b68
--- /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 000000000..5c609652a
--- /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 3c3ddcf5a..b29b96582 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/soh/Enhancements/enhancementTypes.h b/soh/soh/Enhancements/enhancementTypes.h
index be0a3990f..2b380b249 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 46b4cbb5b..eae97a6cc 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) \
@@ -64,7 +65,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 c4c4e1a7a..5bb6bacab 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);
@@ -73,19 +72,12 @@ extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) {
case ITEM_CATEGORY_BOSS_KEY:
Gfx_DrawDListOpa(play, (Gfx*)gLargeBossKeyCrateDL);
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;
- }
+ case ITEM_CATEGORY_HEALTH:
+ Gfx_DrawDListOpa(play, (Gfx*)gLargeHeartCrateDL);
+ break;
+ case ITEM_CATEGORY_LESSER:
+ Gfx_DrawDListOpa(play, (Gfx*)gLargeMinorCrateDL);
break;
- case ITEM_CATEGORY_JUNK:
default:
Gfx_DrawDListOpa(play, (Gfx*)gLargeJunkCrateDL);
break;
@@ -95,11 +87,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);
@@ -147,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 67f090da7..76cacad33 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;
@@ -48,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 ae09b5fe3..237dcd6be 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;
@@ -103,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 c7de84676..8f7331026 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 fb071fcdf..bfd487ed6 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/Enhancements/timesaver_hook_handlers.cpp b/soh/soh/Enhancements/timesaver_hook_handlers.cpp
index 46b4c61b4..56d6e652d 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/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp
index 14b7d279f..9637c0ff1 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/soh/SohGui/SohMenuEnhancements.cpp b/soh/soh/SohGui/SohMenuEnhancements.cpp
index f0ac0d5b0..40698b2a8 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,22 @@ 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) {
+ if (!CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), 0)) {
CVarSetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0);
}
})
- .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"), 0);
})
- .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 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 92ad93fb1..50b1a3ef2 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,
@@ -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;
}
@@ -203,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) {
@@ -542,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;
@@ -575,102 +585,91 @@ 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
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);
- }
+ 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) {
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_HEALTH:
+ this->boxBodyDL = EnBox_LoadChestDL(gChestBodyHeartDL, gTreasureChestChestFrontDL);
+ this->boxLidDL = EnBox_LoadChestDL(gChestLidHeartDL, gTreasureChestChestSideAndLidDL);
break;
case ITEM_CATEGORY_LESSER:
+ this->boxBodyDL = EnBox_LoadChestDL(gChestBodyMinorDL, gTreasureChestChestFrontDL);
+ this->boxLidDL = EnBox_LoadChestDL(gChestLidMinorDL, gTreasureChestChestSideAndLidDL);
+ 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);
}
}
@@ -684,36 +683,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() {
|