mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'overtime-spectator'
This commit is contained in:
commit
aa927a5b00
6 changed files with 52 additions and 17 deletions
|
|
@ -93,6 +93,9 @@ void K_CheckBumpers(void)
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
UINT8 numingame = 0;
|
UINT8 numingame = 0;
|
||||||
UINT8 nobumpers = 0;
|
UINT8 nobumpers = 0;
|
||||||
|
UINT8 eliminated = 0;
|
||||||
|
|
||||||
|
const boolean singleplayer = (battlecapsules || bossinfo.valid);
|
||||||
|
|
||||||
if (!(gametyperules & GTR_BUMPERS))
|
if (!(gametyperules & GTR_BUMPERS))
|
||||||
return;
|
return;
|
||||||
|
|
@ -114,11 +117,16 @@ void K_CheckBumpers(void)
|
||||||
{
|
{
|
||||||
nobumpers++;
|
nobumpers++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (players[i].pflags & PF_ELIMINATED)
|
||||||
|
{
|
||||||
|
eliminated++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (battlecapsules || bossinfo.valid)
|
if (singleplayer
|
||||||
{
|
? nobumpers > 0 && nobumpers >= numingame
|
||||||
if (nobumpers > 0 && nobumpers >= numingame)
|
: eliminated >= numingame - 1)
|
||||||
{
|
{
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
{
|
{
|
||||||
|
|
@ -126,10 +134,12 @@ void K_CheckBumpers(void)
|
||||||
continue;
|
continue;
|
||||||
if (players[i].spectator)
|
if (players[i].spectator)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (singleplayer)
|
||||||
players[i].pflags |= PF_NOCONTEST;
|
players[i].pflags |= PF_NOCONTEST;
|
||||||
|
|
||||||
P_DoPlayerExit(&players[i]);
|
P_DoPlayerExit(&players[i]);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1934,13 +1934,12 @@ static boolean P_KillPlayer(player_t *player, mobj_t *inflictor, mobj_t *source,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
K_DestroyBumpers(player, 1);
|
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case DMG_DEATHPIT:
|
case DMG_DEATHPIT:
|
||||||
// Respawn kill types
|
// Respawn kill types
|
||||||
K_DoIngameRespawn(player);
|
K_DoIngameRespawn(player);
|
||||||
|
player->mo->health -= K_DestroyBumpers(player, 1);
|
||||||
return false;
|
return false;
|
||||||
case DMG_SPECTATOR:
|
case DMG_SPECTATOR:
|
||||||
// disappearifies, but still gotta put items back in play
|
// disappearifies, but still gotta put items back in play
|
||||||
|
|
@ -1997,10 +1996,11 @@ static boolean P_KillPlayer(player_t *player, mobj_t *inflictor, mobj_t *source,
|
||||||
P_SetTarget(&boom->target, player->mo);
|
P_SetTarget(&boom->target, player->mo);
|
||||||
}
|
}
|
||||||
|
|
||||||
K_DestroyBumpers(player, player->bumpers);
|
|
||||||
player->pflags |= PF_ELIMINATED;
|
player->pflags |= PF_ELIMINATED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
K_DestroyBumpers(player, player->bumpers);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,10 @@ extern "C" {
|
||||||
|
|
||||||
#define P_GetPlayerViewHeight(player) (41*player->mo->height/48)
|
#define P_GetPlayerViewHeight(player) (41*player->mo->height/48)
|
||||||
|
|
||||||
|
#ifdef PARANOIA
|
||||||
|
#define SCRAMBLE_REMOVED // Force debug build to crash when Removed mobj is accessed
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
THINK_POLYOBJ,
|
THINK_POLYOBJ,
|
||||||
|
|
@ -284,6 +288,9 @@ extern mapthing_t *itemrespawnque[ITEMQUESIZE];
|
||||||
extern tic_t itemrespawntime[ITEMQUESIZE];
|
extern tic_t itemrespawntime[ITEMQUESIZE];
|
||||||
extern size_t iquehead, iquetail;
|
extern size_t iquehead, iquetail;
|
||||||
extern consvar_t cv_gravity, cv_movebob;
|
extern consvar_t cv_gravity, cv_movebob;
|
||||||
|
#ifdef SCRAMBLE_REMOVED
|
||||||
|
extern consvar_t cv_scrambleremoved;
|
||||||
|
#endif
|
||||||
|
|
||||||
void P_RespawnBattleBoxes(void);
|
void P_RespawnBattleBoxes(void);
|
||||||
mobjtype_t P_GetMobjtype(UINT16 mthingtype);
|
mobjtype_t P_GetMobjtype(UINT16 mthingtype);
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,8 @@
|
||||||
static CV_PossibleValue_t CV_BobSpeed[] = {{0, "MIN"}, {4*FRACUNIT, "MAX"}, {0, NULL}};
|
static CV_PossibleValue_t CV_BobSpeed[] = {{0, "MIN"}, {4*FRACUNIT, "MAX"}, {0, NULL}};
|
||||||
consvar_t cv_movebob = CVAR_INIT ("movebob", "1.0", CV_FLOAT|CV_SAVE, CV_BobSpeed, NULL);
|
consvar_t cv_movebob = CVAR_INIT ("movebob", "1.0", CV_FLOAT|CV_SAVE, CV_BobSpeed, NULL);
|
||||||
|
|
||||||
|
consvar_t cv_scrambleremoved = CVAR_INIT ("scrambleremoved", "On", CV_NETVAR, CV_OnOff, NULL);
|
||||||
|
|
||||||
actioncache_t actioncachehead;
|
actioncache_t actioncachehead;
|
||||||
|
|
||||||
static mobj_t *overlaycap = NULL;
|
static mobj_t *overlaycap = NULL;
|
||||||
|
|
@ -11119,9 +11121,6 @@ mapthing_t *itemrespawnque[ITEMQUESIZE];
|
||||||
tic_t itemrespawntime[ITEMQUESIZE];
|
tic_t itemrespawntime[ITEMQUESIZE];
|
||||||
size_t iquehead, iquetail;
|
size_t iquehead, iquetail;
|
||||||
|
|
||||||
#ifdef PARANOIA
|
|
||||||
#define SCRAMBLE_REMOVED // Force debug build to crash when Removed mobj is accessed
|
|
||||||
#endif
|
|
||||||
void P_RemoveMobj(mobj_t *mobj)
|
void P_RemoveMobj(mobj_t *mobj)
|
||||||
{
|
{
|
||||||
I_Assert(mobj != NULL);
|
I_Assert(mobj != NULL);
|
||||||
|
|
@ -11257,7 +11256,10 @@ void P_RemoveMobj(mobj_t *mobj)
|
||||||
// DBG: set everything in mobj_t to 0xFF instead of leaving it. debug memory error.
|
// DBG: set everything in mobj_t to 0xFF instead of leaving it. debug memory error.
|
||||||
#ifdef SCRAMBLE_REMOVED
|
#ifdef SCRAMBLE_REMOVED
|
||||||
// Invalidate mobj_t data to cause crashes if accessed!
|
// Invalidate mobj_t data to cause crashes if accessed!
|
||||||
|
if (cv_scrambleremoved.value)
|
||||||
|
{
|
||||||
memset((UINT8 *)mobj + sizeof(thinker_t), 0xff, sizeof(mobj_t) - sizeof(thinker_t));
|
memset((UINT8 *)mobj + sizeof(thinker_t), 0xff, sizeof(mobj_t) - sizeof(thinker_t));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
13
src/p_user.c
13
src/p_user.c
|
|
@ -60,6 +60,7 @@
|
||||||
#include "k_follower.h"
|
#include "k_follower.h"
|
||||||
#include "k_battle.h"
|
#include "k_battle.h"
|
||||||
#include "k_rank.h"
|
#include "k_rank.h"
|
||||||
|
#include "k_director.h"
|
||||||
|
|
||||||
#ifdef HW3SOUND
|
#ifdef HW3SOUND
|
||||||
#include "hardware/hw3sound.h"
|
#include "hardware/hw3sound.h"
|
||||||
|
|
@ -2786,11 +2787,23 @@ static void P_DeathThink(player_t *player)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((player->pflags & PF_ELIMINATED) && (gametyperules & GTR_BUMPERS))
|
||||||
|
{
|
||||||
|
playerGone = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (playerGone == false && player->deadtimer > TICRATE)
|
if (playerGone == false && player->deadtimer > TICRATE)
|
||||||
{
|
{
|
||||||
player->playerstate = PST_REBORN;
|
player->playerstate = PST_REBORN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: support splitscreen
|
||||||
|
// Spectate another player after 2 seconds
|
||||||
|
if (player == &players[consoleplayer] && playerGone == true && (gametyperules & GTR_BUMPERS) && player->deadtimer == 2*TICRATE)
|
||||||
|
{
|
||||||
|
K_ToggleDirector(true);
|
||||||
|
}
|
||||||
|
|
||||||
// Keep time rolling
|
// Keep time rolling
|
||||||
if (!(player->exiting || mapreset) && !(player->pflags & PF_NOCONTEST) && !stoppedclock)
|
if (!(player->exiting || mapreset) && !(player->pflags & PF_NOCONTEST) && !stoppedclock)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1666,6 +1666,9 @@ void R_RegisterEngineStuff(void)
|
||||||
CV_RegisterVar(&cv_maxportals);
|
CV_RegisterVar(&cv_maxportals);
|
||||||
|
|
||||||
CV_RegisterVar(&cv_movebob);
|
CV_RegisterVar(&cv_movebob);
|
||||||
|
#ifdef SCRAMBLE_REMOVED
|
||||||
|
CV_RegisterVar(&cv_scrambleremoved);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Frame interpolation/uncapped
|
// Frame interpolation/uncapped
|
||||||
CV_RegisterVar(&cv_fpscap);
|
CV_RegisterVar(&cv_fpscap);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue