Wipeout & minor tweaks

- SMK-style wipeout
- Using goldshroom removes some of its timer again
- Karma item boxes follow the player more closely
- "ATTACK OR PROTECT" no longer appears when you die if you've already
seen it
- Lua support for our SOC actions
- Fixed KARTSTUFF_LIST for Lua/SOC
- "Battle" is now an accepted word in level headers for setting
TOL_MATCH
- Default map numlaps is now 3 instead of 4
- Reverted making LF2_RECORDATTACK and LF2_NOVISITNEEDED default menu
flags, needs to be set manually now
This commit is contained in:
TehRealSalt 2017-12-10 20:57:46 -05:00
parent d6af8e52c1
commit f5650eba09
14 changed files with 106 additions and 48 deletions

View File

@ -276,7 +276,7 @@ typedef enum
k_goldshroomtimer, // Gold Mushroom duration timer
k_startimer, // Invincibility timer
k_spinouttimer, // Spin-out from a banana peel or oil slick (was "pw_bananacam")
//k_wipeouttimer, // Wipe-out from a shell, waits a short amount of time before making you stop and spinning out in place
k_wipeouttimer, // Wipe-out from a shell, waits a short amount of time before making you stop and spinning out in place
k_laserwisptimer, // The duration and relative angle of the laser
k_justbumped, // Prevent players from endlessly bumping into each other
k_poweritemtimer, // Battle mode, how long before you're allowed another power item (Star, Megashroom)

View File

