From c78f885a696158250e0376794e4ee4290ea00e7d Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Tue, 7 Nov 2023 13:06:46 -0600 Subject: [PATCH] Added wip dlist loading --- CMakeLists.txt | 4 +- include/sm64.h | 8 + levels/intro/geo.c | 2 +- levels/intro/header.h | 2 - levels/intro/leveldata.c | 754 +------------------------------------ libultraship | 2 +- src/engine/geo_layout.c | 10 +- src/game/segment7.h | 2 - src/menu/intro_geo.c | 7 +- src/port/Engine.cpp | 15 + src/port/Engine.h | 1 + src/port/GBIMiddleware.cpp | 46 +++ 12 files changed, 90 insertions(+), 763 deletions(-) create mode 100644 src/port/GBIMiddleware.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index d59503a8..3527f9e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,9 +50,9 @@ set(USE_NETWORKING ON) # Add compile definitions for the target add_compile_definitions( VERSION_US=1 - F3DEX_GBI_2=1 - GBI_FLOATS=1 ENABLE_RUMBLE=1 + F3D_OLD=1 + GBI_FLOATS=1 _LANGUAGE_C _USE_MATH_DEFINES CIMGUI_DEFINE_ENUMS_AND_STRUCTS diff --git a/include/sm64.h b/include/sm64.h index b8f9be50..2ef6c697 100644 --- a/include/sm64.h +++ b/include/sm64.h @@ -515,6 +515,14 @@ extern void patch_interpolated_paintings(void); extern void patch_interpolated_bubble_particles(void); extern void patch_interpolated_snow_particles(void); +// LUS + +void gSPSegmentLoadRes(void* value, int segNum, uintptr_t target); +void gSPDisplayList(Gfx* pkt, Gfx* dl); +void gSPDisplayListOffset(Gfx* pkt, Gfx* dl, int offset); +void gSPVertex(Gfx* pkt, uintptr_t v, int n, int v0); +void gSPInvalidateTexCache(Gfx* pkt, uintptr_t texAddr); + #ifndef TRUE #define TRUE 1 #endif diff --git a/levels/intro/geo.c b/levels/intro/geo.c index 7dddabdf..d64e15bb 100644 --- a/levels/intro/geo.c +++ b/levels/intro/geo.c @@ -38,7 +38,7 @@ const GeoLayout intro_geo_0002D0[] = { GEO_CLOSE_NODE(), GEO_ZBUFFER(0), GEO_OPEN_NODE(), - GEO_ASM(0, geo_intro_tm_copyright), +// GEO_ASM(0, geo_intro_tm_copyright), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_END(), diff --git a/levels/intro/header.h b/levels/intro/header.h index 99277e86..1bd79747 100644 --- a/levels/intro/header.h +++ b/levels/intro/header.h @@ -10,8 +10,6 @@ extern const GeoLayout intro_geo_mario_head_dizzy[]; extern const GeoLayout intro_geo_000414[]; // leveldata -extern const Gfx intro_seg7_dl_0700B3A0[]; -extern const Gfx intro_seg7_dl_0700C6A0[]; extern const f32 intro_seg7_table_0700C790[]; extern const f32 intro_seg7_table_0700C880[]; diff --git a/levels/intro/leveldata.c b/levels/intro/leveldata.c index 64f20aab..26b70315 100644 --- a/levels/intro/leveldata.c +++ b/levels/intro/leveldata.c @@ -2582,736 +2582,11 @@ ALIGNED8 static const Texture intro_seg7_texture_07007EA0[] = "__OTR__levels/int // 0x070086A0 - 0x070086A2 ALIGNED8 static const Texture intro_seg7_texture_070086A0[] = "__OTR__levels/intro/1"; -// 0x07008EA0 - 0x07009E38 -static const Gfx intro_seg7_dl_07008EA0[] = { - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, intro_seg7_texture_070086A0), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)), - gsSPVertex(intro_seg7_vertex_07000000, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 7, 0x0, 5, 2, 3, 0x0), - gsSP2Triangles( 3, 7, 4, 0x0, 2, 1, 3, 0x0), - gsSP2Triangles( 7, 8, 4, 0x0, 9, 10, 11, 0x0), - gsSP2Triangles( 9, 12, 10, 0x0, 13, 14, 0, 0x0), - gsSP2Triangles(15, 13, 0, 0x0, 0, 2, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07000100, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 7, 4, 6, 0x0), - gsSP2Triangles( 8, 9, 4, 0x0, 4, 10, 5, 0x0), - gsSP2Triangles( 7, 8, 4, 0x0, 11, 8, 12, 0x0), - gsSP2Triangles( 8, 11, 13, 0x0, 8, 13, 9, 0x0), - gsSP2Triangles( 8, 14, 12, 0x0, 6, 14, 7, 0x0), - gsSP1Triangle( 6, 12, 14, 0x0), - gsSPVertex(intro_seg7_vertex_070001F0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 3, 5, 0x0, 3, 7, 4, 0x0), - gsSP2Triangles( 3, 8, 7, 0x0, 0, 2, 6, 0x0), - gsSP2Triangles( 2, 9, 6, 0x0, 6, 5, 0, 0x0), - gsSP2Triangles( 2, 10, 11, 0x0, 2, 12, 10, 0x0), - gsSP2Triangles( 2, 11, 9, 0x0, 13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_070002F0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 0, 0x0), - gsSP2Triangles( 0, 2, 3, 0x0, 0, 5, 1, 0x0), - gsSP2Triangles( 3, 6, 7, 0x0, 3, 8, 6, 0x0), - gsSP2Triangles( 3, 7, 4, 0x0, 3, 9, 8, 0x0), - gsSP2Triangles( 7, 10, 11, 0x0, 7, 11, 4, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_070003E0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 4, 2, 5, 0x0, 2, 6, 5, 0x0), - gsSP2Triangles( 5, 7, 4, 0x0, 5, 8, 9, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 13, 10, 12, 0x0), - gsSP2Triangles(12, 11, 14, 0x0, 12, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_070004E0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 2, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 8, 11, 9, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_070005D0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 2, 0x0), - gsSP2Triangles( 4, 1, 0, 0x0, 5, 6, 7, 0x0), - gsSP2Triangles( 5, 8, 6, 0x0, 9, 10, 11, 0x0), - gsSP2Triangles(12, 13, 14, 0x0, 12, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_070006D0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 2, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_070007B0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 7, 8, 4, 0x0), - gsSP2Triangles( 8, 5, 4, 0x0, 9, 10, 11, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_070008A0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 2, 1, 3, 0x0), - gsSP2Triangles( 0, 4, 1, 0x0, 5, 6, 7, 0x0), - gsSP2Triangles( 5, 8, 6, 0x0, 9, 8, 5, 0x0), - gsSP2Triangles( 9, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07000980, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 1, 0, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 5, 7, 6, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 8, 11, 9, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07000A70, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 5, 4, 6, 0x0, 3, 7, 4, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 11, 8, 10, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07000B60, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07000C40, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 0, 2, 0x0), - gsSP2Triangles( 2, 1, 4, 0x0, 2, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 9, 6, 8, 0x0), - gsSP2Triangles( 8, 10, 11, 0x0, 8, 7, 10, 0x0), - gsSP2Triangles(12, 13, 6, 0x0, 12, 6, 9, 0x0), - gsSPVertex(intro_seg7_vertex_07000D20, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 6, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles(10, 7, 9, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07000E10, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 8, 9, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 10, 12, 13, 0x0), - gsSP1Triangle( 1, 14, 2, 0x0), - gsSPVertex(intro_seg7_vertex_07000F00, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 6, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 14, 12, 0x0), - gsSPVertex(intro_seg7_vertex_07000FF0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 7, 9, 8, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 11, 13, 12, 0x0), - gsSP1Triangle(14, 0, 2, 0x0), - gsSPVertex(intro_seg7_vertex_070010E0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_070011D0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 9, 7, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 10, 12, 13, 0x0), - gsSP1Triangle( 0, 14, 1, 0x0), - gsSPVertex(intro_seg7_vertex_070012C0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSP2Triangles(14, 11, 13, 0x0, 1, 15, 2, 0x0), - gsSPVertex(intro_seg7_vertex_070013C0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_070014A0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 5, 7, 6, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 8, 11, 9, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07001590, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07001670, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 10, 11, 8, 0x0), - gsSP2Triangles(12, 13, 9, 0x0, 12, 14, 13, 0x0), - gsSP1Triangle(15, 14, 12, 0x0), - gsSPVertex(intro_seg7_vertex_07001770, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 0, 2, 4, 0x0, 5, 2, 1, 0x0), - gsSP2Triangles( 5, 6, 7, 0x0, 5, 7, 8, 0x0), - gsSP2Triangles( 5, 8, 2, 0x0, 5, 9, 6, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 10, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07001850, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07001950, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 6, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07001A30, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 6, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07001B10, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 6, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07001C00, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 9, 7, 0x0), - gsSP2Triangles( 0, 10, 1, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07001CE0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 0, 2, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 7, 8, 0x0), - gsSP2Triangles( 8, 9, 4, 0x0, 4, 6, 10, 0x0), - gsSP2Triangles( 4, 10, 7, 0x0, 8, 11, 9, 0x0), - gsSP2Triangles(11, 12, 9, 0x0, 11, 13, 12, 0x0), - gsSP1Triangle(11, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07001DE0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 6, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07001ED0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSP2Triangles(12, 14, 13, 0x0, 0, 15, 1, 0x0), - gsSPVertex(intro_seg7_vertex_07001FD0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_070020B0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 8, 10, 11, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_070021A0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 8, 10, 9, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07002280, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 6, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 8, 10, 9, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07002370, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 9, 6, 8, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 11, 13, 12, 0x0), - gsSP1Triangle( 0, 2, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07002460, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 8, 12, 0x0), - gsSP2Triangles(11, 9, 8, 0x0, 9, 13, 14, 0x0), - gsSP2Triangles(11, 13, 9, 0x0, 4, 9, 14, 0x0), - gsSP1Triangle( 4, 15, 9, 0x0), - gsSPVertex(intro_seg7_vertex_07002560, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 2, 3, 0, 0x0), - gsSP2Triangles( 0, 4, 1, 0x0, 5, 6, 3, 0x0), - gsSP2Triangles( 5, 7, 8, 0x0, 9, 10, 11, 0x0), - gsSP2Triangles( 9, 12, 10, 0x0, 9, 13, 12, 0x0), - gsSP2Triangles( 9, 14, 15, 0x0, 9, 15, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07002660, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 0, 2, 4, 0x0, 0, 5, 3, 0x0), - gsSP2Triangles( 0, 6, 7, 0x0, 0, 8, 5, 0x0), - gsSP2Triangles( 0, 7, 8, 0x0, 9, 10, 11, 0x0), - gsSP2Triangles(12, 13, 14, 0x0, 12, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07002760, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 7, 5, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07002840, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP2Triangles( 8, 4, 7, 0x0, 9, 10, 11, 0x0), - gsSP2Triangles(12, 13, 14, 0x0, 12, 15, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07002940, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 7, 5, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 11, 6, 12, 0x0), - gsSP1Triangle(13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07002A40, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07002B40, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 3, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07002C20, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSP2Triangles(14, 13, 15, 0x0, 14, 11, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07002D20, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 4, 0, 2, 0x0, 4, 2, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 8, 9, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 11, 13, 14, 0x0), - gsSP2Triangles(11, 14, 12, 0x0, 13, 15, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07002E20, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 0, 2, 0x0, 6, 2, 7, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 8, 10, 11, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07002F10, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 7, 5, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 8, 10, 11, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07003000, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle( 8, 10, 14, 0x0), - gsSPVertex(intro_seg7_vertex_070030F0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 14, 12, 0x0), - gsSPVertex(intro_seg7_vertex_070031E0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP2Triangles( 5, 8, 6, 0x0, 5, 9, 8, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_070032E0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_070033C0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 10, 11, 8, 0x0), - gsSP2Triangles(12, 3, 6, 0x0, 12, 6, 13, 0x0), - gsSPVertex(intro_seg7_vertex_070034A0, 6, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - gsSP2Triangles( 1, 4, 5, 0x0, 1, 5, 2, 0x0), - gsSPEndDisplayList(), -}; +static const u8 intro_seg7_dl_07008EA0[] = "__OTR__levels/intro/intro_seg7_dl_07008EA0"; -// 0x07009E38 - 0x0700ADC0 -static const Gfx intro_seg7_dl_07009E38[] = { - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, intro_seg7_texture_07007EA0), - gsDPLoadSync(), - gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)), - gsSPVertex(intro_seg7_vertex_07003500, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 2, 3, 4, 0x0), - gsSP2Triangles( 2, 4, 0, 0x0, 5, 3, 2, 0x0), - gsSP2Triangles( 6, 5, 2, 0x0, 2, 1, 7, 0x0), - gsSP2Triangles( 2, 7, 6, 0x0, 0, 8, 1, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 6, 7, 10, 0x0), - gsSP2Triangles(11, 12, 13, 0x0, 11, 14, 12, 0x0), - gsSPVertex(intro_seg7_vertex_070035F0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - gsSP2Triangles( 2, 4, 5, 0x0, 3, 2, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 9, 7, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 10, 13, 11, 0x0), - gsSPVertex(intro_seg7_vertex_070036D0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 0, 0x0), - gsSP2Triangles( 7, 9, 8, 0x0, 10, 11, 7, 0x0), - gsSP2Triangles(12, 9, 7, 0x0, 0, 10, 7, 0x0), - gsSP2Triangles( 0, 8, 1, 0x0, 13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_070037D0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 6, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_070038B0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(12, 14, 13, 0x0), - gsSPVertex(intro_seg7_vertex_070039A0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 8, 9, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 13, 10, 12, 0x0), - gsSP1Triangle( 0, 14, 1, 0x0), - gsSPVertex(intro_seg7_vertex_07003A90, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 6, 5, 0x0, 6, 7, 5, 0x0), - gsSP2Triangles( 6, 8, 7, 0x0, 9, 10, 11, 0x0), - gsSP2Triangles( 9, 12, 10, 0x0, 13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07003B90, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07003C70, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 14, 12, 0x0), - gsSPVertex(intro_seg7_vertex_07003D60, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 8, 9, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 10, 13, 11, 0x0), - gsSP1Triangle( 0, 14, 1, 0x0), - gsSPVertex(intro_seg7_vertex_07003E50, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 6, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07003F40, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 5, 6, 7, 0x0, 8, 5, 7, 0x0), - gsSP2Triangles( 9, 10, 11, 0x0, 10, 12, 11, 0x0), - gsSP1Triangle( 0, 2, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07004020, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 6, 5, 7, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 9, 2, 10, 0x0), - gsSP2Triangles( 9, 10, 11, 0x0, 11, 12, 9, 0x0), - gsSP2Triangles( 0, 2, 9, 0x0, 13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07004120, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 3, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07004200, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 2, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP2Triangles( 7, 8, 4, 0x0, 7, 9, 8, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 10, 13, 11, 0x0), - gsSPVertex(intro_seg7_vertex_070042E0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 2, 11, 0, 0x0), - gsSP2Triangles( 0, 12, 1, 0x0, 13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_070043E0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_070044C0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 6, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles(10, 7, 9, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 14, 12, 0x0), - gsSPVertex(intro_seg7_vertex_070045B0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 9, 7, 0x0), - gsSP2Triangles(10, 2, 11, 0x0, 0, 2, 10, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_070046B0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 2, 0x0), - gsSP2Triangles( 2, 1, 5, 0x0, 2, 5, 3, 0x0), - gsSP2Triangles( 0, 6, 1, 0x0, 3, 7, 4, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 8, 11, 9, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_070047A0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07004880, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 7, 10, 11, 0x0), - gsSP2Triangles(12, 7, 11, 0x0, 13, 8, 7, 0x0), - gsSP1Triangle(13, 14, 8, 0x0), - gsSPVertex(intro_seg7_vertex_07004970, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 5, 6, 7, 0x0, 5, 4, 6, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 9, 11, 10, 0x0), - gsSP2Triangles(12, 1, 0, 0x0, 13, 0, 14, 0x0), - gsSP1Triangle( 0, 2, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07004A60, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 9, 7, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 10, 12, 13, 0x0), - gsSP1Triangle( 0, 2, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07004B50, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 6, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 10, 7, 0x0), - gsSP2Triangles( 7, 9, 12, 0x0, 13, 7, 12, 0x0), - gsSP1Triangle(11, 14, 10, 0x0), - gsSPVertex(intro_seg7_vertex_07004C40, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 9, 7, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 10, 12, 13, 0x0), - gsSP1Triangle( 0, 2, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07004D30, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSP2Triangles(11, 14, 12, 0x0, 0, 15, 1, 0x0), - gsSPVertex(intro_seg7_vertex_07004E30, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 7, 12, 0x0), - gsSP2Triangles(13, 14, 8, 0x0, 13, 8, 7, 0x0), - gsSP1Triangle( 7, 10, 12, 0x0), - gsSPVertex(intro_seg7_vertex_07004F20, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 2, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 14, 12, 0x0), - gsSPVertex(intro_seg7_vertex_07005010, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 0, 2, 10, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(12, 14, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07005100, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 1, 4, 5, 0x0, 2, 1, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 9, 10, 11, 0x0), - gsSP2Triangles( 9, 12, 10, 0x0, 13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07005200, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 4, 0x0), - gsSP2Triangles( 2, 1, 4, 0x0, 2, 4, 5, 0x0), - gsSP2Triangles( 6, 2, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07005300, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07005400, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 3, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_070054E0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 6, 5, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_070055C0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 9, 7, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 10, 12, 13, 0x0), - gsSP1Triangle( 0, 14, 1, 0x0), - gsSPVertex(intro_seg7_vertex_070056B0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 14, 12, 0x0), - gsSPVertex(intro_seg7_vertex_070057A0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 9, 7, 0x0), - gsSP2Triangles( 6, 10, 9, 0x0, 11, 12, 13, 0x0), - gsSP2Triangles(11, 13, 14, 0x0, 0, 2, 15, 0x0), - gsSPVertex(intro_seg7_vertex_070058A0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 1, 0x0), - gsSP2Triangles( 3, 5, 4, 0x0, 3, 6, 5, 0x0), - gsSP2Triangles( 7, 8, 9, 0x0, 7, 10, 8, 0x0), - gsSP2Triangles(11, 12, 13, 0x0, 6, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_070059A0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07005A80, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(14, 15, 11, 0x0), - gsSPVertex(intro_seg7_vertex_07005B80, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 2, 0x0), - gsSP2Triangles( 1, 4, 3, 0x0, 0, 2, 5, 0x0), - gsSP2Triangles( 6, 7, 4, 0x0, 8, 9, 10, 0x0), - gsSP2Triangles( 9, 11, 10, 0x0, 12, 13, 7, 0x0), - gsSPVertex(intro_seg7_vertex_07005C60, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 14, 12, 0x0), - gsSPVertex(intro_seg7_vertex_07005D50, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 5, 7, 8, 0x0), - gsSP2Triangles( 9, 10, 11, 0x0, 9, 12, 10, 0x0), - gsSP1Triangle( 0, 2, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07005E30, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 4, 6, 7, 0x0, 4, 7, 5, 0x0), - gsSP2Triangles( 5, 7, 8, 0x0, 3, 5, 9, 0x0), - gsSP2Triangles( 5, 8, 10, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 14, 12, 0x0), - gsSPVertex(intro_seg7_vertex_07005F20, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 9, 7, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 10, 13, 11, 0x0), - gsSP1Triangle( 0, 2, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07006010, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 8, 10, 9, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 14, 12, 0x0), - gsSPVertex(intro_seg7_vertex_07006100, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 5, 7, 0x0, 8, 6, 9, 0x0), - gsSP2Triangles( 6, 7, 9, 0x0, 9, 7, 10, 0x0), - gsSP2Triangles( 8, 9, 11, 0x0, 9, 10, 12, 0x0), - gsSP1Triangle( 0, 13, 1, 0x0), - gsSPVertex(intro_seg7_vertex_070061E0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 14, 12, 0x0), - gsSPVertex(intro_seg7_vertex_070062D0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 8, 9, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 10, 13, 14, 0x0), - gsSP1Triangle(10, 14, 11, 0x0), - gsSPVertex(intro_seg7_vertex_070063C0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 9, 6, 8, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 10, 13, 11, 0x0), - gsSP1Triangle(12, 11, 14, 0x0), - gsSPVertex(intro_seg7_vertex_070064B0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 4, 0x0, 6, 4, 3, 0x0), - gsSP2Triangles( 8, 9, 7, 0x0, 8, 7, 6, 0x0), - gsSP2Triangles(10, 2, 11, 0x0, 2, 12, 11, 0x0), - gsSP2Triangles( 2, 1, 12, 0x0, 11, 12, 13, 0x0), - gsSP2Triangles(10, 11, 14, 0x0, 11, 13, 15, 0x0), - gsSPVertex(intro_seg7_vertex_070065B0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 3, 6, 7, 0x0), - gsSP2Triangles( 8, 3, 7, 0x0, 9, 10, 11, 0x0), - gsSP2Triangles( 6, 5, 12, 0x0, 6, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07006690, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 2, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 7, 5, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07006770, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07006850, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 8, 10, 11, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07006940, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - gsSP2Triangles( 0, 3, 4, 0x0, 5, 6, 7, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 8, 10, 11, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07006A30, 9, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 2, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 7, 5, 0x0), - gsSP1Triangle( 4, 6, 8, 0x0), - gsSPEndDisplayList(), -}; +static const u8 intro_seg7_dl_07009E38[] = "__OTR__levels/intro/intro_seg7_dl_07009E38"; -// 0x0700ADC0 - 0x0700B3A0 -static const Gfx intro_seg7_dl_0700ADC0[] = { - gsSPVertex(intro_seg7_vertex_07006AC0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles(10, 7, 9, 0x0, 7, 11, 12, 0x0), - gsSP2Triangles( 7, 12, 8, 0x0, 13, 14, 7, 0x0), - gsSP2Triangles(13, 7, 10, 0x0, 9, 8, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07006BC0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 1, 0x0), - gsSP2Triangles( 1, 4, 2, 0x0, 5, 0, 2, 0x0), - gsSP2Triangles( 6, 3, 0, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 6, 0, 10, 0x0, 10, 0, 5, 0x0), - gsSP2Triangles(11, 12, 13, 0x0, 11, 13, 14, 0x0), - gsSP2Triangles(11, 8, 12, 0x0, 8, 15, 12, 0x0), - gsSPVertex(intro_seg7_vertex_07006CC0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 3, 9, 10, 0x0), - gsSP2Triangles(11, 2, 1, 0x0, 11, 1, 12, 0x0), - gsSP2Triangles(13, 14, 8, 0x0, 14, 15, 8, 0x0), - gsSP1Triangle( 7, 13, 8, 0x0), - gsSPVertex(intro_seg7_vertex_07006DC0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles(10, 7, 9, 0x0, 10, 9, 11, 0x0), - gsSP2Triangles(12, 6, 5, 0x0, 12, 13, 6, 0x0), - gsSP1Triangle( 0, 14, 1, 0x0), - gsSPVertex(intro_seg7_vertex_07006EB0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 5, 0x0, 7, 3, 5, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 9, 11, 10, 0x0), - gsSP2Triangles( 0, 2, 12, 0x0, 9, 13, 14, 0x0), - gsSP2Triangles( 9, 14, 11, 0x0, 15, 7, 6, 0x0), - gsSPVertex(intro_seg7_vertex_07006FB0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 2, 6, 5, 0x0), - gsSP2Triangles( 4, 6, 7, 0x0, 7, 8, 4, 0x0), - gsSP2Triangles( 0, 9, 3, 0x0, 10, 11, 12, 0x0), - gsSP1Triangle(13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_070070B0, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 6, 5, 7, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 8, 7, 9, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 4, 11, 5, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_070071A0, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07007280, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0), - gsSP2Triangles( 8, 10, 9, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(11, 14, 12, 0x0), - gsSPVertex(intro_seg7_vertex_07007370, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 6, 8, 9, 0x0), - gsSP2Triangles(10, 11, 12, 0x0, 13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07007470, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 2, 1, 3, 0x0), - gsSP2Triangles( 1, 4, 3, 0x0, 0, 5, 1, 0x0), - gsSP2Triangles( 3, 4, 6, 0x0, 3, 6, 7, 0x0), - gsSP2Triangles( 8, 5, 0, 0x0, 8, 9, 5, 0x0), - gsSP2Triangles( 7, 6, 10, 0x0, 7, 10, 11, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07007560, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 2, 1, 3, 0x0), - gsSP2Triangles( 2, 3, 4, 0x0, 5, 6, 7, 0x0), - gsSP2Triangles( 5, 7, 8, 0x0, 9, 10, 11, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07007650, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 2, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 8, 11, 9, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07007740, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 9, 10, 11, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07007830, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 0, 2, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 7, 5, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 8, 10, 11, 0x0), - gsSP1Triangle(12, 13, 14, 0x0), - gsSPVertex(intro_seg7_vertex_07007920, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 8, 7, 9, 0x0), - gsSP2Triangles( 7, 10, 9, 0x0, 11, 6, 8, 0x0), - gsSP2Triangles(12, 6, 11, 0x0, 13, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07007A20, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 1, 0, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 5, 7, 6, 0x0), - gsSP2Triangles( 1, 8, 2, 0x0, 9, 10, 11, 0x0), - gsSP2Triangles(12, 13, 14, 0x0, 12, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07007B20, 15, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSP1Triangle(14, 12, 11, 0x0), - gsSPVertex(intro_seg7_vertex_07007C10, 14, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 3, 0, 2, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 6, 5, 7, 0x0), - gsSP2Triangles( 8, 9, 10, 0x0, 11, 12, 13, 0x0), - gsSPVertex(intro_seg7_vertex_07007CF0, 16, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 2, 0x0), - gsSP2Triangles( 4, 1, 0, 0x0, 4, 5, 1, 0x0), - gsSP2Triangles( 6, 7, 8, 0x0, 9, 10, 11, 0x0), - gsSP2Triangles(12, 13, 14, 0x0, 12, 14, 15, 0x0), - gsSPVertex(intro_seg7_vertex_07007DF0, 11, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), - gsSP2Triangles( 4, 5, 6, 0x0, 4, 6, 7, 0x0), - gsSP1Triangle( 8, 9, 10, 0x0), - gsSPEndDisplayList(), -}; - -// 0x0700B3A0 - 0x0700B420 -const Gfx intro_seg7_dl_0700B3A0[] = { - gsDPPipeSync(), - gsDPSetCombineMode(G_CC_MODULATERGB, G_CC_MODULATERGB), - gsSPClearGeometryMode(G_LIGHTING), - gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPTileSync(), - gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, 5, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, 5, G_TX_NOLOD), - gsDPSetTileSize(0, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (32 - 1) << G_TEXTURE_IMAGE_FRAC), - gsSPDisplayList(intro_seg7_dl_07008EA0), - gsSPDisplayList(intro_seg7_dl_07009E38), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPPipeSync(), - gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), - gsSPDisplayList(intro_seg7_dl_0700ADC0), - gsSPSetGeometryMode(G_LIGHTING), - gsSPEndDisplayList(), -}; +static const u8 intro_seg7_dl_0700ADC0[] = "__OTR__levels/intro/intro_seg7_dl_0700ADC0"; // 0x0700B420 - 0x0700B460 static const Vtx intro_seg7_vertex_0700B420[] = { @@ -3335,29 +2610,6 @@ ALIGNED8 static const Texture intro_seg7_texture_0700B4A0[] = "__OTR__levels/int // 0x0700C4A0 - 0x0700D4A0 ALIGNED8 static const Texture intro_seg7_texture_0700C4A0[] = "__OTR__levels/intro/3_tm"; -// 0x0700C6A0 - 0x0700C790 -const Gfx intro_seg7_dl_0700C6A0[] = { - gsDPPipeSync(), - gsDPSetCombineMode(G_CC_DECALFADE, G_CC_DECALFADE), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - - gsDPLoadTextureBlock(intro_seg7_texture_0700B4A0, G_IM_FMT_RGBA, G_IM_SIZ_16b, 128, 16, 0, G_TX_CLAMP, G_TX_CLAMP, 7, 4, G_TX_NOLOD, G_TX_NOLOD), - gsSPVertex(intro_seg7_vertex_0700B420, 4, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - - gsDPLoadTextureBlock(intro_seg7_texture_0700C4A0, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 16, 0, G_TX_CLAMP, G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD), - gsSPVertex(intro_seg7_vertex_0700B460, 4, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPPipeSync(), - gsSPSetGeometryMode(G_LIGHTING), - gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), - gsDPSetEnvColor(255, 255, 255, 255), - gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2), - gsSPEndDisplayList(), -}; - // 0x0700C790 const f32 intro_seg7_table_0700C790[] = { 0.016000f, 0.052000f, 0.002500f, 0.148300f, diff --git a/libultraship b/libultraship index e75054e3..2933b629 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit e75054e386c9d8bc2ebb18c7ca303b8d287be907 +Subproject commit 2933b629dd1fb0c69d51702fa9d2c21c5c4a760b diff --git a/src/engine/geo_layout.c b/src/engine/geo_layout.c index 693ac5ec..10e09056 100644 --- a/src/engine/geo_layout.c +++ b/src/engine/geo_layout.c @@ -5,6 +5,7 @@ #include "math_util.h" #include "game/memory.h" #include "graph_node.h" +#include "port/Engine.h" typedef void (*GeoLayoutCommandProc)(void); @@ -780,7 +781,11 @@ struct GraphNode *process_geo_layout(struct AllocOnlyPool *pool, void *segptr) { gGeoLayoutStackIndex = 2; gGeoLayoutReturnIndex = 2; // stack index is often copied here? - gGeoLayoutCommand = segmented_to_virtual(segptr); + if(GameEngine_OTRSigCheck(segptr) == 1){ + gGeoLayoutCommand = ResourceGetDataByName(segptr); + } else { + gGeoLayoutCommand = segmented_to_virtual(segptr); + } gGraphNodePool = pool; @@ -788,7 +793,8 @@ struct GraphNode *process_geo_layout(struct AllocOnlyPool *pool, void *segptr) { gGeoLayoutStack[1] = 0; while (gGeoLayoutCommand != NULL) { - GeoLayoutJumpTable[gGeoLayoutCommand[0x00]](); + uint8_t cmdId = gGeoLayoutCommand[0x00]; + GeoLayoutJumpTable[cmdId](); } return gCurRootGraphNode; diff --git a/src/game/segment7.h b/src/game/segment7.h index 4416dc09..1e316dea 100644 --- a/src/game/segment7.h +++ b/src/game/segment7.h @@ -25,8 +25,6 @@ extern const u8 eu_course_strings_de_table[]; #endif // from intro_segment7 -extern Gfx *intro_seg7_dl_0700B3A0; -extern Gfx *intro_seg7_dl_0700C6A0; extern f32 intro_seg7_table_0700C790[]; extern f32 intro_seg7_table_0700C880[]; diff --git a/src/menu/intro_geo.c b/src/menu/intro_geo.c index 55aacdb9..ec149440 100644 --- a/src/menu/intro_geo.c +++ b/src/menu/intro_geo.c @@ -50,6 +50,9 @@ void patch_title_screen_scales(void) { } } +static const u8 intro_seg7_dl_0700B3A0[] = "__OTR__levels/intro/intro_seg7_dl_0700B3A0"; +static const u8 intro_seg7_dl_0700C6A0[] = "__OTR__levels/intro/intro_seg7_dl_0700C6A0"; + /** * Geo callback to render the "Super Mario 64" logo on the title screen */ @@ -104,7 +107,7 @@ Gfx *geo_intro_super_mario_64_logo(s32 state, struct GraphNode *node, UNUSED voi sIntroScalePos = dlIter; gSPMatrix(dlIter++, scaleMat, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_PUSH); - gSPDisplayList(dlIter++, &intro_seg7_dl_0700B3A0); // draw model + gSPDisplayList(dlIter++, intro_seg7_dl_0700B3A0); // draw model gSPPopMatrix(dlIter++, G_MTX_MODELVIEW); gSPEndDisplayList(dlIter); @@ -138,7 +141,7 @@ Gfx *geo_intro_tm_copyright(s32 state, struct GraphNode *node, UNUSED void *cont gDPSetRenderMode(dlIter++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2); break; } - gSPDisplayList(dlIter++, &intro_seg7_dl_0700C6A0); // draw model + gSPDisplayList(dlIter++, intro_seg7_dl_0700C6A0); // draw model gSPEndDisplayList(dlIter); // Once the "Super Mario 64" logo has just about zoomed fully, fade in the "TM" and copyright text diff --git a/src/port/Engine.cpp b/src/port/Engine.cpp index c73abf96..329787dd 100644 --- a/src/port/Engine.cpp +++ b/src/port/Engine.cpp @@ -13,6 +13,7 @@ #include "port/Enhancements/mods.h" #include #include +#include #include @@ -326,4 +327,18 @@ extern "C" uint8_t* GameEngine_LoadTranslation(const char* key) { assert(engine->dictionary->contains(key)); return engine->dictionary->at(key).data(); +} + +extern "C" int GameEngine_OTRSigCheck(const char* data) { + auto i = (uintptr_t)(data); + if ((i & 1) == 1) + return 0; + + if (i != 0) { + if (data[0] == '_' && data[1] == '_' && data[2] == 'O' && data[3] == 'T' && data[4] == 'R' && + data[5] == '_' && data[6] == '_') + return 1; + } + + return 0; } \ No newline at end of file diff --git a/src/port/Engine.h b/src/port/Engine.h index 303e268b..9f73147d 100644 --- a/src/port/Engine.h +++ b/src/port/Engine.h @@ -59,4 +59,5 @@ uint8_t* GameEngine_LoadActName(uint32_t actId); uint8_t* GameEngine_LoadLevelName(uint32_t levelId); struct DialogEntry* GameEngine_LoadDialog(uint32_t dialogId); uint8_t* GameEngine_LoadTranslation(const char* key); +int GameEngine_OTRSigCheck(char* imgData); #endif \ No newline at end of file diff --git a/src/port/GBIMiddleware.cpp b/src/port/GBIMiddleware.cpp new file mode 100644 index 00000000..4844a988 --- /dev/null +++ b/src/port/GBIMiddleware.cpp @@ -0,0 +1,46 @@ +#include + +#include "Engine.h" +#include "DisplayList.h" +#include "Array.h" + +extern "C" int GameEngine_OTRSigCheck(const char* data); + +extern "C" void gSPDisplayList(Gfx* pkt, Gfx* dl) { + char* imgData = (char*)dl; + + if (GameEngine_OTRSigCheck(imgData) == 1) { + auto resource = LUS::Context::GetInstance()->GetResourceManager()->LoadResource(imgData); + auto res = std::static_pointer_cast(resource); + dl = (Gfx*)&res->Instructions[0]; + } + + __gSPDisplayList(pkt, dl); +} + +extern "C" void gSPVertex(Gfx* pkt, uintptr_t v, int n, int v0) { + + if (GameEngine_OTRSigCheck((char*)v) == 1) { + v = (uintptr_t) ResourceGetDataByName((char *) v); + } + + __gSPVertex(pkt, v, n, v0); +} + +extern "C" void gSPInvalidateTexCache(Gfx* pkt, uintptr_t texAddr) { + char* imgData = (char*)texAddr; + + if (texAddr != 0 && GameEngine_OTRSigCheck(imgData)) { + auto res = LUS::Context::GetInstance()->GetResourceManager()->LoadResource(imgData); + + if (res->GetInitData()->Type == LUS::ResourceType::DisplayList) + texAddr = (uintptr_t)&((std::static_pointer_cast(res))->Instructions[0]); + else if (res->GetInitData()->Type == LUS::ResourceType::Array) + texAddr = (uintptr_t)(std::static_pointer_cast(res))->Vertices.data(); + else { + texAddr = (uintptr_t) res->GetRawPointer(); + } + } +// OTRTODO: +// __gSPInvalidateTexCache(pkt, texAddr); +}