mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-10 14:51:46 +00:00
- Added optional offset parameters to the drawshadow flag.
- Added character alignment parameter to font monospacing. - Fixed: character shadows were not scaled. - Heretic keys now have an icon associated with them so that they can be drawn through drawkeybar. - Replaced the built in Heretic and Hexen status bars with SBarInfo equivalents. SVN r2353 (trunk)
This commit is contained in:
parent
d29123c511
commit
d7686d0c26
14 changed files with 478 additions and 2020 deletions
|
@ -664,9 +664,7 @@ add_executable( zdoom WIN32
|
||||||
zstring.cpp
|
zstring.cpp
|
||||||
g_doom/a_doommisc.cpp
|
g_doom/a_doommisc.cpp
|
||||||
g_heretic/a_hereticmisc.cpp
|
g_heretic/a_hereticmisc.cpp
|
||||||
g_heretic/heretic_sbar.cpp
|
|
||||||
g_hexen/a_hexenmisc.cpp
|
g_hexen/a_hexenmisc.cpp
|
||||||
g_hexen/hexen_sbar.cpp
|
|
||||||
g_raven/a_artitele.cpp
|
g_raven/a_artitele.cpp
|
||||||
g_raven/a_minotaur.cpp
|
g_raven/a_minotaur.cpp
|
||||||
g_strife/a_strifestuff.cpp
|
g_strife/a_strifestuff.cpp
|
||||||
|
|
|
@ -1,795 +0,0 @@
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
#include "doomtype.h"
|
|
||||||
#include "doomstat.h"
|
|
||||||
#include "v_font.h"
|
|
||||||
#include "sbar.h"
|
|
||||||
#include "r_defs.h"
|
|
||||||
#include "w_wad.h"
|
|
||||||
#include "m_random.h"
|
|
||||||
#include "d_player.h"
|
|
||||||
#include "st_stuff.h"
|
|
||||||
#include "v_video.h"
|
|
||||||
#include "r_draw.h"
|
|
||||||
#include "templates.h"
|
|
||||||
#include "a_keys.h"
|
|
||||||
#include "r_translate.h"
|
|
||||||
#include "g_level.h"
|
|
||||||
#include "v_palette.h"
|
|
||||||
|
|
||||||
|
|
||||||
static FRandom pr_chainwiggle;
|
|
||||||
|
|
||||||
// This texture is used to shade each end of the health chain
|
|
||||||
class FHereticShader : public FTexture
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
FHereticShader ();
|
|
||||||
|
|
||||||
const BYTE *GetColumn (unsigned int column, const Span **spans_out);
|
|
||||||
const BYTE *GetPixels ();
|
|
||||||
void Unload ();
|
|
||||||
|
|
||||||
private:
|
|
||||||
static const BYTE Pixels[10*16];
|
|
||||||
static const Span DummySpan[2];
|
|
||||||
};
|
|
||||||
|
|
||||||
static FHereticShader ChainShade;
|
|
||||||
|
|
||||||
const FTexture::Span FHereticShader::DummySpan[2] = { { 0, 10 }, { 0, 0 } };
|
|
||||||
const BYTE FHereticShader::Pixels[10*16] =
|
|
||||||
{
|
|
||||||
254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
|
|
||||||
240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
|
|
||||||
224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
|
|
||||||
208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
|
|
||||||
192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
|
|
||||||
176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
|
|
||||||
160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
|
|
||||||
144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
|
|
||||||
128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
|
||||||
112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
|
|
||||||
96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
|
|
||||||
80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
|
|
||||||
64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
|
|
||||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
|
|
||||||
32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
|
|
||||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
|
||||||
};
|
|
||||||
|
|
||||||
FHereticShader::FHereticShader ()
|
|
||||||
{
|
|
||||||
Width = 16;
|
|
||||||
Height = 10;
|
|
||||||
WidthBits = 4;
|
|
||||||
HeightBits = 4;
|
|
||||||
WidthMask = 15;
|
|
||||||
}
|
|
||||||
|
|
||||||
void FHereticShader::Unload ()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
const BYTE *FHereticShader::GetColumn (unsigned int column, const Span **spans_out)
|
|
||||||
{
|
|
||||||
if (spans_out != NULL)
|
|
||||||
{
|
|
||||||
*spans_out = DummySpan;
|
|
||||||
}
|
|
||||||
return Pixels + 10*(column & 15);
|
|
||||||
}
|
|
||||||
|
|
||||||
const BYTE *FHereticShader::GetPixels ()
|
|
||||||
{
|
|
||||||
return Pixels;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class DHereticStatusBar : public DBaseStatusBar
|
|
||||||
{
|
|
||||||
DECLARE_CLASS(DHereticStatusBar, DBaseStatusBar)
|
|
||||||
HAS_OBJECT_POINTERS
|
|
||||||
public:
|
|
||||||
DHereticStatusBar () : DBaseStatusBar (42)
|
|
||||||
{
|
|
||||||
static const char *hereticLumpNames[NUM_HERETICSB_IMAGES] =
|
|
||||||
{
|
|
||||||
"LTFACE", "RTFACE", "BARBACK", "INVBAR", "CHAIN",
|
|
||||||
NULL, "LIFEGEM2", "LTFCTOP", "RTFCTOP", "SELECTBO",
|
|
||||||
"INVGEML1", "INVGEML2", "INVGEMR1", "INVGEMR2", "BLACKSQ",
|
|
||||||
"ARMCLEAR", "CHAINBACK","GOD1", "GOD2", "USEARTIA",
|
|
||||||
"USEARTIB", "USEARTIC", "USEARTID", "YKEYICON", "GKEYICON",
|
|
||||||
"BKEYICON", "ARTIBOX", "PTN1A0", "PTN1B0", "PTN1C0"
|
|
||||||
};
|
|
||||||
static const char *sharedLumpNames[] =
|
|
||||||
{
|
|
||||||
"LAME", "NEGNUM", "IN0", "IN1", "IN2",
|
|
||||||
"IN3", "IN4", "IN5", "IN6", "IN7",
|
|
||||||
"IN8", "IN9", "FONTB13", "FONTB16", "FONTB17",
|
|
||||||
"FONTB18", "FONTB19", "FONTB20", "FONTB21", "FONTB22",
|
|
||||||
"FONTB23", "FONTB24", "FONTB25", "SMALLIN0", "SMALLIN1",
|
|
||||||
"SMALLIN2", "SMALLIN3", "SMALLIN4", "SMALLIN5", "SMALLIN6",
|
|
||||||
"SMALLIN7", "SMALLIN8", "SMALLIN9"
|
|
||||||
};
|
|
||||||
|
|
||||||
if (deathmatch)
|
|
||||||
{
|
|
||||||
hereticLumpNames[5] = "STATBAR";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
hereticLumpNames[5] = "LIFEBAR";
|
|
||||||
}
|
|
||||||
|
|
||||||
DBaseStatusBar::Images.Init (sharedLumpNames, NUM_BASESB_IMAGES);
|
|
||||||
Images.Init (hereticLumpNames, NUM_HERETICSB_IMAGES);
|
|
||||||
|
|
||||||
oldarti = NULL;
|
|
||||||
oldammo1 = oldammo2 = NULL;
|
|
||||||
oldammocount1 = oldammocount2 = -1;
|
|
||||||
oldartiCount = 0;
|
|
||||||
oldfrags = -9999;
|
|
||||||
oldarmor = -1;
|
|
||||||
oldhealth = -1;
|
|
||||||
oldlife = -1;
|
|
||||||
oldkeys = -1;
|
|
||||||
|
|
||||||
HealthMarker = 0;
|
|
||||||
ChainWiggle = 0;
|
|
||||||
ArtifactFlash = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
~DHereticStatusBar ()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void Tick ()
|
|
||||||
{
|
|
||||||
int curHealth;
|
|
||||||
|
|
||||||
DBaseStatusBar::Tick ();
|
|
||||||
if (level.time & 1)
|
|
||||||
{
|
|
||||||
ChainWiggle = pr_chainwiggle() & 1;
|
|
||||||
}
|
|
||||||
curHealth = CPlayer->health;
|
|
||||||
if (curHealth < 0)
|
|
||||||
{
|
|
||||||
curHealth = 0;
|
|
||||||
}
|
|
||||||
if (curHealth < HealthMarker)
|
|
||||||
{
|
|
||||||
HealthMarker -= clamp ((HealthMarker - curHealth) >> 2, 1, 8);
|
|
||||||
}
|
|
||||||
else if (curHealth > HealthMarker)
|
|
||||||
{
|
|
||||||
HealthMarker += clamp ((curHealth - HealthMarker) >> 2, 1, 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ArtifactFlash > 0)
|
|
||||||
{
|
|
||||||
if (--ArtifactFlash == 0)
|
|
||||||
{
|
|
||||||
ArtiRefresh = screen->GetPageCount ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Draw (EHudState state)
|
|
||||||
{
|
|
||||||
DBaseStatusBar::Draw (state);
|
|
||||||
|
|
||||||
if (state == HUD_Fullscreen)
|
|
||||||
{
|
|
||||||
DrawFullScreenStuff ();
|
|
||||||
SB_state = screen->GetPageCount ();
|
|
||||||
}
|
|
||||||
else if (state == HUD_StatusBar)
|
|
||||||
{
|
|
||||||
if (SB_state > 0)
|
|
||||||
{
|
|
||||||
DrawImage (Images[imgBARBACK], 0, 0);
|
|
||||||
if (CPlayer->cheats&CF_GODMODE)
|
|
||||||
{
|
|
||||||
DrawImage (Images[imgGOD1], 16, 9);
|
|
||||||
DrawImage (Images[imgGOD2], 287, 9);
|
|
||||||
}
|
|
||||||
oldhealth = -1;
|
|
||||||
}
|
|
||||||
DrawCommonBar ();
|
|
||||||
if (CPlayer->inventorytics == 0)
|
|
||||||
{
|
|
||||||
if (SB_state < 0)
|
|
||||||
{
|
|
||||||
SB_state = screen->GetPageCount ();
|
|
||||||
}
|
|
||||||
if (SB_state != 0)
|
|
||||||
{
|
|
||||||
// Main interface
|
|
||||||
SB_state--;
|
|
||||||
DrawImage (Images[imgSTATBAR], 34, 2);
|
|
||||||
oldarti = NULL;
|
|
||||||
oldammo1 = oldammo2 = NULL;
|
|
||||||
oldammocount1 = oldammocount2 = -1;
|
|
||||||
oldarmor = -1;
|
|
||||||
oldfrags = -9999; //can't use -1, 'cuz of negative frags
|
|
||||||
oldlife = -1;
|
|
||||||
oldkeys = -1;
|
|
||||||
oldhealth = -1;
|
|
||||||
ArtiRefresh = 0;
|
|
||||||
}
|
|
||||||
DrawMainBar ();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (SB_state > -1)
|
|
||||||
{
|
|
||||||
SB_state = -screen->GetPageCount () - 1;
|
|
||||||
}
|
|
||||||
if (SB_state < -1)
|
|
||||||
{
|
|
||||||
SB_state++;
|
|
||||||
DrawImage (Images[imgINVBAR], 34, 2);
|
|
||||||
}
|
|
||||||
DrawInventoryBar ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// PROC DrawCommonBar
|
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void DrawCommonBar ()
|
|
||||||
{
|
|
||||||
int chainY;
|
|
||||||
int healthPos;
|
|
||||||
|
|
||||||
DrawImage (Images[imgLTFCTOP], 0, -10);
|
|
||||||
//DrawImage (Images[imgRTFCTOP], 290, -10);
|
|
||||||
screen->DrawTexture (Images[imgRTFCTOP], ST_X+290, ST_Y,
|
|
||||||
DTA_Bottom320x200, Scaled,
|
|
||||||
DTA_TopOffset, Images[imgRTFCTOP]->GetHeight(),
|
|
||||||
TAG_DONE);
|
|
||||||
|
|
||||||
if (oldhealth != HealthMarker)
|
|
||||||
{
|
|
||||||
oldhealth = HealthMarker;
|
|
||||||
HealthRefresh = screen->GetPageCount ();
|
|
||||||
}
|
|
||||||
if (HealthRefresh)
|
|
||||||
{
|
|
||||||
HealthRefresh--;
|
|
||||||
healthPos = HealthMarker;
|
|
||||||
if (healthPos < 0)
|
|
||||||
{
|
|
||||||
healthPos = 0;
|
|
||||||
}
|
|
||||||
if (healthPos > 100)
|
|
||||||
{
|
|
||||||
healthPos = 100;
|
|
||||||
}
|
|
||||||
healthPos = (healthPos * 256) / 100;
|
|
||||||
chainY = (HealthMarker == (CPlayer->health > 0 ? CPlayer->health : 0)) ? 33 : 33 + ChainWiggle;
|
|
||||||
DrawImage (Images[imgCHAINBACK], 0, 32);
|
|
||||||
DrawImage (Images[imgCHAIN], 2+(healthPos%17), chainY);
|
|
||||||
DrawImage (Images[imgLIFEGEM], 17+healthPos, chainY, multiplayer ?
|
|
||||||
translationtables[TRANSLATION_PlayersExtra][int(CPlayer - players)] : NULL);
|
|
||||||
DrawImage (Images[imgLTFACE], 0, 32);
|
|
||||||
DrawImage (Images[imgRTFACE], 276, 32);
|
|
||||||
screen->DrawTexture (&ChainShade, ST_X+19, ST_Y+32,
|
|
||||||
DTA_Bottom320x200, Scaled,
|
|
||||||
DTA_AlphaChannel, true,
|
|
||||||
DTA_FillColor, 0,
|
|
||||||
TAG_DONE);
|
|
||||||
screen->DrawTexture (&ChainShade, ST_X+277, ST_Y+32,
|
|
||||||
DTA_Bottom320x200, Scaled,
|
|
||||||
DTA_AlphaChannel, true,
|
|
||||||
DTA_FillColor, 0,
|
|
||||||
DTA_FlipX, true,
|
|
||||||
TAG_DONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// PROC DrawMainBar
|
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void DrawMainBar ()
|
|
||||||
{
|
|
||||||
AInventory *item;
|
|
||||||
AAmmo *ammo1, *ammo2;
|
|
||||||
int ammocount1, ammocount2;
|
|
||||||
int temp;
|
|
||||||
int playerkeys;
|
|
||||||
|
|
||||||
// Ready artifact
|
|
||||||
if (ArtifactFlash)
|
|
||||||
{
|
|
||||||
DrawImage (Images[imgBLACKSQ], 180, 3);
|
|
||||||
DrawImage (Images[imgUSEARTIA + ArtifactFlash], 182, 3);
|
|
||||||
oldarti = NULL; // so that the correct artifact fills in after the flash
|
|
||||||
}
|
|
||||||
else if (oldarti != CPlayer->mo->InvSel
|
|
||||||
|| (oldarti != NULL && oldartiCount != oldarti->Amount))
|
|
||||||
{
|
|
||||||
oldarti = CPlayer->mo->InvSel;
|
|
||||||
GC::WriteBarrier(this, oldarti);
|
|
||||||
oldartiCount = oldarti != NULL ? oldarti->Amount : 0;
|
|
||||||
ArtiRefresh = screen->GetPageCount ();
|
|
||||||
}
|
|
||||||
if (ArtiRefresh)
|
|
||||||
{
|
|
||||||
ArtiRefresh--;
|
|
||||||
DrawImage (Images[imgBLACKSQ], 180, 3);
|
|
||||||
if (oldarti != NULL)
|
|
||||||
{
|
|
||||||
DrawDimImage (TexMan(oldarti->Icon), 179, 2, oldarti->Amount <= 0);
|
|
||||||
if (oldartiCount != 1)
|
|
||||||
{
|
|
||||||
DrSmallNumber (oldartiCount, 197, 24);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Frags
|
|
||||||
if (deathmatch)
|
|
||||||
{
|
|
||||||
temp = CPlayer->fragcount;
|
|
||||||
if (temp != oldfrags)
|
|
||||||
{
|
|
||||||
oldfrags = temp;
|
|
||||||
FragHealthRefresh = screen->GetPageCount ();
|
|
||||||
}
|
|
||||||
if (FragHealthRefresh)
|
|
||||||
{
|
|
||||||
FragHealthRefresh--;
|
|
||||||
DrawImage (Images[imgARMCLEAR], 57, 13);
|
|
||||||
DrINumber (temp, 61, 12);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
temp = MAX(0, HealthMarker);
|
|
||||||
if (oldlife != temp)
|
|
||||||
{
|
|
||||||
oldlife = temp;
|
|
||||||
FragHealthRefresh = screen->GetPageCount ();
|
|
||||||
}
|
|
||||||
if (FragHealthRefresh)
|
|
||||||
{
|
|
||||||
FragHealthRefresh--;
|
|
||||||
DrawImage (Images[imgARMCLEAR], 57, 13);
|
|
||||||
DrINumber (temp, 61, 12);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Keys
|
|
||||||
playerkeys = 0;
|
|
||||||
|
|
||||||
for (item = CPlayer->mo->Inventory; item != NULL; item = item->Inventory)
|
|
||||||
{
|
|
||||||
if (item->IsKindOf (RUNTIME_CLASS(AKey)))
|
|
||||||
{
|
|
||||||
int keynum = static_cast<AKey*>(item)->KeyNumber;
|
|
||||||
if (keynum >= 1 && keynum <= 3)
|
|
||||||
{
|
|
||||||
playerkeys |= 1 << (keynum-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (oldkeys != playerkeys)
|
|
||||||
{
|
|
||||||
oldkeys = playerkeys;
|
|
||||||
KeysRefresh = screen->GetPageCount ();
|
|
||||||
}
|
|
||||||
if (KeysRefresh)
|
|
||||||
{
|
|
||||||
KeysRefresh--;
|
|
||||||
// [RH] Erase the key images so the player can drop keys
|
|
||||||
// and see the status update.
|
|
||||||
screen->DrawTexture (Images[imgSTATBAR], ST_X+34, ST_Y+2,
|
|
||||||
DTA_WindowLeft, 119,
|
|
||||||
DTA_WindowRight, 129,
|
|
||||||
DTA_Bottom320x200, Scaled,
|
|
||||||
TAG_DONE);
|
|
||||||
if (playerkeys & 4)
|
|
||||||
{
|
|
||||||
DrawImage (Images[imgYKEYICON], 153, 6);
|
|
||||||
}
|
|
||||||
if (playerkeys & 1)
|
|
||||||
{
|
|
||||||
DrawImage (Images[imgGKEYICON], 153, 14);
|
|
||||||
}
|
|
||||||
if (playerkeys & 2)
|
|
||||||
{
|
|
||||||
DrawImage (Images[imgBKEYICON], 153, 22);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ammo
|
|
||||||
GetCurrentAmmo (ammo1, ammo2, ammocount1, ammocount2);
|
|
||||||
if (ammo1 == ammo2)
|
|
||||||
{
|
|
||||||
// Don't show the same ammo twice.
|
|
||||||
ammo2 = NULL;
|
|
||||||
}
|
|
||||||
if (oldammo1 != ammo1 || oldammo2 != ammo2 ||
|
|
||||||
oldammocount1 != ammocount1 || oldammocount2 != ammocount2)
|
|
||||||
{
|
|
||||||
oldammo1 = ammo1;
|
|
||||||
oldammo2 = ammo2;
|
|
||||||
oldammocount1 = ammocount1;
|
|
||||||
oldammocount2 = ammocount2;
|
|
||||||
GC::WriteBarrier(this, ammo1);
|
|
||||||
GC::WriteBarrier(this, ammo2);
|
|
||||||
AmmoRefresh = screen->GetPageCount ();
|
|
||||||
}
|
|
||||||
if (AmmoRefresh)
|
|
||||||
{
|
|
||||||
AmmoRefresh--;
|
|
||||||
DrawImage (Images[imgBLACKSQ], 108, 3);
|
|
||||||
if (ammo2 != NULL)
|
|
||||||
{ // Draw both ammos
|
|
||||||
screen->DrawTexture (TexMan[ammo1->Icon], 115+ST_X, 11+ST_Y,
|
|
||||||
DTA_CenterOffset, true,
|
|
||||||
DTA_Bottom320x200, Scaled,
|
|
||||||
TAG_DONE);
|
|
||||||
DrSmallNumber (ammo1->Amount, 124, 7);
|
|
||||||
screen->DrawTexture (TexMan[ammo2->Icon], 115+ST_X, 22+ST_Y,
|
|
||||||
DTA_CenterOffset, true,
|
|
||||||
DTA_Bottom320x200, Scaled,
|
|
||||||
TAG_DONE);
|
|
||||||
DrSmallNumber (ammo2->Amount, 124, 19);
|
|
||||||
}
|
|
||||||
else if (ammo1 != NULL)
|
|
||||||
{ // Draw just one ammo
|
|
||||||
DrINumber (ammo1->Amount, 109, 4);
|
|
||||||
screen->DrawTexture (TexMan[ammo1->Icon], 123+ST_X, 22+ST_Y,
|
|
||||||
DTA_CenterOffset, true,
|
|
||||||
DTA_Bottom320x200, Scaled,
|
|
||||||
TAG_DONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Armor
|
|
||||||
AInventory *armor = CPlayer->mo->FindInventory<ABasicArmor>();
|
|
||||||
int armorpoints = armor != NULL ? armor->Amount : 0;
|
|
||||||
if (oldarmor != armorpoints)
|
|
||||||
{
|
|
||||||
oldarmor = armorpoints;
|
|
||||||
ArmorRefresh = screen->GetPageCount ();
|
|
||||||
}
|
|
||||||
if (ArmorRefresh)
|
|
||||||
{
|
|
||||||
ArmorRefresh--;
|
|
||||||
DrawImage (Images[imgARMCLEAR], 224, 13);
|
|
||||||
DrINumber (armorpoints, 228, 12);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// PROC DrawInventoryBar
|
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void DrawInventoryBar ()
|
|
||||||
{
|
|
||||||
AInventory *item;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
DrawImage (Images[imgINVBAR], 34, 2);
|
|
||||||
CPlayer->mo->InvFirst = ValidateInvFirst (7);
|
|
||||||
if (CPlayer->mo->InvFirst != NULL)
|
|
||||||
{
|
|
||||||
for (item = CPlayer->mo->InvFirst, i = 0; item != NULL && i < 7; item = item->NextInv(), ++i)
|
|
||||||
{
|
|
||||||
DrawDimImage (TexMan(item->Icon), 50+i*31, 2, item->Amount <= 0);
|
|
||||||
if (item->Amount != 1)
|
|
||||||
{
|
|
||||||
DrSmallNumber (item->Amount, 65+i*31, 24);
|
|
||||||
}
|
|
||||||
if (item == CPlayer->mo->InvSel)
|
|
||||||
{
|
|
||||||
DrawImage (Images[imgSELECTBOX], 50+i*31, 31);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Is there something to the left?
|
|
||||||
if (CPlayer->mo->FirstInv() != CPlayer->mo->InvFirst)
|
|
||||||
{
|
|
||||||
DrawImage (Images[!(gametic & 4) ?
|
|
||||||
imgINVLFGEM1 : imgINVLFGEM2], 38, 1);
|
|
||||||
}
|
|
||||||
// Is there something to the right?
|
|
||||||
if (item != NULL)
|
|
||||||
{
|
|
||||||
DrawImage (Images[!(gametic & 4) ?
|
|
||||||
imgINVRTGEM1 : imgINVRTGEM2], 269, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// PROC DrawFullScreenStuff
|
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void DrawFullScreenStuff ()
|
|
||||||
{
|
|
||||||
AInventory *item;
|
|
||||||
FTexture *pic;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
// Draw health
|
|
||||||
if (CPlayer->mo->health > 0)
|
|
||||||
{
|
|
||||||
pic = Images[imgPTN1 + gametic/3%3];
|
|
||||||
screen->DrawTexture (pic, 48, -3,
|
|
||||||
DTA_HUDRules, HUD_Normal,
|
|
||||||
DTA_LeftOffset, pic->GetWidth()/2,
|
|
||||||
DTA_TopOffset, pic->GetHeight(),
|
|
||||||
TAG_DONE);
|
|
||||||
DrBNumberOuter (CPlayer->mo->health, 5, -21);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DrBNumberOuter (0, 5, -20);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Draw armor
|
|
||||||
ABasicArmor *armor = CPlayer->mo->FindInventory<ABasicArmor>();
|
|
||||||
if (armor != NULL && armor->Amount != 0)
|
|
||||||
{
|
|
||||||
pic = TexMan(armor->Icon);
|
|
||||||
if (pic != NULL)
|
|
||||||
{
|
|
||||||
screen->DrawTexture (pic, 56, -24,
|
|
||||||
DTA_HUDRules, HUD_Normal,
|
|
||||||
DTA_LeftOffset, pic->GetWidth()/2,
|
|
||||||
DTA_TopOffset, pic->GetHeight(),
|
|
||||||
TAG_DONE);
|
|
||||||
}
|
|
||||||
DrBNumberOuter (armor->Amount, 5, -43);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (deathmatch)
|
|
||||||
{
|
|
||||||
// Draw frag count
|
|
||||||
DrINumberOuter (CPlayer->fragcount, 45, -16);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Draw keys
|
|
||||||
int playerkeys = 0;
|
|
||||||
|
|
||||||
for (item = CPlayer->mo->Inventory; item != NULL; item = item->Inventory)
|
|
||||||
{
|
|
||||||
if (item->IsKindOf (RUNTIME_CLASS(AKey)))
|
|
||||||
{
|
|
||||||
int keynum = static_cast<const AKey*>(item)->KeyNumber;
|
|
||||||
if (keynum >= 1 && keynum <= 3)
|
|
||||||
{
|
|
||||||
playerkeys |= 1 << (keynum-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i = -7;
|
|
||||||
if (playerkeys & 2)
|
|
||||||
{
|
|
||||||
screen->DrawTexture (Images[imgBKEYICON], 54, i,
|
|
||||||
DTA_HUDRules, HUD_Normal,
|
|
||||||
TAG_DONE);
|
|
||||||
i -= 8;
|
|
||||||
}
|
|
||||||
if (playerkeys & 1)
|
|
||||||
{
|
|
||||||
screen->DrawTexture (Images[imgGKEYICON], 54, i,
|
|
||||||
DTA_HUDRules, HUD_Normal,
|
|
||||||
TAG_DONE);
|
|
||||||
i -= 8;
|
|
||||||
}
|
|
||||||
if (playerkeys & 4)
|
|
||||||
{
|
|
||||||
screen->DrawTexture (Images[imgYKEYICON], 54, i,
|
|
||||||
DTA_HUDRules, HUD_Normal,
|
|
||||||
TAG_DONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Draw ammo
|
|
||||||
AAmmo *ammo1, *ammo2;
|
|
||||||
int ammocount1, ammocount2;
|
|
||||||
|
|
||||||
GetCurrentAmmo (ammo1, ammo2, ammocount1, ammocount2);
|
|
||||||
if (ammo1 != NULL)
|
|
||||||
{
|
|
||||||
// Draw primary ammo in the bottom-right corner
|
|
||||||
DrINumberOuter (ammo1->Amount, -29, -15);
|
|
||||||
screen->DrawTexture (TexMan(ammo1->Icon), -14, -22,
|
|
||||||
DTA_HUDRules, HUD_Normal,
|
|
||||||
DTA_CenterBottomOffset, true,
|
|
||||||
TAG_DONE);
|
|
||||||
if (ammo2 != NULL && ammo2!=ammo1)
|
|
||||||
{
|
|
||||||
// Draw secondary ammo just above the primary ammo
|
|
||||||
DrINumberOuter (ammo2->Amount, -29, -56);
|
|
||||||
screen->DrawTexture (TexMan(ammo2->Icon), -14, -63,
|
|
||||||
DTA_HUDRules, HUD_Normal,
|
|
||||||
DTA_CenterBottomOffset, true,
|
|
||||||
TAG_DONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Draw inventory
|
|
||||||
if (CPlayer->inventorytics == 0)
|
|
||||||
{
|
|
||||||
if (ArtifactFlash)
|
|
||||||
{
|
|
||||||
screen->DrawTexture (Images[imgARTIBOX], -61, -31,
|
|
||||||
DTA_HUDRules, HUD_Normal,
|
|
||||||
DTA_Alpha, TRANSLUC50,
|
|
||||||
TAG_DONE);
|
|
||||||
screen->DrawTexture (Images[imgUSEARTIA + ArtifactFlash], -61, -31,
|
|
||||||
DTA_HUDRules, HUD_Normal,
|
|
||||||
TAG_DONE);
|
|
||||||
}
|
|
||||||
else if (CPlayer->mo->InvSel != NULL)
|
|
||||||
{
|
|
||||||
screen->DrawTexture (Images[imgARTIBOX], -61, -31,
|
|
||||||
DTA_HUDRules, HUD_Normal,
|
|
||||||
DTA_Alpha, TRANSLUC50,
|
|
||||||
TAG_DONE);
|
|
||||||
screen->DrawTexture (TexMan(CPlayer->mo->InvSel->Icon), -61, -31,
|
|
||||||
DTA_HUDRules, HUD_Normal,
|
|
||||||
DTA_ColorOverlay, CPlayer->mo->InvSel->Amount > 0 ? 0 : DIM_OVERLAY,
|
|
||||||
TAG_DONE);
|
|
||||||
if (CPlayer->mo->InvSel->Amount != 1)
|
|
||||||
{
|
|
||||||
DrSmallNumberOuter (CPlayer->mo->InvSel->Amount, -46, -9, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CPlayer->mo->InvFirst = ValidateInvFirst (7);
|
|
||||||
i = 0;
|
|
||||||
if (CPlayer->mo->InvFirst != NULL)
|
|
||||||
{
|
|
||||||
for (item = CPlayer->mo->InvFirst; item != NULL && i < 7; item = item->NextInv(), ++i)
|
|
||||||
{
|
|
||||||
screen->DrawTexture (Images[imgARTIBOX], -100+i*31, -32,
|
|
||||||
DTA_HUDRules, HUD_HorizCenter,
|
|
||||||
DTA_Alpha, HX_SHADOW,
|
|
||||||
TAG_DONE);
|
|
||||||
screen->DrawTexture (TexMan(item->Icon), -100+i*31, -32,
|
|
||||||
DTA_HUDRules, HUD_HorizCenter,
|
|
||||||
DTA_ColorOverlay, item->Amount > 0 ? 0 : DIM_OVERLAY,
|
|
||||||
TAG_DONE);
|
|
||||||
if (item->Amount != 1)
|
|
||||||
{
|
|
||||||
DrSmallNumberOuter (item->Amount, -84+i*31, -10, true);
|
|
||||||
}
|
|
||||||
if (item == CPlayer->mo->InvSel)
|
|
||||||
{
|
|
||||||
screen->DrawTexture (Images[imgSELECTBOX], -100+i*31, -3,
|
|
||||||
DTA_HUDRules, HUD_HorizCenter,
|
|
||||||
TAG_DONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Is there something to the left?
|
|
||||||
if (CPlayer->mo->FirstInv() != CPlayer->mo->InvFirst)
|
|
||||||
{
|
|
||||||
screen->DrawTexture (Images[!(gametic & 4) ?
|
|
||||||
imgINVLFGEM1 : imgINVLFGEM2], -112, -33,
|
|
||||||
DTA_HUDRules, HUD_HorizCenter, TAG_DONE);
|
|
||||||
}
|
|
||||||
// Is there something to the right?
|
|
||||||
if (item != NULL)
|
|
||||||
{
|
|
||||||
screen->DrawTexture (Images[!(gametic & 4) ?
|
|
||||||
imgINVRTGEM1 : imgINVRTGEM2], 119, -33,
|
|
||||||
DTA_HUDRules, HUD_HorizCenter, TAG_DONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (; i < 7; i++)
|
|
||||||
{
|
|
||||||
screen->DrawTexture (Images[imgARTIBOX], -100+i*31, -32,
|
|
||||||
DTA_HUDRules, HUD_HorizCenter,
|
|
||||||
DTA_Alpha, HX_SHADOW,
|
|
||||||
TAG_DONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// PROC FlashItem
|
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
void FlashItem (const PClass *itemtype)
|
|
||||||
{
|
|
||||||
ArtifactFlash = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char patcharti[][10];
|
|
||||||
static const char ammopic[][10];
|
|
||||||
|
|
||||||
TObjPtr<AInventory> oldarti;
|
|
||||||
TObjPtr<AAmmo> oldammo1, oldammo2;
|
|
||||||
int oldammocount1, oldammocount2;
|
|
||||||
int oldartiCount;
|
|
||||||
int oldfrags;
|
|
||||||
int oldarmor;
|
|
||||||
int oldhealth;
|
|
||||||
int oldlife;
|
|
||||||
int oldkeys;
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
imgLTFACE,
|
|
||||||
imgRTFACE,
|
|
||||||
imgBARBACK,
|
|
||||||
imgINVBAR,
|
|
||||||
imgCHAIN,
|
|
||||||
imgSTATBAR,
|
|
||||||
imgLIFEGEM,
|
|
||||||
imgLTFCTOP,
|
|
||||||
imgRTFCTOP,
|
|
||||||
imgSELECTBOX,
|
|
||||||
imgINVLFGEM1,
|
|
||||||
imgINVLFGEM2,
|
|
||||||
imgINVRTGEM1,
|
|
||||||
imgINVRTGEM2,
|
|
||||||
imgBLACKSQ,
|
|
||||||
imgARMCLEAR,
|
|
||||||
imgCHAINBACK,
|
|
||||||
imgGOD1,
|
|
||||||
imgGOD2,
|
|
||||||
imgUSEARTIA,
|
|
||||||
imgUSEARTIB,
|
|
||||||
imgUSEARTIC,
|
|
||||||
imgUSEARTID,
|
|
||||||
imgYKEYICON,
|
|
||||||
imgGKEYICON,
|
|
||||||
imgBKEYICON,
|
|
||||||
imgARTIBOX,
|
|
||||||
imgPTN1,
|
|
||||||
imgPTN2,
|
|
||||||
imgPTN3,
|
|
||||||
|
|
||||||
NUM_HERETICSB_IMAGES
|
|
||||||
};
|
|
||||||
|
|
||||||
FImageCollection Images;
|
|
||||||
|
|
||||||
int HealthMarker;
|
|
||||||
int ChainWiggle;
|
|
||||||
int ArtifactFlash;
|
|
||||||
|
|
||||||
char HealthRefresh;
|
|
||||||
char ArtiRefresh;
|
|
||||||
char FragHealthRefresh;
|
|
||||||
char KeysRefresh;
|
|
||||||
char AmmoRefresh;
|
|
||||||
char ArmorRefresh;
|
|
||||||
};
|
|
||||||
|
|
||||||
IMPLEMENT_POINTY_CLASS(DHereticStatusBar)
|
|
||||||
DECLARE_POINTER(oldarti)
|
|
||||||
DECLARE_POINTER(oldammo1)
|
|
||||||
DECLARE_POINTER(oldammo2)
|
|
||||||
END_POINTERS
|
|
||||||
|
|
||||||
DBaseStatusBar *CreateHereticStatusBar ()
|
|
||||||
{
|
|
||||||
return new DHereticStatusBar;
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
|
@ -419,15 +419,7 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
||||||
int cstype = SBarInfoScript[SCRIPT_CUSTOM]->GetGameType();
|
int cstype = SBarInfoScript[SCRIPT_CUSTOM]->GetGameType();
|
||||||
|
|
||||||
//Did the user specify a "base"
|
//Did the user specify a "base"
|
||||||
if(cstype == GAME_Heretic)
|
if(cstype == GAME_Strife)
|
||||||
{
|
|
||||||
StatusBar = CreateHereticStatusBar();
|
|
||||||
}
|
|
||||||
else if(cstype == GAME_Hexen)
|
|
||||||
{
|
|
||||||
StatusBar = CreateHexenStatusBar();
|
|
||||||
}
|
|
||||||
else if(cstype == GAME_Strife)
|
|
||||||
{
|
{
|
||||||
StatusBar = CreateStrifeStatusBar();
|
StatusBar = CreateStrifeStatusBar();
|
||||||
}
|
}
|
||||||
|
@ -442,18 +434,10 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
||||||
}
|
}
|
||||||
if (StatusBar == NULL)
|
if (StatusBar == NULL)
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype & GAME_DoomChex)
|
if (gameinfo.gametype & (GAME_DoomChex|GAME_Heretic|GAME_Hexen))
|
||||||
{
|
{
|
||||||
StatusBar = CreateCustomStatusBar (SCRIPT_DEFAULT);
|
StatusBar = CreateCustomStatusBar (SCRIPT_DEFAULT);
|
||||||
}
|
}
|
||||||
else if (gameinfo.gametype == GAME_Heretic)
|
|
||||||
{
|
|
||||||
StatusBar = CreateHereticStatusBar ();
|
|
||||||
}
|
|
||||||
else if (gameinfo.gametype == GAME_Hexen)
|
|
||||||
{
|
|
||||||
StatusBar = CreateHexenStatusBar ();
|
|
||||||
}
|
|
||||||
else if (gameinfo.gametype == GAME_Strife)
|
else if (gameinfo.gametype == GAME_Strife)
|
||||||
{
|
{
|
||||||
StatusBar = CreateStrifeStatusBar ();
|
StatusBar = CreateStrifeStatusBar ();
|
||||||
|
|
|
@ -376,8 +376,6 @@ extern DBaseStatusBar *StatusBar;
|
||||||
|
|
||||||
// Status bar factories -----------------------------------------------------
|
// Status bar factories -----------------------------------------------------
|
||||||
|
|
||||||
DBaseStatusBar *CreateHereticStatusBar();
|
|
||||||
DBaseStatusBar *CreateHexenStatusBar();
|
|
||||||
DBaseStatusBar *CreateStrifeStatusBar();
|
DBaseStatusBar *CreateStrifeStatusBar();
|
||||||
DBaseStatusBar *CreateCustomStatusBar(int script=0);
|
DBaseStatusBar *CreateCustomStatusBar(int script=0);
|
||||||
|
|
||||||
|
|
|
@ -483,9 +483,19 @@ void SBarInfo::ParseSBarInfo(int lump)
|
||||||
ParseSBarInfo(lump);
|
ParseSBarInfo(lump);
|
||||||
}
|
}
|
||||||
else if(sc.Compare("Heretic"))
|
else if(sc.Compare("Heretic"))
|
||||||
gameType = GAME_Heretic;
|
{
|
||||||
|
int lump = Wads.CheckNumForFullName("sbarinfo/heretic.txt", true);
|
||||||
|
if(lump == -1)
|
||||||
|
sc.ScriptError("Standard Heretic Status Bar not found.");
|
||||||
|
ParseSBarInfo(lump);
|
||||||
|
}
|
||||||
else if(sc.Compare("Hexen"))
|
else if(sc.Compare("Hexen"))
|
||||||
gameType = GAME_Hexen;
|
{
|
||||||
|
int lump = Wads.CheckNumForFullName("sbarinfo/hexen.txt", true);
|
||||||
|
if(lump == -1)
|
||||||
|
sc.ScriptError("Standard Hexen Status Bar not found.");
|
||||||
|
ParseSBarInfo(lump);
|
||||||
|
}
|
||||||
else if(sc.Compare("Strife"))
|
else if(sc.Compare("Strife"))
|
||||||
gameType = GAME_Strife;
|
gameType = GAME_Strife;
|
||||||
else if(sc.Compare("None"))
|
else if(sc.Compare("None"))
|
||||||
|
@ -559,6 +569,19 @@ void SBarInfo::ParseSBarInfo(int lump)
|
||||||
sc.MustGetToken(',');
|
sc.MustGetToken(',');
|
||||||
sc.MustGetToken(TK_StringConst); //Don't tell anyone we're just ignoring this ;)
|
sc.MustGetToken(TK_StringConst); //Don't tell anyone we're just ignoring this ;)
|
||||||
}
|
}
|
||||||
|
if(sc.CheckToken(','))
|
||||||
|
{
|
||||||
|
// Character alignment
|
||||||
|
sc.MustGetToken(TK_Identifier);
|
||||||
|
if(sc.Compare("left"))
|
||||||
|
spacingAlignment = ALIGN_LEFT;
|
||||||
|
else if(sc.Compare("center"))
|
||||||
|
spacingAlignment = ALIGN_CENTER;
|
||||||
|
else if(sc.Compare("right"))
|
||||||
|
spacingAlignment = ALIGN_RIGHT;
|
||||||
|
else
|
||||||
|
sc.ScriptError("Unknown alignment '%s'.", sc.String);
|
||||||
|
}
|
||||||
sc.MustGetToken(';');
|
sc.MustGetToken(';');
|
||||||
break;
|
break;
|
||||||
case SBARINFO_LOWERHEALTHCAP:
|
case SBARINFO_LOWERHEALTHCAP:
|
||||||
|
@ -763,6 +786,7 @@ void SBarInfo::Init()
|
||||||
armorInterpolationSpeed = 8;
|
armorInterpolationSpeed = 8;
|
||||||
height = 0;
|
height = 0;
|
||||||
spacingCharacter = '\0';
|
spacingCharacter = '\0';
|
||||||
|
spacingAlignment = ALIGN_CENTER;
|
||||||
resW = 320;
|
resW = 320;
|
||||||
resH = 200;
|
resH = 200;
|
||||||
|
|
||||||
|
@ -1295,7 +1319,7 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawString(FFont *font, const char* str, SBarInfoCoordinate x, SBarInfoCoordinate y, int xOffset, int yOffset, int alpha, bool fullScreenOffsets, EColorRange translation, int spacing=0, bool drawshadow=false) const
|
void DrawString(FFont *font, const char* str, SBarInfoCoordinate x, SBarInfoCoordinate y, int xOffset, int yOffset, int alpha, bool fullScreenOffsets, EColorRange translation, int spacing=0, bool drawshadow=false, int shadowX=2, int shadowY=2) const
|
||||||
{
|
{
|
||||||
x += spacing;
|
x += spacing;
|
||||||
double ax = *x;
|
double ax = *x;
|
||||||
|
@ -1340,6 +1364,23 @@ public:
|
||||||
ry = ay + yOffset;
|
ry = ay + yOffset;
|
||||||
rw = character->GetScaledWidthDouble();
|
rw = character->GetScaledWidthDouble();
|
||||||
rh = character->GetScaledHeightDouble();
|
rh = character->GetScaledHeightDouble();
|
||||||
|
|
||||||
|
if(script->spacingCharacter != '\0')
|
||||||
|
{
|
||||||
|
double spacingSize = font->GetCharWidth((int) script->spacingCharacter);
|
||||||
|
switch(script->spacingAlignment)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
case SBarInfo::ALIGN_CENTER:
|
||||||
|
rx += (spacingSize/2)-(rw/2);
|
||||||
|
break;
|
||||||
|
case SBarInfo::ALIGN_RIGHT:
|
||||||
|
rx += spacingSize-rw;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(!fullScreenOffsets)
|
if(!fullScreenOffsets)
|
||||||
{
|
{
|
||||||
rx += ST_X;
|
rx += ST_X;
|
||||||
|
@ -1374,7 +1415,9 @@ public:
|
||||||
if(drawshadow)
|
if(drawshadow)
|
||||||
{
|
{
|
||||||
int salpha = fixed_t(((double) alpha / (double) FRACUNIT) * ((double) HR_SHADOW / (double) FRACUNIT) * FRACUNIT);
|
int salpha = fixed_t(((double) alpha / (double) FRACUNIT) * ((double) HR_SHADOW / (double) FRACUNIT) * FRACUNIT);
|
||||||
screen->DrawTexture(character, rx+2, ry+2,
|
double srx = rx + (shadowX*xScale);
|
||||||
|
double sry = ry + (shadowY*yScale);
|
||||||
|
screen->DrawTexture(character, srx, sry,
|
||||||
DTA_DestWidthF, rw,
|
DTA_DestWidthF, rw,
|
||||||
DTA_DestHeightF, rh,
|
DTA_DestHeightF, rh,
|
||||||
DTA_Alpha, salpha,
|
DTA_Alpha, salpha,
|
||||||
|
|
|
@ -84,6 +84,13 @@ struct Popup
|
||||||
|
|
||||||
struct SBarInfo
|
struct SBarInfo
|
||||||
{
|
{
|
||||||
|
enum MonospaceAlignment
|
||||||
|
{
|
||||||
|
ALIGN_LEFT,
|
||||||
|
ALIGN_CENTER,
|
||||||
|
ALIGN_RIGHT
|
||||||
|
};
|
||||||
|
|
||||||
TArray<FString> Images;
|
TArray<FString> Images;
|
||||||
SBarInfoMainBlock *huds[NUMHUDS];
|
SBarInfoMainBlock *huds[NUMHUDS];
|
||||||
Popup popups[NUMPOPUPS];
|
Popup popups[NUMPOPUPS];
|
||||||
|
@ -93,6 +100,7 @@ struct SBarInfo
|
||||||
bool completeBorder;
|
bool completeBorder;
|
||||||
bool lowerHealthCap;
|
bool lowerHealthCap;
|
||||||
char spacingCharacter;
|
char spacingCharacter;
|
||||||
|
MonospaceAlignment spacingAlignment;
|
||||||
int interpolationSpeed;
|
int interpolationSpeed;
|
||||||
int armorInterpolationSpeed;
|
int armorInterpolationSpeed;
|
||||||
int height;
|
int height;
|
||||||
|
|
|
@ -514,14 +514,15 @@ class CommandDrawString : public SBarInfoCommand
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CommandDrawString(SBarInfo *script) : SBarInfoCommand(script),
|
CommandDrawString(SBarInfo *script) : SBarInfoCommand(script),
|
||||||
shadow(false), spacing(0), font(NULL), translation(CR_UNTRANSLATED),
|
shadow(false), shadowX(2), shadowY(2), spacing(0), font(NULL),
|
||||||
cache(-1), strValue(CONSTANT), valueArgument(0)
|
translation(CR_UNTRANSLATED), cache(-1), strValue(CONSTANT),
|
||||||
|
valueArgument(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void Draw(const SBarInfoMainBlock *block, const DSBarInfo *statusBar)
|
void Draw(const SBarInfoMainBlock *block, const DSBarInfo *statusBar)
|
||||||
{
|
{
|
||||||
statusBar->DrawString(font, str.GetChars(), x, y, block->XOffset(), block->YOffset(), block->Alpha(), block->FullScreenOffsets(), translation, spacing, shadow);
|
statusBar->DrawString(font, str.GetChars(), x, y, block->XOffset(), block->YOffset(), block->Alpha(), block->FullScreenOffsets(), translation, spacing, shadow, shadowX, shadowY);
|
||||||
}
|
}
|
||||||
void Parse(FScanner &sc, bool fullScreenOffsets)
|
void Parse(FScanner &sc, bool fullScreenOffsets)
|
||||||
{
|
{
|
||||||
|
@ -695,6 +696,8 @@ class CommandDrawString : public SBarInfoCommand
|
||||||
};
|
};
|
||||||
|
|
||||||
bool shadow;
|
bool shadow;
|
||||||
|
int shadowX;
|
||||||
|
int shadowY;
|
||||||
int spacing;
|
int spacing;
|
||||||
FFont *font;
|
FFont *font;
|
||||||
EColorRange translation;
|
EColorRange translation;
|
||||||
|
@ -850,7 +853,18 @@ class CommandDrawNumber : public CommandDrawString
|
||||||
else if(sc.Compare("whennotzero"))
|
else if(sc.Compare("whennotzero"))
|
||||||
whenNotZero = true;
|
whenNotZero = true;
|
||||||
else if(sc.Compare("drawshadow"))
|
else if(sc.Compare("drawshadow"))
|
||||||
|
{
|
||||||
|
if(sc.CheckToken('('))
|
||||||
|
{
|
||||||
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
shadowX = sc.Number;
|
||||||
|
sc.MustGetToken(',');
|
||||||
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
shadowY = sc.Number;
|
||||||
|
sc.MustGetToken(')');
|
||||||
|
}
|
||||||
shadow = true;
|
shadow = true;
|
||||||
|
}
|
||||||
else if(sc.Compare("interpolate"))
|
else if(sc.Compare("interpolate"))
|
||||||
{
|
{
|
||||||
sc.MustGetToken('(');
|
sc.MustGetToken('(');
|
||||||
|
@ -1236,7 +1250,18 @@ class CommandDrawSelectedInventory : public SBarInfoCommandFlowControl, private
|
||||||
else if(sc.Compare("centerbottom"))
|
else if(sc.Compare("centerbottom"))
|
||||||
offset = static_cast<Offset> (HMIDDLE|BOTTOM);
|
offset = static_cast<Offset> (HMIDDLE|BOTTOM);
|
||||||
else if(sc.Compare("drawshadow"))
|
else if(sc.Compare("drawshadow"))
|
||||||
|
{
|
||||||
|
if(sc.CheckToken('('))
|
||||||
|
{
|
||||||
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
shadowX = sc.Number;
|
||||||
|
sc.MustGetToken(',');
|
||||||
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
shadowY = sc.Number;
|
||||||
|
sc.MustGetToken(')');
|
||||||
|
}
|
||||||
shadow = true;
|
shadow = true;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
font = V_GetFont(sc.String);
|
font = V_GetFont(sc.String);
|
||||||
|
|
|
@ -13,6 +13,7 @@ ACTOR KeyGreen : HereticKey 73
|
||||||
Game Heretic
|
Game Heretic
|
||||||
SpawnID 86
|
SpawnID 86
|
||||||
Inventory.PickupMessage "$TXT_GOTGREENKEY"
|
Inventory.PickupMessage "$TXT_GOTGREENKEY"
|
||||||
|
Inventory.Icon "GKEYICON"
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
|
@ -28,6 +29,7 @@ ACTOR KeyBlue : HereticKey 79
|
||||||
Game Heretic
|
Game Heretic
|
||||||
SpawnID 85
|
SpawnID 85
|
||||||
Inventory.PickupMessage "$TXT_GOTBLUEKEY"
|
Inventory.PickupMessage "$TXT_GOTBLUEKEY"
|
||||||
|
Inventory.Icon "BKEYICON"
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
|
@ -43,6 +45,7 @@ ACTOR KeyYellow : HereticKey 80
|
||||||
Game Heretic
|
Game Heretic
|
||||||
SpawnID 87
|
SpawnID 87
|
||||||
Inventory.PickupMessage "$TXT_GOTYELLOWKEY"
|
Inventory.PickupMessage "$TXT_GOTYELLOWKEY"
|
||||||
|
Inventory.Icon "YKEYICON"
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
|
|
|
@ -95,6 +95,12 @@ pic SPMINO13 tics 3
|
||||||
pic SPMINO14 tics 3
|
pic SPMINO14 tics 3
|
||||||
pic SPMINO15 tics 3
|
pic SPMINO15 tics 3
|
||||||
|
|
||||||
|
// Animate health vial for Heretic fullscreen HUD
|
||||||
|
texture optional PTN1A0
|
||||||
|
pic PTN1A0 tics 3
|
||||||
|
pic PTN1B0 tics 3
|
||||||
|
pic PTN1C0 tics 3
|
||||||
|
|
||||||
// The Wings of Wrath are not included, because they stop spinning when
|
// The Wings of Wrath are not included, because they stop spinning when
|
||||||
// you stop flying, so they can't be a simple animation.
|
// you stop flying, so they can't be a simple animation.
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ gameinfo
|
||||||
defaultbloodparticlecolor = "ff 00 00"
|
defaultbloodparticlecolor = "ff 00 00"
|
||||||
backpacktype = "BagOfHolding"
|
backpacktype = "BagOfHolding"
|
||||||
armoricons = "SHLDA0", 0.75, "SHD2A0"
|
armoricons = "SHLDA0", 0.75, "SHD2A0"
|
||||||
statusbar = ""
|
statusbar = "sbarinfo/heretic.txt"
|
||||||
intermissionmusic = "mus_intr"
|
intermissionmusic = "mus_intr"
|
||||||
intermissioncounter = false
|
intermissioncounter = false
|
||||||
weaponslot = 1, "Staff", "Gauntlets"
|
weaponslot = 1, "Staff", "Gauntlets"
|
||||||
|
|
|
@ -26,7 +26,7 @@ gameinfo
|
||||||
defaultbloodcolor = "68 00 00"
|
defaultbloodcolor = "68 00 00"
|
||||||
defaultbloodparticlecolor = "ff 00 00"
|
defaultbloodparticlecolor = "ff 00 00"
|
||||||
backpacktype = "BagOfHolding" // Hexen doesn't have a backpack so use Heretic's.
|
backpacktype = "BagOfHolding" // Hexen doesn't have a backpack so use Heretic's.
|
||||||
statusbar = ""
|
statusbar = "sbarinfo/hexen.txt"
|
||||||
intermissionmusic = "hub"
|
intermissionmusic = "hub"
|
||||||
intermissioncounter = false
|
intermissioncounter = false
|
||||||
weaponslot = 1, "FWeapFist", "CWeapMace", "MWeapWand"
|
weaponslot = 1, "FWeapFist", "CWeapMace", "MWeapWand"
|
||||||
|
|
123
wadsrc/static/sbarinfo/heretic.txt
Executable file
123
wadsrc/static/sbarinfo/heretic.txt
Executable file
|
@ -0,0 +1,123 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* DEFAULT HERETIC STATUS BAR
|
||||||
|
*******************************************************************************
|
||||||
|
* If you wish to include this file into a custom status bar please use the
|
||||||
|
* following command:
|
||||||
|
*
|
||||||
|
* base Heretic;
|
||||||
|
*
|
||||||
|
* Using #include "sbarinfo/heretic.txt" will not be supported.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
height 42;
|
||||||
|
monospacefonts true, "0", center;
|
||||||
|
|
||||||
|
statusbar fullscreen, fullscreenoffsets
|
||||||
|
{
|
||||||
|
//health
|
||||||
|
drawimage "PTN1A0", 48, -3, centerbottom;
|
||||||
|
drawnumber 2147483647, BIGFONT, untranslated, health, drawshadow, interpolate(8), 41, -21, 1;
|
||||||
|
|
||||||
|
//armor
|
||||||
|
drawimage armoricon, 56, -24, centerbottom;
|
||||||
|
drawnumber 2147483647, BIGFONT, untranslated, armor, drawshadow, whennotzero, 41, -43, 1;
|
||||||
|
|
||||||
|
//frags/keys
|
||||||
|
gamemode deathmatch
|
||||||
|
drawnumber 2147483647, HUDFONT_RAVEN, untranslated, frags, drawshadow, 70, -16, 1;
|
||||||
|
else
|
||||||
|
drawkeybar 100, vertical, reverse, 8, 54, -7, 0, 3, auto;
|
||||||
|
|
||||||
|
//ammo
|
||||||
|
drawimage ammoicon1, -14, -22, centerbottom;
|
||||||
|
drawnumber 2147483647, HUDFONT_RAVEN, untranslated, ammo1, drawshadow(1, 1), -3, -15, 1;
|
||||||
|
//secondary ammo
|
||||||
|
usessecondaryammo
|
||||||
|
{
|
||||||
|
drawimage ammoicon2, -14, -63, centerbottom;
|
||||||
|
drawnumber 2147483647, HUDFONT_RAVEN, untranslated, ammo2, drawshadow(1, 1), -3, -56, 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
inventorybarnotvisible
|
||||||
|
{
|
||||||
|
drawselectedinventory alternateonempty, artiflash, INDEXFONT_RAVEN, -61, -31, -34, -9, untranslated
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alpha 0.6
|
||||||
|
drawimage "ARTIBOX", -61, -31;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
statusbar normal
|
||||||
|
{
|
||||||
|
drawimage "BARBACK", 0, 158;
|
||||||
|
drawimage "LTFCTOP", 0, 148;
|
||||||
|
drawimage "RTFCTOP", 290, 148;
|
||||||
|
|
||||||
|
//god mode
|
||||||
|
drawswitchableimage invulnerable, "GOD1", "nullimage", 16, 167;
|
||||||
|
drawswitchableimage invulnerable, "GOD2", "nullimage", 287, 167;
|
||||||
|
|
||||||
|
//health
|
||||||
|
drawimage "CHAINBAC", 0, 190;
|
||||||
|
gamemode singleplayer
|
||||||
|
drawgem wiggle, interpolate(8), "CHAIN", "LIFEGEM2", 15, 25, 16, 2, 191;
|
||||||
|
else
|
||||||
|
drawgem wiggle, interpolate(8), translatable, "CHAIN", "LIFEGEM2", 15, 25, 16, 2, 191;
|
||||||
|
drawimage "LTFACE", 0, 190;
|
||||||
|
drawimage "RTFACE", 276, 190;
|
||||||
|
drawshader 16, 10, horizontal, 19, 190;
|
||||||
|
drawshader 16, 10, horizontal, reverse, 278, 190;
|
||||||
|
|
||||||
|
//statbar
|
||||||
|
gamemode singleplayer, cooperative
|
||||||
|
{
|
||||||
|
drawimage "LIFEBAR", 34, 160;
|
||||||
|
drawimage "ARMCLEAR", 57, 171;
|
||||||
|
drawnumber 3, HUDFONT_RAVEN, untranslated, health, interpolate(8), 87, 170, 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
drawimage "STATBAR", 34, 160;
|
||||||
|
drawimage "ARMCLEAR", 57, 171;
|
||||||
|
drawnumber 3, HUDFONT_RAVEN, untranslated, frags, 87, 170, 1;
|
||||||
|
}
|
||||||
|
drawimage "ARMCLEAR", 224, 171;
|
||||||
|
drawnumber 3, HUDFONT_RAVEN, untranslated, armor, 254, 170, 1;
|
||||||
|
|
||||||
|
//ammo
|
||||||
|
usessecondaryammo not
|
||||||
|
{
|
||||||
|
drawnumber 3, HUDFONT_RAVEN, untranslated, ammo1, 135, 162, 1;
|
||||||
|
drawimage ammoicon1, 123, 180, center;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
drawnumber 3, INDEXFONT_RAVEN, untranslated, ammo1, 137, 165;
|
||||||
|
drawnumber 3, INDEXFONT_RAVEN, untranslated, ammo2, 137, 177;
|
||||||
|
drawimage ammoicon1, 115, 169, center;
|
||||||
|
drawimage ammoicon2, 115, 180, center;
|
||||||
|
}
|
||||||
|
|
||||||
|
//keys
|
||||||
|
drawswitchableimage keyslot 3, "nullimage", "YKEYICON", 153, 164;
|
||||||
|
drawswitchableimage keyslot 1, "nullimage", "GKEYICON", 153, 172;
|
||||||
|
drawswitchableimage keyslot 2, "nullimage", "BKEYICON", 153, 180;
|
||||||
|
|
||||||
|
//inventory box
|
||||||
|
drawselectedinventory artiflash, INDEXFONT_RAVEN, 179, 160, 209, 182, untranslated;
|
||||||
|
}
|
||||||
|
|
||||||
|
statusbar inventory
|
||||||
|
{
|
||||||
|
drawimage "INVBAR", 34, 160;
|
||||||
|
drawinventorybar Heretic, noartibox, 7, INDEXFONT_RAVEN, 50, 160, 77, 182, untranslated;
|
||||||
|
}
|
||||||
|
|
||||||
|
statusbar inventoryfullscreen, fullscreenoffsets // ZDoom HUD overlay.
|
||||||
|
{
|
||||||
|
drawinventorybar Heretic, translucent, 7, INDEXFONT_RAVEN, -106+center, -31, -78+center, -9, untranslated;
|
||||||
|
}
|
259
wadsrc/static/sbarinfo/hexen.txt
Executable file
259
wadsrc/static/sbarinfo/hexen.txt
Executable file
|
@ -0,0 +1,259 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* DEFAULT HEXEN STATUS BAR
|
||||||
|
*******************************************************************************
|
||||||
|
* If you wish to include this file into a custom status bar please use the
|
||||||
|
* following command:
|
||||||
|
*
|
||||||
|
* base Hexen;
|
||||||
|
*
|
||||||
|
* Using #include "sbarinfo/hexen.txt" will not be supported.
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
height 38;
|
||||||
|
monospacefonts true, "0", center;
|
||||||
|
|
||||||
|
statusbar fullscreen, fullscreenoffsets
|
||||||
|
{
|
||||||
|
//health
|
||||||
|
drawnumber 2147483647, BIGFONT, untranslated, health, drawshadow, interpolate(8), 40, -20, 1;
|
||||||
|
|
||||||
|
//frags
|
||||||
|
gamemode deathmatch
|
||||||
|
drawnumber 2147483647, HUDFONT_RAVEN, untranslated, frags, drawshadow(1, 1), 70, -15, 1;
|
||||||
|
|
||||||
|
inventorybarnotvisible
|
||||||
|
{
|
||||||
|
drawselectedinventory alternateonempty, artiflash, INDEXFONT_RAVEN, -82, -31, -52, -8, untranslated
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alpha 0.6
|
||||||
|
drawimage "ARTIBOX", -80, -30;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mana
|
||||||
|
weaponammo Mana1 && Mana2
|
||||||
|
{
|
||||||
|
weaponammo Mana1
|
||||||
|
drawimage "MANABRT1", -17, -30;
|
||||||
|
else
|
||||||
|
drawimage "MANADIM1", -17, -30;
|
||||||
|
weaponammo Mana2
|
||||||
|
drawimage "MANABRT2", -17, -15;
|
||||||
|
else
|
||||||
|
drawimage "MANADIM2", -17, -15;
|
||||||
|
drawnumber 2147483647, HUDFONT_RAVEN, untranslated, ammo Mana1, drawshadow(1, 1), -21, -30, 1;
|
||||||
|
drawnumber 2147483647, HUDFONT_RAVEN, untranslated, ammo Mana2, drawshadow(1, 1), -21, -15, 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
statusbar Normal
|
||||||
|
{
|
||||||
|
drawimage "H2BAR", 0, 135;
|
||||||
|
drawimage "STATBAR", 38, 162;
|
||||||
|
|
||||||
|
drawselectedinventory artiflash, INDEXFONT_RAVEN, 143, 163, 174, 184, untranslated;
|
||||||
|
|
||||||
|
gamemode deathmatch, teamgame
|
||||||
|
{
|
||||||
|
drawimage "KILLS", 38, 163;
|
||||||
|
drawnumber 3, HUDFONT_RAVEN, untranslated, frags, 58, 163, 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
drawimage "ARMCLS", 41, 178;
|
||||||
|
drawnumber 3, HUDFONT_RAVEN, untranslated, health, interpolate(6), 65, 176, 1, red, 25;
|
||||||
|
}
|
||||||
|
|
||||||
|
//mana bars
|
||||||
|
weaponammo Mana1 && Mana2
|
||||||
|
{
|
||||||
|
weaponammo Mana1
|
||||||
|
{
|
||||||
|
drawimage "MANABRT1", 77, 164;
|
||||||
|
drawbar "MANAVL1", "nullimage", ammo Mana1, vertical, 94, 164, 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
drawimage "MANADIM1", 77, 164;
|
||||||
|
drawbar "MANAVL1D", "nullimage", ammo Mana1, vertical, 94, 164, 1;
|
||||||
|
}
|
||||||
|
weaponammo Mana2
|
||||||
|
{
|
||||||
|
drawimage "MANABRT2", 110, 164;
|
||||||
|
drawbar "MANAVL2", "nullimage", ammo Mana2, vertical, 102, 164, 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
drawimage "MANADIM2", 110, 164;
|
||||||
|
drawbar "MANAVL2D", "nullimage", ammo Mana2, vertical, 102, 164, 1;
|
||||||
|
}
|
||||||
|
drawnumber 3, INDEXFONT_RAVEN, untranslated, ammo Mana1, 91, 181;
|
||||||
|
drawnumber 3, INDEXFONT_RAVEN, untranslated, ammo Mana2, 123, 181;
|
||||||
|
}
|
||||||
|
else //Weapon doesn't use ammo draw an alternative
|
||||||
|
{
|
||||||
|
drawimage "HAMOBACK", 77, 164;
|
||||||
|
usessecondaryammo
|
||||||
|
{
|
||||||
|
drawimage ammoicon1, 89, 172, center;
|
||||||
|
drawimage ammoicon2, 113, 172, center;
|
||||||
|
drawnumber 3, INDEXFONT_RAVEN, untranslated, ammo1, 98, 182;
|
||||||
|
drawnumber 3, INDEXFONT_RAVEN, untranslated, ammo2, 122, 182;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
drawimage ammoicon1, 100, 172, center;
|
||||||
|
drawnumber 3, INDEXFONT_RAVEN, untranslated, ammo1, 109, 182;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//armor
|
||||||
|
drawimage "ARMCLS", 255, 178;
|
||||||
|
drawnumber 2, HUDFONT_RAVEN, untranslated, armorclass, 275, 176, 1;
|
||||||
|
|
||||||
|
playerclass Fighter
|
||||||
|
{
|
||||||
|
drawimage "WPSLOT0", 190, 162;
|
||||||
|
hasweaponpiece FWeapQuietus, 1
|
||||||
|
{
|
||||||
|
drawimage "WPIECEF1", 190, 162;
|
||||||
|
}
|
||||||
|
hasweaponpiece FWeapQuietus, 2
|
||||||
|
{
|
||||||
|
drawimage "WPIECEF2", 225, 162;
|
||||||
|
}
|
||||||
|
hasweaponpiece FWeapQuietus, 3
|
||||||
|
{
|
||||||
|
drawimage "WPIECEF3", 234, 162;
|
||||||
|
}
|
||||||
|
hasweaponpiece FWeapQuietus, 1
|
||||||
|
{
|
||||||
|
hasweaponpiece FWeapQuietus, 2
|
||||||
|
{
|
||||||
|
hasweaponpiece FWeapQuietus, 3
|
||||||
|
{
|
||||||
|
drawimage "WPFULL0", 190, 162;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gamemode singleplayer
|
||||||
|
drawgem interpolate(6), "CHAIN", "LIFEGMF2", -23, 49, 15, 30, 193;
|
||||||
|
else
|
||||||
|
drawgem translatable, interpolate(6), "CHAIN", "LIFEGMF2", -23, 49, 15, 30, 193;
|
||||||
|
}
|
||||||
|
else playerclass Cleric
|
||||||
|
{
|
||||||
|
drawimage "WPSLOT1", 190, 162;
|
||||||
|
hasweaponpiece CWeapWraithverge, 1
|
||||||
|
{
|
||||||
|
drawimage "WPIECEC1", 190, 162;
|
||||||
|
}
|
||||||
|
hasweaponpiece CWeapWraithverge, 2
|
||||||
|
{
|
||||||
|
drawimage "WPIECEC2", 212, 162;
|
||||||
|
}
|
||||||
|
hasweaponpiece CWeapWraithverge, 3
|
||||||
|
{
|
||||||
|
drawimage "WPIECEC3", 225, 162;
|
||||||
|
}
|
||||||
|
hasweaponpiece CWeapWraithverge, 1
|
||||||
|
{
|
||||||
|
hasweaponpiece CWeapWraithverge, 2
|
||||||
|
{
|
||||||
|
hasweaponpiece CWeapWraithverge, 3
|
||||||
|
{
|
||||||
|
drawimage "WPFULL1", 190, 162;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gamemode singleplayer
|
||||||
|
drawgem interpolate(6), "CHAIN2", "LIFEGMC2", -23, 49, 15, 30, 193;
|
||||||
|
else
|
||||||
|
drawgem translatable, interpolate(6), "CHAIN2", "LIFEGMC2", -23, 49, 15, 30, 193;
|
||||||
|
}
|
||||||
|
else playerclass Mage
|
||||||
|
{
|
||||||
|
drawimage "WPSLOT2", 190, 162;
|
||||||
|
hasweaponpiece MWeapBloodscourge, 1
|
||||||
|
{
|
||||||
|
drawimage "WPIECEM1", 190, 162;
|
||||||
|
}
|
||||||
|
hasweaponpiece MWeapBloodscourge, 2
|
||||||
|
{
|
||||||
|
drawimage "WPIECEM2", 205, 162;
|
||||||
|
}
|
||||||
|
hasweaponpiece MWeapBloodscourge, 3
|
||||||
|
{
|
||||||
|
drawimage "WPIECEM3", 224, 162;
|
||||||
|
}
|
||||||
|
hasweaponpiece MWeapBloodscourge, 1
|
||||||
|
{
|
||||||
|
hasweaponpiece MWeapBloodscourge, 2
|
||||||
|
{
|
||||||
|
hasweaponpiece MWeapBloodscourge, 3
|
||||||
|
{
|
||||||
|
drawimage "WPFULL2", 190, 162;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gamemode singleplayer
|
||||||
|
drawgem interpolate(6), "CHAIN3", "LIFEGMM2", -23, 49, 15, 30, 193;
|
||||||
|
else
|
||||||
|
drawgem translatable, interpolate(6), "CHAIN3", "LIFEGMM2", -23, 49, 15, 30, 193;
|
||||||
|
}
|
||||||
|
drawimage "LFEDGE", 0, 193;
|
||||||
|
drawimage "RTEDGE", 277, 193;
|
||||||
|
}
|
||||||
|
|
||||||
|
statusbar Automap
|
||||||
|
{
|
||||||
|
drawimage "H2BAR", 0, 135;
|
||||||
|
drawimage "KEYBAR", 38, 162;
|
||||||
|
drawkeybar 5, horizontal, 20, 46, 164;
|
||||||
|
drawimage hexenarmor armor, "ARMSLOT1", 150, 164;
|
||||||
|
drawimage hexenarmor shield, "ARMSLOT2", 181, 164;
|
||||||
|
drawimage hexenarmor helm, "ARMSLOT3", 212, 164;
|
||||||
|
drawimage hexenarmor amulet, "ARMSLOT4", 243, 164;
|
||||||
|
|
||||||
|
// Also draw the life gem here
|
||||||
|
playerclass Fighter
|
||||||
|
{
|
||||||
|
gamemode singleplayer
|
||||||
|
drawgem interpolate(6), "CHAIN", "LIFEGMF2", -23, 49, 15, 30, 193;
|
||||||
|
else
|
||||||
|
drawgem translatable, interpolate(6), "CHAIN", "LIFEGMF2", -23, 49, 15, 30, 193;
|
||||||
|
}
|
||||||
|
else playerclass Cleric
|
||||||
|
{
|
||||||
|
gamemode singleplayer
|
||||||
|
drawgem interpolate(6), "CHAIN2", "LIFEGMC2", -23, 49, 15, 30, 193;
|
||||||
|
else
|
||||||
|
drawgem translatable, interpolate(6), "CHAIN2", "LIFEGMC2", -23, 49, 15, 30, 193;
|
||||||
|
}
|
||||||
|
else playerclass Mage
|
||||||
|
{
|
||||||
|
gamemode singleplayer
|
||||||
|
drawgem interpolate(6), "CHAIN3", "LIFEGMM2", -23, 49, 15, 30, 193;
|
||||||
|
else
|
||||||
|
drawgem translatable, interpolate(6), "CHAIN3", "LIFEGMM2", -23, 49, 15, 30, 193;
|
||||||
|
}
|
||||||
|
drawimage "LFEDGE", 0, 193;
|
||||||
|
drawimage "RTEDGE", 277, 193;
|
||||||
|
}
|
||||||
|
|
||||||
|
statusbar inventory
|
||||||
|
{
|
||||||
|
drawimage "INVBAR", 38, 162;
|
||||||
|
drawinventorybar HexenStrict, noartibox, 7, INDEXFONT_RAVEN, 52, 164, 80, 185, untranslated;
|
||||||
|
}
|
||||||
|
|
||||||
|
statusbar inventoryfullscreen, fullscreenoffsets // ZDoom HUD overlay.
|
||||||
|
{
|
||||||
|
drawinventorybar HexenStrict, translucent, 7, INDEXFONT_RAVEN, -106+center, -31, -78+center, -10, untranslated;
|
||||||
|
}
|
Loading…
Reference in a new issue