mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-25 15:01:13 +00:00
Side Trick effect
- Copiously reuses from MT_MAGICIANBOX, gomen
- Also set the lookback frame, for extra toaster-swag zaza
- Because this feature is so old it predates lookback!?
This commit is contained in:
parent
8885a335e7
commit
48d93ec9f6
6 changed files with 129 additions and 4 deletions
|
|
@ -3898,6 +3898,8 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
|||
"S_TRICKINDICATOR_UNDERLAY_ARROW",
|
||||
"S_TRICKINDICATOR_UNDERLAY_ARROW2",
|
||||
|
||||
"S_SIDETRICK",
|
||||
|
||||
// DEZ Ring Shooter
|
||||
"S_TIREGRABBER",
|
||||
"S_RINGSHOOTER_SIDE",
|
||||
|
|
@ -5656,6 +5658,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
|||
|
||||
"MT_SMOOTHLANDING",
|
||||
"MT_TRICKINDICATOR",
|
||||
"MT_SIDETRICK",
|
||||
|
||||
"MT_TIREGRABBER",
|
||||
"MT_RINGSHOOTER",
|
||||
|
|
|
|||
32
src/info.c
32
src/info.c
|
|
@ -631,11 +631,12 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"TWBT", // Tripwire BLASTER
|
||||
"SMLD", // Smooth landing
|
||||
|
||||
// Trick Indicator
|
||||
// Trick Effects
|
||||
"TRK1",
|
||||
"TRK2",
|
||||
"TRK3",
|
||||
"TRK4",
|
||||
"TRK5",
|
||||
|
||||
"TIRG", // Tire grabbers
|
||||
"RSHT", // DEZ Ring Shooter
|
||||
|
|
@ -4674,6 +4675,8 @@ state_t states[NUMSTATES] =
|
|||
{SPR_NULL, 0, 1, {NULL}, 12, 1, S_TRICKINDICATOR_UNDERLAY_ARROW2}, // S_TRICKINDICATOR_UNDERLAY_ARROW,
|
||||
{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_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_SEMIBRIGHT|FF_PAPERSPRITE|2, -1, {NULL}, 0, 0, S_NULL}, // S_RINGSHOOTER_NIPPLES
|
||||
|
|
@ -25368,6 +25371,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_SIDETRICK
|
||||
-1, // doomednum
|
||||
S_SIDETRICK, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
0, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
36*FRACUNIT, // radius
|
||||
40*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPTHING|MF_NOCLIPHEIGHT|MF_DONTENCOREMAP, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_TIREGRABBER
|
||||
-1, // doomednum
|
||||
S_TIREGRABBER, // spawnstate
|
||||
|
|
|
|||
|
|
@ -1188,11 +1188,12 @@ typedef enum sprite
|
|||
SPR_TWBT, // Tripwire BLASTER
|
||||
SPR_SMLD, // Smooth landing
|
||||
|
||||
// Trick Indicator
|
||||
// Trick Effects
|
||||
SPR_TRK1,
|
||||
SPR_TRK2,
|
||||
SPR_TRK3,
|
||||
SPR_TRK4,
|
||||
SPR_TRK5,
|
||||
|
||||
SPR_TIRG, // Tire grabbers
|
||||
SPR_RSHT, // DEZ Ring Shooter
|
||||
|
|
@ -5118,6 +5119,8 @@ typedef enum state
|
|||
S_TRICKINDICATOR_UNDERLAY_ARROW,
|
||||
S_TRICKINDICATOR_UNDERLAY_ARROW2,
|
||||
|
||||
S_SIDETRICK,
|
||||
|
||||
// DEZ Ring Shooter
|
||||
S_TIREGRABBER,
|
||||
S_RINGSHOOTER_SIDE,
|
||||
|
|
@ -6915,6 +6918,7 @@ typedef enum mobj_type
|
|||
|
||||
MT_SMOOTHLANDING,
|
||||
MT_TRICKINDICATOR,
|
||||
MT_SIDETRICK,
|
||||
|
||||
MT_TIREGRABBER,
|
||||
MT_RINGSHOOTER,
|
||||
|
|
|
|||
33
src/k_kart.c
33
src/k_kart.c
|
|
@ -12189,6 +12189,10 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
#define TRICKTHRESHOLD (KART_FULLTURN/4)
|
||||
if (aimingcompare < -TRICKTHRESHOLD) // side trick
|
||||
{
|
||||
angle_t sidetrickspeed = ANG30;
|
||||
const angle_t angledelta = FixedAngle(36*FRACUNIT);
|
||||
angle_t baseangle = player->mo->angle + angledelta/2;
|
||||
|
||||
if (cmd->turning > 0)
|
||||
{
|
||||
P_InstaThrust(player->mo, player->mo->angle + lr, max(basespeed, speed*5/2));
|
||||
|
|
@ -12198,6 +12202,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
{
|
||||
player->trickIndicator->rollangle = ANGLE_270;
|
||||
}
|
||||
|
||||
player->drawangle -= ANGLE_45;
|
||||
P_SetPlayerMobjState(player->mo, S_KART_FAST_LOOK_L);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -12208,6 +12215,32 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
{
|
||||
player->trickIndicator->rollangle = ANGLE_90;
|
||||
}
|
||||
|
||||
sidetrickspeed = InvAngle(sidetrickspeed);
|
||||
|
||||
player->drawangle += ANGLE_45;
|
||||
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
|
||||
|
|
|
|||
55
src/p_mobj.c
55
src/p_mobj.c
|
|
@ -8446,6 +8446,61 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
}
|
||||
break;
|
||||
}
|
||||
case MT_SIDETRICK:
|
||||
{
|
||||
fixed_t destx, desty;
|
||||
fixed_t zoff = 0;
|
||||
|
||||
if (!mobj->target
|
||||
|| !mobj->target->health
|
||||
|| !mobj->target->player
|
||||
|| (mobj->target->player->trickpanel != 2
|
||||
&& mobj->target->player->trickpanel != 3)
|
||||
)
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (leveltime & 1)
|
||||
{
|
||||
mobj->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj->renderflags &= ~RF_DONTDRAW;
|
||||
mobj->renderflags |= (mobj->target->renderflags & RF_DONTDRAW);
|
||||
}
|
||||
|
||||
mobj->angle += mobj->movedir;
|
||||
P_SetScale(mobj, mobj->target->scale);
|
||||
|
||||
destx = mobj->target->x;
|
||||
desty = mobj->target->y;
|
||||
|
||||
destx += P_ReturnThrustX(mobj, mobj->angle - ANGLE_90, mobj->radius*2);
|
||||
desty += P_ReturnThrustY(mobj, mobj->angle - ANGLE_90, mobj->radius*2);
|
||||
|
||||
mobj->eflags = (mobj->eflags & ~MFE_VERTICALFLIP)|(mobj->target->eflags & MFE_VERTICALFLIP);
|
||||
mobj->flags2 = (mobj->flags2 & ~MF2_OBJECTFLIP)|(mobj->target->flags2 & MF2_OBJECTFLIP);
|
||||
|
||||
if (mobj->eflags & MFE_VERTICALFLIP)
|
||||
zoff += mobj->target->height - mobj->height;
|
||||
|
||||
// Necessary to "ride" on Garden Top
|
||||
zoff += mobj->target->sprzoff;
|
||||
|
||||
if (mobj->flags2 & MF2_AMBUSH)
|
||||
{
|
||||
P_SetOrigin(mobj, destx, desty, mobj->target->z + zoff);
|
||||
mobj->flags2 &= ~MF2_AMBUSH;
|
||||
}
|
||||
else
|
||||
{
|
||||
P_MoveOrigin(mobj, destx, desty, mobj->target->z + zoff);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MT_LIGHTNINGSHIELD:
|
||||
{
|
||||
if (!mobj->target || !mobj->target->health || !mobj->target->player
|
||||
|
|
|
|||
|
|
@ -2467,8 +2467,6 @@ void P_MovePlayer(player_t *player)
|
|||
}
|
||||
else
|
||||
{
|
||||
K_KartMoveAnimation(player);
|
||||
|
||||
if (player->trickpanel == 2)
|
||||
{
|
||||
player->drawangle += ANGLE_22h;
|
||||
|
|
@ -2479,6 +2477,8 @@ void P_MovePlayer(player_t *player)
|
|||
}
|
||||
else
|
||||
{
|
||||
K_KartMoveAnimation(player);
|
||||
|
||||
player->drawangle = player->mo->angle;
|
||||
|
||||
if (player->aizdriftturn)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue