Merge branch 'master' into sonicitems

This commit is contained in:
TehRealSalt 2018-06-09 22:50:21 -04:00
commit a041efde6c
13 changed files with 207 additions and 101 deletions

View file

@ -278,7 +278,8 @@ typedef enum
k_throwdir, // Held dir of controls; 1 = forward, 0 = none, -1 = backward (was "player->heldDir") 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_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_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_boosting, // Determines if you're currently shroom-boosting
k_floorboost, // Prevents Sneaker sounds for a breif duration when triggered by a floor panel k_floorboost, // Prevents Sneaker sounds for a breif duration when triggered by a floor panel

View file

@ -6237,11 +6237,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_DRIFTSPARK6", "S_DRIFTSPARK6",
// Drift Smoke // Drift Smoke
"S_DRIFTSMOKE1", "S_DRIFTDUST1",
"S_DRIFTSMOKE2", "S_DRIFTDUST2",
"S_DRIFTSMOKE3", "S_DRIFTDUST3",
"S_DRIFTSMOKE4", "S_DRIFTDUST4",
"S_DRIFTSMOKE5",
// Lightning Shield Burst // Lightning Shield Burst
@ -7108,7 +7107,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_SNEAKERTRAIL", "MT_SNEAKERTRAIL",
"MT_SPARKLETRAIL", "MT_SPARKLETRAIL",
"MT_DRIFT", "MT_DRIFT",
"MT_DRIFTSMOKE", "MT_DRIFTDUST",
"MT_FAKESHIELD", "MT_FAKESHIELD",
"MT_FAKEITEM", "MT_FAKEITEM",
@ -7544,7 +7543,8 @@ static const char *const KARTSTUFF_LIST[] = {
"THROWDIR", "THROWDIR",
"LAPANIMATION", "LAPANIMATION",
"CARDANIMATION", "CARDANIMATION",
"SOUNDS", "VOICES",
"TAUNTVOICES",
"BOOSTING", "BOOSTING",
"FLOORBOOST", "FLOORBOOST",

View file

@ -68,7 +68,6 @@ typedef struct gr_vissprite_s
struct gr_vissprite_s *prev; struct gr_vissprite_s *prev;
struct gr_vissprite_s *next; struct gr_vissprite_s *next;
float x1, x2; float x1, x2;
float z1, z2;
float tz, ty; float tz, ty;
lumpnum_t patchlumpnum; lumpnum_t patchlumpnum;
boolean flip; boolean flip;
@ -79,6 +78,7 @@ typedef struct gr_vissprite_s
//Hurdler: 25/04/2000: now support colormap in hardware mode //Hurdler: 25/04/2000: now support colormap in hardware mode
UINT8 *colormap; UINT8 *colormap;
INT32 dispoffset; // copy of info->dispoffset, affects ordering but not drawing INT32 dispoffset; // copy of info->dispoffset, affects ordering but not drawing
float z1, z2;
} gr_vissprite_t; } gr_vissprite_t;
// -------- // --------

View file

