add dks_jungle_parkway (#50)

* add dks_jungle_parkway

* correct value

---------

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
This commit is contained in:
coco875
2024-08-14 06:29:32 +02:00
committed by GitHub
parent 177504c495
commit 33154e1d32
25 changed files with 1049 additions and 18309 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
#include <actors.h>
#include <libultra/gbi.h>
#include <main.h>
#include "courses/dks_jungle_parkway/course_data.h"
#include <assets/dks_jungle_parkway_data.h>
/**
* @brief Renders the kiwano fruit actor.
+1
View File
@@ -5,6 +5,7 @@
#include "main.h"
#include "actors.h"
#include "courses/all_course_data.h"
#include <assets/dks_jungle_parkway_data.h>
#include <libultra/gbi.h>
/**
+1
View File
@@ -7,6 +7,7 @@
#include <assets/kalimari_desert_data.h>
#include <assets/moo_moo_farm_data.h>
#include <assets/choco_mountain_data.h>
#include <assets/dks_jungle_parkway_data.h>
#include <assets/wario_stadium_data.h>
#include <assets/bowsers_castle_data.h>
#include <assets/frappe_snowland_data.h>
+1
View File
@@ -74,6 +74,7 @@ GameEngine::GameEngine() {
loader->RegisterResourceFactory(std::make_shared<MK64::ResourceFactoryBinaryTrackSectionsV0>(), RESOURCE_FORMAT_BINARY, "TrackSections", static_cast<uint32_t>(MK64::ResourceType::TrackSection), 0);
loader->RegisterResourceFactory(std::make_shared<MK64::ResourceFactoryBinaryTrackWaypointsV0>(), RESOURCE_FORMAT_BINARY, "Waypoints", static_cast<uint32_t>(MK64::ResourceType::Waypoints), 0);
loader->RegisterResourceFactory(std::make_shared<MK64::ResourceFactoryBinaryActorSpawnDataV0>(), RESOURCE_FORMAT_BINARY, "SpawnData", static_cast<uint32_t>(MK64::ResourceType::SpawnData), 0);
loader->RegisterResourceFactory(std::make_shared<MK64::ResourceFactoryBinaryActorSpawnDataV0>(), RESOURCE_FORMAT_BINARY, "UnkSpawnData", static_cast<uint32_t>(MK64::ResourceType::UnkSpawnData), 0);
}
@@ -0,0 +1,32 @@
#include "UnkActorSpawnDataFactory.h"
#include "../type/UnkSpawnData.h"
#include "spdlog/spdlog.h"
#include "libultraship/libultra/gbi.h"
#include <common_structs.h>
namespace MK64 {
std::shared_ptr<Ship::IResource> ResourceFactoryBinaryUnkActorSpawnDataV0::ReadResource(std::shared_ptr<Ship::File> file) {
if (!FileHasValidFormatAndReader(file)) {
return nullptr;
}
auto section = std::make_shared<UnkActorSpawn>(file->InitData);
auto reader = std::get<std::shared_ptr<Ship::BinaryReader>>(file->Reader);
uint32_t count = reader->ReadUInt32();
section->UnkActorSpawnDataList.reserve(count);
for (uint32_t i = 0; i < count; i++) {
UnkActorSpawnData data;
data.pos[0] = reader->ReadInt16();
data.pos[1] = reader->ReadInt16();
data.pos[2] = reader->ReadInt16();
data.someId = reader->ReadInt16();
data.unk8 = reader->ReadInt16();
section->UnkActorSpawnDataList.push_back(data);
}
return section;
}
}
@@ -0,0 +1,12 @@
#pragma once
#include "Resource.h"
#include "ResourceFactoryBinary.h"
namespace MK64 {
class ResourceFactoryBinaryUnkActorSpawnDataV0 : public Ship::ResourceFactoryBinary {
public:
std::shared_ptr<Ship::IResource> ReadResource(std::shared_ptr<Ship::File> file) override;
};
} // namespace LUS
+1
View File
@@ -28,6 +28,7 @@ namespace MK64 {
Waypoints = 0x57505453, // WPTS
Metadata = 0x4D444154, // MDAT
SpawnData = 0x53444154, // SDAT
UnkSpawnData = 0x55534454, // USDT
KartAI = 0x44424856, // DBHV
};
}
+15
View File
@@ -0,0 +1,15 @@
#include "UnkSpawnData.h"
#include "libultraship/libultra/gbi.h"
namespace MK64 {
UnkActorSpawn::UnkActorSpawn() : Resource(std::shared_ptr<Ship::ResourceInitData>()) {
}
UnkActorSpawnData* UnkActorSpawn::GetPointer() {
return UnkActorSpawnDataList.data();
}
size_t UnkActorSpawn::GetPointerSize() {
return UnkActorSpawnDataList.size() * sizeof(UnkActorSpawnData);
}
} // namespace LUS
+28
View File
@@ -0,0 +1,28 @@
#pragma once
#include "resource/Resource.h"
#include <vector>
#include <libultra/gbi.h>
#include <common_structs.h>
struct UnkActorSpawnData {
/* 0x00 */ Vec3s pos;
// Techinically only the bottom byte of someId is the "id". The top byte is used for flags.
/* 0x06 */ s16 someId;
// Stores the tree's original Y position.
/* 0x08 */ s16 unk8;
};
namespace MK64 {
class UnkActorSpawn : public Ship::Resource<UnkActorSpawnData> {
public:
using Resource::Resource;
UnkActorSpawn();
UnkActorSpawnData* GetPointer() override;
size_t GetPointerSize() override;
std::vector<UnkActorSpawnData> UnkActorSpawnDataList;
};
} // namespace LUS
+4 -3
View File
@@ -29,6 +29,7 @@
#include <assets/other_textures.h>
#include <assets/mario_raceway_data.h>
#include <assets/luigi_raceway_data.h>
#include <assets/dks_jungle_parkway_data.h>
#include <assets/wario_stadium_data.h>
#include <assets/frappe_snowland_data.h>
@@ -543,7 +544,7 @@ void render_cows(Camera *camera, Mat4 arg1, UNUSED struct Actor *actor) {
void evaluate_collision_player_palm_trees(Player *player) {
Vec3f pos;
struct UnkActorSpawnData *data = d_course_dks_jungle_parkway_tree_spawn;
struct UnkActorSpawnData *data = (struct UnkActorSpawnData *) LOAD_ASSET(d_course_dks_jungle_parkway_tree_spawn);
while (data->pos[0] != END_OF_SPAWN_DATA) {
pos[0] = data->pos[0] * gCourseDirection;
@@ -576,7 +577,7 @@ void evaluate_collision_players_palm_trees(void) {
}
void func_80298D10(void) {
struct UnkActorSpawnData *temp_v1 = d_course_dks_jungle_parkway_tree_spawn;
struct UnkActorSpawnData *temp_v1 = (struct UnkActorSpawnData *) LOAD_ASSET(d_course_dks_jungle_parkway_tree_spawn);
while (temp_v1->pos[0] != END_OF_SPAWN_DATA) {
temp_v1->pos[1] = temp_v1->unk8;
@@ -586,7 +587,7 @@ void func_80298D10(void) {
}
void render_palm_trees(Camera *camera, Mat4 arg1, UNUSED struct Actor *actor) {
struct UnkActorSpawnData *var_s1 = d_course_dks_jungle_parkway_tree_spawn;
struct UnkActorSpawnData *var_s1 = (struct UnkActorSpawnData *) LOAD_ASSET(d_course_dks_jungle_parkway_tree_spawn);
UNUSED s32 pad;
Vec3f spD4;
f32 var_f22;
+10 -6
View File
@@ -18,6 +18,10 @@
#include "courses/all_course_model.h"
#include "defines.h"
#include <assets/dks_jungle_parkway_displaylists.h>
#include <assets/dks_jungle_parkway_vertices.h>
#include <assets/dks_jungle_parkway_data.h>
#include <assert.h>
#include <course_offsets.h>
@@ -1562,12 +1566,12 @@ NewCourseTable gNewCourseTable[] = {
.displaylists = d_course_double_deck_packed_dls,
.dlSize = 234
}, { // dk jungle
.data = NULL,
.vtx = NULL,
.vtxSize = 0,
.textures = NULL,
.displaylists = NULL,
.dlSize = 0
.data = d_course_dks_jungle_parkway_dl_0,
.vtx = d_course_dks_jungle_parkway_vertex,
.vtxSize = 5679,
.textures = dks_jungle_parkway_textures,
.displaylists = d_course_dks_jungle_parkway_packed_dls,
.dlSize = 4997
}, { // big donut
.data = d_course_big_donut_dl,
.vtx = d_course_big_donut_vertex,
+45 -42
View File
@@ -32,6 +32,8 @@
#include <assets/moo_moo_farm_displaylists.h>
#include <assets/choco_mountain_data.h>
#include <assets/choco_mountain_displaylists.h>
#include <assets/dks_jungle_parkway_data.h>
#include <assets/dks_jungle_parkway_displaylists.h>
#include <assets/wario_stadium_data.h>
#include <assets/wario_stadium_displaylists.h>
#include <assets/bowsers_castle_data.h>
@@ -401,46 +403,46 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 playerId) {
if (pathCounter < 17) {
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
// d_course_dks_jungle_parkway_packed_dl_3E40
gSPDisplayList(gDisplayListHead++, 0x07003E40);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003E40));
// d_course_dks_jungle_parkway_packed_dl_3EB0
gSPDisplayList(gDisplayListHead++, 0x07003EB0);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003EB0));
if ((pathCounter >= 6) && (pathCounter < 13)) {
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
// d_course_dks_jungle_parkway_packed_dl_3DD0
gSPDisplayList(gDisplayListHead++, 0x07003DD0);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003DD0));
}
} else if ((pathCounter == 21) || (pathCounter == 22)) {
if (playerDirection == 3) {
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
// d_course_dks_jungle_parkway_packed_dl_36A8
gSPDisplayList(gDisplayListHead++, 0x070036A8);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x070036A8));
}
if ((playerDirection == 1) || (playerDirection == 0)) {
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
// d_course_dks_jungle_parkway_packed_dl_36A8
gSPDisplayList(gDisplayListHead++, 0x070036A8);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x070036A8));
} else {
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
// d_course_dks_jungle_parkway_packed_dl_3F30
gSPDisplayList(gDisplayListHead++, 0x07003F30);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003F30));
// d_course_dks_jungle_parkway_packed_dl_36A8
gSPDisplayList(gDisplayListHead++, 0x070036A8);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x070036A8));
}
} else if (pathCounter == 24) {
if ((playerDirection == 0) || (playerDirection == 3)) {
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
// d_course_dks_jungle_parkway_packed_dl_36A8
gSPDisplayList(gDisplayListHead++, 0x070036A8);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x070036A8));
}
} else if (pathCounter == 23) {
if (playerDirection == 3) {
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
// d_course_dks_jungle_parkway_packed_dl_36A8
gSPDisplayList(gDisplayListHead++, 0x070036A8);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x070036A8));
} else if (playerDirection == 0) {
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
// d_course_dks_jungle_parkway_packed_dl_36A8
gSPDisplayList(gDisplayListHead++, 0x070036A8);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x070036A8));
}
}
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
@@ -448,38 +450,38 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 playerId) {
case 5:
if (playerDirection != 3) {
// d_course_dks_jungle_parkway_packed_dl_3DD0
gSPDisplayList(gDisplayListHead++, 0x07003DD0);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003DD0));
}
break;
case 17:
switch (playerDirection) {
case 0:
// d_course_dks_jungle_parkway_packed_dl_3E40
gSPDisplayList(gDisplayListHead++, 0x07003E40);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003E40));
// d_course_dks_jungle_parkway_packed_dl_3EB0
gSPDisplayList(gDisplayListHead++, 0x07003EB0);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003EB0));
break;
case 1:
// d_course_dks_jungle_parkway_packed_dl_3DD0
gSPDisplayList(gDisplayListHead++, 0x07003DD0);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003DD0));
// d_course_dks_jungle_parkway_packed_dl_3E40
gSPDisplayList(gDisplayListHead++, 0x07003E40);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003E40));
// d_course_dks_jungle_parkway_packed_dl_3EB0
gSPDisplayList(gDisplayListHead++, 0x07003EB0);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003EB0));
break;
case 2:
// d_course_dks_jungle_parkway_packed_dl_
gSPDisplayList(gDisplayListHead++, 0x07003E40);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003E40));
// d_course_dks_jungle_parkway_packed_dl_3EB0
gSPDisplayList(gDisplayListHead++, 0x07003EB0);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003EB0));
// d_course_dks_jungle_parkway_packed_dl_3F30
gSPDisplayList(gDisplayListHead++, 0x07003F30);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003F30));
break;
case 3:
// d_course_dks_jungle_parkway_packed_dl_3EB0
gSPDisplayList(gDisplayListHead++, 0x07003EB0);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003EB0));
// d_course_dks_jungle_parkway_packed_dl_3F30
gSPDisplayList(gDisplayListHead++, 0x07003F30);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003F30));
break;
}
break;
@@ -487,49 +489,49 @@ void func_8029122C(struct UnkStruct_800DC5EC *arg0, s32 playerId) {
switch (playerDirection) {
case 0:
// d_course_dks_jungle_parkway_packed_dl_3E40
gSPDisplayList(gDisplayListHead++, 0x07003E40);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003E40));
// d_course_dks_jungle_parkway_packed_dl_3EB0
gSPDisplayList(gDisplayListHead++, 0x07003EB0);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003EB0));
break;
case 1:
// d_course_dks_jungle_parkway_packed_dl_3DD0
gSPDisplayList(gDisplayListHead++, 0x07003DD0);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003DD0));
// d_course_dks_jungle_parkway_packed_dl_3E40
gSPDisplayList(gDisplayListHead++, 0x07003E40);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003E40));
// d_course_dks_jungle_parkway_packed_dl_3EB0
gSPDisplayList(gDisplayListHead++, 0x07003EB0);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003EB0));
break;
case 2:
// d_course_dks_jungle_parkway_packed_dl_3E40
gSPDisplayList(gDisplayListHead++, 0x07003E40);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003E40));
// d_course_dks_jungle_parkway_packed_dl_3EB0
gSPDisplayList(gDisplayListHead++, 0x07003EB0);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003EB0));
break;
}
break;
case 21:
if ((playerDirection == 0) || (playerDirection == 1)) {
// d_course_dks_jungle_parkway_packed_dl_3E40
gSPDisplayList(gDisplayListHead++, 0x07003E40);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003E40));
// d_course_dks_jungle_parkway_packed_dl_3EB0
gSPDisplayList(gDisplayListHead++, 0x07003EB0);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003EB0));
// d_course_dks_jungle_parkway_packed_dl_3F30
gSPDisplayList(gDisplayListHead++, 0x07003F30);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003F30));
} else {
// d_course_dks_jungle_parkway_packed_dl_3EB0
gSPDisplayList(gDisplayListHead++, 0x07003EB0);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003EB0));
}
break;
case 22:
if (playerDirection == 0) {
// d_course_dks_jungle_parkway_packed_dl_3F30
gSPDisplayList(gDisplayListHead++, 0x07003F30);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003F30));
}
break;
case 23:
if (playerDirection != 1) {
// d_course_dks_jungle_parkway_packed_dl_3F30
gSPDisplayList(gDisplayListHead++, 0x07003F30);
gSPDisplayList(gDisplayListHead++, segmented_gfx_to_virtual(0x07003F30));
}
break;
}
@@ -1235,7 +1237,7 @@ void render_dks_jungle_parkway(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_dks_jungle_parkway_packed_dl_92D8
gSPDisplayList(gDisplayListHead++, ((uintptr_t)0x070092D8));
gSPDisplayList(gDisplayListHead++, ((uintptr_t)segmented_gfx_to_virtual(0x070092D8)));
}
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
@@ -1657,7 +1659,8 @@ void func_80295D88(void) {
D_8015F8E4 = gCourseMinY - 10.0f;
break;
case COURSE_DK_JUNGLE:
parse_course_displaylists((uintptr_t) d_course_dks_jungle_parkway_addr);
TrackSectionsI *section18 = (TrackSectionsI *) LOAD_ASSET(d_course_dks_jungle_parkway_addr);
parse_course_displaylists(section18);
func_80295C6C();
D_8015F8E4 = -475.0f;
// d_course_dks_jungle_parkway_packed_dl_3FA8
@@ -1738,21 +1741,21 @@ void func_802966A0(void) {
D_802B87BC = 0;
}
// d_course_dks_jungle_parkway_packed_dl_3DD0
find_and_set_tile_size((uintptr_t)0x07003DD0, 0, D_802B87BC);
find_and_set_tile_size((uintptr_t)segmented_gfx_to_virtual(0x07003DD0), 0, D_802B87BC);
// d_course_dks_jungle_parkway_packed_dl_3E40
find_and_set_tile_size((uintptr_t)0x07003E40, 0, D_802B87BC);
find_and_set_tile_size((uintptr_t)segmented_gfx_to_virtual(0x07003E40), 0, D_802B87BC);
// d_course_dks_jungle_parkway_packed_dl_3EB0
find_and_set_tile_size((uintptr_t)0x07003EB0, 0, D_802B87BC);
find_and_set_tile_size((uintptr_t)segmented_gfx_to_virtual(0x07003EB0), 0, D_802B87BC);
// d_course_dks_jungle_parkway_packed_dl_3F30
find_and_set_tile_size((uintptr_t)0x07003F30, 0, D_802B87BC);
find_and_set_tile_size((uintptr_t)segmented_gfx_to_virtual(0x07003F30), 0, D_802B87BC);
// d_course_dks_jungle_parkway_packed_dl_36A8
find_and_set_tile_size((uintptr_t)0x070036A8, 0, D_802B87BC);
find_and_set_tile_size((uintptr_t)segmented_gfx_to_virtual(0x070036A8), 0, D_802B87BC);
D_802B87C4 -= 20;
if (D_802B87C4 < 0) {
D_802B87C4 = 0xFF;
}
// d_course_dks_jungle_parkway_packed_dl_9880
find_and_set_tile_size((uintptr_t)0x07009880, 0, D_802B87C4);
find_and_set_tile_size((uintptr_t)segmented_gfx_to_virtual(0x07009880), 0, D_802B87C4);
evaluate_collision_players_palm_trees();
break;
}