From f7decf1775ffedacde877ef799821abb100cdc74 Mon Sep 17 00:00:00 2001 From: Tim Angus Date: Sat, 30 Nov 2002 17:26:11 +0000 Subject: * Various additions for the latest human hud --- src/cgame/cg_draw.c | 374 +++++++++++++++++++++++++++++++++++++++++++++++-- src/cgame/cg_local.h | 2 +- src/cgame/cg_weapons.c | 65 +++++++-- src/game/bg_misc.c | 20 +-- src/game/tremulous.h | 8 +- ui/menudef.h | 10 ++ 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 @@ -282,6 +282,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 @@ -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,21 +1382,81 @@ 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 -- cgit