- consolidated the map name display on startup

Fixes #275
This commit is contained in:
Christoph Oelckers 2020-09-08 18:28:41 +02:00
parent 378846c7bd
commit 8d2d36457f
20 changed files with 85 additions and 102 deletions

View file

@ -63,6 +63,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "choke.h" #include "choke.h"
#include "d_net.h" #include "d_net.h"
#include "v_video.h" #include "v_video.h"
#include "statusbar.h"
BEGIN_BLD_NS BEGIN_BLD_NS
@ -242,7 +243,7 @@ void StartLevel(MapRecord* level)
paused = 0; paused = 0;
levelTryPlayMusic(); levelTryPlayMusic();
gChoke.reset(); gChoke.reset();
Printf(TEXTCOLOR_GOLD "%s: %s\n", level->LabelName(), level->DisplayName()); setLevelStarted(level);
} }

View file

@ -228,23 +228,6 @@ GameStats GameInterface::getStats()
return { gKillMgr.Kills, gKillMgr.TotalKills, gSecretMgr.Founds, gSecretMgr.Total, gFrameCount / kTicsPerSec, gPlayer[myconnectindex].fragCount }; return { gKillMgr.Kills, gKillMgr.TotalKills, gSecretMgr.Founds, gSecretMgr.Total, gFrameCount / kTicsPerSec, gPlayer[myconnectindex].fragCount };
} }
void viewDrawMapTitle(void)
{
if (!hud_showmapname || M_Active())
return;
int const fadeStartTic = kTicsPerSec;
int const fadeEndTic = int(1.5f*kTicsPerSec);
if (gFrameCount > fadeEndTic)
return;
int const alpha = 255 - clamp((gFrameCount-fadeStartTic)*255/(fadeEndTic-fadeStartTic), 0, 255);
if (alpha != 0)
{
viewDrawText(1, currentLevel->DisplayName(), 160, 50, -128, 0, 1, 1, 0, alpha);
}
}
void viewDrawAimedPlayerName(void) void viewDrawAimedPlayerName(void)
{ {
if (!cl_idplayers || (gView->aim.dx == 0 && gView->aim.dy == 0)) if (!cl_idplayers || (gView->aim.dx == 0 && gView->aim.dy == 0))
@ -411,19 +394,9 @@ void viewSetMessage(const char *pMessage, const int pal, const MESSAGE_PRIORITY
Printf(printlevel|PRINT_NOTIFY, "%s\n", pMessage); Printf(printlevel|PRINT_NOTIFY, "%s\n", pMessage);
} }
char errMsg[256];
void viewSetErrorMessage(const char *pMessage) void viewSetErrorMessage(const char *pMessage)
{ {
if (!pMessage) Printf(PRINT_BOLD|PRINT_NOTIFY, "%s\n", pMessage);
{
strcpy(errMsg, "");
}
else
{
strcpy(errMsg, pMessage);
}
} }
void DoLensEffect(void) void DoLensEffect(void)
@ -1014,7 +987,6 @@ void viewDrawScreen(bool sceneonly)
} }
#endif #endif
viewDrawMapTitle();
viewDrawAimedPlayerName(); viewDrawAimedPlayerName();
if (paused) if (paused)
{ {
@ -1025,10 +997,6 @@ void viewDrawScreen(bool sceneonly)
FStringf gTempStr("] %s [", gProfile[gView->nPlayer].name); FStringf gTempStr("] %s [", gProfile[gView->nPlayer].name);
viewDrawText(0, gTempStr, 160, 10, 0, 0, 1, 0); viewDrawText(0, gTempStr, 160, 10, 0, 0, 1, 0);
} }
if (errMsg[0])
{
viewDrawText(0, errMsg, 160, 20, 0, 0, 1, 0);
}
if (cl_interpolate) if (cl_interpolate)
{ {
RestoreInterpolations(); RestoreInterpolations();
@ -1041,22 +1009,12 @@ bool GameInterface::GenerateSavePic()
return true; return true;
} }
#define LOW_FPS 60
#define SLOW_FRAME_TIME 20
#if defined GEKKO
# define FPS_YOFFSET 16
#else
# define FPS_YOFFSET 0
#endif
FString GameInterface::GetCoordString() FString GameInterface::GetCoordString()
{ {
FString out; FString out;
out.Format("pos= %d, %d, %d - angle = %2.3f", out.Format("pos= %d, %d, %d - angle = %2.3f",
gMe->pSprite->x, gMe->pSprite->y, gMe->pSprite->z, gMe->pSprite->ang); gMe->pSprite->x, gMe->pSprite->y, gMe->pSprite->z, gMe->pSprite->ang * (360./2048));
return out; return out;
} }

