- Added SBARINFO update #5 by blzut3:

- Fixed: Playerclass still didn't work due to comparing of improper numbers.
    - Fixed: The arrows on drawinventorybar had a hard coded location instead of
      relative to the specified coordinates.
    - Added noarrows flag to drawinventorybar to remove the blue arrows drawn when
      there are more items to the left or right of the viewable bar.
    - Added forcescaled flag to the statusbar command.  This is ignored on the
      inventory and inventoryfullscreen types.
- Added obituary fix for Strife peasants by Karate Chris.
- Added fix for loading during demo playback by Karate Chris.


SVN r672 (trunk)
This commit is contained in:
Christoph Oelckers 2008-01-06 19:10:52 +00:00
parent d7add9ce76
commit 1f0fa7c457
5 changed files with 61 additions and 13 deletions

View file

@ -1,4 +1,14 @@
January 6, 2008 (Changes by Graf Zahl) January 6, 2008 (Changes by Graf Zahl)
- Added SBARINFO update #5 by blzut3:
- Fixed: Playerclass still didn't work due to comparing of improper numbers.
- Fixed: The arrows on drawinventorybar had a hard coded location instead of
relative to the specified coordinates.
- Added noarrows flag to drawinventorybar to remove the blue arrows drawn when
there are more items to the left or right of the viewable bar.
- Added forcescaled flag to the statusbar command. This is ignored on the
inventory and inventoryfullscreen types.
- Added obituary fix for Strife peasants by Karate Chris.
- Added fix for loading during demo playback by Karate Chris.
- Added scoreboard fix by Karate Chris. - Added scoreboard fix by Karate Chris.
- Added teamgame fix for menu by Karate Chris. - Added teamgame fix for menu by Karate Chris.
- Added GZDoom's Sector_Outside sector type which forces outside fog - Added GZDoom's Sector_Outside sector type which forces outside fog

View file

@ -1689,6 +1689,7 @@ void G_DoLoadGame ()
char *map; char *map;
gameaction = ga_nothing; gameaction = ga_nothing;
demoplayback = false;
FILE *stdfile = fopen (savename.GetChars(), "rb"); FILE *stdfile = fopen (savename.GetChars(), "rb");
if (stdfile == NULL) if (stdfile == NULL)

View file

