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 Malkierian
parent 045de62c95
commit 06aefb30f7
69 changed files with 971 additions and 496 deletions
@@ -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>
@@ -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>
@@ -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>
@@ -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>
@@ -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>
@@ -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>
+3
View File
@@ -59,6 +59,9 @@ static const ALIGN_ASSET(2) char gSkullTreasureChestFrontTex[] = dgSkullTreasure
#define dgSkullTreasureChestSideAndTopTex "__OTR__objects/object_box/gSkullTreasureChestSideAndTopTex"
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"
static const ALIGN_ASSET(2) char gTitleRandomizerSubtitleTex[] = dgTitleRandomizerSubtitleTex;
+15 -16
View File
@@ -26,40 +26,39 @@ void EnGs_Evil(EnGs* enGs, PlayState* play) {
float offsetZ = cosf(enGs->actor.shape.rot.y * (M_PI / 0x8000)) * offsetDistance;
float dx = player->actor.world.pos.x - (enGs->actor.world.pos.x + offsetX);
float dy = player->actor.world.pos.y - 10.0f - enGs->actor.world.pos.y;
float dy = player->actor.world.pos.y - 10.0f - enGs->actor.world.pos.y;
float dz = player->actor.world.pos.z - (enGs->actor.world.pos.z + offsetZ);
s16 rotX = atan2f(dy, sqrtf(dx * dx + dz * dz)) * (0x8000 / M_PI);
s16 rotY = enGs->actor.shape.rot.y;
s16 rotZ = atan2f(dx, dz) * (0x8000 / M_PI);
Actor* actor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG,
enGs->actor.world.pos.x + offsetX,
enGs->actor.world.pos.y + 40.0f,
enGs->actor.world.pos.z + offsetZ,
rotX, rotY, rotZ,
100, false);
Actor* actor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, enGs->actor.world.pos.x + offsetX,
enGs->actor.world.pos.y + 40.0f, enGs->actor.world.pos.z + offsetZ, rotX, rotY,
rotZ, 100, false);
EnClearTag* clearTag = (EnClearTag*)actor;
enGs->unk_200 = 5;
}
enGs->unk_200--;
}
}
static void OnConfigurationChanged() {
COND_ID_HOOK(OnOpenText, 0x2053, CVarGetInteger(CVAR("EvilGossipStone"), 0), [](u16 * textId, bool* loadFromMessageTable) {
Actor* actor = Actor_FindNearby(gPlayState, &GET_PLAYER(gPlayState)->actor, ACTOR_EN_GS, ACTORCAT_PROP, 100.0f);
COND_ID_HOOK(
OnOpenText, 0x2053, CVarGetInteger(CVAR("EvilGossipStone"), 0), [](u16* textId, bool* loadFromMessageTable) {
Actor* actor =
Actor_FindNearby(gPlayState, &GET_PLAYER(gPlayState)->actor, ACTOR_EN_GS, ACTORCAT_PROP, 100.0f);
if (actor == NULL) {
return;
}
if (actor == NULL) {
return;
}
EnGs* gs = (EnGs*)actor;
gs->actionFunc = EnGs_Evil;
});
EnGs* gs = (EnGs*)actor;
gs->actionFunc = EnGs_Evil;
});
}
static void DrawMenu() {
+123
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);
+16
View File
@@ -0,0 +1,16 @@
#ifndef ARCHEZ_H
#define ARCHEZ_H
#ifdef __cplusplus
extern "C" {
#endif
void SkipOverrideNextLimb();
void SkipOverrideNextSkeleton();
void ClearOverrideSkips();
#ifdef __cplusplus
}
#endif
#endif // ARCHEZ_H
+50 -61
View File
@@ -38,9 +38,9 @@ void OnTimeOver() {
}
int32_t calculateRemainingTime() {
int32_t timeRemaining =
int32_t timeRemaining =
((gSaveContext.sohStats.count[COUNT_ICE_TRAPS] * (CVarGetInteger(CVAR("ExtendTimer"), 0) * 600)) +
(CVarGetInteger(CVAR("StartTimer"), 0) * 600) - GAMEPLAYSTAT_TOTAL_TIME);
(CVarGetInteger(CVAR("StartTimer"), 0) * 600) - GAMEPLAYSTAT_TOTAL_TIME);
if (timeRemaining <= 0) {
OnTimeOver();
timeRemaining = 0;
@@ -53,7 +53,7 @@ s32 ActorSnapToFloor(Actor* refActor, PlayState* play, f32 arg2) {
Vec3f pos;
s32 bgId;
f32 floorY;
pos.x = refActor->world.pos.x;
pos.y = refActor->world.pos.y + 30.0f;
pos.z = refActor->world.pos.z;
@@ -66,7 +66,7 @@ s32 ActorSnapToFloor(Actor* refActor, PlayState* play, f32 arg2) {
}
void RandomizeBoulder(Actor* refActor) {
Actor* actor = (Actor*) refActor;
Actor* actor = (Actor*)refActor;
int16_t param = actor->params;
int32_t yAdj = 0;
uint32_t roll = rand() % boulderList.size();
@@ -75,8 +75,8 @@ void RandomizeBoulder(Actor* refActor) {
}
yAdj = ActorSnapToFloor(actor, gPlayState, 0.0f);
Actor_Spawn(&gPlayState->actorCtx, gPlayState, boulderList[roll], actor->world.pos.x, ActorSnapToFloor(actor, gPlayState, 0.0f),
actor->world.pos.z, 0, 0, 0, param, false);
Actor_Spawn(&gPlayState->actorCtx, gPlayState, boulderList[roll], actor->world.pos.x,
ActorSnapToFloor(actor, gPlayState, 0.0f), actor->world.pos.z, 0, 0, 0, param, false);
Actor_Kill(actor);
}
@@ -89,44 +89,39 @@ static void OnPresentChange() {
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
std::string msg = std::to_string(giftsCollected).c_str();
msg += " Gifts in Inventory.";
Notification::Emit({
.itemIcon = "RG_TRIFORCE_PIECE",
.message = msg
Notification::Emit({ .itemIcon = "RG_TRIFORCE_PIECE", .message = msg });
});
COND_ID_HOOK(
OnOpenText, 0x204A, CVarGetInteger(CVAR("OrnExch.Enabled"), 0), [](u16* textId, bool* loadFromMessageTable) {
auto messageEntry = CustomMessage("");
bool reduceGifts = false;
uint32_t giftsCollected = CVarGetInteger(CVAR("GiftsCollected"), 0);
uint32_t giftsRequired = CVarGetInteger(CVAR("OrnExch.Amount"), 15);
if (giftsCollected < giftsRequired) {
std::string msg = "You only have %r " + std::to_string(giftsCollected) + "%w If you bring me %g" +
std::to_string(giftsRequired) + "%w I'll give you a reward!";
messageEntry = CustomMessage(msg);
} else {
std::string msg = "A present? And %g" + std::to_string(giftsRequired) +
"%w to boot? Here's your reward, bring me more if you find any!";
messageEntry = CustomMessage(msg);
reduceGifts = true;
}
messageEntry.AutoFormat();
messageEntry.LoadIntoFont();
*loadFromMessageTable = false;
if (reduceGifts) {
vanillaQueuedItemEntry = Rando::StaticData::RetrieveItem(RG_TRIFORCE_PIECE).GetGIEntry_Copy();
giftsCollected -= giftsRequired;
CVarSetInteger(CVAR("GiftsCollected"), giftsCollected);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
std::string msg = std::to_string(giftsCollected).c_str();
msg += " Gifts in Inventory.";
Notification::Emit({ .itemIcon = "RG_TRIFORCE_PIECE", .message = msg });
}
});
});
COND_ID_HOOK(OnOpenText, 0x204A, CVarGetInteger(CVAR("OrnExch.Enabled"), 0), [](u16 * textId, bool* loadFromMessageTable) {
auto messageEntry = CustomMessage("");
bool reduceGifts = false;
uint32_t giftsCollected = CVarGetInteger(CVAR("GiftsCollected"), 0);
uint32_t giftsRequired = CVarGetInteger(CVAR("OrnExch.Amount"), 15);
if (giftsCollected < giftsRequired) {
std::string msg = "You only have %r " + std::to_string(giftsCollected) + "%w If you bring me %g"
+ std::to_string(giftsRequired) + "%w I'll give you a reward!";
messageEntry = CustomMessage(msg);
} else {
std::string msg = "A present? And %g" + std::to_string(giftsRequired) +
"%w to boot? Here's your reward, bring me more if you find any!";
messageEntry = CustomMessage(msg);
reduceGifts = true;
}
messageEntry.AutoFormat();
messageEntry.LoadIntoFont();
*loadFromMessageTable = false;
if (reduceGifts) {
vanillaQueuedItemEntry = Rando::StaticData::RetrieveItem(RG_TRIFORCE_PIECE).GetGIEntry_Copy();
giftsCollected -= giftsRequired;
CVarSetInteger(CVAR("GiftsCollected"), giftsCollected);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
std::string msg = std::to_string(giftsCollected).c_str();
msg += " Gifts in Inventory.";
Notification::Emit({
.itemIcon = "RG_TRIFORCE_PIECE",
.message = msg
});
}
});
}
static void OnBlitzChange() {
@@ -171,14 +166,10 @@ void CaladiusWindow::Draw() {
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0, 0, 0, 0.5f));
ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0));
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 4.0f);
ImGui::Begin("TimerDisplay", nullptr, ImGuiWindowFlags_AlwaysAutoResize |
ImGuiWindowFlags_NoNav |
ImGuiWindowFlags_NoFocusOnAppearing |
ImGuiWindowFlags_NoResize |
ImGuiWindowFlags_NoDocking |
ImGuiWindowFlags_NoTitleBar |
ImGuiWindowFlags_NoScrollWithMouse |
ImGuiWindowFlags_NoScrollbar);
ImGui::Begin("TimerDisplay", nullptr,
ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoFocusOnAppearing |
ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoTitleBar |
ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoScrollbar);
ImGui::SetWindowFontScale(fontScale);
ImGui::Text(formatTimestampIceTrapFever(calculateRemainingTime()).c_str());
ImGui::End();
@@ -194,14 +185,14 @@ static void DrawMenu() {
}
UIWidgets::Tooltip("Can you beat your objective before the Fever sets in?/n"
"- Obtaining Ice Traps extends your timer.");
if (UIWidgets::EnhancementSliderFloat("", "##FontScale", CVAR("FontScale"),
1.0f, 5.0f, "Font: %.1fx", 1.0f, false, false, isFeverDisabled)) {
if (UIWidgets::EnhancementSliderFloat("", "##FontScale", CVAR("FontScale"), 1.0f, 5.0f, "Font: %.1fx", 1.0f, false,
false, isFeverDisabled)) {
OnFeverConfigurationChanged();
}
UIWidgets::PaddedEnhancementSliderInt("Starting Timer: %d minutes", "##StartTime", CVAR("StartTimer"),
5, 30, "", 15, true, true, false, isFeverDisabled);
UIWidgets::PaddedEnhancementSliderInt("Time Extensions: %d minutes", "##ExtendTime", CVAR("ExtendTimer"),
1, 10, "", 5, true, true, false, isFeverDisabled);
UIWidgets::PaddedEnhancementSliderInt("Starting Timer: %d minutes", "##StartTime", CVAR("StartTimer"), 5, 30, "",
15, true, true, false, isFeverDisabled);
UIWidgets::PaddedEnhancementSliderInt("Time Extensions: %d minutes", "##ExtendTime", CVAR("ExtendTimer"), 1, 10, "",
5, true, true, false, isFeverDisabled);
UIWidgets::PaddedSeparator();
if (UIWidgets::EnhancementCheckbox("Boulder Blitz", CVAR("Blitz.Enabled"))) {
@@ -217,12 +208,10 @@ static void DrawMenu() {
}
UIWidgets::Tooltip("See Malon as Young Link in Lon Lon Ranch to exchange Gifts for Ornaments!\n"
"Note: Enabling this will set \"Gifts For NPCs\" to match.");
UIWidgets::PaddedEnhancementSliderInt("Gifts Required: %d Gifts", "##GiftsReq", CVAR("OrnExch.Amount"),
5, 30, "", 15, true, true, false, isExchangeDisabled);
UIWidgets::PaddedEnhancementSliderInt("Gifts Required: %d Gifts", "##GiftsReq", CVAR("OrnExch.Amount"), 5, 30, "",
15, true, true, false, isExchangeDisabled);
}
static void RegisterMod() {
OnFeverConfigurationChanged();
OnBlitzChange();
+3 -3
View File
@@ -4,8 +4,8 @@ class CaladiusWindow : public Ship::GuiWindow {
public:
using GuiWindow::GuiWindow;
void InitElement() override {};
void DrawElement() override {};
void InitElement() override{};
void DrawElement() override{};
void Draw() override;
void UpdateElement() override {};
void UpdateElement() override{};
};
+1 -1
View File
@@ -20,7 +20,7 @@ static void OnConfigurationChanged() {
// COND_HOOK(OnSceneSpawnActors, CVarGetInteger(CVAR("Enabled"), 0), []() {
// // Spawn your own actors?
// });
// COND_ID_HOOK(OnActorInit, ACTOR_OBJ_TSUBO, CVarGetInteger(CVAR("DoSomethingWithPots"), 0), [](void* actorRef) {
// // Do something with pots?
// });
+31 -25
View File
@@ -28,23 +28,25 @@ static CollisionPoly snowballPoly;
static f32 raycastResult;
const s16 entrances[] = {
0x0000, 0x0209, 0x0004, 0x0242, 0x0028, 0x0221, 0x0169, 0x0215, 0x0165, 0x024A, 0x0010, 0x021D, 0x0082, 0x01E1, 0x0037, 0x0205,
0x0098, 0x02A6, 0x0088, 0x03D4, 0x0008, 0x03A8, 0x0467, 0x023D, 0x0433, 0x0443, 0x0437, 0x0447, 0x009C, 0x033C, 0x00C9, 0x026A,
0x00C1, 0x0266, 0x0043, 0x03CC, 0x045F, 0x0309, 0x03A0, 0x03D0, 0x007E, 0x026E, 0x0530, 0x01D1, 0x0507, 0x03BC, 0x0388, 0x02A2,
0x0063, 0x01D5, 0x0528, 0x03C0, 0x043B, 0x0067, 0x02FD, 0x0349, 0x0550, 0x04EE, 0x039C, 0x0345, 0x05C8, 0x05DC, 0x0072, 0x034D,
0x030D, 0x0355, 0x037C, 0x03FC, 0x0380, 0x03C4, 0x004F, 0x0378, 0x02F9, 0x042F, 0x05D0, 0x05D4, 0x052C, 0x03B8, 0x016D, 0x01CD,
0x00B7, 0x0201, 0x003B, 0x0463, 0x0588, 0x057C, 0x0578, 0x0340, 0x04C2, 0x03E8, 0x04BE, 0x0482, 0x0315, 0x045B, 0x0371, 0x0394,
0x0272, 0x0211, 0x0053, 0x0472, 0x0453, 0x0351, 0x0384, 0x044B, 0x03EC, 0x04FF, 0x0700, 0x0800, 0x0701, 0x0801, 0x0702, 0x0802,
0x0703, 0x0803, 0x0704, 0x0804, 0x0705, 0x0805, 0x0706, 0x0806, 0x0707, 0x0807, 0x0708, 0x0808, 0x0709, 0x0809, 0x070A, 0x080A,
0x070B, 0x080B, 0x070C, 0x080C, 0x070D, 0x080D, 0x070E, 0x080E, 0x070F, 0x080F, 0x0710, 0x0711, 0x0811, 0x0712, 0x0812,
0x0713, 0x0813, 0x0714, 0x0814, 0x0715, 0x0815, 0x0716, 0x0816, 0x0717, 0x0817, 0x0718, 0x0818, 0x0719, 0x0819, 0x081A,
0x071B, 0x081B, 0x071C, 0x081C, 0x071D, 0x081D, 0x071E, 0x081E, 0x071F, 0x081F, 0x0720, 0x0820, 0x004B, 0x035D, 0x031C, 0x0361,
0x002D, 0x050B, 0x044F, 0x0359, 0x05E0, 0x020D, 0x011E, 0x0286, 0x04E2, 0x04D6, 0x01DD, 0x04DA, 0x00FC, 0x01A9, 0x0185, 0x04DE,
0x0102, 0x0189, 0x0117, 0x018D, 0x0276, 0x01FD, 0x00DB, 0x017D, 0x00EA, 0x0181, 0x0157, 0x01F9, 0x0328, 0x0560, 0x0129, 0x022D,
0x0130, 0x03AC, 0x0123, 0x0365, 0x00B1, 0x0033, 0x0138, 0x025A, 0x0171, 0x025E, 0x00E4, 0x0195, 0x013D, 0x0191, 0x014D, 0x01B9,
0x0246, 0x01C1, 0x0147, 0x01BD, 0x0108, 0x019D, 0x0225, 0x01A1, 0x0219, 0x027E, 0x0554, 0x00BB, 0x0282, 0x0600, 0x04F6, 0x0604,
0x01F1, 0x0568, 0x05F4, 0x040F, 0x0252, 0x040B, 0x00C5, 0x0301, 0x0407, 0x000C, 0x024E, 0x0305, 0x0175, 0x0417, 0x0423, 0x008D,
0x02F5, 0x0413, 0x02B2, 0x0457, 0x047A, 0x010E, 0x0608, 0x0564, 0x060C, 0x0610, 0x0580
0x0000, 0x0209, 0x0004, 0x0242, 0x0028, 0x0221, 0x0169, 0x0215, 0x0165, 0x024A, 0x0010, 0x021D, 0x0082, 0x01E1,
0x0037, 0x0205, 0x0098, 0x02A6, 0x0088, 0x03D4, 0x0008, 0x03A8, 0x0467, 0x023D, 0x0433, 0x0443, 0x0437, 0x0447,
0x009C, 0x033C, 0x00C9, 0x026A, 0x00C1, 0x0266, 0x0043, 0x03CC, 0x045F, 0x0309, 0x03A0, 0x03D0, 0x007E, 0x026E,
0x0530, 0x01D1, 0x0507, 0x03BC, 0x0388, 0x02A2, 0x0063, 0x01D5, 0x0528, 0x03C0, 0x043B, 0x0067, 0x02FD, 0x0349,
0x0550, 0x04EE, 0x039C, 0x0345, 0x05C8, 0x05DC, 0x0072, 0x034D, 0x030D, 0x0355, 0x037C, 0x03FC, 0x0380, 0x03C4,
0x004F, 0x0378, 0x02F9, 0x042F, 0x05D0, 0x05D4, 0x052C, 0x03B8, 0x016D, 0x01CD, 0x00B7, 0x0201, 0x003B, 0x0463,
0x0588, 0x057C, 0x0578, 0x0340, 0x04C2, 0x03E8, 0x04BE, 0x0482, 0x0315, 0x045B, 0x0371, 0x0394, 0x0272, 0x0211,
0x0053, 0x0472, 0x0453, 0x0351, 0x0384, 0x044B, 0x03EC, 0x04FF, 0x0700, 0x0800, 0x0701, 0x0801, 0x0702, 0x0802,
0x0703, 0x0803, 0x0704, 0x0804, 0x0705, 0x0805, 0x0706, 0x0806, 0x0707, 0x0807, 0x0708, 0x0808, 0x0709, 0x0809,
0x070A, 0x080A, 0x070B, 0x080B, 0x070C, 0x080C, 0x070D, 0x080D, 0x070E, 0x080E, 0x070F, 0x080F, 0x0710, 0x0711,
0x0811, 0x0712, 0x0812, 0x0713, 0x0813, 0x0714, 0x0814, 0x0715, 0x0815, 0x0716, 0x0816, 0x0717, 0x0817, 0x0718,
0x0818, 0x0719, 0x0819, 0x081A, 0x071B, 0x081B, 0x071C, 0x081C, 0x071D, 0x081D, 0x071E, 0x081E, 0x071F, 0x081F,
0x0720, 0x0820, 0x004B, 0x035D, 0x031C, 0x0361, 0x002D, 0x050B, 0x044F, 0x0359, 0x05E0, 0x020D, 0x011E, 0x0286,
0x04E2, 0x04D6, 0x01DD, 0x04DA, 0x00FC, 0x01A9, 0x0185, 0x04DE, 0x0102, 0x0189, 0x0117, 0x018D, 0x0276, 0x01FD,
0x00DB, 0x017D, 0x00EA, 0x0181, 0x0157, 0x01F9, 0x0328, 0x0560, 0x0129, 0x022D, 0x0130, 0x03AC, 0x0123, 0x0365,
0x00B1, 0x0033, 0x0138, 0x025A, 0x0171, 0x025E, 0x00E4, 0x0195, 0x013D, 0x0191, 0x014D, 0x01B9, 0x0246, 0x01C1,
0x0147, 0x01BD, 0x0108, 0x019D, 0x0225, 0x01A1, 0x0219, 0x027E, 0x0554, 0x00BB, 0x0282, 0x0600, 0x04F6, 0x0604,
0x01F1, 0x0568, 0x05F4, 0x040F, 0x0252, 0x040B, 0x00C5, 0x0301, 0x0407, 0x000C, 0x024E, 0x0305, 0x0175, 0x0417,
0x0423, 0x008D, 0x02F5, 0x0413, 0x02B2, 0x0457, 0x047A, 0x010E, 0x0608, 0x0564, 0x060C, 0x0610, 0x0580
};
static bool midoGrottoInit = false;
@@ -55,7 +57,8 @@ static Vec3s midoMorphTable[17];
static void RandomGrotto_WaitOpen(DoorAna* doorAna, PlayState* play) {
if (!midoGrottoInit) {
midoGrottoInit = true;
SkelAnime_InitFlex(play, &midoSkelAnime, (FlexSkeletonHeader*)&gMidoSkel, (AnimationHeader*)&gMidoWalkingAnim, midoJointTable, midoMorphTable, 17);
SkelAnime_InitFlex(play, &midoSkelAnime, (FlexSkeletonHeader*)&gMidoSkel, (AnimationHeader*)&gMidoWalkingAnim,
midoJointTable, midoMorphTable, 17);
}
SkelAnime_Update(&midoSkelAnime);
@@ -68,13 +71,13 @@ static void RandomGrotto_WaitOpen(DoorAna* doorAna, PlayState* play) {
Math_ApproachS(&doorAna->actor.shape.rot.y, doorAna->actor.yawTowardsPlayer, 5, 0xBB8);
if (Math_StepToF(&actor->scale.x, 0.01f, 0.001f)) {
if ((actor->targetMode != 0) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (player->stateFlags1 & PLAYER_STATE1_FLOOR_DISABLED) && (player->av1.actionVar1 == 0)) {
if ((actor->targetMode != 0) && (play->transitionTrigger == TRANS_TRIGGER_OFF) &&
(player->stateFlags1 & PLAYER_STATE1_FLOOR_DISABLED) && (player->av1.actionVar1 == 0)) {
play->nextEntranceIndex = RandomElement(entrances);
DoorAna_SetupAction((DoorAna*)actor, DoorAna_GrabPlayer);
} else {
if (!Player_InCsMode(play) && !(player->stateFlags1 & (PLAYER_STATE1_ON_HORSE | PLAYER_STATE1_IN_WATER)) &&
actor->xzDistToPlayer <= 15.0f && -50.0f <= actor->yDistToPlayer &&
actor->yDistToPlayer <= 15.0f) {
actor->xzDistToPlayer <= 15.0f && -50.0f <= actor->yDistToPlayer && actor->yDistToPlayer <= 15.0f) {
player->stateFlags1 |= PLAYER_STATE1_FLOOR_DISABLED;
actor->targetMode = 1;
} else {
@@ -92,11 +95,13 @@ static void RandomGrotto_Draw(Actor* actor, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_MODELVIEW | G_MTX_LOAD);
gSPDisplayList(POLY_XLU_DISP++, (Gfx*)gGrottoDL);
Matrix_Translate(0.0f, -2700.0f, 0.0f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_MODELVIEW | G_MTX_LOAD);
gSPSegment(POLY_OPA_DISP++, 0x08, (uintptr_t)gMidoEyeOpenTex);
func_80034BA0(play, &midoSkelAnime, NULL, NULL, actor, 255);
@@ -115,14 +120,15 @@ static void SpawnRandomGrotto() {
pos.x = 0;
pos.z = 0;
}
// X/Z anywhere from -1000.0 to +1000.0 from player
// X/Z anywhere from -1000.0 to +1000.0 from player
pos.x += (float)(Random(0, 2000)) - 1000.0f;
pos.z += (float)(Random(0, 2000)) - 1000.0f;
raycastResult = BgCheck_AnyRaycastFloor1(&gPlayState->colCtx, &snowballPoly, &pos);
if (raycastResult > BGCHECK_Y_MIN) {
Actor* grotto = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_ANA, pos.x, raycastResult, pos.z, 0, 0, 0, 0, false);
Actor* grotto = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_ANA, pos.x, raycastResult, pos.z,
0, 0, 0, 0, false);
midoGrottoInit = false;
DoorAna_SetupAction((DoorAna*)grotto, RandomGrotto_WaitOpen);
grotto->draw = RandomGrotto_Draw;
+15 -14
View File
@@ -69,7 +69,7 @@ void Penguin_Update(Actor* actor, PlayState* play) {
actor->speedXZ = 0.5f;
break;
}
Math_SmoothStepToS(&actor->world.rot.y, penguin->targetRot, 1, 200, 0);
actor->shape.rot.y = actor->world.rot.y;
@@ -89,7 +89,8 @@ void Penguin_Draw(Actor* actor, PlayState* play) {
Matrix_Scale(0.8f, 0.8f, 0.8f, MTXMODE_APPLY);
Matrix_Translate(0, 2000.0f, 0, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_MODELVIEW | G_MTX_LOAD);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gPenguinDL);
@@ -103,7 +104,7 @@ void Penguin_Destroy(Actor* actor, PlayState* play) {
static void OnConfigurationChanged() {
COND_HOOK(OnPlayerUpdate, CVarGetInteger(CVAR("Hailstorm"), 0), []() {
// Every frame has a 1/300 chance of spawning hail
if (rand() % 300 == 0) {
if (rand() % 300 == 0) {
int spawned = 0;
while (spawned < 1) {
Vec3f pos = GET_PLAYER(gPlayState)->actor.world.pos;
@@ -111,7 +112,8 @@ static void OnConfigurationChanged() {
pos.z += (float)Random(0, 100) - 50.0f;
pos.y += 200.0f;
Actor* actor = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_NUTSBALL, pos.x, pos.y, pos.z, 0, 0, 0, 0, false);
Actor* actor = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_NUTSBALL, pos.x, pos.y, pos.z, 0,
0, 0, 0, false);
EnNutsball* nut = (EnNutsball*)actor;
nut->actor.draw = EnNutsball_Draw;
nut->actor.shape.rot.y = 0;
@@ -140,15 +142,13 @@ static void OnConfigurationChanged() {
int huddlesSpawned = 0;
while (huddlesSpawned < 10) {
huddlePos.x = (float)(Random(
(gPlayState->sceneNum == SCENE_HYRULE_FIELD ? -10000 : -2700) + 10000,
(gPlayState->sceneNum == SCENE_HYRULE_FIELD ? 5000 : 2000) + 10000
) - (float)10000.0f);
huddlePos.x = (float)(Random((gPlayState->sceneNum == SCENE_HYRULE_FIELD ? -10000 : -2700) + 10000,
(gPlayState->sceneNum == SCENE_HYRULE_FIELD ? 5000 : 2000) + 10000) -
(float)10000.0f);
huddlePos.y = 5000;
huddlePos.z = (float)(Random(
(gPlayState->sceneNum == SCENE_HYRULE_FIELD ? -1000 : -2000) + 10000,
(gPlayState->sceneNum == SCENE_HYRULE_FIELD ? 15000 : 2000) + 10000
) - (float)10000.0f);
huddlePos.z = (float)(Random((gPlayState->sceneNum == SCENE_HYRULE_FIELD ? -1000 : -2000) + 10000,
(gPlayState->sceneNum == SCENE_HYRULE_FIELD ? 15000 : 2000) + 10000) -
(float)10000.0f);
if (BgCheck_AnyRaycastFloor1(&gPlayState->colCtx, &poly, &huddlePos) <= BGCHECK_Y_MIN) {
continue;
@@ -165,7 +165,8 @@ static void OnConfigurationChanged() {
raycastResult = BgCheck_AnyRaycastFloor1(&gPlayState->colCtx, &poly, &spawnPos);
if (raycastResult > BGCHECK_Y_MIN) {
Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_OE2, spawnPos.x, raycastResult, spawnPos.z, 0, 0, 0, 0, false);
Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_OE2, spawnPos.x, raycastResult, spawnPos.z,
0, 0, 0, 0, false);
penguinsSpawned++;
}
}
@@ -174,7 +175,7 @@ static void OnConfigurationChanged() {
spawningPenguins = false;
});
COND_ID_HOOK(ShouldActorInit, ACTOR_EN_OE2, CVarGetInteger(CVAR("Penguins"), 0), [](void* actorRef, bool* should) {
Actor* actor = (Actor*)actorRef;
if (spawningPenguins) {
+1 -1
View File
@@ -37,4 +37,4 @@ struct Holiday {
}
};
#endif //HOLIDAY_HPP
#endif // HOLIDAY_HPP
+28 -25
View File
@@ -23,8 +23,7 @@ bool spawningPresents = false;
int collectedPresent = 0;
struct Present {
};
struct Present {};
std::unordered_map<Actor*, Present> presents;
@@ -60,7 +59,8 @@ void Present_Draw(Actor* actor, PlayState* play) {
Matrix_Scale(30.0f, 30.0f, 30.0f, MTXMODE_APPLY);
Matrix_Translate(49.20f, 0.0f, -106.60f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_MODELVIEW | G_MTX_LOAD);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasDecor100DL);
@@ -88,7 +88,7 @@ void OnConfigChanged() {
pos.x = 0;
pos.z = 0;
}
// X/Z anywhere from -1000.0 to +1000.0 from player
// X/Z anywhere from -1000.0 to +1000.0 from player
pos.x += (float)(Random(0, 2000)) - 1000.0f;
pos.z += (float)(Random(0, 2000)) - 1000.0f;
@@ -96,7 +96,8 @@ void OnConfigChanged() {
if (raycastResult > BGCHECK_Y_MIN) {
spawningPresents = true;
Actor* actor = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_OE2, pos.x, raycastResult, pos.z, 0, 0, 0, 0, false);
Actor* actor = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_OE2, pos.x, raycastResult, pos.z,
0, 0, 0, 0, false);
spawningPresents = false;
// break;
}
@@ -105,30 +106,32 @@ void OnConfigChanged() {
}
});
COND_ID_HOOK(ShouldActorInit, ACTOR_EN_OE2, CVarGetInteger(CVAR("GiftsForNPCs"), 0), [](void* actorRef, bool* should) {
Actor* actor = (Actor*)actorRef;
if (spawningPresents) {
actor->init = Present_Init;
actor->update = Present_Update;
actor->draw = Present_Draw;
actor->destroy = Present_Destroy;
}
});
COND_ID_HOOK(ShouldActorInit, ACTOR_EN_OE2, CVarGetInteger(CVAR("GiftsForNPCs"), 0),
[](void* actorRef, bool* should) {
Actor* actor = (Actor*)actorRef;
if (spawningPresents) {
actor->init = Present_Init;
actor->update = Present_Update;
actor->draw = Present_Draw;
actor->destroy = Present_Destroy;
}
});
COND_ID_HOOK(OnOpenText, 0x1019, CVarGetInteger(CVAR("GiftsForNPCs"), 0), [](u16 * textId, bool* loadFromMessageTable) {
if (collectedPresent <= 0) {
return;
}
COND_ID_HOOK(OnOpenText, 0x1019, CVarGetInteger(CVAR("GiftsForNPCs"), 0),
[](u16* textId, bool* loadFromMessageTable) {
if (collectedPresent <= 0) {
return;
}
auto messageEntry = CustomMessage("A present??? FOR ME???");
messageEntry.Format();
messageEntry.LoadIntoFont();
*loadFromMessageTable = false;
auto messageEntry = CustomMessage("A present??? FOR ME???");
messageEntry.Format();
messageEntry.LoadIntoFont();
*loadFromMessageTable = false;
vanillaQueuedItemEntry = Rando::StaticData::RetrieveItem(RG_PIECE_OF_HEART).GetGIEntry_Copy();
vanillaQueuedItemEntry = Rando::StaticData::RetrieveItem(RG_PIECE_OF_HEART).GetGIEntry_Copy();
collectedPresent--;
});
collectedPresent--;
});
}
static void DrawMenu() {
+58 -67
View File
@@ -28,56 +28,48 @@ struct Dialog {
std::vector<DialogOption> options;
};
const std::vector<Dialog> dialogs = {
{ // 0
"Think you can defeat me? Foolish!",
{
{"You're lonely. You don't have to be.", 3, 1},
{"I'm here to end this... peacefully.", 1, 2},
{"I respect a man with ambition.", -1, 3},
}
},
{ // 1
"Lonely? Power's my only ally.",
{
{"There's more to you than that.", 3, 4},
{"I get it more than you think.", 5, 4},
{"Why not let someone in?", 2, 4},
}
},
{ // 2
"Peace? It's meaningless here.",
{
{"Maybe you've forgotten peace.", 2, 4},
{"Power isn't everything.", 4, 4},
{"Ally, not enemy.. that's my goal.", 1, 4},
}
},
{ // 3
"Respect? From you?",
{
{"We're not so different.", 3, 4},
{"Maybe I admire your strength.", 5, 4},
{"True power must be earned.", -1, 4},
}
},
{ // 4
"You're... different than I thought.",
{
{"Together, we'd be unstoppable.", 5, 5},
{"Power won't bring fulfillment.", 3, 5},
{"Let's change the world.", 4, 5},
}
},
{ // 5
"What if I trusted you with power?",
{
{"I'll protect it. And you.", 10, -1},
{"Together, we're unstoppable.", 5, -1},
{"Our way. Our history.", -3, -1},
}
}
};
const std::vector<Dialog> dialogs = { { // 0
"Think you can defeat me? Foolish!",
{
{ "You're lonely. You don't have to be.", 3, 1 },
{ "I'm here to end this... peacefully.", 1, 2 },
{ "I respect a man with ambition.", -1, 3 },
} },
{ // 1
"Lonely? Power's my only ally.",
{
{ "There's more to you than that.", 3, 4 },
{ "I get it more than you think.", 5, 4 },
{ "Why not let someone in?", 2, 4 },
} },
{ // 2
"Peace? It's meaningless here.",
{
{ "Maybe you've forgotten peace.", 2, 4 },
{ "Power isn't everything.", 4, 4 },
{ "Ally, not enemy.. that's my goal.", 1, 4 },
} },
{ // 3
"Respect? From you?",
{
{ "We're not so different.", 3, 4 },
{ "Maybe I admire your strength.", 5, 4 },
{ "True power must be earned.", -1, 4 },
} },
{ // 4
"You're... different than I thought.",
{
{ "Together, we'd be unstoppable.", 5, 5 },
{ "Power won't bring fulfillment.", 3, 5 },
{ "Let's change the world.", 4, 5 },
} },
{ // 5
"What if I trusted you with power?",
{
{ "I'll protect it. And you.", 10, -1 },
{ "Together, we're unstoppable.", 5, -1 },
{ "Our way. Our history.", -3, -1 },
} } };
static void ConfigurationChanged() {
COND_ID_HOOK(OnActorInit, ACTOR_BOSS_GANON, CVarGetInteger(CVAR("GanonDatingSim"), 0), [](void* actorRef) {
@@ -108,26 +100,25 @@ static void ConfigurationChanged() {
Message_StartTextbox(gPlayState, 0x70CB, NULL);
});
COND_ID_HOOK(OnOpenText, 0x70CB, CVarGetInteger(CVAR("GanonDatingSim"), 0), [](u16 * textId, bool* loadFromMessageTable) {
std::string message;
if (dialogIndex == -1) {
if (affection >= TARGET_AFFECTION) {
message = "I've never felt this way before...\x01Take my power, Link. I trust you.";
COND_ID_HOOK(
OnOpenText, 0x70CB, CVarGetInteger(CVAR("GanonDatingSim"), 0), [](u16* textId, bool* loadFromMessageTable) {
std::string message;
if (dialogIndex == -1) {
if (affection >= TARGET_AFFECTION) {
message = "I've never felt this way before...\x01Take my power, Link. I trust you.";
} else {
message = "Liar! You're just like the rest of\x01them! Now I must destroy you!";
}
} else {
message = "Liar! You're just like the rest of\x01them! Now I must destroy you!";
message = dialogs[dialogIndex].ganonText + "\x01\x1C" + dialogs[dialogIndex].options[0].text + "\x01" +
dialogs[dialogIndex].options[1].text + "\x01" + dialogs[dialogIndex].options[2].text;
}
} else {
message = dialogs[dialogIndex].ganonText + "\x01\x1C"
+ dialogs[dialogIndex].options[0].text + "\x01"
+ dialogs[dialogIndex].options[1].text + "\x01"
+ dialogs[dialogIndex].options[2].text;
}
auto messageEntry = CustomMessage(message);
messageEntry.Format();
messageEntry.LoadIntoFont();
*loadFromMessageTable = false;
});
auto messageEntry = CustomMessage(message);
messageEntry.Format();
messageEntry.LoadIntoFont();
*loadFromMessageTable = false;
});
}
static void DrawMenu() {
+19 -58
View File
@@ -5,7 +5,7 @@
#include "src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.h"
extern "C" {
extern PlayState* gPlayState;
extern PlayState* gPlayState;
}
#define AUTHOR "Pablo"
@@ -14,63 +14,21 @@ extern "C" {
#pragma region Shiny
static Vec3f shineSpots[12] = {
{ 20.0f, 20.0f, 0.0f }, { 10.0f, 40.0f, 10.0f }, { -10.0f, 40.0f, 10.0f }, { -20.0f, 20.0f, 0.0f },
{ 10.0f, 40.0f, -10.0f }, { -10.0f, 40.0f, -10.0f }, { 0.0f, 20.0f, -20.0f }, { 10.0f, 0.0f, 10.0f },
{ 10.0f, 0.0f, -10.0f }, { 0.0f, 20.0f, 20.0f }, { -10.0f, 0.0f, 10.0f }, { -10.0f, 0.0f, -10.0f },
{ 20.0f, 20.0f, 0.0f }, { 10.0f, 40.0f, 10.0f }, { -10.0f, 40.0f, 10.0f }, { -20.0f, 20.0f, 0.0f },
{ 10.0f, 40.0f, -10.0f }, { -10.0f, 40.0f, -10.0f }, { 0.0f, 20.0f, -20.0f }, { 10.0f, 0.0f, 10.0f },
{ 10.0f, 0.0f, -10.0f }, { 0.0f, 20.0f, 20.0f }, { -10.0f, 0.0f, 10.0f }, { -10.0f, 0.0f, -10.0f },
};
static u8 shinyableActorIds[51] = {
ACTOR_EN_WALLMAS,
ACTOR_EN_ZF,
ACTOR_EN_YUKABYUN,
ACTOR_EN_WF,
ACTOR_EN_WEIYER,
ACTOR_EN_VM,
ACTOR_EN_TUBO_TRAP,
ACTOR_EN_VALI,
ACTOR_EN_TP,
ACTOR_EN_TORCH2,
ACTOR_EN_TITE,
ACTOR_EN_TEST,
ACTOR_EN_SW,
ACTOR_EN_ST,
ACTOR_EN_SKB,
ACTOR_EN_SKJ,
ACTOR_EN_PEEHAT,
ACTOR_EN_SB,
ACTOR_EN_RR,
ACTOR_EN_REEBA,
ACTOR_EN_RD,
ACTOR_EN_PO_SISTERS,
ACTOR_EN_PO_FIELD,
ACTOR_EN_POH,
ACTOR_EN_KAREBABA,
ACTOR_EN_OKUTA,
ACTOR_EN_NY,
ACTOR_EN_MB,
ACTOR_EN_IK,
ACTOR_EN_GOMA,
ACTOR_EN_GELDB,
ACTOR_EN_FZ,
ACTOR_EN_FLOORMAS,
ACTOR_EN_FIREFLY,
ACTOR_EN_FD,
ACTOR_EN_EIYER,
ACTOR_EN_DODONGO,
ACTOR_EN_DODOJR,
ACTOR_EN_DH,
ACTOR_EN_DEKUBABA,
ACTOR_EN_CROW,
ACTOR_EN_CLEAR_TAG,
ACTOR_EN_BW,
ACTOR_EN_BUBBLE,
ACTOR_EN_AM,
ACTOR_EN_BILI,
ACTOR_EN_BIGOKUTA,
ACTOR_EN_BB,
ACTOR_EN_BA,
ACTOR_EN_ANUBICE,
ACTOR_DOOR_KILLER
ACTOR_EN_WALLMAS, ACTOR_EN_ZF, ACTOR_EN_YUKABYUN, ACTOR_EN_WF, ACTOR_EN_WEIYER, ACTOR_EN_VM,
ACTOR_EN_TUBO_TRAP, ACTOR_EN_VALI, ACTOR_EN_TP, ACTOR_EN_TORCH2, ACTOR_EN_TITE, ACTOR_EN_TEST,
ACTOR_EN_SW, ACTOR_EN_ST, ACTOR_EN_SKB, ACTOR_EN_SKJ, ACTOR_EN_PEEHAT, ACTOR_EN_SB,
ACTOR_EN_RR, ACTOR_EN_REEBA, ACTOR_EN_RD, ACTOR_EN_PO_SISTERS, ACTOR_EN_PO_FIELD, ACTOR_EN_POH,
ACTOR_EN_KAREBABA, ACTOR_EN_OKUTA, ACTOR_EN_NY, ACTOR_EN_MB, ACTOR_EN_IK, ACTOR_EN_GOMA,
ACTOR_EN_GELDB, ACTOR_EN_FZ, ACTOR_EN_FLOORMAS, ACTOR_EN_FIREFLY, ACTOR_EN_FD, ACTOR_EN_EIYER,
ACTOR_EN_DODONGO, ACTOR_EN_DODOJR, ACTOR_EN_DH, ACTOR_EN_DEKUBABA, ACTOR_EN_CROW, ACTOR_EN_CLEAR_TAG,
ACTOR_EN_BW, ACTOR_EN_BUBBLE, ACTOR_EN_AM, ACTOR_EN_BILI, ACTOR_EN_BIGOKUTA, ACTOR_EN_BB,
ACTOR_EN_BA, ACTOR_EN_ANUBICE, ACTOR_DOOR_KILLER
};
u8 CanBeShiny(Actor* actor) {
@@ -157,7 +115,8 @@ void SpawnShinyReward(Actor* actor) {
void RegisterShiny() {
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnActorInit>([](void* refActor) {
Actor* actor = static_cast<Actor*>(refActor);
if (CVarGetInteger(CVAR("Shiny.Enabled"), 0) && CanBeShiny(actor) && Rand_ZeroOne() < (1.0f / (s32)CVarGetInteger(CVAR("Shiny.Chance"), 8192))) {
if (CVarGetInteger(CVAR("Shiny.Enabled"), 0) && CanBeShiny(actor) &&
Rand_ZeroOne() < (1.0f / (s32)CVarGetInteger(CVAR("Shiny.Chance"), 8192))) {
ApplyShinyness(actor);
}
});
@@ -179,9 +138,11 @@ void RegisterShiny() {
void ShinyDrawImGui() {
UIWidgets::PaddedEnhancementCheckbox("Enable Shiny Enemies", CVAR("Shiny.Enabled"), true, false);
UIWidgets::Tooltip("Allows enemies to be shiny.\nShiny enemies are 25% bigger and have 4 times the health but drop the equivalent of a gold rupee upon death");
UIWidgets::Tooltip("Allows enemies to be shiny.\nShiny enemies are 25% bigger and have 4 times the health but drop "
"the equivalent of a gold rupee upon death");
UIWidgets::PaddedEnhancementSliderInt("Shiny Chance: %d", "##ShinyChance", CVAR("Shiny.Chance"), 1, 8192, "", 8192, true, true, false, false, "");
UIWidgets::PaddedEnhancementSliderInt("Shiny Chance: %d", "##ShinyChance", CVAR("Shiny.Chance"), 1, 8192, "", 8192,
true, true, false, false, "");
UIWidgets::Tooltip("The chance for an enemy to be shiny is 1 / Shiny Chance");
}
+36 -46
View File
@@ -30,11 +30,7 @@ static Vec3f snowballPos;
static f32 raycastResult;
static u32 iceBlockParams[] = {
0x214,
0x1,
0x11,
0x10,
0x20,
0x214, 0x1, 0x11, 0x10, 0x20,
};
static void SpawnSnowballs() {
@@ -45,21 +41,19 @@ static void SpawnSnowballs() {
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.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);
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);
Actor_Spawn(&gPlayState->actorCtx, gPlayState, gEnSnowballId, snowballPos.x, raycastResult, snowballPos.z,
0, 0, 0, gPlayState->sceneNum == SCENE_HYRULE_FIELD, 0);
actorsSpawned++;
}
}
@@ -76,15 +70,9 @@ static void SpawnIcebergs() {
while (actorsSpawned < 15) {
Vec3f iceBlockPos;
iceBlockPos.x = (float)(Random(
(-4200) + 10000,
(3000) + 10000
) - (float)10000.0f);
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);
iceBlockPos.z = (float)(Random((2600) + 10000, (9000) + 10000) - (float)10000.0f);
raycastResult = BgCheck_AnyRaycastFloor1(&gPlayState->colCtx, &snowballPoly, &iceBlockPos);
@@ -117,36 +105,38 @@ static void SpawnIcebergs() {
}
const s16 entrances[] = {
0x0000, 0x0209, 0x0004, 0x0242, 0x0028, 0x0221, 0x0169, 0x0215, 0x0165, 0x024A, 0x0010, 0x021D, 0x0082, 0x01E1, 0x0037, 0x0205,
0x0098, 0x02A6, 0x0088, 0x03D4, 0x0008, 0x03A8, 0x0467, 0x023D, 0x0433, 0x0443, 0x0437, 0x0447, 0x009C, 0x033C, 0x00C9, 0x026A,
0x00C1, 0x0266, 0x0043, 0x03CC, 0x045F, 0x0309, 0x03A0, 0x03D0, 0x007E, 0x026E, 0x0530, 0x01D1, 0x0507, 0x03BC, 0x0388, 0x02A2,
0x0063, 0x01D5, 0x0528, 0x03C0, 0x043B, 0x0067, 0x02FD, 0x0349, 0x0550, 0x04EE, 0x039C, 0x0345, 0x05C8, 0x05DC, 0x0072, 0x034D,
0x030D, 0x0355, 0x037C, 0x03FC, 0x0380, 0x03C4, 0x004F, 0x0378, 0x02F9, 0x042F, 0x05D0, 0x05D4, 0x052C, 0x03B8, 0x016D, 0x01CD,
0x00B7, 0x0201, 0x003B, 0x0463, 0x0588, 0x057C, 0x0578, 0x0340, 0x04C2, 0x03E8, 0x04BE, 0x0482, 0x0315, 0x045B, 0x0371, 0x0394,
0x0272, 0x0211, 0x0053, 0x0472, 0x0453, 0x0351, 0x0384, 0x044B, 0x03EC, 0x04FF, 0x0700, 0x0800, 0x0701, 0x0801, 0x0702, 0x0802,
0x0703, 0x0803, 0x0704, 0x0804, 0x0705, 0x0805, 0x0706, 0x0806, 0x0707, 0x0807, 0x0708, 0x0808, 0x0709, 0x0809, 0x070A, 0x080A,
0x070B, 0x080B, 0x070C, 0x080C, 0x070D, 0x080D, 0x070E, 0x080E, 0x070F, 0x080F, 0x0710, 0x0711, 0x0811, 0x0712, 0x0812,
0x0713, 0x0813, 0x0714, 0x0814, 0x0715, 0x0815, 0x0716, 0x0816, 0x0717, 0x0817, 0x0718, 0x0818, 0x0719, 0x0819, 0x081A,
0x071B, 0x081B, 0x071C, 0x081C, 0x071D, 0x081D, 0x071E, 0x081E, 0x071F, 0x081F, 0x0720, 0x0820, 0x004B, 0x035D, 0x031C, 0x0361,
0x002D, 0x050B, 0x044F, 0x0359, 0x05E0, 0x020D, 0x011E, 0x0286, 0x04E2, 0x04D6, 0x01DD, 0x04DA, 0x00FC, 0x01A9, 0x0185, 0x04DE,
0x0102, 0x0189, 0x0117, 0x018D, 0x0276, 0x01FD, 0x00DB, 0x017D, 0x00EA, 0x0181, 0x0157, 0x01F9, 0x0328, 0x0560, 0x0129, 0x022D,
0x0130, 0x03AC, 0x0123, 0x0365, 0x00B1, 0x0033, 0x0138, 0x025A, 0x0171, 0x025E, 0x00E4, 0x0195, 0x013D, 0x0191, 0x014D, 0x01B9,
0x0246, 0x01C1, 0x0147, 0x01BD, 0x0108, 0x019D, 0x0225, 0x01A1, 0x0219, 0x027E, 0x0554, 0x00BB, 0x0282, 0x0600, 0x04F6, 0x0604,
0x01F1, 0x0568, 0x05F4, 0x040F, 0x0252, 0x040B, 0x00C5, 0x0301, 0x0407, 0x000C, 0x024E, 0x0305, 0x0175, 0x0417, 0x0423, 0x008D,
0x02F5, 0x0413, 0x02B2, 0x0457, 0x047A, 0x010E, 0x0608, 0x0564, 0x060C, 0x0610, 0x0580
0x0000, 0x0209, 0x0004, 0x0242, 0x0028, 0x0221, 0x0169, 0x0215, 0x0165, 0x024A, 0x0010, 0x021D, 0x0082, 0x01E1,
0x0037, 0x0205, 0x0098, 0x02A6, 0x0088, 0x03D4, 0x0008, 0x03A8, 0x0467, 0x023D, 0x0433, 0x0443, 0x0437, 0x0447,
0x009C, 0x033C, 0x00C9, 0x026A, 0x00C1, 0x0266, 0x0043, 0x03CC, 0x045F, 0x0309, 0x03A0, 0x03D0, 0x007E, 0x026E,
0x0530, 0x01D1, 0x0507, 0x03BC, 0x0388, 0x02A2, 0x0063, 0x01D5, 0x0528, 0x03C0, 0x043B, 0x0067, 0x02FD, 0x0349,
0x0550, 0x04EE, 0x039C, 0x0345, 0x05C8, 0x05DC, 0x0072, 0x034D, 0x030D, 0x0355, 0x037C, 0x03FC, 0x0380, 0x03C4,
0x004F, 0x0378, 0x02F9, 0x042F, 0x05D0, 0x05D4, 0x052C, 0x03B8, 0x016D, 0x01CD, 0x00B7, 0x0201, 0x003B, 0x0463,
0x0588, 0x057C, 0x0578, 0x0340, 0x04C2, 0x03E8, 0x04BE, 0x0482, 0x0315, 0x045B, 0x0371, 0x0394, 0x0272, 0x0211,
0x0053, 0x0472, 0x0453, 0x0351, 0x0384, 0x044B, 0x03EC, 0x04FF, 0x0700, 0x0800, 0x0701, 0x0801, 0x0702, 0x0802,
0x0703, 0x0803, 0x0704, 0x0804, 0x0705, 0x0805, 0x0706, 0x0806, 0x0707, 0x0807, 0x0708, 0x0808, 0x0709, 0x0809,
0x070A, 0x080A, 0x070B, 0x080B, 0x070C, 0x080C, 0x070D, 0x080D, 0x070E, 0x080E, 0x070F, 0x080F, 0x0710, 0x0711,
0x0811, 0x0712, 0x0812, 0x0713, 0x0813, 0x0714, 0x0814, 0x0715, 0x0815, 0x0716, 0x0816, 0x0717, 0x0817, 0x0718,
0x0818, 0x0719, 0x0819, 0x081A, 0x071B, 0x081B, 0x071C, 0x081C, 0x071D, 0x081D, 0x071E, 0x081E, 0x071F, 0x081F,
0x0720, 0x0820, 0x004B, 0x035D, 0x031C, 0x0361, 0x002D, 0x050B, 0x044F, 0x0359, 0x05E0, 0x020D, 0x011E, 0x0286,
0x04E2, 0x04D6, 0x01DD, 0x04DA, 0x00FC, 0x01A9, 0x0185, 0x04DE, 0x0102, 0x0189, 0x0117, 0x018D, 0x0276, 0x01FD,
0x00DB, 0x017D, 0x00EA, 0x0181, 0x0157, 0x01F9, 0x0328, 0x0560, 0x0129, 0x022D, 0x0130, 0x03AC, 0x0123, 0x0365,
0x00B1, 0x0033, 0x0138, 0x025A, 0x0171, 0x025E, 0x00E4, 0x0195, 0x013D, 0x0191, 0x014D, 0x01B9, 0x0246, 0x01C1,
0x0147, 0x01BD, 0x0108, 0x019D, 0x0225, 0x01A1, 0x0219, 0x027E, 0x0554, 0x00BB, 0x0282, 0x0600, 0x04F6, 0x0604,
0x01F1, 0x0568, 0x05F4, 0x040F, 0x0252, 0x040B, 0x00C5, 0x0301, 0x0407, 0x000C, 0x024E, 0x0305, 0x0175, 0x0417,
0x0423, 0x008D, 0x02F5, 0x0413, 0x02B2, 0x0457, 0x047A, 0x010E, 0x0608, 0x0564, 0x060C, 0x0610, 0x0580
};
static void RandomGrotto_WaitOpen(DoorAna* doorAna, PlayState* play) {
Actor* actor = &doorAna->actor;
Player* player = GET_PLAYER(play);
if (Math_StepToF(&actor->scale.x, 0.01f, 0.001f)) {
if ((actor->targetMode != 0) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (player->stateFlags1 & PLAYER_STATE1_FLOOR_DISABLED) && (player->av1.actionVar1 == 0)) {
if ((actor->targetMode != 0) && (play->transitionTrigger == TRANS_TRIGGER_OFF) &&
(player->stateFlags1 & PLAYER_STATE1_FLOOR_DISABLED) && (player->av1.actionVar1 == 0)) {
play->nextEntranceIndex = RandomElement(entrances);
DoorAna_SetupAction((DoorAna*)actor, DoorAna_GrabPlayer);
} else {
if (!Player_InCsMode(play) && !(player->stateFlags1 & (PLAYER_STATE1_ON_HORSE | PLAYER_STATE1_IN_WATER)) &&
actor->xzDistToPlayer <= 15.0f && -50.0f <= actor->yDistToPlayer &&
actor->yDistToPlayer <= 15.0f) {
actor->xzDistToPlayer <= 15.0f && -50.0f <= actor->yDistToPlayer && actor->yDistToPlayer <= 15.0f) {
player->stateFlags1 |= PLAYER_STATE1_FLOOR_DISABLED;
actor->targetMode = 1;
} else {
@@ -169,21 +159,21 @@ static void SpawnRandomGrotto() {
pos.x = 0;
pos.z = 0;
}
// X/Z anywhere from -1000.0 to +1000.0 from player
// X/Z anywhere from -1000.0 to +1000.0 from player
pos.x += (float)(Random(0, 2000)) - 1000.0f;
pos.z += (float)(Random(0, 2000)) - 1000.0f;
raycastResult = BgCheck_AnyRaycastFloor1(&gPlayState->colCtx, &snowballPoly, &pos);
if (raycastResult > BGCHECK_Y_MIN) {
Actor* grotto = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_ANA, pos.x, raycastResult, pos.z, 0, 0, 0, 0, false);
Actor* grotto = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_ANA, pos.x, raycastResult, pos.z,
0, 0, 0, 0, false);
DoorAna_SetupAction((DoorAna*)grotto, RandomGrotto_WaitOpen);
break;
}
spawnAttempts++;
}
}
static void ConfigurationChanged() {
+5 -5
View File
@@ -14,7 +14,7 @@ extern PlayState* gPlayState;
}
static void ConfigurationChanged() {
COND_ID_HOOK(OnOpenText, 0x406B, IS_RANDO, [](u16 * textId, bool* loadFromMessageTable) {
COND_ID_HOOK(OnOpenText, 0x406B, IS_RANDO, [](u16* textId, bool* loadFromMessageTable) {
if (gPlayState->sceneNum != SCENE_KAKARIKO_VILLAGE) {
return;
}
@@ -24,7 +24,8 @@ static void ConfigurationChanged() {
uint8_t required = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED);
if (current < required) {
message = "The %yChristmas tree%w seems to be&missing some of %gits magic%w... Find all&ornaments to save %rChristmas%w!";
message = "The %yChristmas tree%w seems to be&missing some of %gits magic%w... Find all&ornaments to save "
"%rChristmas%w!";
} else {
message = "The tree's magic has been fully&restored. %gMerry %rChristmas%w!";
}
@@ -41,9 +42,8 @@ static void RegisterMod() {
ConfigurationChanged();
// #endregion
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnLoadGame>([](int16_t fileNum) {
ConfigurationChanged();
});
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnLoadGame>(
[](int16_t fileNum) { ConfigurationChanged(); });
}
static Holiday holiday([]() {}, RegisterMod);
+21 -21
View File
@@ -29,32 +29,32 @@ static void ConfigurationChanged() {
Player* player = GET_PLAYER(gPlayState);
// Roc's Feather behaviour
if (*usedItem == ITEM_NAYRUS_LOVE) {
*should = false;
if (*usedItem == ITEM_NAYRUS_LOVE) {
*should = false;
if (!rocsUseCount) {
rocsUseCount++;
player->linearVelocity = 5.0f;
player->actor.velocity.y = 8.0f;
player->actor.world.rot.y = player->yaw = player->actor.shape.rot.y;
if (!rocsUseCount) {
rocsUseCount++;
player->linearVelocity = 5.0f;
player->actor.velocity.y = 8.0f;
player->actor.world.rot.y = player->yaw = player->actor.shape.rot.y;
func_80838940(player, (LinkAnimationHeader*)&gPlayerAnim_link_fighter_backturn_jump,
!(2 & 1) ? 5.8f : 3.5f, gPlayState, 0);
func_80838940(player, (LinkAnimationHeader*)&gPlayerAnim_link_fighter_backturn_jump,
!(2 & 1) ? 5.8f : 3.5f, gPlayState, 0);
Vec3f effectsPos = player->actor.home.pos;
effectsPos.y += 3;
f32 effectsScale = 1;
if (!gSaveContext.linkAge) {
effectsScale = 1.5f;
}
EffectSsGRipple_Spawn(gPlayState, &effectsPos, 200 * effectsScale, 300 * effectsScale, 1);
EffectSsGSplash_Spawn(gPlayState, &effectsPos, NULL, NULL, 0, 150 * effectsScale);
Vec3f effectsPos = player->actor.home.pos;
effectsPos.y += 3;
f32 effectsScale = 1;
if (!gSaveContext.linkAge) {
effectsScale = 1.5f;
}
EffectSsGRipple_Spawn(gPlayState, &effectsPos, 200 * effectsScale, 300 * effectsScale, 1);
EffectSsGSplash_Spawn(gPlayState, &effectsPos, NULL, NULL, 0, 150 * effectsScale);
player->stateFlags2 &= ~(PLAYER_STATE2_HOPPING);
player->stateFlags2 &= ~(PLAYER_STATE2_HOPPING);
Player_PlaySfx(&player->actor, NA_SE_PL_SKIP);
}
}
Player_PlaySfx(&player->actor, NA_SE_PL_SKIP);
}
}
});
}
+14 -17
View File
@@ -13,8 +13,8 @@ extern PlayState* gPlayState;
#include "src/overlays/actors/ovl_En_Bom/z_en_bom.h"
extern "C" {
void func_809B45E0(EnArrow*, PlayState*);
void func_809B4640(EnArrow*, PlayState*);
void func_809B45E0(EnArrow*, PlayState*);
void func_809B4640(EnArrow*, PlayState*);
}
#define AUTHOR "lilDavid"
@@ -49,15 +49,14 @@ static void OnConfigurationChanged() {
});
COND_ID_HOOK(OnActorInit, ACTOR_EN_ARROW, CVarGetInteger(CVAR("BombArrows.Enabled"), 0), [](void* actorRef) {
EnArrow* arrow = (EnArrow*) actorRef;
if (!CVarGetInteger(CVAR("BombArrows.Active"), 0) ||
arrow->actor.params != ARROW_NORMAL || AMMO(ITEM_BOMB) == 0 ||
gSaveContext.minigameState == 1 || gPlayState->shootingGalleryStatus > 1)
EnArrow* arrow = (EnArrow*)actorRef;
if (!CVarGetInteger(CVAR("BombArrows.Active"), 0) || arrow->actor.params != ARROW_NORMAL ||
AMMO(ITEM_BOMB) == 0 || gSaveContext.minigameState == 1 || gPlayState->shootingGalleryStatus > 1)
return;
EnBom* bomb = (EnBom*) Actor_SpawnAsChild(&gPlayState->actorCtx, &arrow->actor, gPlayState, ACTOR_EN_BOM,
arrow->actor.world.pos.x, arrow->actor.world.pos.y, arrow->actor.world.pos.z,
0, 0, 0, BOMB_BODY);
EnBom* bomb = (EnBom*)Actor_SpawnAsChild(&gPlayState->actorCtx, &arrow->actor, gPlayState, ACTOR_EN_BOM,
arrow->actor.world.pos.x, arrow->actor.world.pos.y,
arrow->actor.world.pos.z, 0, 0, 0, BOMB_BODY);
if (bomb == nullptr)
return;
@@ -66,11 +65,11 @@ static void OnConfigurationChanged() {
});
COND_ID_HOOK(OnActorUpdate, ACTOR_EN_ARROW, CVarGetInteger(CVAR("BombArrows.Enabled"), 0), [](void* actorRef) {
EnArrow* arrow = (EnArrow*) actorRef;
EnArrow* arrow = (EnArrow*)actorRef;
if (!arrow->actor.child || arrow->actor.child->id != ACTOR_EN_BOM)
return;
EnBom* bomb = (EnBom*) arrow->actor.child;
EnBom* bomb = (EnBom*)arrow->actor.child;
bomb->actor.world.pos = arrow->actor.world.pos;
f32 r = 8.0f;
f32 xrot = arrow->actor.world.rot.x;
@@ -88,10 +87,8 @@ static void OnConfigurationChanged() {
bomb->timer = 62;
}
if (arrow->actionFunc == func_809B45E0 ||
arrow->actionFunc == func_809B4640 ||
arrow->actor.params == ARROW_NORMAL_LIT)
{
if (arrow->actionFunc == func_809B45E0 || arrow->actionFunc == func_809B4640 ||
arrow->actor.params == ARROW_NORMAL_LIT) {
arrow->actor.child = nullptr;
bomb->actor.parent = nullptr;
bomb->timer = 2;
@@ -100,14 +97,14 @@ static void OnConfigurationChanged() {
});
COND_ID_HOOK(OnActorKill, ACTOR_EN_ARROW, CVarGetInteger(CVAR("BombArrows.Enabled"), 0), [](void* actorRef) {
EnArrow* arrow = (EnArrow*) actorRef;
EnArrow* arrow = (EnArrow*)actorRef;
if (!arrow->actor.child || arrow->actor.child->id != ACTOR_EN_BOM)
return;
Actor_Kill(arrow->actor.child);
});
COND_ID_HOOK(OnActorUpdate, ACTOR_EN_BOM, CVarGetInteger(CVAR("BombArrows.Enabled"), 0), [](void* actorRef) {
EnBom* bomb = (EnBom*) actorRef;
EnBom* bomb = (EnBom*)actorRef;
if (!bomb->actor.parent || bomb->actor.parent->id != ACTOR_EN_ARROW)
return;
@@ -15,12 +15,13 @@ extern PlayState* gPlayState;
}
EnItem00* CustomCollectible::Spawn(f32 posX, f32 posY, f32 posZ, s16 rot, s16 flags, s16 params, ActorFunc actionFunc,
ActorFunc drawFunc) {
ActorFunc drawFunc) {
if (!gPlayState) {
return nullptr;
}
Actor* actor = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_ITEM00, posX, posY, posZ, flags, rot, params, ITEM00_NONE, 0);
Actor* actor = Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_ITEM00, posX, posY, posZ, flags, rot, params,
ITEM00_NONE, 0);
EnItem00* enItem00 = (EnItem00*)actor;
if (actionFunc != NULL) {
@@ -179,14 +179,14 @@ struct HookInfo {
hookId = GameInteractor::Instance->RegisterGameHookForID<GameInteractor::hookType>(id, body); \
} \
}
#define COND_VB_SHOULD(id, condition, body) \
{ \
static HOOK_ID hookId = 0; \
#define COND_VB_SHOULD(id, condition, body) \
{ \
static HOOK_ID hookId = 0; \
GameInteractor::Instance->UnregisterGameHookForID<GameInteractor::OnVanillaBehavior>(hookId); \
hookId = 0; \
if (condition) { \
hookId = REGISTER_VB_SHOULD(id, body); \
} \
hookId = 0; \
if (condition) { \
hookId = REGISTER_VB_SHOULD(id, body); \
} \
}
#define COND_HOOK(hookType, condition, body) \
+2 -1
View File
@@ -657,4 +657,5 @@ void InitMods() {
RegisterPatchHandHandler();
RegisterHurtContainerModeHandler();
RandoKaleido_RegisterHooks();
RegisterHoliday();}
RegisterHoliday();
}
@@ -128,9 +128,9 @@ void Settings::CreateOptionDescriptions() {
"When the required amount of ornaments have been found, the game is saved and Ganon's Boss key is given "
"to you when you load back into the game if you desire to beat Ganon afterwards.\n\n"
"Keep in mind Ganon might not be logically beatable when \"All Locations Reachable\" is turned off.";
mOptionDescriptions[RSK_TRIFORCE_HUNT_PIECES_TOTAL] =
"The amount of Ornaments that will be placed in the world. "
"Keep in mind seed generation can fail if more ornaments are placed than there are junk items in the item pool.";
mOptionDescriptions[RSK_TRIFORCE_HUNT_PIECES_TOTAL] = "The amount of Ornaments that will be placed in the world. "
"Keep in mind seed generation can fail if more ornaments are "
"placed than there are junk items in the item pool.";
mOptionDescriptions[RSK_TRIFORCE_HUNT_PIECES_REQUIRED] = "The amount of Ornaments required to win the game.";
mOptionDescriptions[RSK_SHUFFLE_DUNGEON_ENTRANCES] =
"Shuffle the pool of dungeon entrances, including Bottom of the Well, Ice Cavern and Gerudo Training Ground.\n"
+6 -6
View File
@@ -1316,12 +1316,12 @@ extern "C" void InitOTR(int argc, char* argv[]) {
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(CVAR_GENERAL("LetItSnow"), 1);
// } else {
// CVarClear(CVAR_GENERAL("LetItSnow"));
// }
CVarRegisterInteger(CVAR_GENERAL("LetItSnow"), 1);
CVarRegisterInteger(CVAR_COSMETIC("Hud.AButton.Changed"), 1);
CVarRegisterColor(CVAR_COSMETIC("Hud.AButton.Value"), Color_RGBA8{ 255, 255, 255, 255 });
+2 -1
View File
@@ -776,7 +776,8 @@ size_t SohUtils::CopyStringToCharBuffer(char* buffer, const std::string& source,
int SohUtils::CopyStringToCharBuffer(const std::string& inputStr, char* buffer, const int maxBufferSize) {
if (!inputStr.empty()) {
// Prevent potential horrible overflow due to implicit conversion of maxBufferSize to an unsigned. Prevents negatives.
// Prevent potential horrible overflow due to implicit conversion of maxBufferSize to an unsigned. Prevents
// negatives.
memset(buffer, 0, std::max<int>(0, maxBufferSize));
// Gaurentee that this value will be greater than 0, regardless of passed variables.
const int copiedCharLen = std::min<int>(std::max<int>(0, maxBufferSize - 1), inputStr.length());
+2 -1
View File
@@ -3352,7 +3352,8 @@ Actor* Actor_Spawn(ActorContext* actorCtx, PlayState* play, s16 actorId, f32 pos
objBankIndex = Object_GetIndex(&gPlayState->objectCtx, dbEntry->objectId);
if (objBankIndex < 0 && (!gMapLoading || CVarGetInteger(CVAR_ENHANCEMENT("RandomizedEnemies"), 0) || CVarGetInteger("gHoliday.Caladius.Blitz.Enabled", 0))) {
if (objBankIndex < 0 && (!gMapLoading || CVarGetInteger(CVAR_ENHANCEMENT("RandomizedEnemies"), 0) ||
CVarGetInteger("gHoliday.Caladius.Blitz.Enabled", 0))) {
objBankIndex = 0;
}
+19 -16
View File
@@ -1879,13 +1879,9 @@ u8 Item_Give(PlayState* play, u8 item) {
return ITEM_NONE;
}
//prevents getting sticks without the bag in case something got missed
if (
IS_RANDO &&
(item == ITEM_STICK || item == ITEM_STICKS_5 || item == ITEM_STICKS_10) &&
Randomizer_GetSettingValue(RSK_SHUFFLE_DEKU_STICK_BAG) &&
CUR_UPG_VALUE(UPG_STICKS) == 0
) {
// prevents getting sticks without the bag in case something got missed
if (IS_RANDO && (item == ITEM_STICK || item == ITEM_STICKS_5 || item == ITEM_STICKS_10) &&
Randomizer_GetSettingValue(RSK_SHUFFLE_DEKU_STICK_BAG) && CUR_UPG_VALUE(UPG_STICKS) == 0) {
return item;
}
@@ -4957,8 +4953,8 @@ void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) {
ammo = AMMO(i);
if (CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0) &&
gSaveContext.equips.buttonItems[button] == ITEM_BOW &&
AMMO(ITEM_BOMB) != 0 && AMMO(ITEM_BOMB) < AMMO(ITEM_BOW)) {
gSaveContext.equips.buttonItems[button] == ITEM_BOW && AMMO(ITEM_BOMB) != 0 &&
AMMO(ITEM_BOMB) < AMMO(ITEM_BOW)) {
ammo = AMMO(ITEM_BOMB);
}
@@ -5597,7 +5593,8 @@ void Interface_Draw(PlayState* play) {
if (gSaveContext.equips.buttonItems[1] < 0xF0) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->cLeftAlpha);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
if (gSaveContext.equips.buttonItems[1] == ITEM_BOW && CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
if (gSaveContext.equips.buttonItems[1] == ITEM_BOW &&
CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
Interface_DrawItemIconTexture(play, gItemIcons[ITEM_BOMB], 1);
}
Interface_DrawItemIconTexture(play, gItemIcons[gSaveContext.equips.buttonItems[1]], 1);
@@ -5613,7 +5610,8 @@ void Interface_Draw(PlayState* play) {
if (gSaveContext.equips.buttonItems[2] < 0xF0) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->cDownAlpha);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
if (gSaveContext.equips.buttonItems[2] == ITEM_BOW && CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
if (gSaveContext.equips.buttonItems[2] == ITEM_BOW &&
CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
Interface_DrawItemIconTexture(play, gItemIcons[ITEM_BOMB], 2);
}
Interface_DrawItemIconTexture(play, gItemIcons[gSaveContext.equips.buttonItems[2]], 2);
@@ -5629,7 +5627,8 @@ void Interface_Draw(PlayState* play) {
if (gSaveContext.equips.buttonItems[3] < 0xF0) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->cRightAlpha);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
if (gSaveContext.equips.buttonItems[3] == ITEM_BOW && CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
if (gSaveContext.equips.buttonItems[3] == ITEM_BOW &&
CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
Interface_DrawItemIconTexture(play, gItemIcons[ITEM_BOMB], 3);
}
Interface_DrawItemIconTexture(play, gItemIcons[gSaveContext.equips.buttonItems[3]], 3);
@@ -5698,7 +5697,8 @@ void Interface_Draw(PlayState* play) {
if (gSaveContext.equips.buttonItems[4] < 0xF0) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->dpadUpAlpha);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
if (gSaveContext.equips.buttonItems[4] == ITEM_BOW && CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
if (gSaveContext.equips.buttonItems[4] == ITEM_BOW &&
CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
Interface_DrawItemIconTexture(play, gItemIcons[ITEM_BOMB], 4);
}
Interface_DrawItemIconTexture(play, gItemIcons[gSaveContext.equips.buttonItems[4]], 4);
@@ -5712,7 +5712,8 @@ void Interface_Draw(PlayState* play) {
if (gSaveContext.equips.buttonItems[5] < 0xF0) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->dpadDownAlpha);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
if (gSaveContext.equips.buttonItems[5] == ITEM_BOW && CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
if (gSaveContext.equips.buttonItems[5] == ITEM_BOW &&
CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
Interface_DrawItemIconTexture(play, gItemIcons[ITEM_BOMB], 5);
}
Interface_DrawItemIconTexture(play, gItemIcons[gSaveContext.equips.buttonItems[5]], 5);
@@ -5726,7 +5727,8 @@ void Interface_Draw(PlayState* play) {
if (gSaveContext.equips.buttonItems[6] < 0xF0) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->dpadLeftAlpha);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
if (gSaveContext.equips.buttonItems[6] == ITEM_BOW && CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
if (gSaveContext.equips.buttonItems[6] == ITEM_BOW &&
CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
Interface_DrawItemIconTexture(play, gItemIcons[ITEM_BOMB], 6);
}
Interface_DrawItemIconTexture(play, gItemIcons[gSaveContext.equips.buttonItems[6]], 6);
@@ -5740,7 +5742,8 @@ void Interface_Draw(PlayState* play) {
if (gSaveContext.equips.buttonItems[7] < 0xF0) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->dpadRightAlpha);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
if (gSaveContext.equips.buttonItems[7] == ITEM_BOW && CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
if (gSaveContext.equips.buttonItems[7] == ITEM_BOW &&
CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
Interface_DrawItemIconTexture(play, gItemIcons[ITEM_BOMB], 7);
}
Interface_DrawItemIconTexture(play, gItemIcons[gSaveContext.equips.buttonItems[7]], 7);
+13
View File
@@ -12,6 +12,7 @@
#include <stdlib.h>
#include "soh_assets.h"
#include "soh/Enhancements/Holiday/Archez.h"
typedef struct {
/* 0x00 */ u8 flag;
@@ -1391,6 +1392,10 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
sLeftHandType = PLAYER_MODELTYPE_LH_CLOSED;
}
if (sLeftHandType != PLAYER_MODELTYPE_LH_OPEN && sLeftHandType != PLAYER_MODELTYPE_LH_CLOSED) {
SkipOverrideNextLimb();
}
*dList = ResourceMgr_LoadGfxByName(dLists[sDListsLodOffset]);
} else if (limbIndex == PLAYER_LIMB_R_HAND) {
Gfx** dLists = this->rightHandDLists;
@@ -1403,8 +1408,13 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
sRightHandType = PLAYER_MODELTYPE_RH_CLOSED;
}
if (sRightHandType != PLAYER_MODELTYPE_RH_OPEN && sRightHandType != PLAYER_MODELTYPE_RH_CLOSED) {
SkipOverrideNextLimb();
}
*dList = ResourceMgr_LoadGfxByName(dLists[sDListsLodOffset]);
} else if (limbIndex == PLAYER_LIMB_SHEATH) {
SkipOverrideNextLimb();
Gfx** dLists = this->sheathDLists;
if ((this->sheathType == PLAYER_MODELTYPE_SHEATH_18) || (this->sheathType == PLAYER_MODELTYPE_SHEATH_19)) {
@@ -1468,10 +1478,13 @@ s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, G
}
*dList = sFirstPersonLeftHandDLs[handOutDlIndex];
} else if (limbIndex == PLAYER_LIMB_R_SHOULDER) {
SkipOverrideNextLimb();
*dList = sFirstPersonRightShoulderDLs[gSaveContext.linkAge];
} else if (limbIndex == PLAYER_LIMB_R_FOREARM) {
SkipOverrideNextLimb();
*dList = sFirstPersonForearmDLs[gSaveContext.linkAge];
} else if (limbIndex == PLAYER_LIMB_R_HAND) {
SkipOverrideNextLimb();
s32 firstPersonWeaponIndex = gSaveContext.linkAge;
if (CVarGetInteger(CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), 0) ||
CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) {
+43 -18
View File
@@ -5,6 +5,7 @@
#include <assert.h>
#include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define ANIM_INTERP 1
@@ -45,7 +46,7 @@ void SkelAnime_DrawLimbLod(PlayState* play, s32 limbIndex, void** skeleton, Vec3
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &dList, &pos, &rot, arg)) {
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);
gSPDisplayList(POLY_OPA_DISP++, dList);
}
@@ -105,7 +106,7 @@ void SkelAnime_DrawLod(PlayState* play, void** skeleton, Vec3s* jointTable, Over
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, 1, &dList, &pos, &rot, arg)) {
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);
gSPDisplayList(POLY_OPA_DISP++, dList);
}
@@ -121,6 +122,8 @@ void SkelAnime_DrawLod(PlayState* play, void** skeleton, Vec3s* jointTable, Over
Matrix_Pop();
CLOSE_DISPS(play->state.gfxCtx);
ClearOverrideSkips();
}
/**
@@ -157,8 +160,10 @@ void SkelAnime_DrawFlexLimbLod(PlayState* play, s32 limbIndex, void** skeleton,
MATRIX_TOMTX(*mtx);
{
OPEN_DISPS(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, *mtx, G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, newDList);
if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, true, &POLY_OPA_DISP, newDList, *mtx)) {
gSPMatrix(POLY_OPA_DISP++, *mtx, G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, newDList);
}
CLOSE_DISPS(play->state.gfxCtx);
}
(*mtx)++;
@@ -230,8 +235,10 @@ void SkelAnime_DrawFlexLod(PlayState* play, void** skeleton, Vec3s* jointTable,
if (newDList != NULL) {
MATRIX_TOMTX(mtx);
gDPNoOpString(POLY_OPA_DISP++, "T5ST", 0);
gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, newDList);
if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, true, &POLY_OPA_DISP, newDList, *mtx)) {
gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, newDList);
}
mtx++;
} else if (limbDList != NULL) {
MATRIX_TOMTX(mtx);
@@ -250,6 +257,8 @@ void SkelAnime_DrawFlexLod(PlayState* play, void** skeleton, Vec3s* jointTable,
Matrix_Pop();
CLOSE_DISPS(play->state.gfxCtx);
ClearOverrideSkips();
}
/**
@@ -275,7 +284,7 @@ void SkelAnime_DrawLimbOpa(PlayState* play, s32 limbIndex, void** skeleton, Vec3
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &dList, &pos, &rot, arg)) {
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);
gSPDisplayList(POLY_OPA_DISP++, dList);
}
@@ -356,7 +365,7 @@ void SkelAnime_DrawOpa(PlayState* play, void** skeleton, Vec3s* jointTable, Over
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, 1, &dList, &pos, &rot, arg)) {
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);
gSPDisplayList(POLY_OPA_DISP++, dList);
}
@@ -373,6 +382,8 @@ void SkelAnime_DrawOpa(PlayState* play, void** skeleton, Vec3s* jointTable, Over
Matrix_Pop();
CLOSE_DISPS(play->state.gfxCtx);
ClearOverrideSkips();
}
/**
@@ -407,8 +418,10 @@ void SkelAnime_DrawFlexLimbOpa(PlayState* play, s32 limbIndex, void** skeleton,
Matrix_TranslateRotateZYX(&pos, &rot);
if (newDList != NULL) {
MATRIX_TOMTX(*limbMatricies);
gSPMatrix(POLY_OPA_DISP++, *limbMatricies, G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, newDList);
if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, true, &POLY_OPA_DISP, newDList, *limbMatricies)) {
gSPMatrix(POLY_OPA_DISP++, *limbMatricies, G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, newDList);
}
(*limbMatricies)++;
} else if (limbDList != NULL) {
MATRIX_TOMTX(*limbMatricies);
@@ -476,8 +489,10 @@ void SkelAnime_DrawFlexOpa(PlayState* play, void** skeleton, Vec3s* jointTable,
Matrix_TranslateRotateZYX(&pos, &rot);
if (newDList != NULL) {
MATRIX_TOMTX(mtx);
gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, newDList);
if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, true, &POLY_OPA_DISP, newDList, *mtx)) {
gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, newDList);
}
mtx++;
} else if (limbDList != NULL) {
MATRIX_TOMTX(mtx);
@@ -496,6 +511,8 @@ void SkelAnime_DrawFlexOpa(PlayState* play, void** skeleton, Vec3s* jointTable,
Matrix_Pop();
CLOSE_DISPS(play->state.gfxCtx);
ClearOverrideSkips();
}
/**
@@ -574,7 +591,7 @@ Gfx* SkelAnime_DrawLimb(PlayState* play, s32 limbIndex, void** skeleton, Vec3s*
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &dList, &pos, &rot, arg, &gfx)) {
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);
gSPDisplayList(gfx++, dList);
}
@@ -630,7 +647,7 @@ Gfx* SkelAnime_Draw(PlayState* play, void** skeleton, Vec3s* jointTable, Overrid
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, 1, &dList, &pos, &rot, arg, &gfx)) {
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);
gSPDisplayList(gfx++, dList);
}
@@ -646,6 +663,8 @@ Gfx* SkelAnime_Draw(PlayState* play, void** skeleton, Vec3s* jointTable, Overrid
Matrix_Pop();
ClearOverrideSkips();
return gfx;
}
@@ -676,8 +695,10 @@ Gfx* SkelAnime_DrawFlexLimb(PlayState* play, s32 limbIndex, void** skeleton, Vec
Matrix_TranslateRotateZYX(&pos, &rot);
if (newDList != NULL) {
MATRIX_TOMTX(*mtx);
gSPMatrix(gfx++, *mtx, G_MTX_LOAD);
gSPDisplayList(gfx++, newDList);
if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, true, &gfx, newDList, *mtx)) {
gSPMatrix(gfx++, *mtx, G_MTX_LOAD);
gSPDisplayList(gfx++, newDList);
}
(*mtx)++;
} else if (limbDList != NULL) {
MATRIX_TOMTX(*mtx);
@@ -741,8 +762,10 @@ Gfx* SkelAnime_DrawFlex(PlayState* play, void** skeleton, Vec3s* jointTable, s32
Matrix_TranslateRotateZYX(&pos, &rot);
if (newDList != NULL) {
MATRIX_TOMTX(mtx);
gSPMatrix(gfx++, mtx, G_MTX_LOAD);
gSPDisplayList(gfx++, newDList);
if (GameInteractor_Should(VB_DRAW_SKEL_LIMB, true, &gfx, newDList, *mtx)) {
gSPMatrix(gfx++, mtx, G_MTX_LOAD);
gSPDisplayList(gfx++, newDList);
}
mtx++;
} else if (limbDList != NULL) {
MATRIX_TOMTX(mtx);
@@ -759,6 +782,8 @@ Gfx* SkelAnime_DrawFlex(PlayState* play, void** skeleton, Vec3s* jointTable, s32
Matrix_Pop();
ClearOverrideSkips();
return gfx;
}
@@ -573,7 +573,8 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) {
Play_ChangeCameraStatus(play, this->csCamIndex, CAM_STAT_ACTIVE);
this->csCamFov = 60.0f;
if (Flags_GetEventChkInf(EVENTCHKINF_BEGAN_GANONDORF_BATTLE) || IS_RANDO || IS_BOSS_RUSH || CVarGetInteger("gHoliday.NotProxySaw.GanonDatingSim", 0)) {
if (Flags_GetEventChkInf(EVENTCHKINF_BEGAN_GANONDORF_BATTLE) || IS_RANDO || IS_BOSS_RUSH ||
CVarGetInteger("gHoliday.NotProxySaw.GanonDatingSim", 0)) {
// watched cutscene already, skip most of it
this->csState = 17;
this->csTimer = 0;
@@ -14,10 +14,10 @@
#include "soh/OTRGlobals.h"
#include "soh_assets.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
ACTOR_FLAG_DRAW_CULLING_DISABLED)
#define FLAGS \
(ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_DRAW_WHILE_CULLED)
typedef enum {
/* 0 */ THROW_NORMAL,
@@ -1351,6 +1351,8 @@ s32 BossGanondrof_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList,
case 15:
if ((this->actionFunc == BossGanondrof_Intro) && this->work[GND_MASK_OFF]) {
*dList = gPhantomGanonFaceDL;
} else {
SkipOverrideNextLimb();
}
rot->y += this->rideRotY[limbIndex];
rot->z += this->rideRotZ[limbIndex];
@@ -1410,6 +1412,10 @@ s32 BossGanondrof_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList,
break;
}
if (limbIndex == 12) {
SkipOverrideNextLimb();
}
return 0;
}
@@ -8,6 +8,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
ACTOR_FLAG_DRAW_CULLING_DISABLED)
@@ -1981,6 +1983,7 @@ s32 BossGoma_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
switch (limbIndex) {
case BOSSGOMA_LIMB_EYE:
SkipOverrideNextLimb();
if (this->eyeState == EYESTATE_IRIS_FOLLOW_BONUS_IFRAMES && this->eyeLidBottomRotX < -0xA8C) {
*dList = NULL;
} else if (this->invincibilityFrames != 0) {
@@ -1993,10 +1996,12 @@ s32 BossGoma_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
break;
case BOSSGOMA_LIMB_EYE_LID_BOTTOM_ROOT2:
SkipOverrideNextLimb();
rot->x += this->eyeLidBottomRotX;
break;
case BOSSGOMA_LIMB_EYE_LID_TOP_ROOT2:
SkipOverrideNextLimb();
rot->x += this->eyeLidTopRotX;
break;
@@ -15,6 +15,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER)
@@ -2865,6 +2867,11 @@ s32 BossSst_OverrideHeadDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
rot->z -= 0x200;
}
}
if (limbIndex == 7) {
SkipOverrideNextLimb();
}
return false;
}
@@ -8,6 +8,7 @@
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include <string.h>
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
@@ -3194,6 +3195,10 @@ s32 BossTw_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
}
}
if (limbIndex == 14) {
SkipOverrideNextLimb();
}
return false;
}
@@ -3610,6 +3615,10 @@ s32 BossTw_TwinrovaOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList,
*dList = NULL;
}
if (limbIndex == 34 || limbIndex == 40) {
SkipOverrideNextLimb();
}
CLOSE_DISPS(play->state.gfxCtx);
return false;
@@ -19,6 +19,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
ACTOR_FLAG_DRAW_CULLING_DISABLED)
@@ -3253,6 +3255,7 @@ void BossVa_Draw(Actor* thisx, PlayState* play) {
break;
default:
if (!this->isDead) {
SkipOverrideNextSkeleton();
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, BossVa_BariOverrideLimbDraw, BossVa_BariPostLimbDraw,
this);
Collider_UpdateSpheres(0, &this->colliderSph);
@@ -13,6 +13,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef enum {
@@ -533,6 +535,7 @@ void DoorKiller_DrawDoor(Actor* thisx, PlayState* play) {
Gfx_SetupDL_37Opa(play->state.gfxCtx);
DoorKiller_SetTexture(&this->actor, play);
SkipOverrideNextSkeleton();
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, NULL, NULL);
}
@@ -11,6 +11,8 @@
#include "soh/ResourceManagerHelpers.h"
#include "soh_assets.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
ACTOR_FLAG_CAN_PRESS_SWITCHES)
@@ -985,6 +987,7 @@ void EnAm_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, this->textureBlend);
SkipOverrideNextSkeleton();
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, EnAm_PostLimbDraw, this);
if (this->iceTimer != 0) {
@@ -8,6 +8,8 @@
#include "objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_gi_nuts/object_gi_nuts.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
void EnArrow_Init(Actor* thisx, PlayState* play);
@@ -508,6 +510,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) {
if (this->actor.params <= ARROW_0E) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
SkipOverrideNextSkeleton();
SkelAnime_DrawLod(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, this,
(this->actor.projectedPos.z < MREG(95)) ? 0 : 1);
} else if (this->actor.speedXZ != 0.0f) {
@@ -3,6 +3,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
ACTOR_FLAG_DRAW_CULLING_DISABLED)
@@ -869,6 +871,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);
}
}
if (limbIndex == 15 || limbIndex == 16 || limbIndex == CVarGetInteger("gMyThing", 0)) {
SkipOverrideNextLimb();
}
return false;
}
@@ -287,8 +287,8 @@ void EnBom_Update(Actor* thisx, PlayState* play2) {
// spawn spark effect on even frames
effPos = thisx->world.pos;
if (CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0) &&
thisx->parent && thisx->parent->id == ACTOR_EN_ARROW) {
if (CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0) && thisx->parent &&
thisx->parent->id == ACTOR_EN_ARROW) {
effPos.y += 5.0f;
} else {
effPos.y += 17.0f;
@@ -20,11 +20,9 @@ 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) {
@@ -36,7 +34,8 @@ void EnChristmasDeco_Draw(Actor* thisx, PlayState* play) {
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);
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) {
@@ -162,7 +162,7 @@ void EnChristmasTree_Update(Actor* thisx, PlayState* 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 /
@@ -173,7 +173,8 @@ void EnChristmasTree_Draw(Actor* thisx, PlayState* play) {
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);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_MODELVIEW | G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gXmasTreeDL);
@@ -13,6 +13,8 @@
#include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
#define DOOR_AJAR_SLAM_RANGE 120.0f
@@ -345,6 +347,7 @@ void EnDoor_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL_25Opa(play->state.gfxCtx);
SkipOverrideNextSkeleton();
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnDoor_OverrideLimbDraw, NULL, &this->actor);
if (this->actor.world.rot.y != 0) {
if (this->actor.world.rot.y > 0) {
+20 -7
View File
@@ -5,6 +5,8 @@
#include "soh/frame_interpolation.h"
#include "soh/OTRGlobals.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
ACTOR_FLAG_DRAW_CULLING_DISABLED)
@@ -1054,11 +1056,15 @@ void EnGo_DrawCurledUp(EnGo* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
Matrix_Push();
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00BD80);
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), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00BD80);
}
Matrix_MultVec3f(&D_80A41BB4, &this->actor.focus.pos);
Matrix_Pop();
@@ -1075,8 +1081,15 @@ void EnGo_DrawRolling(EnGo* this, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
Matrix_RotateZYX((s16)(play->state.frames * ((s16)this->actor.speedXZ * 1400)), 0, this->actor.shape.rot.z,
MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00C140);
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), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00C140);
}
Matrix_MultVec3f(&D_80A41BC0, &this->actor.focus.pos);
Matrix_Pop();
+20 -6
View File
@@ -7,6 +7,8 @@
#include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
ACTOR_FLAG_DRAW_CULLING_DISABLED)
@@ -2028,10 +2030,15 @@ void EnGo2_Update(Actor* thisx, PlayState* play) {
s32 EnGo2_DrawCurledUp(EnGo2* this, PlayState* play) {
Vec3f D_80A48554 = { 0.0f, 0.0f, 0.0f };
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00BD80);
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), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00BD80);
}
CLOSE_DISPS(play->state.gfxCtx);
Matrix_MultVec3f(&D_80A48554, &this->actor.focus.pos);
@@ -2047,8 +2054,15 @@ s32 EnGo2_DrawRolling(EnGo2* this, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
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);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00C140);
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), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gGoronDL_00C140);
}
CLOSE_DISPS(play->state.gfxCtx);
Matrix_MultVec3f(&D_80A48560, &this->actor.focus.pos);
return 1;
@@ -7,6 +7,8 @@
#include "z_en_hata.h"
#include "objects/object_hata/object_hata.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS 0
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->z += limbs[limbIndex].z;
}
if (limbIndex == FLAGPOLE_LIMB_POLE_BASE || limbIndex == FLAGPOLE_LIMB_POLE) {
SkipOverrideNextLimb();
}
return false;
}
@@ -9,6 +9,8 @@
#include "vt.h"
#include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
void EnHeishi1_Init(Actor* thisx, PlayState* play);
@@ -495,6 +497,10 @@ s32 EnHeishi1_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
rot->x += (s16)this->headAngle;
}
if (limbIndex == 15) {
SkipOverrideNextLimb();
}
return false;
}
@@ -15,6 +15,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY)
void EnHeishi2_Init(Actor* thisx, PlayState* play);
@@ -832,6 +834,10 @@ s32 EnHeishi2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
}
}
if (limbIndex == 15) {
SkipOverrideNextLimb();
}
return false;
}
@@ -9,6 +9,8 @@
#include "vt.h"
#include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS 0
void EnHeishi3_Init(Actor* thisx, PlayState* play);
@@ -243,6 +245,10 @@ s32 EnHeishi3_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
rot->z += this->unk_264;
}
if (limbIndex == 15) {
SkipOverrideNextLimb();
}
return false;
}
@@ -5,6 +5,8 @@
#include "soh/ResourceManagerHelpers.h"
#include "soh_assets.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY)
void EnHeishi4_Init(Actor* thisx, PlayState* play);
@@ -415,6 +417,11 @@ s32 EnHeishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
rot->x += this->unk_260.y;
rot->z += this->unk_260.z;
}
if (limbIndex == 15) {
SkipOverrideNextLimb();
}
return false;
}
@@ -12,6 +12,8 @@
#include "soh/ResourceManagerHelpers.h"
#include "soh_assets.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
typedef void (*EnIkDrawFunc)(struct EnIk*, PlayState*);
@@ -851,6 +853,11 @@ s32 EnIk_OverrideLimbDraw3(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
*dList = NULL;
}
}
if (limbIndex == 17) {
SkipOverrideNextLimb();
}
return false;
}
@@ -1195,6 +1202,10 @@ s32 EnIk_OverrideLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
}
}
if (limbIndex == 17) {
SkipOverrideNextLimb();
}
return 0;
}
@@ -1356,6 +1367,7 @@ s32 EnIk_OverrideLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
if (curFrame < 120.0f) {
*dList = NULL;
} else {
SkipOverrideNextLimb();
func_80A76E2C(this, play, pos);
}
break;
@@ -10,6 +10,8 @@
#include "soh/ResourceManagerHelpers.h"
#include "soh_assets.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED)
typedef enum {
@@ -339,6 +341,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]));
SkipOverrideNextSkeleton();
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, EnJj_PostLimbDraw, this);
CLOSE_DISPS(play->state.gfxCtx);
+19 -1
View File
@@ -9,6 +9,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
/*
* This actor can have three behaviors:
* - "Spear Guard" (variable -1): uses a spear, walks around home point, charges player if too close
@@ -1553,6 +1555,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) {
static Vec3f frontShieldingTriModel0[] = {
{ 4000.0f, 7000.0f, 3500.0f },
@@ -1572,7 +1590,7 @@ void EnMb_Draw(Actor* thisx, PlayState* play) {
EnMb* this = (EnMb*)thisx;
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 (this->attack > ENMB_ATTACK_NONE) {
@@ -183,9 +183,9 @@ void EnNutsball_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
//if ((CVarGetInteger(CVAR_ENHANCEMENT("NewDrops"), 0) != 0) || CVarGetInteger(CVAR_GENERAL("LetItSnow"), 0)) {
// Gfx_SetupDL_25Opa(play->state.gfxCtx);
// f32 scale = 12.0f;
// if ((CVarGetInteger(CVAR_ENHANCEMENT("NewDrops"), 0) != 0) || CVarGetInteger(CVAR_GENERAL("LetItSnow"), 0)) {
// Gfx_SetupDL_25Opa(play->state.gfxCtx);
// 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));
@@ -554,7 +554,7 @@ void EnOkuta_ProjectileFly(EnOkuta* this, PlayState* play) {
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_EN_OCTAROCK_ROCK);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_PL_ICE_BROKEN);
Actor_Kill(&this->actor);
}
@@ -767,16 +767,16 @@ void EnOkuta_Draw(Actor* thisx, PlayState* play) {
} else {
OPEN_DISPS(play->state.gfxCtx);
//if (CVarGetInteger(CVAR_ENHANCEMENT("NewDrops"), 0) != 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);
// if (CVarGetInteger(CVAR_ENHANCEMENT("NewDrops"), 0) != 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);
if ((CVarGetInteger(CVAR_ENHANCEMENT("NewDrops"), 0) != 0) || CVarGetInteger(CVAR_GENERAL("LetItSnow"), 0)) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
f32 scale = 12.0f;
@@ -63,7 +63,7 @@ void EnSnowball_InitCollider(EnSnowball* this, PlayState* play) {
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_VEC3F_DIV1000(scale, 5, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 1500, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneScale, 150, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneDownward, 1500, ICHAIN_STOP),
};
@@ -111,7 +111,7 @@ void EnSnowball_Update(Actor* thisx, PlayState* play) {
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);
}
@@ -200,7 +200,8 @@ void EnSnowball_Update(Actor* thisx, PlayState* play) {
Actor_MoveXZGravity(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);
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
@@ -10,6 +10,8 @@
#include "soh/ResourceManagerHelpers.h"
#include "soh_assets.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnTest_Init(Actor* thisx, PlayState* play);
@@ -1845,6 +1847,10 @@ s32 EnTest_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
*dList = NULL;
}
if (limbIndex == STALFOS_LIMB_SWORD || limbIndex == STALFOS_LIMB_SHIELD) {
SkipOverrideNextLimb();
}
return false;
}
@@ -8,6 +8,8 @@
#include "objects/object_torch2/object_torch2.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS \
(ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED | \
ACTOR_FLAG_DRAW_CULLING_DISABLED)
@@ -780,6 +782,10 @@ s32 EnTorch2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
Gfx** gfx) {
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);
}
@@ -12,6 +12,8 @@
#include "soh/ResourceManagerHelpers.h"
#include "soh_assets.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnVm_Init(Actor* thisx, PlayState* play);
@@ -543,6 +545,7 @@ void EnVm_Draw(Actor* thisx, PlayState* play2) {
Gfx_SetupDL_25Opa(play->state.gfxCtx);
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
SkipOverrideNextSkeleton();
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnVm_OverrideLimbDraw, EnVm_PostLimbDraw, this);
actorPos = this->actor.world.pos;
func_80033C30(&actorPos, &D_80B2EB7C, 255, play);
@@ -458,17 +458,17 @@ 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 = 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 = 180;
// green = 155;
// blue = 0;
red = 255;
green = 255;
blue = 255;
+5 -1
View File
@@ -9,6 +9,8 @@
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/Holiday/Archez.h"
#define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_UPDATE_CULLING_DISABLED)
void EnZf_Init(Actor* thisx, PlayState* play);
@@ -2130,11 +2132,13 @@ s32 EnZf_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po
rot->y -= this->headRot;
break;
case ENZF_LIMB_SWORD:
SkipOverrideNextLimb();
if (this->swordSheathed) {
*dList = gZfEmptyHandDL;
}
break;
case ENZF_LIMB_SCABBARD:
SkipOverrideNextLimb();
if (this->swordSheathed) {
*dList = gZfSheathedSwordDL;
}
@@ -2431,4 +2435,4 @@ s32 EnZf_DodgeRangedWaiting(PlayState* play, EnZf* this) {
void EnZf_Reset(void) {
D_80B4A1B0 = 0;
D_80B4A1B4 = 1;
}
}
@@ -84,34 +84,42 @@ void EndTitle_DrawFull(Actor* thisx, PlayState* play) {
if ((frameCount > 850 || isKak) && (this->ootAlpha < 200)) {
this->ootAlpha += 15;
}
OVERLAY_DISP = Gfx_SetupDL_64(OVERLAY_DISP);
if (this->actor.params == 2) {
gSPGrayscale(OVERLAY_DISP++, false);
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);
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);
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);
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);
gVisMonoColor.a = 0;
//D_801614B0.r = 205;
//D_801614B0.g = 168;
//D_801614B0.b = 130;
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);
//gSPGrayscale(OVERLAY_DISP++, true);
gVisMonoColor.a = 0;
// D_801614B0.r = 205;
// D_801614B0.g = 168;
// D_801614B0.b = 130;
// gSPGrayscale(OVERLAY_DISP++, true);
} else if (gVisMonoColor.a > 0) {
gSPGrayscale(OVERLAY_DISP++, false);
gDPSetTextureLUT(OVERLAY_DISP++, G_TT_NONE);
@@ -7340,20 +7340,16 @@ s32 Player_ActionHandler_2(Player* this, PlayState* play) {
Item_CheckObtainability(giEntry.itemId) == ITEM_NONE || IS_RANDO;
// Only skip cutscenes for drops when they're items/consumables from bushes/rocks/enemies.
uint8_t isDropToSkip =
(
interactedActor->id == ACTOR_EN_ITEM00 &&
interactedActor->params != ITEM00_HEART_PIECE &&
interactedActor->params != ITEM00_SMALL_KEY &&
interactedActor->params != ITEM00_NONE &&
interactedActor->params != ITEM00_SOH_GIVE_ITEM_ENTRY &&
interactedActor->params != ITEM00_SOH_GIVE_ITEM_ENTRY_GI
) ||
interactedActor->id == ACTOR_EN_KAREBABA ||
interactedActor->id == ACTOR_EN_DEKUBABA;
uint8_t isDropToSkip =
(interactedActor->id == ACTOR_EN_ITEM00 && interactedActor->params != ITEM00_HEART_PIECE &&
interactedActor->params != ITEM00_SMALL_KEY && interactedActor->params != ITEM00_NONE &&
interactedActor->params != ITEM00_SOH_GIVE_ITEM_ENTRY &&
interactedActor->params != ITEM00_SOH_GIVE_ITEM_ENTRY_GI) ||
interactedActor->id == ACTOR_EN_KAREBABA || interactedActor->id == ACTOR_EN_DEKUBABA;
// Skip cutscenes from picking up consumables with "Fast Pickup Text" enabled, even when the player never picked it up before.
// But only for bushes/rocks/enemies because otherwise it can lead to softlocks in deku mask theatre and potentially other places.
// Skip cutscenes from picking up consumables with "Fast Pickup Text" enabled, even when the player
// never picked it up before. But only for bushes/rocks/enemies because otherwise it can lead to
// softlocks in deku mask theatre and potentially other places.
uint8_t skipItemCutscene = CVarGetInteger(CVAR_ENHANCEMENT("FastDrops"), 0) && isDropToSkip;
// Same as above but for rando. Rando is different because we want to enable cutscenes for items that
@@ -1198,12 +1198,12 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) {
}
u8 equipped_slot = gSaveContext.equips.cButtonSlots[pauseCtx->equipTargetCBtn];
if (!CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0) &&
pauseCtx->equipTargetItem == ITEM_BOMB && equipped_slot == SLOT_BOW)
{
pauseCtx->equipTargetItem == ITEM_BOMB && equipped_slot == SLOT_BOW) {
CVarSetInteger("gHoliday.lilDavid.BombArrows.Active", 1);
pauseCtx->equipTargetItem = ITEM_BOW;
pauseCtx->equipTargetSlot = SLOT_BOW;
Audio_PlaySoundGeneral(NA_SE_SY_SET_FIRE_ARROW, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
Audio_PlaySoundGeneral(NA_SE_SY_SET_FIRE_ARROW, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
}