diff options
-rw-r--r-- | src/game/g_admin.c | 2 | ||||
-rw-r--r-- | src/game/g_combat.c | 39 | ||||
-rw-r--r-- | src/game/g_csw.h | 54 | ||||
-rw-r--r-- | src/game/g_local.h | 3 | ||||
-rw-r--r-- | src/game/g_main.c | 9 | ||||
-rw-r--r-- | src/game/g_weapon.c | 11 | ||||
-rw-r--r-- | src/game/tremulous.h | 3 |
7 files changed, 80 insertions, 41 deletions
diff --git a/src/game/g_admin.c b/src/game/g_admin.c index c407788..a6f5f78 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -4387,7 +4387,7 @@ qboolean G_admin_stats( gentity_t *ent ) qboolean header = qfalse; const static char *cswNames[ ] = { -#define CSW(a,b) b +#define CSW(a,b,c) b #include "g_csw.h" #undef CSW }; diff --git a/src/game/g_combat.c b/src/game/g_combat.c index 7713d2a..337ebf1 100644 --- a/src/game/g_combat.c +++ b/src/game/g_combat.c @@ -1138,6 +1138,7 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, vec3_t dir, vec3_t point, int damage, int dflags, int mod ) { gclient_t *client; + int damage_orig = damage; int take; int asave = 0; int knockback; @@ -1432,7 +1433,14 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, targ->credits[ attacker->client->ps.clientNum ] += take; } - G_CombatStats_HitMOD( attacker, targ, mod, take ); + // special cases... + if( mod == MOD_LEVEL2_CLAW && damage_orig == LEVEL2_CLAW_UPG_DMG ) + G_CombatStats_Hit( attacker, targ, CSW_LEVEL2_UPG, take ); + else if( ( mod == MOD_LCANNON || mod == MOD_LCANNON_SPLASH ) && + inflictor->s.generic1 == WPM_SECONDARY ) + G_CombatStats_Hit( attacker, targ, CSW_LCANNON_ALT, take ); + else + G_CombatStats_HitMOD( attacker, targ, mod, take ); if( targ->health <= 0 ) { @@ -1782,7 +1790,7 @@ const static combatStatsWeapon_t modToCsw[ ] = const static char *cswStrings[ ] = { -#define CSW(a,b) #a +#define CSW(a,b,c) #a #include "g_csw.h" #undef CSW }; @@ -1970,6 +1978,33 @@ void G_CalculateCombatRanks( void ) /* ================ +G_LogCombatSettings + +Log settings of all combat stats weapons +================ +*/ +void G_LogCombatSettings( void ) +{ + int i; + char buffer[ 4096 ], *p = buffer; + static const int cswDamages[ ] = + { +#define CSW(a,b,c) (c) +#include "g_csw.h" +#undef CSW + }; + + for( i = 0; i < CSW_MAX; i++ ) + { + Com_sprintf( p, 4096 - ( p - buffer ), " %s %i", cswStrings[ i ], cswDamages[ i ] ); + while( *p ) p++; + } + + G_LogPrintf( "CombatSettings:%s\n", buffer ); +} + +/* +================ G_LogCombatStats Write combat stats of a player to the game log diff --git a/src/game/g_csw.h b/src/game/g_csw.h index 4f3cdf2..e37313b 100644 --- a/src/game/g_csw.h +++ b/src/game/g_csw.h @@ -1,30 +1,32 @@ -CSW( CSW_UNKNOWN, NULL ), +CSW( CSW_UNKNOWN, NULL, 0 ), -CSW( CSW_BLASTER, "Blaster" ), -CSW( CSW_MACHINEGUN, "Rifle" ), -CSW( CSW_PAINSAW, "Pain Saw" ), -CSW( CSW_PAINSAW_ALT, "Pain Saw Blade" ), -CSW( CSW_SHOTGUN, "Shotgun" ), -CSW( CSW_LASGUN, "Las Gun" ), -CSW( CSW_MDRIVER, "Mass Driver" ), -CSW( CSW_CHAINGUN, "Chaingun" ), -CSW( CSW_PRIFLE, "Pulse Rifle" ), -CSW( CSW_FLAMER, "Flame Thrower" ), -CSW( CSW_LIGHTNING, "Lightning Gun" ), -CSW( CSW_LCANNON, "Lucifer Cannon" ), -CSW( CSW_ROCKETL, "Rocket Launcher" ), -CSW( CSW_GRENADE, "Grenade" ), +CSW( CSW_BLASTER, "Blaster", BLASTER_DMG ), +CSW( CSW_MACHINEGUN, "Rifle", RIFLE_DMG ), +CSW( CSW_PAINSAW, "Pain Saw", PAINSAW_DAMAGE ), +CSW( CSW_PAINSAW_ALT, "Pain Saw Blade", PAINSAW_DAMAGE2 ), +CSW( CSW_SHOTGUN, "Shotgun", SHOTGUN_DMG * SHOTGUN_PELLETS ), +CSW( CSW_LASGUN, "Las Gun", LASGUN_DAMAGE ), +CSW( CSW_MDRIVER, "Mass Driver", MDRIVER_DMG ), +CSW( CSW_CHAINGUN, "Chaingun", CHAINGUN_DMG ), +CSW( CSW_PRIFLE, "Pulse Rifle", PRIFLE_DMG ), +CSW( CSW_FLAMER, "Flame Thrower", FLAMER_DMG ), +CSW( CSW_LIGHTNING, "Lightning Gun", LIGHTNING_DAMAGE ), +CSW( CSW_LCANNON, "Lucifer Cannon", LCANNON_DAMAGE ), +CSW( CSW_LCANNON_ALT, "Lucifer Alt.", LCANNON_SECONDARY_DAMAGE ), +CSW( CSW_ROCKETL, "Rocket Launcher", ROCKETL_DAMAGE ), +CSW( CSW_GRENADE, "Grenade", GRENADE_DAMAGE ), -CSW( CSW_ABUILDER, "Granger" ), -CSW( CSW_ABUILDER_ALT, "Granger Spit" ), -CSW( CSW_LEVEL1, "Basilisk" ), -CSW( CSW_LEVEL2, "Marauder" ), -CSW( CSW_LEVEL2_ALT, "Marauder Zap" ), -CSW( CSW_LEVEL3, "Dragoon" ), -CSW( CSW_LEVEL3_ALT, "Dragoon Barb" ), -CSW( CSW_LEVEL4, "Tyrant" ), -CSW( CSW_LEVEL4_ALT, "Tyrant Flames" ), -CSW( CSW_LEVEL5, "Hummel" ), -CSW( CSW_LEVEL5_ALT, "Hummel Prickles" ) +CSW( CSW_ABUILDER, "Granger", ABUILDER_CLAW_DMG ), +CSW( CSW_ABUILDER_ALT, "Granger Spit", ABUILDER_BLOB_DMG ), +CSW( CSW_LEVEL1, "Basilisk", LEVEL1_CLAW_DMG ), +CSW( CSW_LEVEL2, "Marauder", LEVEL2_CLAW_DMG ), +CSW( CSW_LEVEL2_UPG, "Adv. Marauder", LEVEL2_CLAW_UPG_DMG ), +CSW( CSW_LEVEL2_ALT, "Marauder Zap", LEVEL2_AREAZAP_DMG ), +CSW( CSW_LEVEL3, "Dragoon", LEVEL3_CLAW_DMG ), +CSW( CSW_LEVEL3_ALT, "Dragoon Barb", LEVEL3_BOUNCEBALL_DMG ), +CSW( CSW_LEVEL4, "Tyrant", LEVEL4_CLAW_DMG ), +CSW( CSW_LEVEL4_ALT, "Tyrant Flames", 50 ), +CSW( CSW_LEVEL5, "Hummel", LEVEL5_CLAW_DMG ), +CSW( CSW_LEVEL5_ALT, "Hummel Prickles", LEVEL5_PRICKLES_DMG ) #define CSW_MAX_NAME_LEN 15 diff --git a/src/game/g_local.h b/src/game/g_local.h index a98d818..18ff14b 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -320,7 +320,7 @@ typedef enum typedef enum { -#define CSW(a,b) a +#define CSW(a,b,c) a #include "g_csw.h" #undef CSW , @@ -984,6 +984,7 @@ void G_InitDamageLocations( void ); #define DAMAGE_NO_PROTECTION 0x00000008 // armor, shields, invulnerability, and godmode have no effect #define DAMAGE_NO_LOCDAMAGE 0x00000010 // do not apply locational damage +void G_LogCombatSettings( void ); void G_CombatStats_Fire( gentity_t *ent, combatStatsWeapon_t weapon, int damage ); void G_CombatStats_FireMOD( gentity_t *ent, meansOfDeath_t mod, int damage ); void G_CombatStats_Hit( gentity_t *ent, gentity_t *hit, combatStatsWeapon_t weapon, int damage ); diff --git a/src/game/g_main.c b/src/game/g_main.c index f31e7ec..28dfb33 100644 --- a/src/game/g_main.c +++ b/src/game/g_main.c @@ -206,9 +206,6 @@ vmCvar_t g_DretchBuildingDamage; vmCvar_t g_OwnTeamBPFactor; vmCvar_t g_EnemyTeamBPFactor; -vmCvar_t g_lightningDamage; -vmCvar_t g_lightningDifficulty; - // copy cvars that can be set in worldspawn so they can be restored later static char cv_gravity[ MAX_CVAR_VALUE_STRING ]; static char cv_humanMaxStage[ MAX_CVAR_VALUE_STRING ]; @@ -379,10 +376,7 @@ static cvarTable_t gameCvarTable[ ] = { &g_DretchTurretDamage, "g_DretchTurretDamage", "1", CVAR_ARCHIVE, 0, qfalse }, { &g_DretchBuildingDamage, "g_DretchBuildingDamage", "0.5", CVAR_ARCHIVE, 0, qfalse }, { &g_OwnTeamBPFactor, "g_OwnTeamBPFactor", "1.0", CVAR_ARCHIVE, 0, qfalse }, - { &g_EnemyTeamBPFactor, "g_EnemyTeamBPFactor", "0.0", CVAR_ARCHIVE, 0, qfalse }, - - { &g_lightningDamage, "g_lightningDamage", "140", 0, 0, qfalse }, - { &g_lightningDifficulty, "g_lightningDifficulty", "1", 0, 0, qfalse } + { &g_EnemyTeamBPFactor, "g_EnemyTeamBPFactor", "0.0", CVAR_ARCHIVE, 0, qfalse } }; static int gameCvarTableSize = sizeof( gameCvarTable ) / sizeof( gameCvarTable[ 0 ] ); void G_InitGame( int levelTime, int randomSeed, int restart ); @@ -749,6 +743,7 @@ void G_InitGame( int levelTime, int randomSeed, int restart ) level.weakSuddenDeathBeginTime = g_weakSuddenDeathTime.integer * 60000; level.nextArmageddonKillTime = (g_suddenDeathTime.integer+g_armageddonInitialTimeStep.integer) * 60000; level.nextCommandTime = g_TimerPeriod.integer; + G_LogCombatSettings( ); G_Printf( "-----------------------------------\n" ); G_Printf( "EDGE LOADED SUCCESSFULLY\n" ); // So the server counts the spawns without a client attached diff --git a/src/game/g_weapon.c b/src/game/g_weapon.c index 2a87754..357847a 100644 --- a/src/game/g_weapon.c +++ b/src/game/g_weapon.c @@ -300,7 +300,10 @@ void meleeAttack( gentity_t *ent, float range, float width, float height, trace_t tr; gentity_t *traceEnt; - G_CombatStats_FireMOD( ent, mod, damage ); + if( mod == MOD_LEVEL2_CLAW && damage == LEVEL2_CLAW_UPG_DMG ) + G_CombatStats_Fire( ent, CSW_LEVEL2_UPG, damage ); + else + G_CombatStats_FireMOD( ent, mod, damage ); G_WideTrace( &tr, ent, range, width, height, &traceEnt ); if( traceEnt == NULL || !traceEnt->takedamage ) @@ -817,7 +820,7 @@ void LCChargeFire( gentity_t *ent, qboolean secondary ) { if( secondary && ent->client->ps.stats[ STAT_MISC ] <= 0 ) { - G_CombatStats_Fire( ent, CSW_LCANNON, LCANNON_SECONDARY_DAMAGE ); + G_CombatStats_Fire( ent, CSW_LCANNON_ALT, LCANNON_SECONDARY_DAMAGE ); fire_luciferCannon( ent, muzzle, forward, LCANNON_SECONDARY_DAMAGE, LCANNON_SECONDARY_RADIUS, LCANNON_SECONDARY_SPEED ); } @@ -887,7 +890,7 @@ float G_LightningAccuracy( const vec3_t ws_origin, const vec3_t ws_dir, if( chord <= 0.0f ) return 0.0f; - chord = pow( chord, g_lightningDifficulty.value * 0.5f ); + chord = pow( chord, LIGHTNING_DIFFICULTY * 0.5f ); return chord; } @@ -900,7 +903,7 @@ void lightningGunFire( gentity_t *ent ) gentity_t *target; int damage; - damage = g_lightningDamage.value / ( 1000.0f / LIGHTNING_REPEAT ); + damage = LIGHTNING_DAMAGE; G_CombatStats_Fire( ent, CSW_LIGHTNING, damage ); VectorMA( muzzle, LIGHTNING_RANGE, forward, end ); diff --git a/src/game/tremulous.h b/src/game/tremulous.h index b3b9b92..9e925c3 100644 --- a/src/game/tremulous.h +++ b/src/game/tremulous.h @@ -517,7 +517,10 @@ TREMULOUS EDGE MOD SRC FILE #define LIGHTNING_PRICE 500 #define LIGHTNING_AMMO 300 #define LIGHTNING_K_SCALE 1 +#define LIGHTNING_DPS 140 +#define LIGHTNING_DIFFICULTY 2 #define LIGHTNING_REPEAT 50 // keep it as low as possible +#define LIGHTNING_DAMAGE ( LIGHTNING_DPS * LIGHTNING_REPEAT / 1000 ) #define LIGHTNING_RANGE 450 #define LCANNON_PRICE 600 |