* Compile works now

* Update menus

* Update CMakeLists.txt

* Add Ship

* Impl hm ship actors

* Update HM course
This commit is contained in:
MegaMech
2025-02-10 15:05:53 -07:00
committed by GitHub
parent a6ecc276e9
commit 6a629fcaa9
23 changed files with 34480 additions and 1 deletions
File diff suppressed because it is too large Load Diff
+48
View File
@@ -0,0 +1,48 @@
#include <libultraship.h>
extern u8 ghostship_woodmoldy1_rgba16[];
extern u8 ghostship_wood3_ci8[];
extern u8 ghostship_wood3_pal_rgba16[];
extern u8 ghostship_burntfabricHoles_rgba16[];
extern u8 ghostship_flag1_ci4[];
extern u8 ghostship_flag1_pal_rgba16[];
extern u8 ghostship_metallight_ci4[];
extern u8 ghostship_metallight_pal_rgba16[];
extern u8 ghostship_metal2_i8[];
extern u8 ghostship_window_i8[];
extern u8 ghostship_woodmoldy2_ci8[];
extern u8 ghostship_woodmoldy2_pal_rgba16[];
extern Vtx ghostship_Plane_mesh_vtx_cull[8];
extern Vtx ghostship_Plane_mesh_vtx_0[174];
extern Gfx ghostship_Plane_mesh_tri_0[];
extern Vtx ghostship_Plane_mesh_vtx_1[61];
extern Gfx ghostship_Plane_mesh_tri_1[];
extern Vtx ghostship_Plane_mesh_vtx_2[16];
extern Gfx ghostship_Plane_mesh_tri_2[];
extern Vtx ghostship_Plane_mesh_vtx_3[10];
extern Gfx ghostship_Plane_mesh_tri_3[];
extern Vtx ghostship_Plane_mesh_vtx_4[61];
extern Gfx ghostship_Plane_mesh_tri_4[];
extern Vtx ghostship_Plane_mesh_vtx_5[16];
extern Gfx ghostship_Plane_mesh_tri_5[];
extern Vtx ghostship_Plane_mesh_vtx_6[60];
extern Gfx ghostship_Plane_mesh_tri_6[];
extern Vtx ghostship_Plane_mesh_vtx_7[23];
extern Gfx ghostship_Plane_mesh_tri_7[];
extern Gfx mat_ghostship_boat1[];
extern Gfx mat_revert_ghostship_boat1[];
extern Gfx mat_ghostship_boat2[];
extern Gfx mat_revert_ghostship_boat2[];
extern Gfx mat_ghostship_sail[];
extern Gfx mat_revert_ghostship_sail[];
extern Gfx mat_ghostship_flag[];
extern Gfx mat_revert_ghostship_flag[];
extern Gfx mat_ghostship_metal1[];
extern Gfx mat_revert_ghostship_metal1[];
extern Gfx mat_ghostship_glass1[];
extern Gfx mat_revert_ghostship_glass1[];
extern Gfx mat_ghostship_dark[];
extern Gfx mat_revert_ghostship_dark[];
extern Gfx mat_ghostship_boat3[];
extern Gfx mat_revert_ghostship_boat3[];
extern Gfx ghostship_Plane_mesh[];
File diff suppressed because it is too large Load Diff
+31
View File
@@ -0,0 +1,31 @@
#include <libultraship.h>
extern u8 ship2_flag_rgba16[];
extern u8 ship2_window_i8[];
extern u8 ship2_wood1_ci8[];
extern u8 ship2_wood1_pal_rgba16[];
extern u8 ship2_wood2_ci4[];
extern u8 ship2_wood2_pal_rgba16[];
extern u8 ship2_sail2_rgba16[];
extern Vtx ship2_SoH_mesh_vtx_cull[8];
extern Vtx ship2_SoH_mesh_vtx_0[95];
extern Gfx ship2_SoH_mesh_tri_0[];
extern Vtx ship2_SoH_mesh_vtx_1[16];
extern Gfx ship2_SoH_mesh_tri_1[];
extern Vtx ship2_SoH_mesh_vtx_2[236];
extern Gfx ship2_SoH_mesh_tri_2[];
extern Vtx ship2_SoH_mesh_vtx_3[455];
extern Gfx ship2_SoH_mesh_tri_3[];
extern Vtx ship2_SoH_mesh_vtx_4[64];
extern Gfx ship2_SoH_mesh_tri_4[];
extern Gfx mat_ship2_f3d_material_002[];
extern Gfx mat_revert_ship2_f3d_material_002[];
extern Gfx mat_ship2_f3d_material_003[];
extern Gfx mat_revert_ship2_f3d_material_003[];
extern Gfx mat_ship2_wood1_001[];
extern Gfx mat_revert_ship2_wood1_001[];
extern Gfx mat_ship2_wood2[];
extern Gfx mat_revert_ship2_wood2[];
extern Gfx mat_ship2_sohSail[];
extern Gfx mat_revert_ship2_sohSail[];
extern Gfx ship2_SoH_mesh[];
File diff suppressed because it is too large Load Diff
+36
View File
@@ -0,0 +1,36 @@
#include <libultraship.h>
extern u8 ship3_wood2_ci8[];
extern u8 ship3_wood2_pal_rgba16[];
extern u8 ship3_flag_rgba16[];
extern u8 ship3_window_i8[];
extern u8 ship3_wood1_ci4[];
extern u8 ship3_wood1_pal_rgba16[];
extern u8 ship3__2shipBetaLogo_rgba32[];
extern u8 ship3_sail1_rgba16[];
extern Vtx ship3_2Ship_mesh_vtx_cull[8];
extern Vtx ship3_2Ship_mesh_vtx_0[1147];
extern Gfx ship3_2Ship_mesh_tri_0[];
extern Vtx ship3_2Ship_mesh_vtx_1[92];
extern Gfx ship3_2Ship_mesh_tri_1[];
extern Vtx ship3_2Ship_mesh_vtx_2[16];
extern Gfx ship3_2Ship_mesh_tri_2[];
extern Vtx ship3_2Ship_mesh_vtx_3[237];
extern Gfx ship3_2Ship_mesh_tri_3[];
extern Vtx ship3_2Ship_mesh_vtx_4[199];
extern Gfx ship3_2Ship_mesh_tri_4[];
extern Vtx ship3_2Ship_mesh_vtx_5[199];
extern Gfx ship3_2Ship_mesh_tri_5[];
extern Gfx mat_ship3_f3d_material_008[];
extern Gfx mat_revert_ship3_f3d_material_008[];
extern Gfx mat_ship3_flag1[];
extern Gfx mat_revert_ship3_flag1[];
extern Gfx mat_ship3_f3dlite_material_003[];
extern Gfx mat_revert_ship3_f3dlite_material_003[];
extern Gfx mat_ship3_wood2_001[];
extern Gfx mat_revert_ship3_wood2_001[];
extern Gfx mat_ship3__2shipLogo[];
extern Gfx mat_revert_ship3__2shipLogo[];
extern Gfx mat_ship3_sail2[];
extern Gfx mat_revert_ship3_sail2[];
extern Gfx ship3_2Ship_mesh[];
File diff suppressed because it is too large Load Diff
+74
View File
@@ -0,0 +1,74 @@
#include <libultraship.h>
extern u8 ship1_wood_rgba16[];
extern u8 ship1_metal1_i8[];
extern u8 ship1__32wood_ci8[];
extern u8 ship1__32wood_pal_rgba16[];
extern u8 ship1_sail2_ci8[];
extern u8 ship1_sail2_pal_rgba16[];
extern u8 ship1_hmpainted_rgba32[];
extern u8 ship1_spag1_rgba32[];
extern u8 ship1_sauce_ci4[];
extern u8 ship1_sauce_pal_rgba16[];
extern u8 ship1__32wood_rgba32[];
extern u8 ship1_flag_rgba16[];
extern u8 ship1_wood2_rgba16[];
extern Vtx ship1_Spaghetti_mesh_vtx_cull[8];
extern Vtx ship1_Spaghetti_mesh_vtx_0[108];
extern Gfx ship1_Spaghetti_mesh_tri_0[];
extern Vtx ship1_Spaghetti_mesh_vtx_1[58];
extern Gfx ship1_Spaghetti_mesh_tri_1[];
extern Vtx ship1_Spaghetti_mesh_vtx_2[357];
extern Gfx ship1_Spaghetti_mesh_tri_2[];
extern Vtx ship1_Spaghetti_mesh_vtx_3[15];
extern Gfx ship1_Spaghetti_mesh_tri_3[];
extern Vtx ship1_Spaghetti_mesh_vtx_4[12];
extern Gfx ship1_Spaghetti_mesh_tri_4[];
extern Vtx ship1_Spaghetti_mesh_vtx_5[43];
extern Gfx ship1_Spaghetti_mesh_tri_5[];
extern Vtx ship1_Spaghetti_mesh_vtx_6[43];
extern Gfx ship1_Spaghetti_mesh_tri_6[];
extern Vtx ship1_Spaghetti_mesh_vtx_7[79];
extern Gfx ship1_Spaghetti_mesh_tri_7[];
extern Vtx ship1_Spaghetti_mesh_vtx_8[12];
extern Gfx ship1_Spaghetti_mesh_tri_8[];
extern Vtx ship1_Spaghetti_mesh_vtx_9[3];
extern Gfx ship1_Spaghetti_mesh_tri_9[];
extern Vtx ship1_Spaghetti_mesh_vtx_10[17];
extern Gfx ship1_Spaghetti_mesh_tri_10[];
extern Gfx mat_ship1_boat1[];
extern Gfx mat_revert_ship1_boat1[];
extern Gfx mat_ship1_metal1[];
extern Gfx mat_revert_ship1_metal1[];
extern Gfx mat_ship1_wood1[];
extern Gfx mat_revert_ship1_wood1[];
extern Gfx mat_ship1_sail[];
extern Gfx mat_revert_ship1_sail[];
extern Gfx mat_ship1_logo[];
extern Gfx mat_revert_ship1_logo[];
extern Gfx mat_ship1_spag1[];
extern Gfx mat_revert_ship1_spag1[];
extern Gfx mat_ship1_sauce1[];
extern Gfx mat_revert_ship1_sauce1[];
extern Gfx mat_ship1_meat1[];
extern Gfx mat_revert_ship1_meat1[];
extern Gfx mat_ship1_fork1[];
extern Gfx mat_revert_ship1_fork1[];
extern Gfx mat_ship1_flag[];
extern Gfx mat_revert_ship1_flag[];
extern Gfx mat_ship1_wood2[];
extern Gfx mat_revert_ship1_wood2[];
extern Gfx ship1_Spaghetti_mesh[];
extern u8 wheels_metal1_i8[];
extern u8 wheels_tire_i8[];
extern Vtx wheels_Spaghetti_002_mesh_vtx_cull[8];
extern Vtx wheels_Spaghetti_002_mesh_vtx_0[111];
extern Gfx wheels_Spaghetti_002_mesh_tri_0[];
extern Vtx wheels_Spaghetti_002_mesh_vtx_1[55];
extern Gfx wheels_Spaghetti_002_mesh_tri_1[];
extern Gfx mat_wheels_metal1_002[];
extern Gfx mat_revert_wheels_metal1_002[];
extern Gfx mat_wheels_tire1_002[];
extern Gfx mat_revert_wheels_tire1_002[];
extern Gfx wheels_Spaghetti_002_mesh[];
File diff suppressed because it is too large Load Diff
+33
View File
@@ -0,0 +1,33 @@
#include <libultraship.h>
extern u8 starship_SoHShinyBlueish_rgba16[];
extern u8 starship_tire_i8[];
extern u8 starship_superFXBlue_rgba32[];
extern u8 starship_SoHShiny_rgba16[];
extern u8 starship_superFXBlue_rgba16[];
extern u8 starship_shiplogov2_rgba32[];
extern u8 starship_flare1_ci8[];
extern u8 starship_flare1_pal_rgba16[];
extern Vtx starship_Cube_mesh_vtx_cull[8];
extern Vtx starship_Cube_mesh_vtx_0[56];
extern Gfx starship_Cube_mesh_tri_0[];
extern Vtx starship_Cube_mesh_vtx_1[18];
extern Gfx starship_Cube_mesh_tri_1[];
extern Vtx starship_Cube_mesh_vtx_2[21];
extern Gfx starship_Cube_mesh_tri_2[];
extern Vtx starship_Cube_mesh_vtx_3[210];
extern Gfx starship_Cube_mesh_tri_3[];
extern Vtx starship_Cube_mesh_vtx_4[9];
extern Gfx starship_Cube_mesh_tri_4[];
extern Vtx starship_Cube_mesh_vtx_5[8];
extern Gfx starship_Cube_mesh_tri_5[];
extern Vtx starship_Cube_mesh_vtx_6[60];
extern Gfx starship_Cube_mesh_tri_6[];
extern Gfx mat_starship_starship1[];
extern Gfx mat_starship_black[];
extern Gfx mat_starship_starship2[];
extern Gfx mat_starship_starship3[];
extern Gfx mat_starship_glass[];
extern Gfx mat_starship_f3dlite_material_008[];
extern Gfx mat_starship_flare[];
extern Gfx starship_Cube_mesh[];
File diff suppressed because it is too large Load Diff
+214
View File
@@ -0,0 +1,214 @@
#include <libultraship.h>
extern Lights1 ground_f3d_material_013_lights;
extern u8 ground_woodPlanks1_ci4[];
extern u8 ground_woodPlanks1_pal_rgba16[];
extern u8 ground_seamless_wood_texture_free_76_rgba16[];
extern u8 ground_door1_ci8[];
extern u8 ground_door1_pal_rgba16[];
extern u8 ground_seamless_green_lush_grass_texture_seamless_green_lush_grass_texture_fresh_backdrop_144751691_rgba16[];
extern u8 ground_sand_ci8[];
extern u8 ground_sand_pal_rgba16[];
extern u8 ground_window_rgba16[];
extern u8 ground_parascode_rgba32[];
extern u8 ground_keyboardArt_i8[];
extern u8 ground_grayishtoblue_ci8[];
extern u8 ground_grayishtoblue_pal_rgba16[];
extern u8 ground_heart1_ci8[];
extern u8 ground_heart1_pal_rgba16[];
extern Vtx ground_map_mesh_vtx_cull[8];
extern Vtx ground_map_mesh_vtx_0[112];
extern Gfx ground_map_mesh_tri_0[];
extern Vtx ground_map_mesh_vtx_1[6];
extern Gfx ground_map_mesh_tri_1[];
extern Vtx ground_map_mesh_vtx_2[4];
extern Gfx ground_map_mesh_tri_2[];
extern Vtx ground_map_mesh_vtx_3[157];
extern Gfx ground_map_mesh_tri_3[];
extern Vtx ground_map_mesh_vtx_4[182];
extern Gfx ground_map_mesh_tri_4[];
extern Vtx ground_map_mesh_vtx_5[27];
extern Gfx ground_map_mesh_tri_5[];
extern Vtx ground_map_mesh_vtx_6[4];
extern Gfx ground_map_mesh_tri_6[];
extern Vtx ground_map_mesh_vtx_7[13];
extern Gfx ground_map_mesh_tri_7[];
extern Vtx ground_map_mesh_vtx_8[5];
extern Gfx ground_map_mesh_tri_8[];
extern Vtx ground_map_mesh_vtx_9[6];
extern Gfx ground_map_mesh_tri_9[];
extern Vtx ground_map_mesh_vtx_10[12];
extern Gfx ground_map_mesh_tri_10[];
extern Vtx ground_map_mesh_vtx_11[51];
extern Gfx ground_map_mesh_tri_11[];
extern Vtx ground_map_mesh_vtx_12[367];
extern Gfx ground_map_mesh_tri_12[];
extern Vtx ground_map_mesh_vtx_13[710];
extern Gfx ground_map_mesh_tri_13[];
extern Gfx mat_ground_dock[];
extern Gfx mat_revert_ground_dock[];
extern Gfx mat_ground_roof1[];
extern Gfx mat_revert_ground_roof1[];
extern Gfx mat_ground_door1[];
extern Gfx mat_revert_ground_door1[];
extern Gfx mat_ground_ground[];
extern Gfx mat_revert_ground_ground[];
extern Gfx mat_ground_sand[];
extern Gfx mat_revert_ground_sand[];
extern Gfx mat_ground_black[];
extern Gfx mat_revert_ground_black[];
extern Gfx mat_ground_f3dlite_material_001[];
extern Gfx mat_revert_ground_f3dlite_material_001[];
extern Gfx mat_ground_f3dlite_material_009[];
extern Gfx mat_revert_ground_f3dlite_material_009[];
extern Gfx mat_ground_f3d_material_005[];
extern Gfx mat_revert_ground_f3d_material_005[];
extern Gfx mat_ground_f3d_material_006[];
extern Gfx mat_revert_ground_f3d_material_006[];
extern Gfx mat_ground_f3d_material_012[];
extern Gfx mat_revert_ground_f3d_material_012[];
extern Gfx mat_ground_f3d_material_013[];
extern Gfx mat_revert_ground_f3d_material_013[];
extern Gfx mat_ground_HM[];
extern Gfx mat_revert_ground_HM[];
extern Gfx mat_ground__64[];
extern Gfx mat_revert_ground__64[];
extern Gfx ground_map_mesh[];
extern u8 road_road4_rgba32[];
extern Vtx road_map_001_mesh_vtx_cull[8];
extern Vtx road_map_001_mesh_vtx_0[191];
extern Gfx road_map_001_mesh_tri_0[];
extern Gfx mat_road_path[];
extern Gfx mat_revert_road_path[];
extern Gfx road_map_001_mesh[];
extern u8 bush_leaves1_rgba32[];
extern Vtx bush_map_004_mesh_vtx_cull[8];
extern Vtx bush_map_004_mesh_vtx_0[82];
extern Gfx bush_map_004_mesh_tri_0[];
extern Gfx mat_bush_leaves[];
extern Gfx mat_revert_bush_leaves[];
extern Gfx bush_map_004_mesh[];
extern u8 castle_brick1_i8[];
extern u8 castle_seamless_wood_texture_free_76_rgba16[];
extern u8 castle_door1_ci8[];
extern u8 castle_door1_pal_rgba16[];
extern u8 castle_superFXSteel_ci4[];
extern u8 castle_superFXSteel_pal_rgba16[];
extern u8 castle_bars1_ci8[];
extern u8 castle_bars1_pal_rgba16[];
extern u8 castle_fence_rgba32[];
extern Vtx castle_map_002_mesh_vtx_cull[8];
extern Vtx castle_map_002_mesh_vtx_0[695];
extern Gfx castle_map_002_mesh_tri_0[];
extern Vtx castle_map_002_mesh_vtx_1[79];
extern Gfx castle_map_002_mesh_tri_1[];
extern Vtx castle_map_002_mesh_vtx_2[16];
extern Gfx castle_map_002_mesh_tri_2[];
extern Vtx castle_map_002_mesh_vtx_3[15];
extern Gfx castle_map_002_mesh_tri_3[];
extern Vtx castle_map_002_mesh_vtx_4[7];
extern Gfx castle_map_002_mesh_tri_4[];
extern Vtx castle_map_002_mesh_vtx_5[9];
extern Gfx castle_map_002_mesh_tri_5[];
extern Gfx mat_castle_wall1[];
extern Gfx mat_revert_castle_wall1[];
extern Gfx mat_castle_roof1[];
extern Gfx mat_revert_castle_roof1[];
extern Gfx mat_castle_door1[];
extern Gfx mat_revert_castle_door1[];
extern Gfx mat_castle_window1[];
extern Gfx mat_revert_castle_window1[];
extern Gfx mat_castle_grate[];
extern Gfx mat_revert_castle_grate[];
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[];
extern u8 statue_marble1_pal_rgba16[];
extern Vtx statue_map_005_mesh_vtx_cull[8];
extern Vtx statue_map_005_mesh_vtx_0[5];
extern Gfx statue_map_005_mesh_tri_0[];
extern Vtx statue_map_005_mesh_vtx_1[28];
extern Gfx statue_map_005_mesh_tri_1[];
extern Vtx statue_map_005_mesh_vtx_2[61];
extern Gfx statue_map_005_mesh_tri_2[];
extern Vtx statue_map_005_mesh_vtx_3[233];
extern Gfx statue_map_005_mesh_tri_3[];
extern Vtx statue_map_005_mesh_vtx_4[67];
extern Gfx statue_map_005_mesh_tri_4[];
extern Gfx mat_statue_black[];
extern Gfx mat_revert_statue_black[];
extern Gfx mat_statue_flowers[];
extern Gfx mat_revert_statue_flowers[];
extern Gfx mat_statue_f3dlite_material_007[];
extern Gfx mat_revert_statue_f3dlite_material_007[];
extern Gfx mat_statue_f3dlite_material_002[];
extern Gfx mat_revert_statue_f3dlite_material_002[];
extern Gfx mat_statue_f3dlite_material_009[];
extern Gfx mat_revert_statue_f3dlite_material_009[];
extern Gfx statue_map_005_mesh[];
extern u8 trees_leaf_ci4[];
extern u8 trees_leaf_pal_rgba16[];
extern u8 trees_bark2_rgba32[];
extern Vtx trees_map_003_mesh_vtx_cull[8];
extern Vtx trees_map_003_mesh_vtx_0[72];
extern Gfx trees_map_003_mesh_tri_0[];
extern Vtx trees_map_003_mesh_vtx_1[109];
extern Gfx trees_map_003_mesh_tri_1[];
extern Gfx mat_trees_leaf1[];
extern Gfx mat_revert_trees_leaf1[];
extern Gfx mat_trees_bark1[];
extern Gfx mat_revert_trees_bark1[];
extern Gfx trees_map_003_mesh[];
extern u8 water_water1_rgba32[];
extern u8 water_water3_rgba16[];
extern Vtx water_water1_mesh_vtx_cull[8];
extern Vtx water_water1_mesh_vtx_0[4];
extern Gfx water_water1_mesh_tri_0[];
extern Vtx water_water1_mesh_vtx_1[4];
extern Gfx water_water1_mesh_tri_1[];
extern Gfx mat_water_water1[];
extern Gfx mat_revert_water_water1[];
extern Gfx mat_water_water2[];
extern Gfx mat_revert_water_water2[];
extern Gfx water_water1_mesh[];
extern u8 moon_moon2_ci8[];
extern u8 moon_moon2_pal_rgba16[];
extern u8 moon_moon1_ci8[];
extern u8 moon_moon1_pal_rgba16[];
extern u8 moon_window_rgba16[];
extern u8 moon_ARmosMap_ci8[];
extern u8 moon_ARmosMap_pal_rgba16[];
extern u8 moon_teeth1_rgba32[];
extern Vtx moon_moon_mesh_vtx_cull[8];
extern Vtx moon_moon_mesh_vtx_0[244];
extern Gfx moon_moon_mesh_tri_0[];
extern Vtx moon_moon_mesh_vtx_1[91];
extern Gfx moon_moon_mesh_tri_1[];
extern Vtx moon_moon_mesh_vtx_2[44];
extern Gfx moon_moon_mesh_tri_2[];
extern Vtx moon_moon_mesh_vtx_3[121];
extern Gfx moon_moon_mesh_tri_3[];
extern Vtx moon_moon_mesh_vtx_4[14];
extern Gfx moon_moon_mesh_tri_4[];
extern Gfx mat_moon_moon1[];
extern Gfx mat_revert_moon_moon1[];
extern Gfx mat_moon_moon2[];
extern Gfx mat_revert_moon_moon2[];
extern Gfx mat_moon_black[];
extern Gfx mat_revert_moon_black[];
extern Gfx mat_moon_eye2[];
extern Gfx mat_revert_moon_eye2[];
extern Gfx mat_moon_teeth[];
extern Gfx mat_revert_moon_teeth[];
extern Gfx moon_moon_mesh[];
+61
View File
@@ -0,0 +1,61 @@
#include "Ship.h"
#include <libultra/gbi.h>
extern "C" {
#include "common_structs.h"
#include "math_util.h"
#include "main.h"
#include "courses/harbour/ghostship_model.h"
#include "courses/harbour/ship2_model.h"
#include "courses/harbour/ship3_model.h"
}
AShip::AShip(FVector pos, AShip::Skin skin) {
Spawn = pos;
Spawn.y += 10;
switch(skin) {
case GHOSTSHIP:
_skin = ghostship_Plane_mesh;
break;
case SHIP2:
_skin = ship2_SoH_mesh;
break;
case SHIP3:
_skin = ship3_2Ship_mesh;
break;
}
}
void AShip::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 speed = 0.01f; // Speed of rotation
angle += speed; // Increment the angle to move in a circle
// Update the position based on a circular path
Pos.x = Spawn.x + radius * cosf(angle);
Pos.z = Spawn.z + radius * sinf(angle);
// Rotate to face forward along the circle
Rot.yaw = -static_cast<int16_t>(angle * (32768.0f / M_PI / 2.0f));
}
void AShip::Draw(Camera *camera) {
Mat4 shipMtx;
Vec3f hullPos = {Pos.x, Pos.y, Pos.z};
Vec3s hullRot = {Rot.pitch, Rot.yaw, Rot.roll};
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
mtxf_pos_rotation_xyz(shipMtx, hullPos, hullRot);
mtxf_scale(shipMtx, 0.4);
if (render_set_position(shipMtx, 0) != 0) {
gSPDisplayList(gDisplayListHead++, _skin);
}
}
bool AShip::IsMod() { return true; }
+34
View File
@@ -0,0 +1,34 @@
#pragma once
#include <libultraship.h>
#include <libultra/gbi.h>
#include "engine/Actor.h"
#include "CoreMath.h"
extern "C" {
#include "common_structs.h"
#include "assets/other_textures.h"
}
class AShip : public AActor {
public:
enum Skin {
GHOSTSHIP,
SHIP2,
SHIP3,
};
explicit AShip(FVector pos, AShip::Skin);
virtual ~AShip() = default;
virtual void Tick() override;
virtual void Draw(Camera*) override;
virtual bool IsMod() override;
FVector Spawn;
FVector Pos;
FRotation Rot = {0, 0, 0};
private:
Gfx* _skin;
};
+80
View File
@@ -0,0 +1,80 @@
#include "SpaghettiShip.h"
#include <libultra/gbi.h>
extern "C" {
#include "common_structs.h"
#include "math_util.h"
#include "main.h"
#include "courses/harbour/ship_model.h"
}
ASpaghettiShip::ASpaghettiShip(FVector pos) {
Spawn = pos;
Spawn.y += 10;
}
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 speed = 0.01f; // Speed of rotation
angle += speed; // Increment the angle to move in a circle
// Update the position based on a circular path
Pos.x = Spawn.x + radius * cosf(angle);
Pos.z = Spawn.z + radius * sinf(angle);
// Rotate to face forward along the circle
Rot.yaw = -static_cast<int16_t>(angle * (32768.0f / M_PI / 2.0f));
WheelRot.pitch += 500;
}
void ASpaghettiShip::Draw(Camera *camera) {
Mat4 shipMtx;
Mat4 objectMtx;
Mat4 resultMtx;
Vec3f hullPos = {Pos.x, Pos.y, Pos.z};
Vec3s hullRot = {Rot.pitch, Rot.yaw, Rot.roll};
Vec3s rot = {WheelRot.pitch, WheelRot.yaw, WheelRot.roll};
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
// empty/null mtx as a base
mtxf_pos_rotation_xyz(shipMtx, hullPos, hullRot);
mtxf_scale(shipMtx, 0.4);
if (render_set_position(shipMtx, 0) != 0) {}
// Render the ships hull
Vec3f hullPos2 = {0, 0, 0};
mtxf_translate(objectMtx, hullPos2);
mtxf_multiplication(resultMtx, shipMtx, objectMtx);
if (render_set_position(resultMtx, 3) != 0) {
gSPDisplayList(gDisplayListHead++, ship1_Spaghetti_mesh);
}
// Front tyre
Vec3f pos = {0, 0, 110};
mtxf_rotate_x(shipMtx, WheelRot.pitch);
mtxf_translate(objectMtx, pos);
mtxf_multiplication(resultMtx, shipMtx, objectMtx);
if (render_set_position(resultMtx, 3) != 0) {
gSPDisplayList(gDisplayListHead++, wheels_Spaghetti_002_mesh);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
}
// Back tyre
Vec3f pos2 = {0, 0, -165};
mtxf_rotate_x(shipMtx, WheelRot.pitch);
mtxf_translate(objectMtx, pos2);
mtxf_multiplication(resultMtx, shipMtx, objectMtx);
if (render_set_position(resultMtx, 3) != 0) {
gSPDisplayList(gDisplayListHead++, wheels_Spaghetti_002_mesh);
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
}
}
bool ASpaghettiShip::IsMod() { return true; }
+28
View File
@@ -0,0 +1,28 @@
#pragma once
#include <libultraship.h>
#include <libultra/gbi.h>
#include "engine/Actor.h"
#include "CoreMath.h"
extern "C" {
#include "common_structs.h"
#include "assets/other_textures.h"
}
class ASpaghettiShip : public AActor {
public:
explicit ASpaghettiShip(FVector pos);
virtual ~ASpaghettiShip() = default;
virtual void Tick() override;
virtual void Draw(Camera*) override;
virtual bool IsMod() override;
FVector Spawn;
FVector Pos;
FRotation Rot = {0, 0, 0};
FRotation WheelRot = {0, 0, 0};
private:
f32 scale;
};
+49
View File
@@ -0,0 +1,49 @@
#include "Starship.h"
#include <libultra/gbi.h>
extern "C" {
#include "common_structs.h"
#include "math_util.h"
#include "main.h"
#include "courses/harbour/starship_model.h"
}
AStarship::AStarship(FVector pos) {
Spawn = pos;
}
void AStarship::Tick() {
static float angle = 0.0f;
float radius = 150.0f;
float speed = 0.01f;
angle += speed;
// Move relative to the initial position
Pos.x = Spawn.x + radius * cosf(angle);
Pos.z = Spawn.z + radius * sinf(angle);
// Keep y from changing (or adjust it if necessary)
Pos.y = Spawn.y;
// Rotate to face forward along the circle
Rot.yaw = angle * (180.0f / M_PI) + 90.0f;
}
void AStarship::Draw(Camera *camera) {
Mat4 shipMtx;
Vec3f hullPos = {Pos.x, Pos.y, Pos.z};
Vec3s hullRot = {Rot.pitch, Rot.yaw, Rot.roll};
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
mtxf_pos_rotation_xyz(shipMtx, hullPos, hullRot);
mtxf_scale(shipMtx, 1.5);
if (render_set_position(shipMtx, 0) != 0) {
gSPDisplayList(gDisplayListHead++, starship_Cube_mesh);
}
}
bool AStarship::IsMod() { return true; }
+25
View File
@@ -0,0 +1,25 @@
#pragma once
#include <libultraship.h>
#include <libultra/gbi.h>
#include "engine/Actor.h"
#include "CoreMath.h"
extern "C" {
#include "common_structs.h"
#include "assets/other_textures.h"
}
class AStarship : public AActor {
public:
explicit AStarship(FVector pos);
virtual ~AStarship() = default;
virtual void Tick() override;
virtual void Draw(Camera*) override;
virtual bool IsMod() override;
FVector Spawn;
FVector Pos;
FRotation Rot = {0, 0, 0};
};
+848
View File
@@ -0,0 +1,848 @@
#include <libultraship.h>
#include <libultra/gbi.h>
#include "CoreMath.h"
#include <vector>
#include <memory>
#include "Harbour.h"
#include "World.h"
#include "engine/actors/AFinishline.h"
#include "engine/actors/BowserStatue.h"
#include "engine/actors/Ship.h"
#include "engine/actors/SpaghettiShip.h"
#include "engine/actors/Starship.h"
#include "engine/objects/Object.h"
#include "engine/objects/BombKart.h"
#include "assets/mario_raceway_data.h"
#include "assets/bowsers_castle_data.h"
#include "assets/bowsers_castle_displaylists.h"
#include "engine/actors/ATree.h"
#include "engine/actors/ACloud.h"
#include "engine/vehicles/Train.h"
#include "engine/objects/Trophy.h"
#include "engine/objects/CheepCheep.h"
#include "engine/objects/Snowman.h"
#include "engine/objects/TrashBin.h"
#include "engine/objects/Hedgehog.h"
#include "engine/objects/Flagpole.h"
#include "engine/objects/HotAirBalloon.h"
#include "engine/objects/Crab.h"
#include "engine/objects/Boos.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 "courses/harbour/track.h"
typedef struct {
Gfx* addr;
u8 surfaceType;
u8 sectionId;
u16 flags;
} TrackSections;
}
TrackWaypoint harbour_path[] = {
{16,-121,-34,0},
{27,-121,-60,0},
{31,-121,-83,0},
{34,-121,-101,0},
{38,-121,-119,0},
{42,-121,-132,0},
{46,-121,-141,0},
{53,-121,-150,0},
{60,-121,-158,0},
{64,-121,-171,0},
{71,-121,-185,0},
{79,-121,-194,0},
{87,-121,-209,0},
{98,-121,-225,0},
{109,-121,-236,0},
{120,-121,-251,0},
{130,-121,-263,0},
{140,-121,-273,0},
{149,-121,-280,0},
{157,-121,-284,0},
{167,-121,-292,0},
{177,-121,-301,0},
{191,-121,-306,0},
{203,-121,-313,0},
{213,-121,-319,0},
{228,-121,-325,0},
{240,-121,-332,0},
{251,-121,-340,0},
{260,-121,-342,0},
{270,-121,-345,0},
{279,-121,-347,0},
{289,-121,-348,0},
{298,-121,-351,0},
{311,-121,-356,0},
{323,-121,-359,0},
{332,-121,-359,0},
{343,-121,-361,0},
{354,-121,-363,0},
{363,-121,-361,0},
{373,-121,-363,0},
{385,-121,-362,0},
{396,-121,-360,0},
{405,-121,-359,0},
{418,-121,-357,0},
{432,-120,-354,0},
{444,-119,-349,0},
{459,-119,-346,0},
{467,-119,-341,0},
{479,-119,-337,0},
{489,-119,-332,0},
{501,-120,-325,0},
{513,-120,-315,0},
{526,-121,-309,0},
{537,-121,-300,0},
{551,-121,-294,0},
{561,-121,-282,0},
{572,-120,-269,0},
{583,-119,-259,0},
{592,-118,-254,0},
{598,-119,-246,0},
{606,-119,-240,0},
{615,-121,-228,0},
{624,-121,-219,0},
{637,-121,-212,0},
{647,-121,-206,0},
{657,-121,-193,0},
{667,-121,-188,0},
{674,-121,-180,0},
{688,-122,-173,0},
{699,-123,-160,0},
{711,-121,-152,0},
{722,-118,-141,0},
{734,-115,-136,0},
{745,-115,-130,0},
{753,-116,-121,0},
{768,-117,-112,0},
{788,-116,-99,0},
{809,-114,-85,0},
{832,-112,-72,0},
{849,-110,-63,0},
{861,-110,-57,0},
{875,-109,-51,0},
{888,-109,-42,0},
{899,-109,-37,0},
{923,-110,-31,0},
{939,-110,-25,0},
{950,-110,-21,0},
{958,-110,-18,0},
{975,-109,-13,0},
{988,-109,-8,0},
{1017,-109,-17,0},
{1033,-109,-25,0},
{1055,-110,-33,0},
{1075,-112,-38,0},
{1091,-115,-45,0},
{1104,-118,-55,0},
{1112,-119,-62,0},
{1137,-124,-75,0},
{1160,-127,-91,0},
{1173,-128,-101,0},
{1184,-129,-118,0},
{1209,-132,-147,0},
{1224,-132,-163,0},
{1235,-132,-190,0},
{1244,-132,-221,0},
{1251,-132,-257,0},
{1255,-132,-282,0},
{1256,-132,-327,0},
{1253,-132,-364,0},
{1247,-132,-405,0},
{1236,-132,-431,0},
{1233,-132,-473,0},
{1228,-132,-495,0},
{1223,-132,-513,0},
{1218,-132,-543,0},
{1206,-132,-561,0},
{1197,-132,-584,0},
{1182,-132,-613,0},
{1170,-132,-645,0},
{1163,-132,-660,0},
{1158,-132,-677,0},
{1150,-132,-689,0},
{1138,-132,-712,0},
{1126,-132,-737,0},
{1114,-132,-760,0},
{1101,-132,-775,0},
{1085,-132,-796,0},
{1070,-132,-823,0},
{1058,-132,-839,0},
{1046,-132,-861,0},
{1024,-132,-886,0},
{1010,-132,-906,0},
{997,-132,-918,0},
{989,-132,-930,0},
{975,-132,-943,0},
{953,-132,-971,0},
{934,-132,-985,0},
{919,-132,-999,0},
{904,-132,-1014,0},
{889,-132,-1030,0},
{874,-132,-1044,0},
{852,-132,-1057,0},
{826,-132,-1074,0},
{806,-132,-1087,0},
{787,-132,-1104,0},
{773,-132,-1111,0},
{751,-132,-1125,0},
{728,-132,-1136,0},
{710,-132,-1148,0},
{687,-132,-1162,0},
{667,-132,-1174,0},
{648,-132,-1187,0},
{632,-132,-1190,0},
{615,-132,-1198,0},
{597,-132,-1205,0},
{576,-132,-1211,0},
{562,-132,-1216,0},
{543,-132,-1222,0},
{526,-132,-1227,0},
{513,-132,-1231,0},
{495,-132,-1236,0},
{472,-132,-1243,0},
{451,-132,-1243,0},
{431,-132,-1245,0},
{402,-132,-1250,0},
{379,-132,-1250,0},
{358,-132,-1252,0},
{340,-132,-1253,0},
{316,-132,-1255,0},
{298,-132,-1254,0},
{275,-132,-1252,0},
{246,-132,-1249,0},
{221,-132,-1242,0},
{198,-132,-1237,0},
{173,-132,-1232,0},
{156,-132,-1229,0},
{137,-132,-1221,0},
{119,-132,-1208,0},
{103,-132,-1195,0},
{81,-132,-1179,0},
{63,-132,-1161,0},
{48,-132,-1150,0},
{28,-132,-1125,0},
{9,-132,-1104,0},
{-3,-132,-1086,0},
{-24,-132,-1064,0},
{-38,-133,-1049,0},
{-50,-133,-1030,0},
{-64,-134,-1005,0},
{-82,-135,-985,0},
{-97,-136,-960,0},
{-109,-137,-942,0},
{-130,-138,-921,0},
{-148,-139,-897,0},
{-160,-141,-874,0},
{-176,-142,-849,0},
{-202,-143,-821,0},
{-219,-145,-792,0},
{-235,-147,-763,0},
{-257,-149,-729,0},
{-273,-150,-705,0},
{-288,-152,-673,0},
{-309,-154,-637,0},
{-326,-155,-603,0},
{-343,-157,-569,0},
{-356,-158,-542,0},
{-373,-158,-512,0},
{-386,-160,-479,0},
{-401,-161,-441,0},
{-412,-163,-402,0},
{-425,-163,-374,0},
{-441,-164,-332,0},
{-455,-163,-295,0},
{-468,-163,-264,0},
{-482,-162,-219,0},
{-494,-162,-184,0},
{-502,-162,-149,0},
{-509,-162,-118,0},
{-516,-161,-85,0},
{-524,-160,-64,0},
{-532,-159,-39,0},
{-539,-159,-3,0},
{-545,-158,28,0},
{-551,-157,56,0},
{-558,-156,86,0},
{-562,-156,124,0},
{-569,-155,152,0},
{-574,-154,194,0},
{-582,-153,241,0},
{-582,-153,262,0},
{-586,-152,298,0},
{-590,-152,330,0},
{-593,-152,351,0},
{-594,-152,383,0},
{-595,-152,415,0},
{-595,-152,442,0},
{-597,-152,466,0},
{-597,-152,492,0},
{-598,-152,530,0},
{-597,-152,571,0},
{-596,-152,612,0},
{-595,-152,646,0},
{-591,-153,683,0},
{-591,-153,717,0},
{-591,-152,752,0},
{-587,-152,788,0},
{-583,-153,820,0},
{-580,-153,858,0},
{-573,-154,886,0},
{-567,-154,924,0},
{-562,-155,952,0},
{-554,-155,988,0},
{-547,-156,1022,0},
{-534,-156,1065,0},
{-518,-157,1108,0},
{-510,-157,1147,0},
{-503,-158,1172,0},
{-494,-158,1206,0},
{-486,-157,1242,0},
{-474,-157,1274,0},
{-466,-157,1303,0},
{-448,-156,1363,0},
{-435,-156,1400,0},
{-425,-155,1428,0},
{-414,-154,1464,0},
{-404,-153,1498,0},
{-397,-150,1532,0},
{-383,-149,1565,0},
{-370,-148,1604,0},
{-348,-144,1667,0},
{-329,-142,1714,0},
{-312,-141,1744,0},
{-298,-138,1785,0},
{-286,-137,1812,0},
{-263,-135,1860,0},
{-236,-134,1890,0},
{-207,-134,1927,0},
{-184,-133,1949,0},
{-163,-133,1965,0},
{-146,-133,1985,0},
{-103,-132,2022,0},
{-74,-132,2056,0},
{-52,-132,2078,0},
{-20,-132,2101,0},
{6,-132,2118,0},
{28,-132,2133,0},
{52,-132,2154,0},
{72,-132,2169,0},
{89,-132,2183,0},
{105,-132,2196,0},
{127,-132,2215,0},
{149,-132,2233,0},
{169,-132,2245,0},
{196,-132,2262,0},
{219,-132,2277,0},
{248,-132,2293,0},
{284,-132,2311,0},
{314,-132,2330,0},
{348,-132,2339,0},
{376,-132,2346,0},
{395,-132,2343,0},
{414,-132,2344,0},
{434,-132,2342,0},
{452,-132,2341,0},
{486,-132,2328,0},
{518,-132,2322,0},
{541,-132,2312,0},
{567,-132,2305,0},
{590,-132,2298,0},
{609,-132,2287,0},
{633,-132,2277,0},
{658,-132,2267,0},
{686,-132,2251,0},
{712,-132,2235,0},
{731,-132,2227,0},
{753,-132,2214,0},
{774,-132,2200,0},
{799,-132,2181,0},
{826,-132,2160,0},
{846,-132,2144,0},
{867,-132,2122,0},
{894,-132,2097,0},
{916,-132,2070,0},
{936,-132,2043,0},
{960,-132,2001,0},
{980,-132,1968,0},
{995,-132,1936,0},
{1008,-132,1908,0},
{1023,-132,1882,0},
{1048,-132,1850,0},
{1064,-132,1820,0},
{1077,-132,1788,0},
{1096,-133,1757,0},
{1113,-133,1712,0},
{1134,-134,1667,0},
{1150,-135,1623,0},
{1165,-135,1582,0},
{1186,-136,1521,0},
{1202,-136,1480,0},
{1219,-136,1436,0},
{1230,-135,1397,0},
{1249,-135,1361,0},
{1260,-134,1327,0},
{1270,-134,1295,0},
{1279,-133,1258,0},
{1292,-133,1218,0},
{1304,-132,1177,0},
{1305,-132,1162,0},
{1303,-132,1146,0},
{1302,-132,1131,0},
{1296,-132,1115,0},
{1291,-133,1106,0},
{1281,-133,1097,0},
{1275,-134,1085,0},
{1266,-136,1074,0},
{1254,-137,1064,0},
{1242,-138,1060,0},
{1225,-139,1042,0},
{1211,-138,1034,0},
{1196,-137,1025,0},
{1178,-134,1018,0},
{1165,-132,1014,0},
{1144,-130,1009,0},
{1124,-127,993,0},
{1105,-126,986,0},
{1084,-125,981,0},
{1059,-124,980,0},
{1039,-122,972,0},
{1016,-121,974,0},
{988,-120,979,0},
{964,-120,983,0},
{941,-121,984,0},
{914,-124,988,0},
{892,-124,996,0},
{865,-123,1000,0},
{848,-122,1004,0},
{829,-120,1015,0},
{811,-119,1028,0},
{785,-115,1036,0},
{765,-113,1044,0},
{747,-113,1064,0},
{724,-114,1080,0},
{707,-115,1098,0},
{682,-116,1109,0},
{663,-117,1131,0},
{645,-117,1150,0},
{625,-117,1172,0},
{606,-118,1183,0},
{573,-120,1200,0},
{554,-121,1222,0},
{532,-121,1238,0},
{508,-121,1258,0},
{482,-121,1270,0},
{461,-121,1286,0},
{435,-121,1299,0},
{413,-121,1307,0},
{389,-121,1313,0},
{369,-121,1316,0},
{348,-121,1322,0},
{330,-121,1325,0},
{309,-121,1323,0},
{284,-121,1322,0},
{258,-121,1323,0},
{235,-121,1313,0},
{216,-121,1301,0},
{186,-121,1289,0},
{170,-121,1284,0},
{155,-121,1271,0},
{141,-121,1255,0},
{126,-121,1241,0},
{118,-121,1232,0},
{109,-121,1217,0},
{101,-121,1205,0},
{94,-121,1194,0},
{86,-121,1180,0},
{78,-121,1164,0},
{71,-121,1144,0},
{63,-121,1127,0},
{57,-121,1111,0},
{49,-121,1088,0},
{44,-121,1074,0},
{38,-121,1056,0},
{34,-121,1032,0},
{29,-121,1010,0},
{26,-121,986,0},
{21,-121,968,0},
{14,-121,940,0},
{8,-121,918,0},
{8,-121,893,0},
{4,-121,872,0},
{3,-121,851,0},
{1,-121,829,0},
{0,-121,803,0},
{-1,-121,788,0},
{-5,-121,749,0},
{-7,-121,713,0},
{-11,-121,678,0},
{-8,-121,642,0},
{-8,-121,608,0},
{-7,-121,577,0},
{-8,-121,556,0},
{-11,-121,515,0},
{-9,-121,484,0},
{-9,-121,453,0},
{-8,-121,416,0},
{-6,-121,394,0},
{-3,-121,345,0},
{-2,-121,305,0},
{-1,-121,251,0},
{-1,-121,214,0},
{-2,-121,189,0},
{-1,-121,156,0},
{1,-121,124,0},
{4,-121,86,0},
{6,-121,66,0},
{8,-121,36,0},
{13,-121,0,0},
{15,-121,-14,0},
{-32768, -32768, -32768, 0}
};
Harbour::Harbour() {
this->gfxSize = 100;
this->textures = NULL;
Props.MinimapTexture = gTextureCourseOutlineMarioRaceway;
Props.MinimapDimensions = IVector2D(ResourceGetTexWidthByName(Props.MinimapTexture), ResourceGetTexHeightByName(Props.MinimapTexture));
Props.Id = "mk:harbour";
Props.Name = "Harbour";
Props.DebugName = "harbour";
Props.CourseLength = "99m";
Props.AIBehaviour = D_0D008F28;
Props.AIMaximumSeparation = 50.0f;
Props.AIMinimumSeparation = 0.3f;
Props.SomePtr = D_800DCB34;
Props.AISteeringSensitivity = 48;
Props.NearPersp = 9.0f;
Props.FarPersp = 4500.0f;
Props.PathSizes = {459, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0};
Props.D_0D009418[0] = 4.1666665f;
Props.D_0D009418[1] = 5.5833334f;
Props.D_0D009418[2] = 6.1666665f;
Props.D_0D009418[3] = 6.75f;
Props.D_0D009568[0] = 3.75f;
Props.D_0D009568[1] = 5.1666665f;
Props.D_0D009568[2] = 5.75f;
Props.D_0D009568[3] = 6.3333334f;
Props.D_0D0096B8[0] = 3.3333332f;
Props.D_0D0096B8[1] = 3.9166667f;
Props.D_0D0096B8[2] = 4.5f;
Props.D_0D0096B8[3] = 5.0833334f;
Props.D_0D009808[0] = 3.75f;
Props.D_0D009808[1] = 5.1666665f;
Props.D_0D009808[2] = 5.75f;
Props.D_0D009808[3] = 6.3333334f;
Props.PathTable[0] = harbour_path;
Props.PathTable[1] = NULL;
Props.PathTable[2] = NULL;
Props.PathTable[3] = NULL;
Props.PathTable2[0] = harbour_path;
Props.PathTable2[1] = NULL;
Props.PathTable2[2] = NULL;
Props.PathTable2[3] = NULL;
Props.Clouds = gKalimariDesertClouds;
Props.CloudList = gLuigiRacewayClouds;
Props.MinimapFinishlineX = 0;
Props.MinimapFinishlineY = 0;
Props.Skybox.TopRight = {120, 140, 188};
Props.Skybox.BottomRight = {216, 232, 248};
Props.Skybox.BottomLeft = {216, 232, 248};
Props.Skybox.TopLeft = {40, 184, 208};
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_RACEWAYS_WARIO_STADIUM;
}
TrackSections harbour_surfaces[] = {
{ road_map_001_mesh, 1, 255, 0x0000 },
{ ground_map_mesh, 8, 255, 0x0000 },
{ 0x00000000, 0, 0, 0x00000 },
};
void Harbour::Load() {
Course::Load(road_map_001_mesh_vtx_0, NULL);
generate_collision_mesh_with_default_section_id(ground_map_mesh, 8);
generate_collision_mesh_with_default_section_id(road_map_001_mesh, 1);
generate_collision_mesh_with_defaults(castle_map_002_mesh);
generate_collision_mesh_with_defaults(trees_map_003_mesh);
generate_collision_mesh_with_defaults(bush_map_004_mesh);
generate_collision_mesh_with_defaults(statue_map_005_mesh);
parse_course_displaylists((TrackSectionsI*)harbour_surfaces);
func_80295C6C();
D_8015F8E4 = gCourseMinY - 10.0f;
}
void Harbour::LoadTextures() {
dma_textures(gTextureTrees1, 0x0000035BU, 0x00000800U);
D_802BA058 = dma_textures(gTexturePiranhaPlant1, 0x000003E8U, 0x00000800U);
dma_textures(gTexturePiranhaPlant2, 0x000003E8U, 0x00000800U);
dma_textures(gTexturePiranhaPlant3, 0x000003E8U, 0x00000800U);
dma_textures(gTexturePiranhaPlant4, 0x000003E8U, 0x00000800U);
dma_textures(gTexturePiranhaPlant5, 0x000003E8U, 0x00000800U);
dma_textures(gTexturePiranhaPlant6, 0x000003E8U, 0x00000800U);
dma_textures(gTexturePiranhaPlant7, 0x000003E8U, 0x00000800U);
dma_textures(gTexturePiranhaPlant8, 0x000003E8U, 0x00000800U);
dma_textures(gTexturePiranhaPlant9, 0x000003E8U, 0x00000800U);
}
Path2D harbour_path2D[] = {
{ 0, 0},
{ 0, -100},
{ 0, -200},
{ 0, -300},
{ 0, -400},
{ 0, -500},
{ 0, -600},
{ 0, -700},
{ 0, -800},
{ 0, -900},
{ 0, -1000},
{ 0, -1096}, // Main point 1
{ 100, -1090},
{ 200, -1085},
{ 300, -1080},
{ 400, -1075},
{ 500, -1072}, // Curve begins to smooth here
{ 600, -1068},
{ 700, -1065},
{ 800, -1063},
{ 900, -1061},
{ 984, -1060}, // Main point 2
{ 990, -900},
{ 995, -800},
{ 997, -700},
{ 998, -600},
{ 999, -500},
{ 999, -400},
{ 999, -300},
{ 999, -200},
{ 999, -100},
{ 999, 0},
{ 999, 100},
{ 999, 200},
{ 999, 300},
{ 999, 400},
{ 999, 500},
{ 999, 600},
{ 999, 700},
{ 999, 800},
{ 999, 900},
{ 999, 940}, // Main point 3
{ 900, 945},
{ 800, 945},
{ 700, 947},
{ 600, 948},
{ 500, 949},
{ 400, 949},
{ 300, 949},
{ 200, 950},
{ 100, 950},
{ 0, 950}, // Main point 4
// End of path
{ -32768, -32768 } // Terminator
};
void Harbour::BeginPlay() {
struct ActorSpawnData itemboxes[] = {
{ 200, 1500, 200 , 0},
{ 350, 2500, 300 , 1},
{ 400, 2000, 350 , 2},
{ 40, 0, -800, 0},
{ -40, 0, -800, 0},
{ 0, 0, -800, 0},
{ 999, 6, 482, 0},
{ 1064, 8, 275, {0}},
{ 1028, 5, -39 , {0}},
{ 320, 0, 1020, {0}},
{ 293, 0, 950, {0}},
{{ -32768, 0, 0 }, {0}},
};
struct ActorSpawnData rocks[] = {
{{ 200, 1500, 200 }, {0}},
{{ 350, 2500, 300 }, {1}},
{{ 400, 2000, 350 }, {2}},
{{ -32768, 0, 0 }, {0}},
};
//spawn_all_item_boxes(itemboxes);
Vec3f test = {-100, 0, -150};
Vec3s rot = {0, 0, 0};
Vec3f vel = {0, 0, 0};
//add_actor_to_empty_slot(test, rot, vel, ACTOR_TREE_MARIO_RACEWAY);
Vec3f pos = {0, 80, 0};
// gWorldInstance.AddActor(new ACloud(pos));
// gWorldInstance.AddActor(new OSeagull(0, pos));
// gWorldInstance.AddActor(new OSeagull(1, pos));
// gWorldInstance.AddActor(new OSeagull(2, pos));
// gWorldInstance.AddActor(new OSeagull(3, pos));
// gWorldInstance.AddObject(new OCheepCheep(FVector(0, 40, 0), OCheepCheep::CheepType::RACE, IPathSpan(0, 10)));
// gWorldInstance.AddObject(new OTrophy(FVector(0,0,0), OTrophy::TrophyType::GOLD, OTrophy::Behaviour::GO_FISH));
//gWorldInstance.AddObject(new OSnowman(FVector(0, 0, 0)));
//gWorldInstance.AddObject(new OTrashBin(FVector(0.0f, 0.0f, 0.0f), FRotation(0, 90, 0), 1.0f, OTrashBin::Behaviour::MUNCHING));
//gWorldInstance.AddObject(new OHedgehog(FVector(0, 0, 0), FVector2D(0, -200), 9));
//gWorldInstance.AddObject(new OFlagpole(FVector(0, 0, -200), 0x400));
// gWorldInstance.AddObject(new OHotAirBalloon(FVector(0.0, 20.0f, -200.0f)));
//gWorldInstance.AddObject(new OCrab(FVector2D(0, 0), FVector2D(0, -200)));
// gWorldInstance.AddActor(new ABowserStatue(FVector(-200, 0, 0), ABowserStatue::Behaviour::CRUSH));
// gWorldInstance.AddObject(new OBoos(10, IPathSpan(0, 5), IPathSpan(18, 23), IPathSpan(25, 50)));
// gVehicle2DWaypoint = harbour_path2D;
//gVehicle2DWaypointLength = 53;
// D_80162EB0 = spawn_actor_on_surface(harbour_path2D[0].x, 2000.0f, harbour_path2D[0].z);
// DEBUG ONLY TO VISUALIZE PATH
// for (size_t i = 0; i < ARRAY_COUNT(harbour_path); i++) {
// if (i % 10 == 1) {
// f32 height = spawn_actor_on_surface(harbour_path[i].posX, 2000.0f, harbour_path[i].posZ);
// Vec3f itemPos = {harbour_path[i].posX, height, harbour_path[i].posZ};
// add_actor_to_empty_slot(itemPos, rot, vel, ACTOR_ITEM_BOX);
// }
// }
gWorldInstance.AddActor(new AShip(FVector(-1694, -111, 1451), AShip::Skin::GHOSTSHIP));
gWorldInstance.AddActor(new AShip(FVector(2811, -83, 966), AShip::Skin::SHIP2));
gWorldInstance.AddActor(new AShip(FVector(1526, -36, -2228), AShip::Skin::SHIP3));
gWorldInstance.AddActor(new ASpaghettiShip(FVector(582, -70, -650)));
//gWorldInstance.AddActor(new ASpaghettiShip(FVector(2811, -83, 966 )));
gWorldInstance.AddActor(new AStarship(FVector(1019, 160, 1987)));
}
// Likely sets minimap boundaries
void Harbour::MinimapSettings() {
D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust5, 0x443, 0x1000));
D_8018D2A0 = 0.022f;
D_8018D2E0 = 6;
D_8018D2E8 = 28;
D_8018D2C0[0] = 260;
D_8018D2D8[0] = 170;
D_80165718 = 0;
D_80165720 = 5;
D_80165728 = -240;
}
void Harbour::InitCourseObjects() {}
void Harbour::SomeSounds() {}
void Harbour::WhatDoesThisDo(Player* player, int8_t playerId) {
if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x19B) &&
((s16) gNearestWaypointByPlayerId[playerId] < 0x1B9)) {
if (D_80165300[playerId] != 1) {
func_800CA288(playerId, 0x55);
}
D_80165300[playerId] = 1;
} else {
if (D_80165300[playerId] != 0) {
func_800CA2B8(playerId);
D_80165300[playerId] = 0;
}
}
}
void Harbour::WhatDoesThisDoAI(Player* player, int8_t playerId) {
if (((s16) gNearestWaypointByPlayerId[playerId] >= 0x19B) &&
((s16) gNearestWaypointByPlayerId[playerId] < 0x1B9)) {
if (D_80165300[playerId] != 1) {
func_800CA2E4(playerId, 0x55);
}
D_80165300[playerId] = 1;
} else {
if (D_80165300[playerId] != 0) {
func_800CA30C(playerId);
D_80165300[playerId] = 0;
}
}
}
// Positions the finishline on the minimap
void Harbour::MinimapFinishlinePosition() {
//! todo: Place hard-coded values here.
draw_hud_2d_texture_8x8(this->Props.MinimapFinishlineX, this->Props.MinimapFinishlineY, (u8*) common_texture_minimap_finish_line);
}
void Harbour::Render(struct UnkStruct_800DC5EC* arg0) {
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
func_802B5D64(D_800DC610, D_802B87D4, 0, 1);
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
if (func_80290C20(arg0->camera) == 1) {
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++, ground_map_mesh);
gSPDisplayList(gDisplayListHead++, road_map_001_mesh);
gSPDisplayList(gDisplayListHead++, bush_map_004_mesh);
gSPDisplayList(gDisplayListHead++, castle_map_002_mesh);
gSPDisplayList(gDisplayListHead++, statue_map_005_mesh);
gSPDisplayList(gDisplayListHead++, trees_map_003_mesh);
gSPDisplayList(gDisplayListHead++, water_water1_mesh);
gSPDisplayList(gDisplayListHead++, moon_moon_mesh);
}
void Harbour::RenderCredits() {
}
void Harbour::Collision() {}
void Harbour::Destroy() { }
bool Harbour::IsMod() {
return true;
}
+41
View File
@@ -0,0 +1,41 @@
#pragma once
#include <libultraship.h>
#include "Course.h"
extern "C" {
#include "mario_raceway_vertices.h"
#include "mario_raceway_displaylists.h"
#include "course_offsets.h"
#include "camera.h"
#include "data/some_data.h"
#include "objects.h"
#include "path_spawn_metadata.h"
#include "mario_raceway_data.h"
extern const course_texture test_course_textures[];
}
class Harbour : public Course {
public:
virtual ~Harbour() = default; // Virtual destructor for proper cleanup in derived classes
// Constructor
explicit Harbour();
// 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 MinimapSettings() override;
virtual void InitCourseObjects() override;
virtual void SomeSounds() override;
virtual void WhatDoesThisDo(Player* player, int8_t playerId) override;
virtual void WhatDoesThisDoAI(Player* player, int8_t playerId) override;
virtual void MinimapFinishlinePosition() override;
virtual void Render(struct UnkStruct_800DC5EC*) override;
virtual void RenderCredits() override;
virtual void Collision() override;
virtual void Destroy() override;
virtual bool IsMod() override;
};
+5
View File
@@ -8,6 +8,9 @@
#include "World.h"
#include "engine/actors/AFinishline.h"
#include "engine/actors/BowserStatue.h"
#include "engine/actors/Ship.h"
#include "engine/actors/SpaghettiShip.h"
#include "engine/actors/Starship.h"
#include "engine/objects/Object.h"
#include "engine/objects/BombKart.h"
#include "assets/mario_raceway_data.h"
@@ -287,6 +290,8 @@ void TestCourse::BeginPlay() {
gWorldInstance.AddObject(new OBombKart(pos2, &D_80164550[0][25], 25, 4, 0.8333333f));
gWorldInstance.AddObject(new OBombKart(pos2, &D_80164550[0][45], 45, 4, 0.8333333f));
gWorldInstance.AddActor(new AShip(FVector(0, 0, 0), AShip::Skin::SHIP3));
}
// Likely sets minimap boundaries
+1 -1
View File
@@ -93,7 +93,7 @@ void freecam(Camera* camera, Player* player, s8 index) {
void on_freecam(void) {
gIsHUDVisible = false;
gPlayerOne->type |= PLAYER_KART_AI;
// gPlayerOne->type |= PLAYER_KART_AI;
}
void off_freecam(void) {
+4
View File
@@ -26,6 +26,7 @@
#include "engine/courses/DoubleDeck.h"
#include "engine/courses/DKJungle.h"
#include "engine/courses/BigDonut.h"
#include "engine/courses/Harbour.h"
#include "engine/courses/TestCourse.h"
#include "engine/actors/AFinishline.h"
@@ -83,6 +84,7 @@ DoubleDeck* gDoubleDeck;
DKJungle* gDkJungle;
BigDonut* gBigDonut;
PodiumCeremony* gPodiumCeremony;
Harbour* gHarbour;
TestCourse* gTestCourse;
Cup* gMushroomCup;
@@ -118,6 +120,7 @@ void CustomEngineInit() {
gDkJungle = new DKJungle();
gBigDonut = new BigDonut();
gPodiumCeremony = new PodiumCeremony();
gHarbour = new Harbour();
gTestCourse = new TestCourse();
/* Add all courses to the global course list */
@@ -141,6 +144,7 @@ void CustomEngineInit() {
gWorldInstance.AddCourse(gDoubleDeck);
gWorldInstance.AddCourse(gDkJungle);
gWorldInstance.AddCourse(gBigDonut);
gWorldInstance.AddCourse(gHarbour);
gWorldInstance.AddCourse(gTestCourse);
gMushroomCup = new Cup("mk:mushroom_cup", "mushroom cup",