mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-05-11 03:12:09 +00:00
Back Trick effect
A rising tornado swirling the opposite direction. Sprites do not currently exist, but it's a one-line emergency-break-glass change if there's any danger of not shopping with them
This commit is contained in:
parent
c1f7546f99
commit
c3d34e9377
5 changed files with 84 additions and 31 deletions
|
|
@ -3899,6 +3899,7 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
"S_TRICKINDICATOR_UNDERLAY_ARROW2",
|
"S_TRICKINDICATOR_UNDERLAY_ARROW2",
|
||||||
|
|
||||||
"S_SIDETRICK",
|
"S_SIDETRICK",
|
||||||
|
"S_BACKTRICK",
|
||||||
|
|
||||||
// DEZ Ring Shooter
|
// DEZ Ring Shooter
|
||||||
"S_TIREGRABBER",
|
"S_TIREGRABBER",
|
||||||
|
|
|
||||||
|
|
@ -637,6 +637,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"TRK3",
|
"TRK3",
|
||||||
"TRK4",
|
"TRK4",
|
||||||
"TRK5",
|
"TRK5",
|
||||||
|
"TRK6",
|
||||||
|
|
||||||
"TIRG", // Tire grabbers
|
"TIRG", // Tire grabbers
|
||||||
"RSHT", // DEZ Ring Shooter
|
"RSHT", // DEZ Ring Shooter
|
||||||
|
|
@ -4676,6 +4677,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_TRK4, FF_FULLBRIGHT|FF_ANIMATE|FF_PAPERSPRITE, 13, {NULL}, 12, 1, S_INVISIBLE}, // S_TRICKINDICATOR_UNDERLAY_ARROW2,
|
{SPR_TRK4, FF_FULLBRIGHT|FF_ANIMATE|FF_PAPERSPRITE, 13, {NULL}, 12, 1, S_INVISIBLE}, // S_TRICKINDICATOR_UNDERLAY_ARROW2,
|
||||||
|
|
||||||
{SPR_TRK5, FF_FULLBRIGHT|FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_SIDETRICK,
|
{SPR_TRK5, FF_FULLBRIGHT|FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_SIDETRICK,
|
||||||
|
{SPR_TRK6, FF_FULLBRIGHT|FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_BACKTRICK,
|
||||||
|
|
||||||
{SPR_TIRG, FF_ANIMATE, -1, {NULL}, 1, 1, S_NULL}, // S_TIREGRABBER
|
{SPR_TIRG, FF_ANIMATE, -1, {NULL}, 1, 1, S_NULL}, // S_TIREGRABBER
|
||||||
{SPR_RSHT, FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_RINGSHOOTER_SIDE
|
{SPR_RSHT, FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_RINGSHOOTER_SIDE
|
||||||
|
|
|
||||||
|
|
@ -1194,6 +1194,7 @@ typedef enum sprite
|
||||||
SPR_TRK3,
|
SPR_TRK3,
|
||||||
SPR_TRK4,
|
SPR_TRK4,
|
||||||
SPR_TRK5,
|
SPR_TRK5,
|
||||||
|
SPR_TRK6,
|
||||||
|
|
||||||
SPR_TIRG, // Tire grabbers
|
SPR_TIRG, // Tire grabbers
|
||||||
SPR_RSHT, // DEZ Ring Shooter
|
SPR_RSHT, // DEZ Ring Shooter
|
||||||
|
|
@ -5120,6 +5121,7 @@ typedef enum state
|
||||||
S_TRICKINDICATOR_UNDERLAY_ARROW2,
|
S_TRICKINDICATOR_UNDERLAY_ARROW2,
|
||||||
|
|
||||||
S_SIDETRICK,
|
S_SIDETRICK,
|
||||||
|
S_BACKTRICK,
|
||||||
|
|
||||||
// DEZ Ring Shooter
|
// DEZ Ring Shooter
|
||||||
S_TIREGRABBER,
|
S_TIREGRABBER,
|
||||||
|
|
|
||||||
74
src/k_kart.c
74
src/k_kart.c
|
|
@ -12190,16 +12190,18 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
|
|
||||||
else if (!(player->pflags & PF_TRICKDELAY)) // don't allow tricking at the same frame you tumble obv
|
else if (!(player->pflags & PF_TRICKDELAY)) // don't allow tricking at the same frame you tumble obv
|
||||||
{
|
{
|
||||||
|
// For tornado trick effects
|
||||||
|
angle_t tornadotrickspeed = ANG30;
|
||||||
|
const angle_t angledelta = FixedAngle(36*FRACUNIT);
|
||||||
|
angle_t baseangle = player->mo->angle + angledelta/2;
|
||||||
|
boolean fronttrick = false;
|
||||||
|
|
||||||
INT16 aimingcompare = abs(cmd->throwdir) - abs(cmd->turning);
|
INT16 aimingcompare = abs(cmd->throwdir) - abs(cmd->turning);
|
||||||
|
|
||||||
// Uses cmd->turning over steering intentionally.
|
// Uses cmd->turning over steering intentionally.
|
||||||
#define TRICKTHRESHOLD (KART_FULLTURN/4)
|
#define TRICKTHRESHOLD (KART_FULLTURN/4)
|
||||||
if (aimingcompare < -TRICKTHRESHOLD) // side trick
|
if (aimingcompare < -TRICKTHRESHOLD) // side trick
|
||||||
{
|
{
|
||||||
angle_t sidetrickspeed = ANG30;
|
|
||||||
const angle_t angledelta = FixedAngle(36*FRACUNIT);
|
|
||||||
angle_t baseangle = player->mo->angle + angledelta/2;
|
|
||||||
|
|
||||||
S_StartSound(player->mo, sfx_trick0);
|
S_StartSound(player->mo, sfx_trick0);
|
||||||
player->dotrickfx = true;
|
player->dotrickfx = true;
|
||||||
|
|
||||||
|
|
@ -12226,39 +12228,18 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
player->trickIndicator->rollangle = ANGLE_90;
|
player->trickIndicator->rollangle = ANGLE_90;
|
||||||
}
|
}
|
||||||
|
|
||||||
sidetrickspeed = InvAngle(sidetrickspeed);
|
tornadotrickspeed = InvAngle(tornadotrickspeed);
|
||||||
|
|
||||||
player->drawangle += ANGLE_45;
|
player->drawangle += ANGLE_45;
|
||||||
P_SetPlayerMobjState(player->mo, S_KART_FAST_LOOK_R);
|
P_SetPlayerMobjState(player->mo, S_KART_FAST_LOOK_R);
|
||||||
}
|
}
|
||||||
|
|
||||||
INT32 j;
|
|
||||||
|
|
||||||
for (j = 0; j < 8; j++, baseangle += angledelta)
|
|
||||||
{
|
|
||||||
mobj_t *swipe = P_SpawnMobjFromMobj(player->mo, 0, 0, 0, MT_SIDETRICK);
|
|
||||||
P_SetTarget(&swipe->target, player->mo);
|
|
||||||
swipe->hitlag = TRICKLAG;
|
|
||||||
swipe->color = player->trickIndicator->color;
|
|
||||||
swipe->angle = baseangle + ANGLE_90;
|
|
||||||
swipe->renderflags |= RF_DONTDRAW;
|
|
||||||
swipe->flags2 |= MF2_AMBUSH; // don't interp on first think
|
|
||||||
swipe->movedir = sidetrickspeed;
|
|
||||||
swipe->frame |= (j % 4);
|
|
||||||
|
|
||||||
// This is so they make a 10-sided shape with one-sprite gap
|
|
||||||
if (j != 3)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
baseangle += angledelta;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (aimingcompare > TRICKTHRESHOLD) // forward/back trick
|
else if (aimingcompare > TRICKTHRESHOLD) // forward/back trick
|
||||||
{
|
{
|
||||||
S_StartSound(player->mo, sfx_trick0);
|
S_StartSound(player->mo, sfx_trick0);
|
||||||
player->dotrickfx = true;
|
player->dotrickfx = true;
|
||||||
|
|
||||||
if (cmd->throwdir > 0) // back trick
|
if (cmd->throwdir > 0) // forward trick
|
||||||
{
|
{
|
||||||
if (player->mo->momz * P_MobjFlip(player->mo) > 0)
|
if (player->mo->momz * P_MobjFlip(player->mo) > 0)
|
||||||
{
|
{
|
||||||
|
|
@ -12272,8 +12253,12 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
{
|
{
|
||||||
player->trickIndicator->rollangle = 0;
|
player->trickIndicator->rollangle = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
P_SetPlayerMobjState(player->mo, S_KART_FAST);
|
||||||
|
|
||||||
|
fronttrick = true;
|
||||||
}
|
}
|
||||||
else if (cmd->throwdir < 0)
|
else if (cmd->throwdir < 0) // back trick
|
||||||
{
|
{
|
||||||
player->mo->momx /= 3;
|
player->mo->momx /= 3;
|
||||||
player->mo->momy /= 3;
|
player->mo->momy /= 3;
|
||||||
|
|
@ -12296,6 +12281,11 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
{
|
{
|
||||||
player->trickIndicator->rollangle = ANGLE_180;
|
player->trickIndicator->rollangle = ANGLE_180;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//tornadotrickspeed = InvAngle(tornadotrickspeed);
|
||||||
|
|
||||||
|
//player->drawangle += ANGLE_45;
|
||||||
|
P_SetPlayerMobjState(player->mo, S_KART_FAST);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#undef TRICKTHRESHOLD
|
#undef TRICKTHRESHOLD
|
||||||
|
|
@ -12311,6 +12301,34 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
player->karthud[khud_trickcool] = TICRATE;
|
player->karthud[khud_trickcool] = TICRATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INT32 j;
|
||||||
|
|
||||||
|
if (fronttrick == true)
|
||||||
|
; // Not yet sprited
|
||||||
|
else for (j = 0; j < 8; j++, baseangle += angledelta)
|
||||||
|
{
|
||||||
|
mobj_t *swipe = P_SpawnMobjFromMobj(player->mo, 0, 0, 0, MT_SIDETRICK);
|
||||||
|
|
||||||
|
if (player->trickpanel == 4)
|
||||||
|
P_SetMobjState(swipe, S_BACKTRICK);
|
||||||
|
|
||||||
|
P_SetTarget(&swipe->target, player->mo);
|
||||||
|
swipe->hitlag = TRICKLAG;
|
||||||
|
swipe->color = player->trickIndicator->color;
|
||||||
|
swipe->angle = baseangle + ANGLE_90;
|
||||||
|
swipe->renderflags |= RF_DONTDRAW;
|
||||||
|
swipe->flags2 |= MF2_AMBUSH; // don't interp on first think
|
||||||
|
swipe->movedir = tornadotrickspeed;
|
||||||
|
swipe->frame |= (j % 4);
|
||||||
|
swipe->threshold = 0;
|
||||||
|
|
||||||
|
// This is so they make a 10-sided shape with one-sprite gap
|
||||||
|
if (j != 3)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
baseangle += angledelta;
|
||||||
|
}
|
||||||
|
|
||||||
if (P_MobjWasRemoved(player->trickIndicator) == false)
|
if (P_MobjWasRemoved(player->trickIndicator) == false)
|
||||||
{
|
{
|
||||||
K_TrickCatholocismBlast(player->trickIndicator, player->trickIndicator->scale*10, 0);
|
K_TrickCatholocismBlast(player->trickIndicator, player->trickIndicator->scale*10, 0);
|
||||||
|
|
|
||||||
36
src/p_mobj.c
36
src/p_mobj.c
|
|
@ -8454,9 +8454,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
if (!mobj->target
|
if (!mobj->target
|
||||||
|| !mobj->target->health
|
|| !mobj->target->health
|
||||||
|| !mobj->target->player
|
|| !mobj->target->player
|
||||||
|| (mobj->target->player->trickpanel != 2
|
|| mobj->target->player->trickpanel <= 1)
|
||||||
&& mobj->target->player->trickpanel != 3)
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
P_RemoveMobj(mobj);
|
P_RemoveMobj(mobj);
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -8478,6 +8476,38 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
|
|
||||||
fixed_t scale = mobj->target->scale;
|
fixed_t scale = mobj->target->scale;
|
||||||
|
|
||||||
|
// sweeping effect
|
||||||
|
if (mobj->target->player->trickpanel == 4)
|
||||||
|
{
|
||||||
|
const fixed_t saferange = (20*FRACUNIT)/21;
|
||||||
|
if (mobj->threshold < -saferange)
|
||||||
|
{
|
||||||
|
mobj->threshold = -saferange;
|
||||||
|
mobj->flags2 |= MF2_AMBUSH;
|
||||||
|
}
|
||||||
|
else while (mobj->threshold > saferange)
|
||||||
|
{
|
||||||
|
mobj->threshold -= 2*saferange;
|
||||||
|
mobj->flags2 |= MF2_AMBUSH;
|
||||||
|
}
|
||||||
|
|
||||||
|
scale = P_ReturnThrustX(mobj, FixedAngle(90*mobj->threshold), scale);
|
||||||
|
|
||||||
|
// This funny dealie is to make it so default
|
||||||
|
// scale is placed as standard,
|
||||||
|
// but variant threshold shifts upwards
|
||||||
|
fixed_t extraoffset = FixedMul(mobj->info->height, mobj->target->scale - scale);
|
||||||
|
if (mobj->threshold < 0)
|
||||||
|
extraoffset /= 2;
|
||||||
|
|
||||||
|
// And this makes it swooce across the object.
|
||||||
|
extraoffset += FixedMul(mobj->threshold, mobj->target->height);
|
||||||
|
|
||||||
|
zoff += P_MobjFlip(mobj) * extraoffset;
|
||||||
|
|
||||||
|
mobj->threshold += (saferange/8);
|
||||||
|
}
|
||||||
|
|
||||||
mobj->angle += mobj->movedir;
|
mobj->angle += mobj->movedir;
|
||||||
P_InstaScale(mobj, scale);
|
P_InstaScale(mobj, scale);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue