diff --git a/soh/assets/custom/objects/object_box/gBoxChestCornerHealthTex b/soh/assets/custom/objects/object_box/gBoxChestCornerHealthTex
new file mode 100644
index 00000000000..19ef32122dc
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestCornerHealthTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestCornerJunkTex b/soh/assets/custom/objects/object_box/gBoxChestCornerJunkTex
new file mode 100644
index 00000000000..6516ae7ea3f
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestCornerJunkTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestCornerLesserTex b/soh/assets/custom/objects/object_box/gBoxChestCornerLesserTex
new file mode 100644
index 00000000000..09389403826
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestCornerLesserTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestCornerMajorTex b/soh/assets/custom/objects/object_box/gBoxChestCornerMajorTex
new file mode 100644
index 00000000000..a95405ab8ea
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestCornerMajorTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestCornerMaskTex b/soh/assets/custom/objects/object_box/gBoxChestCornerMaskTex
new file mode 100644
index 00000000000..7a48546471a
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestCornerMaskTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestCornerSkullTokenTex b/soh/assets/custom/objects/object_box/gBoxChestCornerSkullTokenTex
new file mode 100644
index 00000000000..f7c68ca745c
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestCornerSkullTokenTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestCornerSmallKeyTex b/soh/assets/custom/objects/object_box/gBoxChestCornerSmallKeyTex
new file mode 100644
index 00000000000..cc439f42652
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestCornerSmallKeyTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestCornerStrayFairyTex b/soh/assets/custom/objects/object_box/gBoxChestCornerStrayFairyTex
new file mode 100644
index 00000000000..a04cebf7aa1
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestCornerStrayFairyTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockHealthTex b/soh/assets/custom/objects/object_box/gBoxChestLockHealthTex
new file mode 100644
index 00000000000..aa7d744c11d
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestLockHealthTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockJunkTex b/soh/assets/custom/objects/object_box/gBoxChestLockJunkTex
new file mode 100644
index 00000000000..5b12512b958
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestLockJunkTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockLesserTex b/soh/assets/custom/objects/object_box/gBoxChestLockLesserTex
new file mode 100644
index 00000000000..d657c19f6ba
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestLockLesserTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockMajorTex b/soh/assets/custom/objects/object_box/gBoxChestLockMajorTex
new file mode 100644
index 00000000000..8873ab192b4
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestLockMajorTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockMaskTex b/soh/assets/custom/objects/object_box/gBoxChestLockMaskTex
new file mode 100644
index 00000000000..925a6f5cd2d
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestLockMaskTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockSkullTokenTex b/soh/assets/custom/objects/object_box/gBoxChestLockSkullTokenTex
new file mode 100644
index 00000000000..bcd26d00313
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestLockSkullTokenTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockSmallKeyTex b/soh/assets/custom/objects/object_box/gBoxChestLockSmallKeyTex
new file mode 100644
index 00000000000..95bd6c6f1b0
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestLockSmallKeyTex differ
diff --git a/soh/assets/custom/objects/object_box/gBoxChestLockStrayFairyTex b/soh/assets/custom/objects/object_box/gBoxChestLockStrayFairyTex
new file mode 100644
index 00000000000..662451f5a87
Binary files /dev/null and b/soh/assets/custom/objects/object_box/gBoxChestLockStrayFairyTex differ
diff --git a/soh/assets/custom/objects/object_box/gChestBodyFairyDL b/soh/assets/custom/objects/object_box/gChestBodyFairyDL
new file mode 100644
index 00000000000..4d57ef81b24
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyFairyDL
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyFairyDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_tri_0
new file mode 100644
index 00000000000..80f48e5a62b
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_tri_0
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyFairyDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_tri_1
new file mode 100644
index 00000000000..58fe1eaa15c
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_tri_1
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyFairyDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_vtx_0
new file mode 100644
index 00000000000..3ab83b21e4d
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_vtx_0
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyFairyDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_vtx_1
new file mode 100644
index 00000000000..d804c927222
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyFairyDL_vtx_1
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyHeartDL b/soh/assets/custom/objects/object_box/gChestBodyHeartDL
new file mode 100644
index 00000000000..8274b7b9125
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyHeartDL
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyHeartDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_tri_0
new file mode 100644
index 00000000000..16a977ac8a8
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_tri_0
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyHeartDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_tri_1
new file mode 100644
index 00000000000..198755bf37b
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_tri_1
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyHeartDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_vtx_0
new file mode 100644
index 00000000000..3ab83b21e4d
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_vtx_0
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyHeartDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_vtx_1
new file mode 100644
index 00000000000..d804c927222
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyHeartDL_vtx_1
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyJunkDL b/soh/assets/custom/objects/object_box/gChestBodyJunkDL
new file mode 100644
index 00000000000..19347988547
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyJunkDL
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyJunkDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_tri_0
new file mode 100644
index 00000000000..ecbf68afd3b
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_tri_0
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyJunkDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_tri_1
new file mode 100644
index 00000000000..b86a8ddf1e2
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_tri_1
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyJunkDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_vtx_0
new file mode 100644
index 00000000000..3ab83b21e4d
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_vtx_0
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyJunkDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_vtx_1
new file mode 100644
index 00000000000..d804c927222
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyJunkDL_vtx_1
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMajorDL b/soh/assets/custom/objects/object_box/gChestBodyMajorDL
new file mode 100644
index 00000000000..e6d43964e74
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMajorDL
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMajorDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_tri_0
new file mode 100644
index 00000000000..7ba89ed2f4f
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_tri_0
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMajorDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_tri_1
new file mode 100644
index 00000000000..0520b4ced97
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_tri_1
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMajorDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_vtx_0
new file mode 100644
index 00000000000..3ab83b21e4d
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_vtx_0
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMajorDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_vtx_1
new file mode 100644
index 00000000000..d804c927222
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMajorDL_vtx_1
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMaskDL b/soh/assets/custom/objects/object_box/gChestBodyMaskDL
new file mode 100644
index 00000000000..e7e50148854
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMaskDL
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMaskDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_tri_0
new file mode 100644
index 00000000000..5f08fa47885
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_tri_0
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMaskDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_tri_1
new file mode 100644
index 00000000000..5128578faa7
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_tri_1
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMaskDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_vtx_0
new file mode 100644
index 00000000000..3ab83b21e4d
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_vtx_0
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMaskDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_vtx_1
new file mode 100644
index 00000000000..d804c927222
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMaskDL_vtx_1
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMinorDL b/soh/assets/custom/objects/object_box/gChestBodyMinorDL
new file mode 100644
index 00000000000..b3a1648b509
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMinorDL
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMinorDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_tri_0
new file mode 100644
index 00000000000..19115d1d4e3
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_tri_0
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMinorDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_tri_1
new file mode 100644
index 00000000000..c70314950b7
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_tri_1
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMinorDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_vtx_0
new file mode 100644
index 00000000000..3ab83b21e4d
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_vtx_0
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyMinorDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_vtx_1
new file mode 100644
index 00000000000..d804c927222
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyMinorDL_vtx_1
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL
new file mode 100644
index 00000000000..0ff014d4653
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_tri_0
new file mode 100644
index 00000000000..40441e41eaa
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_tri_0
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_tri_1
new file mode 100644
index 00000000000..92ce38964fe
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_tri_1
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_vtx_0
new file mode 100644
index 00000000000..3ab83b21e4d
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_vtx_0
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_vtx_1
new file mode 100644
index 00000000000..d804c927222
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodySmallKeyDL_vtx_1
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyTokenDL b/soh/assets/custom/objects/object_box/gChestBodyTokenDL
new file mode 100644
index 00000000000..70336c4e365
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyTokenDL
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyTokenDL_tri_0 b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_tri_0
new file mode 100644
index 00000000000..9884085ec0b
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_tri_0
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyTokenDL_tri_1 b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_tri_1
new file mode 100644
index 00000000000..f6c1aceaab8
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_tri_1
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyTokenDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_vtx_0
new file mode 100644
index 00000000000..3ab83b21e4d
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_vtx_0
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestBodyTokenDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_vtx_1
new file mode 100644
index 00000000000..d804c927222
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestBodyTokenDL_vtx_1
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidFairyDL b/soh/assets/custom/objects/object_box/gChestLidFairyDL
new file mode 100644
index 00000000000..9b32a374bb9
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidFairyDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidFairyDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidFairyDL_tri_0
new file mode 100644
index 00000000000..4a0c6750e80
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidFairyDL_tri_0
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidFairyDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidFairyDL_vtx_0
new file mode 100644
index 00000000000..c021e6e194c
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidFairyDL_vtx_0
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidHeartDL b/soh/assets/custom/objects/object_box/gChestLidHeartDL
new file mode 100644
index 00000000000..11b40b47fea
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidHeartDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidHeartDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidHeartDL_tri_0
new file mode 100644
index 00000000000..da15c231bc0
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidHeartDL_tri_0
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidHeartDL_tri_1 b/soh/assets/custom/objects/object_box/gChestLidHeartDL_tri_1
new file mode 100644
index 00000000000..9b827f5c283
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidHeartDL_tri_1
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidHeartDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidHeartDL_vtx_0
new file mode 100644
index 00000000000..c021e6e194c
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidHeartDL_vtx_0
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidHeartDL_vtx_1 b/soh/assets/custom/objects/object_box/gChestLidHeartDL_vtx_1
new file mode 100644
index 00000000000..d804c927222
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidHeartDL_vtx_1
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidJunkDL b/soh/assets/custom/objects/object_box/gChestLidJunkDL
new file mode 100644
index 00000000000..85ccf46f223
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidJunkDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidJunkDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidJunkDL_tri_0
new file mode 100644
index 00000000000..660512b84a7
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidJunkDL_tri_0
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidJunkDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidJunkDL_vtx_0
new file mode 100644
index 00000000000..c021e6e194c
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidJunkDL_vtx_0
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidMajorDL b/soh/assets/custom/objects/object_box/gChestLidMajorDL
new file mode 100644
index 00000000000..5def569bd06
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidMajorDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidMajorDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidMajorDL_tri_0
new file mode 100644
index 00000000000..8b50e76c6ce
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidMajorDL_tri_0
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidMajorDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidMajorDL_vtx_0
new file mode 100644
index 00000000000..c021e6e194c
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidMajorDL_vtx_0
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidMaskDL b/soh/assets/custom/objects/object_box/gChestLidMaskDL
new file mode 100644
index 00000000000..86c5b1dddbc
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidMaskDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidMaskDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidMaskDL_tri_0
new file mode 100644
index 00000000000..e7092d44100
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidMaskDL_tri_0
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidMaskDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidMaskDL_vtx_0
new file mode 100644
index 00000000000..c021e6e194c
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidMaskDL_vtx_0
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidMinorDL b/soh/assets/custom/objects/object_box/gChestLidMinorDL
new file mode 100644
index 00000000000..741f0f5e2a0
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidMinorDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidMinorDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidMinorDL_tri_0
new file mode 100644
index 00000000000..e4f63d2356f
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidMinorDL_tri_0
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidMinorDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidMinorDL_vtx_0
new file mode 100644
index 00000000000..c021e6e194c
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidMinorDL_vtx_0
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL b/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL
new file mode 100644
index 00000000000..bc6711abd4c
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL_tri_0
new file mode 100644
index 00000000000..a821cece1d1
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL_tri_0
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL_vtx_0
new file mode 100644
index 00000000000..c021e6e194c
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidSmallKeyDL_vtx_0
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidTokenDL b/soh/assets/custom/objects/object_box/gChestLidTokenDL
new file mode 100644
index 00000000000..6e11a9d8e8e
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidTokenDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidTokenDL_tri_0 b/soh/assets/custom/objects/object_box/gChestLidTokenDL_tri_0
new file mode 100644
index 00000000000..a9e53fb19c7
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidTokenDL_tri_0
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/gChestLidTokenDL_vtx_0 b/soh/assets/custom/objects/object_box/gChestLidTokenDL_vtx_0
new file mode 100644
index 00000000000..c021e6e194c
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/gChestLidTokenDL_vtx_0
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyFairyDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodyFairyDL_Front
new file mode 100644
index 00000000000..8437c770fc1
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodyFairyDL_Front
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyFairyDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodyFairyDL_Sides
new file mode 100644
index 00000000000..549c67b6b71
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodyFairyDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyHeartDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodyHeartDL_Front
new file mode 100644
index 00000000000..e3f7038b712
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodyHeartDL_Front
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyHeartDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodyHeartDL_Sides
new file mode 100644
index 00000000000..039ef18b0fa
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodyHeartDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyJunkDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodyJunkDL_Front
new file mode 100644
index 00000000000..879cce7cec1
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodyJunkDL_Front
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyJunkDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodyJunkDL_Sides
new file mode 100644
index 00000000000..31ef4175081
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodyJunkDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyMajorDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodyMajorDL_Front
new file mode 100644
index 00000000000..d3496b842ba
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodyMajorDL_Front
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyMajorDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodyMajorDL_Sides
new file mode 100644
index 00000000000..f9068da8bcf
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodyMajorDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyMaskDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodyMaskDL_Front
new file mode 100644
index 00000000000..25b85080b5b
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodyMaskDL_Front
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyMaskDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodyMaskDL_Sides
new file mode 100644
index 00000000000..e09c1740098
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodyMaskDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyMinorDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodyMinorDL_Front
new file mode 100644
index 00000000000..a9d13587bb1
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodyMinorDL_Front
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyMinorDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodyMinorDL_Sides
new file mode 100644
index 00000000000..c70d5a0ce51
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodyMinorDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodySmallKeyDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodySmallKeyDL_Front
new file mode 100644
index 00000000000..adaae64a8ac
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodySmallKeyDL_Front
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodySmallKeyDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodySmallKeyDL_Sides
new file mode 100644
index 00000000000..729cc7b688a
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodySmallKeyDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyTokenDL_Front b/soh/assets/custom/objects/object_box/mat_gChestBodyTokenDL_Front
new file mode 100644
index 00000000000..eefc3457c10
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodyTokenDL_Front
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestBodyTokenDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestBodyTokenDL_Sides
new file mode 100644
index 00000000000..5c609652ad9
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestBodyTokenDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidFairyDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidFairyDL_Sides
new file mode 100644
index 00000000000..549c67b6b71
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestLidFairyDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidHeartDL_Front b/soh/assets/custom/objects/object_box/mat_gChestLidHeartDL_Front
new file mode 100644
index 00000000000..e3f7038b712
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestLidHeartDL_Front
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidHeartDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidHeartDL_Sides
new file mode 100644
index 00000000000..039ef18b0fa
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestLidHeartDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidJunkDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidJunkDL_Sides
new file mode 100644
index 00000000000..31ef4175081
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestLidJunkDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidMajorDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidMajorDL_Sides
new file mode 100644
index 00000000000..f9068da8bcf
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestLidMajorDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidMaskDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidMaskDL_Sides
new file mode 100644
index 00000000000..e09c1740098
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestLidMaskDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidMinorDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidMinorDL_Sides
new file mode 100644
index 00000000000..c70d5a0ce51
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestLidMinorDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidSmallKeyDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidSmallKeyDL_Sides
new file mode 100644
index 00000000000..729cc7b688a
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestLidSmallKeyDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_box/mat_gChestLidTokenDL_Sides b/soh/assets/custom/objects/object_box/mat_gChestLidTokenDL_Sides
new file mode 100644
index 00000000000..5c609652ad9
--- /dev/null
+++ b/soh/assets/custom/objects/object_box/mat_gChestLidTokenDL_Sides
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/soh_assets.h b/soh/assets/soh_assets.h
index 3c3ddcf5a7e..b29b965822a 100644
--- a/soh/assets/soh_assets.h
+++ b/soh/assets/soh_assets.h
@@ -38,6 +38,42 @@ static const ALIGN_ASSET(2) char gSkullTreasureChestFrontTex[] = dgSkullTreasure
#define dgSkullTreasureChestSideAndTopTex "__OTR__objects/object_box/gSkullTreasureChestSideAndTopTex"
static const ALIGN_ASSET(2) char gSkullTreasureChestSideAndTopTex[] = dgSkullTreasureChestSideAndTopTex;
+#define dgChestBodyHeartDL "__OTR__objects/object_box/gChestBodyHeartDL"
+static const ALIGN_ASSET(2) char gChestBodyHeartDL[] = dgChestBodyHeartDL;
+
+#define dgChestLidHeartDL "__OTR__objects/object_box/gChestLidHeartDL"
+static const ALIGN_ASSET(2) char gChestLidHeartDL[] = dgChestLidHeartDL;
+
+#define dgChestBodyJunkDL "__OTR__objects/object_box/gChestBodyJunkDL"
+static const ALIGN_ASSET(2) char gChestBodyJunkDL[] = dgChestBodyJunkDL;
+
+#define dgChestLidJunkDL "__OTR__objects/object_box/gChestLidJunkDL"
+static const ALIGN_ASSET(2) char gChestLidJunkDL[] = dgChestLidJunkDL;
+
+#define dgChestBodyMajorDL "__OTR__objects/object_box/gChestBodyMajorDL"
+static const ALIGN_ASSET(2) char gChestBodyMajorDL[] = dgChestBodyMajorDL;
+
+#define dgChestLidMajorDL "__OTR__objects/object_box/gChestLidMajorDL"
+static const ALIGN_ASSET(2) char gChestLidMajorDL[] = dgChestLidMajorDL;
+
+#define dgChestBodyMinorDL "__OTR__objects/object_box/gChestBodyMinorDL"
+static const ALIGN_ASSET(2) char gChestBodyMinorDL[] = dgChestBodyMinorDL;
+
+#define dgChestLidMinorDL "__OTR__objects/object_box/gChestLidMinorDL"
+static const ALIGN_ASSET(2) char gChestLidMinorDL[] = dgChestLidMinorDL;
+
+#define dgChestBodySmallKeyDL "__OTR__objects/object_box/gChestBodySmallKeyDL"
+static const ALIGN_ASSET(2) char gChestBodySmallKeyDL[] = dgChestBodySmallKeyDL;
+
+#define dgChestLidSmallKeyDL "__OTR__objects/object_box/gChestLidSmallKeyDL"
+static const ALIGN_ASSET(2) char gChestLidSmallKeyDL[] = dgChestLidSmallKeyDL;
+
+#define dgChestBodyTokenDL "__OTR__objects/object_box/gChestBodyTokenDL"
+static const ALIGN_ASSET(2) char gChestBodyTokenDL[] = dgChestBodyTokenDL;
+
+#define dgChestLidTokenDL "__OTR__objects/object_box/gChestLidTokenDL"
+static const ALIGN_ASSET(2) char gChestLidTokenDL[] = dgChestLidTokenDL;
+
#define dgTitleRandomizerSubtitleTex "__OTR__objects/object_mag/gTitleRandomizerSubtitleTex"
static const ALIGN_ASSET(2) char gTitleRandomizerSubtitleTex[] = dgTitleRandomizerSubtitleTex;
diff --git a/soh/soh/Enhancements/enhancementTypes.h b/soh/soh/Enhancements/enhancementTypes.h
index be0a3990f3a..2b380b249bd 100644
--- a/soh/soh/Enhancements/enhancementTypes.h
+++ b/soh/soh/Enhancements/enhancementTypes.h
@@ -7,13 +7,6 @@ typedef enum {
WARP_MODE_OVERRIDE_VANILLA_AS_MQ,
} BetterDebugWarpOverrideMQMode;
-typedef enum {
- CSMC_DISABLED,
- CSMC_BOTH,
- CSMC_TEXTURE,
- CSMC_SIZE,
-} ChestStyleMatchesContentsType;
-
typedef enum {
SGIA_DISABLED,
SGIA_JUNK,
diff --git a/soh/soh/Enhancements/item-tables/ItemTableTypes.h b/soh/soh/Enhancements/item-tables/ItemTableTypes.h
index 46b4cbb5b74..eae97a6cc87 100644
--- a/soh/soh/Enhancements/item-tables/ItemTableTypes.h
+++ b/soh/soh/Enhancements/item-tables/ItemTableTypes.h
@@ -24,10 +24,11 @@ typedef enum GetItemFrom {
typedef enum GetItemCategory {
/* 0x00 */ ITEM_CATEGORY_JUNK,
/* 0x01 */ ITEM_CATEGORY_LESSER,
- /* 0x02 */ ITEM_CATEGORY_BOSS_KEY,
- /* 0x03 */ ITEM_CATEGORY_SMALL_KEY,
- /* 0x04 */ ITEM_CATEGORY_SKULLTULA_TOKEN,
- /* 0x05 */ ITEM_CATEGORY_MAJOR,
+ /* 0x02 */ ITEM_CATEGORY_HEALTH,
+ /* 0x03 */ ITEM_CATEGORY_BOSS_KEY,
+ /* 0x04 */ ITEM_CATEGORY_SMALL_KEY,
+ /* 0x05 */ ITEM_CATEGORY_SKULLTULA_TOKEN,
+ /* 0x06 */ ITEM_CATEGORY_MAJOR,
} GetItemCategory;
#define GET_ITEM(itemId, objectId, drawId, textId, field, chestAnim, itemCategory, modIndex, getItemId) \
@@ -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 c4c4e1a7a11..5bb6bacab12 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_HEALTH:
+ Gfx_DrawDListOpa(play, (Gfx*)gLargeHeartCrateDL);
+ break;
case ITEM_CATEGORY_LESSER:
- switch (crateItem.itemId) {
- case ITEM_HEART_PIECE:
- case ITEM_HEART_PIECE_2:
- case ITEM_HEART_CONTAINER:
- Gfx_DrawDListOpa(play, (Gfx*)gLargeHeartCrateDL);
- break;
- default:
- Gfx_DrawDListOpa(play, (Gfx*)gLargeMinorCrateDL);
- break;
- }
+ Gfx_DrawDListOpa(play, (Gfx*)gLargeMinorCrateDL);
break;
- 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 67f090da77a..76cacad33f2 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 b79ae1e4b83..933cdea3d88 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 c7de846766c..8f73310266a 100644
--- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp
+++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp
@@ -386,6 +386,7 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() {
getItemEntry.modIndex == MOD_RANDOMIZER) &&
(getItemEntry.getItemCategory == ITEM_CATEGORY_JUNK ||
getItemEntry.getItemCategory == ITEM_CATEGORY_SKULLTULA_TOKEN ||
+ getItemEntry.getItemCategory == ITEM_CATEGORY_HEALTH ||
getItemEntry.getItemCategory == ITEM_CATEGORY_LESSER ||
// Treat small keys as junk if Skeleton Key is obtained.
(getItemEntry.getItemCategory == ITEM_CATEGORY_SMALL_KEY &&
diff --git a/soh/soh/Enhancements/randomizer/item_list.cpp b/soh/soh/Enhancements/randomizer/item_list.cpp
index fb071fcdfe0..bfd487ed658 100644
--- a/soh/soh/Enhancements/randomizer/item_list.cpp
+++ b/soh/soh/Enhancements/randomizer/item_list.cpp
@@ -41,7 +41,7 @@ void Rando::StaticData::InitItemTable() {
itemTable[RG_GERUDO_MEMBERSHIP_CARD] = Item(RG_GERUDO_MEMBERSHIP_CARD, Text{ "Gerudo Membership Card", "Carte Gerudo", "Gerudo-Paß" }, ITEMTYPE_ITEM, GI_GERUDO_CARD, true, LOGIC_GERUDO_CARD, RHT_GERUDO_MEMBERSHIP_CARD, ITEM_GERUDO_CARD, OBJECT_GI_GERUDO, GID_GERUDO_CARD, 0x7B, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE);
itemTable[RG_MAGIC_BEAN] = Item(RG_MAGIC_BEAN, Text{ "Magic Bean", "Haricots Magiques", "Wundererbse" }, ITEMTYPE_ITEM, GI_BEAN, true, LOGIC_MAGIC_BEAN, RHT_MAGIC_BEAN, ITEM_BEAN, OBJECT_GI_BEAN, GID_BEAN, 0x48, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, MOD_NONE);
itemTable[RG_MAGIC_BEAN_PACK] = Item(RG_MAGIC_BEAN_PACK, Text{ "Magic Bean Pack", "Paquet de Haricots Magiques", "Wundererbsen-Packung" }, ITEMTYPE_ITEM, RG_MAGIC_BEAN_PACK, true, LOGIC_MAGIC_BEAN, RHT_MAGIC_BEAN_PACK, RG_MAGIC_BEAN_PACK, OBJECT_GI_BEAN, GID_BEAN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
- itemTable[RG_DOUBLE_DEFENSE] = Item(RG_DOUBLE_DEFENSE, Text{ "Double Defense", "Double Défence", "Doppelte Verteidigung" }, ITEMTYPE_ITEM, RG_DOUBLE_DEFENSE, true, LOGIC_DOUBLE_DEFENSE, RHT_DOUBLE_DEFENSE, RG_DOUBLE_DEFENSE, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xE9, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
+ itemTable[RG_DOUBLE_DEFENSE] = Item(RG_DOUBLE_DEFENSE, Text{ "Double Defense", "Double Défence", "Doppelte Verteidigung" }, ITEMTYPE_ITEM, RG_DOUBLE_DEFENSE, true, LOGIC_DOUBLE_DEFENSE, RHT_DOUBLE_DEFENSE, RG_DOUBLE_DEFENSE, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xE9, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_RANDOMIZER);
itemTable[RG_DOUBLE_DEFENSE].SetCustomDrawFunc(Randomizer_DrawDoubleDefense);
// Trade Quest Items
itemTable[RG_WEIRD_EGG] = Item(RG_WEIRD_EGG, Text{ "Weird Egg", "Oeuf Curieux", "Seltsames Ei" }, ITEMTYPE_ITEM, GI_WEIRD_EGG, true, LOGIC_WEIRD_EGG, RHT_WEIRD_EGG, ITEM_WEIRD_EGG, OBJECT_GI_EGG, GID_EGG, 0x9A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE);
@@ -258,8 +258,8 @@ void Rando::StaticData::InitItemTable() {
itemTable[RG_RED_RUPEE] = Item(RG_RED_RUPEE, Text{ "Red Rupee", "Rubis Rouge", "Roter Rubin" }, ITEMTYPE_ITEM, GI_RUPEE_RED, false, LOGIC_NONE, RHT_RED_RUPEE, ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0xF0, 0x02, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE);
itemTable[RG_PURPLE_RUPEE] = Item(RG_PURPLE_RUPEE, Text{ "Purple Rupee", "Rubis Pourpre", "Violetter Rubin" }, ITEMTYPE_ITEM, GI_RUPEE_PURPLE, false, LOGIC_NONE, RHT_PURPLE_RUPEE, ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0xF1, 0x14, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE);
itemTable[RG_HUGE_RUPEE] = Item(RG_HUGE_RUPEE, Text{ "Huge Rupee", "Énorme Rubis", "Goldener Rubin" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, false, LOGIC_NONE, RHT_HUGE_RUPEE, ITEM_RUPEE_GOLD, OBJECT_GI_RUPY, GID_RUPEE_GOLD, 0xF2, 0x13, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE);
- itemTable[RG_PIECE_OF_HEART] = Item(RG_PIECE_OF_HEART, Text{ "Piece of Heart", "Quart de Coeur", "Herzteil" }, ITEMTYPE_ITEM, GI_HEART_PIECE, true, LOGIC_PIECE_OF_HEART, RHT_PIECE_OF_HEART, ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC2, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE);
- itemTable[RG_HEART_CONTAINER] = Item(RG_HEART_CONTAINER, Text{ "Heart Container", "Réceptacle de Coeur", "Herzcontainer" }, ITEMTYPE_ITEM, GI_HEART_CONTAINER_2, true, LOGIC_HEART_CONTAINER, RHT_HEART_CONTAINER, ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE);
+ itemTable[RG_PIECE_OF_HEART] = Item(RG_PIECE_OF_HEART, Text{ "Piece of Heart", "Quart de Coeur", "Herzteil" }, ITEMTYPE_ITEM, GI_HEART_PIECE, true, LOGIC_PIECE_OF_HEART, RHT_PIECE_OF_HEART, ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC2, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_NONE);
+ itemTable[RG_HEART_CONTAINER] = Item(RG_HEART_CONTAINER, Text{ "Heart Container", "Réceptacle de Coeur", "Herzcontainer" }, ITEMTYPE_ITEM, GI_HEART_CONTAINER_2, true, LOGIC_HEART_CONTAINER, RHT_HEART_CONTAINER, ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_NONE);
itemTable[RG_ICE_TRAP] = Item(RG_ICE_TRAP, Text{ "Ice Trap", "Piège de Glace", "Eisfalle" }, ITEMTYPE_ITEM, RG_ICE_TRAP, false, LOGIC_NONE, RHT_ICE_TRAP, RG_ICE_TRAP, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
itemTable[RG_MILK] = Item(RG_MILK, Text{ "Milk", "Lait", "Lon Lon-Milch" }, ITEMTYPE_ITEM, GI_MILK, false, LOGIC_NONE, RHT_NONE, ITEM_MILK, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE);
itemTable[RG_FISH] = Item(RG_FISH, Text{ "Fish", "Poisson", "Fisch" }, ITEMTYPE_ITEM, GI_FISH, false, LOGIC_NONE, RHT_NONE, ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x47, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE);
@@ -282,7 +282,7 @@ void Rando::StaticData::InitItemTable() {
itemTable[RG_GREEN_POTION_REFILL] = Item(RG_GREEN_POTION_REFILL, Text{ "Green Potion Refill", "Recharge de Potion Verte", "Grünes Elixier" }, ITEMTYPE_REFILL, GI_POTION_GREEN, false, LOGIC_NONE, RHT_NONE, ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x44, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE);
itemTable[RG_BLUE_POTION_REFILL] = Item(RG_BLUE_POTION_REFILL, Text{ "Blue Potion Refill", "Recharge de Potion Bleue", "Blaues Elixier" }, ITEMTYPE_REFILL, GI_POTION_BLUE, false, LOGIC_NONE, RHT_NONE, ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x45, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE);
// Treasure Game
- itemTable[RG_TREASURE_GAME_HEART] = Item(RG_TREASURE_GAME_HEART, Text{ "Piece of Heart (WINNER)", "Quart de Coeur (Chasse-aux-Trésors)", "Herzteil (Truhenlotterie)" }, ITEMTYPE_ITEM, GI_HEART_PIECE_WIN, true, LOGIC_PIECE_OF_HEART, RHT_TREASURE_GAME_HEART, ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE);
+ itemTable[RG_TREASURE_GAME_HEART] = Item(RG_TREASURE_GAME_HEART, Text{ "Piece of Heart (WINNER)", "Quart de Coeur (Chasse-aux-Trésors)", "Herzteil (Truhenlotterie)" }, ITEMTYPE_ITEM, GI_HEART_PIECE_WIN, true, LOGIC_PIECE_OF_HEART, RHT_TREASURE_GAME_HEART, ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_NONE);
itemTable[RG_TREASURE_GAME_GREEN_RUPEE] = Item(RG_TREASURE_GAME_GREEN_RUPEE, Text{ "Green Rupee (LOSER)", "Rubis Vert (Chasse-aux-Trésors)", "Grüner Rubin (Truhenlotterie)" }, ITEMTYPE_ITEM, GI_RUPEE_GREEN_LOSE, false, LOGIC_NONE, RHT_TREASURE_GAME_GREEN_RUPEE, ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0xF4, 0x00, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, MOD_NONE);
// Shop
itemTable[RG_BUY_DEKU_NUTS_5] = Item(RG_BUY_DEKU_NUTS_5, Text{ "Buy Deku Nut (5)", "Acheter: Noix Mojo (5)", "Deku-Nüsse kaufen (5)" }, ITEMTYPE_SHOP, GI_NUTS_5_2, true, LOGIC_NUT_ACCESS, RHT_DEKU_NUTS_5, ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 15);
diff --git a/soh/soh/Enhancements/timesaver_hook_handlers.cpp b/soh/soh/Enhancements/timesaver_hook_handlers.cpp
index 46b4c61b4fc..56d6e652d2a 100644
--- a/soh/soh/Enhancements/timesaver_hook_handlers.cpp
+++ b/soh/soh/Enhancements/timesaver_hook_handlers.cpp
@@ -852,9 +852,6 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li
case VB_PLAY_SLOW_CHEST_CS: {
if (CVarGetInteger(CVAR_ENHANCEMENT("FastChests"), 0)) {
*should = false;
- } else if (CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED) && *should) {
- EnBox* enBox = va_arg(args, EnBox*);
- *should = enBox->dyna.actor.scale.x != 0.005f;
}
break;
}
diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp
index 14b7d279fae..9637c0ff16f 100644
--- a/soh/soh/OTRGlobals.cpp
+++ b/soh/soh/OTRGlobals.cpp
@@ -704,8 +704,8 @@ extern "C" void VanillaItemTable_Init() {
GET_ITEM(ITEM_GERUDO_CARD, OBJECT_GI_GERUDO, GID_GERUDO_CARD, 0x7B, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_GERUDO_CARD),
GET_ITEM(ITEM_OCARINA_FAIRY, OBJECT_GI_OCARINA_0, GID_OCARINA_FAIRY, 0x4A, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_OCARINA_FAIRY),
GET_ITEM(ITEM_SEEDS, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_SEEDS_5),
- GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_HEART_CONTAINER),
- GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC2, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_HEART_PIECE),
+ GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_NONE, GI_HEART_CONTAINER),
+ GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC2, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_NONE, GI_HEART_PIECE),
GET_ITEM(ITEM_KEY_BOSS, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, 0xC7, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_NONE, GI_KEY_BOSS),
GET_ITEM(ITEM_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, 0x67, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_COMPASS),
GET_ITEM(ITEM_DUNGEON_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, 0x66, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_MAP),
@@ -722,7 +722,7 @@ extern "C" void VanillaItemTable_Init() {
GET_ITEM(ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0x6F, 0x00, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_RUPEE_GREEN),
GET_ITEM(ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0xCC, 0x01, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_RUPEE_BLUE),
GET_ITEM(ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0xF0, 0x02, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_RUPEE_RED),
- GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_HEART_CONTAINER_2),
+ GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_NONE, GI_HEART_CONTAINER_2),
GET_ITEM(ITEM_MILK, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, GI_MILK),
GET_ITEM(ITEM_MASK_GORON, OBJECT_GI_GOLONMASK, GID_MASK_GORON, 0x14, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_MASK_GORON),
GET_ITEM(ITEM_MASK_ZORA, OBJECT_GI_ZORAMASK, GID_MASK_ZORA, 0x15, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_MASK_ZORA),
@@ -761,7 +761,7 @@ extern "C" void VanillaItemTable_Init() {
GET_ITEM(ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0xF5, 0x01, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_RUPEE_BLUE_LOSE),
GET_ITEM(ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0xF6, 0x02, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_RUPEE_RED_LOSE),
GET_ITEM(ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0xF7, 0x14, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_RUPEE_PURPLE_LOSE),
- GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, GI_HEART_PIECE_WIN),
+ GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_HEALTH, MOD_NONE, GI_HEART_PIECE_WIN),
GET_ITEM(ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x90, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, GI_STICK_UPGRADE_20),
GET_ITEM(ITEM_STICK_UPGRADE_30, OBJECT_GI_STICK, GID_STICK, 0x91, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, GI_STICK_UPGRADE_30),
GET_ITEM(ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0xA7, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, GI_NUT_UPGRADE_30),
diff --git a/soh/soh/SohGui/SohMenuEnhancements.cpp b/soh/soh/SohGui/SohMenuEnhancements.cpp
index 1136a656ccc..f0bc173ca8c 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 92ad93fb186..50b1a3ef2d6 100644
--- a/soh/src/overlays/actors/ovl_En_Box/z_en_box.c
+++ b/soh/src/overlays/actors/ovl_En_Box/z_en_box.c
@@ -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() {