Mario Kart 64
Loading...
Searching...
No Matches
cpu_speed_control.inc.c
Go to the documentation of this file.
1void func_80007D04(s32 playerId, Player* player) {
2 s16 temp_t1;
3 s16 temp_t2;
4 s32 var_v0;
5
7 temp_t2 = gNumPathPointsTraversed[playerId];
8
9 if (gGPCurrentRaceRankByPlayerId[playerId] < 2) {
11 s16 val2 = temp_t2 - temp_t1;
12
13 if (val2 > 400 && val1 >= 6) {
14 player->effects &= ~UNKNOWN_EFFECT_0x200000;
15 player_accelerate(player);
16 D_801634C0[playerId] = 4;
17 return;
18 }
19 } else {
21 player_accelerate(player);
22 D_801634C0[playerId] = 3;
23 return;
24 }
25
26 switch (gCCSelection) { // WTF, FAKE ?
27 case CC_EXTRA:
28 break;
29 }
30
31 switch (gCCSelection) {
32 case CC_50:
33 var_v0 = 0;
34 if (playerId == D_80163344[0]) {
35 var_v0 = 0x14;
36 }
37 break;
38
39 case CC_100:
40 var_v0 = 8;
41 if (playerId == D_80163344[0]) {
42 var_v0 = 0x18;
43 }
44 break;
45
46 case CC_150:
47 var_v0 = 0x12;
48 if (playerId == D_80163344[0]) {
49 var_v0 = 0x24;
50 }
51 break;
52
53 case CC_EXTRA:
54 var_v0 = 8;
55 if (playerId == D_80163344[0]) {
56 var_v0 = 0x18;
57 }
58 break;
59
60 default:
61 var_v0 = 0;
62 break;
63 }
64
65 if (temp_t2 < temp_t1) {
67 player_accelerate(player);
68 D_801634C0[playerId] = 1;
69 } else if (temp_t2 < (temp_t1 + var_v0 + 0x32)) {
70 player->effects &= ~UNKNOWN_EFFECT_0x200000;
71 player_accelerate(player);
72 D_801634C0[playerId] = 3;
73 } else if (D_801631E0[playerId] == false) {
74 player->effects &= ~UNKNOWN_EFFECT_0x200000;
75 player_accelerate(player);
76 D_801634C0[playerId] = 2;
77 } else {
78 player->effects &= ~UNKNOWN_EFFECT_0x200000;
79 decelerate_player(player, 1.0f);
80 D_801634C0[playerId] = -1;
81 }
82}
83
84void func_80007FA4(s32 playerId, Player* player, f32 arg2) {
85 f32 temp_f0;
86 f32 dist;
87 f32 temp_f2;
88 s32 test;
89
90 temp_f0 = D_80163418[playerId] - player->pos[0];
91 temp_f2 = D_80163438[playerId] - player->pos[2];
92 dist = (temp_f0 * temp_f0) + (temp_f2 * temp_f2);
93 if (playerId == 3) {
94 if ((dist < 25.0f) && (D_80163410[playerId] < 5)) {
95 D_80163410[playerId] = 4;
96 (arg2 < ((2.0 * 18.0) / 216.0)) ? func_80038BE4(player, 1) : decelerate_player(player, 1.0f);
97 } else if ((dist < 3600.0f) && (D_80163410[playerId] < 4)) {
98 D_80163410[playerId] = 3;
99 (arg2 < ((5.0 * 18.0) / 216.0)) ? func_80038BE4(player, 1) : decelerate_player(player, 5.0f);
100 } else {
101 (arg2 < ((20.0 * 18.0) / 216.0)) ? func_80038BE4(player, 10) : decelerate_player(player, 1.0f);
102 }
103 } else {
104 if ((dist < 25.0f) && (D_80163410[playerId] < 5)) {
105 D_80163410[playerId] = 4;
106 test = 2;
107 (arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 1) : decelerate_player(player, 1.0f);
108 } else if ((dist < 4900.0f) && (D_80163410[playerId] < 4)) {
109 D_80163410[playerId] = 3;
110 test = 5;
111 (arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 1) : decelerate_player(player, 15.0f);
112 } else if ((dist < 22500.0f) && (D_80163410[playerId] < 3)) {
113 D_80163410[playerId] = 2;
114 test = 20;
115 (arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 5) : decelerate_player(player, 1.0f);
116 } else if ((dist < 90000.0f) && (D_80163410[playerId] < 2)) {
117 D_80163410[playerId] = 1;
118 test = 30;
119 (arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 6) : decelerate_player(player, 1.0f);
120 } else if (D_80163410[playerId] == 0) {
121 test = 35;
122 (arg2 < (((test ^ 0) * 18.0) / 216.0)) ? func_80038BE4(player, 2) : decelerate_player(player, 1.0f);
123 } else {
124 decelerate_player(player, 1.0f);
125 }
126 }
127}
128
129void regulate_cpu_speed(s32 playerId, f32 targetSpeed, Player* player) {
130 f32 speed;
131 f32 var_f0;
132 UNUSED s32 thing;
133 s32 var_a1;
134
135 speed = player->speed;
136 if (!(player->effects & 0x80) && !(player->effects & 0x40) && !(player->effects & 0x20000) &&
137 !(player->soundEffects & 0x400000) && !(player->soundEffects & 0x01000000) && !(player->soundEffects & 2) &&
138 !(player->soundEffects & 4)) {
140 func_80007FA4(playerId, player, speed);
141 } else if ((bStopAICrossing[playerId] == true) && !(player->effects & (STAR_EFFECT | BOO_EFFECT))) {
142 decelerate_player(player, 10.0f);
143 if (player->currentSpeed == 0.0) {
144 player->velocity[0] = 0.0f;
145 player->velocity[2] = 0.0f;
146 }
147 } else {
148 var_f0 = 3.3333333f;
149 switch (gCCSelection) { /* irregular */
150 case CC_100:
151 case CC_EXTRA:
152 break;
153 case CC_50:
154 var_f0 = 2.5f;
155 break;
156 case CC_150:
157 var_f0 = 3.75f;
158 break;
159 }
160 if (speed < var_f0) {
161 player->effects &= ~UNKNOWN_EFFECT_0x200000;
162 player_accelerate(player);
163 } else if (player->type & PLAYER_CINEMATIC_MODE) {
164 if (speed < targetSpeed) {
165 player->effects &= ~UNKNOWN_EFFECT_0x200000;
166 player_accelerate(player);
167 } else {
168 player->effects &= ~UNKNOWN_EFFECT_0x200000;
169 decelerate_player(player, 1.0f);
170 }
171 } else if ((D_801631E0[playerId] == true) && (D_80163330[playerId] != 1)) {
172 if (func_800088D8(playerId, gLapCountByPlayerId[playerId], gGPCurrentRaceRankByPlayerIdDup[playerId]) ==
173 1) {
175 player_accelerate(player);
176 } else {
177 player->effects &= ~UNKNOWN_EFFECT_0x200000;
178 decelerate_player(player, 1.0f);
179 }
180 } else {
181 var_a1 = 1;
182 switch (gSpeedCPUBehaviour[playerId]) { /* switch 1; irregular */
183 case SPEED_cpu_BEHAVIOUR_FAST: /* switch 1 */
184 player->effects &= ~UNKNOWN_EFFECT_0x200000;
185 player_accelerate(player);
186 break;
187 case SPEED_cpu_BEHAVIOUR_MAX: /* switch 1 */
189 player_accelerate(player);
190 break;
191 case SPEED_cpu_BEHAVIOUR_SLOW: /* switch 1 */
192 if (((speed / 18.0f) * 216.0f) > 20.0f) {
193 targetSpeed = 1.6666666f;
194 }
195 var_a1 = 0;
196 break;
197 case SPEED_cpu_BEHAVIOUR_NORMAL: /* switch 1 */
198 default: /* switch 1 */
199 var_a1 = 0;
200 break;
201 }
202 if (var_a1 != 1) {
203 if (speed < targetSpeed) {
205 player_accelerate(player);
206 } else if (D_80163330[playerId] == 1) {
207 func_80007D04(playerId, player);
208 } else if (func_800088D8(playerId, gLapCountByPlayerId[playerId],
209 gGPCurrentRaceRankByPlayerIdDup[playerId]) == true) {
211 player_accelerate(player);
212 } else {
213 player->effects &= ~UNKNOWN_EFFECT_0x200000;
214 decelerate_player(player, 1.0f);
215 }
216 } else {
217 player->effects &= ~UNKNOWN_EFFECT_0x200000;
218 if (targetSpeed > 1.0f) {
219 decelerate_player(player, 2.0f);
220 } else {
221 decelerate_player(player, 5.0f);
222 }
223 }
224 }
225 }
226 }
227 }
228}
s16 gCurrentCourseId
Definition code_800029B0.c:30
@ COURSE_AWARD_CEREMONY
Definition course.h:51
void func_80007FA4(s32 playerId, Player *player, f32 arg2)
Definition cpu_speed_control.inc.c:84
void func_80007D04(s32 playerId, Player *player)
Definition cpu_speed_control.inc.c:1
void regulate_cpu_speed(s32 playerId, f32 targetSpeed, Player *player)
Definition cpu_speed_control.inc.c:129
s32 gLapCountByPlayerId[10]
Definition cpu_vehicles_camera_path.c:158
s16 D_80163410[4]
Definition cpu_vehicles_camera_path.c:115
u16 D_80163344[2]
Definition cpu_vehicles_camera_path.c:102
u16 D_801631E0[12]
Definition cpu_vehicles_camera_path.c:86
s32 gNumPathPointsTraversed[10]
Definition cpu_vehicles_camera_path.c:164
s16 gBestRankedHumanPlayer
Definition cpu_vehicles_camera_path.c:122
s32 gGPCurrentRaceRankByPlayerIdDup[10]
Definition cpu_vehicles_camera_path.c:161
f32 D_80163418[4]
Definition cpu_vehicles_camera_path.c:116
f32 D_80163438[4]
Definition cpu_vehicles_camera_path.c:118
s32 gGPCurrentRaceRankByPlayerId[10]
Definition cpu_vehicles_camera_path.c:159
u16 D_80163330[10]
Definition cpu_vehicles_camera_path.c:101
u16 gSpeedCPUBehaviour[12]
Definition cpu_vehicles_camera_path.c:105
s16 bStopAICrossing[10]
Definition cpu_vehicles_camera_path.c:133
s16 D_801634C0[12]
Definition cpu_vehicles_camera_path.c:132
bool func_800088D8(s32, s16, s16)
@ SPEED_cpu_BEHAVIOUR_MAX
Definition cpu_vehicles_camera_path.h:350
@ SPEED_cpu_BEHAVIOUR_FAST
Definition cpu_vehicles_camera_path.h:350
@ SPEED_cpu_BEHAVIOUR_NORMAL
Definition cpu_vehicles_camera_path.h:350
@ SPEED_cpu_BEHAVIOUR_SLOW
Definition cpu_vehicles_camera_path.h:350
#define BOO_EFFECT
Definition defines.h:346
#define CC_EXTRA
Definition defines.h:137
#define PLAYER_CINEMATIC_MODE
Definition defines.h:76
#define CC_50
Options for gCCSelection CC stands for cubic-centimetres. It measures engine displacement composed fr...
Definition defines.h:134
#define CC_150
Definition defines.h:136
#define STAR_EFFECT
Definition defines.h:335
#define UNKNOWN_EFFECT_0x200000
Definition defines.h:339
#define CC_100
Definition defines.h:135
#define UNUSED
Definition macros.h:23
s32 gCCSelection
Definition main.c:181
u16 gDemoMode
Definition main.c:169
void player_accelerate(Player *player)
Definition player_controller.c:3214
void func_80038BE4(Player *player, s16 arg1)
Definition player_controller.c:4787
void decelerate_player(Player *player, f32 speed)
Definition player_controller.c:3327
Definition common_structs.h:249
f32 currentSpeed
Definition common_structs.h:286
f32 speed
Definition common_structs.h:284
u32 effects
Definition common_structs.h:298
u16 type
Definition common_structs.h:250
Vec3f velocity
Definition common_structs.h:263
s32 soundEffects
Definition common_structs.h:256
Vec3f pos
Definition common_structs.h:259
Definition actors.c:1474
signed int s32
Definition ultratypes.h:15
signed short int s16
Definition ultratypes.h:13
float f32
Definition ultratypes.h:34