Zelda64Recomp/patches/ocarina_effect_patches.c

1497 lines
71 KiB
C

#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"
#include "overlays/actors/ovl_Eff_Stk/z_eff_stk.h"
#include "transform_ids.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(),
};
Vtx skull_kid_curse_1_override_verts[52] = { // 008A38
{{ {71, 23, 0}, 0, {614, 1024}, {255, 255, 255, 0} }},
{{ {121, 88, 500}, 0, {716, 0}, {255, 255, 255, 255} }},
{{ {44, 61, 0}, 0, {819, 1024}, {255, 255, 255, 0} }},
{{ {46, 143, 500}, 0, {921, 0}, {255, 255, 255, 255} }},
{{ {0, 75, 0}, 0, {1024, 1024}, {255, 255, 255, 0} }},
{{ {-46, 143, 500}, 0, {1126, 0}, {255, 255, 255, 255} }},
{{ {-44, 61, 0}, 0, {1228, 1024}, {255, 255, 255, 0} }},
{{ {-121, 88, 500}, 0, {1331, 0}, {255, 255, 255, 255} }},
{{ {-71, 23, 0}, 0, {1433, 1024}, {255, 255, 255, 0} }},
{{ {-150, 0, 500}, 0, {1536, 0}, {255, 255, 255, 255} }},
{{ {-71, -23, 0}, 0, {1638, 1024}, {255, 255, 255, 0} }},
{{ {-121, -88, 500}, 0, {1740, 0}, {255, 255, 255, 255} }},
{{ {-44, -61, 0}, 0, {1843, 1024}, {255, 255, 255, 0} }},
{{ {-46, -143, 500}, 0, {1945, 0}, {255, 255, 255, 255} }},
{{ {0, -75, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }},
{{ {0, -75, 0}, 0, {0, 1024}, {255, 255, 255, 0} }},
{{ {46, -143, 500}, 0, {102, 0}, {255, 255, 255, 255} }},
{{ {44, -61, 0}, 0, {204, 1024}, {255, 255, 255, 0} }},
{{ {121, -88, 500}, 0, {307, 0}, {255, 255, 255, 255} }},
{{ {71, -23, 0}, 0, {409, 1024}, {255, 255, 255, 0} }},
{{ {150, 0, 500}, 0, {512, 0}, {255, 255, 255, 255} }},
{{ {248, 0, 1080}, 0, {580, -1192}, {255, 255, 255, 255} }},
{{ {200, 146, 1080}, 0, {782, -1192}, {255, 255, 255, 255} }},
{{ {200, 146, 1080}, 0, {782, -1192}, {255, 255, 255, 255} }},
{{ {76, 237, 1080}, 0, {989, -1192}, {255, 255, 255, 255} }},
{{ {76, 237, 1080}, 0, {988, -1192}, {255, 255, 255, 255} }},
{{ {-76, 237, 1080}, 0, {1193, -1192}, {255, 255, 255, 255} }},
{{ {-76, 237, 1080}, 0, {1194, -1192}, {255, 255, 255, 255} }},
{{ {-200, 146, 1080}, 0, {1397, -1192}, {255, 255, 255, 255} }},
{{ {-200, 146, 1080}, 0, {1397, -1192}, {255, 255, 255, 255} }},
{{ {-248, 0, 1080}, 0, {1604, -1192}, {255, 255, 255, 255} }},
{{ {-248, 0, 1080}, 0, {1604, -1192}, {255, 255, 255, 255} }},
{{ {-121, -88, 500}, 0, {1740, 0}, {255, 255, 255, 255} }},
{{ {-248, 0, 1080}, 0, {1604, -1192}, {255, 255, 255, 255} }},
{{ {-200, -146, 1080}, 0, {1806, -1192}, {255, 255, 255, 255} }},
{{ {-44, -61, 0}, 0, {1843, 1024}, {255, 255, 255, 0} }},
{{ {-46, -143, 500}, 0, {1945, 0}, {255, 255, 255, 255} }},
{{ {-200, -146, 1080}, 0, {1806, -1192}, {255, 255, 255, 255} }},
{{ {-76, -237, 1080}, 0, {2013, -1192}, {255, 255, 255, 255} }},
{{ {0, -75, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }},
{{ {46, -143, 500}, 0, {2150, 0}, {255, 255, 255, 255} }},
{{ {-76, -237, 1080}, 0, {2012, -1192}, {255, 255, 255, 255} }},
{{ {76, -237, 1080}, 0, {2217, -1192}, {255, 255, 255, 255} }},
{{ {44, -61, 0}, 0, {204, 1024}, {255, 255, 255, 0} }},
{{ {46, -143, 500}, 0, {102, 0}, {255, 255, 255, 255} }},
{{ {121, -88, 500}, 0, {307, 0}, {255, 255, 255, 255} }},
{{ {76, -237, 1080}, 0, {170, -1192}, {255, 255, 255, 255} }},
{{ {200, -146, 1080}, 0, {373, -1192}, {255, 255, 255, 255} }},
{{ {71, -23, 0}, 0, {409, 1024}, {255, 255, 255, 0} }},
{{ {150, 0, 500}, 0, {512, 0}, {255, 255, 255, 255} }},
{{ {200, -146, 1080}, 0, {373, -1192}, {255, 255, 255, 255} }},
{{ {248, 0, 1080}, 0, {580, -1192}, {255, 255, 255, 255} }},
};
extern u64 object_stk2_Tex_008B50[];
extern u64 object_stk2_Tex_008B50[];
Gfx skull_kid_curse_1_override_dl[] = { // 008A38
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsDPPipeSync(),
gsDPSetCombineLERP(TEXEL1, PRIMITIVE, PRIM_LOD_FRAC, TEXEL0, TEXEL1, 0, PRIM_LOD_FRAC, TEXEL0, PRIMITIVE,
ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, SHADE, 0),
gsDPSetPrimColor(0, 0x80, 255, 255, 100, 255),
gsDPSetEnvColor(255, 0, 150, 255),
gsDPSetRenderMode(G_RM_PASS, G_RM_ZB_XLU_SURF2),
gsDPSetTextureLUT(G_TT_NONE),
gsDPLoadTextureBlock(object_stk2_Tex_008B50, G_IM_FMT_I, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, 5, 6, 1, 15),
gsDPLoadMultiBlock(object_stk2_Tex_008B50, 0x0000, 1, G_IM_FMT_I, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, 5, 6, 15, 14),
gsSPDisplayList(0x08000000),
gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(skull_kid_curse_1_override_verts + 0, 32, 0),
gsSP2Triangles(0, 1, 2, 0, 2, 3, 4, 0),
gsSP2Triangles(4, 5, 6, 0, 6, 7, 8, 0),
gsSP2Triangles(8, 9, 10, 0, 10, 11, 12, 0),
gsSP2Triangles(12, 13, 14, 0, 15, 16, 17, 0),
gsSP2Triangles(17, 18, 19, 0, 19, 20, 0, 0),
gsSP2Triangles(0, 20, 1, 0, 1, 20, 21, 0),
gsSP2Triangles(1, 21, 22, 0, 2, 1, 3, 0),
gsSP2Triangles(3, 1, 23, 0, 3, 23, 24, 0),
gsSP2Triangles(4, 3, 5, 0, 5, 3, 25, 0),
gsSP2Triangles(5, 25, 26, 0, 6, 5, 7, 0),
gsSP2Triangles(7, 5, 27, 0, 7, 27, 28, 0),
gsSP2Triangles(8, 7, 9, 0, 9, 7, 29, 0),
gsSP2Triangles(9, 29, 30, 0, 10, 9, 11, 0),
gsSP1Triangle(11, 9, 31, 0),
gsSPVertex(skull_kid_curse_1_override_verts + 32, 20, 0),
gsSP2Triangles(0, 1, 2, 0, 3, 0, 4, 0),
gsSP2Triangles(4, 0, 5, 0, 4, 5, 6, 0),
gsSP2Triangles(7, 4, 8, 0, 8, 4, 9, 0),
gsSP2Triangles(8, 9, 10, 0, 11, 12, 13, 0),
gsSP2Triangles(13, 12, 14, 0, 13, 14, 15, 0),
gsSP2Triangles(16, 13, 17, 0, 17, 13, 18, 0),
gsSP1Triangle(17, 18, 19, 0),
gsSPEndDisplayList(),
};
Vtx skull_kid_curse_2_override_verts[52] = { // 008920
{{ {86, -28, 0}, 0, {409, 1024}, {255, 255, 255, 0} }},
{{ {180, 0, 500}, 0, {512, 0}, {255, 255, 255, 255} }},
{{ {86, 28, 0}, 0, {614, 1024}, {255, 255, 255, 0} }},
{{ {53, -73, 0}, 0, {204, 1024}, {255, 255, 255, 0} }},
{{ {146, -106, 500}, 0, {307, 0}, {255, 255, 255, 255} }},
{{ {0, -90, 0}, 0, {0, 1024}, {255, 255, 255, 0} }},
{{ {56, -171, 500}, 0, {102, 0}, {255, 255, 255, 255} }},
{{ {-53, -73, 0}, 0, {1843, 1024}, {255, 255, 255, 0} }},
{{ {-56, -171, 500}, 0, {1945, 0}, {255, 255, 255, 255} }},
{{ {0, -90, 0}, 0, {2048, 1024}, {255, 255, 255, 0} }},
{{ {-86, -28, 0}, 0, {1638, 1024}, {255, 255, 255, 0} }},
{{ {-146, -106, 500}, 0, {1740, 0}, {255, 255, 255, 255} }},
{{ {-86, 28, 0}, 0, {1433, 1024}, {255, 255, 255, 0} }},
{{ {-180, 0, 500}, 0, {1536, 0}, {255, 255, 255, 255} }},
{{ {-53, 73, 0}, 0, {1228, 1024}, {255, 255, 255, 0} }},
{{ {-146, 106, 500}, 0, {1331, 0}, {255, 255, 255, 255} }},
{{ {0, 90, 0}, 0, {1024, 1024}, {255, 255, 255, 0} }},
{{ {-56, 171, 500}, 0, {1126, 0}, {255, 255, 255, 255} }},
{{ {53, 73, 0}, 0, {819, 1024}, {255, 255, 255, 0} }},
{{ {56, 171, 500}, 0, {921, 0}, {255, 255, 255, 255} }},
{{ {146, 106, 500}, 0, {716, 0}, {255, 255, 255, 255} }},
{{ {218, -159, 1080}, 0, {359, -1185}, {255, 255, 255, 255} }},
{{ {269, 0, 1080}, 0, {562, -1185}, {255, 255, 255, 255} }},
{{ {84, -256, 1080}, 0, {152, -1185}, {255, 255, 255, 255} }},
{{ {218, -159, 1080}, 0, {359, -1185}, {255, 255, 255, 255} }},
{{ {56, -171, 500}, 0, {2150, 0}, {255, 255, 255, 255} }},
{{ {-84, -256, 1080}, 0, {1996, -1185}, {255, 255, 255, 255} }},
{{ {84, -256, 1080}, 0, {2201, -1185}, {255, 255, 255, 255} }},
{{ {-218, -159, 1080}, 0, {1792, -1185}, {255, 255, 255, 255} }},
{{ {-84, -256, 1080}, 0, {1995, -1185}, {255, 255, 255, 255} }},
{{ {-269, 0, 1080}, 0, {1586, -1185}, {255, 255, 255, 255} }},
{{ {-218, -159, 1080}, 0, {1791, -1185}, {255, 255, 255, 255} }},
{{ {-180, 0, 500}, 0, {1536, 0}, {255, 255, 255, 255} }},
{{ {-146, 106, 500}, 0, {1331, 0}, {255, 255, 255, 255} }},
{{ {-218, 159, 1080}, 0, {1383, -1185}, {255, 255, 255, 255} }},
{{ {-269, 0, 1080}, 0, {1586, -1185}, {255, 255, 255, 255} }},
{{ {-53, 73, 0}, 0, {1228, 1024}, {255, 255, 255, 0} }},
{{ {-56, 171, 500}, 0, {1126, 0}, {255, 255, 255, 255} }},
{{ {-84, 256, 1080}, 0, {1176, -1185}, {255, 255, 255, 255} }},
{{ {-218, 159, 1080}, 0, {1383, -1185}, {255, 255, 255, 255} }},
{{ {0, 90, 0}, 0, {1024, 1024}, {255, 255, 255, 0} }},
{{ {56, 171, 500}, 0, {921, 0}, {255, 255, 255, 255} }},
{{ {84, 256, 1080}, 0, {972, -1185}, {255, 255, 255, 255} }},
{{ {-84, 256, 1080}, 0, {1177, -1185}, {255, 255, 255, 255} }},
{{ {53, 73, 0}, 0, {819, 1024}, {255, 255, 255, 0} }},
{{ {146, 106, 500}, 0, {716, 0}, {255, 255, 255, 255} }},
{{ {218, 159, 1080}, 0, {768, -1185}, {255, 255, 255, 255} }},
{{ {84, 256, 1080}, 0, {971, -1185}, {255, 255, 255, 255} }},
{{ {86, 28, 0}, 0, {614, 1024}, {255, 255, 255, 0} }},
{{ {180, 0, 500}, 0, {512, 0}, {255, 255, 255, 255} }},
{{ {269, 0, 1080}, 0, {562, -1185}, {255, 255, 255, 255} }},
{{ {218, 159, 1080}, 0, {767, -1185}, {255, 255, 255, 255} }},
};
extern u64 object_stk2_Tex_009750[];
extern u64 object_stk2_Tex_009350[];
Gfx skull_kid_curse_2_override_dl[] = { // 008920
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsDPPipeSync(),
gsDPSetCombineLERP(TEXEL1, PRIMITIVE, PRIM_LOD_FRAC, TEXEL0, TEXEL1, 0, PRIM_LOD_FRAC, TEXEL0, PRIMITIVE,
ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, SHADE, 0),
gsDPSetPrimColor(0, 0x80, 0, 0, 255, 255),
gsDPSetEnvColor(0, 220, 0, 255),
gsDPSetRenderMode(G_RM_PASS, G_RM_AA_ZB_XLU_INTER2),
gsDPSetTextureLUT(G_TT_NONE),
gsDPLoadTextureBlock(object_stk2_Tex_009750, G_IM_FMT_I, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_MIRROR | G_TX_WRAP, 5, 6, 15, 14),
gsDPLoadMultiBlock(object_stk2_Tex_009350, 0x0100, 1, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, 5, 5, 15, 1),
gsSPDisplayList(0x09000000),
gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(skull_kid_curse_2_override_verts + 0, 32, 0),
gsSP2Triangles(0, 1, 2, 0, 3, 4, 0, 0),
gsSP2Triangles(5, 6, 3, 0, 7, 8, 9, 0),
gsSP2Triangles(10, 11, 7, 0, 12, 13, 10, 0),
gsSP2Triangles(14, 15, 12, 0, 16, 17, 14, 0),
gsSP2Triangles(18, 19, 16, 0, 2, 20, 18, 0),
gsSP2Triangles(0, 4, 1, 0, 1, 4, 21, 0),
gsSP2Triangles(1, 21, 22, 0, 3, 6, 4, 0),
gsSP2Triangles(4, 6, 23, 0, 4, 23, 24, 0),
gsSP2Triangles(9, 8, 25, 0, 25, 8, 26, 0),
gsSP2Triangles(25, 26, 27, 0, 7, 11, 8, 0),
gsSP2Triangles(8, 11, 28, 0, 8, 28, 29, 0),
gsSP2Triangles(10, 13, 11, 0, 11, 13, 30, 0),
gsSP2Triangles(11, 30, 31, 0, 12, 15, 13, 0),
gsSPVertex(skull_kid_curse_2_override_verts + 32, 20, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 1, 0, 1, 5, 6, 0),
gsSP2Triangles(1, 6, 7, 0, 8, 9, 5, 0),
gsSP2Triangles(5, 9, 10, 0, 5, 10, 11, 0),
gsSP2Triangles(12, 13, 9, 0, 9, 13, 14, 0),
gsSP2Triangles(9, 14, 15, 0, 16, 17, 13, 0),
gsSP2Triangles(13, 17, 18, 0, 13, 18, 19, 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);
}
extern AnimatedMaterial object_stk2_Matanimheader_009F60[];
// @recomp Patch the Skull Kid curse effect as well, which works similarly to the ocarina effects.
// In this case, the patch also includes effect transform tagging patches.
void EffStk_Draw(Actor* thisx, PlayState* play) {
EffStk* this = (EffStk*)thisx;
s32 pad;
Camera* activeCam = GET_ACTIVE_CAM(play);
Vec3f eye = activeCam->eye;
Vec3f quakeOffset;
quakeOffset = Camera_GetQuakeOffset(activeCam);
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.2f, 0.2f, 0.2f, MTXMODE_APPLY);
Matrix_ReplaceRotation(&play->billboardMtxF);
Matrix_Translate(0.0f, 0.0f, this->unk148, MTXMODE_APPLY);
Mtx* mtx = Matrix_NewMtx(play->state.gfxCtx);
// @recomp Tag the transform. Do not allow edits as this will get edited by the billboard detection and we'll want to skip position during a camera cut too.
if (camera_was_skipped()) {
gEXMatrixGroupDecomposedSkipPosRot(POLY_XLU_DISP++, actor_transform_id(thisx), G_EX_PUSH, G_MTX_MODELVIEW, G_EX_EDIT_NONE);
}
else {
gEXMatrixGroupDecomposedNormal(POLY_XLU_DISP++, actor_transform_id(thisx), G_EX_PUSH, G_MTX_MODELVIEW, G_EX_EDIT_NONE);
}
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
AnimatedMat_DrawAlphaStep(play, Lib_SegmentedToVirtual(object_stk2_Matanimheader_009F60), 1.0f, this->unk144);
gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE);
gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE);
// @recomp Use the new DLs instead of the originals.
gSPDisplayList(POLY_XLU_DISP++, skull_kid_curse_2_override_dl);
gSPDisplayList(POLY_XLU_DISP++, skull_kid_curse_1_override_dl);
// @recomp Pop the transform tag.
gEXPopMatrixGroup(POLY_XLU_DISP++, G_MTX_MODELVIEW);
CLOSE_DISPS(play->state.gfxCtx);
}