mirror of https://github.com/n64decomp/mk64
Player bitflag attributes (#750)
* unk_044 initial documentation * Define player.unk_044 magic values * Turns more than 5 degrees * Lakitu Effects * UNK_0B6 (effect graphics) documentation * UNK_002 documentation * Document UNK_0DE and define magic values * Use defined player types * Rename `player->unk_0CA` to `lakitu_props` * rename `player->unk_0B6` to `kart_graphics` * Rename `player->unk_0DE` to `oobProps` * rename `player->unk_044` to kartProps * Formatting updates * Use camelCase instead of snake_case for player properties * Fix reference to wrong attribute in comment * Rename `PRESS_A` to `THROTTLE` Rename `PRESS_A` to `THROTTLE` to describe the Kart state, which may be slightly different than just pressing A.
This commit is contained in:
parent
e49fe2acfc
commit
d3feca2536
|
|
@ -263,7 +263,7 @@ typedef struct {
|
|||
/* 0x0034 */ Vec3f velocity;
|
||||
/* 0x0040 */ s16 unk_040;
|
||||
/* 0x0042 */ s16 unk_042;
|
||||
/* 0x0044 */ s16 unk_044;
|
||||
/* 0x0044 */ s16 kartProps;
|
||||
/* 0x0046 */ u16 unk_046;
|
||||
/* 0x0048 */ Vec4s unk_048;
|
||||
/* 0x0050 */ Vec4s unk_050;
|
||||
|
|
@ -293,7 +293,7 @@ typedef struct {
|
|||
/* 0x00B0 */ s16 unk_0B0;
|
||||
/* 0x00B2 */ s16 unk_0B2;
|
||||
/* 0x00B4 */ u16 unk_0B4;
|
||||
/* 0x00B6 */ u16 unk_0B6;
|
||||
/* 0x00B6 */ u16 kartGraphics;
|
||||
/* 0x00B8 */ f32 unk_0B8;
|
||||
/* 0x00BC */ u32 effects;
|
||||
/* 0x00C0 */ s16 unk_0C0;
|
||||
|
|
@ -301,11 +301,11 @@ typedef struct {
|
|||
/* 0x00C4 */ s16 slopeAccel;
|
||||
/* 0x00C6 */ s16 alpha;
|
||||
/* 0x00C8 */ s16 unk_0C8;
|
||||
/* 0x00CA */ s16 unk_0CA;
|
||||
/* 0x00CA */ s16 lakituProps;
|
||||
/* 0x00CC */ Vec4s unk_0CC;
|
||||
/* 0x00D4 */ Vec4s unk_0D4;
|
||||
/* 0x00DC */ s16 boostTimer;
|
||||
/* 0x00DE */ u16 unk_0DE;
|
||||
/* 0x00DE */ u16 oobProps;
|
||||
/* 0x00E0 */ s16 unk_0E0;
|
||||
/* 0x00E2 */ s16 unk_0E2;
|
||||
/* 0x00E4 */ f32 unk_0E4;
|
||||
|
|
|
|||
|
|
@ -93,7 +93,9 @@
|
|||
* Used in the Player struct's 'type' member: player->type
|
||||
*/
|
||||
#define PLAYER_INACTIVE 0 // 0x0000
|
||||
#define PLAYER_UNKNOWN_0x10 (1 << 4) // 0x0010 // unused?
|
||||
#define PLAYER_UNKNOWN_0x40 (1 << 6) // 0x0040
|
||||
#define PLAYER_UNKNOWN_0x80 (1 << 7) // 0x0080 // UNUSED
|
||||
#define PLAYER_INVISIBLE_OR_BOMB (1 << 8) // 0x0100
|
||||
#define PLAYER_STAGING (1 << 9) // 0x0200
|
||||
#define PLAYER_UNKNOWN (1 << 10) // 0x0400 // unused ?
|
||||
|
|
@ -327,6 +329,64 @@ enum PLACE { FIRST_PLACE, SECOND_PLACE, THIRD_PLACE, FOURTH_PLACE };
|
|||
* @brief Max representable time, 100 minutes measured in centiseconds
|
||||
*/
|
||||
#define MAX_TIME 0x927C0
|
||||
#define DEGREES_CONVERSION_FACTOR 182
|
||||
|
||||
// player->oobProps
|
||||
/* Deals with the lower out of bounds (OOB) plane on levels. Represented by fluids (water / lava)
|
||||
or nothing for Rainbow Road and Skyscraper. */
|
||||
#define UNDER_OOB_OR_FLUID_LEVEL 0x1 // Set while mostly under the plane. Does not necessarily trigger Lakitu on Koopa Troopa Beach.
|
||||
#define PASS_OOB_OR_FLUID_LEVEL 0x2 // Set when passing through the lower plane in either direction
|
||||
// The next two are also activated when passing through the lower plane.
|
||||
#define UNDER_FLUID_LEVEL 0x4 // Stays active until Lakitu places back on track
|
||||
#define UNDER_OOB_LEVEL 0x8 // Active while under a non-fluid OOB plane. Is momentarily active when passing through fluids.
|
||||
|
||||
|
||||
/* UNK_002 has something to do with player animations. Each player has a 32-bit
|
||||
flag broken into 8 groups of 4 bits. Those 4 bits affect how each of the 8 players
|
||||
appear to the specified player */
|
||||
#define CHANGING_ANIMATION 0x1 // Seems to be set when the kart animation has to change.
|
||||
#define UNK_002_UNKNOWN_0x2 0x2
|
||||
#define UNK_002_UNKNOWN_0x4 0x4 /* Unclear, but has to do with viewing the side of player. At least tends to change if target
|
||||
player spins. Something with avoding rollover of aniamation frame data? */
|
||||
#define SIDE_OF_KART 0x8 // Seems to be whether you are in a rectangle shooting out from both sides of target player
|
||||
|
||||
#define WHISTLE 0x20 // Whistle spinout save graphic
|
||||
#define CRASH 0x40 // Crash! graphic (vertical tumble)
|
||||
#define WHIRRR 0x80 // Whirrr! graphic (spinning out)
|
||||
#define POOMP 0x100 // Poomp! graphic (landing from a height)
|
||||
#define BOING 0x800 // Boing! graphic (hopping)
|
||||
#define EXPLOSION 0x1000 // Big shock looking graphic when starting tumble
|
||||
|
||||
// player->lakituProps
|
||||
#define LAKITU_RETRIEVAL 0x1 // While lakitu is grabbing you, but before the scene transition of being placed on the track
|
||||
#define HELD_BY_LAKITU 0x2
|
||||
#define LAKITU_FIZZLE 0x4 // Disintegration and reintegration effect when transitioning from retrieval to placement
|
||||
#define LAKITU_SCENE 0x8 // the whole segment from when lakitu is called to when you regain control
|
||||
#define FRIGID_EFFECT 0x10 // Cold colors on Sherbet Land after in frigid water
|
||||
#define THAWING_EFFECT 0x20 // Regaining usual colors post frigid effect
|
||||
#define FROZEN_EFFECT 0x80 // In the ice cube
|
||||
#define WENT_OVER_OOB 0x100 // Player went over (or is on) an OOB area. Cancelled if touch back in bounds
|
||||
#define LAKITU_LAVA 0x1000 // smoky effect when retrieved from lava
|
||||
#define LAKITU_WATER 0x2000 // dripping effect when retreived from water
|
||||
|
||||
// player->kartProps
|
||||
#define BACK_UP 0x1
|
||||
#define RIGHT_TURN 0x2 // non-drifting (more than 5 degrees)
|
||||
#define LEFT_TURN 0x4 // non-drifting (more than 5 degrees)
|
||||
#define MOVE_BACKWARDS 0x8 // includes lakitu
|
||||
#define LOSE_GP_RACE 0x10 // pointless, only unsets itself
|
||||
#define THROTTLE 0x20 // Closely tied to just pressing A. Possible exception for AB-spins
|
||||
#define EARLY_SPINOUT_RIGHT 0x40 // Spinning out while facing right (not actually used for anything)
|
||||
#define EARLY_SPINOUT_LEFT 0x80 // Spinning out while facing left
|
||||
#define POST_TUMBLE_GAS 0x100 // Causes particles after a vertical tumble, I think
|
||||
#define BECOME_INVISIBLE 0x200
|
||||
#define UNUSED_0x400 0x400 // locked behind 0x800 (func_80091440)
|
||||
#define UNUSED_0x800 0x800 // locked behind 0x400 (func_8002B830 -> func_800911B4)
|
||||
#define UNUSED_0x1000 0x1000 // 0x1000 locked behind 0x400 (func_8002B830 -> func_800911B4)
|
||||
#define UNUSED_0x2000 0x2000 // 0x2000 locked behind 0x400 and 0x800 (func_8002B830 -> func_800911B4, apply_effect -> func_80091298,
|
||||
// func_80091440)
|
||||
#define DRIVING_SPINOUT 0x4000
|
||||
#define UNKNOWN_BATTLE_VAR 0x8000 // 0x8000 something battle related, unclear if ever set
|
||||
|
||||
/*
|
||||
* @brief triggers indicating that an effect should be applied to a kart
|
||||
|
|
@ -357,11 +417,13 @@ enum PLACE { FIRST_PLACE, SECOND_PLACE, THIRD_PLACE, FOURTH_PLACE };
|
|||
|
||||
#define ALL_TRIGGERS (0xFFFFFFFF)
|
||||
#define RACING_SPINOUT_TRIGGERS (SPINOUT_TRIGGER | DRIVING_SPINOUT_TRIGGER | HIT_BANANA_TRIGGER) // 0x200081
|
||||
#define RAMP_BOOST_TRIGGERS (BOOST_RAMP_ASPHALT_TRIGGER | BOOST_RAMP_WOOD_TRIGGER) // 0x00808000
|
||||
#define ANY_BOOST_TRIGGERS (RAMP_BOOST_TRIGGERS | SHROOM_TRIGGER) // 0x00808200
|
||||
#define STATE_TRANSITION_TRIGGERS (STAR_TRIGGER | BOO_TRIGGER | UNUSED_TRIGGER_0x1000 | UNUSED_TRIGGER_0x20000)// 0x00023800
|
||||
#define HIT_TRIGGERS (HIT_BY_STAR_TRIGGER | VERTICAL_TUMBLE_TRIGGER | \
|
||||
LIGHTNING_STRIKE_TRIGGER | LOW_TUMBLE_TRIGGER | HIGH_TUMBLE_TRIGGER | THWOMP_SQUISH_TRIGGER) // 0x01404106
|
||||
#define RAMP_BOOST_TRIGGERS (BOOST_RAMP_ASPHALT_TRIGGER | BOOST_RAMP_WOOD_TRIGGER) // 0x00808000
|
||||
#define ANY_BOOST_TRIGGERS (RAMP_BOOST_TRIGGERS | SHROOM_TRIGGER) // 0x00808200
|
||||
#define STATE_TRANSITION_TRIGGERS \
|
||||
(STAR_TRIGGER | BOO_TRIGGER | UNUSED_TRIGGER_0x1000 | UNUSED_TRIGGER_0x20000) // 0x00023800
|
||||
#define HIT_TRIGGERS \
|
||||
(HIT_BY_STAR_TRIGGER | VERTICAL_TUMBLE_TRIGGER | LIGHTNING_STRIKE_TRIGGER | LOW_TUMBLE_TRIGGER | \
|
||||
HIGH_TUMBLE_TRIGGER | THWOMP_SQUISH_TRIGGER) // 0x01404106
|
||||
|
||||
/**
|
||||
* @brief effect of player's
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ void update_actor_fake_item_box(struct FakeItemBox* fake_item_box) {
|
|||
fake_item_box->pos[1], fake_item_box->pos[2]);
|
||||
func_802B4E30((struct Actor*) fake_item_box);
|
||||
temp_v1_3 = &gControllers[temp_v1];
|
||||
if ((temp_v0_4->type & 0x4000) != 0) {
|
||||
if ((temp_v0_4->type & PLAYER_HUMAN) != 0) {
|
||||
|
||||
if ((temp_v1_3->buttonDepressed & Z_TRIG) != 0) {
|
||||
temp_v1_3->buttonDepressed &= 0xDFFF;
|
||||
|
|
|
|||
|
|
@ -591,7 +591,7 @@ void func_800C2474(void) {
|
|||
gPlayers[var_v0].unk_20C = 0.0f;
|
||||
gPlayers[var_v0].unk_0C0 = 0;
|
||||
gPlayers[var_v0].unk_098 = 0.0f;
|
||||
gPlayers[var_v0].unk_0DE = 0;
|
||||
gPlayers[var_v0].oobProps = 0;
|
||||
D_8018FC10[var_v0][0] = 0x00FF;
|
||||
D_8018FC10[var_v0][1] = 0;
|
||||
D_800EA10C[var_v0] = 0;
|
||||
|
|
@ -1824,7 +1824,7 @@ void func_800C5CB8(void) {
|
|||
}
|
||||
|
||||
void func_800C5D04(u8 playerId) {
|
||||
if ((gPlayers[playerId].unk_044 & 0x20) == 0x20) {
|
||||
if ((gPlayers[playerId].kartProps & THROTTLE) == THROTTLE) {
|
||||
D_800E9E34[playerId] = 0;
|
||||
if (D_800E9E24[playerId] < 0x4E20) {
|
||||
if ((u8) D_800EA16C == 0) {
|
||||
|
|
@ -1853,7 +1853,7 @@ void func_800C5D04(u8 playerId) {
|
|||
|
||||
void func_800C5E38(u8 playerId) {
|
||||
if (D_800EA108 == 0) {
|
||||
if (((gPlayers[playerId].unk_044 & 0x20) != 0x20) && (gPlayers[playerId].unk_098 > 400.0f)) {
|
||||
if (((gPlayers[playerId].kartProps & THROTTLE) != THROTTLE) && (gPlayers[playerId].unk_098 > 400.0f)) {
|
||||
D_800E9E14[playerId] = 1;
|
||||
if (D_800EA0EC[playerId] == 0) {
|
||||
D_800E9F7C[playerId].unk_10 = 0.6f - D_800E9F54[playerId];
|
||||
|
|
@ -1905,7 +1905,7 @@ void func_800C6108(u8 playerId) {
|
|||
|
||||
player = &gPlayers[playerId];
|
||||
D_800E9E64[playerId] = (player->unk_098 / D_800E9DC4[playerId]) + D_800E9DD4[playerId];
|
||||
if ((player->unk_098 < 1800.0f) && ((player->unk_044 & 0x20) != 0x20)) {
|
||||
if ((player->unk_098 < 1800.0f) && ((player->kartProps & THROTTLE) != THROTTLE)) {
|
||||
D_800E9E64[playerId] = (player->unk_098 / D_800E9F7C[playerId].unk_34) + D_800E9F7C[playerId].unk_28;
|
||||
if (D_800E9EC4) {} // ?
|
||||
}
|
||||
|
|
@ -2003,7 +2003,7 @@ void func_800C64A0(u8 playerId) {
|
|||
if (D_800E9EF4[playerId] < 0.0f) {
|
||||
D_800E9EF4[playerId] = 0.0f;
|
||||
}
|
||||
if ((gPlayers[playerId].unk_044 & 0x20) == 0x20) {
|
||||
if ((gPlayers[playerId].kartProps & THROTTLE) == THROTTLE) {
|
||||
D_800E9F04[playerId] = 0.56f - (D_800E9E24[playerId] * 0.06f);
|
||||
} else {
|
||||
D_800E9F04[playerId] = (D_800E9E34[playerId] / 50.0f) + 0.25f;
|
||||
|
|
@ -2380,15 +2380,15 @@ void func_800C70A8(u8 playerId) {
|
|||
D_800E9E74[playerId] = 0;
|
||||
}
|
||||
if ((((gPlayers[playerId].effects & EARLY_START_SPINOUT_EFFECT) == EARLY_START_SPINOUT_EFFECT) &&
|
||||
((gPlayers[playerId].type & 0x2000) != 0x2000)) ||
|
||||
((gPlayers[playerId].type & PLAYER_START_SEQUENCE) != PLAYER_START_SEQUENCE)) ||
|
||||
((gPlayers[playerId].effects & BANANA_NEAR_SPINOUT_EFFECT) == BANANA_NEAR_SPINOUT_EFFECT) ||
|
||||
((gPlayers[playerId].effects & BANANA_SPINOUT_EFFECT) == BANANA_SPINOUT_EFFECT) ||
|
||||
((gPlayers[playerId].effects & DRIVING_SPINOUT_EFFECT) == DRIVING_SPINOUT_EFFECT) ||
|
||||
((gPlayers[playerId].unk_044 & 0x4000) == 0x4000)) {
|
||||
((gPlayers[playerId].kartProps & DRIVING_SPINOUT) == DRIVING_SPINOUT)) {
|
||||
D_800E9E74[playerId] = 0x00000012;
|
||||
}
|
||||
if ((((gPlayers[playerId].effects & AB_SPIN_EFFECT) == AB_SPIN_EFFECT) &&
|
||||
((gPlayers[playerId].type & 0x2000) != 0x2000)) ||
|
||||
((gPlayers[playerId].type & PLAYER_START_SEQUENCE) != PLAYER_START_SEQUENCE)) ||
|
||||
((gPlayers[playerId].effects & BANANA_NEAR_SPINOUT_EFFECT) == BANANA_NEAR_SPINOUT_EFFECT)) {
|
||||
D_800E9E74[playerId] = 0x00000013;
|
||||
}
|
||||
|
|
@ -2688,7 +2688,7 @@ void func_800C76C0(u8 playerId) {
|
|||
}
|
||||
|
||||
void func_800C847C(u8 playerId) {
|
||||
if ((gPlayers[playerId].unk_0DE & 1) == 1) {
|
||||
if ((gPlayers[playerId].oobProps & UNDER_OOB_OR_FLUID_LEVEL) == UNDER_OOB_OR_FLUID_LEVEL) {
|
||||
if (D_800E9F74[playerId] == 0) {
|
||||
if ((s32) D_800EA1C0 < 2) {
|
||||
func_800C9018(playerId, SOUND_ARG_LOAD(0x01, 0x00, 0xF9, 0x26));
|
||||
|
|
|
|||
19
src/camera.c
19
src/camera.c
|
|
@ -330,7 +330,7 @@ void func_8001CCEC(Player* player, Camera* camera, Vec3f arg2, f32* arg3, f32* a
|
|||
D_80164A78[index] = D_800DDB30[gActiveScreenMode];
|
||||
}
|
||||
}
|
||||
if ((player->unk_0CA & 0x100) == 0x100) {
|
||||
if ((player->lakituProps & WENT_OVER_OOB) == WENT_OVER_OOB) {
|
||||
switch (gActiveScreenMode) {
|
||||
case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL:
|
||||
case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL:
|
||||
|
|
@ -400,7 +400,7 @@ void func_8001CCEC(Player* player, Camera* camera, Vec3f arg2, f32* arg3, f32* a
|
|||
*arg4 = camera->pos[1] + (((y - camera->pos[1]) * 0.15));
|
||||
}
|
||||
|
||||
if ((player->unk_0DE & 1) != 0) {
|
||||
if ((player->oobProps & UNDER_OOB_OR_FLUID_LEVEL) != 0) {
|
||||
*arg4 = D_801652A0[index];
|
||||
}
|
||||
}
|
||||
|
|
@ -445,7 +445,7 @@ void func_8001D53C(Player* player, Camera* camera, Vec3f arg2, f32* arg3, f32* a
|
|||
stackPadding0 = player->pos[0] + sp68[0];
|
||||
stackPadding2 = player->pos[2] + sp68[2];
|
||||
stackPadding1 = sp68[1] + (player->unk_074 + 1.5);
|
||||
if ((player->unk_0CA & 1) == 1) {
|
||||
if ((player->lakituProps & LAKITU_RETRIEVAL) == LAKITU_RETRIEVAL) {
|
||||
stackPadding1 = sp68[1] + (thing + 10.0f);
|
||||
}
|
||||
*arg3 = stackPadding0;
|
||||
|
|
@ -564,7 +564,7 @@ void func_8001D944(Player* player, Camera* camera, Vec3f arg2, f32* arg3, f32* a
|
|||
D_80164A78[index] = D_800DDB30[gActiveScreenMode];
|
||||
}
|
||||
}
|
||||
if ((player->unk_0CA & 0x100) == 0x100) {
|
||||
if ((player->lakituProps & WENT_OVER_OOB) == WENT_OVER_OOB) {
|
||||
|
||||
move_f32_towards(&D_80164A90[index], 15, 0.02f);
|
||||
move_f32_towards(&D_80164AA0[index], 20, 0.02f);
|
||||
|
|
@ -620,7 +620,7 @@ void func_8001D944(Player* player, Camera* camera, Vec3f arg2, f32* arg3, f32* a
|
|||
*arg4 = camera->pos[1] + (((y - camera->pos[1]) * 0.15));
|
||||
}
|
||||
|
||||
if ((player->unk_0DE & 1) != 0) {
|
||||
if ((player->oobProps & UNDER_OOB_OR_FLUID_LEVEL) != 0) {
|
||||
*arg4 = D_801652A0[index];
|
||||
}
|
||||
}
|
||||
|
|
@ -988,7 +988,8 @@ void func_8001EE98(Player* player, Camera* camera, s8 index) {
|
|||
func_8001A588(&D_80152300[cameraIndex], camera, player, index, cameraIndex);
|
||||
break;
|
||||
case 1:
|
||||
if (((player->unk_0CA & 1) == 1) || ((player->unk_0CA & 2) == 2)) {
|
||||
if (((player->lakituProps & LAKITU_RETRIEVAL) == LAKITU_RETRIEVAL) ||
|
||||
((player->lakituProps & HELD_BY_LAKITU) == HELD_BY_LAKITU)) {
|
||||
func_8001E8E8(camera, player, index);
|
||||
break;
|
||||
}
|
||||
|
|
@ -999,7 +1000,8 @@ void func_8001EE98(Player* player, Camera* camera, s8 index) {
|
|||
func_8001F87C(cameraIndex);
|
||||
break;
|
||||
case 9:
|
||||
if (((player->unk_0CA & 1) == 1) || ((player->unk_0CA & 2) == 2)) {
|
||||
if (((player->lakituProps & LAKITU_RETRIEVAL) == LAKITU_RETRIEVAL) ||
|
||||
((player->lakituProps & HELD_BY_LAKITU) == HELD_BY_LAKITU)) {
|
||||
func_8001E8E8(camera, player, index);
|
||||
break;
|
||||
}
|
||||
|
|
@ -1150,7 +1152,8 @@ void func_8001F87C(s32 cameraId) {
|
|||
if (gActiveScreenMode == SCREEN_MODE_1P) {
|
||||
if (gModeSelection == GRAND_PRIX) {
|
||||
for (playerIndex = 0; playerIndex < NUM_PLAYERS; playerIndex++) {
|
||||
if ((gPlayerOne[playerIndex].type & 0x200) || (gPlayerOne[playerIndex].type & 0x80)) {
|
||||
if ((gPlayerOne[playerIndex].type & PLAYER_STAGING) ||
|
||||
(gPlayerOne[playerIndex].type & PLAYER_UNKNOWN_0x80)) {
|
||||
break;
|
||||
}
|
||||
if (playerIndex == 7) {
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ void func_8003F138(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4
|
|||
*arg7 += arg1[2] * player->collision.surfaceDistance[2] * 1;
|
||||
func_8002A5F4(arg1, *arg4, arg2, 0.5f, 2);
|
||||
if (player->surfaceType == GRASS) {
|
||||
player->unk_044 &= ~1;
|
||||
player->kartProps &= ~BACK_UP;
|
||||
}
|
||||
if (player->collision.orientationVector[1] <= 0.8357f) {
|
||||
arg3[0] = ((player->unk_206 / 182) * 0xC8);
|
||||
|
|
@ -230,7 +230,7 @@ void func_8003F46C(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4
|
|||
arg1[0] = -player->collision.orientationVector[0];
|
||||
arg1[1] = -player->collision.orientationVector[1];
|
||||
arg1[2] = -player->collision.orientationVector[2];
|
||||
if ((player->collision.orientationVector[1] < 0.0f) && ((player->unk_0CA & 2) == 0)) {
|
||||
if ((player->collision.orientationVector[1] < 0.0f) && ((player->lakituProps & HELD_BY_LAKITU) == 0)) {
|
||||
*arg5 += arg1[0] * player->collision.surfaceDistance[2] * 1;
|
||||
*arg6 += arg1[1] * player->collision.surfaceDistance[2] * 1;
|
||||
*arg7 += arg1[2] * player->collision.surfaceDistance[2] * 1;
|
||||
|
|
|
|||
|
|
@ -3561,7 +3561,7 @@ void func_80060504(Player* player, s16 arg1, s32 arg2, UNUSED s8 arg3, UNUSED s8
|
|||
s32 temp_v0;
|
||||
UNUSED s32 test;
|
||||
|
||||
if ((player->unk_044 & 0x20) == 0x20) {
|
||||
if ((player->kartProps & THROTTLE) == THROTTLE) {
|
||||
var_v0 = 5;
|
||||
} else {
|
||||
var_v0 = 0xE;
|
||||
|
|
@ -3583,7 +3583,7 @@ void func_80060504(Player* player, s16 arg1, s32 arg2, UNUSED s8 arg3, UNUSED s8
|
|||
}
|
||||
}
|
||||
player->particles[arg1].unk_024 = 0.0f;
|
||||
if ((player->unk_044 & 0x20) == 0x20) {
|
||||
if ((player->kartProps & THROTTLE) == THROTTLE) {
|
||||
player->particles[arg1].unk_040 = 0;
|
||||
if ((player->effects & MUSHROOM_EFFECT) == MUSHROOM_EFFECT) {
|
||||
set_particle_colour(&player->particles[arg1], 0x00FFFF00, 0x0080);
|
||||
|
|
@ -3628,7 +3628,7 @@ void func_800608E0(Player* player, s16 arg1, UNUSED s32 arg2, s8 arg3, UNUSED s8
|
|||
var_f0 = 0.0f;
|
||||
}
|
||||
sp4C = (D_801652A0[arg3] - player->pos[1]) - 3.0f;
|
||||
if ((player->unk_0DE & 1) && (gCurrentCourseId != COURSE_KOOPA_BEACH)) {
|
||||
if ((player->oobProps & UNDER_OOB_OR_FLUID_LEVEL) && (gCurrentCourseId != COURSE_KOOPA_BEACH)) {
|
||||
var_f0 = 2.5f;
|
||||
sp4C = (f32) ((f64) (D_801652A0[arg3] - player->pos[1]) + 0.1);
|
||||
}
|
||||
|
|
@ -3711,7 +3711,7 @@ void func_80060F50(Player* player, s16 arg1, UNUSED s32 arg2, s8 arg3, UNUSED s8
|
|||
player->particles[arg1].pos[2] = player->pos[2] + (coss(player->particles[arg1].rotation) * -5.8);
|
||||
player->particles[arg1].pos[0] = player->pos[0] + (sins(player->particles[arg1].rotation) * -5.8);
|
||||
player->particles[arg1].pos[1] = D_801652A0[arg3];
|
||||
player->unk_0DE &= ~0x0008;
|
||||
player->oobProps &= ~UNDER_OOB_LEVEL;
|
||||
}
|
||||
|
||||
void func_80061094(Player* player, s16 arg1, UNUSED s32 arg2, UNUSED s8 arg3, UNUSED s8 arg4) {
|
||||
|
|
@ -3743,7 +3743,7 @@ void func_80061224(Player* player, s16 arg1, s32 arg2, s8 arg3, s8 arg4) {
|
|||
} else if (player->particles[arg2].timer >= 2) {
|
||||
func_80061130(player, arg1, arg2, arg3, arg4);
|
||||
if (arg1 == 9) {
|
||||
player->unk_044 &= ~0x0200;
|
||||
player->kartProps &= ~BECOME_INVISIBLE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3783,7 +3783,7 @@ void func_80061430(Player* player, UNUSED s32 arg1, UNUSED s32 arg2, UNUSED s8 a
|
|||
player->particles[0x1E + var_s2].pos[2] = player->pos[2];
|
||||
player->particles[0x1E + var_s2].pos[0] = player->pos[0];
|
||||
}
|
||||
player->unk_044 &= ~0x1000;
|
||||
player->kartProps &= ~UNUSED_0x1000;
|
||||
}
|
||||
|
||||
void func_800615AC(Player* player, s16 arg1, UNUSED s32 arg2, UNUSED s8 arg3, UNUSED s8 arg4) {
|
||||
|
|
@ -4068,42 +4068,42 @@ void func_800624D8(Player* player, UNUSED s32 arg1, UNUSED s32 arg2, UNUSED s8 a
|
|||
}
|
||||
func_80062484(player, &player->particles[0x1E + var_s1], var_s1);
|
||||
}
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
break;
|
||||
case GRASS:
|
||||
for (var_s1 = 0; var_s1 < 10; var_s1++) {
|
||||
func_8005DAD8(&player->particles[0x1E + var_s1], 2, 1, 0x00A8);
|
||||
func_80062484(player, &player->particles[0x1E + var_s1], var_s1);
|
||||
}
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
break;
|
||||
case SAND_OFFROAD:
|
||||
for (var_s1 = 0; var_s1 < 10; var_s1++) {
|
||||
func_8005DAD8(&player->particles[0x1E + var_s1], 2, 1, 0x00A8);
|
||||
func_80062484(player, &player->particles[0x1E + var_s1], var_s1);
|
||||
}
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
break;
|
||||
case SAND:
|
||||
for (var_s1 = 0; var_s1 < 10; var_s1++) {
|
||||
func_8005DAD8(&player->particles[0x1E + var_s1], 3, 1, 0x00A8);
|
||||
func_80062484(player, &player->particles[0x1E + var_s1], var_s1);
|
||||
}
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
break;
|
||||
case WET_SAND:
|
||||
for (var_s1 = 0; var_s1 < 10; var_s1++) {
|
||||
func_8005DAD8(&player->particles[0x1E + var_s1], 4, 1, 0x00A8);
|
||||
func_80062484(player, &player->particles[0x1E + var_s1], var_s1);
|
||||
}
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
break;
|
||||
case DIRT_OFFROAD:
|
||||
for (var_s1 = 0; var_s1 < 10; var_s1++) {
|
||||
func_8005DAD8(&player->particles[0x1E + var_s1], 5, 1, 0x00A8);
|
||||
func_80062484(player, &player->particles[0x1E + var_s1], var_s1);
|
||||
}
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
break;
|
||||
case SNOW:
|
||||
case SNOW_OFFROAD:
|
||||
|
|
@ -4111,7 +4111,7 @@ void func_800624D8(Player* player, UNUSED s32 arg1, UNUSED s32 arg2, UNUSED s8 a
|
|||
func_8005DAD8(&player->particles[0x1E + var_s1], 6, 1, 0x00A8);
|
||||
func_80062484(player, &player->particles[0x1E + var_s1], var_s1);
|
||||
}
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
break;
|
||||
case ASPHALT:
|
||||
case STONE:
|
||||
|
|
@ -4120,14 +4120,14 @@ void func_800624D8(Player* player, UNUSED s32 arg1, UNUSED s32 arg2, UNUSED s8 a
|
|||
func_8005DAD8(&player->particles[0x1E + var_s1], 0, 0, 0x00A8);
|
||||
func_80062484(player, &player->particles[0x1E + var_s1], var_s1);
|
||||
}
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
break;
|
||||
default:
|
||||
for (var_s1 = 0; var_s1 < 10; var_s1++) {
|
||||
func_8005DAD8(&player->particles[0x1E + var_s1], 0, 0, 0x00A8);
|
||||
func_80062484(player, &player->particles[0x1E + var_s1], var_s1);
|
||||
}
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -4171,7 +4171,7 @@ void func_80062A18(Player* player, s8 arg1, UNUSED s8 arg2, s8 arg3) {
|
|||
player->particles[20 + arg1 /* arg1 instead of arg3 */].scale = 0.2f;
|
||||
player->particles[20 + arg3].timer = 1;
|
||||
player->particles[20 + arg3].rotation = 0;
|
||||
player->unk_0B6 &= ~0x0080;
|
||||
player->kartGraphics &= ~WHIRRR;
|
||||
player->particles[20 + arg3].pos[2] = player->pos[2];
|
||||
player->particles[20 + arg3].pos[0] = player->pos[0];
|
||||
player->particles[20 + arg3].pos[1] = (player->pos[1] + 4.0f);
|
||||
|
|
@ -4282,7 +4282,7 @@ void func_80062F98(Player* player, s16 arg1, s8 arg2, UNUSED s8 arg3) {
|
|||
temp_f0 = player->particles[10 + arg1].unk_018 / 10.0f;
|
||||
++player->particles[10 + arg1].timer;
|
||||
player->particles[10 + arg1].pos[1] += temp_f0;
|
||||
if ((player->unk_0CA & 1) == 1) {
|
||||
if ((player->lakituProps & LAKITU_RETRIEVAL) == LAKITU_RETRIEVAL) {
|
||||
player->particles[10 + arg1].pos[1] += (temp_f0 + 0.3);
|
||||
if ((player->particles[10 + arg1].timer == 0x10) ||
|
||||
((D_801652A0[arg2] - player->particles[10 + arg1].pos[1]) < 3.0f)) {
|
||||
|
|
@ -4618,7 +4618,7 @@ void func_80064184(Player* player, s16 arg1, s8 arg2, UNUSED s8 arg3) {
|
|||
f32 sp3C;
|
||||
|
||||
sp40 = D_801652A0[arg2] - player->pos[1] - 3.0f;
|
||||
if (((player->unk_0DE & 1) != 0) && (gCurrentCourseId != COURSE_KOOPA_BEACH)) {
|
||||
if (((player->oobProps & UNDER_OOB_OR_FLUID_LEVEL) != 0) && (gCurrentCourseId != COURSE_KOOPA_BEACH)) {
|
||||
sp40 = D_801652A0[arg2] - player->pos[1] + 0.1;
|
||||
}
|
||||
|
||||
|
|
@ -4862,7 +4862,7 @@ void func_80064DEC(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) {
|
|||
++player->particles[20 + arg3].timer;
|
||||
|
||||
if (player->particles[20 + arg3].timer == 9) {
|
||||
player->unk_0B6 &= ~0x0040;
|
||||
player->kartGraphics &= ~CRASH;
|
||||
player->particles[20 + arg3].IsAlive = 0;
|
||||
player->particles[20 + arg3].timer = 0;
|
||||
player->particles[20 + arg3].type = 0;
|
||||
|
|
@ -4884,7 +4884,7 @@ void func_80064EA4(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) {
|
|||
} else {
|
||||
player->particles[20 + arg3].scale -= 1.8;
|
||||
if (player->particles[20 + arg3].scale <= 0.0f) {
|
||||
player->unk_0B6 &= ~0x1000;
|
||||
player->kartGraphics &= ~EXPLOSION;
|
||||
player->particles[20 + arg3].IsAlive = 0;
|
||||
player->particles[20 + arg3].timer = 0;
|
||||
player->particles[20 + arg3].type = 0;
|
||||
|
|
@ -4900,7 +4900,7 @@ void func_80064F88(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) {
|
|||
player->particles[20 + arg3].scale = 1.2f;
|
||||
}
|
||||
if (player->particles[20 + arg3].timer >= 12) {
|
||||
player->unk_0B6 &= ~0x0800;
|
||||
player->kartGraphics &= ~BOING;
|
||||
player->particles[20 + arg3].IsAlive = 0;
|
||||
player->particles[20 + arg3].timer = 0;
|
||||
player->particles[20 + arg3].type = 0;
|
||||
|
|
@ -4917,7 +4917,7 @@ void func_80065030(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) {
|
|||
}
|
||||
|
||||
if (player->particles[20 + arg3].timer >= 12) {
|
||||
player->unk_0B6 &= ~0x0100;
|
||||
player->kartGraphics &= ~POOMP;
|
||||
player->particles[20 + arg3].IsAlive = 0;
|
||||
player->particles[20 + arg3].timer = 0;
|
||||
player->particles[20 + arg3].type = 0;
|
||||
|
|
@ -4957,7 +4957,7 @@ void func_800651F4(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) {
|
|||
} else {
|
||||
player->particles[20 + arg3].scale -= 0.4;
|
||||
if (player->particles[20 + arg3].scale <= 0.0f) {
|
||||
player->unk_0B6 &= ~0x0020;
|
||||
player->kartGraphics &= ~WHISTLE;
|
||||
player->particles[20 + arg3].IsAlive = 0;
|
||||
player->particles[20 + arg3].timer = 0;
|
||||
player->particles[20 + arg3].type = 0;
|
||||
|
|
@ -6263,7 +6263,7 @@ void func_8006C6AC(Player* player, s16 arg1, s8 arg2, s8 arg3) {
|
|||
break;
|
||||
}
|
||||
} else {
|
||||
if (player->unk_0DE & 1) {
|
||||
if (player->oobProps & UNDER_OOB_OR_FLUID_LEVEL) {
|
||||
func_80060BCC(player, arg1, sp28, arg2_copy, arg3);
|
||||
} else if (!(player->effects & MIDAIR_EFFECT) && !(player->effects & HOP_EFFECT)) {
|
||||
if (((player->effects & DRIFTING_EFFECT) == DRIFTING_EFFECT) &&
|
||||
|
|
@ -6277,7 +6277,7 @@ void func_8006C6AC(Player* player, s16 arg1, s8 arg2, s8 arg3) {
|
|||
func_8005F90C(player, arg1, sp28, arg2_copy, arg3);
|
||||
} else if (((player->effects & EARLY_START_SPINOUT_EFFECT) && !(player->type & PLAYER_START_SEQUENCE)) ||
|
||||
(player->effects & BANANA_NEAR_SPINOUT_EFFECT) || (player->effects & AB_SPIN_EFFECT) ||
|
||||
(player->unk_044 & 0x4000)) {
|
||||
(player->kartProps & DRIVING_SPINOUT)) {
|
||||
func_8005ED48(player, arg1, sp28, arg2_copy, arg3);
|
||||
} else {
|
||||
setup_tyre_particles(player, arg1, sp28, arg2_copy, arg3);
|
||||
|
|
@ -6335,42 +6335,42 @@ void func_8006C9B8(Player* player, s16 arg1, s8 playerIndex, s8 arg3) {
|
|||
break;
|
||||
}
|
||||
} else {
|
||||
if (player->unk_044 & 0x1000) {
|
||||
if (player->kartProps & UNUSED_0x1000) {
|
||||
func_80061430(player, arg1, sp28, playerIndex, arg3);
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
return;
|
||||
}
|
||||
if (((((player->unk_0CA & 0x1000) == 0x1000) ||
|
||||
if (((((player->lakituProps & LAKITU_LAVA) == LAKITU_LAVA) ||
|
||||
((player->unk_0E0 < 2) && (player->effects & EXPLOSION_CRASH_EFFECT))) ||
|
||||
((player->unk_0E0 < 2) && (player->effects & HIT_BY_STAR_EFFECT))) ||
|
||||
(player->effects & HIT_BY_GREEN_SHELL_EFFECT)) {
|
||||
func_8006199C(player, arg1, sp28, playerIndex, arg3);
|
||||
player->unk_046 &= ~0x0008;
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
return;
|
||||
}
|
||||
if ((player->unk_0CA & 0x2000) == 0x2000) {
|
||||
if ((player->lakituProps & LAKITU_WATER) == LAKITU_WATER) {
|
||||
func_80061A34(player, arg1, sp28, playerIndex, arg3);
|
||||
player->unk_046 &= ~0x0008;
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
return;
|
||||
}
|
||||
if ((player->effects & STAR_EFFECT) &&
|
||||
((((s32) gCourseTimer) - gPlayerStarEffectStartTime[playerIndex]) < STAR_EFFECT_DURATION - 1)) {
|
||||
func_800615AC(player, arg1, sp28, playerIndex, arg3);
|
||||
player->unk_046 &= ~0x0008;
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
return;
|
||||
}
|
||||
if ((player->unk_046 & 8) == 8) {
|
||||
func_800612F8(player, arg1, sp28, playerIndex, arg3);
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
return;
|
||||
}
|
||||
if (((player->unk_046 & 0x20) == 0x20) && (((player->speed / 18.0f) * 216.0f) >= 20.0f)) {
|
||||
func_80061D4C(player, arg1, sp28, playerIndex, arg3);
|
||||
player->unk_046 &= ~0x0008;
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
return;
|
||||
}
|
||||
if ((player->effects & MUSHROOM_EFFECT) && (player->type & PLAYER_HUMAN)) {
|
||||
|
|
@ -6381,10 +6381,10 @@ void func_8006C9B8(Player* player, s16 arg1, s8 playerIndex, s8 arg3) {
|
|||
((player->type & PLAYER_HUMAN) == PLAYER_HUMAN)) {
|
||||
func_80061EF4(player, arg1, sp28, playerIndex, arg3);
|
||||
player->unk_046 &= ~0x0008;
|
||||
player->unk_044 &= ~0x0100;
|
||||
player->kartProps &= ~POST_TUMBLE_GAS;
|
||||
return;
|
||||
}
|
||||
if ((player->unk_044 & 0x100) == 0x100) {
|
||||
if ((player->kartProps & POST_TUMBLE_GAS) == POST_TUMBLE_GAS) {
|
||||
func_800624D8(player, arg1, sp28, playerIndex, arg3);
|
||||
player->unk_046 &= ~0x0008;
|
||||
}
|
||||
|
|
@ -6417,17 +6417,17 @@ void func_8006CEC0(Player* arg0, s16 arg1, s8 arg2, s8 arg3) {
|
|||
break;
|
||||
}
|
||||
} else {
|
||||
if ((arg0->unk_044 & 0x200) && (arg0->type & 0x4000)) {
|
||||
if ((arg0->kartProps & BECOME_INVISIBLE) && (arg0->type & DRIVING_SPINOUT)) {
|
||||
func_80061224(arg0, arg1, sp20, arg2, arg3);
|
||||
return;
|
||||
} else if (((arg0->effects & LIGHTNING_EFFECT) == LIGHTNING_EFFECT) && (arg0->unk_0B0 < 0x32)) {
|
||||
func_80061094(arg0, arg1, sp20, arg2, arg3);
|
||||
return;
|
||||
} else if ((arg0->type & 0x4000) == 0x4000) {
|
||||
if ((arg0->unk_0DE & 8) == 8) {
|
||||
} else if ((arg0->type & PLAYER_HUMAN) == PLAYER_HUMAN) {
|
||||
if ((arg0->oobProps & UNDER_OOB_LEVEL) == UNDER_OOB_LEVEL) {
|
||||
func_80060F50(arg0, arg1, sp20, arg2, arg3);
|
||||
return;
|
||||
} else if ((arg0->unk_0DE & 2) || (arg0->unk_0DE & 1)) {
|
||||
} else if ((arg0->oobProps & PASS_OOB_OR_FLUID_LEVEL) || (arg0->oobProps & UNDER_OOB_OR_FLUID_LEVEL)) {
|
||||
func_80060B14(arg0, arg1, sp20, arg2, arg3);
|
||||
return;
|
||||
}
|
||||
|
|
@ -6437,7 +6437,9 @@ void func_8006CEC0(Player* arg0, s16 arg1, s8 arg2, s8 arg3) {
|
|||
if (((arg0->effects & SQUISH_EFFECT) != SQUISH_EFFECT) &&
|
||||
((arg0->effects & HIT_BY_GREEN_SHELL_EFFECT) != HIT_BY_GREEN_SHELL_EFFECT) &&
|
||||
((arg0->effects & EXPLOSION_CRASH_EFFECT) != EXPLOSION_CRASH_EFFECT)) {
|
||||
if (((arg0->unk_0CA & 2) != 2) && ((arg0->unk_0CA & 0x10) != 0x10) && !(arg0->unk_0CA & 0x100)) {
|
||||
if (((arg0->lakituProps & HELD_BY_LAKITU) != HELD_BY_LAKITU) &&
|
||||
((arg0->lakituProps & FRIGID_EFFECT) != FRIGID_EFFECT) &&
|
||||
!(arg0->lakituProps & WENT_OVER_OOB)) {
|
||||
func_80060504(arg0, arg1, sp20, arg2, arg3);
|
||||
}
|
||||
}
|
||||
|
|
@ -6447,14 +6449,16 @@ void func_8006CEC0(Player* arg0, s16 arg1, s8 arg2, s8 arg3) {
|
|||
case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL:
|
||||
case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL:
|
||||
case SCREEN_MODE_3P_4P_SPLITSCREEN:
|
||||
if (((arg0->type & 0x4000) != 0) && ((arg0->effects & SQUISH_EFFECT) != SQUISH_EFFECT) &&
|
||||
if (((arg0->type & PLAYER_HUMAN) != 0) && ((arg0->effects & SQUISH_EFFECT) != SQUISH_EFFECT) &&
|
||||
((arg0->effects & HIT_BY_GREEN_SHELL_EFFECT) != HIT_BY_GREEN_SHELL_EFFECT) &&
|
||||
((arg0->effects & EXPLOSION_CRASH_EFFECT) != EXPLOSION_CRASH_EFFECT)) {
|
||||
if (((arg0->unk_0CA & 2) != 2) && ((arg0->unk_0CA & 0x10) != 0x10) && !(arg0->unk_0CA & 0x100)) {
|
||||
if (((arg0->lakituProps & HELD_BY_LAKITU) != HELD_BY_LAKITU) &&
|
||||
((arg0->lakituProps & FRIGID_EFFECT) != FRIGID_EFFECT) &&
|
||||
!(arg0->lakituProps & WENT_OVER_OOB)) {
|
||||
func_80060504(arg0, arg1, sp20, arg2, arg3);
|
||||
}
|
||||
}
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -6479,19 +6483,19 @@ void func_8006D194(Player* player, s8 playerIndex, s8 arg2) {
|
|||
break;
|
||||
}
|
||||
} else {
|
||||
if ((player->unk_0B6 & 0x40) == 0x40) {
|
||||
if ((player->kartGraphics & CRASH) == CRASH) {
|
||||
func_800628C0(player, playerIndex, arg2, 0);
|
||||
}
|
||||
if ((player->unk_0B6 & 0x800) == 0x800) {
|
||||
if ((player->kartGraphics & BOING) == BOING) {
|
||||
func_80062968(player, playerIndex, arg2, 0);
|
||||
}
|
||||
if ((player->unk_0B6 & 0x1000) == 0x1000) {
|
||||
if ((player->kartGraphics & EXPLOSION) == EXPLOSION) {
|
||||
func_80062914(player, playerIndex, arg2, 0);
|
||||
}
|
||||
if ((player->unk_0B6 & 0x80) == 0x80) {
|
||||
if ((player->kartGraphics & WHIRRR) == WHIRRR) {
|
||||
func_80062A18(player, playerIndex, arg2, 0);
|
||||
}
|
||||
if ((player->unk_0B6 & 0x100) == 0x100) {
|
||||
if ((player->kartGraphics & POOMP) == POOMP) {
|
||||
func_800629BC(player, playerIndex, arg2, 0);
|
||||
}
|
||||
}
|
||||
|
|
@ -6499,14 +6503,14 @@ void func_8006D194(Player* player, s8 playerIndex, s8 arg2) {
|
|||
if (player->particles[0x15].type == 5) {
|
||||
func_800651F4(player, playerIndex, arg2, 1);
|
||||
}
|
||||
} else if ((player->unk_0B6 & 0x20) == 0x20) {
|
||||
} else if ((player->kartGraphics & WHISTLE) == WHISTLE) {
|
||||
func_80062AA8(player, playerIndex, arg2, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void func_8006D474(Player* player, s8 playerId, s8 screenId) {
|
||||
s16 var_s2;
|
||||
if ((player->unk_002 & (8 << (screenId * 4))) == (8 << (screenId * 4))) {
|
||||
if ((player->unk_002 & (SIDE_OF_KART << (screenId * 4))) == (SIDE_OF_KART << (screenId * 4))) {
|
||||
for (var_s2 = 0; var_s2 < 10; var_s2++) {
|
||||
switch (player->particles[var_s2].type) {
|
||||
case 1:
|
||||
|
|
@ -6630,7 +6634,7 @@ void func_8006D474(Player* player, s8 playerId, s8 screenId) {
|
|||
}
|
||||
}
|
||||
}
|
||||
if ((gModeSelection == BATTLE) && (player->unk_002 & (2 << (screenId * 4)))) {
|
||||
if ((gModeSelection == BATTLE) && (player->unk_002 & (UNK_002_UNKNOWN_0x2 << (screenId * 4)))) {
|
||||
render_remaining_battle_balloons(player, playerId, screenId);
|
||||
}
|
||||
}
|
||||
|
|
@ -6639,7 +6643,7 @@ void func_8006DC54(Player* player, s8 playerIndex, s8 screenId) {
|
|||
s16 i;
|
||||
s32 bitwiseMask;
|
||||
|
||||
bitwiseMask = 8 << (screenId * 4);
|
||||
bitwiseMask = SIDE_OF_KART << (screenId * 4);
|
||||
if (bitwiseMask == (player->unk_002 & bitwiseMask)) {
|
||||
for (i = 0; i < 10; i++) {
|
||||
if (player->particles[i].type == 7) {
|
||||
|
|
@ -6653,7 +6657,7 @@ void func_8006DD3C(Player* arg0, s8 arg1, s8 arg2) {
|
|||
s16 temp_s0;
|
||||
s32 temp_v0;
|
||||
|
||||
temp_v0 = 8 << (arg2 * 4);
|
||||
temp_v0 = SIDE_OF_KART << (arg2 * 4);
|
||||
if (temp_v0 == (arg0->unk_002 & temp_v0)) {
|
||||
for (temp_s0 = 0; temp_s0 < 10; ++temp_s0) {
|
||||
temp_v0 = arg0->particles[temp_s0].type;
|
||||
|
|
@ -6670,7 +6674,7 @@ void func_8006DD3C(Player* arg0, s8 arg1, s8 arg2) {
|
|||
}
|
||||
}
|
||||
|
||||
if (((arg0->type & 0x4000) == 0x4000) && (arg2 == arg1)) {
|
||||
if (((arg0->type & PLAYER_HUMAN) == PLAYER_HUMAN) && (arg2 == arg1)) {
|
||||
switch (arg0->particles[20].type) {
|
||||
case 2:
|
||||
func_80068310(arg0, arg1, arg0->particles[20].scale, arg2, 0);
|
||||
|
|
@ -6714,11 +6718,11 @@ void func_8006E058(void) {
|
|||
case TIME_TRIALS:
|
||||
func_8006E420(gPlayerOne, 0, 0);
|
||||
|
||||
if ((gPlayerTwo->type & 0x100) == 0x100) {
|
||||
if ((gPlayerTwo->type & PLAYER_INVISIBLE_OR_BOMB) == PLAYER_INVISIBLE_OR_BOMB) {
|
||||
func_8006E420(gPlayerTwo, 1, 0);
|
||||
}
|
||||
|
||||
if ((gPlayerThree->type & 0x100) == 0x100) {
|
||||
if ((gPlayerThree->type & PLAYER_INVISIBLE_OR_BOMB) == PLAYER_INVISIBLE_OR_BOMB) {
|
||||
func_8006E420(gPlayerThree, 2, 0);
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -745,7 +745,7 @@ void set_places(void) {
|
|||
}
|
||||
|
||||
for (playerId = 0; playerId < numPlayer - 1; playerId++) {
|
||||
if ((gPlayers[gGPCurrentRacePlayerIdByRank[playerId]].type & 0x800)) {
|
||||
if ((gPlayers[gGPCurrentRacePlayerIdByRank[playerId]].type & PLAYER_CINEMATIC_MODE)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -984,7 +984,7 @@ bool func_800088D8(s32 playerId, s16 arg1, s16 arg2) {
|
|||
return 1;
|
||||
}
|
||||
player = &gPlayers[playerId];
|
||||
if (player->type & 0x4000) {
|
||||
if (player->type & PLAYER_HUMAN) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
@ -1361,7 +1361,8 @@ void play_cpu_sound_effect(s32 arg0, Player* player) {
|
|||
}
|
||||
if (D_801633B0[arg0] >= 0xB) {
|
||||
if ((player->triggers & VERTICAL_TUMBLE_TRIGGER) || (player->triggers & HIT_BY_STAR_TRIGGER) ||
|
||||
(player->triggers & HIGH_TUMBLE_TRIGGER) || (player->triggers & LOW_TUMBLE_TRIGGER) || (player->effects & SQUISH_EFFECT)) {
|
||||
(player->triggers & HIGH_TUMBLE_TRIGGER) || (player->triggers & LOW_TUMBLE_TRIGGER) ||
|
||||
(player->effects & SQUISH_EFFECT)) {
|
||||
func_800C92CC(arg0, SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x0B));
|
||||
D_801633B0[arg0] = 0;
|
||||
}
|
||||
|
|
@ -1435,7 +1436,7 @@ void update_player(s32 playerId) {
|
|||
if (gCourseMaxZ < player->pos[2]) { D_801633E0[playerId] = 4; }
|
||||
// clang-format on
|
||||
|
||||
if (!(player->unk_0CA & 2) && !(player->unk_0CA & 8)) {
|
||||
if (!(player->lakituProps & HELD_BY_LAKITU) && !(player->lakituProps & LAKITU_SCENE)) {
|
||||
gPlayerPathIndex = gPathIndexByPlayerId[playerId];
|
||||
set_current_path(gPlayerPathIndex);
|
||||
switch (gCurrentCourseId) { /* irregular */
|
||||
|
|
@ -1457,7 +1458,7 @@ void update_player(s32 playerId) {
|
|||
}
|
||||
if (player->type & PLAYER_CINEMATIC_MODE) {
|
||||
player->effects &= ~REVERSE_EFFECT;
|
||||
player->unk_044 &= ~0x0001;
|
||||
player->kartProps &= ~BACK_UP;
|
||||
}
|
||||
update_player_path_completion(playerId, player);
|
||||
if ((gCurrentCourseId != COURSE_AWARD_CEREMONY) && ((D_80163240[playerId] == 1) || (playerId == 0))) {
|
||||
|
|
@ -3794,7 +3795,8 @@ void func_8001A588(UNUSED u16* localD_80152300, Camera* camera, Player* player,
|
|||
if (playerId >= 8) {
|
||||
playerId = 1;
|
||||
}
|
||||
if ((!(gPlayers[playerId].unk_0CA & 2) && !(gPlayers[playerId].unk_0CA & 8))) {
|
||||
if ((!(gPlayers[playerId].lakituProps & HELD_BY_LAKITU) &&
|
||||
!(gPlayers[playerId].lakituProps & LAKITU_SCENE))) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -4538,26 +4540,28 @@ void func_8001C14C(void) {
|
|||
|
||||
temp_s0 = &gPlayerOne[playerId];
|
||||
update_player(playerId);
|
||||
if (!(temp_s0->type & 0x2000)) {
|
||||
if (!(temp_s0->type & PLAYER_START_SEQUENCE)) {
|
||||
temp_f0 = D_80163418[playerId] - temp_s0->pos[0];
|
||||
temp_f2 = D_80163438[playerId] - temp_s0->pos[2];
|
||||
if ((f64) ((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) < 1.0) {
|
||||
if (playerId != 3) {
|
||||
if (1) {}
|
||||
// Why oh why is a ternary required here? Who does that?
|
||||
(D_8016347C == 0) ? (temp_s0->type |= 0x2000) : (temp_s0->type &= ~0x2000);
|
||||
if ((gPlayerOne->type & 0x2000) && (gPlayerTwo->type & 0x2000) && (gPlayerThree->type & 0x2000)) {
|
||||
(D_8016347C == 0) ? (temp_s0->type |= PLAYER_START_SEQUENCE)
|
||||
: (temp_s0->type &= ~PLAYER_START_SEQUENCE);
|
||||
if ((gPlayerOne->type & PLAYER_START_SEQUENCE) && (gPlayerTwo->type & PLAYER_START_SEQUENCE) &&
|
||||
(gPlayerThree->type & PLAYER_START_SEQUENCE)) {
|
||||
D_8016347C = 1;
|
||||
D_80163480 = 0;
|
||||
}
|
||||
} else if (D_8016347E == 0) {
|
||||
if (!(temp_s0->effects & EXPLOSION_CRASH_EFFECT)) {
|
||||
temp_s0->type |= 0x2000;
|
||||
temp_s0->type |= PLAYER_START_SEQUENCE;
|
||||
}
|
||||
D_8016347E = 1;
|
||||
D_80163484 = 0;
|
||||
} else if (!(temp_s0->effects & EXPLOSION_CRASH_EFFECT)) {
|
||||
temp_s0->type |= 0x2000;
|
||||
temp_s0->type |= PLAYER_START_SEQUENCE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ void func_8000DF8C(s32 bombKartId) {
|
|||
var_s1 = 0;
|
||||
sp7E = 4;
|
||||
var_v0->triggers |= VERTICAL_TUMBLE_TRIGGER;
|
||||
var_v0->type &= ~0x2000;
|
||||
var_v0->type &= ~PLAYER_START_SEQUENCE;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -133,8 +133,9 @@ void regulate_cpu_speed(s32 playerId, f32 targetSpeed, Player* player) {
|
|||
s32 var_a1;
|
||||
|
||||
speed = player->speed;
|
||||
if (!(player->effects & BANANA_SPINOUT_EFFECT) && !(player->effects & DRIVING_SPINOUT_EFFECT) && !(player->effects & LIGHTNING_STRIKE_EFFECT) &&
|
||||
!(player->triggers & VERTICAL_TUMBLE_TRIGGER) && !(player->triggers & HIT_BY_STAR_TRIGGER) && !(player->triggers & HIGH_TUMBLE_TRIGGER) &&
|
||||
if (!(player->effects & BANANA_SPINOUT_EFFECT) && !(player->effects & DRIVING_SPINOUT_EFFECT) &&
|
||||
!(player->effects & LIGHTNING_STRIKE_EFFECT) && !(player->triggers & VERTICAL_TUMBLE_TRIGGER) &&
|
||||
!(player->triggers & HIT_BY_STAR_TRIGGER) && !(player->triggers & HIGH_TUMBLE_TRIGGER) &&
|
||||
!(player->triggers & LOW_TUMBLE_TRIGGER)) {
|
||||
if (gCurrentCourseId == COURSE_AWARD_CEREMONY) {
|
||||
func_80007FA4(playerId, player, speed);
|
||||
|
|
|
|||
|
|
@ -458,12 +458,12 @@ s16 update_player_path(f32 posX, f32 posY, f32 posZ, s16 pathPointIndex, Player*
|
|||
}
|
||||
} else { // AI or special case player handling
|
||||
if (D_801631E0[playerId] == true) {
|
||||
if (player->unk_0CA & 1) {
|
||||
if (player->lakituProps & LAKITU_RETRIEVAL) {
|
||||
temp_v1 = &gTrackPaths[pathIndex][pathPointIndex];
|
||||
player->pos[0] = (f32) temp_v1->posX;
|
||||
player->pos[1] = (f32) temp_v1->posY;
|
||||
player->pos[2] = (f32) temp_v1->posZ;
|
||||
player->unk_0CA &= ~0x0001;
|
||||
player->lakituProps &= ~LAKITU_RETRIEVAL;
|
||||
return pathPointIndex;
|
||||
}
|
||||
if (playerId == ((s32) D_80163488 % 8)) {
|
||||
|
|
|
|||
155
src/effects.c
155
src/effects.c
|
|
@ -135,9 +135,9 @@ UNUSED void func_unnamed33(void) {
|
|||
|
||||
void func_8008C310(Player* player) {
|
||||
// The << 9 is a hacky way to check for VERTICAL_TUMBLE_TRIGGER
|
||||
if ((player->triggers & HIGH_TUMBLE_TRIGGER) || (player->triggers & LOW_TUMBLE_TRIGGER) || ((player->triggers << 9) < 0) ||
|
||||
(player->triggers & HIT_BY_STAR_TRIGGER)) {
|
||||
player->unk_0B6 = ((u16) player->unk_0B6 | 0x1000);
|
||||
if ((player->triggers & HIGH_TUMBLE_TRIGGER) || (player->triggers & LOW_TUMBLE_TRIGGER) ||
|
||||
((player->triggers << 9) < 0) || (player->triggers & HIT_BY_STAR_TRIGGER)) {
|
||||
player->kartGraphics = ((u16) player->kartGraphics | EXPLOSION);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -157,7 +157,7 @@ void clean_effect(Player* player, s8 playerIndex) {
|
|||
if ((player->effects & BANANA_NEAR_SPINOUT_EFFECT) == BANANA_NEAR_SPINOUT_EFFECT) {
|
||||
func_8008D0E4(player, playerIndex);
|
||||
}
|
||||
if ((player->unk_044 & 0x4000) != 0) {
|
||||
if ((player->kartProps & DRIVING_SPINOUT) != 0) {
|
||||
func_8008D3B0(player, playerIndex);
|
||||
}
|
||||
if ((player->effects & MUSHROOM_EFFECT) == MUSHROOM_EFFECT) {
|
||||
|
|
@ -190,7 +190,7 @@ void clean_effect(Player* player, s8 playerIndex) {
|
|||
if ((player->effects & UNKNOWN_EFFECT_0x10000000) == UNKNOWN_EFFECT_0x10000000) {
|
||||
func_8008FEDC(player, playerIndex);
|
||||
}
|
||||
player->unk_044 = (s16) (player->unk_044 & 0xFFFE);
|
||||
player->kartProps = (s16) (player->kartProps & ~BACK_UP);
|
||||
player->effects = (s32) (player->effects & ~AB_SPIN_EFFECT);
|
||||
}
|
||||
|
||||
|
|
@ -269,7 +269,7 @@ void func_8008C73C(Player* player, s8 playerIndex) {
|
|||
player->effects |= BANANA_SPINOUT_EFFECT;
|
||||
}
|
||||
|
||||
player->unk_0B6 |= 0x80;
|
||||
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;
|
||||
// clang-format on
|
||||
|
|
@ -313,7 +313,7 @@ void func_8008C8C4(Player* player, s8 playerId) {
|
|||
player->currentSpeed = (f32) (player->currentSpeed + 100.0f);
|
||||
}
|
||||
if ((gModeSelection == VERSUS) && ((player->type & PLAYER_CPU) == PLAYER_CPU) && (!gDemoMode) &&
|
||||
((player->unk_0CA & 2) == 0) && (gGPCurrentRaceRankByPlayerId[playerId] != 0)) {
|
||||
((player->lakituProps & HELD_BY_LAKITU) == 0) && (gGPCurrentRaceRankByPlayerId[playerId] != 0)) {
|
||||
player->triggers = (s32) (player->triggers | VERTICAL_TUMBLE_TRIGGER);
|
||||
}
|
||||
}
|
||||
|
|
@ -414,7 +414,7 @@ void func_8008CEB0(Player* player, s8 playerIndex) {
|
|||
func_8008C73C(player, playerIndex);
|
||||
var_v1 = 0;
|
||||
} else {
|
||||
player->unk_0B6 |= 0x20;
|
||||
player->kartGraphics |= WHISTLE;
|
||||
player->effects &= ~BANANA_SPINOUT_SAVE_EFFECT;
|
||||
if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) {
|
||||
func_800C90F4(playerIndex, (player->characterId * 0x10) + 0x29008008);
|
||||
|
|
@ -452,7 +452,7 @@ void func_8008D0FC(Player* player, s8 playerIndex) {
|
|||
player->unk_0B8 = 2.0f;
|
||||
player->unk_0AC = 1;
|
||||
player->effects &= ~DRIFTING_EFFECT;
|
||||
player->unk_044 |= 0x4000;
|
||||
player->kartProps |= DRIVING_SPINOUT;
|
||||
}
|
||||
|
||||
void func_8008D170(Player* player, s8 playerIndex) {
|
||||
|
|
@ -470,16 +470,16 @@ void func_8008D170(Player* player, s8 playerIndex) {
|
|||
var_v1 = 0;
|
||||
var_a3 = -var_a3;
|
||||
var_f0 *= 0.9;
|
||||
if (((player->effects & BRAKING_EFFECT) == BRAKING_EFFECT) || !(player->unk_044 & 0x20)) {
|
||||
if (((player->effects & BRAKING_EFFECT) == BRAKING_EFFECT) || !(player->kartProps & THROTTLE)) {
|
||||
player->effects |= BANANA_SPINOUT_SAVE_EFFECT;
|
||||
}
|
||||
if (var_f0 <= 1.3) {
|
||||
player->unk_044 &= ~0x4000;
|
||||
player->kartProps &= ~DRIVING_SPINOUT;
|
||||
if ((player->effects & BANANA_SPINOUT_SAVE_EFFECT) != BANANA_SPINOUT_SAVE_EFFECT) {
|
||||
func_8008C73C(player, playerIndex);
|
||||
var_v1 = 0;
|
||||
} else {
|
||||
player->unk_0B6 |= 0x20;
|
||||
player->kartGraphics |= WHISTLE;
|
||||
player->effects &= ~BANANA_SPINOUT_SAVE_EFFECT;
|
||||
if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) {
|
||||
func_800C90F4(playerIndex, (player->characterId * 0x10) + 0x29008008);
|
||||
|
|
@ -501,12 +501,12 @@ void func_8008D170(Player* player, s8 playerIndex) {
|
|||
player->unk_0AC = var_a3;
|
||||
if (player->effects & MIDAIR_EFFECT) {
|
||||
func_8008C73C(player, playerIndex);
|
||||
player->unk_044 &= ~0x4000;
|
||||
player->kartProps &= ~DRIVING_SPINOUT;
|
||||
}
|
||||
}
|
||||
|
||||
void func_8008D3B0(Player* player, UNUSED s8 playerIndex) {
|
||||
player->unk_044 &= 0xBFFF;
|
||||
player->kartProps &= ~DRIVING_SPINOUT;
|
||||
}
|
||||
|
||||
void trigger_shroom(Player* player, s8 playerIndex) {
|
||||
|
|
@ -612,7 +612,7 @@ void func_8008D760(Player* player) {
|
|||
player->rotation[1] = player->unk_0AE;
|
||||
player->effects &= ~UNKNOWN_EFFECT_0x80000;
|
||||
player->kartGravity = gKartGravityTable[player->characterId];
|
||||
player->type &= 0xFF7F;
|
||||
player->type &= ~PLAYER_UNKNOWN_0x80;
|
||||
}
|
||||
|
||||
void func_8008D7B0(Player* player, s8 playerIndex) {
|
||||
|
|
@ -716,7 +716,7 @@ void trigger_squish(Player* player, s8 playerIndex) {
|
|||
}
|
||||
|
||||
player->effects |= SQUISH_EFFECT;
|
||||
if (((player->type) & 0x1000) != 0) {
|
||||
if (((player->type) & PLAYER_CPU) != 0) {
|
||||
play_cpu_sound_effect(playerIndex, player);
|
||||
}
|
||||
}
|
||||
|
|
@ -961,7 +961,7 @@ void func_8008E4A4(Player* player, s8 playerIndex) {
|
|||
D_80165190[2][playerIndex] = 1;
|
||||
D_80165190[3][playerIndex] = 1;
|
||||
player->unk_042 = 0;
|
||||
player->type &= ~0x80;
|
||||
player->type &= ~PLAYER_UNKNOWN_0x80;
|
||||
|
||||
if ((gIsPlayerTripleAButtonCombo[playerIndex] == true) && ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN)) {
|
||||
player->currentSpeed += 100.0f;
|
||||
|
|
@ -991,7 +991,7 @@ void func_8008E4A4(Player* player, s8 playerIndex) {
|
|||
player->currentSpeed += 100.0f;
|
||||
}
|
||||
|
||||
player->type &= ~0x80;
|
||||
player->type &= ~PLAYER_UNKNOWN_0x80;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1031,7 +1031,7 @@ void trigger_vertical_tumble(Player* player, s8 playerIndex) {
|
|||
}
|
||||
|
||||
player->triggers &= ~(VERTICAL_TUMBLE_TRIGGER | HIT_PADDLE_BOAT_TRIGGER);
|
||||
player->unk_0B6 |= 0x40;
|
||||
player->kartGraphics |= CRASH;
|
||||
gTimerBoostTripleACombo[playerIndex] = 0;
|
||||
gIsPlayerTripleAButtonCombo[playerIndex] = false;
|
||||
gCountASwitch[playerIndex] = 0;
|
||||
|
|
@ -1131,7 +1131,7 @@ void trigger_high_tumble(Player* player, s8 playerIndex) {
|
|||
}
|
||||
|
||||
player->effects |= HIT_BY_STAR_EFFECT;
|
||||
player->unk_0B6 |= 0x40;
|
||||
player->kartGraphics |= CRASH;
|
||||
player->triggers &= ~(HIT_BY_STAR_TRIGGER | HIGH_TUMBLE_TRIGGER);
|
||||
|
||||
gTimerBoostTripleACombo[playerIndex] = 0;
|
||||
|
|
@ -1167,7 +1167,7 @@ void trigger_asphalt_ramp_boost(Player* player, s8 playerId) {
|
|||
func_800C90F4(playerId, (player->characterId * 0x10) + 0x29008001);
|
||||
func_800C9060(playerId, 0x1900A40B);
|
||||
}
|
||||
player->unk_044 &= ~0x1;
|
||||
player->kartProps &= ~BACK_UP;
|
||||
player->effects &= ~AB_SPIN_EFFECT;
|
||||
}
|
||||
|
||||
|
|
@ -1215,7 +1215,7 @@ void trigger_wood_ramp_boost(Player* player, s8 playerId) {
|
|||
func_800C9060(playerId, 0x1900A40B);
|
||||
}
|
||||
|
||||
player->unk_044 &= ~0x1;
|
||||
player->kartProps &= ~BACK_UP;
|
||||
player->effects &= ~AB_SPIN_EFFECT;
|
||||
}
|
||||
|
||||
|
|
@ -1263,14 +1263,14 @@ void func_8008F1B8(Player* player, s8 arg1) {
|
|||
|
||||
player->unk_08C = (player->unk_210 * 0.05);
|
||||
if (player->unk_0B2 < 0) {
|
||||
if ((player->unk_044 & 0x80) == 0x80) {
|
||||
if ((player->kartProps & EARLY_SPINOUT_LEFT) == EARLY_SPINOUT_LEFT) {
|
||||
player->rotation[1] += 182;
|
||||
D_8018D920[arg1] += 182;
|
||||
|
||||
temp = ((u16) D_8018D920[arg1] / 182);
|
||||
if (temp == 180) {
|
||||
player->effects &= ~EARLY_START_SPINOUT_EFFECT;
|
||||
player->type &= ~0x80;
|
||||
player->type &= ~PLAYER_UNKNOWN_0x80;
|
||||
player->currentSpeed /= 3.0f;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1280,7 +1280,7 @@ void func_8008F1B8(Player* player, s8 arg1) {
|
|||
temp = ((u16) D_8018D920[arg1] / 182);
|
||||
if (temp == 180) {
|
||||
player->effects &= ~EARLY_START_SPINOUT_EFFECT;
|
||||
player->type &= ~0x80;
|
||||
player->type &= ~PLAYER_UNKNOWN_0x80;
|
||||
player->currentSpeed /= 3.0f;
|
||||
}
|
||||
}
|
||||
|
|
@ -1292,8 +1292,8 @@ void func_8008F1B8(Player* player, s8 arg1) {
|
|||
if (temp < 71) {
|
||||
--player->unk_0B2;
|
||||
}
|
||||
player->unk_044 |= 0x80;
|
||||
player->unk_044 &= ~0x40;
|
||||
player->kartProps |= EARLY_SPINOUT_LEFT;
|
||||
player->kartProps &= ~EARLY_SPINOUT_RIGHT;
|
||||
return;
|
||||
}
|
||||
player->rotation[1] += 364;
|
||||
|
|
@ -1302,8 +1302,8 @@ void func_8008F1B8(Player* player, s8 arg1) {
|
|||
if (temp >= 110) {
|
||||
--player->unk_0B2;
|
||||
}
|
||||
player->unk_044 |= 0x40;
|
||||
player->unk_044 &= ~0x80;
|
||||
player->kartProps |= EARLY_SPINOUT_RIGHT;
|
||||
player->kartProps &= ~EARLY_SPINOUT_LEFT;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1333,7 +1333,7 @@ void func_8008F494(Player* player, s8 playerIndex) {
|
|||
((player->effects & EXPLOSION_CRASH_EFFECT)) || ((player->effects & HIT_BY_STAR_EFFECT)) ||
|
||||
((player->effects & HIT_BY_GREEN_SHELL_EFFECT) != 0)) &&
|
||||
(gModeSelection == BATTLE)) {
|
||||
player->unk_044 |= 0x8000;
|
||||
player->kartProps |= UNKNOWN_BATTLE_VAR;
|
||||
}
|
||||
|
||||
clean_effect(player, playerIndex);
|
||||
|
|
@ -1346,16 +1346,17 @@ void func_8008F494(Player* player, s8 playerIndex) {
|
|||
player->unk_042 = 0;
|
||||
|
||||
if (((player->type & PLAYER_HUMAN) != 0) && ((player->type & PLAYER_INVISIBLE_OR_BOMB) == 0) &&
|
||||
((player->unk_0CA & 2) == 0) && ((player->unk_0DE & 1) == 0) && ((player->unk_0DE & 2) == 0)) {
|
||||
((player->lakituProps & HELD_BY_LAKITU) == 0) && ((player->oobProps & UNDER_OOB_OR_FLUID_LEVEL) == 0) &&
|
||||
((player->oobProps & PASS_OOB_OR_FLUID_LEVEL) == 0)) {
|
||||
func_800C90F4(playerIndex, (player->characterId * 0x10) + 0x29008004);
|
||||
}
|
||||
}
|
||||
|
||||
void func_8008F5A4(Player* player, s8 playerIndex) {
|
||||
|
||||
if ((player->unk_044 & 0x8000) != 0) {
|
||||
if ((player->kartProps & UNKNOWN_BATTLE_VAR) != 0) {
|
||||
pop_player_balloon(player, playerIndex);
|
||||
player->unk_044 &= ~0x8000;
|
||||
player->kartProps &= ~UNKNOWN_BATTLE_VAR;
|
||||
}
|
||||
|
||||
player->unk_206 = 0;
|
||||
|
|
@ -1449,7 +1450,7 @@ void apply_boo_effect(Player* player, s8 playerIndex) {
|
|||
player->alpha = ALPHA_MAX;
|
||||
gPlayerOtherScreensAlpha[playerIndex] = ALPHA_MAX;
|
||||
player->effects &= ~BOO_EFFECT;
|
||||
if ((player->type & 0x4000) != 0) {
|
||||
if ((player->type & PLAYER_HUMAN) != 0) {
|
||||
func_800CB064(playerIndex);
|
||||
}
|
||||
}
|
||||
|
|
@ -1459,7 +1460,7 @@ void apply_boo_effect(Player* player, s8 playerIndex) {
|
|||
gPlayerOtherScreensAlpha[playerIndex] = ALPHA_MAX;
|
||||
player->alpha = ALPHA_MAX;
|
||||
player->effects &= ~BOO_EFFECT;
|
||||
if ((player->type & 0x4000) != 0) {
|
||||
if ((player->type & PLAYER_HUMAN) != 0) {
|
||||
func_800CB064(playerIndex);
|
||||
}
|
||||
}
|
||||
|
|
@ -1468,9 +1469,9 @@ void apply_boo_effect(Player* player, s8 playerIndex) {
|
|||
|
||||
void trigger_boo(Player* player, s8 playerIndex) {
|
||||
s16 temp_v1;
|
||||
|
||||
// become boo
|
||||
if ((player->type & PLAYER_HUMAN) != 0) {
|
||||
player->unk_044 |= 0x200;
|
||||
player->kartProps |= BECOME_INVISIBLE;
|
||||
|
||||
for (temp_v1 = 0; temp_v1 < 10; ++temp_v1) {
|
||||
player->particles[temp_v1].IsAlive = 0;
|
||||
|
|
@ -1498,7 +1499,7 @@ void func_8008FB30(Player* player, s8 playerIndex) {
|
|||
gPlayerOtherScreensAlpha[playerIndex] = ALPHA_MAX;
|
||||
|
||||
player->effects &= ~BOO_EFFECT;
|
||||
if ((player->type & 0x4000) != 0) {
|
||||
if ((player->type & PLAYER_HUMAN) != 0) {
|
||||
func_800CB064(playerIndex);
|
||||
}
|
||||
}
|
||||
|
|
@ -1508,7 +1509,7 @@ void func_8008FB30(Player* player, s8 playerIndex) {
|
|||
gPlayerOtherScreensAlpha[playerIndex] = ALPHA_MAX;
|
||||
player->alpha = ALPHA_MAX;
|
||||
player->effects &= ~BOO_EFFECT;
|
||||
if ((player->type & 0x4000) != 0) {
|
||||
if ((player->type & PLAYER_HUMAN) != 0) {
|
||||
func_800CB064(playerIndex);
|
||||
}
|
||||
}
|
||||
|
|
@ -1519,7 +1520,7 @@ void func_8008FC1C(Player* player) {
|
|||
|
||||
if ((player->type & PLAYER_UNKNOWN_0x40) != 0) {
|
||||
playerIndex = get_player_index_for_player(player);
|
||||
player->type = 0x7000;
|
||||
player->type = (PLAYER_HUMAN | PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
func_80056A94(playerIndex);
|
||||
}
|
||||
}
|
||||
|
|
@ -1551,7 +1552,7 @@ void func_8008FD4C(Player* player, UNUSED s8 arg1) {
|
|||
s16 temp_v0;
|
||||
|
||||
player->triggers |= LOSE_BATTLE_EFFECT;
|
||||
player->unk_044 |= 0x200;
|
||||
player->kartProps |= BECOME_INVISIBLE;
|
||||
|
||||
for (temp_v0 = 0; temp_v0 < 10; ++temp_v0) {
|
||||
player->particles[temp_v0].IsAlive = 0;
|
||||
|
|
@ -1559,10 +1560,10 @@ void func_8008FD4C(Player* player, UNUSED s8 arg1) {
|
|||
player->particles[temp_v0].type = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// become bomb
|
||||
void func_8008FDA8(Player* player, UNUSED s8 arg1) {
|
||||
s16 temp_v0;
|
||||
player->unk_044 |= 0x200;
|
||||
player->kartProps |= BECOME_INVISIBLE;
|
||||
for (temp_v0 = 0; temp_v0 < 10; ++temp_v0) {
|
||||
player->particles[temp_v0].IsAlive = 0;
|
||||
player->particles[temp_v0].timer = 0;
|
||||
|
|
@ -1773,7 +1774,7 @@ void func_80090778(Player* player) {
|
|||
player->unk_078 = 0;
|
||||
player->unk_07C = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_0CA |= 8;
|
||||
player->lakituProps |= LAKITU_SCENE;
|
||||
player->effects &= ~DRIFTING_EFFECT;
|
||||
player->unk_222 = 0;
|
||||
player->unk_08C = 0.0f;
|
||||
|
|
@ -1806,24 +1807,25 @@ void func_80090868(Player* player) {
|
|||
player->unk_08C = 0.0f;
|
||||
playerIndex = get_player_index_for_player(player);
|
||||
|
||||
if ((player->unk_0CA & 2) != 2) {
|
||||
if ((player->lakituProps & HELD_BY_LAKITU) != HELD_BY_LAKITU) {
|
||||
player->unk_D98 = 1;
|
||||
player->unk_D9C = 0.0f;
|
||||
player->unk_DA0 = 0.5f;
|
||||
course_update_path_point(player, playerIndex);
|
||||
player->unk_222 = 0;
|
||||
player->unk_0CA |= 2;
|
||||
player->lakituProps |= HELD_BY_LAKITU;
|
||||
player->unk_0C8 = 0;
|
||||
if ((player->unk_0DE & 1) == 1) {
|
||||
if ((player->oobProps & UNDER_OOB_OR_FLUID_LEVEL) == UNDER_OOB_OR_FLUID_LEVEL) {
|
||||
if ((gCurrentCourseId == COURSE_BOWSER_CASTLE) || (gCurrentCourseId == COURSE_BIG_DONUT)) {
|
||||
player->unk_0CA |= 0x1000;
|
||||
player->lakituProps |= LAKITU_LAVA;
|
||||
} else {
|
||||
player->unk_0CA |= 0x2000;
|
||||
player->lakituProps |= LAKITU_WATER;
|
||||
}
|
||||
|
||||
// removing the water effect for Sherbet Land makes sense. Perhaps rainbow road and skyscraper
|
||||
// had lava instead of an abyss initially?
|
||||
if ((gCurrentCourseId == COURSE_SHERBET_LAND) || (gCurrentCourseId == COURSE_SKYSCRAPER) ||
|
||||
(gCurrentCourseId == COURSE_RAINBOW_ROAD)) {
|
||||
player->unk_0CA &= ~0x3000;
|
||||
player->lakituProps &= ~(LAKITU_LAVA | LAKITU_WATER);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1846,8 +1848,8 @@ void func_80090970(Player* player, s8 playerId, s8 arg2) {
|
|||
clean_effect(player, playerId);
|
||||
switch (player->unk_222) {
|
||||
case 0:
|
||||
if ((player->unk_0CA & 1) == 1) {
|
||||
if ((player->unk_0C8 < 0x3C) || ((player->unk_0CA & 2) != 2)) {
|
||||
if ((player->lakituProps & LAKITU_RETRIEVAL) == LAKITU_RETRIEVAL) {
|
||||
if ((player->unk_0C8 < 0x3C) || ((player->lakituProps & HELD_BY_LAKITU) != HELD_BY_LAKITU)) {
|
||||
player->unk_0C8++;
|
||||
if (player->unk_0C8 >= 0x3C) {
|
||||
player->unk_0C8 = 0x003C;
|
||||
|
|
@ -1857,16 +1859,16 @@ void func_80090970(Player* player, s8 playerId, s8 arg2) {
|
|||
move_s16_towards(&player->unk_0CC[arg2], 0, 0.2f);
|
||||
if ((D_801652A0[playerId] + 40.0f) <= player->pos[1]) {
|
||||
player->unk_222 = 1;
|
||||
player->unk_0CA |= 4;
|
||||
player->lakituProps |= LAKITU_FIZZLE;
|
||||
player->alpha = 0x00FF;
|
||||
}
|
||||
}
|
||||
} else if ((player->unk_0CA & 2) == 2) {
|
||||
} else if ((player->lakituProps & HELD_BY_LAKITU) == HELD_BY_LAKITU) {
|
||||
move_f32_towards(&player->pos[1], player->unk_074 + 100.0f, 0.025f);
|
||||
move_s16_towards(&player->unk_0CC[arg2], 0, 0.2f);
|
||||
if ((player->unk_074 + 40.0f) <= player->pos[1]) {
|
||||
player->unk_222 = 1;
|
||||
player->unk_0CA |= 4;
|
||||
player->lakituProps |= LAKITU_FIZZLE;
|
||||
player->alpha = 0x00FF;
|
||||
}
|
||||
}
|
||||
|
|
@ -1875,16 +1877,16 @@ void func_80090970(Player* player, s8 playerId, s8 arg2) {
|
|||
}
|
||||
break;
|
||||
case 1:
|
||||
if (((player->type & PLAYER_HUMAN) == 0x4000) && ((player->type & PLAYER_CPU) == 0)) {
|
||||
if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && ((player->type & PLAYER_CPU) == 0)) {
|
||||
func_8009E088(playerId, 0xA);
|
||||
}
|
||||
if ((player->unk_0CA & 1) == 1) {
|
||||
if ((player->lakituProps & LAKITU_RETRIEVAL) == LAKITU_RETRIEVAL) {
|
||||
move_f32_towards(&player->pos[1], D_801652A0[playerId] + 40.0f, 0.02f);
|
||||
player->alpha -= 8;
|
||||
if (player->alpha < 9) {
|
||||
player->alpha = 0;
|
||||
player->unk_222 = 2;
|
||||
player->unk_0CA &= ~0x0001;
|
||||
player->lakituProps &= ~LAKITU_RETRIEVAL;
|
||||
}
|
||||
} else {
|
||||
move_f32_towards(&player->pos[1], player->oldPos[1] + 40.0f, 0.02f);
|
||||
|
|
@ -1894,7 +1896,7 @@ void func_80090970(Player* player, s8 playerId, s8 arg2) {
|
|||
player->unk_222 = 2;
|
||||
}
|
||||
}
|
||||
player->unk_0CA &= ~0x2000;
|
||||
player->lakituProps &= ~LAKITU_WATER;
|
||||
break;
|
||||
case 2:
|
||||
func_80090178(player, playerId, sp44, sp38);
|
||||
|
|
@ -1920,7 +1922,7 @@ void func_80090970(Player* player, s8 playerId, s8 arg2) {
|
|||
if (player->alpha >= 0xF0) {
|
||||
player->alpha = 0x00FF;
|
||||
player->unk_222 = 4;
|
||||
player->unk_0CA &= ~0x0004;
|
||||
player->lakituProps &= ~LAKITU_FIZZLE;
|
||||
player->unk_0C8 = 0;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1938,7 +1940,7 @@ void func_80090970(Player* player, s8 playerId, s8 arg2) {
|
|||
move_f32_towards(&player->pos[1], (player->unk_074 + player->boundingBoxSize) - 2.0f, 0.04f);
|
||||
player->unk_0C8++;
|
||||
if (((player->effects & MIDAIR_EFFECT) != MIDAIR_EFFECT) || (player->effects & ENEMY_BONK_EFFECT)) {
|
||||
player->unk_0CA &= ~0x1000;
|
||||
player->lakituProps &= ~LAKITU_LAVA;
|
||||
if (player->unk_0C8 >= 0x5B) {
|
||||
if (player->type & PLAYER_HUMAN) {
|
||||
func_800C9018(playerId, SOUND_ARG_LOAD(0x01, 0x00, 0xFA, 0x28));
|
||||
|
|
@ -1946,10 +1948,10 @@ void func_80090970(Player* player, s8 playerId, s8 arg2) {
|
|||
if (gModeSelection == BATTLE) {
|
||||
pop_player_balloon(player, playerId);
|
||||
}
|
||||
player->unk_0CA &= ~0x0002;
|
||||
player->unk_0DE &= ~0x0004;
|
||||
if ((player->unk_0CA & 0x80) != 0x80) {
|
||||
player->unk_0CA &= ~0x0008;
|
||||
player->lakituProps &= ~HELD_BY_LAKITU;
|
||||
player->oobProps &= ~UNDER_FLUID_LEVEL;
|
||||
if ((player->lakituProps & FROZEN_EFFECT) != FROZEN_EFFECT) {
|
||||
player->lakituProps &= ~LAKITU_SCENE;
|
||||
if ((player->topSpeed * 0.9) <= player->currentSpeed) {
|
||||
func_8008F104(player, playerId);
|
||||
}
|
||||
|
|
@ -1986,7 +1988,8 @@ void func_80090970(Player* player, s8 playerId, s8 arg2) {
|
|||
|
||||
bool prevent_item_use(Player* player) {
|
||||
s32 phi_v0 = 0;
|
||||
if ((((((player->unk_0CA & 2) == 2) || ((player->unk_0CA & 8) == 8)) ||
|
||||
if ((((((player->lakituProps & HELD_BY_LAKITU) == HELD_BY_LAKITU) ||
|
||||
((player->lakituProps & LAKITU_SCENE) == LAKITU_SCENE)) ||
|
||||
((player->type & PLAYER_UNKNOWN_0x40) != 0)) ||
|
||||
((player->type & PLAYER_CINEMATIC_MODE) != 0)) ||
|
||||
((player->type & PLAYER_EXISTS) == 0)) {
|
||||
|
|
@ -2016,13 +2019,14 @@ bool prevent_item_use(Player* player) {
|
|||
}
|
||||
}
|
||||
|
||||
//UNUSED
|
||||
void func_800911B4(Player* player, s8 arg1) {
|
||||
s32 temp_v0;
|
||||
|
||||
player->unk_0AE = player->rotation[1];
|
||||
player->unk_044 |= 0x1800;
|
||||
player->unk_044 &= ~0x0400;
|
||||
player->unk_044 |= 0x2000;
|
||||
player->kartProps |= (UNUSED_0x1000 | UNUSED_0x800);
|
||||
player->kartProps &= ~UNUSED_0x400;
|
||||
player->kartProps |= UNUSED_0x2000;
|
||||
player->kartHopJerk = 0.002f;
|
||||
player->kartHopAcceleration = 0.0f;
|
||||
player->kartHopVelocity = 2.6f;
|
||||
|
|
@ -2059,12 +2063,13 @@ void func_800911B4(Player* player, s8 arg1) {
|
|||
} while (temp_v0 < 10);
|
||||
}
|
||||
|
||||
// unused
|
||||
void func_80091298(Player* player, s8 arg1) {
|
||||
s16 var_v1;
|
||||
UNUSED s32 stackPadding1;
|
||||
Vec3f spC = { 27.167f, 25.167f, 23.167f };
|
||||
|
||||
player->unk_044 |= 0x2000;
|
||||
player->kartProps |= UNUSED_0x2000;
|
||||
if (player->unk_0B2 == 0) {
|
||||
var_v1 = 0;
|
||||
} else {
|
||||
|
|
@ -2086,7 +2091,7 @@ void func_80091298(Player* player, s8 arg1) {
|
|||
player->unk_07C = 0;
|
||||
player->unk_0C0 = 0;
|
||||
player->unk_DB4.unkC = 3.0f;
|
||||
player->unk_044 &= ~0x800;
|
||||
player->kartProps &= ~UNUSED_0x800;
|
||||
player->kartGravity = gKartGravityTable[player->characterId];
|
||||
player->unk_0D4[0] = 0;
|
||||
player->type |= PLAYER_START_SEQUENCE;
|
||||
|
|
@ -2102,8 +2107,8 @@ void func_80091298(Player* player, s8 arg1) {
|
|||
}
|
||||
|
||||
void func_80091440(s8 arg0) {
|
||||
if ((gPlayers[arg0].unk_044 & 0x800) == 0) {
|
||||
gPlayers[arg0].unk_044 |= 0x2400;
|
||||
gPlayers[arg0].type &= ~0x2000;
|
||||
if ((gPlayers[arg0].kartProps & UNUSED_0x800) == 0) {
|
||||
gPlayers[arg0].kartProps |= (UNUSED_0x2000 | UNUSED_0x400);
|
||||
gPlayers[arg0].type &= ~PLAYER_START_SEQUENCE;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1191,7 +1191,7 @@ void load_kart_texture(Player* player, s8 playerId, s8 screenId, s8 screenId2, s
|
|||
((temp & DRIVING_SPINOUT_EFFECT) == DRIVING_SPINOUT_EFFECT) ||
|
||||
((temp & UNKNOWN_EFFECT_0x80000) == UNKNOWN_EFFECT_0x80000) ||
|
||||
((temp & UNKNOWN_EFFECT_0x800000) == UNKNOWN_EFFECT_0x800000) ||
|
||||
((temp & LIGHTNING_STRIKE_EFFECT) == LIGHTNING_STRIKE_EFFECT) || ((player->unk_044 & 0x800) != 0)) {
|
||||
((temp & LIGHTNING_STRIKE_EFFECT) == LIGHTNING_STRIKE_EFFECT) || ((player->kartProps & UNUSED_0x800) != 0)) {
|
||||
if (player->animFrameSelector[screenId] != 0) {
|
||||
osInvalDCache(&gEncodedKartTexture[index][screenId2][playerId], D_800DDEB0[player->characterId]);
|
||||
|
||||
|
|
@ -1247,7 +1247,7 @@ void load_kart_texture_non_blocking(Player* player, s8 arg1, s8 arg2, s8 arg3, s
|
|||
((temp & DRIVING_SPINOUT_EFFECT) == DRIVING_SPINOUT_EFFECT) ||
|
||||
((temp & UNKNOWN_EFFECT_0x80000) == UNKNOWN_EFFECT_0x80000) ||
|
||||
((temp & UNKNOWN_EFFECT_0x800000) == UNKNOWN_EFFECT_0x800000) ||
|
||||
((temp & LIGHTNING_STRIKE_EFFECT) == LIGHTNING_STRIKE_EFFECT) || ((player->unk_044 & 0x800) != 0)) {
|
||||
((temp & LIGHTNING_STRIKE_EFFECT) == LIGHTNING_STRIKE_EFFECT) || ((player->kartProps & UNUSED_0x800) != 0)) {
|
||||
if (player->animFrameSelector[arg2] != 0) {
|
||||
osInvalDCache(&gEncodedKartTexture[arg4][arg3][arg1], D_800DDEB0[player->characterId]);
|
||||
|
||||
|
|
|
|||
|
|
@ -79,8 +79,6 @@ void rsp_set_matrix_transformation_inverted_x_y_orientation(Vec3f, Vec3su, f32);
|
|||
void rsp_set_matrix_transl_rot_scale(Vec3f, Vec3f, f32);
|
||||
void rsp_set_matrix_gObjectList(s32);
|
||||
|
||||
#define DEGREES_CONVERSION_FACTOR 182
|
||||
|
||||
/* This is where I'd put my static data, if I had any */
|
||||
extern s8 D_801658FE;
|
||||
|
||||
|
|
|
|||
|
|
@ -217,22 +217,23 @@ s32 get_player_index_for_player(Player* player) {
|
|||
|
||||
void func_80027DA8(Player* player, s8 playerId) {
|
||||
if (D_8015F890 != 1) {
|
||||
if ((player->type & 0x10) != 0x10) {
|
||||
if (((D_8018D168 == 1) && ((player->type & PLAYER_HUMAN) == 0x4000)) && ((player->type & 0x100) != 0x100)) {
|
||||
if ((player->type & PLAYER_UNKNOWN_0x10) != PLAYER_UNKNOWN_0x10) {
|
||||
if (((D_8018D168 == 1) && ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN)) &&
|
||||
((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB)) {
|
||||
func_800C94A4(playerId);
|
||||
player->type |= 0x10;
|
||||
} else if ((player->type & 0x2000) == 0) {
|
||||
player->type |= PLAYER_UNKNOWN_0x10;
|
||||
} else if ((player->type & PLAYER_START_SEQUENCE) == 0) {
|
||||
func_800C9A88(playerId);
|
||||
player->type |= 0x10;
|
||||
player->type |= PLAYER_UNKNOWN_0x10;
|
||||
}
|
||||
}
|
||||
} else if ((player->type & 0x10) != 0x10) {
|
||||
} else if ((player->type & PLAYER_UNKNOWN_0x10) != PLAYER_UNKNOWN_0x10) {
|
||||
if ((D_8018D168 == 1) && (player == gPlayerOne)) {
|
||||
func_800C94A4(playerId);
|
||||
player->type |= 0x10;
|
||||
} else if ((player->type & 0x2000) == 0) {
|
||||
player->type |= PLAYER_UNKNOWN_0x10;
|
||||
} else if ((player->type & PLAYER_START_SEQUENCE) == 0) {
|
||||
func_800C9A88(playerId);
|
||||
player->type |= 0x10;
|
||||
player->type |= PLAYER_UNKNOWN_0x10;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -532,7 +533,8 @@ void func_80028864(Player* player, Camera* camera, s8 playerId, s8 screenId) {
|
|||
break;
|
||||
}
|
||||
if ((isVisible == 1) || ((player->type & PLAYER_INVISIBLE_OR_BOMB) == PLAYER_INVISIBLE_OR_BOMB) ||
|
||||
(gModeSelection == BATTLE) || ((player->unk_0CA & 2) != 0) || (player->unk_0CA & 8) ||
|
||||
(gModeSelection == BATTLE) || ((player->lakituProps & HELD_BY_LAKITU) != 0) ||
|
||||
(player->lakituProps & LAKITU_SCENE) ||
|
||||
//! @todo make a proper match
|
||||
((*(D_801633F8 + (playerId))) == ((s16) 1U))) {
|
||||
player->effects &= ~LOST_RACE_EFFECT;
|
||||
|
|
@ -544,7 +546,8 @@ void func_80028864(Player* player, Camera* camera, s8 playerId, s8 screenId) {
|
|||
((player->effects & UNKNOWN_EFFECT_0x800000) == UNKNOWN_EFFECT_0x800000) ||
|
||||
((player->effects & EXPLOSION_CRASH_EFFECT) == EXPLOSION_CRASH_EFFECT) ||
|
||||
((player->effects & HIT_BY_STAR_EFFECT) == HIT_BY_STAR_EFFECT) ||
|
||||
((player->effects & LIGHTNING_STRIKE_EFFECT) == LIGHTNING_STRIKE_EFFECT) || (player->unk_044 & 0x800)) {
|
||||
((player->effects & LIGHTNING_STRIKE_EFFECT) == LIGHTNING_STRIKE_EFFECT) ||
|
||||
(player->kartProps & UNUSED_0x800)) {
|
||||
func_8002E594(player, camera, screenId, playerId);
|
||||
} else {
|
||||
func_8002D268(player, camera, screenId, playerId);
|
||||
|
|
@ -555,7 +558,7 @@ void func_80028864(Player* player, Camera* camera, s8 playerId, s8 screenId) {
|
|||
} else if ((player->type & PLAYER_STAGING) == PLAYER_STAGING) {
|
||||
func_8002D028(player, playerId);
|
||||
func_8002F730(player, camera, screenId, playerId);
|
||||
} else if (player->type & 0x80) {
|
||||
} else if (player->type & PLAYER_UNKNOWN_0x80) {
|
||||
func_8002D268(player, camera, screenId, playerId);
|
||||
} else {
|
||||
if ((player->type & PLAYER_HUMAN) != PLAYER_HUMAN) {
|
||||
|
|
@ -577,7 +580,7 @@ void func_80028C44(Player* player, Camera* camera, s8 playerId, s8 screenId) {
|
|||
((player->effects & EXPLOSION_CRASH_EFFECT) == EXPLOSION_CRASH_EFFECT) ||
|
||||
((player->effects & HIT_BY_STAR_EFFECT) == HIT_BY_STAR_EFFECT) ||
|
||||
((player->effects & LIGHTNING_STRIKE_EFFECT) == LIGHTNING_STRIKE_EFFECT) ||
|
||||
((player->unk_044 & 0x800) != 0)) {
|
||||
((player->kartProps & UNUSED_0x800) != 0)) {
|
||||
func_8002E594(player, camera, screenId, playerId);
|
||||
} else {
|
||||
func_8002D268(player, camera, screenId, playerId);
|
||||
|
|
@ -588,12 +591,11 @@ void func_80028C44(Player* player, Camera* camera, s8 playerId, s8 screenId) {
|
|||
}
|
||||
|
||||
void func_80028D3C(Player* player, Camera* camera, s8 playerId, s8 screenId) {
|
||||
if ((((player->type & PLAYER_START_SEQUENCE) == 0) && (D_800DC510 != 5)) || (player->unk_0CA & 2) != 0 ||
|
||||
(player->unk_0CA & 8) != 0 ||
|
||||
if ((((player->type & PLAYER_START_SEQUENCE) == 0) && (D_800DC510 != 5)) || (player->lakituProps & 2) != 0 ||
|
||||
(player->lakituProps & LAKITU_SCENE) != 0 ||
|
||||
(player->effects & (LIGHTNING_EFFECT | EXPLOSION_CRASH_EFFECT | HIT_BY_STAR_EFFECT | SQUISH_EFFECT |
|
||||
POST_SQUISH_EFFECT | TERRAIN_TUMBLE_EFFECT | 0xC00 | 0xC0)) != 0) {
|
||||
player->effects &= ~LOST_RACE_EFFECT;
|
||||
|
||||
if (((player->effects & BANANA_SPINOUT_EFFECT) == BANANA_SPINOUT_EFFECT) ||
|
||||
((player->effects & DRIVING_SPINOUT_EFFECT) == DRIVING_SPINOUT_EFFECT) ||
|
||||
((player->effects & HIT_BY_GREEN_SHELL_EFFECT) == HIT_BY_GREEN_SHELL_EFFECT) ||
|
||||
|
|
@ -603,7 +605,7 @@ void func_80028D3C(Player* player, Camera* camera, s8 playerId, s8 screenId) {
|
|||
((player->effects & EXPLOSION_CRASH_EFFECT) == EXPLOSION_CRASH_EFFECT) ||
|
||||
((player->effects & HIT_BY_STAR_EFFECT) == HIT_BY_STAR_EFFECT) ||
|
||||
((player->effects & LIGHTNING_STRIKE_EFFECT) == LIGHTNING_STRIKE_EFFECT) ||
|
||||
((player->unk_044 & 0x800) != 0)) {
|
||||
((player->kartProps & UNUSED_0x800) != 0)) {
|
||||
func_8002E594(player, camera, screenId, playerId);
|
||||
} else {
|
||||
func_8002D268(player, camera, screenId, playerId);
|
||||
|
|
@ -766,16 +768,17 @@ void func_8002934C(Player* player, Camera* camera, s8 screenId, s8 playerId) {
|
|||
temp_a0 = (s16) player->unk_0D4[screenId] * sins((u16) temp_a0) + player->unk_0CC[screenId] * coss((u16) temp_a0);
|
||||
move_s16_towards(&player->unk_050[screenId], temp_a0, 0.5f);
|
||||
var_a0 = player->animFrameSelector[screenId];
|
||||
player->unk_002 = player->unk_002 & (~(4 << (screenId * 4)));
|
||||
player->unk_002 = player->unk_002 & (~(UNK_002_UNKNOWN_0x4 << (screenId * 4)));
|
||||
if (var_a0 >= 0x101) {
|
||||
var_a0 = 0x201 - var_a0;
|
||||
player->unk_002 |= (4 << (screenId * 4));
|
||||
player->unk_002 |= (UNK_002_UNKNOWN_0x4 << (screenId * 4));
|
||||
}
|
||||
if (((player->effects & BANANA_SPINOUT_EFFECT) != BANANA_SPINOUT_EFFECT) &&
|
||||
((player->effects & DRIVING_SPINOUT_EFFECT) != DRIVING_SPINOUT_EFFECT) &&
|
||||
((player->effects & UNKNOWN_EFFECT_0x80000) != UNKNOWN_EFFECT_0x80000) &&
|
||||
((player->effects & UNKNOWN_EFFECT_0x800000) != UNKNOWN_EFFECT_0x800000) &&
|
||||
((player->effects & LIGHTNING_STRIKE_EFFECT) != LIGHTNING_STRIKE_EFFECT) && (!(player->unk_044 & 0x800))) {
|
||||
((player->effects & LIGHTNING_STRIKE_EFFECT) != LIGHTNING_STRIKE_EFFECT) &&
|
||||
(!(player->kartProps & UNUSED_0x800))) {
|
||||
if (var_a0 < 0x51) {
|
||||
var_a1 = 0x208;
|
||||
var_t0 = 0;
|
||||
|
|
@ -788,10 +791,12 @@ void func_8002934C(Player* player, Camera* camera, s8 screenId, s8 playerId) {
|
|||
var_t0 = 0;
|
||||
}
|
||||
if (((player->effects & UNKNOWN_EFFECT_0x80000) == UNKNOWN_EFFECT_0x80000) ||
|
||||
((player->effects & UNKNOWN_EFFECT_0x800000) == UNKNOWN_EFFECT_0x800000) || (player->unk_044 & 0x800)) {
|
||||
((player->effects & UNKNOWN_EFFECT_0x800000) == UNKNOWN_EFFECT_0x800000) ||
|
||||
(player->kartProps & UNUSED_0x800)) {
|
||||
player->unk_050[screenId] = 0;
|
||||
}
|
||||
if (((player->effects & MIDAIR_EFFECT) == MIDAIR_EFFECT) && ((player->unk_0CA & 2) == 2)) {
|
||||
if (((player->effects & MIDAIR_EFFECT) == MIDAIR_EFFECT) &&
|
||||
((player->lakituProps & HELD_BY_LAKITU) == HELD_BY_LAKITU)) {
|
||||
player->unk_050[screenId] = 0;
|
||||
}
|
||||
var_a0 = (player->unk_048[screenId] + player->rotation[1] + player->unk_0C0);
|
||||
|
|
@ -799,7 +804,8 @@ void func_8002934C(Player* player, Camera* camera, s8 screenId, s8 playerId) {
|
|||
((player->effects & DRIVING_SPINOUT_EFFECT) == DRIVING_SPINOUT_EFFECT) ||
|
||||
((player->effects & UNKNOWN_EFFECT_0x80000) == UNKNOWN_EFFECT_0x80000) ||
|
||||
((player->effects & UNKNOWN_EFFECT_0x800000) == UNKNOWN_EFFECT_0x800000) ||
|
||||
((player->effects & LIGHTNING_STRIKE_EFFECT) == LIGHTNING_STRIKE_EFFECT) || (player->unk_044 & 0x800)) {
|
||||
((player->effects & LIGHTNING_STRIKE_EFFECT) == LIGHTNING_STRIKE_EFFECT) ||
|
||||
(player->kartProps & UNUSED_0x800)) {
|
||||
if (var_a0 >= 0x7FF9) {
|
||||
var_a0 = -var_a0;
|
||||
var_a0 /= var_a1;
|
||||
|
|
@ -821,7 +827,7 @@ void func_8002934C(Player* player, Camera* camera, s8 screenId, s8 playerId) {
|
|||
}
|
||||
if ((player->effects & BANANA_SPINOUT_EFFECT) || (player->effects & DRIVING_SPINOUT_EFFECT) ||
|
||||
(player->effects & UNKNOWN_EFFECT_0x80000) || (player->effects & UNKNOWN_EFFECT_0x800000) ||
|
||||
(player->effects & LIGHTNING_STRIKE_EFFECT) || (player->unk_044 & 0x800)) {
|
||||
(player->effects & LIGHTNING_STRIKE_EFFECT) || (player->kartProps & UNUSED_0x800)) {
|
||||
|
||||
if ((player->animFrameSelector[screenId]) >= 0x14) {
|
||||
player->animFrameSelector[screenId] = 0;
|
||||
|
|
@ -831,7 +837,8 @@ void func_8002934C(Player* player, Camera* camera, s8 screenId, s8 playerId) {
|
|||
player->animGroupSelector[screenId] = 4;
|
||||
}
|
||||
if (((player->effects & UNKNOWN_EFFECT_0x80000) == UNKNOWN_EFFECT_0x80000) ||
|
||||
((player->effects & UNKNOWN_EFFECT_0x800000) == UNKNOWN_EFFECT_0x800000) || (player->unk_044 & 0x800)) {
|
||||
((player->effects & UNKNOWN_EFFECT_0x800000) == UNKNOWN_EFFECT_0x800000) ||
|
||||
(player->kartProps & UNUSED_0x800)) {
|
||||
|
||||
player->animGroupSelector[screenId] = 4;
|
||||
}
|
||||
|
|
@ -840,29 +847,29 @@ void func_8002934C(Player* player, Camera* camera, s8 screenId, s8 playerId) {
|
|||
((player->effects & HIT_BY_STAR_EFFECT) == HIT_BY_STAR_EFFECT) || (player->effects & TERRAIN_TUMBLE_EFFECT) ||
|
||||
(player->effects & BANANA_SPINOUT_EFFECT) || (player->effects & DRIVING_SPINOUT_EFFECT)) {
|
||||
|
||||
player->unk_002 |= 1 << (screenId * 4);
|
||||
player->unk_002 |= CHANGING_ANIMATION << (screenId * 4);
|
||||
D_80165190[screenId][playerId] = 1;
|
||||
|
||||
if ((player->effects & BANANA_SPINOUT_EFFECT) || (player->effects & DRIVING_SPINOUT_EFFECT)) {
|
||||
if ((player->animFrameSelector[screenId] == gLastAnimFrameSelector[screenId][playerId]) &&
|
||||
(player->animGroupSelector[screenId] == gLastAnimGroupSelector[screenId][playerId])) {
|
||||
player->unk_002 &= ~(1 << (screenId * 4));
|
||||
player->unk_002 &= ~(CHANGING_ANIMATION << (screenId * 4));
|
||||
D_80165190[screenId][playerId] = 1;
|
||||
}
|
||||
} else if (((player->unk_0A8) >> 8) == D_80165150[screenId][playerId] >> 8) {
|
||||
player->unk_002 &= ~(1 << (screenId * 4));
|
||||
player->unk_002 &= ~(CHANGING_ANIMATION << (screenId * 4));
|
||||
}
|
||||
} else {
|
||||
player->unk_002 |= 1 << (screenId * 4);
|
||||
player->unk_002 |= CHANGING_ANIMATION << (screenId * 4);
|
||||
if (((player->animFrameSelector[screenId] == gLastAnimFrameSelector[screenId][playerId]) &&
|
||||
(player->animGroupSelector[screenId] == gLastAnimGroupSelector[screenId][playerId])) &&
|
||||
((D_80165190[screenId][playerId]) == 0)) {
|
||||
player->unk_002 &= ~(1 << (screenId * 4));
|
||||
player->unk_002 &= ~(CHANGING_ANIMATION << (screenId * 4));
|
||||
}
|
||||
}
|
||||
temp_a0_2 = gLastAnimFrameSelector[screenId][playerId] - player->animFrameSelector[screenId];
|
||||
if ((temp_a0_2 >= 0x14) || (temp_a0_2 < (-0x13))) {
|
||||
player->unk_002 |= 1 << (screenId * 4);
|
||||
player->unk_002 |= CHANGING_ANIMATION << (screenId * 4);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -947,7 +954,7 @@ void func_80029B4C(Player* player, UNUSED f32 arg1, f32 arg2, UNUSED f32 arg3) {
|
|||
temp_f2_3 = ((gCharacterSize[player->characterId] * 18.0f) + 1.0f) * player->size;
|
||||
temp_f0_2 = player->unk_23C - player->unk_230;
|
||||
player->unk_206 = -atan1s(temp_f0_2 / temp_f2_3);
|
||||
if (((player->unk_0CA & 2) == 2) || (player->effects & MIDAIR_EFFECT)) {
|
||||
if (((player->lakituProps & HELD_BY_LAKITU) == HELD_BY_LAKITU) || (player->effects & MIDAIR_EFFECT)) {
|
||||
player->unk_206 = 0;
|
||||
}
|
||||
if ((player->effects & MIDAIR_EFFECT) != MIDAIR_EFFECT) {
|
||||
|
|
@ -963,7 +970,8 @@ void func_80029B4C(Player* player, UNUSED f32 arg1, f32 arg2, UNUSED f32 arg3) {
|
|||
}
|
||||
move_s16_towards(&player->slopeAccel, temp_v0, 0.5f);
|
||||
}
|
||||
if (((player->effects & MIDAIR_EFFECT) == MIDAIR_EFFECT) && ((player->unk_0CA & 2) == 2)) {
|
||||
if (((player->effects & MIDAIR_EFFECT) == MIDAIR_EFFECT) &&
|
||||
((player->lakituProps & HELD_BY_LAKITU) == HELD_BY_LAKITU)) {
|
||||
player->slopeAccel = (s16) ((s32) player->unk_D9C);
|
||||
}
|
||||
player->surfaceType = get_surface_type(player->collision.meshIndexZX) & 0xFF;
|
||||
|
|
@ -974,7 +982,8 @@ void func_80029B4C(Player* player, UNUSED f32 arg1, f32 arg2, UNUSED f32 arg3) {
|
|||
}
|
||||
}
|
||||
if (player->surfaceType == BOOST_RAMP_WOOD) {
|
||||
if (((player->effects & BOOST_RAMP_WOOD_EFFECT) != BOOST_RAMP_WOOD_EFFECT) && ((player->effects & MIDAIR_EFFECT) != MIDAIR_EFFECT)) {
|
||||
if (((player->effects & BOOST_RAMP_WOOD_EFFECT) != BOOST_RAMP_WOOD_EFFECT) &&
|
||||
((player->effects & MIDAIR_EFFECT) != MIDAIR_EFFECT)) {
|
||||
player->triggers |= BOOST_RAMP_WOOD_TRIGGER;
|
||||
}
|
||||
}
|
||||
|
|
@ -1265,7 +1274,7 @@ void func_8002AB70(Player* player) {
|
|||
if (player->effects & UNKNOWN_EFFECT_0x80000) {
|
||||
player->kartGravity = 1500.0f;
|
||||
}
|
||||
if ((player->unk_044 & 0x800) != 0) {
|
||||
if ((player->kartProps & UNUSED_0x800) != 0) {
|
||||
player->kartGravity = 1900.0f;
|
||||
}
|
||||
if ((player->effects & UNKNOWN_EFFECT_0x800000) == UNKNOWN_EFFECT_0x800000) {
|
||||
|
|
@ -1299,7 +1308,7 @@ void func_8002AE38(Player* player, s8 arg1, f32 arg2, f32 arg3, f32 arg4, f32 ar
|
|||
sp28 = (sins(-player->rotation[1]) * player->speed) + arg2;
|
||||
temp_f16 = (coss(-player->rotation[1]) * player->speed) + arg3;
|
||||
if (((player->effects & BANANA_NEAR_SPINOUT_EFFECT) != BANANA_NEAR_SPINOUT_EFFECT) &&
|
||||
((player->effects & DRIFTING_EFFECT) != DRIFTING_EFFECT) && !(player->unk_044 & 0x4000) &&
|
||||
((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)))) {
|
||||
if ((player->effects & AB_SPIN_EFFECT) == AB_SPIN_EFFECT) {
|
||||
|
|
@ -1425,8 +1434,9 @@ void apply_triggers(Player* player, s8 playerId, UNUSED s8 screenId) {
|
|||
}
|
||||
|
||||
void func_8002B5C0(Player* player, UNUSED s8 playerId, UNUSED s8 screenId) {
|
||||
if (((player->unk_0CA & 8) != 0) || ((player->unk_0CA & 2) != 0)) {
|
||||
player->triggers &= ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
if (((player->lakituProps & LAKITU_SCENE) != 0) || ((player->lakituProps & HELD_BY_LAKITU) != 0)) {
|
||||
player->triggers &=
|
||||
ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
}
|
||||
// Green shell
|
||||
if ((player->effects & HIT_BY_GREEN_SHELL_EFFECT) == HIT_BY_GREEN_SHELL_EFFECT) {
|
||||
|
|
@ -1435,50 +1445,62 @@ void func_8002B5C0(Player* player, UNUSED s8 playerId, UNUSED s8 screenId) {
|
|||
// Spinout (banana or driving)
|
||||
if (((player->effects & BANANA_SPINOUT_EFFECT) == BANANA_SPINOUT_EFFECT) ||
|
||||
((player->effects & DRIVING_SPINOUT_EFFECT) == DRIVING_SPINOUT_EFFECT)) {
|
||||
player->triggers &= (ALL_TRIGGERS & ~(ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS)) | UNUSED_TRIGGER_0x20000;
|
||||
player->triggers &=
|
||||
(ALL_TRIGGERS & ~(ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS)) |
|
||||
UNUSED_TRIGGER_0x20000;
|
||||
}
|
||||
// Near spinout (banana)
|
||||
if ((player->effects & BANANA_NEAR_SPINOUT_EFFECT) == BANANA_NEAR_SPINOUT_EFFECT) {
|
||||
player->triggers &= ALL_TRIGGERS & ~(ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
}
|
||||
if ((player->unk_044 & 0x4000) != 0) {
|
||||
if ((player->kartProps & DRIVING_SPINOUT) != 0) {
|
||||
player->triggers &= ALL_TRIGGERS & ~(ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
}
|
||||
//unclear
|
||||
// unclear
|
||||
if ((player->effects & UNKNOWN_EFFECT_0x80000) == UNKNOWN_EFFECT_0x80000) {
|
||||
player->triggers &= ALL_TRIGGERS & ~((HIT_TRIGGERS ^ LIGHTNING_STRIKE_TRIGGER) | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
player->triggers &= ALL_TRIGGERS & ~((HIT_TRIGGERS ^ LIGHTNING_STRIKE_TRIGGER) | ANY_BOOST_TRIGGERS |
|
||||
RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
}
|
||||
//unclear
|
||||
// unclear
|
||||
if ((player->effects & UNKNOWN_EFFECT_0x800000) == UNKNOWN_EFFECT_0x800000) {
|
||||
player->triggers &= ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
player->triggers &=
|
||||
ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
}
|
||||
//squished
|
||||
// squished
|
||||
if ((player->effects & SQUISH_EFFECT) == SQUISH_EFFECT) {
|
||||
player->triggers &= (ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS)) | THWOMP_SQUISH_TRIGGER;
|
||||
player->triggers &= (ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS |
|
||||
STATE_TRANSITION_TRIGGERS)) |
|
||||
THWOMP_SQUISH_TRIGGER;
|
||||
}
|
||||
//explosion crash
|
||||
// explosion crash
|
||||
if ((player->effects & EXPLOSION_CRASH_EFFECT) == EXPLOSION_CRASH_EFFECT) {
|
||||
player->triggers &= ALL_TRIGGERS & ~((HIT_TRIGGERS ^ LIGHTNING_STRIKE_TRIGGER) | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
player->triggers &= ALL_TRIGGERS & ~((HIT_TRIGGERS ^ LIGHTNING_STRIKE_TRIGGER) | ANY_BOOST_TRIGGERS |
|
||||
RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
}
|
||||
// hit by star or red shell
|
||||
if ((player->effects & HIT_BY_STAR_EFFECT) == HIT_BY_STAR_EFFECT) {
|
||||
player->triggers &= ALL_TRIGGERS & ~((HIT_TRIGGERS ^ LIGHTNING_STRIKE_TRIGGER) | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
player->triggers &= ALL_TRIGGERS & ~((HIT_TRIGGERS ^ LIGHTNING_STRIKE_TRIGGER) | ANY_BOOST_TRIGGERS |
|
||||
RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
}
|
||||
// boost asphalt
|
||||
if ((player->effects & BOOST_RAMP_ASPHALT_EFFECT) == BOOST_RAMP_ASPHALT_EFFECT) {
|
||||
player->triggers &= ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
player->triggers &=
|
||||
ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
}
|
||||
// boost ramp
|
||||
if ((player->effects & BOOST_RAMP_WOOD_EFFECT) == BOOST_RAMP_WOOD_EFFECT) {
|
||||
player->triggers &= ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
player->triggers &=
|
||||
ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
}
|
||||
// Terrain tumble
|
||||
if ((player->effects & TERRAIN_TUMBLE_EFFECT) == TERRAIN_TUMBLE_EFFECT) {
|
||||
player->triggers &= ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
player->triggers &=
|
||||
ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
}
|
||||
// star
|
||||
if ((player->effects & STAR_EFFECT) == STAR_EFFECT) {
|
||||
player->triggers &= ALL_TRIGGERS & ~(HIT_TRIGGERS | SHROOM_TRIGGER | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
player->triggers &=
|
||||
ALL_TRIGGERS & ~(HIT_TRIGGERS | SHROOM_TRIGGER | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
}
|
||||
// boo
|
||||
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
|
||||
|
|
@ -1490,7 +1512,8 @@ void func_8002B5C0(Player* player, UNUSED s8 playerId, UNUSED s8 screenId) {
|
|||
}
|
||||
// CPU_FAST_EFFECTS
|
||||
if ((player->effects & LIGHTNING_STRIKE_EFFECT) == LIGHTNING_STRIKE_EFFECT) {
|
||||
player->triggers &= ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
player->triggers &=
|
||||
ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1501,7 +1524,7 @@ void func_8002B830(Player* player, s8 playerId, s8 screenId) {
|
|||
if (player->triggers != 0) {
|
||||
apply_triggers(player, playerId, screenId);
|
||||
}
|
||||
if ((player->unk_044 & 0x400) != 0) {
|
||||
if ((player->kartProps & UNUSED_0x400) != 0) { // can never be true
|
||||
func_800911B4(player, playerId);
|
||||
}
|
||||
}
|
||||
|
|
@ -1789,7 +1812,7 @@ void func_8002C17C(Player* player, s8 playerId) {
|
|||
} else if (D_80165330[playerId] == 0) {
|
||||
gCopyNearestPathPointByPlayerId[playerId] = gNearestPathPointByPlayerId[playerId];
|
||||
gCopyPathIndexByPlayerId[playerId] = gPathIndexByPlayerId[playerId];
|
||||
} else if (!((player->effects & MIDAIR_EFFECT) || (player->unk_0CA & 1))) {
|
||||
} else if (!((player->effects & MIDAIR_EFFECT) || (player->lakituProps & LAKITU_RETRIEVAL))) {
|
||||
D_80165330[playerId] = 0;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1803,20 +1826,20 @@ void func_8002C17C(Player* player, s8 playerId) {
|
|||
void func_8002C4F8(Player* player, s8 playerIndex) {
|
||||
D_801652A0[playerIndex] = func_802AAB4C(player);
|
||||
if (player->pos[1] <= D_801652A0[playerIndex]) {
|
||||
player->unk_0DE |= 0x0002;
|
||||
player->oobProps |= PASS_OOB_OR_FLUID_LEVEL;
|
||||
} else {
|
||||
player->unk_0DE &= ~0x0002;
|
||||
player->oobProps &= ~PASS_OOB_OR_FLUID_LEVEL;
|
||||
}
|
||||
if (player->boundingBoxSize < (D_801652A0[playerIndex] - player->pos[1])) {
|
||||
player->unk_0DE |= 1;
|
||||
player->unk_0DE &= ~0x0002;
|
||||
player->oobProps |= UNDER_OOB_OR_FLUID_LEVEL;
|
||||
player->oobProps &= ~PASS_OOB_OR_FLUID_LEVEL;
|
||||
} else {
|
||||
player->unk_0DE &= ~0x0001;
|
||||
player->oobProps &= ~UNDER_OOB_OR_FLUID_LEVEL;
|
||||
}
|
||||
if (player->boundingBoxSize < (D_801652A0[playerIndex] - player->pos[1])) {
|
||||
if ((player->unk_0DE & 4) != 4) {
|
||||
player->unk_0DE |= 8;
|
||||
player->unk_0DE |= 4;
|
||||
if ((player->oobProps & UNDER_FLUID_LEVEL) != UNDER_FLUID_LEVEL) {
|
||||
player->oobProps |= UNDER_OOB_LEVEL;
|
||||
player->oobProps |= UNDER_FLUID_LEVEL;
|
||||
if ((gCurrentCourseId != COURSE_KOOPA_BEACH) && (gCurrentCourseId != COURSE_SKYSCRAPER) &&
|
||||
(gCurrentCourseId != COURSE_RAINBOW_ROAD) && ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN)) {
|
||||
if ((gCurrentCourseId == COURSE_BOWSER_CASTLE) || (gCurrentCourseId == COURSE_BIG_DONUT)) {
|
||||
|
|
@ -1829,19 +1852,21 @@ void func_8002C4F8(Player* player, s8 playerIndex) {
|
|||
}
|
||||
if ((gCurrentCourseId == COURSE_KOOPA_BEACH) || (gCurrentCourseId == COURSE_SKYSCRAPER) ||
|
||||
(gCurrentCourseId == COURSE_RAINBOW_ROAD)) {
|
||||
player->unk_0DE &= ~0x000C;
|
||||
player->oobProps &= ~(UNDER_OOB_LEVEL | UNDER_FLUID_LEVEL);
|
||||
}
|
||||
if ((player->boundingBoxSize < (D_801652A0[playerIndex] - player->pos[1])) &&
|
||||
(player->collision.surfaceDistance[2] >= 600.0f)) {
|
||||
player->unk_0CA |= 1;
|
||||
player->lakituProps |= LAKITU_RETRIEVAL;
|
||||
}
|
||||
if (player->collision.surfaceDistance[2] >= 600.0f) {
|
||||
player->unk_0CA |= 0x0100;
|
||||
player->lakituProps |= WENT_OVER_OOB;
|
||||
} else if ((player->effects & MIDAIR_EFFECT) != MIDAIR_EFFECT) {
|
||||
player->unk_0CA &= ~0x0100;
|
||||
player->lakituProps &= ~WENT_OVER_OOB;
|
||||
}
|
||||
if ((player->type & PLAYER_CPU) && ((func_802ABDF4(player->collision.meshIndexZX) != 0) || (player->unk_0CA & 1))) {
|
||||
if (!(player->unk_0CA & 2) && !(player->unk_0CA & 8) && !(player->effects & LOST_RACE_EFFECT)) {
|
||||
if ((player->type & PLAYER_CPU) &&
|
||||
((func_802ABDF4(player->collision.meshIndexZX) != 0) || (player->lakituProps & LAKITU_RETRIEVAL))) {
|
||||
if (!(player->lakituProps & HELD_BY_LAKITU) && !(player->lakituProps & LAKITU_SCENE) &&
|
||||
!(player->effects & LOST_RACE_EFFECT)) {
|
||||
func_80090778(player);
|
||||
func_80090868(player);
|
||||
}
|
||||
|
|
@ -1859,7 +1884,7 @@ void func_8002C7E4(Player* player, s8 playerIndex, s8 arg2) {
|
|||
if ((player->effects & MUSHROOM_EFFECT) != MUSHROOM_EFFECT) {
|
||||
func_8002B9CC(player, playerIndex, arg2);
|
||||
}
|
||||
player->unk_044 &= ~0x0001;
|
||||
player->kartProps &= ~BACK_UP;
|
||||
player->unk_046 |= 1;
|
||||
player->unk_046 |= 8;
|
||||
if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) {
|
||||
|
|
@ -1879,7 +1904,7 @@ void func_8002C7E4(Player* player, s8 playerIndex, s8 arg2) {
|
|||
if ((player->effects & ENEMY_BONK_EFFECT) == ENEMY_BONK_EFFECT) {
|
||||
player->effects &= ~ENEMY_BONK_EFFECT;
|
||||
player->unk_10C = 1;
|
||||
player->unk_044 &= ~0x0001;
|
||||
player->kartProps &= ~BACK_UP;
|
||||
return;
|
||||
}
|
||||
player->unk_046 &= ~0x0001;
|
||||
|
|
@ -1906,7 +1931,7 @@ void func_8002C954(Player* player, s8 playerId, Vec3f velocity) {
|
|||
((((temp_f0 >= 20.0f) || (temp_f0 < (-1.0f))) && ((player->effects & TERRAIN_TUMBLE_EFFECT) == 0)) &&
|
||||
(player->effects & MIDAIR_EFFECT)) ||
|
||||
((player->collision.unk34 == 0) && ((player->effects & TERRAIN_TUMBLE_EFFECT) == 0))) &&
|
||||
(((player->unk_0CA & 2) == 0) || (!(player->unk_0CA & 8)))) {
|
||||
(((player->lakituProps & HELD_BY_LAKITU) == 0) || (!(player->lakituProps & LAKITU_SCENE)))) {
|
||||
func_8008F494(player, playerId);
|
||||
}
|
||||
if ((player->unk_046 & 0x20) != 0x20) {
|
||||
|
|
@ -1954,13 +1979,14 @@ void func_8002C954(Player* player, s8 playerId, Vec3f velocity) {
|
|||
}
|
||||
|
||||
void apply_effect(Player* player, s8 playerIndex, s8 arg2) {
|
||||
if (((player->unk_0CA & 2) == 2) || ((player->unk_0CA & 8) == 8)) {
|
||||
if (((player->lakituProps & HELD_BY_LAKITU) == HELD_BY_LAKITU) ||
|
||||
((player->lakituProps & LAKITU_SCENE) == LAKITU_SCENE)) {
|
||||
func_80090970(player, playerIndex, arg2);
|
||||
}
|
||||
if ((player->effects & BANANA_NEAR_SPINOUT_EFFECT) == BANANA_NEAR_SPINOUT_EFFECT) {
|
||||
func_8008CEB0(player, playerIndex);
|
||||
}
|
||||
if (player->unk_044 & 0x4000) {
|
||||
if (player->kartProps & DRIVING_SPINOUT) {
|
||||
func_8008D170(player, playerIndex);
|
||||
}
|
||||
if ((player->effects & MUSHROOM_EFFECT) == MUSHROOM_EFFECT) {
|
||||
|
|
@ -2021,7 +2047,7 @@ void apply_effect(Player* player, s8 playerIndex, s8 arg2) {
|
|||
func_8008FCDC(player, playerIndex);
|
||||
}
|
||||
}
|
||||
if (player->unk_044 & 0x800) {
|
||||
if (player->kartProps & UNUSED_0x800) { // never true
|
||||
func_80091298(player, playerIndex);
|
||||
}
|
||||
}
|
||||
|
|
@ -2061,7 +2087,7 @@ void func_8002D028(Player* player, s8 playerIndex) {
|
|||
if (temp_f18 <= 8.0f) {
|
||||
adjust_angle(&player->rotation[1], -0x8000, 0x016C);
|
||||
if ((player->rotation[1] < (-0x7F41)) || (player->rotation[1] > 0x7F41)) {
|
||||
player->type &= ~0x0200;
|
||||
player->type &= ~PLAYER_STAGING;
|
||||
}
|
||||
player->unk_08C = 0;
|
||||
player->speed = 0;
|
||||
|
|
@ -2125,7 +2151,7 @@ void func_8002D268(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
func_80037BB4(player, sp160);
|
||||
func_8002AB70(player);
|
||||
func_8002FCA8(player, playerId);
|
||||
if (player->unk_044 & 1) {
|
||||
if (player->kartProps & BACK_UP) {
|
||||
player->unk_064[0] *= -1.0f;
|
||||
player->unk_064[2] *= -1.0f;
|
||||
}
|
||||
|
|
@ -2160,9 +2186,9 @@ void func_8002D268(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
temp_f2_2 = ((player->oldPos[2] - player->pos[2]) * coss(player->rotation[1] + player->unk_0C0)) +
|
||||
(-(player->oldPos[0] - player->pos[0]) * sins(player->rotation[1] + player->unk_0C0));
|
||||
if (temp_f2_2 > 0.1) {
|
||||
player->unk_044 |= 8;
|
||||
player->kartProps |= MOVE_BACKWARDS;
|
||||
} else {
|
||||
player->unk_044 &= 0xFFF7;
|
||||
player->kartProps &= ~MOVE_BACKWARDS;
|
||||
}
|
||||
if (((player->unk_08C <= 0.0f) &&
|
||||
((temp_v0_3 = player->effects, (temp_v0_3 & BRAKING_EFFECT) == BRAKING_EFFECT))) &&
|
||||
|
|
@ -2218,15 +2244,16 @@ void func_8002D268(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
(((((f64) ((sp184[1] + gravityY) + sp160[1])) - (newVelocity[1] * (0.12 * ((f64) player->kartFriction)))) /
|
||||
6000.0) /
|
||||
((f64) player->unk_DAC));
|
||||
if (((((player->unk_0CA & 2) == 2) || ((player->unk_0CA & 8) == 8)) ||
|
||||
if (((((player->lakituProps & HELD_BY_LAKITU) == HELD_BY_LAKITU) ||
|
||||
((player->lakituProps & LAKITU_SCENE) == LAKITU_SCENE)) ||
|
||||
((player->effects & SQUISH_EFFECT) == SQUISH_EFFECT)) ||
|
||||
(player->unk_0CA & 1)) {
|
||||
(player->lakituProps & LAKITU_RETRIEVAL)) {
|
||||
newVelocity[0] = 0.0f;
|
||||
newVelocity[1] = 0.0f;
|
||||
newVelocity[2] = 0.0f;
|
||||
}
|
||||
if ((player->unk_044 & 0x10) == 0x10) {
|
||||
player->unk_044 &= 0xFFEF;
|
||||
if ((player->kartProps & LOSE_GP_RACE) == LOSE_GP_RACE) {
|
||||
player->kartProps &= ~LOSE_GP_RACE;
|
||||
}
|
||||
|
||||
posX = player->pos[0];
|
||||
|
|
@ -2240,9 +2267,10 @@ void func_8002D268(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
nextY = posY + player->velocity[1];
|
||||
nextZ = posZ + player->velocity[2] + D_8018CE10[playerId].unk_04[2];
|
||||
|
||||
if (((((player->unk_0CA & 2) != 2) && ((player->unk_0CA & 8) != 8)) &&
|
||||
if (((((player->lakituProps & HELD_BY_LAKITU) != HELD_BY_LAKITU) &&
|
||||
((player->lakituProps & LAKITU_SCENE) != LAKITU_SCENE)) &&
|
||||
((player->effects & SQUISH_EFFECT) != SQUISH_EFFECT)) &&
|
||||
(!(player->unk_0CA & 1))) {
|
||||
(!(player->lakituProps & LAKITU_RETRIEVAL))) {
|
||||
func_8002AAC0(player);
|
||||
nextY += player->kartHopVelocity;
|
||||
nextY -= 0.02;
|
||||
|
|
@ -2252,7 +2280,7 @@ void func_8002D268(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
player->unk_058 = 0.0f;
|
||||
player->unk_060 = 0.0f;
|
||||
player->unk_05C = 1.0f;
|
||||
if ((player->unk_044 & 1) != 1) {
|
||||
if ((player->kartProps & BACK_UP) != BACK_UP) {
|
||||
calculate_orientation_matrix(player->orientationMatrix, player->unk_058, player->unk_05C, player->unk_060,
|
||||
player->rotation[1]);
|
||||
} else {
|
||||
|
|
@ -2271,7 +2299,7 @@ void func_8002D268(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
}
|
||||
player->unk_DB4.unkC = 3.0f;
|
||||
player->unk_DB4.unk18 = 0;
|
||||
player->unk_0B6 |= 0x100;
|
||||
player->kartGraphics |= POOMP;
|
||||
if ((((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) &&
|
||||
((player->effects & BOOST_RAMP_ASPHALT_EFFECT) == BOOST_RAMP_ASPHALT_EFFECT)) &&
|
||||
((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB)) {
|
||||
|
|
@ -2282,7 +2310,7 @@ void func_8002D268(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
func_800CADD0((u8) playerId, ((f32) player->unk_0C2) / 35.0f);
|
||||
}
|
||||
if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) {
|
||||
player->unk_044 |= 0x100;
|
||||
player->kartProps |= POST_TUMBLE_GAS;
|
||||
}
|
||||
}
|
||||
if (((player->unk_0C2 < 0x23) && (player->unk_0C2 >= 0x1C)) && (((player->speed / 18.0f) * 216.0f) >= 20.0f)) {
|
||||
|
|
@ -2293,7 +2321,7 @@ void func_8002D268(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
func_800CADD0((u8) playerId, ((f32) player->unk_0C2) / 35.0f);
|
||||
}
|
||||
if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) {
|
||||
player->unk_044 |= 0x100;
|
||||
player->kartProps |= POST_TUMBLE_GAS;
|
||||
}
|
||||
}
|
||||
if (((player->unk_0C2 < 0x1C) && (player->unk_0C2 >= 4)) && (((player->speed / 18.0f) * 216.0f) >= 20.0f)) {
|
||||
|
|
@ -2340,7 +2368,7 @@ void func_8002D268(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
}
|
||||
if (((!(player->effects & MIDAIR_EFFECT)) && (func_802ABDB8(player->collision.meshIndexZX) != 0)) &&
|
||||
((player->effects & TERRAIN_TUMBLE_EFFECT) != TERRAIN_TUMBLE_EFFECT)) {
|
||||
if ((!(player->unk_0CA & 2)) || (!(player->unk_0CA & 8))) {
|
||||
if ((!(player->lakituProps & HELD_BY_LAKITU)) || (!(player->lakituProps & LAKITU_SCENE))) {
|
||||
func_8008F494(player, playerId);
|
||||
}
|
||||
} else if (((!(player->effects & MIDAIR_EFFECT)) && (func_802ABDB8(player->collision.meshIndexZX) == 0)) &&
|
||||
|
|
@ -2390,7 +2418,7 @@ void func_8002D268(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
player->speed = gKartTopSpeedTable[player->characterId];
|
||||
}
|
||||
}
|
||||
if ((player->unk_044 & 1) == 1) {
|
||||
if ((player->kartProps & BACK_UP) == BACK_UP) {
|
||||
if (player->speed > 1) {
|
||||
temp = 1 / player->speed;
|
||||
player->velocity[0] *= temp;
|
||||
|
|
@ -2450,7 +2478,7 @@ void func_8002E594(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
((player->effects & UNKNOWN_EFFECT_0x80000) == UNKNOWN_EFFECT_0x80000)) ||
|
||||
((player->effects & UNKNOWN_EFFECT_0x800000) == UNKNOWN_EFFECT_0x800000)) ||
|
||||
((player->effects & LIGHTNING_STRIKE_EFFECT) == LIGHTNING_STRIKE_EFFECT)) ||
|
||||
(player->unk_044 & 0x800)) {
|
||||
(player->kartProps & UNUSED_0x800)) {
|
||||
sp46 = 1;
|
||||
} else {
|
||||
sp46 = 0;
|
||||
|
|
@ -2464,7 +2492,8 @@ void func_8002E594(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
gravityX =
|
||||
-1 * (player->unk_064[0]) + (((-player->collision.orientationVector[0]) * player->kartGravity) * 0.1);
|
||||
gravityY = (-player->collision.orientationVector[1]) * player->kartGravity;
|
||||
gravityZ = -1 * (player->unk_064[2]) + (((-player->collision.orientationVector[2]) * player->kartGravity) * 0.1);
|
||||
gravityZ =
|
||||
-1 * (player->unk_064[2]) + (((-player->collision.orientationVector[2]) * player->kartGravity) * 0.1);
|
||||
} else {
|
||||
gravityX = -1 * player->unk_064[0];
|
||||
gravityY = -1 * player->kartGravity;
|
||||
|
|
@ -2493,19 +2522,25 @@ void func_8002E594(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
((player->effects & HIT_BY_GREEN_SHELL_EFFECT) != HIT_BY_GREEN_SHELL_EFFECT) &&
|
||||
((player->effects & EXPLOSION_CRASH_EFFECT) != EXPLOSION_CRASH_EFFECT) &&
|
||||
((player->effects & HIT_BY_STAR_EFFECT) != HIT_BY_STAR_EFFECT)) {
|
||||
newVelocity[0] += (((((spEC[0] + gravityX) + spD4[0])) - (newVelocity[0] * (0.12 * player->kartFriction))) / 6000) /
|
||||
((player->unk_20C * 5.0f) + 1.0f);
|
||||
newVelocity[2] += (((((spEC[2] + gravityZ) + spD4[2])) - (newVelocity[2] * (0.12 * player->kartFriction))) / 6000) /
|
||||
((player->unk_20C * 5.0f) + 1.0f);
|
||||
newVelocity[0] +=
|
||||
(((((spEC[0] + gravityX) + spD4[0])) - (newVelocity[0] * (0.12 * player->kartFriction))) / 6000) /
|
||||
((player->unk_20C * 5.0f) + 1.0f);
|
||||
newVelocity[2] +=
|
||||
(((((spEC[2] + gravityZ) + spD4[2])) - (newVelocity[2] * (0.12 * player->kartFriction))) / 6000) /
|
||||
((player->unk_20C * 5.0f) + 1.0f);
|
||||
} else {
|
||||
newVelocity[0] +=
|
||||
((((f64) (spEC[0] + gravityX + spD4[0]) - (newVelocity[0] * (0.2 * (f64) player->kartFriction))) / 6000) * 0.08);
|
||||
((((f64) (spEC[0] + gravityX + spD4[0]) - (newVelocity[0] * (0.2 * (f64) player->kartFriction))) / 6000) *
|
||||
0.08);
|
||||
newVelocity[2] +=
|
||||
((((f64) (spEC[2] + gravityZ + spD4[2]) - (newVelocity[2] * (0.2 * (f64) player->kartFriction))) / 6000) * 0.08);
|
||||
((((f64) (spEC[2] + gravityZ + spD4[2]) - (newVelocity[2] * (0.2 * (f64) player->kartFriction))) / 6000) *
|
||||
0.08);
|
||||
}
|
||||
newVelocity[1] += (((((spEC[1] + gravityY) + spD4[1])) - (newVelocity[1] * (0.12 * player->kartFriction))) / 6000) / player->unk_DAC;
|
||||
newVelocity[1] += (((((spEC[1] + gravityY) + spD4[1])) - (newVelocity[1] * (0.12 * player->kartFriction))) / 6000) /
|
||||
player->unk_DAC;
|
||||
|
||||
if (((player->unk_0CA & 2) == 2) || ((player->unk_0CA & 8) == 8)) {
|
||||
if (((player->lakituProps & HELD_BY_LAKITU) == HELD_BY_LAKITU) ||
|
||||
((player->lakituProps & LAKITU_SCENE) == LAKITU_SCENE)) {
|
||||
newVelocity[0] = 0.0f;
|
||||
newVelocity[1] = 0.0f;
|
||||
newVelocity[2] = 0.0f;
|
||||
|
|
@ -2542,14 +2577,14 @@ void func_8002E594(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
player->unk_0C2 = 0x0032;
|
||||
}
|
||||
player->unk_DB4.unk18 = 0;
|
||||
player->unk_0B6 |= 0x100;
|
||||
player->kartGraphics |= POOMP;
|
||||
player->unk_DB4.unkC = 3.0f;
|
||||
if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) &&
|
||||
((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB)) {
|
||||
func_800CADD0((u8) playerId, ((f32) player->unk_0C2) / 50.0f);
|
||||
}
|
||||
if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) {
|
||||
player->unk_044 |= 0x100;
|
||||
player->kartProps |= POST_TUMBLE_GAS;
|
||||
}
|
||||
}
|
||||
if (((player->unk_0C2 < 0x1C) && (player->unk_0C2 >= 0xA)) &&
|
||||
|
|
@ -2561,7 +2596,7 @@ void func_8002E594(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
func_800CADD0((u8) playerId, ((f32) player->unk_0C2) / 50.0f);
|
||||
}
|
||||
if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) {
|
||||
player->unk_044 |= 0x100;
|
||||
player->kartProps |= POST_TUMBLE_GAS;
|
||||
}
|
||||
}
|
||||
player->unk_0C2 = 0;
|
||||
|
|
@ -2586,7 +2621,7 @@ void func_8002E594(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
player->kartHopJerk = 0.06f;
|
||||
player->kartHopAcceleration = 0.0f;
|
||||
if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) {
|
||||
player->unk_044 |= 0x100;
|
||||
player->kartProps |= POST_TUMBLE_GAS;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
@ -2627,7 +2662,7 @@ void func_8002E594(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
if (((func_802ABDB8(player->collision.meshIndexZX) != 0) &&
|
||||
((player->effects & TERRAIN_TUMBLE_EFFECT) != TERRAIN_TUMBLE_EFFECT)) &&
|
||||
(((player->speed / 18.0f) * 216.0f) >= 20.0f)) {
|
||||
if ((!(player->unk_0CA & 2)) || (!(player->unk_0CA & 8))) {
|
||||
if ((!(player->lakituProps & HELD_BY_LAKITU)) || (!(player->lakituProps & LAKITU_SCENE))) {
|
||||
func_8008F494(player, playerId);
|
||||
}
|
||||
} else if (((!(player->effects & MIDAIR_EFFECT)) && (func_802ABDB8(player->collision.meshIndexZX) == 0)) &&
|
||||
|
|
@ -2693,7 +2728,7 @@ void control_cpu_movement(Player* player, UNUSED Camera* camera, s8 screenId, s8
|
|||
f32 topSpeedMultiplier;
|
||||
f32 nextY;
|
||||
player->effects |= LOST_RACE_EFFECT;
|
||||
player->unk_044 |= 0x10;
|
||||
player->kartProps |= LOSE_GP_RACE;
|
||||
nextY = gPlayerPathY[playerId];
|
||||
player->unk_204 = 0;
|
||||
player->effects &= ~DRIFTING_EFFECT;
|
||||
|
|
@ -2981,7 +3016,8 @@ f32 func_80030150(Player* player, s8 playerIndex) {
|
|||
var_f0 += D_800E2E90[player->characterId][player->tyres[FRONT_LEFT].surfaceType];
|
||||
}
|
||||
}
|
||||
if (((player->effects & MIDAIR_EFFECT) != MIDAIR_EFFECT) && ((player->unk_0CA & 2) != 2)) {
|
||||
if (((player->effects & MIDAIR_EFFECT) != MIDAIR_EFFECT) &&
|
||||
((player->lakituProps & HELD_BY_LAKITU) != HELD_BY_LAKITU)) {
|
||||
temp_lo = player->slopeAccel / 182;
|
||||
if (var_f2 >= 20.0f) {
|
||||
if ((temp_lo > 0x11) || (temp_lo < -0x11)) {
|
||||
|
|
@ -3021,10 +3057,10 @@ f32 func_80030150(Player* player, s8 playerIndex) {
|
|||
var_f0 += -0.25;
|
||||
}
|
||||
}
|
||||
if ((player->unk_0DE & 1) == 1) {
|
||||
if ((player->oobProps & UNDER_OOB_OR_FLUID_LEVEL) == UNDER_OOB_OR_FLUID_LEVEL) {
|
||||
var_f0 += 0.3;
|
||||
} else {
|
||||
if ((player->unk_0DE & 2) == 2) {
|
||||
if ((player->oobProps & PASS_OOB_OR_FLUID_LEVEL) == PASS_OOB_OR_FLUID_LEVEL) {
|
||||
var_f0 += 0.15;
|
||||
}
|
||||
if (((D_801652A0[playerIndex] - player->tyres[BACK_LEFT].baseHeight) >= 3.5) ||
|
||||
|
|
@ -3072,7 +3108,8 @@ f32 func_80030150(Player* player, s8 playerIndex) {
|
|||
if (var_f2 < 0.0f) {
|
||||
var_f2 = 0.0f;
|
||||
}
|
||||
if (((player->unk_0CA & 2) == 2) || ((player->unk_0CA & 8) == 8) ||
|
||||
if (((player->lakituProps & HELD_BY_LAKITU) == HELD_BY_LAKITU) ||
|
||||
((player->lakituProps & LAKITU_SCENE) == LAKITU_SCENE) ||
|
||||
((player->type & PLAYER_START_SEQUENCE) == PLAYER_START_SEQUENCE)) {
|
||||
return (1.0f - player->unk_104) * var_f2;
|
||||
}
|
||||
|
|
@ -3096,7 +3133,8 @@ void func_80030A34(Player* player) {
|
|||
f32 var_f0;
|
||||
f32 var_f2;
|
||||
|
||||
if (((player->unk_0CA & 2) != 2) && ((player->unk_0CA & 8) != 8)) {
|
||||
if (((player->lakituProps & HELD_BY_LAKITU) != HELD_BY_LAKITU) &&
|
||||
((player->lakituProps & LAKITU_SCENE) != LAKITU_SCENE)) {
|
||||
if ((((player->speed / 18.0f) * 216.0f) >= 8.0f) && (player->unk_DB4.unkC < 1.0f)) {
|
||||
switch (player->surfaceType) { /* irregular */
|
||||
case ASPHALT:
|
||||
|
|
@ -3367,7 +3405,7 @@ void player_accelerate_alternative(Player* player) {
|
|||
if (!((player->effects & MIDAIR_EFFECT)) || ((player->effects & LIGHTNING_EFFECT))) {
|
||||
player->unk_08C = (player->currentSpeed * player->currentSpeed) / 25.0f;
|
||||
}
|
||||
player->unk_044 |= 0x20;
|
||||
player->kartProps |= THROTTLE;
|
||||
// Hacky way to check for START_SPINOUT_TRIGGER
|
||||
if ((player->triggers * 8) < 0) {
|
||||
func_8008F104(player, player_index);
|
||||
|
|
@ -3392,7 +3430,7 @@ void player_decelerate_alternative(Player* player, f32 speed) {
|
|||
if ((player->effects & MIDAIR_EFFECT) != MIDAIR_EFFECT) {
|
||||
player->unk_08C = (player->currentSpeed * player->currentSpeed) / 25.0f;
|
||||
}
|
||||
player->unk_044 &= 0xFFDF;
|
||||
player->kartProps &= ~THROTTLE;
|
||||
// Hacky way to check for START_SPINOUT_TRIGGER
|
||||
if ((player->triggers * 8) < 0) {
|
||||
func_8008F104(player, player_index);
|
||||
|
|
@ -3635,7 +3673,7 @@ void player_accelerate_during_start_sequence(Player* player) {
|
|||
} else {
|
||||
var_v0 = 8;
|
||||
}
|
||||
if ((time_delta < var_v0) && ((player->unk_044 & 0x20) != 0x20)) {
|
||||
if ((time_delta < var_v0) && ((player->kartProps & THROTTLE) != THROTTLE)) {
|
||||
player->triggers |= START_BOOST_TRIGGER;
|
||||
} else if ((player->topSpeed * 0.9f) <= player->currentSpeed) {
|
||||
if ((player->triggers & START_BOOST_TRIGGER) != START_BOOST_TRIGGER) {
|
||||
|
|
@ -3644,7 +3682,7 @@ void player_accelerate_during_start_sequence(Player* player) {
|
|||
}
|
||||
}
|
||||
}
|
||||
player->unk_044 |= 0x20;
|
||||
player->kartProps |= THROTTLE;
|
||||
player->unk_098 = (player->currentSpeed * player->currentSpeed) / 25.0f;
|
||||
}
|
||||
|
||||
|
|
@ -3663,7 +3701,7 @@ void player_decelerate_during_start_sequence(Player* player, f32 speedReduction)
|
|||
player->triggers &= ~START_SPINOUT_TRIGGER;
|
||||
}
|
||||
player->triggers &= ~START_BOOST_TRIGGER;
|
||||
player->unk_044 &= ~0x0020;
|
||||
player->kartProps &= ~THROTTLE;
|
||||
player->unk_098 = (player->currentSpeed * player->currentSpeed) / 25.0f;
|
||||
}
|
||||
|
||||
|
|
@ -3722,7 +3760,8 @@ void player_accelerate_global(Player* player, s32 playerIndex) {
|
|||
if ((gPlayerCurrentSpeed[playerIndex] >= 0.0) && (gPlayerCurrentSpeed[playerIndex] < ((f64) player->topSpeed * 0.1))) {
|
||||
gPlayerCurrentSpeed[playerIndex] += gKartAccelerationTables[player->characterId][0] * 3.2;
|
||||
}
|
||||
if (((player->topSpeed * 0.1) <= gPlayerCurrentSpeed[playerIndex]) && (gPlayerCurrentSpeed[playerIndex] < (player->topSpeed * 0.2))) {
|
||||
if (((player->topSpeed * 0.1) <= gPlayerCurrentSpeed[playerIndex]) &&
|
||||
(gPlayerCurrentSpeed[playerIndex] < (player->topSpeed * 0.2))) {
|
||||
gPlayerCurrentSpeed[playerIndex] += gKartAccelerationTables[player->characterId][1] * 3.2;
|
||||
}
|
||||
if (((player->topSpeed * 0.2) <= gPlayerCurrentSpeed[playerIndex]) &&
|
||||
|
|
@ -3752,7 +3791,7 @@ void player_accelerate_global(Player* player, s32 playerIndex) {
|
|||
if (((player->topSpeed * 0.9) <= gPlayerCurrentSpeed[playerIndex]) && (gPlayerCurrentSpeed[playerIndex] <= (player->topSpeed * 1.0))) {
|
||||
gPlayerCurrentSpeed[playerIndex] += gKartAccelerationTables[player->characterId][9] * 2.8;
|
||||
}
|
||||
player->unk_044 |= 0x20;
|
||||
player->kartProps |= THROTTLE;
|
||||
if (gPlayerCurrentSpeed[playerIndex] < 0.0f) {
|
||||
gPlayerCurrentSpeed[playerIndex] = 0.0f;
|
||||
}
|
||||
|
|
@ -3760,7 +3799,7 @@ void player_accelerate_global(Player* player, s32 playerIndex) {
|
|||
}
|
||||
|
||||
void player_decelerate_global(Player* player, f32 speedReduction, s32 playerIndex) {
|
||||
player->unk_044 &= ~0x20;
|
||||
player->kartProps &= ~THROTTLE;
|
||||
gPlayerCurrentSpeed[playerIndex] -= speedReduction;
|
||||
if (gPlayerCurrentSpeed[playerIndex] <= 0.0f) {
|
||||
gPlayerCurrentSpeed[playerIndex] = 0.0f;
|
||||
|
|
@ -3885,31 +3924,31 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) {
|
|||
((player->effects & ENEMY_BONK_EFFECT) == ENEMY_BONK_EFFECT)) {
|
||||
func_80036CB4(player);
|
||||
}
|
||||
if ((player->unk_0C0 / 182) < (-5)) {
|
||||
player->unk_044 |= 4;
|
||||
player->unk_044 &= 0xFFFD;
|
||||
if ((player->unk_0C0 / DEGREES_CONVERSION_FACTOR) < (-5)) {
|
||||
player->kartProps |= LEFT_TURN;
|
||||
player->kartProps &= ~RIGHT_TURN;
|
||||
D_801652C0[arg2]++;
|
||||
} else if ((player->unk_0C0 / 182) >= 6) {
|
||||
player->unk_044 |= 2;
|
||||
player->unk_044 &= 0xFFFB;
|
||||
} else if ((player->unk_0C0 / DEGREES_CONVERSION_FACTOR) > 5) {
|
||||
player->kartProps |= RIGHT_TURN;
|
||||
player->kartProps &= ~LEFT_TURN;
|
||||
D_801652C0[arg2]++;
|
||||
} else {
|
||||
player->unk_044 &= 0xFFF9;
|
||||
player->kartProps &= ~(LEFT_TURN | RIGHT_TURN);
|
||||
D_801652C0[arg2] = 0;
|
||||
}
|
||||
if (((player->effects & HOP_EFFECT) == HOP_EFFECT) || ((player->effects & DRIFTING_EFFECT) == DRIFTING_EFFECT)) {
|
||||
player->unk_044 &= 0xFFF9;
|
||||
player->kartProps &= ~(LEFT_TURN | RIGHT_TURN);
|
||||
}
|
||||
sp2E4 = player->unk_07C;
|
||||
temp_v0_3 = get_clamped_stickX_with_deadzone(controller);
|
||||
if (((player->unk_044 & 1) == 1) || ((player->unk_044 & 8) == 8)) {
|
||||
if (((player->kartProps & BACK_UP) == BACK_UP) || ((player->kartProps & MOVE_BACKWARDS) == MOVE_BACKWARDS)) {
|
||||
temp_v0_3 = -temp_v0_3;
|
||||
}
|
||||
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->unk_044 & 0x4000))) {
|
||||
if (((sp2D0 >= 0x5A) || (sp2D0 < (-0x59))) && (!(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)) &&
|
||||
|
|
@ -3934,7 +3973,7 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) {
|
|||
var_a0 = 0;
|
||||
}
|
||||
if (((player->speed / 18.0f) * 216.0f) >= 15.0f) {
|
||||
if ((player->unk_044 & 2) == 2) {
|
||||
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));
|
||||
|
|
@ -3944,7 +3983,7 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) {
|
|||
sp2C8 = (s32) (((f32) (var_a0 + 5)) * (1.0f + var_f2));
|
||||
sp2CC = (s32) (((f32) (var_a0 + 9)) * (1.0f + var_f2));
|
||||
}
|
||||
} else if ((player->unk_044 & 4) == 4) {
|
||||
} 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));
|
||||
|
|
@ -3963,11 +4002,11 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) {
|
|||
sp2CC = 8;
|
||||
}
|
||||
}
|
||||
if ((player->unk_0DE & 1) == 1) {
|
||||
if ((player->oobProps & UNDER_OOB_OR_FLUID_LEVEL) == UNDER_OOB_OR_FLUID_LEVEL) {
|
||||
sp2C8 *= 1.5;
|
||||
sp2CC *= 1.5;
|
||||
} else {
|
||||
if ((player->unk_0DE & 2) == 2) {
|
||||
if ((player->oobProps & PASS_OOB_OR_FLUID_LEVEL) == PASS_OOB_OR_FLUID_LEVEL) {
|
||||
sp2C8 *= 1.2;
|
||||
sp2CC *= 1.2;
|
||||
}
|
||||
|
|
@ -4246,8 +4285,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)) ||
|
||||
(((player->speed / 18.0f) * 216.0f) <= 20.0f) || ((player->effects & ENEMY_BONK_EFFECT) == ENEMY_BONK_EFFECT)) {
|
||||
if ((((player->effects & HOP_EFFECT) != HOP_EFFECT) && (player->unk_0C0 < 0x3D) &&
|
||||
(player->unk_0C0 > -0x3D)) ||
|
||||
(((player->speed / 18.0f) * 216.0f) <= 20.0f) ||
|
||||
((player->effects & ENEMY_BONK_EFFECT) == ENEMY_BONK_EFFECT)) {
|
||||
func_80036CB4(player);
|
||||
}
|
||||
}
|
||||
|
|
@ -4259,7 +4300,7 @@ void func_80036C5C(Player* player) {
|
|||
if (((player->speed / 18.0f) * 216.0f) > 20.0f) {
|
||||
player->unk_204 = 0;
|
||||
player->effects |= DRIFTING_EFFECT;
|
||||
player->unk_0B6 |= 0x800;
|
||||
player->kartGraphics |= BOING;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -4300,7 +4341,7 @@ void func_80036DB4(Player* player, Vec3f arg1, Vec3f arg2) {
|
|||
((player->effects & HOP_EFFECT) != HOP_EFFECT)) {
|
||||
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->unk_044 & 0x4000)) {
|
||||
} else if (!(player->effects & BANANA_NEAR_SPINOUT_EFFECT) && !(player->kartProps & DRIVING_SPINOUT)) {
|
||||
thing = player->unk_0FA;
|
||||
if (thing > 0) {
|
||||
thing *= -1;
|
||||
|
|
@ -4361,7 +4402,7 @@ void func_800371F4(Player* player, Vec3f arg1, Vec3f arg2) {
|
|||
((player->effects & HOP_EFFECT) != HOP_EFFECT)) {
|
||||
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->unk_044 & 0x4000)) {
|
||||
} else if (!(player->effects & BANANA_NEAR_SPINOUT_EFFECT) && !(player->kartProps & DRIVING_SPINOUT)) {
|
||||
var_v0 = player->unk_0FA;
|
||||
if (var_v0 > 0) {
|
||||
var_v0 *= -1;
|
||||
|
|
@ -4600,7 +4641,7 @@ void func_80037CFC(Player* player, struct Controller* controller, s8 playerIndex
|
|||
player->effects &= ~AB_SPIN_EFFECT;
|
||||
}
|
||||
}
|
||||
if ((player->unk_044 & 1) != 1) {
|
||||
if ((player->kartProps & BACK_UP) != BACK_UP) {
|
||||
if (controller->button & A_BUTTON) {
|
||||
player_accelerate_alternative(player);
|
||||
detect_triple_a_combo_a_pressed(player);
|
||||
|
|
@ -4624,13 +4665,13 @@ void func_80037CFC(Player* player, struct Controller* controller, s8 playerIndex
|
|||
if (((get_clamped_stickY_with_deadzone(controller) < (-0x31)) && (((player->speed / 18.0f) * 216.0f) <= 5.0f)) &&
|
||||
(controller->button & B_BUTTON)) {
|
||||
player->currentSpeed = 140.0f;
|
||||
player->unk_044 |= 1;
|
||||
player->kartProps |= BACK_UP;
|
||||
player->unk_08C = (player->currentSpeed * player->currentSpeed) / 25.0f;
|
||||
player->unk_20C = 0.0f;
|
||||
}
|
||||
if ((get_clamped_stickY_with_deadzone(controller) >= -0x1D) || (!(controller->button & B_BUTTON))) {
|
||||
if ((player->unk_044 & 1) == 1) {
|
||||
player->unk_044 &= 0xFFFE;
|
||||
if ((player->kartProps & BACK_UP) == BACK_UP) {
|
||||
player->kartProps &= ~(BACK_UP);
|
||||
player->currentSpeed = 0.0f;
|
||||
}
|
||||
}
|
||||
|
|
@ -4663,7 +4704,8 @@ void handle_a_press_for_player_during_race(Player* player, struct Controller* co
|
|||
((player->type & PLAYER_CPU) != PLAYER_CPU)) {
|
||||
// If not start sequence
|
||||
if ((player->type & PLAYER_START_SEQUENCE) != PLAYER_START_SEQUENCE) {
|
||||
if (((player->unk_0CA & 2) == 2) || ((player->unk_0CA & 8) == 8)) {
|
||||
if (((player->lakituProps & HELD_BY_LAKITU) == HELD_BY_LAKITU) ||
|
||||
((player->lakituProps & LAKITU_SCENE) == LAKITU_SCENE)) {
|
||||
if (controller->button & A_BUTTON) {
|
||||
player_accelerate(player);
|
||||
} else {
|
||||
|
|
@ -4705,24 +4747,28 @@ void handle_a_press_for_all_players_during_race(void) {
|
|||
if (D_8015F890 != 1) {
|
||||
handle_a_press_for_player_during_race(gPlayerOne, gControllerOne, 0);
|
||||
temp_v0_3 = gPlayerTwo->type;
|
||||
if (((temp_v0_3 & 0x100) == 0x100) && ((temp_v0_3 & 0x800) != 0x800)) {
|
||||
if (((temp_v0_3 & PLAYER_INVISIBLE_OR_BOMB) == PLAYER_INVISIBLE_OR_BOMB) &&
|
||||
((temp_v0_3 & PLAYER_CINEMATIC_MODE) != PLAYER_CINEMATIC_MODE)) {
|
||||
handle_a_press_for_player_during_race(gPlayerTwo, gControllerSix, 1);
|
||||
}
|
||||
temp_v0_4 = gPlayerThree->type;
|
||||
if (((temp_v0_4 & 0x100) == 0x100) && ((temp_v0_4 & 0x800) != 0x800)) {
|
||||
if (((temp_v0_4 & PLAYER_INVISIBLE_OR_BOMB) == PLAYER_INVISIBLE_OR_BOMB) &&
|
||||
((temp_v0_4 & PLAYER_CINEMATIC_MODE) != PLAYER_CINEMATIC_MODE)) {
|
||||
handle_a_press_for_player_during_race(gPlayerThree, gControllerSeven, 2);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if ((gPlayerOne->type & 0x800) != 0x800) {
|
||||
if ((gPlayerOne->type & PLAYER_CINEMATIC_MODE) != PLAYER_CINEMATIC_MODE) {
|
||||
handle_a_press_for_player_during_race(gPlayerOne, gControllerEight, 0);
|
||||
}
|
||||
temp_v0_5 = gPlayerTwo->type;
|
||||
if (((temp_v0_5 & 0x100) == 0x100) && ((temp_v0_5 & 0x800) != 0x800)) {
|
||||
if (((temp_v0_5 & PLAYER_INVISIBLE_OR_BOMB) == PLAYER_INVISIBLE_OR_BOMB) &&
|
||||
((temp_v0_5 & PLAYER_CINEMATIC_MODE) != PLAYER_CINEMATIC_MODE)) {
|
||||
handle_a_press_for_player_during_race(gPlayerTwo, gControllerSix, 1);
|
||||
}
|
||||
temp_v0_6 = gPlayerThree->type;
|
||||
if (((temp_v0_6 & 0x100) == 0x100) && ((temp_v0_6 & 0x800) != 0x800)) {
|
||||
if (((temp_v0_6 & PLAYER_INVISIBLE_OR_BOMB) == PLAYER_INVISIBLE_OR_BOMB) &&
|
||||
((temp_v0_6 & PLAYER_CINEMATIC_MODE) != PLAYER_CINEMATIC_MODE)) {
|
||||
handle_a_press_for_player_during_race(gPlayerThree, gControllerSeven, 2);
|
||||
return;
|
||||
}
|
||||
|
|
@ -4863,7 +4909,7 @@ void func_80038BE4(Player* player, s16 arg1) {
|
|||
if (player->currentSpeed >= 250.0f) {
|
||||
player->currentSpeed = 250.0f;
|
||||
}
|
||||
player->unk_044 |= 0x20;
|
||||
player->kartProps |= THROTTLE;
|
||||
player->unk_08C = (player->currentSpeed * player->currentSpeed) / 25.0f;
|
||||
}
|
||||
|
||||
|
|
@ -4920,8 +4966,8 @@ void func_80038C6C(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
newVelocity[0] += ((((((sp114[0] + spA4) + spF0[0])) - (newVelocity[0] * (0.12 * (player->kartFriction)))) / 6000.0) / 1);
|
||||
newVelocity[2] += ((((((sp114[2] + sp9C) + spF0[2])) - (newVelocity[2] * (0.12 * (player->kartFriction)))) / 6000.0) / 1);
|
||||
newVelocity[1] += ((((((sp114[1] + spA0) + spF0[1])) - (newVelocity[1] * (0.12 * (player->kartFriction)))) / 6000.0) / 1);
|
||||
if ((player->unk_044 & 0x10) == 0x10) {
|
||||
player->unk_044 &= 0xFFEF;
|
||||
if ((player->kartProps & LOSE_GP_RACE) == LOSE_GP_RACE) {
|
||||
player->kartProps &= ~LOSE_GP_RACE;
|
||||
}
|
||||
|
||||
posX = player->pos[0];
|
||||
|
|
@ -5005,7 +5051,7 @@ void func_80038C6C(Player* player, UNUSED Camera* camera, s8 screenId, s8 player
|
|||
player->speed = gKartTopSpeedTable[player->characterId];
|
||||
}
|
||||
}
|
||||
if ((player->unk_044 & 1) == 1) {
|
||||
if ((player->kartProps & BACK_UP) == BACK_UP) {
|
||||
if (player->speed > 1.0f) {
|
||||
player->velocity[0] *= 1.0f / player->speed;
|
||||
player->velocity[1] *= 1.0f / player->speed;
|
||||
|
|
|
|||
|
|
@ -1013,10 +1013,10 @@ void init_kiwano_fruit(void) {
|
|||
for (i = 0; i < 4; i++) {
|
||||
phi_s1 = &gPlayers[i];
|
||||
// temp_v0 = *phi_s1;
|
||||
if ((phi_s1->type & 0x4000) == 0) {
|
||||
if ((phi_s1->type & PLAYER_HUMAN) == 0) {
|
||||
continue;
|
||||
}
|
||||
if ((phi_s1->type & 0x100) != 0) {
|
||||
if ((phi_s1->type & PLAYER_INVISIBLE_OR_BOMB) != 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -2091,7 +2091,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
|
|||
}
|
||||
player->triggers |= HIT_BANANA_TRIGGER;
|
||||
owner = &gPlayers[temp_v1];
|
||||
if (owner->type & 0x4000) {
|
||||
if (owner->type & PLAYER_HUMAN) {
|
||||
if (actor->flags & 0xF) {
|
||||
if (temp_lo != temp_v1) {
|
||||
func_800C90F4(temp_v1, (owner->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x06));
|
||||
|
|
@ -2121,7 +2121,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
|
|||
player->triggers |= LOW_TUMBLE_TRIGGER;
|
||||
func_800C98B8(player->pos, player->velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x10));
|
||||
owner = &gPlayers[temp_v1];
|
||||
if ((owner->type & 0x4000) && (temp_lo != temp_v1)) {
|
||||
if ((owner->type & PLAYER_HUMAN) && (temp_lo != temp_v1)) {
|
||||
func_800C90F4(temp_v1, (owner->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x06));
|
||||
}
|
||||
destroy_destructable_actor(actor);
|
||||
|
|
@ -2140,7 +2140,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
|
|||
func_800C98B8(player->pos, player->velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x10));
|
||||
}
|
||||
owner = &gPlayers[temp_v1];
|
||||
if ((owner->type & 0x4000) && (temp_lo != temp_v1)) {
|
||||
if ((owner->type & PLAYER_HUMAN) && (temp_lo != temp_v1)) {
|
||||
func_800C90F4(temp_v1, (owner->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x06));
|
||||
}
|
||||
if (temp_lo == actor->unk_04) {
|
||||
|
|
@ -2165,7 +2165,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
|
|||
func_800C98B8(player->pos, player->velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x10));
|
||||
}
|
||||
owner = &gPlayers[temp_v1];
|
||||
if ((owner->type & 0x4000) && (temp_lo != temp_v1)) {
|
||||
if ((owner->type & PLAYER_HUMAN) && (temp_lo != temp_v1)) {
|
||||
func_800C90F4(temp_v1, (owner->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x06));
|
||||
}
|
||||
destroy_destructable_actor(actor);
|
||||
|
|
@ -2223,7 +2223,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
|
|||
}
|
||||
player->triggers |= VERTICAL_TUMBLE_TRIGGER;
|
||||
owner = &gPlayers[temp_v1];
|
||||
if (owner->type & 0x4000) {
|
||||
if (owner->type & PLAYER_HUMAN) {
|
||||
if (actor->flags & 0xF) {
|
||||
if (temp_lo != temp_v1) {
|
||||
func_800C90F4(temp_v1, (owner->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x06));
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ void destroy_banana_in_banana_bunch(struct BananaActor* banana) {
|
|||
|
||||
func_802B0464(banana->youngerIndex);
|
||||
func_802B04E8(banana, banana->elderIndex);
|
||||
if ((gPlayers[banana->playerId].type & 0x4000) != 0) {
|
||||
if ((gPlayers[banana->playerId].type & PLAYER_HUMAN) != 0) {
|
||||
func_800C9060(banana->playerId, SOUND_ARG_LOAD(0x19, 0x01, 0x90, 0x53));
|
||||
}
|
||||
banana->flags = -0x8000;
|
||||
|
|
@ -294,7 +294,7 @@ void update_actor_banana_bunch(struct BananaBunchParent* banana_bunch) {
|
|||
if (someCount == 0) {
|
||||
destroy_actor((struct Actor*) banana_bunch);
|
||||
owner->triggers &= ~DRAG_ITEM_EFFECT;
|
||||
} else if ((owner->type & 0x4000) != 0) {
|
||||
} else if ((owner->type & PLAYER_HUMAN) != 0) {
|
||||
controller = &gControllers[banana_bunch->playerId];
|
||||
if ((controller->buttonPressed & Z_TRIG) != 0) {
|
||||
controller->buttonPressed &= ~Z_TRIG;
|
||||
|
|
|
|||
|
|
@ -79,14 +79,14 @@ void func_8001F9E4(Player* player, Camera* camera, s8 screenId) {
|
|||
get_player_index_for_player(player);
|
||||
func_8001F980(&sp30, &sp2C);
|
||||
|
||||
player->unk_002 &= ~(2 << (screenId * 4));
|
||||
player->unk_002 &= ~(8 << (screenId * 4));
|
||||
player->unk_002 &= ~(UNK_002_UNKNOWN_0x2 << (screenId * 4));
|
||||
player->unk_002 &= ~(SIDE_OF_KART << (screenId * 4));
|
||||
|
||||
if (check_player_camera_collision(player, camera, (f32) (D_80165578 + sp30), (f32) (D_8016557A + sp2C)) == 1) {
|
||||
player->unk_002 |= 2 << (screenId * 4);
|
||||
player->unk_002 |= UNK_002_UNKNOWN_0x2 << (screenId * 4);
|
||||
}
|
||||
if (check_player_camera_collision(player, camera, (f32) D_80165580, (f32) D_80165582) == 1) {
|
||||
player->unk_002 |= 8 << (screenId * 4);
|
||||
player->unk_002 |= SIDE_OF_KART << (screenId * 4);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -181,7 +181,7 @@ void init_render_player(Player* player, Camera* camera, s8 playerId, s8 screenId
|
|||
|
||||
if ((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) {
|
||||
func_8001F9E4(player, camera, screenId);
|
||||
temp_v0 = 2 << (screenId << 2);
|
||||
temp_v0 = UNK_002_UNKNOWN_0x2 << (screenId << 2);
|
||||
if (temp_v0 == (player->unk_002 & temp_v0)) {
|
||||
if (!(player->type & PLAYER_START_SEQUENCE)) {
|
||||
func_8002934C(player, camera, screenId, playerId);
|
||||
|
|
@ -193,7 +193,7 @@ void init_render_player(Player* player, Camera* camera, s8 playerId, s8 screenId
|
|||
}
|
||||
}
|
||||
func_8001F980(&sp4C, &sp48);
|
||||
temp_v0_2 = 1 << (screenId << 2);
|
||||
temp_v0_2 = CHANGING_ANIMATION << (screenId << 2);
|
||||
if ((temp_v0 == (player->unk_002 & temp_v0)) && (temp_v0_2 == (player->unk_002 & temp_v0_2))) {
|
||||
if ((check_player_camera_collision(player, camera, D_80165570 + sp4C, D_80165572 + sp48) == 1) & 0xFFFF) {
|
||||
gPlayersToRenderPlayerId[gPlayersToRenderCount] = (s16) playerId;
|
||||
|
|
@ -424,7 +424,7 @@ void load_kart_texture_and_render_kart_particle_on_screen_four(void) {
|
|||
void try_rendering_player(Player* player, s8 playerId, s8 arg2) {
|
||||
|
||||
if (((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) && ((player->type & PLAYER_UNKNOWN_0x40) == 0)) {
|
||||
if ((player->unk_002 & 2 << (arg2 * 4)) == 2 << (arg2 * 4)) {
|
||||
if ((player->unk_002 & UNK_002_UNKNOWN_0x2 << (arg2 * 4)) == UNK_002_UNKNOWN_0x2 << (arg2 * 4)) {
|
||||
render_player(player, playerId, arg2);
|
||||
}
|
||||
}
|
||||
|
|
@ -654,16 +654,16 @@ void func_80021B0C(void) {
|
|||
func_8006E7CC(gPlayerEight, 7, 0);
|
||||
}
|
||||
if (gGamestate == ENDING) {
|
||||
if (gPlayerOne->unk_044 & 0x2000) {
|
||||
if (gPlayerOne->kartProps & UNUSED_0x2000) {
|
||||
render_player_shadow_credits(gPlayerOne, 0, 0);
|
||||
}
|
||||
if (gPlayerTwo->unk_044 & 0x2000) {
|
||||
if (gPlayerTwo->kartProps & UNUSED_0x2000) {
|
||||
render_player_shadow_credits(gPlayerTwo, 1, 0);
|
||||
}
|
||||
if (gPlayerThree->unk_044 & 0x2000) {
|
||||
if (gPlayerThree->kartProps & UNUSED_0x2000) {
|
||||
render_player_shadow_credits(gPlayerThree, 2, 0);
|
||||
}
|
||||
if (gPlayerFour->unk_044 & 0x2000) {
|
||||
if (gPlayerFour->kartProps & UNUSED_0x2000) {
|
||||
render_player_shadow_credits(gPlayerFour, 3, 0);
|
||||
}
|
||||
}
|
||||
|
|
@ -896,10 +896,10 @@ void func_8002276C(void) {
|
|||
break;
|
||||
case TIME_TRIALS: /* switch 1 */
|
||||
func_80022A98(gPlayerOne, 0);
|
||||
if ((gPlayerTwo->type & 0x100) == 0x100) {
|
||||
if ((gPlayerTwo->type & PLAYER_INVISIBLE_OR_BOMB) == PLAYER_INVISIBLE_OR_BOMB) {
|
||||
func_80022A98(gPlayerTwo, 1);
|
||||
}
|
||||
if ((gPlayerThree->type & 0x100) == 0x100) {
|
||||
if ((gPlayerThree->type & PLAYER_INVISIBLE_OR_BOMB) == PLAYER_INVISIBLE_OR_BOMB) {
|
||||
func_80022A98(gPlayerThree, 2);
|
||||
}
|
||||
break;
|
||||
|
|
@ -956,7 +956,8 @@ void func_80022A98(Player* player, s8 playerIndex) {
|
|||
if ((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) {
|
||||
func_80026A48(player, playerIndex);
|
||||
func_800235AC(player, playerIndex);
|
||||
if (((player->effects & SQUISH_EFFECT) == SQUISH_EFFECT) || ((player->effects & POST_SQUISH_EFFECT) == POST_SQUISH_EFFECT)) {
|
||||
if (((player->effects & SQUISH_EFFECT) == SQUISH_EFFECT) ||
|
||||
((player->effects & POST_SQUISH_EFFECT) == POST_SQUISH_EFFECT)) {
|
||||
if ((player->effects & SQUISH_EFFECT) == SQUISH_EFFECT) {
|
||||
func_80022B50(player, playerIndex);
|
||||
}
|
||||
|
|
@ -1184,22 +1185,23 @@ void func_800235AC(Player* player, s8 playerIndex) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (((player->unk_0CA & 0x10) == 0x10) && ((player->unk_0CA & 4) == 4)) {
|
||||
if (((player->lakituProps & FRIGID_EFFECT) == FRIGID_EFFECT) &&
|
||||
((player->lakituProps & LAKITU_FIZZLE) == LAKITU_FIZZLE)) {
|
||||
change_player_color_effect_rgb(player, playerIndex, 0x646464, 0.5f);
|
||||
change_player_color_effect_cmy(player, playerIndex, 0xFF0000, 0.1f);
|
||||
return;
|
||||
}
|
||||
if ((player->unk_0CA & 4) == 4) {
|
||||
if ((player->lakituProps & LAKITU_FIZZLE) == LAKITU_FIZZLE) {
|
||||
change_player_color_effect_rgb(player, playerIndex, COLOR_BLACK, 1.0f);
|
||||
change_player_color_effect_cmy(player, playerIndex, 0, 1.0f);
|
||||
return;
|
||||
}
|
||||
if ((player->unk_0CA & 0x10) == 0x10) {
|
||||
if ((player->lakituProps & FRIGID_EFFECT) == FRIGID_EFFECT) {
|
||||
change_player_color_effect_rgb(player, playerIndex, 0x646464, 0.5f);
|
||||
change_player_color_effect_cmy(player, playerIndex, 0xFF0000, 0.1f);
|
||||
return;
|
||||
}
|
||||
if ((player->unk_0CA & 0x20) == 0x20) {
|
||||
if ((player->lakituProps & THAWING_EFFECT) == THAWING_EFFECT) {
|
||||
change_player_color_effect_rgb(player, playerIndex, COLOR_BLACK, 0.1f);
|
||||
change_player_color_effect_cmy(player, playerIndex, 0, 0.1f);
|
||||
return;
|
||||
|
|
@ -1263,7 +1265,7 @@ void func_800235AC(Player* player, s8 playerIndex) {
|
|||
return;
|
||||
}
|
||||
render_light_environment_on_player(player, playerIndex);
|
||||
if ((player->unk_0CA & 0x1000) == 0x1000) {
|
||||
if ((player->lakituProps & LAKITU_LAVA) == LAKITU_LAVA) {
|
||||
change_player_color_effect_rgb(player, playerIndex, COLOR_BLACK, 0.3f);
|
||||
change_player_color_effect_cmy(player, playerIndex, 0xF0F0F0, 0.3f);
|
||||
}
|
||||
|
|
@ -1271,12 +1273,13 @@ void func_800235AC(Player* player, s8 playerIndex) {
|
|||
}
|
||||
|
||||
void func_80023BF0(Player* player, s8 playerId, s8 screenId, s8 arg3) {
|
||||
if (((player->effects & SQUISH_EFFECT) == SQUISH_EFFECT) || ((player->effects & POST_SQUISH_EFFECT) == POST_SQUISH_EFFECT)) {
|
||||
if (((player->effects & SQUISH_EFFECT) == SQUISH_EFFECT) ||
|
||||
((player->effects & POST_SQUISH_EFFECT) == POST_SQUISH_EFFECT)) {
|
||||
func_80022CA8(player, playerId, screenId, arg3);
|
||||
} else {
|
||||
func_80022E84(player, playerId, screenId, arg3);
|
||||
}
|
||||
if ((player->unk_0CA & 2) == 2) {
|
||||
if ((player->lakituProps & HELD_BY_LAKITU) == HELD_BY_LAKITU) {
|
||||
func_80022D60(player, playerId, screenId, arg3);
|
||||
}
|
||||
}
|
||||
|
|
@ -1301,10 +1304,14 @@ void render_player_shadow(Player* player, s8 playerId, s8 screenId) {
|
|||
spAC = -sins(temp_t9 << 7) * 2;
|
||||
|
||||
if (((player->effects & EXPLOSION_CRASH_EFFECT) == EXPLOSION_CRASH_EFFECT) ||
|
||||
((player->effects & HIT_BY_GREEN_SHELL_EFFECT) == HIT_BY_GREEN_SHELL_EFFECT) || ((player->effects & UNKNOWN_EFFECT_0x80000) == UNKNOWN_EFFECT_0x80000) ||
|
||||
((player->effects & UNKNOWN_EFFECT_0x800000) == UNKNOWN_EFFECT_0x800000) || ((player->effects & HIT_BY_GREEN_SHELL_EFFECT) == HIT_BY_GREEN_SHELL_EFFECT) ||
|
||||
((player->unk_0CA & 2) == 2) || ((player->effects & HIT_BY_STAR_EFFECT) == HIT_BY_STAR_EFFECT) ||
|
||||
((player->effects & TERRAIN_TUMBLE_EFFECT) == TERRAIN_TUMBLE_EFFECT) || ((player->effects & MIDAIR_EFFECT) == MIDAIR_EFFECT)) {
|
||||
((player->effects & HIT_BY_GREEN_SHELL_EFFECT) == HIT_BY_GREEN_SHELL_EFFECT) ||
|
||||
((player->effects & UNKNOWN_EFFECT_0x80000) == UNKNOWN_EFFECT_0x80000) ||
|
||||
((player->effects & UNKNOWN_EFFECT_0x800000) == UNKNOWN_EFFECT_0x800000) ||
|
||||
((player->effects & HIT_BY_GREEN_SHELL_EFFECT) == HIT_BY_GREEN_SHELL_EFFECT) ||
|
||||
((player->lakituProps & HELD_BY_LAKITU) == HELD_BY_LAKITU) ||
|
||||
((player->effects & HIT_BY_STAR_EFFECT) == HIT_BY_STAR_EFFECT) ||
|
||||
((player->effects & TERRAIN_TUMBLE_EFFECT) == TERRAIN_TUMBLE_EFFECT) ||
|
||||
((player->effects & MIDAIR_EFFECT) == MIDAIR_EFFECT)) {
|
||||
|
||||
var_f2 = (f32) (1.0 - ((f64) player->collision.surfaceDistance[2] * 0.02));
|
||||
if (var_f2 < 0.0f) {
|
||||
|
|
@ -1424,7 +1431,7 @@ void render_kart(Player* player, s8 playerId, s8 arg2, s8 flipOffset) {
|
|||
s16 temp_v1;
|
||||
s16 thing;
|
||||
|
||||
if (player->unk_044 & 0x2000) {
|
||||
if (player->kartProps & UNUSED_0x2000) {
|
||||
sp14C[0] = 0;
|
||||
sp14C[1] = player->unk_048[arg2];
|
||||
sp14C[2] = 0;
|
||||
|
|
@ -1502,7 +1509,7 @@ void render_kart(Player* player, s8 playerId, s8 arg2, s8 flipOffset) {
|
|||
AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | CVG_X_ALPHA | FORCE_BL |
|
||||
GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA));
|
||||
}
|
||||
} else if (((player->unk_0CA & 4) == 4) || (player->triggers & BECOME_BOMB_EFFECT) ||
|
||||
} else if (((player->lakituProps & LAKITU_FIZZLE) == LAKITU_FIZZLE) || (player->triggers & BECOME_BOMB_EFFECT) ||
|
||||
(player->triggers & LOSE_BATTLE_EFFECT)) {
|
||||
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxKart[playerId + (arg2 * 8)]),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
|
@ -1673,7 +1680,7 @@ void render_player_ice_reflection(Player* player, s8 playerId, s8 screenId, s8 f
|
|||
sp9C[0] = player->pos[0];
|
||||
sp9C[1] = player->unk_074 + (4.0f * player->size);
|
||||
sp9C[2] = player->pos[2];
|
||||
if (!(player->unk_002 & (4 << (screenId * 4)))) {
|
||||
if (!(player->unk_002 & (UNK_002_UNKNOWN_0x4 << (screenId * 4)))) {
|
||||
flipOffset = 8;
|
||||
} else {
|
||||
flipOffset = 0;
|
||||
|
|
@ -1712,13 +1719,13 @@ void render_player(Player* player, s8 playerId, s8 screenId) {
|
|||
OSMesg* sp34;
|
||||
|
||||
update_wheel_palette(player, playerId, screenId, D_801651D0[screenId][playerId]);
|
||||
if (!(player->unk_002 & (4 << (screenId * 4)))) {
|
||||
if (!(player->unk_002 & (UNK_002_UNKNOWN_0x4 << (screenId * 4)))) {
|
||||
flipOffset = 0;
|
||||
} else {
|
||||
flipOffset = 8;
|
||||
}
|
||||
func_80023BF0(player, playerId, screenId, flipOffset);
|
||||
temp_t1 = 8 << (screenId * 4);
|
||||
temp_t1 = SIDE_OF_KART << (screenId * 4);
|
||||
if ((temp_t1 == (player->unk_002 & temp_t1)) && (player->collision.surfaceDistance[2] <= 50.0f) &&
|
||||
(player->surfaceType != ICE)) {
|
||||
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
|
||||
|
|
@ -1735,7 +1742,8 @@ void render_player(Player* player, s8 playerId, s8 screenId) {
|
|||
render_ghost(player, playerId, screenId, flipOffset);
|
||||
}
|
||||
osRecvMesg(&gDmaMesgQueue, (OSMesg*) &sp34, OS_MESG_BLOCK);
|
||||
if ((temp_t1 == (player->unk_002 & temp_t1)) && (player->surfaceType == ICE) && ((player->unk_0CA & 1) != 1) &&
|
||||
if ((temp_t1 == (player->unk_002 & temp_t1)) && (player->surfaceType == ICE) &&
|
||||
((player->lakituProps & LAKITU_RETRIEVAL) != LAKITU_RETRIEVAL) &&
|
||||
(player->collision.surfaceDistance[2] <= 30.0f)) {
|
||||
render_player_ice_reflection(player, playerId, screenId, flipOffset);
|
||||
}
|
||||
|
|
@ -1747,7 +1755,8 @@ void render_player(Player* player, s8 playerId, s8 screenId) {
|
|||
void func_80026A48(Player* player, s8 playerIndex) {
|
||||
f32 temp_f0;
|
||||
|
||||
if (((player->effects & EARLY_START_SPINOUT_EFFECT) == EARLY_START_SPINOUT_EFFECT) && ((player->type & PLAYER_START_SEQUENCE) == 0)) {
|
||||
if (((player->effects & EARLY_START_SPINOUT_EFFECT) == EARLY_START_SPINOUT_EFFECT) &&
|
||||
((player->type & PLAYER_START_SEQUENCE) == 0)) {
|
||||
player->tyreSpeed += D_800DDE74[8];
|
||||
if (player->tyreSpeed >= 0x400) {
|
||||
player->tyreSpeed = 0;
|
||||
|
|
@ -1779,10 +1788,14 @@ void update_wheel_palette(Player* player, s8 playerId, s8 screenId, s8 arg3) {
|
|||
s16 temp_t2 = player->tyreSpeed;
|
||||
s16 temp_num = 0x40; // setting this as a variable gets rid of regalloc
|
||||
|
||||
if (((player->effects & EARLY_START_SPINOUT_EFFECT) == EARLY_START_SPINOUT_EFFECT) && ((player->type & PLAYER_START_SEQUENCE) == 0)) {
|
||||
if (((player->effects & BANANA_SPINOUT_EFFECT) != BANANA_SPINOUT_EFFECT) && ((player->effects & DRIVING_SPINOUT_EFFECT) != DRIVING_SPINOUT_EFFECT) &&
|
||||
((player->effects & LIGHTNING_STRIKE_EFFECT) != LIGHTNING_STRIKE_EFFECT) && ((player->effects & UNKNOWN_EFFECT_0x80000) != UNKNOWN_EFFECT_0x80000) &&
|
||||
((player->effects & UNKNOWN_EFFECT_0x800000) != UNKNOWN_EFFECT_0x800000) && ((player->unk_044 & 0x800) == 0)) {
|
||||
if (((player->effects & EARLY_START_SPINOUT_EFFECT) == EARLY_START_SPINOUT_EFFECT) &&
|
||||
((player->type & PLAYER_START_SEQUENCE) == 0)) {
|
||||
if (((player->effects & BANANA_SPINOUT_EFFECT) != BANANA_SPINOUT_EFFECT) &&
|
||||
((player->effects & DRIVING_SPINOUT_EFFECT) != DRIVING_SPINOUT_EFFECT) &&
|
||||
((player->effects & LIGHTNING_STRIKE_EFFECT) != LIGHTNING_STRIKE_EFFECT) &&
|
||||
((player->effects & UNKNOWN_EFFECT_0x80000) != UNKNOWN_EFFECT_0x80000) &&
|
||||
((player->effects & UNKNOWN_EFFECT_0x800000) != UNKNOWN_EFFECT_0x800000) &&
|
||||
((player->kartProps & UNUSED_0x800) == 0)) {
|
||||
|
||||
if (frameId <= 20) {
|
||||
load_player_data_non_blocking(player,
|
||||
|
|
@ -1809,9 +1822,12 @@ void update_wheel_palette(Player* player, s8 playerId, s8 screenId, s8 arg3) {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
if (((player->effects & BANANA_SPINOUT_EFFECT) != BANANA_SPINOUT_EFFECT) && ((player->effects & DRIVING_SPINOUT_EFFECT) != DRIVING_SPINOUT_EFFECT) &&
|
||||
((player->effects & UNKNOWN_EFFECT_0x80000) != UNKNOWN_EFFECT_0x80000) && ((player->effects & UNKNOWN_EFFECT_0x800000) != UNKNOWN_EFFECT_0x800000) &&
|
||||
((player->effects & LIGHTNING_STRIKE_EFFECT) != LIGHTNING_STRIKE_EFFECT) && ((player->unk_044 & 0x800) == 0)) {
|
||||
if (((player->effects & BANANA_SPINOUT_EFFECT) != BANANA_SPINOUT_EFFECT) &&
|
||||
((player->effects & DRIVING_SPINOUT_EFFECT) != DRIVING_SPINOUT_EFFECT) &&
|
||||
((player->effects & UNKNOWN_EFFECT_0x80000) != UNKNOWN_EFFECT_0x80000) &&
|
||||
((player->effects & UNKNOWN_EFFECT_0x800000) != UNKNOWN_EFFECT_0x800000) &&
|
||||
((player->effects & LIGHTNING_STRIKE_EFFECT) != LIGHTNING_STRIKE_EFFECT) &&
|
||||
((player->kartProps & UNUSED_0x800) == 0)) {
|
||||
|
||||
if (frameId <= 20) {
|
||||
load_player_data_non_blocking(player,
|
||||
|
|
|
|||
|
|
@ -454,7 +454,8 @@ void save_player_replay(void) {
|
|||
u32 prevInputs;
|
||||
/* Input file is too long or picked up by lakitu or Out of bounds
|
||||
Not sure if there is any way to be considered out of bounds without lakitu getting called */
|
||||
if (((sPlayerInputIdx >= 0x1000) || ((gPlayerOne->unk_0CA & 2) != 0)) || ((gPlayerOne->unk_0CA & 8) != 0)) {
|
||||
if (((sPlayerInputIdx >= 0x1000) || ((gPlayerOne->lakituProps & HELD_BY_LAKITU) != 0)) ||
|
||||
((gPlayerOne->lakituProps & LAKITU_SCENE) != 0)) {
|
||||
gPostTimeTrialReplayCannotSave = 1;
|
||||
return;
|
||||
}
|
||||
|
|
@ -556,7 +557,7 @@ void func_80005B18(void) {
|
|||
sReplayGhostBufferSize = D_80162D86;
|
||||
D_80162DDC = 1;
|
||||
}
|
||||
if ((gPlayerOne->type & 0x800) == 0x800) {
|
||||
if ((gPlayerOne->type & PLAYER_CINEMATIC_MODE) == PLAYER_CINEMATIC_MODE) {
|
||||
func_80005AE8(gPlayerTwo);
|
||||
func_80005AE8(gPlayerThree);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ void spawn_player(Player* player, s8 playerIndex, f32 startingRow, f32 startingC
|
|||
player->type = PLAYER_INACTIVE;
|
||||
player->unk_08C = 0;
|
||||
player->characterId = characterId;
|
||||
player->unk_0B6 = 0;
|
||||
player->kartGraphics = 0;
|
||||
player->kartFriction = gKartFrictionTable[player->characterId];
|
||||
player->boundingBoxSize = gKartBoundingBoxSizeTable[player->characterId];
|
||||
player->kartGravity = gKartGravityTable[player->characterId];
|
||||
|
|
@ -144,8 +144,8 @@ void spawn_player(Player* player, s8 playerIndex, f32 startingRow, f32 startingC
|
|||
player->speed = 0.0f;
|
||||
player->unk_074 = 0.0f;
|
||||
player->type = playerType;
|
||||
player->unk_0CA = 0;
|
||||
player->unk_0DE = 0;
|
||||
player->lakituProps = 0;
|
||||
player->oobProps = 0;
|
||||
player->unk_10C = 0;
|
||||
player->unk_0E2 = 0;
|
||||
player->unk_0E8 = 0.0f;
|
||||
|
|
@ -154,7 +154,7 @@ void spawn_player(Player* player, s8 playerIndex, f32 startingRow, f32 startingC
|
|||
player->currentSpeed = 0.0f;
|
||||
player->unk_20C = 0.0f;
|
||||
player->unk_DAC = 0.0f;
|
||||
player->unk_044 = 0;
|
||||
player->kartProps = 0;
|
||||
player->unk_046 = 0;
|
||||
player->triggers = 0;
|
||||
player->alpha = ALPHA_MAX;
|
||||
|
|
@ -185,9 +185,9 @@ void spawn_player(Player* player, s8 playerIndex, f32 startingRow, f32 startingC
|
|||
player->unk_0C0 = 0;
|
||||
player->unk_0C2 = 0;
|
||||
player->unk_0C8 = 0;
|
||||
player->unk_0CA = 0;
|
||||
player->lakituProps = 0;
|
||||
player->boostTimer = 0;
|
||||
player->unk_0DE = 0;
|
||||
player->oobProps = 0;
|
||||
player->unk_0E0 = 0;
|
||||
player->unk_0E2 = 0;
|
||||
player->unk_10C = 0;
|
||||
|
|
|
|||
|
|
@ -2978,14 +2978,14 @@ void func_800791F0(s32 objectIndex, s32 playerId) {
|
|||
if ((gObjectList[objectIndex].unk_0D8 != 3) && (gObjectList[objectIndex].unk_0D8 != 7)) {
|
||||
func_800722CC(objectIndex, 1);
|
||||
if (gCurrentCourseId == COURSE_SHERBET_LAND) {
|
||||
player->unk_0CA &= 0xFFEF;
|
||||
player->lakituProps &= ~FRIGID_EFFECT;
|
||||
}
|
||||
} else {
|
||||
// ?????
|
||||
}
|
||||
if (gCurrentCourseId == COURSE_SHERBET_LAND) {
|
||||
func_800722CC(objectIndex, 0x00000010);
|
||||
player->unk_0CA &= 0xFFDF;
|
||||
player->lakituProps &= ~THAWING_EFFECT;
|
||||
}
|
||||
func_800C9018(playerId, SOUND_ARG_LOAD(0x01, 0x00, 0xFA, 0x28));
|
||||
}
|
||||
|
|
@ -3127,9 +3127,9 @@ void func_800797AC(s32 playerId) {
|
|||
|
||||
objectIndex = gIndexLakituList[playerId];
|
||||
player = &gPlayerOne[playerId];
|
||||
if ((gCurrentCourseId == COURSE_SHERBET_LAND) && (player->unk_0CA & 1)) {
|
||||
if ((gCurrentCourseId == COURSE_SHERBET_LAND) && (player->lakituProps & LAKITU_RETRIEVAL)) {
|
||||
init_object(objectIndex, 7);
|
||||
player->unk_0CA |= 0x10;
|
||||
player->lakituProps |= FRIGID_EFFECT;
|
||||
} else {
|
||||
init_object(objectIndex, 3);
|
||||
}
|
||||
|
|
@ -3144,14 +3144,15 @@ void func_80079860(s32 playerId) {
|
|||
player = &gPlayerOne[playerId];
|
||||
if ((func_80072354(objectIndex, 1) != 0) &&
|
||||
(((func_802ABDF4(player->collision.meshIndexZX) != 0) && (player->collision.surfaceDistance[2] <= 3.0f)) ||
|
||||
(player->unk_0CA & 1) || ((player->surfaceType == OUT_OF_BOUNDS) && !(player->effects & MIDAIR_EFFECT)))) {
|
||||
(player->lakituProps & LAKITU_RETRIEVAL) ||
|
||||
((player->surfaceType == OUT_OF_BOUNDS) && !(player->effects & MIDAIR_EFFECT)))) {
|
||||
func_80090778(player);
|
||||
func_800797AC(playerId);
|
||||
}
|
||||
}
|
||||
|
||||
void func_8007993C(s32 objectIndex, Player* player) {
|
||||
if (player->unk_0CA & 4) {
|
||||
if (player->lakituProps & LAKITU_FIZZLE) {
|
||||
func_800722A4(objectIndex, 2);
|
||||
gObjectList[objectIndex].primAlpha = player->alpha;
|
||||
return;
|
||||
|
|
@ -3228,7 +3229,7 @@ void update_object_lakitu_fishing(s32 objectIndex, s32 playerId) {
|
|||
func_80073654(objectIndex);
|
||||
break;
|
||||
case 3:
|
||||
if (!(player->unk_0CA & 2)) {
|
||||
if (!(player->lakituProps & HELD_BY_LAKITU)) {
|
||||
func_80086EAC(objectIndex, 0, 3);
|
||||
func_80073654(objectIndex);
|
||||
}
|
||||
|
|
@ -3263,7 +3264,7 @@ void update_object_lakitu_fishing2(s32 objectIndex, s32 playerId) {
|
|||
case 2: /* switch 1 */
|
||||
set_object_flag_status_true(objectIndex, 0x00000010);
|
||||
func_800736E0(objectIndex);
|
||||
player->unk_0CA |= 0x80;
|
||||
player->lakituProps |= FROZEN_EFFECT;
|
||||
object_next_state(objectIndex);
|
||||
break;
|
||||
case 3: /* switch 1 */
|
||||
|
|
@ -3283,11 +3284,11 @@ void update_object_lakitu_fishing2(s32 objectIndex, s32 playerId) {
|
|||
func_80073654(objectIndex);
|
||||
break;
|
||||
case 3:
|
||||
if ((player->surfaceType == ICE) && !(player->unk_0CA & 1) &&
|
||||
if ((player->surfaceType == ICE) && !(player->lakituProps & LAKITU_RETRIEVAL) &&
|
||||
((f64) player->collision.surfaceDistance[2] <= 30.0)) {
|
||||
func_800722A4(objectIndex, 8);
|
||||
}
|
||||
if (!(player->unk_0CA & 2)) {
|
||||
if (!(player->lakituProps & HELD_BY_LAKITU)) {
|
||||
func_80086EAC(objectIndex, 0, 3);
|
||||
func_80073654(objectIndex);
|
||||
}
|
||||
|
|
@ -3296,7 +3297,7 @@ void update_object_lakitu_fishing2(s32 objectIndex, s32 playerId) {
|
|||
func_8007375C(objectIndex, 0x0000001E);
|
||||
break;
|
||||
case 5:
|
||||
player->unk_0CA &= 0xFF7F;
|
||||
player->lakituProps &= ~FROZEN_EFFECT;
|
||||
func_800722A4(objectIndex, 0x00000010);
|
||||
func_800722A4(objectIndex, 0x00000020);
|
||||
func_800722CC(objectIndex, 4);
|
||||
|
|
@ -3307,8 +3308,8 @@ void update_object_lakitu_fishing2(s32 objectIndex, s32 playerId) {
|
|||
case 6:
|
||||
if (func_8007375C(objectIndex, 0x000000A0) != 0) {
|
||||
func_800722CC(objectIndex, 0x00000010);
|
||||
player->unk_0CA &= 0xFFEF;
|
||||
player->unk_0CA |= 0x20;
|
||||
player->lakituProps &= ~FRIGID_EFFECT;
|
||||
player->lakituProps |= THAWING_EFFECT;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
|
|
@ -3317,7 +3318,7 @@ void update_object_lakitu_fishing2(s32 objectIndex, s32 playerId) {
|
|||
case 8:
|
||||
func_80073720(objectIndex);
|
||||
func_80072428(objectIndex);
|
||||
player->unk_0CA &= 0xFFDF;
|
||||
player->lakituProps &= ~THAWING_EFFECT;
|
||||
func_800722CC(objectIndex, 1);
|
||||
func_800C9018((u8) playerId, SOUND_ARG_LOAD(0x01, 0x00, 0xFA, 0x28));
|
||||
break;
|
||||
|
|
@ -5977,11 +5978,11 @@ void func_80080B28(s32 objectIndex, s32 playerId) {
|
|||
temp_f0 = func_80088F54(objectIndex, temp_s0);
|
||||
if ((temp_f0 <= 9.0) && !(temp_s0->effects & SQUISH_EFFECT) &&
|
||||
(has_collided_horizontally_with_player(objectIndex, temp_s0) != 0)) {
|
||||
if ((temp_s0->type & PLAYER_EXISTS) && !(temp_s0->type & 0x100)) {
|
||||
if ((temp_s0->type & PLAYER_EXISTS) && !(temp_s0->type & PLAYER_INVISIBLE_OR_BOMB)) {
|
||||
if (!(temp_s0->effects & STAR_EFFECT)) {
|
||||
func_80089474(objectIndex, playerId, 1.4f, 1.1f, SOUND_ARG_LOAD(0x19, 0x00, 0xA0, 0x4C));
|
||||
} else if (func_80072354(objectIndex, 0x00000040) != 0) {
|
||||
if (temp_s0->type & 0x1000) {
|
||||
if (temp_s0->type & PLAYER_CPU) {
|
||||
func_800C98B8(temp_s0->pos, temp_s0->velocity, SOUND_ARG_LOAD(0x19, 0x01, 0xA2, 0x4A));
|
||||
} else {
|
||||
func_800C9060((u8) playerId, SOUND_ARG_LOAD(0x19, 0x01, 0xA2, 0x4A));
|
||||
|
|
@ -5997,7 +5998,7 @@ void func_80080B28(s32 objectIndex, s32 playerId) {
|
|||
} else if ((temp_f0 <= 17.5) && (func_80072320(objectIndex, 1) != 0) &&
|
||||
(is_within_horizontal_distance_of_player(objectIndex, temp_s0, (temp_s0->speed * 0.5) + 7.0) !=
|
||||
0)) {
|
||||
if ((temp_s0->type & PLAYER_EXISTS) && !(temp_s0->type & 0x100)) {
|
||||
if ((temp_s0->type & PLAYER_EXISTS) && !(temp_s0->type & PLAYER_INVISIBLE_OR_BOMB)) {
|
||||
if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) {
|
||||
func_80072180();
|
||||
}
|
||||
|
|
@ -6380,7 +6381,7 @@ void func_80081D34(s32 objectIndex) {
|
|||
for (playerIndex = 0; playerIndex < D_8018D158; playerIndex++, player++, var_s4++) {
|
||||
if ((is_obj_flag_status_active(objectIndex, 0x00000200) != 0) && !(player->effects & BOO_EFFECT) &&
|
||||
(has_collided_with_player(objectIndex, player) != 0)) {
|
||||
if ((player->type & PLAYER_EXISTS) && !(player->type & 0x100)) {
|
||||
if ((player->type & PLAYER_EXISTS) && !(player->type & PLAYER_INVISIBLE_OR_BOMB)) {
|
||||
var_s5 = 1;
|
||||
object = &gObjectList[objectIndex];
|
||||
if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) {
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit c9c21627b3a43969e4ecac2bbbe0dbc05a9f75d7
|
||||
Subproject commit 5773373b3620e4a6bc6c92fdc4690d66741c086d
|
||||
Loading…
Reference in New Issue