3#include "game/kart/KartParamFileManager.hh"
7KartParam::KartParam(Character character, Vehicle vehicle, u8 playerIdx) {
8 initStats(character, vehicle);
10 m_playerIdx = playerIdx;
11 m_isBike = vehicle >= Vehicle::Standard_Bike_S;
13 initBikeDispParams(vehicle);
15 initKartDispParams(vehicle);
18 initCameraParams(character);
21KartParam::~KartParam() =
default;
24void KartParam::initStats(Character character, Vehicle vehicle) {
25 auto *fileManager = KartParamFileManager::Instance();
27 auto vehicleStream = fileManager->getVehicleStream(vehicle);
28 auto driverStream = fileManager->getDriverStream(character);
30 m_stats =
Stats(vehicleStream);
31 m_stats.applyCharacterBonus(driverStream);
34void KartParam::initBikeDispParams(Vehicle vehicle) {
35 auto *fileManager = KartParamFileManager::Instance();
37 auto dispParamsStream = fileManager->getBikeDispParamsStream(vehicle);
38 m_bikeDisp =
BikeDisp(dispParamsStream);
41void KartParam::initKartDispParams(Vehicle vehicle) {
42 auto *fileManager = KartParamFileManager::Instance();
44 auto dispParamsStream = fileManager->getKartDispParamsStream(vehicle);
45 m_kartDisp =
KartDisp(dispParamsStream);
48void KartParam::initHitboxes(Vehicle vehicle) {
49 auto *fileManager = KartParamFileManager::Instance();
51 auto hitboxStream = fileManager->getHitboxStream(vehicle);
52 m_bsp = BSP(hitboxStream);
55void KartParam::initCameraParams(Character character) {
56 auto *fileManager = KartParamFileManager::Instance();
58 auto cameraStream = fileManager->getKartCameraStream(character);
62KartParam::BikeDisp::BikeDisp() =
default;
64KartParam::BikeDisp::BikeDisp(EGG::RamStream &stream) {
68void KartParam::BikeDisp::read(EGG::RamStream &stream) {
69 m_cameraDistY = stream.read_f32();
71 m_handlePos.read(stream);
72 m_handleRot.read(stream);
75KartParam::KartDisp::KartDisp() =
default;
77KartParam::KartDisp::KartDisp(EGG::RamStream &stream) {
81void KartParam::KartDisp::read(EGG::RamStream &stream) {
82 m_cameraDistY = stream.read_f32();
85KartParam::Stats::Stats() =
default;
87KartParam::Stats::Stats(EGG::RamStream &stream) {
94 body =
static_cast<Body>(stream.read_s32());
95 driftType =
static_cast<DriftType>(stream.read_s32());
96 weightClass =
static_cast<WeightClass
>(stream.read_s32());
97 _00c = stream.read_f32();
98 weight = stream.read_f32();
99 bumpDeviationLevel = stream.read_f32();
100 speed = stream.read_f32();
102 tilt = stream.read_f32();
103 accelerationStandardA[0] = stream.read_f32();
104 accelerationStandardA[1] = stream.read_f32();
105 accelerationStandardA[2] = stream.read_f32();
106 accelerationStandardA[3] = stream.read_f32();
107 accelerationStandardT[0] = stream.read_f32();
108 accelerationStandardT[1] = stream.read_f32();
109 accelerationStandardT[2] = stream.read_f32();
110 accelerationDriftA[0] = stream.read_f32();
111 accelerationDriftA[1] = stream.read_f32();
112 accelerationDriftT[0] = stream.read_f32();
119 driftOutsideTargetAngle = stream.read_f32();
120 driftOutsideDecrement = stream.read_f32();
123 for (
size_t i = 0; i <
kclSpeed.size(); ++i) {
126 for (
size_t i = 0; i <
kclRot.size(); ++i) {
127 kclRot[i] = stream.read_f32();
134 maxNormalAcceleration = stream.read_f32();
135 megaScale = stream.read_f32();
136 shrinkScale = stream.read_f32();
143 weight += stream.read_f32();
146 speed += stream.read_f32();
150 accelerationStandardA[0] += stream.read_f32();
151 accelerationStandardA[1] += stream.read_f32();
152 accelerationStandardA[2] += stream.read_f32();
153 accelerationStandardA[3] += stream.read_f32();
154 accelerationStandardA[0] += stream.read_f32();
155 accelerationStandardA[1] += stream.read_f32();
156 accelerationStandardA[2] += stream.read_f32();
157 accelerationDriftA[0] += stream.read_f32();
158 accelerationDriftA[1] += stream.read_f32();
159 accelerationDriftT[0] += stream.read_f32();
166 driftOutsideTargetAngle += stream.read_f32();
167 driftOutsideDecrement += stream.read_f32();
170 for (
size_t i = 0; i <
kclSpeed.size(); ++i) {
174 for (
size_t i = 0; i <
kclRot.size(); ++i) {
175 kclRot[i] += stream.read_f32();
186 initialYPos = stream.read_f32();
188 for (
auto &hitbox : hitboxes) {
189 hitbox.enable = stream.read_u16();
191 hitbox.position.read(stream);
192 hitbox.radius = stream.read_f32();
193 hitbox.wallsOnly = stream.read_u16();
194 hitbox.tireCollisionIdx = stream.read_u16();
197 cuboids[0].read(stream);
198 cuboids[1].read(stream);
199 angVel0Factor = stream.read_f32();
200 _1a0 = stream.read_f32();
202 for (
auto &wheel : wheels) {
203 wheel.enable = stream.read_u16();
205 wheel.springStiffness = stream.read_f32();
206 wheel.dampingFactor = stream.read_f32();
207 wheel.maxTravel = stream.read_f32();
208 wheel.relPosition.read(stream);
209 wheel.xRot = stream.read_f32();
210 wheel.wheelRadius = stream.read_f32();
211 wheel.sphereRadius = stream.read_f32();
212 wheel._28 = stream.read_u32();
215 rumbleHeight = stream.read_f32();
216 rumbleSpeed = stream.read_f32();
219KartParam::KartCameraParam::KartCameraParam() =
default;
221KartParam::KartCameraParam::KartCameraParam(EGG::RamStream &stream) {
225void KartParam::KartCameraParam::read(EGG::RamStream &stream) {
226 fov = stream.read_f32();
227 dist = stream.read_f32();
228 posY = stream.read_f32();
229 targetPosY = stream.read_f32();
A stream of data stored in memory.
Pertains to kart-related functionality.
Various character/vehicle-related handling and speed stats.
std::array< f32, 32 > kclSpeed
Speed multipliers, indexed using KCL attributes.
f32 speed
Base full speed of the character/vehicle combo.
void read(EGG::RamStream &stream)
Parses out the stats for a given KartParam.bin stream.
f32 driftReactivity
A weight applied to turn radius when drifting.
std::array< f32, 32 > kclRot
Rotation scalars, indexed using KCL attributes.
f32 weight
Contrary to popular belief, this does not affect gravity.
f32 driftManualTightness
Affects turn radius when manual drifting.
void applyCharacterBonus(EGG::RamStream &stream)
Applies character stats on top of the kart stats.
DriftType
The type of drift (inside/outside).
u32 miniTurbo
The framecount duration of a charged mini-turbo.
f32 driftAutomaticTightness
Affects turn radius when automatic drifting.
f32 handlingManualTightness
Affects turn radius when manual and not drifting.
Body
The body style of the vehicle. Basically the number of wheels.
f32 handlingAutomaticTightness
Affects turn radius when auto and not drifting.
f32 turningSpeed
Speed decrement percentage of the vehicle when handling.
f32 handlingReactivity
A weight applied to turn radius when not drifting.