DriftStateCounter (#763)

* Document driftStateCounter

* name update_drift_state_counter function
This commit is contained in:
Jed Grabman
2026-04-17 20:11:43 -04:00
committed by GitHub
parent bb8d234152
commit 8ee86d4c78
5 changed files with 49 additions and 43 deletions
+2 -2
View File
@@ -328,7 +328,7 @@ typedef struct {
/* 0x01F8 */ f32 unk_1F8;
/* 0x01FC */ f32 unk_1FC;
/* 0x0200 */ u32 steerChangeIncrement; // May be s32. but less casting required if u32
/* 0x0204 */ s16 driftDuration;
/* 0x0204 */ s16 driftDuration; // charges up while drifting, primarily protects against driving spinouts
/* 0x0206 */ s16 unk_206;
/* 0x0208 */ f32 unk_208;
/* 0x020C */ f32 unk_20C;
@@ -339,7 +339,7 @@ typedef struct {
/* 0x0220 */ s16 nearestPathPointId; // ??
/* 0x0222 */ s16 unk_222;
/* 0x0224 */ f32 size;
/* 0x0228 */ s16 unk_228;
/* 0x0228 */ s16 driftStateCounter;
/* 0x022A */ s16 driftState;
/* 0x022C */ f32 previousSpeed;
/* 0x0230 */ f32 unk_230;
+1 -1
View File
@@ -5044,7 +5044,7 @@ void render_player_drift_particles(Player* player, UNUSED s8 playerIndex, s16 ar
s16 envBlue;
s32 sp8C[] = { 0x00ffffff, 0x00ffff00, 0x00ff9600 };
if (player->particlePool1[arg2].isAlive == 1) {
if (player->driftDuration >= 0x32) {
if (player->driftDuration >= 50) {
var_s0 = 1;
} else {
var_s0 = 0;
+43 -37
View File
@@ -1126,7 +1126,7 @@ void func_8002A79C(Player* player, s8 playerIndex) {
player->effects |= MINI_TURBO_EFFECT;
player->unk_23A = 0;
player->driftState = 0;
player->unk_228 = 0;
player->driftStateCounter = 0;
if (D_8015F890 != 1) {
if ((player->type & PLAYER_HUMAN) && !(player->type & PLAYER_INVISIBLE_OR_BOMB)) {
func_800C9250(playerIndex);
@@ -1140,50 +1140,50 @@ void func_8002A79C(Player* player, s8 playerIndex) {
player->unk_23A = 0;
player->effects &= ~MINI_TURBO_EFFECT;
player->driftState = 0;
player->unk_228 = 0;
player->driftStateCounter = 0;
}
}
}
void func_8002A8A4(Player* player, s8 playerIndex) {
void update_drift_state_counter(Player* player, s8 playerIndex) {
if (((s16) player->unk_0C0 / DEGREES_CONVERSION_FACTOR) > 0) {
if (((s32) player->steerPosition >> 16) <= -10) {
if (player->unk_228 < 0x65) {
player->unk_228++;
if (player->driftStateCounter <= 100) {
player->driftStateCounter++;
}
if ((player->unk_228 == 0x0064) && (player->type & PLAYER_HUMAN)) {
if ((player->driftStateCounter == 100) && (player->type & PLAYER_HUMAN)) {
func_800C9060(playerIndex, 0x1900851EU);
}
} else {
if ((player->unk_228 >= 0x12) && (player->unk_228 < 0x64)) {
if ((player->driftStateCounter >= 18) && (player->driftStateCounter < 100)) {
if (player->driftState < 3) {
player->driftState++;
}
}
if ((player->unk_228 >= 0xA) && (player->unk_228 < 0x64)) {
player->unk_228 = 0x000A;
if ((player->driftStateCounter >= 10) && (player->driftStateCounter < 100)) {
player->driftStateCounter = 10;
} else {
player->unk_228 = 0;
player->driftStateCounter = 0;
player->driftState = 0;
}
}
} else if (((s32) player->steerPosition >> 16) >= 10) {
if (player->unk_228 < 0x65) {
player->unk_228++;
if (player->driftStateCounter <= 100) {
player->driftStateCounter++;
}
if ((player->unk_228 == 0x0064) && (player->type & PLAYER_HUMAN)) {
if ((player->driftStateCounter == 100) && (player->type & PLAYER_HUMAN)) {
func_800C9060(playerIndex, 0x1900851EU);
}
} else {
if ((player->unk_228 >= 0x12) && (player->unk_228 < 0x64)) {
if ((player->driftStateCounter >= 18) && (player->driftStateCounter < 100)) {
if (player->driftState < 3) {
player->driftState++;
}
}
if ((player->unk_228 >= 0xA) && (player->unk_228 < 0x64)) {
player->unk_228 = 0x000A;
if ((player->driftStateCounter >= 10) && (player->driftStateCounter < 100)) {
player->driftStateCounter = 10;
} else {
player->unk_228 = 0;
player->driftStateCounter = 0;
player->driftState = 0;
}
}
@@ -1755,7 +1755,7 @@ void func_8002BF4C(Player* player, s8 playerIndex) {
void update_player_drift_duration(Player* player) {
if ((player->effects & DRIFTING_EFFECT) == DRIFTING_EFFECT) {
player->driftDuration += 1;
if (player->driftDuration >= 101) {
if (player->driftDuration > 100) {
player->driftDuration = 100;
}
} else {
@@ -2013,7 +2013,7 @@ void apply_effect(Player* player, s8 playerIndex, s8 arg2) {
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
apply_boo_effect(player, playerIndex);
}
if (((player->effects & DRIFT_OUTSIDE_EFFECT) == DRIFT_OUTSIDE_EFFECT) && (player->unk_228 >= 0x64)) {
if (((player->effects & DRIFT_OUTSIDE_EFFECT) == DRIFT_OUTSIDE_EFFECT) && (player->driftStateCounter >= 100)) {
player_decelerate_alternative(player, 4.0f);
}
if (((player->effects & BANANA_SPINOUT_EFFECT) == BANANA_SPINOUT_EFFECT) ||
@@ -2145,7 +2145,7 @@ void func_8002D268(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
func_8002BF4C(player, playerId);
}
apply_effect(player, playerId, screenId);
if (((player->effects & DRIFT_OUTSIDE_EFFECT) == DRIFT_OUTSIDE_EFFECT) && (player->unk_228 >= 0x64)) {
if (((player->effects & DRIFT_OUTSIDE_EFFECT) == DRIFT_OUTSIDE_EFFECT) && (player->driftStateCounter >= 100)) {
sp7C = 2;
}
func_80037BB4(player, sp160);
@@ -3046,7 +3046,7 @@ f32 func_80030150(Player* player, s8 playerIndex) {
var_f0 += var_v0 * (0.01 + gKartTurnSpeedReductionTable0[player->characterId]);
}
}
if (((player->effects & DRIFT_OUTSIDE_EFFECT) == DRIFT_OUTSIDE_EFFECT) && (player->unk_228 < 0xA)) {
if (((player->effects & DRIFT_OUTSIDE_EFFECT) == DRIFT_OUTSIDE_EFFECT) && (player->driftStateCounter < 10)) {
if (var_v0 < 0) {
var_f0 += -var_v0 * 0.008;
} else {
@@ -3924,13 +3924,20 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 playerIndex
0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8,
0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8 };
if (((((player->effects & HOP_EFFECT) != HOP_EFFECT) &&
((((player->unk_0C0 / 182) <= 6) && ((player->unk_0C0 / 182) >= (-6))) ||
((controller->button & R_TRIG) != R_TRIG))) ||
(((player->speed / 18.0f) * 216.0f) <= 20.0f)) ||
((player->effects & ENEMY_BONK_EFFECT) == ENEMY_BONK_EFFECT)) {
func_80036CB4(player);
if (
(
((player->effects & HOP_EFFECT) != HOP_EFFECT) &&
(
((player->unk_0C0 / DEGREES_CONVERSION_FACTOR <= 6) && (player->unk_0C0 / DEGREES_CONVERSION_FACTOR >= -6)) ||
((controller->button & R_TRIG) != R_TRIG)
)
) ||
(((player->speed / 18.0f) * 216.0f) <= 20.0f) ||
((player->effects & ENEMY_BONK_EFFECT) == ENEMY_BONK_EFFECT)
) {
cancel_drift_effect(player);
}
if ((player->unk_0C0 / DEGREES_CONVERSION_FACTOR) < (-5)) {
player->kartProps |= LEFT_TURN;
player->kartProps &= ~RIGHT_TURN;
@@ -4180,7 +4187,7 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 playerIndex
player->unk_078 = (player->steerPosition >> 16) * ((var_f2_2 + 1.6) + (var_f2_2 * var_f12));
}
}
player->unk_228 = 0;
player->driftStateCounter = 0;
if (player->driftState < 2) {
player->driftState = 0;
}
@@ -4195,7 +4202,7 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 playerIndex
player->effects |= DRIFT_OUTSIDE_EFFECT;
}
}
func_8002A8A4(player, playerIndex);
update_drift_state_counter(player, playerIndex);
} else {
// linear map, sets -53 to -53 and 53 to -40
var_s1_2 = (((s32) (((player->steerPosition >> 16) * 13) + (13 * 53))) / (2 * 53)) - 53;
@@ -4205,7 +4212,7 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 playerIndex
player->effects |= DRIFT_OUTSIDE_EFFECT;
}
}
func_8002A8A4(player, playerIndex);
update_drift_state_counter(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))));
@@ -4264,7 +4271,7 @@ void apply_cpu_turn(Player* player, s16 targetAngle) {
(player->effects & HIT_BY_STAR_EFFECT) || (player->effects & SQUISH_EFFECT))) {
if (!(((player->speed / 18.0f) * 216.0f) >= 110.0f)) {
player->effects &= ~DRIFT_OUTSIDE_EFFECT;
player->unk_228 = 0;
player->driftStateCounter = 0;
if (!(player->effects & BANANA_SPINOUT_EFFECT) && !(player->effects & DRIVING_SPINOUT_EFFECT)) {
sp304 = (s32) player->steerPosition >> 16;
move_s32_towards(&sp304, (s32) targetAngle, 0.35f);
@@ -4308,11 +4315,10 @@ void apply_cpu_turn(Player* player, s16 targetAngle) {
}
player->unk_078 = var_v0 * var_f0;
}
if ((((player->effects & HOP_EFFECT) != HOP_EFFECT) && (player->unk_0C0 < 0x3D) &&
(player->unk_0C0 > -0x3D)) ||
if ((((player->effects & HOP_EFFECT) != HOP_EFFECT) && (player->unk_0C0 <= 60) && (player->unk_0C0 >= -60)) ||
(((player->speed / 18.0f) * 216.0f) <= 20.0f) ||
((player->effects & ENEMY_BONK_EFFECT) == ENEMY_BONK_EFFECT)) {
func_80036CB4(player);
cancel_drift_effect(player);
}
}
}
@@ -4327,7 +4333,7 @@ void func_80036C5C(Player* player) {
}
}
void func_80036CB4(Player* player) {
void cancel_drift_effect(Player* player) {
s32 steer_position_new;
if (((player->effects & DRIFTING_EFFECT) == DRIFTING_EFFECT) && ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN)) {
@@ -4597,7 +4603,7 @@ void func_80037BB4(Player* player, Vec3f arg1) {
arg1[2] = 0.0f;
} else {
if (player->unk_078 < 0) {
if (((player->effects & DRIFT_OUTSIDE_EFFECT) != DRIFT_OUTSIDE_EFFECT) || (player->unk_228 >= 0x64)) {
if (((player->effects & DRIFT_OUTSIDE_EFFECT) != DRIFT_OUTSIDE_EFFECT) || (player->driftStateCounter >= 100)) {
player->rotation[1] += player->unk_078;
}
if (!(player->type & PLAYER_CPU)) {
@@ -4610,7 +4616,7 @@ void func_80037BB4(Player* player, Vec3f arg1) {
func_80037614(player, sp20, arg1);
}
} else {
if (((player->effects & DRIFT_OUTSIDE_EFFECT) != DRIFT_OUTSIDE_EFFECT) || (player->unk_228 >= 0x64)) {
if (((player->effects & DRIFT_OUTSIDE_EFFECT) != DRIFT_OUTSIDE_EFFECT) || (player->driftStateCounter >= 100)) {
player->rotation[1] += player->unk_078;
}
if (!(player->type & PLAYER_CPU)) {
+2 -2
View File
@@ -35,7 +35,7 @@ void func_8002A194(Player*, f32, f32, f32);
void func_8002A5F4(Vec3f, f32, Vec3f, f32, f32);
void func_8002A704(Player*, s8);
void func_8002A79C(Player*, s8);
void func_8002A8A4(Player*, s8);
void update_drift_state_counter(Player*, s8);
void kart_hop(Player*);
void func_8002AAC0(Player*);
void func_8002AB70(Player*);
@@ -93,7 +93,7 @@ void func_80033AE0(Player*, struct Controller*, s8);
void apply_cpu_turn(Player*, s16);
void func_80036C5C(Player*);
void func_80036CB4(Player*);
void cancel_drift_effect(Player*);
void func_80036DB4(Player*, Vec3f, Vec3f);
void func_800371F4(Player*, Vec3f, Vec3f);
+1 -1
View File
@@ -194,7 +194,7 @@ void spawn_player(Player* player, s8 playerIndex, f32 startingRow, f32 startingC
player->steerChangeIncrement = 0;
player->driftDuration = 0;
player->nearestPathPointId = 0;
player->unk_228 = 0;
player->driftStateCounter = 0;
player->driftState = 0;
player->unk_234 = 0;
player->unk_236 = 0;