From: FruitieX Date: Mon, 7 Jun 2010 16:01:58 +0000 (+0300) Subject: Merge branch 'master' into fruitiex/newpanelhud_stable X-Git-Tag: xonotic-v0.1.0preview~541^2~106^2~1 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=83b0c96edec0a188371873bb83b15d024568bca3;hp=6272c4294e47802aa79728949c76b370c0a764e8 Merge branch 'master' into fruitiex/newpanelhud_stable --- diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index 0ab71adab8..3f01cc8813 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -240,23 +240,23 @@ cl_bobcycle 0 // how long the cycle of up/down view movement takes (only works i cl_bob 0.01 // how much view moves up/down when moving (does not move if cl_bobcycle is 0, but still enables cl_bobmodel), default is 0.02 cl_bobmodel 1 // whether to have gun model move around on screen when moving (only works if cl_bob is not 0), default is 1 cl_leanmodel 1 // enables weapon leaning effect when looking around -cl_leanmodel_side_speed 1 "gun leaning sideways speed" +cl_leanmodel_side_speed 0.7 "gun leaning sideways speed" cl_leanmodel_side_limit 35 "gun leaning sideways limit" cl_leanmodel_side_highpass1 30 "gun leaning sideways pre-highpass in 1/s" cl_leanmodel_side_highpass 3 "gun leaning sideways highpass in 1/s" cl_leanmodel_side_lowpass 20 "gun leaning sideways lowpass in 1/s" -cl_leanmodel_up_speed 1 "gun leaning upward speed" +cl_leanmodel_up_speed 0.65 "gun leaning upward speed" cl_leanmodel_up_limit 50 "gun leaning upward limit" cl_leanmodel_up_highpass1 5 "gun leaning upward pre-highpass in 1/s" cl_leanmodel_up_highpass 15 "gun leaning upward highpass in 1/s" cl_leanmodel_up_lowpass 20 "gun leaning upward lowpass in 1/s" cl_followmodel 1 // enables weapon pushing / pulling effect when walking -cl_followmodel_side_speed 0.5 "gun following sideways speed" +cl_followmodel_side_speed 0.25 "gun following sideways speed" cl_followmodel_side_limit 6 "gun following sideways limit" cl_followmodel_side_highpass1 30 "gun following sideways pre-highpass in 1/s" cl_followmodel_side_highpass 5 "gun following sideways highpass in 1/s" cl_followmodel_side_lowpass 10 "gun following sideways lowpass in 1/s" -cl_followmodel_up_speed 1 "gun following upward speed" +cl_followmodel_up_speed 0.5 "gun following upward speed" cl_followmodel_up_limit 5 "gun following upward limit" cl_followmodel_up_highpass1 60 "gun following upward pre-highpass in 1/s" cl_followmodel_up_highpass 2 "gun following upward highpass in 1/s" diff --git a/gfx/loading.tga b/gfx/loading.tga index 1a84a05f9f..a5d35489ac 100644 Binary files a/gfx/loading.tga and b/gfx/loading.tga differ diff --git a/models/misc/chatbubble.spr_0.tga b/models/misc/chatbubble.spr_0.tga index c7a1ec7d40..c1858ef03f 100644 Binary files a/models/misc/chatbubble.spr_0.tga and b/models/misc/chatbubble.spr_0.tga differ diff --git a/models/player/gak.iqm b/models/player/gak.iqm new file mode 100644 index 0000000000..22a1975517 Binary files /dev/null and b/models/player/gak.iqm differ diff --git a/models/player/gak.iqm.framegroups b/models/player/gak.iqm.framegroups new file mode 100644 index 0000000000..71128c6c82 --- /dev/null +++ b/models/player/gak.iqm.framegroups @@ -0,0 +1,23 @@ +0 36 15.000000 0 // dieone +36 20 15.000000 0 // dietwo +56 15 15.000000 1 // draw +71 20 15.000000 1 // duck +91 21 30.000000 1 // duckwalk +112 16 15.000000 0 // duckjump +128 15 5.000000 1 // duckidle +143 41 5.000000 1 // idle +184 21 25.000000 0 // jump +205 15 15.000000 0 // painone +220 17 15.000000 0 // paintwo +237 3 15.000000 1 // shoot +240 21 15.000000 1 // taunt +261 21 35.000000 1 // run +282 21 35.000000 1 // runbackwards +303 21 35.000000 1 // strafeleft +324 21 35.000000 1 // straferight +345 2 15.000000 0 // deadone +347 2 15.000000 0 // deadtwo +349 21 35.000000 1 // forwardright +370 21 35.000000 1 // forwardleft +391 21 35.000000 1 // backright +412 21 30.000000 1 // backleft diff --git a/models/player/gak.iqm_0.tga b/models/player/gak.iqm_0.tga new file mode 100644 index 0000000000..093b7f061d Binary files /dev/null and b/models/player/gak.iqm_0.tga differ diff --git a/models/player/gak.iqm_0.txt b/models/player/gak.iqm_0.txt new file mode 100644 index 0000000000..8aa7419814 --- /dev/null +++ b/models/player/gak.iqm_0.txt @@ -0,0 +1,7 @@ +name Gak +species alien +sex Male +weight 85 +age 16 + +Lightweight Xonotic Solider diff --git a/models/player/gakarmored.iqm b/models/player/gakarmored.iqm new file mode 100644 index 0000000000..9df6bdb33a Binary files /dev/null and b/models/player/gakarmored.iqm differ diff --git a/models/player/gakarmored.iqm.framegroups b/models/player/gakarmored.iqm.framegroups new file mode 100644 index 0000000000..71128c6c82 --- /dev/null +++ b/models/player/gakarmored.iqm.framegroups @@ -0,0 +1,23 @@ +0 36 15.000000 0 // dieone +36 20 15.000000 0 // dietwo +56 15 15.000000 1 // draw +71 20 15.000000 1 // duck +91 21 30.000000 1 // duckwalk +112 16 15.000000 0 // duckjump +128 15 5.000000 1 // duckidle +143 41 5.000000 1 // idle +184 21 25.000000 0 // jump +205 15 15.000000 0 // painone +220 17 15.000000 0 // paintwo +237 3 15.000000 1 // shoot +240 21 15.000000 1 // taunt +261 21 35.000000 1 // run +282 21 35.000000 1 // runbackwards +303 21 35.000000 1 // strafeleft +324 21 35.000000 1 // straferight +345 2 15.000000 0 // deadone +347 2 15.000000 0 // deadtwo +349 21 35.000000 1 // forwardright +370 21 35.000000 1 // forwardleft +391 21 35.000000 1 // backright +412 21 30.000000 1 // backleft diff --git a/models/player/gakarmored.iqm_0.tga b/models/player/gakarmored.iqm_0.tga new file mode 100644 index 0000000000..b4a58ea31b Binary files /dev/null and b/models/player/gakarmored.iqm_0.tga differ diff --git a/models/player/gakarmored.iqm_0.txt b/models/player/gakarmored.iqm_0.txt new file mode 100644 index 0000000000..06ff3550b1 --- /dev/null +++ b/models/player/gakarmored.iqm_0.txt @@ -0,0 +1,7 @@ +name Gak Armored +species alien +sex Male +weight 90 +age 20 + +Heavyweight Xonotic Solider diff --git a/models/player/gakmasked.iqm b/models/player/gakmasked.iqm new file mode 100644 index 0000000000..275953dff3 Binary files /dev/null and b/models/player/gakmasked.iqm differ diff --git a/models/player/gakmasked.iqm.framegroups b/models/player/gakmasked.iqm.framegroups new file mode 100644 index 0000000000..71128c6c82 --- /dev/null +++ b/models/player/gakmasked.iqm.framegroups @@ -0,0 +1,23 @@ +0 36 15.000000 0 // dieone +36 20 15.000000 0 // dietwo +56 15 15.000000 1 // draw +71 20 15.000000 1 // duck +91 21 30.000000 1 // duckwalk +112 16 15.000000 0 // duckjump +128 15 5.000000 1 // duckidle +143 41 5.000000 1 // idle +184 21 25.000000 0 // jump +205 15 15.000000 0 // painone +220 17 15.000000 0 // paintwo +237 3 15.000000 1 // shoot +240 21 15.000000 1 // taunt +261 21 35.000000 1 // run +282 21 35.000000 1 // runbackwards +303 21 35.000000 1 // strafeleft +324 21 35.000000 1 // straferight +345 2 15.000000 0 // deadone +347 2 15.000000 0 // deadtwo +349 21 35.000000 1 // forwardright +370 21 35.000000 1 // forwardleft +391 21 35.000000 1 // backright +412 21 30.000000 1 // backleft diff --git a/models/player/gakmasked.iqm_0.tga b/models/player/gakmasked.iqm_0.tga new file mode 100644 index 0000000000..40d2958a7e Binary files /dev/null and b/models/player/gakmasked.iqm_0.tga differ diff --git a/models/player/gakmasked.iqm_0.txt b/models/player/gakmasked.iqm_0.txt new file mode 100644 index 0000000000..aff4f75ac6 --- /dev/null +++ b/models/player/gakmasked.iqm_0.txt @@ -0,0 +1,7 @@ +name Gak Masked +species alien +sex Male +weight 87 +age 18 + +Mediumweight Xonotic Solider diff --git a/physics10.cfg b/physics10.cfg index 16331779c3..4631d5ea7b 100644 --- a/physics10.cfg +++ b/physics10.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physics11.cfg b/physics11.cfg index 1a7afbd5c5..8c8219af5f 100644 --- a/physics11.cfg +++ b/physics11.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physics151.cfg b/physics151.cfg index 52f2536da2..9707f6f7ce 100644 --- a/physics151.cfg +++ b/physics151.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physics151b.cfg b/physics151b.cfg index 325e7f6623..475875b1a2 100644 --- a/physics151b.cfg +++ b/physics151b.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physics16rc1.cfg b/physics16rc1.cfg index 751e527df3..68a8f198ef 100644 --- a/physics16rc1.cfg +++ b/physics16rc1.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physics20.cfg b/physics20.cfg index cf3f9110ba..b2e056ee5a 100644 --- a/physics20.cfg +++ b/physics20.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physics25.cfg b/physics25.cfg index ed1a85446c..85e4841cd1 100644 --- a/physics25.cfg +++ b/physics25.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physics26.cfg b/physics26.cfg index 34ab3cf940..0e4de396e7 100644 --- a/physics26.cfg +++ b/physics26.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsCPMA.cfg b/physicsCPMA.cfg index 7c985bfd69..d572e6d97f 100644 --- a/physicsCPMA.cfg +++ b/physicsCPMA.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 30 sv_airstrafeaccel_qw 0 sv_aircontrol 150 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsHavoc.cfg b/physicsHavoc.cfg index cc90edcecf..eb63775623 100644 --- a/physicsHavoc.cfg +++ b/physicsHavoc.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsLeeStricklin.cfg b/physicsLeeStricklin.cfg index 446da86abf..4a959db3e9 100644 --- a/physicsLeeStricklin.cfg +++ b/physicsLeeStricklin.cfg @@ -20,6 +20,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsLzd.cfg b/physicsLzd.cfg index 4a73e89938..2b437d3443 100644 --- a/physicsLzd.cfg +++ b/physicsLzd.cfg @@ -20,6 +20,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsNoQWBunny.cfg b/physicsNoQWBunny.cfg index 6920d764a8..d70bc1bde1 100644 --- a/physicsNoQWBunny.cfg +++ b/physicsNoQWBunny.cfg @@ -14,11 +14,12 @@ sv_waterfriction -1 sv_airaccel_sideways_friction -0.2 sv_airaccel_qw -0.9475 sv_airstopaccelerate 2.5 -sv_airstrafeaccelerate 42 +sv_airstrafeaccelerate 24 sv_maxairstrafespeed 100 -sv_airstrafeaccel_qw -0.99 +sv_airstrafeaccel_qw -0.9825 sv_aircontrol 125 sv_aircontrol_power 2.5 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsQ.cfg b/physicsQ.cfg index 5839a61377..ea8e1acf7b 100644 --- a/physicsQ.cfg +++ b/physicsQ.cfg @@ -20,6 +20,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsQ2.cfg b/physicsQ2.cfg index e6c1ea3eef..1d08ae8c74 100644 --- a/physicsQ2.cfg +++ b/physicsQ2.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsQ2a.cfg b/physicsQ2a.cfg index 03e4008dc8..7409ae4be2 100644 --- a/physicsQ2a.cfg +++ b/physicsQ2a.cfg @@ -20,6 +20,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsQ3.cfg b/physicsQ3.cfg index 37643ed9af..1951becf20 100644 --- a/physicsQ3.cfg +++ b/physicsQ3.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsQBF.cfg b/physicsQBF.cfg index 8b677e6cd7..4bbb9be2d4 100644 --- a/physicsQBF.cfg +++ b/physicsQBF.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsQBFplus.cfg b/physicsQBFplus.cfg index 58b2a45d5a..6c17ad683b 100644 --- a/physicsQBFplus.cfg +++ b/physicsQBFplus.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsSamual.cfg b/physicsSamual.cfg index 8d2fa30a05..e03363a088 100644 --- a/physicsSamual.cfg +++ b/physicsSamual.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 0 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsWarsow.cfg b/physicsWarsow.cfg index 1c87870a19..b1b0655cbc 100644 --- a/physicsWarsow.cfg +++ b/physicsWarsow.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 30 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 9 // activates warsow movement mode sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsWarsowClassicBunny.cfg b/physicsWarsowClassicBunny.cfg index e73204d662..06e7c1a575 100644 --- a/physicsWarsowClassicBunny.cfg +++ b/physicsWarsowClassicBunny.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 30 sv_airstrafeaccel_qw 0 sv_aircontrol 150 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/physicsWarsowDev.cfg b/physicsWarsowDev.cfg index f63f67e111..cb07a48818 100644 --- a/physicsWarsowDev.cfg +++ b/physicsWarsowDev.cfg @@ -19,6 +19,7 @@ sv_maxairstrafespeed 30 sv_airstrafeaccel_qw 0 sv_aircontrol 0 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 6 // activates warsow movement mode sv_warsowbunny_accel 0.1585 sv_warsowbunny_topspeed 900 diff --git a/physicsXPM.cfg b/physicsXPM.cfg index 1737f1aeaf..2a60b65178 100644 --- a/physicsXPM.cfg +++ b/physicsXPM.cfg @@ -23,6 +23,7 @@ sv_maxairstrafespeed 30 sv_airstrafeaccel_qw 1 sv_aircontrol 150 sv_aircontrol_power 2 +sv_airspeedlimit_nonqw 0 sv_warsowbunny_turnaccel 0 sv_warsowbunny_accel 0.1593 sv_warsowbunny_topspeed 925 diff --git a/qcsrc/client/damage.qc b/qcsrc/client/damage.qc index 9e90bee224..1b0138f36b 100644 --- a/qcsrc/client/damage.qc +++ b/qcsrc/client/damage.qc @@ -1,22 +1,23 @@ .float silent; +float w_deathtype, w_issilent, w_random; +vector w_org, w_backoff; + void Ent_DamageInfo(float isNew) { - float hittype, dmg, rad, edge, thisdmg, forcemul; - float issilent; - vector force, org, thisforce; + float dmg, rad, edge, thisdmg, forcemul; + vector force, thisforce; entity oldself; oldself = self; - hittype = ReadShort(); - - issilent = (hittype & 0x8000); - hittype = (hittype & 0x7FFF); + w_deathtype = ReadShort(); + w_issilent = (w_deathtype & 0x8000); + w_deathtype = (w_deathtype & 0x7FFF); - org_x = ReadCoord(); - org_y = ReadCoord(); - org_z = ReadCoord(); + w_org_x = ReadCoord(); + w_org_y = ReadCoord(); + w_org_z = ReadCoord(); dmg = ReadByte(); rad = ReadByte(); @@ -34,22 +35,22 @@ void Ent_DamageInfo(float isNew) else forcemul = 1; - for(self = findradius(org, rad); self; self = self.chain) + for(self = findradius(w_org, rad); self; self = self.chain) { if(rad) { - thisdmg = vlen(self.origin - org) / rad; + thisdmg = vlen(self.origin - w_org) / rad; if(thisdmg >= 1) continue; if(dmg) { thisdmg = dmg + (edge - dmg) * thisdmg; - thisforce = forcemul * vlen(force) * (thisdmg / dmg) * normalize(self.origin - org); + thisforce = forcemul * vlen(force) * (thisdmg / dmg) * normalize(self.origin - w_org); } else { thisdmg = 0; - thisforce = forcemul * vlen(force) * normalize(self.origin - org); + thisforce = forcemul * vlen(force) * normalize(self.origin - w_org); } } else @@ -69,276 +70,38 @@ void Ent_DamageInfo(float isNew) //print("pushed ", ftos(num_for_edict(self)), " loose\n"); } - if(issilent) + if(w_issilent) self.silent = 1; if(self.event_damage) - self.event_damage(thisdmg, hittype, org, thisforce); + self.event_damage(thisdmg, w_deathtype, w_org, thisforce); } self = oldself; - // TODO spawn particle effects and sounds based on hittype + // TODO spawn particle effects and sounds based on w_deathtype - if(!DEATH_ISSPECIAL(hittype)) + if(!DEATH_ISSPECIAL(w_deathtype)) { - float hitwep, secondary, bounce, headshot; - vector org2, backoff; - float r; + float hitwep; - hitwep = DEATH_WEAPONOFWEAPONDEATH(hittype); - secondary = hittype & HITTYPE_SECONDARY; - bounce = hittype & HITTYPE_BOUNCE; - headshot = hittype & HITTYPE_HEADSHOT; - r = prandom(); + hitwep = DEATH_WEAPONOFWEAPONDEATH(w_deathtype); + w_random = prandom(); - traceline(org - normalize(force) * 16, org + normalize(force) * 16, MOVE_NOMONSTERS, world); + traceline(w_org - normalize(force) * 16, w_org + normalize(force) * 16, MOVE_NOMONSTERS, world); if(trace_fraction < 1 && hitwep != WEP_NEX && hitwep != WEP_MINSTANEX) - backoff = trace_plane_normal; + w_backoff = trace_plane_normal; else - backoff = -1 * normalize(force); - - setorigin(self, org + backoff * 2); // for sound() calls + w_backoff = -1 * normalize(force); + setorigin(self, w_org + w_backoff * 2); // for sound() calls - switch(hitwep) - { - case WEP_LASER: - org2 = org + backoff * 6; - pointparticles(particleeffectnum("laser_impact"), org2, backoff * 1000, 1); - if(!issilent) - sound(self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM); - break; - case WEP_SHOTGUN: - org2 = org + backoff * 2; - pointparticles(particleeffectnum("shotgun_impact"), org2, backoff * 1000, 1); - if(!issilent) - { - if(r < 0.05) - sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM); - else if(r < 0.1) - sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM); - else if(r < 0.2) - sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM); - } - break; - case WEP_UZI: - org2 = org + backoff * 2; - pointparticles(particleeffectnum("machinegun_impact"), org2, backoff * 1000, 1); - if(!issilent) - if(r < 0.05) - sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM); - else if(r < 0.1) - sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM); - else if(r < 0.2) - sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM); - break; - case WEP_GRENADE_LAUNCHER: - org2 = org + backoff * 12; - pointparticles(particleeffectnum("grenade_explode"), org2, '0 0 0', 1); - if(!issilent) - sound(self, CHAN_PROJECTILE, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM); - break; - case WEP_ELECTRO: - org2 = org + backoff * 6; - if(secondary) - { - pointparticles(particleeffectnum("electro_ballexplode"), org2, '0 0 0', 1); - if(!issilent) - sound(self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM); - } - else - { - if(bounce) - { - // this is sent as "primary bounce" to distinguish it from secondary bounced balls - pointparticles(particleeffectnum("electro_combo"), org2, '0 0 0', 1); - if(!issilent) - sound(self, CHAN_PROJECTILE, "weapons/electro_impact_combo.wav", VOL_BASE, ATTN_NORM); - } - else - { - pointparticles(particleeffectnum("electro_impact"), org2, '0 0 0', 1); - if(!issilent) - sound(self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM); - } - } - break; - case WEP_CRYLINK: - org2 = org + backoff * 2; - if(secondary) - { - pointparticles(particleeffectnum("crylink_impact"), org2, '0 0 0', 1); - if(!issilent) - sound(self, CHAN_PROJECTILE, "weapons/crylink_impact2.wav", VOL_BASE, ATTN_NORM); - } - else - { - pointparticles(particleeffectnum("crylink_impactbig"), org2, '0 0 0', 1); - if(!issilent) - sound(self, CHAN_PROJECTILE, "weapons/crylink_impact.wav", VOL_BASE, ATTN_NORM); - } - break; - case WEP_NEX: - org2 = org + backoff * 6; - pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1); - if(!issilent) - sound(self, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM); - break; - case WEP_HAGAR: - org2 = org + backoff * 6; - pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1); - if(!issilent) - { - if (r<0.15) - sound(self, CHAN_PROJECTILE, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM); - else if (r<0.7) - sound(self, CHAN_PROJECTILE, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM); - else - sound(self, CHAN_PROJECTILE, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM); - } - break; - case WEP_ROCKET_LAUNCHER: - org2 = org + backoff * 12; - pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1); - if(!issilent) - sound(self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); - break; - case WEP_PORTO: - print("Since when does Porto send DamageInfo?\n"); - break; - case WEP_MINSTANEX: - org2 = org + backoff * 6; - pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1); - if(!issilent) - sound(self, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM); - break; - case WEP_HOOK: - org2 = org + backoff * 2; - pointparticles(particleeffectnum("hookbomb_explode"), org2, '0 0 0', 1); - if(!issilent) - sound(self, CHAN_PROJECTILE, "weapons/hookbomb_impact.wav", VOL_BASE, ATTN_NORM); - break; - case WEP_SEEKER: - org2 = org + backoff * 6; - if(secondary) - { - pointparticles(particleeffectnum("flac_explode"), org2, '0 0 0', 1); - if(!issilent) - { - if (r<0.15) - sound(self, CHAN_PROJECTILE, "weapons/flacexp1.wav", 1, ATTN_NORM); - else if (r<0.7) - sound(self, CHAN_PROJECTILE, "weapons/flacexp2.wav", 1, ATTN_NORM); - else - sound(self, CHAN_PROJECTILE, "weapons/flacexp3.wav", 1, ATTN_NORM); - } - } - else - { - if(bounce) - { - pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1); - if(!issilent) - { - if (r<0.15) - sound(self, CHAN_PROJECTILE, "weapons/tagexp1.wav", 1, ATTN_NORM); - else if (r<0.7) - sound(self, CHAN_PROJECTILE, "weapons/tagexp2.wav", 1, ATTN_NORM); - else - sound(self, CHAN_PROJECTILE, "weapons/tagexp3.wav", 1, ATTN_NORM); - } - } - else if(headshot) - { - if(!issilent) - sound(self, CHAN_PROJECTILE, "weapons/tag_impact.wav", 1, ATTN_NORM); - } - else - { - pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1); - if(!issilent) - { - if (r<0.15) - sound(self, CHAN_PROJECTILE, "weapons/seekerexp1.wav", 1, ATTN_NORM); - else if (r<0.7) - sound(self, CHAN_PROJECTILE, "weapons/seekerexp2.wav", 1, ATTN_NORM); - else - sound(self, CHAN_PROJECTILE, "weapons/seekerexp3.wav", 1, ATTN_NORM); - } - } - } - break; - case WEP_HLAC: - org2 = org + backoff * 6; - pointparticles(particleeffectnum("laser_impact"), org2, backoff * 1000, 1); - if(!issilent) - sound(self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM); - break; - case WEP_CAMPINGRIFLE: - org2 = org + backoff * 2; - pointparticles(particleeffectnum("machinegun_impact"), org2, backoff * 1000, 1); - if(!issilent) - { - if(r < 0.2) - sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM); - else if(r < 0.4) - sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM); - else if(r < 0.5) - sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM); - } - break; - case WEP_TUBA: - break; - case WEP_FIREBALL: - if(secondary) - { - // firemine goes out silently - } - else - { - org2 = org + backoff * 16; - pointparticles(particleeffectnum("fireball_explode"), org2, '0 0 0', 1); - if(!issilent) - sound(self, CHAN_PROJECTILE, "weapons/fireball_impact2.wav", VOL_BASE, ATTN_NORM * 0.25); // long range boom - } - break; - default: - dprint("Unhandled damage of weapon ", ftos(hitwep), "\n"); - break; - } + (get_weaponinfo(hitwep)).weapon_func(WR_IMPACTEFFECT); } } void DamageInfo_Precache() { - precache_sound("weapons/crylink_impact2.wav"); - precache_sound("weapons/crylink_impact.wav"); - precache_sound("weapons/electro_impact.wav"); - precache_sound("weapons/electro_impact_combo.wav"); - precache_sound("weapons/flacexp1.wav"); - precache_sound("weapons/flacexp2.wav"); - precache_sound("weapons/flacexp3.wav"); - precache_sound("weapons/grenade_impact.wav"); - precache_sound("weapons/hagexp1.wav"); - precache_sound("weapons/hagexp2.wav"); - precache_sound("weapons/hagexp3.wav"); - precache_sound("weapons/flacexp1.wav"); - precache_sound("weapons/flacexp2.wav"); - precache_sound("weapons/flacexp3.wav"); - precache_sound("weapons/hookbomb_impact.wav"); - precache_sound("weapons/laserimpact.wav"); - precache_sound("weapons/neximpact.wav"); - precache_sound("weapons/ric1.wav"); - precache_sound("weapons/ric2.wav"); - precache_sound("weapons/ric3.wav"); - precache_sound("weapons/rocket_impact.wav"); - precache_sound("weapons/fireball_impact.wav"); - precache_sound("weapons/fireball_impact2.wav"); - precache_sound("weapons/seekerexp1.wav"); - precache_sound("weapons/seekerexp2.wav"); - precache_sound("weapons/seekerexp3.wav"); - precache_sound("weapons/tagexp1.wav"); - precache_sound("weapons/tagexp2.wav"); - precache_sound("weapons/tagexp3.wav"); - precache_sound("weapons/tag_impact.wav"); + float i; + for(i = WEP_FIRST; i <= WEP_LAST; ++i) + (get_weaponinfo(i)).weapon_func(WR_PRECACHE); } diff --git a/qcsrc/client/progs.src b/qcsrc/client/progs.src index ade8777247..5e94475ce2 100644 --- a/qcsrc/client/progs.src +++ b/qcsrc/client/progs.src @@ -67,6 +67,7 @@ bgmscript.qc ../common/gamecommand.qc ../common/mapinfo.qc ../common/items.qc +../server/w_all.qc ../warpzonelib/anglestransform.qc ../warpzonelib/mathlib.qc diff --git a/qcsrc/common/constants.qh b/qcsrc/common/constants.qh index 7181f020b2..ed2334bbd7 100644 --- a/qcsrc/common/constants.qh +++ b/qcsrc/common/constants.qh @@ -281,6 +281,7 @@ const float STAT_LEADLIMIT = 47; const float STAT_BULLETS_LOADED = 48; // see DP source, quakedef.h +const float STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW = 222; const float STAT_MOVEVARS_AIRSTRAFEACCEL_QW = 223; const float STAT_MOVEVARS_AIRACCEL_QW = 254; @@ -514,3 +515,16 @@ float WATERLEVEL_SWIMMING = 2; float WATERLEVEL_SUBMERGED = 3; float MAX_SHOT_DISTANCE = 32768; + +// weapon requests +float WR_SETUP = 1; // (SVQC) setup weapon data +float WR_THINK = 2; // (SVQC) logic to run every frame +float WR_CHECKAMMO1 = 3; // (SVQC) checks ammo for weapon +float WR_CHECKAMMO2 = 4; // (SVQC) checks ammo for weapon +float WR_AIM = 5; // (SVQC) runs bot aiming code for this weapon +float WR_PRECACHE = 6; // (CSQC and SVQC) precaches models/sounds used by this weapon +float WR_SUICIDEMESSAGE = 7; // (SVQC) sets w_deathtypestring or leaves it alone (and may inspect w_deathtype for details) +float WR_KILLMESSAGE = 8; // (SVQC) sets w_deathtypestring or leaves it alone +float WR_RELOAD = 9; // (SVQC) does not need to do anything +float WR_RESETPLAYER = 10; // (SVQC) does not need to do anything +float WR_IMPACTEFFECT = 11; // (CSQC) impact effect diff --git a/qcsrc/common/items.qh b/qcsrc/common/items.qh index 3900b08dea..531a3115ba 100644 --- a/qcsrc/common/items.qh +++ b/qcsrc/common/items.qh @@ -97,12 +97,12 @@ float WEPBIT_ALL; register_weapon(id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname); \ } \ ACCUMULATE_FUNCTION(RegisterWeapons, RegisterWeapons_##id) -#ifdef SVQC +#ifdef MENUQC #define REGISTER_WEAPON(id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \ - REGISTER_WEAPON_2(WEP_##id,WEPBIT_##id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) + REGISTER_WEAPON_2(WEP_##id,WEPBIT_##id,w_null,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) #else #define REGISTER_WEAPON(id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) \ - REGISTER_WEAPON_2(WEP_##id,WEPBIT_##id,w_null,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) + REGISTER_WEAPON_2(WEP_##id,WEPBIT_##id,func,ammotype,i,weapontype,pickupbasevalue,modelname,shortname,wname) #endif #include "../server/w_all.qc" diff --git a/qcsrc/server/cl_physics.qc b/qcsrc/server/cl_physics.qc index 0051d8759a..3a405c40be 100644 --- a/qcsrc/server/cl_physics.qc +++ b/qcsrc/server/cl_physics.qc @@ -21,6 +21,7 @@ float sv_warsowbunny_accel; float sv_warsowbunny_topspeed; float sv_warsowbunny_turnaccel; float sv_warsowbunny_backtosideratio; +float sv_airspeedlimit_nonqw; .float ladder_time; .entity ladder_entity; @@ -477,12 +478,17 @@ void CPM_PM_Aircontrol(vector wishdir, float wishspeed) self.velocity_z = zspeed; } +float AdjustAirAccelQW(float accelqw, float factor) +{ + return copysign(bound(0.000001, 1 - (1 - fabs(accelqw)) * factor, 1), accelqw); +} + // example config for alternate speed clamping: // sv_airaccel_qw 0.8 // sv_airaccel_sideways_friction 0 // prvm_globalset server speedclamp_mode 1 // (or 2) -void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float accel, float accelqw, float sidefric) +void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float accel, float accelqw, float sidefric, float speedlimit) { float vel_straight; float vel_z; @@ -509,6 +515,8 @@ void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float acce step = accel * frametime * wishspeed0; vel_xy_current = vlen(vel_xy); + if(speedlimit) + accelqw = AdjustAirAccelQW(accelqw, (speedlimit - bound(wishspeed, vel_xy_current, speedlimit)) / max(1, speedlimit - wishspeed)); vel_xy_forward = vel_xy_current + bound(0, wishspeed - vel_xy_current, step) * accelqw + step * (1 - accelqw); vel_xy_backward = vel_xy_current - bound(0, wishspeed + vel_xy_current, step) * accelqw - step * (1 - accelqw); if(vel_xy_backward < 0) @@ -644,11 +652,12 @@ void SV_PlayerPhysics() string c; // fix physics stats for g_movement_highspeed - self.stat_sv_airaccel_qw = copysign(bound(0, 1-(1-fabs(sv_airaccel_qw))*autocvar_g_movement_highspeed, 1), sv_airaccel_qw); + self.stat_sv_airaccel_qw = AdjustAirAccelQW(sv_airaccel_qw, autocvar_g_movement_highspeed); if(sv_airstrafeaccel_qw) - self.stat_sv_airstrafeaccel_qw = copysign(bound(0.001, 1-(1-fabs(sv_airstrafeaccel_qw))*autocvar_g_movement_highspeed, 1), sv_airstrafeaccel_qw); + self.stat_sv_airstrafeaccel_qw = AdjustAirAccelQW(sv_airstrafeaccel_qw, autocvar_g_movement_highspeed); else self.stat_sv_airstrafeaccel_qw = 0; + self.stat_sv_airspeedlimit_nonqw = sv_airspeedlimit_nonqw * autocvar_g_movement_highspeed; if(self.PlayerPhysplug) if(self.PlayerPhysplug()) @@ -924,7 +933,7 @@ void SV_PlayerPhysics() if (wishspeed > sv_maxspeed*maxspd_mod) wishspeed = sv_maxspeed*maxspd_mod; if (time >= self.teleport_time) - PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0); + PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0, 0); } else if (self.waterlevel >= WATERLEVEL_SWIMMING) { @@ -947,7 +956,7 @@ void SV_PlayerPhysics() self.velocity = self.velocity * (1 - frametime * sv_friction); // water acceleration - PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0); + PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0, 0); } else if (time < self.ladder_time) { @@ -990,7 +999,7 @@ void SV_PlayerPhysics() if (time >= self.teleport_time) { // water acceleration - PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0); + PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0, 0); } } else if ((self.items & IT_JETPACK) && self.BUTTON_HOOK && (!cvar("g_jetpack_fuel") || self.ammo_fuel >= 0.01 || self.items & IT_UNLIMITED_WEAPON_AMMO)) @@ -1150,7 +1159,7 @@ void SV_PlayerPhysics() if (self.crouch) wishspeed = wishspeed * 0.5; if (time >= self.teleport_time) - PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0); + PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0, 0); } else { @@ -1216,7 +1225,7 @@ void SV_PlayerPhysics() if(sv_warsowbunny_turnaccel && accelerating && self.movement_y == 0 && self.movement_x != 0) PM_AirAccelerate(wishdir, wishspeed); else - PM_Accelerate(wishdir, wishspeed, wishspeed0, airaccel, airaccelqw, sv_airaccel_sideways_friction / maxairspd); + PM_Accelerate(wishdir, wishspeed, wishspeed0, airaccel, airaccelqw, sv_airaccel_sideways_friction / maxairspd, self.stat_sv_airspeedlimit_nonqw); if(sv_aircontrol) CPM_PM_Aircontrol(wishdir, wishspeed2); diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index fec2a0976f..74b4ecea88 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -221,18 +221,6 @@ float WS_DROP = 2; // deselecting frame float WS_INUSE = 3; // fire state float WS_READY = 4; // idle frame -// weapon requests -float WR_SETUP = 1; // setup weapon data -float WR_THINK = 2; // logic to run every frame -float WR_CHECKAMMO1 = 3; // checks ammo for weapon -float WR_CHECKAMMO2 = 4; // checks ammo for weapon -float WR_AIM = 5; // runs bot aiming code for this weapon -float WR_PRECACHE = 6; // precaches models/sounds used by this weapon -float WR_SUICIDEMESSAGE = 7; // sets w_deathtypestring or leaves it alone (and may inspect w_deathtype for details) -float WR_KILLMESSAGE = 8; // sets w_deathtypestring or leaves it alone -float WR_RELOAD = 9; // does not need to do anything -float WR_RESETPLAYER = 10; // does not need to do anything - void weapon_defaultspawnfunc(float wpn); string w_deathtypestring; @@ -536,6 +524,7 @@ float game_starttime; //point in time when the countdown is over .float stat_sv_airaccel_qw; .float stat_sv_airstrafeaccel_qw; +.float stat_sv_airspeedlimit_nonqw; void W_Porto_Remove (entity p); diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index e969146ca4..f873ea7c6b 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -636,6 +636,7 @@ void spawnfunc_worldspawn (void) addstat(STAT_BULLETS_LOADED, AS_INT, campingrifle_bulletcounter); // g_movementspeed hack + addstat(STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW, AS_FLOAT, stat_sv_airspeedlimit_nonqw); addstat(STAT_MOVEVARS_AIRACCEL_QW, AS_FLOAT, stat_sv_airaccel_qw); addstat(STAT_MOVEVARS_AIRSTRAFEACCEL_QW, AS_FLOAT, stat_sv_airstrafeaccel_qw); diff --git a/qcsrc/server/sv_main.qc b/qcsrc/server/sv_main.qc index f4cc874451..45320f2db5 100644 --- a/qcsrc/server/sv_main.qc +++ b/qcsrc/server/sv_main.qc @@ -198,6 +198,7 @@ void StartFrame (void) sv_warsowbunny_topspeed = cvar("sv_warsowbunny_topspeed"); sv_warsowbunny_turnaccel = cvar("sv_warsowbunny_turnaccel"); sv_warsowbunny_backtosideratio = cvar("sv_warsowbunny_backtosideratio"); + sv_airspeedlimit_nonqw = cvar("sv_airspeedlimit_nonqw"); teamplay = cvar ("teamplay"); sys_frametime = cvar("sys_ticrate") * cvar("slowmo"); sv_doublejump = cvar("sv_doublejump"); diff --git a/qcsrc/server/w_campingrifle.qc b/qcsrc/server/w_campingrifle.qc index 8f6a910494..c3c9d52f9b 100644 --- a/qcsrc/server/w_campingrifle.qc +++ b/qcsrc/server/w_campingrifle.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(CAMPINGRIFLE, w_campingrifle, IT_NAILS, 3, WEP_FLAG_NORMAL | WEP_TYPE_HITSCAN, BOT_PICKUP_RATING_MID, "campingrifle", "campingrifle", "Rifle"); #else +#ifdef SVQC //Camping rifle Primary mode: manually operated bolt*, Secondary: full automatic** //* Manually operating the bolt means that all the power of the gas is used to propell the bullet. In this mode the bolt is prevented from moving backwards in response to the firing of the bullet. //** In fully automatic mode some of the gas is used to extract and reload the next cartrige, thus there is less power and range. @@ -294,3 +295,31 @@ float w_campingrifle(float req) return TRUE; }; #endif +#ifdef CSQC +float w_campingrifle(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + org2 = w_org + w_backoff * 2; + pointparticles(particleeffectnum("machinegun_impact"), org2, w_backoff * 1000, 1); + if(!w_issilent) + { + if(w_random < 0.2) + sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM); + else if(w_random < 0.4) + sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM); + else if(w_random < 0.5) + sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM); + } + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/ric1.wav"); + precache_sound("weapons/ric2.wav"); + precache_sound("weapons/ric3.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_crylink.qc b/qcsrc/server/w_crylink.qc index b95a7cef89..7f6062d3f6 100644 --- a/qcsrc/server/w_crylink.qc +++ b/qcsrc/server/w_crylink.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(CRYLINK, w_crylink, IT_CELLS, 6, WEP_FLAG_NORMAL | WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "crylink", "crylink", "Crylink"); #else +#ifdef SVQC .float gravity; .entity realowner; @@ -235,3 +236,32 @@ float w_crylink(float req) return TRUE; }; #endif +#ifdef CSQC +float w_crylink(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + org2 = w_org + w_backoff * 2; + if(w_deathtype & HITTYPE_SECONDARY) + { + pointparticles(particleeffectnum("crylink_impact"), org2, '0 0 0', 1); + if(!w_issilent) + sound(self, CHAN_PROJECTILE, "weapons/crylink_impact2.wav", VOL_BASE, ATTN_NORM); + } + else + { + pointparticles(particleeffectnum("crylink_impactbig"), org2, '0 0 0', 1); + if(!w_issilent) + sound(self, CHAN_PROJECTILE, "weapons/crylink_impact.wav", VOL_BASE, ATTN_NORM); + } + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/crylink_impact2.wav"); + precache_sound("weapons/crylink_impact.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_electro.qc b/qcsrc/server/w_electro.qc index c9e7d23c31..45168cdacf 100644 --- a/qcsrc/server/w_electro.qc +++ b/qcsrc/server/w_electro.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(ELECTRO, w_electro, IT_CELLS, 5, WEP_FLAG_NORMAL | WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "electro", "electro", "Electro"); #else +#ifdef SVQC .float electro_count; .float electro_secondarytime; @@ -317,3 +318,42 @@ float w_electro(float req) return TRUE; }; #endif +#ifdef CSQC +float w_electro(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + org2 = w_org + w_backoff * 6; + if(w_deathtype & HITTYPE_SECONDARY) + { + pointparticles(particleeffectnum("electro_ballexplode"), org2, '0 0 0', 1); + if(!w_issilent) + sound(self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM); + } + else + { + if(w_deathtype & HITTYPE_BOUNCE) + { + // this is sent as "primary (w_deathtype & HITTYPE_BOUNCE)" to distinguish it from (w_deathtype & HITTYPE_SECONDARY) bounced balls + pointparticles(particleeffectnum("electro_combo"), org2, '0 0 0', 1); + if(!w_issilent) + sound(self, CHAN_PROJECTILE, "weapons/electro_impact_combo.wav", VOL_BASE, ATTN_NORM); + } + else + { + pointparticles(particleeffectnum("electro_impact"), org2, '0 0 0', 1); + if(!w_issilent) + sound(self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM); + } + } + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/electro_impact.wav"); + precache_sound("weapons/electro_impact_combo.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_fireball.qc b/qcsrc/server/w_fireball.qc index 0462cd9018..d5c0b13f95 100644 --- a/qcsrc/server/w_fireball.qc +++ b/qcsrc/server/w_fireball.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(FIREBALL, w_fireball, IT_FUEL, 9, WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "fireball", "fireball", "Fireball"); #else +#ifdef SVQC .float bot_primary_fireballmooth; // whatever a mooth is .vector fireball_impactvec; .float fireball_primarytime; @@ -392,3 +393,30 @@ float w_fireball(float req) return TRUE; }; #endif +#ifdef CSQC +float w_fireball(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + if(w_deathtype & HITTYPE_SECONDARY) + { + // firemine goes out silently + } + else + { + org2 = w_org + w_backoff * 16; + pointparticles(particleeffectnum("fireball_explode"), org2, '0 0 0', 1); + if(!w_issilent) + sound(self, CHAN_PROJECTILE, "weapons/fireball_impact2.wav", VOL_BASE, ATTN_NORM * 0.25); // long range boom + } + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/fireball_impact.wav"); + precache_sound("weapons/fireball_impact2.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_grenadelauncher.qc b/qcsrc/server/w_grenadelauncher.qc index 251137401c..b340f76c90 100644 --- a/qcsrc/server/w_grenadelauncher.qc +++ b/qcsrc/server/w_grenadelauncher.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(GRENADE_LAUNCHER, w_glauncher, IT_ROCKETS, 4, WEP_FLAG_NORMAL | WEP_FLAG_CANCLIMB | WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "gl", "grenadelauncher", "Mortar"); #else +#ifdef SVQC void W_Grenade_Explode (void) { if(other.takedamage == DAMAGE_AIM) @@ -236,3 +237,22 @@ float w_glauncher(float req) return TRUE; }; #endif +#ifdef CSQC +float w_glauncher(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + org2 = w_org + w_backoff * 12; + pointparticles(particleeffectnum("grenade_explode"), org2, '0 0 0', 1); + if(!w_issilent) + sound(self, CHAN_PROJECTILE, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM); + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/grenade_impact.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_hagar.qc b/qcsrc/server/w_hagar.qc index 638e18bcc2..c95a90e5da 100644 --- a/qcsrc/server/w_hagar.qc +++ b/qcsrc/server/w_hagar.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(HAGAR, w_hagar, IT_ROCKETS, 8, WEP_FLAG_NORMAL | WEP_FLAG_CANCLIMB | WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "hagar", "hagar", "Hagar"); #else +#ifdef SVQC // NO bounce protection, as bounces are limited! void W_Hagar_Explode (void) { @@ -162,3 +163,31 @@ float w_hagar(float req) return TRUE; }; #endif +#ifdef CSQC +float w_hagar(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + org2 = w_org + w_backoff * 6; + pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1); + if(!w_issilent) + { + if (w_random<0.15) + sound(self, CHAN_PROJECTILE, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM); + else if (w_random<0.7) + sound(self, CHAN_PROJECTILE, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM); + else + sound(self, CHAN_PROJECTILE, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM); + } + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/hagexp1.wav"); + precache_sound("weapons/hagexp2.wav"); + precache_sound("weapons/hagexp3.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_hlac.qc b/qcsrc/server/w_hlac.qc index ecd30d7691..5fe75ab2ca 100644 --- a/qcsrc/server/w_hlac.qc +++ b/qcsrc/server/w_hlac.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(HLAC, w_hlac, IT_CELLS, 6, WEP_FLAG_NORMAL | WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "hlac", "hlac", "Heavy Laser Assault Cannon"); #else +#ifdef SVQC .float HLAC_bulletcounter; void W_HLAC_Touch (void) { @@ -213,3 +214,22 @@ float w_hlac(float req) return TRUE; }; #endif +#ifdef CSQC +float w_hlac(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + org2 = w_org + w_backoff * 6; + pointparticles(particleeffectnum("laser_impact"), org2, w_backoff * 1000, 1); + if(!w_issilent) + sound(self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM); + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/laserimpact.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_hook.qc b/qcsrc/server/w_hook.qc index 7b4eba094d..9e58683559 100644 --- a/qcsrc/server/w_hook.qc +++ b/qcsrc/server/w_hook.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(HOOK, w_hook, IT_CELLS|IT_FUEL, 0, WEP_FLAG_CANCLIMB | WEP_TYPE_SPLASH, 0, "hookgun", "hook", "Grappling Hook"); #else +#ifdef SVQC .float dmg; .float dmg_edge; .float dmg_radius; @@ -249,3 +250,22 @@ float w_hook(float req) return TRUE; }; #endif +#ifdef CSQC +float w_hook(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + org2 = w_org + w_backoff * 2; + pointparticles(particleeffectnum("hookbomb_explode"), org2, '0 0 0', 1); + if(!w_issilent) + sound(self, CHAN_PROJECTILE, "weapons/hookbomb_impact.wav", VOL_BASE, ATTN_NORM); + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/hookbomb_impact.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_laser.qc b/qcsrc/server/w_laser.qc index 4d749d0ba1..a17f2a4c54 100644 --- a/qcsrc/server/w_laser.qc +++ b/qcsrc/server/w_laser.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(LASER, w_laser, 0, 1, WEP_FLAG_NORMAL | WEP_FLAG_CANCLIMB | WEP_TYPE_SPLASH, 0, "laser", "laser", "Laser"); #else +#ifdef SVQC void(float imp) W_SwitchWeapon; void W_Laser_Touch (void) @@ -186,3 +187,22 @@ float w_laser(float req) return TRUE; }; #endif +#ifdef CSQC +float w_laser(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + org2 = w_org + w_backoff * 6; + pointparticles(particleeffectnum("laser_impact"), org2, w_backoff * 1000, 1); + if(!w_issilent) + sound(self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM); + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/laserimpact.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_minstanex.qc b/qcsrc/server/w_minstanex.qc index 00e8fd890a..f28c8581cc 100644 --- a/qcsrc/server/w_minstanex.qc +++ b/qcsrc/server/w_minstanex.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(MINSTANEX, w_minstanex, IT_CELLS, 7, WEP_FLAG_HIDDEN | WEP_FLAG_CANCLIMB | WEP_TYPE_HITSCAN, BOT_PICKUP_RATING_HIGH, "minstanex", "minstanex", "MinstaNex"); #else +#ifdef SVQC .float minstanex_lasthit; void W_MinstaNex_Attack (void) @@ -242,3 +243,22 @@ float w_minstanex(float req) return TRUE; }; #endif +#ifdef CSQC +float w_minstanex(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + org2 = w_org + w_backoff * 6; + pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1); + if(!w_issilent) + sound(self, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM); + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/neximpact.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_nex.qc b/qcsrc/server/w_nex.qc index 7a9103ccfa..c23a47b5d6 100644 --- a/qcsrc/server/w_nex.qc +++ b/qcsrc/server/w_nex.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(NEX, w_nex, IT_CELLS, 7, WEP_FLAG_NORMAL | WEP_TYPE_HITSCAN, BOT_PICKUP_RATING_HIGH, "nex", "nex", "Nex"); #else +#ifdef SVQC void SendCSQCNexBeamParticle() { vector v; v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos); @@ -80,3 +81,22 @@ float w_nex(float req) return TRUE; }; #endif +#ifdef CSQC +float w_nex(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + org2 = w_org + w_backoff * 6; + pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1); + if(!w_issilent) + sound(self, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM); + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/neximpact.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_porto.qc b/qcsrc/server/w_porto.qc index 55bbc51f8c..1ab117885b 100644 --- a/qcsrc/server/w_porto.qc +++ b/qcsrc/server/w_porto.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(PORTO, w_porto, 0, 0, WEP_TYPE_OTHER, 0, "porto" , "porto", "Port-O-Launch"); #else +#ifdef SVQC .entity porto_current; .vector porto_v_angle; // holds "held" view angles .float porto_v_angle_held; @@ -279,3 +280,18 @@ float w_porto(float req) return TRUE; }; #endif +#ifdef CSQC +float w_porto(float req) +{ + if(req == WR_IMPACTEFFECT) + { + print("Since when does Porto send DamageInfo?\n"); + } + else if(req == WR_PRECACHE) + { + // nothing to do + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_rocketlauncher.qc b/qcsrc/server/w_rocketlauncher.qc index 348a79c700..f6975b3b6a 100644 --- a/qcsrc/server/w_rocketlauncher.qc +++ b/qcsrc/server/w_rocketlauncher.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(ROCKET_LAUNCHER, w_rlauncher, IT_ROCKETS, 9, WEP_FLAG_NORMAL | WEP_FLAG_CANCLIMB | WEP_TYPE_SPLASH, BOT_PICKUP_RATING_HIGH, "rl", "rocketlauncher", "Rocket Launcher"); #else +#ifdef SVQC .float rl_release; .float rl_detonate_later; @@ -561,3 +562,22 @@ float w_rlauncher(float req) return TRUE; }; #endif +#ifdef CSQC +float w_rlauncher(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + org2 = w_org + w_backoff * 12; + pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1); + if(!w_issilent) + sound(self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/rocket_impact.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_seeker.qc b/qcsrc/server/w_seeker.qc index 83d615884c..3b23c21129 100644 --- a/qcsrc/server/w_seeker.qc +++ b/qcsrc/server/w_seeker.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(SEEKER, w_seeker, IT_ROCKETS, 9, WEP_FLAG_NORMAL | WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "seeker", "seeker", "T.A.G. Seeker"); #else +#ifdef SVQC //.float speed; = switchweapon //.float proxytime; = autoswitch //.float tl; = wait @@ -479,3 +480,75 @@ float w_seeker(float req) return TRUE; }; #endif +#ifdef CSQC +float w_seeker(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + org2 = w_org + w_backoff * 6; + if(w_deathtype & HITTYPE_SECONDARY) + { + pointparticles(particleeffectnum("flac_explode"), org2, '0 0 0', 1); + if(!w_issilent) + { + if (w_random<0.15) + sound(self, CHAN_PROJECTILE, "weapons/flacexp1.wav", 1, ATTN_NORM); + else if (w_random<0.7) + sound(self, CHAN_PROJECTILE, "weapons/flacexp2.wav", 1, ATTN_NORM); + else + sound(self, CHAN_PROJECTILE, "weapons/flacexp3.wav", 1, ATTN_NORM); + } + } + else + { + if(w_deathtype & HITTYPE_BOUNCE) + { + pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1); + if(!w_issilent) + { + if (w_random<0.15) + sound(self, CHAN_PROJECTILE, "weapons/tagexp1.wav", 1, ATTN_NORM); + else if (w_random<0.7) + sound(self, CHAN_PROJECTILE, "weapons/tagexp2.wav", 1, ATTN_NORM); + else + sound(self, CHAN_PROJECTILE, "weapons/tagexp3.wav", 1, ATTN_NORM); + } + } + else if(w_deathtype & HITTYPE_HEADSHOT) + { + if(!w_issilent) + sound(self, CHAN_PROJECTILE, "weapons/tag_impact.wav", 1, ATTN_NORM); + } + else + { + pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1); + if(!w_issilent) + { + if (w_random<0.15) + sound(self, CHAN_PROJECTILE, "weapons/seekerexp1.wav", 1, ATTN_NORM); + else if (w_random<0.7) + sound(self, CHAN_PROJECTILE, "weapons/seekerexp2.wav", 1, ATTN_NORM); + else + sound(self, CHAN_PROJECTILE, "weapons/seekerexp3.wav", 1, ATTN_NORM); + } + } + } + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/flacexp1.wav"); + precache_sound("weapons/flacexp2.wav"); + precache_sound("weapons/flacexp3.wav"); + precache_sound("weapons/seekerexp1.wav"); + precache_sound("weapons/seekerexp2.wav"); + precache_sound("weapons/seekerexp3.wav"); + precache_sound("weapons/tagexp1.wav"); + precache_sound("weapons/tagexp2.wav"); + precache_sound("weapons/tagexp3.wav"); + precache_sound("weapons/tag_impact.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_shotgun.qc b/qcsrc/server/w_shotgun.qc index 0b499f4832..512eb28e8c 100644 --- a/qcsrc/server/w_shotgun.qc +++ b/qcsrc/server/w_shotgun.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(SHOTGUN, w_shotgun, IT_SHELLS, 2, WEP_FLAG_NORMAL | WEP_TYPE_HITSCAN, BOT_PICKUP_RATING_LOW, "shotgun", "shotgun", "Shotgun"); #else +#ifdef SVQC void W_Shotgun_Attack (void) { float sc; @@ -148,3 +149,31 @@ float w_shotgun(float req) return TRUE; }; #endif +#ifdef CSQC +float w_shotgun(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + org2 = w_org + w_backoff * 2; + pointparticles(particleeffectnum("shotgun_impact"), org2, w_backoff * 1000, 1); + if(!w_issilent) + { + if(w_random < 0.05) + sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM); + else if(w_random < 0.1) + sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM); + else if(w_random < 0.2) + sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM); + } + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/ric1.wav"); + precache_sound("weapons/ric2.wav"); + precache_sound("weapons/ric3.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_tuba.qc b/qcsrc/server/w_tuba.qc index eab14f4f51..f3b9164915 100644 --- a/qcsrc/server/w_tuba.qc +++ b/qcsrc/server/w_tuba.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(TUBA, w_tuba, 0, 1, WEP_FLAG_HIDDEN | WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "tuba", "tuba", "@!#%'n Tuba"); #else +#ifdef SVQC //#define TUBA_NOTE(n) strcat("weapons/tuba_note", ftos(n), ".wav") .float tuba_notecount; .entity tuba_note; @@ -251,3 +252,18 @@ float w_tuba(float req) return TRUE; }; #endif +#ifdef CSQC +float w_tuba(float req) +{ + if(req == WR_IMPACTEFFECT) + { + // nothing to do here; particles of tuba are handled differently + } + else if(req == WR_PRECACHE) + { + // nothing to do + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/server/w_uzi.qc b/qcsrc/server/w_uzi.qc index 4887f803d3..5879b00b8c 100644 --- a/qcsrc/server/w_uzi.qc +++ b/qcsrc/server/w_uzi.qc @@ -1,6 +1,7 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON(UZI, w_uzi, IT_NAILS, 3, WEP_FLAG_NORMAL | WEP_TYPE_HITSCAN, BOT_PICKUP_RATING_MID, "uzi", "uzi", "Machine Gun"); #else +#ifdef SVQC // leilei's fancy muzzleflash stuff void W_Uzi_Flash_Go() { if (self.frame > 10){ @@ -137,3 +138,29 @@ float w_uzi(float req) return TRUE; }; #endif +#ifdef CSQC +float w_uzi(float req) +{ + if(req == WR_IMPACTEFFECT) + { + vector org2; + org2 = w_org + w_backoff * 2; + pointparticles(particleeffectnum("machinegun_impact"), org2, w_backoff * 1000, 1); + if(!w_issilent) + if(w_random < 0.05) + sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM); + else if(w_random < 0.1) + sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM); + else if(w_random < 0.2) + sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM); + } + else if(req == WR_PRECACHE) + { + precache_sound("weapons/ric1.wav"); + precache_sound("weapons/ric2.wav"); + precache_sound("weapons/ric3.wav"); + } + return TRUE; +} +#endif +#endif diff --git a/qcsrc/warpzonelib/server.qc b/qcsrc/warpzonelib/server.qc index 7b4c09ccb7..f2b3581887 100644 --- a/qcsrc/warpzonelib/server.qc +++ b/qcsrc/warpzonelib/server.qc @@ -321,7 +321,7 @@ void WarpZone_InitStep_UpdateTransform() tex = getsurfacetexture(self, i_s); if not(tex) break; // this is beyond the last one - if(tex != "textures/common/warpzone") + if(tex == "textures/common/trigger") continue; n_t = getsurfacenumtriangles(self, i_s); for(i_t = 0; i_t < n_t; ++i_t) diff --git a/sound/announcer/default/welcome.ogg b/sound/announcer/default/welcome.ogg deleted file mode 100644 index 090dc12272..0000000000 Binary files a/sound/announcer/default/welcome.ogg and /dev/null differ diff --git a/textures/gak.tga b/textures/gak.tga new file mode 100644 index 0000000000..7a6075fbda Binary files /dev/null and b/textures/gak.tga differ diff --git a/textures/gak_gloss.tga b/textures/gak_gloss.tga new file mode 100644 index 0000000000..43f9d42961 Binary files /dev/null and b/textures/gak_gloss.tga differ diff --git a/textures/gak_norm.tga b/textures/gak_norm.tga new file mode 100644 index 0000000000..0df3a07e7e Binary files /dev/null and b/textures/gak_norm.tga differ diff --git a/textures/gak_shirt.tga b/textures/gak_shirt.tga new file mode 100644 index 0000000000..4f9d05336f Binary files /dev/null and b/textures/gak_shirt.tga differ diff --git a/textures/gakarmor.tga b/textures/gakarmor.tga new file mode 100644 index 0000000000..b570c017d8 Binary files /dev/null and b/textures/gakarmor.tga differ diff --git a/textures/gakarmor_gloss.tga b/textures/gakarmor_gloss.tga new file mode 100644 index 0000000000..137f0e59da Binary files /dev/null and b/textures/gakarmor_gloss.tga differ diff --git a/textures/gakarmor_norm.tga b/textures/gakarmor_norm.tga new file mode 100644 index 0000000000..910c453417 Binary files /dev/null and b/textures/gakarmor_norm.tga differ diff --git a/textures/gakarmor_pants.tga b/textures/gakarmor_pants.tga new file mode 100644 index 0000000000..3bfa2f8b3b Binary files /dev/null and b/textures/gakarmor_pants.tga differ diff --git a/textures/gakarmor_shirt.tga b/textures/gakarmor_shirt.tga new file mode 100644 index 0000000000..ce4b6d6d3f Binary files /dev/null and b/textures/gakarmor_shirt.tga differ