summaryrefslogtreecommitdiff
path: root/soh/assets
diff options
context:
space:
mode:
authoraMannus <mannusmenting@gmail.com>2026-01-10 13:59:32 +0100
committerGitHub <noreply@github.com>2026-01-10 12:59:32 +0000
commit14a6bc1f85c2bec1a8aaff6afb7a6dcc01838dbf (patch)
tree6ad82d3cecba75a11400362b1709a5cc840df179 /soh/assets
parent5bbc32c2d1443390dc4415d62f89fab234f42a81 (diff)
Add Roc's Feather (custom item) to Rando Item Pool (#6035)
This adds Roc's as a fully implemented item into the randomizer pool. When both Roc's and Nayru's is found, you can swap between them on the pause menu Many people have contributed to this over time, so huge shoutout to: - kentonm, this item is directly inspired by their Roc's Feather from their romhack Indigo. Also provided me with their GI model, icon texture and animation to use. - PurpleHato, for providing the images for the item name shown on the kaleidoscope. - Dana The Elf, providing another custom animation for the item. - Reppan, for helping to tweak the animation and exporting the GI model for me.
Diffstat (limited to 'soh/assets')
-rw-r--r--soh/assets/custom/objects/gameplay_keep/gPlayerAnim_link_rocs_feather_jumpbin0 -> 142 bytes
-rw-r--r--soh/assets/custom/objects/gameplay_keep/gPlayerAnim_link_rocs_feather_jump_Databin0 -> 1810 bytes
-rw-r--r--soh/assets/custom/objects/object_rocs_feather/eff_unknown_12.i8bin0 -> 1116 bytes
-rw-r--r--soh/assets/custom/objects/object_rocs_feather/eff_unknown_12_i8bin0 -> 1116 bytes
-rw-r--r--soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL16
-rw-r--r--soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_tri_021
-rw-r--r--soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_tri_130
-rw-r--r--soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_vtx_064
-rw-r--r--soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_vtx_181
-rw-r--r--soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_vtx_cull10
-rw-r--r--soh/assets/custom/objects/object_rocs_feather/mat_gGiRocsFeatherDL_feather_feather22
-rw-r--r--soh/assets/custom/objects/object_rocs_feather/mat_gGiRocsFeatherDL_feather_stem22
-rw-r--r--soh/assets/custom/objects/object_rocs_feather/model.xml10
-rw-r--r--soh/assets/custom/textures/icon_item_static/gRocsFeatherTex.rgba32.pngbin0 -> 2111 bytes
-rw-r--r--soh/assets/custom/textures/item_name_static/gRocsFeatherItemNameENGTex.ia4.pngbin0 -> 3934 bytes
-rw-r--r--soh/assets/custom/textures/item_name_static/gRocsFeatherItemNameFRATex.ia4.pngbin0 -> 3808 bytes
-rw-r--r--soh/assets/custom/textures/item_name_static/gRocsFeatherItemNameGERTex.ia4.pngbin0 -> 3608 bytes
-rw-r--r--soh/assets/soh_assets.h19
18 files changed, 295 insertions, 0 deletions
diff --git a/soh/assets/custom/objects/gameplay_keep/gPlayerAnim_link_rocs_feather_jump b/soh/assets/custom/objects/gameplay_keep/gPlayerAnim_link_rocs_feather_jump
new file mode 100644
index 000000000..331911d02
--- /dev/null
+++ b/soh/assets/custom/objects/gameplay_keep/gPlayerAnim_link_rocs_feather_jump
Binary files differ
diff --git a/soh/assets/custom/objects/gameplay_keep/gPlayerAnim_link_rocs_feather_jump_Data b/soh/assets/custom/objects/gameplay_keep/gPlayerAnim_link_rocs_feather_jump_Data
new file mode 100644
index 000000000..616c28c81
--- /dev/null
+++ b/soh/assets/custom/objects/gameplay_keep/gPlayerAnim_link_rocs_feather_jump_Data
Binary files differ
diff --git a/soh/assets/custom/objects/object_rocs_feather/eff_unknown_12.i8 b/soh/assets/custom/objects/object_rocs_feather/eff_unknown_12.i8
new file mode 100644
index 000000000..e305f3668
--- /dev/null
+++ b/soh/assets/custom/objects/object_rocs_feather/eff_unknown_12.i8
Binary files differ
diff --git a/soh/assets/custom/objects/object_rocs_feather/eff_unknown_12_i8 b/soh/assets/custom/objects/object_rocs_feather/eff_unknown_12_i8
new file mode 100644
index 000000000..e305f3668
--- /dev/null
+++ b/soh/assets/custom/objects/object_rocs_feather/eff_unknown_12_i8
Binary files differ
diff --git a/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL b/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL
new file mode 100644
index 000000000..2e1d14239
--- /dev/null
+++ b/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL
@@ -0,0 +1,16 @@
+<DisplayList Version="0">
+ <ClearGeometryMode G_LIGHTING="1" />
+ <LoadVertices Path="objects/object_rocs_feather/gGiRocsFeatherDL_vtx_cull" VertexBufferIndex="0" VertexOffset="0" Count="8"/>
+ <CullDisplayList Start="0" End="7"/>
+ <CallDisplayList Path="objects/object_rocs_feather/mat_gGiRocsFeatherDL_feather_stem"/>
+ <CallDisplayList Path="objects/object_rocs_feather/gGiRocsFeatherDL_tri_0"/>
+ <CallDisplayList Path="objects/object_rocs_feather/mat_gGiRocsFeatherDL_feather_feather"/>
+ <CallDisplayList Path="objects/object_rocs_feather/gGiRocsFeatherDL_tri_1"/>
+ <PipeSync/>
+ <SetGeometryMode G_LIGHTING="1" />
+ <ClearGeometryMode G_TEXTURE_GEN="1" />
+ <SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
+ <Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_tri_0 b/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_tri_0
new file mode 100644
index 000000000..94927832f
--- /dev/null
+++ b/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_tri_0
@@ -0,0 +1,21 @@
+<DisplayList Version="0">
+ <LoadVertices Path="objects/object_rocs_feather/gGiRocsFeatherDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="32"/>
+ <Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="4" V12="5" Flag1="0"/>
+ <Triangles2 V00="6" V01="7" V02="8" Flag0="0" V10="9" V11="10" V12="11" Flag1="0"/>
+ <Triangles2 V00="12" V01="13" V02="14" Flag0="0" V10="15" V11="16" V12="17" Flag1="0"/>
+ <Triangles2 V00="15" V01="17" V02="18" Flag0="0" V10="19" V11="20" V12="21" Flag1="0"/>
+ <Triangles2 V00="19" V01="21" V02="22" Flag0="0" V10="23" V11="24" V12="25" Flag1="0"/>
+ <Triangles2 V00="23" V01="25" V02="26" Flag0="0" V10="27" V11="28" V12="29" Flag1="0"/>
+ <Triangles2 V00="29" V01="30" V02="27" Flag0="0" V10="29" V11="31" V12="30" Flag1="0"/>
+ <LoadVertices Path="objects/object_rocs_feather/gGiRocsFeatherDL_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="30"/>
+ <Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="4" V12="5" Flag1="0"/>
+ <Triangles2 V00="3" V01="5" V02="6" Flag0="0" V10="7" V11="8" V12="9" Flag1="0"/>
+ <Triangles2 V00="7" V01="9" V02="10" Flag0="0" V10="11" V11="12" V12="13" Flag1="0"/>
+ <Triangles2 V00="11" V01="13" V02="14" Flag0="0" V10="15" V11="16" V12="17" Flag1="0"/>
+ <Triangles2 V00="15" V01="17" V02="18" Flag0="0" V10="19" V11="20" V12="21" Flag1="0"/>
+ <Triangles2 V00="19" V01="21" V02="22" Flag0="0" V10="23" V11="24" V12="25" Flag1="0"/>
+ <Triangles2 V00="23" V01="25" V02="25" Flag0="0" V10="26" V11="26" V12="28" Flag1="0"/>
+ <Triangle1 V00="26" V01="28" V02="29"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_tri_1 b/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_tri_1
new file mode 100644
index 000000000..9ab8f972b
--- /dev/null
+++ b/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_tri_1
@@ -0,0 +1,30 @@
+<DisplayList Version="0">
+ <LoadVertices Path="objects/object_rocs_feather/gGiRocsFeatherDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="30"/>
+ <Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="4" V12="5" Flag1="0"/>
+ <Triangles2 V00="6" V01="7" V02="8" Flag0="0" V10="9" V11="10" V12="11" Flag1="0"/>
+ <Triangles2 V00="12" V01="13" V02="14" Flag0="0" V10="15" V11="16" V12="17" Flag1="0"/>
+ <Triangles2 V00="18" V01="19" V02="20" Flag0="0" V10="21" V11="22" V12="23" Flag1="0"/>
+ <Triangles2 V00="24" V01="25" V02="26" Flag0="0" V10="27" V11="28" V12="29" Flag1="0"/>
+ <LoadVertices Path="objects/object_rocs_feather/gGiRocsFeatherDL_vtx_1" VertexBufferIndex="0" VertexOffset="30" Count="32"/>
+ <Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="0" V11="2" V12="3" Flag1="0"/>
+ <Triangles2 V00="2" V01="4" V02="3" Flag0="0" V10="3" V11="5" V12="0" Flag1="0"/>
+ <Triangles2 V00="6" V01="7" V02="8" Flag0="0" V10="6" V11="8" V12="9" Flag1="0"/>
+ <Triangles2 V00="9" V01="10" V02="6" Flag0="0" V10="9" V11="11" V12="10" Flag1="0"/>
+ <Triangles2 V00="9" V01="12" V02="11" Flag0="0" V10="10" V11="13" V12="6" Flag1="0"/>
+ <Triangles2 V00="14" V01="15" V02="16" Flag0="0" V10="14" V11="16" V12="17" Flag1="0"/>
+ <Triangles2 V00="16" V01="18" V02="17" Flag0="0" V10="17" V11="19" V12="14" Flag1="0"/>
+ <Triangles2 V00="20" V01="21" V02="22" Flag0="0" V10="20" V11="22" V12="23" Flag1="0"/>
+ <Triangles2 V00="24" V01="20" V02="23" Flag0="0" V10="25" V11="24" V12="23" Flag1="0"/>
+ <Triangles2 V00="23" V01="26" V02="25" Flag0="0" V10="23" V11="27" V12="26" Flag1="0"/>
+ <Triangles2 V00="23" V01="28" V02="27" Flag0="0" V10="23" V11="29" V12="28" Flag1="0"/>
+ <Triangles2 V00="27" V01="30" V02="26" Flag0="0" V10="25" V11="31" V12="24" Flag1="0"/>
+ <LoadVertices Path="objects/object_rocs_feather/gGiRocsFeatherDL_vtx_1" VertexBufferIndex="0" VertexOffset="62" Count="17"/>
+ <Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="0" V11="2" V12="3" Flag1="0"/>
+ <Triangles2 V00="2" V01="4" V02="3" Flag0="0" V10="5" V11="6" V12="7" Flag1="0"/>
+ <Triangles2 V00="5" V01="7" V02="8" Flag0="0" V10="7" V11="9" V12="8" Flag1="0"/>
+ <Triangles2 V00="8" V01="10" V02="5" Flag0="0" V10="8" V11="11" V12="10" Flag1="0"/>
+ <Triangles2 V00="10" V01="12" V02="5" Flag0="0" V10="13" V11="14" V12="15" Flag1="0"/>
+ <Triangle1 V00="13" V01="15" V02="16"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_vtx_0 b/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_vtx_0
new file mode 100644
index 000000000..6b1681449
--- /dev/null
+++ b/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_vtx_0
@@ -0,0 +1,64 @@
+<Vertex Version="0">
+ <Vtx X="-18" Y="-17" Z="3" S="-571" T="1073" R="225" G="213" B="116" A="255"/>
+ <Vtx X="-15" Y="-19" Z="3" S="-490" T="1097" R="225" G="213" B="116" A="255"/>
+ <Vtx X="-15" Y="-14" Z="5" S="-647" T="1032" R="225" G="213" B="116" A="255"/>
+ <Vtx X="5" Y="25" Z="4" S="926" T="-577" R="84" G="213" B="86" A="255"/>
+ <Vtx X="13" Y="34" Z="2" S="1187" T="-900" R="84" G="213" B="86" A="255"/>
+ <Vtx X="5" Y="25" Z="5" S="917" T="-568" R="84" G="213" B="86" A="255"/>
+ <Vtx X="21" Y="41" Z="-4" S="1243" T="-1254" R="23" G="59" B="110" A="255"/>
+ <Vtx X="12" Y="34" Z="2" S="890" T="-998" R="23" G="59" B="110" A="255"/>
+ <Vtx X="13" Y="34" Z="2" S="929" T="-987" R="23" G="59" B="110" A="255"/>
+ <Vtx X="13" Y="34" Z="2" S="802" T="-678" R="17" G="34" B="121" A="255"/>
+ <Vtx X="12" Y="34" Z="2" S="763" T="-689" R="17" G="34" B="121" A="255"/>
+ <Vtx X="5" Y="25" Z="5" S="633" T="-688" R="17" G="34" B="121" A="255"/>
+ <Vtx X="12" Y="34" Z="2" S="1125" T="-893" R="195" G="79" B="79" A="255"/>
+ <Vtx X="4" Y="25" Z="4" S="839" T="-578" R="195" G="79" B="79" A="255"/>
+ <Vtx X="5" Y="25" Z="5" S="846" T="-568" R="195" G="79" B="79" A="255"/>
+ <Vtx X="-18" Y="-17" Z="3" S="-22" T="833" R="139" G="35" B="35" A="255"/>
+ <Vtx X="-18" Y="-17" Z="1" S="-30" T="854" R="139" G="35" B="35" A="255"/>
+ <Vtx X="-23" Y="-31" Z="-1" S="-218" T="1342" R="139" G="35" B="35" A="255"/>
+ <Vtx X="-22" Y="-31" Z="0" S="-209" T="1319" R="139" G="35" B="35" A="255"/>
+ <Vtx X="-7" Y="0" Z="6" S="405" T="229" R="75" G="226" B="98" A="255"/>
+ <Vtx X="5" Y="25" Z="4" S="880" T="-644" R="75" G="226" B="98" A="255"/>
+ <Vtx X="5" Y="25" Z="5" S="874" T="-640" R="75" G="226" B="98" A="255"/>
+ <Vtx X="-9" Y="0" Z="7" S="398" T="236" R="75" G="226" B="98" A="255"/>
+ <Vtx X="-22" Y="-31" Z="-2" S="-303" T="1303" R="15" G="21" B="132" A="255"/>
+ <Vtx X="-18" Y="-17" Z="1" S="-151" T="802" R="15" G="21" B="132" A="255"/>
+ <Vtx X="-15" Y="-19" Z="1" S="-73" T="853" R="15" G="21" B="132" A="255"/>
+ <Vtx X="-20" Y="-31" Z="-2" S="-246" T="1302" R="15" G="21" B="132" A="255"/>
+ <Vtx X="-20" Y="-31" Z="1" S="-229" T="1730" R="0" G="129" B="0" A="255"/>
+ <Vtx X="-22" Y="-31" Z="0" S="-287" T="1731" R="0" G="129" B="0" A="255"/>
+ <Vtx X="-23" Y="-31" Z="-1" S="-331" T="1738" R="0" G="129" B="0" A="255"/>
+ <Vtx X="-20" Y="-31" Z="-2" S="-234" T="1746" R="0" G="129" B="0" A="255"/>
+ <Vtx X="-22" Y="-31" Z="-2" S="-292" T="1747" R="0" G="129" B="0" A="255"/>
+ <Vtx X="-20" Y="-31" Z="-2" S="-234" T="1746" R="0" G="129" B="0" A="255"/>
+ <Vtx X="-19" Y="-31" Z="-1" S="-181" T="1739" R="0" G="129" B="0" A="255"/>
+ <Vtx X="-20" Y="-31" Z="1" S="-229" T="1730" R="0" G="129" B="0" A="255"/>
+ <Vtx X="-20" Y="-31" Z="1" S="-38" T="1351" R="113" G="212" B="39" A="255"/>
+ <Vtx X="-19" Y="-31" Z="-1" S="-34" T="1345" R="113" G="212" B="39" A="255"/>
+ <Vtx X="-15" Y="-19" Z="1" S="161" T="933" R="113" G="212" B="39" A="255"/>
+ <Vtx X="-15" Y="-19" Z="3" S="167" T="918" R="113" G="212" B="39" A="255"/>
+ <Vtx X="-15" Y="-19" Z="3" S="-16" T="1008" R="241" G="235" B="124" A="255"/>
+ <Vtx X="-18" Y="-17" Z="3" S="-16" T="1008" R="241" G="235" B="124" A="255"/>
+ <Vtx X="-22" Y="-31" Z="0" S="-16" T="1008" R="241" G="235" B="124" A="255"/>
+ <Vtx X="-20" Y="-31" Z="1" S="-16" T="1008" R="241" G="235" B="124" A="255"/>
+ <Vtx X="-10" Y="1" Z="6" S="294" T="191" R="179" G="16" B="100" A="255"/>
+ <Vtx X="-18" Y="-17" Z="3" S="-16" T="825" R="179" G="16" B="100" A="255"/>
+ <Vtx X="-15" Y="-14" Z="5" S="76" T="722" R="179" G="16" B="100" A="255"/>
+ <Vtx X="-9" Y="0" Z="7" S="304" T="187" R="179" G="16" B="100" A="255"/>
+ <Vtx X="-15" Y="-19" Z="3" S="80" T="907" R="71" G="210" B="95" A="255"/>
+ <Vtx X="-7" Y="0" Z="6" S="388" T="207" R="71" G="210" B="95" A="255"/>
+ <Vtx X="-9" Y="0" Z="7" S="382" T="201" R="71" G="210" B="95" A="255"/>
+ <Vtx X="-15" Y="-14" Z="5" S="123" T="745" R="71" G="210" B="95" A="255"/>
+ <Vtx X="4" Y="25" Z="4" S="837" T="-659" R="188" G="45" B="98" A="255"/>
+ <Vtx X="-10" Y="1" Z="6" S="295" T="185" R="188" G="45" B="98" A="255"/>
+ <Vtx X="-9" Y="0" Z="7" S="302" T="188" R="188" G="45" B="98" A="255"/>
+ <Vtx X="5" Y="25" Z="5" S="843" T="-654" R="188" G="45" B="98" A="255"/>
+ <Vtx X="-19" Y="-31" Z="-1" S="-40" T="1364" R="87" G="243" B="164" A="255"/>
+ <Vtx X="-20" Y="-31" Z="-2" S="-52" T="1393" R="87" G="243" B="164" A="255"/>
+ <Vtx X="-15" Y="-19" Z="1" S="153" T="959" R="87" G="243" B="164" A="255"/>
+ <Vtx X="-18" Y="-17" Z="1" S="-25" T="839" R="164" G="44" B="180" A="255"/>
+ <Vtx X="-18" Y="-17" Z="1" S="-25" T="839" R="164" G="44" B="180" A="255"/>
+ <Vtx X="-22" Y="-31" Z="-2" S="-212" T="1327" R="164" G="44" B="180" A="255"/>
+ <Vtx X="-23" Y="-31" Z="-1" S="-214" T="1330" R="164" G="44" B="180" A="255"/>
+</Vertex>
diff --git a/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_vtx_1 b/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_vtx_1
new file mode 100644
index 000000000..44ab97157
--- /dev/null
+++ b/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_vtx_1
@@ -0,0 +1,81 @@
+<Vertex Version="0">
+ <Vtx X="-4" Y="-14" Z="0" S="30868" T="-30560" R="225" G="123" B="0" A="255"/>
+ <Vtx X="-15" Y="-19" Z="1" S="-25435088" T="50901360" R="225" G="123" B="0" A="255"/>
+ <Vtx X="-15" Y="-19" Z="1" S="-25435024" T="50901232" R="225" G="123" B="0" A="255"/>
+ <Vtx X="-18" Y="-17" Z="3" S="-210" T="881" R="138" G="209" B="0" A="255"/>
+ <Vtx X="-21" Y="-8" Z="0" S="-246" T="605" R="138" G="209" B="0" A="255"/>
+ <Vtx X="-18" Y="-17" Z="1" S="-216" T="876" R="138" G="209" B="0" A="255"/>
+ <Vtx X="-15" Y="-19" Z="1" S="135" T="1196" R="47" G="138" B="0" A="255"/>
+ <Vtx X="-4" Y="-14" Z="0" S="468" T="970" R="47" G="138" B="0" A="255"/>
+ <Vtx X="-15" Y="-19" Z="3" S="131" T="1187" R="47" G="138" B="0" A="255"/>
+ <Vtx X="-18" Y="-17" Z="1" S="-26861712" T="75270256" R="225" G="133" B="0" A="255"/>
+ <Vtx X="-21" Y="-8" Z="0" S="31392" T="-30448" R="225" G="133" B="0" A="255"/>
+ <Vtx X="-18" Y="-17" Z="1" S="-26861752" T="75270368" R="225" G="133" B="0" A="255"/>
+ <Vtx X="0" Y="-6" Z="2" S="521" T="800" R="254" G="127" B="1" A="255"/>
+ <Vtx X="0" Y="-6" Z="4" S="529" T="808" R="254" G="127" B="1" A="255"/>
+ <Vtx X="9" Y="-6" Z="2" S="813" T="804" R="254" G="127" B="1" A="255"/>
+ <Vtx X="0" Y="-6" Z="4" S="579" T="784" R="18" G="130" B="255" A="255"/>
+ <Vtx X="0" Y="-6" Z="2" S="557" T="760" R="18" G="130" B="255" A="255"/>
+ <Vtx X="10" Y="-4" Z="2" S="935" T="777" R="18" G="130" B="255" A="255"/>
+ <Vtx X="8" Y="13" Z="2" S="828" T="153" R="245" G="127" B="0" A="255"/>
+ <Vtx X="8" Y="13" Z="4" S="837" T="160" R="245" G="127" B="0" A="255"/>
+ <Vtx X="19" Y="14" Z="1" S="1232" T="86" R="245" G="127" B="0" A="255"/>
+ <Vtx X="8" Y="13" Z="4" S="933" T="102" R="38" G="135" B="253" A="255"/>
+ <Vtx X="8" Y="13" Z="2" S="921" T="97" R="38" G="135" B="253" A="255"/>
+ <Vtx X="20" Y="17" Z="1" S="1362" T="-39" R="38" G="135" B="253" A="255"/>
+ <Vtx X="1" Y="31" Z="0" S="362" T="-917" R="131" G="23" B="3" A="255"/>
+ <Vtx X="1" Y="31" Z="1" S="353" T="-907" R="131" G="23" B="3" A="255"/>
+ <Vtx X="2" Y="36" Z="-2" S="280" T="-1105" R="131" G="23" B="3" A="255"/>
+ <Vtx X="1" Y="31" Z="0" S="239" T="-724" R="97" G="82" B="0" A="255"/>
+ <Vtx X="-2" Y="34" Z="-1" S="125" T="-811" R="97" G="82" B="0" A="255"/>
+ <Vtx X="1" Y="31" Z="1" S="231" T="-715" R="97" G="82" B="0" A="255"/>
+ <Vtx X="-7" Y="0" Z="6" S="266" T="174" R="30" G="212" B="115" A="255"/>
+ <Vtx X="-15" Y="-19" Z="3" S="85" T="942" R="30" G="212" B="115" A="255"/>
+ <Vtx X="-4" Y="-14" Z="0" S="438" T="853" R="30" G="212" B="115" A="255"/>
+ <Vtx X="0" Y="-6" Z="4" S="536" T="385" R="30" G="212" B="115" A="255"/>
+ <Vtx X="9" Y="-6" Z="2" S="840" T="386" R="30" G="212" B="115" A="255"/>
+ <Vtx X="10" Y="-4" Z="2" S="887" T="340" R="30" G="212" B="115" A="255"/>
+ <Vtx X="-18" Y="11" Z="-1" S="-150" T="-279" R="211" G="50" B="108" A="255"/>
+ <Vtx X="-10" Y="1" Z="6" S="157" T="155" R="211" G="50" B="108" A="255"/>
+ <Vtx X="4" Y="25" Z="4" S="679" T="-711" R="211" G="50" B="108" A="255"/>
+ <Vtx X="12" Y="34" Z="2" S="986" T="-1032" R="211" G="50" B="108" A="255"/>
+ <Vtx X="1" Y="31" Z="1" S="588" T="-926" R="211" G="50" B="108" A="255"/>
+ <Vtx X="2" Y="36" Z="-2" S="618" T="-1162" R="211" G="50" B="108" A="255"/>
+ <Vtx X="21" Y="41" Z="-4" S="1296" T="-1320" R="211" G="50" B="108" A="255"/>
+ <Vtx X="-2" Y="34" Z="-1" S="486" T="-1064" R="211" G="50" B="108" A="255"/>
+ <Vtx X="-15" Y="-19" Z="3" S="-288" T="1192" R="185" G="150" B="0" A="255"/>
+ <Vtx X="-18" Y="-17" Z="3" S="-374" T="1166" R="185" G="150" B="0" A="255"/>
+ <Vtx X="-18" Y="-17" Z="1" S="-381" T="1186" R="185" G="150" B="0" A="255"/>
+ <Vtx X="-15" Y="-19" Z="1" S="-295" T="1213" R="185" G="150" B="0" A="255"/>
+ <Vtx X="-18" Y="-17" Z="1" S="-381" T="1186" R="185" G="150" B="0" A="255"/>
+ <Vtx X="-15" Y="-19" Z="1" S="-295" T="1213" R="185" G="150" B="0" A="255"/>
+ <Vtx X="2" Y="36" Z="-2" S="577" T="-1176" R="5" G="247" B="129" A="255"/>
+ <Vtx X="21" Y="41" Z="-4" S="1259" T="-1325" R="5" G="247" B="129" A="255"/>
+ <Vtx X="20" Y="17" Z="1" S="1217" T="-461" R="5" G="247" B="129" A="255"/>
+ <Vtx X="8" Y="13" Z="2" S="782" T="-317" R="5" G="247" B="129" A="255"/>
+ <Vtx X="1" Y="31" Z="0" S="539" T="-966" R="5" G="247" B="129" A="255"/>
+ <Vtx X="-18" Y="11" Z="-1" S="-136" T="-282" R="5" G="247" B="129" A="255"/>
+ <Vtx X="-4" Y="-14" Z="0" S="229" T="886" R="5" G="247" B="129" A="255"/>
+ <Vtx X="0" Y="-6" Z="2" S="507" T="364" R="5" G="247" B="129" A="255"/>
+ <Vtx X="10" Y="-4" Z="2" S="854" T="310" R="5" G="247" B="129" A="255"/>
+ <Vtx X="19" Y="14" Z="1" S="1194" T="-359" R="5" G="247" B="129" A="255"/>
+ <Vtx X="9" Y="-6" Z="2" S="807" T="356" R="5" G="247" B="129" A="255"/>
+ <Vtx X="-2" Y="34" Z="-1" S="449" T="-1081" R="5" G="247" B="129" A="255"/>
+ <Vtx X="-4" Y="-14" Z="0" S="229" T="886" R="5" G="247" B="129" A="255"/>
+ <Vtx X="-15" Y="-19" Z="1" S="-16" T="1008" R="5" G="247" B="129" A="255"/>
+ <Vtx X="-18" Y="-17" Z="1" S="-16" T="1008" R="5" G="247" B="129" A="255"/>
+ <Vtx X="-18" Y="11" Z="-1" S="-136" T="-282" R="5" G="247" B="129" A="255"/>
+ <Vtx X="-21" Y="-8" Z="0" S="-284" T="452" R="5" G="247" B="129" A="255"/>
+ <Vtx X="5" Y="25" Z="4" S="675" T="-722" R="33" G="1" B="123" A="255"/>
+ <Vtx X="-7" Y="0" Z="6" S="238" T="161" R="33" G="1" B="123" A="255"/>
+ <Vtx X="10" Y="-4" Z="2" S="876" T="297" R="33" G="1" B="123" A="255"/>
+ <Vtx X="8" Y="13" Z="4" S="784" T="-310" R="33" G="1" B="123" A="255"/>
+ <Vtx X="19" Y="14" Z="1" S="1192" T="-364" R="33" G="1" B="123" A="255"/>
+ <Vtx X="21" Y="41" Z="-4" S="1262" T="-1307" R="33" G="1" B="123" A="255"/>
+ <Vtx X="20" Y="17" Z="1" S="1211" T="-467" R="33" G="1" B="123" A="255"/>
+ <Vtx X="13" Y="34" Z="2" S="935" T="-1050" R="33" G="1" B="123" A="255"/>
+ <Vtx X="-18" Y="-17" Z="3" S="-110" T="803" R="185" G="15" B="104" A="255"/>
+ <Vtx X="-10" Y="1" Z="6" S="129" T="130" R="185" G="15" B="104" A="255"/>
+ <Vtx X="-18" Y="11" Z="-1" S="-217" T="-220" R="185" G="15" B="104" A="255"/>
+ <Vtx X="-21" Y="-8" Z="0" S="-254" T="515" R="185" G="15" B="104" A="255"/>
+</Vertex>
diff --git a/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_vtx_cull b/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_vtx_cull
new file mode 100644
index 000000000..e43cf3bda
--- /dev/null
+++ b/soh/assets/custom/objects/object_rocs_feather/gGiRocsFeatherDL_vtx_cull
@@ -0,0 +1,10 @@
+<Vertex Version="0">
+ <Vtx X="-23" Y="-31" Z="-4" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
+ <Vtx X="-23" Y="-31" Z="7" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
+ <Vtx X="-23" Y="41" Z="7" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
+ <Vtx X="-23" Y="41" Z="-4" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
+ <Vtx X="21" Y="-31" Z="-4" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
+ <Vtx X="21" Y="-31" Z="7" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
+ <Vtx X="21" Y="41" Z="7" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
+ <Vtx X="21" Y="41" Z="-4" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
+</Vertex>
diff --git a/soh/assets/custom/objects/object_rocs_feather/mat_gGiRocsFeatherDL_feather_feather b/soh/assets/custom/objects/object_rocs_feather/mat_gGiRocsFeatherDL_feather_feather
new file mode 100644
index 000000000..e21e92ff8
--- /dev/null
+++ b/soh/assets/custom/objects/object_rocs_feather/mat_gGiRocsFeatherDL_feather_feather
@@ -0,0 +1,22 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_PRIMITIVE" B0="G_CCMUX_ENVIRONMENT" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_ENVIRONMENT" Aa0="G_ACMUX_1" Ab0="G_ACMUX_1" Ac0="G_ACMUX_PRIM_LOD_FRAC" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_SHADE" D1="G_CCMUX_0" Aa1="G_ACMUX_1" Ab1="G_ACMUX_1" Ac1="G_ACMUX_PRIM_LOD_FRAC" Ad1="G_ACMUX_1"/>
+ <SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
+
+ <SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_PASS="1" G_RM_AA_ZB_TEX_EDGE2="1" />
+ <Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
+ <SetTextureLUT Mode="G_TT_NONE"/>
+ <TileSync/>
+ <SetTextureImage Path="objects/object_rocs_feather/eff_unknown_12_i8" Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="4" MaskT="5" ShiftT="4"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="511" Dxt="512"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b" Line="4" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="4" MaskT="5" ShiftT="4"/>
+ <SetTileSize T="0" Uls="12" Ult="120" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="101" G="34" B="255" A="255"/>
+ <SetEnvColor R="44" G="187" B="200" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/soh/assets/custom/objects/object_rocs_feather/mat_gGiRocsFeatherDL_feather_stem b/soh/assets/custom/objects/object_rocs_feather/mat_gGiRocsFeatherDL_feather_stem
new file mode 100644
index 000000000..b523babf2
--- /dev/null
+++ b/soh/assets/custom/objects/object_rocs_feather/mat_gGiRocsFeatherDL_feather_stem
@@ -0,0 +1,22 @@
+<DisplayList Version="0">
+ <PipeSync/>
+ <SetCombineLERP A0="G_CCMUX_PRIMITIVE" B0="G_CCMUX_ENVIRONMENT" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_ENVIRONMENT" Aa0="G_ACMUX_1" Ab0="G_ACMUX_1" Ac0="G_ACMUX_PRIM_LOD_FRAC" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_SHADE" D1="G_CCMUX_0" Aa1="G_ACMUX_1" Ab1="G_ACMUX_1" Ac1="G_ACMUX_PRIM_LOD_FRAC" Ad1="G_ACMUX_1"/>
+ <SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
+
+ <SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
+ <SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_PASS="1" G_RM_AA_ZB_TEX_EDGE2="1" />
+ <Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
+ <SetTextureLUT Mode="G_TT_NONE"/>
+ <TileSync/>
+ <SetTextureImage Path="objects/object_rocs_feather/eff_unknown_12_i8" Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Width="1"/>
+ <SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="2" MaskT="5" ShiftT="2"/>
+ <LoadSync/>
+ <LoadBlock Tile="7" Uls="0" Ult="0" Lrs="511" Dxt="512"/>
+ <PipeSync/>
+ <SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b" Line="4" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="2" MaskT="5" ShiftT="2"/>
+ <SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
+ <SetPrimColor M="0" L="0" R="165" G="147" B="255" A="255"/>
+ <SetEnvColor R="107" G="68" B="230" A="255"/>
+ <EndDisplayList/>
+</DisplayList>
+
diff --git a/soh/assets/custom/objects/object_rocs_feather/model.xml b/soh/assets/custom/objects/object_rocs_feather/model.xml
new file mode 100644
index 000000000..5d798a1ab
--- /dev/null
+++ b/soh/assets/custom/objects/object_rocs_feather/model.xml
@@ -0,0 +1,10 @@
+<Vertex Version="0">
+ <Vtx X="-23" Y="-40" Z="-4" S="0" T="0" R="0" G="0" B="0" A="0"/>
+ <Vtx X="-23" Y="-40" Z="7" S="0" T="0" R="0" G="0" B="0" A="0"/>
+ <Vtx X="-23" Y="32" Z="7" S="0" T="0" R="0" G="0" B="0" A="0"/>
+ <Vtx X="-23" Y="32" Z="-4" S="0" T="0" R="0" G="0" B="0" A="0"/>
+ <Vtx X="21" Y="-40" Z="-4" S="0" T="0" R="0" G="0" B="0" A="0"/>
+ <Vtx X="21" Y="-40" Z="7" S="0" T="0" R="0" G="0" B="0" A="0"/>
+ <Vtx X="21" Y="32" Z="7" S="0" T="0" R="0" G="0" B="0" A="0"/>
+ <Vtx X="21" Y="32" Z="-4" S="0" T="0" R="0" G="0" B="0" A="0"/>
+</Vertex>
diff --git a/soh/assets/custom/textures/icon_item_static/gRocsFeatherTex.rgba32.png b/soh/assets/custom/textures/icon_item_static/gRocsFeatherTex.rgba32.png
new file mode 100644
index 000000000..b2e4f99da
--- /dev/null
+++ b/soh/assets/custom/textures/icon_item_static/gRocsFeatherTex.rgba32.png
Binary files differ
diff --git a/soh/assets/custom/textures/item_name_static/gRocsFeatherItemNameENGTex.ia4.png b/soh/assets/custom/textures/item_name_static/gRocsFeatherItemNameENGTex.ia4.png
new file mode 100644
index 000000000..bc72f3ced
--- /dev/null
+++ b/soh/assets/custom/textures/item_name_static/gRocsFeatherItemNameENGTex.ia4.png
Binary files differ
diff --git a/soh/assets/custom/textures/item_name_static/gRocsFeatherItemNameFRATex.ia4.png b/soh/assets/custom/textures/item_name_static/gRocsFeatherItemNameFRATex.ia4.png
new file mode 100644
index 000000000..dc42bdc07
--- /dev/null
+++ b/soh/assets/custom/textures/item_name_static/gRocsFeatherItemNameFRATex.ia4.png
Binary files differ
diff --git a/soh/assets/custom/textures/item_name_static/gRocsFeatherItemNameGERTex.ia4.png b/soh/assets/custom/textures/item_name_static/gRocsFeatherItemNameGERTex.ia4.png
new file mode 100644
index 000000000..5842acfeb
--- /dev/null
+++ b/soh/assets/custom/textures/item_name_static/gRocsFeatherItemNameGERTex.ia4.png
Binary files differ
diff --git a/soh/assets/soh_assets.h b/soh/assets/soh_assets.h
index e1c7b810e..c0ec61420 100644
--- a/soh/assets/soh_assets.h
+++ b/soh/assets/soh_assets.h
@@ -354,6 +354,9 @@ static const ALIGN_ASSET(2) char gKeyringKeysGanonsCastleMQDL[] = dgKeyringKeysG
#define dgHouseKeyDL "__OTR__objects/object_housekey/gHouseKeyDL"
static const ALIGN_ASSET(2) char gHouseKeyDL[] = dgHouseKeyDL;
+#define dgGiRocsFeatherDL "__OTR__objects/object_rocs_feather/gGiRocsFeatherDL"
+static const ALIGN_ASSET(2) char gGiRocsFeatherDL[] = dgGiRocsFeatherDL;
+
// overlays
#define dgOptionsDividerChangeLangVtx "__OTR__overlays/ovl_file_choose/gOptionsDividerChangeLangVtx"
static const ALIGN_ASSET(2) char gOptionsDividerChangeLangVtx[] = dgOptionsDividerChangeLangVtx;
@@ -437,6 +440,18 @@ static const ALIGN_ASSET(2) char gFileSelLanguageFRATex[] = dgFileSelLanguageFRA
#define dgFileSelLanguageGERTex "__OTR__textures/title_static/gFileSelLanguageGERTex"
static const ALIGN_ASSET(2) char gFileSelLanguageGERTex[] = dgFileSelLanguageGERTex;
+#define dgRocsFeatherTex "__OTR__textures/icon_item_static/gRocsFeatherTex"
+static const ALIGN_ASSET(2) char gRocsFeatherTex[] = dgRocsFeatherTex;
+
+#define dgRocsFeatherItemNameENGTex "__OTR__textures/item_name_static/gRocsFeatherItemNameENGTex"
+static const ALIGN_ASSET(2) char gRocsFeatherItemNameENGTex[] = dgRocsFeatherItemNameENGTex;
+
+#define dgRocsFeatherItemNameGERTex "__OTR__textures/item_name_static/gRocsFeatherItemNameGERTex"
+static const ALIGN_ASSET(2) char gRocsFeatherItemNameGERTex[] = dgRocsFeatherItemNameGERTex;
+
+#define dgRocsFeatherItemNameFRATex "__OTR__textures/item_name_static/gRocsFeatherItemNameFRATex"
+static const ALIGN_ASSET(2) char gRocsFeatherItemNameFRATex[] = dgRocsFeatherItemNameFRATex;
+
#define dgEmptyTexture "__OTR__textures/virtual/gEmptyTexture"
static const ALIGN_ASSET(2) char gEmptyTexture[] = dgEmptyTexture;
@@ -459,6 +474,10 @@ static const ALIGN_ASSET(2) char gLinkAdultGoronTunicSkel[] = dgLinkAdultGoronTu
#define dgLinkAdultZoraTunicSkel "__OTR__objects/object_link_boy_zora/gLinkAdultZoraTunicSkel"
static const ALIGN_ASSET(2) char gLinkAdultZoraTunicSkel[] = dgLinkAdultZoraTunicSkel;
+// Animations
+#define dgPlayerAnim_link_rocs_feather_jump "__OTR__objects/gameplay_keep/gPlayerAnim_link_rocs_feather_jump"
+static const ALIGN_ASSET(2) char gPlayerAnim_link_rocs_feather_jump[] = dgPlayerAnim_link_rocs_feather_jump;
+
// LUS Logo
#define dgShipLogoDL "__OTR__textures/nintendo_rogo_static/gShipLogoDL"
static const ALIGN_ASSET(2) char gShipLogoDL[] = dgShipLogoDL;