let-it-snow: Snow Golems (Skeleton override) (#4695)

* Add Snow Golems (Skeleton override)

* update snowball to use new snowball DL
This commit is contained in:
Archez 2024-12-15 23:01:00 -05:00 committed by GitHub
commit a8f3840475
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
38 changed files with 572 additions and 37 deletions

View file

@ -0,0 +1,16 @@
<DisplayList Version="0">
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
<PipeSync/>
<SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_SHADE" D0="G_CCMUX_0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
<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_TT_NONE="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_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
<Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
<SetPrimColor M="0" L="0" R="255" G="255" B="255" A="255"/>
<SetTextureImage Path="objects/custom_snowball/LightNoise.rgba32" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_32b_LOAD_BLOCK" Width="1"/>
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_32b_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="0" ShiftS="0" MaskT="0" ShiftT="0"/>
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="128"/>
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_32b" Line="8" 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="0" MaskT="5" ShiftT="0"/>
<SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
<EndDisplayList/>
</DisplayList>

View file

@ -0,0 +1,10 @@
<Vertex Version="0">
<Vtx X="-951" Y="-1000" Z="-1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
<Vtx X="-951" Y="-1000" Z="1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
<Vtx X="-951" Y="1000" Z="1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
<Vtx X="-951" Y="1000" Z="-1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
<Vtx X="951" Y="-1000" Z="-1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
<Vtx X="951" Y="-1000" Z="1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
<Vtx X="951" Y="1000" Z="1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
<Vtx X="951" Y="1000" Z="-1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
</Vertex>

View file

@ -0,0 +1,10 @@
<DisplayList Version="0">
<ClearGeometryMode G_LIGHTING="1" />
<LoadVertices Path="objects/custom_snowball/snowball_vtx_cull" VertexBufferIndex="0" VertexOffset="0" Count="8"/>
<SetGeometryMode G_LIGHTING="1" />
<CullDisplayList Start="0" End="7"/>
<CallDisplayList Path="objects/custom_snowball/mat_snowball_snow"/>
<CallDisplayList Path="objects/custom_snowball/snowball_tri_0"/>
<EndDisplayList/>
</DisplayList>

View file

@ -0,0 +1,47 @@
<DisplayList Version="0">
<LoadVertices Path="objects/custom_snowball/snowball_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="2" V11="1" V12="3" Flag1="0"/>
<Triangles2 V00="1" V01="4" V02="3" Flag0="0" V10="3" V11="4" V12="5" Flag1="0"/>
<Triangles2 V00="4" V01="6" V02="5" Flag0="0" V10="4" V11="7" V12="6" Flag1="0"/>
<Triangles2 V00="4" V01="8" V02="7" Flag0="0" V10="7" V11="8" V12="9" Flag1="0"/>
<Triangles2 V00="8" V01="10" V02="9" Flag0="0" V10="7" V11="9" V12="11" Flag1="0"/>
<Triangles2 V00="7" V01="11" V02="12" Flag0="0" V10="11" V11="13" V12="12" Flag1="0"/>
<Triangles2 V00="11" V01="14" V02="13" Flag0="0" V10="15" V11="14" V12="11" Flag1="0"/>
<Triangles2 V00="15" V01="16" V02="14" Flag0="0" V10="17" V11="16" V12="15" Flag1="0"/>
<Triangles2 V00="16" V01="18" V02="14" Flag0="0" V10="14" V11="18" V12="19" Flag1="0"/>
<Triangles2 V00="18" V01="20" V02="19" Flag0="0" V10="18" V11="21" V12="20" Flag1="0"/>
<Triangles2 V00="22" V01="21" V02="18" Flag0="0" V10="22" V11="23" V12="21" Flag1="0"/>
<Triangles2 V00="24" V01="23" V02="22" Flag0="0" V10="23" V11="25" V12="21" Flag1="0"/>
<Triangles2 V00="21" V01="25" V02="26" Flag0="0" V10="25" V11="27" V12="26" Flag1="0"/>
<Triangles2 V00="25" V01="28" V02="27" Flag0="0" V10="29" V11="28" V12="25" Flag1="0"/>
<Triangles2 V00="29" V01="30" V02="28" Flag0="0" V10="31" V11="30" V12="29" Flag1="0"/>
<LoadVertices Path="objects/custom_snowball/snowball_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="2" V11="1" V12="3" Flag1="0"/>
<Triangles2 V00="4" V01="2" V02="3" Flag0="0" V10="4" V11="3" V12="5" Flag1="0"/>
<Triangles2 V00="4" V01="5" V02="6" Flag0="0" V10="6" V11="5" V12="7" Flag1="0"/>
<Triangles2 V00="8" V01="6" V02="7" Flag0="0" V10="8" V11="7" V12="9" Flag1="0"/>
<Triangles2 V00="10" V01="6" V02="8" Flag0="0" V10="11" V11="6" V12="10" Flag1="0"/>
<Triangles2 V00="12" V01="11" V02="10" Flag0="0" V10="12" V11="10" V12="13" Flag1="0"/>
<Triangles2 V00="13" V01="10" V02="14" Flag0="0" V10="15" V11="13" V12="14" Flag1="0"/>
<Triangles2 V00="15" V01="14" V02="16" Flag0="0" V10="17" V11="13" V12="15" Flag1="0"/>
<Triangles2 V00="18" V01="13" V02="17" Flag0="0" V10="19" V11="18" V12="17" Flag1="0"/>
<Triangles2 V00="19" V01="17" V02="20" Flag0="0" V10="20" V11="17" V12="21" Flag1="0"/>
<Triangles2 V00="22" V01="20" V02="21" Flag0="0" V10="22" V11="21" V12="23" Flag1="0"/>
<Triangles2 V00="24" V01="20" V02="22" Flag0="0" V10="25" V11="20" V12="24" Flag1="0"/>
<Triangles2 V00="26" V01="25" V02="24" Flag0="0" V10="26" V11="24" V12="27" Flag1="0"/>
<Triangles2 V00="27" V01="24" V02="28" Flag0="0" V10="29" V11="27" V12="28" Flag1="0"/>
<Triangles2 V00="29" V01="28" V02="30" Flag0="0" V10="31" V11="27" V12="29" Flag1="0"/>
<LoadVertices Path="objects/custom_snowball/snowball_vtx_0" VertexBufferIndex="0" VertexOffset="64" Count="26"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="0" V12="2" Flag1="0"/>
<Triangles2 V00="3" V01="2" V02="4" Flag0="0" V10="4" V11="2" V12="5" Flag1="0"/>
<Triangles2 V00="6" V01="4" V02="5" Flag0="0" V10="6" V11="5" V12="7" Flag1="0"/>
<Triangles2 V00="8" V01="4" V02="6" Flag0="0" V10="9" V11="4" V12="8" Flag1="0"/>
<Triangles2 V00="9" V01="3" V02="4" Flag0="0" V10="10" V11="3" V12="9" Flag1="0"/>
<Triangles2 V00="10" V01="11" V02="3" Flag0="0" V10="12" V11="11" V12="10" Flag1="0"/>
<Triangles2 V00="3" V01="11" V02="0" Flag0="0" V10="13" V11="14" V12="15" Flag1="0"/>
<Triangles2 V00="16" V01="17" V02="18" Flag0="0" V10="19" V11="20" V12="21" Flag1="0"/>
<Triangles2 V00="0" V01="22" V02="1" Flag0="0" V10="14" V11="23" V12="16" Flag1="0"/>
<Triangles2 V00="17" V01="24" V02="19" Flag0="0" V10="22" V11="25" V12="13" Flag1="0"/>
<EndDisplayList/>
</DisplayList>

View file

@ -0,0 +1,92 @@
<Vertex Version="0">
<Vtx X="0" Y="-1000" Z="0" S="-933" T="1827" R="0" G="129" B="0" A="255"/>
<Vtx X="425" Y="-851" Z="309" S="-729" T="1473" R="54" G="148" B="39" A="255"/>
<Vtx X="-162" Y="-851" Z="500" S="-1137" T="1473" R="235" G="148" B="64" A="255"/>
<Vtx X="263" Y="-526" Z="809" S="-933" T="1120" R="33" G="189" B="103" A="255"/>
<Vtx X="724" Y="-447" Z="526" S="-525" T="1120" R="92" G="199" B="67" A="255"/>
<Vtx X="588" Y="0" Z="809" S="-729" T="766" R="75" G="0" B="103" A="255"/>
<Vtx X="951" Y="0" Z="309" S="-321" T="766" R="121" G="0" B="39" A="255"/>
<Vtx X="851" Y="-526" Z="0" S="-117" T="1120" R="108" G="189" B="0" A="255"/>
<Vtx X="425" Y="-851" Z="309" S="-321" T="1473" R="54" G="148" B="39" A="255"/>
<Vtx X="425" Y="-851" Z="-309" S="88" T="1473" R="54" G="148" B="217" A="255"/>
<Vtx X="0" Y="-1000" Z="0" S="-117" T="1827" R="0" G="129" B="0" A="255"/>
<Vtx X="724" Y="-447" Z="-526" S="292" T="1120" R="92" G="199" B="189" A="255"/>
<Vtx X="951" Y="0" Z="-309" S="88" T="766" R="121" G="0" B="217" A="255"/>
<Vtx X="588" Y="0" Z="-809" S="496" T="766" R="75" G="0" B="153" A="255"/>
<Vtx X="263" Y="-526" Z="-809" S="700" T="1120" R="33" G="189" B="153" A="255"/>
<Vtx X="425" Y="-851" Z="-309" S="496" T="1473" R="54" G="148" B="217" A="255"/>
<Vtx X="-162" Y="-851" Z="-500" S="904" T="1473" R="235" G="148" B="192" A="255"/>
<Vtx X="0" Y="-1000" Z="0" S="700" T="1827" R="0" G="129" B="0" A="255"/>
<Vtx X="-276" Y="-447" Z="-851" S="1109" T="1120" R="221" G="199" B="148" A="255"/>
<Vtx X="0" Y="0" Z="-1000" S="904" T="766" R="0" G="0" B="129" A="255"/>
<Vtx X="-588" Y="0" Z="-809" S="1313" T="766" R="181" G="0" B="153" A="255"/>
<Vtx X="-688" Y="-526" Z="-500" S="1517" T="1120" R="169" G="189" B="193" A="255"/>
<Vtx X="-162" Y="-851" Z="-500" S="1313" T="1473" R="235" G="148" B="192" A="255"/>
<Vtx X="-526" Y="-851" Z="0" S="1721" T="1473" R="189" G="148" B="0" A="255"/>
<Vtx X="0" Y="-1000" Z="0" S="1517" T="1827" R="0" G="129" B="0" A="255"/>
<Vtx X="-894" Y="-447" Z="0" S="1925" T="1120" R="142" G="199" B="0" A="255"/>
<Vtx X="-951" Y="0" Z="-309" S="1721" T="766" R="135" G="0" B="217" A="255"/>
<Vtx X="-951" Y="0" Z="309" S="2130" T="766" R="135" G="0" B="39" A="255"/>
<Vtx X="-688" Y="-526" Z="500" S="2334" T="1120" R="169" G="189" B="63" A="255"/>
<Vtx X="-526" Y="-851" Z="0" S="2130" T="1473" R="189" G="148" B="0" A="255"/>
<Vtx X="-162" Y="-851" Z="500" S="2538" T="1473" R="235" G="148" B="64" A="255"/>
<Vtx X="0" Y="-1000" Z="0" S="2334" T="1827" R="0" G="129" B="0" A="255"/>
<Vtx X="-162" Y="-851" Z="500" S="2538" T="1473" R="235" G="148" B="64" A="255"/>
<Vtx X="-276" Y="-447" Z="851" S="2742" T="1120" R="221" G="199" B="108" A="255"/>
<Vtx X="-688" Y="-526" Z="500" S="2334" T="1120" R="169" G="189" B="63" A="255"/>
<Vtx X="-588" Y="0" Z="809" S="2538" T="766" R="181" G="0" B="103" A="255"/>
<Vtx X="-951" Y="0" Z="309" S="2130" T="766" R="135" G="0" B="39" A="255"/>
<Vtx X="-724" Y="447" Z="526" S="2334" T="412" R="164" G="57" B="67" A="255"/>
<Vtx X="-851" Y="526" Z="0" S="1925" T="412" R="148" G="67" B="0" A="255"/>
<Vtx X="-425" Y="851" Z="309" S="2130" T="59" R="202" G="108" B="39" A="255"/>
<Vtx X="-425" Y="851" Z="-309" S="1721" T="59" R="202" G="108" B="217" A="255"/>
<Vtx X="0" Y="1000" Z="0" S="1925" T="-295" R="0" G="127" B="0" A="255"/>
<Vtx X="-724" Y="447" Z="-526" S="1517" T="412" R="164" G="57" B="189" A="255"/>
<Vtx X="-951" Y="0" Z="-309" S="1721" T="766" R="135" G="0" B="217" A="255"/>
<Vtx X="-588" Y="0" Z="-809" S="1313" T="766" R="181" G="0" B="153" A="255"/>
<Vtx X="-263" Y="526" Z="-809" S="1109" T="412" R="223" G="67" B="153" A="255"/>
<Vtx X="-425" Y="851" Z="-309" S="1313" T="59" R="202" G="108" B="217" A="255"/>
<Vtx X="162" Y="851" Z="-500" S="904" T="59" R="21" G="108" B="192" A="255"/>
<Vtx X="0" Y="1000" Z="0" S="1109" T="-295" R="0" G="127" B="0" A="255"/>
<Vtx X="276" Y="447" Z="-851" S="700" T="412" R="35" G="57" B="148" A="255"/>
<Vtx X="0" Y="0" Z="-1000" S="904" T="766" R="0" G="0" B="129" A="255"/>
<Vtx X="588" Y="0" Z="-809" S="496" T="766" R="75" G="0" B="153" A="255"/>
<Vtx X="688" Y="526" Z="-500" S="292" T="412" R="87" G="67" B="193" A="255"/>
<Vtx X="162" Y="851" Z="-500" S="496" T="59" R="21" G="108" B="192" A="255"/>
<Vtx X="526" Y="851" Z="0" S="88" T="59" R="67" G="108" B="0" A="255"/>
<Vtx X="0" Y="1000" Z="0" S="292" T="-295" R="0" G="127" B="0" A="255"/>
<Vtx X="894" Y="447" Z="0" S="-117" T="412" R="114" G="57" B="0" A="255"/>
<Vtx X="951" Y="0" Z="-309" S="88" T="766" R="121" G="0" B="217" A="255"/>
<Vtx X="951" Y="0" Z="309" S="-321" T="766" R="121" G="0" B="39" A="255"/>
<Vtx X="688" Y="526" Z="500" S="-525" T="412" R="87" G="67" B="63" A="255"/>
<Vtx X="526" Y="851" Z="0" S="-321" T="59" R="67" G="108" B="0" A="255"/>
<Vtx X="162" Y="851" Z="500" S="-729" T="59" R="21" G="108" B="64" A="255"/>
<Vtx X="0" Y="1000" Z="0" S="-525" T="-295" R="0" G="127" B="0" A="255"/>
<Vtx X="276" Y="447" Z="851" S="-933" T="412" R="35" G="57" B="108" A="255"/>
<Vtx X="588" Y="0" Z="809" S="-729" T="766" R="75" G="0" B="103" A="255"/>
<Vtx X="688" Y="526" Z="500" S="-525" T="412" R="87" G="67" B="63" A="255"/>
<Vtx X="276" Y="447" Z="851" S="-933" T="412" R="35" G="57" B="108" A="255"/>
<Vtx X="0" Y="0" Z="1000" S="-1137" T="766" R="0" G="0" B="127" A="255"/>
<Vtx X="-263" Y="526" Z="809" S="-1342" T="412" R="223" G="67" B="103" A="255"/>
<Vtx X="162" Y="851" Z="500" S="-1137" T="59" R="21" G="108" B="64" A="255"/>
<Vtx X="-425" Y="851" Z="309" S="-1546" T="59" R="202" G="108" B="39" A="255"/>
<Vtx X="0" Y="1000" Z="0" S="-1342" T="-295" R="0" G="127" B="0" A="255"/>
<Vtx X="-724" Y="447" Z="526" S="-1750" T="412" R="164" G="57" B="67" A="255"/>
<Vtx X="-588" Y="0" Z="809" S="-1546" T="766" R="181" G="0" B="103" A="255"/>
<Vtx X="-276" Y="-447" Z="851" S="-1342" T="1120" R="221" G="199" B="108" A="255"/>
<Vtx X="263" Y="-526" Z="809" S="-933" T="1120" R="33" G="189" B="103" A="255"/>
<Vtx X="-162" Y="-851" Z="500" S="-1137" T="1473" R="235" G="148" B="64" A="255"/>
<Vtx X="951" Y="0" Z="-309" S="88" T="766" R="121" G="0" B="217" A="255"/>
<Vtx X="588" Y="0" Z="-809" S="496" T="766" R="75" G="0" B="153" A="255"/>
<Vtx X="688" Y="526" Z="-500" S="292" T="412" R="87" G="67" B="193" A="255"/>
<Vtx X="0" Y="0" Z="-1000" S="904" T="766" R="0" G="0" B="129" A="255"/>
<Vtx X="-588" Y="0" Z="-809" S="1313" T="766" R="181" G="0" B="153" A="255"/>
<Vtx X="-263" Y="526" Z="-809" S="1109" T="412" R="223" G="67" B="153" A="255"/>
<Vtx X="-951" Y="0" Z="-309" S="1721" T="766" R="135" G="0" B="217" A="255"/>
<Vtx X="-951" Y="0" Z="309" S="2130" T="766" R="135" G="0" B="39" A="255"/>
<Vtx X="-851" Y="526" Z="0" S="1925" T="412" R="148" G="67" B="0" A="255"/>
<Vtx X="951" Y="0" Z="309" S="-321" T="766" R="121" G="0" B="39" A="255"/>
<Vtx X="263" Y="-526" Z="-809" S="700" T="1120" R="33" G="189" B="153" A="255"/>
<Vtx X="-688" Y="-526" Z="-500" S="1517" T="1120" R="169" G="189" B="193" A="255"/>
<Vtx X="851" Y="-526" Z="0" S="-117" T="1120" R="108" G="189" B="0" A="255"/>
</Vertex>

View file

@ -0,0 +1,10 @@
<Vertex Version="0">
<Vtx X="-951" Y="-1000" Z="-1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
<Vtx X="-951" Y="-1000" Z="1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
<Vtx X="-951" Y="1000" Z="1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
<Vtx X="-951" Y="1000" Z="-1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
<Vtx X="951" Y="-1000" Z="-1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
<Vtx X="951" Y="-1000" Z="1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
<Vtx X="951" Y="1000" Z="1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
<Vtx X="951" Y="1000" Z="-1000" S="0" T="0" R="0" G="0" B="0" A="0"/>
</Vertex>

View file

@ -59,6 +59,9 @@ static const ALIGN_ASSET(2) char gSkullTreasureChestFrontTex[] = dgSkullTreasure
#define dgSkullTreasureChestSideAndTopTex "__OTR__objects/object_box/gSkullTreasureChestSideAndTopTex" #define dgSkullTreasureChestSideAndTopTex "__OTR__objects/object_box/gSkullTreasureChestSideAndTopTex"
static const ALIGN_ASSET(2) char gSkullTreasureChestSideAndTopTex[] = dgSkullTreasureChestSideAndTopTex; static const ALIGN_ASSET(2) char gSkullTreasureChestSideAndTopTex[] = dgSkullTreasureChestSideAndTopTex;
#define dgSnowballDL "__OTR__objects/custom_snowball/snowball"
static const ALIGN_ASSET(2) char gSnowballDL[] = dgSnowballDL;
#define dgTitleRandomizerSubtitleTex "__OTR__objects/object_mag/gTitleRandomizerSubtitleTex" #define dgTitleRandomizerSubtitleTex "__OTR__objects/object_mag/gTitleRandomizerSubtitleTex"
static const ALIGN_ASSET(2) char gTitleRandomizerSubtitleTex[] = dgTitleRandomizerSubtitleTex; static const ALIGN_ASSET(2) char gTitleRandomizerSubtitleTex[] = dgTitleRandomizerSubtitleTex;

View file

@ -0,0 +1,123 @@
#include "Holiday.hpp"
#include "Archez.h"
#include <libultraship/libultraship.h>
#include "soh/UIWidgets.hpp"
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh_assets.h"
extern "C" {
#include "macros.h"
#include "functions.h"
#include "variables.h"
#include "objects/object_goroiwa/object_goroiwa.h"
extern PlayState* gPlayState;
}
#define AUTHOR "Archez"
#define CVAR(v) "gHoliday." AUTHOR "." v
static bool sSkipNextLimb = false;
static bool sSkipNextSkeleton = false;
extern "C" void SkipOverrideNextLimb() {
sSkipNextLimb = true;
}
extern "C" void SkipOverrideNextSkeleton() {
sSkipNextSkeleton = true;
}
extern "C" void ClearOverrideSkips() {
sSkipNextLimb = false;
sSkipNextSkeleton = false;
}
static void ConfigurationChanged() {
COND_VB_SHOULD(VB_DRAW_SKEL_LIMB, CVarGetInteger(CVAR("SnowGolems"), 0), {
if (!*should) {
return;
}
if (sSkipNextLimb) {
sSkipNextLimb = false;
return;
}
if (sSkipNextSkeleton) {
return;
}
Gfx** gfxP = va_arg(args, Gfx**);
void* dList = va_arg(args, void*);
*should = false;
Gfx* gfx = *gfxP;
Matrix_Push();
Matrix_Scale(0.55f, 0.55f, 0.55f, MTXMODE_APPLY);
gSPMatrix(gfx++, Matrix_NewMtx(gPlayState->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_LOAD);
gSPDisplayList(gfx++, (Gfx*)gSnowballDL);
Matrix_Pop();
gSPMatrix(gfx++, Matrix_NewMtx(gPlayState->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_LOAD);
*gfxP = gfx;
});
COND_VB_SHOULD(VB_DRAW_SKEL_FLEX_LIMB, CVarGetInteger(CVAR("SnowGolems"), 0), {
if (!*should) {
return;
}
if (sSkipNextLimb) {
sSkipNextLimb = false;
}
if (sSkipNextSkeleton) {
return;
}
Gfx** gfxP = va_arg(args, Gfx**);
void* dList = va_arg(args, void*);
Mtx* mtx = va_arg(args, Mtx*);
*should = false;
Gfx* gfx = *gfxP;
MtxF mtxF;
Matrix_Push();
Matrix_MtxToMtxF(mtx, &mtxF);
Matrix_Put(&mtxF);
Matrix_Scale(0.55f, 0.55f, 0.55f, MTXMODE_APPLY);
gSPMatrix(gfx++, Matrix_NewMtx(gPlayState->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_LOAD);
gSPDisplayList(gfx++, (Gfx*)gSnowballDL);
Matrix_Pop();
gSPMatrix(gfx++, mtx, G_MTX_LOAD);
*gfxP = gfx;
});
}
static void DrawMenu() {
ImGui::SeparatorText(AUTHOR);
if (UIWidgets::EnhancementCheckbox("Snow Golems", CVAR("SnowGolems"))) {
ConfigurationChanged();
}
UIWidgets::Tooltip("Overrides most charactor skeletons with snow balls to make them look like Snow Golems");
}
static void RegisterMod() {
ConfigurationChanged();
}
static Holiday holiday(DrawMenu, RegisterMod);

View file

@ -0,0 +1,17 @@
#ifndef ARCHEZ_H
#define ARCHEZ_H
#ifdef __cplusplus
extern "C" {
#endif
void SkipOverrideNextLimb();
void SkipOverrideNextSkeleton();
void ClearOverrideSkips();
#ifdef __cplusplus
}
#endif
#endif // ARCHEZ_H

View file

@ -502,6 +502,9 @@ typedef enum {
// Vanilla condition: Actor is ACTOR_EN_ELF, ACTOR_EN_FISH, ACTOR_EN_ICE_HONO, or ACTOR_EN_INSECT // Vanilla condition: Actor is ACTOR_EN_ELF, ACTOR_EN_FISH, ACTOR_EN_ICE_HONO, or ACTOR_EN_INSECT
// Opt: *Actor // Opt: *Actor
VB_BOTTLE_ACTOR, VB_BOTTLE_ACTOR,
VB_DRAW_SKEL_LIMB,
VB_DRAW_SKEL_FLEX_LIMB,
} GIVanillaBehavior; } GIVanillaBehavior;
#ifdef __cplusplus #ifdef __cplusplus

View file

@ -12,6 +12,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <soh_assets.h> #include <soh_assets.h>
#include "soh/Enhancements/Holiday/Archez.h"
typedef struct { typedef struct {
/* 0x00 */ u8 flag; /* 0x00 */ u8 flag;
@ -1422,6 +1423,10 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
sLeftHandType = PLAYER_MODELTYPE_LH_CLOSED; sLeftHandType = PLAYER_MODELTYPE_LH_CLOSED;
} }
if (sLeftHandType != PLAYER_MODELTYPE_LH_OPEN && sLeftHandType != PLAYER_MODELTYPE_LH_CLOSED) {
SkipOverrideNextLimb();
}
*dList = ResourceMgr_LoadGfxByName(dLists[sDListsLodOffset]); *dList = ResourceMgr_LoadGfxByName(dLists[sDListsLodOffset]);
} else if (limbIndex == PLAYER_LIMB_R_HAND) { } else if (limbIndex == PLAYER_LIMB_R_HAND) {
Gfx** dLists = this->rightHandDLists; Gfx** dLists = this->rightHandDLists;
@ -1433,8 +1438,13 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
sRightHandType = PLAYER_MODELTYPE_RH_CLOSED; sRightHandType = PLAYER_MODELTYPE_RH_CLOSED;
} }
if (sRightHandType != PLAYER_MODELTYPE_RH_OPEN && sRightHandType != PLAYER_MODELTYPE_RH_CLOSED) {
SkipOverrideNextLimb();
}
*dList = ResourceMgr_LoadGfxByName(dLists[sDListsLodOffset]); *dList = ResourceMgr_LoadGfxByName(dLists[sDListsLodOffset]);
} else if (limbIndex == PLAYER_LIMB_SHEATH) { } else if (limbIndex == PLAYER_LIMB_SHEATH) {
SkipOverrideNextLimb();
Gfx** dLists = this->sheathDLists; Gfx** dLists = this->sheathDLists;
if ((this->sheathType == PLAYER_MODELTYPE_SHEATH_18) || (this->sheathType == PLAYER_MODELTYPE_SHEATH_19)) { if ((this->sheathType == PLAYER_MODELTYPE_SHEATH_18) || (this->sheathType == PLAYER_MODELTYPE_SHEATH_19)) {
@ -1491,10 +1501,13 @@ s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, G
} }
*dList = sFirstPersonLeftHandDLs[handOutDlIndex]; *dList = sFirstPersonLeftHandDLs[handOutDlIndex];
} else if (limbIndex == PLAYER_LIMB_R_SHOULDER) { } else if (limbIndex == PLAYER_LIMB_R_SHOULDER) {
SkipOverrideNextLimb();
*dList = sFirstPersonRightShoulderDLs[gSaveContext.linkAge]; *dList = sFirstPersonRightShoulderDLs[gSaveContext.linkAge];
} else if (limbIndex == PLAYER_LIMB_R_FOREARM) { } else if (limbIndex == PLAYER_LIMB_R_FOREARM) {
SkipOverrideNextLimb();
*dList = sFirstPersonForearmDLs[gSaveContext.linkAge]; *dList = sFirstPersonForearmDLs[gSaveContext.linkAge];
} else if (limbIndex == PLAYER_LIMB_R_HAND) { } else if (limbIndex == PLAYER_LIMB_R_HAND) {
SkipOverrideNextLimb();
s32 firstPersonWeaponIndex = gSaveContext.linkAge; s32 firstPersonWeaponIndex = gSaveContext.linkAge;
if (CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) || CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) { if (CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) || CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) {
if (Player_HoldsBow(this)) { if (Player_HoldsBow(this)) {

View file

@ -5,6 +5,9 @@
#include <assert.h> #include <assert.h>
#include "soh/OTRGlobals.h" #include "soh/OTRGlobals.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define ANIM_INTERP 1 #define ANIM_INTERP 1
@ -45,7 +48,7 @@ void SkelAnime_DrawLimbLod(PlayState* play, s32 limbIndex, void** skeleton, Vec3
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &dList, &pos, &rot, arg)) { if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &dList, &pos, &rot, arg)) {
Matrix_TranslateRotateZYX(&pos, &rot); Matrix_TranslateRotateZYX(&pos, &rot);
if (dList != NULL) { if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, dList != NULL, &POLY_OPA_DISP, dList)) {
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_LOAD); gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, dList); gSPDisplayList(POLY_OPA_DISP++, dList);
} }
@ -105,7 +108,7 @@ void SkelAnime_DrawLod(PlayState* play, void** skeleton, Vec3s* jointTable,
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, 1, &dList, &pos, &rot, arg)) { if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, 1, &dList, &pos, &rot, arg)) {
Matrix_TranslateRotateZYX(&pos, &rot); Matrix_TranslateRotateZYX(&pos, &rot);
if (dList != NULL) { if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, dList != NULL, &POLY_OPA_DISP, dList)) {
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_LOAD); gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, dList); gSPDisplayList(POLY_OPA_DISP++, dList);
} }
@ -122,6 +125,8 @@ void SkelAnime_DrawLod(PlayState* play, void** skeleton, Vec3s* jointTable,
Matrix_Pop(); Matrix_Pop();
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
ClearOverrideSkips();
} }
/** /**
@ -158,8 +163,10 @@ void SkelAnime_DrawFlexLimbLod(PlayState* play, s32 limbIndex, void** skeleton,
MATRIX_TOMTX(*mtx); MATRIX_TOMTX(*mtx);
{ {
OPEN_DISPS(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx);
if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, true, &POLY_OPA_DISP, newDList, *mtx)) {
gSPMatrix(POLY_OPA_DISP++, *mtx, G_MTX_LOAD); gSPMatrix(POLY_OPA_DISP++, *mtx, G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, newDList); gSPDisplayList(POLY_OPA_DISP++, newDList);
}
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
} }
(*mtx)++; (*mtx)++;
@ -231,8 +238,10 @@ void SkelAnime_DrawFlexLod(PlayState* play, void** skeleton, Vec3s* jointTable,
if (newDList != NULL) { if (newDList != NULL) {
MATRIX_TOMTX(mtx); MATRIX_TOMTX(mtx);
gDPNoOpString(POLY_OPA_DISP++, "T5ST", 0); gDPNoOpString(POLY_OPA_DISP++, "T5ST", 0);
if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, true, &POLY_OPA_DISP, newDList, *mtx)) {
gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_LOAD); gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, newDList); gSPDisplayList(POLY_OPA_DISP++, newDList);
}
mtx++; mtx++;
} else if (limbDList != NULL) { } else if (limbDList != NULL) {
MATRIX_TOMTX(mtx); MATRIX_TOMTX(mtx);
@ -251,6 +260,8 @@ void SkelAnime_DrawFlexLod(PlayState* play, void** skeleton, Vec3s* jointTable,
Matrix_Pop(); Matrix_Pop();
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
ClearOverrideSkips();
} }
/** /**
@ -276,7 +287,7 @@ void SkelAnime_DrawLimbOpa(PlayState* play, s32 limbIndex, void** skeleton, Vec3
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &dList, &pos, &rot, arg)) { if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &dList, &pos, &rot, arg)) {
Matrix_TranslateRotateZYX(&pos, &rot); Matrix_TranslateRotateZYX(&pos, &rot);
if (dList != NULL) { if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, dList != NULL, &POLY_OPA_DISP, dList)) {
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_LOAD); gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, dList); gSPDisplayList(POLY_OPA_DISP++, dList);
} }
@ -358,7 +369,7 @@ void SkelAnime_DrawOpa(PlayState* play, void** skeleton, Vec3s* jointTable,
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, 1, &dList, &pos, &rot, arg)) { if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, 1, &dList, &pos, &rot, arg)) {
Matrix_TranslateRotateZYX(&pos, &rot); Matrix_TranslateRotateZYX(&pos, &rot);
if (dList != NULL) { if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, dList != NULL, &POLY_OPA_DISP, dList)) {
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_LOAD); gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, dList); gSPDisplayList(POLY_OPA_DISP++, dList);
} }
@ -375,6 +386,8 @@ void SkelAnime_DrawOpa(PlayState* play, void** skeleton, Vec3s* jointTable,
Matrix_Pop(); Matrix_Pop();
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
ClearOverrideSkips();
} }
/** /**
@ -409,8 +422,10 @@ void SkelAnime_DrawFlexLimbOpa(PlayState* play, s32 limbIndex, void** skeleton,
Matrix_TranslateRotateZYX(&pos, &rot); Matrix_TranslateRotateZYX(&pos, &rot);
if (newDList != NULL) { if (newDList != NULL) {
MATRIX_TOMTX(*limbMatricies); MATRIX_TOMTX(*limbMatricies);
if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, true, &POLY_OPA_DISP, newDList, *limbMatricies)) {
gSPMatrix(POLY_OPA_DISP++, *limbMatricies, G_MTX_LOAD); gSPMatrix(POLY_OPA_DISP++, *limbMatricies, G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, newDList); gSPDisplayList(POLY_OPA_DISP++, newDList);
}
(*limbMatricies)++; (*limbMatricies)++;
} else if (limbDList != NULL) { } else if (limbDList != NULL) {
MATRIX_TOMTX(*limbMatricies); MATRIX_TOMTX(*limbMatricies);
@ -478,8 +493,10 @@ void SkelAnime_DrawFlexOpa(PlayState* play, void** skeleton, Vec3s* jointTable,
Matrix_TranslateRotateZYX(&pos, &rot); Matrix_TranslateRotateZYX(&pos, &rot);
if (newDList != NULL) { if (newDList != NULL) {
MATRIX_TOMTX(mtx); MATRIX_TOMTX(mtx);
if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, true, &POLY_OPA_DISP, newDList, *mtx)) {
gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_LOAD); gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, newDList); gSPDisplayList(POLY_OPA_DISP++, newDList);
}
mtx++; mtx++;
} else if (limbDList != NULL) { } else if (limbDList != NULL) {
MATRIX_TOMTX(mtx); MATRIX_TOMTX(mtx);
@ -498,6 +515,8 @@ void SkelAnime_DrawFlexOpa(PlayState* play, void** skeleton, Vec3s* jointTable,
Matrix_Pop(); Matrix_Pop();
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
ClearOverrideSkips();
} }
/** /**
@ -576,7 +595,7 @@ Gfx* SkelAnime_DrawLimb(PlayState* play, s32 limbIndex, void** skeleton, Vec3s*
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &dList, &pos, &rot, arg, &gfx)) { if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &dList, &pos, &rot, arg, &gfx)) {
Matrix_TranslateRotateZYX(&pos, &rot); Matrix_TranslateRotateZYX(&pos, &rot);
if (dList != NULL) { if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, dList != NULL, &gfx, dList)) {
gSPMatrix(gfx++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_LOAD); gSPMatrix(gfx++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_LOAD);
gSPDisplayList(gfx++, dList); gSPDisplayList(gfx++, dList);
} }
@ -634,7 +653,7 @@ Gfx* SkelAnime_Draw(PlayState* play, void** skeleton, Vec3s* jointTable, Overrid
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, 1, &dList, &pos, &rot, arg, &gfx)) { if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, 1, &dList, &pos, &rot, arg, &gfx)) {
Matrix_TranslateRotateZYX(&pos, &rot); Matrix_TranslateRotateZYX(&pos, &rot);
if (dList != NULL) { if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, dList != NULL, &gfx, dList)) {
gSPMatrix(gfx++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_LOAD); gSPMatrix(gfx++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_LOAD);
gSPDisplayList(gfx++, dList); gSPDisplayList(gfx++, dList);
} }
@ -651,6 +670,8 @@ Gfx* SkelAnime_Draw(PlayState* play, void** skeleton, Vec3s* jointTable, Overrid
Matrix_Pop(); Matrix_Pop();
ClearOverrideSkips();
return gfx; return gfx;
} }
@ -681,8 +702,10 @@ Gfx* SkelAnime_DrawFlexLimb(PlayState* play, s32 limbIndex, void** skeleton, Vec
Matrix_TranslateRotateZYX(&pos, &rot); Matrix_TranslateRotateZYX(&pos, &rot);
if (newDList != NULL) { if (newDList != NULL) {
MATRIX_TOMTX(*mtx); MATRIX_TOMTX(*mtx);
if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, true, &gfx, newDList, *mtx)) {
gSPMatrix(gfx++, *mtx, G_MTX_LOAD); gSPMatrix(gfx++, *mtx, G_MTX_LOAD);
gSPDisplayList(gfx++, newDList); gSPDisplayList(gfx++, newDList);
}
(*mtx)++; (*mtx)++;
} else if (limbDList != NULL) { } else if (limbDList != NULL) {
MATRIX_TOMTX(*mtx); MATRIX_TOMTX(*mtx);
@ -746,8 +769,10 @@ Gfx* SkelAnime_DrawFlex(PlayState* play, void** skeleton, Vec3s* jointTable, s32
Matrix_TranslateRotateZYX(&pos, &rot); Matrix_TranslateRotateZYX(&pos, &rot);
if (newDList != NULL) { if (newDList != NULL) {
MATRIX_TOMTX(mtx); MATRIX_TOMTX(mtx);
if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, true, &gfx, newDList, *mtx)) {
gSPMatrix(gfx++, mtx, G_MTX_LOAD); gSPMatrix(gfx++, mtx, G_MTX_LOAD);
gSPDisplayList(gfx++, newDList); gSPDisplayList(gfx++, newDList);
}
mtx++; mtx++;
} else if (limbDList != NULL) { } else if (limbDList != NULL) {
MATRIX_TOMTX(mtx); MATRIX_TOMTX(mtx);
@ -764,6 +789,8 @@ Gfx* SkelAnime_DrawFlex(PlayState* play, void** skeleton, Vec3s* jointTable, s32
Matrix_Pop(); Matrix_Pop();
ClearOverrideSkips();
return gfx; return gfx;
} }

View file

@ -15,6 +15,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh_assets.h" #include "soh_assets.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED)
typedef enum { typedef enum {
@ -1351,6 +1353,8 @@ s32 BossGanondrof_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList,
case 15: case 15:
if ((this->actionFunc == BossGanondrof_Intro) && this->work[GND_MASK_OFF]) { if ((this->actionFunc == BossGanondrof_Intro) && this->work[GND_MASK_OFF]) {
*dList = gPhantomGanonFaceDL; *dList = gPhantomGanonFaceDL;
} else {
SkipOverrideNextLimb();
} }
rot->y += this->rideRotY[limbIndex]; rot->y += this->rideRotY[limbIndex];
rot->z += this->rideRotZ[limbIndex]; rot->z += this->rideRotZ[limbIndex];
@ -1410,6 +1414,10 @@ s32 BossGanondrof_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList,
break; break;
} }
if (limbIndex == 12) {
SkipOverrideNextLimb();
}
return 0; return 0;
} }

View file

@ -8,6 +8,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor.h" #include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED)
// IRIS_FOLLOW: gohma looks towards the player (iris rotation) // IRIS_FOLLOW: gohma looks towards the player (iris rotation)
@ -1980,6 +1982,7 @@ s32 BossGoma_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
switch (limbIndex) { switch (limbIndex) {
case BOSSGOMA_LIMB_EYE: case BOSSGOMA_LIMB_EYE:
SkipOverrideNextLimb();
if (this->eyeState == EYESTATE_IRIS_FOLLOW_BONUS_IFRAMES && this->eyeLidBottomRotX < -0xA8C) { if (this->eyeState == EYESTATE_IRIS_FOLLOW_BONUS_IFRAMES && this->eyeLidBottomRotX < -0xA8C) {
*dList = NULL; *dList = NULL;
} else if (this->invincibilityFrames != 0) { } else if (this->invincibilityFrames != 0) {
@ -1992,10 +1995,12 @@ s32 BossGoma_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
break; break;
case BOSSGOMA_LIMB_EYE_LID_BOTTOM_ROOT2: case BOSSGOMA_LIMB_EYE_LID_BOTTOM_ROOT2:
SkipOverrideNextLimb();
rot->x += this->eyeLidBottomRotX; rot->x += this->eyeLidBottomRotX;
break; break;
case BOSSGOMA_LIMB_EYE_LID_TOP_ROOT2: case BOSSGOMA_LIMB_EYE_LID_TOP_ROOT2:
SkipOverrideNextLimb();
rot->x += this->eyeLidTopRotX; rot->x += this->eyeLidTopRotX;
break; break;

View file

@ -15,6 +15,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor.h" #include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED | ACTOR_FLAG_DRAGGED_BY_HOOKSHOT) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED | ACTOR_FLAG_DRAGGED_BY_HOOKSHOT)
#define vParity actionVar #define vParity actionVar
@ -2862,6 +2864,11 @@ s32 BossSst_OverrideHeadDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
rot->z -= 0x200; rot->z -= 0x200;
} }
} }
if (limbIndex == 7) {
SkipOverrideNextLimb();
}
return false; return false;
} }

View file

@ -8,6 +8,7 @@
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include <string.h> #include <string.h>
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED)
@ -3191,6 +3192,10 @@ s32 BossTw_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
} }
} }
if (limbIndex == 14) {
SkipOverrideNextLimb();
}
return false; return false;
} }
@ -3621,6 +3626,10 @@ s32 BossTw_TwinrovaOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList,
*dList = NULL; *dList = NULL;
} }
if (limbIndex == 34 || limbIndex == 40) {
SkipOverrideNextLimb();
}
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
return false; return false;

View file

@ -19,6 +19,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor.h" #include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED)
#define GET_BODY(this) ((BossVa*)(this)->actor.parent) #define GET_BODY(this) ((BossVa*)(this)->actor.parent)
@ -3265,6 +3267,7 @@ void BossVa_Draw(Actor* thisx, PlayState* play) {
break; break;
default: default:
if (!this->isDead) { if (!this->isDead) {
SkipOverrideNextSkeleton();
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, SkelAnime_DrawSkeletonOpa(play, &this->skelAnime,
BossVa_BariOverrideLimbDraw, BossVa_BariPostLimbDraw, this); BossVa_BariOverrideLimbDraw, BossVa_BariPostLimbDraw, this);
Collider_UpdateSpheres(0, &this->colliderSph); Collider_UpdateSpheres(0, &this->colliderSph);

View file

@ -13,6 +13,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS ACTOR_FLAG_UPDATE_WHILE_CULLED #define FLAGS ACTOR_FLAG_UPDATE_WHILE_CULLED
typedef enum { typedef enum {
@ -533,6 +535,7 @@ void DoorKiller_DrawDoor(Actor* thisx, PlayState* play) {
Gfx_SetupDL_37Opa(play->state.gfxCtx); Gfx_SetupDL_37Opa(play->state.gfxCtx);
DoorKiller_SetTexture(&this->actor, play); DoorKiller_SetTexture(&this->actor, play);
SkipOverrideNextSkeleton();
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, NULL, NULL); SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, NULL, NULL);
} }

View file

@ -11,6 +11,8 @@
#include "soh_assets.h" #include "soh_assets.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_CAN_PRESS_SWITCH) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_CAN_PRESS_SWITCH)
void EnAm_Init(Actor* thisx, PlayState* play); void EnAm_Init(Actor* thisx, PlayState* play);
@ -978,6 +980,7 @@ void EnAm_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, this->textureBlend); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, this->textureBlend);
SkipOverrideNextSkeleton();
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, EnAm_PostLimbDraw, SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, EnAm_PostLimbDraw,
this); this);

View file

@ -8,6 +8,8 @@
#include "objects/gameplay_keep/gameplay_keep.h" #include "objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_gi_nuts/object_gi_nuts.h" #include "objects/object_gi_nuts/object_gi_nuts.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED) #define FLAGS (ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED)
void EnArrow_Init(Actor* thisx, PlayState* play); void EnArrow_Init(Actor* thisx, PlayState* play);
@ -501,6 +503,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) {
if (this->actor.params <= ARROW_0E) { if (this->actor.params <= ARROW_0E) {
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
SkipOverrideNextSkeleton();
SkelAnime_DrawLod(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, this, SkelAnime_DrawLod(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, this,
(this->actor.projectedPos.z < MREG(95)) ? 0 : 1); (this->actor.projectedPos.z < MREG(95)) ? 0 : 1);
} else if (this->actor.speedXZ != 0.0f) { } else if (this->actor.speedXZ != 0.0f) {

View file

@ -3,6 +3,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED)
void EnBigokuta_Init(Actor* thisx, PlayState* play); void EnBigokuta_Init(Actor* thisx, PlayState* play);
@ -868,6 +870,11 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
Matrix_Scale(1.0f, 1.25f - temp_f0, 1.25f - temp_f0, MTXMODE_APPLY); Matrix_Scale(1.0f, 1.25f - temp_f0, 1.25f - temp_f0, MTXMODE_APPLY);
} }
} }
if (limbIndex == 15 || limbIndex == 16 || limbIndex == CVarGetInteger("gMyThing", 0)) {
SkipOverrideNextLimb();
}
return false; return false;
} }

View file

@ -12,6 +12,8 @@
#include "objects/object_haka_door/object_haka_door.h" #include "objects/object_haka_door/object_haka_door.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS ACTOR_FLAG_UPDATE_WHILE_CULLED #define FLAGS ACTOR_FLAG_UPDATE_WHILE_CULLED
#define DOOR_AJAR_SLAM_RANGE 120.0f #define DOOR_AJAR_SLAM_RANGE 120.0f
@ -339,6 +341,7 @@ void EnDoor_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
SkipOverrideNextSkeleton();
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, SkelAnime_DrawSkeletonOpa(play, &this->skelAnime,
EnDoor_OverrideLimbDraw, EnDoor_OverrideLimbDraw,
NULL, &this->actor); NULL, &this->actor);

View file

@ -6,6 +6,8 @@
#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" #include "soh/Enhancements/randomizer/adult_trade_shuffle.h"
#include "soh/OTRGlobals.h" #include "soh/OTRGlobals.h"
#include "soh_assets.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED)
void EnGo_Init(Actor* thisx, PlayState* play); void EnGo_Init(Actor* thisx, PlayState* play);
@ -1055,10 +1057,15 @@ void EnGo_DrawCurledUp(EnGo* this, PlayState* play) {
Matrix_Push(); Matrix_Push();
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), if (CVarGetInteger("gHoliday.Archez.SnowGolems", 0)) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Matrix_Translate(0.0f, 10.0f, 0.0f, MTXMODE_APPLY);
Matrix_Scale(1.75f, 1.75f, 1.75f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gSnowballDL);
} else {
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00BD80); gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00BD80);
}
Matrix_MultVec3f(&D_80A41BB4, &this->actor.focus.pos); Matrix_MultVec3f(&D_80A41BB4, &this->actor.focus.pos);
Matrix_Pop(); Matrix_Pop();
@ -1075,9 +1082,15 @@ void EnGo_DrawRolling(EnGo* this, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
Matrix_RotateZYX((s16)(play->state.frames * ((s16)this->actor.speedXZ * 1400)), 0, this->actor.shape.rot.z, Matrix_RotateZYX((s16)(play->state.frames * ((s16)this->actor.speedXZ * 1400)), 0, this->actor.shape.rot.z,
MTXMODE_APPLY); MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), if (CVarGetInteger("gHoliday.Archez.SnowGolems", 0)) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Matrix_Translate(0.0f, -10.0f, 0.0f, MTXMODE_APPLY);
Matrix_Scale(1.75f, 1.75f, 1.75f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gSnowballDL);
} else {
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00C140); gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00C140);
}
Matrix_MultVec3f(&D_80A41BC0, &this->actor.focus.pos); Matrix_MultVec3f(&D_80A41BC0, &this->actor.focus.pos);
Matrix_Pop(); Matrix_Pop();

View file

@ -8,6 +8,8 @@
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.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) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED)
/* /*
@ -2010,9 +2012,15 @@ s32 EnGo2_DrawCurledUp(EnGo2* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), if (CVarGetInteger("gHoliday.Archez.SnowGolems", 0)) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Matrix_Translate(0.0f, 10.0f, 0.0f, MTXMODE_APPLY);
Matrix_Scale(1.75f, 1.75f, 1.75f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gSnowballDL);
} else {
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00BD80); gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00BD80);
}
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
Matrix_MultVec3f(&D_80A48554, &this->actor.focus.pos); Matrix_MultVec3f(&D_80A48554, &this->actor.focus.pos);
@ -2028,9 +2036,17 @@ s32 EnGo2_DrawRolling(EnGo2* this, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
speedXZ = this->actionFunc == EnGo2_ReverseRolling ? 0.0f : this->actor.speedXZ; speedXZ = this->actionFunc == EnGo2_ReverseRolling ? 0.0f : this->actor.speedXZ;
Matrix_RotateZYX((play->state.frames * ((s16)speedXZ * 1400)), 0, this->actor.shape.rot.z, MTXMODE_APPLY); Matrix_RotateZYX((play->state.frames * ((s16)speedXZ * 1400)), 0, this->actor.shape.rot.z, MTXMODE_APPLY);
if (CVarGetInteger("gHoliday.Archez.SnowGolems", 0)) {
Matrix_Translate(0.0f, -10.0f, 0.0f, MTXMODE_APPLY);
Matrix_Scale(1.75f, 1.75f, 1.75f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gSnowballDL);
} else {
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00C140); gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00C140);
}
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
Matrix_MultVec3f(&D_80A48560, &this->actor.focus.pos); Matrix_MultVec3f(&D_80A48560, &this->actor.focus.pos);
return 1; return 1;

View file

@ -7,6 +7,8 @@
#include "z_en_hata.h" #include "z_en_hata.h"
#include "objects/object_hata/object_hata.h" #include "objects/object_hata/object_hata.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS 0 #define FLAGS 0
void EnHata_Init(Actor* thisx, PlayState* play); void EnHata_Init(Actor* thisx, PlayState* play);
@ -130,6 +132,11 @@ s32 EnHata_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
rot->y += limbs[limbIndex].y; rot->y += limbs[limbIndex].y;
rot->z += limbs[limbIndex].z; rot->z += limbs[limbIndex].z;
} }
if (limbIndex == FLAGPOLE_LIMB_POLE_BASE || limbIndex == FLAGPOLE_LIMB_POLE) {
SkipOverrideNextLimb();
}
return false; return false;
} }

View file

@ -9,6 +9,8 @@
#include "vt.h" #include "vt.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS ACTOR_FLAG_UPDATE_WHILE_CULLED #define FLAGS ACTOR_FLAG_UPDATE_WHILE_CULLED
void EnHeishi1_Init(Actor* thisx, PlayState* play); void EnHeishi1_Init(Actor* thisx, PlayState* play);
@ -498,6 +500,10 @@ s32 EnHeishi1_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
rot->x += (s16)this->headAngle; rot->x += (s16)this->headAngle;
} }
if (limbIndex == 15) {
SkipOverrideNextLimb();
}
return false; return false;
} }

View file

@ -13,6 +13,8 @@
#include "overlays/actors/ovl_Bg_Spot15_Saku/z_bg_spot15_saku.h" #include "overlays/actors/ovl_Bg_Spot15_Saku/z_bg_spot15_saku.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
void EnHeishi2_Init(Actor* thisx, PlayState* play); void EnHeishi2_Init(Actor* thisx, PlayState* play);
@ -817,6 +819,10 @@ s32 EnHeishi2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
} }
} }
if (limbIndex == 15) {
SkipOverrideNextLimb();
}
return false; return false;
} }

View file

@ -9,6 +9,8 @@
#include "vt.h" #include "vt.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS 0 #define FLAGS 0
void EnHeishi3_Init(Actor* thisx, PlayState* play); void EnHeishi3_Init(Actor* thisx, PlayState* play);
@ -245,6 +247,10 @@ s32 EnHeishi3_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
rot->z += this->unk_264; rot->z += this->unk_264;
} }
if (limbIndex == 15) {
SkipOverrideNextLimb();
}
return false; return false;
} }

View file

@ -5,6 +5,8 @@
#include "soh/OTRGlobals.h" #include "soh/OTRGlobals.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
void EnHeishi4_Init(Actor* thisx, PlayState* play); void EnHeishi4_Init(Actor* thisx, PlayState* play);
@ -414,6 +416,11 @@ s32 EnHeishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
rot->x += this->unk_260.y; rot->x += this->unk_260.y;
rot->z += this->unk_260.z; rot->z += this->unk_260.z;
} }
if (limbIndex == 15) {
SkipOverrideNextLimb();
}
return false; return false;
} }

View file

@ -12,6 +12,8 @@
#include "soh_assets.h" #include "soh_assets.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS ACTOR_FLAG_UPDATE_WHILE_CULLED #define FLAGS ACTOR_FLAG_UPDATE_WHILE_CULLED
typedef void (*EnIkDrawFunc)(struct EnIk*, PlayState*); typedef void (*EnIkDrawFunc)(struct EnIk*, PlayState*);
@ -846,6 +848,11 @@ s32 EnIk_OverrideLimbDraw3(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
*dList = NULL; *dList = NULL;
} }
} }
if (limbIndex == 17) {
SkipOverrideNextLimb();
}
return false; return false;
} }
@ -1193,6 +1200,10 @@ s32 EnIk_OverrideLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
} }
} }
if (limbIndex == 17) {
SkipOverrideNextLimb();
}
return 0; return 0;
} }
@ -1359,6 +1370,7 @@ s32 EnIk_OverrideLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
if (curFrame < 120.0f) { if (curFrame < 120.0f) {
*dList = NULL; *dList = NULL;
} else { } else {
SkipOverrideNextLimb();
func_80A76E2C(this, play, pos); func_80A76E2C(this, play, pos);
} }
break; break;

View file

@ -10,6 +10,8 @@
#include "soh_assets.h" #include "soh_assets.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED) #define FLAGS (ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED)
typedef enum { typedef enum {
@ -340,6 +342,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_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); Matrix_Scale(10.0f, 10.0f, 10.0f, MTXMODE_APPLY);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(eyeTextures[this->eyeIndex])); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(eyeTextures[this->eyeIndex]));
SkipOverrideNextSkeleton();
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, EnJj_PostLimbDraw, this); SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, EnJj_PostLimbDraw, this);
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);

View file

@ -9,6 +9,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
/* /*
* This actor can have three behaviors: * This actor can have three behaviors:
* - "Spear Guard" (variable -1): uses a spear, walks around home point, charges player if too close * - "Spear Guard" (variable -1): uses a spear, walks around home point, charges player if too close
@ -1551,6 +1553,22 @@ void EnMb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
} }
} }
s32 EnMb_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) {
EnMb* this = (EnMb*)thisx;
if (this->actor.params == ENMB_TYPE_CLUB) {
if (limbIndex == ENMB_LIMB_LHAND) {
SkipOverrideNextLimb();
}
} else {
if (limbIndex == ENMB_LIMB_RHAND) {
SkipOverrideNextLimb();
}
}
return 0;
}
void EnMb_Draw(Actor* thisx, PlayState* play) { void EnMb_Draw(Actor* thisx, PlayState* play) {
static Vec3f frontShieldingTriModel0[] = { static Vec3f frontShieldingTriModel0[] = {
{ 4000.0f, 7000.0f, 3500.0f }, { 4000.0f, 7000.0f, 3500.0f },
@ -1570,7 +1588,7 @@ void EnMb_Draw(Actor* thisx, PlayState* play) {
EnMb* this = (EnMb*)thisx; EnMb* this = (EnMb*)thisx;
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, EnMb_PostLimbDraw, thisx); SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnMb_OverrideLimbDraw, EnMb_PostLimbDraw, thisx);
if (thisx->params != ENMB_TYPE_CLUB) { if (thisx->params != ENMB_TYPE_CLUB) {
if (this->attack > ENMB_ATTACK_NONE) { if (this->attack > ENMB_ATTACK_NONE) {

View file

@ -219,11 +219,11 @@ void EnSnowball_Draw(Actor* thisx, PlayState* play) {
Matrix_RotateZYX(this->sRot, thisx->world.rot.y, 0, MTXMODE_APPLY); Matrix_RotateZYX(this->sRot, thisx->world.rot.y, 0, MTXMODE_APPLY);
Matrix_Translate(0.0f, 7600.0f, -148.649f, MTXMODE_APPLY); Matrix_Translate(0.0f, 5.0f, 0.0f, MTXMODE_APPLY);
Matrix_Scale(4.844f, 4.844f, 4.844f, MTXMODE_APPLY); Matrix_Scale(0.5f, 0.5f, 0.5f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gLinkAdultPompomDL); gSPDisplayList(POLY_OPA_DISP++, gSnowballDL);
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
} }

View file

@ -10,6 +10,8 @@
#include "soh_assets.h" #include "soh_assets.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED)
void EnTest_Init(Actor* thisx, PlayState* play); void EnTest_Init(Actor* thisx, PlayState* play);
@ -1845,6 +1847,10 @@ s32 EnTest_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
*dList = NULL; *dList = NULL;
} }
if (limbIndex == STALFOS_LIMB_SWORD || limbIndex == STALFOS_LIMB_SHIELD) {
SkipOverrideNextLimb();
}
return false; return false;
} }

View file

@ -8,6 +8,8 @@
#include "objects/object_torch2/object_torch2.h" #include "objects/object_torch2/object_torch2.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED)
typedef enum { typedef enum {
@ -772,6 +774,10 @@ s32 EnTorch2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
Gfx** gfx) { Gfx** gfx) {
Player* this = (Player*)thisx; Player* this = (Player*)thisx;
if (limbIndex == PLAYER_LIMB_L_HAND || limbIndex == PLAYER_LIMB_R_HAND) {
SkipOverrideNextLimb();
}
return Player_OverrideLimbDrawGameplayCommon(play, limbIndex, dList, pos, rot, &this->actor); return Player_OverrideLimbDrawGameplayCommon(play, limbIndex, dList, pos, rot, &this->actor);
} }

View file

@ -12,6 +12,8 @@
#include "soh_assets.h" #include "soh_assets.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UPDATE_WHILE_CULLED) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UPDATE_WHILE_CULLED)
void EnVm_Init(Actor* thisx, PlayState* play); void EnVm_Init(Actor* thisx, PlayState* play);
@ -544,6 +546,7 @@ void EnVm_Draw(Actor* thisx, PlayState* play2) {
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
Gfx_SetupDL_25Xlu(play->state.gfxCtx); Gfx_SetupDL_25Xlu(play->state.gfxCtx);
SkipOverrideNextSkeleton();
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnVm_OverrideLimbDraw, SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnVm_OverrideLimbDraw,
EnVm_PostLimbDraw, this); EnVm_PostLimbDraw, this);
actorPos = this->actor.world.pos; actorPos = this->actor.world.pos;

View file

@ -10,6 +10,8 @@
#include "soh_assets.h" #include "soh_assets.h"
#include "soh/ResourceManagerHelpers.h" #include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED)
void EnZf_Init(Actor* thisx, PlayState* play); void EnZf_Init(Actor* thisx, PlayState* play);
@ -2132,11 +2134,13 @@ s32 EnZf_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po
rot->y -= this->headRot; rot->y -= this->headRot;
break; break;
case ENZF_LIMB_SWORD: case ENZF_LIMB_SWORD:
SkipOverrideNextLimb();
if (this->swordSheathed) { if (this->swordSheathed) {
*dList = gZfEmptyHandDL; *dList = gZfEmptyHandDL;
} }
break; break;
case ENZF_LIMB_SCABBARD: case ENZF_LIMB_SCABBARD:
SkipOverrideNextLimb();
if (this->swordSheathed) { if (this->swordSheathed) {
*dList = gZfSheathedSwordDL; *dList = gZfSheathedSwordDL;
} }