X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fw_nex.qc;h=64c9c385b7890aff7f92fe04c94d0ddd023d95ac;hp=e6b16d193e5f517babe1eb8fbe2c0a4f414a4c69;hb=99e0de6d197aae596bbd1a1e2154f9a49029a63b;hpb=c2aaf35ba7cfc2267e90a7b272818a95f2c8a653 diff --git a/qcsrc/server/w_nex.qc b/qcsrc/server/w_nex.qc index e6b16d193e..64c9c385b7 100644 --- a/qcsrc/server/w_nex.qc +++ b/qcsrc/server/w_nex.qc @@ -18,7 +18,7 @@ void SendCSQCNexBeamParticle() { void W_Nex_Attack (float issecondary) { - float mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, myammo, myvel; + float mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, myammo; if(issecondary) { mydmg = cvar("g_balance_nex_secondary_damage"); @@ -43,14 +43,12 @@ void W_Nex_Attack (float issecondary) float flying; flying = IsFlying(self); // do this BEFORE to make the trace values from FireRailgunBullet last - if(cvar("g_balance_nex_velocitydependent")) // player velocity dependent damage and force + if(cvar("g_balance_nex_charge")) { - myvel = vlen(self.velocity); - myvel = bound(cvar("g_balance_nex_velocitydependent_minspeed"), myvel, cvar("g_balance_nex_velocitydependent_maxspeed")); - - // TODO: make it more obvious (through effects, indicator on weapon) that damage increases when speed increases - mydmg *= myvel / cvar("g_balance_nex_velocitydependent_maxspeed"); - myforce *= myvel / cvar("g_balance_nex_velocitydependent_maxspeed"); + mydmg *= self.nex_charge; + myforce *= self.nex_charge; + //print("^1Damage: ^7", ftos(mydmg), "\n"); + self.nex_charge *= cvar("g_balance_nex_charge_shot_multiplier"); // do this AFTER setting mydmg/myforce } W_SetupShot (self, TRUE, 5, "weapons/nexfire.wav", mydmg); @@ -76,6 +74,7 @@ void spawnfunc_weapon_nex (void); // defined in t_items.qc float w_nex(float req) { + float dt; if (req == WR_AIM) { self.BUTTON_ATCK = bot_aim(1000000, 0, 1, FALSE); @@ -83,6 +82,8 @@ float w_nex(float req) } else if (req == WR_THINK) { + if(cvar("g_balance_nex_charge") && self.nex_charge < cvar("g_balance_nex_charge_limit")) + self.nex_charge = min(1, self.nex_charge + cvar("g_balance_nex_charge_rate") * frametime / W_TICSPERFRAME); if (self.BUTTON_ATCK) { if (weapon_prepareattack(0, cvar("g_balance_nex_primary_refire"))) @@ -93,7 +94,28 @@ float w_nex(float req) } if (self.BUTTON_ATCK2) { - if(cvar("g_balance_nex_secondary")) + if(cvar("g_balance_nex_secondary_charge")) + { + dt = frametime / W_TICSPERFRAME; + if(self.nex_charge < 1) + { + dt = min(dt, (1 - self.nex_charge) / cvar("g_balance_nex_secondary_charge_rate")); + if not(self.items & IT_UNLIMITED_WEAPON_AMMO) + { + if(cvar("g_balance_nex_secondary_ammo")) + { + dt = min(dt, (self.ammo_cells - cvar("g_balance_nex_primary_ammo")) / cvar("g_balance_nex_secondary_ammo")); + dt = max(0, dt); + if(dt > 0) + { + self.ammo_cells = max(cvar("g_balance_nex_secondary_ammo"), self.ammo_cells - cvar("g_balance_nex_secondary_ammo") * dt); + } + } + } + self.nex_charge += dt * cvar("g_balance_nex_secondary_charge_rate"); + } + } + else if(cvar("g_balance_nex_secondary")) { if (weapon_prepareattack(0, cvar("g_balance_nex_secondary_refire"))) { @@ -119,7 +141,11 @@ float w_nex(float req) else if (req == WR_CHECKAMMO1) return self.ammo_cells >= cvar("g_balance_nex_primary_ammo"); else if (req == WR_CHECKAMMO2) + { + if(cvar("g_balance_nex_secondary_charge")) + return self.ammo_cells >= cvar("g_balance_nex_primary_ammo"); return self.ammo_cells >= cvar("g_balance_nex_secondary_ammo"); + } return TRUE; }; #endif