View file

@ -1017,12 +1017,12 @@ void NetUpdate (void)
int mod = maketic - ticdup; int mod = maketic - ticdup;
int modp, j; int modp, j;
int svel; int svel = 0;
int fvel; int fvel = 0;
int64_t q16avel; int64_t q16avel = 0;
int64_t q16horz; int64_t q16horz = 0;
int64_t q16horiz; // only used by SW int64_t q16horiz = 0; // only used by SW
int64_t q16ang; // only used by SW int64_t q16ang = 0; // only used by SW
for (j = 0; j < ticdup; ++j) for (j = 0; j < ticdup; ++j)
{ {

View file

@ -84,6 +84,8 @@
#include "build.h" #include "build.h"
#include "g_input.h" #include "g_input.h"
#include "mapinfo.h" #include "mapinfo.h"
#include "automap.h"
#include "statusbar.h"
CVAR(Bool, vid_activeinbackground, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) CVAR(Bool, vid_activeinbackground, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
CVAR(Bool, r_ticstability, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) CVAR(Bool, r_ticstability, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
@ -292,6 +294,7 @@ static void GameTicker()
gameupdatetime.Reset(); gameupdatetime.Reset();
gameupdatetime.Clock(); gameupdatetime.Clock();
gi->Ticker(); gi->Ticker();
levelTextTime--;
gameupdatetime.Unclock(); gameupdatetime.Unclock();
break; break;
@ -348,6 +351,7 @@ void Display()
twodpsp.SetSize(screen->GetWidth(), screen->GetHeight()); twodpsp.SetSize(screen->GetWidth(), screen->GetHeight());
gi->Render(); gi->Render();
DrawFullscreenBlends(); DrawFullscreenBlends();
drawMapTitle();
break; break;
} }
[[fallthrough]]; [[fallthrough]];

View file

@ -52,6 +52,7 @@
#include "raze_sound.h" #include "raze_sound.h"
#include "gamestruct.h" #include "gamestruct.h"
#include "automap.h" #include "automap.h"
#include "statusbar.h"
static CompositeSavegameWriter savewriter; static CompositeSavegameWriter savewriter;
static FResourceFile *savereader; static FResourceFile *savereader;
@ -75,6 +76,7 @@ static void SerializeSession(FSerializer& arc)
quoteMgr.Serialize(arc); quoteMgr.Serialize(arc);
S_SerializeSounds(arc); S_SerializeSounds(arc);
SerializeAutomap(arc); SerializeAutomap(arc);
SerializeHud(arc);
} }
//============================================================================= //=============================================================================
@ -189,16 +191,17 @@ bool OpenSaveGameForWrite(const char* filename, const char *name)
auto savesig = gi->GetSaveSig(); auto savesig = gi->GetSaveSig();
auto gs = gi->getStats(); auto gs = gi->getStats();
FStringf timeStr("%02d:%02d", gs.timesecnd / 60, gs.timesecnd % 60); FStringf timeStr("%02d:%02d", gs.timesecnd / 60, gs.timesecnd % 60);
auto lev = currentLevel;
savegameinfo.AddString("Software", buf) savegameinfo.AddString("Software", buf)
("Save Version", savesig.currentsavever) ("Save Version", savesig.currentsavever)
.AddString("Engine", savesig.savesig) .AddString("Engine", savesig.savesig)
.AddString("Game Resource", fileSystem.GetResourceFileName(1)) .AddString("Game Resource", fileSystem.GetResourceFileName(1))
.AddString("Map Name", currentLevel->DisplayName()) .AddString("Map Name", lev->DisplayName())
.AddString("Creation Time", myasctime()) .AddString("Creation Time", myasctime())
.AddString("Title", name) .AddString("Title", name)
.AddString("Map File", currentLevel->fileName) .AddString("Map File", lev->fileName)
.AddString("Map Label", currentLevel->labelName) .AddString("Map Label", lev->labelName)
.AddString("Map Time", timeStr); .AddString("Map Time", timeStr);
const char *fn = currentLevel->fileName; const char *fn = currentLevel->fileName;

View file

