Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion include/common_structs.h
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ typedef struct {
/* 0x0006 */ u16 unk_006;
/* 0x0008 */ s16 lapCount;
/* 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
/* 0x0012 */ s16 unk_012;
/* 0x0014 */ Vec3f pos;
Expand Down
46 changes: 33 additions & 13 deletions include/defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -328,20 +328,40 @@ enum PLACE { FIRST_PLACE, SECOND_PLACE, THIRD_PLACE, FOURTH_PLACE };
*/
#define MAX_TIME 0x927C0

/**
* @brief sound effect of player's
* for soundEffect
/*
* @brief triggers indicating that an effect should be applied to a kart
*/
#define HIT_SOUND_EFFECT 0x100 // hitting an object
#define BOOST_SOUND_EFFECT 0x200 // being boosted by trigger a mushroom
#define BOO_SOUND_EFFECT 0x800 // being a boo
#define STAR_SOUND_EFFECT 0x2000 // being a star
#define HIT_ROTATING_SOUND_EFFECT 0x4000 // hitting a rotating object
#define BOOST_RAMP_WOOD_SOUND_EFFECT 0x8000 // being boosted by a ramp
#define HOLD_BANANA_SOUND_EFFECT 0x40000 // holding a banana
#define REVERSE_SOUND_EFFECT 0x400000 // being in the wrong direction
#define BOOST_RAMP_ASPHALT_SOUND_EFFECT 0x800000 // being boosted by a boost pad
#define HIT_BY_STAR_SOUND_EFFECT 0x1000000 // being hit by an item
#define HIT_BANANA_TRIGGER 0x1 // hits a banana
#define HIGH_TUMBLE_TRIGGER 0x2 // hit by a red shell, blue shell, or hit a mole
#define LOW_TUMBLE_TRIGGER 0x4 // hit by a green shell
#define DRIVING_SPINOUT_TRIGGER 0x80 // spinning out from erratic driving
#define THWOMP_SQUISH_TRIGGER 0x100 // stomped by thwomp
#define SHROOM_TRIGGER 0x200 // being boosted by trigger a mushroom
#define BOO_TRIGGER 0x800 // being a boo
#define UNUSED_TRIGGER_0x1000 0x1000 // Unused
#define STAR_TRIGGER 0x2000 // Starting a star
#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
Expand Down
2 changes: 1 addition & 1 deletion src/actors/banana/update.inc.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ void update_actor_banana(struct BananaActor* banana) {
controller->buttonDepressed &= ~Z_TRIG;
banana->state = DROPPED_BANANA;
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));
pad3 = controller->rawStickY;
if ((pad3 > 30.0f) && (controller->rawStickX < 10) && (controller->rawStickX >= -9)) {
Expand Down
2 changes: 1 addition & 1 deletion src/actors/fake_item_box/update.inc.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ void update_actor_fake_item_box(struct FakeItemBox* fake_item_box) {
if ((temp_v1_3->buttonDepressed & Z_TRIG) != 0) {
temp_v1_3->buttonDepressed &= 0xDFFF;
func_802A1064(fake_item_box);
temp_v0_4->soundEffects &= 0xFFFBFFFF;
temp_v0_4->triggers &= ~DRAG_ITEM_EFFECT;
func_800C9060((u8) (temp_v0_4 - gPlayerOne), SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x12));
}
}
Expand Down
8 changes: 4 additions & 4 deletions src/camera.c
Original file line number Diff line number Diff line change
Expand Up @@ -1030,7 +1030,7 @@ void func_8001F394(Player* player, f32* arg1) {
}

if (D_80164A08[playerIndex] == 0) {
if (player->soundEffects & HOLD_BANANA_SOUND_EFFECT) {
if (player->triggers & DRAG_ITEM_EFFECT) {
D_80164A08[playerIndex] = 1;
}
if ((player->effects & MUSHROOM_EFFECT) == MUSHROOM_EFFECT) {
Expand All @@ -1039,7 +1039,7 @@ void func_8001F394(Player* player, f32* arg1) {
if ((player->effects & BOOST_RAMP_ASPHALT_EFFECT) == BOOST_RAMP_ASPHALT_EFFECT) {
D_80164A08[playerIndex] = 3;
}
if ((player->soundEffects & 0x100) == 0x100) {
if ((player->triggers & THWOMP_SQUISH_TRIGGER) == THWOMP_SQUISH_TRIGGER) {
D_80164A08[playerIndex] = 4;
}
if (((player->effects & BANANA_SPINOUT_EFFECT) == BANANA_SPINOUT_EFFECT) ||
Expand All @@ -1050,7 +1050,7 @@ void func_8001F394(Player* player, f32* arg1) {
}
switch (D_80164A08[playerIndex]) {
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);
} else {
if (D_80164498[playerIndex] > 1.0f) {
Expand Down Expand Up @@ -1089,7 +1089,7 @@ void func_8001F394(Player* player, f32* arg1) {
}
break;
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);
} else {
if (D_80164498[playerIndex] > 1.0f) {
Expand Down
8 changes: 4 additions & 4 deletions src/code_80086E70.c
Original file line number Diff line number Diff line change
Expand Up @@ -1185,7 +1185,7 @@ s32 func_80089B50(s32 objectIndex) {
(player->type & PLAYER_EXISTS) && !(player->type & PLAYER_INVISIBLE_OR_BOMB) &&
(has_collided_horizontally_with_player(objectIndex, player) != 0)) {
if (!(player->effects & STAR_EFFECT)) {
player->soundEffects |= REVERSE_SOUND_EFFECT;
player->triggers |= VERTICAL_TUMBLE_TRIGGER;
if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) {
func_80072180();
}
Expand All @@ -1212,7 +1212,7 @@ s32 func_80089CBC(s32 objectIndex, f32 arg1) {
if ((player->type & PLAYER_EXISTS) && !(player->type & PLAYER_INVISIBLE_OR_BOMB) &&
(has_collided_with_player_and_within_height(objectIndex, player, arg1) != 0)) {
if (!(player->effects & STAR_EFFECT)) {
player->soundEffects |= REVERSE_SOUND_EFFECT;
player->triggers |= VERTICAL_TUMBLE_TRIGGER;
if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) {
func_80072180();
}
Expand Down Expand Up @@ -1240,7 +1240,7 @@ s32 func_80089E18(s32 objectIndex) {
if (player->effects & STAR_EFFECT) {
var_s6 = 1;
} else {
player->soundEffects |= 1;
player->triggers |= HIT_BANANA_TRIGGER;
}
}
}
Expand All @@ -1265,7 +1265,7 @@ s32 func_80089F24(s32 objectIndex) {
if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) {
func_80072180();
}
player->soundEffects |= 0x200000;
player->triggers |= SPINOUT_TRIGGER;
}
}
}
Expand Down
30 changes: 15 additions & 15 deletions src/cpu_vehicles_camera_path.c
Original file line number Diff line number Diff line change
Expand Up @@ -1360,8 +1360,8 @@ void play_cpu_sound_effect(s32 arg0, Player* player) {
}
}
if (D_801633B0[arg0] >= 0xB) {
if ((player->soundEffects & 0x400000) || (player->soundEffects & 0x01000000) || (player->soundEffects & 2) ||
(player->soundEffects & 4) || (player->effects & SQUISH_EFFECT)) {
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)) {
func_800C92CC(arg0, SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x0B));
D_801633B0[arg0] = 0;
}
Expand Down Expand Up @@ -2217,7 +2217,7 @@ void init_players(void) {

for (i = 0; i < NUM_PLAYERS; i++) {
if (D_80163330[i] == 1) {
gPlayers[i].soundEffects |= 0x02000000;
gPlayers[i].triggers |= START_BOOST_TRIGGER;
}
}
}
Expand Down Expand Up @@ -3944,7 +3944,7 @@ void cpu_use_item_strategy(s32 playerId) {
} else if (cpuStrategy->branch == CPU_STRATEGY_ITEM_BANANA) {
cpuStrategy->actorIndex = use_banana_item(player);
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->timer = 0;
cpuStrategy->numItemUse += 1;
Expand All @@ -3969,7 +3969,7 @@ void cpu_use_item_strategy(s32 playerId) {

cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM;
cpuStrategy->timer = 0;
player->soundEffects &= ~HOLD_BANANA_SOUND_EFFECT;
player->triggers &= ~DRAG_ITEM_EFFECT;
} else if (cpuStrategy->timeBeforeThrow < cpuStrategy->timer) {
cpuStrategy->branch = CPU_STRATEGY_DROP_BANANA;
}
Expand Down Expand Up @@ -3998,7 +3998,7 @@ void cpu_use_item_strategy(s32 playerId) {
(BANANA_ACTOR(actor)->boundingBoxSize + 1.0f);
}
}
player->soundEffects &= ~HOLD_BANANA_SOUND_EFFECT;
player->triggers &= ~DRAG_ITEM_EFFECT;
cpuStrategy->timer = 0;
cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM;
break;
Expand All @@ -4008,7 +4008,7 @@ void cpu_use_item_strategy(s32 playerId) {
if ((cpuStrategy->actorIndex >= 0) && (cpuStrategy->actorIndex < 100)) {
actor = &gActorList[cpuStrategy->actorIndex];
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->timer = 0;
cpuStrategy->numItemUse += 1;
Expand Down Expand Up @@ -4041,7 +4041,7 @@ void cpu_use_item_strategy(s32 playerId) {

cpuStrategy->timer = 0;
cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM;
player->soundEffects &= ~HOLD_BANANA_SOUND_EFFECT;
player->triggers &= ~DRAG_ITEM_EFFECT;
} else {
BANANA_ACTOR(actor)->velocity[1] -= 0.4;
BANANA_ACTOR(actor)->pos[0] += BANANA_ACTOR(actor)->velocity[0];
Expand Down Expand Up @@ -4074,7 +4074,7 @@ void cpu_use_item_strategy(s32 playerId) {
get_surface_height(BANANA_ACTOR(actor)->pos[0], BANANA_ACTOR(actor)->pos[1] + 30.0, BANANA_ACTOR(actor)->pos[2]) +
(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->timer = 0;
break;
Expand Down Expand Up @@ -4368,7 +4368,7 @@ void cpu_use_item_strategy(s32 playerId) {
break;

case CPU_STRATEGY_ITEM_STAR:
player->soundEffects |= STAR_SOUND_EFFECT;
player->triggers |= STAR_TRIGGER;
cpuStrategy->branch = CPU_STRATEGY_END_ITEM_STAR;
cpuStrategy->timer = 0;
cpuStrategy->numItemUse += 1;
Expand All @@ -4382,7 +4382,7 @@ void cpu_use_item_strategy(s32 playerId) {
break;

case CPU_STRATEGY_ITEM_BOO:
player->soundEffects |= BOO_SOUND_EFFECT;
player->triggers |= BOO_TRIGGER;
cpuStrategy->branch = CPU_STRATEGY_WAIT_END_BOO;
cpuStrategy->timer = 0;
cpuStrategy->numItemUse += 1;
Expand All @@ -4396,23 +4396,23 @@ void cpu_use_item_strategy(s32 playerId) {
break;

case CPU_STRATEGY_ITEM_MUSHROOM:
player->soundEffects |= BOOST_SOUND_EFFECT;
player->triggers |= SHROOM_TRIGGER;
cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM;
cpuStrategy->timer = 0;
cpuStrategy->numItemUse += 1;
break;

case CPU_STRATEGY_ITEM_DOUBLE_MUSHROOM:
if (cpuStrategy->timer >= 0x3D) {
player->soundEffects |= BOOST_SOUND_EFFECT;
player->triggers |= SHROOM_TRIGGER;
cpuStrategy->branch = CPU_STRATEGY_ITEM_MUSHROOM;
cpuStrategy->timer = 0;
}
break;

case CPU_STRATEGY_ITEM_TRIPLE_MUSHROOM:
if (cpuStrategy->timer >= 0x3D) {
player->soundEffects |= BOOST_SOUND_EFFECT;
player->triggers |= SHROOM_TRIGGER;
cpuStrategy->branch = CPU_STRATEGY_ITEM_DOUBLE_MUSHROOM;
cpuStrategy->timer = 0;
}
Expand All @@ -4426,7 +4426,7 @@ void cpu_use_item_strategy(s32 playerId) {

case CPU_STRATEGY_USE_SUPER_MUSHROOM:
if ((((s16) cpuStrategy->timer) % 60) == 0) {
player->soundEffects |= BOOST_SOUND_EFFECT;
player->triggers |= SHROOM_TRIGGER;
if (cpuStrategy->timeBeforeThrow < cpuStrategy->timer) {
cpuStrategy->timer = 0;
cpuStrategy->branch = CPU_STRATEGY_WAIT_NEXT_ITEM;
Expand Down
6 changes: 3 additions & 3 deletions src/cpu_vehicles_camera_path/bomb_kart.inc.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ void func_8000DF8C(s32 bombKartId) {
if ((((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) + (temp_f12 * temp_f12)) < 25.0f) {
var_s1 = 0;
sp7E = 4;
var_v0->soundEffects |= 0x400000;
var_v0->triggers |= VERTICAL_TUMBLE_TRIGGER;
var_v0->type &= ~0x2000;
}
}
Expand All @@ -155,9 +155,9 @@ void func_8000DF8C(s32 bombKartId) {
sp7E = 4;
var_s1 = 0;
if (gCurrentCourseId == COURSE_FRAPPE_SNOWLAND) {
var_v0->soundEffects |= 0x01000000;
var_v0->triggers |= HIT_BY_STAR_TRIGGER;
} else {
var_v0->soundEffects |= 0x400000;
var_v0->triggers |= VERTICAL_TUMBLE_TRIGGER;
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/cpu_vehicles_camera_path/cpu_speed_control.inc.c
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +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->soundEffects & 0x400000) &&
!(player->soundEffects & 0x01000000) && !(player->soundEffects & 2) && !(player->soundEffects & 4)) {
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);
} else if ((bStopAICrossing[playerId] == true) && !(player->effects & (STAR_EFFECT | BOO_EFFECT))) {
Expand Down
10 changes: 5 additions & 5 deletions src/cpu_vehicles_camera_path/vehicle_utils.inc.c
Original file line number Diff line number Diff line change
Expand Up @@ -372,14 +372,14 @@ void handle_trains_interactions(s32 playerId, Player* player) {
if ((z_dist > -100.0) && (z_dist < 100.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) {
player->soundEffects |= REVERSE_SOUND_EFFECT;
player->triggers |= VERTICAL_TUMBLE_TRIGGER;
}
trainCar = &gTrainList[trainIndex].tender;
if (trainCar->isActive == 1) {
if (is_collide_with_vehicle(trainCar->position[0], trainCar->position[2],
trainCar->velocity[0], trainCar->velocity[2], 30.0f, 20.0f,
playerPosX, playerPosZ) == 1) {
player->soundEffects |= REVERSE_SOUND_EFFECT;
player->triggers |= VERTICAL_TUMBLE_TRIGGER;
}
}
}
Expand All @@ -395,7 +395,7 @@ void handle_trains_interactions(s32 playerId, Player* player) {
if (is_collide_with_vehicle(trainCar->position[0], trainCar->position[2],
trainCar->velocity[0], trainCar->velocity[2], 30.0f, 20.0f,
playerPosX, playerPosZ) == 1) {
player->soundEffects |= REVERSE_SOUND_EFFECT;
player->triggers |= VERTICAL_TUMBLE_TRIGGER;
}
}
}
Expand Down Expand Up @@ -621,7 +621,7 @@ void handle_paddle_boats_interactions(Player* player) {
tempPaddleWheelBoat->velocity[0], tempPaddleWheelBoat->velocity[2],
200.0f, 60.0f, playerX, playerZ) == 1) &&
(y_diff < 60.0)) {
player->soundEffects |= 0x80000;
player->triggers |= HIT_PADDLE_BOAT_TRIGGER;
}
}
}
Expand Down Expand Up @@ -805,7 +805,7 @@ void handle_vehicle_interactions(s32 playerId, Player* player, VehicleStuff* veh
if (is_collide_with_vehicle(vehicle->position[0], vehicle->position[2], vehicle->velocity[0],
vehicle->velocity[2], distanceX, distanceY, playerX,
playerZ) == (s32) 1) {
player->soundEffects |= REVERSE_SOUND_EFFECT;
player->triggers |= VERTICAL_TUMBLE_TRIGGER;
}
}
}
Expand Down
Loading
Loading