summaryrefslogtreecommitdiff
path: root/src/engine/courses/SherbetLand.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/courses/SherbetLand.cpp')
-rw-r--r--src/engine/courses/SherbetLand.cpp80
1 files changed, 60 insertions, 20 deletions
diff --git a/src/engine/courses/SherbetLand.cpp b/src/engine/courses/SherbetLand.cpp
index 38439eb95..19bfa573e 100644
--- a/src/engine/courses/SherbetLand.cpp
+++ b/src/engine/courses/SherbetLand.cpp
@@ -6,7 +6,8 @@
#include "SherbetLand.h"
#include "GameObject.h"
#include "World.h"
-#include "BombKart.h"
+#include "engine/actors/AFinishline.h"
+#include "engine/vehicles/OBombKart.h"
#include "assets/sherbet_land_data.h"
extern "C" {
@@ -30,6 +31,7 @@ extern "C" {
#include "collision.h"
#include "memory.h"
extern const char *sherbet_land_dls[];
+ extern const char *sherbet_land_dls_2[];
}
SherbetLand::SherbetLand() {
@@ -100,13 +102,41 @@ SherbetLand::SherbetLand() {
Props.Skybox.FloorTopLeft = {216, 232, 248};
}
+void SherbetLand::Load() {
+ Course::Load();
+
+ parse_course_displaylists((TrackSectionsI*)LOAD_ASSET_RAW(d_course_sherbet_land_addr));
+ func_80295C6C();
+ D_8015F8E4 = -18.0f;
+ // d_course_sherbet_land_packed_dl_1EB8
+ find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07001EB8), -0x4C, 255, 255, 255);
+ // d_course_sherbet_land_packed_dl_2308
+ find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07002308), -0x6A, 255, 255, 255);
+}
+
void SherbetLand::LoadTextures() {
}
void SherbetLand::SpawnActors() {
+ gWorldInstance.AddActor(new AFinishline());
+
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_sherbet_land_item_box_spawns));
}
+void SherbetLand::SpawnVehicles() {
+ if (gModeSelection == VERSUS) {
+ Vec3f pos = {0, 0, 0};
+
+ gWorldInstance.AddBombKart(pos, &D_80164550[0][50], 50, 3, 0.8333333f);
+ gWorldInstance.AddBombKart(pos, &D_80164550[0][100], 100, 1, 0.8333333f);
+ gWorldInstance.AddBombKart(pos, &D_80164550[0][150], 150, 3, 0.8333333f);
+ gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 1, 0.8333333f);
+ gWorldInstance.AddBombKart(pos, &D_80164550[0][250], 250, 3, 0.8333333f);
+ gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
+ gWorldInstance.AddBombKart(pos, &D_80164550[0][0], 0, 0, 0.8333333f);
+ }
+}
+
// Likely sets minimap boundaries
void SherbetLand::MinimapSettings() {
D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust1, 0x485, 0xC00));
@@ -146,25 +176,12 @@ void SherbetLand::WhatDoesThisDo(Player* player, int8_t playerId) {}
void SherbetLand::WhatDoesThisDoAI(Player* player, int8_t playerId) {}
-void SherbetLand::SpawnBombKarts() {
- gWorldInstance.AddObject(std::make_unique<OBombKart>(40, 3, 0.8333333, 0, 0, 0, 0));
- gWorldInstance.AddObject(std::make_unique<OBombKart>(100, 3, 0.8333333, 0, 0, 0, 0));
- gWorldInstance.AddObject(std::make_unique<OBombKart>(265, 3, 0.8333333, 0, 0, 0, 0));
- gWorldInstance.AddObject(std::make_unique<OBombKart>(285, 1, 0.8333333, 0, 0, 0, 0));
- gWorldInstance.AddObject(std::make_unique<OBombKart>(420, 1, 0.8333333, 0, 0, 0, 0));
- gWorldInstance.AddObject(std::make_unique<OBombKart>(0, 0, 0.8333333, 0, 0, 0, 0));
- gWorldInstance.AddObject(std::make_unique<OBombKart>(0, 0, 0.8333333, 0, 0, 0, 0));
-}
-
// Positions the finishline on the minimap
void SherbetLand::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 SherbetLand::SetStaffGhost() {}
-
-void SherbetLand::BeginPlay() { }
void SherbetLand::Render(struct UnkStruct_800DC5EC* arg0) {
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
@@ -180,14 +197,37 @@ void SherbetLand::RenderCredits() {
void SherbetLand::Collision() {}
-void SherbetLand::GenerateCollision() {
- parse_course_displaylists((TrackSectionsI*)LOAD_ASSET_RAW(d_course_sherbet_land_addr));
- func_80295C6C();
- D_8015F8E4 = -18.0f;
+void SherbetLand::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) {
+ Mat4 matrix;
+
+ gDPPipeSync(gDisplayListHead++);
+ gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
+ gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
+ gDPSetBlendMask(gDisplayListHead++, 0xFF);
+ gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
+ gDPSetTextureFilter(gDisplayListHead++, G_TF_BILERP);
+ gDPSetTexturePersp(gDisplayListHead++, G_TP_PERSP);
+
+ mtxf_identity(matrix);
+ render_set_position(matrix, 0);
+ render_course_segments(sherbet_land_dls_2, screen);
+
+ gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE);
+ if ((func_80290C20(screen->camera) == 1) && (func_802AAB4C(screen->player) < screen->player->pos[1])) {
+ gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER);
+ gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
+ gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
+ // d_course_sherbet_land_packed_dl_2B48
+ gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07002B48));
+ }
+ gDPPipeSync(gDisplayListHead++);
+}
+
+void SherbetLand::CreditsSpawnActors() {
// d_course_sherbet_land_packed_dl_1EB8
- find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07001EB8), -0x4C, 255, 255, 255);
+ find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07001EB8), -0x4C, 0xFF, 0xFF, 0xFF);
// d_course_sherbet_land_packed_dl_2308
- find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07002308), -0x6A, 255, 255, 255);
+ find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07002308), -0x6A, 0xFF, 0xFF, 0xFF);
}
void SherbetLand::Destroy() { }