@ -5190,7 +5190,6 @@ static void HWR_ProjectSprite(mobj_t *thing)
float tr_x, tr_y; float tr_x, tr_y;
float tz; float tz;
float x1, x2; float x1, x2;
float z1, z2;
float rightsin, rightcos; float rightsin, rightcos;
float this_scale; float this_scale;
float gz, gzt; float gz, gzt;
@ -5202,7 +5201,7 @@ static void HWR_ProjectSprite(mobj_t *thing)
angle_t ang; angle_t ang;
INT32 heightsec, phs; INT32 heightsec, phs;
const boolean papersprite = (thing->frame & FF_PAPERSPRITE); const boolean papersprite = (thing->frame & FF_PAPERSPRITE);
float ang_scale = 1.0f, ang_scalez = 0.0f; float z1, z2;
if (!thing) if (!thing)
return; return;
@ -5257,31 +5256,10 @@ static void HWR_ProjectSprite(mobj_t *thing)
I_Error("sprframes NULL for sprite %d\n", thing->sprite); I_Error("sprframes NULL for sprite %d\n", thing->sprite);
#endif #endif
if (papersprite) if (thing->player)
{ ang = R_PointToAngle (thing->x, thing->y) - thing->player->frameangle;
// Use the actual view angle, rather than the angle formed else
// between the view point and the thing ang = R_PointToAngle (thing->x, thing->y) - thing->angle;
// 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 (sprframe->rotate == SRF_SINGLE) if (sprframe->rotate == SRF_SINGLE)
{ {
@ -5289,6 +5267,14 @@ static void HWR_ProjectSprite(mobj_t *thing)
rot = 0; //Fab: for vis->patch below rot = 0; //Fab: for vis->patch below
lumpoff = sprframe->lumpid[0]; //Fab: see note above lumpoff = sprframe->lumpid[0]; //Fab: see note above
flip = sprframe->flip; // Will only be 0x00 or 0xFF flip = sprframe->flip; // Will only be 0x00 or 0xFF
if (papersprite && ang < ANGLE_180)
{
if (flip)
flip = 0;
else
flip = 255;
}
} }
else else
{ {
@ -5303,13 +5289,30 @@ static void HWR_ProjectSprite(mobj_t *thing)
//Fab: lumpid is the index for spritewidth,spriteoffset... tables //Fab: lumpid is the index for spritewidth,spriteoffset... tables
lumpoff = sprframe->lumpid[rot]; lumpoff = sprframe->lumpid[rot];
flip = sprframe->flip & (1<<rot); flip = sprframe->flip & (1<<rot);
if (papersprite && ang < ANGLE_180)
{
if (flip)
flip = 0;
else
flip = 1<<rot;
}
} }
if (thing->skin && ((skin_t *)thing->skin)->flags & SF_HIRES) if (thing->skin && ((skin_t *)thing->skin)->flags & SF_HIRES)
this_scale = this_scale * FIXED_TO_FLOAT(((skin_t *)thing->skin)->highresscale); this_scale = this_scale * FIXED_TO_FLOAT(((skin_t *)thing->skin)->highresscale);
rightsin = FIXED_TO_FLOAT(FINESINE((viewangle + ANGLE_90)>>ANGLETOFINESHIFT)); if (papersprite)
rightcos = FIXED_TO_FLOAT(FINECOSINE((viewangle + ANGLE_90)>>ANGLETOFINESHIFT)); {
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) if (flip)
{ {
x1 = (FIXED_TO_FLOAT(spritecachedinfo[lumpoff].width - spritecachedinfo[lumpoff].offset) * this_scale); 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; z1 = tr_y + x1 * rightsin;
z2 = tr_y - x2 * rightsin; z2 = tr_y - x2 * rightsin;
if (papersprite && max(z1, z2) < ZCLIP_PLANE)
return;
x1 = tr_x + x1 * rightcos; x1 = tr_x + x1 * rightcos;
x2 = tr_x - x2 * rightcos; x2 = tr_x - x2 * rightcos;

View file

@ -55,7 +55,7 @@ char sprnames[NUMSPRITES + 1][5] =
"GWLR","SRBA","SRBB","SRBC","SRBD","SRBE","SRBF","SRBG","SRBH","SRBI", "GWLR","SRBA","SRBB","SRBC","SRBD","SRBE","SRBF","SRBG","SRBH","SRBI",
"SRBJ","SRBK","SRBL","SRBM","SRBN","SRBO", "SRBJ","SRBK","SRBL","SRBM","SRBN","SRBO",
//SRB2kart Sprites //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", "BANA","GSHE","JAWZ","SSMN","KRBM","BLIG","LIGH","SINK","SITR","KBLN",
"LAKI","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM", "LAKI","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM",
"SACO","CRAB","SHAD","BUMP","FLEN","CLAS","PSHW","ARRO","ITEM","ITMI", "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, 4, 2, {NULL}, 0, 0, S_DRIFTSPARK6}, // S_DRIFTSPARK5
{SPR_DRIF, 5, 2, {NULL}, 0, 0, S_DRIFTSPARK4}, // S_DRIFTSPARK6 {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_DUST, 0, 3, {NULL}, 0, 0, S_DRIFTDUST2}, // S_DRIFTDUST1
{SPR_DSMO, FF_TRANS50|1, 2, {NULL}, 0, 0, S_DRIFTSMOKE3}, // S_DRIFTSMOKE2 {SPR_DUST, 1, 3, {NULL}, 0, 0, S_DRIFTDUST3}, // S_DRIFTDUST2
{SPR_DSMO, FF_TRANS50|2, 2, {NULL}, 0, 0, S_DRIFTSMOKE4}, // S_DRIFTSMOKE3 {SPR_DUST, FF_TRANS20|2, 3, {NULL}, 0, 0, S_DRIFTDUST4}, // S_DRIFTDUST3
{SPR_DSMO, FF_TRANS50|3, 2, {NULL}, 0, 0, S_DRIFTSMOKE5}, // S_DRIFTSMOKE4 {SPR_DUST, FF_TRANS20|3, 3, {NULL}, 0, 0, S_NULL}, // S_DRIFTDUST4
{SPR_DSMO, FF_TRANS50|4, 2, {NULL}, 0, 0, S_NULL}, // S_DRIFTSMOKE5
{SPR_NULL, 0, 10, {NULL}, 0, 0, S_KARTFIRE2}, // S_KARTFIRE1 {SPR_NULL, 0, 10, {NULL}, 0, 0, S_KARTFIRE2}, // S_KARTFIRE1
{SPR_KFRE, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_KARTFIRE3}, // S_KARTFIRE2 {SPR_KFRE, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_KARTFIRE3}, // S_KARTFIRE2
@ -14376,9 +14375,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate S_NULL // raisestate
}, },
{ // MT_DRIFTSMOKE { // MT_DRIFTDUST
-1, // doomednum -1, // doomednum
S_DRIFTSMOKE1, // spawnstate S_DRIFTDUST1, // spawnstate
1000, // spawnhealth 1000, // spawnhealth
S_NULL, // seestate S_NULL, // seestate
sfx_None, // seesound sfx_None, // seesound
@ -14393,13 +14392,13 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_None, // deathsound sfx_None, // deathsound
8, // speed 8, // speed
20*FRACUNIT, // radius 8*FRACUNIT, // radius
16*FRACUNIT, // height 15*FRACUNIT, // height
0, // display offset 0, // display offset
100, // mass 100, // mass
0, // damage 0, // damage
sfx_None, // activesound 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 S_NULL // raisestate
}, },

