mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'tripwire-blaster' into 'master'
Tripwire Blaster See merge request KartKrew/Kart!656
This commit is contained in:
commit
9609911e33
17 changed files with 263 additions and 128 deletions
|
|
@ -204,11 +204,19 @@ typedef enum
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
TRIP_NONE,
|
TRIPSTATE_NONE,
|
||||||
TRIP_PASSED,
|
TRIPSTATE_PASSED,
|
||||||
TRIP_BLOCKED,
|
TRIPSTATE_BLOCKED,
|
||||||
} tripwirestate_t;
|
} tripwirestate_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
TRIPWIRE_NONE,
|
||||||
|
TRIPWIRE_IGNORE,
|
||||||
|
TRIPWIRE_BOOST,
|
||||||
|
TRIPWIRE_BLASTER,
|
||||||
|
} tripwirepass_t;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
// Unsynced, HUD or clientsided effects
|
// Unsynced, HUD or clientsided effects
|
||||||
|
|
@ -260,6 +268,8 @@ typedef enum
|
||||||
#define TUMBLEBOUNCES 3
|
#define TUMBLEBOUNCES 3
|
||||||
#define TUMBLEGRAVITY (4*FRACUNIT)
|
#define TUMBLEGRAVITY (4*FRACUNIT)
|
||||||
|
|
||||||
|
#define TRIPWIRETIME (TICRATE)
|
||||||
|
|
||||||
//}
|
//}
|
||||||
|
|
||||||
// for kickstartaccel
|
// for kickstartaccel
|
||||||
|
|
@ -444,6 +454,8 @@ typedef struct player_s
|
||||||
UINT16 draftleeway; // Leniency timer before removing draft power
|
UINT16 draftleeway; // Leniency timer before removing draft power
|
||||||
SINT8 lastdraft; // (-1 to 15) - Last player being drafted
|
SINT8 lastdraft; // (-1 to 15) - Last player being drafted
|
||||||
|
|
||||||
|
UINT8 tripwireState; // see tripwirestate_t
|
||||||
|
UINT8 tripwirePass; // see tripwirepass_t
|
||||||
UINT16 tripwireLeniency; // When reaching a state that lets you go thru tripwire, you get an extra second leniency after it ends to still go through it.
|
UINT16 tripwireLeniency; // When reaching a state that lets you go thru tripwire, you get an extra second leniency after it ends to still go through it.
|
||||||
|
|
||||||
UINT16 itemroulette; // Used for the roulette when deciding what item to give you (was "pw_kartitem")
|
UINT16 itemroulette; // Used for the roulette when deciding what item to give you (was "pw_kartitem")
|
||||||
|
|
@ -513,8 +525,6 @@ typedef struct player_s
|
||||||
|
|
||||||
SINT8 glanceDir; // Direction the player is trying to look backwards in
|
SINT8 glanceDir; // Direction the player is trying to look backwards in
|
||||||
|
|
||||||
UINT8 tripWireState; // see tripwirestate_t
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
SINT8 lives;
|
SINT8 lives;
|
||||||
|
|
|
||||||
|
|
@ -3805,6 +3805,12 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
"S_BATTLEBUMPER_EXBLAST9",
|
"S_BATTLEBUMPER_EXBLAST9",
|
||||||
"S_BATTLEBUMPER_EXBLAST10",
|
"S_BATTLEBUMPER_EXBLAST10",
|
||||||
|
|
||||||
|
// Tripwire
|
||||||
|
"S_TRIPWIREBOOST_TOP",
|
||||||
|
"S_TRIPWIREBOOST_BOTTOM",
|
||||||
|
"S_TRIPWIREBOOST_BLAST_TOP",
|
||||||
|
"S_TRIPWIREBOOST_BLAST_BOTTOM",
|
||||||
|
|
||||||
// DEZ respawn laser
|
// DEZ respawn laser
|
||||||
"S_DEZLASER",
|
"S_DEZLASER",
|
||||||
"S_DEZLASER_TRAIL1",
|
"S_DEZLASER_TRAIL1",
|
||||||
|
|
@ -5338,6 +5344,8 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
||||||
"MT_BATTLEBUMPER_DEBRIS",
|
"MT_BATTLEBUMPER_DEBRIS",
|
||||||
"MT_BATTLEBUMPER_BLAST",
|
"MT_BATTLEBUMPER_BLAST",
|
||||||
|
|
||||||
|
"MT_TRIPWIREBOOST",
|
||||||
|
|
||||||
"MT_DEZLASER",
|
"MT_DEZLASER",
|
||||||
|
|
||||||
"MT_WAYPOINT",
|
"MT_WAYPOINT",
|
||||||
|
|
|
||||||
|
|
@ -2410,7 +2410,6 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
||||||
p->karthud[khud_fault] = khudfault;
|
p->karthud[khud_fault] = khudfault;
|
||||||
p->nocontrol = nocontrol;
|
p->nocontrol = nocontrol;
|
||||||
p->kickstartaccel = kickstartaccel;
|
p->kickstartaccel = kickstartaccel;
|
||||||
p->tripWireState = TRIP_NONE;
|
|
||||||
|
|
||||||
p->botvars.rubberband = FRACUNIT;
|
p->botvars.rubberband = FRACUNIT;
|
||||||
p->botvars.controller = UINT16_MAX;
|
p->botvars.controller = UINT16_MAX;
|
||||||
|
|
|
||||||
|
|
@ -5129,7 +5129,7 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
||||||
R_InterpolateMobjState(thing, FRACUNIT, &interp);
|
R_InterpolateMobjState(thing, FRACUNIT, &interp);
|
||||||
}
|
}
|
||||||
|
|
||||||
dispoffset = thing->info->dispoffset;
|
dispoffset = thing->dispoffset;
|
||||||
|
|
||||||
// hitlag vibrating (todo: interp somehow?)
|
// hitlag vibrating (todo: interp somehow?)
|
||||||
if (thing->hitlag > 0 && (thing->eflags & MFE_DAMAGEHITLAG))
|
if (thing->hitlag > 0 && (thing->eflags & MFE_DAMAGEHITLAG))
|
||||||
|
|
|
||||||
36
src/info.c
36
src/info.c
|
|
@ -580,7 +580,8 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"BEXS", // Battle Bumper Explosion: Shell
|
"BEXS", // Battle Bumper Explosion: Shell
|
||||||
"BDEB", // Battle Bumper Explosion: Debris
|
"BDEB", // Battle Bumper Explosion: Debris
|
||||||
"BEXB", // Battle Bumper Explosion: Blast
|
"BEXB", // Battle Bumper Explosion: Blast
|
||||||
|
"TWBS", // Tripwire Boost
|
||||||
|
"TWBT", // Tripwire BLASTER
|
||||||
"DEZL", // DEZ Laser respawn
|
"DEZL", // DEZ Laser respawn
|
||||||
|
|
||||||
// Additional Kart Objects
|
// Additional Kart Objects
|
||||||
|
|
@ -4361,6 +4362,12 @@ 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_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_BEXB, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_TRANS90, 2, {NULL}, 0, 0, S_NULL}, // S_BATTLEBUMPER_EXBLAST10
|
||||||
|
|
||||||
|
{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_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|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
|
{SPR_DEZL, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_DEZLASER_TRAIL2}, // S_DEZLASER_TRAIL1
|
||||||
{SPR_DEZL, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_DEZLASER_TRAIL3}, // S_DEZLASER_TRAIL2
|
{SPR_DEZL, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_DEZLASER_TRAIL3}, // S_DEZLASER_TRAIL2
|
||||||
|
|
@ -24164,6 +24171,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_TRIPWIREBOOST
|
||||||
|
-1, // doomednum
|
||||||
|
S_TRIPWIREBOOST_TOP, // spawnstate
|
||||||
|
1000, // spawnhealth
|
||||||
|
S_TRIPWIREBOOST_BOTTOM, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
8, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_None, // painsound
|
||||||
|
S_TRIPWIREBOOST_BLAST_TOP, // meleestate
|
||||||
|
S_TRIPWIREBOOST_BLAST_BOTTOM, // missilestate
|
||||||
|
S_NULL, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
0, // speed
|
||||||
|
8*FRACUNIT, // radius
|
||||||
|
16*FRACUNIT, // height
|
||||||
|
1, // display offset
|
||||||
|
100, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIPTHING|MF_DONTENCOREMAP, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_DEZLASER
|
{ // MT_DEZLASER
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_DEZLASER, // spawnstate
|
S_DEZLASER, // spawnstate
|
||||||
|
|
|
||||||
10
src/info.h
10
src/info.h
|
|
@ -1126,7 +1126,8 @@ typedef enum sprite
|
||||||
SPR_BEXS, // Battle Bumper Explosion: Shell
|
SPR_BEXS, // Battle Bumper Explosion: Shell
|
||||||
SPR_BDEB, // Battle Bumper Explosion: Debris
|
SPR_BDEB, // Battle Bumper Explosion: Debris
|
||||||
SPR_BEXB, // Battle Bumper Explosion: Blast
|
SPR_BEXB, // Battle Bumper Explosion: Blast
|
||||||
|
SPR_TWBS, // Tripwire Boost
|
||||||
|
SPR_TWBT, // Tripwire BLASTER
|
||||||
SPR_DEZL, // DEZ Laser respawn
|
SPR_DEZL, // DEZ Laser respawn
|
||||||
|
|
||||||
// Additional Kart Objects
|
// Additional Kart Objects
|
||||||
|
|
@ -4794,6 +4795,11 @@ typedef enum state
|
||||||
S_BATTLEBUMPER_EXBLAST9,
|
S_BATTLEBUMPER_EXBLAST9,
|
||||||
S_BATTLEBUMPER_EXBLAST10,
|
S_BATTLEBUMPER_EXBLAST10,
|
||||||
|
|
||||||
|
S_TRIPWIREBOOST_TOP,
|
||||||
|
S_TRIPWIREBOOST_BOTTOM,
|
||||||
|
S_TRIPWIREBOOST_BLAST_TOP,
|
||||||
|
S_TRIPWIREBOOST_BLAST_BOTTOM,
|
||||||
|
|
||||||
// DEZ Laser respawn
|
// DEZ Laser respawn
|
||||||
S_DEZLASER,
|
S_DEZLASER,
|
||||||
S_DEZLASER_TRAIL1,
|
S_DEZLASER_TRAIL1,
|
||||||
|
|
@ -6364,6 +6370,8 @@ typedef enum mobj_type
|
||||||
MT_BATTLEBUMPER_DEBRIS,
|
MT_BATTLEBUMPER_DEBRIS,
|
||||||
MT_BATTLEBUMPER_BLAST,
|
MT_BATTLEBUMPER_BLAST,
|
||||||
|
|
||||||
|
MT_TRIPWIREBOOST,
|
||||||
|
|
||||||
MT_DEZLASER,
|
MT_DEZLASER,
|
||||||
|
|
||||||
MT_WAYPOINT,
|
MT_WAYPOINT,
|
||||||
|
|
|
||||||
|
|
@ -279,7 +279,7 @@ boolean K_BotCanTakeCut(player_t *player)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
#if 1
|
#if 1
|
||||||
K_TripwirePassConditions(player) == true
|
K_TripwirePassConditions(player) != TRIPWIRE_NONE
|
||||||
#else
|
#else
|
||||||
K_ApplyOffroad(player) == false
|
K_ApplyOffroad(player) == false
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
182
src/k_kart.c
182
src/k_kart.c
|
|
@ -2944,23 +2944,32 @@ boolean K_SlopeResistance(player_t *player)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean K_TripwirePassConditions(player_t *player)
|
tripwirepass_t K_TripwirePassConditions(player_t *player)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
player->invincibilitytimer ||
|
player->invincibilitytimer ||
|
||||||
player->sneakertimer ||
|
player->sneakertimer
|
||||||
player->growshrinktimer > 0 ||
|
)
|
||||||
|
return TRIPWIRE_BLASTER;
|
||||||
|
|
||||||
|
if (
|
||||||
player->flamedash ||
|
player->flamedash ||
|
||||||
player->hyudorotimer ||
|
|
||||||
player->speed > 2 * K_GetKartSpeed(player, false, true)
|
player->speed > 2 * K_GetKartSpeed(player, false, true)
|
||||||
)
|
)
|
||||||
return true;
|
return TRIPWIRE_BOOST;
|
||||||
return false;
|
|
||||||
|
if (
|
||||||
|
player->growshrinktimer > 0 ||
|
||||||
|
player->hyudorotimer
|
||||||
|
)
|
||||||
|
return TRIPWIRE_IGNORE;
|
||||||
|
|
||||||
|
return TRIPWIRE_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean K_TripwirePass(player_t *player)
|
boolean K_TripwirePass(player_t *player)
|
||||||
{
|
{
|
||||||
return (K_TripwirePassConditions(player) || (player->tripwireLeniency > 0));
|
return (player->tripwirePass != TRIPWIRE_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean K_WaterRun(player_t *player)
|
boolean K_WaterRun(player_t *player)
|
||||||
|
|
@ -3667,7 +3676,7 @@ void K_TumblePlayer(player_t *player, mobj_t *inflictor, mobj_t *source)
|
||||||
|
|
||||||
player->tumbleBounces = 1;
|
player->tumbleBounces = 1;
|
||||||
|
|
||||||
if (player->tripWireState == TRIP_PASSED)
|
if (player->tripwireState == TRIPSTATE_PASSED)
|
||||||
{
|
{
|
||||||
player->tumbleHeight = 50;
|
player->tumbleHeight = 50;
|
||||||
}
|
}
|
||||||
|
|
@ -3781,15 +3790,15 @@ void K_TumbleInterrupt(player_t *player)
|
||||||
|
|
||||||
void K_ApplyTripWire(player_t *player, tripwirestate_t state)
|
void K_ApplyTripWire(player_t *player, tripwirestate_t state)
|
||||||
{
|
{
|
||||||
if (state == TRIP_PASSED)
|
if (state == TRIPSTATE_PASSED)
|
||||||
S_StartSound(player->mo, sfx_ssa015);
|
S_StartSound(player->mo, sfx_ssa015);
|
||||||
else if (state == TRIP_BLOCKED)
|
else if (state == TRIPSTATE_BLOCKED)
|
||||||
S_StartSound(player->mo, sfx_kc40);
|
S_StartSound(player->mo, sfx_kc40);
|
||||||
|
|
||||||
player->tripWireState = state;
|
player->tripwireState = state;
|
||||||
K_AddHitLag(player->mo, 10, false);
|
K_AddHitLag(player->mo, 10, false);
|
||||||
|
|
||||||
if (state == TRIP_PASSED && player->spinouttimer &&
|
if (state == TRIPSTATE_PASSED && player->spinouttimer &&
|
||||||
player->speed > 2 * K_GetKartSpeed(player, false, true))
|
player->speed > 2 * K_GetKartSpeed(player, false, true))
|
||||||
{
|
{
|
||||||
K_TumblePlayer(player, NULL, NULL);
|
K_TumblePlayer(player, NULL, NULL);
|
||||||
|
|
@ -4939,90 +4948,6 @@ void K_DriftDustHandling(mobj_t *spawner)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void K_SpawnTripwireVFX(mobj_t *mo)
|
|
||||||
{
|
|
||||||
tic_t t = leveltime;
|
|
||||||
angle_t ang, aoff;
|
|
||||||
SINT8 sign = 1;
|
|
||||||
boolean altColor = false;
|
|
||||||
mobj_t *dust;
|
|
||||||
boolean drifting = false;
|
|
||||||
UINT8 i;
|
|
||||||
|
|
||||||
I_Assert(mo != NULL);
|
|
||||||
I_Assert(!P_MobjWasRemoved(mo));
|
|
||||||
|
|
||||||
if (!P_IsObjectOnGround(mo))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (mo->player)
|
|
||||||
{
|
|
||||||
ang = mo->player->drawangle;
|
|
||||||
|
|
||||||
if (mo->player->drift != 0)
|
|
||||||
{
|
|
||||||
drifting = true;
|
|
||||||
ang += (mo->player->drift * ((ANGLE_270 + ANGLE_22h) / 5)); // -112.5 doesn't work. I fucking HATE SRB2 angles
|
|
||||||
if (mo->player->drift < 0)
|
|
||||||
sign = 1;
|
|
||||||
else
|
|
||||||
sign = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ang = mo->angle;
|
|
||||||
|
|
||||||
if (drifting == false)
|
|
||||||
{
|
|
||||||
i = (t & 1);
|
|
||||||
|
|
||||||
if (i & 1)
|
|
||||||
sign = -1;
|
|
||||||
else
|
|
||||||
sign = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (t & 1)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
t /= 2;
|
|
||||||
i = (t & 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
aoff = (ang + ANGLE_180) + (ANGLE_45 * sign);
|
|
||||||
|
|
||||||
dust = P_SpawnMobj(mo->x + FixedMul(24*mo->scale, FINECOSINE(aoff>>ANGLETOFINESHIFT)),
|
|
||||||
mo->y + FixedMul(24*mo->scale, FINESINE(aoff>>ANGLETOFINESHIFT)),
|
|
||||||
mo->z, MT_DRIFTDUST);
|
|
||||||
|
|
||||||
P_SetTarget(&dust->target, mo);
|
|
||||||
P_InitAngle(dust, ang - (ANGLE_90 * sign)); // point completely perpendicular from the player
|
|
||||||
P_SetScale(dust, mo->scale);
|
|
||||||
dust->destscale = mo->scale * 6;
|
|
||||||
dust->scalespeed = mo->scale/12;
|
|
||||||
K_FlipFromObject(dust, mo);
|
|
||||||
|
|
||||||
altColor = (sign > 0);
|
|
||||||
|
|
||||||
if ((t / 2) & 1)
|
|
||||||
{
|
|
||||||
dust->tics++; // "randomize" animation
|
|
||||||
altColor = !altColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
dust->colorized = true;
|
|
||||||
dust->color = altColor ? SKINCOLOR_BLOSSOM : SKINCOLOR_JAWZ;
|
|
||||||
|
|
||||||
dust->momx = (4*mo->momx)/5;
|
|
||||||
dust->momy = (4*mo->momy)/5;
|
|
||||||
dust->momz = (4*P_GetMobjZMovement(mo))/5;
|
|
||||||
|
|
||||||
P_Thrust(dust, dust->angle, 4*mo->scale);
|
|
||||||
}
|
|
||||||
|
|
||||||
void K_Squish(mobj_t *mo)
|
void K_Squish(mobj_t *mo)
|
||||||
{
|
{
|
||||||
const fixed_t maxstretch = 4*FRACUNIT;
|
const fixed_t maxstretch = 4*FRACUNIT;
|
||||||
|
|
@ -7289,6 +7214,52 @@ static void K_LookForRings(mobj_t *pmo)
|
||||||
P_BlockThingsIterator(bx, by, PIT_AttractingRings);
|
P_BlockThingsIterator(bx, by, PIT_AttractingRings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void K_UpdateTripwire(player_t *player)
|
||||||
|
{
|
||||||
|
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...
|
||||||
|
tripwirepass_t triplevel = K_TripwirePassConditions(player);
|
||||||
|
|
||||||
|
if (triplevel != TRIPWIRE_NONE)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
|
||||||
|
P_SetTarget(&front->target, player->mo);
|
||||||
|
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_BOTTOM);
|
||||||
|
}
|
||||||
|
|
||||||
|
player->tripwirePass = triplevel;
|
||||||
|
player->tripwireLeniency = max(player->tripwireLeniency, TRIPWIRETIME);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (boostExists)
|
||||||
|
{
|
||||||
|
player->tripwireLeniency--;
|
||||||
|
if (goodSpeed == false && player->tripwireLeniency > 0)
|
||||||
|
{
|
||||||
|
// Decrease at double speed when your speed is bad.
|
||||||
|
player->tripwireLeniency--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player->tripwireLeniency <= 0)
|
||||||
|
{
|
||||||
|
player->tripwirePass = TRIPWIRE_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** \brief Decreases various kart timers and powers per frame. Called in P_PlayerThink in p_user.c
|
/** \brief Decreases various kart timers and powers per frame. Called in P_PlayerThink in p_user.c
|
||||||
|
|
||||||
\param player player object passed from P_PlayerThink
|
\param player player object passed from P_PlayerThink
|
||||||
|
|
@ -7644,16 +7615,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
K_HandleTumbleBounce(player);
|
K_HandleTumbleBounce(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->tripwireLeniency > 0)
|
K_UpdateTripwire(player);
|
||||||
{
|
|
||||||
player->tripwireLeniency--;
|
|
||||||
K_SpawnTripwireVFX(player->mo);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (K_TripwirePassConditions(player) == true)
|
|
||||||
{
|
|
||||||
player->tripwireLeniency = max(player->tripwireLeniency, TICRATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
K_KartPlayerHUDUpdate(player);
|
K_KartPlayerHUDUpdate(player);
|
||||||
|
|
||||||
|
|
@ -7765,14 +7727,14 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
// Handle invincibility sfx
|
// Handle invincibility sfx
|
||||||
K_UpdateInvincibilitySounds(player); // Also thanks, VAda!
|
K_UpdateInvincibilitySounds(player); // Also thanks, VAda!
|
||||||
|
|
||||||
if (player->tripWireState != TRIP_NONE)
|
if (player->tripwireState != TRIPSTATE_NONE)
|
||||||
{
|
{
|
||||||
if (player->tripWireState == TRIP_PASSED)
|
if (player->tripwireState == TRIPSTATE_PASSED)
|
||||||
S_StartSound(player->mo, sfx_cdfm63);
|
S_StartSound(player->mo, sfx_cdfm63);
|
||||||
else if (player->tripWireState == TRIP_BLOCKED)
|
else if (player->tripwireState == TRIPSTATE_BLOCKED)
|
||||||
S_StartSound(player->mo, sfx_kc4c);
|
S_StartSound(player->mo, sfx_kc4c);
|
||||||
|
|
||||||
player->tripWireState = TRIP_NONE;
|
player->tripwireState = TRIPSTATE_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
K_KartEbrakeVisuals(player);
|
K_KartEbrakeVisuals(player);
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@ void K_StripOther(player_t *player);
|
||||||
void K_MomentumToFacing(player_t *player);
|
void K_MomentumToFacing(player_t *player);
|
||||||
boolean K_ApplyOffroad(player_t *player);
|
boolean K_ApplyOffroad(player_t *player);
|
||||||
boolean K_SlopeResistance(player_t *player);
|
boolean K_SlopeResistance(player_t *player);
|
||||||
boolean K_TripwirePassConditions(player_t *player);
|
tripwirepass_t K_TripwirePassConditions(player_t *player);
|
||||||
boolean K_TripwirePass(player_t *player);
|
boolean K_TripwirePass(player_t *player);
|
||||||
boolean K_WaterRun(player_t *player);
|
boolean K_WaterRun(player_t *player);
|
||||||
void K_ApplyTripWire(player_t *player, tripwirestate_t state);
|
void K_ApplyTripWire(player_t *player, tripwirestate_t state);
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,8 @@ enum mobj_e {
|
||||||
mobj_sprxoff,
|
mobj_sprxoff,
|
||||||
mobj_spryoff,
|
mobj_spryoff,
|
||||||
mobj_sprzoff,
|
mobj_sprzoff,
|
||||||
mobj_hitlag
|
mobj_hitlag,
|
||||||
|
mobj_dispoffset
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *const mobj_opt[] = {
|
static const char *const mobj_opt[] = {
|
||||||
|
|
@ -180,6 +181,7 @@ static const char *const mobj_opt[] = {
|
||||||
"spryoff",
|
"spryoff",
|
||||||
"sprzoff",
|
"sprzoff",
|
||||||
"hitlag",
|
"hitlag",
|
||||||
|
"dispoffset",
|
||||||
NULL};
|
NULL};
|
||||||
|
|
||||||
#define UNIMPLEMENTED luaL_error(L, LUA_QL("mobj_t") " field " LUA_QS " is not implemented for Lua and cannot be accessed.", mobj_opt[field])
|
#define UNIMPLEMENTED luaL_error(L, LUA_QL("mobj_t") " field " LUA_QS " is not implemented for Lua and cannot be accessed.", mobj_opt[field])
|
||||||
|
|
@ -458,6 +460,9 @@ static int mobj_get(lua_State *L)
|
||||||
case mobj_hitlag:
|
case mobj_hitlag:
|
||||||
lua_pushinteger(L, mo->hitlag);
|
lua_pushinteger(L, mo->hitlag);
|
||||||
break;
|
break;
|
||||||
|
case mobj_dispoffset:
|
||||||
|
lua_pushinteger(L, mo->dispoffset);
|
||||||
|
break;
|
||||||
default: // extra custom variables in Lua memory
|
default: // extra custom variables in Lua memory
|
||||||
lua_getfield(L, LUA_REGISTRYINDEX, LREG_EXTVARS);
|
lua_getfield(L, LUA_REGISTRYINDEX, LREG_EXTVARS);
|
||||||
I_Assert(lua_istable(L, -1));
|
I_Assert(lua_istable(L, -1));
|
||||||
|
|
@ -830,6 +835,9 @@ static int mobj_set(lua_State *L)
|
||||||
case mobj_hitlag:
|
case mobj_hitlag:
|
||||||
mo->hitlag = luaL_checkinteger(L, 3);
|
mo->hitlag = luaL_checkinteger(L, 3);
|
||||||
break;
|
break;
|
||||||
|
case mobj_dispoffset:
|
||||||
|
mo->dispoffset = luaL_checkinteger(L, 3);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
lua_getfield(L, LUA_REGISTRYINDEX, LREG_EXTVARS);
|
lua_getfield(L, LUA_REGISTRYINDEX, LREG_EXTVARS);
|
||||||
I_Assert(lua_istable(L, -1));
|
I_Assert(lua_istable(L, -1));
|
||||||
|
|
|
||||||
|
|
@ -292,6 +292,10 @@ static int player_get(lua_State *L)
|
||||||
lua_pushinteger(L, plr->draftleeway);
|
lua_pushinteger(L, plr->draftleeway);
|
||||||
else if (fastcmp(field,"lastdraft"))
|
else if (fastcmp(field,"lastdraft"))
|
||||||
lua_pushinteger(L, plr->lastdraft);
|
lua_pushinteger(L, plr->lastdraft);
|
||||||
|
else if (fastcmp(field,"tripwireState"))
|
||||||
|
lua_pushinteger(L, plr->tripwireState);
|
||||||
|
else if (fastcmp(field,"tripwirePass"))
|
||||||
|
lua_pushinteger(L, plr->tripwirePass);
|
||||||
else if (fastcmp(field,"tripwireLeniency"))
|
else if (fastcmp(field,"tripwireLeniency"))
|
||||||
lua_pushinteger(L, plr->tripwireLeniency);
|
lua_pushinteger(L, plr->tripwireLeniency);
|
||||||
else if (fastcmp(field,"itemroulette"))
|
else if (fastcmp(field,"itemroulette"))
|
||||||
|
|
@ -646,6 +650,10 @@ static int player_set(lua_State *L)
|
||||||
plr->draftleeway = luaL_checkinteger(L, 3);
|
plr->draftleeway = luaL_checkinteger(L, 3);
|
||||||
else if (fastcmp(field,"lastdraft"))
|
else if (fastcmp(field,"lastdraft"))
|
||||||
plr->lastdraft = luaL_checkinteger(L, 3);
|
plr->lastdraft = luaL_checkinteger(L, 3);
|
||||||
|
else if (fastcmp(field,"tripwireState"))
|
||||||
|
plr->tripwireState = luaL_checkinteger(L, 3);
|
||||||
|
else if (fastcmp(field,"tripwirePass"))
|
||||||
|
plr->tripwirePass = luaL_checkinteger(L, 3);
|
||||||
else if (fastcmp(field,"tripwireLeniency"))
|
else if (fastcmp(field,"tripwireLeniency"))
|
||||||
plr->tripwireLeniency = luaL_checkinteger(L, 3);
|
plr->tripwireLeniency = luaL_checkinteger(L, 3);
|
||||||
else if (fastcmp(field,"itemroulette"))
|
else if (fastcmp(field,"itemroulette"))
|
||||||
|
|
|
||||||
|
|
@ -3801,7 +3801,7 @@ void P_BouncePlayerMove(mobj_t *mo)
|
||||||
if (P_IsLineTripWire(bestslideline))
|
if (P_IsLineTripWire(bestslideline))
|
||||||
{
|
{
|
||||||
// TRIPWIRE CANNOT BE MADE NONBOUNCY
|
// TRIPWIRE CANNOT BE MADE NONBOUNCY
|
||||||
K_ApplyTripWire(mo->player, TRIP_BLOCKED);
|
K_ApplyTripWire(mo->player, TRIPSTATE_BLOCKED);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
84
src/p_mobj.c
84
src/p_mobj.c
|
|
@ -7163,6 +7163,89 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case MT_TRIPWIREBOOST:
|
||||||
|
if (!mobj->target || !mobj->target->health
|
||||||
|
|| !mobj->target->player || !mobj->target->player->tripwireLeniency)
|
||||||
|
{
|
||||||
|
P_RemoveMobj(mobj);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
mobj->angle = K_MomentumAngle(mobj->target);
|
||||||
|
P_MoveOrigin(mobj, mobj->target->x, mobj->target->y, mobj->target->z + (mobj->target->height >> 1));
|
||||||
|
mobj->destscale = mobj->target->scale;
|
||||||
|
P_SetScale(mobj, mobj->target->scale);
|
||||||
|
|
||||||
|
if (mobj->extravalue1)
|
||||||
|
{
|
||||||
|
mobj->angle += ANGLE_180;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
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)
|
||||||
|
trans = NUMTRANSMAPS;
|
||||||
|
|
||||||
|
trans = NUMTRANSMAPS - trans;
|
||||||
|
|
||||||
|
if ((trans >= NUMTRANSMAPS) // not a valid visibility
|
||||||
|
|| (convSpeed < 150 && (leveltime & 1)) // < 150% flickering
|
||||||
|
|| (mobj->target->player->tripwirePass < TRIPWIRE_BOOST) // Not strong enough to make an aura
|
||||||
|
|| mobj->target->player->flamedash) // Flameshield dash
|
||||||
|
{
|
||||||
|
mobj->renderflags |= RF_DONTDRAW;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
boolean blastermode = (convSpeed >= 200) && (mobj->target->player->tripwirePass >= TRIPWIRE_BLASTER);
|
||||||
|
|
||||||
|
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->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;
|
||||||
case MT_BOOSTFLAME:
|
case MT_BOOSTFLAME:
|
||||||
if (!mobj->target || !mobj->target->health)
|
if (!mobj->target || !mobj->target->health)
|
||||||
{
|
{
|
||||||
|
|
@ -9841,6 +9924,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
||||||
// Sprite rendering
|
// Sprite rendering
|
||||||
mobj->spritexscale = mobj->spriteyscale = mobj->scale;
|
mobj->spritexscale = mobj->spriteyscale = mobj->scale;
|
||||||
mobj->spritexoffset = mobj->spriteyoffset = 0;
|
mobj->spritexoffset = mobj->spriteyoffset = 0;
|
||||||
|
mobj->dispoffset = info->dispoffset;
|
||||||
mobj->floorspriteslope = NULL;
|
mobj->floorspriteslope = NULL;
|
||||||
|
|
||||||
// set subsector and/or block links
|
// set subsector and/or block links
|
||||||
|
|
|
||||||
|
|
@ -408,6 +408,8 @@ typedef struct mobj_s
|
||||||
struct terrain_s *terrain; // Terrain definition of the floor this object last hit. NULL when in the air.
|
struct terrain_s *terrain; // Terrain definition of the floor this object last hit. NULL when in the air.
|
||||||
INT32 hitlag; // Sal-style hit lag, straight from Captain Fetch's jowls
|
INT32 hitlag; // Sal-style hit lag, straight from Captain Fetch's jowls
|
||||||
|
|
||||||
|
INT32 dispoffset;
|
||||||
|
|
||||||
// WARNING: New fields must be added separately to savegame and Lua.
|
// WARNING: New fields must be added separately to savegame and Lua.
|
||||||
} mobj_t;
|
} mobj_t;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -291,6 +291,8 @@ static void P_NetArchivePlayers(void)
|
||||||
WRITEUINT16(save_p, players[i].draftleeway);
|
WRITEUINT16(save_p, players[i].draftleeway);
|
||||||
WRITESINT8(save_p, players[i].lastdraft);
|
WRITESINT8(save_p, players[i].lastdraft);
|
||||||
|
|
||||||
|
WRITEUINT8(save_p, players[i].tripwireState);
|
||||||
|
WRITEUINT8(save_p, players[i].tripwirePass);
|
||||||
WRITEUINT16(save_p, players[i].tripwireLeniency);
|
WRITEUINT16(save_p, players[i].tripwireLeniency);
|
||||||
|
|
||||||
WRITEUINT16(save_p, players[i].itemroulette);
|
WRITEUINT16(save_p, players[i].itemroulette);
|
||||||
|
|
@ -355,7 +357,6 @@ static void P_NetArchivePlayers(void)
|
||||||
WRITEUINT32(save_p, players[i].spheredigestion);
|
WRITEUINT32(save_p, players[i].spheredigestion);
|
||||||
|
|
||||||
WRITESINT8(save_p, players[i].glanceDir);
|
WRITESINT8(save_p, players[i].glanceDir);
|
||||||
WRITEUINT8(save_p, players[i].tripWireState);
|
|
||||||
|
|
||||||
WRITEUINT8(save_p, players[i].typing_timer);
|
WRITEUINT8(save_p, players[i].typing_timer);
|
||||||
WRITEUINT8(save_p, players[i].typing_duration);
|
WRITEUINT8(save_p, players[i].typing_duration);
|
||||||
|
|
@ -575,6 +576,8 @@ static void P_NetUnArchivePlayers(void)
|
||||||
players[i].draftleeway = READUINT16(save_p);
|
players[i].draftleeway = READUINT16(save_p);
|
||||||
players[i].lastdraft = READSINT8(save_p);
|
players[i].lastdraft = READSINT8(save_p);
|
||||||
|
|
||||||
|
players[i].tripwireState = READUINT8(save_p);
|
||||||
|
players[i].tripwirePass = READUINT8(save_p);
|
||||||
players[i].tripwireLeniency = READUINT16(save_p);
|
players[i].tripwireLeniency = READUINT16(save_p);
|
||||||
|
|
||||||
players[i].itemroulette = READUINT16(save_p);
|
players[i].itemroulette = READUINT16(save_p);
|
||||||
|
|
@ -639,7 +642,6 @@ static void P_NetUnArchivePlayers(void)
|
||||||
players[i].spheredigestion = READUINT32(save_p);
|
players[i].spheredigestion = READUINT32(save_p);
|
||||||
|
|
||||||
players[i].glanceDir = READSINT8(save_p);
|
players[i].glanceDir = READSINT8(save_p);
|
||||||
players[i].tripWireState = READUINT8(save_p);
|
|
||||||
|
|
||||||
players[i].typing_timer = READUINT8(save_p);
|
players[i].typing_timer = READUINT8(save_p);
|
||||||
players[i].typing_duration = READUINT8(save_p);
|
players[i].typing_duration = READUINT8(save_p);
|
||||||
|
|
@ -1600,7 +1602,7 @@ typedef enum
|
||||||
MD2_SPRITEXOFFSET = 1<<20,
|
MD2_SPRITEXOFFSET = 1<<20,
|
||||||
MD2_SPRITEYOFFSET = 1<<21,
|
MD2_SPRITEYOFFSET = 1<<21,
|
||||||
MD2_FLOORSPRITESLOPE = 1<<22,
|
MD2_FLOORSPRITESLOPE = 1<<22,
|
||||||
// 1<<23 was taken out, maybe reuse later
|
MD2_DISPOFFSET = 1<<23,
|
||||||
MD2_HITLAG = 1<<24,
|
MD2_HITLAG = 1<<24,
|
||||||
MD2_WAYPOINTCAP = 1<<25,
|
MD2_WAYPOINTCAP = 1<<25,
|
||||||
MD2_KITEMCAP = 1<<26,
|
MD2_KITEMCAP = 1<<26,
|
||||||
|
|
@ -1841,6 +1843,8 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
|
||||||
}
|
}
|
||||||
if (mobj->hitlag)
|
if (mobj->hitlag)
|
||||||
diff2 |= MD2_HITLAG;
|
diff2 |= MD2_HITLAG;
|
||||||
|
if (mobj->dispoffset)
|
||||||
|
diff2 |= MD2_DISPOFFSET;
|
||||||
if (mobj == waypointcap)
|
if (mobj == waypointcap)
|
||||||
diff2 |= MD2_WAYPOINTCAP;
|
diff2 |= MD2_WAYPOINTCAP;
|
||||||
if (mobj == kitemcap)
|
if (mobj == kitemcap)
|
||||||
|
|
@ -2049,6 +2053,10 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
|
||||||
{
|
{
|
||||||
WRITEINT32(save_p, mobj->hitlag);
|
WRITEINT32(save_p, mobj->hitlag);
|
||||||
}
|
}
|
||||||
|
if (diff2 & MD2_DISPOFFSET)
|
||||||
|
{
|
||||||
|
WRITEINT32(save_p, mobj->dispoffset);
|
||||||
|
}
|
||||||
if (diff2 & MD2_LASTMOMZ)
|
if (diff2 & MD2_LASTMOMZ)
|
||||||
{
|
{
|
||||||
WRITEINT32(save_p, mobj->lastmomz);
|
WRITEINT32(save_p, mobj->lastmomz);
|
||||||
|
|
@ -3154,6 +3162,10 @@ static thinker_t* LoadMobjThinker(actionf_p1 thinker)
|
||||||
{
|
{
|
||||||
mobj->hitlag = READINT32(save_p);
|
mobj->hitlag = READINT32(save_p);
|
||||||
}
|
}
|
||||||
|
if (diff2 & MD2_DISPOFFSET)
|
||||||
|
{
|
||||||
|
mobj->dispoffset = READINT32(save_p);
|
||||||
|
}
|
||||||
if (diff2 & MD2_LASTMOMZ)
|
if (diff2 & MD2_LASTMOMZ)
|
||||||
{
|
{
|
||||||
mobj->lastmomz = READINT32(save_p);
|
mobj->lastmomz = READINT32(save_p);
|
||||||
|
|
|
||||||
|
|
@ -2070,7 +2070,7 @@ void P_CrossSpecialLine(line_t *line, INT32 side, mobj_t *thing)
|
||||||
|
|
||||||
if (P_IsLineTripWire(line))
|
if (P_IsLineTripWire(line))
|
||||||
{
|
{
|
||||||
K_ApplyTripWire(player, TRIP_PASSED);
|
K_ApplyTripWire(player, TRIPSTATE_PASSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (line->special)
|
switch (line->special)
|
||||||
|
|
|
||||||
|
|
@ -1503,7 +1503,7 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
fixed_t paperoffset = 0, paperdistance = 0;
|
fixed_t paperoffset = 0, paperdistance = 0;
|
||||||
angle_t centerangle = 0;
|
angle_t centerangle = 0;
|
||||||
|
|
||||||
INT32 dispoffset = thing->info->dispoffset;
|
INT32 dispoffset = thing->dispoffset;
|
||||||
|
|
||||||
//SoM: 3/17/2000
|
//SoM: 3/17/2000
|
||||||
fixed_t gz = 0, gzt = 0;
|
fixed_t gz = 0, gzt = 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue