summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cgame/cg_draw.c374
-rw-r--r--src/cgame/cg_local.h2
-rw-r--r--src/cgame/cg_weapons.c65
-rw-r--r--src/game/bg_misc.c20
-rw-r--r--src/game/tremulous.h8
-rw-r--r--ui/menudef.h10
6 files changed, 439 insertions, 40 deletions
diff --git a/src/cgame/cg_draw.c b/src/cgame/cg_draw.c
index 500beb00..3da8583a 100644
--- a/src/cgame/cg_draw.c
+++ b/src/cgame/cg_draw.c
@@ -284,6 +284,86 @@ void CG_Text_Paint( float x, float y, float scale, vec4_t color, const char *tex
/*
==============
+CG_DrawFieldPadded
+
+Draws large numbers for status bar and powerups
+==============
+*/
+static void CG_DrawFieldPadded( int x, int y, int width, int cw, int ch, int value )
+{
+ char num[ 16 ], *ptr;
+ int l, orgL;
+ int frame;
+ int charWidth, charHeight;
+
+ if( !( charWidth = cw ) )
+ charWidth = CHAR_WIDTH;
+
+ if( !( charHeight = ch ) )
+ charWidth = CHAR_HEIGHT;
+
+ if( width < 1 )
+ return;
+
+ // draw number string
+ if( width > 4 )
+ width = 4;
+
+ switch( width )
+ {
+ case 1:
+ value = value > 9 ? 9 : value;
+ value = value < 0 ? 0 : value;
+ break;
+ case 2:
+ value = value > 99 ? 99 : value;
+ value = value < -9 ? -9 : value;
+ break;
+ case 3:
+ value = value > 999 ? 999 : value;
+ value = value < -99 ? -99 : value;
+ break;
+ case 4:
+ value = value > 9999 ? 9999 : value;
+ value = value < -999 ? -999 : value;
+ break;
+ }
+
+ Com_sprintf( num, sizeof( num ), "%d", value );
+ l = strlen( num );
+
+ if( l > width )
+ l = width;
+
+ orgL = l;
+
+ x += 2;
+
+ ptr = num;
+ while( *ptr && l )
+ {
+ if( width > orgL )
+ {
+ CG_DrawPic( x,y, charWidth, charHeight, cgs.media.numberShaders[ 0 ] );
+ width--;
+ x += charWidth;
+ continue;
+ }
+
+ if( *ptr == '-' )
+ frame = STAT_MINUS;
+ else
+ frame = *ptr - '0';
+
+ CG_DrawPic( x,y, charWidth, charHeight, cgs.media.numberShaders[ frame ] );
+ x += charWidth;
+ ptr++;
+ l--;
+ }
+}
+
+/*
+==============
CG_DrawField
Draws large numbers for status bar and powerups
@@ -485,6 +565,168 @@ static void CG_DrawPlayerBankValue( rectDef_t *rect, vec4_t color )
}
}
+/*
+==============
+CG_DrawPlayerStamina1
+==============
+*/
+static void CG_DrawPlayerStamina1( rectDef_t *rect, vec4_t color, qhandle_t shader )
+{
+ playerState_t *ps = &cg.snap->ps;
+ float stamina = ps->stats[ STAT_STAMINA ];
+ float maxStaminaBy3 = (float)MAX_STAMINA / 3.0f;
+ float progress;
+
+ stamina -= ( 2 * (int)maxStaminaBy3 );
+ progress = stamina / maxStaminaBy3;
+
+ if( progress > 1.0f )
+ progress = 1.0f;
+ else if( progress < 0.0f )
+ progress = 0.0f;
+
+ color[ 3 ] = 0.25f + ( progress * 0.25f );
+
+ trap_R_SetColor( color );
+ CG_DrawPic( rect->x, rect->y, rect->w, rect->h, shader );
+ trap_R_SetColor( NULL );
+}
+
+/*
+==============
+CG_DrawPlayerStamina2
+==============
+*/
+static void CG_DrawPlayerStamina2( rectDef_t *rect, vec4_t color, qhandle_t shader )
+{
+ playerState_t *ps = &cg.snap->ps;
+ float stamina = ps->stats[ STAT_STAMINA ];
+ float maxStaminaBy3 = (float)MAX_STAMINA / 3.0f;
+ float progress;
+
+ stamina -= (int)maxStaminaBy3;
+ progress = stamina / maxStaminaBy3;
+
+ if( progress > 1.0f )
+ progress = 1.0f;
+ else if( progress < 0.0f )
+ progress = 0.0f;
+
+ color[ 3 ] = 0.25f + ( progress * 0.25f );
+
+ trap_R_SetColor( color );
+ CG_DrawPic( rect->x, rect->y, rect->w, rect->h, shader );
+ trap_R_SetColor( NULL );
+}
+
+/*
+==============
+CG_DrawPlayerStamina3
+==============
+*/
+static void CG_DrawPlayerStamina3( rectDef_t *rect, vec4_t color, qhandle_t shader )
+{
+ playerState_t *ps = &cg.snap->ps;
+ float stamina = ps->stats[ STAT_STAMINA ];
+ float maxStaminaBy3 = (float)MAX_STAMINA / 3.0f;
+ float progress;
+
+ progress = stamina / maxStaminaBy3;
+
+ if( progress > 1.0f )
+ progress = 1.0f;
+ else if( progress < 0.0f )
+ progress = 0.0f;
+
+ color[ 3 ] = 0.25f + ( progress * 0.25f );
+
+ trap_R_SetColor( color );
+ CG_DrawPic( rect->x, rect->y, rect->w, rect->h, shader );
+ trap_R_SetColor( NULL );
+}
+
+/*
+==============
+CG_DrawPlayerStamina4
+==============
+*/
+static void CG_DrawPlayerStamina4( rectDef_t *rect, vec4_t color, qhandle_t shader )
+{
+ playerState_t *ps = &cg.snap->ps;
+ float stamina = ps->stats[ STAT_STAMINA ];
+ float progress;
+
+ stamina += (float)MAX_STAMINA;
+ progress = stamina / (float)MAX_STAMINA;
+
+ if( progress > 1.0f )
+ progress = 1.0f;
+ else if( progress < 0.0f )
+ progress = 0.0f;
+
+ color[ 3 ] = 0.25f + ( progress * 0.25f );
+
+ trap_R_SetColor( color );
+ CG_DrawPic( rect->x, rect->y, rect->w, rect->h, shader );
+ trap_R_SetColor( NULL );
+}
+
+/*
+==============
+CG_DrawPlayerStaminaBolt
+==============
+*/
+static void CG_DrawPlayerStaminaBolt( rectDef_t *rect, vec4_t color, qhandle_t shader )
+{
+ playerState_t *ps = &cg.snap->ps;
+ float stamina = ps->stats[ STAT_STAMINA ];
+
+ if( stamina < 0 )
+ color[ 3 ] = 0.25f;
+ else
+ color[ 3 ] = 0.50f;
+
+ trap_R_SetColor( color );
+ CG_DrawPic( rect->x, rect->y, rect->w, rect->h, shader );
+ trap_R_SetColor( NULL );
+}
+
+/*
+==============
+CG_DrawPlayerClipsRing
+==============
+*/
+static void CG_DrawPlayerClipsRing( rectDef_t *rect, vec4_t color, qhandle_t shader )
+{
+ playerState_t *ps = &cg.snap->ps;
+ centity_t *cent;
+ float buildTime = ps->stats[ STAT_MISC ];
+ float progress;
+ float maxDelay;
+
+ cent = &cg_entities[ cg.snap->ps.clientNum ];
+
+ switch( cent->currentState.weapon )
+ {
+ case WP_ABUILD:
+ case WP_ABUILD2:
+ case WP_HBUILD:
+ case WP_HBUILD2:
+ maxDelay = (float)BG_FindBuildDelayForWeapon( cent->currentState.weapon );
+ progress = ( maxDelay - buildTime ) / maxDelay;
+
+ color[ 3 ] = 0.25f + ( progress * 0.25f );
+ break;
+
+ default:
+ break;
+ }
+
+ trap_R_SetColor( color );
+ CG_DrawPic( rect->x, rect->y, rect->w, rect->h, shader );
+ trap_R_SetColor( NULL );
+}
+
static void CG_DrawPlayerStamina( rectDef_t *rect, vec4_t color, float scale,
int align, int textStyle, int special )
{
@@ -603,6 +845,27 @@ static void CG_DrawPlayerHealthBar( rectDef_t *rect, vec4_t color, float scale,
CG_DrawProgressBar( rect, color, scale, align, textStyle, special, total );
}
+/*
+==============
+CG_DrawPlayerHealthCross
+==============
+*/
+static void CG_DrawPlayerHealthCross( rectDef_t *rect, vec4_t color, qhandle_t shader )
+{
+ playerState_t *ps = &cg.snap->ps;
+ int health = ps->stats[ STAT_HEALTH ];
+
+ if( health < 10 )
+ {
+ color[ 0 ] = 1.0f;
+ color[ 1 ] = color[ 2 ] = 0.0f;
+ }
+
+ trap_R_SetColor( color );
+ CG_DrawPic( rect->x, rect->y, rect->w, rect->h, shader );
+ trap_R_SetColor( NULL );
+}
+
static void CG_DrawProgressLabel( rectDef_t *rect, float text_x, float text_y, vec4_t color,
float scale, int align, const char *s, float fraction )
{
@@ -1059,7 +1322,8 @@ CG_DrawFPS
#define FPS_FRAMES 20
#define FPS_STRING "fps"
static void CG_DrawFPS( rectDef_t *rect, float text_x, float text_y,
- float scale, vec4_t color, int align, int textStyle )
+ float scale, vec4_t color, int align, int textStyle,
+ qboolean scalableText )
{
char *s;
int tx, w, totalWidth, strLength;
@@ -1118,23 +1382,83 @@ static void CG_DrawFPS( rectDef_t *rect, float text_x, float text_y,
tx = 0.0f;
}
- for( i = 0; i < strLength; i++ )
+ if( scalableText )
{
- char c[ 2 ];
+ for( i = 0; i < strLength; i++ )
+ {
+ char c[ 2 ];
- c[ 0 ] = s[ i ];
- c[ 1 ] = '\0';
-
- CG_Text_Paint( text_x + tx + i * w, rect->y + text_y, scale, color, c, 0, 0, textStyle );
+ c[ 0 ] = s[ i ];
+ c[ 1 ] = '\0';
+
+ CG_Text_Paint( text_x + tx + i * w, rect->y + text_y, scale, color, c, 0, 0, textStyle );
+ }
+ }
+ else
+ {
+ trap_R_SetColor( color );
+ CG_DrawField( rect->x, rect->y, 3, rect->w / 3, rect->h, fps );
+ trap_R_SetColor( NULL );
}
- CG_Text_Paint( text_x + tx + i * w, rect->y + text_y, scale, color, FPS_STRING, 0, 0, textStyle );
+ if( scalableText )
+ CG_Text_Paint( text_x + tx + i * w, rect->y + text_y, scale, color, FPS_STRING, 0, 0, textStyle );
}
}
/*
=================
+CG_DrawTimerMins
+=================
+*/
+static void CG_DrawTimerMins( rectDef_t *rect, vec4_t color )
+{
+ int mins, seconds, tens;
+ int msec;
+
+ if( !cg_drawTimer.integer )
+ return;
+
+ msec = cg.time - cgs.levelStartTime;
+
+ seconds = msec / 1000;
+ mins = seconds / 60;
+ seconds -= mins * 60;
+
+ trap_R_SetColor( color );
+ CG_DrawField( rect->x, rect->y, 3, rect->w / 3, rect->h, mins );
+ trap_R_SetColor( NULL );
+}
+
+
+/*
+=================
+CG_DrawTimerSecs
+=================
+*/
+static void CG_DrawTimerSecs( rectDef_t *rect, vec4_t color )
+{
+ int mins, seconds, tens;
+ int msec;
+
+ if( !cg_drawTimer.integer )
+ return;
+
+ msec = cg.time - cgs.levelStartTime;
+
+ seconds = msec / 1000;
+ mins = seconds / 60;
+ seconds -= mins * 60;
+
+ trap_R_SetColor( color );
+ CG_DrawFieldPadded( rect->x, rect->y, 2, rect->w / 2, rect->h, seconds );
+ trap_R_SetColor( NULL );
+}
+
+
+/*
+=================
CG_DrawTimer
=================
*/
@@ -1557,6 +1881,21 @@ void CG_OwnerDraw( float x, float y, float w, float h, float text_x,
case CG_PLAYER_STAMINA:
CG_DrawPlayerStamina( &rect, color, scale, align, textStyle, special );
break;
+ case CG_PLAYER_STAMINA_1:
+ CG_DrawPlayerStamina1( &rect, color, shader );
+ break;
+ case CG_PLAYER_STAMINA_2:
+ CG_DrawPlayerStamina2( &rect, color, shader );
+ break;
+ case CG_PLAYER_STAMINA_3:
+ CG_DrawPlayerStamina3( &rect, color, shader );
+ break;
+ case CG_PLAYER_STAMINA_4:
+ CG_DrawPlayerStamina4( &rect, color, shader );
+ break;
+ case CG_PLAYER_STAMINA_BOLT:
+ CG_DrawPlayerStaminaBolt( &rect, color, shader );
+ break;
case CG_PLAYER_AMMO_VALUE:
CG_DrawPlayerAmmoValue( &rect, color );
break;
@@ -1569,6 +1908,12 @@ void CG_OwnerDraw( float x, float y, float w, float h, float text_x,
case CG_PLAYER_HEALTH_BAR:
CG_DrawPlayerHealthBar( &rect, color, scale, align, textStyle, special );
break;
+ case CG_PLAYER_HEALTH_CROSS:
+ CG_DrawPlayerHealthCross( &rect, color, shader );
+ break;
+ case CG_PLAYER_CLIPS_RING:
+ CG_DrawPlayerClipsRing( &rect, color, shader );
+ break;
case CG_AREA_SYSTEMCHAT:
CG_DrawAreaSystemChat( &rect, scale, color, shader );
break;
@@ -1582,7 +1927,7 @@ void CG_OwnerDraw( float x, float y, float w, float h, float text_x,
CG_DrawKiller( &rect, scale, color, shader, textStyle );
break;
case CG_PLAYER_SELECT:
- CG_DrawWeaponSelect( &rect );
+ CG_DrawWeaponSelect( &rect, color );
break;
case CG_PLAYER_SELECTTEXT:
CG_DrawWeaponSelectText( &rect, scale, textStyle );
@@ -1627,11 +1972,20 @@ void CG_OwnerDraw( float x, float y, float w, float h, float text_x,
break;
case CG_FPS:
- CG_DrawFPS( &rect, text_x, text_y, scale, color, align, textStyle );
+ CG_DrawFPS( &rect, text_x, text_y, scale, color, align, textStyle, qtrue );
+ break;
+ case CG_FPS_FIXED:
+ CG_DrawFPS( &rect, text_x, text_y, scale, color, align, textStyle, qfalse );
break;
case CG_TIMER:
CG_DrawTimer( &rect, text_x, text_y, scale, color, align, textStyle );
break;
+ case CG_TIMER_MINS:
+ CG_DrawTimerMins( &rect, color );
+ break;
+ case CG_TIMER_SECS:
+ CG_DrawTimerSecs( &rect, color );
+ break;
case CG_SNAPSHOT:
CG_DrawSnapshot( &rect, text_x, text_y, scale, color, align, textStyle );
break;
diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h
index 6d3eef44..de9c7c6f 100644
--- a/src/cgame/cg_local.h
+++ b/src/cgame/cg_local.h
@@ -1320,7 +1320,7 @@ void CG_TeslaTrail( vec3_t start, vec3_t end, int srcENum, int destENum )
void CG_AlienZap( vec3_t start, vec3_t end, int srcENum, int destENum );
void CG_AddViewWeapon (playerState_t *ps);
void CG_AddPlayerWeapon( refEntity_t *parent, playerState_t *ps, centity_t *cent );
-void CG_DrawWeaponSelect( rectDef_t *rect );
+void CG_DrawWeaponSelect( rectDef_t *rect, vec4_t color );
void CG_DrawWeaponSelectText( rectDef_t *rect, float scale, int textStyle );
diff --git a/src/cgame/cg_weapons.c b/src/cgame/cg_weapons.c
index 1293afbc..4c203b4c 100644
--- a/src/cgame/cg_weapons.c
+++ b/src/cgame/cg_weapons.c
@@ -1071,22 +1071,31 @@ WEAPON SELECTION
CG_DrawWeaponSelect
===================
*/
-void CG_DrawWeaponSelect( rectDef_t *rect )
+void CG_DrawWeaponSelect( rectDef_t *rect, vec4_t color )
{
- int i;
- int x = rect->x;
- int y = rect->y;
- int width = rect->w;
- int height = rect->h;
- int iconsize;
- int items[ 64 ];
- int numItems = 0, selectedItem;
- int length;
- int selectWindow;
- qboolean vertical;
+ int i;
+ int x = rect->x;
+ int y = rect->y;
+ int width = rect->w;
+ int height = rect->h;
+ int iconsize;
+ int items[ 64 ];
+ int numItems = 0, selectedItem;
+ int length;
+ int selectWindow;
+ qboolean vertical;
+ int ammo, clips, maxAmmo, maxClips;
+ centity_t *cent;
+ playerState_t *ps;
+
+ cent = &cg_entities[ cg.snap->ps.clientNum ];
+ ps = &cg.snap->ps;
+ BG_unpackAmmoArray( cent->currentState.weapon, ps->ammo, ps->powerups, &ammo, &clips, NULL );
+ BG_FindAmmoForWeapon( cent->currentState.weapon, &maxAmmo, &maxClips, NULL );
+
// don't display if dead
- if( cg.predictedPlayerState.stats[STAT_HEALTH] <= 0 )
+ if( cg.predictedPlayerState.stats[ STAT_HEALTH ] <= 0 )
return;
// showing weapon select clears pickup item display, but not the blend blob
@@ -1140,15 +1149,41 @@ void CG_DrawWeaponSelect( rectDef_t *rect )
if( ( item >= 0 ) && ( item < numItems ) )
{
+ switch( cent->currentState.weapon )
+ {
+ case WP_ABUILD:
+ case WP_ABUILD2:
+ case WP_HBUILD:
+ case WP_HBUILD2:
+ break;
+
+ default:
+ if( clips == 0 )
+ {
+ float ammoPercent = (float)ammo / (float)maxAmmo;
+
+ if( ammoPercent < 0.33f )
+ {
+ color[ 0 ] = 1.0f;
+ color[ 1 ] = color[ 2 ] = 0.0f;
+ }
+ }
+ break;
+ }
+
+ trap_R_SetColor( color );
+
if( items[ item ] <= 32 )
CG_DrawPic( x + ICON_BORDER, y + ICON_BORDER, iconsize - 2 * ICON_BORDER, iconsize - 2 * ICON_BORDER,
cg_weapons[ items[ item ] ].weaponIcon );
else if( items[ item ] > 32 )
CG_DrawPic( x + ICON_BORDER, y + ICON_BORDER, iconsize - 2 * ICON_BORDER, iconsize - 2 * ICON_BORDER,
cg_upgrades[ items[ item ] - 32 ].upgradeIcon );
+
+ trap_R_SetColor( NULL );
- if( displacement == 0 )
- CG_DrawPic( x, y, iconsize, iconsize, cgs.media.selectShader );
+/* if( displacement == 0 )
+ CG_DrawPic( x, y, iconsize, iconsize, cgs.media.selectShader );*/
}
if( vertical )
diff --git a/src/game/bg_misc.c b/src/game/bg_misc.c
index 04328d71..4422d29c 100644
--- a/src/game/bg_misc.c
+++ b/src/game/bg_misc.c
@@ -2062,7 +2062,7 @@ weaponAttributes_t bg_weapons[ ] =
"rifle", //char *weaponName;
"Rifle", //char *weaponHumanName;
{ "models/weapons2/machinegun/machinegun.md3", 0, 0, 0 },
- "icons/iconw_machinegun",
+ "icons/iconw_rifle",
"gfx/2d/crosshaira", 24,
RIFLE_CLIPSIZE, //int quan;
RIFLE_SPAWNCLIPS, //int clips;
@@ -2087,7 +2087,7 @@ weaponAttributes_t bg_weapons[ ] =
"flamer", //char *weaponName;
"Flame Thrower", //char *weaponHumanName;
{ "models/weapons2/plasma/plasma.md3", 0, 0, 0 },
- "icons/iconw_plasma",
+ "icons/iconw_flamer",
"gfx/2d/crosshaira", 24,
FLAMER_GAS, //int quan;
0, //int clips;
@@ -2112,7 +2112,7 @@ weaponAttributes_t bg_weapons[ ] =
"chaingun", //char *weaponName;
"Chaingun", //char *weaponHumanName;
{ "models/weapons2/machinegun/machinegun.md3", 0, 0, 0 },
- "icons/iconw_machinegun",
+ "icons/iconw_chaingun",
"gfx/2d/crosshairb", 48,
CHAINGUN_BULLETS, //int quan;
0, //int clips;
@@ -2137,7 +2137,7 @@ weaponAttributes_t bg_weapons[ ] =
"mdriver", //char *weaponName;
"Mass Driver", //char *weaponHumanName;
{ "models/weapons2/bfg/bfg.md3", 0, 0, 0 },
- "icons/iconw_bfg",
+ "icons/iconw_driver",
"gfx/2d/crosshaira", 24,
MDRIVER_CLIPSIZE, //int quan;
MDRIVER_SPAWNCLIPS, //int clips;
@@ -2162,7 +2162,7 @@ weaponAttributes_t bg_weapons[ ] =
"prifle", //char *weaponName;
"Pulse Rifle", //char *weaponHumanName;
{ "models/weapons2/plasma/plasma.md3", 0, 0, 0 },
- "icons/iconw_plasma",
+ "icons/iconw_pulse",
"gfx/2d/crosshaira", 24,
PRIFLE_CLIPS, //int quan;
PRIFLE_SPAWNCLIPS, //int clips;
@@ -2187,7 +2187,7 @@ weaponAttributes_t bg_weapons[ ] =
"lcanon", //char *weaponName;
"Lucifer Canon", //char *weaponHumanName;
{ "models/weapons2/bfg/bfg.md3", 0, 0, 0 },
- "icons/iconw_bfg",
+ "icons/iconw_lucifer",
"gfx/2d/crosshaira", 24,
LCANON_AMMO, //int quan;
0, //int clips;
@@ -2212,7 +2212,7 @@ weaponAttributes_t bg_weapons[ ] =
"lgun", //char *weaponName;
"Las Gun", //char *weaponHumanName;
{ "models/weapons2/grenadel/grenadel.md3", 0, 0, 0 },
- "icons/iconw_plasma",
+ "icons/iconw_lasgun",
"gfx/2d/crosshaira", 24,
LASGUN_AMMO, //int quan;
0, //int clips;
@@ -2237,7 +2237,7 @@ weaponAttributes_t bg_weapons[ ] =
"psaw", //char *weaponName;
"Pain Saw", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
- "icons/iconw_gauntlet",
+ "icons/iconw_saw",
NULL, 0,
0, //int quan;
0, //int clips;
@@ -2262,7 +2262,7 @@ weaponAttributes_t bg_weapons[ ] =
"ckit", //char *weaponName;
"Construction Kit", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
- "icons/iconw_gauntlet",
+ "icons/iconw_construct",
NULL, 0,
0, //int quan;
0, //int clips;
@@ -2287,7 +2287,7 @@ weaponAttributes_t bg_weapons[ ] =
"ackit", //char *weaponName;
"Adv Construction Kit",//char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
- "icons/iconw_gauntlet",
+ "icons/iconw_construct",
NULL, 0,
0, //int quan;
0, //int clips;
diff --git a/src/game/tremulous.h b/src/game/tremulous.h
index 6e7893db..2c680066 100644
--- a/src/game/tremulous.h
+++ b/src/game/tremulous.h
@@ -29,8 +29,8 @@
#define ABUILDER_CLAW_DMG ADM(25)
#define ABUILDER_CLAW_RANGE 32.0f
#define ABUILDER_CLAW_REPEAT 1000
-#define ABUILDER_BASE_DELAY 10000
-#define ABUILDER_ADV_DELAY 5000
+#define ABUILDER_BASE_DELAY 9000
+#define ABUILDER_ADV_DELAY 4000
#define SOLDIER_BITE_DMG ADM(34)
#define SOLDIER_BITE_RANGE 32.0f
@@ -335,11 +335,11 @@
#define HBUILD_PRICE 100
#define HBUILD_REPEAT 1000
-#define HBUILD_DELAY 10000
+#define HBUILD_DELAY 9000
#define HBUILD2_PRICE 200
#define HBUILD2_REPEAT 1000
-#define HBUILD2_DELAY 5000
+#define HBUILD2_DELAY 4000
diff --git a/ui/menudef.h b/ui/menudef.h
index 35bc6afd..775bc1ab 100644
--- a/ui/menudef.h
+++ b/ui/menudef.h
@@ -130,12 +130,19 @@
#define CG_PLAYER_HEAD 3
#define CG_PLAYER_HEALTH 4
#define CG_PLAYER_HEALTH_BAR 92
+#define CG_PLAYER_HEALTH_CROSS 99
#define CG_PLAYER_AMMO_ICON 5
#define CG_PLAYER_AMMO_VALUE 6
#define CG_PLAYER_CLIPS_VALUE 70
#define CG_PLAYER_CREDITS_VALUE 71
#define CG_PLAYER_BANK_VALUE 72
#define CG_PLAYER_STAMINA 73
+#define CG_PLAYER_STAMINA_1 93
+#define CG_PLAYER_STAMINA_2 94
+#define CG_PLAYER_STAMINA_3 95
+#define CG_PLAYER_STAMINA_4 96
+#define CG_PLAYER_STAMINA_BOLT 97
+#define CG_PLAYER_CLIPS_RING 98
#define CG_PLAYER_SELECT 74
#define CG_PLAYER_SELECTTEXT 75
#define CG_SELECTEDPLAYER_HEAD 7
@@ -222,7 +229,10 @@
#define CG_LOAD_HOSTNAME 86
#define CG_FPS 87
+#define CG_FPS_FIXED 100
#define CG_TIMER 88
+#define CG_TIMER_MINS 101
+#define CG_TIMER_SECS 102
#define CG_SNAPSHOT 89
#define CG_LAGOMETER 90