View file

@ -584,7 +584,7 @@ typedef enum sprite
SPR_KINV, // Invincibility sparkle trail SPR_KINV, // Invincibility sparkle trail
SPR_KINF, // Invincibility flash SPR_KINF, // Invincibility flash
SPR_DRIF, // Drift Sparks SPR_DRIF, // Drift Sparks
SPR_DSMO, // Drift Smoke SPR_DUST, // Drift Dust
// Kart Items // Kart Items
SPR_FITM, // Eggman Monitor SPR_FITM, // Eggman Monitor
@ -3079,11 +3079,10 @@ typedef enum state
S_DRIFTSPARK6, S_DRIFTSPARK6,
// Drift Smoke // Drift Smoke
S_DRIFTSMOKE1, S_DRIFTDUST1,
S_DRIFTSMOKE2, S_DRIFTDUST2,
S_DRIFTSMOKE3, S_DRIFTDUST3,
S_DRIFTSMOKE4, S_DRIFTDUST4,
S_DRIFTSMOKE5,
// Magnet Burst // Magnet Burst
@ -3967,7 +3966,7 @@ typedef enum mobj_type
MT_SNEAKERTRAIL, MT_SNEAKERTRAIL,
MT_SPARKLETRAIL, MT_SPARKLETRAIL,
MT_DRIFT, MT_DRIFT,
MT_DRIFTSMOKE, MT_DRIFTDUST,
MT_FAKESHIELD, MT_FAKESHIELD,
MT_FAKEITEM, MT_FAKEITEM,

View file

@ -1123,7 +1123,49 @@ void K_KartMoveAnimation(player_t *player)
static void K_PlayTauntSound(mobj_t *source) 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)); 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) 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))) || (G_BattleGametype() && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1)))
return; return;
if (source && source != player->mo && source->player && !source->player->kartstuff[k_sounds]) if (source && source != player->mo && source->player)
{ K_PlayHitEmSound(source);
S_StartSound(source, sfx_hitem);
source->player->kartstuff[k_sounds] = 50;
}
player->kartstuff[k_sneakertimer] = 0; player->kartstuff[k_sneakertimer] = 0;
player->kartstuff[k_driftboost] = 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; return NULL;
} }
void K_SpawnDriftTrail(player_t *player) void K_SpawnBoostTrail(player_t *player)
{ {
fixed_t newx; fixed_t newx;
fixed_t newy; fixed_t newy;
@ -1810,10 +1849,7 @@ void K_SpawnDriftTrail(player_t *player)
ground -= FixedMul(mobjinfo[MT_SNEAKERTRAIL].height, player->mo->scale); ground -= FixedMul(mobjinfo[MT_SNEAKERTRAIL].height, player->mo->scale);
} }
#endif #endif
if (player->kartstuff[k_drift] != 0 && player->kartstuff[k_sneakertimer] == 0) flame = P_SpawnMobj(newx, newy, ground, MT_SNEAKERTRAIL);
flame = P_SpawnMobj(newx, newy, ground, MT_DRIFTSMOKE);
else
flame = P_SpawnMobj(newx, newy, ground, MT_SNEAKERTRAIL);
P_SetTarget(&flame->target, player->mo); P_SetTarget(&flame->target, player->mo);
flame->angle = travelangle; 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<<FRACBITS)
return;
if (spawner->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<<FRACBITS)
return;
anglediff = abs(spawner->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)<<FRACBITS;
fixed_t spawny = P_RandomRange(-spawnrange, spawnrange)<<FRACBITS;
INT32 speedrange = 2;
mobj_t *dust = P_SpawnMobj(spawner->x + spawnx, spawner->y + spawny, spawner->z, MT_DRIFTDUST);
dust->momx = FixedMul(spawner->momx + (P_RandomRange(-speedrange, speedrange)<<FRACBITS), 3*FRACUNIT/4);
dust->momy = FixedMul(spawner->momy + (P_RandomRange(-speedrange, speedrange)<<FRACBITS), 3*FRACUNIT/4);
dust->momz = P_MobjFlip(spawner) * P_RandomRange(1, 4)<<FRACBITS;
dust->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) static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t mapthing, INT32 defaultDir, boolean minethrow)
{ {
mobj_t *mo; mobj_t *mo;
@ -2108,11 +2205,7 @@ void K_DoSneaker(player_t *player, boolean doPFlag)
if (doPFlag) if (doPFlag)
player->pflags |= PF_ATTACKDOWN; 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); K_PlayTauntSound(player->mo);
player->kartstuff[k_sounds] = 50;
} }
static void K_DoShrink(player_t *player) static void K_DoShrink(player_t *player)
@ -2144,11 +2237,7 @@ static void K_DoShrink(player_t *player)
continue; continue;
} }
if (player->kartstuff[k_sounds]) // Prevents taunt sounds from playing every time the button is pressed
return;
K_PlayTauntSound(player->mo); K_PlayTauntSound(player->mo);
player->kartstuff[k_sounds] = 50;
} }
static void K_DoSPB(player_t *victim, player_t *source) static void K_DoSPB(player_t *victim, player_t *source)
@ -2343,8 +2432,11 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
else else
player->kartstuff[k_cardanimation] = 0; player->kartstuff[k_cardanimation] = 0;
if (player->kartstuff[k_sounds]) if (player->kartstuff[k_voices])
player->kartstuff[k_sounds]--; 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); 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, 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. player->kartstuff[k_oldposition] = player->kartstuff[k_position]; // then the other player taunts.
else if (player->kartstuff[k_oldposition] > player->kartstuff[k_position]) // Otherwise, 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_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]) if (player->kartstuff[k_positiondelay])
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); 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 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!!! // You overcharged your engine? Those things are expensive!!!
else if (player->kartstuff[k_boostcharge] > 50) else if (player->kartstuff[k_boostcharge] > 50)

View file

@ -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_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_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_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_SpawnSparkleTrail(player_t *player);
void K_DoSneaker(player_t *player, boolean doPFlag); void K_DoSneaker(player_t *player, boolean doPFlag);
void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed); void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed);

View file

@ -2080,13 +2080,23 @@ static int lib_kSpawnKartExplosion(lua_State *L)
return 0; 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)); player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
NOHUD NOHUD
if (!player) if (!player)
return LUA_ErrInvalid(L, "player_t"); 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; return 0;
} }
@ -2344,7 +2354,8 @@ static luaL_Reg lib[] = {
{"K_ExplodePlayer",lib_kExplodePlayer}, {"K_ExplodePlayer",lib_kExplodePlayer},
{"K_StealBalloon",lib_kStealBalloon}, {"K_StealBalloon",lib_kStealBalloon},
{"K_SpawnKartExplosion",lib_kSpawnKartExplosion}, {"K_SpawnKartExplosion",lib_kSpawnKartExplosion},
{"K_SpawnDriftTrail",lib_kSpawnDriftTrail}, {"K_SpawnBoostTrail",lib_kSpawnBoostTrail},
{"K_DriftDustHandling",lib_kDriftDustHandling},
{"K_SpawnSparkleTrail",lib_kSpawnSparkleTrail}, {"K_SpawnSparkleTrail",lib_kSpawnSparkleTrail},
{"K_DoSneaker",lib_kDoSneaker}, {"K_DoSneaker",lib_kDoSneaker},
{"K_DoPogoSpring",lib_kDoPogoSpring}, {"K_DoPogoSpring",lib_kDoPogoSpring},

View file

@ -7996,6 +7996,13 @@ void P_MobjThinker(mobj_t *mobj)
mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy); mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy);
P_InstaThrust(mobj, mobj->angle, topspeed); 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); sec2 = P_ThingOnSpecial3DFloor(mobj);
if ((sec2 && GETSECSPECIAL(sec2->special, 3) == 1) if ((sec2 && GETSECSPECIAL(sec2->special, 3) == 1)
|| (P_IsObjectOnRealGround(mobj, mobj->subsector->sector) || (P_IsObjectOnRealGround(mobj, mobj->subsector->sector)

View file

@ -1689,14 +1689,14 @@ void P_DoPlayerExit(player_t *player)
else if (!countdown) else if (!countdown)
countdown = cv_countdowntime.value*TICRATE + 1; // Use cv_countdowntime countdown = cv_countdowntime.value*TICRATE + 1; // Use cv_countdowntime
/*
if (circuitmap) if (circuitmap)
{ {
if (player->kartstuff[k_position] <= 3) if (K_IsPlayerLosing(player))
S_StartSound(player->mo, sfx_kwin);
else
S_StartSound(player->mo, sfx_klose); S_StartSound(player->mo, sfx_klose);
}*/ else
S_StartSound(player->mo, sfx_kwin);
}
if (P_IsLocalPlayer(player) && cv_inttime.value > 0) if (P_IsLocalPlayer(player) && cv_inttime.value > 0)
{ {
@ -6922,8 +6922,10 @@ static void P_MovePlayer(player_t *player)
//////////////////////////// ////////////////////////////
// SRB2kart - Drifting smoke and fire // SRB2kart - Drifting smoke and fire
if ((player->kartstuff[k_drift] != 0 || player->kartstuff[k_sneakertimer] > 0) && onground && (leveltime & 1)) if (player->kartstuff[k_sneakertimer] > 0 && onground && (leveltime & 1))
K_SpawnDriftTrail(player); K_SpawnBoostTrail(player);
K_DriftDustHandling(player->mo);
/* // SRB2kart - nadah /* // SRB2kart - nadah
// If the player isn't on the ground, make sure they aren't in a "starting dash" position. // If the player isn't on the ground, make sure they aren't in a "starting dash" position.

View file

@ -805,6 +805,7 @@ sfxinfo_t S_sfx[NUMSFX] =
{"vroom", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"vroom", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"boing", 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}, {"smkinv", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR},
{"screec", false, 52, 0, -1, NULL, 0, -1, -1, LUMPERROR},
// SRB2kart - Skin sounds // SRB2kart - Skin sounds
{"kwin", false, 64, 0, -1, NULL, 0, SKSWIN, -1, LUMPERROR}, {"kwin", false, 64, 0, -1, NULL, 0, SKSWIN, -1, LUMPERROR},

View file

@ -877,6 +877,7 @@ typedef enum
sfx_vroom, sfx_vroom,
sfx_boing, sfx_boing,
sfx_smkinv, sfx_smkinv,
sfx_screec,
sfx_kwin, sfx_kwin,
sfx_klose, sfx_klose,