diff --git a/src/d_player.h b/src/d_player.h index d39ab918..24818372 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -278,7 +278,8 @@ typedef enum k_throwdir, // Held dir of controls; 1 = forward, 0 = none, -1 = backward (was "player->heldDir") k_lapanimation, // Used to make a swoopy lap lakitu, maybe other effects in the future k_cardanimation, // Used to determine the position of some full-screen Battle Mode graphics - k_sounds, // Used this to stop and then force music restores as it hits zero + k_voices, // Used to stop the player saying more voices than it should + k_tauntvoices, // Used to specifically stop taunt voice spam k_boosting, // Determines if you're currently shroom-boosting k_floorboost, // Prevents Sneaker sounds for a breif duration when triggered by a floor panel diff --git a/src/dehacked.c b/src/dehacked.c index 32030e77..8e472d3d 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6237,11 +6237,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_DRIFTSPARK6", // Drift Smoke - "S_DRIFTSMOKE1", - "S_DRIFTSMOKE2", - "S_DRIFTSMOKE3", - "S_DRIFTSMOKE4", - "S_DRIFTSMOKE5", + "S_DRIFTDUST1", + "S_DRIFTDUST2", + "S_DRIFTDUST3", + "S_DRIFTDUST4", // Lightning Shield Burst @@ -7108,7 +7107,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_SNEAKERTRAIL", "MT_SPARKLETRAIL", "MT_DRIFT", - "MT_DRIFTSMOKE", + "MT_DRIFTDUST", "MT_FAKESHIELD", "MT_FAKEITEM", @@ -7544,7 +7543,8 @@ static const char *const KARTSTUFF_LIST[] = { "THROWDIR", "LAPANIMATION", "CARDANIMATION", - "SOUNDS", + "VOICES", + "TAUNTVOICES", "BOOSTING", "FLOORBOOST", diff --git a/src/hardware/hw_glob.h b/src/hardware/hw_glob.h index fea06caf..5d1a81d4 100644 --- a/src/hardware/hw_glob.h +++ b/src/hardware/hw_glob.h @@ -68,7 +68,6 @@ typedef struct gr_vissprite_s struct gr_vissprite_s *prev; struct gr_vissprite_s *next; float x1, x2; - float z1, z2; float tz, ty; lumpnum_t patchlumpnum; boolean flip; @@ -79,6 +78,7 @@ typedef struct gr_vissprite_s //Hurdler: 25/04/2000: now support colormap in hardware mode UINT8 *colormap; INT32 dispoffset; // copy of info->dispoffset, affects ordering but not drawing + float z1, z2; } gr_vissprite_t; // -------- diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 400ba1fc..ec275f05 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -5190,7 +5190,6 @@ static void HWR_ProjectSprite(mobj_t *thing) float tr_x, tr_y; float tz; float x1, x2; - float z1, z2; float rightsin, rightcos; float this_scale; float gz, gzt; @@ -5202,7 +5201,7 @@ static void HWR_ProjectSprite(mobj_t *thing) angle_t ang; INT32 heightsec, phs; const boolean papersprite = (thing->frame & FF_PAPERSPRITE); - float ang_scale = 1.0f, ang_scalez = 0.0f; + float z1, z2; if (!thing) return; @@ -5257,31 +5256,10 @@ static void HWR_ProjectSprite(mobj_t *thing) I_Error("sprframes NULL for sprite %d\n", thing->sprite); #endif - if (papersprite) - { - // Use the actual view angle, rather than the angle formed - // between the view point and the thing - // this makes sure paper sprites always appear at the right angle! - // Note: DO NOT do this in software mode version, it actually - // makes papersprites look WORSE there (I know, I've tried) - // Monster Iestyn - 13/05/17 - ang = dup_viewangle - thing->angle; - ang_scale = FIXED_TO_FLOAT(FINESINE(ang>>ANGLETOFINESHIFT)); - ang_scalez = FIXED_TO_FLOAT(FINECOSINE(ang>>ANGLETOFINESHIFT)); - - if (ang_scale < 0) - { - ang_scale = -ang_scale; - ang_scalez = -ang_scalez; - } - } - else if (sprframe->rotate != SRF_SINGLE) - { - if (thing->player) - ang = R_PointToAngle (thing->x, thing->y) - thing->player->frameangle; - else - ang = R_PointToAngle (thing->x, thing->y) - thing->angle; - } + if (thing->player) + ang = R_PointToAngle (thing->x, thing->y) - thing->player->frameangle; + else + ang = R_PointToAngle (thing->x, thing->y) - thing->angle; if (sprframe->rotate == SRF_SINGLE) { @@ -5289,6 +5267,14 @@ static void HWR_ProjectSprite(mobj_t *thing) rot = 0; //Fab: for vis->patch below lumpoff = sprframe->lumpid[0]; //Fab: see note above flip = sprframe->flip; // Will only be 0x00 or 0xFF + + if (papersprite && ang < ANGLE_180) + { + if (flip) + flip = 0; + else + flip = 255; + } } else { @@ -5303,13 +5289,30 @@ static void HWR_ProjectSprite(mobj_t *thing) //Fab: lumpid is the index for spritewidth,spriteoffset... tables lumpoff = sprframe->lumpid[rot]; flip = sprframe->flip & (1<skin && ((skin_t *)thing->skin)->flags & SF_HIRES) this_scale = this_scale * FIXED_TO_FLOAT(((skin_t *)thing->skin)->highresscale); - rightsin = FIXED_TO_FLOAT(FINESINE((viewangle + ANGLE_90)>>ANGLETOFINESHIFT)); - rightcos = FIXED_TO_FLOAT(FINECOSINE((viewangle + ANGLE_90)>>ANGLETOFINESHIFT)); + if (papersprite) + { + rightsin = FIXED_TO_FLOAT(FINESINE((thing->angle)>>ANGLETOFINESHIFT)); + rightcos = FIXED_TO_FLOAT(FINECOSINE((thing->angle)>>ANGLETOFINESHIFT)); + } + else + { + rightsin = FIXED_TO_FLOAT(FINESINE((viewangle + ANGLE_90)>>ANGLETOFINESHIFT)); + rightcos = FIXED_TO_FLOAT(FINECOSINE((viewangle + ANGLE_90)>>ANGLETOFINESHIFT)); + } + if (flip) { x1 = (FIXED_TO_FLOAT(spritecachedinfo[lumpoff].width - spritecachedinfo[lumpoff].offset) * this_scale); @@ -5323,10 +5326,6 @@ static void HWR_ProjectSprite(mobj_t *thing) z1 = tr_y + x1 * rightsin; z2 = tr_y - x2 * rightsin; - - if (papersprite && max(z1, z2) < ZCLIP_PLANE) - return; - x1 = tr_x + x1 * rightcos; x2 = tr_x - x2 * rightcos; diff --git a/src/info.c b/src/info.c index a9f23fd8..821978bb 100644 --- a/src/info.c +++ b/src/info.c @@ -55,7 +55,7 @@ char sprnames[NUMSPRITES + 1][5] = "GWLR","SRBA","SRBB","SRBC","SRBD","SRBE","SRBF","SRBG","SRBH","SRBI", "SRBJ","SRBK","SRBL","SRBM","SRBN","SRBO", //SRB2kart Sprites - "SPRG","BSPR","RNDM","RPOP","KFRE","KINV","KINF","DRIF","DSMO","FITM", + "SPRG","BSPR","RNDM","RPOP","KFRE","KINV","KINF","DRIF","DUST","FITM", "BANA","GSHE","JAWZ","SSMN","KRBM","BLIG","LIGH","SINK","SITR","KBLN", "LAKI","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM", "SACO","CRAB","SHAD","BUMP","FLEN","CLAS","PSHW","ARRO","ITEM","ITMI", @@ -2578,11 +2578,10 @@ state_t states[NUMSTATES] = {SPR_DRIF, 4, 2, {NULL}, 0, 0, S_DRIFTSPARK6}, // S_DRIFTSPARK5 {SPR_DRIF, 5, 2, {NULL}, 0, 0, S_DRIFTSPARK4}, // S_DRIFTSPARK6 - {SPR_DSMO, FF_TRANS50|0, 2, {NULL}, 0, 0, S_DRIFTSMOKE2}, // S_DRIFTSMOKE1 - {SPR_DSMO, FF_TRANS50|1, 2, {NULL}, 0, 0, S_DRIFTSMOKE3}, // S_DRIFTSMOKE2 - {SPR_DSMO, FF_TRANS50|2, 2, {NULL}, 0, 0, S_DRIFTSMOKE4}, // S_DRIFTSMOKE3 - {SPR_DSMO, FF_TRANS50|3, 2, {NULL}, 0, 0, S_DRIFTSMOKE5}, // S_DRIFTSMOKE4 - {SPR_DSMO, FF_TRANS50|4, 2, {NULL}, 0, 0, S_NULL}, // S_DRIFTSMOKE5 + {SPR_DUST, 0, 3, {NULL}, 0, 0, S_DRIFTDUST2}, // S_DRIFTDUST1 + {SPR_DUST, 1, 3, {NULL}, 0, 0, S_DRIFTDUST3}, // S_DRIFTDUST2 + {SPR_DUST, FF_TRANS20|2, 3, {NULL}, 0, 0, S_DRIFTDUST4}, // S_DRIFTDUST3 + {SPR_DUST, FF_TRANS20|3, 3, {NULL}, 0, 0, S_NULL}, // S_DRIFTDUST4 {SPR_NULL, 0, 10, {NULL}, 0, 0, S_KARTFIRE2}, // S_KARTFIRE1 {SPR_KFRE, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_KARTFIRE3}, // S_KARTFIRE2 @@ -14376,9 +14375,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_DRIFTSMOKE + { // MT_DRIFTDUST -1, // doomednum - S_DRIFTSMOKE1, // spawnstate + S_DRIFTDUST1, // spawnstate 1000, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -14393,13 +14392,13 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL, // xdeathstate sfx_None, // deathsound 8, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height + 8*FRACUNIT, // radius + 15*FRACUNIT, // height 0, // display offset 100, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags + MF_NOBLOCKMAP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_FLOAT|MF_SCENERY, // flags S_NULL // raisestate }, diff --git a/src/info.h b/src/info.h index a8bc4c5b..0eab772a 100644 --- a/src/info.h +++ b/src/info.h @@ -584,7 +584,7 @@ typedef enum sprite SPR_KINV, // Invincibility sparkle trail SPR_KINF, // Invincibility flash SPR_DRIF, // Drift Sparks - SPR_DSMO, // Drift Smoke + SPR_DUST, // Drift Dust // Kart Items SPR_FITM, // Eggman Monitor @@ -3079,11 +3079,10 @@ typedef enum state S_DRIFTSPARK6, // Drift Smoke - S_DRIFTSMOKE1, - S_DRIFTSMOKE2, - S_DRIFTSMOKE3, - S_DRIFTSMOKE4, - S_DRIFTSMOKE5, + S_DRIFTDUST1, + S_DRIFTDUST2, + S_DRIFTDUST3, + S_DRIFTDUST4, // Magnet Burst @@ -3967,7 +3966,7 @@ typedef enum mobj_type MT_SNEAKERTRAIL, MT_SPARKLETRAIL, MT_DRIFT, - MT_DRIFTSMOKE, + MT_DRIFTDUST, MT_FAKESHIELD, MT_FAKEITEM, diff --git a/src/k_kart.c b/src/k_kart.c index a1bc08d3..71da5668 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1123,7 +1123,49 @@ void K_KartMoveAnimation(player_t *player) static void K_PlayTauntSound(mobj_t *source) { + if (source->player && source->player->kartstuff[k_tauntvoices]) // Prevents taunt sounds from playing every time the button is pressed + return; + S_StartSound(source, sfx_taunt1+P_RandomKey(4)); + + if (source->player) + { + source->player->kartstuff[k_tauntvoices] = 6*TICRATE; + source->player->kartstuff[k_voices] = 3*TICRATE; + } +} + +static void K_PlayOvertakeSound(mobj_t *source) +{ + if (source->player && source->player->kartstuff[k_voices]) // Prevents taunt sounds from playing every time the button is pressed + return; + + // 4 seconds from before race begins, 10 seconds afterwards + if (leveltime < 14*TICRATE) + return; + + S_StartSound(source, sfx_slow); + + if (source->player) + { + source->player->kartstuff[k_voices] = 3*TICRATE; + + if (source->player->kartstuff[k_tauntvoices] < 3*TICRATE) + source->player->kartstuff[k_tauntvoices] = 3*TICRATE; + } +} + +static void K_PlayHitEmSound(mobj_t *source) +{ + S_StartSound(source, sfx_hitem); + + if (source->player) + { + source->player->kartstuff[k_voices] = 3*TICRATE; + + if (source->player->kartstuff[k_tauntvoices] < 3*TICRATE) + source->player->kartstuff[k_tauntvoices] = 3*TICRATE; + } } void K_MomentumToFacing(player_t *player) @@ -1311,11 +1353,8 @@ void K_SpinPlayer(player_t *player, mobj_t *source) || (G_BattleGametype() && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1))) return; - if (source && source != player->mo && source->player && !source->player->kartstuff[k_sounds]) - { - S_StartSound(source, sfx_hitem); - source->player->kartstuff[k_sounds] = 50; - } + if (source && source != player->mo && source->player) + K_PlayHitEmSound(source); player->kartstuff[k_sneakertimer] = 0; player->kartstuff[k_driftboost] = 0; @@ -1770,7 +1809,7 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t angle return NULL; } -void K_SpawnDriftTrail(player_t *player) +void K_SpawnBoostTrail(player_t *player) { fixed_t newx; fixed_t newy; @@ -1810,10 +1849,7 @@ void K_SpawnDriftTrail(player_t *player) ground -= FixedMul(mobjinfo[MT_SNEAKERTRAIL].height, player->mo->scale); } #endif - if (player->kartstuff[k_drift] != 0 && player->kartstuff[k_sneakertimer] == 0) - flame = P_SpawnMobj(newx, newy, ground, MT_DRIFTSMOKE); - else - flame = P_SpawnMobj(newx, newy, ground, MT_SNEAKERTRAIL); + flame = P_SpawnMobj(newx, newy, ground, MT_SNEAKERTRAIL); P_SetTarget(&flame->target, player->mo); flame->angle = travelangle; @@ -1868,6 +1904,67 @@ void K_SpawnSparkleTrail(player_t *player) } } +// K_DriftDustHandling +// Parameters: +// spawner: The map object that is spawning the drift dust +// Description: Spawns the drift dust for objects, players use rmomx/y, other objects use regular momx/y. +// Also plays the drift sound. +// Other objects should be angled towards where they're trying to go so they don't randomly spawn dust +// Do note that most of the function won't run in odd intervals of frames +void K_DriftDustHandling(mobj_t *spawner) +{ + angle_t anglediff; + const INT16 spawnrange = spawner->radius>>FRACBITS; + + if (!P_IsObjectOnGround(spawner) || leveltime % 2 != 0) + return; + + if (spawner->player) + { + angle_t playerangle; + + if (spawner->player->speed < 5<player->cmd.forwardmove < 0) + { + playerangle = spawner->angle+ANGLE_180; + } + else + { + playerangle = spawner->angle; + } + anglediff = abs(playerangle - R_PointToAngle2(0, 0, spawner->player->rmomx, spawner->player->rmomy)); + } + else + { + if (P_AproxDistance(spawner->momx, spawner->momy) < 5<angle - R_PointToAngle2(0, 0, spawner->momx, spawner->momy)); + } + + if (anglediff > ANGLE_180) + anglediff = InvAngle(anglediff); + + if (anglediff > ANG10*4) // Trying to turn further than 40 degrees + { + fixed_t spawnx = P_RandomRange(-spawnrange, spawnrange)<x + spawnx, spawner->y + spawny, spawner->z, MT_DRIFTDUST); + dust->momx = FixedMul(spawner->momx + (P_RandomRange(-speedrange, speedrange)<momy = FixedMul(spawner->momy + (P_RandomRange(-speedrange, speedrange)<momz = P_MobjFlip(spawner) * P_RandomRange(1, 4)<scale = spawner->scale/2; + dust->destscale = spawner->scale * 3; + if (leveltime % 6 == 0) + { + S_StartSound(spawner, sfx_screec); + } + } +} + static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t mapthing, INT32 defaultDir, boolean minethrow) { mobj_t *mo; @@ -2108,11 +2205,7 @@ void K_DoSneaker(player_t *player, boolean doPFlag) if (doPFlag) player->pflags |= PF_ATTACKDOWN; - if (player->kartstuff[k_sounds]) // Prevents taunt sounds from playing every time the button is pressed - return; - K_PlayTauntSound(player->mo); - player->kartstuff[k_sounds] = 50; } static void K_DoShrink(player_t *player) @@ -2144,11 +2237,7 @@ static void K_DoShrink(player_t *player) continue; } - if (player->kartstuff[k_sounds]) // Prevents taunt sounds from playing every time the button is pressed - return; - K_PlayTauntSound(player->mo); - player->kartstuff[k_sounds] = 50; } static void K_DoSPB(player_t *victim, player_t *source) @@ -2343,8 +2432,11 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) else player->kartstuff[k_cardanimation] = 0; - if (player->kartstuff[k_sounds]) - player->kartstuff[k_sounds]--; + if (player->kartstuff[k_voices]) + player->kartstuff[k_voices]--; + + if (player->kartstuff[k_tauntvoices]) + player->kartstuff[k_tauntvoices]--; // ??? /* @@ -2766,17 +2858,16 @@ void K_MoveKartPlayer(player_t *player, boolean onground) K_KartUpdatePosition(player); - /*if (!player->kartstuff[k_positiondelay] && !player->exiting) + if (!player->exiting) { if (player->kartstuff[k_oldposition] <= player->kartstuff[k_position]) // But first, if you lost a place, player->kartstuff[k_oldposition] = player->kartstuff[k_position]; // then the other player taunts. else if (player->kartstuff[k_oldposition] > player->kartstuff[k_position]) // Otherwise, { - //S_StartSound(player->mo, sfx_slow); // Say "YOU'RE TOO SLOW!" + K_PlayOvertakeSound(player->mo); // Say "YOU'RE TOO SLOW!" player->kartstuff[k_oldposition] = player->kartstuff[k_position]; // Restore the old position, - player->kartstuff[k_positiondelay] = 5*TICRATE; // and set up a timer. } - }*/ + } if (player->kartstuff[k_positiondelay]) player->kartstuff[k_positiondelay]--; @@ -3418,12 +3509,6 @@ void K_MoveKartPlayer(player_t *player, boolean onground) S_StartSound(player->mo, sfx_sboost); player->kartstuff[k_sneakertimer] = -((21*(player->kartstuff[k_boostcharge]*player->kartstuff[k_boostcharge]))/425)+131; // max time is 70, min time is 7; yay parabooolas - - if (!player->kartstuff[k_sounds]) // Prevents taunt sounds from playing every time the button is pressed - { - K_PlayTauntSound(player->mo); - player->kartstuff[k_sounds] = 50; - } } // You overcharged your engine? Those things are expensive!!! else if (player->kartstuff[k_boostcharge] > 50) diff --git a/src/k_kart.h b/src/k_kart.h index bf6738e0..6a62915e 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -29,7 +29,8 @@ void K_ExplodePlayer(player_t *player, mobj_t *source); void K_StealBalloon(player_t *player, player_t *victim, boolean force); void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit, mobj_t *source); void K_SpawnMineExplosion(mobj_t *source, UINT8 color); -void K_SpawnDriftTrail(player_t *player); +void K_SpawnBoostTrail(player_t *player); +void K_DriftDustHandling(mobj_t *spawner); void K_SpawnSparkleTrail(player_t *player); void K_DoSneaker(player_t *player, boolean doPFlag); void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed); diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 0b917ade..46b4cab6 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -2080,13 +2080,23 @@ static int lib_kSpawnKartExplosion(lua_State *L) return 0; } -static int lib_kSpawnDriftTrail(lua_State *L) +static int lib_kSpawnBoostTrail(lua_State *L) { player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); NOHUD if (!player) return LUA_ErrInvalid(L, "player_t"); - K_SpawnDriftTrail(player); + K_SpawnBoostTrail(player); + return 0; +} + +static int lib_kDriftDustHandling(lua_State *L) +{ + mobj_t *spawner = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); + NOHUD + if (!spawner) + return LUA_ErrInvalid(L, "mobj_t"); + K_DriftDustHandling(spawner); return 0; } @@ -2344,7 +2354,8 @@ static luaL_Reg lib[] = { {"K_ExplodePlayer",lib_kExplodePlayer}, {"K_StealBalloon",lib_kStealBalloon}, {"K_SpawnKartExplosion",lib_kSpawnKartExplosion}, - {"K_SpawnDriftTrail",lib_kSpawnDriftTrail}, + {"K_SpawnBoostTrail",lib_kSpawnBoostTrail}, + {"K_DriftDustHandling",lib_kDriftDustHandling}, {"K_SpawnSparkleTrail",lib_kSpawnSparkleTrail}, {"K_DoSneaker",lib_kDoSneaker}, {"K_DoPogoSpring",lib_kDoPogoSpring}, diff --git a/src/p_mobj.c b/src/p_mobj.c index ac723813..2fc4f8de 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -7996,6 +7996,13 @@ void P_MobjThinker(mobj_t *mobj) mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy); P_InstaThrust(mobj, mobj->angle, topspeed); + if (mobj->tracer) + mobj->angle = R_PointToAngle2(mobj->x, mobj->y, mobj->tracer->x, mobj->tracer->y); + else + mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy); + + K_DriftDustHandling(mobj); + sec2 = P_ThingOnSpecial3DFloor(mobj); if ((sec2 && GETSECSPECIAL(sec2->special, 3) == 1) || (P_IsObjectOnRealGround(mobj, mobj->subsector->sector) diff --git a/src/p_user.c b/src/p_user.c index 5b730c74..f010fde1 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1689,14 +1689,14 @@ void P_DoPlayerExit(player_t *player) else if (!countdown) countdown = cv_countdowntime.value*TICRATE + 1; // Use cv_countdowntime -/* + if (circuitmap) { - if (player->kartstuff[k_position] <= 3) - S_StartSound(player->mo, sfx_kwin); - else + if (K_IsPlayerLosing(player)) S_StartSound(player->mo, sfx_klose); - }*/ + else + S_StartSound(player->mo, sfx_kwin); + } if (P_IsLocalPlayer(player) && cv_inttime.value > 0) { @@ -6922,8 +6922,10 @@ static void P_MovePlayer(player_t *player) //////////////////////////// // SRB2kart - Drifting smoke and fire - if ((player->kartstuff[k_drift] != 0 || player->kartstuff[k_sneakertimer] > 0) && onground && (leveltime & 1)) - K_SpawnDriftTrail(player); + if (player->kartstuff[k_sneakertimer] > 0 && onground && (leveltime & 1)) + K_SpawnBoostTrail(player); + + K_DriftDustHandling(player->mo); /* // SRB2kart - nadah // If the player isn't on the ground, make sure they aren't in a "starting dash" position. diff --git a/src/sounds.c b/src/sounds.c index f81d2735..dad85ffc 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -805,6 +805,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"vroom", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"boing", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"smkinv", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"screec", false, 52, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // SRB2kart - Skin sounds {"kwin", false, 64, 0, -1, NULL, 0, SKSWIN, -1, LUMPERROR}, diff --git a/src/sounds.h b/src/sounds.h index d71a21f7..fe762c2e 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -877,6 +877,7 @@ typedef enum sfx_vroom, sfx_boing, sfx_smkinv, + sfx_screec, sfx_kwin, sfx_klose,