mirror of
https://github.com/HarbourMasters/SpaghettiKart
synced 2026-06-09 20:51:05 -04:00
clang format
This commit is contained in:
committed by
github-actions[bot]
parent
bdf5ca8d60
commit
b53a5dbcfa
@@ -1,4 +1,2 @@
|
||||
#include <libultra/types.h>
|
||||
#include "course_offsets.h"
|
||||
|
||||
|
||||
|
||||
+1304
-1914
File diff suppressed because it is too large
Load Diff
+5666
-5780
File diff suppressed because it is too large
Load Diff
+1607
-2046
File diff suppressed because it is too large
Load Diff
+3061
-3775
File diff suppressed because it is too large
Load Diff
+2596
-3937
File diff suppressed because it is too large
Load Diff
@@ -51,11 +51,6 @@ extern Gfx mat_ship1_black[];
|
||||
extern Gfx mat_ship1_engine2[];
|
||||
extern Gfx ship1_spag1_mesh[];
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern u8 wheels_metal1_i8[];
|
||||
extern u8 wheels_tire_i8[];
|
||||
extern Vtx wheels_Spaghetti_002_mesh_vtx_cull[8];
|
||||
|
||||
+1297
-2089
File diff suppressed because it is too large
Load Diff
+10110
-16791
File diff suppressed because it is too large
Load Diff
@@ -127,7 +127,6 @@ extern Gfx mat_castle_fence[];
|
||||
extern Gfx mat_revert_castle_fence[];
|
||||
extern Gfx castle_map_002_mesh[];
|
||||
|
||||
|
||||
extern u8 statue_window_rgba16[];
|
||||
extern u8 statue_flowers1_rgba32[];
|
||||
extern u8 statue_marble1_ci8[];
|
||||
|
||||
@@ -9,6 +9,4 @@ extern StaffGhost d_mario_raceway_staff_ghost[];
|
||||
extern StaffGhost d_royal_raceway_staff_ghost[];
|
||||
extern StaffGhost d_luigi_raceway_staff_ghost[];
|
||||
|
||||
|
||||
|
||||
#endif // _STAFF_GHOST_DATA
|
||||
#endif // _STAFF_GHOST_DATA
|
||||
|
||||
+52
-52
@@ -12,63 +12,63 @@ Gfx test_course_data_dl[] = {
|
||||
};
|
||||
|
||||
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, 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 },
|
||||
|
||||
// End of path
|
||||
{ -32768, -32768, -32768, 0 } // Terminator
|
||||
};
|
||||
|
||||
TrackSections test_course_addr[] = {
|
||||
{ mario_Plane_001_mesh, 255, 255, 0x0000 },
|
||||
{ mario_Plane_001_mesh, 255, 255, 0x0000 },
|
||||
{ 0x00000000, 0, 0, 0x00000 },
|
||||
};
|
||||
|
||||
+347
-354
@@ -2,388 +2,381 @@
|
||||
#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_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);
|
||||
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} }},
|
||||
{ { { -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} }},
|
||||
{ { { 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(),
|
||||
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} }},
|
||||
{ { { 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(),
|
||||
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(),
|
||||
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(),
|
||||
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(),
|
||||
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(),
|
||||
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(),
|
||||
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(),
|
||||
};
|
||||
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
|
||||
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
|
||||
{ { -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
|
||||
{ { 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
|
||||
{ { 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
|
||||
{ { -100, -100, 0 }, { 0, 1024 }, { MACRO_COLOR_FLAG(0xFF, 0xFF, 0x00, 0), 0x00 } }, // Yellow
|
||||
};
|
||||
|
||||
+18
-17
@@ -133,7 +133,7 @@ struct Actor {
|
||||
/* 0x18 */ Vec3f pos;
|
||||
/* 0x24 */ Vec3f velocity;
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
}; // size = 0x70
|
||||
|
||||
// Duplicate declare for simplicity when externing actors & packed files.
|
||||
@@ -158,25 +158,26 @@ struct TrainCar {
|
||||
/* 0x18 */ Vec3f pos;
|
||||
/* 0x24 */ Vec3f velocity;
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
}; // size = 0x70
|
||||
|
||||
struct RailroadCrossing {
|
||||
/* 0x00 */ s16 type;
|
||||
/* 0x02 */ s16 flags;
|
||||
/* 0x04 */ s16 someTimer;
|
||||
/* 0x06 */ s16 crossingId; // unused now
|
||||
/* 0x06 */ s16 crossingId; // unused now
|
||||
/* 0x08 */ void* crossingTrigger; // Crossing Trigger Class
|
||||
/* 0x10 */ Vec3s rot;
|
||||
/* 0x16 */ s16 unk_16;
|
||||
/* 0x18 */ Vec3f pos;
|
||||
/* 0x24 */ Vec3f velocity;
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
}; // size = 0x70
|
||||
|
||||
// crossingTrigger might ruin struct size when compiled on 32 bit
|
||||
static_assert(sizeof(struct RailroadCrossing) == sizeof(struct Actor), "RailroadCrossing struct size does not match base struct size");
|
||||
static_assert(sizeof(struct RailroadCrossing) == sizeof(struct Actor),
|
||||
"RailroadCrossing struct size does not match base struct size");
|
||||
|
||||
struct FallingRock {
|
||||
/* 0x00 */ s16 type;
|
||||
@@ -190,7 +191,7 @@ struct FallingRock {
|
||||
/* 0x18 */ Vec3f pos;
|
||||
/* 0x24 */ Vec3f velocity;
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
}; // size = 0x70
|
||||
|
||||
struct ActorSpawnData {
|
||||
@@ -235,7 +236,7 @@ struct YoshiValleyEgg {
|
||||
// pathCenter[0] and pathCenter[2] are the X,Z coordinates of the center of the path
|
||||
/* 0x24 */ Vec3f pathCenter;
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
}; // size = 0x70
|
||||
|
||||
struct KiwanoFruit {
|
||||
@@ -254,7 +255,7 @@ struct KiwanoFruit {
|
||||
/* 0x18 */ Vec3f pos;
|
||||
/* 0x24 */ Vec3f velocity;
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
}; // size = 0x70
|
||||
|
||||
struct PaddleWheelBoat {
|
||||
@@ -269,7 +270,7 @@ struct PaddleWheelBoat {
|
||||
/* 0x18 */ Vec3f pos;
|
||||
/* 0x24 */ Vec3f velocity;
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
}; // size = 0x70
|
||||
|
||||
struct PiranhaPlant {
|
||||
@@ -282,7 +283,7 @@ struct PiranhaPlant {
|
||||
/* 0x24 */ Vec4s timers; // A per-camera timer. Might be more appropriate to call this state
|
||||
/* 0x2C */ f32 unk_02C;
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
}; // size = 0x70
|
||||
|
||||
struct PalmTree {
|
||||
@@ -297,7 +298,7 @@ struct PalmTree {
|
||||
/* 0x18 */ Vec3f pos;
|
||||
/* 0x24 */ Vec3f velocity;
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
}; // size = 0x70
|
||||
|
||||
typedef struct {
|
||||
@@ -314,7 +315,7 @@ typedef struct {
|
||||
/* 0x18 */ Vec3f unk_18;
|
||||
/* 0x24 */ Vec3f shellIndices; // Indices in gActorList for the shells "owned" by this parent
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
} TripleShellParent; // size = 0x70
|
||||
|
||||
struct ShellActor {
|
||||
@@ -342,7 +343,7 @@ struct ShellActor {
|
||||
/* 0x18 */ Vec3f pos;
|
||||
/* 0x24 */ Vec3f velocity; // All 0 until the shell is fired
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
}; // size = 0x70
|
||||
|
||||
struct ItemBox {
|
||||
@@ -361,7 +362,7 @@ struct ItemBox {
|
||||
/* 0x28 */ f32 unk_028;
|
||||
/* 0x2C */ f32 unk_02C;
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
}; // size = 0x70
|
||||
|
||||
struct FakeItemBox {
|
||||
@@ -378,7 +379,7 @@ struct FakeItemBox {
|
||||
/* 0x28 */ f32 targetY;
|
||||
/* 0x2C */ f32 unk_02C;
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
}; // size = 0x70
|
||||
|
||||
struct BananaBunchParent {
|
||||
@@ -394,7 +395,7 @@ struct BananaBunchParent {
|
||||
/* 0x1E */ s16 unk_1E;
|
||||
/* 0x20 */ f32 unk_20[4];
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
}; // size = 0x70
|
||||
|
||||
struct BananaActor {
|
||||
@@ -417,7 +418,7 @@ struct BananaActor {
|
||||
/* 0x18 */ Vec3f pos;
|
||||
/* 0x24 */ Vec3f velocity;
|
||||
/* 0x30 */ Collision unk30;
|
||||
const char* model;
|
||||
const char* model;
|
||||
}; // size = 0x70
|
||||
|
||||
// #pragma GCC diagnostic pop
|
||||
|
||||
@@ -395,7 +395,7 @@ typedef struct {
|
||||
s32 nCharacter; // Networked character choice
|
||||
s32 nStartingRank;
|
||||
u32 nHasAuthority;
|
||||
} Player; // size = 0xDD8
|
||||
} Player; // size = 0xDD8
|
||||
|
||||
typedef struct {
|
||||
// Something related to time trial ghost data?
|
||||
@@ -412,7 +412,6 @@ typedef struct {
|
||||
uint8_t r, g, b;
|
||||
} RGB8;
|
||||
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u16 red;
|
||||
/* 0x02 */ u16 green;
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
#include "animation.h"
|
||||
|
||||
typedef struct {
|
||||
const char* addr; // segmented address texture file
|
||||
u32 file_size; // compressed file size
|
||||
u32 data_size; // uncompressed texture size
|
||||
u32 padding; // always zero
|
||||
const char* addr; // segmented address texture file
|
||||
u32 file_size; // compressed file size
|
||||
u32 data_size; // uncompressed texture size
|
||||
u32 padding; // always zero
|
||||
} course_texture;
|
||||
|
||||
extern uintptr_t d_course_sherbet_land_unk_data1[];
|
||||
|
||||
+4
-12
@@ -48,7 +48,6 @@
|
||||
#define HOLD_ALL_DPAD_AND_C_BUTTONS \
|
||||
(U_JPAD | L_JPAD | R_JPAD | D_JPAD | U_CBUTTONS | L_CBUTTONS | R_CBUTTONS | D_CBUTTONS)
|
||||
|
||||
|
||||
/**
|
||||
* @brief Jump to demo mode from the debug menu using L and A
|
||||
*/
|
||||
@@ -208,7 +207,6 @@ enum { COURSE_ONE, COURSE_TWO, COURSE_THREE, COURSE_FOUR };
|
||||
#define RACE_UNK 6
|
||||
#define RACE_EXIT 7
|
||||
|
||||
|
||||
/**
|
||||
* @brief Options for gScreenModeSelection and gActiveScreenMode
|
||||
*/
|
||||
@@ -306,12 +304,7 @@ enum KART_AI_BEHAVIOURS {
|
||||
BEHAVIOUR_MAX_SPEED
|
||||
};
|
||||
|
||||
enum DIRECTION {
|
||||
NORTH,
|
||||
EAST,
|
||||
SOUTH,
|
||||
WEST
|
||||
};
|
||||
enum DIRECTION { NORTH, EAST, SOUTH, WEST };
|
||||
|
||||
/**
|
||||
* @brief Balloon status
|
||||
@@ -371,7 +364,6 @@ enum DIRECTION {
|
||||
#define COLOR_LAVA GPACK_RGB888(0x34, 0x00, 0x00)
|
||||
#define COLOR_BLACK GPACK_RGB888(0, 0, 0)
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Collision mesh flags
|
||||
@@ -387,9 +379,9 @@ enum DIRECTION {
|
||||
#endif // DEFINES_H
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* Laps
|
||||
*
|
||||
*
|
||||
*/
|
||||
#define MIN_LAPS 0
|
||||
#define MAX_LAPS 3
|
||||
#define MAX_LAPS 3
|
||||
|
||||
+1
-1
@@ -103,7 +103,7 @@ enum SURFACE_TYPE {
|
||||
/* 0x0F */ CAVE, // DK Jungle cave
|
||||
/* 0x10 */ ROPE_BRIDGE, // Bowser's Castle bridge 2, DK Jungle bridge
|
||||
/* 0x11 */ WOOD_BRIDGE, // Frappe Snowland bridge, Bowser's Castle bridge 1,3, Yoshi Valley bridge 2
|
||||
/* 0xFB */ WATER_SURFACE = 0xFB, // Water effect and Lakitu picks up the player
|
||||
/* 0xFB */ WATER_SURFACE = 0xFB, // Water effect and Lakitu picks up the player
|
||||
/* 0xFC */ BOOST_RAMP_WOOD = 0xFC, // DK Jungle
|
||||
/* 0xFD */ OUT_OF_BOUNDS, // DK Jungle river island oob / out of bounds
|
||||
/* 0xFE */ BOOST_RAMP_ASPHALT, // Royal Raceway
|
||||
|
||||
@@ -214,7 +214,7 @@ class platform {
|
||||
template <typename T> class proc {
|
||||
public:
|
||||
proc(dll const& lib, std::string const& sym)
|
||||
: m_proc(reinterpret_cast<T*>((void*)::GetProcAddress(lib.handle, sym.c_str()))) {
|
||||
: m_proc(reinterpret_cast<T*>((void*) ::GetProcAddress(lib.handle, sym.c_str()))) {
|
||||
}
|
||||
|
||||
operator bool() const {
|
||||
@@ -400,16 +400,17 @@ namespace internal {
|
||||
|
||||
#if _WIN32
|
||||
static inline std::wstring str2wstr(std::string const& str) {
|
||||
int len = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), (int)str.size(), nullptr, 0);
|
||||
int len = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), (int) str.size(), nullptr, 0);
|
||||
std::wstring ret(len, '\0');
|
||||
MultiByteToWideChar(CP_UTF8, 0, str.c_str(), (int)str.size(), (LPWSTR)ret.data(), (int)ret.size());
|
||||
MultiByteToWideChar(CP_UTF8, 0, str.c_str(), (int) str.size(), (LPWSTR) ret.data(), (int) ret.size());
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline std::string wstr2str(std::wstring const& str) {
|
||||
int len = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), (int)str.size(), nullptr, 0, nullptr, nullptr);
|
||||
int len = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), (int) str.size(), nullptr, 0, nullptr, nullptr);
|
||||
std::string ret(len, '\0');
|
||||
WideCharToMultiByte(CP_UTF8, 0, str.c_str(), (int)str.size(), (LPSTR)ret.data(), (int)ret.size(), nullptr, nullptr);
|
||||
WideCharToMultiByte(CP_UTF8, 0, str.c_str(), (int) str.size(), (LPSTR) ret.data(), (int) ret.size(), nullptr,
|
||||
nullptr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -534,10 +535,10 @@ inline void settings::rescan() {
|
||||
// Check whether a program is present using “which”.
|
||||
inline bool settings::check_program(std::string const& program) {
|
||||
#if _WIN32
|
||||
(void)program;
|
||||
(void) program;
|
||||
return false;
|
||||
#elif __EMSCRIPTEN__
|
||||
(void)program;
|
||||
(void) program;
|
||||
return false;
|
||||
#else
|
||||
int exit_code = -1;
|
||||
@@ -636,7 +637,7 @@ inline bool internal::executor::kill() {
|
||||
if (m_future.valid()) {
|
||||
// Close all windows that weren’t open when we started the future
|
||||
auto previous_windows = m_windows;
|
||||
EnumWindows(&enum_windows_callback, (LPARAM)this);
|
||||
EnumWindows(&enum_windows_callback, (LPARAM) this);
|
||||
for (auto hwnd : m_windows)
|
||||
if (previous_windows.find(hwnd) == previous_windows.end()) {
|
||||
SendMessage(hwnd, WM_CLOSE, 0, 0);
|
||||
@@ -656,7 +657,7 @@ inline bool internal::executor::kill() {
|
||||
|
||||
#if _WIN32
|
||||
inline BOOL CALLBACK internal::executor::enum_windows_callback(HWND hwnd, LPARAM lParam) {
|
||||
auto that = (executor*)lParam;
|
||||
auto that = (executor*) lParam;
|
||||
|
||||
DWORD pid;
|
||||
auto tid = GetWindowThreadProcessId(hwnd, &pid);
|
||||
@@ -673,7 +674,7 @@ inline void internal::executor::start_func(std::function<std::string(int*)> cons
|
||||
auto trampoline = [fun, this]() {
|
||||
// Save our thread id so that the caller can cancel us
|
||||
m_tid = GetCurrentThreadId();
|
||||
EnumWindows(&enum_windows_callback, (LPARAM)this);
|
||||
EnumWindows(&enum_windows_callback, (LPARAM) this);
|
||||
m_cond.notify_all();
|
||||
return fun(&m_exit_code);
|
||||
};
|
||||
@@ -760,7 +761,7 @@ inline bool internal::executor::ready(int timeout /* = default_wait_timeout */)
|
||||
}
|
||||
#elif __EMSCRIPTEN__ || __NX__
|
||||
// FIXME: do something
|
||||
(void)timeout;
|
||||
(void) timeout;
|
||||
#else
|
||||
char buf[BUFSIZ];
|
||||
ssize_t received = read(m_fd, buf, BUFSIZ); // Flawfinder: ignore
|
||||
@@ -866,7 +867,7 @@ inline HANDLE internal::platform::new_style_context::create() {
|
||||
0,
|
||||
0,
|
||||
sys_dir.c_str(),
|
||||
(LPCSTR)124,
|
||||
(LPCSTR) 124,
|
||||
nullptr,
|
||||
0,
|
||||
};
|
||||
@@ -892,11 +893,11 @@ inline std::vector<std::string> internal::dialog::desktop_helper() const {
|
||||
#if __APPLE__
|
||||
return { "osascript" };
|
||||
#else
|
||||
return { flags(flag::has_zenity) ? "zenity"
|
||||
return { flags(flag::has_zenity) ? "zenity"
|
||||
: flags(flag::has_matedialog) ? "matedialog"
|
||||
: flags(flag::has_qarma) ? "qarma"
|
||||
: flags(flag::has_kdialog) ? "kdialog"
|
||||
: "echo" };
|
||||
: flags(flag::has_qarma) ? "qarma"
|
||||
: flags(flag::has_kdialog) ? "kdialog"
|
||||
: "echo" };
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -980,7 +981,7 @@ inline internal::file_dialog::file_dialog(type in_type, std::string const& title
|
||||
filter_list += '\0';
|
||||
|
||||
m_async->start_func([this, in_type, title, default_path, filter_list, options](int* exit_code) -> std::string {
|
||||
(void)exit_code;
|
||||
(void) exit_code;
|
||||
m_wtitle = internal::str2wstr(title);
|
||||
m_wdefault_path = internal::str2wstr(default_path);
|
||||
auto wfilter_list = internal::str2wstr(filter_list);
|
||||
@@ -1010,7 +1011,7 @@ inline internal::file_dialog::file_dialog(type in_type, std::string const& title
|
||||
memset(&bi, 0, sizeof(bi));
|
||||
|
||||
bi.lpfn = &bffcallback;
|
||||
bi.lParam = (LPARAM)this;
|
||||
bi.lParam = (LPARAM) this;
|
||||
|
||||
if (flags(flag::is_vista)) {
|
||||
if (ole32.is_initialized())
|
||||
@@ -1039,8 +1040,8 @@ inline internal::file_dialog::file_dialog(type in_type, std::string const& title
|
||||
ofn.lpstrFilter = wfilter_list.c_str();
|
||||
|
||||
auto woutput = std::wstring(MAX_PATH * 256, L'\0');
|
||||
ofn.lpstrFile = (LPWSTR)woutput.data();
|
||||
ofn.nMaxFile = (DWORD)woutput.size();
|
||||
ofn.lpstrFile = (LPWSTR) woutput.data();
|
||||
ofn.nMaxFile = (DWORD) woutput.size();
|
||||
if (!m_wdefault_path.empty()) {
|
||||
// If a directory was provided, use it as the initial directory. If
|
||||
// a valid path was provided, use it as the initial file. Otherwise,
|
||||
@@ -1052,8 +1053,8 @@ inline internal::file_dialog::file_dialog(type in_type, std::string const& title
|
||||
// second argument is size of buffer, not length of string
|
||||
StringCchCopyW(ofn.lpstrFile, MAX_PATH * 256 + 1, m_wdefault_path.c_str());
|
||||
else {
|
||||
ofn.lpstrFileTitle = (LPWSTR)m_wdefault_path.data();
|
||||
ofn.nMaxFileTitle = (DWORD)m_wdefault_path.size();
|
||||
ofn.lpstrFileTitle = (LPWSTR) m_wdefault_path.data();
|
||||
ofn.nMaxFileTitle = (DWORD) m_wdefault_path.size();
|
||||
}
|
||||
}
|
||||
ofn.lpstrTitle = m_wtitle.c_str();
|
||||
@@ -1101,11 +1102,11 @@ inline internal::file_dialog::file_dialog(type in_type, std::string const& title
|
||||
});
|
||||
#elif __EMSCRIPTEN__
|
||||
// FIXME: do something
|
||||
(void)in_type;
|
||||
(void)title;
|
||||
(void)default_path;
|
||||
(void)filters;
|
||||
(void)options;
|
||||
(void) in_type;
|
||||
(void) title;
|
||||
(void) default_path;
|
||||
(void) filters;
|
||||
(void) options;
|
||||
#else
|
||||
auto command = desktop_helper();
|
||||
|
||||
@@ -1277,10 +1278,10 @@ inline std::vector<std::string> internal::file_dialog::vector_result() {
|
||||
#if _WIN32
|
||||
// Use a static function to pass as BFFCALLBACK for legacy folder select
|
||||
inline int CALLBACK internal::file_dialog::bffcallback(HWND hwnd, UINT uMsg, LPARAM, LPARAM pData) {
|
||||
auto inst = (file_dialog*)pData;
|
||||
auto inst = (file_dialog*) pData;
|
||||
switch (uMsg) {
|
||||
case BFFM_INITIALIZED:
|
||||
SendMessage(hwnd, BFFM_SETSELECTIONW, TRUE, (LPARAM)inst->m_wdefault_path.c_str());
|
||||
SendMessage(hwnd, BFFM_SETSELECTIONW, TRUE, (LPARAM) inst->m_wdefault_path.c_str());
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
@@ -1409,12 +1410,12 @@ inline notify::notify(std::string const& title, std::string const& message, icon
|
||||
}
|
||||
|
||||
ENUMRESNAMEPROC icon_enum_callback = [](HMODULE, LPCTSTR, LPTSTR lpName, LONG_PTR lParam) -> BOOL {
|
||||
((NOTIFYICONDATAW*)lParam)->hIcon = ::LoadIcon(GetModuleHandle(nullptr), lpName);
|
||||
((NOTIFYICONDATAW*) lParam)->hIcon = ::LoadIcon(GetModuleHandle(nullptr), lpName);
|
||||
return false;
|
||||
};
|
||||
|
||||
nid->hIcon = ::LoadIcon(nullptr, IDI_APPLICATION);
|
||||
::EnumResourceNames(nullptr, RT_GROUP_ICON, icon_enum_callback, (LONG_PTR)nid.get());
|
||||
::EnumResourceNames(nullptr, RT_GROUP_ICON, icon_enum_callback, (LONG_PTR) nid.get());
|
||||
|
||||
nid->uTimeout = 5000;
|
||||
|
||||
@@ -1425,8 +1426,8 @@ inline notify::notify(std::string const& title, std::string const& message, icon
|
||||
Shell_NotifyIconW(NIM_ADD, nid.get());
|
||||
#elif __EMSCRIPTEN__
|
||||
// FIXME: do something
|
||||
(void)title;
|
||||
(void)message;
|
||||
(void) title;
|
||||
(void) message;
|
||||
#else
|
||||
auto command = desktop_helper();
|
||||
|
||||
@@ -1767,4 +1768,4 @@ inline std::string select_folder::result() {
|
||||
|
||||
#endif // PFD_SKIP_IMPLEMENTATION
|
||||
|
||||
} // namespace pfd
|
||||
} // namespace pfd
|
||||
|
||||
+1
-1
@@ -56,7 +56,7 @@ typedef struct {
|
||||
/* 0x048 */ TrainCarStuff passengerCars[NUM_PASSENGER_CAR_ENTRIES];
|
||||
/* 0x0FC */ f32 speed;
|
||||
/* 0x100 */ s32 someFlags;
|
||||
s32 numCarriages;
|
||||
s32 numCarriages;
|
||||
/* 0x104 */ s32 numCars; // Non-locomotive car count?
|
||||
/* 0x108 */ s32 unused; // Not read or written. Could be padding?
|
||||
} TrainStuff; // size = 0x10C
|
||||
|
||||
@@ -32,7 +32,7 @@ void render_actor_kiwano_fruit(UNUSED Camera* camera, Mat4 arg1, struct Actor* a
|
||||
// Animate actor by creating an index from rot[0]. Divide by texture size to get whole number 0-2.
|
||||
// All three animated textures need to be the same size for this to work.
|
||||
size_t idx = (actor->rot[0] << 0xA) / ResourceGetTexSizeByName(gTextureDksJungleParkwayKiwanoFruit1);
|
||||
switch(idx) {
|
||||
switch (idx) {
|
||||
case 0:
|
||||
addr = gTextureDksJungleParkwayKiwanoFruit1;
|
||||
break;
|
||||
@@ -44,7 +44,7 @@ void render_actor_kiwano_fruit(UNUSED Camera* camera, Mat4 arg1, struct Actor* a
|
||||
break;
|
||||
}
|
||||
|
||||
//addr = segmented_texture_to_virtual((actor->rot[0] << 0xA) + 0x03009000);
|
||||
// addr = segmented_texture_to_virtual((actor->rot[0] << 0xA) + 0x03009000);
|
||||
gDPLoadTextureBlock(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(addr), G_IM_FMT_CI, G_IM_SIZ_8b, 32, 32, 0,
|
||||
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
|
||||
G_TX_NOLOD);
|
||||
|
||||
+1
-1
@@ -94,7 +94,7 @@ void render_limb_or_add_mtx(Armature* arg0, s16* arg1, AnimationLimbVector arg2,
|
||||
}
|
||||
|
||||
mtxf_translate_rotate2(modelMatrix, pos, angle);
|
||||
//convert_to_fixed_point_matrix_animation(&gGfxPool->mtxHud[gMatrixHudCount], modelMatrix);
|
||||
// convert_to_fixed_point_matrix_animation(&gGfxPool->mtxHud[gMatrixHudCount], modelMatrix);
|
||||
sMatrixStackSize += 1;
|
||||
// gSPMatrix(gDisplayListHead++, (&gGfxPool->mtxHud[gMatrixHudCount++]),
|
||||
// G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW);
|
||||
|
||||
+2
-1
@@ -12,7 +12,8 @@ void sequence_channel_process_sound(struct SequenceChannel* seqChannel, s32 reca
|
||||
s32 i;
|
||||
|
||||
if (seqChannel->changes.as_bitfields.volume || recalculateVolume) {
|
||||
channelVolume = (seqChannel->volume * (seqChannel->volumeScale * seqChannel->seqPlayer->fadeVolume)) * seqChannel->seqPlayer->gameVolume;
|
||||
channelVolume = (seqChannel->volume * (seqChannel->volumeScale * seqChannel->seqPlayer->fadeVolume)) *
|
||||
seqChannel->seqPlayer->gameVolume;
|
||||
if (seqChannel->seqPlayer->muted && (seqChannel->muteBehavior & MUTE_BEHAVIOR_SOFTEN) != 0) {
|
||||
channelVolume = seqChannel->seqPlayer->muteVolumeScale * channelVolume;
|
||||
}
|
||||
|
||||
+1
-1
@@ -664,7 +664,7 @@ void audio_reset_session(void) {
|
||||
for (var_s5 = 0; var_s5 < 4; var_s5++) {
|
||||
gSynthesisReverbs[var_s5].useReverb = 0;
|
||||
}
|
||||
|
||||
|
||||
gNumSynthesisReverbs = temp_s6->numReverbs;
|
||||
for (var_s5 = 0; var_s5 < gNumSynthesisReverbs; var_s5++) {
|
||||
reverb = &gSynthesisReverbs[var_s5];
|
||||
|
||||
@@ -558,7 +558,7 @@ struct AudioBufferParametersEU {
|
||||
* The version of that function in MK64 is significantly different
|
||||
* from its SM64 counterpart
|
||||
* Or we just have a poor understanding of this part of the system.
|
||||
**/
|
||||
**/
|
||||
|
||||
struct EuAudioCmd {
|
||||
union {
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
#define PRELOAD_BANKS 2
|
||||
#define PRELOAD_SEQUENCE 1
|
||||
|
||||
#define IS_SEQUENCE_CHANNEL_VALID(ptr) ((uintptr_t) (ptr) != (uintptr_t) &gSequenceChannelNone)
|
||||
#define IS_SEQUENCE_CHANNEL_VALID(ptr) ((uintptr_t) (ptr) != (uintptr_t) & gSequenceChannelNone)
|
||||
|
||||
struct SharedDma {
|
||||
/*0x0*/ u8* buffer; // target, points to pre-allocated buffer
|
||||
|
||||
+1
-1
@@ -1058,4 +1058,4 @@ void aUnkCmd19Impl(uint8_t f, uint16_t count, uint16_t out_addr, uint16_t in_add
|
||||
out += 32;
|
||||
nbytes -= 32 * sizeof(int16_t);
|
||||
} while (nbytes > 0);
|
||||
}
|
||||
}
|
||||
|
||||
+3
-5
@@ -45,10 +45,8 @@ void aADPCMdecImpl(uint8_t flags, ADPCM_STATE state);
|
||||
void aResampleImpl(uint8_t flags, uint16_t pitch, RESAMPLE_STATE state);
|
||||
void aEnvSetup1Impl(uint8_t initial_vol_wet, uint16_t rate_wet, uint16_t rate_left, uint16_t rate_right);
|
||||
void aEnvSetup2Impl(uint16_t initial_vol_left, uint16_t initial_vol_right);
|
||||
void aEnvMixerImpl(uint16_t in_addr, uint16_t n_samples, bool swap_reverb,
|
||||
bool neg_left, bool neg_right,
|
||||
uint16_t dry_left_addr, uint16_t dry_right_addr,
|
||||
uint16_t wet_left_addr, uint16_t wet_right_addr);
|
||||
void aEnvMixerImpl(uint16_t in_addr, uint16_t n_samples, bool swap_reverb, bool neg_left, bool neg_right,
|
||||
uint16_t dry_left_addr, uint16_t dry_right_addr, uint16_t wet_left_addr, uint16_t wet_right_addr);
|
||||
void aMixImpl(int16_t gain, uint16_t in_addr, uint16_t out_addr, uint16_t count);
|
||||
void aS8DecImpl(uint8_t flags, ADPCM_STATE state);
|
||||
void aAddMixerImpl(uint16_t count, uint16_t in_addr, uint16_t out_addr);
|
||||
@@ -91,4 +89,4 @@ void aUnkCmd19Impl(uint8_t f, uint16_t count, uint16_t out_addr, uint16_t in_add
|
||||
#define aDownsampleHalf(pkt, nSamples, i, o) aDownsampleHalfImpl(nSamples, i, o)
|
||||
#define aHiLoGain(pkt, g, buflen, i, a4) aHiLoGainImpl(g, buflen, i)
|
||||
#define aUnkCmd3(pkt, a1, a2, a3) aUnkCmd3Impl(a1, a2, a3)
|
||||
#define aUnkCmd19(pkt, a1, a2, a3, a4) aUnkCmd19Impl(a1, a2, a3, a4)
|
||||
#define aUnkCmd19(pkt, a1, a2, a3, a4) aUnkCmd19Impl(a1, a2, a3, a4)
|
||||
|
||||
+10
-9
@@ -733,14 +733,15 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer* layer) {
|
||||
if (seqChannel) {}
|
||||
}
|
||||
|
||||
u8 get_instrument(struct SequenceChannel *seqChannel, u8 instId, struct Instrument **instOut, struct AdsrSettings *adsr) {
|
||||
struct CtlEntry *bank = GameEngine_LoadBank(seqChannel->bankId);
|
||||
if(instId >= bank->numInstruments) {
|
||||
u8 get_instrument(struct SequenceChannel* seqChannel, u8 instId, struct Instrument** instOut,
|
||||
struct AdsrSettings* adsr) {
|
||||
struct CtlEntry* bank = GameEngine_LoadBank(seqChannel->bankId);
|
||||
if (instId >= bank->numInstruments) {
|
||||
*instOut = NULL;
|
||||
return 0;
|
||||
}
|
||||
struct Instrument* inst = bank->instruments[instId];
|
||||
if(inst == NULL) {
|
||||
if (inst == NULL) {
|
||||
*instOut = NULL;
|
||||
return 0;
|
||||
}
|
||||
@@ -911,9 +912,9 @@ void sequence_channel_process_script(struct SequenceChannel* seqChannel) {
|
||||
|
||||
case 0xEB: {
|
||||
cmd = m64_read_u8(state);
|
||||
struct AudioSequenceData *sequence = GameEngine_LoadSequence(seqPlayer->seqId);
|
||||
struct AudioSequenceData* sequence = GameEngine_LoadSequence(seqPlayer->seqId);
|
||||
cmd = sequence->banks[cmd];
|
||||
if(IS_BANK_LOAD_COMPLETE(cmd)) {
|
||||
if (IS_BANK_LOAD_COMPLETE(cmd)) {
|
||||
seqChannel->bankId = cmd;
|
||||
}
|
||||
}
|
||||
@@ -1009,9 +1010,9 @@ void sequence_channel_process_script(struct SequenceChannel* seqChannel) {
|
||||
|
||||
case 0xC6: {
|
||||
cmd = m64_read_u8(state);
|
||||
struct AudioSequenceData *sequence = GameEngine_LoadSequence(seqPlayer->seqId);
|
||||
struct AudioSequenceData* sequence = GameEngine_LoadSequence(seqPlayer->seqId);
|
||||
cmd = sequence->banks[cmd];
|
||||
if(IS_BANK_LOAD_COMPLETE(cmd)) {
|
||||
if (IS_BANK_LOAD_COMPLETE(cmd)) {
|
||||
seqChannel->bankId = cmd;
|
||||
}
|
||||
break;
|
||||
@@ -1214,7 +1215,7 @@ void sequence_player_process_sequence(struct SequencePlayer* seqPlayer) {
|
||||
if (seqPlayer->enabled == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
GameEngine_LoadSequence(seqPlayer->seqId);
|
||||
GameEngine_LoadBank(seqPlayer->defaultBank[0]);
|
||||
|
||||
|
||||
@@ -474,7 +474,8 @@ Acmd* synthesis_process_note(s32 noteIndex, struct NoteSubEu* noteSubEu, struct
|
||||
} else {
|
||||
var_a0_2 = (temp_t6 * 9) + sampleAddr;
|
||||
// var_a0_2 =
|
||||
// dma_sample_data((uintptr_t) (temp_t6 * 9) + sampleAddr, ALIGN(((loopInfo_2 * 9) + 16), 4),
|
||||
// dma_sample_data((uintptr_t) (temp_t6 * 9) + sampleAddr, ALIGN(((loopInfo_2 * 9) + 16),
|
||||
// 4),
|
||||
// flags, &synthesisState->sampleDmaIndex);
|
||||
// unsure flags?
|
||||
}
|
||||
@@ -576,7 +577,7 @@ Acmd* synthesis_process_note(s32 noteIndex, struct NoteSubEu* noteSubEu, struct
|
||||
resampledTempLen + DMEM_ADDR_RESAMPLED);
|
||||
break;
|
||||
}
|
||||
//break;
|
||||
// break;
|
||||
}
|
||||
if (noteSubEu->finished != false) {
|
||||
break;
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
#define DMEM_ADDR_WET_LEFT_CH 0x840
|
||||
#define DMEM_ADDR_WET_RIGHT_CH 0x9C0
|
||||
|
||||
|
||||
/*
|
||||
Its not clear what values these macros should have. Neither version seem to
|
||||
line up for MK64. Maybe each game has unique values for these? I don't know
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@ typedef struct {
|
||||
/* 0xB0 */ s16 unk_B0;
|
||||
/* 0xB2 */ s16 unk_B2;
|
||||
/* 0xB4 */ f32 unk_B4;
|
||||
size_t cameraId;
|
||||
size_t cameraId;
|
||||
} Camera; /* size = 0xB8 */
|
||||
|
||||
void camera_init(f32, f32, f32, s16, u32, s32);
|
||||
|
||||
+2
-1
@@ -108,7 +108,8 @@ extern uintptr_t gHeapEndPtr;
|
||||
* This allows players to retry or reset a course without reloading the whole course.
|
||||
* Memory allocated after course load is not zeroed or reset. But should get overwritten by future allocations.
|
||||
*
|
||||
* This is a relatively unsafe way to architect a memory pool as old memory could accidentally be used if future allocations do not zero or fully overwrite their free memory.
|
||||
* This is a relatively unsafe way to architect a memory pool as old memory could accidentally be used if future
|
||||
* allocations do not zero or fully overwrite their free memory.
|
||||
*/
|
||||
extern uintptr_t gFreeMemoryCourseAnchor;
|
||||
extern uintptr_t gFreeMemoryResetAnchor;
|
||||
|
||||
+43
-37
@@ -1539,8 +1539,8 @@ void update_vehicles(void) {
|
||||
generate_player_smoke();
|
||||
D_8016337C++;
|
||||
|
||||
//CM_TickBombKarts();
|
||||
//CM_VehiclesTick();
|
||||
// CM_TickBombKarts();
|
||||
// CM_VehiclesTick();
|
||||
}
|
||||
|
||||
void func_800098FC(s32 arg0, Player* player) {
|
||||
@@ -1664,16 +1664,16 @@ void func_80009B60(s32 playerId) {
|
||||
if (!(player->unk_0CA & 2) && !(player->unk_0CA & 8)) {
|
||||
D_80163448 = gPathIndexByPlayerId[playerId];
|
||||
func_80008DC0(D_80163448);
|
||||
//if (GetCourse() == GetKalimariDesert()) {
|
||||
CM_VehicleCollision(playerId, player);
|
||||
//func_80012DC0(playerId, player);
|
||||
if (playerId == 0) {
|
||||
CM_CrossingTrigger();
|
||||
//func_80013054();
|
||||
}
|
||||
// if (GetCourse() == GetKalimariDesert()) {
|
||||
CM_VehicleCollision(playerId, player);
|
||||
// func_80012DC0(playerId, player);
|
||||
if (playerId == 0) {
|
||||
CM_CrossingTrigger();
|
||||
// func_80013054();
|
||||
}
|
||||
//}
|
||||
if (GetCourse() == GetDkJungle()) {
|
||||
//func_80013854(player);
|
||||
// func_80013854(player);
|
||||
} else if (GetCourse() == GetToadsTurnpike()) {
|
||||
func_800148C4(playerId, player);
|
||||
func_80014A18(playerId, player);
|
||||
@@ -1760,7 +1760,7 @@ void func_80009B60(s32 playerId) {
|
||||
D_80163210[playerId] = CM_GetProps()->D_0D009568[gCCSelection];
|
||||
}
|
||||
CM_AICrossingBehaviour(playerId);
|
||||
//check_ai_crossing_distance(playerId);
|
||||
// check_ai_crossing_distance(playerId);
|
||||
func_8000D3B8(playerId);
|
||||
func_8000D438(playerId, D_801630E0);
|
||||
temp_f0 = D_80162FA0[0] - player->pos[0];
|
||||
@@ -1974,7 +1974,7 @@ void func_80009B60(s32 playerId) {
|
||||
player->effects &= ~0x00200000;
|
||||
D_80163210[playerId] = D_8016320C;
|
||||
CM_AICrossingBehaviour(playerId);
|
||||
//check_ai_crossing_distance(playerId);
|
||||
// check_ai_crossing_distance(playerId);
|
||||
func_80008424(playerId, D_8016320C, player);
|
||||
}
|
||||
}
|
||||
@@ -2907,7 +2907,7 @@ void set_bomb_kart_spawn_positions(void) {
|
||||
BombKartSpawn* bombKartSpawn;
|
||||
|
||||
for (var_s3 = 0; var_s3 < NUM_BOMB_KARTS_VERSUS; var_s3++) {
|
||||
//bombKartSpawn = &gBombKartSpawns[gCurrentCourseId][var_s3];
|
||||
// bombKartSpawn = &gBombKartSpawns[gCurrentCourseId][var_s3];
|
||||
if (GetCourse() == GetYoshiValley()) {
|
||||
startingXPos = bombKartSpawn->startingXPos;
|
||||
startingZPos = bombKartSpawn->startingZPos;
|
||||
@@ -3447,7 +3447,7 @@ void func_8000F2DC(void) {
|
||||
|
||||
CM_ClearVehicles();
|
||||
|
||||
//set_bomb_kart_spawn_positions();
|
||||
// set_bomb_kart_spawn_positions();
|
||||
func_8000EEDC();
|
||||
}
|
||||
|
||||
@@ -3639,7 +3639,8 @@ void func_800100F0(s32 pathIndex) {
|
||||
|
||||
TrackWaypoint* pathSrc = CM_GetProps()->PathTable2[pathIndex];
|
||||
if (pathSrc == NULL) {
|
||||
printf("code_80005FD0.c: Path %d in Course::PathTable2, was NULL.\n Your track is missing a path\n", pathIndex);
|
||||
printf("code_80005FD0.c: Path %d in Course::PathTable2, was NULL.\n Your track is missing a path\n",
|
||||
pathIndex);
|
||||
}
|
||||
|
||||
var_v0 = process_path_data(pathDest, pathSrc);
|
||||
@@ -4152,10 +4153,10 @@ void kart_ai_behaviour_start(s32 playerId, Player* player) {
|
||||
s32 behaviourType;
|
||||
UNUSED s32 test;
|
||||
|
||||
KartAIBehaviour *beh = (KartAIBehaviour*)LOAD_ASSET(CM_GetProps()->AIBehaviour);
|
||||
KartAIBehaviour* beh = (KartAIBehaviour*) LOAD_ASSET(CM_GetProps()->AIBehaviour);
|
||||
|
||||
sCurrentKartAIBehaviour =
|
||||
&((KartAIBehaviour*)LOAD_ASSET(CM_GetProps()->AIBehaviour))[gCurrentKartAIBehaviourId[playerId]];
|
||||
sCurrentKartAIBehaviour =
|
||||
&((KartAIBehaviour*) LOAD_ASSET(CM_GetProps()->AIBehaviour))[gCurrentKartAIBehaviourId[playerId]];
|
||||
|
||||
playerWaypoint = gNearestWaypointByPlayerId[playerId];
|
||||
|
||||
@@ -4219,8 +4220,8 @@ void kart_ai_behaviour_end(s32 playerIndex, Player* player) {
|
||||
u32 waypointEnd;
|
||||
s32 behaviourType;
|
||||
|
||||
sCurrentKartAIBehaviour = &(
|
||||
(KartAIBehaviour*) LOAD_ASSET(CM_GetProps()->AIBehaviour))[gPreviousKartAIBehaviourId[playerIndex]];
|
||||
sCurrentKartAIBehaviour =
|
||||
&((KartAIBehaviour*) LOAD_ASSET(CM_GetProps()->AIBehaviour))[gPreviousKartAIBehaviourId[playerIndex]];
|
||||
nearestWaypoint = gNearestWaypointByPlayerId[playerIndex];
|
||||
behaviourType = sCurrentKartAIBehaviour->type;
|
||||
waypointEnd = sCurrentKartAIBehaviour->waypointEnd;
|
||||
@@ -4330,7 +4331,8 @@ void generate_ferry_waypoints(void) {
|
||||
D_80162EB2 = -40;
|
||||
}
|
||||
|
||||
void spawn_vehicle_on_road(Vec3f position, Vec3s rotation, Vec3f velocity, s32 waypointIndex, s32 someMultiplierTheSequel, f32 speed) {
|
||||
void spawn_vehicle_on_road(Vec3f position, Vec3s rotation, Vec3f velocity, s32 waypointIndex,
|
||||
s32 someMultiplierTheSequel, f32 speed) {
|
||||
f32 origXPos;
|
||||
UNUSED f32 pad;
|
||||
f32 origZPos;
|
||||
@@ -4338,14 +4340,12 @@ void spawn_vehicle_on_road(Vec3f position, Vec3s rotation, Vec3f velocity, s32 w
|
||||
origXPos = position[0];
|
||||
origZPos = position[2];
|
||||
if (D_8016347A == 0) {
|
||||
func_8000D6D0(position, (s16*) &waypointIndex, speed,
|
||||
someMultiplierTheSequel, 0, 3);
|
||||
func_8000D6D0(position, (s16*) &waypointIndex, speed, someMultiplierTheSequel, 0, 3);
|
||||
rotation[0] = 0;
|
||||
rotation[1] = -0x8000;
|
||||
rotation[2] = 0;
|
||||
} else {
|
||||
func_8000D940(position, (s16*) &waypointIndex, speed,
|
||||
someMultiplierTheSequel, 0);
|
||||
func_8000D940(position, (s16*) &waypointIndex, speed, someMultiplierTheSequel, 0);
|
||||
rotation[0] = 0;
|
||||
rotation[1] = 0;
|
||||
rotation[2] = 0;
|
||||
@@ -4379,9 +4379,9 @@ void init_vehicles_trains(size_t i, size_t numCarriages, f32 speed) {
|
||||
|
||||
gTrainList[i].numCarriages = numCarriages;
|
||||
|
||||
//for (i = 0; i < NUM_TRAINS; i++) {
|
||||
// outputs 160 or 392 depending on the train.
|
||||
// Wraps the value around to always output a valid waypoint.
|
||||
// for (i = 0; i < NUM_TRAINS; i++) {
|
||||
// outputs 160 or 392 depending on the train.
|
||||
// Wraps the value around to always output a valid waypoint.
|
||||
waypointOffset = (((i * gVehicle2DWaypointLength) / 2) + 160) % gVehicle2DWaypointLength;
|
||||
|
||||
// 120.0f is about the maximum usable value
|
||||
@@ -5891,12 +5891,14 @@ void func_80017054(Camera* camera, UNUSED Player* player, UNUSED s32 index, s32
|
||||
sp58 = gWaypointCountByPathIndex[pathIndex];
|
||||
D_80163238 = playerId;
|
||||
sp56 = gNearestWaypointByCameraId[cameraId];
|
||||
gNearestWaypointByCameraId[cameraId] = func_8000D33C(camera->pos[0], camera->pos[1], camera->pos[2], gNearestWaypointByCameraId[cameraId], pathIndex);
|
||||
gNearestWaypointByCameraId[cameraId] =
|
||||
func_8000D33C(camera->pos[0], camera->pos[1], camera->pos[2], gNearestWaypointByCameraId[cameraId], pathIndex);
|
||||
// if (GetCourse() == GetYoshiValley()) {
|
||||
if (gCurrentCourseId == 4) {
|
||||
if ((sp56 != gNearestWaypointByCameraId[cameraId]) && (gNearestWaypointByCameraId[cameraId] == 1)) {
|
||||
pathIndex = (D_80163DD8[cameraId] = random_int(4U));
|
||||
gNearestWaypointByCameraId[cameraId] = func_8000D33C(camera->pos[0], camera->pos[1], camera->pos[2], gNearestWaypointByCameraId[cameraId], pathIndex);
|
||||
gNearestWaypointByCameraId[cameraId] = func_8000D33C(camera->pos[0], camera->pos[1], camera->pos[2],
|
||||
gNearestWaypointByCameraId[cameraId], pathIndex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5923,13 +5925,13 @@ void func_80017054(Camera* camera, UNUSED Player* player, UNUSED s32 index, s32
|
||||
camX += D_80162FA0[0] * 0.5;
|
||||
camZ += D_80162FA0[2] * 0.5;
|
||||
camY = (D_80164550[pathIndex][waypoint1].posY + D_80164550[pathIndex][waypoint2].posY) * 0.5f;
|
||||
|
||||
|
||||
diffX = camX - D_801645F8[cameraId];
|
||||
diffY = camY - D_80164618[cameraId];
|
||||
diffZ = camZ - D_80164638[cameraId];
|
||||
// magnitude
|
||||
#define SQ(x) (x * x)
|
||||
distance = sqrtf(SQ(diffX) + SQ(diffY) + SQ(diffZ) );
|
||||
// magnitude
|
||||
#define SQ(x) (x * x)
|
||||
distance = sqrtf(SQ(diffX) + SQ(diffY) + SQ(diffZ));
|
||||
if (distance != 0.0) {
|
||||
diffX = D_801645F8[cameraId] + ((D_80164648[cameraId] * diffX) / distance);
|
||||
diffY = D_80164618[cameraId] + ((D_80164648[cameraId] * diffY) / distance);
|
||||
@@ -5945,10 +5947,14 @@ void func_80017054(Camera* camera, UNUSED Player* player, UNUSED s32 index, s32
|
||||
camera->pos[2] = diffZ;
|
||||
}
|
||||
|
||||
//camera->pos[0] = camX;
|
||||
// camera->pos[0] = camX;
|
||||
camera->pos[1] = diffY + 10.0; // Set camera 10 points above the ground
|
||||
|
||||
if (1) { } if (1) { } if (1) { } if (1) { } if (1) { }
|
||||
|
||||
if (1) {}
|
||||
if (1) {}
|
||||
if (1) {}
|
||||
if (1) {}
|
||||
if (1) {}
|
||||
D_801645F8[cameraId] = diffX;
|
||||
D_80164638[cameraId] = diffZ;
|
||||
D_80164618[cameraId] = camY;
|
||||
|
||||
+2
-2
@@ -769,7 +769,7 @@ void render_object_for_player(s32 cameraId) {
|
||||
render_object_leaf_particle(cameraId);
|
||||
|
||||
if (D_80165730 != 0) {
|
||||
//render_balloons_grand_prix(cameraId);
|
||||
// render_balloons_grand_prix(cameraId);
|
||||
}
|
||||
if (gModeSelection == BATTLE) {
|
||||
CM_DrawBattleBombKarts(cameraId);
|
||||
@@ -1632,7 +1632,7 @@ void update_object(void) {
|
||||
// update_ferries_smoke_particle();
|
||||
// break;
|
||||
// }
|
||||
//if (D_80165730 != 0) {
|
||||
// if (D_80165730 != 0) {
|
||||
// func_80074EE8(); // Grand prix balloons
|
||||
//}
|
||||
func_80076F2C();
|
||||
|
||||
+7
-5
@@ -166,7 +166,7 @@ void func_8006EEE8(s32 courseId) {
|
||||
D_8018D240 = (uintptr_t) CM_GetProps()->Minimap.Texture;
|
||||
// This is incredibly dumb. MinimapDimensions ought to be something more like
|
||||
// `u16 MinimapDimensions[][2]` but that doesn't match for some insane reason
|
||||
gMinimapWidth = CM_GetProps()->Minimap.Width; // MinimapDimensions[courseId * 2];
|
||||
gMinimapWidth = CM_GetProps()->Minimap.Width; // MinimapDimensions[courseId * 2];
|
||||
gMinimapHeight = CM_GetProps()->Minimap.Height; // MinimapDimensions[courseId * 2 + 1];
|
||||
}
|
||||
|
||||
@@ -197,10 +197,12 @@ void func_8006F008(void) {
|
||||
|
||||
// Flip the minimap player markers
|
||||
if (gIsMirrorMode != 0) {
|
||||
CM_GetProps()->Minimap.PlayerX = CM_GetProps()->Minimap.Width - CM_GetProps()->Minimap.PlayerX; // gMinimapPlayerX = gMinimapWidth - gMinimapPlayerX
|
||||
CM_GetProps()->Minimap.PlayerX =
|
||||
CM_GetProps()->Minimap.Width -
|
||||
CM_GetProps()->Minimap.PlayerX; // gMinimapPlayerX = gMinimapWidth - gMinimapPlayerX
|
||||
}
|
||||
|
||||
switch(gPlayerCount) {
|
||||
switch (gPlayerCount) {
|
||||
case 2:
|
||||
// Set X coord
|
||||
if (GetCourse() != GetToadsTurnpike()) {
|
||||
@@ -265,7 +267,7 @@ void func_8006F8CC(void) {
|
||||
D_801657F0 = 1;
|
||||
D_80165800[0] = D_80165800[1] = 0;
|
||||
}
|
||||
|
||||
|
||||
CM_GetProps()->Minimap.Pos[0].Y = 65;
|
||||
CM_GetProps()->Minimap.Pos[1].Y = 180;
|
||||
}
|
||||
@@ -494,7 +496,7 @@ void init_cloud_object(s32 objectIndex, s32 arg1, CloudData* arg2) {
|
||||
temp_v0->direction_angle[1] = arg2->rotY;
|
||||
temp_v0->unk_09E = arg2->posY;
|
||||
temp_v0->sizeScaling = (f32) arg2->scalePercent / 100.0;
|
||||
temp_v0->activeTexture = ((u8(*)[1024])CM_GetProps()->CloudTexture)[arg2->subType];
|
||||
temp_v0->activeTexture = ((u8(*)[1024]) CM_GetProps()->CloudTexture)[arg2->subType];
|
||||
func_80073404(objectIndex, 0x40U, 0x20U, D_0D005FB0);
|
||||
temp_v0->primAlpha = 0x00FF;
|
||||
}
|
||||
|
||||
@@ -19,25 +19,23 @@ TrackWaypoint nullPath = { 0x8000, 0x0000, 0x0000, 0x0000 };
|
||||
// But I cannot be bothered to figure it out
|
||||
// Used as a ptr in D_800DCBB4
|
||||
s16 gAIDistances[] = {
|
||||
0x0014, 0x0005, 0x000a, 0x000f, 0x0014, 0x0019, 0x001e, 0x0023,
|
||||
0x001e, 0x0019, 0x0032, 0x004b, 0x0064, 0x007d, 0x0096, 0x00af,
|
||||
0x0028, 0x001e, 0x003c, 0x005a, 0x0078, 0x0096, 0x00b4, 0x00d2,
|
||||
0x0032, 0x0028, 0x0050, 0x0078, 0x00a0, 0x00c8, 0x00f0, 0x0118,
|
||||
0x0014, 0x0005, 0x000a, 0x000f, 0x0014, 0x0019, 0x001e, 0x0023, 0x001e, 0x0019, 0x0032,
|
||||
0x004b, 0x0064, 0x007d, 0x0096, 0x00af, 0x0028, 0x001e, 0x003c, 0x005a, 0x0078, 0x0096,
|
||||
0x00b4, 0x00d2, 0x0032, 0x0028, 0x0050, 0x0078, 0x00a0, 0x00c8, 0x00f0, 0x0118,
|
||||
};
|
||||
|
||||
// Used as a ptr in D_800DCBB4
|
||||
s16 gMarioRacewayAIDistances[] = {
|
||||
0x0014, 0x0005, 0x000a, 0x000f, 0x0014, 0x0019, 0x001e, 0x0023,
|
||||
0x001e, 0x0019, 0x002d, 0x0041, 0x005a, 0x0073, 0x008c, 0x00a5,
|
||||
0x0028, 0x0003, 0x0006, 0x0010, 0x002e, 0x0031, 0x003b, 0x0059,
|
||||
0x0032, 0x001e, 0x003c, 0x003f, 0x0049, 0x004e, 0x006c, 0x008a,
|
||||
0x0014, 0x0005, 0x000a, 0x000f, 0x0014, 0x0019, 0x001e, 0x0023, 0x001e, 0x0019, 0x002d,
|
||||
0x0041, 0x005a, 0x0073, 0x008c, 0x00a5, 0x0028, 0x0003, 0x0006, 0x0010, 0x002e, 0x0031,
|
||||
0x003b, 0x0059, 0x0032, 0x001e, 0x003c, 0x003f, 0x0049, 0x004e, 0x006c, 0x008a,
|
||||
};
|
||||
|
||||
s16 some_data[] = { // Not sure what this is for
|
||||
0x000a, 0x0005, 0x000a, 0x000f, 0x0014, 0x0019, 0x001e, 0x0023,
|
||||
0x000a, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005,
|
||||
0x000a, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005,
|
||||
0x000a, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005,
|
||||
s16 some_data[] = {
|
||||
// Not sure what this is for
|
||||
0x000a, 0x0005, 0x000a, 0x000f, 0x0014, 0x0019, 0x001e, 0x0023, 0x000a, 0x0005, 0x0005,
|
||||
0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x000a, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005,
|
||||
0x0005, 0x0005, 0x000a, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005,
|
||||
};
|
||||
|
||||
s32 D_800DDB20 = 0x00000000;
|
||||
|
||||
@@ -522,7 +522,8 @@ SplineData D_800E5D78 = {
|
||||
|
||||
// Note the use of the plain SplineData type here. Since these are pointers, we don't care
|
||||
// about their internal array size
|
||||
SplineData* D_800E5D9C[] = { &D_800E5988, &D_800E5A44, &D_800E5B08, &D_800E5BD4, &D_800E5C90, &boo6, &boo7, &boo8, &boo9, &boo10 };
|
||||
SplineData* D_800E5D9C[] = { &D_800E5988, &D_800E5A44, &D_800E5B08, &D_800E5BD4, &D_800E5C90,
|
||||
&boo6, &boo7, &boo8, &boo9, &boo10 };
|
||||
|
||||
// Unused
|
||||
SplineData* D_800E5DB0 = &D_800E5988;
|
||||
|
||||
+1290
-1290
File diff suppressed because it is too large
Load Diff
@@ -1582,10 +1582,11 @@ void ceremony_transition_sliding_borders(void) {
|
||||
gDPSetCycleType(gDisplayListHead++, G_CYC_FILL);
|
||||
gDPSetFillColor(gDisplayListHead++, (GPACK_RGBA5551(0, 0, 0, 1) << 16 | GPACK_RGBA5551(0, 0, 0, 1)));
|
||||
|
||||
gDPFillWideRectangle(gDisplayListHead++, OTRGetRectDimensionFromLeftEdge(0), 0, OTRGetGameRenderWidth(), (s32)lry);
|
||||
gDPFillWideRectangle(gDisplayListHead++, OTRGetRectDimensionFromLeftEdge(0), (s32)uly, OTRGetGameRenderWidth(), 239);
|
||||
//gDPFillRectangle(gDisplayListHead++, 0, 0, 319, (s32) lry);
|
||||
//gDPFillRectangle(gDisplayListHead++, 0, (s32) uly, 319, 239);
|
||||
gDPFillWideRectangle(gDisplayListHead++, OTRGetRectDimensionFromLeftEdge(0), 0, OTRGetGameRenderWidth(), (s32) lry);
|
||||
gDPFillWideRectangle(gDisplayListHead++, OTRGetRectDimensionFromLeftEdge(0), (s32) uly, OTRGetGameRenderWidth(),
|
||||
239);
|
||||
// gDPFillRectangle(gDisplayListHead++, 0, 0, 319, (s32) lry);
|
||||
// gDPFillRectangle(gDisplayListHead++, 0, (s32) uly, 319, 239);
|
||||
|
||||
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
|
||||
adjust_f32_value_transition(&gSizeSlidingBorders, gOrderedSizeSlidingBorders, D_802856BC / D_802856B4);
|
||||
|
||||
@@ -57,7 +57,8 @@ void func_80280038(void) {
|
||||
func_80057FC4(0);
|
||||
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH);
|
||||
guPerspective(&gGfxPool->mtxPersp[0], &perspNorm, gCameraZoom[0], gScreenAspect, CM_GetProps()->NearPersp, CM_GetProps()->FarPersp, 1.0f);
|
||||
guPerspective(&gGfxPool->mtxPersp[0], &perspNorm, gCameraZoom[0], gScreenAspect, CM_GetProps()->NearPersp,
|
||||
CM_GetProps()->FarPersp, 1.0f);
|
||||
gSPPerspNormalize(gDisplayListHead++, perspNorm);
|
||||
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPersp[0]),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
|
||||
|
||||
@@ -72,8 +72,8 @@ void func_80281D00(void) {
|
||||
}
|
||||
func_8028150C();
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH);
|
||||
guPerspective((Mtx*) &gGfxPool->mtxPersp[0], &perspNorm, gCameraZoom[0], gScreenAspect, CM_GetProps()->NearPersp, CM_GetProps()->FarPersp,
|
||||
1.0f);
|
||||
guPerspective((Mtx*) &gGfxPool->mtxPersp[0], &perspNorm, gCameraZoom[0], gScreenAspect, CM_GetProps()->NearPersp,
|
||||
CM_GetProps()->FarPersp, 1.0f);
|
||||
gSPPerspNormalize(gDisplayListHead++, perspNorm);
|
||||
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxPersp[0]),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
|
||||
|
||||
@@ -19,7 +19,7 @@ typedef struct {
|
||||
/* 0x0C */ s8 slideDirection; // 0 for slide right, 1 for slide left. May have other uses/effects
|
||||
/* 0x0D */ s8 textColor;
|
||||
/* 0x0E */ s16 padding; // Always seems to be 0, never read (that I can see)
|
||||
} CreditsRenderInfo; // size = 0x10
|
||||
} CreditsRenderInfo; // size = 0x10
|
||||
|
||||
extern CreditsRenderInfo gTextCreditsRenderInfo[]; // gTextCreditsRenderInfo
|
||||
extern char* gCreditsText[];
|
||||
|
||||
+13
-7
@@ -7,30 +7,36 @@ extern "C" {
|
||||
#include "math_util.h"
|
||||
}
|
||||
|
||||
AActor::AActor() {}
|
||||
AActor::AActor() {
|
||||
}
|
||||
|
||||
// Virtual functions to be overridden by derived classes
|
||||
void AActor::Tick() { }
|
||||
void AActor::Draw(Camera *camera) {
|
||||
void AActor::Tick() {
|
||||
}
|
||||
void AActor::Draw(Camera* camera) {
|
||||
if (Model) {
|
||||
Mat4 mtx;
|
||||
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
|
||||
|
||||
ApplyMatrixTransformations(mtx, *(FVector*)Pos, *(IRotator*)Rot, Scale);
|
||||
ApplyMatrixTransformations(mtx, *(FVector*) Pos, *(IRotator*) Rot, Scale);
|
||||
if (render_set_position(mtx, 0) != 0) {
|
||||
gSPDisplayList(gDisplayListHead++, Model);
|
||||
}
|
||||
}
|
||||
}
|
||||
void AActor::Collision(Player* player, AActor* actor) {}
|
||||
void AActor::VehicleCollision(s32 playerId, Player* player){}
|
||||
void AActor::Collision(Player* player, AActor* actor) {
|
||||
}
|
||||
void AActor::VehicleCollision(s32 playerId, Player* player) {
|
||||
}
|
||||
void AActor::Destroy() {
|
||||
// Set uuid to zero.
|
||||
memset(uuid, 0, sizeof(uuid));
|
||||
}
|
||||
bool AActor::IsMod() { return false; }
|
||||
bool AActor::IsMod() {
|
||||
return false;
|
||||
}
|
||||
void AActor::SetLocation(FVector pos) {
|
||||
Pos[0] = pos.x;
|
||||
Pos[1] = pos.y;
|
||||
|
||||
+6
-9
@@ -9,28 +9,26 @@ extern "C" {
|
||||
#include "camera.h"
|
||||
#include "common_structs.h"
|
||||
|
||||
|
||||
class AActor {
|
||||
public:
|
||||
|
||||
public:
|
||||
/* 0x00 */ s16 Type = 0;
|
||||
/* 0x02 */ s16 Flags;
|
||||
/* 0x04 */ s16 Unk_04;
|
||||
/* 0x06 */ s16 State;
|
||||
/* 0x08 */ f32 Unk_08;
|
||||
/* 0x0C */ f32 BoundingBoxSize;
|
||||
/* 0x10 */ Vec3s Rot = {0, 0, 0};
|
||||
/* 0x10 */ Vec3s Rot = { 0, 0, 0 };
|
||||
/* 0x16 */ s16 Unk_16;
|
||||
/* 0x18 */ Vec3f Pos;
|
||||
/* 0x24 */ Vec3f Velocity = {0, 0, 0};
|
||||
/* 0x24 */ Vec3f Velocity = { 0, 0, 0 };
|
||||
/* 0x30 */ Collision Unk30;
|
||||
uint8_t uuid[16];
|
||||
const char* Name = "";
|
||||
FVector Scale = {1, 1, 1};
|
||||
FVector Scale = { 1, 1, 1 };
|
||||
|
||||
Gfx* Model = NULL;
|
||||
|
||||
virtual ~AActor() = default; // Virtual destructor for proper cleanup in derived classes
|
||||
virtual ~AActor() = default; // Virtual destructor for proper cleanup in derived classes
|
||||
|
||||
explicit AActor();
|
||||
|
||||
@@ -44,5 +42,4 @@ public:
|
||||
virtual void Destroy();
|
||||
virtual bool IsMod();
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,4 +36,3 @@
|
||||
#include "objects/Snowman.h"
|
||||
#include "objects/Podium.h"
|
||||
#include "objects/GrandPrixBalloons.h"
|
||||
|
||||
|
||||
+45
-48
@@ -5,13 +5,13 @@
|
||||
|
||||
/**
|
||||
* @file CoreMath.h
|
||||
*
|
||||
*
|
||||
* Basic vector structs for manipulating 2D and 3D coordinates
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* Applies pos, rot, and scale
|
||||
*
|
||||
*/
|
||||
@@ -38,13 +38,8 @@ struct FVector {
|
||||
return x * other.x + y * other.y + z * other.z;
|
||||
}
|
||||
|
||||
|
||||
FVector Cross(const FVector& other) const {
|
||||
return FVector(
|
||||
y * other.z - z * other.y,
|
||||
z * other.x - x * other.z,
|
||||
x * other.y - y * other.x
|
||||
);
|
||||
return FVector(y * other.z - z * other.y, z * other.x - x * other.z, x * other.y - y * other.x);
|
||||
}
|
||||
|
||||
float Magnitude() const {
|
||||
@@ -54,15 +49,15 @@ struct FVector {
|
||||
FVector Normalize() const {
|
||||
float len = std::sqrt(x * x + y * y + z * z);
|
||||
if (len > 0.0001f) {
|
||||
return FVector(
|
||||
x / len, y / len, z / len
|
||||
);
|
||||
return FVector(x / len, y / len, z / len);
|
||||
}
|
||||
return FVector(0, 0, 0);
|
||||
}
|
||||
|
||||
FVector() : x(0), y(0), z(0) {}
|
||||
FVector(float x, float y, float z) : x(x), y(y), z(z) {}
|
||||
FVector() : x(0), y(0), z(0) {
|
||||
}
|
||||
FVector(float x, float y, float z) : x(x), y(y), z(z) {
|
||||
}
|
||||
#endif // __cplusplus
|
||||
};
|
||||
|
||||
@@ -71,8 +66,10 @@ struct FVector4 {
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
FVector4() : x(0), y(0), z(0), w(0) {}
|
||||
FVector4(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) {}
|
||||
FVector4() : x(0), y(0), z(0), w(0) {
|
||||
}
|
||||
FVector4(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) {
|
||||
}
|
||||
#endif // __cplusplus
|
||||
};
|
||||
|
||||
@@ -92,8 +89,10 @@ struct FVector2D {
|
||||
return *this;
|
||||
}
|
||||
|
||||
FVector2D() : x(0), z(0) {}
|
||||
FVector2D(float x, float z) : x(x), z(z) {}
|
||||
FVector2D() : x(0), z(0) {
|
||||
}
|
||||
FVector2D(float x, float z) : x(x), z(z) {
|
||||
}
|
||||
#endif // __cplusplus
|
||||
};
|
||||
|
||||
@@ -102,10 +101,11 @@ typedef struct IVector2D {
|
||||
int32_t X, Y;
|
||||
|
||||
#ifdef __cplusplus
|
||||
IVector2D() : X(0), Y(0) {} // Default constructor
|
||||
|
||||
IVector2D(int32_t x, int32_t y) : X(x), Y(y) {} // Constructor to initialize with values
|
||||
IVector2D() : X(0), Y(0) {
|
||||
} // Default constructor
|
||||
|
||||
IVector2D(int32_t x, int32_t y) : X(x), Y(y) {
|
||||
} // Constructor to initialize with values
|
||||
|
||||
IVector2D& operator=(const IVector2D& other) {
|
||||
X = other.X;
|
||||
@@ -116,9 +116,8 @@ typedef struct IVector2D {
|
||||
} IVector2D;
|
||||
|
||||
/**
|
||||
* This struct immediately converts float pitch/yaw/roll in degrees to n64 int16_t binary angles 0-0xFFFF == 0-360 degrees
|
||||
* ToDegrees() Receive an FRotator of float degrees back.
|
||||
* Set() Set an n64 int16_t binary angles 0-0xFFFF
|
||||
* This struct immediately converts float pitch/yaw/roll in degrees to n64 int16_t binary angles 0-0xFFFF == 0-360
|
||||
* degrees ToDegrees() Receive an FRotator of float degrees back. Set() Set an n64 int16_t binary angles 0-0xFFFF
|
||||
*/
|
||||
struct IRotator {
|
||||
uint16_t pitch, yaw, roll;
|
||||
@@ -126,8 +125,8 @@ struct IRotator {
|
||||
#ifdef __cplusplus
|
||||
IRotator& operator=(const IRotator& other) {
|
||||
pitch = other.pitch;
|
||||
yaw = other.yaw;
|
||||
roll = other.roll;
|
||||
yaw = other.yaw;
|
||||
roll = other.roll;
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -137,21 +136,18 @@ struct IRotator {
|
||||
roll = r;
|
||||
}
|
||||
|
||||
IRotator() : pitch(0), yaw(0), roll(0) {}
|
||||
IRotator() : pitch(0), yaw(0), roll(0) {
|
||||
}
|
||||
IRotator(float p, float y, float r) {
|
||||
pitch = p * (UINT16_MAX / 360);
|
||||
yaw = y * (UINT16_MAX / 360);
|
||||
roll = r * (UINT16_MAX / 360);
|
||||
yaw = y * (UINT16_MAX / 360);
|
||||
roll = r * (UINT16_MAX / 360);
|
||||
}
|
||||
|
||||
// Convert to radians as FVector
|
||||
[[nodiscard]] FVector ToRadians() const {
|
||||
float scale = 2.0f * M_PI / 65536.0f;
|
||||
return FVector(
|
||||
pitch * scale,
|
||||
yaw * scale,
|
||||
roll * scale
|
||||
);
|
||||
return FVector(pitch * scale, yaw * scale, roll * scale);
|
||||
}
|
||||
#endif // __cplusplus
|
||||
};
|
||||
@@ -167,26 +163,26 @@ struct FRotator {
|
||||
#ifdef __cplusplus
|
||||
FRotator& operator=(const FRotator& other) {
|
||||
pitch = other.pitch;
|
||||
yaw = other.yaw;
|
||||
roll = other.roll;
|
||||
yaw = other.yaw;
|
||||
roll = other.roll;
|
||||
return *this;
|
||||
}
|
||||
|
||||
// Convert to binary rotator 0 --> INT16_MAX
|
||||
[[nodiscard]] IRotator ToBinary() const {
|
||||
return IRotator(
|
||||
static_cast<uint16_t>(pitch * (UINT16_MAX / 360)),
|
||||
static_cast<uint16_t>(yaw * (UINT16_MAX / 360)),
|
||||
static_cast<uint16_t>(roll * (UINT16_MAX / 360))
|
||||
);
|
||||
return IRotator(static_cast<uint16_t>(pitch * (UINT16_MAX / 360)),
|
||||
static_cast<uint16_t>(yaw * (UINT16_MAX / 360)),
|
||||
static_cast<uint16_t>(roll * (UINT16_MAX / 360)));
|
||||
}
|
||||
|
||||
FRotator() : pitch(0), yaw(0), roll(0) {}
|
||||
FRotator(float p, float y, float r) : pitch(p), yaw(y), roll(r) {}
|
||||
FRotator() : pitch(0), yaw(0), roll(0) {
|
||||
}
|
||||
FRotator(float p, float y, float r) : pitch(p), yaw(y), roll(r) {
|
||||
}
|
||||
FRotator(IRotator rot) {
|
||||
pitch = static_cast<float>(rot.pitch * (360 / UINT16_MAX));
|
||||
yaw = static_cast<float>(rot.yaw * (360 / UINT16_MAX));
|
||||
roll = static_cast<float>(rot.roll * (360 / UINT16_MAX));
|
||||
yaw = static_cast<float>(rot.yaw * (360 / UINT16_MAX));
|
||||
roll = static_cast<float>(rot.roll * (360 / UINT16_MAX));
|
||||
}
|
||||
#endif // __cplusplus
|
||||
};
|
||||
@@ -200,11 +196,12 @@ struct IPathSpan {
|
||||
|
||||
#ifdef __cplusplus
|
||||
// Default Constructor
|
||||
IPathSpan() : Start(0), End(0) {}
|
||||
IPathSpan() : Start(0), End(0) {
|
||||
}
|
||||
|
||||
// Parameterized Constructor
|
||||
IPathSpan(int InStart, int InEnd)
|
||||
: Start(InStart), End(InEnd) {}
|
||||
IPathSpan(int InStart, int InEnd) : Start(InStart), End(InEnd) {
|
||||
}
|
||||
|
||||
// Copy Assignment Operator
|
||||
IPathSpan& operator=(const IPathSpan& Other) {
|
||||
|
||||
+1
-1
@@ -42,5 +42,5 @@ size_t Cup::GetSize() {
|
||||
void Cup::ShuffleCourses() {
|
||||
// std::random_device rd;
|
||||
// std::mt19937 g(rd());
|
||||
//std::shuffle(Courses.begin(), Courses.end(), g);
|
||||
// std::shuffle(Courses.begin(), Courses.end(), g);
|
||||
}
|
||||
|
||||
+3
-3
@@ -8,10 +8,10 @@
|
||||
class Course; // <-- Forward declare
|
||||
|
||||
class Cup {
|
||||
public:
|
||||
public:
|
||||
std::string Id;
|
||||
const char* Name;
|
||||
u8 *Thumbnail;
|
||||
u8* Thumbnail;
|
||||
size_t CursorPosition = 0; // Course index in cup
|
||||
std::vector<Course*> Courses;
|
||||
|
||||
@@ -24,4 +24,4 @@ public:
|
||||
virtual void SetCourse(size_t position);
|
||||
virtual Course* GetCourse();
|
||||
virtual size_t GetSize();
|
||||
};
|
||||
};
|
||||
|
||||
@@ -3,4 +3,4 @@
|
||||
|
||||
void* GetCourse(void);
|
||||
|
||||
#endif // GAME_API_H
|
||||
#endif // GAME_API_H
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#include "World.h"
|
||||
|
||||
void RunGarbageCollector() {
|
||||
//CleanActors();
|
||||
// CleanActors();
|
||||
CleanObjects();
|
||||
CleanStaticMeshActors();
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
#include "Object.h"
|
||||
#include "World.h"
|
||||
|
||||
|
||||
void RunGarbageCollector();
|
||||
void CleanActors();
|
||||
void CleanStaticMeshActors();
|
||||
|
||||
+20
-18
@@ -40,7 +40,7 @@ void HarbourMastersIntro::HM_InitIntro() {
|
||||
|
||||
_pos = FVector(-1000, -205, -800); // -1000, -210, -800
|
||||
_rot = IRotator(-5, 100, 0);
|
||||
_scale = {0.7f, 0.7f, 0.7f};
|
||||
_scale = { 0.7f, 0.7f, 0.7f };
|
||||
|
||||
_ship2Pos = FVector(300, -210, -1960);
|
||||
_ship2Rot = IRotator(0, 45, 0);
|
||||
@@ -53,18 +53,16 @@ void HarbourMastersIntro::HM_InitIntro() {
|
||||
|
||||
_hPos = FVector(-2000, 100, -4900);
|
||||
_hRot = IRotator(0, -45.0f, 0);
|
||||
_hScale = {2.0f, 2.0f, 2.0f};
|
||||
_hScale = { 2.0f, 2.0f, 2.0f };
|
||||
|
||||
lusPos = FVector(0, -400, -614); // 12, 190, -1000
|
||||
lusRot = IRotator(0, 0, 0);
|
||||
lusScale = FVector(1, 1, 1);
|
||||
|
||||
ground_f3d_material_013_lights = gdSPDefLights1(
|
||||
0x7F, 0x30, 0x80,
|
||||
0x60, 20, 10, 0x49, 0x49, 0x49
|
||||
);
|
||||
ground_f3d_material_013_lights = gdSPDefLights1(0x7F, 0x30, 0x80, 0x60, 20, 10, 0x49, 0x49, 0x49);
|
||||
|
||||
gEditor.AddObject("lus", &lusPos, &lusRot, &lusScale, nullptr, 1, Editor::GameObject::CollisionType::BOUNDING_BOX, 10, &DespawnValue, -1);
|
||||
gEditor.AddObject("lus", &lusPos, &lusRot, &lusScale, nullptr, 1, Editor::GameObject::CollisionType::BOUNDING_BOX,
|
||||
10, &DespawnValue, -1);
|
||||
}
|
||||
|
||||
void HarbourMastersIntro::HM_TickIntro() {
|
||||
@@ -90,12 +88,14 @@ void HarbourMastersIntro::HM_TickIntro() {
|
||||
gFadeModeSelection = FADE_MODE_LOGO;
|
||||
}
|
||||
|
||||
find_and_set_tile_size((uintptr_t) ((void*)mat_water_water1), 0, _water);
|
||||
find_and_set_tile_size((uintptr_t) ((void*)mat_water_water2), _water, 0);;
|
||||
find_and_set_tile_size((uintptr_t) ((void*) mat_water_water1), 0, _water);
|
||||
find_and_set_tile_size((uintptr_t) ((void*) mat_water_water2), _water, 0);
|
||||
;
|
||||
}
|
||||
|
||||
void HarbourMastersIntro::Bob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed, f32 rollAmp, f32 rollSpeed) {
|
||||
float time = (float)gGlobalTimer;
|
||||
void HarbourMastersIntro::Bob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed,
|
||||
f32 rollAmp, f32 rollSpeed) {
|
||||
float time = (float) gGlobalTimer;
|
||||
|
||||
pos.y = -210 + bobAmp * sin(time * bobSpeed);
|
||||
|
||||
@@ -104,14 +104,15 @@ void HarbourMastersIntro::Bob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSp
|
||||
rot.roll = (rollAmp * sin(time * rollSpeed)) * (UINT16_MAX / 360);
|
||||
}
|
||||
|
||||
void HarbourMastersIntro::SpagBob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed, f32 rollAmp, f32 rollSpeed) {
|
||||
float time = (float)gGlobalTimer;
|
||||
void HarbourMastersIntro::SpagBob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed,
|
||||
f32 rollAmp, f32 rollSpeed) {
|
||||
float time = (float) gGlobalTimer;
|
||||
|
||||
pos.y = -205 + bobAmp * sin(time * bobSpeed);
|
||||
|
||||
rot.pitch = (-5 + tiltAmp * sin(time * tiltSpeed)) * (UINT16_MAX / 360);
|
||||
rot.pitch = (-5 + tiltAmp * sin(time * tiltSpeed)) * (UINT16_MAX / 360);
|
||||
|
||||
rot.roll = (rollAmp * sin(time * rollSpeed)) * (UINT16_MAX / 360);
|
||||
rot.roll = (rollAmp * sin(time * rollSpeed)) * (UINT16_MAX / 360);
|
||||
}
|
||||
|
||||
void HarbourMastersIntro::HM_DrawIntro() {
|
||||
@@ -142,7 +143,7 @@ void HarbourMastersIntro::HM_DrawIntro() {
|
||||
render_set_position(mtx_geo, 0);
|
||||
|
||||
gSPDisplayList(gDisplayListHead++, ground_map_mesh);
|
||||
//gSPDisplayList(gDisplayListHead++, powered_Text_mesh); // Replaced by poweredbylus
|
||||
// gSPDisplayList(gDisplayListHead++, powered_Text_mesh); // Replaced by poweredbylus
|
||||
gSPDisplayList(gDisplayListHead++, castle_map_002_mesh);
|
||||
gSPDisplayList(gDisplayListHead++, road_map_001_mesh);
|
||||
gSPDisplayList(gDisplayListHead++, water_water1_mesh);
|
||||
@@ -150,7 +151,7 @@ void HarbourMastersIntro::HM_DrawIntro() {
|
||||
Mat4 lusMtx;
|
||||
ApplyMatrixTransformations(lusMtx, lusPos, lusRot, lusScale);
|
||||
render_set_position(lusMtx, 0);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)"__OTR__hmintro/poweredbylus");
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) "__OTR__hmintro/poweredbylus");
|
||||
|
||||
HarbourMastersIntro::Sync();
|
||||
}
|
||||
@@ -161,7 +162,8 @@ void HarbourMastersIntro::Setup() {
|
||||
gDPSetTexturePersp(gDisplayListHead++, G_TP_PERSP);
|
||||
guPerspective(&gGfxPool->mtxScreen, &perspNorm, 45.0f, 1.3333334f, 100.0f, 12800.0f, 1.0f);
|
||||
gSPPerspNormalize(gDisplayListHead++, perspNorm);
|
||||
guLookAt(&gGfxPool->mtxLookAt[0], _camera.Pos.x, _camera.Pos.y, _camera.Pos.z, _camera.LookAt.x, _camera.LookAt.y, _camera.LookAt.z, 0.0f, 1.0f, 0.0f);
|
||||
guLookAt(&gGfxPool->mtxLookAt[0], _camera.Pos.x, _camera.Pos.y, _camera.Pos.z, _camera.LookAt.x, _camera.LookAt.y,
|
||||
_camera.LookAt.z, 0.0f, 1.0f, 0.0f);
|
||||
|
||||
gDPSetCycleType(gDisplayListHead++, G_CYC_FILL);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
|
||||
|
||||
@@ -15,17 +15,20 @@ extern "C" {
|
||||
|
||||
#ifdef __cplusplus
|
||||
class HarbourMastersIntro {
|
||||
public:
|
||||
public:
|
||||
HarbourMastersIntro();
|
||||
|
||||
void HM_InitIntro();
|
||||
void HM_TickIntro();
|
||||
void HM_DrawIntro();
|
||||
private:
|
||||
|
||||
private:
|
||||
void Setup();
|
||||
void Sync();
|
||||
void Bob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed, f32 rollAmp, f32 rollSpeed);
|
||||
void SpagBob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed, f32 rollAmp, f32 rollSpeed);
|
||||
void Bob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed, f32 rollAmp,
|
||||
f32 rollSpeed);
|
||||
void SpagBob(FVector& pos, IRotator& rot, f32 bobAmp, f32 bobSpeed, f32 tiltAmp, f32 tiltSpeed, f32 rollAmp,
|
||||
f32 rollSpeed);
|
||||
void MoveCloserToCamera(float moveSpeed);
|
||||
|
||||
struct HMCamera {
|
||||
@@ -75,4 +78,4 @@ void HM_DrawIntro(void);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _HM_INTRO_H
|
||||
#endif // _HM_INTRO_H
|
||||
|
||||
+61
-64
@@ -99,7 +99,7 @@ void ApplyMatrixTransformations(Mat4 mtx, FVector pos, IRotator rot, FVector sca
|
||||
mtx[0][2] *= scale.z;
|
||||
mtx[1][2] *= scale.z;
|
||||
mtx[2][2] *= scale.z;
|
||||
|
||||
|
||||
// Set the last row and column for the homogeneous coordinate system
|
||||
mtx[0][3] = 0.0f;
|
||||
mtx[1][3] = 0.0f;
|
||||
@@ -119,79 +119,76 @@ void AddLocalRotation(Mat4 mat, IRotator rot) {
|
||||
mat[0][0] = (cos_yaw * cos_roll) + (sin_pitch * sin_yaw * sin_roll);
|
||||
mat[0][1] = (cos_pitch * sin_roll);
|
||||
mat[0][2] = (-sin_yaw * cos_roll) + (sin_pitch * cos_yaw * sin_roll);
|
||||
|
||||
|
||||
mat[1][0] = (-cos_yaw * sin_roll) + (sin_pitch * sin_yaw * cos_roll);
|
||||
mat[1][1] = (cos_pitch * cos_roll);
|
||||
mat[1][2] = (sin_yaw * sin_roll) + (sin_pitch * cos_yaw * cos_roll);
|
||||
|
||||
|
||||
mat[2][0] = (cos_pitch * sin_yaw);
|
||||
mat[2][1] = -sin_pitch;
|
||||
mat[2][2] = (cos_pitch * cos_yaw);
|
||||
}
|
||||
|
||||
|
||||
// API
|
||||
extern "C" {
|
||||
|
||||
void AddHudMatrix(Mat4 mtx, s32 flags) {
|
||||
AddMatrix(gWorldInstance.Mtx.Hud, mtx, flags);
|
||||
}
|
||||
|
||||
void AddObjectMatrix(Mat4 mtx, s32 flags) {
|
||||
AddMatrix(gWorldInstance.Mtx.Objects, mtx, flags);
|
||||
}
|
||||
|
||||
void AddShadowMatrix(Mat4 mtx, s32 flags) {
|
||||
AddMatrix(gWorldInstance.Mtx.Shadows, mtx, flags);
|
||||
}
|
||||
|
||||
void AddKartMatrix(Mat4 mtx, s32 flags) {
|
||||
AddMatrix(gWorldInstance.Mtx.Karts, mtx, flags);
|
||||
}
|
||||
|
||||
void AddEffectMatrix(Mat4 mtx, s32 flags) {
|
||||
AddMatrix(gWorldInstance.Mtx.Effects, mtx, flags);
|
||||
}
|
||||
|
||||
void AddEffectMatrixFixed(s32 flags) {
|
||||
AddMatrixFixed(gWorldInstance.Mtx.Effects, flags);
|
||||
}
|
||||
|
||||
void AddEffectMatrixOrtho(void) {
|
||||
auto& stack = gWorldInstance.Mtx.Effects;
|
||||
stack.emplace_back();
|
||||
|
||||
guOrtho(&stack.back(), 0.0f, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 0.0f, -100.0f, 100.0f, 1.0f);
|
||||
|
||||
gSPMatrix(gDisplayListHead++, &stack.back(), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
|
||||
}
|
||||
|
||||
Mtx* GetEffectMatrix(void) {
|
||||
return GetMatrix(gWorldInstance.Mtx.Effects);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Note that the game doesn't seem to clear all of these at the beginning of a new frame.
|
||||
* We might need to adjust which ones we clear.
|
||||
*/
|
||||
void ClearMatrixPools(void) {
|
||||
gWorldInstance.Mtx.Hud.clear();
|
||||
gWorldInstance.Mtx.Objects.clear();
|
||||
gWorldInstance.Mtx.Shadows.clear();
|
||||
gWorldInstance.Mtx.Karts.clear();
|
||||
gWorldInstance.Mtx.Effects.clear();
|
||||
}
|
||||
|
||||
void ClearHudMatrixPool(void) {
|
||||
gWorldInstance.Mtx.Hud.clear();
|
||||
}
|
||||
void ClearEffectsMatrixPool(void) {
|
||||
gWorldInstance.Mtx.Effects.clear();
|
||||
}
|
||||
|
||||
void ClearObjectsMatrixPool(void) {
|
||||
gWorldInstance.Mtx.Objects.clear();
|
||||
}
|
||||
void AddHudMatrix(Mat4 mtx, s32 flags) {
|
||||
AddMatrix(gWorldInstance.Mtx.Hud, mtx, flags);
|
||||
}
|
||||
|
||||
void AddObjectMatrix(Mat4 mtx, s32 flags) {
|
||||
AddMatrix(gWorldInstance.Mtx.Objects, mtx, flags);
|
||||
}
|
||||
|
||||
void AddShadowMatrix(Mat4 mtx, s32 flags) {
|
||||
AddMatrix(gWorldInstance.Mtx.Shadows, mtx, flags);
|
||||
}
|
||||
|
||||
void AddKartMatrix(Mat4 mtx, s32 flags) {
|
||||
AddMatrix(gWorldInstance.Mtx.Karts, mtx, flags);
|
||||
}
|
||||
|
||||
void AddEffectMatrix(Mat4 mtx, s32 flags) {
|
||||
AddMatrix(gWorldInstance.Mtx.Effects, mtx, flags);
|
||||
}
|
||||
|
||||
void AddEffectMatrixFixed(s32 flags) {
|
||||
AddMatrixFixed(gWorldInstance.Mtx.Effects, flags);
|
||||
}
|
||||
|
||||
void AddEffectMatrixOrtho(void) {
|
||||
auto& stack = gWorldInstance.Mtx.Effects;
|
||||
stack.emplace_back();
|
||||
|
||||
guOrtho(&stack.back(), 0.0f, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 0.0f, -100.0f, 100.0f, 1.0f);
|
||||
|
||||
gSPMatrix(gDisplayListHead++, &stack.back(), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
|
||||
}
|
||||
|
||||
Mtx* GetEffectMatrix(void) {
|
||||
return GetMatrix(gWorldInstance.Mtx.Effects);
|
||||
}
|
||||
|
||||
/**
|
||||
* Note that the game doesn't seem to clear all of these at the beginning of a new frame.
|
||||
* We might need to adjust which ones we clear.
|
||||
*/
|
||||
void ClearMatrixPools(void) {
|
||||
gWorldInstance.Mtx.Hud.clear();
|
||||
gWorldInstance.Mtx.Objects.clear();
|
||||
gWorldInstance.Mtx.Shadows.clear();
|
||||
gWorldInstance.Mtx.Karts.clear();
|
||||
gWorldInstance.Mtx.Effects.clear();
|
||||
}
|
||||
|
||||
void ClearHudMatrixPool(void) {
|
||||
gWorldInstance.Mtx.Hud.clear();
|
||||
}
|
||||
void ClearEffectsMatrixPool(void) {
|
||||
gWorldInstance.Mtx.Effects.clear();
|
||||
}
|
||||
|
||||
void ClearObjectsMatrixPool(void) {
|
||||
gWorldInstance.Mtx.Objects.clear();
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -29,4 +29,4 @@ void AddShadowMatrix(Mat4 mtx, s32 flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _MATRIX_HEADER_
|
||||
#endif // _MATRIX_HEADER_
|
||||
|
||||
@@ -70,7 +70,6 @@ void ModelLoader::Extract(Course* course) {
|
||||
memcpy(list.gfxBuffer, &gfx[list.gfxStart], list.gfxBufferSize * sizeof(Gfx));
|
||||
|
||||
UpdateVtx(list);
|
||||
|
||||
}
|
||||
|
||||
free(vtx);
|
||||
|
||||
+10
-11
@@ -10,16 +10,16 @@ extern "C" {
|
||||
class Course;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* Lists are deferred until load time so that models that use the same course may all use the same extraction
|
||||
*
|
||||
*
|
||||
* Note ensure that the buffers passed to LoadModelList are big enough for the requested data.
|
||||
*
|
||||
*
|
||||
* This class should only be ran once.
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
* Usage:
|
||||
*
|
||||
*
|
||||
* ModelLoader::LoadModelList bowserStatueList = {
|
||||
.course = gBowsersCastle,
|
||||
.gfxBuffer = &gBowserStatueGfx[0],
|
||||
@@ -29,13 +29,13 @@ class Course;
|
||||
.vtxBufferSize = 717,
|
||||
.vtxStart = 1942,
|
||||
};
|
||||
*
|
||||
*
|
||||
* gModelLoader.Add(bowserStatueList);
|
||||
*/
|
||||
|
||||
class ModelLoader {
|
||||
|
||||
public:
|
||||
public:
|
||||
struct LoadModelList {
|
||||
Course* course;
|
||||
|
||||
@@ -50,10 +50,9 @@ public:
|
||||
|
||||
void Add(LoadModelList list);
|
||||
void Load();
|
||||
private:
|
||||
struct CourseMap {
|
||||
|
||||
};
|
||||
private:
|
||||
struct CourseMap {};
|
||||
|
||||
void Extract(Course* course);
|
||||
void UpdateVtx(LoadModelList list);
|
||||
|
||||
@@ -38,12 +38,12 @@ void PlayerBombKart::func_800563DC(s32 cameraId, s32 arg2) {
|
||||
D_80183E80[1] = func_800418AC(pos.x, pos.z, camera->pos);
|
||||
D_80183E80[2] = 0x8000;
|
||||
rsp_set_matrix_transformation(D_80183E40, D_80183E80, 0.2f);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007E98);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007E98);
|
||||
func_8004B310(arg2);
|
||||
draw_rectangle_texture_overlap((u8*) common_tlut_bomb, (u8*)common_texture_bomb[residue], (Vtx*)D_0D005AE0, 0x00000020,
|
||||
0x00000020, 0x00000020, 0x00000020);
|
||||
draw_rectangle_texture_overlap((u8*) common_tlut_bomb, (u8*) common_texture_bomb[residue], (Vtx*) D_0D005AE0,
|
||||
0x00000020, 0x00000020, 0x00000020, 0x00000020);
|
||||
temp_s0 = D_8018D400;
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007B00);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007B00);
|
||||
func_8004B414(0, 0, 0, arg2);
|
||||
D_80183E40[1] = D_80183E40[1] + 4.0;
|
||||
D_80183E80[2] = 0;
|
||||
@@ -58,22 +58,22 @@ void PlayerBombKart::func_800563DC(s32 cameraId, s32 arg2) {
|
||||
}
|
||||
|
||||
void PlayerBombKart::func_8005669C(s32 arg2) {
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0079E8);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D0079E8);
|
||||
func_8004B310(arg2);
|
||||
load_texture_block_rgba16_mirror((u8*) D_0D02AA58, 0x00000010, 0x00000010);
|
||||
D_80183E40[1] = pos.y - 2.0;
|
||||
D_80183E40[0] = pos.x + 2.0;
|
||||
D_80183E40[2] = pos.z + 2.0;
|
||||
func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle);
|
||||
func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*) common_vtx_rectangle);
|
||||
D_80183E40[0] = pos.x + 2.0;
|
||||
D_80183E40[2] = pos.z - 2.0;
|
||||
func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle);
|
||||
func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*) common_vtx_rectangle);
|
||||
D_80183E40[0] = pos.x - 2.0;
|
||||
D_80183E40[2] = pos.z - 2.0;
|
||||
func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle);
|
||||
func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*) common_vtx_rectangle);
|
||||
D_80183E40[0] = pos.x - 2.0;
|
||||
D_80183E40[2] = pos.z + 2.0;
|
||||
func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*)common_vtx_rectangle);
|
||||
func_800431B0(D_80183E40, D_80183E80, 0.15f, (Vtx*) common_vtx_rectangle);
|
||||
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
|
||||
}
|
||||
|
||||
@@ -91,5 +91,5 @@ void PlayerBombKart::func_800568A0(s32 cameraId) {
|
||||
// G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
AddHudMatrix(mtx, G_MTX_LOAD | G_MTX_NOPUSH | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007B98);
|
||||
}
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007B98);
|
||||
}
|
||||
|
||||
@@ -4,15 +4,14 @@
|
||||
#include "CoreMath.h"
|
||||
|
||||
class PlayerBombKart {
|
||||
public:
|
||||
|
||||
public:
|
||||
enum PlayerBombKartState {
|
||||
DISABLED,
|
||||
ACTIVE,
|
||||
};
|
||||
|
||||
s16 state = PlayerBombKartState::DISABLED;
|
||||
FVector pos = {0, 0, 0};
|
||||
FVector pos = { 0, 0, 0 };
|
||||
f32 surfaceHeight = 0;
|
||||
s32 _primAlpha = 0;
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
// public:
|
||||
// Registry();
|
||||
// void Add(std::string name, std::function<T*()>);
|
||||
|
||||
|
||||
// template <typename... Args>
|
||||
// void AddArgs(std::string id);
|
||||
// T* Get(std::string id);
|
||||
|
||||
@@ -69,7 +69,6 @@ void TrainSmokeTick() {
|
||||
if (count != 0) {
|
||||
boat->SmokeTimer = 100;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -80,22 +79,21 @@ void TrainSmokeDraw(s32 cameraId) {
|
||||
|
||||
for (auto& actor : gWorldInstance.Actors) {
|
||||
if (auto train = dynamic_cast<ATrain*>(actor)) {
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007AE0);
|
||||
load_texture_block_i8_nomirror((uint8_t*)D_0D029458, 32, 32);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007AE0);
|
||||
load_texture_block_i8_nomirror((uint8_t*) D_0D029458, 32, 32);
|
||||
func_8004B72C(255, 255, 255, 255, 255, 255, 255);
|
||||
D_80183E80[0] = 0;
|
||||
D_80183E80[2] = 0x8000;
|
||||
|
||||
if ((train->SomeFlags != 0) &&
|
||||
(is_particle_on_screen(train->Locomotive.position, camera, 0x4000U) != 0)) {
|
||||
if ((train->SomeFlags != 0) && (is_particle_on_screen(train->Locomotive.position, camera, 0x4000U) != 0)) {
|
||||
for (size_t i = 0; i < 128; i++) {
|
||||
render_object_train_smoke_particle(train->SmokeParticles[i], cameraId);
|
||||
}
|
||||
}
|
||||
} else if (auto boat = dynamic_cast<ABoat*>(actor)) {
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007AE0);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007AE0);
|
||||
|
||||
load_texture_block_i8_nomirror((uint8_t*)D_0D029458, 32, 32);
|
||||
load_texture_block_i8_nomirror((uint8_t*) D_0D029458, 32, 32);
|
||||
func_8004B72C(255, 255, 255, 255, 255, 255, 255);
|
||||
D_80183E80[0] = 0;
|
||||
D_80183E80[2] = 0x8000;
|
||||
|
||||
@@ -8,8 +8,9 @@ extern "C" {
|
||||
#include "math_util_2.h"
|
||||
}
|
||||
|
||||
StaticMeshActor::StaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model, int32_t* collision) : Name(name), Pos(pos), Rot(rot), Scale(scale), Model(""), Collision(collision) {
|
||||
|
||||
StaticMeshActor::StaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model,
|
||||
int32_t* collision)
|
||||
: Name(name), Pos(pos), Rot(rot), Scale(scale), Model(""), Collision(collision) {
|
||||
}
|
||||
|
||||
void StaticMeshActor::Draw() {
|
||||
@@ -19,7 +20,7 @@ void StaticMeshActor::Draw() {
|
||||
if (!Model.empty()) {
|
||||
ApplyMatrixTransformations(mtx, Pos, Rot, Scale);
|
||||
if (render_set_position(mtx, 0) != 0) {
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)Model.c_str());
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) Model.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
// todo: Make this class AStaticMeshActor : public AActor
|
||||
class StaticMeshActor {
|
||||
public:
|
||||
public:
|
||||
std::string Name;
|
||||
FVector Pos;
|
||||
IRotator Rot;
|
||||
@@ -22,16 +22,16 @@ public:
|
||||
|
||||
// Serialize each field of the class
|
||||
j["Name"] = Name;
|
||||
j["Position"] = {Pos.x, Pos.y, Pos.z}; // Assuming FVector has x, y, z fields
|
||||
j["Rotation"] = {Rot.pitch, Rot.yaw, Rot.roll}; // Assuming IRotator has pitch, yaw, roll fields
|
||||
j["Scale"] = {Scale.x, Scale.y, Scale.z}; // Assuming FVector has x, y, z fields
|
||||
j["Position"] = { Pos.x, Pos.y, Pos.z }; // Assuming FVector has x, y, z fields
|
||||
j["Rotation"] = { Rot.pitch, Rot.yaw, Rot.roll }; // Assuming IRotator has pitch, yaw, roll fields
|
||||
j["Scale"] = { Scale.x, Scale.y, Scale.z }; // Assuming FVector has x, y, z fields
|
||||
j["Model"] = Model;
|
||||
|
||||
// If Collision is not null, serialize it
|
||||
if (Collision != nullptr) {
|
||||
j["Collision"] = *Collision; // Serialize the value that Collision points to
|
||||
j["Collision"] = *Collision; // Serialize the value that Collision points to
|
||||
} else {
|
||||
j["Collision"] = nullptr; // Handle the case where Collision is nullptr
|
||||
j["Collision"] = nullptr; // Handle the case where Collision is nullptr
|
||||
}
|
||||
|
||||
return j;
|
||||
@@ -39,20 +39,22 @@ public:
|
||||
|
||||
void from_json(const nlohmann::json& j) {
|
||||
Name = j.at("Name").get<std::string>();
|
||||
Pos = FVector(j.at("Position")[0].get<float>(), j.at("Position")[1].get<float>(), j.at("Position")[2].get<float>());
|
||||
Rot.Set(j.at("Rotation")[0].get<uint16_t>(), j.at("Rotation")[1].get<uint16_t>(), j.at("Rotation")[2].get<uint16_t>());
|
||||
Pos = FVector(j.at("Position")[0].get<float>(), j.at("Position")[1].get<float>(),
|
||||
j.at("Position")[2].get<float>());
|
||||
Rot.Set(j.at("Rotation")[0].get<uint16_t>(), j.at("Rotation")[1].get<uint16_t>(),
|
||||
j.at("Rotation")[2].get<uint16_t>());
|
||||
Scale = FVector(j.at("Scale")[0].get<float>(), j.at("Scale")[1].get<float>(), j.at("Scale")[2].get<float>());
|
||||
|
||||
// Deserialize the Model string
|
||||
Model = j.at("Model").get<std::string>();
|
||||
|
||||
// Check if Collision is present in the JSON and deserialize it
|
||||
//if (j.contains("Collision") && !j["Collision"].is_null()) {
|
||||
// If Collision is a valid value, allocate memory for it and assign the value
|
||||
// if (j.contains("Collision") && !j["Collision"].is_null()) {
|
||||
// If Collision is a valid value, allocate memory for it and assign the value
|
||||
// Collision = new int32_t(j.at("Collision").get<int32_t>());
|
||||
//} else {
|
||||
// If Collision is not present or is null, set it to nullptr
|
||||
Collision = nullptr;
|
||||
// If Collision is not present or is null, set it to nullptr
|
||||
Collision = nullptr;
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,9 +29,9 @@ void TrainCrossing::CrossingTrigger() {
|
||||
s32 i;
|
||||
OnTriggered = 0;
|
||||
|
||||
|
||||
for (const auto& actor : gWorldInstance.Actors) {
|
||||
if (auto train = dynamic_cast<ATrain*>(actor)) {;
|
||||
if (auto train = dynamic_cast<ATrain*>(actor)) {
|
||||
;
|
||||
f32 radius = DynamicRadius(train->Locomotive.position, train->Locomotive.velocity, Position);
|
||||
|
||||
if (Distance(train->Locomotive.position, Position) < radius) {
|
||||
@@ -61,9 +61,9 @@ void TrainCrossing::AICrossingBehaviour(s32 playerId) {
|
||||
}
|
||||
|
||||
f32 TrainCrossing::Distance(Vec3f a, Vec3f b) {
|
||||
float dx = b[0] - a[0]; // Difference in x-coordinates
|
||||
float dy = b[1] - a[1]; // Difference in y-coordinates
|
||||
float dz = b[2] - a[2]; // Difference in z-coordinates
|
||||
float dx = b[0] - a[0]; // Difference in x-coordinates
|
||||
float dy = b[1] - a[1]; // Difference in y-coordinates
|
||||
float dz = b[2] - a[2]; // Difference in z-coordinates
|
||||
return sqrt(dx * dx + dy * dy + dz * dz); // Return the distance
|
||||
}
|
||||
|
||||
@@ -75,8 +75,7 @@ f32 TrainCrossing::DynamicRadius(Vec3f trainPos, Vec3f trainVelocity, Vec3f cros
|
||||
trainToCrossing[2] = crossingPos[2] - trainPos[2];
|
||||
|
||||
// Dot product to check if the train is approaching or moving away from the crossing
|
||||
f32 dotProduct = trainToCrossing[0] * trainVelocity[0] +
|
||||
trainToCrossing[1] * trainVelocity[1] +
|
||||
f32 dotProduct = trainToCrossing[0] * trainVelocity[0] + trainToCrossing[1] * trainVelocity[1] +
|
||||
trainToCrossing[2] * trainVelocity[2];
|
||||
|
||||
if (dotProduct > 0) {
|
||||
|
||||
@@ -11,12 +11,12 @@ extern "C" {
|
||||
* @arg Vec3f position of the crossing
|
||||
* @arg u32 waypointMin
|
||||
* @arg u32 waypointMax
|
||||
*
|
||||
*
|
||||
* Min/Max are used to determine the range for AI to stop for the crossing.
|
||||
*
|
||||
*
|
||||
*/
|
||||
class TrainCrossing {
|
||||
public:
|
||||
public:
|
||||
TrainCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, f32 exitRadius);
|
||||
|
||||
Vec3f Position;
|
||||
|
||||
+35
-23
@@ -21,7 +21,8 @@ extern "C" {
|
||||
#include "mario_raceway_data.h"
|
||||
}
|
||||
|
||||
World::World() {}
|
||||
World::World() {
|
||||
}
|
||||
|
||||
Course* CurrentCourse;
|
||||
Cup* CurrentCup;
|
||||
@@ -38,7 +39,8 @@ void World::SetCourseFromCup() {
|
||||
CurrentCourse = CurrentCup->GetCourse();
|
||||
}
|
||||
|
||||
TrainCrossing* World::AddCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius, f32 exitRadius) {
|
||||
TrainCrossing* World::AddCrossing(Vec3f position, u32 waypointMin, u32 waypointMax, f32 approachRadius,
|
||||
f32 exitRadius) {
|
||||
auto crossing = std::make_shared<TrainCrossing>(position, waypointMin, waypointMax, approachRadius, exitRadius);
|
||||
Crossings.push_back(crossing);
|
||||
return crossing.get();
|
||||
@@ -119,11 +121,12 @@ AActor* World::AddActor(AActor* actor) {
|
||||
Actors.push_back(actor);
|
||||
|
||||
if (actor->Model != NULL) {
|
||||
gEditor.AddObject(actor->Name, (FVector*) &actor->Pos, (IRotator*)&actor->Rot, &actor->Scale,
|
||||
gEditor.AddObject(actor->Name, (FVector*) &actor->Pos, (IRotator*) &actor->Rot, &actor->Scale,
|
||||
(Gfx*) LOAD_ASSET_RAW(actor->Model), 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT,
|
||||
0.0f, (int32_t*) &actor->Type, 0);
|
||||
} else {
|
||||
gEditor.AddObject(actor->Name, (FVector*) &actor->Pos, (IRotator*)&actor->Rot, &actor->Scale, nullptr, 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*)&actor->Type, 0);
|
||||
gEditor.AddObject(actor->Name, (FVector*) &actor->Pos, (IRotator*) &actor->Rot, &actor->Scale, nullptr, 1.0f,
|
||||
Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*) &actor->Type, 0);
|
||||
}
|
||||
return Actors.back();
|
||||
}
|
||||
@@ -139,9 +142,12 @@ struct Actor* World::AddBaseActor() {
|
||||
|
||||
void World::AddEditorObject(Actor* actor, const char* name) {
|
||||
if (actor->model != NULL) {
|
||||
gEditor.AddObject(name, (FVector*) &actor->pos, (IRotator*)&actor->rot, nullptr, (Gfx*)LOAD_ASSET_RAW(actor->model), 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*)&actor->type, 0);
|
||||
gEditor.AddObject(name, (FVector*) &actor->pos, (IRotator*) &actor->rot, nullptr,
|
||||
(Gfx*) LOAD_ASSET_RAW(actor->model), 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT,
|
||||
0.0f, (int32_t*) &actor->type, 0);
|
||||
} else {
|
||||
gEditor.AddObject(name, (FVector*) &actor->pos, (IRotator*)&actor->rot, nullptr, nullptr, 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*)&actor->type, 0);
|
||||
gEditor.AddObject(name, (FVector*) &actor->pos, (IRotator*) &actor->rot, nullptr, nullptr, 1.0f,
|
||||
Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*) &actor->type, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,7 +158,7 @@ AActor* World::ConvertActorToAActor(Actor* actor) {
|
||||
// Move the ptr back so that it points at the vtable.
|
||||
// Which is the initial item in the class, or in other words
|
||||
// Point to the class.
|
||||
return reinterpret_cast<AActor*>((char*)actor - sizeof(void*));
|
||||
return reinterpret_cast<AActor*>((char*) actor - sizeof(void*));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -161,7 +167,7 @@ AActor* World::ConvertActorToAActor(Actor* actor) {
|
||||
Actor* World::ConvertAActorToActor(AActor* actor) {
|
||||
// Move the ptr forward past the vtable.
|
||||
// This allows C to access the class variables like a normal Actor* struct.
|
||||
return reinterpret_cast<Actor*>((char*)actor + sizeof(void*));
|
||||
return reinterpret_cast<Actor*>((char*) actor + sizeof(void*));
|
||||
}
|
||||
|
||||
AActor* World::GetActor(size_t index) {
|
||||
@@ -177,16 +183,18 @@ void World::TickActors() {
|
||||
}
|
||||
}
|
||||
|
||||
StaticMeshActor* World::AddStaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model, int32_t* collision) {
|
||||
StaticMeshActor* World::AddStaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale,
|
||||
std::string model, int32_t* collision) {
|
||||
StaticMeshActors.push_back(new StaticMeshActor(name, pos, rot, scale, model, collision));
|
||||
auto actor = StaticMeshActors.back();
|
||||
auto gameObj = gEditor.AddObject(actor->Name.c_str(), &actor->Pos, &actor->Rot, &actor->Scale, (Gfx*) LOAD_ASSET_RAW(actor->Model.c_str()), 1.0f,
|
||||
Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*) &actor->bPendingDestroy, (int32_t) true);
|
||||
auto gameObj = gEditor.AddObject(
|
||||
actor->Name.c_str(), &actor->Pos, &actor->Rot, &actor->Scale, (Gfx*) LOAD_ASSET_RAW(actor->Model.c_str()), 1.0f,
|
||||
Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, (int32_t*) &actor->bPendingDestroy, (int32_t) true);
|
||||
return actor;
|
||||
}
|
||||
|
||||
void World::DrawStaticMeshActors() {
|
||||
for (const auto& actor: StaticMeshActors) {
|
||||
for (const auto& actor : StaticMeshActors) {
|
||||
actor->Draw();
|
||||
}
|
||||
}
|
||||
@@ -194,10 +202,10 @@ void World::DrawStaticMeshActors() {
|
||||
void World::DeleteStaticMeshActors() {
|
||||
for (auto it = StaticMeshActors.begin(); it != StaticMeshActors.end();) {
|
||||
if ((*it)->bPendingDestroy) {
|
||||
delete *it; // Deallocate memory for the actor
|
||||
it = StaticMeshActors.erase(it); // Remove the pointer from the vector
|
||||
delete *it; // Deallocate memory for the actor
|
||||
it = StaticMeshActors.erase(it); // Remove the pointer from the vector
|
||||
} else {
|
||||
++it; // Only increment the iterator if we didn't erase an element
|
||||
++it; // Only increment the iterator if we didn't erase an element
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -209,9 +217,13 @@ OObject* World::AddObject(OObject* object) {
|
||||
Object* cObj = &gObjectList[object->_objectIndex];
|
||||
|
||||
if (cObj->model != NULL) {
|
||||
gEditor.AddObject(object->Name, (FVector*) &cObj->origin_pos[0], (IRotator*)&cObj->orientation, nullptr, (Gfx*)LOAD_ASSET_RAW(cObj->model), 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, &object->_objectIndex, -1);
|
||||
gEditor.AddObject(object->Name, (FVector*) &cObj->origin_pos[0], (IRotator*) &cObj->orientation, nullptr,
|
||||
(Gfx*) LOAD_ASSET_RAW(cObj->model), 1.0f,
|
||||
Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, &object->_objectIndex, -1);
|
||||
} else {
|
||||
gEditor.AddObject(object->Name, (FVector*) &cObj->origin_pos[0], (IRotator*)&cObj->orientation, nullptr, nullptr, 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f, &object->_objectIndex, -1);
|
||||
gEditor.AddObject(object->Name, (FVector*) &cObj->origin_pos[0], (IRotator*) &cObj->orientation, nullptr,
|
||||
nullptr, 1.0f, Editor::GameObject::CollisionType::VTX_INTERSECT, 0.0f,
|
||||
&object->_objectIndex, -1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -228,7 +240,7 @@ void World::TickObjects() {
|
||||
// This is a fallback to support those objects. Probably don't use this.
|
||||
void World::TickObjects60fps() {
|
||||
for (const auto& object : Objects) {
|
||||
object->Tick60fps();
|
||||
object->Tick60fps();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -239,19 +251,19 @@ ParticleEmitter* World::AddEmitter(ParticleEmitter* emitter) {
|
||||
|
||||
void World::DrawObjects(s32 cameraId) {
|
||||
for (const auto& object : Objects) {
|
||||
object->Draw(cameraId);
|
||||
object->Draw(cameraId);
|
||||
}
|
||||
}
|
||||
|
||||
void World::TickParticles() {
|
||||
for (const auto& emitter : Emitters) {
|
||||
emitter->Tick();
|
||||
emitter->Tick();
|
||||
}
|
||||
}
|
||||
|
||||
void World::DrawParticles(s32 cameraId) {
|
||||
for (const auto& emitter : Emitters) {
|
||||
emitter->Draw(cameraId);
|
||||
emitter->Draw(cameraId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,8 +275,8 @@ void World::Reset() {
|
||||
}
|
||||
|
||||
Object* World::GetObjectByIndex(size_t index) {
|
||||
//if (index < this->Objects.size()) {
|
||||
// Assuming GameActor::a is accessible, use reinterpret_cast if needed
|
||||
// if (index < this->Objects.size()) {
|
||||
// Assuming GameActor::a is accessible, use reinterpret_cast if needed
|
||||
// return reinterpret_cast<Object*>(&this->Objects[index]->o);
|
||||
//}
|
||||
return nullptr; // Or handle the error as needed
|
||||
|
||||
+5
-7
@@ -48,7 +48,7 @@ class World {
|
||||
std::vector<Mtx> Effects;
|
||||
} Matrix;
|
||||
|
||||
public:
|
||||
public:
|
||||
explicit World();
|
||||
|
||||
void AddCourse(Course* course);
|
||||
@@ -63,7 +63,8 @@ public:
|
||||
Actor* ConvertAActorToActor(AActor* actor);
|
||||
|
||||
void DrawStaticMeshActors();
|
||||
StaticMeshActor* AddStaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model, int32_t* collision);
|
||||
StaticMeshActor* AddStaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model,
|
||||
int32_t* collision);
|
||||
void DeleteStaticMeshActors();
|
||||
|
||||
OObject* AddObject(OObject* object);
|
||||
@@ -71,7 +72,7 @@ public:
|
||||
void TickObjects();
|
||||
void TickObjects60fps();
|
||||
void DrawObjects(s32 cameraId);
|
||||
Object *GetObjectByIndex(size_t);
|
||||
Object* GetObjectByIndex(size_t);
|
||||
|
||||
void TickParticles();
|
||||
void DrawParticles(s32 cameraId);
|
||||
@@ -89,7 +90,6 @@ public:
|
||||
World* GetWorld(void);
|
||||
void ClearWorld(void);
|
||||
|
||||
|
||||
// These are only for browsing through the course list
|
||||
void SetCourse(const char*);
|
||||
void NextCourse(void);
|
||||
@@ -97,7 +97,6 @@ public:
|
||||
|
||||
Matrix Mtx;
|
||||
|
||||
|
||||
Course* CurrentCourse;
|
||||
Cup* CurrentCup;
|
||||
|
||||
@@ -120,8 +119,7 @@ public:
|
||||
// Holds all available courses
|
||||
std::vector<Course*> Courses;
|
||||
size_t CourseIndex = 0; // For browsing courses.
|
||||
private:
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
extern World gWorldInstance;
|
||||
|
||||
@@ -14,7 +14,7 @@ ABanana::ABanana(uint16_t playerId, const float pos[3], const s16 rot[3], const
|
||||
Name = "Banana";
|
||||
// Initialize the BananaActor's position, rotation, and velocity
|
||||
std::copy(pos, pos + 3, Pos);
|
||||
//std::copy(rot, rot + 3, this->a.rot);
|
||||
// std::copy(rot, rot + 3, this->a.rot);
|
||||
std::copy(velocity, velocity + 3, Velocity);
|
||||
|
||||
Type = 6; // ACTOR_BANANA
|
||||
@@ -23,8 +23,8 @@ ABanana::ABanana(uint16_t playerId, const float pos[3], const s16 rot[3], const
|
||||
State = HELD_BANANA;
|
||||
|
||||
PlayerId = playerId;
|
||||
|
||||
//this->a.unk_08 = 0.0f;
|
||||
|
||||
// this->a.unk_08 = 0.0f;
|
||||
Flags |= 0x4000 | 0x1000;
|
||||
BoundingBoxSize = 2.0f;
|
||||
|
||||
@@ -48,14 +48,16 @@ ABanana::ABanana(uint16_t playerId, const float pos[3], const s16 rot[3], const
|
||||
Unk30.orientationVector[2] = 0.0f;
|
||||
}
|
||||
|
||||
void ABanana::Tick() {
|
||||
update_actor_banana((BananaActor*)this);
|
||||
void ABanana::Tick() {
|
||||
update_actor_banana((BananaActor*) this);
|
||||
}
|
||||
|
||||
void ABanana::Draw(Camera *camera) {
|
||||
render_actor_banana(camera, NULL, (BananaActor*)this);
|
||||
void ABanana::Draw(Camera* camera) {
|
||||
render_actor_banana(camera, NULL, (BananaActor*) this);
|
||||
}
|
||||
void ABanana::Collision(Player* player, AActor*) {
|
||||
}
|
||||
void ABanana::Destroy() {
|
||||
}
|
||||
void ABanana::Collision(Player* player, AActor*) { }
|
||||
void ABanana::Destroy() { }
|
||||
|
||||
//void ABanana::Held() {}
|
||||
// void ABanana::Held() {}
|
||||
|
||||
@@ -4,8 +4,7 @@
|
||||
#include "engine/Actor.h"
|
||||
|
||||
class ABanana : public AActor {
|
||||
public:
|
||||
|
||||
public:
|
||||
uint16_t PlayerId;
|
||||
|
||||
// Constructor
|
||||
|
||||
@@ -19,7 +19,7 @@ ABowserStatue::ABowserStatue(FVector pos, ABowserStatue::Behaviour behaviour) {
|
||||
}
|
||||
|
||||
void ABowserStatue::Tick() {
|
||||
switch(_behaviour) {
|
||||
switch (_behaviour) {
|
||||
case DEFAULT:
|
||||
break;
|
||||
case CRUSH:
|
||||
@@ -27,7 +27,7 @@ void ABowserStatue::Tick() {
|
||||
}
|
||||
}
|
||||
|
||||
void ABowserStatue::Draw(Camera *camera) {
|
||||
void ABowserStatue::Draw(Camera* camera) {
|
||||
Mat4 mtx;
|
||||
Vec3f pos;
|
||||
pos[0] = Pos.x + 76;
|
||||
@@ -43,4 +43,6 @@ void ABowserStatue::Draw(Camera *camera) {
|
||||
}
|
||||
}
|
||||
|
||||
bool ABowserStatue::IsMod() { return true; }
|
||||
bool ABowserStatue::IsMod() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -14,11 +14,8 @@ extern Vtx gBowserStatueVtx[717];
|
||||
extern Gfx gBowserStatueGfx[162];
|
||||
|
||||
class ABowserStatue : public AActor {
|
||||
public:
|
||||
enum Behaviour {
|
||||
DEFAULT,
|
||||
CRUSH
|
||||
};
|
||||
public:
|
||||
enum Behaviour { DEFAULT, CRUSH };
|
||||
|
||||
virtual ~ABowserStatue() = default;
|
||||
explicit ABowserStatue(FVector pos, ABowserStatue::Behaviour behaviour);
|
||||
@@ -28,7 +25,8 @@ public:
|
||||
virtual bool IsMod() override;
|
||||
|
||||
FVector Pos;
|
||||
private:
|
||||
|
||||
private:
|
||||
ABowserStatue::Behaviour _behaviour;
|
||||
f32 scale;
|
||||
};
|
||||
|
||||
+58
-54
@@ -15,15 +15,15 @@ extern f32 gKartGravityTable[];
|
||||
}
|
||||
|
||||
ACloud::ACloud(FVector pos) {
|
||||
Name = "Cloud";
|
||||
Pos[0] = pos.x;
|
||||
Pos[1] = pos.y;
|
||||
Pos[2] = pos.z;
|
||||
Rot[0] = 0;
|
||||
Rot[1] = 0;
|
||||
Rot[2] = 0;
|
||||
Name = "Cloud";
|
||||
Pos[0] = pos.x;
|
||||
Pos[1] = pos.y;
|
||||
Pos[2] = pos.z;
|
||||
Rot[0] = 0;
|
||||
Rot[1] = 0;
|
||||
Rot[2] = 0;
|
||||
|
||||
//Flags = -0x8000 | 0x4000;
|
||||
// Flags = -0x8000 | 0x4000;
|
||||
|
||||
BoundingBoxSize = 2.0f;
|
||||
}
|
||||
@@ -48,7 +48,7 @@ void ACloud::Tick() {
|
||||
|
||||
extern Gfx cloud_mesh[];
|
||||
|
||||
void ACloud::Draw(Camera *camera) {
|
||||
void ACloud::Draw(Camera* camera) {
|
||||
Mat4 mtx;
|
||||
|
||||
if (PickedUp) {
|
||||
@@ -58,14 +58,14 @@ void ACloud::Draw(Camera *camera) {
|
||||
mtxf_pos_rotation_xyz(mtx, Pos, Rot);
|
||||
if (render_set_position(mtx, 0) != 0) {
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)cloud_mesh);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) cloud_mesh);
|
||||
}
|
||||
}
|
||||
|
||||
void ACloud::Collision(Player* player, AActor* actor) {
|
||||
if (!PickedUp) {
|
||||
if (query_collision_player_vs_actor_item(player, gWorldInstance.ConvertAActorToActor(actor))) {
|
||||
// Player has picked up the actor, activate the cloud effect
|
||||
// Player has picked up the actor, activate the cloud effect
|
||||
_player = player;
|
||||
PickedUp = true;
|
||||
|
||||
@@ -77,61 +77,65 @@ void ACloud::Collision(Player* player, AActor* actor) {
|
||||
}
|
||||
}
|
||||
|
||||
bool ACloud::IsMod() { return true; }
|
||||
bool ACloud::IsMod() {
|
||||
return true;
|
||||
}
|
||||
|
||||
Vtx cloud_mesh_vtx_cull[8] = {
|
||||
{{ {0, -4, -4}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{{ {0, -4, 4}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{{ {0, 4, 4}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{{ {0, 4, -4}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{{ {0, -4, -4}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{{ {0, -4, 4}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{{ {0, 4, 4}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{{ {0, 4, -4}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{ { { 0, -4, -4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, { { { 0, -4, 4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } },
|
||||
{ { { 0, 4, 4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, { { { 0, 4, -4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } },
|
||||
{ { { 0, -4, -4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, { { { 0, -4, 4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } },
|
||||
{ { { 0, 4, 4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } }, { { { 0, 4, -4 }, 0, { 0, 0 }, { 0, 0, 0, 0 } } },
|
||||
};
|
||||
|
||||
Vtx cloud_mesh_vtx_0[4] = {
|
||||
{{ {0, 4, 4}, 0, {-524, -530}, {255, 255, 255, 166} }},
|
||||
{{ {0, -4, 4}, 0, {-530, 1516}, {255, 255, 255, 201} }},
|
||||
{{ {0, -4, -4}, 0, {1516, 1522}, {255, 255, 255, 188} }},
|
||||
{{ {0, 4, -4}, 0, {1522, -524}, {255, 255, 255, 154} }},
|
||||
{ { { 0, 4, 4 }, 0, { -524, -530 }, { 255, 255, 255, 166 } } },
|
||||
{ { { 0, -4, 4 }, 0, { -530, 1516 }, { 255, 255, 255, 201 } } },
|
||||
{ { { 0, -4, -4 }, 0, { 1516, 1522 }, { 255, 255, 255, 188 } } },
|
||||
{ { { 0, 4, -4 }, 0, { 1522, -524 }, { 255, 255, 255, 154 } } },
|
||||
};
|
||||
|
||||
Gfx cloud_mesh_tri_0[] = {
|
||||
gsSPVertex(cloud_mesh_vtx_0 + 0, 4, 0),
|
||||
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
|
||||
gsSPEndDisplayList(),
|
||||
gsSPVertex(cloud_mesh_vtx_0 + 0, 4, 0),
|
||||
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
Gfx mat_cloud_cutout[] = {
|
||||
gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH),
|
||||
gsSPClearGeometryMode(G_CULL_FRONT | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_CLIPPING),
|
||||
gsDPPipeSync(),
|
||||
gsDPSetCombineLERP(TEXEL0, PRIMITIVE, PRIMITIVE, TEXEL1, 0, 0, 0, TEXEL0, COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED),
|
||||
gsSPSetOtherMode(G_SETOTHERMODE_H, 4, 20, G_AD_NOISE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE),
|
||||
gsSPSetOtherMode(G_SETOTHERMODE_L, 0, 32, G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2),
|
||||
gsSPTexture(65535, 65535, 0, 0, 1),
|
||||
gsDPSetPrimColor(0, 0, 255, 220, 203, 255),
|
||||
gsDPSetTextureImage(G_IM_FMT_I, G_IM_SIZ_8b_LOAD_BLOCK, 1, gTexture69C4E4),
|
||||
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, 511, 512),
|
||||
gsDPSetTile(G_IM_FMT_I, G_IM_SIZ_8b, 4, 0, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 5, 1, G_TX_WRAP | G_TX_NOMIRROR, 5, 1),
|
||||
gsDPSetTileSize(0, 98, 100, 124, 124),
|
||||
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 1, gTexture66C8F4),
|
||||
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 0, 128, 6, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0),
|
||||
gsDPLoadBlock(6, 0, 0, 1023, 256),
|
||||
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 128, 1, 0, G_TX_CLAMP | G_TX_NOMIRROR, 5, 0, G_TX_CLAMP | G_TX_NOMIRROR, 5, 0),
|
||||
gsDPSetTileSize(1, 0, 0, 124, 124),
|
||||
gsSPEndDisplayList(),
|
||||
gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH),
|
||||
gsSPClearGeometryMode(G_CULL_FRONT | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD |
|
||||
G_CLIPPING),
|
||||
gsDPPipeSync(),
|
||||
gsDPSetCombineLERP(TEXEL0, PRIMITIVE, PRIMITIVE, TEXEL1, 0, 0, 0, TEXEL0, COMBINED, 0, PRIMITIVE, 0, 0, 0, 0,
|
||||
COMBINED),
|
||||
gsSPSetOtherMode(G_SETOTHERMODE_H, 4, 20,
|
||||
G_AD_NOISE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
|
||||
G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE),
|
||||
gsSPSetOtherMode(G_SETOTHERMODE_L, 0, 32, G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2),
|
||||
gsSPTexture(65535, 65535, 0, 0, 1),
|
||||
gsDPSetPrimColor(0, 0, 255, 220, 203, 255),
|
||||
gsDPSetTextureImage(G_IM_FMT_I, G_IM_SIZ_8b_LOAD_BLOCK, 1, gTexture69C4E4),
|
||||
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, 511, 512),
|
||||
gsDPSetTile(G_IM_FMT_I, G_IM_SIZ_8b, 4, 0, 0, 0, G_TX_WRAP | G_TX_NOMIRROR, 5, 1, G_TX_WRAP | G_TX_NOMIRROR, 5, 1),
|
||||
gsDPSetTileSize(0, 98, 100, 124, 124),
|
||||
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 1, gTexture66C8F4),
|
||||
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 0, 128, 6, 0, G_TX_WRAP | G_TX_NOMIRROR, 0, 0,
|
||||
G_TX_WRAP | G_TX_NOMIRROR, 0, 0),
|
||||
gsDPLoadBlock(6, 0, 0, 1023, 256),
|
||||
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 128, 1, 0, G_TX_CLAMP | G_TX_NOMIRROR, 5, 0, G_TX_CLAMP | G_TX_NOMIRROR,
|
||||
5, 0),
|
||||
gsDPSetTileSize(1, 0, 0, 124, 124),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
Gfx cloud_mesh[] = {
|
||||
//gsSPClearGeometryMode(G_LIGHTING),
|
||||
//gsSPVertex(cloud_mesh_vtx_cull + 0, 8, 0),
|
||||
gsSPSetGeometryMode(G_LIGHTING),
|
||||
//gsSPCullDisplayList(0, 7),
|
||||
gsSPDisplayList(mat_cloud_cutout),
|
||||
gsSPDisplayList(cloud_mesh_tri_0),
|
||||
gsSPEndDisplayList(),
|
||||
// gsSPClearGeometryMode(G_LIGHTING),
|
||||
// gsSPVertex(cloud_mesh_vtx_cull + 0, 8, 0),
|
||||
gsSPSetGeometryMode(G_LIGHTING),
|
||||
// gsSPCullDisplayList(0, 7),
|
||||
gsSPDisplayList(mat_cloud_cutout),
|
||||
gsSPDisplayList(cloud_mesh_tri_0),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
|
||||
@@ -12,9 +12,7 @@ extern "C" {
|
||||
}
|
||||
|
||||
class ACloud : public AActor {
|
||||
public:
|
||||
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
ACloud(FVector pos);
|
||||
|
||||
@@ -28,13 +26,12 @@ public:
|
||||
|
||||
bool PickedUp = false;
|
||||
uint32_t Timer = 0;
|
||||
|
||||
|
||||
Player* _player = NULL;
|
||||
|
||||
|
||||
f32 Hop = 3.0f;
|
||||
f32 Gravity = 200.0f;
|
||||
|
||||
f32 OldHop = 0;
|
||||
f32 OldGravity = 0;
|
||||
|
||||
};
|
||||
|
||||
@@ -41,14 +41,14 @@ AFinishline::AFinishline(std::optional<FVector> pos) {
|
||||
BoundingBoxSize = 0.0f;
|
||||
}
|
||||
|
||||
void AFinishline::Tick() {}
|
||||
void AFinishline::Tick() {
|
||||
}
|
||||
|
||||
void AFinishline::Draw(Camera *camera) {
|
||||
void AFinishline::Draw(Camera* camera) {
|
||||
Mat4 mtx;
|
||||
s16 temp = Pos[2];
|
||||
s32 maxObjectsReached;
|
||||
|
||||
|
||||
if (gGamestate == CREDITS_SEQUENCE) {
|
||||
return;
|
||||
}
|
||||
@@ -64,18 +64,21 @@ void AFinishline::Draw(Camera *camera) {
|
||||
if (D_800DC5BC != 0) {
|
||||
|
||||
gDPSetFogColor(gDisplayListHead++, D_801625EC, D_801625F4, D_801625F0, 0xFF);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D001C20);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D001C20);
|
||||
} else {
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D001B90);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D001B90);
|
||||
}
|
||||
} else if (D_800DC5BC != 0) {
|
||||
gDPSetFogColor(gDisplayListHead++, D_801625EC, D_801625F4, D_801625F0, 0xFF);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D001C88);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D001C88);
|
||||
} else {
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D001BD8);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D001BD8);
|
||||
}
|
||||
}
|
||||
|
||||
void AFinishline::Collision(Player* player, AActor* actor) {}
|
||||
void AFinishline::Collision(Player* player, AActor* actor) {
|
||||
}
|
||||
|
||||
bool AFinishline::IsMod() { return true; }
|
||||
bool AFinishline::IsMod() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ extern "C" {
|
||||
}
|
||||
|
||||
class AFinishline : public AActor {
|
||||
public:
|
||||
public:
|
||||
/**
|
||||
* Default behaviour places the finishline at the first waypoint.
|
||||
* @arg pos, optional. Sets a custom position
|
||||
@@ -29,13 +29,12 @@ public:
|
||||
|
||||
bool PickedUp = false;
|
||||
uint32_t Timer = 0;
|
||||
|
||||
|
||||
Player* _player = NULL;
|
||||
|
||||
|
||||
f32 Hop = 3.0f;
|
||||
f32 Gravity = 200.0f;
|
||||
|
||||
f32 OldHop = 0;
|
||||
f32 OldGravity = 0;
|
||||
|
||||
};
|
||||
|
||||
@@ -33,7 +33,7 @@ void AMarioSign::Tick() {
|
||||
}
|
||||
}
|
||||
|
||||
void AMarioSign::Draw(Camera *camera) {
|
||||
void AMarioSign::Draw(Camera* camera) {
|
||||
Mat4 sp40;
|
||||
f32 unk;
|
||||
|
||||
@@ -50,7 +50,7 @@ void AMarioSign::Draw(Camera *camera) {
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
|
||||
mtxf_pos_rotation_xyz(sp40, Pos, Rot);
|
||||
if (render_set_position(sp40, 0) != 0) {
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_mario_raceway_dl_sign);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_mario_raceway_dl_sign);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,8 +9,7 @@ extern "C" {
|
||||
}
|
||||
|
||||
class AMarioSign : public AActor {
|
||||
public:
|
||||
|
||||
public:
|
||||
virtual ~AMarioSign() = default;
|
||||
explicit AMarioSign(FVector pos);
|
||||
|
||||
|
||||
@@ -20,8 +20,8 @@ AShip::AShip(FVector pos, AShip::Skin skin) {
|
||||
Pos[1] = pos.y;
|
||||
Pos[2] = pos.z;
|
||||
Scale = FVector(0.4, 0.4, 0.4);
|
||||
|
||||
switch(skin) {
|
||||
|
||||
switch (skin) {
|
||||
case GHOSTSHIP:
|
||||
Name = "Ghostship";
|
||||
_skin = ghostship_Plane_mesh;
|
||||
@@ -53,4 +53,6 @@ void AShip::Tick() {
|
||||
// Rot.yaw = -static_cast<int16_t>(angle * (32768.0f / M_PI / 2.0f));
|
||||
}
|
||||
|
||||
bool AShip::IsMod() { return true; }
|
||||
bool AShip::IsMod() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -11,8 +11,7 @@ extern "C" {
|
||||
}
|
||||
|
||||
class AShip : public AActor {
|
||||
public:
|
||||
|
||||
public:
|
||||
enum Skin {
|
||||
GHOSTSHIP,
|
||||
SHIP2,
|
||||
@@ -26,9 +25,9 @@ public:
|
||||
virtual bool IsMod() override;
|
||||
|
||||
FVector Spawn;
|
||||
//FVector Pos;
|
||||
///IRotator Rot = {0, 0, 0};
|
||||
//FVector Scale = {0.4, 0.4, 0.4};
|
||||
private:
|
||||
// FVector Pos;
|
||||
/// IRotator Rot = {0, 0, 0};
|
||||
// FVector Scale = {0.4, 0.4, 0.4};
|
||||
private:
|
||||
Gfx* _skin;
|
||||
};
|
||||
|
||||
@@ -17,12 +17,12 @@ ASpaghettiShip::ASpaghettiShip(FVector pos) {
|
||||
Pos[2] = pos.z;
|
||||
Spawn = pos;
|
||||
Spawn.y += 10;
|
||||
Scale = {0.4, 0.4, 0.4};
|
||||
Scale = { 0.4, 0.4, 0.4 };
|
||||
}
|
||||
|
||||
void ASpaghettiShip::Tick() {
|
||||
static float angle = 0.0f; // Keeps track of the ship's rotation around the circle
|
||||
float radius = 150.0f; // The radius of the circular path
|
||||
float radius = 150.0f; // The radius of the circular path
|
||||
float speed = 0.01f; // Speed of rotation
|
||||
|
||||
angle += speed; // Increment the angle to move in a circle
|
||||
@@ -37,22 +37,22 @@ void ASpaghettiShip::Tick() {
|
||||
WheelRot.pitch += 500;
|
||||
}
|
||||
|
||||
void ASpaghettiShip::Draw(Camera *camera) {
|
||||
void ASpaghettiShip::Draw(Camera* camera) {
|
||||
Mat4 shipMtx;
|
||||
Mat4 objectMtx;
|
||||
Mat4 resultMtx;
|
||||
Vec3f hullPos = {Pos[0], Pos[1], Pos[2]};
|
||||
Vec3s hullRot = {Rot[0], Rot[1], Rot[2]};
|
||||
Vec3s rot = {WheelRot.pitch, WheelRot.yaw, WheelRot.roll};
|
||||
Vec3f hullPos = { Pos[0], Pos[1], Pos[2] };
|
||||
Vec3s hullRot = { Rot[0], Rot[1], Rot[2] };
|
||||
Vec3s rot = { WheelRot.pitch, WheelRot.yaw, WheelRot.roll };
|
||||
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
|
||||
|
||||
ApplyMatrixTransformations(shipMtx, *(FVector*)Pos, *(IRotator*)Rot, Scale);
|
||||
ApplyMatrixTransformations(shipMtx, *(FVector*) Pos, *(IRotator*) Rot, Scale);
|
||||
if (render_set_position(shipMtx, 0) != 0) {}
|
||||
|
||||
// Render the ships hull
|
||||
ApplyMatrixTransformations(objectMtx, {0, 0, 0}, {0, 0, 0}, {1, 1, 1});
|
||||
ApplyMatrixTransformations(objectMtx, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 });
|
||||
mtxf_multiplication(resultMtx, shipMtx, objectMtx);
|
||||
if (render_set_position(resultMtx, 3) != 0) {
|
||||
gSPDisplayList(gDisplayListHead++, ship1_spag1_mesh);
|
||||
@@ -67,10 +67,10 @@ void ASpaghettiShip::Draw(Camera *camera) {
|
||||
gSPDisplayList(gDisplayListHead++, wheels_Spaghetti_002_mesh);
|
||||
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
|
||||
}
|
||||
|
||||
|
||||
// Back tyre
|
||||
AddLocalRotation(shipMtx, WheelRot);
|
||||
ApplyMatrixTransformations(objectMtx, FVector(0, 0, -165), {0, 0, 0}, {1, 1, 1});
|
||||
ApplyMatrixTransformations(objectMtx, FVector(0, 0, -165), { 0, 0, 0 }, { 1, 1, 1 });
|
||||
mtxf_multiplication(resultMtx, shipMtx, objectMtx);
|
||||
if (render_set_position(resultMtx, 3) != 0) {
|
||||
gSPDisplayList(gDisplayListHead++, wheels_Spaghetti_002_mesh);
|
||||
@@ -78,4 +78,6 @@ void ASpaghettiShip::Draw(Camera *camera) {
|
||||
}
|
||||
}
|
||||
|
||||
bool ASpaghettiShip::IsMod() { return true; }
|
||||
bool ASpaghettiShip::IsMod() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ extern "C" {
|
||||
}
|
||||
|
||||
class ASpaghettiShip : public AActor {
|
||||
public:
|
||||
public:
|
||||
explicit ASpaghettiShip(FVector pos);
|
||||
virtual ~ASpaghettiShip() = default;
|
||||
|
||||
@@ -20,5 +20,5 @@ public:
|
||||
virtual bool IsMod() override;
|
||||
|
||||
FVector Spawn;
|
||||
IRotator WheelRot = {0, 0, 0};
|
||||
IRotator WheelRot = { 0, 0, 0 };
|
||||
};
|
||||
|
||||
@@ -33,10 +33,12 @@ void AStarship::Tick() {
|
||||
SetLocation(pos);
|
||||
|
||||
// Keep y from changing (or adjust it if necessary)
|
||||
//Pos.y = Spawn.y;
|
||||
// Pos.y = Spawn.y;
|
||||
|
||||
// Rotate to face forward along the circle
|
||||
Rot[1] = angle * (180.0f / M_PI) + 90.0f;
|
||||
}
|
||||
|
||||
bool AStarship::IsMod() { return true; }
|
||||
bool AStarship::IsMod() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ extern "C" {
|
||||
}
|
||||
|
||||
class AStarship : public AActor {
|
||||
public:
|
||||
public:
|
||||
explicit AStarship(FVector pos);
|
||||
virtual ~AStarship() = default;
|
||||
|
||||
|
||||
@@ -37,13 +37,12 @@ void ATree::Draw(Camera* camera) {
|
||||
return;
|
||||
}
|
||||
|
||||
dist = is_within_render_distance(camera->pos, Pos, camera->rot[1], 0, gCameraZoom[camera - camera1],
|
||||
DrawDistance);
|
||||
dist = is_within_render_distance(camera->pos, Pos, camera->rot[1], 0, gCameraZoom[camera - camera1], DrawDistance);
|
||||
|
||||
if (CVarGetInteger("gNoCulling", 0) == 1) {
|
||||
dist = MAX(dist, 0.0f);
|
||||
}
|
||||
|
||||
|
||||
if (dist < 0.0f) {
|
||||
return;
|
||||
}
|
||||
@@ -63,5 +62,7 @@ void ATree::Draw(Camera* camera) {
|
||||
}
|
||||
}
|
||||
|
||||
void ATree::Collision(Player* player, AActor*) { }
|
||||
void ATree::Destroy() { }
|
||||
void ATree::Collision(Player* player, AActor*) {
|
||||
}
|
||||
void ATree::Destroy() {
|
||||
}
|
||||
|
||||
@@ -7,13 +7,11 @@ extern "C" {
|
||||
#include "common_structs.h"
|
||||
}
|
||||
|
||||
|
||||
// Note that this doesn't seem to work right
|
||||
// Use add_actor_to_empty_slot(test, rot, vel, ACTOR_TREE_MARIO_RACEWAY);
|
||||
// to spawn stock actors
|
||||
class ATree : public AActor {
|
||||
public:
|
||||
|
||||
public:
|
||||
Gfx* Displaylist;
|
||||
const char* Tlut;
|
||||
f32 DrawDistance;
|
||||
|
||||
@@ -22,7 +22,7 @@ void AWarioSign::Tick() {
|
||||
Rot[1] += 0xB6;
|
||||
}
|
||||
|
||||
void AWarioSign::Draw(Camera *camera) {
|
||||
void AWarioSign::Draw(Camera* camera) {
|
||||
Mat4 sp38;
|
||||
f32 unk =
|
||||
is_within_render_distance(camera->pos, Pos, camera->rot[1], 0, gCameraZoom[camera - camera1], 16000000.0f);
|
||||
@@ -37,7 +37,7 @@ void AWarioSign::Draw(Camera *camera) {
|
||||
mtxf_pos_rotation_xyz(sp38, Pos, Rot);
|
||||
if (render_set_position(sp38, 0) != 0) {
|
||||
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_wario_stadium_dl_sign);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_wario_stadium_dl_sign);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,8 +9,7 @@ extern "C" {
|
||||
}
|
||||
|
||||
class AWarioSign : public AActor {
|
||||
public:
|
||||
|
||||
public:
|
||||
virtual ~AWarioSign() = default;
|
||||
explicit AWarioSign(FVector pos);
|
||||
|
||||
|
||||
@@ -15,28 +15,28 @@
|
||||
#include "assets/boo_frames.h"
|
||||
|
||||
extern "C" {
|
||||
#include "main.h"
|
||||
#include "camera.h"
|
||||
#include "course_offsets.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "render_courses.h"
|
||||
#include "code_8006E9C0.h"
|
||||
#include "code_80057C60.h"
|
||||
#include "defines.h"
|
||||
#include "math_util.h"
|
||||
#include "external.h"
|
||||
#include "code_80005FD0.h"
|
||||
#include "spawn_players.h"
|
||||
#include "render_objects.h"
|
||||
#include "assets/common_data.h"
|
||||
#include "save.h"
|
||||
#include "staff_ghosts.h"
|
||||
#include "actors.h"
|
||||
#include "collision.h"
|
||||
#include "memory.h"
|
||||
#include "course_offsets.h"
|
||||
#include "course.h"
|
||||
extern const char *banshee_boardwalk_dls[];
|
||||
#include "main.h"
|
||||
#include "camera.h"
|
||||
#include "course_offsets.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "render_courses.h"
|
||||
#include "code_8006E9C0.h"
|
||||
#include "code_80057C60.h"
|
||||
#include "defines.h"
|
||||
#include "math_util.h"
|
||||
#include "external.h"
|
||||
#include "code_80005FD0.h"
|
||||
#include "spawn_players.h"
|
||||
#include "render_objects.h"
|
||||
#include "assets/common_data.h"
|
||||
#include "save.h"
|
||||
#include "staff_ghosts.h"
|
||||
#include "actors.h"
|
||||
#include "collision.h"
|
||||
#include "memory.h"
|
||||
#include "course_offsets.h"
|
||||
#include "course.h"
|
||||
extern const char* banshee_boardwalk_dls[];
|
||||
}
|
||||
|
||||
const course_texture banshee_boardwalk_textures[] = {
|
||||
@@ -95,7 +95,7 @@ BansheeBoardwalk::BansheeBoardwalk() {
|
||||
Props.NearPersp = 2.0f;
|
||||
Props.FarPersp = 2700.0f;
|
||||
|
||||
Props.PathSizes = {0x2EE, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0};
|
||||
Props.PathSizes = { 0x2EE, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
Props.D_0D009418[0] = 4.1666665f;
|
||||
Props.D_0D009418[1] = 5.5833334f;
|
||||
@@ -117,12 +117,12 @@ BansheeBoardwalk::BansheeBoardwalk() {
|
||||
Props.D_0D009808[2] = 5.75f;
|
||||
Props.D_0D009808[3] = 6.3333334f;
|
||||
|
||||
Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_banshee_boardwalk_unknown_waypoints);
|
||||
Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_banshee_boardwalk_unknown_waypoints);
|
||||
Props.PathTable[1] = NULL;
|
||||
Props.PathTable[2] = NULL;
|
||||
Props.PathTable[3] = NULL;
|
||||
|
||||
Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_banshee_boardwalk_track_waypoints);
|
||||
Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_banshee_boardwalk_track_waypoints);
|
||||
Props.PathTable2[1] = NULL;
|
||||
Props.PathTable2[2] = NULL;
|
||||
Props.PathTable2[3] = NULL;
|
||||
@@ -130,14 +130,14 @@ BansheeBoardwalk::BansheeBoardwalk() {
|
||||
Props.Clouds = NULL; // no clouds
|
||||
Props.CloudList = NULL;
|
||||
|
||||
Props.Skybox.TopRight = {0, 0, 0};
|
||||
Props.Skybox.BottomRight = {0, 0, 0};
|
||||
Props.Skybox.BottomLeft = {0, 0, 0};
|
||||
Props.Skybox.TopLeft = {0, 0, 0};
|
||||
Props.Skybox.FloorTopRight = {0, 0, 0};
|
||||
Props.Skybox.FloorBottomRight = {0, 0, 0};
|
||||
Props.Skybox.FloorBottomLeft = {0, 0, 0};
|
||||
Props.Skybox.FloorTopLeft = {0, 0, 0};
|
||||
Props.Skybox.TopRight = { 0, 0, 0 };
|
||||
Props.Skybox.BottomRight = { 0, 0, 0 };
|
||||
Props.Skybox.BottomLeft = { 0, 0, 0 };
|
||||
Props.Skybox.TopLeft = { 0, 0, 0 };
|
||||
Props.Skybox.FloorTopRight = { 0, 0, 0 };
|
||||
Props.Skybox.FloorBottomRight = { 0, 0, 0 };
|
||||
Props.Skybox.FloorBottomLeft = { 0, 0, 0 };
|
||||
Props.Skybox.FloorTopLeft = { 0, 0, 0 };
|
||||
Props.Sequence = MusicSeq::MUSIC_SEQ_BANSHEE_BOARDWALK;
|
||||
|
||||
Props.WaterLevel = -80.0f;
|
||||
@@ -150,19 +150,19 @@ void BansheeBoardwalk::Load() {
|
||||
D_801625EC = 0;
|
||||
D_801625F4 = 0;
|
||||
D_801625F0 = 0;
|
||||
parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_banshee_boardwalk_track_sections));
|
||||
parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_banshee_boardwalk_track_sections));
|
||||
func_80295C6C();
|
||||
find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07000878), 128, 0, 0, 0);
|
||||
find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07000878), 128, 0, 0, 0);
|
||||
}
|
||||
|
||||
void BansheeBoardwalk::LoadTextures() {
|
||||
}
|
||||
|
||||
void BansheeBoardwalk::BeginPlay() {
|
||||
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_banshee_boardwalk_item_box_spawns));
|
||||
spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_banshee_boardwalk_item_box_spawns));
|
||||
|
||||
|
||||
gWorldInstance.AddObject(new OCheepCheep(FVector(xOrientation * -1650.0, -200.0f, -1650.0f), OCheepCheep::CheepType::RACE, IPathSpan(160, 170)));
|
||||
gWorldInstance.AddObject(new OCheepCheep(FVector(xOrientation * -1650.0, -200.0f, -1650.0f),
|
||||
OCheepCheep::CheepType::RACE, IPathSpan(160, 170)));
|
||||
|
||||
OTrashBin::Behaviour bhv;
|
||||
if (gModeSelection == TIME_TRIALS) {
|
||||
@@ -178,7 +178,7 @@ void BansheeBoardwalk::BeginPlay() {
|
||||
}
|
||||
|
||||
if ((gGamestate != CREDITS_SEQUENCE) && (gModeSelection != TIME_TRIALS)) {
|
||||
gWorldInstance.AddObject(new OBat(FVector(0,0,0), IRotator(0, 0, 90)));
|
||||
gWorldInstance.AddObject(new OBat(FVector(0, 0, 0), IRotator(0, 0, 90)));
|
||||
gWorldInstance.AddObject(new OBoos(5, IPathSpan(180, 190), IPathSpan(200, 210), IPathSpan(280, 290)));
|
||||
gWorldInstance.AddObject(new OBoos(5, IPathSpan(490, 500), IPathSpan(510, 520), IPathSpan(620, 630)));
|
||||
}
|
||||
@@ -207,16 +207,16 @@ void BansheeBoardwalk::UpdateCourseObjects() {
|
||||
if (gGamestate != CREDITS_SEQUENCE) {
|
||||
func_8007E4C4();
|
||||
if (gModeSelection != TIME_TRIALS) {
|
||||
//update_bat();
|
||||
// update_bat();
|
||||
}
|
||||
//wrapper_update_boos();
|
||||
// wrapper_update_boos();
|
||||
}
|
||||
}
|
||||
|
||||
void BansheeBoardwalk::RenderCourseObjects(s32 cameraId) {
|
||||
if (gGamestate != CREDITS_SEQUENCE) {
|
||||
//render_object_bat(cameraId);
|
||||
//render_object_boos(cameraId);
|
||||
// render_object_bat(cameraId);
|
||||
// render_object_boos(cameraId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -224,8 +224,7 @@ void BansheeBoardwalk::SomeSounds() {
|
||||
}
|
||||
|
||||
void BansheeBoardwalk::WhatDoesThisDo(Player* player, int8_t playerId) {
|
||||
if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) &&
|
||||
((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) {
|
||||
if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) {
|
||||
if (D_80165300[playerId] != 1) {
|
||||
func_800CA288(playerId, 0x41);
|
||||
}
|
||||
@@ -239,8 +238,7 @@ void BansheeBoardwalk::WhatDoesThisDo(Player* player, int8_t playerId) {
|
||||
}
|
||||
|
||||
void BansheeBoardwalk::WhatDoesThisDoAI(Player* player, int8_t playerId) {
|
||||
if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) &&
|
||||
((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) {
|
||||
if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x180) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1E1)) {
|
||||
if (D_80165300[playerId] != 1) {
|
||||
func_800CA2E4(playerId, 0x41);
|
||||
}
|
||||
@@ -308,12 +306,12 @@ void BansheeBoardwalk::Render(struct UnkStruct_800DC5EC* arg0) {
|
||||
mtxf_translate(spCC, spA8);
|
||||
render_set_position(spCC, 0);
|
||||
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_banshee_boardwalk_dl_B278);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_banshee_boardwalk_dl_B278);
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
}
|
||||
|
||||
void BansheeBoardwalk::RenderCredits() {
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_banshee_boardwalk_dl_B308));
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_banshee_boardwalk_dl_B308));
|
||||
}
|
||||
|
||||
void BansheeBoardwalk::ScrollingTextures() {
|
||||
@@ -337,7 +335,8 @@ void BansheeBoardwalk::Waypoints(Player* player, int8_t playerId) {
|
||||
}
|
||||
}
|
||||
|
||||
void BansheeBoardwalk::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) {
|
||||
void BansheeBoardwalk::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot,
|
||||
uint16_t playerDirection) {
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
|
||||
@@ -345,13 +344,14 @@ void BansheeBoardwalk::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pat
|
||||
gDPSetBlendMask(gDisplayListHead++, 0xFF);
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
|
||||
// d_course_banshee_boardwalk_packed_dl_878
|
||||
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07000878));
|
||||
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*) 0x07000878));
|
||||
gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE);
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
}
|
||||
|
||||
void BansheeBoardwalk::CreditsSpawnActors() {
|
||||
find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07000878), 0x32, 0, 0, 0);
|
||||
find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07000878), 0x32, 0, 0, 0);
|
||||
}
|
||||
|
||||
void BansheeBoardwalk::Destroy() { }
|
||||
void BansheeBoardwalk::Destroy() {
|
||||
}
|
||||
|
||||
@@ -4,30 +4,30 @@
|
||||
#include "Course.h"
|
||||
|
||||
extern "C" {
|
||||
#include "assets/banshee_boardwalk_vertices.h"
|
||||
#include "assets/banshee_boardwalk_displaylists.h"
|
||||
#include "assets/banshee_boardwalk_data.h"
|
||||
#include "course_offsets.h"
|
||||
#include "camera.h"
|
||||
#include "data/some_data.h"
|
||||
#include "objects.h"
|
||||
#include "path_spawn_metadata.h"
|
||||
extern const course_texture banshee_boardwalk_textures[];
|
||||
#include "assets/banshee_boardwalk_vertices.h"
|
||||
#include "assets/banshee_boardwalk_displaylists.h"
|
||||
#include "assets/banshee_boardwalk_data.h"
|
||||
#include "course_offsets.h"
|
||||
#include "camera.h"
|
||||
#include "data/some_data.h"
|
||||
#include "objects.h"
|
||||
#include "path_spawn_metadata.h"
|
||||
extern const course_texture banshee_boardwalk_textures[];
|
||||
}
|
||||
|
||||
class BansheeBoardwalk : public Course {
|
||||
public:
|
||||
virtual ~BansheeBoardwalk() = default; // Virtual destructor for proper cleanup in derived classes
|
||||
public:
|
||||
virtual ~BansheeBoardwalk() = default; // Virtual destructor for proper cleanup in derived classes
|
||||
|
||||
// Constructor
|
||||
explicit BansheeBoardwalk();
|
||||
|
||||
// virtual void Load(const char* courseVtx,
|
||||
// course_texture* textures, const char* displaylists, size_t dlSize);
|
||||
// virtual void Load(const char* courseVtx,
|
||||
// course_texture* textures, const char* displaylists, size_t dlSize);
|
||||
virtual void Load() override;
|
||||
virtual void LoadTextures() override;
|
||||
virtual void BeginPlay() override;
|
||||
//virtual void InitClouds() override;
|
||||
// virtual void InitClouds() override;
|
||||
virtual void InitCourseObjects() override;
|
||||
virtual void UpdateCourseObjects() override;
|
||||
virtual void RenderCourseObjects(s32 cameraId) override;
|
||||
@@ -35,10 +35,11 @@ public:
|
||||
virtual void WhatDoesThisDo(Player* player, int8_t playerId) override;
|
||||
virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override;
|
||||
virtual void Render(struct UnkStruct_800DC5EC*) override;
|
||||
virtual void RenderCredits() override;
|
||||
virtual void RenderCredits() override;
|
||||
virtual void ScrollingTextures() override;
|
||||
virtual void Waypoints(Player*, int8_t) override;
|
||||
virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) override;
|
||||
virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot,
|
||||
uint16_t playerDirection) override;
|
||||
virtual void CreditsSpawnActors() override;
|
||||
virtual void Destroy() override;
|
||||
};
|
||||
|
||||
@@ -9,27 +9,27 @@
|
||||
#include "assets/big_donut_data.h"
|
||||
|
||||
extern "C" {
|
||||
#include "main.h"
|
||||
#include "camera.h"
|
||||
#include "course_offsets.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "render_courses.h"
|
||||
#include "code_8006E9C0.h"
|
||||
#include "code_80057C60.h"
|
||||
#include "defines.h"
|
||||
#include "math_util.h"
|
||||
#include "external.h"
|
||||
#include "code_80005FD0.h"
|
||||
#include "spawn_players.h"
|
||||
#include "render_objects.h"
|
||||
#include "assets/common_data.h"
|
||||
#include "save.h"
|
||||
#include "staff_ghosts.h"
|
||||
#include "actors.h"
|
||||
#include "collision.h"
|
||||
#include "memory.h"
|
||||
extern const char *big_donut_dls[];
|
||||
extern s16 currentScreenSection;
|
||||
#include "main.h"
|
||||
#include "camera.h"
|
||||
#include "course_offsets.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "render_courses.h"
|
||||
#include "code_8006E9C0.h"
|
||||
#include "code_80057C60.h"
|
||||
#include "defines.h"
|
||||
#include "math_util.h"
|
||||
#include "external.h"
|
||||
#include "code_80005FD0.h"
|
||||
#include "spawn_players.h"
|
||||
#include "render_objects.h"
|
||||
#include "assets/common_data.h"
|
||||
#include "save.h"
|
||||
#include "staff_ghosts.h"
|
||||
#include "actors.h"
|
||||
#include "collision.h"
|
||||
#include "memory.h"
|
||||
extern const char* big_donut_dls[];
|
||||
extern s16 currentScreenSection;
|
||||
}
|
||||
|
||||
const course_texture big_donut_textures[] = {
|
||||
@@ -63,7 +63,7 @@ BigDonut::BigDonut() {
|
||||
Props.AIMinimumSeparation = 0.5f;
|
||||
Props.AISteeringSensitivity = 40;
|
||||
|
||||
Props.PathSizes = {1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0};
|
||||
Props.PathSizes = { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
Props.D_0D009418[0] = 4.1666665f;
|
||||
Props.D_0D009418[1] = 5.5833334f;
|
||||
@@ -98,14 +98,14 @@ BigDonut::BigDonut() {
|
||||
Props.Clouds = NULL; // no clouds
|
||||
Props.CloudList = NULL;
|
||||
|
||||
Props.Skybox.TopRight = {0, 0, 0};
|
||||
Props.Skybox.BottomRight = {0, 0, 0};
|
||||
Props.Skybox.BottomLeft = {0, 0, 0};
|
||||
Props.Skybox.TopLeft = {0, 0, 0};
|
||||
Props.Skybox.FloorTopRight = {0, 0, 0};
|
||||
Props.Skybox.FloorBottomRight = {0, 0, 0};
|
||||
Props.Skybox.FloorBottomLeft = {0, 0, 0};
|
||||
Props.Skybox.FloorTopLeft = {0, 0, 0};
|
||||
Props.Skybox.TopRight = { 0, 0, 0 };
|
||||
Props.Skybox.BottomRight = { 0, 0, 0 };
|
||||
Props.Skybox.BottomLeft = { 0, 0, 0 };
|
||||
Props.Skybox.TopLeft = { 0, 0, 0 };
|
||||
Props.Skybox.FloorTopRight = { 0, 0, 0 };
|
||||
Props.Skybox.FloorBottomRight = { 0, 0, 0 };
|
||||
Props.Skybox.FloorBottomLeft = { 0, 0, 0 };
|
||||
Props.Skybox.FloorTopLeft = { 0, 0, 0 };
|
||||
Props.Sequence = MusicSeq::MUSIC_SEQ_BATTLE_ARENAS;
|
||||
|
||||
Props.WaterLevel = 100.0f;
|
||||
@@ -115,23 +115,23 @@ void BigDonut::Load() {
|
||||
Course::Load();
|
||||
|
||||
// d_course_big_donut_packed_dl_1018
|
||||
generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x07001018), 6);
|
||||
generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x07001018), 6);
|
||||
// d_course_big_donut_packed_dl_450
|
||||
generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x07000450), 6);
|
||||
generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x07000450), 6);
|
||||
// d_course_big_donut_packed_dl_AC0
|
||||
generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x07000AC0), 6);
|
||||
generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x07000AC0), 6);
|
||||
// d_course_big_donut_packed_dl_B58
|
||||
generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x07000B58), 6);
|
||||
generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x07000B58), 6);
|
||||
// d_course_big_donut_packed_dl_230
|
||||
generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x07000230), 6);
|
||||
generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x07000230), 6);
|
||||
func_80295C6C();
|
||||
}
|
||||
|
||||
void BigDonut::BeginPlay() {
|
||||
spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_big_donut_item_box_spawns));
|
||||
spawn_all_item_boxes((ActorSpawnData*) LOAD_ASSET_RAW(d_course_big_donut_item_box_spawns));
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
FVector pos = {0, 0, 0};
|
||||
FVector pos = { 0, 0, 0 };
|
||||
|
||||
gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][20], 20, 0, 1.0f));
|
||||
gWorldInstance.AddObject(new OBombKart(pos, &D_80164550[0][40], 40, 0, 1.0f));
|
||||
@@ -154,22 +154,24 @@ void BigDonut::Render(struct UnkStruct_800DC5EC* arg0) {
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
|
||||
// d_course_big_donut_packed_dl_DE8
|
||||
gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000DE8)));
|
||||
gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000DE8)));
|
||||
}
|
||||
// d_course_big_donut_packed_dl_450
|
||||
gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000450)));
|
||||
gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000450)));
|
||||
// d_course_big_donut_packed_dl_AC0
|
||||
gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000AC0)));
|
||||
gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000AC0)));
|
||||
// d_course_big_donut_packed_dl_D20
|
||||
gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000D20)));
|
||||
gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000D20)));
|
||||
// d_course_big_donut_packed_dl_230
|
||||
gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x07000230)));
|
||||
gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x07000230)));
|
||||
}
|
||||
|
||||
void BigDonut::RenderCredits() {}
|
||||
void BigDonut::RenderCredits() {
|
||||
}
|
||||
|
||||
void BigDonut::Waypoints(Player* player, int8_t playerId) {
|
||||
player->nearestWaypointId = 0;
|
||||
}
|
||||
|
||||
void BigDonut::Destroy() { }
|
||||
void BigDonut::Destroy() {
|
||||
}
|
||||
|
||||
@@ -4,19 +4,19 @@
|
||||
#include "Course.h"
|
||||
|
||||
extern "C" {
|
||||
#include "assets/big_donut_vertices.h"
|
||||
#include "assets/big_donut_displaylists.h"
|
||||
#include "assets/big_donut_data.h"
|
||||
#include "course_offsets.h"
|
||||
#include "camera.h"
|
||||
#include "data/some_data.h"
|
||||
#include "objects.h"
|
||||
#include "path_spawn_metadata.h"
|
||||
extern const course_texture big_donut_textures[];
|
||||
#include "assets/big_donut_vertices.h"
|
||||
#include "assets/big_donut_displaylists.h"
|
||||
#include "assets/big_donut_data.h"
|
||||
#include "course_offsets.h"
|
||||
#include "camera.h"
|
||||
#include "data/some_data.h"
|
||||
#include "objects.h"
|
||||
#include "path_spawn_metadata.h"
|
||||
extern const course_texture big_donut_textures[];
|
||||
}
|
||||
|
||||
class BigDonut : public Course {
|
||||
public:
|
||||
public:
|
||||
virtual ~BigDonut() = default;
|
||||
|
||||
explicit BigDonut();
|
||||
@@ -24,7 +24,7 @@ public:
|
||||
virtual void Load() override;
|
||||
virtual void BeginPlay() override;
|
||||
virtual void Render(struct UnkStruct_800DC5EC*) override;
|
||||
virtual void RenderCredits() override;
|
||||
virtual void RenderCredits() override;
|
||||
virtual void Waypoints(Player* player, int8_t playerId) override;
|
||||
virtual void Destroy() override;
|
||||
};
|
||||
|
||||
@@ -9,28 +9,28 @@
|
||||
#include "assets/block_fort_data.h"
|
||||
|
||||
extern "C" {
|
||||
#include "main.h"
|
||||
#include "camera.h"
|
||||
#include "course_offsets.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "render_courses.h"
|
||||
#include "code_8006E9C0.h"
|
||||
#include "code_80057C60.h"
|
||||
#include "defines.h"
|
||||
#include "math_util.h"
|
||||
#include "external.h"
|
||||
#include "code_80005FD0.h"
|
||||
#include "spawn_players.h"
|
||||
#include "render_objects.h"
|
||||
#include "assets/common_data.h"
|
||||
#include "save.h"
|
||||
#include "staff_ghosts.h"
|
||||
#include "actors.h"
|
||||
#include "collision.h"
|
||||
#include "memory.h"
|
||||
#include "course_offsets.h"
|
||||
extern const char *block_fort_dls[];
|
||||
extern s16 currentScreenSection;
|
||||
#include "main.h"
|
||||
#include "camera.h"
|
||||
#include "course_offsets.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "render_courses.h"
|
||||
#include "code_8006E9C0.h"
|
||||
#include "code_80057C60.h"
|
||||
#include "defines.h"
|
||||
#include "math_util.h"
|
||||
#include "external.h"
|
||||
#include "code_80005FD0.h"
|
||||
#include "spawn_players.h"
|
||||
#include "render_objects.h"
|
||||
#include "assets/common_data.h"
|
||||
#include "save.h"
|
||||
#include "staff_ghosts.h"
|
||||
#include "actors.h"
|
||||
#include "collision.h"
|
||||
#include "memory.h"
|
||||
#include "course_offsets.h"
|
||||
extern const char* block_fort_dls[];
|
||||
extern s16 currentScreenSection;
|
||||
}
|
||||
|
||||
const course_texture block_fort_textures[] = {
|
||||
@@ -68,7 +68,7 @@ BlockFort::BlockFort() {
|
||||
Props.NearPersp = 2.0f;
|
||||
Props.FarPersp = 2700.0f;
|
||||
|
||||
Props.PathSizes = {1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0};
|
||||
Props.PathSizes = { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
Props.D_0D009418[0] = 4.1666665f;
|
||||
Props.D_0D009418[1] = 5.5833334f;
|
||||
@@ -103,27 +103,27 @@ BlockFort::BlockFort() {
|
||||
Props.Clouds = NULL; // no clouds
|
||||
Props.CloudList = NULL;
|
||||
|
||||
Props.Skybox.TopRight = {128, 184, 248};
|
||||
Props.Skybox.BottomRight = {216, 232, 248};
|
||||
Props.Skybox.BottomLeft = {216, 232, 248};
|
||||
Props.Skybox.TopLeft = {128, 184, 248};
|
||||
Props.Skybox.FloorTopRight = {216, 232, 248};
|
||||
Props.Skybox.FloorBottomRight = {0, 0, 0};
|
||||
Props.Skybox.FloorBottomLeft = {0, 0, 0};
|
||||
Props.Skybox.FloorTopLeft = {216, 232, 248};
|
||||
Props.Skybox.TopRight = { 128, 184, 248 };
|
||||
Props.Skybox.BottomRight = { 216, 232, 248 };
|
||||
Props.Skybox.BottomLeft = { 216, 232, 248 };
|
||||
Props.Skybox.TopLeft = { 128, 184, 248 };
|
||||
Props.Skybox.FloorTopRight = { 216, 232, 248 };
|
||||
Props.Skybox.FloorBottomRight = { 0, 0, 0 };
|
||||
Props.Skybox.FloorBottomLeft = { 0, 0, 0 };
|
||||
Props.Skybox.FloorTopLeft = { 216, 232, 248 };
|
||||
Props.Sequence = MusicSeq::MUSIC_SEQ_CHOCO_MOUNTAIN;
|
||||
}
|
||||
|
||||
void BlockFort::Load() {
|
||||
Course::Load();
|
||||
|
||||
generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*)0x070015C0), 1);
|
||||
generate_collision_mesh_with_default_section_id((Gfx*) segmented_gfx_to_virtual((void*) 0x070015C0), 1);
|
||||
func_80295C6C();
|
||||
Props.WaterLevel = gCourseMinY - 10.0f;
|
||||
}
|
||||
|
||||
void BlockFort::BeginPlay() {
|
||||
spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_block_fort_item_box_spawns));
|
||||
spawn_all_item_boxes((ActorSpawnData*) LOAD_ASSET_RAW(d_course_block_fort_item_box_spawns));
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
FVector pos = { 0, 0, 0 };
|
||||
@@ -144,7 +144,7 @@ void BlockFort::Render(struct UnkStruct_800DC5EC* arg0) {
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
|
||||
// d_course_block_fort_packed_dl_15C0
|
||||
gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*)0x070015C0)));
|
||||
gSPDisplayList(gDisplayListHead++, (segmented_gfx_to_virtual((void*) 0x070015C0)));
|
||||
}
|
||||
|
||||
void BlockFort::Waypoints(Player* player, int8_t playerId) {
|
||||
|
||||
@@ -4,26 +4,26 @@
|
||||
#include "Course.h"
|
||||
|
||||
extern "C" {
|
||||
#include "assets/block_fort_vertices.h"
|
||||
#include "assets/block_fort_displaylists.h"
|
||||
#include "assets/block_fort_data.h"
|
||||
#include "course_offsets.h"
|
||||
#include "camera.h"
|
||||
#include "data/some_data.h"
|
||||
#include "objects.h"
|
||||
#include "path_spawn_metadata.h"
|
||||
extern const course_texture block_fort_textures[];
|
||||
#include "assets/block_fort_vertices.h"
|
||||
#include "assets/block_fort_displaylists.h"
|
||||
#include "assets/block_fort_data.h"
|
||||
#include "course_offsets.h"
|
||||
#include "camera.h"
|
||||
#include "data/some_data.h"
|
||||
#include "objects.h"
|
||||
#include "path_spawn_metadata.h"
|
||||
extern const course_texture block_fort_textures[];
|
||||
}
|
||||
|
||||
class BlockFort : public Course {
|
||||
public:
|
||||
virtual ~BlockFort() = default; // Virtual destructor for proper cleanup in derived classes
|
||||
public:
|
||||
virtual ~BlockFort() = default; // Virtual destructor for proper cleanup in derived classes
|
||||
|
||||
// Constructor
|
||||
explicit BlockFort();
|
||||
|
||||
// virtual void Load(const char* courseVtx,
|
||||
// course_texture* textures, const char* displaylists, size_t dlSize);
|
||||
// virtual void Load(const char* courseVtx,
|
||||
// course_texture* textures, const char* displaylists, size_t dlSize);
|
||||
virtual void Load() override;
|
||||
virtual void BeginPlay() override;
|
||||
virtual void Render(struct UnkStruct_800DC5EC*) override;
|
||||
|
||||
@@ -11,28 +11,28 @@
|
||||
#include "bowsers_castle_data.h"
|
||||
|
||||
extern "C" {
|
||||
#include "main.h"
|
||||
#include "camera.h"
|
||||
#include "course_offsets.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "render_courses.h"
|
||||
#include "code_8006E9C0.h"
|
||||
#include "code_80057C60.h"
|
||||
#include "defines.h"
|
||||
#include "math_util.h"
|
||||
#include "external.h"
|
||||
#include "code_80005FD0.h"
|
||||
#include "spawn_players.h"
|
||||
#include "render_objects.h"
|
||||
#include "assets/common_data.h"
|
||||
#include "save.h"
|
||||
#include "staff_ghosts.h"
|
||||
#include "actors.h"
|
||||
#include "collision.h"
|
||||
#include "code_8003DC40.h"
|
||||
#include "memory.h"
|
||||
#include "course.h"
|
||||
extern const char *bowsers_castle_dls[];
|
||||
#include "main.h"
|
||||
#include "camera.h"
|
||||
#include "course_offsets.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "render_courses.h"
|
||||
#include "code_8006E9C0.h"
|
||||
#include "code_80057C60.h"
|
||||
#include "defines.h"
|
||||
#include "math_util.h"
|
||||
#include "external.h"
|
||||
#include "code_80005FD0.h"
|
||||
#include "spawn_players.h"
|
||||
#include "render_objects.h"
|
||||
#include "assets/common_data.h"
|
||||
#include "save.h"
|
||||
#include "staff_ghosts.h"
|
||||
#include "actors.h"
|
||||
#include "collision.h"
|
||||
#include "code_8003DC40.h"
|
||||
#include "memory.h"
|
||||
#include "course.h"
|
||||
extern const char* bowsers_castle_dls[];
|
||||
}
|
||||
|
||||
const course_texture bowsers_castle_textures[] = {
|
||||
@@ -97,7 +97,7 @@ BowsersCastle::BowsersCastle() {
|
||||
Props.NearPersp = 2.0f;
|
||||
Props.FarPersp = 2700.0f;
|
||||
|
||||
Props.PathSizes = {0x30C, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0};
|
||||
Props.PathSizes = { 0x30C, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
Props.D_0D009418[0] = 4.1666665f;
|
||||
Props.D_0D009418[1] = 5.5833334f;
|
||||
@@ -119,12 +119,12 @@ BowsersCastle::BowsersCastle() {
|
||||
Props.D_0D009808[2] = 5.75f;
|
||||
Props.D_0D009808[3] = 6.3333334f;
|
||||
|
||||
Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_bowsers_castle_unknown_waypoints);
|
||||
Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_bowsers_castle_unknown_waypoints);
|
||||
Props.PathTable[1] = NULL;
|
||||
Props.PathTable[2] = NULL;
|
||||
Props.PathTable[3] = NULL;
|
||||
|
||||
Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_bowsers_castle_track_waypoints);
|
||||
Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_bowsers_castle_track_waypoints);
|
||||
Props.PathTable2[1] = NULL;
|
||||
Props.PathTable2[2] = NULL;
|
||||
Props.PathTable2[3] = NULL;
|
||||
@@ -132,24 +132,24 @@ BowsersCastle::BowsersCastle() {
|
||||
Props.Clouds = NULL; // no clouds
|
||||
Props.CloudList = NULL;
|
||||
|
||||
Props.Skybox.TopRight = {48, 8, 120};
|
||||
Props.Skybox.BottomRight = {0, 0, 0};
|
||||
Props.Skybox.BottomLeft = {0, 0, 0};
|
||||
Props.Skybox.TopLeft = {48, 8, 120};
|
||||
Props.Skybox.FloorTopRight = {0, 0, 0};
|
||||
Props.Skybox.FloorBottomRight = {0, 0, 0};
|
||||
Props.Skybox.FloorBottomLeft = {0, 0, 0};
|
||||
Props.Skybox.FloorTopLeft = {0, 0, 0};
|
||||
Props.Skybox.TopRight = { 48, 8, 120 };
|
||||
Props.Skybox.BottomRight = { 0, 0, 0 };
|
||||
Props.Skybox.BottomLeft = { 0, 0, 0 };
|
||||
Props.Skybox.TopLeft = { 48, 8, 120 };
|
||||
Props.Skybox.FloorTopRight = { 0, 0, 0 };
|
||||
Props.Skybox.FloorBottomRight = { 0, 0, 0 };
|
||||
Props.Skybox.FloorBottomLeft = { 0, 0, 0 };
|
||||
Props.Skybox.FloorTopLeft = { 0, 0, 0 };
|
||||
Props.Sequence = MusicSeq::MUSIC_SEQ_BOWSERS_CASTLE;
|
||||
|
||||
Props.WaterLevel = -50.0f;
|
||||
WaterVolumes.push_back({20.0f, 1549.0f, 1859.0f, -1402.0f, -1102.0f});
|
||||
WaterVolumes.push_back({ 20.0f, 1549.0f, 1859.0f, -1402.0f, -1102.0f });
|
||||
}
|
||||
|
||||
void BowsersCastle::Load() {
|
||||
Course::Load();
|
||||
|
||||
parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_bowsers_castle_addr));
|
||||
parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_bowsers_castle_addr));
|
||||
func_80295C6C();
|
||||
find_vtx_and_set_colours(segmented_gfx_to_virtual(reinterpret_cast<void*>(0x07001350)), 0x32, 0, 0, 0);
|
||||
}
|
||||
@@ -176,8 +176,8 @@ void BowsersCastle::SpawnStockThwomp() {
|
||||
}
|
||||
|
||||
void BowsersCastle::BeginPlay() {
|
||||
spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_bowsers_castle_tree_spawn));
|
||||
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_bowsers_castle_item_box_spawns));
|
||||
spawn_foliage((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_bowsers_castle_tree_spawn));
|
||||
spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_bowsers_castle_item_box_spawns));
|
||||
|
||||
switch (gCCSelection) {
|
||||
case CC_100:
|
||||
@@ -268,7 +268,7 @@ void BowsersCastle::UpdateCourseObjects() {
|
||||
}
|
||||
|
||||
void BowsersCastle::RenderCourseObjects(s32 cameraId) {
|
||||
//render_object_thwomps(cameraId);
|
||||
// render_object_thwomps(cameraId);
|
||||
render_object_bowser_flame(cameraId);
|
||||
}
|
||||
|
||||
@@ -276,8 +276,7 @@ void BowsersCastle::SomeSounds() {
|
||||
}
|
||||
|
||||
void BowsersCastle::WhatDoesThisDo(Player* player, int8_t playerId) {
|
||||
if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x29) &&
|
||||
((s16) gNearestWaypointByPlayerId[playerId] < 0x1D2)) {
|
||||
if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x29) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1D2)) {
|
||||
if (D_80165300[playerId] != 1) {
|
||||
func_800CA288(playerId, 0x41);
|
||||
}
|
||||
@@ -291,8 +290,7 @@ void BowsersCastle::WhatDoesThisDo(Player* player, int8_t playerId) {
|
||||
}
|
||||
|
||||
void BowsersCastle::WhatDoesThisDoAI(Player* player, int8_t playerId) {
|
||||
if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x29) &&
|
||||
((s16) gNearestWaypointByPlayerId[playerId] < 0x1D2)) {
|
||||
if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x29) && ((s16) gNearestWaypointByPlayerId[playerId] < 0x1D2)) {
|
||||
if (D_80165300[playerId] != 1) {
|
||||
func_800CA2E4(playerId, 0x41);
|
||||
}
|
||||
@@ -333,10 +331,11 @@ void BowsersCastle::Render(struct UnkStruct_800DC5EC* arg0) {
|
||||
}
|
||||
|
||||
void BowsersCastle::RenderCredits() {
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_bowsers_castle_dl_9148));
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_bowsers_castle_dl_9148));
|
||||
}
|
||||
|
||||
void BowsersCastle::SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) {
|
||||
void BowsersCastle::SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5,
|
||||
f32* arg6, f32* arg7) {
|
||||
func_8003E6EC(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
|
||||
}
|
||||
|
||||
@@ -354,7 +353,8 @@ void BowsersCastle::Waypoints(Player* player, int8_t playerId) {
|
||||
}
|
||||
}
|
||||
|
||||
void BowsersCastle::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) {
|
||||
void BowsersCastle::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot,
|
||||
uint16_t playerDirection) {
|
||||
if (gActiveScreenMode != SCREEN_MODE_1P) {
|
||||
return;
|
||||
}
|
||||
@@ -372,11 +372,12 @@ void BowsersCastle::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCo
|
||||
return;
|
||||
}
|
||||
}
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_bowsers_castle_dl_9228);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_bowsers_castle_dl_9228);
|
||||
}
|
||||
|
||||
void BowsersCastle::CreditsSpawnActors() {
|
||||
find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07001350), 0x32, 0, 0, 0);
|
||||
find_vtx_and_set_colours(segmented_gfx_to_virtual((void*) 0x07001350), 0x32, 0, 0, 0);
|
||||
}
|
||||
|
||||
void BowsersCastle::Destroy() { }
|
||||
void BowsersCastle::Destroy() {
|
||||
}
|
||||
|
||||
@@ -4,31 +4,31 @@
|
||||
#include "Course.h"
|
||||
|
||||
extern "C" {
|
||||
#include "assets/bowsers_castle_vertices.h"
|
||||
#include "assets/bowsers_castle_displaylists.h"
|
||||
#include "assets/bowsers_castle_data.h"
|
||||
#include "course_offsets.h"
|
||||
#include "camera.h"
|
||||
#include "data/some_data.h"
|
||||
#include "objects.h"
|
||||
#include "path_spawn_metadata.h"
|
||||
extern const course_texture bowsers_castle_textures[];
|
||||
#include "assets/bowsers_castle_vertices.h"
|
||||
#include "assets/bowsers_castle_displaylists.h"
|
||||
#include "assets/bowsers_castle_data.h"
|
||||
#include "course_offsets.h"
|
||||
#include "camera.h"
|
||||
#include "data/some_data.h"
|
||||
#include "objects.h"
|
||||
#include "path_spawn_metadata.h"
|
||||
extern const course_texture bowsers_castle_textures[];
|
||||
}
|
||||
|
||||
class BowsersCastle : public Course {
|
||||
public:
|
||||
virtual ~BowsersCastle() = default; // Virtual destructor for proper cleanup in derived classes
|
||||
public:
|
||||
virtual ~BowsersCastle() = default; // Virtual destructor for proper cleanup in derived classes
|
||||
|
||||
// Constructor
|
||||
explicit BowsersCastle();
|
||||
|
||||
// virtual void Load(const char* courseVtx,
|
||||
// course_texture* textures, const char* displaylists, size_t dlSize);
|
||||
// virtual void Load(const char* courseVtx,
|
||||
// course_texture* textures, const char* displaylists, size_t dlSize);
|
||||
virtual void Load() override;
|
||||
virtual void LoadTextures() override;
|
||||
void SpawnStockThwomp();
|
||||
virtual void BeginPlay() override;
|
||||
//virtual void InitClouds() override;
|
||||
// virtual void InitClouds() override;
|
||||
virtual void InitCourseObjects() override;
|
||||
virtual void UpdateCourseObjects() override;
|
||||
virtual void RenderCourseObjects(s32 cameraId) override;
|
||||
@@ -37,9 +37,11 @@ public:
|
||||
virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override;
|
||||
virtual void Render(struct UnkStruct_800DC5EC*) override;
|
||||
virtual void RenderCredits() override;
|
||||
virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) override;
|
||||
virtual void SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6,
|
||||
f32* arg7) override;
|
||||
virtual void Waypoints(Player*, int8_t) override;
|
||||
virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection);
|
||||
virtual void DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot,
|
||||
uint16_t playerDirection);
|
||||
virtual void CreditsSpawnActors() override;
|
||||
virtual void Destroy() override;
|
||||
};
|
||||
|
||||
@@ -10,29 +10,29 @@
|
||||
#include "engine/actors/Finishline.h"
|
||||
|
||||
extern "C" {
|
||||
#include "main.h"
|
||||
#include "camera.h"
|
||||
#include "course_offsets.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "render_courses.h"
|
||||
#include "code_8006E9C0.h"
|
||||
#include "code_80057C60.h"
|
||||
#include "defines.h"
|
||||
#include "math_util.h"
|
||||
#include "external.h"
|
||||
#include "code_80005FD0.h"
|
||||
#include "spawn_players.h"
|
||||
#include "render_objects.h"
|
||||
#include "assets/common_data.h"
|
||||
#include "save.h"
|
||||
#include "staff_ghosts.h"
|
||||
#include "actors.h"
|
||||
#include "collision.h"
|
||||
#include "code_8003DC40.h"
|
||||
#include "memory.h"
|
||||
#include "course_offsets.h"
|
||||
#include "course.h"
|
||||
extern const char *choco_mountain_dls[];
|
||||
#include "main.h"
|
||||
#include "camera.h"
|
||||
#include "course_offsets.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "render_courses.h"
|
||||
#include "code_8006E9C0.h"
|
||||
#include "code_80057C60.h"
|
||||
#include "defines.h"
|
||||
#include "math_util.h"
|
||||
#include "external.h"
|
||||
#include "code_80005FD0.h"
|
||||
#include "spawn_players.h"
|
||||
#include "render_objects.h"
|
||||
#include "assets/common_data.h"
|
||||
#include "save.h"
|
||||
#include "staff_ghosts.h"
|
||||
#include "actors.h"
|
||||
#include "collision.h"
|
||||
#include "code_8003DC40.h"
|
||||
#include "memory.h"
|
||||
#include "course_offsets.h"
|
||||
#include "course.h"
|
||||
extern const char* choco_mountain_dls[];
|
||||
}
|
||||
|
||||
const course_texture choco_mountain_textures[] = {
|
||||
@@ -88,7 +88,7 @@ ChocoMountain::ChocoMountain() {
|
||||
Props.NearPersp = 2.0f;
|
||||
Props.FarPersp = 1500.0f;
|
||||
|
||||
Props.PathSizes = {0x2BC, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0};
|
||||
Props.PathSizes = { 0x2BC, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
Props.D_0D009418[0] = 4.1666665f;
|
||||
Props.D_0D009418[1] = 5.5833334f;
|
||||
@@ -110,12 +110,12 @@ ChocoMountain::ChocoMountain() {
|
||||
Props.D_0D009808[2] = 5.75f;
|
||||
Props.D_0D009808[3] = 6.3333334f;
|
||||
|
||||
Props.PathTable[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_choco_mountain_unknown_waypoints);
|
||||
Props.PathTable[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_choco_mountain_unknown_waypoints);
|
||||
Props.PathTable[1] = NULL;
|
||||
Props.PathTable[2] = NULL;
|
||||
Props.PathTable[3] = NULL;
|
||||
|
||||
Props.PathTable2[0] = (TrackWaypoint*)LOAD_ASSET_RAW(d_course_choco_mountain_track_waypoints);
|
||||
Props.PathTable2[0] = (TrackWaypoint*) LOAD_ASSET_RAW(d_course_choco_mountain_track_waypoints);
|
||||
Props.PathTable2[1] = NULL;
|
||||
Props.PathTable2[2] = NULL;
|
||||
Props.PathTable2[3] = NULL;
|
||||
@@ -123,14 +123,14 @@ ChocoMountain::ChocoMountain() {
|
||||
Props.Clouds = NULL; // no clouds
|
||||
Props.CloudList = NULL;
|
||||
|
||||
Props.Skybox.TopRight = {255, 255, 255};
|
||||
Props.Skybox.BottomRight = {255, 255, 255};
|
||||
Props.Skybox.BottomLeft = {255, 255, 255};
|
||||
Props.Skybox.TopLeft = {255, 255, 255};
|
||||
Props.Skybox.FloorTopRight = {255, 255, 255};
|
||||
Props.Skybox.FloorBottomRight = {255, 255, 255};
|
||||
Props.Skybox.FloorBottomLeft = {255, 255, 255};
|
||||
Props.Skybox.FloorTopLeft = {255, 255, 255};
|
||||
Props.Skybox.TopRight = { 255, 255, 255 };
|
||||
Props.Skybox.BottomRight = { 255, 255, 255 };
|
||||
Props.Skybox.BottomLeft = { 255, 255, 255 };
|
||||
Props.Skybox.TopLeft = { 255, 255, 255 };
|
||||
Props.Skybox.FloorTopRight = { 255, 255, 255 };
|
||||
Props.Skybox.FloorBottomRight = { 255, 255, 255 };
|
||||
Props.Skybox.FloorBottomLeft = { 255, 255, 255 };
|
||||
Props.Skybox.FloorTopLeft = { 255, 255, 255 };
|
||||
Props.Sequence = MusicSeq::MUSIC_SEQ_CHOCO_MOUNTAIN;
|
||||
|
||||
Props.WaterLevel = -80.0f;
|
||||
@@ -163,7 +163,7 @@ void ChocoMountain::Load() {
|
||||
nullify_displaylist((uintptr_t) segmented_gfx_to_virtual(reinterpret_cast<void*>(0x070003C8)));
|
||||
}
|
||||
|
||||
parse_course_displaylists((TrackSections*)LOAD_ASSET_RAW(d_course_choco_mountain_addr));
|
||||
parse_course_displaylists((TrackSections*) LOAD_ASSET_RAW(d_course_choco_mountain_addr));
|
||||
func_802B5CAC(0x238E, 0x31C7, D_8015F590);
|
||||
func_80295C6C();
|
||||
}
|
||||
@@ -172,8 +172,9 @@ void ChocoMountain::LoadTextures() {
|
||||
}
|
||||
|
||||
void ChocoMountain::BeginPlay() {
|
||||
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_choco_mountain_item_box_spawns));
|
||||
spawn_falling_rocks((struct ActorSpawnData*)LOAD_ASSET_RAW((const char*)d_course_choco_mountain_falling_rock_spawns));
|
||||
spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_choco_mountain_item_box_spawns));
|
||||
spawn_falling_rocks(
|
||||
(struct ActorSpawnData*) LOAD_ASSET_RAW((const char*) d_course_choco_mountain_falling_rock_spawns));
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
FVector pos = { 0, 0, 0 };
|
||||
@@ -206,8 +207,7 @@ void ChocoMountain::SomeSounds() {
|
||||
}
|
||||
|
||||
void ChocoMountain::WhatDoesThisDo(Player* player, int8_t playerId) {
|
||||
if (((s16) gNearestWaypointByPlayerId[playerId] >= 0xA0) &&
|
||||
((s16) gNearestWaypointByPlayerId[playerId] < 0xB4)) {
|
||||
if (((s16) gNearestWaypointByPlayerId[playerId] >= 0xA0) && ((s16) gNearestWaypointByPlayerId[playerId] < 0xB4)) {
|
||||
if (D_80165300[playerId] != 1) {
|
||||
func_800CA288(playerId, 0x55);
|
||||
}
|
||||
@@ -221,8 +221,7 @@ void ChocoMountain::WhatDoesThisDo(Player* player, int8_t playerId) {
|
||||
}
|
||||
|
||||
void ChocoMountain::WhatDoesThisDoAI(Player* player, int8_t playerId) {
|
||||
if (((s16) gNearestWaypointByPlayerId[playerId] >= 0xA0) &&
|
||||
((s16) gNearestWaypointByPlayerId[playerId] < 0xB4)) {
|
||||
if (((s16) gNearestWaypointByPlayerId[playerId] >= 0xA0) && ((s16) gNearestWaypointByPlayerId[playerId] < 0xB4)) {
|
||||
if (D_80165300[playerId] != 1) {
|
||||
func_800CA2E4(playerId, 0x55);
|
||||
}
|
||||
@@ -283,11 +282,13 @@ void ChocoMountain::Render(struct UnkStruct_800DC5EC* arg0) {
|
||||
}
|
||||
|
||||
void ChocoMountain::RenderCredits() {
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)(d_course_choco_mountain_dl_71B8));
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) (d_course_choco_mountain_dl_71B8));
|
||||
}
|
||||
|
||||
void ChocoMountain::SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) {
|
||||
void ChocoMountain::SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5,
|
||||
f32* arg6, f32* arg7) {
|
||||
func_8003E37C(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
|
||||
}
|
||||
|
||||
void ChocoMountain::Destroy() { }
|
||||
void ChocoMountain::Destroy() {
|
||||
}
|
||||
|
||||
@@ -4,26 +4,26 @@
|
||||
#include "Course.h"
|
||||
|
||||
extern "C" {
|
||||
#include "assets/choco_mountain_vertices.h"
|
||||
#include "assets/choco_mountain_displaylists.h"
|
||||
#include "assets/choco_mountain_data.h"
|
||||
#include "course_offsets.h"
|
||||
#include "camera.h"
|
||||
#include "data/some_data.h"
|
||||
#include "objects.h"
|
||||
#include "path_spawn_metadata.h"
|
||||
extern const course_texture choco_mountain_textures[];
|
||||
#include "assets/choco_mountain_vertices.h"
|
||||
#include "assets/choco_mountain_displaylists.h"
|
||||
#include "assets/choco_mountain_data.h"
|
||||
#include "course_offsets.h"
|
||||
#include "camera.h"
|
||||
#include "data/some_data.h"
|
||||
#include "objects.h"
|
||||
#include "path_spawn_metadata.h"
|
||||
extern const course_texture choco_mountain_textures[];
|
||||
}
|
||||
|
||||
class ChocoMountain : public Course {
|
||||
public:
|
||||
virtual ~ChocoMountain() = default; // Virtual destructor for proper cleanup in derived classes
|
||||
public:
|
||||
virtual ~ChocoMountain() = default; // Virtual destructor for proper cleanup in derived classes
|
||||
|
||||
// Constructor
|
||||
explicit ChocoMountain();
|
||||
|
||||
// virtual void Load(const char* courseVtx,
|
||||
// course_texture* textures, const char* displaylists, size_t dlSize);
|
||||
// virtual void Load(const char* courseVtx,
|
||||
// course_texture* textures, const char* displaylists, size_t dlSize);
|
||||
virtual void Load() override;
|
||||
virtual void LoadTextures() override;
|
||||
virtual void BeginPlay() override;
|
||||
@@ -32,7 +32,8 @@ public:
|
||||
virtual void WhatDoesThisDo(Player* player, int8_t playerId) override;
|
||||
virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override;
|
||||
virtual void Render(struct UnkStruct_800DC5EC*) override;
|
||||
virtual void RenderCredits() override;
|
||||
virtual void SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6, f32* arg7) override;
|
||||
virtual void RenderCredits() override;
|
||||
virtual void SomeCollisionThing(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4, f32* arg5, f32* arg6,
|
||||
f32* arg7) override;
|
||||
virtual void Destroy() override;
|
||||
};
|
||||
|
||||
@@ -43,7 +43,7 @@ Course::Course() {
|
||||
Props.Minimap.PlayerScaleFactor = 0.22f;
|
||||
Props.Minimap.FinishlineX = 0;
|
||||
Props.Minimap.FinishlineY = 0;
|
||||
Props.Minimap.Colour = {255, 255, 255};
|
||||
Props.Minimap.Colour = { 255, 255, 255 };
|
||||
Props.WaterLevel = -10.0f;
|
||||
|
||||
Props.LakituTowType = (s32) OLakitu::LakituTowType::NORMAL;
|
||||
@@ -115,11 +115,11 @@ void Course::LoadO2R(std::string trackPath) {
|
||||
size_t i = 0;
|
||||
for (auto& path : paths) {
|
||||
if (i == 0) {
|
||||
Props.PathTable[0] = (TrackWaypoint*)path.data();
|
||||
Props.PathTable[0] = (TrackWaypoint*) path.data();
|
||||
Props.PathTable[1] = NULL;
|
||||
Props.PathTable[2] = NULL;
|
||||
Props.PathTable[3] = NULL;
|
||||
Props.PathTable2[0] = (TrackWaypoint*)path.data();
|
||||
Props.PathTable2[0] = (TrackWaypoint*) path.data();
|
||||
Props.PathTable2[1] = NULL;
|
||||
Props.PathTable2[2] = NULL;
|
||||
Props.PathTable2[3] = NULL;
|
||||
@@ -140,7 +140,7 @@ void Course::Load() {
|
||||
// Load from O2R
|
||||
if (!TrackSectionsPtr.empty()) {
|
||||
bIsMod = true;
|
||||
//auto res = std::dynamic_pointer_cast<MK64::TrackSectionsO2RClass>(ResourceLoad(TrackSectionsPtr.c_str()));
|
||||
// auto res = std::dynamic_pointer_cast<MK64::TrackSectionsO2RClass>(ResourceLoad(TrackSectionsPtr.c_str()));
|
||||
|
||||
TrackSectionsO2R* sections = (TrackSectionsO2R*) LOAD_ASSET_RAW(TrackSectionsPtr.c_str());
|
||||
size_t size = ResourceGetSizeByName(TrackSectionsPtr.c_str());
|
||||
@@ -217,8 +217,9 @@ void Course::ParseCourseSections(TrackSectionsO2R* sections, size_t size) {
|
||||
} else {
|
||||
D_8015F5A4 = 0;
|
||||
}
|
||||
printf("LOADING DL %s\n", sections[i].addr.c_str());
|
||||
generate_collision_mesh((Gfx*)LOAD_ASSET_RAW(sections[i].addr.c_str()), sections[i].surfaceType, sections[i].sectionId);
|
||||
printf("LOADING DL %s\n", sections[i].addr.c_str());
|
||||
generate_collision_mesh((Gfx*) LOAD_ASSET_RAW(sections[i].addr.c_str()), sections[i].surfaceType,
|
||||
sections[i].sectionId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -228,8 +229,8 @@ void Course::TestPath() {
|
||||
s16 x;
|
||||
s16 y;
|
||||
s16 z;
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
|
||||
for (size_t i = 0; i < gWaypointCountByPathIndex[0]; i++) {
|
||||
x = D_80164550[0][i].posX;
|
||||
@@ -241,7 +242,7 @@ void Course::TestPath() {
|
||||
}
|
||||
|
||||
f32 height = spawn_actor_on_surface(x, 2000.0f, z);
|
||||
Vec3f itemPos = {x, height, z};
|
||||
Vec3f itemPos = { x, height, z };
|
||||
add_actor_to_empty_slot(itemPos, rot, vel, ACTOR_ITEM_BOX);
|
||||
}
|
||||
}
|
||||
@@ -337,7 +338,7 @@ void Course::Render(struct UnkStruct_800DC5EC* arg0) {
|
||||
if (!TrackSectionsPtr.empty()) {
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
|
||||
// set_track_light_direction(D_800DC610, D_802B87D4, 0, 1);
|
||||
// set_track_light_direction(D_800DC610, D_802B87D4, 0, 1);
|
||||
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
|
||||
|
||||
@@ -347,10 +348,10 @@ void Course::Render(struct UnkStruct_800DC5EC* arg0) {
|
||||
// d_course_big_donut_packed_dl_DE8
|
||||
}
|
||||
|
||||
TrackSectionsO2R* sections = (TrackSectionsO2R*)LOAD_ASSET_RAW(TrackSectionsPtr.c_str());
|
||||
TrackSectionsO2R* sections = (TrackSectionsO2R*) LOAD_ASSET_RAW(TrackSectionsPtr.c_str());
|
||||
size_t size = ResourceGetSizeByName(TrackSectionsPtr.c_str());
|
||||
for (size_t i = 0; i < (size / sizeof(TrackSectionsO2R)); i++) {
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)LOAD_ASSET_RAW(sections[i].addr.c_str()));
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) LOAD_ASSET_RAW(sections[i].addr.c_str()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -363,8 +364,7 @@ f32 Course::GetWaterLevel(FVector pos, Collision* collision) {
|
||||
bool found = false;
|
||||
|
||||
for (const auto& volume : gWorldInstance.CurrentCourse->WaterVolumes) {
|
||||
if (pos.x >= volume.MinX && pos.x <= volume.MaxX &&
|
||||
pos.z >= volume.MinZ && pos.z <= volume.MaxZ) {
|
||||
if (pos.x >= volume.MinX && pos.x <= volume.MaxX && pos.z >= volume.MinZ && pos.z <= volume.MaxZ) {
|
||||
// Choose the highest water volume the player is over
|
||||
if (!found || volume.Height > highestWater) {
|
||||
highestWater = volume.Height;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user