@ -32,6 +32,11 @@ EXTERN_CVAR(Int, fraglimit)
SBarInfo *SBarInfoScript; SBarInfo *SBarInfoScript;
enum //statusbar flags
{
STATUSBARFLAG_FORCESCALED = 1,
};
enum //gametype flags enum //gametype flags
{ {
GAMETYPE_SINGLEPLAYER = 1, GAMETYPE_SINGLEPLAYER = 1,
@ -82,6 +87,7 @@ enum //drawinventorybar flags
{ {
DRAWINVENTORYBAR_ALWAYSSHOW = 1, DRAWINVENTORYBAR_ALWAYSSHOW = 1,
DRAWINVENTORYBAR_NOARTIBOX = 2, DRAWINVENTORYBAR_NOARTIBOX = 2,
DRAWINVENTORYBAR_NOARROWS = 4,
}; };
enum //drawgem flags enum //drawgem flags
@ -228,6 +234,18 @@ int SBarInfo::ParseSBarInfo(int lump)
{ {
SC_MustGetToken(TK_Identifier); SC_MustGetToken(TK_Identifier);
int barNum = SC_MustMatchString(StatusBars); int barNum = SC_MustMatchString(StatusBars);
while(SC_CheckToken(','))
{
SC_MustGetToken(TK_Identifier);
if(SC_Compare("forcescaled"))
{
this->huds[barNum].forceScaled = true;
}
else
{
SC_ScriptError("Unkown flag '%s'.", sc_String);
}
}
SC_MustGetToken('{'); SC_MustGetToken('{');
if(barNum == STBAR_AUTOMAP) if(barNum == STBAR_AUTOMAP)
{ {
@ -526,6 +544,10 @@ void SBarInfo::ParseSBarInfoBlock(SBarInfoBlock &block)
{ {
cmd.flags += DRAWINVENTORYBAR_NOARTIBOX; cmd.flags += DRAWINVENTORYBAR_NOARTIBOX;
} }
else if(SC_Compare("noarrows"))
{
cmd.flags += DRAWINVENTORYBAR_NOARROWS;
}
else else
{ {
SC_ScriptError("Unknown flag '%s'.", sc_String); SC_ScriptError("Unknown flag '%s'.", sc_String);
@ -763,11 +785,11 @@ void SBarInfo::ParseSBarInfoBlock(SBarInfoBlock &block)
{ {
foundClass = true; foundClass = true;
if(i == 0) if(i == 0)
cmd.special = c; cmd.special = PlayerClasses[c].Type->ClassIndex;
else if(i == 1) else if(i == 1)
cmd.special2 = c; cmd.special2 = PlayerClasses[c].Type->ClassIndex;
else //should be 2 else //should be 2
cmd.special3 = c; cmd.special3 = PlayerClasses[c].Type->ClassIndex;
break; break;
} }
} }
@ -868,6 +890,11 @@ SBarInfoCommand::SBarInfoCommand() //sets the default values for more predicable
font = V_GetFont("CONFONT"); font = V_GetFont("CONFONT");
} }
SBarInfoBlock::SBarInfoBlock()
{
forceScaled = false;
}
enum enum
{ {
ST_FACENORMALRIGHT, ST_FACENORMALRIGHT,
@ -1144,6 +1171,11 @@ public:
{ {
hud = 0; hud = 0;
} }
if(SBarInfoScript->huds[hud].forceScaled) //scale the statusbar
{
SetScaled(true);
setsizeneeded = true;
}
doCommands(SBarInfoScript->huds[hud]); doCommands(SBarInfoScript->huds[hud]);
if(CPlayer->inventorytics > 0 && !(level.flags & LEVEL_NOINVENTORYBAR)) if(CPlayer->inventorytics > 0 && !(level.flags & LEVEL_NOINVENTORYBAR))
{ {
@ -1491,15 +1523,18 @@ private:
{ {
bool alwaysshow = false; bool alwaysshow = false;
bool artibox = true; bool artibox = true;
bool noarrows = false;
if((cmd.flags & DRAWINVENTORYBAR_ALWAYSSHOW)) if((cmd.flags & DRAWINVENTORYBAR_ALWAYSSHOW))
alwaysshow = true; alwaysshow = true;
if((cmd.flags & DRAWINVENTORYBAR_NOARTIBOX)) if((cmd.flags & DRAWINVENTORYBAR_NOARTIBOX))
artibox = false; artibox = false;
if((cmd.flags & DRAWINVENTORYBAR_NOARROWS))
noarrows = true;
if(drawingFont != cmd.font) if(drawingFont != cmd.font)
{ {
drawingFont = cmd.font; drawingFont = cmd.font;
} }
DrawInventoryBar(cmd.special, cmd.value, cmd.x, cmd.y, alwaysshow, cmd.special2, cmd.special3, cmd.translation, artibox); DrawInventoryBar(cmd.special, cmd.value, cmd.x, cmd.y, alwaysshow, cmd.special2, cmd.special3, cmd.translation, artibox, noarrows);
break; break;
} }
case SBARINFO_DRAWBAR: case SBARINFO_DRAWBAR:
@ -1677,7 +1712,7 @@ private:
} }
break; break;
case SBARINFO_PLAYERCLASS: case SBARINFO_PLAYERCLASS:
int spawnClass = CPlayer->GetSpawnClass(); int spawnClass = CPlayer->cls->ClassIndex;
if(cmd.special == spawnClass || cmd.special2 == spawnClass || cmd.special3 == spawnClass) if(cmd.special == spawnClass || cmd.special2 == spawnClass || cmd.special3 == spawnClass)
{ {
doCommands(cmd.subBlock); doCommands(cmd.subBlock);
@ -1855,8 +1890,8 @@ private:
} }
void DrawInventoryBar(int type, int num, int x, int y, bool alwaysshow, void DrawInventoryBar(int type, int num, int x, int y, bool alwaysshow,
int counterx, int countery, EColorRange translation, bool drawArtiboxes) //yes, there is some Copy & Paste here too int counterx, int countery, EColorRange translation, bool drawArtiboxes, bool noArrows)
{ { //yes, there is some Copy & Paste here too
const AInventory *item; const AInventory *item;
int i; int i;
@ -1892,16 +1927,16 @@ private:
DrawImage (Images[invBarOffset + imgARTIBOX], x+i*31, y); DrawImage (Images[invBarOffset + imgARTIBOX], x+i*31, y);
} }
// Is there something to the left? // Is there something to the left?
if (CPlayer->mo->FirstInv() != CPlayer->mo->InvFirst) if (!noArrows && CPlayer->mo->FirstInv() != CPlayer->mo->InvFirst)
{ {
DrawImage (Images[!(gametic & 4) ? DrawImage (Images[!(gametic & 4) ?
invBarOffset + imgINVLFGEM1 : invBarOffset + imgINVLFGEM2], 38, 2); invBarOffset + imgINVLFGEM1 : invBarOffset + imgINVLFGEM2], x-12, y);
} }
// Is there something to the right? // Is there something to the right?
if (item != NULL) if (!noArrows && item != NULL)
{ {
DrawImage (Images[!(gametic & 4) ? DrawImage (Images[!(gametic & 4) ?
invBarOffset + imgINVRTGEM1 : invBarOffset + imgINVRTGEM2], 269, 2); invBarOffset + imgINVRTGEM1 : invBarOffset + imgINVRTGEM2], x+num*31+2, y);
} }
} }
} }

View file

@ -9,6 +9,8 @@ struct SBarInfoCommand; //we need to be able to use this before it is defined.
struct SBarInfoBlock struct SBarInfoBlock
{ {
TArray<SBarInfoCommand> commands; TArray<SBarInfoCommand> commands;
bool forceScaled;
SBarInfoBlock();
}; };
struct SBarInfoCommand struct SBarInfoCommand

View file

@ -654,8 +654,8 @@ OB_ACOLYTE = "%o was zealously shot down by an Acolyte.";
OB_MACIL = "%o should have never rebelled against Macil."; OB_MACIL = "%o should have never rebelled against Macil.";
OB_REBEL = "%o was gunned down by a Rebel."; OB_REBEL = "%o was gunned down by a Rebel.";
OB_BEGGAR = "%o was beaten to death by the poor."; OB_BEGGAR = "%o was beaten to death by the poor.";
OB_PEASANT = "%o should have never picked fights with civilians." OB_PEASANT = "%o should have never picked a fight with a civilian.";
OB_ALIENSPECTE = "%o was struck down by the Spectre"; OB_ALIENSPECTE = "%o was struck down by the Spectre.";
OB_ENTITY = "%o felt the wrath of The One God."; OB_ENTITY = "%o felt the wrath of The One God.";
OB_LOREMASTER = "%o couldn't escape from the Lore Master's grasp."; OB_LOREMASTER = "%o couldn't escape from the Lore Master's grasp.";
OB_PROGRAMMER = "%o was deleted by the Programmer."; OB_PROGRAMMER = "%o was deleted by the Programmer.";