diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2bdaf1de9..cc3adb1f7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -34,7 +34,7 @@ math(EXPR PATCH_INDEX "${PROJECT_VERSION_PATCH}")
# Use the patch number to select the correct word
list(GET NATO_PHONETIC_ALPHABET ${PATCH_INDEX} PROJECT_PATCH_WORD)
-set(PROJECT_BUILD_NAME "MacReady ${PROJECT_PATCH_WORD}" CACHE STRING "" FORCE)
+set(PROJECT_BUILD_NAME "Holiday 2024" CACHE STRING "" FORCE)
set(PROJECT_TEAM "github.com/harbourmasters" CACHE STRING "" FORCE)
execute_process(
diff --git a/soh/assets/custom/objects/object_festivehats/antlers_64 b/soh/assets/custom/objects/object_festivehats/antlers_64
new file mode 100644
index 000000000..74fe9e819
Binary files /dev/null and b/soh/assets/custom/objects/object_festivehats/antlers_64 differ
diff --git a/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL b/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL
new file mode 100644
index 000000000..ab8fdf45f
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL_tri_0 b/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL_tri_0
new file mode 100644
index 000000000..980452845
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL_tri_0
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL_vtx_0 b/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL_vtx_0
new file mode 100644
index 000000000..8a64cdf18
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gCuccoLadyHatDL_vtx_0
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL b/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL
new file mode 100644
index 000000000..6d059179f
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL_tri_0 b/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL_tri_0
new file mode 100644
index 000000000..3e0ab2ad8
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL_tri_0
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL_tri_1 b/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL_tri_1
new file mode 100644
index 000000000..99f0a799d
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL_tri_1
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL_vtx_0 b/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL_vtx_0
new file mode 100644
index 000000000..ebb2b0eea
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL_vtx_0
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL_vtx_1 b/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL_vtx_1
new file mode 100644
index 000000000..d7263bc94
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gEponaRudolphHatDL_vtx_1
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gHorseAntlersDL b/soh/assets/custom/objects/object_festivehats/gHorseAntlersDL
new file mode 100644
index 000000000..2b2ee6c3e
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gHorseAntlersDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gHorseAntlersDL_tri_0 b/soh/assets/custom/objects/object_festivehats/gHorseAntlersDL_tri_0
new file mode 100644
index 000000000..543e90c1f
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gHorseAntlersDL_tri_0
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gHorseAntlersDL_vtx_0 b/soh/assets/custom/objects/object_festivehats/gHorseAntlersDL_vtx_0
new file mode 100644
index 000000000..d7263bc94
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gHorseAntlersDL_vtx_0
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gLinkAdultHatTrimDL b/soh/assets/custom/objects/object_festivehats/gLinkAdultHatTrimDL
new file mode 100644
index 000000000..27bdd9211
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gLinkAdultHatTrimDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gLinkAdultHatTrimDL_tri_0 b/soh/assets/custom/objects/object_festivehats/gLinkAdultHatTrimDL_tri_0
new file mode 100644
index 000000000..313f489de
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gLinkAdultHatTrimDL_tri_0
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gLinkAdultHatTrimDL_vtx_0 b/soh/assets/custom/objects/object_festivehats/gLinkAdultHatTrimDL_vtx_0
new file mode 100644
index 000000000..eb7d042ff
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gLinkAdultHatTrimDL_vtx_0
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gLinkAdultPompomDL b/soh/assets/custom/objects/object_festivehats/gLinkAdultPompomDL
new file mode 100644
index 000000000..6f7262451
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gLinkAdultPompomDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gLinkAdultPompomDL_tri_0 b/soh/assets/custom/objects/object_festivehats/gLinkAdultPompomDL_tri_0
new file mode 100644
index 000000000..83cf6d929
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gLinkAdultPompomDL_tri_0
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gLinkAdultPompomDL_vtx_0 b/soh/assets/custom/objects/object_festivehats/gLinkAdultPompomDL_vtx_0
new file mode 100644
index 000000000..b937dad3e
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gLinkAdultPompomDL_vtx_0
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gLinkChildHatTrimDL b/soh/assets/custom/objects/object_festivehats/gLinkChildHatTrimDL
new file mode 100644
index 000000000..769a41928
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gLinkChildHatTrimDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gLinkChildHatTrimDL_tri_0 b/soh/assets/custom/objects/object_festivehats/gLinkChildHatTrimDL_tri_0
new file mode 100644
index 000000000..776fb4da9
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gLinkChildHatTrimDL_tri_0
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gLinkChildHatTrimDL_vtx_0 b/soh/assets/custom/objects/object_festivehats/gLinkChildHatTrimDL_vtx_0
new file mode 100644
index 000000000..847f1ae81
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gLinkChildHatTrimDL_vtx_0
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gLinkChildPompomDL b/soh/assets/custom/objects/object_festivehats/gLinkChildPompomDL
new file mode 100644
index 000000000..4093e1aa3
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gLinkChildPompomDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gLinkChildPompomDL_tri_0 b/soh/assets/custom/objects/object_festivehats/gLinkChildPompomDL_tri_0
new file mode 100644
index 000000000..4f18af8bf
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gLinkChildPompomDL_tri_0
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gLinkChildPompomDL_vtx_0 b/soh/assets/custom/objects/object_festivehats/gLinkChildPompomDL_vtx_0
new file mode 100644
index 000000000..b0c371f13
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gLinkChildPompomDL_vtx_0
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gPaperCrownGenericDL b/soh/assets/custom/objects/object_festivehats/gPaperCrownGenericDL
new file mode 100644
index 000000000..ec6ccada7
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gPaperCrownGenericDL
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gPaperCrownGenericDL_tri_0 b/soh/assets/custom/objects/object_festivehats/gPaperCrownGenericDL_tri_0
new file mode 100644
index 000000000..672602bc1
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gPaperCrownGenericDL_tri_0
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gPaperCrownGenericDL_vtx_0 b/soh/assets/custom/objects/object_festivehats/gPaperCrownGenericDL_vtx_0
new file mode 100644
index 000000000..c7a513a67
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gPaperCrownGenericDL_vtx_0
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL b/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL
new file mode 100644
index 000000000..0f4573976
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL_tri_0 b/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL_tri_0
new file mode 100644
index 000000000..5396ff4d8
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL_tri_0
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL_tri_1 b/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL_tri_1
new file mode 100644
index 000000000..bdf895c49
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL_tri_1
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL_vtx_0 b/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL_vtx_0
new file mode 100644
index 000000000..145ca70f4
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL_vtx_0
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL_vtx_1 b/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL_vtx_1
new file mode 100644
index 000000000..7f90daac7
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/gSantaHatGenericDL_vtx_1
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/hilite_nose b/soh/assets/custom/objects/object_festivehats/hilite_nose
new file mode 100644
index 000000000..b2d4623c9
Binary files /dev/null and b/soh/assets/custom/objects/object_festivehats/hilite_nose differ
diff --git a/soh/assets/custom/objects/object_festivehats/mat_gCuccoLadyHatDL_f3dlite_hatcolour b/soh/assets/custom/objects/object_festivehats/mat_gCuccoLadyHatDL_f3dlite_hatcolour
new file mode 100644
index 000000000..d1d036f89
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/mat_gCuccoLadyHatDL_f3dlite_hatcolour
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/mat_gEponaRudolphHatDL_f3dlite_antlers b/soh/assets/custom/objects/object_festivehats/mat_gEponaRudolphHatDL_f3dlite_antlers
new file mode 100644
index 000000000..3717c72b2
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/mat_gEponaRudolphHatDL_f3dlite_antlers
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_shard_edge b/soh/assets/custom/objects/object_festivehats/mat_gEponaRudolphHatDL_f3dlite_rednose
similarity index 75%
rename from soh/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_shard_edge
rename to soh/assets/custom/objects/object_festivehats/mat_gEponaRudolphHatDL_f3dlite_rednose
index b9e61293d..758d8698b 100644
--- a/soh/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_shard_edge
+++ b/soh/assets/custom/objects/object_festivehats/mat_gEponaRudolphHatDL_f3dlite_rednose
@@ -1,21 +1,21 @@
-
-
-
+
+
+
-
+
-
+
-
+
diff --git a/soh/assets/custom/objects/object_festivehats/mat_gHorseAntlersDL_f3dlite_antlers b/soh/assets/custom/objects/object_festivehats/mat_gHorseAntlersDL_f3dlite_antlers
new file mode 100644
index 000000000..3717c72b2
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/mat_gHorseAntlersDL_f3dlite_antlers
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/mat_gLinkAdultHatTrimDL_f3dlite_santahat_white b/soh/assets/custom/objects/object_festivehats/mat_gLinkAdultHatTrimDL_f3dlite_santahat_white
new file mode 100644
index 000000000..2f72783f7
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/mat_gLinkAdultHatTrimDL_f3dlite_santahat_white
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/mat_gLinkAdultPompomDL_f3dlite_santahat_white b/soh/assets/custom/objects/object_festivehats/mat_gLinkAdultPompomDL_f3dlite_santahat_white
new file mode 100644
index 000000000..2f72783f7
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/mat_gLinkAdultPompomDL_f3dlite_santahat_white
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/mat_gLinkChildHatTrimDL_f3dlite_santahat_white b/soh/assets/custom/objects/object_festivehats/mat_gLinkChildHatTrimDL_f3dlite_santahat_white
new file mode 100644
index 000000000..2f72783f7
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/mat_gLinkChildHatTrimDL_f3dlite_santahat_white
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/mat_gLinkChildPompomDL_f3dlite_santahat_white b/soh/assets/custom/objects/object_festivehats/mat_gLinkChildPompomDL_f3dlite_santahat_white
new file mode 100644
index 000000000..2f72783f7
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/mat_gLinkChildPompomDL_f3dlite_santahat_white
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/mat_gPaperCrownGenericDL_f3dlite_crown b/soh/assets/custom/objects/object_festivehats/mat_gPaperCrownGenericDL_f3dlite_crown
new file mode 100644
index 000000000..4fb4e2029
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/mat_gPaperCrownGenericDL_f3dlite_crown
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/mat_gSantaHatGenericDL_f3dlite_santahatred b/soh/assets/custom/objects/object_festivehats/mat_gSantaHatGenericDL_f3dlite_santahatred
new file mode 100644
index 000000000..b42644ae8
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/mat_gSantaHatGenericDL_f3dlite_santahatred
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_festivehats/mat_gSantaHatGenericDL_f3dlite_santahatwhite b/soh/assets/custom/objects/object_festivehats/mat_gSantaHatGenericDL_f3dlite_santahatwhite
new file mode 100644
index 000000000..2f72783f7
--- /dev/null
+++ b/soh/assets/custom/objects/object_festivehats/mat_gSantaHatGenericDL_f3dlite_santahatwhite
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/CuccoBedding_32 b/soh/assets/custom/objects/object_kakariko_decor/CuccoBedding_32
new file mode 100644
index 000000000..68187fbf5
Binary files /dev/null and b/soh/assets/custom/objects/object_kakariko_decor/CuccoBedding_32 differ
diff --git a/soh/assets/custom/objects/object_kakariko_decor/SnowBlanket_32 b/soh/assets/custom/objects/object_kakariko_decor/SnowBlanket_32
new file mode 100644
index 000000000..733b30757
Binary files /dev/null and b/soh/assets/custom/objects/object_kakariko_decor/SnowBlanket_32 differ
diff --git a/soh/assets/custom/objects/object_kakariko_decor/SnowBuildup_32 b/soh/assets/custom/objects/object_kakariko_decor/SnowBuildup_32
new file mode 100644
index 000000000..4653f07d1
Binary files /dev/null and b/soh/assets/custom/objects/object_kakariko_decor/SnowBuildup_32 differ
diff --git a/soh/assets/custom/objects/object_kakariko_decor/SnowDissolve_32 b/soh/assets/custom/objects/object_kakariko_decor/SnowDissolve_32
new file mode 100644
index 000000000..e7c7aa142
Binary files /dev/null and b/soh/assets/custom/objects/object_kakariko_decor/SnowDissolve_32 differ
diff --git a/soh/assets/custom/objects/object_kakariko_decor/String_BYBY_32 b/soh/assets/custom/objects/object_kakariko_decor/String_BYBY_32
new file mode 100644
index 000000000..62efcb10a
Binary files /dev/null and b/soh/assets/custom/objects/object_kakariko_decor/String_BYBY_32 differ
diff --git a/soh/assets/custom/objects/object_kakariko_decor/String_GRGR_32 b/soh/assets/custom/objects/object_kakariko_decor/String_GRGR_32
new file mode 100644
index 000000000..b905f21a9
Binary files /dev/null and b/soh/assets/custom/objects/object_kakariko_decor/String_GRGR_32 differ
diff --git a/soh/assets/custom/objects/object_kakariko_decor/UsagiLeaf_8 b/soh/assets/custom/objects/object_kakariko_decor/UsagiLeaf_8
new file mode 100644
index 000000000..fc4d3ff5b
Binary files /dev/null and b/soh/assets/custom/objects/object_kakariko_decor/UsagiLeaf_8 differ
diff --git a/soh/assets/custom/objects/object_kakariko_decor/YukiUsagi_16 b/soh/assets/custom/objects/object_kakariko_decor/YukiUsagi_16
new file mode 100644
index 000000000..2034627ff
Binary files /dev/null and b/soh/assets/custom/objects/object_kakariko_decor/YukiUsagi_16 differ
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL
new file mode 100644
index 000000000..13d9447f7
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_tri_0 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_tri_0
new file mode 100644
index 000000000..1263127aa
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_tri_0
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_tri_1 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_tri_1
new file mode 100644
index 000000000..2aff9496e
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_tri_1
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_vtx_0 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_vtx_0
new file mode 100644
index 000000000..9f3683fed
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_vtx_0
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_vtx_1 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_vtx_1
new file mode 100644
index 000000000..e438e71cf
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_vtx_1
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_vtx_cull b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_vtx_cull
new file mode 100644
index 000000000..c3ecddb8a
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoAdultDecorDL_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL
new file mode 100644
index 000000000..a3972ce7a
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_tri_0 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_tri_0
new file mode 100644
index 000000000..eb7e92fdf
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_tri_0
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_tri_1 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_tri_1
new file mode 100644
index 000000000..77468a738
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_tri_1
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_tri_2 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_tri_2
new file mode 100644
index 000000000..97634bb7b
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_tri_2
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_vtx_0 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_vtx_0
new file mode 100644
index 000000000..24e3e3d6e
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_vtx_0
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_vtx_1 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_vtx_1
new file mode 100644
index 000000000..0b12310ec
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_vtx_1
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_vtx_2 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_vtx_2
new file mode 100644
index 000000000..f2a81069d
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_vtx_2
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_vtx_cull b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_vtx_cull
new file mode 100644
index 000000000..b2e233783
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoChildDecorDL_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL
new file mode 100644
index 000000000..f0363d242
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_0 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_0
new file mode 100644
index 000000000..5ee2633e5
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_0
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_1 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_1
new file mode 100644
index 000000000..2b52e5ef3
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_1
@@ -0,0 +1,221 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_2 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_2
new file mode 100644
index 000000000..d6f5dbafe
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_2
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_3 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_3
new file mode 100644
index 000000000..f66ba5914
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_3
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_4 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_4
new file mode 100644
index 000000000..e0d376897
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_4
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_5 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_5
new file mode 100644
index 000000000..ca52719c9
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_5
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_6 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_6
new file mode 100644
index 000000000..75be056f5
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_6
@@ -0,0 +1,330 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_7 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_7
new file mode 100644
index 000000000..eeedcf1ee
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_tri_7
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_0 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_0
new file mode 100644
index 000000000..c0a07802c
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_0
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_1 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_1
new file mode 100644
index 000000000..c7615dd3b
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_1
@@ -0,0 +1,770 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_2 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_2
new file mode 100644
index 000000000..3ff9d2e43
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_2
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_3 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_3
new file mode 100644
index 000000000..b0e49797a
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_3
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_4 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_4
new file mode 100644
index 000000000..043452939
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_4
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_5 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_5
new file mode 100644
index 000000000..46c6ac9a1
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_5
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_6 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_6
new file mode 100644
index 000000000..0e5970505
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_6
@@ -0,0 +1,497 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_7 b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_7
new file mode 100644
index 000000000..1929d460e
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_7
@@ -0,0 +1,230 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_cull b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_cull
new file mode 100644
index 000000000..a183da293
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/gKakarikoDecorDL_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoAdultDecorDL_f3dlite_StringGRGR b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoAdultDecorDL_f3dlite_StringGRGR
new file mode 100644
index 000000000..b8478fa90
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoAdultDecorDL_f3dlite_StringGRGR
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_edges b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoAdultDecorDL_f3dlite_snowlayer
similarity index 52%
rename from soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_edges
rename to soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoAdultDecorDL_f3dlite_snowlayer
index 9355e7094..5456b3893 100644
--- a/soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_edges
+++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoAdultDecorDL_f3dlite_snowlayer
@@ -1,21 +1,21 @@
-
-
-
+
+
+
-
+
-
-
+
+
-
+
-
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoChildDecorDL_f3dlite_SnowBuildup b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoChildDecorDL_f3dlite_SnowBuildup
new file mode 100644
index 000000000..a79cca54f
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoChildDecorDL_f3dlite_SnowBuildup
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoChildDecorDL_f3dlite_UsagiLeaf b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoChildDecorDL_f3dlite_UsagiLeaf
new file mode 100644
index 000000000..be29498ef
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoChildDecorDL_f3dlite_UsagiLeaf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoChildDecorDL_f3dlite_YukiUsagiBody b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoChildDecorDL_f3dlite_YukiUsagiBody
new file mode 100644
index 000000000..3a2d2c889
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoChildDecorDL_f3dlite_YukiUsagiBody
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_CuccoBedding b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_CuccoBedding
new file mode 100644
index 000000000..520258210
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_CuccoBedding
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_SnowBuildup b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_SnowBuildup
new file mode 100644
index 000000000..a79cca54f
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_SnowBuildup
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_StringBYBY b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_StringBYBY
new file mode 100644
index 000000000..5c85eb88f
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_StringBYBY
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_StringGRGR b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_StringGRGR
new file mode 100644
index 000000000..b8478fa90
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_StringGRGR
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_UsagiLeaf b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_UsagiLeaf
new file mode 100644
index 000000000..be29498ef
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_UsagiLeaf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_YukiUsagiBody b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_YukiUsagiBody
new file mode 100644
index 000000000..3a2d2c889
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_YukiUsagiBody
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_snowdissolve b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_snowdissolve
new file mode 100644
index 000000000..e86142f29
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_snowdissolve
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_snowlayer b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_snowlayer
new file mode 100644
index 000000000..5456b3893
--- /dev/null
+++ b/soh/assets/custom/objects/object_kakariko_decor/mat_gKakarikoDecorDL_f3dlite_snowlayer
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/SnowBlanket_32 b/soh/assets/custom/objects/object_temple_of_time_decor/SnowBlanket_32
new file mode 100644
index 000000000..733b30757
Binary files /dev/null and b/soh/assets/custom/objects/object_temple_of_time_decor/SnowBlanket_32 differ
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/SnowBuildup_32 b/soh/assets/custom/objects/object_temple_of_time_decor/SnowBuildup_32
new file mode 100644
index 000000000..4653f07d1
Binary files /dev/null and b/soh/assets/custom/objects/object_temple_of_time_decor/SnowBuildup_32 differ
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/String_BYBY_32 b/soh/assets/custom/objects/object_temple_of_time_decor/String_BYBY_32
new file mode 100644
index 000000000..62efcb10a
Binary files /dev/null and b/soh/assets/custom/objects/object_temple_of_time_decor/String_BYBY_32 differ
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/String_GRGR_32 b/soh/assets/custom/objects/object_temple_of_time_decor/String_GRGR_32
new file mode 100644
index 000000000..b905f21a9
Binary files /dev/null and b/soh/assets/custom/objects/object_temple_of_time_decor/String_GRGR_32 differ
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL
new file mode 100644
index 000000000..491663279
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_0 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_0
new file mode 100644
index 000000000..75fc6598b
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_0
@@ -0,0 +1,2222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_1 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_1
new file mode 100644
index 000000000..bf36e26c4
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_1
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_2 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_2
new file mode 100644
index 000000000..4020ff3d1
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_2
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_3 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_3
new file mode 100644
index 000000000..eb072a5ef
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_3
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_4 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_4
new file mode 100644
index 000000000..34fbdd806
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_4
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_5 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_5
new file mode 100644
index 000000000..e360d5739
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_5
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_6 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_6
new file mode 100644
index 000000000..8dcd07878
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_6
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_7 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_7
new file mode 100644
index 000000000..a276056ed
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_7
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_8 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_8
new file mode 100644
index 000000000..b7f90b048
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_tri_8
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_0 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_0
new file mode 100644
index 000000000..772a7955d
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_0
@@ -0,0 +1,4468 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_1 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_1
new file mode 100644
index 000000000..f62970ec9
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_1
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_2 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_2
new file mode 100644
index 000000000..30da04c9f
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_2
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_3 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_3
new file mode 100644
index 000000000..834efd769
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_3
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_4 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_4
new file mode 100644
index 000000000..acfe49fc6
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_4
@@ -0,0 +1,224 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_5 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_5
new file mode 100644
index 000000000..13fd6d48a
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_5
@@ -0,0 +1,284 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_6 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_6
new file mode 100644
index 000000000..e8e4e4a52
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_6
@@ -0,0 +1,278 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_7 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_7
new file mode 100644
index 000000000..359d48716
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_7
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_8 b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_8
new file mode 100644
index 000000000..2cb6bf701
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_8
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_cull b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_cull
new file mode 100644
index 000000000..6dd5d78cb
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/gTempleOfTimeDecorDL_vtx_cull
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/ice b/soh/assets/custom/objects/object_temple_of_time_decor/ice
new file mode 100644
index 000000000..ff27a0246
Binary files /dev/null and b/soh/assets/custom/objects/object_temple_of_time_decor/ice differ
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_SnowBuildup b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_SnowBuildup
new file mode 100644
index 000000000..46d52d40d
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_SnowBuildup
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_shard_edge b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_StringBYBY
similarity index 52%
rename from soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_shard_edge
rename to soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_StringBYBY
index c222fe68d..16c505a28 100644
--- a/soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_shard_edge
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_StringBYBY
@@ -1,21 +1,21 @@
-
-
-
+
+
+
-
+
-
-
+
+
-
+
-
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_StringGRGR b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_StringGRGR
new file mode 100644
index 000000000..5663994ee
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_StringGRGR
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_gift_col_blue_material b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_gift_col_blue_material
new file mode 100644
index 000000000..c0c1a4ac9
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_gift_col_blue_material
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_gift_col_green_material b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_gift_col_green_material
new file mode 100644
index 000000000..6fcf6e1d8
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_gift_col_green_material
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_gift_col_red_material b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_gift_col_red_material
new file mode 100644
index 000000000..a73985478
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_gift_col_red_material
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_gift_col_yellow_material b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_gift_col_yellow_material
new file mode 100644
index 000000000..9f11354bd
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_gift_col_yellow_material
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_surface b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_ice_material
similarity index 65%
rename from soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_surface
rename to soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_ice_material
index e863b31c5..2a71c2cc9 100644
--- a/soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_surface
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_ice_material
@@ -1,21 +1,21 @@
-
-
-
+
+
+
-
+
-
+
-
+
diff --git a/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_snowlayer b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_snowlayer
new file mode 100644
index 000000000..e15d18af1
--- /dev/null
+++ b/soh/assets/custom/objects/object_temple_of_time_decor/mat_gTempleOfTimeDecorDL_f3dlite_snowlayer
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_completed/GlowAlpha_64 b/soh/assets/custom/objects/object_triforce_completed/GlowAlpha_64
new file mode 100644
index 000000000..1682d9e6f
Binary files /dev/null and b/soh/assets/custom/objects/object_triforce_completed/GlowAlpha_64 differ
diff --git a/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL b/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL
index 966bef206..b7c7d8af0 100644
--- a/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL
+++ b/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL
@@ -1,7 +1,7 @@
-
+
-
+
diff --git a/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_0 b/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_0
index dea47708c..f9d6420cc 100644
--- a/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_0
+++ b/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_0
@@ -1,56 +1,5 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_1 b/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_1
index 36be4333f..b67adf06e 100644
--- a/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_1
+++ b/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_1
@@ -1,7 +1,390 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0 b/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0
index 6ca96db30..ca11ab1b3 100644
--- a/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0
+++ b/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0
@@ -1,54 +1,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_1 b/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_1
index 3a653966d..cc747f74a 100644
--- a/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_1
+++ b/soh/assets/custom/objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_1
@@ -1,8 +1,347 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_completed/hilite_melon b/soh/assets/custom/objects/object_triforce_completed/hilite_melon
new file mode 100644
index 000000000..df1d605b3
Binary files /dev/null and b/soh/assets/custom/objects/object_triforce_completed/hilite_melon differ
diff --git a/soh/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_Glow b/soh/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_Glow
new file mode 100644
index 000000000..6bed4d274
--- /dev/null
+++ b/soh/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_Glow
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_triforce_surface b/soh/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_OrnamentGold
similarity index 75%
rename from soh/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_triforce_surface
rename to soh/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_OrnamentGold
index 5f8dc51f9..65dfd4f56 100644
--- a/soh/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_triforce_surface
+++ b/soh/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_OrnamentGold
@@ -1,6 +1,6 @@
-
+
@@ -8,14 +8,14 @@
-
+
-
+
diff --git a/soh/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_edges b/soh/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_edges
deleted file mode 100644
index 52591dfc8..000000000
--- a/soh/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_edges
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_surface b/soh/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_surface
deleted file mode 100644
index 06193ae61..000000000
--- a/soh/assets/custom/objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_surface
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_triforce_completed/noise_tex b/soh/assets/custom/objects/object_triforce_completed/noise_tex
deleted file mode 100644
index a6d6cf945..000000000
Binary files a/soh/assets/custom/objects/object_triforce_completed/noise_tex and /dev/null differ
diff --git a/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL b/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL
index 70d08c31d..0beb02144 100644
--- a/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL
+++ b/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL
@@ -1,10 +1,8 @@
-
+
-
+
-
-
diff --git a/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_0 b/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_0
index 09e44f1b7..286a54384 100644
--- a/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_0
+++ b/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_0
@@ -1,17 +1,67 @@
-
-
-
+
+
+
-
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_1 b/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_1
index 48001e3c3..a3c013e4a 100644
--- a/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_1
+++ b/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_1
@@ -1,18 +1,91 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_2 b/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_2
deleted file mode 100644
index e35e34492..000000000
--- a/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_tri_2
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_0 b/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_0
index a86fa98bf..4f60b10fe 100644
--- a/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_0
+++ b/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_0
@@ -1,18 +1,72 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_1 b/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_1
index 230fbb7f8..80931181f 100644
--- a/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_1
+++ b/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_1
@@ -1,22 +1,107 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_2 b/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_2
deleted file mode 100644
index 86d123825..000000000
--- a/soh/assets/custom/objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_2
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_triforce_piece_0/image b/soh/assets/custom/objects/object_triforce_piece_0/image
new file mode 100644
index 000000000..2a8a62348
Binary files /dev/null and b/soh/assets/custom/objects/object_triforce_piece_0/image differ
diff --git a/soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_ball b/soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_ball
new file mode 100644
index 000000000..214ad3df6
--- /dev/null
+++ b/soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_ball
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_shard_edge b/soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_shard_edge
deleted file mode 100644
index f62631793..000000000
--- a/soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_shard_edge
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_silver b/soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_silver
new file mode 100644
index 000000000..d56781ad2
--- /dev/null
+++ b/soh/assets/custom/objects/object_triforce_piece_0/mat_gTriforcePiece0DL_silver
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_0/noise_tex b/soh/assets/custom/objects/object_triforce_piece_0/noise_tex
deleted file mode 100644
index a6d6cf945..000000000
Binary files a/soh/assets/custom/objects/object_triforce_piece_0/noise_tex and /dev/null differ
diff --git a/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL b/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL
index 50a9264c6..4ffea5cf8 100644
--- a/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL
+++ b/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL
@@ -1,7 +1,7 @@
-
+
-
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_0 b/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_0
index 5f33f7347..c9e63a8d9 100644
--- a/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_0
+++ b/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_0
@@ -1,20 +1,67 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_1 b/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_1
index 43df6492b..67f0ba8eb 100644
--- a/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_1
+++ b/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_tri_1
@@ -1,25 +1,88 @@
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_0 b/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_0
index e078b8246..366463fd9 100644
--- a/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_0
+++ b/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_0
@@ -1,23 +1,72 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_1 b/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_1
index e0460194d..8085ae95a 100644
--- a/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_1
+++ b/soh/assets/custom/objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_1
@@ -1,34 +1,96 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_1/image b/soh/assets/custom/objects/object_triforce_piece_1/image
new file mode 100644
index 000000000..2a8a62348
Binary files /dev/null and b/soh/assets/custom/objects/object_triforce_piece_1/image differ
diff --git a/soh/assets/custom/objects/object_triforce_piece_1/image_copy b/soh/assets/custom/objects/object_triforce_piece_1/image_copy
new file mode 100644
index 000000000..2a8a62348
Binary files /dev/null and b/soh/assets/custom/objects/object_triforce_piece_1/image_copy differ
diff --git a/soh/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_blue_mat b/soh/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_blue_mat
new file mode 100644
index 000000000..6ba4d88f9
--- /dev/null
+++ b/soh/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_blue_mat
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_silver_002 b/soh/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_silver_002
new file mode 100644
index 000000000..26f9a0b70
--- /dev/null
+++ b/soh/assets/custom/objects/object_triforce_piece_1/mat_gTriforcePiece1DL_silver_002
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_1/noise_tex b/soh/assets/custom/objects/object_triforce_piece_1/noise_tex
deleted file mode 100644
index a6d6cf945..000000000
Binary files a/soh/assets/custom/objects/object_triforce_piece_1/noise_tex and /dev/null differ
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL b/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL
index 5213cd53c..7318e9b1c 100644
--- a/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL
+++ b/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL
@@ -1,10 +1,8 @@
-
+
-
+
-
-
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_0 b/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_0
index b54e182d5..59d81883f 100644
--- a/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_0
+++ b/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_0
@@ -1,29 +1,67 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_1 b/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_1
index 00a32bfd8..a15c641d7 100644
--- a/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_1
+++ b/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_1
@@ -1,11 +1,378 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_2 b/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_2
deleted file mode 100644
index 0993c1c1e..000000000
--- a/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_tri_2
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_0 b/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_0
index bf7dfcac6..90dc38784 100644
--- a/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_0
+++ b/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_0
@@ -1,36 +1,72 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_1 b/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_1
index e3237ab21..ef4ea40e4 100644
--- a/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_1
+++ b/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_1
@@ -1,12 +1,410 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_2 b/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_2
deleted file mode 100644
index ec4e73700..000000000
--- a/soh/assets/custom/objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_2
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/image b/soh/assets/custom/objects/object_triforce_piece_2/image
new file mode 100644
index 000000000..2a8a62348
Binary files /dev/null and b/soh/assets/custom/objects/object_triforce_piece_2/image differ
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/image_copy b/soh/assets/custom/objects/object_triforce_piece_2/image_copy
new file mode 100644
index 000000000..2a8a62348
Binary files /dev/null and b/soh/assets/custom/objects/object_triforce_piece_2/image_copy differ
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_Green_mat b/soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_Green_mat
new file mode 100644
index 000000000..94418f24f
--- /dev/null
+++ b/soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_Green_mat
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_surface b/soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_surface
deleted file mode 100644
index d903f00bb..000000000
--- a/soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_surface
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_silver_001 b/soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_silver_001
new file mode 100644
index 000000000..6a9be7bec
--- /dev/null
+++ b/soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_silver_001
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/noise_tex b/soh/assets/custom/objects/object_triforce_piece_2/noise_tex
deleted file mode 100644
index a6d6cf945..000000000
Binary files a/soh/assets/custom/objects/object_triforce_piece_2/noise_tex and /dev/null differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Bark_64 b/soh/assets/custom/objects/object_xmas_tree/Bark_64
new file mode 100644
index 000000000..8f1b837cd
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Bark_64 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Bauble1Tex_B_32 b/soh/assets/custom/objects/object_xmas_tree/Bauble1Tex_B_32
new file mode 100644
index 000000000..5e28d8e82
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Bauble1Tex_B_32 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Bauble1Tex_G_32 b/soh/assets/custom/objects/object_xmas_tree/Bauble1Tex_G_32
new file mode 100644
index 000000000..a40393dbd
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Bauble1Tex_G_32 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Bauble1Tex_R_32 b/soh/assets/custom/objects/object_xmas_tree/Bauble1Tex_R_32
new file mode 100644
index 000000000..c2d49ae42
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Bauble1Tex_R_32 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Bauble2Tex_B_32 b/soh/assets/custom/objects/object_xmas_tree/Bauble2Tex_B_32
new file mode 100644
index 000000000..2596d8264
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Bauble2Tex_B_32 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Bauble2Tex_G_32 b/soh/assets/custom/objects/object_xmas_tree/Bauble2Tex_G_32
new file mode 100644
index 000000000..e6889fee4
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Bauble2Tex_G_32 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Bauble2Tex_R_32 b/soh/assets/custom/objects/object_xmas_tree/Bauble2Tex_R_32
new file mode 100644
index 000000000..aef353a27
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Bauble2Tex_R_32 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Bauble3Tex_B_32 b/soh/assets/custom/objects/object_xmas_tree/Bauble3Tex_B_32
new file mode 100644
index 000000000..8f9c96cb1
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Bauble3Tex_B_32 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Bauble3Tex_G_32 b/soh/assets/custom/objects/object_xmas_tree/Bauble3Tex_G_32
new file mode 100644
index 000000000..b8ce81e43
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Bauble3Tex_G_32 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Bauble3Tex_R_32 b/soh/assets/custom/objects/object_xmas_tree/Bauble3Tex_R_32
new file mode 100644
index 000000000..40394698f
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Bauble3Tex_R_32 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/GlowAlpha_64 b/soh/assets/custom/objects/object_xmas_tree/GlowAlpha_64
new file mode 100644
index 000000000..1682d9e6f
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/GlowAlpha_64 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/LeavesAlpha_64 b/soh/assets/custom/objects/object_xmas_tree/LeavesAlpha_64
new file mode 100644
index 000000000..e33491d5a
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/LeavesAlpha_64 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/LeavesAlpha_shaded_64 b/soh/assets/custom/objects/object_xmas_tree/LeavesAlpha_shaded_64
new file mode 100644
index 000000000..dca2158b4
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/LeavesAlpha_shaded_64 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Wrapping_B_32 b/soh/assets/custom/objects/object_xmas_tree/Wrapping_B_32
new file mode 100644
index 000000000..9d70aa720
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Wrapping_B_32 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Wrapping_B_64 b/soh/assets/custom/objects/object_xmas_tree/Wrapping_B_64
new file mode 100644
index 000000000..071e01a2d
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Wrapping_B_64 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Wrapping_G_32 b/soh/assets/custom/objects/object_xmas_tree/Wrapping_G_32
new file mode 100644
index 000000000..8fac0c1c4
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Wrapping_G_32 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Wrapping_G_64 b/soh/assets/custom/objects/object_xmas_tree/Wrapping_G_64
new file mode 100644
index 000000000..6c128dbee
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Wrapping_G_64 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Wrapping_R_32 b/soh/assets/custom/objects/object_xmas_tree/Wrapping_R_32
new file mode 100644
index 000000000..a61f3d386
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Wrapping_R_32 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/Wrapping_R_64 b/soh/assets/custom/objects/object_xmas_tree/Wrapping_R_64
new file mode 100644
index 000000000..d884c2ca6
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/Wrapping_R_64 differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL
new file mode 100644
index 000000000..c354defda
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_tri_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_tri_0
new file mode 100644
index 000000000..bc1589a65
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_tri_0
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_tri_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_tri_1
new file mode 100644
index 000000000..ff14442dc
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_tri_1
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_tri_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_tri_2
new file mode 100644
index 000000000..ea5e79a96
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_tri_2
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_tri_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_tri_3
new file mode 100644
index 000000000..4280e17a5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_tri_3
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_vtx_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_vtx_0
new file mode 100644
index 000000000..2d2b533a4
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_vtx_0
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_vtx_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_vtx_1
new file mode 100644
index 000000000..2199d0779
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_vtx_1
@@ -0,0 +1,220 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_vtx_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_vtx_2
new file mode 100644
index 000000000..e0403545a
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_vtx_2
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_vtx_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_vtx_3
new file mode 100644
index 000000000..ae1fba294
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor100DL_vtx_3
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL
new file mode 100644
index 000000000..80f8fc81b
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_0
new file mode 100644
index 000000000..2a2601403
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_0
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_1
new file mode 100644
index 000000000..87dc5c7ca
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_1
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_2
new file mode 100644
index 000000000..d9d225ee1
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_2
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_3
new file mode 100644
index 000000000..010dfe669
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_3
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_4
new file mode 100644
index 000000000..34de1a10f
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_4
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_5
new file mode 100644
index 000000000..dbaef4a37
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_5
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_6
new file mode 100644
index 000000000..4b4aaa742
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_6
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_7 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_7
new file mode 100644
index 000000000..a3aa6c672
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_tri_7
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_0
new file mode 100644
index 000000000..189a72f78
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_0
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_1
new file mode 100644
index 000000000..491afaa21
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_1
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_2
new file mode 100644
index 000000000..1c86dfb20
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_2
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_3
new file mode 100644
index 000000000..fef6070e2
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_3
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_4
new file mode 100644
index 000000000..74ff37e83
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_4
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_5
new file mode 100644
index 000000000..e5347a692
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_5
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_6
new file mode 100644
index 000000000..57b0c83f5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_6
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_7 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_7
new file mode 100644
index 000000000..4eea9d31d
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor10DL_vtx_7
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL
new file mode 100644
index 000000000..cd83c25f8
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_0
new file mode 100644
index 000000000..7410becef
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_0
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_1
new file mode 100644
index 000000000..782f5f9e1
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_1
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_2
new file mode 100644
index 000000000..46d90cfee
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_2
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_3
new file mode 100644
index 000000000..fcae1cb60
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_3
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_4
new file mode 100644
index 000000000..cea2d4b01
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_4
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_5
new file mode 100644
index 000000000..8e6c88ddf
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_5
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_6
new file mode 100644
index 000000000..0c0928683
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_6
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_7 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_7
new file mode 100644
index 000000000..f56472810
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_7
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_8 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_8
new file mode 100644
index 000000000..8464121eb
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_8
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_9 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_9
new file mode 100644
index 000000000..a22341bdf
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_tri_9
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_0
new file mode 100644
index 000000000..c8a3028f5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_0
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_1
new file mode 100644
index 000000000..d7bf03045
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_1
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_2
new file mode 100644
index 000000000..768baea65
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_2
@@ -0,0 +1,300 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_3
new file mode 100644
index 000000000..87d0b1315
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_3
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_4
new file mode 100644
index 000000000..8fb018224
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_4
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_5
new file mode 100644
index 000000000..76d9b788a
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_5
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_6
new file mode 100644
index 000000000..60cef595c
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_6
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_7 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_7
new file mode 100644
index 000000000..e590fd848
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_7
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_8 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_8
new file mode 100644
index 000000000..505f171b0
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_8
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_9 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_9
new file mode 100644
index 000000000..50c131f9c
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor20DL_vtx_9
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL
new file mode 100644
index 000000000..4e4fd95aa
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_0
new file mode 100644
index 000000000..1ee54492c
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_0
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_1
new file mode 100644
index 000000000..0efacf68a
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_1
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_2
new file mode 100644
index 000000000..e05cc11fb
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_2
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_3
new file mode 100644
index 000000000..19917bd2e
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_3
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_4
new file mode 100644
index 000000000..f5f256b23
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_4
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_5
new file mode 100644
index 000000000..536d06f7a
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_5
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_6
new file mode 100644
index 000000000..45568173a
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_tri_6
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_0
new file mode 100644
index 000000000..509ed6529
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_0
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_1
new file mode 100644
index 000000000..49c0a080a
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_1
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_2
new file mode 100644
index 000000000..c109c19f5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_2
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_3
new file mode 100644
index 000000000..c7c1e10a6
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_3
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_4
new file mode 100644
index 000000000..a26e55df1
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_4
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_5
new file mode 100644
index 000000000..d1177d633
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_5
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_6
new file mode 100644
index 000000000..d947223ad
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor30DL_vtx_6
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL
new file mode 100644
index 000000000..9da99431f
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_0
new file mode 100644
index 000000000..f94c732e4
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_0
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_1
new file mode 100644
index 000000000..348919286
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_1
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_10 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_10
new file mode 100644
index 000000000..959b692d4
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_10
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_11 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_11
new file mode 100644
index 000000000..41fb8d2b9
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_11
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_12 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_12
new file mode 100644
index 000000000..8062b5a56
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_12
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_2
new file mode 100644
index 000000000..7c52dae86
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_2
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_3
new file mode 100644
index 000000000..af7892786
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_3
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_4
new file mode 100644
index 000000000..e662f6ed6
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_4
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_5
new file mode 100644
index 000000000..22b809b3f
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_5
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_6
new file mode 100644
index 000000000..1d845ad8a
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_6
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_7 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_7
new file mode 100644
index 000000000..12c90c209
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_7
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_8 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_8
new file mode 100644
index 000000000..bbd9078ce
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_8
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_9 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_9
new file mode 100644
index 000000000..11e6780ea
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_tri_9
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_0
new file mode 100644
index 000000000..8579d6fee
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_0
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_1
new file mode 100644
index 000000000..b0dcceeec
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_1
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_10 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_10
new file mode 100644
index 000000000..7d59969b3
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_10
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_11 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_11
new file mode 100644
index 000000000..ab7d95f64
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_11
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_12 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_12
new file mode 100644
index 000000000..514f00f38
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_12
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_2
new file mode 100644
index 000000000..7135901b7
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_2
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_3
new file mode 100644
index 000000000..874e86e45
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_3
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_4
new file mode 100644
index 000000000..8dcece79b
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_4
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_5
new file mode 100644
index 000000000..030415bf5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_5
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_6
new file mode 100644
index 000000000..5758decfe
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_6
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_7 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_7
new file mode 100644
index 000000000..7e171bd29
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_7
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_8 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_8
new file mode 100644
index 000000000..26f056a5f
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_8
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_9 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_9
new file mode 100644
index 000000000..878f90b20
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor40DL_vtx_9
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL
new file mode 100644
index 000000000..537d98d5f
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_0
new file mode 100644
index 000000000..41e8cb3c9
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_0
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_1
new file mode 100644
index 000000000..0beb4cd5f
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_1
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_2
new file mode 100644
index 000000000..a33dc9689
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_2
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_3
new file mode 100644
index 000000000..8cd67cdeb
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_3
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_4
new file mode 100644
index 000000000..f3cb40c18
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_4
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_5
new file mode 100644
index 000000000..28c1fa004
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_tri_5
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_0
new file mode 100644
index 000000000..4bbea8de4
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_0
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_1
new file mode 100644
index 000000000..c331cabed
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_1
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_2
new file mode 100644
index 000000000..62bb3dc53
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_2
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_3
new file mode 100644
index 000000000..135764c05
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_3
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_4
new file mode 100644
index 000000000..1066194fb
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_4
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_5
new file mode 100644
index 000000000..afec2ee78
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor50DL_vtx_5
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL
new file mode 100644
index 000000000..fe51b9f6b
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_0
new file mode 100644
index 000000000..1d746dde9
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_0
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_1
new file mode 100644
index 000000000..095e5d8f1
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_1
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_2
new file mode 100644
index 000000000..b1f3c81fc
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_2
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_3
new file mode 100644
index 000000000..e88a5cffe
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_3
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_4
new file mode 100644
index 000000000..cbc9ce14a
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_4
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_5
new file mode 100644
index 000000000..6646786c1
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_5
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_6
new file mode 100644
index 000000000..a2a881763
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_6
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_7 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_7
new file mode 100644
index 000000000..2a5440b86
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_7
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_8 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_8
new file mode 100644
index 000000000..245daae2b
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_8
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_9 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_9
new file mode 100644
index 000000000..34a3d0b55
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_tri_9
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_0
new file mode 100644
index 000000000..b33405eec
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_0
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_1
new file mode 100644
index 000000000..ff671566d
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_1
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_2
new file mode 100644
index 000000000..21358026e
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_2
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_3
new file mode 100644
index 000000000..831547972
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_3
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_4
new file mode 100644
index 000000000..c591133b8
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_4
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_5
new file mode 100644
index 000000000..d111addad
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_5
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_6
new file mode 100644
index 000000000..2684a5759
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_6
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_7 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_7
new file mode 100644
index 000000000..a2ab6b20a
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_7
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_8 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_8
new file mode 100644
index 000000000..fed438e57
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_8
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_9 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_9
new file mode 100644
index 000000000..9f8e178ed
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor60DL_vtx_9
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL
new file mode 100644
index 000000000..9d7a0b749
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_0
new file mode 100644
index 000000000..540a5e3e3
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_0
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_1
new file mode 100644
index 000000000..3b27e35d2
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_1
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_2
new file mode 100644
index 000000000..29326efac
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_2
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_3
new file mode 100644
index 000000000..83850278e
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_3
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_4
new file mode 100644
index 000000000..38401ac4f
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_4
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_5
new file mode 100644
index 000000000..ef0b4397d
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_5
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_6
new file mode 100644
index 000000000..0df608625
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_tri_6
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_0
new file mode 100644
index 000000000..6e115c0bb
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_0
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_1
new file mode 100644
index 000000000..ce6941dc9
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_1
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_2
new file mode 100644
index 000000000..56624ffb0
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_2
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_3
new file mode 100644
index 000000000..ec758ec91
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_3
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_4
new file mode 100644
index 000000000..3e9cc0ff4
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_4
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_5
new file mode 100644
index 000000000..ac28e8fb0
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_5
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_6
new file mode 100644
index 000000000..0cf3101e0
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor70DL_vtx_6
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL
new file mode 100644
index 000000000..ba14f553d
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_0
new file mode 100644
index 000000000..233c5e5b7
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_0
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_1
new file mode 100644
index 000000000..160f85e33
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_1
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_2
new file mode 100644
index 000000000..712db2ead
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_2
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_3
new file mode 100644
index 000000000..567f9bbfa
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_3
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_4
new file mode 100644
index 000000000..ed60abbb9
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_4
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_5
new file mode 100644
index 000000000..9d0125976
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_5
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_6
new file mode 100644
index 000000000..011391daa
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_6
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_7 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_7
new file mode 100644
index 000000000..ae4be6ebd
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_7
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_8 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_8
new file mode 100644
index 000000000..b7a34eb1d
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_tri_8
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_0
new file mode 100644
index 000000000..4e538463f
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_0
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_1
new file mode 100644
index 000000000..1c7a6b49c
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_1
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_2
new file mode 100644
index 000000000..2717d84f0
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_2
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_3
new file mode 100644
index 000000000..e5f479fc4
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_3
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_4
new file mode 100644
index 000000000..5e1500678
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_4
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_5
new file mode 100644
index 000000000..e00362088
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_5
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_6
new file mode 100644
index 000000000..e67313e14
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_6
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_7 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_7
new file mode 100644
index 000000000..7acc51f2a
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_7
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_8 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_8
new file mode 100644
index 000000000..c3ac2ef36
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor80DL_vtx_8
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL
new file mode 100644
index 000000000..f96deccc4
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_0
new file mode 100644
index 000000000..aaf575f3e
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_0
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_1
new file mode 100644
index 000000000..17e2bbb14
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_1
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_2
new file mode 100644
index 000000000..45f70fca8
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_2
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_3
new file mode 100644
index 000000000..501540e99
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_3
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_4
new file mode 100644
index 000000000..6aa20edeb
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_4
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_5
new file mode 100644
index 000000000..9f5515c3b
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_5
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_6
new file mode 100644
index 000000000..e8b2ebe15
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_6
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_7 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_7
new file mode 100644
index 000000000..e8686cfeb
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_tri_7
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_0
new file mode 100644
index 000000000..4bf94f75a
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_0
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_1
new file mode 100644
index 000000000..a3e163984
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_1
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_2
new file mode 100644
index 000000000..5075a9732
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_2
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_3 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_3
new file mode 100644
index 000000000..7b0fce1b2
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_3
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_4 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_4
new file mode 100644
index 000000000..240d7afe2
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_4
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_5 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_5
new file mode 100644
index 000000000..adf5dfa9b
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_5
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_6 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_6
new file mode 100644
index 000000000..5e02e04d8
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_6
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_7 b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_7
new file mode 100644
index 000000000..f92e3d98d
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasDecor90DL_vtx_7
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL b/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL
new file mode 100644
index 000000000..2bad08d2d
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL_tri_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL_tri_0
new file mode 100644
index 000000000..79b9903f8
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL_tri_0
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL_tri_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL_tri_1
new file mode 100644
index 000000000..0f82cf893
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL_tri_1
@@ -0,0 +1,390 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL_vtx_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL_vtx_0
new file mode 100644
index 000000000..a990fc5af
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL_vtx_0
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL_vtx_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL_vtx_1
new file mode 100644
index 000000000..746770594
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasStarDL_vtx_1
@@ -0,0 +1,347 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL b/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL
new file mode 100644
index 000000000..c343cfe2a
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_tri_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_tri_0
new file mode 100644
index 000000000..38cdbe014
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_tri_0
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_tri_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_tri_1
new file mode 100644
index 000000000..ff4e066a5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_tri_1
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_tri_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_tri_2
new file mode 100644
index 000000000..561d3ac5e
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_tri_2
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_vtx_0 b/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_vtx_0
new file mode 100644
index 000000000..94e5e1fef
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_vtx_0
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_vtx_1 b/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_vtx_1
new file mode 100644
index 000000000..01ed88a14
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_vtx_1
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_vtx_2 b/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_vtx_2
new file mode 100644
index 000000000..fd03778f8
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/gXmasTreeDL_vtx_2
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/hilite_melon b/soh/assets/custom/objects/object_xmas_tree/hilite_melon
new file mode 100644
index 000000000..df1d605b3
Binary files /dev/null and b/soh/assets/custom/objects/object_xmas_tree/hilite_melon differ
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor100DL_f3dlite_Wrapping_B_64 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor100DL_f3dlite_Wrapping_B_64
new file mode 100644
index 000000000..e2cb1c6af
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor100DL_f3dlite_Wrapping_B_64
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor100DL_f3dlite_Wrapping_G_32 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor100DL_f3dlite_Wrapping_G_32
new file mode 100644
index 000000000..5f67d4de1
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor100DL_f3dlite_Wrapping_G_32
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor100DL_f3dlite_Wrapping_R_32 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor100DL_f3dlite_Wrapping_R_32
new file mode 100644
index 000000000..f330997c2
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor100DL_f3dlite_Wrapping_R_32
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor100DL_f3dlite_Wrapping_R_64 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor100DL_f3dlite_Wrapping_R_64
new file mode 100644
index 000000000..ddba85e48
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor100DL_f3dlite_Wrapping_R_64
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble1_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble1_B
new file mode 100644
index 000000000..0562ad514
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble1_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble1_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble1_G
new file mode 100644
index 000000000..424720964
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble1_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble1_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble1_R
new file mode 100644
index 000000000..ed8997bac
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble1_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble2_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble2_B
new file mode 100644
index 000000000..a2fb86662
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble2_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble2_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble2_G
new file mode 100644
index 000000000..a3ebffce5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble2_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble2_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble2_R
new file mode 100644
index 000000000..780bee1c5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble2_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble3_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble3_G
new file mode 100644
index 000000000..5ec29067d
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble3_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble3_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble3_R
new file mode 100644
index 000000000..6bfad5f53
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor10DL_f3dlite_Bauble3_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble1_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble1_B
new file mode 100644
index 000000000..0562ad514
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble1_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble1_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble1_R
new file mode 100644
index 000000000..ed8997bac
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble1_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble2_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble2_B
new file mode 100644
index 000000000..a2fb86662
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble2_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble2_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble2_G
new file mode 100644
index 000000000..a3ebffce5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble2_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble2_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble2_R
new file mode 100644
index 000000000..780bee1c5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble2_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble3_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble3_B
new file mode 100644
index 000000000..7af3c0fdf
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble3_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble3_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble3_G
new file mode 100644
index 000000000..5ec29067d
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Bauble3_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Wrapping_B_32 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Wrapping_B_32
new file mode 100644
index 000000000..1425245e0
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Wrapping_B_32
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Wrapping_G_64 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Wrapping_G_64
new file mode 100644
index 000000000..c3a973f39
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Wrapping_G_64
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Wrapping_R_32 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Wrapping_R_32
new file mode 100644
index 000000000..f330997c2
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor20DL_f3dlite_Wrapping_R_32
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble1_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble1_B
new file mode 100644
index 000000000..0562ad514
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble1_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble1_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble1_G
new file mode 100644
index 000000000..424720964
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble1_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble1_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble1_R
new file mode 100644
index 000000000..ed8997bac
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble1_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble2_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble2_B
new file mode 100644
index 000000000..a2fb86662
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble2_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble2_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble2_G
new file mode 100644
index 000000000..a3ebffce5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble2_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble3_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble3_B
new file mode 100644
index 000000000..7af3c0fdf
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble3_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble3_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble3_R
new file mode 100644
index 000000000..6bfad5f53
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor30DL_f3dlite_Bauble3_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble1_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble1_B
new file mode 100644
index 000000000..0562ad514
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble1_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble1_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble1_R
new file mode 100644
index 000000000..ed8997bac
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble1_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble2_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble2_B
new file mode 100644
index 000000000..a2fb86662
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble2_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble2_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble2_G
new file mode 100644
index 000000000..a3ebffce5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble2_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble2_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble2_R
new file mode 100644
index 000000000..780bee1c5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble2_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble3_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble3_B
new file mode 100644
index 000000000..7af3c0fdf
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble3_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble3_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble3_G
new file mode 100644
index 000000000..5ec29067d
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble3_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble3_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble3_R
new file mode 100644
index 000000000..6bfad5f53
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Bauble3_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_B_32 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_B_32
new file mode 100644
index 000000000..1425245e0
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_B_32
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_G_32 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_G_32
new file mode 100644
index 000000000..5f67d4de1
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_G_32
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_G_64 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_G_64
new file mode 100644
index 000000000..c3a973f39
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_G_64
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_R_32 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_R_32
new file mode 100644
index 000000000..f330997c2
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_R_32
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_R_64 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_R_64
new file mode 100644
index 000000000..ddba85e48
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor40DL_f3dlite_Wrapping_R_64
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble1_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble1_B
new file mode 100644
index 000000000..0562ad514
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble1_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble1_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble1_G
new file mode 100644
index 000000000..424720964
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble1_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble2_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble2_G
new file mode 100644
index 000000000..a3ebffce5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble2_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble2_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble2_R
new file mode 100644
index 000000000..780bee1c5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble2_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble3_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble3_B
new file mode 100644
index 000000000..7af3c0fdf
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble3_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble3_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble3_R
new file mode 100644
index 000000000..6bfad5f53
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor50DL_f3dlite_Bauble3_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble1_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble1_B
new file mode 100644
index 000000000..0562ad514
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble1_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble1_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble1_G
new file mode 100644
index 000000000..424720964
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble1_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble1_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble1_R
new file mode 100644
index 000000000..ed8997bac
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble1_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble2_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble2_G
new file mode 100644
index 000000000..a3ebffce5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble2_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble2_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble2_R
new file mode 100644
index 000000000..780bee1c5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble2_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble3_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble3_G
new file mode 100644
index 000000000..5ec29067d
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Bauble3_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Wrapping_B_64 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Wrapping_B_64
new file mode 100644
index 000000000..e2cb1c6af
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Wrapping_B_64
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Wrapping_G_32 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Wrapping_G_32
new file mode 100644
index 000000000..5f67d4de1
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Wrapping_G_32
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Wrapping_R_32 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Wrapping_R_32
new file mode 100644
index 000000000..f330997c2
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Wrapping_R_32
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Wrapping_R_64 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Wrapping_R_64
new file mode 100644
index 000000000..ddba85e48
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor60DL_f3dlite_Wrapping_R_64
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble1_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble1_G
new file mode 100644
index 000000000..424720964
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble1_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble1_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble1_R
new file mode 100644
index 000000000..ed8997bac
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble1_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble2_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble2_G
new file mode 100644
index 000000000..a3ebffce5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble2_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble2_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble2_R
new file mode 100644
index 000000000..780bee1c5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble2_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble3_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble3_B
new file mode 100644
index 000000000..7af3c0fdf
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble3_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble3_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble3_G
new file mode 100644
index 000000000..5ec29067d
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble3_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble3_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble3_R
new file mode 100644
index 000000000..6bfad5f53
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor70DL_f3dlite_Bauble3_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble1_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble1_B
new file mode 100644
index 000000000..0562ad514
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble1_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble1_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble1_R
new file mode 100644
index 000000000..ed8997bac
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble1_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble2_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble2_G
new file mode 100644
index 000000000..a3ebffce5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble2_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble3_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble3_B
new file mode 100644
index 000000000..7af3c0fdf
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble3_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble3_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble3_G
new file mode 100644
index 000000000..5ec29067d
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble3_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble3_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble3_R
new file mode 100644
index 000000000..6bfad5f53
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Bauble3_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Wrapping_B_32 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Wrapping_B_32
new file mode 100644
index 000000000..1425245e0
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Wrapping_B_32
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Wrapping_G_32 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Wrapping_G_32
new file mode 100644
index 000000000..5f67d4de1
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Wrapping_G_32
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Wrapping_R_32 b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Wrapping_R_32
new file mode 100644
index 000000000..f330997c2
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor80DL_f3dlite_Wrapping_R_32
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble1_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble1_B
new file mode 100644
index 000000000..0562ad514
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble1_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble1_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble1_G
new file mode 100644
index 000000000..424720964
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble1_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble1_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble1_R
new file mode 100644
index 000000000..ed8997bac
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble1_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble2_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble2_B
new file mode 100644
index 000000000..a2fb86662
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble2_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble2_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble2_R
new file mode 100644
index 000000000..780bee1c5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble2_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble3_B b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble3_B
new file mode 100644
index 000000000..7af3c0fdf
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble3_B
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble3_G b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble3_G
new file mode 100644
index 000000000..5ec29067d
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble3_G
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble3_R b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble3_R
new file mode 100644
index 000000000..6bfad5f53
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasDecor90DL_f3dlite_Bauble3_R
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasStarDL_f3dlite_Glow b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasStarDL_f3dlite_Glow
new file mode 100644
index 000000000..381668c5c
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasStarDL_f3dlite_Glow
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_edges b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasStarDL_f3dlite_OrnamentGold
similarity index 72%
rename from soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_edges
rename to soh/assets/custom/objects/object_xmas_tree/mat_gXmasStarDL_f3dlite_OrnamentGold
index 5968068f5..b657da8a7 100644
--- a/soh/assets/custom/objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_edges
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasStarDL_f3dlite_OrnamentGold
@@ -1,21 +1,21 @@
-
+
-
+
-
+
-
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasTreeDL_f3dlite_TreeBrown b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasTreeDL_f3dlite_TreeBrown
new file mode 100644
index 000000000..37fdb10d2
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasTreeDL_f3dlite_TreeBrown
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasTreeDL_f3dlite_TreeGreen b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasTreeDL_f3dlite_TreeGreen
new file mode 100644
index 000000000..119341c70
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasTreeDL_f3dlite_TreeGreen
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_xmas_tree/mat_gXmasTreeDL_f3dlite_TreeTip b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasTreeDL_f3dlite_TreeTip
new file mode 100644
index 000000000..9baaadbf5
--- /dev/null
+++ b/soh/assets/custom/objects/object_xmas_tree/mat_gXmasTreeDL_f3dlite_TreeTip
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/textures/parameter_static/gTriforcePiece.rgba32.png b/soh/assets/custom/textures/parameter_static/gTriforcePiece.rgba32.png
index cc67b6a13..eace659af 100644
Binary files a/soh/assets/custom/textures/parameter_static/gTriforcePiece.rgba32.png and b/soh/assets/custom/textures/parameter_static/gTriforcePiece.rgba32.png differ
diff --git a/soh/assets/soh_assets.h b/soh/assets/soh_assets.h
index c0acacf21..5ea41262a 100644
--- a/soh/assets/soh_assets.h
+++ b/soh/assets/soh_assets.h
@@ -8,6 +8,27 @@
// On Mac, not using aligned resource names was causing crashes in release builds
// objects
+#define dgLinkAdultHatTrimDL "__OTR__objects/object_festivehats/gLinkAdultHatTrimDL"
+static const ALIGN_ASSET(2) char gLinkAdultHatTrimDL[] = dgLinkAdultHatTrimDL;
+
+#define dgLinkAdultPompomDL "__OTR__objects/object_festivehats/gLinkAdultPompomDL"
+static const ALIGN_ASSET(2) char gLinkAdultPompomDL[] = dgLinkAdultPompomDL;
+
+#define dgLinkChildHatTrimDL "__OTR__objects/object_festivehats/gLinkChildHatTrimDL"
+static const ALIGN_ASSET(2) char gLinkChildHatTrimDL[] = dgLinkChildHatTrimDL;
+
+#define dgPaperCrownGenericDL "__OTR__objects/object_festivehats/gPaperCrownGenericDL"
+static const ALIGN_ASSET(2) char gPaperCrownGenericDL[] = dgPaperCrownGenericDL;
+
+#define dgSantaHatGenericDL "__OTR__objects/object_festivehats/gSantaHatGenericDL"
+static const ALIGN_ASSET(2) char gSantaHatGenericDL[] = dgSantaHatGenericDL;
+
+#define dgHorseAntlersDL "__OTR__objects/object_festivehats/gHorseAntlersDL"
+static const ALIGN_ASSET(2) char gHorseAntlersDL[] = dgHorseAntlersDL;
+
+#define dgEponaRudolphHatDL "__OTR__objects/object_festivehats/gEponaRudolphHatDL"
+static const ALIGN_ASSET(2) char gEponaRudolphHatDL[] = dgEponaRudolphHatDL;
+
#define dgChristmasGreenTreasureChestFrontTex "__OTR__objects/object_box/gChristmasGreenTreasureChestFrontTex"
static const ALIGN_ASSET(2) char gChristmasGreenTreasureChestFrontTex[] = dgChristmasGreenTreasureChestFrontTex;
@@ -80,6 +101,54 @@ static const ALIGN_ASSET(2) char gFishingPoleGiDL[] = dgFishingPoleGiDL;
#define dgMysteryItemDL "__OTR__objects/object_mystery_item/gMysteryItemDL"
static const ALIGN_ASSET(2) char gMysteryItemDL[] = dgMysteryItemDL;
+#define dgXmasTreeDL "__OTR__objects/object_xmas_tree/gXmasTreeDL"
+static const ALIGN_ASSET(2) char gXmasTreeDL[] = dgXmasTreeDL;
+
+#define dgXmasDecor10DL "__OTR__objects/object_xmas_tree/gXmasDecor10DL"
+static const ALIGN_ASSET(2) char gXmasDecor10DL[] = dgXmasDecor10DL;
+
+#define dgXmasDecor20DL "__OTR__objects/object_xmas_tree/gXmasDecor20DL"
+static const ALIGN_ASSET(2) char gXmasDecor20DL[] = dgXmasDecor20DL;
+
+#define dgXmasDecor30DL "__OTR__objects/object_xmas_tree/gXmasDecor30DL"
+static const ALIGN_ASSET(2) char gXmasDecor30DL[] = dgXmasDecor30DL;
+
+#define dgXmasDecor40DL "__OTR__objects/object_xmas_tree/gXmasDecor40DL"
+static const ALIGN_ASSET(2) char gXmasDecor40DL[] = dgXmasDecor40DL;
+
+#define dgXmasDecor50DL "__OTR__objects/object_xmas_tree/gXmasDecor50DL"
+static const ALIGN_ASSET(2) char gXmasDecor50DL[] = dgXmasDecor50DL;
+
+#define dgXmasDecor60DL "__OTR__objects/object_xmas_tree/gXmasDecor60DL"
+static const ALIGN_ASSET(2) char gXmasDecor60DL[] = dgXmasDecor60DL;
+
+#define dgXmasDecor70DL "__OTR__objects/object_xmas_tree/gXmasDecor70DL"
+static const ALIGN_ASSET(2) char gXmasDecor70DL[] = dgXmasDecor70DL;
+
+#define dgXmasDecor80DL "__OTR__objects/object_xmas_tree/gXmasDecor80DL"
+static const ALIGN_ASSET(2) char gXmasDecor80DL[] = dgXmasDecor80DL;
+
+#define dgXmasDecor90DL "__OTR__objects/object_xmas_tree/gXmasDecor90DL"
+static const ALIGN_ASSET(2) char gXmasDecor90DL[] = dgXmasDecor90DL;
+
+#define dgXmasDecor100DL "__OTR__objects/object_xmas_tree/gXmasDecor100DL"
+static const ALIGN_ASSET(2) char gXmasDecor100DL[] = dgXmasDecor100DL;
+
+#define dgXmasStarDL "__OTR__objects/object_xmas_tree/gXmasStarDL"
+static const ALIGN_ASSET(2) char gXmasStarDL[] = dgXmasStarDL;
+
+#define dgKakarikoDecorDL "__OTR__objects/object_kakariko_decor/gKakarikoDecorDL"
+static const ALIGN_ASSET(2) char gKakarikoDecorDL[] = dgKakarikoDecorDL;
+
+#define dgTempleOfTimeDecorDL "__OTR__objects/object_temple_of_time_decor/gTempleOfTimeDecorDL"
+static const ALIGN_ASSET(2) char gTempleOfTimeDecorDL[] = dgTempleOfTimeDecorDL;
+
+#define dgKakarikoChildDecorDL "__OTR__objects/object_kakariko_decor/gKakarikoChildDecorDL"
+static const ALIGN_ASSET(2) char gKakarikoChildDecorDL[] = dgKakarikoChildDecorDL;
+
+#define dgKakarikoAdultDecorDL "__OTR__objects/object_kakariko_decor/gKakarikoAdultDecorDL"
+static const ALIGN_ASSET(2) char gKakarikoAdultDecorDL[] = dgKakarikoAdultDecorDL;
+
// overlays
#define dgOptionsDividerChangeLangVtx "__OTR__overlays/ovl_file_choose/gOptionsDividerChangeLangVtx"
static const ALIGN_ASSET(2) char gOptionsDividerChangeLangVtx[] = dgOptionsDividerChangeLangVtx;
diff --git a/soh/assets/sources/TempleOfTime_DL.blend b/soh/assets/sources/TempleOfTime_DL.blend
new file mode 100644
index 000000000..38500e0d7
Binary files /dev/null and b/soh/assets/sources/TempleOfTime_DL.blend differ
diff --git a/soh/soh/ActorDB.cpp b/soh/soh/ActorDB.cpp
index de2538888..4a629c53d 100644
--- a/soh/soh/ActorDB.cpp
+++ b/soh/soh/ActorDB.cpp
@@ -609,8 +609,59 @@ static ActorDBInit EnPartnerInit = {
};
extern "C" s16 gEnPartnerId;
+#include "src/overlays/actors/ovl_En_Snowball/z_en_snowball.h"
+static ActorDBInit EnSnowballInit = {
+ "En_Snowball",
+ "Snowball",
+ ACTORCAT_ITEMACTION,
+ (ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED | ACTOR_FLAG_DRAGGED_BY_HOOKSHOT | ACTOR_FLAG_CAN_PRESS_SWITCH),
+ OBJECT_GAMEPLAY_KEEP,
+ sizeof(EnSnowball),
+ (ActorFunc)EnSnowball_Init,
+ (ActorFunc)EnSnowball_Destroy,
+ (ActorFunc)EnSnowball_Update,
+ (ActorFunc)EnSnowball_Draw,
+ nullptr,
+};
+extern "C" s16 gEnSnowballId;
+
+#include "src/overlays/actors/ovl_En_ChristmasTree/z_en_christmastree.h"
+static ActorDBInit EnChristmasTreeInit = {
+ "En_ChristmasTree",
+ "Christmas Tree",
+ ACTORCAT_PROP,
+ (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED),
+ OBJECT_GAMEPLAY_KEEP,
+ sizeof(EnChristmasTree),
+ (ActorFunc)EnChristmasTree_Init,
+ (ActorFunc)EnChristmasTree_Destroy,
+ (ActorFunc)EnChristmasTree_Update,
+ (ActorFunc)EnChristmasTree_Draw,
+ nullptr,
+};
+extern "C" s16 gEnChristmasTreeId;
+
+#include "src/overlays/actors/ovl_En_ChristmasDeco/z_en_christmasdeco.h"
+static ActorDBInit EnChristmasDecoInit = {
+ "En_ChristmasDeco",
+ "Christmas Decos",
+ ACTORCAT_PROP,
+ (ACTOR_FLAG_DRAW_WHILE_CULLED),
+ OBJECT_GAMEPLAY_KEEP,
+ sizeof(EnChristmasDeco),
+ (ActorFunc)EnChristmasDeco_Init,
+ (ActorFunc)EnChristmasDeco_Destroy,
+ (ActorFunc)EnChristmasDeco_Update,
+ (ActorFunc)EnChristmasDeco_Draw,
+ nullptr,
+};
+extern "C" s16 gEnChristmasDecoId;
+
void ActorDB::AddBuiltInCustomActors() {
gEnPartnerId = ActorDB::Instance->AddEntry(EnPartnerInit).entry.id;
+ gEnSnowballId = ActorDB::Instance->AddEntry(EnSnowballInit).entry.id;
+ gEnChristmasTreeId = ActorDB::Instance->AddEntry(EnChristmasTreeInit).entry.id;
+ gEnChristmasDecoId = ActorDB::Instance->AddEntry(EnChristmasDecoInit).entry.id;
}
extern "C" ActorDBEntry* ActorDB_Retrieve(const int id) {
diff --git a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp
index d99519efb..5f4739478 100644
--- a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp
+++ b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp
@@ -48,6 +48,13 @@ extern PlayState* gPlayState;
#include "objects/object_gjyo_objects/object_gjyo_objects.h"
#include "textures/nintendo_rogo_static/nintendo_rogo_static.h"
#include "objects/object_gi_rabit_mask/object_gi_rabit_mask.h"
+#include "objects/object_wood02/object_wood02.h"
+#include "scenes/overworld/spot00/spot00_room_0.h"
+#include "scenes/overworld/spot04/spot04_room_0.h"
+#include "scenes/overworld/spot04/spot04_room_1.h"
+#include "scenes/overworld/spot20/spot20_room_0.h"
+#include "scenes/overworld/spot03/spot03_room_0.h"
+#include "scenes/overworld/spot15/spot15_room_0.h"
void ResourceMgr_PatchGfxByName(const char* path, const char* patchName, int index, Gfx instruction);
void ResourceMgr_PatchGfxCopyCommandByName(const char* path, const char* patchName, int destinationIndex, int sourceIndex);
void ResourceMgr_UnpatchGfxByName(const char* path, const char* patchName);
@@ -173,9 +180,9 @@ typedef struct {
colors were darker than the gDPSetPrimColor. You will see many more examples of this below in the `ApplyOrResetCustomGfxPatches` method
*/
static std::map cosmeticOptions = {
- COSMETIC_OPTION("Link.KokiriTunic", "Kokiri Tunic", COSMETICS_GROUP_LINK, ImVec4( 30, 105, 27, 255), false, true, false),
- COSMETIC_OPTION("Link.GoronTunic", "Goron Tunic", COSMETICS_GROUP_LINK, ImVec4(100, 20, 0, 255), false, true, false),
- COSMETIC_OPTION("Link.ZoraTunic", "Zora Tunic", COSMETICS_GROUP_LINK, ImVec4( 0, 60, 100, 255), false, true, false),
+ COSMETIC_OPTION("Link.KokiriTunic", "Kokiri Tunic", COSMETICS_GROUP_LINK, ImVec4(255, 0, 0, 255), false, true, false),
+ COSMETIC_OPTION("Link.GoronTunic", "Goron Tunic", COSMETICS_GROUP_LINK, ImVec4(255, 0, 0, 255), false, true, false),
+ COSMETIC_OPTION("Link.ZoraTunic", "Zora Tunic", COSMETICS_GROUP_LINK, ImVec4(255, 0, 0, 255), false, true, false),
COSMETIC_OPTION("Link.Hair", "Hair", COSMETICS_GROUP_LINK, ImVec4(255, 173, 27, 255), false, true, true),
COSMETIC_OPTION("Link.Linen", "Linen", COSMETICS_GROUP_LINK, ImVec4(255, 255, 255, 255), false, true, true),
COSMETIC_OPTION("Link.Boots", "Boots", COSMETICS_GROUP_LINK, ImVec4( 93, 44, 18, 255), false, true, true),
@@ -346,7 +353,7 @@ static std::map cosmeticOptions = {
COSMETIC_OPTION("NPC.Dog1", "Dog 1", COSMETICS_GROUP_NPC, ImVec4(255, 255, 200, 255), false, true, true),
COSMETIC_OPTION("NPC.Dog2", "Dog 2", COSMETICS_GROUP_NPC, ImVec4(150, 100, 50, 255), false, true, true),
COSMETIC_OPTION("NPC.GoldenSkulltula", "Golden Skulltula", COSMETICS_GROUP_NPC, ImVec4(255, 255, 255, 255), false, true, false),
- COSMETIC_OPTION("NPC.Kokiri", "Kokiri", COSMETICS_GROUP_NPC, ImVec4( 0, 130, 70, 255), false, true, false),
+ COSMETIC_OPTION("NPC.Kokiri", "Kokiri", COSMETICS_GROUP_NPC, ImVec4(255, 0, 0, 255), false, true, false),
COSMETIC_OPTION("NPC.Gerudo", "Gerudo", COSMETICS_GROUP_NPC, ImVec4( 90, 0, 140, 255), false, true, false),
COSMETIC_OPTION("NPC.MetalTrap", "Metal Trap", COSMETICS_GROUP_NPC, ImVec4(255, 255, 255, 255), false, true, true),
COSMETIC_OPTION("NPC.IronKnuckles", "Iron Knuckles", COSMETICS_GROUP_NPC, ImVec4(245, 255, 205, 255), false, true, false),
@@ -462,6 +469,24 @@ void CosmeticsUpdateTick() {
5. GFX Command: The GFX command you want to insert
*/
void ApplyOrResetCustomGfxPatches(bool manualChange) {
+ if (manualChange) {
+ PATCH_GFX(object_wood02_DL_007968, "Tree1", "gLetItSnow", 17, gsDPSetPrimColor(0, 0, 255, 255, 255, 255));
+ PATCH_GFX(object_wood02_DL_000090, "Tree2", "gLetItSnow", 17, gsDPSetPrimColor(0, 0, 200, 255, 255, 255));
+ PATCH_GFX(object_wood02_DL_000340, "Tree3", "gLetItSnow", 17, gsDPSetPrimColor(0, 0, 255, 255, 255, 255));
+ PATCH_GFX(object_wood02_DL_000340, "Tree4", "gLetItSnow", 24, gsDPSetPrimColor(0, 0, 255, 255, 255, 255));
+ PATCH_GFX(spot00_room_0DL_0139A8, "Path1", "gLetItSnow", 23, gsDPSetPrimColor(0, 0, 100, 150, 255, 60));
+ PATCH_GFX(spot00_room_0DL_013250, "Path2", "gLetItSnow", 23, gsDPSetPrimColor(0, 0, 100, 150, 255, 60));
+ PATCH_GFX(spot00_room_0DL_0143C8, "Path3", "gLetItSnow", 23, gsDPSetPrimColor(0, 0, 100, 150, 255, 60));
+ PATCH_GFX(spot04_room_0DL_018048, "Path4", "gLetItSnow", 24, gsDPSetPrimColor(0, 0, 100, 150, 255, 60));
+ PATCH_GFX(spot04_room_1DL_007810, "Path5", "gLetItSnow", 24, gsDPSetPrimColor(0, 0, 100, 150, 255, 60));
+ PATCH_GFX(spot20_room_0DL_0062D0, "Path6", "gLetItSnow", 23, gsDPSetPrimColor(0, 0, 200, 230, 255, 30));
+ PATCH_GFX(spot20_room_0DL_004460, "Path8", "gLetItSnow", 31, gsDPSetPrimColor(0, 0, 200, 230, 255, 30));
+ PATCH_GFX(spot20_room_0DL_004460, "Path9", "gLetItSnow", 118, gsDPSetPrimColor(0, 0, 200, 230, 255, 30));
+ PATCH_GFX(spot20_room_0DL_0065E8, "Path10", "gLetItSnow", 24, gsDPSetPrimColor(0, 0, 200, 230, 255, 30));
+ PATCH_GFX(spot03_room_0DL_00C4B0, "Path11", "gLetItSnow", 23, gsDPSetPrimColor(0, 0, 200, 230, 255, 30));
+ PATCH_GFX(spot15_room_0DL_00C748, "Path12", "gLetItSnow", 23, gsDPSetPrimColor(0, 0, 200, 230, 255, 30));
+ }
+
static CosmeticOption& linkGoronTunic = cosmeticOptions.at("Link.GoronTunic");
if (manualChange || CVarGetInteger(linkGoronTunic.rainbowCvar, 0)) {
static Color_RGBA8 defaultColor = {linkGoronTunic.defaultColor.x, linkGoronTunic.defaultColor.y, linkGoronTunic.defaultColor.z, linkGoronTunic.defaultColor.w};
@@ -1362,8 +1387,8 @@ void Reset_Option_Double(const char* Button_Title, const char* name) {
}
void DrawSillyTab() {
ImGui::BeginDisabled(CVarGetInteger(CVAR_SETTING("DisableChanges"), 0));
- if (CVarGetInteger(CVAR_GENERAL("LetItSnow"), 0)) {
- if (UIWidgets::EnhancementCheckbox("Let It Snow", CVAR_GENERAL("LetItSnow"))) {
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (UIWidgets::EnhancementCheckbox("Let It Snow", "gLetItSnow")) {
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
}
}
diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor.h b/soh/soh/Enhancements/game-interactor/GameInteractor.h
index c01af8c4c..1667cda00 100644
--- a/soh/soh/Enhancements/game-interactor/GameInteractor.h
+++ b/soh/soh/Enhancements/game-interactor/GameInteractor.h
@@ -486,6 +486,7 @@ typedef enum {
extern "C" {
#endif
uint8_t GameInteractor_NoUIActive();
+void GameInteractor_SetNoUIActive(uint8_t state);
GILinkSize GameInteractor_GetLinkSize();
void GameInteractor_SetLinkSize(GILinkSize size);
uint8_t GameInteractor_InvisibleLinkActive();
diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor_State.cpp b/soh/soh/Enhancements/game-interactor/GameInteractor_State.cpp
index 21642dded..38d125786 100644
--- a/soh/soh/Enhancements/game-interactor/GameInteractor_State.cpp
+++ b/soh/soh/Enhancements/game-interactor/GameInteractor_State.cpp
@@ -36,6 +36,10 @@ uint8_t GameInteractor_NoUIActive() {
return GameInteractor::State::NoUIActive;
}
+void GameInteractor_SetNoUIActive(uint8_t state) {
+ GameInteractor::State::NoUIActive = state;
+}
+
// MARK: - GameInteractor::State::LinkSize
GILinkSize GameInteractor_GetLinkSize() {
return GameInteractor::State::LinkSize;
diff --git a/soh/soh/Enhancements/mods.cpp b/soh/soh/Enhancements/mods.cpp
index 9a0e80a51..5059d9b83 100644
--- a/soh/soh/Enhancements/mods.cpp
+++ b/soh/soh/Enhancements/mods.cpp
@@ -50,6 +50,7 @@ void ResourceMgr_UnpatchGfxByName(const char* path, const char* patchName);
extern SaveContext gSaveContext;
extern PlayState* gPlayState;
+extern "C" s16 gEnSnowballId;
extern void Overlay_DisplayText(float duration, const char* text);
uint32_t ResourceMgr_IsSceneMasterQuest(s16 sceneNum);
}
@@ -1412,6 +1413,99 @@ void RegisterRandomizerCompasses() {
});
}
+static CollisionPoly snowballPoly;
+static Vec3f snowballPos;
+static f32 raycastResult;
+
+static u32 iceBlockParams[] = {
+ 0x214,
+ 0x1,
+ 0x11,
+ 0x10,
+ 0x20,
+};
+
+void RegisterSnowballs() {
+ GameInteractor::Instance->RegisterGameHook([]() {
+ if (gPlayState->sceneNum != SCENE_HYRULE_FIELD && gPlayState->sceneNum != SCENE_KAKARIKO_VILLAGE) {
+ return;
+ }
+
+ int actorsSpawned = 0;
+
+ while (actorsSpawned < 30) {
+ snowballPos.x = (float)(Random(
+ (gPlayState->sceneNum == SCENE_HYRULE_FIELD ? -10000 : -2700) + 10000,
+ (gPlayState->sceneNum == SCENE_HYRULE_FIELD ? 5000 : 2000) + 10000
+ ) - (float)10000.0f);
+ snowballPos.y = 5000;
+ snowballPos.z = (float)(Random(
+ (gPlayState->sceneNum == SCENE_HYRULE_FIELD ? -1000 : -2000) + 10000,
+ (gPlayState->sceneNum == SCENE_HYRULE_FIELD ? 15000 : 2000) + 10000
+ ) - (float)10000.0f);
+
+ raycastResult = BgCheck_AnyRaycastFloor1(&gPlayState->colCtx, &snowballPoly, &snowballPos);
+
+ if (raycastResult > BGCHECK_Y_MIN) {
+ Actor_Spawn(&gPlayState->actorCtx, gPlayState, gEnSnowballId, snowballPos.x, raycastResult,
+ snowballPos.z, 0, 0, 0, gPlayState->sceneNum == SCENE_HYRULE_FIELD, 0);
+ actorsSpawned++;
+ }
+ }
+ });
+
+ GameInteractor::Instance->RegisterGameHook([]() {
+ if (gPlayState->sceneNum != SCENE_LAKE_HYLIA) {
+ return;
+ }
+
+ int actorsSpawned = 0;
+
+ Vec3f spawnedIceBlockPos[15];
+
+ while (actorsSpawned < 15) {
+ Vec3f iceBlockPos;
+ iceBlockPos.x = (float)(Random(
+ (-4200) + 10000,
+ (3000) + 10000
+ ) - (float)10000.0f);
+ iceBlockPos.y = -1713.0f;
+ iceBlockPos.z = (float)(Random(
+ (2600) + 10000,
+ (9000) + 10000
+ ) - (float)10000.0f);
+
+ raycastResult = BgCheck_AnyRaycastFloor1(&gPlayState->colCtx, &snowballPoly, &iceBlockPos);
+
+ if (raycastResult > BGCHECK_Y_MIN) {
+
+ bool overlaps = false;
+ for (int i = 0; i < actorsSpawned; i++) {
+ if (Math_Vec3f_DistXZ(&spawnedIceBlockPos[i], &iceBlockPos) < 500.0f) {
+ overlaps = true;
+ break;
+ }
+ }
+
+ if (overlaps) {
+ continue;
+ }
+
+ if (LINK_IS_ADULT && !Flags_GetEventChkInf(EVENTCHKINF_RAISED_LAKE_HYLIA_WATER)) {
+ iceBlockPos.y = raycastResult;
+ } else {
+ iceBlockPos.y = -1310.0f;
+ }
+
+ Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_BG_SPOT08_ICEBLOCK, iceBlockPos.x, iceBlockPos.y,
+ iceBlockPos.z, 0, (s16)Random(0, 0xFFFF), 0, RandomElement(iceBlockParams), 0);
+ spawnedIceBlockPos[actorsSpawned] = iceBlockPos;
+ actorsSpawned++;
+ }
+ }
+ });
+}
+
void InitMods() {
BossRush_RegisterHooks();
RandomizerRegisterHooks();
@@ -1450,6 +1544,7 @@ void InitMods() {
RegisterOpenAllHours();
RegisterToTMedallions();
RegisterRandomizerCompasses();
+ RegisterSnowballs();
NameTag_RegisterHooks();
RegisterFloorSwitchesHook();
RegisterPatchHandHandler();
diff --git a/soh/soh/Enhancements/randomizer/item_list.cpp b/soh/soh/Enhancements/randomizer/item_list.cpp
index 458144411..f4ce76f8b 100644
--- a/soh/soh/Enhancements/randomizer/item_list.cpp
+++ b/soh/soh/Enhancements/randomizer/item_list.cpp
@@ -335,7 +335,7 @@ void Rando::StaticData::InitItemTable() {
itemTable[RG_DEKU_STICK_CAPACITY_30] = Item(RG_DEKU_STICK_CAPACITY_30, Text{ "Deku Stick Capacity (30)", "Capacité de Bâtons Mojo (30)", "Deku-Stab-Kapazität (30)" }, ITEMTYPE_ITEM, GI_STICK_UPGRADE_30, true, LOGIC_PROGRESSIVE_STICK_BAG, RHT_DEKU_STICK_CAPACITY_30, ITEM_STICK_UPGRADE_30, OBJECT_GI_STICK, GID_STICK, 0x91, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE);
itemTable[RG_MAGIC_SINGLE] = Item(RG_MAGIC_SINGLE, Text{ "Magic Meter", "Jauge de Magie", "Magisches Maß" }, ITEMTYPE_ITEM, 0x8A, true, LOGIC_PROGRESSIVE_MAGIC, RHT_MAGIC_SINGLE, RG_MAGIC_SINGLE, OBJECT_GI_MAGICPOT, GID_MAGIC_SMALL, 0xE4, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
itemTable[RG_MAGIC_DOUBLE] = Item(RG_MAGIC_DOUBLE, Text{ "Enhanced Magic Meter", "Jauge de Magie améliorée", "Verbessertes Magisches Maß" }, ITEMTYPE_ITEM, 0x8A, true, LOGIC_PROGRESSIVE_MAGIC, RHT_MAGIC_DOUBLE, RG_MAGIC_DOUBLE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0xE8, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
- itemTable[RG_TRIFORCE_PIECE] = Item(RG_TRIFORCE_PIECE, Text{ "Triforce Piece", "Triforce Piece", "Triforce-Fragment" }, ITEMTYPE_ITEM, 0xDF, true, LOGIC_TRIFORCE_PIECES, RHT_TRIFORCE_PIECE, RG_TRIFORCE_PIECE, OBJECT_GI_BOMB_2, GID_TRIFORCE_PIECE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
+ itemTable[RG_TRIFORCE_PIECE] = Item(RG_TRIFORCE_PIECE, Text{ "Christmas Ornament", "Christmas Ornament", "Christmas Ornament" }, ITEMTYPE_ITEM, 0xDF, true, LOGIC_TRIFORCE_PIECES, RHT_TRIFORCE_PIECE, RG_TRIFORCE_PIECE, OBJECT_GI_BOMB_2, GID_TRIFORCE_PIECE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
// Init itemNameToEnum
for (auto& item : itemTable) {
diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp
index aefc7d4fd..0575e56a7 100644
--- a/soh/soh/Enhancements/randomizer/randomizer.cpp
+++ b/soh/soh/Enhancements/randomizer/randomizer.cpp
@@ -64,6 +64,7 @@ const std::string Randomizer::hintMessageTableID = "RandomizerHints";
const std::string Randomizer::merchantMessageTableID = "RandomizerMerchants";
const std::string Randomizer::rupeeMessageTableID = "RandomizerRupees";
const std::string Randomizer::triforcePieceMessageTableID = "RandomizerTriforcePiece";
+const std::string Randomizer::christmasTreeMessageTableID = "RandomizerChristmasTree";
const std::string Randomizer::NaviRandoMessageTableID = "RandomizerNavi";
const std::string Randomizer::IceTrapRandoMessageTableID = "RandomizerIceTrap";
const std::string Randomizer::randoMiscHintsTableID = "RandomizerMiscHints";
@@ -2193,29 +2194,29 @@ CustomMessage Randomizer::GetRupeeMessage(u16 rupeeTextId) {
void CreateTriforcePieceMessages() {
CustomMessage TriforcePieceMessages[NUM_TRIFORCE_PIECE_MESSAGES] = {
- { "You found a %yTriforce Piece%w!&%g[[current]]%w down, %c[[remaining]]%w to go. It's a start!",
- "Ein %yTriforce-Splitter%w! Du hast&%g[[current]]%w von %c[[required]]%w gefunden. Es ist ein&Anfang!",
- "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g[[current]]%w, il en&reste %c[[remaining]]%w à trouver. C'est un début!" },
+ { "You found a %yChristmas Ornament%w!&%g{{current}}%w down, %c{{remaining}}%w to go. It's a start!",
+ "Ein %yTriforce-Splitter%w! Du hast&%g{{current}}%w von %c{{required}}%w gefunden. Es ist ein&Anfang!",
+ "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g{{current}}%w, il en&reste %c{{remaining}}%w à trouver. C'est un début!" },
- { "You found a %yTriforce Piece%w!&%g[[current]]%w down, %c[[remaining]]%w to go. Progress!",
- "Ein %yTriforce-Splitter%w! Du hast&%g[[current]]%w von %c[[required]]%w gefunden. Es geht voran!",
- "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g[[current]]%w, il en&reste %c[[remaining]]%w à trouver. Ça avance!" },
+ { "You found a %yChristmas Ornament%w!&%g{{current}}%w down, %c{{remaining}}%w to go. Progress!",
+ "Ein %yTriforce-Splitter%w! Du hast&%g{{current}}%w von %c{{required}}%w gefunden. Es geht voran!",
+ "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g{{current}}%w, il en&reste %c{{remaining}}%w à trouver. Ça avance!" },
- { "You found a %yTriforce Piece%w!&%g[[current]]%w down, %c[[remaining]]%w to go. Over half-way&there!",
- "Ein %yTriforce-Splitter%w! Du hast&schon %g[[current]]%w von %c[[required]]%w gefunden. Schon&über die Hälfte!",
- "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g[[current]]%w, il en&reste %c[[remaining]]%w à trouver. Il en reste un&peu moins que la moitié!" },
+ { "You found a %yChristmas Ornament%w!&%g{{current}}%w down, %c{{remaining}}%w to go. Over half-way&there!",
+ "Ein %yTriforce-Splitter%w! Du hast&schon %g{{current}}%w von %c{{required}}%w gefunden. Schon&über die Hälfte!",
+ "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g{{current}}%w, il en&reste %c{{remaining}}%w à trouver. Il en reste un&peu moins que la moitié!" },
- { "You found a %yTriforce Piece%w!&%g[[current]]%w down, %c[[remaining]]%w to go. Almost done!",
- "Ein %yTriforce-Splitter%w! Du hast&schon %g[[current]]%w von %c[[required]]%w gefunden. Fast&geschafft!",
- "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g[[current]]%w, il en&reste %c[[remaining]]%w à trouver. C'est presque&terminé!" },
+ { "You found a %yChristmas Ornament%w!&%g{{current}}%w down, %c{{remaining}}%w to go. Almost done!",
+ "Ein %yTriforce-Splitter%w! Du hast&schon %g{{current}}%w von %c{{required}}%w gefunden. Fast&geschafft!",
+ "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g{{current}}%w, il en&reste %c{{remaining}}%w à trouver. C'est presque&terminé!" },
- { "You completed the %yTriforce of&Courage%w! %gGG%w!",
+ { "You found all of the %yChristmas&Ornaments%w! Visit the %gChristmas&tree%w in Kakariko Village!",
"Das %yTriforce des Mutes%w! Du hast&alle Splitter gefunden. %gGut gemacht%w!",
"Vous avez complété la %yTriforce&du Courage%w! %gFélicitations%w!" },
- { "You found a spare %yTriforce Piece%w!&You only needed %c[[required]]%w, but you have %g[[current]]%w!",
- "Ein übriger %yTriforce-Splitter%w! Du&hast nun %g[[current]]%w von %c[[required]]%w nötigen gefunden.",
- "Vous avez trouvé un %yFragment de&Triforce%w en plus! Vous n'aviez besoin&que de %c[[required]]%w, mais vous en avez %g[[current]]%w en&tout!" },
+ { "You found a spare %yChristmas Ornament%w!&You only needed %c{{required}}%w, but you have %g{{current}}%w!",
+ "Ein übriger %yTriforce-Splitter%w! Du&hast nun %g{{current}}%w von %c{{required}}%w nötigen gefunden.",
+ "Vous avez trouvé un %yFragment de&Triforce%w en plus! Vous n'aviez besoin&que de %c{{required}}%w, mais vous en avez %g{{current}}%w en&tout!" },
};
CustomMessageManager* customMessageManager = CustomMessageManager::Instance;
customMessageManager->AddCustomMessageTable(Randomizer::triforcePieceMessageTableID);
@@ -2254,6 +2255,39 @@ CustomMessage Randomizer::GetTriforcePieceMessage() {
messageEntry.Format();
return messageEntry;
}
+void CreateChristmasTreeMessages() {
+ CustomMessage ChristmasTreeMessages[2] = {
+
+ { "The %yChristmas tree%w seems to be&missing some of %gits magic%w... Find all&ornaments to save %rChristmas%w!",
+ "The %yChristmas tree%w seems to be&missing some of %gits magic%w... Find all&ornaments to save %rChristmas%w!",
+ "The %yChristmas tree%w seems to be&missing some of %gits magic%w... Find all&ornaments to save %rChristmas%w!" },
+
+ { "The tree's magic has been fully&restored. %gMerry %rChristmas%w!",
+ "The tree's magic has been fully&restored. %gMerry %rChristmas%w!",
+ "The tree's magic has been fully&restored. %gMerry %rChristmas%w!" }
+ };
+ CustomMessageManager* customMessageManager = CustomMessageManager::Instance;
+ customMessageManager->AddCustomMessageTable(Randomizer::christmasTreeMessageTableID);
+ for (unsigned int i = 0; i <= 1; i++) {
+ customMessageManager->CreateMessage(Randomizer::christmasTreeMessageTableID, i, ChristmasTreeMessages[i]);
+ }
+}
+
+CustomMessage Randomizer::GetChristmasTreeMessage() {
+ // Item is only given after the textbox, so reflect that inside the textbox.
+ uint8_t current = gSaveContext.triforcePiecesCollected;
+ uint8_t required = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED);
+ uint8_t messageIndex;
+
+ if (current < required) {
+ messageIndex = 0;
+ } else {
+ messageIndex = 1;
+ }
+
+ CustomMessage messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::christmasTreeMessageTableID, messageIndex);
+ return messageEntry;
+}
void CreateNaviRandoMessages() {
CustomMessage NaviMessages[NUM_NAVI_MESSAGES] = {
@@ -2594,7 +2628,7 @@ CustomMessage Randomizer::GetIceTrapMessage() {
CustomMessage msg;
- if (CVarGetInteger(CVAR_GENERAL("LetItSnow"), 0)) {
+ if (CVarGetInteger("gLetItSnow", 0)) {
msg = CustomMessage(
/*english*/ "This year for Christmas, all you get is #COAL#!",
/*german*/ "This year for Christmas, all you get is #COAL#!",
@@ -3004,6 +3038,7 @@ void Randomizer::CreateCustomMessages() {
CreateGetItemMessages(&getItemMessages);
CreateRupeeMessages();
CreateTriforcePieceMessages();
+ CreateChristmasTreeMessages();
CreateNaviRandoMessages();
CreateFireTempleGoronMessages();
}
diff --git a/soh/soh/Enhancements/randomizer/randomizer.h b/soh/soh/Enhancements/randomizer/randomizer.h
index 4a84d6302..0ec13452a 100644
--- a/soh/soh/Enhancements/randomizer/randomizer.h
+++ b/soh/soh/Enhancements/randomizer/randomizer.h
@@ -35,6 +35,7 @@ class Randomizer {
static const std::string merchantMessageTableID;
static const std::string rupeeMessageTableID;
static const std::string triforcePieceMessageTableID;
+ static const std::string christmasTreeMessageTableID;
static const std::string NaviRandoMessageTableID;
static const std::string IceTrapRandoMessageTableID;
static const std::string randoMiscHintsTableID;
@@ -67,6 +68,7 @@ class Randomizer {
static CustomMessage GetRupeeMessage(u16 rupeeTextId);
static CustomMessage GetIceTrapMessage();
static CustomMessage GetTriforcePieceMessage();
+ static CustomMessage GetChristmasTreeMessage();
};
#ifdef __cplusplus
diff --git a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp
index 3be937cc9..2cb5ba957 100644
--- a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp
+++ b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp
@@ -683,7 +683,7 @@ void DrawItem(ItemTrackerItem item) {
case RG_TRIFORCE_PIECE:
actualItemId = item.id;
hasItem = IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT);
- itemName = "Triforce Piece";
+ itemName = "Christmas Ornament";
break;
case RG_GOHMA_SOUL:
actualItemId = item.id;
@@ -1426,7 +1426,7 @@ void ItemTrackerSettingsWindow::DrawElement() {
UIWidgets::Spacer(0);
- ImGui::Text("Triforce Piece Count Tracking");
+ ImGui::Text("Christmas ornament Count Tracking");
UIWidgets::EnhancementCombobox(CVAR_TRACKER_ITEM("TriforcePieceCounts"), itemTrackerTriforcePieceTrackOptions, TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX);
UIWidgets::InsertHelpHoverText("Customize what numbers are shown for triforce piece tracking.");
@@ -1469,7 +1469,7 @@ void ItemTrackerSettingsWindow::DrawElement() {
shouldUpdateVectors = true;
}
- if (UIWidgets::LabeledRightAlignedEnhancementCombobox("Triforce Pieces", CVAR_TRACKER_ITEM("DisplayType.TriforcePieces"), displayTypes, SECTION_DISPLAY_HIDDEN)) {
+ if (UIWidgets::LabeledRightAlignedEnhancementCombobox("Christmas Ornaments", CVAR_TRACKER_ITEM("DisplayType.TriforcePieces"), displayTypes, SECTION_DISPLAY_HIDDEN)) {
shouldUpdateVectors = true;
}
diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp
index c89228667..53367935e 100644
--- a/soh/soh/OTRGlobals.cpp
+++ b/soh/soh/OTRGlobals.cpp
@@ -1194,11 +1194,24 @@ extern "C" void InitOTR() {
time_t now = time(NULL);
tm *tm_now = localtime(&now);
- if (tm_now->tm_mon == 11 && tm_now->tm_mday >= 24 && tm_now->tm_mday <= 25) {
- CVarRegisterInteger(CVAR_GENERAL("LetItSnow"), 1);
- } else {
- CVarClear(CVAR_GENERAL("LetItSnow"));
- }
+ // if (tm_now->tm_mon == 11 && tm_now->tm_mday >= 24 && tm_now->tm_mday <= 25) {
+ // CVarRegisterInteger("gLetItSnow", 1);
+ // } else {
+ // CVarClear("gLetItSnow");
+ // }
+
+ CVarRegisterInteger("gLetItSnow", 1);
+ CVarRegisterInteger("gAltAssets", 1);
+ CVarRegisterInteger("gCosmetics.Hud_AButton.Changed", 1);
+ CVarRegisterColor("gCosmetics.Hud_AButton.Value", Color_RGBA8{ 255, 255, 255, 255 });
+ CVarRegisterInteger("gCosmetics.Hud_BButton.Changed", 1);
+ CVarRegisterColor("gCosmetics.Hud_BButton.Value", Color_RGBA8{ 255, 255, 255, 255 });
+ CVarRegisterInteger("gCosmetics.Hud_CButtons.Changed", 1);
+ CVarRegisterColor("gCosmetics.Hud_CButtons.Value", Color_RGBA8{ 255, 255, 255, 255 });
+ CVarRegisterInteger("gCosmetics.Consumable_Hearts.Changed", 1);
+ CVarRegisterColor("gCosmetics.Consumable_Hearts.Value", Color_RGBA8{ 255, 158, 0, 255 });
+ CVarRegisterInteger("gCosmetics.Consumable_Magic.Changed", 1);
+ CVarRegisterColor("gCosmetics.Consumable_Magic.Value", Color_RGBA8{ 255, 0, 0, 255 });
srand(now);
#ifdef ENABLE_REMOTE_CONTROL
@@ -2544,7 +2557,9 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
bool nonBeanMerchants = ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) ||
ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL);
Player* player = GET_PLAYER(play);
- if (textId == TEXT_RANDOMIZER_CUSTOM_ITEM) {
+ if (textId == 0x406B && play->sceneNum == SCENE_KAKARIKO_VILLAGE) {
+ messageEntry = Randomizer::GetChristmasTreeMessage();
+ } else if (textId == TEXT_RANDOMIZER_CUSTOM_ITEM) {
if (player->getItemEntry.getItemId == RG_ICE_TRAP) {
messageEntry = Randomizer::GetIceTrapMessage();
} else if (player->getItemEntry.getItemId == RG_TRIFORCE_PIECE) {
diff --git a/soh/src/code/z_kankyo.c b/soh/src/code/z_kankyo.c
index 37481ccd8..4a89c75f7 100644
--- a/soh/src/code/z_kankyo.c
+++ b/soh/src/code/z_kankyo.c
@@ -2289,17 +2289,17 @@ void Environment_FillScreen(GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue,
}
Color_RGB8 sSandstormPrimColors[] = {
- { 210, 156, 85 },
- { 255, 200, 100 },
- { 225, 160, 50 },
- { 105, 90, 40 },
+ { 210, 210, 210 },
+ { 255, 255, 255 },
+ { 225, 225, 225 },
+ { 105, 105, 105 },
};
Color_RGB8 sSandstormEnvColors[] = {
- { 155, 106, 35 },
- { 200, 150, 50 },
- { 170, 110, 0 },
- { 50, 40, 0 },
+ { 155, 155, 155 },
+ { 200, 200, 200 },
+ { 170, 170, 170 },
+ { 50, 50, 50 },
};
u16 previousPatchedSandstormScreenSize = 0;
diff --git a/soh/src/code/z_play.c b/soh/src/code/z_play.c
index ae6d987a9..cad122aec 100644
--- a/soh/src/code/z_play.c
+++ b/soh/src/code/z_play.c
@@ -36,6 +36,9 @@ PlayState* gPlayState;
s16 firstInit = 0;
s16 gEnPartnerId;
+s16 gEnSnowballId;
+s16 gEnChristmasTreeId;
+s16 gEnChristmasDecoId;
void OTRPlay_SpawnScene(PlayState* play, s32 sceneNum, s32 spawn);
@@ -632,6 +635,12 @@ void Play_Init(GameState* thisx) {
GET_PLAYER(play)->actor.world.pos.y + Player_GetHeight(GET_PLAYER(play)) + 5.0f,
GET_PLAYER(play)->actor.world.pos.z, 0, 0, 0, 1, true);
}
+
+ if (play->sceneNum == SCENE_KAKARIKO_VILLAGE) {
+ Actor_Spawn(&play->actorCtx, play, gEnChristmasTreeId, -734, 0, 420, 0, 0, 0, 0, true);
+ }
+
+ Actor_Spawn(&play->actorCtx, play, gEnChristmasDecoId, 0, 0, 0, 0, 0, 0, 0, true);
}
void Play_Update(PlayState* play) {
@@ -1680,7 +1689,7 @@ void Play_Main(GameState* thisx) {
CVarSetInteger(CVAR_GENERAL("CheatEasyPauseBufferTimer"), CVarGetInteger(CVAR_GENERAL("CheatEasyPauseBufferTimer"), 0) - 1);
}
- if (play->envCtx.unk_EE[2] == 0 && CVarGetInteger(CVAR_GENERAL("LetItSnow"), 0)) {
+ if (play->envCtx.unk_EE[2] == 0 && CVarGetInteger("gLetItSnow", 0)) {
play->envCtx.unk_EE[3] = 64;
Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_OBJECT_KANKYO, 0, 0, 0, 0, 0, 0, 3, 0);
}
diff --git a/soh/src/code/z_player_lib.c b/soh/src/code/z_player_lib.c
index 6def1f410..ce44011f4 100644
--- a/soh/src/code/z_player_lib.c
+++ b/soh/src/code/z_player_lib.c
@@ -10,6 +10,7 @@
#include "soh/Enhancements/randomizer/draw.h"
#include
+#include
typedef struct {
/* 0x00 */ u8 flag;
@@ -1044,10 +1045,18 @@ void* sMouthTextures[] = {
};
#endif
+// Original colors
+//Color_RGB8 sTunicColors[] = {
+// { 30, 105, 27 },
+// { 100, 20, 0 },
+// { 0, 60, 100 },
+//};
+
+// Overwrite to red tunic as default for Holidays in Hyrule build
Color_RGB8 sTunicColors[] = {
- { 30, 105, 27 },
- { 100, 20, 0 },
- { 0, 60, 100 },
+ { 255, 0, 0 },
+ { 255, 0, 0 },
+ { 255, 0, 0 },
};
Color_RGB8 sGauntletColors[] = {
@@ -1586,7 +1595,7 @@ void func_800906D4(PlayState* play, Player* this, Vec3f* newTipPos) {
void Player_DrawGetItemIceTrap(PlayState* play, Player* this, Vec3f* refPos, s32 drawIdPlusOne, f32 height) {
OPEN_DISPS(play->state.gfxCtx);
- if (CVarGetInteger(CVAR_GENERAL("LetItSnow"), 0)) {
+ if (CVarGetInteger("gLetItSnow", 0)) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY);
@@ -1792,6 +1801,52 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
Matrix_MultVec3f(&sZeroVec, D_80160000);
}
+ if (CVarGetInteger("gLetItSnow", 0) && !(this->stateFlags1 & PLAYER_STATE1_FIRST_PERSON) && !(this->stateFlags2 & PLAYER_STATE2_CRAWLING)) {
+ if (limbIndex == PLAYER_LIMB_HEAD) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Matrix_Push();
+ if (LINK_IS_ADULT) {
+ Matrix_RotateZYX(24000, -16000, -7000, MTXMODE_APPLY);
+ Matrix_Translate(32.0f, 0.0f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gLinkAdultHatTrimDL);
+ } else {
+ Matrix_RotateZYX(24000, -16000, -7000, MTXMODE_APPLY);
+ Matrix_Translate(32.0f, 0.0f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gLinkChildHatTrimDL);
+ }
+
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+
+ if (limbIndex == PLAYER_LIMB_HAT) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Matrix_Push();
+ if (LINK_IS_ADULT) {
+ Matrix_RotateZYX(0, 0, 17500, MTXMODE_APPLY);
+ Matrix_Translate(-195.0f, 1500.0f, -95.0f, MTXMODE_APPLY);
+ Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY);
+ } else {
+ Matrix_RotateZYX(0, 0, 27000, MTXMODE_APPLY);
+ Matrix_Translate(-950.0f, 2600.0f, -75.0f, MTXMODE_APPLY);
+ Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY);
+ }
+
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gLinkAdultPompomDL);
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
+
if (limbIndex == PLAYER_LIMB_L_HAND) {
MtxF sp14C;
Actor* hookedActor;
diff --git a/soh/src/overlays/actors/ovl_Bg_Spot08_Iceblock/z_bg_spot08_iceblock.c b/soh/src/overlays/actors/ovl_Bg_Spot08_Iceblock/z_bg_spot08_iceblock.c
index d7b45c9b6..545dbdac1 100644
--- a/soh/src/overlays/actors/ovl_Bg_Spot08_Iceblock/z_bg_spot08_iceblock.c
+++ b/soh/src/overlays/actors/ovl_Bg_Spot08_Iceblock/z_bg_spot08_iceblock.c
@@ -308,7 +308,7 @@ void BgSpot08Iceblock_Init(Actor* thisx, PlayState* play) {
break;
}
- if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
+ if (LINK_AGE_IN_YEARS == YEARS_CHILD && play->sceneNum == SCENE_ZORAS_FOUNTAIN) {
Actor_Kill(&this->dyna.actor);
return;
}
@@ -332,6 +332,11 @@ void BgSpot08Iceblock_Init(Actor* thisx, PlayState* play) {
this->surfaceNormal.y = 1.0f;
this->rotationAxis.x = 1.0f;
+ if (LINK_IS_ADULT && !Flags_GetEventChkInf(EVENTCHKINF_RAISED_LAKE_HYLIA_WATER) && play->sceneNum == SCENE_LAKE_HYLIA) {
+ BgSpot08Iceblock_SetupNoAction(this);
+ return;
+ }
+
switch (this->dyna.actor.params & 0xF) {
case 0:
case 1:
diff --git a/soh/src/overlays/actors/ovl_Boss_Dodongo/z_boss_dodongo.c b/soh/src/overlays/actors/ovl_Boss_Dodongo/z_boss_dodongo.c
index 59c83fc82..43f0d3d98 100644
--- a/soh/src/overlays/actors/ovl_Boss_Dodongo/z_boss_dodongo.c
+++ b/soh/src/overlays/actors/ovl_Boss_Dodongo/z_boss_dodongo.c
@@ -4,6 +4,7 @@
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
#include "scenes/dungeons/ddan_boss/ddan_boss_room_1.h"
#include "soh/frame_interpolation.h"
+#include "soh_assets.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include // malloc
@@ -1353,6 +1354,21 @@ void BossDodongo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s
Matrix_MultVec3f(&D_808CA48C, &this->unk_404);
}
Collider_UpdateSpheres(limbIndex, &this->collider);
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 7) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(-6643, 1771, -14834, MTXMODE_APPLY);
+ Matrix_Translate(2000.0f, 5000.0f, 4000.0f, MTXMODE_APPLY);
+ Matrix_Scale(6.114f, 6.114f, 6.114f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 0, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void BossDodongo_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c b/soh/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c
index 8e2fffe36..63f74694f 100644
--- a/soh/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c
+++ b/soh/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c
@@ -9,6 +9,7 @@
#include "assets/objects/object_ganon_anime1/object_ganon_anime1.h"
#include "assets/objects/object_ganon_anime2/object_ganon_anime2.h"
#include "assets/scenes/dungeons/ganon_boss/ganon_boss_scene.h"
+#include "soh_assets.h"
#include "soh/frame_interpolation.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
@@ -3381,6 +3382,21 @@ void BossGanon_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
Matrix_MultVec3f(&sp1C, &this->unk_214);
}
+
+ if (limbIndex == 14) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(7749, 0, -11956, MTXMODE_APPLY);
+ Matrix_Translate(675.676f, -229.730f, 148.649f, MTXMODE_APPLY);
+ Matrix_Scale(1.014f, 1.014f, 1.014f, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ Color_RGBA8 color = { 255, 0, 0, 255 };
+ gDPSetEnvColor(POLY_OPA_DISP++, color.r, color.g, color.b, color.a);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
}
void BossGanon_InitRand(s32 seedInit0, s32 seedInit1, s32 seedInit2) {
diff --git a/soh/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c b/soh/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c
index 97cc537b4..ed1ef34ea 100644
--- a/soh/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c
+++ b/soh/src/overlays/actors/ovl_Boss_Ganon2/z_boss_ganon2.c
@@ -8,6 +8,7 @@
#include "objects/object_geff/object_geff.h"
#include "soh/frame_interpolation.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#include
@@ -2656,6 +2657,18 @@ void BossGanon2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
}
}
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 16) {
+ Matrix_Push();
+ Matrix_RotateZYX(5977, 4649, 18154, MTXMODE_APPLY);
+ Matrix_Translate(364.865f, 67.568f, 378.378f, MTXMODE_APPLY);
+ Matrix_Scale(4.595f, 4.595f, 4.595f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ }
+ }
+
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -2780,6 +2793,21 @@ void BossGanon2_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s
} else if (limbIndex == 10) {
Matrix_MultVec3f(&D_80907164, &this->unk_1B8);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 11) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, -15056, MTXMODE_APPLY);
+ Matrix_Translate(824.324f, 472.973f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.845f, 0.845f, 0.845f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 100, 100, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void func_80905674(BossGanon2* this, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c b/soh/src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c
index 5f800a056..178b00e85 100644
--- a/soh/src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c
+++ b/soh/src/overlays/actors/ovl_Boss_Ganondrof/z_boss_ganondrof.c
@@ -12,6 +12,7 @@
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
#include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED)
@@ -1426,6 +1427,20 @@ void BossGanondrof_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
if (((this->flyMode != GND_FLY_PAINTING) || (this->actionFunc == BossGanondrof_Intro)) && (limbIndex <= 25)) {
Matrix_MultVec3f(&zeroVec, &this->bodyPartsPos[limbIndex - 1]);
}
+ if (CVarGetInteger("gLetItSnow", 0) && this->deathState == NOT_DEAD) {
+ if (limbIndex == 15) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(11955, 0, -15499, MTXMODE_APPLY);
+ Matrix_Translate(459.460f, 256.757f, -567.568f, MTXMODE_APPLY);
+ Matrix_Scale(0.877f, 0.877f, 0.877f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 100, 100, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
Gfx* BossGanondrof_GetClearPixelDList(GraphicsContext* gfxCtx) {
diff --git a/soh/src/overlays/actors/ovl_En_Am/z_en_am.c b/soh/src/overlays/actors/ovl_En_Am/z_en_am.c
index c62e3a8fa..587845d8f 100644
--- a/soh/src/overlays/actors/ovl_En_Am/z_en_am.c
+++ b/soh/src/overlays/actors/ovl_En_Am/z_en_am.c
@@ -8,6 +8,7 @@
#include "objects/object_am/object_am.h"
#include "overlays/actors/ovl_En_Bom/z_en_bom.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_CAN_PRESS_SWITCH)
@@ -944,6 +945,21 @@ void EnAm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if ((limbIndex == 1) && (this->unk_264 != 0)) {
EnAm_TransformSwordHitbox(&this->dyna.actor, play);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 4) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, -2657, MTXMODE_APPLY);
+ Matrix_Translate(4000.0f, 1148.649f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.655f, 1.655f, 1.655f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 0, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
static Vec3f sIcePosOffsets[] = {
diff --git a/soh/src/overlays/actors/ovl_En_Ani/z_en_ani.c b/soh/src/overlays/actors/ovl_En_Ani/z_en_ani.c
index 4b0e93f52..4a62945bd 100644
--- a/soh/src/overlays/actors/ovl_En_Ani/z_en_ani.c
+++ b/soh/src/overlays/actors/ovl_En_Ani/z_en_ani.c
@@ -7,6 +7,7 @@
#include "z_en_ani.h"
#include "objects/object_ani/object_ani.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
@@ -316,6 +317,21 @@ void EnAni_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if (limbIndex == 15) {
Matrix_MultVec3f(&sMultVec, &this->actor.focus.pos);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 15) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(1992, 0, 2656, MTXMODE_APPLY);
+ Matrix_Translate(972.973f, 40.541f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.965f, 0.965f, 0.965f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnAni_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_En_Bb/z_en_bb.c b/soh/src/overlays/actors/ovl_En_Bb/z_en_bb.c
index 39c0e54e9..8024c09e3 100644
--- a/soh/src/overlays/actors/ovl_En_Bb/z_en_bb.c
+++ b/soh/src/overlays/actors/ovl_En_Bb/z_en_bb.c
@@ -8,6 +8,7 @@
#include "objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_Bb/object_Bb.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_PLAY_HIT_SFX)
@@ -1269,6 +1270,20 @@ void EnBb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
EnBb* this = (EnBb*)thisx;
BodyBreak_SetInfo(&this->bodyBreak, limbIndex, 4, 15, 15, dList, BODYBREAK_OBJECT_DEFAULT);
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 15) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(-13063, 0, -27454, MTXMODE_APPLY);
+ Matrix_Translate(418.919f, -81.081f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.757f, 1.757f, 1.757f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
static Vec3f sFireIceOffsets[] = {
diff --git a/soh/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c b/soh/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
index c265b3eb0..b9900f063 100644
--- a/soh/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
+++ b/soh/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c
@@ -1,6 +1,7 @@
#include "z_en_bom_chu.h"
#include "overlays/actors/ovl_En_Bom/z_en_bom.h"
#include "objects/gameplay_keep/gameplay_keep.h"
+#include "soh_assets.h"
#define FLAGS ACTOR_FLAG_UPDATE_WHILE_CULLED
@@ -529,5 +530,15 @@ void EnBomChu_Draw(Actor* thisx, PlayState* play) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gBombchuDL);
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ Matrix_Push();
+ Matrix_RotateZYX(0, -3100, 17047, MTXMODE_APPLY);
+ Matrix_Translate(445.946f, -27.027f, 608.108f, MTXMODE_APPLY);
+ Matrix_Scale(0.541f, 0.541f, 0.541f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ }
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/soh/src/overlays/actors/ovl_En_Box/z_en_box.c b/soh/src/overlays/actors/ovl_En_Box/z_en_box.c
index ef7a6330b..4409a4127 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
@@ -668,7 +668,7 @@ void EnBox_UpdateSizeAndTexture(EnBox* this, PlayState* play) {
}
}
- if (CVarGetInteger(CVAR_GENERAL("LetItSnow"), 0) && hasChristmasChestTexturesAvailable && hasCreatedRandoChestTextures && !hasCustomChestDLs) {
+ if (CVarGetInteger("gLetItSnow", 0) && hasChristmasChestTexturesAvailable && hasCreatedRandoChestTextures && !hasCustomChestDLs) {
if (this->dyna.actor.scale.x == 0.01f) {
this->boxBodyDL = gChristmasRedTreasureChestChestFrontDL;
this->boxLidDL = gChristmasRedTreasureChestChestSideAndLidDL;
diff --git a/soh/src/overlays/actors/ovl_En_ChristmasDeco/z_en_christmasdeco.c b/soh/src/overlays/actors/ovl_En_ChristmasDeco/z_en_christmasdeco.c
new file mode 100644
index 000000000..2a4e02be9
--- /dev/null
+++ b/soh/src/overlays/actors/ovl_En_ChristmasDeco/z_en_christmasdeco.c
@@ -0,0 +1,61 @@
+/*
+ * File: z_en_christmasdeco.c
+ * Overlay: ovl_En_ChristmasDeco
+ * Description: Custom Christmas Decorations
+ */
+
+#include "z_en_christmasdeco.h"
+#include "soh_assets.h"
+
+void EnChristmasDeco_Init(Actor* thisx, PlayState* play);
+void EnChristmasDeco_Destroy(Actor* thisx, PlayState* play);
+void EnChristmasDeco_Update(Actor* thisx, PlayState* play);
+void EnChristmasDeco_Draw(Actor* thisx, PlayState* play);
+
+void EnChristmasDeco_Init(Actor* thisx, PlayState* play) {
+ if (play->sceneNum == SCENE_TEMPLE_OF_TIME) {
+ EnChristmasDeco* this = (EnChristmasDeco*)thisx;
+ this->actor.room = -1;
+ }
+}
+
+void EnChristmasDeco_Destroy(Actor* thisx, PlayState* play) {
+
+}
+
+void EnChristmasDeco_Update(Actor* thisx, PlayState* play) {
+
+}
+
+void EnChristmasDeco_Draw(Actor* thisx, PlayState* play) {
+ float decoSize = 10.0f;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Gfx_SetupDL_25Opa(play->state.gfxCtx);
+
+ Matrix_Scale(decoSize, decoSize, decoSize, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD);
+
+ // Assertion Halt in Debug mode, switch to Release when testing.
+ if (play->sceneNum == SCENE_KAKARIKO_VILLAGE) {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gKakarikoDecorDL);
+ if (LINK_IS_CHILD) {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gKakarikoChildDecorDL);
+ } else {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gKakarikoAdultDecorDL);
+ }
+ }
+
+ if (play->sceneNum == SCENE_TEMPLE_OF_TIME) {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gTempleOfTimeDecorDL);
+ if (LINK_IS_CHILD) {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gTempleOfTimeDecorDL);
+ } else {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gTempleOfTimeDecorDL);
+ }
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
diff --git a/soh/src/overlays/actors/ovl_En_ChristmasDeco/z_en_christmasdeco.h b/soh/src/overlays/actors/ovl_En_ChristmasDeco/z_en_christmasdeco.h
new file mode 100644
index 000000000..f2a317648
--- /dev/null
+++ b/soh/src/overlays/actors/ovl_En_ChristmasDeco/z_en_christmasdeco.h
@@ -0,0 +1,27 @@
+#ifndef Z_EN_CHRISTMASDECO_H
+#define Z_EN_CHRISTMASDECO_H
+
+#include
+#include "global.h"
+
+struct EnChristmasDeco;
+
+typedef void (*EnChristmasDecoActionFunc)(struct EnChristmasDeco*, PlayState*);
+
+typedef struct EnChristmasDeco {
+ Actor actor;
+ EnChristmasDecoActionFunc actionFunc;
+} EnChristmasDeco;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+void EnChristmasDeco_Init(Actor* thisx, PlayState* play);
+void EnChristmasDeco_Destroy(Actor* thisx, PlayState* play);
+void EnChristmasDeco_Update(Actor* thisx, PlayState* play);
+void EnChristmasDeco_Draw(Actor* thisx, PlayState* play);
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/soh/src/overlays/actors/ovl_En_ChristmasTree/z_en_christmastree.c b/soh/src/overlays/actors/ovl_En_ChristmasTree/z_en_christmastree.c
new file mode 100644
index 000000000..32a2cf81f
--- /dev/null
+++ b/soh/src/overlays/actors/ovl_En_ChristmasTree/z_en_christmastree.c
@@ -0,0 +1,212 @@
+/*
+ * File: z_en_christmastree.c
+ * Overlay: ovl_En_ChristmasTree
+ * Description: Custom Christmas Tree for Ornament Hunt
+ */
+
+#include "z_en_christmastree.h"
+#include "soh_assets.h"
+#include "soh/Enhancements/game-interactor/GameInteractor.h"
+
+void EnChristmasTree_Init(Actor* thisx, PlayState* play);
+void EnChristmasTree_Destroy(Actor* thisx, PlayState* play);
+void EnChristmasTree_Update(Actor* thisx, PlayState* play);
+void EnChristmasTree_Draw(Actor* thisx, PlayState* play);
+
+void EnChristmasTree_Wait(EnChristmasTree* this, PlayState* play);
+void EnChristmasTree_Talk(EnChristmasTree* this, PlayState* play);
+void EnChristmasTree_SetupEndTitle(EnChristmasTree* this, PlayState* play);
+void EnChristmasTree_HandleEndTitle(EnChristmasTree* this, PlayState* play);
+
+static ColliderCylinderInit sCylinderInit = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_NONE,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_2,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0x00000000, 0x00, 0x00 },
+ TOUCH_NONE,
+ BUMP_NONE,
+ OCELEM_ON,
+ },
+ { 100, 330, 0, { 0, 0, 0 } },
+};
+
+static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
+
+void EnChristmasTree_Init(Actor* thisx, PlayState* play) {
+ EnChristmasTree* this = (EnChristmasTree*)thisx;
+
+ ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 160.0f);
+ Collider_InitCylinder(play, &this->collider);
+ Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
+ CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+
+ this->actor.targetMode = 1;
+ this->actor.textId = 0x406B; // Hijacking bean seller text ID so I'm sure it doesn't clash
+
+ this->actor.shape.rot.y = -14784;
+
+ this->actionFunc = EnChristmasTree_Wait;
+}
+
+void EnChristmasTree_Destroy(Actor* thisx, PlayState* play) {
+ EnChristmasTree* this = (EnChristmasTree*)thisx;
+
+ Collider_DestroyCylinder(play, &this->collider);
+}
+
+void EnChristmasTree_Wait(EnChristmasTree* this, PlayState* play) {
+ if (Actor_ProcessTalkRequest(&this->actor, play)) { // if talk is initiated
+ this->actionFunc = EnChristmasTree_Talk;
+ } else if ((this->actor.xzDistToPlayer < 170.0f) && Randomizer_GetSettingValue(RSK_TRIFORCE_HUNT)) { // talk range
+ func_8002F2CC(&this->actor, play, 170.0f);
+ }
+}
+
+void EnChristmasTree_Talk(EnChristmasTree* this, PlayState* play) {
+ u8 dialogState = Message_GetState(&play->msgCtx);
+ if (dialogState != TEXT_STATE_CHOICE) {
+ if ((dialogState == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { // advanced final textbox
+ // Teleport to credits when goal is reached.
+ if (gSaveContext.triforcePiecesCollected >= Randomizer_GetSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED)) {
+ gSaveContext.sohStats.itemTimestamp[TIMESTAMP_TRIFORCE_COMPLETED] = GAMEPLAYSTAT_TOTAL_TIME;
+ gSaveContext.sohStats.gameComplete = 1;
+ Play_PerformSave(play);
+ GameInteractor_SetTriforceHuntCreditsWarpActive(true);
+ this->actionFunc = EnChristmasTree_SetupEndTitle;
+ } else {
+ this->actionFunc = EnChristmasTree_Wait;
+ }
+ }
+ }
+}
+
+void EnChristmasTree_SetupEndTitle(EnChristmasTree* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ Actor_Spawn(&play->actorCtx, play, ACTOR_END_TITLE, 0, 0, 0, 0, 0, 0, 2, false);
+
+ player->stateFlags1 = PLAYER_STATE1_INPUT_DISABLED;
+
+ Flags_SetRandomizerInf(RAND_INF_GRANT_GANONS_BOSSKEY);
+
+ Play_PerformSave(play);
+
+ this->actionFunc = EnChristmasTree_HandleEndTitle;
+}
+
+void EnChristmasTree_HandleEndTitle(EnChristmasTree* this, PlayState* play) {
+ Camera* camera = Play_GetCamera(play, play->mainCamera.thisIdx);
+ Player* player = GET_PLAYER(play);
+ Vec3f camAt;
+ Vec3f camEye;
+
+ // Not forcing camera mode makes the camera jitter for a bit after setting position.
+ // Also forces letterbox bars.
+ Camera_ChangeMode(camera, CAM_MODE_STILL);
+
+ // Christmas Tree's position
+ camAt.x = -734.0f;
+ camAt.y = 130.0f;
+ camAt.z = 420.0f;
+
+ // Camera's position
+ camEye.x = -1237.0f;
+ camEye.y = 218.0f;
+ camEye.z = 408.0f;
+
+ // Not setting fov manually makes camera zoom in after setting the above for a little bit.
+ camera->fov = 60.0f;
+
+ // Set camera
+ Play_CameraSetAtEye(play, play->mainCamera.thisIdx, &camAt, &camEye);
+
+ // Hide player so he's not visible in the final screen. Also move him so target arrow on tree dissapears.
+ player->actor.scale.x = player->actor.scale.y = player->actor.scale.z = 0.00001f;
+ player->actor.world.pos.z = 500.0f;
+
+ // Hide HUD
+ Interface_ChangeAlpha(1);
+}
+
+void EnChristmasTree_Update(Actor* thisx, PlayState* play) {
+ EnChristmasTree* this = (EnChristmasTree*)thisx;
+ ColliderCylinder* collider = &this->collider;
+
+ Collider_UpdateCylinder(thisx, collider);
+ CollisionCheck_SetOC(play, &play->colChkCtx, (Collider*)collider);
+
+ Actor_SetFocus(&this->actor, 80.0f);
+
+ uint8_t triforceHuntActive = Randomizer_GetSettingValue(RSK_TRIFORCE_HUNT);
+ float percentageCompleted = (float)gSaveContext.triforcePiecesCollected /
+ (float)Randomizer_GetSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED);
+
+ if ((percentageCompleted >= 1.0f || !triforceHuntActive) && !this->spawnedRupee) {
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WONDER_ITEM, this->actor.world.pos.x, this->actor.world.pos.y + 280,
+ this->actor.world.pos.z, 0, 0, LINK_IS_ADULT ? 1 : 4, 0x1ABF, false);
+ this->spawnedRupee = 1;
+ }
+
+ this->actionFunc(this, play);
+}
+
+void EnChristmasTree_Draw(Actor* thisx, PlayState* play) {
+ EnChristmasTree* this = (EnChristmasTree*)thisx;
+
+ float treeSize = 55.0f;
+ uint8_t triforceHuntActive = Randomizer_GetSettingValue(RSK_TRIFORCE_HUNT);
+ float percentageCompleted = (float)gSaveContext.triforcePiecesCollected /
+ (float)Randomizer_GetSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED);
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Gfx_SetupDL_25Opa(play->state.gfxCtx);
+
+ Matrix_Scale(treeSize, treeSize, treeSize, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD);
+
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasTreeDL);
+
+ if (percentageCompleted >= 0.1f || !triforceHuntActive) {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasDecor10DL);
+ }
+ if (percentageCompleted >= 0.2f || !triforceHuntActive) {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasDecor20DL);
+ }
+ if (percentageCompleted >= 0.3f || !triforceHuntActive) {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasDecor30DL);
+ }
+ if (percentageCompleted >= 0.4f || !triforceHuntActive) {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasDecor40DL);
+ }
+ if (percentageCompleted >= 0.5f || !triforceHuntActive) {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasDecor50DL);
+ }
+ if (percentageCompleted >= 0.6f || !triforceHuntActive) {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasDecor60DL);
+ }
+ if (percentageCompleted >= 0.7f || !triforceHuntActive) {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasDecor70DL);
+ }
+ if (percentageCompleted >= 0.8f || !triforceHuntActive) {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasDecor80DL);
+ }
+ if (percentageCompleted >= 0.9f || !triforceHuntActive) {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasDecor90DL);
+ }
+ if (percentageCompleted >= 1.0f || !triforceHuntActive) {
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasDecor100DL);
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasStarDL);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
diff --git a/soh/src/overlays/actors/ovl_En_ChristmasTree/z_en_christmastree.h b/soh/src/overlays/actors/ovl_En_ChristmasTree/z_en_christmastree.h
new file mode 100644
index 000000000..fd580ac71
--- /dev/null
+++ b/soh/src/overlays/actors/ovl_En_ChristmasTree/z_en_christmastree.h
@@ -0,0 +1,29 @@
+#ifndef Z_EN_CHRISTMASTREE_H
+#define Z_EN_CHRISTMASTREE_H
+
+#include
+#include "global.h"
+
+struct EnChristmasTree;
+
+typedef void (*EnChristmasTreeActionFunc)(struct EnChristmasTree*, PlayState*);
+
+typedef struct EnChristmasTree {
+ Actor actor;
+ ColliderCylinder collider;
+ EnChristmasTreeActionFunc actionFunc;
+ u8 spawnedRupee;
+} EnChristmasTree;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+void EnChristmasTree_Init(Actor* thisx, PlayState* play);
+void EnChristmasTree_Destroy(Actor* thisx, PlayState* play);
+void EnChristmasTree_Update(Actor* thisx, PlayState* play);
+void EnChristmasTree_Draw(Actor* thisx, PlayState* play);
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/soh/src/overlays/actors/ovl_En_Cs/z_en_cs.c b/soh/src/overlays/actors/ovl_En_Cs/z_en_cs.c
index d1659d21c..be4e96dcc 100644
--- a/soh/src/overlays/actors/ovl_En_Cs/z_en_cs.c
+++ b/soh/src/overlays/actors/ovl_En_Cs/z_en_cs.c
@@ -1,6 +1,7 @@
#include "z_en_cs.h"
#include "objects/object_cs/object_cs.h"
#include "objects/object_link_child/object_link_child.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
@@ -521,4 +522,19 @@ void EnCs_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
Matrix_RotateZ(5.0 * M_PI / 9.0, MTXMODE_APPLY);
Matrix_Get(&this->spookyMaskMtx);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 15) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(8191, -5757, -24133, MTXMODE_APPLY);
+ Matrix_Translate(270.27f, 297.297f, -513.514f, MTXMODE_APPLY);
+ Matrix_Scale(1.135f, 1.135f, 1.135f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 0, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
diff --git a/soh/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c b/soh/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c
index 6cc91e0c7..ea01c116a 100644
--- a/soh/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c
+++ b/soh/src/overlays/actors/ovl_En_Daiku_Kakariko/z_en_daiku_kakariko.c
@@ -6,6 +6,7 @@
#include "z_en_daiku_kakariko.h"
#include "objects/object_daiku/object_daiku.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED)
@@ -539,6 +540,51 @@ void EnDaikuKakariko_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, V
gSPDisplayList(POLY_OPA_DISP++, carpenterHeadDLists[this->actor.params & 3]);
}
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 15) {
+ Matrix_Push();
+ switch(this->actor.params) {
+ case 259: {
+ Matrix_RotateZYX(4649, 0, -3543, MTXMODE_APPLY);
+ Matrix_Translate(824.324f, 324.324f, -175.676f, MTXMODE_APPLY);
+ Matrix_Scale(0.966f, 0.966f, 0.966f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ break;
+ }
+ case 513: {
+ Matrix_RotateZYX(0, 0, -6200, MTXMODE_APPLY);
+ Matrix_Translate(770.27f, 567.568f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.899f, 0.899f, 0.899f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 255, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ break;
+ }
+ case 2: {
+ Matrix_RotateZYX(0, 0, 7970, MTXMODE_APPLY);
+ Matrix_Translate(1270.27f, -878.378f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 255, 0, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ break;
+ }
+ case -256:
+ default: {
+ Matrix_RotateZYX(0, 0, -8635, MTXMODE_APPLY);
+ Matrix_Translate(675.676f, 716.216f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.899f, 0.899f, 0.899f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 0, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ }
+ }
+ Matrix_Pop();
+ }
+ }
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/soh/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c b/soh/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
index 2b4344f68..524579aa9 100644
--- a/soh/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
+++ b/soh/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
@@ -3,6 +3,7 @@
#include "objects/gameplay_keep/gameplay_keep.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE)
@@ -1279,6 +1280,20 @@ void EnDekubaba_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
if (limbIndex == 1) {
Collider_UpdateSpheres(limbIndex, &this->collider);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 4) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(16485, -1425, -20964, MTXMODE_APPLY);
+ Matrix_Translate(-149.0f, 92.0f, -587.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.534f, 1.534f, 1.534f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnDekubaba_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_En_Dns/z_en_dns.c b/soh/src/overlays/actors/ovl_En_Dns/z_en_dns.c
index d2d8963c3..aef178231 100644
--- a/soh/src/overlays/actors/ovl_En_Dns/z_en_dns.c
+++ b/soh/src/overlays/actors/ovl_En_Dns/z_en_dns.c
@@ -8,6 +8,7 @@
#include "objects/object_shopnuts/object_shopnuts.h"
#include "vt.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
@@ -503,9 +504,27 @@ void EnDns_Update(Actor* thisx, PlayState* play) {
}
}
+void EnDns_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
+ EnDns* this = (EnDns*)thisx;
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 17) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, 17490, MTXMODE_APPLY);
+ Matrix_Translate(4200.0f, -472.973f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(4.932f, 4.932f, 4.932f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
+}
+
void EnDns_Draw(Actor* thisx, PlayState* play) {
EnDns* this = (EnDns*)thisx;
Gfx_SetupDL_25Opa(play->state.gfxCtx);
- SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, NULL, &this->actor);
+ SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, EnDns_PostLimbDraw, &this->actor);
}
diff --git a/soh/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c b/soh/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c
index 359477614..a342e9412 100644
--- a/soh/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c
+++ b/soh/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c
@@ -3,6 +3,7 @@
#include "overlays/actors/ovl_En_Bombf/z_en_bombf.h"
#include "objects/object_dodongo/object_dodongo.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED)
@@ -915,6 +916,21 @@ void EnDodongo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
Matrix_MultVec3f(&baseOffset, &this->icePos[i]);
}
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 7) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, -13063, MTXMODE_APPLY);
+ Matrix_Translate(864.865f, 756.757f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.662f, 0.662f, 0.662f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 0, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnDodongo_Draw(Actor* thisx, PlayState* play2) {
diff --git a/soh/src/overlays/actors/ovl_En_Dog/z_en_dog.c b/soh/src/overlays/actors/ovl_En_Dog/z_en_dog.c
index b226d00f2..e9f3d877f 100644
--- a/soh/src/overlays/actors/ovl_En_Dog/z_en_dog.c
+++ b/soh/src/overlays/actors/ovl_En_Dog/z_en_dog.c
@@ -6,6 +6,7 @@
#include "z_en_dog.h"
#include "objects/object_dog/object_dog.h"
+#include "soh_assets.h"
#define FLAGS 0
@@ -494,6 +495,19 @@ s32 EnDog_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
}
void EnDog_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 4) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(20811, -32768, 3985, MTXMODE_APPLY);
+ Matrix_Translate(0.0f, 0.0f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.25f, 1.25f, 1.25f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnDog_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_En_Ds/z_en_ds.c b/soh/src/overlays/actors/ovl_En_Ds/z_en_ds.c
index 874b62cea..e46a95d79 100644
--- a/soh/src/overlays/actors/ovl_En_Ds/z_en_ds.c
+++ b/soh/src/overlays/actors/ovl_En_Ds/z_en_ds.c
@@ -7,6 +7,7 @@
#include "z_en_ds.h"
#include "objects/object_ds/object_ds.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
@@ -285,6 +286,21 @@ void EnDs_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if (limbIndex == 5) {
Matrix_MultVec3f(&sMultVec, &this->actor.focus.pos);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 5) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(-1329, -3100, 0, MTXMODE_APPLY);
+ Matrix_Translate(1270.27f, 351.351f, -310.811f, MTXMODE_APPLY);
+ Matrix_Scale(0.797f, 0.797f, 0.797f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnDs_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_En_Du/z_en_du.c b/soh/src/overlays/actors/ovl_En_Du/z_en_du.c
index 20acdec4c..3bfa77b04 100644
--- a/soh/src/overlays/actors/ovl_En_Du/z_en_du.c
+++ b/soh/src/overlays/actors/ovl_En_Du/z_en_du.c
@@ -2,6 +2,7 @@
#include "objects/object_du/object_du.h"
#include "scenes/overworld/spot18/spot18_scene.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_NO_FREEZE_OCARINA)
@@ -653,6 +654,20 @@ void EnDu_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if (limbIndex == 16) {
Matrix_MultVec3f(&D_809FF40C, &this->actor.focus.pos);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 17) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(13062, -1329, -15499, MTXMODE_APPLY);
+ Matrix_Translate(945.946f, -297.297f, 608.108f, MTXMODE_APPLY);
+ Matrix_Scale(1.217f, 1.217f, 1.217f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnDu_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/soh/src/overlays/actors/ovl_En_Elf/z_en_elf.c
index 477d60d64..acbce16ae 100644
--- a/soh/src/overlays/actors/ovl_En_Elf/z_en_elf.c
+++ b/soh/src/overlays/actors/ovl_En_Elf/z_en_elf.c
@@ -7,6 +7,7 @@
#include "z_en_elf.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#include
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED | ACTOR_FLAG_NO_FREEZE_OCARINA)
@@ -1504,6 +1505,26 @@ s32 EnElf_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
return false;
}
+s32 EnElf_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
+ EnElf* this = (EnElf*)thisx;
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 2) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, 17047, MTXMODE_APPLY);
+ Matrix_Translate(202.0f, 0.0f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.595f, 0.595f, 0.595f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
+
+ return false;
+}
+
void EnElf_Draw(Actor* thisx, PlayState* play) {
s32 pad;
f32 alphaScale;
@@ -1541,7 +1562,7 @@ void EnElf_Draw(Actor* thisx, PlayState* play) {
gDPSetEnvColor(POLY_XLU_DISP++, (u8)this->outerColor.r, (u8)this->outerColor.g, (u8)this->outerColor.b,
(u8)(envAlpha * alphaScale));
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
- EnElf_OverrideLimbDraw, NULL, this, POLY_XLU_DISP);
+ EnElf_OverrideLimbDraw, EnElf_PostLimbDraw, this, POLY_XLU_DISP);
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/soh/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/soh/src/overlays/actors/ovl_En_Fu/z_en_fu.c
index 98b8a4dda..321bf35de 100644
--- a/soh/src/overlays/actors/ovl_En_Fu/z_en_fu.c
+++ b/soh/src/overlays/actors/ovl_En_Fu/z_en_fu.c
@@ -7,6 +7,7 @@
#include "z_en_fu.h"
#include "objects/object_fu/object_fu.h"
#include "scenes/indoors/hakasitarelay/hakasitarelay_scene.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_NO_FREEZE_OCARINA)
@@ -301,6 +302,20 @@ void EnFu_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if (limbIndex == FU_LIMB_HEAD) {
Matrix_MultVec3f(&sMtxSrc, &this->actor.focus.pos);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 14) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(-27454, 0, 1992, MTXMODE_APPLY);
+ Matrix_Translate(878.378f, -108.108f, 67.568f, MTXMODE_APPLY);
+ Matrix_Scale(1.135f, 1.135f, 1.135f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnFu_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_En_Heishi4/z_en_heishi4.c b/soh/src/overlays/actors/ovl_En_Heishi4/z_en_heishi4.c
index 981824bd2..0c2079a3f 100644
--- a/soh/src/overlays/actors/ovl_En_Heishi4/z_en_heishi4.c
+++ b/soh/src/overlays/actors/ovl_En_Heishi4/z_en_heishi4.c
@@ -1,6 +1,7 @@
#include "z_en_heishi4.h"
#include "objects/object_sd/object_sd.h"
#include "vt.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
@@ -414,9 +415,29 @@ s32 EnHeishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
return false;
}
+s32 EnHeishi4_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
+ EnHeishi4* this = (EnHeishi4*)thisx;
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 16) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, 442, MTXMODE_APPLY);
+ Matrix_Translate(256.757f, 121.621f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.337f, 1.337f, 1.337f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
+
+ return false;
+}
+
void EnHeishi4_Draw(Actor* thisx, PlayState* play) {
EnHeishi4* this = (EnHeishi4*)thisx;
Gfx_SetupDL_25Opa(play->state.gfxCtx);
- SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnHeishi_OverrideLimbDraw, NULL, this);
+ SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnHeishi_OverrideLimbDraw, EnHeishi4_PostLimbDraw, this);
}
diff --git a/soh/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c b/soh/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c
index 3f8e61481..84eb63d58 100644
--- a/soh/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c
+++ b/soh/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c
@@ -7,6 +7,7 @@
#include "z_en_hs2.h"
#include "vt.h"
#include "objects/object_hs/object_hs.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
@@ -65,6 +66,14 @@ void EnHs2_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_80A6F1A4;
this->unk_2A8 = 0;
this->actor.targetMode = 6;
+
+ if (play->sceneNum == SCENE_KAKARIKO_VILLAGE) {
+ this->actor.world.pos.x = 756.0;
+ this->actor.world.pos.y = 80.0;
+ this->actor.world.pos.z = 1378.0;
+ this->actor.shape.rot.y = 32534;
+ }
+
}
void EnHs2_Destroy(Actor* thisx, PlayState* play) {
@@ -160,6 +169,21 @@ void EnHs2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if (limbIndex == 9) {
Matrix_MultVec3f(&D_80A6F4CC, &this->actor.focus.pos);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 9) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, -6421, MTXMODE_APPLY);
+ Matrix_Translate(621.622f, 378.378f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.763f, 0.763f, 0.763f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 255, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnHs2_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_En_Hy/z_en_hy.c b/soh/src/overlays/actors/ovl_En_Hy/z_en_hy.c
index 76ca5049e..45521e9c6 100644
--- a/soh/src/overlays/actors/ovl_En_Hy/z_en_hy.c
+++ b/soh/src/overlays/actors/ovl_En_Hy/z_en_hy.c
@@ -15,6 +15,7 @@
#include "objects/object_cob/object_cob.h"
#include "objects/object_os_anime/object_os_anime.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED)
@@ -890,6 +891,21 @@ void EnHy_Init(Actor* thisx, PlayState* play) {
Actor_Kill(&this->actor);
}
+ if (play->sceneNum == SCENE_KAKARIKO_VILLAGE) {
+ if (this->actor.params == 1929) {
+ this->actor.world.pos.x = 261.826;
+ this->actor.world.pos.y = 240.0;
+ this->actor.world.pos.z = 1669.660;
+ this->actor.shape.rot.y = 23784;
+ }
+ if (this->actor.params == 1930) {
+ this->actor.world.pos.x = 262.224;
+ this->actor.world.pos.y = 240.0;
+ this->actor.world.pos.z = 1594.390;
+ this->actor.shape.rot.y = 7728;
+ }
+ }
+
this->getItemEntry = (GetItemEntry)GET_ITEM_NONE;
this->actionFunc = EnHy_InitImpl;
}
@@ -1171,6 +1187,101 @@ void EnHy_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
Matrix_MultVec3f(&sp3C, &this->actor.focus.pos);
}
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 15) {
+ Matrix_Push();
+ switch(this->actor.params) {
+ case 1938: {
+ Matrix_RotateZYX(5313, 0, -1550, MTXMODE_APPLY);
+ Matrix_Translate(1108.108f, 54.054f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ break;
+ }
+ case 135:
+ case 7: {
+ Matrix_RotateZYX(1328, 0, 885, MTXMODE_APPLY);
+ Matrix_Translate(864.865f, 229.73f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.25f, 1.25f, 1.25f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ break;
+ }
+ case 1922: {
+ Matrix_RotateZYX(4206, 221, -3543, MTXMODE_APPLY);
+ Matrix_Translate(662.162f, 162.162f, -27.027f, MTXMODE_APPLY);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ break;
+ }
+ case 1925: {
+ Matrix_RotateZYX(-9521, 442, -5536, MTXMODE_APPLY);
+ Matrix_Translate(351.351f, 256.757f, 283.784f, MTXMODE_APPLY);
+ Matrix_Scale(1.217f, 1.217f, 1.217f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ break;
+ }
+ case 1920: {
+ Matrix_RotateZYX(0, 0, 3321, MTXMODE_APPLY);
+ Matrix_Translate(1148.649f, 0.0f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.73f, 0.73f, 0.73f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ break;
+ }
+ case 1930: {
+ Matrix_RotateZYX(3542, 0, 0, MTXMODE_APPLY);
+ Matrix_Translate(972.973f, -13.514f, 54.054f, MTXMODE_APPLY);
+ Matrix_Scale(0.831f, 0.831f, 0.831f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 0, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ break;
+ }
+ case 1929: {
+ Matrix_RotateZYX(3542, 0, 0, MTXMODE_APPLY);
+ Matrix_Translate(972.973f, -13.514f, 54.054f, MTXMODE_APPLY);
+ Matrix_Scale(0.831f, 0.831f, 0.831f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ break;
+ }
+ case 1921: {
+ Matrix_RotateZYX(0, 0, 664, MTXMODE_APPLY);
+ Matrix_Translate(1256.757f, -297.297f, -40.541f, MTXMODE_APPLY);
+ Matrix_Scale(1.135f, 1.135f, 1.135f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 255, 0, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ break;
+ }
+ case 1939: {
+ Matrix_RotateZYX(2656, 1328, 1992, MTXMODE_APPLY);
+ Matrix_Translate(1094.594f, 94.594f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.351f, 1.351f, 1.351f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ break;
+ }
+ default: {
+ Matrix_RotateZYX(0, 0, 664, MTXMODE_APPLY);
+ Matrix_Translate(783.784f, 94.594f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.662f, 0.662f, 0.662f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 0, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ break;
+ }
+ }
+ Matrix_Pop();
+ }
+ }
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/soh/src/overlays/actors/ovl_En_Ik/z_en_ik.c b/soh/src/overlays/actors/ovl_En_Ik/z_en_ik.c
index 9ab8735dd..f6566f163 100644
--- a/soh/src/overlays/actors/ovl_En_Ik/z_en_ik.c
+++ b/soh/src/overlays/actors/ovl_En_Ik/z_en_ik.c
@@ -9,6 +9,7 @@
#include "objects/object_ik/object_ik.h"
#include "vt.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS ACTOR_FLAG_UPDATE_WHILE_CULLED
@@ -944,6 +945,19 @@ void EnIk_PostLimbDraw3(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
break;
}
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 11) {
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, -15056, MTXMODE_APPLY);
+ Matrix_Translate(824.324f, 472.973f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.845f, 0.845f, 0.845f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 100, 100, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ }
+ }
+
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -1225,6 +1239,20 @@ void EnIk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
}
} break;
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 11) {
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, -15056, MTXMODE_APPLY);
+ Matrix_Translate(824.324f, 472.973f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.845f, 0.845f, 0.845f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 100, 100, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ }
+ }
+
CLOSE_DISPS(gfxCtx);
}
@@ -1375,6 +1403,19 @@ void EnIk_PostLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
break;
}
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 11) {
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, -15056, MTXMODE_APPLY);
+ Matrix_Translate(824.324f, 472.973f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.845f, 0.845f, 0.845f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 100, 100, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ }
+ }
+
CLOSE_DISPS(gfxCtx);
}
diff --git a/soh/src/overlays/actors/ovl_En_In/z_en_in.c b/soh/src/overlays/actors/ovl_En_In/z_en_in.c
index 9f8c065f0..98545842b 100644
--- a/soh/src/overlays/actors/ovl_En_In/z_en_in.c
+++ b/soh/src/overlays/actors/ovl_En_In/z_en_in.c
@@ -1,6 +1,7 @@
#include "z_en_in.h"
#include "overlays/actors/ovl_En_Horse/z_en_horse.h"
#include "objects/object_in/object_in.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED)
@@ -987,6 +988,18 @@ void EnIn_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
gSPDisplayList(POLY_OPA_DISP++, gIngoChildEraPitchForkDL);
}
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 16) {
+ Matrix_Push();
+ Matrix_RotateZYX(-8192, -222, -11513, MTXMODE_APPLY);
+ Matrix_Translate(770.0f, 837.0f, 878.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.068f, 1.068f, 1.068f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ }
+ }
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/soh/src/overlays/actors/ovl_En_Jj/z_en_jj.c b/soh/src/overlays/actors/ovl_En_Jj/z_en_jj.c
index 28d8967c2..9a80b75ad 100644
--- a/soh/src/overlays/actors/ovl_En_Jj/z_en_jj.c
+++ b/soh/src/overlays/actors/ovl_En_Jj/z_en_jj.c
@@ -7,6 +7,7 @@
#include "z_en_jj.h"
#include "objects/object_jj/object_jj.h"
#include "overlays/actors/ovl_Eff_Dust/z_eff_dust.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED)
@@ -307,6 +308,26 @@ void EnJj_Update(Actor* thisx, PlayState* play) {
this->skelAnime.jointTable[10].z = this->mouthOpenAngle;
}
+s32 EnJj_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
+ EnJj* this = (EnJj*)thisx;
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 13) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(4649, -8635, 15276, MTXMODE_APPLY);
+ Matrix_Translate(27.027f, 135.135f, -81.081f, MTXMODE_APPLY);
+ Matrix_Scale(0.304f, 0.304f, 0.304f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
+
+ return false;
+}
+
void EnJj_Draw(Actor* thisx, PlayState* play2) {
static void* eyeTextures[] = { gJabuJabuEyeOpenTex, gJabuJabuEyeHalfTex, gJabuJabuEyeClosedTex };
PlayState* play = play2;
@@ -318,7 +339,7 @@ void EnJj_Draw(Actor* thisx, PlayState* play2) {
Matrix_Translate(0.0f, (cosf(this->skelAnime.curFrame * (M_PI / 41.0f)) * 10.0f) - 10.0f, 0.0f, MTXMODE_APPLY);
Matrix_Scale(10.0f, 10.0f, 10.0f, MTXMODE_APPLY);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(eyeTextures[this->eyeIndex]));
- SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, NULL, this);
+ SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, EnJj_PostLimbDraw, this);
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c b/soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c
index 466f7271d..94b889bf4 100644
--- a/soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c
+++ b/soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c
@@ -1351,6 +1351,12 @@ Gfx* EnKo_SetEnvColor(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b, u8 a) {
void EnKo_Draw(Actor* thisx, PlayState* play) {
EnKo* this = (EnKo*)thisx;
Color_RGBA8 tunicColor = sModelInfo[ENKO_TYPE].tunicColor;
+
+ // Overwrite to red tunic as default for Holidays in Hyrule build
+ tunicColor.r = 255;
+ tunicColor.g = 0;
+ tunicColor.b = 0;
+
Color_RGBA8 bootsColor = sModelInfo[ENKO_TYPE].bootsColor;
if (CVarGetInteger(CVAR_COSMETIC("NPC.Kokiri.Changed"), 0)) {
diff --git a/soh/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c b/soh/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
index a0e529991..f1f376f4f 100644
--- a/soh/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
+++ b/soh/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
@@ -266,6 +266,12 @@ void EnKusa_Init(Actor* thisx, PlayState* play) {
return;
}
+ if (gPlayState->sceneNum == SCENE_KAKARIKO_VILLAGE && this->actor.world.pos.z < 600.0) {
+ this->actor.world.pos.x += 1620.672;
+ this->actor.world.pos.y += 80;
+ this->actor.world.pos.z += 900.884;
+ }
+
EnKusa_SetupWaitObject(this);
}
diff --git a/soh/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c b/soh/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c
index bc164e0c7..5fef81bcf 100644
--- a/soh/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c
+++ b/soh/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c
@@ -7,6 +7,7 @@
#include "z_en_ma1.h"
#include "objects/object_ma1/object_ma1.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED | ACTOR_FLAG_NO_FREEZE_OCARINA)
@@ -456,6 +457,21 @@ void EnMa1_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if (limbIndex == 15) {
Matrix_MultVec3f(&vec, &this->actor.focus.pos);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 15) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, 0, MTXMODE_APPLY);
+ Matrix_Translate(756.757f, 0.0f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.73f, 0.73f, 0.73f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnMa1_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_En_Niw/z_en_niw.c b/soh/src/overlays/actors/ovl_En_Niw/z_en_niw.c
index 45433afd6..50ed827b0 100644
--- a/soh/src/overlays/actors/ovl_En_Niw/z_en_niw.c
+++ b/soh/src/overlays/actors/ovl_En_Niw/z_en_niw.c
@@ -9,6 +9,7 @@
#include "overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.h"
#include "vt.h"
#include "soh/frame_interpolation.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_ALWAYS_THROWN)
@@ -1132,13 +1133,33 @@ s32 EnNiw_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
return false;
}
+s32 EnNiw_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
+ EnNiw* this = (EnNiw*)thisx;
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 15) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, -19705, MTXMODE_APPLY);
+ Matrix_Translate(297.297f, -81.082f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
+
+ return false;
+}
+
void EnNiw_Draw(Actor* thisx, PlayState* play) {
EnNiw* this = (EnNiw*)thisx;
Vec3f scale = { 0.15f, 0.15f, 0.15f };
GraphicsContext* gfxCtx = play->state.gfxCtx;
Gfx_SetupDL_25Opa(play->state.gfxCtx);
- SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnNiw_OverrideLimbDraw, NULL, this);
+ SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnNiw_OverrideLimbDraw, EnNiw_PostLimbDraw, this);
if (this->actionFunc == func_80AB6450) {
func_80033C30(&this->actor.world.pos, &scale, 255, play);
diff --git a/soh/src/overlays/actors/ovl_En_Niw_Girl/z_en_niw_girl.c b/soh/src/overlays/actors/ovl_En_Niw_Girl/z_en_niw_girl.c
index 5113b8a68..e67a75161 100644
--- a/soh/src/overlays/actors/ovl_En_Niw_Girl/z_en_niw_girl.c
+++ b/soh/src/overlays/actors/ovl_En_Niw_Girl/z_en_niw_girl.c
@@ -7,6 +7,7 @@
#include "z_en_niw_girl.h"
#include "objects/object_gr/object_gr.h"
#include "vt.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED)
@@ -248,6 +249,27 @@ s32 EnNiwGirlOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
static Vec3f sConstVec3f = { 0.2f, 0.2f, 0.2f };
+s32 EnNiwGirl_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
+ EnNiwGirl* this = (EnNiwGirl*)thisx;
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 4) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, 0, MTXMODE_APPLY);
+ Matrix_Translate(945.945f, 0.0f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.676f, 0.676f, 0.676f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
+
+ return false;
+}
+
void EnNiwGirl_Draw(Actor* thisx, PlayState* play) {
static void* eyeTextures[] = { gNiwGirlEyeOpenTex, gNiwGirlEyeHalfTex, gNiwGirlEyeClosedTex };
EnNiwGirl* this = (EnNiwGirl*)thisx;
@@ -258,7 +280,7 @@ void EnNiwGirl_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(eyeTextures[this->eyeIndex]));
- SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnNiwGirlOverrideLimbDraw, NULL, this);
+ SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnNiwGirlOverrideLimbDraw, EnNiwGirl_PostLimbDraw, this);
func_80033C30(&this->actor.world.pos, &sp4C, 255, play);
CLOSE_DISPS(play->state.gfxCtx);
diff --git a/soh/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c b/soh/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c
index a03319dfc..536b1f2da 100644
--- a/soh/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c
+++ b/soh/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c
@@ -4,6 +4,7 @@
#include "overlays/actors/ovl_En_Niw/z_en_niw.h"
#include "vt.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED)
@@ -599,6 +600,27 @@ s32 EnNiwLady_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
return false;
}
+s32 EnNiwLady_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
+ EnNiwLady* this = (EnNiwLady*)thisx;
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 15) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(-886, -3322, -5093, MTXMODE_APPLY);
+ Matrix_Translate(824.324f, 283.782f, -202.703f, MTXMODE_APPLY);
+ Matrix_Scale(0.762f, 0.762f, 0.762f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
+
+ return false;
+}
+
void EnNiwLady_Draw(Actor* thisx, PlayState* play) {
static void* sEyeTextures[] = { gCuccoLadyEyeOpenTex, gCuccoLadyEyeHalfTex, gCuccoLadyEyeClosedTex };
EnNiwLady* this = (EnNiwLady*)thisx;
@@ -610,7 +632,7 @@ void EnNiwLady_Draw(Actor* thisx, PlayState* play) {
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->faceState]));
gSPSegment(POLY_OPA_DISP++, 0x0C, func_80ABB0A0(play->state.gfxCtx));
- SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnNiwLady_OverrideLimbDraw, NULL, this);
+ SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnNiwLady_OverrideLimbDraw, EnNiwLady_PostLimbDraw, this);
}
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/soh/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c b/soh/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
index a9c2a7361..2a37c90f6 100644
--- a/soh/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
+++ b/soh/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
@@ -10,6 +10,7 @@
#include "objects/object_dekunuts/object_dekunuts.h"
#include "objects/object_hintnuts/object_hintnuts.h"
#include "objects/object_shopnuts/object_shopnuts.h"
+#include "assets/objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_dns/object_dns.h"
#include "objects/object_dnk/object_dnk.h"
@@ -47,7 +48,7 @@ static ColliderCylinderInit sCylinderInit = {
},
{
ELEMTYPE_UNK0,
- { 0xFFCFFFFF, 0x00, 0x08 },
+ { 0xFFCFFFFF, 0x02, 0x08 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_WOOD,
BUMP_ON,
@@ -72,6 +73,8 @@ void EnNutsball_Init(Actor* thisx, PlayState* play) {
EnNutsball* this = (EnNutsball*)thisx;
s32 pad;
+ this->collider.info.toucher.effect = 2;
+
ActorShape_Init(&this->actor.shape, 400.0f, ActorShadow_DrawCircle, 13.0f);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
@@ -141,8 +144,8 @@ void func_80ABBBA8(EnNutsball* this, PlayState* play) {
sp40.y = this->actor.world.pos.y + 4;
sp40.z = this->actor.world.pos.z;
- EffectSsHahen_SpawnBurst(play, &sp40, 6.0f, 0, 7, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL);
- SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EN_OCTAROCK_ROCK);
+ EffectSsIcePiece_SpawnBurst(play, &this->actor.world.pos, this->actor.scale.x / 10);
+ SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_PL_ICE_BROKEN);
Actor_Kill(&this->actor);
} else {
if (this->timer == -300) {
@@ -176,17 +179,19 @@ void EnNutsball_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- if (CVarGetInteger(CVAR_ENHANCEMENT("NewDrops"), 0) != 0) {
+ if ((CVarGetInteger(CVAR_ENHANCEMENT("NewDrops"), 0) != 0) || CVarGetInteger("gLetItSnow", 0)) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x08,
- Gfx_TwoTexScroll(play->state.gfxCtx, 0, 1 * (play->state.frames * 6),
- 1 * (play->state.frames * 6), 32, 32, 1, 1 * (play->state.frames * 6),
- 1 * (play->state.frames * 6), 32, 32));
- Matrix_Scale(25.0f,25.0f,25.0f,MTXMODE_APPLY);
+ f32 scale = 12.0f;
+
+ gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, (0 - 1) % 128, 32, 32, 1, 0, (1 * -2) % 128, 32, 32));
+
Matrix_RotateX(thisx->home.rot.z * 9.58738e-05f, MTXMODE_APPLY);
- gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
- G_MTX_MODELVIEW | G_MTX_LOAD);
- gSPDisplayList(POLY_OPA_DISP++, sDListsNew[thisx->params]);
+ Matrix_Translate(0.0f, -445.946f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 50, 100, 255);
+ gSPDisplayList(POLY_OPA_DISP++, gEffIceFragment3DL);
} else {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
diff --git a/soh/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/soh/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
index 54fc2d2fa..a89b3d123 100644
--- a/soh/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
+++ b/soh/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
@@ -2,6 +2,7 @@
#include "objects/object_okuta/object_okuta.h"
#include "objects/gameplay_field_keep/gameplay_field_keep.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "assets/objects/gameplay_keep/gameplay_keep.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE)
@@ -45,7 +46,7 @@ static ColliderCylinderInit sProjectileColliderInit = {
},
{
ELEMTYPE_UNK0,
- { 0xFFCFFFFF, 0x00, 0x08 },
+ { 0xFFCFFFFF, 0x02, 0x08 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_HARD,
BUMP_ON,
@@ -519,38 +520,12 @@ void EnOkuta_ProjectileFly(EnOkuta* this, PlayState* play) {
f32 temp_f20;
f32 temp_f22;
s32 i;
- for (s16 i = 0; i < ARRAY_COUNT(sEffectScales); i++) {
- phi_s0 += 10000;
-
- temp_f20 = Rand_ZeroOne() * 5.0f;
- pos.x = (Math_SinS(phi_s0) * temp_f20) + this->actor.world.pos.x;
- pos.y = (Rand_ZeroOne() * 40.0f) + this->actor.world.pos.y + 5.0f;
- pos.z = (Math_CosS(phi_s0) * temp_f20) + this->actor.world.pos.z;
-
- temp_f20 = (Rand_ZeroOne() * 5.0f) + 2.0f;
- velocity.x = Math_SinS(phi_s0) * temp_f20;
- temp_f22 = Rand_ZeroOne();
- velocity.y = (Rand_ZeroOne() * i * 2.5f) + (temp_f22 * 5.0f);
- velocity.z = Math_CosS(phi_s0) * temp_f20;
-
- if (i == 0) {
- phi_v0 = 41;
- gravity = -450;
- } else if (i < 4) {
- phi_v0 = 37;
- gravity = -380;
- } else {
- phi_v0 = 69;
- gravity = -320;
- }
- EffectSsKakera_Spawn(play, &pos, &velocity, &this->actor.world.pos, gravity, phi_v0, 30, 5, 0,
- sEffectScales[i]/5, 3, 0, 70, 1, OBJECT_GAMEPLAY_FIELD_KEEP, gSilverRockFragmentsDL);
- }
+ EffectSsIcePiece_SpawnBurst(play, &this->actor.world.pos, this->actor.scale.x / 10);
} else {
EffectSsHahen_SpawnBurst(play, &pos, 6.0f, 0, 1, 2, 15, 7, 10, gOctorokProjectileDL);
}
- SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EN_OCTAROCK_ROCK);
+ SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_PL_ICE_BROKEN);
Actor_Kill(&this->actor);
}
} else if (this->timer == -300) {
@@ -763,17 +738,19 @@ void EnOkuta_Draw(Actor* thisx, PlayState* play) {
} else {
OPEN_DISPS(play->state.gfxCtx);
- if (CVarGetInteger(CVAR_ENHANCEMENT("NewDrops"), 0) != 0) {
+ if ((CVarGetInteger(CVAR_ENHANCEMENT("NewDrops"), 0) != 0) || CVarGetInteger("gLetItSnow", 0)) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x08,
- Gfx_TwoTexScroll(play->state.gfxCtx, 0, 1 * (play->state.frames * 6),
- 1 * (play->state.frames * 6), 32, 32, 1, 1 * (play->state.frames * 6),
- 1 * (play->state.frames * 6), 32, 32));
- Matrix_Scale(7.0f,7.0f,7.0f,MTXMODE_APPLY);
- Matrix_RotateX(thisx->home.rot.z * (M_PI / 0x8000), MTXMODE_APPLY);
- gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
- G_MTX_MODELVIEW | G_MTX_LOAD);
- gSPDisplayList(POLY_OPA_DISP++, gSilverRockDL);
+ f32 scale = 12.0f;
+
+ gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, (0 - 1) % 128, 32, 32, 1, 0, (1 * -2) % 128, 32, 32));
+
+ Matrix_RotateX(thisx->home.rot.z * 9.58738e-05f, MTXMODE_APPLY);
+ Matrix_Translate(0.0f, -445.946f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 50, 100, 255);
+ gSPDisplayList(POLY_OPA_DISP++, gEffIceFragment3DL);
} else {
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
Matrix_RotateZ(this->actor.home.rot.z * (M_PI / 0x8000), MTXMODE_APPLY);
diff --git a/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
index 5049a05d6..809052d9b 100644
--- a/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
+++ b/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
@@ -16,6 +16,7 @@
#include "soh/Enhancements/randomizer/randomizer_entrance.h"
#include "soh/Enhancements/cosmetics/cosmeticsTypes.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#include
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED)
@@ -2415,6 +2416,69 @@ void EnOssan_DrawStickDirectionPrompts(PlayState* play, EnOssan* this) {
CLOSE_DISPS(play->state.gfxCtx);
}
+s32 EnOssan_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
+ EnOssan* this = (EnOssan*)thisx;
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 8) {
+ switch(this->actor.params) {
+ case 4: {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(-11071, -443, -3986, MTXMODE_APPLY);
+ Matrix_Translate(878.378f, 351.351f, 540.541f, MTXMODE_APPLY);
+ Matrix_Scale(1.352f, 1.352f, 1.352f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ break;
+ }
+ case 1:
+ case 3: {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(-6643, 1992, -1772, MTXMODE_APPLY);
+ Matrix_Translate(918.919f, 121.622f, 256.757f, MTXMODE_APPLY);
+ Matrix_Scale(0.73f, 0.73f, 0.73f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 255, 0, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ break;
+ }
+ case 2: {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(-16163, 0, 2878, MTXMODE_APPLY);
+ Matrix_Translate(905.406f, 0.0f, -27.027f, MTXMODE_APPLY);
+ Matrix_Scale(1.318f, 1.318f, 1.318f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ break;
+ }
+ default: {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(-11071, -443, -3986, MTXMODE_APPLY);
+ Matrix_Translate(878.378f, 351.351f, 540.541f, MTXMODE_APPLY);
+ Matrix_Scale(1.352f, 1.352f, 1.352f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ break;
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
void EnOssan_DrawBazaarShopkeeper(Actor* thisx, PlayState* play) {
static void* sBazaarShopkeeperEyeTextures[] = { gOssanEyeOpenTex, gOssanEyeHalfTex, gOssanEyeClosedTex };
EnOssan* this = (EnOssan*)thisx;
@@ -2424,7 +2488,7 @@ void EnOssan_DrawBazaarShopkeeper(Actor* thisx, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sBazaarShopkeeperEyeTextures[this->eyeTextureIdx]));
- SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnOssan_OverrideLimbDrawDefaultShopkeeper, NULL, this);
+ SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnOssan_OverrideLimbDrawDefaultShopkeeper, EnOssan_PostLimbDraw, this);
EnOssan_DrawCursor(play, this, this->cursorX, this->cursorY, this->cursorZ, this->drawCursor);
EnOssan_DrawStickDirectionPrompts(play, this);
@@ -2450,6 +2514,16 @@ s32 EnOssan_OverrideLimbDrawKokiriShopkeeper(PlayState* play, s32 limbIndex, Gfx
gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(sKokiriShopkeeperEyeTextures[this->eyeTextureIdx]));
}
+ if (limbIndex == 15) {
+ Matrix_Push();
+ Matrix_RotateZYX(14169, -2215, 0, MTXMODE_APPLY);
+ Matrix_Translate(1810.811f, -351.351f, -94.595f, MTXMODE_APPLY);
+ Matrix_Scale(1.068f, 1.068f, 1.068f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ }
+
CLOSE_DISPS(play->state.gfxCtx);
return 0;
@@ -2478,8 +2552,8 @@ void EnOssan_DrawKokiriShopkeeper(Actor* thisx, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
- gSPSegment(POLY_OPA_DISP++, 0x08, EnOssan_SetEnvColor(play->state.gfxCtx, 0, 130, 70, 255));
- gSPSegment(POLY_OPA_DISP++, 0x09, EnOssan_SetEnvColor(play->state.gfxCtx, 110, 170, 20, 255));
+ gSPSegment(POLY_OPA_DISP++, 0x08, EnOssan_SetEnvColor(play->state.gfxCtx, 255, 0, 0, 255));
+ gSPSegment(POLY_OPA_DISP++, 0x09, EnOssan_SetEnvColor(play->state.gfxCtx, 255, 0, 0, 255));
gSPSegment(POLY_OPA_DISP++, 0x0C, EnOssan_EndDList(play->state.gfxCtx));
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnOssan_OverrideLimbDrawKokiriShopkeeper, NULL, this);
@@ -2554,7 +2628,7 @@ void EnOssan_DrawPotionShopkeeper(Actor* thisx, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sPotionShopkeeperEyeTextures[this->eyeTextureIdx]));
- SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, NULL, this);
+ SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, EnOssan_PostLimbDraw, this);
EnOssan_DrawCursor(play, this, this->cursorX, this->cursorY, this->cursorZ, this->drawCursor);
EnOssan_DrawStickDirectionPrompts(play, this);
@@ -2590,7 +2664,7 @@ void EnOssan_DrawBombchuShopkeeper(Actor* thisx, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sBombchuShopkeeperEyeTextures[this->eyeTextureIdx]));
- SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, NULL, this);
+ SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, EnOssan_PostLimbDraw, this);
EnOssan_DrawCursor(play, this, this->cursorX, this->cursorY, this->cursorZ, this->drawCursor);
EnOssan_DrawStickDirectionPrompts(play, this);
diff --git a/soh/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c b/soh/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c
index 8489b1032..ba6a1e85c 100644
--- a/soh/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c
+++ b/soh/src/overlays/actors/ovl_En_Po_Relay/z_en_po_relay.c
@@ -7,6 +7,7 @@
#include "z_en_po_relay.h"
#include "overlays/actors/ovl_En_Honotrap/z_en_honotrap.h"
#include "objects/object_tk/object_tk.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_IGNORE_QUAKE | ACTOR_FLAG_WILL_TALK)
@@ -425,6 +426,20 @@ void EnPoRelay_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
gSPDisplayList(POLY_OPA_DISP++, gDampeHaloDL);
CLOSE_DISPS(play->state.gfxCtx);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 16) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(10627, 3321, -13727, MTXMODE_APPLY);
+ Matrix_Translate(418.919f, 40.54f, -256.757f, MTXMODE_APPLY);
+ Matrix_Scale(1.068f, 1.068f, 1.068f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnPoRelay_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_En_Shopnuts/z_en_shopnuts.c b/soh/src/overlays/actors/ovl_En_Shopnuts/z_en_shopnuts.c
index c6aa6d56a..62558ee25 100644
--- a/soh/src/overlays/actors/ovl_En_Shopnuts/z_en_shopnuts.c
+++ b/soh/src/overlays/actors/ovl_En_Shopnuts/z_en_shopnuts.c
@@ -1,6 +1,7 @@
#include "z_en_shopnuts.h"
#include "objects/object_shopnuts/object_shopnuts.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE)
@@ -302,6 +303,20 @@ void EnShopnuts_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
gSPDisplayList(POLY_OPA_DISP++, gBusinessScrubNoseDL);
CLOSE_DISPS(play->state.gfxCtx);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 17) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, 17490, MTXMODE_APPLY);
+ Matrix_Translate(4200.0f, -472.973f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(4.932f, 4.932f, 4.932f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnShopnuts_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_En_Skb/z_en_skb.c b/soh/src/overlays/actors/ovl_En_Skb/z_en_skb.c
index e985fe862..fcde867db 100644
--- a/soh/src/overlays/actors/ovl_En_Skb/z_en_skb.c
+++ b/soh/src/overlays/actors/ovl_En_Skb/z_en_skb.c
@@ -2,6 +2,7 @@
#include "overlays/actors/ovl_En_Encount1/z_en_encount1.h"
#include "objects/object_skb/object_skb.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED)
@@ -551,6 +552,21 @@ void EnSkb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
} else if ((this->unk_283 ^ (this->unk_283 | 4)) == 0) {
BodyBreak_SetInfo(&this->bodyBreak, limbIndex, 0, 18, 18, dList, BODYBREAK_OBJECT_DEFAULT);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 11) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, -2215, MTXMODE_APPLY);
+ Matrix_Translate(1324.324f, 662.162f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 0, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnSkb_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_En_Snowball/z_en_snowball.c b/soh/src/overlays/actors/ovl_En_Snowball/z_en_snowball.c
new file mode 100644
index 000000000..a6c07a245
--- /dev/null
+++ b/soh/src/overlays/actors/ovl_En_Snowball/z_en_snowball.c
@@ -0,0 +1,229 @@
+/*
+ * File: z_en_snowball.c
+ * Overlay: ovl_En_Snowball
+ * Description: Rollable Snowball
+ */
+
+#include "z_en_snowball.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
+#include "objects/object_goroiwa/object_goroiwa.h"
+#include "soh_assets.h"
+
+#define FLAGS ACTOR_FLAG_UPDATE_WHILE_CULLED
+
+void EnSnowball_Init(Actor* thisx, PlayState* play);
+void EnSnowball_Destroy(Actor* thisx, PlayState* play);
+void EnSnowball_Update(Actor* thisx, PlayState* play);
+void EnSnowball_Draw(Actor* thisx, PlayState* play);
+
+static ColliderJntSphElementInit sJntSphElementsInit[] = {
+ {
+ {
+ ELEMTYPE_UNK0,
+ { 0x20000000, 0x00, 0x04 },
+ { 0x00000000, 0x00, 0x00 },
+ TOUCH_ON | TOUCH_SFX_NORMAL,
+ BUMP_NONE,
+ OCELEM_ON,
+ },
+ { 0, { { 0, 0, 0 }, 14 }, 100 },
+ },
+};
+
+static ColliderJntSphInit sJntSphInit = {
+ {
+ COLTYPE_NONE,
+ AT_ON | AT_TYPE_ENEMY,
+ AC_NONE,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_2,
+ COLSHAPE_JNTSPH,
+ },
+ 1,
+ sJntSphElementsInit,
+};
+
+static CollisionCheckInfoInit sColChkInfoInit = { 0, 3, 15, MASS_HEAVY };
+
+void EnSnowball_UpdateCollider(EnSnowball* this) {
+ Sphere16* worldSphere = &this->collider.elements[0].dim.worldSphere;
+
+ worldSphere->center.x = this->actor.world.pos.x;
+ worldSphere->center.y = this->actor.world.pos.y + (this->actor.scale.x * 500.0f);
+ worldSphere->center.z = this->actor.world.pos.z;
+ worldSphere->radius = (this->actor.scale.x * 500.0f);
+}
+
+void EnSnowball_InitCollider(EnSnowball* this, PlayState* play) {
+ Collider_InitJntSph(play, &this->collider);
+ Collider_SetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderItems);
+ EnSnowball_UpdateCollider(this);
+ this->collider.elements[0].dim.worldSphere.radius = (this->actor.scale.x * 500.0f);
+}
+
+static InitChainEntry sInitChain[] = {
+ ICHAIN_F32_DIV1000(gravity, -860, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(minVelocityY, -15000, ICHAIN_CONTINUE),
+ ICHAIN_VEC3F_DIV1000(scale, 5, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 1500, ICHAIN_CONTINUE),
+ ICHAIN_F32(uncullZoneScale, 150, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 1500, ICHAIN_STOP),
+};
+
+void EnSnowball_Init(Actor* thisx, PlayState* play) {
+ EnSnowball* this = (EnSnowball*)thisx;
+
+ Actor_ProcessInitChain(&this->actor, sInitChain);
+ EnSnowball_InitCollider(this, play);
+ CollisionCheck_SetInfo(&this->actor.colChkInfo, NULL, &sColChkInfoInit);
+ ActorShape_Init(&this->actor.shape, 595.0f, ActorShadow_DrawCircle, 9.4f);
+ this->actor.shape.shadowAlpha = 200;
+
+ if (thisx->params == 1) {
+ this->actor.speedXZ += 5.0f;
+ this->actor.world.rot.y = Rand_ZeroFloat(65536.0f);
+ }
+}
+
+void EnSnowball_Destroy(Actor* thisx, PlayState* play) {
+ EnSnowball* this = (EnSnowball*)thisx;
+
+ Collider_DestroyJntSph(play, &this->collider);
+}
+
+void EnSnowball_Update(Actor* thisx, PlayState* play) {
+ EnSnowball* this = (EnSnowball*)thisx;
+ Actor* player = GET_PLAYER(play);
+
+ // Kill the actor if it falls too far
+ if (thisx->world.pos.y < -10000.0f) {
+ Actor_Kill(thisx);
+ return;
+ }
+
+ u8 meanBoulder = thisx->params == 1 && this->actor.scale.x > 0.1f;
+
+ // Check if the player is close enough to start rolling
+ if (this->actor.xzDistToPlayer < MAX(20.0f, this->actor.scale.x * 600.0f) && !meanBoulder) {
+ /// Flip the actor's rotation away from the player
+ thisx->world.rot.y = thisx->yawTowardsPlayer + 0x8000;
+ this->actor.speedXZ = MAX(5.0f, this->actor.speedXZ);
+ }
+
+ if (this->collider.base.atFlags & AT_HIT) {
+ this->collider.base.atFlags &= ~AT_HIT;
+ // Flip the actor's rotation away from the player
+ thisx->world.rot.y = thisx->yawTowardsPlayer + 0x8000;
+
+ func_8002F6D4(play, &this->actor, 2.0f, this->actor.yawTowardsPlayer, 0.0f, 0);
+ Player_PlaySfx(&GET_PLAYER(play)->actor, NA_SE_PL_BODY_HIT);
+ }
+
+ // Slow down the actor and increase it's scale
+ if (this->actor.speedXZ > 0.0f) {
+ CollisionPoly snowballPoly;
+ u8 goingUp = this->actor.world.pos.y - this->prevY > 0.001f;
+ u8 goingDown = this->actor.world.pos.y - this->prevY < -0.001f;
+
+ // friction
+ if (thisx->params != 1) {
+ this->actor.speedXZ -= 0.1f;
+ }
+
+ if (goingDown) {
+ // Increase the speed if going down hill
+ f32 speed = (this->prevY - this->actor.world.pos.y) * 0.15f;
+ this->actor.speedXZ += MIN(speed, 0.5f);
+ } else if (goingUp) {
+ // Reduce the speed if going up hill
+ this->actor.speedXZ -= (this->actor.world.pos.y - this->prevY) * 0.1f;
+ }
+
+ if (goingUp || goingDown) {
+ // Check if going straight, one degree right, or one degree left will result in steeper slope
+ // Check straight
+ Vec3f snowballPos = this->actor.world.pos;
+ snowballPos.y += 100.0f;
+ snowballPos.x += Math_SinS(this->actor.world.rot.y) * 1.0f;
+ snowballPos.z += Math_CosS(this->actor.world.rot.y) * 1.0f;
+ float straightSlope = BgCheck_AnyRaycastFloor1(&gPlayState->colCtx, &snowballPoly, &snowballPos);
+
+ // Check one degree right
+ snowballPos = this->actor.world.pos;
+ snowballPos.y += 100.0f;
+ snowballPos.x += Math_SinS(this->actor.world.rot.y + 0x100) * 1.0f;
+ snowballPos.z += Math_CosS(this->actor.world.rot.y + 0x100) * 1.0f;
+ float rightSlope = BgCheck_AnyRaycastFloor1(&gPlayState->colCtx, &snowballPoly, &snowballPos);
+
+ // Check one degree left
+ snowballPos = this->actor.world.pos;
+ snowballPos.y += 100.0f;
+ snowballPos.x += Math_SinS(this->actor.world.rot.y - 0x100) * 1.0f;
+ snowballPos.z += Math_CosS(this->actor.world.rot.y - 0x100) * 1.0f;
+ float leftSlope = BgCheck_AnyRaycastFloor1(&gPlayState->colCtx, &snowballPoly, &snowballPos);
+
+ if (straightSlope > rightSlope || straightSlope > leftSlope) {
+ if (rightSlope < leftSlope) {
+ this->actor.world.rot.y += 0x100;
+ } else {
+ this->actor.world.rot.y -= 0x100;
+ }
+ }
+ }
+
+ // Check if the actor is colliding with a wall and bounce off
+ if (thisx->bgCheckFlags & 8) {
+ if (ABS((s16)(thisx->wallYaw - thisx->world.rot.y)) > 0x4000) {
+ thisx->world.rot.y = ((thisx->wallYaw - thisx->world.rot.y) + thisx->wallYaw) - 0x8000;
+ }
+ if (thisx->params != 1) {
+ thisx->speedXZ *= 0.7f;
+ }
+ thisx->bgCheckFlags &= ~8;
+ if (this->actor.speedXZ > 5.0f) {
+ Audio_PlayActorSound2(thisx, NA_SE_EV_BOMB_BOUND);
+ }
+ }
+
+ Actor_SetScale(&this->actor, MIN(0.15f, this->actor.scale.x + (this->actor.speedXZ * 0.00001f)));
+ }
+
+ if (this->actor.speedXZ < 0.0f) {
+ this->actor.speedXZ = 0.0f;
+ }
+
+ // Based on speed and scale, rotate the snowball
+ // The larger the snowball, the slower it rotates
+ this->sRot += (this->actor.speedXZ * 15.0f) / this->actor.scale.x;
+
+ // record the actor's position
+ this->prevY = this->actor.world.pos.y;
+
+ // Process movement (moves foward based on speed and rotation)
+ Actor_MoveForward(thisx);
+
+ // Prevent actor from going through the ground or walls
+ Actor_UpdateBgCheckInfo(play, &this->actor, MAX(10.0f, this->actor.scale.x * 250.0f), MAX(10.0f, this->actor.scale.x * 500.0f), 0.0f, 0xFF);
+
+ EnSnowball_UpdateCollider(this);
+ // Add collision checks if the actor is a mean boulder
+ if (meanBoulder) {
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
+ }
+}
+
+void EnSnowball_Draw(Actor* thisx, PlayState* play) {
+ EnSnowball* this = (EnSnowball*)thisx;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Gfx_SetupDL_25Opa(play->state.gfxCtx);
+
+ Matrix_RotateZYX(this->sRot, thisx->world.rot.y, 0, MTXMODE_APPLY);
+
+ Matrix_Translate(0.0f, 7600.0f, -148.649f, MTXMODE_APPLY);
+ Matrix_Scale(4.844f, 4.844f, 4.844f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gSPDisplayList(POLY_OPA_DISP++, gLinkAdultPompomDL);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
diff --git a/soh/src/overlays/actors/ovl_En_Snowball/z_en_snowball.h b/soh/src/overlays/actors/ovl_En_Snowball/z_en_snowball.h
new file mode 100644
index 000000000..fa8c0779c
--- /dev/null
+++ b/soh/src/overlays/actors/ovl_En_Snowball/z_en_snowball.h
@@ -0,0 +1,31 @@
+#ifndef Z_EN_SNOWBALL_H
+#define Z_EN_SNOWBALL_H
+
+#include
+#include "global.h"
+
+struct EnSnowball;
+
+typedef void (*EnSnowballActionFunc)(struct EnSnowball*, PlayState*);
+
+typedef struct EnSnowball {
+ Actor actor;
+
+ ColliderJntSph collider;
+ ColliderJntSphElement colliderItems[1];
+ s16 sRot;
+ f32 prevY;
+} EnSnowball;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+void EnSnowball_Init(Actor* thisx, PlayState* play);
+void EnSnowball_Destroy(Actor* thisx, PlayState* play);
+void EnSnowball_Update(Actor* thisx, PlayState* play);
+void EnSnowball_Draw(Actor* thisx, PlayState* play);
+#ifdef __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file
diff --git a/soh/src/overlays/actors/ovl_En_Sth/z_en_sth.c b/soh/src/overlays/actors/ovl_En_Sth/z_en_sth.c
index c55af5cd4..1d946fbf0 100644
--- a/soh/src/overlays/actors/ovl_En_Sth/z_en_sth.c
+++ b/soh/src/overlays/actors/ovl_En_Sth/z_en_sth.c
@@ -10,6 +10,7 @@
#include "objects/object_boj/object_boj.h"
#include
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED)
@@ -399,6 +400,21 @@ void EnSth_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
CLOSE_DISPS(play->state.gfxCtx);
}
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 15) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(-4207, -665, -4650, MTXMODE_APPLY);
+ Matrix_Translate(932.432f, 162.163f, 81.082f, MTXMODE_APPLY);
+ Matrix_Scale(0.73f, 0.73f, 0.73f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 0, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
Gfx* EnSth_AllocColorDList(GraphicsContext* play, u8 envR, u8 envG, u8 envB, u8 envA) {
diff --git a/soh/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c b/soh/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
index dcaaa897b..30b13c8ea 100644
--- a/soh/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
+++ b/soh/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
@@ -5,6 +5,7 @@
#include "soh/Enhancements/randomizer/randomizer_entrance.h"
#include "soh/Enhancements/custom-message/CustomMessageTypes.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_NO_LOCKON)
@@ -512,12 +513,33 @@ s32 EnSyatekiMan_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, V
return 0;
}
+s32 EnSyatekiMan_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
+ EnSyatekiMan* this = (EnSyatekiMan*)thisx;
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 8) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(2214, 3985, -7750, MTXMODE_APPLY);
+ Matrix_Translate(1094.594f, 1162.162f, -40.541f, MTXMODE_APPLY);
+ Matrix_Scale(0.864f, 0.864f, 0.864f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 255, 0, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
+
+ return false;
+}
+
void EnSyatekiMan_Draw(Actor* thisx, PlayState* play) {
s32 pad;
EnSyatekiMan* this = (EnSyatekiMan*)thisx;
Gfx_SetupDL_25Opa(play->state.gfxCtx);
- SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnSyatekiMan_OverrideLimbDraw, NULL, this);
+ SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnSyatekiMan_OverrideLimbDraw, EnSyatekiMan_PostLimbDraw, this);
}
void EnSyatekiMan_SetBgm(void) {
diff --git a/soh/src/overlays/actors/ovl_En_Ta/z_en_ta.c b/soh/src/overlays/actors/ovl_En_Ta/z_en_ta.c
index 6a4676fdd..fc1964c32 100644
--- a/soh/src/overlays/actors/ovl_En_Ta/z_en_ta.c
+++ b/soh/src/overlays/actors/ovl_En_Ta/z_en_ta.c
@@ -8,6 +8,7 @@
#include "vt.h"
#include "objects/object_ta/object_ta.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
@@ -1213,6 +1214,20 @@ void EnTa_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
if (limbIndex == 15) {
Matrix_MultVec3f(&D_80B16E7C, &this->actor.focus.pos);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 15) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(11955, -1993, 221, MTXMODE_APPLY);
+ Matrix_Translate(1081.081f, -108.108f, -270.270f, MTXMODE_APPLY);
+ Matrix_Scale(1.554f, 1.554f, 1.554f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnTa_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_En_Test/z_en_test.c b/soh/src/overlays/actors/ovl_En_Test/z_en_test.c
index 75c4f6c6a..5b2821c3f 100644
--- a/soh/src/overlays/actors/ovl_En_Test/z_en_test.c
+++ b/soh/src/overlays/actors/ovl_En_Test/z_en_test.c
@@ -7,6 +7,7 @@
#include "z_en_test.h"
#include "objects/object_sk2/object_sk2.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED)
@@ -1949,6 +1950,20 @@ void EnTest_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
this->bodyPartsPos[bodyPart].z = sp50.z;
}
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 11) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(-10849, 0, -5314, MTXMODE_APPLY);
+ Matrix_Translate(513.514f, 283.784f, 554.054f, MTXMODE_APPLY);
+ Matrix_Scale(1.203f, 1.203f, 1.203f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnTest_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_En_Tg/z_en_tg.c b/soh/src/overlays/actors/ovl_En_Tg/z_en_tg.c
index 247db92f3..12f7fa189 100644
--- a/soh/src/overlays/actors/ovl_En_Tg/z_en_tg.c
+++ b/soh/src/overlays/actors/ovl_En_Tg/z_en_tg.c
@@ -6,6 +6,7 @@
#include "z_en_tg.h"
#include "objects/object_mu/object_mu.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
@@ -168,6 +169,34 @@ void EnTg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
// Place the target point at the guy's head instead of the center of the actor
Matrix_MultVec3f(&targetOffset, &this->actor.focus.pos);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 20) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(-2657, -1550, 1549, MTXMODE_APPLY);
+ Matrix_Translate(594.594f, -135.135f, -54.054f, MTXMODE_APPLY);
+ Matrix_Scale(0.966f, 0.966f, 0.966f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+
+ if (limbIndex == 9) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(-3100, 1992, 2435, MTXMODE_APPLY);
+ Matrix_Translate(864.865f, -121.622f, 175.676f, MTXMODE_APPLY);
+ Matrix_Scale(0.865f, 0.865f, 0.865f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
Gfx* EnTg_SetColor(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b, u8 a) {
diff --git a/soh/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/soh/src/overlays/actors/ovl_En_Tk/z_en_tk.c
index 68979daca..ef1cbe985 100644
--- a/soh/src/overlays/actors/ovl_En_Tk/z_en_tk.c
+++ b/soh/src/overlays/actors/ovl_En_Tk/z_en_tk.c
@@ -9,6 +9,7 @@
#include "objects/object_tk/object_tk.h"
#include "soh/frame_interpolation.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
@@ -722,6 +723,20 @@ void EnTk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
Matrix_MultVec3f(&sp28, &this->v3f_304);
func_80B1D200(play);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 16) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(10627, 3321, -13727, MTXMODE_APPLY);
+ Matrix_Translate(418.919f, 40.54f, -256.757f, MTXMODE_APPLY);
+ Matrix_Scale(1.068f, 1.068f, 1.068f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnTk_Draw(Actor* thisx, PlayState* play) {
diff --git a/soh/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c b/soh/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c
index 594d72bca..87c249313 100644
--- a/soh/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c
+++ b/soh/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c
@@ -7,6 +7,7 @@
#include "z_en_toryo.h"
#include "objects/object_toryo/object_toryo.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
@@ -105,6 +106,11 @@ void EnToryo_Init(Actor* thisx, PlayState* play) {
break;
case SCENE_KAKARIKO_VILLAGE:
if ((LINK_AGE_IN_YEARS == YEARS_CHILD) && IS_DAY) {
+ this->actor.world.pos.x = 756.0;
+ this->actor.world.pos.y = 80.0;
+ this->actor.world.pos.z = 1378.0;
+ this->actor.shape.rot.y = 32534;
+
this->stateFlags |= 2;
}
break;
@@ -415,4 +421,18 @@ void EnToryo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro
Matrix_MultVec3f(&sMultVec, &this->actor.focus.pos);
break;
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 15) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(-23691, 664, -2879, MTXMODE_APPLY);
+ Matrix_Translate(810.811f, -243.243f, 270.27f, MTXMODE_APPLY);
+ Matrix_Scale(1.216f, 1.216f, 1.216f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
diff --git a/soh/src/overlays/actors/ovl_En_Vm/z_en_vm.c b/soh/src/overlays/actors/ovl_En_Vm/z_en_vm.c
index ba0a75613..bff8380cd 100644
--- a/soh/src/overlays/actors/ovl_En_Vm/z_en_vm.c
+++ b/soh/src/overlays/actors/ovl_En_Vm/z_en_vm.c
@@ -9,6 +9,7 @@
#include "overlays/actors/ovl_En_Bom/z_en_bom.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UPDATE_WHILE_CULLED)
@@ -517,6 +518,20 @@ void EnVm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
&this->colliderQuad2.dim.quad[1], &this->colliderQuad2.dim.quad[2],
&this->colliderQuad2.dim.quad[3]);
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 6) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(19704, -1329, 11734, MTXMODE_APPLY);
+ Matrix_Translate(310.811f, -108.108f, -81.081f, MTXMODE_APPLY);
+ Matrix_Scale(2.297f, 2.297f, 2.297f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
void EnVm_Draw(Actor* thisx, PlayState* play2) {
diff --git a/soh/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/soh/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
index f8b1cfd10..d57a1833b 100644
--- a/soh/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
+++ b/soh/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
@@ -134,6 +134,10 @@ u8 WeatherTag_CheckEnableWeatherEffect(EnWeatherTag* this, PlayState* play, u8 a
u8 ret = false;
Player* player = GET_PLAYER(play);
+ if (LINK_IS_ADULT && gPlayState != NULL && gPlayState->sceneNum == SCENE_KAKARIKO_VILLAGE) {
+ return ret;
+ }
+
if (Actor_WorldDistXZToActor(&player->actor, &this->actor) < WEATHER_TAG_RANGE100(this->actor.params)) {
if ((play->envCtx.indoors != 0) || !gSkyboxBlendingEnabled ||
(play->skyboxId != SKYBOX_NORMAL_SKY && play->envCtx.unk_1F == play->envCtx.unk_20)) {
diff --git a/soh/src/overlays/actors/ovl_En_Wf/z_en_wf.c b/soh/src/overlays/actors/ovl_En_Wf/z_en_wf.c
index 2c243e254..c9ffb6f8a 100644
--- a/soh/src/overlays/actors/ovl_En_Wf/z_en_wf.c
+++ b/soh/src/overlays/actors/ovl_En_Wf/z_en_wf.c
@@ -9,6 +9,7 @@
#include "overlays/actors/ovl_En_Encount1/z_en_encount1.h"
#include "objects/object_wf/object_wf.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED)
@@ -1426,6 +1427,21 @@ void EnWf_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
this->bodyPartsPos[bodyPartIndex].z = bodyPartPos.z;
}
}
+
+ if (CVarGetInteger("gLetItSnow", 0)) {
+ if (limbIndex == 17) {
+ OPEN_DISPS(play->state.gfxCtx);
+ Matrix_Push();
+ Matrix_RotateZYX(0, 0, -18377, MTXMODE_APPLY);
+ Matrix_Translate(729.73f, 1243.243f, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.743f, 0.743f, 0.743f, MTXMODE_APPLY);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 0, 255);
+ gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL);
+ Matrix_Pop();
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
}
static void* sWolfosNormalEyeTextures[] = { gWolfosNormalEyeOpenTex, gWolfosNormalEyeHalfTex, gWolfosNormalEyeNarrowTex,
diff --git a/soh/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c b/soh/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c
index eb6a77e24..ff2d6c3b5 100644
--- a/soh/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c
+++ b/soh/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c
@@ -179,6 +179,16 @@ void EnWood02_Init(Actor* thisx, PlayState* play2) {
f32 floorY;
s16 extraRot;
+ if (gPlayState->sceneNum == SCENE_KAKARIKO_VILLAGE && this->actor.params <= WOOD_TREE_KAKARIKO_ADULT) {
+ Actor_Kill(this);
+ }
+
+ if (gPlayState->sceneNum == SCENE_KAKARIKO_VILLAGE && this->actor.params >= 0) {
+ this->actor.world.pos.x = 754.051;
+ this->actor.world.pos.y = 80.0;
+ this->actor.world.pos.z = 1429.908;
+ }
+
// The tree in Kakariko's day scene does not have the same params to spawn the GS
// as the night scene, For the always spawn GS enhancement we apply the needed
// params to have the GS drop when bonking
@@ -452,14 +462,14 @@ void EnWood02_Draw(Actor* thisx, PlayState* play) {
if ((type == WOOD_TREE_OVAL_GREEN_SPAWNER) || (type == WOOD_TREE_OVAL_GREEN_SPAWNED) ||
(type == WOOD_TREE_OVAL_GREEN) || (type == WOOD_LEAF_GREEN)) {
- red = 50;
- green = 170;
- blue = 70;
+ red = 255;
+ green = 255;
+ blue = 255;
} else if ((type == WOOD_TREE_OVAL_YELLOW_SPAWNER) || (type == WOOD_TREE_OVAL_YELLOW_SPAWNED) ||
(type == WOOD_LEAF_YELLOW)) {
- red = 180;
- green = 155;
- blue = 0;
+ red = 255;
+ green = 255;
+ blue = 255;
} else {
red = green = blue = 255;
}
diff --git a/soh/src/overlays/actors/ovl_En_Zf/z_en_zf.c b/soh/src/overlays/actors/ovl_En_Zf/z_en_zf.c
index 4ecf2afee..562f22a4e 100644
--- a/soh/src/overlays/actors/ovl_En_Zf/z_en_zf.c
+++ b/soh/src/overlays/actors/ovl_En_Zf/z_en_zf.c
@@ -7,6 +7,7 @@
#include "z_en_zf.h"
#include "objects/object_zf/object_zf.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED)
diff --git a/soh/src/overlays/actors/ovl_End_Title/z_end_title.c b/soh/src/overlays/actors/ovl_End_Title/z_end_title.c
index af13255a8..ec49dd058 100644
--- a/soh/src/overlays/actors/ovl_End_Title/z_end_title.c
+++ b/soh/src/overlays/actors/ovl_End_Title/z_end_title.c
@@ -72,46 +72,78 @@ void EndTitle_DrawFull(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
+ uint8_t isKak = play->sceneNum == SCENE_KAKARIKO_VILLAGE;
+
// Draw title cards on the screen
- if ((frameCount > 890) && (this->endAlpha < 200)) {
+ if ((frameCount > 890 || isKak) && (this->endAlpha < 200)) {
this->endAlpha += 7;
}
- if ((frameCount > 810) && (this->tlozAlpha < 200)) {
+ if ((frameCount > 810 || isKak) && (this->tlozAlpha < 200)) {
this->tlozAlpha += 15;
}
- if ((frameCount > 850) && (this->ootAlpha < 200)) {
+ if ((frameCount > 850 || isKak) && (this->ootAlpha < 200)) {
this->ootAlpha += 15;
}
-
+
OVERLAY_DISP = Gfx_SetupDL_64(OVERLAY_DISP);
- if (D_801614B0.a > 0)
+
+ if (this->actor.params == 2) {
gSPGrayscale(OVERLAY_DISP++, false);
- gDPSetTextureLUT(OVERLAY_DISP++, G_TT_NONE);
- gDPSetEnvColor(OVERLAY_DISP++, 255, 120, 30, 0);
- gDPSetRenderMode(OVERLAY_DISP++, G_RM_PASS, G_RM_XLU_SURF2);
- gSPClearGeometryMode(OVERLAY_DISP++,
- G_TEXTURE_ENABLE | G_CULL_BACK | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR);
- gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0,
- COMBINED, 0, 0, 0, COMBINED);
- gDPSetPrimColor(OVERLAY_DISP++, 0x00, 0x80, 0, 0, 0, this->endAlpha);
- gDPLoadTextureTile(OVERLAY_DISP++, sTheEndTex, G_IM_FMT_IA, G_IM_SIZ_8b, 80, 24, 0, 0, 80 - 1, 24 - 1, 0,
- G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 0, 0, 0, 0);
- gSPTextureRectangle(OVERLAY_DISP++, 120 << 2, 90 << 2, 200 << 2, 113 << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
- gDPPipeSync(OVERLAY_DISP++);
- gDPSetPrimColor(OVERLAY_DISP++, 0x00, 0x80, 0, 0, 0, this->tlozAlpha);
- gDPLoadTextureTile(OVERLAY_DISP++, sTheLegendOfZeldaTex, G_IM_FMT_IA, G_IM_SIZ_8b, 120, 24, 0, 0, 120 - 1, 24 - 1, 0,
- G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 0, 0, 0, 0);
- gSPTextureRectangle(OVERLAY_DISP++, 100 << 2, 160 << 2, 220 << 2, 183 << 2, G_TX_RENDERTILE, 0, 0, 1 << 10,
- 1 << 10);
- gDPPipeSync(OVERLAY_DISP++);
- gDPSetPrimColor(OVERLAY_DISP++, 0x00, 0x80, 0, 0, 0, this->ootAlpha);
- gDPLoadTextureTile(OVERLAY_DISP++, sOcarinaOfTimeTex, G_IM_FMT_IA, G_IM_SIZ_8b, 112, 16, 0,
- 0, 112 - 1, 16 - 1, 0,
- G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 0, 0, 0, 0);
- gSPTextureRectangle(OVERLAY_DISP++, 104 << 2, 177 << 2, 216 << 2, 192 << 2, G_TX_RENDERTILE, 0, 0, 1 << 10,
- 1 << 10);
- if (D_801614B0.a > 0)
- gSPGrayscale(OVERLAY_DISP++, true);
+ gDPSetTextureLUT(OVERLAY_DISP++, G_TT_NONE);
+ gDPSetEnvColor(OVERLAY_DISP++, 0, 255, 0, 0);
+ gDPSetRenderMode(OVERLAY_DISP++, G_RM_PASS, G_RM_XLU_SURF2);
+ gSPClearGeometryMode(OVERLAY_DISP++, G_TEXTURE_ENABLE | G_CULL_BACK | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED);
+ gDPSetPrimColor(OVERLAY_DISP++, 0x00, 0x80, 0, 0, 0, this->endAlpha);
+ gDPLoadTextureTile(OVERLAY_DISP++, sTheEndTex, G_IM_FMT_IA, G_IM_SIZ_8b, 80, 24, 0, 0, 80 - 1, 24 - 1, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 0, 0, 0, 0);
+ gSPTextureRectangle(OVERLAY_DISP++, 120 << 2, 90 << 2, 200 << 2, 113 << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0x00, 0x80, 0, 0, 0, this->tlozAlpha);
+ gDPLoadTextureTile(OVERLAY_DISP++, sTheLegendOfZeldaTex, G_IM_FMT_IA, G_IM_SIZ_8b, 120, 24, 0, 0, 120 - 1, 24 - 1, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 0, 0, 0, 0);
+ gSPTextureRectangle(OVERLAY_DISP++, 100 << 2, 160 << 2, 220 << 2, 183 << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0x00, 0x80, 0, 0, 0, this->ootAlpha);
+ gDPLoadTextureTile(OVERLAY_DISP++, sOcarinaOfTimeTex, G_IM_FMT_IA, G_IM_SIZ_8b, 112, 16, 0, 0, 112 - 1, 16 - 1, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 0, 0, 0, 0);
+ gSPTextureRectangle(OVERLAY_DISP++, 104 << 2, 177 << 2, 216 << 2, 192 << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+
+ D_801614B0.a = 0;
+ //D_801614B0.r = 205;
+ //D_801614B0.g = 168;
+ //D_801614B0.b = 130;
+
+ //gSPGrayscale(OVERLAY_DISP++, true);
+ } else {
+ if (D_801614B0.a > 0)
+
+ gSPGrayscale(OVERLAY_DISP++, false);
+ gDPSetTextureLUT(OVERLAY_DISP++, G_TT_NONE);
+ gDPSetEnvColor(OVERLAY_DISP++, 255, 120, 30, 0);
+ gDPSetRenderMode(OVERLAY_DISP++, G_RM_PASS, G_RM_XLU_SURF2);
+ gSPClearGeometryMode(OVERLAY_DISP++, G_TEXTURE_ENABLE | G_CULL_BACK | G_FOG | G_LIGHTING | G_TEXTURE_GEN |
+ G_TEXTURE_GEN_LINEAR);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0,
+ COMBINED, 0, 0, 0, COMBINED);
+ gDPSetPrimColor(OVERLAY_DISP++, 0x00, 0x80, 0, 0, 0, this->endAlpha);
+ gDPLoadTextureTile(OVERLAY_DISP++, sTheEndTex, G_IM_FMT_IA, G_IM_SIZ_8b, 80, 24, 0, 0, 80 - 1, 24 - 1, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 0, 0, 0, 0);
+ gSPTextureRectangle(OVERLAY_DISP++, 120 << 2, 90 << 2, 200 << 2, 113 << 2, G_TX_RENDERTILE, 0, 0, 1 << 10,
+ 1 << 10);
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0x00, 0x80, 0, 0, 0, this->tlozAlpha);
+ gDPLoadTextureTile(OVERLAY_DISP++, sTheLegendOfZeldaTex, G_IM_FMT_IA, G_IM_SIZ_8b, 120, 24, 0, 0, 120 - 1,
+ 24 - 1, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 0, 0, 0, 0);
+ gSPTextureRectangle(OVERLAY_DISP++, 100 << 2, 160 << 2, 220 << 2, 183 << 2, G_TX_RENDERTILE, 0, 0, 1 << 10,
+ 1 << 10);
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0x00, 0x80, 0, 0, 0, this->ootAlpha);
+ gDPLoadTextureTile(OVERLAY_DISP++, sOcarinaOfTimeTex, G_IM_FMT_IA, G_IM_SIZ_8b, 112, 16, 0, 0, 112 - 1, 16 - 1,
+ 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 0, 0, 0, 0);
+ gSPTextureRectangle(OVERLAY_DISP++, 104 << 2, 177 << 2, 216 << 2, 192 << 2, G_TX_RENDERTILE, 0, 0, 1 << 10,
+ 1 << 10);
+ if (D_801614B0.a > 0)
+ gSPGrayscale(OVERLAY_DISP++, true);
+ }
+
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/soh/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c b/soh/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c
index 12d5c38cc..cceafe7ed 100644
--- a/soh/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c
+++ b/soh/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c
@@ -178,19 +178,19 @@ void EffectSsBomb2_Update(PlayState* play, u32 index, EffectSs* this) {
divisor = this->life - 13;
this->rPrimColorR = func_80027DD4(this->rPrimColorR, 255, divisor);
this->rPrimColorG = func_80027DD4(this->rPrimColorG, 255, divisor);
- this->rPrimColorB = func_80027DD4(this->rPrimColorB, 150, divisor);
+ this->rPrimColorB = func_80027DD4(this->rPrimColorB, 255, divisor);
this->rPrimColorA = func_80027DD4(this->rPrimColorA, 255, divisor);
- this->rEnvColorR = func_80027DD4(this->rEnvColorR, 150, divisor);
- this->rEnvColorG = func_80027DD4(this->rEnvColorG, 0, divisor);
- this->rEnvColorB = func_80027DD4(this->rEnvColorB, 0, divisor);
+ this->rEnvColorR = func_80027DD4(this->rEnvColorR, 255, divisor);
+ this->rEnvColorG = func_80027DD4(this->rEnvColorG, 255, divisor);
+ this->rEnvColorB = func_80027DD4(this->rEnvColorB, 255, divisor);
} else if ((this->life < 14) && (this->life > -1)) {
divisor = this->life + 1;
- this->rPrimColorR = func_80027DD4(this->rPrimColorR, 50, divisor);
- this->rPrimColorG = func_80027DD4(this->rPrimColorG, 50, divisor);
- this->rPrimColorB = func_80027DD4(this->rPrimColorB, 50, divisor);
- this->rPrimColorA = func_80027DD4(this->rPrimColorA, 150, divisor);
- this->rEnvColorR = func_80027DD4(this->rEnvColorR, 10, divisor);
- this->rEnvColorG = func_80027DD4(this->rEnvColorG, 10, divisor);
- this->rEnvColorB = func_80027DD4(this->rEnvColorB, 10, divisor);
+ this->rPrimColorR = func_80027DD4(this->rPrimColorR, 255, divisor);
+ this->rPrimColorG = func_80027DD4(this->rPrimColorG, 255, divisor);
+ this->rPrimColorB = func_80027DD4(this->rPrimColorB, 255, divisor);
+ this->rPrimColorA = func_80027DD4(this->rPrimColorA, 255, divisor);
+ this->rEnvColorR = func_80027DD4(this->rEnvColorR, 255, divisor);
+ this->rEnvColorG = func_80027DD4(this->rEnvColorG, 255, divisor);
+ this->rEnvColorB = func_80027DD4(this->rEnvColorB, 255, divisor);
}
}
diff --git a/soh/src/overlays/gamestates/ovl_title/z_title.c b/soh/src/overlays/gamestates/ovl_title/z_title.c
index 8893d9d5f..b2c003139 100644
--- a/soh/src/overlays/gamestates/ovl_title/z_title.c
+++ b/soh/src/overlays/gamestates/ovl_title/z_title.c
@@ -221,7 +221,7 @@ void Title_Draw(TitleContext* this) {
}
// Draw ice cube around N64 logo.
- if (CVarGetInteger(CVAR_GENERAL("LetItSnow"), 0)) {
+ if (CVarGetInteger("gLetItSnow", 0)) {
f32 scale = 0.4f;
gSPSegment(POLY_OPA_DISP++, 0x08,