Fishsanity - Rando v3 (#3738)

* Update z_fishing documentation from decomp

* undo sCameraAt/Eye rename

* forgot to include these defines Heehee

* adding enums, settings

* adding more stuff back in

* more work

* we're literally typing words into computer

* include unordered map

maybe this fixes mac build idk

* wahoo

* hmm

* add make sure disabled flag gets popped

* poggers in the chat?

* doing some refactoring

* fixing build

* documentation, moving fishsanity instance to rando

* move FS back to context, fixing build, mod progress

since FS is needed during rando generation & provides perpetual info abt. fishsanity in the seed, seems to make more sense if it lives on the context

* moving some stuff around

* it's starting to get real in here

* ELIMINATE FISHSANITYMETA

* IT WROKS

* Update trackers, fix pond fish flagging

* ZD fish shuffle initial checkpoint

* ZD fish "working"

aside from the crashing

* wrapping up

* fix for partial pond shuffle

* remove misc. unrelated debugconsole modification

* updating GI model

* get build working

* add a todo for this

* removeoopsie

* Rework hints a bit

* update hint loc

* Use visual indicator instead of despawning caught fish

---------

Co-authored-by: jordanpg <jordanpg@users.noreply.github.com>
This commit is contained in:
Jordan Gilbreath 2024-01-14 12:02:23 -05:00 committed by GitHub
parent eb5f7688f8
commit 4cbf3a5621
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
82 changed files with 6012 additions and 1541 deletions

View File

@ -0,0 +1,26 @@
<DisplayList Version="0">
<ClearGeometryMode G_LIGHTING="1" />
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_cull" VertexBufferIndex="0" VertexOffset="0" Count="8"/>
<CullDisplayList Start="0" End="7"/>
<CallDisplayList Path="objects/object_gi_fishing_pole/mat_gFishingPoleGiDL_reel_handle_metal"/>
<CallDisplayList Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_tri_0"/>
<CallDisplayList Path="objects/object_gi_fishing_pole/mat_gFishingPoleGiDL_wood"/>
<CallDisplayList Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_tri_1"/>
<CallDisplayList Path="objects/object_gi_fishing_pole/mat_gFishingPoleGiDL_black"/>
<CallDisplayList Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_tri_2"/>
<CallDisplayList Path="objects/object_gi_fishing_pole/mat_gFishingPoleGiDL_line"/>
<CallDisplayList Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_tri_3"/>
<CallDisplayList Path="objects/object_gi_fishing_pole/mat_gFishingPoleGiDL_reel_metal_001"/>
<CallDisplayList Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_tri_4"/>
<CallDisplayList Path="objects/object_gi_fishing_pole/mat_gFishingPoleGiDL_reel_accent_001"/>
<CallDisplayList Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_tri_5"/>
<CallDisplayList Path="objects/object_gi_fishing_pole/mat_gFishingPoleGiDL_reel_white"/>
<CallDisplayList Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_tri_6"/>
<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>

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,341 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="0" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="4" V12="5" Flag1="0"/>
<Triangles2 V00="3" V01="5" V02="6" Flag0="0" V10="7" V11="6" V12="5" Flag1="0"/>
<Triangles2 V00="7" V01="8" V02="6" Flag0="0" V10="8" V11="7" V12="9" Flag1="0"/>
<Triangles2 V00="7" V01="10" V02="9" Flag0="0" V10="7" V11="11" V12="10" Flag1="0"/>
<Triangles2 V00="11" V01="7" V02="12" Flag0="0" V10="11" V11="12" V12="13" Flag1="0"/>
<Triangles2 V00="4" V01="13" V02="12" Flag0="0" V10="4" V11="14" V12="13" Flag1="0"/>
<Triangles2 V00="14" V01="15" V02="13" Flag0="0" V10="14" V11="16" V12="15" Flag1="0"/>
<Triangles2 V00="16" V01="17" V02="15" Flag0="0" V10="16" V11="18" V12="17" Flag1="0"/>
<Triangles2 V00="18" V01="19" V02="17" Flag0="0" V10="18" V11="20" V12="19" Flag1="0"/>
<Triangles2 V00="20" V01="21" V02="19" Flag0="0" V10="20" V11="22" V12="21" Flag1="0"/>
<Triangles2 V00="22" V01="23" V02="21" Flag0="0" V10="22" V11="24" V12="23" Flag1="0"/>
<Triangles2 V00="24" V01="25" V02="23" Flag0="0" V10="24" V11="26" V12="25" Flag1="0"/>
<Triangles2 V00="26" V01="27" V02="25" Flag0="0" V10="26" V11="28" V12="27" Flag1="0"/>
<Triangles2 V00="28" V01="29" V02="27" Flag0="0" V10="28" V11="30" V12="29" Flag1="0"/>
<Triangle1 V00="30" V01="31" V02="29"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="32" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="1" V11="3" V12="2" Flag1="0"/>
<Triangles2 V00="1" V01="4" V02="3" Flag0="0" V10="4" V11="5" V12="3" Flag1="0"/>
<Triangles2 V00="4" V01="6" V02="5" Flag0="0" V10="6" V11="7" V12="5" Flag1="0"/>
<Triangles2 V00="6" V01="8" V02="7" Flag0="0" V10="8" V11="9" V12="7" Flag1="0"/>
<Triangles2 V00="8" V01="10" V02="9" Flag0="0" V10="10" V11="11" V12="9" Flag1="0"/>
<Triangles2 V00="10" V01="12" V02="11" Flag0="0" V10="13" V11="9" V12="11" Flag1="0"/>
<Triangles2 V00="13" V01="14" V02="9" Flag0="0" V10="14" V11="13" V12="15" Flag1="0"/>
<Triangles2 V00="13" V01="16" V02="15" Flag0="0" V10="17" V11="15" V12="16" Flag1="0"/>
<Triangles2 V00="18" V01="17" V02="16" Flag0="0" V10="18" V11="16" V12="19" Flag1="0"/>
<Triangles2 V00="20" V01="18" V02="19" Flag0="0" V10="20" V11="19" V12="21" Flag1="0"/>
<Triangles2 V00="22" V01="21" V02="19" Flag0="0" V10="22" V11="23" V12="21" Flag1="0"/>
<Triangles2 V00="23" V01="22" V02="24" Flag0="0" V10="23" V11="24" V12="25" Flag1="0"/>
<Triangles2 V00="26" V01="23" V02="25" Flag0="0" V10="26" V11="25" V12="27" Flag1="0"/>
<Triangles2 V00="28" V01="26" V02="27" Flag0="0" V10="28" V11="27" V12="29" Flag1="0"/>
<Triangles2 V00="30" V01="28" V02="29" Flag0="0" V10="30" V11="29" V12="31" Flag1="0"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="64" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="0" V11="2" V12="3" Flag1="0"/>
<Triangles2 V00="4" V01="0" V02="3" Flag0="0" V10="4" V11="3" V12="5" Flag1="0"/>
<Triangles2 V00="6" V01="4" V02="5" Flag0="0" V10="6" V11="5" V12="7" Flag1="0"/>
<Triangles2 V00="8" V01="6" V02="7" Flag0="0" V10="8" V11="7" V12="9" Flag1="0"/>
<Triangles2 V00="10" V01="8" V02="9" Flag0="0" V10="10" V11="9" V12="11" Flag1="0"/>
<Triangles2 V00="12" V01="10" V02="11" Flag0="0" V10="12" V11="11" V12="13" Flag1="0"/>
<Triangles2 V00="14" V01="12" V02="13" Flag0="0" V10="14" V11="13" V12="15" Flag1="0"/>
<Triangles2 V00="16" V01="14" V02="15" Flag0="0" V10="16" V11="15" V12="17" Flag1="0"/>
<Triangles2 V00="18" V01="16" V02="17" Flag0="0" V10="18" V11="17" V12="19" Flag1="0"/>
<Triangles2 V00="16" V01="18" V02="20" Flag0="0" V10="18" V11="21" V12="20" Flag1="0"/>
<Triangles2 V00="22" V01="20" V02="21" Flag0="0" V10="23" V11="22" V12="21" Flag1="0"/>
<Triangles2 V00="22" V01="24" V02="20" Flag0="0" V10="24" V11="25" V12="20" Flag1="0"/>
<Triangles2 V00="24" V01="26" V02="25" Flag0="0" V10="26" V11="27" V12="25" Flag1="0"/>
<Triangles2 V00="26" V01="28" V02="27" Flag0="0" V10="28" V11="29" V12="27" Flag1="0"/>
<Triangles2 V00="28" V01="30" V02="29" Flag0="0" V10="30" V11="31" V12="29" Flag1="0"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="96" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="1" V11="3" V12="2" Flag1="0"/>
<Triangles2 V00="1" V01="4" V02="3" Flag0="0" V10="4" V11="5" V12="3" Flag1="0"/>
<Triangles2 V00="4" V01="6" V02="5" Flag0="0" V10="6" V11="7" V12="5" Flag1="0"/>
<Triangles2 V00="6" V01="8" V02="7" Flag0="0" V10="8" V11="9" V12="7" Flag1="0"/>
<Triangles2 V00="8" V01="10" V02="9" Flag0="0" V10="10" V11="11" V12="9" Flag1="0"/>
<Triangles2 V00="10" V01="12" V02="11" Flag0="0" V10="12" V11="13" V12="11" Flag1="0"/>
<Triangles2 V00="12" V01="14" V02="13" Flag0="0" V10="14" V11="15" V12="13" Flag1="0"/>
<Triangles2 V00="14" V01="16" V02="15" Flag0="0" V10="16" V11="17" V12="15" Flag1="0"/>
<Triangles2 V00="16" V01="18" V02="17" Flag0="0" V10="19" V11="15" V12="17" Flag1="0"/>
<Triangles2 V00="19" V01="20" V02="15" Flag0="0" V10="20" V11="13" V12="15" Flag1="0"/>
<Triangles2 V00="20" V01="21" V02="13" Flag0="0" V10="21" V11="11" V12="13" Flag1="0"/>
<Triangles2 V00="21" V01="22" V02="11" Flag0="0" V10="22" V11="9" V12="11" Flag1="0"/>
<Triangles2 V00="22" V01="23" V02="9" Flag0="0" V10="23" V11="7" V12="9" Flag1="0"/>
<Triangles2 V00="23" V01="24" V02="7" Flag0="0" V10="24" V11="5" V12="7" Flag1="0"/>
<Triangles2 V00="24" V01="25" V02="5" Flag0="0" V10="25" V11="3" V12="5" Flag1="0"/>
<Triangles2 V00="25" V01="26" V02="3" Flag0="0" V10="26" V11="2" V12="3" Flag1="0"/>
<Triangles2 V00="26" V01="27" V02="2" Flag0="0" V10="27" V11="28" V12="2" Flag1="0"/>
<Triangles2 V00="27" V01="29" V02="28" Flag0="0" V10="29" V11="30" V12="28" Flag1="0"/>
<Triangle1 V00="29" V01="31" V02="30"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="128" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="0" V11="3" V12="1" Flag1="0"/>
<Triangles2 V00="3" V01="4" V02="1" Flag0="0" V10="5" V11="6" V12="7" Flag1="0"/>
<Triangles2 V00="5" V01="8" V02="6" Flag0="0" V10="9" V11="8" V12="5" Flag1="0"/>
<Triangles2 V00="9" V01="10" V02="8" Flag0="0" V10="11" V11="10" V12="9" Flag1="0"/>
<Triangles2 V00="11" V01="12" V02="10" Flag0="0" V10="13" V11="12" V12="11" Flag1="0"/>
<Triangles2 V00="13" V01="14" V02="12" Flag0="0" V10="15" V11="14" V12="13" Flag1="0"/>
<Triangles2 V00="15" V01="16" V02="14" Flag0="0" V10="17" V11="16" V12="15" Flag1="0"/>
<Triangles2 V00="17" V01="18" V02="16" Flag0="0" V10="19" V11="18" V12="17" Flag1="0"/>
<Triangles2 V00="19" V01="20" V02="18" Flag0="0" V10="21" V11="20" V12="19" Flag1="0"/>
<Triangles2 V00="21" V01="22" V02="20" Flag0="0" V10="23" V11="22" V12="21" Flag1="0"/>
<Triangles2 V00="23" V01="24" V02="22" Flag0="0" V10="25" V11="24" V12="23" Flag1="0"/>
<Triangles2 V00="25" V01="26" V02="24" Flag0="0" V10="27" V11="26" V12="25" Flag1="0"/>
<Triangles2 V00="27" V01="28" V02="26" Flag0="0" V10="29" V11="28" V12="27" Flag1="0"/>
<Triangles2 V00="29" V01="30" V02="28" Flag0="0" V10="31" V11="30" V12="29" Flag1="0"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="160" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="1" V12="0" Flag1="0"/>
<Triangles2 V00="3" V01="4" V02="1" Flag0="0" V10="5" V11="4" V12="3" Flag1="0"/>
<Triangles2 V00="5" V01="6" V02="4" Flag0="0" V10="7" V11="6" V12="5" Flag1="0"/>
<Triangles2 V00="7" V01="8" V02="6" Flag0="0" V10="9" V11="6" V12="8" Flag1="0"/>
<Triangles2 V00="9" V01="10" V02="6" Flag0="0" V10="10" V11="9" V12="11" Flag1="0"/>
<Triangles2 V00="10" V01="11" V02="12" Flag0="0" V10="13" V11="10" V12="12" Flag1="0"/>
<Triangles2 V00="13" V01="12" V02="14" Flag0="0" V10="15" V11="13" V12="14" Flag1="0"/>
<Triangles2 V00="15" V01="14" V02="16" Flag0="0" V10="17" V11="15" V12="16" Flag1="0"/>
<Triangles2 V00="17" V01="16" V02="18" Flag0="0" V10="19" V11="17" V12="18" Flag1="0"/>
<Triangles2 V00="19" V01="18" V02="20" Flag0="0" V10="21" V11="19" V12="20" Flag1="0"/>
<Triangles2 V00="21" V01="20" V02="22" Flag0="0" V10="23" V11="21" V12="22" Flag1="0"/>
<Triangles2 V00="23" V01="22" V02="24" Flag0="0" V10="25" V11="23" V12="24" Flag1="0"/>
<Triangles2 V00="25" V01="24" V02="26" Flag0="0" V10="27" V11="25" V12="26" Flag1="0"/>
<Triangles2 V00="27" V01="26" V02="28" Flag0="0" V10="29" V11="27" V12="28" Flag1="0"/>
<Triangles2 V00="29" V01="28" V02="30" Flag0="0" V10="31" V11="29" V12="30" Flag1="0"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="192" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="0" V12="2" Flag1="0"/>
<Triangles2 V00="3" V01="2" V02="4" Flag0="0" V10="5" V11="3" V12="4" Flag1="0"/>
<Triangles2 V00="5" V01="4" V02="6" Flag0="0" V10="7" V11="5" V12="6" Flag1="0"/>
<Triangles2 V00="7" V01="6" V02="8" Flag0="0" V10="9" V11="7" V12="8" Flag1="0"/>
<Triangles2 V00="9" V01="8" V02="10" Flag0="0" V10="11" V11="9" V12="10" Flag1="0"/>
<Triangles2 V00="11" V01="10" V02="12" Flag0="0" V10="9" V11="11" V12="13" Flag1="0"/>
<Triangles2 V00="9" V01="13" V02="14" Flag0="0" V10="7" V11="9" V12="14" Flag1="0"/>
<Triangles2 V00="7" V01="14" V02="15" Flag0="0" V10="5" V11="7" V12="15" Flag1="0"/>
<Triangles2 V00="5" V01="15" V02="16" Flag0="0" V10="3" V11="5" V12="16" Flag1="0"/>
<Triangles2 V00="3" V01="16" V02="17" Flag0="0" V10="0" V11="3" V12="17" Flag1="0"/>
<Triangles2 V00="0" V01="17" V02="18" Flag0="0" V10="19" V11="0" V12="18" Flag1="0"/>
<Triangles2 V00="19" V01="18" V02="20" Flag0="0" V10="21" V11="19" V12="20" Flag1="0"/>
<Triangles2 V00="21" V01="20" V02="22" Flag0="0" V10="23" V11="21" V12="22" Flag1="0"/>
<Triangles2 V00="23" V01="22" V02="24" Flag0="0" V10="25" V11="23" V12="24" Flag1="0"/>
<Triangles2 V00="25" V01="24" V02="26" Flag0="0" V10="27" V11="25" V12="26" Flag1="0"/>
<Triangles2 V00="27" V01="26" V02="28" Flag0="0" V10="29" V11="27" V12="28" Flag1="0"/>
<Triangles2 V00="29" V01="28" V02="30" Flag0="0" V10="31" V11="29" V12="30" Flag1="0"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="224" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="0" V12="2" Flag1="0"/>
<Triangles2 V00="3" V01="2" V02="4" Flag0="0" V10="5" V11="3" V12="4" Flag1="0"/>
<Triangles2 V00="5" V01="4" V02="6" Flag0="0" V10="7" V11="5" V12="6" Flag1="0"/>
<Triangles2 V00="7" V01="6" V02="8" Flag0="0" V10="9" V11="10" V12="11" Flag1="0"/>
<Triangles2 V00="9" V01="11" V02="12" Flag0="0" V10="9" V11="12" V12="13" Flag1="0"/>
<Triangles2 V00="12" V01="14" V02="13" Flag0="0" V10="12" V11="15" V12="14" Flag1="0"/>
<Triangles2 V00="12" V01="16" V02="15" Flag0="0" V10="12" V11="17" V12="16" Flag1="0"/>
<Triangles2 V00="15" V01="18" V02="14" Flag0="0" V10="15" V11="19" V12="18" Flag1="0"/>
<Triangles2 V00="15" V01="20" V02="19" Flag0="0" V10="15" V11="21" V12="20" Flag1="0"/>
<Triangles2 V00="14" V01="18" V02="22" Flag0="0" V10="14" V11="22" V12="23" Flag1="0"/>
<Triangles2 V00="13" V01="14" V02="23" Flag0="0" V10="13" V11="23" V12="24" Flag1="0"/>
<Triangles2 V00="25" V01="13" V02="24" Flag0="0" V10="25" V11="24" V12="26" Flag1="0"/>
<Triangles2 V00="27" V01="25" V02="26" Flag0="0" V10="27" V11="26" V12="28" Flag1="0"/>
<Triangles2 V00="29" V01="27" V02="28" Flag0="0" V10="29" V11="28" V12="30" Flag1="0"/>
<Triangle1 V00="31" V01="29" V02="30"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="256" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="0" V12="2" Flag1="0"/>
<Triangles2 V00="3" V01="2" V02="4" Flag0="0" V10="5" V11="3" V12="4" Flag1="0"/>
<Triangles2 V00="5" V01="4" V02="6" Flag0="0" V10="7" V11="5" V12="6" Flag1="0"/>
<Triangles2 V00="7" V01="6" V02="8" Flag0="0" V10="9" V11="5" V12="7" Flag1="0"/>
<Triangles2 V00="9" V01="10" V02="5" Flag0="0" V10="9" V11="11" V12="10" Flag1="0"/>
<Triangles2 V00="9" V01="12" V02="11" Flag0="0" V10="10" V11="3" V12="5" Flag1="0"/>
<Triangles2 V00="10" V01="13" V02="3" Flag0="0" V10="10" V11="14" V12="13" Flag1="0"/>
<Triangles2 V00="10" V01="15" V02="14" Flag0="0" V10="13" V11="0" V12="3" Flag1="0"/>
<Triangles2 V00="13" V01="16" V02="0" Flag0="0" V10="13" V11="17" V12="16" Flag1="0"/>
<Triangles2 V00="13" V01="18" V02="17" Flag0="0" V10="16" V11="19" V12="0" Flag1="0"/>
<Triangles2 V00="16" V01="20" V02="19" Flag0="0" V10="16" V11="21" V12="20" Flag1="0"/>
<Triangles2 V00="16" V01="22" V02="21" Flag0="0" V10="20" V11="23" V12="19" Flag1="0"/>
<Triangles2 V00="20" V01="24" V02="23" Flag0="0" V10="20" V11="25" V12="24" Flag1="0"/>
<Triangles2 V00="20" V01="26" V02="25" Flag0="0" V10="24" V11="27" V12="23" Flag1="0"/>
<Triangles2 V00="24" V01="28" V02="27" Flag0="0" V10="24" V11="29" V12="28" Flag1="0"/>
<Triangles2 V00="24" V01="30" V02="29" Flag0="0" V10="28" V11="31" V12="27" Flag1="0"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="288" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="0" V11="2" V12="3" Flag1="0"/>
<Triangles2 V00="0" V01="3" V02="4" Flag0="0" V10="3" V11="5" V12="4" Flag1="0"/>
<Triangles2 V00="3" V01="6" V02="5" Flag0="0" V10="3" V11="7" V12="6" Flag1="0"/>
<Triangles2 V00="3" V01="8" V02="7" Flag0="0" V10="6" V11="9" V12="5" Flag1="0"/>
<Triangles2 V00="6" V01="10" V02="9" Flag0="0" V10="6" V11="11" V12="10" Flag1="0"/>
<Triangles2 V00="6" V01="12" V02="11" Flag0="0" V10="5" V11="9" V12="13" Flag1="0"/>
<Triangles2 V00="5" V01="13" V02="14" Flag0="0" V10="4" V11="5" V12="14" Flag1="0"/>
<Triangles2 V00="4" V01="14" V02="15" Flag0="0" V10="16" V11="4" V12="15" Flag1="0"/>
<Triangles2 V00="16" V01="15" V02="17" Flag0="0" V10="0" V11="4" V12="16" Flag1="0"/>
<Triangles2 V00="10" V01="18" V02="19" Flag0="0" V10="10" V11="19" V12="20" Flag1="0"/>
<Triangles2 V00="10" V01="20" V02="21" Flag0="0" V10="10" V11="21" V12="22" Flag1="0"/>
<Triangles2 V00="22" V01="21" V02="23" Flag0="0" V10="22" V11="23" V12="13" Flag1="0"/>
<Triangles2 V00="20" V01="24" V02="25" Flag0="0" V10="20" V11="25" V12="26" Flag1="0"/>
<Triangles2 V00="20" V01="26" V02="27" Flag0="0" V10="20" V11="27" V12="28" Flag1="0"/>
<Triangles2 V00="28" V01="27" V02="29" Flag0="0" V10="28" V11="29" V12="23" Flag1="0"/>
<Triangle1 V00="26" V01="30" V02="31"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="320" Count="30"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="0" V11="2" V12="3" Flag1="0"/>
<Triangles2 V00="2" V01="4" V02="3" Flag0="0" V10="2" V11="5" V12="4" Flag1="0"/>
<Triangles2 V00="2" V01="6" V02="5" Flag0="0" V10="2" V11="7" V12="6" Flag1="0"/>
<Triangles2 V00="3" V01="4" V02="8" Flag0="0" V10="3" V11="8" V12="9" Flag1="0"/>
<Triangles2 V00="10" V01="3" V02="9" Flag0="0" V10="10" V11="9" V12="11" Flag1="0"/>
<Triangles2 V00="0" V01="3" V02="10" Flag0="0" V10="12" V11="13" V12="14" Flag1="0"/>
<Triangles2 V00="12" V01="15" V02="13" Flag0="0" V10="15" V11="16" V12="13" Flag1="0"/>
<Triangles2 V00="15" V01="17" V02="16" Flag0="0" V10="17" V11="18" V12="16" Flag1="0"/>
<Triangles2 V00="17" V01="19" V02="18" Flag0="0" V10="19" V11="20" V12="18" Flag1="0"/>
<Triangles2 V00="19" V01="21" V02="20" Flag0="0" V10="21" V11="22" V12="20" Flag1="0"/>
<Triangles2 V00="21" V01="23" V02="22" Flag0="0" V10="24" V11="25" V12="26" Flag1="0"/>
<Triangles2 V00="24" V01="26" V02="27" Flag0="0" V10="28" V11="24" V12="27" Flag1="0"/>
<Triangle1 V00="28" V01="27" V02="29"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="350" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="0" V11="2" V12="3" Flag1="0"/>
<Triangles2 V00="4" V01="0" V02="3" Flag0="0" V10="4" V11="3" V12="5" Flag1="0"/>
<Triangles2 V00="6" V01="7" V02="8" Flag0="0" V10="6" V11="9" V12="7" Flag1="0"/>
<Triangles2 V00="9" V01="10" V02="7" Flag0="0" V10="9" V11="11" V12="10" Flag1="0"/>
<Triangles2 V00="11" V01="12" V02="10" Flag0="0" V10="11" V11="13" V12="12" Flag1="0"/>
<Triangles2 V00="13" V01="14" V02="12" Flag0="0" V10="13" V11="15" V12="14" Flag1="0"/>
<Triangles2 V00="15" V01="16" V02="14" Flag0="0" V10="15" V11="17" V12="16" Flag1="0"/>
<Triangles2 V00="18" V01="19" V02="20" Flag0="0" V10="18" V11="20" V12="21" Flag1="0"/>
<Triangles2 V00="22" V01="23" V02="24" Flag0="0" V10="22" V11="24" V12="25" Flag1="0"/>
<Triangles2 V00="26" V01="27" V02="28" Flag0="0" V10="27" V11="29" V12="28" Flag1="0"/>
<Triangles2 V00="29" V01="30" V02="28" Flag0="0" V10="30" V11="31" V12="28" Flag1="0"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="382" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="1" V11="3" V12="2" Flag1="0"/>
<Triangles2 V00="3" V01="4" V02="2" Flag0="0" V10="4" V11="5" V12="2" Flag1="0"/>
<Triangles2 V00="5" V01="6" V02="2" Flag0="0" V10="6" V11="7" V12="2" Flag1="0"/>
<Triangles2 V00="7" V01="8" V02="2" Flag0="0" V10="8" V11="9" V12="2" Flag1="0"/>
<Triangles2 V00="9" V01="10" V02="2" Flag0="0" V10="10" V11="11" V12="2" Flag1="0"/>
<Triangles2 V00="11" V01="12" V02="2" Flag0="0" V10="13" V11="14" V12="15" Flag1="0"/>
<Triangles2 V00="13" V01="15" V02="16" Flag0="0" V10="17" V11="16" V12="15" Flag1="0"/>
<Triangles2 V00="17" V01="18" V02="16" Flag0="0" V10="18" V11="17" V12="19" Flag1="0"/>
<Triangles2 V00="17" V01="20" V02="19" Flag0="0" V10="17" V11="21" V12="20" Flag1="0"/>
<Triangles2 V00="21" V01="17" V02="22" Flag0="0" V10="21" V11="22" V12="23" Flag1="0"/>
<Triangles2 V00="14" V01="23" V02="22" Flag0="0" V10="14" V11="24" V12="23" Flag1="0"/>
<Triangles2 V00="24" V01="25" V02="23" Flag0="0" V10="24" V11="26" V12="25" Flag1="0"/>
<Triangles2 V00="26" V01="27" V02="25" Flag0="0" V10="26" V11="28" V12="27" Flag1="0"/>
<Triangles2 V00="28" V01="29" V02="27" Flag0="0" V10="28" V11="30" V12="29" Flag1="0"/>
<Triangle1 V00="30" V01="31" V02="29"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="414" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="1" V11="3" V12="2" Flag1="0"/>
<Triangles2 V00="1" V01="4" V02="3" Flag0="0" V10="4" V11="5" V12="3" Flag1="0"/>
<Triangles2 V00="4" V01="6" V02="5" Flag0="0" V10="6" V11="7" V12="5" Flag1="0"/>
<Triangles2 V00="6" V01="8" V02="7" Flag0="0" V10="8" V11="9" V12="7" Flag1="0"/>
<Triangles2 V00="8" V01="10" V02="9" Flag0="0" V10="10" V11="11" V12="9" Flag1="0"/>
<Triangles2 V00="10" V01="12" V02="11" Flag0="0" V10="12" V11="13" V12="11" Flag1="0"/>
<Triangles2 V00="12" V01="14" V02="13" Flag0="0" V10="14" V11="15" V12="13" Flag1="0"/>
<Triangles2 V00="14" V01="16" V02="15" Flag0="0" V10="16" V11="17" V12="15" Flag1="0"/>
<Triangles2 V00="16" V01="18" V02="17" Flag0="0" V10="18" V11="19" V12="17" Flag1="0"/>
<Triangles2 V00="18" V01="20" V02="19" Flag0="0" V10="21" V11="17" V12="19" Flag1="0"/>
<Triangles2 V00="21" V01="22" V02="17" Flag0="0" V10="22" V11="21" V12="23" Flag1="0"/>
<Triangles2 V00="21" V01="24" V02="23" Flag0="0" V10="21" V11="25" V12="24" Flag1="0"/>
<Triangles2 V00="25" V01="21" V02="26" Flag0="0" V10="25" V11="26" V12="27" Flag1="0"/>
<Triangles2 V00="20" V01="27" V02="26" Flag0="0" V10="20" V11="28" V12="27" Flag1="0"/>
<Triangles2 V00="25" V01="29" V02="24" Flag0="0" V10="30" V11="24" V12="29" Flag1="0"/>
<Triangle1 V00="31" V01="30" V02="29"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="446" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="0" V12="2" Flag1="0"/>
<Triangles2 V00="3" V01="2" V02="4" Flag0="0" V10="5" V11="4" V12="2" Flag1="0"/>
<Triangles2 V00="5" V01="6" V02="4" Flag0="0" V10="6" V11="5" V12="7" Flag1="0"/>
<Triangles2 V00="6" V01="7" V02="8" Flag0="0" V10="9" V11="6" V12="8" Flag1="0"/>
<Triangles2 V00="9" V01="8" V02="10" Flag0="0" V10="11" V11="9" V12="10" Flag1="0"/>
<Triangles2 V00="11" V01="10" V02="12" Flag0="0" V10="13" V11="11" V12="12" Flag1="0"/>
<Triangles2 V00="13" V01="12" V02="14" Flag0="0" V10="15" V11="13" V12="14" Flag1="0"/>
<Triangles2 V00="15" V01="14" V02="16" Flag0="0" V10="17" V11="15" V12="16" Flag1="0"/>
<Triangles2 V00="17" V01="16" V02="18" Flag0="0" V10="19" V11="17" V12="18" Flag1="0"/>
<Triangles2 V00="19" V01="18" V02="20" Flag0="0" V10="21" V11="19" V12="20" Flag1="0"/>
<Triangles2 V00="21" V01="20" V02="22" Flag0="0" V10="23" V11="21" V12="22" Flag1="0"/>
<Triangles2 V00="23" V01="22" V02="24" Flag0="0" V10="25" V11="23" V12="24" Flag1="0"/>
<Triangles2 V00="25" V01="24" V02="26" Flag0="0" V10="27" V11="25" V12="26" Flag1="0"/>
<Triangles2 V00="27" V01="26" V02="28" Flag0="0" V10="29" V11="27" V12="28" Flag1="0"/>
<Triangles2 V00="29" V01="28" V02="30" Flag0="0" V10="27" V11="29" V12="31" Flag1="0"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="478" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="2" V12="1" Flag1="0"/>
<Triangles2 V00="4" V01="3" V02="1" Flag0="0" V10="4" V11="1" V12="5" Flag1="0"/>
<Triangles2 V00="6" V01="4" V02="5" Flag0="0" V10="3" V11="7" V12="2" Flag1="0"/>
<Triangles2 V00="7" V01="8" V02="2" Flag0="0" V10="7" V11="9" V12="8" Flag1="0"/>
<Triangles2 V00="9" V01="10" V02="8" Flag0="0" V10="9" V11="11" V12="10" Flag1="0"/>
<Triangles2 V00="11" V01="12" V02="10" Flag0="0" V10="11" V11="13" V12="12" Flag1="0"/>
<Triangles2 V00="13" V01="14" V02="12" Flag0="0" V10="13" V11="15" V12="14" Flag1="0"/>
<Triangles2 V00="15" V01="16" V02="14" Flag0="0" V10="15" V11="17" V12="16" Flag1="0"/>
<Triangles2 V00="17" V01="18" V02="16" Flag0="0" V10="17" V11="19" V12="18" Flag1="0"/>
<Triangles2 V00="19" V01="20" V02="18" Flag0="0" V10="19" V11="21" V12="20" Flag1="0"/>
<Triangles2 V00="21" V01="22" V02="20" Flag0="0" V10="21" V11="23" V12="22" Flag1="0"/>
<Triangles2 V00="23" V01="24" V02="22" Flag0="0" V10="23" V11="25" V12="24" Flag1="0"/>
<Triangles2 V00="25" V01="26" V02="24" Flag0="0" V10="25" V11="27" V12="26" Flag1="0"/>
<Triangles2 V00="27" V01="28" V02="26" Flag0="0" V10="27" V11="29" V12="28" Flag1="0"/>
<Triangles2 V00="30" V01="26" V02="28" Flag0="0" V10="30" V11="31" V12="26" Flag1="0"/>
<Triangle1 V00="31" V01="24" V02="26"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="510" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="1" V11="3" V12="2" Flag1="0"/>
<Triangles2 V00="1" V01="4" V02="3" Flag0="0" V10="4" V11="5" V12="3" Flag1="0"/>
<Triangles2 V00="4" V01="6" V02="5" Flag0="0" V10="6" V11="7" V12="5" Flag1="0"/>
<Triangles2 V00="6" V01="8" V02="7" Flag0="0" V10="8" V11="9" V12="7" Flag1="0"/>
<Triangles2 V00="8" V01="10" V02="9" Flag0="0" V10="10" V11="11" V12="9" Flag1="0"/>
<Triangles2 V00="10" V01="12" V02="11" Flag0="0" V10="12" V11="13" V12="11" Flag1="0"/>
<Triangles2 V00="12" V01="14" V02="13" Flag0="0" V10="14" V11="15" V12="13" Flag1="0"/>
<Triangles2 V00="14" V01="16" V02="15" Flag0="0" V10="16" V11="17" V12="15" Flag1="0"/>
<Triangles2 V00="16" V01="18" V02="17" Flag0="0" V10="18" V11="19" V12="17" Flag1="0"/>
<Triangles2 V00="20" V01="21" V02="22" Flag0="0" V10="21" V11="23" V12="22" Flag1="0"/>
<Triangles2 V00="21" V01="24" V02="23" Flag0="0" V10="24" V11="25" V12="23" Flag1="0"/>
<Triangles2 V00="24" V01="26" V02="25" Flag0="0" V10="26" V11="27" V12="25" Flag1="0"/>
<Triangles2 V00="26" V01="28" V02="27" Flag0="0" V10="28" V11="29" V12="27" Flag1="0"/>
<Triangles2 V00="28" V01="30" V02="29" Flag0="0" V10="30" V11="31" V12="29" Flag1="0"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="542" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="1" V11="3" V12="2" Flag1="0"/>
<Triangles2 V00="1" V01="4" V02="3" Flag0="0" V10="4" V11="5" V12="3" Flag1="0"/>
<Triangles2 V00="4" V01="6" V02="5" Flag0="0" V10="6" V11="7" V12="5" Flag1="0"/>
<Triangles2 V00="6" V01="8" V02="7" Flag0="0" V10="8" V11="9" V12="7" Flag1="0"/>
<Triangles2 V00="8" V01="10" V02="9" Flag0="0" V10="10" V11="11" V12="9" Flag1="0"/>
<Triangles2 V00="10" V01="12" V02="11" Flag0="0" V10="12" V11="13" V12="11" Flag1="0"/>
<Triangles2 V00="12" V01="14" V02="13" Flag0="0" V10="14" V11="15" V12="13" Flag1="0"/>
<Triangles2 V00="14" V01="16" V02="15" Flag0="0" V10="16" V11="17" V12="15" Flag1="0"/>
<Triangles2 V00="16" V01="18" V02="17" Flag0="0" V10="18" V11="19" V12="17" Flag1="0"/>
<Triangles2 V00="18" V01="20" V02="19" Flag0="0" V10="20" V11="21" V12="19" Flag1="0"/>
<Triangles2 V00="20" V01="22" V02="21" Flag0="0" V10="22" V11="23" V12="21" Flag1="0"/>
<Triangles2 V00="21" V01="23" V02="24" Flag0="0" V10="23" V11="25" V12="24" Flag1="0"/>
<Triangles2 V00="23" V01="26" V02="25" Flag0="0" V10="26" V11="27" V12="25" Flag1="0"/>
<Triangles2 V00="26" V01="28" V02="27" Flag0="0" V10="28" V11="29" V12="27" Flag1="0"/>
<Triangles2 V00="28" V01="30" V02="29" Flag0="0" V10="30" V11="31" V12="29" Flag1="0"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="574" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="1" V11="3" V12="2" Flag1="0"/>
<Triangles2 V00="1" V01="4" V02="3" Flag0="0" V10="4" V11="5" V12="3" Flag1="0"/>
<Triangles2 V00="4" V01="6" V02="5" Flag0="0" V10="6" V11="7" V12="5" Flag1="0"/>
<Triangles2 V00="6" V01="8" V02="7" Flag0="0" V10="8" V11="9" V12="7" Flag1="0"/>
<Triangles2 V00="8" V01="10" V02="9" Flag0="0" V10="10" V11="11" V12="9" Flag1="0"/>
<Triangles2 V00="10" V01="12" V02="11" Flag0="0" V10="12" V11="13" V12="11" Flag1="0"/>
<Triangles2 V00="12" V01="14" V02="13" Flag0="0" V10="14" V11="15" V12="13" Flag1="0"/>
<Triangles2 V00="14" V01="16" V02="15" Flag0="0" V10="16" V11="17" V12="15" Flag1="0"/>
<Triangles2 V00="16" V01="18" V02="17" Flag0="0" V10="18" V11="19" V12="17" Flag1="0"/>
<Triangles2 V00="18" V01="20" V02="19" Flag0="0" V10="20" V11="21" V12="19" Flag1="0"/>
<Triangles2 V00="20" V01="22" V02="21" Flag0="0" V10="22" V11="23" V12="21" Flag1="0"/>
<Triangles2 V00="22" V01="24" V02="23" Flag0="0" V10="24" V11="25" V12="23" Flag1="0"/>
<Triangles2 V00="26" V01="27" V02="28" Flag0="0" V10="27" V11="29" V12="28" Flag1="0"/>
<Triangles2 V00="27" V01="30" V02="29" Flag0="0" V10="30" V11="31" V12="29" Flag1="0"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="606" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="1" V11="3" V12="2" Flag1="0"/>
<Triangles2 V00="1" V01="4" V02="3" Flag0="0" V10="4" V11="5" V12="3" Flag1="0"/>
<Triangles2 V00="4" V01="6" V02="5" Flag0="0" V10="6" V11="7" V12="5" Flag1="0"/>
<Triangles2 V00="6" V01="8" V02="7" Flag0="0" V10="8" V11="9" V12="7" Flag1="0"/>
<Triangles2 V00="8" V01="10" V02="9" Flag0="0" V10="10" V11="11" V12="9" Flag1="0"/>
<Triangles2 V00="10" V01="12" V02="11" Flag0="0" V10="12" V11="13" V12="11" Flag1="0"/>
<Triangles2 V00="12" V01="14" V02="13" Flag0="0" V10="14" V11="15" V12="13" Flag1="0"/>
<Triangles2 V00="14" V01="16" V02="15" Flag0="0" V10="16" V11="17" V12="15" Flag1="0"/>
<Triangles2 V00="16" V01="18" V02="17" Flag0="0" V10="18" V11="19" V12="17" Flag1="0"/>
<Triangles2 V00="18" V01="20" V02="19" Flag0="0" V10="20" V11="21" V12="19" Flag1="0"/>
<Triangles2 V00="20" V01="22" V02="21" Flag0="0" V10="22" V11="23" V12="21" Flag1="0"/>
<Triangles2 V00="22" V01="24" V02="23" Flag0="0" V10="24" V11="25" V12="23" Flag1="0"/>
<Triangles2 V00="24" V01="26" V02="25" Flag0="0" V10="26" V11="27" V12="25" Flag1="0"/>
<Triangles2 V00="26" V01="28" V02="27" Flag0="0" V10="28" V11="29" V12="27" Flag1="0"/>
<Triangles2 V00="27" V01="29" V02="30" Flag0="0" V10="29" V11="31" V12="30" Flag1="0"/>
<LoadVertices Path="objects/object_gi_fishing_pole/gFishingPoleGiDL_vtx_4" VertexBufferIndex="0" VertexOffset="638" Count="32"/>
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="1" V11="3" V12="2" Flag1="0"/>
<Triangles2 V00="1" V01="4" V02="3" Flag0="0" V10="4" V11="5" V12="3" Flag1="0"/>
<Triangles2 V00="4" V01="6" V02="5" Flag0="0" V10="6" V11="7" V12="5" Flag1="0"/>
<Triangles2 V00="6" V01="8" V02="7" Flag0="0" V10="8" V11="9" V12="7" Flag1="0"/>
<Triangles2 V00="8" V01="10" V02="9" Flag0="0" V10="10" V11="11" V12="9" Flag1="0"/>
<Triangles2 V00="10" V01="12" V02="11" Flag0="0" V10="12" V11="13" V12="11" Flag1="0"/>
<Triangles2 V00="12" V01="14" V02="13" Flag0="0" V10="14" V11="15" V12="13" Flag1="0"/>
<Triangles2 V00="14" V01="16" V02="15" Flag0="0" V10="16" V11="17" V12="15" Flag1="0"/>
<Triangles2 V00="16" V01="18" V02="17" Flag0="0" V10="18" V11="19" V12="17" Flag1="0"/>
<Triangles2 V00="18" V01="20" V02="19" Flag0="0" V10="20" V11="21" V12="19" Flag1="0"/>
<Triangles2 V00="20" V01="22" V02="21" Flag0="0" V10="22" V11="23" V12="21" Flag1="0"/>
<Triangles2 V00="22" V01="24" V02="23" Flag0="0" V10="24" V11="25" V12="23" Flag1="0"/>
<Triangles2 V00="24" V01="26" V02="25" Flag0="0" V10="26" V11="27" V12="25" Flag1="0"/>
<Triangles2 V00="26" V01="28" V02="27" Flag0="0" V10="28" V11="29" V12="27" Flag1="0"/>
<Triangles2 V00="28" V01="30" V02="29" Flag0="0" V10="30" V11="31" V12="29" Flag1="0"/>
<EndDisplayList/>
</DisplayList>

View File

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

View File

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

View File

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

View File

@ -0,0 +1,147 @@
<Vertex Version="0">
<Vtx X="24" Y="-76" Z="78" S="-138" T="-288" R="68" G="63" B="87" A="255"/>
<Vtx X="21" Y="-73" Z="72" S="-95" T="-523" R="188" G="104" B="28" A="255"/>
<Vtx X="21" Y="-76" Z="78" S="-138" T="-523" R="188" G="63" B="87" A="255"/>
<Vtx X="24" Y="-73" Z="72" S="-95" T="-288" R="68" G="104" B="28" A="255"/>
<Vtx X="24" Y="-76" Z="78" S="-138" T="-266" R="121" G="4" B="38" A="255"/>
<Vtx X="24" Y="-73" Z="72" S="-95" T="-266" R="125" G="24" B="5" A="255"/>
<Vtx X="24" Y="-83" Z="73" S="-138" T="-33" R="121" G="220" B="15" A="255"/>
<Vtx X="24" Y="-80" Z="68" S="-95" T="-33" R="125" G="240" B="237" A="255"/>
<Vtx X="24" Y="-83" Z="73" S="-138" T="-11" R="68" G="149" B="244" A="255"/>
<Vtx X="24" Y="-80" Z="68" S="-95" T="-11" R="68" G="181" B="180" A="255"/>
<Vtx X="21" Y="-83" Z="73" S="-138" T="224" R="188" G="149" B="244" A="255"/>
<Vtx X="21" Y="-80" Z="68" S="-95" T="224" R="188" G="181" B="180" A="255"/>
<Vtx X="21" Y="-83" Z="73" S="-138" T="246" R="135" G="220" B="15" A="255"/>
<Vtx X="21" Y="-80" Z="68" S="-95" T="246" R="131" G="240" B="237" A="255"/>
<Vtx X="21" Y="-76" Z="78" S="-138" T="479" R="135" G="4" B="38" A="255"/>
<Vtx X="21" Y="-73" Z="72" S="-95" T="479" R="131" G="24" B="5" A="255"/>
<Vtx X="21" Y="-76" Z="78" S="-138" T="491" R="188" G="63" B="87" A="255"/>
<Vtx X="21" Y="-73" Z="72" S="-95" T="491" R="188" G="104" B="28" A="255"/>
<Vtx X="21" Y="-73" Z="68" S="-82" T="469" R="130" G="16" B="5" A="255"/>
<Vtx X="21" Y="-73" Z="68" S="-82" T="491" R="176" G="96" B="23" A="255"/>
<Vtx X="21" Y="-60" Z="46" S="69" T="469" R="130" G="12" B="12" A="255"/>
<Vtx X="21" Y="-60" Z="47" S="69" T="491" R="176" G="69" B="71" A="255"/>
<Vtx X="21" Y="-59" Z="46" S="77" T="474" R="131" G="16" B="18" A="255"/>
<Vtx X="21" Y="-59" Z="46" S="77" T="491" R="188" G="76" B="75" A="255"/>
<Vtx X="21" Y="-57" Z="43" S="99" T="474" R="134" G="33" B="246" A="255"/>
<Vtx X="21" Y="-57" Z="43" S="99" T="491" R="186" G="104" B="21" A="255"/>
<Vtx X="21" Y="-62" Z="40" S="99" T="251" R="134" G="249" B="223" A="255"/>
<Vtx X="21" Y="-64" Z="43" S="77" T="251" R="131" G="232" B="251" A="255"/>
<Vtx X="21" Y="-62" Z="40" S="99" T="224" R="186" G="187" B="176" A="255"/>
<Vtx X="21" Y="-64" Z="43" S="77" T="224" R="188" G="153" B="227" A="255"/>
<Vtx X="24" Y="-62" Z="40" S="99" T="-11" R="70" G="187" B="176" A="255"/>
<Vtx X="24" Y="-64" Z="43" S="77" T="-11" R="68" G="153" B="227" A="255"/>
<Vtx X="24" Y="-62" Z="40" S="99" T="-38" R="122" G="249" B="223" A="255"/>
<Vtx X="24" Y="-64" Z="43" S="77" T="-11" R="68" G="153" B="227" A="255"/>
<Vtx X="24" Y="-62" Z="40" S="99" T="-11" R="70" G="187" B="176" A="255"/>
<Vtx X="24" Y="-64" Z="43" S="77" T="-38" R="125" G="232" B="251" A="255"/>
<Vtx X="24" Y="-57" Z="43" S="99" T="-261" R="122" G="33" B="246" A="255"/>
<Vtx X="24" Y="-61" Z="40" S="108" T="-45" R="114" G="15" B="202" A="255"/>
<Vtx X="24" Y="-57" Z="42" S="108" T="-253" R="114" G="39" B="216" A="255"/>
<Vtx X="24" Y="-61" Z="39" S="126" T="-31" R="52" G="7" B="140" A="255"/>
<Vtx X="24" Y="-57" Z="41" S="126" T="-268" R="52" G="97" B="193" A="255"/>
<Vtx X="21" Y="-57" Z="41" S="343" T="-268" R="204" G="97" B="193" A="255"/>
<Vtx X="21" Y="-61" Z="39" S="343" T="-31" R="204" G="7" B="140" A="255"/>
<Vtx X="24" Y="-62" Z="40" S="117" T="-21" R="70" G="187" B="176" A="255"/>
<Vtx X="24" Y="-61" Z="40" S="112" T="-29" R="114" G="15" B="202" A="255"/>
<Vtx X="24" Y="-62" Z="40" S="108" T="-23" R="122" G="249" B="223" A="255"/>
<Vtx X="21" Y="-62" Z="40" S="352" T="-21" R="186" G="187" B="176" A="255"/>
<Vtx X="21" Y="-62" Z="40" S="363" T="-38" R="134" G="249" B="223" A="255"/>
<Vtx X="21" Y="-61" Z="40" S="358" T="-45" R="142" G="15" B="202" A="255"/>
<Vtx X="21" Y="-57" Z="42" S="358" T="-253" R="142" G="39" B="216" A="255"/>
<Vtx X="21" Y="-57" Z="43" S="363" T="-261" R="134" G="33" B="246" A="255"/>
<Vtx X="21" Y="-57" Z="43" S="352" T="-277" R="186" G="104" B="21" A="255"/>
<Vtx X="24" Y="-57" Z="43" S="117" T="-277" R="70" G="104" B="21" A="255"/>
<Vtx X="24" Y="-57" Z="43" S="108" T="-275" R="122" G="33" B="246" A="255"/>
<Vtx X="24" Y="-57" Z="42" S="112" T="-269" R="114" G="39" B="216" A="255"/>
<Vtx X="24" Y="-78" Z="78" S="-157" T="-254" R="111" G="236" B="59" A="255"/>
<Vtx X="24" Y="-83" Z="73" S="-138" T="-33" R="121" G="220" B="15" A="255"/>
<Vtx X="24" Y="-76" Z="78" S="-138" T="-266" R="121" G="4" B="38" A="255"/>
<Vtx X="24" Y="-83" Z="76" S="-157" T="-45" R="110" G="214" B="47" A="255"/>
<Vtx X="23" Y="-78" Z="79" S="-177" T="-266" R="49" G="237" B="116" A="255"/>
<Vtx X="23" Y="-83" Z="76" S="-177" T="-33" R="49" G="165" B="73" A="255"/>
<Vtx X="22" Y="-83" Z="76" S="-377" T="-33" R="207" G="165" B="73" A="255"/>
<Vtx X="22" Y="-78" Z="79" S="-377" T="-266" R="207" G="237" B="116" A="255"/>
<Vtx X="24" Y="-76" Z="78" S="-160" T="-277" R="68" G="63" B="87" A="255"/>
<Vtx X="24" Y="-76" Z="78" S="-160" T="-277" R="68" G="63" B="87" A="255"/>
<Vtx X="23" Y="-78" Z="79" S="-177" T="-266" R="49" G="237" B="116" A="255"/>
<Vtx X="24" Y="-78" Z="78" S="-160" T="-267" R="111" G="236" B="59" A="255"/>
<Vtx X="24" Y="-76" Z="78" S="-151" T="-276" R="121" G="4" B="38" A="255"/>
<Vtx X="22" Y="-78" Z="79" S="-377" T="-266" R="207" G="237" B="116" A="255"/>
<Vtx X="21" Y="-76" Z="78" S="-395" T="-277" R="188" G="63" B="87" A="255"/>
<Vtx X="21" Y="-76" Z="78" S="-405" T="-266" R="135" G="4" B="38" A="255"/>
<Vtx X="21" Y="-78" Z="78" S="-396" T="-254" R="145" G="236" B="59" A="255"/>
<Vtx X="21" Y="-83" Z="76" S="-396" T="-45" R="146" G="214" B="47" A="255"/>
<Vtx X="21" Y="-83" Z="73" S="-405" T="-33" R="135" G="220" B="15" A="255"/>
<Vtx X="21" Y="-83" Z="73" S="-395" T="-21" R="188" G="149" B="244" A="255"/>
<Vtx X="22" Y="-83" Z="76" S="-377" T="-33" R="207" G="165" B="73" A="255"/>
<Vtx X="23" Y="-83" Z="76" S="-177" T="-33" R="49" G="165" B="73" A="255"/>
<Vtx X="24" Y="-83" Z="73" S="-160" T="-21" R="68" G="149" B="244" A="255"/>
<Vtx X="24" Y="-83" Z="73" S="-151" T="-23" R="121" G="220" B="15" A="255"/>
<Vtx X="24" Y="-83" Z="76" S="-160" T="-32" R="110" G="214" B="47" A="255"/>
<Vtx X="24" Y="-73" Z="72" S="-95" T="-288" R="68" G="104" B="28" A="255"/>
<Vtx X="21" Y="-73" Z="68" S="-82" T="-523" R="176" G="96" B="23" A="255"/>
<Vtx X="21" Y="-73" Z="72" S="-95" T="-523" R="188" G="104" B="28" A="255"/>
<Vtx X="24" Y="-73" Z="68" S="-82" T="-288" R="80" G="96" B="23" A="255"/>
<Vtx X="24" Y="-73" Z="72" S="-95" T="-266" R="125" G="24" B="5" A="255"/>
<Vtx X="24" Y="-73" Z="68" S="-82" T="-255" R="126" G="16" B="5" A="255"/>
<Vtx X="24" Y="-80" Z="68" S="-95" T="-33" R="125" G="240" B="237" A="255"/>
<Vtx X="24" Y="-76" Z="66" S="-82" T="-43" R="126" G="244" B="244" A="255"/>
<Vtx X="24" Y="-80" Z="68" S="-95" T="-11" R="68" G="181" B="180" A="255"/>
<Vtx X="24" Y="-77" Z="66" S="-82" T="-11" R="80" G="188" B="184" A="255"/>
<Vtx X="21" Y="-80" Z="68" S="-95" T="224" R="188" G="181" B="180" A="255"/>
<Vtx X="21" Y="-77" Z="66" S="-82" T="224" R="176" G="188" B="184" A="255"/>
<Vtx X="21" Y="-80" Z="68" S="-95" T="246" R="131" G="240" B="237" A="255"/>
<Vtx X="21" Y="-76" Z="66" S="-82" T="257" R="130" G="244" B="244" A="255"/>
<Vtx X="21" Y="-73" Z="72" S="-95" T="479" R="131" G="24" B="5" A="255"/>
<Vtx X="21" Y="-73" Z="68" S="-82" T="469" R="130" G="16" B="5" A="255"/>
<Vtx X="21" Y="-73" Z="68" S="-82" T="469" R="130" G="16" B="5" A="255"/>
<Vtx X="21" Y="-64" Z="44" S="69" T="257" R="130" G="240" B="251" A="255"/>
<Vtx X="21" Y="-76" Z="66" S="-82" T="257" R="130" G="244" B="244" A="255"/>
<Vtx X="21" Y="-60" Z="46" S="69" T="469" R="130" G="12" B="12" A="255"/>
<Vtx X="21" Y="-64" Z="43" S="77" T="251" R="131" G="232" B="251" A="255"/>
<Vtx X="21" Y="-59" Z="46" S="77" T="474" R="131" G="16" B="18" A="255"/>
<Vtx X="21" Y="-64" Z="43" S="77" T="224" R="188" G="153" B="227" A="255"/>
<Vtx X="21" Y="-64" Z="44" S="69" T="224" R="176" G="160" B="232" A="255"/>
<Vtx X="24" Y="-64" Z="43" S="77" T="-11" R="68" G="153" B="227" A="255"/>
<Vtx X="24" Y="-64" Z="44" S="69" T="-11" R="80" G="160" B="232" A="255"/>
<Vtx X="24" Y="-64" Z="43" S="77" T="-38" R="125" G="232" B="251" A="255"/>
<Vtx X="24" Y="-64" Z="44" S="69" T="-43" R="126" G="240" B="251" A="255"/>
<Vtx X="24" Y="-59" Z="46" S="77" T="-261" R="125" G="16" B="18" A="255"/>
<Vtx X="24" Y="-57" Z="43" S="99" T="-261" R="122" G="33" B="246" A="255"/>
<Vtx X="24" Y="-57" Z="43" S="99" T="-288" R="70" G="104" B="21" A="255"/>
<Vtx X="24" Y="-59" Z="46" S="77" T="-288" R="68" G="76" B="75" A="255"/>
<Vtx X="21" Y="-57" Z="43" S="99" T="-523" R="186" G="104" B="21" A="255"/>
<Vtx X="21" Y="-59" Z="46" S="77" T="-523" R="188" G="76" B="75" A="255"/>
<Vtx X="24" Y="-60" Z="47" S="69" T="-288" R="80" G="69" B="71" A="255"/>
<Vtx X="21" Y="-60" Z="47" S="69" T="-523" R="176" G="69" B="71" A="255"/>
<Vtx X="24" Y="-73" Z="68" S="-82" T="-288" R="80" G="96" B="23" A="255"/>
<Vtx X="21" Y="-73" Z="68" S="-82" T="-523" R="176" G="96" B="23" A="255"/>
<Vtx X="24" Y="-73" Z="68" S="-82" T="-255" R="126" G="16" B="5" A="255"/>
<Vtx X="24" Y="-60" Z="46" S="69" T="-255" R="126" G="12" B="12" A="255"/>
<Vtx X="24" Y="-76" Z="66" S="-82" T="-43" R="126" G="244" B="244" A="255"/>
<Vtx X="24" Y="-77" Z="66" S="-82" T="-11" R="80" G="188" B="184" A="255"/>
<Vtx X="21" Y="-77" Z="66" S="-82" T="224" R="176" G="188" B="184" A="255"/>
<Vtx X="20" Y="-59" Z="42" S="22" T="112" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-61" Z="41" S="235" T="-11" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-62" Z="42" S="448" T="112" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-61" Z="45" S="235" T="480" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-62" Z="44" S="448" T="358" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-61" Z="45" S="235" T="480" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-59" Z="44" S="22" T="358" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-59" Z="42" S="22" T="112" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-59" Z="42" S="-363" T="-21" R="178" G="87" B="206" A="255"/>
<Vtx X="27" Y="-61" Z="41" S="-533" T="-280" R="190" G="0" B="147" A="255"/>
<Vtx X="20" Y="-61" Z="41" S="-533" T="-21" R="178" G="0" B="155" A="255"/>
<Vtx X="27" Y="-59" Z="42" S="-363" T="-280" R="190" G="94" B="202" A="255"/>
<Vtx X="20" Y="-59" Z="44" S="-192" T="-21" R="178" G="87" B="50" A="255"/>
<Vtx X="27" Y="-59" Z="44" S="-192" T="-280" R="190" G="94" B="54" A="255"/>
<Vtx X="20" Y="-61" Z="45" S="-21" T="-21" R="178" G="0" B="101" A="255"/>
<Vtx X="27" Y="-61" Z="45" S="-21" T="-280" R="190" G="0" B="109" A="255"/>
<Vtx X="20" Y="-62" Z="44" S="149" T="-21" R="178" G="169" B="50" A="255"/>
<Vtx X="27" Y="-62" Z="44" S="149" T="-280" R="190" G="162" B="54" A="255"/>
<Vtx X="20" Y="-62" Z="42" S="320" T="-21" R="178" G="169" B="206" A="255"/>
<Vtx X="27" Y="-62" Z="42" S="320" T="-280" R="190" G="162" B="202" A="255"/>
<Vtx X="20" Y="-61" Z="41" S="491" T="-21" R="178" G="0" B="155" A="255"/>
<Vtx X="27" Y="-61" Z="41" S="491" T="-280" R="190" G="0" B="147" A="255"/>
</Vertex>

View File

@ -0,0 +1,209 @@
<Vertex Version="0">
<Vtx X="27" Y="-61" Z="40" S="1008" T="204" R="241" G="193" B="147" A="255"/>
<Vtx X="33" Y="-61" Z="39" S="1008" T="-16" R="241" G="193" B="147" A="255"/>
<Vtx X="33" Y="-63" Z="41" S="837" T="-16" R="241" G="193" B="147" A="255"/>
<Vtx X="27" Y="-63" Z="41" S="837" T="204" R="241" G="193" B="147" A="255"/>
<Vtx X="27" Y="-63" Z="41" S="837" T="204" R="241" G="130" B="0" A="255"/>
<Vtx X="33" Y="-63" Z="41" S="837" T="-16" R="241" G="130" B="0" A="255"/>
<Vtx X="33" Y="-63" Z="45" S="667" T="-16" R="241" G="130" B="0" A="255"/>
<Vtx X="27" Y="-63" Z="44" S="667" T="204" R="241" G="130" B="0" A="255"/>
<Vtx X="27" Y="-63" Z="44" S="667" T="204" R="241" G="193" B="109" A="255"/>
<Vtx X="33" Y="-63" Z="45" S="667" T="-16" R="241" G="193" B="109" A="255"/>
<Vtx X="33" Y="-61" Z="46" S="496" T="-16" R="241" G="193" B="109" A="255"/>
<Vtx X="27" Y="-61" Z="45" S="496" T="204" R="241" G="193" B="109" A="255"/>
<Vtx X="27" Y="-61" Z="45" S="496" T="204" R="241" G="63" B="109" A="255"/>
<Vtx X="33" Y="-61" Z="46" S="496" T="-16" R="241" G="63" B="109" A="255"/>
<Vtx X="33" Y="-58" Z="45" S="325" T="-16" R="241" G="63" B="109" A="255"/>
<Vtx X="27" Y="-58" Z="44" S="325" T="204" R="241" G="63" B="109" A="255"/>
<Vtx X="33" Y="-63" Z="45" S="453" T="875" R="127" G="0" B="0" A="255"/>
<Vtx X="33" Y="-63" Z="41" S="453" T="629" R="127" G="0" B="0" A="255"/>
<Vtx X="33" Y="-61" Z="39" S="240" T="506" R="127" G="0" B="0" A="255"/>
<Vtx X="33" Y="-58" Z="45" S="27" T="875" R="127" G="0" B="0" A="255"/>
<Vtx X="33" Y="-58" Z="41" S="27" T="629" R="127" G="0" B="0" A="255"/>
<Vtx X="33" Y="-61" Z="46" S="240" T="998" R="127" G="0" B="0" A="255"/>
<Vtx X="27" Y="-58" Z="44" S="325" T="204" R="241" G="126" B="0" A="255"/>
<Vtx X="33" Y="-58" Z="45" S="325" T="-16" R="241" G="126" B="0" A="255"/>
<Vtx X="33" Y="-58" Z="41" S="155" T="-16" R="241" G="126" B="0" A="255"/>
<Vtx X="27" Y="-58" Z="41" S="155" T="204" R="241" G="126" B="0" A="255"/>
<Vtx X="27" Y="-58" Z="41" S="155" T="204" R="241" G="63" B="147" A="255"/>
<Vtx X="33" Y="-58" Z="41" S="155" T="-16" R="241" G="63" B="147" A="255"/>
<Vtx X="33" Y="-61" Z="39" S="-16" T="-16" R="241" G="63" B="147" A="255"/>
<Vtx X="27" Y="-61" Z="40" S="-16" T="204" R="241" G="63" B="147" A="255"/>
<Vtx X="27" Y="-59" Z="42" S="155" T="237" R="160" G="41" B="184" A="255"/>
<Vtx X="27" Y="-58" Z="41" S="155" T="204" R="160" G="41" B="184" A="255"/>
<Vtx X="27" Y="-61" Z="40" S="-16" T="204" R="160" G="41" B="184" A="255"/>
<Vtx X="27" Y="-61" Z="41" S="-16" T="237" R="160" G="41" B="184" A="255"/>
<Vtx X="27" Y="-59" Z="44" S="325" T="237" R="160" G="83" B="0" A="255"/>
<Vtx X="27" Y="-58" Z="44" S="325" T="204" R="160" G="83" B="0" A="255"/>
<Vtx X="27" Y="-58" Z="41" S="155" T="204" R="160" G="83" B="0" A="255"/>
<Vtx X="27" Y="-59" Z="42" S="155" T="237" R="160" G="83" B="0" A="255"/>
<Vtx X="27" Y="-61" Z="45" S="496" T="237" R="160" G="41" B="72" A="255"/>
<Vtx X="27" Y="-61" Z="45" S="496" T="204" R="160" G="41" B="72" A="255"/>
<Vtx X="27" Y="-58" Z="44" S="325" T="204" R="160" G="41" B="72" A="255"/>
<Vtx X="27" Y="-59" Z="44" S="325" T="237" R="160" G="41" B="72" A="255"/>
<Vtx X="27" Y="-62" Z="44" S="667" T="237" R="160" G="215" B="72" A="255"/>
<Vtx X="27" Y="-63" Z="44" S="667" T="204" R="160" G="215" B="72" A="255"/>
<Vtx X="27" Y="-61" Z="45" S="496" T="204" R="160" G="215" B="72" A="255"/>
<Vtx X="27" Y="-61" Z="45" S="496" T="237" R="160" G="215" B="72" A="255"/>
<Vtx X="27" Y="-62" Z="42" S="837" T="237" R="160" G="173" B="0" A="255"/>
<Vtx X="27" Y="-63" Z="41" S="837" T="204" R="160" G="173" B="0" A="255"/>
<Vtx X="27" Y="-63" Z="44" S="667" T="204" R="160" G="173" B="0" A="255"/>
<Vtx X="27" Y="-62" Z="44" S="667" T="237" R="160" G="173" B="0" A="255"/>
<Vtx X="27" Y="-61" Z="41" S="1008" T="237" R="160" G="215" B="184" A="255"/>
<Vtx X="27" Y="-61" Z="40" S="1008" T="204" R="160" G="215" B="184" A="255"/>
<Vtx X="27" Y="-63" Z="41" S="837" T="204" R="160" G="215" B="184" A="255"/>
<Vtx X="27" Y="-62" Z="42" S="837" T="237" R="160" G="215" B="184" A="255"/>
<Vtx X="6" Y="-161" Z="144" S="1008" T="1008" R="0" G="143" B="59" A="255"/>
<Vtx X="-4" Y="-161" Z="143" S="325" T="1008" R="0" G="143" B="59" A="255"/>
<Vtx X="1" Y="-163" Z="139" S="667" T="1008" R="0" G="143" B="59" A="255"/>
<Vtx X="1" Y="-159" Z="148" S="-16" T="1008" R="0" G="143" B="59" A="255"/>
<Vtx X="-2" Y="171" Z="-124" S="325" T="1008" R="0" G="80" B="157" A="255"/>
<Vtx X="2" Y="171" Z="-124" S="1008" T="1008" R="0" G="80" B="157" A="255"/>
<Vtx X="0" Y="170" Z="-125" S="667" T="1008" R="0" G="80" B="157" A="255"/>
<Vtx X="0" Y="173" Z="-123" S="-16" T="1008" R="0" G="80" B="157" A="255"/>
<Vtx X="0" Y="173" Z="-123" S="-16" T="-16" R="255" G="96" B="83" A="255"/>
<Vtx X="2" Y="144" Z="-94" S="84" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="2" Y="171" Z="-124" S="-16" T="240" R="127" G="4" B="1" A="255"/>
<Vtx X="0" Y="146" Z="-92" S="84" T="-16" R="255" G="96" B="83" A="255"/>
<Vtx X="-2" Y="171" Z="-124" S="-16" T="752" R="129" G="1" B="0" A="255"/>
<Vtx X="0" Y="146" Z="-92" S="84" T="1008" R="255" G="96" B="83" A="255"/>
<Vtx X="0" Y="173" Z="-123" S="-16" T="1008" R="255" G="96" B="83" A="255"/>
<Vtx X="-3" Y="144" Z="-94" S="84" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="0" Y="170" Z="-125" S="-16" T="496" R="1" G="161" B="171" A="255"/>
<Vtx X="-3" Y="144" Z="-94" S="84" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="0" Y="143" Z="-95" S="84" T="496" R="1" G="161" B="171" A="255"/>
<Vtx X="2" Y="144" Z="-94" S="84" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="1" Y="-136" Z="135" S="949" T="-16" R="255" G="63" B="110" A="255"/>
<Vtx X="1" Y="-159" Z="148" S="1008" T="-16" R="255" G="63" B="110" A="255"/>
<Vtx X="6" Y="-161" Z="144" S="1008" T="240" R="127" G="2" B="2" A="255"/>
<Vtx X="6" Y="-138" Z="131" S="949" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="1" Y="-163" Z="139" S="1008" T="496" R="1" G="193" B="146" A="255"/>
<Vtx X="1" Y="-141" Z="126" S="949" T="496" R="1" G="193" B="146" A="255"/>
<Vtx X="-4" Y="-161" Z="143" S="1008" T="752" R="129" G="0" B="0" A="255"/>
<Vtx X="-4" Y="-138" Z="131" S="949" T="752" R="129" G="255" B="255" A="255"/>
<Vtx X="1" Y="-159" Z="148" S="1008" T="1008" R="255" G="63" B="110" A="255"/>
<Vtx X="1" Y="-136" Z="135" S="949" T="1008" R="255" G="63" B="110" A="255"/>
<Vtx X="0" Y="138" Z="-83" S="114" T="-16" R="255" G="96" B="83" A="255"/>
<Vtx X="0" Y="118" Z="-59" S="189" T="-16" R="255" G="93" B="87" A="255"/>
<Vtx X="3" Y="116" Z="-61" S="189" T="240" R="127" G="4" B="1" A="255"/>
<Vtx X="3" Y="87" Z="-33" S="289" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="89" Z="-31" S="289" T="-16" R="255" G="89" B="91" A="255"/>
<Vtx X="0" Y="84" Z="-36" S="289" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="0" Y="114" Z="-63" S="189" T="496" R="1" G="165" B="167" A="255"/>
<Vtx X="-4" Y="86" Z="-33" S="289" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="-3" Y="116" Z="-61" S="189" T="752" R="129" G="1" B="0" A="255"/>
<Vtx X="0" Y="89" Z="-31" S="289" T="1008" R="255" G="89" B="91" A="255"/>
<Vtx X="-3" Y="116" Z="-61" S="189" T="752" R="129" G="1" B="0" A="255"/>
<Vtx X="0" Y="89" Z="-31" S="289" T="1008" R="255" G="89" B="91" A="255"/>
<Vtx X="0" Y="118" Z="-59" S="189" T="1008" R="255" G="93" B="87" A="255"/>
<Vtx X="-3" Y="136" Z="-84" S="114" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="0" Y="138" Z="-83" S="114" T="1008" R="255" G="96" B="83" A="255"/>
<Vtx X="0" Y="134" Z="-86" S="114" T="496" R="1" G="161" B="171" A="255"/>
<Vtx X="0" Y="114" Z="-63" S="189" T="496" R="1" G="165" B="167" A="255"/>
<Vtx X="2" Y="136" Z="-84" S="114" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="3" Y="116" Z="-61" S="189" T="240" R="127" G="4" B="1" A="255"/>
<Vtx X="0" Y="138" Z="-83" S="114" T="-16" R="255" G="96" B="83" A="255"/>
<Vtx X="-4" Y="78" Z="-25" S="319" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="58" Z="0" S="394" T="1008" R="255" G="85" B="95" A="255"/>
<Vtx X="0" Y="80" Z="-22" S="319" T="1008" R="255" G="89" B="91" A="255"/>
<Vtx X="-4" Y="55" Z="-3" S="394" T="752" R="129" G="1" B="0" A="255"/>
<Vtx X="0" Y="75" Z="-27" S="319" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="0" Y="53" Z="-6" S="394" T="496" R="1" G="173" B="160" A="255"/>
<Vtx X="3" Y="78" Z="-25" S="319" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="4" Y="55" Z="-3" S="394" T="240" R="127" G="3" B="2" A="255"/>
<Vtx X="0" Y="80" Z="-22" S="319" T="-16" R="255" G="89" B="91" A="255"/>
<Vtx X="0" Y="58" Z="0" S="394" T="-16" R="255" G="85" B="95" A="255"/>
<Vtx X="4" Y="23" Z="23" S="494" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="26" Z="26" S="494" T="-16" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="20" Z="20" S="494" T="496" R="1" G="177" B="156" A="255"/>
<Vtx X="4" Y="23" Z="23" S="494" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="-4" Y="23" Z="23" S="494" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="26" Z="26" S="494" T="1008" R="255" G="80" B="98" A="255"/>
<Vtx X="-4" Y="-11" Z="50" S="598" T="752" R="129" G="0" B="0" A="255"/>
<Vtx X="0" Y="-44" Z="79" S="701" T="1008" R="255" G="72" B="105" A="255"/>
<Vtx X="0" Y="-8" Z="54" S="598" T="1008" R="255" G="76" B="102" A="255"/>
<Vtx X="-4" Y="-47" Z="75" S="701" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="-14" Z="47" S="598" T="496" R="1" G="181" B="153" A="255"/>
<Vtx X="0" Y="11" Z="27" S="523" T="496" R="1" G="177" B="156" A="255"/>
<Vtx X="0" Y="11" Z="27" S="523" T="496" R="1" G="177" B="156" A="255"/>
<Vtx X="-4" Y="-11" Z="50" S="598" T="752" R="129" G="0" B="0" A="255"/>
<Vtx X="-4" Y="13" Z="31" S="523" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="-8" Z="54" S="598" T="1008" R="255" G="76" B="102" A="255"/>
<Vtx X="0" Y="16" Z="34" S="523" T="1008" R="255" G="80" B="98" A="255"/>
<Vtx X="4" Y="13" Z="31" S="523" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="-14" Z="47" S="598" T="496" R="1" G="181" B="153" A="255"/>
<Vtx X="5" Y="-11" Z="50" S="598" T="240" R="127" G="3" B="2" A="255"/>
<Vtx X="0" Y="16" Z="34" S="523" T="-16" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="-8" Z="54" S="598" T="-16" R="255" G="76" B="102" A="255"/>
<Vtx X="5" Y="-47" Z="75" S="701" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="-44" Z="79" S="701" T="-16" R="255" G="72" B="105" A="255"/>
<Vtx X="0" Y="-50" Z="71" S="701" T="496" R="1" G="185" B="150" A="255"/>
<Vtx X="-4" Y="-47" Z="75" S="701" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="-4" Y="21" Z="24" S="498" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="21" Z="30" S="508" T="1008" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="24" Z="27" S="498" T="1008" R="255" G="80" B="98" A="255"/>
<Vtx X="-4" Y="18" Z="27" S="508" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="19" Z="21" S="498" T="496" R="1" G="177" B="156" A="255"/>
<Vtx X="0" Y="16" Z="23" S="508" T="496" R="1" G="177" B="156" A="255"/>
<Vtx X="4" Y="21" Z="24" S="498" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="4" Y="18" Z="27" S="508" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="24" Z="27" S="498" T="-16" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="21" Z="30" S="508" T="-16" R="255" G="80" B="98" A="255"/>
<Vtx X="4" Y="21" Z="24" S="498" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="87" Z="-29" S="294" T="-16" R="255" G="89" B="91" A="255"/>
<Vtx X="0" Y="84" Z="-26" S="304" T="-16" R="255" G="89" B="91" A="255"/>
<Vtx X="3" Y="82" Z="-29" S="304" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="3" Y="85" Z="-32" S="294" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="80" Z="-31" S="304" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="0" Y="83" Z="-34" S="294" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="-4" Y="82" Z="-29" S="304" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="83" Z="-34" S="294" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="-4" Y="82" Z="-29" S="304" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="-4" Y="85" Z="-32" S="294" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="84" Z="-26" S="304" T="1008" R="255" G="89" B="91" A="255"/>
<Vtx X="0" Y="87" Z="-29" S="294" T="1008" R="255" G="89" B="91" A="255"/>
<Vtx X="0" Y="141" Z="-94" S="89" T="496" R="1" G="161" B="171" A="255"/>
<Vtx X="-3" Y="140" Z="-89" S="99" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="-3" Y="143" Z="-92" S="89" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="0" Y="138" Z="-91" S="99" T="496" R="1" G="161" B="171" A="255"/>
<Vtx X="2" Y="143" Z="-92" S="89" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="2" Y="140" Z="-89" S="99" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="-3" Y="143" Z="-92" S="89" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="0" Y="142" Z="-87" S="99" T="1008" R="255" G="96" B="83" A="255"/>
<Vtx X="0" Y="145" Z="-90" S="89" T="1008" R="255" G="96" B="83" A="255"/>
<Vtx X="0" Y="145" Z="-90" S="89" T="-16" R="255" G="96" B="83" A="255"/>
<Vtx X="0" Y="142" Z="-87" S="99" T="-16" R="255" G="96" B="83" A="255"/>
<Vtx X="2" Y="143" Z="-92" S="89" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="-4" Y="17" Z="28" S="513" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="17" Z="33" S="521" T="1008" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="19" Z="31" S="513" T="1008" R="255" G="80" B="98" A="255"/>
<Vtx X="-4" Y="14" Z="30" S="521" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="14" Z="25" S="513" T="496" R="1" G="177" B="156" A="255"/>
<Vtx X="0" Y="11" Z="27" S="521" T="496" R="1" G="177" B="156" A="255"/>
<Vtx X="4" Y="17" Z="28" S="513" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="4" Y="14" Z="30" S="521" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="19" Z="31" S="513" T="-16" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="17" Z="33" S="521" T="-16" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="83" Z="-25" S="308" T="-16" R="255" G="89" B="91" A="255"/>
<Vtx X="0" Y="81" Z="-23" S="317" T="-16" R="255" G="89" B="91" A="255"/>
<Vtx X="3" Y="78" Z="-25" S="317" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="3" Y="81" Z="-28" S="308" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="76" Z="-28" S="317" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="3" Y="81" Z="-28" S="308" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="76" Z="-28" S="317" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="0" Y="78" Z="-30" S="308" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="-4" Y="78" Z="-25" S="317" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="-4" Y="81" Z="-28" S="308" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="81" Z="-23" S="317" T="1008" R="255" G="89" B="91" A="255"/>
<Vtx X="0" Y="83" Z="-25" S="308" T="1008" R="255" G="89" B="91" A="255"/>
<Vtx X="-3" Y="139" Z="-88" S="103" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="0" Y="139" Z="-83" S="112" T="1008" R="255" G="96" B="83" A="255"/>
<Vtx X="0" Y="141" Z="-86" S="103" T="1008" R="255" G="96" B="83" A="255"/>
<Vtx X="-3" Y="137" Z="-85" S="112" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="0" Y="137" Z="-89" S="103" T="496" R="1" G="161" B="171" A="255"/>
<Vtx X="0" Y="135" Z="-87" S="112" T="496" R="1" G="161" B="171" A="255"/>
<Vtx X="2" Y="139" Z="-88" S="103" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="2" Y="137" Z="-85" S="112" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="141" Z="-86" S="103" T="-16" R="255" G="96" B="83" A="255"/>
<Vtx X="0" Y="139" Z="-83" S="112" T="-16" R="255" G="96" B="83" A="255"/>
</Vertex>

View File

@ -0,0 +1,115 @@
<Vertex Version="0">
<Vtx X="-4" Y="-47" Z="75" S="701" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="-81" Z="103" S="803" T="1008" R="255" G="67" B="108" A="255"/>
<Vtx X="0" Y="-44" Z="79" S="701" T="1008" R="255" G="72" B="105" A="255"/>
<Vtx X="-5" Y="-83" Z="99" S="803" T="752" R="129" G="0" B="0" A="255"/>
<Vtx X="0" Y="-50" Z="71" S="701" T="496" R="1" G="185" B="150" A="255"/>
<Vtx X="0" Y="-86" Z="95" S="803" T="496" R="1" G="189" B="148" A="255"/>
<Vtx X="5" Y="-47" Z="75" S="701" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="5" Y="-83" Z="99" S="803" T="240" R="127" G="2" B="2" A="255"/>
<Vtx X="0" Y="-44" Z="79" S="701" T="-16" R="255" G="72" B="105" A="255"/>
<Vtx X="0" Y="-81" Z="103" S="803" T="-16" R="255" G="67" B="108" A="255"/>
<Vtx X="6" Y="-138" Z="131" S="949" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="1" Y="-136" Z="135" S="949" T="-16" R="255" G="63" B="110" A="255"/>
<Vtx X="1" Y="-141" Z="126" S="949" T="496" R="1" G="193" B="146" A="255"/>
<Vtx X="-4" Y="-138" Z="131" S="949" T="752" R="129" G="255" B="255" A="255"/>
<Vtx X="1" Y="-136" Z="135" S="949" T="1008" R="255" G="63" B="110" A="255"/>
<Vtx X="4" Y="21" Z="24" S="498" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="20" Z="20" S="494" T="496" R="1" G="177" B="156" A="255"/>
<Vtx X="4" Y="23" Z="23" S="494" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="19" Z="21" S="498" T="496" R="1" G="177" B="156" A="255"/>
<Vtx X="-4" Y="23" Z="23" S="494" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="-4" Y="21" Z="24" S="498" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="26" Z="26" S="494" T="1008" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="24" Z="27" S="498" T="1008" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="24" Z="27" S="498" T="-16" R="255" G="80" B="98" A="255"/>
<Vtx X="4" Y="21" Z="24" S="498" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="4" Y="23" Z="23" S="494" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="26" Z="26" S="494" T="-16" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="87" Z="-29" S="294" T="-16" R="255" G="89" B="91" A="255"/>
<Vtx X="3" Y="87" Z="-33" S="289" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="89" Z="-31" S="289" T="-16" R="255" G="89" B="91" A="255"/>
<Vtx X="3" Y="85" Z="-32" S="294" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="84" Z="-36" S="289" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="3" Y="85" Z="-32" S="294" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="83" Z="-34" S="294" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="0" Y="84" Z="-36" S="289" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="-4" Y="86" Z="-33" S="289" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="-4" Y="85" Z="-32" S="294" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="89" Z="-31" S="289" T="1008" R="255" G="89" B="91" A="255"/>
<Vtx X="0" Y="87" Z="-29" S="294" T="1008" R="255" G="89" B="91" A="255"/>
<Vtx X="2" Y="143" Z="-92" S="89" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="143" Z="-95" S="84" T="496" R="1" G="161" B="171" A="255"/>
<Vtx X="2" Y="144" Z="-94" S="84" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="141" Z="-94" S="89" T="496" R="1" G="161" B="171" A="255"/>
<Vtx X="-3" Y="144" Z="-94" S="84" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="-3" Y="143" Z="-92" S="89" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="0" Y="145" Z="-90" S="89" T="-16" R="255" G="96" B="83" A="255"/>
<Vtx X="2" Y="143" Z="-92" S="89" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="2" Y="144" Z="-94" S="84" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="146" Z="-92" S="84" T="-16" R="255" G="96" B="83" A="255"/>
<Vtx X="-3" Y="143" Z="-92" S="89" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="0" Y="145" Z="-90" S="89" T="1008" R="255" G="96" B="83" A="255"/>
<Vtx X="0" Y="146" Z="-92" S="84" T="1008" R="255" G="96" B="83" A="255"/>
<Vtx X="-3" Y="144" Z="-94" S="84" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="-4" Y="18" Z="27" S="508" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="19" Z="31" S="513" T="1008" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="21" Z="30" S="508" T="1008" R="255" G="80" B="98" A="255"/>
<Vtx X="-4" Y="17" Z="28" S="513" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="16" Z="23" S="508" T="496" R="1" G="177" B="156" A="255"/>
<Vtx X="0" Y="14" Z="25" S="513" T="496" R="1" G="177" B="156" A="255"/>
<Vtx X="4" Y="18" Z="27" S="508" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="4" Y="17" Z="28" S="513" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="21" Z="30" S="508" T="-16" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="19" Z="31" S="513" T="-16" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="84" Z="-26" S="304" T="-16" R="255" G="89" B="91" A="255"/>
<Vtx X="0" Y="83" Z="-25" S="308" T="-16" R="255" G="89" B="91" A="255"/>
<Vtx X="3" Y="81" Z="-28" S="308" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="3" Y="82" Z="-29" S="304" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="78" Z="-30" S="308" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="0" Y="80" Z="-31" S="304" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="-4" Y="81" Z="-28" S="308" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="-4" Y="82" Z="-29" S="304" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="83" Z="-25" S="308" T="1008" R="255" G="89" B="91" A="255"/>
<Vtx X="0" Y="84" Z="-26" S="304" T="1008" R="255" G="89" B="91" A="255"/>
<Vtx X="-3" Y="140" Z="-89" S="99" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="0" Y="141" Z="-86" S="103" T="1008" R="255" G="96" B="83" A="255"/>
<Vtx X="0" Y="142" Z="-87" S="99" T="1008" R="255" G="96" B="83" A="255"/>
<Vtx X="-3" Y="139" Z="-88" S="103" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="0" Y="138" Z="-91" S="99" T="496" R="1" G="161" B="171" A="255"/>
<Vtx X="0" Y="137" Z="-89" S="103" T="496" R="1" G="161" B="171" A="255"/>
<Vtx X="2" Y="140" Z="-89" S="99" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="2" Y="139" Z="-88" S="103" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="142" Z="-87" S="99" T="-16" R="255" G="96" B="83" A="255"/>
<Vtx X="0" Y="141" Z="-86" S="103" T="-16" R="255" G="96" B="83" A="255"/>
<Vtx X="-4" Y="14" Z="30" S="521" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="16" Z="34" S="523" T="1008" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="17" Z="33" S="521" T="1008" R="255" G="80" B="98" A="255"/>
<Vtx X="-4" Y="13" Z="31" S="523" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="11" Z="27" S="521" T="496" R="1" G="177" B="156" A="255"/>
<Vtx X="0" Y="11" Z="27" S="523" T="496" R="1" G="177" B="156" A="255"/>
<Vtx X="4" Y="14" Z="30" S="521" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="4" Y="13" Z="31" S="523" T="240" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="17" Z="33" S="521" T="-16" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="16" Z="34" S="523" T="-16" R="255" G="80" B="98" A="255"/>
<Vtx X="0" Y="81" Z="-23" S="317" T="-16" R="255" G="89" B="91" A="255"/>
<Vtx X="0" Y="80" Z="-22" S="319" T="-16" R="255" G="89" B="91" A="255"/>
<Vtx X="3" Y="78" Z="-25" S="319" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="3" Y="78" Z="-25" S="317" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="75" Z="-27" S="319" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="0" Y="76" Z="-28" S="317" T="496" R="1" G="169" B="163" A="255"/>
<Vtx X="-4" Y="78" Z="-25" S="319" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="-4" Y="78" Z="-25" S="317" T="752" R="129" G="0" B="255" A="255"/>
<Vtx X="0" Y="80" Z="-22" S="319" T="1008" R="255" G="89" B="91" A="255"/>
<Vtx X="0" Y="81" Z="-23" S="317" T="1008" R="255" G="89" B="91" A="255"/>
<Vtx X="-3" Y="137" Z="-85" S="112" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="0" Y="138" Z="-83" S="114" T="1008" R="255" G="96" B="83" A="255"/>
<Vtx X="0" Y="139" Z="-83" S="112" T="1008" R="255" G="96" B="83" A="255"/>
<Vtx X="-3" Y="136" Z="-84" S="114" T="752" R="129" G="0" B="254" A="255"/>
<Vtx X="0" Y="135" Z="-87" S="112" T="496" R="1" G="161" B="171" A="255"/>
<Vtx X="0" Y="134" Z="-86" S="114" T="496" R="1" G="161" B="171" A="255"/>
<Vtx X="2" Y="137" Z="-85" S="112" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="2" Y="136" Z="-84" S="114" T="240" R="127" G="2" B="0" A="255"/>
<Vtx X="0" Y="139" Z="-83" S="112" T="-16" R="255" G="96" B="83" A="255"/>
<Vtx X="0" Y="138" Z="-83" S="114" T="-16" R="255" G="96" B="83" A="255"/>
</Vertex>

View File

@ -0,0 +1,176 @@
<Vertex Version="0">
<Vtx X="0" Y="-135" Z="-39" S="1008" T="1008" R="0" G="2" B="127" A="255"/>
<Vtx X="0" Y="-134" Z="-39" S="325" T="1008" R="0" G="2" B="127" A="255"/>
<Vtx X="-1" Y="-134" Z="-39" S="667" T="1008" R="0" G="2" B="127" A="255"/>
<Vtx X="0" Y="-134" Z="-39" S="-16" T="1008" R="0" G="2" B="127" A="255"/>
<Vtx X="0" Y="170" Z="-123" S="325" T="1008" R="0" G="97" B="82" A="255"/>
<Vtx X="0" Y="171" Z="-124" S="1008" T="1008" R="0" G="97" B="82" A="255"/>
<Vtx X="-1" Y="171" Z="-123" S="667" T="1008" R="0" G="97" B="82" A="255"/>
<Vtx X="0" Y="171" Z="-123" S="-16" T="1008" R="0" G="97" B="82" A="255"/>
<Vtx X="0" Y="170" Z="-123" S="-16" T="752" R="0" G="192" B="110" A="255"/>
<Vtx X="0" Y="122" Z="-152" S="35" T="1008" R="126" G="3" B="240" A="255"/>
<Vtx X="0" Y="171" Z="-123" S="-16" T="1008" R="127" G="5" B="247" A="255"/>
<Vtx X="0" Y="121" Z="-151" S="35" T="752" R="0" G="229" B="124" A="255"/>
<Vtx X="-1" Y="171" Z="-123" S="-16" T="496" R="129" G="5" B="247" A="255"/>
<Vtx X="-1" Y="122" Z="-152" S="35" T="496" R="130" G="3" B="240" A="255"/>
<Vtx X="0" Y="171" Z="-124" S="-16" T="240" R="0" G="64" B="146" A="255"/>
<Vtx X="0" Y="122" Z="-152" S="35" T="240" R="0" G="27" B="132" A="255"/>
<Vtx X="0" Y="171" Z="-123" S="-16" T="-16" R="127" G="5" B="247" A="255"/>
<Vtx X="0" Y="122" Z="-152" S="35" T="-16" R="126" G="3" B="240" A="255"/>
<Vtx X="0" Y="88" Z="-149" S="86" T="240" R="0" G="206" B="139" A="255"/>
<Vtx X="0" Y="88" Z="-149" S="86" T="-16" R="126" G="250" B="240" A="255"/>
<Vtx X="0" Y="65" Z="-129" S="138" T="240" R="0" G="159" B="174" A="255"/>
<Vtx X="0" Y="65" Z="-128" S="138" T="-16" R="127" G="250" B="251" A="255"/>
<Vtx X="0" Y="48" Z="-102" S="189" T="240" R="0" G="145" B="194" A="255"/>
<Vtx X="0" Y="49" Z="-102" S="189" T="-16" R="127" G="254" B="255" A="255"/>
<Vtx X="0" Y="35" Z="-76" S="240" T="240" R="0" G="142" B="200" A="255"/>
<Vtx X="0" Y="36" Z="-76" S="240" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="0" Y="24" Z="-54" S="291" T="240" R="0" G="143" B="197" A="255"/>
<Vtx X="0" Y="25" Z="-54" S="291" T="-16" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="15" Z="-38" S="342" T="240" R="0" G="152" B="183" A="255"/>
<Vtx X="0" Y="16" Z="-37" S="342" T="-16" R="127" G="4" B="3" A="255"/>
<Vtx X="0" Y="7" Z="-28" S="394" T="240" R="0" G="185" B="151" A="255"/>
<Vtx X="0" Y="7" Z="-28" S="394" T="-16" R="126" G="8" B="12" A="255"/>
<Vtx X="0" Y="7" Z="-28" S="394" T="-16" R="126" G="8" B="12" A="255"/>
<Vtx X="0" Y="-1" Z="-25" S="445" T="240" R="0" G="8" B="129" A="255"/>
<Vtx X="0" Y="7" Z="-28" S="394" T="240" R="0" G="185" B="151" A="255"/>
<Vtx X="0" Y="-1" Z="-25" S="445" T="-16" R="125" G="255" B="21" A="255"/>
<Vtx X="0" Y="-9" Z="-29" S="496" T="240" R="0" G="79" B="157" A="255"/>
<Vtx X="0" Y="-9" Z="-29" S="496" T="-16" R="126" G="249" B="9" A="255"/>
<Vtx X="0" Y="-17" Z="-39" S="547" T="240" R="0" G="105" B="184" A="255"/>
<Vtx X="0" Y="-17" Z="-39" S="547" T="-16" R="127" G="253" B="2" A="255"/>
<Vtx X="0" Y="-26" Z="-55" S="598" T="240" R="0" G="112" B="195" A="255"/>
<Vtx X="0" Y="-26" Z="-55" S="598" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="0" Y="-35" Z="-73" S="650" T="240" R="0" G="111" B="194" A="255"/>
<Vtx X="0" Y="-36" Z="-73" S="650" T="-16" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="-46" Z="-92" S="701" T="240" R="0" G="103" B="182" A="255"/>
<Vtx X="0" Y="-47" Z="-92" S="701" T="-16" R="127" G="3" B="254" A="255"/>
<Vtx X="0" Y="-59" Z="-107" S="752" T="240" R="0" G="78" B="156" A="255"/>
<Vtx X="0" Y="-60" Z="-107" S="752" T="-16" R="126" G="7" B="247" A="255"/>
<Vtx X="0" Y="-75" Z="-115" S="803" T="240" R="0" G="19" B="130" A="255"/>
<Vtx X="0" Y="-76" Z="-115" S="803" T="-16" R="126" G="2" B="239" A="255"/>
<Vtx X="0" Y="-94" Z="-112" S="854" T="240" R="0" G="205" B="140" A="255"/>
<Vtx X="0" Y="-94" Z="-112" S="854" T="-16" R="126" G="251" B="243" A="255"/>
<Vtx X="0" Y="-113" Z="-97" S="906" T="240" R="0" G="161" B="172" A="255"/>
<Vtx X="0" Y="-113" Z="-97" S="906" T="-16" R="127" G="249" B="250" A="255"/>
<Vtx X="0" Y="-129" Z="-71" S="957" T="240" R="0" G="138" B="210" A="255"/>
<Vtx X="0" Y="-128" Z="-71" S="957" T="-16" R="127" G="247" B="253" A="255"/>
<Vtx X="0" Y="-135" Z="-39" S="1008" T="240" R="0" G="131" B="232" A="255"/>
<Vtx X="0" Y="-134" Z="-39" S="1008" T="-16" R="126" G="244" B="254" A="255"/>
<Vtx X="-1" Y="-134" Z="-39" S="1008" T="496" R="130" G="244" B="254" A="255"/>
<Vtx X="-1" Y="-128" Z="-71" S="957" T="496" R="129" G="247" B="253" A="255"/>
<Vtx X="0" Y="-134" Z="-39" S="1008" T="752" R="0" G="125" B="24" A="255"/>
<Vtx X="0" Y="-128" Z="-71" S="957" T="752" R="0" G="118" B="46" A="255"/>
<Vtx X="0" Y="-134" Z="-39" S="1008" T="1008" R="126" G="244" B="254" A="255"/>
<Vtx X="0" Y="-128" Z="-71" S="957" T="1008" R="127" G="247" B="253" A="255"/>
<Vtx X="0" Y="-112" Z="-96" S="906" T="752" R="0" G="95" B="84" A="255"/>
<Vtx X="0" Y="-128" Z="-71" S="957" T="752" R="0" G="118" B="46" A="255"/>
<Vtx X="0" Y="-128" Z="-71" S="957" T="1008" R="127" G="247" B="253" A="255"/>
<Vtx X="0" Y="-113" Z="-97" S="906" T="1008" R="127" G="249" B="250" A="255"/>
<Vtx X="0" Y="-94" Z="-111" S="854" T="752" R="0" G="51" B="116" A="255"/>
<Vtx X="0" Y="-94" Z="-112" S="854" T="1008" R="126" G="251" B="243" A="255"/>
<Vtx X="0" Y="-76" Z="-114" S="803" T="752" R="0" G="237" B="126" A="255"/>
<Vtx X="0" Y="-76" Z="-115" S="803" T="1008" R="126" G="2" B="239" A="255"/>
<Vtx X="0" Y="-60" Z="-106" S="752" T="752" R="0" G="178" B="100" A="255"/>
<Vtx X="0" Y="-60" Z="-107" S="752" T="1008" R="126" G="7" B="247" A="255"/>
<Vtx X="0" Y="-47" Z="-91" S="701" T="752" R="0" G="153" B="74" A="255"/>
<Vtx X="0" Y="-47" Z="-92" S="701" T="1008" R="127" G="3" B="254" A="255"/>
<Vtx X="0" Y="-36" Z="-73" S="650" T="752" R="0" G="145" B="62" A="255"/>
<Vtx X="0" Y="-36" Z="-73" S="650" T="1008" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="-27" Z="-54" S="598" T="752" R="0" G="144" B="61" A="255"/>
<Vtx X="0" Y="-26" Z="-55" S="598" T="1008" R="127" G="0" B="0" A="255"/>
<Vtx X="0" Y="-18" Z="-39" S="547" T="752" R="0" G="151" B="72" A="255"/>
<Vtx X="0" Y="-17" Z="-39" S="547" T="1008" R="127" G="253" B="2" A="255"/>
<Vtx X="0" Y="-9" Z="-29" S="496" T="752" R="0" G="177" B="100" A="255"/>
<Vtx X="0" Y="-9" Z="-29" S="496" T="1008" R="126" G="249" B="9" A="255"/>
<Vtx X="0" Y="-1" Z="-24" S="445" T="752" R="0" G="248" B="127" A="255"/>
<Vtx X="0" Y="-1" Z="-25" S="445" T="1008" R="125" G="255" B="21" A="255"/>
<Vtx X="0" Y="8" Z="-27" S="394" T="752" R="0" G="71" B="106" A="255"/>
<Vtx X="0" Y="7" Z="-28" S="394" T="1008" R="126" G="8" B="12" A="255"/>
<Vtx X="0" Y="16" Z="-37" S="342" T="752" R="0" G="104" B="73" A="255"/>
<Vtx X="0" Y="16" Z="-37" S="342" T="1008" R="127" G="4" B="3" A="255"/>
<Vtx X="0" Y="25" Z="-53" S="291" T="752" R="0" G="113" B="59" A="255"/>
<Vtx X="0" Y="25" Z="-54" S="291" T="1008" R="127" G="1" B="0" A="255"/>
<Vtx X="0" Y="36" Z="-75" S="240" T="752" R="0" G="114" B="56" A="255"/>
<Vtx X="0" Y="36" Z="-76" S="240" T="1008" R="127" G="0" B="0" A="255"/>
<Vtx X="0" Y="49" Z="-101" S="189" T="752" R="0" G="111" B="62" A="255"/>
<Vtx X="0" Y="49" Z="-102" S="189" T="1008" R="127" G="254" B="255" A="255"/>
<Vtx X="0" Y="66" Z="-128" S="138" T="752" R="0" G="97" B="82" A="255"/>
<Vtx X="0" Y="49" Z="-101" S="189" T="752" R="0" G="111" B="62" A="255"/>
<Vtx X="0" Y="49" Z="-102" S="189" T="1008" R="127" G="254" B="255" A="255"/>
<Vtx X="0" Y="65" Z="-128" S="138" T="1008" R="127" G="250" B="251" A="255"/>
<Vtx X="0" Y="88" Z="-148" S="86" T="752" R="0" G="50" B="117" A="255"/>
<Vtx X="0" Y="88" Z="-149" S="86" T="1008" R="126" G="250" B="240" A="255"/>
<Vtx X="0" Y="121" Z="-151" S="35" T="752" R="0" G="229" B="124" A="255"/>
<Vtx X="0" Y="122" Z="-152" S="35" T="1008" R="126" G="3" B="240" A="255"/>
<Vtx X="-1" Y="122" Z="-152" S="35" T="496" R="130" G="3" B="240" A="255"/>
<Vtx X="-1" Y="88" Z="-149" S="86" T="496" R="130" G="250" B="240" A="255"/>
<Vtx X="0" Y="122" Z="-152" S="35" T="240" R="0" G="27" B="132" A="255"/>
<Vtx X="0" Y="88" Z="-149" S="86" T="240" R="0" G="206" B="139" A="255"/>
<Vtx X="-1" Y="65" Z="-128" S="138" T="496" R="129" G="250" B="251" A="255"/>
<Vtx X="0" Y="65" Z="-129" S="138" T="240" R="0" G="159" B="174" A="255"/>
<Vtx X="-1" Y="49" Z="-102" S="189" T="496" R="129" G="254" B="255" A="255"/>
<Vtx X="0" Y="48" Z="-102" S="189" T="240" R="0" G="145" B="194" A="255"/>
<Vtx X="-1" Y="36" Z="-76" S="240" T="496" R="129" G="0" B="0" A="255"/>
<Vtx X="0" Y="35" Z="-76" S="240" T="240" R="0" G="142" B="200" A="255"/>
<Vtx X="-1" Y="25" Z="-54" S="291" T="496" R="129" G="1" B="0" A="255"/>
<Vtx X="0" Y="24" Z="-54" S="291" T="240" R="0" G="143" B="197" A="255"/>
<Vtx X="-1" Y="16" Z="-37" S="342" T="496" R="129" G="4" B="3" A="255"/>
<Vtx X="0" Y="15" Z="-38" S="342" T="240" R="0" G="152" B="183" A="255"/>
<Vtx X="-1" Y="7" Z="-28" S="394" T="496" R="130" G="8" B="12" A="255"/>
<Vtx X="0" Y="7" Z="-28" S="394" T="240" R="0" G="185" B="151" A="255"/>
<Vtx X="-1" Y="-1" Z="-25" S="445" T="496" R="131" G="255" B="21" A="255"/>
<Vtx X="0" Y="-1" Z="-25" S="445" T="240" R="0" G="8" B="129" A="255"/>
<Vtx X="-1" Y="-9" Z="-29" S="496" T="496" R="130" G="249" B="9" A="255"/>
<Vtx X="0" Y="-9" Z="-29" S="496" T="240" R="0" G="79" B="157" A="255"/>
<Vtx X="-1" Y="-17" Z="-39" S="547" T="496" R="129" G="253" B="2" A="255"/>
<Vtx X="0" Y="-17" Z="-39" S="547" T="240" R="0" G="105" B="184" A="255"/>
<Vtx X="-1" Y="-26" Z="-55" S="598" T="496" R="129" G="0" B="0" A="255"/>
<Vtx X="0" Y="-26" Z="-55" S="598" T="240" R="0" G="112" B="195" A="255"/>
<Vtx X="0" Y="-26" Z="-55" S="598" T="240" R="0" G="112" B="195" A="255"/>
<Vtx X="-1" Y="-36" Z="-73" S="650" T="496" R="129" G="1" B="0" A="255"/>
<Vtx X="-1" Y="-26" Z="-55" S="598" T="496" R="129" G="0" B="0" A="255"/>
<Vtx X="0" Y="-35" Z="-73" S="650" T="240" R="0" G="111" B="194" A="255"/>
<Vtx X="-1" Y="-47" Z="-92" S="701" T="496" R="129" G="3" B="254" A="255"/>
<Vtx X="0" Y="-46" Z="-92" S="701" T="240" R="0" G="103" B="182" A="255"/>
<Vtx X="-1" Y="-60" Z="-107" S="752" T="496" R="130" G="7" B="247" A="255"/>
<Vtx X="0" Y="-59" Z="-107" S="752" T="240" R="0" G="78" B="156" A="255"/>
<Vtx X="-1" Y="-76" Z="-115" S="803" T="496" R="130" G="2" B="239" A="255"/>
<Vtx X="0" Y="-75" Z="-115" S="803" T="240" R="0" G="19" B="130" A="255"/>
<Vtx X="-1" Y="-94" Z="-112" S="854" T="496" R="130" G="251" B="243" A="255"/>
<Vtx X="0" Y="-94" Z="-112" S="854" T="240" R="0" G="205" B="140" A="255"/>
<Vtx X="-1" Y="-113" Z="-97" S="906" T="496" R="129" G="249" B="250" A="255"/>
<Vtx X="0" Y="-113" Z="-97" S="906" T="240" R="0" G="161" B="172" A="255"/>
<Vtx X="-1" Y="-128" Z="-71" S="957" T="496" R="129" G="247" B="253" A="255"/>
<Vtx X="0" Y="-129" Z="-71" S="957" T="240" R="0" G="138" B="210" A="255"/>
<Vtx X="0" Y="-128" Z="-71" S="957" T="752" R="0" G="118" B="46" A="255"/>
<Vtx X="0" Y="-112" Z="-96" S="906" T="752" R="0" G="95" B="84" A="255"/>
<Vtx X="0" Y="-94" Z="-111" S="854" T="752" R="0" G="51" B="116" A="255"/>
<Vtx X="0" Y="-76" Z="-114" S="803" T="752" R="0" G="237" B="126" A="255"/>
<Vtx X="0" Y="-60" Z="-106" S="752" T="752" R="0" G="178" B="100" A="255"/>
<Vtx X="0" Y="-47" Z="-91" S="701" T="752" R="0" G="153" B="74" A="255"/>
<Vtx X="0" Y="-36" Z="-73" S="650" T="752" R="0" G="145" B="62" A="255"/>
<Vtx X="0" Y="-27" Z="-54" S="598" T="752" R="0" G="144" B="61" A="255"/>
<Vtx X="-1" Y="-17" Z="-39" S="547" T="496" R="129" G="253" B="2" A="255"/>
<Vtx X="0" Y="-18" Z="-39" S="547" T="752" R="0" G="151" B="72" A="255"/>
<Vtx X="-1" Y="-9" Z="-29" S="496" T="496" R="130" G="249" B="9" A="255"/>
<Vtx X="0" Y="-9" Z="-29" S="496" T="752" R="0" G="177" B="100" A="255"/>
<Vtx X="-1" Y="-1" Z="-25" S="445" T="496" R="131" G="255" B="21" A="255"/>
<Vtx X="0" Y="-1" Z="-24" S="445" T="752" R="0" G="248" B="127" A="255"/>
<Vtx X="-1" Y="7" Z="-28" S="394" T="496" R="130" G="8" B="12" A="255"/>
<Vtx X="0" Y="8" Z="-27" S="394" T="752" R="0" G="71" B="106" A="255"/>
<Vtx X="-1" Y="16" Z="-37" S="342" T="496" R="129" G="4" B="3" A="255"/>
<Vtx X="-1" Y="7" Z="-28" S="394" T="496" R="130" G="8" B="12" A="255"/>
<Vtx X="0" Y="8" Z="-27" S="394" T="752" R="0" G="71" B="106" A="255"/>
<Vtx X="0" Y="16" Z="-37" S="342" T="752" R="0" G="104" B="73" A="255"/>
<Vtx X="-1" Y="25" Z="-54" S="291" T="496" R="129" G="1" B="0" A="255"/>
<Vtx X="0" Y="25" Z="-53" S="291" T="752" R="0" G="113" B="59" A="255"/>
<Vtx X="-1" Y="36" Z="-76" S="240" T="496" R="129" G="0" B="0" A="255"/>
<Vtx X="0" Y="36" Z="-75" S="240" T="752" R="0" G="114" B="56" A="255"/>
<Vtx X="-1" Y="49" Z="-102" S="189" T="496" R="129" G="254" B="255" A="255"/>
<Vtx X="0" Y="49" Z="-101" S="189" T="752" R="0" G="111" B="62" A="255"/>
<Vtx X="-1" Y="65" Z="-128" S="138" T="496" R="129" G="250" B="251" A="255"/>
<Vtx X="0" Y="66" Z="-128" S="138" T="752" R="0" G="97" B="82" A="255"/>
<Vtx X="-1" Y="88" Z="-149" S="86" T="496" R="130" G="250" B="240" A="255"/>
<Vtx X="0" Y="88" Z="-148" S="86" T="752" R="0" G="50" B="117" A="255"/>
</Vertex>

View File

@ -0,0 +1,672 @@
<Vertex Version="0">
<Vtx X="25" Y="-79" Z="71" S="-133" T="340" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-78" Z="70" S="-144" T="338" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-78" Z="73" S="-144" T="368" R="127" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-89" Z="84" S="507" T="507" R="174" G="68" B="186" A="255"/>
<Vtx X="-15" Y="-93" Z="79" S="550" T="443" R="173" G="89" B="219" A="255"/>
<Vtx X="-15" Y="-93" Z="79" S="551" T="444" R="208" G="109" B="211" A="255"/>
<Vtx X="-15" Y="-89" Z="84" S="508" T="508" R="210" G="84" B="172" A="255"/>
<Vtx X="-15" Y="-93" Z="79" S="553" T="445" R="136" G="40" B="240" A="255"/>
<Vtx X="-15" Y="-89" Z="84" S="510" T="510" R="137" G="31" B="225" A="255"/>
<Vtx X="-15" Y="-95" Z="80" S="583" T="457" R="140" G="207" B="20" A="255"/>
<Vtx X="-15" Y="-97" Z="73" S="601" T="368" R="140" G="203" B="0" A="255"/>
<Vtx X="-15" Y="-94" Z="73" S="568" T="368" R="136" G="42" B="0" A="255"/>
<Vtx X="-15" Y="-93" Z="79" S="551" T="444" R="208" G="109" B="211" A="255"/>
<Vtx X="-15" Y="-94" Z="73" S="566" T="368" R="203" G="116" B="0" A="255"/>
<Vtx X="-15" Y="-94" Z="73" S="565" T="368" R="171" G="94" B="0" A="255"/>
<Vtx X="-15" Y="-93" Z="67" S="551" T="292" R="199" G="105" B="43" A="255"/>
<Vtx X="-15" Y="-93" Z="67" S="550" T="293" R="169" G="86" B="35" A="255"/>
<Vtx X="-15" Y="-89" Z="61" S="508" T="228" R="203" G="82" B="82" A="255"/>
<Vtx X="-15" Y="-89" Z="61" S="507" T="229" R="171" G="67" B="67" A="255"/>
<Vtx X="-15" Y="-84" Z="58" S="444" T="185" R="208" G="45" B="109" A="255"/>
<Vtx X="-15" Y="-84" Z="58" S="443" T="186" R="173" G="36" B="90" A="255"/>
<Vtx X="-15" Y="-78" Z="57" S="368" T="170" R="210" G="0" B="118" A="255"/>
<Vtx X="-15" Y="-78" Z="57" S="368" T="171" R="175" G="0" B="97" A="255"/>
<Vtx X="-15" Y="-72" Z="58" S="292" T="185" R="208" G="211" B="109" A="255"/>
<Vtx X="-15" Y="-72" Z="58" S="293" T="186" R="173" G="218" B="88" A="255"/>
<Vtx X="-15" Y="-67" Z="61" S="228" T="228" R="198" G="176" B="80" A="255"/>
<Vtx X="-15" Y="-67" Z="61" S="229" T="229" R="168" G="191" B="65" A="255"/>
<Vtx X="-15" Y="-63" Z="67" S="185" T="292" R="194" G="154" B="42" A="255"/>
<Vtx X="-15" Y="-63" Z="67" S="186" T="293" R="166" G="174" B="34" A="255"/>
<Vtx X="-15" Y="-62" Z="73" S="170" T="368" R="194" G="145" B="0" A="255"/>
<Vtx X="-15" Y="-62" Z="73" S="171" T="368" R="165" G="167" B="0" A="255"/>
<Vtx X="-15" Y="-63" Z="79" S="185" T="444" R="194" G="154" B="214" A="255"/>
<Vtx X="-15" Y="-62" Z="73" S="171" T="368" R="165" G="167" B="0" A="255"/>
<Vtx X="-15" Y="-63" Z="79" S="186" T="443" R="166" G="174" B="222" A="255"/>
<Vtx X="-15" Y="-63" Z="79" S="185" T="444" R="194" G="154" B="214" A="255"/>
<Vtx X="-15" Y="-67" Z="84" S="228" T="508" R="194" G="178" B="178" A="255"/>
<Vtx X="-15" Y="-67" Z="84" S="229" T="507" R="165" G="193" B="193" A="255"/>
<Vtx X="-15" Y="-72" Z="88" S="292" T="551" R="194" G="214" B="154" A="255"/>
<Vtx X="-15" Y="-72" Z="88" S="293" T="550" R="166" G="222" B="174" A="255"/>
<Vtx X="-15" Y="-78" Z="89" S="368" T="566" R="198" G="0" B="143" A="255"/>
<Vtx X="-15" Y="-78" Z="89" S="368" T="565" R="168" G="0" B="164" A="255"/>
<Vtx X="-15" Y="-84" Z="88" S="444" T="551" R="208" G="45" B="147" A="255"/>
<Vtx X="-15" Y="-84" Z="88" S="443" T="550" R="173" G="35" B="167" A="255"/>
<Vtx X="-15" Y="-89" Z="84" S="508" T="508" R="210" G="84" B="172" A="255"/>
<Vtx X="-15" Y="-89" Z="84" S="507" T="507" R="174" G="68" B="186" A="255"/>
<Vtx X="-15" Y="-89" Z="84" S="510" T="510" R="137" G="31" B="225" A="255"/>
<Vtx X="-15" Y="-84" Z="88" S="445" T="553" R="137" G="17" B="216" A="255"/>
<Vtx X="-15" Y="-91" Z="86" S="533" T="533" R="140" G="219" B="37" A="255"/>
<Vtx X="-15" Y="-95" Z="80" S="583" T="457" R="140" G="207" B="20" A="255"/>
<Vtx X="-14" Y="-96" Z="80" S="595" T="462" R="209" G="147" B="45" A="255"/>
<Vtx X="-14" Y="-98" Z="73" S="614" T="368" R="209" G="138" B="0" A="255"/>
<Vtx X="-15" Y="-97" Z="73" S="601" T="368" R="140" G="203" B="0" A="255"/>
<Vtx X="-14" Y="-96" Z="65" S="595" T="274" R="209" G="147" B="211" A="255"/>
<Vtx X="-15" Y="-95" Z="66" S="583" T="279" R="140" G="207" B="236" A="255"/>
<Vtx X="-15" Y="-94" Z="73" S="568" T="368" R="136" G="42" B="0" A="255"/>
<Vtx X="-15" Y="-93" Z="67" S="553" T="291" R="136" G="38" B="15" A="255"/>
<Vtx X="-15" Y="-94" Z="73" S="566" T="368" R="203" G="116" B="0" A="255"/>
<Vtx X="-15" Y="-93" Z="67" S="551" T="292" R="199" G="105" B="43" A="255"/>
<Vtx X="-15" Y="-89" Z="61" S="510" T="226" R="136" G="30" B="30" A="255"/>
<Vtx X="-15" Y="-89" Z="61" S="508" T="228" R="203" G="82" B="82" A="255"/>
<Vtx X="-15" Y="-84" Z="58" S="445" T="183" R="137" G="17" B="40" A="255"/>
<Vtx X="-15" Y="-84" Z="58" S="444" T="185" R="208" G="45" B="109" A="255"/>
<Vtx X="-15" Y="-78" Z="57" S="368" T="168" R="137" G="0" B="44" A="255"/>
<Vtx X="-15" Y="-78" Z="57" S="368" T="170" R="210" G="0" B="118" A="255"/>
<Vtx X="-15" Y="-72" Z="58" S="291" T="183" R="136" G="240" B="40" A="255"/>
<Vtx X="-15" Y="-78" Z="57" S="368" T="168" R="137" G="0" B="44" A="255"/>
<Vtx X="-15" Y="-78" Z="57" S="368" T="170" R="210" G="0" B="118" A="255"/>
<Vtx X="-15" Y="-72" Z="58" S="292" T="185" R="208" G="211" B="109" A="255"/>
<Vtx X="-15" Y="-66" Z="61" S="226" T="226" R="136" G="228" B="29" A="255"/>
<Vtx X="-15" Y="-67" Z="61" S="228" T="228" R="198" G="176" B="80" A="255"/>
<Vtx X="-15" Y="-63" Z="67" S="183" T="291" R="135" G="220" B="15" A="255"/>
<Vtx X="-15" Y="-63" Z="67" S="185" T="292" R="194" G="154" B="42" A="255"/>
<Vtx X="-15" Y="-62" Z="73" S="168" T="368" R="135" G="217" B="0" A="255"/>
<Vtx X="-15" Y="-62" Z="73" S="170" T="368" R="194" G="145" B="0" A="255"/>
<Vtx X="-15" Y="-63" Z="79" S="183" T="445" R="135" G="220" B="241" A="255"/>
<Vtx X="-15" Y="-63" Z="79" S="185" T="444" R="194" G="154" B="214" A="255"/>
<Vtx X="-15" Y="-66" Z="84" S="226" T="510" R="135" G="228" B="228" A="255"/>
<Vtx X="-15" Y="-67" Z="84" S="228" T="508" R="194" G="178" B="178" A="255"/>
<Vtx X="-15" Y="-72" Z="88" S="291" T="553" R="135" G="241" B="220" A="255"/>
<Vtx X="-15" Y="-72" Z="88" S="292" T="551" R="194" G="214" B="154" A="255"/>
<Vtx X="-15" Y="-78" Z="89" S="368" T="568" R="136" G="0" B="215" A="255"/>
<Vtx X="-15" Y="-78" Z="89" S="368" T="566" R="198" G="0" B="143" A="255"/>
<Vtx X="-15" Y="-84" Z="88" S="445" T="553" R="137" G="17" B="216" A="255"/>
<Vtx X="-15" Y="-84" Z="88" S="444" T="551" R="208" G="45" B="147" A="255"/>
<Vtx X="-15" Y="-85" Z="90" S="457" T="583" R="140" G="236" B="49" A="255"/>
<Vtx X="-15" Y="-91" Z="86" S="533" T="533" R="140" G="219" B="37" A="255"/>
<Vtx X="-14" Y="-92" Z="87" S="542" T="542" R="209" G="172" B="84" A="255"/>
<Vtx X="-14" Y="-96" Z="80" S="595" T="462" R="209" G="147" B="45" A="255"/>
<Vtx X="-14" Y="-86" Z="91" S="462" T="595" R="209" G="211" B="109" A="255"/>
<Vtx X="-15" Y="-78" Z="92" S="368" T="601" R="140" G="0" B="53" A="255"/>
<Vtx X="-14" Y="-78" Z="93" S="368" T="614" R="209" G="0" B="118" A="255"/>
<Vtx X="-15" Y="-71" Z="90" S="279" T="583" R="140" G="20" B="49" A="255"/>
<Vtx X="-14" Y="-70" Z="91" S="274" T="595" R="209" G="45" B="109" A="255"/>
<Vtx X="-15" Y="-64" Z="86" S="203" T="533" R="140" G="37" B="37" A="255"/>
<Vtx X="-14" Y="-64" Z="87" S="194" T="542" R="209" G="84" B="84" A="255"/>
<Vtx X="-15" Y="-60" Z="80" S="153" T="457" R="140" G="49" B="20" A="255"/>
<Vtx X="-14" Y="-64" Z="87" S="194" T="542" R="209" G="84" B="84" A="255"/>
<Vtx X="-14" Y="-59" Z="80" S="141" T="462" R="209" G="109" B="45" A="255"/>
<Vtx X="-15" Y="-60" Z="80" S="153" T="457" R="140" G="49" B="20" A="255"/>
<Vtx X="-15" Y="-59" Z="73" S="135" T="368" R="140" G="53" B="0" A="255"/>
<Vtx X="-14" Y="-58" Z="73" S="122" T="368" R="209" G="118" B="0" A="255"/>
<Vtx X="-15" Y="-60" Z="66" S="153" T="279" R="140" G="49" B="236" A="255"/>
<Vtx X="-14" Y="-59" Z="65" S="141" T="274" R="209" G="109" B="211" A="255"/>
<Vtx X="-15" Y="-64" Z="59" S="203" T="203" R="140" G="37" B="219" A="255"/>
<Vtx X="-14" Y="-64" Z="59" S="194" T="194" R="209" G="84" B="172" A="255"/>
<Vtx X="-15" Y="-71" Z="55" S="279" T="153" R="140" G="20" B="207" A="255"/>
<Vtx X="-14" Y="-70" Z="54" S="274" T="141" R="209" G="45" B="147" A="255"/>
<Vtx X="-15" Y="-78" Z="54" S="368" T="135" R="140" G="0" B="203" A="255"/>
<Vtx X="-14" Y="-78" Z="53" S="368" T="122" R="209" G="0" B="138" A="255"/>
<Vtx X="-15" Y="-85" Z="55" S="457" T="153" R="140" G="236" B="207" A="255"/>
<Vtx X="-14" Y="-86" Z="54" S="462" T="141" R="209" G="211" B="147" A="255"/>
<Vtx X="-15" Y="-91" Z="59" S="533" T="203" R="140" G="219" B="219" A="255"/>
<Vtx X="-14" Y="-92" Z="59" S="542" T="194" R="209" G="172" B="172" A="255"/>
<Vtx X="-15" Y="-95" Z="66" S="583" T="279" R="140" G="207" B="236" A="255"/>
<Vtx X="-14" Y="-96" Z="65" S="595" T="274" R="209" G="147" B="211" A="255"/>
<Vtx X="-15" Y="-93" Z="67" S="553" T="291" R="136" G="38" B="15" A="255"/>
<Vtx X="-15" Y="-89" Z="61" S="510" T="226" R="136" G="30" B="30" A="255"/>
<Vtx X="-15" Y="-84" Z="58" S="445" T="183" R="137" G="17" B="40" A="255"/>
<Vtx X="-15" Y="-78" Z="57" S="368" T="168" R="137" G="0" B="44" A="255"/>
<Vtx X="-15" Y="-72" Z="58" S="291" T="183" R="136" G="240" B="40" A="255"/>
<Vtx X="-15" Y="-66" Z="61" S="226" T="226" R="136" G="228" B="29" A="255"/>
<Vtx X="-15" Y="-63" Z="67" S="183" T="291" R="135" G="220" B="15" A="255"/>
<Vtx X="-15" Y="-62" Z="73" S="168" T="368" R="135" G="217" B="0" A="255"/>
<Vtx X="-15" Y="-63" Z="79" S="183" T="445" R="135" G="220" B="241" A="255"/>
<Vtx X="-15" Y="-64" Z="86" S="203" T="533" R="140" G="37" B="37" A="255"/>
<Vtx X="-15" Y="-66" Z="84" S="226" T="510" R="135" G="228" B="228" A="255"/>
<Vtx X="-15" Y="-71" Z="90" S="279" T="583" R="140" G="20" B="49" A="255"/>
<Vtx X="-15" Y="-72" Z="88" S="291" T="553" R="135" G="241" B="220" A="255"/>
<Vtx X="-15" Y="-72" Z="88" S="291" T="553" R="135" G="241" B="220" A="255"/>
<Vtx X="-15" Y="-78" Z="92" S="368" T="601" R="140" G="0" B="53" A="255"/>
<Vtx X="-15" Y="-71" Z="90" S="279" T="583" R="140" G="20" B="49" A="255"/>
<Vtx X="-15" Y="-78" Z="89" S="368" T="568" R="136" G="0" B="215" A="255"/>
<Vtx X="-15" Y="-85" Z="90" S="457" T="583" R="140" G="236" B="49" A="255"/>
<Vtx X="-14" Y="-70" Z="54" S="-336" T="86" R="209" G="45" B="147" A="255"/>
<Vtx X="-11" Y="-78" Z="53" S="-400" T="10" R="47" G="0" B="138" A="255"/>
<Vtx X="-14" Y="-78" Z="53" S="-400" T="86" R="209" G="0" B="138" A="255"/>
<Vtx X="-11" Y="-70" Z="54" S="-336" T="10" R="47" G="45" B="147" A="255"/>
<Vtx X="-14" Y="-64" Z="59" S="-272" T="86" R="209" G="84" B="172" A="255"/>
<Vtx X="-11" Y="-64" Z="59" S="-272" T="10" R="47" G="84" B="172" A="255"/>
<Vtx X="-14" Y="-59" Z="65" S="-208" T="86" R="209" G="109" B="211" A="255"/>
<Vtx X="-11" Y="-59" Z="65" S="-208" T="10" R="47" G="109" B="211" A="255"/>
<Vtx X="-14" Y="-58" Z="73" S="-144" T="86" R="209" G="118" B="0" A="255"/>
<Vtx X="-11" Y="-58" Z="73" S="-144" T="10" R="47" G="118" B="0" A="255"/>
<Vtx X="-14" Y="-59" Z="80" S="-80" T="86" R="209" G="109" B="45" A="255"/>
<Vtx X="-11" Y="-59" Z="80" S="-80" T="10" R="47" G="109" B="45" A="255"/>
<Vtx X="-14" Y="-64" Z="87" S="-16" T="86" R="209" G="84" B="84" A="255"/>
<Vtx X="-11" Y="-64" Z="87" S="-16" T="10" R="47" G="84" B="84" A="255"/>
<Vtx X="-14" Y="-70" Z="91" S="48" T="86" R="209" G="45" B="109" A="255"/>
<Vtx X="-11" Y="-70" Z="91" S="48" T="10" R="47" G="45" B="109" A="255"/>
<Vtx X="-14" Y="-78" Z="93" S="112" T="86" R="209" G="0" B="118" A="255"/>
<Vtx X="-11" Y="-78" Z="93" S="112" T="10" R="47" G="0" B="118" A="255"/>
<Vtx X="-14" Y="-86" Z="91" S="176" T="86" R="209" G="211" B="109" A="255"/>
<Vtx X="-11" Y="-86" Z="91" S="176" T="10" R="47" G="211" B="109" A="255"/>
<Vtx X="-14" Y="-92" Z="87" S="240" T="86" R="209" G="172" B="84" A="255"/>
<Vtx X="-11" Y="-92" Z="87" S="240" T="10" R="47" G="172" B="84" A="255"/>
<Vtx X="-14" Y="-96" Z="80" S="304" T="86" R="209" G="147" B="45" A="255"/>
<Vtx X="-11" Y="-96" Z="80" S="304" T="10" R="47" G="147" B="45" A="255"/>
<Vtx X="-14" Y="-98" Z="73" S="368" T="86" R="209" G="138" B="0" A="255"/>
<Vtx X="-11" Y="-98" Z="73" S="368" T="10" R="47" G="138" B="0" A="255"/>
<Vtx X="-14" Y="-96" Z="65" S="432" T="86" R="209" G="147" B="211" A="255"/>
<Vtx X="-14" Y="-96" Z="65" S="432" T="86" R="209" G="147" B="211" A="255"/>
<Vtx X="-11" Y="-96" Z="65" S="432" T="10" R="47" G="147" B="211" A="255"/>
<Vtx X="-11" Y="-98" Z="73" S="368" T="10" R="47" G="138" B="0" A="255"/>
<Vtx X="-14" Y="-92" Z="59" S="496" T="86" R="209" G="172" B="172" A="255"/>
<Vtx X="-11" Y="-92" Z="59" S="496" T="10" R="47" G="172" B="172" A="255"/>
<Vtx X="-14" Y="-86" Z="54" S="560" T="86" R="209" G="211" B="147" A="255"/>
<Vtx X="-11" Y="-86" Z="54" S="560" T="10" R="47" G="211" B="147" A="255"/>
<Vtx X="-14" Y="-78" Z="53" S="624" T="86" R="209" G="0" B="138" A="255"/>
<Vtx X="-11" Y="-78" Z="53" S="624" T="10" R="47" G="0" B="138" A="255"/>
<Vtx X="-10" Y="-78" Z="54" S="624" T="-16" R="116" G="0" B="203" A="255"/>
<Vtx X="-10" Y="-85" Z="55" S="560" T="-16" R="116" G="236" B="207" A="255"/>
<Vtx X="-10" Y="-78" Z="57" S="624" T="-16" R="96" G="0" B="172" A="255"/>
<Vtx X="-10" Y="-84" Z="58" S="560" T="-16" R="95" G="225" B="178" A="255"/>
<Vtx X="-10" Y="-91" Z="59" S="496" T="-16" R="116" G="219" B="219" A="255"/>
<Vtx X="-10" Y="-89" Z="61" S="496" T="-16" R="95" G="197" B="195" A="255"/>
<Vtx X="-10" Y="-95" Z="66" S="432" T="-16" R="116" G="207" B="236" A="255"/>
<Vtx X="-10" Y="-93" Z="67" S="432" T="-16" R="94" G="177" B="222" A="255"/>
<Vtx X="-10" Y="-97" Z="73" S="368" T="-16" R="116" G="203" B="0" A="255"/>
<Vtx X="-10" Y="-94" Z="73" S="368" T="-16" R="93" G="169" B="0" A="255"/>
<Vtx X="-10" Y="-95" Z="80" S="304" T="-16" R="116" G="207" B="20" A="255"/>
<Vtx X="-10" Y="-93" Z="79" S="304" T="-16" R="94" G="177" B="34" A="255"/>
<Vtx X="-10" Y="-91" Z="86" S="240" T="-16" R="116" G="219" B="37" A="255"/>
<Vtx X="-10" Y="-89" Z="84" S="240" T="-16" R="95" G="197" B="61" A="255"/>
<Vtx X="-10" Y="-85" Z="90" S="176" T="-16" R="116" G="236" B="49" A="255"/>
<Vtx X="-10" Y="-84" Z="88" S="176" T="-16" R="95" G="225" B="78" A="255"/>
<Vtx X="-10" Y="-78" Z="92" S="112" T="-16" R="116" G="0" B="53" A="255"/>
<Vtx X="-10" Y="-78" Z="89" S="112" T="-16" R="96" G="0" B="84" A="255"/>
<Vtx X="-10" Y="-71" Z="90" S="48" T="-16" R="116" G="20" B="49" A="255"/>
<Vtx X="-10" Y="-72" Z="88" S="48" T="-16" R="95" G="31" B="78" A="255"/>
<Vtx X="-10" Y="-64" Z="86" S="-16" T="-16" R="116" G="37" B="37" A="255"/>
<Vtx X="-10" Y="-67" Z="84" S="-16" T="-16" R="95" G="59" B="61" A="255"/>
<Vtx X="-10" Y="-60" Z="80" S="-80" T="-16" R="116" G="49" B="20" A="255"/>
<Vtx X="-10" Y="-60" Z="80" S="-80" T="-16" R="116" G="49" B="20" A="255"/>
<Vtx X="-10" Y="-67" Z="84" S="-16" T="-16" R="95" G="59" B="61" A="255"/>
<Vtx X="-10" Y="-63" Z="79" S="-80" T="-16" R="94" G="79" B="34" A="255"/>
<Vtx X="-10" Y="-59" Z="73" S="-144" T="-16" R="116" G="53" B="0" A="255"/>
<Vtx X="-10" Y="-62" Z="73" S="-144" T="-16" R="93" G="87" B="0" A="255"/>
<Vtx X="-10" Y="-60" Z="66" S="-208" T="-16" R="116" G="49" B="236" A="255"/>
<Vtx X="-10" Y="-63" Z="67" S="-208" T="-16" R="94" G="79" B="222" A="255"/>
<Vtx X="-10" Y="-64" Z="59" S="-272" T="-16" R="116" G="37" B="219" A="255"/>
<Vtx X="-10" Y="-67" Z="61" S="-272" T="-16" R="95" G="59" B="195" A="255"/>
<Vtx X="-10" Y="-71" Z="55" S="-336" T="-16" R="116" G="20" B="207" A="255"/>
<Vtx X="-10" Y="-72" Z="58" S="-336" T="-16" R="95" G="31" B="178" A="255"/>
<Vtx X="-10" Y="-78" Z="54" S="-400" T="-16" R="116" G="0" B="203" A="255"/>
<Vtx X="-10" Y="-78" Z="57" S="-400" T="-16" R="96" G="0" B="172" A="255"/>
<Vtx X="-11" Y="-78" Z="53" S="-400" T="10" R="47" G="0" B="138" A="255"/>
<Vtx X="-11" Y="-70" Z="54" S="-336" T="10" R="47" G="45" B="147" A="255"/>
<Vtx X="-11" Y="-64" Z="59" S="-272" T="10" R="47" G="84" B="172" A="255"/>
<Vtx X="-11" Y="-59" Z="65" S="-208" T="10" R="47" G="109" B="211" A="255"/>
<Vtx X="-11" Y="-58" Z="73" S="-144" T="10" R="47" G="118" B="0" A="255"/>
<Vtx X="-11" Y="-59" Z="80" S="-80" T="10" R="47" G="109" B="45" A="255"/>
<Vtx X="-10" Y="-64" Z="86" S="-16" T="-16" R="116" G="37" B="37" A="255"/>
<Vtx X="-11" Y="-64" Z="87" S="-16" T="10" R="47" G="84" B="84" A="255"/>
<Vtx X="-10" Y="-71" Z="90" S="48" T="-16" R="116" G="20" B="49" A="255"/>
<Vtx X="-11" Y="-70" Z="91" S="48" T="10" R="47" G="45" B="109" A="255"/>
<Vtx X="-10" Y="-78" Z="92" S="112" T="-16" R="116" G="0" B="53" A="255"/>
<Vtx X="-11" Y="-78" Z="93" S="112" T="10" R="47" G="0" B="118" A="255"/>
<Vtx X="-10" Y="-85" Z="90" S="176" T="-16" R="116" G="236" B="49" A="255"/>
<Vtx X="-11" Y="-86" Z="91" S="176" T="10" R="47" G="211" B="109" A="255"/>
<Vtx X="-10" Y="-91" Z="86" S="240" T="-16" R="116" G="219" B="37" A="255"/>
<Vtx X="-11" Y="-92" Z="87" S="240" T="10" R="47" G="172" B="84" A="255"/>
<Vtx X="-10" Y="-95" Z="80" S="304" T="-16" R="116" G="207" B="20" A="255"/>
<Vtx X="-11" Y="-96" Z="80" S="304" T="10" R="47" G="147" B="45" A="255"/>
<Vtx X="-10" Y="-97" Z="73" S="368" T="-16" R="116" G="203" B="0" A="255"/>
<Vtx X="-10" Y="-97" Z="73" S="368" T="-16" R="116" G="203" B="0" A="255"/>
<Vtx X="-11" Y="-96" Z="80" S="304" T="10" R="47" G="147" B="45" A="255"/>
<Vtx X="-11" Y="-98" Z="73" S="368" T="10" R="47" G="138" B="0" A="255"/>
<Vtx X="-10" Y="-95" Z="66" S="432" T="-16" R="116" G="207" B="236" A="255"/>
<Vtx X="-11" Y="-96" Z="65" S="432" T="10" R="47" G="147" B="211" A="255"/>
<Vtx X="-10" Y="-91" Z="59" S="496" T="-16" R="116" G="219" B="219" A="255"/>
<Vtx X="-11" Y="-92" Z="59" S="496" T="10" R="47" G="172" B="172" A="255"/>
<Vtx X="-10" Y="-85" Z="55" S="560" T="-16" R="116" G="236" B="207" A="255"/>
<Vtx X="-11" Y="-86" Z="54" S="560" T="10" R="47" G="211" B="147" A="255"/>
<Vtx X="11" Y="-92" Z="87" S="240" T="-298" R="209" G="172" B="84" A="255"/>
<Vtx X="14" Y="-92" Z="87" S="240" T="-374" R="47" G="172" B="84" A="255"/>
<Vtx X="14" Y="-86" Z="91" S="176" T="-374" R="47" G="211" B="109" A="255"/>
<Vtx X="11" Y="-86" Z="91" S="176" T="-298" R="209" G="211" B="109" A="255"/>
<Vtx X="10" Y="-85" Z="90" S="176" T="-272" R="140" G="236" B="49" A="255"/>
<Vtx X="10" Y="-78" Z="92" S="112" T="-272" R="140" G="0" B="53" A="255"/>
<Vtx X="11" Y="-78" Z="93" S="112" T="-298" R="209" G="0" B="118" A="255"/>
<Vtx X="14" Y="-78" Z="93" S="112" T="-374" R="47" G="0" B="118" A="255"/>
<Vtx X="14" Y="-86" Z="91" S="176" T="-374" R="47" G="211" B="109" A="255"/>
<Vtx X="10" Y="-71" Z="90" S="48" T="-272" R="140" G="20" B="49" A="255"/>
<Vtx X="11" Y="-70" Z="91" S="48" T="-298" R="209" G="45" B="109" A="255"/>
<Vtx X="14" Y="-70" Z="91" S="48" T="-374" R="47" G="45" B="109" A="255"/>
<Vtx X="14" Y="-78" Z="93" S="112" T="-374" R="47" G="0" B="118" A="255"/>
<Vtx X="10" Y="-72" Z="88" S="48" T="-272" R="161" G="31" B="78" A="255"/>
<Vtx X="10" Y="-78" Z="89" S="112" T="-272" R="160" G="0" B="84" A="255"/>
<Vtx X="10" Y="-84" Z="88" S="176" T="-272" R="161" G="225" B="78" A="255"/>
<Vtx X="10" Y="-91" Z="86" S="240" T="-272" R="140" G="219" B="37" A="255"/>
<Vtx X="10" Y="-89" Z="84" S="240" T="-272" R="161" G="197" B="61" A="255"/>
<Vtx X="10" Y="-95" Z="80" S="304" T="-272" R="140" G="207" B="20" A="255"/>
<Vtx X="10" Y="-93" Z="79" S="304" T="-272" R="162" G="177" B="34" A="255"/>
<Vtx X="10" Y="-97" Z="73" S="368" T="-272" R="140" G="203" B="0" A="255"/>
<Vtx X="10" Y="-94" Z="73" S="368" T="-272" R="163" G="169" B="0" A="255"/>
<Vtx X="10" Y="-95" Z="66" S="432" T="-272" R="140" G="207" B="236" A="255"/>
<Vtx X="10" Y="-95" Z="66" S="432" T="-272" R="140" G="207" B="236" A="255"/>
<Vtx X="10" Y="-94" Z="73" S="368" T="-272" R="163" G="169" B="0" A="255"/>
<Vtx X="10" Y="-93" Z="67" S="432" T="-272" R="162" G="177" B="222" A="255"/>
<Vtx X="10" Y="-91" Z="59" S="496" T="-272" R="140" G="219" B="219" A="255"/>
<Vtx X="10" Y="-89" Z="61" S="496" T="-272" R="161" G="197" B="195" A="255"/>
<Vtx X="10" Y="-85" Z="55" S="560" T="-272" R="140" G="236" B="207" A="255"/>
<Vtx X="10" Y="-84" Z="58" S="560" T="-272" R="161" G="225" B="178" A="255"/>
<Vtx X="10" Y="-78" Z="54" S="624" T="-272" R="140" G="0" B="203" A="255"/>
<Vtx X="10" Y="-78" Z="57" S="624" T="-272" R="160" G="0" B="172" A="255"/>
<Vtx X="11" Y="-78" Z="53" S="624" T="-298" R="209" G="0" B="138" A="255"/>
<Vtx X="11" Y="-86" Z="54" S="560" T="-298" R="209" G="211" B="147" A="255"/>
<Vtx X="14" Y="-86" Z="54" S="560" T="-374" R="47" G="211" B="147" A="255"/>
<Vtx X="14" Y="-78" Z="53" S="624" T="-374" R="47" G="0" B="138" A="255"/>
<Vtx X="11" Y="-92" Z="59" S="496" T="-298" R="209" G="172" B="172" A="255"/>
<Vtx X="14" Y="-92" Z="59" S="496" T="-374" R="47" G="172" B="172" A="255"/>
<Vtx X="14" Y="-86" Z="54" S="560" T="-374" R="47" G="211" B="147" A="255"/>
<Vtx X="11" Y="-96" Z="65" S="432" T="-298" R="209" G="147" B="211" A="255"/>
<Vtx X="14" Y="-96" Z="65" S="432" T="-374" R="47" G="147" B="211" A="255"/>
<Vtx X="14" Y="-92" Z="59" S="496" T="-374" R="47" G="172" B="172" A="255"/>
<Vtx X="10" Y="-97" Z="73" S="368" T="-272" R="140" G="203" B="0" A="255"/>
<Vtx X="11" Y="-98" Z="73" S="368" T="-298" R="209" G="138" B="0" A="255"/>
<Vtx X="14" Y="-98" Z="73" S="368" T="-374" R="47" G="138" B="0" A="255"/>
<Vtx X="14" Y="-96" Z="65" S="432" T="-374" R="47" G="147" B="211" A="255"/>
<Vtx X="10" Y="-95" Z="80" S="304" T="-272" R="140" G="207" B="20" A="255"/>
<Vtx X="11" Y="-96" Z="80" S="304" T="-298" R="209" G="147" B="45" A="255"/>
<Vtx X="14" Y="-96" Z="80" S="304" T="-374" R="47" G="147" B="45" A="255"/>
<Vtx X="14" Y="-98" Z="73" S="368" T="-374" R="47" G="138" B="0" A="255"/>
<Vtx X="10" Y="-91" Z="86" S="240" T="-272" R="140" G="219" B="37" A="255"/>
<Vtx X="11" Y="-92" Z="87" S="240" T="-298" R="209" G="172" B="84" A="255"/>
<Vtx X="14" Y="-92" Z="87" S="240" T="-374" R="47" G="172" B="84" A="255"/>
<Vtx X="14" Y="-96" Z="80" S="304" T="-374" R="47" G="147" B="45" A="255"/>
<Vtx X="10" Y="-85" Z="90" S="176" T="-272" R="140" G="236" B="49" A="255"/>
<Vtx X="11" Y="-70" Z="91" S="48" T="-298" R="209" G="45" B="109" A="255"/>
<Vtx X="14" Y="-70" Z="91" S="48" T="-374" R="47" G="45" B="109" A="255"/>
<Vtx X="14" Y="-64" Z="87" S="-16" T="-374" R="47" G="84" B="84" A="255"/>
<Vtx X="11" Y="-64" Z="87" S="-16" T="-298" R="209" G="84" B="84" A="255"/>
<Vtx X="10" Y="-64" Z="86" S="-16" T="-272" R="140" G="37" B="37" A="255"/>
<Vtx X="10" Y="-60" Z="80" S="-80" T="-272" R="140" G="49" B="20" A="255"/>
<Vtx X="11" Y="-59" Z="80" S="-80" T="-298" R="209" G="109" B="45" A="255"/>
<Vtx X="14" Y="-59" Z="80" S="-80" T="-374" R="47" G="109" B="45" A="255"/>
<Vtx X="14" Y="-64" Z="87" S="-16" T="-374" R="47" G="84" B="84" A="255"/>
<Vtx X="10" Y="-59" Z="73" S="-144" T="-272" R="140" G="53" B="0" A="255"/>
<Vtx X="11" Y="-58" Z="73" S="-144" T="-298" R="209" G="118" B="0" A="255"/>
<Vtx X="14" Y="-58" Z="73" S="-144" T="-374" R="47" G="118" B="0" A="255"/>
<Vtx X="14" Y="-59" Z="80" S="-80" T="-374" R="47" G="109" B="45" A="255"/>
<Vtx X="10" Y="-62" Z="73" S="-144" T="-272" R="163" G="87" B="0" A="255"/>
<Vtx X="10" Y="-63" Z="79" S="-80" T="-272" R="162" G="79" B="34" A="255"/>
<Vtx X="10" Y="-67" Z="84" S="-16" T="-272" R="161" G="59" B="61" A="255"/>
<Vtx X="10" Y="-71" Z="90" S="48" T="-272" R="140" G="20" B="49" A="255"/>
<Vtx X="10" Y="-72" Z="88" S="48" T="-272" R="161" G="31" B="78" A="255"/>
<Vtx X="14" Y="-58" Z="73" S="-144" T="-374" R="47" G="118" B="0" A="255"/>
<Vtx X="14" Y="-59" Z="65" S="-208" T="-374" R="47" G="109" B="211" A="255"/>
<Vtx X="11" Y="-59" Z="65" S="-208" T="-298" R="209" G="109" B="211" A="255"/>
<Vtx X="10" Y="-60" Z="66" S="-208" T="-272" R="140" G="49" B="236" A="255"/>
<Vtx X="10" Y="-59" Z="73" S="-144" T="-272" R="140" G="53" B="0" A="255"/>
<Vtx X="10" Y="-63" Z="67" S="-208" T="-272" R="162" G="79" B="222" A="255"/>
<Vtx X="14" Y="-59" Z="65" S="-208" T="-374" R="47" G="109" B="211" A="255"/>
<Vtx X="14" Y="-64" Z="59" S="-272" T="-374" R="47" G="84" B="172" A="255"/>
<Vtx X="11" Y="-64" Z="59" S="-272" T="-298" R="209" G="84" B="172" A="255"/>
<Vtx X="10" Y="-64" Z="59" S="-272" T="-272" R="140" G="37" B="219" A="255"/>
<Vtx X="10" Y="-60" Z="66" S="-208" T="-272" R="140" G="49" B="236" A="255"/>
<Vtx X="10" Y="-67" Z="61" S="-272" T="-272" R="161" G="59" B="195" A="255"/>
<Vtx X="14" Y="-64" Z="59" S="-272" T="-374" R="47" G="84" B="172" A="255"/>
<Vtx X="14" Y="-70" Z="54" S="-336" T="-374" R="47" G="45" B="147" A="255"/>
<Vtx X="11" Y="-64" Z="59" S="-272" T="-298" R="209" G="84" B="172" A="255"/>
<Vtx X="14" Y="-70" Z="54" S="-336" T="-374" R="47" G="45" B="147" A="255"/>
<Vtx X="11" Y="-70" Z="54" S="-336" T="-298" R="209" G="45" B="147" A="255"/>
<Vtx X="10" Y="-71" Z="55" S="-336" T="-272" R="140" G="20" B="207" A="255"/>
<Vtx X="10" Y="-78" Z="54" S="-400" T="-272" R="140" G="0" B="203" A="255"/>
<Vtx X="11" Y="-78" Z="53" S="-400" T="-298" R="209" G="0" B="138" A="255"/>
<Vtx X="14" Y="-78" Z="53" S="-400" T="-374" R="47" G="0" B="138" A="255"/>
<Vtx X="14" Y="-70" Z="54" S="-336" T="-374" R="47" G="45" B="147" A="255"/>
<Vtx X="10" Y="-78" Z="57" S="-400" T="-272" R="160" G="0" B="172" A="255"/>
<Vtx X="10" Y="-72" Z="58" S="-336" T="-272" R="161" G="31" B="178" A="255"/>
<Vtx X="10" Y="-64" Z="59" S="-272" T="-272" R="140" G="37" B="219" A="255"/>
<Vtx X="10" Y="-67" Z="61" S="-272" T="-272" R="161" G="59" B="195" A="255"/>
<Vtx X="17" Y="-77" Z="76" S="-158" T="401" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-74" Z="76" S="-189" T="413" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-76" Z="78" S="-168" T="426" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-76" Z="75" S="-169" T="393" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-73" Z="75" S="-202" T="392" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-75" Z="74" S="-177" T="382" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-73" Z="73" S="-207" T="368" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-75" Z="73" S="-180" T="368" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-73" Z="71" S="-202" T="344" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-75" Z="72" S="-177" T="354" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-74" Z="69" S="-189" T="323" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-76" Z="71" S="-169" T="343" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-78" Z="76" S="-144" T="404" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-77" Z="76" S="-158" T="401" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-76" Z="78" S="-168" T="426" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-78" Z="78" S="-144" T="431" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-79" Z="76" S="-130" T="401" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-80" Z="78" S="-120" T="426" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-77" Z="70" S="-158" T="335" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-78" Z="70" S="-144" T="332" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-78" Z="68" S="-144" T="305" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-76" Z="68" S="-168" T="310" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-76" Z="71" S="-169" T="343" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-74" Z="69" S="-189" T="323" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-78" Z="70" S="-144" T="332" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-80" Z="68" S="-120" T="310" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-78" Z="68" S="-144" T="305" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-79" Z="70" S="-130" T="335" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-82" Z="69" S="-99" T="323" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-80" Z="71" S="-119" T="343" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-83" Z="71" S="-86" T="344" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-81" Z="72" S="-111" T="354" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-83" Z="73" S="-81" T="368" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-81" Z="73" S="-108" T="368" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-83" Z="75" S="-86" T="392" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-81" Z="74" S="-111" T="382" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-80" Z="75" S="-119" T="393" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-79" Z="76" S="-130" T="401" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-80" Z="78" S="-120" T="426" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-82" Z="76" S="-99" T="413" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-81" Z="74" S="-111" T="382" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-80" Z="75" S="-119" T="393" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-82" Z="76" S="-99" T="413" R="127" G="0" B="0" A="255"/>
<Vtx X="17" Y="-83" Z="75" S="-86" T="392" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-78" Z="70" S="-144" T="338" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-77" Z="71" S="-155" T="340" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-78" Z="73" S="-144" T="368" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-76" Z="71" S="-165" T="347" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-76" Z="72" S="-172" T="357" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-75" Z="73" S="-174" T="368" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-75" Z="73" S="-174" T="368" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-76" Z="74" S="-172" T="379" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-78" Z="73" S="-144" T="368" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-76" Z="75" S="-165" T="389" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-77" Z="75" S="-155" T="396" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-78" Z="75" S="-144" T="398" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-79" Z="75" S="-133" T="396" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-80" Z="75" S="-123" T="389" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-80" Z="74" S="-116" T="379" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-80" Z="73" S="-114" T="368" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-80" Z="72" S="-116" T="357" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-80" Z="71" S="-123" T="347" R="127" G="0" B="0" A="255"/>
<Vtx X="25" Y="-79" Z="71" S="-133" T="340" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-58" Z="73" S="-390" T="368" R="47" G="118" B="0" A="255"/>
<Vtx X="14" Y="-59" Z="80" S="-371" T="462" R="47" G="109" B="45" A="255"/>
<Vtx X="15" Y="-60" Z="80" S="-359" T="457" R="116" G="49" B="20" A="255"/>
<Vtx X="15" Y="-59" Z="73" S="-377" T="368" R="116" G="53" B="0" A="255"/>
<Vtx X="15" Y="-63" Z="79" S="-329" T="445" R="121" G="220" B="241" A="255"/>
<Vtx X="15" Y="-62" Z="73" S="-344" T="368" R="121" G="217" B="0" A="255"/>
<Vtx X="15" Y="-63" Z="79" S="-327" T="444" R="62" G="154" B="214" A="255"/>
<Vtx X="15" Y="-67" Z="84" S="-284" T="508" R="62" G="178" B="178" A="255"/>
<Vtx X="15" Y="-66" Z="84" S="-286" T="510" R="121" G="228" B="228" A="255"/>
<Vtx X="15" Y="-60" Z="80" S="-359" T="457" R="116" G="49" B="20" A="255"/>
<Vtx X="15" Y="-64" Z="86" S="-309" T="533" R="116" G="37" B="37" A="255"/>
<Vtx X="14" Y="-64" Z="87" S="-318" T="542" R="47" G="84" B="84" A="255"/>
<Vtx X="15" Y="-71" Z="90" S="-233" T="583" R="116" G="20" B="49" A="255"/>
<Vtx X="14" Y="-70" Z="91" S="-238" T="595" R="47" G="45" B="109" A="255"/>
<Vtx X="15" Y="-78" Z="92" S="-144" T="601" R="116" G="0" B="53" A="255"/>
<Vtx X="14" Y="-78" Z="93" S="-144" T="614" R="47" G="0" B="118" A="255"/>
<Vtx X="15" Y="-85" Z="90" S="-55" T="583" R="116" G="236" B="49" A="255"/>
<Vtx X="14" Y="-86" Z="91" S="-50" T="595" R="47" G="211" B="109" A="255"/>
<Vtx X="15" Y="-91" Z="86" S="21" T="533" R="116" G="219" B="37" A="255"/>
<Vtx X="14" Y="-86" Z="91" S="-50" T="595" R="47" G="211" B="109" A="255"/>
<Vtx X="14" Y="-92" Z="87" S="30" T="542" R="47" G="172" B="84" A="255"/>
<Vtx X="15" Y="-91" Z="86" S="21" T="533" R="116" G="219" B="37" A="255"/>
<Vtx X="15" Y="-95" Z="80" S="71" T="457" R="116" G="207" B="20" A="255"/>
<Vtx X="14" Y="-96" Z="80" S="83" T="462" R="47" G="147" B="45" A="255"/>
<Vtx X="15" Y="-97" Z="73" S="89" T="368" R="116" G="203" B="0" A="255"/>
<Vtx X="14" Y="-98" Z="73" S="102" T="368" R="47" G="138" B="0" A="255"/>
<Vtx X="15" Y="-95" Z="66" S="71" T="279" R="116" G="207" B="236" A="255"/>
<Vtx X="14" Y="-96" Z="65" S="83" T="274" R="47" G="147" B="211" A="255"/>
<Vtx X="15" Y="-91" Z="59" S="21" T="203" R="116" G="219" B="219" A="255"/>
<Vtx X="14" Y="-92" Z="59" S="30" T="194" R="47" G="172" B="172" A="255"/>
<Vtx X="15" Y="-85" Z="55" S="-55" T="153" R="116" G="236" B="207" A="255"/>
<Vtx X="14" Y="-86" Z="54" S="-50" T="141" R="47" G="211" B="147" A="255"/>
<Vtx X="15" Y="-78" Z="54" S="-144" T="135" R="116" G="0" B="203" A="255"/>
<Vtx X="14" Y="-78" Z="53" S="-144" T="122" R="47" G="0" B="138" A="255"/>
<Vtx X="15" Y="-71" Z="55" S="-233" T="153" R="116" G="20" B="207" A="255"/>
<Vtx X="14" Y="-70" Z="54" S="-238" T="141" R="47" G="45" B="147" A="255"/>
<Vtx X="15" Y="-64" Z="59" S="-309" T="203" R="116" G="37" B="219" A="255"/>
<Vtx X="14" Y="-64" Z="59" S="-318" T="194" R="47" G="84" B="172" A="255"/>
<Vtx X="15" Y="-60" Z="66" S="-359" T="279" R="116" G="49" B="236" A="255"/>
<Vtx X="14" Y="-59" Z="65" S="-371" T="274" R="47" G="109" B="211" A="255"/>
<Vtx X="15" Y="-63" Z="67" S="-329" T="291" R="121" G="220" B="15" A="255"/>
<Vtx X="15" Y="-66" Z="61" S="-286" T="226" R="120" G="228" B="29" A="255"/>
<Vtx X="15" Y="-63" Z="67" S="-327" T="292" R="62" G="154" B="42" A="255"/>
<Vtx X="15" Y="-62" Z="73" S="-342" T="368" R="62" G="145" B="0" A="255"/>
<Vtx X="15" Y="-62" Z="73" S="-344" T="368" R="121" G="217" B="0" A="255"/>
<Vtx X="15" Y="-60" Z="66" S="-359" T="279" R="116" G="49" B="236" A="255"/>
<Vtx X="15" Y="-59" Z="73" S="-377" T="368" R="116" G="53" B="0" A="255"/>
<Vtx X="14" Y="-58" Z="73" S="-390" T="368" R="47" G="118" B="0" A="255"/>
<Vtx X="15" Y="-63" Z="79" S="-327" T="444" R="62" G="154" B="214" A="255"/>
<Vtx X="14" Y="-63" Z="79" S="-326" T="443" R="90" G="174" B="222" A="255"/>
<Vtx X="14" Y="-67" Z="84" S="-283" T="507" R="91" G="193" B="193" A="255"/>
<Vtx X="14" Y="-67" Z="84" S="-283" T="507" R="91" G="193" B="193" A="255"/>
<Vtx X="15" Y="-63" Z="79" S="-327" T="444" R="62" G="154" B="214" A="255"/>
<Vtx X="15" Y="-67" Z="84" S="-284" T="508" R="62" G="178" B="178" A="255"/>
<Vtx X="14" Y="-72" Z="88" S="-219" T="550" R="90" G="222" B="174" A="255"/>
<Vtx X="15" Y="-72" Z="88" S="-220" T="551" R="62" G="214" B="154" A="255"/>
<Vtx X="15" Y="-66" Z="84" S="-286" T="510" R="121" G="228" B="228" A="255"/>
<Vtx X="15" Y="-72" Z="88" S="-221" T="553" R="121" G="241" B="220" A="255"/>
<Vtx X="15" Y="-64" Z="86" S="-309" T="533" R="116" G="37" B="37" A="255"/>
<Vtx X="15" Y="-71" Z="90" S="-233" T="583" R="116" G="20" B="49" A="255"/>
<Vtx X="15" Y="-78" Z="89" S="-144" T="568" R="120" G="0" B="215" A="255"/>
<Vtx X="15" Y="-78" Z="92" S="-144" T="601" R="116" G="0" B="53" A="255"/>
<Vtx X="15" Y="-84" Z="88" S="-67" T="553" R="119" G="17" B="216" A="255"/>
<Vtx X="15" Y="-85" Z="90" S="-55" T="583" R="116" G="236" B="49" A="255"/>
<Vtx X="15" Y="-89" Z="84" S="-2" T="510" R="119" G="31" B="225" A="255"/>
<Vtx X="15" Y="-91" Z="86" S="21" T="533" R="116" G="219" B="37" A="255"/>
<Vtx X="15" Y="-93" Z="79" S="41" T="445" R="120" G="40" B="240" A="255"/>
<Vtx X="15" Y="-95" Z="80" S="71" T="457" R="116" G="207" B="20" A="255"/>
<Vtx X="15" Y="-94" Z="73" S="56" T="368" R="120" G="42" B="0" A="255"/>
<Vtx X="15" Y="-97" Z="73" S="89" T="368" R="116" G="203" B="0" A="255"/>
<Vtx X="15" Y="-93" Z="67" S="41" T="291" R="120" G="38" B="15" A="255"/>
<Vtx X="15" Y="-95" Z="66" S="71" T="279" R="116" G="207" B="236" A="255"/>
<Vtx X="15" Y="-89" Z="61" S="-2" T="226" R="120" G="30" B="30" A="255"/>
<Vtx X="15" Y="-91" Z="59" S="21" T="203" R="116" G="219" B="219" A="255"/>
<Vtx X="15" Y="-84" Z="58" S="-67" T="183" R="119" G="17" B="40" A="255"/>
<Vtx X="15" Y="-85" Z="55" S="-55" T="153" R="116" G="236" B="207" A="255"/>
<Vtx X="15" Y="-78" Z="57" S="-144" T="168" R="119" G="0" B="44" A="255"/>
<Vtx X="15" Y="-78" Z="54" S="-144" T="135" R="116" G="0" B="203" A="255"/>
<Vtx X="15" Y="-72" Z="58" S="-221" T="183" R="120" G="240" B="40" A="255"/>
<Vtx X="15" Y="-71" Z="55" S="-233" T="153" R="116" G="20" B="207" A="255"/>
<Vtx X="15" Y="-66" Z="61" S="-286" T="226" R="120" G="228" B="29" A="255"/>
<Vtx X="15" Y="-64" Z="59" S="-309" T="203" R="116" G="37" B="219" A="255"/>
<Vtx X="15" Y="-67" Z="61" S="-284" T="228" R="58" G="176" B="80" A="255"/>
<Vtx X="15" Y="-66" Z="61" S="-286" T="226" R="120" G="228" B="29" A="255"/>
<Vtx X="15" Y="-63" Z="67" S="-327" T="292" R="62" G="154" B="42" A="255"/>
<Vtx X="15" Y="-67" Z="61" S="-284" T="228" R="58" G="176" B="80" A="255"/>
<Vtx X="14" Y="-63" Z="67" S="-326" T="293" R="90" G="174" B="34" A="255"/>
<Vtx X="14" Y="-62" Z="73" S="-341" T="368" R="91" G="167" B="0" A="255"/>
<Vtx X="15" Y="-62" Z="73" S="-342" T="368" R="62" G="145" B="0" A="255"/>
<Vtx X="14" Y="-63" Z="79" S="-326" T="443" R="90" G="174" B="222" A="255"/>
<Vtx X="14" Y="-67" Z="61" S="-283" T="229" R="88" G="191" B="65" A="255"/>
<Vtx X="15" Y="-72" Z="58" S="-220" T="185" R="48" G="211" B="109" A="255"/>
<Vtx X="14" Y="-72" Z="58" S="-219" T="186" R="83" G="218" B="88" A="255"/>
<Vtx X="15" Y="-78" Z="57" S="-144" T="170" R="46" G="0" B="118" A="255"/>
<Vtx X="14" Y="-78" Z="57" S="-144" T="171" R="81" G="0" B="97" A="255"/>
<Vtx X="15" Y="-84" Z="58" S="-68" T="185" R="48" G="45" B="109" A="255"/>
<Vtx X="14" Y="-84" Z="58" S="-69" T="186" R="83" G="36" B="90" A="255"/>
<Vtx X="15" Y="-89" Z="61" S="-4" T="228" R="53" G="82" B="82" A="255"/>
<Vtx X="14" Y="-89" Z="61" S="-5" T="229" R="85" G="67" B="67" A="255"/>
<Vtx X="15" Y="-93" Z="67" S="39" T="292" R="57" G="105" B="43" A="255"/>
<Vtx X="14" Y="-93" Z="67" S="38" T="293" R="87" G="86" B="35" A="255"/>
<Vtx X="15" Y="-94" Z="73" S="54" T="368" R="53" G="116" B="0" A="255"/>
<Vtx X="14" Y="-94" Z="73" S="53" T="368" R="85" G="94" B="0" A="255"/>
<Vtx X="15" Y="-93" Z="79" S="39" T="444" R="48" G="109" B="211" A="255"/>
<Vtx X="14" Y="-93" Z="79" S="38" T="443" R="83" G="89" B="219" A="255"/>
<Vtx X="15" Y="-89" Z="84" S="-4" T="508" R="46" G="84" B="172" A="255"/>
<Vtx X="14" Y="-89" Z="84" S="-5" T="507" R="82" G="68" B="186" A="255"/>
<Vtx X="15" Y="-84" Z="88" S="-68" T="551" R="48" G="45" B="147" A="255"/>
<Vtx X="14" Y="-84" Z="88" S="-69" T="550" R="83" G="35" B="167" A="255"/>
<Vtx X="15" Y="-78" Z="89" S="-144" T="566" R="58" G="0" B="143" A="255"/>
<Vtx X="14" Y="-78" Z="89" S="-144" T="565" R="88" G="0" B="164" A="255"/>
<Vtx X="15" Y="-72" Z="88" S="-220" T="551" R="62" G="214" B="154" A="255"/>
<Vtx X="14" Y="-72" Z="88" S="-219" T="550" R="90" G="222" B="174" A="255"/>
<Vtx X="15" Y="-72" Z="88" S="-221" T="553" R="121" G="241" B="220" A="255"/>
<Vtx X="15" Y="-78" Z="89" S="-144" T="568" R="120" G="0" B="215" A="255"/>
<Vtx X="15" Y="-78" Z="89" S="-144" T="568" R="120" G="0" B="215" A="255"/>
<Vtx X="15" Y="-84" Z="88" S="-67" T="553" R="119" G="17" B="216" A="255"/>
<Vtx X="15" Y="-84" Z="88" S="-68" T="551" R="48" G="45" B="147" A="255"/>
<Vtx X="15" Y="-89" Z="84" S="-4" T="508" R="46" G="84" B="172" A="255"/>
<Vtx X="15" Y="-89" Z="84" S="-2" T="510" R="119" G="31" B="225" A="255"/>
<Vtx X="15" Y="-93" Z="79" S="39" T="444" R="48" G="109" B="211" A="255"/>
<Vtx X="15" Y="-93" Z="79" S="41" T="445" R="120" G="40" B="240" A="255"/>
<Vtx X="15" Y="-94" Z="73" S="54" T="368" R="53" G="116" B="0" A="255"/>
<Vtx X="15" Y="-94" Z="73" S="56" T="368" R="120" G="42" B="0" A="255"/>
<Vtx X="15" Y="-93" Z="67" S="39" T="292" R="57" G="105" B="43" A="255"/>
<Vtx X="15" Y="-93" Z="67" S="41" T="291" R="120" G="38" B="15" A="255"/>
<Vtx X="15" Y="-89" Z="61" S="-4" T="228" R="53" G="82" B="82" A="255"/>
<Vtx X="15" Y="-89" Z="61" S="-2" T="226" R="120" G="30" B="30" A="255"/>
<Vtx X="15" Y="-84" Z="58" S="-68" T="185" R="48" G="45" B="109" A="255"/>
<Vtx X="15" Y="-84" Z="58" S="-67" T="183" R="119" G="17" B="40" A="255"/>
<Vtx X="15" Y="-78" Z="57" S="-144" T="170" R="46" G="0" B="118" A="255"/>
<Vtx X="15" Y="-78" Z="57" S="-144" T="168" R="119" G="0" B="44" A="255"/>
<Vtx X="15" Y="-72" Z="58" S="-220" T="185" R="48" G="211" B="109" A="255"/>
<Vtx X="15" Y="-72" Z="58" S="-221" T="183" R="120" G="240" B="40" A="255"/>
<Vtx X="15" Y="-67" Z="61" S="-284" T="228" R="58" G="176" B="80" A="255"/>
<Vtx X="17" Y="-78" Z="70" S="-144" T="332" R="96" G="0" B="172" A="255"/>
<Vtx X="17" Y="-77" Z="70" S="-158" T="335" R="96" G="32" B="179" A="255"/>
<Vtx X="24" Y="-77" Z="70" S="-158" T="335" R="47" G="45" B="147" A="255"/>
<Vtx X="24" Y="-76" Z="71" S="-169" T="343" R="47" G="84" B="172" A="255"/>
<Vtx X="17" Y="-76" Z="71" S="-169" T="343" R="96" G="59" B="197" A="255"/>
<Vtx X="24" Y="-75" Z="72" S="-177" T="354" R="47" G="109" B="211" A="255"/>
<Vtx X="17" Y="-75" Z="72" S="-177" T="354" R="96" G="77" B="224" A="255"/>
<Vtx X="24" Y="-75" Z="73" S="-180" T="368" R="47" G="118" B="0" A="255"/>
<Vtx X="17" Y="-75" Z="73" S="-180" T="368" R="96" G="84" B="0" A="255"/>
<Vtx X="24" Y="-75" Z="74" S="-177" T="382" R="47" G="109" B="45" A="255"/>
<Vtx X="17" Y="-75" Z="74" S="-177" T="382" R="96" G="77" B="32" A="255"/>
<Vtx X="24" Y="-76" Z="75" S="-169" T="393" R="47" G="84" B="84" A="255"/>
<Vtx X="17" Y="-75" Z="74" S="-177" T="382" R="96" G="77" B="32" A="255"/>
<Vtx X="17" Y="-76" Z="75" S="-169" T="393" R="96" G="59" B="59" A="255"/>
<Vtx X="24" Y="-76" Z="75" S="-169" T="393" R="47" G="84" B="84" A="255"/>
<Vtx X="24" Y="-77" Z="76" S="-158" T="401" R="47" G="45" B="109" A="255"/>
<Vtx X="17" Y="-77" Z="76" S="-158" T="401" R="96" G="32" B="77" A="255"/>
<Vtx X="24" Y="-78" Z="76" S="-144" T="404" R="47" G="0" B="118" A="255"/>
<Vtx X="17" Y="-78" Z="76" S="-144" T="404" R="96" G="0" B="84" A="255"/>
<Vtx X="24" Y="-79" Z="76" S="-130" T="401" R="47" G="211" B="109" A="255"/>
<Vtx X="17" Y="-79" Z="76" S="-130" T="401" R="96" G="224" B="77" A="255"/>
<Vtx X="24" Y="-80" Z="75" S="-119" T="393" R="47" G="172" B="84" A="255"/>
<Vtx X="17" Y="-80" Z="75" S="-119" T="393" R="96" G="197" B="59" A="255"/>
<Vtx X="24" Y="-81" Z="74" S="-111" T="382" R="47" G="147" B="45" A="255"/>
<Vtx X="17" Y="-81" Z="74" S="-111" T="382" R="96" G="179" B="32" A="255"/>
<Vtx X="24" Y="-81" Z="73" S="-108" T="368" R="47" G="138" B="0" A="255"/>
<Vtx X="17" Y="-81" Z="73" S="-108" T="368" R="96" G="172" B="0" A="255"/>
<Vtx X="24" Y="-81" Z="72" S="-111" T="354" R="47" G="147" B="211" A="255"/>
<Vtx X="17" Y="-81" Z="72" S="-111" T="354" R="96" G="179" B="224" A="255"/>
<Vtx X="24" Y="-80" Z="71" S="-119" T="343" R="47" G="172" B="172" A="255"/>
<Vtx X="17" Y="-80" Z="71" S="-119" T="343" R="96" G="197" B="197" A="255"/>
<Vtx X="24" Y="-79" Z="70" S="-130" T="335" R="47" G="211" B="147" A="255"/>
<Vtx X="17" Y="-79" Z="70" S="-130" T="335" R="96" G="224" B="179" A="255"/>
<Vtx X="24" Y="-78" Z="70" S="-144" T="332" R="47" G="0" B="138" A="255"/>
<Vtx X="17" Y="-78" Z="70" S="-144" T="332" R="96" G="0" B="172" A="255"/>
<Vtx X="24" Y="-77" Z="70" S="-158" T="335" R="47" G="45" B="147" A="255"/>
<Vtx X="25" Y="-77" Z="71" S="-155" T="340" R="116" G="20" B="207" A="255"/>
<Vtx X="25" Y="-76" Z="71" S="-165" T="347" R="116" G="37" B="219" A="255"/>
<Vtx X="24" Y="-76" Z="71" S="-169" T="343" R="47" G="84" B="172" A="255"/>
<Vtx X="25" Y="-76" Z="72" S="-172" T="357" R="116" G="49" B="236" A="255"/>
<Vtx X="24" Y="-75" Z="72" S="-177" T="354" R="47" G="109" B="211" A="255"/>
<Vtx X="25" Y="-75" Z="73" S="-174" T="368" R="116" G="53" B="0" A="255"/>
<Vtx X="24" Y="-75" Z="73" S="-180" T="368" R="47" G="118" B="0" A="255"/>
<Vtx X="25" Y="-76" Z="74" S="-172" T="379" R="116" G="49" B="20" A="255"/>
<Vtx X="24" Y="-75" Z="73" S="-180" T="368" R="47" G="118" B="0" A="255"/>
<Vtx X="24" Y="-75" Z="74" S="-177" T="382" R="47" G="109" B="45" A="255"/>
<Vtx X="25" Y="-76" Z="74" S="-172" T="379" R="116" G="49" B="20" A="255"/>
<Vtx X="25" Y="-76" Z="75" S="-165" T="389" R="116" G="37" B="37" A="255"/>
<Vtx X="24" Y="-76" Z="75" S="-169" T="393" R="47" G="84" B="84" A="255"/>
<Vtx X="25" Y="-77" Z="75" S="-155" T="396" R="116" G="20" B="49" A="255"/>
<Vtx X="24" Y="-77" Z="76" S="-158" T="401" R="47" G="45" B="109" A="255"/>
<Vtx X="25" Y="-78" Z="75" S="-144" T="398" R="116" G="0" B="53" A="255"/>
<Vtx X="24" Y="-78" Z="76" S="-144" T="404" R="47" G="0" B="118" A="255"/>
<Vtx X="25" Y="-79" Z="75" S="-133" T="396" R="116" G="236" B="49" A="255"/>
<Vtx X="24" Y="-79" Z="76" S="-130" T="401" R="47" G="211" B="109" A="255"/>
<Vtx X="25" Y="-80" Z="75" S="-123" T="389" R="116" G="219" B="37" A="255"/>
<Vtx X="24" Y="-80" Z="75" S="-119" T="393" R="47" G="172" B="84" A="255"/>
<Vtx X="25" Y="-80" Z="74" S="-116" T="379" R="116" G="207" B="20" A="255"/>
<Vtx X="24" Y="-81" Z="74" S="-111" T="382" R="47" G="147" B="45" A="255"/>
<Vtx X="25" Y="-80" Z="73" S="-114" T="368" R="116" G="203" B="0" A="255"/>
<Vtx X="24" Y="-81" Z="73" S="-108" T="368" R="47" G="138" B="0" A="255"/>
<Vtx X="25" Y="-80" Z="72" S="-116" T="357" R="116" G="207" B="236" A="255"/>
<Vtx X="24" Y="-81" Z="72" S="-111" T="354" R="47" G="147" B="211" A="255"/>
<Vtx X="25" Y="-80" Z="71" S="-123" T="347" R="116" G="219" B="219" A="255"/>
<Vtx X="24" Y="-80" Z="71" S="-119" T="343" R="47" G="172" B="172" A="255"/>
<Vtx X="25" Y="-79" Z="71" S="-133" T="340" R="116" G="236" B="207" A="255"/>
<Vtx X="24" Y="-79" Z="70" S="-130" T="335" R="47" G="211" B="147" A="255"/>
<Vtx X="25" Y="-78" Z="70" S="-144" T="338" R="116" G="0" B="203" A="255"/>
<Vtx X="24" Y="-78" Z="70" S="-144" T="332" R="47" G="0" B="138" A="255"/>
<Vtx X="25" Y="-77" Z="71" S="-155" T="340" R="116" G="20" B="207" A="255"/>
<Vtx X="14" Y="-82" Z="68" S="-90" T="314" R="96" G="197" B="197" A="255"/>
<Vtx X="14" Y="-80" Z="67" S="-115" T="298" R="96" G="225" B="179" A="255"/>
<Vtx X="16" Y="-80" Z="67" S="-115" T="298" R="48" G="211" B="147" A="255"/>
<Vtx X="16" Y="-78" Z="67" S="-144" T="292" R="48" G="0" B="138" A="255"/>
<Vtx X="14" Y="-78" Z="67" S="-144" T="292" R="96" G="0" B="173" A="255"/>
<Vtx X="16" Y="-76" Z="67" S="-173" T="298" R="48" G="45" B="147" A="255"/>
<Vtx X="14" Y="-78" Z="67" S="-144" T="292" R="96" G="0" B="173" A="255"/>
<Vtx X="14" Y="-75" Z="67" S="-173" T="298" R="97" G="32" B="180" A="255"/>
<Vtx X="16" Y="-76" Z="67" S="-173" T="298" R="48" G="45" B="147" A="255"/>
<Vtx X="16" Y="-74" Z="68" S="-198" T="314" R="47" G="84" B="173" A="255"/>
<Vtx X="14" Y="-74" Z="68" S="-198" T="314" R="96" G="60" B="197" A="255"/>
<Vtx X="16" Y="-72" Z="70" S="-214" T="339" R="47" G="109" B="211" A="255"/>
<Vtx X="14" Y="-72" Z="70" S="-214" T="339" R="96" G="77" B="224" A="255"/>
<Vtx X="16" Y="-72" Z="73" S="-220" T="368" R="47" G="118" B="0" A="255"/>
<Vtx X="14" Y="-72" Z="73" S="-220" T="368" R="96" G="84" B="0" A="255"/>
<Vtx X="16" Y="-72" Z="75" S="-214" T="397" R="47" G="109" B="45" A="255"/>
<Vtx X="14" Y="-72" Z="75" S="-214" T="397" R="96" G="77" B="32" A="255"/>
<Vtx X="16" Y="-74" Z="77" S="-198" T="422" R="47" G="84" B="84" A="255"/>
<Vtx X="14" Y="-74" Z="77" S="-198" T="422" R="96" G="59" B="59" A="255"/>
<Vtx X="16" Y="-76" Z="79" S="-173" T="438" R="47" G="45" B="109" A="255"/>
<Vtx X="14" Y="-76" Z="79" S="-173" T="438" R="96" G="32" B="77" A="255"/>
<Vtx X="16" Y="-78" Z="79" S="-144" T="444" R="47" G="0" B="118" A="255"/>
<Vtx X="14" Y="-78" Z="79" S="-144" T="444" R="96" G="0" B="84" A="255"/>
<Vtx X="16" Y="-80" Z="79" S="-115" T="438" R="48" G="212" B="109" A="255"/>
<Vtx X="14" Y="-80" Z="79" S="-115" T="438" R="96" G="225" B="77" A="255"/>
<Vtx X="16" Y="-82" Z="77" S="-90" T="422" R="48" G="173" B="83" A="255"/>
<Vtx X="14" Y="-82" Z="77" S="-90" T="422" R="96" G="198" B="59" A="255"/>
<Vtx X="16" Y="-84" Z="75" S="-74" T="397" R="48" G="147" B="45" A="255"/>
<Vtx X="14" Y="-84" Z="75" S="-74" T="397" R="96" G="179" B="32" A="255"/>
<Vtx X="16" Y="-84" Z="73" S="-68" T="368" R="47" G="138" B="0" A="255"/>
<Vtx X="14" Y="-84" Z="73" S="-68" T="368" R="96" G="173" B="0" A="255"/>
<Vtx X="16" Y="-84" Z="70" S="-74" T="339" R="47" G="147" B="211" A="255"/>
<Vtx X="14" Y="-84" Z="70" S="-74" T="339" R="96" G="179" B="224" A="255"/>
<Vtx X="16" Y="-82" Z="68" S="-90" T="314" R="47" G="172" B="173" A="255"/>
<Vtx X="14" Y="-82" Z="68" S="-90" T="314" R="96" G="197" B="197" A="255"/>
<Vtx X="16" Y="-80" Z="67" S="-115" T="298" R="48" G="211" B="147" A="255"/>
<Vtx X="17" Y="-80" Z="68" S="-120" T="310" R="116" G="236" B="207" A="255"/>
<Vtx X="17" Y="-78" Z="68" S="-144" T="305" R="116" G="0" B="203" A="255"/>
<Vtx X="16" Y="-80" Z="67" S="-115" T="298" R="48" G="211" B="147" A="255"/>
<Vtx X="16" Y="-78" Z="67" S="-144" T="292" R="48" G="0" B="138" A="255"/>
<Vtx X="17" Y="-78" Z="68" S="-144" T="305" R="116" G="0" B="203" A="255"/>
<Vtx X="17" Y="-76" Z="68" S="-168" T="310" R="116" G="20" B="208" A="255"/>
<Vtx X="16" Y="-76" Z="67" S="-173" T="298" R="48" G="45" B="147" A="255"/>
<Vtx X="17" Y="-74" Z="69" S="-189" T="323" R="116" G="37" B="219" A="255"/>
<Vtx X="16" Y="-74" Z="68" S="-198" T="314" R="47" G="84" B="173" A="255"/>
<Vtx X="17" Y="-73" Z="71" S="-202" T="344" R="116" G="49" B="236" A="255"/>
<Vtx X="16" Y="-72" Z="70" S="-214" T="339" R="47" G="109" B="211" A="255"/>
<Vtx X="17" Y="-73" Z="73" S="-207" T="368" R="116" G="53" B="0" A="255"/>
<Vtx X="16" Y="-72" Z="73" S="-220" T="368" R="47" G="118" B="0" A="255"/>
<Vtx X="17" Y="-73" Z="75" S="-202" T="392" R="116" G="49" B="20" A="255"/>
<Vtx X="16" Y="-72" Z="75" S="-214" T="397" R="47" G="109" B="45" A="255"/>
<Vtx X="17" Y="-74" Z="76" S="-189" T="413" R="116" G="37" B="37" A="255"/>
<Vtx X="16" Y="-74" Z="77" S="-198" T="422" R="47" G="84" B="84" A="255"/>
<Vtx X="17" Y="-76" Z="78" S="-168" T="426" R="116" G="20" B="49" A="255"/>
<Vtx X="16" Y="-76" Z="79" S="-173" T="438" R="47" G="45" B="109" A="255"/>
<Vtx X="17" Y="-78" Z="78" S="-144" T="431" R="116" G="0" B="53" A="255"/>
<Vtx X="16" Y="-78" Z="79" S="-144" T="444" R="47" G="0" B="118" A="255"/>
<Vtx X="17" Y="-80" Z="78" S="-120" T="426" R="116" G="236" B="49" A="255"/>
<Vtx X="16" Y="-80" Z="79" S="-115" T="438" R="48" G="212" B="109" A="255"/>
<Vtx X="17" Y="-82" Z="76" S="-99" T="413" R="116" G="219" B="37" A="255"/>
<Vtx X="16" Y="-82" Z="77" S="-90" T="422" R="48" G="173" B="83" A="255"/>
<Vtx X="17" Y="-83" Z="75" S="-86" T="392" R="116" G="207" B="20" A="255"/>
<Vtx X="16" Y="-84" Z="75" S="-74" T="397" R="48" G="147" B="45" A="255"/>
<Vtx X="17" Y="-83" Z="73" S="-81" T="368" R="116" G="203" B="0" A="255"/>
<Vtx X="16" Y="-84" Z="73" S="-68" T="368" R="47" G="138" B="0" A="255"/>
<Vtx X="17" Y="-83" Z="71" S="-86" T="344" R="116" G="207" B="236" A="255"/>
<Vtx X="16" Y="-84" Z="70" S="-74" T="339" R="47" G="147" B="211" A="255"/>
<Vtx X="17" Y="-82" Z="69" S="-99" T="323" R="116" G="219" B="219" A="255"/>
<Vtx X="16" Y="-82" Z="68" S="-90" T="314" R="47" G="172" B="173" A="255"/>
<Vtx X="17" Y="-80" Z="68" S="-120" T="310" R="116" G="236" B="207" A="255"/>
</Vertex>

View File

@ -0,0 +1,62 @@
<Vertex Version="0">
<Vtx X="-15" Y="-78" Z="57" S="-832" T="-1029" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-84" Z="58" S="-757" T="-1014" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-78" Z="73" S="-832" T="-832" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-89" Z="84" S="-693" T="-693" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-84" Z="88" S="-757" T="-650" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-84" Z="58" S="-757" T="-1014" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-89" Z="61" S="-693" T="-971" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-78" Z="73" S="-832" T="-832" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-93" Z="67" S="-650" T="-907" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-94" Z="73" S="-635" T="-832" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-93" Z="79" S="-650" T="-757" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-89" Z="84" S="-693" T="-693" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-84" Z="88" S="-757" T="-650" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-78" Z="89" S="-832" T="-635" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-72" Z="88" S="-907" T="-650" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-67" Z="84" S="-971" T="-693" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-63" Z="79" S="-1014" T="-757" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-62" Z="73" S="-1029" T="-832" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-63" Z="67" S="-1014" T="-907" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-67" Z="61" S="-971" T="-971" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-72" Z="58" S="-907" T="-1014" R="129" G="0" B="0" A="255"/>
<Vtx X="-15" Y="-78" Z="57" S="-832" T="-1029" R="129" G="0" B="0" A="255"/>
<Vtx X="14" Y="-80" Z="79" S="-1315" T="-762" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-78" Z="79" S="-1344" T="-756" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-78" Z="89" S="-1344" T="-635" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-84" Z="88" S="-1269" T="-650" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-82" Z="77" S="-1290" T="-778" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-89" Z="84" S="-1205" T="-693" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-84" Z="75" S="-1274" T="-803" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-93" Z="79" S="-1162" T="-757" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-84" Z="73" S="-1268" T="-832" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-94" Z="73" S="-1147" T="-832" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-84" Z="70" S="-1274" T="-861" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-84" Z="73" S="-1268" T="-832" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-94" Z="73" S="-1147" T="-832" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-93" Z="67" S="-1162" T="-907" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-82" Z="68" S="-1290" T="-886" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-89" Z="61" S="-1205" T="-971" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-80" Z="67" S="-1315" T="-902" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-84" Z="58" S="-1269" T="-1014" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-78" Z="67" S="-1344" T="-908" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-78" Z="57" S="-1344" T="-1029" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-75" Z="67" S="-1373" T="-902" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-72" Z="58" S="-1419" T="-1014" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-74" Z="68" S="-1398" T="-886" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-67" Z="61" S="-1483" T="-971" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-72" Z="70" S="-1414" T="-861" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-63" Z="67" S="-1526" T="-907" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-72" Z="73" S="-1420" T="-832" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-62" Z="73" S="-1541" T="-832" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-72" Z="75" S="-1414" T="-803" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-63" Z="79" S="-1526" T="-757" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-74" Z="77" S="-1398" T="-778" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-67" Z="84" S="-1483" T="-693" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-76" Z="79" S="-1373" T="-762" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-72" Z="88" S="-1419" T="-650" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-78" Z="79" S="-1344" T="-756" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-76" Z="79" S="-1373" T="-762" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-72" Z="88" S="-1419" T="-650" R="127" G="0" B="0" A="255"/>
<Vtx X="14" Y="-78" Z="89" S="-1344" T="-635" R="127" G="0" B="0" A="255"/>
</Vertex>

View File

@ -0,0 +1,72 @@
<Vertex Version="0">
<Vtx X="-10" Y="-72" Z="58" S="48" T="368" R="95" G="31" B="178" A="255"/>
<Vtx X="0" Y="-78" Z="57" S="-16" T="240" R="0" G="0" B="129" A="255"/>
<Vtx X="-10" Y="-78" Z="57" S="-16" T="368" R="96" G="0" B="172" A="255"/>
<Vtx X="0" Y="-71" Z="58" S="48" T="240" R="0" G="48" B="138" A="255"/>
<Vtx X="-10" Y="-67" Z="61" S="112" T="368" R="95" G="59" B="195" A="255"/>
<Vtx X="0" Y="-66" Z="61" S="112" T="240" R="0" G="89" B="166" A="255"/>
<Vtx X="-10" Y="-63" Z="67" S="176" T="368" R="94" G="79" B="222" A="255"/>
<Vtx X="0" Y="-62" Z="67" S="176" T="240" R="0" G="117" B="207" A="255"/>
<Vtx X="-10" Y="-62" Z="73" S="240" T="368" R="93" G="87" B="0" A="255"/>
<Vtx X="0" Y="-61" Z="73" S="240" T="240" R="0" G="127" B="0" A="255"/>
<Vtx X="-10" Y="-63" Z="79" S="304" T="368" R="94" G="79" B="34" A="255"/>
<Vtx X="0" Y="-62" Z="79" S="304" T="240" R="0" G="117" B="49" A="255"/>
<Vtx X="-10" Y="-67" Z="84" S="368" T="368" R="95" G="59" B="61" A="255"/>
<Vtx X="0" Y="-66" Z="84" S="368" T="240" R="0" G="89" B="90" A="255"/>
<Vtx X="-10" Y="-72" Z="88" S="432" T="368" R="95" G="31" B="78" A="255"/>
<Vtx X="0" Y="-71" Z="88" S="432" T="240" R="0" G="48" B="118" A="255"/>
<Vtx X="-10" Y="-78" Z="89" S="496" T="368" R="96" G="0" B="84" A="255"/>
<Vtx X="0" Y="-78" Z="89" S="496" T="240" R="0" G="0" B="127" A="255"/>
<Vtx X="-10" Y="-84" Z="88" S="560" T="368" R="95" G="225" B="78" A="255"/>
<Vtx X="0" Y="-84" Z="88" S="560" T="240" R="0" G="208" B="118" A="255"/>
<Vtx X="-10" Y="-89" Z="84" S="624" T="368" R="95" G="197" B="61" A="255"/>
<Vtx X="0" Y="-90" Z="84" S="624" T="240" R="0" G="167" B="90" A="255"/>
<Vtx X="-10" Y="-93" Z="79" S="688" T="368" R="94" G="177" B="34" A="255"/>
<Vtx X="0" Y="-93" Z="79" S="688" T="240" R="0" G="139" B="49" A="255"/>
<Vtx X="-10" Y="-94" Z="73" S="752" T="368" R="93" G="169" B="0" A="255"/>
<Vtx X="0" Y="-95" Z="73" S="752" T="240" R="0" G="129" B="0" A="255"/>
<Vtx X="-10" Y="-93" Z="67" S="816" T="368" R="94" G="177" B="222" A="255"/>
<Vtx X="0" Y="-93" Z="67" S="816" T="240" R="0" G="139" B="207" A="255"/>
<Vtx X="-10" Y="-89" Z="61" S="880" T="368" R="95" G="197" B="195" A="255"/>
<Vtx X="0" Y="-90" Z="61" S="880" T="240" R="0" G="167" B="166" A="255"/>
<Vtx X="-10" Y="-84" Z="58" S="944" T="368" R="95" G="225" B="178" A="255"/>
<Vtx X="0" Y="-84" Z="58" S="944" T="240" R="0" G="208" B="138" A="255"/>
<Vtx X="-10" Y="-78" Z="57" S="1008" T="368" R="96" G="0" B="172" A="255"/>
<Vtx X="0" Y="-84" Z="58" S="944" T="240" R="0" G="208" B="138" A="255"/>
<Vtx X="-10" Y="-84" Z="58" S="944" T="368" R="95" G="225" B="178" A="255"/>
<Vtx X="0" Y="-78" Z="57" S="1008" T="240" R="0" G="0" B="129" A="255"/>
<Vtx X="10" Y="-84" Z="58" S="944" T="112" R="161" G="225" B="178" A="255"/>
<Vtx X="10" Y="-78" Z="57" S="1008" T="112" R="160" G="0" B="172" A="255"/>
<Vtx X="10" Y="-89" Z="61" S="880" T="112" R="161" G="197" B="195" A="255"/>
<Vtx X="0" Y="-90" Z="61" S="880" T="240" R="0" G="167" B="166" A="255"/>
<Vtx X="10" Y="-93" Z="67" S="816" T="112" R="162" G="177" B="222" A="255"/>
<Vtx X="0" Y="-93" Z="67" S="816" T="240" R="0" G="139" B="207" A="255"/>
<Vtx X="10" Y="-94" Z="73" S="752" T="112" R="163" G="169" B="0" A="255"/>
<Vtx X="0" Y="-95" Z="73" S="752" T="240" R="0" G="129" B="0" A="255"/>
<Vtx X="10" Y="-93" Z="79" S="688" T="112" R="162" G="177" B="34" A="255"/>
<Vtx X="0" Y="-93" Z="79" S="688" T="240" R="0" G="139" B="49" A="255"/>
<Vtx X="10" Y="-89" Z="84" S="624" T="112" R="161" G="197" B="61" A="255"/>
<Vtx X="0" Y="-90" Z="84" S="624" T="240" R="0" G="167" B="90" A="255"/>
<Vtx X="10" Y="-84" Z="88" S="560" T="112" R="161" G="225" B="78" A="255"/>
<Vtx X="0" Y="-84" Z="88" S="560" T="240" R="0" G="208" B="118" A="255"/>
<Vtx X="10" Y="-78" Z="89" S="496" T="112" R="160" G="0" B="84" A="255"/>
<Vtx X="0" Y="-78" Z="89" S="496" T="240" R="0" G="0" B="127" A="255"/>
<Vtx X="10" Y="-72" Z="88" S="432" T="112" R="161" G="31" B="78" A="255"/>
<Vtx X="0" Y="-71" Z="88" S="432" T="240" R="0" G="48" B="118" A="255"/>
<Vtx X="10" Y="-67" Z="84" S="368" T="112" R="161" G="59" B="61" A="255"/>
<Vtx X="0" Y="-66" Z="84" S="368" T="240" R="0" G="89" B="90" A="255"/>
<Vtx X="10" Y="-63" Z="79" S="304" T="112" R="162" G="79" B="34" A="255"/>
<Vtx X="0" Y="-62" Z="79" S="304" T="240" R="0" G="117" B="49" A="255"/>
<Vtx X="10" Y="-62" Z="73" S="240" T="112" R="163" G="87" B="0" A="255"/>
<Vtx X="0" Y="-61" Z="73" S="240" T="240" R="0" G="127" B="0" A="255"/>
<Vtx X="10" Y="-63" Z="67" S="176" T="112" R="162" G="79" B="222" A="255"/>
<Vtx X="0" Y="-62" Z="67" S="176" T="240" R="0" G="117" B="207" A="255"/>
<Vtx X="10" Y="-67" Z="61" S="112" T="112" R="161" G="59" B="195" A="255"/>
<Vtx X="0" Y="-66" Z="61" S="112" T="240" R="0" G="89" B="166" A="255"/>
<Vtx X="0" Y="-66" Z="61" S="112" T="240" R="0" G="89" B="166" A="255"/>
<Vtx X="10" Y="-67" Z="61" S="112" T="112" R="161" G="59" B="195" A="255"/>
<Vtx X="10" Y="-72" Z="58" S="48" T="112" R="161" G="31" B="178" A="255"/>
<Vtx X="0" Y="-71" Z="58" S="48" T="240" R="0" G="48" B="138" A="255"/>
<Vtx X="10" Y="-78" Z="57" S="-16" T="112" R="160" G="0" B="172" A="255"/>
<Vtx X="0" Y="-78" Z="57" S="-16" T="240" R="0" G="0" B="129" A="255"/>
</Vertex>

View File

@ -0,0 +1,147 @@
<Vertex Version="0">
<Vtx X="24" Y="-147" Z="233" S="-138" T="-288" R="68" G="63" B="87" A="255"/>
<Vtx X="21" Y="-144" Z="227" S="-95" T="-523" R="188" G="104" B="28" A="255"/>
<Vtx X="21" Y="-147" Z="233" S="-138" T="-523" R="188" G="63" B="87" A="255"/>
<Vtx X="24" Y="-144" Z="227" S="-95" T="-288" R="68" G="104" B="28" A="255"/>
<Vtx X="24" Y="-148" Z="232" S="-138" T="-266" R="121" G="4" B="38" A="255"/>
<Vtx X="24" Y="-144" Z="227" S="-95" T="-266" R="125" G="24" B="5" A="255"/>
<Vtx X="24" Y="-155" Z="228" S="-138" T="-33" R="121" G="220" B="15" A="255"/>
<Vtx X="24" Y="-152" Z="223" S="-95" T="-33" R="125" G="240" B="237" A="255"/>
<Vtx X="24" Y="-155" Z="228" S="-138" T="-11" R="68" G="149" B="244" A="255"/>
<Vtx X="24" Y="-152" Z="223" S="-95" T="-11" R="68" G="181" B="180" A="255"/>
<Vtx X="21" Y="-155" Z="228" S="-138" T="224" R="188" G="149" B="244" A="255"/>
<Vtx X="21" Y="-152" Z="223" S="-95" T="224" R="188" G="181" B="180" A="255"/>
<Vtx X="21" Y="-155" Z="228" S="-138" T="246" R="135" G="220" B="15" A="255"/>
<Vtx X="21" Y="-152" Z="223" S="-95" T="246" R="131" G="240" B="237" A="255"/>
<Vtx X="21" Y="-148" Z="232" S="-138" T="479" R="135" G="4" B="38" A="255"/>
<Vtx X="21" Y="-144" Z="227" S="-95" T="479" R="131" G="24" B="5" A="255"/>
<Vtx X="21" Y="-147" Z="233" S="-138" T="491" R="188" G="63" B="87" A="255"/>
<Vtx X="21" Y="-144" Z="227" S="-95" T="491" R="188" G="104" B="28" A="255"/>
<Vtx X="21" Y="-144" Z="223" S="-82" T="469" R="130" G="16" B="5" A="255"/>
<Vtx X="21" Y="-144" Z="223" S="-82" T="491" R="176" G="96" B="23" A="255"/>
<Vtx X="21" Y="-132" Z="201" S="69" T="469" R="130" G="12" B="12" A="255"/>
<Vtx X="21" Y="-131" Z="201" S="69" T="491" R="176" G="69" B="71" A="255"/>
<Vtx X="21" Y="-131" Z="201" S="77" T="474" R="131" G="16" B="18" A="255"/>
<Vtx X="21" Y="-130" Z="201" S="77" T="491" R="188" G="76" B="75" A="255"/>
<Vtx X="21" Y="-129" Z="198" S="99" T="474" R="134" G="33" B="246" A="255"/>
<Vtx X="21" Y="-128" Z="198" S="99" T="491" R="186" G="104" B="21" A="255"/>
<Vtx X="21" Y="-133" Z="195" S="99" T="251" R="134" G="249" B="223" A="255"/>
<Vtx X="21" Y="-135" Z="198" S="77" T="251" R="131" G="232" B="251" A="255"/>
<Vtx X="21" Y="-134" Z="195" S="99" T="224" R="186" G="187" B="176" A="255"/>
<Vtx X="21" Y="-136" Z="198" S="77" T="224" R="188" G="153" B="227" A="255"/>
<Vtx X="24" Y="-134" Z="195" S="99" T="-11" R="70" G="187" B="176" A="255"/>
<Vtx X="24" Y="-136" Z="198" S="77" T="-11" R="68" G="153" B="227" A="255"/>
<Vtx X="24" Y="-133" Z="195" S="99" T="-38" R="122" G="249" B="223" A="255"/>
<Vtx X="24" Y="-136" Z="198" S="77" T="-11" R="68" G="153" B="227" A="255"/>
<Vtx X="24" Y="-134" Z="195" S="99" T="-11" R="70" G="187" B="176" A="255"/>
<Vtx X="24" Y="-135" Z="198" S="77" T="-38" R="125" G="232" B="251" A="255"/>
<Vtx X="24" Y="-129" Z="198" S="99" T="-261" R="122" G="33" B="246" A="255"/>
<Vtx X="24" Y="-133" Z="194" S="108" T="-45" R="114" G="15" B="202" A="255"/>
<Vtx X="24" Y="-129" Z="197" S="108" T="-253" R="114" G="39" B="216" A="255"/>
<Vtx X="24" Y="-133" Z="194" S="126" T="-31" R="52" G="7" B="140" A="255"/>
<Vtx X="24" Y="-128" Z="196" S="126" T="-268" R="52" G="97" B="193" A="255"/>
<Vtx X="21" Y="-128" Z="196" S="343" T="-268" R="204" G="97" B="193" A="255"/>
<Vtx X="21" Y="-133" Z="194" S="343" T="-31" R="204" G="7" B="140" A="255"/>
<Vtx X="24" Y="-134" Z="195" S="117" T="-21" R="70" G="187" B="176" A="255"/>
<Vtx X="24" Y="-133" Z="194" S="112" T="-29" R="114" G="15" B="202" A="255"/>
<Vtx X="24" Y="-133" Z="195" S="108" T="-23" R="122" G="249" B="223" A="255"/>
<Vtx X="21" Y="-134" Z="195" S="352" T="-21" R="186" G="187" B="176" A="255"/>
<Vtx X="21" Y="-133" Z="195" S="363" T="-38" R="134" G="249" B="223" A="255"/>
<Vtx X="21" Y="-133" Z="194" S="358" T="-45" R="142" G="15" B="202" A="255"/>
<Vtx X="21" Y="-129" Z="197" S="358" T="-253" R="142" G="39" B="216" A="255"/>
<Vtx X="21" Y="-129" Z="198" S="363" T="-261" R="134" G="33" B="246" A="255"/>
<Vtx X="21" Y="-128" Z="198" S="352" T="-277" R="186" G="104" B="21" A="255"/>
<Vtx X="24" Y="-128" Z="198" S="117" T="-277" R="70" G="104" B="21" A="255"/>
<Vtx X="24" Y="-129" Z="198" S="108" T="-275" R="122" G="33" B="246" A="255"/>
<Vtx X="24" Y="-129" Z="197" S="112" T="-269" R="114" G="39" B="216" A="255"/>
<Vtx X="24" Y="-150" Z="233" S="-157" T="-254" R="111" G="236" B="59" A="255"/>
<Vtx X="24" Y="-155" Z="228" S="-138" T="-33" R="121" G="220" B="15" A="255"/>
<Vtx X="24" Y="-148" Z="232" S="-138" T="-266" R="121" G="4" B="38" A="255"/>
<Vtx X="24" Y="-154" Z="230" S="-157" T="-45" R="110" G="214" B="47" A="255"/>
<Vtx X="24" Y="-150" Z="233" S="-177" T="-266" R="49" G="237" B="116" A="255"/>
<Vtx X="24" Y="-154" Z="231" S="-177" T="-33" R="49" G="165" B="73" A="255"/>
<Vtx X="22" Y="-154" Z="231" S="-377" T="-33" R="207" G="165" B="73" A="255"/>
<Vtx X="22" Y="-150" Z="233" S="-377" T="-266" R="207" G="237" B="116" A="255"/>
<Vtx X="24" Y="-147" Z="233" S="-160" T="-277" R="68" G="63" B="87" A="255"/>
<Vtx X="24" Y="-147" Z="233" S="-160" T="-277" R="68" G="63" B="87" A="255"/>
<Vtx X="24" Y="-150" Z="233" S="-177" T="-266" R="49" G="237" B="116" A="255"/>
<Vtx X="24" Y="-150" Z="233" S="-160" T="-267" R="111" G="236" B="59" A="255"/>
<Vtx X="24" Y="-148" Z="232" S="-151" T="-276" R="121" G="4" B="38" A="255"/>
<Vtx X="22" Y="-150" Z="233" S="-377" T="-266" R="207" G="237" B="116" A="255"/>
<Vtx X="21" Y="-147" Z="233" S="-395" T="-277" R="188" G="63" B="87" A="255"/>
<Vtx X="21" Y="-148" Z="232" S="-405" T="-266" R="135" G="4" B="38" A="255"/>
<Vtx X="22" Y="-150" Z="233" S="-396" T="-254" R="145" G="236" B="59" A="255"/>
<Vtx X="22" Y="-154" Z="230" S="-396" T="-45" R="146" G="214" B="47" A="255"/>
<Vtx X="21" Y="-155" Z="228" S="-405" T="-33" R="135" G="220" B="15" A="255"/>
<Vtx X="21" Y="-155" Z="228" S="-395" T="-21" R="188" G="149" B="244" A="255"/>
<Vtx X="22" Y="-154" Z="231" S="-377" T="-33" R="207" G="165" B="73" A="255"/>
<Vtx X="24" Y="-154" Z="231" S="-177" T="-33" R="49" G="165" B="73" A="255"/>
<Vtx X="24" Y="-155" Z="228" S="-160" T="-21" R="68" G="149" B="244" A="255"/>
<Vtx X="24" Y="-155" Z="228" S="-151" T="-23" R="121" G="220" B="15" A="255"/>
<Vtx X="24" Y="-154" Z="230" S="-160" T="-32" R="110" G="214" B="47" A="255"/>
<Vtx X="24" Y="-144" Z="227" S="-95" T="-288" R="68" G="104" B="28" A="255"/>
<Vtx X="21" Y="-144" Z="223" S="-82" T="-523" R="176" G="96" B="23" A="255"/>
<Vtx X="21" Y="-144" Z="227" S="-95" T="-523" R="188" G="104" B="28" A="255"/>
<Vtx X="24" Y="-144" Z="223" S="-82" T="-288" R="80" G="96" B="23" A="255"/>
<Vtx X="24" Y="-144" Z="227" S="-95" T="-266" R="125" G="24" B="5" A="255"/>
<Vtx X="24" Y="-144" Z="223" S="-82" T="-255" R="126" G="16" B="5" A="255"/>
<Vtx X="24" Y="-152" Z="223" S="-95" T="-33" R="125" G="240" B="237" A="255"/>
<Vtx X="24" Y="-148" Z="221" S="-82" T="-43" R="126" G="244" B="244" A="255"/>
<Vtx X="24" Y="-152" Z="223" S="-95" T="-11" R="68" G="181" B="180" A="255"/>
<Vtx X="24" Y="-148" Z="221" S="-82" T="-11" R="80" G="188" B="184" A="255"/>
<Vtx X="21" Y="-152" Z="223" S="-95" T="224" R="188" G="181" B="180" A="255"/>
<Vtx X="21" Y="-148" Z="221" S="-82" T="224" R="176" G="188" B="184" A="255"/>
<Vtx X="21" Y="-152" Z="223" S="-95" T="246" R="131" G="240" B="237" A="255"/>
<Vtx X="21" Y="-148" Z="221" S="-82" T="257" R="130" G="244" B="244" A="255"/>
<Vtx X="21" Y="-144" Z="227" S="-95" T="479" R="131" G="24" B="5" A="255"/>
<Vtx X="21" Y="-144" Z="223" S="-82" T="469" R="130" G="16" B="5" A="255"/>
<Vtx X="21" Y="-144" Z="223" S="-82" T="469" R="130" G="16" B="5" A="255"/>
<Vtx X="21" Y="-135" Z="199" S="69" T="257" R="130" G="240" B="251" A="255"/>
<Vtx X="21" Y="-148" Z="221" S="-82" T="257" R="130" G="244" B="244" A="255"/>
<Vtx X="21" Y="-132" Z="201" S="69" T="469" R="130" G="12" B="12" A="255"/>
<Vtx X="21" Y="-135" Z="198" S="77" T="251" R="131" G="232" B="251" A="255"/>
<Vtx X="21" Y="-131" Z="201" S="77" T="474" R="131" G="16" B="18" A="255"/>
<Vtx X="21" Y="-136" Z="198" S="77" T="224" R="188" G="153" B="227" A="255"/>
<Vtx X="21" Y="-136" Z="199" S="69" T="224" R="176" G="160" B="232" A="255"/>
<Vtx X="24" Y="-136" Z="198" S="77" T="-11" R="68" G="153" B="227" A="255"/>
<Vtx X="24" Y="-136" Z="199" S="69" T="-11" R="80" G="160" B="232" A="255"/>
<Vtx X="24" Y="-135" Z="198" S="77" T="-38" R="125" G="232" B="251" A="255"/>
<Vtx X="24" Y="-135" Z="199" S="69" T="-43" R="126" G="240" B="251" A="255"/>
<Vtx X="24" Y="-131" Z="201" S="77" T="-261" R="125" G="16" B="18" A="255"/>
<Vtx X="24" Y="-129" Z="198" S="99" T="-261" R="122" G="33" B="246" A="255"/>
<Vtx X="24" Y="-128" Z="198" S="99" T="-288" R="70" G="104" B="21" A="255"/>
<Vtx X="24" Y="-130" Z="201" S="77" T="-288" R="68" G="76" B="75" A="255"/>
<Vtx X="21" Y="-128" Z="198" S="99" T="-523" R="186" G="104" B="21" A="255"/>
<Vtx X="21" Y="-130" Z="201" S="77" T="-523" R="188" G="76" B="75" A="255"/>
<Vtx X="24" Y="-131" Z="201" S="69" T="-288" R="80" G="69" B="71" A="255"/>
<Vtx X="21" Y="-131" Z="201" S="69" T="-523" R="176" G="69" B="71" A="255"/>
<Vtx X="24" Y="-144" Z="223" S="-82" T="-288" R="80" G="96" B="23" A="255"/>
<Vtx X="21" Y="-144" Z="223" S="-82" T="-523" R="176" G="96" B="23" A="255"/>
<Vtx X="24" Y="-144" Z="223" S="-82" T="-255" R="126" G="16" B="5" A="255"/>
<Vtx X="24" Y="-132" Z="201" S="69" T="-255" R="126" G="12" B="12" A="255"/>
<Vtx X="24" Y="-148" Z="221" S="-82" T="-43" R="126" G="244" B="244" A="255"/>
<Vtx X="24" Y="-148" Z="221" S="-82" T="-11" R="80" G="188" B="184" A="255"/>
<Vtx X="21" Y="-148" Z="221" S="-82" T="224" R="176" G="188" B="184" A="255"/>
<Vtx X="20" Y="-130" Z="197" S="22" T="112" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-132" Z="196" S="235" T="-11" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-134" Z="197" S="448" T="112" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-132" Z="200" S="235" T="480" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-134" Z="199" S="448" T="358" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-132" Z="200" S="235" T="480" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-130" Z="199" S="22" T="358" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-130" Z="197" S="22" T="112" R="129" G="0" B="0" A="255"/>
<Vtx X="20" Y="-130" Z="197" S="-363" T="-21" R="178" G="87" B="206" A="255"/>
<Vtx X="27" Y="-132" Z="196" S="-533" T="-280" R="190" G="0" B="147" A="255"/>
<Vtx X="20" Y="-132" Z="196" S="-533" T="-21" R="178" G="0" B="155" A="255"/>
<Vtx X="27" Y="-130" Z="197" S="-363" T="-280" R="190" G="94" B="202" A="255"/>
<Vtx X="20" Y="-130" Z="199" S="-192" T="-21" R="178" G="87" B="50" A="255"/>
<Vtx X="27" Y="-130" Z="199" S="-192" T="-280" R="190" G="94" B="54" A="255"/>
<Vtx X="20" Y="-132" Z="200" S="-21" T="-21" R="178" G="0" B="101" A="255"/>
<Vtx X="27" Y="-132" Z="200" S="-21" T="-280" R="190" G="0" B="109" A="255"/>
<Vtx X="20" Y="-134" Z="199" S="149" T="-21" R="178" G="169" B="50" A="255"/>
<Vtx X="27" Y="-134" Z="199" S="149" T="-280" R="190" G="162" B="54" A="255"/>
<Vtx X="20" Y="-134" Z="197" S="320" T="-21" R="178" G="169" B="206" A="255"/>
<Vtx X="27" Y="-134" Z="197" S="320" T="-280" R="190" G="162" B="202" A="255"/>
<Vtx X="20" Y="-132" Z="196" S="491" T="-21" R="178" G="0" B="155" A="255"/>
<Vtx X="27" Y="-132" Z="196" S="491" T="-280" R="190" G="0" B="147" A="255"/>
</Vertex>

View File

@ -0,0 +1,10 @@
<Vertex Version="0">
<Vtx X="-15" Y="-163" Z="-152" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
<Vtx X="-15" Y="-163" Z="148" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
<Vtx X="-15" Y="173" Z="148" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
<Vtx X="-15" Y="173" Z="-152" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
<Vtx X="33" Y="-163" Z="-152" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
<Vtx X="33" Y="-163" Z="148" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
<Vtx X="33" Y="173" Z="148" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
<Vtx X="33" Y="173" Z="-152" S="-16" T="-16" R="0" G="0" B="0" A="0"/>
</Vertex>

View File

@ -0,0 +1,12 @@
<DisplayList Version="0">
<PipeSync/>
<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_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" />
<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"/>
<SetPrimColor M="0" L="0" R="0" G="0" B="0" A="255"/>
<EndDisplayList/>
</DisplayList>

View File

@ -0,0 +1,21 @@
<DisplayList Version="0">
<PipeSync/>
<SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_SHADE" D0="G_CCMUX_0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_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_gi_fishing_pole/fishing_lure_float_rgba16_png" 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_CLAMP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_CLAMP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="4" ShiftT="0"/>
<LoadSync/>
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="511" 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_CLAMP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_CLAMP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="4" ShiftT="0"/>
<SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="60"/>
<SetPrimColor M="0" L="0" R="255" G="255" B="255" A="255"/>
<EndDisplayList/>
</DisplayList>

View File

@ -0,0 +1,12 @@
<DisplayList Version="0">
<PipeSync/>
<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_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_COMBINED" Ab1="G_ACMUX_0" Ac1="G_ACMUX_PRIMITIVE" Ad1="G_ACMUX_0"/>
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_XLU_SURF2="1" />
<Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
<SetPrimColor M="0" L="0" R="255" G="255" B="255" A="55"/>
<EndDisplayList/>
</DisplayList>

View File

@ -0,0 +1,22 @@
<DisplayList Version="0">
<PipeSync/>
<SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_PRIMITIVE" C0="G_CCMUX_PRIM_LOD_FRAC" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_1" Ab0="G_ACMUX_1" Ac0="G_ACMUX_PRIM_LOD_FRAC" Ad0="G_ACMUX_1" A1="G_CCMUX_PRIMITIVE" B1="G_CCMUX_ENVIRONMENT" C1="G_CCMUX_COMBINED" D1="G_CCMUX_ENVIRONMENT" Aa1="G_ACMUX_1" Ab1="G_ACMUX_1" Ac1="G_ACMUX_PRIM_LOD_FRAC" Ad1="G_ACMUX_1"/>
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_TEXTURE_GEN_LINEAR="1" G_SHADING_SMOOTH="1" />
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_PASS="1" G_RM_AA_ZB_TEX_EDGE2="1" />
<Texture S="655" T="655" Level="0" Tile="0" On="1"/>
<SetTextureLUT Mode="G_TT_NONE"/>
<TileSync/>
<SetTextureImage Path="objects/object_gi_fishing_pole/eff_unknown_10_i8" Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Width="1"/>
<SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="1"/>
<LoadSync/>
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="511" Dxt="512"/>
<PipeSync/>
<SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b" Line="4" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="1"/>
<SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
<SetPrimColor M="0" L="128" R="0" G="134" B="241" A="255"/>
<SetEnvColor R="0" G="93" B="169" A="255"/>
<EndDisplayList/>
</DisplayList>

View File

@ -0,0 +1,22 @@
<DisplayList Version="0">
<PipeSync/>
<SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_PRIMITIVE" C0="G_CCMUX_PRIM_LOD_FRAC" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_1" Ab0="G_ACMUX_1" Ac0="G_ACMUX_PRIM_LOD_FRAC" Ad0="G_ACMUX_1" A1="G_CCMUX_PRIMITIVE" B1="G_CCMUX_ENVIRONMENT" C1="G_CCMUX_COMBINED" D1="G_CCMUX_ENVIRONMENT" Aa1="G_ACMUX_1" Ab1="G_ACMUX_1" Ac1="G_ACMUX_PRIM_LOD_FRAC" Ad1="G_ACMUX_1"/>
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_TEXTURE_GEN_LINEAR="1" G_SHADING_SMOOTH="1" />
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_PASS="1" G_RM_AA_ZB_TEX_EDGE2="1" />
<Texture S="1966" T="1966" Level="0" Tile="0" On="1"/>
<SetTextureLUT Mode="G_TT_NONE"/>
<TileSync/>
<SetTextureImage Path="objects/object_gi_fishing_pole/eff_unknown_10_i8" Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Width="1"/>
<SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="1"/>
<LoadSync/>
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="511" Dxt="512"/>
<PipeSync/>
<SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b" Line="4" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="1"/>
<SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
<SetPrimColor M="0" L="128" R="248" G="255" B="255" A="255"/>
<SetEnvColor R="147" G="150" B="150" A="255"/>
<EndDisplayList/>
</DisplayList>

View File

@ -0,0 +1,22 @@
<DisplayList Version="0">
<PipeSync/>
<SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_PRIMITIVE" C0="G_CCMUX_PRIM_LOD_FRAC" D0="G_CCMUX_TEXEL0" Aa0="G_ACMUX_1" Ab0="G_ACMUX_1" Ac0="G_ACMUX_PRIM_LOD_FRAC" Ad0="G_ACMUX_1" A1="G_CCMUX_PRIMITIVE" B1="G_CCMUX_ENVIRONMENT" C1="G_CCMUX_COMBINED" D1="G_CCMUX_ENVIRONMENT" Aa1="G_ACMUX_1" Ab1="G_ACMUX_1" Ac1="G_ACMUX_PRIM_LOD_FRAC" Ad1="G_ACMUX_1"/>
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_LIGHTING="1" G_TEXTURE_GEN="1" G_TEXTURE_GEN_LINEAR="1" G_SHADING_SMOOTH="1" />
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_PASS="1" G_RM_AA_ZB_TEX_EDGE2="1" />
<Texture S="2621" T="2621" Level="0" Tile="0" On="1"/>
<SetTextureLUT Mode="G_TT_NONE"/>
<TileSync/>
<SetTextureImage Path="objects/object_gi_fishing_pole/eff_unknown_10_i8" Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Width="1"/>
<SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="1"/>
<LoadSync/>
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="511" Dxt="512"/>
<PipeSync/>
<SetTile Format="G_IM_FMT_I" Size="G_IM_SIZ_8b" Line="4" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_NOMIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="1"/>
<SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
<SetPrimColor M="0" L="128" R="237" G="237" B="171" A="255"/>
<SetEnvColor R="195" G="157" B="0" A="255"/>
<EndDisplayList/>
</DisplayList>

View File

@ -0,0 +1,12 @@
<DisplayList Version="0">
<PipeSync/>
<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_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" />
<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"/>
<SetPrimColor M="0" L="0" R="255" G="255" B="247" A="255"/>
<EndDisplayList/>
</DisplayList>

View File

@ -0,0 +1,12 @@
<DisplayList Version="0">
<PipeSync/>
<SetCombineLERP A0="G_CCMUX_PRIMITIVE" B0="G_CCMUX_0" C0="G_CCMUX_SHADE" D0="G_CCMUX_0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
<Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
<SetPrimColor M="0" L="0" R="255" G="205" B="0" A="255"/>
<EndDisplayList/>
</DisplayList>

View File

@ -74,6 +74,9 @@ static const ALIGN_ASSET(2) char gTriforcePieceCompletedDL[] = dgTriforcePieceCo
#define dgBossSoulSkullDL "__OTR__objects/object_boss_soul/gGIBossSoulSkullDL"
static const ALIGN_ASSET(2) char gBossSoulSkullDL[] = dgBossSoulSkullDL;
#define dgFishingPoleGiDL "__OTR__objects/object_gi_fishing_pole/gFishingPoleGiDL"
static const ALIGN_ASSET(2) char gFishingPoleGiDL[] = dgFishingPoleGiDL;
// overlays
#define dgOptionsDividerChangeLangVtx "__OTR__overlays/ovl_file_choose/gOptionsDividerChangeLangVtx"
static const ALIGN_ASSET(2) char gOptionsDividerChangeLangVtx[] = dgOptionsDividerChangeLangVtx;

View File

@ -574,6 +574,7 @@ typedef enum {
/* 0x7A */ GID_SONG_TIME,
/* 0x7B */ GID_SONG_STORM,
/* 0x7C */ GID_TRIFORCE_PIECE,
/* */ GID_FISHING_POLE,
/* 0x7C */ GID_MAXIMUM
} GetItemDrawID;

View File

@ -283,7 +283,7 @@ typedef struct {
// #endregion
// #region SOH [Randomizer]
// Upstream TODO: Move these to their own struct or name to more obviously specific to Randomizer
/* */ u16 randomizerInf[11];
/* */ u16 randomizerInf[14];
/* */ u8 mqDungeonCount;
/* */ u16 adultTradeItems;
/* */ u8 triforcePiecesCollected;
@ -326,6 +326,18 @@ typedef enum {
/* 0x06 */ HS_DAMPE_RACE
} HighScores;
// the score value for the fishing minigame also stores many flags.
#define HS_FISH_LENGTH_CHILD 0x7F // mask for record length of catch as child.
#define HS_FISH_LENGTH_ADULT 0x7F000000 // mask for record length of catch as adult.
#define HS_FISH_PLAYED_CHILD 0x100 // set when first talking to owner as child
#define HS_FISH_PLAYED_ADULT 0x200 // set when first talking to owner as adult
#define HS_FISH_PRIZE_CHILD 0x400 // won the Piece of Heart
#define HS_FISH_PRIZE_ADULT 0x800 // won the Golden Scale
#define HS_FISH_STOLE_HAT 0x1000 // Pond owner is visibly bald as Adult Link.
#define HS_FISH_CHEAT_CHILD 0x80 // used Sinking Lure as child to catch record fish
#define HS_FISH_CHEAT_ADULT 0x80000000 // used Sinking Lure as adult to catch record fish
#define HS_FISH_PLAYED 0x10000 // incremented for every play. controls weather.
typedef enum {
/* 0 */ SUNSSONG_INACTIVE,
/* 1 */ SUNSSONG_START, // the suns ocarina effect signals that the song has finished playing

View File

@ -135,6 +135,8 @@ typedef enum {
TEXT_BEAN_SALESMAN_SET_A_BEAN_TO_C = 0x406A,
TEXT_BEAN_SALESMAN_SOLD_OUT = 0x406B,
TEXT_BEAN_SALESMAN_WANT_TO_PLANT = 0x406C,
TEXT_FISHING_POND_START = 0x407B,
TEXT_FISHING_POND_START_MET = 0x4093,
TEXT_DAMPES_DIARY = 0x5003,
TEXT_GRANNYS_SHOP = 0x500C,
TEXT_ANJU_PLEASE_BRING_MY_CUCCOS_BACK = 0x5036,

View File

@ -1123,6 +1123,36 @@ void DrawFlagsTab() {
}
});
}
// make some buttons to help with fishsanity debugging
uint8_t fsMode = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY);
if (flagTable.flagTableType == RANDOMIZER_INF &&
fsMode != RO_FISHSANITY_OFF && fsMode != RO_FISHSANITY_OVERWORLD) {
if (ImGui::Button("Catch All (Child)")) {
for (int k = RAND_INF_CHILD_FISH_1; k <= RAND_INF_CHILD_LOACH_2; k++) {
Flags_SetRandomizerInf((RandomizerInf)k);
}
}
ImGui::SameLine();
if (ImGui::Button("Uncatch All (Child)")) {
for (int k = RAND_INF_CHILD_FISH_1; k <= RAND_INF_CHILD_LOACH_2; k++) {
Flags_UnsetRandomizerInf((RandomizerInf)k);
}
}
if (ImGui::Button("Catch All (Adult)")) {
for (int k = RAND_INF_ADULT_FISH_1; k <= RAND_INF_ADULT_LOACH; k++) {
Flags_SetRandomizerInf((RandomizerInf)k);
}
}
ImGui::SameLine();
if (ImGui::Button("Uncatch All (Adult)")) {
for (int k = RAND_INF_ADULT_FISH_1; k <= RAND_INF_ADULT_LOACH; k++) {
Flags_UnsetRandomizerInf((RandomizerInf)k);
}
}
}
ImGui::TreePop();
}
}

View File

@ -348,7 +348,7 @@ const std::vector<FlagTable> flagTables = {
{ 0x24, "Market Crowd Text Randomizer" },
{ 0x30, "Entered the Market" },
} },
{ "Randomizer Inf Flags", RANDOMIZER_INF, 0x0A, {
{ "Randomizer Inf Flags", RANDOMIZER_INF, 13, {
{ RAND_INF_DUNGEONS_DONE_DEKU_TREE, "DUNGEONS_DONE_DEKU_TREE" },
{ RAND_INF_DUNGEONS_DONE_DODONGOS_CAVERN, "DUNGEONS_DONE_DODONGOS_CAVERN" },
{ RAND_INF_DUNGEONS_DONE_JABU_JABUS_BELLY, "DUNGEONS_DONE_JABU_JABUS_BELLY" },
@ -517,11 +517,54 @@ const std::vector<FlagTable> flagTables = {
{ RAND_INF_GANON_SOUL, "RAND_INF_GANON_SOUL" },
{ RAND_INF_GRANT_GANONS_BOSSKEY, "RAND_INF_GRANT_GANONS_BOSSKEY" },
{ RAND_INF_HAS_OCARINA_A, "RAND_INF_HAS_OCARINA_A"},
{ RAND_INF_HAS_OCARINA_C_UP, "RAND_INF_HAS_OCARINA_C_UP" },
{ RAND_INF_HAS_OCARINA_C_DOWN, "RAND_INF_HAS_OCARINA_C_DOWN" },
{ RAND_INF_HAS_OCARINA_C_LEFT, "RAND_INF_HAS_OCARINA_C_LEFT"},
{ RAND_INF_HAS_OCARINA_C_RIGHT, "RAND_INF_HAS_OCARINA_C_RIGHT"},
{ RAND_INF_CHILD_FISH_1, "RAND_INF_CHILD_FISH_1" },
{ RAND_INF_CHILD_FISH_2, "RAND_INF_CHILD_FISH_2" },
{ RAND_INF_CHILD_FISH_3, "RAND_INF_CHILD_FISH_3" },
{ RAND_INF_CHILD_FISH_4, "RAND_INF_CHILD_FISH_4" },
{ RAND_INF_CHILD_FISH_5, "RAND_INF_CHILD_FISH_5" },
{ RAND_INF_CHILD_FISH_6, "RAND_INF_CHILD_FISH_6" },
{ RAND_INF_CHILD_FISH_7, "RAND_INF_CHILD_FISH_7" },
{ RAND_INF_CHILD_FISH_8, "RAND_INF_CHILD_FISH_8" },
{ RAND_INF_CHILD_FISH_9, "RAND_INF_CHILD_FISH_9" },
{ RAND_INF_CHILD_FISH_10, "RAND_INF_CHILD_FISH_10" },
{ RAND_INF_CHILD_FISH_11, "RAND_INF_CHILD_FISH_11" },
{ RAND_INF_CHILD_FISH_12, "RAND_INF_CHILD_FISH_12" },
{ RAND_INF_CHILD_FISH_13, "RAND_INF_CHILD_FISH_13" },
{ RAND_INF_CHILD_FISH_14, "RAND_INF_CHILD_FISH_14" },
{ RAND_INF_CHILD_FISH_15, "RAND_INF_CHILD_FISH_15" },
{ RAND_INF_CHILD_LOACH_1, "RAND_INF_CHILD_LOACH_1" },
{ RAND_INF_CHILD_LOACH_2, "RAND_INF_CHILD_LOACH_2" },
{ RAND_INF_ADULT_FISH_1, "RAND_INF_ADULT_FISH_1" },
{ RAND_INF_ADULT_FISH_2, "RAND_INF_ADULT_FISH_2" },
{ RAND_INF_ADULT_FISH_3, "RAND_INF_ADULT_FISH_3" },
{ RAND_INF_ADULT_FISH_4, "RAND_INF_ADULT_FISH_4" },
{ RAND_INF_ADULT_FISH_5, "RAND_INF_ADULT_FISH_5" },
{ RAND_INF_ADULT_FISH_6, "RAND_INF_ADULT_FISH_6" },
{ RAND_INF_ADULT_FISH_7, "RAND_INF_ADULT_FISH_7" },
{ RAND_INF_ADULT_FISH_8, "RAND_INF_ADULT_FISH_8" },
{ RAND_INF_ADULT_FISH_9, "RAND_INF_ADULT_FISH_9" },
{ RAND_INF_ADULT_FISH_10, "RAND_INF_ADULT_FISH_10" },
{ RAND_INF_ADULT_FISH_11, "RAND_INF_ADULT_FISH_11" },
{ RAND_INF_ADULT_FISH_12, "RAND_INF_ADULT_FISH_12" },
{ RAND_INF_ADULT_FISH_13, "RAND_INF_ADULT_FISH_13" },
{ RAND_INF_ADULT_FISH_14, "RAND_INF_ADULT_FISH_14" },
{ RAND_INF_ADULT_FISH_15, "RAND_INF_ADULT_FISH_15" },
{ RAND_INF_ADULT_LOACH, "RAND_INF_ADULT_LOACH" },
{ RAND_INF_GROTTO_FISH_ZR_OPEN_GROTTO, "RAND_INF_GROTTO_FISH_ZR_OPEN_GROTTO" },
{ RAND_INF_GROTTO_FISH_DMC_UPPER_GROTTO, "RAND_INF_GROTTO_FISH_DMC_UPPER_GROTTO" },
{ RAND_INF_GROTTO_FISH_DMT_STORMS_GROTTO, "RAND_INF_GROTTO_FISH_DMT_STORMS_GROTTO" },
{ RAND_INF_GROTTO_FISH_KAK_OPEN_GROTTO, "RAND_INF_GROTTO_FISH_KAK_OPEN_GROTTO" },
{ RAND_INF_GROTTO_FISH_HF_NEAR_MARKET_GROTTO, "RAND_INF_GROTTO_FISH_HF_NEAR_MARKET_GROTTO" },
{ RAND_INF_GROTTO_FISH_HF_OPEN_GROTTO, "RAND_INF_GROTTO_FISH_HF_OPEN_GROTTO" },
{ RAND_INF_GROTTO_FISH_HF_SOUTHEAST_GROTTO, "RAND_INF_GROTTO_FISH_HF_SOUTHEAST_GROTTO" },
{ RAND_INF_GROTTO_FISH_LW_NEAR_SHORTCUTS_GROTTO, "RAND_INF_GROTTO_FISH_LW_NEAR_SHORTCUTS_GROTTO" },
{ RAND_INF_GROTTO_FISH_KF_STORMS_GROTTO, "RAND_INF_GROTTO_FISH_KF_STORMS_GROTTO" },
{ RAND_INF_FISHING_POLE_FOUND, "RAND_INF_FISHING_POLE_FOUND" },
{ RAND_INF_ZD_FISH_1, "RAND_INF_ZD_FISH_1" },
{ RAND_INF_ZD_FISH_2, "RAND_INF_ZD_FISH_2" },
{ RAND_INF_ZD_FISH_3, "RAND_INF_ZD_FISH_3" },
{ RAND_INF_ZD_FISH_4, "RAND_INF_ZD_FISH_4" },
{ RAND_INF_ZD_FISH_5, "RAND_INF_ZD_FISH_5" }
} },
};

View File

@ -6,6 +6,7 @@
#include "soh/Enhancements/boss-rush/BossRushTypes.h"
#include "soh/Enhancements/enhancementTypes.h"
#include "soh/Enhancements/randomizer/3drando/random.hpp"
#include "soh/Enhancements/randomizer/fishsanity.h"
#include "soh/Enhancements/cosmetics/authenticGfxPatches.h"
#include <soh/Enhancements/item-tables/ItemTableManager.h>
#include "soh/Enhancements/nametag.h"
@ -23,6 +24,7 @@
#include "src/overlays/actors/ovl_En_Tp/z_en_tp.h"
#include "src/overlays/actors/ovl_En_Firefly/z_en_firefly.h"
#include "src/overlays/actors/ovl_En_Xc/z_en_xc.h"
#include "src/overlays//actors/ovl_Fishing/z_fishing.h"
extern "C" {
#include <z64.h>
@ -1282,6 +1284,156 @@ void RegisterToTMedallions() {
});
}
void RegisterFishsanity() {
static s16 fishGroupCounter = 0;
// Initialization on load
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnLoadGame>([](int32_t fileNum) {
if (!IS_RANDO) {
return;
}
OTRGlobals::Instance->gRandoContext->GetFishsanity()->InitializeFromSave();
});
// Initialize actors for fishsanity
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnActorInit>([](void* refActor) {
if (!IS_RANDO) {
return;
}
Actor* actor = static_cast<Actor*>(refActor);
auto fs = OTRGlobals::Instance->gRandoContext->GetFishsanity();
FishIdentity fish;
if (actor->id == ACTOR_EN_FISH && fs->GetOverworldFishShuffled()) {
// Set fish ID for ZD fish
if (gPlayState->sceneNum == SCENE_ZORAS_DOMAIN && actor->params == -1) {
actor->params ^= fishGroupCounter++;
}
fish = OTRGlobals::Instance->gRandomizer->IdentifyFish(gPlayState->sceneNum, actor->params);
// Create effect for uncaught fish
if (Rando::Fishsanity::IsFish(&fish) && !Flags_GetRandomizerInf(fish.randomizerInf)) {
actor->shape.shadowDraw = Fishsanity_DrawEffShadow;
}
return;
}
if (actor->id == ACTOR_FISHING && gPlayState->sceneNum == SCENE_FISHING_POND && actor->params >= 100 &&
actor->params <= 117 && fs->GetPondFishShuffled()) {
// Initialize pond fish for fishsanity
// Initialize fishsanity metadata on this actor
Fishing* fishActor = static_cast<Fishing*>(refActor);
fishActor->fishsanityParams = actor->params;
fish = OTRGlobals::Instance->gRandomizer->IdentifyFish(gPlayState->sceneNum, actor->params);
// With every pond fish shuffled, caught fish will not spawn unless all fish have been caught.
if (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_POND_COUNT) > 16 &&
!fs->GetPondCleared()) {
// Create effect for uncaught fish
if (!Flags_GetRandomizerInf(fish.randomizerInf)) {
actor->shape.shadowDraw = Fishsanity_DrawEffShadow;
}
}
}
});
// Update fishsanity when a fish is caught
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnFlagSet>([](int16_t flagType, int16_t flag) {
if (!IS_RANDO || flagType != FLAG_RANDOMIZER_INF) {
return;
}
RandomizerCheck rc = OTRGlobals::Instance->gRandomizer->GetCheckFromRandomizerInf((RandomizerInf)flag);
FishsanityCheckType fsType = Rando::Fishsanity::GetCheckType(rc);
if (fsType == FSC_NONE) {
return;
}
// When a pond fish is caught, advance the pond.
if (fsType == FSC_POND) {
OTRGlobals::Instance->gRandoContext->GetFishsanity()->AdvancePond();
}
});
// Award fishing pond checks
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnPlayerUpdate>([]() {
if (!IS_RANDO || GameInteractor::IsGameplayPaused() || !gPlayState) {
return;
}
Player* player = GET_PLAYER(gPlayState);
if (Player_InBlockingCsMode(gPlayState, player)) {
return;
}
auto fs = OTRGlobals::Instance->gRandoContext->GetFishsanity();
if (!fs->GetPondFishShuffled()) {
return;
}
FishIdentity pending = fs->GetPendingFish();
if (!Rando::Fishsanity::IsFish(&pending)) { // No fish currently pending
return;
}
// Award fish
GetItemEntry gi = OTRGlobals::Instance->gRandomizer->GetItemFromKnownCheck(pending.randomizerCheck, GI_NONE);
Flags_SetRandomizerInf(pending.randomizerInf);
GiveItemEntryWithoutActor(gPlayState, gi);
fs->SetPendingFish(NULL);
});
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnActorUpdate>([](void* refActor) {
if (!IS_RANDO || (gPlayState->sceneNum != SCENE_GROTTOS && gPlayState->sceneNum != SCENE_ZORAS_DOMAIN && gPlayState->sceneNum != SCENE_FISHING_POND)) {
return;
}
Actor* actor = static_cast<Actor*>(refActor);
auto fs = OTRGlobals::Instance->gRandoContext->GetFishsanity();
// Detect fish catch
if (actor->id == ACTOR_FISHING && fs->GetPondFishShuffled()) {
Fishing* fish = static_cast<Fishing*>(refActor);
// State 6 -> Fish caught and hoisted
FishIdentity pending = fs->GetPendingFish();
if (fish->fishState == 6 && !Rando::Fishsanity::IsFish(&pending)) {
pending = OTRGlobals::Instance->gRandomizer->IdentifyFish(gPlayState->sceneNum, fish->fishsanityParams);
if (!Flags_GetRandomizerInf(pending.randomizerInf)) {
fs->SetPendingFish(&pending);
// Remove uncaught effect
if (actor->shape.shadowDraw != NULL) {
actor->shape.shadowDraw = NULL;
}
}
}
}
if (actor->id == ACTOR_EN_FISH && fs->GetOverworldFishShuffled()) {
FishIdentity fish = OTRGlobals::Instance->gRandomizer->IdentifyFish(gPlayState->sceneNum, actor->params);
if (Rando::Fishsanity::IsFish(&fish) && Flags_GetRandomizerInf(fish.randomizerInf)) {
// Remove uncaught effect
if (actor->shape.shadowDraw != NULL) {
actor->shape.shadowDraw = NULL;
}
}
}
// Reset fish group counter when the group gets culled
if (actor->id == ACTOR_OBJ_MURE && gPlayState->sceneNum == SCENE_ZORAS_DOMAIN && fishGroupCounter > 0 &&
!(actor->flags & ACTOR_FLAG_UPDATE_WHILE_CULLED) && fs->GetOverworldFishShuffled()) {
fishGroupCounter = 0;
}
});
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnSceneInit>([](int16_t sceneNum) {
if (!IS_RANDO || sceneNum != SCENE_ZORAS_DOMAIN)
return;
fishGroupCounter = 0;
});
}
void InitMods() {
RegisterTTS();
RegisterInfiniteMoney();
@ -1315,5 +1467,6 @@ void InitMods() {
RegisterBossSouls();
RegisterRandomizedEnemySizes();
RegisterToTMedallions();
RegisterFishsanity();
NameTag_RegisterHooks();
}

View File

@ -122,6 +122,8 @@ const std::vector<const char*> enhancementsCvars = {
"gInstantFishing",
"gGuaranteeFishingBite",
"gFishNeverEscape",
"gLoachesAlwaysAppear",
"gSkipKeepConfirmation",
"gChildMinimumWeightFish",
"gAdultMinimumWeightFish",
"gLowHpAlarm",
@ -341,6 +343,10 @@ const std::vector<const char*> randomizerCvars = {
"gRandomizeExcludedLocations",
"gRandomizeForest",
"gRandomizeFullWallets",
"gRandomizeFishingPoleHint",
"gRandomizeFishsanity",
"gRandomizeFishsanityPondCount",
"gRandomizeFishsanityAgeSplit",
"gRandomizeGanonTrial",
"gRandomizeGanonTrialCount",
"gRandomizeGerudoFortress",
@ -382,6 +388,7 @@ const std::vector<const char*> randomizerCvars = {
"gRandomizeShuffleCows",
"gRandomizeShuffleDungeonReward",
"gRandomizeShuffleDungeonsEntrances",
"gRandomizeShuffleFishingPole",
"gRandomizeShuffleFrogSongRupees",
"gRandomizeShuffleGanonBossKey",
"gRandomizeShuffleGerudoToken",

View File

@ -9,6 +9,7 @@ enum class Category {
cSong,
cSongDungeonReward,
cCow,
cFish,
cShop,
cMerchant,
cVanillaSmallKey,

View File

@ -3127,6 +3127,24 @@ void HintTable_Init() {
"# bei sich haben und Dich neugierig beobachten..."
}});
hintTable[RHT_FISHING_POLE_HINT01] = HintText::OtherHint({
// obscure text
Text{"^If I remember correctly, I lost it somewhere in %r",
/*french*/
"",
/*spanish*/
"" }
});
hintTable[RHT_FISHING_POLE_HINT02] = HintText::OtherHint({
// obscure text
Text{"%w...&Let me know if you find it!",
/*french*/
"",
/*spanish*/
"" }
});
/*--------------------------
| GANON LINE TEXT |
---------------------------*/

View File

@ -1,4 +1,5 @@
#include "../hint_list.hpp"
#include <soh/Enhancements/randomizer/static_data.h>
void HintTable_Init_Exclude_Overworld() {
hintTable[RHT_KF_KOKIRI_SWORD_CHEST] = HintText::Exclude({
@ -91,46 +92,91 @@ void HintTable_Init_Exclude_Overworld() {
Text{"a #hole in a field near a drawbridge# holds", /*french*/"la #grotte près d'un pont# contient", /*spanish*/"bajo el #hoyo de una llanura cercano a un puente# yace"},
});
hintTable[RHT_HF_NEAR_MARKET_GROTTO_FISH] = HintText::Exclude({
//obscure text
Text{"a #fish in a hole in a field near a drawbridge# holds", /*french*/"la #grotte près d'un pont# contient", /*spanish*/"bajo el #hoyo de una llanura cercano a un puente# yace"},
});
hintTable[RHT_HF_SOUTHEAST_GROTTO_CHEST] = HintText::Exclude({
//obscure text
Text{"a #hole amongst trees in a field# holds", /*french*/"la #grotte près des arbres# contient", /*spanish*/"bajo el #hoyo de una llanura rodeado de árboles# yace"},
});
hintTable[RHT_HF_SOUTHEAST_GROTTO_FISH] = HintText::Exclude({
//obscure text
Text{"a #fish in a hole amongst trees in a field# holds", /*french*/"la #grotte près des arbres# contient", /*spanish*/"bajo el #hoyo de una llanura rodeado de árboles# yace"},
});
hintTable[RHT_HF_OPEN_GROTTO_CHEST] = HintText::Exclude({
//obscure text
Text{"an #open hole in a field# holds", /*french*/"la #grotte dans les plaines# contient", /*spanish*/"bajo el #hoyo descubierto de una llanura# yace"},
});
hintTable[RHT_HF_OPEN_GROTTO_FISH] = HintText::Exclude({
//obscure text
Text{"a #fish in an open hole in a field# holds", /*french*/"la #grotte dans les plaines# contient", /*spanish*/"bajo el #hoyo descubierto de una llanura# yace"},
});
hintTable[RHT_KAK_OPEN_GROTTO_CHEST] = HintText::Exclude({
//obscure text
Text{"an #open hole in a town# holds", /*french*/"la #grotte dans le village# contient", /*spanish*/"bajo el #hoyo descubierto de un pueblo# yace"},
});
hintTable[RHT_KAK_OPEN_GROTTO_FISH] = HintText::Exclude({
//obscure text
Text{"a #fish in an open hole in a town# holds", /*french*/"la #grotte dans le village# contient", /*spanish*/"bajo el #hoyo descubierto de un pueblo# yace"},
});
hintTable[RHT_ZR_OPEN_GROTTO_CHEST] = HintText::Exclude({
//obscure text
Text{"a #hole along a river# holds", /*french*/"la #grotte près du fleuve# contient", /*spanish*/"bajo un #hoyo junto a un río# yace"},
});
hintTable[RHT_ZR_OPEN_GROTTO_FISH] = HintText::Exclude({
//obscure text
Text{"a #fish in a hole along a river# holds", /*french*/"la #grotte près du fleuve# contient", /*spanish*/"bajo un #hoyo junto a un río# yace"},
});
hintTable[RHT_KF_STORMS_GROTTO_CHEST] = HintText::Exclude({
//obscure text
Text{"a #hole in a forest village# holds", /*french*/"la #grotte inondée de pluie dans le Village Kokiri# révèle", /*spanish*/"bajo el #hoyo de una tribu del bosque# yace"},
});
hintTable[RHT_KF_STORMS_GROTTO_FISH] = HintText::Exclude({
//obscure text
Text{"a #fish in a hole in a forest village# holds", /*french*/"la #grotte inondée de pluie dans le Village Kokiri# révèle", /*spanish*/"bajo el #hoyo de una tribu del bosque# yace"},
});
hintTable[RHT_LW_NEAR_SHORTCUTS_GROTTO_CHEST] = HintText::Exclude({
//obscure text
Text{"a #hole in a wooded maze# holds", /*french*/"la #grotte dans le labyrinthe sylvestre# contient", /*spanish*/"bajo un #hoyo de un laberinto forestal# yace"},
});
hintTable[RHT_LW_NEAR_SHORTCUTS_GROTTO_FISH] = HintText::Exclude({
//obscure text
Text{"a #fish in a hole in a wooded maze# holds", /*french*/"la #grotte dans le labyrinthe sylvestre# contient", /*spanish*/"bajo un #hoyo de un laberinto forestal# yace"},
});
hintTable[RHT_DMT_STORMS_GROTTO_CHEST] = HintText::Exclude({
//obscure text
Text{"#hole flooded with rain on a mountain# holds", /*french*/"la #grotte inondée de pluie sur la montagne# contient", /*spanish*/"bajo un #hoyo de una montaña inundado de lluvia# yace"},
});
hintTable[RHT_DMT_STORMS_GROTTO_FISH] = HintText::Exclude({
//obscure text
Text{"#fish in a hole flooded with rain on a mountain# holds", /*french*/"la #grotte inondée de pluie sur la montagne# contient", /*spanish*/"bajo un #hoyo de una montaña inundado de lluvia# yace"},
});
hintTable[RHT_DMC_UPPER_GROTTO_CHEST] = HintText::Exclude({
//obscure text
Text{"a #hole in a volcano# holds", /*french*/"la #grotte dans le volcan# contient", /*spanish*/"bajo el #hoyo de un volcán# yace"},
});
hintTable[RHT_DMC_UPPER_GROTTO_FISH] = HintText::Exclude({
//obscure text
Text{"a #fish in a hole in a volcano# holds", /*french*/"la #grotte dans le volcan# contient", /*spanish*/"bajo el #hoyo de un volcán# yace"},
});
hintTable[RHT_TOT_MASTER_SWORD] = HintText::Exclude({
//obscure text
Text{"a #pedestal in a temple# holds", /*french*/"un #piédestal dans un temple# contient", /*spanish*/"un #pedestal en un templo# sostiene"},
@ -225,6 +271,27 @@ void HintTable_Init_Exclude_Overworld() {
Text{"#fishing in youth# bestows", /*french*/"#pêcher dans sa jeunesse# promet", /*spanish*/"#pescar en la juventud# conduce a"},
});
// TODO: needs french + spanish translation
hintTable[RHT_LH_POND_FISH] = HintText::Exclude({
//obscure text
Text{"#hitting the pond# reveals", /*french*/ "", /*spanish*/ ""},
{},
//clear text
Text{"#the fishing pond's bounty# includes", /*french*/ "", /*spanish*/ ""}
});
// TODO: needs french translation
hintTable[RHT_LH_HYRULE_LOACH] = HintText::Exclude(
{
// obscure text
Text{ "#fishing the legend# bestows", /*french*/ "!!!", /*spanish*/ "#pescar a la leyenda# conduce a" },
},
{},
// clear text
Text{ "#fishing the hyrule loach# will give you", /*french*/ "!!!",
/*spanish*/ "si #pescas a la Locha de Hyrule# encontrarás" });
hintTable[RHT_LH_ADULT_FISHING] = HintText::Exclude({
//obscure text
Text{"#fishing in maturity# bestows", /*french*/"#pêcher dans sa maturité# promet", /*spanish*/"#pescar en la madurez# conduce a"},
@ -235,6 +302,12 @@ void HintTable_Init_Exclude_Overworld() {
Text{"a #diving experiment# is rewarded with", /*french*/"l'#expérience de plongée# donne", /*spanish*/"#bucear para un experimento# se premia con"},
});
// TODO: needs translation
hintTable[RHT_ZD_FISH] = HintText::Exclude({
// obscure text
Text{"a #fish by a waterfall# hoards", /*french*/"", /*spanish*/""}
});
hintTable[RHT_GC_ROLLING_GORON_AS_ADULT] = HintText::Exclude({
//obscure text
Text{"#comforting yourself# provides", /*french*/"se #réconforter soi-même# donne", /*spanish*/"#confrontarte a ti mismo# otorga"},

View File

@ -2102,6 +2102,17 @@ void HintTable_Init_Item() {
Text{"an Ocarina C Right Button", /*french*/"la Touche C-Droit de l'Ocarina", /*spanish*/"un botón C derecho de Ocarina"}}
);
hintTable[RHT_FISHING_POLE] = HintText::Item({
//obscure text
Text{"a fish-puller", /*french*/"(canne à pêche)", /*spanish*/"(caña de pescar)"},
}, {
//ambiguous text
Text{"the pond owner's property", /*french*/"(canne à pêche)", /*spanish*/"(caña de pescar)"},
},
//clear text
Text{"a fishing pole", /*french*/"canne à pêche", /*spanish*/"caña de pescar"}
);
hintTable[RHT_EPONA] = HintText::Item({
//obscure text
Text{"a horse", /*french*/"un fidèle destrier", /*spanish*/"una yegua"},

View File

@ -1105,6 +1105,7 @@ void CreateAllHints(){
CreateSpecialItemHint(RG_PROGRESSIVE_HOOKSHOT, RH_DAMPES_DIARY, {RC_DAMPE_HINT}, RHT_DAMPE_DIARY01, RHT_DAMPE_DIARY02, (bool)ctx->GetOption(RSK_DAMPES_DIARY_HINT));
CreateSpecialItemHint(RG_GREG_RUPEE, RH_GREG_RUPEE, {RC_GREG_HINT}, RHT_GREG_HINT01, RHT_GREG_HINT02, (bool)ctx->GetOption(RSK_GREG_HINT));
CreateSpecialItemHint(RG_PROGRESSIVE_MAGIC_METER, RH_SARIA, {RC_SARIA_SONG_HINT, RC_SONG_FROM_SARIA}, RHT_SARIA_TEXT01, RHT_SARIA_TEXT02, (bool)ctx->GetOption(RSK_SARIA_HINT));
CreateSpecialItemHint(RG_FISHING_POLE, RH_FISHING_POLE, {RC_FISHING_POLE_HINT}, RHT_FISHING_POLE_HINT01, RHT_FISHING_POLE_HINT02, (bool)ctx->GetOption(RSK_FISHING_POLE_HINT));
if (ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ON_HINT)) {
CreateMerchantsHints();

View File

@ -574,6 +574,13 @@ static void PlaceVanillaCowMilk() {
}
}
static void PlaceVanillaOverworldFish() {
auto ctx = Rando::Context::GetInstance();
for (auto rc : Rando::StaticData::overworldFishLocations) {
ctx->PlaceItemInLocation(rc, RG_FISH, false, true);
}
}
static void SetScarceItemPool() {
ReplaceMaxItem(RG_PROGRESSIVE_BOMBCHUS, 3);
ReplaceMaxItem(RG_BOMBCHU_5, 1);
@ -751,6 +758,40 @@ void GenerateItemPool() {
PlaceVanillaCowMilk();
}
auto fsMode = ctx->GetOption(RSK_FISHSANITY);
if (fsMode.IsNot(RO_FISHSANITY_OFF)) {
if (fsMode.Is(RO_FISHSANITY_POND) || fsMode.Is(RO_FISHSANITY_BOTH)) {
// 17 max child pond fish
uint8_t pondCt = ctx->GetOption(RSK_FISHSANITY_POND_COUNT).GetSelectedOptionIndex();
for (uint8_t i = 0; i < pondCt; i++) {
AddItemToMainPool(GetJunkItem());
}
if (ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)) {
// 16 max adult pond fish, have to reduce to 16 if every fish is enabled
if (pondCt > 16)
pondCt = 16;
for (uint8_t i = 0; i < pondCt; i++) {
AddItemToMainPool(GetJunkItem());
}
}
}
// 9 grotto fish, 5 zora's domain fish
if (fsMode.Is(RO_FISHSANITY_OVERWORLD) || fsMode.Is(RO_FISHSANITY_BOTH)) {
for (uint8_t i = 0; i < Rando::StaticData::overworldFishLocations.size(); i++)
AddItemToMainPool(GetJunkItem());
} else {
PlaceVanillaOverworldFish();
}
} else {
PlaceVanillaOverworldFish();
}
if (ctx->GetOption(RSK_SHUFFLE_FISHING_POLE)) {
AddItemToMainPool(RG_FISHING_POLE);
ctx->possibleIceTrapModels.push_back(RG_FISHING_POLE);
}
if (ctx->GetOption(RSK_SHUFFLE_MAGIC_BEANS)) {
AddItemToMainPool(RG_MAGIC_BEAN_PACK);
if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) {
@ -971,6 +1012,10 @@ void GenerateItemPool() {
AddItemToPool(PendingJunkPool, RG_GERUDO_MEMBERSHIP_CARD);
}
if (ctx->GetOption(RSK_SHUFFLE_FISHING_POLE)) {
AddItemToPool(PendingJunkPool, RG_FISHING_POLE);
}
//Plentiful small keys
if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANYWHERE) || ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON) || ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OVERWORLD)) {
if (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->HasKeyRing()) {

View File

@ -62,6 +62,7 @@ void AreaTable_Init_DeathMountain() {
areaTable[RR_DMT_STORMS_GROTTO] = Area("DMT Storms Grotto", "DMT Storms Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
//Locations
LocationAccess(RC_DMT_STORMS_GROTTO_CHEST, {[]{return true;}}),
LocationAccess(RC_DMT_STORMS_GROTTO_FISH, {[]{return logic->HasBottle;}}),
LocationAccess(RC_DMT_STORMS_GROTTO_GOSSIP_STONE, {[]{return true;}}),
}, {
//Exits
@ -241,6 +242,7 @@ void AreaTable_Init_DeathMountain() {
areaTable[RR_DMC_UPPER_GROTTO] = Area("DMC Upper Grotto", "DMC Upper Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
//Locations
LocationAccess(RC_DMC_UPPER_GROTTO_CHEST, {[]{return true;}}),
LocationAccess(RC_DMC_UPPER_GROTTO_FISH, {[]{return logic->HasBottle;}}),
LocationAccess(RC_DMC_UPPER_GROTTO_GOSSIP_STONE, {[]{return true;}}),
}, {
//Exits

View File

@ -33,6 +33,7 @@ void AreaTable_Init_HyruleField() {
areaTable[RR_HF_SOUTHEAST_GROTTO] = Area("HF Southeast Grotto", "HF Southeast Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
//Locations
LocationAccess(RC_HF_SOUTHEAST_GROTTO_CHEST, {[]{return true;}}),
LocationAccess(RC_HF_SOUTHEAST_GROTTO_FISH, {[]{return logic->HasBottle;}}),
LocationAccess(RC_HF_SOUTHEAST_GOSSIP_STONE, {[]{return true;}}),
}, {
//Exits
@ -42,6 +43,7 @@ void AreaTable_Init_HyruleField() {
areaTable[RR_HF_OPEN_GROTTO] = Area("HF Open Grotto", "HF Open Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
//Locations
LocationAccess(RC_HF_OPEN_GROTTO_CHEST, {[]{return true;}}),
LocationAccess(RC_HF_OPEN_GROTTO_FISH, {[]{return logic->HasBottle;}}),
LocationAccess(RC_HF_OPEN_GROTTO_GOSSIP_STONE, {[]{return true;}}),
}, {
//Exits
@ -69,6 +71,7 @@ void AreaTable_Init_HyruleField() {
areaTable[RR_HF_NEAR_MARKET_GROTTO] = Area("HF Near Market Grotto", "HF Near Market Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
//Locations
LocationAccess(RC_HF_NEAR_MARKET_GROTTO_CHEST, {[]{return true;}}),
LocationAccess(RC_HF_NEAR_MARKET_GROTTO_FISH, {[]{return logic->HasBottle;}}),
LocationAccess(RC_HF_NEAR_MARKET_GOSSIP_STONE, {[]{return true;}}),
}, {
//Exits
@ -154,10 +157,45 @@ void AreaTable_Init_HyruleField() {
Entrance(RR_LAKE_HYLIA, {[]{return true;}}),
});
// TODO: should some of these helpers be done via events instead?
areaTable[RR_LH_FISHING_HOLE] = Area("LH Fishing Hole", "LH Fishing Hole", RA_NONE, DAY_NIGHT_CYCLE, {}, {
//Locations
LocationAccess(RC_LH_CHILD_FISHING, {[]{return logic->IsChild;}}),
LocationAccess(RC_LH_ADULT_FISHING, {[]{return logic->IsAdult;}}),
LocationAccess(RC_LH_CHILD_FISHING, {[]{return logic->CanFish && logic->IsChild;}}),
LocationAccess(RC_LH_CHILD_FISH_1, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_FISH_2, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_FISH_3, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_FISH_4, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_FISH_5, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_FISH_6, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_FISH_7, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_FISH_8, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_FISH_9, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_FISH_10, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_FISH_11, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_FISH_12, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_FISH_13, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_FISH_14, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_FISH_15, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_LOACH_1, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_CHILD_LOACH_2, {[]{return logic->CanGetChildFish;}}),
LocationAccess(RC_LH_ADULT_FISHING, {[]{return logic->CanFish && logic->IsAdult;}}),
LocationAccess(RC_LH_ADULT_FISH_1, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_FISH_2, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_FISH_3, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_FISH_4, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_FISH_5, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_FISH_6, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_FISH_7, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_FISH_8, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_FISH_9, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_FISH_10, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_FISH_11, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_FISH_12, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_FISH_13, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_FISH_14, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_FISH_15, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_LH_ADULT_LOACH, {[]{return logic->CanGetAdultFish;}}),
LocationAccess(RC_FISHING_POLE_HINT,{[]{return true;}}),
}, {
//Exits
Entrance(RR_LH_FISHING_ISLAND, {[]{return true;}}),

View File

@ -197,6 +197,7 @@ void AreaTable_Init_Kakariko() {
areaTable[RR_KAK_OPEN_GROTTO] = Area("Kak Open Grotto", "Kak Open Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
//Locations
LocationAccess(RC_KAK_OPEN_GROTTO_CHEST, {[]{return true;}}),
LocationAccess(RC_KAK_OPEN_GROTTO_FISH, {[]{return logic->HasBottle;}}),
LocationAccess(RC_KAK_OPEN_GROTTO_GOSSIP_STONE, {[]{return true;}}),
}, {
//Exits

View File

@ -97,6 +97,7 @@ void AreaTable_Init_LostWoods() {
areaTable[RR_KF_STORMS_GROTTO] = Area("KF Storms Grotto", "KF Storms Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
//Locations
LocationAccess(RC_KF_STORMS_GROTTO_CHEST, {[]{return true;}}),
LocationAccess(RC_KF_STORMS_GROTTO_FISH, {[]{return logic->HasBottle;}}),
LocationAccess(RC_KF_STORMS_GOSSIP_STONE, {[]{return true;}}),
}, {
//Exits
@ -164,6 +165,7 @@ void AreaTable_Init_LostWoods() {
areaTable[RR_LW_NEAR_SHORTCUTS_GROTTO] = Area("LW Near Shortcuts Grotto", "LW Near Shortcuts Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
//Locations
LocationAccess(RC_LW_NEAR_SHORTCUTS_GROTTO_CHEST, {[]{return true;}}),
LocationAccess(RC_LW_NEAR_SHORTCUTS_GROTTO_FISH, {[]{return logic->HasBottle;}}),
LocationAccess(RC_LW_NEAR_SHORTCUTS_GOSSIP_STONE, {[]{return true;}}),
}, {
//Exits

View File

@ -55,6 +55,7 @@ void AreaTable_Init_ZorasDomain() {
areaTable[RR_ZR_OPEN_GROTTO] = Area("ZR Open Grotto", "ZR Open Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
//Locations
LocationAccess(RC_ZR_OPEN_GROTTO_CHEST, {[]{return true;}}),
LocationAccess(RC_ZR_OPEN_GROTTO_FISH, {[]{return logic->HasBottle;}}),
LocationAccess(RC_ZR_OPEN_GROTTO_GOSSIP_STONE, {[]{return true;}}),
}, {
//Exits
@ -94,6 +95,11 @@ void AreaTable_Init_ZorasDomain() {
LocationAccess(RC_ZD_KING_ZORA_THAWED, {[]{return logic->KingZoraThawed;}}),
LocationAccess(RC_ZD_TRADE_PRESCRIPTION, {[]{return logic->KingZoraThawed && logic->Prescription;}}),
LocationAccess(RC_ZD_GS_FROZEN_WATERFALL, {[]{return logic->IsAdult && logic->AtNight && (logic->HookshotOrBoomerang || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->Bow || (logic->MagicMeter && (logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_BIGGORON_SWORD))) || (randoCtx->GetTrickOption(RT_ZD_GS) && logic->CanJumpslash)) && logic->CanGetNightTimeGS;}}),
LocationAccess(RC_ZD_FISH_1, {[]{return logic->IsChild && logic->HasBottle;}}),
LocationAccess(RC_ZD_FISH_2, {[]{return logic->IsChild && logic->HasBottle;}}),
LocationAccess(RC_ZD_FISH_3, {[]{return logic->IsChild && logic->HasBottle;}}),
LocationAccess(RC_ZD_FISH_4, {[]{return logic->IsChild && logic->HasBottle;}}),
LocationAccess(RC_ZD_FISH_5, {[]{return logic->IsChild && logic->HasBottle;}}),
LocationAccess(RC_ZD_GOSSIP_STONE, {[]{return true;}}),
}, {
//Exits

View File

@ -10,7 +10,7 @@
std::vector<ItemAndPrice> NonShopItems = {};
static std::array<std::vector<Text>, 0xF0> trickNameTable; // Table of trick names for ice traps
static std::array<std::vector<Text>, 0xF1> 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
@ -739,6 +739,10 @@ void InitTrickNames() {
Text{"Pure Evil", "", ""},
Text{"Ganon's Ghost", "", ""},
Text{"Pork", "", ""}};
trickNameTable[RG_FISHING_POLE] = {
Text{"Fish Tickler", "Fish Tickler", "Fish Tickler"},
Text{"Floating Lure", "Floating Lure", "Floating Lure"},
Text{"Fishing Reel", "Fishing Reel", "Fishing Reel"}};
trickNameTable[RG_OCARINA_A_BUTTON] = {
Text{"Ocarina J Button", "", ""},

View File

@ -622,6 +622,11 @@ static void WriteHints() {
jsonData["sariaHintLoc"] = Rando::StaticData::GetLocation(ctx->GetHint(RH_SARIA)->GetHintedLocation())->GetName();
jsonData["sariaRegion"] = ::Hint(ctx->GetHint(RH_SARIA)->GetHintedArea()).GetText().GetEnglish();
}
if (ctx->GetOption(RSK_FISHING_POLE_HINT)) {
jsonData["fishingPoleText"] = ctx->GetHint(RH_FISHING_POLE)->GetText().GetForLanguage(language);
jsonData["fishingPoleHintLoc"] = Rando::StaticData::GetLocation(ctx->GetHint(RH_FISHING_POLE)->GetHintedLocation())->GetName();
jsonData["fishingPoleRegion"] = ::Hint(ctx->GetHint(RH_FISHING_POLE)->GetHintedArea()).GetText().GetEnglish();
}
if (ctx->GetOption(RSK_GOSSIP_STONE_HINTS).Is(RO_GOSSIP_STONES_NONE)) {
return;

View File

@ -4,6 +4,7 @@
#include <string>
#include <string_view>
#include <cstdint>
#include "../randomizerTypes.h"
using RandomizerHash = std::array<std::string, 5>;
@ -18,6 +19,7 @@ typedef enum {
SPOILER_CHK_EVENT_CHK_INF,
SPOILER_CHK_INF_TABLE,
SPOILER_CHK_COW,
SPOILER_CHK_FISH,
SPOILER_CHK_MINIGAME,
SPOILER_CHK_SCRUB,
SPOILER_CHK_GERUDO_MEMBERSHIP_CARD,
@ -74,7 +76,7 @@ typedef enum {
} SpoilerItemRevealType;
#define SPOILER_SPHERES_MAX 50
#define SPOILER_ITEMS_MAX 512
#define SPOILER_ITEMS_MAX RC_MAX
#define SPOILER_STRING_DATA_SIZE 16384
typedef struct {

View File

@ -9,6 +9,7 @@
#include "entrance.h"
#include "settings.h"
#include "rando_hash.h"
#include "fishsanity.h"
#include <fstream>
#include <spdlog/spdlog.h>
@ -91,6 +92,7 @@ Context::Context() {
mLogic = std::make_shared<Logic>();
mTrials = std::make_shared<Trials>();
mSettings = std::make_shared<Settings>();
mFishsanity = std::make_shared<Fishsanity>();
for (auto& location : StaticData::GetLocationTable()) {
mSpoilerfileCheckNameToEnum[location.GetName()] = location.GetRandomizerCheck();
}
@ -204,6 +206,10 @@ void Context::GenerateLocationPool() {
}
AddLocations(StaticData::overworldLocations);
if (mSettings->GetOption(RSK_FISHSANITY).IsNot(RO_FISHSANITY_OFF)) {
AddLocations(mFishsanity->GetFishsanityLocations().first);
}
for (const auto dungeon : mDungeons->GetDungeonList()) {
AddLocations(dungeon->GetDungeonLocations());
}
@ -477,6 +483,14 @@ void Context::ParseHintJson(nlohmann::json spoilerFileJson) {
AddHint(RH_SARIA, Text(sariaText), sariaHintLoc, HINT_TYPE_STATIC, "Static", mSpoilerfileAreaNameToEnum[sariaRegion]);
}
// Fishing Pole Hint
if(spoilerFileJson.contains("fishingPoleText")) {
std::string fishingPoleText = spoilerFileJson["fishingPoleText"].get<std::string>();
std::string fishingPoleRegion = spoilerFileJson["fishingPoleRegion"].get<std::string>();
RandomizerCheck fishingPoleHintLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["fishingPoleHintLoc"].get<std::string>()];
AddHint(RH_FISHING_POLE, Text(fishingPoleText), fishingPoleHintLoc, HINT_TYPE_STATIC, "Static", mSpoilerfileAreaNameToEnum[fishingPoleRegion]);
}
// Warp Songs
if (spoilerFileJson.contains("warpMinuetText")) {
std::string warpMinuetText = spoilerFileJson["warpMinuetText"].get<std::string>(); //RANDOTODO fall back for if location is used
@ -529,6 +543,10 @@ std::shared_ptr<Dungeons> Context::GetDungeons() {
return mDungeons;
}
std::shared_ptr<Fishsanity> Context::GetFishsanity() {
return mFishsanity;
}
DungeonInfo* Context::GetDungeon(size_t key) const {
return mDungeons->GetDungeon(static_cast<DungeonKey>(key));
}

View File

@ -6,6 +6,7 @@
#include "item_override.h"
#include "3drando/text.hpp"
#include "hint.h"
#include "fishsanity.h"
#include <memory>
#include <array>
@ -66,6 +67,7 @@ class Context {
std::shared_ptr<Settings> GetSettings();
std::shared_ptr<EntranceShuffler> GetEntranceShuffler();
std::shared_ptr<Dungeons> GetDungeons();
std::shared_ptr<Fishsanity> GetFishsanity();
DungeonInfo* GetDungeon(size_t key) const;
std::shared_ptr<Logic> GetLogic();
void ResetLogic();
@ -111,6 +113,7 @@ class Context {
std::shared_ptr<Dungeons> mDungeons;
std::shared_ptr<Logic> mLogic;
std::shared_ptr<Trials> mTrials;
std::shared_ptr<Fishsanity> mFishsanity;
bool mSeedGenerated = false;
bool mSpoilerLoaded = false;
bool mPlandoLoaded = false;

View File

@ -11,6 +11,7 @@
#include "objects/object_gi_bosskey/object_gi_bosskey.h"
#include "objects/object_gi_hearts/object_gi_hearts.h"
#include "objects/object_gi_fire/object_gi_fire.h"
#include "objects/object_fish/object_fish.h"
#include "objects/object_toki_objects/object_toki_objects.h"
#include "objects/gameplay_field_keep/gameplay_field_keep.h"
#include "soh_assets.h"
@ -389,5 +390,54 @@ extern "C" void Randomizer_DrawOcarinaButton(PlayState* play, GetItemEntry* getI
gSPGrayscale(POLY_XLU_DISP++, false);
CLOSE_DISPS(play->state.gfxCtx);
}
extern "C" void Randomizer_DrawFishingPoleGI(PlayState* play, GetItemEntry* getItemEntry) {
Vec3f pos;
OPEN_DISPS(play->state.gfxCtx);
// Draw rod
Gfx_SetupDL_25Opa(play->state.gfxCtx);
Matrix_Scale(0.2, 0.2, 0.2, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_MODELVIEW | G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingPoleGiDL);
// Draw lure
Matrix_Push();
Matrix_Scale(5.0f, 5.0f, 5.0f, MTXMODE_APPLY);
pos = { 0.0f, -25.5f, -4.0f };
Matrix_Translate(pos.x, pos.y, pos.z, MTXMODE_APPLY);
Matrix_RotateZ(-M_PI_2, MTXMODE_APPLY);
Matrix_RotateY(-M_PI_2 - 0.2f, MTXMODE_APPLY);
Matrix_Scale(0.006f, 0.006f, 0.006f, MTXMODE_APPLY);
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_NOPUSH | G_MTX_MODELVIEW | G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureFloatDL);
// Draw hooks
Matrix_RotateY(0.2f, MTXMODE_APPLY);
Matrix_Translate(0.0f, 0.0f, -300.0f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureHookDL);
Matrix_RotateZ(M_PI_2, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureHookDL);
Matrix_Translate(0.0f, -2200.0f, 700.0f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureHookDL);
Matrix_RotateZ(M_PI / 2, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureHookDL);
Matrix_Pop();
CLOSE_DISPS(play->state.gfxCtx);
}

View File

@ -18,6 +18,7 @@ void Randomizer_DrawMasterSword(PlayState* play, GetItemEntry* getItemEntry);
void Randomizer_DrawTriforcePiece(PlayState* play, GetItemEntry getItemEntry);
void Randomizer_DrawTriforcePieceGI(PlayState* play, GetItemEntry getItemEntry);
void Randomizer_DrawOcarinaButton(PlayState* play, GetItemEntry* getItemEntry);
void Randomizer_DrawFishingPoleGI(PlayState* play, GetItemEntry* getItemEntry);
#ifdef __cplusplus
};
#endif

View File

@ -0,0 +1,412 @@
#include "3drando/pool_functions.hpp"
#include "../../OTRGlobals.h"
#include "fishsanity.h"
#include "variables.h"
#include "functions.h"
#include "macros.h"
#include <consolevariablebridge.h>
#define FSi OTRGlobals::Instance->gRandoContext->GetFishsanity()
/**
* @brief Parallel list of pond fish checks for both ages
*/
std::array<std::pair<RandomizerCheck, RandomizerCheck>, 17> Rando::StaticData::randomizerFishingPondFish = {
{ /* Child Check Adult Check */
{ RC_LH_CHILD_FISH_1, RC_LH_ADULT_FISH_1 },
{ RC_LH_CHILD_FISH_2, RC_LH_ADULT_FISH_2 },
{ RC_LH_CHILD_FISH_3, RC_LH_ADULT_FISH_3 },
{ RC_LH_CHILD_FISH_4, RC_LH_ADULT_FISH_4 },
{ RC_LH_CHILD_FISH_5, RC_LH_ADULT_FISH_5 },
{ RC_LH_CHILD_FISH_6, RC_LH_ADULT_FISH_6 },
{ RC_LH_CHILD_FISH_7, RC_LH_ADULT_FISH_7 },
{ RC_LH_CHILD_FISH_8, RC_LH_ADULT_FISH_8 },
{ RC_LH_CHILD_FISH_9, RC_LH_ADULT_FISH_9 },
{ RC_LH_CHILD_FISH_10, RC_LH_ADULT_FISH_10 },
{ RC_LH_CHILD_FISH_11, RC_LH_ADULT_FISH_11 },
{ RC_LH_CHILD_FISH_12, RC_LH_ADULT_FISH_12 },
{ RC_LH_CHILD_FISH_13, RC_LH_ADULT_FISH_13 },
{ RC_LH_CHILD_FISH_14, RC_LH_ADULT_FISH_14 },
{ RC_LH_CHILD_FISH_15, RC_LH_ADULT_FISH_15 },
{ RC_LH_CHILD_LOACH_1, RC_LH_ADULT_LOACH },
{ RC_LH_CHILD_LOACH_2, RC_UNKNOWN_CHECK } }
};
std::unordered_map<int8_t, RandomizerCheck> Rando::StaticData::randomizerGrottoFishMap = {
{ 0x2C, RC_KF_STORMS_GROTTO_FISH }, { 0x14, RC_LW_NEAR_SHORTCUTS_GROTTO_FISH },
{ 0x22, RC_HF_SOUTHEAST_GROTTO_FISH }, { 0x03, RC_HF_OPEN_GROTTO_FISH },
{ 0x00, RC_HF_NEAR_MARKET_GROTTO_FISH }, { 0x28, RC_KAK_OPEN_GROTTO_FISH },
{ 0x57, RC_DMT_STORMS_GROTTO_FISH }, { 0x7A, RC_DMC_UPPER_GROTTO_FISH },
{ 0x29, RC_ZR_OPEN_GROTTO_FISH }
};
namespace Rando {
const FishIdentity Fishsanity::defaultIdentity = { RAND_INF_MAX, RC_UNKNOWN_CHECK };
bool Fishsanity::fishsanityHelpersInit = false;
std::unordered_map<RandomizerCheck, LinkAge> Fishsanity::pondFishAgeMap;
std::vector<RandomizerCheck> Fishsanity::childPondFish;
std::vector<RandomizerCheck> Fishsanity::adultPondFish;
Fishsanity::Fishsanity() {
InitializeHelpers();
}
Fishsanity::~Fishsanity() {
}
bool Fishsanity::GetFishLocationIncluded(Rando::Location* loc,
FishsanityOptionsSource optionsSource) {
auto [mode, numFish, ageSplit] = GetOptions(optionsSource);
if (loc->GetRCType() != RCTYPE_FISH || mode == RO_FISHSANITY_OFF)
return false;
RandomizerCheck rc = loc->GetRandomizerCheck();
// Are pond fish enabled, and is this a pond fish location?
if (mode != RO_FISHSANITY_OVERWORLD && numFish > 0 && loc->GetScene() == SCENE_FISHING_POND &&
loc->GetActorID() == ACTOR_FISHING) {
// Is this a child fish location? If so, is it within the defined number of pond fish checks?
if (rc >= RC_LH_CHILD_FISH_1 && rc <= RC_LH_CHILD_LOACH_2 && numFish > (loc->GetActorParams() - 100))
return true;
// Are adult fish available, and is this an adult fish location? If so, is it within the defined number of pond
// fish checks?
if (ageSplit && rc >= RC_LH_ADULT_FISH_1 && rc <= RC_LH_ADULT_LOACH && numFish > (loc->GetActorParams() - 100))
return true;
}
// Are overworld fish enabled, and is this an overworld fish location?
if (mode != RO_FISHSANITY_POND && (loc->GetScene() == SCENE_GROTTOS || loc->GetScene() == SCENE_ZORAS_DOMAIN)
&& loc->GetActorID() == ACTOR_EN_FISH && (loc->GetActorParams() == 1 || loc->GetActorParams() < 0)) {
return true;
}
// Must not be an included fish location!
return false;
}
std::pair<std::vector<RandomizerCheck>, std::vector<RandomizerCheck>>
Fishsanity::GetFishingPondLocations(FishsanityOptionsSource optionsSource) {
auto [mode, numFish, ageSplit] = GetOptions(optionsSource);
std::vector<RandomizerCheck> activeFish;
std::vector<RandomizerCheck> remainingFish;
// Fishsanity_InitializeHelpers();
remainingFish.insert(remainingFish.end(), Rando::StaticData::pondFishLocations.begin(),
Rando::StaticData::pondFishLocations.end());
// No pond fish shuffled
if (numFish == 0) {
return std::make_pair(activeFish, remainingFish);
}
// Every pond fish is shuffled, so we can save some time
if (numFish > 16) {
// Child and adult pond fish are both shuffled, set activeFish to remainingFish and return an empty vector for
// inactive fish.
if (ageSplit) {
return std::make_pair(remainingFish, activeFish);
}
// Activate all child fish only
activeFish = FilterAndEraseFromPool(
remainingFish, [](const RandomizerCheck loc) { return pondFishAgeMap[loc] == LINK_AGE_CHILD; });
return std::make_pair(activeFish, remainingFish);
}
// Only some pond fish are shuffled, so we have to only activate the requested number.
activeFish.insert(activeFish.end(), childPondFish.begin(), childPondFish.begin() + numFish);
// If pond is split, also add the requested number of adult fish.
if (ageSplit) {
activeFish.insert(activeFish.end(), adultPondFish.begin(),
adultPondFish.begin() + std::min<uint8_t>(numFish, 16));
}
// NOTE: This only works because we can assume activeFish is already sorted; changes that break this assumption will
// also break this
FilterAndEraseFromPool(remainingFish,
[&](uint32_t loc) { return std::binary_search(activeFish.begin(), activeFish.end(), loc); });
return std::make_pair(activeFish, remainingFish);
}
std::pair<std::vector<RandomizerCheck>, std::vector<RandomizerCheck>>
Fishsanity::GetFishsanityLocations(FishsanityOptionsSource optionsSource) {
auto [mode, numFish, ageSplit] = GetOptions(optionsSource);
std::vector<RandomizerCheck> activeFish;
std::vector<RandomizerCheck> remainingFish;
// Add pond fish
if (mode == RO_FISHSANITY_POND || mode == RO_FISHSANITY_BOTH) {
auto pondLocations = GetFishingPondLocations(optionsSource);
activeFish.insert(activeFish.end(), pondLocations.first.begin(), pondLocations.first.end());
remainingFish.insert(remainingFish.end(), pondLocations.second.begin(), pondLocations.second.end());
}
// Add overworld fish
if (mode == RO_FISHSANITY_OVERWORLD || mode == RO_FISHSANITY_BOTH) {
activeFish.insert(activeFish.end(), Rando::StaticData::overworldFishLocations.begin(),
Rando::StaticData::overworldFishLocations.end());
}
return std::make_pair(activeFish, remainingFish);
}
FishIdentity Fishsanity::IdentifyPondFish(u8 fishParams) {
auto [mode, pondCount, ageSplit] = GetOptions();
FishIdentity identity = defaultIdentity;
if (!GetPondFishShuffled()) {
return identity;
}
if (pondCount > 16) {
identity = GetPondFish(fishParams, IsAdultPond());
} else {
identity = LINK_IS_ADULT ? mCurrPondFish.second : mCurrPondFish.first;
}
return identity;
}
FishsanityPondOptions Fishsanity::GetOptions(FishsanityOptionsSource optionsSource) {
FishsanityPondOptions options{};
switch (optionsSource) {
// Used in check tracker
case FSO_SOURCE_CVARS:
options.mode = CVarGetInteger("gRandomizeFishsanity", RO_FISHSANITY_OFF);
options.numFish = CVarGetInteger("gRandomizeFishsanityPondCount", 0);
options.ageSplit = CVarGetInteger("gRandomizeFishsanityAgeSplit", 0) == 1;
break;
case FSO_SOURCE_RANDO:
default:
options.mode = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY);
options.numFish = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_POND_COUNT);
options.ageSplit = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_AGE_SPLIT);
break;
}
return options;
}
void Fishsanity::UpdateCurrentPondFish() {
auto [mode, pondCount, ageSplit] = GetOptions();
mCurrPondFish = std::pair<FishIdentity, FishIdentity>();
mCurrPondFish.first = defaultIdentity;
mCurrPondFish.second = defaultIdentity;
// Initialize mCurrPondFish if we're shuffling pond fish, but if all fish are shuffled, we don't need to use this.
if ((mode == RO_FISHSANITY_BOTH || mode == RO_FISHSANITY_POND) && pondCount < 17) {
// find the first inf that isn't set yet for each age
// but don't go past the max number
std::pair<RandomizerCheck, RandomizerCheck> tableEntry;
for (s16 i = 0, params = 100; i < pondCount; i++, params++) {
tableEntry = Rando::StaticData::randomizerFishingPondFish[i];
if (!Flags_GetRandomizerInf(OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(tableEntry.first)) || i == pondCount - 1) {
// Found first child check
if (!IsFish(&mCurrPondFish.first)) {
mCurrPondFish.first = GetPondFish(params, false);
}
if (!ageSplit && !IsFish(&mCurrPondFish.second)) {
mCurrPondFish.second = GetPondFish(params, false);
// both ages are resolved! we can quit here
break;
}
}
if (ageSplit && !IsFish(&mCurrPondFish.second) && tableEntry.second != RC_UNKNOWN_CHECK &&
(!Flags_GetRandomizerInf(OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(tableEntry.second)) || i == pondCount - 1)) {
mCurrPondFish.second = mCurrPondFish.second = GetPondFish(params, true);
}
}
}
}
void Fishsanity::InitializeFromSave() {
UpdateCurrentPondFish();
}
bool Fishsanity::GetPondFishShuffled() {
u8 fsMode = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY);
return OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_POND_COUNT) > 0 &&
(fsMode == RO_FISHSANITY_POND || fsMode == RO_FISHSANITY_BOTH);
}
bool Fishsanity::GetOverworldFishShuffled() {
u8 fsMode = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY);
return fsMode == RO_FISHSANITY_OVERWORLD || fsMode == RO_FISHSANITY_BOTH;
}
bool Fishsanity::IsAdultPond() {
return LINK_IS_ADULT && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_AGE_SPLIT);
}
bool Fishsanity::GetPondCleared() {
auto [mode, pondCount, ageSplit] = GetOptions();
// no fish shuffled, so pond is always cleared :thumbsup:
if (pondCount == 0)
return true;
bool adultPond = LINK_IS_ADULT && ageSplit;
// if we've collected the final shuffled fish, pond is complete
if (pondCount <= 16) {
auto tableEntry = Rando::StaticData::randomizerFishingPondFish[pondCount - 1];
return Flags_GetRandomizerInf(OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(adultPond ? tableEntry.second : tableEntry.first));
}
// the last two checks actually don't matter because logically they will never be true, but maybe one day they will
// if every fish is shuffled, check if we've collected every fish
for (auto tableEntry : Rando::StaticData::randomizerFishingPondFish) {
RandomizerCheck rc = adultPond ? tableEntry.second : tableEntry.first;
// if we haven't collected this fish, then we're not done yet! get back in there, soldier
if (rc != RC_UNKNOWN_CHECK && !Flags_GetRandomizerInf(OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(rc)))
return false;
}
return true;
}
bool Fishsanity::GetDomainCleared() {
for (RandomizerInf i = RAND_INF_ZD_FISH_1; i <= RAND_INF_ZD_FISH_5; i = (RandomizerInf)(i + 1)) {
if (!Flags_GetRandomizerInf(i))
return false;
}
return true;
}
void Fishsanity::InitializeHelpers() {
if (fishsanityHelpersInit)
return;
for (auto pair : Rando::StaticData::randomizerFishingPondFish) {
pondFishAgeMap[pair.first] = LINK_AGE_CHILD;
pondFishAgeMap[pair.second] = LINK_AGE_ADULT;
childPondFish.push_back(pair.first);
adultPondFish.push_back(pair.second);
}
}
FishIdentity Fishsanity::GetPondFish(s16 params, bool adultPond) {
auto pair = Rando::StaticData::randomizerFishingPondFish[params - 100];
RandomizerCheck rc = adultPond ? pair.second : pair.first;
return { OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(rc), rc };
}
FishIdentity Fishsanity::AdvancePond() {
auto [mode, pondCount, ageSplit] = GetOptions();
// No need to update state with full pond shuffle
if (pondCount > 16) {
return defaultIdentity;
}
UpdateCurrentPondFish();
return IsAdultPond() ? mCurrPondFish.second : mCurrPondFish.first;
}
FishsanityCheckType Fishsanity::GetCheckType(RandomizerCheck rc) {
// Is this a pond fish?
if (std::binary_search(Rando::StaticData::pondFishLocations.begin(), Rando::StaticData::pondFishLocations.end(), rc))
return FSC_POND;
// Is this an overworld fish?
if (std::binary_search(Rando::StaticData::overworldFishLocations.begin(), Rando::StaticData::overworldFishLocations.end(), rc)) {
if (rc < RC_ZD_FISH_1)
return FSC_GROTTO;
else
return FSC_ZD;
}
// Must not be a fishsanity check
return FSC_NONE;
}
bool Fishsanity::IsFish(FishIdentity* fish) {
if (fish->randomizerCheck == RC_UNKNOWN_CHECK || fish->randomizerInf == RAND_INF_MAX)
return false;
return GetCheckType(fish->randomizerCheck) != FSC_NONE;
}
void Fishsanity::SetPendingFish(FishIdentity* fish) {
mPendingFish = fish == NULL ? defaultIdentity : *fish;
}
FishIdentity Fishsanity::GetPendingFish() {
return mPendingFish;
}
} // namespace Rando
// C interface
extern "C" {
bool Randomizer_GetPondFishShuffled() {
return FSi->GetPondFishShuffled();
}
bool Randomizer_GetOverworldFishShuffled() {
return FSi->GetOverworldFishShuffled();
}
bool Randomizer_IsAdultPond() {
return FSi->IsAdultPond();
}
void Randomizer_SetPendingFish(FishIdentity* fish) {
return FSi->SetPendingFish(fish);
}
void Fishsanity_DrawEffShadow(Actor* actor, Lights* lights, PlayState* play) {
Vec3f pos, ripplePos;
static Vec3f velocity = { 0.0f, 0.0f, 0.0f };
static Vec3f accel = { 0.0f, 0.0f, 0.0f };
Color_RGBA8 primColor;
Color_RGBA8 envColor;
// Color of the circle for the particles
static Color_RGBA8 mainColors[5][4] = {
{ 240, 154, 137, 200 },
{ 240, 190, 137, 200 },
{ 240, 171, 137, 200 },
{ 240, 141, 146, 200 },
{ 240, 204, 137, 200 }
};
// Color of the faded flares stretching off the particles
static Color_RGBA8 flareColors[5][3] = {
{ 128, 85, 82, 200 },
{ 128, 101, 82, 200 },
{ 128, 93, 82, 200 },
{ 128, 82, 98, 200 },
{ 128, 108, 82, 200 }
};
Color_RGBA8_Copy(&primColor, mainColors[ABS(actor->params) % 5]);
Color_RGBA8_Copy(&envColor, flareColors[ABS(actor->params) % 5]);
// Spawn sparkles
pos.x = Rand_CenteredFloat(23.0f) + actor->world.pos.x;
pos.y = (Rand_Centered() * 12.0f) + actor->world.pos.y;
pos.z = Rand_CenteredFloat(23.0f) + actor->world.pos.z;
velocity.y = 0.05f;
accel.y = 0.025f;
Math_Vec3f_Copy(&ripplePos, &pos);
ripplePos.y += actor->yDistToWater;
if (Rand_ZeroOne() < 0.3f) {
EffectSsKiraKira_SpawnDispersed(play, &pos, &velocity, &accel, &primColor, &envColor, 1800, 10);
}
if (actor->bgCheckFlags & 0x20 && Rand_ZeroOne() < 0.15f) {
EffectSsGRipple_Spawn(play, &ripplePos, 100, 200, 2);
}
}
void Fishsanity_OpenGreyscaleColor(PlayState* play, Color_RGBA16* color, int16_t frameOffset) {
OPEN_DISPS(play->state.gfxCtx);
gDPSetGrayscaleColor(
POLY_OPA_DISP++, color->r, color->g, color->b,
// Make color pulse, offset a bit by the actor params
ABS(255.0f * Math_CosS((play->gameplayFrames + frameOffset) * 1000)));
gSPGrayscale(POLY_OPA_DISP++, true);
CLOSE_DISPS(play->state.gfxCtx);
}
void Fishsanity_CloseGreyscaleColor(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
gSPGrayscale(POLY_OPA_DISP++, false);
CLOSE_DISPS(play->state.gfxCtx);
}
}

View File

@ -0,0 +1,210 @@
#ifndef FISHSANITY_H
#define FISHSANITY_H
#pragma once
#include <z64.h>
#include "randomizerTypes.h"
typedef struct FishsanityPondOptions {
u8 mode;
u8 numFish;
bool ageSplit;
} FishsanityPondOptions;
typedef enum FishsanityOptionsSource {
FSO_SOURCE_RANDO,
FSO_SOURCE_CVARS
};
typedef enum FishsanityCheckType {
FSC_NONE,
FSC_POND,
FSC_GROTTO,
FSC_ZD,
};
#ifdef __cplusplus
namespace Rando {
/**
* @brief Class to provide an interface for and direct Fishsanity features
*/
class Fishsanity {
public:
Fishsanity();
~Fishsanity();
static const FishIdentity defaultIdentity;
/**
* @brief Gets the type of a fishsanity check
* @param rc The RandomizerCheck to categorize
* @return The check's fishsanity type, or FSC_NONE
*/
static FishsanityCheckType GetCheckType(RandomizerCheck rc);
/**
* @brief Returns true if the given FishIdentity represents an actual fish
* @param fish The fish to check
*/
static bool IsFish(FishIdentity* fish);
/**
* @brief Returns true if the given fish location is active
*
* @param loc The Location to check
* @param optionsSource Optionally declare from which source to pull settings
*/
bool GetFishLocationIncluded(Rando::Location* loc, FishsanityOptionsSource optionsSource = FSO_SOURCE_RANDO);
/**
* @brief Get the active and inactive locations in the fishing pond.
*
* @param optionsSource Optionally declare from which source to pull settings
* @return A pair of vectors, where the fist is all active pond fish checks, and the second is all inactive pond fish checks.
*/
std::pair<std::vector<RandomizerCheck>, std::vector<RandomizerCheck>> GetFishingPondLocations(FishsanityOptionsSource optionsSource = FSO_SOURCE_RANDO);
/**
* @brief Get all active fishsanity locations, and all inactive fishing pond locations.
*
* @param optionsSource Optionally declare from which source to pull settings
* @return A pair of vectors, where the first is all active fishsanity checks, and the second is all inactive fishsanity checks.
*/
std::pair<std::vector<RandomizerCheck>, std::vector<RandomizerCheck>> GetFishsanityLocations(FishsanityOptionsSource optionsSource = FSO_SOURCE_RANDO);
/**
* @brief Returns the identity for a caught pond fish given its params.
* Not for use externally from rando, use Randomizer::IdentifyFish or Randomizer_IdentifyFish for that
*
* @param fishParams Actor parameters for the fish to identify
*/
FishIdentity IdentifyPondFish(u8 fishParams);
/**
* @brief Get fishsanity fishing pond options from the requested source
*/
FishsanityPondOptions GetOptions(FishsanityOptionsSource optionsSource = FSO_SOURCE_RANDO);
/**
* @brief Updates current pond fish according to save data
*/
void UpdateCurrentPondFish();
/**
* @brief Initializes internal state from save
*/
void InitializeFromSave();
/**
* @brief Returns true if the fishing pond is shuffled
*/
bool GetPondFishShuffled();
/**
* @brief Returns true if overworld fish are shuffled
*/
bool GetOverworldFishShuffled();
/**
* @brief Returns true if the fishing pond is currently adult (i.e., age split is enabled and Link is adult)
*/
bool IsAdultPond();
/**
* @brief Returns true if all available pond fish checks have been collected for the current age
*/
bool GetPondCleared();
/**
* @brief Returns true if all available Zora's Domain fish checks have been collected
*/
bool GetDomainCleared();
/**
* @brief Advances current fishing pond check; no effect if every fish is shuffled
* @return The new FishIdentity for the current pond, or default identity if every fish is shuffled
*/
FishIdentity AdvancePond();
/**
* @brief Set the currently held fish
* @param fish Pointer to FishIdentity to copy
*/
void SetPendingFish(FishIdentity* fish);
/**
* @brief Get the currently held fish
*/
FishIdentity GetPendingFish();
private:
/**
* @brief Initialize helper statics if they have not been initialized yet
*/
void InitializeHelpers();
/**
* @brief Resolves a pond fish's FishIdentity directly from params & pond age
*
* @param params Params for Fishing actor
* @param adultPond Whether to resolve this fish as an adult check
* @return The FishIdentity for the described fish
*/
static FishIdentity GetPondFish(s16 params, bool adultPond);
/**
* @brief Current pond fish when all pond fish are not randomized
*/
std::pair<FishIdentity, FishIdentity> mCurrPondFish;
/**
* @brief Identity of the last-caught fish in the fishing pond minigame awaiting reward
*/
FishIdentity mPendingFish;
/**
* @brief True if fishsanity helpers have been initialized
*/
static bool fishsanityHelpersInit;
/////////////////////////////////////////////////////////
//// Helper data structures derived from static data ////
/////////////////////////////////////////////////////////
/**
* @brief Mapping from pond fish check to the age where that check can be collected
*/
static std::unordered_map<RandomizerCheck, LinkAge> pondFishAgeMap;
/**
* @brief List of child pond fish checks
*/
static std::vector<RandomizerCheck> childPondFish;
/**
* @brief List of adult pond fish checks
*/
static std::vector<RandomizerCheck> adultPondFish;
};
}
extern "C" {
#endif
/// Returns true if pond fish should be shuffled based on fishsanity settings.
bool Randomizer_GetPondFishShuffled();
/// Returns true if overworld fish should be shuffled based on fishsanity settings.
bool Randomizer_GetOverworldFishShuffled();
/// Returns true if the adult fishing pond should be used for fishsanity.
bool Randomizer_IsAdultPond();
/// Sets the pending fish
void Randomizer_SetPendingFish(FishIdentity* fish);
/// Custom shadow draw function to add effect to uncollected fish
void Fishsanity_DrawEffShadow(Actor* actor, Lights* lights, PlayState* play);
void Fishsanity_OpenGreyscaleColor(PlayState* play, Color_RGBA16* color, int16_t frameOffset);
void Fishsanity_CloseGreyscaleColor(PlayState* play);
#ifdef __cplusplus
}
#endif
#endif // FISHSANITY_H

View File

@ -189,6 +189,7 @@ void Rando::StaticData::InitItemTable() {
itemTable[RG_HEART_CONTAINER] = Item(RG_HEART_CONTAINER, Text{ "Heart Container", "Réceptacle de Coeur", "Herz-Container" }, ITEMTYPE_ITEM, GI_HEART_CONTAINER_2,true, &logic->HeartContainer, RHT_HEART_CONTAINER, ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER,0xC6, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE);
itemTable[RG_ICE_TRAP] = Item(RG_ICE_TRAP, Text{ "Ice Trap", "Piège de Glace", "Eisfalle" }, ITEMTYPE_ITEM, RG_ICE_TRAP, false, &logic->noVariable, RHT_ICE_TRAP, RG_ICE_TRAP, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
itemTable[RG_MILK] = Item(RG_MILK, Text{ "Milk", "Lait", "Milch" }, ITEMTYPE_ITEM, GI_MILK, false, &logic->noVariable, RHT_NONE, ITEM_MILK, OBJECT_GI_MILK, GID_MILK, 0x98, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE);
itemTable[RG_FISH] = Item(RG_FISH, Text{ "Fish", "Poisson", "Pez" }, ITEMTYPE_ITEM, GI_FISH, false, &logic->noVariable, RHT_NONE, ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x47, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE);
// Refills
itemTable[RG_BOMBS_5] = Item(RG_BOMBS_5, Text{ "Bombs (5)", "Bombes (5)", "Bomben (5)" }, ITEMTYPE_REFILL, GI_BOMBS_5, false, &logic->noVariable, RHT_BOMBS_5, ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE);
itemTable[RG_BOMBS_10] = Item(RG_BOMBS_10, Text{ "Bombs (10)", "Bombes (10)", "Bomben (10)" }, ITEMTYPE_REFILL, GI_BOMBS_10, false, &logic->noVariable, RHT_BOMBS_10, ITEM_BOMBS_10, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE);
@ -260,6 +261,8 @@ void Rando::StaticData::InitItemTable() {
itemTable[RG_TWINROVA_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul);
itemTable[RG_GANON_SOUL] = Item(RG_GANON_SOUL, Text{ "Ganon's Soul", "", "" }, ITEMTYPE_ITEM, 0xE8, true, &logic->CanSummonGanon, RHT_GANON_SOUL, RG_GANON_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
itemTable[RG_GANON_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul);
itemTable[RG_FISHING_POLE] = Item(RG_FISHING_POLE, Text{ "Fishing Pole", "Canne à Pêche", "Caña de Pescar" }, ITEMTYPE_ITEM, RG_FISHING_POLE, true, &logic->FishingPole, RHT_FISHING_POLE, RG_FISHING_POLE, OBJECT_GI_FISH, GID_FISHING_POLE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
itemTable[RG_FISHING_POLE].SetCustomDrawFunc(Randomizer_DrawFishingPoleGI);
itemTable[RG_OCARINA_A_BUTTON] = Item(RG_OCARINA_A_BUTTON, Text{ "Ocarina A Button", "Touche A de l'Ocarina", "Botón A de Ocarina" }, ITEMTYPE_ITEM, GI_MAP, true, &logic->OcarinaAButton, RHT_OCARINA_A_BUTTON, RG_OCARINA_A_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
itemTable[RG_OCARINA_A_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton);

View File

@ -55,6 +55,10 @@ class SpoilerCollectionCheck {
return SpoilerCollectionCheck(SPOILER_CHK_COW, scene, flag);
}
static auto Fish(const uint8_t flag, const uint8_t scene = SCENE_FISHING_POND) {
return SpoilerCollectionCheck(SPOILER_CHK_FISH, scene, flag);
}
static auto Fishing(const uint8_t bit) {
return SpoilerCollectionCheck(SPOILER_CHK_MINIGAME, 0x00, bit);
}

View File

@ -516,7 +516,25 @@ std::vector<RandomizerCheck> Rando::StaticData::otherHintLocations = {
RC_GREG_HINT,
RC_SARIA_SONG_HINT,
RC_ALTAR_HINT_CHILD,
RC_ALTAR_HINT_ADULT
RC_ALTAR_HINT_ADULT,
RC_FISHING_POLE_HINT
};
std::vector<RandomizerCheck> Rando::StaticData::pondFishLocations = {
RC_LH_CHILD_FISH_1, RC_LH_CHILD_FISH_2, RC_LH_CHILD_FISH_3, RC_LH_CHILD_FISH_4, RC_LH_CHILD_FISH_5,
RC_LH_CHILD_FISH_6, RC_LH_CHILD_FISH_7, RC_LH_CHILD_FISH_8, RC_LH_CHILD_FISH_9, RC_LH_CHILD_FISH_10,
RC_LH_CHILD_FISH_11, RC_LH_CHILD_FISH_12, RC_LH_CHILD_FISH_13, RC_LH_CHILD_FISH_14, RC_LH_CHILD_FISH_15,
RC_LH_CHILD_LOACH_1, RC_LH_CHILD_LOACH_2, RC_LH_ADULT_FISH_1, RC_LH_ADULT_FISH_2, RC_LH_ADULT_FISH_3,
RC_LH_ADULT_FISH_4, RC_LH_ADULT_FISH_5, RC_LH_ADULT_FISH_6, RC_LH_ADULT_FISH_7, RC_LH_ADULT_FISH_8,
RC_LH_ADULT_FISH_9, RC_LH_ADULT_FISH_10, RC_LH_ADULT_FISH_11, RC_LH_ADULT_FISH_12, RC_LH_ADULT_FISH_13,
RC_LH_ADULT_FISH_14, RC_LH_ADULT_FISH_15, RC_LH_ADULT_LOACH
};
std::vector<RandomizerCheck> Rando::StaticData::overworldFishLocations = {
RC_DMC_UPPER_GROTTO_FISH, RC_DMT_STORMS_GROTTO_FISH, RC_HF_SOUTHEAST_GROTTO_FISH,
RC_HF_NEAR_MARKET_GROTTO_FISH, RC_HF_OPEN_GROTTO_FISH, RC_KAK_OPEN_GROTTO_FISH,
RC_KF_STORMS_GROTTO_FISH, RC_LW_NEAR_SHORTCUTS_GROTTO_FISH, RC_ZR_OPEN_GROTTO_FISH,
RC_ZD_FISH_1, RC_ZD_FISH_2, RC_ZD_FISH_3, RC_ZD_FISH_4, RC_ZD_FISH_5
};
typedef enum {
@ -1372,6 +1390,62 @@ void Rando::StaticData::InitLocationTable() {
locationTable[RC_GC_SHOP_ITEM_7] = Location::Base(RC_GC_SHOP_ITEM_7, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_GORON_CITY, ACTOR_EN_GIRLA, SCENE_GORON_SHOP, 0x06, 0x36, "Shop Item 7", "GC Shop Item 7", RHT_GC_SHOP_ITEM_7, RG_BUY_RED_POTION_40, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2E, 6), SpoilerCollectionCheckGroup::GROUP_GORON_CITY);
locationTable[RC_GC_SHOP_ITEM_8] = Location::Base(RC_GC_SHOP_ITEM_8, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_GORON_CITY, ACTOR_EN_GIRLA, SCENE_GORON_SHOP, 0x07, 0x37, "Shop Item 8", "GC Shop Item 8", RHT_GC_SHOP_ITEM_8, RG_BUY_HEART, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2E, 7), SpoilerCollectionCheckGroup::GROUP_GORON_CITY);
/* +--------------+
| FISHSANITY |
+--------------+ */
// Randomizer Check Randomizer Check Quest Type Area Actor ID Scene ID Params Flags Short Name Spoiler Name Hint Text Key Vanilla Item Categories Spoiler Collection Check Collection Check Group
locationTable[RC_LH_CHILD_FISH_1] = Location::Base(RC_LH_CHILD_FISH_1, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 100, 0x00, "Child Pond Fish 1", "LH Child Pond Fish 1", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_FISH_2] = Location::Base(RC_LH_CHILD_FISH_2, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 101, 0x00, "Child Pond Fish 2", "LH Child Pond Fish 2", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_FISH_3] = Location::Base(RC_LH_CHILD_FISH_3, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 102, 0x00, "Child Pond Fish 3", "LH Child Pond Fish 3", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_FISH_4] = Location::Base(RC_LH_CHILD_FISH_4, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 103, 0x00, "Child Pond Fish 4", "LH Child Pond Fish 4", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_FISH_5] = Location::Base(RC_LH_CHILD_FISH_5, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 104, 0x00, "Child Pond Fish 5", "LH Child Pond Fish 5", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_FISH_6] = Location::Base(RC_LH_CHILD_FISH_6, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 105, 0x00, "Child Pond Fish 6", "LH Child Pond Fish 6", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_FISH_7] = Location::Base(RC_LH_CHILD_FISH_7, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 106, 0x00, "Child Pond Fish 7", "LH Child Pond Fish 7", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_FISH_8] = Location::Base(RC_LH_CHILD_FISH_8, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 107, 0x00, "Child Pond Fish 8", "LH Child Pond Fish 8", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_FISH_9] = Location::Base(RC_LH_CHILD_FISH_9, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 108, 0x00, "Child Pond Fish 9", "LH Child Pond Fish 9", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_FISH_10] = Location::Base(RC_LH_CHILD_FISH_10, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 109, 0x00, "Child Pond Fish 10", "LH Child Pond Fish 10", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_FISH_11] = Location::Base(RC_LH_CHILD_FISH_11, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 110, 0x00, "Child Pond Fish 11", "LH Child Pond Fish 11", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_FISH_12] = Location::Base(RC_LH_CHILD_FISH_12, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 111, 0x00, "Child Pond Fish 12", "LH Child Pond Fish 12", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_FISH_13] = Location::Base(RC_LH_CHILD_FISH_13, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 112, 0x00, "Child Pond Fish 13", "LH Child Pond Fish 13", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_FISH_14] = Location::Base(RC_LH_CHILD_FISH_14, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 113, 0x00, "Child Pond Fish 14", "LH Child Pond Fish 14", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_FISH_15] = Location::Base(RC_LH_CHILD_FISH_15, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 114, 0x00, "Child Pond Fish 15", "LH Child Pond Fish 15", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_LOACH_1] = Location::Base(RC_LH_CHILD_LOACH_1, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 115, 0x00, "Child Pond Loach 1", "LH Child Pond Loach 1", RHT_LH_HYRULE_LOACH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_CHILD_LOACH_2] = Location::Base(RC_LH_CHILD_LOACH_2, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 116, 0x00, "Child Pond Loach 2", "LH Child Pond Loach 2", RHT_LH_HYRULE_LOACH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_1] = Location::Base(RC_LH_ADULT_FISH_1, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 100, 0x00, "Adult Pond Fish 1", "LH Adult Pond Fish 1", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_2] = Location::Base(RC_LH_ADULT_FISH_2, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 101, 0x00, "Adult Pond Fish 2", "LH Adult Pond Fish 2", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_3] = Location::Base(RC_LH_ADULT_FISH_3, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 102, 0x00, "Adult Pond Fish 3", "LH Adult Pond Fish 3", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_4] = Location::Base(RC_LH_ADULT_FISH_4, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 103, 0x00, "Adult Pond Fish 4", "LH Adult Pond Fish 4", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_5] = Location::Base(RC_LH_ADULT_FISH_5, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 104, 0x00, "Adult Pond Fish 5", "LH Adult Pond Fish 5", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_6] = Location::Base(RC_LH_ADULT_FISH_6, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 105, 0x00, "Adult Pond Fish 6", "LH Adult Pond Fish 6", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_7] = Location::Base(RC_LH_ADULT_FISH_7, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 106, 0x00, "Adult Pond Fish 7", "LH Adult Pond Fish 7", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_8] = Location::Base(RC_LH_ADULT_FISH_8, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 107, 0x00, "Adult Pond Fish 8", "LH Adult Pond Fish 8", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_9] = Location::Base(RC_LH_ADULT_FISH_9, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 108, 0x00, "Adult Pond Fish 9", "LH Adult Pond Fish 9", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_10] = Location::Base(RC_LH_ADULT_FISH_10, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 109, 0x00, "Adult Pond Fish 10", "LH Adult Pond Fish 10", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_11] = Location::Base(RC_LH_ADULT_FISH_11, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 110, 0x00, "Adult Pond Fish 11", "LH Adult Pond Fish 11", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_12] = Location::Base(RC_LH_ADULT_FISH_12, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 111, 0x00, "Adult Pond Fish 12", "LH Adult Pond Fish 12", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_13] = Location::Base(RC_LH_ADULT_FISH_13, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 112, 0x00, "Adult Pond Fish 13", "LH Adult Pond Fish 13", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_14] = Location::Base(RC_LH_ADULT_FISH_14, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 113, 0x00, "Adult Pond Fish 14", "LH Adult Pond Fish 14", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_FISH_15] = Location::Base(RC_LH_ADULT_FISH_15, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 114, 0x00, "Adult Pond Fish 15", "LH Adult Pond Fish 15", RHT_LH_POND_FISH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
locationTable[RC_LH_ADULT_LOACH] = Location::Base(RC_LH_ADULT_LOACH, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, 115, 0x00, "Adult Pond Loach", "LH Adult Pond Loach", RHT_LH_HYRULE_LOACH, RG_NONE, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
// Grotto fish
locationTable[RC_KF_STORMS_GROTTO_FISH] = Location::Base(RC_KF_STORMS_GROTTO_FISH, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_KOKIRI_FOREST, ACTOR_EN_FISH, SCENE_GROTTOS, 1, 0x00, "Storms Grotto Fish", "KF Storms Grotto Fish", RHT_KF_STORMS_GROTTO_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0x2C, SCENE_GROTTOS), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST);
locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_FISH] = Location::Base(RC_LW_NEAR_SHORTCUTS_GROTTO_FISH, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_LOST_WOODS, ACTOR_EN_FISH, SCENE_GROTTOS, 1, 0x00, "Near Shortcuts Grotto Fish", "LW Near Shortcuts Grotto Fish", RHT_LW_NEAR_SHORTCUTS_GROTTO_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0x14, SCENE_GROTTOS), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS);
locationTable[RC_HF_SOUTHEAST_GROTTO_FISH] = Location::Base(RC_HF_SOUTHEAST_GROTTO_FISH, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_HYRULE_FIELD, ACTOR_EN_FISH, SCENE_GROTTOS, 1, 0x00, "Southeast Grotto Fish", "HF Southeast Grotto Fish", RHT_HF_SOUTHEAST_GROTTO_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0x22, SCENE_GROTTOS), SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD);
locationTable[RC_HF_OPEN_GROTTO_FISH] = Location::Base(RC_HF_OPEN_GROTTO_FISH, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_HYRULE_FIELD, ACTOR_EN_FISH, SCENE_GROTTOS, 1, 0x00, "Open Grotto Fish", "HF Open Grotto Fish", RHT_HF_OPEN_GROTTO_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0x03, SCENE_GROTTOS), SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD);
locationTable[RC_HF_NEAR_MARKET_GROTTO_FISH] = Location::Base(RC_HF_NEAR_MARKET_GROTTO_FISH, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_HYRULE_FIELD, ACTOR_EN_FISH, SCENE_GROTTOS, 1, 0x00, "Near Market Grotto Fish", "HF Near Market Grotto Fish", RHT_HF_NEAR_MARKET_GROTTO_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0x00, SCENE_GROTTOS), SpoilerCollectionCheckGroup::GROUP_HYRULE_FIELD);
locationTable[RC_KAK_OPEN_GROTTO_FISH] = Location::Base(RC_KAK_OPEN_GROTTO_FISH, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_FISH, SCENE_GROTTOS, 1, 0x00, "Open Grotto Fish", "Kak Open Grotto Fish", RHT_KAK_OPEN_GROTTO_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0x28, SCENE_GROTTOS), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
locationTable[RC_DMT_STORMS_GROTTO_FISH] = Location::Base(RC_DMT_STORMS_GROTTO_FISH, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_FISH, SCENE_GROTTOS, 1, 0x00, "Storms Grotto Fish", "DMT Storms Grotto Fish", RHT_DMT_STORMS_GROTTO_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0x57, SCENE_GROTTOS), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN);
locationTable[RC_DMC_UPPER_GROTTO_FISH] = Location::Base(RC_DMC_UPPER_GROTTO_FISH, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_DEATH_MOUNTAIN_CRATER,ACTOR_EN_FISH, SCENE_GROTTOS, 1, 0x00, "Upper Grotto Fish", "DMC Upper Grotto Fish", RHT_DMC_UPPER_GROTTO_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0x7A, SCENE_GROTTOS), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN);
locationTable[RC_ZR_OPEN_GROTTO_FISH] = Location::Base(RC_ZR_OPEN_GROTTO_FISH, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_ZORAS_RIVER, ACTOR_EN_FISH, SCENE_GROTTOS, 1, 0x00, "Open Grotto Fish", "ZR Open Grotto Fish", RHT_ZR_OPEN_GROTTO_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0x29, SCENE_GROTTOS), SpoilerCollectionCheckGroup::GROUP_ZORAS_RIVER);
// Zora's Domain fish
locationTable[RC_ZD_FISH_1] = Location::Base(RC_ZD_FISH_1, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_ZORAS_DOMAIN, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 0, 0x00, "Fish 1", "ZD Fish 1", RHT_ZD_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF, SCENE_ZORAS_DOMAIN), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
locationTable[RC_ZD_FISH_2] = Location::Base(RC_ZD_FISH_2, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_ZORAS_DOMAIN, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 1, 0x00, "Fish 2", "ZD Fish 2", RHT_ZD_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF, SCENE_ZORAS_DOMAIN), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
locationTable[RC_ZD_FISH_3] = Location::Base(RC_ZD_FISH_3, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_ZORAS_DOMAIN, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 2, 0x00, "Fish 3", "ZD Fish 3", RHT_ZD_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF, SCENE_ZORAS_DOMAIN), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
locationTable[RC_ZD_FISH_4] = Location::Base(RC_ZD_FISH_4, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_ZORAS_DOMAIN, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 3, 0x00, "Fish 4", "ZD Fish 4", RHT_ZD_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF, SCENE_ZORAS_DOMAIN), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
locationTable[RC_ZD_FISH_5] = Location::Base(RC_ZD_FISH_5, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_ZORAS_DOMAIN, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 4, 0x00, "Fish 5", "ZD Fish 5", RHT_ZD_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF, SCENE_ZORAS_DOMAIN), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
// Gossip Stones
// RandomizerCheck Randomizer Check Quest Area Scene Params Flag Short Name Spoiler name Categories
locationTable[RC_DMC_GOSSIP_STONE] = Location::HintStone(RC_DMC_GOSSIP_STONE, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, 14341, 0x05, "Gossip Stone", "DMC Gossip Stone", {});
@ -1424,6 +1498,7 @@ void Rando::StaticData::InitLocationTable() {
locationTable[RC_SARIA_SONG_HINT] = Location::OtherHint(RC_SARIA_SONG_HINT, RCQUEST_BOTH, RCTYPE_GOSSIP_STONE, RCAREA_KOKIRI_FOREST, ACTOR_ID_MAX, SCENE_ID_MAX, "Sarias Song Hint", "Magic Hint Via Saria's Song");
locationTable[RC_ALTAR_HINT_CHILD] = Location::OtherHint(RC_ALTAR_HINT_CHILD, RCQUEST_BOTH, RCTYPE_GOSSIP_STONE, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_TEMPLE_OF_TIME, "Child Altar Hint", "ToT Child Altar Text");
locationTable[RC_ALTAR_HINT_ADULT] = Location::OtherHint(RC_ALTAR_HINT_ADULT, RCQUEST_BOTH, RCTYPE_GOSSIP_STONE, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_TEMPLE_OF_TIME, "Adult Altar Hint", "ToT Adult Altar Text");
locationTable[RC_FISHING_POLE_HINT] = Location::OtherHint(RC_FISHING_POLE_HINT,RCQUEST_BOTH, RCTYPE_GOSSIP_STONE, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, "Fishing Pole Hint","Fishing Pole Hint");
locationTable[RC_TRIFORCE_COMPLETED] = Location::Reward(RC_TRIFORCE_COMPLETED, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_ID_MAX, 0x00, 0x00, "Completed Triforce", "Completed Triforce", RHT_NONE, RG_NONE, {}, SpoilerCollectionCheck::None(), SpoilerCollectionCheckGroup::GROUP_NO_GROUP);
// clang-format on

View File

@ -57,6 +57,7 @@ namespace Rando {
(itemName == RG_OCARINA_C_RIGHT_BUTTON && OcarinaCRightButton) ||
(itemName == RG_OCARINA_C_DOWN_BUTTON && OcarinaCDownButton) ||
(itemName == RG_OCARINA_C_UP_BUTTON && OcarinaCUpButton) ||
(itemName == RG_FISHING_POLE && FishingPole) ||
(itemName == RG_ZELDAS_LULLABY && ZeldasLullaby) ||
(itemName == RG_EPONAS_SONG && EponasSong) ||
(itemName == RG_SARIAS_SONG && SariasSong) ||
@ -150,6 +151,11 @@ namespace Rando {
case RG_PRELUDE_OF_LIGHT:
return Ocarina && OcarinaCLeftButton && OcarinaCRightButton && OcarinaCUpButton;
// Misc. Items
// TODO: Once child wallet shuffle is added, this will need to be updated to account for the fishing pond entry fee.
case RG_FISHING_POLE:
return true; // as long as you have enough rubies
// Magic items
default:
return MagicMeter && (IsMagicItem(itemName) || (IsMagicArrow(itemName) && CanUse(RG_FAIRY_BOW)));
@ -325,6 +331,9 @@ namespace Rando {
CanOpenStormGrotto = CanUse(RG_SONG_OF_STORMS) && (ShardOfAgony || ctx->GetTrickOption(RT_GROTTOS_WITHOUT_AGONY));
HookshotOrBoomerang = CanUse(RG_HOOKSHOT) || CanUse(RG_BOOMERANG);
CanGetNightTimeGS = (CanUse(RG_SUNS_SONG) || !ctx->GetOption(RSK_SKULLS_SUNS_SONG));
CanFish = CanUse(RG_FISHING_POLE) || !ctx->GetOption(RSK_SHUFFLE_FISHING_POLE);
CanGetChildFish = CanFish && (IsChild || (IsAdult && !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)));
CanGetAdultFish = CanFish && IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT);
GuaranteeTradePath = ctx->GetOption(RSK_SHUFFLE_INTERIOR_ENTRANCES) || ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES) || ctx->GetTrickOption(RT_DMT_BOLERO_BIGGORON) || CanBlastOrSmash || StopGCRollingGoronAsAdult;
//GuaranteeHint = (hints == "Mask" && MaskofTruth) || (hints == "Agony") || (hints != "Mask" && hints != "Agony");
@ -743,6 +752,10 @@ namespace Rando {
CanOpenStormGrotto = false;
BigPoeKill = false;
HookshotOrBoomerang = false;
CanGetChildFish = false;
CanGetAdultFish = false;
FishingPole = false;
CanFish = false;
BaseHearts = ctx->GetOption(RSK_STARTING_HEARTS).Value<uint8_t>() + 1;
Hearts = 0;

View File

@ -295,6 +295,10 @@ class Logic {
bool BigPoeKill = false;
bool HookshotOrBoomerang = false;
bool CanGetNightTimeGS = false;
bool FishingPole = false;
bool CanGetChildFish = false;
bool CanGetAdultFish = false;
bool CanFish = false;
uint8_t OcarinaButtons = 0;
uint8_t BaseHearts = 0;

View File

@ -233,6 +233,9 @@ void Settings::CreateOptionDescriptions() {
"\n"
"The Gerudo Card is required to enter the Gerudo Training Grounds, opening "
"the gate to Haunted Wasteland and the Horseback Archery minigame.";
mOptionDescriptions[RSK_SHUFFLE_FISHING_POLE] = "Shuffles the fishing pole into the item pool.\n"
"\n"
"The fishing pole is required to play the fishing pond minigame.";
mOptionDescriptions[RSK_SHOPSANITY] = "Off - All shop items will be the same as vanilla.\n"
"\n"
"0 Items - Vanilla shop items will be shuffled among different shops.\n"
@ -250,6 +253,17 @@ void Settings::CreateOptionDescriptions() {
mOptionDescriptions[RSK_SHOPSANITY_PRICES_AFFORDABLE] =
"Affordable prices per tier: starter = 10, adult = 105, giant = 205, tycoon = 505\n\n"
"Use this to enable wallet tier locking, but make shop items not as expensive as they could be.";
mOptionDescriptions[RSK_FISHSANITY] = "Off - Fish will not be shuffled. No changes will be made to fishing behavior.\n\n"
"Shuffle Fishing Pond - The fishing pond's fish will be shuffled. Catching a fish in the fishing pond will grant a reward.\n\n"
"Shuffle Overworld Fish - Fish in generic grottos and Zora's Domain will be shuffled. Catching a fish in a bottle will give a reward.\n\n"
"Shuffle Both - Both overworld fish and fish in the fishing pond will be shuffled.";
mOptionDescriptions[RSK_FISHSANITY_POND_COUNT] = "The number of fish to randomize in the fishing pool.\n\n"
"If set to maximum, each fish will have a unique check, including a Hyrule Loach which appears only as child, and "
"uncaught fish will be given a visual indicator to distinguish from already-caught fish.\n\n"
"Otherwise, any fish caught in the pond will give a reward, until all rewards have been given.";
mOptionDescriptions[RSK_FISHSANITY_AGE_SPLIT] = "Enabling this will split the fishing pond fish by age, making fishing pond fish grant different rewards as child and adult.\n\n"
"If disabled, then the child pond will be shuffled and shared between both ages.\n\n"
"Note that, as child, there is a second loach available in the pond!";
mOptionDescriptions[RSK_SHUFFLE_SCRUBS] =
"Off - Scrubs will not be shuffled. The 3 Scrubs that give one-time items in the vanilla game "
"(PoH, Deku Nut capacity, and Deku Stick capacity) will have random items.\n"
@ -485,6 +499,7 @@ void Settings::CreateOptionDescriptions() {
"Talking to the chest game owner after buying a key will tell you the location of Greg the Green Rupee.";
mOptionDescriptions[RSK_SARIA_HINT] = "Talking to Saria either in person or through Saria's Song will tell you the "
"location of a progressive magic meter.";
mOptionDescriptions[RSK_FISHING_POLE_HINT] = "Talking to the fishing pond owner without the fishing pole will tell you its location.";
mOptionDescriptions[RSK_FROGS_HINT] = "Standing near the pedestal for the frogs in Zora's River will tell you the "
"reward for the frogs' ocarina game.";
mOptionDescriptions[RSK_BIGGORON_HINT] = "Talking to Biggoron will tell you the item he will give you in exchange for the Claim Check.";

View File

@ -36,6 +36,7 @@
#include "trial.h"
#include "settings.h"
#include "soh/util.h"
#include "fishsanity.h"
extern "C" uint32_t ResourceMgr_IsGameMasterQuest();
extern "C" uint32_t ResourceMgr_IsSceneMasterQuest(s16 sceneNum);
@ -464,6 +465,20 @@ void Randomizer::LoadHintMessages() {
"Komm wieder sobald du deinen eigenen&Bogen hast, um einen %rspeziellen Preis%w zu&erhalten!",
"J'aurai %rune autre récompense%w pour toi&lorsque tu auras ton propre arc."));
// Fishing pond pole hint
CustomMessageManager::Instance->CreateMessage(
Randomizer::randoMiscHintsTableID, TEXT_FISHING_POND_START,
CustomMessage(ctx->GetHint(RH_FISHING_POLE)->GetText().GetEnglish(),
ctx->GetHint(RH_FISHING_POLE)->GetText().GetEnglish(),
ctx->GetHint(RH_FISHING_POLE)->GetText().GetFrench())
);
CustomMessageManager::Instance->CreateMessage(
Randomizer::randoMiscHintsTableID, TEXT_FISHING_POND_START_MET,
CustomMessage(ctx->GetHint(RH_FISHING_POLE)->GetText().GetEnglish(),
ctx->GetHint(RH_FISHING_POLE)->GetText().GetEnglish(),
ctx->GetHint(RH_FISHING_POLE)->GetText().GetFrench())
);
// Lake Hylia water level system
CustomMessageManager::Instance->CreateMessage(Randomizer::hintMessageTableID, TEXT_LAKE_HYLIA_WATER_SWITCH_SIGN,
CustomMessage("Water level control system.&Keep away!",
@ -731,6 +746,7 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe
// Bottle Refills
case RG_MILK:
case RG_FISH:
case RG_RED_POTION_REFILL:
case RG_GREEN_POTION_REFILL:
case RG_BLUE_POTION_REFILL:
@ -782,6 +798,8 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe
case RG_MAGIC_SINGLE:
case RG_MAGIC_DOUBLE:
return gSaveContext.magicLevel < 2 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE;
case RG_FISHING_POLE:
return !Flags_GetRandomizerInf(RAND_INF_FISHING_POLE_FOUND) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE;
// Songs
case RG_ZELDAS_LULLABY:
@ -1123,6 +1141,7 @@ GetItemID Randomizer::GetItemIdFromRandomizerGet(RandomizerGet randoGet, GetItem
case RG_BLUE_POTION_REFILL:
case RG_BUY_BLUE_POTION:
return GI_POTION_BLUE;
case RG_FISH:
case RG_BUY_FISH:
return GI_FISH;
case RG_BUY_BLUE_FIRE:
@ -1318,6 +1337,7 @@ bool Randomizer::IsItemVanilla(RandomizerGet randoGet) {
case RG_PIECE_OF_HEART:
case RG_HEART_CONTAINER:
case RG_MILK:
case RG_FISH:
case RG_BOMBS_5:
case RG_BOMBS_10:
case RG_BOMBS_20:
@ -1520,9 +1540,57 @@ std::map<RandomizerCheck, RandomizerInf> rcToRandomizerInf = {
{ RC_LH_ADULT_FISHING, RAND_INF_ADULT_FISHING },
{ RC_MARKET_10_BIG_POES, RAND_INF_10_BIG_POES },
{ RC_KAK_100_GOLD_SKULLTULA_REWARD, RAND_INF_KAK_100_GOLD_SKULLTULA_REWARD },
{ RC_LH_CHILD_FISH_1, RAND_INF_CHILD_FISH_1 },
{ RC_LH_CHILD_FISH_2, RAND_INF_CHILD_FISH_2 },
{ RC_LH_CHILD_FISH_3, RAND_INF_CHILD_FISH_3 },
{ RC_LH_CHILD_FISH_4, RAND_INF_CHILD_FISH_4 },
{ RC_LH_CHILD_FISH_5, RAND_INF_CHILD_FISH_5 },
{ RC_LH_CHILD_FISH_6, RAND_INF_CHILD_FISH_6 },
{ RC_LH_CHILD_FISH_7, RAND_INF_CHILD_FISH_7 },
{ RC_LH_CHILD_FISH_8, RAND_INF_CHILD_FISH_8 },
{ RC_LH_CHILD_FISH_9, RAND_INF_CHILD_FISH_9 },
{ RC_LH_CHILD_FISH_10, RAND_INF_CHILD_FISH_10 },
{ RC_LH_CHILD_FISH_11, RAND_INF_CHILD_FISH_11 },
{ RC_LH_CHILD_FISH_12, RAND_INF_CHILD_FISH_12 },
{ RC_LH_CHILD_FISH_13, RAND_INF_CHILD_FISH_13 },
{ RC_LH_CHILD_FISH_14, RAND_INF_CHILD_FISH_14 },
{ RC_LH_CHILD_FISH_15, RAND_INF_CHILD_FISH_15 },
{ RC_LH_CHILD_LOACH_1, RAND_INF_CHILD_LOACH_1 },
{ RC_LH_CHILD_LOACH_2, RAND_INF_CHILD_LOACH_2 },
{ RC_LH_ADULT_FISH_1, RAND_INF_ADULT_FISH_1 },
{ RC_LH_ADULT_FISH_2, RAND_INF_ADULT_FISH_2 },
{ RC_LH_ADULT_FISH_3, RAND_INF_ADULT_FISH_3 },
{ RC_LH_ADULT_FISH_4, RAND_INF_ADULT_FISH_4 },
{ RC_LH_ADULT_FISH_5, RAND_INF_ADULT_FISH_5 },
{ RC_LH_ADULT_FISH_6, RAND_INF_ADULT_FISH_6 },
{ RC_LH_ADULT_FISH_7, RAND_INF_ADULT_FISH_7 },
{ RC_LH_ADULT_FISH_8, RAND_INF_ADULT_FISH_8 },
{ RC_LH_ADULT_FISH_9, RAND_INF_ADULT_FISH_9 },
{ RC_LH_ADULT_FISH_10, RAND_INF_ADULT_FISH_10 },
{ RC_LH_ADULT_FISH_11, RAND_INF_ADULT_FISH_11 },
{ RC_LH_ADULT_FISH_12, RAND_INF_ADULT_FISH_12 },
{ RC_LH_ADULT_FISH_13, RAND_INF_ADULT_FISH_13 },
{ RC_LH_ADULT_FISH_14, RAND_INF_ADULT_FISH_14 },
{ RC_LH_ADULT_FISH_15, RAND_INF_ADULT_FISH_15 },
{ RC_LH_ADULT_LOACH, RAND_INF_ADULT_LOACH },
{ RC_ZR_OPEN_GROTTO_FISH, RAND_INF_GROTTO_FISH_ZR_OPEN_GROTTO },
{ RC_DMC_UPPER_GROTTO_FISH, RAND_INF_GROTTO_FISH_DMC_UPPER_GROTTO },
{ RC_DMT_STORMS_GROTTO_FISH, RAND_INF_GROTTO_FISH_DMT_STORMS_GROTTO },
{ RC_KAK_OPEN_GROTTO_FISH, RAND_INF_GROTTO_FISH_KAK_OPEN_GROTTO },
{ RC_HF_NEAR_MARKET_GROTTO_FISH, RAND_INF_GROTTO_FISH_HF_NEAR_MARKET_GROTTO },
{ RC_HF_OPEN_GROTTO_FISH, RAND_INF_GROTTO_FISH_HF_OPEN_GROTTO },
{ RC_HF_SOUTHEAST_GROTTO_FISH, RAND_INF_GROTTO_FISH_HF_SOUTHEAST_GROTTO },
{ RC_LW_NEAR_SHORTCUTS_GROTTO_FISH, RAND_INF_GROTTO_FISH_LW_NEAR_SHORTCUTS_GROTTO },
{ RC_KF_STORMS_GROTTO_FISH, RAND_INF_GROTTO_FISH_KF_STORMS_GROTTO },
{ RC_ZD_FISH_1, RAND_INF_ZD_FISH_1 },
{ RC_ZD_FISH_2, RAND_INF_ZD_FISH_2 },
{ RC_ZD_FISH_3, RAND_INF_ZD_FISH_3 },
{ RC_ZD_FISH_4, RAND_INF_ZD_FISH_4 },
{ RC_ZD_FISH_5, RAND_INF_ZD_FISH_5 },
};
Rando::Location* Randomizer::GetCheckObjectFromActor(s16 actorId, s16 sceneNum, s32 actorParams = 0x00) {
auto fs = OTRGlobals::Instance->gRandoContext->GetFishsanity();
RandomizerCheck specialRc = RC_UNKNOWN_CHECK;
// TODO: Migrate these special cases into table, or at least document why they are special
switch(sceneNum) {
@ -1620,6 +1688,15 @@ Rando::Location* Randomizer::GetCheckObjectFromActor(s16 actorId, s16 sceneNum,
specialRc = RC_DODONGOS_CAVERN_GOSSIP_STONE;
}
break;
case SCENE_GROTTOS:
// Grotto fish are identified by respawn data
if (actorId == ACTOR_EN_FISH && actorParams == 1) {
int8_t data = gSaveContext.respawn[RESPAWN_MODE_RETURN].data;
if (Rando::StaticData::randomizerGrottoFishMap.contains(data)) {
specialRc = Rando::StaticData::randomizerGrottoFishMap[data];
}
}
break;
}
if (specialRc != RC_UNKNOWN_CHECK) {
@ -1727,6 +1804,27 @@ CowIdentity Randomizer::IdentifyCow(s32 sceneNum, s32 posX, s32 posZ) {
return cowIdentity;
}
FishIdentity Randomizer::IdentifyFish(s32 sceneNum, s32 actorParams) {
struct FishIdentity fishIdentity;
fishIdentity.randomizerInf = RAND_INF_MAX;
fishIdentity.randomizerCheck = RC_UNKNOWN_CHECK;
// Fishsanity will determine what the identity of the fish should be
if (sceneNum == SCENE_FISHING_POND) {
return OTRGlobals::Instance->gRandoContext->GetFishsanity()->IdentifyPondFish(actorParams);
}
Rando::Location* location = GetCheckObjectFromActor(ACTOR_EN_FISH, sceneNum, actorParams);
if (location->GetRandomizerCheck() != RC_UNKNOWN_CHECK) {
fishIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()];
fishIdentity.randomizerCheck = location->GetRandomizerCheck();
}
return fishIdentity;
}
u8 Randomizer::GetRandoSettingValue(RandomizerSettingKey randoSettingKey) {
return Rando::Context::GetInstance()->GetOption(randoSettingKey).GetSelectedOptionIndex();
}
@ -2557,6 +2655,32 @@ CustomMessage Randomizer::GetSariaMessage(u16 originalTextId) {
}
}
CustomMessage Randomizer::GetFishingPondOwnerMessage(u16 originalTextId) {
CustomMessage hintMessageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::randoMiscHintsTableID, TEXT_FISHING_POND_START);
CustomMessage messageEntry = CustomMessage(
"Sorry, but the pond is closed.&I've lost my good %rfishing pole%w...&Can't go fishing without it!",
"",
""
);
if (Rando::Context::GetInstance()->GetOption(RSK_FISHING_POLE_HINT)) {
messageEntry = messageEntry + hintMessageEntry;
}
// if the fishing pond guy doesnt remember me i will cry :(
if (originalTextId == TEXT_FISHING_POND_START_MET) {
messageEntry = CustomMessage(
"Hey, mister! I remember you!&It's been a long time!^",
"",
""
) + messageEntry;
}
messageEntry.Format();
return messageEntry;
}
CustomMessage Randomizer::GetMerchantMessage(RandomizerInf randomizerInf, u16 textId, bool mysterious) {
auto ctx = Rando::Context::GetInstance();
CustomMessage messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::merchantMessageTableID, textId);
@ -3055,7 +3179,7 @@ CustomMessage Randomizer::GetGoronMessage(u16 index) {
void Randomizer::CreateCustomMessages() {
// RANDTODO: Translate into french and german and replace GIMESSAGE_UNTRANSLATED
// with GIMESSAGE(getItemID, itemID, english, german, french).
const std::array<GetItemMessage, 71> getItemMessages = {{
const std::array<GetItemMessage, 72> getItemMessages = {{
GIMESSAGE(RG_GREG_RUPEE, ITEM_MASK_GORON,
"You found %gGreg%w!",
"%gGreg%w! Du hast ihn wirklich gefunden!",
@ -3321,6 +3445,7 @@ void Randomizer::CreateCustomMessages() {
"You got the %y\xa6%r button for the&Ocarina%w! You can now use it&while playing songs!",
"Der %y\xa6%r Knopf%w!&Du kannst ihn nun zum Spielen&von Liedern auf der %rOkarina%w&verwenden!",
"Vous trouvez la %rtouche %y\xa6%r de&l'Ocarina%w! Vous pouvez&maintenant l'utiliser lorsque&vous en jouez!"),
GIMESSAGE_UNTRANSLATED(RG_FISHING_POLE, ITEM_FISHING_POLE, "You found a lost %rFishing Pole%w!&Time to hit the pond!"),
}};
CreateGetItemMessages(&getItemMessages);
CreateRupeeMessages();

View File

@ -13,6 +13,7 @@
#include <soh/Enhancements/custom-message/CustomMessageManager.h>
#include "soh/Enhancements/item-tables/ItemTableTypes.h"
#include "../custom-message/CustomMessageTypes.h"
#include "soh/Enhancements/randomizer/fishsanity.h"
#define MAX_SEED_STRING_SIZE 1024
#define NUM_TRIFORCE_PIECE_MESSAGES 6
@ -53,6 +54,7 @@ class Randomizer {
ScrubIdentity IdentifyScrub(s32 sceneNum, s32 actorParams, s32 respawnData);
ShopItemIdentity IdentifyShopItem(s32 sceneNum, u8 slotIndex);
CowIdentity IdentifyCow(s32 sceneNum, s32 posX, s32 posZ);
FishIdentity IdentifyFish(s32 sceneNum, s32 actorParams);
GetItemEntry GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogItemId, bool checkObtainability = true);
GetItemEntry GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId, bool checkObtainability = true);
GetItemID GetItemIdFromRandomizerGet(RandomizerGet randoGet, GetItemID ogItemId);
@ -62,6 +64,7 @@ class Randomizer {
CustomMessage ReplaceWithItemName(CustomMessage message, std::string&& toReplace, RandomizerCheck hintedCheck);
CustomMessage GetMiscHintMessage(TextIDs textToGet, RandomizerCheck hintedCheck, RandomizerCheck otherCheck = RC_UNKNOWN_CHECK);
CustomMessage GetSariaMessage(u16 originalTextId);
CustomMessage GetFishingPondOwnerMessage(u16 originalTextId);
CustomMessage GetMerchantMessage(RandomizerInf randomizerInf, u16 textId, bool mysterious = false);
RandomizerCheck GetCheckFromActor(s16 actorId, s16 sceneNum, s16 actorParams);
CustomMessage GetCursedSkullMessage(s16 params, RandomizerCheck hintedCheck);

View File

@ -112,6 +112,7 @@ typedef enum {
RCTYPE_BOSS_HEART_OR_OTHER_REWARD, // Boss heart container or lesser dungeon rewards (lens, ice arrow)
RCTYPE_DUNGEON_REWARD, // Dungeon rewards (blue warps)
RCTYPE_OCARINA, // Ocarina locations
RCTYPE_FISH,
} RandomizerCheckType;
typedef enum { RCQUEST_VANILLA, RCQUEST_MQ, RCQUEST_BOTH } RandomizerCheckQuest;
@ -905,7 +906,40 @@ typedef enum {
RC_ZF_GS_HIDDEN_CAVE,
RC_LH_UNDERWATER_ITEM,
RC_LH_CHILD_FISHING,
RC_LH_CHILD_FISH_1,
RC_LH_CHILD_FISH_2,
RC_LH_CHILD_FISH_3,
RC_LH_CHILD_FISH_4,
RC_LH_CHILD_FISH_5,
RC_LH_CHILD_FISH_6,
RC_LH_CHILD_FISH_7,
RC_LH_CHILD_FISH_8,
RC_LH_CHILD_FISH_9,
RC_LH_CHILD_FISH_10,
RC_LH_CHILD_FISH_11,
RC_LH_CHILD_FISH_12,
RC_LH_CHILD_FISH_13,
RC_LH_CHILD_FISH_14,
RC_LH_CHILD_FISH_15,
RC_LH_CHILD_LOACH_1,
RC_LH_CHILD_LOACH_2,
RC_LH_ADULT_FISHING,
RC_LH_ADULT_FISH_1,
RC_LH_ADULT_FISH_2,
RC_LH_ADULT_FISH_3,
RC_LH_ADULT_FISH_4,
RC_LH_ADULT_FISH_5,
RC_LH_ADULT_FISH_6,
RC_LH_ADULT_FISH_7,
RC_LH_ADULT_FISH_8,
RC_LH_ADULT_FISH_9,
RC_LH_ADULT_FISH_10,
RC_LH_ADULT_FISH_11,
RC_LH_ADULT_FISH_12,
RC_LH_ADULT_FISH_13,
RC_LH_ADULT_FISH_14,
RC_LH_ADULT_FISH_15,
RC_LH_ADULT_LOACH,
RC_LH_LAB_DIVE,
RC_LH_TRADE_FROG,
RC_LH_FREESTANDING_POH,
@ -1401,6 +1435,21 @@ typedef enum {
RC_SARIA_SONG_HINT,
RC_ALTAR_HINT_CHILD,
RC_ALTAR_HINT_ADULT,
RC_FISHING_POLE_HINT,
RC_DMC_UPPER_GROTTO_FISH,
RC_DMT_STORMS_GROTTO_FISH,
RC_HF_SOUTHEAST_GROTTO_FISH,
RC_HF_NEAR_MARKET_GROTTO_FISH,
RC_HF_OPEN_GROTTO_FISH,
RC_KAK_OPEN_GROTTO_FISH,
RC_KF_STORMS_GROTTO_FISH,
RC_LW_NEAR_SHORTCUTS_GROTTO_FISH,
RC_ZR_OPEN_GROTTO_FISH,
RC_ZD_FISH_1,
RC_ZD_FISH_2,
RC_ZD_FISH_3,
RC_ZD_FISH_4,
RC_ZD_FISH_5,
RC_MAX
} RandomizerCheck;
@ -1807,6 +1856,7 @@ typedef enum {
RG_HEART_CONTAINER,
RG_ICE_TRAP,
RG_MILK,
RG_FISH,
RG_BOMBS_5,
RG_BOMBS_10,
RG_BOMBS_20,
@ -1872,6 +1922,7 @@ typedef enum {
RG_OCARINA_C_DOWN_BUTTON,
RG_OCARINA_C_LEFT_BUTTON,
RG_OCARINA_C_RIGHT_BUTTON,
RG_FISHING_POLE,
RG_HINT,
RG_TYCOON_WALLET,
RG_FAIRY_OCARINA,
@ -1959,6 +2010,7 @@ typedef enum {
RH_ALTAR_CHILD,
RH_ALTAR_ADULT,
RH_SARIA,
RH_FISHING_POLE,
RH_SHEIK_LIGHT_ARROWS,
RH_MINUET_WARP_LOC,
RH_BOLERO_WARP_LOC,
@ -2183,6 +2235,7 @@ typedef enum {
RHT_KF_MIDOS_BOTTOM_RIGHT_CHEST,
RHT_KF_KOKIRI_SWORD_CHEST,
RHT_KF_STORMS_GROTTO_CHEST,
RHT_KF_STORMS_GROTTO_FISH,
RHT_KF_LINKS_HOUSE_COW,
RHT_KF_GS_KNOW_IT_ALL_HOUSE,
RHT_KF_GS_BEAN_PATCH,
@ -2199,6 +2252,7 @@ typedef enum {
RHT_LW_OCARINA_MEMORY_GAME,
RHT_LW_TARGET_IN_WOODS,
RHT_LW_NEAR_SHORTCUTS_GROTTO_CHEST,
RHT_LW_NEAR_SHORTCUTS_GROTTO_FISH,
RHT_LW_TRADE_COJIRO,
RHT_DEKU_THEATER_SKULL_MASK,
RHT_DEKU_THEATER_MASK_OF_TRUTH,
@ -2218,9 +2272,12 @@ typedef enum {
RHT_SFM_GS,
RHT_HF_OCARINA_OF_TIME_ITEM,
RHT_HF_NEAR_MARKET_GROTTO_CHEST,
RHT_HF_NEAR_MARKET_GROTTO_FISH,
RHT_HF_TEKTITE_GROTTO_FREESTANDING_POH,
RHT_HF_SOUTHEAST_GROTTO_CHEST,
RHT_HF_SOUTHEAST_GROTTO_FISH,
RHT_HF_OPEN_GROTTO_CHEST,
RHT_HF_OPEN_GROTTO_FISH,
RHT_HF_DEKU_SCRUB_GROTTO,
RHT_HF_COW_GROTTO_COW,
RHT_HF_GS_COW_GROTTO,
@ -2288,6 +2345,7 @@ typedef enum {
RHT_KAK_WINDMILL_FREESTANDING_POH,
RHT_KAK_MAN_ON_ROOF,
RHT_KAK_OPEN_GROTTO_CHEST,
RHT_KAK_OPEN_GROTTO_FISH,
RHT_KAK_REDEAD_GROTTO_CHEST,
RHT_KAK_SHOOTING_GALLERY_REWARD,
RHT_KAK_TRADE_ODD_MUSHROOM,
@ -2334,6 +2392,7 @@ typedef enum {
RHT_DMT_FREESTANDING_POH,
RHT_DMT_CHEST,
RHT_DMT_STORMS_GROTTO_CHEST,
RHT_DMT_STORMS_GROTTO_FISH,
RHT_DMT_TRADE_BROKEN_SWORD,
RHT_DMT_TRADE_EYEDROPS,
RHT_DMT_TRADE_CLAIM_CHECK,
@ -2367,6 +2426,7 @@ typedef enum {
RHT_DMC_VOLCANO_FREESTANDING_POH,
RHT_DMC_WALL_FREESTANDING_POH,
RHT_DMC_UPPER_GROTTO_CHEST,
RHT_DMC_UPPER_GROTTO_FISH,
RHT_DMC_GREAT_FAIRY_REWARD,
RHT_DMC_DEKU_SCRUB,
RHT_DMC_DEKU_SCRUB_GROTTO_LEFT,
@ -2376,6 +2436,7 @@ typedef enum {
RHT_DMC_GS_BEAN_PATCH,
RHT_ZR_MAGIC_BEAN_SALESMAN,
RHT_ZR_OPEN_GROTTO_CHEST,
RHT_ZR_OPEN_GROTTO_FISH,
RHT_ZR_FROGS_ZELDAS_LULLABY,
RHT_ZR_FROGS_EPONAS_SONG,
RHT_ZR_FROGS_SARIAS_SONG,
@ -2404,6 +2465,7 @@ typedef enum {
RHT_ZD_SHOP_ITEM_6,
RHT_ZD_SHOP_ITEM_7,
RHT_ZD_SHOP_ITEM_8,
RHT_ZD_FISH,
RHT_ZF_GREAT_FAIRY_REWARD,
RHT_ZF_ICEBERG_FREESTANDING_POH,
RHT_ZF_BOTTOM_FREESTANDING_POH,
@ -2413,6 +2475,8 @@ typedef enum {
RHT_LH_UNDERWATER_ITEM,
RHT_LH_CHILD_FISHING,
RHT_LH_ADULT_FISHING,
RHT_LH_POND_FISH,
RHT_LH_HYRULE_LOACH,
RHT_LH_LAB_DIVE,
RHT_LH_TRADE_FROG,
RHT_LH_FREESTANDING_POH,
@ -3094,6 +3158,7 @@ typedef enum {
RHT_OCARINA_C_DOWN_BUTTON,
RHT_OCARINA_C_LEFT_BUTTON,
RHT_OCARINA_C_RIGHT_BUTTON,
RHT_FISHING_POLE,
RHT_EPONA,
// Entrances
RHT_DESERT_COLOSSUS_TO_COLOSSUS_GROTTO,
@ -3284,6 +3349,8 @@ typedef enum {
RHT_WARP_CHOICE,
RHT_FROGS_HINT01,
RHT_FROGS_HINT02,
RHT_FISHING_POLE_HINT01,
RHT_FISHING_POLE_HINT02,
// Ganon Line
RHT_GANON_LINE01,
RHT_GANON_LINE02,
@ -3453,6 +3520,7 @@ typedef enum {
RSK_HBA_HINT,
RSK_WARP_SONG_HINTS,
RSK_SCRUB_TEXT_HINT,
RSK_FISHING_POLE_HINT,
RSK_HINT_CLARITY,
RSK_HINT_DISTRIBUTION,
RSK_SHUFFLE_MAPANDCOMPASS,
@ -3538,6 +3606,10 @@ typedef enum {
RSK_TRIFORCE_HUNT_PIECES_TOTAL,
RSK_TRIFORCE_HUNT_PIECES_REQUIRED,
RSK_SHUFFLE_BOSS_SOULS,
RSK_FISHSANITY,
RSK_FISHSANITY_POND_COUNT,
RSK_FISHSANITY_AGE_SPLIT,
RSK_SHUFFLE_FISHING_POLE,
RSK_MAX
} RandomizerSettingKey;
@ -3668,6 +3740,14 @@ typedef enum {
RO_BOSS_SOULS_ON_PLUS_GANON,
} RandoOptionBossSouls;
//Fishsanity settings (off, pond only, grottos only, both)
typedef enum {
RO_FISHSANITY_OFF,
RO_FISHSANITY_POND,
RO_FISHSANITY_OVERWORLD,
RO_FISHSANITY_BOTH
} RandoOptionsFishsanity;
//Any Dungeon Item (start with, vanilla, own dungeon, any dungeon,
//overworld, anywhere)
typedef enum {
@ -3918,6 +3998,11 @@ typedef struct CowIdentity {
RandomizerCheck randomizerCheck;
} CowIdentity;
typedef struct FishIdentity {
RandomizerInf randomizerInf;
RandomizerCheck randomizerCheck;
} FishIdentity;
typedef enum {
TRACKER_WINDOW_FLOATING,
TRACKER_WINDOW_WINDOW

View File

@ -5,6 +5,7 @@
#include <string>
#include <libultraship/bridge.h>
#include "z64.h"
#include "fishsanity.h"
std::map<RandomizerCheckArea, std::string> rcAreaNames = {
{ RCAREA_KOKIRI_FOREST, "Kokiri Forest" },
@ -153,6 +154,7 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() {
((CVarGetInteger("gRandomizeShuffleTokens", RO_TOKENSANITY_OFF) == RO_TOKENSANITY_DUNGEONS) &&
RandomizerCheckObjects::AreaIsDungeon(location.GetArea()))) &&
(location.GetRCType() != RCTYPE_COW || CVarGetInteger("gRandomizeShuffleCows", RO_GENERIC_NO)) &&
(location.GetRCType() != RCTYPE_FISH || ctx->GetFishsanity()->GetFishLocationIncluded(&location, FSO_SOURCE_CVARS)) &&
(location.GetRCType() != RCTYPE_ADULT_TRADE ||
CVarGetInteger("gRandomizeShuffleAdultTrade", RO_GENERIC_NO)) &&
(location.GetRandomizerCheck() != RC_KF_KOKIRI_SWORD_CHEST ||

View File

@ -15,6 +15,7 @@
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "z64item.h"
#include "randomizerTypes.h"
#include "fishsanity.h"
extern "C" {
#include "variables.h"
@ -76,6 +77,10 @@ bool showLinksPocket;
bool fortressFast;
bool fortressNormal;
u8 fishsanityMode;
u8 fishsanityPondCount;
bool fishsanityAgeSplit;
// persistent during gameplay
bool initialized;
bool doAreaScroll;
@ -119,6 +124,7 @@ RandomizerCheck lastLocationChecked = RC_UNKNOWN_CHECK;
RandomizerCheckArea previousArea = RCAREA_INVALID;
RandomizerCheckArea currentArea = RCAREA_INVALID;
OSContPad* trackerButtonsPressed;
std::unordered_map<RandomizerCheck, std::string> checkNameOverrides;
void BeginFloatWindows(std::string UniqueName, bool& open, ImGuiWindowFlags flags = 0);
bool CompareChecks(RandomizerCheck, RandomizerCheck);
@ -415,6 +421,7 @@ bool HasItemBeenCollected(RandomizerCheck rc) {
case SpoilerCollectionCheckType::SPOILER_CHK_MERCHANT:
case SpoilerCollectionCheckType::SPOILER_CHK_SHOP_ITEM:
case SpoilerCollectionCheckType::SPOILER_CHK_COW:
case SpoilerCollectionCheckType::SPOILER_CHK_FISH:
case SpoilerCollectionCheckType::SPOILER_CHK_SCRUB:
case SpoilerCollectionCheckType::SPOILER_CHK_RANDOMIZER_INF:
case SpoilerCollectionCheckType::SPOILER_CHK_MASTER_SWORD:
@ -473,6 +480,14 @@ void CheckTrackerLoadGame(int32_t fileNum) {
if (areaChecksGotten[entry2->GetArea()] != 0 || RandomizerCheckObjects::AreaIsOverworld(entry2->GetArea())) {
areasSpoiled |= (1 << entry2->GetArea());
}
// Create check name overrides for child pond fish if age split is disabled
if (fishsanityMode != RO_FISHSANITY_OFF && fishsanityMode != RO_FISHSANITY_OVERWORLD && entry.GetRCType() == RCTYPE_FISH && entry.GetScene() == SCENE_FISHING_POND &&
entry.GetActorParams() != 116 && !fishsanityAgeSplit) {
if (entry.GetShortName().starts_with("Child")) {
checkNameOverrides[rc] = entry.GetShortName().substr(6);
}
}
}
if (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_LINKS_POCKET) != RO_LINKS_POCKET_NOTHING && IS_RANDO) {
s8 startingAge = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_STARTING_AGE);
@ -736,6 +751,7 @@ void CheckTrackerFlagSet(int16_t flagType, int32_t flag) {
(scCheckType == SpoilerCollectionCheckType::SPOILER_CHK_MERCHANT ||
scCheckType == SpoilerCollectionCheckType::SPOILER_CHK_SHOP_ITEM ||
scCheckType == SpoilerCollectionCheckType::SPOILER_CHK_COW ||
scCheckType == SpoilerCollectionCheckType::SPOILER_CHK_FISH ||
scCheckType == SpoilerCollectionCheckType::SPOILER_CHK_SCRUB ||
scCheckType == SpoilerCollectionCheckType::SPOILER_CHK_MASTER_SWORD ||
scCheckType == SpoilerCollectionCheckType::SPOILER_CHK_RANDOMIZER_INF)) {
@ -1161,6 +1177,10 @@ void LoadSettings() {
fortressNormal = true;
break;
}
fishsanityMode = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY);
fishsanityPondCount = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_POND_COUNT);
fishsanityAgeSplit = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_AGE_SPLIT);
}
bool IsVisibleInCheckTracker(RandomizerCheck rc) {
@ -1194,6 +1214,7 @@ bool IsVisibleInCheckTracker(RandomizerCheck rc) {
(showDungeonTokens && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))
) &&
(loc->GetRCType() != RCTYPE_COW || showCows) &&
(loc->GetRCType() != RCTYPE_FISH || OTRGlobals::Instance->gRandoContext->GetFishsanity()->GetFishLocationIncluded(loc)) &&
(loc->GetRCType() != RCTYPE_ADULT_TRADE ||
showAdultTrade ||
rc == RC_KAK_ANJU_AS_ADULT || // adult trade checks that are always shuffled
@ -1375,7 +1396,12 @@ void DrawLocation(RandomizerCheck rc) {
}
//Main Text
txt = loc->GetShortName();
if (checkNameOverrides.contains(loc->GetRandomizerCheck())) {
txt = checkNameOverrides[loc->GetRandomizerCheck()];
} else {
txt = loc->GetShortName();
}
if (lastLocationChecked == loc->GetRandomizerCheck()) {
txt = "* " + txt;
}

View File

@ -156,8 +156,43 @@ typedef enum {
RAND_INF_TOT_MASTER_SWORD,
RAND_INF_CHILD_FISHING,
RAND_INF_CHILD_FISH_1,
RAND_INF_CHILD_FISH_2,
RAND_INF_CHILD_FISH_3,
RAND_INF_CHILD_FISH_4,
RAND_INF_CHILD_FISH_5,
RAND_INF_CHILD_FISH_6,
RAND_INF_CHILD_FISH_7,
RAND_INF_CHILD_FISH_8,
RAND_INF_CHILD_FISH_9,
RAND_INF_CHILD_FISH_10,
RAND_INF_CHILD_FISH_11,
RAND_INF_CHILD_FISH_12,
RAND_INF_CHILD_FISH_13,
RAND_INF_CHILD_FISH_14,
RAND_INF_CHILD_FISH_15,
RAND_INF_CHILD_LOACH_1,
RAND_INF_CHILD_LOACH_2,
RAND_INF_ADULT_FISHING,
RAND_INF_ADULT_FISH_1,
RAND_INF_ADULT_FISH_2,
RAND_INF_ADULT_FISH_3,
RAND_INF_ADULT_FISH_4,
RAND_INF_ADULT_FISH_5,
RAND_INF_ADULT_FISH_6,
RAND_INF_ADULT_FISH_7,
RAND_INF_ADULT_FISH_8,
RAND_INF_ADULT_FISH_9,
RAND_INF_ADULT_FISH_10,
RAND_INF_ADULT_FISH_11,
RAND_INF_ADULT_FISH_12,
RAND_INF_ADULT_FISH_13,
RAND_INF_ADULT_FISH_14,
RAND_INF_ADULT_FISH_15,
RAND_INF_ADULT_LOACH,
RAND_INF_10_BIG_POES,
RAND_INF_GRANT_GANONS_BOSSKEY,
@ -177,6 +212,24 @@ typedef enum {
RAND_INF_HAS_OCARINA_C_LEFT,
RAND_INF_HAS_OCARINA_C_RIGHT,
RAND_INF_GROTTO_FISH_ZR_OPEN_GROTTO,
RAND_INF_GROTTO_FISH_DMC_UPPER_GROTTO,
RAND_INF_GROTTO_FISH_DMT_STORMS_GROTTO,
RAND_INF_GROTTO_FISH_KAK_OPEN_GROTTO,
RAND_INF_GROTTO_FISH_HF_NEAR_MARKET_GROTTO,
RAND_INF_GROTTO_FISH_HF_OPEN_GROTTO,
RAND_INF_GROTTO_FISH_HF_SOUTHEAST_GROTTO,
RAND_INF_GROTTO_FISH_LW_NEAR_SHORTCUTS_GROTTO,
RAND_INF_GROTTO_FISH_KF_STORMS_GROTTO,
RAND_INF_FISHING_POLE_FOUND,
RAND_INF_ZD_FISH_1,
RAND_INF_ZD_FISH_2,
RAND_INF_ZD_FISH_3,
RAND_INF_ZD_FISH_4,
RAND_INF_ZD_FISH_5,
// If you add anything to this list, you need to update the size of randomizerInf in z64save.h to be ceil(RAND_INF_MAX / 16)
RAND_INF_MAX,

View File

@ -108,6 +108,10 @@ std::vector<ItemTrackerItem> ocarinaButtonItems = {
ITEM_TRACKER_ITEM_CUSTOM(RG_OCARINA_C_RIGHT_BUTTON, ITEM_OCARINA_TIME, ITEM_OCARINA_TIME, 0, DrawItem ),
};
std::vector<ItemTrackerItem> fishingPoleItems = {
ITEM_TRACKER_ITEM(ITEM_FISHING_POLE, 0, DrawItem)
};
std::vector<ItemTrackerDungeon> itemTrackerDungeonsWithMapsHorizontal = {
{ SCENE_DEKU_TREE, { ITEM_DUNGEON_MAP, ITEM_COMPASS } },
{ SCENE_DODONGOS_CAVERN, { ITEM_DUNGEON_MAP, ITEM_COMPASS } },
@ -726,6 +730,11 @@ void DrawItem(ItemTrackerItem item) {
hasItem = Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT);
itemName = "Ocarina C Right Button";
break;
case ITEM_FISHING_POLE:
actualItemId = item.id;
hasItem = IS_RANDO && Flags_GetRandomizerInf(RAND_INF_FISHING_POLE_FOUND);
itemName = "Fishing Pole";
break;
}
if (GameInteractor::IsSaveLoaded() && (hasItem && item.id != actualItemId && actualItemTrackerItemMap.find(actualItemId) != actualItemTrackerItemMap.end())) {
@ -1054,25 +1063,22 @@ void UpdateVectors() {
// and misc isn't on the main window,
// and it doesn't already have greg, add him
if (CVarGetInteger("gItemTrackerGregDisplayType", SECTION_DISPLAY_EXTENDED_HIDDEN) == SECTION_DISPLAY_EXTENDED_MISC_WINDOW &&
CVarGetInteger("gItemTrackerMiscItemsDisplayType", SECTION_DISPLAY_MAIN_WINDOW) != SECTION_DISPLAY_MAIN_WINDOW &&
std::none_of(miscItems.begin(), miscItems.end(), [](ItemTrackerItem item){return item.id == ITEM_RUPEE_GREEN;})) {
miscItems.insert(miscItems.end(), gregItems.begin(), gregItems.end());
CVarGetInteger("gItemTrackerMiscItemsDisplayType", SECTION_DISPLAY_MAIN_WINDOW) != SECTION_DISPLAY_MAIN_WINDOW) {
if (std::none_of(miscItems.begin(), miscItems.end(), [](ItemTrackerItem item) { return item.id == ITEM_RUPEE_GREEN; }))
miscItems.insert(miscItems.end(), gregItems.begin(), gregItems.end());
} else {
for (auto it = miscItems.begin(); it != miscItems.end();) {
if (it->id == ITEM_RUPEE_GREEN) {
miscItems.erase(it);
} else {
it++;
}
}
miscItems.erase(std::remove_if(miscItems.begin(), miscItems.end(), [](ItemTrackerItem i) { return i.id == ITEM_RUPEE_GREEN; }), miscItems.end());
}
bool newRowAdded = false;
// if we're adding greg to the main window
if (CVarGetInteger("gItemTrackerGregDisplayType", SECTION_DISPLAY_EXTENDED_HIDDEN) == SECTION_DISPLAY_EXTENDED_MAIN_WINDOW) {
// insert empty items until we're on a new row for greg
while (mainWindowItems.size() % 6) {
mainWindowItems.push_back(ITEM_TRACKER_ITEM(ITEM_NONE, 0, DrawItem));
if (!newRowAdded) {
// insert empty items until we're on a new row for greg
while (mainWindowItems.size() % 6) {
mainWindowItems.push_back(ITEM_TRACKER_ITEM(ITEM_NONE, 0, DrawItem));
}
newRowAdded = true;
}
// add greg
@ -1082,16 +1088,37 @@ void UpdateVectors() {
// 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) {
if (!newRowAdded) {
while (mainWindowItems.size() % 6) {
mainWindowItems.push_back(ITEM_TRACKER_ITEM(ITEM_NONE, 0, DrawItem));
}
newRowAdded = true;
}
// Add triforce pieces
mainWindowItems.insert(mainWindowItems.end(), triforcePieces.begin(), triforcePieces.end());
}
// if misc is separate and fishing pole isn't added, add fishing pole to misc
if (CVarGetInteger("gItemTrackerFishingPoleDisplayType", SECTION_DISPLAY_EXTENDED_HIDDEN) == SECTION_DISPLAY_EXTENDED_MISC_WINDOW &&
CVarGetInteger("gItemTrackerMiscItemsDisplayType", SECTION_DISPLAY_MAIN_WINDOW) != SECTION_DISPLAY_MAIN_WINDOW) {
if (std::none_of(miscItems.begin(), miscItems.end(), [](ItemTrackerItem item) { return item.id == ITEM_FISHING_POLE; }))
miscItems.insert(miscItems.end(), fishingPoleItems.begin(), fishingPoleItems.end());
} else {
miscItems.erase(std::remove_if(miscItems.begin(), miscItems.end(), [](ItemTrackerItem i) { return i.id == ITEM_FISHING_POLE; }), miscItems.end());
}
// add fishing pole to main window
if (CVarGetInteger("gItemTrackerFishingPoleDisplayType", SECTION_DISPLAY_EXTENDED_HIDDEN) == SECTION_DISPLAY_EXTENDED_MAIN_WINDOW) {
if (!newRowAdded) {
while (mainWindowItems.size() % 6) {
mainWindowItems.push_back(ITEM_TRACKER_ITEM(ITEM_NONE, 0, DrawItem));
}
newRowAdded = true;
}
mainWindowItems.insert(mainWindowItems.end(), fishingPoleItems.begin(), fishingPoleItems.end());
}
//If we're adding boss souls to the main window...
if (CVarGetInteger("gItemTrackerBossSoulsDisplayType", SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_MAIN_WINDOW) {
//...add empty items on the main window to get the souls on their own row. (Too many to sit with Greg/Triforce pieces)
@ -1138,6 +1165,7 @@ void ItemTrackerWindow::DrawElement() {
(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("gItemTrackerFishingPoleDisplayType", SECTION_DISPLAY_EXTENDED_HIDDEN) == SECTION_DISPLAY_EXTENDED_MAIN_WINDOW) ||
(CVarGetInteger("gItemTrackerNotesDisplayType", SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_MAIN_WINDOW)
) {
BeginFloatingWindows("Item Tracker##main window");
@ -1226,6 +1254,12 @@ void ItemTrackerWindow::DrawElement() {
EndFloatingWindows();
}
if (CVarGetInteger("gItemTrackerFishingPoleDisplayType", SECTION_DISPLAY_EXTENDED_HIDDEN) == SECTION_DISPLAY_EXTENDED_SEPARATE) {
BeginFloatingWindows("Fishing Pole Tracker");
DrawItemsInRows(fishingPoleItems);
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);
@ -1373,6 +1407,10 @@ void ItemTrackerSettingsWindow::DrawElement() {
shouldUpdateVectors = true;
}
if (UIWidgets::LabeledRightAlignedEnhancementCombobox("Fishing Pole", "gItemTrackerFishingPoleDisplayType", extendedDisplayTypes, SECTION_DISPLAY_EXTENDED_HIDDEN)) {
shouldUpdateVectors = true;
}
if (CVarGetInteger("gItemTrackerDisplayType", TRACKER_DISPLAY_ALWAYS) == TRACKER_DISPLAY_ALWAYS) {
if (UIWidgets::LabeledRightAlignedEnhancementCombobox("Personal notes", "gItemTrackerNotesDisplayType", displayTypes, SECTION_DISPLAY_HIDDEN)) {
shouldUpdateVectors = true;

View File

@ -108,6 +108,7 @@ void Settings::CreateOptions() {
mOptions[RSK_SHUFFLE_OCARINA_BUTTONS] = Option::Bool("Shuffle Ocarina Buttons", "gRandomizeShuffleOcarinaButtons", mOptionDescriptions[RSK_SHUFFLE_OCARINA_BUTTONS]);
mOptions[RSK_SHUFFLE_WEIRD_EGG] = Option::Bool("Shuffle Weird Egg", "gRandomizeShuffleWeirdEgg", mOptionDescriptions[RSK_SHUFFLE_WEIRD_EGG]);
mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD] = Option::Bool("Shuffle Gerudo Membership Card", "gRandomizeShuffleGerudoToken", mOptionDescriptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD]);
mOptions[RSK_SHUFFLE_FISHING_POLE] = Option::Bool("Shuffle Fishing Pole", "gRandomizeShuffleFishingPole", mOptionDescriptions[RSK_SHUFFLE_FISHING_POLE]);
mOptions[RSK_SHUFFLE_MAGIC_BEANS] = Option::Bool("Shuffle Magic Beans", "gRandomizeShuffleBeans", mOptionDescriptions[RSK_SHUFFLE_MAGIC_BEANS]);
mOptions[RSK_SHUFFLE_MERCHANTS] = Option::U8("Shuffle Merchants", {"Off", "On (No Hints)", "On (With Hints)"}, OptionCategory::Setting, "gRandomizeShuffleMerchants", mOptionDescriptions[RSK_SHUFFLE_MERCHANTS], WidgetType::Combobox, RO_SHUFFLE_MERCHANTS_OFF);
mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES] = Option::Bool("Shuffle Frog Song Rupees", "gRandomizeShuffleFrogSongRupees", mOptionDescriptions[RSK_SHUFFLE_FROG_SONG_RUPEES]);
@ -115,6 +116,9 @@ void Settings::CreateOptions() {
mOptions[RSK_SHUFFLE_CHEST_MINIGAME] = Option::U8("Shuffle Chest Minigame", {"Off", "On (Separate)", "On (Pack)"});
mOptions[RSK_SHUFFLE_100_GS_REWARD] = Option::Bool("Shuffle 100 GS Reward", "gRandomizeShuffle100GSReward", mOptionDescriptions[RSK_SHUFFLE_100_GS_REWARD], IMFLAG_SEPARATOR_BOTTOM, WidgetType::Checkbox, RO_GENERIC_OFF);
mOptions[RSK_SHUFFLE_BOSS_SOULS] = Option::U8("Shuffle Boss Souls", {"Off", "On", "On + Ganon"}, OptionCategory::Setting, "gRandomizeShuffleBossSouls", mOptionDescriptions[RSK_SHUFFLE_BOSS_SOULS], WidgetType::Combobox);
mOptions[RSK_FISHSANITY] = Option::U8("Fishsanity", {"Off", "Shuffle Fishing Pond", "Shuffle Overworld Fish", "Shuffle Both"}, OptionCategory::Setting, "gRandomizeFishsanity", mOptionDescriptions[RSK_FISHSANITY], WidgetType::Combobox, RO_FISHSANITY_OFF);
mOptions[RSK_FISHSANITY_POND_COUNT] = Option::U8("Pond Fish Count", {NumOpts(0,17,1)}, OptionCategory::Setting, "gRandomizeFishsanityPondCount", mOptionDescriptions[RSK_FISHSANITY_POND_COUNT], WidgetType::Slider, 0, true, IMFLAG_NONE);
mOptions[RSK_FISHSANITY_AGE_SPLIT] = Option::Bool("Pond Age Split", "gRandomizeFishsanityAgeSplit", mOptionDescriptions[RSK_FISHSANITY_AGE_SPLIT]);
mOptions[RSK_SHUFFLE_MAPANDCOMPASS] = Option::U8("Maps/Compasses", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, "gRandomizeStartingMapsCompasses", mOptionDescriptions[RSK_SHUFFLE_MAPANDCOMPASS], WidgetType::Combobox, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON);
mOptions[RSK_KEYSANITY] = Option::U8("Small Keys", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, "gRandomizeKeysanity", mOptionDescriptions[RSK_KEYSANITY], WidgetType::Combobox, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON);
mOptions[RSK_GERUDO_KEYS] = Option::U8("Gerudo Fortress Keys", {"Vanilla", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, "gRandomizeGerudoKeys", mOptionDescriptions[RSK_GERUDO_KEYS], WidgetType::Combobox, RO_GERUDO_KEYS_VANILLA);
@ -154,6 +158,7 @@ void Settings::CreateOptions() {
mOptions[RSK_DAMPES_DIARY_HINT] = Option::Bool("Dampe's Diary Hint", "gRandomizeDampeHint", mOptionDescriptions[RSK_DAMPES_DIARY_HINT], IMFLAG_NONE);
mOptions[RSK_GREG_HINT] = Option::Bool("Greg the Green Rupee Hint", "gRandomizeGregHint", mOptionDescriptions[RSK_GREG_HINT], IMFLAG_NONE);
mOptions[RSK_SARIA_HINT] = Option::Bool("Saria's Hint", "gRandomizeSariaHint", mOptionDescriptions[RSK_SARIA_HINT], IMFLAG_NONE);
mOptions[RSK_FISHING_POLE_HINT] = Option::Bool("Fishing Pole Hint", "gRandomizeFishingPoleHint", mOptionDescriptions[RSK_FISHING_POLE_HINT], IMFLAG_NONE);
mOptions[RSK_FROGS_HINT] = Option::Bool("Frog Ocarina Game Hint", "gRandomizeFrogsHint", mOptionDescriptions[RSK_FROGS_HINT], IMFLAG_NONE);
mOptions[RSK_BIGGORON_HINT] = Option::Bool("Biggoron's Hint", "gRandomizeBiggoronHint", mOptionDescriptions[RSK_BIGGORON_HINT], IMFLAG_NONE);
mOptions[RSK_BIG_POES_HINT] = Option::Bool("Big Poes Hint", "gRandomizeBigPoesHint", mOptionDescriptions[RSK_BIG_POES_HINT], IMFLAG_NONE);
@ -645,12 +650,16 @@ void Settings::CreateOptions() {
&mOptions[RSK_SHUFFLE_OCARINA],
&mOptions[RSK_SHUFFLE_OCARINA_BUTTONS],
&mOptions[RSK_SHUFFLE_WEIRD_EGG],
&mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD]
&mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD],
&mOptions[RSK_SHUFFLE_FISHING_POLE],
}, false, WidgetContainerType::COLUMN);
mOptionGroups[RSG_SHUFFLE_NPCS_IMGUI] = OptionGroup::SubGroup("Shuffle NPCs & Merchants", {
&mOptions[RSK_SHOPSANITY],
&mOptions[RSK_SHOPSANITY_PRICES],
&mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE],
&mOptions[RSK_FISHSANITY],
&mOptions[RSK_FISHSANITY_POND_COUNT],
&mOptions[RSK_FISHSANITY_AGE_SPLIT],
&mOptions[RSK_SHUFFLE_SCRUBS],
&mOptions[RSK_SHUFFLE_COWS],
&mOptions[RSK_SHUFFLE_MAGIC_BEANS],
@ -719,6 +728,7 @@ void Settings::CreateOptions() {
&mOptions[RSK_CHICKENS_HINT],
&mOptions[RSK_MALON_HINT],
&mOptions[RSK_HBA_HINT],
&mOptions[RSK_FISHING_POLE_HINT],
&mOptions[RSK_WARP_SONG_HINTS],
&mOptions[RSK_SCRUB_TEXT_HINT],
&mOptions[RSK_KAK_10_SKULLS_HINT],
@ -843,6 +853,10 @@ void Settings::CreateOptions() {
&mOptions[RSK_SHOPSANITY],
&mOptions[RSK_SHOPSANITY_PRICES],
&mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE],
&mOptions[RSK_FISHSANITY],
&mOptions[RSK_FISHSANITY_POND_COUNT],
&mOptions[RSK_FISHSANITY_AGE_SPLIT],
&mOptions[RSK_SHUFFLE_FISHING_POLE],
&mOptions[RSK_SHUFFLE_TOKENS],
&mOptions[RSK_SHUFFLE_SCRUBS],
&mOptions[RSK_SHUFFLE_COWS],
@ -946,6 +960,7 @@ void Settings::CreateOptions() {
&mOptions[RSK_KAK_50_SKULLS_HINT],
&mOptions[RSK_KAK_100_SKULLS_HINT],
&mOptions[RSK_SCRUB_TEXT_HINT],
&mOptions[RSK_FISHING_POLE_HINT],
// TODO: Compasses show Reward/WOTH, Maps show Dungeon Mode, Starting Time
&mOptions[RSK_DAMAGE_MULTIPLIER],
&mOptions[RSK_BLUE_FIRE_ARROWS],
@ -1019,6 +1034,9 @@ void Settings::CreateOptions() {
&mOptions[RSK_SHOPSANITY],
&mOptions[RSK_SHOPSANITY_PRICES],
&mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE],
&mOptions[RSK_FISHSANITY],
&mOptions[RSK_FISHSANITY_POND_COUNT],
&mOptions[RSK_FISHSANITY_AGE_SPLIT],
&mOptions[RSK_SHUFFLE_SCRUBS],
&mOptions[RSK_SHUFFLE_COWS],
&mOptions[RSK_SHUFFLE_MAGIC_BEANS],
@ -1056,6 +1074,10 @@ void Settings::CreateOptions() {
{ "Shuffle Settings:Shopsanity", RSK_SHOPSANITY },
{ "Shuffle Settings:Shopsanity Prices", RSK_SHOPSANITY_PRICES },
{ "Shuffle Settings:Affordable Prices", RSK_SHOPSANITY_PRICES_AFFORDABLE },
{ "Shuffle Settings:Fishsanity", RSK_FISHSANITY },
{ "Shuffle Settings:Pond Fish Count", RSK_FISHSANITY_POND_COUNT },
{ "Shuffle Settings:Split Pond Fish", RSK_FISHSANITY_AGE_SPLIT },
{ "Shuffle Settings:Shuffle Fishing Pole", RSK_SHUFFLE_FISHING_POLE },
{ "Shuffle Settings:Scrub Shuffle", RSK_SHUFFLE_SCRUBS },
{ "Shuffle Settings:Shuffle Cows", RSK_SHUFFLE_COWS },
{ "Shuffle Settings:Tokensanity", RSK_SHUFFLE_TOKENS },
@ -1147,6 +1169,7 @@ void Settings::CreateOptions() {
{ "Miscellaneous Settings:Big Poes Hint", RSK_BIG_POES_HINT },
{ "Miscellaneous Settings:Warp Song Hints", RSK_WARP_SONG_HINTS },
{ "Miscellaneous Settings:Scrub Hint Text", RSK_SCRUB_TEXT_HINT },
{ "Miscellaneous Settings:Fishing Pole Hint", RSK_FISHING_POLE_HINT },
{ "Miscellaneous Settings:Hint Distribution", RSK_HINT_DISTRIBUTION },
{ "Miscellaneous Settings:Blue Fire Arrows", RSK_BLUE_FIRE_ARROWS },
{ "Miscellaneous Settings:Sunlight Arrows", RSK_SUNLIGHT_ARROWS },
@ -1526,6 +1549,25 @@ void Settings::UpdateOptionProperties() {
mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE].Unhide();
break;
}
// Hide fishing pond settings if we aren't shuffling the fishing pond
switch (CVarGetInteger("gRandomizeFishsanity", RO_FISHSANITY_OFF)) {
case RO_FISHSANITY_POND:
case RO_FISHSANITY_BOTH:
mOptions[RSK_FISHSANITY].RemoveFlag(IMFLAG_SEPARATOR_BOTTOM);
mOptions[RSK_FISHSANITY_POND_COUNT].Unhide();
mOptions[RSK_FISHSANITY_AGE_SPLIT].Unhide();
break;
default:
mOptions[RSK_FISHSANITY].AddFlag(IMFLAG_SEPARATOR_BOTTOM);
mOptions[RSK_FISHSANITY_POND_COUNT].Hide();
mOptions[RSK_FISHSANITY_AGE_SPLIT].Hide();
}
// Disable fishing pole hint if the fishing pole is not shuffled
if (CVarGetInteger("gRandomizeShuffleFishingPole", RO_GENERIC_OFF)) {
mOptions[RSK_FISHING_POLE_HINT].Enable();
} else {
mOptions[RSK_FISHING_POLE_HINT].Disable("This option is disabled since the fishing pole is not shuffled.");
}
// Shuffle 100 GS Reward - Force-Enabled if Ganon's Boss Key is on the 100 GS Reward
if (CVarGetInteger("gRandomizeShuffleGanonBossKey", RO_GANON_BOSS_KEY_VANILLA) == RO_GANON_BOSS_KEY_KAK_TOKENS) {
mOptions[RSK_SHUFFLE_100_GS_REWARD].Disable("This option is force-enabled because \"Ganon's Boss Key\" is set to \"100 GS Reward.\"", UIWidgets::CheckboxGraphics::Checkmark);
@ -2116,6 +2158,7 @@ void Settings::ParseJson(nlohmann::json spoilerFileJson) {
case RSK_LACS_TOKEN_COUNT:
case RSK_KEYRINGS_RANDOM_COUNT:
case RSK_CUCCO_COUNT:
case RSK_FISHSANITY_POND_COUNT:
case RSK_STARTING_SKULLTULA_TOKEN:
numericValueString = it.value();
mOptions[index].SetSelectedIndex(std::stoi(numericValueString));
@ -2178,6 +2221,9 @@ void Settings::ParseJson(nlohmann::json spoilerFileJson) {
mOptions[index].SetSelectedIndex(RO_SCRUBS_RANDOM);
}
break;
case RSK_SHUFFLE_FISHING_POLE:
case RSK_FISHSANITY_AGE_SPLIT:
case RSK_FISHING_POLE_HINT:
case RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD:
case RSK_SHUFFLE_COWS:
case RSK_SHUFFLE_ADULT_TRADE:
@ -2290,6 +2336,17 @@ void Settings::ParseJson(nlohmann::json spoilerFileJson) {
mOptions[index].SetSelectedIndex(RO_AMMO_DROPS_OFF);
}
break;
case RSK_FISHSANITY:
if (it.value() == "Off") {
mOptions[index].SetSelectedIndex(RO_FISHSANITY_OFF);
} else if (it.value() == "Shuffle Fishing Pond") {
mOptions[index].SetSelectedIndex(RO_FISHSANITY_POND);
} else if (it.value() == "Shuffle Overworld Fish") {
mOptions[index].SetSelectedIndex(RO_FISHSANITY_OVERWORLD);
} else if (it.value() == "Shuffle Both") {
mOptions[index].SetSelectedIndex(RO_FISHSANITY_BOTH);
}
break;
case RSK_SHUFFLE_BOSS_SOULS:
if (it.value() == "Off") {
mOptions[index].SetSelectedIndex(RO_BOSS_SOULS_OFF);

View File

@ -1,6 +1,7 @@
#pragma once
#include <array>
#include <unordered_map>
#include "randomizerTypes.h"
#include "item.h"
#include "location.h"
@ -32,6 +33,10 @@ class StaticData {
static std::vector<RandomizerCheck> scrubLocations;
static std::vector<RandomizerCheck> gossipStoneLocations;
static std::vector<RandomizerCheck> otherHintLocations;
static std::vector<RandomizerCheck> pondFishLocations;
static std::vector<RandomizerCheck> overworldFishLocations;
static std::array<std::pair<RandomizerCheck, RandomizerCheck>, 17> randomizerFishingPondFish;
static std::unordered_map<int8_t, RandomizerCheck> randomizerGrottoFishMap;
StaticData();
~StaticData();
};

View File

@ -2387,6 +2387,9 @@ extern "C" CowIdentity Randomizer_IdentifyCow(s32 sceneNum, s32 posX, s32 posZ)
return OTRGlobals::Instance->gRandomizer->IdentifyCow(sceneNum, posX, posZ);
}
extern "C" FishIdentity Randomizer_IdentifyFish(s32 sceneNum, s32 actorParams) {
return OTRGlobals::Instance->gRandomizer->IdentifyFish(sceneNum, actorParams);
}
extern "C" GetItemEntry ItemTable_Retrieve(int16_t getItemID) {
GetItemEntry giEntry = ItemTableManager::Instance->RetrieveItemEntry(MOD_NONE, getItemID);
return giEntry;
@ -2415,6 +2418,10 @@ extern "C" GetItemEntry Randomizer_GetItemFromKnownCheckWithoutObtainabilityChec
return OTRGlobals::Instance->gRandomizer->GetItemFromKnownCheck(randomizerCheck, ogId, false);
}
extern "C" RandomizerInf Randomizer_GetRandomizerInfFromCheck(RandomizerCheck randomizerCheck) {
return OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(randomizerCheck);
}
extern "C" ItemObtainability Randomizer_GetItemObtainabilityFromRandomizerCheck(RandomizerCheck randomizerCheck) {
return OTRGlobals::Instance->gRandomizer->GetItemObtainabilityFromRandomizerCheck(randomizerCheck);
}
@ -2614,6 +2621,9 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
messageEntry = OTRGlobals::Instance->gRandomizer->GetGoronMessage(choice);
} else if (Randomizer_GetSettingValue(RSK_FROGS_HINT) && textId == TEXT_FROGS_UNDERWATER) {
messageEntry = OTRGlobals::Instance->gRandomizer->GetMiscHintMessage(TEXT_FROGS_UNDERWATER, RC_ZR_FROGS_OCARINA_GAME);
} else if (Randomizer_GetSettingValue(RSK_FISHING_POLE_HINT) && !Flags_GetRandomizerInf(RAND_INF_FISHING_POLE_FOUND) &&
(textId == TEXT_FISHING_POND_START || textId == TEXT_FISHING_POND_START_MET)) {
messageEntry = OTRGlobals::Instance->gRandomizer->GetFishingPondOwnerMessage(textId);
} else if (Randomizer_GetSettingValue(RSK_SARIA_HINT) &&
(gPlayState->sceneNum == SCENE_SACRED_FOREST_MEADOW && textId == TEXT_SARIA_SFM) || (textId >= TEXT_SARIAS_SONG_FACE_TO_FACE && textId <= TEXT_SARIAS_SONG_CHANNELING_POWER)) {
messageEntry = OTRGlobals::Instance->gRandomizer->GetSariaMessage(textId);

View File

@ -156,6 +156,7 @@ RandomizerCheck Randomizer_GetCheckFromActor(s16 actorId, s16 sceneNum, s16 acto
ScrubIdentity Randomizer_IdentifyScrub(s32 sceneNum, s32 actorParams, s32 respawnData);
ShopItemIdentity Randomizer_IdentifyShopItem(s32 sceneNum, u8 slotIndex);
CowIdentity Randomizer_IdentifyCow(s32 sceneNum, s32 posX, s32 posZ);
FishIdentity Randomizer_IdentifyFish(s32 sceneNum, s32 actorParams);
void Randomizer_ParseSpoiler(const char* fileLoc);
void Randomizer_LoadHintMessages();
void Randomizer_LoadMerchantMessages();
@ -164,6 +165,7 @@ GetItemEntry Randomizer_GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorPar
GetItemEntry Randomizer_GetItemFromActorWithoutObtainabilityCheck(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogId);
GetItemEntry Randomizer_GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId);
GetItemEntry Randomizer_GetItemFromKnownCheckWithoutObtainabilityCheck(RandomizerCheck randomizerCheck, GetItemID ogId);
RandomizerInf Randomizer_GetRandomizerInfFromCheck(RandomizerCheck randomizerCheck);
ItemObtainability Randomizer_GetItemObtainabilityFromRandomizerCheck(RandomizerCheck randomizerCheck);
void Randomizer_GenerateSeed();
uint8_t Randomizer_IsSeedGenerated();

View File

@ -272,6 +272,9 @@ void SaveManager::LoadRandomizerVersion2() {
std::string sariaText;
SaveManager::Instance->LoadData("sariaText", sariaText);
randoContext->AddHint(RH_SARIA, Text(sariaText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
std::string fishingPoleText;
SaveManager::Instance->LoadData("fishingPoleText", fishingPoleText);
randoContext->AddHint(RH_FISHING_POLE, Text(fishingPoleText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
std::string warpMinuetText;
SaveManager::Instance->LoadData("warpMinuetText", warpMinuetText);
randoContext->AddHint(RH_MINUET_WARP_LOC, Text(warpMinuetText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", randoContext->GetAreaFromString(warpMinuetText));

View File

@ -871,6 +871,10 @@ void DrawEnhancementsMenu() {
UIWidgets::Tooltip("When a line is stable, guarantee bite. Otherwise use default logic");
UIWidgets::PaddedEnhancementCheckbox("Fish Never Escape", "gFishNeverEscape", true, false, disabled, disabledTooltip);
UIWidgets::Tooltip("Once a hook has been set, fish will never let go while being reeled in.");
UIWidgets::PaddedEnhancementCheckbox("Loaches Always Appear", "gLoachesAlwaysAppear", true, false, disabled, disabledTooltip);
UIWidgets::Tooltip("Loaches will always appear in the fishing pond instead of every four visits.");
UIWidgets::PaddedEnhancementCheckbox("Skip Keep Confirmation", "gSkipKeepConfirmation", true, false, disabled, disabledTooltip);
UIWidgets::Tooltip("The pond owner will not ask to confirm if you want to keep a smaller fish.");
UIWidgets::PaddedEnhancementSliderInt("Child Minimum Weight: %d", "##cMinimumWeight", "gChildMinimumWeightFish", 3, 10, "", 10, true, true, false, disabled, disabledTooltip);
UIWidgets::Tooltip("The minimum weight for the unique fishing reward as a child");
UIWidgets::PaddedEnhancementSliderInt("Adult Minimum Weight: %d", "##aMinimumWeight", "gAdultMinimumWeightFish", 6, 13, "", 13, true, true, false, disabled, disabledTooltip);

View File

@ -76,6 +76,7 @@
#include "objects/object_gi_dekupouch/object_gi_dekupouch.h"
#include "objects/object_gi_rupy/object_gi_rupy.h"
#include "objects/object_gi_sword_1/object_gi_sword_1.h"
#include "objects/object_fish/object_fish.h"
#include "objects/object_st/object_st.h"
#include "soh_assets.h"
@ -113,6 +114,7 @@ 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);
void GetItem_DrawFishingPole(PlayState* play, s16 drawId);
typedef struct {
/* 0x00 */ void (*drawFunc)(PlayState*, s16);
@ -388,7 +390,8 @@ DrawItemTableEntry sDrawItemTable[] = {
{ GetItem_DrawGenericMusicNote, { gGiSongNoteDL } }, //Sun's song
{ GetItem_DrawGenericMusicNote, { gGiSongNoteDL } }, //Song of time
{ GetItem_DrawGenericMusicNote, { gGiSongNoteDL } }, //Song of storms
{ GetItem_DrawTriforcePiece, { gTriforcePiece0DL } } // Triforce Piece
{ GetItem_DrawTriforcePiece, { gTriforcePiece0DL } }, // Triforce Piece
{ GetItem_DrawFishingPole, { gFishingPoleGiDL } }, // Fishing Pole
};
/**
@ -1065,3 +1068,54 @@ void GetItem_DrawTriforcePiece(PlayState* play, s16 drawId) {
CLOSE_DISPS(play->state.gfxCtx);
}
void GetItem_DrawFishingPole(PlayState* play, s16 drawId) {
Vec3f pos;
OPEN_DISPS(play->state.gfxCtx);
// Draw rod
Gfx_SetupDL_25Opa(play->state.gfxCtx);
Matrix_Scale(0.2, 0.2, 0.2, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_MODELVIEW | G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingPoleGiDL);
// Draw lure
Matrix_Push();
Matrix_Scale(5.0f, 5.0f, 5.0f, MTXMODE_APPLY);
pos.x = 0.0f;
pos.y = -25.5f;
pos.z = -4.0f;
Matrix_Translate(pos.x, pos.y, pos.z, MTXMODE_APPLY);
Matrix_RotateZ(M_PI / -2, MTXMODE_APPLY);
Matrix_RotateY((M_PI / -2) - 0.2f, MTXMODE_APPLY);
Matrix_Scale(0.006f, 0.006f, 0.006f, MTXMODE_APPLY);
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_NOPUSH | G_MTX_MODELVIEW | G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureFloatDL);
// Draw hooks
Matrix_RotateY(0.2f, MTXMODE_APPLY);
Matrix_Translate(0.0f, 0.0f, -300.0f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureHookDL);
Matrix_RotateZ(M_PI / 2, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureHookDL);
Matrix_Translate(0.0f, -2200.0f, 700.0f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureHookDL);
Matrix_RotateZ(M_PI / 2, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureHookDL);
Matrix_Pop();
CLOSE_DISPS(play->state.gfxCtx);
}

View File

@ -2644,6 +2644,11 @@ u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
return Return_Item_Entry(giEntry, RG_NONE);
}
if (item == RG_FISHING_POLE) {
Flags_SetRandomizerInf(RAND_INF_FISHING_POLE_FOUND);
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;

View File

@ -7,6 +7,7 @@
#include "z_en_fish.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#include "vt.h"
#include "soh/Enhancements/randomizer/fishsanity.h"
#define FLAGS 0
@ -36,6 +37,7 @@ void EnFish_Unique_SwimIdle(EnFish* this, PlayState* play);
static Actor* D_80A17010 = NULL;
static f32 D_80A17014 = 0.0f;
static f32 D_80A17018 = 0.0f;
static Color_RGBA16 fsPulseColor = { 30, 240, 200 };
static ColliderJntSphElementInit sJntSphElementsInit[1] = {
{
@ -760,10 +762,31 @@ void EnFish_Update(Actor* thisx, PlayState* play) {
}
}
// #region SOH [Randomizer]
s32 EnFish_FishsanityOverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot,
void* thisx) {
EnFish* this = (EnFish*)thisx;
Fishsanity_OpenGreyscaleColor(play, &fsPulseColor, ABS(this->actor.params) * 20);
return 0;
}
void EnFish_FishPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
Fishsanity_CloseGreyscaleColor(play);
}
// #endregion
void EnFish_Draw(Actor* thisx, PlayState* play) {
EnFish* this = (EnFish*)thisx;
Gfx_SetupDL_25Opa(play->state.gfxCtx);
// #region SOH [Randomizer]
// Modify drawing for uncollected fish, having a shadowDraw implies this is being given uncollected FX
if (IS_RANDO && Randomizer_GetOverworldFishShuffled() && this->actor.shape.shadowDraw != NULL) {
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnFish_FishsanityOverrideLimbDraw, EnFish_FishPostLimbDraw, this);
Collider_UpdateSpheres(0, &this->collider);
return;
}
// #endregion
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, NULL, NULL);
Collider_UpdateSpheres(0, &this->collider);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -3,61 +3,65 @@
#include <libultraship/libultra.h>
#include "global.h"
#include "soh/Enhancements/randomizer/fishsanity.h"
struct Fishing;
typedef struct Fishing {
/* 0x0000 */ Actor actor;
/* 0x014C */ char unk_14C[0x004];
/* 0x0150 */ u8 unk_150;
/* 0x0151 */ u8 unk_151;
/* 0x0150 */ u8 isLoach;
/* 0x0151 */ u8 lilyTimer; // if near lily and >0, lily moves. Move more if >20
/* 0x0152 */ u8 unk_152;
/* 0x0154 */ s16 unk_154;
/* 0x0156 */ u8 unk_156;
/* 0x0157 */ u8 unk_157;
/* 0x0158 */ s16 unk_158;
/* 0x015A */ s16 unk_15A;
/* 0x015C */ s16 unk_15C;
/* 0x0158 */ s16 fishState; // negative index for loach behavior
/* 0x015A */ s16 fishStateNext;
/* 0x015C */ s16 stateAndTimer; // fish use as timer that's AND'd, owner as talking state
/* 0x015E */ s16 unk_15E;
/* 0x0160 */ s16 unk_160;
/* 0x0162 */ s16 unk_162;
/* 0x0164 */ s16 unk_164;
/* 0x0166 */ s16 unk_166;
/* 0x0168 */ s16 unk_168;
/* 0x016A */ s16 unk_16A;
/* 0x016C */ s16 unk_16C;
/* 0x0160 */ s16 unk_160; // fish use as rotateX, owner as index of eye texture
/* 0x0162 */ s16 unk_162; // fish use as rotateY, owner as index of eye texture
/* 0x0164 */ s16 unk_164; // fish use as rotateZ, owner as rotation of head
/* 0x0166 */ Vec3s rotationTarget;
/* 0x016C */ s16 fishLimb23RotYDelta;
/* 0x016E */ s16 unk_16E;
/* 0x0170 */ s16 unk_170;
/* 0x0172 */ s16 unk_172;
/* 0x0174 */ s16 unk_174;
/* 0x0176 */ s16 unk_176;
/* 0x0170 */ s16 fishLimbDRotZDelta;
/* 0x0172 */ s16 fishLimbEFRotYDelta;
/* 0x0174 */ s16 fishLimb89RotYDelta;
/* 0x0176 */ s16 fishLimb4RotYDelta;
/* 0x0178 */ s16 unk_178;
/* 0x017A */ s16 unk_17A[4];
/* 0x017A */ s16 timerArray[4];
/* 0x0184 */ f32 unk_184;
/* 0x0188 */ f32 unk_188;
/* 0x018C */ f32 unk_18C;
/* 0x0190 */ f32 unk_190;
/* 0x0194 */ f32 unk_194;
/* 0x0198 */ f32 unk_198;
/* 0x019C */ f32 unk_19C;
/* 0x01A0 */ s16 unk_1A0;
/* 0x01A2 */ s16 unk_1A2;
/* 0x01A4 */ s16 unk_1A4;
/* 0x01A8 */ f32 unk_1A8;
/* 0x01AC */ f32 unk_1AC;
/* 0x01B0 */ f32 unk_1B0;
/* 0x01B4 */ Vec3f unk_1B4;
/* 0x0188 */ f32 speedTarget;
/* 0x018C */ f32 fishLimbRotPhase;
/* 0x0190 */ f32 unk_190; // fishLimbRotPhaseStep target
/* 0x0194 */ f32 unk_194; // fishLimbRotPhaseMag target
/* 0x0198 */ f32 fishLimbRotPhaseStep;
/* 0x019C */ f32 fishLimbRotPhaseMag;
/* 0x01A0 */ s16 bumpTimer; // set when hitting a wall.
/* 0x01A2 */ s16 unk_1A2; // "scared" timer?
/* 0x01A4 */ s16 unk_1A4; // "scared" timer? set at same time as above
/* 0x01A8 */ f32 perception; // how easily they are drawn to the lure.
/* 0x01AC */ f32 fishLength; // fish are (x^2*.0036+.5) lbs, loach double that.
/* 0x01B0 */ f32 rotationStep;
/* 0x01B4 */ Vec3f fishTargetPos;
/* 0x01C0 */ Vec3f fishMouthPos;
/* 0x01CC */ s16 unk_1CC[3];
/* 0x01D2 */ u8 unk_1D2;
/* 0x01D3 */ u8 unk_1D3;
/* 0x01D4 */ u8 unk_1D4;
/* 0x01D5 */ u8 unk_1D5;
/* 0x01CC */ s16 loachRotYDelta[3]; // adds rotation to the loach limb 3-5.
/* 0x01D2 */ u8 bubbleTime; // spawn bubbles while >0
/* 0x01D3 */ u8 isAquariumMessage;
/* 0x01D4 */ u8 aquariumWaitTimer;
/* 0x01D5 */ u8 keepState; // case-switch and keeping or releasing a fish
/* 0x01D8 */ SkelAnime skelAnime;
/* 0x021C */ LightNode* lightNode;
/* 0x0220 */ LightInfo lightInfo;
/* 0x0230 */ ColliderJntSph collider;
/* 0x0250 */ ColliderJntSphElement colliderElements[12];
/* */ s16 fishsanityParams;
} Fishing; // size = 0x0550
#define EN_FISH_OWNER 1 // param for owner of pond. default if params<100
#define EN_FISH_PARAM 100 // param base for fish in pond.
#define EN_FISH_AQUARIUM 200 // param for record fish in tank.
#endif

View File

@ -193,7 +193,7 @@ void ObjMure_SpawnActors1(ObjMure* this, PlayState* play) {
this->children[i] = Actor_Spawn(ac, play, sSpawnActorIds[this->type], spawnPos.x, spawnPos.y, spawnPos.z,
actor->world.rot.x, actor->world.rot.y, actor->world.rot.z,
(this->type == 4 && i == 0) ? 1 : sSpawnParams[this->type], true);
if (this->children[i] != NULL) {
if (this->children[i] != NULL && this->children[i]->update != NULL) {
this->childrenStates[i] = OBJMURE_CHILD_STATE_0;
this->children[i]->room = actor->room;
} else {

View File

@ -29,6 +29,7 @@
#include "soh/Enhancements/enhancementTypes.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/randomizer/randomizer_grotto.h"
#include "soh/Enhancements/randomizer/fishsanity.h"
#include "soh/frame_interpolation.h"
#include <string.h>
@ -13658,14 +13659,41 @@ void func_8084ECA4(Player* this, PlayState* play) {
struct_80854554* sp24;
BottleCatchInfo* catchInfo;
s32 temp;
s32 i;
s32 i, j;
FishIdentity fish;
GetItemEntry gi = GET_ITEM_NONE;
RandomizerCheck rc = RC_UNKNOWN_CHECK;
u8 catchId;
sp24 = &D_80854554[this->unk_850];
func_8083721C(this);
// TODO: Rework the bottle rando code in vanilla behavior overhaul
if (LinkAnimation_Update(play, &this->skelAnime)) {
if (this->unk_84F != 0) {
if (this->unk_850 == 0) {
if (IS_RANDO && this->unk_84F < 0) {
rc = this->unk_850;
// Award rando item; this should only give us GI_NONE if something went wrong during the catch setup
gi = Randomizer_GetItemFromKnownCheck(rc, GI_NONE);
temp = Randomizer_GetRandomizerInfFromCheck(rc);
// Either we can't give an item, we can't tell if we've gotten the check, or we have definitely gotten the check
if (gi.getItemId == GI_NONE || temp == RAND_INF_MAX || Flags_GetRandomizerInf(temp)) {
this->unk_84F = 0;
if (this->interactRangeActor != NULL)
this->interactRangeActor->parent = NULL;
}
// Item get cutscene hasn't played yet
else if((this->interactRangeActor == NULL && !(this->stateFlags1 & PLAYER_STATE1_ITEM_OVER_HEAD)) || !Actor_HasParent(this->interactRangeActor, play)) {
// Can't guarantee that whatever we "caught" is actually going to still exist
if (GiveItemEntryWithoutActor(play, gi)) {
// have to set this flag manually to prevent interactRangeActor from being wiped out
this->stateFlags1 |= PLAYER_STATE1_ITEM_OVER_HEAD;
this->pendingFlag.flagID = temp;
this->pendingFlag.flagType = FLAG_RANDOMIZER_INF;
Flags_SetRandomizerInf(temp);
}
}
} else if (this->unk_850 == 0) {
if (CVarGetInteger("gFastDrops", 0)) {
this->unk_84F = 0;
} else {
@ -13682,6 +13710,7 @@ void func_8084ECA4(Player* this, PlayState* play) {
}
} else {
if (this->unk_84F == 0) {
sp24 = &D_80854554[this->unk_850];
temp = this->skelAnime.curFrame - sp24->unk_08;
if (temp >= 0) {
@ -13704,11 +13733,38 @@ void func_8084ECA4(Player* this, PlayState* play) {
this->unk_84F = i + 1;
this->unk_850 = 0;
this->interactRangeActor->parent = &this->actor;
Player_UpdateBottleHeld(play, this, catchInfo->itemId, ABS(catchInfo->itemAction));
if (!CVarGetInteger("gFastDrops", 0)) {
this->stateFlags1 |= PLAYER_STATE1_IN_ITEM_CS | PLAYER_STATE1_IN_CUTSCENE;
Player_AnimPlayOnceAdjusted(play, this, sp24->unk_04);
func_80835EA4(play, 4);
// TODO: this should probably be refactored a bit, maybe rehome some of this to rando instead
if (IS_RANDO) {
// Check if fishsanity applies for this actor
if (Randomizer_GetOverworldFishShuffled()) {
fish = Randomizer_IdentifyFish(play->sceneNum, this->interactRangeActor->params);
if (fish.randomizerCheck != RC_UNKNOWN_CHECK && !Flags_GetRandomizerInf(fish.randomizerInf)) {
gi = Randomizer_GetItemFromKnownCheck(fish.randomizerCheck, GI_FISH);
rc = fish.randomizerCheck;
// check if the item is a bottle item anyway
catchInfo = NULL;
for (j = 0; j < 4; j++) {
if (D_80854A04[j].itemId == gi.itemId) {
catchInfo = &D_80854A04[j];
break;
}
}
}
}
}
// Vanilla behavior/rando gave a bottle item
if (!IS_RANDO || catchInfo != NULL) {
Player_UpdateBottleHeld(play, this, catchInfo->itemId, ABS(catchInfo->itemAction));
if (!CVarGetInteger("gFastDrops", 0)) {
this->stateFlags1 |= PLAYER_STATE1_IN_ITEM_CS | PLAYER_STATE1_IN_CUTSCENE;
Player_AnimPlayOnceAdjusted(play, this, sp24->unk_04);
func_80835EA4(play, 4);
}
} else if (IS_RANDO && gi.itemId != ITEM_NONE) {
// Non-bottle item found from rando, flag for special behavior
this->unk_84F = -1;
this->unk_850 = rc;
}
}
}