mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-12-21 23:58:51 -05:00
Randomizer feature: Triforce Hunt (#3062)
* Initial work to make triforce pieces their own rando item * Disable triforce greyscaling * Better triforce model, finish adding triforce pieces to logic * Triforce model is now a shard * Credits warp + start of item tracker * Initial item tracker stuff * Completed triangle on triforce completion * Completed triforce model on GI done * Multiple triforce piece models * Triforce pieces in save editor & fix build * Finish item tracker * Gameplaystats timestamp * Revert parts of logic * More reverting * Start of making Triforce Hunt the win condition * Bit of cleanup * Triforce pieces can show up as icetraps * Grant GBK to player after hunt is completed * Better text boxes * Disable GBK option in ImGui with Triforce Hunt on * Clean-up * Forced save on completion improvements * Update Item Tracker Settings initial size * Small ImGui adjustments * French translation and update defaults * Finish translations * Fix timer completion & 50+ triforce pieces * Remove GI_ and ITEM_ enum usage, add french ice trap names * Fix build & small fixes * Review comments * Comment clarification
This commit is contained in:
parent
ccd05d8e58
commit
bae6cf4203
@ -0,0 +1,13 @@
|
||||
<DisplayList Version="0">
|
||||
<CallDisplayList Path="objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_edges"/>
|
||||
<CallDisplayList Path="objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_0"/>
|
||||
<CallDisplayList Path="objects/object_triforce_completed/mat_gTriforcePieceCompletedDL_f3dlite_triforce_surface"/>
|
||||
<CallDisplayList Path="objects/object_triforce_completed/gTriforcePieceCompletedDL_tri_1"/>
|
||||
<PipeSync/>
|
||||
<SetGeometryMode G_LIGHTING="1" />
|
||||
<ClearGeometryMode G_TEXTURE_GEN="1" />
|
||||
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
|
||||
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,58 @@
|
||||
<DisplayList Version="0">
|
||||
<LoadVertices Path="objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="3" V02="1"/>
|
||||
<Triangle1 V00="4" V01="3" V02="0"/>
|
||||
<Triangle1 V00="5" V01="3" V02="4"/>
|
||||
<Triangle1 V00="5" V01="4" V02="6"/>
|
||||
<Triangle1 V00="4" V01="7" V02="6"/>
|
||||
<Triangle1 V00="7" V01="8" V02="6"/>
|
||||
<Triangle1 V00="7" V01="9" V02="8"/>
|
||||
<Triangle1 V00="6" V01="8" V02="1"/>
|
||||
<Triangle1 V00="6" V01="1" V02="3"/>
|
||||
<Triangle1 V00="10" V01="6" V02="3"/>
|
||||
<Triangle1 V00="10" V01="3" V02="11"/>
|
||||
<Triangle1 V00="5" V01="11" V02="3"/>
|
||||
<Triangle1 V00="5" V01="6" V02="10"/>
|
||||
<Triangle1 V00="12" V01="13" V02="14"/>
|
||||
<Triangle1 V00="12" V01="14" V02="15"/>
|
||||
<LoadVertices Path="objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||
<Triangle1 V00="4" V01="0" V02="3"/>
|
||||
<Triangle1 V00="4" V01="3" V02="5"/>
|
||||
<Triangle1 V00="6" V01="0" V02="4"/>
|
||||
<Triangle1 V00="7" V01="0" V02="6"/>
|
||||
<Triangle1 V00="7" V01="6" V02="1"/>
|
||||
<Triangle1 V00="6" V01="8" V02="1"/>
|
||||
<Triangle1 V00="7" V01="1" V02="9"/>
|
||||
<Triangle1 V00="10" V01="9" V02="1"/>
|
||||
<Triangle1 V00="10" V01="1" V02="0"/>
|
||||
<Triangle1 V00="7" V01="10" V02="0"/>
|
||||
<Triangle1 V00="11" V01="12" V02="13"/>
|
||||
<Triangle1 V00="11" V01="13" V02="14"/>
|
||||
<Triangle1 V00="13" V01="15" V02="14"/>
|
||||
<LoadVertices Path="objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="16"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||
<Triangle1 V00="4" V01="3" V02="2"/>
|
||||
<Triangle1 V00="2" V01="5" V02="4"/>
|
||||
<Triangle1 V00="2" V01="6" V02="5"/>
|
||||
<Triangle1 V00="7" V01="5" V02="6"/>
|
||||
<Triangle1 V00="6" V01="8" V02="7"/>
|
||||
<Triangle1 V00="7" V01="8" V02="9"/>
|
||||
<Triangle1 V00="7" V01="9" V02="10"/>
|
||||
<Triangle1 V00="11" V01="10" V02="9"/>
|
||||
<Triangle1 V00="0" V01="11" V02="9"/>
|
||||
<Triangle1 V00="0" V01="12" V02="11"/>
|
||||
<Triangle1 V00="7" V01="4" V02="5"/>
|
||||
<Triangle1 V00="13" V01="4" V02="5"/>
|
||||
<Triangle1 V00="13" V01="5" V02="6"/>
|
||||
<Triangle1 V00="13" V01="6" V02="14"/>
|
||||
<Triangle1 V00="13" V01="14" V02="15"/>
|
||||
<LoadVertices Path="objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_0" VertexBufferIndex="0" VertexOffset="48" Count="4"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,7 @@
|
||||
<DisplayList Version="0">
|
||||
<LoadVertices Path="objects/object_triforce_completed/gTriforcePieceCompletedDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="6"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="3" V01="4" V02="5"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,54 @@
|
||||
<Vertex Version="0">
|
||||
<Vtx X="883" Y="-475" Z="103" S="344" T="380" R="103" G="6" B="75" A="255"/>
|
||||
<Vtx X="809" Y="-497" Z="100" S="304" T="393" R="1" G="143" B="58" A="255"/>
|
||||
<Vtx X="884" Y="-496" Z="96" S="345" T="393" R="78" G="166" B="46" A="255"/>
|
||||
<Vtx X="856" Y="-477" Z="114" S="328" T="380" R="25" G="227" B="121" A="255"/>
|
||||
<Vtx X="0" Y="945" Z="114" S="-58" T="-321" R="177" G="83" B="55" A="255"/>
|
||||
<Vtx X="0" Y="870" Z="116" S="-58" T="-283" R="221" G="3" B="122" A="255"/>
|
||||
<Vtx X="-856" Y="-477" Z="114" S="-437" T="380" R="231" G="227" B="121" A="255"/>
|
||||
<Vtx X="-883" Y="-475" Z="103" S="-452" T="380" R="153" G="6" B="75" A="255"/>
|
||||
<Vtx X="-809" Y="-497" Z="100" S="-412" T="393" R="255" G="143" B="58" A="255"/>
|
||||
<Vtx X="-884" Y="-496" Z="96" S="-453" T="392" R="178" G="166" B="46" A="255"/>
|
||||
<Vtx X="-817" Y="-464" Z="116" S="-414" T="369" R="254" G="251" B="127" A="255"/>
|
||||
<Vtx X="817" Y="-464" Z="116" S="304" T="369" R="2" G="251" B="127" A="255"/>
|
||||
<Vtx X="883" Y="-475" Z="-106" S="-460" T="380" R="103" G="6" B="181" A="255"/>
|
||||
<Vtx X="884" Y="-496" Z="-99" S="-461" T="393" R="78" G="166" B="210" A="255"/>
|
||||
<Vtx X="809" Y="-497" Z="-103" S="-420" T="393" R="1" G="143" B="198" A="255"/>
|
||||
<Vtx X="856" Y="-477" Z="-117" S="-444" T="380" R="25" G="227" B="135" A="255"/>
|
||||
<Vtx X="-856" Y="-477" Z="-117" S="320" T="380" R="231" G="227" B="135" A="255"/>
|
||||
<Vtx X="856" Y="-477" Z="-117" S="-444" T="380" R="25" G="227" B="135" A="255"/>
|
||||
<Vtx X="809" Y="-497" Z="-103" S="-420" T="393" R="1" G="143" B="198" A="255"/>
|
||||
<Vtx X="-809" Y="-497" Z="-103" S="296" T="393" R="255" G="143" B="198" A="255"/>
|
||||
<Vtx X="-883" Y="-475" Z="-106" S="336" T="380" R="153" G="6" B="181" A="255"/>
|
||||
<Vtx X="-884" Y="-496" Z="-99" S="337" T="392" R="178" G="166" B="210" A="255"/>
|
||||
<Vtx X="0" Y="945" Z="-117" S="-58" T="-321" R="177" G="83" B="201" A="255"/>
|
||||
<Vtx X="0" Y="870" Z="-120" S="-58" T="-283" R="228" G="24" B="134" A="255"/>
|
||||
<Vtx X="883" Y="-475" Z="-106" S="-460" T="380" R="103" G="6" B="181" A="255"/>
|
||||
<Vtx X="817" Y="-464" Z="-120" S="-421" T="369" R="1" G="254" B="129" A="255"/>
|
||||
<Vtx X="-817" Y="-464" Z="-120" S="297" T="369" R="255" G="254" B="129" A="255"/>
|
||||
<Vtx X="-884" Y="-496" Z="-99" S="-149" T="-277" R="178" G="166" B="210" A="255"/>
|
||||
<Vtx X="-809" Y="-497" Z="-103" S="-149" T="-277" R="255" G="143" B="198" A="255"/>
|
||||
<Vtx X="809" Y="-497" Z="-103" S="-149" T="-277" R="1" G="143" B="198" A="255"/>
|
||||
<Vtx X="884" Y="-496" Z="96" S="-149" T="-277" R="78" G="166" B="46" A="255"/>
|
||||
<Vtx X="884" Y="-496" Z="-99" S="-149" T="-277" R="78" G="166" B="210" A="255"/>
|
||||
<Vtx X="884" Y="-496" Z="96" S="-149" T="-277" R="78" G="166" B="46" A="255"/>
|
||||
<Vtx X="884" Y="-496" Z="-99" S="-149" T="-277" R="78" G="166" B="210" A="255"/>
|
||||
<Vtx X="883" Y="-475" Z="-106" S="-149" T="-277" R="103" G="6" B="181" A="255"/>
|
||||
<Vtx X="883" Y="-475" Z="103" S="-149" T="-277" R="103" G="6" B="75" A="255"/>
|
||||
<Vtx X="0" Y="945" Z="114" S="107" T="-277" R="177" G="83" B="55" A="255"/>
|
||||
<Vtx X="0" Y="945" Z="-1" S="107" T="-149" R="169" G="92" B="0" A="255"/>
|
||||
<Vtx X="0" Y="945" Z="-117" S="107" T="-277" R="177" G="83" B="201" A="255"/>
|
||||
<Vtx X="-883" Y="-475" Z="103" S="-149" T="-277" R="153" G="6" B="75" A="255"/>
|
||||
<Vtx X="-883" Y="-475" Z="-106" S="-149" T="-277" R="153" G="6" B="181" A="255"/>
|
||||
<Vtx X="-884" Y="-496" Z="-99" S="-149" T="-277" R="178" G="166" B="210" A="255"/>
|
||||
<Vtx X="-884" Y="-496" Z="96" S="-149" T="-277" R="178" G="166" B="46" A="255"/>
|
||||
<Vtx X="-809" Y="-497" Z="100" S="-149" T="-277" R="255" G="143" B="58" A="255"/>
|
||||
<Vtx X="809" Y="-497" Z="100" S="-149" T="-277" R="1" G="143" B="58" A="255"/>
|
||||
<Vtx X="0" Y="874" Z="-1" S="107" T="-149" R="165" G="0" B="89" A="255"/>
|
||||
<Vtx X="0" Y="870" Z="-120" S="107" T="-277" R="221" G="3" B="134" A="255"/>
|
||||
<Vtx X="0" Y="874" Z="-1" S="235" T="-149" R="0" G="0" B="127" A="255"/>
|
||||
<Vtx X="0" Y="874" Z="-1" S="107" T="-149" R="165" G="0" B="89" A="255"/>
|
||||
<Vtx X="0" Y="874" Z="-1" S="235" T="-149" R="0" G="0" B="127" A="255"/>
|
||||
<Vtx X="0" Y="870" Z="116" S="107" T="-277" R="221" G="3" B="122" A="255"/>
|
||||
<Vtx X="0" Y="945" Z="114" S="107" T="-277" R="177" G="83" B="55" A="255"/>
|
||||
</Vertex>
|
@ -0,0 +1,8 @@
|
||||
<Vertex Version="0">
|
||||
<Vtx X="0" Y="870" Z="-120" S="-280" T="103" R="228" G="24" B="134" A="255"/>
|
||||
<Vtx X="817" Y="-464" Z="-120" S="75" T="-550" R="1" G="254" B="129" A="255"/>
|
||||
<Vtx X="-817" Y="-464" Z="-120" S="438" T="103" R="255" G="254" B="129" A="255"/>
|
||||
<Vtx X="0" Y="870" Z="116" S="-280" T="103" R="221" G="3" B="122" A="255"/>
|
||||
<Vtx X="-817" Y="-464" Z="116" S="438" T="103" R="254" G="251" B="127" A="255"/>
|
||||
<Vtx X="817" Y="-464" Z="116" S="75" T="-550" R="2" G="251" B="127" A="255"/>
|
||||
</Vertex>
|
@ -0,0 +1,21 @@
|
||||
<DisplayList Version="0">
|
||||
<PipeSync/>
|
||||
<SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_TEXEL0" 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"/>
|
||||
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_SHADING_SMOOTH="1" />
|
||||
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||
<Texture S="1966" T="1966" Level="0" Tile="0" On="1"/>
|
||||
<SetTextureLUT Mode="G_TT_NONE"/>
|
||||
<TileSync/>
|
||||
<SetTextureImage Path="objects/object_triforce_completed/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
|
||||
<LoadSync/>
|
||||
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
|
||||
<PipeSync/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" 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"/>
|
||||
<SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,21 @@
|
||||
<DisplayList Version="0">
|
||||
<PipeSync/>
|
||||
<SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_TEXEL0" 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"/>
|
||||
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_SHADING_SMOOTH="1" />
|
||||
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||
<Texture S="2621" T="1311" Level="0" Tile="0" On="1"/>
|
||||
<SetTextureLUT Mode="G_TT_NONE"/>
|
||||
<TileSync/>
|
||||
<SetTextureImage Path="objects/object_triforce_completed/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
|
||||
<LoadSync/>
|
||||
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
|
||||
<PipeSync/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" 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"/>
|
||||
<SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
BIN
OTRExporter/assets/objects/object_triforce_completed/noise_tex
Normal file
BIN
OTRExporter/assets/objects/object_triforce_completed/noise_tex
Normal file
Binary file not shown.
@ -0,0 +1,15 @@
|
||||
<DisplayList Version="0">
|
||||
<CallDisplayList Path="objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_surface"/>
|
||||
<CallDisplayList Path="objects/object_triforce_piece_0/gTriforcePiece0DL_tri_0"/>
|
||||
<CallDisplayList Path="objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_triforce_edges"/>
|
||||
<CallDisplayList Path="objects/object_triforce_piece_0/gTriforcePiece0DL_tri_1"/>
|
||||
<CallDisplayList Path="objects/object_triforce_piece_0/mat_gTriforcePiece0DL_f3dlite_shard_edge"/>
|
||||
<CallDisplayList Path="objects/object_triforce_piece_0/gTriforcePiece0DL_tri_2"/>
|
||||
<PipeSync/>
|
||||
<SetGeometryMode G_LIGHTING="1" />
|
||||
<ClearGeometryMode G_TEXTURE_GEN="1" />
|
||||
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
|
||||
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,17 @@
|
||||
<DisplayList Version="0">
|
||||
<LoadVertices Path="objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="3" V02="1"/>
|
||||
<Triangle1 V00="1" V01="3" V02="4"/>
|
||||
<Triangle1 V00="1" V01="4" V02="5"/>
|
||||
<Triangle1 V00="5" V01="4" V02="6"/>
|
||||
<Triangle1 V00="5" V01="6" V02="7"/>
|
||||
<Triangle1 V00="8" V01="9" V02="10"/>
|
||||
<Triangle1 V00="8" V01="10" V02="11"/>
|
||||
<Triangle1 V00="11" V01="10" V02="12"/>
|
||||
<Triangle1 V00="10" V01="13" V02="12"/>
|
||||
<Triangle1 V00="12" V01="13" V02="14"/>
|
||||
<Triangle1 V00="12" V01="14" V02="15"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,18 @@
|
||||
<DisplayList Version="0">
|
||||
<LoadVertices Path="objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||
<Triangle1 V00="4" V01="0" V02="3"/>
|
||||
<Triangle1 V00="4" V01="3" V02="5"/>
|
||||
<Triangle1 V00="6" V01="7" V02="8"/>
|
||||
<Triangle1 V00="6" V01="9" V02="7"/>
|
||||
<Triangle1 V00="10" V01="7" V02="9"/>
|
||||
<Triangle1 V00="10" V01="11" V02="7"/>
|
||||
<Triangle1 V00="12" V01="13" V02="14"/>
|
||||
<Triangle1 V00="12" V01="15" V02="13"/>
|
||||
<LoadVertices Path="objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_1" VertexBufferIndex="0" VertexOffset="16" Count="4"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="3" V02="1"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,51 @@
|
||||
<DisplayList Version="0">
|
||||
<LoadVertices Path="objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_2" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||
<Triangle1 V00="4" V01="3" V02="2"/>
|
||||
<Triangle1 V00="4" V01="2" V02="5"/>
|
||||
<Triangle1 V00="6" V01="3" V02="4"/>
|
||||
<Triangle1 V00="6" V01="7" V02="3"/>
|
||||
<Triangle1 V00="8" V01="7" V02="6"/>
|
||||
<Triangle1 V00="8" V01="9" V02="7"/>
|
||||
<Triangle1 V00="10" V01="9" V02="8"/>
|
||||
<Triangle1 V00="10" V01="11" V02="9"/>
|
||||
<Triangle1 V00="12" V01="11" V02="10"/>
|
||||
<Triangle1 V00="12" V01="13" V02="11"/>
|
||||
<Triangle1 V00="14" V01="13" V02="12"/>
|
||||
<Triangle1 V00="14" V01="15" V02="13"/>
|
||||
<LoadVertices Path="objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_2" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="3" V02="1"/>
|
||||
<Triangle1 V00="4" V01="3" V02="0"/>
|
||||
<Triangle1 V00="4" V01="5" V02="3"/>
|
||||
<Triangle1 V00="6" V01="5" V02="4"/>
|
||||
<Triangle1 V00="6" V01="7" V02="5"/>
|
||||
<Triangle1 V00="8" V01="7" V02="6"/>
|
||||
<Triangle1 V00="8" V01="9" V02="7"/>
|
||||
<Triangle1 V00="10" V01="9" V02="8"/>
|
||||
<Triangle1 V00="10" V01="11" V02="9"/>
|
||||
<Triangle1 V00="12" V01="9" V02="11"/>
|
||||
<Triangle1 V00="12" V01="13" V02="9"/>
|
||||
<Triangle1 V00="13" V01="7" V02="9"/>
|
||||
<Triangle1 V00="13" V01="14" V02="7"/>
|
||||
<Triangle1 V00="14" V01="5" V02="7"/>
|
||||
<Triangle1 V00="14" V01="15" V02="5"/>
|
||||
<Triangle1 V00="15" V01="3" V02="5"/>
|
||||
<LoadVertices Path="objects/object_triforce_piece_0/gTriforcePiece0DL_vtx_2" VertexBufferIndex="0" VertexOffset="32" Count="15"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="1" V01="3" V02="2"/>
|
||||
<Triangle1 V00="1" V01="4" V02="3"/>
|
||||
<Triangle1 V00="4" V01="5" V02="3"/>
|
||||
<Triangle1 V00="4" V01="6" V02="5"/>
|
||||
<Triangle1 V00="6" V01="7" V02="5"/>
|
||||
<Triangle1 V00="6" V01="8" V02="7"/>
|
||||
<Triangle1 V00="8" V01="9" V02="7"/>
|
||||
<Triangle1 V00="8" V01="10" V02="9"/>
|
||||
<Triangle1 V00="10" V01="11" V02="9"/>
|
||||
<Triangle1 V00="10" V01="12" V02="11"/>
|
||||
<Triangle1 V00="12" V01="13" V02="11"/>
|
||||
<Triangle1 V00="12" V01="14" V02="13"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,18 @@
|
||||
<Vertex Version="0">
|
||||
<Vtx X="-123" Y="756" Z="-317" S="179" T="369" R="53" G="49" B="151" A="255"/>
|
||||
<Vtx X="-309" Y="40" Z="-317" S="236" T="343" R="203" G="242" B="141" A="255"/>
|
||||
<Vtx X="-419" Y="165" Z="-317" S="226" T="369" R="216" G="236" B="137" A="255"/>
|
||||
<Vtx X="153" Y="372" Z="-317" S="212" T="298" R="82" G="29" B="163" A="255"/>
|
||||
<Vtx X="135" Y="39" Z="-317" S="260" T="272" R="38" G="25" B="137" A="255"/>
|
||||
<Vtx X="-283" Y="-340" Z="-317" S="287" T="307" R="201" G="193" B="160" A="255"/>
|
||||
<Vtx X="507" Y="-162" Z="-317" S="260" T="203" R="70" G="41" B="158" A="255"/>
|
||||
<Vtx X="607" Y="-764" Z="-317" S="290" T="170" R="16" G="184" B="152" A="255"/>
|
||||
<Vtx X="-123" Y="756" Z="317" S="179" T="369" R="53" G="49" B="105" A="255"/>
|
||||
<Vtx X="-419" Y="165" Z="317" S="226" T="369" R="216" G="236" B="119" A="255"/>
|
||||
<Vtx X="-309" Y="40" Z="317" S="236" T="343" R="203" G="242" B="115" A="255"/>
|
||||
<Vtx X="153" Y="372" Z="317" S="212" T="298" R="82" G="29" B="93" A="255"/>
|
||||
<Vtx X="135" Y="39" Z="317" S="260" T="272" R="38" G="25" B="119" A="255"/>
|
||||
<Vtx X="-283" Y="-340" Z="317" S="287" T="307" R="201" G="193" B="96" A="255"/>
|
||||
<Vtx X="607" Y="-764" Z="317" S="290" T="170" R="16" G="184" B="104" A="255"/>
|
||||
<Vtx X="507" Y="-162" Z="317" S="260" T="203" R="70" G="41" B="98" A="255"/>
|
||||
</Vertex>
|
@ -0,0 +1,22 @@
|
||||
<Vertex Version="0">
|
||||
<Vtx X="-182" Y="839" Z="-280" S="115" T="0" R="226" G="65" B="151" A="255"/>
|
||||
<Vtx X="-123" Y="756" Z="-317" S="103" T="13" R="53" G="49" B="151" A="255"/>
|
||||
<Vtx X="-419" Y="165" Z="-317" S="127" T="56" R="216" G="236" B="137" A="255"/>
|
||||
<Vtx X="-482" Y="237" Z="-280" S="140" T="45" R="165" G="2" B="167" A="255"/>
|
||||
<Vtx X="-202" Y="867" Z="-226" S="120" T="-4" R="146" G="62" B="241" A="255"/>
|
||||
<Vtx X="-507" Y="266" Z="-224" S="145" T="41" R="141" G="52" B="242" A="255"/>
|
||||
<Vtx X="-507" Y="266" Z="-224" S="-26" T="-277" R="141" G="52" B="242" A="255"/>
|
||||
<Vtx X="-202" Y="867" Z="0" S="-9" T="-207" R="142" G="57" B="0" A="255"/>
|
||||
<Vtx X="-202" Y="867" Z="-226" S="-9" T="-277" R="146" G="62" B="241" A="255"/>
|
||||
<Vtx X="-507" Y="266" Z="0" S="-26" T="-215" R="142" G="57" B="0" A="255"/>
|
||||
<Vtx X="-507" Y="266" Z="224" S="-26" T="-277" R="141" G="52" B="14" A="255"/>
|
||||
<Vtx X="-202" Y="867" Z="226" S="-9" T="-277" R="146" G="62" B="15" A="255"/>
|
||||
<Vtx X="-182" Y="839" Z="280" S="115" T="0" R="226" G="65" B="105" A="255"/>
|
||||
<Vtx X="-419" Y="165" Z="317" S="127" T="56" R="216" G="236" B="119" A="255"/>
|
||||
<Vtx X="-123" Y="756" Z="317" S="103" T="13" R="53" G="49" B="105" A="255"/>
|
||||
<Vtx X="-482" Y="237" Z="280" S="140" T="45" R="165" G="2" B="89" A="255"/>
|
||||
<Vtx X="-202" Y="867" Z="226" S="120" T="-4" R="146" G="62" B="15" A="255"/>
|
||||
<Vtx X="-482" Y="237" Z="280" S="140" T="45" R="165" G="2" B="89" A="255"/>
|
||||
<Vtx X="-182" Y="839" Z="280" S="115" T="0" R="226" G="65" B="105" A="255"/>
|
||||
<Vtx X="-507" Y="266" Z="224" S="145" T="41" R="141" G="52" B="14" A="255"/>
|
||||
</Vertex>
|
@ -0,0 +1,49 @@
|
||||
<Vertex Version="0">
|
||||
<Vtx X="-182" Y="839" Z="-280" S="-14" T="2292" R="226" G="65" B="151" A="255"/>
|
||||
<Vtx X="-202" Y="867" Z="-226" S="-9" T="2332" R="146" G="62" B="241" A="255"/>
|
||||
<Vtx X="-202" Y="867" Z="0" S="1001" T="2332" R="103" G="74" B="0" A="255"/>
|
||||
<Vtx X="-182" Y="839" Z="0" S="1001" T="2292" R="103" G="74" B="0" A="255"/>
|
||||
<Vtx X="-182" Y="839" Z="280" S="-14" T="2292" R="226" G="65" B="105" A="255"/>
|
||||
<Vtx X="-202" Y="867" Z="226" S="-9" T="2332" R="146" G="62" B="15" A="255"/>
|
||||
<Vtx X="-123" Y="756" Z="317" S="-16" T="2174" R="53" G="49" B="105" A="255"/>
|
||||
<Vtx X="-123" Y="756" Z="0" S="1001" T="2174" R="103" G="74" B="0" A="255"/>
|
||||
<Vtx X="153" Y="372" Z="317" S="-16" T="1624" R="82" G="29" B="93" A="255"/>
|
||||
<Vtx X="153" Y="372" Z="0" S="1001" T="1624" R="120" G="43" B="0" A="255"/>
|
||||
<Vtx X="135" Y="39" Z="317" S="-16" T="1237" R="38" G="25" B="119" A="255"/>
|
||||
<Vtx X="135" Y="39" Z="0" S="1001" T="1237" R="106" G="70" B="0" A="255"/>
|
||||
<Vtx X="507" Y="-162" Z="317" S="-16" T="746" R="70" G="41" B="98" A="255"/>
|
||||
<Vtx X="507" Y="-162" Z="0" S="1001" T="746" R="110" G="64" B="0" A="255"/>
|
||||
<Vtx X="607" Y="-764" Z="317" S="-16" T="428" R="16" G="184" B="104" A="255"/>
|
||||
<Vtx X="607" Y="-764" Z="0" S="1001" T="428" R="28" G="132" B="0" A="255"/>
|
||||
<Vtx X="-283" Y="-340" Z="317" S="-16" T="-548" R="201" G="193" B="96" A="255"/>
|
||||
<Vtx X="607" Y="-764" Z="0" S="1001" T="428" R="28" G="132" B="0" A="255"/>
|
||||
<Vtx X="607" Y="-764" Z="317" S="-16" T="428" R="16" G="184" B="104" A="255"/>
|
||||
<Vtx X="-283" Y="-340" Z="0" S="1001" T="-548" R="172" G="160" B="0" A="255"/>
|
||||
<Vtx X="-309" Y="40" Z="317" S="-16" T="-991" R="203" G="242" B="115" A="255"/>
|
||||
<Vtx X="-309" Y="40" Z="0" S="1001" T="-991" R="133" G="223" B="0" A="255"/>
|
||||
<Vtx X="-419" Y="165" Z="317" S="-16" T="-1185" R="216" G="236" B="119" A="255"/>
|
||||
<Vtx X="-419" Y="165" Z="0" S="1001" T="-1185" R="160" G="172" B="0" A="255"/>
|
||||
<Vtx X="-482" Y="237" Z="280" S="-14" T="-1296" R="165" G="2" B="89" A="255"/>
|
||||
<Vtx X="-482" Y="237" Z="0" S="1001" T="-1296" R="160" G="172" B="0" A="255"/>
|
||||
<Vtx X="-507" Y="266" Z="224" S="-8" T="-1340" R="141" G="52" B="14" A="255"/>
|
||||
<Vtx X="-507" Y="266" Z="0" S="1001" T="-1340" R="160" G="172" B="0" A="255"/>
|
||||
<Vtx X="-507" Y="266" Z="-224" S="-8" T="-1340" R="141" G="52" B="242" A="255"/>
|
||||
<Vtx X="-482" Y="237" Z="-280" S="-14" T="-1296" R="165" G="2" B="167" A="255"/>
|
||||
<Vtx X="-419" Y="165" Z="-317" S="-16" T="-1185" R="216" G="236" B="137" A="255"/>
|
||||
<Vtx X="-309" Y="40" Z="-317" S="-16" T="-991" R="203" G="242" B="141" A="255"/>
|
||||
<Vtx X="-309" Y="40" Z="-317" S="-16" T="-991" R="203" G="242" B="141" A="255"/>
|
||||
<Vtx X="-283" Y="-340" Z="-317" S="-16" T="-548" R="201" G="193" B="160" A="255"/>
|
||||
<Vtx X="-283" Y="-340" Z="0" S="1001" T="-548" R="172" G="160" B="0" A="255"/>
|
||||
<Vtx X="607" Y="-764" Z="0" S="1001" T="428" R="28" G="132" B="0" A="255"/>
|
||||
<Vtx X="607" Y="-764" Z="-317" S="-16" T="428" R="16" G="184" B="152" A="255"/>
|
||||
<Vtx X="507" Y="-162" Z="0" S="1001" T="746" R="110" G="64" B="0" A="255"/>
|
||||
<Vtx X="507" Y="-162" Z="-317" S="-16" T="746" R="70" G="41" B="158" A="255"/>
|
||||
<Vtx X="135" Y="39" Z="0" S="1001" T="1237" R="106" G="70" B="0" A="255"/>
|
||||
<Vtx X="135" Y="39" Z="-317" S="-16" T="1237" R="38" G="25" B="137" A="255"/>
|
||||
<Vtx X="153" Y="372" Z="0" S="1001" T="1624" R="120" G="43" B="0" A="255"/>
|
||||
<Vtx X="153" Y="372" Z="-317" S="-16" T="1624" R="82" G="29" B="163" A="255"/>
|
||||
<Vtx X="-123" Y="756" Z="0" S="1001" T="2174" R="103" G="74" B="0" A="255"/>
|
||||
<Vtx X="-123" Y="756" Z="-317" S="-16" T="2174" R="53" G="49" B="151" A="255"/>
|
||||
<Vtx X="-182" Y="839" Z="0" S="1001" T="2292" R="103" G="74" B="0" A="255"/>
|
||||
<Vtx X="-182" Y="839" Z="-280" S="-14" T="2292" R="226" G="65" B="151" A="255"/>
|
||||
</Vertex>
|
@ -0,0 +1,21 @@
|
||||
<DisplayList Version="0">
|
||||
<PipeSync/>
|
||||
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_TEXEL0" 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"/>
|
||||
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
|
||||
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||
<Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
|
||||
<SetTextureLUT Mode="G_TT_NONE"/>
|
||||
<TileSync/>
|
||||
<SetTextureImage Path="objects/object_triforce_piece_0/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
|
||||
<LoadSync/>
|
||||
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
|
||||
<PipeSync/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" 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"/>
|
||||
<SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,21 @@
|
||||
<DisplayList Version="0">
|
||||
<PipeSync/>
|
||||
<SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_TEXEL0" 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"/>
|
||||
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_SHADING_SMOOTH="1" />
|
||||
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||
<Texture S="1966" T="1966" Level="0" Tile="0" On="1"/>
|
||||
<SetTextureLUT Mode="G_TT_NONE"/>
|
||||
<TileSync/>
|
||||
<SetTextureImage Path="objects/object_triforce_piece_0/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
|
||||
<LoadSync/>
|
||||
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
|
||||
<PipeSync/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" 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"/>
|
||||
<SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,21 @@
|
||||
<DisplayList Version="0">
|
||||
<PipeSync/>
|
||||
<SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_TEXEL0" 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"/>
|
||||
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_SHADING_SMOOTH="1" />
|
||||
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||
<Texture S="3932" T="1966" Level="0" Tile="0" On="1"/>
|
||||
<SetTextureLUT Mode="G_TT_NONE"/>
|
||||
<TileSync/>
|
||||
<SetTextureImage Path="objects/object_triforce_piece_0/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
|
||||
<LoadSync/>
|
||||
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
|
||||
<PipeSync/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" 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"/>
|
||||
<SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
BIN
OTRExporter/assets/objects/object_triforce_piece_0/noise_tex
Normal file
BIN
OTRExporter/assets/objects/object_triforce_piece_0/noise_tex
Normal file
Binary file not shown.
@ -0,0 +1,13 @@
|
||||
<DisplayList Version="0">
|
||||
<CallDisplayList Path="objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_triforce_surface"/>
|
||||
<CallDisplayList Path="objects/object_triforce_piece_1/gTriforcePiece1DL_tri_0"/>
|
||||
<CallDisplayList Path="objects/object_triforce_piece_1/mat_gTriforcePiece1DL_f3dlite_shard_edge"/>
|
||||
<CallDisplayList Path="objects/object_triforce_piece_1/gTriforcePiece1DL_tri_1"/>
|
||||
<PipeSync/>
|
||||
<SetGeometryMode G_LIGHTING="1" />
|
||||
<ClearGeometryMode G_TEXTURE_GEN="1" />
|
||||
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
|
||||
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,20 @@
|
||||
<DisplayList Version="0">
|
||||
<LoadVertices Path="objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="3" V01="2" V02="1"/>
|
||||
<Triangle1 V00="4" V01="2" V02="3"/>
|
||||
<Triangle1 V00="3" V01="5" V02="4"/>
|
||||
<Triangle1 V00="4" V01="6" V02="2"/>
|
||||
<Triangle1 V00="6" V01="4" V02="7"/>
|
||||
<Triangle1 V00="4" V01="8" V02="7"/>
|
||||
<Triangle1 V00="9" V01="10" V02="11"/>
|
||||
<Triangle1 V00="12" V01="11" V02="10"/>
|
||||
<Triangle1 V00="12" V01="10" V02="13"/>
|
||||
<Triangle1 V00="10" V01="14" V02="13"/>
|
||||
<Triangle1 V00="14" V01="15" V02="13"/>
|
||||
<LoadVertices Path="objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="5"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="2" V01="3" V02="4"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,25 @@
|
||||
<DisplayList Version="0">
|
||||
<LoadVertices Path="objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="14"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="3" V02="1"/>
|
||||
<Triangle1 V00="3" V01="4" V02="1"/>
|
||||
<Triangle1 V00="3" V01="5" V02="4"/>
|
||||
<Triangle1 V00="6" V01="7" V02="8"/>
|
||||
<Triangle1 V00="6" V01="8" V02="9"/>
|
||||
<Triangle1 V00="10" V01="11" V02="12"/>
|
||||
<Triangle1 V00="10" V01="12" V02="13"/>
|
||||
<LoadVertices Path="objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_1" VertexBufferIndex="0" VertexOffset="14" Count="14"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||
<Triangle1 V00="4" V01="5" V02="6"/>
|
||||
<Triangle1 V00="4" V01="6" V02="7"/>
|
||||
<Triangle1 V00="8" V01="9" V02="10"/>
|
||||
<Triangle1 V00="8" V01="11" V02="9"/>
|
||||
<Triangle1 V00="9" V01="11" V02="12"/>
|
||||
<Triangle1 V00="9" V01="12" V02="13"/>
|
||||
<LoadVertices Path="objects/object_triforce_piece_1/gTriforcePiece1DL_vtx_1" VertexBufferIndex="0" VertexOffset="28" Count="4"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,23 @@
|
||||
<Vertex Version="0">
|
||||
<Vtx X="-541" Y="-249" Z="-296" S="-131" T="247" R="216" G="164" B="177" A="255"/>
|
||||
<Vtx X="-905" Y="183" Z="-296" S="-95" T="240" R="166" G="44" B="178" A="255"/>
|
||||
<Vtx X="-88" Y="-225" Z="-296" S="-174" T="295" R="232" G="219" B="137" A="255"/>
|
||||
<Vtx X="-138" Y="176" Z="-296" S="-134" T="288" R="243" G="77" B="156" A="255"/>
|
||||
<Vtx X="218" Y="94" Z="-296" S="-193" T="311" R="65" G="1" B="147" A="255"/>
|
||||
<Vtx X="437" Y="375" Z="-296" S="-173" T="336" R="82" G="59" B="178" A="255"/>
|
||||
<Vtx X="-22" Y="-366" Z="-296" S="-193" T="289" R="225" G="156" B="183" A="255"/>
|
||||
<Vtx X="226" Y="-222" Z="-296" S="-208" T="305" R="19" G="161" B="174" A="255"/>
|
||||
<Vtx X="514" Y="-258" Z="-296" S="-222" T="321" R="94" G="205" B="187" A="255"/>
|
||||
<Vtx X="-541" Y="-249" Z="296" S="-131" T="247" R="216" G="164" B="79" A="255"/>
|
||||
<Vtx X="-88" Y="-225" Z="296" S="-174" T="295" R="222" G="199" B="108" A="255"/>
|
||||
<Vtx X="-905" Y="183" Z="296" S="-95" T="240" R="165" G="42" B="79" A="255"/>
|
||||
<Vtx X="-138" Y="176" Z="296" S="-134" T="288" R="245" G="98" B="81" A="255"/>
|
||||
<Vtx X="218" Y="94" Z="296" S="-193" T="311" R="65" G="1" B="109" A="255"/>
|
||||
<Vtx X="-22" Y="-366" Z="296" S="-193" T="289" R="225" G="156" B="73" A="255"/>
|
||||
<Vtx X="226" Y="-222" Z="296" S="-208" T="305" R="19" G="161" B="82" A="255"/>
|
||||
<Vtx X="226" Y="-222" Z="296" S="-208" T="305" R="19" G="161" B="82" A="255"/>
|
||||
<Vtx X="514" Y="-258" Z="296" S="-222" T="321" R="94" G="205" B="69" A="255"/>
|
||||
<Vtx X="218" Y="94" Z="296" S="-193" T="311" R="65" G="1" B="109" A="255"/>
|
||||
<Vtx X="437" Y="375" Z="296" S="-173" T="336" R="81" G="60" B="77" A="255"/>
|
||||
<Vtx X="-138" Y="176" Z="296" S="-134" T="288" R="245" G="98" B="81" A="255"/>
|
||||
</Vertex>
|
@ -0,0 +1,34 @@
|
||||
<Vertex Version="0">
|
||||
<Vtx X="514" Y="-258" Z="296" S="1210" T="1071" R="94" G="205" B="69" A="255"/>
|
||||
<Vtx X="226" Y="-222" Z="-296" S="-240" T="507" R="19" G="161" B="174" A="255"/>
|
||||
<Vtx X="514" Y="-258" Z="-296" S="-240" T="1071" R="94" G="205" B="187" A="255"/>
|
||||
<Vtx X="226" Y="-222" Z="296" S="1210" T="507" R="19" G="161" B="82" A="255"/>
|
||||
<Vtx X="-22" Y="-366" Z="-296" S="-240" T="-58" R="225" G="156" B="183" A="255"/>
|
||||
<Vtx X="-22" Y="-366" Z="296" S="1210" T="-58" R="225" G="156" B="73" A="255"/>
|
||||
<Vtx X="-22" Y="-366" Z="296" S="1210" T="749" R="225" G="156" B="73" A="255"/>
|
||||
<Vtx X="-88" Y="-225" Z="296" S="1210" T="261" R="222" G="199" B="108" A="255"/>
|
||||
<Vtx X="-88" Y="-225" Z="-296" S="-240" T="261" R="232" G="219" B="137" A="255"/>
|
||||
<Vtx X="-22" Y="-366" Z="-296" S="-240" T="749" R="225" G="156" B="183" A="255"/>
|
||||
<Vtx X="-88" Y="-225" Z="296" S="1210" T="1064" R="222" G="199" B="108" A="255"/>
|
||||
<Vtx X="-541" Y="-249" Z="296" S="1210" T="-61" R="216" G="164" B="79" A="255"/>
|
||||
<Vtx X="-541" Y="-249" Z="-296" S="-240" T="-61" R="216" G="164" B="177" A="255"/>
|
||||
<Vtx X="-88" Y="-225" Z="-296" S="-240" T="1064" R="232" G="219" B="137" A="255"/>
|
||||
<Vtx X="437" Y="375" Z="296" S="22" T="-67" R="81" G="60" B="77" A="255"/>
|
||||
<Vtx X="218" Y="94" Z="296" S="22" T="1071" R="65" G="1" B="109" A="255"/>
|
||||
<Vtx X="218" Y="94" Z="-296" S="965" T="1071" R="65" G="1" B="147" A="255"/>
|
||||
<Vtx X="437" Y="375" Z="-296" S="965" T="-67" R="82" G="59" B="178" A="255"/>
|
||||
<Vtx X="218" Y="94" Z="296" S="-231" T="-65" R="65" G="1" B="109" A="255"/>
|
||||
<Vtx X="514" Y="-258" Z="296" S="-231" T="1071" R="94" G="205" B="69" A="255"/>
|
||||
<Vtx X="514" Y="-258" Z="-296" S="966" T="1071" R="94" G="205" B="187" A="255"/>
|
||||
<Vtx X="218" Y="94" Z="-296" S="966" T="-65" R="65" G="1" B="147" A="255"/>
|
||||
<Vtx X="-905" Y="183" Z="296" S="-231" T="-622" R="165" G="42" B="79" A="255"/>
|
||||
<Vtx X="-138" Y="176" Z="-296" S="1228" T="507" R="243" G="77" B="156" A="255"/>
|
||||
<Vtx X="-905" Y="183" Z="-296" S="1228" T="-622" R="166" G="44" B="178" A="255"/>
|
||||
<Vtx X="-138" Y="176" Z="296" S="-231" T="507" R="245" G="98" B="81" A="255"/>
|
||||
<Vtx X="437" Y="375" Z="296" S="-231" T="1636" R="81" G="60" B="77" A="255"/>
|
||||
<Vtx X="437" Y="375" Z="-296" S="1228" T="1636" R="82" G="59" B="178" A="255"/>
|
||||
<Vtx X="-541" Y="-249" Z="296" S="1210" T="1068" R="216" G="164" B="79" A="255"/>
|
||||
<Vtx X="-905" Y="183" Z="296" S="1210" T="-59" R="165" G="42" B="79" A="255"/>
|
||||
<Vtx X="-905" Y="183" Z="-296" S="-240" T="-59" R="166" G="44" B="178" A="255"/>
|
||||
<Vtx X="-541" Y="-249" Z="-296" S="-240" T="1068" R="216" G="164" B="177" A="255"/>
|
||||
</Vertex>
|
@ -0,0 +1,21 @@
|
||||
<DisplayList Version="0">
|
||||
<PipeSync/>
|
||||
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_TEXEL0" 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"/>
|
||||
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
|
||||
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||
<Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
|
||||
<SetTextureLUT Mode="G_TT_NONE"/>
|
||||
<TileSync/>
|
||||
<SetTextureImage Path="objects/object_triforce_piece_1/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
|
||||
<LoadSync/>
|
||||
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
|
||||
<PipeSync/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" 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"/>
|
||||
<SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,21 @@
|
||||
<DisplayList Version="0">
|
||||
<PipeSync/>
|
||||
<SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_TEXEL0" 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"/>
|
||||
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_SHADING_SMOOTH="1" />
|
||||
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||
<Texture S="1984" T="1984" Level="0" Tile="0" On="1"/>
|
||||
<SetTextureLUT Mode="G_TT_NONE"/>
|
||||
<TileSync/>
|
||||
<SetTextureImage Path="objects/object_triforce_piece_1/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
|
||||
<LoadSync/>
|
||||
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
|
||||
<PipeSync/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" 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"/>
|
||||
<SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
BIN
OTRExporter/assets/objects/object_triforce_piece_1/noise_tex
Normal file
BIN
OTRExporter/assets/objects/object_triforce_piece_1/noise_tex
Normal file
Binary file not shown.
@ -0,0 +1,15 @@
|
||||
<DisplayList Version="0">
|
||||
<CallDisplayList Path="objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_edges"/>
|
||||
<CallDisplayList Path="objects/object_triforce_piece_2/gTriforcePiece2DL_tri_0"/>
|
||||
<CallDisplayList Path="objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_triforce_surface"/>
|
||||
<CallDisplayList Path="objects/object_triforce_piece_2/gTriforcePiece2DL_tri_1"/>
|
||||
<CallDisplayList Path="objects/object_triforce_piece_2/mat_gTriforcePiece2DL_f3dlite_shard_edge"/>
|
||||
<CallDisplayList Path="objects/object_triforce_piece_2/gTriforcePiece2DL_tri_2"/>
|
||||
<PipeSync/>
|
||||
<SetGeometryMode G_LIGHTING="1" />
|
||||
<ClearGeometryMode G_TEXTURE_GEN="1" />
|
||||
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
|
||||
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,29 @@
|
||||
<DisplayList Version="0">
|
||||
<LoadVertices Path="objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="15"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="3" V02="1"/>
|
||||
<Triangle1 V00="3" V01="4" V02="1"/>
|
||||
<Triangle1 V00="5" V01="6" V02="7"/>
|
||||
<Triangle1 V00="5" V01="8" V02="6"/>
|
||||
<Triangle1 V00="5" V01="9" V02="8"/>
|
||||
<Triangle1 V00="5" V01="10" V02="9"/>
|
||||
<Triangle1 V00="0" V01="11" V02="12"/>
|
||||
<Triangle1 V00="0" V01="12" V02="13"/>
|
||||
<Triangle1 V00="13" V01="12" V02="14"/>
|
||||
<LoadVertices Path="objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_0" VertexBufferIndex="0" VertexOffset="15" Count="14"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="2" V01="3" V02="0"/>
|
||||
<Triangle1 V00="3" V01="4" V02="0"/>
|
||||
<Triangle1 V00="5" V01="6" V02="7"/>
|
||||
<Triangle1 V00="5" V01="7" V02="8"/>
|
||||
<Triangle1 V00="8" V01="7" V02="9"/>
|
||||
<Triangle1 V00="5" V01="10" V02="11"/>
|
||||
<Triangle1 V00="5" V01="12" V02="10"/>
|
||||
<Triangle1 V00="12" V01="13" V02="10"/>
|
||||
<LoadVertices Path="objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_0" VertexBufferIndex="0" VertexOffset="29" Count="5"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="2" V01="3" V02="0"/>
|
||||
<Triangle1 V00="2" V01="4" V02="3"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,11 @@
|
||||
<DisplayList Version="0">
|
||||
<LoadVertices Path="objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="10"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="3" V02="1"/>
|
||||
<Triangle1 V00="4" V01="3" V02="0"/>
|
||||
<Triangle1 V00="5" V01="6" V02="7"/>
|
||||
<Triangle1 V00="8" V01="5" V02="7"/>
|
||||
<Triangle1 V00="9" V01="5" V02="8"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,19 @@
|
||||
<DisplayList Version="0">
|
||||
<LoadVertices Path="objects/object_triforce_piece_2/gTriforcePiece2DL_vtx_2" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
|
||||
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||
<Triangle1 V00="3" V01="2" V02="4"/>
|
||||
<Triangle1 V00="3" V01="4" V02="5"/>
|
||||
<Triangle1 V00="5" V01="4" V02="6"/>
|
||||
<Triangle1 V00="5" V01="6" V02="7"/>
|
||||
<Triangle1 V00="7" V01="6" V02="8"/>
|
||||
<Triangle1 V00="7" V01="8" V02="9"/>
|
||||
<Triangle1 V00="9" V01="8" V02="10"/>
|
||||
<Triangle1 V00="9" V01="10" V02="11"/>
|
||||
<Triangle1 V00="11" V01="10" V02="12"/>
|
||||
<Triangle1 V00="11" V01="12" V02="13"/>
|
||||
<Triangle1 V00="13" V01="12" V02="14"/>
|
||||
<Triangle1 V00="13" V01="14" V02="15"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,36 @@
|
||||
<Vertex Version="0">
|
||||
<Vtx X="-21" Y="362" Z="-291" S="-58" T="-283" R="0" G="5" B="129" A="255"/>
|
||||
<Vtx X="925" Y="-641" Z="-263" S="-126" T="-197" R="35" G="218" B="140" A="255"/>
|
||||
<Vtx X="789" Y="-680" Z="-291" S="-110" T="-189" R="250" G="168" B="164" A="255"/>
|
||||
<Vtx X="-20" Y="545" Z="-263" S="-58" T="-321" R="96" G="79" B="228" A="255"/>
|
||||
<Vtx X="953" Y="-636" Z="-258" S="-129" T="-198" R="100" G="79" B="253" A="255"/>
|
||||
<Vtx X="-20" Y="372" Z="0" S="107" T="-149" R="129" G="0" B="0" A="255"/>
|
||||
<Vtx X="-20" Y="545" Z="-263" S="107" T="-277" R="129" G="0" B="0" A="255"/>
|
||||
<Vtx X="-21" Y="362" Z="-291" S="107" T="-277" R="129" G="0" B="0" A="255"/>
|
||||
<Vtx X="-20" Y="545" Z="0" S="107" T="-149" R="129" G="0" B="0" A="255"/>
|
||||
<Vtx X="-20" Y="545" Z="263" S="107" T="-277" R="129" G="0" B="0" A="255"/>
|
||||
<Vtx X="-21" Y="362" Z="291" S="107" T="-277" R="129" G="0" B="0" A="255"/>
|
||||
<Vtx X="-641" Y="-449" Z="-291" S="-35" T="-239" R="199" G="189" B="164" A="255"/>
|
||||
<Vtx X="-715" Y="-328" Z="-263" S="-26" T="-261" R="184" G="237" B="153" A="255"/>
|
||||
<Vtx X="-20" Y="545" Z="-263" S="-58" T="-321" R="159" G="78" B="229" A="255"/>
|
||||
<Vtx X="-723" Y="-322" Z="-261" S="-25" T="-262" R="156" G="79" B="255" A="255"/>
|
||||
<Vtx X="-723" Y="-322" Z="-261" S="85" T="-277" R="156" G="79" B="255" A="255"/>
|
||||
<Vtx X="-723" Y="-322" Z="261" S="85" T="-277" R="156" G="79" B="1" A="255"/>
|
||||
<Vtx X="-20" Y="545" Z="263" S="107" T="-277" R="159" G="78" B="27" A="255"/>
|
||||
<Vtx X="-20" Y="545" Z="0" S="107" T="-149" R="157" G="80" B="0" A="255"/>
|
||||
<Vtx X="-20" Y="545" Z="-263" S="107" T="-277" R="159" G="78" B="229" A="255"/>
|
||||
<Vtx X="-21" Y="362" Z="291" S="-58" T="-283" R="0" G="5" B="127" A="255"/>
|
||||
<Vtx X="789" Y="-680" Z="291" S="-110" T="-189" R="250" G="168" B="92" A="255"/>
|
||||
<Vtx X="925" Y="-641" Z="263" S="-126" T="-197" R="35" G="218" B="116" A="255"/>
|
||||
<Vtx X="-20" Y="545" Z="263" S="-58" T="-321" R="96" G="79" B="28" A="255"/>
|
||||
<Vtx X="953" Y="-636" Z="258" S="-129" T="-198" R="100" G="79" B="3" A="255"/>
|
||||
<Vtx X="-715" Y="-328" Z="263" S="-26" T="-261" R="184" G="237" B="103" A="255"/>
|
||||
<Vtx X="-641" Y="-449" Z="291" S="-35" T="-239" R="199" G="189" B="92" A="255"/>
|
||||
<Vtx X="-20" Y="545" Z="263" S="-58" T="-321" R="159" G="78" B="27" A="255"/>
|
||||
<Vtx X="-723" Y="-322" Z="261" S="-25" T="-262" R="156" G="79" B="1" A="255"/>
|
||||
<Vtx X="-20" Y="545" Z="-263" S="107" T="-277" R="96" G="79" B="228" A="255"/>
|
||||
<Vtx X="-20" Y="545" Z="0" S="107" T="-149" R="98" G="81" B="0" A="255"/>
|
||||
<Vtx X="-20" Y="545" Z="263" S="107" T="-277" R="96" G="79" B="28" A="255"/>
|
||||
<Vtx X="953" Y="-636" Z="-258" S="62" T="-277" R="100" G="79" B="253" A="255"/>
|
||||
<Vtx X="953" Y="-636" Z="258" S="62" T="-277" R="100" G="79" B="3" A="255"/>
|
||||
</Vertex>
|
@ -0,0 +1,12 @@
|
||||
<Vertex Version="0">
|
||||
<Vtx X="-21" Y="362" Z="-291" S="-280" T="103" R="0" G="5" B="129" A="255"/>
|
||||
<Vtx X="-179" Y="-722" Z="-291" S="-196" T="52" R="246" G="164" B="169" A="255"/>
|
||||
<Vtx X="-641" Y="-449" Z="-291" S="-232" T="103" R="199" G="189" B="164" A="255"/>
|
||||
<Vtx X="104" Y="-535" Z="-291" S="-236" T="55" R="4" G="156" B="178" A="255"/>
|
||||
<Vtx X="789" Y="-680" Z="-291" S="-229" T="9" R="250" G="168" B="164" A="255"/>
|
||||
<Vtx X="-21" Y="362" Z="291" S="-280" T="103" R="0" G="5" B="127" A="255"/>
|
||||
<Vtx X="-641" Y="-449" Z="291" S="-232" T="103" R="199" G="189" B="92" A="255"/>
|
||||
<Vtx X="-179" Y="-722" Z="291" S="-196" T="52" R="246" G="164" B="87" A="255"/>
|
||||
<Vtx X="104" Y="-535" Z="291" S="-236" T="55" R="4" G="156" B="78" A="255"/>
|
||||
<Vtx X="789" Y="-680" Z="291" S="-229" T="9" R="250" G="168" B="92" A="255"/>
|
||||
</Vertex>
|
@ -0,0 +1,18 @@
|
||||
<Vertex Version="0">
|
||||
<Vtx X="-723" Y="-322" Z="261" S="1659" T="-1411" R="156" G="79" B="1" A="255"/>
|
||||
<Vtx X="-723" Y="-322" Z="-261" S="-669" T="-1411" R="156" G="79" B="255" A="255"/>
|
||||
<Vtx X="-715" Y="-328" Z="-263" S="-683" T="-1373" R="184" G="237" B="153" A="255"/>
|
||||
<Vtx X="-715" Y="-328" Z="263" S="1668" T="-1373" R="184" G="237" B="103" A="255"/>
|
||||
<Vtx X="-641" Y="-449" Z="-291" S="-703" T="-945" R="199" G="189" B="164" A="255"/>
|
||||
<Vtx X="-641" Y="-449" Z="291" S="1688" T="-945" R="199" G="189" B="92" A="255"/>
|
||||
<Vtx X="-179" Y="-722" Z="-291" S="-703" T="289" R="246" G="164" B="169" A="255"/>
|
||||
<Vtx X="-179" Y="-722" Z="291" S="1688" T="289" R="246" G="164" B="87" A="255"/>
|
||||
<Vtx X="104" Y="-535" Z="-291" S="-703" T="1094" R="4" G="156" B="178" A="255"/>
|
||||
<Vtx X="104" Y="-535" Z="291" S="1688" T="1094" R="4" G="156" B="78" A="255"/>
|
||||
<Vtx X="789" Y="-680" Z="-291" S="-703" T="2016" R="250" G="168" B="164" A="255"/>
|
||||
<Vtx X="789" Y="-680" Z="291" S="1688" T="2016" R="250" G="168" B="92" A="255"/>
|
||||
<Vtx X="925" Y="-641" Z="-263" S="-683" T="2363" R="35" G="218" B="140" A="255"/>
|
||||
<Vtx X="925" Y="-641" Z="263" S="1668" T="2363" R="35" G="218" B="116" A="255"/>
|
||||
<Vtx X="953" Y="-636" Z="-258" S="-665" T="2403" R="100" G="79" B="253" A="255"/>
|
||||
<Vtx X="953" Y="-636" Z="258" S="1649" T="2403" R="100" G="79" B="3" A="255"/>
|
||||
</Vertex>
|
@ -0,0 +1,21 @@
|
||||
<DisplayList Version="0">
|
||||
<PipeSync/>
|
||||
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_TEXEL0" 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"/>
|
||||
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
|
||||
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||
<Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
|
||||
<SetTextureLUT Mode="G_TT_NONE"/>
|
||||
<TileSync/>
|
||||
<SetTextureImage Path="objects/object_triforce_piece_2/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
|
||||
<LoadSync/>
|
||||
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
|
||||
<PipeSync/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" 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"/>
|
||||
<SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,21 @@
|
||||
<DisplayList Version="0">
|
||||
<PipeSync/>
|
||||
<SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_TEXEL0" 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"/>
|
||||
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_SHADING_SMOOTH="1" />
|
||||
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||
<Texture S="1966" T="1966" Level="0" Tile="0" On="1"/>
|
||||
<SetTextureLUT Mode="G_TT_NONE"/>
|
||||
<TileSync/>
|
||||
<SetTextureImage Path="objects/object_triforce_piece_2/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
|
||||
<LoadSync/>
|
||||
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
|
||||
<PipeSync/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" 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"/>
|
||||
<SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
@ -0,0 +1,21 @@
|
||||
<DisplayList Version="0">
|
||||
<PipeSync/>
|
||||
<SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_TEXEL0" D0="G_CCMUX_TEXEL0" 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"/>
|
||||
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_SHADING_SMOOTH="1" />
|
||||
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||
<Texture S="2621" T="1311" Level="0" Tile="0" On="1"/>
|
||||
<SetTextureLUT Mode="G_TT_NONE"/>
|
||||
<TileSync/>
|
||||
<SetTextureImage Path="objects/object_triforce_piece_2/noise_tex" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
|
||||
<LoadSync/>
|
||||
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
|
||||
<PipeSync/>
|
||||
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" 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"/>
|
||||
<SetPrimColor M="0" L="0" R="255" G="195" B="0" A="255"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
BIN
OTRExporter/assets/objects/object_triforce_piece_2/noise_tex
Normal file
BIN
OTRExporter/assets/objects/object_triforce_piece_2/noise_tex
Normal file
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
@ -44,6 +44,18 @@ static const ALIGN_ASSET(2) char gTitleRandomizerSubtitleTex[] = dgTitleRandomiz
|
||||
#define dgTitleBossRushSubtitleTex "__OTR__objects/object_mag/gTitleBossRushSubtitleTex"
|
||||
static const ALIGN_ASSET(2) char gTitleBossRushSubtitleTex[] = dgTitleBossRushSubtitleTex;
|
||||
|
||||
#define dgTriforcePiece0DL "__OTR__objects/object_triforce_piece_0/gTriforcePiece0DL"
|
||||
static const ALIGN_ASSET(2) char gTriforcePiece0DL[] = dgTriforcePiece0DL;
|
||||
|
||||
#define dgTriforcePiece1DL "__OTR__objects/object_triforce_piece_1/gTriforcePiece1DL"
|
||||
static const ALIGN_ASSET(2) char gTriforcePiece1DL[] = dgTriforcePiece1DL;
|
||||
|
||||
#define dgTriforcePiece2DL "__OTR__objects/object_triforce_piece_2/gTriforcePiece2DL"
|
||||
static const ALIGN_ASSET(2) char gTriforcePiece2DL[] = dgTriforcePiece2DL;
|
||||
|
||||
#define dgTriforcePieceCompletedDL "__OTR__objects/object_triforce_completed/gTriforcePieceCompletedDL"
|
||||
static const ALIGN_ASSET(2) char gTriforcePieceCompletedDL[] = dgTriforcePieceCompletedDL;
|
||||
|
||||
// overlays
|
||||
#define dgOptionsDividerChangeLangVtx "__OTR__overlays/ovl_file_choose/gOptionsDividerChangeLangVtx"
|
||||
static const ALIGN_ASSET(2) char gOptionsDividerChangeLangVtx[] = dgOptionsDividerChangeLangVtx;
|
||||
@ -58,6 +70,9 @@ static const ALIGN_ASSET(2) char gArrowUpTex[] = dgArrowUp;
|
||||
#define dgArrowDown "__OTR__textures/parameter_static/gArrowDown"
|
||||
static const ALIGN_ASSET(2) char gArrowDownTex[] = dgArrowDown;
|
||||
|
||||
#define dgTriforcePiece "__OTR__textures/parameter_static/gTriforcePiece"
|
||||
static const ALIGN_ASSET(2) char gTriforcePieceTex[] = dgTriforcePiece;
|
||||
|
||||
#define dgFileSelMQButtonTex "__OTR__textures/title_static/gFileSelMQButtonTex"
|
||||
static const ALIGN_ASSET(2) char gFileSelMQButtonTex[] = dgFileSelMQButtonTex;
|
||||
|
||||
|
@ -171,6 +171,7 @@ extern "C"
|
||||
extern u8 gWalkSpeedToggle1;
|
||||
extern u8 gWalkSpeedToggle2;
|
||||
extern f32 iceTrapScale;
|
||||
extern f32 triforcePieceScale;
|
||||
|
||||
extern const s16 D_8014A6C0[];
|
||||
#define gTatumsPerBeat (D_8014A6C0[1])
|
||||
|
@ -511,6 +511,7 @@ typedef enum {
|
||||
/* 0x79 */ GID_SONG_SUN,
|
||||
/* 0x7A */ GID_SONG_TIME,
|
||||
/* 0x7B */ GID_SONG_STORM,
|
||||
/* 0x7C */ GID_TRIFORCE_PIECE,
|
||||
/* 0x7C */ GID_MAXIMUM
|
||||
|
||||
} GetItemDrawID;
|
||||
|
@ -620,7 +620,7 @@ typedef struct Player {
|
||||
/* 0x0858 */ f32 unk_858;
|
||||
/* 0x085C */ f32 unk_85C; // stick length among other things
|
||||
/* 0x0860 */ s16 unk_860; // stick flame timer among other things
|
||||
/* 0x0862 */ s8 unk_862; // get item draw ID + 1
|
||||
/* 0x0862 */ s16 unk_862; // get item draw ID + 1
|
||||
/* 0x0864 */ f32 unk_864;
|
||||
/* 0x0868 */ f32 unk_868;
|
||||
/* 0x086C */ f32 unk_86C;
|
||||
|
@ -324,6 +324,7 @@ typedef struct {
|
||||
/* */ u8 seedIcons[5];
|
||||
/* */ u16 randomizerInf[10];
|
||||
/* */ u16 adultTradeItems;
|
||||
/* */ u8 triforcePiecesCollected;
|
||||
// #endregion
|
||||
} SaveContext; // size = 0x1428
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include <string>
|
||||
#include <libultraship/bridge.h>
|
||||
#include <libultraship/libultraship.h>
|
||||
#include "soh_assets.h"
|
||||
|
||||
extern "C" {
|
||||
#include <z64.h>
|
||||
@ -144,6 +145,10 @@ std::map<uint32_t, ItemMapEntry> gregMapping = {
|
||||
{ITEM_RUPEE_GREEN, {ITEM_RUPEE_GREEN, "ITEM_RUPEE_GREEN", "ITEM_RUPEE_GREEN_Faded", gRupeeCounterIconTex}}
|
||||
};
|
||||
|
||||
std::map<uint32_t, ItemMapEntry> triforcePieceMapping = {
|
||||
{RG_TRIFORCE_PIECE, {RG_TRIFORCE_PIECE, "RG_TRIFORCE_PIECE", "RG_TRIFORCE_PIECE_Faded", gTriforcePieceTex}}
|
||||
};
|
||||
|
||||
// Maps entries in the GS flag array to the area name it represents
|
||||
std::vector<std::string> gsMapping = {
|
||||
"Deku Tree",
|
||||
@ -509,6 +514,10 @@ void DrawInfoTab() {
|
||||
}
|
||||
UIWidgets::InsertHelpHoverText("Z-Targeting behavior");
|
||||
|
||||
if (gSaveContext.n64ddFlag && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT)) {
|
||||
ImGui::InputScalar("Triforce Pieces", ImGuiDataType_U16, &gSaveContext.triforcePiecesCollected);
|
||||
UIWidgets::InsertHelpHoverText("Currently obtained Triforce Pieces. For Triforce Hunt.");
|
||||
}
|
||||
|
||||
ImGui::PushItemWidth(ImGui::GetFontSize() * 10);
|
||||
static std::array<const char*, 7> minigameHS = { "Horseback Archery",
|
||||
@ -1790,6 +1799,10 @@ void SaveEditorWindow::InitElement() {
|
||||
LUS::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, gregGreen);
|
||||
LUS::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.nameFaded, entry.second.texturePath, gregFadedGreen);
|
||||
}
|
||||
for (const auto& entry : triforcePieceMapping) {
|
||||
LUS::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, ImVec4(1, 1, 1, 1));
|
||||
LUS::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.nameFaded, entry.second.texturePath, ImVec4(1, 1, 1, 0.3f));
|
||||
}
|
||||
for (const auto& entry : questMapping) {
|
||||
LUS::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, ImVec4(1, 1, 1, 1));
|
||||
LUS::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.nameFaded, entry.second.texturePath, ImVec4(1, 1, 1, 0.3f));
|
||||
|
@ -83,6 +83,8 @@ uint8_t GameInteractor_GetRandomWindActive();
|
||||
uint8_t GameInteractor_GetRandomBonksActive();
|
||||
uint8_t GameInteractor_GetSlipperyFloorActive();
|
||||
uint8_t GameInteractor_SecondCollisionUpdate();
|
||||
void GameInteractor_SetTriforceHuntPieceGiven(uint8_t state);
|
||||
void GameInteractor_SetTriforceHuntCreditsWarpActive(uint8_t state);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
@ -123,6 +125,8 @@ public:
|
||||
static uint8_t RandomBonksActive;
|
||||
static uint8_t SlipperyFloorActive;
|
||||
static uint8_t SecondCollisionUpdate;
|
||||
static uint8_t TriforceHuntPieceGiven;
|
||||
static uint8_t TriforceHuntCreditsWarpActive;
|
||||
|
||||
static void SetPacifistMode(bool active);
|
||||
};
|
||||
|
@ -20,6 +20,8 @@ uint8_t GameInteractor::State::RandomWindSecondsSinceLastDirectionChange = 0;
|
||||
uint8_t GameInteractor::State::RandomBonksActive = 0;
|
||||
uint8_t GameInteractor::State::SlipperyFloorActive = 0;
|
||||
uint8_t GameInteractor::State::SecondCollisionUpdate = 0;
|
||||
uint8_t GameInteractor::State::TriforceHuntPieceGiven = 0;
|
||||
uint8_t GameInteractor::State::TriforceHuntCreditsWarpActive = 0;
|
||||
|
||||
void GameInteractor::State::SetPacifistMode(bool active) {
|
||||
PacifistModeActive = active;
|
||||
@ -127,3 +129,13 @@ uint8_t GameInteractor_GetSlipperyFloorActive() {
|
||||
uint8_t GameInteractor_SecondCollisionUpdate() {
|
||||
return GameInteractor::State::SecondCollisionUpdate;
|
||||
}
|
||||
|
||||
// MARK: - GameInteractor::State::TriforceHuntPieceGiven
|
||||
void GameInteractor_SetTriforceHuntPieceGiven(uint8_t state) {
|
||||
GameInteractor::State::TriforceHuntPieceGiven = state;
|
||||
}
|
||||
|
||||
// MARK: - GameInteractor::State::TriforceHuntCreditsWarpActive
|
||||
void GameInteractor_SetTriforceHuntCreditsWarpActive(uint8_t state) {
|
||||
GameInteractor::State::TriforceHuntCreditsWarpActive = state;
|
||||
}
|
||||
|
@ -793,6 +793,7 @@ void SetupDisplayNames() {
|
||||
strcpy(itemTimestampDisplayName[TIMESTAMP_DEFEAT_GANON], "Ganon Defeated: ");
|
||||
strcpy(itemTimestampDisplayName[TIMESTAMP_BOSSRUSH_FINISH], "Boss Rush Finished: ");
|
||||
strcpy(itemTimestampDisplayName[TIMESTAMP_FOUND_GREG], "Greg Found: ");
|
||||
strcpy(itemTimestampDisplayName[TIMESTAMP_TRIFORCE_COMPLETED], "Triforce Completed: ");
|
||||
}
|
||||
|
||||
void SetupDisplayColors() {
|
||||
@ -839,6 +840,7 @@ void SetupDisplayColors() {
|
||||
case ITEM_ARROW_LIGHT:
|
||||
case TIMESTAMP_DEFEAT_GANONDORF:
|
||||
case TIMESTAMP_DEFEAT_GANON:
|
||||
case TIMESTAMP_TRIFORCE_COMPLETED:
|
||||
itemTimestampDisplayColor[i] = COLOR_YELLOW;
|
||||
break;
|
||||
case ITEM_SONG_STORMS:
|
||||
|
@ -35,6 +35,7 @@ typedef enum {
|
||||
/* 0xA9 */ TIMESTAMP_DEFEAT_GANON, // z_boss_ganon2.c
|
||||
/* 0xA9 */ TIMESTAMP_BOSSRUSH_FINISH, // z_boss_ganon2.c
|
||||
/* 0xAA */ TIMESTAMP_FOUND_GREG, // z_parameter.c
|
||||
/* 0xAA */ TIMESTAMP_TRIFORCE_COMPLETED, // z_parameter.c
|
||||
/* 0xAB */ TIMESTAMP_MAX
|
||||
|
||||
}GameplayStatTimestamp;
|
||||
|
@ -2,10 +2,12 @@
|
||||
#include <libultraship/bridge.h>
|
||||
#include "game-interactor/GameInteractor.h"
|
||||
#include "tts/tts.h"
|
||||
#include "soh/OTRGlobals.h"
|
||||
#include "soh/Enhancements/boss-rush/BossRushTypes.h"
|
||||
#include "soh/Enhancements/enhancementTypes.h"
|
||||
#include "soh/Enhancements/randomizer/3drando/random.hpp"
|
||||
#include "soh/Enhancements/cosmetics/authenticGfxPatches.h"
|
||||
#include <soh/Enhancements/item-tables/ItemTableManager.h>
|
||||
#include "soh/Enhancements/nametag.h"
|
||||
|
||||
#include "src/overlays/actors/ovl_En_Bb/z_en_bb.h"
|
||||
@ -613,6 +615,45 @@ void RegisterMirrorModeHandler() {
|
||||
});
|
||||
}
|
||||
|
||||
f32 triforcePieceScale;
|
||||
|
||||
void RegisterTriforceHunt() {
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnPlayerUpdate>([]() {
|
||||
if (!GameInteractor::IsGameplayPaused() &&
|
||||
OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT)) {
|
||||
|
||||
// Warp to credits
|
||||
if (GameInteractor::State::TriforceHuntCreditsWarpActive) {
|
||||
gPlayState->nextEntranceIndex = 0x6B;
|
||||
gSaveContext.nextCutsceneIndex = 0xFFF2;
|
||||
gPlayState->sceneLoadFlag = 0x14;
|
||||
gPlayState->fadeTransition = 3;
|
||||
GameInteractor::State::TriforceHuntCreditsWarpActive = 0;
|
||||
}
|
||||
|
||||
// Reset Triforce Piece scale for GI animation. Triforce Hunt allows for multiple triforce models,
|
||||
// and cycles through them based on the amount of triforce pieces collected. It takes a little while
|
||||
// for the count to increase during the GI animation, so the model is entirely hidden until that piece
|
||||
// has been added. That scale has to be reset after the textbox is closed, and this is the best way
|
||||
// to ensure it's done at that point in time specifically.
|
||||
if (GameInteractor::State::TriforceHuntPieceGiven) {
|
||||
triforcePieceScale = 0.0f;
|
||||
GameInteractor::State::TriforceHuntPieceGiven = 0;
|
||||
}
|
||||
|
||||
uint8_t currentPieces = gSaveContext.triforcePiecesCollected;
|
||||
uint8_t requiredPieces = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED);
|
||||
|
||||
// Give Boss Key when player loads back into the savefile.
|
||||
if (currentPieces >= requiredPieces && gPlayState->sceneLoadFlag != 0x14 &&
|
||||
(1 << 0 & gSaveContext.inventory.dungeonItems[SCENE_GANONS_TOWER]) == 0) {
|
||||
GetItemEntry getItemEntry = ItemTableManager::Instance->RetrieveItemEntry(MOD_RANDOMIZER, RG_GANONS_CASTLE_BOSS_KEY);
|
||||
GiveItemEntryWithoutActor(gPlayState, getItemEntry);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//this map is used for enemies that can be uniquely identified by their id
|
||||
//and that are always counted
|
||||
//enemies that can't be uniquely identified by their id
|
||||
@ -996,6 +1037,7 @@ void InitMods() {
|
||||
RegisterBonkDamage();
|
||||
RegisterMenuPathFix();
|
||||
RegisterMirrorModeHandler();
|
||||
RegisterTriforceHunt();
|
||||
RegisterEnemyDefeatCounts();
|
||||
RegisterAltTrapTypes();
|
||||
RegisterRandomizerSheikSpawn();
|
||||
|
@ -503,7 +503,9 @@ static std::vector<uint32_t> CalculateBarrenRegions() {
|
||||
if (Location(loc)->GetPlacedItem().IsMajorItem() || ElementInContainer(loc, wothLocations)) {
|
||||
AddElementsToPool(potentiallyUsefulLocations, std::vector{loc});
|
||||
} else {
|
||||
if (loc != LINKS_POCKET) { //Nobody cares to know if Link's Pocket is barren
|
||||
// Link's Pocket & Triforce Hunt "reward" shouldn't be considered for barren areas because it's clear what
|
||||
// they have to a player.
|
||||
if (loc != LINKS_POCKET && loc != TRIFORCE_COMPLETED) {
|
||||
AddElementsToPool(barrenLocations, std::vector{loc});
|
||||
}
|
||||
}
|
||||
@ -723,6 +725,9 @@ static Text BuildGanonBossKeyText() {
|
||||
|
||||
} else if (GanonsBossKey.Is(GANONSBOSSKEY_LACS_TOKENS)) {
|
||||
ganonBossKeyText = BuildCountReq(LACS_TOKENS_HINT, LACSTokenCount);
|
||||
|
||||
} else if (GanonsBossKey.Is(GANONSBOSSKEY_TRIFORCE_HUNT)) {
|
||||
ganonBossKeyText = Hint(GANON_BK_TRIFORCE_HINT).GetText();
|
||||
}
|
||||
|
||||
return Text()+"$b"+ganonBossKeyText+"^";
|
||||
|
@ -242,6 +242,7 @@ void ItemTable_Init() { // RandomizerGet
|
||||
itemTable[BUY_RED_POTION_40] = Item(RG_BUY_RED_POTION_40, Text{"Buy Red Potion [40]", "Acheter: Potion Rouge [40]", "Comprar poción roja [40]"}, ITEMTYPE_SHOP, 0x30, false, &noVariable, BOTTLE_WITH_RED_POTION, 40);
|
||||
itemTable[BUY_RED_POTION_50] = Item(RG_BUY_RED_POTION_50, Text{"Buy Red Potion [50]", "Acheter: Potion Rouge [50]", "Comprar poción roja [50]"}, ITEMTYPE_SHOP, 0x31, false, &noVariable, BOTTLE_WITH_RED_POTION, 50);
|
||||
|
||||
itemTable[TRIFORCE_PIECE] = Item(RG_TRIFORCE_PIECE, Text{"Triforce Piece", "Triforce Piece", "Triforce Piece"}, ITEMTYPE_ITEM, 0xDF, true, &TriforcePieces, TRIFORCE_PIECE);
|
||||
itemTable[TRIFORCE] = Item(RG_TRIFORCE, Text{"Triforce", "Triforce", "Trifuerza"}, ITEMTYPE_EVENT, GI_RUPEE_RED_LOSE, false, &noVariable, NONE);
|
||||
itemTable[HINT] = Item(RG_HINT, Text{"Hint", "Indice", "Pista"}, ITEMTYPE_EVENT, GI_RUPEE_BLUE_LOSE, false, &noVariable, NONE);
|
||||
|
||||
|
@ -918,6 +918,7 @@ void LocationTable_Init() {
|
||||
locationTable[DMC_UPPER_GROTTO_GOSSIP_STONE] = ItemLocation::HintStone(RC_DMC_UPPER_GROTTO_GOSSIP_STONE, "DMC Upper Grotto Gossip Stone");
|
||||
|
||||
locationTable[GANONDORF_HINT] = ItemLocation::OtherHint(RC_GANONDORF_HINT, "Ganondorf Hint");
|
||||
locationTable[TRIFORCE_COMPLETED] = ItemLocation::Reward (RC_TRIFORCE_COMPLETED, 0xFF, "Completed Triforce", NONE, TRIFORCE_COMPLETED, {}, SpoilerCollectionCheck::None(), SpoilerCollectionCheckGroup::GROUP_NO_GROUP);
|
||||
|
||||
for (int i = NONE; i != KEY_ENUM_MAX; i++)
|
||||
locationLookupTable.insert(std::make_pair(locationTable[i].GetRandomizerCheck(), static_cast<Key>(i)));
|
||||
@ -1523,6 +1524,9 @@ void GenerateLocationPool() {
|
||||
|
||||
allLocations.clear();
|
||||
AddLocation(LINKS_POCKET);
|
||||
if (Settings::TriforceHunt.Is(TRIFORCE_HUNT_ON)) {
|
||||
AddLocation(TRIFORCE_COMPLETED);
|
||||
}
|
||||
AddLocations(overworldLocations);
|
||||
|
||||
for (auto dungeon : Dungeon::dungeonList) {
|
||||
|
@ -662,9 +662,17 @@ void GenerateItemPool() {
|
||||
IceTrapModels.push_back(0xD3);
|
||||
}
|
||||
|
||||
if (TriforceHunt.Is(TRIFORCE_HUNT_ON)) {
|
||||
IceTrapModels.push_back(0xDF);
|
||||
AddItemToMainPool(TRIFORCE_PIECE, Settings::TriforceHuntTotal.Value<uint8_t>());
|
||||
PlaceItemInLocation(TRIFORCE_COMPLETED, TRIFORCE); // Win condition
|
||||
PlaceItemInLocation(GANON, GetJunkItem(), false, true);
|
||||
} else {
|
||||
PlaceItemInLocation(GANON, TRIFORCE); // Win condition
|
||||
}
|
||||
|
||||
//Fixed item locations
|
||||
PlaceItemInLocation(HC_ZELDAS_LETTER, ZELDAS_LETTER);
|
||||
PlaceItemInLocation(GANON, TRIFORCE); //The Triforce is only used to make sure Ganon is accessible
|
||||
PlaceItemInLocation(MARKET_BOMBCHU_BOWLING_BOMBCHUS, BOMBCHU_DROP);
|
||||
|
||||
if (ShuffleKokiriSword) {
|
||||
@ -1135,7 +1143,7 @@ void GenerateItemPool() {
|
||||
|
||||
if (GanonsBossKey.Is(GANONSBOSSKEY_FINAL_GS_REWARD)) {
|
||||
PlaceItemInLocation(KAK_100_GOLD_SKULLTULA_REWARD, GANONS_CASTLE_BOSS_KEY);
|
||||
} else if (GanonsBossKey.Value<uint8_t>() >= GANONSBOSSKEY_LACS_VANILLA) {
|
||||
} else if (GanonsBossKey.Value<uint8_t>() >= GANONSBOSSKEY_LACS_VANILLA && GanonsBossKey.IsNot(GANONSBOSSKEY_TRIFORCE_HUNT)) {
|
||||
PlaceItemInLocation(TOT_LIGHT_ARROWS_CUTSCENE, GANONS_CASTLE_BOSS_KEY);
|
||||
} else if (GanonsBossKey.Is(GANONSBOSSKEY_VANILLA)) {
|
||||
PlaceItemInLocation(GANONS_TOWER_BOSS_KEY_CHEST, GANONS_CASTLE_BOSS_KEY);
|
||||
|
@ -202,6 +202,7 @@ typedef enum {
|
||||
|
||||
TRIFORCE,
|
||||
TRIFORCE_PIECE,
|
||||
TRIFORCE_COMPLETED,
|
||||
EPONA,
|
||||
HINT,
|
||||
|
||||
|
@ -256,7 +256,8 @@ void AreaTable_Init() {
|
||||
//name, scene, hint text, events, locations, exits
|
||||
areaTable[ROOT] = Area("Root", "", LINKS_POCKET, NO_DAY_NIGHT_CYCLE, {}, {
|
||||
//Locations
|
||||
LocationAccess(LINKS_POCKET, {[]{return true;}})
|
||||
LocationAccess(LINKS_POCKET, {[]{return true;}}),
|
||||
LocationAccess(TRIFORCE_COMPLETED, { [] { return CanCompleteTriforce;}}),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(ROOT_EXITS, {[]{return true;}})
|
||||
|
@ -150,6 +150,9 @@ namespace Logic {
|
||||
uint8_t BottomOfTheWellKeys = 0;
|
||||
uint8_t TreasureGameKeys = 0;
|
||||
|
||||
//Triforce Pieces
|
||||
uint8_t TriforcePieces = 0;
|
||||
|
||||
//Boss Keys
|
||||
bool BossKeyForestTemple = false;
|
||||
bool BossKeyFireTemple = false;
|
||||
@ -309,6 +312,7 @@ namespace Logic {
|
||||
bool AtDay = false;
|
||||
bool AtNight = false;
|
||||
uint8_t Age = 0;
|
||||
bool CanCompleteTriforce = false;
|
||||
|
||||
//Events
|
||||
bool ShowedMidoSwordAndShield = false;
|
||||
@ -620,7 +624,7 @@ namespace Logic {
|
||||
(LACSCondition == LACSCONDITION_REWARDS && StoneCount + MedallionCount + (Greg && GregInLogic ? 1 : 0) >= LACSRewardCount.Value<uint8_t>()) ||
|
||||
(LACSCondition == LACSCONDITION_DUNGEONS && DungeonCount + (Greg && GregInLogic ? 1 : 0) >= LACSDungeonCount.Value<uint8_t>()) ||
|
||||
(LACSCondition == LACSCONDITION_TOKENS && GoldSkulltulaTokens >= LACSTokenCount.Value<uint8_t>());
|
||||
|
||||
CanCompleteTriforce = TriforcePieces >= TriforceHuntRequired.Value<uint8_t>();
|
||||
}
|
||||
|
||||
bool SmallKeys(Key dungeon, uint8_t requiredAmount) {
|
||||
@ -873,7 +877,8 @@ namespace Logic {
|
||||
NumBottles = 0;
|
||||
NoBottles = false;
|
||||
|
||||
|
||||
//Triforce Pieces
|
||||
TriforcePieces = 0;
|
||||
|
||||
//Drops and Bottle Contents Access
|
||||
DekuNutDrop = false;
|
||||
|
@ -143,6 +143,9 @@ extern uint8_t GerudoFortressKeys;
|
||||
extern uint8_t GanonsCastleKeys;
|
||||
extern uint8_t TreasureGameKeys;
|
||||
|
||||
// Triforce Pieces
|
||||
extern uint8_t TriforcePieces;
|
||||
|
||||
// Boss Keys
|
||||
extern bool BossKeyForestTemple;
|
||||
extern bool BossKeyFireTemple;
|
||||
@ -298,6 +301,7 @@ extern bool AtDay;
|
||||
extern bool AtNight;
|
||||
extern bool LinksCow;
|
||||
extern uint8_t Age;
|
||||
extern bool CanCompleteTriforce;
|
||||
|
||||
// Events
|
||||
extern bool ShowedMidoSwordAndShield;
|
||||
|
@ -101,6 +101,9 @@ namespace Settings {
|
||||
Option BombchusInLogic = Option::Bool("Bombchus in Logic", {"Off", "On"});
|
||||
Option AmmoDrops = Option::U8 ("Ammo Drops", {"On", "On + Bombchu", "Off"}, OptionCategory::Setting, AMMODROPS_BOMBCHU);
|
||||
Option HeartDropRefill = Option::U8 ("Heart Drops and Refills",{"On", "No Drop", "No Refill", "Off"}, OptionCategory::Setting, HEARTDROPREFILL_VANILLA);
|
||||
Option TriforceHunt = Option::U8 ("Triforce Hunt", {"Off", "On"});
|
||||
Option TriforceHuntTotal = Option::U8 ("Triforce Hunt Total Pieces", {NumOpts(0, 100)});
|
||||
Option TriforceHuntRequired = Option::U8 ("Triforce Hunt Required Pieces", {NumOpts(0, 100)});
|
||||
Option MQDungeonCount = Option::U8(
|
||||
"MQ Dungeon Count", { MultiVecOpts({ NumOpts(0, 12), { "Random" }, { "Selection" } }) });
|
||||
uint8_t MQSet;
|
||||
@ -139,6 +142,9 @@ namespace Settings {
|
||||
&BombchusInLogic,
|
||||
&AmmoDrops,
|
||||
&HeartDropRefill,
|
||||
&TriforceHunt,
|
||||
&TriforceHuntTotal,
|
||||
&TriforceHuntRequired,
|
||||
&MQDungeonCount,
|
||||
&SetDungeonTypes,
|
||||
&MQDeku,
|
||||
@ -219,7 +225,7 @@ namespace Settings {
|
||||
Option Keysanity = Option::U8 ("Small Keys", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, KEYSANITY_OWN_DUNGEON);
|
||||
Option GerudoKeys = Option::U8 ("Gerudo Fortress Keys", {"Vanilla", "Any Dungeon", "Overworld", "Anywhere"});
|
||||
Option BossKeysanity = Option::U8 ("Boss Keys", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, BOSSKEYSANITY_OWN_DUNGEON);
|
||||
Option GanonsBossKey = Option::U8 ("Ganon's Boss Key", {"Vanilla", "Own dungeon", "Start with", "Any Dungeon", "Overworld", "Anywhere", "LACS-Vanilla", "LACS-Stones", "LACS-Medallions", "LACS-Rewards", "LACS-Dungeons", "LACS-Tokens", "100 GS Reward"}, OptionCategory::Setting, GANONSBOSSKEY_VANILLA);
|
||||
Option GanonsBossKey = Option::U8 ("Ganon's Boss Key", {"Vanilla", "Own dungeon", "Start with", "Any Dungeon", "Overworld", "Anywhere", "LACS-Vanilla", "LACS-Stones", "LACS-Medallions", "LACS-Rewards", "LACS-Dungeons", "LACS-Tokens", "100 GS Reward", "Triforce Hunt"}, OptionCategory::Setting, GANONSBOSSKEY_VANILLA);
|
||||
uint8_t LACSCondition = 0;
|
||||
Option LACSStoneCount = Option::U8 ("Stone Count", {NumOpts(0, 4)}, OptionCategory::Setting, 1, true);
|
||||
Option LACSMedallionCount = Option::U8 ("Medallion Count", {NumOpts(0, 7)}, OptionCategory::Setting, 1, true);
|
||||
@ -1685,6 +1691,13 @@ namespace Settings {
|
||||
IncludeAndHide({KAK_100_GOLD_SKULLTULA_REWARD});
|
||||
}
|
||||
|
||||
//Force include Triforce Hunt if it's off
|
||||
if (TriforceHunt) {
|
||||
Unhide({ TRIFORCE_COMPLETED });
|
||||
} else {
|
||||
IncludeAndHide({ TRIFORCE_COMPLETED });
|
||||
}
|
||||
|
||||
//Force include Map and Compass Chests when Vanilla
|
||||
std::vector<uint32_t> mapChests = GetLocations(everyPossibleLocation, Category::cVanillaMap);
|
||||
std::vector<uint32_t> compassChests = GetLocations(everyPossibleLocation, Category::cVanillaCompass);
|
||||
@ -2365,7 +2378,11 @@ namespace Settings {
|
||||
Keysanity.SetSelectedIndex(cvarSettings[RSK_KEYSANITY]);
|
||||
GerudoKeys.SetSelectedIndex(cvarSettings[RSK_GERUDO_KEYS]);
|
||||
BossKeysanity.SetSelectedIndex(cvarSettings[RSK_BOSS_KEYSANITY]);
|
||||
if (cvarSettings[RSK_TRIFORCE_HUNT]) {
|
||||
GanonsBossKey.SetSelectedIndex(RO_GANON_BOSS_KEY_TRIFORCE_HUNT);
|
||||
} else {
|
||||
GanonsBossKey.SetSelectedIndex(cvarSettings[RSK_GANONS_BOSS_KEY]);
|
||||
}
|
||||
LACSStoneCount.SetSelectedIndex(cvarSettings[RSK_LACS_STONE_COUNT]);
|
||||
LACSMedallionCount.SetSelectedIndex(cvarSettings[RSK_LACS_MEDALLION_COUNT]);
|
||||
LACSRewardCount.SetSelectedIndex(cvarSettings[RSK_LACS_REWARD_COUNT]);
|
||||
@ -2470,6 +2487,10 @@ namespace Settings {
|
||||
}
|
||||
}
|
||||
|
||||
TriforceHunt.SetSelectedIndex(cvarSettings[RSK_TRIFORCE_HUNT]);
|
||||
TriforceHuntTotal.SetSelectedIndex(cvarSettings[RSK_TRIFORCE_HUNT_PIECES_TOTAL]);
|
||||
TriforceHuntRequired.SetSelectedIndex(cvarSettings[RSK_TRIFORCE_HUNT_PIECES_REQUIRED]);
|
||||
|
||||
//Set key ring for each dungeon
|
||||
for (size_t i = 0; i < dungeons.size(); i++) {
|
||||
dungeons[i]->ClearKeyRing();
|
||||
|
@ -91,6 +91,11 @@ typedef enum {
|
||||
LACS_OPTION_WILDCARD,
|
||||
} LACSRewardOptionsSetting;
|
||||
|
||||
typedef enum {
|
||||
TRIFORCE_HUNT_OFF,
|
||||
TRIFORCE_HUNT_ON,
|
||||
} TriforceHuntSetting;
|
||||
|
||||
typedef enum {
|
||||
AGE_CHILD,
|
||||
AGE_ADULT,
|
||||
@ -249,6 +254,7 @@ typedef enum {
|
||||
GANONSBOSSKEY_LACS_DUNGEONS,
|
||||
GANONSBOSSKEY_LACS_TOKENS,
|
||||
GANONSBOSSKEY_FINAL_GS_REWARD,
|
||||
GANONSBOSSKEY_TRIFORCE_HUNT,
|
||||
} GanonsBossKeySetting;
|
||||
|
||||
typedef enum {
|
||||
@ -780,6 +786,9 @@ void UpdateSettings(std::unordered_map<RandomizerSettingKey, uint8_t> cvarSettin
|
||||
extern Option BombchusInLogic;
|
||||
extern Option AmmoDrops;
|
||||
extern Option HeartDropRefill;
|
||||
extern Option TriforceHunt;
|
||||
extern Option TriforceHuntTotal;
|
||||
extern Option TriforceHuntRequired;
|
||||
extern Option MQDungeonCount;
|
||||
extern Option SetDungeonTypes;
|
||||
|
||||
|
@ -13,7 +13,7 @@ using namespace Settings;
|
||||
|
||||
std::vector<ItemAndPrice> NonShopItems = {};
|
||||
|
||||
static std::array<std::vector<Text>, 0xD5> trickNameTable; //Table of trick names for ice traps
|
||||
static std::array<std::vector<Text>, 0xE0> trickNameTable; // Table of trick names for ice traps
|
||||
bool initTrickNames = false; //Indicates if trick ice trap names have been initialized yet
|
||||
|
||||
//Set vanilla shop item locations before potentially shuffling
|
||||
@ -698,6 +698,10 @@ void InitTrickNames() {
|
||||
Text{"Crystal Heart", "Cœur de cristal", "Corazón de cristal"},
|
||||
Text{"Life Heart", "Cœur de vie", "Vida Corazón"},
|
||||
Text{"Lots of Love", "Beaucoup d'amour", "Mucho amor"}};
|
||||
trickNameTable[0xDF] = {
|
||||
Text{"Piece of Cheese", "Morceau de Fromage", "Piece of Cheese"},
|
||||
Text{"Triforce Shard", "Éclat de Triforce", "Triforce Shard"},
|
||||
Text{"Shiny Rock", "Caiiloux Brillant", "Shiny Rock"}};
|
||||
|
||||
/*
|
||||
//Names for individual upgrades, in case progressive names are replaced
|
||||
|
@ -54,7 +54,9 @@ void GenerateStartingInventory() {
|
||||
AddItemToInventory(SHADOW_TEMPLE_BOSS_KEY);
|
||||
}
|
||||
|
||||
if (GanonsBossKey.Is(GANONSBOSSKEY_START_WITH)) {
|
||||
// Add Ganon's Boss key with Triforce Hunt so the game thinks it's obtainable from the start.
|
||||
// During save init, the boss key isn't actually given and it's instead given when completing the triforce.
|
||||
if (GanonsBossKey.Is(GANONSBOSSKEY_START_WITH) || GanonsBossKey.Is(GANONSBOSSKEY_TRIFORCE_HUNT)) {
|
||||
AddItemToInventory(GANONS_CASTLE_BOSS_KEY);
|
||||
}
|
||||
|
||||
|
@ -3,17 +3,23 @@
|
||||
#include "z64.h"
|
||||
#include "macros.h"
|
||||
#include "functions.h"
|
||||
#include "variables.h"
|
||||
#include "soh/OTRGlobals.h"
|
||||
#include "randomizerTypes.h"
|
||||
#include <array>
|
||||
#include "objects/object_gi_key/object_gi_key.h"
|
||||
#include "objects/object_gi_bosskey/object_gi_bosskey.h"
|
||||
#include "objects/object_gi_hearts/object_gi_hearts.h"
|
||||
#include "objects/gameplay_field_keep/gameplay_field_keep.h"
|
||||
#include "soh_assets.h"
|
||||
|
||||
extern "C" {
|
||||
extern SaveContext gSaveContext;
|
||||
}
|
||||
|
||||
extern "C" u8 Randomizer_GetSettingValue(RandomizerSettingKey randoSettingKey);
|
||||
|
||||
extern "C" void Randomizer_DrawSmallKey(PlayState* play, GetItemEntry* getItemEntry) {
|
||||
s32 pad;
|
||||
s8 keysCanBeOutsideDungeon = getItemEntry->getItemId == RG_GERUDO_FORTRESS_SMALL_KEY ?
|
||||
Randomizer_GetSettingValue(RSK_GERUDO_KEYS) != RO_GERUDO_KEYS_VANILLA :
|
||||
DUNGEON_ITEMS_CAN_BE_OUTSIDE_DUNGEON(RSK_KEYSANITY);
|
||||
@ -53,7 +59,6 @@ extern "C" void Randomizer_DrawSmallKey(PlayState* play, GetItemEntry* getItemEn
|
||||
}
|
||||
|
||||
extern "C" void Randomizer_DrawBossKey(PlayState* play, GetItemEntry* getItemEntry) {
|
||||
s32 pad;
|
||||
s8 keysCanBeOutsideDungeon = getItemEntry->getItemId == RG_GANONS_CASTLE_BOSS_KEY ?
|
||||
DUNGEON_ITEMS_CAN_BE_OUTSIDE_DUNGEON(RSK_GANONS_BOSS_KEY) :
|
||||
DUNGEON_ITEMS_CAN_BE_OUTSIDE_DUNGEON(RSK_BOSS_KEYSANITY);
|
||||
@ -107,8 +112,6 @@ extern "C" void Randomizer_DrawBossKey(PlayState* play, GetItemEntry* getItemEnt
|
||||
}
|
||||
|
||||
extern "C" void Randomizer_DrawKeyRing(PlayState* play, GetItemEntry* getItemEntry) {
|
||||
s32 pad;
|
||||
|
||||
s16 color_slot = getItemEntry->getItemId - RG_FOREST_TEMPLE_KEY_RING;
|
||||
s16 colors[9][3] = {
|
||||
{ 4, 195, 46 }, // Forest Temple
|
||||
@ -155,7 +158,6 @@ extern "C" void Randomizer_DrawKeyRing(PlayState* play, GetItemEntry* getItemEnt
|
||||
}
|
||||
|
||||
extern "C" void Randomizer_DrawDoubleDefense(PlayState* play, GetItemEntry getItemEntry) {
|
||||
s32 pad;
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
|
||||
@ -173,3 +175,84 @@ extern "C" void Randomizer_DrawDoubleDefense(PlayState* play, GetItemEntry getIt
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
||||
Gfx* Randomizer_GetTriforcePieceDL(uint8_t index) {
|
||||
switch (index) {
|
||||
case 1:
|
||||
return (Gfx*)gTriforcePiece1DL;
|
||||
case 2:
|
||||
return (Gfx*)gTriforcePiece2DL;
|
||||
default:
|
||||
return (Gfx*)gTriforcePiece0DL;
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void Randomizer_DrawTriforcePiece(PlayState* play, GetItemEntry getItemEntry) {
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
|
||||
|
||||
uint16_t current = gSaveContext.triforcePiecesCollected;
|
||||
|
||||
Matrix_Scale(0.035f, 0.035f, 0.035f, MTXMODE_APPLY);
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
|
||||
G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||
|
||||
Gfx* triforcePieceDL = Randomizer_GetTriforcePieceDL(current % 3);
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, triforcePieceDL);
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
||||
// Seperate draw function for drawing the Triforce piece when in the GI state.
|
||||
// Needed for delaying showing the triforce piece slightly so the triforce shard doesn't
|
||||
// suddenly snap to the new piece model or completed triforce because the piece is
|
||||
// given mid textbox. Also makes it so the overworld models don't turn into the completed
|
||||
// model when the player has exactly the required amount of pieces.
|
||||
extern "C" void Randomizer_DrawTriforcePieceGI(PlayState* play, GetItemEntry getItemEntry) {
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
|
||||
|
||||
uint16_t current = gSaveContext.triforcePiecesCollected;
|
||||
uint16_t required = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED);
|
||||
|
||||
Matrix_Scale(triforcePieceScale, triforcePieceScale, triforcePieceScale, MTXMODE_APPLY);
|
||||
|
||||
// For creating a delay before showing the model so the model doesn't swap visually when the triforce piece
|
||||
// is given when the textbox just appears.
|
||||
if (triforcePieceScale < 0.0001f) {
|
||||
triforcePieceScale += 0.00003f;
|
||||
}
|
||||
|
||||
// Animation. When not the completed triforce, create delay before showing the piece to bypass interpolation.
|
||||
// If the completed triforce, make it grow slowly.
|
||||
if (current != required) {
|
||||
if (triforcePieceScale > 0.00008f && triforcePieceScale < 0.034f) {
|
||||
triforcePieceScale = 0.034f;
|
||||
} else if (triforcePieceScale < 0.035f) {
|
||||
triforcePieceScale += 0.0005f;
|
||||
}
|
||||
} else if (triforcePieceScale > 0.00008f && triforcePieceScale < 0.035f) {
|
||||
triforcePieceScale += 0.0005f;
|
||||
}
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
|
||||
G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||
|
||||
// Show piece when not currently completing the triforce. Use the scale to create a delay so interpolation doesn't
|
||||
// make the triforce twitch when the size is set to a higher value.
|
||||
if (current != required && triforcePieceScale > 0.035f) {
|
||||
// Get shard DL. Remove one before division to account for triforce piece given in the textbox
|
||||
// to match up the shard from the overworld model.
|
||||
Gfx* triforcePieceDL = Randomizer_GetTriforcePieceDL((current - 1) % 3);
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, triforcePieceDL);
|
||||
} else if (current == required && triforcePieceScale > 0.00008f) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, (Gfx*)gTriforcePieceCompletedDL);
|
||||
}
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
@ -6,10 +6,18 @@
|
||||
|
||||
typedef struct PlayState PlayState;
|
||||
|
||||
extern "C" void Randomizer_DrawSmallKey(PlayState* play, GetItemEntry* getItemEntry);
|
||||
extern "C" void Randomizer_DrawKeyRing(PlayState* play, GetItemEntry* getItemEntry);
|
||||
extern "C" void Randomizer_DrawBossKey(PlayState* play, GetItemEntry* getItemEntry);
|
||||
extern "C" void Randomizer_DrawDoubleDefense(PlayState* play, GetItemEntry getItemEntry);
|
||||
extern "C" void Randomizer_DrawIceTrap(PlayState* play, GetItemEntry getItemEntry);
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void Randomizer_DrawSmallKey(PlayState* play, GetItemEntry* getItemEntry);
|
||||
void Randomizer_DrawKeyRing(PlayState* play, GetItemEntry* getItemEntry);
|
||||
void Randomizer_DrawBossKey(PlayState* play, GetItemEntry* getItemEntry);
|
||||
void Randomizer_DrawDoubleDefense(PlayState* play, GetItemEntry getItemEntry);
|
||||
void Randomizer_DrawTriforcePiece(PlayState* play, GetItemEntry getItemEntry);
|
||||
void Randomizer_DrawTriforcePieceGI(PlayState* play, GetItemEntry getItemEntry);
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -55,6 +55,7 @@ const std::string Randomizer::getItemMessageTableID = "Randomizer";
|
||||
const std::string Randomizer::hintMessageTableID = "RandomizerHints";
|
||||
const std::string Randomizer::merchantMessageTableID = "RandomizerMerchants";
|
||||
const std::string Randomizer::rupeeMessageTableID = "RandomizerRupees";
|
||||
const std::string Randomizer::triforcePieceMessageTableID = "RandomizerTriforcePiece";
|
||||
const std::string Randomizer::NaviRandoMessageTableID = "RandomizerNavi";
|
||||
const std::string Randomizer::IceTrapRandoMessageTableID = "RandomizerIceTrap";
|
||||
const std::string Randomizer::randoMiscHintsTableID = "RandomizerMiscHints";
|
||||
@ -320,6 +321,9 @@ std::unordered_map<std::string, RandomizerSettingKey> SpoilerfileSettingNameToEn
|
||||
{ "World Settings:Mix Interiors", RSK_MIX_INTERIOR_ENTRANCES },
|
||||
{ "World Settings:Mix Grottos", RSK_MIX_GROTTO_ENTRANCES },
|
||||
{ "World Settings:Decouple Entrances", RSK_DECOUPLED_ENTRANCES },
|
||||
{ "World Settings:Triforce Hunt", RSK_TRIFORCE_HUNT },
|
||||
{ "World Settings:Triforce Hunt Total Pieces", RSK_TRIFORCE_HUNT_PIECES_TOTAL },
|
||||
{ "World Settings:Triforce Hunt Required Pieces", RSK_TRIFORCE_HUNT_PIECES_REQUIRED },
|
||||
{ "Misc Settings:Gossip Stone Hints", RSK_GOSSIP_STONE_HINTS },
|
||||
{ "Misc Settings:Hint Clarity", RSK_HINT_CLARITY },
|
||||
{ "Misc Settings:ToT Altar Hint", RSK_TOT_ALTAR_HINT },
|
||||
@ -799,6 +803,8 @@ void Randomizer::ParseRandomizerSettingsFile(const char* spoilerFileName) {
|
||||
case RSK_BIG_POE_COUNT:
|
||||
case RSK_CUCCO_COUNT:
|
||||
case RSK_STARTING_SKULLTULA_TOKEN:
|
||||
case RSK_TRIFORCE_HUNT_PIECES_TOTAL:
|
||||
case RSK_TRIFORCE_HUNT_PIECES_REQUIRED:
|
||||
numericValueString = it.value();
|
||||
gSaveContext.randoSettings[index].value = std::stoi(numericValueString);
|
||||
break;
|
||||
@ -908,6 +914,7 @@ void Randomizer::ParseRandomizerSettingsFile(const char* spoilerFileName) {
|
||||
case RSK_DECOUPLED_ENTRANCES:
|
||||
case RSK_SHOPSANITY_PRICES_AFFORDABLE:
|
||||
case RSK_ALL_LOCATIONS_REACHABLE:
|
||||
case RSK_TRIFORCE_HUNT:
|
||||
if(it.value() == "Off") {
|
||||
gSaveContext.randoSettings[index].value = RO_GENERIC_OFF;
|
||||
} else if(it.value() == "On") {
|
||||
@ -1061,6 +1068,8 @@ void Randomizer::ParseRandomizerSettingsFile(const char* spoilerFileName) {
|
||||
gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_LACS_TOKENS;
|
||||
} else if(it.value() == "100 GS Reward") {
|
||||
gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_KAK_TOKENS;
|
||||
} else if(it.value() == "Triforce Hunt") {
|
||||
gSaveContext.randoSettings[index].value = RO_GANON_BOSS_KEY_TRIFORCE_HUNT;
|
||||
}
|
||||
break;
|
||||
case RSK_RANDOM_MQ_DUNGEONS:
|
||||
@ -1980,6 +1989,7 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe
|
||||
case RG_BUY_DEKU_NUT_10:
|
||||
case RG_BUY_DEKU_STICK_1:
|
||||
case RG_BUY_HEART:
|
||||
case RG_TRIFORCE_PIECE:
|
||||
default:
|
||||
return CAN_OBTAIN;
|
||||
}
|
||||
@ -2990,6 +3000,10 @@ void GenerateRandomizerImgui(std::string seed = "") {
|
||||
cvarSettings[RSK_MQ_DUNGEON_COUNT] = 0;
|
||||
}
|
||||
|
||||
cvarSettings[RSK_TRIFORCE_HUNT] = CVarGetInteger("gRandomizeTriforceHunt", 0);
|
||||
cvarSettings[RSK_TRIFORCE_HUNT_PIECES_TOTAL] = CVarGetInteger("gRandomizeTriforceHuntTotalPieces", 30);
|
||||
cvarSettings[RSK_TRIFORCE_HUNT_PIECES_REQUIRED] = CVarGetInteger("gRandomizeTriforceHuntRequiredPieces", 20);
|
||||
|
||||
cvarSettings[RSK_MQ_DEKU_TREE] = CVarGetInteger("gRandomizeMqDungeonsDekuTree", 0);
|
||||
cvarSettings[RSK_MQ_DODONGOS_CAVERN] = CVarGetInteger("gRandomizeMqDungeonsDodongosCavern", 0);
|
||||
cvarSettings[RSK_MQ_JABU_JABU] = CVarGetInteger("gRandomizeMqDungeonsJabuJabu", 0);
|
||||
@ -3502,6 +3516,7 @@ void RandomizerSettingsWindow::DrawElement() {
|
||||
|
||||
UIWidgets::PaddedSeparator();
|
||||
|
||||
// Master Quest Dungeons
|
||||
if (OTRGlobals::Instance->HasMasterQuest() && OTRGlobals::Instance->HasOriginal()) {
|
||||
ImGui::PushItemWidth(-FLT_MIN);
|
||||
ImGui::Text("Master Quest Dungeons");
|
||||
@ -3549,8 +3564,43 @@ void RandomizerSettingsWindow::DrawElement() {
|
||||
UIWidgets::EnhancementCheckbox("Ganon's Castle##RandomizeMqDungeons",
|
||||
"gRandomizeMqDungeonsGanonsCastle");
|
||||
}
|
||||
|
||||
UIWidgets::PaddedSeparator();
|
||||
}
|
||||
|
||||
// Triforce Hunt
|
||||
UIWidgets::EnhancementCheckbox("Triforce Hunt", "gRandomizeTriforceHunt");
|
||||
UIWidgets::InsertHelpHoverText(
|
||||
"Pieces of the Triforce of Courage have been scattered across the world. Find them all to finish the game!\n\n"
|
||||
"When the required amount of pieces 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."
|
||||
);
|
||||
|
||||
if (CVarGetInteger("gRandomizeTriforceHunt", 0)) {
|
||||
// Triforce Hunt (total pieces)
|
||||
UIWidgets::Spacer(0);
|
||||
int totalPieces = CVarGetInteger("gRandomizeTriforceHuntTotalPieces", 30);
|
||||
ImGui::Text("Triforce Pieces in the world: %d", totalPieces);
|
||||
UIWidgets::InsertHelpHoverText(
|
||||
"The amount of Triforce pieces that will be placed in the world. "
|
||||
"Keep in mind seed generation can fail if more pieces are placed than there are junk items in the item pool."
|
||||
);
|
||||
ImGui::SameLine();
|
||||
UIWidgets::EnhancementSliderInt("", "##TriforceHuntTotalPieces", "gRandomizeTriforceHuntTotalPieces", 1, 100, "", 30);
|
||||
|
||||
// Triforce Hunt (required pieces)
|
||||
int requiredPieces = CVarGetInteger("gRandomizeTriforceHuntRequiredPieces", 20);
|
||||
ImGui::Text("Triforce Pieces to win: %d", requiredPieces);
|
||||
UIWidgets::InsertHelpHoverText(
|
||||
"The amount of Triforce pieces required to win the game."
|
||||
);
|
||||
ImGui::SameLine();
|
||||
UIWidgets::EnhancementSliderInt("", "##TriforceHuntRequiredPieces", "gRandomizeTriforceHuntRequiredPieces", 1, totalPieces, "", 20);
|
||||
}
|
||||
|
||||
UIWidgets::PaddedSeparator();
|
||||
|
||||
ImGui::EndChild();
|
||||
|
||||
// COLUMN 3 - Shuffle Entrances
|
||||
@ -4144,7 +4194,11 @@ void RandomizerSettingsWindow::DrawElement() {
|
||||
"\n"
|
||||
"100 GS Reward - Ganon's Boss Key will be awarded by the cursed rich man after you collect 100 Gold Skulltula Tokens."
|
||||
);
|
||||
UIWidgets::EnhancementCombobox("gRandomizeShuffleGanonBossKey", randoShuffleGanonsBossKey, RO_GANON_BOSS_KEY_VANILLA);
|
||||
bool disableGBK = CVarGetInteger("gRandomizeTriforceHunt", 0);
|
||||
static const char* disableGBKText = "This option is disabled because Triforce Hunt is enabled. Ganon's Boss key\nwill instead be given to you after Triforce Hunt completion.";
|
||||
UIWidgets::EnhancementCombobox("gRandomizeShuffleGanonBossKey", randoShuffleGanonsBossKey,
|
||||
RO_GANON_BOSS_KEY_VANILLA, disableGBK, disableGBKText,
|
||||
RO_GANON_BOSS_KEY_VANILLA);
|
||||
ImGui::PopItemWidth();
|
||||
switch (CVarGetInteger("gRandomizeShuffleGanonBossKey", RO_GANON_BOSS_KEY_VANILLA)) {
|
||||
case RO_GANON_BOSS_KEY_LACS_STONES:
|
||||
@ -5461,6 +5515,70 @@ CustomMessage Randomizer::GetRupeeMessage(u16 rupeeTextId) {
|
||||
return messageEntry;
|
||||
}
|
||||
|
||||
void CreateTriforcePieceMessages() {
|
||||
CustomMessage TriforcePieceMessages[NUM_TRIFORCE_PIECE_MESSAGES] = {
|
||||
|
||||
{ "You found a %yTriforce Piece%w!&%g{{current}}%w down, %c{{remaining}}%w to go. It's a start!",
|
||||
"Ein %yTriforce-Splitter%w! Du hast&%g{{current}}%w von %c{{required}}%w gefunden. Es ist ein&Anfang!",
|
||||
"Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g{{current}}%w, il en&reste %c{{remaining}}%w à trouver. C'est un début!" },
|
||||
|
||||
{ "You found a %yTriforce Piece%w!&%g{{current}}%w down, %c{{remaining}}%w to go. Progress!",
|
||||
"Ein %yTriforce-Splitter%w! Du hast&%g{{current}}%w von %c{{required}}%w gefunden. Es geht voran!",
|
||||
"Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g{{current}}%w, il en&reste %c{{remaining}}%w à trouver. Ça avance!" },
|
||||
|
||||
{ "You found a %yTriforce Piece%w!&%g{{current}}%w down, %c{{remaining}}%w to go. Over half-way&there!",
|
||||
"Ein %yTriforce-Splitter%w! Du hast&schon %g{{current}}%w von %c{{required}}%w gefunden. Schon&über die Hälfte!",
|
||||
"Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g{{current}}%w, il en&reste %c{{remaining}}%w à trouver. Il en reste un&peu moins que la moitié!" },
|
||||
|
||||
{ "You found a %yTriforce Piece%w!&%g{{current}}%w down, %c{{remaining}}%w to go. Almost done!",
|
||||
"Ein %yTriforce-Splitter%w! Du hast&schon %g{{current}}%w von %c{{required}}%w gefunden. Fast&geschafft!",
|
||||
"Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g{{current}}%w, il en&reste %c{{remaining}}%w à trouver. C'est presque&terminé!" },
|
||||
|
||||
{ "You completed the %yTriforce of&Courage%w! %gGG%w!",
|
||||
"Das %yTriforce des Mutes%w! Du hast&alle Splitter gefunden. %gGut gemacht%w!",
|
||||
"Vous avez complété la %yTriforce&du Courage%w! %gFélicitations%w!" },
|
||||
|
||||
{ "You found a spare %yTriforce Piece%w!&You only needed %c{{required}}%w, but you have %g{{current}}%w!",
|
||||
"Ein übriger %yTriforce-Splitter%w! Du&hast nun %g{{current}}%w von %c{{required}}%w nötigen gefunden.",
|
||||
"Vous avez trouvé un %yFragment de&Triforce%w en plus! Vous n'aviez besoin&que de %c{{required}}%w, mais vous en avez %g{{current}}%w en&tout!" },
|
||||
};
|
||||
CustomMessageManager* customMessageManager = CustomMessageManager::Instance;
|
||||
customMessageManager->AddCustomMessageTable(Randomizer::triforcePieceMessageTableID);
|
||||
for (unsigned int i = 0; i <= (NUM_TRIFORCE_PIECE_MESSAGES - 1); i++) {
|
||||
customMessageManager->CreateMessage(Randomizer::triforcePieceMessageTableID, i, TriforcePieceMessages[i]);
|
||||
}
|
||||
}
|
||||
|
||||
CustomMessage Randomizer::GetTriforcePieceMessage() {
|
||||
// Item is only given after the textbox, so reflect that inside the textbox.
|
||||
uint16_t current = gSaveContext.triforcePiecesCollected + 1;
|
||||
uint16_t required = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED);
|
||||
uint16_t remaining = required - current;
|
||||
float percentageCollected = (float)current / (float)required;
|
||||
uint8_t messageIndex;
|
||||
|
||||
if (percentageCollected <= 0.25) {
|
||||
messageIndex = TH_MESSAGE_START;
|
||||
} else if (percentageCollected <= 0.5) {
|
||||
messageIndex = TH_MESSAGE_PROGRESS;
|
||||
} else if (percentageCollected <= 0.75) {
|
||||
messageIndex = TH_MESSAGE_HALFWAY;
|
||||
} else if (percentageCollected < 1) {
|
||||
messageIndex = TH_MESSAGE_ALMOSTDONE;
|
||||
} else if (current == required) {
|
||||
messageIndex = TH_MESSAGE_FINISHED;
|
||||
} else {
|
||||
messageIndex = TH_MESSAGE_SURPLUS;
|
||||
}
|
||||
|
||||
CustomMessage messageEntry =
|
||||
CustomMessageManager::Instance->RetrieveMessage(Randomizer::triforcePieceMessageTableID, messageIndex);
|
||||
messageEntry.Replace("{{current}}", std::to_string(current), std::to_string(current), std::to_string(current));
|
||||
messageEntry.Replace("{{remaining}}", std::to_string(remaining), std::to_string(remaining), std::to_string(remaining));
|
||||
messageEntry.Replace("{{required}}", std::to_string(required), std::to_string(required), std::to_string(required));
|
||||
return messageEntry;
|
||||
}
|
||||
|
||||
void CreateNaviRandoMessages() {
|
||||
CustomMessage NaviMessages[NUM_NAVI_MESSAGES] = {
|
||||
|
||||
@ -5988,6 +6106,7 @@ void Randomizer::CreateCustomMessages() {
|
||||
}};
|
||||
CreateGetItemMessages(&getItemMessages);
|
||||
CreateRupeeMessages();
|
||||
CreateTriforcePieceMessages();
|
||||
CreateNaviRandoMessages();
|
||||
CreateIceTrapRandoMessages();
|
||||
CreateFireTempleGoronMessages();
|
||||
@ -6098,6 +6217,7 @@ void InitRandoItemTable() {
|
||||
GET_ITEM(RG_MAGIC_BEAN_PACK, OBJECT_GI_BEAN, GID_BEAN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_MAGIC_BEAN_PACK),
|
||||
GET_ITEM(RG_TYCOON_WALLET, OBJECT_GI_PURSE, GID_WALLET_GIANT, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER, RG_TYCOON_WALLET),
|
||||
GET_ITEM(RG_PROGRESSIVE_BOMBCHUS, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_PROGRESSIVE_BOMBCHUS),
|
||||
GET_ITEM(RG_TRIFORCE_PIECE, OBJECT_GI_BOMB_2, GID_TRIFORCE_PIECE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, RG_TRIFORCE_PIECE),
|
||||
};
|
||||
ItemTableManager::Instance->AddItemTable(MOD_RANDOMIZER);
|
||||
for (int i = 0; i < ARRAY_COUNT(extendedVanillaGetItemTable); i++) {
|
||||
@ -6113,6 +6233,8 @@ void InitRandoItemTable() {
|
||||
randoGetItemTable[i].drawFunc = (CustomDrawFunc)Randomizer_DrawBossKey;
|
||||
} else if (randoGetItemTable[i].itemId == RG_DOUBLE_DEFENSE) {
|
||||
randoGetItemTable[i].drawFunc = (CustomDrawFunc)Randomizer_DrawDoubleDefense;
|
||||
} else if (randoGetItemTable[i].itemId == RG_TRIFORCE_PIECE) {
|
||||
randoGetItemTable[i].drawFunc = (CustomDrawFunc)Randomizer_DrawTriforcePiece;
|
||||
}
|
||||
ItemTableManager::Instance->AddItemEntry(MOD_RANDOMIZER, randoGetItemTable[i].itemId, randoGetItemTable[i]);
|
||||
}
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "soh/Enhancements/item-tables/ItemTableTypes.h"
|
||||
|
||||
#define MAX_SEED_STRING_SIZE 1024
|
||||
#define NUM_TRIFORCE_PIECE_MESSAGES 6
|
||||
#define NUM_NAVI_MESSAGES 19
|
||||
#define NUM_ICE_TRAP_MESSAGES 23
|
||||
#define NUM_GORON_MESSAGES 9
|
||||
@ -48,6 +49,7 @@ class Randomizer {
|
||||
static const std::string hintMessageTableID;
|
||||
static const std::string merchantMessageTableID;
|
||||
static const std::string rupeeMessageTableID;
|
||||
static const std::string triforcePieceMessageTableID;
|
||||
static const std::string NaviRandoMessageTableID;
|
||||
static const std::string IceTrapRandoMessageTableID;
|
||||
static const std::string randoMiscHintsTableID;
|
||||
@ -102,6 +104,7 @@ class Randomizer {
|
||||
CustomMessage GetMapGetItemMessageWithHint(GetItemEntry itemEntry);
|
||||
static void CreateCustomMessages();
|
||||
static CustomMessage GetRupeeMessage(u16 rupeeTextId);
|
||||
static CustomMessage GetTriforcePieceMessage();
|
||||
bool CheckContainsVanillaItem(RandomizerCheck randoCheck);
|
||||
};
|
||||
|
||||
|
@ -847,6 +847,7 @@ typedef enum {
|
||||
RC_ZR_NEAR_GROTTOS_GOSSIP_STONE,
|
||||
RC_ZR_OPEN_GROTTO_GOSSIP_STONE,
|
||||
RC_GANONDORF_HINT,
|
||||
RC_TRIFORCE_COMPLETED,
|
||||
RC_MAX
|
||||
} RandomizerCheck;
|
||||
|
||||
@ -1302,6 +1303,7 @@ typedef enum {
|
||||
RG_BUY_RED_POTION_40,
|
||||
RG_BUY_RED_POTION_50,
|
||||
RG_TRIFORCE,
|
||||
RG_TRIFORCE_PIECE,
|
||||
RG_HINT,
|
||||
RG_TYCOON_WALLET,
|
||||
RG_MAX
|
||||
@ -1453,6 +1455,9 @@ typedef enum {
|
||||
RSK_ALL_LOCATIONS_REACHABLE,
|
||||
RSK_SHUFFLE_BOSS_ENTRANCES,
|
||||
RSK_SHUFFLE_100_GS_REWARD,
|
||||
RSK_TRIFORCE_HUNT,
|
||||
RSK_TRIFORCE_HUNT_PIECES_TOTAL,
|
||||
RSK_TRIFORCE_HUNT_PIECES_REQUIRED,
|
||||
RSK_MAX
|
||||
} RandomizerSettingKey;
|
||||
|
||||
@ -1613,6 +1618,7 @@ typedef enum {
|
||||
RO_GANON_BOSS_KEY_LACS_DUNGEONS,
|
||||
RO_GANON_BOSS_KEY_LACS_TOKENS,
|
||||
RO_GANON_BOSS_KEY_KAK_TOKENS,
|
||||
RO_GANON_BOSS_KEY_TRIFORCE_HUNT,
|
||||
} RandoOptionGanonsBossKey;
|
||||
|
||||
// LACS Reward Options settings (Standard rewards, Greg as reward, Greg as wildcard)
|
||||
@ -1806,3 +1812,12 @@ typedef enum {
|
||||
TRACKER_COMBO_BUTTON_D_LEFT,
|
||||
TRACKER_COMBO_BUTTON_D_RIGHT,
|
||||
} TrackerComboButton;
|
||||
|
||||
typedef enum {
|
||||
TH_MESSAGE_START,
|
||||
TH_MESSAGE_PROGRESS,
|
||||
TH_MESSAGE_HALFWAY,
|
||||
TH_MESSAGE_ALMOSTDONE,
|
||||
TH_MESSAGE_FINISHED,
|
||||
TH_MESSAGE_SURPLUS,
|
||||
} TriforceHuntMessages;
|
||||
|
@ -80,6 +80,10 @@ std::vector<ItemTrackerItem> gregItems = {
|
||||
ITEM_TRACKER_ITEM(ITEM_RUPEE_GREEN, 0, DrawItem),
|
||||
};
|
||||
|
||||
std::vector<ItemTrackerItem> triforcePieces = {
|
||||
ITEM_TRACKER_ITEM(RG_TRIFORCE_PIECE, 0, DrawItem),
|
||||
};
|
||||
|
||||
std::vector<ItemTrackerDungeon> itemTrackerDungeonsWithMapsHorizontal = {
|
||||
{ SCENE_DEKU_TREE, { ITEM_DUNGEON_MAP, ITEM_COMPASS } },
|
||||
{ SCENE_DODONGOS_CAVERN, { ITEM_DUNGEON_MAP, ITEM_COMPASS } },
|
||||
@ -243,6 +247,11 @@ typedef enum {
|
||||
KEYS_CURRENT_MAX
|
||||
} ItemTrackerKeysNumberOption;
|
||||
|
||||
typedef enum {
|
||||
TRIFORCE_PIECE_COLLECTED_REQUIRED,
|
||||
TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX
|
||||
} ItemTrackerTriforcePieceNumberOption;
|
||||
|
||||
typedef enum {
|
||||
SECTION_DISPLAY_HIDDEN,
|
||||
SECTION_DISPLAY_MAIN_WINDOW,
|
||||
@ -488,6 +497,37 @@ void DrawItemCount(ItemTrackerItem item) {
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, maxColor);
|
||||
ImGui::Text("%s", maxString.c_str());
|
||||
ImGui::PopStyleColor();
|
||||
} else if (item.id == RG_TRIFORCE_PIECE && gSaveContext.n64ddFlag &&
|
||||
OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT) && IsValidSaveFile()) {
|
||||
std::string currentString = "";
|
||||
std::string requiredString = "";
|
||||
std::string maxString = "";
|
||||
uint8_t piecesRequired = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED);
|
||||
uint8_t piecesTotal = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT_PIECES_TOTAL);
|
||||
ImU32 currentColor = gSaveContext.triforcePiecesCollected >= piecesRequired ? IM_COL_GREEN : IM_COL_WHITE;
|
||||
ImU32 maxColor = IM_COL_GREEN;
|
||||
int32_t trackerTriforcePieceNumberDisplayMode = CVarGetInteger("gItemTrackerTriforcePieceTrack", TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX);
|
||||
|
||||
currentString += std::to_string(gSaveContext.triforcePiecesCollected);
|
||||
currentString += "/";
|
||||
// gItemTrackerTriforcePieceTrack
|
||||
if (trackerTriforcePieceNumberDisplayMode == TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX) {
|
||||
currentString += std::to_string(piecesRequired);
|
||||
currentString += "/";
|
||||
maxString += std::to_string(piecesTotal);
|
||||
} else if (trackerTriforcePieceNumberDisplayMode == TRIFORCE_PIECE_COLLECTED_REQUIRED) {
|
||||
maxString += std::to_string(piecesRequired);
|
||||
}
|
||||
|
||||
ImGui::SetCursorScreenPos(
|
||||
ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize((currentString + maxString).c_str()).x / 2), p.y - 14));
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, currentColor);
|
||||
ImGui::Text(currentString.c_str());
|
||||
ImGui::PopStyleColor();
|
||||
ImGui::SameLine(0, 0.0f);
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, maxColor);
|
||||
ImGui::Text(maxString.c_str());
|
||||
ImGui::PopStyleColor();
|
||||
} else {
|
||||
ImGui::SetCursorScreenPos(ImVec2(p.x, p.y - 14));
|
||||
ImGui::Text("");
|
||||
@ -520,9 +560,11 @@ void DrawQuest(ItemTrackerItem item) {
|
||||
};
|
||||
|
||||
void DrawItem(ItemTrackerItem item) {
|
||||
|
||||
uint32_t actualItemId = INV_CONTENT(item.id);
|
||||
int iconSize = CVarGetInteger("gItemTrackerIconSize", 36);
|
||||
bool hasItem = actualItemId != ITEM_NONE;
|
||||
std::string itemName = "";
|
||||
|
||||
if (item.id == ITEM_NONE) {
|
||||
return;
|
||||
@ -562,6 +604,11 @@ void DrawItem(ItemTrackerItem item) {
|
||||
actualItemId = item.id;
|
||||
hasItem = Flags_GetRandomizerInf(RAND_INF_GREG_FOUND);
|
||||
break;
|
||||
case RG_TRIFORCE_PIECE:
|
||||
actualItemId = item.id;
|
||||
hasItem = gSaveContext.n64ddFlag && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT);
|
||||
itemName = "Triforce Piece";
|
||||
break;
|
||||
}
|
||||
|
||||
if (hasItem && item.id != actualItemId && actualItemTrackerItemMap.find(actualItemId) != actualItemTrackerItemMap.end()) {
|
||||
@ -569,13 +616,18 @@ void DrawItem(ItemTrackerItem item) {
|
||||
}
|
||||
|
||||
ImGui::BeginGroup();
|
||||
|
||||
ImGui::Image(LUS::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasItem && IsValidSaveFile() ? item.name : item.nameFaded),
|
||||
ImVec2(iconSize, iconSize), ImVec2(0, 0), ImVec2(1, 1));
|
||||
|
||||
DrawItemCount(item);
|
||||
ImGui::EndGroup();
|
||||
|
||||
UIWidgets::SetLastItemHoverText(SohUtils::GetItemName(item.id));
|
||||
if (itemName == "") {
|
||||
itemName = SohUtils::GetItemName(item.id);
|
||||
}
|
||||
|
||||
UIWidgets::SetLastItemHoverText(itemName);
|
||||
}
|
||||
|
||||
void DrawBottle(ItemTrackerItem item) {
|
||||
@ -891,6 +943,19 @@ void UpdateVectors() {
|
||||
mainWindowItems.insert(mainWindowItems.end(), gregItems.begin(), gregItems.end());
|
||||
}
|
||||
|
||||
// If we're adding triforce pieces to the main window
|
||||
if (CVarGetInteger("gItemTrackerTriforcePiecesDisplayType", SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_MAIN_WINDOW) {
|
||||
// If Greg isn't on the main window, add empty items to place the triforce pieces on a new row.
|
||||
if (CVarGetInteger("gItemTrackerGregDisplayType", SECTION_DISPLAY_EXTENDED_HIDDEN) != SECTION_DISPLAY_EXTENDED_MAIN_WINDOW) {
|
||||
while (mainWindowItems.size() % 6) {
|
||||
mainWindowItems.push_back(ITEM_TRACKER_ITEM(ITEM_NONE, 0, DrawItem));
|
||||
}
|
||||
}
|
||||
|
||||
// Add triforce pieces
|
||||
mainWindowItems.insert(mainWindowItems.end(), triforcePieces.begin(), triforcePieces.end());
|
||||
}
|
||||
|
||||
shouldUpdateVectors = false;
|
||||
}
|
||||
|
||||
@ -914,6 +979,7 @@ void ItemTrackerWindow::DrawElement() {
|
||||
(CVarGetInteger("gItemTrackerSongsDisplayType", SECTION_DISPLAY_MAIN_WINDOW) == SECTION_DISPLAY_MAIN_WINDOW) ||
|
||||
(CVarGetInteger("gItemTrackerDungeonItemsDisplayType", SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_MAIN_WINDOW) ||
|
||||
(CVarGetInteger("gItemTrackerGregDisplayType", SECTION_DISPLAY_EXTENDED_HIDDEN) == SECTION_DISPLAY_EXTENDED_MAIN_WINDOW) ||
|
||||
(CVarGetInteger("gItemTrackerTriforcePiecesDisplayType", SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_MAIN_WINDOW) ||
|
||||
(CVarGetInteger("gItemTrackerNotesDisplayType", SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_MAIN_WINDOW)
|
||||
) {
|
||||
BeginFloatingWindows("Item Tracker##main window");
|
||||
@ -984,6 +1050,12 @@ void ItemTrackerWindow::DrawElement() {
|
||||
EndFloatingWindows();
|
||||
}
|
||||
|
||||
if (CVarGetInteger("gItemTrackerTriforcePiecesDisplayType", SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_SEPARATE) {
|
||||
BeginFloatingWindows("Triforce Piece Tracker");
|
||||
DrawItemsInRows(triforcePieces);
|
||||
EndFloatingWindows();
|
||||
}
|
||||
|
||||
if (CVarGetInteger("gItemTrackerNotesDisplayType", SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_SEPARATE && CVarGetInteger("gItemTrackerDisplayType", TRACKER_DISPLAY_ALWAYS) == TRACKER_DISPLAY_ALWAYS) {
|
||||
ImGui::SetNextWindowSize(ImVec2(400,300), ImGuiCond_FirstUseEver);
|
||||
BeginFloatingWindows("Personal Notes", ImGuiWindowFlags_NoFocusOnAppearing);
|
||||
@ -995,6 +1067,7 @@ void ItemTrackerWindow::DrawElement() {
|
||||
|
||||
static const char* itemTrackerCapacityTrackOptions[5] = { "No Numbers", "Current Capacity", "Current Ammo", "Current Capacity / Max Capacity", "Current Ammo / Current Capacity" };
|
||||
static const char* itemTrackerKeyTrackOptions[3] = { "Collected / Max", "Current / Collected / Max", "Current / Max" };
|
||||
static const char* itemTrackerTriforcePieceTrackOptions[2] = { "Collected / Required", "Collected / Required / Max" };
|
||||
static const char* windowTypes[2] = { "Floating", "Window" };
|
||||
static const char* displayModes[2] = { "Always", "Combo Button Hold" };
|
||||
static const char* buttons[14] = { "A", "B", "C-Up", "C-Down", "C-Left", "C-Right", "L", "Z", "R", "Start", "D-Up", "D-Down", "D-Left", "D-Right" };
|
||||
@ -1002,7 +1075,7 @@ static const char* displayTypes[3] = { "Hidden", "Main Window", "Separate" };
|
||||
static const char* extendedDisplayTypes[4] = { "Hidden", "Main Window", "Misc Window", "Separate" };
|
||||
|
||||
void ItemTrackerSettingsWindow::DrawElement() {
|
||||
ImGui::SetNextWindowSize(ImVec2(600,375), ImGuiCond_FirstUseEver);
|
||||
ImGui::SetNextWindowSize(ImVec2(733, 472), ImGuiCond_FirstUseEver);
|
||||
|
||||
if (!ImGui::Begin("Item Tracker Settings", &mIsVisible, ImGuiWindowFlags_NoFocusOnAppearing)) {
|
||||
ImGui::End();
|
||||
@ -1055,6 +1128,8 @@ void ItemTrackerSettingsWindow::DrawElement() {
|
||||
UIWidgets::EnhancementSliderInt("Icon size : %dpx", "##ITEMTRACKERICONSIZE", "gItemTrackerIconSize", 25, 128, "", 36);
|
||||
UIWidgets::EnhancementSliderInt("Icon margins : %dpx", "##ITEMTRACKERSPACING", "gItemTrackerIconSpacing", -5, 50, "", 12);
|
||||
|
||||
UIWidgets::Spacer(0);
|
||||
|
||||
ImGui::Text("Ammo/Capacity Tracking");
|
||||
UIWidgets::EnhancementCombobox("gItemTrackerCapacityTrack", itemTrackerCapacityTrackOptions, ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY);
|
||||
UIWidgets::InsertHelpHoverText("Customize what the numbers under each item are tracking."
|
||||
@ -1064,10 +1139,19 @@ void ItemTrackerSettingsWindow::DrawElement() {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
}
|
||||
|
||||
UIWidgets::Spacer(0);
|
||||
|
||||
ImGui::Text("Key Count Tracking");
|
||||
UIWidgets::EnhancementCombobox("gItemTrackerKeyTrack", itemTrackerKeyTrackOptions, KEYS_COLLECTED_MAX);
|
||||
UIWidgets::InsertHelpHoverText("Customize what numbers are shown for key tracking.");
|
||||
|
||||
UIWidgets::Spacer(0);
|
||||
|
||||
ImGui::Text("Triforce Piece Count Tracking");
|
||||
UIWidgets::EnhancementCombobox("gItemTrackerTriforcePieceTrack", itemTrackerTriforcePieceTrackOptions, TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX);
|
||||
UIWidgets::InsertHelpHoverText("Customize what numbers are shown for triforce piece tracking.");
|
||||
|
||||
ImGui::TableNextColumn();
|
||||
|
||||
if (UIWidgets::LabeledRightAlignedEnhancementCombobox("Inventory", "gItemTrackerInventoryItemsDisplayType", displayTypes, SECTION_DISPLAY_MAIN_WINDOW)) {
|
||||
@ -1107,6 +1191,10 @@ void ItemTrackerSettingsWindow::DrawElement() {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (UIWidgets::LabeledRightAlignedEnhancementCombobox("Triforce Pieces", "gItemTrackerTriforcePiecesDisplayType", displayTypes, SECTION_DISPLAY_HIDDEN)) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarGetInteger("gItemTrackerDisplayType", TRACKER_DISPLAY_ALWAYS) == TRACKER_DISPLAY_ALWAYS) {
|
||||
if (UIWidgets::LabeledRightAlignedEnhancementCombobox("Personal notes", "gItemTrackerNotesDisplayType", displayTypes, SECTION_DISPLAY_HIDDEN)) {
|
||||
shouldUpdateVectors = true;
|
||||
|
@ -436,5 +436,8 @@ extern "C" void Randomizer_InitSaveFile() {
|
||||
gSaveContext.itemGetInf[3] |= 0x8000; // Obtained Mask of Truth
|
||||
}
|
||||
|
||||
// Reset triforce pieces collected
|
||||
gSaveContext.triforcePiecesCollected = 0;
|
||||
|
||||
SetStartingItems();
|
||||
}
|
||||
|
@ -1975,6 +1975,8 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
|
||||
if (CVarGetInteger("gLetItSnow", 0)) {
|
||||
messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::IceTrapRandoMessageTableID, NUM_ICE_TRAP_MESSAGES + 1);
|
||||
}
|
||||
} else if (player->getItemEntry.getItemId == RG_TRIFORCE_PIECE) {
|
||||
messageEntry = Randomizer::GetTriforcePieceMessage();
|
||||
} else {
|
||||
messageEntry = Randomizer_GetCustomGetItemMessage(player);
|
||||
}
|
||||
|
@ -136,6 +136,8 @@ void SaveManager::LoadRandomizerVersion1() {
|
||||
|
||||
SaveManager::Instance->LoadData("adultTradeItems", gSaveContext.adultTradeItems);
|
||||
|
||||
SaveManager::Instance->LoadData("triforcePiecesCollected", gSaveContext.triforcePiecesCollected);
|
||||
|
||||
SaveManager::Instance->LoadData("pendingIceTrapCount", gSaveContext.pendingIceTrapCount);
|
||||
|
||||
std::shared_ptr<Randomizer> randomizer = OTRGlobals::Instance->gRandomizer;
|
||||
@ -251,6 +253,8 @@ void SaveManager::LoadRandomizerVersion2() {
|
||||
|
||||
SaveManager::Instance->LoadData("adultTradeItems", gSaveContext.adultTradeItems);
|
||||
|
||||
SaveManager::Instance->LoadData("triforcePiecesCollected", gSaveContext.triforcePiecesCollected);
|
||||
|
||||
SaveManager::Instance->LoadData("pendingIceTrapCount", gSaveContext.pendingIceTrapCount);
|
||||
|
||||
std::shared_ptr<Randomizer> randomizer = OTRGlobals::Instance->gRandomizer;
|
||||
@ -338,6 +342,8 @@ void SaveManager::SaveRandomizer(SaveContext* saveContext, int sectionID, bool f
|
||||
|
||||
SaveManager::Instance->SaveData("adultTradeItems", saveContext->adultTradeItems);
|
||||
|
||||
SaveManager::Instance->SaveData("triforcePiecesCollected", gSaveContext.triforcePiecesCollected);
|
||||
|
||||
SaveManager::Instance->SaveData("pendingIceTrapCount", saveContext->pendingIceTrapCount);
|
||||
|
||||
std::shared_ptr<Randomizer> randomizer = OTRGlobals::Instance->gRandomizer;
|
||||
|
@ -78,6 +78,8 @@
|
||||
#include "objects/object_gi_sword_1/object_gi_sword_1.h"
|
||||
#include "objects/object_st/object_st.h"
|
||||
|
||||
#include "soh_assets.h"
|
||||
|
||||
// "Get Item" Model Draw Functions
|
||||
void GetItem_DrawMaskOrBombchu(PlayState* play, s16 drawId);
|
||||
void GetItem_DrawSoldOut(PlayState* play, s16 drawId);
|
||||
@ -110,6 +112,7 @@ void GetItem_DrawJewelKokiri(PlayState* play, s16 drawId);
|
||||
void GetItem_DrawJewelGoron(PlayState* play, s16 drawId);
|
||||
void GetItem_DrawJewelZora(PlayState* play, s16 drawId);
|
||||
void GetItem_DrawGenericMusicNote(PlayState* play, s16 drawId);
|
||||
void GetItem_DrawTriforcePiece(PlayState* play, s16 drawId);
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ void (*drawFunc)(PlayState*, s16);
|
||||
@ -384,7 +387,8 @@ DrawItemTableEntry sDrawItemTable[] = {
|
||||
{ GetItem_DrawGenericMusicNote, { gGiSongNoteDL } }, //Saria's song
|
||||
{ GetItem_DrawGenericMusicNote, { gGiSongNoteDL } }, //Sun's song
|
||||
{ GetItem_DrawGenericMusicNote, { gGiSongNoteDL } }, //Song of time
|
||||
{ GetItem_DrawGenericMusicNote, { gGiSongNoteDL } } //Song of storms
|
||||
{ GetItem_DrawGenericMusicNote, { gGiSongNoteDL } }, //Song of storms
|
||||
{ GetItem_DrawTriforcePiece, { gTriforcePiece0DL } } // Triforce Piece
|
||||
};
|
||||
|
||||
/**
|
||||
@ -1031,3 +1035,33 @@ void GetItem_DrawWallet(PlayState* play, s16 drawId) {
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
||||
void GetItem_DrawTriforcePiece(PlayState* play, s16 drawId) {
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
Gfx_SetupDL_25Opa(play->state.gfxCtx);
|
||||
|
||||
Matrix_Scale(0.035f, 0.035f, 0.035f, MTXMODE_APPLY);
|
||||
|
||||
uint16_t index = gSaveContext.triforcePiecesCollected % 3;
|
||||
Gfx* triforcePieceDL;
|
||||
|
||||
switch (index) {
|
||||
case 1:
|
||||
triforcePieceDL = (Gfx*) gTriforcePiece1DL;
|
||||
break;
|
||||
case 2:
|
||||
triforcePieceDL = (Gfx*) gTriforcePiece2DL;
|
||||
break;
|
||||
default:
|
||||
triforcePieceDL = (Gfx*) gTriforcePiece0DL;
|
||||
break;
|
||||
}
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
|
||||
G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||
|
||||
gSPDisplayList(POLY_OPA_DISP++, triforcePieceDL);
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
@ -2528,6 +2528,21 @@ u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
|
||||
return Return_Item_Entry(giEntry, RG_NONE);
|
||||
}
|
||||
|
||||
if (item == RG_TRIFORCE_PIECE) {
|
||||
gSaveContext.triforcePiecesCollected++;
|
||||
GameInteractor_SetTriforceHuntPieceGiven(true);
|
||||
|
||||
// Teleport to credits when goal is reached.
|
||||
if (gSaveContext.triforcePiecesCollected == Randomizer_GetSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED)) {
|
||||
gSaveContext.sohStats.itemTimestamp[TIMESTAMP_TRIFORCE_COMPLETED] = GAMEPLAYSTAT_TOTAL_TIME;
|
||||
gSaveContext.sohStats.gameComplete = 1;
|
||||
Play_PerformSave(play);
|
||||
GameInteractor_SetTriforceHuntCreditsWarpActive(true);
|
||||
}
|
||||
|
||||
return Return_Item_Entry(giEntry, RG_NONE);
|
||||
}
|
||||
|
||||
if (item == RG_PROGRESSIVE_BOMBCHUS) {
|
||||
if (INV_CONTENT(ITEM_BOMBCHU) == ITEM_NONE) {
|
||||
INV_CONTENT(ITEM_BOMBCHU) = ITEM_BOMBCHU;
|
||||
|
@ -2318,7 +2318,10 @@ void Play_PerformSave(PlayState* play) {
|
||||
} else {
|
||||
Save_SaveFile();
|
||||
}
|
||||
if (CVarGetInteger("gAutosave", AUTOSAVE_OFF) != AUTOSAVE_OFF) {
|
||||
uint8_t triforceHuntCompleted =
|
||||
gSaveContext.n64ddFlag && gSaveContext.triforcePiecesCollected == Randomizer_GetSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED) &&
|
||||
Randomizer_GetSettingValue(RSK_TRIFORCE_HUNT);
|
||||
if (CVarGetInteger("gAutosave", AUTOSAVE_OFF) != AUTOSAVE_OFF || triforceHuntCompleted) {
|
||||
Overlay_DisplayText(3.0f, "Game Saved");
|
||||
}
|
||||
}
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h"
|
||||
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||
#include "soh/Enhancements/randomizer/draw.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
@ -1292,6 +1293,8 @@ void Player_DrawGetItemImpl(PlayState* play, Player* this, Vec3f* refPos, s32 dr
|
||||
|
||||
if (this->getItemEntry.modIndex == MOD_RANDOMIZER && this->getItemEntry.getItemId == RG_ICE_TRAP) {
|
||||
Player_DrawGetItemIceTrap(play, this, refPos, drawIdPlusOne, height);
|
||||
} else if (this->getItemEntry.modIndex == MOD_RANDOMIZER && this->getItemEntry.getItemId == RG_TRIFORCE_PIECE) {
|
||||
Randomizer_DrawTriforcePieceGI(play, this->getItemEntry);
|
||||
} else if (this->getItemEntry.drawFunc != NULL) {
|
||||
this->getItemEntry.drawFunc(play, &this->getItemEntry);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user