mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-03-22 02:41:56 +00:00
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:
parent
d6af8e52c1
commit
f5650eba09
14 changed files with 106 additions and 48 deletions
|
@ -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)
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -3403,6 +3403,7 @@ typedef enum state
|
|||
S_PLAYERARROW_ROULETTE,
|
||||
|
||||
S_PLAYERBOMB,
|
||||
S_PLAYERBOMB_WHEEL,
|
||||
|
||||
#ifdef SEENAMES
|
||||
S_NAMECHECK,
|
||||
|
|
74
src/k_kart.c
74
src/k_kart.c
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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))))
|
||||
|
|
12
src/p_mobj.c
12
src/p_mobj.c
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue