diff --git a/data/other_textures.h b/data/other_textures.h index 6a258fc89..5e8d4d9d7 100644 --- a/data/other_textures.h +++ b/data/other_textures.h @@ -355,14 +355,14 @@ extern u8 gTextureKartShadow[]; extern u8 gTexture69B03C[]; extern u8 gTexture69B140[]; extern u8 gTexture69B378[]; -extern u8 gTexture69B960[]; -extern u8 gTexture69BA28[]; +extern u8 gTextureMusicNote[]; +extern u8 gTextureSpeechBubble[]; extern u8 gTextureBoingExclamation[]; extern u8 gTexture69BE6C[]; extern u8 gTexture69BF54[]; extern u8 gTexture69C090[]; extern u8 gTexture69C1E8[]; -extern u8 gTexture69C354[]; +extern u8 gTextureSmokePuff[]; extern u8 gTexture69C4E4[]; extern u8 gTexture69C80C[]; extern u8 gTexture69C9C4[]; diff --git a/data/other_textures.s b/data/other_textures.s index 93f4fa0ee..233a44b1a 100644 --- a/data/other_textures.s +++ b/data/other_textures.s @@ -1424,11 +1424,11 @@ glabel gTexture69B378 .incbin "textures/standalone/texture_69B378.rgba16.mio0" .balign 4, 0x00 -glabel gTexture69B960 +glabel gTextureMusicNote .incbin "textures/standalone/texture_69B960.i8.mio0" .balign 4, 0x00 -glabel gTexture69BA28 +glabel gTextureSpeechBubble .incbin "textures/standalone/texture_69BA28.i8.mio0" .balign 4, 0x00 @@ -1452,7 +1452,7 @@ glabel gTexture69C1E8 .incbin "textures/standalone/texture_69C1E8.ia16.mio0" .balign 4, 0x00 -glabel gTexture69C354 +glabel gTextureSmokePuff .incbin "textures/standalone/texture_69C354.ia8.mio0" .balign 4, 0x00 diff --git a/include/common_structs.h b/include/common_structs.h index d73292ffa..2aa790857 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -145,15 +145,15 @@ typedef struct { } Collision; typedef struct { - /* 0x00 */ Vec3f unk_000; - /* 0x0C */ f32 unk_00C; + /* 0x00 */ Vec3f pos; + /* 0x0C */ f32 scale; /* 0x10 */ u16 unk_010; - /* 0x12 */ u16 unk_012; + /* 0x12 */ u16 type; /* 0x14 */ f32 unk_014; /* 0x18 */ f32 unk_018; - /* 0x1C */ s16 unk_01C; - /* 0x1E */ s16 unk_01E; - /* 0x20 */ s16 unk_020; + /* 0x1C */ s16 IsAlive; + /* 0x1E */ s16 timer; + /* 0x20 */ s16 rotation; /* 0x22 */ s16 unk_022; /* 0x24 */ f32 unk_024; /* 0x28 */ f32 unk_028; @@ -163,15 +163,15 @@ typedef struct { /* 0x32 */ s16 unk_032; /* 0x34 */ s16 unk_034; /* 0x36 */ s16 unk_036; - /* 0x38 */ s16 unk_038; - /* 0x3A */ s16 unk_03A; - /* 0x3C */ s16 unk_03C; - /* 0x3E */ s16 unk_03E; + /* 0x38 */ s16 red; + /* 0x3A */ s16 green; + /* 0x3C */ s16 blue; + /* 0x3E */ s16 alpha; /* 0x40 */ s16 unk_040; /* 0x42 */ s16 unk_042; /* 0x44 */ s16 unk_044; /* 0x46 */ s16 unk_046; -} UnkPlayerStruct258; // size = 0x48 +} Particle; // size = 0x48 // This struct is almost identical to the GBI Vtx_t type, // except that its missing the "flag" member. @@ -340,7 +340,7 @@ typedef struct { /* 0x0222 */ s16 unk_222; /* 0x0224 */ f32 size; /* 0x0228 */ s16 unk_228; - /* 0x022A */ s16 unk_22A; + /* 0x022A */ s16 driftState; /* 0x022C */ f32 previousSpeed; /* 0x0230 */ f32 unk_230; /* 0x0234 */ s16 unk_234; @@ -353,7 +353,7 @@ typedef struct { /* 0x024C */ u16 animGroupSelector[4]; /* 0x0254 */ u16 characterId; /* 0x0256 */ u16 unk_256; - /* 0x0258 */ UnkPlayerStruct258 unk_258[40]; + /* 0x0258 */ Particle particles[40]; /* 0x0D98 */ s16 unk_D98; /* 0x0D9A */ s16 unk_D9A; /* 0x0D9C */ f32 unk_D9C; diff --git a/src/code_80057C60.c b/src/code_80057C60.c index 88d7d76fa..6acdb0a28 100644 --- a/src/code_80057C60.c +++ b/src/code_80057C60.c @@ -2749,9 +2749,9 @@ void func_8005D290(void) { D_8018D420 = dma_textures(gTexture69B03C, 0x100, 0x100); D_8018D424 = dma_textures(gTexture69B140, 0x400, 0x400); D_8018D478 = dma_textures(gTexture69C1E8, 0x200, 0x200); - D_8018D480 = dma_textures(gTexture69BA28, 0x400, 0x400); - D_8018D484 = dma_textures(gTexture69B960, 0x400, 0x400); - D_8018D48C = dma_textures(gTexture69C354, 0x400, 0x400); + D_8018D480 = dma_textures(gTextureSpeechBubble, 0x400, 0x400); + D_8018D484 = dma_textures(gTextureMusicNote, 0x400, 0x400); + D_8018D48C = dma_textures(gTextureSmokePuff, 0x400, 0x400); D_8018D494 = dma_textures(gTexture69C4E4, 0x400, 0x400); D_8018D490 = D_8018D48C; D_8018D498 = dma_textures(gTexture69B378, 0x1000, 0x1000); @@ -2788,335 +2788,335 @@ void func_8005D6C0(Player* player) { s32 temp_v0; for (temp_v0 = 0; temp_v0 < 10; ++temp_v0) { - player->unk_258[temp_v0].unk_01C = 0; - player->unk_258[temp_v0].unk_01E = 0; - player->unk_258[temp_v0].unk_012 = 0; + player->particles[temp_v0].IsAlive = 0; + player->particles[temp_v0].timer = 0; + player->particles[temp_v0].type = 0; } for (temp_v0 = 0; temp_v0 < 10; ++temp_v0) { - player->unk_258[30 + temp_v0].unk_01C = 0; - player->unk_258[30 + temp_v0].unk_01E = 0; - player->unk_258[30 + temp_v0].unk_012 = 0; + player->particles[30 + temp_v0].IsAlive = 0; + player->particles[30 + temp_v0].timer = 0; + player->particles[30 + temp_v0].type = 0; } for (temp_v0 = 0; temp_v0 < 10; ++temp_v0) { - player->unk_258[10 + temp_v0].unk_01C = 0; - player->unk_258[10 + temp_v0].unk_01E = 0; - player->unk_258[10 + temp_v0].unk_012 = 0; + player->particles[10 + temp_v0].IsAlive = 0; + player->particles[10 + temp_v0].timer = 0; + player->particles[10 + temp_v0].type = 0; } for (temp_v0 = 0; temp_v0 < 10; ++temp_v0) { - player->unk_258[20 + temp_v0].unk_01C = 0; - player->unk_258[20 + temp_v0].unk_01E = 0; - player->unk_258[20 + temp_v0].unk_012 = 0; + player->particles[20 + temp_v0].IsAlive = 0; + player->particles[20 + temp_v0].timer = 0; + player->particles[20 + temp_v0].type = 0; } } -void func_8005D794(Player* player, UnkPlayerStruct258* arg1, f32 arg2, f32 arg3, f32 arg4, s8 surfaceType, s8 arg6) { - arg1->unk_000[2] = arg4; - arg1->unk_000[0] = arg2; - arg1->unk_000[1] = arg3; - arg1->unk_020 = -player->rotation[1]; - arg1->unk_014 = surfaceType; - arg1->unk_010 = arg6; +void set_particle_position_and_rotation(Player* player, Particle* particle, f32 x, f32 y, f32 z, s8 surfaceType, s8 arg6) { + particle->pos[2] = z; + particle->pos[0] = x; + particle->pos[1] = y; + particle->rotation = -player->rotation[1]; + particle->unk_014 = surfaceType; + particle->unk_010 = arg6; } -s32 func_8005D7D8(UnkPlayerStruct258* arg0, s8 arg1, f32 arg2) { - arg0->unk_01C = 1; - arg0->unk_012 = arg1; - arg0->unk_01E = 0; - arg0->unk_00C = arg2; +s32 init_new_particle_player(Particle* particle, s8 arg1, f32 scale) { + particle->IsAlive = 1; + particle->type = arg1; + particle->timer = 0; + particle->scale = scale; } -s32 func_8005D800(UnkPlayerStruct258* arg0, s32 arg1, s16 arg2) { - arg0->unk_038 = (u8) (arg1 >> 16); - arg0->unk_03A = (u8) (arg1 >> 8); - arg0->unk_03C = (u8) arg1; - arg0->unk_03E = arg2; +s32 set_particle_colour(Particle* particle, s32 arg1, s16 arg2) { + particle->red = (u8) (arg1 >> 16); + particle->green = (u8) (arg1 >> 8); + particle->blue = (u8) arg1; + particle->alpha = arg2; } -s32 func_8005D82C(UnkPlayerStruct258* arg0, s32 arg1, s16 arg2) { - s32 temp_v0; - temp_v0 = random_int(0x30); +s32 set_particle_colour_randomly_varried(Particle* particle, s32 arg1, s16 arg2) { + s32 color_variance; + color_variance = random_int(0x30); - arg0->unk_038 = (u8) ((u8) (arg1 >> 0x10) - temp_v0); - arg0->unk_03A = (u8) ((u8) (arg1 >> 8) - temp_v0); - arg0->unk_03C = (u8) ((u8) arg1 - temp_v0); - arg0->unk_03E = arg2; + particle->red = (u8) ((u8) (arg1 >> 0x10) - color_variance); + particle->green = (u8) ((u8) (arg1 >> 8) - color_variance); + particle->blue = (u8) ((u8) arg1 - color_variance); + particle->alpha = arg2; } -void func_8005D898(Player* player, s16 arg1, UNUSED s32 arg2, UNUSED s8 arg3, UNUSED s8 arg4) { +void set_drift_particles(Player* player, s16 arg1, UNUSED s32 arg2, UNUSED s8 arg3, UNUSED s8 arg4) { s32 temp_lo; if (player->unk_0C0 >= 0) { - func_8005D794(player, &player->unk_258[10 + arg1], player->tyres[BACK_LEFT].pos[0], + set_particle_position_and_rotation(player, &player->particles[10 + arg1], player->tyres[BACK_LEFT].pos[0], player->tyres[BACK_LEFT].baseHeight + 2.0f, player->tyres[BACK_LEFT].pos[2], player->tyres[BACK_LEFT].surfaceType, 1); } else { - func_8005D794(player, &player->unk_258[10 + arg1], player->tyres[BACK_RIGHT].pos[0], + set_particle_position_and_rotation(player, &player->particles[10 + arg1], player->tyres[BACK_RIGHT].pos[0], player->tyres[BACK_RIGHT].baseHeight + 2.0f, player->tyres[BACK_RIGHT].pos[2], player->tyres[BACK_RIGHT].surfaceType, 0); } temp_lo = player->unk_0C0 / 182; if ((temp_lo >= 7) || (temp_lo < -6)) { - func_8005D7D8(&player->unk_258[10 + arg1], 1, 0.35f); - if (player->unk_22A == 0) { - func_8005D800(&player->unk_258[10 + arg1], 0xFFFFFF, 0x70); + init_new_particle_player(&player->particles[10 + arg1], 1, 0.35f); + if (player->driftState == 0) { + set_particle_colour(&player->particles[10 + arg1], 0xFFFFFF, 0x70); } - if (player->unk_22A == 1) { - func_8005D800(&player->unk_258[10 + arg1], 0xFFFF00, 0x70); + if (player->driftState == 1) { + set_particle_colour(&player->particles[10 + arg1], 0xFFFF00, 0x70); } - if (player->unk_22A >= 2) { - func_8005D800(&player->unk_258[10 + arg1], 0xFF9600, 0x70); + if (player->driftState >= 2) { + set_particle_colour(&player->particles[10 + arg1], 0xFF9600, 0x70); } - if (player->unk_22A >= 2) { + if (player->driftState >= 2) { // Why not put this in previous if statement? - player->unk_258[10 + arg1].unk_040 = 2; + player->particles[10 + arg1].unk_040 = 2; return; } - player->unk_258[10 + arg1].unk_040 = player->unk_22A; + player->particles[10 + arg1].unk_040 = player->driftState; } } -void func_8005DA30(Player* player, s16 arg1, s32 arg2, s8 arg3, s8 arg4) { - if ((arg1 == 0) && ((player->unk_258[10 + arg2].unk_01E >= 3) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D898(player, arg1, arg2, arg3, arg4); - } else if (player->unk_258[10 + arg2].unk_01E >= 3) { - func_8005D898(player, arg1, arg2, arg3, arg4); +void check_drift_particles_setup_valid(Player* player, s16 arg1, s32 arg2, s8 arg3, s8 arg4) { + if ((arg1 == 0) && ((player->particles[10 + arg2].timer >= 3) || (player->particles[10 + arg2].IsAlive == 0))) { + set_drift_particles(player, arg1, arg2, arg3, arg4); + } else if (player->particles[10 + arg2].timer >= 3) { + set_drift_particles(player, arg1, arg2, arg3, arg4); } } UNUSED void func_8005DAD0(void) { } -void func_8005DAD8(UnkPlayerStruct258* arg0, s16 arg1, s16 arg2, s16 arg3) { - arg0->unk_038 = arg1; - arg0->unk_03E = arg3; - arg0->unk_040 = arg2; +void func_8005DAD8(Particle* particle, s16 arg1, s16 arg2, s16 arg3) { + particle->red = arg1; + particle->alpha = arg3; + particle->unk_040 = arg2; } -void func_8005DAF4(Player* player, s16 arg1, s32 arg2, UNUSED s8 arg3, UNUSED s8 arg4) { +void setup_tyre_particles(Player* player, s16 arg1, s32 arg2, UNUSED s8 arg3, UNUSED s8 arg4) { UNUSED s32 stackPadding; s32 surfaceType; s32 var_t3; - f32 var_f2; - f32 var_f12; - f32 var_f14; + f32 tyre_x; + f32 tyre_y; + f32 tyre_z; s32 temp_v0; static s32 test = 8; surfaceType = 0x000000FF; temp_v0 = random_int(test); if ((temp_v0 == 0) || (temp_v0 == 4)) { - var_f2 = player->tyres[BACK_LEFT].pos[0]; - var_f12 = player->tyres[BACK_LEFT].baseHeight + 2.0f; - var_f14 = player->tyres[BACK_LEFT].pos[2]; + tyre_x = player->tyres[BACK_LEFT].pos[0]; + tyre_y = player->tyres[BACK_LEFT].baseHeight + 2.0f; + tyre_z = player->tyres[BACK_LEFT].pos[2]; var_t3 = 1; surfaceType = player->tyres[BACK_LEFT].surfaceType; } if ((temp_v0 == 2) || (temp_v0 == 6)) { - var_f2 = player->tyres[BACK_RIGHT].pos[0]; - var_f12 = player->tyres[BACK_RIGHT].baseHeight + 2.0f; - var_f14 = player->tyres[BACK_RIGHT].pos[2]; + tyre_x = player->tyres[BACK_RIGHT].pos[0]; + tyre_y = player->tyres[BACK_RIGHT].baseHeight + 2.0f; + tyre_z = player->tyres[BACK_RIGHT].pos[2]; var_t3 = 0; surfaceType = player->tyres[BACK_RIGHT].surfaceType; } switch (surfaceType) { case DIRT: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { if (((player->speed / 18.0f) * 216.0f) >= 10.0f) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 2, 0.46f); + init_new_particle_player(&player->particles[10 + arg1], 2, 0.46f); if ((gCurrentCourseId == COURSE_CHOCO_MOUNTAIN) || (gCurrentCourseId == COURSE_ROYAL_RACEWAY)) { - func_8005DAD8(&player->unk_258[10 + arg1], 1, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 1, 0, 0x0080); } if (gCurrentCourseId == COURSE_KALAMARI_DESERT) { - func_8005DAD8(&player->unk_258[10 + arg1], 7, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 7, 0, 0x0080); } if (gCurrentCourseId == COURSE_MOO_MOO_FARM) { - func_8005DAD8(&player->unk_258[10 + arg1], 8, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 8, 0, 0x0080); } if (gCurrentCourseId == COURSE_WARIO_STADIUM) { - func_8005DAD8(&player->unk_258[10 + arg1], 9, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 9, 0, 0x0080); } if (gCurrentCourseId == COURSE_YOSHI_VALLEY) { - func_8005DAD8(&player->unk_258[10 + arg1], 10, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 10, 0, 0x0080); } if (gCurrentCourseId == COURSE_DK_JUNGLE) { - func_8005DAD8(&player->unk_258[10 + arg1], 11, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 11, 0, 0x0080); } - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + player->particles[10 + arg1].green = random_int(0x0010U); } - } else if ((player->unk_258[10 + arg2].unk_01E > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + } else if ((player->particles[10 + arg2].timer > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 2, 0.46f); + init_new_particle_player(&player->particles[10 + arg1], 2, 0.46f); if ((gCurrentCourseId == COURSE_CHOCO_MOUNTAIN) || (gCurrentCourseId == COURSE_ROYAL_RACEWAY)) { - func_8005DAD8(&player->unk_258[10 + arg1], 1, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 1, 0, 0x0080); } if (gCurrentCourseId == COURSE_KALAMARI_DESERT) { - func_8005DAD8(&player->unk_258[10 + arg1], 7, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 7, 0, 0x0080); } if (gCurrentCourseId == COURSE_MOO_MOO_FARM) { - func_8005DAD8(&player->unk_258[10 + arg1], 8, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 8, 0, 0x0080); } if (gCurrentCourseId == COURSE_WARIO_STADIUM) { - func_8005DAD8(&player->unk_258[10 + arg1], 9, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 9, 0, 0x0080); } if (gCurrentCourseId == COURSE_YOSHI_VALLEY) { - func_8005DAD8(&player->unk_258[10 + arg1], 10, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 10, 0, 0x0080); } if (gCurrentCourseId == COURSE_DK_JUNGLE) { - func_8005DAD8(&player->unk_258[10 + arg1], 11, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 11, 0, 0x0080); } - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case GRASS: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { if (((player->speed / 18.0f) * 216.0f) >= 10.0f) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 3, 1.0f); - func_8005D800(&player->unk_258[10 + arg1], 0x00FFFFFF, 0x00FF); - player->unk_258[10 + arg1].unk_038 -= arg1 * 8; - player->unk_258[10 + arg1].unk_03A -= arg1 * 8; - player->unk_258[10 + arg1].unk_03C -= arg1 * 8; + init_new_particle_player(&player->particles[10 + arg1], 3, 1.0f); + set_particle_colour(&player->particles[10 + arg1], 0x00FFFFFF, 0x00FF); + player->particles[10 + arg1].red -= arg1 * 8; + player->particles[10 + arg1].green -= arg1 * 8; + player->particles[10 + arg1].blue -= arg1 * 8; } - } else if ((player->unk_258[10 + arg2].unk_01E > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + } else if ((player->particles[10 + arg2].timer > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 3, 1.0f); - func_8005D800(&player->unk_258[10 + arg1], 0x00FFFFFF, 0x00FF); - player->unk_258[10 + arg1].unk_038 -= arg1 * 8; - player->unk_258[10 + arg1].unk_03A -= arg1 * 8; - player->unk_258[10 + arg1].unk_03C -= arg1 * 8; + init_new_particle_player(&player->particles[10 + arg1], 3, 1.0f); + set_particle_colour(&player->particles[10 + arg1], 0x00FFFFFF, 0x00FF); + player->particles[10 + arg1].red -= arg1 * 8; + player->particles[10 + arg1].green -= arg1 * 8; + player->particles[10 + arg1].blue -= arg1 * 8; } - player->unk_258[10 + arg1].unk_000[1] -= 1.5; + player->particles[10 + arg1].pos[1] -= 1.5; break; case SAND_OFFROAD: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { if (((player->speed / 18.0f) * 216.0f) >= 10.0f) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 2, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 2, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 2, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 2, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } - } else if ((player->unk_258[10 + arg2].unk_01E > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + } else if ((player->particles[10 + arg2].timer > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 2, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 2, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 2, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 2, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case SAND: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { if (((player->speed / 18.0f) * 216.0f) >= 10.0f) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 2, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 3, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 2, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 3, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } - } else if ((player->unk_258[10 + arg2].unk_01E > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + } else if ((player->particles[10 + arg2].timer > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 2, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 3, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 2, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 3, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case WET_SAND: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { if (((player->speed / 18.0f) * 216.0f) >= 10.0f) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 2, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 4, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 2, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 4, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } - } else if ((player->unk_258[10 + arg2].unk_01E > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + } else if ((player->particles[10 + arg2].timer > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 2, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 4, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 2, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 4, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case DIRT_OFFROAD: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { if (((player->speed / 18.0f) * 216.0f) >= 10.0f) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 2, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 5, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 2, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 5, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } - } else if ((player->unk_258[10 + arg2].unk_01E > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + } else if ((player->particles[10 + arg2].timer > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 2, 0.46f); - func_8005D82C(&player->unk_258[10 + arg1], 0x00FFA54F, 0x00AF); - func_8005DAD8(&player->unk_258[10 + arg1], 5, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 2, 0.46f); + set_particle_colour_randomly_varried(&player->particles[10 + arg1], 0x00FFA54F, 0x00AF); + func_8005DAD8(&player->particles[10 + arg1], 5, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case SNOW: case SNOW_OFFROAD: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { if (((player->speed / 18.0f) * 216.0f) >= 10.0f) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 2, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 6, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 2, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 6, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } - } else if ((player->unk_258[10 + arg2].unk_01E > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + } else if ((player->particles[10 + arg2].timer > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 2, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 6, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 2, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 6, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case ASPHALT: case STONE: case BRIDGE: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { if (((((player->speed / 18.0f) * 216.0f) >= 30.0f) && ((((player->unk_0C0 / 182) > 0x14) || ((player->unk_0C0 / 182) < (-0x14))))) || ((player->previousSpeed - player->speed) >= 0.04)) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 2, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 0, 0, 0x0080); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 2, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 0, 0, 0x0080); + player->particles[10 + arg1].green = random_int(0x0010U); } - } else if ((player->unk_258[10 + arg2].unk_01E > 0) && + } else if ((player->particles[10 + arg2].timer > 0) && (((((player->speed / 18.0f) * 216.0f) >= 30.0f) && (((player->unk_0C0 / 182) >= 0x15) || ((player->unk_0C0 / 182) < -0x14))) || ((player->previousSpeed - player->speed) >= 0.04))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, (s8) surfaceType, + set_particle_position_and_rotation(player, &player->particles[10 + arg1], tyre_x, tyre_y, tyre_z, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 2, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 0, 0, 0x0080); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 2, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 0, 0, 0x0080); + player->particles[10 + arg1].green = random_int(0x0010U); } break; default: @@ -3155,16 +3155,16 @@ void func_8005EA94(Player* player, s16 arg1, s32 arg2, s8 arg3, UNUSED s8 arg4) } if (1) {} if (var_t0 == 0) { - if ((arg1 == 0) && ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { + if ((arg1 == 0) && ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { if (((player->speed / 18.0f) * 216.0f) >= 10.0f) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, var_t0, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 9, 0.8f); - func_8005D800(&player->unk_258[10 + arg1], 0x00FFFFFF, 0x00AF); + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f2, var_f12, var_f14, var_t0, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 9, 0.8f); + set_particle_colour(&player->particles[10 + arg1], 0x00FFFFFF, 0x00AF); } - } else if ((player->unk_258[10 + arg2].unk_01E > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f2, var_f12, var_f14, var_t0, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 9, 0.8f); - func_8005D800(&player->unk_258[10 + arg1], 0x00FFFFFF, 0x00AF); + } else if ((player->particles[10 + arg2].timer > 0) && (((player->speed / 18.0f) * 216.0f) >= 10.0f)) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f2, var_f12, var_f14, var_t0, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 9, 0.8f); + set_particle_colour(&player->particles[10 + arg1], 0x00FFFFFF, 0x00AF); } } } @@ -3197,170 +3197,170 @@ void func_8005ED48(Player* player, s16 arg1, s32 arg2, UNUSED s8 arg3, UNUSED s8 switch (surfaceType) { case DIRT: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.46f); + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t3); + init_new_particle_player(&player->particles[10 + arg1], 5, 0.46f); if ((gCurrentCourseId == COURSE_CHOCO_MOUNTAIN) || (gCurrentCourseId == COURSE_ROYAL_RACEWAY)) { - func_8005DAD8(&player->unk_258[10 + arg1], 1, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 1, 0, 0x0080); } if (gCurrentCourseId == COURSE_KALAMARI_DESERT) { - func_8005DAD8(&player->unk_258[10 + arg1], 7, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 7, 0, 0x0080); } if (gCurrentCourseId == COURSE_MOO_MOO_FARM) { - func_8005DAD8(&player->unk_258[10 + arg1], 8, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 8, 0, 0x0080); } if (gCurrentCourseId == COURSE_WARIO_STADIUM) { - func_8005DAD8(&player->unk_258[10 + arg1], 9, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 9, 0, 0x0080); } if (gCurrentCourseId == COURSE_YOSHI_VALLEY) { - func_8005DAD8(&player->unk_258[10 + arg1], 10, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 10, 0, 0x0080); } if (gCurrentCourseId == COURSE_DK_JUNGLE) { - func_8005DAD8(&player->unk_258[10 + arg1], 11, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 11, 0, 0x0080); } - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.46f); + player->particles[10 + arg1].green = random_int(0x0010U); + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t3); + init_new_particle_player(&player->particles[10 + arg1], 5, 0.46f); if ((gCurrentCourseId == COURSE_CHOCO_MOUNTAIN) || (gCurrentCourseId == COURSE_ROYAL_RACEWAY)) { - func_8005DAD8(&player->unk_258[10 + arg1], 1, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 1, 0, 0x0080); } if (gCurrentCourseId == COURSE_KALAMARI_DESERT) { - func_8005DAD8(&player->unk_258[10 + arg1], 7, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 7, 0, 0x0080); } if (gCurrentCourseId == COURSE_MOO_MOO_FARM) { - func_8005DAD8(&player->unk_258[10 + arg1], 8, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 8, 0, 0x0080); } if (gCurrentCourseId == COURSE_WARIO_STADIUM) { - func_8005DAD8(&player->unk_258[10 + arg1], 9, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 9, 0, 0x0080); } if (gCurrentCourseId == COURSE_YOSHI_VALLEY) { - func_8005DAD8(&player->unk_258[10 + arg1], 0x000A, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 0x000A, 0, 0x0080); } if (gCurrentCourseId == COURSE_DK_JUNGLE) { - func_8005DAD8(&player->unk_258[10 + arg1], 0x000B, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 0x000B, 0, 0x0080); } - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case GRASS: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.1f); - func_8005D800(&player->unk_258[10 + arg1], 0x00FFFFFF, 0x00FF); - player->unk_258[10 + arg1].unk_038 -= arg1 * 8; - player->unk_258[10 + arg1].unk_03A -= arg1 * 8; - player->unk_258[10 + arg1].unk_03C -= arg1 * 8; - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, + init_new_particle_player(&player->particles[10 + arg1], 5, 0.1f); + set_particle_colour(&player->particles[10 + arg1], 0x00FFFFFF, 0x00FF); + player->particles[10 + arg1].red -= arg1 * 8; + player->particles[10 + arg1].green -= arg1 * 8; + player->particles[10 + arg1].blue -= arg1 * 8; + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.1f); - func_8005D800(&player->unk_258[10 + arg1], 0x00FFFFFF, 0x00FF); - player->unk_258[10 + arg1].unk_038 -= arg1 * 8; - player->unk_258[10 + arg1].unk_03A -= arg1 * 8; - player->unk_258[10 + arg1].unk_03C -= arg1 * 8; + init_new_particle_player(&player->particles[10 + arg1], 5, 0.1f); + set_particle_colour(&player->particles[10 + arg1], 0x00FFFFFF, 0x00FF); + player->particles[10 + arg1].red -= arg1 * 8; + player->particles[10 + arg1].green -= arg1 * 8; + player->particles[10 + arg1].blue -= arg1 * 8; } - player->unk_258[10 + arg1].unk_000[1] -= 1.5; + player->particles[10 + arg1].pos[1] -= 1.5; break; case SAND_OFFROAD: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 2, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, + init_new_particle_player(&player->particles[10 + arg1], 5, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 2, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 2, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 5, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 2, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case SAND: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 3, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, + init_new_particle_player(&player->particles[10 + arg1], 5, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 3, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 3, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 5, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 3, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case WET_SAND: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 4, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, + init_new_particle_player(&player->particles[10 + arg1], 5, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 4, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 4, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 5, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 4, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case DIRT_OFFROAD: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 5, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, + init_new_particle_player(&player->particles[10 + arg1], 5, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 5, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 5, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 5, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 5, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case SNOW: case SNOW_OFFROAD: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 6, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, + init_new_particle_player(&player->particles[10 + arg1], 5, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 6, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 6, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 5, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 6, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case ASPHALT: case STONE: case BRIDGE: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 0, 0, 0x0080); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, + init_new_particle_player(&player->particles[10 + arg1], 5, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 0, 0, 0x0080); + player->particles[10 + arg1].green = random_int(0x0010U); + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, (s8) surfaceType, (s8) var_t3); - func_8005D7D8(&player->unk_258[10 + arg1], 5, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 0, 0, 0x0080); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + init_new_particle_player(&player->particles[10 + arg1], 5, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 0, 0, 0x0080); + player->particles[10 + arg1].green = random_int(0x0010U); } break; default: @@ -3391,156 +3391,156 @@ void func_8005F90C(Player* player, s16 arg1, s32 arg2, UNUSED s8 arg3, UNUSED s8 switch (surfaceType) { case DIRT: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.46f); + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.46f); if ((gCurrentCourseId == COURSE_CHOCO_MOUNTAIN) || (gCurrentCourseId == COURSE_ROYAL_RACEWAY)) { - func_8005DAD8(&player->unk_258[10 + arg1], 1, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 1, 0, 0x0080); } if (gCurrentCourseId == COURSE_KALAMARI_DESERT) { - func_8005DAD8(&player->unk_258[10 + arg1], 7, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 7, 0, 0x0080); } if (gCurrentCourseId == COURSE_MOO_MOO_FARM) { - func_8005DAD8(&player->unk_258[10 + arg1], 8, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 8, 0, 0x0080); } if (gCurrentCourseId == COURSE_WARIO_STADIUM) { - func_8005DAD8(&player->unk_258[10 + arg1], 9, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 9, 0, 0x0080); } if (gCurrentCourseId == COURSE_YOSHI_VALLEY) { - func_8005DAD8(&player->unk_258[10 + arg1], 0x000A, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 0x000A, 0, 0x0080); } if (gCurrentCourseId == COURSE_DK_JUNGLE) { - func_8005DAD8(&player->unk_258[10 + arg1], 0x000B, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 0x000B, 0, 0x0080); } - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.46f); + player->particles[10 + arg1].green = random_int(0x0010U); + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.46f); if ((gCurrentCourseId == COURSE_CHOCO_MOUNTAIN) || (gCurrentCourseId == COURSE_ROYAL_RACEWAY)) { - func_8005DAD8(&player->unk_258[10 + arg1], 1, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 1, 0, 0x0080); } if (gCurrentCourseId == COURSE_KALAMARI_DESERT) { - func_8005DAD8(&player->unk_258[10 + arg1], 7, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 7, 0, 0x0080); } if (gCurrentCourseId == COURSE_MOO_MOO_FARM) { - func_8005DAD8(&player->unk_258[10 + arg1], 8, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 8, 0, 0x0080); } if (gCurrentCourseId == COURSE_WARIO_STADIUM) { - func_8005DAD8(&player->unk_258[10 + arg1], 9, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 9, 0, 0x0080); } if (gCurrentCourseId == COURSE_YOSHI_VALLEY) { - func_8005DAD8(&player->unk_258[10 + arg1], 0x000A, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 0x000A, 0, 0x0080); } if (gCurrentCourseId == COURSE_DK_JUNGLE) { - func_8005DAD8(&player->unk_258[10 + arg1], 0x000B, 0, 0x0080); + func_8005DAD8(&player->particles[10 + arg1], 0x000B, 0, 0x0080); } - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case GRASS: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.1f); - func_8005D800(&player->unk_258[10 + arg1], 0x00FFFFFF, 0x00FF); - player->unk_258[10 + arg1].unk_038 -= arg1 * 8; - player->unk_258[10 + arg1].unk_03A -= arg1 * 8; - player->unk_258[10 + arg1].unk_03C -= arg1 * 8; - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.1f); - func_8005D800(&player->unk_258[10 + arg1], 0x00FFFFFF, 0x00FF); - player->unk_258[10 + arg1].unk_038 -= arg1 * 8; - player->unk_258[10 + arg1].unk_03A -= arg1 * 8; - player->unk_258[10 + arg1].unk_03C -= arg1 * 8; + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.1f); + set_particle_colour(&player->particles[10 + arg1], 0x00FFFFFF, 0x00FF); + player->particles[10 + arg1].red -= arg1 * 8; + player->particles[10 + arg1].green -= arg1 * 8; + player->particles[10 + arg1].blue -= arg1 * 8; + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.1f); + set_particle_colour(&player->particles[10 + arg1], 0x00FFFFFF, 0x00FF); + player->particles[10 + arg1].red -= arg1 * 8; + player->particles[10 + arg1].green -= arg1 * 8; + player->particles[10 + arg1].blue -= arg1 * 8; } - player->unk_258[10 + arg1].unk_000[1] -= 1.5; + player->particles[10 + arg1].pos[1] -= 1.5; break; case SAND_OFFROAD: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 2, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 2, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 2, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 2, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case SAND: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 3, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 3, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 3, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 3, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case WET_SAND: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 4, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 4, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 4, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 4, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case DIRT_OFFROAD: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 5, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 5, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 5, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 5, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case SNOW: case SNOW_OFFROAD: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 6, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 6, 1, 0x00A8); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 6, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 6, 1, 0x00A8); + player->particles[10 + arg1].green = random_int(0x0010U); } break; case ASPHALT: case STONE: case BRIDGE: if ((arg1 == 0) && - ((player->unk_258[10 + arg2].unk_01E > 0) || (player->unk_258[10 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 0, 0, 0x0080); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); - } else if (player->unk_258[10 + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); - func_8005D7D8(&player->unk_258[10 + arg1], 4, 0.46f); - func_8005DAD8(&player->unk_258[10 + arg1], 0, 0, 0x0080); - player->unk_258[10 + arg1].unk_03A = random_int(0x0010U); + ((player->particles[10 + arg2].timer > 0) || (player->particles[10 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 0, 0, 0x0080); + player->particles[10 + arg1].green = random_int(0x0010U); + } else if (player->particles[10 + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[10 + arg1], var_f0, var_f2, var_f12, surfaceType, var_t1); + init_new_particle_player(&player->particles[10 + arg1], 4, 0.46f); + func_8005DAD8(&player->particles[10 + arg1], 0, 0, 0x0080); + player->particles[10 + arg1].green = random_int(0x0010U); } break; default: @@ -3567,53 +3567,53 @@ void func_80060504(Player* player, s16 arg1, s32 arg2, UNUSED s8 arg3, UNUSED s8 } temp_v0 = random_int(var_v0); if ((temp_v0 == 1) || (temp_v0 == 2) || (temp_v0 == 3)) { - if ((arg1 == 0) && ((player->unk_258[arg2].unk_01E > 0) || (player->unk_258[arg2].unk_01C == 0))) { + if ((arg1 == 0) && ((player->particles[arg2].timer > 0) || (player->particles[arg2].IsAlive == 0))) { sp4C = player->pos[1] - 2.5; sp48 = player->pos[2]; sp50 = player->pos[0]; - func_8005D794(player, &player->unk_258[arg1], sp50, sp4C, sp48, 0, 0); - func_8005D7D8(&player->unk_258[arg1], 1, 0.5f); - } else if (player->unk_258[arg2].unk_01E > 0) { + set_particle_position_and_rotation(player, &player->particles[arg1], sp50, sp4C, sp48, 0, 0); + init_new_particle_player(&player->particles[arg1], 1, 0.5f); + } else if (player->particles[arg2].timer > 0) { sp4C = player->pos[1] - 2.5; sp48 = player->pos[2]; sp50 = player->pos[0]; - func_8005D794(player, &player->unk_258[arg1], sp50, sp4C, sp48, 0, 0); - func_8005D7D8(&player->unk_258[arg1], 1, 0.5f); + set_particle_position_and_rotation(player, &player->particles[arg1], sp50, sp4C, sp48, 0, 0); + init_new_particle_player(&player->particles[arg1], 1, 0.5f); } } - player->unk_258[arg1].unk_024 = 0.0f; + player->particles[arg1].unk_024 = 0.0f; if ((player->unk_044 & 0x20) == 0x20) { - player->unk_258[arg1].unk_040 = 0; + player->particles[arg1].unk_040 = 0; if ((player->effects & BOOST_EFFECT) == BOOST_EFFECT) { - func_8005D800(&player->unk_258[arg1], 0x00FFFF00, 0x0080); - player->unk_258[arg1].unk_038 = 1; + set_particle_colour(&player->particles[arg1], 0x00FFFF00, 0x0080); + player->particles[arg1].red = 1; } else { - func_8005D800(&player->unk_258[arg1], 0x00FFFFFF, 0x0070); - player->unk_258[arg1].unk_038 = 0; + set_particle_colour(&player->particles[arg1], 0x00FFFFFF, 0x0070); + player->particles[arg1].red = 0; } } else { - player->unk_258[arg1].unk_040 = 1; + player->particles[arg1].unk_040 = 1; if ((player->effects & BOOST_EFFECT) == BOOST_EFFECT) { - func_8005D800(&player->unk_258[arg1], 0x00FFFF00, 0x0080); - player->unk_258[arg1].unk_038 = 1; + set_particle_colour(&player->particles[arg1], 0x00FFFF00, 0x0080); + player->particles[arg1].red = 1; } else { - func_8005D800(&player->unk_258[arg1], 0x00FFFFFF, 0x0070); - player->unk_258[arg1].unk_038 = 0; + set_particle_colour(&player->particles[arg1], 0x00FFFFFF, 0x0070); + player->particles[arg1].red = 0; } } - thing2 = (player->unk_258[arg1].unk_020 - (player->unk_0C0 / 2)); - if (player->unk_258[arg1].unk_040 == 0) { + thing2 = (player->particles[arg1].rotation - (player->unk_0C0 / 2)); + if (player->particles[arg1].unk_040 == 0) { var_f0 = -((player->unk_098 / 3000.0f) + 0.1); } else { var_f0 = -((player->unk_098 / 5000.0f) + 0.1); } - func_80062B18(&sp50, &sp4C, &sp48, 0.0f, 4.5f, (player->unk_258[arg1].unk_01E * var_f0) + -5.5, -thing2, + func_80062B18(&sp50, &sp4C, &sp48, 0.0f, 4.5f, (player->particles[arg1].timer * var_f0) + -5.5, -thing2, -player->unk_206 * 2); - player->unk_258[arg1].unk_000[0] = player->pos[0] + sp50; + player->particles[arg1].pos[0] = player->pos[0] + sp50; sp4C = sp4C + (player->pos[1] - player->boundingBoxSize); - player->unk_258[arg1].unk_000[2] = player->pos[2] + sp48; - player->unk_258[arg1].unk_000[1] = player->unk_258[arg1].unk_024 + sp4C; - player->unk_258[arg1].unk_010 = 0; + player->particles[arg1].pos[2] = player->pos[2] + sp48; + player->particles[arg1].pos[1] = player->particles[arg1].unk_024 + sp4C; + player->particles[arg1].unk_010 = 0; } void func_800608E0(Player* player, s16 arg1, UNUSED s32 arg2, s8 arg3, UNUSED s8 arg4) { @@ -3631,26 +3631,26 @@ void func_800608E0(Player* player, s16 arg1, UNUSED s32 arg2, s8 arg3, UNUSED s8 var_f0 = 2.5f; sp4C = (f32) ((f64) (D_801652A0[arg3] - player->pos[1]) + 0.1); } - func_8005D794(player, &player->unk_258[arg1], 0.0f, 0.0f, 0.0f, (s8) 0, (s8) 0); - func_8005D7D8(&player->unk_258[arg1], 3, var_f0); + set_particle_position_and_rotation(player, &player->particles[arg1], 0.0f, 0.0f, 0.0f, (s8) 0, (s8) 0); + init_new_particle_player(&player->particles[arg1], 3, var_f0); if ((gCurrentCourseId == COURSE_BOWSER_CASTLE) || (gCurrentCourseId == COURSE_BIG_DONUT)) { - func_8005D800(&player->unk_258[arg1], 0, 0x00AF); + set_particle_colour(&player->particles[arg1], 0, 0x00AF); } else { - func_8005D800(&player->unk_258[arg1], 0x00FFFFFF, 0x00CF); + set_particle_colour(&player->particles[arg1], 0x00FFFFFF, 0x00CF); } func_80062B18(&sp50, &sp4C, &sp48, 0.0f, sp4C, - ((-player->unk_258[arg1].unk_01E * (player->speed / 18.0f) * 216.0f) / 10.0f) + -4.0f, - -player->unk_258[arg1].unk_020, -player->unk_206 * 2); - player->unk_258[arg1].unk_000[0] = player->pos[0] + sp50; - player->unk_258[arg1].unk_000[2] = player->pos[2] + sp48; - player->unk_258[arg1].unk_000[1] = player->pos[1] + sp4C; + ((-player->particles[arg1].timer * (player->speed / 18.0f) * 216.0f) / 10.0f) + -4.0f, + -player->particles[arg1].rotation, -player->unk_206 * 2); + player->particles[arg1].pos[0] = player->pos[0] + sp50; + player->particles[arg1].pos[2] = player->pos[2] + sp48; + player->particles[arg1].pos[1] = player->pos[1] + sp4C; } void func_80060B14(Player* player, s16 arg1, s32 arg2, s8 arg3, s8 arg4) { if ((gCurrentCourseId != COURSE_SKYSCRAPER) && (gCurrentCourseId != COURSE_RAINBOW_ROAD)) { - if ((arg1 == 0) && ((player->unk_258[arg2].unk_01E > 0) || (player->unk_258[arg2].unk_01C == 0))) { + if ((arg1 == 0) && ((player->particles[arg2].timer > 0) || (player->particles[arg2].IsAlive == 0))) { func_800608E0(player, arg1, arg2, arg3, arg4); - } else if (player->unk_258[arg2].unk_01E > 0) { + } else if (player->particles[arg2].timer > 0) { func_800608E0(player, arg1, arg2, arg3, arg4); } } @@ -3676,70 +3676,70 @@ void func_80060BCC(Player* player, s16 arg1, s32 arg2, UNUSED s8 arg3, UNUSED s8 if (player != gPlayerOne) { return; } - if ((arg1 == 0) && ((player->unk_258[arg2 + 10].unk_01E > 0) || (player->unk_258[arg2 + 10].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[arg1 + 10], 0.0f, 0.0f, 0.0f, (s8) 0, (s8) 0); - func_8005D7D8(&player->unk_258[arg1 + 10], 0x0B, 0.4f); - func_8005D800(&player->unk_258[arg1 + 10], 0x00FFFFFF, 0x00FF); - player->unk_258[arg1 + 10].unk_000[2] = player->pos[2] + (coss(sp54 * 0xB6) * -1.8); - player->unk_258[arg1 + 10].unk_000[0] = player->pos[0] + (sins(sp54 * 0xB6) * -1.8); - player->unk_258[arg1 + 10].unk_000[1] = (player->pos[1] - player->boundingBoxSize) + sp4C + 2.0f; - player->unk_258[arg1 + 10].unk_018 = sp44 + 1.0f; - player->unk_258[arg1 + 10].unk_00C = (sp48 + 2.0f) / 10.0f; - } else if (player->unk_258[arg2 + 10].unk_01E > 0) { - func_8005D794(player, &player->unk_258[arg1 + 10], 0.0f, 0.0f, 0.0f, (s8) 0, (s8) 0); - func_8005D7D8(&player->unk_258[arg1 + 10], 0x0B, 0.4f); - func_8005D800(&player->unk_258[arg1 + 10], 0x00FFFFFF, 0x00FF); - player->unk_258[arg1 + 10].unk_000[2] = player->pos[2] + (coss(sp54 * 0xB6) * -1.8); - player->unk_258[arg1 + 10].unk_000[0] = player->pos[0] + (sins(sp54 * 0xB6) * -1.8); - player->unk_258[arg1 + 10].unk_000[1] = (player->pos[1] - player->boundingBoxSize) + sp4C + 2.0f; - player->unk_258[arg1 + 10].unk_018 = sp44 + 1.0f; - player->unk_258[arg1 + 10].unk_00C = (sp48 + 2.0f) / 10.0f; + if ((arg1 == 0) && ((player->particles[arg2 + 10].timer > 0) || (player->particles[arg2 + 10].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[arg1 + 10], 0.0f, 0.0f, 0.0f, (s8) 0, (s8) 0); + init_new_particle_player(&player->particles[arg1 + 10], 0x0B, 0.4f); + set_particle_colour(&player->particles[arg1 + 10], 0x00FFFFFF, 0x00FF); + player->particles[arg1 + 10].pos[2] = player->pos[2] + (coss(sp54 * 0xB6) * -1.8); + player->particles[arg1 + 10].pos[0] = player->pos[0] + (sins(sp54 * 0xB6) * -1.8); + player->particles[arg1 + 10].pos[1] = (player->pos[1] - player->boundingBoxSize) + sp4C + 2.0f; + player->particles[arg1 + 10].unk_018 = sp44 + 1.0f; + player->particles[arg1 + 10].scale = (sp48 + 2.0f) / 10.0f; + } else if (player->particles[arg2 + 10].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[arg1 + 10], 0.0f, 0.0f, 0.0f, (s8) 0, (s8) 0); + init_new_particle_player(&player->particles[arg1 + 10], 0x0B, 0.4f); + set_particle_colour(&player->particles[arg1 + 10], 0x00FFFFFF, 0x00FF); + player->particles[arg1 + 10].pos[2] = player->pos[2] + (coss(sp54 * 0xB6) * -1.8); + player->particles[arg1 + 10].pos[0] = player->pos[0] + (sins(sp54 * 0xB6) * -1.8); + player->particles[arg1 + 10].pos[1] = (player->pos[1] - player->boundingBoxSize) + sp4C + 2.0f; + player->particles[arg1 + 10].unk_018 = sp44 + 1.0f; + player->particles[arg1 + 10].scale = (sp48 + 2.0f) / 10.0f; } } void func_80060F50(Player* player, s16 arg1, UNUSED s32 arg2, s8 arg3, UNUSED s8 arg4) { - func_8005D794(player, &player->unk_258[arg1], 0.0f, 0.0f, 0.0f, 0, 0); - func_8005D7D8(&player->unk_258[arg1], 5, 4.0f); + set_particle_position_and_rotation(player, &player->particles[arg1], 0.0f, 0.0f, 0.0f, 0, 0); + init_new_particle_player(&player->particles[arg1], 5, 4.0f); if ((gCurrentCourseId == COURSE_BOWSER_CASTLE) || (gCurrentCourseId == COURSE_BIG_DONUT)) { - func_8005D800(&player->unk_258[arg1], 0xFF0000, 0xFF); + set_particle_colour(&player->particles[arg1], 0xFF0000, 0xFF); } else { - func_8005D800(&player->unk_258[arg1], 0xFFFFFF, 0xFF); + set_particle_colour(&player->particles[arg1], 0xFFFFFF, 0xFF); } - player->unk_258[arg1].unk_000[2] = player->pos[2] + (coss(player->unk_258[arg1].unk_020) * -5.8); - player->unk_258[arg1].unk_000[0] = player->pos[0] + (sins(player->unk_258[arg1].unk_020) * -5.8); - player->unk_258[arg1].unk_000[1] = D_801652A0[arg3]; + player->particles[arg1].pos[2] = player->pos[2] + (coss(player->particles[arg1].rotation) * -5.8); + player->particles[arg1].pos[0] = player->pos[0] + (sins(player->particles[arg1].rotation) * -5.8); + player->particles[arg1].pos[1] = D_801652A0[arg3]; player->unk_0DE &= ~0x0008; } void func_80061094(Player* player, s16 arg1, UNUSED s32 arg2, UNUSED s8 arg3, UNUSED s8 arg4) { if (arg1 == 0) { - func_8005D794(player, &player->unk_258[arg1], 0.0f, 0.0f, 0.0f, 0, 0); - func_8005D7D8(&player->unk_258[arg1], 6, 3.8f); - func_8005D800(&player->unk_258[arg1], 0xFFFFFF, 0xFF); - player->unk_258[arg1].unk_038 = 0; - player->unk_258[arg1].unk_03A = 0; - player->unk_258[arg1].unk_03C = 0; + set_particle_position_and_rotation(player, &player->particles[arg1], 0.0f, 0.0f, 0.0f, 0, 0); + init_new_particle_player(&player->particles[arg1], 6, 3.8f); + set_particle_colour(&player->particles[arg1], 0xFFFFFF, 0xFF); + player->particles[arg1].red = 0; + player->particles[arg1].green = 0; + player->particles[arg1].blue = 0; } } void func_80061130(Player* player, s16 arg1, UNUSED s32 arg2, UNUSED s8 arg3, UNUSED s8 arg4) { - func_8005D794(player, &player->unk_258[arg1], 0.0f, 0.0f, 0.0f, 0, 0); - func_8005D7D8(&player->unk_258[arg1], 7, 0.6f); - func_8005D800(&player->unk_258[arg1], 0xFFFFFF, 0xD0); + set_particle_position_and_rotation(player, &player->particles[arg1], 0.0f, 0.0f, 0.0f, 0, 0); + init_new_particle_player(&player->particles[arg1], 7, 0.6f); + set_particle_colour(&player->particles[arg1], 0xFFFFFF, 0xD0); - player->unk_258[arg1].unk_000[2] = player->pos[2] + (coss(player->unk_258[arg1].unk_020) * 6.0f); - player->unk_258[arg1].unk_000[0] = player->pos[0] + (sins(player->unk_258[arg1].unk_020) * 6.0f); - player->unk_258[arg1].unk_000[1] = player->pos[1] - 5.0f; - player->unk_258[arg1].unk_040 = 0; - player->unk_258[arg1].unk_024 = 0.0f; + player->particles[arg1].pos[2] = player->pos[2] + (coss(player->particles[arg1].rotation) * 6.0f); + player->particles[arg1].pos[0] = player->pos[0] + (sins(player->particles[arg1].rotation) * 6.0f); + player->particles[arg1].pos[1] = player->pos[1] - 5.0f; + player->particles[arg1].unk_040 = 0; + player->particles[arg1].unk_024 = 0.0f; } void func_80061224(Player* player, s16 arg1, s32 arg2, s8 arg3, s8 arg4) { - if ((arg1 == 0) && ((player->unk_258[arg2].unk_01E > 0) || (player->unk_258[arg1].unk_01C == 0))) { + if ((arg1 == 0) && ((player->particles[arg2].timer > 0) || (player->particles[arg1].IsAlive == 0))) { func_80061130(player, arg1, arg2, arg3, arg4); - } else if (player->unk_258[arg2].unk_01E >= 2) { + } else if (player->particles[arg2].timer >= 2) { func_80061130(player, arg1, arg2, arg3, arg4); if (arg1 == 9) { player->unk_044 &= ~0x0200; @@ -3751,16 +3751,16 @@ void func_800612F8(Player* player, UNUSED s32 arg1, UNUSED s32 arg2, UNUSED s8 a s32 var_s2; for (var_s2 = 0; var_s2 < 10; var_s2++) { - player->unk_258[0x1E + var_s2].unk_01C = 1; - player->unk_258[0x1E + var_s2].unk_028 = player->pos[1] + 5.0f; - player->unk_258[0x1E + var_s2].unk_020 = (0x1C70 * var_s2) - player->rotation[1]; - player->unk_258[0x1E + var_s2].unk_024 = (random_int(0x0064U) / 100.0f) + 1.5; - player->unk_258[0x1E + var_s2].unk_03A = 0; - player->unk_258[0x1E + var_s2].unk_012 = 1; - player->unk_258[0x1E + var_s2].unk_01E = 0; - player->unk_258[0x1E + var_s2].unk_03E = 0x00FF; - player->unk_258[0x1E + var_s2].unk_000[2] = player->pos[2]; - player->unk_258[0x1E + var_s2].unk_000[0] = player->pos[0]; + player->particles[0x1E + var_s2].IsAlive = 1; + player->particles[0x1E + var_s2].unk_028 = player->pos[1] + 5.0f; + player->particles[0x1E + var_s2].rotation = (0x1C70 * var_s2) - player->rotation[1]; + player->particles[0x1E + var_s2].unk_024 = (random_int(0x0064U) / 100.0f) + 1.5; + player->particles[0x1E + var_s2].green = 0; + player->particles[0x1E + var_s2].type = 1; + player->particles[0x1E + var_s2].timer = 0; + player->particles[0x1E + var_s2].alpha = 0x00FF; + player->particles[0x1E + var_s2].pos[2] = player->pos[2]; + player->particles[0x1E + var_s2].pos[0] = player->pos[0]; } player->unk_046 &= ~0x0008; } @@ -3769,18 +3769,18 @@ void func_80061430(Player* player, UNUSED s32 arg1, UNUSED s32 arg2, UNUSED s8 a s32 var_s2; for (var_s2 = 0; var_s2 < 7; var_s2++) { - player->unk_258[0x1E + var_s2].unk_01C = 1; - player->unk_258[0x1E + var_s2].unk_028 = player->pos[1] - 4.0f; - player->unk_258[0x1E + var_s2].unk_020 = (0x1C70 * var_s2) - player->rotation[1]; + player->particles[0x1E + var_s2].IsAlive = 1; + player->particles[0x1E + var_s2].unk_028 = player->pos[1] - 4.0f; + player->particles[0x1E + var_s2].rotation = (0x1C70 * var_s2) - player->rotation[1]; // ??? - player->unk_258[0x1E + var_s2].unk_024 = (random_int(0x0064U) / 100.0f) + 1.9; - player->unk_258[0x1E + var_s2].unk_024 = (random_int(0x0064U) / 100.0f) + 1.5; - player->unk_258[0x1E + var_s2].unk_03A = 0; - player->unk_258[0x1E + var_s2].unk_012 = 9; - player->unk_258[0x1E + var_s2].unk_01E = 0; - player->unk_258[0x1E + var_s2].unk_03E = 0x00FF; - player->unk_258[0x1E + var_s2].unk_000[2] = player->pos[2]; - player->unk_258[0x1E + var_s2].unk_000[0] = player->pos[0]; + player->particles[0x1E + var_s2].unk_024 = (random_int(0x0064U) / 100.0f) + 1.9; + player->particles[0x1E + var_s2].unk_024 = (random_int(0x0064U) / 100.0f) + 1.5; + player->particles[0x1E + var_s2].green = 0; + player->particles[0x1E + var_s2].type = 9; + player->particles[0x1E + var_s2].timer = 0; + player->particles[0x1E + var_s2].alpha = 0x00FF; + player->particles[0x1E + var_s2].pos[2] = player->pos[2]; + player->particles[0x1E + var_s2].pos[0] = player->pos[0]; } player->unk_044 &= ~0x1000; } @@ -3793,20 +3793,20 @@ void func_800615AC(Player* player, s16 arg1, UNUSED s32 arg2, UNUSED s8 arg3, UN f32 sp28[10] = { -182.0f, 182.0f, 364.0f, -364.0f, 546.0f, -546.0f, 728.0f, -728.0f, 910.0f, -910.0f }; if (random_int(3U) == 2.0f) { - player->unk_258[0x1E + arg1].unk_01C = 1; - player->unk_258[0x1E + arg1].unk_000[0] = player->pos[0]; - player->unk_258[0x1E + arg1].unk_000[2] = player->pos[2]; - player->unk_258[0x1E + arg1].unk_020 = -player->rotation[1] + sp28[arg1]; - player->unk_258[0x1E + arg1].unk_018 = random_int(1U) + 2.0f; + player->particles[0x1E + arg1].IsAlive = 1; + player->particles[0x1E + arg1].pos[0] = player->pos[0]; + player->particles[0x1E + arg1].pos[2] = player->pos[2]; + player->particles[0x1E + arg1].rotation = -player->rotation[1] + sp28[arg1]; + player->particles[0x1E + arg1].unk_018 = random_int(1U) + 2.0f; temp_f0 = random_int(4U); temp_f0 -= test; - player->unk_258[0x1E + arg1].unk_014 = temp_f0; - player->unk_258[0x1E + arg1].unk_000[1] = player->pos[1] + temp_f0; - player->unk_258[0x1E + arg1].unk_00C = 0.15f; - player->unk_258[0x1E + arg1].unk_012 = 5; - player->unk_258[0x1E + arg1].unk_01E = 0; - player->unk_258[0x1E + arg1].unk_03E = 0x00FF; - player->unk_258[0x1E + arg1].unk_038 = 0; + player->particles[0x1E + arg1].unk_014 = temp_f0; + player->particles[0x1E + arg1].pos[1] = player->pos[1] + temp_f0; + player->particles[0x1E + arg1].scale = 0.15f; + player->particles[0x1E + arg1].type = 5; + player->particles[0x1E + arg1].timer = 0; + player->particles[0x1E + arg1].alpha = 0x00FF; + player->particles[0x1E + arg1].red = 0; } } @@ -3822,31 +3822,31 @@ void func_80061754(Player* player, s16 arg1, UNUSED s32 arg2, UNUSED s32 arg3, U temp_s1 = random_int(0x0060U); sp44 = random_int(6U); sp48 = random_int(2U); - func_8005D794(player, &player->unk_258[0x1E + arg1], 0.0f, 0.0f, 0.0f, (s8) 0, (s8) 0); - func_8005D7D8(&player->unk_258[0x1E + arg1], 6, 1.0f); + set_particle_position_and_rotation(player, &player->particles[0x1E + arg1], 0.0f, 0.0f, 0.0f, (s8) 0, (s8) 0); + init_new_particle_player(&player->particles[0x1E + arg1], 6, 1.0f); if ((player->effects & HIT_BY_ITEM_EFFECT) || ((player->effects) & UNKNOWN_EFFECT_0x1000000) || ((player->effects) & 0x400) || ((player->effects) & BOO_EFFECT)) { - func_8005D800(&player->unk_258[0x1E + arg1], 0x00FFFFFF, 0x00A0); - player->unk_258[0x1E + arg1].unk_038 -= temp_s1; - player->unk_258[0x1E + arg1].unk_03A -= temp_s1; - player->unk_258[0x1E + arg1].unk_03C -= temp_s1; + set_particle_colour(&player->particles[0x1E + arg1], 0x00FFFFFF, 0x00A0); + player->particles[0x1E + arg1].red -= temp_s1; + player->particles[0x1E + arg1].green -= temp_s1; + player->particles[0x1E + arg1].blue -= temp_s1; } else { - func_8005D800(&player->unk_258[0x1E + arg1], 0, 0x00A0); - player->unk_258[0x1E + arg1].unk_038 += temp_s1; - player->unk_258[0x1E + arg1].unk_03A += temp_s1; - player->unk_258[0x1E + arg1].unk_03C += temp_s1; + set_particle_colour(&player->particles[0x1E + arg1], 0, 0x00A0); + player->particles[0x1E + arg1].red += temp_s1; + player->particles[0x1E + arg1].green += temp_s1; + player->particles[0x1E + arg1].blue += temp_s1; } - player->unk_258[0x1E + arg1].unk_000[2] = player->pos[2] + (coss(sp54 * 0xB6) * -5.0f); - player->unk_258[0x1E + arg1].unk_000[0] = player->pos[0] + (sins(sp54 * 0xB6) * -5.0f); - player->unk_258[0x1E + arg1].unk_000[1] = (player->pos[1] - player->boundingBoxSize) + sp4C + 2.0f; - player->unk_258[0x1E + arg1].unk_018 = sp44 + 1.0f; - player->unk_258[0x1E + arg1].unk_00C = sp48 + 1.0f; + player->particles[0x1E + arg1].pos[2] = player->pos[2] + (coss(sp54 * 0xB6) * -5.0f); + player->particles[0x1E + arg1].pos[0] = player->pos[0] + (sins(sp54 * 0xB6) * -5.0f); + player->particles[0x1E + arg1].pos[1] = (player->pos[1] - player->boundingBoxSize) + sp4C + 2.0f; + player->particles[0x1E + arg1].unk_018 = sp44 + 1.0f; + player->particles[0x1E + arg1].scale = sp48 + 1.0f; } void func_8006199C(Player* player, s16 arg1, s32 arg2, s8 playerIndex, s8 arg4) { - if ((arg1 == 0) && ((player->unk_258[0x1E + arg2].unk_01E > 0) || (player->unk_258[0x1E + arg2].unk_01C == 0))) { + if ((arg1 == 0) && ((player->particles[0x1E + arg2].timer > 0) || (player->particles[0x1E + arg2].IsAlive == 0))) { func_80061754(player, arg1, arg2, (s32) playerIndex, arg4); - } else if (player->unk_258[0x1E + arg2].unk_01E > 0) { + } else if (player->particles[0x1E + arg2].timer > 0) { func_80061754(player, arg1, arg2, (s32) playerIndex, arg4); } } @@ -3862,22 +3862,22 @@ void func_80061A34(Player* player, s16 arg1, s32 arg2, UNUSED s8 arg3, UNUSED s8 sp4C = random_int(6U); random_int(6U); sp48 = (f32) random_int(3U); - if ((arg1 == 0) && ((player->unk_258[0x1E + arg2].unk_01E > 0) || (player->unk_258[0x1E + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[0x1E + arg1], 0.0f, 0.0f, 0.0f, (s8) 0, (s8) 0); - func_8005D7D8(&player->unk_258[0x1E + arg1], 7, 1.0f); - func_8005D800(&player->unk_258[0x1E + arg1], 0x00FFFFFF, 0x00FF); - player->unk_258[0x1E + arg1].unk_000[2] = player->pos[2] + (coss(sp54 * 0xB6) * -2.0); - player->unk_258[0x1E + arg1].unk_000[0] = player->pos[0] + (sins(sp54 * 0xB6) * -2.0); - player->unk_258[0x1E + arg1].unk_000[1] = (player->pos[1] - player->boundingBoxSize) + sp4C + 2.0f; - player->unk_258[0x1E + arg1].unk_00C = (sp48 + 2.0f) / 10.0f; - } else if (player->unk_258[0x1E + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[0x1E + arg1], 0.0f, 0.0f, 0.0f, (s8) 0, (s8) 0); - func_8005D7D8(&player->unk_258[0x1E + arg1], 7, 1.0f); - func_8005D800(&player->unk_258[0x1E + arg1], 0x00FFFFFF, 0x00FF); - player->unk_258[0x1E + arg1].unk_000[2] = player->pos[2] + (coss(sp54 * 0xB6) * -2.0); - player->unk_258[0x1E + arg1].unk_000[0] = player->pos[0] + (sins(sp54 * 0xB6) * -2.0); - player->unk_258[0x1E + arg1].unk_000[1] = (player->pos[1] - player->boundingBoxSize) + (f32) sp4C + 2.0f; - player->unk_258[0x1E + arg1].unk_00C = (sp48 + 2.0f) / 10.0f; + if ((arg1 == 0) && ((player->particles[0x1E + arg2].timer > 0) || (player->particles[0x1E + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[0x1E + arg1], 0.0f, 0.0f, 0.0f, (s8) 0, (s8) 0); + init_new_particle_player(&player->particles[0x1E + arg1], 7, 1.0f); + set_particle_colour(&player->particles[0x1E + arg1], 0x00FFFFFF, 0x00FF); + player->particles[0x1E + arg1].pos[2] = player->pos[2] + (coss(sp54 * 0xB6) * -2.0); + player->particles[0x1E + arg1].pos[0] = player->pos[0] + (sins(sp54 * 0xB6) * -2.0); + player->particles[0x1E + arg1].pos[1] = (player->pos[1] - player->boundingBoxSize) + sp4C + 2.0f; + player->particles[0x1E + arg1].scale = (sp48 + 2.0f) / 10.0f; + } else if (player->particles[0x1E + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[0x1E + arg1], 0.0f, 0.0f, 0.0f, (s8) 0, (s8) 0); + init_new_particle_player(&player->particles[0x1E + arg1], 7, 1.0f); + set_particle_colour(&player->particles[0x1E + arg1], 0x00FFFFFF, 0x00FF); + player->particles[0x1E + arg1].pos[2] = player->pos[2] + (coss(sp54 * 0xB6) * -2.0); + player->particles[0x1E + arg1].pos[0] = player->pos[0] + (sins(sp54 * 0xB6) * -2.0); + player->particles[0x1E + arg1].pos[1] = (player->pos[1] - player->boundingBoxSize) + (f32) sp4C + 2.0f; + player->particles[0x1E + arg1].scale = (sp48 + 2.0f) / 10.0f; } } @@ -3889,18 +3889,18 @@ void func_80061D4C(Player* player, s16 arg1, UNUSED s32 arg2, UNUSED s8 arg3, UN f32 sp20[10] = { -182.0f, 182.0f, 364.0f, -364.0f, 546.0f, -546.0f, 728.0f, -728.0f, 910.0f, -910.0f }; if (random_int(3U) == 2.0f) { - player->unk_258[0x1E + arg1].unk_01C = 1; - player->unk_258[0x1E + arg1].unk_000[0] = player->pos[0]; - player->unk_258[0x1E + arg1].unk_000[1] = player->pos[1] + 2.0f; - player->unk_258[0x1E + arg1].unk_000[2] = player->pos[2]; - player->unk_258[0x1E + arg1].unk_020 = -player->rotation[1] + sp20[arg1]; - player->unk_258[0x1E + arg1].unk_018 = random_int(3U) + 2.0f; - player->unk_258[0x1E + arg1].unk_014 = random_int(4U); - player->unk_258[0x1E + arg1].unk_014 -= test; - player->unk_258[0x1E + arg1].unk_00C = 0.4f; - player->unk_258[0x1E + arg1].unk_012 = 2; - player->unk_258[0x1E + arg1].unk_01E = 0; - player->unk_258[0x1E + arg1].unk_03E = 0x00FF; + player->particles[0x1E + arg1].IsAlive = 1; + player->particles[0x1E + arg1].pos[0] = player->pos[0]; + player->particles[0x1E + arg1].pos[1] = player->pos[1] + 2.0f; + player->particles[0x1E + arg1].pos[2] = player->pos[2]; + player->particles[0x1E + arg1].rotation = -player->rotation[1] + sp20[arg1]; + player->particles[0x1E + arg1].unk_018 = random_int(3U) + 2.0f; + player->particles[0x1E + arg1].unk_014 = random_int(4U); + player->particles[0x1E + arg1].unk_014 -= test; + player->particles[0x1E + arg1].scale = 0.4f; + player->particles[0x1E + arg1].type = 2; + player->particles[0x1E + arg1].timer = 0; + player->particles[0x1E + arg1].alpha = 0x00FF; } } @@ -3926,38 +3926,38 @@ void func_80061EF4(Player* player, s16 arg1, s32 arg2, UNUSED s8 arg3, UNUSED s8 } if (var_t0 == 0) { if ((arg1 == 0) && - ((player->unk_258[0x1E + arg2].unk_01E > 0) || (player->unk_258[0x1E + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[0x1E + arg1], 0.0f, var_f2, 0.0f, (s8) var_t0, (s8) var_t1); - func_8005D7D8(&player->unk_258[0x1E + arg1], 3, 0.5f); - func_8005D800(&player->unk_258[0x1E + arg1], 0x00FFFFFF, 0x0060); - player->unk_258[0x1E + arg1].unk_020 = 0; - if (player->unk_258[0x1E + arg1].unk_010 == 1) { - player->unk_258[0x1E + arg1].unk_020 += 0x888; + ((player->particles[0x1E + arg2].timer > 0) || (player->particles[0x1E + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[0x1E + arg1], 0.0f, var_f2, 0.0f, (s8) var_t0, (s8) var_t1); + init_new_particle_player(&player->particles[0x1E + arg1], 3, 0.5f); + set_particle_colour(&player->particles[0x1E + arg1], 0x00FFFFFF, 0x0060); + player->particles[0x1E + arg1].rotation = 0; + if (player->particles[0x1E + arg1].unk_010 == 1) { + player->particles[0x1E + arg1].rotation += 0x888; } else { - player->unk_258[0x1E + arg1].unk_020 -= 0x888; + player->particles[0x1E + arg1].rotation -= 0x888; } - player->unk_258[0x1E + arg1].unk_000[2] = + player->particles[0x1E + arg1].pos[2] = player->pos[2] + - (coss(player->unk_258[0x1E + arg1].unk_020 - player->rotation[1] - player->unk_0C0) * 5.0f); - player->unk_258[0x1E + arg1].unk_000[0] = + (coss(player->particles[0x1E + arg1].rotation - player->rotation[1] - player->unk_0C0) * 5.0f); + player->particles[0x1E + arg1].pos[0] = player->pos[0] + - (sins(player->unk_258[0x1E + arg1].unk_020 - player->rotation[1] - player->unk_0C0) * 5.0f); - } else if (player->unk_258[0x1E + arg2].unk_01E > 0) { - func_8005D794(player, &player->unk_258[0x1E + arg1], 0.0f, var_f2, 0.0f, (s8) var_t0, (s8) var_t1); - func_8005D7D8(&player->unk_258[0x1E + arg1], 3, 0.5f); - func_8005D800(&player->unk_258[0x1E + arg1], 0x00FFFFFF, 0x0060); - player->unk_258[0x1E + arg1].unk_020 = 0; - if (player->unk_258[0x1E + arg1].unk_010 == 1) { - player->unk_258[0x1E + arg1].unk_020 += 0x888; + (sins(player->particles[0x1E + arg1].rotation - player->rotation[1] - player->unk_0C0) * 5.0f); + } else if (player->particles[0x1E + arg2].timer > 0) { + set_particle_position_and_rotation(player, &player->particles[0x1E + arg1], 0.0f, var_f2, 0.0f, (s8) var_t0, (s8) var_t1); + init_new_particle_player(&player->particles[0x1E + arg1], 3, 0.5f); + set_particle_colour(&player->particles[0x1E + arg1], 0x00FFFFFF, 0x0060); + player->particles[0x1E + arg1].rotation = 0; + if (player->particles[0x1E + arg1].unk_010 == 1) { + player->particles[0x1E + arg1].rotation += 0x888; } else { - player->unk_258[0x1E + arg1].unk_020 -= 0x888; + player->particles[0x1E + arg1].rotation -= 0x888; } - player->unk_258[0x1E + arg1].unk_000[2] = + player->particles[0x1E + arg1].pos[2] = player->pos[2] + - (coss(player->unk_258[0x1E + arg1].unk_020 - player->rotation[1] - player->unk_0C0) * 5.0f); - player->unk_258[0x1E + arg1].unk_000[0] = + (coss(player->particles[0x1E + arg1].rotation - player->rotation[1] - player->unk_0C0) * 5.0f); + player->particles[0x1E + arg1].pos[0] = player->pos[0] + - (sins(player->unk_258[0x1E + arg1].unk_020 - player->rotation[1] - player->unk_0C0) * 5.0f); + (sins(player->particles[0x1E + arg1].rotation - player->rotation[1] - player->unk_0C0) * 5.0f); } } } @@ -3987,58 +3987,58 @@ void func_800621BC(Player* player, s16 arg1, s32 arg2, UNUSED s8 arg3, UNUSED s8 } if (phi_t0 == 0) { - if ((arg1 == 0) && ((player->unk_258[30 + arg2].unk_01E > 0) || (player->unk_258[30 + arg2].unk_01C == 0))) { - func_8005D794(player, &player->unk_258[30 + arg1], 0.0f, phi_f2, 0.0f, phi_t0, phi_t1); - func_8005D7D8(&player->unk_258[30 + arg1], 8, 1.0f); - func_8005D800(&player->unk_258[30 + arg1], 0xFFFF20, 0xFF); + if ((arg1 == 0) && ((player->particles[30 + arg2].timer > 0) || (player->particles[30 + arg2].IsAlive == 0))) { + set_particle_position_and_rotation(player, &player->particles[30 + arg1], 0.0f, phi_f2, 0.0f, phi_t0, phi_t1); + init_new_particle_player(&player->particles[30 + arg1], 8, 1.0f); + set_particle_colour(&player->particles[30 + arg1], 0xFFFF20, 0xFF); - player->unk_258[30 + arg1].unk_020 = 0; - if (player->unk_258[30 + arg1].unk_010 == 1) { - player->unk_258[30 + arg1].unk_020 += 2184; + player->particles[30 + arg1].rotation = 0; + if (player->particles[30 + arg1].unk_010 == 1) { + player->particles[30 + arg1].rotation += 2184; } else { - player->unk_258[30 + arg1].unk_020 -= 2184; + player->particles[30 + arg1].rotation -= 2184; } - player->unk_258[30 + arg1].unk_000[2] = + player->particles[30 + arg1].pos[2] = player->pos[2] + - (coss((player->unk_258[30 + arg1].unk_020 - player->rotation[1]) - player->unk_0C0) * 5.0f); - player->unk_258[30 + arg1].unk_000[0] = + (coss((player->particles[30 + arg1].rotation - player->rotation[1]) - player->unk_0C0) * 5.0f); + player->particles[30 + arg1].pos[0] = player->pos[0] + - (sins((player->unk_258[30 + arg1].unk_020 - player->rotation[1]) - player->unk_0C0) * 5.0f); + (sins((player->particles[30 + arg1].rotation - player->rotation[1]) - player->unk_0C0) * 5.0f); return; } new_var2 = player; - if (new_var2->unk_258[30 + arg2].unk_01E > 0) { - func_8005D794(new_var2, &new_var2->unk_258[30 + arg1], 0.0f, phi_f2, 0.0f, phi_t0, phi_t1); - func_8005D7D8(&new_var2->unk_258[30 + arg1], 8, 1.0f); - func_8005D800(&new_var2->unk_258[30 + arg1], 0xFFFF20, 0xFF); - new_var2->unk_258[30 + arg1].unk_020 = 0; - if (new_var2->unk_258[30 + arg1].unk_010 == 1) { - new_var2->unk_258[30 + arg1].unk_020 += 2184; + if (new_var2->particles[30 + arg2].timer > 0) { + set_particle_position_and_rotation(new_var2, &new_var2->particles[30 + arg1], 0.0f, phi_f2, 0.0f, phi_t0, phi_t1); + init_new_particle_player(&new_var2->particles[30 + arg1], 8, 1.0f); + set_particle_colour(&new_var2->particles[30 + arg1], 0xFFFF20, 0xFF); + new_var2->particles[30 + arg1].rotation = 0; + if (new_var2->particles[30 + arg1].unk_010 == 1) { + new_var2->particles[30 + arg1].rotation += 2184; } else { - new_var2->unk_258[30 + arg1].unk_020 -= 2184; + new_var2->particles[30 + arg1].rotation -= 2184; } new_var = new_var2; - new_var->unk_258[30 + arg1].unk_000[2] = + new_var->particles[30 + arg1].pos[2] = new_var->pos[2] + - (coss((new_var->unk_258[30 + arg1].unk_020 - new_var->rotation[1]) - new_var->unk_0C0) * 5.0f); - new_var->unk_258[30 + arg1].unk_000[0] = + (coss((new_var->particles[30 + arg1].rotation - new_var->rotation[1]) - new_var->unk_0C0) * 5.0f); + new_var->particles[30 + arg1].pos[0] = new_var->pos[0] + - (sins((new_var->unk_258[30 + arg1].unk_020 - new_var->rotation[1]) - new_var->unk_0C0) * 5.0f); + (sins((new_var->particles[30 + arg1].rotation - new_var->rotation[1]) - new_var->unk_0C0) * 5.0f); } } } -void func_80062484(Player* player, UnkPlayerStruct258* arg1, s32 arg2) { - arg1->unk_01C = 1; - arg1->unk_000[1] = player->unk_074 + 1.0f; - arg1->unk_000[2] = player->pos[2]; - arg1->unk_000[0] = player->pos[0]; - arg1->unk_020 = (arg2 * 0x1998) - player->rotation[1]; - arg1->unk_012 = 4; - arg1->unk_01E = 0; +void func_80062484(Player* player, Particle* particle, s32 arg2) { + particle->IsAlive = 1; + particle->pos[1] = player->unk_074 + 1.0f; + particle->pos[2] = player->pos[2]; + particle->pos[0] = player->pos[0]; + particle->rotation = (arg2 * 0x1998) - player->rotation[1]; + particle->type = 4; + particle->timer = 0; } void func_800624D8(Player* player, UNUSED s32 arg1, UNUSED s32 arg2, UNUSED s8 arg3, UNUSED s8 arg4) { @@ -4048,67 +4048,67 @@ void func_800624D8(Player* player, UNUSED s32 arg1, UNUSED s32 arg2, UNUSED s8 a case DIRT: for (var_s1 = 0; var_s1 < 10; var_s1++) { if ((gCurrentCourseId == COURSE_CHOCO_MOUNTAIN) || (gCurrentCourseId == COURSE_ROYAL_RACEWAY)) { - func_8005DAD8(&player->unk_258[0x1E + var_s1], 1, 0, 0x00A8); + func_8005DAD8(&player->particles[0x1E + var_s1], 1, 0, 0x00A8); } if (gCurrentCourseId == COURSE_KALAMARI_DESERT) { - func_8005DAD8(&player->unk_258[0x1E + var_s1], 7, 0, 0x00A8); + func_8005DAD8(&player->particles[0x1E + var_s1], 7, 0, 0x00A8); } if (gCurrentCourseId == COURSE_MOO_MOO_FARM) { - func_8005DAD8(&player->unk_258[0x1E + var_s1], 8, 0, 0x00A8); + func_8005DAD8(&player->particles[0x1E + var_s1], 8, 0, 0x00A8); } if (gCurrentCourseId == COURSE_WARIO_STADIUM) { - func_8005DAD8(&player->unk_258[0x1E + var_s1], 9, 0, 0x00A8); + func_8005DAD8(&player->particles[0x1E + var_s1], 9, 0, 0x00A8); } if (gCurrentCourseId == COURSE_YOSHI_VALLEY) { - func_8005DAD8(&player->unk_258[0x1E + var_s1], 0x000A, 0, 0x00A8); + func_8005DAD8(&player->particles[0x1E + var_s1], 0x000A, 0, 0x00A8); } if (gCurrentCourseId == COURSE_DK_JUNGLE) { - func_8005DAD8(&player->unk_258[0x1E + var_s1], 0x000B, 0, 0x00A8); + func_8005DAD8(&player->particles[0x1E + var_s1], 0x000B, 0, 0x00A8); } - func_80062484(player, &player->unk_258[0x1E + var_s1], var_s1); + func_80062484(player, &player->particles[0x1E + var_s1], var_s1); } player->unk_044 &= ~0x0100; break; case GRASS: for (var_s1 = 0; var_s1 < 10; var_s1++) { - func_8005DAD8(&player->unk_258[0x1E + var_s1], 2, 1, 0x00A8); - func_80062484(player, &player->unk_258[0x1E + var_s1], var_s1); + func_8005DAD8(&player->particles[0x1E + var_s1], 2, 1, 0x00A8); + func_80062484(player, &player->particles[0x1E + var_s1], var_s1); } player->unk_044 &= ~0x0100; break; case SAND_OFFROAD: for (var_s1 = 0; var_s1 < 10; var_s1++) { - func_8005DAD8(&player->unk_258[0x1E + var_s1], 2, 1, 0x00A8); - func_80062484(player, &player->unk_258[0x1E + var_s1], var_s1); + func_8005DAD8(&player->particles[0x1E + var_s1], 2, 1, 0x00A8); + func_80062484(player, &player->particles[0x1E + var_s1], var_s1); } player->unk_044 &= ~0x0100; break; case SAND: for (var_s1 = 0; var_s1 < 10; var_s1++) { - func_8005DAD8(&player->unk_258[0x1E + var_s1], 3, 1, 0x00A8); - func_80062484(player, &player->unk_258[0x1E + var_s1], var_s1); + func_8005DAD8(&player->particles[0x1E + var_s1], 3, 1, 0x00A8); + func_80062484(player, &player->particles[0x1E + var_s1], var_s1); } player->unk_044 &= ~0x0100; break; case WET_SAND: for (var_s1 = 0; var_s1 < 10; var_s1++) { - func_8005DAD8(&player->unk_258[0x1E + var_s1], 4, 1, 0x00A8); - func_80062484(player, &player->unk_258[0x1E + var_s1], var_s1); + func_8005DAD8(&player->particles[0x1E + var_s1], 4, 1, 0x00A8); + func_80062484(player, &player->particles[0x1E + var_s1], var_s1); } player->unk_044 &= ~0x0100; break; case DIRT_OFFROAD: for (var_s1 = 0; var_s1 < 10; var_s1++) { - func_8005DAD8(&player->unk_258[0x1E + var_s1], 5, 1, 0x00A8); - func_80062484(player, &player->unk_258[0x1E + var_s1], var_s1); + func_8005DAD8(&player->particles[0x1E + var_s1], 5, 1, 0x00A8); + func_80062484(player, &player->particles[0x1E + var_s1], var_s1); } player->unk_044 &= ~0x0100; break; case SNOW: case SNOW_OFFROAD: for (var_s1 = 0; var_s1 < 10; var_s1++) { - func_8005DAD8(&player->unk_258[0x1E + var_s1], 6, 1, 0x00A8); - func_80062484(player, &player->unk_258[0x1E + var_s1], var_s1); + func_8005DAD8(&player->particles[0x1E + var_s1], 6, 1, 0x00A8); + func_80062484(player, &player->particles[0x1E + var_s1], var_s1); } player->unk_044 &= ~0x0100; break; @@ -4116,15 +4116,15 @@ void func_800624D8(Player* player, UNUSED s32 arg1, UNUSED s32 arg2, UNUSED s8 a case STONE: case BRIDGE: for (var_s1 = 0; var_s1 < 10; var_s1++) { - func_8005DAD8(&player->unk_258[0x1E + var_s1], 0, 0, 0x00A8); - func_80062484(player, &player->unk_258[0x1E + var_s1], var_s1); + func_8005DAD8(&player->particles[0x1E + var_s1], 0, 0, 0x00A8); + func_80062484(player, &player->particles[0x1E + var_s1], var_s1); } player->unk_044 &= ~0x0100; break; default: for (var_s1 = 0; var_s1 < 10; var_s1++) { - func_8005DAD8(&player->unk_258[0x1E + var_s1], 0, 0, 0x00A8); - func_80062484(player, &player->unk_258[0x1E + var_s1], var_s1); + func_8005DAD8(&player->particles[0x1E + var_s1], 0, 0, 0x00A8); + func_80062484(player, &player->particles[0x1E + var_s1], var_s1); } player->unk_044 &= ~0x0100; break; @@ -4132,56 +4132,56 @@ void func_800624D8(Player* player, UNUSED s32 arg1, UNUSED s32 arg2, UNUSED s8 a } void func_800628C0(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { - player->unk_258[20 + arg3].unk_01C = 1; - player->unk_258[20 + arg3].unk_020 = -player->rotation[1]; - player->unk_258[20 + arg3].unk_012 = 2; - player->unk_258[20 + arg3].unk_01E = 0; - player->unk_258[20 + arg3].unk_00C = 0.2f; + player->particles[20 + arg3].IsAlive = 1; + player->particles[20 + arg3].rotation = -player->rotation[1]; + player->particles[20 + arg3].type = 2; + player->particles[20 + arg3].timer = 0; + player->particles[20 + arg3].scale = 0.2f; } void func_80062914(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { - player->unk_258[20 + arg3].unk_01C = 1; - player->unk_258[20 + arg3].unk_020 = -player->rotation[1]; - player->unk_258[20 + arg3].unk_012 = 4; - player->unk_258[20 + arg3].unk_01E = 0; - player->unk_258[20 + arg3].unk_00C = 1.0f; + player->particles[20 + arg3].IsAlive = 1; + player->particles[20 + arg3].rotation = -player->rotation[1]; + player->particles[20 + arg3].type = 4; + player->particles[20 + arg3].timer = 0; + player->particles[20 + arg3].scale = 1.0f; } void func_80062968(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { - player->unk_258[20 + arg3].unk_01C = 1; - player->unk_258[20 + arg3].unk_020 = -player->rotation[1]; - player->unk_258[20 + arg3].unk_012 = 5; - player->unk_258[20 + arg3].unk_01E = 0; - player->unk_258[20 + arg3].unk_00C = 0.2f; + player->particles[20 + arg3].IsAlive = 1; + player->particles[20 + arg3].rotation = -player->rotation[1]; + player->particles[20 + arg3].type = 5; + player->particles[20 + arg3].timer = 0; + player->particles[20 + arg3].scale = 0.2f; } void func_800629BC(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { - player->unk_258[20 + arg3].unk_01C = 1; - player->unk_258[20 + arg3].unk_020 = -player->rotation[1]; - player->unk_258[20 + arg3].unk_012 = 6; - player->unk_258[20 + arg3].unk_01E = 0; - player->unk_258[20 + arg3].unk_00C = 0.2f; - player->unk_258[20 + arg3].unk_000[1] = 0.0f; + player->particles[20 + arg3].IsAlive = 1; + player->particles[20 + arg3].rotation = -player->rotation[1]; + player->particles[20 + arg3].type = 6; + player->particles[20 + arg3].timer = 0; + player->particles[20 + arg3].scale = 0.2f; + player->particles[20 + arg3].pos[1] = 0.0f; } void func_80062A18(Player* player, s8 arg1, UNUSED s8 arg2, s8 arg3) { - player->unk_258[20 + arg3].unk_01C = 1; - player->unk_258[20 + arg3].unk_012 = 3; - player->unk_258[20 + arg1 /* arg1 instead of arg3 */].unk_00C = 0.2f; - player->unk_258[20 + arg3].unk_01E = 1; - player->unk_258[20 + arg3].unk_020 = 0; + player->particles[20 + arg3].IsAlive = 1; + player->particles[20 + arg3].type = 3; + 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_258[20 + arg3].unk_000[2] = player->pos[2]; - player->unk_258[20 + arg3].unk_000[0] = player->pos[0]; - player->unk_258[20 + arg3].unk_000[1] = (player->pos[1] + 4.0f); + 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); } void func_80062AA8(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { - player->unk_258[20 + arg3].unk_01C = 1; - player->unk_258[20 + arg3].unk_012 = 5; - player->unk_258[20 + arg3].unk_00C = 0.1f; - player->unk_258[20 + arg3].unk_01E = 0; - player->unk_258[20 + arg3].unk_000[1] = (player->pos[1] + player->boundingBoxSize) - 2.5; + player->particles[20 + arg3].IsAlive = 1; + player->particles[20 + arg3].type = 5; + player->particles[20 + arg3].scale = 0.1f; + player->particles[20 + arg3].timer = 0; + player->particles[20 + arg3].pos[1] = (player->pos[1] + player->boundingBoxSize) - 2.5; } void func_80062B18(f32* arg0, f32* arg1, f32* arg2, f32 arg3, f32 arg4, f32 arg5, u16 arg6, u16 arg7) { @@ -4228,178 +4228,178 @@ void func_80062C74(Player* player, s16 arg1, UNUSED s32 arg2, UNUSED s32 arg3) { f32 sp38; s16 thing; - player->unk_258[arg1].unk_01E += 1; - if (player->unk_258[arg1].unk_01E == 0x000C) { - player->unk_258[arg1].unk_01C = 0; - player->unk_258[arg1].unk_01E = 0; - player->unk_258[arg1].unk_012 = 0; + player->particles[arg1].timer += 1; + if (player->particles[arg1].timer == 0x000C) { + player->particles[arg1].IsAlive = 0; + player->particles[arg1].timer = 0; + player->particles[arg1].type = 0; } - player->unk_258[arg1].unk_018 = 2.0f; - if (player->unk_258[arg1].unk_040 == 0) { - player->unk_258[arg1].unk_00C = player->unk_258[arg1].unk_00C + 0.07; - player->unk_258[arg1].unk_024 = player->unk_258[arg1].unk_024 + 0.3; - if (player->unk_258[arg1].unk_01E >= 3) { - player->unk_258[arg1].unk_03E -= 3; + player->particles[arg1].unk_018 = 2.0f; + if (player->particles[arg1].unk_040 == 0) { + player->particles[arg1].scale = player->particles[arg1].scale + 0.07; + player->particles[arg1].unk_024 = player->particles[arg1].unk_024 + 0.3; + if (player->particles[arg1].timer >= 3) { + player->particles[arg1].alpha -= 3; } - if (player->unk_258[arg1].unk_03E <= 0) { - player->unk_258[arg1].unk_03E = 0; + if (player->particles[arg1].alpha <= 0) { + player->particles[arg1].alpha = 0; } } else { - player->unk_258[arg1].unk_00C = player->unk_258[arg1].unk_00C + 0.1; - player->unk_258[arg1].unk_024 = player->unk_258[arg1].unk_024 + 0.3; - if (player->unk_258[arg1].unk_01E >= 3) { - player->unk_258[arg1].unk_03E -= 2; + player->particles[arg1].scale = player->particles[arg1].scale + 0.1; + player->particles[arg1].unk_024 = player->particles[arg1].unk_024 + 0.3; + if (player->particles[arg1].timer >= 3) { + player->particles[arg1].alpha -= 2; } - if (player->unk_258[arg1].unk_03E <= 0) { - player->unk_258[arg1].unk_03E = 0; + if (player->particles[arg1].alpha <= 0) { + player->particles[arg1].alpha = 0; } } - thing = player->unk_258[arg1].unk_020 - (player->unk_0C0 / 2); - if (player->unk_258[arg1].unk_040 == 0) { + thing = player->particles[arg1].rotation - (player->unk_0C0 / 2); + if (player->particles[arg1].unk_040 == 0) { var_f6 = -((player->unk_098 / 5000.0f) + 0.1); } else { var_f6 = -((player->unk_098 / 6000.0f) + 0.1); } - if (((player->effects & BOOST_EFFECT) == BOOST_EFFECT) && (player->unk_258[arg1].unk_01E >= 6)) { - player->unk_258[arg1].unk_00C = player->unk_258[arg1].unk_00C + 0.06; + if (((player->effects & BOOST_EFFECT) == BOOST_EFFECT) && (player->particles[arg1].timer >= 6)) { + player->particles[arg1].scale = player->particles[arg1].scale + 0.06; } - player->unk_258[arg1].unk_010++; - if (player->unk_258[arg1].unk_010 >= 3) { - player->unk_258[arg1].unk_010 = 0; + player->particles[arg1].unk_010++; + if (player->particles[arg1].unk_010 >= 3) { + player->particles[arg1].unk_010 = 0; } - func_80062B18(&sp40, &sp38, &sp3C, 0.0f, sp48[player->characterId], (player->unk_258[arg1].unk_01E * var_f6) + -5.5, + func_80062B18(&sp40, &sp38, &sp3C, 0.0f, sp48[player->characterId], (player->particles[arg1].timer * var_f6) + -5.5, -thing, -player->unk_206 * 2); - player->unk_258[arg1].unk_000[0] = player->pos[0] + sp40; + player->particles[arg1].pos[0] = player->pos[0] + sp40; sp38 = (player->pos[1] - player->boundingBoxSize) + sp38; - player->unk_258[arg1].unk_000[2] = player->pos[2] + sp3C; - player->unk_258[arg1].unk_000[1] = player->unk_258[arg1].unk_024 + sp38; + player->particles[arg1].pos[2] = player->pos[2] + sp3C; + player->particles[arg1].pos[1] = player->particles[arg1].unk_024 + sp38; } void func_80062F98(Player* player, s16 arg1, s8 arg2, UNUSED s8 arg3) { f32 temp_f0; - temp_f0 = player->unk_258[10 + arg1].unk_018 / 10.0f; - ++player->unk_258[10 + arg1].unk_01E; - player->unk_258[10 + arg1].unk_000[1] += temp_f0; + temp_f0 = player->particles[10 + arg1].unk_018 / 10.0f; + ++player->particles[10 + arg1].timer; + player->particles[10 + arg1].pos[1] += temp_f0; if ((player->unk_0CA & 1) == 1) { - player->unk_258[10 + arg1].unk_000[1] += (temp_f0 + 0.3); - if ((player->unk_258[10 + arg1].unk_01E == 0x10) || - ((D_801652A0[arg2] - player->unk_258[10 + arg1].unk_000[1]) < 3.0f)) { - player->unk_258[10 + arg1].unk_01C = 0; - player->unk_258[10 + arg1].unk_01E = 0; - player->unk_258[10 + arg1].unk_012 = 0; + player->particles[10 + arg1].pos[1] += (temp_f0 + 0.3); + if ((player->particles[10 + arg1].timer == 0x10) || + ((D_801652A0[arg2] - player->particles[10 + arg1].pos[1]) < 3.0f)) { + player->particles[10 + arg1].IsAlive = 0; + player->particles[10 + arg1].timer = 0; + player->particles[10 + arg1].type = 0; } - } else if ((player->unk_258[10 + arg1].unk_01E == 0xA) || - ((D_801652A0[arg2] - player->unk_258[10 + arg1].unk_000[1]) < 3.0f)) { - player->unk_258[10 + arg1].unk_01C = 0; - player->unk_258[10 + arg1].unk_01E = 0; - player->unk_258[10 + arg1].unk_012 = 0; + } else if ((player->particles[10 + arg1].timer == 0xA) || + ((D_801652A0[arg2] - player->particles[10 + arg1].pos[1]) < 3.0f)) { + player->particles[10 + arg1].IsAlive = 0; + player->particles[10 + arg1].timer = 0; + player->particles[10 + arg1].type = 0; } } -void func_800630C0(Player* player, s16 arg1, s8 arg2, UNUSED s8 arg3) { - ++player->unk_258[arg1].unk_01E; - player->unk_258[arg1].unk_000[2] = player->pos[2] + coss(player->unk_258[arg1].unk_020) * -5.8; - player->unk_258[arg1].unk_000[0] = player->pos[0] + sins(player->unk_258[arg1].unk_020) * -5.8; - player->unk_258[arg1].unk_000[1] = D_801652A0[arg2]; - if (player->unk_258[arg1].unk_01E == 15) { - player->unk_258[arg1].unk_01C = 0; - player->unk_258[arg1].unk_01E = 0; - player->unk_258[arg1].unk_012 = 0; +void set_oob_splash_particle_position(Player* player, s16 arg1, s8 arg2, UNUSED s8 arg3) { + ++player->particles[arg1].timer; + player->particles[arg1].pos[2] = player->pos[2] + coss(player->particles[arg1].rotation) * -5.8; + player->particles[arg1].pos[0] = player->pos[0] + sins(player->particles[arg1].rotation) * -5.8; + player->particles[arg1].pos[1] = D_801652A0[arg2]; + if (player->particles[arg1].timer == 15) { + player->particles[arg1].IsAlive = 0; + player->particles[arg1].timer = 0; + player->particles[arg1].type = 0; } } void func_800631A8(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { - ++player->unk_258[arg1].unk_01E; - if ((s32) player->unk_258[arg1].unk_01E < 9) { - if ((player->unk_258[arg1].unk_01E & 1) != 0) { - player->unk_258[arg1].unk_038 = 8; + ++player->particles[arg1].timer; + if ((s32) player->particles[arg1].timer < 9) { + if ((player->particles[arg1].timer & 1) != 0) { + player->particles[arg1].red = 8; } else { - player->unk_258[arg1].unk_038 = 0; + player->particles[arg1].red = 0; } - } else if (((player->unk_258[arg1].unk_01E & 1) != 0) || - ((player->unk_258[arg1].unk_01E >= 9) && (player->unk_258[arg1].unk_01E < 12))) { - player->unk_258[arg1].unk_038 = 0xFF; - } else if ((player->unk_258[arg1].unk_01E & 2) != 0) { - player->unk_258[arg1].unk_038 = 8; + } else if (((player->particles[arg1].timer & 1) != 0) || + ((player->particles[arg1].timer >= 9) && (player->particles[arg1].timer < 12))) { + player->particles[arg1].red = 0xFF; + } else if ((player->particles[arg1].timer & 2) != 0) { + player->particles[arg1].red = 8; } else { - player->unk_258[arg1].unk_038 = 0; + player->particles[arg1].red = 0; } - player->unk_258[arg1].unk_03A = 0; - player->unk_258[arg1].unk_03C = 0; - if ((s32) player->unk_258[arg1].unk_01E >= 0x19) { - player->unk_258[arg1].unk_01C = 0; - player->unk_258[arg1].unk_01E = 0; - player->unk_258[arg1].unk_012 = 0; + player->particles[arg1].green = 0; + player->particles[arg1].blue = 0; + if ((s32) player->particles[arg1].timer >= 0x19) { + player->particles[arg1].IsAlive = 0; + player->particles[arg1].timer = 0; + player->particles[arg1].type = 0; } } void func_80063268(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { - if (player->unk_258[arg1].unk_01E >= 0x1E) { - player->unk_258[arg1].unk_040 += 0x1FFE; + if (player->particles[arg1].timer >= 0x1E) { + player->particles[arg1].unk_040 += 0x1FFE; } else { - player->unk_258[arg1].unk_040 += 0x1554; + player->particles[arg1].unk_040 += 0x1554; } - player->unk_258[arg1].unk_024 += 0.25; - player->unk_258[arg1].unk_000[2] = - player->pos[2] + (coss((player->unk_258[arg1].unk_020 + player->unk_258[arg1].unk_040)) * 5.5); - player->unk_258[arg1].unk_000[0] = - player->pos[0] + (sins((player->unk_258[arg1].unk_020 + player->unk_258[arg1].unk_040)) * 5.5); - player->unk_258[arg1].unk_000[1] = ((player->pos[1] - 5.0f) + player->unk_258[arg1].unk_024); - ++player->unk_258[arg1].unk_01E; - player->unk_258[arg1].unk_00C += 0.05; - player->unk_258[arg1].unk_03E -= 5; + player->particles[arg1].unk_024 += 0.25; + player->particles[arg1].pos[2] = + player->pos[2] + (coss((player->particles[arg1].rotation + player->particles[arg1].unk_040)) * 5.5); + player->particles[arg1].pos[0] = + player->pos[0] + (sins((player->particles[arg1].rotation + player->particles[arg1].unk_040)) * 5.5); + player->particles[arg1].pos[1] = ((player->pos[1] - 5.0f) + player->particles[arg1].unk_024); + ++player->particles[arg1].timer; + player->particles[arg1].scale += 0.05; + player->particles[arg1].alpha -= 5; - if ((s32) player->unk_258[arg1].unk_03E <= 0) { - player->unk_258[arg1].unk_03E = 0; + if ((s32) player->particles[arg1].alpha <= 0) { + player->particles[arg1].alpha = 0; } - if ((s32) player->unk_258[arg1].unk_01E >= 0x28) { - player->unk_258[arg1].unk_01C = 0; - player->unk_258[arg1].unk_01E = 0; - player->unk_258[arg1].unk_012 = 0; + if ((s32) player->particles[arg1].timer >= 0x28) { + player->particles[arg1].IsAlive = 0; + player->particles[arg1].timer = 0; + player->particles[arg1].type = 0; } } void func_80063408(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { - if (player->unk_258[10 + arg1].unk_010 == 1) { - player->unk_258[10 + arg1].unk_000[2] = + if (player->particles[10 + arg1].unk_010 == 1) { + player->particles[10 + arg1].pos[2] = player->tyres[BACK_LEFT].pos[2] + - (player->unk_258[10 + arg1].unk_01E * -7) * coss(player->unk_258[10 + arg1].unk_020); - player->unk_258[10 + arg1].unk_000[0] = + (player->particles[10 + arg1].timer * -7) * coss(player->particles[10 + arg1].rotation); + player->particles[10 + arg1].pos[0] = player->tyres[BACK_LEFT].pos[0] + - (player->unk_258[10 + arg1].unk_01E * -7) * sins(player->unk_258[10 + arg1].unk_020); + (player->particles[10 + arg1].timer * -7) * sins(player->particles[10 + arg1].rotation); } else { - player->unk_258[10 + arg1].unk_000[2] = + player->particles[10 + arg1].pos[2] = player->tyres[BACK_RIGHT].pos[2] + - (player->unk_258[10 + arg1].unk_01E * -7) * coss(player->unk_258[10 + arg1].unk_020); - player->unk_258[10 + arg1].unk_000[0] = + (player->particles[10 + arg1].timer * -7) * coss(player->particles[10 + arg1].rotation); + player->particles[10 + arg1].pos[0] = player->tyres[BACK_RIGHT].pos[0] + - (player->unk_258[10 + arg1].unk_01E * -7) * sins(player->unk_258[10 + arg1].unk_020); + (player->particles[10 + arg1].timer * -7) * sins(player->particles[10 + arg1].rotation); } - ++player->unk_258[10 + arg1].unk_01E; - player->unk_258[10 + arg1].unk_000[1] += 1.0f; + ++player->particles[10 + arg1].timer; + player->particles[10 + arg1].pos[1] += 1.0f; if (((player->effects & 0x80) != 0) || ((player->effects & 0x40) != 0)) { - player->unk_258[10 + arg1].unk_01C = 0; - player->unk_258[10 + arg1].unk_01E = 0; + player->particles[10 + arg1].IsAlive = 0; + player->particles[10 + arg1].timer = 0; } - if (player->unk_258[10 + arg1].unk_01E == 8) { - player->unk_258[10 + arg1].unk_01E = 0; - player->unk_258[10 + arg1].unk_01C = 0; - player->unk_258[10 + arg1].unk_012 = 0; + if (player->particles[10 + arg1].timer == 8) { + player->particles[10 + arg1].timer = 0; + player->particles[10 + arg1].IsAlive = 0; + player->particles[10 + arg1].type = 0; } - player->unk_258[10 + arg1].unk_00C += 0.08; - if (player->unk_258[10 + arg1].unk_01E >= 4) { - player->unk_258[10 + arg1].unk_03E -= 16; + player->particles[10 + arg1].scale += 0.08; + if (player->particles[10 + arg1].timer >= 4) { + player->particles[10 + arg1].alpha -= 16; } - if (player->unk_258[10 + arg1].unk_03E <= 0) { - player->unk_258[10 + arg1].unk_03E = 0; + if (player->particles[10 + arg1].alpha <= 0) { + player->particles[10 + arg1].alpha = 0; } } @@ -4408,181 +4408,181 @@ void func_800635D4(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { f32 sp40; f32 sp3C; - if (player->unk_258[10 + arg1].unk_010 == 1) { + if (player->particles[10 + arg1].unk_010 == 1) { if ((player->effects & LIGHTNING_EFFECT)) { func_80062B18(&sp44, &sp40, &sp3C, -2.0f, 0.0f, - (-player->unk_258[10 + arg1].unk_01E * (player->speed / 18.0f) * 216.0f) / 16, - -player->unk_258[10 + arg1].unk_020, 2 * -player->unk_206); - player->unk_258[10 + arg1].unk_000[0] = player->tyres[BACK_LEFT].pos[0] + sp44; - player->unk_258[10 + arg1].unk_000[2] = player->tyres[BACK_LEFT].pos[2] + sp3C; + (-player->particles[10 + arg1].timer * (player->speed / 18.0f) * 216.0f) / 16, + -player->particles[10 + arg1].rotation, 2 * -player->unk_206); + player->particles[10 + arg1].pos[0] = player->tyres[BACK_LEFT].pos[0] + sp44; + player->particles[10 + arg1].pos[2] = player->tyres[BACK_LEFT].pos[2] + sp3C; } else { - player->unk_258[10 + arg1].unk_000[2] = + player->particles[10 + arg1].pos[2] = player->tyres[BACK_LEFT].pos[2] + - ((-player->unk_258[10 + arg1].unk_01E * (player->speed / 18.0f) * 216.0f) / 16) * - coss(player->unk_258[10 + arg1].unk_020); - player->unk_258[10 + arg1].unk_000[0] = + ((-player->particles[10 + arg1].timer * (player->speed / 18.0f) * 216.0f) / 16) * + coss(player->particles[10 + arg1].rotation); + player->particles[10 + arg1].pos[0] = player->tyres[BACK_LEFT].pos[0] + - ((-player->unk_258[10 + arg1].unk_01E * (player->speed / 18.0f) * 216.0f) / 16) * - sins(player->unk_258[10 + arg1].unk_020); + ((-player->particles[10 + arg1].timer * (player->speed / 18.0f) * 216.0f) / 16) * + sins(player->particles[10 + arg1].rotation); } } else if ((player->effects & LIGHTNING_EFFECT)) { func_80062B18(&sp44, &sp40, &sp3C, 2.0f, 0.0f, - (-player->unk_258[10 + arg1].unk_01E * (player->speed / 18.0f) * 216.0f) / 16, - -player->unk_258[10 + arg1].unk_020, 2 * -player->unk_206); - player->unk_258[10 + arg1].unk_000[0] = player->tyres[BACK_RIGHT].pos[0] + sp44; - player->unk_258[10 + arg1].unk_000[2] = player->tyres[BACK_RIGHT].pos[2] + sp3C; + (-player->particles[10 + arg1].timer * (player->speed / 18.0f) * 216.0f) / 16, + -player->particles[10 + arg1].rotation, 2 * -player->unk_206); + player->particles[10 + arg1].pos[0] = player->tyres[BACK_RIGHT].pos[0] + sp44; + player->particles[10 + arg1].pos[2] = player->tyres[BACK_RIGHT].pos[2] + sp3C; } else { - player->unk_258[10 + arg1].unk_000[2] = + player->particles[10 + arg1].pos[2] = player->tyres[BACK_RIGHT].pos[2] + - ((-player->unk_258[10 + arg1].unk_01E * (player->speed / 18.0f) * 216.0f) / 16) * - coss(player->unk_258[10 + arg1].unk_020); - player->unk_258[10 + arg1].unk_000[0] = + ((-player->particles[10 + arg1].timer * (player->speed / 18.0f) * 216.0f) / 16) * + coss(player->particles[10 + arg1].rotation); + player->particles[10 + arg1].pos[0] = player->tyres[BACK_RIGHT].pos[0] + - ((-player->unk_258[10 + arg1].unk_01E * (player->speed / 18.0f) * 216.0f) / 16) * - sins(player->unk_258[10 + arg1].unk_020); + ((-player->particles[10 + arg1].timer * (player->speed / 18.0f) * 216.0f) / 16) * + sins(player->particles[10 + arg1].rotation); } - ++player->unk_258[10 + arg1].unk_01E; - player->unk_258[10 + arg1].unk_000[1] += 0.2; + ++player->particles[10 + arg1].timer; + player->particles[10 + arg1].pos[1] += 0.2; if (((player->effects & 0x80) != 0) || ((player->effects & 0x40) != 0)) { - player->unk_258[10 + arg1].unk_01C = 0; - player->unk_258[10 + arg1].unk_01E = 0; + player->particles[10 + arg1].IsAlive = 0; + player->particles[10 + arg1].timer = 0; } - if (player->unk_258[10 + arg1].unk_01E == 8) { - player->unk_258[10 + arg1].unk_01C = 0; - player->unk_258[10 + arg1].unk_01E = 0; - player->unk_258[10 + arg1].unk_012 = 0; + if (player->particles[10 + arg1].timer == 8) { + player->particles[10 + arg1].IsAlive = 0; + player->particles[10 + arg1].timer = 0; + player->particles[10 + arg1].type = 0; } - player->unk_258[10 + arg1].unk_00C += 0.1; - if (player->unk_258[10 + arg1].unk_040 == 0) { - if (player->unk_258[10 + arg1].unk_01E >= 4) { - player->unk_258[10 + arg1].unk_03E -= 12; + player->particles[10 + arg1].scale += 0.1; + if (player->particles[10 + arg1].unk_040 == 0) { + if (player->particles[10 + arg1].timer >= 4) { + player->particles[10 + arg1].alpha -= 12; } - if (player->unk_258[10 + arg1].unk_03E <= 0) { - player->unk_258[10 + arg1].unk_03E = 0; + if (player->particles[10 + arg1].alpha <= 0) { + player->particles[10 + arg1].alpha = 0; } } else { - if (player->unk_258[10 + arg1].unk_01E >= 4) { - player->unk_258[10 + arg1].unk_03E -= 16; + if (player->particles[10 + arg1].timer >= 4) { + player->particles[10 + arg1].alpha -= 16; } - if (player->unk_258[10 + arg1].unk_03E <= 0) { - player->unk_258[10 + arg1].unk_03E = 0; + if (player->particles[10 + arg1].alpha <= 0) { + player->particles[10 + arg1].alpha = 0; } } } void func_800639DC(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { - if (player->unk_258[10 + arg1].unk_010 == 1) { - player->unk_258[10 + arg1].unk_000[2] = + if (player->particles[10 + arg1].unk_010 == 1) { + player->particles[10 + arg1].pos[2] = player->tyres[BACK_LEFT].pos[2] + - (-1.8f * player->unk_258[10 + arg1].unk_01E) * coss(player->unk_258[10 + arg1].unk_020); - player->unk_258[10 + arg1].unk_000[0] = + (-1.8f * player->particles[10 + arg1].timer) * coss(player->particles[10 + arg1].rotation); + player->particles[10 + arg1].pos[0] = player->tyres[BACK_LEFT].pos[0] + - (-1.8f * player->unk_258[10 + arg1].unk_01E) * sins(player->unk_258[10 + arg1].unk_020); + (-1.8f * player->particles[10 + arg1].timer) * sins(player->particles[10 + arg1].rotation); } else { - player->unk_258[10 + arg1].unk_000[2] = + player->particles[10 + arg1].pos[2] = player->tyres[BACK_RIGHT].pos[2] + - (-1.8f * player->unk_258[10 + arg1].unk_01E) * coss(player->unk_258[10 + arg1].unk_020); - player->unk_258[10 + arg1].unk_000[0] = + (-1.8f * player->particles[10 + arg1].timer) * coss(player->particles[10 + arg1].rotation); + player->particles[10 + arg1].pos[0] = player->tyres[BACK_RIGHT].pos[0] + - (-1.8f * player->unk_258[10 + arg1].unk_01E) * sins(player->unk_258[10 + arg1].unk_020); + (-1.8f * player->particles[10 + arg1].timer) * sins(player->particles[10 + arg1].rotation); } - ++player->unk_258[10 + arg1].unk_01E; - player->unk_258[10 + arg1].unk_000[1] += 0.3; - if (player->unk_258[10 + arg1].unk_01E == 8) { - player->unk_258[10 + arg1].unk_01C = 0; - player->unk_258[10 + arg1].unk_01E = 0; - player->unk_258[10 + arg1].unk_012 = 0; + ++player->particles[10 + arg1].timer; + player->particles[10 + arg1].pos[1] += 0.3; + if (player->particles[10 + arg1].timer == 8) { + player->particles[10 + arg1].IsAlive = 0; + player->particles[10 + arg1].timer = 0; + player->particles[10 + arg1].type = 0; } - player->unk_258[10 + arg1].unk_00C += 0.15; - if (player->unk_258[10 + arg1].unk_040 == 0) { - if ((s32) player->unk_258[10 + arg1].unk_01E >= 4) { - --player->unk_258[10 + arg1].unk_03E; + player->particles[10 + arg1].scale += 0.15; + if (player->particles[10 + arg1].unk_040 == 0) { + if ((s32) player->particles[10 + arg1].timer >= 4) { + --player->particles[10 + arg1].alpha; } - if ((s32) player->unk_258[10 + arg1].unk_03E <= 0) { - player->unk_258[10 + arg1].unk_03E = 0; + if ((s32) player->particles[10 + arg1].alpha <= 0) { + player->particles[10 + arg1].alpha = 0; } } else { - if ((s32) player->unk_258[10 + arg1].unk_01E >= 4) { - player->unk_258[10 + arg1].unk_03E -= 16; + if ((s32) player->particles[10 + arg1].timer >= 4) { + player->particles[10 + arg1].alpha -= 16; } - if ((s32) player->unk_258[10 + arg1].unk_03E <= 0) { + if ((s32) player->particles[10 + arg1].alpha <= 0) { - player->unk_258[10 + arg1].unk_03E = 0; + player->particles[10 + arg1].alpha = 0; } } } void func_80063BD4(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { - if (player->unk_258[10 + arg1].unk_010 == 1) { - player->unk_258[10 + arg1].unk_000[2] = + if (player->particles[10 + arg1].unk_010 == 1) { + player->particles[10 + arg1].pos[2] = player->tyres[BACK_LEFT].pos[2] + - (-2 * player->unk_258[10 + arg1].unk_01E * coss(player->unk_258[10 + arg1].unk_020)); - player->unk_258[10 + arg1].unk_000[0] = + (-2 * player->particles[10 + arg1].timer * coss(player->particles[10 + arg1].rotation)); + player->particles[10 + arg1].pos[0] = player->tyres[BACK_LEFT].pos[0] + - (-2 * player->unk_258[10 + arg1].unk_01E * sins(player->unk_258[10 + arg1].unk_020)); + (-2 * player->particles[10 + arg1].timer * sins(player->particles[10 + arg1].rotation)); } else { - player->unk_258[10 + arg1].unk_000[2] = + player->particles[10 + arg1].pos[2] = player->tyres[BACK_RIGHT].pos[2] + - (-2 * player->unk_258[10 + arg1].unk_01E * coss(player->unk_258[10 + arg1].unk_020)); - player->unk_258[10 + arg1].unk_000[0] = + (-2 * player->particles[10 + arg1].timer * coss(player->particles[10 + arg1].rotation)); + player->particles[10 + arg1].pos[0] = player->tyres[BACK_RIGHT].pos[0] + - (-2 * player->unk_258[10 + arg1].unk_01E * sins(player->unk_258[10 + arg1].unk_020)); + (-2 * player->particles[10 + arg1].timer * sins(player->particles[10 + arg1].rotation)); } - ++player->unk_258[10 + arg1].unk_01E; - player->unk_258[10 + arg1].unk_000[1] += 0.2; - if (player->unk_258[10 + arg1].unk_01E == 8) { - player->unk_258[10 + arg1].unk_01C = 0; - player->unk_258[10 + arg1].unk_01E = 0; - player->unk_258[10 + arg1].unk_012 = 0; + ++player->particles[10 + arg1].timer; + player->particles[10 + arg1].pos[1] += 0.2; + if (player->particles[10 + arg1].timer == 8) { + player->particles[10 + arg1].IsAlive = 0; + player->particles[10 + arg1].timer = 0; + player->particles[10 + arg1].type = 0; } - player->unk_258[10 + arg1].unk_018 = 2.0f; - player->unk_258[10 + arg1].unk_00C -= 0.06; + player->particles[10 + arg1].unk_018 = 2.0f; + player->particles[10 + arg1].scale -= 0.06; } void func_80063D58(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { - if (player->unk_258[10 + arg1].unk_010 == 1) { - player->unk_258[10 + arg1].unk_000[2] = + if (player->particles[10 + arg1].unk_010 == 1) { + player->particles[10 + arg1].pos[2] = player->tyres[BACK_LEFT].pos[2] + - ((-player->unk_258[10 + arg1].unk_01E * (player->speed / 18.0f) * 216.0f) / 20.0f) * - coss(player->unk_258[10 + arg1].unk_020); - player->unk_258[10 + arg1].unk_000[0] = + ((-player->particles[10 + arg1].timer * (player->speed / 18.0f) * 216.0f) / 20.0f) * + coss(player->particles[10 + arg1].rotation); + player->particles[10 + arg1].pos[0] = player->tyres[BACK_LEFT].pos[0] + - ((-player->unk_258[10 + arg1].unk_01E * (player->speed / 18.0f) * 216.0f) / 20.0f) * - sins(player->unk_258[10 + arg1].unk_020); + ((-player->particles[10 + arg1].timer * (player->speed / 18.0f) * 216.0f) / 20.0f) * + sins(player->particles[10 + arg1].rotation); } else { - player->unk_258[10 + arg1].unk_000[2] = + player->particles[10 + arg1].pos[2] = player->tyres[BACK_RIGHT].pos[2] + - ((-player->unk_258[10 + arg1].unk_01E * (player->speed / 18.0f) * 216.0f) / 20.0f) * - coss(player->unk_258[10 + arg1].unk_020); - player->unk_258[10 + arg1].unk_000[0] = + ((-player->particles[10 + arg1].timer * (player->speed / 18.0f) * 216.0f) / 20.0f) * + coss(player->particles[10 + arg1].rotation); + player->particles[10 + arg1].pos[0] = player->tyres[BACK_RIGHT].pos[0] + - ((-player->unk_258[10 + arg1].unk_01E * (player->speed / 18.0f) * 216.0f) / 20.0f) * - sins(player->unk_258[10 + arg1].unk_020); + ((-player->particles[10 + arg1].timer * (player->speed / 18.0f) * 216.0f) / 20.0f) * + sins(player->particles[10 + arg1].rotation); } - ++player->unk_258[10 + arg1].unk_01E; - if (player->unk_258[10 + arg1].unk_01E == 8) { - player->unk_258[10 + arg1].unk_01E = 0; - player->unk_258[10 + arg1].unk_01C = 0; - player->unk_258[10 + arg1].unk_012 = 0; + ++player->particles[10 + arg1].timer; + if (player->particles[10 + arg1].timer == 8) { + player->particles[10 + arg1].timer = 0; + player->particles[10 + arg1].IsAlive = 0; + player->particles[10 + arg1].type = 0; } - player->unk_258[10 + arg1].unk_00C += 0.2; - if (player->unk_258[10 + arg1].unk_01E >= 4) { - player->unk_258[10 + arg1].unk_03E -= 18; - player->unk_258[10 + arg1].unk_000[1] -= 0.1; + player->particles[10 + arg1].scale += 0.2; + if (player->particles[10 + arg1].timer >= 4) { + player->particles[10 + arg1].alpha -= 18; + player->particles[10 + arg1].pos[1] -= 0.1; } else { - player->unk_258[10 + arg1].unk_000[1] += 0.4; + player->particles[10 + arg1].pos[1] += 0.4; } - if (player->unk_258[10 + arg1].unk_03E <= 0) { - player->unk_258[10 + arg1].unk_03E = 0; + if (player->particles[10 + arg1].alpha <= 0) { + player->particles[10 + arg1].alpha = 0; } } @@ -4591,23 +4591,23 @@ void func_80063FBC(Player* player, s16 arg1, UNUSED s32 arg2, UNUSED s32 arg3) { f32 sp38; f32 sp34; - if (player->unk_258[10 + arg1].unk_010 == 1) { + if (player->particles[10 + arg1].unk_010 == 1) { func_80062B18(&sp3C, &sp34, &sp38, 3.0f, 0.0f, - -5.5 - (player->unk_258[10 + arg1].unk_01E * (((player->speed / 18.0f) * 216.0f) / 15.0f)), - -player->unk_258[10 + arg1].unk_020, 0); + -5.5 - (player->particles[10 + arg1].timer * (((player->speed / 18.0f) * 216.0f) / 15.0f)), + -player->particles[10 + arg1].rotation, 0); } else { func_80062B18(&sp3C, &sp34, &sp38, -3.0f, 0.0f, - -5.5 - (player->unk_258[10 + arg1].unk_01E * (((player->speed / 18.0f) * 216.0f) / 15.0f)), - -player->unk_258[10 + arg1].unk_020, 0); + -5.5 - (player->particles[10 + arg1].timer * (((player->speed / 18.0f) * 216.0f) / 15.0f)), + -player->particles[10 + arg1].rotation, 0); } - player->unk_258[10 + arg1].unk_000[0] = player->pos[0] + sp3C; - player->unk_258[10 + arg1].unk_000[2] = player->pos[2] + sp38; - player->unk_258[10 + arg1].unk_000[1] = (player->pos[1] - player->boundingBoxSize) + sp34; - player->unk_258[10 + arg1].unk_01E++; - if (player->unk_258[10 + arg1].unk_01E == 6) { - player->unk_258[10 + arg1].unk_01C = 0; - player->unk_258[10 + arg1].unk_01E = 0; - player->unk_258[10 + arg1].unk_012 = 0; + player->particles[10 + arg1].pos[0] = player->pos[0] + sp3C; + player->particles[10 + arg1].pos[2] = player->pos[2] + sp38; + player->particles[10 + arg1].pos[1] = (player->pos[1] - player->boundingBoxSize) + sp34; + player->particles[10 + arg1].timer++; + if (player->particles[10 + arg1].timer == 6) { + player->particles[10 + arg1].IsAlive = 0; + player->particles[10 + arg1].timer = 0; + player->particles[10 + arg1].type = 0; } } @@ -4622,47 +4622,47 @@ void func_80064184(Player* player, s16 arg1, s8 arg2, UNUSED s8 arg3) { } func_80062B18(&sp44, &sp40, &sp3C, 0.0f, sp40, - -4.0f + ((-player->unk_258[arg1].unk_01E * (player->speed / 18.0f) * 216.0f) / 10.0f), - -player->unk_258[arg1].unk_020, 2 * -player->unk_206); - player->unk_258[arg1].unk_000[0] = player->pos[0] + sp44; - player->unk_258[arg1].unk_000[2] = player->pos[2] + sp3C; - player->unk_258[arg1].unk_000[1] = player->pos[1] + sp40; - ++player->unk_258[arg1].unk_01E; - if ((player->unk_258[arg1].unk_01E == 12) || (D_801652A0[arg2] <= (player->pos[1] - player->boundingBoxSize))) { - player->unk_258[arg1].unk_01C = 0; - player->unk_258[arg1].unk_01E = 0; - player->unk_258[arg1].unk_012 = 0; + -4.0f + ((-player->particles[arg1].timer * (player->speed / 18.0f) * 216.0f) / 10.0f), + -player->particles[arg1].rotation, 2 * -player->unk_206); + player->particles[arg1].pos[0] = player->pos[0] + sp44; + player->particles[arg1].pos[2] = player->pos[2] + sp3C; + player->particles[arg1].pos[1] = player->pos[1] + sp40; + ++player->particles[arg1].timer; + if ((player->particles[arg1].timer == 12) || (D_801652A0[arg2] <= (player->pos[1] - player->boundingBoxSize))) { + player->particles[arg1].IsAlive = 0; + player->particles[arg1].timer = 0; + player->particles[arg1].type = 0; } - player->unk_258[arg1].unk_018 = 2.0f; - player->unk_258[arg1].unk_00C -= 0.35; - if (player->unk_258[arg1].unk_00C < 0.0f) { - player->unk_258[arg1].unk_00C = 0.0f; + player->particles[arg1].unk_018 = 2.0f; + player->particles[arg1].scale -= 0.35; + if (player->particles[arg1].scale < 0.0f) { + player->particles[arg1].scale = 0.0f; } - player->unk_258[arg1].unk_03E -= 22; - if (player->unk_258[arg1].unk_03E <= 0) { - player->unk_258[arg1].unk_03E = 0; + player->particles[arg1].alpha -= 22; + if (player->particles[arg1].alpha <= 0) { + player->particles[arg1].alpha = 0; } } void func_800643A8(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { - player->unk_258[10 + arg1].unk_000[2] = - player->pos[2] + (-1.2 * player->unk_258[10 + arg1].unk_01E * coss(player->unk_258[10 + arg1].unk_020)); - player->unk_258[10 + arg1].unk_000[0] = - player->pos[0] + (-1.2 * player->unk_258[10 + arg1].unk_01E * sins(player->unk_258[10 + arg1].unk_020)); - player->unk_258[10 + arg1].unk_000[1] = player->unk_258[10 + arg1].unk_000[1] + 0.5; + player->particles[10 + arg1].pos[2] = + player->pos[2] + (-1.2 * player->particles[10 + arg1].timer * coss(player->particles[10 + arg1].rotation)); + player->particles[10 + arg1].pos[0] = + player->pos[0] + (-1.2 * player->particles[10 + arg1].timer * sins(player->particles[10 + arg1].rotation)); + player->particles[10 + arg1].pos[1] = player->particles[10 + arg1].pos[1] + 0.5; - ++player->unk_258[10 + arg1].unk_01E; - if (player->unk_258[10 + arg1].unk_01E == 10) { - player->unk_258[10 + arg1].unk_01C = 0; - player->unk_258[10 + arg1].unk_01E = 0; - player->unk_258[10 + arg1].unk_012 = 0; + ++player->particles[10 + arg1].timer; + if (player->particles[10 + arg1].timer == 10) { + player->particles[10 + arg1].IsAlive = 0; + player->particles[10 + arg1].timer = 0; + player->particles[10 + arg1].type = 0; } - player->unk_258[10 + arg1].unk_00C += 0.2; - player->unk_258[10 + arg1].unk_03E -= 8; - if (player->unk_258[10 + arg1].unk_03E <= 0) { - player->unk_258[10 + arg1].unk_03E = 0; + player->particles[10 + arg1].scale += 0.2; + player->particles[10 + arg1].alpha -= 8; + if (player->particles[10 + arg1].alpha <= 0) { + player->particles[10 + arg1].alpha = 0; } } @@ -4672,27 +4672,27 @@ void func_800644E8(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { s32 thing; UNUSED s32 stackPadding1; - if (player->unk_258[30 + arg1].unk_01E >= 9) { - player->unk_258[30 + arg1].unk_01E = 9; + if (player->particles[30 + arg1].timer >= 9) { + player->particles[30 + arg1].timer = 9; } - thing2 = player->unk_258[30 + arg1].unk_024; - thing = player->unk_258[30 + arg1].unk_01E; - player->unk_258[30 + arg1].unk_000[2] = - player->pos[2] + (coss(player->unk_258[30 + arg1].unk_020) * (-0.7 * thing)); - player->unk_258[30 + arg1].unk_000[0] = - player->pos[0] + (sins(player->unk_258[30 + arg1].unk_020) * (-0.7 * thing)); - player->unk_258[30 + arg1].unk_01E++; - player->unk_258[30 + arg1].unk_000[1] = - player->unk_258[30 + arg1].unk_028 + (f32) ((thing * thing2) - (0.2 * (thing * thing))); - if (player->unk_258[30 + arg1].unk_01E == 0x000A) { - player->unk_258[30 + arg1].unk_01E = 0; - player->unk_258[30 + arg1].unk_01C = 0; - player->unk_258[30 + arg1].unk_012 = 0; + thing2 = player->particles[30 + arg1].unk_024; + thing = player->particles[30 + arg1].timer; + player->particles[30 + arg1].pos[2] = + player->pos[2] + (coss(player->particles[30 + arg1].rotation) * (-0.7 * thing)); + player->particles[30 + arg1].pos[0] = + player->pos[0] + (sins(player->particles[30 + arg1].rotation) * (-0.7 * thing)); + player->particles[30 + arg1].timer++; + player->particles[30 + arg1].pos[1] = + player->particles[30 + arg1].unk_028 + (f32) ((thing * thing2) - (0.2 * (thing * thing))); + if (player->particles[30 + arg1].timer == 0x000A) { + player->particles[30 + arg1].timer = 0; + player->particles[30 + arg1].IsAlive = 0; + player->particles[30 + arg1].type = 0; } - if (player->unk_258[30 + arg1].unk_01E >= 7) { - player->unk_258[30 + arg1].unk_03E -= 0x60; - if (player->unk_258[30 + arg1].unk_03E <= 0) { - player->unk_258[30 + arg1].unk_03E = 0; + if (player->particles[30 + arg1].timer >= 7) { + player->particles[30 + arg1].alpha -= 0x60; + if (player->particles[30 + arg1].alpha <= 0) { + player->particles[30 + arg1].alpha = 0; } } } @@ -4703,262 +4703,262 @@ void func_80064664(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { s32 temp_v1; UNUSED s32 stackPadding1; - temp_v1 = player->unk_258[30 + arg1].unk_01E; - temp_f4 = player->unk_258[30 + arg1].unk_024; - player->unk_258[30 + arg1].unk_000[2] = - player->pos[2] + (coss(player->unk_258[30 + arg1].unk_020) * (-0.6 * temp_v1)); - player->unk_258[30 + arg1].unk_000[0] = - player->pos[0] + (sins(player->unk_258[30 + arg1].unk_020) * (-0.6 * temp_v1)); - player->unk_258[30 + arg1].unk_01E++; - player->unk_258[30 + arg1].unk_000[1] = - player->unk_258[30 + arg1].unk_028 + (f32) ((temp_v1 * temp_f4) - (0.1 * (temp_v1 * temp_v1))); - if (player->unk_258[30 + arg1].unk_01E == 0x0019) { - player->unk_258[30 + arg1].unk_01E = 0; - player->unk_258[30 + arg1].unk_01C = 0; - player->unk_258[30 + arg1].unk_012 = 0; + temp_v1 = player->particles[30 + arg1].timer; + temp_f4 = player->particles[30 + arg1].unk_024; + player->particles[30 + arg1].pos[2] = + player->pos[2] + (coss(player->particles[30 + arg1].rotation) * (-0.6 * temp_v1)); + player->particles[30 + arg1].pos[0] = + player->pos[0] + (sins(player->particles[30 + arg1].rotation) * (-0.6 * temp_v1)); + player->particles[30 + arg1].timer++; + player->particles[30 + arg1].pos[1] = + player->particles[30 + arg1].unk_028 + (f32) ((temp_v1 * temp_f4) - (0.1 * (temp_v1 * temp_v1))); + if (player->particles[30 + arg1].timer == 0x0019) { + player->particles[30 + arg1].timer = 0; + player->particles[30 + arg1].IsAlive = 0; + player->particles[30 + arg1].type = 0; } - if (player->unk_258[30 + arg1].unk_01E >= 7) { - player->unk_258[30 + arg1].unk_03E -= 0x6; - if (player->unk_258[30 + arg1].unk_03E <= 0) { - player->unk_258[30 + arg1].unk_03E = 0; + if (player->particles[30 + arg1].timer >= 7) { + player->particles[30 + arg1].alpha -= 0x6; + if (player->particles[30 + arg1].alpha <= 0) { + player->particles[30 + arg1].alpha = 0; } } } void func_800647C8(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { - ++player->unk_258[30 + arg1].unk_01E; - player->unk_258[30 + arg1].unk_000[2] = - player->pos[2] + ((-0.8 * (player->unk_258[30 + arg1].unk_01E)) * coss(player->unk_258[30 + arg1].unk_020)); - player->unk_258[30 + arg1].unk_000[0] = - player->pos[0] + ((-0.8 * (player->unk_258[30 + arg1].unk_01E)) * sins(player->unk_258[30 + arg1].unk_020)); - player->unk_258[30 + arg1].unk_000[1] = (player->unk_074 + 2.0f); + ++player->particles[30 + arg1].timer; + player->particles[30 + arg1].pos[2] = + player->pos[2] + ((-0.8 * (player->particles[30 + arg1].timer)) * coss(player->particles[30 + arg1].rotation)); + player->particles[30 + arg1].pos[0] = + player->pos[0] + ((-0.8 * (player->particles[30 + arg1].timer)) * sins(player->particles[30 + arg1].rotation)); + player->particles[30 + arg1].pos[1] = (player->unk_074 + 2.0f); - if (player->unk_258[30 + arg1].unk_01E == 14) { - player->unk_258[30 + arg1].unk_01C = 0; - player->unk_258[30 + arg1].unk_01E = 0; - player->unk_258[30 + arg1].unk_012 = 0; + if (player->particles[30 + arg1].timer == 14) { + player->particles[30 + arg1].IsAlive = 0; + player->particles[30 + arg1].timer = 0; + player->particles[30 + arg1].type = 0; } - player->unk_258[30 + arg1].unk_03E -= 12; - if (player->unk_258[30 + arg1].unk_03E <= 0) { - player->unk_258[30 + arg1].unk_03E = 0; + player->particles[30 + arg1].alpha -= 12; + if (player->particles[30 + arg1].alpha <= 0) { + player->particles[30 + arg1].alpha = 0; } } void func_800648E4(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { - ++player->unk_258[30 + arg1].unk_01E; - player->unk_258[30 + arg1].unk_00C -= 0.06; - player->unk_258[30 + arg1].unk_000[1] += 0.1; - player->unk_258[30 + arg1].unk_03E -= 12; + ++player->particles[30 + arg1].timer; + player->particles[30 + arg1].scale -= 0.06; + player->particles[30 + arg1].pos[1] += 0.1; + player->particles[30 + arg1].alpha -= 12; - if (player->unk_258[30 + arg1].unk_03E <= 0) { - player->unk_258[30 + arg1].unk_03E = 0; + if (player->particles[30 + arg1].alpha <= 0) { + player->particles[30 + arg1].alpha = 0; } - if (player->unk_258[30 + arg1].unk_01E == 10) { - player->unk_258[30 + arg1].unk_01C = 0; - player->unk_258[30 + arg1].unk_01E = 0; - player->unk_258[30 + arg1].unk_012 = 0; + if (player->particles[30 + arg1].timer == 10) { + player->particles[30 + arg1].IsAlive = 0; + player->particles[30 + arg1].timer = 0; + player->particles[30 + arg1].type = 0; } } void func_80064988(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { - ++player->unk_258[30 + arg1].unk_01E; - player->unk_258[30 + arg1].unk_000[1] -= 0.3; + ++player->particles[30 + arg1].timer; + player->particles[30 + arg1].pos[1] -= 0.3; - if (player->unk_258[30 + arg1].unk_01E == 10) { - player->unk_258[30 + arg1].unk_01C = 0; - player->unk_258[30 + arg1].unk_01E = 0; - player->unk_258[30 + arg1].unk_012 = 0; + if (player->particles[30 + arg1].timer == 10) { + player->particles[30 + arg1].IsAlive = 0; + player->particles[30 + arg1].timer = 0; + player->particles[30 + arg1].type = 0; } } void func_800649F4(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { f32 temp; - temp = player->unk_258[30 + arg1].unk_018; + temp = player->particles[30 + arg1].unk_018; - player->unk_258[30 + arg1].unk_000[2] = - player->unk_21C + (((-temp) * player->unk_258[30 + arg1].unk_01E) * coss(player->unk_258[30 + arg1].unk_020)); - player->unk_258[30 + arg1].unk_000[0] = - player->unk_218 + (((-temp) * player->unk_258[30 + arg1].unk_01E) * sins(player->unk_258[30 + arg1].unk_020)); - player->unk_258[30 + arg1].unk_000[1] = player->pos[1] + player->unk_258[30 + arg1].unk_014; - player->unk_258[30 + arg1].unk_00C += 0.04; + player->particles[30 + arg1].pos[2] = + player->unk_21C + (((-temp) * player->particles[30 + arg1].timer) * coss(player->particles[30 + arg1].rotation)); + player->particles[30 + arg1].pos[0] = + player->unk_218 + (((-temp) * player->particles[30 + arg1].timer) * sins(player->particles[30 + arg1].rotation)); + player->particles[30 + arg1].pos[1] = player->pos[1] + player->particles[30 + arg1].unk_014; + player->particles[30 + arg1].scale += 0.04; - ++player->unk_258[30 + arg1].unk_01E; - if (player->unk_258[30 + arg1].unk_01E == 12) { - player->unk_258[30 + arg1].unk_01E = 0; - player->unk_258[30 + arg1].unk_01C = 0; - player->unk_258[30 + arg1].unk_012 = 0; + ++player->particles[30 + arg1].timer; + if (player->particles[30 + arg1].timer == 12) { + player->particles[30 + arg1].timer = 0; + player->particles[30 + arg1].IsAlive = 0; + player->particles[30 + arg1].type = 0; } - if (player->unk_258[30 + arg1].unk_01E >= 9) { - player->unk_258[30 + arg1].unk_03E -= 0x10; - if (player->unk_258[30 + arg1].unk_03E <= 0) { - player->unk_258[30 + arg1].unk_03E = 0; + if (player->particles[30 + arg1].timer >= 9) { + player->particles[30 + arg1].alpha -= 0x10; + if (player->particles[30 + arg1].alpha <= 0) { + player->particles[30 + arg1].alpha = 0; } } } void func_80064B30(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { f32 temp; - temp = player->unk_258[30 + arg1].unk_018 * 1.2; + temp = player->particles[30 + arg1].unk_018 * 1.2; - player->unk_258[30 + arg1].unk_000[2] = - (player->pos[2] + (-temp * player->unk_258[30 + arg1].unk_01E) * (coss(player->unk_258[30 + arg1].unk_020))); - player->unk_258[30 + arg1].unk_000[0] = - (player->pos[0] + (-temp * player->unk_258[30 + arg1].unk_01E) * (sins(player->unk_258[30 + arg1].unk_020))); - player->unk_258[30 + arg1].unk_000[1] += 0.1; + player->particles[30 + arg1].pos[2] = + (player->pos[2] + (-temp * player->particles[30 + arg1].timer) * (coss(player->particles[30 + arg1].rotation))); + player->particles[30 + arg1].pos[0] = + (player->pos[0] + (-temp * player->particles[30 + arg1].timer) * (sins(player->particles[30 + arg1].rotation))); + player->particles[30 + arg1].pos[1] += 0.1; - ++player->unk_258[30 + arg1].unk_01E; - if (player->unk_258[30 + arg1].unk_01E == 10) { - player->unk_258[30 + arg1].unk_01E = 0; - player->unk_258[30 + arg1].unk_01C = 0; - player->unk_258[30 + arg1].unk_012 = 0; + ++player->particles[30 + arg1].timer; + if (player->particles[30 + arg1].timer == 10) { + player->particles[30 + arg1].timer = 0; + player->particles[30 + arg1].IsAlive = 0; + player->particles[30 + arg1].type = 0; } - player->unk_258[30 + arg1].unk_038 += 1820; - if (player->unk_258[30 + arg1].unk_01E >= 6) { - player->unk_258[30 + arg1].unk_03E -= 16; - if (player->unk_258[30 + arg1].unk_03E <= 0) { - player->unk_258[30 + arg1].unk_03E = 0; + player->particles[30 + arg1].red += 1820; + if (player->particles[30 + arg1].timer >= 6) { + player->particles[30 + arg1].alpha -= 16; + if (player->particles[30 + arg1].alpha <= 0) { + player->particles[30 + arg1].alpha = 0; } } } void func_80064C74(Player* player, s16 arg1, UNUSED s8 arg2, UNUSED s8 arg3) { - if (player->unk_258[30 + arg1].unk_010 == 1) { - player->unk_258[30 + arg1].unk_020 += 2184; + if (player->particles[30 + arg1].unk_010 == 1) { + player->particles[30 + arg1].rotation += 2184; } else { - player->unk_258[30 + arg1].unk_020 -= 2184; + player->particles[30 + arg1].rotation -= 2184; } - player->unk_258[30 + arg1].unk_000[2] = - player->pos[2] + (coss(player->unk_258[30 + arg1].unk_020 - player->rotation[1] - player->unk_0C0) * 5.0f); - player->unk_258[30 + arg1].unk_000[0] = - player->pos[0] + (sins(player->unk_258[30 + arg1].unk_020 - player->rotation[1] - player->unk_0C0) * 5.0f); - player->unk_258[30 + arg1].unk_000[1] = player->pos[1] - 1.0f; - player->unk_258[30 + arg1].unk_00C += 0.4; - ++player->unk_258[30 + arg1].unk_01E; + player->particles[30 + arg1].pos[2] = + player->pos[2] + (coss(player->particles[30 + arg1].rotation - player->rotation[1] - player->unk_0C0) * 5.0f); + player->particles[30 + arg1].pos[0] = + player->pos[0] + (sins(player->particles[30 + arg1].rotation - player->rotation[1] - player->unk_0C0) * 5.0f); + player->particles[30 + arg1].pos[1] = player->pos[1] - 1.0f; + player->particles[30 + arg1].scale += 0.4; + ++player->particles[30 + arg1].timer; - if (player->unk_258[30 + arg1].unk_01E == 10) { - player->unk_258[30 + arg1].unk_01E = 0; - player->unk_258[30 + arg1].unk_01C = 0; - player->unk_258[30 + arg1].unk_012 = 0; + if (player->particles[30 + arg1].timer == 10) { + player->particles[30 + arg1].timer = 0; + player->particles[30 + arg1].IsAlive = 0; + player->particles[30 + arg1].type = 0; } - if (player->unk_258[30 + arg1].unk_01E >= 5) { - player->unk_258[30 + arg1].unk_03E -= 20; - if (player->unk_258[30 + arg1].unk_03E <= 0) { - player->unk_258[30 + arg1].unk_03E = 0; + if (player->particles[30 + arg1].timer >= 5) { + player->particles[30 + arg1].alpha -= 20; + if (player->particles[30 + arg1].alpha <= 0) { + player->particles[30 + arg1].alpha = 0; } } } void func_80064DEC(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { - player->unk_258[20 + arg3].unk_000[1] = player->pos[1]; - ++player->unk_258[20 + arg3].unk_01E; + player->particles[20 + arg3].pos[1] = player->pos[1]; + ++player->particles[20 + arg3].timer; - if (player->unk_258[20 + arg3].unk_01E == 9) { + if (player->particles[20 + arg3].timer == 9) { player->unk_0B6 &= ~0x0040; - player->unk_258[20 + arg3].unk_01C = 0; - player->unk_258[20 + arg3].unk_01E = 0; - player->unk_258[20 + arg3].unk_012 = 0; + player->particles[20 + arg3].IsAlive = 0; + player->particles[20 + arg3].timer = 0; + player->particles[20 + arg3].type = 0; } - player->unk_258[20 + arg3].unk_00C += 0.8; - if (player->unk_258[20 + arg3].unk_00C >= (f64) 2.5) { - player->unk_258[20 + arg3].unk_00C = 2.5f; + player->particles[20 + arg3].scale += 0.8; + if (player->particles[20 + arg3].scale >= (f64) 2.5) { + player->particles[20 + arg3].scale = 2.5f; } } void func_80064EA4(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { - ++player->unk_258[20 + arg3].unk_01E; - if (player->unk_258[20 + arg3].unk_01E < 4) { - player->unk_258[20 + arg3].unk_00C += 1.2; - if (player->unk_258[20 + arg3].unk_00C >= 3.5) { - player->unk_258[20 + arg3].unk_00C = 3.5f; + ++player->particles[20 + arg3].timer; + if (player->particles[20 + arg3].timer < 4) { + player->particles[20 + arg3].scale += 1.2; + if (player->particles[20 + arg3].scale >= 3.5) { + player->particles[20 + arg3].scale = 3.5f; } } else { - player->unk_258[20 + arg3].unk_00C -= 1.8; - if (player->unk_258[20 + arg3].unk_00C <= 0.0f) { + player->particles[20 + arg3].scale -= 1.8; + if (player->particles[20 + arg3].scale <= 0.0f) { player->unk_0B6 &= ~0x1000; - player->unk_258[20 + arg3].unk_01C = 0; - player->unk_258[20 + arg3].unk_01E = 0; - player->unk_258[20 + arg3].unk_012 = 0; + player->particles[20 + arg3].IsAlive = 0; + player->particles[20 + arg3].timer = 0; + player->particles[20 + arg3].type = 0; } } } void func_80064F88(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { - ++player->unk_258[20 + arg3].unk_01E; - player->unk_258[20 + arg3].unk_00C += 0.15; + ++player->particles[20 + arg3].timer; + player->particles[20 + arg3].scale += 0.15; - if (1.2 <= player->unk_258[20 + arg3].unk_00C) { - player->unk_258[20 + arg3].unk_00C = 1.2f; + if (1.2 <= player->particles[20 + arg3].scale) { + player->particles[20 + arg3].scale = 1.2f; } - if (player->unk_258[20 + arg3].unk_01E >= 12) { + if (player->particles[20 + arg3].timer >= 12) { player->unk_0B6 &= ~0x0800; - player->unk_258[20 + arg3].unk_01C = 0; - player->unk_258[20 + arg3].unk_01E = 0; - player->unk_258[20 + arg3].unk_012 = 0; + player->particles[20 + arg3].IsAlive = 0; + player->particles[20 + arg3].timer = 0; + player->particles[20 + arg3].type = 0; } } void func_80065030(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { - ++player->unk_258[20 + arg3].unk_01E; + ++player->particles[20 + arg3].timer; - player->unk_258[20 + arg3].unk_000[1] += 0.8; - player->unk_258[20 + arg3].unk_00C += 0.4; - if (player->unk_258[20 + arg3].unk_00C >= (f64) 1.5) { - player->unk_258[20 + arg3].unk_00C = 1.5f; + player->particles[20 + arg3].pos[1] += 0.8; + player->particles[20 + arg3].scale += 0.4; + if (player->particles[20 + arg3].scale >= (f64) 1.5) { + player->particles[20 + arg3].scale = 1.5f; } - if (player->unk_258[20 + arg3].unk_01E >= 12) { + if (player->particles[20 + arg3].timer >= 12) { player->unk_0B6 &= ~0x0100; - player->unk_258[20 + arg3].unk_01C = 0; - player->unk_258[20 + arg3].unk_01E = 0; - player->unk_258[20 + arg3].unk_012 = 0; + player->particles[20 + arg3].IsAlive = 0; + player->particles[20 + arg3].timer = 0; + player->particles[20 + arg3].type = 0; } } void func_800650FC(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { - player->unk_258[20 + arg3].unk_000[2] = (f32) player->pos[2]; - player->unk_258[20 + arg3].unk_000[0] = (f32) player->pos[0]; - player->unk_258[20 + arg3].unk_000[1] = (f32) (player->pos[1] + 4.0f); + player->particles[20 + arg3].pos[2] = (f32) player->pos[2]; + player->particles[20 + arg3].pos[0] = (f32) player->pos[0]; + player->particles[20 + arg3].pos[1] = (f32) (player->pos[1] + 4.0f); if ((player->effects & 0x80) == 0x80) { - player->unk_258[20 + arg3].unk_020 += 4732; + player->particles[20 + arg3].rotation += 4732; } else { - player->unk_258[20 + arg3].unk_020 -= 4732; + player->particles[20 + arg3].rotation -= 4732; } if (((player->effects & 0x80) != 0x80) && ((player->effects & 0x40) != 0x40)) { - player->unk_258[20 + arg3].unk_01C = 0; - player->unk_258[20 + arg3].unk_01E = 0; - player->unk_258[20 + arg3].unk_012 = 0; + player->particles[20 + arg3].IsAlive = 0; + player->particles[20 + arg3].timer = 0; + player->particles[20 + arg3].type = 0; } - player->unk_258[20 + arg3].unk_00C += 0.08; - if (player->unk_258[20 + arg3].unk_00C >= 1.5) { - player->unk_258[20 + arg3].unk_00C = 1.5f; + player->particles[20 + arg3].scale += 0.08; + if (player->particles[20 + arg3].scale >= 1.5) { + player->particles[20 + arg3].scale = 1.5f; } } void func_800651F4(Player* player, UNUSED s8 arg1, UNUSED s8 arg2, s8 arg3) { - ++player->unk_258[20 + arg3].unk_01E; - if (player->unk_258[20 + arg3].unk_01E < 8) { - player->unk_258[20 + arg3].unk_00C += 0.2; - if (1.2 <= player->unk_258[20 + arg3].unk_00C) { - player->unk_258[20 + arg3].unk_00C = 1.2f; + ++player->particles[20 + arg3].timer; + if (player->particles[20 + arg3].timer < 8) { + player->particles[20 + arg3].scale += 0.2; + if (1.2 <= player->particles[20 + arg3].scale) { + player->particles[20 + arg3].scale = 1.2f; } } else { - player->unk_258[20 + arg3].unk_00C -= 0.4; - if (player->unk_258[20 + arg3].unk_00C <= 0.0f) { + player->particles[20 + arg3].scale -= 0.4; + if (player->particles[20 + arg3].scale <= 0.0f) { player->unk_0B6 &= ~0x0020; - player->unk_258[20 + arg3].unk_01C = 0; - player->unk_258[20 + arg3].unk_01E = 0; - player->unk_258[20 + arg3].unk_012 = 0; + player->particles[20 + arg3].IsAlive = 0; + player->particles[20 + arg3].timer = 0; + player->particles[20 + arg3].type = 0; } } } @@ -4986,10 +4986,10 @@ void func_8006538C(Player* player, s8 playerIndex, s16 arg2, s8 arg3) { s16 envGreen; s16 envBlue; - if (player->unk_258[arg2].unk_01C == 1) { - spB4[0] = player->unk_258[arg2].unk_000[0]; - spB4[1] = player->unk_258[arg2].unk_000[1]; - spB4[2] = player->unk_258[arg2].unk_000[2]; + if (player->particles[arg2].IsAlive == 1) { + spB4[0] = player->particles[arg2].pos[0]; + spB4[1] = player->particles[arg2].pos[1]; + spB4[2] = player->particles[arg2].pos[2]; spAC[0] = 0; spAC[1] = player->unk_048[arg3]; spAC[2] = 0; @@ -5000,26 +5000,26 @@ void func_8006538C(Player* player, s8 playerIndex, s16 arg2, s8 arg3) { envRed = (envColors[1] >> 0x10) & 0xFF; envGreen = (envColors[1] >> 0x08) & 0xFF; envBlue = (envColors[1] >> 0x00) & 0xFF; - primAlpha = player->unk_258[arg2].unk_03E; - func_800652D4(spB4, spAC, ((player->unk_258[arg2].unk_00C * player->size) * 1.4)); + primAlpha = player->particles[arg2].alpha; + func_800652D4(spB4, spAC, ((player->particles[arg2].scale * player->size) * 1.4)); gSPDisplayList(gDisplayListHead++, D_0D008DB8); - gDPLoadTextureBlock(gDisplayListHead++, common_texture_particle_smoke[player->unk_258[arg2].unk_010], + gDPLoadTextureBlock(gDisplayListHead++, common_texture_particle_smoke[player->particles[arg2].unk_010], G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); func_8004B72C(primRed, primGreen, primBlue, envRed, envGreen, envBlue, primAlpha); gDPSetAlphaCompare(gDisplayListHead++, G_AC_DITHER); gSPDisplayList(gDisplayListHead++, D_0D008E48); } else { - primRed = (primColors[player->unk_258[arg2].unk_038] >> 0x10) & 0xFF; - primGreen = (primColors[player->unk_258[arg2].unk_038] >> 0x08) & 0xFF; - primBlue = (primColors[player->unk_258[arg2].unk_038] >> 0x00) & 0xFF; - envRed = (envColors[player->unk_258[arg2].unk_038] >> 0x10) & 0xFF; - envGreen = (envColors[player->unk_258[arg2].unk_038] >> 0x08) & 0xFF; - envBlue = (envColors[player->unk_258[arg2].unk_038] >> 0x00) & 0xFF; - primAlpha = player->unk_258[arg2].unk_03E; - func_800652D4(spB4, spAC, player->unk_258[arg2].unk_00C * player->size); + primRed = (primColors[player->particles[arg2].red] >> 0x10) & 0xFF; + primGreen = (primColors[player->particles[arg2].red] >> 0x08) & 0xFF; + primBlue = (primColors[player->particles[arg2].red] >> 0x00) & 0xFF; + envRed = (envColors[player->particles[arg2].red] >> 0x10) & 0xFF; + envGreen = (envColors[player->particles[arg2].red] >> 0x08) & 0xFF; + envBlue = (envColors[player->particles[arg2].red] >> 0x00) & 0xFF; + primAlpha = player->particles[arg2].alpha; + func_800652D4(spB4, spAC, player->particles[arg2].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008DB8); - gDPLoadTextureBlock(gDisplayListHead++, common_texture_particle_smoke[player->unk_258[arg2].unk_010], + gDPLoadTextureBlock(gDisplayListHead++, common_texture_particle_smoke[player->particles[arg2].unk_010], G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); func_8004B72C(primRed, primGreen, primBlue, envRed, envGreen, envBlue, primAlpha); @@ -5037,18 +5037,18 @@ void func_800658A0(Player* player, UNUSED s8 playerIndex, s16 arg2, s8 arg3) { s16 blue; s16 alpha; - if (player->unk_258[arg2].unk_01C == 1) { - red = player->unk_258[arg2].unk_038; - green = player->unk_258[arg2].unk_03A; - blue = player->unk_258[arg2].unk_03C; - alpha = player->unk_258[arg2].unk_03E; - sp54[0] = player->unk_258[arg2].unk_000[0]; - sp54[1] = player->unk_258[arg2].unk_000[1]; - sp54[2] = player->unk_258[arg2].unk_000[2]; + if (player->particles[arg2].IsAlive == 1) { + red = player->particles[arg2].red; + green = player->particles[arg2].green; + blue = player->particles[arg2].blue; + alpha = player->particles[arg2].alpha; + sp54[0] = player->particles[arg2].pos[0]; + sp54[1] = player->particles[arg2].pos[1]; + sp54[2] = player->particles[arg2].pos[2]; sp4C[0] = 0; sp4C[1] = player->unk_048[arg3]; sp4C[2] = 0; - func_800652D4(sp54, sp4C, player->unk_258[arg2].unk_00C * player->size); + func_800652D4(sp54, sp4C, player->particles[arg2].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008DB8); gDPLoadTextureBlock(gDisplayListHead++, D_8018D48C, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, @@ -5071,26 +5071,26 @@ void func_80065AB0(Player* player, UNUSED s8 playerIndex, s16 arg2, s8 arg3) { s16 envGreen; s16 envBlue; s32 sp8C[] = { 0x00ffffff, 0x00ffff00, 0x00ff9600 }; - if (player->unk_258[10 + arg2].unk_01C == 1) { + if (player->particles[10 + arg2].IsAlive == 1) { if (player->unk_204 >= 0x32) { var_s0 = 1; } else { var_s0 = 0; } - primRed = player->unk_258[10 + arg2].unk_038; - primGreen = player->unk_258[10 + arg2].unk_03A; - primBlue = player->unk_258[10 + arg2].unk_03C; - primAlpha = player->unk_258[10 + arg2].unk_03E; - envRed = (sp8C[player->unk_258[10 + arg2].unk_040] >> 0x10) & 0xFF; - envGreen = (sp8C[player->unk_258[10 + arg2].unk_040] >> 0x08) & 0xFF; - envBlue = (sp8C[player->unk_258[10 + arg2].unk_040] >> 0x00) & 0xFF; - spB4[0] = player->unk_258[10 + arg2].unk_000[0]; - spB4[1] = player->unk_258[10 + arg2].unk_000[1]; - spB4[2] = player->unk_258[10 + arg2].unk_000[2]; + primRed = player->particles[10 + arg2].red; + primGreen = player->particles[10 + arg2].green; + primBlue = player->particles[10 + arg2].blue; + primAlpha = player->particles[10 + arg2].alpha; + envRed = (sp8C[player->particles[10 + arg2].unk_040] >> 0x10) & 0xFF; + envGreen = (sp8C[player->particles[10 + arg2].unk_040] >> 0x08) & 0xFF; + envBlue = (sp8C[player->particles[10 + arg2].unk_040] >> 0x00) & 0xFF; + spB4[0] = player->particles[10 + arg2].pos[0]; + spB4[1] = player->particles[10 + arg2].pos[1]; + spB4[2] = player->particles[10 + arg2].pos[2]; spAC[0] = 0; spAC[1] = player->unk_048[arg3]; spAC[2] = 0; - func_800652D4(spB4, spAC, player->unk_258[10 + arg2].unk_00C * player->size); + func_800652D4(spB4, spAC, player->particles[10 + arg2].scale * player->size); if (var_s0 == 0) { gSPDisplayList(gDisplayListHead++, D_0D008DB8); gDPLoadTextureBlock(gDisplayListHead++, D_800E4770[var_s0][0], G_IM_FMT_I, G_IM_SIZ_8b, 16, 16, 0, @@ -5122,23 +5122,23 @@ void func_80065F0C(Player* player, UNUSED s8 playerIndex, s16 arg2, s8 arg3) { s16 envRed; s16 envGreen; s16 envBlue; - if ((player->unk_258[10 + arg2].unk_01C == 1) && (player->unk_258[10 + arg2].unk_01E != 0)) { - spDC[0] = player->unk_258[10 + arg2].unk_000[0]; - spDC[1] = player->unk_258[10 + arg2].unk_000[1]; - spDC[2] = player->unk_258[10 + arg2].unk_000[2]; + if ((player->particles[10 + arg2].IsAlive == 1) && (player->particles[10 + arg2].timer != 0)) { + spDC[0] = player->particles[10 + arg2].pos[0]; + spDC[1] = player->particles[10 + arg2].pos[1]; + spDC[2] = player->particles[10 + arg2].pos[2]; spD4[0] = 0; spD4[1] = player->unk_048[arg3]; spD4[2] = 0; - func_800652D4(&spDC[0], &spD4[0], player->unk_258[10 + arg2].unk_00C * player->size); - if (((s32) player->unk_258[10 + arg2].unk_014) != 8) { - primRed = ((D_800E47DC[player->unk_258[10 + arg2].unk_038] >> 0x10) & 0xFF) - player->unk_258[10 + arg2].unk_03A; - primGreen = ((D_800E47DC[player->unk_258[10 + arg2].unk_038] >> 0x08) & 0xFF) - player->unk_258[10 + arg2].unk_03A; - primBlue = ((D_800E47DC[player->unk_258[10 + arg2].unk_038] >> 0x00) & 0xFF) - player->unk_258[10 + arg2].unk_03A; - envRed = ((D_800E480C[player->unk_258[10 + arg2].unk_038] >> 0x10) & 0xFF) - player->unk_258[10 + arg2].unk_03A; - envGreen = ((D_800E480C[player->unk_258[10 + arg2].unk_038] >> 0x08) & 0xFF) - player->unk_258[10 + arg2].unk_03A; - envBlue = ((D_800E480C[player->unk_258[10 + arg2].unk_038] >> 0x00) & 0xFF) - player->unk_258[10 + arg2].unk_03A; - primAlpha = player->unk_258[10 + arg2].unk_03E; - if (player->unk_258[10 + arg2].unk_040 == 0) { + func_800652D4(&spDC[0], &spD4[0], player->particles[10 + arg2].scale * player->size); + if (((s32) player->particles[10 + arg2].unk_014) != 8) { + primRed = ((D_800E47DC[player->particles[10 + arg2].red] >> 0x10) & 0xFF) - player->particles[10 + arg2].green; + primGreen = ((D_800E47DC[player->particles[10 + arg2].red] >> 0x08) & 0xFF) - player->particles[10 + arg2].green; + primBlue = ((D_800E47DC[player->particles[10 + arg2].red] >> 0x00) & 0xFF) - player->particles[10 + arg2].green; + envRed = ((D_800E480C[player->particles[10 + arg2].red] >> 0x10) & 0xFF) - player->particles[10 + arg2].green; + envGreen = ((D_800E480C[player->particles[10 + arg2].red] >> 0x08) & 0xFF) - player->particles[10 + arg2].green; + envBlue = ((D_800E480C[player->particles[10 + arg2].red] >> 0x00) & 0xFF) - player->particles[10 + arg2].green; + primAlpha = player->particles[10 + arg2].alpha; + if (player->particles[10 + arg2].unk_040 == 0) { gSPDisplayList(gDisplayListHead++, D_0D008DB8); gDPLoadTextureBlock(gDisplayListHead++, D_8018D494, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); func_8004B72C(primRed, primGreen, primBlue, envRed, envGreen, envBlue, primAlpha); @@ -5151,9 +5151,9 @@ void func_80065F0C(Player* player, UNUSED s8 playerIndex, s16 arg2, s8 arg3) { gSPDisplayList(gDisplayListHead++, D_0D008E48); } } else { - primRed = player->unk_258[10 + arg2].unk_038; - primGreen = player->unk_258[10 + arg2].unk_03A; - primBlue = player->unk_258[10 + arg2].unk_03C; + primRed = player->particles[10 + arg2].red; + primGreen = player->particles[10 + arg2].green; + primBlue = player->particles[10 + arg2].blue; gSPDisplayList(gDisplayListHead++, D_0D008C90); gDPSetTextureLUT(gDisplayListHead++, G_TT_NONE); gDPLoadTextureBlock(gDisplayListHead++, D_8018D498, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 64, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); @@ -5174,18 +5174,18 @@ void func_800664E0(Player* player, UNUSED s8 playerIndex, s16 arg2, s8 arg3) { s16 blue; s16 alpha; - if (player->unk_258[10 + arg2].unk_01C == 1) { - red = player->unk_258[10 + arg2].unk_038; - green = player->unk_258[10 + arg2].unk_03A; - blue = player->unk_258[10 + arg2].unk_03C; - alpha = player->unk_258[10 + arg2].unk_03E; - sp54[0] = player->unk_258[10 + arg2].unk_000[0]; - sp54[1] = player->unk_258[10 + arg2].unk_000[1]; - sp54[2] = player->unk_258[10 + arg2].unk_000[2]; + if (player->particles[10 + arg2].IsAlive == 1) { + red = player->particles[10 + arg2].red; + green = player->particles[10 + arg2].green; + blue = player->particles[10 + arg2].blue; + alpha = player->particles[10 + arg2].alpha; + sp54[0] = player->particles[10 + arg2].pos[0]; + sp54[1] = player->particles[10 + arg2].pos[1]; + sp54[2] = player->particles[10 + arg2].pos[2]; sp4C[0] = 0; sp4C[1] = player->unk_048[arg3]; sp4C[2] = 0; - func_800652D4(sp54, sp4C, player->unk_258[10 + arg2].unk_00C * player->size); + func_800652D4(sp54, sp4C, player->particles[10 + arg2].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008DB8); gDPSetAlphaCompare(gDisplayListHead++, G_AC_DITHER); gDPLoadTextureBlock(gDisplayListHead++, D_8018D48C, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0, @@ -5205,18 +5205,18 @@ void func_80066714(Player* player, UNUSED s32 arg1, s16 arg2, s8 arg3) { s16 blue; s16 alpha; - if (player->unk_258[10 + arg2].unk_01C == 1) { - red = player->unk_258[10 + arg2].unk_038; - green = player->unk_258[10 + arg2].unk_03A; - blue = player->unk_258[10 + arg2].unk_03C; - alpha = player->unk_258[10 + arg2].unk_03E; - sp5C[0] = player->unk_258[10 + arg2].unk_000[0]; - sp5C[1] = player->unk_258[10 + arg2].unk_000[1]; - sp5C[2] = player->unk_258[10 + arg2].unk_000[2]; + if (player->particles[10 + arg2].IsAlive == 1) { + red = player->particles[10 + arg2].red; + green = player->particles[10 + arg2].green; + blue = player->particles[10 + arg2].blue; + alpha = player->particles[10 + arg2].alpha; + sp5C[0] = player->particles[10 + arg2].pos[0]; + sp5C[1] = player->particles[10 + arg2].pos[1]; + sp5C[2] = player->particles[10 + arg2].pos[2]; sp54[0] = 0; sp54[1] = player->unk_048[arg3]; sp54[2] = 0; - func_800652D4(sp5C, sp54, player->unk_258[10 + arg2].unk_00C * player->size); + func_800652D4(sp5C, sp54, player->particles[10 + arg2].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008C90); gDPSetTextureLUT(gDisplayListHead++, G_TT_NONE); gDPLoadTextureBlock(gDisplayListHead++, common_texture_particle_fire, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 64, 0, @@ -5238,18 +5238,18 @@ void func_80066998(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { s16 blue; s16 alpha; - if (player->unk_258[arg2].unk_01C == 1) { - red = player->unk_258[arg2].unk_038; - green = player->unk_258[arg2].unk_03A; - blue = player->unk_258[arg2].unk_03C; - alpha = player->unk_258[arg2].unk_03E; - sp54[0] = player->unk_258[arg2].unk_000[0]; - sp54[1] = player->unk_258[arg2].unk_000[1]; - sp54[2] = player->unk_258[arg2].unk_000[2]; + if (player->particles[arg2].IsAlive == 1) { + red = player->particles[arg2].red; + green = player->particles[arg2].green; + blue = player->particles[arg2].blue; + alpha = player->particles[arg2].alpha; + sp54[0] = player->particles[arg2].pos[0]; + sp54[1] = player->particles[arg2].pos[1]; + sp54[2] = player->particles[arg2].pos[2]; sp4C[0] = 0x4000; sp4C[1] = player->unk_048[arg3]; sp4C[2] = 0; - func_800652D4(sp54, sp4C, player->unk_258[arg2].unk_00C * player->size); + func_800652D4(sp54, sp4C, player->particles[arg2].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008DB8); gDPLoadTextureBlock(gDisplayListHead++, D_8018D48C, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, @@ -5265,7 +5265,7 @@ void func_80066BAC(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { Vec3s spD4; UNUSED s32 stackPadding; - if ((player->unk_258[arg2].unk_01C == 1) && (player->unk_258[arg2].unk_038 != 0x00FF)) { + if ((player->particles[arg2].IsAlive == 1) && (player->particles[arg2].red != 0x00FF)) { if (player->collision.surfaceDistance[2] >= 300.0f) { spDC[1] = player->pos[1] + 5.0f; @@ -5281,20 +5281,20 @@ void func_80066BAC(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { } spD4[1] = player->unk_048[arg3]; spD4[2] = 0; - func_800652D4(spDC, spD4, player->unk_258[arg2].unk_00C * player->size); - if (player->unk_258[arg2].unk_038 == 0) { + func_800652D4(spDC, spD4, player->particles[arg2].scale * player->size); + if (player->particles[arg2].red == 0) { gSPDisplayList(gDisplayListHead++, D_0D008DB8); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2); gDPLoadTextureBlock(gDisplayListHead++, D_8018D4C4, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSPVertex(gDisplayListHead++, &D_800E8900[0][player->unk_258[arg2].unk_038], 4, 0); + gSPVertex(gDisplayListHead++, &D_800E8900[0][player->particles[arg2].red], 4, 0); gSPDisplayList(gDisplayListHead++, common_square_plain_render); gDPLoadTextureBlock(gDisplayListHead++, D_8018D4C8, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSPVertex(gDisplayListHead++, &D_800E8900[1][player->unk_258[arg2].unk_038], 4, 0); + gSPVertex(gDisplayListHead++, &D_800E8900[1][player->particles[arg2].red], 4, 0); gSPDisplayList(gDisplayListHead++, D_0D008DA0); } else { gSPDisplayList(gDisplayListHead++, D_0D008DB8); @@ -5303,12 +5303,12 @@ void func_80066BAC(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { gDPLoadTextureBlock(gDisplayListHead++, D_8018D4C8, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSPVertex(gDisplayListHead++, &D_800E8900[0][player->unk_258[arg2].unk_038], 4, 0); + gSPVertex(gDisplayListHead++, &D_800E8900[0][player->particles[arg2].red], 4, 0); gSPDisplayList(gDisplayListHead++, common_square_plain_render); gDPLoadTextureBlock(gDisplayListHead++, D_8018D4C4, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 64, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSPVertex(gDisplayListHead++, &D_800E8900[1][player->unk_258[arg2].unk_038], 4, 0); + gSPVertex(gDisplayListHead++, &D_800E8900[1][player->particles[arg2].red], 4, 0); gSPDisplayList(gDisplayListHead++, D_0D008DA0); } gMatrixEffectCount += 1; @@ -5323,19 +5323,19 @@ void func_80067280(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { s16 blue; s16 alpha; - if (player->unk_258[30 + arg2].unk_01C == 1) { - red = player->unk_258[30 + arg2].unk_038; - green = player->unk_258[30 + arg2].unk_03A; - blue = player->unk_258[30 + arg2].unk_03C; - alpha = player->unk_258[30 + arg2].unk_03E; - sp7C[0] = player->unk_258[30 + arg2].unk_000[0]; - sp7C[1] = player->unk_258[30 + arg2].unk_000[1]; - sp7C[2] = player->unk_258[30 + arg2].unk_000[2]; + if (player->particles[30 + arg2].IsAlive == 1) { + red = player->particles[30 + arg2].red; + green = player->particles[30 + arg2].green; + blue = player->particles[30 + arg2].blue; + alpha = player->particles[30 + arg2].alpha; + sp7C[0] = player->particles[30 + arg2].pos[0]; + sp7C[1] = player->particles[30 + arg2].pos[1]; + sp7C[2] = player->particles[30 + arg2].pos[2]; sp74[0] = -0x071C; sp74[2] = 0; - if (player->unk_258[30 + arg2].unk_010 == 1) { + if (player->particles[30 + arg2].unk_010 == 1) { sp74[1] = player->unk_048[arg3] - 0x2000; - func_800652D4(sp7C, sp74, player->unk_258[30 + arg2].unk_00C * player->size); + func_800652D4(sp7C, sp74, player->particles[30 + arg2].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008DB8); gDPLoadTextureBlock(gDisplayListHead++, D_8018D48C, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, @@ -5344,7 +5344,7 @@ void func_80067280(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { gSPDisplayList(gDisplayListHead++, D_0D008E70); } else { sp74[1] = player->unk_048[arg3] + 0x2000; - func_800652D4(sp7C, sp74, player->unk_258[30 + arg2].unk_00C * player->size); + func_800652D4(sp7C, sp74, player->particles[30 + arg2].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008DB8); gDPLoadTextureBlock(gDisplayListHead++, D_8018D48C, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, @@ -5356,20 +5356,20 @@ void func_80067280(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { } } -void func_80067604(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { +void render_player_boost_spark_particles(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { Vec3f sp8C; Vec3s sp84; UNUSED s32 stackPadding[4]; - if (player->unk_258[30 + arg2].unk_01C == 1) { - sp8C[0] = player->unk_258[30 + arg2].unk_000[0]; - sp8C[1] = player->unk_258[30 + arg2].unk_000[1]; - sp8C[2] = player->unk_258[30 + arg2].unk_000[2]; + if (player->particles[30 + arg2].IsAlive == 1) { + sp8C[0] = player->particles[30 + arg2].pos[0]; + sp8C[1] = player->particles[30 + arg2].pos[1]; + sp8C[2] = player->particles[30 + arg2].pos[2]; sp84[0] = 0; sp84[1] = player->unk_048[arg3]; sp84[2] = 0; - func_800652D4(sp8C, sp84, player->unk_258[30 + arg2].unk_00C * player->size); - if (player->unk_258[30 + arg2].unk_010 == 1) { + func_800652D4(sp8C, sp84, player->particles[30 + arg2].scale * player->size); + if (player->particles[30 + arg2].unk_010 == 1) { gSPDisplayList(gDisplayListHead++, D_0D008DB8); gDPLoadTextureBlock(gDisplayListHead++, common_texture_particle_spark, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, @@ -5388,17 +5388,17 @@ void func_80067604(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { } } -void func_80067964(Player* player, UNUSED s8 arg1, f32 arg2, UNUSED s8 arg3, s8 arg4) { +void render_player_onomatopoeia_whrrrr(Player* player, UNUSED s8 arg1, f32 arg2, UNUSED s8 arg3, s8 arg4) { Vec3f sp9C; Vec3s sp94; UNUSED s32 stackPadding[2]; - if (player->unk_258[20 + arg4].unk_01C == 1) { - sp9C[0] = player->unk_258[20 + arg4].unk_000[0]; - sp9C[1] = player->unk_258[20 + arg4].unk_000[1]; - sp9C[2] = player->unk_258[20 + arg4].unk_000[2]; + if (player->particles[20 + arg4].IsAlive == 1) { + sp9C[0] = player->particles[20 + arg4].pos[0]; + sp9C[1] = player->particles[20 + arg4].pos[1]; + sp9C[2] = player->particles[20 + arg4].pos[2]; sp94[0] = 0; - sp94[1] = player->unk_258[20 + arg4].unk_020; + sp94[1] = player->particles[20 + arg4].rotation; sp94[2] = 0; func_800652D4(sp9C, sp94, player->size * arg2); gSPDisplayList(gDisplayListHead++, D_0D008C90); @@ -5419,7 +5419,7 @@ void func_80067964(Player* player, UNUSED s8 arg1, f32 arg2, UNUSED s8 arg3, s8 } } -void func_80067D3C(Player* player, s8 arg1, u8* texture, s8 arg3, f32 arg4, s32 arg5) { +void render_player_speech_bubble(Player* player, s8 arg1, u8* texture, s8 arg3, f32 arg4, s32 arg5) { Vec3f sp7C; Vec3s sp74; f32 sp54[8] = { 0.0f, -1.2f, 0.1f, 1.2f, -1.7f, -0.8f, -0.2f, -1.9f }; @@ -5429,14 +5429,14 @@ void func_80067D3C(Player* player, s8 arg1, u8* texture, s8 arg3, f32 arg4, s32 s16 blue = ((arg5 >> 0x00) & 0xFF) & 0xFF; // ???????????????????????????????????????? - if (player->unk_258[20 + arg3].unk_01C == 1) { + if (player->particles[20 + arg3].IsAlive == 1) { sp74[0] = 0; sp74[1] = player->unk_048[arg1]; sp74[2] = 0; sp7C[0] = player->pos[0] + (sins((0x4000 & 0xFFFFFFFF) - (player->rotation[1] + player->unk_0C0)) * arg4); sp7C[1] = player->pos[1] + player->boundingBoxSize - sp54[player->characterId] - 2.0f; sp7C[2] = player->pos[2] + (coss((0x4000 & 0xFFFFFFFF) - (player->rotation[1] + player->unk_0C0)) * arg4); - func_800652D4(sp7C, sp74, player->unk_258[20 + arg3].unk_00C * player->size); + func_800652D4(sp7C, sp74, player->particles[20 + arg3].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008DB8); gDPLoadTextureBlock(gDisplayListHead++, texture, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); @@ -5447,7 +5447,7 @@ void func_80067D3C(Player* player, s8 arg1, u8* texture, s8 arg3, f32 arg4, s32 } } -void func_8006801C(Player* player, s8 arg1, u8* texture, s8 arg3, f32 arg4, s32 arg5) { +void render_music_note(Player* player, s8 arg1, u8* texture, s8 arg3, f32 arg4, s32 arg5) { Vec3f sp7C; Vec3s sp74; f32 sp54[8] = { -0.7f, -1.9f, -0.6f, 0.4f, -2.5f, -1.6f, -0.95f, -2.7f }; @@ -5457,14 +5457,14 @@ void func_8006801C(Player* player, s8 arg1, u8* texture, s8 arg3, f32 arg4, s32 s16 blue = ((arg5 >> 0x00) & 0xFF) & 0xFF; // ???????????????????????????????????????? - if (player->unk_258[20 + arg3].unk_01C == 1) { + if (player->particles[20 + arg3].IsAlive == 1) { sp74[0] = 0; sp74[1] = player->unk_048[arg1]; sp74[2] = 0; sp7C[0] = player->pos[0] + (sins((0x4000 & 0xFFFFFFFF) - (player->rotation[1] + player->unk_0C0)) * arg4); sp7C[1] = player->pos[1] + player->boundingBoxSize - sp54[player->characterId] - 2.0f; sp7C[2] = player->pos[2] + (coss((0x4000 & 0xFFFFFFFF) - (player->rotation[1] + player->unk_0C0)) * arg4); - func_800652D4(sp7C, sp74, player->unk_258[20 + arg3].unk_00C * player->size * 0.8); + func_800652D4(sp7C, sp74, player->particles[20 + arg3].scale * player->size * 0.8); gSPDisplayList(gDisplayListHead++, D_0D008DB8); gDPLoadTextureBlock(gDisplayListHead++, texture, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); @@ -5480,14 +5480,14 @@ void func_80068310(Player* player, UNUSED s8 arg1, UNUSED f32 arg2, s8 arg3, s8 Vec3f sp9C; Vec3s sp94; - if (player->unk_258[20 + arg4].unk_01C == 1) { - sp9C[1] = player->unk_258[20 + arg4].unk_000[1]; + if (player->particles[20 + arg4].IsAlive == 1) { + sp9C[1] = player->particles[20 + arg4].pos[1]; sp9C[2] = player->pos[2] + (coss(player->unk_048[arg3]) * -10.0f); sp9C[0] = player->pos[0] + (sins(player->unk_048[arg3]) * -10.0f); sp94[0] = 0; sp94[1] = player->unk_048[arg3]; sp94[2] = 0; - func_800652D4(sp9C, sp94, player->unk_258[20 + arg4].unk_00C * player->size); + func_800652D4(sp9C, sp94, player->particles[20 + arg4].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008C90); gDPLoadTLUT_pal256(gDisplayListHead++, D_800E52D0); gDPSetTextureLUT(gDisplayListHead++, G_TT_RGBA16); @@ -5510,14 +5510,14 @@ void func_80068724(Player* player, UNUSED s8 arg1, UNUSED f32 arg2, s8 arg3, s8 Vec3f sp84; Vec3s sp7C; - if (player->unk_258[20 + arg4].unk_01C == 1) { + if (player->particles[20 + arg4].IsAlive == 1) { sp84[1] = player->pos[1] - 3.0f; sp84[2] = player->pos[2] + (coss(player->unk_048[arg3]) * -10.0f); sp84[0] = player->pos[0] + (sins(player->unk_048[arg3]) * -10.0f); sp7C[0] = 0; sp7C[1] = player->unk_048[arg3]; sp7C[2] = 0; - func_800652D4(sp84, sp7C, player->unk_258[20 + arg4].unk_00C * player->size); + func_800652D4(sp84, sp7C, player->particles[20 + arg4].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008DB8); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); gDPSetRenderMode(gDisplayListHead++, G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2); @@ -5535,18 +5535,18 @@ void func_80068724(Player* player, UNUSED s8 arg1, UNUSED f32 arg2, s8 arg3, s8 } } -void func_80068AA4(Player* player, UNUSED s8 arg1, UNUSED f32 arg2, s8 arg3, s8 arg4) { +void render_player_onomatopoeia_boing(Player* player, UNUSED s8 arg1, UNUSED f32 arg2, s8 arg3, s8 arg4) { Vec3f sp64; Vec3s sp5C; - if ((player->unk_258[20 + arg4].unk_01C == 1) && (player->animFrameSelector[arg3] < 0xD)) { + if ((player->particles[20 + arg4].IsAlive == 1) && (player->animFrameSelector[arg3] < 0xD)) { sp64[1] = player->pos[1] - 3.0f; - sp64[2] = player->pos[2] + ((-2.5 * player->unk_258[20 + arg4].unk_01E) * coss(player->unk_048[arg3])); - sp64[0] = player->pos[0] + ((-2.5 * player->unk_258[20 + arg4].unk_01E) * sins(player->unk_048[arg3])); + sp64[2] = player->pos[2] + ((-2.5 * player->particles[20 + arg4].timer) * coss(player->unk_048[arg3])); + sp64[0] = player->pos[0] + ((-2.5 * player->particles[20 + arg4].timer) * sins(player->unk_048[arg3])); sp5C[0] = 0; sp5C[1] = player->unk_048[arg3]; sp5C[2] = 0; - func_800652D4(sp64, sp5C, player->unk_258[20 + arg4].unk_00C * player->size); + func_800652D4(sp64, sp5C, player->particles[20 + arg4].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008D58); gDPSetTextureLUT(gDisplayListHead++, G_TT_NONE); gDPLoadTextureBlock(gDisplayListHead++, D_8018D4A0, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, @@ -5560,18 +5560,18 @@ void func_80068AA4(Player* player, UNUSED s8 arg1, UNUSED f32 arg2, s8 arg3, s8 } } -void func_80068DA0(Player* player, UNUSED s8 arg1, UNUSED f32 arg2, s8 arg3, s8 arg4) { +void render_player_onomatopoeia_pomp(Player* player, UNUSED s8 arg1, UNUSED f32 arg2, s8 arg3, s8 arg4) { Vec3f sp9C; Vec3s sp94; - if ((player->unk_258[20 + arg4].unk_01C == 1) && ((s32) player->animFrameSelector[arg3] < 0xD)) { - sp9C[1] = (player->pos[1] - 3.0f) + player->unk_258[20 + arg4].unk_000[1]; + if ((player->particles[20 + arg4].IsAlive == 1) && ((s32) player->animFrameSelector[arg3] < 0xD)) { + sp9C[1] = (player->pos[1] - 3.0f) + player->particles[20 + arg4].pos[1]; sp9C[2] = player->pos[2] + (coss(player->unk_048[arg3]) * -10.0f); sp9C[0] = player->pos[0] + (sins(player->unk_048[arg3]) * -10.0f); sp94[0] = 0; sp94[1] = player->unk_048[arg3]; sp94[2] = 0; - func_800652D4(sp9C, sp94, player->unk_258[20 + arg4].unk_00C * player->size); + func_800652D4(sp9C, sp94, player->particles[20 + arg4].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008C90); gDPLoadTLUT_pal256(gDisplayListHead++, D_800E52D0); gDPSetTextureLUT(gDisplayListHead++, G_TT_RGBA16); @@ -5589,20 +5589,20 @@ void func_80068DA0(Player* player, UNUSED s8 arg1, UNUSED f32 arg2, s8 arg3, s8 } } -void func_800691B8(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { +void render_actor_bonk_particles(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { Vec3f sp5C; Vec3s sp54; s16 alpha; - if (player->unk_258[30 + arg2].unk_01C == 1) { - alpha = player->unk_258[30 + arg2].unk_03E; - sp5C[0] = player->unk_258[30 + arg2].unk_000[0]; - sp5C[1] = player->unk_258[30 + arg2].unk_000[1]; - sp5C[2] = player->unk_258[30 + arg2].unk_000[2]; + if (player->particles[30 + arg2].IsAlive == 1) { + alpha = player->particles[30 + arg2].alpha; + sp5C[0] = player->particles[30 + arg2].pos[0]; + sp5C[1] = player->particles[30 + arg2].pos[1]; + sp5C[2] = player->particles[30 + arg2].pos[2]; sp54[0] = 0; sp54[1] = player->unk_048[arg3]; - player->unk_258[30 + arg2].unk_03A += 0x1C71; - sp54[2] = player->unk_258[30 + arg2].unk_03A; + player->particles[30 + arg2].green += 0x1C71; + sp54[2] = player->particles[30 + arg2].green; func_800652D4(sp5C, sp54, player->size * 0.5); gSPDisplayList(gDisplayListHead++, D_0D008D58); gDPSetTextureLUT(gDisplayListHead++, G_TT_NONE); @@ -5628,19 +5628,19 @@ void func_80069444(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { s16 envGreen; s16 envBlue; u16 test; - if (player->unk_258[30 + arg2].unk_01C == 1) { - primRed = (D_800E47DC[player->unk_258[30 + arg2].unk_038] >> 0x10) & 0xFF; - primGreen = (D_800E47DC[player->unk_258[30 + arg2].unk_038] >> 8) & 0xFF; - primBlue = D_800E47DC[player->unk_258[30 + arg2].unk_038] & 0xFF; + if (player->particles[30 + arg2].IsAlive == 1) { + primRed = (D_800E47DC[player->particles[30 + arg2].red] >> 0x10) & 0xFF; + primGreen = (D_800E47DC[player->particles[30 + arg2].red] >> 8) & 0xFF; + primBlue = D_800E47DC[player->particles[30 + arg2].red] & 0xFF; - envRed = (D_800E480C[player->unk_258[30 + arg2].unk_038] >> 0x10) & 0xFF; - envGreen = (D_800E480C[player->unk_258[30 + arg2].unk_038] >> 8) & 0xFF; - envBlue = D_800E480C[player->unk_258[30 + arg2].unk_038] & 0xFF; - primAlpha = player->unk_258[30 + arg2].unk_03E; + envRed = (D_800E480C[player->particles[30 + arg2].red] >> 0x10) & 0xFF; + envGreen = (D_800E480C[player->particles[30 + arg2].red] >> 8) & 0xFF; + envBlue = D_800E480C[player->particles[30 + arg2].red] & 0xFF; + primAlpha = player->particles[30 + arg2].alpha; - sp74[0] = player->unk_258[30 + arg2].unk_000[0]; - sp74[1] = player->unk_258[30 + arg2].unk_000[1]; - sp74[2] = player->unk_258[30 + arg2].unk_000[2]; + sp74[0] = player->particles[30 + arg2].pos[0]; + sp74[1] = player->particles[30 + arg2].pos[1]; + sp74[2] = player->particles[30 + arg2].pos[2]; sp6C[0] = 0; sp6C[1] = player->unk_048[arg3]; sp6C[2] = 0; @@ -5660,16 +5660,16 @@ void func_80069444(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { } } -void func_800696CC(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3, f32 arg4) { +void render_wall_bonk_star_particles(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3, f32 arg4) { Vec3f sp5C; Vec3s sp54; s16 alpha; - if (player->unk_258[30 + arg2].unk_01C == 1) { - alpha = player->unk_258[30 + arg2].unk_03E; - sp5C[0] = player->unk_258[30 + arg2].unk_000[0]; - sp5C[1] = player->unk_258[30 + arg2].unk_000[1]; - sp5C[2] = player->unk_258[30 + arg2].unk_000[2]; + if (player->particles[30 + arg2].IsAlive == 1) { + alpha = player->particles[30 + arg2].alpha; + sp5C[0] = player->particles[30 + arg2].pos[0]; + sp5C[1] = player->particles[30 + arg2].pos[1]; + sp5C[2] = player->particles[30 + arg2].pos[2]; sp54[0] = 0; sp54[1] = player->unk_048[arg3]; sp54[2] = 0; @@ -5692,15 +5692,15 @@ void func_80069938(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { Vec3s sp54; s16 alpha; - if (player->unk_258[30 + arg2].unk_01C == 1) { - alpha = player->unk_258[30 + arg2].unk_03E; - sp5C[0] = player->unk_258[30 + arg2].unk_000[0]; - sp5C[1] = player->unk_258[30 + arg2].unk_000[1]; - sp5C[2] = player->unk_258[30 + arg2].unk_000[2]; + if (player->particles[30 + arg2].IsAlive == 1) { + alpha = player->particles[30 + arg2].alpha; + sp5C[0] = player->particles[30 + arg2].pos[0]; + sp5C[1] = player->particles[30 + arg2].pos[1]; + sp5C[2] = player->particles[30 + arg2].pos[2]; sp54[0] = 0; sp54[1] = player->unk_048[arg3]; - sp54[2] = player->unk_258[30 + arg2].unk_038; - func_800652D4(sp5C, sp54, player->unk_258[30 + arg2].unk_00C * player->size); + sp54[2] = player->particles[30 + arg2].red; + func_800652D4(sp5C, sp54, player->particles[30 + arg2].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008D58); gDPSetTextureLUT(gDisplayListHead++, G_TT_NONE); gDPLoadTextureBlock(gDisplayListHead++, D_8018D488, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0, @@ -5722,18 +5722,18 @@ void func_80069BA8(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { s16 blue; s16 alpha; - if (player->unk_258[30 + arg2].unk_01C == 1) { - red = player->unk_258[30 + arg2].unk_038; - green = player->unk_258[30 + arg2].unk_03A; - blue = player->unk_258[30 + arg2].unk_03C; - alpha = player->unk_258[30 + arg2].unk_03E; - sp54[0] = player->unk_258[30 + arg2].unk_000[0]; - sp54[1] = player->unk_258[30 + arg2].unk_000[1]; - sp54[2] = player->unk_258[30 + arg2].unk_000[2]; + if (player->particles[30 + arg2].IsAlive == 1) { + red = player->particles[30 + arg2].red; + green = player->particles[30 + arg2].green; + blue = player->particles[30 + arg2].blue; + alpha = player->particles[30 + arg2].alpha; + sp54[0] = player->particles[30 + arg2].pos[0]; + sp54[1] = player->particles[30 + arg2].pos[1]; + sp54[2] = player->particles[30 + arg2].pos[2]; sp4C[0] = 0; sp4C[1] = player->unk_048[arg3]; sp4C[2] = 0; - func_800652D4(sp54, sp4C, player->unk_258[30 + arg2].unk_00C * player->size); + func_800652D4(sp54, sp4C, player->particles[30 + arg2].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008DB8); gDPLoadTextureBlock(gDisplayListHead++, D_8018D48C, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, @@ -5749,14 +5749,14 @@ void func_80069DB8(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { Vec3s sp54; UNUSED s32 stackPadding[2]; - if (player->unk_258[30 + arg2].unk_01C == 1) { - sp5C[0] = player->unk_258[30 + arg2].unk_000[0]; - sp5C[1] = player->unk_258[30 + arg2].unk_000[1]; - sp5C[2] = player->unk_258[30 + arg2].unk_000[2]; + if (player->particles[30 + arg2].IsAlive == 1) { + sp5C[0] = player->particles[30 + arg2].pos[0]; + sp5C[1] = player->particles[30 + arg2].pos[1]; + sp5C[2] = player->particles[30 + arg2].pos[2]; sp54[0] = 0; sp54[1] = player->unk_048[arg3]; sp54[2] = 0; - func_800652D4(sp5C, sp54, player->unk_258[30 + arg2].unk_00C * player->size); + func_800652D4(sp5C, sp54, player->particles[30 + arg2].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008D58); gDPSetTextureLUT(gDisplayListHead++, G_TT_NONE); gDPLoadTextureBlock(gDisplayListHead++, D_8018D49C, G_IM_FMT_IA, G_IM_SIZ_16b, 16, 16, 0, @@ -5774,14 +5774,14 @@ void func_8006A01C(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { Vec3f sp54; Vec3s sp4C; - if (player->unk_258[arg2].unk_01C == 1) { - sp54[0] = player->unk_258[10 + arg2].unk_000[0]; - sp54[1] = player->unk_258[10 + arg2].unk_000[1]; - sp54[2] = player->unk_258[10 + arg2].unk_000[2]; + if (player->particles[arg2].IsAlive == 1) { + sp54[0] = player->particles[10 + arg2].pos[0]; + sp54[1] = player->particles[10 + arg2].pos[1]; + sp54[2] = player->particles[10 + arg2].pos[2]; sp4C[0] = 0; sp4C[1] = player->unk_048[arg3]; sp4C[2] = 0; - func_800652D4(sp54, sp4C, player->unk_258[10 + arg2].unk_00C * player->size); + func_800652D4(sp54, sp4C, player->particles[10 + arg2].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008D58); gDPSetTextureLUT(gDisplayListHead++, G_TT_NONE); @@ -5803,20 +5803,20 @@ void func_8006A280(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) { s16 green; s16 blue; - if (player->unk_258[arg2].unk_01C == 1) { - red = player->unk_258[arg2].unk_038; - green = player->unk_258[arg2].unk_03A; - blue = player->unk_258[arg2].unk_03C; - sp5C[0] = player->unk_258[arg2].unk_000[0]; - sp5C[1] = player->unk_258[arg2].unk_000[1]; - sp5C[2] = player->unk_258[arg2].unk_000[2]; + if (player->particles[arg2].IsAlive == 1) { + red = player->particles[arg2].red; + green = player->particles[arg2].green; + blue = player->particles[arg2].blue; + sp5C[0] = player->particles[arg2].pos[0]; + sp5C[1] = player->particles[arg2].pos[1]; + sp5C[2] = player->particles[arg2].pos[2]; sp54[0] = 0; sp54[1] = player->unk_048[arg3]; sp54[2] = 0; - func_800652D4(sp5C, sp54, player->unk_258[arg2].unk_00C * player->size); + func_800652D4(sp5C, sp54, player->particles[arg2].scale * player->size); gSPDisplayList(gDisplayListHead++, D_0D008D58); gDPSetTextureLUT(gDisplayListHead++, G_TT_NONE); - gDPLoadTextureBlock_4b(gDisplayListHead++, *D_800E47A0[player->unk_258[arg2].unk_01E], G_IM_FMT_I, 64, 64, 0, + gDPLoadTextureBlock_4b(gDisplayListHead++, *D_800E47A0[player->particles[arg2].timer], G_IM_FMT_I, 64, 64, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); func_8004B414(red, green, blue, 0x000000FF); @@ -6233,8 +6233,8 @@ void func_8006C6AC(Player* player, s16 arg1, s8 arg2, s8 arg3) { if (sp28 < 0) { sp28 = 9; } - if (player->unk_258[10 + arg1].unk_01C == 1) { - switch (player->unk_258[10 + arg1].unk_012) { + if (player->particles[10 + arg1].IsAlive == 1) { + switch (player->particles[10 + arg1].type) { case 1: func_80063408(player, arg1, arg2_copy, arg3); break; @@ -6265,7 +6265,7 @@ void func_8006C6AC(Player* player, s16 arg1, s8 arg2, s8 arg3) { } else if (!(player->effects & 8) && !(player->effects & 2)) { if (((player->effects & UNKNOWN_EFFECT_0x10) == UNKNOWN_EFFECT_0x10) && ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN)) { - func_8005DA30(player, arg1, sp28, arg2_copy, arg3); + check_drift_particles_setup_valid(player, arg1, sp28, arg2_copy, arg3); } else if (((f64) (D_801652A0[arg2_copy] - player->tyres[BACK_RIGHT].baseHeight) >= 3.5) || ((f64) (D_801652A0[arg2_copy] - player->tyres[BACK_LEFT].baseHeight) >= 3.5)) { func_8005EA94(player, arg1, sp28, arg2_copy, arg3); @@ -6275,7 +6275,7 @@ void func_8006C6AC(Player* player, s16 arg1, s8 arg2, s8 arg3) { (player->effects & 0x800) || (player->effects & 0x20) || (player->unk_044 & 0x4000)) { func_8005ED48(player, arg1, sp28, arg2_copy, arg3); } else { - func_8005DAF4(player, arg1, sp28, arg2_copy, arg3); + setup_tyre_particles(player, arg1, sp28, arg2_copy, arg3); } } } @@ -6288,8 +6288,8 @@ void func_8006C9B8(Player* player, s16 arg1, s8 playerIndex, s8 arg3) { if (sp28 < 0) { sp28 = 9; } - if (player->unk_258[30 + arg1].unk_01C == 1) { - switch (player->unk_258[30 + arg1].unk_012) { + if (player->particles[30 + arg1].IsAlive == 1) { + switch (player->particles[30 + arg1].type) { case 1: func_800644E8(player, arg1, playerIndex, arg3); break; @@ -6391,8 +6391,9 @@ void func_8006CEC0(Player* arg0, s16 arg1, s8 arg2, s8 arg3) { if (--sp20 < 0) { sp20 = 9; } - if (arg0->unk_258[arg1].unk_01C == 1) { - switch (arg0->unk_258[arg1].unk_012) { + //Spawn particles when oob + if (arg0->particles[arg1].IsAlive == 1) { + switch (arg0->particles[arg1].type) { case 1: func_80062C74(arg0, arg1, arg2, arg3); break; @@ -6400,7 +6401,7 @@ void func_8006CEC0(Player* arg0, s16 arg1, s8 arg2, s8 arg3) { func_80064184(arg0, arg1, arg2, arg3); break; case 5: - func_800630C0(arg0, arg1, arg2, arg3); + set_oob_splash_particle_position(arg0, arg1, arg2, arg3); break; case 6: func_800631A8(arg0, arg1, arg2, arg3); @@ -6452,8 +6453,8 @@ void func_8006CEC0(Player* arg0, s16 arg1, s8 arg2, s8 arg3) { } void func_8006D194(Player* player, s8 playerIndex, s8 arg2) { - if (player->unk_258[0x14].unk_01C == 1) { - switch (player->unk_258[0x14].unk_012) { + if (player->particles[0x14].IsAlive == 1) { + switch (player->particles[0x14].type) { case 2: func_80064DEC(player, playerIndex, arg2, 0); break; @@ -6487,8 +6488,8 @@ void func_8006D194(Player* player, s8 playerIndex, s8 arg2) { func_800629BC(player, playerIndex, arg2, 0); } } - if (player->unk_258[0x15].unk_01C == 1) { - if (player->unk_258[0x15].unk_012 == 5) { + if (player->particles[0x15].IsAlive == 1) { + if (player->particles[0x15].type == 5) { func_800651F4(player, playerIndex, arg2, 1); } } else if ((player->unk_0B6 & 0x20) == 0x20) { @@ -6500,7 +6501,7 @@ void func_8006D474(Player* player, s8 playerId, s8 screenId) { s16 var_s2; if ((player->unk_002 & (8 << (screenId * 4))) == (8 << (screenId * 4))) { for (var_s2 = 0; var_s2 < 10; var_s2++) { - switch (player->unk_258[var_s2].unk_012) { + switch (player->particles[var_s2].type) { case 1: if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) { if (screenId == playerId) { @@ -6520,20 +6521,20 @@ void func_8006D474(Player* player, s8 playerId, s8 screenId) { } break; } - switch (player->unk_258[var_s2 + 30].unk_012) { + switch (player->particles[var_s2 + 30].type) { case 1: case 9: if (gActiveScreenMode == SCREEN_MODE_1P) { - func_800691B8(player, playerId, var_s2, screenId); + render_actor_bonk_particles(player, playerId, var_s2, screenId); } else if (screenId == playerId) { - func_800691B8(player, playerId, var_s2, screenId); + render_actor_bonk_particles(player, playerId, var_s2, screenId); } break; case 2: if (gActiveScreenMode == SCREEN_MODE_1P) { - func_800696CC(player, playerId, var_s2, screenId, player->unk_258[var_s2 + 30].unk_00C); + render_wall_bonk_star_particles(player, playerId, var_s2, screenId, player->particles[var_s2 + 30].scale); } else if (screenId == playerId) { - func_800696CC(player, playerId, var_s2, screenId, player->unk_258[var_s2 + 30].unk_00C); + render_wall_bonk_star_particles(player, playerId, var_s2, screenId, player->particles[var_s2 + 30].scale); } break; case 3: @@ -6573,13 +6574,13 @@ void func_8006D474(Player* player, s8 playerId, s8 screenId) { break; case 8: if (gActiveScreenMode == SCREEN_MODE_1P) { - func_80067604(player, playerId, var_s2, screenId); + render_player_boost_spark_particles(player, playerId, var_s2, screenId); } else if (screenId == playerId) { - func_80067604(player, playerId, var_s2, screenId); + render_player_boost_spark_particles(player, playerId, var_s2, screenId); } break; } - switch (player->unk_258[var_s2 + 10].unk_012) { + switch (player->particles[var_s2 + 10].type) { case 1: if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) { if (screenId == playerId) { @@ -6634,7 +6635,7 @@ void func_8006DC54(Player* player, s8 playerIndex, s8 screenId) { bitwiseMask = 8 << (screenId * 4); if (bitwiseMask == (player->unk_002 & bitwiseMask)) { for (i = 0; i < 10; i++) { - if (player->unk_258[i].unk_012 == 7) { + if (player->particles[i].type == 7) { func_800658A0(player, playerIndex, i, screenId); } } @@ -6648,7 +6649,7 @@ void func_8006DD3C(Player* arg0, s8 arg1, s8 arg2) { temp_v0 = 8 << (arg2 * 4); if (temp_v0 == (arg0->unk_002 & temp_v0)) { for (temp_s0 = 0; temp_s0 < 10; ++temp_s0) { - temp_v0 = arg0->unk_258[temp_s0].unk_012; + temp_v0 = arg0->particles[temp_s0].type; if (temp_v0 != 3) { if (temp_v0 == 5) { func_8006A280(arg0, arg1, temp_s0, arg2); @@ -6663,26 +6664,26 @@ void func_8006DD3C(Player* arg0, s8 arg1, s8 arg2) { } if (((arg0->type & 0x4000) == 0x4000) && (arg2 == arg1)) { - switch (arg0->unk_258[20].unk_012) { + switch (arg0->particles[20].type) { case 2: - func_80068310(arg0, arg1, arg0->unk_258[20].unk_00C, arg2, 0); + func_80068310(arg0, arg1, arg0->particles[20].scale, arg2, 0); break; case 3: - func_80067964(arg0, arg1, arg0->unk_258[20].unk_00C, arg2, 0); + render_player_onomatopoeia_whrrrr(arg0, arg1, arg0->particles[20].scale, arg2, 0); break; case 4: - func_80068724(arg0, arg1, arg0->unk_258[20].unk_00C, arg2, 0); + func_80068724(arg0, arg1, arg0->particles[20].scale, arg2, 0); break; case 5: - func_80068AA4(arg0, arg1, arg0->unk_258[20].unk_00C, arg2, 0); + render_player_onomatopoeia_boing(arg0, arg1, arg0->particles[20].scale, arg2, 0); break; case 6: - func_80068DA0(arg0, arg1, arg0->unk_258[20].unk_00C, arg2, 0); + render_player_onomatopoeia_pomp(arg0, arg1, arg0->particles[20].scale, arg2, 0); break; } - if (arg0->unk_258[21].unk_012 == 5) { - func_80067D3C(arg0, arg2, D_8018D480, 1, 1.6f, 0xFFFFFF); - func_8006801C(arg0, arg2, D_8018D484, 1, 1.6f, 0xFF); + if (arg0->particles[21].type == 5) { + render_player_speech_bubble(arg0, arg2, D_8018D480, 1, 1.6f, 0xFFFFFF); + render_music_note(arg0, arg2, D_8018D484, 1, 1.6f, 0xFF); } } } diff --git a/src/code_80057C60.h b/src/code_80057C60.h index 5a4240f78..95e9e1fdb 100644 --- a/src/code_80057C60.h +++ b/src/code_80057C60.h @@ -117,15 +117,15 @@ void func_8005D1F4(s32); void func_8005D290(void); void func_8005D6C0(Player*); -void func_8005D794(Player*, UnkPlayerStruct258*, f32, f32, f32, s8, s8); -s32 func_8005D7D8(UnkPlayerStruct258*, s8, f32); -s32 func_8005D800(UnkPlayerStruct258*, s32, s16); -s32 func_8005D82C(UnkPlayerStruct258*, s32, s16); -void func_8005D898(Player*, s16, s32, s8, s8); -void func_8005DA30(Player*, s16, s32, s8, s8); +void set_particle_position_and_rotation(Player*, Particle*, f32, f32, f32, s8, s8); +s32 init_new_particle_player(Particle*, s8, f32); +s32 set_particle_colour(Particle*, s32, s16); +s32 set_particle_colour_randomly_varried(Particle*, s32, s16); +void set_drift_particles(Player*, s16, s32, s8, s8); +void check_drift_particles_setup_valid(Player*, s16, s32, s8, s8); void func_8005DAD0(void); -void func_8005DAD8(UnkPlayerStruct258*, s16, s16, s16); -void func_8005DAF4(Player*, s16, s32, s8, s8); +void func_8005DAD8(Particle*, s16, s16, s16); +void setup_tyre_particles(Player*, s16, s32, s8, s8); void func_8005EA94(Player*, s16, s32, s8, s8); void func_8005ED48(Player*, s16, s32, s8, s8); @@ -150,7 +150,7 @@ void func_80061D4C(Player*, s16, s32, s8, s8); void func_80061EF4(Player*, s16, s32, s8, s8); void func_800621BC(Player*, s16, s32, s8, s8); -void func_80062484(Player*, UnkPlayerStruct258*, s32); +void func_80062484(Player*, Particle*, s32); void func_800624D8(Player*, s32, s32, s8, s8); void func_800628C0(Player*, s8, s8, s8); void func_80062914(Player*, s8, s8, s8); @@ -162,7 +162,7 @@ void func_80062B18(f32*, f32*, f32*, f32, f32, f32, u16, u16); void func_80062C74(Player*, s16, s32, s32); void func_80062F98(Player*, s16, s8, s8); -void func_800630C0(Player*, s16, s8, s8); +void set_oob_splash_particle_position(Player*, s16, s8, s8); void func_800631A8(Player*, s16, s8, s8); void func_80063268(Player*, s16, s8, s8); void func_80063408(Player*, s16, s8, s8); @@ -200,19 +200,19 @@ void func_80066998(Player*, s8, s16, s8); void func_80066BAC(Player*, s8, s16, s8); void func_80067280(Player*, s8, s16, s8); -void func_80067604(Player*, s8, s16, s8); -void func_80067964(Player*, s8, f32, s8, s8); -void func_80067D3C(Player*, s8, u8*, s8, f32, s32); +void render_player_boost_spark_particles(Player*, s8, s16, s8); +void render_player_onomatopoeia_whrrrr(Player*, s8, f32, s8, s8); +void render_player_speech_bubble(Player*, s8, u8*, s8, f32, s32); -void func_8006801C(Player*, s8, u8*, s8, f32, s32); +void render_music_note(Player*, s8, u8*, s8, f32, s32); void func_80068310(Player*, s8, f32, s8, s8); void func_80068724(Player*, s8, f32, s8, s8); -void func_80068AA4(Player*, s8, f32, s8, s8); -void func_80068DA0(Player*, s8, f32, s8, s8); +void render_player_onomatopoeia_boing(Player*, s8, f32, s8, s8); +void render_player_onomatopoeia_pomp(Player*, s8, f32, s8, s8); -void func_800691B8(Player*, s8, s16, s8); +void render_actor_bonk_particles(Player*, s8, s16, s8); void func_80069444(Player*, s8, s16, s8); -void func_800696CC(Player*, s8, s16, s8, f32); +void render_wall_bonk_star_particles(Player*, s8, s16, s8, f32); void func_80069938(Player*, s8, s16, s8); void func_80069BA8(Player*, s8, s16, s8); void func_80069DB8(Player*, s8, s16, s8); diff --git a/src/effects.c b/src/effects.c index 95cdfa140..586b02246 100644 --- a/src/effects.c +++ b/src/effects.c @@ -1467,9 +1467,9 @@ void apply_boo_sound_effect(Player* player, s8 playerIndex) { player->unk_044 |= 0x200; for (temp_v1 = 0; temp_v1 < 10; ++temp_v1) { - player->unk_258[temp_v1].unk_01C = 0; - player->unk_258[temp_v1].unk_01E = 0; - player->unk_258[temp_v1].unk_012 = 0; + player->particles[temp_v1].IsAlive = 0; + player->particles[temp_v1].timer = 0; + player->particles[temp_v1].type = 0; } } @@ -1548,9 +1548,9 @@ void func_8008FD4C(Player* player, UNUSED s8 arg1) { player->unk_044 |= 0x200; for (temp_v0 = 0; temp_v0 < 10; ++temp_v0) { - player->unk_258[temp_v0].unk_01C = 0; - player->unk_258[temp_v0].unk_01E = 0; - player->unk_258[temp_v0].unk_012 = 0; + player->particles[temp_v0].IsAlive = 0; + player->particles[temp_v0].timer = 0; + player->particles[temp_v0].type = 0; } } @@ -1558,9 +1558,9 @@ void func_8008FDA8(Player* player, UNUSED s8 arg1) { s16 temp_v0; player->unk_044 |= 0x200; for (temp_v0 = 0; temp_v0 < 10; ++temp_v0) { - player->unk_258[temp_v0].unk_01C = 0; - player->unk_258[temp_v0].unk_01E = 0; - player->unk_258[temp_v0].unk_012 = 0; + player->particles[temp_v0].IsAlive = 0; + player->particles[temp_v0].timer = 0; + player->particles[temp_v0].type = 0; } } @@ -2025,30 +2025,30 @@ void func_800911B4(Player* player, s8 arg1) { player->unk_078 = 0; D_8018D920[arg1] = 0; - player->unk_258[31].unk_012 = 0; - player->unk_258[31].unk_01E = 0; - player->unk_258[31].unk_01C = 0; - player->unk_258[30].unk_012 = 0; - player->unk_258[30].unk_01E = 0; - player->unk_258[30].unk_01C = 0; + player->particles[31].type = 0; + player->particles[31].timer = 0; + player->particles[31].IsAlive = 0; + player->particles[30].type = 0; + player->particles[30].timer = 0; + player->particles[30].IsAlive = 0; // clang-format off temp_v0 = 2; do { // clang-format on - player->unk_258[31 + temp_v0].unk_01C = 0; - player->unk_258[31 + temp_v0].unk_01E = 0; - player->unk_258[31 + temp_v0].unk_012 = 0; - player->unk_258[32 + temp_v0].unk_01C = 0; - player->unk_258[32 + temp_v0].unk_01E = 0; - player->unk_258[32 + temp_v0].unk_012 = 0; - player->unk_258[33 + temp_v0].unk_01C = 0; - player->unk_258[33 + temp_v0].unk_01E = 0; - player->unk_258[33 + temp_v0].unk_012 = 0; + player->particles[31 + temp_v0].IsAlive = 0; + player->particles[31 + temp_v0].timer = 0; + player->particles[31 + temp_v0].type = 0; + player->particles[32 + temp_v0].IsAlive = 0; + player->particles[32 + temp_v0].timer = 0; + player->particles[32 + temp_v0].type = 0; + player->particles[33 + temp_v0].IsAlive = 0; + player->particles[33 + temp_v0].timer = 0; + player->particles[33 + temp_v0].type = 0; temp_v0 += 4; - player->unk_258[26 + temp_v0].unk_01C = 0; - player->unk_258[26 + temp_v0].unk_01E = 0; - player->unk_258[26 + temp_v0].unk_012 = 0; + player->particles[26 + temp_v0].IsAlive = 0; + player->particles[26 + temp_v0].timer = 0; + player->particles[26 + temp_v0].type = 0; } while (temp_v0 < 10); } diff --git a/src/player_controller.c b/src/player_controller.c index 86eca4499..cd4e2c3f0 100644 --- a/src/player_controller.c +++ b/src/player_controller.c @@ -1096,10 +1096,10 @@ void func_8002A704(Player* player, s8 playerIndex) { void func_8002A79C(Player* player, s8 playerIndex) { if (((player->effects & UNKNOWN_EFFECT_0x100) != UNKNOWN_EFFECT_0x100) && - ((player->effects & UNKNOWN_EFFECT_0x10) != UNKNOWN_EFFECT_0x10) && (player->unk_22A >= 2)) { + ((player->effects & UNKNOWN_EFFECT_0x10) != UNKNOWN_EFFECT_0x10) && (player->driftState >= 2)) { player->effects |= UNKNOWN_EFFECT_0x100; player->unk_23A = 0; - player->unk_22A = 0; + player->driftState = 0; player->unk_228 = 0; if (D_8015F890 != 1) { if ((player->type & PLAYER_HUMAN) && !(player->type & PLAYER_INVISIBLE_OR_BOMB)) { @@ -1113,7 +1113,7 @@ void func_8002A79C(Player* player, s8 playerIndex) { if (player->unk_23A >= 0x1F) { player->unk_23A = 0; player->effects &= ~0x100; - player->unk_22A = 0; + player->driftState = 0; player->unk_228 = 0; } } @@ -1130,15 +1130,15 @@ void func_8002A8A4(Player* player, s8 playerIndex) { } } else { if ((player->unk_228 >= 0x12) && (player->unk_228 < 0x64)) { - if (player->unk_22A < 3) { - player->unk_22A++; + if (player->driftState < 3) { + player->driftState++; } } if ((player->unk_228 >= 0xA) && (player->unk_228 < 0x64)) { player->unk_228 = 0x000A; } else { player->unk_228 = 0; - player->unk_22A = 0; + player->driftState = 0; } } } else if (((s32) player->unk_07C >> 0x10) >= 0xA) { @@ -1150,15 +1150,15 @@ void func_8002A8A4(Player* player, s8 playerIndex) { } } else { if ((player->unk_228 >= 0x12) && (player->unk_228 < 0x64)) { - if (player->unk_22A < 3) { - player->unk_22A++; + if (player->driftState < 3) { + player->driftState++; } } if ((player->unk_228 >= 0xA) && (player->unk_228 < 0x64)) { player->unk_228 = 0x000A; } else { player->unk_228 = 0; - player->unk_22A = 0; + player->driftState = 0; } } } @@ -3846,7 +3846,7 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) { player->unk_044 &= 0xFFF9; } sp2E4 = player->unk_07C; - temp_v0_3 = func_80038534(controller); + temp_v0_3 = get_clamped_stickX_with_deadzone(controller); if (((player->unk_044 & 1) == 1) || ((player->unk_044 & 8) == 8)) { temp_v0_3 = -temp_v0_3; } @@ -4066,8 +4066,8 @@ void func_80033AE0(Player* player, struct Controller* controller, s8 arg2) { } } player->unk_228 = 0; - if (player->unk_22A < 2) { - player->unk_22A = 0; + if (player->driftState < 2) { + player->driftState = 0; } } } else if (((player->effects & 8) != 8) && ((player->effects & 2) != 2)) { @@ -4375,6 +4375,7 @@ void func_80037614(Player* player, Vec3f arg1, Vec3f arg2) { arg2[2] = arg1[2]; } + void func_8003777C(Player* player, Vec3f arg1, Vec3f arg2) { f32 var_f12; f32 var_f2; @@ -4554,14 +4555,14 @@ void func_80037CFC(Player* player, struct Controller* controller, s8 playerIndex } } if ((!(player->effects & BOOST_RAMP_ASPHALT_EFFECT)) && (!(player->effects & 4))) { - if (((func_800388B0(controller) < (-0x31)) && (((player->speed / 18.0f) * 216.0f) <= 5.0f)) && + if (((get_clamped_stickY_with_deadzone(controller) < (-0x31)) && (((player->speed / 18.0f) * 216.0f) <= 5.0f)) && (controller->button & B_BUTTON)) { player->currentSpeed = 140.0f; player->unk_044 |= 1; player->unk_08C = (player->currentSpeed * player->currentSpeed) / 25.0f; player->unk_20C = 0.0f; } - if ((func_800388B0(controller) >= -0x1D) || (!(controller->button & B_BUTTON))) { + if ((get_clamped_stickY_with_deadzone(controller) >= -0x1D) || (!(controller->button & B_BUTTON))) { if ((player->unk_044 & 1) == 1) { player->unk_044 &= 0xFFFE; player->currentSpeed = 0.0f; @@ -4680,111 +4681,111 @@ void handle_a_press_for_all_players_during_race(void) { } } -s16 func_80038534(struct Controller* controller) { - s16 temp_a2; - s16 var_a3; - s16 var_t0; - s16 temp_v0; +s16 get_clamped_stickX_with_deadzone(struct Controller* controller) { + s16 temp_stickY; + s16 temp_stickX2; + s16 temp_stickY2; + s16 temp_stickX; - temp_v0 = controller->rawStickX; - temp_a2 = controller->rawStickY; - var_a3 = temp_v0; - var_t0 = temp_a2; + temp_stickX = controller->rawStickX; + temp_stickY = controller->rawStickY; + temp_stickX2 = temp_stickX; + temp_stickY2 = temp_stickY; - if (temp_v0 > 0xC) { - var_t0 = (temp_a2 * 0x000C) / temp_v0; - var_a3 = 0x000C; + if (temp_stickX > 0xC) { + temp_stickY2 = (temp_stickY * 0x000C) / temp_stickX; + temp_stickX2 = 0x000C; } - if (var_a3 < -0xC) { - var_t0 = (var_t0 * 0x000C) / -var_a3; - var_a3 = -0x000C; + if (temp_stickX2 < -0xC) { + temp_stickY2 = (temp_stickY2 * 0x000C) / -temp_stickX2; + temp_stickX2 = -0x000C; } - if (var_t0 > 0xC) { - var_a3 = (var_a3 * 0x000C) / var_t0; - var_t0 = 0x000C; + if (temp_stickY2 > 0xC) { + temp_stickX2 = (temp_stickX2 * 0x000C) / temp_stickY2; + temp_stickY2 = 0x000C; } - if (var_t0 < -0xC) { - var_a3 = (var_a3 * 0x000C) / -var_t0; - var_t0 = -0x000C; + if (temp_stickY2 < -0xC) { + temp_stickX2 = (temp_stickX2 * 0x000C) / -temp_stickY2; + temp_stickY2 = -0x000C; } if ((((controller->rawStickX > -0xD) && (controller->rawStickX < 0xD)) && (controller->rawStickY > -0xD)) && (controller->rawStickY < 0xD)) { - temp_v0 = 0; - temp_a2 = 0; + temp_stickX = 0; + temp_stickY = 0; } else { - temp_v0 -= var_a3; - temp_a2 -= var_t0; + temp_stickX -= temp_stickX2; + temp_stickY -= temp_stickY2; } - if (temp_v0 > 0x35) { - temp_a2 = (temp_a2 * 0x0035) / temp_v0; - temp_v0 = 0x0035; + if (temp_stickX > 0x35) { + temp_stickY = (temp_stickY * 0x0035) / temp_stickX; + temp_stickX = 0x0035; } - if (temp_v0 < -0x35) { - temp_a2 = (temp_a2 * 0x0035) / -temp_v0; - temp_v0 = -0x0035; + if (temp_stickX < -0x35) { + temp_stickY = (temp_stickY * 0x0035) / -temp_stickX; + temp_stickX = -0x0035; } - if (temp_a2 > 0x35) { - temp_v0 = (temp_v0 * 0x0035) / temp_a2; - temp_a2 = 0x0035; + if (temp_stickY > 0x35) { + temp_stickX = (temp_stickX * 0x0035) / temp_stickY; + temp_stickY = 0x0035; } - if (temp_a2 < -0x35) { - temp_v0 = (temp_v0 * 0x0035) / -temp_a2; + if (temp_stickY < -0x35) { + temp_stickX = (temp_stickX * 0x0035) / -temp_stickY; } - return temp_v0; + return temp_stickX; } -s16 func_800388B0(struct Controller* controller) { - s16 temp_a2; - s16 var_a3; - s16 var_t0; - s16 temp_v0; +s16 get_clamped_stickY_with_deadzone(struct Controller* controller) { + s16 temp_StickY; + s16 temp_StickX2; + s16 temp_StickY2; + s16 temp_StickX; - temp_v0 = controller->rawStickX; - temp_a2 = controller->rawStickY; - var_a3 = temp_v0; - var_t0 = temp_a2; + temp_StickX = controller->rawStickX; + temp_StickY = controller->rawStickY; + temp_StickX2 = temp_StickX; + temp_StickY2 = temp_StickY; - if (temp_v0 > 0xC) { - var_t0 = (temp_a2 * 0x000C) / temp_v0; - var_a3 = 0x000C; + if (temp_StickX > 0xC) { + temp_StickY2 = (temp_StickY * 0x000C) / temp_StickX; + temp_StickX2 = 0x000C; } - if (var_a3 < -0xC) { - var_t0 = (var_t0 * 0x000C) / -var_a3; - var_a3 = -0x000C; + if (temp_StickX2 < -0xC) { + temp_StickY2 = (temp_StickY2 * 0x000C) / -temp_StickX2; + temp_StickX2 = -0x000C; } - if (var_t0 > 0xC) { - var_a3 = (var_a3 * 0x000C) / var_t0; - var_t0 = 0x000C; + if (temp_StickY2 > 0xC) { + temp_StickX2 = (temp_StickX2 * 0x000C) / temp_StickY2; + temp_StickY2 = 0x000C; } - if (var_t0 < -0xC) { - var_a3 = (var_a3 * 0x000C) / -var_t0; - var_t0 = -0x000C; + if (temp_StickY2 < -0xC) { + temp_StickX2 = (temp_StickX2 * 0x000C) / -temp_StickY2; + temp_StickY2 = -0x000C; } if ((((controller->rawStickX > -0xD) && (controller->rawStickX < 0xD)) && (controller->rawStickY > -0xD)) && (controller->rawStickY < 0xD)) { - temp_v0 = 0; - temp_a2 = 0; + temp_StickX = 0; + temp_StickY = 0; } else { - temp_v0 -= var_a3; - temp_a2 -= var_t0; + temp_StickX -= temp_StickX2; + temp_StickY -= temp_StickY2; } - if (temp_v0 > 0x35) { - temp_a2 = (temp_a2 * 0x0035) / temp_v0; - temp_v0 = 0x0035; + if (temp_StickX > 0x35) { + temp_StickY = (temp_StickY * 0x0035) / temp_StickX; + temp_StickX = 0x0035; } - if (temp_v0 < -0x35) { - temp_a2 = (temp_a2 * 0x0035) / -temp_v0; - temp_v0 = -0x0035; + if (temp_StickX < -0x35) { + temp_StickY = (temp_StickY * 0x0035) / -temp_StickX; + temp_StickX = -0x0035; } - if (temp_a2 > 0x35) { - temp_v0 = (temp_v0 * 0x0035) / temp_a2; - temp_a2 = 0x0035; + if (temp_StickY > 0x35) { + temp_StickX = (temp_StickX * 0x0035) / temp_StickY; + temp_StickY = 0x0035; } - if (temp_a2 < -0x35) { - temp_v0 = (temp_v0 * 0x0035) / -temp_a2; - temp_a2 = -0x0035; + if (temp_StickY < -0x35) { + temp_StickX = (temp_StickX * 0x0035) / -temp_StickY; + temp_StickY = -0x0035; } - return temp_a2; + return temp_StickY; } void func_80038BE4(Player* player, s16 arg1) { diff --git a/src/player_controller.h b/src/player_controller.h index 475b52833..0caa9db25 100644 --- a/src/player_controller.h +++ b/src/player_controller.h @@ -106,8 +106,8 @@ void func_80037CFC(Player*, struct Controller*, s8); void handle_a_press_for_player_during_race(Player*, struct Controller*, s8); void handle_a_press_for_all_players_during_race(void); -s16 func_80038534(struct Controller*); -s16 func_800388B0(struct Controller*); +s16 get_clamped_stickX_with_deadzone(struct Controller*); +s16 get_clamped_stickY_with_deadzone(struct Controller*); void func_80038BE4(Player*, s16); void func_80038C6C(Player*, Camera*, s8, s8); diff --git a/src/spawn_players.c b/src/spawn_players.c index d9d807220..1745fdb4a 100644 --- a/src/spawn_players.c +++ b/src/spawn_players.c @@ -195,7 +195,7 @@ void spawn_player(Player* player, s8 playerIndex, f32 startingRow, f32 startingC player->unk_204 = 0; player->nearestPathPointId = 0; player->unk_228 = 0; - player->unk_22A = 0; + player->driftState = 0; player->unk_234 = 0; player->unk_236 = 0; player->unk_238 = 0;