diff options
| author | MegaMech <MegaMech@users.noreply.github.com> | 2024-11-14 23:32:55 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-14 23:32:55 -0700 |
| commit | 475f167bb2803999c5116bc285601d1f9a05d7de (patch) | |
| tree | 859fec292c5c9807cc9690ebf4f0600f558b6063 /src/engine/courses/KoopaTroopaBeach.cpp | |
| parent | 4fbb031dd95f2a84e73fbca269f517e98808d293 (diff) | |
[modding] Big Update PR (#118)
* Implement kart vehicle
* Fix menu CC
* Actors
* variable framerate
* Implement Actors vector
* Fix water & scrolling textures
* Finish ACoin
* Refactor finishline
* Refactor mtx to vector
* Fix refactored screen code bugs
* Fix playlist bug
* Switching courses working now
* Fix podium ceremony
* Mostly Fix Demo and Credits
* Credits Load Actors and Textures
* Fix credits
* Formatting
* Update lus and torch
* Fix water features
* Fix crabs
* Combine function
* Fix wheels
* Add Moon Jump Cheat
* Wheel Change
* Fix smoke due to wheel change
* Fix screens for wheels
* Fix transparency
* Fix staff ghost
* Fix lakitu transition widescreen
* Rename and export credits text
* Fixes
---------
Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com>
Diffstat (limited to 'src/engine/courses/KoopaTroopaBeach.cpp')
| -rw-r--r-- | src/engine/courses/KoopaTroopaBeach.cpp | 97 |
1 files changed, 71 insertions, 26 deletions
diff --git a/src/engine/courses/KoopaTroopaBeach.cpp b/src/engine/courses/KoopaTroopaBeach.cpp index fc0419984..66bf99005 100644 --- a/src/engine/courses/KoopaTroopaBeach.cpp +++ b/src/engine/courses/KoopaTroopaBeach.cpp @@ -6,7 +6,8 @@ #include "KoopaTroopaBeach.h" #include "GameObject.h" #include "World.h" -#include "BombKart.h" +#include "engine/actors/AFinishline.h" +#include "engine/vehicles/OBombKart.h" #include "assets/koopa_troopa_beach_data.h" extern "C" { @@ -103,15 +104,42 @@ KoopaTroopaBeach::KoopaTroopaBeach() { Props.Skybox.FloorTopLeft = {48, 152, 120}; } +void KoopaTroopaBeach::Load() { + Course::Load(); + + parse_course_displaylists((TrackSectionsI*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_addr)); + func_80295C6C(); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x0700ADE0), -0x6A, 255, 255, 255); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x0700A540), -0x6A, 255, 255, 255); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07009E70), -0x6A, 255, 255, 255); + find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07000358), -0x6A, 255, 255, 255); +} + void KoopaTroopaBeach::LoadTextures() { } void KoopaTroopaBeach::SpawnActors() { + gWorldInstance.AddActor(new AFinishline()); + init_actor_hot_air_balloon_item_box(328.0f * gCourseDirection, 70.0f, 2541.0f); spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_item_box_spawns)); spawn_palm_trees((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_tree_spawn)); } +void KoopaTroopaBeach::SpawnVehicles() { + if (gModeSelection == VERSUS) { + Vec3f pos = {0, 0, 0}; + + gWorldInstance.AddBombKart(pos, &D_80164550[0][60], 60, 1, 0.8333333f); + gWorldInstance.AddBombKart(pos, &D_80164550[0][120], 120, 1, 0.8333333f); + gWorldInstance.AddBombKart(pos, &D_80164550[0][200], 200, 3, 0.8333333f); + gWorldInstance.AddBombKart(pos, &D_80164550[0][280], 280, 1, 0.8333333f); + gWorldInstance.AddBombKart(pos, &D_80164550[0][435], 435, 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 KoopaTroopaBeach::MinimapSettings() { D_8018D220 = reinterpret_cast<uint8_t (*)[1024]>(dma_textures(gTextureExhaust3, 0x3C8U, 0x1000)); @@ -180,27 +208,12 @@ void KoopaTroopaBeach::WhatDoesThisDo(Player* player, int8_t playerId) {} void KoopaTroopaBeach::WhatDoesThisDoAI(Player* player, int8_t playerId) {} -void KoopaTroopaBeach::SpawnBombKarts() { - gWorldInstance.AddObject(std::make_unique<OBombKart>(140, 3, 0.8333333, 0, 0, 0, 0)); - gWorldInstance.AddObject(std::make_unique<OBombKart>(165, 1, 0.8333333, 0, 0, 0, 0)); - gWorldInstance.AddObject(std::make_unique<OBombKart>(330, 3, 0.8333333, 0, 0, 0, 0)); - gWorldInstance.AddObject(std::make_unique<OBombKart>(550, 1, 0.8333333, 0, 0, 0, 0)); - gWorldInstance.AddObject(std::make_unique<OBombKart>(595, 3, 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 KoopaTroopaBeach::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 KoopaTroopaBeach::SetStaffGhost() { -} - -void KoopaTroopaBeach::BeginPlay() { } - void KoopaTroopaBeach::Render(struct UnkStruct_800DC5EC* arg0) { gDPPipeSync(gDisplayListHead++); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); @@ -237,16 +250,7 @@ void KoopaTroopaBeach::SomeCollisionThing(Player *player, Vec3f arg1, Vec3f arg2 func_8003E37C(player, arg1, arg2, arg3, arg4, arg5, arg6, arg7); } -void KoopaTroopaBeach::GenerateCollision() { - parse_course_displaylists((TrackSectionsI*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_addr)); - func_80295C6C(); - find_vtx_and_set_colours(segmented_gfx_to_virtual(reinterpret_cast<void*>(0x0700ADE0)), -0x6A, 255, 255, 255); - find_vtx_and_set_colours(segmented_gfx_to_virtual(reinterpret_cast<void*>(0x0700A540)), -0x6A, 255, 255, 255); - find_vtx_and_set_colours(segmented_gfx_to_virtual(reinterpret_cast<void*>(0x07009E70)), -0x6A, 255, 255, 255); - find_vtx_and_set_colours(segmented_gfx_to_virtual((void*)0x07000358), -0x6A, 255, 255, 255); -} - -void KoopaTroopaBeach::Water() { +void KoopaTroopaBeach::ScrollingTextures() { // clang-format off if (D_8015F8E8 < 0.0f) { if (D_8015F8E4 < -20.0f) { D_8015F8E8 *= -1.0f; } @@ -281,4 +285,45 @@ void KoopaTroopaBeach::Water() { } +void KoopaTroopaBeach::DrawWater(struct UnkStruct_800DC5EC* screen, uint16_t pathCounter, uint16_t cameraRot, uint16_t playerDirection) { + Mat4 matrix; + Vec3f vector; + + gDPPipeSync(gDisplayListHead++); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); + gDPSetBlendMask(gDisplayListHead++, 0xFF); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + + switch (pathCounter) { + case 22: + case 23: + case 29: + case 30: + case 31: + case 37: + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); + // d_course_koopa_troopa_beach_packed_dl_9E70 + gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual((void*)0x07009E70)); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); + break; + } + vector[0] = 0.0f; + vector[1] = D_8015F8E4; + vector[2] = 0.0f; + mtxf_translate(matrix, vector); + render_set_position(matrix, 0); + + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); + gDPSetBlendMask(gDisplayListHead++, 0xFF); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); + render_course_segments((const char**)koopa_troopa_beach_dls2, screen); + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 1, 1, G_OFF); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); + gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); + gDPPipeSync(gDisplayListHead++); +} + void KoopaTroopaBeach::Destroy() {} |