@ -762,11 +762,12 @@ void DBaseStatusBar::PrintLevelStats(FLevelStats &stats)
void DBaseStatusBar::PrintAutomapInfo(FLevelStats& stats) void DBaseStatusBar::PrintAutomapInfo(FLevelStats& stats)
{ {
auto lev = currentLevel;
FString mapname; FString mapname;
if (am_showlabel) if (am_showlabel)
mapname.Format(TEXTCOLOR_ESCAPESTR "%c%s: " TEXTCOLOR_ESCAPESTR "%c%s", stats.letterColor+'A', currentLevel->LabelName(), stats.standardColor+'A', currentLevel->DisplayName()); mapname.Format(TEXTCOLOR_ESCAPESTR "%c%s: " TEXTCOLOR_ESCAPESTR "%c%s", stats.letterColor+'A', lev->LabelName(), stats.standardColor+'A', lev->DisplayName());
else else
mapname = currentLevel->DisplayName(); mapname = lev->DisplayName();
double y; double y;
double scale = stats.fontscale * (am_textfont? *hud_statscale : 1); // the tiny default font used by all games here cannot be scaled for readability purposes. double scale = stats.fontscale * (am_textfont? *hud_statscale : 1); // the tiny default font used by all games here cannot be scaled for readability purposes.
@ -784,13 +785,13 @@ void DBaseStatusBar::PrintAutomapInfo(FLevelStats& stats)
{ {
y = 200 - stats.screenbottomspace - spacing; y = 200 - stats.screenbottomspace - spacing;
} }
const auto &volname = gVolumeNames[volfromlevelnum(currentLevel->levelNumber)]; const auto &volname = gVolumeNames[volfromlevelnum(lev->levelNumber)];
if (volname.IsEmpty() && am_nameontop) y = 1; if (volname.IsEmpty() && am_nameontop) y = 1;
DrawText(twod, stats.font, stats.standardColor, 2 * hud_statscale, y, mapname, DTA_FullscreenScale, FSMode_ScaleToHeight, DTA_VirtualWidth, 320, DTA_VirtualHeight, 200, DrawText(twod, stats.font, stats.standardColor, 2 * hud_statscale, y, mapname, DTA_FullscreenScale, FSMode_ScaleToHeight, DTA_VirtualWidth, 320, DTA_VirtualHeight, 200,
DTA_ScaleX, scale, DTA_ScaleY, scale, DTA_KeepRatio, true, TAG_DONE); DTA_ScaleX, scale, DTA_ScaleY, scale, DTA_KeepRatio, true, TAG_DONE);
y -= spacing; y -= spacing;
if (!(currentLevel->flags & MI_USERMAP) && !(g_gameType & GAMEFLAG_PSEXHUMED) && volname.IsNotEmpty()) if (!(lev->flags & MI_USERMAP) && !(g_gameType & GAMEFLAG_PSEXHUMED) && volname.IsNotEmpty())
DrawText(twod, stats.font, stats.standardColor, 2 * hud_statscale, y, GStrings.localize(volname), DrawText(twod, stats.font, stats.standardColor, 2 * hud_statscale, y, GStrings.localize(volname),
DTA_FullscreenScale, FSMode_ScaleToHeight, DTA_VirtualWidth, 320, DTA_VirtualHeight, 200, DTA_FullscreenScale, FSMode_ScaleToHeight, DTA_VirtualWidth, 320, DTA_VirtualHeight, 200,
DTA_ScaleX, scale, DTA_ScaleY, scale, DTA_KeepRatio, true, TAG_DONE); DTA_ScaleX, scale, DTA_ScaleY, scale, DTA_KeepRatio, true, TAG_DONE);
@ -857,4 +858,51 @@ void setViewport(int viewSize)
videoSetViewableArea(x0, y0, x1, y1); videoSetViewableArea(x0, y0, x1, y1);
} }
//============================================================================
//
//
//
//============================================================================
int levelTextTime;
void SerializeHud(FSerializer &arc)
{
if (arc.BeginObject("hud"))
{
arc("texttimer", levelTextTime)
.EndObject();
}
}
void setLevelStarted(MapRecord *mi)
{
levelTextTime = 85;
Printf(TEXTCOLOR_GOLD "%s: %s\n", mi->LabelName(), mi->DisplayName());
}
void drawMapTitle()
{
if (!hud_showmapname || levelTextTime <= 0 || M_Active())
return;
double alpha = levelTextTime > 16? 1.0 : levelTextTime / 16.;
if (alpha > 0)
{
double scale = (g_gameType & GAMEFLAG_RRALL)? 0.4 : (g_gameType & GAMEFLAG_SW)? 0.7 : 1.0;
auto text = currentLevel->DisplayName();
double x = 160 - BigFont->StringWidth(text) * scale / 2.;
double y = (g_gameType & GAMEFLAG_BLOOD)? 50 : 100 - BigFont->GetHeight()/2.;
bool shadow = true;
if (shadow)
{
DrawText(twod, BigFont, CR_UNDEFINED, x+1, y+1, text, DTA_FullscreenScale, FSMode_Fit320x200, DTA_Color, 0xff000000, DTA_Alpha, alpha / 2., DTA_ScaleX, scale, DTA_ScaleY, scale, TAG_DONE);
}
DrawText(twod, BigFont, CR_UNDEFINED, x, y, text, DTA_FullscreenScale, FSMode_Fit320x200, DTA_Alpha, alpha, DTA_ScaleX, scale, DTA_ScaleY, scale, TAG_DONE);
}
}

View file

@ -344,5 +344,11 @@ enum DI_Flags
void SBar_DrawString(DBaseStatusBar* self, DHUDFont* font, const FString& string, double x, double y, int flags, int trans, double alpha, int wrapwidth, int linespacing, double scaleX, double scaleY); void SBar_DrawString(DBaseStatusBar* self, DHUDFont* font, const FString& string, double x, double y, int flags, int trans, double alpha, int wrapwidth, int linespacing, double scaleX, double scaleY);
void setViewport(int viewSize); void setViewport(int viewSize);
struct MapRecord;
void setLevelStarted(MapRecord *);
void drawMapTitle();
class FSerializer;
void SerializeHud(FSerializer &arc);
extern int levelTextTime;
#endif /* __SBAR_H__ */ #endif /* __SBAR_H__ */

View file

@ -83,7 +83,6 @@ extern int SectDepth[];
extern short SectSoundSect[]; extern short SectSoundSect[];
extern int SectAbove[]; extern int SectAbove[];
uint8_t LoadLevel(int nMap);
void LoadObjects(); void LoadObjects();
// light // light

View file

@ -31,6 +31,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "status.h" #include "status.h"
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "statusbar.h"
BEGIN_PS_NS BEGIN_PS_NS
@ -78,7 +79,6 @@ uint8_t LoadLevel(int nMap)
initspritelists(); initspritelists();
currentLevel = FindMapByLevelNum(nMap);
// init stuff // init stuff
{ {
@ -177,10 +177,10 @@ uint8_t LoadLevel(int nMap)
void InitLevel(int level) // todo: use a map record void InitLevel(int level) // todo: use a map record
{ {
StopCD(); StopCD();
currentLevel = FindMapByLevelNum(level);
if (!LoadLevel(level)) { if (!LoadLevel(level)) {
I_Error("Can't load level %d...\n", level); I_Error("Can't load level %d...\n", level);
} }
currentLevel = FindMapByLevelNum(level);
for (int i = 0; i < nTotalPlayers; i++) for (int i = 0; i < nTotalPlayers; i++)
{ {
@ -207,7 +207,7 @@ void InitLevel(int level) // todo: use a map record
if (nTrack != 0) nTrack--; if (nTrack != 0) nTrack--;
playCDtrack((nTrack % 8) + 11, true); playCDtrack((nTrack % 8) + 11, true);
setLevelStarted(currentLevel);
} }
void InitNewGame() void InitNewGame()

View file

@ -1082,9 +1082,4 @@ void PrintPaused_d()
BigText(160, 100, GStrings("Game Paused")); BigText(160, 100, GStrings("Game Paused"));
} }
void PrintLevelName_d(double alpha)
{
BigText(160, 114, currentLevel->DisplayName(), alpha);
}
END_DUKE_NS END_DUKE_NS

View file

@ -641,10 +641,5 @@ void PrintPaused_r()
BigText(160, 100, GStrings("Game Paused"), 0); BigText(160, 100, GStrings("Game Paused"), 0);
} }
void PrintLevelName_r(double alpha)
{
BigText(160, 114, currentLevel->DisplayName(), 0, alpha);
}
END_DUKE_NS END_DUKE_NS

View file

@ -84,9 +84,6 @@ void GameInterface::Ticker()
} }
} }
if (levelTextTime > 0)
levelTextTime--;
fi.think(); fi.think();
if ((everyothertime & 1) == 0) if ((everyothertime & 1) == 0)

View file

@ -76,7 +76,6 @@ int rtsplaying;
int tempwallptr; int tempwallptr;
weaponhit hittype[MAXSPRITES]; weaponhit hittype[MAXSPRITES];
bool sound445done; // this was local state inside a function, but this must be maintained globally and serialized bool sound445done; // this was local state inside a function, but this must be maintained globally and serialized
int levelTextTime; // must be serialized
uint16_t frags[MAXPLAYERS][MAXPLAYERS]; uint16_t frags[MAXPLAYERS][MAXPLAYERS];
player_struct ps[MAXPLAYERS]; player_struct ps[MAXPLAYERS];
int spriteqamount = 64; int spriteqamount = 64;

View file

@ -62,7 +62,6 @@ extern int rtsplaying;
extern int tempwallptr; extern int tempwallptr;
extern weaponhit hittype[MAXSPRITES]; extern weaponhit hittype[MAXSPRITES];
extern bool sound445done; extern bool sound445done;
extern int levelTextTime;
extern uint16_t frags[MAXPLAYERS][MAXPLAYERS]; extern uint16_t frags[MAXPLAYERS][MAXPLAYERS];
extern player_struct ps[MAXPLAYERS]; extern player_struct ps[MAXPLAYERS];
extern int spriteqamount; extern int spriteqamount;

View file

@ -749,7 +749,6 @@ void resettimevars(void)
{ {
cloudclock = 0; cloudclock = 0;
ud.levelclock = 0; ud.levelclock = 0;
levelTextTime = 85;
if (camsprite >= 0) if (camsprite >= 0)
hittype[camsprite].temp_data[0] = 0; hittype[camsprite].temp_data[0] = 0;
} }
@ -872,7 +871,7 @@ static int LoadTheMap(MapRecord *mi, struct player_struct *p, int gamemode)
return 1; return 1;
} }
currentLevel = mi; currentLevel = mi;
SECRET_SetMapName(currentLevel->DisplayName(), currentLevel->name); SECRET_SetMapName(mi->DisplayName(), mi->name);
STAT_NewLevel(mi->fileName); STAT_NewLevel(mi->fileName);
G_LoadMapHack(mi->fileName); G_LoadMapHack(mi->fileName);
@ -990,7 +989,7 @@ int enterlevel(MapRecord *mi, int gamemode)
ps[myconnectindex].over_shoulder_on = 0; ps[myconnectindex].over_shoulder_on = 0;
clearfrags(); clearfrags();
resettimevars(); // Here we go resettimevars(); // Here we go
Printf(TEXTCOLOR_GOLD "%s: %s\n", mi->LabelName(), mi->DisplayName()); setLevelStarted(mi);
return 0; return 0;
} }

View file

@ -408,7 +408,6 @@ void GameInterface::SerializeGameState(FSerializer& arc)
("rtsplaying", rtsplaying) ("rtsplaying", rtsplaying)
("tempwallptr", tempwallptr) ("tempwallptr", tempwallptr)
("sound445done", sound445done) ("sound445done", sound445done)
("leveltexttime", levelTextTime)
.Array("players", ps, ud.multimode) .Array("players", ps, ud.multimode)
("spriteqamount", spriteqamount) ("spriteqamount", spriteqamount)
.Array("shadedsector", shadedsector, numsectors) .Array("shadedsector", shadedsector, numsectors)

View file

@ -27,7 +27,6 @@ public:
}; };
extern int levelTextTime;
void DrawBorder(); void DrawBorder();
END_DUKE_NS END_DUKE_NS

View file

@ -440,7 +440,6 @@ public:
}; };
void PrintLevelName_d(double alpha);
void drawstatusbar_d(int snum) void drawstatusbar_d(int snum)
{ {
@ -453,16 +452,6 @@ void drawstatusbar_d(int snum)
{ {
dsb.Statusbar(snum); dsb.Statusbar(snum);
} }
if (hud_showmapname && levelTextTime > 1 && !M_Active())
{
double alpha;
if (levelTextTime > 16) alpha = 1.;
else alpha = (levelTextTime) / 16.;
PrintLevelName_d(alpha);
}
} }
END_DUKE_NS END_DUKE_NS

View file

@ -457,15 +457,6 @@ void drawstatusbar_r(int snum)
{ {
dsb.Statusbar(snum); dsb.Statusbar(snum);
} }
if (hud_showmapname && levelTextTime > 1 && !M_Active())
{
double alpha;
if (levelTextTime > 16) alpha = 1.;
else alpha = (levelTextTime) / 16.;
PrintLevelName_r(alpha);
}
} }
END_DUKE_NS END_DUKE_NS

View file

@ -43,6 +43,7 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
#include "network.h" #include "network.h"
#include "pal.h" #include "pal.h"
#include "automap.h" #include "automap.h"
#include "statusbar.h"
#include "mytypes.h" #include "mytypes.h"
@ -391,6 +392,7 @@ void InitLevel(MapRecord *maprec)
// reset NewGame // reset NewGame
NewGame = false; NewGame = false;
setLevelStarted(maprec);
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------