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);
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);
59 m_camera = KartCameraParam(cameraStream);
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();
101 turningSpeed = 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();
113 handlingManualTightness = stream.read_f32();
114 handlingAutomaticTightness = stream.read_f32();
115 handlingReactivity = stream.read_f32();
116 driftManualTightness = stream.read_f32();
117 driftAutomaticTightness = stream.read_f32();
118 driftReactivity = stream.read_f32();
119 driftOutsideTargetAngle = stream.read_f32();
120 driftOutsideDecrement = stream.read_f32();
121 miniTurbo = stream.read_u32();
123 for (
size_t i = 0; i < kclSpeed.size(); ++i) {
124 kclSpeed[i] = stream.read_f32();
126 for (
size_t i = 0; i < kclRot.size(); ++i) {
127 kclRot[i] = stream.read_f32();
130 itemUnk170 = stream.read_f32();
131 itemUnk174 = stream.read_f32();
132 itemUnk178 = stream.read_f32();
133 itemUnk17c = 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();
147 turningSpeed += 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();
160 handlingManualTightness += stream.read_f32();
161 handlingAutomaticTightness += stream.read_f32();
162 handlingReactivity += stream.read_f32();
163 driftManualTightness += stream.read_f32();
164 driftAutomaticTightness += stream.read_f32();
165 driftReactivity += stream.read_f32();
166 driftOutsideTargetAngle += stream.read_f32();
167 driftOutsideDecrement += stream.read_f32();
168 miniTurbo += stream.read_u32();
170 for (
size_t i = 0; i < kclSpeed.size(); ++i) {
171 kclSpeed[i] += stream.read_f32();
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.
void read(EGG::RamStream &stream)
Parses out the stats for a given KartParam.bin stream.
void applyCharacterBonus(EGG::RamStream &stream)
Applies character stats on top of the kart stats.
DriftType
The type of drift (inside/outside).
Body
The body style of the vehicle. Basically the number of wheels.