mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
BLASTER finalisation
- BLASTER >= 180% speed, smaller boost otherwise - Flickers under 150% - Invinc-coloured when invincibility - Ketchup coloured when boosting, invisible otherwise
This commit is contained in:
parent
b9e3bdff94
commit
bdd786d8ab
4 changed files with 71 additions and 47 deletions
29
src/info.c
29
src/info.c
|
|
@ -580,7 +580,8 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"BEXS", // Battle Bumper Explosion: Shell
|
||||
"BDEB", // Battle Bumper Explosion: Debris
|
||||
"BEXB", // Battle Bumper Explosion: Blast
|
||||
"TWBT", // Tripwire Boost
|
||||
"TWBS", // Tripwire Boost
|
||||
"TWBT", // Tripwire BLASTER
|
||||
"DEZL", // DEZ Laser respawn
|
||||
|
||||
// Additional Kart Objects
|
||||
|
|
@ -4361,21 +4362,11 @@ state_t states[NUMSTATES] =
|
|||
{SPR_BEXB, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_TRANS80, 2, {NULL}, 0, 0, S_BATTLEBUMPER_EXBLAST10}, // S_BATTLEBUMPER_EXBLAST9
|
||||
{SPR_BEXB, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_TRANS90, 2, {NULL}, 0, 0, S_NULL}, // S_BATTLEBUMPER_EXBLAST10
|
||||
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD, 2, {NULL}, 0, 0, S_TRIPWIREBOOST_TOP2}, // S_TRIPWIREBOOST_TOP1
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|1, 2, {NULL}, 0, 0, S_TRIPWIREBOOST_TOP3}, // S_TRIPWIREBOOST_TOP2
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|2, 2, {NULL}, 0, 0, S_TRIPWIREBOOST_TOP4}, // S_TRIPWIREBOOST_TOP3
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|3, 2, {NULL}, 0, 0, S_TRIPWIREBOOST_TOP5}, // S_TRIPWIREBOOST_TOP4
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|4, 2, {NULL}, 0, 0, S_TRIPWIREBOOST_TOP6}, // S_TRIPWIREBOOST_TOP5
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|5, 2, {NULL}, 0, 0, S_TRIPWIREBOOST_TOP7}, // S_TRIPWIREBOOST_TOP6
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|6, 2, {NULL}, 0, 0, S_TRIPWIREBOOST_TOP1}, // S_TRIPWIREBOOST_TOP7
|
||||
{SPR_TWBS, FF_FULLBRIGHT|FF_ADD|FF_ANIMATE, -1, {NULL}, 6, 2, S_NULL}, // S_TRIPWIREBOOST_TOP
|
||||
{SPR_TWBS, FF_FULLBRIGHT|FF_ADD|FF_ANIMATE|FF_VERTICALFLIP|FF_HORIZONTALFLIP, -1, {NULL}, 6, 2, S_NULL}, // S_TRIPWIREBOOST_BOTTOM
|
||||
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|FF_VERTICALFLIP|FF_HORIZONTALFLIP, 2, {NULL}, 0, 0, S_TRIPWIREBOOST_BOTTOM2}, // S_TRIPWIREBOOST_BOTTOM1
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|FF_VERTICALFLIP|FF_HORIZONTALFLIP|1, 2, {NULL}, 0, 0, S_TRIPWIREBOOST_BOTTOM3}, // S_TRIPWIREBOOST_BOTTOM2
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|FF_VERTICALFLIP|FF_HORIZONTALFLIP|2, 2, {NULL}, 0, 0, S_TRIPWIREBOOST_BOTTOM4}, // S_TRIPWIREBOOST_BOTTOM3
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|FF_VERTICALFLIP|FF_HORIZONTALFLIP|3, 2, {NULL}, 0, 0, S_TRIPWIREBOOST_BOTTOM5}, // S_TRIPWIREBOOST_BOTTOM4
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|FF_VERTICALFLIP|FF_HORIZONTALFLIP|4, 2, {NULL}, 0, 0, S_TRIPWIREBOOST_BOTTOM6}, // S_TRIPWIREBOOST_BOTTOM5
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|FF_VERTICALFLIP|FF_HORIZONTALFLIP|5, 2, {NULL}, 0, 0, S_TRIPWIREBOOST_BOTTOM7}, // S_TRIPWIREBOOST_BOTTOM6
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|FF_VERTICALFLIP|FF_HORIZONTALFLIP|6, 2, {NULL}, 0, 0, S_TRIPWIREBOOST_BOTTOM1}, // S_TRIPWIREBOOST_BOTTOM7
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|FF_ANIMATE, -1, {NULL}, 6, 2, S_NULL}, // S_TRIPWIREBOOST_BLAST_TOP
|
||||
{SPR_TWBT, FF_FULLBRIGHT|FF_ADD|FF_ANIMATE|FF_VERTICALFLIP|FF_HORIZONTALFLIP, -1, {NULL}, 6, 2, S_NULL}, // S_TRIPWIREBOOST_BLAST_BOTTOM
|
||||
|
||||
{SPR_DEZL, FF_FULLBRIGHT|FF_PAPERSPRITE, 8, {NULL}, 0, 0, S_NULL}, // S_DEZLASER
|
||||
{SPR_DEZL, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_DEZLASER_TRAIL2}, // S_DEZLASER_TRAIL1
|
||||
|
|
@ -24182,17 +24173,17 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
|
||||
{ // MT_TRIPWIREBOOST
|
||||
-1, // doomednum
|
||||
S_TRIPWIREBOOST_TOP1, // spawnstate
|
||||
S_TRIPWIREBOOST_TOP, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_TRIPWIREBOOST_BOTTOM1, // seestate
|
||||
S_TRIPWIREBOOST_BOTTOM, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_TRIPWIREBOOST_BLAST_TOP, // meleestate
|
||||
S_TRIPWIREBOOST_BLAST_BOTTOM, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
|
|
|
|||
21
src/info.h
21
src/info.h
|
|
@ -1126,7 +1126,8 @@ typedef enum sprite
|
|||
SPR_BEXS, // Battle Bumper Explosion: Shell
|
||||
SPR_BDEB, // Battle Bumper Explosion: Debris
|
||||
SPR_BEXB, // Battle Bumper Explosion: Blast
|
||||
SPR_TWBT, // Tripwire Boost
|
||||
SPR_TWBS, // Tripwire Boost
|
||||
SPR_TWBT, // Tripwire BLASTER
|
||||
SPR_DEZL, // DEZ Laser respawn
|
||||
|
||||
// Additional Kart Objects
|
||||
|
|
@ -4794,20 +4795,10 @@ typedef enum state
|
|||
S_BATTLEBUMPER_EXBLAST9,
|
||||
S_BATTLEBUMPER_EXBLAST10,
|
||||
|
||||
S_TRIPWIREBOOST_TOP1,
|
||||
S_TRIPWIREBOOST_TOP2,
|
||||
S_TRIPWIREBOOST_TOP3,
|
||||
S_TRIPWIREBOOST_TOP4,
|
||||
S_TRIPWIREBOOST_TOP5,
|
||||
S_TRIPWIREBOOST_TOP6,
|
||||
S_TRIPWIREBOOST_TOP7,
|
||||
S_TRIPWIREBOOST_BOTTOM1,
|
||||
S_TRIPWIREBOOST_BOTTOM2,
|
||||
S_TRIPWIREBOOST_BOTTOM3,
|
||||
S_TRIPWIREBOOST_BOTTOM4,
|
||||
S_TRIPWIREBOOST_BOTTOM5,
|
||||
S_TRIPWIREBOOST_BOTTOM6,
|
||||
S_TRIPWIREBOOST_BOTTOM7,
|
||||
S_TRIPWIREBOOST_TOP,
|
||||
S_TRIPWIREBOOST_BOTTOM,
|
||||
S_TRIPWIREBOOST_BLAST_TOP,
|
||||
S_TRIPWIREBOOST_BLAST_BOTTOM,
|
||||
|
||||
// DEZ Laser respawn
|
||||
S_DEZLASER,
|
||||
|
|
|
|||
22
src/k_kart.c
22
src/k_kart.c
|
|
@ -7207,23 +7207,23 @@ static void K_LookForRings(mobj_t *pmo)
|
|||
|
||||
static void K_UpdateTripwire(player_t *player)
|
||||
{
|
||||
fixed_t speedThreshold = K_GetKartSpeed(player, false) *3/4;
|
||||
fixed_t speedThreshold = (3*K_GetKartSpeed(player, false, true))/4;
|
||||
boolean goodSpeed = (player->speed >= speedThreshold);
|
||||
boolean boostExists = (player->tripwireLeniency > 0); // can't be checked later because of subtractions...
|
||||
|
||||
if (player->tripwireLeniency > 0)
|
||||
if (boostExists)
|
||||
{
|
||||
player->tripwireLeniency--;
|
||||
}
|
||||
|
||||
if (goodSpeed == false && player->tripwireLeniency > 0)
|
||||
{
|
||||
// Decrease at double speed when your speed is bad.
|
||||
player->tripwireLeniency--;
|
||||
if (goodSpeed == false && player->tripwireLeniency > 0)
|
||||
{
|
||||
// Decrease at double speed when your speed is bad.
|
||||
player->tripwireLeniency--;
|
||||
}
|
||||
}
|
||||
|
||||
if (K_TripwirePassConditions(player) == true)
|
||||
{
|
||||
if (player->tripwireLeniency == 0)
|
||||
if (!boostExists)
|
||||
{
|
||||
mobj_t *front = P_SpawnMobjFromMobj(player->mo, 0, 0, 0, MT_TRIPWIREBOOST);
|
||||
mobj_t *back = P_SpawnMobjFromMobj(player->mo, 0, 0, 0, MT_TRIPWIREBOOST);
|
||||
|
|
@ -7232,10 +7232,10 @@ static void K_UpdateTripwire(player_t *player)
|
|||
P_SetTarget(&back->target, player->mo);
|
||||
|
||||
front->dispoffset = 1;
|
||||
|
||||
front->old_angle = back->old_angle = K_MomentumAngle(player->mo);
|
||||
back->dispoffset = -1;
|
||||
back->extravalue1 = 1;
|
||||
P_SetMobjState(back, S_TRIPWIREBOOST_BOTTOM1);
|
||||
P_SetMobjState(back, S_TRIPWIREBOOST_BOTTOM);
|
||||
}
|
||||
|
||||
player->tripwireLeniency = max(player->tripwireLeniency, TRIPWIRETIME);
|
||||
|
|
|
|||
46
src/p_mobj.c
46
src/p_mobj.c
|
|
@ -7182,6 +7182,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
}
|
||||
|
||||
{
|
||||
fixed_t convSpeed = (mobj->target->player->speed * 100) / K_GetKartSpeed(mobj->target->player, false, true);
|
||||
UINT8 trans = ((mobj->target->player->tripwireLeniency + 1) * (NUMTRANSMAPS+1)) / TRIPWIRETIME;
|
||||
|
||||
if (trans > NUMTRANSMAPS)
|
||||
|
|
@ -7189,18 +7190,58 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
|
||||
trans = NUMTRANSMAPS - trans;
|
||||
|
||||
if (trans >= NUMTRANSMAPS)
|
||||
if ((trans >= NUMTRANSMAPS) // not a valid visibility
|
||||
|| (convSpeed < 150 && !(mobj->target->player->tripwireLeniency & 1)) // < 150% flickering
|
||||
|| (mobj->target->player->curshield == KSHIELD_FLAME && mobj->target->player->flamedash <= 0)) // flame shield but NOT boosting
|
||||
{
|
||||
mobj->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj->renderflags &= ~(RF_TRANSMASK);
|
||||
boolean blastermode = (convSpeed >= 180);
|
||||
|
||||
mobj->renderflags &= ~(RF_TRANSMASK|RF_DONTDRAW);
|
||||
if (trans != 0)
|
||||
{
|
||||
mobj->renderflags |= (trans << RF_TRANSSHIFT);
|
||||
}
|
||||
mobj->renderflags |= (mobj->target->renderflags & RF_DONTDRAW);
|
||||
|
||||
if (mobj->target->player->invincibilitytimer > 0)
|
||||
{
|
||||
if (mobj->target->player->invincibilitytimer > itemtime+(2*TICRATE))
|
||||
{
|
||||
mobj->color = K_RainbowColor(leveltime / 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj->color = SKINCOLOR_INVINCFLASH;
|
||||
}
|
||||
mobj->colorized = true;
|
||||
}
|
||||
else if (mobj->target->player->curshield == KSHIELD_FLAME && mobj->target->player->flamedash > 0)
|
||||
{
|
||||
mobj->color = SKINCOLOR_KETCHUP;
|
||||
mobj->colorized = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj->color = SKINCOLOR_NONE;
|
||||
mobj->colorized = false;
|
||||
}
|
||||
|
||||
if (blastermode == !(mobj->flags2 & MF2_AMBUSH))
|
||||
{
|
||||
mobj->flags2 ^= MF2_AMBUSH;
|
||||
if (blastermode)
|
||||
{
|
||||
P_SetMobjState(mobj, (mobj->extravalue1) ? S_TRIPWIREBOOST_BLAST_BOTTOM : S_TRIPWIREBOOST_BLAST_TOP);
|
||||
}
|
||||
else
|
||||
{
|
||||
P_SetMobjState(mobj, (mobj->extravalue1) ? S_TRIPWIREBOOST_BOTTOM : S_TRIPWIREBOOST_TOP);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
@ -9882,6 +9923,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
|||
// Sprite rendering
|
||||
mobj->spritexscale = mobj->spriteyscale = mobj->scale;
|
||||
mobj->spritexoffset = mobj->spriteyoffset = 0;
|
||||
mobj->dispoffset = info->dispoffset;
|
||||
mobj->floorspriteslope = NULL;
|
||||
|
||||
// set subsector and/or block links
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue