summaryrefslogtreecommitdiff
path: root/courses
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2024-10-05 15:31:31 -0600
committerGitHub <noreply@github.com>2024-10-05 15:31:31 -0600
commit75297759ee906b103ff9714dad17e683f1757b7f (patch)
tree2a81aff6c8e1d2be2806f34f8850c74499980479 /courses
parent447fd8b29057e8dcc223507e6b7d6bc448c6f7d8 (diff)
[modding] Course Mod Support (#104)
* Course Manager * Course * Test * Render * That escalated quickly * update * properties * Properties * test * Fix compile * Add World * skycolours * Skybox Colours done * Cleanup * test * Game runs again * update * Game run again * Cup Works * continue * Add Courses * clouds * changes * fixes * update * Fix compile * update * A few changes * More Updates * More refactors * Fixes * Fix ai behaviour * Changes * Fix courses * test course test not working * CUSTOM * TestCourse works kinda * fixes * test course works * cleanup --------- Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com>
Diffstat (limited to 'courses')
-rw-r--r--courses/test_course/data.c75
-rw-r--r--courses/test_course/model.c389
-rw-r--r--courses/test_course/vtx.c16
3 files changed, 480 insertions, 0 deletions
diff --git a/courses/test_course/data.c b/courses/test_course/data.c
new file mode 100644
index 000000000..a39c05dc5
--- /dev/null
+++ b/courses/test_course/data.c
@@ -0,0 +1,75 @@
+#include "waypoints.h"
+#include "course.h"
+#include <libultra/gbi.h>
+
+extern Gfx mario_Plane_001_mesh[];
+
+Gfx test_course_data_dl[] = {
+ gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA),
+ gsDPSetRenderMode(G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2),
+ gsSPClearGeometryMode(G_CULL_BACK),
+ gsSPDisplayList(mario_Plane_001_mesh),
+};
+
+TrackWaypoint test_course_path[] = {
+ { 0, 0, 0, 0},
+ { 0, 0, -100, 1},
+ { 0, 0, -200, 1},
+ { 0, 0, -300, 1},
+ { 0, 0, -400, 1},
+ { 0, 0, -500, 1},
+ { 0, 0, -600, 1},
+ { 0, 0, -700, 1},
+ { 0, 0, -800, 1},
+ { 0, 0, -900, 1},
+ { 0, 0, -1000, 1},
+ { 0, 0, -1096, 1}, // Main point 1
+ { 100, 0, -1090, 2},
+ { 200, 0, -1085, 2},
+ { 300, 0, -1080, 2},
+ { 400, 0, -1075, 2},
+ { 500, 0, -1072, 2}, // Curve begins to smooth here
+ { 600, 0, -1068, 2},
+ { 700, 0, -1065, 2},
+ { 800, 0, -1063, 2},
+ { 900, 0, -1061, 2},
+ { 984, 0, -1060, 2}, // Main point 2
+ { 990, 0, -900, 3},
+ { 995, 0, -800, 3},
+ { 997, 0, -700, 3},
+ { 998, 0, -600, 3},
+ { 999, 0, -500, 3},
+ { 999, 0, -400, 3},
+ { 999, 0, -300, 3},
+ { 999, 0, -200, 3},
+ { 999, 0, -100, 3},
+ { 999, 0, 0,3},
+ { 999, 0, 100, 3},
+ { 999, 0, 200, 3},
+ { 999, 0, 300, 3},
+ { 999, 0, 400, 3},
+ { 999, 0, 500, 3},
+ { 999, 0, 600, 3},
+ { 999, 0, 700, 3},
+ { 999, 0, 800, 3},
+ { 999, 0, 900, 3},
+ { 999, 0, 940, 3}, // Main point 3
+ { 900, 0, 945, 4},
+ { 800, 0, 945, 4},
+ { 700, 0, 947, 4},
+ { 600, 0, 948, 4},
+ { 500, 0, 949, 4},
+ { 400, 0, 949, 4},
+ { 300, 0, 949, 4},
+ { 200, 0, 950, 4},
+ { 100, 0, 950, 4},
+ { 0, 0, 950, 1}, // Main point 4
+
+ // End of path
+ { -32768, -32768, -32768, 0 } // Terminator
+};
+
+TrackSections test_course_addr[] = {
+ { mario_Plane_001_mesh, 255, 255, 0x0000 },
+ { 0x00000000, 0, 0, 0x00000 },
+};
diff --git a/courses/test_course/model.c b/courses/test_course/model.c
new file mode 100644
index 000000000..61405fff1
--- /dev/null
+++ b/courses/test_course/model.c
@@ -0,0 +1,389 @@
+#include <libultraship.h>
+#include <libultra/gbi.h>
+#include "assets/other_textures.h"
+
+Lights1 mario_f3dlite_material_009_lights = gdSPDefLights1(
+ 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x49, 0x49, 0x49);
+
+Lights1 mario_f3dlite_material_lights = gdSPDefLights1(
+ 0x7F, 0x7F, 0x7F,
+ 0xFF, 0xFF, 0xFF, 0x49, 0x49, 0x49);
+
+Vtx mario_Plane_001_mesh_vtx_cull[8] = {
+ {{ {-431, 0, -1544}, 0, {0, 0}, {0, 0, 0, 0} }},
+ {{ {-431, 0, 1394}, 0, {0, 0}, {0, 0, 0, 0} }},
+ {{ {-431, 9, 1394}, 0, {0, 0}, {0, 0, 0, 0} }},
+ {{ {-431, 9, -1544}, 0, {0, 0}, {0, 0, 0, 0} }},
+ {{ {1522, 0, -1544}, 0, {0, 0}, {0, 0, 0, 0} }},
+ {{ {1522, 0, 1394}, 0, {0, 0}, {0, 0, 0, 0} }},
+ {{ {1522, 9, 1394}, 0, {0, 0}, {0, 0, 0, 0} }},
+ {{ {1522, 9, -1544}, 0, {0, 0}, {0, 0, 0, 0} }},
+};
+
+Vtx mario_Plane_001_mesh_vtx_0[114] = {
+ {{ {984, 0, -1177}, 0, {2037, -25}, {0, 127, 0, 255} }},
+ {{ {925, 0, -1018}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {1011, 0, -1164}, 0, {2025, 1009}, {0, 127, 0, 255} }},
+ {{ {961, 0, -1184}, 0, {2035, -23}, {0, 127, 0, 255} }},
+ {{ {984, 0, -1177}, 0, {2025, 999}, {0, 127, 0, 255} }},
+ {{ {961, 0, -1184}, 0, {2036, 1008}, {0, 127, 0, 255} }},
+ {{ {925, 0, -1188}, 0, {2031, -20}, {0, 127, 0, 255} }},
+ {{ {925, 0, -1018}, 0, {-20, -16}, {0, 127, 0, 255} }},
+ {{ {-85, 0, 271}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {85, 0, 271}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {85, 0, -716}, 0, {2032, -16}, {0, 127, 0, 255} }},
+ {{ {-85, 0, -716}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {-85, 0, -716}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {85, 0, -716}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {85, 0, -1018}, 0, {2032, -16}, {0, 127, 0, 255} }},
+ {{ {-85, 0, -1107}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {-70, 0, -1146}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {-51, 0, -1173}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {85, 0, -1018}, 0, {2032, -16}, {0, 127, 0, 255} }},
+ {{ {-26, 0, -1192}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {2, 0, -1205}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {30, 0, -1211}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {60, 0, -1214}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {85, 0, -1217}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {124, 0, -1211}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {156, 0, -1188}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {925, 0, -1018}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {925, 0, -1188}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {156, 0, -1188}, 0, {2032, -16}, {0, 127, 0, 255} }},
+ {{ {85, 0, -1018}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {954, 0, 656}, 0, {-16, 880}, {0, 127, 0, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {1095, 0, 895}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {1095, 0, 417}, 0, {2032, 752}, {0, 127, 0, 255} }},
+ {{ {1095, 9, -62}, 0, {2032, 496}, {0, 127, 0, 255} }},
+ {{ {1095, 6, 178}, 0, {2032, 624}, {0, 127, 0, 255} }},
+ {{ {1095, 0, -540}, 0, {2032, 240}, {0, 127, 0, 255} }},
+ {{ {1095, 5, -301}, 0, {2032, 368}, {0, 127, 0, 255} }},
+ {{ {942, 9, -62}, 0, {-16, 496}, {0, 127, 0, 255} }},
+ {{ {946, 5, 178}, 0, {-16, 624}, {0, 127, 0, 255} }},
+ {{ {950, 0, 417}, 0, {-16, 752}, {0, 127, 0, 255} }},
+ {{ {938, 7, -301}, 0, {-16, 368}, {0, 127, 0, 255} }},
+ {{ {929, 0, -779}, 0, {-16, 112}, {0, 127, 0, 255} }},
+ {{ {925, 0, -1018}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {1095, 0, -1018}, 0, {2032, -16}, {0, 127, 0, 255} }},
+ {{ {933, 0, -540}, 0, {-16, 240}, {0, 127, 0, 255} }},
+ {{ {85, 0, 895}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {958, 0, 1065}, 0, {2032, -16}, {0, 127, 0, 255} }},
+ {{ {958, 0, 895}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {85, 0, 1065}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {51, 0, 1059}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {21, 0, 1053}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {-9, 0, 1042}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {-31, 0, 1029}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {-50, 0, 1008}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {-70, 0, 981}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {-78, 0, 963}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {-82, 0, 936}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {-85, 0, 895}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {85, 0, 271}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {-85, 0, 271}, 0, {2032, 1008}, {0, 127, 0, 255} }},
+ {{ {-85, 0, 895}, 0, {2032, -16}, {0, 127, 0, 255} }},
+ {{ {85, 0, 271}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {-85, 0, 895}, 0, {2032, -16}, {0, 127, 0, 255} }},
+ {{ {85, 0, 895}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {1095, 0, 895}, 0, {2032, 1008}, {0, 127, 252, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {0, 127, 252, 255} }},
+ {{ {1090, 1, 933}, 0, {2032, 1008}, {0, 127, 252, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {0, 127, 252, 255} }},
+ {{ {1090, 1, 933}, 0, {2032, 1008}, {255, 127, 0, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {255, 127, 0, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {255, 127, 0, 255} }},
+ {{ {1086, 1, 957}, 0, {2032, 1008}, {255, 127, 0, 255} }},
+ {{ {1086, 1, 957}, 0, {2032, 1008}, {255, 127, 0, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {255, 127, 0, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {255, 127, 0, 255} }},
+ {{ {1078, 1, 979}, 0, {2032, 1008}, {255, 127, 0, 255} }},
+ {{ {1078, 1, 979}, 0, {2032, 1008}, {255, 127, 0, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {255, 127, 0, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {255, 127, 0, 255} }},
+ {{ {1069, 1, 999}, 0, {2032, 1008}, {255, 127, 0, 255} }},
+ {{ {1069, 1, 999}, 0, {2032, 1008}, {255, 127, 0, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {255, 127, 0, 255} }},
+ {{ {1059, 1, 1019}, 0, {2032, 1008}, {255, 127, 0, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {255, 127, 0, 255} }},
+ {{ {1059, 1, 1019}, 0, {2032, 1008}, {255, 127, 255, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {255, 127, 255, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {255, 127, 255, 255} }},
+ {{ {1042, 1, 1035}, 0, {2032, 1008}, {255, 127, 255, 255} }},
+ {{ {1059, 1, 1019}, 0, {2032, 1008}, {0, 129, 0, 255} }},
+ {{ {1042, 1, 1035}, 0, {2032, 1008}, {0, 129, 0, 255} }},
+ {{ {1020, 1, 1047}, 0, {2032, 1008}, {0, 129, 0, 255} }},
+ {{ {1038, 1, 1031}, 0, {2032, 1008}, {0, 129, 0, 255} }},
+ {{ {1042, 1, 1035}, 0, {2032, 1008}, {0, 127, 255, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {0, 127, 255, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {0, 127, 255, 255} }},
+ {{ {1020, 1, 1047}, 0, {2032, 1008}, {0, 127, 255, 255} }},
+ {{ {1020, 1, 1047}, 0, {2032, 1008}, {0, 127, 255, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {0, 127, 255, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {0, 127, 255, 255} }},
+ {{ {991, 1, 1058}, 0, {2032, 1008}, {0, 127, 255, 255} }},
+ {{ {991, 1, 1058}, 0, {2032, 1008}, {251, 127, 0, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {251, 127, 0, 255} }},
+ {{ {958, 0, 1065}, 0, {2032, 1008}, {251, 127, 0, 255} }},
+ {{ {958, 0, 895}, 0, {-16, 1008}, {251, 127, 0, 255} }},
+ {{ {1095, 0, -1018}, 0, {2024, -19}, {0, 127, 0, 255} }},
+ {{ {1098, 0, -1036}, 0, {2045, -12}, {0, 127, 0, 255} }},
+ {{ {925, 0, -1018}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {1098, 0, -1058}, 0, {2040, -24}, {0, 127, 0, 255} }},
+ {{ {1090, 0, -1080}, 0, {2037, -18}, {0, 127, 0, 255} }},
+ {{ {1077, 0, -1103}, 0, {2037, -27}, {0, 127, 0, 255} }},
+ {{ {1059, 0, -1129}, 0, {2040, -13}, {0, 127, 0, 255} }},
+ {{ {1036, 0, -1149}, 0, {2032, -15}, {0, 127, 0, 255} }},
+ {{ {1011, 0, -1164}, 0, {2033, -15}, {0, 127, 0, 255} }},
+};
+
+Gfx mario_Plane_001_mesh_tri_0[] = {
+ gsSPVertex(mario_Plane_001_mesh_vtx_0 + 0, 30, 0),
+ gsSP2Triangles(0, 1, 2, 0, 3, 1, 4, 0),
+ gsSP2Triangles(5, 6, 7, 0, 8, 9, 10, 0),
+ gsSP2Triangles(8, 10, 11, 0, 12, 13, 14, 0),
+ gsSP2Triangles(12, 14, 15, 0, 15, 14, 14, 0),
+ gsSP2Triangles(15, 14, 16, 0, 16, 14, 17, 0),
+ gsSP2Triangles(14, 18, 17, 0, 17, 18, 18, 0),
+ gsSP2Triangles(17, 18, 19, 0, 19, 18, 18, 0),
+ gsSP2Triangles(19, 18, 20, 0, 20, 18, 18, 0),
+ gsSP2Triangles(20, 18, 21, 0, 21, 18, 14, 0),
+ gsSP2Triangles(21, 14, 22, 0, 22, 14, 23, 0),
+ gsSP2Triangles(14, 18, 23, 0, 23, 18, 14, 0),
+ gsSP2Triangles(23, 14, 24, 0, 24, 14, 18, 0),
+ gsSP2Triangles(24, 18, 25, 0, 26, 27, 28, 0),
+ gsSP1Triangle(26, 28, 29, 0),
+ gsSPVertex(mario_Plane_001_mesh_vtx_0 + 30, 32, 0),
+ gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
+ gsSP2Triangles(0, 3, 4, 0, 3, 5, 4, 0),
+ gsSP2Triangles(0, 4, 6, 0, 4, 7, 6, 0),
+ gsSP2Triangles(8, 0, 6, 0, 8, 9, 0, 0),
+ gsSP2Triangles(9, 10, 0, 0, 6, 11, 8, 0),
+ gsSP2Triangles(6, 12, 11, 0, 6, 13, 12, 0),
+ gsSP2Triangles(6, 14, 13, 0, 12, 15, 11, 0),
+ gsSP2Triangles(16, 17, 18, 0, 16, 19, 17, 0),
+ gsSP2Triangles(19, 16, 16, 0, 19, 16, 20, 0),
+ gsSP2Triangles(20, 16, 16, 0, 20, 16, 21, 0),
+ gsSP2Triangles(21, 16, 16, 0, 21, 16, 22, 0),
+ gsSP2Triangles(22, 16, 16, 0, 22, 16, 23, 0),
+ gsSP2Triangles(23, 16, 16, 0, 23, 16, 24, 0),
+ gsSP2Triangles(24, 16, 16, 0, 24, 16, 25, 0),
+ gsSP2Triangles(25, 16, 16, 0, 25, 16, 26, 0),
+ gsSP2Triangles(26, 16, 16, 0, 26, 16, 27, 0),
+ gsSP2Triangles(27, 16, 28, 0, 16, 16, 28, 0),
+ gsSP1Triangle(29, 30, 31, 0),
+ gsSPVertex(mario_Plane_001_mesh_vtx_0 + 62, 31, 0),
+ gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0),
+ gsSP2Triangles(4, 6, 5, 0, 7, 8, 9, 0),
+ gsSP2Triangles(7, 9, 10, 0, 11, 12, 12, 0),
+ gsSP2Triangles(11, 12, 14, 0, 15, 16, 16, 0),
+ gsSP2Triangles(15, 16, 18, 0, 19, 20, 21, 0),
+ gsSP2Triangles(20, 22, 21, 0, 23, 24, 24, 0),
+ gsSP2Triangles(23, 24, 26, 0, 27, 28, 29, 0),
+ gsSP1Triangle(27, 29, 30, 0),
+ gsSPVertex(mario_Plane_001_mesh_vtx_0 + 93, 21, 0),
+ gsSP2Triangles(0, 1, 1, 0, 0, 1, 3, 0),
+ gsSP2Triangles(4, 5, 5, 0, 4, 5, 7, 0),
+ gsSP2Triangles(8, 9, 10, 0, 9, 11, 10, 0),
+ gsSP2Triangles(12, 13, 14, 0, 13, 15, 14, 0),
+ gsSP2Triangles(15, 16, 14, 0, 17, 14, 16, 0),
+ gsSP2Triangles(18, 14, 17, 0, 19, 14, 18, 0),
+ gsSP1Triangle(20, 14, 19, 0),
+ gsSPEndDisplayList(),
+};
+
+Vtx mario_Plane_001_mesh_vtx_1[92] = {
+ {{ {1090, 1, 933}, 0, {1008, 1008}, {32, 123, 0, 255} }},
+ {{ {1095, 0, 1065}, 0, {-16, 1008}, {32, 123, 0, 255} }},
+ {{ {1095, 0, 895}, 0, {1008, 1008}, {32, 123, 0, 255} }},
+ {{ {1086, 1, 957}, 0, {1008, 1008}, {6, 127, 1, 255} }},
+ {{ {1095, 0, 1065}, 0, {-16, 1008}, {6, 127, 1, 255} }},
+ {{ {1090, 1, 933}, 0, {1008, 1008}, {6, 127, 1, 255} }},
+ {{ {1078, 1, 979}, 0, {1008, 1008}, {3, 127, 1, 255} }},
+ {{ {1095, 0, 1065}, 0, {-16, 1008}, {3, 127, 1, 255} }},
+ {{ {1086, 1, 957}, 0, {1008, 1008}, {3, 127, 1, 255} }},
+ {{ {1069, 1, 999}, 0, {1008, 1008}, {3, 127, 1, 255} }},
+ {{ {1095, 0, 1065}, 0, {-16, 1008}, {3, 127, 1, 255} }},
+ {{ {1078, 1, 979}, 0, {1008, 1008}, {3, 127, 1, 255} }},
+ {{ {1059, 1, 1019}, 0, {1008, 1008}, {3, 127, 1, 255} }},
+ {{ {1095, 0, 1065}, 0, {-16, 1008}, {3, 127, 1, 255} }},
+ {{ {1069, 1, 999}, 0, {1008, 1008}, {3, 127, 1, 255} }},
+ {{ {1095, 0, 1065}, 0, {-16, 1008}, {2, 127, 3, 255} }},
+ {{ {1042, 1, 1035}, 0, {1008, 1008}, {2, 127, 3, 255} }},
+ {{ {1020, 1, 1047}, 0, {1008, 1008}, {2, 127, 3, 255} }},
+ {{ {1042, 1, 1035}, 0, {-16, 1008}, {2, 127, 2, 255} }},
+ {{ {1095, 0, 1065}, 0, {-16, 1008}, {2, 127, 2, 255} }},
+ {{ {1059, 1, 1019}, 0, {-16, 1008}, {2, 127, 2, 255} }},
+ {{ {991, 1, 1058}, 0, {1008, 1008}, {1, 127, 3, 255} }},
+ {{ {1095, 0, 1065}, 0, {-16, 1008}, {1, 127, 3, 255} }},
+ {{ {1020, 1, 1047}, 0, {1008, 1008}, {1, 127, 3, 255} }},
+ {{ {958, 0, 1065}, 0, {1008, 1008}, {0, 125, 23, 255} }},
+ {{ {1095, 0, 1065}, 0, {-16, 1008}, {0, 125, 23, 255} }},
+ {{ {991, 1, 1058}, 0, {1008, 1008}, {0, 125, 23, 255} }},
+ {{ {85, 0, -1018}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {85, 0, 895}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {958, 0, 895}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {942, 0, -62}, 0, {1008, 496}, {0, 127, 0, 255} }},
+ {{ {925, 0, -1018}, 0, {1008, -16}, {0, 127, 0, 255} }},
+ {{ {-431, 0, 1065}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {-85, 0, 1065}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {-85, 0, -1217}, 0, {1008, -16}, {0, 127, 0, 255} }},
+ {{ {-431, 0, -1217}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {-431, 0, 1394}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {1522, 0, 1394}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {1522, 0, 1065}, 0, {1008, -16}, {0, 127, 0, 255} }},
+ {{ {-431, 0, 1065}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {1095, 0, 23}, 0, {-16, 496}, {0, 127, 0, 255} }},
+ {{ {1095, 0, 1065}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {1522, 0, 1065}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {1095, 0, -1018}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {1522, 0, -1018}, 0, {1008, -16}, {0, 127, 0, 255} }},
+ {{ {-431, 0, -1544}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {-431, 0, -1217}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {156, 0, -1217}, 0, {240, 1008}, {0, 127, 0, 255} }},
+ {{ {925, 0, -1217}, 0, {496, 1008}, {0, 127, 0, 255} }},
+ {{ {1521, 0, -1544}, 0, {1008, -16}, {0, 127, 0, 255} }},
+ {{ {1521, 0, -1217}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {85, 0, 1065}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {51, 0, 1059}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {-85, 0, 1065}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {21, 0, 1053}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {-9, 0, 1042}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {-31, 0, 1029}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {-50, 0, 1008}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {-70, 0, 981}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {-78, 0, 963}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {-82, 0, 936}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {-85, 0, 895}, 0, {1008, 1008}, {0, 127, 0, 255} }},
+ {{ {925, 0, -1188}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {961, 0, -1184}, 0, {1010, 1008}, {0, 127, 0, 255} }},
+ {{ {156, 0, -1217}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {925, 0, -1188}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {925, 0, -1217}, 0, {496, 1008}, {0, 127, 0, 255} }},
+ {{ {156, 0, -1188}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {124, 0, -1211}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {85, 0, -1217}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {1098, 0, -1036}, 0, {1014, -12}, {0, 127, 0, 255} }},
+ {{ {1095, 0, -1018}, 0, {1004, -19}, {0, 127, 0, 255} }},
+ {{ {1522, 0, -1018}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {1098, 0, -1058}, 0, {1012, -24}, {0, 127, 0, 255} }},
+ {{ {1522, 0, -1058}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {1098, 0, -1217}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {1521, 0, -1217}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {1090, 0, -1080}, 0, {1010, -18}, {0, 127, 0, 255} }},
+ {{ {1077, 0, -1103}, 0, {1010, -27}, {0, 127, 0, 255} }},
+ {{ {1059, 0, -1129}, 0, {1012, -13}, {0, 127, 0, 255} }},
+ {{ {1036, 0, -1149}, 0, {1008, -15}, {0, 127, 0, 255} }},
+ {{ {1011, 0, -1164}, 0, {1008, -15}, {0, 127, 0, 255} }},
+ {{ {984, 0, -1177}, 0, {1011, -25}, {0, 127, 0, 255} }},
+ {{ {961, 0, -1184}, 0, {1010, -23}, {0, 127, 0, 255} }},
+ {{ {-85, 0, -1107}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {-70, 0, -1146}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {-85, 0, -1217}, 0, {-16, 1008}, {0, 127, 0, 255} }},
+ {{ {-51, 0, -1173}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {-26, 0, -1192}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {2, 0, -1205}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {30, 0, -1211}, 0, {-16, -16}, {0, 127, 0, 255} }},
+ {{ {60, 0, -1214}, 0, {-16, -16}, {0, 127, 0, 255} }},
+};
+
+Gfx mario_Plane_001_mesh_tri_1[] = {
+ gsSPVertex(mario_Plane_001_mesh_vtx_1 + 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, 28, 29, 0),
+ gsSP2Triangles(29, 30, 27, 0, 30, 31, 27, 0),
+ gsSPVertex(mario_Plane_001_mesh_vtx_1 + 32, 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, 10, 11, 8, 0),
+ gsSP2Triangles(10, 12, 11, 0, 13, 14, 15, 0),
+ gsSP2Triangles(13, 15, 16, 0, 16, 17, 13, 0),
+ gsSP2Triangles(16, 18, 17, 0, 19, 20, 21, 0),
+ gsSP2Triangles(20, 22, 21, 0, 22, 23, 21, 0),
+ gsSP2Triangles(24, 21, 23, 0, 24, 25, 21, 0),
+ gsSP2Triangles(25, 26, 21, 0, 26, 27, 21, 0),
+ gsSP2Triangles(27, 28, 21, 0, 28, 29, 21, 0),
+ gsSP1Triangle(30, 31, 16, 0),
+ gsSPVertex(mario_Plane_001_mesh_vtx_1 + 64, 28, 0),
+ gsSP2Triangles(0, 1, 2, 0, 3, 1, 0, 0),
+ gsSP2Triangles(3, 0, 4, 0, 5, 4, 0, 0),
+ gsSP2Triangles(6, 7, 8, 0, 9, 6, 8, 0),
+ gsSP2Triangles(9, 8, 10, 0, 11, 9, 10, 0),
+ gsSP2Triangles(11, 10, 12, 0, 9, 11, 13, 0),
+ gsSP2Triangles(13, 11, 14, 0, 14, 11, 15, 0),
+ gsSP2Triangles(15, 11, 16, 0, 16, 11, 17, 0),
+ gsSP2Triangles(17, 11, 18, 0, 18, 11, 19, 0),
+ gsSP2Triangles(2, 19, 11, 0, 20, 21, 22, 0),
+ gsSP2Triangles(23, 22, 21, 0, 23, 24, 22, 0),
+ gsSP2Triangles(24, 25, 22, 0, 25, 26, 22, 0),
+ gsSP2Triangles(26, 27, 22, 0, 27, 5, 22, 0),
+ gsSPEndDisplayList(),
+};
+
+Gfx mat_mario_f3dlite_material_009[] = {
+ gsSPClearGeometryMode(G_CLIPPING),
+ gsSPSetLights1(mario_f3dlite_material_009_lights),
+ gsDPPipeSync(),
+ gsDPSetCombineLERP(TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, ENVIRONMENT, TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, ENVIRONMENT),
+ gsDPSetAlphaDither(G_AD_NOISE),
+ gsSPTexture(65535, 65535, 0, 0, 1),
+ gsDPSetTextureImage(G_IM_FMT_I, G_IM_SIZ_8b_LOAD_BLOCK, 1, gTextureRoad2),
+ gsDPSetTile(G_IM_FMT_I, G_IM_SIZ_8b_LOAD_BLOCK, 0, 0, 7, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0),
+ gsDPLoadBlock(7, 0, 0, 1023, 256),
+ gsDPSetTile(G_IM_FMT_I, G_IM_SIZ_8b, 8, 0, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 5, 0, G_TX_WRAP | G_TX_NOMIRROR, 6, 0),
+ gsDPSetTileSize(0, 0, 0, 252, 124),
+ gsSPEndDisplayList(),
+};
+
+Gfx mat_revert_mario_f3dlite_material_009[] = {
+ gsSPSetGeometryMode(G_CLIPPING),
+ gsDPPipeSync(),
+ gsDPSetAlphaDither(G_AD_DISABLE),
+ gsSPEndDisplayList(),
+};
+
+Gfx mat_mario_f3dlite_material[] = {
+ gsSPClearGeometryMode(G_CLIPPING),
+ gsSPSetLights1(mario_f3dlite_material_lights),
+ gsDPPipeSync(),
+ gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, 0, 0, 0, ENVIRONMENT, TEXEL0, 0, SHADE, 0, 0, 0, 0, ENVIRONMENT),
+ gsDPSetAlphaDither(G_AD_NOISE),
+ gsSPTexture(65535, 65535, 0, 0, 1),
+ gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 1, gTextureGrass1),
+ gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 0, 0, 7, 0, G_TX_WRAP, 0, 0, G_TX_WRAP, 0, 0),
+ gsDPLoadBlock(7, 0, 0, 1023, 256),
+ gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, 0, 0, G_TX_WRAP, 5, 0, G_TX_WRAP, 5, 0),
+ gsDPSetTileSize(0, 0, 0, 32, 32),
+ gsSPEndDisplayList(),
+};
+
+Gfx mat_revert_mario_f3dlite_material[] = {
+ gsSPSetGeometryMode(G_CLIPPING),
+ gsDPPipeSync(),
+ gsDPSetAlphaDither(G_AD_DISABLE),
+ gsSPEndDisplayList(),
+};
+
+Gfx mario_Plane_001_mesh[] = {
+ gsSPClearGeometryMode(G_LIGHTING),
+ gsSPVertex(mario_Plane_001_mesh_vtx_cull + 0, 8, 0),
+ gsSPSetGeometryMode(G_LIGHTING),
+ gsSPCullDisplayList(0, 7),
+ gsSPDisplayList(mat_mario_f3dlite_material_009),
+ gsSPDisplayList(mario_Plane_001_mesh_tri_0),
+ gsSPDisplayList(mat_revert_mario_f3dlite_material_009),
+ gsSPDisplayList(mat_mario_f3dlite_material),
+ gsSPDisplayList(mario_Plane_001_mesh_tri_1),
+ gsSPDisplayList(mat_revert_mario_f3dlite_material),
+ gsDPPipeSync(),
+ gsSPSetGeometryMode(G_LIGHTING),
+ gsSPClearGeometryMode(G_TEXTURE_GEN),
+ gsDPSetCombineLERP(0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT, 0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT),
+ gsSPTexture(65535, 65535, 0, 0, 0),
+ gsSPEndDisplayList(),
+};
+
diff --git a/courses/test_course/vtx.c b/courses/test_course/vtx.c
new file mode 100644
index 000000000..24a4cc07a
--- /dev/null
+++ b/courses/test_course/vtx.c
@@ -0,0 +1,16 @@
+#include "mk64.h"
+#include "common_structs.h"
+
+CourseVtx test_course_vertices[] = {
+ // Top-left vertex (x, y, z), texture coord (tc), color and alpha (ca)
+ {{ -100, 100, 0}, { 0, 0}, {MACRO_COLOR_FLAG(0xFF, 0x00, 0x00, 0), 0x00}}, // Red
+
+ // Top-right vertex
+ {{ 100, 100, 0}, { 1024, 0}, {MACRO_COLOR_FLAG(0x00, 0xFF, 0x00, 0), 0x00}}, // Green
+
+ // Bottom-right vertex
+ {{ 100, -100, 0}, { 1024, 1024}, {MACRO_COLOR_FLAG(0x00, 0x00, 0xFF, 0), 0x00}}, // Blue
+
+ // Bottom-left vertex
+ {{ -100, -100, 0}, { 0, 1024}, {MACRO_COLOR_FLAG(0xFF, 0xFF, 0x00, 0), 0x00}}, // Yellow
+};