@ -981,6 +981,7 @@ static const struct {
{"RACE",TOL_RACE},
{"MATCH",TOL_MATCH},
{"BATTLE",TOL_MATCH}, // SRB2kart
{"TAG",TOL_TAG},
{"CTF",TOL_CTF},
@ -6426,6 +6427,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_PLAYERARROW_ROULETTE",
"S_PLAYERBOMB", // Player bomb overlay
"S_PLAYERBOMB_WHEEL",
#ifdef SEENAMES
"S_NAMECHECK",
@ -7326,6 +7328,7 @@ static const char *const KARTSTUFF_LIST[] = {
"THROWDIR",
"CAMSPIN",
"LAPANIMATION",
"CARDANIMATION",
"SOUNDS",
"BOOSTING",
@ -7354,6 +7357,7 @@ static const char *const KARTSTUFF_LIST[] = {
"GOLDSHROOMTIMER",
"STARTIMER",
"SPINOUTTIMER",
"WIPEOUTTIMER",
"LASERWISPTIMER",
"JUSTBUMPED",
"POWERITEMTIMER",

View File

@ -405,6 +405,7 @@ extern INT32 boostealtime;
extern INT32 mushroomtime;
extern INT32 itemtime;
extern INT32 comebacktime;
extern INT32 wipeouttime;
extern UINT8 introtoplay;
extern UINT8 creditscutscene;

View File

@ -206,6 +206,7 @@ INT32 boostealtime = TICRATE/2;
INT32 mushroomtime = TICRATE + (TICRATE/3);
INT32 itemtime = 8*TICRATE;
INT32 comebacktime = 10*TICRATE;
INT32 wipeouttime = 20;
INT32 gameovertics = 15*TICRATE;
@ -2203,6 +2204,7 @@ void G_PlayerReborn(INT32 player)
INT32 offroad;
INT32 balloon;
INT32 comebackpoints;
INT32 comebackshowninfo;
score = players[player].score;
lives = players[player].lives;
@ -2260,6 +2262,7 @@ void G_PlayerReborn(INT32 player)
offroad = players[player].kartstuff[k_offroad];
balloon = players[player].kartstuff[k_balloon];
comebackpoints = players[player].kartstuff[k_comebackpoints];
comebackshowninfo = players[player].kartstuff[k_comebackshowninfo];
p = &players[player];
memset(p, 0, sizeof (*p));
@ -2316,8 +2319,10 @@ void G_PlayerReborn(INT32 player)
// SRB2kart
p->kartstuff[k_starpostwp] = starpostwp; // TODO: get these out of kartstuff, it causes desync
p->kartstuff[k_offroad] = offroad;
p->kartstuff[k_balloon] = balloon;
p->kartstuff[k_comebackpoints] = comebackpoints;
p->kartstuff[k_comebackshowninfo] = comebackshowninfo;
p->kartstuff[k_comebacktimer] = comebacktime;
// Don't do anything immediately

View File

@ -2881,7 +2881,8 @@ state_t states[NUMSTATES] =
{SPR_ARRO, FF_FULLBRIGHT|16, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_EMPTY
{SPR_ARRO, FF_FULLBRIGHT|FF_ANIMATE|1, -1, {NULL}, 5, 3, S_NULL}, // S_PLAYERARROW_ROULETTE
{SPR_PBOM, 0, -1, {NULL}, 1, 0, S_NULL}, // S_PLAYERBOMB
{SPR_PBOM, FF_ANIMATE, -1, {NULL}, 3, 3, S_NULL}, // S_PLAYERBOMB
{SPR_PBOM, 4, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERBOMB_WHEEL
#ifdef SEENAMES
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK

View File

@ -3403,6 +3403,7 @@ typedef enum state
S_PLAYERARROW_ROULETTE,
S_PLAYERBOMB,
S_PLAYERBOMB_WHEEL,
#ifdef SEENAMES
S_NAMECHECK,

View File

@ -728,7 +728,7 @@ static INT32 K_KartItemOddsBalloons[NUMKARTITEMS][5] =
/*Gold Mushroom*/ { 0, 0, 0, 0, 0 }, // Gold Mushroom
/*Star*/ { 1, 1, 0, 0, 0 }, // Star
/*Triple Banana*/ { 0, 3, 3, 1, 0 }, // Triple Banana
/*Triple Banana*/ { 0, 3, 1, 1, 0 }, // Triple Banana
/*Fake Item*/ { 0, 0, 2, 2, 1 }, // Fake Item
/*Banana*/ { 0, 0, 3, 1, 1 }, // Banana
/*Green Shell*/ { 0, 0, 5, 3, 1 }, // Green Shell
@ -1455,16 +1455,22 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
if (player->kartstuff[k_spinout] == 0 && player->kartstuff[k_spinouttimer] == 0 && player->powers[pw_flashing] == K_GetKartFlashing())
player->powers[pw_flashing]--;
/*if (player->kartstuff[k_wipeouttimer])
if (player->kartstuff[k_wipeouttimer])
{
if (player->kartstuff[k_wipeouttimer] == 1)
{
player->kartstuff[k_spinouttype] = 1;
K_SpinPlayer(player, NULL);
player->mo->momx = player->mo->momy = 0;
if (P_IsObjectOnGround(player->mo))
{
player->kartstuff[k_wipeouttimer] = 0;
P_PlayRinglossSound(player->mo);
player->kartstuff[k_spinouttype] = 1;
K_SpinPlayer(player, NULL);
player->mo->momx = player->mo->momy = 0;
}
}
player->kartstuff[k_wipeouttimer]--;
}*/
else
player->kartstuff[k_wipeouttimer]--;
}
if (player->kartstuff[k_magnettimer])
player->kartstuff[k_magnettimer]--;
@ -1521,13 +1527,20 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
if (player->kartstuff[k_lapanimation])
player->kartstuff[k_lapanimation]--;
if (gametype != GT_RACE && (player->exiting || (player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer])))
if (gametype != GT_RACE && (player->exiting || player->kartstuff[k_comebacktimer]))
{
if ((player->exiting < 6*TICRATE)
|| (player->kartstuff[k_comebacktimer] > 7*TICRATE && player->kartstuff[k_comebacktimer] < 9*TICRATE))
player->kartstuff[k_cardanimation] += ((164-player->kartstuff[k_cardanimation])/8)+1;
else if (player->kartstuff[k_comebacktimer] < 5*TICRATE && !player->exiting)
player->kartstuff[k_cardanimation] -= ((164-player->kartstuff[k_cardanimation])/8)+1;
if (player->exiting)
{
if (player->exiting < 6*TICRATE)
player->kartstuff[k_cardanimation] += ((164-player->kartstuff[k_cardanimation])/8)+1;
}
else
{
if (player->kartstuff[k_comebacktimer] < 6*TICRATE)
player->kartstuff[k_cardanimation] -= ((164-player->kartstuff[k_cardanimation])/8)+1;
else if (player->kartstuff[k_comebacktimer] < 9*TICRATE)
player->kartstuff[k_cardanimation] += ((164-player->kartstuff[k_cardanimation])/8)+1;
}
if (player->kartstuff[k_cardanimation] > 164)
player->kartstuff[k_cardanimation] = 164;
@ -1802,7 +1815,7 @@ void K_SpinPlayer(player_t *player, mobj_t *source)
return;
if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0)
|| player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|| player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|| (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1)))
return;
@ -1860,13 +1873,13 @@ void K_SpinPlayer(player_t *player, mobj_t *source)
return;
}
/*void K_WipeoutPlayer(player_t *player, mobj_t *source)
void K_WipeoutPlayer(player_t *player, mobj_t *source)
{
if (player->health <= 0)
return;
if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0)
|| player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|| player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|| (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1)))
return;
@ -1882,19 +1895,18 @@ void K_SpinPlayer(player_t *player, mobj_t *source)
P_AddPlayerScore(source->player, 1);
}
P_RingDamage(player, NULL, source, player->mo->health-1);
P_PlayerRingBurst(player, 5);
if (P_IsLocalPlayer(player))
{
quake.intensity = 32*FRACUNIT;
quake.time = 5;
}
}
player->kartstuff[k_wipeouttimer] = 21;
player->kartstuff[k_wipeouttimer] = wipeouttime+1;
return;
}*/
}
void K_SquishPlayer(player_t *player, mobj_t *source)
{
@ -1902,7 +1914,7 @@ void K_SquishPlayer(player_t *player, mobj_t *source)
return;
if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || player->kartstuff[k_startimer] > 0
|| player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|| player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|| (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1)))
return;
@ -1946,7 +1958,7 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju
return;
if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0)
|| player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|| player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|| (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1)))
return;
@ -2025,10 +2037,10 @@ void K_StealBalloon(player_t *player, player_t *victim, boolean force)
return;
if ((player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0)
|| player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|| player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|| (player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]))
|| (victim->powers[pw_flashing] > 0 || victim->kartstuff[k_squishedtimer] > 0 || (victim->kartstuff[k_spinouttimer] > 0 && victim->kartstuff[k_spinout] > 0)
|| victim->kartstuff[k_startimer] > 0 || victim->kartstuff[k_growshrinktimer] > 0 || victim->kartstuff[k_bootimer] > 0))
|| victim->kartstuff[k_wipeouttimer] > 0 || victim->kartstuff[k_startimer] > 0 || victim->kartstuff[k_growshrinktimer] > 0 || victim->kartstuff[k_bootimer] > 0))
return;
}
@ -2902,7 +2914,7 @@ static void K_KartDrift(player_t *player, boolean onground)
}
// Stop drifting
if (player->kartstuff[k_spinouttimer] > 0 // banana peel
if (player->kartstuff[k_spinouttimer] > 0 || player->kartstuff[k_wipeouttimer] > 0 // banana peel
|| player->speed < (10<<16)) // you're too slow!
{
player->kartstuff[k_drift] = 0;
@ -3135,7 +3147,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
else if (cmd->buttons & BT_ATTACK)
player->pflags |= PF_ATTACKDOWN;
if (player && player->health > 0 && !player->spectator && !player->exiting && player->kartstuff[k_spinouttimer] == 0)
if (player && player->health > 0 && !player->spectator && !player->exiting && player->kartstuff[k_spinouttimer] == 0 && player->kartstuff[k_wipeouttimer] == 0)
{
// Magnet
@ -3170,9 +3182,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
else if (ATTACK_IS_DOWN && player->kartstuff[k_goldshroomtimer] > 1 && onground && NO_BOO)
{
K_DoMushroom(player, true, false);
//player->kartstuff[k_goldshroomtimer] -= 10;
//if (player->kartstuff[k_goldshroomtimer] < 1)
// player->kartstuff[k_goldshroomtimer] = 1;
player->kartstuff[k_goldshroomtimer] -= 10;
if (player->kartstuff[k_goldshroomtimer] < 1)
player->kartstuff[k_goldshroomtimer] = 1;
}
// TripleMushroom power
else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_mushroom] == 4 && onground && NO_BOO)
@ -3614,10 +3626,12 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
player->mo->flags2 |= MF2_SHADOW;
if (!(player->mo->tracer))
{
player->mo->tracer = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_OVERLAY);
P_SetMobjState(player->mo->tracer, S_PLAYERBOMB);
}
P_SetTarget(&player->mo->tracer->target, player->mo);
P_SetMobjState(player->mo->tracer, S_PLAYERBOMB);
player->mo->tracer->color = player->mo->color;
if (player->kartstuff[k_comebacktimer] > 0)

