summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Angus <tim@ngus.net>2003-02-03 03:42:57 +0000
committerTim Angus <tim@ngus.net>2003-02-03 03:42:57 +0000
commit30b6770361526a9713825591ced3b04ae3229827 (patch)
tree49f1d84969fc4a2ac4cefbdcb062e4ae1a787f76
parent03986b8845ba59376ff6b315be0ebf47ee7244d8 (diff)
* Makefile edit to include menudef.h in ctags
* Added ownerdraw to display a graphic when a usable buildable is nearby * Converted alien sense and human scanner to ownerdraws
-rw-r--r--Makefile2
-rw-r--r--src/cgame/cg_draw.c64
-rw-r--r--src/cgame/cg_local.h4
-rw-r--r--src/cgame/cg_scanner.c68
-rw-r--r--src/game/bg_misc.c39
-rw-r--r--src/game/bg_public.h2
-rw-r--r--src/game/g_buildable.c2
-rw-r--r--ui/menudef.h3
8 files changed, 134 insertions, 50 deletions
diff --git a/Makefile b/Makefile
index d143a023..010c3867 100644
--- a/Makefile
+++ b/Makefile
@@ -183,7 +183,7 @@ makedirs:
@if [ ! -d $(BQ)/$(UIDIRNAME) ];then mkdir $(BQ)/$(UIDIRNAME);fi
ctags:
- ctags -f tags -R src/*
+ ctags -f tags -R src/* ui/menudef.h
# --object lists for each build type--
GQVMOBJ = $(GOBJ:%.o=$(BQ)/%.asm)
diff --git a/src/cgame/cg_draw.c b/src/cgame/cg_draw.c
index 188c1e44..5efe2862 100644
--- a/src/cgame/cg_draw.c
+++ b/src/cgame/cg_draw.c
@@ -885,6 +885,58 @@ static void CG_DrawPlayerAmmoValue( rectDef_t *rect, vec4_t color )
}
}
+
+/*
+==============
+CG_DrawAlienSense
+==============
+*/
+static void CG_DrawAlienSense( rectDef_t *rect )
+{
+ if( BG_ClassHasAbility( cg.snap->ps.stats[ STAT_PCLASS ], SCA_ALIENSENSE ) )
+ CG_AlienSense( rect );
+}
+
+
+/*
+==============
+CG_DrawHumanScanner
+==============
+*/
+static void CG_DrawHumanScanner( rectDef_t *rect, qhandle_t shader )
+{
+ if( BG_gotItem( UP_HELMET, cg.snap->ps.stats ) )
+ CG_Scanner( rect, shader );
+}
+
+
+/*
+==============
+CG_DrawUsableBuildable
+==============
+*/
+static void CG_DrawUsableBuildable( rectDef_t *rect, qhandle_t shader, vec4_t color )
+{
+ vec3_t view, point;
+ trace_t trace;
+ entityState_t *es;
+
+ AngleVectors( cg.refdefViewAngles, view, NULL, NULL );
+ VectorMA( cg.refdef.vieworg, 64, view, point );
+ CG_Trace( &trace, cg.refdef.vieworg, NULL, NULL,
+ point, cg.predictedPlayerState.clientNum, MASK_SHOT );
+
+ es = &cg_entities[ trace.entityNum ].currentState;
+
+ if( es->eType == ET_BUILDABLE && BG_FindUsableForBuildable( es->modelindex ) )
+ {
+ trap_R_SetColor( color );
+ CG_DrawPic( rect->x, rect->y, rect->w, rect->h, shader );
+ trap_R_SetColor( NULL );
+ }
+}
+
+
#define BUILD_DELAY_TIME 2000
static void CG_DrawPlayerClipsValue( rectDef_t *rect, vec4_t color )
@@ -2042,6 +2094,12 @@ void CG_OwnerDraw( float x, float y, float w, float h, float text_x,
case CG_PLAYER_POISON_BARBS:
CG_DrawPlayerPoisonBarbs( &rect, color, shader );
break;
+ case CG_PLAYER_ALIEN_SENSE:
+ CG_DrawAlienSense( &rect );
+ break;
+ case CG_PLAYER_USABLE_BUILDABLE:
+ CG_DrawUsableBuildable( &rect, shader, color );
+ break;
case CG_AREA_SYSTEMCHAT:
CG_DrawAreaSystemChat( &rect, scale, color, shader );
break;
@@ -2693,12 +2751,6 @@ static void CG_Draw2D( void )
Menu_Paint( menu, qtrue );
CG_DrawCrosshair( );
-
- if( BG_gotItem( UP_HELMET, cg.snap->ps.stats ) )
- CG_Scanner( );
-
- if( BG_ClassHasAbility( cg.predictedPlayerState.stats[ STAT_PCLASS ], SCA_ALIENSENSE ) )
- CG_AlienSense( );
}
}
else if( cg_drawStatus.integer )
diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h
index 276bfd41..87416b2f 100644
--- a/src/cgame/cg_local.h
+++ b/src/cgame/cg_local.h
@@ -1332,8 +1332,8 @@ void CG_Creep( centity_t *cent );
//
// cg_scanner.c
//
-void CG_Scanner( );
-void CG_AlienSense( );
+void CG_Scanner( rectDef_t *rect, qhandle_t shader );
+void CG_AlienSense( rectDef_t *rect );
//
// cg_marks.c
diff --git a/src/cgame/cg_scanner.c b/src/cgame/cg_scanner.c
index 1c730dd7..2c410f20 100644
--- a/src/cgame/cg_scanner.c
+++ b/src/cgame/cg_scanner.c
@@ -13,53 +13,41 @@
#include "cg_local.h"
-#define XPOS 0.0f
-#define YPOS 0.0f
-#define WIDTH 640.0f
-#define HEIGHT 480.0f
-
#define STALKWIDTH 2.0f
#define BLIPX 16.0f
#define BLIPY 8.0f
-static void CG_DrawBlips( vec3_t origin, vec4_t colour )
+static void CG_DrawBlips( rectDef_t *rect, vec3_t origin, vec4_t colour )
{
vec3_t drawOrigin;
vec3_t up = { 0, 0, 1 };
RotatePointAroundVector( drawOrigin, up, origin, -cg.refdefViewAngles[ 1 ] - 90 );
- drawOrigin[ 0 ] /= ( 2 * HELMET_RANGE / WIDTH );
- drawOrigin[ 1 ] /= ( 2 * HELMET_RANGE / HEIGHT );
- drawOrigin[ 2 ] /= ( 2 * HELMET_RANGE / WIDTH );
+ drawOrigin[ 0 ] /= ( 2 * HELMET_RANGE / rect->w );
+ drawOrigin[ 1 ] /= ( 2 * HELMET_RANGE / rect->h );
+ drawOrigin[ 2 ] /= ( 2 * HELMET_RANGE / rect->w );
trap_R_SetColor( colour );
if( drawOrigin[ 2 ] > 0 )
- CG_DrawPic( XPOS + ( WIDTH / 2 ) - ( STALKWIDTH / 2 ) - drawOrigin[ 0 ],
- YPOS + ( HEIGHT / 2 ) + drawOrigin[ 1 ] - drawOrigin[ 2 ],
+ CG_DrawPic( rect->x + ( rect->w / 2 ) - ( STALKWIDTH / 2 ) - drawOrigin[ 0 ],
+ rect->y + ( rect->h / 2 ) + drawOrigin[ 1 ] - drawOrigin[ 2 ],
STALKWIDTH, drawOrigin[ 2 ], cgs.media.scannerLineShader );
else
- CG_DrawPic( XPOS + ( WIDTH / 2 ) - ( STALKWIDTH / 2 ) - drawOrigin[ 0 ],
- YPOS + ( HEIGHT / 2 ) + drawOrigin[ 1 ],
+ CG_DrawPic( rect->x + ( rect->w / 2 ) - ( STALKWIDTH / 2 ) - drawOrigin[ 0 ],
+ rect->y + ( rect->h / 2 ) + drawOrigin[ 1 ],
STALKWIDTH, -drawOrigin[ 2 ], cgs.media.scannerLineShader );
- CG_DrawPic( XPOS + ( WIDTH / 2 ) - ( BLIPX / 2 ) - drawOrigin[ 0 ],
- YPOS + ( HEIGHT / 2 ) - ( BLIPY / 2 ) + drawOrigin[ 1 ] - drawOrigin[ 2 ],
+ CG_DrawPic( rect->x + ( rect->w / 2 ) - ( BLIPX / 2 ) - drawOrigin[ 0 ],
+ rect->y + ( rect->h / 2 ) - ( BLIPY / 2 ) + drawOrigin[ 1 ] - drawOrigin[ 2 ],
BLIPX, BLIPY, cgs.media.scannerBlipShader );
trap_R_SetColor( NULL );
}
-#define ALIENSENSE_RANGE 1000.0f
-
-#define XPOS2 20.0f
-#define YPOS2 20.0f
-#define WIDTH2 600.0f
-#define HEIGHT2 440.0f
-
#define BLIPX2 24.0f
#define BLIPY2 24.0f
-static void CG_DrawDir( vec3_t origin, vec4_t colour )
+static void CG_DrawDir( rectDef_t *rect, vec3_t origin, vec4_t colour )
{
vec3_t drawOrigin;
vec3_t noZOrigin;
@@ -100,8 +88,8 @@ static void CG_DrawDir( vec3_t origin, vec4_t colour )
RotatePointAroundVector( drawOrigin, up, top, angle );
trap_R_SetColor( colour );
- CG_DrawPic( XPOS2 + ( WIDTH2 / 2 ) - ( BLIPX2 / 2 ) - drawOrigin[ 0 ] * ( WIDTH2 / 2 ),
- YPOS2 + ( HEIGHT2 / 2 ) - ( BLIPY2 / 2 ) + drawOrigin[ 1 ] * ( HEIGHT2 / 2 ),
+ CG_DrawPic( rect->x + ( rect->w / 2 ) - ( BLIPX2 / 2 ) - drawOrigin[ 0 ] * ( rect->w / 2 ),
+ rect->y + ( rect->h / 2 ) - ( BLIPY2 / 2 ) + drawOrigin[ 1 ] * ( rect->h / 2 ),
BLIPX2, BLIPY2, cgs.media.scannerBlipShader );
trap_R_SetColor( NULL );
}
@@ -111,13 +99,13 @@ static void CG_DrawDir( vec3_t origin, vec4_t colour )
CG_AlienSense
=============
*/
-void CG_AlienSense( void )
+void CG_AlienSense( rectDef_t *rect )
{
int i;
vec3_t origin;
vec3_t relOrigin;
- vec4_t buildable = { 1.0f, 0.0f, 1.0f, 1.0f };
- vec4_t client = { 0.0f, 0.0f, 1.0f, 1.0f };
+ vec4_t buildable = { 1.0f, 0.0f, 0.0f, 0.7f };
+ vec4_t client = { 0.0f, 0.0f, 1.0f, 0.7f };
VectorCopy( cg.refdef.vieworg, origin );
@@ -128,7 +116,7 @@ void CG_AlienSense( void )
VectorSubtract( cg.ep.humanBuildablePos[ i ], origin, relOrigin );
if( VectorLength( relOrigin ) < ALIENSENSE_RANGE )
- CG_DrawDir( relOrigin, buildable );
+ CG_DrawDir( rect, relOrigin, buildable );
}
//draw human clients
@@ -138,7 +126,7 @@ void CG_AlienSense( void )
VectorSubtract( cg.ep.humanClientPos[ i ], origin, relOrigin );
if( VectorLength( relOrigin ) < ALIENSENSE_RANGE )
- CG_DrawDir( relOrigin, client );
+ CG_DrawDir( rect, relOrigin, client );
}
}
@@ -147,7 +135,7 @@ void CG_AlienSense( void )
CG_Scanner
=============
*/
-void CG_Scanner( void )
+void CG_Scanner( rectDef_t *rect, qhandle_t shader )
{
int i;
vec3_t origin;
@@ -166,7 +154,7 @@ void CG_Scanner( void )
VectorSubtract( cg.ep.humanBuildablePos[ i ], origin, relOrigin );
if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] < 0 ) )
- CG_DrawBlips( relOrigin, hIbelow );
+ CG_DrawBlips( rect, relOrigin, hIbelow );
}
//draw alien buildables below scanner plane
@@ -176,7 +164,7 @@ void CG_Scanner( void )
VectorSubtract( cg.ep.alienBuildablePos[ i ], origin, relOrigin );
if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] < 0 ) )
- CG_DrawBlips( relOrigin, aIbelow );
+ CG_DrawBlips( rect, relOrigin, aIbelow );
}
//draw human clients below scanner plane
@@ -186,7 +174,7 @@ void CG_Scanner( void )
VectorSubtract( cg.ep.humanClientPos[ i ], origin, relOrigin );
if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] < 0 ) )
- CG_DrawBlips( relOrigin, hIbelow );
+ CG_DrawBlips( rect, relOrigin, hIbelow );
}
//draw alien buildables below scanner plane
@@ -196,10 +184,10 @@ void CG_Scanner( void )
VectorSubtract( cg.ep.alienClientPos[ i ], origin, relOrigin );
if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] < 0 ) )
- CG_DrawBlips( relOrigin, aIbelow );
+ CG_DrawBlips( rect, relOrigin, aIbelow );
}
- /*CG_DrawPic( XPOS, YPOS, WIDTH, HEIGHT, cgs.media.scannerShader );*/
+ CG_DrawPic( rect->x, rect->y, rect->w, rect->h, shader );
//draw human buildables above scanner plane
for( i = 0; i < cg.ep.numHumanBuildables; i++ )
@@ -208,7 +196,7 @@ void CG_Scanner( void )
VectorSubtract( cg.ep.humanBuildablePos[ i ], origin, relOrigin );
if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] > 0 ) )
- CG_DrawBlips( relOrigin, hIabove );
+ CG_DrawBlips( rect, relOrigin, hIabove );
}
//draw alien buildables above scanner plane
@@ -218,7 +206,7 @@ void CG_Scanner( void )
VectorSubtract( cg.ep.alienBuildablePos[ i ], origin, relOrigin );
if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] > 0 ) )
- CG_DrawBlips( relOrigin, aIabove );
+ CG_DrawBlips( rect, relOrigin, aIabove );
}
//draw human clients above scanner plane
@@ -228,7 +216,7 @@ void CG_Scanner( void )
VectorSubtract( cg.ep.humanClientPos[ i ], origin, relOrigin );
if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] > 0 ) )
- CG_DrawBlips( relOrigin, hIabove );
+ CG_DrawBlips( rect, relOrigin, hIabove );
}
//draw alien clients above scanner plane
@@ -238,6 +226,6 @@ void CG_Scanner( void )
VectorSubtract( cg.ep.alienClientPos[ i ], origin, relOrigin );
if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] > 0 ) )
- CG_DrawBlips( relOrigin, aIabove );
+ CG_DrawBlips( rect, relOrigin, aIabove );
}
}
diff --git a/src/game/bg_misc.c b/src/game/bg_misc.c
index 7512c19c..97ef2c6a 100644
--- a/src/game/bg_misc.c
+++ b/src/game/bg_misc.c
@@ -41,6 +41,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
100, //int nextthink;
+ qfalse, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -72,6 +73,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
100, //int nextthink;
+ qfalse, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -103,6 +105,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
100, //int nextthink;
+ qfalse, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -134,6 +137,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
500, //int nextthink;
+ qfalse, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -165,6 +169,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
100, //int nextthink;
+ qfalse, //qboolean usable;
TRAPPER_RANGE, //int turretRange;
TRAPPER_REPEAT, //int turretFireSpeed;
WP_LOCKBLOB_LAUNCHER, //weapon_t turretProjType;
@@ -196,6 +201,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
OVERMIND_ATTACK_REPEAT,//int nextthink;
+ qfalse, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -227,6 +233,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
150, //int nextthink;
+ qtrue, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -258,6 +265,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
-1, //int nextthink;
+ qtrue, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -289,6 +297,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_HBUILD )|( 1 << WP_HBUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
100, //int nextthink;
+ qfalse, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -320,6 +329,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_HBUILD )|( 1 << WP_HBUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
100, //int nextthink;
+ qfalse, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -351,6 +361,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_HBUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
100, //int nextthink;
+ qfalse, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -384,6 +395,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_HBUILD )|( 1 << WP_HBUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
50, //int nextthink;
+ qfalse, //qboolean usable;
MGTURRET_RANGE, //int turretRange;
MGTURRET_REPEAT, //int turretFireSpeed;
WP_MACHINEGUN, //weapon_t turretProjType;
@@ -415,6 +427,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_HBUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
150, //int nextthink;
+ qfalse, //qboolean usable;
TESLAGEN_RANGE, //int turretRange;
TESLAGEN_REPEAT, //int turretFireSpeed;
WP_TESLAGEN, //weapon_t turretProjType;
@@ -446,6 +459,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_HBUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
100, //int nextthink;
+ qfalse, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -477,6 +491,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_HBUILD )|( 1 << WP_HBUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
100, //int nextthink;
+ qtrue, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -508,6 +523,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_HBUILD )|( 1 << WP_HBUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
100, //int nextthink;
+ qtrue, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -539,6 +555,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_HBUILD )|( 1 << WP_HBUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
-1, //int nextthink;
+ qtrue, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -570,6 +587,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_HBUILD )|( 1 << WP_HBUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
100, //int nextthink;
+ qtrue, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -601,6 +619,7 @@ buildableAttributes_t bg_buildableList[ ] =
( 1 << WP_HBUILD2 ), //weapon_t buildWeapon;
BANIM_IDLE1, //int idleAnim;
100, //int nextthink;
+ qfalse, //qboolean usable;
0, //int turretRange;
0, //int turretFireSpeed;
WP_NONE, //weapon_t turretProjType;
@@ -1024,6 +1043,26 @@ int BG_FindNextThinkForBuildable( int bclass )
/*
==============
+BG_FindUsableForBuildable
+==============
+*/
+qboolean BG_FindUsableForBuildable( int bclass )
+{
+ int i;
+
+ for( i = 0; i < bg_numBuildables; i++ )
+ {
+ if( bg_buildableList[ i ].buildNum == bclass )
+ {
+ return bg_buildableList[ i ].usable;
+ }
+ }
+
+ return qfalse;
+}
+
+/*
+==============
BG_FindFireSpeedForBuildable
==============
*/
diff --git a/src/game/bg_public.h b/src/game/bg_public.h
index 890c1b88..20b97cf7 100644
--- a/src/game/bg_public.h
+++ b/src/game/bg_public.h
@@ -882,6 +882,7 @@ typedef struct
int idleAnim;
int nextthink;
+ qboolean usable;
int turretRange;
int turretFireSpeed;
@@ -994,6 +995,7 @@ int BG_FindTeamForBuildable( int bclass );
weapon_t BG_FindBuildWeaponForBuildable( int bclass );
int BG_FindAnimForBuildable( int bclass );
int BG_FindNextThinkForBuildable( int bclass );
+qboolean BG_FindUsableForBuildable( int bclass );
int BG_FindRangeForBuildable( int bclass );
int BG_FindFireSpeedForBuildable( int bclass );
weapon_t BG_FindProjTypeForBuildable( int bclass );
diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c
index 867804fd..f64d7307 100644
--- a/src/game/g_buildable.c
+++ b/src/game/g_buildable.c
@@ -2078,7 +2078,7 @@ gentity_t *G_buildItem( gentity_t *builder, buildable_t buildable, vec3_t origin
if( built->powered = findPower( built ) )
built->s.generic1 |= B_POWERED_TOGGLEBIT;
- if( built->dcced = findDCC( built ) )
+ if( built->dcced = findDCC( built ) )
built->s.generic1 |= B_DCCED_TOGGLEBIT;
VectorCopy( normal, built->s.origin2 );
diff --git a/ui/menudef.h b/ui/menudef.h
index bb4c30e5..eec6d04b 100644
--- a/ui/menudef.h
+++ b/ui/menudef.h
@@ -150,6 +150,9 @@
#define CG_PLAYER_WALLCLIMBING 103
#define CG_PLAYER_BOOSTED 104
#define CG_PLAYER_POISON_BARBS 105
+#define CG_PLAYER_ALIEN_SENSE 108
+#define CG_PLAYER_HUMAN_SCANNER 109
+#define CG_PLAYER_USABLE_BUILDABLE 110
#define CG_SELECTEDPLAYER_HEAD 7
#define CG_SELECTEDPLAYER_NAME 8
#define CG_SELECTEDPLAYER_LOCATION 9