From: FruitieX Date: Wed, 28 Jul 2010 21:03:28 +0000 (+0300) Subject: nex secondary = negative push (very experimental!) X-Git-Tag: xonotic-v0.1.0preview~395 X-Git-Url: https://de.git.xonotic.org/?a=commitdiff_plain;h=8161c64cbe75f802b0bd984539c0ff32d9a4f74f;p=xonotic%2Fxonotic-data.pk3dir.git nex secondary = negative push (very experimental!) --- diff --git a/balance25.cfg b/balance25.cfg index c3a3a6205..0250978c3 100644 --- a/balance25.cfg +++ b/balance25.cfg @@ -383,15 +383,26 @@ set g_balance_crylink_secondary_line_lifetime 2 // range: 35000 full, fades to 7 set g_balance_crylink_secondary_line_fadetime 2 // }}} // {{{ nex -set g_balance_nex_damage 100 -set g_balance_nex_force 600 -set g_balance_nex_refire 1.5 -set g_balance_nex_animtime 0.3 -set g_balance_nex_ammo 5 -set g_balance_nex_damagefalloff_mindist 0 -set g_balance_nex_damagefalloff_maxdist 0 -set g_balance_nex_damagefalloff_halflife 0 -set g_balance_nex_damagefalloff_forcehalflife 0 +set g_balance_nex_primary_damage 100 +set g_balance_nex_primary_force 600 +set g_balance_nex_primary_refire 1.5 +set g_balance_nex_primary_animtime 0.3 +set g_balance_nex_primary_ammo 5 +set g_balance_nex_primary_damagefalloff_mindist 0 +set g_balance_nex_primary_damagefalloff_maxdist 0 +set g_balance_nex_primary_damagefalloff_halflife 0 +set g_balance_nex_primary_damagefalloff_forcehalflife 0 + +set g_balance_nex_secondary 0 +set g_balance_nex_secondary_damage 100 +set g_balance_nex_secondary_force 600 +set g_balance_nex_secondary_refire 1.5 +set g_balance_nex_secondary_animtime 0.3 +set g_balance_nex_secondary_ammo 5 +set g_balance_nex_secondary_damagefalloff_mindist 0 +set g_balance_nex_secondary_damagefalloff_maxdist 0 +set g_balance_nex_secondary_damagefalloff_halflife 0 +set g_balance_nex_secondary_damagefalloff_forcehalflife 0 // }}} // {{{ minstanex set g_balance_minstanex_refire 1 diff --git a/balanceNexSVN.cfg b/balanceNexSVN.cfg index d1596a1d7..0f8a8dc35 100644 --- a/balanceNexSVN.cfg +++ b/balanceNexSVN.cfg @@ -383,15 +383,26 @@ set g_balance_crylink_secondary_line_lifetime 2 // range: 35000 full, fades to 7 set g_balance_crylink_secondary_line_fadetime 2 // }}} // {{{ nex -set g_balance_nex_damage 90 -set g_balance_nex_force 200 -set g_balance_nex_refire 1.5 -set g_balance_nex_animtime 0.3 -set g_balance_nex_ammo 5 -set g_balance_nex_damagefalloff_mindist 1000 -set g_balance_nex_damagefalloff_maxdist 3000 -set g_balance_nex_damagefalloff_halflife 1500 -set g_balance_nex_damagefalloff_forcehalflife 1500 +set g_balance_nex_primary_damage 90 +set g_balance_nex_primary_force 200 +set g_balance_nex_primary_refire 1.5 +set g_balance_nex_primary_animtime 0.3 +set g_balance_nex_primary_ammo 5 +set g_balance_nex_primary_damagefalloff_mindist 1000 +set g_balance_nex_primary_damagefalloff_maxdist 3000 +set g_balance_nex_primary_damagefalloff_halflife 1500 +set g_balance_nex_primary_damagefalloff_forcehalflife 1500 + +set g_balance_nex_secondary 0 +set g_balance_nex_secondary_damage 90 +set g_balance_nex_secondary_force 200 +set g_balance_nex_secondary_refire 1.5 +set g_balance_nex_secondary_animtime 0.3 +set g_balance_nex_secondary_ammo 5 +set g_balance_nex_secondary_damagefalloff_mindist 1000 +set g_balance_nex_secondary_damagefalloff_maxdist 3000 +set g_balance_nex_secondary_damagefalloff_halflife 1500 +set g_balance_nex_secondary_damagefalloff_forcehalflife 1500 // }}} // {{{ minstanex set g_balance_minstanex_refire 1 diff --git a/balanceSamual.cfg b/balanceSamual.cfg index 292bb2105..e70157872 100644 --- a/balanceSamual.cfg +++ b/balanceSamual.cfg @@ -383,15 +383,26 @@ set g_balance_crylink_secondary_line_lifetime 2 // range: 35000 full, fades to 7 set g_balance_crylink_secondary_line_fadetime 2 // }}} // {{{ nex -set g_balance_nex_damage 90 -set g_balance_nex_force 300 -set g_balance_nex_refire 1.5 -set g_balance_nex_animtime 0.3 -set g_balance_nex_ammo 5 -set g_balance_nex_damagefalloff_mindist 1000 -set g_balance_nex_damagefalloff_maxdist 3000 -set g_balance_nex_damagefalloff_halflife 1500 -set g_balance_nex_damagefalloff_forcehalflife 1500 +set g_balance_nex_primary_damage 90 +set g_balance_nex_primary_force 300 +set g_balance_nex_primary_refire 1.5 +set g_balance_nex_primary_animtime 0.3 +set g_balance_nex_primary_ammo 5 +set g_balance_nex_primary_damagefalloff_mindist 1000 +set g_balance_nex_primary_damagefalloff_maxdist 3000 +set g_balance_nex_primary_damagefalloff_halflife 1500 +set g_balance_nex_primary_damagefalloff_forcehalflife 1500 + +set g_balance_nex_secondary 0 +set g_balance_nex_secondary_damage 90 +set g_balance_nex_secondary_force 300 +set g_balance_nex_secondary_refire 1.5 +set g_balance_nex_secondary_animtime 0.3 +set g_balance_nex_secondary_ammo 5 +set g_balance_nex_secondary_damagefalloff_mindist 1000 +set g_balance_nex_secondary_damagefalloff_maxdist 3000 +set g_balance_nex_secondary_damagefalloff_halflife 1500 +set g_balance_nex_secondary_damagefalloff_forcehalflife 1500 // }}} // {{{ minstanex set g_balance_minstanex_refire 1 diff --git a/balanceXPM.cfg b/balanceXPM.cfg index 91072e835..55b6a5486 100644 --- a/balanceXPM.cfg +++ b/balanceXPM.cfg @@ -383,15 +383,26 @@ set g_balance_crylink_secondary_line_lifetime 2 // range: 4000 full, fades to 80 set g_balance_crylink_secondary_line_fadetime 2 // }}} // {{{ nex -set g_balance_nex_damage 100 -set g_balance_nex_force 200 -set g_balance_nex_refire 1.25 -set g_balance_nex_animtime 1 -set g_balance_nex_ammo 5 -set g_balance_nex_damagefalloff_mindist 1000 -set g_balance_nex_damagefalloff_maxdist 3000 -set g_balance_nex_damagefalloff_halflife 2000 -set g_balance_nex_damagefalloff_forcehalflife 2000 +set g_balance_nex_primary_damage 100 +set g_balance_nex_primary_force 200 +set g_balance_nex_primary_refire 1.25 +set g_balance_nex_primary_animtime 1 +set g_balance_nex_primary_ammo 5 +set g_balance_nex_primary_damagefalloff_mindist 1000 +set g_balance_nex_primary_damagefalloff_maxdist 3000 +set g_balance_nex_primary_damagefalloff_halflife 2000 +set g_balance_nex_primary_damagefalloff_forcehalflife 2000 + +set g_balance_nex_secondary 0 +set g_balance_nex_secondary_damage 100 +set g_balance_nex_secondary_force 200 +set g_balance_nex_secondary_refire 1.25 +set g_balance_nex_secondary_animtime 1 +set g_balance_nex_secondary_ammo 5 +set g_balance_nex_secondary_damagefalloff_mindist 1000 +set g_balance_nex_secondary_damagefalloff_maxdist 3000 +set g_balance_nex_secondary_damagefalloff_halflife 2000 +set g_balance_nex_secondary_damagefalloff_forcehalflife 2000 // }}} // {{{ minstanex set g_balance_minstanex_refire 1.25 diff --git a/balanceXonotic.cfg b/balanceXonotic.cfg index 12da28e70..87b35fd38 100644 --- a/balanceXonotic.cfg +++ b/balanceXonotic.cfg @@ -383,15 +383,26 @@ set g_balance_crylink_secondary_line_lifetime 2 // range: 4000 full, fades to 80 set g_balance_crylink_secondary_line_fadetime 2 // }}} // {{{ nex -set g_balance_nex_damage 80 -set g_balance_nex_force -300 -set g_balance_nex_refire 1.25 -set g_balance_nex_animtime 0.75 -set g_balance_nex_ammo 5 -set g_balance_nex_damagefalloff_mindist 1000 -set g_balance_nex_damagefalloff_maxdist 3000 -set g_balance_nex_damagefalloff_halflife 4000 -set g_balance_nex_damagefalloff_forcehalflife 4000 +set g_balance_nex_primary_damage 80 +set g_balance_nex_primary_force 200 +set g_balance_nex_primary_refire 1.25 +set g_balance_nex_primary_animtime 0.75 +set g_balance_nex_primary_ammo 5 +set g_balance_nex_primary_damagefalloff_mindist 1000 +set g_balance_nex_primary_damagefalloff_maxdist 3000 +set g_balance_nex_primary_damagefalloff_halflife 4000 +set g_balance_nex_primary_damagefalloff_forcehalflife 4000 + +set g_balance_nex_secondary 1 +set g_balance_nex_secondary_damage 80 +set g_balance_nex_secondary_force -200 +set g_balance_nex_secondary_refire 1.25 +set g_balance_nex_secondary_animtime 0.75 +set g_balance_nex_secondary_ammo 5 +set g_balance_nex_secondary_damagefalloff_mindist 1000 +set g_balance_nex_secondary_damagefalloff_maxdist 3000 +set g_balance_nex_secondary_damagefalloff_halflife 4000 +set g_balance_nex_secondary_damagefalloff_forcehalflife 4000 // }}} // {{{ minstanex set g_balance_minstanex_refire 1.25 diff --git a/qcsrc/client/Defs.qc b/qcsrc/client/Defs.qc index 1b019d5be..fbed63fc4 100644 --- a/qcsrc/client/Defs.qc +++ b/qcsrc/client/Defs.qc @@ -259,3 +259,4 @@ string w_deathtypestring; vector w_org, w_backoff; float campingrifle_scope; +float nex_scope; diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index dc1f5bb51..78b45fae3 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -1281,6 +1281,10 @@ void Net_CampingrifleScope() { campingrifle_scope = TRUE; } +void Net_NexScope() { + nex_scope = TRUE; +} + // CSQC_Parse_TempEntity : Handles all temporary entity network data in the CSQC layer. // You must ALWAYS first acquire the temporary ID, which is sent as a byte. // Return value should be 1 if CSQC handled the temporary entity, otherwise return 0 to have the engine process the event. @@ -1355,6 +1359,10 @@ float CSQC_Parse_TempEntity() Net_CampingrifleScope(); bHandled = true; break; + case TE_CSQC_NEX_SCOPE: + Net_NexScope(); + bHandled = true; + break; default: // No special logic for this temporary entity; return 0 so the engine can handle it bHandled = false; diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index bbd337d0f..05f1fe97e 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -137,7 +137,7 @@ vector GetCurrentFov(float fov) zoomspeed = 3.5; zoomdir = button_zoom; - if(getstati(STAT_ACTIVEWEAPON) == WEP_NEX || (getstati(STAT_ACTIVEWEAPON) == WEP_CAMPINGRIFLE && campingrifle_scope)) // do NOT use switchweapon here + if((getstati(STAT_ACTIVEWEAPON) == WEP_NEX && nex_scope) || (getstati(STAT_ACTIVEWEAPON) == WEP_CAMPINGRIFLE && campingrifle_scope)) // do NOT use switchweapon here zoomdir += button_attack2; if(spectatee_status > 0 || isdemo()) { diff --git a/qcsrc/common/constants.qh b/qcsrc/common/constants.qh index 7a5cf3447..53f37bcdd 100644 --- a/qcsrc/common/constants.qh +++ b/qcsrc/common/constants.qh @@ -60,6 +60,7 @@ const float TE_CSQC_TARGET_MUSIC = 111; const float TE_CSQC_NOTIFY = 112; const float TE_CSQC_WEAPONCOMPLAIN = 113; const float TE_CSQC_CAMPINGRIFLE_SCOPE = 115; +const float TE_CSQC_NEX_SCOPE = 116; const float RACE_NET_CHECKPOINT_HIT_QUALIFYING = 0; // byte checkpoint, short time, short recordtime, string recordholder const float RACE_NET_CHECKPOINT_CLEAR = 1; diff --git a/qcsrc/server/w_nex.qc b/qcsrc/server/w_nex.qc index aee2a80a2..389341f23 100644 --- a/qcsrc/server/w_nex.qc +++ b/qcsrc/server/w_nex.qc @@ -16,15 +16,40 @@ void SendCSQCNexBeamParticle() { WriteCoord(MSG_BROADCAST, v_z); } -void W_Nex_Attack (void) +void W_Nex_Attack (float issecondary) { + float mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, myammo; + if(issecondary) + { + mydmg = cvar("g_balance_nex_secondary_damage"); + myforce = cvar("g_balance_nex_secondary_force"); + mymindist = cvar("g_balance_nex_secondary_damagefalloff_mindist"); + mymaxdist = cvar("g_balance_nex_secondary_damagefalloff_maxdist"); + myhalflife = cvar("g_balance_nex_secondary_damagefalloff_halflife"); + myforcehalflife = cvar("g_balance_nex_secondary_damagefalloff_forcehalflife"); + myammo = cvar("g_balance_nex_secondary_ammo"); + } + else + { + mydmg = cvar("g_balance_nex_primary_damage"); + myforce = cvar("g_balance_nex_primary_force"); + mymindist = cvar("g_balance_nex_primary_damagefalloff_mindist"); + mymaxdist = cvar("g_balance_nex_primary_damagefalloff_maxdist"); + myhalflife = cvar("g_balance_nex_primary_damagefalloff_halflife"); + myforcehalflife = cvar("g_balance_nex_primary_damagefalloff_forcehalflife"); + myammo = cvar("g_balance_nex_primary_ammo"); + } + float flying; flying = IsFlying(self); // do this BEFORE to make the trace values from FireRailgunBullet last - W_SetupShot (self, TRUE, 5, "weapons/nexfire.wav", cvar("g_balance_nex_damage")); + W_SetupShot (self, TRUE, 5, "weapons/nexfire.wav", mydmg); yoda = 0; - FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, cvar("g_balance_nex_damage"), cvar("g_balance_nex_force"), cvar("g_balance_nex_damagefalloff_mindist"), cvar("g_balance_nex_damagefalloff_maxdist"), cvar("g_balance_nex_damagefalloff_halflife"), cvar("g_balance_nex_damagefalloff_forcehalflife"), WEP_NEX); + if(issecondary) // reverse effects + FireRailgunBullet (w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, w_shotorg, mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, WEP_NEX); + else + FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, WEP_NEX); if(yoda && flying) AnnounceTo(self, "yoda"); @@ -34,26 +59,52 @@ void W_Nex_Attack (void) // flash and burn the wall if (trace_ent.solid == SOLID_BSP && !(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)) - Damage_DamageInfo(trace_endpos, cvar("g_balance_nex_damage"), 0, 0, cvar("g_balance_nex_force") * w_shotdir, WEP_NEX, self); + Damage_DamageInfo(trace_endpos, mydmg, 0, 0, myforce * w_shotdir, WEP_NEX, self); if not(self.items & IT_UNLIMITED_WEAPON_AMMO) - self.ammo_cells = self.ammo_cells - cvar("g_balance_nex_ammo"); + self.ammo_cells = self.ammo_cells - myammo; } void spawnfunc_weapon_nex (void); // defined in t_items.qc +.float sent_nex_scope; float w_nex(float req) { if (req == WR_AIM) + { self.BUTTON_ATCK = bot_aim(1000000, 0, 1, FALSE); + self.BUTTON_ATCK2 = bot_aim(1000000, 0, 1, FALSE); + } else if (req == WR_THINK) { if (self.BUTTON_ATCK) { - if (weapon_prepareattack(0, cvar("g_balance_nex_refire"))) + if (weapon_prepareattack(0, cvar("g_balance_nex_primary_refire"))) + { + W_Nex_Attack(0); + weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_nex_primary_animtime"), w_ready); + } + } + if (self.BUTTON_ATCK2) + { + if(cvar("g_balance_nex_secondary")) + { + if (weapon_prepareattack(0, cvar("g_balance_nex_secondary_refire"))) + { + W_Nex_Attack(1); + weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_nex_secondary_animtime"), w_ready); + } + } + else { - W_Nex_Attack(); - weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_nex_animtime"), w_ready); + if(clienttype(self) == CLIENTTYPE_REAL) + if(!self.sent_nex_scope) + { + msg_entity = self; + WriteByte(MSG_ONE, SVC_TEMPENTITY); + WriteByte(MSG_ONE, TE_CSQC_NEX_SCOPE); + self.sent_nex_scope = 1; + } } } } @@ -71,9 +122,9 @@ float w_nex(float req) else if (req == WR_SETUP) weapon_setup(WEP_NEX); else if (req == WR_CHECKAMMO1) - return self.ammo_cells >= cvar("g_balance_nex_ammo"); + return self.ammo_cells >= cvar("g_balance_nex_primary_ammo"); else if (req == WR_CHECKAMMO2) - return FALSE; + return self.ammo_cells >= cvar("g_balance_nex_secondary_ammo"); return TRUE; }; #endif