diff --git a/docs/rh-log.txt b/docs/rh-log.txt index fb7d2acc2..08848d739 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,4 +1,13 @@ February 8, 2008 +- Applied Blzut3's sbarinfo update #11: + * SBarInfo will also accept a '|' between flags for those who are really + bothered by the indefinite "arguments" in the middle of the statement. + * Added: completeBorder. When set to true SBarInfo will draw the border where + the status bar normally goes. + * Fixed: I forgot to accept TK_None on "base" and "statusbar". + * Fixed: "base" was apparently broken when the SBarInfo init code was moved to + d_main.cpp. Also, if "base Strife" was used then it would not use the + default log message of "find help". - Fixed: D_ReadUserInfoString() parsed the final element of a compact string as the empty string. Since that was the player class, this meant that any games with more than one class would pick a random class in multiplayer. diff --git a/src/g_level.cpp b/src/g_level.cpp index 90ceb73eb..f008185ce 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -1547,7 +1547,23 @@ void G_InitNew (const char *mapname, bool bTitleLevel) { int cstype = SBarInfoScript->GetGameType(); - if (cstype == GAME_Any || cstype == gameinfo.gametype) + if(cstype == GAME_Doom) //Did the user specify a "base" + { + StatusBar = CreateDoomStatusBar (); + } + else if(cstype == GAME_Heretic) + { + StatusBar = CreateHereticStatusBar(); + } + else if(cstype == GAME_Hexen) + { + StatusBar = CreateHexenStatusBar(); + } + else if(cstype == GAME_Strife) + { + StatusBar = CreateStrifeStatusBar(); + } + else //Use the default, empty or custom. { StatusBar = CreateCustomStatusBar(); } @@ -1579,7 +1595,7 @@ void G_InitNew (const char *mapname, bool bTitleLevel) StatusBar->NewGame (); setsizeneeded = true; - if (gameinfo.gametype == GAME_Strife) + if (gameinfo.gametype == GAME_Strife || (SBarInfoScript != NULL && SBarInfoScript->GetGameType() == GAME_Strife)) { // Set the initial quest log text for Strife. for (i = 0; i < MAXPLAYERS; ++i) diff --git a/src/g_shared/sbarinfo.cpp b/src/g_shared/sbarinfo.cpp index e0a398730..d79b73f25 100644 --- a/src/g_shared/sbarinfo.cpp +++ b/src/g_shared/sbarinfo.cpp @@ -17,6 +17,7 @@ #include "sc_man.h" #include "gi.h" #include "r_translate.h" +#include "r_main.h" static FRandom pr_chainwiggle; //use the same method of chain wiggling as heretic. @@ -29,6 +30,7 @@ static FRandom pr_chainwiggle; //use the same method of chain wiggling as hereti #define ARTIFLASH_OFFSET (invBarOffset+6) EXTERN_CVAR(Int, fraglimit) +EXTERN_CVAR(Int, screenblocks) SBarInfo *SBarInfoScript; @@ -135,6 +137,7 @@ static const char *SBarInfoTopLevel[] = "base", "height", "interpolatehealth", + "completeborder", "statusbar", NULL }; @@ -143,6 +146,7 @@ enum SBARINFO_BASE, SBARINFO_HEIGHT, SBARINFO_INTERPOLATEHEALTH, + SBARINFO_COMPLETEBORDER, SBARINFO_STATUSBAR, }; @@ -234,7 +238,8 @@ void SBarInfo::ParseSBarInfo(int lump) switch(sc.MustMatchString(SBarInfoTopLevel)) { case SBARINFO_BASE: - sc.MustGetToken(TK_Identifier); + if(!sc.CheckToken(TK_None)) + sc.MustGetToken(TK_Identifier); if(sc.Compare("Doom")) gameType = GAME_Doom; else if(sc.Compare("Heretic")) @@ -261,7 +266,7 @@ void SBarInfo::ParseSBarInfo(int lump) } else { - sc.TokenMustBe(TK_False); + sc.MustGetToken(TK_False); interpolateHealth = false; } if(sc.CheckToken(',')) //speed param @@ -271,10 +276,26 @@ void SBarInfo::ParseSBarInfo(int lump) } sc.MustGetToken(';'); break; + case SBARINFO_COMPLETEBORDER: //draws the border instead of an HOM + if(sc.CheckToken(TK_True)) + { + completeBorder = true; + } + else + { + sc.MustGetToken(TK_False); + completeBorder = false; + } + sc.MustGetToken(';'); + break; case SBARINFO_STATUSBAR: { - sc.MustGetToken(TK_Identifier); - int barNum = sc.MustMatchString(StatusBars); + int barNum = 0; + if(!sc.CheckToken(TK_None)) + { + sc.MustGetToken(TK_Identifier); + barNum = sc.MustMatchString(StatusBars); + } while(sc.CheckToken(',')) { sc.MustGetToken(TK_Identifier); @@ -529,7 +550,8 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block) cmd.flags += DRAWMUGSHOT_ANIMATEDGODMODE; else sc.ScriptError("Unknown flag '%s'.", sc.String); - sc.MustGetToken(','); + if(!sc.CheckToken('|')) + sc.MustGetToken(','); } this->getCoordinates(sc, cmd); sc.MustGetToken(';'); @@ -561,7 +583,8 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block) sc.MustGetToken(','); break; } - sc.MustGetToken(','); + if(!sc.CheckToken('|')) + sc.MustGetToken(','); } sc.MustGetToken(TK_IntConst); cmd.x = sc.Number; @@ -631,7 +654,8 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block) { sc.ScriptError("Unknown flag '%s'.", sc.String); } - sc.MustGetToken(','); + if(!sc.CheckToken('|')) + sc.MustGetToken(','); } sc.MustGetToken(TK_IntConst); cmd.value = sc.Number; @@ -1014,6 +1038,7 @@ void SBarInfo::Init() { automapbar = false; interpolateHealth = false; + completeBorder = false; interpolationSpeed = 8; height = 0; } @@ -1241,6 +1266,13 @@ public: int hud = 2; if(state == HUD_StatusBar) { + if(SBarInfoScript->completeBorder) //Fill the statusbar with the border before we draw. + { + FTexture *b = TexMan[gameinfo.border->b]; + R_DrawBorder(viewwindowx, viewwindowy + realviewheight + b->GetHeight(), viewwindowx + realviewwidth, SCREENHEIGHT); + if(screenblocks == 10) + screen->FlatFill(viewwindowx, viewwindowy + realviewheight, viewwindowx + realviewwidth, viewwindowy + realviewheight + b->GetHeight(), b, true); + } if(SBarInfoScript->automapbar && automapactive) { hud = 3; diff --git a/src/g_shared/sbarinfo.h b/src/g_shared/sbarinfo.h index 8caab3a1e..f9fc6f86a 100644 --- a/src/g_shared/sbarinfo.h +++ b/src/g_shared/sbarinfo.h @@ -46,6 +46,7 @@ struct SBarInfo SBarInfoBlock huds[6]; bool automapbar; bool interpolateHealth; + bool completeBorder; int interpolationSpeed; int height; int gameType; diff --git a/wadsrc/sndinfo.txt b/wadsrc/sndinfo.txt index 20873783a..c3f13738a 100644 --- a/wadsrc/sndinfo.txt +++ b/wadsrc/sndinfo.txt @@ -932,6 +932,9 @@ $alias menu/dismiss PlatformStop $alias menu/choose DoorCloseLight $alias menu/clear PlatformStop +// Hexen does not have ripslop sound like Heretic +misc/ripslop dsempty + $limit DoorCloseLight 4 $limit PuppyBeat 0