Document sound effects (pr 735 from the decomp) (#589)

Co-authored-by: Jed Grabman <JedGrabman@users.noreply.github.com>
Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
This commit is contained in:
coco875 2025-12-13 20:08:59 +01:00 committed by GitHub
parent b934e98fc3
commit 4e51b7d5b6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
25 changed files with 254 additions and 217 deletions

View File

@ -268,7 +268,7 @@ typedef struct {
/* 0x0006 */ u16 unk_006; /* 0x0006 */ u16 unk_006;
/* 0x0008 */ s16 lapCount; /* 0x0008 */ s16 lapCount;
/* 0x000A */ char unk_00A[0x2]; /* 0x000A */ char unk_00A[0x2];
/* 0x000C */ s32 soundEffects; // Bitflag. /* 0x000C */ s32 triggers; // Bitflag.
/* 0x0010 */ s16 currentItemCopy; // Has no effect on what item the players has, It is just a synced copy /* 0x0010 */ s16 currentItemCopy; // Has no effect on what item the players has, It is just a synced copy
/* 0x0012 */ s16 unk_012; /* 0x0012 */ s16 unk_012;
/* 0x0014 */ Vec3f pos; /* 0x0014 */ Vec3f pos;

View File

@ -356,19 +356,39 @@ enum PLACE { FIRST_PLACE, SECOND_PLACE, THIRD_PLACE, FOURTH_PLACE };
#define MAX_TIME 0x927C0 #define MAX_TIME 0x927C0
/** /**
* @brief sound effect of player's * @brief triggers indicating that an effect should be applied to a kart
* for soundEffect
*/ */
#define HIT_SOUND_EFFECT 0x100 // hitting an object #define HIT_BANANA_TRIGGER 0x1 // hits a banana
#define BOOST_SOUND_EFFECT 0x200 // being boosted by trigger a mushroom #define HIGH_TUMBLE_TRIGGER 0x2 // hit by a red shell, blue shell, or hit a mole
#define BOO_SOUND_EFFECT 0x800 // being a boo #define LOW_TUMBLE_TRIGGER 0x4 // hit by a green shell
#define STAR_SOUND_EFFECT 0x2000 // being a star #define DRIVING_SPINOUT_TRIGGER 0x80 // spinning out from erratic driving
#define HIT_ROTATING_SOUND_EFFECT 0x4000 // hitting a rotating object #define THWOMP_SQUISH_TRIGGER 0x100 // stomped by thwomp
#define BOOST_RAMP_WOOD_SOUND_EFFECT 0x8000 // being boosted by a ramp #define SHROOM_TRIGGER 0x200 // being boosted by trigger a mushroom
#define HOLD_BANANA_SOUND_EFFECT 0x40000 // holding a banana #define BOO_TRIGGER 0x800 // being a boo
#define REVERSE_SOUND_EFFECT 0x400000 // being in the wrong direction #define UNUSED_TRIGGER_0x1000 0x1000 // Unused
#define BOOST_RAMP_ASPHALT_SOUND_EFFECT 0x800000 // being boosted by a boost pad #define STAR_TRIGGER 0x2000 // Starting a star
#define HIT_BY_ITEM_SOUND_EFFECT 0x1000000 // being hit by an item #define LIGHTNING_STRIKE_TRIGGER 0x4000 // Struck by lightning
#define BOOST_RAMP_WOOD_TRIGGER 0x8000 // being boosted by a ramp
#define UNUSED_TRIGGER_0x20000 0x20000 // Unused
#define DRAG_ITEM_EFFECT 0x40000 // holding a non-shell item behind you
#define HIT_PADDLE_BOAT_TRIGGER 0x80000 // hit paddle boat
#define UNUSED_TRIGGER_0x10000 0x100000 // Unused
#define SPINOUT_TRIGGER 0x200000 // hit crab or spiny spinout or losing versus race
#define VERTICAL_TUMBLE_TRIGGER 0x400000 // hitting a fake item / bomb / snowman / car / train
#define BOOST_RAMP_ASPHALT_TRIGGER 0x800000 // being boosted by a boost pad
#define HIT_BY_STAR_TRIGGER 0x1000000 // being hit by a star
#define START_BOOST_TRIGGER 0x2000000 // Start boost
#define LOSE_BATTLE_EFFECT 0x4000000 // When losing battle mode
#define BECOME_BOMB_EFFECT 0x8000000 // When becoming a bomb in battle mode
#define START_SPINOUT_TRIGGER 0x10000000 // Spinning out by holding gas at start of race
#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
/** /**
* @brief effect of player's * @brief effect of player's

View File

@ -60,7 +60,7 @@ void update_actor_banana(struct BananaActor* banana) {
controller->buttonDepressed &= ~Z_TRIG; controller->buttonDepressed &= ~Z_TRIG;
banana->state = 1; banana->state = 1;
banana->unk_04 = 0x00B4; banana->unk_04 = 0x00B4;
player->soundEffects &= ~HOLD_BANANA_SOUND_EFFECT; player->triggers &= ~DRAG_ITEM_EFFECT;
func_800C9060(player - gPlayerOne, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x12)); func_800C9060(player - gPlayerOne, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x12));
pad3 = controller->rawStickY; pad3 = controller->rawStickY;
if ((pad3 > 30.0f) && (controller->rawStickX < 10) && (controller->rawStickX >= -9)) { if ((pad3 > 30.0f) && (controller->rawStickX < 10) && (controller->rawStickX >= -9)) {

View File

@ -45,7 +45,7 @@ void update_actor_fake_item_box(struct FakeItemBox* fake_item_box) {
if ((temp_v1_3->buttonDepressed & Z_TRIG) != 0) { if ((temp_v1_3->buttonDepressed & Z_TRIG) != 0) {
temp_v1_3->buttonDepressed &= 0xDFFF; temp_v1_3->buttonDepressed &= 0xDFFF;
func_802A1064(fake_item_box); func_802A1064(fake_item_box);
temp_v0_4->soundEffects &= 0xFFFBFFFF; temp_v0_4->triggers &= 0xFFFBFFFF;
func_800C9060((u8) (temp_v0_4 - gPlayerOne), SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x12)); func_800C9060((u8) (temp_v0_4 - gPlayerOne), SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x12));
} }
} }

View File

@ -1156,7 +1156,7 @@ void func_8001F394(Player* player, f32* arg1) {
} }
if (D_80164A08[playerIndex] == 0) { if (D_80164A08[playerIndex] == 0) {
if (player->soundEffects & HOLD_BANANA_SOUND_EFFECT) { if (player->triggers & DRAG_ITEM_EFFECT) {
D_80164A08[playerIndex] = 1; D_80164A08[playerIndex] = 1;
} }
if ((player->effects & BOOST_EFFECT) == BOOST_EFFECT) { if ((player->effects & BOOST_EFFECT) == BOOST_EFFECT) {
@ -1165,7 +1165,7 @@ void func_8001F394(Player* player, f32* arg1) {
if ((player->effects & BOOST_RAMP_ASPHALT_EFFECT) == BOOST_RAMP_ASPHALT_EFFECT) { if ((player->effects & BOOST_RAMP_ASPHALT_EFFECT) == BOOST_RAMP_ASPHALT_EFFECT) {
D_80164A08[playerIndex] = 3; D_80164A08[playerIndex] = 3;
} }
if ((player->soundEffects & 0x100) == 0x100) { if ((player->triggers & THWOMP_SQUISH_TRIGGER) == THWOMP_SQUISH_TRIGGER) {
D_80164A08[playerIndex] = 4; D_80164A08[playerIndex] = 4;
} }
if (((player->effects & 0x80) == 0x80) || ((player->effects & 0x40) == 0x40)) { if (((player->effects & 0x80) == 0x80) || ((player->effects & 0x40) == 0x40)) {
@ -1175,7 +1175,7 @@ void func_8001F394(Player* player, f32* arg1) {
} }
switch (D_80164A08[playerIndex]) { switch (D_80164A08[playerIndex]) {
case 1: case 1:
if (player->soundEffects & HOLD_BANANA_SOUND_EFFECT) { if (player->triggers & DRAG_ITEM_EFFECT) {
move_f32_towards(&D_80164498[playerIndex], 20.0f, 0.2f); move_f32_towards(&D_80164498[playerIndex], 20.0f, 0.2f);
} else { } else {
if (D_80164498[playerIndex] > 1.0f) { if (D_80164498[playerIndex] > 1.0f) {
@ -1214,7 +1214,7 @@ void func_8001F394(Player* player, f32* arg1) {
} }
break; break;
case 4: case 4:
if ((player->soundEffects & 0x100) == 0x100) { if ((player->triggers & THWOMP_SQUISH_TRIGGER) == THWOMP_SQUISH_TRIGGER) {
move_f32_towards(&D_80164498[playerIndex], 25.0f, 1.0f); move_f32_towards(&D_80164498[playerIndex], 25.0f, 1.0f);
} else { } else {
if (D_80164498[playerIndex] > 1.0f) { if (D_80164498[playerIndex] > 1.0f) {

View File

@ -1100,8 +1100,8 @@ void regulate_cpu_speed(s32 playerId, f32 targetSpeed, Player* player) {
var_f2 = player->speed; var_f2 = player->speed;
if (!(player->effects & 0x80) && !(player->effects & 0x40) && !(player->effects & 0x20000) && if (!(player->effects & 0x80) && !(player->effects & 0x40) && !(player->effects & 0x20000) &&
!(player->soundEffects & 0x400000) && !(player->soundEffects & 0x01000000) && !(player->soundEffects & 2) && !(player->triggers & VERTICAL_TUMBLE_TRIGGER) && !(player->triggers & HIT_BY_STAR_TRIGGER) && !(player->triggers & HIGH_TUMBLE_TRIGGER) &&
!(player->soundEffects & 4)) { !(player->triggers & LOW_TUMBLE_TRIGGER)) {
if (IsPodiumCeremony()) { if (IsPodiumCeremony()) {
func_80007FA4(playerId, player, var_f2); func_80007FA4(playerId, player, var_f2);
} else if ((bStopAICrossing[playerId] == 1) && !(player->effects & (STAR_EFFECT | BOO_EFFECT))) { } else if ((bStopAICrossing[playerId] == 1) && !(player->effects & (STAR_EFFECT | BOO_EFFECT))) {
@ -1568,8 +1568,8 @@ void play_cpu_sound_effect(s32 arg0, Player* player) {
} }
} }
if (D_801633B0[arg0] >= 0xB) { if (D_801633B0[arg0] >= 0xB) {
if ((player->soundEffects & REVERSE_EFFECT) || (player->soundEffects & 0x01000000) || if ((player->triggers & REVERSE_EFFECT) || (player->triggers & HIT_BY_STAR_TRIGGER) ||
(player->soundEffects & 2) || (player->soundEffects & 4) || (player->effects & HIT_EFFECT)) { (player->triggers & HIGH_TUMBLE_TRIGGER) || (player->triggers & LOW_TUMBLE_TRIGGER) || (player->effects & HIT_EFFECT)) {
func_800C92CC(arg0, SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x0B)); func_800C92CC(arg0, SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x0B));
D_801633B0[arg0] = 0; D_801633B0[arg0] = 0;
} }
@ -3114,7 +3114,7 @@ void func_8000DF8C(s32 bombKartId) {
if ((((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) + (temp_f12 * temp_f12)) < 25.0f) { if ((((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) + (temp_f12 * temp_f12)) < 25.0f) {
var_s1 = 0; var_s1 = 0;
sp7E = 4; sp7E = 4;
var_v0->soundEffects |= 0x400000; var_v0->triggers |= VERTICAL_TUMBLE_TRIGGER;
var_v0->type &= ~0x2000; var_v0->type &= ~0x2000;
} }
} }
@ -3130,9 +3130,9 @@ void func_8000DF8C(s32 bombKartId) {
sp7E = 4; sp7E = 4;
var_s1 = 0; var_s1 = 0;
if (IsFrappeSnowland()) { if (IsFrappeSnowland()) {
var_v0->soundEffects |= 0x01000000; var_v0->triggers |= HIT_BY_STAR_TRIGGER;
} else { } else {
var_v0->soundEffects |= 0x400000; var_v0->triggers |= VERTICAL_TUMBLE_TRIGGER;
} }
} }
} }
@ -3689,7 +3689,7 @@ void init_players(void) {
for (i = 0; i < NUM_PLAYERS; i++) { for (i = 0; i < NUM_PLAYERS; i++) {
if (D_80163330[i] == 1) { if (D_80163330[i] == 1) {
gPlayers[i].soundEffects |= 0x02000000; gPlayers[i].triggers |= START_BOOST_TRIGGER;
} }
} }
} }
@ -4652,14 +4652,14 @@ void handle_trains_interactions(s32 playerId, Player* player) {
if ((z_dist > -100.0) && (z_dist < 100.0)) { if ((z_dist > -100.0) && (z_dist < 100.0)) {
if (is_collide_with_vehicle(trainCar->position[0], trainCar->position[2], trainCar->velocity[0], if (is_collide_with_vehicle(trainCar->position[0], trainCar->position[2], trainCar->velocity[0],
trainCar->velocity[2], 60.0f, 20.0f, playerPosX, playerPosZ) == 1) { trainCar->velocity[2], 60.0f, 20.0f, playerPosX, playerPosZ) == 1) {
player->soundEffects |= REVERSE_SOUND_EFFECT; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
} }
trainCar = &gTrainList[trainIndex].tender; trainCar = &gTrainList[trainIndex].tender;
if (trainCar->isActive == 1) { if (trainCar->isActive == 1) {
if (is_collide_with_vehicle(trainCar->position[0], trainCar->position[2], if (is_collide_with_vehicle(trainCar->position[0], trainCar->position[2],
trainCar->velocity[0], trainCar->velocity[2], 30.0f, 20.0f, trainCar->velocity[0], trainCar->velocity[2], 30.0f, 20.0f,
playerPosX, playerPosZ) == 1) { playerPosX, playerPosZ) == 1) {
player->soundEffects |= REVERSE_SOUND_EFFECT; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
} }
} }
} }
@ -4676,7 +4676,7 @@ void handle_trains_interactions(s32 playerId, Player* player) {
if (is_collide_with_vehicle(trainCar->position[0], trainCar->position[2], if (is_collide_with_vehicle(trainCar->position[0], trainCar->position[2],
trainCar->velocity[0], trainCar->velocity[2], 30.0f, 20.0f, trainCar->velocity[0], trainCar->velocity[2], 30.0f, 20.0f,
playerPosX, playerPosZ) == 1) { playerPosX, playerPosZ) == 1) {
player->soundEffects |= REVERSE_SOUND_EFFECT; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
} }
} }
} }
@ -4902,7 +4902,7 @@ void handle_paddle_boats_interactions(Player* player) {
tempPaddleWheelBoat->velocity[0], tempPaddleWheelBoat->velocity[2], tempPaddleWheelBoat->velocity[0], tempPaddleWheelBoat->velocity[2],
200.0f, 60.0f, playerX, playerZ) == 1) && 200.0f, 60.0f, playerX, playerZ) == 1) &&
(y_diff < 60.0)) { (y_diff < 60.0)) {
player->soundEffects |= 0x80000; player->triggers |= HIT_PADDLE_BOAT_TRIGGER;
} }
} }
} }
@ -5086,7 +5086,7 @@ void handle_vehicle_interactions(s32 playerId, Player* player, VehicleStuff* veh
if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) { if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) {
if (is_collide_with_vehicle(vehicle->position[0], vehicle->position[2], vehicle->velocity[0], if (is_collide_with_vehicle(vehicle->position[0], vehicle->position[2], vehicle->velocity[0],
vehicle->velocity[2], arg3, arg4, spC4, spBC) == (s32) 1) { vehicle->velocity[2], arg3, arg4, spC4, spBC) == (s32) 1) {
player->soundEffects |= REVERSE_SOUND_EFFECT; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
} }
} }
} }
@ -7223,7 +7223,7 @@ void cpu_use_item_strategy(s32 playerId) {
} else if (cpuStrategy->branch == CPU_STRATEGY_ITEM_BANANA) { } else if (cpuStrategy->branch == CPU_STRATEGY_ITEM_BANANA) {
cpuStrategy->actorIndex = use_banana_item(player); cpuStrategy->actorIndex = use_banana_item(player);
if ((cpuStrategy->actorIndex >= 0) && (cpuStrategy->actorIndex < 100)) { if ((cpuStrategy->actorIndex >= 0) && (cpuStrategy->actorIndex < 100)) {
player->soundEffects |= HOLD_BANANA_SOUND_EFFECT; player->triggers |= DRAG_ITEM_EFFECT;
cpuStrategy->branch = CPU_STRATEGY_HOLD_BANANA; cpuStrategy->branch = CPU_STRATEGY_HOLD_BANANA;
cpuStrategy->timer = 0; cpuStrategy->timer = 0;
cpuStrategy->numItemUse += 1; cpuStrategy->numItemUse += 1;
@ -7248,7 +7248,7 @@ void cpu_use_item_strategy(s32 playerId) {
cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM; cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM;
cpuStrategy->timer = 0; cpuStrategy->timer = 0;
player->soundEffects &= ~HOLD_BANANA_SOUND_EFFECT; player->triggers &= ~DRAG_ITEM_EFFECT;
} else if (cpuStrategy->timeBeforeThrow < cpuStrategy->timer) { } else if (cpuStrategy->timeBeforeThrow < cpuStrategy->timer) {
cpuStrategy->branch = CPU_STRATEGY_DROP_BANANA; cpuStrategy->branch = CPU_STRATEGY_DROP_BANANA;
} }
@ -7277,7 +7277,7 @@ void cpu_use_item_strategy(s32 playerId) {
(BANANA_ACTOR(actor)->boundingBoxSize + 1.0f); (BANANA_ACTOR(actor)->boundingBoxSize + 1.0f);
} }
} }
player->soundEffects &= ~HOLD_BANANA_SOUND_EFFECT; player->triggers &= ~DRAG_ITEM_EFFECT;
cpuStrategy->timer = 0; cpuStrategy->timer = 0;
cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM; cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM;
break; break;
@ -7287,7 +7287,7 @@ void cpu_use_item_strategy(s32 playerId) {
if ((cpuStrategy->actorIndex >= 0) && (cpuStrategy->actorIndex < 100)) { if ((cpuStrategy->actorIndex >= 0) && (cpuStrategy->actorIndex < 100)) {
actor = GET_ACTOR(cpuStrategy->actorIndex); actor = GET_ACTOR(cpuStrategy->actorIndex);
BANANA_ACTOR(actor)->state = BANANA_ON_GROUND; BANANA_ACTOR(actor)->state = BANANA_ON_GROUND;
player->soundEffects |= HOLD_BANANA_SOUND_EFFECT; player->triggers |= DRAG_ITEM_EFFECT;
cpuStrategy->branch = CPU_STRATEGY_HOLD_THROW_BANANA; cpuStrategy->branch = CPU_STRATEGY_HOLD_THROW_BANANA;
cpuStrategy->timer = 0; cpuStrategy->timer = 0;
cpuStrategy->numItemUse += 1; cpuStrategy->numItemUse += 1;
@ -7320,7 +7320,7 @@ void cpu_use_item_strategy(s32 playerId) {
cpuStrategy->timer = 0; cpuStrategy->timer = 0;
cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM; cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM;
player->soundEffects &= ~HOLD_BANANA_SOUND_EFFECT; player->triggers &= ~DRAG_ITEM_EFFECT;
} else { } else {
BANANA_ACTOR(actor)->velocity[1] -= 0.4; BANANA_ACTOR(actor)->velocity[1] -= 0.4;
BANANA_ACTOR(actor)->pos[0] += BANANA_ACTOR(actor)->velocity[0]; BANANA_ACTOR(actor)->pos[0] += BANANA_ACTOR(actor)->velocity[0];
@ -7354,7 +7354,7 @@ void cpu_use_item_strategy(s32 playerId) {
BANANA_ACTOR(actor)->pos[2]) + BANANA_ACTOR(actor)->pos[2]) +
(BANANA_ACTOR(actor)->boundingBoxSize + 1.0f); (BANANA_ACTOR(actor)->boundingBoxSize + 1.0f);
} }
player->soundEffects &= ~HOLD_BANANA_SOUND_EFFECT; player->triggers &= ~DRAG_ITEM_EFFECT;
cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM; cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM;
cpuStrategy->timer = 0; cpuStrategy->timer = 0;
break; break;
@ -7652,7 +7652,7 @@ void cpu_use_item_strategy(s32 playerId) {
break; break;
case CPU_STRATEGY_ITEM_STAR: case CPU_STRATEGY_ITEM_STAR:
player->soundEffects |= STAR_SOUND_EFFECT; player->triggers |= STAR_TRIGGER;
cpuStrategy->branch = CPU_STRATEGY_END_ITEM_STAR; cpuStrategy->branch = CPU_STRATEGY_END_ITEM_STAR;
cpuStrategy->timer = 0; cpuStrategy->timer = 0;
cpuStrategy->numItemUse += 1; cpuStrategy->numItemUse += 1;
@ -7666,7 +7666,7 @@ void cpu_use_item_strategy(s32 playerId) {
break; break;
case CPU_STRATEGY_ITEM_BOO: case CPU_STRATEGY_ITEM_BOO:
player->soundEffects |= BOO_SOUND_EFFECT; player->triggers |= BOO_TRIGGER;
cpuStrategy->branch = CPU_STRATEGY_WAIT_END_BOO; cpuStrategy->branch = CPU_STRATEGY_WAIT_END_BOO;
cpuStrategy->timer = 0; cpuStrategy->timer = 0;
cpuStrategy->numItemUse += 1; cpuStrategy->numItemUse += 1;
@ -7680,7 +7680,7 @@ void cpu_use_item_strategy(s32 playerId) {
break; break;
case CPU_STRATEGY_ITEM_MUSHROOM: case CPU_STRATEGY_ITEM_MUSHROOM:
player->soundEffects |= BOOST_SOUND_EFFECT; player->triggers |= SHROOM_TRIGGER;
cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM; cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM;
cpuStrategy->timer = 0; cpuStrategy->timer = 0;
cpuStrategy->numItemUse += 1; cpuStrategy->numItemUse += 1;
@ -7688,7 +7688,7 @@ void cpu_use_item_strategy(s32 playerId) {
case CPU_STRATEGY_ITEM_DOUBLE_MUSHROOM: case CPU_STRATEGY_ITEM_DOUBLE_MUSHROOM:
if (cpuStrategy->timer >= 0x3D) { if (cpuStrategy->timer >= 0x3D) {
player->soundEffects |= BOOST_SOUND_EFFECT; player->triggers |= SHROOM_TRIGGER;
cpuStrategy->branch = CPU_STRATEGY_ITEM_MUSHROOM; cpuStrategy->branch = CPU_STRATEGY_ITEM_MUSHROOM;
cpuStrategy->timer = 0; cpuStrategy->timer = 0;
} }
@ -7696,7 +7696,7 @@ void cpu_use_item_strategy(s32 playerId) {
case CPU_STRATEGY_ITEM_TRIPLE_MUSHROOM: case CPU_STRATEGY_ITEM_TRIPLE_MUSHROOM:
if (cpuStrategy->timer >= 0x3D) { if (cpuStrategy->timer >= 0x3D) {
player->soundEffects |= BOOST_SOUND_EFFECT; player->triggers |= SHROOM_TRIGGER;
cpuStrategy->branch = CPU_STRATEGY_ITEM_DOUBLE_MUSHROOM; cpuStrategy->branch = CPU_STRATEGY_ITEM_DOUBLE_MUSHROOM;
cpuStrategy->timer = 0; cpuStrategy->timer = 0;
} }
@ -7710,7 +7710,7 @@ void cpu_use_item_strategy(s32 playerId) {
case CPU_STRATEGY_USE_SUPER_MUSHROOM: case CPU_STRATEGY_USE_SUPER_MUSHROOM:
if ((((s16) cpuStrategy->timer) % 60) == 0) { if ((((s16) cpuStrategy->timer) % 60) == 0) {
player->soundEffects |= BOOST_SOUND_EFFECT; player->triggers |= SHROOM_TRIGGER;
if (cpuStrategy->timeBeforeThrow < cpuStrategy->timer) { if (cpuStrategy->timeBeforeThrow < cpuStrategy->timer) {
cpuStrategy->timer = 0; cpuStrategy->timer = 0;
cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM; cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM;

View File

@ -1167,7 +1167,7 @@ s32 func_80089B50(s32 objectIndex) {
(player->type & PLAYER_EXISTS) && !(player->type & PLAYER_INVISIBLE_OR_BOMB) && (player->type & PLAYER_EXISTS) && !(player->type & PLAYER_INVISIBLE_OR_BOMB) &&
(has_collided_horizontally_with_player(objectIndex, player) != 0)) { (has_collided_horizontally_with_player(objectIndex, player) != 0)) {
if (!(player->effects & STAR_EFFECT)) { if (!(player->effects & STAR_EFFECT)) {
player->soundEffects |= REVERSE_SOUND_EFFECT; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) { if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) {
func_80072180(); func_80072180();
} }
@ -1194,7 +1194,7 @@ s32 func_80089CBC(s32 objectIndex, f32 arg1) {
if ((player->type & PLAYER_EXISTS) && !(player->type & PLAYER_INVISIBLE_OR_BOMB) && if ((player->type & PLAYER_EXISTS) && !(player->type & PLAYER_INVISIBLE_OR_BOMB) &&
(has_collided_with_player_and_within_height(objectIndex, player, arg1) != 0)) { (has_collided_with_player_and_within_height(objectIndex, player, arg1) != 0)) {
if (!(player->effects & STAR_EFFECT)) { if (!(player->effects & STAR_EFFECT)) {
player->soundEffects |= REVERSE_SOUND_EFFECT; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) { if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) {
func_80072180(); func_80072180();
} }
@ -1221,7 +1221,7 @@ s32 func_80089E18(s32 objectIndex) {
if (player->effects & STAR_EFFECT) { if (player->effects & STAR_EFFECT) {
var_s6 = 1; var_s6 = 1;
} else { } else {
player->soundEffects |= 1; player->triggers |= HIT_BANANA_TRIGGER;
} }
} }
} }
@ -1245,7 +1245,7 @@ s32 func_80089F24(s32 objectIndex) {
if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) { if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) {
func_80072180(); func_80072180();
} }
player->soundEffects |= 0x200000; player->triggers |= SPINOUT_TRIGGER;
} }
} }
} }

View File

@ -134,8 +134,8 @@ UNUSED void func_unnamed33(void) {
} }
void func_8008C310(Player* player) { void func_8008C310(Player* player) {
if ((player->soundEffects & 2) || (player->soundEffects & 4) || ((player->soundEffects << 9) < 0) || if ((player->triggers & HIGH_TUMBLE_TRIGGER) || (player->triggers & LOW_TUMBLE_TRIGGER) || ((player->triggers << 9) < 0) ||
(player->soundEffects & HIT_BY_ITEM_SOUND_EFFECT)) { (player->triggers & HIT_BY_STAR_TRIGGER)) {
player->unk_0B6 = ((u16) player->unk_0B6 | 0x1000); player->unk_0B6 = ((u16) player->unk_0B6 | 0x1000);
} }
} }
@ -216,7 +216,7 @@ void func_8008C528(Player* player, s8 arg1) {
} else { } else {
play_cpu_sound_effect(arg1, player); play_cpu_sound_effect(arg1, player);
} }
player->soundEffects = (s32) (player->soundEffects & ~4); player->triggers = (s32) (player->triggers & ~LOW_TUMBLE_TRIGGER);
} }
void func_8008C62C(Player* player, s8 arg1) { void func_8008C62C(Player* player, s8 arg1) {
@ -311,7 +311,7 @@ void func_8008C8C4(Player* player, s8 playerId) {
} }
if ((gModeSelection == VERSUS) && ((player->type & PLAYER_CPU) == PLAYER_CPU) && (!gDemoMode) && if ((gModeSelection == VERSUS) && ((player->type & PLAYER_CPU) == PLAYER_CPU) && (!gDemoMode) &&
((player->unk_0CA & 2) == 0) && (gGPCurrentRaceRankByPlayerId[playerId] != 0)) { ((player->unk_0CA & 2) == 0) && (gGPCurrentRaceRankByPlayerId[playerId] != 0)) {
player->soundEffects = (s32) (player->soundEffects | REVERSE_SOUND_EFFECT); player->triggers = (s32) (player->triggers | VERTICAL_TUMBLE_TRIGGER);
} }
} }
@ -372,7 +372,7 @@ void func_8008C9EC(Player* player, s8 arg1) {
void func_8008CDC0(Player* player, s8 arg1) { void func_8008CDC0(Player* player, s8 arg1) {
clean_effect(player, arg1); clean_effect(player, arg1);
player->soundEffects &= ~1; player->triggers &= ~HIT_BANANA_TRIGGER;
player->unk_0B4 = 0; player->unk_0B4 = 0;
player->unk_0B8 = 3.0f; player->unk_0B8 = 3.0f;
player->unk_0AC = 1; player->unk_0AC = 1;
@ -444,7 +444,7 @@ void func_8008D0E4(Player* player, UNUSED s8 arg1) {
void func_8008D0FC(Player* player, s8 arg1) { void func_8008D0FC(Player* player, s8 arg1) {
clean_effect(player, arg1); clean_effect(player, arg1);
player->soundEffects &= ~0x80; player->triggers &= ~DRIVING_SPINOUT_TRIGGER;
player->unk_0B4 = 0; player->unk_0B4 = 0;
player->unk_0B8 = 2.0f; player->unk_0B8 = 2.0f;
player->unk_0AC = 1; player->unk_0AC = 1;
@ -506,12 +506,12 @@ void func_8008D3B0(Player* player, UNUSED s8 arg1) {
player->unk_044 &= 0xBFFF; player->unk_044 &= 0xBFFF;
} }
void apply_boost_sound_effect(Player* player, s8 arg1) { void trigger_shroom(Player* player, s8 arg1) {
clean_effect(player, arg1); clean_effect(player, arg1);
player->effects |= BOOST_EFFECT; player->effects |= BOOST_EFFECT;
player->soundEffects &= ~BOOST_SOUND_EFFECT; player->triggers &= ~SHROOM_TRIGGER;
player->unk_DB4.unk0 = 0; player->unk_DB4.unk0 = 0;
player->unk_DB4.unk8 = 8.0f; player->unk_DB4.unk8 = 8.0f;
@ -559,7 +559,7 @@ void func_8008D570(Player* player, s8 arg1) {
player->unk_0AE = player->rotation[1]; player->unk_0AE = player->rotation[1];
player->effects |= 0x80000; player->effects |= 0x80000;
player->effects &= ~0x10; player->effects &= ~0x10;
player->soundEffects &= ~0x1000; player->triggers &= ~UNUSED_TRIGGER_0x1000;
player->kartHopJerk = D_800E3730[player->characterId]; player->kartHopJerk = D_800E3730[player->characterId];
player->kartHopAcceleration = 0.0f; player->kartHopAcceleration = 0.0f;
player->kartHopVelocity = (f32) D_800E3710[player->characterId]; player->kartHopVelocity = (f32) D_800E3710[player->characterId];
@ -618,7 +618,7 @@ void func_8008D7B0(Player* player, s8 arg1) {
player->unk_0AE = player->rotation[1]; player->unk_0AE = player->rotation[1];
player->effects |= 0x800000; player->effects |= 0x800000;
player->effects &= ~0x10; player->effects &= ~0x10;
player->soundEffects &= ~0x20000; player->triggers &= ~UNUSED_TRIGGER_0x20000;
player->kartHopJerk = D_800E3770[player->characterId]; player->kartHopJerk = D_800E3770[player->characterId];
player->kartHopAcceleration = 0.0f; player->kartHopAcceleration = 0.0f;
player->kartHopVelocity = D_800E3750[player->characterId]; player->kartHopVelocity = D_800E3750[player->characterId];
@ -687,7 +687,7 @@ void func_8008D9C0(Player* player) {
} }
} }
void apply_hit_sound_effect(Player* player, s8 arg1) { void trigger_squish(Player* player, s8 arg1) {
clean_effect(player, arg1); clean_effect(player, arg1);
if ((player->effects & HIT_EFFECT) == 0) { if ((player->effects & HIT_EFFECT) == 0) {
@ -704,7 +704,7 @@ void apply_hit_sound_effect(Player* player, s8 arg1) {
player->unk_D9C = 0.0f; player->unk_D9C = 0.0f;
player->unk_DA0 = 65.0f; player->unk_DA0 = 65.0f;
if ((player->soundEffects & 0x100) != 0) { if ((player->triggers & THWOMP_SQUISH_TRIGGER) != 0) {
player->unk_046 |= 0x80; player->unk_046 |= 0x80;
} }
@ -738,7 +738,7 @@ void apply_hit_effect(Player* player, s8 arg1) {
} }
if ((player->unk_046 & 0x80) != 0) { if ((player->unk_046 & 0x80) != 0) {
if ((player->soundEffects & 0x100) == 0) { if ((player->triggers & THWOMP_SQUISH_TRIGGER) == 0) {
D_8018D990[arg1] = 1; D_8018D990[arg1] = 1;
player->unk_238 = 0; player->unk_238 = 0;
if ((player->type & PLAYER_HUMAN) != 0) { if ((player->type & PLAYER_HUMAN) != 0) {
@ -827,10 +827,10 @@ void apply_hit_effect(Player* player, s8 arg1) {
} }
} }
void apply_hit_rotating_sound_effect(Player* player, s8 arg1) { void trigger_lightning_strike(Player* player, s8 arg1) {
clean_effect(player, arg1); clean_effect(player, arg1);
player->soundEffects &= ~HIT_ROTATING_SOUND_EFFECT; player->triggers &= ~LIGHTNING_STRIKE_TRIGGER;
player->effects |= 0x40020000; player->effects |= 0x40020000;
player->effects &= ~0x10; player->effects &= ~0x10;
player->kartPropulsionStrength *= 0.6; player->kartPropulsionStrength *= 0.6;
@ -874,7 +874,7 @@ void apply_lightning_effect(Player* player, s8 arg1) {
D_80165190[1][arg1] = 1; D_80165190[1][arg1] = 1;
D_80165190[2][arg1] = 1; D_80165190[2][arg1] = 1;
D_80165190[3][arg1] = 1; D_80165190[3][arg1] = 1;
apply_hit_sound_effect(player, arg1); trigger_squish(player, arg1);
} else if ((player->effects & 0x20000) == 0x20000) { } else if ((player->effects & 0x20000) == 0x20000) {
player->rotation[1] -= 0x5B0; player->rotation[1] -= 0x5B0;
D_8018D920[arg1] -= 0x5B0; D_8018D920[arg1] -= 0x5B0;
@ -992,12 +992,12 @@ void func_8008E4A4(Player* player, s8 arg1) {
} }
} }
void apply_reverse_sound_effect(Player* player, s8 arg1) { void trigger_vertical_tumble(Player* player, s8 arg1) {
clean_effect(player, arg1); clean_effect(player, arg1);
func_8008C310(player); func_8008C310(player);
player->unk_0A8 = 0; player->unk_0A8 = 0;
player->effects |= 0x01000000; player->effects |= HIT_BY_STAR_TRIGGER;
player->effects &= ~0x10; player->effects &= ~0x10;
player->kartHopJerk = 0.0f; player->kartHopJerk = 0.0f;
player->kartHopAcceleration = 0.0f; player->kartHopAcceleration = 0.0f;
@ -1025,7 +1025,7 @@ void apply_reverse_sound_effect(Player* player, s8 arg1) {
play_cpu_sound_effect(arg1, player); play_cpu_sound_effect(arg1, player);
} }
player->soundEffects &= ~(REVERSE_SOUND_EFFECT | 0x80000); player->triggers &= ~(VERTICAL_TUMBLE_TRIGGER | HIT_PADDLE_BOAT_TRIGGER);
player->unk_0B6 |= 0x40; player->unk_0B6 |= 0x40;
gTimerBoostTripleACombo[arg1] = 0; gTimerBoostTripleACombo[arg1] = 0;
gIsPlayerTripleAButtonCombo[arg1] = false; gIsPlayerTripleAButtonCombo[arg1] = false;
@ -1101,7 +1101,7 @@ void apply_hit_by_item_effect(Player* player, s8 arg1) {
} }
} }
void apply_hit_by_item_sound_effect(Player* player, s8 arg1) { void trigger_high_tumble(Player* player, s8 arg1) {
clean_effect(player, arg1); clean_effect(player, arg1);
func_8008C310(player); func_8008C310(player);
@ -1126,7 +1126,7 @@ void apply_hit_by_item_sound_effect(Player* player, s8 arg1) {
player->effects |= HIT_BY_ITEM_EFFECT; player->effects |= HIT_BY_ITEM_EFFECT;
player->unk_0B6 |= 0x40; player->unk_0B6 |= 0x40;
player->soundEffects &= ~0x01000002; player->triggers &= ~(HIT_BY_STAR_TRIGGER | HIGH_TUMBLE_TRIGGER);
gTimerBoostTripleACombo[arg1] = 0; gTimerBoostTripleACombo[arg1] = 0;
gIsPlayerTripleAButtonCombo[arg1] = false; gIsPlayerTripleAButtonCombo[arg1] = false;
@ -1145,11 +1145,11 @@ void remove_hit_by_item_effect(Player* player, s8 arg1) {
player->unk_042 = 0; player->unk_042 = 0;
} }
void apply_boost_ramp_asphalt_sound_effect(Player* player, s8 playerId) { void trigger_asphalt_ramp_boost(Player* player, s8 playerId) {
clean_effect(player, playerId); clean_effect(player, playerId);
player->effects |= BOOST_RAMP_ASPHALT_EFFECT; player->effects |= BOOST_RAMP_ASPHALT_EFFECT;
player->soundEffects &= ~BOOST_RAMP_ASPHALT_SOUND_EFFECT; player->triggers &= ~BOOST_RAMP_ASPHALT_TRIGGER;
player->unk_DB4.unk0 = 0; player->unk_DB4.unk0 = 0;
player->unk_DB4.unk8 = 8.0f; player->unk_DB4.unk8 = 8.0f;
if (D_8015F890 != 1) { if (D_8015F890 != 1) {
@ -1193,11 +1193,11 @@ void remove_boost_ramp_asphalt_effect(Player* player) {
player->boostPower = 0.0f; player->boostPower = 0.0f;
} }
void apply_boost_ramp_wood_sound_effect(Player* player, s8 playerId) { void trigger_wood_ramp_boost(Player* player, s8 playerId) {
clean_effect(player, playerId); clean_effect(player, playerId);
player->effects |= BOOST_RAMP_WOOD_EFFECT; player->effects |= BOOST_RAMP_WOOD_EFFECT;
player->soundEffects &= ~BOOST_RAMP_WOOD_SOUND_EFFECT; player->triggers &= ~BOOST_RAMP_WOOD_TRIGGER;
if (D_8015F890 != 1) { if (D_8015F890 != 1) {
if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && ((player->type & PLAYER_INVISIBLE_OR_BOMB) == 0)) { if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && ((player->type & PLAYER_INVISIBLE_OR_BOMB) == 0)) {
@ -1395,11 +1395,11 @@ void apply_star_effect(Player* player, s8 arg1) {
} }
// Star item // Star item
void apply_star_sound_effect(Player* player, s8 arg1) { void trigger_star(Player* player, s8 arg1) {
clean_effect(player, arg1); clean_effect(player, arg1);
player->effects |= STAR_EFFECT; player->effects |= STAR_EFFECT;
player->soundEffects &= ~STAR_SOUND_EFFECT; player->triggers &= ~STAR_TRIGGER;
gPlayerStarEffectStartTime[arg1] = gCourseTimer; gPlayerStarEffectStartTime[arg1] = gCourseTimer;
D_8018D900[arg1] = 1; D_8018D900[arg1] = 1;
@ -1467,7 +1467,7 @@ void apply_boo_effect(Player* player, s8 playerIndex) {
} }
} }
void apply_boo_sound_effect(Player* player, s8 playerIndex) { void trigger_boo(Player* player, s8 playerIndex) {
s16 temp_v1; s16 temp_v1;
if ((player->type & PLAYER_HUMAN) != 0) { if ((player->type & PLAYER_HUMAN) != 0) {
@ -1483,7 +1483,7 @@ void apply_boo_sound_effect(Player* player, s8 playerIndex) {
clean_effect(player, playerIndex); clean_effect(player, playerIndex);
player->effects |= BOO_EFFECT; player->effects |= BOO_EFFECT;
player->soundEffects &= ~BOO_SOUND_EFFECT; player->triggers &= ~BOO_TRIGGER;
gPlayerBooEffectStartTime[playerIndex] = gCourseTimer; gPlayerBooEffectStartTime[playerIndex] = gCourseTimer;
gPlayerOtherScreensAlpha[playerIndex] = ALPHA_MAX; gPlayerOtherScreensAlpha[playerIndex] = ALPHA_MAX;
@ -1529,8 +1529,8 @@ void func_8008FC64(Player* player, s8 playerIndex) {
player->alpha -= ALPHA_CHANGE_MEDIUM; player->alpha -= ALPHA_CHANGE_MEDIUM;
if (player->alpha <= ALPHA_CHANGE_MEDIUM) { if (player->alpha <= ALPHA_CHANGE_MEDIUM) {
player->alpha = ALPHA_MIN; player->alpha = ALPHA_MIN;
player->soundEffects &= 0xFBFFFFFF; player->triggers &= ~LOSE_BATTLE_EFFECT;
player->soundEffects |= 0x08000000; player->triggers |= BECOME_BOMB_EFFECT;
player->type |= PLAYER_UNKNOWN_0x40; player->type |= PLAYER_UNKNOWN_0x40;
func_8008FDA8(player, playerIndex); func_8008FDA8(player, playerIndex);
func_800569F4(playerIndex); func_800569F4(playerIndex);
@ -1541,7 +1541,7 @@ void func_8008FCDC(Player* player, s8 arg1) {
player->alpha += ALPHA_CHANGE_SMALL; player->alpha += ALPHA_CHANGE_SMALL;
if (player->alpha > ALPHA_MAX - (ALPHA_CHANGE_LARGE * 2)) { if (player->alpha > ALPHA_MAX - (ALPHA_CHANGE_LARGE * 2)) {
player->alpha = ALPHA_MAX; player->alpha = ALPHA_MAX;
player->soundEffects &= ~0x08000000; player->triggers &= ~BECOME_BOMB_EFFECT;
} }
func_80056A40(arg1, (u32) player->alpha); func_80056A40(arg1, (u32) player->alpha);
} }
@ -1549,7 +1549,7 @@ void func_8008FCDC(Player* player, s8 arg1) {
void func_8008FD4C(Player* player, UNUSED s8 arg1) { void func_8008FD4C(Player* player, UNUSED s8 arg1) {
s16 temp_v0; s16 temp_v0;
player->soundEffects |= 0x04000000; player->triggers |= LOSE_BATTLE_EFFECT;
player->unk_044 |= 0x200; player->unk_044 |= 0x200;
for (temp_v0 = 0; temp_v0 < 10; ++temp_v0) { for (temp_v0 = 0; temp_v0 < 10; ++temp_v0) {
@ -1576,21 +1576,21 @@ void func_8008FDF4(Player* player, UNUSED s8 arg1) {
player->kartHopJerk = D_800E37F0[player->characterId]; player->kartHopJerk = D_800E37F0[player->characterId];
player->kartHopAcceleration = 0.0f; player->kartHopAcceleration = 0.0f;
player->kartHopVelocity = D_800E37D0[player->characterId]; player->kartHopVelocity = D_800E37D0[player->characterId];
player->soundEffects &= ~0x00100000; player->triggers &= ~UNUSED_TRIGGER_0x10000;
player->effects |= 0x10000000; player->effects |= UNKNOWN_EFFECT_0x10000000;
} }
void func_8008FE84(Player* player, UNUSED s8 arg1) { void func_8008FE84(Player* player, UNUSED s8 arg1) {
player->effects &= ~0x10; player->effects &= ~0x10;
if ((player->effects & 8) != 8) { if ((player->effects & 8) != 8) {
player->effects &= ~0x10000000; player->effects &= ~UNKNOWN_EFFECT_0x10000000;
player->currentSpeed /= 2; player->currentSpeed /= 2;
player->kartPropulsionStrength /= 2; player->kartPropulsionStrength /= 2;
} }
} }
void func_8008FEDC(Player* player, UNUSED s8 arg1) { void func_8008FEDC(Player* player, UNUSED s8 arg1) {
player->effects &= ~0x10000000; player->effects &= ~UNKNOWN_EFFECT_0x10000000;
player->kartHopJerk = 0.0f; player->kartHopJerk = 0.0f;
player->kartHopVelocity = 0.0f; player->kartHopVelocity = 0.0f;
player->kartHopAcceleration = 0.0f; player->kartHopAcceleration = 0.0f;

View File

@ -59,7 +59,7 @@ void func_8008D0E4(Player*, s8);
void func_8008D0FC(Player*, s8); void func_8008D0FC(Player*, s8);
void func_8008D170(Player*, s8); void func_8008D170(Player*, s8);
void func_8008D3B0(Player*, s8); void func_8008D3B0(Player*, s8);
void apply_boost_sound_effect(Player*, s8); void trigger_shroom(Player*, s8);
void apply_boost_effect(Player*); void apply_boost_effect(Player*);
void remove_boost_effect(Player*); void remove_boost_effect(Player*);
void func_8008D570(Player*, s8); void func_8008D570(Player*, s8);
@ -69,21 +69,21 @@ void func_8008D7B0(Player*, s8);
void func_8008D8B4(Player*, s8); void func_8008D8B4(Player*, s8);
void func_8008D97C(Player*); void func_8008D97C(Player*);
void func_8008D9C0(Player*); void func_8008D9C0(Player*);
void apply_hit_sound_effect(Player*, s8); void trigger_squish(Player*, s8);
void apply_hit_effect(Player*, s8); void apply_hit_effect(Player*, s8);
void apply_hit_rotating_sound_effect(Player*, s8); void trigger_lightning_strike(Player*, s8);
void apply_lightning_effect(Player*, s8); void apply_lightning_effect(Player*, s8);
void remove_lightning_effect(Player*, s8); void remove_lightning_effect(Player*, s8);
void func_8008E4A4(Player*, s8); void func_8008E4A4(Player*, s8);
void apply_reverse_sound_effect(Player*, s8); void trigger_vertical_tumble(Player*, s8);
void func_8008E884(Player*, s8); void func_8008E884(Player*, s8);
void apply_hit_by_item_effect(Player*, s8); void apply_hit_by_item_effect(Player*, s8);
void apply_hit_by_item_sound_effect(Player*, s8); void trigger_high_tumble(Player*, s8);
void remove_hit_by_item_effect(Player*, s8); void remove_hit_by_item_effect(Player*, s8);
void apply_boost_ramp_asphalt_sound_effect(Player*, s8); void trigger_asphalt_ramp_boost(Player*, s8);
void apply_boost_ramp_asphalt_effect(Player*); void apply_boost_ramp_asphalt_effect(Player*);
void remove_boost_ramp_asphalt_effect(Player*); void remove_boost_ramp_asphalt_effect(Player*);
void apply_boost_ramp_wood_sound_effect(Player*, s8); void trigger_wood_ramp_boost(Player*, s8);
void apply_boost_ramp_wood_effect(Player*); void apply_boost_ramp_wood_effect(Player*);
void remove_boost_ramp_wood_effect(Player*); void remove_boost_ramp_wood_effect(Player*);
void func_8008F104(Player*, s8); void func_8008F104(Player*, s8);
@ -93,10 +93,10 @@ void func_8008F3F4(Player*, s8);
void func_8008F494(Player*, s8); void func_8008F494(Player*, s8);
void func_8008F5A4(Player*, s8); void func_8008F5A4(Player*, s8);
void apply_star_effect(Player*, s8); void apply_star_effect(Player*, s8);
void apply_star_sound_effect(Player*, s8); void trigger_star(Player*, s8);
void func_8008F86C(Player*, s8); void func_8008F86C(Player*, s8);
void apply_boo_effect(Player*, s8); void apply_boo_effect(Player*, s8);
void apply_boo_sound_effect(Player*, s8); void trigger_boo(Player*, s8);
void func_8008FB30(Player*, s8); void func_8008FB30(Player*, s8);
void func_8008FC1C(Player*); void func_8008FC1C(Player*);
void func_8008FC64(Player*, s8); void func_8008FC64(Player*, s8);

View File

@ -148,7 +148,7 @@ void OBombKart::Tick() {
circleTimer = 0; circleTimer = 0;
state = States::EXPLODE; state = States::EXPLODE;
Behaviour = States::EXPLODE; Behaviour = States::EXPLODE;
player->soundEffects |= 0x400000; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
player->type &= ~0x2000; player->type &= ~0x2000;
} }
} }
@ -165,9 +165,9 @@ void OBombKart::Tick() {
Behaviour = States::EXPLODE; Behaviour = States::EXPLODE;
circleTimer = 0; circleTimer = 0;
if (IsFrappeSnowland()) { if (IsFrappeSnowland()) {
player->soundEffects |= 0x01000000; player->triggers |= HIT_BY_STAR_TRIGGER;
} else { } else {
player->soundEffects |= 0x400000; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
} }
} }
} }

View File

@ -217,7 +217,7 @@ void OMole::func_80081D34(s32 objectIndex) {
if (player->effects & 0x200) { if (player->effects & 0x200) {
func_800C9060(i, 0x1900A046U); func_800C9060(i, 0x1900A046U);
} else { } else {
player->soundEffects |= 2; player->triggers |= HIGH_TUMBLE_TRIGGER;
} }
object->direction_angle[1] = camera->rot[1]; object->direction_angle[1] = camera->rot[1];
object->velocity[1] = (player->speed / 2) + 3.0; object->velocity[1] = (player->speed / 2) + 3.0;

View File

@ -644,7 +644,7 @@ void OThwomp::func_80080B28(s32 objectIndex, s32 playerId) {
player = &gPlayerOne[playerId]; player = &gPlayerOne[playerId];
if (is_obj_flag_status_active(objectIndex, 0x00000200) != 0) { if (is_obj_flag_status_active(objectIndex, 0x00000200) != 0) {
if (!(player->soundEffects & 0x100)) { if (!(player->triggers & THWOMP_SQUISH_TRIGGER)) {
temp_f0 = func_80088F54(objectIndex, player); temp_f0 = func_80088F54(objectIndex, player);
if ((temp_f0 <= 9.0) && !(player->effects & 0x04000000) && if ((temp_f0 <= 9.0) && !(player->effects & 0x04000000) &&
(has_collided_horizontally_with_player(objectIndex, player) != 0)) { (has_collided_horizontally_with_player(objectIndex, player) != 0)) {
@ -675,7 +675,7 @@ void OThwomp::func_80080B28(s32 objectIndex, s32 playerId) {
func_800722A4(objectIndex, 2); func_800722A4(objectIndex, 2);
player->unk_040 = (s16) objectIndex; player->unk_040 = (s16) objectIndex;
player->unk_046 |= 2; player->unk_046 |= 2;
player->soundEffects |= 0x100; player->triggers |= THWOMP_SQUISH_TRIGGER;
reset_player_speed_and_velocity(player); reset_player_speed_and_velocity(player);
} }
} }
@ -816,7 +816,7 @@ void OThwomp::func_80080DE4(s32 arg0) {
player = gPlayerOne; player = gPlayerOne;
for (var_v1 = 0; var_v1 < NUM_PLAYERS; var_v1++, player++) { for (var_v1 = 0; var_v1 < NUM_PLAYERS; var_v1++, player++) {
if (arg0 == player->unk_040) { if (arg0 == player->unk_040) {
player->soundEffects &= ~0x100; player->triggers &= ~THWOMP_SQUISH_TRIGGER;
player->unk_040 = -1; player->unk_040 = -1;
} }
} }

View File

@ -205,7 +205,7 @@ void ABoat::VehicleCollision(s32 playerId, Player* player) {
if ((is_collide_with_vehicle(Position[0], Position[2], Velocity[0], Velocity[2], 200.0f, 60.0f, if ((is_collide_with_vehicle(Position[0], Position[2], Velocity[0], Velocity[2], 200.0f, 60.0f,
playerX, playerZ) == 1) && playerX, playerZ) == 1) &&
(y_diff < 60.0)) { (y_diff < 60.0)) {
player->soundEffects |= 0x80000; player->triggers |= HIT_PADDLE_BOAT_TRIGGER;
} }
} }
} }

View File

@ -204,7 +204,7 @@ void ABus::VehicleCollision(s32 playerId, Player* player) {
if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) { if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) {
if (is_collide_with_vehicle(Position[0], Position[2], Velocity[0], Velocity[2], SomeArg3, SomeArg4, if (is_collide_with_vehicle(Position[0], Position[2], Velocity[0], Velocity[2], SomeArg3, SomeArg4,
spC4, spBC) == (s32) 1) { spC4, spBC) == (s32) 1) {
player->soundEffects |= REVERSE_SOUND_EFFECT; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
} }
} }
} }

View File

@ -205,7 +205,7 @@ void ACar::VehicleCollision(s32 playerId, Player* player) {
if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) { if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) {
if (is_collide_with_vehicle(Position[0], Position[2], Velocity[0], Velocity[2], SomeArg3, SomeArg4, if (is_collide_with_vehicle(Position[0], Position[2], Velocity[0], Velocity[2], SomeArg3, SomeArg4,
spC4, spBC) == (s32) 1) { spC4, spBC) == (s32) 1) {
player->soundEffects |= REVERSE_SOUND_EFFECT; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
} }
} }
} }

View File

@ -204,7 +204,7 @@ void ATankerTruck::VehicleCollision(s32 playerId, Player* player) {
if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) { if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) {
if (is_collide_with_vehicle(Position[0], Position[2], Velocity[0], Velocity[2], SomeArg3, SomeArg4, if (is_collide_with_vehicle(Position[0], Position[2], Velocity[0], Velocity[2], SomeArg3, SomeArg4,
spC4, spBC) == (s32) 1) { spC4, spBC) == (s32) 1) {
player->soundEffects |= REVERSE_SOUND_EFFECT; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
} }
} }
} }

View File

@ -272,13 +272,13 @@ void ATrain::VehicleCollision(s32 playerId, Player* player) {
if ((z_dist > -100.0) && (z_dist < 100.0)) { if ((z_dist > -100.0) && (z_dist < 100.0)) {
if (is_collide_with_vehicle(trainCar->position[0], trainCar->position[2], trainCar->velocity[0], if (is_collide_with_vehicle(trainCar->position[0], trainCar->position[2], trainCar->velocity[0],
trainCar->velocity[2], 60.0f, 20.0f, playerPosX, playerPosZ) == 1) { trainCar->velocity[2], 60.0f, 20.0f, playerPosX, playerPosZ) == 1) {
player->soundEffects |= REVERSE_SOUND_EFFECT; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
} }
trainCar = &Tender; trainCar = &Tender;
if (trainCar->isActive == 1) { if (trainCar->isActive == 1) {
if (is_collide_with_vehicle(trainCar->position[0], trainCar->position[2], trainCar->velocity[0], if (is_collide_with_vehicle(trainCar->position[0], trainCar->position[2], trainCar->velocity[0],
trainCar->velocity[2], 30.0f, 20.0f, playerPosX, playerPosZ) == 1) { trainCar->velocity[2], 30.0f, 20.0f, playerPosX, playerPosZ) == 1) {
player->soundEffects |= REVERSE_SOUND_EFFECT; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
} }
} }
} }
@ -294,7 +294,7 @@ void ATrain::VehicleCollision(s32 playerId, Player* player) {
if (is_collide_with_vehicle(trainCar->position[0], trainCar->position[2], if (is_collide_with_vehicle(trainCar->position[0], trainCar->position[2],
trainCar->velocity[0], trainCar->velocity[2], 30.0f, 20.0f, trainCar->velocity[0], trainCar->velocity[2], 30.0f, 20.0f,
playerPosX, playerPosZ) == 1) { playerPosX, playerPosZ) == 1) {
player->soundEffects |= REVERSE_SOUND_EFFECT; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
} }
} }
} }

View File

@ -204,7 +204,7 @@ void ATruck::VehicleCollision(s32 playerId, Player* player) {
if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) { if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) {
if (is_collide_with_vehicle(Position[0], Position[2], Velocity[0], Velocity[2], SomeArg3, SomeArg4, if (is_collide_with_vehicle(Position[0], Position[2], Velocity[0], Velocity[2], SomeArg3, SomeArg4,
spC4, spBC) == (s32) 1) { spC4, spBC) == (s32) 1) {
player->soundEffects |= REVERSE_SOUND_EFFECT; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
} }
} }
} }

View File

@ -725,12 +725,12 @@ void func_80029B4C(Player* player, UNUSED f32 arg1, f32 arg2, UNUSED f32 arg3) {
if (player->surfaceType == BOOST_RAMP_ASPHALT) { if (player->surfaceType == BOOST_RAMP_ASPHALT) {
if (((player->effects & BOOST_RAMP_ASPHALT_EFFECT) != BOOST_RAMP_ASPHALT_EFFECT) && if (((player->effects & BOOST_RAMP_ASPHALT_EFFECT) != BOOST_RAMP_ASPHALT_EFFECT) &&
((player->effects & 8) != 8)) { ((player->effects & 8) != 8)) {
player->soundEffects |= BOOST_RAMP_ASPHALT_SOUND_EFFECT; player->triggers |= BOOST_RAMP_ASPHALT_TRIGGER;
} }
} }
if (player->surfaceType == BOOST_RAMP_WOOD) { if (player->surfaceType == BOOST_RAMP_WOOD) {
if (((player->effects & BOOST_RAMP_WOOD_EFFECT) != BOOST_RAMP_WOOD_EFFECT) && ((player->effects & 8) != 8)) { if (((player->effects & BOOST_RAMP_WOOD_EFFECT) != BOOST_RAMP_WOOD_EFFECT) && ((player->effects & 8) != 8)) {
player->soundEffects |= BOOST_RAMP_WOOD_SOUND_EFFECT; player->triggers |= BOOST_RAMP_WOOD_TRIGGER;
} }
} }
} }
@ -810,12 +810,12 @@ void func_8002A194(Player* player, f32 x, f32 y, f32 z) {
if (player->surfaceType == BOOST_RAMP_ASPHALT) { if (player->surfaceType == BOOST_RAMP_ASPHALT) {
if (((player->effects & BOOST_RAMP_ASPHALT_EFFECT) != BOOST_RAMP_ASPHALT_EFFECT) && if (((player->effects & BOOST_RAMP_ASPHALT_EFFECT) != BOOST_RAMP_ASPHALT_EFFECT) &&
((player->effects & 8) != 8)) { ((player->effects & 8) != 8)) {
player->soundEffects |= BOOST_RAMP_ASPHALT_SOUND_EFFECT; player->triggers |= BOOST_RAMP_ASPHALT_TRIGGER;
} }
} }
if (player->surfaceType == BOOST_RAMP_WOOD) { if (player->surfaceType == BOOST_RAMP_WOOD) {
if (((player->effects & BOOST_RAMP_WOOD_EFFECT) != BOOST_RAMP_WOOD_EFFECT) && ((player->effects & 8) != 8)) { if (((player->effects & BOOST_RAMP_WOOD_EFFECT) != BOOST_RAMP_WOOD_EFFECT) && ((player->effects & 8) != 8)) {
player->soundEffects |= BOOST_RAMP_WOOD_SOUND_EFFECT; player->triggers |= BOOST_RAMP_WOOD_TRIGGER;
} }
} }
} }
@ -856,7 +856,7 @@ void func_8002A5F4(Vec3f arg0, f32 arg1, Vec3f arg2, f32 arg3, f32 arg4) {
void func_8002A704(Player* player, s8 arg1) { void func_8002A704(Player* player, s8 arg1) {
player->effects |= BOOST_EFFECT; player->effects |= BOOST_EFFECT;
player->soundEffects &= ~0x02000000; player->triggers &= ~START_BOOST_TRIGGER;
if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) &&
((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB)) { ((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB)) {
func_800C90F4(0U, (player->characterId * 0x10) + 0x29008001); func_800C90F4(0U, (player->characterId * 0x10) + 0x29008001);
@ -938,7 +938,7 @@ void kart_hop(Player* player) {
player->kartHopJerk = gKartHopJerkTable[player->characterId]; player->kartHopJerk = gKartHopJerkTable[player->characterId];
player->kartHopAcceleration = 0.0f; player->kartHopAcceleration = 0.0f;
player->kartHopVelocity = gKartHopInitialVelocityTable[player->characterId]; player->kartHopVelocity = gKartHopInitialVelocityTable[player->characterId];
player->effects |= 2; player->effects |= HIGH_TUMBLE_TRIGGER;
player->unk_DAC = 3.0f; player->unk_DAC = 3.0f;
player->kartGravity = 500.0f; player->kartGravity = 500.0f;
func_80036C5C(player); func_80036C5C(player);
@ -1121,123 +1121,138 @@ void func_8002B218(Player* player) {
} }
} }
void apply_sound_effect(Player* player, s8 playerId, UNUSED s8 screenId) { void apply_triggers(Player* player, s8 playerId, UNUSED s8 screenId) {
if ((player->soundEffects & 2) == 2) { if ((player->triggers & HIGH_TUMBLE_TRIGGER) == HIGH_TUMBLE_TRIGGER) {
apply_hit_by_item_sound_effect(player, playerId); trigger_high_tumble(player, playerId);
} }
if ((player->soundEffects & 4) == 4) { if ((player->triggers & LOW_TUMBLE_TRIGGER) == LOW_TUMBLE_TRIGGER) {
func_8008C528(player, playerId); func_8008C528(player, playerId);
} }
if ((player->soundEffects & 1) == 1) { if ((player->triggers & HIT_BANANA_TRIGGER) == HIT_BANANA_TRIGGER) {
func_8008CDC0(player, playerId); func_8008CDC0(player, playerId);
} }
if ((player->soundEffects & BOOST_SOUND_EFFECT) == BOOST_SOUND_EFFECT) { if ((player->triggers & SHROOM_TRIGGER) == SHROOM_TRIGGER) {
apply_boost_sound_effect(player, playerId); trigger_shroom(player, playerId);
} }
if ((player->soundEffects & 0x02000000) == 0x02000000) { if ((player->triggers & START_BOOST_TRIGGER) == START_BOOST_TRIGGER) {
func_8002A704(player, playerId); func_8002A704(player, playerId);
} }
if ((player->soundEffects & 0x1000) == 0x1000) { if ((player->triggers & UNUSED_TRIGGER_0x1000) == UNUSED_TRIGGER_0x1000) {
func_8008D570(player, playerId); func_8008D570(player, playerId);
} }
if ((player->soundEffects & 0x20000) == 0x20000) { if ((player->triggers & UNUSED_TRIGGER_0x20000) == UNUSED_TRIGGER_0x20000) {
func_8008D7B0(player, playerId); func_8008D7B0(player, playerId);
} }
if ((player->soundEffects & HIT_SOUND_EFFECT) == HIT_SOUND_EFFECT) { if ((player->triggers & THWOMP_SQUISH_TRIGGER) == THWOMP_SQUISH_TRIGGER) {
apply_hit_sound_effect(player, playerId); trigger_squish(player, playerId);
} }
if ((player->soundEffects & HIT_ROTATING_SOUND_EFFECT) == HIT_ROTATING_SOUND_EFFECT) { if ((player->triggers & LIGHTNING_STRIKE_TRIGGER) == LIGHTNING_STRIKE_TRIGGER) {
apply_hit_rotating_sound_effect(player, playerId); trigger_lightning_strike(player, playerId);
} }
if ((player->soundEffects & 0x200000) == 0x200000) { if ((player->triggers & SPINOUT_TRIGGER) == SPINOUT_TRIGGER) {
func_8008C73C(player, playerId); func_8008C73C(player, playerId);
} }
if ((player->soundEffects & REVERSE_SOUND_EFFECT) == REVERSE_SOUND_EFFECT) { if ((player->triggers & VERTICAL_TUMBLE_TRIGGER) == VERTICAL_TUMBLE_TRIGGER) {
apply_reverse_sound_effect(player, playerId); trigger_vertical_tumble(player, playerId);
} }
if ((player->soundEffects & HIT_BY_ITEM_SOUND_EFFECT) == HIT_BY_ITEM_SOUND_EFFECT) { if ((player->triggers & HIT_BY_STAR_TRIGGER) == HIT_BY_STAR_TRIGGER) {
apply_hit_by_item_sound_effect(player, playerId); trigger_high_tumble(player, playerId);
} }
if ((player->soundEffects & BOOST_RAMP_ASPHALT_SOUND_EFFECT) == BOOST_RAMP_ASPHALT_SOUND_EFFECT) { if ((player->triggers & BOOST_RAMP_ASPHALT_TRIGGER) == BOOST_RAMP_ASPHALT_TRIGGER) {
apply_boost_ramp_asphalt_sound_effect(player, playerId); trigger_asphalt_ramp_boost(player, playerId);
} }
if ((player->soundEffects & BOOST_RAMP_WOOD_SOUND_EFFECT) == BOOST_RAMP_WOOD_SOUND_EFFECT) { if ((player->triggers & BOOST_RAMP_WOOD_TRIGGER) == BOOST_RAMP_WOOD_TRIGGER) {
apply_boost_ramp_wood_sound_effect(player, playerId); trigger_wood_ramp_boost(player, playerId);
} }
if ((player->soundEffects & STAR_SOUND_EFFECT) == STAR_SOUND_EFFECT) { if ((player->triggers & STAR_TRIGGER) == STAR_TRIGGER) {
apply_star_sound_effect(player, playerId); trigger_star(player, playerId);
} }
if ((player->soundEffects & BOO_SOUND_EFFECT) == BOO_SOUND_EFFECT) { if ((player->triggers & BOO_TRIGGER) == BOO_TRIGGER) {
apply_boo_sound_effect(player, playerId); trigger_boo(player, playerId);
} }
if (player->soundEffects & 0x80) { if (player->triggers & DRIVING_SPINOUT_TRIGGER) {
func_8008D0FC(player, playerId); func_8008D0FC(player, playerId);
} }
if (player->soundEffects & 0x80000) { if (player->triggers & HIT_PADDLE_BOAT_TRIGGER) {
apply_reverse_sound_effect(player, playerId); trigger_vertical_tumble(player, playerId);
} }
} }
void func_8002B5C0(Player* player, UNUSED 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)) { if (((player->unk_0CA & 8) != 0) || ((player->unk_0CA & 2) != 0)) {
player->soundEffects &= 0xFE1D0478; player->triggers &= ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
} }
// Green shell
if ((player->effects & 0x400) == 0x400) { if ((player->effects & 0x400) == 0x400) {
player->soundEffects &= 0xFF5D457E; player->triggers &= ALL_TRIGGERS & ~(ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
} }
// Spinout (banana or driving)
if (((player->effects & 0x80) == 0x80) || ((player->effects & 0x40) == 0x40)) { if (((player->effects & 0x80) == 0x80) || ((player->effects & 0x40) == 0x40)) {
player->soundEffects &= 0xFF5F457E; player->triggers &= (ALL_TRIGGERS & ~(ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS)) | UNUSED_TRIGGER_0x20000;
} }
// Near spinout (banana)
if ((player->effects & 0x800) == 0x800) { if ((player->effects & 0x800) == 0x800) {
player->soundEffects &= 0xFF5D457E; player->triggers &= ALL_TRIGGERS & ~(ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
} }
if ((player->unk_044 & 0x4000) != 0) { if ((player->unk_044 & 0x4000) != 0) {
player->soundEffects &= 0xFF5D457E; player->triggers &= ALL_TRIGGERS & ~(ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
} }
//unclear
if ((player->effects & 0x80000) == 0x80000) { if ((player->effects & 0x80000) == 0x80000) {
player->soundEffects &= 0xFE1D4478; player->triggers &= ALL_TRIGGERS & ~((HIT_TRIGGERS ^ LIGHTNING_STRIKE_TRIGGER) | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
} }
//unclear
if ((player->effects & 0x800000) == 0x800000) { if ((player->effects & 0x800000) == 0x800000) {
player->soundEffects &= 0xFE1D0478; player->triggers &= ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
} }
//squished
if ((player->effects & HIT_EFFECT) == HIT_EFFECT) { if ((player->effects & HIT_EFFECT) == HIT_EFFECT) {
player->soundEffects &= 0xFE1D0578; player->triggers &= (ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS)) | THWOMP_SQUISH_TRIGGER;
} }
if ((player->effects & 0x01000000) == 0x01000000) { //explosion crash
player->soundEffects &= 0xFE1D4478; if ((player->effects & UNKNOWN_EFFECT_0x1000000) == UNKNOWN_EFFECT_0x1000000) {
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_ITEM_EFFECT) == HIT_BY_ITEM_EFFECT) { if ((player->effects & HIT_BY_ITEM_EFFECT) == HIT_BY_ITEM_EFFECT) {
player->soundEffects &= 0xFE1D4478; 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) { if ((player->effects & BOOST_RAMP_ASPHALT_EFFECT) == BOOST_RAMP_ASPHALT_EFFECT) {
player->soundEffects &= 0xFE1D0478; 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) { if ((player->effects & BOOST_RAMP_WOOD_EFFECT) == BOOST_RAMP_WOOD_EFFECT) {
player->soundEffects &= 0xFE1D0478; player->triggers &= ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
} }
if ((player->effects & 0x10000) == 0x10000) { // Terrain tumble
player->soundEffects &= 0xFE1D0478; if ((player->effects & UNKNOWN_EFFECT_0x10000) == UNKNOWN_EFFECT_0x10000) {
player->triggers &= ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
} }
// star
if ((player->effects & STAR_EFFECT) == STAR_EFFECT) { if ((player->effects & STAR_EFFECT) == STAR_EFFECT) {
player->soundEffects &= 0xFE9D8478; player->triggers &= ALL_TRIGGERS & ~(HIT_TRIGGERS | SHROOM_TRIGGER | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
} }
// boo
if ((player->effects & BOO_EFFECT) == BOO_EFFECT) { if ((player->effects & BOO_EFFECT) == BOO_EFFECT) {
player->soundEffects &= 0xFE9D8678; player->triggers &= ALL_TRIGGERS & ~(HIT_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
} }
// early start spinout
if ((player->effects & 0x4000) == 0x4000) { if ((player->effects & 0x4000) == 0x4000) {
player->soundEffects &= 0xFF5D45FF; player->triggers &= ALL_TRIGGERS & ~(ANY_BOOST_TRIGGERS | SPINOUT_TRIGGER | STATE_TRANSITION_TRIGGERS);
} }
// CPU_FAST_EFFECTS
if ((player->effects & 0x20000) == 0x20000) { if ((player->effects & 0x20000) == 0x20000) {
player->soundEffects &= 0xFE1D0478; player->triggers &= ALL_TRIGGERS & ~(HIT_TRIGGERS | ANY_BOOST_TRIGGERS | RACING_SPINOUT_TRIGGERS | STATE_TRANSITION_TRIGGERS);
} }
} }
void func_8002B830(Player* player, s8 playerId, s8 screenId) { void func_8002B830(Player* player, s8 playerId, s8 screenId) {
if (player->soundEffects != 0) { if (player->triggers != 0) {
func_8002B5C0(player, playerId, screenId); func_8002B5C0(player, playerId, screenId);
} }
if (player->soundEffects != 0) { if (player->triggers != 0) {
apply_sound_effect(player, playerId, screenId); apply_triggers(player, playerId, screenId);
} }
if ((player->unk_044 & 0x400) != 0) { if ((player->unk_044 & 0x400) != 0) {
func_800911B4(player, playerId); func_800911B4(player, playerId);
@ -1751,10 +1766,10 @@ void apply_effect(Player* player, s8 arg1, s8 arg2) {
player_decelerate_alternative(player, 10.0f); player_decelerate_alternative(player, 10.0f);
} }
if (gRaceState != RACE_FINISHED) { if (gRaceState != RACE_FINISHED) {
if (player->soundEffects & 0x04000000) { if (player->triggers & LOSE_BATTLE_EFFECT) {
func_8008FC64(player, arg1); func_8008FC64(player, arg1);
} }
if (player->soundEffects & 0x08000000) { if (player->triggers & BECOME_BOMB_EFFECT) {
func_8008FCDC(player, arg1); func_8008FCDC(player, arg1);
} }
} }
@ -3093,9 +3108,10 @@ void player_accelerate_alternative(Player* player) {
player->kartPropulsionStrength = (player->currentSpeed * player->currentSpeed) / 25.0f; player->kartPropulsionStrength = (player->currentSpeed * player->currentSpeed) / 25.0f;
} }
player->unk_044 |= 0x20; player->unk_044 |= 0x20;
if ((player->soundEffects * 8) < 0) { // Hacky way to check for START_SPINOUT_TRIGGER
if ((player->triggers * 8) < 0) {
func_8008F104(player, player_index); func_8008F104(player, player_index);
player->soundEffects &= 0xEFFFFFFF; player->triggers &= ~START_SPINOUT_TRIGGER;
} }
} }
@ -3117,9 +3133,10 @@ void player_decelerate_alternative(Player* player, f32 speed) {
player->kartPropulsionStrength = (player->currentSpeed * player->currentSpeed) / 25.0f; player->kartPropulsionStrength = (player->currentSpeed * player->currentSpeed) / 25.0f;
} }
player->unk_044 &= 0xFFDF; player->unk_044 &= 0xFFDF;
if ((player->soundEffects * 8) < 0) { // Hacky way to check for START_SPINOUT_TRIGGER
if ((player->triggers * 8) < 0) {
func_8008F104(player, player_index); func_8008F104(player, player_index);
player->soundEffects &= 0xEFFFFFFF; player->triggers &= ~START_SPINOUT_TRIGGER;
} }
} }
@ -3359,11 +3376,11 @@ void player_accelerate_during_start_sequence(Player* player) {
var_v0 = 8; var_v0 = 8;
} }
if ((test < var_v0) && ((player->unk_044 & 0x20) != 0x20)) { if ((test < var_v0) && ((player->unk_044 & 0x20) != 0x20)) {
player->soundEffects |= 0x02000000; player->triggers |= START_BOOST_TRIGGER;
} else if ((player->topSpeed * 0.9f) <= player->currentSpeed) { } else if ((player->topSpeed * 0.9f) <= player->currentSpeed) {
if ((player->soundEffects & 0x02000000) != 0x02000000) { if ((player->triggers & START_BOOST_TRIGGER) != START_BOOST_TRIGGER) {
player->soundEffects |= 0x10000000; player->triggers |= START_SPINOUT_TRIGGER;
player->soundEffects &= ~0x02000000; player->triggers &= ~START_BOOST_TRIGGER;
} }
} }
} }
@ -3383,9 +3400,9 @@ void player_decelerate_during_start_sequence(Player* player, f32 speedReduction)
player->currentSpeed = player->topSpeed; player->currentSpeed = player->topSpeed;
} }
if ((f64) player->currentSpeed <= (player->topSpeed * 0.7)) { if ((f64) player->currentSpeed <= (player->topSpeed * 0.7)) {
player->soundEffects &= ~0x10000000; player->triggers &= ~START_SPINOUT_TRIGGER;
} }
player->soundEffects &= ~0x02000000; player->triggers &= ~START_BOOST_TRIGGER;
player->unk_044 &= ~0x0020; player->unk_044 &= ~0x0020;
player->unk_098 = (player->currentSpeed * player->currentSpeed) / 25.0f; player->unk_098 = (player->currentSpeed * player->currentSpeed) / 25.0f;
} }
@ -3633,7 +3650,7 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) {
(!(player->effects & 8))) && (!(player->effects & 8))) &&
(((player->speed / 18.0f) * 216.0f) >= 40.0f)) && (((player->speed / 18.0f) * 216.0f) >= 40.0f)) &&
(player->driftDuration == 0)) { (player->driftDuration == 0)) {
player->soundEffects |= 0x80; player->triggers |= DRIVING_SPINOUT_TRIGGER;
} }
} }
if (((s32) player->tyres[BACK_RIGHT].surfaceType) < 0xF) { if (((s32) player->tyres[BACK_RIGHT].surfaceType) < 0xF) {

View File

@ -38,7 +38,7 @@ void func_8002AE30(void);
void func_8002AE38(Player*, s8, f32, f32, f32, f32); void func_8002AE38(Player*, s8, f32, f32, f32, f32);
void func_8002B218(Player*); void func_8002B218(Player*);
void apply_sound_effect(Player*, s8, s8); void apply_triggers(Player*, s8, s8);
void func_8002B5C0(Player*, s8, s8); void func_8002B5C0(Player*, s8, s8);
void func_8002B830(Player*, s8, s8); void func_8002B830(Player*, s8, s8);
void func_8002B8A4(Player*, Player*); void func_8002B8A4(Player*, Player*);

View File

@ -1553,13 +1553,13 @@ bool collision_yoshi_egg(Player* player, struct YoshiValleyEgg* egg) {
func_800C98B8(player->pos, player->velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x10)); func_800C98B8(player->pos, player->velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x10));
func_800C90F4(player - gPlayerOne, (player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x0D)); func_800C90F4(player - gPlayerOne, (player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x0D));
} else { } else {
apply_hit_sound_effect(player, player - gPlayerOne); trigger_squish(player, player - gPlayerOne);
if ((gModeSelection == TIME_TRIALS) && ((player->type & PLAYER_CPU) == 0)) { if ((gModeSelection == TIME_TRIALS) && ((player->type & PLAYER_CPU) == 0)) {
gPostTimeTrialReplayCannotSave = 1; gPostTimeTrialReplayCannotSave = 1;
} }
} }
} else { } else {
apply_hit_sound_effect(player, player - gPlayerOne); trigger_squish(player, player - gPlayerOne);
} }
return true; return true;
@ -1757,7 +1757,7 @@ void destroy_destructable_actor(struct Actor* actor) {
break; break;
case HELD_BANANA: case HELD_BANANA:
player = &gPlayers[banana->playerId]; player = &gPlayers[banana->playerId];
player->soundEffects &= ~0x00040000; player->triggers &= ~DRAG_ITEM_EFFECT;
/* fallthrough */ /* fallthrough */
case BANANA_ON_GROUND: case BANANA_ON_GROUND:
banana->flags = -0x8000; banana->flags = -0x8000;
@ -1852,7 +1852,7 @@ void destroy_destructable_actor(struct Actor* actor) {
fakeItemBox = (struct FakeItemBox*) actor; fakeItemBox = (struct FakeItemBox*) actor;
player = &gPlayers[(s16) fakeItemBox->playerId]; player = &gPlayers[(s16) fakeItemBox->playerId];
if (fakeItemBox->state == HELD_FAKE_ITEM_BOX) { if (fakeItemBox->state == HELD_FAKE_ITEM_BOX) {
player->soundEffects &= ~0x00040000; player->triggers &= ~DRAG_ITEM_EFFECT;
} }
fakeItemBox->state = DESTROYED_FAKE_ITEM_BOX; fakeItemBox->state = DESTROYED_FAKE_ITEM_BOX;
fakeItemBox->flags = -0x8000; fakeItemBox->flags = -0x8000;
@ -1977,7 +1977,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
if (player->effects & (BOO_EFFECT | 0x8C0)) { if (player->effects & (BOO_EFFECT | 0x8C0)) {
break; break;
} }
if (player->soundEffects & 1) { if (player->triggers & HIT_BANANA_TRIGGER) {
break; break;
} }
temp_v1 = actor->rot[0]; temp_v1 = actor->rot[0];
@ -1985,7 +1985,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
(query_collision_player_vs_actor_item(player, actor) != COLLISION)) { (query_collision_player_vs_actor_item(player, actor) != COLLISION)) {
break; break;
} }
player->soundEffects |= 1; player->triggers |= HIT_BANANA_TRIGGER;
owner = &gPlayers[temp_v1]; owner = &gPlayers[temp_v1];
if (owner->type & 0x4000) { if (owner->type & 0x4000) {
if (actor->flags & 0xF) { if (actor->flags & 0xF) {
@ -2006,7 +2006,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
if (player->effects & 0x80000400) { if (player->effects & 0x80000400) {
break; break;
} }
if (player->soundEffects & 4) { if (player->triggers & LOW_TUMBLE_TRIGGER) {
break; break;
} }
temp_v1 = actor->rot[2]; temp_v1 = actor->rot[2];
@ -2014,7 +2014,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
(query_collision_player_vs_actor_item(player, actor) != COLLISION)) { (query_collision_player_vs_actor_item(player, actor) != COLLISION)) {
break; break;
} }
player->soundEffects |= 4; player->triggers |= LOW_TUMBLE_TRIGGER;
func_800C98B8(player->pos, player->velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x10)); func_800C98B8(player->pos, player->velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x10));
owner = &gPlayers[temp_v1]; owner = &gPlayers[temp_v1];
if ((owner->type & 0x4000) && (temp_lo != temp_v1)) { if ((owner->type & 0x4000) && (temp_lo != temp_v1)) {
@ -2023,7 +2023,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
destroy_destructable_actor(actor); destroy_destructable_actor(actor);
break; break;
case ACTOR_BLUE_SPINY_SHELL: case ACTOR_BLUE_SPINY_SHELL:
if (player->soundEffects & 2) { if (player->triggers & HIGH_TUMBLE_TRIGGER) {
break; break;
} }
temp_v1 = actor->rot[2]; temp_v1 = actor->rot[2];
@ -2032,7 +2032,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
break; break;
} }
if (!(player->effects & BOO_EFFECT)) { if (!(player->effects & BOO_EFFECT)) {
player->soundEffects |= 2; player->triggers |= HIGH_TUMBLE_TRIGGER;
func_800C98B8(player->pos, player->velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x10)); func_800C98B8(player->pos, player->velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x10));
} }
owner = &gPlayers[temp_v1]; owner = &gPlayers[temp_v1];
@ -2048,7 +2048,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
if (player->effects & 0x01000000) { if (player->effects & 0x01000000) {
break; break;
} }
if (player->soundEffects & 2) { if (player->triggers & HIGH_TUMBLE_TRIGGER) {
break; break;
} }
temp_v1 = actor->rot[2]; temp_v1 = actor->rot[2];
@ -2057,7 +2057,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
break; break;
} }
if (!(player->effects & BOO_EFFECT)) { if (!(player->effects & BOO_EFFECT)) {
player->soundEffects |= 2; player->triggers |= HIGH_TUMBLE_TRIGGER;
func_800C98B8(player->pos, player->velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x10)); func_800C98B8(player->pos, player->velocity, SOUND_ARG_LOAD(0x19, 0x01, 0x80, 0x10));
} }
owner = &gPlayers[temp_v1]; owner = &gPlayers[temp_v1];
@ -2102,7 +2102,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
if (player->effects & STAR_EFFECT) { if (player->effects & STAR_EFFECT) {
actor->velocity[1] = 10.0f; actor->velocity[1] = 10.0f;
} else { } else {
apply_hit_sound_effect(player, player - gPlayerOne); trigger_squish(player, player - gPlayerOne);
} }
} }
} }
@ -2117,7 +2117,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
(query_collision_player_vs_actor_item(player, actor) != COLLISION)) { (query_collision_player_vs_actor_item(player, actor) != COLLISION)) {
break; break;
} }
player->soundEffects |= REVERSE_SOUND_EFFECT; player->triggers |= VERTICAL_TUMBLE_TRIGGER;
owner = &gPlayers[temp_v1]; owner = &gPlayers[temp_v1];
if (owner->type & 0x4000) { if (owner->type & 0x4000) {
if (actor->flags & 0xF) { if (actor->flags & 0xF) {
@ -2132,7 +2132,7 @@ void evaluate_collision_between_player_actor(Player* player, struct Actor* actor
} }
} }
if (actor->state == 0) { if (actor->state == 0) {
owner->soundEffects &= ~0x00040000; owner->triggers &= ~DRAG_ITEM_EFFECT;
} }
} }
actor->state = 2; actor->state = 2;

