diff options
author | Tim Angus <tim@ngus.net> | 2002-09-16 01:24:12 +0000 |
---|---|---|
committer | Tim Angus <tim@ngus.net> | 2002-09-16 01:24:12 +0000 |
commit | 8ecf6d9e5d2a03e965647ac264940f8cd34eef0a (patch) | |
tree | 579d5c88e7d3d3b767e39d3cdd3e40ebc974bf75 /src | |
parent | eb401f8e27491f048ca0095a3e2f984e2e3a151b (diff) |
* Added global header tremulous.h in preparation for balancing
* Constants propogated throughout the source
* Various random fixes and tweaks
Diffstat (limited to 'src')
-rw-r--r-- | src/cgame/cg_drawtools.c | 2 | ||||
-rw-r--r-- | src/cgame/cg_ents.c | 2 | ||||
-rw-r--r-- | src/cgame/cg_main.c | 16 | ||||
-rw-r--r-- | src/cgame/cg_predict.c | 2 | ||||
-rw-r--r-- | src/cgame/cg_scanner.c | 30 | ||||
-rw-r--r-- | src/cgame/cg_view.c | 14 | ||||
-rw-r--r-- | src/cgame/cg_weapons.c | 18 | ||||
-rw-r--r-- | src/game/bg_misc.c | 647 | ||||
-rw-r--r-- | src/game/bg_pmove.c | 78 | ||||
-rw-r--r-- | src/game/bg_public.h | 66 | ||||
-rw-r--r-- | src/game/g_active.c | 51 | ||||
-rw-r--r-- | src/game/g_buildable.c | 85 | ||||
-rw-r--r-- | src/game/g_client.c | 5 | ||||
-rw-r--r-- | src/game/g_cmds.c | 2 | ||||
-rw-r--r-- | src/game/g_local.h | 4 | ||||
-rw-r--r-- | src/game/g_main.c | 8 | ||||
-rw-r--r-- | src/game/g_missile.c | 57 | ||||
-rw-r--r-- | src/game/g_weapon.c | 89 | ||||
-rw-r--r-- | src/game/tremulous.h | 466 |
19 files changed, 1024 insertions, 618 deletions
diff --git a/src/cgame/cg_drawtools.c b/src/cgame/cg_drawtools.c index 31f7f2e3..d5df1f42 100644 --- a/src/cgame/cg_drawtools.c +++ b/src/cgame/cg_drawtools.c @@ -328,7 +328,7 @@ void CG_GetColorForHealth( int health, int armor, vec4_t hcolor ) } count = armor; - max = health * ARMOR_PROTECTION / ( 1.0 - ARMOR_PROTECTION ); + max = health; if( max < count ) count = max; diff --git a/src/cgame/cg_ents.c b/src/cgame/cg_ents.c index c4b287aa..deaf9c56 100644 --- a/src/cgame/cg_ents.c +++ b/src/cgame/cg_ents.c @@ -292,7 +292,7 @@ static void CG_Missile( centity_t *cent ) RotateAroundDirection( ent.axis, cg.time / 4 ); - fraction = (float)s1->generic1 / (float)LC_TOTAL_CHARGE; + fraction = (float)s1->generic1 / (float)LCANON_TOTAL_CHARGE; VectorScale( ent.axis[ 0 ], fraction, ent.axis[ 0 ] ); VectorScale( ent.axis[ 1 ], fraction, ent.axis[ 1 ] ); VectorScale( ent.axis[ 2 ], fraction, ent.axis[ 2 ] ); diff --git a/src/cgame/cg_main.c b/src/cgame/cg_main.c index e19f67d8..e0b4936d 100644 --- a/src/cgame/cg_main.c +++ b/src/cgame/cg_main.c @@ -564,7 +564,6 @@ called during a precache command static void CG_RegisterSounds( void ) { int i; - char items[ MAX_ITEMS + 1 ]; char name[ MAX_QPATH ]; const char *soundName; @@ -623,9 +622,6 @@ static void CG_RegisterSounds( void ) cgs.media.footsteps[ FOOTSTEP_METAL ][ i ] = trap_S_RegisterSound( name, qfalse ); } - // only register the items that the server says we need - strcpy( items, CG_ConfigString( CS_ITEMS ) ); - for( i = 1 ; i < MAX_SOUNDS ; i++ ) { soundName = CG_ConfigString( CS_SOUNDS + i ); @@ -669,7 +665,6 @@ This function may execute for a couple of minutes with a slow disk. static void CG_RegisterGraphics( void ) { int i; - char items[ MAX_ITEMS + 1 ]; static char *sb_nums[ 11 ] = { "gfx/2d/numbers/zero_32b", @@ -782,9 +777,6 @@ static void CG_RegisterGraphics( void ) memset( cg_weapons, 0, sizeof( cg_weapons ) ); memset( cg_upgrades, 0, sizeof( cg_upgrades ) ); - // only register the items that the server says we need - strcpy( items, CG_ConfigString( CS_ITEMS) ); - // wall marks cgs.media.bulletMarkShader = trap_R_RegisterShader( "gfx/damage/bullet_mrk" ); cgs.media.burnMarkShader = trap_R_RegisterShader( "gfx/damage/burn_med_mrk" ); @@ -1502,6 +1494,12 @@ static void CG_RunCinematicFrame( int handle ) trap_CIN_RunCinematic( handle ); } +//TA: hack to prevent warning +static qboolean CG_OwnerDrawVisible( int parameter ) +{ + return qfalse; +} + /* ================= CG_LoadHudMenu @@ -1531,7 +1529,7 @@ void CG_LoadHudMenu( ) cgDC.registerFont = &trap_R_RegisterFont; cgDC.ownerDrawItem = &CG_OwnerDraw; cgDC.getValue = &CG_GetValue; - cgDC.ownerDrawVisible = NULL; //&CG_OwnerDrawVisible; + cgDC.ownerDrawVisible = &CG_OwnerDrawVisible; cgDC.runScript = &CG_RunMenuScript; cgDC.getTeamColor = &CG_GetTeamColor; cgDC.setCVar = trap_Cvar_Set; diff --git a/src/cgame/cg_predict.c b/src/cgame/cg_predict.c index 6f55f1ce..a8285306 100644 --- a/src/cgame/cg_predict.c +++ b/src/cgame/cg_predict.c @@ -414,7 +414,7 @@ void CG_PredictPlayerState( void ) if( cg.snap->ps.persistant[ PERS_TEAM ] == TEAM_SPECTATOR ) cg_pmove.tracemask &= ~CONTENTS_BODY; // spectators can fly through bodies - cg_pmove.noFootsteps = ( cgs.dmflags & DF_NO_FOOTSTEPS ) > 0; + cg_pmove.noFootsteps = 0; // save the state before the pmove so we can detect transitions oldPlayerState = cg.predictedPlayerState; diff --git a/src/cgame/cg_scanner.c b/src/cgame/cg_scanner.c index 4135eec9..1c730dd7 100644 --- a/src/cgame/cg_scanner.c +++ b/src/cgame/cg_scanner.c @@ -13,8 +13,6 @@ #include "cg_local.h" -#define RANGE 1000.0f - #define XPOS 0.0f #define YPOS 0.0f #define WIDTH 640.0f @@ -30,9 +28,9 @@ static void CG_DrawBlips( vec3_t origin, vec4_t colour ) vec3_t up = { 0, 0, 1 }; RotatePointAroundVector( drawOrigin, up, origin, -cg.refdefViewAngles[ 1 ] - 90 ); - drawOrigin[ 0 ] /= ( 2 * RANGE / WIDTH ); - drawOrigin[ 1 ] /= ( 2 * RANGE / HEIGHT ); - drawOrigin[ 2 ] /= ( 2 * RANGE / WIDTH ); + drawOrigin[ 0 ] /= ( 2 * HELMET_RANGE / WIDTH ); + drawOrigin[ 1 ] /= ( 2 * HELMET_RANGE / HEIGHT ); + drawOrigin[ 2 ] /= ( 2 * HELMET_RANGE / WIDTH ); trap_R_SetColor( colour ); @@ -51,7 +49,7 @@ static void CG_DrawBlips( vec3_t origin, vec4_t colour ) trap_R_SetColor( NULL ); } -#define RANGE2 1000.0f +#define ALIENSENSE_RANGE 1000.0f #define XPOS2 20.0f #define YPOS2 20.0f @@ -129,7 +127,7 @@ void CG_AlienSense( void ) VectorClear( relOrigin ); VectorSubtract( cg.ep.humanBuildablePos[ i ], origin, relOrigin ); - if( VectorLength( relOrigin ) < RANGE2 ) + if( VectorLength( relOrigin ) < ALIENSENSE_RANGE ) CG_DrawDir( relOrigin, buildable ); } @@ -139,7 +137,7 @@ void CG_AlienSense( void ) VectorClear( relOrigin ); VectorSubtract( cg.ep.humanClientPos[ i ], origin, relOrigin ); - if( VectorLength( relOrigin ) < RANGE2 ) + if( VectorLength( relOrigin ) < ALIENSENSE_RANGE ) CG_DrawDir( relOrigin, client ); } } @@ -167,7 +165,7 @@ void CG_Scanner( void ) VectorClear( relOrigin ); VectorSubtract( cg.ep.humanBuildablePos[ i ], origin, relOrigin ); - if( VectorLength( relOrigin ) < RANGE && ( relOrigin[ 2 ] < 0 ) ) + if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] < 0 ) ) CG_DrawBlips( relOrigin, hIbelow ); } @@ -177,7 +175,7 @@ void CG_Scanner( void ) VectorClear( relOrigin ); VectorSubtract( cg.ep.alienBuildablePos[ i ], origin, relOrigin ); - if( VectorLength( relOrigin ) < RANGE && ( relOrigin[ 2 ] < 0 ) ) + if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] < 0 ) ) CG_DrawBlips( relOrigin, aIbelow ); } @@ -187,7 +185,7 @@ void CG_Scanner( void ) VectorClear( relOrigin ); VectorSubtract( cg.ep.humanClientPos[ i ], origin, relOrigin ); - if( VectorLength( relOrigin ) < RANGE && ( relOrigin[ 2 ] < 0 ) ) + if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] < 0 ) ) CG_DrawBlips( relOrigin, hIbelow ); } @@ -197,7 +195,7 @@ void CG_Scanner( void ) VectorClear( relOrigin ); VectorSubtract( cg.ep.alienClientPos[ i ], origin, relOrigin ); - if( VectorLength( relOrigin ) < RANGE && ( relOrigin[ 2 ] < 0 ) ) + if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] < 0 ) ) CG_DrawBlips( relOrigin, aIbelow ); } @@ -209,7 +207,7 @@ void CG_Scanner( void ) VectorClear( relOrigin ); VectorSubtract( cg.ep.humanBuildablePos[ i ], origin, relOrigin ); - if( VectorLength( relOrigin ) < RANGE && ( relOrigin[ 2 ] > 0 ) ) + if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] > 0 ) ) CG_DrawBlips( relOrigin, hIabove ); } @@ -219,7 +217,7 @@ void CG_Scanner( void ) VectorClear( relOrigin ); VectorSubtract( cg.ep.alienBuildablePos[ i ], origin, relOrigin ); - if( VectorLength( relOrigin ) < RANGE && ( relOrigin[ 2 ] > 0 ) ) + if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] > 0 ) ) CG_DrawBlips( relOrigin, aIabove ); } @@ -229,7 +227,7 @@ void CG_Scanner( void ) VectorClear( relOrigin ); VectorSubtract( cg.ep.humanClientPos[ i ], origin, relOrigin ); - if( VectorLength( relOrigin ) < RANGE && ( relOrigin[ 2 ] > 0 ) ) + if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] > 0 ) ) CG_DrawBlips( relOrigin, hIabove ); } @@ -239,7 +237,7 @@ void CG_Scanner( void ) VectorClear( relOrigin ); VectorSubtract( cg.ep.alienClientPos[ i ], origin, relOrigin ); - if( VectorLength( relOrigin ) < RANGE && ( relOrigin[ 2 ] > 0 ) ) + if( VectorLength( relOrigin ) < HELMET_RANGE && ( relOrigin[ 2 ] > 0 ) ) CG_DrawBlips( relOrigin, aIabove ); } } diff --git a/src/cgame/cg_view.c b/src/cgame/cg_view.c index afe9c979..89f25029 100644 --- a/src/cgame/cg_view.c +++ b/src/cgame/cg_view.c @@ -486,7 +486,7 @@ static void CG_OffsetFirstPersonView( void ) AngleVectors( angles, forward, NULL, NULL ); VectorNormalize( forward ); - fraction1 = (float)( cg.time - cg.weapon2Time ) / POUNCE_TIME; + fraction1 = (float)( cg.time - cg.weapon2Time ) / (float)DRAGOON_POUNCE_TIME; if( fraction1 > 1.0f ) fraction1 = 1.0f; @@ -556,8 +556,8 @@ static void CG_OffsetFirstPersonView( void ) float fraction = sin( ( (float)cg.time / 1000.0f ) * M_PI * 2 * PCLOUD_ROLL_FREQUENCY ); float pitchFraction = sin( ( (float)cg.time / 1000.0f ) * M_PI * 5 * PCLOUD_ROLL_FREQUENCY ); - fraction *= 1.0f - ( ( cg.time - cg.firstPoisonedTime ) / (float)PCLOUD_TIME ); - pitchFraction *= 1.0f - ( ( cg.time - cg.firstPoisonedTime ) / (float)PCLOUD_TIME ); + fraction *= 1.0f - ( ( cg.time - cg.firstPoisonedTime ) / (float)HYDRA_PCLOUD_TIME ); + pitchFraction *= 1.0f - ( ( cg.time - cg.firstPoisonedTime ) / (float)HYDRA_PCLOUD_TIME ); angles[ ROLL ] += fraction * PCLOUD_ROLL_AMPLITUDE; angles[ YAW ] += fraction * PCLOUD_ROLL_AMPLITUDE; @@ -602,7 +602,7 @@ static void CG_OffsetFirstPersonView( void ) //bit closer to the ground mins[ 2 ] = -1.0f; - deltaTime = cg.time - ( cg.firstKnockedTime + (int)( (float)KOVER_TIME / 5.0f ) ); + deltaTime = cg.time - ( cg.firstKnockedTime + (int)( (float)BMOFO_KOVER_TIME / 5.0f ) ); if( deltaTime < 0 ) { @@ -625,7 +625,7 @@ static void CG_OffsetFirstPersonView( void ) CG_Trace( &tr, baseOrigin, mins, maxs, origin, cg.predictedPlayerState.clientNum, MASK_SOLID ); VectorCopy( tr.endpos, origin ); - rollFraction = (float)deltaTime / ( (float)KOVER_TIME / 6.0f ); + rollFraction = (float)deltaTime / ( (float)BMOFO_KOVER_TIME / 6.0f ); if( rollFraction > 1.0f ) rollFraction = 1.0f; @@ -655,7 +655,7 @@ static void CG_OffsetFirstPersonView( void ) deltaTime = cg.time - cg.firstGetUpTime; - rollFraction = (float)deltaTime / (float)GETUP_TIME; + rollFraction = (float)deltaTime / (float)BMOFO_GETUP_TIME; if( rollFraction > 1.0f ) rollFraction = 1.0f; @@ -872,7 +872,7 @@ static int CG_CalcFov( void ) { phase = cg.time / 1000.0 * PCLOUD_ZOOM_FREQUENCY * M_PI * 2; v = PCLOUD_ZOOM_AMPLITUDE * sin( phase ); - v *= 1.0f - ( ( cg.time - cg.firstPoisonedTime ) / (float)PCLOUD_TIME ); + v *= 1.0f - ( ( cg.time - cg.firstPoisonedTime ) / (float)HYDRA_PCLOUD_TIME ); fov_x += v; fov_y += v; } diff --git a/src/cgame/cg_weapons.c b/src/cgame/cg_weapons.c index e715e544..e8c6aedf 100644 --- a/src/cgame/cg_weapons.c +++ b/src/cgame/cg_weapons.c @@ -99,7 +99,7 @@ void CG_TeslaTrail( vec3_t start, vec3_t end, int srcENum, int destENum ) refEntity_t *re; //add a bunch of bolt segments - le = CG_AllocLocalEntity(); + le = CG_AllocLocalEntity( ); re = &le->refEntity; le->leType = LE_LIGHTNING_BOLT; @@ -141,8 +141,7 @@ void CG_AlienZap( vec3_t start, vec3_t end, int srcENum, int destENum ) le->destENum = destENum; le->vOffset = -4; - //FIXME: share with server - le->maxRange = 200; + le->maxRange = CHIMERA_AREAZAP_RANGE; VectorCopy( start, re->origin ); VectorCopy( end, re->oldorigin ); @@ -563,7 +562,7 @@ static void CG_LightningBolt( centity_t *cent, vec3_t origin ) VectorMA( muzzlePoint, 14, forward, muzzlePoint ); // project forward by the lightning range - VectorMA( muzzlePoint, LIGHTNING_RANGE, forward, endPoint ); + VectorMA( muzzlePoint, TESLAGEN_RANGE, forward, endPoint ); // see if it hit a wall CG_Trace( &trace, muzzlePoint, vec3_origin, vec3_origin, endPoint, @@ -673,6 +672,7 @@ static void CG_PoisonCloud( centity_t *cent, int firstPoisonTime ) cent->poisonTime = cg.time + POISONCLOUD_GAP; } +#define FIREBALL_GAP 15 //basically as fast as possible yet regular /* =============== @@ -697,7 +697,7 @@ static void CG_FlameTrail( centity_t *cent ) { AngleVectors( cg.refdefViewAngles, forward, right, up ); VectorCopy( cg.refdef.vieworg, muzzlePoint ); - VectorScale( cg.predictedPlayerState.velocity, FIREBALL_LAG, pVelocity ); + VectorScale( cg.predictedPlayerState.velocity, FLAMER_LAG, pVelocity ); } else { @@ -706,10 +706,10 @@ static void CG_FlameTrail( centity_t *cent ) //FIXME: this is gonna look weird when crouching muzzlePoint[ 2 ] += DEFAULT_VIEWHEIGHT; - VectorScale( cent->currentState.pos.trDelta, FIREBALL_LAG, pVelocity ); + VectorScale( cent->currentState.pos.trDelta, FLAMER_LAG, pVelocity ); } - VectorMA( pVelocity, FIREBALL_SPEED, forward, velocity ); + VectorMA( pVelocity, FLAMER_SPEED, forward, velocity ); //FIXME: tweak these numbers when (if?) the flamer model is done VectorMA( muzzlePoint, 24.0f, forward, muzzlePoint ); @@ -718,7 +718,7 @@ static void CG_FlameTrail( centity_t *cent ) CG_LaunchSprite( muzzlePoint, velocity, vec3_origin, 0.0f, 0.1f, 4.0f, 40.0f, 255.0f, 255.0f, - rand( ) % 360, cg.time, cg.time, FIREBALL_LIFETIME, + rand( ) % 360, cg.time, cg.time, FLAMER_LIFETIME, cgs.media.flameShader[ 0 ], qfalse, qfalse ); //set next ball time @@ -1012,7 +1012,7 @@ void CG_AddViewWeapon( playerState_t *ps ) if( ps->weapon == WP_LUCIFER_CANON && ps->stats[ STAT_MISC ] > 0 ) { - float fraction = (float)ps->stats[ STAT_MISC ] / (float)LC_TOTAL_CHARGE; + float fraction = (float)ps->stats[ STAT_MISC ] / (float)LCANON_TOTAL_CHARGE; VectorMA( hand.origin, random( ) * fraction, cg.refdef.viewaxis[ 0 ], hand.origin ); VectorMA( hand.origin, random( ) * fraction, cg.refdef.viewaxis[ 1 ], hand.origin ); diff --git a/src/game/bg_misc.c b/src/game/bg_misc.c index 8870abe0..94e3a217 100644 --- a/src/game/bg_misc.c +++ b/src/game/bg_misc.c @@ -29,14 +29,13 @@ buildableAttributes_t bg_buildableList[ ] = { -15, -15, -15 }, //vec3_t mins; { 15, 15, 15 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; - 0.0, //float bounce; - 100, //int buildPoints; + 0.0, //float bounce; + ASPAWN_BP, //int buildPoints; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; - 50, //int regenRate; - 50, //int damage; - 50, //int splashDamage; - 200, //int splashRadius; + ASPAWN_HEALTH, //int health; + ASPAWN_REGEN, //int regenRate; + ASPAWN_SPLASHDAMAGE, //int splashDamage; + ASPAWN_SPLASHRADIUS, //int splashRadius; MOD_ASPAWN, //int meansOfDeath; BIT_ALIENS, //int team; ( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon; @@ -48,7 +47,7 @@ buildableAttributes_t bg_buildableList[ ] = 0.5f, //float minNormal; qtrue, //qboolean invertNormal; qfalse, //qboolean creepTest; - 120, //int creepSize; + ASPAWN_CREEPSIZE, //int creepSize; qfalse, //qboolean dccTest; qfalse //qboolean reactorTest; }, @@ -61,14 +60,13 @@ buildableAttributes_t bg_buildableList[ ] = { -15, -15, -15 }, //vec3_t mins; { 15, 15, 15 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; - 0.0, //float bounce; - 80, //int buildPoints; + 0.0, //float bounce; + BARRICADE_BP, //int buildPoints; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; - 50, //int regenRate; - 50, //int damage; - 20, //int splashDamage; - 50, //int splashRadius; + BARRICADE_HEALTH, //int health; + BARRICADE_REGEN, //int regenRate; + BARRICADE_SPLASHDAMAGE,//int splashDamage; + BARRICADE_SPLASHRADIUS,//int splashRadius; MOD_ASPAWN, //int meansOfDeath; BIT_ALIENS, //int team; ( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon; @@ -80,7 +78,7 @@ buildableAttributes_t bg_buildableList[ ] = 0.707f, //float minNormal; qfalse, //qboolean invertNormal; qtrue, //qboolean creepTest; - 120, //int creepSize; + BARRICADE_CREEPSIZE, //int creepSize; qfalse, //qboolean dccTest; qfalse //qboolean reactorTest; }, @@ -94,13 +92,12 @@ buildableAttributes_t bg_buildableList[ ] = { 26, 26, 9 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; 0.0, //float bounce; - 80, //int buildPoints; + BOOSTER_BP, //int buildPoints; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; - 50, //int regenRate; - 50, //int damage; - 20, //int splashDamage; - 50, //int splashRadius; + BOOSTER_HEALTH, //int health; + BOOSTER_REGEN, //int regenRate; + BOOSTER_SPLASHDAMAGE, //int splashDamage; + BOOSTER_SPLASHRADIUS, //int splashRadius; MOD_ASPAWN, //int meansOfDeath; BIT_ALIENS, //int team; ( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon; @@ -112,7 +109,7 @@ buildableAttributes_t bg_buildableList[ ] = 0.707f, //float minNormal; qfalse, //qboolean invertNormal; qtrue, //qboolean creepTest; - 120, //int creepSize; + BOOSTER_CREEPSIZE, //int creepSize; qfalse, //qboolean dccTest; qfalse //qboolean reactorTest; }, @@ -126,13 +123,12 @@ buildableAttributes_t bg_buildableList[ ] = { 15, 15, 15 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; 0.0, //float bounce; - 80, //int buildPoints; + ACIDTUBE_BP, //int buildPoints; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; - 50, //int regenRate; - 50, //int damage; - 20, //int splashDamage; - 400, //int splashRadius; + ACIDTUBE_HEALTH, //int health; + ACIDTUBE_REGEN, //int regenRate; + ACIDTUBE_SPLASHDAMAGE, //int splashDamage; + ACIDTUBE_SPLASHRADIUS, //int splashRadius; MOD_ASPAWN, //int meansOfDeath; BIT_ALIENS, //int team; ( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon; @@ -144,7 +140,7 @@ buildableAttributes_t bg_buildableList[ ] = 0.707f, //float minNormal; qtrue, //qboolean invertNormal; qtrue, //qboolean creepTest; - 120, //int creepSize; + ACIDTUBE_CREEPSIZE, //int creepSize; qfalse, //qboolean dccTest; qfalse //qboolean reactorTest; }, @@ -158,57 +154,55 @@ buildableAttributes_t bg_buildableList[ ] = { 15, 15, 15 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; 0.0, //float bounce; - 80, //int buildPoints; + TRAPPER_BP, //int buildPoints; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; - 50, //int regenRate; - 50, //int damage; - 20, //int splashDamage; - 50, //int splashRadius; + TRAPPER_HEALTH, //int health; + TRAPPER_REGEN, //int regenRate; + TRAPPER_SPLASHDAMAGE, //int splashDamage; + TRAPPER_SPLASHRADIUS, //int splashRadius; MOD_ASPAWN, //int meansOfDeath; BIT_ALIENS, //int team; ( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon; BANIM_IDLE1, //int idleAnim; - 1000, //int nextthink; - 0, //int turretFireSpeed; - 400, //int turretRange; + 100, //int nextthink; + TRAPPER_REPEAT, //int turretFireSpeed; + TRAPPER_RANGE, //int turretRange; WP_LOCKBLOB_LAUNCHER, //weapon_t turretProjType; 0.0f, //float minNormal; qtrue, //qboolean invertNormal; qtrue, //qboolean creepTest; - 30, //int creepSize; + TRAPPER_CREEPSIZE, //int creepSize; qfalse, //qboolean dccTest; qfalse //qboolean reactorTest; }, { BA_A_HIVEMIND, //int buildNum; "hivemind", //char *buildName; - "Hivemind", //char *humanName; + "Overmind", //char *humanName; "team_alien_hivemind", //char *entityName; { "models/buildables/hivemind/hivemind.md3", 0, 0, 0 }, { -15, -15, -15 }, //vec3_t mins; { 15, 15, 15 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; 0.0, //float bounce; - 0, //int buildPoints; + OVERMIND_BP, //int buildPoints; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; - 50, //int regenRate; - 50, //int damage; - 50, //int splashDamage; - 300, //int splashRadius; + OVERMIND_HEALTH, //int health; + OVERMIND_REGEN, //int regenRate; + OVERMIND_SPLASHDAMAGE, //int splashDamage; + OVERMIND_SPLASHRADIUS, //int splashRadius; MOD_ASPAWN, //int meansOfDeath; BIT_ALIENS, //int team; ( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon; BANIM_IDLE1, //int idleAnim; - 1000, //int nextthink; + OVERMIND_ATTACK_REPEAT,//int nextthink; 0, //int turretFireSpeed; 0, //int turretRange; WP_NONE, //weapon_t turretProjType; 0.707f, //float minNormal; qfalse, //qboolean invertNormal; qfalse, //qboolean creepTest; - 120, //int creepSize; + OVERMIND_CREEPSIZE, //int creepSize; qfalse, //qboolean dccTest; qtrue //qboolean reactorTest; }, @@ -222,13 +216,12 @@ buildableAttributes_t bg_buildableList[ ] = { 50, 50, 20 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; 0.0, //float bounce; - 80, //int buildPoints; + HOVEL_BP, //int buildPoints; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; - 50, //int regenRate; - 50, //int damage; - 20, //int splashDamage; - 50, //int splashRadius; + HOVEL_HEALTH, //int health; + HOVEL_REGEN, //int regenRate; + HOVEL_SPLASHDAMAGE, //int splashDamage; + HOVEL_SPLASHRADIUS, //int splashRadius; MOD_ASPAWN, //int meansOfDeath; BIT_ALIENS, //int team; ( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon; @@ -240,7 +233,7 @@ buildableAttributes_t bg_buildableList[ ] = 0.707f, //float minNormal; qtrue, //qboolean invertNormal; qtrue, //qboolean creepTest; - 120, //int creepSize; + HOVEL_CREEPSIZE, //int creepSize; qfalse, //qboolean dccTest; qfalse //qboolean reactorTest; }, @@ -253,14 +246,13 @@ buildableAttributes_t bg_buildableList[ ] = { -15, -15, -15 }, //vec3_t mins; { 15, 15, 15 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; - 0.0, //float bounce; - 100, //int buildPoints; + 0.0, //float bounce; + OBANK_BP, //int buildPoints; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; - 50, //int regenRate; - 50, //int damage; - 50, //int splashDamage; - 200, //int splashRadius; + OBANK_HEALTH, //int health; + OBANK_REGEN, //int regenRate; + OBANK_SPLASHDAMAGE, //int splashDamage; + OBANK_SPLASHRADIUS, //int splashRadius; MOD_ASPAWN, //int meansOfDeath; BIT_ALIENS, //int team; ( 1 << WP_ABUILD )|( 1 << WP_ABUILD2 ), //weapon_t buildWeapon; @@ -272,7 +264,7 @@ buildableAttributes_t bg_buildableList[ ] = 0.5f, //float minNormal; qtrue, //qboolean invertNormal; qtrue, //qboolean creepTest; - 120, //int creepSize; + OBANK_CREEPSIZE, //int creepSize; qfalse, //qboolean dccTest; qfalse //qboolean reactorTest; }, @@ -285,14 +277,13 @@ buildableAttributes_t bg_buildableList[ ] = { -40, -40, -4 }, //vec3_t mins; { 40, 40, 4 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; - 0.0, //float bounce; - 100, //int buildPoints; + 0.0, //float bounce; + HSPAWN_BP, //int buildPoints; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; + HSPAWN_HEALTH, //int health; 0, //int regenRate; - 50, //int damage; - 50, //int splashDamage; - 150, //int splashRadius; + HSPAWN_SPLASHDAMAGE, //int splashDamage; + HSPAWN_SPLASHRADIUS, //int splashRadius; MOD_HSPAWN, //int meansOfDeath; BIT_HUMANS, //int team; ( 1 << WP_HBUILD )|( 1 << WP_HBUILD2 ), //weapon_t buildWeapon; @@ -317,14 +308,13 @@ buildableAttributes_t bg_buildableList[ ] = { -35, -35, -7 }, //vec3_t mins; { 35, 35, 7 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; - 0.0, //float bounce; - 100, //int buildPoints; + 0.0, //float bounce; + MEDISTAT_BP, //int buildPoints; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; + MEDISTAT_HEALTH, //int health; 0, //int regenRate; - 50, //int damage; - 50, //int splashDamage; - 150, //int splashRadius; + MEDISTAT_SPLASHDAMAGE, //int splashDamage; + MEDISTAT_SPLASHRADIUS, //int splashRadius; MOD_HSPAWN, //int meansOfDeath; BIT_HUMANS, //int team; ( 1 << WP_HBUILD )|( 1 << WP_HBUILD2 ), //weapon_t buildWeapon; @@ -350,13 +340,12 @@ buildableAttributes_t bg_buildableList[ ] = { 65, 65, 7 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; 0.0, //float bounce; - 100, //int buildPoints; + ADVMEDISTAT_BP, //int buildPoints; ( 1 << S3 ), //int stages - 1000, //int health; + ADVMEDISTAT_HEALTH, //int health; 0, //int regenRate; - 50, //int damage; - 50, //int splashDamage; - 150, //int splashRadius; + ADVMEDISTAT_SPLASHDAMAGE, //int splashDamage; + ADVMEDISTAT_SPLASHRADIUS, //int splashRadius; MOD_HSPAWN, //int meansOfDeath; BIT_HUMANS, //int team; ( 1 << WP_HBUILD2 ), //weapon_t buildWeapon; @@ -384,20 +373,19 @@ buildableAttributes_t bg_buildableList[ ] = { 25, 25, 20 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; 0.0, //float bounce; - 80, //int buildPoints; + MGTURRET_BP, //int buildPoints; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; + MGTURRET_HEALTH, //int health; 0, //int regenRate; - 50, //int damage; - 20, //int splashDamage; - 50, //int splashRadius; + MGTURRET_SPLASHDAMAGE, //int splashDamage; + MGTURRET_SPLASHRADIUS, //int splashRadius; MOD_HSPAWN, //int meansOfDeath; BIT_HUMANS, //int team; ( 1 << WP_HBUILD )|( 1 << WP_HBUILD2 ), //weapon_t buildWeapon; BANIM_IDLE1, //int idleAnim; 50, //int nextthink; - 50, //int turretFireSpeed; - 300, //int turretRange; + MGTURRET_REPEAT, //int turretFireSpeed; + MGTURRET_RANGE, //int turretRange; WP_MACHINEGUN, //weapon_t turretProjType; 0.707f, //float minNormal; qfalse, //qboolean invertNormal; @@ -416,20 +404,19 @@ buildableAttributes_t bg_buildableList[ ] = { 22, 22, 40 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; 0.0, //float bounce; - 80, //int buildPoints; + TESLAGEN_BP, //int buildPoints; ( 1 << S3 ), //int stages - 1000, //int health; + TESLAGEN_HEALTH, //int health; 0, //int regenRate; - 50, //int damage; - 20, //int splashDamage; - 50, //int splashRadius; + TESLAGEN_SPLASHDAMAGE, //int splashDamage; + TESLAGEN_SPLASHRADIUS, //int splashRadius; MOD_HSPAWN, //int meansOfDeath; BIT_HUMANS, //int team; ( 1 << WP_HBUILD2 ), //weapon_t buildWeapon; BANIM_IDLE1, //int idleAnim; 150, //int nextthink; - 4000, //int turretFireSpeed; - 1500, //int turretRange; + TESLAGEN_REPEAT, //int turretFireSpeed; + TESLAGEN_RANGE, //int turretRange; WP_TESLAGEN, //weapon_t turretProjType; 0.707f, //float minNormal; qfalse, //qboolean invertNormal; @@ -441,20 +428,19 @@ buildableAttributes_t bg_buildableList[ ] = { BA_H_DCC, //int buildNum; "dcc", //char *buildName; - "D.C.C.", //char *humanName; + "Defence Computer", //char *humanName; "team_human_dcc", //char *entityName; { "models/buildables/dcc/dcc.md3", 0, 0, 0 }, { -15, -15, -15 }, //vec3_t mins; { 15, 15, 15 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; 0.0, //float bounce; - 200, //int buildPoints; + DC_BP, //int buildPoints; ( 1 << S3 ), //int stages - 1000, //int health; + DC_HEALTH, //int health; 0, //int regenRate; - 50, //int damage; - 50, //int splashDamage; - 150, //int splashRadius; + DC_SPLASHDAMAGE, //int splashDamage; + DC_SPLASHRADIUS, //int splashRadius; MOD_HSPAWN, //int meansOfDeath; BIT_HUMANS, //int team; ( 1 << WP_HBUILD2 ), //weapon_t buildWeapon; @@ -480,13 +466,12 @@ buildableAttributes_t bg_buildableList[ ] = { 15, 15, 15 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; 0.0, //float bounce; - 200, //int buildPoints; + BANK_BP, //int buildPoints; ( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; + BANK_HEALTH, //int health; 0, //int regenRate; - 50, //int damage; - 50, //int splashDamage; - 150, //int splashRadius; + BANK_SPLASHDAMAGE, //int splashDamage; + BANK_SPLASHRADIUS, //int splashRadius; MOD_HSPAWN, //int meansOfDeath; BIT_HUMANS, //int team; ( 1 << WP_HBUILD2 ), //weapon_t buildWeapon; @@ -505,20 +490,19 @@ buildableAttributes_t bg_buildableList[ ] = { BA_H_MCU, //int buildNum; "mcu", //char *buildName; - "M.C.U.", //char *humanName; + "Armoury", //char *humanName; "team_human_mcu", //char *entityName; { "models/buildables/mcu/mcu.md3", 0, 0, 0 }, { -15, -15, -15 }, //vec3_t mins; { 15, 15, 15 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; 0.0, //float bounce; - 200, //int buildPoints; + ARMOURY_BP, //int buildPoints; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; + ARMOURY_HEALTH, //int health; 0, //int regenRate; - 50, //int damage; - 50, //int splashDamage; - 150, //int splashRadius; + ARMOURY_SPLASHDAMAGE, //int splashDamage; + ARMOURY_SPLASHRADIUS, //int splashRadius; MOD_HSPAWN, //int meansOfDeath; BIT_HUMANS, //int team; ( 1 << WP_HBUILD )|( 1 << WP_HBUILD2 ), //weapon_t buildWeapon; @@ -544,13 +528,12 @@ buildableAttributes_t bg_buildableList[ ] = { 15, 15, 15 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; 0.0, //float bounce; - 0, //int buildPoints; + REACTOR_BP, //int buildPoints; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; + REACTOR_HEALTH, //int health; 0, //int regenRate; - 50, //int damage; - 50, //int splashDamage; - 150, //int splashRadius; + REACTOR_SPLASHDAMAGE, //int splashDamage; + REACTOR_SPLASHRADIUS, //int splashRadius; MOD_HSPAWN, //int meansOfDeath; BIT_HUMANS, //int team; ( 1 << WP_HBUILD )|( 1 << WP_HBUILD2 ), //weapon_t buildWeapon; @@ -576,13 +559,12 @@ buildableAttributes_t bg_buildableList[ ] = { 15, 15, 15 }, //vec3_t maxs; TR_GRAVITY, //trType_t traj; 0.0, //float bounce; - 10, //int buildPoints; + REPEATER_BP, //int buildPoints; ( 1 << S2 )|( 1 << S3 ), //int stages - 1000, //int health; + REPEATER_HEALTH, //int health; 0, //int regenRate; - 50, //int damage; - 50, //int splashDamage; - 150, //int splashRadius; + REPEATER_SPLASHDAMAGE, //int splashDamage; + REPEATER_SPLASHRADIUS, //int splashRadius; MOD_HSPAWN, //int meansOfDeath; BIT_HUMANS, //int team; ( 1 << WP_HBUILD )|( 1 << WP_HBUILD2 ), //weapon_t buildWeapon; @@ -608,13 +590,12 @@ buildableAttributes_t bg_buildableList[ ] = { 25, 25, 25 }, //vec3_t maxs; TR_BUOYANCY, //trType_t traj; 0.2, //float bounce; - 10, //int buildPoints; + FLOATMINE_BP, //int buildPoints; ( 1 << S2 )|( 1 << S3 ), //int stages - 100, //int health; + FLOATMINE_HEALTH, //int health; 0, //int regenRate; - 50, //int damage; - 50, //int splashDamage; - 150, //int splashRadius; + FLOATMINE_SPLASHDAMAGE,//int splashDamage; + FLOATMINE_SPLASHRADIUS,//int splashRadius; MOD_HSPAWN, //int meansOfDeath; BIT_HUMANS, //int team; ( 1 << WP_HBUILD2 ), //weapon_t buildWeapon; @@ -903,26 +884,6 @@ int BG_FindRegenRateForBuildable( int bclass ) /* ============== -BG_FindDamageForBuildable -============== -*/ -int BG_FindDamageForBuildable( int bclass ) -{ - int i; - - for( i = 0; i < bg_numBuildables; i++ ) - { - if( bg_buildableList[ i ].buildNum == bclass ) - { - return bg_buildableList[ i ].damage; - } - } - - return 50; -} - -/* -============== BG_FindSplashDamageForBuildable ============== */ @@ -1260,19 +1221,19 @@ classAttributes_t bg_classList[ ] = { -15, -15, -4 }, //vec3_t deadmins; { 15, 15, 4 }, //vec3_t deadmaxs; 12, 12, //int viewheight, crouchviewheight; - 50, //int health; - 5, //int regenRate; + ABUILDER_HEALTH, //int health; + ABUILDER_REGEN, //int regenRate; SCA_TAKESFALLDAMAGE|SCA_FOVWARPS, //int abilities; WP_ABUILD, //weapon_t startWeapon 95.0f, //float buildDist; 80, //int fov; 0.001f, //float bob; 350, //int steptime; - 0.8f, //float speed; + ABUILDER_SPEED, //float speed; 1.0f, //float sticky; { PCL_A_B_LEV1, PCL_NONE, PCL_NONE }, //int children[ 3 ]; - 2000, //int timetoevolve; - 100 //int value; + ABUILDER_TTE, //int timetoevolve; + ABUILDER_VALUE //int value; }, { PCL_A_B_LEV1, //int classnum; @@ -1289,19 +1250,19 @@ classAttributes_t bg_classList[ ] = { -20, -20, -4 }, //vec3_t deadmins; { 20, 20, 4 }, //vec3_t deadmaxs; 0, 0, //int viewheight, crouchviewheight; - 75, //int health; - 5, //int regenRate; + ABUILDER_UPG_HEALTH, //int health; + ABUILDER_UPG_REGEN, //int regenRate; SCA_CANJUMP|SCA_FOVWARPS|SCA_WALLCLIMBER, //int abilities; WP_ABUILD2, //weapon_t startWeapon 95.0f, //float buildDist; 110, //int fov; 0.001f, //float bob; 200, //int steptime; - 1.0f, //float speed; + ABUILDER_UPG_SPEED, //float speed; 1.0f, //float sticky; { PCL_NONE, PCL_NONE, PCL_NONE }, //int children[ 3 ]; - 2000, //int timetoevolve; - 100 //int value; + 0, //int timetoevolve; + ABUILDER_UPG_VALUE //int value; }, { PCL_A_O_BASE, //int classnum; @@ -1318,8 +1279,8 @@ classAttributes_t bg_classList[ ] = { -15, -15, -4 }, //vec3_t deadmins; { 15, 15, 4 }, //vec3_t deadmaxs; 0, 0, //int viewheight, crouchviewheight; - 25, //int health; - 5, //int regenRate; + SOLDIER_HEALTH, //int health; + SOLDIER_REGEN, //int regenRate; SCA_WALLCLIMBER|SCA_CANJUMP|SCA_NOWEAPONDRIFT| SCA_FOVWARPS|SCA_ALIENSENSE, //int abilities; WP_VENOM, //weapon_t startWeapon @@ -1327,11 +1288,11 @@ classAttributes_t bg_classList[ ] = 140, //int fov; 0.0f, //float bob; 25, //int steptime; - 1.5f, //float speed; + SOLDIER_SPEED, //float speed; 5.0f, //float sticky; { PCL_A_O_LEV1, PCL_NONE, PCL_NONE }, //int children[ 3 ]; - 3000, //int timetoevolve; - 100 //int value; + SOLDIER_TTE, //int timetoevolve; + SOLDIER_VALUE //int value; }, { PCL_A_O_LEV1, //int classnum; @@ -1348,19 +1309,19 @@ classAttributes_t bg_classList[ ] = { -24, -24, -4 }, //vec3_t deadmins; { 24, 24, 4 }, //vec3_t deadmaxs; 6, 6, //int viewheight, crouchviewheight; - 50, //int health; - 5, //int regenRate; + DRAGOON_HEALTH, //int health; + DRAGOON_REGEN, //int regenRate; SCA_CANJUMP|SCA_NOWEAPONDRIFT|SCA_FOVWARPS, //int abilities; WP_POUNCE, //weapon_t startWeapon 0.0f, //float buildDist; 120, //int fov; 0.0005f, //float bob; 25, //int steptime; - 1.5f, //float speed; + DRAGOON_SPEED, //float speed; 3.0f, //float sticky; { PCL_A_O_LEV2, PCL_A_O_LEV1_UPG, PCL_NONE }, //int children[ 3 ]; - 3000, //int timetoevolve; - 100 //int value; + DRAGOON_TTE, //int timetoevolve; + DRAGOON_VALUE //int value; }, { PCL_A_O_LEV1_UPG, //int classnum; @@ -1377,19 +1338,19 @@ classAttributes_t bg_classList[ ] = { -24, -24, -4 }, //vec3_t deadmins; { 24, 24, 4 }, //vec3_t deadmaxs; 6, 6, //int viewheight, crouchviewheight; - 50, //int health; - 5, //int regenRate; + DRAGOON_UPG_HEALTH, //int health; + DRAGOON_UPG_REGEN, //int regenRate; SCA_CANJUMP|SCA_NOWEAPONDRIFT|SCA_FOVWARPS, //int abilities; WP_POUNCE_UPG, //weapon_t startWeapon 0.0f, //float buildDist; 120, //int fov; 0.0005f, //float bob; 25, //int steptime; - 1.5f, //float speed; + DRAGOON_UPG_SPEED, //float speed; 3.0f, //float sticky; { PCL_A_O_LEV2, PCL_NONE, PCL_NONE }, //int children[ 3 ]; - 3000, //int timetoevolve; - 100 //int value; + DRAGOON_UPG_TTE, //int timetoevolve; + DRAGOON_UPG_VALUE //int value; }, { PCL_A_O_LEV2, //int classnum; @@ -1406,8 +1367,8 @@ classAttributes_t bg_classList[ ] = { -24, -24, -4 }, //vec3_t deadmins; { 24, 24, 4 }, //vec3_t deadmaxs; 6, 6, //int viewheight, crouchviewheight; - 50, //int health; - 5, //int regenRate; + HYDRA_HEALTH, //int health; + HYDRA_REGEN, //int regenRate; SCA_CANJUMP|SCA_NOWEAPONDRIFT| SCA_FOVWARPS|SCA_WALLCLIMBER, //int abilities; WP_GRAB_CLAW, //weapon_t startWeapon @@ -1415,11 +1376,11 @@ classAttributes_t bg_classList[ ] = 120, //int fov; 0.001f, //float bob; 25, //int steptime; - 1.5f, //float speed; + HYDRA_SPEED, //float speed; 4.0f, //float sticky; { PCL_A_O_LEV3, PCL_A_O_LEV2_UPG, PCL_NONE }, //int children[ 3 ]; - 3000, //int timetoevolve; - 100 //int value; + HYDRA_TTE, //int timetoevolve; + HYDRA_VALUE //int value; }, { PCL_A_O_LEV2_UPG, //int classnum; @@ -1436,8 +1397,8 @@ classAttributes_t bg_classList[ ] = { -24, -24, -4 }, //vec3_t deadmins; { 24, 24, 4 }, //vec3_t deadmaxs; 6, 6, //int viewheight, crouchviewheight; - 50, //int health; - 5, //int regenRate; + HYDRA_UPG_HEALTH, //int health; + HYDRA_UPG_REGEN, //int regenRate; SCA_CANJUMP|SCA_NOWEAPONDRIFT| SCA_FOVWARPS|SCA_WALLCLIMBER, //int abilities; WP_GRAB_CLAW_UPG, //weapon_t startWeapon @@ -1445,11 +1406,11 @@ classAttributes_t bg_classList[ ] = 120, //int fov; 0.001f, //float bob; 25, //int steptime; - 1.5f, //float speed; + HYDRA_UPG_SPEED, //float speed; 4.0f, //float sticky; { PCL_A_O_LEV3, PCL_NONE, PCL_NONE }, //int children[ 3 ]; - 3000, //int timetoevolve; - 100 //int value; + HYDRA_UPG_TTE, //int timetoevolve; + HYDRA_UPG_VALUE //int value; }, { PCL_A_O_LEV3, //int classnum; @@ -1466,19 +1427,19 @@ classAttributes_t bg_classList[ ] = { -15, -15, -4 }, //vec3_t deadmins; { 15, 15, 4 }, //vec3_t deadmaxs; 4, 4, //int viewheight, crouchviewheight; - 100, //int health; - 5, //int regenRate; + CHIMERA_HEALTH, //int health; + CHIMERA_REGEN, //int regenRate; SCA_CANJUMP|SCA_NOWEAPONDRIFT|SCA_FOVWARPS, //int abilities; WP_AREA_ZAP, //weapon_t startWeapon 0.0f, //float buildDist; 130, //int fov; 0.0f, //float bob; 60, //int steptime; - 1.3f, //float speed; + CHIMERA_SPEED, //float speed; 5.0f, //float sticky; { PCL_A_O_LEV4, PCL_A_O_LEV3_UPG, PCL_NONE }, //int children[ 3 ]; - 3000, //int timetoevolve; - 100 //int value; + CHIMERA_TTE, //int timetoevolve; + CHIMERA_VALUE //int value; }, { PCL_A_O_LEV3_UPG, //int classnum; @@ -1495,19 +1456,19 @@ classAttributes_t bg_classList[ ] = { -15, -15, -4 }, //vec3_t deadmins; { 15, 15, 4 }, //vec3_t deadmaxs; 4, 4, //int viewheight, crouchviewheight; - 100, //int health; - 5, //int regenRate; + CHIMERA_UPG_HEALTH, //int health; + CHIMERA_UPG_REGEN, //int regenRate; SCA_CANJUMP|SCA_NOWEAPONDRIFT|SCA_FOVWARPS, //int abilities; WP_DIRECT_ZAP, //weapon_t startWeapon 0.0f, //float buildDist; 130, //int fov; 0.0f, //float bob; 60, //int steptime; - 1.3f, //float speed; + CHIMERA_UPG_SPEED, //float speed; 5.0f, //float sticky; { PCL_A_O_LEV4, PCL_NONE, PCL_NONE }, //int children[ 3 ]; - 3000, //int timetoevolve; - 100 //int value; + CHIMERA_UPG_TTE, //int timetoevolve; + CHIMERA_UPG_VALUE //int value; }, { PCL_A_O_LEV4, //int classnum; @@ -1524,19 +1485,19 @@ classAttributes_t bg_classList[ ] = { -15, -15, -4 }, //vec3_t deadmins; { 15, 15, 4 }, //vec3_t deadmaxs; 4, 4, //int viewheight, crouchviewheight; - 100, //int health; - 5, //int regenRate; + BMOFO_HEALTH, //int health; + BMOFO_REGEN, //int regenRate; SCA_CANJUMP|SCA_NOWEAPONDRIFT|SCA_FOVWARPS, //int abilities; WP_GROUND_POUND, //weapon_t startWeapon 0.0f, //float buildDist; 130, //int fov; 0.0f, //float bob; 60, //int steptime; - 1.3f, //float speed; + BMOFO_SPEED, //float speed; 5.0f, //float sticky; { PCL_NONE, PCL_NONE, PCL_NONE }, //int children[ 3 ]; - 3000, //int timetoevolve; - 100 //int value; + 0, //int timetoevolve; + BMOFO_VALUE //int value; }, { PCL_H_BASE, //int classnum; @@ -2095,20 +2056,22 @@ weaponAttributes_t bg_weapons[ ] = { { WP_MACHINEGUN, //int weaponNum; - 100, //int price; + RIFLE_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "rifle", //char *weaponName; "Rifle", //char *weaponHumanName; { "models/weapons2/machinegun/machinegun.md3", 0, 0, 0 }, "icons/iconw_machinegun", - 30, //int quan; - 3, //int clips; - 3, //int maxClips; + RIFLE_CLIPSIZE, //int quan; + RIFLE_SPAWNCLIPS, //int clips; + RIFLE_MAXCLIPS, //int maxClips; qfalse, //int infiniteAmmo; qfalse, //int usesEnergy; - 100, //int repeatRate; - 2000, //int reloadTime; + RIFLE_REPEAT, //int repeatRate1; + 0, //int repeatRate2; + 0, //int repeatRate3; + RIFLE_RELOAD, //int reloadTime; qfalse, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; qtrue, //qboolean purchasable; @@ -2117,19 +2080,21 @@ weaponAttributes_t bg_weapons[ ] = }, { WP_FLAMER, //int weaponNum; - 100, //int price; + FLAMER_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "flamer", //char *weaponName; "Flame Thrower", //char *weaponHumanName; { "models/weapons2/plasma/plasma.md3", 0, 0, 0 }, "icons/iconw_plasma", - 400, //int quan; + FLAMER_GAS, //int quan; 0, //int clips; 0, //int maxClips; qfalse, //int infiniteAmmo; qfalse, //int usesEnergy; - 150, //int repeatRate; + FLAMER_REPEAT, //int repeatRate1; + 0, //int repeatRate2; + 0, //int repeatRate3; 0, //int reloadTime; qfalse, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; @@ -2139,19 +2104,21 @@ weaponAttributes_t bg_weapons[ ] = }, { WP_CHAINGUN, //int weaponNum; - 100, //int price; + CHAINGUN_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "chaingun", //char *weaponName; "Chaingun", //char *weaponHumanName; { "models/weapons2/machinegun/machinegun.md3", 0, 0, 0 }, "icons/iconw_machinegun", - 300, //int quan; + CHAINGUN_BULLETS, //int quan; 0, //int clips; 0, //int maxClips; qfalse, //int infiniteAmmo; qfalse, //int usesEnergy; - 50, //int repeatRate; + CHAINGUN_REPEAT, //int repeatRate1; + 0, //int repeatRate2; + 0, //int repeatRate3; 0, //int reloadTime; qfalse, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; @@ -2161,20 +2128,22 @@ weaponAttributes_t bg_weapons[ ] = }, { WP_MASS_DRIVER, //int weaponNum; - 100, //int price; + MDRIVER_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "mdriver", //char *weaponName; "Mass Driver", //char *weaponHumanName; { "models/weapons2/bfg/bfg.md3", 0, 0, 0 }, "icons/iconw_bfg", - 5, //int quan; - 2, //int clips; - 3, //int maxClips; + MDRIVER_CLIPSIZE, //int quan; + MDRIVER_SPAWNCLIPS, //int clips; + MDRIVER_MAXCLIPS, //int maxClips; qfalse, //int infiniteAmmo; qtrue, //int usesEnergy; - 1000, //int repeatRate; - 2000, //int reloadTime; + MDRIVER_REPEAT, //int repeatRate1; + 0, //int repeatRate2; + 0, //int repeatRate3; + MDRIVER_RELOAD, //int reloadTime; qfalse, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; qtrue, //qboolean purchasable; @@ -2183,20 +2152,22 @@ weaponAttributes_t bg_weapons[ ] = }, { WP_PULSE_RIFLE, //int weaponNum; - 100, //int price; + PRIFLE_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "prifle", //char *weaponName; "Pulse Rifle", //char *weaponHumanName; { "models/weapons2/plasma/plasma.md3", 0, 0, 0 }, "icons/iconw_plasma", - 50, //int quan; - 3, //int clips; - 3, //int maxClips; + PRIFLE_CLIPS, //int quan; + PRIFLE_SPAWNCLIPS, //int clips; + PRIFLE_MAXCLIPS, //int maxClips; qfalse, //int infiniteAmmo; - qtrue, //int usesEnergy; - 50, //int repeatRate; - 2000, //int reloadTime; + qtrue, //int usesEnergy; + PRIFLE_REPEAT, //int repeatRate1; + 0, //int repeatRate2; + 0, //int repeatRate3; + PRIFLE_RELOAD, //int reloadTime; qfalse, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; qtrue, //qboolean purchasable; @@ -2205,20 +2176,22 @@ weaponAttributes_t bg_weapons[ ] = }, { WP_LUCIFER_CANON, //int weaponNum; - 100, //int price; + LCANON_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "lcanon", //char *weaponName; "Lucifer Canon", //char *weaponHumanName; { "models/weapons2/bfg/bfg.md3", 0, 0, 0 }, "icons/iconw_bfg", - 30, //int quan; + LCANON_AMMO, //int quan; 0, //int clips; 0, //int maxClips; qfalse, //int infiniteAmmo; qtrue, //int usesEnergy; - 500, //int repeatRate; - 2000, //int reloadTime; + LCANON_REPEAT, //int repeatRate1; + LCANON_CHARGEREPEAT, //int repeatRate2; + 0, //int repeatRate3; + LCANON_RELOAD, //int reloadTime; qtrue, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; qtrue, //qboolean purchasable; @@ -2227,20 +2200,22 @@ weaponAttributes_t bg_weapons[ ] = }, { WP_LAS_GUN, //int weaponNum; - 100, //int price; + LASGUN_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "lgun", //char *weaponName; "Las Gun", //char *weaponHumanName; { "models/weapons2/grenadel/grenadel.md3", 0, 0, 0 }, "icons/iconw_plasma", - 300, //int quan; + LASGUN_AMMO, //int quan; 0, //int clips; 0, //int maxClips; qfalse, //int infiniteAmmo; qtrue, //int usesEnergy; - 100, //int repeatRate; - 2000, //int reloadTime; + LASGUN_REPEAT, //int repeatRate1; + 0, //int repeatRate2; + 0, //int repeatRate3; + LASGUN_RELOAD, //int reloadTime; qfalse, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; qtrue, //qboolean purchasable; @@ -2249,7 +2224,7 @@ weaponAttributes_t bg_weapons[ ] = }, { WP_PAIN_SAW, //int weaponNum; - 100, //int price; + PAINSAW_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "psaw", //char *weaponName; @@ -2261,7 +2236,9 @@ weaponAttributes_t bg_weapons[ ] = 0, //int maxClips; qtrue, //int infiniteAmmo; qfalse, //int usesEnergy; - 75, //int repeatRate; + PAINSAW_REPEAT, //int repeatRate1; + 0, //int repeatRate2; + 0, //int repeatRate3; 0, //int reloadTime; qfalse, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; @@ -2271,7 +2248,7 @@ weaponAttributes_t bg_weapons[ ] = }, { WP_HBUILD, //int weaponNum; - 100, //int price; + HBUILD_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "ckit", //char *weaponName; @@ -2283,17 +2260,19 @@ weaponAttributes_t bg_weapons[ ] = 0, //int maxClips; qtrue, //int infiniteAmmo; qfalse, //int usesEnergy; - 1000, //int repeatRate; + HBUILD_REPEAT, //int repeatRate1; + HBUILD_REPEAT, //int repeatRate2; + 0, //int repeatRate3; 0, //int reloadTime; qtrue, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; qtrue, //qboolean purchasable; - 10000, //int buildDelay; + HBUILD_DELAY, //int buildDelay; WUT_HUMANS //WUTeam_t team; }, { WP_HBUILD2, //int weaponNum; - 100, //int price; + HBUILD2_PRICE, //int price; ( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "ackit", //char *weaponName; @@ -2305,17 +2284,19 @@ weaponAttributes_t bg_weapons[ ] = 0, //int maxClips; qtrue, //int infiniteAmmo; qfalse, //int usesEnergy; - 1000, //int repeatRate; + HBUILD2_REPEAT, //int repeatRate1; + HBUILD2_REPEAT, //int repeatRate2; + 0, //int repeatRate3; 0, //int reloadTime; qtrue, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; qtrue, //qboolean purchasable; - 5000, //int buildDelay; + HBUILD2_DELAY, //int buildDelay; WUT_HUMANS //WUTeam_t team; }, { WP_ABUILD, //int weaponNum; - 100, //int price; + 0, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "dbuild", //char *weaponName; @@ -2327,17 +2308,19 @@ weaponAttributes_t bg_weapons[ ] = 0, //int maxClips; qtrue, //int infiniteAmmo; qfalse, //int usesEnergy; - 1000, //int repeatRate; + ABUILDER_BUILD_REPEAT,//int repeatRate1; + 0, //int repeatRate2; + 0, //int repeatRate3; 0, //int reloadTime; qtrue, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; qfalse, //qboolean purchasable; - 10000, //int buildDelay; + ABUILDER_BASE_DELAY, //int buildDelay; WUT_ALIENS //WUTeam_t team; }, { WP_ABUILD2, //int weaponNum; - 100, //int price; + 0, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "dbuild2", //char *weaponName; @@ -2349,17 +2332,19 @@ weaponAttributes_t bg_weapons[ ] = 0, //int maxClips; qtrue, //int infiniteAmmo; qfalse, //int usesEnergy; - 1000, //int repeatRate; + ABUILDER_BUILD_REPEAT,//int repeatRate1; + ABUILDER_CLAW_REPEAT, //int repeatRate2; + 0, //int repeatRate3; 0, //int reloadTime; qtrue, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; qfalse, //qboolean purchasable; - 5000, //int buildDelay; + ABUILDER_ADV_DELAY, //int buildDelay; WUT_ALIENS //WUTeam_t team; }, { WP_VENOM, //int weaponNum; - 100, //int price; + 0, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "venom", //char *weaponName; @@ -2371,7 +2356,9 @@ weaponAttributes_t bg_weapons[ ] = 0, //int maxClips; qtrue, //int infiniteAmmo; qfalse, //int usesEnergy; - 500, //int repeatRate; + SOLDIER_BITE_REPEAT, //int repeatRate1; + 0, //int repeatRate2; + 0, //int repeatRate3; 0, //int reloadTime; qfalse, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; @@ -2380,12 +2367,12 @@ weaponAttributes_t bg_weapons[ ] = WUT_ALIENS //WUTeam_t team; }, { - WP_GRAB_CLAW, //int weaponNum; - 100, //int price; + WP_POUNCE, //int weaponNum; + 0, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; - "grabandclaw", //char *weaponName; - "Claws", //char *weaponHumanName; + "pounce", //char *weaponName; + "Claw and pounce", //char *weaponHumanName; { "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 }, "icons/iconw_gauntlet", 0, //int quan; @@ -2393,7 +2380,9 @@ weaponAttributes_t bg_weapons[ ] = 0, //int maxClips; qtrue, //int infiniteAmmo; qfalse, //int usesEnergy; - 500, //int repeatRate; + DRAGOON_CLAW_REPEAT, //int repeatRate1; + 0, //int repeatRate2; + 0, //int repeatRate3; 0, //int reloadTime; qfalse, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; @@ -2402,34 +2391,36 @@ weaponAttributes_t bg_weapons[ ] = WUT_ALIENS //WUTeam_t team; }, { - WP_GRAB_CLAW_UPG, //int weaponNum; - 100, //int price; + WP_POUNCE_UPG, //int weaponNum; + 0, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; - "grabandclaw_upgrade",//char *weaponName; - "Claws Upgrade", //char *weaponHumanName; + "pounce_upgrade", //char *weaponName; + "Claw and pounce (upgrade)", //char *weaponHumanName; { "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 }, "icons/iconw_gauntlet", - 0, //int quan; + 3, //int quan; 0, //int clips; 0, //int maxClips; qtrue, //int infiniteAmmo; qfalse, //int usesEnergy; - 500, //int repeatRate; + DRAGOON_CLAW_U_REPEAT,//int repeatRate1; + 0, //int repeatRate2; + DRAGOON_SLOWBLOB_REPEAT,//int repeatRate3; 0, //int reloadTime; - qtrue, //qboolean hasAltMode; - qfalse, //qboolean hasThirdMode; + qfalse, //qboolean hasAltMode; + qtrue, //qboolean hasThirdMode; qfalse, //qboolean purchasable; 0, //int buildDelay; WUT_ALIENS //WUTeam_t team; }, { - WP_AREA_ZAP, //int weaponNum; - 100, //int price; + WP_GRAB_CLAW, //int weaponNum; + 0, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; - "areazap", //char *weaponName; - "Area Zap", //char *weaponHumanName; + "grabandclaw", //char *weaponName; + "Claws", //char *weaponHumanName; { "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 }, "icons/iconw_gauntlet", 0, //int quan; @@ -2437,7 +2428,9 @@ weaponAttributes_t bg_weapons[ ] = 0, //int maxClips; qtrue, //int infiniteAmmo; qfalse, //int usesEnergy; - 1500, //int repeatRate; + HYDRA_CLAW_REPEAT, //int repeatRate1; + 0, //int repeatRate2; + 0, //int repeatRate3; 0, //int reloadTime; qfalse, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; @@ -2446,12 +2439,12 @@ weaponAttributes_t bg_weapons[ ] = WUT_ALIENS //WUTeam_t team; }, { - WP_DIRECT_ZAP, //int weaponNum; - 100, //int price; + WP_GRAB_CLAW_UPG, //int weaponNum; + 0, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; - "directzap", //char *weaponName; - "Directed Zap", //char *weaponHumanName; + "grabandclaw_upgrade",//char *weaponName; + "Claws Upgrade", //char *weaponHumanName; { "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 }, "icons/iconw_gauntlet", 0, //int quan; @@ -2459,7 +2452,9 @@ weaponAttributes_t bg_weapons[ ] = 0, //int maxClips; qtrue, //int infiniteAmmo; qfalse, //int usesEnergy; - 1500, //int repeatRate; + HYDRA_CLAW_U_REPEAT, //int repeatRate1; + HYDRA_PCLOUD_REPEAT, //int repeatRate2; + 0, //int repeatRate3; 0, //int reloadTime; qtrue, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; @@ -2468,12 +2463,12 @@ weaponAttributes_t bg_weapons[ ] = WUT_ALIENS //WUTeam_t team; }, { - WP_POUNCE, //int weaponNum; - 100, //int price; + WP_AREA_ZAP, //int weaponNum; + 0, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; - "pounce", //char *weaponName; - "Claw and pounce", //char *weaponHumanName; + "areazap", //char *weaponName; + "Area Zap", //char *weaponHumanName; { "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 }, "icons/iconw_gauntlet", 0, //int quan; @@ -2481,31 +2476,35 @@ weaponAttributes_t bg_weapons[ ] = 0, //int maxClips; qtrue, //int infiniteAmmo; qfalse, //int usesEnergy; - 750, //int repeatRate; + CHIMERA_CLAW_REPEAT, //int repeatRate1; + CHIMERA_AREAZAP_REPEAT,//int repeatRate2; + 0, //int repeatRate3; 0, //int reloadTime; - qfalse, //qboolean hasAltMode; + qtrue, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; qfalse, //qboolean purchasable; 0, //int buildDelay; WUT_ALIENS //WUTeam_t team; }, { - WP_POUNCE_UPG, //int weaponNum; - 100, //int price; + WP_DIRECT_ZAP, //int weaponNum; + 0, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; - "pounce_upgrade", //char *weaponName; - "Claw and pounce (upgrade)", //char *weaponHumanName; + "directzap", //char *weaponName; + "Directed Zap", //char *weaponHumanName; { "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 }, "icons/iconw_gauntlet", - 3, //int quan; + 0, //int quan; 0, //int clips; 0, //int maxClips; qtrue, //int infiniteAmmo; qfalse, //int usesEnergy; - 750, //int repeatRate; + CHIMERA_CLAW_U_REPEAT,//int repeatRate1; + CHIMERA_DIRECTZAP_REPEAT,//int repeatRate2; + CHIMERA_AREAZAP_REPEAT,//int repeatRate3; 0, //int reloadTime; - qfalse, //qboolean hasAltMode; + qtrue, //qboolean hasAltMode; qtrue, //qboolean hasThirdMode; qfalse, //qboolean purchasable; 0, //int buildDelay; @@ -2513,7 +2512,7 @@ weaponAttributes_t bg_weapons[ ] = }, { WP_GROUND_POUND, //int weaponNum; - 100, //int price; + 0, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "groundpound", //char *weaponName; @@ -2525,7 +2524,9 @@ weaponAttributes_t bg_weapons[ ] = 0, //int maxClips; qtrue, //int infiniteAmmo; qfalse, //int usesEnergy; - 750, //int repeatRate; + BMOFO_CLAW_REPEAT, //int repeatRate1; + BMOFO_KNOCK_REPEAT, //int repeatRate2; + BMOFO_CLAW_REPEAT, //int repeatRate3; 0, //int reloadTime; qtrue, //qboolean hasAltMode; qtrue, //qboolean hasThirdMode; @@ -2535,7 +2536,7 @@ weaponAttributes_t bg_weapons[ ] = }, { WP_LOCKBLOB_LAUNCHER, //int weaponNum; - 100, //int price; + 0, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "lockblob", //char *weaponName; @@ -2547,7 +2548,9 @@ weaponAttributes_t bg_weapons[ ] = 0, //int maxClips; qtrue, //int infiniteAmmo; qfalse, //int usesEnergy; - 500, //int repeatRate; + 500, //int repeatRate1; + 500, //int repeatRate2; + 500, //int repeatRate3; 0, //int reloadTime; qfalse, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; @@ -2557,7 +2560,7 @@ weaponAttributes_t bg_weapons[ ] = }, { WP_TESLAGEN, //int weaponNum; - 100, //int price; + 0, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_WEAPON, //int slots; "teslagen", //char *weaponName; @@ -2569,7 +2572,9 @@ weaponAttributes_t bg_weapons[ ] = 0, //int maxClips; qtrue, //int infiniteAmmo; qtrue, //int usesEnergy; - 500, //int repeatRate; + 500, //int repeatRate1; + 500, //int repeatRate2; + 500, //int repeatRate3; 0, //int reloadTime; qfalse, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; @@ -2807,19 +2812,53 @@ qboolean BG_FindUsesEnergyForWeapon( int weapon ) /* ============== -BG_FindRepeatRateForWeapon +BG_FindRepeatRate1ForWeapon ============== */ -int BG_FindRepeatRateForWeapon( int weapon ) +int BG_FindRepeatRate1ForWeapon( int weapon ) { int i; for( i = 0; i < bg_numWeapons; i++ ) { if( bg_weapons[ i ].weaponNum == weapon ) - { - return bg_weapons[ i ].repeatRate; - } + return bg_weapons[ i ].repeatRate1; + } + + return 1000; +} + +/* +============== +BG_FindRepeatRate2ForWeapon +============== +*/ +int BG_FindRepeatRate2ForWeapon( int weapon ) +{ + int i; + + for( i = 0; i < bg_numWeapons; i++ ) + { + if( bg_weapons[ i ].weaponNum == weapon ) + return bg_weapons[ i ].repeatRate2; + } + + return 1000; +} + +/* +============== +BG_FindRepeatRate3ForWeapon +============== +*/ +int BG_FindRepeatRate3ForWeapon( int weapon ) +{ + int i; + + for( i = 0; i < bg_numWeapons; i++ ) + { + if( bg_weapons[ i ].weaponNum == weapon ) + return bg_weapons[ i ].repeatRate3; } return 1000; @@ -2951,7 +2990,7 @@ upgradeAttributes_t bg_upgrades[ ] = { { UP_CHESTARMOUR, //int upgradeNum; - 100, //int price; + CHESTARMOUR_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_TORSO, //int slots; "carmour", //char *upgradeName; @@ -2964,7 +3003,7 @@ upgradeAttributes_t bg_upgrades[ ] = }, { UP_LIMBARMOUR, //int upgradeNum; - 100, //int price; + LIMBARMOUR_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_ARMS|SLOT_LEGS, //int slots; "larmour", //char *upgradeName; @@ -2977,7 +3016,7 @@ upgradeAttributes_t bg_upgrades[ ] = }, { UP_HELMET, //int upgradeNum; - 100, //int price; + HELMET_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_HEAD, //int slots; "helmet", //char *upgradeName; @@ -2990,7 +3029,7 @@ upgradeAttributes_t bg_upgrades[ ] = }, { UP_ANTITOXIN, //int upgradeNum; - 100, //int price; + ANTITOXIN_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_NONE, //int slots; "atoxin", //char *upgradeName; @@ -3003,7 +3042,7 @@ upgradeAttributes_t bg_upgrades[ ] = }, { UP_BATTPACK, //int upgradeNum; - 100, //int price; + BATTPACK_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_BACKPACK, //int slots; "battpack", //char *upgradeName; @@ -3016,7 +3055,7 @@ upgradeAttributes_t bg_upgrades[ ] = }, { UP_JETPACK, //int upgradeNum; - 100, //int price; + JETPACK_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_BACKPACK, //int slots; "jetpack", //char *upgradeName; @@ -3029,8 +3068,8 @@ upgradeAttributes_t bg_upgrades[ ] = }, { UP_BATTLESUIT, //int upgradeNum; - 100, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + BSUIT_PRICE, //int price; + ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_HEAD|SLOT_TORSO|SLOT_ARMS|SLOT_LEGS, //int slots; "bsuit", //char *upgradeName; "Battlesuit", //char *upgradeHumanName; @@ -3042,7 +3081,7 @@ upgradeAttributes_t bg_upgrades[ ] = }, { UP_MGCLIP, //int upgradeNum; - 10, //int price; + MGCLIP_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_NONE, //int slots; "mgclip", //char *upgradeName; @@ -3055,7 +3094,7 @@ upgradeAttributes_t bg_upgrades[ ] = }, { UP_100CGAMMO, //int upgradeNum; - 10, //int price; + CGAMMO_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_NONE, //int slots; "100cgammo", //char *upgradeName; @@ -3068,7 +3107,7 @@ upgradeAttributes_t bg_upgrades[ ] = }, { UP_200GAS, //int upgradeNum; - 10, //int price; + GAS_PRICE, //int price; ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages SLOT_NONE, //int slots; "200gas", //char *upgradeName; diff --git a/src/game/bg_pmove.c b/src/game/bg_pmove.c index b8e3b982..8cf32d01 100644 --- a/src/game/bg_pmove.c +++ b/src/game/bg_pmove.c @@ -185,9 +185,8 @@ static void PM_Friction( void ) //TA: make sure vertical velocity is NOT set to zero when wall climbing VectorCopy( vel, vec ); - if( pml.walking && - !( pm->ps->stats[ STAT_STATE ] & SS_WALLCLIMBING ) ) - vec[2] = 0; // ignore slope movement + if( pml.walking && !( pm->ps->stats[ STAT_STATE ] & SS_WALLCLIMBING ) ) + vec[ 2 ] = 0; // ignore slope movement speed = VectorLength( vec ); @@ -315,18 +314,18 @@ static float PM_CmdScale( usercmd_t *cmd ) if( !( pm->ps->stats[ STAT_STATE ] & SS_SPEEDBOOST ) ) { //if not sprinting - modifier *= 0.8; + modifier *= HUMAN_JOG_MODIFIER; } if( cmd->forwardmove < 0 ) { //can't run backwards - modifier *= 0.5; + modifier *= HUMAN_BACK_MODIFIER; } else if( cmd->rightmove ) { //can't move that fast sideways - modifier *= 0.75; + modifier *= HUMAN_SIDE_MODIFIER; } //must have +ve stamina to jump @@ -697,9 +696,9 @@ static void PM_JetPackMove( void ) wishvel[ i ] = scale * pml.forward[ i ] * pm->cmd.forwardmove + scale * pml.right[ i ] * pm->cmd.rightmove; if( pm->cmd.upmove > 0.0f ) - wishvel[ 2 ] = 48.0f; + wishvel[ 2 ] = JETPACK_FLOAT_SPEED; if( pm->cmd.upmove < 0.0f ) - wishvel[ 2 ] = -96.0f; + wishvel[ 2 ] = -JETPACK_SINK_SPEED; VectorCopy( wishvel, wishdir ); wishspeed = VectorNormalize( wishdir ); @@ -1197,13 +1196,13 @@ Returns an event number apropriate for the groundsurface static int PM_FootstepForSurface( void ) { //TA: - if ( pm->ps->stats[ STAT_STATE ] & SS_CREEPSLOWED ) + if( pm->ps->stats[ STAT_STATE ] & SS_CREEPSLOWED ) return EV_FOOTSTEP_SQUELCH; - if ( pml.groundTrace.surfaceFlags & SURF_NOSTEPS ) + if( pml.groundTrace.surfaceFlags & SURF_NOSTEPS ) return 0; - if ( pml.groundTrace.surfaceFlags & SURF_METALSTEPS ) + if( pml.groundTrace.surfaceFlags & SURF_METALSTEPS ) return EV_FOOTSTEP_METAL; return EV_FOOTSTEP; @@ -1441,7 +1440,7 @@ static void PM_GroundClimbTrace( void ) VectorNegate( movedir, movedir ); } - for(i = 0; i <= 4; i++) + for( i = 0; i <= 4; i++ ) { switch ( i ) { @@ -1612,7 +1611,7 @@ static void PM_GroundClimbTrace( void ) vectoangles( trace.plane.normal, toAngles ); vectoangles( pm->ps->grapplePoint, surfAngles ); - pm->ps->delta_angles[1] -= ANGLE2SHORT( ( ( surfAngles[1] - toAngles[1] ) * 2 ) - 180 ); + pm->ps->delta_angles[ 1 ] -= ANGLE2SHORT( ( ( surfAngles[ 1 ] - toAngles[ 1 ] ) * 2 ) - 180 ); } } @@ -2160,27 +2159,6 @@ static void PM_TorsoAnimation( void ) PM_ContinueTorsoAnim( TORSO_STAND ); } -//synced alt weapons look like the way to go - simpler anyway... -#if 0 -static void PM_packWeaponTime( int *psWeaponTime, int weaponTime1, int weaponTime2 ) -{ - if( weaponTime1 < 0 && weaponTime2 >= 0 ) - *psWeaponTime = ( *psWeaponTime & 0x00FF ) | ( ( ( weaponTime2 / 10 ) << 8 ) & 0xFF00 ); - if( weaponTime2 < 0 && weaponTime1 >= 0 ) - *psWeaponTime = ( ( weaponTime1 / 10 ) & 0x00FF ) | ( *psWeaponTime & 0xFF00 ); - else if( weaponTime1 >= 0 && weaponTime2 >= 0 ) - *psWeaponTime = ( ( weaponTime1 / 10 ) & 0x00FF ) | ( ( ( weaponTime2 / 10 ) << 8 ) & 0xFF00 ); -} - -static void PM_unpackWeaponTime( int psWeaponTime, int *weaponTime1, int *weaponTime2 ) -{ - if( weaponTime1 != NULL ) - *weaponTime1 = ( psWeaponTime & 0x00FF ) * 10; - - if( weaponTime2 != NULL ) - *weaponTime2 = ( ( psWeaponTime & 0x00FF ) >> 8 ) * 10; -} -#endif /* ============== @@ -2191,11 +2169,11 @@ Generates weapon events and modifes the weapon counter */ static void PM_Weapon( void ) { - int addTime; - int ammo, clips, maxclips; - qboolean attack1 = qfalse; - qboolean attack2 = qfalse; - qboolean attack3 = qfalse; + int addTime = 200; //default addTime - should never be used + int ammo, clips, maxclips; + qboolean attack1 = qfalse; + qboolean attack2 = qfalse; + qboolean attack3 = qfalse; // don't allow attack until all buttons are up if( pm->ps->pm_flags & PMF_RESPAWNED ) @@ -2263,13 +2241,13 @@ static void PM_Weapon( void ) pm->ps->pm_flags &= ~PMF_USE_ITEM_HELD; } - if ( pm->ps->weaponTime > 0 ) + if( pm->ps->weaponTime > 0 ) return; // change weapon if time - if ( pm->ps->weaponstate == WEAPON_DROPPING ) + if( pm->ps->weaponstate == WEAPON_DROPPING ) { - PM_FinishWeaponChange(); + PM_FinishWeaponChange( ); return; } @@ -2303,7 +2281,7 @@ static void PM_Weapon( void ) if( BG_FindUsesEnergyForWeapon( pm->ps->weapon ) && BG_gotItem( UP_BATTPACK, pm->ps->stats ) ) - ammo *= 2; + ammo = (int)( (float)ammo * BATTPACK_MODIFIER ); BG_packAmmoArray( pm->ps->weapon, pm->ps->ammo, pm->ps->powerups, ammo, clips, maxclips ); } @@ -2395,6 +2373,7 @@ static void PM_Weapon( void ) } PM_AddEvent( EV_FIRE_WEAPON3 ); + addTime = BG_FindRepeatRate3ForWeapon( pm->ps->weapon ); } else { @@ -2408,6 +2387,7 @@ static void PM_Weapon( void ) if( BG_WeaponHasAltMode( pm->ps->weapon ) ) { PM_AddEvent( EV_FIRE_WEAPON2 ); + addTime = BG_FindRepeatRate2ForWeapon( pm->ps->weapon ); } else { @@ -2417,7 +2397,10 @@ static void PM_Weapon( void ) } } else if( attack1 ) + { PM_AddEvent( EV_FIRE_WEAPON ); + addTime = BG_FindRepeatRate1ForWeapon( pm->ps->weapon ); + } //TA: fire events for autohit weapons if( pm->autoWeaponHit[ pm->ps->weapon ] ) @@ -2426,11 +2409,13 @@ static void PM_Weapon( void ) { case WP_VENOM: PM_AddEvent( EV_FIRE_WEAPON ); + addTime = BG_FindRepeatRate1ForWeapon( pm->ps->weapon ); break; case WP_POUNCE: case WP_POUNCE_UPG: PM_AddEvent( EV_FIRE_WEAPON2 ); + addTime = BG_FindRepeatRate2ForWeapon( pm->ps->weapon ); break; default: @@ -2448,7 +2433,7 @@ static void PM_Weapon( void ) //special case for lCanon if( pm->ps->weapon == WP_LUCIFER_CANON && attack1 ) { - ammo -= (int)( ceil( ( (float)pm->ps->stats[ STAT_MISC ] / (float)LC_TOTAL_CHARGE ) * 10.0f ) ); + ammo -= (int)( ceil( ( (float)pm->ps->stats[ STAT_MISC ] / (float)LCANON_TOTAL_CHARGE ) * 10.0f ) ); //stay on the safe side if( ammo < 0 ) @@ -2466,8 +2451,6 @@ static void PM_Weapon( void ) BG_packAmmoArray( pm->ps->weapon, pm->ps->ammo, pm->ps->powerups, ammo, clips, maxclips ); } - addTime = BG_FindRepeatRateForWeapon( pm->ps->weapon ); - //FIXME: predicted angles miss a problem?? if( pm->ps->weapon == WP_CHAINGUN ) { @@ -2598,7 +2581,6 @@ void PM_UpdateViewAngles( playerState_t *ps, const usercmd_t *cmd ) AxisToAngles( rotaxis, tempang ); //force angles to -180 <= x <= 180 - //AnglesSubtract( tempang2, 0, tempang2 ); for( i = 0; i < 3; i++ ) { while( tempang[ i ] > 180 ) @@ -2631,7 +2613,7 @@ void PM_UpdateViewAngles( playerState_t *ps, const usercmd_t *cmd ) } } - //fiz the view to the lock point + //fix the view to the lock point if( ps->pm_type == PM_KNOCKED ) { for( i = 0; i < 3; i++ ) diff --git a/src/game/bg_public.h b/src/game/bg_public.h index 90e63e07..3c8606f3 100644 --- a/src/game/bg_public.h +++ b/src/game/bg_public.h @@ -14,25 +14,16 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ - + +//tremulous balance header +#include "tremulous.h" + // because games can change separately from the main system version, we need a // second version that must match between game and cgame #define GAME_VERSION "baseq3-1" #define DEFAULT_GRAVITY 800 #define GIB_HEALTH -40 -#define ARMOR_PROTECTION 0.66 - -#define MAX_ITEMS 256 - -#define RANK_TIED_FLAG 0x4000 - -#define DEFAULT_SHOTGUN_SPREAD 700 -#define DEFAULT_SHOTGUN_COUNT 11 - -#define ITEM_RADIUS 15 // item sizes are needed for client side pickup detection - -#define LIGHTNING_RANGE 1024 #define SCORE_NOT_PRESENT -9999 // for the CS_SCORES[12] when only one player is present @@ -43,15 +34,7 @@ #define CROUCH_VIEWHEIGHT 12 #define DEAD_VIEWHEIGHT -16 -#define MAX_POUNCE_SPEED 750 -#define POUNCE_TIME 1000.0f - -#define LC_TOTAL_CHARGE 255 -#define LC_CHARGE_TIME 2000.0f - -#define PCLOUD_TIME 10000 -#define KOVER_TIME 2000 -#define GETUP_TIME 1000 +#define LCANON_TOTAL_CHARGE 255 // // config strings are a general means of communicating variable length strings @@ -83,8 +66,6 @@ #define CS_BOTINFO 25 #define CS_CLIENTS_READY 26 //TA: following suggestion in STAT_ enum STAT_CLIENTS_READY becomes a configstring -#define CS_ITEMS 27 // string of 0's and 1's that tell which items are present - //TA: extra stuff: #define CS_BUILDPOINTS 28 #define CS_STAGES 29 @@ -324,12 +305,6 @@ typedef enum HI_NUM_HOLDABLE } holdable_t; -//TA: needed client side to size sprites -#define FIREBALL_LIFETIME 1000.0f -#define FIREBALL_SPEED 200.0f -#define FIREBALL_GAP 15 //basically as fast as possible yet regular -#define FIREBALL_LAG 0.5f //the amount of player velocity that is added to the fireball - typedef enum { WP_NONE, @@ -929,7 +904,6 @@ typedef struct int health; int regenRate; - int damage; int splashDamage; int splashRadius; @@ -942,8 +916,8 @@ typedef struct int nextthink; - int turretFireSpeed; int turretRange; + int turretFireSpeed; weapon_t turretProjType; float minNormal; @@ -978,7 +952,9 @@ typedef struct qboolean infiniteAmmo; qboolean usesEnergy; - int repeatRate; + int repeatRate1; + int repeatRate2; + int repeatRate3; int reloadTime; qboolean hasAltMode; @@ -1042,7 +1018,6 @@ trType_t BG_FindTrajectoryForBuildable( int bclass ); float BG_FindBounceForBuildable( int bclass ); int BG_FindBuildPointsForBuildable( int bclass ); qboolean BG_FindStagesForBuildable( int bclass, stage_t stage ); -int BG_FindDamageForBuildable( int bclass ); int BG_FindSplashDamageForBuildable( int bclass ); int BG_FindSplashRadiusForBuildable( int bclass ); int BG_FindMODForBuildable( int bclass ); @@ -1050,8 +1025,8 @@ int BG_FindTeamForBuildable( int bclass ); weapon_t BG_FindBuildWeaponForBuildable( int bclass ); int BG_FindAnimForBuildable( int bclass ); int BG_FindNextThinkForBuildable( int bclass ); -int BG_FindFireSpeedForBuildable( int bclass ); int BG_FindRangeForBuildable( int bclass ); +int BG_FindFireSpeedForBuildable( int bclass ); weapon_t BG_FindProjTypeForBuildable( int bclass ); float BG_FindMinNormalForBuildable( int bclass ); qboolean BG_FindInvertNormalForBuildable( int bclass ); @@ -1095,7 +1070,9 @@ char *BG_FindIconForWeapon( int weapon ); void BG_FindAmmoForWeapon( int weapon, int *quan, int *clips, int *maxClips ); qboolean BG_FindInfinteAmmoForWeapon( int weapon ); qboolean BG_FindUsesEnergyForWeapon( int weapon ); -int BG_FindRepeatRateForWeapon( int weapon ); +int BG_FindRepeatRate1ForWeapon( int weapon ); +int BG_FindRepeatRate2ForWeapon( int weapon ); +int BG_FindRepeatRate3ForWeapon( int weapon ); int BG_FindReloadTimeForWeapon( int weapon ); qboolean BG_WeaponHasAltMode( int weapon ); qboolean BG_WeaponHasThirdMode( int weapon ); @@ -1114,19 +1091,14 @@ weapon_t BG_FindWeaponAmmoForBuildable( int upgrade ); void BG_FindAmmoForUpgrade( int upgrade, int *ammo, int *clips ); WUTeam_t BG_FindTeamForUpgrade( int upgrade ); -// g_dmflags->integer flags -#define DF_NO_FALLING 8 -#define DF_FIXED_FOV 16 -#define DF_NO_FOOTSTEPS 32 - // content masks -#define MASK_ALL (-1) +#define MASK_ALL (-1) #define MASK_SOLID (CONTENTS_SOLID) -#define MASK_PLAYERSOLID (CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_BODY) -#define MASK_DEADSOLID (CONTENTS_SOLID|CONTENTS_PLAYERCLIP) +#define MASK_PLAYERSOLID (CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_BODY) +#define MASK_DEADSOLID (CONTENTS_SOLID|CONTENTS_PLAYERCLIP) #define MASK_WATER (CONTENTS_WATER|CONTENTS_LAVA|CONTENTS_SLIME) #define MASK_OPAQUE (CONTENTS_SOLID|CONTENTS_SLIME|CONTENTS_LAVA) -#define MASK_SHOT (CONTENTS_SOLID|CONTENTS_BODY|CONTENTS_CORPSE) +#define MASK_SHOT (CONTENTS_SOLID|CONTENTS_BODY|CONTENTS_CORPSE) // @@ -1173,10 +1145,6 @@ void BG_PlayerStateToEntityStateExtraPolate( playerState_t *ps, entityState_t * qboolean BG_PlayerTouchesItem( playerState_t *ps, entityState_t *item, int atTime ); -#define CREEP_BASESIZE 120 -#define REACTOR_BASESIZE 1000 -#define REPEATER_BASESIZE 500 - #define ARENAS_PER_TIER 4 #define MAX_ARENAS 1024 #define MAX_ARENAS_TEXT 8192 diff --git a/src/game/g_active.c b/src/game/g_active.c index 63e4c0e8..6dda7ade 100644 --- a/src/game/g_active.c +++ b/src/game/g_active.c @@ -474,9 +474,9 @@ void ClientTimerActions( gentity_t *ent, int msec ) //client is charging up for a pounce if( client->ps.weapon == WP_POUNCE || client->ps.weapon == WP_POUNCE_UPG ) { - if( client->ps.stats[ STAT_MISC ] < MAX_POUNCE_SPEED && ucmd->buttons & BUTTON_ATTACK2 ) + if( client->ps.stats[ STAT_MISC ] < DRAGOON_POUNCE_SPEED && ucmd->buttons & BUTTON_ATTACK2 ) { - client->ps.stats[ STAT_MISC ] += ( 100.0f / POUNCE_TIME ) * MAX_POUNCE_SPEED; + client->ps.stats[ STAT_MISC ] += ( 100.0f / (float)DRAGOON_POUNCE_TIME ) * DRAGOON_POUNCE_SPEED; client->allowedToPounce = qtrue; } @@ -488,8 +488,8 @@ void ClientTimerActions( gentity_t *ent, int msec ) client->ps.stats[ STAT_MISC ] = 0; } - if( client->ps.stats[ STAT_MISC ] > MAX_POUNCE_SPEED ) - client->ps.stats[ STAT_MISC ] = MAX_POUNCE_SPEED; + if( client->ps.stats[ STAT_MISC ] > DRAGOON_POUNCE_SPEED ) + client->ps.stats[ STAT_MISC ] = DRAGOON_POUNCE_SPEED; } //client is charging up an lcanon @@ -499,14 +499,14 @@ void ClientTimerActions( gentity_t *ent, int msec ) BG_unpackAmmoArray( WP_LUCIFER_CANON, client->ps.ammo, client->ps.powerups, &ammo, NULL, NULL ); - if( client->ps.stats[ STAT_MISC ] < LC_TOTAL_CHARGE && ucmd->buttons & BUTTON_ATTACK ) - client->ps.stats[ STAT_MISC ] += ( 100.0f / LC_CHARGE_TIME ) * LC_TOTAL_CHARGE; + if( client->ps.stats[ STAT_MISC ] < LCANON_TOTAL_CHARGE && ucmd->buttons & BUTTON_ATTACK ) + client->ps.stats[ STAT_MISC ] += ( 100.0f / LCANON_CHARGE_TIME ) * LCANON_TOTAL_CHARGE; - if( client->ps.stats[ STAT_MISC ] > LC_TOTAL_CHARGE ) - client->ps.stats[ STAT_MISC ] = LC_TOTAL_CHARGE; + if( client->ps.stats[ STAT_MISC ] > LCANON_TOTAL_CHARGE ) + client->ps.stats[ STAT_MISC ] = LCANON_TOTAL_CHARGE; - if( client->ps.stats[ STAT_MISC ] > ( ammo * LC_TOTAL_CHARGE ) / 10 ) - client->ps.stats[ STAT_MISC ] = ammo * LC_TOTAL_CHARGE / 10; + if( client->ps.stats[ STAT_MISC ] > ( ammo * LCANON_TOTAL_CHARGE ) / 10 ) + client->ps.stats[ STAT_MISC ] = ammo * LCANON_TOTAL_CHARGE / 10; } switch( client->ps.weapon ) @@ -547,13 +547,13 @@ void ClientTimerActions( gentity_t *ent, int msec ) //client is poisoned if( client->ps.stats[ STAT_STATE ] & SS_POISONCLOUDED ) - G_Damage( ent, NULL, NULL, NULL, NULL, 5, 0, MOD_VENOM ); + G_Damage( ent, NULL, NULL, NULL, NULL, HYDRA_PCLOUD_DMG, 0, MOD_VENOM ); //replenish alien health if( client->ps.stats[ STAT_PTEAM ] == PTE_ALIENS ) { int entityList[ MAX_GENTITIES ]; - vec3_t range = { 200, 200, 200 }; + vec3_t range = { BMOFO_REGEN_RANGE, BMOFO_REGEN_RANGE, BMOFO_REGEN_RANGE }; vec3_t mins, maxs, dir; int i, num; gentity_t *alienPlayer; @@ -570,7 +570,7 @@ void ClientTimerActions( gentity_t *ent, int msec ) if( alienPlayer->client && alienPlayer->client->ps.stats[ STAT_PTEAM ] == PTE_ALIENS && alienPlayer->client->ps.stats[ STAT_PCLASS ] == PCL_A_O_LEV4 ) { - modifier = 2.0f; + modifier = BMOFO_REGEN_MOD; break; } } @@ -641,9 +641,6 @@ void ClientEvents( gentity_t *ent, int oldEventSequence ) if( ent->s.eType != ET_PLAYER ) break; // not in the player model - if( g_dmflags.integer & DF_NO_FALLING ) - break; - if( event == EV_FALL_FAR ) damage = 10; else @@ -869,23 +866,27 @@ void ClientThink_real( gentity_t *ent ) client->ps.pm_type = PM_NORMAL; if( client->ps.stats[ STAT_STATE ] & SS_GRABBED && - client->lastGrabTime + 1000 < level.time ) + client->lastGrabTime + HYDRA_GRAB_TIME < level.time ) client->ps.stats[ STAT_STATE ] &= ~SS_GRABBED; if( client->ps.stats[ STAT_STATE ] & SS_BLOBLOCKED && client->lastLockTime + 5000 < level.time ) client->ps.stats[ STAT_STATE ] &= ~SS_BLOBLOCKED; + if( client->ps.stats[ STAT_STATE ] & SS_SLOWLOCKED && + client->lastLockTime + DRAGOON_SLOWBLOB_TIME < level.time ) + client->ps.stats[ STAT_STATE ] &= ~SS_SLOWLOCKED; + if( client->ps.stats[ STAT_STATE ] & SS_BOOSTED && client->lastBoostedTime + 20000 < level.time ) client->ps.stats[ STAT_STATE ] &= ~SS_BOOSTED; if( client->ps.stats[ STAT_STATE ] & SS_POISONCLOUDED && - client->lastPoisonCloudedTime + PCLOUD_TIME < level.time ) + client->lastPoisonCloudedTime + HYDRA_PCLOUD_TIME < level.time ) client->ps.stats[ STAT_STATE ] &= ~SS_POISONCLOUDED; if( client->ps.stats[ STAT_STATE ] & SS_KNOCKEDOVER && - client->lastKnockedOverTime + KOVER_TIME < level.time && + client->lastKnockedOverTime + BMOFO_KOVER_TIME < level.time && ucmd->upmove > 0 ) { client->lastGetUpTime = level.time; @@ -901,7 +902,7 @@ void ClientThink_real( gentity_t *ent ) } if( client->ps.stats[ STAT_STATE ] & SS_GETTINGUP && - client->lastGetUpTime + GETUP_TIME < level.time ) + client->lastGetUpTime + BMOFO_GETUP_TIME < level.time ) { client->ps.stats[ STAT_STATE ] &= ~SS_GETTINGUP; VectorCopy( ent->client->ps.grapplePoint, ent->client->ps.viewangles ); @@ -927,20 +928,20 @@ void ClientThink_real( gentity_t *ent ) //TA: slow player if charging up for a pounce if( ( client->ps.weapon == WP_POUNCE || client->ps.weapon == WP_POUNCE_UPG ) && ucmd->buttons & BUTTON_ATTACK2 ) - client->ps.speed *= 0.75; + client->ps.speed *= DRAGOON_POUNCE_SPEED_MOD; //TA: slow the player if slow locked if( client->ps.stats[ STAT_STATE ] & SS_SLOWLOCKED ) - client->ps.speed *= 0.5; + client->ps.speed *= DRAGOON_SLOWBLOB_SPEED_MOD; //TA: slow player if standing in creep - for ( i = 1, creepNode = g_entities + i; i < level.num_entities; i++, creepNode++ ) + for( i = 1, creepNode = g_entities + i; i < level.num_entities; i++, creepNode++ ) { if( creepNode->biteam == PTE_ALIENS ) { VectorSubtract( client->ps.origin, creepNode->s.origin, temp_v ); - if( ( VectorLength( temp_v ) <= CREEP_BASESIZE ) && + if( ( VectorLength( temp_v ) <= BG_FindCreepSizeForBuildable( creepNode->s.modelindex ) ) && ( temp_v[ 2 ] <= 21 ) && //assumes mins of player is (x, x, -24) ( client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS ) ) { @@ -1010,7 +1011,7 @@ void ClientThink_real( gentity_t *ent ) pm.trace = trap_Trace; pm.pointcontents = trap_PointContents; pm.debugLevel = g_debugMove.integer; - pm.noFootsteps = ( g_dmflags.integer & DF_NO_FOOTSTEPS ) > 0; + pm.noFootsteps = 0; pm.pmove_fixed = pmove_fixed.integer | client->pers.pmoveFixed; pm.pmove_msec = pmove_msec.integer; diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c index 43690497..4c57d09d 100644 --- a/src/game/g_buildable.c +++ b/src/game/g_buildable.c @@ -231,7 +231,7 @@ static qboolean findCreep( gentity_t *self ) } } - if( minDistance <= ( CREEP_BASESIZE * 3 ) ) + if( minDistance <= CREEP_BASESIZE ) { self->parentNode = closestSpawn; return qtrue; @@ -363,8 +363,8 @@ void ASpawn_Blast( gentity_t *self ) vec3_t dir; // we don't have a valid direction, so just point straight up - dir[0] = dir[1] = 0; - dir[2] = 1; + dir[ 0 ] = dir[ 1 ] = 0; + dir[ 2 ] = 1; //do a bit of radius damage G_SelectiveRadiusDamage( self->s.pos.trBase, self->parent, self->splashDamage, @@ -472,7 +472,7 @@ think function for Alien Acid Tube void AOvermind_Think( gentity_t *self ) { int entityList[ MAX_GENTITIES ]; - vec3_t range = { 200, 200, 200 }; + vec3_t range = { OVERMIND_ATTACK_RANGE, OVERMIND_ATTACK_RANGE, OVERMIND_ATTACK_RANGE }; vec3_t mins, maxs; int i, num; gentity_t *enemy; @@ -518,7 +518,7 @@ pain function for Alien Spawn */ void ABarricade_Pain( gentity_t *self, gentity_t *attacker, int damage ) { - if( random() > 0.5f ) + if( rand( ) % 1 ) G_setBuildableAnim( self, BANIM_PAIN1, qfalse ); else G_setBuildableAnim( self, BANIM_PAIN2, qfalse ); @@ -536,8 +536,8 @@ void ABarricade_Blast( gentity_t *self ) vec3_t dir; // we don't have a valid direction, so just point straight up - dir[0] = dir[1] = 0; - dir[2] = 1; + dir[ 0 ] = dir[ 1 ] = 0; + dir[ 2 ] = 1; //do a bit of radius damage G_SelectiveRadiusDamage( self->s.pos.trBase, self->parent, self->splashDamage, @@ -617,7 +617,7 @@ void AAcidTube_Damage( gentity_t *self ) G_AddEvent( self, EV_GIB_ALIEN, DirToByte( self->s.origin2 ) ); } - if( ( self->timestamp + 10000 ) > level.time ) + if( ( self->timestamp + ACIDTUBE_REPEAT ) > level.time ) self->think = AAcidTube_Damage; else { @@ -642,7 +642,7 @@ think function for Alien Acid Tube void AAcidTube_Think( gentity_t *self ) { int entityList[ MAX_GENTITIES ]; - vec3_t range = { 200, 200, 200 }; + vec3_t range = { ACIDTUBE_RANGE, ACIDTUBE_RANGE, ACIDTUBE_RANGE }; vec3_t mins, maxs; int i, num; gentity_t *enemy; @@ -669,6 +669,7 @@ void AAcidTube_Think( gentity_t *self ) self->think = AAcidTube_Damage; self->nextthink = level.time + 100; G_setBuildableAnim( self, BANIM_ATTACK1, qfalse ); + return; } } @@ -757,8 +758,8 @@ void AHovel_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int vec3_t dir; // we don't have a valid direction, so just point straight up - dir[0] = dir[1] = 0; - dir[2] = 1; + dir[ 0 ] = dir[ 1 ] = 0; + dir[ 2 ] = 1; //do a bit of radius damage G_SelectiveRadiusDamage( self->s.pos.trBase, self->parent, self->splashDamage, @@ -843,7 +844,7 @@ void ABooster_Touch( gentity_t *self, gentity_t *other, trace_t *trace ) gclient_t *client = other->client; //only allow boostage once every 30 seconds - if( client->lastBoostedTime + 30000 > level.time ) + if( client->lastBoostedTime + BOOSTER_INTERVAL > level.time ) return; //restore ammo, if any @@ -863,9 +864,6 @@ void ABooster_Touch( gentity_t *self, gentity_t *other, trace_t *trace ) //================================================================================== -#define BLOB_PROJSPEED 500 -#define MIN_DOT 0.85f // max angle = acos( MIN_DOT ) - /* ================ adef_fireonemeny @@ -885,7 +883,7 @@ void adef_fireonenemy( gentity_t *self, int firespeed ) VectorScale( self->enemy->jerk, 1.0f / 3.0f, thirdJerk ); //O( time ) - worst case O( time ) = 250 iterations - for( i = 0; ( i * BLOB_PROJSPEED ) / 1000.0f < distanceToTarget; i++ ) + for( i = 0; ( i * LOCKBLOB_SPEED ) / 1000.0f < distanceToTarget; i++ ) { float time = (float)i / 1000.0f; @@ -943,7 +941,7 @@ qboolean adef_checktarget( gentity_t *self, gentity_t *target, int range ) //only allow a narrow field of "vision" VectorNormalize( distance ); //is now direction of target - if( DotProduct( distance, self->s.origin2 ) < MIN_DOT ) + if( DotProduct( distance, self->s.origin2 ) < LOCKBLOB_DOT ) return qfalse; trap_Trace( &trace, self->s.pos.trBase, NULL, NULL, target->s.pos.trBase, self->s.number, MASK_SHOT ); @@ -1048,8 +1046,6 @@ void HRpt_Think( gentity_t *self ) self->nextthink = level.time + REFRESH_TIME; } -#define REFIL_TIME 500 //1/2 second between every clip refil - /* ================ HRpt_Use @@ -1064,7 +1060,7 @@ void HRpt_Use( gentity_t *self, gentity_t *other, gentity_t *activator ) playerState_t *ps = &activator->client->ps; - if( activator->client->lastRefilTime + REFIL_TIME > level.time ) + if( activator->client->lastRefilTime + ENERGY_REFIL_TIME > level.time ) return; if( !BG_FindUsesEnergyForWeapon( ps->weapon ) ) @@ -1073,7 +1069,7 @@ void HRpt_Use( gentity_t *self, gentity_t *other, gentity_t *activator ) BG_FindAmmoForWeapon( ps->weapon, &maxAmmo, NULL, &maxClips ); if( BG_gotItem( UP_BATTPACK, ps->stats ) ) - maxAmmo *= 2; + maxAmmo = (int)( (float)maxAmmo * BATTPACK_MODIFIER ); BG_unpackAmmoArray( ps->weapon, ps->ammo, ps->powerups, &ammo, &clips, NULL ); @@ -1202,9 +1198,6 @@ void HDCC_Think( gentity_t *self ) //================================================================================== -#define MAX_MEDISTAT_CLIENTS 1 -#define MAX_ADVMEDISTAT_CLIENTS 3 - /* ================ HMedistat_Think @@ -1325,8 +1318,8 @@ void HFM_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int da vec3_t dir; // we don't have a valid direction, so just point straight up - dir[0] = dir[1] = 0; - dir[2] = -1; + dir[ 0 ] = dir[ 1 ] = 0; + dir[ 2 ] = -1; //do a bit of radius damage G_RadiusDamage( self->s.pos.trBase, self->parent, self->splashDamage, @@ -1366,10 +1359,6 @@ void HFM_Think( gentity_t *self ) //================================================================================== -#define HMGTURRET_ANGULARSPEED 20 //degrees/think ~= 200deg/sec -#define HMGTURRET_ACCURACYTOLERANCE HMGTURRET_ANGULARSPEED / 2 //angular difference for turret to fire -#define HMGTURRET_VERTICALCAP 30 //- maximum pitch - /* ================ HMGTurret_TrackEnemy @@ -1398,10 +1387,10 @@ qboolean HMGTurret_TrackEnemy( gentity_t *self ) angularDiff[ YAW ] = AngleSubtract( self->s.angles2[ YAW ], angleToTarget[ YAW ] ); //if not pointing at our target then move accordingly - if( angularDiff[ PITCH ] < -HMGTURRET_ACCURACYTOLERANCE ) - self->s.angles2[ PITCH ] += HMGTURRET_ANGULARSPEED; - else if( angularDiff[ PITCH ] > HMGTURRET_ACCURACYTOLERANCE ) - self->s.angles2[ PITCH ] -= HMGTURRET_ANGULARSPEED; + if( angularDiff[ PITCH ] < -MGTURRET_ACCURACYTOLERANCE ) + self->s.angles2[ PITCH ] += MGTURRET_ANGULARSPEED; + else if( angularDiff[ PITCH ] > MGTURRET_ACCURACYTOLERANCE ) + self->s.angles2[ PITCH ] -= MGTURRET_ANGULARSPEED; else self->s.angles2[ PITCH ] = angleToTarget[ PITCH ]; @@ -1410,14 +1399,14 @@ qboolean HMGTurret_TrackEnemy( gentity_t *self ) if( temp > 180 ) temp -= 360; - if( temp < -HMGTURRET_VERTICALCAP ) - self->s.angles2[ PITCH ] = (-360)+HMGTURRET_VERTICALCAP; + if( temp < -MGTURRET_VERTICALCAP ) + self->s.angles2[ PITCH ] = (-360) + MGTURRET_VERTICALCAP; //if not pointing at our target then move accordingly - if( angularDiff[ YAW ] < -HMGTURRET_ACCURACYTOLERANCE ) - self->s.angles2[ YAW ] += HMGTURRET_ANGULARSPEED; - else if( angularDiff[ YAW ] > HMGTURRET_ACCURACYTOLERANCE ) - self->s.angles2[ YAW ] -= HMGTURRET_ANGULARSPEED; + if( angularDiff[ YAW ] < -MGTURRET_ACCURACYTOLERANCE ) + self->s.angles2[ YAW ] += MGTURRET_ANGULARSPEED; + else if( angularDiff[ YAW ] > MGTURRET_ACCURACYTOLERANCE ) + self->s.angles2[ YAW ] -= MGTURRET_ANGULARSPEED; else self->s.angles2[ YAW ] = angleToTarget[ YAW ]; @@ -1426,8 +1415,8 @@ qboolean HMGTurret_TrackEnemy( gentity_t *self ) vectoangles( dirToTarget, self->turretAim ); //if pointing at our target return true - if( abs( angleToTarget[ YAW ] - self->s.angles2[ YAW ] ) <= HMGTURRET_ACCURACYTOLERANCE && - abs( angleToTarget[ PITCH ] - self->s.angles2[ PITCH ] ) <= HMGTURRET_ACCURACYTOLERANCE ) + if( abs( angleToTarget[ YAW ] - self->s.angles2[ YAW ] ) <= MGTURRET_ACCURACYTOLERANCE && + abs( angleToTarget[ PITCH ] - self->s.angles2[ PITCH ] ) <= MGTURRET_ACCURACYTOLERANCE ) return qtrue; return qfalse; @@ -1625,8 +1614,8 @@ void HSpawn_Blast( gentity_t *self ) vec3_t dir; // we don't have a valid direction, so just point straight up - dir[0] = dir[1] = 0; - dir[2] = 1; + dir[ 0 ] = dir[ 1 ] = 0; + dir[ 2 ] = 1; self->s.modelindex = 0; //don't draw the model once its destroyed G_AddEvent( self, EV_BUILDABLE_EXPLOSION, DirToByte( dir ) ); @@ -1657,7 +1646,7 @@ void HSpawn_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int self->die = nullDieFunction; self->think = HSpawn_Blast; - self->nextthink = level.time + 5000; //wait 1.5 seconds before damaging others + self->nextthink = level.time + HUMAN_DETONATION_DELAY; self->powered = qfalse; //free up power trap_LinkEntity( self ); @@ -1675,7 +1664,7 @@ void HSpawn_Think( gentity_t *self ) vec3_t mins, maxs, origin; gentity_t *ent; trace_t tr; - vec3_t up = { 0, 0, 1 }; + vec3_t up = { 0.0f, 0.0f, 1.0f }; BG_FindBBoxForClass( PCL_H_BASE, mins, maxs, NULL, NULL, NULL ); @@ -1912,7 +1901,6 @@ gentity_t *G_buildItem( gentity_t *builder, buildable_t buildable, vec3_t origin BG_FindBBoxForBuildable( buildable, built->r.mins, built->r.maxs ); built->health = BG_FindHealthForBuildable( buildable ); - built->damage = BG_FindDamageForBuildable( buildable ); built->splashDamage = BG_FindSplashDamageForBuildable( buildable ); built->splashRadius = BG_FindSplashRadiusForBuildable( buildable ); built->splashMethodOfDeath = BG_FindMODForBuildable( buildable ); @@ -2208,9 +2196,6 @@ void FinishSpawningBuildable( gentity_t *ent ) trap_LinkEntity( built ); } - -qboolean itemRegistered[MAX_ITEMS]; - /* ============ G_SpawnBuildable diff --git a/src/game/g_client.c b/src/game/g_client.c index b880d352..1b5ea37d 100644 --- a/src/game/g_client.c +++ b/src/game/g_client.c @@ -1226,7 +1226,6 @@ void ClientSpawn( gentity_t *ent, gentity_t *spawn ) int savedPing; int ammoIndex, ammoSubIndex; int teamLocal; - int accuracy_hits, accuracy_shots; int eventSequence; char userinfo[MAX_INFO_STRING]; vec3_t bodyMaxs, classMins, up = { 0, 0, 1 }; @@ -1305,8 +1304,6 @@ void ClientSpawn( gentity_t *ent, gentity_t *spawn ) saved = client->pers; savedSess = client->sess; savedPing = client->ps.ping; - accuracy_hits = client->accuracy_hits; - accuracy_shots = client->accuracy_shots; for( i = 0; i < MAX_PERSISTANT; i++ ) persistant[ i ] = client->ps.persistant[ i ]; @@ -1317,8 +1314,6 @@ void ClientSpawn( gentity_t *ent, gentity_t *spawn ) client->pers = saved; client->sess = savedSess; client->ps.ping = savedPing; - client->accuracy_hits = accuracy_hits; - client->accuracy_shots = accuracy_shots; client->lastkilled_client = -1; for( i = 0; i < MAX_PERSISTANT; i++ ) diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c index 1b2e0156..18b33792 100644 --- a/src/game/g_cmds.c +++ b/src/game/g_cmds.c @@ -1351,7 +1351,7 @@ void Cmd_Buy_f( gentity_t *ent ) if( BG_FindUsesEnergyForWeapon( weapon ) && BG_gotItem( UP_BATTPACK, ent->client->ps.stats ) ) - quan *= 2; + quan = (int)( (float)quan * BATTPACK_MODIFIER ); BG_packAmmoArray( weapon, ent->client->ps.ammo, ent->client->ps.powerups, quan, clips, maxClips ); diff --git a/src/game/g_local.h b/src/game/g_local.h index e37bdd57..ebe18d2e 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -312,9 +312,6 @@ struct gclient_s vec3_t damage_from; // origin for vector calculation qboolean damage_fromWorld; // if true, don't use the damage_from vector - int accurateCount; // for "impressive" reward sound - int accuracy_shots; // total number of shots - int accuracy_hits; // total number of hits // int lastkilled_client;// last client that this client killed int lasthurt_client; // last client that damaged this client @@ -754,7 +751,6 @@ extern vmCvar_t g_maxclients; // allow this many total, including spectato extern vmCvar_t g_maxGameClients; // allow this many active extern vmCvar_t g_restarted; -extern vmCvar_t g_dmflags; extern vmCvar_t g_timelimit; extern vmCvar_t g_friendlyFire; extern vmCvar_t g_password; diff --git a/src/game/g_main.c b/src/game/g_main.c index 478d0906..edefb98d 100644 --- a/src/game/g_main.c +++ b/src/game/g_main.c @@ -32,7 +32,6 @@ typedef struct gentity_t g_entities[ MAX_GENTITIES ]; gclient_t g_clients[ MAX_CLIENTS ]; -vmCvar_t g_dmflags; vmCvar_t g_fraglimit; vmCvar_t g_timelimit; vmCvar_t g_capturelimit; @@ -104,10 +103,7 @@ static cvarTable_t gameCvarTable[ ] = { &g_maxGameClients, "g_maxGameClients", "0", CVAR_SERVERINFO | CVAR_LATCH | CVAR_ARCHIVE, 0, qfalse }, // change anytime vars - { &g_dmflags, "dmflags", "0", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue }, - { &g_fraglimit, "fraglimit", "0", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue }, { &g_timelimit, "timelimit", "0", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue }, - { &g_capturelimit, "capturelimit", "0", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue }, { &g_synchronousClients, "g_synchronousClients", "0", CVAR_SYSTEMINFO, 0, qfalse }, @@ -851,8 +847,8 @@ void CalculateRanks( void ) else { // we are tied with the previous client - level.clients[ level.sortedClients[ i - 1 ] ].ps.persistant[ PERS_RANK ] = rank | RANK_TIED_FLAG; - level.clients[ level.sortedClients[ i ] ].ps.persistant[ PERS_RANK ] = rank | RANK_TIED_FLAG; + level.clients[ level.sortedClients[ i - 1 ] ].ps.persistant[ PERS_RANK ] = rank; + level.clients[ level.sortedClients[ i ] ].ps.persistant[ PERS_RANK ] = rank; } score = newScore; diff --git a/src/game/g_missile.c b/src/game/g_missile.c index d7c44dcf..303b192e 100644 --- a/src/game/g_missile.c +++ b/src/game/g_missile.c @@ -82,12 +82,9 @@ void G_ExplodeMissile( gentity_t *ent ) ent->freeAfterEvent = qtrue; // splash damage - if ( ent->splashDamage ) { - if( G_RadiusDamage( ent->r.currentOrigin, ent->parent, ent->splashDamage, ent->splashRadius, ent - , ent->splashMethodOfDeath ) ) { - g_entities[ent->r.ownerNum].client->accuracy_hits++; - } - } + if( ent->splashDamage ) + G_RadiusDamage( ent->r.currentOrigin, ent->parent, ent->splashDamage, + ent->splashRadius, ent, ent->splashMethodOfDeath ); trap_LinkEntity( ent ); } @@ -176,14 +173,8 @@ void G_MissileImpact( gentity_t *ent, trace_t *trace ) // splash damage (doesn't apply to person directly hit) if( ent->splashDamage ) - { - if( G_RadiusDamage( trace->endpos, ent->parent, ent->splashDamage, ent->splashRadius, - other, ent->splashMethodOfDeath ) ) - { - if( !hitClient ) - g_entities[ ent->r.ownerNum ].client->accuracy_hits++; - } - } + G_RadiusDamage( trace->endpos, ent->parent, ent->splashDamage, ent->splashRadius, + other, ent->splashMethodOfDeath ); trap_LinkEntity( ent ); } @@ -268,16 +259,16 @@ gentity_t *fire_flamer( gentity_t *self, vec3_t start, vec3_t dir ) bolt = G_Spawn(); bolt->classname = "flame"; - bolt->nextthink = level.time + FIREBALL_LIFETIME; + bolt->nextthink = level.time + FLAMER_LIFETIME; bolt->think = G_ExplodeMissile; bolt->s.eType = ET_MISSILE; bolt->r.svFlags = SVF_USE_CURRENT_ORIGIN; bolt->s.weapon = WP_FLAMER; bolt->r.ownerNum = self->s.number; bolt->parent = self; - bolt->damage = 5; - bolt->splashDamage = 5; - bolt->splashRadius = 45; + bolt->damage = FLAMER_DMG; + bolt->splashDamage = FLAMER_DMG; + bolt->splashRadius = FLAMER_RADIUS; bolt->methodOfDeath = MOD_FLAMER; bolt->splashMethodOfDeath = MOD_FLAMER_SPLASH; bolt->clipmask = MASK_SHOT; @@ -286,11 +277,11 @@ gentity_t *fire_flamer( gentity_t *self, vec3_t start, vec3_t dir ) bolt->s.pos.trType = TR_LINEAR; bolt->s.pos.trTime = level.time - MISSILE_PRESTEP_TIME; // move a bit on the very first frame VectorCopy( start, bolt->s.pos.trBase ); - VectorScale( self->client->ps.velocity, FIREBALL_LAG, pvel ); - VectorMA( pvel, FIREBALL_SPEED, dir, bolt->s.pos.trDelta ); + VectorScale( self->client->ps.velocity, FLAMER_LAG, pvel ); + VectorMA( pvel, FLAMER_SPEED, dir, bolt->s.pos.trDelta ); SnapVector( bolt->s.pos.trDelta ); // save net bandwidth - VectorCopy (start, bolt->r.currentOrigin); + VectorCopy( start, bolt->r.currentOrigin ); return bolt; } @@ -318,7 +309,7 @@ gentity_t *fire_pulseRifle( gentity_t *self, vec3_t start, vec3_t dir ) bolt->s.weapon = WP_PULSE_RIFLE; bolt->r.ownerNum = self->s.number; bolt->parent = self; - bolt->damage = 20; + bolt->damage = PRIFLE_DMG; bolt->splashDamage = 0; bolt->splashRadius = 0; //bolt->methodOfDeath = MOD_FLAMER; @@ -329,10 +320,10 @@ gentity_t *fire_pulseRifle( gentity_t *self, vec3_t start, vec3_t dir ) bolt->s.pos.trType = TR_LINEAR; bolt->s.pos.trTime = level.time - MISSILE_PRESTEP_TIME; // move a bit on the very first frame VectorCopy( start, bolt->s.pos.trBase ); - VectorScale( dir, 1500, bolt->s.pos.trDelta ); + VectorScale( dir, PRIFLE_SPEED, bolt->s.pos.trDelta ); SnapVector( bolt->s.pos.trDelta ); // save net bandwidth - VectorCopy (start, bolt->r.currentOrigin); + VectorCopy( start, bolt->r.currentOrigin ); return bolt; } @@ -349,7 +340,7 @@ gentity_t *fire_luciferCanon( gentity_t *self, vec3_t start, vec3_t dir, int dam { gentity_t *bolt; int localDamage = (int)( ceil( ( (float)damage / - (float)LC_TOTAL_CHARGE ) * 100.0f ) ); + (float)LCANON_TOTAL_CHARGE ) * (float)LCANON_DAMAGE ) ); VectorNormalize( dir ); @@ -374,10 +365,10 @@ gentity_t *fire_luciferCanon( gentity_t *self, vec3_t start, vec3_t dir, int dam bolt->s.pos.trType = TR_LINEAR; bolt->s.pos.trTime = level.time - MISSILE_PRESTEP_TIME; // move a bit on the very first frame VectorCopy( start, bolt->s.pos.trBase ); - VectorScale( dir, 250, bolt->s.pos.trDelta ); + VectorScale( dir, LCANON_SPEED, bolt->s.pos.trDelta ); SnapVector( bolt->s.pos.trDelta ); // save net bandwidth - VectorCopy (start, bolt->r.currentOrigin); + VectorCopy( start, bolt->r.currentOrigin ); return bolt; } @@ -417,7 +408,7 @@ gentity_t *fire_lockblob( gentity_t *self, vec3_t start, vec3_t dir ) VectorCopy( start, bolt->s.pos.trBase ); VectorScale( dir, 500, bolt->s.pos.trDelta ); SnapVector( bolt->s.pos.trDelta ); // save net bandwidth - VectorCopy (start, bolt->r.currentOrigin); + VectorCopy( start, bolt->r.currentOrigin ); return bolt; } @@ -442,7 +433,7 @@ gentity_t *fire_slowBlob( gentity_t *self, vec3_t start, vec3_t dir ) bolt->s.weapon = WP_POUNCE_UPG; bolt->r.ownerNum = self->s.number; bolt->parent = self; - bolt->damage = 20; + bolt->damage = DRAGOON_SLOWBLOB_DMG; bolt->splashDamage = 0; bolt->splashRadius = 0; bolt->methodOfDeath = MOD_ROCKET; @@ -453,9 +444,9 @@ gentity_t *fire_slowBlob( gentity_t *self, vec3_t start, vec3_t dir ) bolt->s.pos.trType = TR_GRAVITY; bolt->s.pos.trTime = level.time - MISSILE_PRESTEP_TIME; // move a bit on the very first frame VectorCopy( start, bolt->s.pos.trBase ); - VectorScale( dir, 800, bolt->s.pos.trDelta ); + VectorScale( dir, DRAGOON_SLOWBLOB_SPEED, bolt->s.pos.trDelta ); SnapVector( bolt->s.pos.trDelta ); // save net bandwidth - VectorCopy (start, bolt->r.currentOrigin); + VectorCopy( start, bolt->r.currentOrigin ); return bolt; } @@ -491,9 +482,9 @@ gentity_t *fire_paraLockBlob( gentity_t *self, vec3_t start, vec3_t dir ) bolt->s.pos.trType = TR_GRAVITY; bolt->s.pos.trTime = level.time - MISSILE_PRESTEP_TIME; // move a bit on the very first frame VectorCopy( start, bolt->s.pos.trBase ); - VectorScale( dir, 800, bolt->s.pos.trDelta ); + VectorScale( dir, LOCKBLOB_SPEED, bolt->s.pos.trDelta ); SnapVector( bolt->s.pos.trDelta ); // save net bandwidth - VectorCopy (start, bolt->r.currentOrigin); + VectorCopy( start, bolt->r.currentOrigin ); return bolt; } diff --git a/src/game/g_weapon.c b/src/game/g_weapon.c index 24cce9dd..0837d7e2 100644 --- a/src/game/g_weapon.c +++ b/src/game/g_weapon.c @@ -110,13 +110,6 @@ MACHINEGUN ====================================================================== */ -#define MACHINEGUN_SPREAD 200 -#define MACHINEGUN_DAMAGE 7 -#define MACHINEGUN_TEAM_DAMAGE 5 // wimpier MG in teamplay - -#define CHAINGUN_SPREAD 1200 -#define CHAINGUN_DAMAGE 14 - void bulletFire( gentity_t *ent, float spread, int damage, int mod ) { trace_t tr; @@ -126,14 +119,14 @@ void bulletFire( gentity_t *ent, float spread, int damage, int mod ) gentity_t *tent; gentity_t *traceEnt; - r = random() * M_PI * 2.0f; - u = sin(r) * crandom() * spread * 16; - r = cos(r) * crandom() * spread * 16; - VectorMA (muzzle, 8192*16, forward, end); - VectorMA (end, r, right, end); - VectorMA (end, u, up, end); + r = random( ) * M_PI * 2.0f; + u = sin( r ) * crandom( ) * spread * 16; + r = cos( r ) * crandom( ) * spread * 16; + VectorMA( muzzle, 8192 * 16, forward, end ); + VectorMA( end, r, right, end ); + VectorMA( end, u, up, end ); - trap_Trace (&tr, muzzle, NULL, NULL, end, ent->s.number, MASK_SHOT); + trap_Trace( &tr, muzzle, NULL, NULL, end, ent->s.number, MASK_SHOT ); if( tr.surfaceFlags & SURF_NOIMPACT ) return; @@ -158,7 +151,7 @@ void bulletFire( gentity_t *ent, float spread, int damage, int mod ) if( traceEnt->takedamage ) { G_Damage( traceEnt, ent, ent, forward, tr.endpos, - damage, 0, MOD_MACHINEGUN); + damage, 0, MOD_MACHINEGUN ); } } @@ -195,7 +188,7 @@ void massDriverFire( gentity_t *ent ) if( traceEnt->takedamage ) { G_Damage( traceEnt, ent, ent, forward, tr.endpos, - 50, 0, MOD_MACHINEGUN); + MDRIVER_DMG, 0, MOD_MACHINEGUN ); } } @@ -293,7 +286,7 @@ void lasGunFire( gentity_t *ent ) tent->s.otherEntityNum = ent->s.number; if( traceEnt->takedamage ) - G_Damage( traceEnt, ent, ent, forward, tr.endpos, 10, 0, MOD_MACHINEGUN ); + G_Damage( traceEnt, ent, ent, forward, tr.endpos, LASGUN_DAMAGE, 0, MOD_MACHINEGUN ); } /* @@ -316,7 +309,7 @@ void painSawFire( gentity_t *ent ) CalcMuzzlePoint( ent, forward, right, up, muzzle ); - VectorMA( muzzle, 32, forward, end ); + VectorMA( muzzle, PAINSAW_RANGE, forward, end ); trap_Trace( &tr, muzzle, NULL, NULL, end, ent->s.number, MASK_SHOT ); if ( tr.surfaceFlags & SURF_NOIMPACT ) @@ -334,7 +327,7 @@ void painSawFire( gentity_t *ent ) } if ( traceEnt->takedamage ) - G_Damage( traceEnt, ent, ent, forward, tr.endpos, 5, DAMAGE_NO_KNOCKBACK, MOD_VENOM ); + G_Damage( traceEnt, ent, ent, forward, tr.endpos, PAINSAW_DAMAGE, DAMAGE_NO_KNOCKBACK, MOD_VENOM ); } /* @@ -355,7 +348,7 @@ void LCChargeFire( gentity_t *ent, qboolean secondary ) gentity_t *m; if( secondary ) - ent->client->ps.stats[ STAT_MISC ] = LC_TOTAL_CHARGE / 10; + ent->client->ps.stats[ STAT_MISC ] = LCANON_SECONDARY_DAMAGE; m = fire_luciferCanon( ent, muzzle, forward, ent->client->ps.stats[ STAT_MISC ] ); @@ -380,7 +373,7 @@ void teslaFire( gentity_t *ent ) damage = 8; - VectorMA( muzzle, LIGHTNING_RANGE, forward, end ); + VectorMA( muzzle, TESLAGEN_RANGE, forward, end ); trap_Trace( &tr, muzzle, NULL, NULL, end, ent->s.number, MASK_SHOT ); @@ -468,7 +461,7 @@ void cancelBuildFire( gentity_t *ent ) } } else if( ent->client->ps.weapon == WP_ABUILD2 ) - meleeAttack( ent, 32.0f, 25 ); //melee attack for alien builder + meleeAttack( ent, ABUILDER_CLAW_RANGE, ABUILDER_CLAW_DMG ); //melee attack for alien builder } void buildFire( gentity_t *ent, dynMenu_t menu ) @@ -517,7 +510,7 @@ qboolean CheckVenomAttack( gentity_t *ent ) CalcMuzzlePoint( ent, forward, right, up, muzzle ); - VectorMA (muzzle, 32, forward, end); + VectorMA( muzzle, SOLDIER_BITE_RANGE, forward, end ); trap_Trace (&tr, muzzle, NULL, NULL, end, ent->s.number, MASK_SHOT); if ( tr.surfaceFlags & SURF_NOIMPACT ) @@ -541,7 +534,7 @@ qboolean CheckVenomAttack( gentity_t *ent ) tent->s.weapon = ent->s.weapon; } - G_Damage( traceEnt, ent, ent, forward, tr.endpos, 100, DAMAGE_NO_KNOCKBACK, MOD_VENOM ); + G_Damage( traceEnt, ent, ent, forward, tr.endpos, SOLDIER_BITE_DMG, DAMAGE_NO_KNOCKBACK, MOD_VENOM ); return qtrue; } @@ -570,7 +563,7 @@ void CheckGrabAttack( gentity_t *ent ) CalcMuzzlePoint( ent, forward, right, up, muzzle ); - VectorMA( muzzle, 32, forward, end ); + VectorMA( muzzle, HYDRA_GRAB_RANGE, forward, end ); trap_Trace( &tr, muzzle, NULL, NULL, end, ent->s.number, MASK_SHOT ); if( tr.surfaceFlags & SURF_NOIMPACT ) @@ -602,7 +595,7 @@ poisonCloud void poisonCloud( gentity_t *ent ) { int entityList[ MAX_GENTITIES ]; - vec3_t range = { 200, 200, 200 }; + vec3_t range = { HYDRA_PCLOUD_RANGE, HYDRA_PCLOUD_RANGE, HYDRA_PCLOUD_RANGE }; vec3_t mins, maxs, dir; int i, num; gentity_t *humanPlayer; @@ -659,7 +652,7 @@ qboolean CheckPounceAttack( gentity_t *ent ) CalcMuzzlePoint( ent, forward, right, up, muzzle ); - VectorMA( muzzle, 48, forward, end ); + VectorMA( muzzle, DRAGOON_POUNCE_RANGE, forward, end ); trap_Trace( &tr, muzzle, NULL, NULL, end, ent->s.number, MASK_SHOT ); @@ -681,10 +674,10 @@ qboolean CheckPounceAttack( gentity_t *ent ) tent->s.weapon = ent->s.weapon; } - if( !traceEnt->takedamage) + if( !traceEnt->takedamage ) return qfalse; - damage = (int)( (float)ent->client->pouncePayload / ( MAX_POUNCE_SPEED / 100.0f ) ); + damage = (int)( ( (float)ent->client->pouncePayload / (float)DRAGOON_POUNCE_SPEED ) * DRAGOON_POUNCE_DMG ); G_Damage( traceEnt, ent, ent, forward, tr.endpos, damage, DAMAGE_NO_KNOCKBACK, MOD_VENOM ); @@ -710,9 +703,6 @@ ZAP ====================================================================== */ -#define AREAZAP_DAMAGE 100.0f -#define DIRECTZAP_DAMAGE 100.0f - /* =============== areaZapFire @@ -722,7 +712,7 @@ void areaZapFire( gentity_t *ent ) { int entityList[ MAX_GENTITIES ]; int targetList[ MAX_GENTITIES ]; - vec3_t range = { 200, 200, 200 }; + vec3_t range = { CHIMERA_AREAZAP_RANGE, CHIMERA_AREAZAP_RANGE, CHIMERA_AREAZAP_RANGE }; vec3_t mins, maxs, dir; int i, num, numTargets = 0; gentity_t *enemy; @@ -751,7 +741,7 @@ void areaZapFire( gentity_t *ent ) } } - damage = (int)( AREAZAP_DAMAGE / (float)numTargets ); + damage = (int)( (float)CHIMERA_AREAZAP_DMG / (float)numTargets ); for( i = 0; i < numTargets; i++ ) { enemy = &g_entities[ targetList[ i ] ]; @@ -785,7 +775,7 @@ void directZapFire( gentity_t *ent ) { int entityList[ MAX_GENTITIES ]; int targetList[ MAX_GENTITIES ]; - vec3_t range = { 200, 200, 200 }; + vec3_t range = { CHIMERA_DIRECTZAP_RANGE, CHIMERA_DIRECTZAP_RANGE, CHIMERA_DIRECTZAP_RANGE }; vec3_t mins, maxs, dir; int i, num, numTargets = 0; gentity_t *enemy; @@ -833,7 +823,7 @@ void directZapFire( gentity_t *ent ) { //do some damage G_Damage( target, ent, ent, dir, tr.endpos, - DIRECTZAP_DAMAGE, DAMAGE_NO_KNOCKBACK, MOD_LIGHTNING ); + CHIMERA_DIRECTZAP_DMG, DAMAGE_NO_KNOCKBACK, MOD_LIGHTNING ); // snap the endpos to integers to save net bandwidth, but nudged towards the line SnapVectorTowards( tr.endpos, muzzle ); @@ -865,7 +855,7 @@ groundPound void groundPound( gentity_t *ent ) { int entityList[ MAX_GENTITIES ]; - vec3_t range = { 200, 200, 200 }; + vec3_t range = { BMOFO_KNOCK_RANGE, BMOFO_KNOCK_RANGE, BMOFO_KNOCK_RANGE }; vec3_t mins, maxs, dir; int i, num; gentity_t *humanPlayer; @@ -942,6 +932,9 @@ void FireWeapon3( gentity_t *ent ) case WP_POUNCE_UPG: slowBlobFire( ent ); break; + case WP_DIRECT_ZAP: + areaZapFire( ent ); + break; case WP_GROUND_POUND: slowBlobFire( ent ); break; @@ -976,14 +969,12 @@ void FireWeapon2( gentity_t *ent ) case WP_GRAB_CLAW_UPG: poisonCloud( ent ); break; - case WP_POUNCE: - case WP_POUNCE_UPG: - meleeAttack( ent, 32.0f, 150 ); - break; case WP_AREA_ZAP: - case WP_DIRECT_ZAP: areaZapFire( ent ); break; + case WP_DIRECT_ZAP: + directZapFire( ent ); + break; case WP_GROUND_POUND: groundPound( ent ); break; @@ -1027,27 +1018,27 @@ void FireWeapon( gentity_t *ent ) { case WP_GRAB_CLAW: case WP_GRAB_CLAW_UPG: - meleeAttack( ent, 32.0f, 5 ); + meleeAttack( ent, HYDRA_CLAW_RANGE, HYDRA_CLAW_DMG ); break; case WP_POUNCE: case WP_POUNCE_UPG: - meleeAttack( ent, 32.0f, 50 ); + meleeAttack( ent, DRAGOON_CLAW_RANGE, DRAGOON_CLAW_DMG ); break; case WP_AREA_ZAP: - areaZapFire( ent ); + meleeAttack( ent, CHIMERA_CLAW_RANGE, CHIMERA_CLAW_DMG ); break; case WP_DIRECT_ZAP: - directZapFire( ent ); + meleeAttack( ent, CHIMERA_CLAW_RANGE, CHIMERA_CLAW_DMG ); break; case WP_GROUND_POUND: - meleeAttack( ent, 32.0f, 150 ); + meleeAttack( ent, BMOFO_CLAW_RANGE, BMOFO_CLAW_DMG ); break; case WP_MACHINEGUN: - bulletFire( ent, MACHINEGUN_SPREAD, MACHINEGUN_DAMAGE, MOD_MACHINEGUN ); + bulletFire( ent, RIFLE_SPREAD, RIFLE_DMG, MOD_MACHINEGUN ); break; case WP_CHAINGUN: - bulletFire( ent, CHAINGUN_SPREAD, CHAINGUN_DAMAGE, MOD_CHAINGUN ); + bulletFire( ent, CHAINGUN_SPREAD, CHAINGUN_DMG, MOD_CHAINGUN ); break; case WP_FLAMER: flamerFire( ent ); diff --git a/src/game/tremulous.h b/src/game/tremulous.h new file mode 100644 index 00000000..83f1c5ec --- /dev/null +++ b/src/game/tremulous.h @@ -0,0 +1,466 @@ +/* + * Portions Copyright (C) 2000-2001 Tim Angus + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the OSML - Open Source Modification License v1.0 as + * described in the file COPYING which is distributed with this source + * code. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + + +/* + * ALIEN weapons + * + * _REPEAT - time in msec until the weapon can be used again + * _DMG - amount of damage the weapon does + * + * ALIEN_WDMG_MODIFIER - overall damage modifier for coarse tuning + * + */ + +#define ALIEN_WDMG_MODIFIER 1.0f +#define ADM(d) ((int)((float)d*ALIEN_WDMG_MODIFIER)) + +#define ABUILDER_BUILD_REPEAT 500 +#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 SOLDIER_BITE_DMG ADM(100) +#define SOLDIER_BITE_RANGE 32.0f +#define SOLDIER_BITE_REPEAT 500 + +#define DRAGOON_CLAW_DMG ADM(75) +#define DRAGOON_CLAW_RANGE 32.0f +#define DRAGOON_CLAW_REPEAT 750 +#define DRAGOON_CLAW_U_REPEAT 750 +#define DRAGOON_POUNCE_DMG ADM(100) +#define DRAGOON_POUNCE_RANGE 48.0f +#define DRAGOON_POUNCE_SPEED 750 +#define DRAGOON_POUNCE_SPEED_MOD 0.75f +#define DRAGOON_POUNCE_TIME 1000 +#define DRAGOON_SLOWBLOB_DMG ADM(20) +#define DRAGOON_SLOWBLOB_REPEAT 1000 +#define DRAGOON_SLOWBLOB_SPEED 800.0f +#define DRAGOON_SLOWBLOB_SPEED_MOD 0.5f +#define DRAGOON_SLOWBLOB_TIME 5000 + +#define HYDRA_CLAW_DMG ADM(50) +#define HYDRA_CLAW_RANGE 32.0f +#define HYDRA_CLAW_REPEAT 500 +#define HYDRA_CLAW_U_REPEAT 500 +#define HYDRA_GRAB_RANGE 32.0f +#define HYDRA_GRAB_TIME 1000 +#define HYDRA_PCLOUD_DMG ADM(5) +#define HYDRA_PCLOUD_RANGE 200.0f +#define HYDRA_PCLOUD_REPEAT 1000 +#define HYDRA_PCLOUD_TIME 10000 + +#define CHIMERA_CLAW_DMG ADM(75) +#define CHIMERA_CLAW_RANGE 32.0f +#define CHIMERA_CLAW_REPEAT 400 +#define CHIMERA_CLAW_U_REPEAT 300 +#define CHIMERA_AREAZAP_DMG ADM(125) +#define CHIMERA_AREAZAP_RANGE 200.0f +#define CHIMERA_AREAZAP_REPEAT 1500 +#define CHIMERA_DIRECTZAP_DMG ADM(125) +#define CHIMERA_DIRECTZAP_RANGE 200.0f +#define CHIMERA_DIRECTZAP_REPEAT 1500 + +#define BMOFO_CLAW_DMG ADM(150) +#define BMOFO_CLAW_RANGE 32.0f +#define BMOFO_CLAW_REPEAT 750 +#define BMOFO_KNOCK_RANGE 200.0f +#define BMOFO_KNOCK_REPEAT 3000 +#define BMOFO_KOVER_TIME 2000 +#define BMOFO_GETUP_TIME 1000 +#define BMOFO_REGEN_RANGE 200.0f +#define BMOFO_REGEN_MOD 2.0f + + + +/* + * ALIEN classes + * + * _SPEED - fraction of Q3A run speed the class can move + * _TTE - time in msec for the class to evolve to another + * _REGEN - health per second regained + * + * ALIEN_HLTH_MODIFIER - overall health modifier for coarse tuning + * + */ + +#define ALIEN_HLTH_MODIFIER 1.0f +#define AHM(h) ((int)((float)h*ALIEN_HLTH_MODIFIER)) + +#define ABUILDER_SPEED 0.8f +#define ABUILDER_TTE 2000 +#define ABUILDER_VALUE 50 +#define ABUILDER_HEALTH AHM(50) +#define ABUILDER_REGEN 5 + +#define ABUILDER_UPG_SPEED 1.0f +#define ABUILDER_UPG_VALUE 120 +#define ABUILDER_UPG_HEALTH AHM(75) +#define ABUILDER_UPG_REGEN 7 + +#define SOLDIER_SPEED 1.5f +#define SOLDIER_TTE 2000 +#define SOLDIER_VALUE 50 +#define SOLDIER_HEALTH AHM(25) +#define SOLDIER_REGEN 2 + +#define DRAGOON_SPEED 1.5f +#define DRAGOON_TTE 3000 +#define DRAGOON_VALUE 100 +#define DRAGOON_HEALTH AHM(50) +#define DRAGOON_REGEN 5 + +#define DRAGOON_UPG_SPEED 1.5f +#define DRAGOON_UPG_TTE 3000 +#define DRAGOON_UPG_VALUE 120 +#define DRAGOON_UPG_HEALTH AHM(60) +#define DRAGOON_UPG_REGEN 6 + +#define HYDRA_SPEED 1.5f +#define HYDRA_TTE 3000 +#define HYDRA_VALUE 200 +#define HYDRA_HEALTH AHM(100) +#define HYDRA_REGEN 10 + +#define HYDRA_UPG_SPEED 1.5f +#define HYDRA_UPG_TTE 3000 +#define HYDRA_UPG_VALUE 240 +#define HYDRA_UPG_HEALTH AHM(120) +#define HYDRA_UPG_REGEN 12 + +#define CHIMERA_SPEED 1.3f +#define CHIMERA_TTE 3000 +#define CHIMERA_VALUE 300 +#define CHIMERA_HEALTH AHM(200) +#define CHIMERA_REGEN 15 + +#define CHIMERA_UPG_SPEED 1.3f +#define CHIMERA_UPG_TTE 3000 +#define CHIMERA_UPG_VALUE 360 +#define CHIMERA_UPG_HEALTH AHM(250) +#define CHIMERA_UPG_REGEN 20 + +#define BMOFO_SPEED 1.2f +#define BMOFO_VALUE 400 +#define BMOFO_HEALTH AHM(400) +#define BMOFO_REGEN 30 + + + +/* + * ALIEN buildables + * + * _BP - build points required for this buildable + * _REGEN - the amount of health per second regained + * _SPLASHDAMGE - the amount of damage caused by this buildable when melting + * _SPLASHRADIUS - the radius around which it does this damage + * + * CREEP_BASESIZE - the maximum distance a buildable can be from an egg/overmind + * ALIEN_BHLTH_MODIFIER - overall health modifier for coarse tuning + * + */ + +#define ALIEN_BHLTH_MODIFIER 1.0f +#define ABHM(h) ((int)((float)h*ALIEN_BHLTH_MODIFIER)) + +#define CREEP_BASESIZE 360 + +#define ASPAWN_BP 100 +#define ASPAWN_HEALTH ABHM(500) +#define ASPAWN_REGEN 25 +#define ASPAWN_SPLASHDAMAGE 50 +#define ASPAWN_SPLASHRADIUS 50 +#define ASPAWN_CREEPSIZE 120 + +#define BARRICADE_BP 80 +#define BARRICADE_HEALTH ABHM(250) +#define BARRICADE_REGEN 50 +#define BARRICADE_SPLASHDAMAGE 50 +#define BARRICADE_SPLASHRADIUS 50 +#define BARRICADE_CREEPSIZE 120 + +#define BOOSTER_BP 120 +#define BOOSTER_HEALTH ABHM(200) +#define BOOSTER_REGEN 10 +#define BOOSTER_SPLASHDAMAGE 50 +#define BOOSTER_SPLASHRADIUS 50 +#define BOOSTER_CREEPSIZE 120 +#define BOOSTER_INTERVAL 30000 //time in msec between uses (per player) + +#define ACIDTUBE_BP 50 +#define ACIDTUBE_HEALTH ABHM(100) +#define ACIDTUBE_REGEN 10 +#define ACIDTUBE_SPLASHDAMAGE 50 +#define ACIDTUBE_SPLASHRADIUS 200 +#define ACIDTUBE_CREEPSIZE 120 +#define ACIDTUBE_RANGE 200.0f +#define ACIDTUBE_REPEAT 10000 + +#define TRAPPER_BP 150 +#define TRAPPER_HEALTH ABHM(80) +#define TRAPPER_REGEN 8 +#define TRAPPER_SPLASHDAMAGE 20 +#define TRAPPER_SPLASHRADIUS 100 +#define TRAPPER_CREEPSIZE 30 +#define TRAPPER_RANGE 400 +#define TRAPPER_REPEAT 1000 +#define LOCKBLOB_SPEED 500 +#define LOCKBLOB_DOT 0.85f // max angle = acos( LOCKBLOB_DOT ) + +#define OVERMIND_BP 0 +#define OVERMIND_HEALTH ABHM(1000) +#define OVERMIND_REGEN 50 +#define OVERMIND_SPLASHDAMAGE 100 +#define OVERMIND_SPLASHRADIUS 300 +#define OVERMIND_CREEPSIZE 120 +#define OVERMIND_ATTACK_RANGE 150.0f +#define OVERMIND_ATTACK_REPEAT 1000 + +#define HOVEL_BP 80 +#define HOVEL_HEALTH ABHM(750) +#define HOVEL_REGEN 150 +#define HOVEL_SPLASHDAMAGE 20 +#define HOVEL_SPLASHRADIUS 200 +#define HOVEL_CREEPSIZE 120 + +#define OBANK_BP 80 +#define OBANK_HEALTH ABHM(100) +#define OBANK_REGEN 10 +#define OBANK_SPLASHDAMAGE 20 +#define OBANK_SPLASHRADIUS 100 +#define OBANK_CREEPSIZE 120 + + + +/* + * ALIEN misc + * + * ALIENSENSE_RANGE - the distance alien sense is useful for + * + */ + +#define ALIENSENSE_RANGE 1000.0f + + + +/* + * HUMAN weapons + * + * _REPEAT - time between firings + * _RELOAD - time needed to reload + * _PRICE - amount in credits weapon costs + * + * HUMAN_WDMG_MODIFIER - overall damage modifier for coarse tuning + * + */ + +#define HUMAN_WDMG_MODIFIER 1.0f +#define HDM(d) ((int)((float)d*HUMAN_WDMG_MODIFIER)) + +#define RIFLE_CLIPSIZE 30 +#define RIFLE_SPAWNCLIPS 3 +#define RIFLE_MAXCLIPS 3 +#define RIFLE_REPEAT 100 +#define RIFLE_RELOAD 2000 +#define RIFLE_PRICE 100 +#define RIFLE_SPREAD 200 +#define RIFLE_DMG HDM(7) + +#define CHAINGUN_BULLETS 300 +#define CHAINGUN_REPEAT 50 +#define CHAINGUN_PRICE 200 +#define CHAINGUN_SPREAD 1200 +#define CHAINGUN_DMG HDM(14) + +#define FLAMER_GAS 400 +#define FLAMER_REPEAT 150 +#define FLAMER_PRICE 300 +#define FLAMER_DMG HDM(25) +#define FLAMER_RADIUS 50 +#define FLAMER_LIFETIME 1000 +#define FLAMER_SPEED 200.0f +#define FLAMER_LAG 0.5f //the amount of player velocity that is added to the fireball + +#define MDRIVER_CLIPSIZE 5 +#define MDRIVER_SPAWNCLIPS 2 +#define MDRIVER_MAXCLIPS 3 +#define MDRIVER_PRICE 300 +#define MDRIVER_DMG HDM(50) +#define MDRIVER_REPEAT 1000 +#define MDRIVER_RELOAD 2000 + +#define PRIFLE_CLIPS 50 +#define PRIFLE_SPAWNCLIPS 3 +#define PRIFLE_MAXCLIPS 3 +#define PRIFLE_PRICE 250 +#define PRIFLE_REPEAT 50 +#define PRIFLE_RELOAD 2000 +#define PRIFLE_DMG HDM(20) +#define PRIFLE_SPEED 1500 + +#define LCANON_PRICE 400 +#define LCANON_AMMO 30 +#define LCANON_REPEAT 500 +#define LCANON_CHARGEREPEAT 1000 +#define LCANON_RELOAD 2000 +#define LCANON_DAMAGE HDM(200) +#define LCANON_SECONDARY_DAMAGE 20 +#define LCANON_SPEED 250 +#define LCANON_CHARGE_TIME 2000 + +#define LASGUN_PRICE 200 +#define LASGUN_AMMO 300 +#define LASGUN_REPEAT 100 +#define LASGUN_RELOAD 2000 +#define LASGUN_DAMAGE HDM(10) + +#define PAINSAW_PRICE 100 +#define PAINSAW_REPEAT 75 +#define PAINSAW_DAMAGE HDM(5) +#define PAINSAW_RANGE 32 + +#define HBUILD_PRICE 100 +#define HBUILD_REPEAT 1000 +#define HBUILD_DELAY 10000 + +#define HBUILD2_PRICE 200 +#define HBUILD2_REPEAT 1000 +#define HBUILD2_DELAY 5000 + + + +/* + * HUMAN upgrades + */ + +#define CHESTARMOUR_PRICE 75 + +#define LIMBARMOUR_PRICE 50 + +#define HELMET_PRICE 90 +#define HELMET_RANGE 1000.0f + +#define ANTITOXIN_PRICE 20 + +#define BATTPACK_PRICE 100 +#define BATTPACK_MODIFIER 2.0f //modifier for extra energy storage available + +#define JETPACK_PRICE 120 +#define JETPACK_FLOAT_SPEED 48.0f //up movement speed +#define JETPACK_SINK_SPEED 96.0f //down movement speed + +#define BSUIT_PRICE 200 + +#define MGCLIP_PRICE 10 + +#define CGAMMO_PRICE 10 + +#define GAS_PRICE 10 + + + +/* + * HUMAN buildables + * + * _BP - build points required for this buildable + * _SPLASHDAMGE - the amount of damage caused by this buildable when it blows up + * _SPLASHRADIUS - the radius around which it does this damage + * + * REACTOR_BASESIZE - the maximum distance a buildable can be from an reactor + * REPEATER_BASESIZE - the maximum distance a buildable can be from a repeater + * HUMAN_BHLTH_MODIFIER - overall health modifier for coarse tuning + * + */ + +#define HUMAN_BHLTH_MODIFIER 1.0f +#define HBHM(h) ((int)((float)h*HUMAN_BHLTH_MODIFIER)) + +#define REACTOR_BASESIZE 1000 +#define REPEATER_BASESIZE 500 +#define HUMAN_DETONATION_DELAY 5000 + +#define HSPAWN_BP 100 +#define HSPAWN_HEALTH HBHM(500) +#define HSPAWN_SPLASHDAMAGE 50 +#define HSPAWN_SPLASHRADIUS 100 + +#define MEDISTAT_BP 80 +#define MEDISTAT_HEALTH HBHM(200) +#define MEDISTAT_SPLASHDAMAGE 50 +#define MEDISTAT_SPLASHRADIUS 100 +#define MAX_MEDISTAT_CLIENTS 1 + +#define ADVMEDISTAT_BP 120 +#define ADVMEDISTAT_HEALTH HBHM(300) +#define ADVMEDISTAT_SPLASHDAMAGE 75 +#define ADVMEDISTAT_SPLASHRADIUS 100 +#define MAX_ADVMEDISTAT_CLIENTS 3 + +#define MGTURRET_BP 80 +#define MGTURRET_HEALTH HBHM(100) +#define MGTURRET_SPLASHDAMAGE 50 +#define MGTURRET_SPLASHRADIUS 100 +#define MGTURRET_ANGULARSPEED 20 //degrees/think ~= 200deg/sec +#define MGTURRET_ACCURACYTOLERANCE MGTURRET_ANGULARSPEED / 2 //angular difference for turret to fire +#define MGTURRET_VERTICALCAP 30 // +/- maximum pitch +#define MGTURRET_REPEAT 50 +#define MGTURRET_RANGE 300 + +#define TESLAGEN_BP 100 +#define TESLAGEN_HEALTH HBHM(200) +#define TESLAGEN_SPLASHDAMAGE 50 +#define TESLAGEN_SPLASHRADIUS 100 +#define TESLAGEN_REPEAT 150 +#define TESLAGEN_RANGE 1500 + +#define DC_BP 80 +#define DC_HEALTH HBHM(150) +#define DC_SPLASHDAMAGE 50 +#define DC_SPLASHRADIUS 100 + +#define BANK_BP 80 +#define BANK_HEALTH HBHM(100) +#define BANK_SPLASHDAMAGE 50 +#define BANK_SPLASHRADIUS 100 + +#define ARMOURY_BP 100 +#define ARMOURY_HEALTH HBHM(175) +#define ARMOURY_SPLASHDAMAGE 50 +#define ARMOURY_SPLASHRADIUS 100 + +#define REACTOR_BP 0 +#define REACTOR_HEALTH HBHM(1000) +#define REACTOR_SPLASHDAMAGE 200 +#define REACTOR_SPLASHRADIUS 300 + +#define REPEATER_BP 100 +#define REPEATER_HEALTH HBHM(200) +#define REPEATER_SPLASHDAMAGE 50 +#define REPEATER_SPLASHRADIUS 100 + +#define ENERGY_REFIL_TIME 500 //1/2 second between every clip refil + +#define FLOATMINE_BP 50 +#define FLOATMINE_HEALTH HBHM(10) +#define FLOATMINE_SPLASHDAMAGE 250 +#define FLOATMINE_SPLASHRADIUS 500 + +/* + * HUMAN misc + */ + +#define HUMAN_JOG_MODIFIER 0.8f +#define HUMAN_BACK_MODIFIER 0.5f +#define HUMAN_SIDE_MODIFIER 0.75f |