From 50536bf7376f05339d68401a3246fcf0f4c89b08 Mon Sep 17 00:00:00 2001 From: Mr-Wiseguy Date: Thu, 4 Apr 2024 20:37:08 -0400 Subject: [PATCH] Patched ocarina wipe effects to work in widescreen by injecting new vertex and triangle lists --- patches/ocarina_effect_patches.c | 1251 ++++++++++++++++++++++++++++++ 1 file changed, 1251 insertions(+) create mode 100644 patches/ocarina_effect_patches.c diff --git a/patches/ocarina_effect_patches.c b/patches/ocarina_effect_patches.c new file mode 100644 index 0000000..2ab1d0a --- /dev/null +++ b/patches/ocarina_effect_patches.c @@ -0,0 +1,1251 @@ +#include "patches.h" +#include "overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.h" +#include "overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.h" +#include "overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.h" +#include "overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.h" +#include "overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.h" +#include "overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.h" +#include "overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.h" + +// @recomp Custom verts to extend the effects past the camera so they cover any aspect ratio. +Vtx time_override_verts[156] = { + {{ {-165, 227, 0}, 0, {1229, 1024}, {183, 183, 183, 0} }}, + {{ {-206, 283, 300}, 0, {1229, 512}, {183, 183, 183, 160} }}, + {{ {0, 350, 300}, 0, {1024, 512}, {183, 183, 183, 160} }}, + {{ {-165, 227, 0}, 0, {1229, 1024}, {183, 183, 183, 0} }}, + {{ {0, 350, 300}, 0, {1024, 512}, {183, 183, 183, 160} }}, + {{ {0, 280, 0}, 0, {1024, 1024}, {183, 183, 183, 0} }}, + {{ {-206, 283, 300}, 0, {1229, 512}, {183, 183, 183, 160} }}, + {{ {-294, 405, 1000}, 0, {1229, 0}, {183, 183, 183, 255} }}, + {{ {0, 500, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }}, + {{ {-206, 283, 300}, 0, {1229, 512}, {183, 183, 183, 160} }}, + {{ {0, 500, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }}, + {{ {0, 350, 300}, 0, {1024, 512}, {183, 183, 183, 160} }}, + {{ {-266, 87, 0}, 0, {1434, 1024}, {183, 183, 183, 0} }}, + {{ {-333, 108, 300}, 0, {1434, 512}, {183, 183, 183, 160} }}, + {{ {-206, 283, 300}, 0, {1229, 512}, {183, 183, 183, 160} }}, + {{ {-266, 87, 0}, 0, {1434, 1024}, {183, 183, 183, 0} }}, + {{ {-206, 283, 300}, 0, {1229, 512}, {183, 183, 183, 160} }}, + {{ {-165, 227, 0}, 0, {1229, 1024}, {183, 183, 183, 0} }}, + {{ {-333, 108, 300}, 0, {1434, 512}, {183, 183, 183, 160} }}, + {{ {-476, 155, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }}, + {{ {-294, 405, 1000}, 0, {1229, 0}, {183, 183, 183, 255} }}, + {{ {-333, 108, 300}, 0, {1434, 512}, {183, 183, 183, 160} }}, + {{ {-294, 405, 1000}, 0, {1229, 0}, {183, 183, 183, 255} }}, + {{ {-206, 283, 300}, 0, {1229, 512}, {183, 183, 183, 160} }}, + {{ {-266, -87, 0}, 0, {1638, 1024}, {183, 183, 183, 0} }}, + {{ {-333, -108, 300}, 0, {1638, 512}, {183, 183, 183, 160} }}, + {{ {-333, 108, 300}, 0, {1434, 512}, {183, 183, 183, 160} }}, + {{ {-266, -87, 0}, 0, {1638, 1024}, {183, 183, 183, 0} }}, + {{ {-266, 87, 0}, 0, {1434, 1024}, {183, 183, 183, 0} }}, + {{ {-333, -108, 300}, 0, {1638, 512}, {183, 183, 183, 160} }}, + {{ {-476, -155, 1000}, 0, {1638, 0}, {183, 183, 183, 255} }}, + {{ {-476, 155, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }}, + {{ {-333, -108, 300}, 0, {1638, 512}, {183, 183, 183, 160} }}, + {{ {-476, 155, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }}, + {{ {-333, 108, 300}, 0, {1434, 512}, {183, 183, 183, 160} }}, + {{ {-165, -227, 0}, 0, {1843, 1024}, {183, 183, 183, 0} }}, + {{ {-206, -283, 300}, 0, {1843, 512}, {183, 183, 183, 160} }}, + {{ {-333, -108, 300}, 0, {1638, 512}, {183, 183, 183, 160} }}, + {{ {-165, -227, 0}, 0, {1843, 1024}, {183, 183, 183, 0} }}, + {{ {-333, -108, 300}, 0, {1638, 512}, {183, 183, 183, 160} }}, + {{ {-266, -87, 0}, 0, {1638, 1024}, {183, 183, 183, 0} }}, + {{ {-206, -283, 300}, 0, {1843, 512}, {183, 183, 183, 160} }}, + {{ {-294, -405, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }}, + {{ {-476, -155, 1000}, 0, {1638, 0}, {183, 183, 183, 255} }}, + {{ {-206, -283, 300}, 0, {1843, 512}, {183, 183, 183, 160} }}, + {{ {-476, -155, 1000}, 0, {1638, 0}, {183, 183, 183, 255} }}, + {{ {0, -280, 0}, 0, {2048, 1024}, {183, 183, 183, 0} }}, + {{ {0, -350, 300}, 0, {2048, 512}, {183, 183, 183, 160} }}, + {{ {-206, -283, 300}, 0, {1843, 512}, {183, 183, 183, 160} }}, + {{ {-165, -227, 0}, 0, {1843, 1024}, {183, 183, 183, 0} }}, + {{ {0, -350, 300}, 0, {2048, 512}, {183, 183, 183, 160} }}, + {{ {0, -500, 1000}, 0, {2048, 0}, {183, 183, 183, 255} }}, + {{ {-294, -405, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }}, + {{ {0, -350, 300}, 0, {2048, 512}, {183, 183, 183, 160} }}, + {{ {-294, -405, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }}, + {{ {-206, -283, 300}, 0, {1843, 512}, {183, 183, 183, 160} }}, + {{ {165, -227, 0}, 0, {205, 1024}, {183, 183, 183, 0} }}, + {{ {206, -283, 300}, 0, {205, 512}, {183, 183, 183, 160} }}, + {{ {0, -350, 300}, 0, {0, 512}, {183, 183, 183, 160} }}, + {{ {165, -227, 0}, 0, {205, 1024}, {183, 183, 183, 0} }}, + {{ {0, -350, 300}, 0, {0, 512}, {183, 183, 183, 160} }}, + {{ {0, -280, 0}, 0, {0, 1024}, {183, 183, 183, 0} }}, + {{ {206, -283, 300}, 0, {205, 512}, {183, 183, 183, 160} }}, + {{ {294, -405, 1000}, 0, {205, 0}, {183, 183, 183, 255} }}, + {{ {0, -500, 1000}, 0, {0, 0}, {183, 183, 183, 255} }}, + {{ {206, -283, 300}, 0, {205, 512}, {183, 183, 183, 160} }}, + {{ {0, -500, 1000}, 0, {0, 0}, {183, 183, 183, 255} }}, + {{ {0, -350, 300}, 0, {0, 512}, {183, 183, 183, 160} }}, + {{ {266, -87, 0}, 0, {410, 1024}, {183, 183, 183, 0} }}, + {{ {333, -108, 300}, 0, {410, 512}, {183, 183, 183, 160} }}, + {{ {206, -283, 300}, 0, {205, 512}, {183, 183, 183, 160} }}, + {{ {266, -87, 0}, 0, {410, 1024}, {183, 183, 183, 0} }}, + {{ {206, -283, 300}, 0, {205, 512}, {183, 183, 183, 160} }}, + {{ {165, -227, 0}, 0, {205, 1024}, {183, 183, 183, 0} }}, + {{ {333, -108, 300}, 0, {410, 512}, {183, 183, 183, 160} }}, + {{ {476, -155, 1000}, 0, {410, 0}, {183, 183, 183, 255} }}, + {{ {294, -405, 1000}, 0, {205, 0}, {183, 183, 183, 255} }}, + {{ {333, -108, 300}, 0, {410, 512}, {183, 183, 183, 160} }}, + {{ {294, -405, 1000}, 0, {205, 0}, {183, 183, 183, 255} }}, + {{ {206, -283, 300}, 0, {205, 512}, {183, 183, 183, 160} }}, + {{ {266, 87, 0}, 0, {614, 1024}, {183, 183, 183, 0} }}, + {{ {333, 108, 300}, 0, {614, 512}, {183, 183, 183, 160} }}, + {{ {333, -108, 300}, 0, {410, 512}, {183, 183, 183, 160} }}, + {{ {266, 87, 0}, 0, {614, 1024}, {183, 183, 183, 0} }}, + {{ {333, -108, 300}, 0, {410, 512}, {183, 183, 183, 160} }}, + {{ {266, -87, 0}, 0, {410, 1024}, {183, 183, 183, 0} }}, + {{ {333, 108, 300}, 0, {614, 512}, {183, 183, 183, 160} }}, + {{ {476, 155, 1000}, 0, {614, 0}, {183, 183, 183, 255} }}, + {{ {476, -155, 1000}, 0, {410, 0}, {183, 183, 183, 255} }}, + {{ {333, -108, 300}, 0, {410, 512}, {183, 183, 183, 160} }}, + {{ {165, 227, 0}, 0, {819, 1024}, {183, 183, 183, 0} }}, + {{ {206, 283, 300}, 0, {819, 512}, {183, 183, 183, 160} }}, + {{ {333, 108, 300}, 0, {614, 512}, {183, 183, 183, 160} }}, + {{ {165, 227, 0}, 0, {819, 1024}, {183, 183, 183, 0} }}, + {{ {333, 108, 300}, 0, {614, 512}, {183, 183, 183, 160} }}, + {{ {266, 87, 0}, 0, {614, 1024}, {183, 183, 183, 0} }}, + {{ {206, 283, 300}, 0, {819, 512}, {183, 183, 183, 160} }}, + {{ {294, 405, 1000}, 0, {819, 0}, {183, 183, 183, 255} }}, + {{ {476, 155, 1000}, 0, {614, 0}, {183, 183, 183, 255} }}, + {{ {206, 283, 300}, 0, {819, 512}, {183, 183, 183, 160} }}, + {{ {476, 155, 1000}, 0, {614, 0}, {183, 183, 183, 255} }}, + {{ {333, 108, 300}, 0, {614, 512}, {183, 183, 183, 160} }}, + {{ {0, 280, 0}, 0, {1024, 1024}, {183, 183, 183, 0} }}, + {{ {0, 350, 300}, 0, {1024, 512}, {183, 183, 183, 160} }}, + {{ {206, 283, 300}, 0, {819, 512}, {183, 183, 183, 160} }}, + {{ {0, 280, 0}, 0, {1024, 1024}, {183, 183, 183, 0} }}, + {{ {206, 283, 300}, 0, {819, 512}, {183, 183, 183, 160} }}, + {{ {165, 227, 0}, 0, {819, 1024}, {183, 183, 183, 0} }}, + {{ {0, 350, 300}, 0, {1024, 512}, {183, 183, 183, 160} }}, + {{ {0, 500, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }}, + {{ {294, 405, 1000}, 0, {819, 0}, {183, 183, 183, 255} }}, + {{ {0, 350, 300}, 0, {1024, 512}, {183, 183, 183, 160} }}, + {{ {294, 405, 1000}, 0, {819, 0}, {183, 183, 183, 255} }}, + {{ {206, 283, 300}, 0, {819, 512}, {183, 183, 183, 160} }}, + {{ {-294, 405, 1000}, 0, {1229, 0}, {169, 218, 84, 255} }}, + {{ {-476, 155, 1000}, 0, {1434, 0}, {30, 58, 147, 255} }}, + {{ {-758, 247, 2422}, 0, {1373, -1039}, {182, 183, 183, 255} }}, + {{ {-468, 645, 2422}, 0, {1168, -1039}, {191, 190, 169, 255} }}, + {{ {294, -405, 1000}, 0, {205, 0}, {9, 53, 141, 255} }}, + {{ {476, -155, 1000}, 0, {410, 0}, {228, 185, 101, 255} }}, + {{ {758, -247, 2422}, 0, {349, -1039}, {183, 182, 183, 255} }}, + {{ {468, -645, 2422}, 0, {144, -1039}, {179, 169, 206, 255} }}, + {{ {476, 155, 1000}, 0, {614, 0}, {132, 13, 230, 255} }}, + {{ {294, 405, 1000}, 0, {819, 0}, {245, 133, 27, 255} }}, + {{ {468, 645, 2422}, 0, {758, -1039}, {183, 183, 182, 255} }}, + {{ {476, 155, 1000}, 0, {614, 0}, {132, 13, 230, 255} }}, + {{ {468, 645, 2422}, 0, {758, -1039}, {183, 183, 182, 255} }}, + {{ {758, 247, 2422}, 0, {553, -1039}, {198, 165, 189, 255} }}, + {{ {294, 405, 1000}, 0, {819, 0}, {139, 219, 32, 255} }}, + {{ {0, 500, 1000}, 0, {1024, 0}, {58, 149, 220, 255} }}, + {{ {0, 796, 2422}, 0, {964, -1039}, {183, 183, 182, 255} }}, + {{ {468, 645, 2422}, 0, {758, -1039}, {206, 174, 173, 255} }}, + {{ {-476, -155, 1000}, 0, {1638, 0}, {197, 146, 231, 255} }}, + {{ {-294, -405, 1000}, 0, {1843, 0}, {138, 232, 215, 255} }}, + {{ {-468, -645, 2422}, 0, {1782, -1039}, {182, 182, 183, 255} }}, + {{ {-758, -247, 2422}, 0, {1577, -1039}, {174, 195, 181, 255} }}, + {{ {-294, -405, 1000}, 0, {1843, 0}, {9, 157, 177, 255} }}, + {{ {0, -500, 1000}, 0, {2048, 0}, {170, 166, 25, 255} }}, + {{ {0, -796, 2422}, 0, {1988, -1039}, {183, 182, 183, 255} }}, + {{ {-468, -645, 2422}, 0, {1782, -1039}, {172, 183, 195, 255} }}, + {{ {-476, 155, 1000}, 0, {1434, 0}, {159, 188, 45, 255} }}, + {{ {-476, -155, 1000}, 0, {1638, 0}, {186, 54, 165, 255} }}, + {{ {-758, -247, 2422}, 0, {1578, -1039}, {182, 183, 183, 255} }}, + {{ {-758, 247, 2422}, 0, {1374, -1039}, {184, 193, 173, 255} }}, + {{ {0, -500, 1000}, 0, {0, 0}, {49, 230, 142, 255} }}, + {{ {294, -405, 1000}, 0, {205, 0}, {222, 163, 79, 255} }}, + {{ {468, -645, 2422}, 0, {144, -1039}, {183, 182, 183, 255} }}, + {{ {0, -796, 2422}, 0, {-60, -1039}, {173, 175, 204, 255} }}, + {{ {476, -155, 1000}, 0, {410, 0}, {182, 64, 175, 255} }}, + {{ {476, 155, 1000}, 0, {614, 0}, {214, 169, 82, 255} }}, + {{ {758, 247, 2422}, 0, {554, -1039}, {183, 183, 182, 255} }}, + {{ {758, -247, 2422}, 0, {350, -1039}, {187, 165, 201, 255} }}, + {{ {0, 500, 1000}, 0, {1024, 0}, {169, 211, 81, 255} }}, + {{ {-294, 405, 1000}, 0, {1229, 0}, {89, 233, 168, 255} }}, + {{ {-468, 645, 2422}, 0, {1168, -1039}, {182, 183, 182, 255} }}, + {{ {0, 796, 2422}, 0, {964, -1039}, {198, 185, 168, 255} }}, +}; +Gfx time_override_dl[] = { + gsSPVertex(time_override_verts + 0, 32, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0), + gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0), + gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0), + gsSP2Triangles(18, 19, 20, 0, 21, 22, 23, 0), + gsSP2Triangles(24, 25, 26, 0, 27, 26, 28, 0), + gsSP1Triangle(29, 30, 31, 0), + gsSPVertex(time_override_verts + 32, 30, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0), + gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0), + gsSP2Triangles(12, 13, 5, 0, 14, 15, 16, 0), + gsSP2Triangles(14, 16, 17, 0, 18, 19, 20, 0), + gsSP2Triangles(21, 22, 23, 0, 24, 25, 26, 0), + gsSP1Triangle(27, 28, 29, 0), + gsSPVertex(time_override_verts + 62, 31, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0), + gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0), + gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0), + gsSP2Triangles(18, 19, 20, 0, 21, 22, 23, 0), + gsSP2Triangles(24, 25, 26, 0, 24, 26, 27, 0), + gsSP1Triangle(28, 29, 30, 0), + gsSPVertex(time_override_verts + 93, 32, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0), + gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0), + gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0), + gsSP2Triangles(18, 19, 20, 0, 21, 22, 23, 0), + gsSP2Triangles(21, 23, 24, 0, 25, 26, 27, 0), + gsSP2Triangles(25, 27, 28, 0, 29, 30, 31, 0), + gsSPVertex(time_override_verts + 125, 31, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0), + gsSP2Triangles(3, 5, 6, 0, 7, 8, 9, 0), + gsSP2Triangles(7, 9, 10, 0, 11, 12, 13, 0), + gsSP2Triangles(11, 13, 14, 0, 15, 16, 17, 0), + gsSP2Triangles(15, 17, 18, 0, 19, 20, 21, 0), + gsSP2Triangles(19, 21, 22, 0, 23, 24, 25, 0), + gsSP2Triangles(23, 25, 26, 0, 27, 28, 29, 0), + gsSP1Triangle(27, 29, 30, 0), + gsSPEndDisplayList(), +}; + +Vtx epona_override_verts[100] = { + {{ {88, 121, 0}, 0, {1638, 2048}, {183, 183, 183, 0} }}, + {{ {243, 176, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }}, + {{ {143, 46, 0}, 0, {1229, 2048}, {183, 183, 183, 0} }}, + {{ {243, 176, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }}, + {{ {300, 0, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }}, + {{ {143, 46, 0}, 0, {1229, 2048}, {183, 183, 183, 0} }}, + {{ {0, 150, 0}, 0, {2048, 2048}, {183, 183, 183, 0} }}, + {{ {93, 285, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }}, + {{ {88, 121, 0}, 0, {1638, 2048}, {183, 183, 183, 0} }}, + {{ {93, 285, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }}, + {{ {243, 176, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }}, + {{ {88, 121, 0}, 0, {1638, 2048}, {183, 183, 183, 0} }}, + {{ {-88, 121, 0}, 0, {2458, 2048}, {183, 183, 183, 0} }}, + {{ {-93, 285, 1000}, 0, {2253, 0}, {183, 183, 183, 255} }}, + {{ {0, 150, 0}, 0, {2048, 2048}, {183, 183, 183, 0} }}, + {{ {-93, 285, 1000}, 0, {2253, 0}, {183, 183, 183, 255} }}, + {{ {93, 285, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }}, + {{ {0, 150, 0}, 0, {2048, 2048}, {183, 183, 183, 0} }}, + {{ {-143, 46, 0}, 0, {2867, 2048}, {183, 183, 183, 0} }}, + {{ {-243, 176, 1000}, 0, {2662, 0}, {183, 183, 183, 255} }}, + {{ {-88, 121, 0}, 0, {2458, 2048}, {183, 183, 183, 0} }}, + {{ {-243, 176, 1000}, 0, {2662, 0}, {183, 183, 183, 255} }}, + {{ {-93, 285, 1000}, 0, {2253, 0}, {183, 183, 183, 255} }}, + {{ {-88, 121, 0}, 0, {2458, 2048}, {183, 183, 183, 0} }}, + {{ {-143, -46, 0}, 0, {3277, 2048}, {183, 183, 183, 0} }}, + {{ {-300, 0, 1000}, 0, {3072, 0}, {183, 183, 183, 255} }}, + {{ {-143, 46, 0}, 0, {2867, 2048}, {183, 183, 183, 0} }}, + {{ {-300, 0, 1000}, 0, {3072, 0}, {183, 183, 183, 255} }}, + {{ {-243, 176, 1000}, 0, {2662, 0}, {183, 183, 183, 255} }}, + {{ {-143, 46, 0}, 0, {2867, 2048}, {183, 183, 183, 0} }}, + {{ {-88, -121, 0}, 0, {3686, 2048}, {183, 183, 183, 0} }}, + {{ {-243, -176, 1000}, 0, {3482, 0}, {183, 183, 183, 255} }}, + {{ {-143, -46, 0}, 0, {3277, 2048}, {183, 183, 183, 0} }}, + {{ {-243, -176, 1000}, 0, {3482, 0}, {183, 183, 183, 255} }}, + {{ {-300, 0, 1000}, 0, {3072, 0}, {183, 183, 183, 255} }}, + {{ {-143, -46, 0}, 0, {3277, 2048}, {183, 183, 183, 0} }}, + {{ {0, -150, 0}, 0, {4096, 2048}, {183, 183, 183, 0} }}, + {{ {-93, -285, 1000}, 0, {3891, 0}, {183, 183, 183, 255} }}, + {{ {-88, -121, 0}, 0, {3686, 2048}, {183, 183, 183, 0} }}, + {{ {-93, -285, 1000}, 0, {3891, 0}, {183, 183, 183, 255} }}, + {{ {-243, -176, 1000}, 0, {3482, 0}, {183, 183, 183, 255} }}, + {{ {-88, -121, 0}, 0, {3686, 2048}, {183, 183, 183, 0} }}, + {{ {93, -285, 1000}, 0, {4301, 0}, {183, 183, 183, 255} }}, + {{ {-93, -285, 1000}, 0, {3891, 0}, {183, 183, 183, 255} }}, + {{ {0, -150, 0}, 0, {4096, 2048}, {183, 183, 183, 0} }}, + {{ {143, -46, 0}, 0, {819, 2048}, {183, 183, 183, 0} }}, + {{ {243, -176, 1000}, 0, {614, 0}, {183, 183, 183, 255} }}, + {{ {88, -121, 0}, 0, {410, 2048}, {183, 183, 183, 0} }}, + {{ {243, -176, 1000}, 0, {614, 0}, {183, 183, 183, 255} }}, + {{ {93, -285, 1000}, 0, {205, 0}, {183, 183, 183, 255} }}, + {{ {88, -121, 0}, 0, {410, 2048}, {183, 183, 183, 0} }}, + {{ {143, 46, 0}, 0, {1229, 2048}, {183, 183, 183, 0} }}, + {{ {300, 0, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }}, + {{ {143, -46, 0}, 0, {819, 2048}, {183, 183, 183, 0} }}, + {{ {300, 0, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }}, + {{ {243, -176, 1000}, 0, {614, 0}, {183, 183, 183, 255} }}, + {{ {143, -46, 0}, 0, {819, 2048}, {183, 183, 183, 0} }}, + {{ {88, -121, 0}, 0, {410, 2048}, {183, 183, 183, 0} }}, + {{ {93, -285, 1000}, 0, {205, 0}, {183, 183, 183, 255} }}, + {{ {0, -150, 0}, 0, {0, 2048}, {183, 183, 183, 0} }}, + {{ {-243, 176, 1000}, 0, {2662, 0}, {170, 213, 83, 255} }}, + {{ {-300, 0, 1000}, 0, {3072, 0}, {234, 71, 153, 255} }}, + {{ {-447, 0, 2021}, 0, {2971, -2092}, {182, 181, 186, 255} }}, + {{ {-362, 262, 2021}, 0, {2561, -2092}, {183, 184, 181, 255} }}, + {{ {-243, -176, 1000}, 0, {3482, 0}, {239, 135, 220, 255} }}, + {{ {-93, -285, 1000}, 0, {3891, 0}, {142, 201, 253, 255} }}, + {{ {-139, -425, 2021}, 0, {3791, -2092}, {185, 181, 182, 255} }}, + {{ {-362, -262, 2021}, 0, {3381, -2092}, {181, 184, 183, 255} }}, + {{ {300, 0, 1000}, 0, {1024, 0}, {147, 50, 214, 255} }}, + {{ {243, 176, 1000}, 0, {1434, 0}, {211, 150, 53, 255} }}, + {{ {362, 262, 2021}, 0, {1333, -2092}, {181, 185, 181, 255} }}, + {{ {447, 0, 2021}, 0, {923, -2092}, {184, 179, 185, 255} }}, + {{ {243, -176, 1000}, 0, {614, 0}, {231, 85, 165, 255} }}, + {{ {300, 0, 1000}, 0, {1024, 0}, {208, 187, 95, 255} }}, + {{ {447, 0, 2021}, 0, {923, -2092}, {183, 185, 181, 255} }}, + {{ {362, -262, 2021}, 0, {513, -2092}, {182, 180, 186, 255} }}, + {{ {-300, 0, 1000}, 0, {3072, 0}, {174, 164, 31, 255} }}, + {{ {-243, -176, 1000}, 0, {3482, 0}, {150, 25, 191, 255} }}, + {{ {-362, -262, 2021}, 0, {3381, -2092}, {183, 180, 184, 255} }}, + {{ {-447, 0, 2021}, 0, {2971, -2092}, {182, 184, 181, 255} }}, + {{ {-93, -285, 1000}, 0, {3891, 0}, {58, 185, 168, 255} }}, + {{ {93, -285, 1000}, 0, {4301, 0}, {192, 165, 60, 255} }}, + {{ {139, -425, 2021}, 0, {4200, -2092}, {184, 183, 181, 255} }}, + {{ {-139, -425, 2021}, 0, {3790, -2092}, {180, 182, 185, 255} }}, + {{ {243, 176, 1000}, 0, {1434, 0}, {133, 235, 21, 255} }}, + {{ {93, 285, 1000}, 0, {1843, 0}, {13, 130, 245, 255} }}, + {{ {139, 425, 2021}, 0, {1743, -2092}, {180, 185, 184, 255} }}, + {{ {362, 262, 2021}, 0, {1333, -2092}, {186, 180, 182, 255} }}, + {{ {-93, 285, 1000}, 0, {2253, 0}, {190, 217, 101, 255} }}, + {{ {-243, 176, 1000}, 0, {2662, 0}, {67, 23, 151, 255} }}, + {{ {-362, 262, 2021}, 0, {2561, -2092}, {180, 181, 187, 255} }}, + {{ {-139, 425, 2021}, 0, {2153, -2092}, {184, 183, 181, 255} }}, + {{ {93, 285, 1000}, 0, {1843, 0}, {171, 203, 78, 255} }}, + {{ {-93, 285, 1000}, 0, {2253, 0}, {77, 183, 186, 255} }}, + {{ {-139, 425, 2021}, 0, {2152, -2092}, {179, 183, 186, 255} }}, + {{ {139, 425, 2021}, 0, {1742, -2092}, {185, 182, 181, 255} }}, + {{ {93, -285, 1000}, 0, {205, 0}, {58, 29, 147, 255} }}, + {{ {243, -176, 1000}, 0, {614, 0}, {221, 182, 97, 255} }}, + {{ {362, -262, 2021}, 0, {513, -2092}, {184, 184, 181, 255} }}, + {{ {139, -425, 2021}, 0, {105, -2092}, {181, 181, 186, 255} }}, +}; +Gfx epona_override_dl[] = { + gsSPVertex(epona_override_verts + 0, 30, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0), + gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0), + gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0), + gsSP2Triangles(18, 19, 20, 0, 21, 22, 23, 0), + gsSP2Triangles(24, 25, 26, 0, 27, 28, 29, 0), + gsSPVertex(epona_override_verts + 30, 30, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0), + gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0), + gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0), + gsSP2Triangles(18, 19, 20, 0, 21, 22, 23, 0), + gsSP2Triangles(24, 25, 26, 0, 27, 28, 29, 0), + gsSPVertex(epona_override_verts + 60, 32, 0), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), + gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0), + gsSP2Triangles(8, 9, 10, 0, 8, 10, 11, 0), + gsSP2Triangles(12, 13, 14, 0, 12, 14, 15, 0), + gsSP2Triangles(16, 17, 18, 0, 16, 18, 19, 0), + gsSP2Triangles(20, 21, 22, 0, 20, 22, 23, 0), + gsSP2Triangles(24, 25, 26, 0, 24, 26, 27, 0), + gsSP2Triangles(28, 29, 30, 0, 28, 30, 31, 0), + gsSPVertex(epona_override_verts + 92, 8, 0), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), + gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0), + gsSPEndDisplayList(), +}; + +Vtx saria_override_verts[100] = { + {{ {88, 121, 0}, 0, {1638, 2048}, {183, 183, 183, 0} }}, + {{ {243, 176, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }}, + {{ {143, 46, 0}, 0, {1229, 2048}, {183, 183, 183, 0} }}, + {{ {243, 176, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }}, + {{ {300, 0, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }}, + {{ {143, 46, 0}, 0, {1229, 2048}, {183, 183, 183, 0} }}, + {{ {0, 150, 0}, 0, {2048, 2048}, {183, 183, 183, 0} }}, + {{ {93, 285, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }}, + {{ {88, 121, 0}, 0, {1638, 2048}, {183, 183, 183, 0} }}, + {{ {93, 285, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }}, + {{ {243, 176, 1000}, 0, {1434, 0}, {183, 183, 183, 255} }}, + {{ {88, 121, 0}, 0, {1638, 2048}, {183, 183, 183, 0} }}, + {{ {-88, 121, 0}, 0, {2458, 2048}, {183, 183, 183, 0} }}, + {{ {-93, 285, 1000}, 0, {2253, 0}, {183, 183, 183, 255} }}, + {{ {0, 150, 0}, 0, {2048, 2048}, {183, 183, 183, 0} }}, + {{ {-93, 285, 1000}, 0, {2253, 0}, {183, 183, 183, 255} }}, + {{ {93, 285, 1000}, 0, {1843, 0}, {183, 183, 183, 255} }}, + {{ {0, 150, 0}, 0, {2048, 2048}, {183, 183, 183, 0} }}, + {{ {-143, 46, 0}, 0, {2867, 2048}, {183, 183, 183, 0} }}, + {{ {-243, 176, 1000}, 0, {2662, 0}, {183, 183, 183, 255} }}, + {{ {-88, 121, 0}, 0, {2458, 2048}, {183, 183, 183, 0} }}, + {{ {-243, 176, 1000}, 0, {2662, 0}, {183, 183, 183, 255} }}, + {{ {-93, 285, 1000}, 0, {2253, 0}, {183, 183, 183, 255} }}, + {{ {-88, 121, 0}, 0, {2458, 2048}, {183, 183, 183, 0} }}, + {{ {-143, -46, 0}, 0, {3277, 2048}, {183, 183, 183, 0} }}, + {{ {-300, 0, 1000}, 0, {3072, 0}, {183, 183, 183, 255} }}, + {{ {-143, 46, 0}, 0, {2867, 2048}, {183, 183, 183, 0} }}, + {{ {-300, 0, 1000}, 0, {3072, 0}, {183, 183, 183, 255} }}, + {{ {-243, 176, 1000}, 0, {2662, 0}, {183, 183, 183, 255} }}, + {{ {-143, 46, 0}, 0, {2867, 2048}, {183, 183, 183, 0} }}, + {{ {-88, -121, 0}, 0, {3686, 2048}, {183, 183, 183, 0} }}, + {{ {-243, -176, 1000}, 0, {3482, 0}, {183, 183, 183, 255} }}, + {{ {-143, -46, 0}, 0, {3277, 2048}, {183, 183, 183, 0} }}, + {{ {-243, -176, 1000}, 0, {3482, 0}, {183, 183, 183, 255} }}, + {{ {-300, 0, 1000}, 0, {3072, 0}, {183, 183, 183, 255} }}, + {{ {-143, -46, 0}, 0, {3277, 2048}, {183, 183, 183, 0} }}, + {{ {0, -150, 0}, 0, {4096, 2048}, {183, 183, 183, 0} }}, + {{ {-93, -285, 1000}, 0, {3891, 0}, {183, 183, 183, 255} }}, + {{ {-88, -121, 0}, 0, {3686, 2048}, {183, 183, 183, 0} }}, + {{ {-93, -285, 1000}, 0, {3891, 0}, {183, 183, 183, 255} }}, + {{ {-243, -176, 1000}, 0, {3482, 0}, {183, 183, 183, 255} }}, + {{ {-88, -121, 0}, 0, {3686, 2048}, {183, 183, 183, 0} }}, + {{ {88, -121, 0}, 0, {410, 2048}, {183, 183, 183, 0} }}, + {{ {93, -285, 1000}, 0, {205, 0}, {183, 183, 183, 255} }}, + {{ {0, -150, 0}, 0, {0, 2048}, {183, 183, 183, 0} }}, + {{ {93, -285, 1000}, 0, {4301, 0}, {183, 183, 183, 255} }}, + {{ {-93, -285, 1000}, 0, {3891, 0}, {183, 183, 183, 255} }}, + {{ {0, -150, 0}, 0, {4096, 2048}, {183, 183, 183, 0} }}, + {{ {143, -46, 0}, 0, {819, 2048}, {183, 183, 183, 0} }}, + {{ {243, -176, 1000}, 0, {614, 0}, {183, 183, 183, 255} }}, + {{ {88, -121, 0}, 0, {410, 2048}, {183, 183, 183, 0} }}, + {{ {243, -176, 1000}, 0, {614, 0}, {183, 183, 183, 255} }}, + {{ {93, -285, 1000}, 0, {205, 0}, {183, 183, 183, 255} }}, + {{ {88, -121, 0}, 0, {410, 2048}, {183, 183, 183, 0} }}, + {{ {143, 46, 0}, 0, {1229, 2048}, {183, 183, 183, 0} }}, + {{ {300, 0, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }}, + {{ {143, -46, 0}, 0, {819, 2048}, {183, 183, 183, 0} }}, + {{ {300, 0, 1000}, 0, {1024, 0}, {183, 183, 183, 255} }}, + {{ {243, -176, 1000}, 0, {614, 0}, {183, 183, 183, 255} }}, + {{ {143, -46, 0}, 0, {819, 2048}, {183, 183, 183, 0} }}, + {{ {243, 176, 1000}, 0, {1434, 0}, {132, 235, 21, 255} }}, + {{ {93, 285, 1000}, 0, {1843, 0}, {13, 130, 245, 255} }}, + {{ {142, 436, 2178}, 0, {1843, 0}, {180, 186, 183, 255} }}, + {{ {372, 270, 2178}, 0, {1434, 0}, {186, 181, 181, 255} }}, + {{ {-300, 0, 1000}, 0, {3072, 0}, {174, 164, 31, 255} }}, + {{ {-243, -176, 1000}, 0, {3482, 0}, {149, 25, 192, 255} }}, + {{ {-372, -270, 2178}, 0, {3482, 0}, {183, 180, 185, 255} }}, + {{ {-459, 0, 2178}, 0, {3072, 0}, {182, 184, 182, 255} }}, + {{ {243, -176, 1000}, 0, {614, 0}, {232, 84, 164, 255} }}, + {{ {300, 0, 1000}, 0, {1024, 0}, {207, 187, 95, 255} }}, + {{ {459, 0, 2178}, 0, {1024, 0}, {183, 184, 180, 255} }}, + {{ {372, -270, 2178}, 0, {614, 0}, {183, 179, 186, 255} }}, + {{ {93, -285, 1000}, 0, {205, 0}, {59, 28, 147, 255} }}, + {{ {243, -176, 1000}, 0, {614, 0}, {221, 183, 97, 255} }}, + {{ {372, -270, 2178}, 0, {614, 0}, {184, 183, 181, 255} }}, + {{ {142, -436, 2178}, 0, {205, 0}, {181, 180, 187, 255} }}, + {{ {93, 285, 1000}, 0, {1843, 0}, {171, 203, 78, 255} }}, + {{ {-93, 285, 1000}, 0, {2253, 0}, {77, 184, 186, 255} }}, + {{ {-142, 436, 2178}, 0, {2253, 0}, {179, 184, 185, 255} }}, + {{ {142, 436, 2178}, 0, {1843, 0}, {185, 183, 180, 255} }}, + {{ {-93, 285, 1000}, 0, {2253, 0}, {190, 217, 101, 255} }}, + {{ {-243, 176, 1000}, 0, {2662, 0}, {67, 24, 151, 255} }}, + {{ {-372, 270, 2178}, 0, {2662, 0}, {180, 182, 187, 255} }}, + {{ {-142, 436, 2178}, 0, {2253, 0}, {184, 184, 180, 255} }}, + {{ {-243, -176, 1000}, 0, {3482, 0}, {239, 135, 221, 255} }}, + {{ {-93, -285, 1000}, 0, {3891, 0}, {142, 201, 253, 255} }}, + {{ {-142, -436, 2178}, 0, {3891, 0}, {185, 181, 183, 255} }}, + {{ {-372, -270, 2178}, 0, {3482, 0}, {180, 184, 184, 255} }}, + {{ {300, 0, 1000}, 0, {1024, 0}, {147, 50, 213, 255} }}, + {{ {243, 176, 1000}, 0, {1434, 0}, {211, 149, 53, 255} }}, + {{ {372, 270, 2178}, 0, {1434, 0}, {182, 186, 180, 255} }}, + {{ {459, 0, 2178}, 0, {1024, 0}, {185, 179, 184, 255} }}, + {{ {-243, 176, 1000}, 0, {2662, 0}, {171, 212, 83, 255} }}, + {{ {-300, 0, 1000}, 0, {3072, 0}, {233, 71, 153, 255} }}, + {{ {-459, 0, 2178}, 0, {3072, 0}, {181, 181, 187, 255} }}, + {{ {-372, 270, 2178}, 0, {2662, 0}, {183, 184, 181, 255} }}, + {{ {-93, -285, 1000}, 0, {3891, 0}, {58, 184, 169, 255} }}, + {{ {93, -285, 1000}, 0, {4301, 0}, {192, 165, 61, 255} }}, + {{ {142, -436, 2178}, 0, {4301, 0}, {184, 182, 181, 255} }}, + {{ {-142, -436, 2178}, 0, {3891, 0}, {180, 182, 186, 255} }}, +}; +Gfx saria_override_dl[] = { + gsSPVertex(saria_override_verts + 0, 30, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0), + gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0), + gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0), + gsSP2Triangles(18, 19, 20, 0, 21, 22, 23, 0), + gsSP2Triangles(24, 25, 26, 0, 27, 28, 29, 0), + gsSPVertex(saria_override_verts + 30, 30, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0), + gsSP2Triangles(6, 7, 8, 0, 9, 10, 11, 0), + gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0), + gsSP2Triangles(18, 19, 20, 0, 21, 22, 23, 0), + gsSP2Triangles(24, 25, 26, 0, 27, 28, 29, 0), + gsSPVertex(saria_override_verts + 60, 32, 0), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), + gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0), + gsSP2Triangles(8, 9, 10, 0, 8, 10, 11, 0), + gsSP2Triangles(12, 13, 14, 0, 12, 14, 15, 0), + gsSP2Triangles(16, 17, 18, 0, 16, 18, 19, 0), + gsSP2Triangles(20, 21, 22, 0, 20, 22, 23, 0), + gsSP2Triangles(24, 25, 26, 0, 24, 26, 27, 0), + gsSP2Triangles(28, 29, 30, 0, 28, 30, 31, 0), + gsSPVertex(saria_override_verts + 92, 8, 0), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), + gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0), + gsSPEndDisplayList(), +}; + +Vtx scarecrow_override_verts[49] = { + {{ {88, 121, 0}, 0, {819, 504}, {255, 255, 255, 0} }}, + {{ {243, 176, 1000}, 0, {717, -8}, {255, 255, 255, 255} }}, + {{ {143, 46, 0}, 0, {614, 504}, {255, 255, 255, 0} }}, + {{ {0, 150, 0}, 0, {1024, 504}, {255, 255, 255, 0} }}, + {{ {93, 285, 1000}, 0, {922, -8}, {255, 255, 255, 255} }}, + {{ {-88, 121, 0}, 0, {1229, 504}, {255, 255, 255, 0} }}, + {{ {-93, 285, 1000}, 0, {1126, -8}, {255, 255, 255, 255} }}, + {{ {-143, 46, 0}, 0, {1434, 504}, {255, 255, 255, 0} }}, + {{ {-243, 176, 1000}, 0, {1331, -8}, {255, 255, 255, 255} }}, + {{ {-143, -46, 0}, 0, {1638, 504}, {255, 255, 255, 0} }}, + {{ {-300, 0, 1000}, 0, {1536, -8}, {255, 255, 255, 255} }}, + {{ {-88, -121, 0}, 0, {1843, 504}, {255, 255, 255, 0} }}, + {{ {-243, -176, 1000}, 0, {1741, -8}, {255, 255, 255, 255} }}, + {{ {0, -150, 0}, 0, {2048, 504}, {255, 255, 255, 0} }}, + {{ {-93, -285, 1000}, 0, {1946, -8}, {255, 255, 255, 255} }}, + {{ {88, -121, 0}, 0, {205, 504}, {255, 255, 255, 0} }}, + {{ {93, -285, 1000}, 0, {102, -8}, {255, 255, 255, 255} }}, + {{ {0, -150, 0}, 0, {0, 504}, {255, 255, 255, 0} }}, + {{ {143, -46, 0}, 0, {410, 504}, {255, 255, 255, 0} }}, + {{ {243, -176, 1000}, 0, {307, -8}, {255, 255, 255, 255} }}, + {{ {300, 0, 1000}, 0, {512, -8}, {255, 255, 255, 255} }}, + {{ {355, 257, 2036}, 0, {670, -538}, {255, 255, 255, 255} }}, + {{ {439, 0, 2036}, 0, {465, -538}, {255, 255, 255, 255} }}, + {{ {136, 417, 2036}, 0, {875, -538}, {255, 255, 255, 255} }}, + {{ {355, 257, 2036}, 0, {669, -538}, {255, 255, 255, 255} }}, + {{ {-136, 417, 2036}, 0, {1079, -538}, {255, 255, 255, 255} }}, + {{ {136, 417, 2036}, 0, {875, -538}, {255, 255, 255, 255} }}, + {{ {-355, 257, 2036}, 0, {1283, -538}, {255, 255, 255, 255} }}, + {{ {-136, 417, 2036}, 0, {1079, -538}, {255, 255, 255, 255} }}, + {{ {-439, 0, 2036}, 0, {1489, -538}, {255, 255, 255, 255} }}, + {{ {-355, 257, 2036}, 0, {1284, -538}, {255, 255, 255, 255} }}, + {{ {-355, -257, 2036}, 0, {1694, -538}, {255, 255, 255, 255} }}, + {{ {-243, -176, 1000}, 0, {1741, -8}, {255, 255, 255, 255} }}, + {{ {-93, -285, 1000}, 0, {1946, -8}, {255, 255, 255, 255} }}, + {{ {-136, -417, 2036}, 0, {1899, -538}, {255, 255, 255, 255} }}, + {{ {-355, -257, 2036}, 0, {1693, -538}, {255, 255, 255, 255} }}, + {{ {93, -285, 1000}, 0, {2150, -8}, {255, 255, 255, 255} }}, + {{ {0, -150, 0}, 0, {2048, 504}, {255, 255, 255, 0} }}, + {{ {136, -417, 2036}, 0, {2103, -538}, {255, 255, 255, 255} }}, + {{ {-136, -417, 2036}, 0, {1899, -538}, {255, 255, 255, 255} }}, + {{ {243, -176, 1000}, 0, {307, -8}, {255, 255, 255, 255} }}, + {{ {93, -285, 1000}, 0, {102, -8}, {255, 255, 255, 255} }}, + {{ {88, -121, 0}, 0, {205, 504}, {255, 255, 255, 0} }}, + {{ {355, -257, 2036}, 0, {259, -538}, {255, 255, 255, 255} }}, + {{ {136, -417, 2036}, 0, {55, -538}, {255, 255, 255, 255} }}, + {{ {300, 0, 1000}, 0, {512, -8}, {255, 255, 255, 255} }}, + {{ {143, -46, 0}, 0, {410, 504}, {255, 255, 255, 0} }}, + {{ {439, 0, 2036}, 0, {465, -538}, {255, 255, 255, 255} }}, + {{ {355, -257, 2036}, 0, {260, -538}, {255, 255, 255, 255} }}, +}; +Gfx scarecrow_override_dl[] = { + gsSPVertex(scarecrow_override_verts + 0, 32, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 0, 0), + gsSP2Triangles(5, 6, 3, 0, 7, 8, 5, 0), + gsSP2Triangles(9, 10, 7, 0, 11, 12, 9, 0), + gsSP2Triangles(13, 14, 11, 0, 15, 16, 17, 0), + gsSP2Triangles(18, 19, 15, 0, 2, 20, 18, 0), + gsSP2Triangles(1, 20, 2, 0, 20, 1, 21, 0), + gsSP2Triangles(20, 21, 22, 0, 4, 1, 0, 0), + gsSP2Triangles(1, 4, 23, 0, 1, 23, 24, 0), + gsSP2Triangles(6, 4, 3, 0, 4, 6, 25, 0), + gsSP2Triangles(4, 25, 26, 0, 8, 6, 5, 0), + gsSP2Triangles(6, 8, 27, 0, 6, 27, 28, 0), + gsSP2Triangles(10, 8, 7, 0, 8, 10, 29, 0), + gsSP2Triangles(8, 29, 30, 0, 12, 10, 9, 0), + gsSP2Triangles(10, 12, 31, 0, 10, 31, 29, 0), + gsSP1Triangle(14, 12, 11, 0), + gsSPVertex(scarecrow_override_verts + 32, 17, 0), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), + gsSP2Triangles(4, 1, 5, 0, 1, 4, 6, 0), + gsSP2Triangles(1, 6, 7, 0, 8, 9, 10, 0), + gsSP2Triangles(9, 8, 11, 0, 9, 11, 12, 0), + gsSP2Triangles(13, 8, 14, 0, 8, 13, 15, 0), + gsSP1Triangle(8, 15, 16, 0), + gsSPEndDisplayList(), +}; + +Vtx oceff5_override_verts[49] = { + {{ {88, 121, 0}, 0, {819, 1024}, {255, 255, 255, 0} }}, + {{ {243, 176, 1000}, 0, {717, 0}, {255, 255, 255, 255} }}, + {{ {143, 46, 0}, 0, {614, 1024}, {255, 255, 255, 0} }}, + {{ {0, 150, 0}, 0, {1024, 1024}, {255, 255, 255, 0} }}, + {{ {93, 285, 1000}, 0, {922, 0}, {255, 255, 255, 255} }}, + {{ {-88, 121, 0}, 0, {1229, 1024}, {255, 255, 255, 0} }}, + {{ {-93, 285, 1000}, 0, {1126, 0}, {255, 255, 255, 255} }}, + {{ {-143, 46, 0}, 0, {1434, 1024}, {255, 255, 255, 0} }}, + {{ {-243, 176, 1000}, 0, {1331, 0}, {255, 255, 255, 255} }}, + {{ {-143, -46, 0}, 0, {1638, 1024}, {255, 255, 255, 0} }}, + {{ {-300, 0, 1000}, 0, {1536, 0}, {255, 255, 255, 255} }}, + {{ {-88, -121, 0}, 0, {1843, 1024}, {255, 255, 255, 0} }}, + {{ {-243, -176, 1000}, 0, {1741, 0}, {255, 255, 255, 255} }}, + {{ {0, -150, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }}, + {{ {-93, -285, 1000}, 0, {1946, 0}, {255, 255, 255, 255} }}, + {{ {88, -121, 0}, 0, {205, 1024}, {255, 255, 255, 0} }}, + {{ {93, -285, 1000}, 0, {102, 0}, {255, 255, 255, 255} }}, + {{ {0, -150, 0}, 0, {0, 1024}, {255, 255, 255, 0} }}, + {{ {143, -46, 0}, 0, {410, 1024}, {255, 255, 255, 0} }}, + {{ {243, -176, 1000}, 0, {307, 0}, {255, 255, 255, 255} }}, + {{ {300, 0, 1000}, 0, {512, 0}, {255, 255, 255, 255} }}, + {{ {318, 231, 1846}, 0, {685, -863}, {255, 255, 255, 255} }}, + {{ {393, 0, 1846}, 0, {480, -863}, {255, 255, 255, 255} }}, + {{ {122, 373, 1846}, 0, {890, -863}, {255, 255, 255, 255} }}, + {{ {318, 231, 1846}, 0, {685, -863}, {255, 255, 255, 255} }}, + {{ {-122, 373, 1846}, 0, {1094, -863}, {255, 255, 255, 255} }}, + {{ {122, 373, 1846}, 0, {890, -863}, {255, 255, 255, 255} }}, + {{ {-318, 231, 1846}, 0, {1299, -863}, {255, 255, 255, 255} }}, + {{ {-122, 373, 1846}, 0, {1094, -863}, {255, 255, 255, 255} }}, + {{ {-393, 0, 1846}, 0, {1504, -863}, {255, 255, 255, 255} }}, + {{ {-318, 231, 1846}, 0, {1299, -863}, {255, 255, 255, 255} }}, + {{ {-318, -231, 1846}, 0, {1709, -863}, {255, 255, 255, 255} }}, + {{ {-243, -176, 1000}, 0, {1741, 0}, {255, 255, 255, 255} }}, + {{ {-93, -285, 1000}, 0, {1946, 0}, {255, 255, 255, 255} }}, + {{ {-122, -373, 1846}, 0, {1914, -863}, {255, 255, 255, 255} }}, + {{ {-318, -231, 1846}, 0, {1709, -863}, {255, 255, 255, 255} }}, + {{ {93, -285, 1000}, 0, {2150, 0}, {255, 255, 255, 255} }}, + {{ {0, -150, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }}, + {{ {122, -373, 1846}, 0, {2118, -863}, {255, 255, 255, 255} }}, + {{ {-122, -373, 1846}, 0, {1914, -863}, {255, 255, 255, 255} }}, + {{ {243, -176, 1000}, 0, {307, 0}, {255, 255, 255, 255} }}, + {{ {93, -285, 1000}, 0, {102, 0}, {255, 255, 255, 255} }}, + {{ {88, -121, 0}, 0, {205, 1024}, {255, 255, 255, 0} }}, + {{ {318, -231, 1846}, 0, {275, -863}, {255, 255, 255, 255} }}, + {{ {122, -373, 1846}, 0, {70, -863}, {255, 255, 255, 255} }}, + {{ {300, 0, 1000}, 0, {512, 0}, {255, 255, 255, 255} }}, + {{ {143, -46, 0}, 0, {410, 1024}, {255, 255, 255, 0} }}, + {{ {393, 0, 1846}, 0, {480, -863}, {255, 255, 255, 255} }}, + {{ {318, -231, 1846}, 0, {275, -863}, {255, 255, 255, 255} }}, +}; +Gfx oceff5_override_dl[] = { + gsSPVertex(oceff5_override_verts + 0, 32, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 0, 0), + gsSP2Triangles(5, 6, 3, 0, 7, 8, 5, 0), + gsSP2Triangles(9, 10, 7, 0, 11, 12, 9, 0), + gsSP2Triangles(13, 14, 11, 0, 15, 16, 17, 0), + gsSP2Triangles(18, 19, 15, 0, 2, 20, 18, 0), + gsSP2Triangles(1, 20, 2, 0, 20, 1, 21, 0), + gsSP2Triangles(20, 21, 22, 0, 4, 1, 0, 0), + gsSP2Triangles(1, 4, 23, 0, 1, 23, 24, 0), + gsSP2Triangles(6, 4, 3, 0, 4, 6, 25, 0), + gsSP2Triangles(4, 25, 26, 0, 8, 6, 5, 0), + gsSP2Triangles(6, 8, 27, 0, 6, 27, 28, 0), + gsSP2Triangles(10, 8, 7, 0, 8, 10, 29, 0), + gsSP2Triangles(8, 29, 30, 0, 12, 10, 9, 0), + gsSP2Triangles(10, 12, 31, 0, 10, 31, 29, 0), + gsSP1Triangle(14, 12, 11, 0), + gsSPVertex(oceff5_override_verts + 32, 17, 0), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), + gsSP2Triangles(4, 1, 5, 0, 1, 4, 6, 0), + gsSP2Triangles(1, 6, 7, 0, 8, 9, 10, 0), + gsSP2Triangles(9, 8, 11, 0, 9, 11, 12, 0), + gsSP2Triangles(13, 8, 14, 0, 8, 13, 15, 0), + gsSP1Triangle(8, 15, 16, 0), + gsSPEndDisplayList(), +}; + +Vtx oceff6_override_verts[49] = { + {{ {88, 121, 0}, 0, {819, 1024}, {255, 255, 255, 0} }}, + {{ {243, 176, 1000}, 0, {717, 0}, {255, 255, 255, 255} }}, + {{ {143, 46, 0}, 0, {614, 1024}, {255, 255, 255, 0} }}, + {{ {0, 150, 0}, 0, {1024, 1024}, {255, 255, 255, 0} }}, + {{ {93, 285, 1000}, 0, {922, 0}, {255, 255, 255, 255} }}, + {{ {-88, 121, 0}, 0, {1229, 1024}, {255, 255, 255, 0} }}, + {{ {-93, 285, 1000}, 0, {1126, 0}, {255, 255, 255, 255} }}, + {{ {-143, 46, 0}, 0, {1434, 1024}, {255, 255, 255, 0} }}, + {{ {-243, 176, 1000}, 0, {1331, 0}, {255, 255, 255, 255} }}, + {{ {-143, -46, 0}, 0, {1638, 1024}, {255, 255, 255, 0} }}, + {{ {-300, 0, 1000}, 0, {1536, 0}, {255, 255, 255, 255} }}, + {{ {-88, -121, 0}, 0, {1843, 1024}, {255, 255, 255, 0} }}, + {{ {-243, -176, 1000}, 0, {1741, 0}, {255, 255, 255, 255} }}, + {{ {0, -150, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }}, + {{ {-93, -285, 1000}, 0, {1946, 0}, {255, 255, 255, 255} }}, + {{ {88, -121, 0}, 0, {205, 1024}, {255, 255, 255, 0} }}, + {{ {93, -285, 1000}, 0, {102, 0}, {255, 255, 255, 255} }}, + {{ {0, -150, 0}, 0, {0, 1024}, {255, 255, 255, 0} }}, + {{ {143, -46, 0}, 0, {410, 1024}, {255, 255, 255, 0} }}, + {{ {243, -176, 1000}, 0, {307, 0}, {255, 255, 255, 255} }}, + {{ {300, 0, 1000}, 0, {512, 0}, {255, 255, 255, 255} }}, + {{ {319, 231, 2005}, 0, {685, -1024}, {255, 255, 255, 255} }}, + {{ {394, 0, 2005}, 0, {480, -1024}, {255, 255, 255, 255} }}, + {{ {122, 375, 2005}, 0, {890, -1024}, {255, 255, 255, 255} }}, + {{ {319, 231, 2005}, 0, {685, -1024}, {255, 255, 255, 255} }}, + {{ {-122, 375, 2005}, 0, {1094, -1024}, {255, 255, 255, 255} }}, + {{ {122, 375, 2005}, 0, {890, -1024}, {255, 255, 255, 255} }}, + {{ {-319, 231, 2005}, 0, {1299, -1024}, {255, 255, 255, 255} }}, + {{ {-122, 375, 2005}, 0, {1094, -1024}, {255, 255, 255, 255} }}, + {{ {-394, 0, 2005}, 0, {1504, -1024}, {255, 255, 255, 255} }}, + {{ {-319, 231, 2005}, 0, {1299, -1024}, {255, 255, 255, 255} }}, + {{ {-319, -231, 2005}, 0, {1709, -1024}, {255, 255, 255, 255} }}, + {{ {-243, -176, 1000}, 0, {1741, 0}, {255, 255, 255, 255} }}, + {{ {-93, -285, 1000}, 0, {1946, 0}, {255, 255, 255, 255} }}, + {{ {-122, -375, 2005}, 0, {1914, -1024}, {255, 255, 255, 255} }}, + {{ {-319, -231, 2005}, 0, {1709, -1024}, {255, 255, 255, 255} }}, + {{ {93, -285, 1000}, 0, {2150, 0}, {255, 255, 255, 255} }}, + {{ {0, -150, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }}, + {{ {122, -375, 2005}, 0, {2118, -1024}, {255, 255, 255, 255} }}, + {{ {-122, -375, 2005}, 0, {1914, -1024}, {255, 255, 255, 255} }}, + {{ {243, -176, 1000}, 0, {307, 0}, {255, 255, 255, 255} }}, + {{ {93, -285, 1000}, 0, {102, 0}, {255, 255, 255, 255} }}, + {{ {88, -121, 0}, 0, {205, 1024}, {255, 255, 255, 0} }}, + {{ {319, -231, 2005}, 0, {275, -1024}, {255, 255, 255, 255} }}, + {{ {122, -375, 2005}, 0, {70, -1024}, {255, 255, 255, 255} }}, + {{ {300, 0, 1000}, 0, {512, 0}, {255, 255, 255, 255} }}, + {{ {143, -46, 0}, 0, {410, 1024}, {255, 255, 255, 0} }}, + {{ {394, 0, 2005}, 0, {480, -1024}, {255, 255, 255, 255} }}, + {{ {319, -231, 2005}, 0, {275, -1024}, {255, 255, 255, 255} }}, +}; +Gfx oceff6_override_dl[] = { + gsSPVertex(oceff6_override_verts + 0, 32, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 0, 0), + gsSP2Triangles(5, 6, 3, 0, 7, 8, 5, 0), + gsSP2Triangles(9, 10, 7, 0, 11, 12, 9, 0), + gsSP2Triangles(13, 14, 11, 0, 15, 16, 17, 0), + gsSP2Triangles(18, 19, 15, 0, 2, 20, 18, 0), + gsSP2Triangles(1, 20, 2, 0, 20, 1, 21, 0), + gsSP2Triangles(20, 21, 22, 0, 4, 1, 0, 0), + gsSP2Triangles(1, 4, 23, 0, 1, 23, 24, 0), + gsSP2Triangles(6, 4, 3, 0, 4, 6, 25, 0), + gsSP2Triangles(4, 25, 26, 0, 8, 6, 5, 0), + gsSP2Triangles(6, 8, 27, 0, 6, 27, 28, 0), + gsSP2Triangles(10, 8, 7, 0, 8, 10, 29, 0), + gsSP2Triangles(8, 29, 30, 0, 12, 10, 9, 0), + gsSP2Triangles(10, 12, 31, 0, 10, 31, 29, 0), + gsSP1Triangle(14, 12, 11, 0), + gsSPVertex(oceff6_override_verts + 32, 17, 0), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), + gsSP2Triangles(4, 1, 5, 0, 1, 4, 6, 0), + gsSP2Triangles(1, 6, 7, 0, 8, 9, 10, 0), + gsSP2Triangles(9, 8, 11, 0, 9, 11, 12, 0), + gsSP2Triangles(13, 8, 14, 0, 8, 13, 15, 0), + gsSP1Triangle(8, 15, 16, 0), + gsSPEndDisplayList(), +}; + +Vtx healing_override_verts[49] = { + {{ {88, 121, 0}, 0, {819, 1024}, {255, 255, 255, 0} }}, + {{ {243, 176, 1000}, 0, {717, 0}, {255, 255, 255, 255} }}, + {{ {143, 46, 0}, 0, {614, 1024}, {255, 255, 255, 0} }}, + {{ {0, 150, 0}, 0, {1024, 1024}, {255, 255, 255, 0} }}, + {{ {93, 285, 1000}, 0, {922, 0}, {255, 255, 255, 255} }}, + {{ {-88, 121, 0}, 0, {1229, 1024}, {255, 255, 255, 0} }}, + {{ {-93, 285, 1000}, 0, {1126, 0}, {255, 255, 255, 255} }}, + {{ {-143, 46, 0}, 0, {1434, 1024}, {255, 255, 255, 0} }}, + {{ {-243, 176, 1000}, 0, {1331, 0}, {255, 255, 255, 255} }}, + {{ {-143, -46, 0}, 0, {1638, 1024}, {255, 255, 255, 0} }}, + {{ {-300, 0, 1000}, 0, {1536, 0}, {255, 255, 255, 255} }}, + {{ {-88, -121, 0}, 0, {1843, 1024}, {255, 255, 255, 0} }}, + {{ {-243, -176, 1000}, 0, {1741, 0}, {255, 255, 255, 255} }}, + {{ {0, -150, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }}, + {{ {-93, -285, 1000}, 0, {1946, 0}, {255, 255, 255, 255} }}, + {{ {88, -121, 0}, 0, {205, 1024}, {255, 255, 255, 0} }}, + {{ {93, -285, 1000}, 0, {102, 0}, {255, 255, 255, 255} }}, + {{ {0, -150, 0}, 0, {0, 1024}, {255, 255, 255, 0} }}, + {{ {143, -46, 0}, 0, {410, 1024}, {255, 255, 255, 0} }}, + {{ {243, -176, 1000}, 0, {307, 0}, {255, 255, 255, 255} }}, + {{ {300, 0, 1000}, 0, {512, 0}, {255, 255, 255, 255} }}, + {{ {399, 289, 2168}, 0, {651, -1200}, {255, 255, 255, 255} }}, + {{ {493, 0, 2168}, 0, {446, -1200}, {255, 255, 255, 255} }}, + {{ {153, 468, 2168}, 0, {856, -1200}, {255, 255, 255, 255} }}, + {{ {399, 289, 2168}, 0, {651, -1200}, {255, 255, 255, 255} }}, + {{ {-153, 468, 2168}, 0, {1061, -1200}, {255, 255, 255, 255} }}, + {{ {153, 468, 2168}, 0, {857, -1200}, {255, 255, 255, 255} }}, + {{ {-399, 289, 2168}, 0, {1265, -1200}, {255, 255, 255, 255} }}, + {{ {-153, 468, 2168}, 0, {1060, -1200}, {255, 255, 255, 255} }}, + {{ {-493, 0, 2168}, 0, {1470, -1200}, {255, 255, 255, 255} }}, + {{ {-399, 289, 2168}, 0, {1265, -1200}, {255, 255, 255, 255} }}, + {{ {-399, -289, 2168}, 0, {1675, -1200}, {255, 255, 255, 255} }}, + {{ {-243, -176, 1000}, 0, {1741, 0}, {255, 255, 255, 255} }}, + {{ {-93, -285, 1000}, 0, {1946, 0}, {255, 255, 255, 255} }}, + {{ {-153, -468, 2168}, 0, {1880, -1200}, {255, 255, 255, 255} }}, + {{ {-399, -289, 2168}, 0, {1675, -1200}, {255, 255, 255, 255} }}, + {{ {93, -285, 1000}, 0, {2150, 0}, {255, 255, 255, 255} }}, + {{ {0, -150, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }}, + {{ {153, -468, 2168}, 0, {2085, -1200}, {255, 255, 255, 255} }}, + {{ {-153, -468, 2168}, 0, {1881, -1200}, {255, 255, 255, 255} }}, + {{ {243, -176, 1000}, 0, {307, 0}, {255, 255, 255, 255} }}, + {{ {93, -285, 1000}, 0, {102, 0}, {255, 255, 255, 255} }}, + {{ {88, -121, 0}, 0, {205, 1024}, {255, 255, 255, 0} }}, + {{ {399, -289, 2168}, 0, {241, -1200}, {255, 255, 255, 255} }}, + {{ {153, -468, 2168}, 0, {36, -1200}, {255, 255, 255, 255} }}, + {{ {300, 0, 1000}, 0, {512, 0}, {255, 255, 255, 255} }}, + {{ {143, -46, 0}, 0, {410, 1024}, {255, 255, 255, 0} }}, + {{ {493, 0, 2168}, 0, {446, -1200}, {255, 255, 255, 255} }}, + {{ {399, -289, 2168}, 0, {241, -1200}, {255, 255, 255, 255} }}, +}; +Gfx healing_override_dl[] = { + gsSPVertex(healing_override_verts + 0, 32, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 0, 0), + gsSP2Triangles(5, 6, 3, 0, 7, 8, 5, 0), + gsSP2Triangles(9, 10, 7, 0, 11, 12, 9, 0), + gsSP2Triangles(13, 14, 11, 0, 15, 16, 17, 0), + gsSP2Triangles(18, 19, 15, 0, 2, 20, 18, 0), + gsSP2Triangles(1, 20, 2, 0, 20, 1, 21, 0), + gsSP2Triangles(20, 21, 22, 0, 4, 1, 0, 0), + gsSP2Triangles(1, 4, 23, 0, 1, 23, 24, 0), + gsSP2Triangles(6, 4, 3, 0, 4, 6, 25, 0), + gsSP2Triangles(4, 25, 26, 0, 8, 6, 5, 0), + gsSP2Triangles(6, 8, 27, 0, 6, 27, 28, 0), + gsSP2Triangles(10, 8, 7, 0, 8, 10, 29, 0), + gsSP2Triangles(8, 29, 30, 0, 12, 10, 9, 0), + gsSP2Triangles(10, 12, 31, 0, 10, 31, 29, 0), + gsSP1Triangle(14, 12, 11, 0), + gsSPVertex(healing_override_verts + 32, 17, 0), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), + gsSP2Triangles(4, 1, 5, 0, 1, 4, 6, 0), + gsSP2Triangles(1, 6, 7, 0, 8, 9, 10, 0), + gsSP2Triangles(9, 8, 11, 0, 9, 11, 12, 0), + gsSP2Triangles(13, 8, 14, 0, 8, 13, 15, 0), + gsSP1Triangle(8, 15, 16, 0), + gsSPEndDisplayList(), +}; + +// Sets the flag to 1 for any vertex that has an alpha of 255. +void set_vertex_flags(Vtx* verts, s32 count) { + for (s32 i = 0; i < count; i++) { + if (verts[i].v.cn[3] == 160) { + verts[i].v.flag = 1; + } + else if (verts[i].v.cn[3] == 255) { + verts[i].v.flag = 2; + } + } +} + +// Sets the flags for every override vertex list. +void set_all_vertex_flags() { + static bool flags_set = false; + + // Set the flags on all the vertices first if they haven't been set yet. + if (!flags_set) { + set_vertex_flags(time_override_verts, ARRAY_COUNT(time_override_verts)); + set_vertex_flags(epona_override_verts, ARRAY_COUNT(epona_override_verts)); + set_vertex_flags(saria_override_verts, ARRAY_COUNT(saria_override_verts)); + set_vertex_flags(scarecrow_override_verts, ARRAY_COUNT(scarecrow_override_verts)); + set_vertex_flags(oceff5_override_verts, ARRAY_COUNT(oceff5_override_verts)); + set_vertex_flags(oceff6_override_verts, ARRAY_COUNT(oceff6_override_verts)); + set_vertex_flags(healing_override_verts, ARRAY_COUNT(healing_override_verts)); + flags_set = true; + } +} + +// Patches the given DL to replace a vertex command at the given position with a branch to the new DL. +void patch_ocarina_effect(Actor* actor, Gfx* original_dl, u32 dl_offset, Gfx* override_dl) { + Gfx* reloc_dl = (Gfx*)actor_relocate(actor, original_dl); + + set_all_vertex_flags(); + + // Check if the DL hasn't been patched yet. + if (reloc_dl[dl_offset].words.w0 >> 24 == G_VTX) { + // Redirect the DL away from the original vertex command and to the override DL. + gSPBranchList(&reloc_dl[dl_offset], override_dl); + } +} + +// Sets the alpha value for every vertex in the list with a set flag value. +void set_ocarina_vertex_alphas(Vtx* verts, s32 count, u8 alpha) { + for (s32 i = 0; i < count; i++) { + if (verts[i].v.flag) { + verts[i].v.cn[3] = alpha; + } + } +} + +extern Gfx sSongOfTimeFrustumMaterialDL[]; + +void OceffWipe_Draw(Actor* thisx, PlayState* play) { + u32 scroll = play->state.frames & 0xFF; + OceffWipe* this = (OceffWipe*)thisx; + f32 z; + s32 pad; + u8 alphaTable[3]; + s32 i; + Vec3f eye = GET_ACTIVE_CAM(play)->eye; + Vtx* vtxPtr; + Vec3f quakeOffset; + + // @recomp Tag the effect vertices if they haven't been already. + set_all_vertex_flags(); + + quakeOffset = Camera_GetQuakeOffset(GET_ACTIVE_CAM(play)); + + OPEN_DISPS(play->state.gfxCtx); + + if (this->counter < 32) { + z = Math_SinS(this->counter << 9) * 1360.0f; + } else { + z = 1360.0f; + } + + if (this->counter >= 80) { + alphaTable[0] = 0; + alphaTable[1] = (100 - this->counter) * 8; + alphaTable[2] = (100 - this->counter) * 12; + } else { + alphaTable[0] = 0; + alphaTable[1] = 160; + alphaTable[2] = 255; + } + + // @recomp Modify this loop to use the vertex's flag instead of a lookup table. + for (i = 0; i < ARRAY_COUNT(time_override_verts); i++) { + time_override_verts[i].v.cn[3] = alphaTable[time_override_verts[i].v.flag]; + } + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + + Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW); + Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_RotateXS(0x708, MTXMODE_APPLY); + Matrix_Translate(0.0f, 0.0f, -z, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + if (this->actor.params != OCEFF_WIPE_ZL) { + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 170, 255, 255, 255); + gDPSetEnvColor(POLY_XLU_DISP++, 0, 150, 255, 128); + } else { + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 200, 255); + gDPSetEnvColor(POLY_XLU_DISP++, 100, 0, 255, 128); + } + + // @recomp Manual relocation, TODO remove when automated. + gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, &sSongOfTimeFrustumMaterialDL)); + gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 0 - scroll, scroll * -2, 32, + 32, 1, 0 - scroll, scroll * -2, 32, 32)); + // @recomp Use the new DL instead of the original. + gSPDisplayList(POLY_XLU_DISP++, time_override_dl); + + CLOSE_DISPS(play->state.gfxCtx); +} + +extern Gfx sEponaSongFrustumMaterialDL[]; + +void OceffWipe2_Draw(Actor* thisx, PlayState* play) { + u32 scroll = play->state.frames & 0xFF; + OceffWipe2* this = (OceffWipe2*)thisx; + f32 z; + u8 alpha; + s32 pad[2]; + Vec3f eye = GET_ACTIVE_CAM(play)->eye; + Vtx* vtxPtr; + Vec3f quakeOffset; + + // @recomp Tag the effect vertices if they haven't been already. + set_all_vertex_flags(); + + quakeOffset = Camera_GetQuakeOffset(GET_ACTIVE_CAM(play)); + + if (this->timer < 32) { + z = Math_SinS(this->timer * 0x200) * 1220.0f; + } else { + z = 1220.0f; + } + + if (this->timer >= 80) { + alpha = 12 * (100 - this->timer); + } else { + alpha = 255; + } + + // @recomp Replace the set alpha loop with a vertex flag check instead. + set_ocarina_vertex_alphas(epona_override_verts, ARRAY_COUNT(epona_override_verts), alpha); + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + + Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW); + Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_RotateXS(0x708, MTXMODE_APPLY); + Matrix_Translate(0.0f, 0.0f, -z, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 170, 255); + gDPSetEnvColor(POLY_XLU_DISP++, 255, 100, 0, 128); + // @recomp Manual relocation, TODO remove when automated. + gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, sEponaSongFrustumMaterialDL)); + gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, scroll * 6, scroll * -6, 64, + 64, 1, scroll * -6, 0, 64, 64)); + // @recomp Use the new DL instead of the original. + gSPDisplayList(POLY_XLU_DISP++, epona_override_dl); + + CLOSE_DISPS(play->state.gfxCtx); +} + +extern Gfx sSariaSongFrustrumMaterialDL[]; + +void OceffWipe3_Draw(Actor* thisx, PlayState* play) { + u32 scroll = play->state.frames & 0xFFF; + OceffWipe3* this = (OceffWipe3*)thisx; + f32 z; + u8 alpha; + s32 pad[2]; + Vec3f eye = GET_ACTIVE_CAM(play)->eye; + Vtx* vtxPtr; + Vec3f quakeOffset; + + // @recomp Tag the effect vertices if they haven't been already. + set_all_vertex_flags(); + + quakeOffset = Camera_GetQuakeOffset(GET_ACTIVE_CAM(play)); + + if (this->counter < 32) { + z = Math_SinS(this->counter * 512) * 1220.0f; + } else { + z = 1220.0f; + } + + if (this->counter >= 80) { + alpha = 12 * (100 - this->counter); + } else { + alpha = 255; + } + + // @recomp Replace the set alpha loop with a vertex flag check instead. + set_ocarina_vertex_alphas(saria_override_verts, ARRAY_COUNT(saria_override_verts), alpha); + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW); + Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_RotateXS(0x708, MTXMODE_APPLY); + Matrix_Translate(0.0f, 0.0f, -z, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 170, 255); + gDPSetEnvColor(POLY_XLU_DISP++, 100, 200, 0, 128); + // @recomp Manual relocation, TODO remove when automated. + gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, &sSariaSongFrustrumMaterialDL)); + gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(play->state.gfxCtx, 0, scroll * 12, scroll * -12, 64, 64, 1, + scroll * 8, scroll * -8, 64, 64)); + // @recomp Use the new DL instead of the original. + gSPDisplayList(POLY_XLU_DISP++, saria_override_dl); + + CLOSE_DISPS(play->state.gfxCtx); +} + +extern Gfx sScarecrowSongUnusedMaterialDL[]; +extern Gfx sScarecrowSongMaterialDL[]; +extern Gfx sScarecrowSongModelDL[]; + +void OceffWipe4_Draw(Actor* thisx, PlayState* play) { + u32 scroll = play->state.frames & 0xFFF; + OceffWipe4* this = (OceffWipe4*)thisx; + f32 z; + u8 alpha; + s32 pad[2]; + Vec3f eye = GET_ACTIVE_CAM(play)->eye; + Vec3f quakeOffset; + + // @recomp Apply the patch to the DL if necessary. + patch_ocarina_effect(thisx, sScarecrowSongModelDL, 11, scarecrow_override_dl); + + quakeOffset = Camera_GetQuakeOffset(GET_ACTIVE_CAM(play)); + + if (this->counter < 16) { + z = Math_SinS(this->counter * 0x400) * 1220.0f; + } else { + z = 1220.0f; + } + + if (this->counter >= 30) { + alpha = 12 * (50 - this->counter); + } else { + alpha = 255; + } + + // @recomp Replace the set alpha loop with a vertex flag check instead. + set_ocarina_vertex_alphas(scarecrow_override_verts, ARRAY_COUNT(scarecrow_override_dl), alpha); + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + + Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW); + Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_RotateXS(0x708, MTXMODE_APPLY); + Matrix_Translate(0.0f, 0.0f, -z, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + // @recomp Manual relocations, TODO remove when automated. + if (this->actor.params == OCEFF_WIPE4_UNUSED) { + gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, sScarecrowSongUnusedMaterialDL)); + } else { + gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, sScarecrowSongMaterialDL)); + } + + gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, sScarecrowSongModelDL)); + gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, scroll * 2, scroll * -2, 32, + 64, 1, scroll * -1, scroll, 32, 32)); + gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, &sScarecrowSongModelDL[11])); + + CLOSE_DISPS(play->state.gfxCtx); +} + +static u8 sPrimColors[] = { + 255, 255, 200, 255, 255, 200, 200, 255, 255, 255, 255, 200, 255, 200, 255, +}; + +static u8 sEnvColors[] = { + 50, 200, 0, 255, 50, 0, 0, 100, 255, 255, 150, 0, 255, 0, 200, +}; + +extern Gfx gOceff5DL[]; +extern AnimatedMaterial gOceff5TexAnim[]; + +void OceffWipe5_Draw(Actor* thisx, PlayState* play) { + OceffWipe5* this = (OceffWipe5*)thisx; + f32 z; + s32 pad; + s32 i; + s32 pad2; + Vec3f activeCamEye = GET_ACTIVE_CAM(play)->eye; + Camera* activeCam = GET_ACTIVE_CAM(play); + Vec3f quakeOffset; + u8 alpha; + s32 colorIndex = OCEFF_WIPE5_GET_SONG_TYPE(thisx) * 3; + f32 phi_fv1 = 1220.0f; + + // @recomp Apply the patch to the DL if necessary. + patch_ocarina_effect(thisx, gOceff5DL, 21, oceff5_override_dl); + + if ((((OCEFF_WIPE5_GET_SONG_TYPE(thisx) == 2) && (play->sceneId == SCENE_LABO)) && + ((play->csCtx.scriptIndex == 0) || (play->csCtx.scriptIndex == 1))) && + (play->csCtx.state != CS_STATE_IDLE)) { + phi_fv1 = 1150.0f; + } + + if (colorIndex >= 13) { + colorIndex = 0; + } + + quakeOffset = Camera_GetQuakeOffset(activeCam); + + if (this->counter < 32) { + z = Math_SinS(this->counter << 9) * phi_fv1; + } else { + z = phi_fv1; + } + + if (this->counter >= 80) { + alpha = 12 * (100 - this->counter); + } else { + alpha = 255; + } + + // @recomp Replace the set alpha loop with a vertex flag check instead. + set_ocarina_vertex_alphas(oceff5_override_verts, ARRAY_COUNT(oceff5_override_verts), alpha); + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + + Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z, + MTXMODE_NEW); + Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_RotateXS(0x708, MTXMODE_APPLY); + Matrix_Translate(0.0f, 0.0f, -z, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, sPrimColors[colorIndex], sPrimColors[colorIndex + 1], + sPrimColors[colorIndex + 2], 255); + gDPSetEnvColor(POLY_XLU_DISP++, sEnvColors[colorIndex], sEnvColors[colorIndex + 1], sEnvColors[colorIndex + 2], + 255); + + // @recomp Manual relocations, TODO remove when automated. + AnimatedMat_Draw(play, (AnimatedMaterial*)actor_relocate(thisx, gOceff5TexAnim)); + gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, gOceff5DL)); + + CLOSE_DISPS(play->state.gfxCtx); +} + +extern Gfx gOceff6DL[]; +extern AnimatedMaterial ovl_Oceff_Wipe6_Matanimheader_000338[]; + +void OceffWipe6_Draw(Actor* thisx, PlayState* play) { + OceffWipe6* this = (OceffWipe6*)thisx; + f32 z; + u8 alpha; + s32 i; + s32 counter; + Vec3f activeCamEye; + s32 pad; + Vec3f quakeOffset; + s32 pad2; + + // @recomp Apply the patch to the DL if necessary. + patch_ocarina_effect(thisx, gOceff6DL, 23, oceff6_override_dl); + + activeCamEye = GET_ACTIVE_CAM(play)->eye; + quakeOffset = Camera_GetQuakeOffset(GET_ACTIVE_CAM(play)); + + if (this->counter < 32) { + counter = this->counter; + z = Math_SinS(counter * 0x200) * 1220.0f; + } else { + z = 1220.0f; + } + + if (this->counter >= 80) { + alpha = 12 * (100 - this->counter); + } else { + alpha = 255; + } + + // @recomp Replace the set alpha loop with a vertex flag check instead. + set_ocarina_vertex_alphas(oceff6_override_verts, ARRAY_COUNT(oceff6_override_verts), alpha); + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z, + MTXMODE_NEW); + Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_RotateXS(0x708, MTXMODE_APPLY); + Matrix_Translate(0.0f, 0.0f, -z, MTXMODE_APPLY); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + // @recomp Manual relocations, TODO remove these when automatic. + AnimatedMat_Draw(play, (AnimatedMaterial*)actor_relocate(thisx, ovl_Oceff_Wipe6_Matanimheader_000338)); + gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, gOceff6DL)); + + CLOSE_DISPS(play->state.gfxCtx); +} + +extern Gfx sSongOfHealingEffectFrustumDL[]; +extern AnimatedMaterial sSongofHealingEffectTexAnim[]; + +void OceffWipe7_Draw(Actor* thisx, PlayState* play) { + OceffWipe7* this = (OceffWipe7*)thisx; + f32 z; + u8 alpha; + s32 i; + s32 counter; + Vec3f activeCamEye = GET_ACTIVE_CAM(play)->eye; + s32 pad; + Vec3f quakeOffset; + s32 pad2; + + // @recomp Apply the patch to the DL if necessary. + patch_ocarina_effect(thisx, sSongOfHealingEffectFrustumDL, 23, healing_override_dl); + + quakeOffset = Camera_GetQuakeOffset(GET_ACTIVE_CAM(play)); + + if (this->counter < 32) { + z = Math_SinS(this->counter * 0x200) * 1220.0f; + } else { + z = 1220.0f; + } + + if (this->counter >= 80) { + alpha = 12 * (100 - this->counter); + } else { + alpha = 255; + } + + // @recomp Replace the set alpha loop with a vertex flag check instead. + set_ocarina_vertex_alphas(healing_override_verts, ARRAY_COUNT(healing_override_verts), alpha); + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z, + MTXMODE_NEW); + Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_RotateXS(0x708, MTXMODE_APPLY); + Matrix_Translate(0.0f, 0.0f, -z, MTXMODE_APPLY); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + // @recomp Manual relocations, TODO remove when automated. + AnimatedMat_Draw(play, (AnimatedMaterial*)actor_relocate(thisx, sSongofHealingEffectTexAnim)); + gSPDisplayList(POLY_XLU_DISP++, (Gfx*)actor_relocate(thisx, &sSongOfHealingEffectFrustumDL)); + + CLOSE_DISPS(play->state.gfxCtx); +}