From 52f4c5c836ff92587dbb6fe015c2a0fa25d33403 Mon Sep 17 00:00:00 2001 From: div0 Date: Sun, 31 May 2009 19:06:22 +0000 Subject: [PATCH] new cvars: g_weaponspeedfactor, g_weapondamagefactor (mimicking UT's "game style" setting) git-svn-id: svn://svn.icculus.org/nexuiz/trunk@6833 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/defaultNexuiz.cfg | 5 ++- data/qcsrc/server/cl_weaponsystem.qc | 45 +++++++++++++++++---------- data/qcsrc/server/constants.qh | 2 +- data/qcsrc/server/g_damage.qc | 3 ++ data/qcsrc/server/miscfunctions.qc | 5 +++ data/qcsrc/server/w_hlac.qc | 4 +-- data/qcsrc/server/w_rocketlauncher.qc | 4 +-- data/qcsrc/server/w_uzi.qc | 2 +- 8 files changed, 45 insertions(+), 25 deletions(-) diff --git a/data/defaultNexuiz.cfg b/data/defaultNexuiz.cfg index b599659f9..18a9ce546 100644 --- a/data/defaultNexuiz.cfg +++ b/data/defaultNexuiz.cfg @@ -24,7 +24,7 @@ alias if_dedicated "_detect_dedicated_$qport $*" seta g_configversion 0 "Configuration file version (used to upgrade settings) 0: first run, or previous start was <2.4.1 Later, it's overridden by config.cfg, version ranges are defined in config_update.cfg" // default.cfg versioning (update using update-cvarcount.sh, run that every time after adding a new cvar) -set cvar_check_default e6c4e90556771011ab2d85a3f0b5d4d6 +set cvar_check_default c120fa8ce7b9f4b1b86b922d65249573 // Nexuiz version (formatted for machines) // used to determine if a client version is compatible @@ -1528,6 +1528,9 @@ set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen set g_balance_pause_fuel_rot 5 set g_balance_pause_fuel_rot_spawn 10 +set g_weaponspeedfactor 1 "weapon fire rate multiplier" +set g_weapondamagefactor 1 "weapon damage multiplier" + set cl_effects_lightningarc_simple 0 set cl_effects_lightningarc_segmentlength 64 set cl_effects_lightningarc_drift_start 0.45 diff --git a/data/qcsrc/server/cl_weaponsystem.qc b/data/qcsrc/server/cl_weaponsystem.qc index e75b1746f..1a43c38ed 100644 --- a/data/qcsrc/server/cl_weaponsystem.qc +++ b/data/qcsrc/server/cl_weaponsystem.qc @@ -7,6 +7,29 @@ =========================================================================== */ +float W_WeaponSpeedFactor() +{ + float t; + t = 1.0 / g_weaponspeedfactor; + + if(g_runematch) + { + if(self.runes & RUNE_SPEED) + { + if(self.runes & CURSE_SLOW) + t = t * cvar("g_balance_rune_speed_combo_atkrate"); + else + t = t * cvar("g_balance_rune_speed_atkrate"); + } + else if(self.runes & CURSE_SLOW) + { + t = t * cvar("g_balance_curse_slow_atkrate"); + } + } + + return t; +} + void W_SwitchWeapon_Force(entity e, float w) { e.cnt = e.switchweapon; @@ -602,7 +625,7 @@ void CL_Weaponentity_Think() f = 0; if (self.state == WS_RAISE) { - f = (self.owner.weapon_nextthink - time) / cvar("g_balance_weaponswitchdelay"); + f = (self.owner.weapon_nextthink - time) * g_weaponspeedfactor / cvar("g_balance_weaponswitchdelay"); self.angles_x = -90 * f * f; if (qcweaponanimation) { @@ -612,7 +635,7 @@ void CL_Weaponentity_Think() } else if (self.state == WS_DROP) { - f = 1 - (self.owner.weapon_nextthink - time) / cvar("g_balance_weaponswitchdelay"); + f = 1 - (self.owner.weapon_nextthink - time) * g_weaponspeedfactor / cvar("g_balance_weaponswitchdelay"); self.angles_x = -90 * f * f; if (qcweaponanimation) { @@ -991,7 +1014,7 @@ float weapon_prepareattack(float secondary, float attacktime) ATTACK_FINISHED(self) = time; //dprint("resetting attack finished to ", ftos(time), "\n"); } - ATTACK_FINISHED(self) = ATTACK_FINISHED(self) + attacktime; + ATTACK_FINISHED(self) = ATTACK_FINISHED(self) + attacktime * W_WeaponSpeedFactor(); } self.bulletcounter += 1; //dprint("attack finished ", ftos(ATTACK_FINISHED(self)), "\n"); @@ -1094,6 +1117,7 @@ void weapon_thinkf(float fr, float t, void() func) a = self.weaponentity.anim_fire2; else if (fr == WFRAME_RELOAD) a = self.weaponentity.anim_reload; + a_z *= g_weaponspeedfactor; setanim(self.weaponentity, a, restartanim == FALSE, restartanim, restartanim); } @@ -1112,20 +1136,7 @@ void weapon_thinkf(float fr, float t, void() func) backtrace("Tried to override initial weapon think function - should this really happen?"); } - if(g_runematch) - { - if(self.runes & RUNE_SPEED) - { - if(self.runes & CURSE_SLOW) - t = t * cvar("g_balance_rune_speed_combo_atkrate"); - else - t = t * cvar("g_balance_rune_speed_atkrate"); - } - else if(self.runes & CURSE_SLOW) - { - t = t * cvar("g_balance_curse_slow_atkrate"); - } - } + t *= W_WeaponSpeedFactor(); // VorteX: haste can be added here if (self.weapon_think == w_ready) diff --git a/data/qcsrc/server/constants.qh b/data/qcsrc/server/constants.qh index e5c9194fa..43f5381d1 100644 --- a/data/qcsrc/server/constants.qh +++ b/data/qcsrc/server/constants.qh @@ -1,4 +1,4 @@ -string CVAR_CHECK_DEFAULT = "e6c4e90556771011ab2d85a3f0b5d4d6"; +string CVAR_CHECK_DEFAULT = "c120fa8ce7b9f4b1b86b922d65249573"; string CVAR_CHECK_WEAPONS = "2f93eb8481f44bb2ff744af86a75eccf"; float FALSE = 0; diff --git a/data/qcsrc/server/g_damage.qc b/data/qcsrc/server/g_damage.qc index 73a485763..1b3f97775 100644 --- a/data/qcsrc/server/g_damage.qc +++ b/data/qcsrc/server/g_damage.qc @@ -702,6 +702,9 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float } } + if not(DEATH_ISSPECIAL(deathtype)) + damage *= g_weapondamagefactor; + // apply strength multiplier if ((attacker.items & IT_STRENGTH) && !g_minstagib) { diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index cdd609513..e742fb447 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -691,6 +691,8 @@ float g_pickup_healthmega; float g_pickup_healthmega_max; float g_weaponarena; string g_weaponarena_list; +float g_weaponspeedfactor; +float g_weapondamagefactor; float start_weapons; float start_items; @@ -1044,6 +1046,9 @@ void readlevelcvars(void) if(g_nixnex) g_weaponarena = 0; g_weaponarena = 0; + g_weaponspeedfactor = cvar("g_weaponspeedfactor"); + g_weapondamagefactor = cvar("g_weapondamagefactor"); + g_pickup_shells = cvar("g_pickup_shells"); g_pickup_shells_max = cvar("g_pickup_shells_max"); g_pickup_nails = cvar("g_pickup_nails"); diff --git a/data/qcsrc/server/w_hlac.qc b/data/qcsrc/server/w_hlac.qc index 881dfd04d..aa21e8c18 100644 --- a/data/qcsrc/server/w_hlac.qc +++ b/data/qcsrc/server/w_hlac.qc @@ -135,8 +135,6 @@ void W_HLAC_Attack2 (void) self.punchangle_x = random () - 0.5; self.punchangle_y = random () - 0.5; } - - // ATTACK_FINISHED(self) = time + cvar("g_balance_hlac_secondary_refire"); } @@ -158,7 +156,7 @@ void HLAC_fire1_02() return; } - ATTACK_FINISHED(self) = time + cvar("g_balance_hlac_primary_refire"); + ATTACK_FINISHED(self) = time + cvar("g_balance_hlac_primary_refire") * W_WeaponSpeedFactor(); W_HLAC_Attack(); self.HLAC_bulletcounter = self.HLAC_bulletcounter + 1; weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hlac_primary_refire"), HLAC_fire1_02); diff --git a/data/qcsrc/server/w_rocketlauncher.qc b/data/qcsrc/server/w_rocketlauncher.qc index 85768570d..880a915c5 100644 --- a/data/qcsrc/server/w_rocketlauncher.qc +++ b/data/qcsrc/server/w_rocketlauncher.qc @@ -26,7 +26,7 @@ void W_Rocket_Explode (void) self.owner.switchweapon = w_getbestweapon(self.owner); } if(g_laserguided_missile) - ATTACK_FINISHED(self.owner) = time + cvar("g_balance_rocketlauncher_refire"); + ATTACK_FINISHED(self.owner) = time + cvar("g_balance_rocketlauncher_refire") * W_WeaponSpeedFactor(); } remove (self); } @@ -194,7 +194,7 @@ void W_Rocket_Think (void) self.velocity = newdir * velspeed; // make me fly in the new direction at my flight speed self.angles = vectoangles(self.velocity); // turn model in the new flight direction - ATTACK_FINISHED(self.owner) = time + 0.2; + ATTACK_FINISHED(self.owner) = time + 0.2 * W_WeaponSpeedFactor(); } } else diff --git a/data/qcsrc/server/w_uzi.qc b/data/qcsrc/server/w_uzi.qc index 1c8695a24..89ca61b12 100644 --- a/data/qcsrc/server/w_uzi.qc +++ b/data/qcsrc/server/w_uzi.qc @@ -30,7 +30,7 @@ void W_Uzi_Attack (float deathtype) } // this attack_finished just enforces a cooldown at the end of a burst - ATTACK_FINISHED(self) = time + cvar("g_balance_uzi_first_refire"); + ATTACK_FINISHED(self) = time + cvar("g_balance_uzi_first_refire") * W_WeaponSpeedFactor(); if (self.uzi_bulletcounter == 1) fireBallisticBullet(w_shotorg, w_shotdir, cvar("g_balance_uzi_first_spread"), cvar("g_balance_uzi_speed"), 5, cvar("g_balance_uzi_first_damage"), 0, cvar("g_balance_uzi_first_force"), deathtype, 0, 1, cvar("g_balance_uzi_bulletconstant")); -- 2.39.2