mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-02-17 01:31:25 +00:00
- renamed the level variables.
currentUILevel is now primaryLevel. For ZScript, currentVMLevel was added. This is also exported as 'level' and will change as needed. This also means that no breaking deprecations will be needed in the future, because in order to sandbox a level only 4 variables need to be handled: level, players, playeringame and consoleplayer. The remaining global variables are not relevant for the level state. The static 'level' has been mostly removed from the code except some places that still need work.
This commit is contained in:
parent
6c006a5fbd
commit
45dc9a7b47
44 changed files with 266 additions and 264 deletions
|
@ -130,8 +130,8 @@ CVAR(Int, am_showsubsector, -1, 0);
|
||||||
|
|
||||||
CUSTOM_CVAR(Int, am_showalllines, -1, CVAR_NOINITCALL) // This is a cheat so don't save it.
|
CUSTOM_CVAR(Int, am_showalllines, -1, CVAR_NOINITCALL) // This is a cheat so don't save it.
|
||||||
{
|
{
|
||||||
if (currentUILevel && currentUILevel->automap)
|
if (primaryLevel && primaryLevel->automap)
|
||||||
currentUILevel->automap->UpdateShowAllLines();
|
primaryLevel->automap->UpdateShowAllLines();
|
||||||
}
|
}
|
||||||
|
|
||||||
EXTERN_CVAR(Bool, sv_cheats)
|
EXTERN_CVAR(Bool, sv_cheats)
|
||||||
|
@ -171,9 +171,9 @@ CUSTOM_CVAR(Int, am_emptyspacemargin, 0, CVAR_ARCHIVE)
|
||||||
self = 90;
|
self = 90;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nullptr != StatusBar && currentUILevel && currentUILevel->automap)
|
if (nullptr != StatusBar && primaryLevel && primaryLevel->automap)
|
||||||
{
|
{
|
||||||
currentUILevel->automap->NewResolution();
|
primaryLevel->automap->NewResolution();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,8 +191,8 @@ CVAR(Float, am_zoomdir, 0, CVAR_ARCHIVE)
|
||||||
CCMD(am_togglefollow)
|
CCMD(am_togglefollow)
|
||||||
{
|
{
|
||||||
am_followplayer = !am_followplayer;
|
am_followplayer = !am_followplayer;
|
||||||
if (currentUILevel && currentUILevel->automap)
|
if (primaryLevel && primaryLevel->automap)
|
||||||
currentUILevel->automap->ResetFollowLocation();
|
primaryLevel->automap->ResetFollowLocation();
|
||||||
Printf("%s\n", GStrings(am_followplayer ? "AMSTR_FOLLOWON" : "AMSTR_FOLLOWOFF"));
|
Printf("%s\n", GStrings(am_followplayer ? "AMSTR_FOLLOWON" : "AMSTR_FOLLOWOFF"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,9 +210,9 @@ CCMD(am_toggletexture)
|
||||||
|
|
||||||
CCMD(am_setmark)
|
CCMD(am_setmark)
|
||||||
{
|
{
|
||||||
if (currentUILevel && currentUILevel->automap)
|
if (primaryLevel && primaryLevel->automap)
|
||||||
{
|
{
|
||||||
int m = currentUILevel->automap->addMark();
|
int m = primaryLevel->automap->addMark();
|
||||||
if (m >= 0)
|
if (m >= 0)
|
||||||
{
|
{
|
||||||
Printf("%s %d\n", GStrings("AMSTR_MARKEDSPOT"), m);
|
Printf("%s %d\n", GStrings("AMSTR_MARKEDSPOT"), m);
|
||||||
|
@ -222,7 +222,7 @@ CCMD(am_setmark)
|
||||||
|
|
||||||
CCMD(am_clearmarks)
|
CCMD(am_clearmarks)
|
||||||
{
|
{
|
||||||
if (currentUILevel && currentUILevel->automap && currentUILevel->automap->clearMarks())
|
if (primaryLevel && primaryLevel->automap && primaryLevel->automap->clearMarks())
|
||||||
{
|
{
|
||||||
Printf("%s\n", GStrings("AMSTR_MARKSCLEARED"));
|
Printf("%s\n", GStrings("AMSTR_MARKSCLEARED"));
|
||||||
}
|
}
|
||||||
|
@ -230,8 +230,8 @@ CCMD(am_clearmarks)
|
||||||
|
|
||||||
CCMD(am_gobig)
|
CCMD(am_gobig)
|
||||||
{
|
{
|
||||||
if (currentUILevel && currentUILevel->automap)
|
if (primaryLevel && primaryLevel->automap)
|
||||||
currentUILevel->automap->GoBig();
|
primaryLevel->automap->GoBig();
|
||||||
}
|
}
|
||||||
|
|
||||||
CCMD(togglemap)
|
CCMD(togglemap)
|
||||||
|
@ -3300,7 +3300,7 @@ void AM_ToggleMap()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// ... or if there is no automap.
|
// ... or if there is no automap.
|
||||||
if (!currentUILevel || !currentUILevel->automap)
|
if (!primaryLevel || !primaryLevel->automap)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!automapactive)
|
if (!automapactive)
|
||||||
|
@ -3313,7 +3313,7 @@ void AM_ToggleMap()
|
||||||
Button_AM_ZoomIn.Reset();
|
Button_AM_ZoomIn.Reset();
|
||||||
Button_AM_ZoomOut.Reset();
|
Button_AM_ZoomOut.Reset();
|
||||||
|
|
||||||
currentUILevel->automap->startDisplay();
|
primaryLevel->automap->startDisplay();
|
||||||
automapactive = true;
|
automapactive = true;
|
||||||
viewactive = (am_overlay != 0.f);
|
viewactive = (am_overlay != 0.f);
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,9 +173,9 @@ CCMD (addbot)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argv.argc() > 1)
|
if (argv.argc() > 1)
|
||||||
currentUILevel->BotInfo.SpawnBot (argv[1]);
|
primaryLevel->BotInfo.SpawnBot (argv[1]);
|
||||||
else
|
else
|
||||||
currentUILevel->BotInfo.SpawnBot (nullptr);
|
primaryLevel->BotInfo.SpawnBot (nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FCajunMaster::ClearPlayer (int i, bool keepTeam)
|
void FCajunMaster::ClearPlayer (int i, bool keepTeam)
|
||||||
|
@ -232,7 +232,7 @@ CCMD (freeze)
|
||||||
|
|
||||||
CCMD (listbots)
|
CCMD (listbots)
|
||||||
{
|
{
|
||||||
botinfo_t *thebot = currentUILevel->BotInfo.botinfo;
|
botinfo_t *thebot = primaryLevel->BotInfo.botinfo;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
while (thebot)
|
while (thebot)
|
||||||
|
|
|
@ -182,9 +182,9 @@ static FRandom pr_bbannounce ("BBAnnounce");
|
||||||
void DoVoiceAnnounce (const char *sound)
|
void DoVoiceAnnounce (const char *sound)
|
||||||
{
|
{
|
||||||
// Don't play announcements too close together
|
// Don't play announcements too close together
|
||||||
if (LastAnnounceTime == 0 || LastAnnounceTime <= currentUILevel->time-5)
|
if (LastAnnounceTime == 0 || LastAnnounceTime <= primaryLevel->time-5)
|
||||||
{
|
{
|
||||||
LastAnnounceTime = currentUILevel->time;
|
LastAnnounceTime = primaryLevel->time;
|
||||||
S_Sound (CHAN_VOICE, sound, 1, ATTN_NONE);
|
S_Sound (CHAN_VOICE, sound, 1, ATTN_NONE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -366,7 +366,7 @@ CCMD (changemap)
|
||||||
if (argv.argc() > 1)
|
if (argv.argc() > 1)
|
||||||
{
|
{
|
||||||
const char *mapname = argv[1];
|
const char *mapname = argv[1];
|
||||||
if (!strcmp(mapname, "*")) mapname = currentUILevel->MapName.GetChars();
|
if (!strcmp(mapname, "*")) mapname = primaryLevel->MapName.GetChars();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -946,7 +946,7 @@ static void PrintFilteredActorList(const ActorTypeChecker IsActorType, const cha
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// This only works on the primary level.
|
// This only works on the primary level.
|
||||||
auto it = currentUILevel->GetThinkerIterator<AActor>();
|
auto it = primaryLevel->GetThinkerIterator<AActor>();
|
||||||
|
|
||||||
while ( (mo = it.Next()) )
|
while ( (mo = it.Next()) )
|
||||||
{
|
{
|
||||||
|
@ -1063,14 +1063,14 @@ CCMD(changesky)
|
||||||
FTextureID newsky = TexMan.GetTextureID(sky1name, ETextureType::Wall, FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_ReturnFirst);
|
FTextureID newsky = TexMan.GetTextureID(sky1name, ETextureType::Wall, FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_ReturnFirst);
|
||||||
if (newsky.Exists())
|
if (newsky.Exists())
|
||||||
{
|
{
|
||||||
currentUILevel->skytexture1 = newsky;
|
primaryLevel->skytexture1 = newsky;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Printf("changesky: Texture '%s' not found\n", sky1name);
|
Printf("changesky: Texture '%s' not found\n", sky1name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
InitSkyMap (currentUILevel);
|
InitSkyMap (primaryLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -1101,9 +1101,9 @@ CCMD(nextmap)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentUILevel->NextMap.Len() > 0 && currentUILevel->NextMap.Compare("enDSeQ", 6))
|
if (primaryLevel->NextMap.Len() > 0 && primaryLevel->NextMap.Compare("enDSeQ", 6))
|
||||||
{
|
{
|
||||||
G_DeferedInitNew(currentUILevel->NextMap);
|
G_DeferedInitNew(primaryLevel->NextMap);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1125,9 +1125,9 @@ CCMD(nextsecret)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentUILevel->NextSecretMap.Len() > 0 && currentUILevel->NextSecretMap.Compare("enDSeQ", 6))
|
if (primaryLevel->NextSecretMap.Len() > 0 && primaryLevel->NextSecretMap.Compare("enDSeQ", 6))
|
||||||
{
|
{
|
||||||
G_DeferedInitNew(currentUILevel->NextSecretMap);
|
G_DeferedInitNew(primaryLevel->NextSecretMap);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1172,10 +1172,10 @@ static void PrintSecretString(const char *string, bool thislevel)
|
||||||
{
|
{
|
||||||
auto secnum = (unsigned)strtoull(string+2, (char**)&string, 10);
|
auto secnum = (unsigned)strtoull(string+2, (char**)&string, 10);
|
||||||
if (*string == ';') string++;
|
if (*string == ';') string++;
|
||||||
if (thislevel && secnum < currentUILevel->sectors.Size())
|
if (thislevel && secnum < primaryLevel->sectors.Size())
|
||||||
{
|
{
|
||||||
if (currentUILevel->sectors[secnum].isSecret()) colstr = TEXTCOLOR_RED;
|
if (primaryLevel->sectors[secnum].isSecret()) colstr = TEXTCOLOR_RED;
|
||||||
else if (currentUILevel->sectors[secnum].wasSecret()) colstr = TEXTCOLOR_GREEN;
|
else if (primaryLevel->sectors[secnum].wasSecret()) colstr = TEXTCOLOR_GREEN;
|
||||||
else colstr = TEXTCOLOR_ORANGE;
|
else colstr = TEXTCOLOR_ORANGE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1183,7 +1183,7 @@ static void PrintSecretString(const char *string, bool thislevel)
|
||||||
{
|
{
|
||||||
long tid = (long)strtoll(string+2, (char**)&string, 10);
|
long tid = (long)strtoll(string+2, (char**)&string, 10);
|
||||||
if (*string == ';') string++;
|
if (*string == ';') string++;
|
||||||
auto it = currentUILevel->GetActorIterator(tid);
|
auto it = primaryLevel->GetActorIterator(tid);
|
||||||
AActor *actor;
|
AActor *actor;
|
||||||
bool foundone = false;
|
bool foundone = false;
|
||||||
if (thislevel)
|
if (thislevel)
|
||||||
|
@ -1216,8 +1216,8 @@ static void PrintSecretString(const char *string, bool thislevel)
|
||||||
|
|
||||||
CCMD(secret)
|
CCMD(secret)
|
||||||
{
|
{
|
||||||
const char *mapname = argv.argc() < 2? currentUILevel->MapName.GetChars() : argv[1];
|
const char *mapname = argv.argc() < 2? primaryLevel->MapName.GetChars() : argv[1];
|
||||||
bool thislevel = !stricmp(mapname, currentUILevel->MapName);
|
bool thislevel = !stricmp(mapname, primaryLevel->MapName);
|
||||||
bool foundsome = false;
|
bool foundsome = false;
|
||||||
|
|
||||||
int lumpno=Wads.CheckNumForName("SECRETS");
|
int lumpno=Wads.CheckNumForName("SECRETS");
|
||||||
|
|
|
@ -1243,7 +1243,7 @@ void C_FullConsole ()
|
||||||
if (gamestate != GS_STARTUP)
|
if (gamestate != GS_STARTUP)
|
||||||
{
|
{
|
||||||
gamestate = GS_FULLCONSOLE;
|
gamestate = GS_FULLCONSOLE;
|
||||||
currentUILevel->Music = "";
|
primaryLevel->Music = "";
|
||||||
S_Start ();
|
S_Start ();
|
||||||
P_FreeLevelData ();
|
P_FreeLevelData ();
|
||||||
V_SetBlend (0,0,0,0);
|
V_SetBlend (0,0,0,0);
|
||||||
|
|
|
@ -172,7 +172,7 @@ CUSTOM_CVAR (Int, fraglimit, 0, CVAR_SERVERINFO)
|
||||||
if (playeringame[i] && self <= D_GetFragCount(&players[i]))
|
if (playeringame[i] && self <= D_GetFragCount(&players[i]))
|
||||||
{
|
{
|
||||||
Printf ("%s\n", GStrings("TXT_FRAGLIMIT"));
|
Printf ("%s\n", GStrings("TXT_FRAGLIMIT"));
|
||||||
level.ExitLevel (0, false);
|
primaryLevel->ExitLevel (0, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -789,7 +789,7 @@ void D_Display ()
|
||||||
screen->DrawBlend(viewsec);
|
screen->DrawBlend(viewsec);
|
||||||
if (automapactive)
|
if (automapactive)
|
||||||
{
|
{
|
||||||
currentUILevel->automap->Drawer (hud_althud? viewheight : StatusBar->GetTopOfStatusbar());
|
primaryLevel->automap->Drawer (hud_althud? viewheight : StatusBar->GetTopOfStatusbar());
|
||||||
}
|
}
|
||||||
|
|
||||||
// for timing the statusbar code.
|
// for timing the statusbar code.
|
||||||
|
@ -959,7 +959,7 @@ void D_Display ()
|
||||||
void D_ErrorCleanup ()
|
void D_ErrorCleanup ()
|
||||||
{
|
{
|
||||||
savegamerestore = false;
|
savegamerestore = false;
|
||||||
level.BotInfo.RemoveAllBots (&level, true);
|
primaryLevel->BotInfo.RemoveAllBots (primaryLevel, true);
|
||||||
D_QuitNetGame ();
|
D_QuitNetGame ();
|
||||||
if (demorecording || demoplayback)
|
if (demorecording || demoplayback)
|
||||||
G_CheckDemoStatus ();
|
G_CheckDemoStatus ();
|
||||||
|
@ -2555,14 +2555,14 @@ void D_DoomMain (void)
|
||||||
PClassActor::StaticSetActorNums();
|
PClassActor::StaticSetActorNums();
|
||||||
|
|
||||||
//Added by MC:
|
//Added by MC:
|
||||||
level.BotInfo.getspawned.Clear();
|
primaryLevel->BotInfo.getspawned.Clear();
|
||||||
argcount = Args->CheckParmList("-bots", &args);
|
argcount = Args->CheckParmList("-bots", &args);
|
||||||
for (p = 0; p < argcount; ++p)
|
for (p = 0; p < argcount; ++p)
|
||||||
{
|
{
|
||||||
level.BotInfo.getspawned.Push(args[p]);
|
primaryLevel->BotInfo.getspawned.Push(args[p]);
|
||||||
}
|
}
|
||||||
level.BotInfo.spawn_tries = 0;
|
primaryLevel->BotInfo.spawn_tries = 0;
|
||||||
level.BotInfo.wanted_botnum = level.BotInfo.getspawned.Size();
|
primaryLevel->BotInfo.wanted_botnum = primaryLevel->BotInfo.getspawned.Size();
|
||||||
|
|
||||||
if (!batchrun) Printf ("P_Init: Init Playloop state.\n");
|
if (!batchrun) Printf ("P_Init: Init Playloop state.\n");
|
||||||
StartScreen->LoadingStatus ("Init game engine", 0x3f);
|
StartScreen->LoadingStatus ("Init game engine", 0x3f);
|
||||||
|
|
|
@ -2222,8 +2222,8 @@ void Net_DoCommand (int type, uint8_t **stream, int player)
|
||||||
s = ReadString (stream);
|
s = ReadString (stream);
|
||||||
// Using LEVEL_NOINTERMISSION tends to throw the game out of sync.
|
// Using LEVEL_NOINTERMISSION tends to throw the game out of sync.
|
||||||
// That was a long time ago. Maybe it works now?
|
// That was a long time ago. Maybe it works now?
|
||||||
level.flags |= LEVEL_CHANGEMAPCHEAT;
|
primaryLevel->flags |= LEVEL_CHANGEMAPCHEAT;
|
||||||
level.ChangeLevel(s, pos, 0);
|
primaryLevel->ChangeLevel(s, pos, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DEM_SUICIDE:
|
case DEM_SUICIDE:
|
||||||
|
@ -2231,11 +2231,11 @@ void Net_DoCommand (int type, uint8_t **stream, int player)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DEM_ADDBOT:
|
case DEM_ADDBOT:
|
||||||
level.BotInfo.TryAddBot (&level, stream, player);
|
primaryLevel->BotInfo.TryAddBot (primaryLevel, stream, player);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DEM_KILLBOTS:
|
case DEM_KILLBOTS:
|
||||||
level.BotInfo.RemoveAllBots (&level, true);
|
primaryLevel->BotInfo.RemoveAllBots (primaryLevel, true);
|
||||||
Printf ("Removed all bots\n");
|
Printf ("Removed all bots\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2330,14 +2330,14 @@ void Net_DoCommand (int type, uint8_t **stream, int player)
|
||||||
const AActor *def = GetDefaultByType (typeinfo);
|
const AActor *def = GetDefaultByType (typeinfo);
|
||||||
DVector3 spawnpos = source->Vec3Angle(def->radius * 2 + source->radius, source->Angles.Yaw, 8.);
|
DVector3 spawnpos = source->Vec3Angle(def->radius * 2 + source->radius, source->Angles.Yaw, 8.);
|
||||||
|
|
||||||
AActor *spawned = Spawn (&level, typeinfo, spawnpos, ALLOW_REPLACE);
|
AActor *spawned = Spawn (primaryLevel, typeinfo, spawnpos, ALLOW_REPLACE);
|
||||||
if (spawned != NULL)
|
if (spawned != NULL)
|
||||||
{
|
{
|
||||||
if (type == DEM_SUMMONFRIEND || type == DEM_SUMMONFRIEND2 || type == DEM_SUMMONMBF)
|
if (type == DEM_SUMMONFRIEND || type == DEM_SUMMONFRIEND2 || type == DEM_SUMMONMBF)
|
||||||
{
|
{
|
||||||
if (spawned->CountsAsKill())
|
if (spawned->CountsAsKill())
|
||||||
{
|
{
|
||||||
level.total_monsters--;
|
primaryLevel->total_monsters--;
|
||||||
}
|
}
|
||||||
spawned->FriendPlayer = player + 1;
|
spawned->FriendPlayer = player + 1;
|
||||||
spawned->flags |= MF_FRIENDLY;
|
spawned->flags |= MF_FRIENDLY;
|
||||||
|
@ -2507,7 +2507,7 @@ void Net_DoCommand (int type, uint8_t **stream, int player)
|
||||||
}
|
}
|
||||||
if (!CheckCheatmode(player == consoleplayer))
|
if (!CheckCheatmode(player == consoleplayer))
|
||||||
{
|
{
|
||||||
P_ExecuteSpecial(&level, snum, NULL, players[player].mo, false, arg[0], arg[1], arg[2], arg[3], arg[4]);
|
P_ExecuteSpecial(primaryLevel, snum, NULL, players[player].mo, false, arg[0], arg[1], arg[2], arg[3], arg[4]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -2560,11 +2560,11 @@ void Net_DoCommand (int type, uint8_t **stream, int player)
|
||||||
|
|
||||||
if (cls != NULL)
|
if (cls != NULL)
|
||||||
{
|
{
|
||||||
killcount = currentUILevel->Massacre(false, cls->TypeName);
|
killcount = primaryLevel->Massacre(false, cls->TypeName);
|
||||||
PClassActor *cls_rep = cls->GetReplacement();
|
PClassActor *cls_rep = cls->GetReplacement();
|
||||||
if (cls != cls_rep)
|
if (cls != cls_rep)
|
||||||
{
|
{
|
||||||
killcount += currentUILevel->Massacre(false, cls_rep->TypeName);
|
killcount += primaryLevel->Massacre(false, cls_rep->TypeName);
|
||||||
}
|
}
|
||||||
Printf ("Killed %d monsters of type %s.\n",killcount, s);
|
Printf ("Killed %d monsters of type %s.\n",killcount, s);
|
||||||
}
|
}
|
||||||
|
@ -2582,11 +2582,11 @@ void Net_DoCommand (int type, uint8_t **stream, int player)
|
||||||
PClassActor *cls = PClass::FindActor(s);
|
PClassActor *cls = PClass::FindActor(s);
|
||||||
if (cls != NULL && cls->IsDescendantOf(RUNTIME_CLASS(AActor)))
|
if (cls != NULL && cls->IsDescendantOf(RUNTIME_CLASS(AActor)))
|
||||||
{
|
{
|
||||||
removecount = RemoveClass(&level, cls);
|
removecount = RemoveClass(primaryLevel, cls);
|
||||||
const PClass *cls_rep = cls->GetReplacement();
|
const PClass *cls_rep = cls->GetReplacement();
|
||||||
if (cls != cls_rep)
|
if (cls != cls_rep)
|
||||||
{
|
{
|
||||||
removecount += RemoveClass(&level, cls_rep);
|
removecount += RemoveClass(primaryLevel, cls_rep);
|
||||||
}
|
}
|
||||||
Printf("Removed %d actors of type %s.\n", removecount, s);
|
Printf("Removed %d actors of type %s.\n", removecount, s);
|
||||||
}
|
}
|
||||||
|
@ -2660,7 +2660,7 @@ void Net_DoCommand (int type, uint8_t **stream, int player)
|
||||||
|
|
||||||
case DEM_FINISHGAME:
|
case DEM_FINISHGAME:
|
||||||
// Simulate an end-of-game action
|
// Simulate an end-of-game action
|
||||||
level.ChangeLevel(NULL, 0, 0);
|
primaryLevel->ChangeLevel(NULL, 0, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DEM_NETEVENT:
|
case DEM_NETEVENT:
|
||||||
|
@ -2698,7 +2698,7 @@ static void RunScript(uint8_t **stream, AActor *pawn, int snum, int argn, int al
|
||||||
arg[i] = argval;
|
arg[i] = argval;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
P_StartScript(pawn->Level, pawn, NULL, snum, level.MapName, arg, MIN<int>(countof(arg), argn), ACS_NET | always);
|
P_StartScript(pawn->Level, pawn, NULL, snum, primaryLevel->MapName, arg, MIN<int>(countof(arg), argn), ACS_NET | always);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Net_SkipCommand (int type, uint8_t **stream)
|
void Net_SkipCommand (int type, uint8_t **stream)
|
||||||
|
|
|
@ -259,12 +259,12 @@ CCMD(dump3df)
|
||||||
// Print 3D floor info for a single sector.
|
// Print 3D floor info for a single sector.
|
||||||
// This only checks the primary level.
|
// This only checks the primary level.
|
||||||
int sec = (int)strtoll(argv[1], NULL, 10);
|
int sec = (int)strtoll(argv[1], NULL, 10);
|
||||||
if ((unsigned)sec >= currentUILevel->sectors.Size())
|
if ((unsigned)sec >= primaryLevel->sectors.Size())
|
||||||
{
|
{
|
||||||
Printf("Sector %d does not exist.\n", sec);
|
Printf("Sector %d does not exist.\n", sec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sector_t *sector = ¤tUILevel->sectors[sec];
|
sector_t *sector = &primaryLevel->sectors[sec];
|
||||||
TArray<F3DFloor*> & ffloors = sector->e->XFloor.ffloors;
|
TArray<F3DFloor*> & ffloors = sector->e->XFloor.ffloors;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < ffloors.Size(); i++)
|
for (unsigned int i = 0; i < ffloors.Size(); i++)
|
||||||
|
|
|
@ -773,7 +773,7 @@ void G_AddViewPitch (int look, bool mouse)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
look = LookAdjust(look);
|
look = LookAdjust(look);
|
||||||
if (!currentUILevel->IsFreelookAllowed())
|
if (!primaryLevel->IsFreelookAllowed())
|
||||||
{
|
{
|
||||||
LocalViewPitch = 0;
|
LocalViewPitch = 0;
|
||||||
}
|
}
|
||||||
|
@ -959,7 +959,7 @@ bool G_Responder (event_t *ev)
|
||||||
{
|
{
|
||||||
if (ST_Responder (ev))
|
if (ST_Responder (ev))
|
||||||
return true; // status window ate it
|
return true; // status window ate it
|
||||||
if (!viewactive && currentUILevel->automap->Responder (ev, false))
|
if (!viewactive && primaryLevel->automap->Responder (ev, false))
|
||||||
return true; // automap ate it
|
return true; // automap ate it
|
||||||
}
|
}
|
||||||
else if (gamestate == GS_FINALE)
|
else if (gamestate == GS_FINALE)
|
||||||
|
@ -990,7 +990,7 @@ bool G_Responder (event_t *ev)
|
||||||
// the events *last* so that any bound keys get precedence.
|
// the events *last* so that any bound keys get precedence.
|
||||||
|
|
||||||
if (gamestate == GS_LEVEL && viewactive)
|
if (gamestate == GS_LEVEL && viewactive)
|
||||||
return currentUILevel->automap->Responder (ev, true);
|
return primaryLevel->automap->Responder (ev, true);
|
||||||
|
|
||||||
return (ev->type == EV_KeyDown ||
|
return (ev->type == EV_KeyDown ||
|
||||||
ev->type == EV_Mouse);
|
ev->type == EV_Mouse);
|
||||||
|
@ -1018,7 +1018,7 @@ void G_Ticker ()
|
||||||
}
|
}
|
||||||
if (players[i].playerstate == PST_REBORN || players[i].playerstate == PST_ENTER)
|
if (players[i].playerstate == PST_REBORN || players[i].playerstate == PST_ENTER)
|
||||||
{
|
{
|
||||||
level.DoReborn(i, false);
|
primaryLevel->DoReborn(i, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1114,7 +1114,7 @@ void G_Ticker ()
|
||||||
uint32_t rngsum = FRandom::StaticSumSeeds ();
|
uint32_t rngsum = FRandom::StaticSumSeeds ();
|
||||||
|
|
||||||
//Added by MC: For some of that bot stuff. The main bot function.
|
//Added by MC: For some of that bot stuff. The main bot function.
|
||||||
level.BotInfo.Main (&level);
|
primaryLevel->BotInfo.Main (primaryLevel);
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
{
|
{
|
||||||
|
@ -1181,7 +1181,7 @@ void G_Ticker ()
|
||||||
{
|
{
|
||||||
case GS_LEVEL:
|
case GS_LEVEL:
|
||||||
P_Ticker ();
|
P_Ticker ();
|
||||||
currentUILevel->automap->Ticker ();
|
primaryLevel->automap->Ticker ();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GS_TITLELEVEL:
|
case GS_TITLELEVEL:
|
||||||
|
@ -1897,7 +1897,7 @@ void G_DoLoadGame ()
|
||||||
// Read intermission data for hubs
|
// Read intermission data for hubs
|
||||||
G_SerializeHub(arc);
|
G_SerializeHub(arc);
|
||||||
|
|
||||||
level.BotInfo.RemoveAllBots(&level, true);
|
primaryLevel->BotInfo.RemoveAllBots(primaryLevel, true);
|
||||||
|
|
||||||
FString cvar;
|
FString cvar;
|
||||||
arc("importantcvars", cvar);
|
arc("importantcvars", cvar);
|
||||||
|
@ -2039,14 +2039,14 @@ void G_DoAutoSave ()
|
||||||
file = G_BuildSaveName ("auto", nextautosave);
|
file = G_BuildSaveName ("auto", nextautosave);
|
||||||
|
|
||||||
// The hint flag is only relevant on the primary level.
|
// The hint flag is only relevant on the primary level.
|
||||||
if (!(currentUILevel->flags2 & LEVEL2_NOAUTOSAVEHINT))
|
if (!(primaryLevel->flags2 & LEVEL2_NOAUTOSAVEHINT))
|
||||||
{
|
{
|
||||||
nextautosave = (nextautosave + 1) % count;
|
nextautosave = (nextautosave + 1) % count;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// This flag can only be used once per level
|
// This flag can only be used once per level
|
||||||
currentUILevel->flags2 &= ~LEVEL2_NOAUTOSAVEHINT;
|
primaryLevel->flags2 &= ~LEVEL2_NOAUTOSAVEHINT;
|
||||||
}
|
}
|
||||||
|
|
||||||
readableTime = myasctime ();
|
readableTime = myasctime ();
|
||||||
|
@ -2064,9 +2064,9 @@ static void PutSaveWads (FSerializer &arc)
|
||||||
arc.AddString("Game WAD", name);
|
arc.AddString("Game WAD", name);
|
||||||
|
|
||||||
// Name of wad the map resides in
|
// Name of wad the map resides in
|
||||||
if (Wads.GetLumpFile (level.lumpnum) > Wads.GetIwadNum())
|
if (Wads.GetLumpFile (primaryLevel->lumpnum) > Wads.GetIwadNum())
|
||||||
{
|
{
|
||||||
name = Wads.GetWadName (Wads.GetLumpFile (level.lumpnum));
|
name = Wads.GetWadName (Wads.GetLumpFile (primaryLevel->lumpnum));
|
||||||
arc.AddString("Map WAD", name);
|
arc.AddString("Map WAD", name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2085,12 +2085,11 @@ static void PutSaveComment (FSerializer &arc)
|
||||||
arc.AddString("Creation Time", comment);
|
arc.AddString("Creation Time", comment);
|
||||||
|
|
||||||
// Get level name
|
// Get level name
|
||||||
//strcpy (comment, level.level_name);
|
comment.Format("%s - %s\n", primaryLevel->MapName.GetChars(), primaryLevel->LevelName.GetChars());
|
||||||
comment.Format("%s - %s\n", level.MapName.GetChars(), level.LevelName.GetChars());
|
|
||||||
|
|
||||||
// Append elapsed time
|
// Append elapsed time
|
||||||
const char *const time = GStrings("SAVECOMMENT_TIME");
|
const char *const time = GStrings("SAVECOMMENT_TIME");
|
||||||
levelTime = level.time / TICRATE;
|
levelTime = primaryLevel->time / TICRATE;
|
||||||
comment.AppendFormat("%s: %02d:%02d:%02d", time, levelTime/3600, (levelTime%3600)/60, levelTime%60);
|
comment.AppendFormat("%s: %02d:%02d:%02d", time, levelTime/3600, (levelTime%3600)/60, levelTime%60);
|
||||||
|
|
||||||
// Write out the comment
|
// Write out the comment
|
||||||
|
@ -2121,7 +2120,7 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio
|
||||||
|
|
||||||
// Do not even try, if we're not in a level. (Can happen after
|
// Do not even try, if we're not in a level. (Can happen after
|
||||||
// a demo finishes playback.)
|
// a demo finishes playback.)
|
||||||
if (level.lines.Size() == 0 || level.sectors.Size() == 0 || gamestate != GS_LEVEL)
|
if (primaryLevel->lines.Size() == 0 || primaryLevel->sectors.Size() == 0 || gamestate != GS_LEVEL)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2172,7 +2171,7 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio
|
||||||
// put some basic info into the PNG so that this isn't lost when the image gets extracted.
|
// put some basic info into the PNG so that this isn't lost when the image gets extracted.
|
||||||
M_AppendPNGText(&savepic, "Software", buf);
|
M_AppendPNGText(&savepic, "Software", buf);
|
||||||
M_AppendPNGText(&savepic, "Title", description);
|
M_AppendPNGText(&savepic, "Title", description);
|
||||||
M_AppendPNGText(&savepic, "Current Map", level.MapName);
|
M_AppendPNGText(&savepic, "Current Map", primaryLevel->MapName);
|
||||||
M_FinishPNG(&savepic);
|
M_FinishPNG(&savepic);
|
||||||
|
|
||||||
int ver = SAVEVER;
|
int ver = SAVEVER;
|
||||||
|
@ -2180,7 +2179,7 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio
|
||||||
.AddString("Engine", GAMESIG)
|
.AddString("Engine", GAMESIG)
|
||||||
("Save Version", ver)
|
("Save Version", ver)
|
||||||
.AddString("Title", description)
|
.AddString("Title", description)
|
||||||
.AddString("Current Map", level.MapName);
|
.AddString("Current Map", primaryLevel->MapName);
|
||||||
|
|
||||||
|
|
||||||
PutSaveWads (savegameinfo);
|
PutSaveWads (savegameinfo);
|
||||||
|
@ -2390,7 +2389,7 @@ void G_BeginRecording (const char *startmap)
|
||||||
|
|
||||||
if (startmap == NULL)
|
if (startmap == NULL)
|
||||||
{
|
{
|
||||||
startmap = level.MapName;
|
startmap = primaryLevel->MapName;
|
||||||
}
|
}
|
||||||
demo_p = demobuffer;
|
demo_p = demobuffer;
|
||||||
|
|
||||||
|
@ -2715,7 +2714,7 @@ void G_DoPlayDemo (void)
|
||||||
{
|
{
|
||||||
G_InitNew (mapname, false);
|
G_InitNew (mapname, false);
|
||||||
}
|
}
|
||||||
else if (level.sectors.Size() == 0)
|
else if (primaryLevel->sectors.Size() == 0)
|
||||||
{
|
{
|
||||||
I_Error("Cannot play demo without its savegame\n");
|
I_Error("Cannot play demo without its savegame\n");
|
||||||
}
|
}
|
||||||
|
@ -2886,6 +2885,7 @@ DEFINE_GLOBAL_NAMED(Skins, PlayerSkins)
|
||||||
DEFINE_GLOBAL(consoleplayer)
|
DEFINE_GLOBAL(consoleplayer)
|
||||||
DEFINE_GLOBAL_NAMED(PClass::AllClasses, AllClasses)
|
DEFINE_GLOBAL_NAMED(PClass::AllClasses, AllClasses)
|
||||||
DEFINE_GLOBAL_NAMED(PClassActor::AllActorClasses, AllActorClasses)
|
DEFINE_GLOBAL_NAMED(PClassActor::AllActorClasses, AllActorClasses)
|
||||||
|
DEFINE_GLOBAL_NAMED(primaryLevel, Level)
|
||||||
DEFINE_GLOBAL(validcount)
|
DEFINE_GLOBAL(validcount)
|
||||||
DEFINE_GLOBAL(multiplayer)
|
DEFINE_GLOBAL(multiplayer)
|
||||||
DEFINE_GLOBAL(gameaction)
|
DEFINE_GLOBAL(gameaction)
|
||||||
|
|
|
@ -167,7 +167,7 @@ extern bool sendpause, sendsave, sendturn180, SendLand;
|
||||||
void *statcopy; // for statistics driver
|
void *statcopy; // for statistics driver
|
||||||
|
|
||||||
FLevelLocals level; // info about current level
|
FLevelLocals level; // info about current level
|
||||||
FLevelLocals *currentUILevel = &level; // level for which to display the user interface.
|
FLevelLocals *primaryLevel = &level; // level for which to display the user interface.
|
||||||
FLevelLocals *currentVMLevel = &level; // level which currently ticks. Used as global input to the VM and some functions called by it.
|
FLevelLocals *currentVMLevel = &level; // level which currently ticks. Used as global input to the VM and some functions called by it.
|
||||||
|
|
||||||
|
|
||||||
|
@ -216,7 +216,7 @@ CCMD (map)
|
||||||
if (argv.argc() > 1)
|
if (argv.argc() > 1)
|
||||||
{
|
{
|
||||||
const char *mapname = argv[1];
|
const char *mapname = argv[1];
|
||||||
if (!strcmp(mapname, "*")) mapname = currentUILevel->MapName.GetChars();
|
if (!strcmp(mapname, "*")) mapname = primaryLevel->MapName.GetChars();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -266,7 +266,7 @@ UNSAFE_CCMD(recordmap)
|
||||||
if (argv.argc() > 2)
|
if (argv.argc() > 2)
|
||||||
{
|
{
|
||||||
const char *mapname = argv[2];
|
const char *mapname = argv[2];
|
||||||
if (!strcmp(mapname, "*")) mapname = currentUILevel->MapName.GetChars();
|
if (!strcmp(mapname, "*")) mapname = primaryLevel->MapName.GetChars();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -357,7 +357,7 @@ void G_NewInit ()
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// Destory all old player refrences that may still exist
|
// Destory all old player refrences that may still exist
|
||||||
TThinkerIterator<AActor> it(&level, NAME_PlayerPawn, STAT_TRAVELLING);
|
TThinkerIterator<AActor> it(primaryLevel, NAME_PlayerPawn, STAT_TRAVELLING);
|
||||||
AActor *pawn, *next;
|
AActor *pawn, *next;
|
||||||
|
|
||||||
next = it.Next();
|
next = it.Next();
|
||||||
|
@ -453,7 +453,7 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// did we have any level before?
|
// did we have any level before?
|
||||||
if (level.info != nullptr)
|
if (primaryLevel->info != nullptr)
|
||||||
E_WorldUnloadedUnsafe();
|
E_WorldUnloadedUnsafe();
|
||||||
|
|
||||||
if (!savegamerestore)
|
if (!savegamerestore)
|
||||||
|
@ -470,7 +470,10 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
||||||
UnlatchCVars ();
|
UnlatchCVars ();
|
||||||
G_VerifySkill();
|
G_VerifySkill();
|
||||||
UnlatchCVars ();
|
UnlatchCVars ();
|
||||||
level.Thinkers.DestroyThinkersInList(STAT_STATIC);
|
for (auto Level : AllLevels())
|
||||||
|
{
|
||||||
|
Level->Thinkers.DestroyThinkersInList(STAT_STATIC);
|
||||||
|
}
|
||||||
|
|
||||||
if (paused)
|
if (paused)
|
||||||
{
|
{
|
||||||
|
@ -510,10 +513,10 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
||||||
}
|
}
|
||||||
FRandom::StaticClearRandom ();
|
FRandom::StaticClearRandom ();
|
||||||
P_ClearACSVars(true);
|
P_ClearACSVars(true);
|
||||||
level.time = 0;
|
primaryLevel->time = 0;
|
||||||
level.maptime = 0;
|
primaryLevel->maptime = 0;
|
||||||
level.totaltime = 0;
|
primaryLevel->totaltime = 0;
|
||||||
level.spawnindex = 0;
|
primaryLevel->spawnindex = 0;
|
||||||
|
|
||||||
if (!multiplayer || !deathmatch)
|
if (!multiplayer || !deathmatch)
|
||||||
{
|
{
|
||||||
|
@ -536,7 +539,7 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
||||||
//Added by MC: Initialize bots.
|
//Added by MC: Initialize bots.
|
||||||
if (!deathmatch)
|
if (!deathmatch)
|
||||||
{
|
{
|
||||||
level.BotInfo.Init ();
|
primaryLevel->BotInfo.Init ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bTitleLevel)
|
if (bTitleLevel)
|
||||||
|
@ -772,7 +775,7 @@ void G_DoCompleted (void)
|
||||||
// Close the conversation menu if open.
|
// Close the conversation menu if open.
|
||||||
P_FreeStrifeConversations ();
|
P_FreeStrifeConversations ();
|
||||||
|
|
||||||
if (level.DoCompleted(nextlevel, wminfo))
|
if (primaryLevel->DoCompleted(nextlevel, wminfo))
|
||||||
{
|
{
|
||||||
gamestate = GS_INTERMISSION;
|
gamestate = GS_INTERMISSION;
|
||||||
viewactive = false;
|
viewactive = false;
|
||||||
|
@ -954,7 +957,7 @@ void G_DoLoadLevel(const FString &nextmapname, int position, bool autosave, bool
|
||||||
gamestate_t oldgs = gamestate;
|
gamestate_t oldgs = gamestate;
|
||||||
|
|
||||||
// Here the new level needs to be allocated.
|
// Here the new level needs to be allocated.
|
||||||
level.DoLoadLevel(nextmapname, position, autosave, newGame);
|
primaryLevel->DoLoadLevel(nextmapname, position, autosave, newGame);
|
||||||
|
|
||||||
// Reset the global state for the new level.
|
// Reset the global state for the new level.
|
||||||
if (wipegamestate == GS_LEVEL)
|
if (wipegamestate == GS_LEVEL)
|
||||||
|
@ -1274,7 +1277,7 @@ void FLevelLocals::WorldDone (void)
|
||||||
|
|
||||||
DEFINE_ACTION_FUNCTION(FLevelLocals, WorldDone)
|
DEFINE_ACTION_FUNCTION(FLevelLocals, WorldDone)
|
||||||
{
|
{
|
||||||
currentUILevel->WorldDone();
|
primaryLevel->WorldDone();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1290,9 +1293,9 @@ void G_DoWorldDone (void)
|
||||||
{
|
{
|
||||||
// Don't crash if no next map is given. Just repeat the current one.
|
// Don't crash if no next map is given. Just repeat the current one.
|
||||||
Printf ("No next map specified.\n");
|
Printf ("No next map specified.\n");
|
||||||
nextlevel = level.MapName;
|
nextlevel = primaryLevel->MapName;
|
||||||
}
|
}
|
||||||
level.StartTravel ();
|
primaryLevel->StartTravel ();
|
||||||
G_DoLoadLevel (nextlevel, startpos, true, false);
|
G_DoLoadLevel (nextlevel, startpos, true, false);
|
||||||
startpos = 0;
|
startpos = 0;
|
||||||
gameaction = ga_nothing;
|
gameaction = ga_nothing;
|
||||||
|
@ -2282,7 +2285,7 @@ CCMD(skyfog)
|
||||||
if (argv.argc()>1)
|
if (argv.argc()>1)
|
||||||
{
|
{
|
||||||
// Do this only on the primary level.
|
// Do this only on the primary level.
|
||||||
currentUILevel->skyfog = MAX(0, (int)strtoull(argv[1], NULL, 0));
|
primaryLevel->skyfog = MAX(0, (int)strtoull(argv[1], NULL, 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -672,7 +672,7 @@ public:
|
||||||
|
|
||||||
|
|
||||||
extern FLevelLocals level;
|
extern FLevelLocals level;
|
||||||
extern FLevelLocals *currentUILevel; // level for which to display the user interface. This will always be the one the current consoleplayer is in.
|
extern FLevelLocals *primaryLevel; // level for which to display the user interface. This will always be the one the current consoleplayer is in.
|
||||||
extern FLevelLocals *currentVMLevel;
|
extern FLevelLocals *currentVMLevel;
|
||||||
|
|
||||||
inline FSectorPortal *line_t::GetTransferredPortal()
|
inline FSectorPortal *line_t::GetTransferredPortal()
|
||||||
|
@ -774,5 +774,5 @@ inline bool line_t::hitSkyWall(AActor* mo) const
|
||||||
// It is meant for code that needs to iterate over all levels to make some global changes, e.g. configuation CCMDs.
|
// It is meant for code that needs to iterate over all levels to make some global changes, e.g. configuation CCMDs.
|
||||||
inline TArrayView<FLevelLocals *> AllLevels()
|
inline TArrayView<FLevelLocals *> AllLevels()
|
||||||
{
|
{
|
||||||
return TArrayView<FLevelLocals *>(¤tUILevel, 1);
|
return TArrayView<FLevelLocals *>(&primaryLevel, 1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1076,7 +1076,7 @@ public:
|
||||||
lastHud = hud;
|
lastHud = hud;
|
||||||
|
|
||||||
// Handle inventory bar drawing
|
// Handle inventory bar drawing
|
||||||
if(CPlayer->inventorytics > 0 && !(currentUILevel->flags & LEVEL_NOINVENTORYBAR) && (state == HUD_StatusBar || state == HUD_Fullscreen))
|
if(CPlayer->inventorytics > 0 && !(primaryLevel->flags & LEVEL_NOINVENTORYBAR) && (state == HUD_StatusBar || state == HUD_Fullscreen))
|
||||||
{
|
{
|
||||||
SBarInfoMainBlock *inventoryBar = state == HUD_StatusBar ? script->huds[STBAR_INVENTORY] : script->huds[STBAR_INVENTORYFULLSCREEN];
|
SBarInfoMainBlock *inventoryBar = state == HUD_StatusBar ? script->huds[STBAR_INVENTORY] : script->huds[STBAR_INVENTORYFULLSCREEN];
|
||||||
if(inventoryBar != lastInventoryBar)
|
if(inventoryBar != lastInventoryBar)
|
||||||
|
|
|
@ -850,26 +850,26 @@ class CommandDrawString : public SBarInfoCommand
|
||||||
switch(strValue)
|
switch(strValue)
|
||||||
{
|
{
|
||||||
case LEVELNAME:
|
case LEVELNAME:
|
||||||
if(currentUILevel->lumpnum != cache)
|
if(primaryLevel->lumpnum != cache)
|
||||||
{
|
{
|
||||||
cache = currentUILevel->lumpnum;
|
cache = primaryLevel->lumpnum;
|
||||||
str = currentUILevel->LevelName;
|
str = primaryLevel->LevelName;
|
||||||
RealignString();
|
RealignString();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LEVELLUMP:
|
case LEVELLUMP:
|
||||||
if(currentUILevel->lumpnum != cache)
|
if(primaryLevel->lumpnum != cache)
|
||||||
{
|
{
|
||||||
cache = currentUILevel->lumpnum;
|
cache = primaryLevel->lumpnum;
|
||||||
str = currentUILevel->MapName;
|
str = primaryLevel->MapName;
|
||||||
str.ToUpper();
|
str.ToUpper();
|
||||||
RealignString();
|
RealignString();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SKILLNAME:
|
case SKILLNAME:
|
||||||
if(currentUILevel->lumpnum != cache) // Can only change skill between currentUILevel->
|
if(primaryLevel->lumpnum != cache) // Can only change skill between primaryLevel->
|
||||||
{
|
{
|
||||||
cache = currentUILevel->lumpnum;
|
cache = primaryLevel->lumpnum;
|
||||||
str = G_SkillName();
|
str = G_SkillName();
|
||||||
RealignString();
|
RealignString();
|
||||||
}
|
}
|
||||||
|
@ -904,7 +904,7 @@ class CommandDrawString : public SBarInfoCommand
|
||||||
if(ACS_GlobalVars[valueArgument] != cache)
|
if(ACS_GlobalVars[valueArgument] != cache)
|
||||||
{
|
{
|
||||||
cache = ACS_GlobalVars[valueArgument];
|
cache = ACS_GlobalVars[valueArgument];
|
||||||
str = currentUILevel->Behaviors.LookupString(ACS_GlobalVars[valueArgument]);
|
str = primaryLevel->Behaviors.LookupString(ACS_GlobalVars[valueArgument]);
|
||||||
RealignString();
|
RealignString();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -912,13 +912,13 @@ class CommandDrawString : public SBarInfoCommand
|
||||||
if(ACS_GlobalArrays[valueArgument][consoleplayer] != cache)
|
if(ACS_GlobalArrays[valueArgument][consoleplayer] != cache)
|
||||||
{
|
{
|
||||||
cache = ACS_GlobalArrays[valueArgument][consoleplayer];
|
cache = ACS_GlobalArrays[valueArgument][consoleplayer];
|
||||||
str = currentUILevel->Behaviors.LookupString(ACS_GlobalArrays[valueArgument][consoleplayer]);
|
str = primaryLevel->Behaviors.LookupString(ACS_GlobalArrays[valueArgument][consoleplayer]);
|
||||||
RealignString();
|
RealignString();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TIME:
|
case TIME:
|
||||||
{
|
{
|
||||||
int sec = Tics2Seconds(currentUILevel->time);
|
int sec = Tics2Seconds(primaryLevel->time);
|
||||||
str.Format("%02d:%02d:%02d", sec / 3600, (sec % 3600) / 60, sec % 60);
|
str.Format("%02d:%02d:%02d", sec / 3600, (sec % 3600) / 60, sec % 60);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1389,25 +1389,25 @@ class CommandDrawNumber : public CommandDrawString
|
||||||
num = statusBar->CPlayer->fragcount;
|
num = statusBar->CPlayer->fragcount;
|
||||||
break;
|
break;
|
||||||
case KILLS:
|
case KILLS:
|
||||||
num = currentUILevel->killed_monsters;
|
num = primaryLevel->killed_monsters;
|
||||||
break;
|
break;
|
||||||
case MONSTERS:
|
case MONSTERS:
|
||||||
num = currentUILevel->total_monsters;
|
num = primaryLevel->total_monsters;
|
||||||
break;
|
break;
|
||||||
case ITEMS:
|
case ITEMS:
|
||||||
num = currentUILevel->found_items;
|
num = primaryLevel->found_items;
|
||||||
break;
|
break;
|
||||||
case TOTALITEMS:
|
case TOTALITEMS:
|
||||||
num = currentUILevel->total_items;
|
num = primaryLevel->total_items;
|
||||||
break;
|
break;
|
||||||
case SECRETS:
|
case SECRETS:
|
||||||
num = currentUILevel->found_secrets;
|
num = primaryLevel->found_secrets;
|
||||||
break;
|
break;
|
||||||
case SCORE:
|
case SCORE:
|
||||||
num = statusBar->CPlayer->mo->Score;
|
num = statusBar->CPlayer->mo->Score;
|
||||||
break;
|
break;
|
||||||
case TOTALSECRETS:
|
case TOTALSECRETS:
|
||||||
num = currentUILevel->total_secrets;
|
num = primaryLevel->total_secrets;
|
||||||
break;
|
break;
|
||||||
case ARMORCLASS:
|
case ARMORCLASS:
|
||||||
case SAVEPERCENT:
|
case SAVEPERCENT:
|
||||||
|
@ -1459,9 +1459,9 @@ class CommandDrawNumber : public CommandDrawString
|
||||||
case AIRTIME:
|
case AIRTIME:
|
||||||
{
|
{
|
||||||
if(statusBar->CPlayer->mo->waterlevel < 3)
|
if(statusBar->CPlayer->mo->waterlevel < 3)
|
||||||
num = currentUILevel->airsupply/TICRATE;
|
num = primaryLevel->airsupply/TICRATE;
|
||||||
else
|
else
|
||||||
num = clamp<int>((statusBar->CPlayer->air_finished - currentUILevel->time + (TICRATE-1))/TICRATE, 0, INT_MAX);
|
num = clamp<int>((statusBar->CPlayer->air_finished - primaryLevel->time + (TICRATE-1))/TICRATE, 0, INT_MAX);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SELECTEDINVENTORY:
|
case SELECTEDINVENTORY:
|
||||||
|
@ -1502,7 +1502,7 @@ class CommandDrawNumber : public CommandDrawString
|
||||||
}
|
}
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
if(interpolationSpeed != 0 && (!hudChanged || currentUILevel->time == 1))
|
if(interpolationSpeed != 0 && (!hudChanged || primaryLevel->time == 1))
|
||||||
{
|
{
|
||||||
if(num < drawValue)
|
if(num < drawValue)
|
||||||
drawValue -= clamp<int>((drawValue - num) >> 2, 1, interpolationSpeed);
|
drawValue -= clamp<int>((drawValue - num) >> 2, 1, interpolationSpeed);
|
||||||
|
@ -1691,7 +1691,7 @@ class CommandDrawSelectedInventory : public CommandDrawImage, private CommandDra
|
||||||
if(alternateOnEmpty)
|
if(alternateOnEmpty)
|
||||||
SBarInfoCommandFlowControl::Draw(block, statusBar);
|
SBarInfoCommandFlowControl::Draw(block, statusBar);
|
||||||
|
|
||||||
if(statusBar->CPlayer->mo->PointerVar<AActor>(NAME_InvSel) != NULL && !(currentUILevel->flags & LEVEL_NOINVENTORYBAR))
|
if(statusBar->CPlayer->mo->PointerVar<AActor>(NAME_InvSel) != NULL && !(primaryLevel->flags & LEVEL_NOINVENTORYBAR))
|
||||||
{
|
{
|
||||||
if(artiflash && statusBar->wrapper->artiflashTick)
|
if(artiflash && statusBar->wrapper->artiflashTick)
|
||||||
{
|
{
|
||||||
|
@ -1791,7 +1791,7 @@ class CommandDrawSelectedInventory : public CommandDrawImage, private CommandDra
|
||||||
{
|
{
|
||||||
SBarInfoCommandFlowControl::Tick(block, statusBar, hudChanged);
|
SBarInfoCommandFlowControl::Tick(block, statusBar, hudChanged);
|
||||||
|
|
||||||
SetTruth(statusBar->CPlayer->mo->PointerVar<AActor>(NAME_InvSel) == NULL || (currentUILevel->flags & LEVEL_NOINVENTORYBAR), block, statusBar);
|
SetTruth(statusBar->CPlayer->mo->PointerVar<AActor>(NAME_InvSel) == NULL || (primaryLevel->flags & LEVEL_NOINVENTORYBAR), block, statusBar);
|
||||||
|
|
||||||
CommandDrawImage::Tick(block, statusBar, hudChanged);
|
CommandDrawImage::Tick(block, statusBar, hudChanged);
|
||||||
CommandDrawNumber::Tick(block, statusBar, hudChanged);
|
CommandDrawNumber::Tick(block, statusBar, hudChanged);
|
||||||
|
@ -1910,7 +1910,7 @@ class CommandInventoryBarNotVisible : public SBarInfoCommandFlowControl
|
||||||
{
|
{
|
||||||
SBarInfoCommandFlowControl::Tick(block, statusBar, hudChanged);
|
SBarInfoCommandFlowControl::Tick(block, statusBar, hudChanged);
|
||||||
|
|
||||||
SetTruth(statusBar->CPlayer->inventorytics <= 0 || (currentUILevel->flags & LEVEL_NOINVENTORYBAR), block, statusBar);
|
SetTruth(statusBar->CPlayer->inventorytics <= 0 || (primaryLevel->flags & LEVEL_NOINVENTORYBAR), block, statusBar);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2727,16 +2727,16 @@ class CommandDrawBar : public SBarInfoCommand
|
||||||
max = fraglimit;
|
max = fraglimit;
|
||||||
break;
|
break;
|
||||||
case KILLS:
|
case KILLS:
|
||||||
value = currentUILevel->killed_monsters;
|
value = primaryLevel->killed_monsters;
|
||||||
max = currentUILevel->total_monsters;
|
max = primaryLevel->total_monsters;
|
||||||
break;
|
break;
|
||||||
case ITEMS:
|
case ITEMS:
|
||||||
value = currentUILevel->found_items;
|
value = primaryLevel->found_items;
|
||||||
max = currentUILevel->total_items;
|
max = primaryLevel->total_items;
|
||||||
break;
|
break;
|
||||||
case SECRETS:
|
case SECRETS:
|
||||||
value = currentUILevel->found_secrets;
|
value = primaryLevel->found_secrets;
|
||||||
max = currentUILevel->total_secrets;
|
max = primaryLevel->total_secrets;
|
||||||
break;
|
break;
|
||||||
case INVENTORY:
|
case INVENTORY:
|
||||||
{
|
{
|
||||||
|
@ -2751,8 +2751,8 @@ class CommandDrawBar : public SBarInfoCommand
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case AIRTIME:
|
case AIRTIME:
|
||||||
value = clamp<int>(statusBar->CPlayer->air_finished - currentUILevel->time, 0, INT_MAX);
|
value = clamp<int>(statusBar->CPlayer->air_finished - primaryLevel->time, 0, INT_MAX);
|
||||||
max = currentUILevel->airsupply;
|
max = primaryLevel->airsupply;
|
||||||
break;
|
break;
|
||||||
case POWERUPTIME:
|
case POWERUPTIME:
|
||||||
{
|
{
|
||||||
|
@ -2798,7 +2798,7 @@ class CommandDrawBar : public SBarInfoCommand
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
value = 0;
|
value = 0;
|
||||||
if(interpolationSpeed != 0 && (!hudChanged || currentUILevel->time == 1))
|
if(interpolationSpeed != 0 && (!hudChanged || primaryLevel->time == 1))
|
||||||
{
|
{
|
||||||
// [BL] Since we used a percentage (in order to get the most fluid animation)
|
// [BL] Since we used a percentage (in order to get the most fluid animation)
|
||||||
// we need to establish a cut off point so the last pixel won't hang as the animation slows
|
// we need to establish a cut off point so the last pixel won't hang as the animation slows
|
||||||
|
@ -3192,7 +3192,7 @@ class CommandDrawGem : public SBarInfoCommand
|
||||||
|
|
||||||
goalValue = reverse ? 100 - goalValue : goalValue;
|
goalValue = reverse ? 100 - goalValue : goalValue;
|
||||||
|
|
||||||
if(interpolationSpeed != 0 && (!hudChanged || currentUILevel->time == 1)) // At the start force an animation
|
if(interpolationSpeed != 0 && (!hudChanged || primaryLevel->time == 1)) // At the start force an animation
|
||||||
{
|
{
|
||||||
if(goalValue < drawValue)
|
if(goalValue < drawValue)
|
||||||
drawValue -= clamp<int>((drawValue - goalValue) >> 2, 1, interpolationSpeed);
|
drawValue -= clamp<int>((drawValue - goalValue) >> 2, 1, interpolationSpeed);
|
||||||
|
@ -3202,7 +3202,7 @@ class CommandDrawGem : public SBarInfoCommand
|
||||||
else
|
else
|
||||||
drawValue = goalValue;
|
drawValue = goalValue;
|
||||||
|
|
||||||
if(wiggle && currentUILevel->time & 1)
|
if(wiggle && primaryLevel->time & 1)
|
||||||
chainWiggle = pr_chainwiggle() & 1;
|
chainWiggle = pr_chainwiggle() & 1;
|
||||||
}
|
}
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -789,7 +789,7 @@ void DBaseStatusBar::RefreshViewBorder ()
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto tex = GetBorderTexture(currentUILevel);
|
auto tex = GetBorderTexture(primaryLevel);
|
||||||
screen->DrawBorder (tex, 0, 0, Width, viewwindowy);
|
screen->DrawBorder (tex, 0, 0, Width, viewwindowy);
|
||||||
screen->DrawBorder (tex, 0, viewwindowy, viewwindowx, viewheight + viewwindowy);
|
screen->DrawBorder (tex, 0, viewwindowy, viewwindowx, viewheight + viewwindowy);
|
||||||
screen->DrawBorder (tex, viewwindowx + viewwidth, viewwindowy, Width, viewheight + viewwindowy);
|
screen->DrawBorder (tex, viewwindowx + viewwidth, viewwindowy, Width, viewheight + viewwindowy);
|
||||||
|
@ -815,7 +815,7 @@ void DBaseStatusBar::RefreshBackground () const
|
||||||
|
|
||||||
if (x == 0 && y == SCREENHEIGHT) return;
|
if (x == 0 && y == SCREENHEIGHT) return;
|
||||||
|
|
||||||
auto tex = GetBorderTexture(currentUILevel);
|
auto tex = GetBorderTexture(primaryLevel);
|
||||||
|
|
||||||
if(!CompleteBorder)
|
if(!CompleteBorder)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2285,8 +2285,8 @@ static void ClearMapinfo()
|
||||||
AllSkills.Clear();
|
AllSkills.Clear();
|
||||||
DefaultSkill = -1;
|
DefaultSkill = -1;
|
||||||
DeinitIntermissions();
|
DeinitIntermissions();
|
||||||
level.info = NULL;
|
primaryLevel->info = nullptr;
|
||||||
level.F1Pic = "";
|
primaryLevel->F1Pic = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
|
@ -369,7 +369,7 @@ static void HU_DrawTimeRemaining (int y)
|
||||||
if (deathmatch && timelimit && gamestate == GS_LEVEL)
|
if (deathmatch && timelimit && gamestate == GS_LEVEL)
|
||||||
{
|
{
|
||||||
char str[80];
|
char str[80];
|
||||||
int timeleft = (int)(timelimit * TICRATE * 60) - currentUILevel->maptime;
|
int timeleft = (int)(timelimit * TICRATE * 60) - primaryLevel->maptime;
|
||||||
int hours, minutes, seconds;
|
int hours, minutes, seconds;
|
||||||
|
|
||||||
if (timeleft < 0)
|
if (timeleft < 0)
|
||||||
|
|
|
@ -787,7 +787,7 @@ void DIntermissionController::Ticker ()
|
||||||
switch (mGameState)
|
switch (mGameState)
|
||||||
{
|
{
|
||||||
case FSTATE_InLevel:
|
case FSTATE_InLevel:
|
||||||
currentUILevel->SetMusic();
|
primaryLevel->SetMusic();
|
||||||
gamestate = GS_LEVEL;
|
gamestate = GS_LEVEL;
|
||||||
wipegamestate = GS_LEVEL;
|
wipegamestate = GS_LEVEL;
|
||||||
P_ResumeConversation ();
|
P_ResumeConversation ();
|
||||||
|
|
|
@ -324,7 +324,7 @@ void cht_DoCheat (player_t *player, int cheat)
|
||||||
case CHT_MASSACRE:
|
case CHT_MASSACRE:
|
||||||
case CHT_MASSACRE2:
|
case CHT_MASSACRE2:
|
||||||
{
|
{
|
||||||
int killcount = currentUILevel->Massacre (cheat == CHT_MASSACRE2);
|
int killcount = primaryLevel->Massacre (cheat == CHT_MASSACRE2);
|
||||||
// killough 3/22/98: make more intelligent about plural
|
// killough 3/22/98: make more intelligent about plural
|
||||||
// Ty 03/27/98 - string(s) *not* externalized
|
// Ty 03/27/98 - string(s) *not* externalized
|
||||||
mysnprintf (msgbuild, countof(msgbuild), "%d %s%s Killed", killcount,
|
mysnprintf (msgbuild, countof(msgbuild), "%d %s%s Killed", killcount,
|
||||||
|
|
|
@ -823,7 +823,7 @@ void CopyPlayer(player_t *dst, player_t *src, const char *name)
|
||||||
|
|
||||||
if (dst->Bot != nullptr)
|
if (dst->Bot != nullptr)
|
||||||
{
|
{
|
||||||
botinfo_t *thebot = level.BotInfo.botinfo;
|
botinfo_t *thebot = src->mo->Level->BotInfo.botinfo;
|
||||||
while (thebot && stricmp(name, thebot->name))
|
while (thebot && stricmp(name, thebot->name))
|
||||||
{
|
{
|
||||||
thebot = thebot->next;
|
thebot = thebot->next;
|
||||||
|
@ -832,7 +832,7 @@ void CopyPlayer(player_t *dst, player_t *src, const char *name)
|
||||||
{
|
{
|
||||||
thebot->inuse = BOTINUSE_Yes;
|
thebot->inuse = BOTINUSE_Yes;
|
||||||
}
|
}
|
||||||
level.BotInfo.botnum++;
|
src->mo->Level->BotInfo.botnum++;
|
||||||
dst->userinfo.TransferFrom(uibackup2);
|
dst->userinfo.TransferFrom(uibackup2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -353,7 +353,11 @@ void P_FreeLevelData ()
|
||||||
E_Shutdown(true);
|
E_Shutdown(true);
|
||||||
R_FreePastViewers();
|
R_FreePastViewers();
|
||||||
|
|
||||||
level.ClearLevelData();
|
for (auto Level : AllLevels())
|
||||||
|
{
|
||||||
|
Level->ClearLevelData();
|
||||||
|
}
|
||||||
|
// primaryLevel->FreeSecondaryLevels();
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
@ -577,7 +581,10 @@ void P_Init ()
|
||||||
|
|
||||||
static void P_Shutdown ()
|
static void P_Shutdown ()
|
||||||
{
|
{
|
||||||
level.Thinkers.DestroyThinkersInList(STAT_STATIC);
|
for (auto Level : AllLevels())
|
||||||
|
{
|
||||||
|
Level->Thinkers.DestroyThinkersInList(STAT_STATIC);
|
||||||
|
}
|
||||||
P_FreeLevelData ();
|
P_FreeLevelData ();
|
||||||
// [ZZ] delete global event handlers
|
// [ZZ] delete global event handlers
|
||||||
E_Shutdown(false);
|
E_Shutdown(false);
|
||||||
|
|
|
@ -65,7 +65,7 @@ bool P_CheckTickerPaused ()
|
||||||
&& wipegamestate == gamestate)
|
&& wipegamestate == gamestate)
|
||||||
{
|
{
|
||||||
// Only the current UI level's settings are relevant for sound.
|
// Only the current UI level's settings are relevant for sound.
|
||||||
S_PauseSound (!(currentUILevel->flags2 & LEVEL2_PAUSE_MUSIC_IN_MENUS), false);
|
S_PauseSound (!(primaryLevel->flags2 & LEVEL2_PAUSE_MUSIC_IN_MENUS), false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -99,7 +99,7 @@ void P_Ticker (void)
|
||||||
|
|
||||||
// [RH] Frozen mode is only changed every 4 tics, to make it work with A_Tracer().
|
// [RH] Frozen mode is only changed every 4 tics, to make it work with A_Tracer().
|
||||||
// This may not be perfect but it is not really relevant for sublevels that tracer homing behavior is preserved.
|
// This may not be perfect but it is not really relevant for sublevels that tracer homing behavior is preserved.
|
||||||
if ((currentUILevel->maptime & 3) == 0)
|
if ((primaryLevel->maptime & 3) == 0)
|
||||||
{
|
{
|
||||||
if (globalchangefreeze)
|
if (globalchangefreeze)
|
||||||
{
|
{
|
||||||
|
@ -151,18 +151,22 @@ void P_Ticker (void)
|
||||||
// [ZZ] call the WorldTick hook
|
// [ZZ] call the WorldTick hook
|
||||||
E_WorldTick();
|
E_WorldTick();
|
||||||
StatusBar->CallTick (); // [RH] moved this here
|
StatusBar->CallTick (); // [RH] moved this here
|
||||||
level.Tick (); // [RH] let the level tick
|
for (auto Level : AllLevels())
|
||||||
level.Thinkers.RunThinkers(&level);
|
|
||||||
|
|
||||||
//if added by MC: Freeze mode.
|
|
||||||
if (!level.isFrozen())
|
|
||||||
{
|
{
|
||||||
P_UpdateSpecials (&level);
|
// todo: set up a sandbox for secondary levels here.
|
||||||
P_RunEffects(&level); // [RH] Run particle effects
|
Level->Tick(); // [RH] let the level tick
|
||||||
}
|
Level->Thinkers.RunThinkers(Level);
|
||||||
|
|
||||||
|
//if added by MC: Freeze mode.
|
||||||
|
if (!Level->isFrozen())
|
||||||
|
{
|
||||||
|
P_UpdateSpecials(Level);
|
||||||
|
P_RunEffects(Level); // [RH] Run particle effects
|
||||||
|
}
|
||||||
|
|
||||||
// for par times
|
// for par times
|
||||||
level.time++;
|
Level->time++;
|
||||||
level.maptime++;
|
Level->maptime++;
|
||||||
level.totaltime++;
|
Level->totaltime++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -956,8 +956,8 @@ void P_CheckPlayerSprite(AActor *actor, int &spritenum, DVector2 &scale)
|
||||||
|
|
||||||
CUSTOM_CVAR (Float, sv_aircontrol, 0.00390625f, CVAR_SERVERINFO|CVAR_NOSAVE)
|
CUSTOM_CVAR (Float, sv_aircontrol, 0.00390625f, CVAR_SERVERINFO|CVAR_NOSAVE)
|
||||||
{
|
{
|
||||||
currentUILevel->aircontrol = self;
|
primaryLevel->aircontrol = self;
|
||||||
currentUILevel->AirControlChanged ();
|
primaryLevel->AirControlChanged ();
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
|
@ -165,7 +165,7 @@ static int DoomSpecificInfo (char *buffer, char *end)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
p += snprintf (buffer+p, size-p, "\n\nCurrent map: %s", currentUILevel->MapName.GetChars());
|
p += snprintf (buffer+p, size-p, "\n\nCurrent map: %s", primaryLevel->MapName.GetChars());
|
||||||
|
|
||||||
if (!viewactive)
|
if (!viewactive)
|
||||||
{
|
{
|
||||||
|
|
|
@ -112,9 +112,10 @@ void IShadowMap::CollectLights()
|
||||||
{
|
{
|
||||||
if (mLights.Size() != 1024 * 4) mLights.Resize(1024 * 4);
|
if (mLights.Size() != 1024 * 4) mLights.Resize(1024 * 4);
|
||||||
int lightindex = 0;
|
int lightindex = 0;
|
||||||
|
auto Level = &level;
|
||||||
|
|
||||||
// Todo: this should go through the blockmap in a spiral pattern around the player so that closer lights are preferred.
|
// Todo: this should go through the blockmap in a spiral pattern around the player so that closer lights are preferred.
|
||||||
for (auto light = level.lights; light; light = light->next)
|
for (auto light = Level->lights; light; light = light->next)
|
||||||
{
|
{
|
||||||
LightsProcessed++;
|
LightsProcessed++;
|
||||||
if (light->shadowmapped && light->IsActive() && lightindex < 1024 * 4)
|
if (light->shadowmapped && light->IsActive() && lightindex < 1024 * 4)
|
||||||
|
|
|
@ -403,16 +403,16 @@ void S_Start ()
|
||||||
FString LocalSndSeq;
|
FString LocalSndSeq;
|
||||||
|
|
||||||
// To be certain better check whether level is valid!
|
// To be certain better check whether level is valid!
|
||||||
if (currentUILevel->info)
|
if (primaryLevel->info)
|
||||||
{
|
{
|
||||||
LocalSndInfo = currentUILevel->info->SoundInfo;
|
LocalSndInfo = primaryLevel->info->SoundInfo;
|
||||||
LocalSndSeq = currentUILevel->info->SndSeq;
|
LocalSndSeq = primaryLevel->info->SndSeq;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool parse_ss = false;
|
bool parse_ss = false;
|
||||||
|
|
||||||
// This level uses a different local SNDINFO
|
// This level uses a different local SNDINFO
|
||||||
if (LastLocalSndInfo.CompareNoCase(LocalSndInfo) != 0 || !currentUILevel->info)
|
if (LastLocalSndInfo.CompareNoCase(LocalSndInfo) != 0 || !primaryLevel->info)
|
||||||
{
|
{
|
||||||
// First delete the old sound list
|
// First delete the old sound list
|
||||||
for(unsigned i = 1; i < S_sfx.Size(); i++)
|
for(unsigned i = 1; i < S_sfx.Size(); i++)
|
||||||
|
@ -457,9 +457,9 @@ void S_Start ()
|
||||||
|
|
||||||
// Don't start the music if loading a savegame, because the music is stored there.
|
// Don't start the music if loading a savegame, because the music is stored there.
|
||||||
// Don't start the music if revisiting a level in a hub for the same reason.
|
// Don't start the music if revisiting a level in a hub for the same reason.
|
||||||
if (!currentUILevel->IsReentering())
|
if (!primaryLevel->IsReentering())
|
||||||
{
|
{
|
||||||
currentUILevel->SetMusic();
|
primaryLevel->SetMusic();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -475,7 +475,7 @@ void S_PrecacheLevel (FLevelLocals *Level)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
if (GSnd && Level == currentUILevel)
|
if (GSnd && Level == primaryLevel)
|
||||||
{
|
{
|
||||||
for (i = 0; i < S_sfx.Size(); ++i)
|
for (i = 0; i < S_sfx.Size(); ++i)
|
||||||
{
|
{
|
||||||
|
@ -499,7 +499,7 @@ void S_PrecacheLevel (FLevelLocals *Level)
|
||||||
FSoundID(snd).MarkUsed();
|
FSoundID(snd).MarkUsed();
|
||||||
}
|
}
|
||||||
// Precache all extra sounds requested by this map.
|
// Precache all extra sounds requested by this map.
|
||||||
for (auto snd : currentUILevel->info->PrecacheSounds)
|
for (auto snd : primaryLevel->info->PrecacheSounds)
|
||||||
{
|
{
|
||||||
FSoundID(snd).MarkUsed();
|
FSoundID(snd).MarkUsed();
|
||||||
}
|
}
|
||||||
|
@ -705,8 +705,8 @@ static void CalcPosVel(int type, const AActor *actor, const sector_t *sector,
|
||||||
// on static analysis.
|
// on static analysis.
|
||||||
if(type == SOURCE_Unattached)
|
if(type == SOURCE_Unattached)
|
||||||
{
|
{
|
||||||
sector_t *sec = currentUILevel->PointInSector(pt[0], pt[2]);
|
sector_t *sec = primaryLevel->PointInSector(pt[0], pt[2]);
|
||||||
DVector2 disp = currentUILevel->Displacements.getOffset(pgroup, sec->PortalGroup);
|
DVector2 disp = primaryLevel->Displacements.getOffset(pgroup, sec->PortalGroup);
|
||||||
pos->X = pt[0] - (float)disp.X;
|
pos->X = pt[0] - (float)disp.X;
|
||||||
pos->Y = !(chanflags & CHAN_LISTENERZ) ? pt[1] : (float)listenpos.Z;
|
pos->Y = !(chanflags & CHAN_LISTENERZ) ? pt[1] : (float)listenpos.Z;
|
||||||
pos->Z = pt[2] - (float)disp.Y;
|
pos->Z = pt[2] - (float)disp.Y;
|
||||||
|
@ -723,7 +723,7 @@ static void CalcPosVel(int type, const AActor *actor, const sector_t *sector,
|
||||||
//assert(actor != NULL);
|
//assert(actor != NULL);
|
||||||
if (actor != NULL)
|
if (actor != NULL)
|
||||||
{
|
{
|
||||||
DVector2 disp = currentUILevel->Displacements.getOffset(pgroup, actor->Sector->PortalGroup);
|
DVector2 disp = primaryLevel->Displacements.getOffset(pgroup, actor->Sector->PortalGroup);
|
||||||
DVector3 posi = actor->Pos() - disp;
|
DVector3 posi = actor->Pos() - disp;
|
||||||
*pos = { (float)posi.X, (float)posi.Z, (float)posi.Y };
|
*pos = { (float)posi.X, (float)posi.Z, (float)posi.Y };
|
||||||
}
|
}
|
||||||
|
@ -733,7 +733,7 @@ static void CalcPosVel(int type, const AActor *actor, const sector_t *sector,
|
||||||
assert(sector != NULL);
|
assert(sector != NULL);
|
||||||
if (sector != NULL)
|
if (sector != NULL)
|
||||||
{
|
{
|
||||||
DVector2 disp = currentUILevel->Displacements.getOffset(pgroup, sector->PortalGroup);
|
DVector2 disp = primaryLevel->Displacements.getOffset(pgroup, sector->PortalGroup);
|
||||||
if (chanflags & CHAN_AREA)
|
if (chanflags & CHAN_AREA)
|
||||||
{
|
{
|
||||||
// listener must be reversely offset to calculate the proper sound origin.
|
// listener must be reversely offset to calculate the proper sound origin.
|
||||||
|
@ -755,7 +755,7 @@ static void CalcPosVel(int type, const AActor *actor, const sector_t *sector,
|
||||||
assert(poly != NULL);
|
assert(poly != NULL);
|
||||||
if (poly != NULL)
|
if (poly != NULL)
|
||||||
{
|
{
|
||||||
DVector2 disp = currentUILevel->Displacements.getOffset(pgroup, poly->CenterSubsector->sector->PortalGroup);
|
DVector2 disp = primaryLevel->Displacements.getOffset(pgroup, poly->CenterSubsector->sector->PortalGroup);
|
||||||
CalcPolyobjSoundOrg(listenpos + disp, poly, *pos);
|
CalcPolyobjSoundOrg(listenpos + disp, poly, *pos);
|
||||||
pos->X -= (float)disp.X;
|
pos->X -= (float)disp.X;
|
||||||
pos->Z -= (float)disp.Y;
|
pos->Z -= (float)disp.Y;
|
||||||
|
@ -852,7 +852,7 @@ static void CalcSectorSoundOrg(const DVector3 &listenpos, const sector_t *sec, i
|
||||||
if (!(sec->Level->i_compatflags & COMPATF_SECTORSOUNDS))
|
if (!(sec->Level->i_compatflags & COMPATF_SECTORSOUNDS))
|
||||||
{
|
{
|
||||||
// Are we inside the sector? If yes, the closest point is the one we're on.
|
// Are we inside the sector? If yes, the closest point is the one we're on.
|
||||||
if (currentUILevel->PointInSector(listenpos.X, listenpos.Y) == sec)
|
if (primaryLevel->PointInSector(listenpos.X, listenpos.Y) == sec)
|
||||||
{
|
{
|
||||||
pos.X = (float)listenpos.X;
|
pos.X = (float)listenpos.X;
|
||||||
pos.Z = (float)listenpos.Y;
|
pos.Z = (float)listenpos.Y;
|
||||||
|
@ -916,7 +916,7 @@ static void CalcPolyobjSoundOrg(const DVector3 &listenpos, const FPolyObj *poly,
|
||||||
//
|
//
|
||||||
// S_StartSound
|
// S_StartSound
|
||||||
//
|
//
|
||||||
// 0 attenuation means full volume over whole currentUILevel->
|
// 0 attenuation means full volume over whole primaryLevel->
|
||||||
// 0 < attenuation means to scale the distance by that amount when
|
// 0 < attenuation means to scale the distance by that amount when
|
||||||
// calculating volume.
|
// calculating volume.
|
||||||
//
|
//
|
||||||
|
@ -1337,7 +1337,7 @@ DEFINE_ACTION_FUNCTION(DObject, S_Sound)
|
||||||
|
|
||||||
void S_Sound (AActor *ent, int channel, FSoundID sound_id, float volume, float attenuation)
|
void S_Sound (AActor *ent, int channel, FSoundID sound_id, float volume, float attenuation)
|
||||||
{
|
{
|
||||||
if (ent == nullptr || ent->Sector->Flags & SECF_SILENT || ent->Level != currentUILevel)
|
if (ent == nullptr || ent->Sector->Flags & SECF_SILENT || ent->Level != primaryLevel)
|
||||||
return;
|
return;
|
||||||
S_StartSound (ent, nullptr, nullptr, nullptr, channel, sound_id, volume, attenuation);
|
S_StartSound (ent, nullptr, nullptr, nullptr, channel, sound_id, volume, attenuation);
|
||||||
}
|
}
|
||||||
|
@ -1352,7 +1352,7 @@ void S_Sound (AActor *ent, int channel, FSoundID sound_id, float volume, float a
|
||||||
|
|
||||||
void S_SoundMinMaxDist(AActor *ent, int channel, FSoundID sound_id, float volume, float mindist, float maxdist)
|
void S_SoundMinMaxDist(AActor *ent, int channel, FSoundID sound_id, float volume, float mindist, float maxdist)
|
||||||
{
|
{
|
||||||
if (ent == nullptr || ent->Sector->Flags & SECF_SILENT || ent->Level != currentUILevel)
|
if (ent == nullptr || ent->Sector->Flags & SECF_SILENT || ent->Level != primaryLevel)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
FRolloffInfo rolloff;
|
FRolloffInfo rolloff;
|
||||||
|
@ -1371,7 +1371,7 @@ void S_SoundMinMaxDist(AActor *ent, int channel, FSoundID sound_id, float volume
|
||||||
|
|
||||||
void S_Sound (const FPolyObj *poly, int channel, FSoundID sound_id, float volume, float attenuation)
|
void S_Sound (const FPolyObj *poly, int channel, FSoundID sound_id, float volume, float attenuation)
|
||||||
{
|
{
|
||||||
if (poly->Level != currentUILevel) return;
|
if (poly->Level != primaryLevel) return;
|
||||||
S_StartSound (nullptr, nullptr, poly, nullptr, channel, sound_id, volume, attenuation);
|
S_StartSound (nullptr, nullptr, poly, nullptr, channel, sound_id, volume, attenuation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1383,7 +1383,7 @@ void S_Sound (const FPolyObj *poly, int channel, FSoundID sound_id, float volume
|
||||||
|
|
||||||
void S_Sound(FLevelLocals *Level, const DVector3 &pos, int channel, FSoundID sound_id, float volume, float attenuation)
|
void S_Sound(FLevelLocals *Level, const DVector3 &pos, int channel, FSoundID sound_id, float volume, float attenuation)
|
||||||
{
|
{
|
||||||
if (Level != currentUILevel) return;
|
if (Level != primaryLevel) return;
|
||||||
// The sound system switches Y and Z around.
|
// The sound system switches Y and Z around.
|
||||||
FVector3 p((float)pos.X, (float)pos.Z, (float)pos.Y);
|
FVector3 p((float)pos.X, (float)pos.Z, (float)pos.Y);
|
||||||
S_StartSound (nullptr, nullptr, nullptr, &p, channel, sound_id, volume, attenuation);
|
S_StartSound (nullptr, nullptr, nullptr, &p, channel, sound_id, volume, attenuation);
|
||||||
|
@ -1397,7 +1397,7 @@ void S_Sound(FLevelLocals *Level, const DVector3 &pos, int channel, FSoundID sou
|
||||||
|
|
||||||
void S_Sound (const sector_t *sec, int channel, FSoundID sfxid, float volume, float attenuation)
|
void S_Sound (const sector_t *sec, int channel, FSoundID sfxid, float volume, float attenuation)
|
||||||
{
|
{
|
||||||
if (sec->Level != currentUILevel) return;
|
if (sec->Level != primaryLevel) return;
|
||||||
S_StartSound (nullptr, sec, nullptr, nullptr, channel, sfxid, volume, attenuation);
|
S_StartSound (nullptr, sec, nullptr, nullptr, channel, sfxid, volume, attenuation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1411,7 +1411,7 @@ void S_Sound (const sector_t *sec, int channel, FSoundID sfxid, float volume, fl
|
||||||
|
|
||||||
void S_PlaySound(AActor *a, int chan, FSoundID sid, float vol, float atten, bool local)
|
void S_PlaySound(AActor *a, int chan, FSoundID sid, float vol, float atten, bool local)
|
||||||
{
|
{
|
||||||
if (a == nullptr || a->Sector->Flags & SECF_SILENT || a->Level != currentUILevel)
|
if (a == nullptr || a->Sector->Flags & SECF_SILENT || a->Level != primaryLevel)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!local)
|
if (!local)
|
||||||
|
@ -2190,7 +2190,7 @@ void S_UpdateSounds (AActor *listenactor)
|
||||||
GSnd->UpdateListener(&listener);
|
GSnd->UpdateListener(&listener);
|
||||||
GSnd->UpdateSounds();
|
GSnd->UpdateSounds();
|
||||||
|
|
||||||
if (currentUILevel->time >= RestartEvictionsAt)
|
if (primaryLevel->time >= RestartEvictionsAt)
|
||||||
{
|
{
|
||||||
RestartEvictionsAt = 0;
|
RestartEvictionsAt = 0;
|
||||||
S_RestoreEvictedChannels();
|
S_RestoreEvictedChannels();
|
||||||
|
@ -2216,8 +2216,8 @@ static void S_SetListener(SoundListener &listener, AActor *listenactor)
|
||||||
listener.velocity.Zero();
|
listener.velocity.Zero();
|
||||||
listener.position = listenactor->SoundPos();
|
listener.position = listenactor->SoundPos();
|
||||||
listener.underwater = listenactor->waterlevel == 3;
|
listener.underwater = listenactor->waterlevel == 3;
|
||||||
assert(currentUILevel->Zones.Size() > listenactor->Sector->ZoneNumber);
|
assert(primaryLevel->Zones.Size() > listenactor->Sector->ZoneNumber);
|
||||||
listener.Environment = currentUILevel->Zones[listenactor->Sector->ZoneNumber].Environment;
|
listener.Environment = primaryLevel->Zones[listenactor->Sector->ZoneNumber].Environment;
|
||||||
listener.valid = true;
|
listener.valid = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2495,7 +2495,7 @@ void S_SerializeSounds(FSerializer &arc)
|
||||||
// playing before the wipe, and depending on the synchronization
|
// playing before the wipe, and depending on the synchronization
|
||||||
// between the main thread and the mixer thread at the time, the
|
// between the main thread and the mixer thread at the time, the
|
||||||
// sounds might be heard briefly before pausing for the wipe.
|
// sounds might be heard briefly before pausing for the wipe.
|
||||||
RestartEvictionsAt = currentUILevel->time + 2;
|
RestartEvictionsAt = primaryLevel->time + 2;
|
||||||
}
|
}
|
||||||
GSnd->Sync(false);
|
GSnd->Sync(false);
|
||||||
GSnd->UpdateSounds();
|
GSnd->UpdateSounds();
|
||||||
|
@ -2585,8 +2585,8 @@ bool S_ChangeMusic (const char *musicname, int order, bool looping, bool force)
|
||||||
{
|
{
|
||||||
if (gamestate == GS_LEVEL || gamestate == GS_TITLELEVEL)
|
if (gamestate == GS_LEVEL || gamestate == GS_TITLELEVEL)
|
||||||
{
|
{
|
||||||
musicname = currentUILevel->Music;
|
musicname = primaryLevel->Music;
|
||||||
order = currentUILevel->musicorder;
|
order = primaryLevel->musicorder;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2866,7 +2866,7 @@ CCMD (loopsound)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
AActor *icon = Spawn(&level, "SpeakerIcon", players[consoleplayer].mo->PosPlusZ(32.), ALLOW_REPLACE);
|
AActor *icon = Spawn(primaryLevel, "SpeakerIcon", players[consoleplayer].mo->PosPlusZ(32.), ALLOW_REPLACE);
|
||||||
if (icon != NULL)
|
if (icon != NULL)
|
||||||
{
|
{
|
||||||
S_Sound(icon, CHAN_BODY | CHAN_LOOP, id, 1.f, ATTN_IDLE);
|
S_Sound(icon, CHAN_BODY | CHAN_LOOP, id, 1.f, ATTN_IDLE);
|
||||||
|
|
|
@ -2359,7 +2359,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, SetClipRect, SBar_SetClipRect)
|
||||||
|
|
||||||
static void GetGlobalACSString(int index, FString *result)
|
static void GetGlobalACSString(int index, FString *result)
|
||||||
{
|
{
|
||||||
*result = currentUILevel->Behaviors.LookupString(ACS_GlobalVars[index]);
|
*result = primaryLevel->Behaviors.LookupString(ACS_GlobalVars[index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, GetGlobalACSString, GetGlobalACSString)
|
DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, GetGlobalACSString, GetGlobalACSString)
|
||||||
|
@ -2373,7 +2373,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, GetGlobalACSString, GetGlobalACSSt
|
||||||
|
|
||||||
static void GetGlobalACSArrayString(int arrayno, int index, FString *result)
|
static void GetGlobalACSArrayString(int arrayno, int index, FString *result)
|
||||||
{
|
{
|
||||||
*result = currentUILevel->Behaviors.LookupString(ACS_GlobalVars[index]);
|
*result = primaryLevel->Behaviors.LookupString(ACS_GlobalVars[index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, GetGlobalACSArrayString, GetGlobalACSArrayString)
|
DEFINE_ACTION_FUNCTION_NATIVE(DBaseStatusBar, GetGlobalACSArrayString, GetGlobalACSArrayString)
|
||||||
|
@ -2846,8 +2846,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_AltHUD, GetLatency, Net_GetLatency)
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
DEFINE_GLOBAL(level);
|
DEFINE_GLOBAL(currentVMLevel, level);
|
||||||
DEFINE_GLOBAL(currentUILevel);
|
|
||||||
DEFINE_FIELD(FLevelLocals, sectors)
|
DEFINE_FIELD(FLevelLocals, sectors)
|
||||||
DEFINE_FIELD(FLevelLocals, lines)
|
DEFINE_FIELD(FLevelLocals, lines)
|
||||||
DEFINE_FIELD(FLevelLocals, sides)
|
DEFINE_FIELD(FLevelLocals, sides)
|
||||||
|
|
|
@ -489,7 +489,7 @@ static bool Cht_ChangeStartSpot (cheatseq_t *cheat)
|
||||||
{
|
{
|
||||||
char cmd[64];
|
char cmd[64];
|
||||||
|
|
||||||
mysnprintf (cmd, countof(cmd), "changemap %s %c", currentUILevel->MapName.GetChars(), cheat->Args[0]);
|
mysnprintf (cmd, countof(cmd), "changemap %s %c", primaryLevel->MapName.GetChars(), cheat->Args[0]);
|
||||||
C_DoCommand (cmd);
|
C_DoCommand (cmd);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -577,7 +577,7 @@ FString GetStatString()
|
||||||
|
|
||||||
CCMD(printstats)
|
CCMD(printstats)
|
||||||
{
|
{
|
||||||
StoreLevelStats(currentUILevel); // Refresh the current level's results.
|
StoreLevelStats(primaryLevel); // Refresh the current level's results.
|
||||||
Printf("%s", GetStatString().GetChars());
|
Printf("%s", GetStatString().GetChars());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -596,6 +596,6 @@ CCMD(finishgame)
|
||||||
|
|
||||||
ADD_STAT(statistics)
|
ADD_STAT(statistics)
|
||||||
{
|
{
|
||||||
StoreLevelStats(currentUILevel); // Refresh the current level's results.
|
StoreLevelStats(primaryLevel); // Refresh the current level's results.
|
||||||
return GetStatString();
|
return GetStatString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -428,7 +428,7 @@ void F2DDrawer::AddPoly(FTexture *texture, FVector2 *points, int npoints,
|
||||||
// is necessary in order to best reproduce Doom's original lighting.
|
// is necessary in order to best reproduce Doom's original lighting.
|
||||||
double fadelevel;
|
double fadelevel;
|
||||||
|
|
||||||
if (vid_rendermode != 4 || currentUILevel->lightMode == ELightMode::Doom || currentUILevel->lightMode == ELightMode::ZDoomSoftware || currentUILevel->lightMode == ELightMode::DoomSoftware)
|
if (vid_rendermode != 4 || primaryLevel->lightMode == ELightMode::Doom || primaryLevel->lightMode == ELightMode::ZDoomSoftware || primaryLevel->lightMode == ELightMode::DoomSoftware)
|
||||||
{
|
{
|
||||||
double map = (NUMCOLORMAPS * 2.) - ((lightlevel + 12) * (NUMCOLORMAPS / 128.));
|
double map = (NUMCOLORMAPS * 2.) - ((lightlevel + 12) * (NUMCOLORMAPS / 128.));
|
||||||
fadelevel = clamp((map - 12) / NUMCOLORMAPS, 0.0, 1.0);
|
fadelevel = clamp((map - 12) / NUMCOLORMAPS, 0.0, 1.0);
|
||||||
|
|
|
@ -595,8 +595,8 @@ void V_OutputResized (int width, int height)
|
||||||
C_NewModeAdjust();
|
C_NewModeAdjust();
|
||||||
// Reload crosshair if transitioned to a different size
|
// Reload crosshair if transitioned to a different size
|
||||||
ST_LoadCrosshair(true);
|
ST_LoadCrosshair(true);
|
||||||
if (currentUILevel && currentUILevel->automap)
|
if (primaryLevel && primaryLevel->automap)
|
||||||
currentUILevel->automap->NewResolution();
|
primaryLevel->automap->NewResolution();
|
||||||
}
|
}
|
||||||
|
|
||||||
void V_CalcCleanFacs (int designwidth, int designheight, int realwidth, int realheight, int *cleanx, int *cleany, int *_cx1, int *_cx2)
|
void V_CalcCleanFacs (int designwidth, int designheight, int realwidth, int realheight, int *cleanx, int *cleany, int *_cx1, int *_cx2)
|
||||||
|
|
|
@ -1105,7 +1105,7 @@ void DoomSpecificInfo (char *buffer, size_t bufflen)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buffer += mysnprintf (buffer, buffend - buffer, "\r\n\r\nCurrent map: %s", currentUILevel->MapName.GetChars());
|
buffer += mysnprintf (buffer, buffend - buffer, "\r\n\r\nCurrent map: %s", primaryLevel->MapName.GetChars());
|
||||||
|
|
||||||
if (!viewactive)
|
if (!viewactive)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
struct _ native // These are the global variables, the struct is only here to avoid extending the parser for this.
|
struct _ native // These are the global variables, the struct is only here to avoid extending the parser for this.
|
||||||
{
|
{
|
||||||
native readonly Array<class> AllClasses;
|
native readonly Array<class> AllClasses;
|
||||||
|
@ -7,20 +8,16 @@ struct _ native // These are the global variables, the struct is only here to av
|
||||||
native readonly Array<@Team> Teams;
|
native readonly Array<@Team> Teams;
|
||||||
native int validcount;
|
native int validcount;
|
||||||
native readonly bool multiplayer;
|
native readonly bool multiplayer;
|
||||||
deprecated("3.8") native play @LevelLocals level;
|
|
||||||
native @KeyBindings Bindings;
|
native @KeyBindings Bindings;
|
||||||
native @KeyBindings AutomapBindings;
|
native @KeyBindings AutomapBindings;
|
||||||
native play @DehInfo deh;
|
native play @DehInfo deh;
|
||||||
native readonly @GameInfoStruct gameinfo;
|
native readonly @GameInfoStruct gameinfo;
|
||||||
native play @PlayerInfo players[MAXPLAYERS];
|
|
||||||
native readonly bool playeringame[MAXPLAYERS];
|
|
||||||
native readonly ui bool netgame;
|
native readonly ui bool netgame;
|
||||||
|
|
||||||
native readonly bool automapactive;
|
native readonly bool automapactive;
|
||||||
native play uint gameaction;
|
native play uint gameaction;
|
||||||
native readonly int gamestate;
|
native readonly int gamestate;
|
||||||
native readonly TextureID skyflatnum;
|
native readonly TextureID skyflatnum;
|
||||||
native readonly int consoleplayer;
|
|
||||||
native readonly Font smallfont;
|
native readonly Font smallfont;
|
||||||
native readonly Font smallfont2;
|
native readonly Font smallfont2;
|
||||||
native readonly Font bigfont;
|
native readonly Font bigfont;
|
||||||
|
@ -43,10 +40,16 @@ struct _ native // These are the global variables, the struct is only here to av
|
||||||
native readonly int Net_Arbitrator;
|
native readonly int Net_Arbitrator;
|
||||||
native ui BaseStatusBar StatusBar;
|
native ui BaseStatusBar StatusBar;
|
||||||
native readonly Weapon WP_NOCHANGE;
|
native readonly Weapon WP_NOCHANGE;
|
||||||
native int LocalViewPitch;
|
|
||||||
native ui readonly LevelLocals currentUILevel;
|
|
||||||
deprecated("3.8") native readonly bool globalfreeze;
|
deprecated("3.8") native readonly bool globalfreeze;
|
||||||
|
native int LocalViewPitch;
|
||||||
|
|
||||||
|
// sandbox state in multi-level setups:
|
||||||
|
|
||||||
|
native play @PlayerInfo players[MAXPLAYERS];
|
||||||
|
native readonly bool playeringame[MAXPLAYERS];
|
||||||
|
native readonly int consoleplayer;
|
||||||
|
native play LevelLocals Level;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TexMan
|
struct TexMan
|
||||||
|
|
|
@ -97,15 +97,15 @@ struct Side native play
|
||||||
|
|
||||||
int GetUDMFInt(Name nm)
|
int GetUDMFInt(Name nm)
|
||||||
{
|
{
|
||||||
return sector.Level.GetUDMFInt(LevelLocals.UDMF_Side, Index(), nm);
|
return Level.GetUDMFInt(LevelLocals.UDMF_Side, Index(), nm);
|
||||||
}
|
}
|
||||||
double GetUDMFFloat(Name nm)
|
double GetUDMFFloat(Name nm)
|
||||||
{
|
{
|
||||||
return sector.Level.GetUDMFFloat(LevelLocals.UDMF_Side, Index(), nm);
|
return Level.GetUDMFFloat(LevelLocals.UDMF_Side, Index(), nm);
|
||||||
}
|
}
|
||||||
String GetUDMFString(Name nm)
|
String GetUDMFString(Name nm)
|
||||||
{
|
{
|
||||||
return sector.Level.GetUDMFString(LevelLocals.UDMF_Side, Index(), nm);
|
return Level.GetUDMFString(LevelLocals.UDMF_Side, Index(), nm);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -180,15 +180,15 @@ struct Line native play
|
||||||
|
|
||||||
int GetUDMFInt(Name nm)
|
int GetUDMFInt(Name nm)
|
||||||
{
|
{
|
||||||
return frontsector.Level.GetUDMFInt(LevelLocals.UDMF_Line, Index(), nm);
|
return Level.GetUDMFInt(LevelLocals.UDMF_Line, Index(), nm);
|
||||||
}
|
}
|
||||||
double GetUDMFFloat(Name nm)
|
double GetUDMFFloat(Name nm)
|
||||||
{
|
{
|
||||||
return frontsector.Level.GetUDMFFloat(LevelLocals.UDMF_Line, Index(), nm);
|
return Level.GetUDMFFloat(LevelLocals.UDMF_Line, Index(), nm);
|
||||||
}
|
}
|
||||||
String GetUDMFString(Name nm)
|
String GetUDMFString(Name nm)
|
||||||
{
|
{
|
||||||
return frontsector.Level.GetUDMFString(LevelLocals.UDMF_Line, Index(), nm);
|
return Level.GetUDMFString(LevelLocals.UDMF_Line, Index(), nm);
|
||||||
}
|
}
|
||||||
|
|
||||||
native clearscope int GetHealth();
|
native clearscope int GetHealth();
|
||||||
|
@ -259,7 +259,6 @@ struct Sector native play
|
||||||
native SectorEffect floordata;
|
native SectorEffect floordata;
|
||||||
native SectorEffect ceilingdata;
|
native SectorEffect ceilingdata;
|
||||||
native SectorEffect lightingdata;
|
native SectorEffect lightingdata;
|
||||||
native readonly LevelLocals Level;
|
|
||||||
|
|
||||||
enum EPlane
|
enum EPlane
|
||||||
{
|
{
|
||||||
|
|
|
@ -509,7 +509,7 @@ class ConversationMenu : Menu
|
||||||
override void Ticker()
|
override void Ticker()
|
||||||
{
|
{
|
||||||
// [CW] Freeze the game depending on MAPINFO options.
|
// [CW] Freeze the game depending on MAPINFO options.
|
||||||
if (ConversationPauseTic < gametic && !multiplayer && !currentUILevel.no_dlg_freeze)
|
if (ConversationPauseTic < gametic && !multiplayer && !Level.no_dlg_freeze)
|
||||||
{
|
{
|
||||||
menuactive = Menu.On;
|
menuactive = Menu.On;
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,9 +57,9 @@ class ReadThisMenu : GenericMenu
|
||||||
TextureID tex, prevpic;
|
TextureID tex, prevpic;
|
||||||
|
|
||||||
// Did the mapper choose a custom help page via MAPINFO?
|
// Did the mapper choose a custom help page via MAPINFO?
|
||||||
if (currentUILevel.F1Pic.Length() != 0)
|
if (Level.F1Pic.Length() != 0)
|
||||||
{
|
{
|
||||||
tex = TexMan.CheckForTexture(currentUILevel.F1Pic, TexMan.Type_MiscPatch);
|
tex = TexMan.CheckForTexture(Level.F1Pic, TexMan.Type_MiscPatch);
|
||||||
mScreen = 1;
|
mScreen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ class ReadThisMenu : GenericMenu
|
||||||
MenuSound("menu/choose");
|
MenuSound("menu/choose");
|
||||||
mScreen++;
|
mScreen++;
|
||||||
mInfoTic = gametic;
|
mInfoTic = gametic;
|
||||||
if (currentUILevel.F1Pic.Length() != 0 || mScreen > gameinfo.infoPages.Size())
|
if (Level.F1Pic.Length() != 0 || mScreen > gameinfo.infoPages.Size())
|
||||||
{
|
{
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -334,13 +334,6 @@ class PlayerPawn : Actor
|
||||||
{
|
{
|
||||||
let player = self.player;
|
let player = self.player;
|
||||||
|
|
||||||
// [SO] 9/2/02: People were able to do an awful lot of damage
|
|
||||||
// when they were observers...
|
|
||||||
if (player.Bot == null && bot_observer)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let weapn = player.ReadyWeapon;
|
let weapn = player.ReadyWeapon;
|
||||||
if (weapn == null || !weapn.CheckAmmo (Weapon.PrimaryFire, true))
|
if (weapn == null || !weapn.CheckAmmo (Weapon.PrimaryFire, true))
|
||||||
{
|
{
|
||||||
|
@ -369,13 +362,6 @@ class PlayerPawn : Actor
|
||||||
|
|
||||||
virtual void FireWeaponAlt (State stat)
|
virtual void FireWeaponAlt (State stat)
|
||||||
{
|
{
|
||||||
// [SO] 9/2/02: People were able to do an awful lot of damage
|
|
||||||
// when they were observers...
|
|
||||||
if (player.Bot == null && bot_observer)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let weapn = player.ReadyWeapon;
|
let weapn = player.ReadyWeapon;
|
||||||
if (weapn == null || weapn.FindState('AltFire') == null || !weapn.CheckAmmo (Weapon.AltFire, true))
|
if (weapn == null || weapn.FindState('AltFire') == null || !weapn.CheckAmmo (Weapon.AltFire, true))
|
||||||
{
|
{
|
||||||
|
|
|
@ -461,7 +461,7 @@ class StatusScreen abstract play version("2.5")
|
||||||
if (cnt == 0)
|
if (cnt == 0)
|
||||||
{
|
{
|
||||||
End();
|
End();
|
||||||
currentUILevel.WorldDone();
|
Level.WorldDone();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -477,7 +477,7 @@ class StatusScreen abstract play version("2.5")
|
||||||
{
|
{
|
||||||
// Last map in episode - there is no next location!
|
// Last map in episode - there is no next location!
|
||||||
End();
|
End();
|
||||||
currentUILevel.WorldDone();
|
Level.WorldDone();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -608,7 +608,7 @@ class StatusScreen abstract play version("2.5")
|
||||||
|
|
||||||
virtual void StartMusic()
|
virtual void StartMusic()
|
||||||
{
|
{
|
||||||
currentUILevel.SetInterMusic(wbs.next);
|
Level.SetInterMusic(wbs.next);
|
||||||
}
|
}
|
||||||
|
|
||||||
//====================================================================
|
//====================================================================
|
||||||
|
@ -706,7 +706,7 @@ class StatusScreen abstract play version("2.5")
|
||||||
Par = TexMan.CheckForTexture("WIPAR", TexMan.Type_MiscPatch); // "par"
|
Par = TexMan.CheckForTexture("WIPAR", TexMan.Type_MiscPatch); // "par"
|
||||||
|
|
||||||
// Use the local level structure which can be overridden by hubs
|
// Use the local level structure which can be overridden by hubs
|
||||||
lnametexts[0] = currentUILevel.LevelName;
|
lnametexts[0] = Level.LevelName;
|
||||||
lnametexts[1] = wbstartstruct.nextname;
|
lnametexts[1] = wbstartstruct.nextname;
|
||||||
|
|
||||||
bg = InterBackground.Create(wbs);
|
bg = InterBackground.Create(wbs);
|
||||||
|
|
|
@ -200,17 +200,17 @@ class AltHud ui
|
||||||
// work in cooperative hub games
|
// work in cooperative hub games
|
||||||
if (hud_showsecrets)
|
if (hud_showsecrets)
|
||||||
{
|
{
|
||||||
DrawStatLine(x, y, "S:", String.Format("%i/%i ", multiplayer? CPlayer.secretcount : currentUILevel.found_secrets, currentUILevel.total_secrets));
|
DrawStatLine(x, y, "S:", String.Format("%i/%i ", multiplayer? CPlayer.secretcount : Level.found_secrets, Level.total_secrets));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hud_showitems)
|
if (hud_showitems)
|
||||||
{
|
{
|
||||||
DrawStatLine(x, y, "I:", String.Format("%i/%i ", multiplayer? CPlayer.itemcount : currentUILevel.found_items, currentUILevel.total_items));
|
DrawStatLine(x, y, "I:", String.Format("%i/%i ", multiplayer? CPlayer.itemcount : Level.found_items, Level.total_items));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hud_showmonsters)
|
if (hud_showmonsters)
|
||||||
{
|
{
|
||||||
DrawStatLine(x, y, "K:", String.Format("%i/%i ", multiplayer? CPlayer.killcount : currentUILevel.killed_monsters, currentUILevel.total_monsters));
|
DrawStatLine(x, y, "K:", String.Format("%i/%i ", multiplayer? CPlayer.killcount : Level.killed_monsters, Level.total_monsters));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -734,18 +734,18 @@ class AltHud ui
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pos.xy = currentUILevel.GetAutomapPosition();
|
pos.xy = Level.GetAutomapPosition();
|
||||||
pos.z = currentUILevel.PointInSector(pos.xy).floorplane.ZatPoint(pos.xy);
|
pos.z = Level.PointInSector(pos.xy).floorplane.ZatPoint(pos.xy);
|
||||||
}
|
}
|
||||||
|
|
||||||
int xpos = hudwidth - SmallFont.StringWidth("X: -00000")-6;
|
int xpos = hudwidth - SmallFont.StringWidth("X: -00000")-6;
|
||||||
int ypos = 18;
|
int ypos = 18;
|
||||||
|
|
||||||
screen.DrawText(SmallFont, hudcolor_titl, hudwidth - 6 - SmallFont.StringWidth(currentUILevel.MapName), ypos, currentUILevel.MapName,
|
screen.DrawText(SmallFont, hudcolor_titl, hudwidth - 6 - SmallFont.StringWidth(Level.MapName), ypos, Level.MapName,
|
||||||
DTA_KeepRatio, true,
|
DTA_KeepRatio, true,
|
||||||
DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight);
|
DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight);
|
||||||
|
|
||||||
screen.DrawText(SmallFont, hudcolor_titl, hudwidth - 6 - SmallFont.StringWidth(currentUILevel.LevelName), ypos + h, currentUILevel.LevelName,
|
screen.DrawText(SmallFont, hudcolor_titl, hudwidth - 6 - SmallFont.StringWidth(Level.LevelName), ypos + h, Level.LevelName,
|
||||||
DTA_KeepRatio, true,
|
DTA_KeepRatio, true,
|
||||||
DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight);
|
DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight);
|
||||||
|
|
||||||
|
@ -788,10 +788,10 @@ class AltHud ui
|
||||||
{
|
{
|
||||||
int timeTicks =
|
int timeTicks =
|
||||||
hud_showtime < 4
|
hud_showtime < 4
|
||||||
? currentUILevel.maptime
|
? Level.maptime
|
||||||
: (hud_showtime < 6
|
: (hud_showtime < 6
|
||||||
? currentUILevel.time
|
? Level.time
|
||||||
: currentUILevel.totaltime);
|
: Level.totaltime);
|
||||||
timeSeconds = Thinker.Tics2Seconds(timeTicks);
|
timeSeconds = Thinker.Tics2Seconds(timeTicks);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -810,7 +810,7 @@ class AltHud ui
|
||||||
|
|
||||||
if (showMillis)
|
if (showMillis)
|
||||||
{
|
{
|
||||||
int millis = (currentUILevel.time % Thinker.TICRATE) * (1000 / Thinker.TICRATE);
|
int millis = (Level.time % Thinker.TICRATE) * (1000 / Thinker.TICRATE);
|
||||||
timeString = String.Format("%02i:%02i:%02i.%03i", hours, minutes, seconds, millis);
|
timeString = String.Format("%02i:%02i:%02i.%03i", hours, minutes, seconds, millis);
|
||||||
}
|
}
|
||||||
else if (showSeconds)
|
else if (showSeconds)
|
||||||
|
@ -941,23 +941,23 @@ class AltHud ui
|
||||||
|
|
||||||
if (am_showtotaltime)
|
if (am_showtotaltime)
|
||||||
{
|
{
|
||||||
DrawTimeString(SmallFont, hudcolor_ttim, currentUILevel.totaltime, hudwidth-2, bottom, 1);
|
DrawTimeString(SmallFont, hudcolor_ttim, Level.totaltime, hudwidth-2, bottom, 1);
|
||||||
bottom -= fonth;
|
bottom -= fonth;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (am_showtime)
|
if (am_showtime)
|
||||||
{
|
{
|
||||||
if (currentUILevel.clusterflags & currentUILevel.CLUSTER_HUB)
|
if (Level.clusterflags & Level.CLUSTER_HUB)
|
||||||
{
|
{
|
||||||
DrawTimeString(SmallFont, hudcolor_time, currentUILevel.time, hudwidth-2, bottom, 1);
|
DrawTimeString(SmallFont, hudcolor_time, Level.time, hudwidth-2, bottom, 1);
|
||||||
bottom -= fonth;
|
bottom -= fonth;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Single level time for hubs
|
// Single level time for hubs
|
||||||
DrawTimeString(SmallFont, hudcolor_ltim, currentUILevel.maptime, hudwidth-2, bottom, 1);
|
DrawTimeString(SmallFont, hudcolor_ltim, Level.maptime, hudwidth-2, bottom, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
screen.DrawText(SmallFont, 0, 1, hudheight - fonth - 1, currentUILevel.FormatMapName(hudcolor_titl),
|
screen.DrawText(SmallFont, 0, 1, hudheight - fonth - 1, Level.FormatMapName(hudcolor_titl),
|
||||||
DTA_KeepRatio, true,
|
DTA_KeepRatio, true,
|
||||||
DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight);
|
DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight);
|
||||||
|
|
||||||
|
|
|
@ -105,7 +105,7 @@ class DoomStatusBar : BaseStatusBar
|
||||||
DrawImage("STFBANY", (143, 168), DI_ITEM_OFFSETS|DI_TRANSLATABLE);
|
DrawImage("STFBANY", (143, 168), DI_ITEM_OFFSETS|DI_TRANSLATABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CPlayer.mo.InvSel != null && !currentUILevel.NoInventoryBar)
|
if (CPlayer.mo.InvSel != null && !Level.NoInventoryBar)
|
||||||
{
|
{
|
||||||
DrawInventoryIcon(CPlayer.mo.InvSel, (160, 198));
|
DrawInventoryIcon(CPlayer.mo.InvSel, (160, 198));
|
||||||
if (CPlayer.mo.InvSel.Amount > 1)
|
if (CPlayer.mo.InvSel.Amount > 1)
|
||||||
|
@ -153,7 +153,7 @@ class DoomStatusBar : BaseStatusBar
|
||||||
DrawString(mHUDFont, FormatNumber(ammotype2.Amount, 3), (-30, invY), DI_TEXT_ALIGN_RIGHT);
|
DrawString(mHUDFont, FormatNumber(ammotype2.Amount, 3), (-30, invY), DI_TEXT_ALIGN_RIGHT);
|
||||||
invY -= 20;
|
invY -= 20;
|
||||||
}
|
}
|
||||||
if (!isInventoryBarVisible() && !currentUILevel.NoInventoryBar && CPlayer.mo.InvSel != null)
|
if (!isInventoryBarVisible() && !Level.NoInventoryBar && CPlayer.mo.InvSel != null)
|
||||||
{
|
{
|
||||||
DrawInventoryIcon(CPlayer.mo.InvSel, (-14, invY + 17));
|
DrawInventoryIcon(CPlayer.mo.InvSel, (-14, invY + 17));
|
||||||
DrawString(mHUDFont, FormatNumber(CPlayer.mo.InvSel.Amount, 3), (-30, invY), DI_TEXT_ALIGN_RIGHT);
|
DrawString(mHUDFont, FormatNumber(CPlayer.mo.InvSel.Amount, 3), (-30, invY), DI_TEXT_ALIGN_RIGHT);
|
||||||
|
|
|
@ -60,7 +60,7 @@ class HarmonyStatusBar : DoomStatusBar
|
||||||
DrawString(mHUDFont, FormatNumber(ammotype2.Amount, 3), (-30, invY), DI_TEXT_ALIGN_RIGHT);
|
DrawString(mHUDFont, FormatNumber(ammotype2.Amount, 3), (-30, invY), DI_TEXT_ALIGN_RIGHT);
|
||||||
invY -= 20;
|
invY -= 20;
|
||||||
}
|
}
|
||||||
if (!isInventoryBarVisible() && !currentUILevel.NoInventoryBar && CPlayer.mo.InvSel != null)
|
if (!isInventoryBarVisible() && !Level.NoInventoryBar && CPlayer.mo.InvSel != null)
|
||||||
{
|
{
|
||||||
DrawInventoryIcon(CPlayer.mo.InvSel, (-14, invY + 17));
|
DrawInventoryIcon(CPlayer.mo.InvSel, (-14, invY + 17));
|
||||||
DrawString(mHUDFont, FormatNumber(CPlayer.mo.InvSel.Amount, 3), (-30, invY), DI_TEXT_ALIGN_RIGHT);
|
DrawString(mHUDFont, FormatNumber(CPlayer.mo.InvSel.Amount, 3), (-30, invY), DI_TEXT_ALIGN_RIGHT);
|
||||||
|
|
|
@ -43,7 +43,7 @@ class HereticStatusBar : BaseStatusBar
|
||||||
mHealthInterpolator.Update(CPlayer.health);
|
mHealthInterpolator.Update(CPlayer.health);
|
||||||
|
|
||||||
// wiggle the chain if it moves
|
// wiggle the chain if it moves
|
||||||
if (currentUILevel.time & 1)
|
if (Level.time & 1)
|
||||||
{
|
{
|
||||||
wiggle = (mHealthInterpolator.GetValue() != CPlayer.health) && Random[ChainWiggle](0, 1);
|
wiggle = (mHealthInterpolator.GetValue() != CPlayer.health) && Random[ChainWiggle](0, 1);
|
||||||
}
|
}
|
||||||
|
@ -200,7 +200,7 @@ class HereticStatusBar : BaseStatusBar
|
||||||
y -= 40;
|
y -= 40;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isInventoryBarVisible() && !currentUILevel.NoInventoryBar && CPlayer.mo.InvSel != null)
|
if (!isInventoryBarVisible() && !Level.NoInventoryBar && CPlayer.mo.InvSel != null)
|
||||||
{
|
{
|
||||||
// This code was changed to always fit the item into the box, regardless of alignment or sprite size.
|
// This code was changed to always fit the item into the box, regardless of alignment or sprite size.
|
||||||
// Heretic's ARTIBOX is 30x30 pixels.
|
// Heretic's ARTIBOX is 30x30 pixels.
|
||||||
|
|
|
@ -74,7 +74,7 @@ class HexenStatusBar : BaseStatusBar
|
||||||
DrawString(mHUDFont, FormatNumber(CPlayer.FragCount, 3), (70, -16));
|
DrawString(mHUDFont, FormatNumber(CPlayer.FragCount, 3), (70, -16));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isInventoryBarVisible() && !currentUILevel.NoInventoryBar && CPlayer.mo.InvSel != null)
|
if (!isInventoryBarVisible() && !Level.NoInventoryBar && CPlayer.mo.InvSel != null)
|
||||||
{
|
{
|
||||||
// This code was changed to always fit the item into the box, regardless of alignment or sprite size.
|
// This code was changed to always fit the item into the box, regardless of alignment or sprite size.
|
||||||
// Heretic's ARTIBOX is 30x30 pixels.
|
// Heretic's ARTIBOX is 30x30 pixels.
|
||||||
|
|
|
@ -597,9 +597,9 @@ class BaseStatusBar native ui
|
||||||
int GetAirTime()
|
int GetAirTime()
|
||||||
{
|
{
|
||||||
if(CPlayer.mo.waterlevel < 3)
|
if(CPlayer.mo.waterlevel < 3)
|
||||||
return currentUILevel.airsupply;
|
return Level.airsupply;
|
||||||
else
|
else
|
||||||
return max(CPlayer.air_finished - currentUILevel.time, 0);
|
return max(CPlayer.air_finished - Level.time, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetSelectedInventoryAmount()
|
int GetSelectedInventoryAmount()
|
||||||
|
@ -654,7 +654,7 @@ class BaseStatusBar native ui
|
||||||
bool isInventoryBarVisible()
|
bool isInventoryBarVisible()
|
||||||
{
|
{
|
||||||
if (CPlayer == null) return false;
|
if (CPlayer == null) return false;
|
||||||
return (CPlayer.inventorytics > 0 && !currentUILevel.NoInventoryBar);
|
return (CPlayer.inventorytics > 0 && !Level.NoInventoryBar);
|
||||||
}
|
}
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
@ -850,13 +850,13 @@ class BaseStatusBar native ui
|
||||||
let width = SmallFont.StringWidth("00:00:00");
|
let width = SmallFont.StringWidth("00:00:00");
|
||||||
if (am_showtime)
|
if (am_showtime)
|
||||||
{
|
{
|
||||||
printtext = currentUILevel.TimeFormatted();
|
printtext = Level.TimeFormatted();
|
||||||
DrawString(mSmallFont, currentUILevel.TimeFormatted(), (-textdist-width, y), 0, crdefault);
|
DrawString(mSmallFont, Level.TimeFormatted(), (-textdist-width, y), 0, crdefault);
|
||||||
y += height;
|
y += height;
|
||||||
}
|
}
|
||||||
if (am_showtotaltime)
|
if (am_showtotaltime)
|
||||||
{
|
{
|
||||||
DrawString(mSmallFont, currentUILevel.TimeFormatted(true), (-textdist-width, y), 0, crdefault);
|
DrawString(mSmallFont, Level.TimeFormatted(true), (-textdist-width, y), 0, crdefault);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!deathmatch)
|
if (!deathmatch)
|
||||||
|
@ -866,25 +866,25 @@ class BaseStatusBar native ui
|
||||||
// Draw monster count
|
// Draw monster count
|
||||||
if (am_showmonsters)
|
if (am_showmonsters)
|
||||||
{
|
{
|
||||||
DrawString(mSmallFont, String.Format("%s\34%c %d/%d", Stringtable.Localize("$AM_MONSTERS"), crdefault+65, currentUILevel.killed_monsters, currentUILevel.total_monsters), (textdist, y), 0, highlight);
|
DrawString(mSmallFont, String.Format("%s\34%c %d/%d", Stringtable.Localize("$AM_MONSTERS"), crdefault+65, Level.killed_monsters, Level.total_monsters), (textdist, y), 0, highlight);
|
||||||
y += height;
|
y += height;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw secret count
|
// Draw secret count
|
||||||
if (am_showsecrets)
|
if (am_showsecrets)
|
||||||
{
|
{
|
||||||
DrawString(mSmallFont, String.Format("%s\34%c %d/%d", Stringtable.Localize("$AM_SECRETS"), crdefault+65, currentUILevel.found_secrets, currentUILevel.total_secrets), (textdist, y), 0, highlight);
|
DrawString(mSmallFont, String.Format("%s\34%c %d/%d", Stringtable.Localize("$AM_SECRETS"), crdefault+65, Level.found_secrets, Level.total_secrets), (textdist, y), 0, highlight);
|
||||||
y += height;
|
y += height;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw item count
|
// Draw item count
|
||||||
if (am_showitems)
|
if (am_showitems)
|
||||||
{
|
{
|
||||||
DrawString(mSmallFont, String.Format("%s\34%c %d/%d", Stringtable.Localize("$AM_ITEMS"), crdefault+65, currentUILevel.found_items, currentUILevel.total_items), (textdist, y), 0, highlight);
|
DrawString(mSmallFont, String.Format("%s\34%c %d/%d", Stringtable.Localize("$AM_ITEMS"), crdefault+65, Level.found_items, Level.total_items), (textdist, y), 0, highlight);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String mapname = currentUILevel.FormatMapName(crdefault);
|
String mapname = Level.FormatMapName(crdefault);
|
||||||
BrokenLines lines = SmallFont.BreakLines(mapname, int(SCREENWIDTH / scale.X));
|
BrokenLines lines = SmallFont.BreakLines(mapname, int(SCREENWIDTH / scale.X));
|
||||||
int numlines = lines.Count();
|
int numlines = lines.Count();
|
||||||
int finalwidth = int(SmallFont.StringWidth(lines.StringAt(numlines-1)) * scale.X);
|
int finalwidth = int(SmallFont.StringWidth(lines.StringAt(numlines-1)) * scale.X);
|
||||||
|
|
|
@ -427,7 +427,7 @@ class StrifeStatusBar : BaseStatusBar
|
||||||
case POP_Log:
|
case POP_Log:
|
||||||
{
|
{
|
||||||
// Draw the latest log message.
|
// Draw the latest log message.
|
||||||
screen.DrawText(SmallFont2, Font.CR_UNTRANSLATED, left + 210 * xscale, top + 8 * yscale, currentUILevel.TimeFormatted(),
|
screen.DrawText(SmallFont2, Font.CR_UNTRANSLATED, left + 210 * xscale, top + 8 * yscale, Level.TimeFormatted(),
|
||||||
DTA_CleanNoMove, true);
|
DTA_CleanNoMove, true);
|
||||||
|
|
||||||
if (CPlayer.LogText.Length() > 0)
|
if (CPlayer.LogText.Length() > 0)
|
||||||
|
|
Loading…
Reference in a new issue