View File

@ -23,7 +23,7 @@ void K_LakituChecker(player_t *player);
void K_KartMoveAnimation(player_t *player);
void K_KartPlayerThink(player_t *player, ticcmd_t *cmd);
void K_SpinPlayer(player_t *player, mobj_t *source);
//void K_WipeoutPlayer(player_t *player, mobj_t *source);
void K_WipeoutPlayer(player_t *player, mobj_t *source);
void K_SquishPlayer(player_t *player, mobj_t *source);
void K_ExplodePlayer(player_t *player, mobj_t *source);
void K_StealBalloon(player_t *player, player_t *victim, boolean force);

View File

@ -8094,6 +8094,10 @@ void A_ToggleFlameJet(mobj_t* actor)
void A_ItemPop(mobj_t *actor)
{
mobj_t *remains;
#ifdef HAVE_BLUA
if (LUA_CallAction("A_ItemPop", actor))
return;
#endif
if (!(actor->target && actor->target->player))
{
@ -8151,6 +8155,10 @@ void A_RedShellChase(mobj_t *actor)
INT32 c = 0;
INT32 stop;
player_t *player;
#ifdef HAVE_BLUA
if (LUA_CallAction("A_RedShellChase", actor))
return;
#endif
if (actor->tracer)
{
@ -8252,6 +8260,10 @@ void A_BobombExplode(mobj_t *actor)
INT32 d;
INT32 locvar1 = var1;
mobjtype_t type;
#ifdef HAVE_BLUA
if (LUA_CallAction("A_BobombExplode", actor))
return;
#endif
type = (mobjtype_t)locvar1;

View File

@ -2911,7 +2911,7 @@ static void P_ShieldDamage(player_t *player, mobj_t *inflictor, mobj_t *source,
}
*/
static void P_RingDamage(player_t *player, mobj_t *inflictor, mobj_t *source, INT32 damage)
/*static void P_RingDamage(player_t *player, mobj_t *inflictor, mobj_t *source, INT32 damage)
{
if (!(inflictor && ((inflictor->flags & MF_MISSILE) || inflictor->player) && player->powers[pw_super] && ALL7EMERALDS(player->powers[pw_emeralds])))
{
@ -2923,7 +2923,7 @@ static void P_RingDamage(player_t *player, mobj_t *inflictor, mobj_t *source, IN
S_StartSound(player->mo, sfx_spkdth);
}
/*if (source && source->player && !player->powers[pw_super]) //don't score points against super players
if (source && source->player && !player->powers[pw_super]) //don't score points against super players
{
// Award no points when players shoot each other when cv_friendlyfire is on.
if (!G_GametypeHasTeams() || !(source->player->ctfteam == player->ctfteam && source != player->mo))
@ -2939,11 +2939,11 @@ static void P_RingDamage(player_t *player, mobj_t *inflictor, mobj_t *source, IN
if (!G_GametypeHasTeams() || !(source->player->ctfteam == player->ctfteam && source != player->mo))
P_AddPlayerScore(source->player, 1);
}
}*/
}
// Ring loss sound plays despite hitting spikes
P_PlayRinglossSound(player->mo); // Ringledingle!
}
}*/
/** Damages an object, which may or may not be a player.
* For melee attacks, source and inflictor are the same.
@ -3202,8 +3202,17 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|| inflictor->type == MT_TRIPLEREDSHIELD1 || inflictor->type == MT_TRIPLEREDSHIELD2 || inflictor->type == MT_TRIPLEREDSHIELD3
|| inflictor->player))
{
//K_WipeoutPlayer(player, source);
player->kartstuff[k_spinouttype] = 1;
fixed_t tmomx = inflictor->momx;
fixed_t tmomy = inflictor->momy;
fixed_t tmomz = inflictor->momz;
K_KartBouncing(target, inflictor, false);
K_WipeoutPlayer(player, source);
inflictor->momx = tmomx;
inflictor->momy = tmomy;
inflictor->momz = tmomz;
/*player->kartstuff[k_spinouttype] = 1;
K_SpinPlayer(player, source);
damage = player->mo->health - 1;
P_RingDamage(player, inflictor, source, damage);
@ -3213,7 +3222,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
{
quake.intensity = 32*FRACUNIT;
quake.time = 5;
}
}*/
}
else
{

View File

@ -1627,12 +1627,12 @@ static boolean PIT_CheckThing(mobj_t *thing)
return true; // underneath
if (thing->player->kartstuff[k_growshrinktimer] || thing->player->kartstuff[k_squishedtimer]
|| thing->player->kartstuff[k_bootimer] || thing->player->kartstuff[k_spinouttimer]
|| thing->player->kartstuff[k_bootimer] || thing->player->kartstuff[k_spinouttimer] || thing->player->kartstuff[k_wipeouttimer]
|| thing->player->kartstuff[k_startimer] || thing->player->kartstuff[k_justbumped]
|| (gametype != GT_RACE && (thing->player->kartstuff[k_balloon] <= 0
&& (thing->player->kartstuff[k_comebacktimer] || thing->player->kartstuff[k_comebackmode] == 1)))
|| tmthing->player->kartstuff[k_growshrinktimer] || tmthing->player->kartstuff[k_squishedtimer]
|| tmthing->player->kartstuff[k_bootimer] || tmthing->player->kartstuff[k_spinouttimer]
|| tmthing->player->kartstuff[k_bootimer] || tmthing->player->kartstuff[k_spinouttimer] || tmthing->player->kartstuff[k_wipeouttimer]
|| tmthing->player->kartstuff[k_startimer] || tmthing->player->kartstuff[k_justbumped]
|| (gametype != GT_RACE && (tmthing->player->kartstuff[k_balloon] <= 0
&& (tmthing->player->kartstuff[k_comebacktimer] || tmthing->player->kartstuff[k_comebackmode] == 1))))

View File

@ -2867,7 +2867,7 @@ static void P_PlayerZMovement(mobj_t *mo)
// Cut momentum in half when you hit the ground and
// aren't pressing any controls.
if (!(mo->player->cmd.forwardmove || mo->player->cmd.sidemove) && !mo->player->cmomx && !mo->player->cmomy
&& !(mo->player->pflags & PF_SPINNING) && !(mo->player->kartstuff[k_spinouttimer]))
&& !(mo->player->pflags & PF_SPINNING) && !(mo->player->kartstuff[k_spinouttimer] || mo->player->kartstuff[k_wipeouttimer]))
{
mo->momx = mo->momx/2;
mo->momy = mo->momy/2;
@ -5922,6 +5922,13 @@ void P_Attract(mobj_t *source, mobj_t *dest, boolean nightsgrab) // Home in on y
if (!dest || dest->health <= 0 || !dest->player || !source->tracer)
return;
if (dest->player && dest->player->kartstuff[k_comebackmode] == 1)
{
P_TeleportMove(source, dest->x+dest->momx, dest->y+dest->momy, dest->z+dest->momz);
source->angle = dest->angle;
return;
}
// change angle
source->angle = R_PointToAngle2(source->x, source->y, tx, ty);
@ -9492,6 +9499,9 @@ void P_SpawnPlayer(INT32 playernum)
overheadarrow->flags2 |= MF2_DONTDRAW;
P_SetScale(overheadarrow, mobj->destscale);
if (leveltime < 1)
p->kartstuff[k_comebackshowninfo] = 0;
if (gametype != GT_RACE)
{
/*INT32 i;

View File

@ -160,7 +160,7 @@ FUNCNORETURN static ATTRNORETURN void CorruptMapError(const char *msg)
I_Error("Invalid or corrupt map.\nLook in log file or text console for technical details.");
}
#define NUMLAPS_DEFAULT 4
#define NUMLAPS_DEFAULT 3
/** Clears the data from a single map header.
*
@ -224,7 +224,7 @@ static void P_ClearSingleMapHeaderInfo(INT16 i)
DEH_WriteUndoline("LEVELFLAGS", va("%d", mapheaderinfo[num]->levelflags), UNDO_NONE);
mapheaderinfo[num]->levelflags = 0;
DEH_WriteUndoline("MENUFLAGS", va("%d", mapheaderinfo[num]->menuflags), UNDO_NONE);
mapheaderinfo[num]->menuflags = LF2_RECORDATTACK|LF2_NOVISITNEEDED; // 0
mapheaderinfo[num]->menuflags = 0;
// TODO grades support for delfile (pfft yeah right)
P_DeleteGrades(num);
// an even further impossibility, delfile custom opts support

View File

@ -3665,7 +3665,7 @@ void P_DoJump(player_t *player, boolean soundandstate)
if (!player->jumpfactor)
return;
if (player->kartstuff[k_spinouttimer]) // SRB2kart
if (player->kartstuff[k_spinouttimer] || player->kartstuff[k_wipeouttimer]) // SRB2kart
return;
/* // SRB2kart - climbing in a kart?
@ -4636,7 +4636,8 @@ static void P_3dMovement(player_t *player)
cmd = &player->cmd;
if (player->exiting || player->pflags & PF_STASIS || player->kartstuff[k_spinouttimer]) // pw_introcam?
if (player->exiting || player->pflags & PF_STASIS
|| player->kartstuff[k_spinouttimer] || player->kartstuff[k_wipeouttimer]) // pw_introcam?
{
cmd->forwardmove = cmd->sidemove = 0;
if (player->pflags & PF_GLIDING)
@ -4868,7 +4869,7 @@ static void P_3dMovement(player_t *player)
P_Thrust(player->mo, movepushangle, movepushforward);
#endif
}
else if (!player->kartstuff[k_spinouttimer])
else if (!(player->kartstuff[k_spinouttimer] || player->kartstuff[k_wipeouttimer]))
{
K_MomentumToFacing(player);
}