From c1c2d95716ae219fd5683c26cf291db990986bc5 Mon Sep 17 00:00:00 2001 From: Jed Grabman Date: Sun, 6 Jul 2025 17:03:08 -0400 Subject: [PATCH] UNK_0B6 (effect graphics) documentation --- include/defines.h | 11 ++++++++--- src/code_80057C60.c | 24 ++++++++++++------------ src/effects.c | 12 ++++++------ src/player_controller.c | 6 +++--- 4 files changed, 29 insertions(+), 24 deletions(-) diff --git a/include/defines.h b/include/defines.h index 767c0dd7e..7850695ff 100644 --- a/include/defines.h +++ b/include/defines.h @@ -329,6 +329,14 @@ enum PLACE { FIRST_PLACE, SECOND_PLACE, THIRD_PLACE, FOURTH_PLACE }; #define MAX_TIME 0x927C0 #define DEGREES_CONVERSION_FACTOR 182 +#define UNK_0B6_WHISTLE 0x20 // Whistle spinout save graphic +#define UNK_0B6_CRASH 0x40 //Crash! graphic (vertical tumble) +#define UNK_0B6_WHIRRR 0x80 //Whirrr! graphic (spinning out) +#define UNK_0B6_POOMP 0x100 //Poomp! graphic (landing from a height) +#define UNK_0B6_BOING 0x800 //Boing! graphic (hopping) +#define UNK_0B6_EXPLOSION 0x1000 //Big shock looking graphic when starting tumble + + #define UNK_0CA_LAKITU_RETRIEVAL 0x1 // While lakitu is grabbing you, but before the scene transition of being placed on the track #define UNK_0CA_HELD_BY_LAKITU 0x2 @@ -341,9 +349,6 @@ enum PLACE { FIRST_PLACE, SECOND_PLACE, THIRD_PLACE, FOURTH_PLACE }; #define UNK_0CA_LAKITU_LAVA 0x1000 // smoky effect when retrieved from lava #define UNK_0CA_LAKITU_WATER 0x2000 // dripping effect when retreived from water - - - #define UNK_044_BACK_UP 0x1 #define UNK_044_RIGHT_TURN 0x2 // non-drifting (more than 5 degrees) #define UNK_044_LEFT_TURN 0x4 // non-drifting (more than 5 degrees) diff --git a/src/code_80057C60.c b/src/code_80057C60.c index c27c345c7..d18b459af 100644 --- a/src/code_80057C60.c +++ b/src/code_80057C60.c @@ -4171,7 +4171,7 @@ void func_80062A18(Player* player, s8 arg1, UNUSED s8 arg2, s8 arg3) { player->particles[20 + arg1 /* arg1 instead of arg3 */].scale = 0.2f; player->particles[20 + arg3].timer = 1; player->particles[20 + arg3].rotation = 0; - player->unk_0B6 &= ~0x0080; + player->unk_0B6 &= ~UNK_0B6_WHIRRR; player->particles[20 + arg3].pos[2] = player->pos[2]; player->particles[20 + arg3].pos[0] = player->pos[0]; player->particles[20 + arg3].pos[1] = (player->pos[1] + 4.0f); @@ -4862,7 +4862,7 @@ void func_80064DEC(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { ++player->particles[20 + arg3].timer; if (player->particles[20 + arg3].timer == 9) { - player->unk_0B6 &= ~0x0040; + player->unk_0B6 &= ~UNK_0B6_CRASH; player->particles[20 + arg3].IsAlive = 0; player->particles[20 + arg3].timer = 0; player->particles[20 + arg3].type = 0; @@ -4884,7 +4884,7 @@ void func_80064EA4(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { } else { player->particles[20 + arg3].scale -= 1.8; if (player->particles[20 + arg3].scale <= 0.0f) { - player->unk_0B6 &= ~0x1000; + player->unk_0B6 &= ~UNK_0B6_EXPLOSION; player->particles[20 + arg3].IsAlive = 0; player->particles[20 + arg3].timer = 0; player->particles[20 + arg3].type = 0; @@ -4900,7 +4900,7 @@ void func_80064F88(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { player->particles[20 + arg3].scale = 1.2f; } if (player->particles[20 + arg3].timer >= 12) { - player->unk_0B6 &= ~0x0800; + player->unk_0B6 &= ~UNK_0B6_BOING; player->particles[20 + arg3].IsAlive = 0; player->particles[20 + arg3].timer = 0; player->particles[20 + arg3].type = 0; @@ -4917,7 +4917,7 @@ void func_80065030(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { } if (player->particles[20 + arg3].timer >= 12) { - player->unk_0B6 &= ~0x0100; + player->unk_0B6 &= ~UNK_0B6_POOMP; player->particles[20 + arg3].IsAlive = 0; player->particles[20 + arg3].timer = 0; player->particles[20 + arg3].type = 0; @@ -4957,7 +4957,7 @@ void func_800651F4(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { } else { player->particles[20 + arg3].scale -= 0.4; if (player->particles[20 + arg3].scale <= 0.0f) { - player->unk_0B6 &= ~0x0020; + player->unk_0B6 &= ~UNK_0B6_WHISTLE; player->particles[20 + arg3].IsAlive = 0; player->particles[20 + arg3].timer = 0; player->particles[20 + arg3].type = 0; @@ -6479,19 +6479,19 @@ void func_8006D194(Player* player, s8 playerIndex, s8 arg2) { break; } } else { - if ((player->unk_0B6 & 0x40) == 0x40) { + if ((player->unk_0B6 & UNK_0B6_CRASH) == UNK_0B6_CRASH) { func_800628C0(player, playerIndex, arg2, 0); } - if ((player->unk_0B6 & 0x800) == 0x800) { + if ((player->unk_0B6 & UNK_0B6_BOING) == UNK_0B6_BOING) { func_80062968(player, playerIndex, arg2, 0); } - if ((player->unk_0B6 & 0x1000) == 0x1000) { + if ((player->unk_0B6 & UNK_0B6_EXPLOSION) == UNK_0B6_EXPLOSION) { func_80062914(player, playerIndex, arg2, 0); } - if ((player->unk_0B6 & 0x80) == 0x80) { + if ((player->unk_0B6 & UNK_0B6_WHIRRR) == UNK_0B6_WHIRRR) { func_80062A18(player, playerIndex, arg2, 0); } - if ((player->unk_0B6 & 0x100) == 0x100) { + if ((player->unk_0B6 & UNK_0B6_POOMP) == UNK_0B6_POOMP) { func_800629BC(player, playerIndex, arg2, 0); } } @@ -6499,7 +6499,7 @@ void func_8006D194(Player* player, s8 playerIndex, s8 arg2) { if (player->particles[0x15].type == 5) { func_800651F4(player, playerIndex, arg2, 1); } - } else if ((player->unk_0B6 & 0x20) == 0x20) { + } else if ((player->unk_0B6 & UNK_0B6_WHISTLE) == UNK_0B6_WHISTLE) { func_80062AA8(player, playerIndex, arg2, 1); } } diff --git a/src/effects.c b/src/effects.c index 8b2986a9b..5e8091a67 100644 --- a/src/effects.c +++ b/src/effects.c @@ -137,7 +137,7 @@ void func_8008C310(Player* player) { // The << 9 is a hacky way to check for VERTICAL_TUMBLE_TRIGGER if ((player->triggers & HIGH_TUMBLE_TRIGGER) || (player->triggers & LOW_TUMBLE_TRIGGER) || ((player->triggers << 9) < 0) || (player->triggers & HIT_BY_STAR_TRIGGER)) { - player->unk_0B6 = ((u16) player->unk_0B6 | 0x1000); + player->unk_0B6 = ((u16) player->unk_0B6 | UNK_0B6_EXPLOSION); } } @@ -269,7 +269,7 @@ void func_8008C73C(Player* player, s8 playerIndex) { player->effects |= BANANA_SPINOUT_EFFECT; } - player->unk_0B6 |= 0x80; + player->unk_0B6 |= UNK_0B6_WHIRRR; // clang-format off player->unk_0C0 = 0; player->unk_07C = 0; player->unk_078 = 0; player->unk_0AE = player->rotation[1]; player->unk_0B2 = 2; // clang-format on @@ -414,7 +414,7 @@ void func_8008CEB0(Player* player, s8 playerIndex) { func_8008C73C(player, playerIndex); var_v1 = 0; } else { - player->unk_0B6 |= 0x20; + player->unk_0B6 |= UNK_0B6_WHISTLE; player->effects &= ~BANANA_SPINOUT_SAVE_EFFECT; if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) { func_800C90F4(playerIndex, (player->characterId * 0x10) + 0x29008008); @@ -479,7 +479,7 @@ void func_8008D170(Player* player, s8 playerIndex) { func_8008C73C(player, playerIndex); var_v1 = 0; } else { - player->unk_0B6 |= 0x20; + player->unk_0B6 |= UNK_0B6_WHISTLE; player->effects &= ~BANANA_SPINOUT_SAVE_EFFECT; if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) { func_800C90F4(playerIndex, (player->characterId * 0x10) + 0x29008008); @@ -1031,7 +1031,7 @@ void trigger_vertical_tumble(Player* player, s8 playerIndex) { } player->triggers &= ~(VERTICAL_TUMBLE_TRIGGER | HIT_PADDLE_BOAT_TRIGGER); - player->unk_0B6 |= 0x40; + player->unk_0B6 |= UNK_0B6_CRASH; gTimerBoostTripleACombo[playerIndex] = 0; gIsPlayerTripleAButtonCombo[playerIndex] = false; gCountASwitch[playerIndex] = 0; @@ -1131,7 +1131,7 @@ void trigger_high_tumble(Player* player, s8 playerIndex) { } player->effects |= HIT_BY_STAR_EFFECT; - player->unk_0B6 |= 0x40; + player->unk_0B6 |= UNK_0B6_CRASH; player->triggers &= ~(HIT_BY_STAR_TRIGGER | HIGH_TUMBLE_TRIGGER); gTimerBoostTripleACombo[playerIndex] = 0; diff --git a/src/player_controller.c b/src/player_controller.c index 3a3f1751f..07b18073d 100644 --- a/src/player_controller.c +++ b/src/player_controller.c @@ -2270,7 +2270,7 @@ void func_8002D268(Player* player, UNUSED Camera* camera, s8 screenId, s8 player } player->unk_DB4.unkC = 3.0f; player->unk_DB4.unk18 = 0; - player->unk_0B6 |= 0x100; + player->unk_0B6 |= UNK_0B6_POOMP; if ((((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && ((player->effects & BOOST_RAMP_ASPHALT_EFFECT) == BOOST_RAMP_ASPHALT_EFFECT)) && ((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB)) { @@ -2541,7 +2541,7 @@ void func_8002E594(Player* player, UNUSED Camera* camera, s8 screenId, s8 player player->unk_0C2 = 0x0032; } player->unk_DB4.unk18 = 0; - player->unk_0B6 |= 0x100; + player->unk_0B6 |= UNK_0B6_POOMP; player->unk_DB4.unkC = 3.0f; if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && ((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB)) { @@ -4258,7 +4258,7 @@ void func_80036C5C(Player* player) { if (((player->speed / 18.0f) * 216.0f) > 20.0f) { player->unk_204 = 0; player->effects |= DRIFTING_EFFECT; - player->unk_0B6 |= 0x800; + player->unk_0B6 |= UNK_0B6_BOING; } }