- moved bglobal.freeze to FLevelLocals, because this flag has nothing specific to do with bots as it freezes the entire level.

This commit is contained in:
Christoph Oelckers 2019-01-09 18:59:41 +01:00
parent adeb8fb65b
commit 4227b9020c
16 changed files with 34 additions and 25 deletions

View file

@ -49,6 +49,7 @@
#include "d_player.h"
#include "w_wad.h"
#include "vm.h"
#include "g_levellocals.h"
IMPLEMENT_CLASS(DBot, false, true)
@ -138,7 +139,7 @@ void DBot::Tick ()
{
Super::Tick ();
if (player->mo == nullptr || bglobal.freeze)
if (player->mo == nullptr || Level->freeze)
{
return;
}

View file

@ -116,7 +116,7 @@ public:
void ClearPlayer (int playernum, bool keepTeam);
//(b_game.cpp)
void Main ();
void Main (FLevelLocals *Level);
void Init ();
void End();
bool SpawnBot (const char *name, int color = NOCOLOR);
@ -139,8 +139,6 @@ public:
bool IsDangerous (sector_t *sec);
TArray<FString> getspawned; //Array of bots (their names) which should be spawned when starting a game.
uint8_t freeze; //Game in freeze mode.
uint8_t changefreeze; //Game wants to change freeze mode.
int botnum;
botinfo_t *botinfo;
int spawn_tries;

View file

@ -1178,7 +1178,7 @@ void DDecalFader::Tick ()
}
else
{
if (Level->maptime < TimeToStartDecay || bglobal.freeze)
if (Level->maptime < TimeToStartDecay || Level->freeze)
{
return;
}
@ -1265,7 +1265,7 @@ void DDecalStretcher::Tick ()
Destroy ();
return;
}
if (Level->maptime < TimeToStart || bglobal.freeze)
if (Level->maptime < TimeToStart || Level->freeze)
{
return;
}
@ -1333,7 +1333,7 @@ void DDecalSlider::Tick ()
Destroy ();
return;
}
if (Level->maptime < TimeToStart || bglobal.freeze)
if (Level->maptime < TimeToStart || Level->freeze)
{
return;
}
@ -1401,7 +1401,7 @@ void DDecalColorer::Tick ()
}
else
{
if (Level->maptime < TimeToStartDecay || bglobal.freeze)
if (Level->maptime < TimeToStartDecay || Level->freeze)
{
return;
}

View file

@ -2873,7 +2873,6 @@ DEFINE_GLOBAL(multiplayer)
DEFINE_GLOBAL(gameaction)
DEFINE_GLOBAL(gamestate)
DEFINE_GLOBAL(skyflatnum)
DEFINE_GLOBAL_NAMED(bglobal.freeze, globalfreeze)
DEFINE_GLOBAL(gametic)
DEFINE_GLOBAL(demoplayback)
DEFINE_GLOBAL(automapactive);

View file

@ -218,6 +218,10 @@ struct FLevelLocals : public FLevelData
int airsupply;
int DefaultEnvironment; // Default sound environment.
uint8_t freeze; //Game in freeze mode.
uint8_t changefreeze; //Game wants to change freeze mode.
TArray<DVector2> Scrolls; // NULL if no DScrollers in this level
int8_t WallVertLight; // Light diffs for vert/horiz walls

View file

@ -1198,7 +1198,7 @@ void GLSprite::ProcessParticle (HWDrawInfo *di, particle_t *particle, sector_t *
const auto &vp = di->Viewpoint;
double timefrac = vp.TicFrac;
if (paused || bglobal.freeze || (di->Level->flags2 & LEVEL2_FROZEN))
if (paused || Level->freeze || (di->Level->flags2 & LEVEL2_FROZEN))
timefrac = 0.;
float xvf = (particle->Vel.X) * timefrac;
float yvf = (particle->Vel.Y) * timefrac;

View file

@ -514,8 +514,10 @@ void cht_DoCheat (player_t *player, int cheat)
break;
case CHT_FREEZE:
bglobal.changefreeze ^= 1;
if (bglobal.freeze ^ bglobal.changefreeze)
{
auto Level = player->mo->Level;
Level->changefreeze ^= 1;
if (Level->freeze ^ Level->changefreeze)
{
msg = GStrings("TXT_FREEZEON");
}
@ -525,6 +527,7 @@ void cht_DoCheat (player_t *player, int cheat)
}
break;
}
}
if (!*msg) // [SO] Don't print blank lines!
return;

View file

