summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cgame/cg_draw.c40
-rw-r--r--src/cgame/cg_drawtools.c57
-rw-r--r--src/cgame/cg_local.h6
-rw-r--r--src/cgame/cg_main.c27
-rw-r--r--src/cgame/cg_weapons.c4
-rw-r--r--src/game/bg_misc.c59
-rw-r--r--src/game/bg_public.h4
-rw-r--r--src/game/g_buildable.c28
-rw-r--r--src/game/g_local.h2
-rw-r--r--src/game/g_weapon.c8
-rw-r--r--src/game/tremulous.h4
11 files changed, 109 insertions, 130 deletions
diff --git a/src/cgame/cg_draw.c b/src/cgame/cg_draw.c
index a479f3b4..cf35d086 100644
--- a/src/cgame/cg_draw.c
+++ b/src/cgame/cg_draw.c
@@ -1924,12 +1924,11 @@ static void CG_DrawCrosshair( void )
qhandle_t hShader;
float f;
float x, y;
- int ca;
if( !cg_drawCrosshair.integer )
return;
- if( ( cg.snap->ps.persistant[PERS_TEAM] == TEAM_SPECTATOR ) ||
+ if( ( cg.snap->ps.persistant[ PERS_TEAM ] == TEAM_SPECTATOR ) ||
( cg.snap->ps.stats[ STAT_STATE ] & SS_INFESTING ) ||
( cg.snap->ps.stats[ STAT_STATE ] & SS_HOVELING ) )
return;
@@ -1937,41 +1936,20 @@ static void CG_DrawCrosshair( void )
if( cg.renderingThirdPerson )
return;
- // set color based on health
- if( cg_crosshairHealth.integer )
- {
- vec4_t hcolor;
-
- CG_ColorForHealth( hcolor );
- trap_R_SetColor( hcolor );
- }
- else
- trap_R_SetColor( NULL );
-
- w = h = cg_crosshairSize.value;
-
- // pulse the size of the crosshair when picking up items
- f = cg.time - cg.itemPickupBlendTime;
- if( f > 0 && f < ITEM_BLOB_TIME )
- {
- f /= ITEM_BLOB_TIME;
- w *= ( 1 + f );
- h *= ( 1 + f );
- }
+ w = h = BG_FindCrosshairSizeForWeapon( cg.snap->ps.weapon );
x = cg_crosshairX.integer;
y = cg_crosshairY.integer;
CG_AdjustFrom640( &x, &y, &w, &h );
-
- ca = cg_drawCrosshair.integer;
- if( ca < 0 )
- ca = 0;
- hShader = cgs.media.crosshairShader[ ca % NUM_CROSSHAIRS ];
+ hShader = cgs.media.crosshairShader[ cg.snap->ps.weapon ];
- trap_R_DrawStretchPic( x + cg.refdef.x + 0.5 * ( cg.refdef.width - w ),
- y + cg.refdef.y + 0.5 * ( cg.refdef.height - h ),
- w, h, 0, 0, 1, 1, hShader );
+ if( hShader != 0 )
+ {
+ trap_R_DrawStretchPic( x + cg.refdef.x + 0.5 * ( cg.refdef.width - w ),
+ y + cg.refdef.y + 0.5 * ( cg.refdef.height - h ),
+ w, h, 0, 0, 1, 1, hShader );
+ }
}
diff --git a/src/cgame/cg_drawtools.c b/src/cgame/cg_drawtools.c
index d5df1f42..05c06b65 100644
--- a/src/cgame/cg_drawtools.c
+++ b/src/cgame/cg_drawtools.c
@@ -306,60 +306,3 @@ float *CG_FadeColor( int startMsec, int totalMsec )
return color;
}
-
-
-/*
-=================
-CG_GetColorForHealth
-=================
-*/
-void CG_GetColorForHealth( int health, int armor, vec4_t hcolor )
-{
- int count;
- int max;
-
- // calculate the total points of damage that can
- // be sustained at the current health / armor level
- if( health <= 0 )
- {
- VectorClear( hcolor ); // black
- hcolor[ 3 ] = 1;
- return;
- }
-
- count = armor;
- max = health;
-
- if( max < count )
- count = max;
-
- health += count;
-
- // set the color based on health
- hcolor[ 0 ] = 1.0;
- hcolor[ 3 ] = 1.0;
-
- if( health >= 100 )
- hcolor[ 2 ] = 1.0;
- else if( health < 66 )
- hcolor[ 2 ] = 0;
- else
- hcolor[ 2 ] = ( health - 66 ) / 33.0;
-
- if( health > 60 )
- hcolor[ 1 ] = 1.0;
- else if( health < 30 )
- hcolor[ 1 ] = 0;
- else
- hcolor[ 1 ] = ( health - 30 ) / 30.0;
-}
-
-/*
-=================
-CG_ColorForHealth
-=================
-*/
-void CG_ColorForHealth( vec4_t hcolor )
-{
- CG_GetColorForHealth( cg.snap->ps.stats[ STAT_HEALTH ], 0, hcolor );
-}
diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h
index 99bb91cf..25763f37 100644
--- a/src/cgame/cg_local.h
+++ b/src/cgame/cg_local.h
@@ -797,7 +797,7 @@ typedef struct
qhandle_t selectShader;
qhandle_t viewBloodShader;
qhandle_t tracerShader;
- qhandle_t crosshairShader[ NUM_CROSSHAIRS ];
+ qhandle_t crosshairShader[ WP_NUM_WEAPONS ];
qhandle_t backTileShader;
qhandle_t noammoShader;
@@ -909,6 +909,8 @@ typedef struct
sfxHandle_t alienStageTransition;
sfxHandle_t humanStageTransition;
+ sfxHandle_t humanBuildableExpl;
+
qhandle_t cursor;
qhandle_t selectCursor;
qhandle_t sizeCursor;
@@ -1045,8 +1047,6 @@ extern vmCvar_t cg_drawTeamOverlay;
extern vmCvar_t cg_teamOverlayUserinfo;
extern vmCvar_t cg_crosshairX;
extern vmCvar_t cg_crosshairY;
-extern vmCvar_t cg_crosshairSize;
-extern vmCvar_t cg_crosshairHealth;
extern vmCvar_t cg_drawStatus;
extern vmCvar_t cg_draw2D;
extern vmCvar_t cg_animSpeed;
diff --git a/src/cgame/cg_main.c b/src/cgame/cg_main.c
index e0b4936d..551a5baf 100644
--- a/src/cgame/cg_main.c
+++ b/src/cgame/cg_main.c
@@ -116,10 +116,8 @@ vmCvar_t cg_drawAmmoWarning;
vmCvar_t cg_drawCrosshair;
vmCvar_t cg_drawCrosshairNames;
vmCvar_t cg_drawRewards;
-vmCvar_t cg_crosshairSize;
vmCvar_t cg_crosshairX;
vmCvar_t cg_crosshairY;
-vmCvar_t cg_crosshairHealth;
vmCvar_t cg_draw2D;
vmCvar_t cg_drawStatus;
vmCvar_t cg_animSpeed;
@@ -237,8 +235,6 @@ static cvarTable_t cvarTable[ ] =
{ &cg_drawCrosshair, "cg_drawCrosshair", "4", CVAR_ARCHIVE },
{ &cg_drawCrosshairNames, "cg_drawCrosshairNames", "1", CVAR_ARCHIVE },
{ &cg_drawRewards, "cg_drawRewards", "1", CVAR_ARCHIVE },
- { &cg_crosshairSize, "cg_crosshairSize", "24", CVAR_ARCHIVE },
- { &cg_crosshairHealth, "cg_crosshairHealth", "1", CVAR_ARCHIVE },
{ &cg_crosshairX, "cg_crosshairX", "0", CVAR_ARCHIVE },
{ &cg_crosshairY, "cg_crosshairY", "0", CVAR_ARCHIVE },
{ &cg_brassTime, "cg_brassTime", "2500", CVAR_ARCHIVE },
@@ -544,18 +540,6 @@ const char *CG_Argv( int arg )
/*
=================
-CG_RegisterItemSounds
-
-The server says this item is used on this level
-=================
-*/
-static void CG_RegisterItemSounds( int itemNum )
-{
-}
-
-
-/*
-=================
CG_RegisterSounds
called during a precache command
@@ -639,6 +623,8 @@ static void CG_RegisterSounds( void )
cgs.media.jetpackDescendSound = trap_S_RegisterSound( "sound/upgrades/jetpack/low.wav", qfalse );
cgs.media.jetpackIdleSound = trap_S_RegisterSound( "sound/upgrades/jetpack/idle.wav", qfalse );
cgs.media.jetpackAscendSound = trap_S_RegisterSound( "sound/upgrades/jetpack/hi.wav", qfalse );
+
+ cgs.media.humanBuildableExpl = trap_S_RegisterSound( "sound/weapons/rocket/rocklx1a.wav", qfalse );
// FIXME: only needed with item
cgs.media.sfx_ric1 = trap_S_RegisterSound( "sound/weapons/machinegun/ric1.wav", qfalse );
@@ -721,8 +707,13 @@ static void CG_RegisterGraphics( void )
cgs.media.tracerShader = trap_R_RegisterShader( "gfx/misc/tracer" );
cgs.media.selectShader = trap_R_RegisterShader( "gfx/2d/select" );
- for( i = 0 ; i < NUM_CROSSHAIRS ; i++ )
- cgs.media.crosshairShader[ i ] = trap_R_RegisterShader( va( "gfx/2d/crosshair%c", 'a' + i ) );
+ for( i = WP_NONE + 1 ; i < WP_NUM_WEAPONS ; i++ )
+ {
+ char *crosshair = BG_FindCrosshairForWeapon( i );
+
+ if( crosshair != NULL )
+ cgs.media.crosshairShader[ i ] = trap_R_RegisterShader( crosshair );
+ }
cgs.media.backTileShader = trap_R_RegisterShader( "gfx/2d/backtile" );
cgs.media.noammoShader = trap_R_RegisterShader( "icons/noammo" );
diff --git a/src/cgame/cg_weapons.c b/src/cgame/cg_weapons.c
index e8c6aedf..1293afbc 100644
--- a/src/cgame/cg_weapons.c
+++ b/src/cgame/cg_weapons.c
@@ -322,7 +322,9 @@ void CG_RegisterWeapon( int weaponNum )
case WP_FLAMER:
weaponInfo->missileSound = trap_S_RegisterSound( "sound/weapons/flamer/fireloop.wav", qfalse );
- MAKERGB( weaponInfo->flashDlightColor, 0.25, 0.1, 0 );
+ MAKERGB( weaponInfo->flashDlightColor, 0.25f, 0.1f, 0 );
+ MAKERGB( weaponInfo->missileDlightColor, 0.25f, 0.1f, 0 );
+ weaponInfo->missileDlight = 200;
//weaponInfo->flashSound[ 0 ] = trap_S_RegisterSound( "sound/weapons/railgun/railgf1a.wav", qfalse );
/*cgs.media.flameExplShader = trap_R_RegisterShader( "rocketExplosion" );*/
break;
diff --git a/src/game/bg_misc.c b/src/game/bg_misc.c
index ccddcedb..2b51efbc 100644
--- a/src/game/bg_misc.c
+++ b/src/game/bg_misc.c
@@ -2063,6 +2063,7 @@ weaponAttributes_t bg_weapons[ ] =
"Rifle", //char *weaponHumanName;
{ "models/weapons2/machinegun/machinegun.md3", 0, 0, 0 },
"icons/iconw_machinegun",
+ "gfx/2d/crosshaira", 24,
RIFLE_CLIPSIZE, //int quan;
RIFLE_SPAWNCLIPS, //int clips;
RIFLE_MAXCLIPS, //int maxClips;
@@ -2087,6 +2088,7 @@ weaponAttributes_t bg_weapons[ ] =
"Flame Thrower", //char *weaponHumanName;
{ "models/weapons2/plasma/plasma.md3", 0, 0, 0 },
"icons/iconw_plasma",
+ "gfx/2d/crosshaira", 24,
FLAMER_GAS, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2111,6 +2113,7 @@ weaponAttributes_t bg_weapons[ ] =
"Chaingun", //char *weaponHumanName;
{ "models/weapons2/machinegun/machinegun.md3", 0, 0, 0 },
"icons/iconw_machinegun",
+ "gfx/2d/crosshairb", 48,
CHAINGUN_BULLETS, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2135,6 +2138,7 @@ weaponAttributes_t bg_weapons[ ] =
"Mass Driver", //char *weaponHumanName;
{ "models/weapons2/bfg/bfg.md3", 0, 0, 0 },
"icons/iconw_bfg",
+ "gfx/2d/crosshaira", 24,
MDRIVER_CLIPSIZE, //int quan;
MDRIVER_SPAWNCLIPS, //int clips;
MDRIVER_MAXCLIPS, //int maxClips;
@@ -2159,6 +2163,7 @@ weaponAttributes_t bg_weapons[ ] =
"Pulse Rifle", //char *weaponHumanName;
{ "models/weapons2/plasma/plasma.md3", 0, 0, 0 },
"icons/iconw_plasma",
+ "gfx/2d/crosshaira", 24,
PRIFLE_CLIPS, //int quan;
PRIFLE_SPAWNCLIPS, //int clips;
PRIFLE_MAXCLIPS, //int maxClips;
@@ -2183,6 +2188,7 @@ weaponAttributes_t bg_weapons[ ] =
"Lucifer Canon", //char *weaponHumanName;
{ "models/weapons2/bfg/bfg.md3", 0, 0, 0 },
"icons/iconw_bfg",
+ "gfx/2d/crosshaira", 24,
LCANON_AMMO, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2207,6 +2213,7 @@ weaponAttributes_t bg_weapons[ ] =
"Las Gun", //char *weaponHumanName;
{ "models/weapons2/grenadel/grenadel.md3", 0, 0, 0 },
"icons/iconw_plasma",
+ "gfx/2d/crosshaira", 24,
LASGUN_AMMO, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2231,6 +2238,7 @@ weaponAttributes_t bg_weapons[ ] =
"Pain Saw", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
0, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2255,6 +2263,7 @@ weaponAttributes_t bg_weapons[ ] =
"Construction Kit", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
0, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2279,6 +2288,7 @@ weaponAttributes_t bg_weapons[ ] =
"Adv Construction Kit",//char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
0, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2303,6 +2313,7 @@ weaponAttributes_t bg_weapons[ ] =
"Alien build weapon", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
0, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2327,6 +2338,7 @@ weaponAttributes_t bg_weapons[ ] =
"Alien build weapon2",//char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
0, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2351,6 +2363,7 @@ weaponAttributes_t bg_weapons[ ] =
"Venom", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
0, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2375,6 +2388,7 @@ weaponAttributes_t bg_weapons[ ] =
"Claw and pounce", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
0, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2399,6 +2413,7 @@ weaponAttributes_t bg_weapons[ ] =
"Claw and pounce (upgrade)", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
3, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2423,6 +2438,7 @@ weaponAttributes_t bg_weapons[ ] =
"Claws", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
0, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2447,6 +2463,7 @@ weaponAttributes_t bg_weapons[ ] =
"Claws Upgrade", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
0, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2471,6 +2488,7 @@ weaponAttributes_t bg_weapons[ ] =
"Area Zap", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
0, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2495,6 +2513,7 @@ weaponAttributes_t bg_weapons[ ] =
"Directed Zap", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
0, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2519,6 +2538,7 @@ weaponAttributes_t bg_weapons[ ] =
"Ground Pound", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
0, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2543,6 +2563,7 @@ weaponAttributes_t bg_weapons[ ] =
"Lock Blob", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
0, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2567,6 +2588,7 @@ weaponAttributes_t bg_weapons[ ] =
"Tesla Generator", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
+ NULL, 0,
0, //int quan;
0, //int clips;
0, //int maxClips;
@@ -2746,6 +2768,43 @@ char *BG_FindIconForWeapon( int weapon )
/*
==============
+BG_FindCrosshairForWeapon
+==============
+*/
+char *BG_FindCrosshairForWeapon( int weapon )
+{
+ int i;
+
+ for( i = 0; i < bg_numWeapons; i++ )
+ {
+ if( bg_weapons[ i ].weaponNum == weapon )
+ return bg_weapons[ i ].crosshair;
+ }
+
+ //wimp out
+ return 0;
+}
+
+/*
+==============
+BG_FindCrosshairSizeForWeapon
+==============
+*/
+int BG_FindCrosshairSizeForWeapon( int weapon )
+{
+ int i;
+
+ for( i = 0; i < bg_numWeapons; i++ )
+ {
+ if( bg_weapons[ i ].weaponNum == weapon )
+ return bg_weapons[ i ].crosshairSize;
+ }
+
+ return 24;
+}
+
+/*
+==============
BG_FindAmmoForWeapon
==============
*/
diff --git a/src/game/bg_public.h b/src/game/bg_public.h
index f445945b..76115f18 100644
--- a/src/game/bg_public.h
+++ b/src/game/bg_public.h
@@ -911,6 +911,8 @@ typedef struct
char *models[ MAX_ITEM_MODELS ];
char *icon;
+ char *crosshair;
+ int crosshairSize;
int quan;
int clips;
@@ -1033,6 +1035,8 @@ int BG_FindWeaponNumForName( char *name );
char *BG_FindHumanNameForWeapon( int weapon );
char *BG_FindModelsForWeapon( int weapon, int modelNum );
char *BG_FindIconForWeapon( int weapon );
+char *BG_FindCrosshairForWeapon( int weapon );
+int BG_FindCrosshairSizeForWeapon( int weapon );
void BG_FindAmmoForWeapon( int weapon, int *quan, int *clips, int *maxClips );
qboolean BG_FindInfinteAmmoForWeapon( int weapon );
qboolean BG_FindUsesEnergyForWeapon( int weapon );
diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c
index b6e2d02d..059cff1f 100644
--- a/src/game/g_buildable.c
+++ b/src/game/g_buildable.c
@@ -2095,7 +2095,7 @@ gentity_t *G_buildItem( gentity_t *builder, buildable_t buildable, vec3_t origin
G_ValidateBuild
=================
*/
-void G_ValidateBuild( gentity_t *ent, buildable_t buildable )
+qboolean G_ValidateBuild( gentity_t *ent, buildable_t buildable )
{
weapon_t weapon;
float dist;
@@ -2107,61 +2107,61 @@ void G_ValidateBuild( gentity_t *ent, buildable_t buildable )
{
case IBE_NONE:
G_buildItem( ent, buildable, origin, ent->s.apos.trBase );
- break;
+ return qtrue;
case IBE_NOASSERT:
G_AddPredictableEvent( ent, EV_MENU, MN_A_NOASSERT );
- break;
+ return qfalse;
case IBE_NOHIVEMIND:
G_AddPredictableEvent( ent, EV_MENU, MN_A_NOHVMND );
- break;
+ return qfalse;
case IBE_HIVEMIND:
G_AddPredictableEvent( ent, EV_MENU, MN_A_HIVEMIND );
- break;
+ return qfalse;
case IBE_NORMAL:
G_AddPredictableEvent( ent, EV_MENU, MN_A_NORMAL );
- break;
+ return qfalse;
case IBE_REACTOR:
G_AddPredictableEvent( ent, EV_MENU, MN_H_REACTOR );
- break;
+ return qfalse;
case IBE_REPEATER:
G_AddPredictableEvent( ent, EV_MENU, MN_H_REPEATER );
- break;
+ return qfalse;
case IBE_NOROOM:
if( ent->client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS )
G_AddPredictableEvent( ent, EV_MENU, MN_H_NOROOM );
else
G_AddPredictableEvent( ent, EV_MENU, MN_A_NOROOM );
- break;
+ return qfalse;
case IBE_NOPOWER:
G_AddPredictableEvent( ent, EV_MENU, MN_H_NOPOWER );
- break;
+ return qfalse;
case IBE_NODCC:
G_AddPredictableEvent( ent, EV_MENU, MN_H_NODCC );
- break;
+ return qfalse;
case IBE_SPWNWARN:
G_AddPredictableEvent( ent, EV_MENU, MN_A_SPWNWARN );
G_buildItem( ent, buildable, origin, ent->s.apos.trBase );
- break;
+ return qtrue;
case IBE_RPLWARN:
G_AddPredictableEvent( ent, EV_MENU, MN_H_RPLWARN );
G_buildItem( ent, buildable, origin, ent->s.apos.trBase );
- break;
+ return qtrue;
case IBE_RPTWARN:
G_AddPredictableEvent( ent, EV_MENU, MN_H_RPTWARN );
G_buildItem( ent, buildable, origin, ent->s.apos.trBase );
- break;
+ return qtrue;
}
}
diff --git a/src/game/g_local.h b/src/game/g_local.h
index ebe18d2e..d614fb28 100644
--- a/src/game/g_local.h
+++ b/src/game/g_local.h
@@ -547,7 +547,7 @@ typedef enum
itemBuildError_t G_itemFits( gentity_t *ent, buildable_t buildable, int distance, vec3_t origin );
gentity_t *G_buildItem( gentity_t *builder, buildable_t buildable, vec3_t origin, vec3_t angles );
-void G_ValidateBuild( gentity_t *ent, buildable_t buildable );
+qboolean G_ValidateBuild( gentity_t *ent, buildable_t buildable );
void G_setBuildableAnim( gentity_t *ent, buildableAnimNumber_t anim, qboolean force );
void G_setIdleBuildableAnim( gentity_t *ent, buildableAnimNumber_t anim );
void G_SpawnBuildable(gentity_t *ent, buildable_t buildable);
diff --git a/src/game/g_weapon.c b/src/game/g_weapon.c
index 0837d7e2..e2d37d57 100644
--- a/src/game/g_weapon.c
+++ b/src/game/g_weapon.c
@@ -474,9 +474,11 @@ void buildFire( gentity_t *ent, dynMenu_t menu )
return;
}
- G_ValidateBuild( ent, ent->client->ps.stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT );
- ent->client->ps.stats[ STAT_BUILDABLE ] = BA_NONE;
- ent->client->ps.stats[ STAT_MISC ] += BG_FindBuildDelayForWeapon( ent->s.weapon );
+ if( G_ValidateBuild( ent, ent->client->ps.stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT ) )
+ {
+ ent->client->ps.stats[ STAT_BUILDABLE ] = BA_NONE;
+ ent->client->ps.stats[ STAT_MISC ] += BG_FindBuildDelayForWeapon( ent->s.weapon );
+ }
return;
}
diff --git a/src/game/tremulous.h b/src/game/tremulous.h
index 6d25456e..3af26fb5 100644
--- a/src/game/tremulous.h
+++ b/src/game/tremulous.h
@@ -285,9 +285,9 @@
#define CHAINGUN_DMG HDM(14)
#define FLAMER_GAS 400
-#define FLAMER_REPEAT 150
+#define FLAMER_REPEAT 300
#define FLAMER_PRICE 300
-#define FLAMER_DMG HDM(25)
+#define FLAMER_DMG HDM(30)
#define FLAMER_RADIUS 50
#define FLAMER_LIFETIME 1000.0f
#define FLAMER_SPEED 200.0f