mirror of
https://github.com/n64decomp/mk64
synced 2026-05-23 22:45:21 -04:00
Steering (#761)
* Document steering * Refer to steering position, instead of steering angle Refer to steering position instead of steering angle, to make clear that it is not the same thing as degrees. * Change comment to block format
This commit is contained in:
@@ -275,12 +275,12 @@ typedef struct {
|
||||
/* 0x0074 */ f32 unk_074;
|
||||
/* 0x0078 */ s16 unk_078;
|
||||
/* 0x007A */ s16 unk_07A;
|
||||
/* 0x007C */ s32 unk_07C;
|
||||
/* 0x007C */ s32 steerPosition; // Where the kart is steering, related to joystick position. Basically, in [-53 to 53], but shifted 16 bits left
|
||||
/* 0x0080 */ f32 boostPower;
|
||||
/* 0x0084 */ f32 unk_084;
|
||||
/* 0x0088 */ f32 unk_088;
|
||||
/* 0x008C */ f32 unk_08C;
|
||||
/* 0x0090 */ f32 unk_090;
|
||||
/* 0x0090 */ f32 unk_090; // related to sideways velocity (e.g. sliding while turning)
|
||||
/* 0x0094 */ f32 speed;
|
||||
/* 0x0098 */ f32 unk_098;
|
||||
/* 0x009C */ f32 currentSpeed;
|
||||
@@ -314,7 +314,7 @@ typedef struct {
|
||||
/* 0x00F0 */ f32 kartHopJerk;
|
||||
/* 0x00F4 */ f32 kartHopAcceleration;
|
||||
/* 0x00F8 */ u16 surfaceType;
|
||||
/* 0x00FA */ s16 unk_0FA;
|
||||
/* 0x00FA */ s16 steerPositionDelta;
|
||||
/* 0x00FC */ f32 kartFriction;
|
||||
/* 0x0100 */ f32 kartGravity;
|
||||
/* 0x0104 */ f32 unk_104;
|
||||
@@ -327,7 +327,7 @@ typedef struct {
|
||||
/* 0x0198 */ KartTyre tyres[4];
|
||||
/* 0x01F8 */ f32 unk_1F8;
|
||||
/* 0x01FC */ f32 unk_1FC;
|
||||
/* 0x0200 */ u32 unk_200; // May be s32. but less casting required if u32
|
||||
/* 0x0200 */ u32 steerChangeIncrement; // May be s32. but less casting required if u32
|
||||
/* 0x0204 */ s16 driftDuration;
|
||||
/* 0x0206 */ s16 unk_206;
|
||||
/* 0x0208 */ f32 unk_208;
|
||||
|
||||
@@ -43,7 +43,7 @@ void cpu_behaviour_start(s32 playerId, Player* player) {
|
||||
gCurrentCPUBehaviourId[playerId]++;
|
||||
switch (behaviourType) {
|
||||
case BEHAVIOUR_1:
|
||||
func_80011EC0(playerId, player, player->unk_07C >> 0x10, playerPathPoint);
|
||||
func_80011EC0(playerId, player, player->steerPosition >> 16, playerPathPoint);
|
||||
break;
|
||||
case BEHAVIOUR_HOP:
|
||||
kart_hop(player);
|
||||
|
||||
+23
-23
@@ -246,7 +246,7 @@ void func_8008C6D0(Player* player, s8 playerIndex) {
|
||||
player->effects = (s32) (player->effects & ~HIT_BY_GREEN_SHELL_EFFECT);
|
||||
player->unk_0A8 = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_236 = 0;
|
||||
player->unk_078 = 0;
|
||||
player->currentSpeed = 0.0f;
|
||||
@@ -271,7 +271,7 @@ void func_8008C73C(Player* player, s8 playerIndex) {
|
||||
|
||||
player->kartGraphics |= WHIRRR;
|
||||
// clang-format off
|
||||
player->unk_0C0 = 0; player->unk_07C = 0; player->unk_078 = 0; player->unk_0AE = player->rotation[1]; player->unk_0B2 = 2;
|
||||
player->unk_0C0 = 0; player->steerPosition = 0; player->unk_078 = 0; player->unk_0AE = player->rotation[1]; player->unk_0B2 = 2;
|
||||
// clang-format on
|
||||
D_80165190[0][playerIndex] = 1;
|
||||
D_80165190[1][playerIndex] = 1;
|
||||
@@ -298,7 +298,7 @@ void func_8008C8C4(Player* player, s8 playerId) {
|
||||
player->effects &= ~DRIVING_SPINOUT_EFFECT;
|
||||
player->unk_0A8 = 0;
|
||||
player->rotation[1] = player->unk_0AE;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->effects &= ~BANANA_NEAR_SPINOUT_EFFECT;
|
||||
|
||||
@@ -381,7 +381,7 @@ void func_8008CDC0(Player* player, s8 playerIndex) {
|
||||
player->unk_0AC = 1;
|
||||
player->effects &= ~DRIFTING_EFFECT;
|
||||
|
||||
if (((player->unk_07C >> 0x10) >= 0x14) || ((player->unk_07C >> 0x10) < -0x13) ||
|
||||
if (((player->steerPosition >> 16) >= 20) || ((player->steerPosition >> 16) <= -20) ||
|
||||
(((player->speed / 18.0f) * 216.0f) <= 30.0f) || ((player->effects & MIDAIR_EFFECT) != 0) ||
|
||||
(((player->type & PLAYER_HUMAN) == 0) && ((player->effects & LOST_RACE_EFFECT) == 0))) {
|
||||
func_8008C73C(player, playerIndex);
|
||||
@@ -568,7 +568,7 @@ void func_8008D570(Player* player, s8 playerIndex) {
|
||||
player->kartHopVelocity = (f32) D_800E3710[player->characterId];
|
||||
player->unk_0B2 = 1;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_078 = 0;
|
||||
D_8018D920[playerIndex] = 0;
|
||||
|
||||
@@ -607,7 +607,7 @@ void func_8008D698(Player* player, s8 playerIndex) {
|
||||
|
||||
void func_8008D760(Player* player) {
|
||||
player->unk_0A8 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->rotation[1] = player->unk_0AE;
|
||||
player->effects &= ~UNKNOWN_EFFECT_0x80000;
|
||||
@@ -628,7 +628,7 @@ void func_8008D7B0(Player* player, s8 playerIndex) {
|
||||
D_8018D920[playerIndex] = 0;
|
||||
player->unk_0B2 = 4;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_078 = 0;
|
||||
|
||||
if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) &&
|
||||
@@ -661,7 +661,7 @@ void func_8008D8B4(Player* player, s8 playerIndex) {
|
||||
|
||||
void func_8008D97C(Player* player) {
|
||||
player->unk_0A8 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->rotation[1] = player->unk_0AE;
|
||||
player->effects &= ~UNKNOWN_EFFECT_0x800000;
|
||||
@@ -725,7 +725,7 @@ void trigger_squish(Player* player, s8 playerIndex) {
|
||||
void apply_hit_effect(Player* player, s8 playerIndex) {
|
||||
player->unk_0C2 = 0;
|
||||
player->unk_0A8 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_08C = 0.0f;
|
||||
player->currentSpeed = 0.0f;
|
||||
@@ -843,7 +843,7 @@ void trigger_lightning_strike(Player* player, s8 playerIndex) {
|
||||
player->unk_0AE = player->rotation[1];
|
||||
player->unk_0B2 = 2;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_078 = 0;
|
||||
|
||||
D_80165190[0][playerIndex] = 1;
|
||||
@@ -870,7 +870,7 @@ void apply_lightning_effect(Player* player, s8 playerIndex) {
|
||||
((player->effects & SQUISH_EFFECT) != SQUISH_EFFECT)) {
|
||||
player->effects &= ~LIGHTNING_STRIKE_EFFECT;
|
||||
player->unk_0A8 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->rotation[1] = player->unk_0AE;
|
||||
remove_lightning_effect(player, playerIndex);
|
||||
@@ -888,7 +888,7 @@ void apply_lightning_effect(Player* player, s8 playerIndex) {
|
||||
if (player->unk_0B2 <= 0) {
|
||||
player->unk_0A8 = 0;
|
||||
player->effects &= ~LIGHTNING_STRIKE_EFFECT;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->rotation[1] = player->unk_0AE;
|
||||
D_80165190[0][playerIndex] = 1;
|
||||
@@ -939,7 +939,7 @@ void func_8008E4A4(Player* player, s8 playerIndex) {
|
||||
player->unk_206 = 0;
|
||||
player->slopeAccel = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_0C2 = 0xF;
|
||||
player->unk_042 += 0xAAA;
|
||||
player->unk_08C = 0.0f;
|
||||
@@ -1053,7 +1053,7 @@ void apply_hit_by_star_effect(Player* player, s8 playerIndex) {
|
||||
player->unk_206 = 0;
|
||||
player->slopeAccel = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_0C2 = 0xF;
|
||||
player->unk_042 += 0xAAA;
|
||||
player->unk_08C /= 2;
|
||||
@@ -1247,7 +1247,7 @@ void func_8008F104(Player* player, s8 playerIndex) {
|
||||
player->unk_0AE = player->rotation[1];
|
||||
player->unk_0B2 = 2;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->effects |= EARLY_START_SPINOUT_EFFECT;
|
||||
player->unk_078 = 0;
|
||||
D_8018D920[playerIndex] = -0x8000;
|
||||
@@ -1314,7 +1314,7 @@ void func_8008F3E0(Player* player) {
|
||||
void func_8008F3F4(Player* player, UNUSED s8 arg1) {
|
||||
player->unk_0A8 += 0x80;
|
||||
player->unk_042 += 0x71C;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->currentSpeed = 0.0f;
|
||||
player->unk_08C /= 2;
|
||||
if (player->unk_0A8 >= 0x2000) {
|
||||
@@ -1364,7 +1364,7 @@ void func_8008F5A4(Player* player, s8 playerIndex) {
|
||||
player->effects &= ~TERRAIN_TUMBLE_EFFECT;
|
||||
player->unk_0A8 = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_236 = 0;
|
||||
player->unk_078 = 0;
|
||||
player->currentSpeed = 0.0f;
|
||||
@@ -1772,7 +1772,7 @@ void func_80090778(Player* player) {
|
||||
s32 playerIndex = get_player_index_for_player(player);
|
||||
|
||||
player->unk_078 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->lakituProps |= LAKITU_SCENE;
|
||||
player->effects &= ~DRIFTING_EFFECT;
|
||||
@@ -1789,7 +1789,7 @@ void func_80090778(Player* player) {
|
||||
if ((player->effects & LIGHTNING_STRIKE_EFFECT) == LIGHTNING_STRIKE_EFFECT) {
|
||||
player->effects &= ~LIGHTNING_STRIKE_EFFECT;
|
||||
player->unk_0A8 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->rotation[1] = player->unk_0AE;
|
||||
}
|
||||
@@ -1802,7 +1802,7 @@ void func_80090868(Player* player) {
|
||||
s32 playerIndex;
|
||||
|
||||
player->unk_078 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_08C = 0.0f;
|
||||
playerIndex = get_player_index_for_player(player);
|
||||
@@ -1842,7 +1842,7 @@ void func_80090970(Player* player, s8 playerId, s8 arg2) {
|
||||
|
||||
player->unk_0C2 = 0x000C;
|
||||
player->unk_078 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_08C = 0.0f;
|
||||
clean_effect(player, playerId);
|
||||
@@ -2032,7 +2032,7 @@ void func_800911B4(Player* player, s8 arg1) {
|
||||
player->kartHopVelocity = 2.6f;
|
||||
player->unk_0B2 = 2;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_078 = 0;
|
||||
D_8018D920[arg1] = 0;
|
||||
|
||||
@@ -2088,7 +2088,7 @@ void func_80091298(Player* player, s8 arg1) {
|
||||
player->pos[1] = (f32) ((f64) (spC[arg1] + player->boundingBoxSize) + 1.08);
|
||||
player->unk_DB4.unk18 = 0;
|
||||
player->unk_0A8 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_DB4.unkC = 3.0f;
|
||||
player->kartProps &= ~UNUSED_0x800;
|
||||
|
||||
+285
-260
@@ -1146,8 +1146,8 @@ void func_8002A79C(Player* player, s8 playerIndex) {
|
||||
}
|
||||
|
||||
void func_8002A8A4(Player* player, s8 playerIndex) {
|
||||
if (((s16) player->unk_0C0 / 182) > 0) {
|
||||
if (((s32) player->unk_07C >> 0x10) < -9) {
|
||||
if (((s16) player->unk_0C0 / DEGREES_CONVERSION_FACTOR) > 0) {
|
||||
if (((s32) player->steerPosition >> 16) <= -10) {
|
||||
if (player->unk_228 < 0x65) {
|
||||
player->unk_228++;
|
||||
}
|
||||
@@ -1167,7 +1167,7 @@ void func_8002A8A4(Player* player, s8 playerIndex) {
|
||||
player->driftState = 0;
|
||||
}
|
||||
}
|
||||
} else if (((s32) player->unk_07C >> 0x10) >= 0xA) {
|
||||
} else if (((s32) player->steerPosition >> 16) >= 10) {
|
||||
if (player->unk_228 < 0x65) {
|
||||
player->unk_228++;
|
||||
}
|
||||
@@ -1310,7 +1310,7 @@ void func_8002AE38(Player* player, s8 arg1, f32 arg2, f32 arg3, f32 arg4, f32 ar
|
||||
if (((player->effects & BANANA_NEAR_SPINOUT_EFFECT) != BANANA_NEAR_SPINOUT_EFFECT) &&
|
||||
((player->effects & DRIFTING_EFFECT) != DRIFTING_EFFECT) && !(player->kartProps & DRIVING_SPINOUT) &&
|
||||
((((player->speed / 18.0f) * 216.0f) <= 8.0f) ||
|
||||
(((player->unk_07C >> 0x10) < 5) && ((player->unk_07C >> 0x10) > -5)))) {
|
||||
(((player->steerPosition >> 16) < 5) && ((player->steerPosition >> 16) > -5)))) {
|
||||
if ((player->effects & AB_SPIN_EFFECT) == AB_SPIN_EFFECT) {
|
||||
player->unk_0C0 = (f32) (player->unk_0C0 - (player->unk_0C0 / 10));
|
||||
} else {
|
||||
@@ -1333,8 +1333,8 @@ void func_8002AE38(Player* player, s8 arg1, f32 arg2, f32 arg3, f32 arg4, f32 ar
|
||||
player->unk_0C0 = (atan2s(arg2 - arg4, arg3 - arg5) - atan2s(arg2 - sp28, arg3 - temp_f16)) * 2;
|
||||
}
|
||||
if (((player->effects & DRIFTING_EFFECT) != DRIFTING_EFFECT) &&
|
||||
((((player->unk_07C >> 0x10) > 0) && (player->unk_0C0 < 0)) ||
|
||||
(((player->unk_07C >> 0x10) < 0) && (player->unk_0C0 > 0)))) {
|
||||
((((player->steerPosition >> 16) > 0) && (player->unk_0C0 < 0)) ||
|
||||
(((player->steerPosition >> 16) < 0) && (player->unk_0C0 > 0)))) {
|
||||
if (player->unk_0C0 > 0) {
|
||||
player->unk_0C0 = player->unk_078 * 0x14;
|
||||
}
|
||||
@@ -1655,7 +1655,7 @@ void func_8002BB9C(Player* player, f32* arg1, f32* arg2, UNUSED s8 arg3, UNUSED
|
||||
return;
|
||||
}
|
||||
|
||||
var_v0 = (player->unk_07C >> 0x10) / 6;
|
||||
var_v0 = (player->steerPosition >> 16) / 6;
|
||||
|
||||
if (var_v0 < 0) {
|
||||
var_v0 *= -1;
|
||||
@@ -1665,7 +1665,7 @@ void func_8002BB9C(Player* player, f32* arg1, f32* arg2, UNUSED s8 arg3, UNUSED
|
||||
var_v0 = 8;
|
||||
}
|
||||
|
||||
if ((player->unk_07C >> 0x10) < 0) {
|
||||
if ((player->steerPosition >> 16) < 0) {
|
||||
player->rotation[1] -= sp30[var_v0];
|
||||
} else {
|
||||
player->rotation[1] += sp30[var_v0];
|
||||
@@ -1673,32 +1673,32 @@ void func_8002BB9C(Player* player, f32* arg1, f32* arg2, UNUSED s8 arg3, UNUSED
|
||||
}
|
||||
|
||||
void func_8002BD58(Player* player) {
|
||||
s32 sp2C[7] = { 0x002f0000, 0x00300000, 0x00310000, 0x00320000, 0x00320000, 0x00320000, 0x00320000 };
|
||||
s32 spC[8] = { 0x00280000, 0x002c0000, 0x00300000, 0x00320000, 0x00320000, 0x00320000, 0x00320000, 0x00320000 };
|
||||
s32 sp2C[7] = { 47 << 16, 48 << 16, 49 << 16, 50 << 16, 50 << 16, 50 << 16, 50 << 16 };
|
||||
s32 spC[8] = { 40 << 16, 44 << 16, 48 << 16, 50 << 16, 50 << 16, 50 << 16, 50 << 16, 50 << 16 };
|
||||
s16 temp_t5;
|
||||
|
||||
if (player->unk_234 >= 0) {
|
||||
if ((player->unk_234 >= 5) && (player->unk_234 < 0x1E)) {
|
||||
player->unk_07C = sp2C[player->unk_234 / 6];
|
||||
if ((player->unk_234 >= 5) && (player->unk_234 < 30)) {
|
||||
player->steerPosition = sp2C[player->unk_234 / 6];
|
||||
}
|
||||
if ((player->unk_234 >= 0x1E) && (player->unk_234 < 0x50)) {
|
||||
player->unk_07C = spC[(s32) (player->unk_234 - 0x1E) / 12];
|
||||
if ((player->unk_234 >= 30) && (player->unk_234 < 80)) {
|
||||
player->steerPosition = spC[(s32) (player->unk_234 - 30) / 12];
|
||||
}
|
||||
if (((player->unk_234 < 0x50) || (player->unk_234 >= 0x5B)) && (player->unk_234 >= 0x5B) &&
|
||||
(player->unk_234 < 0xA1)) {
|
||||
player->unk_07C = spC[1];
|
||||
if (((player->unk_234 < 80) || (player->unk_234 > 90)) && (player->unk_234 > 90) &&
|
||||
(player->unk_234 <= 160)) {
|
||||
player->steerPosition = spC[1];
|
||||
}
|
||||
} else {
|
||||
temp_t5 = -player->unk_234;
|
||||
if ((player->unk_234 < -4) && (player->unk_234 >= -0x1E)) {
|
||||
player->unk_07C = sp2C[temp_t5 / 6] * -1;
|
||||
if ((player->unk_234 < -4) && (player->unk_234 >= -30)) {
|
||||
player->steerPosition = sp2C[temp_t5 / 6] * -1;
|
||||
}
|
||||
if ((player->unk_234 < -0x1E) && (player->unk_234 >= -0x50)) {
|
||||
player->unk_07C = spC[(s32) (temp_t5 - 0x1E) / 12] * -1;
|
||||
if ((player->unk_234 < -30) && (player->unk_234 >= -80)) {
|
||||
player->steerPosition = spC[(s32) (temp_t5 - 30) / 12] * -1;
|
||||
}
|
||||
if (((player->unk_234 >= -0x50) || (player->unk_234 < -0x5A)) && (player->unk_234 < -0x5A) &&
|
||||
(player->unk_234 >= -0xA0)) {
|
||||
player->unk_07C = spC[1] * -1;
|
||||
if (((player->unk_234 >= -80) || (player->unk_234 < -90)) && (player->unk_234 < -90) &&
|
||||
(player->unk_234 >= -160)) {
|
||||
player->steerPosition = spC[1] * -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2093,7 +2093,7 @@ void func_8002D028(Player* player, s8 playerIndex) {
|
||||
player->speed = 0;
|
||||
player->unk_104 = 0;
|
||||
player->tyreSpeed = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->velocity[0] = 0;
|
||||
player->velocity[1] = 0;
|
||||
player->velocity[2] = 0;
|
||||
@@ -2210,7 +2210,7 @@ void func_8002D268(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
||||
if (((player->unk_10C < 3) && (((s32) player->unk_256) < 3)) ||
|
||||
((player->effects & MUSHROOM_EFFECT) == MUSHROOM_EFFECT)) {
|
||||
|
||||
if (((player->unk_07C >> 16) >= 0x28) || ((player->unk_07C >> 16) < (-0x27))) {
|
||||
if (((player->steerPosition >> 16) >= 40) || ((player->steerPosition >> 16) <= -40)) {
|
||||
|
||||
newVelocity[0] += (((((f64) ((sp184[0] + gravityX) + sp160[0])) -
|
||||
(newVelocity[0] * (0.12 * ((f64) player->kartFriction)))) /
|
||||
@@ -3817,21 +3817,25 @@ void func_80033850(Player* arg0, f32 arg1) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_80033884(Player* player, s32* arg1, s32* arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6) {
|
||||
s32 temp_v1;
|
||||
void update_steering_large(Player* player, s32* desired_steering_change, s32* current_steering, s32 desired_steering, s32 steering_change_threshold, s32 steering_change_minimum, s32 arg6) {
|
||||
s32 current_steering_change_increment;
|
||||
|
||||
if ((*arg1 >= arg4) || (-arg4 >= *arg1)) {
|
||||
temp_v1 = player->unk_200;
|
||||
player->unk_200 -= 0x800;
|
||||
if (player->unk_200 >= 0xF0000000) {
|
||||
player->unk_200 = temp_v1;
|
||||
// if (abs(desired_steering_change) >= steering_change_threshold)
|
||||
if ((*desired_steering_change >= steering_change_threshold) || (-steering_change_threshold >= *desired_steering_change)) {
|
||||
current_steering_change_increment = player->steerChangeIncrement;
|
||||
player->steerChangeIncrement -= 1 << 11;
|
||||
//signed vs unsigned weirdness, actually checking if negative
|
||||
if (player->steerChangeIncrement >= 0xF0000000) {
|
||||
player->steerChangeIncrement = current_steering_change_increment;
|
||||
}
|
||||
if (arg5 >= (s32) player->unk_200) {
|
||||
player->unk_200 = arg5;
|
||||
if (steering_change_minimum >= (s32) player->steerChangeIncrement) {
|
||||
player->steerChangeIncrement = steering_change_minimum;
|
||||
}
|
||||
|
||||
*arg2 = (arg3 < *arg2) ? *arg2 - player->unk_200 : *arg2 + player->unk_200;
|
||||
// move current_steering toward desired_steering
|
||||
*current_steering = (desired_steering < *current_steering) ? *current_steering - player->steerChangeIncrement : *current_steering + player->steerChangeIncrement;
|
||||
|
||||
//arg6 is always positive and unk_090 is 0 or negative, so this if statement is always true
|
||||
if (player->unk_090 < ((f32) arg6)) {
|
||||
player->unk_090 = (f32) -arg6;
|
||||
}
|
||||
@@ -3841,70 +3845,73 @@ void func_80033884(Player* player, s32* arg1, s32* arg2, s32 arg3, s32 arg4, s32
|
||||
UNUSED void func_80033940(Player* player, s32* arg1, s32 arg2, s32 arg3, f32 arg4) {
|
||||
u32 temp_v1;
|
||||
|
||||
temp_v1 = player->unk_200;
|
||||
player->unk_200 -= 0x800;
|
||||
if (!(player->unk_200 < 0xF0000000)) {
|
||||
player->unk_200 = temp_v1;
|
||||
temp_v1 = player->steerChangeIncrement;
|
||||
player->steerChangeIncrement -= 0x800;
|
||||
if (!(player->steerChangeIncrement < 0xF0000000)) {
|
||||
player->steerChangeIncrement = temp_v1;
|
||||
}
|
||||
if (arg3 >= (s32) player->unk_200) {
|
||||
player->unk_200 = arg3;
|
||||
if (arg3 >= (s32) player->steerChangeIncrement) {
|
||||
player->steerChangeIncrement = arg3;
|
||||
}
|
||||
|
||||
*arg1 = (arg2 < *arg1) ? *arg1 - player->unk_200 : *arg1 + player->unk_200;
|
||||
*arg1 = (arg2 < *arg1) ? *arg1 - player->steerChangeIncrement : *arg1 + player->steerChangeIncrement;
|
||||
|
||||
if (player->unk_090 < arg4) {
|
||||
player->unk_090 = (f32) -arg4;
|
||||
}
|
||||
}
|
||||
|
||||
void func_800339C4(Player* player, s32* arg1, s32 arg2, s32 arg3, f32 arg4) {
|
||||
UNUSED void func_800339C4(Player* player, s32* arg1, s32 arg2, s32 arg3, f32 arg4) {
|
||||
s32 temp_v0;
|
||||
|
||||
temp_v0 = player->unk_200;
|
||||
player->unk_200 -= 0x800;
|
||||
if (player->unk_200 >= 0xF0000000) {
|
||||
player->unk_200 = temp_v0;
|
||||
temp_v0 = player->steerChangeIncrement;
|
||||
player->steerChangeIncrement -= 0x800;
|
||||
if (player->steerChangeIncrement >= 0xF0000000) {
|
||||
player->steerChangeIncrement = temp_v0;
|
||||
}
|
||||
if (arg3 >= (s32) player->unk_200) {
|
||||
player->unk_200 = arg3;
|
||||
if (arg3 >= (s32) player->steerChangeIncrement) {
|
||||
player->steerChangeIncrement = arg3;
|
||||
}
|
||||
|
||||
*arg1 = (arg2 < *arg1) ? *arg1 - player->unk_200 : *arg1 + player->unk_200;
|
||||
*arg1 = (arg2 < *arg1) ? *arg1 - player->steerChangeIncrement : *arg1 + player->steerChangeIncrement;
|
||||
|
||||
func_80033850(player, arg4);
|
||||
}
|
||||
|
||||
void func_80033A40(Player* player, s32* arg1, s32* arg2, s32 arg3, s32 arg4, s32 arg5, f32 arg6) {
|
||||
s32 temp_v1;
|
||||
void update_steering_small(Player* player, s32* desired_steering_change, s32* current_steering, s32 desired_steering, s32 steering_change_threshold, s32 steering_change_minimum, f32 arg6) {
|
||||
s32 current_steering_change_increment;
|
||||
|
||||
if ((*arg1 >= arg4) || (-arg4 >= *arg1)) {
|
||||
temp_v1 = player->unk_200;
|
||||
player->unk_200 -= 0x800;
|
||||
if (player->unk_200 >= 0xF0000000) {
|
||||
player->unk_200 = temp_v1;
|
||||
if ((*desired_steering_change >= steering_change_threshold) || (-steering_change_threshold >= *desired_steering_change)) {
|
||||
current_steering_change_increment = player->steerChangeIncrement;
|
||||
player->steerChangeIncrement -= 1 << 11;
|
||||
if (player->steerChangeIncrement >= 0xF0000000) {
|
||||
player->steerChangeIncrement = current_steering_change_increment;
|
||||
}
|
||||
if (arg5 >= (s32) player->unk_200) {
|
||||
player->unk_200 = arg5;
|
||||
if (steering_change_minimum >= (s32) player->steerChangeIncrement) {
|
||||
player->steerChangeIncrement = steering_change_minimum;
|
||||
}
|
||||
|
||||
*arg2 = (arg3 < *arg2) ? *arg2 - player->unk_200 : *arg2 + player->unk_200;
|
||||
*current_steering = (desired_steering < *current_steering) ? *current_steering - player->steerChangeIncrement : *current_steering + player->steerChangeIncrement;
|
||||
// identical to update_steering_large before this point
|
||||
|
||||
// set player->unk_090 = min(0, player->unk_90 + arg6)
|
||||
func_80033850(player, arg6);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) {
|
||||
s32 sp2E4;
|
||||
s32 temp_v0_3;
|
||||
//On or near ground
|
||||
void func_80033AE0(Player* player, struct Controller* controller, s8 playerIndex) {
|
||||
s32 steer_position;
|
||||
s32 clamped_x;
|
||||
UNUSED s32 pad[2];
|
||||
UNUSED s16 pad2;
|
||||
s16 var_s1_2;
|
||||
s32 sp2D0;
|
||||
s32 sp2CC;
|
||||
s32 sp2C8;
|
||||
s32 steer_position_delta;
|
||||
s32 steer_resistance_small_turn;
|
||||
s32 steer_resistance_large_turn;
|
||||
f32 var_f2_2;
|
||||
f32 var_f12 = 0.0f;
|
||||
f32 var_f2 = 0;
|
||||
f32 zero = 0;
|
||||
UNUSED s32 pad3;
|
||||
s32 var_a0;
|
||||
f32 sp44[156] = { 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.6, 0.6, 0.6, 0.6, 0.6, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7,
|
||||
@@ -3927,28 +3934,28 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) {
|
||||
if ((player->unk_0C0 / DEGREES_CONVERSION_FACTOR) < (-5)) {
|
||||
player->kartProps |= LEFT_TURN;
|
||||
player->kartProps &= ~RIGHT_TURN;
|
||||
D_801652C0[arg2]++;
|
||||
D_801652C0[playerIndex]++;
|
||||
} else if ((player->unk_0C0 / DEGREES_CONVERSION_FACTOR) > 5) {
|
||||
player->kartProps |= RIGHT_TURN;
|
||||
player->kartProps &= ~LEFT_TURN;
|
||||
D_801652C0[arg2]++;
|
||||
D_801652C0[playerIndex]++;
|
||||
} else {
|
||||
player->kartProps &= ~(LEFT_TURN | RIGHT_TURN);
|
||||
D_801652C0[arg2] = 0;
|
||||
D_801652C0[playerIndex] = 0;
|
||||
}
|
||||
if (((player->effects & HOP_EFFECT) == HOP_EFFECT) || ((player->effects & DRIFTING_EFFECT) == DRIFTING_EFFECT)) {
|
||||
player->kartProps &= ~(LEFT_TURN | RIGHT_TURN);
|
||||
}
|
||||
sp2E4 = player->unk_07C;
|
||||
temp_v0_3 = get_clamped_stickX_with_deadzone(controller);
|
||||
steer_position = player->steerPosition;
|
||||
clamped_x = get_clamped_stickX_with_deadzone(controller);
|
||||
if (((player->kartProps & BACK_UP) == BACK_UP) || ((player->kartProps & MOVE_BACKWARDS) == MOVE_BACKWARDS)) {
|
||||
temp_v0_3 = -temp_v0_3;
|
||||
clamped_x = -clamped_x;
|
||||
}
|
||||
player->unk_07C = (temp_v0_3 << 16) & 0xFFFF0000;
|
||||
sp2D0 = sp2E4 - player->unk_07C;
|
||||
sp2D0 = sp2D0 >> 16;
|
||||
player->unk_0FA = (s16) sp2D0;
|
||||
if (((sp2D0 >= 0x5A) || (sp2D0 < (-0x59))) && (!(player->kartProps & DRIVING_SPINOUT))) {
|
||||
player->steerPosition = (clamped_x << 16) & 0xFFFF0000;
|
||||
steer_position_delta = steer_position - player->steerPosition; // x change
|
||||
steer_position_delta = steer_position_delta >> 16;
|
||||
player->steerPositionDelta = (s16) steer_position_delta;
|
||||
if (((steer_position_delta >= 90) || (steer_position_delta <= -90)) && (!(player->kartProps & DRIVING_SPINOUT))) {
|
||||
if ((((((!(player->effects & DRIFTING_EFFECT)) && (gCCSelection == CC_150)) && (gModeSelection != BATTLE)) &&
|
||||
(!(player->effects & MIDAIR_EFFECT))) &&
|
||||
(((player->speed / 18.0f) * 216.0f) >= 40.0f)) &&
|
||||
@@ -3957,14 +3964,15 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) {
|
||||
}
|
||||
}
|
||||
if (((s32) player->tyres[BACK_RIGHT].surfaceType) < 0xF) {
|
||||
var_f2 += D_800E3610[player->characterId][player->tyres[BACK_RIGHT].surfaceType];
|
||||
//this table is just zeros
|
||||
zero += D_800E3610[player->characterId][player->tyres[BACK_RIGHT].surfaceType];
|
||||
}
|
||||
if (((s32) player->tyres[BACK_LEFT].surfaceType) < 0xF) {
|
||||
var_f2 += D_800E3610[player->characterId][player->tyres[BACK_LEFT].surfaceType];
|
||||
zero += D_800E3610[player->characterId][player->tyres[BACK_LEFT].surfaceType];
|
||||
}
|
||||
if ((player->effects & AB_SPIN_EFFECT) == AB_SPIN_EFFECT) {
|
||||
sp2C8 = 10;
|
||||
sp2CC = 10;
|
||||
steer_resistance_large_turn = 10;
|
||||
steer_resistance_small_turn = 10;
|
||||
} else {
|
||||
if (((player->effects & DRIFTING_EFFECT) == DRIFTING_EFFECT) &&
|
||||
((player->effects & HOP_EFFECT) != HOP_EFFECT)) {
|
||||
@@ -3974,144 +3982,157 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) {
|
||||
}
|
||||
if (((player->speed / 18.0f) * 216.0f) >= 15.0f) {
|
||||
if ((player->kartProps & RIGHT_TURN) == RIGHT_TURN) {
|
||||
if ((sp2D0 < 36) && (sp2D0 >= 0)) {
|
||||
sp2C8 =
|
||||
(gKartTable800E3650[player->characterId] + 1.0f) * (((f32) (var_a0 + 0xF)) * (1.0f + var_f2));
|
||||
sp2CC =
|
||||
(gKartTable800E3650[player->characterId] + 1.0f) * (((f32) (var_a0 + 0xF)) * (1.0f + var_f2));
|
||||
if ((steer_position_delta <= 35) && (steer_position_delta >= 0)) {
|
||||
//gKartTable800E3650 is always 0
|
||||
steer_resistance_large_turn =
|
||||
(gKartTable800E3650[player->characterId] + 1.0f) * (((f32) (var_a0 + 15)) * (1.0f + zero)); //18 or 15
|
||||
steer_resistance_small_turn =
|
||||
(gKartTable800E3650[player->characterId] + 1.0f) * (((f32) (var_a0 + 15)) * (1.0f + zero));
|
||||
} else {
|
||||
sp2C8 = (s32) (((f32) (var_a0 + 5)) * (1.0f + var_f2));
|
||||
sp2CC = (s32) (((f32) (var_a0 + 9)) * (1.0f + var_f2));
|
||||
steer_resistance_large_turn = (s32) (((f32) (var_a0 + 5)) * (1.0f + zero)); // 8 or 5
|
||||
steer_resistance_small_turn = (s32) (((f32) (var_a0 + 9)) * (1.0f + zero)); //12 or 9
|
||||
}
|
||||
} else if ((player->kartProps & LEFT_TURN) == LEFT_TURN) {
|
||||
if ((sp2D0 >= (-0x23)) && (sp2D0 <= 0)) {
|
||||
sp2C8 =
|
||||
(gKartTable800E3650[player->characterId] + 1.0f) * (((f32) (var_a0 + 0xF)) * (1.0f + var_f2));
|
||||
sp2CC =
|
||||
(gKartTable800E3650[player->characterId] + 1.0f) * (((f32) (var_a0 + 0xF)) * (1.0f + var_f2));
|
||||
if ((steer_position_delta >= -35) && (steer_position_delta <= 0)) {
|
||||
steer_resistance_large_turn =
|
||||
(gKartTable800E3650[player->characterId] + 1.0f) * (((f32) (var_a0 + 15)) * (1.0f + zero)); // 18 or 15
|
||||
steer_resistance_small_turn =
|
||||
(gKartTable800E3650[player->characterId] + 1.0f) * (((f32) (var_a0 + 15)) * (1.0f + zero));
|
||||
} else {
|
||||
sp2C8 = (s32) (((f32) (var_a0 + 5)) * (1.0f + var_f2));
|
||||
sp2CC = (s32) (((f32) (var_a0 + 9)) * (1.0f + var_f2));
|
||||
steer_resistance_large_turn = (s32) (((f32) (var_a0 + 5)) * (1.0f + zero)); // 8 or 5
|
||||
steer_resistance_small_turn = (s32) (((f32) (var_a0 + 9)) * (1.0f + zero)); // 12 or 9
|
||||
}
|
||||
} else {
|
||||
sp2C8 = (s32) (((f32) (var_a0 + 3)) * (1.0f + var_f2));
|
||||
sp2CC = (s32) (((f32) (var_a0 + 6)) * (1.0f + var_f2));
|
||||
steer_resistance_large_turn = (s32) (((f32) (var_a0 + 3)) * (1.0f + zero)); // 6 or 3
|
||||
steer_resistance_small_turn = (s32) (((f32) (var_a0 + 6)) * (1.0f + zero)); // 6 or 9
|
||||
}
|
||||
} else {
|
||||
sp2C8 = 8;
|
||||
sp2CC = 8;
|
||||
steer_resistance_large_turn = 8;
|
||||
steer_resistance_small_turn = 8;
|
||||
}
|
||||
}
|
||||
if ((player->oobProps & UNDER_OOB_OR_FLUID_LEVEL) == UNDER_OOB_OR_FLUID_LEVEL) {
|
||||
sp2C8 *= 1.5;
|
||||
sp2CC *= 1.5;
|
||||
steer_resistance_large_turn *= 1.5;
|
||||
steer_resistance_small_turn *= 1.5;
|
||||
} else {
|
||||
if ((player->oobProps & PASS_OOB_OR_FLUID_LEVEL) == PASS_OOB_OR_FLUID_LEVEL) {
|
||||
sp2C8 *= 1.2;
|
||||
sp2CC *= 1.2;
|
||||
steer_resistance_large_turn *= 1.2;
|
||||
steer_resistance_small_turn *= 1.2;
|
||||
}
|
||||
if ((((f64) (D_801652A0[arg2] - player->tyres[BACK_LEFT].baseHeight)) >= 3.5) ||
|
||||
(((f64) (D_801652A0[arg2] - player->tyres[BACK_RIGHT].baseHeight)) >= 3.5)) {
|
||||
sp2C8 *= 1.05;
|
||||
sp2CC *= 1.05;
|
||||
// Driving in water?
|
||||
if ((((f64) (D_801652A0[playerIndex] - player->tyres[BACK_LEFT].baseHeight)) >= 3.5) ||
|
||||
(((f64) (D_801652A0[playerIndex] - player->tyres[BACK_RIGHT].baseHeight)) >= 3.5)) {
|
||||
steer_resistance_large_turn *= 1.05;
|
||||
steer_resistance_small_turn *= 1.05;
|
||||
}
|
||||
}
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000005A, 0x78000 / sp2C8, 0x000001C2);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000059, 0x76000 / sp2C8, 0x000001B8);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000058, 0x74000 / sp2C8, 0x000001AE);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000057, 0x72000 / sp2C8, 0x000001A4);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000056, 0x70000 / sp2C8, 0x0000019A);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000055, 0x58000 / sp2C8, 0x00000190);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000054, 0x56000 / sp2C8, 0x0000018B);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000053, 0x50000 / sp2C8, 0x00000186);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000052, 0x4F000 / sp2C8, 0x00000186);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000051, 0x4E000 / sp2C8, 0x0000017C);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000050, 0x4D000 / sp2C8, 0x00000172);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000004F, 0x4C000 / sp2C8, 0x00000168);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000004E, 0x4C000 / sp2C8, 0x00000168);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000004D, 0x4B000 / sp2C8, 0x0000015E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000004C, 0x4A000 / sp2C8, 0x00000154);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000004B, 0x49000 / sp2C8, 0x0000014A);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000004A, 0x49000 / sp2C8, 0x0000014A);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000049, 0x49000 / sp2C8, 0x0000014A);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000048, 0x48000 / sp2C8, 0x00000140);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000047, 0x47000 / sp2C8, 0x0000013B);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000046, 0x47000 / sp2C8, 0x0000013B);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000045, 0x46000 / sp2C8, 0x00000131);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000044, 0x46000 / sp2C8, 0x00000131);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000043, 0x45000 / sp2C8, 0x00000118);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000042, 0x46000 / sp2C8, 0x0000010E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000041, 0x45000 / sp2C8, 0x0000010E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000040, 0x44000 / sp2C8, 0x00000104);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000003F, 0x43000 / sp2C8, 0x000000FA);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000003E, 0x43000 / sp2C8, 0x000000FA);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000003D, 0x43000 / sp2C8, 0x000000FA);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000003C, 0x3D000 / sp2C8, 0x000000F5);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000003B, 0x3C000 / sp2C8, 0x000000F5);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000003A, 0x3B000 / sp2C8, 0x000000F5);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000039, 0x3A000 / sp2C8, 0x000000F5);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000038, 0x38000 / sp2C8, 0x000000F5);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000037, 0x38000 / sp2C8, 0x000000E6);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000036, 0x38000 / sp2C8, 0x000000E6);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000035, 0x38000 / sp2C8, 0x000000E6);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000034, 0x38000 / sp2C8, 0x000000E6);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000033, 0x38000 / sp2C8, 0x000000E6);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000032, 0x32000 / sp2C8, 0x000000DC);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000031, 0x32000 / sp2C8, 0x000000DC);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000030, 0x32000 / sp2C8, 0x000000DC);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000002F, 0x32000 / sp2C8, 0x000000DC);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000002E, 0x32000 / sp2C8, 0x000000DC);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000002D, 0x30000 / sp2C8, 0x0000006E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000002C, 0x2E000 / sp2C8, 0x0000006E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000002B, 0x2E000 / sp2C8, 0x0000006E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000002A, 0x2E000 / sp2C8, 0x0000006E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000029, 0x2E000 / sp2C8, 0x0000006E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000028, 0x2E000 / sp2C8, 0x0000006E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000027, 0x2C000 / sp2C8, 0x0000006E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000026, 0x28000 / sp2C8, 0x0000006E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000025, 0x28000 / sp2C8, 0x0000006E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000024, 0x24000 / sp2C8, 0x0000006E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000023, 0x24000 / sp2C8, 0x0000006E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000022, 0x22000 / sp2C8, 0x0000006E);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000020, 0x20000 / sp2C8, 0x00000064);
|
||||
func_80033884(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000001F, 0x20000 / sp2C8, 0x00000064);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000001E, 0x1F000 / sp2CC, 0.9f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000001D, 0x1E000 / sp2CC, 0.9f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000001C, 0x1D000 / sp2CC, 0.9f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000001B, 0x1C000 / sp2CC, 0.9f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000001A, 0x1B000 / sp2CC, 0.9f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000019, 0x1A000 / sp2CC, 1.0f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000018, 0x19000 / sp2CC, 1.0f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000017, 0x18000 / sp2CC, 1.0f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000016, 0x17000 / sp2CC, 1.0f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000015, 0x16000 / sp2CC, 1.0f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000014, 0x15000 / sp2CC, 1.05f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000013, 0x14000 / sp2CC, 1.05f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000012, 0x13000 / sp2CC, 1.05f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000011, 0x12000 / sp2CC, 1.05f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x00000010, 0x11000 / sp2CC, 1.05f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000000F, 0x10000 / sp2CC, 1.2f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000000E, 0xF000 / sp2CC, 1.2f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000000D, 0xE000 / sp2CC, 1.2f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000000C, 0xD000 / sp2CC, 1.2f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000000B, 0xC000 / sp2CC, 1.2f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0x0000000A, 0xE000 / sp2CC, 1.6f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 9, 0xD000 / sp2CC, 1.6f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 8, 0xC000 / sp2CC, 1.6f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 7, 0xB000 / sp2CC, 1.6f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 6, 0xA000 / sp2CC, 1.6f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 5, 0x9000 / sp2CC, 1.9f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 4, 0x8000 / sp2CC, 1.9f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 3, 0x7000 / sp2CC, 1.9f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 2, 0x6000 / sp2CC, 1.9f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 1, 0x5000 / sp2CC, 1.9f);
|
||||
func_80033A40(player, &sp2D0, &sp2E4, player->unk_07C, 0, 0 / sp2CC, 1.9f);
|
||||
|
||||
/*
|
||||
This big group of function calls does 2 things.
|
||||
First, when you steer it sets steer_position (which starts as just your x input) part way between your x input and your previous player->steerPosition
|
||||
(basically, you cannot go from full left to right steering instantaneously)
|
||||
Second, it sets the value of player->unk_090, which has to do with your karts sideways velocity. The code looks like it is intended
|
||||
to set this to larger negative values when you have a large steer_position_delta. However, due to an apparent bug, update_steering_large
|
||||
overwrites this too frequently. The end effect is that player->unk_090 ends up always getting set to -59.85 when steer_position_delta > 30
|
||||
and set to 0 otherwise. -59.85 is -100 (the last value provided to update_steering_large) + the sum of the values provided to update_steering_small
|
||||
*/
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 90, (120 << 12) / steer_resistance_large_turn, 450);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 89, (118 << 12) / steer_resistance_large_turn, 440);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 88, (116 << 12) / steer_resistance_large_turn, 430);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 87, (114 << 12) / steer_resistance_large_turn, 420);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 86, (112 << 12) / steer_resistance_large_turn, 410);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 85, (88 << 12) / steer_resistance_large_turn, 400);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 84, (86 << 12) / steer_resistance_large_turn, 395);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 83, (80 << 12) / steer_resistance_large_turn, 390);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 82, (79 << 12) / steer_resistance_large_turn, 390);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 81, (78 << 12) / steer_resistance_large_turn, 380);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 80, (77 << 12) / steer_resistance_large_turn, 370);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 79, (76 << 12) / steer_resistance_large_turn, 360);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 78, (76 << 12) / steer_resistance_large_turn, 360);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 77, (75 << 12) / steer_resistance_large_turn, 350);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 76, (74 << 12) / steer_resistance_large_turn, 340);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 75, (73 << 12) / steer_resistance_large_turn, 330);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 74, (73 << 12) / steer_resistance_large_turn, 330);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 73, (73 << 12) / steer_resistance_large_turn, 330);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 72, (72 << 12) / steer_resistance_large_turn, 320);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 71, (71 << 12) / steer_resistance_large_turn, 315);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 70, (71 << 12) / steer_resistance_large_turn, 315);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 69, (70 << 12) / steer_resistance_large_turn, 305);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 68, (70 << 12) / steer_resistance_large_turn, 305);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 67, (69 << 12) / steer_resistance_large_turn, 280);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 66, (70 << 12) / steer_resistance_large_turn, 270);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 65, (69 << 12) / steer_resistance_large_turn, 270);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 64, (68 << 12) / steer_resistance_large_turn, 260);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 63, (67 << 12) / steer_resistance_large_turn, 250);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 62, (67 << 12) / steer_resistance_large_turn, 250);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 61, (67 << 12) / steer_resistance_large_turn, 250);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 60, (61 << 12) / steer_resistance_large_turn, 245);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 59, (60 << 12) / steer_resistance_large_turn, 245);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 58, (59 << 12) / steer_resistance_large_turn, 245);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 57, (58 << 12) / steer_resistance_large_turn, 245);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 56, (56 << 12) / steer_resistance_large_turn, 245);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 55, (56 << 12) / steer_resistance_large_turn, 230);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 54, (56 << 12) / steer_resistance_large_turn, 230);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 53, (56 << 12) / steer_resistance_large_turn, 230);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 52, (56 << 12) / steer_resistance_large_turn, 230);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 51, (56 << 12) / steer_resistance_large_turn, 230);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 50, (50 << 12) / steer_resistance_large_turn, 220);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 49, (50 << 12) / steer_resistance_large_turn, 220);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 48, (50 << 12) / steer_resistance_large_turn, 220);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 47, (50 << 12) / steer_resistance_large_turn, 220);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 46, (50 << 12) / steer_resistance_large_turn, 220);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 45, (48 << 12) / steer_resistance_large_turn, 110);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 44, (46 << 12) / steer_resistance_large_turn, 110);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 43, (46 << 12) / steer_resistance_large_turn, 110);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 42, (46 << 12) / steer_resistance_large_turn, 110);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 41, (46 << 12) / steer_resistance_large_turn, 110);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 40, (46 << 12) / steer_resistance_large_turn, 110);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 39, (44 << 12) / steer_resistance_large_turn, 110);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 38, (40 << 12) / steer_resistance_large_turn, 110);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 37, (40 << 12) / steer_resistance_large_turn, 110);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 36, (36 << 12) / steer_resistance_large_turn, 110);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 35, (36 << 12) / steer_resistance_large_turn, 110);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 34, (34 << 12) / steer_resistance_large_turn, 110);
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 32, (32 << 12) / steer_resistance_large_turn, 100); // this skips 33
|
||||
update_steering_large(player, &steer_position_delta, &steer_position, player->steerPosition, 31, (32 << 12) / steer_resistance_large_turn, 100);
|
||||
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 30, (31 << 12) / steer_resistance_small_turn, 0.9f); // 0.9 * 5
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 29, (30 << 12) / steer_resistance_small_turn, 0.9f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 28, (29 << 12) / steer_resistance_small_turn, 0.9f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 27, (28 << 12) / steer_resistance_small_turn, 0.9f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 26, (27 << 12) / steer_resistance_small_turn, 0.9f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 25, (26 << 12) / steer_resistance_small_turn, 1.0f); // 1.0 * 5
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 24, (25 << 12) / steer_resistance_small_turn, 1.0f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 23, (24 << 12) / steer_resistance_small_turn, 1.0f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 22, (23 << 12) / steer_resistance_small_turn, 1.0f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 21, (22 << 12) / steer_resistance_small_turn, 1.0f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 20, (21 << 12) / steer_resistance_small_turn, 1.05f);// 1.05* 5
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 19, (20 << 12) / steer_resistance_small_turn, 1.05f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 18, (19 << 12) / steer_resistance_small_turn, 1.05f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 17, (18 << 12) / steer_resistance_small_turn, 1.05f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 16, (17 << 12) / steer_resistance_small_turn, 1.05f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 15, (16 << 12) / steer_resistance_small_turn, 1.2f); // 1.2 * 5
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 14, (15 << 12) / steer_resistance_small_turn, 1.2f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 13, (14 << 12) / steer_resistance_small_turn, 1.2f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 12, (13 << 12) / steer_resistance_small_turn, 1.2f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 11, (12 << 12) / steer_resistance_small_turn, 1.2f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 10, (14 << 12) / steer_resistance_small_turn, 1.6f); // 1.6 * 5
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 9, (13 << 12) / steer_resistance_small_turn, 1.6f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 8, (12 << 12) / steer_resistance_small_turn, 1.6f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 7, (11 << 12) / steer_resistance_small_turn, 1.6f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 6, (10 << 12) / steer_resistance_small_turn, 1.6f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 5, (9 << 12) / steer_resistance_small_turn, 1.9f); // 1.9 * 6
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 4, (8 << 12) / steer_resistance_small_turn, 1.9f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 3, (7 << 12) / steer_resistance_small_turn, 1.9f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 2, (6 << 12) / steer_resistance_small_turn, 1.9f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 1, (5 << 12) / steer_resistance_small_turn, 1.9f);
|
||||
update_steering_small(player, &steer_position_delta, &steer_position, player->steerPosition, 0, 0 / steer_resistance_small_turn, 1.9f); // sum is 40.15
|
||||
if ((player->effects & DRIFTING_EFFECT) == DRIFTING_EFFECT) {
|
||||
var_f2_2 = (f32) (((s32) (sp2E4 >> 16)) / 8);
|
||||
var_f2_2 = (f32) ((steer_position >> 16) / 8);
|
||||
} else if (((player->speed / 18.0f) * 216.0f) <= 25.0f) {
|
||||
var_f2_2 = (f32) ((sp2E4 >> 16) / 12);
|
||||
var_f2_2 = (f32) ((steer_position >> 16) / 12);
|
||||
} else {
|
||||
var_f2_2 = ((f32) (sp2E4 >> 0x10)) / (8.0f + (player->currentSpeed / 50.0f));
|
||||
var_f2_2 = ((f32) (steer_position >> 16)) / (8.0f + (player->currentSpeed / 50.0f));
|
||||
}
|
||||
if (var_f2_2 < 0.0f) {
|
||||
var_f2_2 = -var_f2_2;
|
||||
@@ -4123,7 +4144,7 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) {
|
||||
} else {
|
||||
var_f2_2 = var_f2_2 * (sp44[(s16) ((player->speed / 18.0f) * 216.0f)] * 1.5f);
|
||||
}
|
||||
player->unk_07C = sp2E4;
|
||||
player->steerPosition = steer_position;
|
||||
if (player->unk_10C != 0) {
|
||||
func_8002BD58(player);
|
||||
}
|
||||
@@ -4138,25 +4159,25 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) {
|
||||
}
|
||||
if (((player->effects & HOP_EFFECT) != HOP_EFFECT) && ((player->effects & DRIFTING_EFFECT) != DRIFTING_EFFECT)) {
|
||||
if ((player->effects & AB_SPIN_EFFECT) == AB_SPIN_EFFECT) {
|
||||
player->unk_078 = (s16) ((s32) (((f32) ((((s32) player->unk_07C) >> 0x10) * 5)) * var_f2_2));
|
||||
player->unk_078 = (player->steerPosition >> 16) * 5 * var_f2_2;
|
||||
} else {
|
||||
if ((player->effects & BRAKING_EFFECT) != BRAKING_EFFECT) {
|
||||
if (((player->unk_07C >> 16) >= 45) || ((player->unk_07C >> 16) <= (-45))) {
|
||||
player->unk_078 = ((player->unk_07C >> 16) * (var_f2_2 + (var_f2_2 * var_f12))) *
|
||||
if (((player->steerPosition >> 16) >= 45) || ((player->steerPosition >> 16) <= -45)) {
|
||||
player->unk_078 = ((player->steerPosition >> 16) * (var_f2_2 + (var_f2_2 * var_f12))) *
|
||||
(0.15 + gKartHandlingTable[player->characterId]);
|
||||
} else {
|
||||
player->unk_078 = ((player->unk_07C >> 16) * (var_f2_2 + (var_f2_2 * var_f12))) *
|
||||
player->unk_078 = ((player->steerPosition >> 16) * (var_f2_2 + (var_f2_2 * var_f12))) *
|
||||
gKartHandlingTable[player->characterId];
|
||||
}
|
||||
} else {
|
||||
if ((((player->speed / 18.0f) * 216.0f) >= 0.0f) && (((player->speed / 18.0f) * 216.0f) < 8.0f)) {
|
||||
player->unk_078 = (player->unk_07C >> 16) * (var_f2_2 + (var_f2_2 * var_f12));
|
||||
player->unk_078 = (player->steerPosition >> 16) * (var_f2_2 + (var_f2_2 * var_f12));
|
||||
}
|
||||
if ((((player->speed / 18.0f) * 216.0f) >= 8.0f) && (((player->speed / 18.0f) * 216.0f) < 65.0f)) {
|
||||
player->unk_078 = (player->unk_07C >> 16) * ((var_f2_2 + 1.5) + (var_f2_2 * var_f12));
|
||||
player->unk_078 = (player->steerPosition >> 16) * ((var_f2_2 + 1.5) + (var_f2_2 * var_f12));
|
||||
}
|
||||
if (((player->speed / 18.0f) * 216.0f) >= 65.0f) {
|
||||
player->unk_078 = (player->unk_07C >> 16) * ((var_f2_2 + 1.6) + (var_f2_2 * var_f12));
|
||||
player->unk_078 = (player->steerPosition >> 16) * ((var_f2_2 + 1.6) + (var_f2_2 * var_f12));
|
||||
}
|
||||
}
|
||||
player->unk_228 = 0;
|
||||
@@ -4165,24 +4186,26 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) {
|
||||
}
|
||||
}
|
||||
} else if (((player->effects & MIDAIR_EFFECT) != MIDAIR_EFFECT) && ((player->effects & HOP_EFFECT) != HOP_EFFECT)) {
|
||||
if ((((s16) player->unk_0C0) / 182) > 0) {
|
||||
var_s1_2 = (((s32) (((player->unk_07C >> 0x10) * 0xD) + 0x2B1)) / 106) + 0x28;
|
||||
if ((player->unk_07C >> 0x10) < (-0x27)) {
|
||||
player->effects = player->effects | DRIFT_OUTSIDE_EFFECT;
|
||||
if ((player->unk_07C >> 0x10) < (-0x31)) {
|
||||
if ((((s16) player->unk_0C0) / DEGREES_CONVERSION_FACTOR) > 0) {
|
||||
// linear map, sets -53 to 40 and 53 to 53
|
||||
var_s1_2 = (((s32) (((player->steerPosition >> 16) * 13) + (13 * 53))) / (2 * 53)) + 40;
|
||||
if ((player->steerPosition >> 16) <= -40) {
|
||||
player->effects |= DRIFT_OUTSIDE_EFFECT;
|
||||
if ((player->steerPosition >> 16) <= -50) { // always true, but has no effect
|
||||
player->effects |= DRIFT_OUTSIDE_EFFECT;
|
||||
}
|
||||
}
|
||||
func_8002A8A4(player, arg2);
|
||||
func_8002A8A4(player, playerIndex);
|
||||
} else {
|
||||
var_s1_2 = (((s32) (((player->unk_07C >> 0x10) * 0xD) + 0x2B1)) / 106) - 0x35;
|
||||
if ((player->unk_07C >> 0x10) >= 0x28) {
|
||||
player->effects = player->effects | DRIFT_OUTSIDE_EFFECT;
|
||||
if ((player->unk_07C >> 0x10) < (-0x31)) {
|
||||
// linear map, sets -53 to -53 and 53 to -40
|
||||
var_s1_2 = (((s32) (((player->steerPosition >> 16) * 13) + (13 * 53))) / (2 * 53)) - 53;
|
||||
if ((player->steerPosition >> 16) >= 40) {
|
||||
player->effects |= DRIFT_OUTSIDE_EFFECT;
|
||||
if ((player->steerPosition >> 16) <= -50) { // never true, but would have no effect
|
||||
player->effects |= DRIFT_OUTSIDE_EFFECT;
|
||||
}
|
||||
}
|
||||
func_8002A8A4(player, arg2);
|
||||
func_8002A8A4(player, playerIndex);
|
||||
}
|
||||
if ((((player->speed / 18.0f) * 216.0f) >= 0.0f) && (((player->speed / 18.0f) * 216.0f) < 8.0f)) {
|
||||
player->unk_078 = (s16) ((s32) (var_s1_2 * ((var_f2_2 + 2.0f) + (var_f2_2 * var_f12))));
|
||||
@@ -4199,8 +4222,8 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) {
|
||||
player->unk_078 *= 0.65;
|
||||
}
|
||||
} else {
|
||||
var_s1_2 = (s16) (((s32) player->unk_07C) >> 16);
|
||||
if (temp_v0_3 == 0) {
|
||||
var_s1_2 = player->steerPosition >> 16;
|
||||
if (clamped_x == 0) {
|
||||
var_s1_2 = 0;
|
||||
}
|
||||
if (((player->speed / 18.0f) * 216.0f) <= 5.0f) {
|
||||
@@ -4243,7 +4266,7 @@ void apply_cpu_turn(Player* player, s16 targetAngle) {
|
||||
player->effects &= ~DRIFT_OUTSIDE_EFFECT;
|
||||
player->unk_228 = 0;
|
||||
if (!(player->effects & BANANA_SPINOUT_EFFECT) && !(player->effects & DRIVING_SPINOUT_EFFECT)) {
|
||||
sp304 = (s32) player->unk_07C >> 0x10;
|
||||
sp304 = (s32) player->steerPosition >> 16;
|
||||
move_s32_towards(&sp304, (s32) targetAngle, 0.35f);
|
||||
sp304 <<= 0x10;
|
||||
if ((player->effects & DRIFTING_EFFECT) == DRIFTING_EFFECT) {
|
||||
@@ -4262,24 +4285,24 @@ void apply_cpu_turn(Player* player, s16 targetAngle) {
|
||||
var_f0 = speedTurn[(s16) ((player->speed / 18.0f) * 216.0f)] * characterTurn[player->characterId] *
|
||||
var_f0;
|
||||
}
|
||||
player->unk_07C = sp304;
|
||||
player->steerPosition = sp304;
|
||||
if (((player->effects & HOP_EFFECT) != HOP_EFFECT) &&
|
||||
((player->effects & DRIFTING_EFFECT) != DRIFTING_EFFECT)) {
|
||||
if ((player->effects & BRAKING_EFFECT) != BRAKING_EFFECT) {
|
||||
player->unk_078 = (player->unk_07C >> 0x10) * var_f0;
|
||||
player->unk_078 = (player->steerPosition >> 16) * var_f0;
|
||||
} else {
|
||||
player->unk_078 = (player->unk_07C >> 0x10) * (var_f0 + 1.5);
|
||||
player->unk_078 = (player->steerPosition >> 16) * (var_f0 + 1.5);
|
||||
}
|
||||
} else if ((player->effects & MIDAIR_EFFECT) != MIDAIR_EFFECT) {
|
||||
if (((s16) player->unk_0C0 / 182) > 0) {
|
||||
var_v0 = player->unk_07C >> 0x10;
|
||||
if (((s16) player->unk_0C0 / DEGREES_CONVERSION_FACTOR) > 0) {
|
||||
var_v0 = player->steerPosition >> 16;
|
||||
} else {
|
||||
var_v0 = player->unk_07C >> 0x10;
|
||||
var_v0 = player->steerPosition >> 16;
|
||||
}
|
||||
player->unk_078 = var_v0 * (var_f0 + 3.0);
|
||||
player->unk_078 *= 0.8;
|
||||
} else {
|
||||
var_v0 = (s16) ((s32) player->unk_07C >> 0x10);
|
||||
var_v0 = (s16) ((s32) player->steerPosition >> 16);
|
||||
if (targetAngle == 0) {
|
||||
var_v0 = 0;
|
||||
}
|
||||
@@ -4305,16 +4328,18 @@ void func_80036C5C(Player* player) {
|
||||
}
|
||||
|
||||
void func_80036CB4(Player* player) {
|
||||
s32 test;
|
||||
s32 steer_position_new;
|
||||
|
||||
if (((player->effects & DRIFTING_EFFECT) == DRIFTING_EFFECT) && ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN)) {
|
||||
if ((player->unk_0C0 / 182) > 0) {
|
||||
test = ((((player->unk_07C >> 0x10) * 0xD) + 0x2B1) / 106) + 0x28;
|
||||
player->unk_07C = test << 0x10;
|
||||
if ((player->unk_0C0 / DEGREES_CONVERSION_FACTOR) > 0) {
|
||||
// linear map, sets -53 to 40 and 53 to 53
|
||||
steer_position_new = ((((player->steerPosition >> 16) * 13) + (13*53)) / (2*53)) + 40;
|
||||
player->steerPosition = steer_position_new << 16;
|
||||
}
|
||||
if ((player->unk_0C0 / 182) < 0) {
|
||||
test = ((((player->unk_07C >> 0x10) * 0xD) + 0x2B1) / 106) - 0x35;
|
||||
player->unk_07C = test << 0x10;
|
||||
if ((player->unk_0C0 / DEGREES_CONVERSION_FACTOR) < 0) {
|
||||
// linear map, sets -53 to -53 and 53 to -40
|
||||
steer_position_new = ((((player->steerPosition >> 16) * 13) + (13*53)) / (2*53)) - 53;
|
||||
player->steerPosition = steer_position_new << 16;
|
||||
}
|
||||
player->effects &= ~DRIFTING_EFFECT;
|
||||
}
|
||||
@@ -4324,11 +4349,11 @@ void func_80036CB4(Player* player) {
|
||||
}
|
||||
|
||||
void func_80036DB4(Player* player, Vec3f arg1, Vec3f arg2) {
|
||||
s16 thing;
|
||||
s16 steer_position_delta;
|
||||
UNUSED s16 pad;
|
||||
f32 sp20;
|
||||
f32 var_f18;
|
||||
s32 temp_t6;
|
||||
s32 steer_position;
|
||||
|
||||
if (((player->effects & LOST_RACE_EFFECT) == LOST_RACE_EFFECT) ||
|
||||
((player->effects & AB_SPIN_EFFECT) == AB_SPIN_EFFECT)) {
|
||||
@@ -4342,27 +4367,27 @@ void func_80036DB4(Player* player, Vec3f arg1, Vec3f arg2) {
|
||||
var_f18 = player->unk_208 + ((-(player->speed / 18.0f) * 216.0f) * 3.0f) + (-player->unk_20C * 10.0f);
|
||||
sp20 = player->unk_084 * 3.0f;
|
||||
} else if (!(player->effects & BANANA_NEAR_SPINOUT_EFFECT) && !(player->kartProps & DRIVING_SPINOUT)) {
|
||||
thing = player->unk_0FA;
|
||||
if (thing > 0) {
|
||||
thing *= -1;
|
||||
steer_position_delta = player->steerPositionDelta;
|
||||
if (steer_position_delta > 0) {
|
||||
steer_position_delta *= -1;
|
||||
}
|
||||
temp_t6 = player->unk_07C >> 0x10;
|
||||
if ((temp_t6 < 0x15) && (temp_t6 >= -0x14)) {
|
||||
if (thing < 0x14) {
|
||||
steer_position = player->steerPosition >> 16;
|
||||
if ((steer_position <= 20) && (steer_position >= -20)) {
|
||||
if (steer_position_delta < 20) {
|
||||
var_f18 = (player->unk_208 + ((-(player->speed / 18.0f) * 216.0f) / 3.0f)) +
|
||||
(-player->currentSpeed * 0.02) + (-player->unk_20C * 50.0f);
|
||||
} else {
|
||||
var_f18 = (player->unk_208 + ((-(player->speed / 18.0f) * 216.0f) / 3.0f)) +
|
||||
((temp_t6 * 0.01) + (-player->currentSpeed * 0.05)) + (-player->unk_20C * 50.0f);
|
||||
((steer_position * 0.01) + (-player->currentSpeed * 0.05)) + (-player->unk_20C * 50.0f);
|
||||
}
|
||||
} else {
|
||||
var_f18 = (player->unk_208 + ((-(player->speed / 18.0f) * 216.0f) / 3.0f)) +
|
||||
((temp_t6 * 0.1) + (-player->currentSpeed * 0.15)) + (-player->unk_20C * 50.0f);
|
||||
((steer_position * 0.1) + (-player->currentSpeed * 0.15)) + (-player->unk_20C * 50.0f);
|
||||
}
|
||||
sp20 = player->unk_084;
|
||||
} else {
|
||||
var_f18 = player->unk_208 + ((-(player->speed / 18.0f) * 216.0f) * 1.5) +
|
||||
(((player->unk_07C >> 0x10) * 0.1) + (-player->currentSpeed * 0.05)) + (-player->unk_20C * 50.0f);
|
||||
(((player->steerPosition >> 16) * 0.1) + (-player->currentSpeed * 0.05)) + (-player->unk_20C * 50.0f);
|
||||
sp20 = player->unk_084;
|
||||
}
|
||||
if ((player->effects & STAR_EFFECT) == STAR_EFFECT) {
|
||||
@@ -4386,10 +4411,10 @@ void func_80036DB4(Player* player, Vec3f arg1, Vec3f arg2) {
|
||||
}
|
||||
|
||||
void func_800371F4(Player* player, Vec3f arg1, Vec3f arg2) {
|
||||
s16 var_v0;
|
||||
s16 steer_position_delta;
|
||||
f32 sp20;
|
||||
f32 var_f18;
|
||||
s32 temp_t6;
|
||||
s32 steer_position;
|
||||
|
||||
if (((player->effects & LOST_RACE_EFFECT) == LOST_RACE_EFFECT) ||
|
||||
((player->effects & AB_SPIN_EFFECT) == AB_SPIN_EFFECT)) {
|
||||
@@ -4403,29 +4428,29 @@ void func_800371F4(Player* player, Vec3f arg1, Vec3f arg2) {
|
||||
var_f18 = player->unk_208 + ((-(player->speed / 18.0f) * 216.0f) * 3.0f) + (-player->unk_20C * 50.0f);
|
||||
sp20 = player->unk_084 * 3.0f;
|
||||
} else if (!(player->effects & BANANA_NEAR_SPINOUT_EFFECT) && !(player->kartProps & DRIVING_SPINOUT)) {
|
||||
var_v0 = player->unk_0FA;
|
||||
if (var_v0 > 0) {
|
||||
var_v0 *= -1;
|
||||
steer_position_delta = player->steerPositionDelta;
|
||||
if (steer_position_delta > 0) {
|
||||
steer_position_delta *= -1;
|
||||
}
|
||||
temp_t6 = (s32) player->unk_07C >> 0x10;
|
||||
if ((temp_t6 < 0x15) && (temp_t6 >= -0x14)) {
|
||||
if (var_v0 < 0x14) {
|
||||
steer_position = (s32) player->steerPosition >> 16;
|
||||
if ((steer_position <= 20) && (steer_position >= -20)) {
|
||||
if (steer_position_delta < 20) {
|
||||
var_f18 = (player->unk_208 + ((-(player->speed / 18.0f) * 216.0f) / 3.0f)) +
|
||||
(-player->currentSpeed * 0.02) + (-player->unk_20C * 50.0f);
|
||||
} else {
|
||||
var_f18 = ((player->unk_208 + ((-(player->speed / 18.0f) * 216.0f) / 3.0f)) -
|
||||
((temp_t6 * 0.01) + (player->currentSpeed * 0.05))) +
|
||||
((steer_position * 0.01) + (player->currentSpeed * 0.05))) +
|
||||
(-player->unk_20C * 50.0f);
|
||||
}
|
||||
} else {
|
||||
var_f18 = ((player->unk_208 + ((-(player->speed / 18.0f) * 216.0f) / 3.0f)) -
|
||||
((temp_t6 * 0.1) + (player->currentSpeed * 0.15))) +
|
||||
((steer_position * 0.1) + (player->currentSpeed * 0.15))) +
|
||||
(-player->unk_20C * 50.0f);
|
||||
}
|
||||
sp20 = player->unk_084;
|
||||
} else {
|
||||
var_f18 = ((player->unk_208 + ((f64) (-(player->speed / 18.0f) * 216.0f) * 1.5)) -
|
||||
(((player->unk_07C >> 0x10) * 0.1) + (player->currentSpeed * 0.05))) +
|
||||
(((player->steerPosition >> 0x10) * 0.1) + (player->currentSpeed * 0.05))) +
|
||||
(-player->unk_20C * 50.0f);
|
||||
sp20 = player->unk_084;
|
||||
}
|
||||
|
||||
@@ -85,10 +85,10 @@ void player_decelerate(Player*, f32);
|
||||
void player_accelerate_global(Player*, s32);
|
||||
void player_decelerate_global(Player*, f32, s32);
|
||||
void func_80033850(Player*, f32);
|
||||
void func_80033884(Player*, s32*, s32*, s32, s32, s32, s32);
|
||||
void update_steering_large(Player*, s32*, s32*, s32, s32, s32, s32);
|
||||
void func_80033940(Player*, s32*, s32, s32, f32);
|
||||
void func_800339C4(Player*, s32*, s32, s32, f32);
|
||||
void func_80033A40(Player*, s32*, s32*, s32, s32, s32, f32);
|
||||
void update_steering_small(Player*, s32*, s32*, s32, s32, s32, f32);
|
||||
void func_80033AE0(Player*, struct Controller*, s8);
|
||||
|
||||
void apply_cpu_turn(Player*, s16);
|
||||
|
||||
+3
-3
@@ -130,12 +130,12 @@ void spawn_player(Player* player, s8 playerIndex, f32 startingRow, f32 startingC
|
||||
player->velocity[2] = 0.0f;
|
||||
player->rotation[1] = arg5;
|
||||
player->rotation[2] = 0;
|
||||
player->unk_0FA = 0;
|
||||
player->steerPositionDelta = 0;
|
||||
player->unk_002 = 0;
|
||||
|
||||
player->effects = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->steerPosition = 0;
|
||||
player->unk_07A = 0;
|
||||
player->unk_006 = 0;
|
||||
player->lapCount = -1;
|
||||
@@ -191,7 +191,7 @@ void spawn_player(Player* player, s8 playerIndex, f32 startingRow, f32 startingC
|
||||
player->unk_0E0 = 0;
|
||||
player->unk_0E2 = 0;
|
||||
player->unk_10C = 0;
|
||||
player->unk_200 = 0;
|
||||
player->steerChangeIncrement = 0;
|
||||
player->driftDuration = 0;
|
||||
player->nearestPathPointId = 0;
|
||||
player->unk_228 = 0;
|
||||
|
||||
Reference in New Issue
Block a user