@ -243,7 +243,7 @@ void P_ThinkParticles ()
{
particle = &Particles[i];
i = particle->tnext;
if (!particle->notimefreeze && ((bglobal.freeze) || (level.flags2 & LEVEL2_FROZEN)))
if (!particle->notimefreeze && ((level.freeze) || (level.flags2 & LEVEL2_FROZEN)))
{
prev = particle;
continue;

View file

@ -3522,7 +3522,7 @@ void AActor::Tick ()
if (!(flags5 & MF5_NOTIMEFREEZE))
{
//Added by MC: Freeze mode.
if (bglobal.freeze || Level->flags2 & LEVEL2_FROZEN)
if (Level->freeze || Level->flags2 & LEVEL2_FROZEN)
{
// Boss cubes shouldn't be accelerated by timefreeze
if (flags6 & MF6_BOSSCUBE)
@ -3577,7 +3577,7 @@ void AActor::Tick ()
special2++;
}
//Added by MC: Freeze mode.
if (bglobal.freeze && !(player && player->Bot == NULL))
if (Level->freeze && !(player && player->Bot == NULL))
{
return;
}

View file

@ -984,7 +984,9 @@ void G_SerializeLevel(FSerializer &arc, FLevelLocals *Level, bool hubload)
("spotstate", Level->SpotState)
("fragglethinker", Level->FraggleScriptThinker)
("acsthinker", Level->ACSThinker)
("impactdecalcount", Level->ImpactDecalCount);
("impactdecalcount", Level->ImpactDecalCount)
("freeze", Level->freeze)
("changefreeze", Level->changefreeze
// Hub transitions must keep the current total time
if (!hubload)

View file

@ -109,10 +109,10 @@ void FLevelLocals::Tick()
// [RH] Frozen mode is only changed every 4 tics, to make it work with A_Tracer().
if ((maptime & 3) == 0)
{
if (bglobal.changefreeze)
if (changefreeze)
{
bglobal.freeze ^= 1;
bglobal.changefreeze = 0;
freeze ^= 1;
changefreeze = 0;
}
}
@ -136,7 +136,7 @@ void FLevelLocals::Tick()
for (int i = 0; i<MAXPLAYERS; i++)
if (playeringame[i] &&
/*Added by MC: Freeze mode.*/!(bglobal.freeze && players[i].Bot != NULL))
/*Added by MC: Freeze mode.*/!(freeze && players[i].Bot != NULL))
P_PlayerThink (&players[i]);
// [ZZ] call the WorldTick hook
@ -151,7 +151,7 @@ void FLevelLocals::Tick()
DThinker::RunThinkers ();
//if added by MC: Freeze mode.
if (!bglobal.freeze && !(flags2 & LEVEL2_FROZEN))
if (!freeze && !(flags2 & LEVEL2_FROZEN))
{
P_UpdateSpecials (&level);
P_RunEffects (); // [RH] Run particle effects

View file

@ -35,7 +35,7 @@ EXTERN_CVAR(Int, gl_particles_style)
void RenderPolyParticle::Render(PolyRenderThread *thread, particle_t *particle, subsector_t *sub, uint32_t stencilValue)
{
double timefrac = r_viewpoint.TicFrac;
if (paused || bglobal.freeze || (PolyRenderer::Instance()->Level->flags2 & LEVEL2_FROZEN))
if (paused || PolyRenderer::Instance()->Level->freeze || (PolyRenderer::Instance()->Level->flags2 & LEVEL2_FROZEN))
timefrac = 0.;
DVector3 pos = particle->Pos + (particle->Vel * timefrac);
double psize = particle->size / 8.0;

View file

@ -2748,6 +2748,8 @@ DEFINE_FIELD(FLevelLocals, outsidefogdensity)
DEFINE_FIELD(FLevelLocals, skyfog)
DEFINE_FIELD(FLevelLocals, pixelstretch)
DEFINE_FIELD(FLevelLocals, deathsequence)
DEFINE_FIELD(FLevelLocals, freeze)
DEFINE_FIELD_BIT(FLevelLocals, flags, noinventorybar, LEVEL_NOINVENTORYBAR)
DEFINE_FIELD_BIT(FLevelLocals, flags, monsterstelefrag, LEVEL_MONSTERSTELEFRAG)
DEFINE_FIELD_BIT(FLevelLocals, flags, actownspecial, LEVEL_ACTOWNSPECIAL)

View file

@ -79,7 +79,7 @@ namespace swrenderer
sector_t* heightsec = NULL;
double timefrac = r_viewpoint.TicFrac;
if (paused || bglobal.freeze || (sector->Level->flags2 & LEVEL2_FROZEN))
if (paused || sector->Level->freeze || (sector->Level->flags2 & LEVEL2_FROZEN))
timefrac = 0.;
double ippx = particle->Pos.X + particle->Vel.X * timefrac;

View file

@ -20,7 +20,6 @@ struct _ native // These are the global variables, the struct is only here to av
native play uint gameaction;
native readonly int gamestate;
native readonly TextureID skyflatnum;
native readonly uint8 globalfreeze;
native readonly int consoleplayer;
native readonly Font smallfont;
native readonly Font smallfont2;
@ -690,6 +689,7 @@ struct LevelLocals native
native readonly int skyfog;
native readonly float pixelstretch;
native name deathsequence;
native readonly uint8 globalfreeze;
// level_info_t *info cannot be done yet.
native String GetUDMFString(int type, int index, Name key);

View file

@ -53,7 +53,7 @@ class FastProjectile : Actor
if (!bNoTimeFreeze)
{
//Added by MC: Freeze mode.
if (globalfreeze || Level.Frozen)
if (Level.freeze || Level.Frozen)
{
return;
}