Add shield sounds and rework bubbleshield
BS now only has two defend / attack uses, trap gives less height and you can dropdash from the trap
This commit is contained in:
parent
458aef786b
commit
475524e7ad
7 changed files with 59 additions and 8 deletions
|
|
@ -610,6 +610,7 @@ struct player_t
|
|||
UINT8 curshield; // see kartshields_t
|
||||
UINT8 bubblecool; // Bubble Shield use cooldown
|
||||
UINT8 bubbleblowup; // Bubble Shield usage blowup
|
||||
UINT8 bubblepop; // Bubble Shield usage count
|
||||
UINT16 flamedash; // Flame Shield dash power
|
||||
UINT16 flamemeter; // Flame Shield dash meter left
|
||||
UINT8 flamelength; // Flame Shield dash meter, number of segments
|
||||
|
|
|
|||
|
|
@ -734,6 +734,20 @@ boolean K_BubbleShieldCollide(mobj_t *t1, mobj_t *t2)
|
|||
|
||||
// Player Damage
|
||||
P_DamageMobj(t2, ((t1->type == MT_BUBBLESHIELD) ? t1->target : t1), t1, 1, DMG_NORMAL);
|
||||
|
||||
if (t1->target->player)
|
||||
{
|
||||
player_t *player = t1->target->player;
|
||||
|
||||
player->bubblepop++;
|
||||
|
||||
if (player->bubblepop > 1)
|
||||
{
|
||||
K_DropHnextList(player, false);
|
||||
player->bubblepop = 0;
|
||||
}
|
||||
}
|
||||
|
||||
S_StartSound(t1, sfx_s3k44);
|
||||
}
|
||||
else
|
||||
|
|
@ -753,7 +767,21 @@ boolean K_BubbleShieldCollide(mobj_t *t1, mobj_t *t2)
|
|||
}
|
||||
if (t2->type == MT_JAWZ)
|
||||
P_SetTarget(&t2->tracer, t2->target); // Back to the source!
|
||||
t2->threshold = 10;
|
||||
|
||||
if (t1->target->player)
|
||||
{
|
||||
player_t *player = t1->target->player;
|
||||
|
||||
player->bubblepop++;
|
||||
|
||||
if (player->bubblepop > 1)
|
||||
{
|
||||
K_DropHnextList(player, false);
|
||||
player->bubblepop = 0;
|
||||
}
|
||||
}
|
||||
|
||||
t2->threshold = 20;
|
||||
S_StartSound(t1, sfx_s3k44);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1000,6 +1000,12 @@ static void K_drawKartItem(void)
|
|||
else
|
||||
localpatch = kp_nodraw;
|
||||
}
|
||||
else if (stplyr->curshield == KSHIELD_BUBBLE)
|
||||
{
|
||||
localpatch = kp_bubbleshield[offset];
|
||||
itembar = 2 - stplyr->bubblepop;
|
||||
maxl = 2;
|
||||
}
|
||||
else if (stplyr->sadtimer > 0)
|
||||
{
|
||||
if (leveltime & 2)
|
||||
|
|
|
|||
18
src/k_kart.c
18
src/k_kart.c
|
|
@ -5302,9 +5302,17 @@ void K_DropHnextList(player_t *player, boolean keepshields)
|
|||
|
||||
if (shield != KSHIELD_NONE && !keepshields)
|
||||
{
|
||||
if (shield == KSHIELD_THUNDER)
|
||||
switch (shield)
|
||||
{
|
||||
K_DoThunderShield(player);
|
||||
case KSHIELD_THUNDER:
|
||||
K_DoThunderShield(player);
|
||||
break;
|
||||
case KSHIELD_BUBBLE:
|
||||
S_StartSound(player->mo, sfx_s3k4b);
|
||||
break;
|
||||
case KSHIELD_FLAME:
|
||||
S_StartSound(player->mo, sfx_s3k37);
|
||||
break;
|
||||
}
|
||||
|
||||
player->curshield = KSHIELD_NONE;
|
||||
|
|
@ -9528,7 +9536,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
|
||||
if (player->flamedash == 0)
|
||||
{
|
||||
S_StartSound(player->mo, sfx_s3k43);
|
||||
S_StartSound(player->mo, sfx_s3k48);
|
||||
K_PlayBoostTaunt(player->mo);
|
||||
}
|
||||
|
||||
|
|
@ -9547,9 +9555,11 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
{
|
||||
P_Thrust(
|
||||
player->mo, player->mo->angle,
|
||||
FixedMul((50*player->mo->scale), K_GetKartGameSpeedScalar(gamespeed))
|
||||
FixedMul((25*player->mo->scale), K_GetKartGameSpeedScalar(gamespeed))
|
||||
);
|
||||
|
||||
S_StartSound(player->mo, sfx_s3k47);
|
||||
|
||||
player->flamemeter = 0;
|
||||
player->flamelength = 0;
|
||||
player->itemflags &= ~IF_HOLDREADY;
|
||||
|
|
|
|||
|
|
@ -2227,6 +2227,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
if (!((damagetype & DMG_NORMAL) || (damagetype & DMG_WIPEOUT)))
|
||||
player->sneakertimer = 0;
|
||||
player->driftboost = 0;
|
||||
player->bubblepop = 0;
|
||||
player->ringboost = 0;
|
||||
player->glanceDir = 0;
|
||||
player->pflags &= ~PF_GAINAX;
|
||||
|
|
|
|||
|
|
@ -8182,7 +8182,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
mobj->momz = 0;
|
||||
mobj->destscale = ((5*mobj->tracer->scale)>>2) + (mobj->tracer->scale>>3);
|
||||
|
||||
mobj->tracer->momz = (8*mobj->tracer->scale) * P_MobjFlip(mobj->tracer);
|
||||
mobj->tracer->momz = (5*mobj->tracer->scale) * P_MobjFlip(mobj->tracer);
|
||||
|
||||
mobj->tracer->momx = (31*mobj->tracer->momx)/32;
|
||||
mobj->tracer->momy = (31*mobj->tracer->momy)/32;
|
||||
|
|
@ -8213,14 +8213,17 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
mobj->tracer->y + P_ReturnThrustY(NULL, mobj->tracer->angle+ANGLE_90, (mobj->cvmem)<<FRACBITS),
|
||||
mobj->tracer->z - (4*mobj->tracer->scale) + (P_RandomRange(-abs(mobj->cvmem), abs(mobj->cvmem))<<FRACBITS));
|
||||
|
||||
if (mobj->movecount > 4*TICRATE)
|
||||
if (mobj->movecount > 5*TICRATE)
|
||||
{
|
||||
S_StartSound(mobj->tracer, sfx_s3k77);
|
||||
mobj->tracer->flags &= ~MF_NOGRAVITY;
|
||||
P_KillMobj(mobj, mobj->tracer, mobj->tracer, DMG_NORMAL);
|
||||
player->respawn = 1;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// Uses cmd.turning over steering intentionally.
|
||||
if (abs(player->cmd.turning) > 100)
|
||||
{
|
||||
INT32 lastsign = 0;
|
||||
|
|
@ -8232,7 +8235,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
if ((player->cmd.turning > 0 && lastsign < 0)
|
||||
|| (player->cmd.turning < 0 && lastsign > 0))
|
||||
{
|
||||
mobj->movecount += (TICRATE/2);
|
||||
mobj->movecount += (TICRATE/4);
|
||||
mobj->cvmem = 8*lastsign;
|
||||
S_StartSound(mobj, sfx_s3k7a);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -303,6 +303,7 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
WRITEUINT8(save->p, players[i].curshield);
|
||||
WRITEUINT8(save->p, players[i].bubblecool);
|
||||
WRITEUINT8(save->p, players[i].bubbleblowup);
|
||||
WRITEUINT8(save->p, players[i].bubblepop);
|
||||
WRITEUINT16(save->p, players[i].flamedash);
|
||||
WRITEUINT16(save->p, players[i].flamemeter);
|
||||
WRITEUINT8(save->p, players[i].flamelength);
|
||||
|
|
@ -604,6 +605,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
|||
players[i].curshield = READUINT8(save->p);
|
||||
players[i].bubblecool = READUINT8(save->p);
|
||||
players[i].bubbleblowup = READUINT8(save->p);
|
||||
players[i].bubblepop = READUINT8(save->p);
|
||||
players[i].flamedash = READUINT16(save->p);
|
||||
players[i].flamemeter = READUINT16(save->p);
|
||||
players[i].flamelength = READUINT8(save->p);
|
||||
|
|
|
|||
Loading…
Reference in a new issue