View File

@ -294,7 +294,7 @@ void update_actor_banana_bunch(struct BananaBunchParent* banana_bunch) {
} }
if (someCount == 0) { if (someCount == 0) {
destroy_actor((struct Actor*) banana_bunch); destroy_actor((struct Actor*) banana_bunch);
owner->soundEffects &= ~HOLD_BANANA_SOUND_EFFECT; owner->triggers &= ~DRAG_ITEM_EFFECT;
} else if ((owner->type & 0x4000) != 0) { } else if ((owner->type & 0x4000) != 0) {
controller = &gControllers[banana_bunch->playerId]; controller = &gControllers[banana_bunch->playerId];
if ((controller->buttonPressed & Z_TRIG) != 0) { if ((controller->buttonPressed & Z_TRIG) != 0) {
@ -526,7 +526,7 @@ s32 use_banana_bunch_item(Player* player) {
bananaBunch = (struct BananaBunchParent*) GET_ACTOR(actorIndex); bananaBunch = (struct BananaBunchParent*) GET_ACTOR(actorIndex);
bananaBunch->state = 0; bananaBunch->state = 0;
bananaBunch->playerId = player - gPlayerOne; bananaBunch->playerId = player - gPlayerOne;
player->soundEffects |= HOLD_BANANA_SOUND_EFFECT; player->triggers |= DRAG_ITEM_EFFECT;
return actorIndex; return actorIndex;
} }
@ -804,7 +804,7 @@ s32 use_fake_itembox_item(Player* player) {
itemBox = (struct FakeItemBox*) GET_ACTOR(actorIndex); itemBox = (struct FakeItemBox*) GET_ACTOR(actorIndex);
itemBox->playerId = (player - gPlayerOne); itemBox->playerId = (player - gPlayerOne);
itemBox->state = HELD_FAKE_ITEM_BOX; itemBox->state = HELD_FAKE_ITEM_BOX;
player->soundEffects |= HOLD_BANANA_SOUND_EFFECT; player->triggers |= DRAG_ITEM_EFFECT;
return actorIndex; return actorIndex;
} }
@ -851,7 +851,7 @@ s32 use_banana_item(Player* player) {
banana->playerId = playerId; banana->playerId = playerId;
banana->state = HELD_BANANA; banana->state = HELD_BANANA;
banana->unk_04 = 0x0014; banana->unk_04 = 0x0014;
player->soundEffects |= HOLD_BANANA_SOUND_EFFECT; player->triggers |= DRAG_ITEM_EFFECT;
return actorIndex; return actorIndex;
} }
@ -873,7 +873,7 @@ void use_thunder_item(Player* player) {
for (index = 0; index < NUM_PLAYERS; index++) { for (index = 0; index < NUM_PLAYERS; index++) {
otherPlayer = &gPlayers[index]; otherPlayer = &gPlayers[index];
if (player != otherPlayer) { if (player != otherPlayer) {
otherPlayer->soundEffects |= HIT_ROTATING_SOUND_EFFECT; otherPlayer->triggers |= LIGHTNING_STRIKE_TRIGGER;
} }
} }
} }
@ -899,22 +899,22 @@ void player_use_item(Player* player) {
use_banana_bunch_item(player); use_banana_bunch_item(player);
break; break;
case ITEM_MUSHROOM: case ITEM_MUSHROOM:
player->soundEffects |= BOOST_SOUND_EFFECT; player->triggers |= SHROOM_TRIGGER;
break; break;
case ITEM_DOUBLE_MUSHROOM: case ITEM_DOUBLE_MUSHROOM:
player->soundEffects |= BOOST_SOUND_EFFECT; player->triggers |= SHROOM_TRIGGER;
break; break;
case ITEM_TRIPLE_MUSHROOM: case ITEM_TRIPLE_MUSHROOM:
player->soundEffects |= BOOST_SOUND_EFFECT; player->triggers |= SHROOM_TRIGGER;
break; break;
case ITEM_SUPER_MUSHROOM: case ITEM_SUPER_MUSHROOM:
player->soundEffects |= BOOST_SOUND_EFFECT; player->triggers |= SHROOM_TRIGGER;
break; break;
case ITEM_BOO: case ITEM_BOO:
player->soundEffects |= BOO_SOUND_EFFECT; player->triggers |= BOO_TRIGGER;
break; break;
case ITEM_STAR: case ITEM_STAR:
player->soundEffects |= STAR_SOUND_EFFECT; player->triggers |= STAR_TRIGGER;
break; break;
case ITEM_THUNDERBOLT: case ITEM_THUNDERBOLT:
use_thunder_item(player); use_thunder_item(player);

View File

@ -533,7 +533,7 @@ void func_8028EF28(void) {
} }
gRaceState = RACE_FINISHED; gRaceState = RACE_FINISHED;
i = gPlayerPositionLUT[1]; i = gPlayerPositionLUT[1];
gPlayers[i].soundEffects |= 0x200000; gPlayers[i].triggers |= SPINOUT_TRIGGER;
gPlayers[i].type |= PLAYER_CPU; gPlayers[i].type |= PLAYER_CPU;
func_800CA118((u8) i); func_800CA118((u8) i);
break; break;
@ -551,7 +551,7 @@ void func_8028EF28(void) {
if (*(gNmiUnknown2 + i * 3 + 2) > 99) { if (*(gNmiUnknown2 + i * 3 + 2) > 99) {
*(gNmiUnknown2 + i * 3 + 2) = 99; *(gNmiUnknown2 + i * 3 + 2) = 99;
} }
gPlayers[i].soundEffects |= 0x200000; gPlayers[i].triggers |= SPINOUT_TRIGGER;
gPlayers[i].type |= PLAYER_CPU; gPlayers[i].type |= PLAYER_CPU;
func_800CA118((u8) i); func_800CA118((u8) i);
} }
@ -566,7 +566,7 @@ void func_8028EF28(void) {
if (currentPosition == 2) { if (currentPosition == 2) {
gRaceState = RACE_FINISHED; gRaceState = RACE_FINISHED;
i = gPlayerPositionLUT[3]; i = gPlayerPositionLUT[3];
gPlayers[i].soundEffects |= 0x200000; gPlayers[i].triggers |= SPINOUT_TRIGGER;
gPlayers[i].type |= PLAYER_CPU; gPlayers[i].type |= PLAYER_CPU;
func_800CA118((u8) i); func_800CA118((u8) i);
} }
@ -1127,22 +1127,22 @@ void func_802903D8(Player* playerOne, Player* playerTwo) {
func_800C9060((playerTwo - gPlayerOne), 0x19008001U); func_800C9060((playerTwo - gPlayerOne), 0x19008001U);
return; return;
} else { } else {
playerTwo->soundEffects |= REVERSE_SOUND_EFFECT; playerTwo->triggers |= VERTICAL_TUMBLE_TRIGGER;
func_8008FC1C(playerOne); func_8008FC1C(playerOne);
func_800C9060((playerTwo - gPlayerOne), 0x19008001U); func_800C9060((playerTwo - gPlayerOne), 0x19008001U);
} }
} else if (playerTwo->type & PLAYER_UNKNOWN_0x40) { } else if (playerTwo->type & PLAYER_UNKNOWN_0x40) {
playerOne->soundEffects |= REVERSE_SOUND_EFFECT; playerOne->triggers |= VERTICAL_TUMBLE_TRIGGER;
func_8008FC1C(playerTwo); func_8008FC1C(playerTwo);
func_800C9060(playerOne - gPlayerOne, 0x19008001U); func_800C9060(playerOne - gPlayerOne, 0x19008001U);
return; return;
} }
if (playerOne->effects & 0x200) { if (playerOne->effects & 0x200) {
if (!(playerTwo->effects & 0x200)) { if (!(playerTwo->effects & 0x200)) {
playerTwo->soundEffects |= HIT_BY_ITEM_SOUND_EFFECT; playerTwo->triggers |= HIT_BY_STAR_TRIGGER;
} }
} else if (playerTwo->effects & 0x200) { } else if (playerTwo->effects & 0x200) {
playerOne->soundEffects |= HIT_BY_ITEM_SOUND_EFFECT; playerOne->triggers |= HIT_BY_STAR_TRIGGER;
} else { } else {
playerOne->effects |= 0x8000; playerOne->effects |= 0x8000;
playerTwo->effects |= 0x8000; playerTwo->effects |= 0x8000;

View File

@ -1392,8 +1392,8 @@ void render_kart(Player* player, s8 playerId, s8 screenId, s8 flipOffset) {
AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_WRAP | ZMODE_XLU | CVG_X_ALPHA | FORCE_BL | 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)); 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->soundEffects & 0x08000000) || } else if (((player->unk_0CA & 4) == 4) || (player->triggers & BECOME_BOMB_EFFECT) ||
(player->soundEffects & 0x04000000)) { (player->triggers & LOSE_BATTLE_EFFECT)) {
gSPMatrix(gDisplayListHead++, GetKartMatrix(playerId + (screenId * 8)), gSPMatrix(gDisplayListHead++, GetKartMatrix(playerId + (screenId * 8)),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(gDisplayListHead++, common_setting_render_character); gSPDisplayList(gDisplayListHead++, common_setting_render_character);

View File

@ -177,7 +177,7 @@ void spawn_player(Player* player, s8 playerIndex, f32 startingRow, f32 startingC
player->unk_DAC = 0.0f; player->unk_DAC = 0.0f;
player->unk_044 = 0; player->unk_044 = 0;
player->unk_046 = 0; player->unk_046 = 0;
player->soundEffects = 0; player->triggers = 0;
player->alpha = ALPHA_MAX; player->alpha = ALPHA_MAX;
player->unk_206 = 0; player->unk_206 = 0;