Skip to content

Commit 8ee86d4

Browse files
authored
DriftStateCounter (#763)
* Document driftStateCounter * name update_drift_state_counter function
1 parent bb8d234 commit 8ee86d4

5 files changed

Lines changed: 49 additions & 43 deletions

File tree

include/common_structs.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ typedef struct {
328328
/* 0x01F8 */ f32 unk_1F8;
329329
/* 0x01FC */ f32 unk_1FC;
330330
/* 0x0200 */ u32 steerChangeIncrement; // May be s32. but less casting required if u32
331-
/* 0x0204 */ s16 driftDuration;
331+
/* 0x0204 */ s16 driftDuration; // charges up while drifting, primarily protects against driving spinouts
332332
/* 0x0206 */ s16 unk_206;
333333
/* 0x0208 */ f32 unk_208;
334334
/* 0x020C */ f32 unk_20C;
@@ -339,7 +339,7 @@ typedef struct {
339339
/* 0x0220 */ s16 nearestPathPointId; // ??
340340
/* 0x0222 */ s16 unk_222;
341341
/* 0x0224 */ f32 size;
342-
/* 0x0228 */ s16 unk_228;
342+
/* 0x0228 */ s16 driftStateCounter;
343343
/* 0x022A */ s16 driftState;
344344
/* 0x022C */ f32 previousSpeed;
345345
/* 0x0230 */ f32 unk_230;

src/code_80057C60.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5044,7 +5044,7 @@ void render_player_drift_particles(Player* player, UNUSED s8 playerIndex, s16 ar
50445044
s16 envBlue;
50455045
s32 sp8C[] = { 0x00ffffff, 0x00ffff00, 0x00ff9600 };
50465046
if (player->particlePool1[arg2].isAlive == 1) {
5047-
if (player->driftDuration >= 0x32) {
5047+
if (player->driftDuration >= 50) {
50485048
var_s0 = 1;
50495049
} else {
50505050
var_s0 = 0;

src/player_controller.c

Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,7 +1126,7 @@ void func_8002A79C(Player* player, s8 playerIndex) {
11261126
player->effects |= MINI_TURBO_EFFECT;
11271127
player->unk_23A = 0;
11281128
player->driftState = 0;
1129-
player->unk_228 = 0;
1129+
player->driftStateCounter = 0;
11301130
if (D_8015F890 != 1) {
11311131
if ((player->type & PLAYER_HUMAN) && !(player->type & PLAYER_INVISIBLE_OR_BOMB)) {
11321132
func_800C9250(playerIndex);
@@ -1140,50 +1140,50 @@ void func_8002A79C(Player* player, s8 playerIndex) {
11401140
player->unk_23A = 0;
11411141
player->effects &= ~MINI_TURBO_EFFECT;
11421142
player->driftState = 0;
1143-
player->unk_228 = 0;
1143+
player->driftStateCounter = 0;
11441144
}
11451145
}
11461146
}
11471147

1148-
void func_8002A8A4(Player* player, s8 playerIndex) {
1148+
void update_drift_state_counter(Player* player, s8 playerIndex) {
11491149
if (((s16) player->unk_0C0 / DEGREES_CONVERSION_FACTOR) > 0) {
11501150
if (((s32) player->steerPosition >> 16) <= -10) {
1151-
if (player->unk_228 < 0x65) {
1152-
player->unk_228++;
1151+
if (player->driftStateCounter <= 100) {
1152+
player->driftStateCounter++;
11531153
}
1154-
if ((player->unk_228 == 0x0064) && (player->type & PLAYER_HUMAN)) {
1154+
if ((player->driftStateCounter == 100) && (player->type & PLAYER_HUMAN)) {
11551155
func_800C9060(playerIndex, 0x1900851EU);
11561156
}
11571157
} else {
1158-
if ((player->unk_228 >= 0x12) && (player->unk_228 < 0x64)) {
1158+
if ((player->driftStateCounter >= 18) && (player->driftStateCounter < 100)) {
11591159
if (player->driftState < 3) {
11601160
player->driftState++;
11611161
}
11621162
}
1163-
if ((player->unk_228 >= 0xA) && (player->unk_228 < 0x64)) {
1164-
player->unk_228 = 0x000A;
1163+
if ((player->driftStateCounter >= 10) && (player->driftStateCounter < 100)) {
1164+
player->driftStateCounter = 10;
11651165
} else {
1166-
player->unk_228 = 0;
1166+
player->driftStateCounter = 0;
11671167
player->driftState = 0;
11681168
}
11691169
}
11701170
} else if (((s32) player->steerPosition >> 16) >= 10) {
1171-
if (player->unk_228 < 0x65) {
1172-
player->unk_228++;
1171+
if (player->driftStateCounter <= 100) {
1172+
player->driftStateCounter++;
11731173
}
1174-
if ((player->unk_228 == 0x0064) && (player->type & PLAYER_HUMAN)) {
1174+
if ((player->driftStateCounter == 100) && (player->type & PLAYER_HUMAN)) {
11751175
func_800C9060(playerIndex, 0x1900851EU);
11761176
}
11771177
} else {
1178-
if ((player->unk_228 >= 0x12) && (player->unk_228 < 0x64)) {
1178+
if ((player->driftStateCounter >= 18) && (player->driftStateCounter < 100)) {
11791179
if (player->driftState < 3) {
11801180
player->driftState++;
11811181
}
11821182
}
1183-
if ((player->unk_228 >= 0xA) && (player->unk_228 < 0x64)) {
1184-
player->unk_228 = 0x000A;
1183+
if ((player->driftStateCounter >= 10) && (player->driftStateCounter < 100)) {
1184+
player->driftStateCounter = 10;
11851185
} else {
1186-
player->unk_228 = 0;
1186+
player->driftStateCounter = 0;
11871187
player->driftState = 0;
11881188
}
11891189
}
@@ -1755,7 +1755,7 @@ void func_8002BF4C(Player* player, s8 playerIndex) {
17551755
void update_player_drift_duration(Player* player) {
17561756
if ((player->effects & DRIFTING_EFFECT) == DRIFTING_EFFECT) {
17571757
player->driftDuration += 1;
1758-
if (player->driftDuration >= 101) {
1758+
if (player->driftDuration > 100) {
17591759
player->driftDuration = 100;
17601760
}
17611761
} else {
@@ -2013,7 +2013,7 @@ void apply_effect(Player* player, s8 playerIndex, s8 arg2) {
20132013
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
20142014
apply_boo_effect(player, playerIndex);
20152015
}
2016-
if (((player->effects & DRIFT_OUTSIDE_EFFECT) == DRIFT_OUTSIDE_EFFECT) && (player->unk_228 >= 0x64)) {
2016+
if (((player->effects & DRIFT_OUTSIDE_EFFECT) == DRIFT_OUTSIDE_EFFECT) && (player->driftStateCounter >= 100)) {
20172017
player_decelerate_alternative(player, 4.0f);
20182018
}
20192019
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
21452145
func_8002BF4C(player, playerId);
21462146
}
21472147
apply_effect(player, playerId, screenId);
2148-
if (((player->effects & DRIFT_OUTSIDE_EFFECT) == DRIFT_OUTSIDE_EFFECT) && (player->unk_228 >= 0x64)) {
2148+
if (((player->effects & DRIFT_OUTSIDE_EFFECT) == DRIFT_OUTSIDE_EFFECT) && (player->driftStateCounter >= 100)) {
21492149
sp7C = 2;
21502150
}
21512151
func_80037BB4(player, sp160);
@@ -3046,7 +3046,7 @@ f32 func_80030150(Player* player, s8 playerIndex) {
30463046
var_f0 += var_v0 * (0.01 + gKartTurnSpeedReductionTable0[player->characterId]);
30473047
}
30483048
}
3049-
if (((player->effects & DRIFT_OUTSIDE_EFFECT) == DRIFT_OUTSIDE_EFFECT) && (player->unk_228 < 0xA)) {
3049+
if (((player->effects & DRIFT_OUTSIDE_EFFECT) == DRIFT_OUTSIDE_EFFECT) && (player->driftStateCounter < 10)) {
30503050
if (var_v0 < 0) {
30513051
var_f0 += -var_v0 * 0.008;
30523052
} else {
@@ -3924,13 +3924,20 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 playerIndex
39243924
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,
39253925
0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8 };
39263926

3927-
if (((((player->effects & HOP_EFFECT) != HOP_EFFECT) &&
3928-
((((player->unk_0C0 / 182) <= 6) && ((player->unk_0C0 / 182) >= (-6))) ||
3929-
((controller->button & R_TRIG) != R_TRIG))) ||
3930-
(((player->speed / 18.0f) * 216.0f) <= 20.0f)) ||
3931-
((player->effects & ENEMY_BONK_EFFECT) == ENEMY_BONK_EFFECT)) {
3932-
func_80036CB4(player);
3927+
if (
3928+
(
3929+
((player->effects & HOP_EFFECT) != HOP_EFFECT) &&
3930+
(
3931+
((player->unk_0C0 / DEGREES_CONVERSION_FACTOR <= 6) && (player->unk_0C0 / DEGREES_CONVERSION_FACTOR >= -6)) ||
3932+
((controller->button & R_TRIG) != R_TRIG)
3933+
)
3934+
) ||
3935+
(((player->speed / 18.0f) * 216.0f) <= 20.0f) ||
3936+
((player->effects & ENEMY_BONK_EFFECT) == ENEMY_BONK_EFFECT)
3937+
) {
3938+
cancel_drift_effect(player);
39333939
}
3940+
39343941
if ((player->unk_0C0 / DEGREES_CONVERSION_FACTOR) < (-5)) {
39353942
player->kartProps |= LEFT_TURN;
39363943
player->kartProps &= ~RIGHT_TURN;
@@ -4180,7 +4187,7 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 playerIndex
41804187
player->unk_078 = (player->steerPosition >> 16) * ((var_f2_2 + 1.6) + (var_f2_2 * var_f12));
41814188
}
41824189
}
4183-
player->unk_228 = 0;
4190+
player->driftStateCounter = 0;
41844191
if (player->driftState < 2) {
41854192
player->driftState = 0;
41864193
}
@@ -4195,7 +4202,7 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 playerIndex
41954202
player->effects |= DRIFT_OUTSIDE_EFFECT;
41964203
}
41974204
}
4198-
func_8002A8A4(player, playerIndex);
4205+
update_drift_state_counter(player, playerIndex);
41994206
} else {
42004207
// linear map, sets -53 to -53 and 53 to -40
42014208
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
42054212
player->effects |= DRIFT_OUTSIDE_EFFECT;
42064213
}
42074214
}
4208-
func_8002A8A4(player, playerIndex);
4215+
update_drift_state_counter(player, playerIndex);
42094216
}
42104217
if ((((player->speed / 18.0f) * 216.0f) >= 0.0f) && (((player->speed / 18.0f) * 216.0f) < 8.0f)) {
42114218
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) {
42644271
(player->effects & HIT_BY_STAR_EFFECT) || (player->effects & SQUISH_EFFECT))) {
42654272
if (!(((player->speed / 18.0f) * 216.0f) >= 110.0f)) {
42664273
player->effects &= ~DRIFT_OUTSIDE_EFFECT;
4267-
player->unk_228 = 0;
4274+
player->driftStateCounter = 0;
42684275
if (!(player->effects & BANANA_SPINOUT_EFFECT) && !(player->effects & DRIVING_SPINOUT_EFFECT)) {
42694276
sp304 = (s32) player->steerPosition >> 16;
42704277
move_s32_towards(&sp304, (s32) targetAngle, 0.35f);
@@ -4308,11 +4315,10 @@ void apply_cpu_turn(Player* player, s16 targetAngle) {
43084315
}
43094316
player->unk_078 = var_v0 * var_f0;
43104317
}
4311-
if ((((player->effects & HOP_EFFECT) != HOP_EFFECT) && (player->unk_0C0 < 0x3D) &&
4312-
(player->unk_0C0 > -0x3D)) ||
4318+
if ((((player->effects & HOP_EFFECT) != HOP_EFFECT) && (player->unk_0C0 <= 60) && (player->unk_0C0 >= -60)) ||
43134319
(((player->speed / 18.0f) * 216.0f) <= 20.0f) ||
43144320
((player->effects & ENEMY_BONK_EFFECT) == ENEMY_BONK_EFFECT)) {
4315-
func_80036CB4(player);
4321+
cancel_drift_effect(player);
43164322
}
43174323
}
43184324
}
@@ -4327,7 +4333,7 @@ void func_80036C5C(Player* player) {
43274333
}
43284334
}
43294335

4330-
void func_80036CB4(Player* player) {
4336+
void cancel_drift_effect(Player* player) {
43314337
s32 steer_position_new;
43324338

43334339
if (((player->effects & DRIFTING_EFFECT) == DRIFTING_EFFECT) && ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN)) {
@@ -4597,7 +4603,7 @@ void func_80037BB4(Player* player, Vec3f arg1) {
45974603
arg1[2] = 0.0f;
45984604
} else {
45994605
if (player->unk_078 < 0) {
4600-
if (((player->effects & DRIFT_OUTSIDE_EFFECT) != DRIFT_OUTSIDE_EFFECT) || (player->unk_228 >= 0x64)) {
4606+
if (((player->effects & DRIFT_OUTSIDE_EFFECT) != DRIFT_OUTSIDE_EFFECT) || (player->driftStateCounter >= 100)) {
46014607
player->rotation[1] += player->unk_078;
46024608
}
46034609
if (!(player->type & PLAYER_CPU)) {
@@ -4610,7 +4616,7 @@ void func_80037BB4(Player* player, Vec3f arg1) {
46104616
func_80037614(player, sp20, arg1);
46114617
}
46124618
} else {
4613-
if (((player->effects & DRIFT_OUTSIDE_EFFECT) != DRIFT_OUTSIDE_EFFECT) || (player->unk_228 >= 0x64)) {
4619+
if (((player->effects & DRIFT_OUTSIDE_EFFECT) != DRIFT_OUTSIDE_EFFECT) || (player->driftStateCounter >= 100)) {
46144620
player->rotation[1] += player->unk_078;
46154621
}
46164622
if (!(player->type & PLAYER_CPU)) {

src/player_controller.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ void func_8002A194(Player*, f32, f32, f32);
3535
void func_8002A5F4(Vec3f, f32, Vec3f, f32, f32);
3636
void func_8002A704(Player*, s8);
3737
void func_8002A79C(Player*, s8);
38-
void func_8002A8A4(Player*, s8);
38+
void update_drift_state_counter(Player*, s8);
3939
void kart_hop(Player*);
4040
void func_8002AAC0(Player*);
4141
void func_8002AB70(Player*);
@@ -93,7 +93,7 @@ void func_80033AE0(Player*, struct Controller*, s8);
9393

9494
void apply_cpu_turn(Player*, s16);
9595
void func_80036C5C(Player*);
96-
void func_80036CB4(Player*);
96+
void cancel_drift_effect(Player*);
9797
void func_80036DB4(Player*, Vec3f, Vec3f);
9898

9999
void func_800371F4(Player*, Vec3f, Vec3f);

src/spawn_players.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ void spawn_player(Player* player, s8 playerIndex, f32 startingRow, f32 startingC
194194
player->steerChangeIncrement = 0;
195195
player->driftDuration = 0;
196196
player->nearestPathPointId = 0;
197-
player->unk_228 = 0;
197+
player->driftStateCounter = 0;
198198
player->driftState = 0;
199199
player->unk_234 = 0;
200200
player->unk_236 = 0;

0 commit comments

Comments
 (0)