From 5226be0a24777756e377ea788369c3d8203ea014 Mon Sep 17 00:00:00 2001 From: Eric Ohebshalom Date: Thu, 1 Oct 2026 19:28:47 -0400 Subject: [PATCH 1/3] mkw: Decompile KartSettings constructor --- src/kart/KartSettings.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/kart/KartSettings.cpp b/src/kart/KartSettings.cpp index 7440a777..de824547 100644 --- a/src/kart/KartSettings.cpp +++ b/src/kart/KartSettings.cpp @@ -1 +1,38 @@ #include "KartSettings.hpp" + +#include + +// https://decomp.me/scratch/xVuXe +extern "C" Kart::KartSettings* __ct__Q24Kart12KartSettingsFv( + Kart::KartSettings* self, + s8 playerIdx, + System::VehicleId vehicle, + System::CharacterId character, + u32 isBike, + Kart::KartParam* kartParam, + void* arg6, + KartDriverDispParams* kartDriverDispParams, + KartPartsDispParams* kartPartsDispParams, + BikePartsDispParams* bikePartsDispParams, + DriverDispParams* driverDispParams) { + self->isBike = isBike; + self->vehicle = vehicle; + self->character = character; + self->playerIdx = playerIdx; + self->kartParam = kartParam; + self->_18 = arg6; + self->kartDriverDispParams = kartDriverDispParams; + self->kartPartsDispParams = kartPartsDispParams; + self->bikePartsDispParams = bikePartsDispParams; + self->driverDispParams = driverDispParams; + self->gpStats = nullptr; + self->raceStats = nullptr; + + if (System::RaceConfig::spInstance->mRaceScenario.mPlayers[(u8)playerIdx].mPlayerType == 0) { + self->raceStats = (Kart::RaceStats*)operator new(0x14); + if (System::RaceConfig::spInstance->mRaceScenario.mSettings.mGameMode == 0) { + self->gpStats = (Kart::GpStats*)operator new(0x1c); + } + } + return self; +} From 6275a2ffcfc3fee892fee429943b8a3fbbbee0c8 Mon Sep 17 00:00:00 2001 From: Eric Ohebshalom Date: Thu, 1 Oct 2026 21:06:22 -0400 Subject: [PATCH 2/3] mkw: Address review comments on KartSettings constructor --- config/RMCP01/module/symbols.txt | 2 +- src/kart/KartSettings.cpp | 45 +++++++++++++++++--------------- src/kart/KartSettings.hpp | 12 ++++++++- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/config/RMCP01/module/symbols.txt b/config/RMCP01/module/symbols.txt index ec6212fa..3c805694 100644 --- a/config/RMCP01/module/symbols.txt +++ b/config/RMCP01/module/symbols.txt @@ -3056,7 +3056,7 @@ KartPart_vf_2c = .text:0x80592E5C; // type:function size:0x84 scope:global align fn_1_82B2C = .text:0x80592EE0; // type:function size:0x6C fn_1_82B98 = .text:0x80592F4C; // type:function size:0x5C initPlayerTypeTemporaries = .text:0x80592FA8; // type:function size:0x18 scope:global align:4 -__ct__Q24Kart12KartSettingsFv = .text:0x80592FC0; // type:function size:0xCC scope:global align:4 +__ct__Q24Kart12KartSettingsFScQ26System9VehicleIdQ26System11CharacterIdUlPQ24Kart9KartParamPvP20KartDriverDispParamsP19KartPartsDispParamsP19BikePartsDispParamsP16DriverDispParams = .text:0x80592FC0; // type:function size:0xCC scope:global align:4 fn_1_82CD8 = .text:0x8059308C; // type:function size:0x58 fn_1_82D30 = .text:0x805930E4; // type:function size:0x40 fn_1_82D70 = .text:0x80593124; // type:function size:0x4 diff --git a/src/kart/KartSettings.cpp b/src/kart/KartSettings.cpp index de824547..4ff935d6 100644 --- a/src/kart/KartSettings.cpp +++ b/src/kart/KartSettings.cpp @@ -2,37 +2,40 @@ #include -// https://decomp.me/scratch/xVuXe -extern "C" Kart::KartSettings* __ct__Q24Kart12KartSettingsFv( - Kart::KartSettings* self, +namespace Kart { + +KartSettings::KartSettings( s8 playerIdx, System::VehicleId vehicle, System::CharacterId character, u32 isBike, - Kart::KartParam* kartParam, + KartParam* kartParam, void* arg6, KartDriverDispParams* kartDriverDispParams, KartPartsDispParams* kartPartsDispParams, BikePartsDispParams* bikePartsDispParams, DriverDispParams* driverDispParams) { - self->isBike = isBike; - self->vehicle = vehicle; - self->character = character; - self->playerIdx = playerIdx; - self->kartParam = kartParam; - self->_18 = arg6; - self->kartDriverDispParams = kartDriverDispParams; - self->kartPartsDispParams = kartPartsDispParams; - self->bikePartsDispParams = bikePartsDispParams; - self->driverDispParams = driverDispParams; - self->gpStats = nullptr; - self->raceStats = nullptr; + this->isBike = isBike; + this->vehicle = vehicle; + this->character = character; + this->playerIdx = playerIdx; + this->kartParam = kartParam; + this->_18 = arg6; + this->kartDriverDispParams = kartDriverDispParams; + this->kartPartsDispParams = kartPartsDispParams; + this->bikePartsDispParams = bikePartsDispParams; + this->driverDispParams = driverDispParams; + this->gpStats = nullptr; + this->raceStats = nullptr; - if (System::RaceConfig::spInstance->mRaceScenario.mPlayers[(u8)playerIdx].mPlayerType == 0) { - self->raceStats = (Kart::RaceStats*)operator new(0x14); - if (System::RaceConfig::spInstance->mRaceScenario.mSettings.mGameMode == 0) { - self->gpStats = (Kart::GpStats*)operator new(0x1c); + if (System::RaceConfig::spInstance->mRaceScenario.mPlayers[(u8)playerIdx].mPlayerType == + System::RaceConfig::Player::TYPE_REAL_LOCAL) { + this->raceStats = (RaceStats*)operator new(0x14); + if (System::RaceConfig::spInstance->mRaceScenario.mSettings.mGameMode == + System::RaceConfig::Settings::GAMEMODE_GRAND_PRIX) { + this->gpStats = (GpStats*)operator new(0x1c); } } - return self; } + +} // namespace Kart diff --git a/src/kart/KartSettings.hpp b/src/kart/KartSettings.hpp index 191600c1..8d24c7a8 100644 --- a/src/kart/KartSettings.hpp +++ b/src/kart/KartSettings.hpp @@ -12,7 +12,17 @@ class GpStats; class RaceStats; class KartSettings { public: - KartSettings(); + KartSettings( + s8 playerIdx, + System::VehicleId vehicle, + System::CharacterId character, + u32 isBike, + KartParam* kartParam, + void* arg6, + KartDriverDispParams* kartDriverDispParams, + KartPartsDispParams* kartPartsDispParams, + BikePartsDispParams* bikePartsDispParams, + DriverDispParams* driverDispParams); u32 isBike; System::VehicleId vehicle; From 2d375809e2f50fd69ef0d83764b170ee76bec996 Mon Sep 17 00:00:00 2001 From: Eric Ohebshalom Date: Thu, 1 Oct 2026 22:17:40 -0400 Subject: [PATCH 3/3] Use constructors for RaceStats and GpStats --- src/kart/KartSettings.cpp | 4 ++-- src/kart/KartSettings.hpp | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/kart/KartSettings.cpp b/src/kart/KartSettings.cpp index 4ff935d6..21586035 100644 --- a/src/kart/KartSettings.cpp +++ b/src/kart/KartSettings.cpp @@ -30,10 +30,10 @@ KartSettings::KartSettings( if (System::RaceConfig::spInstance->mRaceScenario.mPlayers[(u8)playerIdx].mPlayerType == System::RaceConfig::Player::TYPE_REAL_LOCAL) { - this->raceStats = (RaceStats*)operator new(0x14); + this->raceStats = new RaceStats; if (System::RaceConfig::spInstance->mRaceScenario.mSettings.mGameMode == System::RaceConfig::Settings::GAMEMODE_GRAND_PRIX) { - this->gpStats = (GpStats*)operator new(0x1c); + this->gpStats = new GpStats; } } } diff --git a/src/kart/KartSettings.hpp b/src/kart/KartSettings.hpp index 8d24c7a8..ac43edf9 100644 --- a/src/kart/KartSettings.hpp +++ b/src/kart/KartSettings.hpp @@ -8,8 +8,14 @@ #include "KartDispParams.hpp" namespace Kart { -class GpStats; -class RaceStats; +class RaceStats { + u8 _unk[0x14]; +}; + +class GpStats { + u8 _unk[0x1c]; +}; + class KartSettings { public: KartSettings(