Merge branch 'master' into fruitiex/newpanelhud_stable
authorFruitieX <rasse@rasse-lappy.localdomain>
Mon, 7 Jun 2010 16:01:58 +0000 (19:01 +0300)
committerFruitieX <rasse@rasse-lappy.localdomain>
Mon, 7 Jun 2010 16:01:58 +0000 (19:01 +0300)
75 files changed:
defaultXonotic.cfg
gfx/loading.tga
models/misc/chatbubble.spr_0.tga
models/player/gak.iqm [new file with mode: 0644]
models/player/gak.iqm.framegroups [new file with mode: 0644]
models/player/gak.iqm_0.tga [new file with mode: 0644]
models/player/gak.iqm_0.txt [new file with mode: 0644]
models/player/gakarmored.iqm [new file with mode: 0644]
models/player/gakarmored.iqm.framegroups [new file with mode: 0644]
models/player/gakarmored.iqm_0.tga [new file with mode: 0644]
models/player/gakarmored.iqm_0.txt [new file with mode: 0644]
models/player/gakmasked.iqm [new file with mode: 0644]
models/player/gakmasked.iqm.framegroups [new file with mode: 0644]
models/player/gakmasked.iqm_0.tga [new file with mode: 0644]
models/player/gakmasked.iqm_0.txt [new file with mode: 0644]
physics10.cfg
physics11.cfg
physics151.cfg
physics151b.cfg
physics16rc1.cfg
physics20.cfg
physics25.cfg
physics26.cfg
physicsCPMA.cfg
physicsHavoc.cfg
physicsLeeStricklin.cfg
physicsLzd.cfg
physicsNoQWBunny.cfg
physicsQ.cfg
physicsQ2.cfg
physicsQ2a.cfg
physicsQ3.cfg
physicsQBF.cfg
physicsQBFplus.cfg
physicsSamual.cfg
physicsWarsow.cfg
physicsWarsowClassicBunny.cfg
physicsWarsowDev.cfg
physicsXPM.cfg
qcsrc/client/damage.qc
qcsrc/client/progs.src
qcsrc/common/constants.qh
qcsrc/common/items.qh
qcsrc/server/cl_physics.qc
qcsrc/server/defs.qh
qcsrc/server/g_world.qc
qcsrc/server/sv_main.qc
qcsrc/server/w_campingrifle.qc
qcsrc/server/w_crylink.qc
qcsrc/server/w_electro.qc
qcsrc/server/w_fireball.qc
qcsrc/server/w_grenadelauncher.qc
qcsrc/server/w_hagar.qc
qcsrc/server/w_hlac.qc
qcsrc/server/w_hook.qc
qcsrc/server/w_laser.qc
qcsrc/server/w_minstanex.qc
qcsrc/server/w_nex.qc
qcsrc/server/w_porto.qc
qcsrc/server/w_rocketlauncher.qc
qcsrc/server/w_seeker.qc
qcsrc/server/w_shotgun.qc
qcsrc/server/w_tuba.qc
qcsrc/server/w_uzi.qc
qcsrc/warpzonelib/server.qc
sound/announcer/default/welcome.ogg [deleted file]
textures/gak.tga [new file with mode: 0644]
textures/gak_gloss.tga [new file with mode: 0644]
textures/gak_norm.tga [new file with mode: 0644]
textures/gak_shirt.tga [new file with mode: 0644]
textures/gakarmor.tga [new file with mode: 0644]
textures/gakarmor_gloss.tga [new file with mode: 0644]
textures/gakarmor_norm.tga [new file with mode: 0644]
textures/gakarmor_pants.tga [new file with mode: 0644]
textures/gakarmor_shirt.tga [new file with mode: 0644]

index 0ab71adab87e0ac1e3180fd599cc7c5c0f3c52b0..3f01cc88134a24ad6c3410221b938c4d33ec9b04 100644 (file)
@@ -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"
index 1a84a05f9f24ef299fc6b08f0647ce6be876f466..a5d35489ac6f47c6556fd91bf47b63c2f3586034 100644 (file)
Binary files a/gfx/loading.tga and b/gfx/loading.tga differ
index c7a1ec7d407b9e9ac1653160eba20fb5dbf0c87a..c1858ef03f7d1f7905ba87c063f725b855731e62 100644 (file)
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 (file)
index 0000000..22a1975
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 (file)
index 0000000..71128c6
--- /dev/null
@@ -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 (file)
index 0000000..093b7f0
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 (file)
index 0000000..8aa7419
--- /dev/null
@@ -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 (file)
index 0000000..9df6bdb
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 (file)
index 0000000..71128c6
--- /dev/null
@@ -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 (file)
index 0000000..b4a58ea
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 (file)
index 0000000..06ff355
--- /dev/null
@@ -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 (file)
index 0000000..275953d
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 (file)
index 0000000..71128c6
--- /dev/null
@@ -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 (file)
index 0000000..40d2958
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 (file)
index 0000000..aff4f75
--- /dev/null
@@ -0,0 +1,7 @@
+name Gak Masked
+species alien
+sex Male
+weight 87
+age 18
+
+Mediumweight Xonotic Solider
index 16331779c3bc3678daf5b37be4d32614c7093314..4631d5ea7b5f6d129267ab4858387545ea97fd76 100644 (file)
@@ -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
index 1a7afbd5c5bf893ec66348f8125c17e844749a53..8c8219af5fa0fd30a05e4f178a865a6e1a68690c 100644 (file)
@@ -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
index 52f2536da2a85b5f9a022371451952e21ecc962f..9707f6f7ce6002d736d5c00b75256921d162f1eb 100644 (file)
@@ -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
index 325e7f6623b4c895920e4943c3a07692813bb88a..475875b1a2f316341c8c975580d58188292addc1 100644 (file)
@@ -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
index 751e527df3f1ad914903bda55b8408e455c3e8cc..68a8f198ef6e48d074efa4aa153b53f110b7b9de 100644 (file)
@@ -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
index cf3f9110ba9400c4691036baf5fb9b94942a2817..b2e056ee5a9e092fd0dc011683ccdae0ac5e6449 100644 (file)
@@ -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
index ed1a85446cea1f6d187f9327b9bcb6f35bd6835e..85e4841cd127b739ddfcfc2e757e020787557e53 100644 (file)
@@ -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
index 34ab3cf940c238601daea8ce0d9796306b035c86..0e4de396e70cdcb29b59e143a6e70ca021ec9edf 100644 (file)
@@ -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
index 7c985bfd69052e64e54a02a194cdc5dce673cf13..d572e6d97f5606864aa6e57f4edb976c10596ef5 100644 (file)
@@ -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
index cc90edcecfcb9f09451cb0fc775ca847bf8231f7..eb63775623b486ae5e77ed5a0cd8c64e6fd5face 100644 (file)
@@ -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
index 446da86abfb44aee6a55069d149cf3f05cb77467..4a959db3e94685a9b405861c8ef01f7d421d411e 100644 (file)
@@ -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
index 4a73e899387da62e3cabe570f60a7864d1b92de8..2b437d3443a0dd62dfcad4602064d7de51c07dd2 100644 (file)
@@ -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
index 6920d764a8cfa12311f068b09bd6c6e30007d756..d70bc1bde1fa2a981a5ac98d55f45aa559ea9a18 100644 (file)
@@ -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
index 5839a6137796a36e93f392742bc621388606cc98..ea8e1acf7bdd167e971f3a30dde9ca6fdeafb571 100644 (file)
@@ -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
index e6c1ea3eefae6269c791eb058e05ccbe82ef939b..1d08ae8c7400b13cac0c0b1ca23207e8d10ce3b3 100644 (file)
@@ -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
index 03e4008dc8d898cce34fec23575a238b7a6e971e..7409ae4be2c327173ea97be61ab07de43d7863cd 100644 (file)
@@ -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
index 37643ed9afb79619b380005bcffe38a0c4bb59ce..1951becf20abd05d24685a6e51b813dabe592b23 100644 (file)
@@ -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
index 8b677e6cd71ade18726037b6f631db95e7c83b80..4bbb9be2d4f91eab389b0653e9fcf12e83743edd 100644 (file)
@@ -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
index 58b2a45d5a7e8887c2cd106b11bb5afab9f297fd..6c17ad683b7905284ec5ff9d65e94c41e8c36453 100644 (file)
@@ -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
index 8d2fa30a050cb4ab2dd7f41b91f56fe2c5c01ee0..e03363a088ba30a3d59e1c9d8eccbefa1f5595d0 100644 (file)
@@ -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
index 1c87870a1934e7b8500fb4ce4d0238709d90dc1e..b1b0655cbc863b9a7394076401300b61cf3579fe 100644 (file)
@@ -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
index e73204d662f2d3bf09e93baeb9b86b6486a737d6..06e7c1a575c61ffba43a5382974affbc32128ef6 100644 (file)
@@ -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
index f63f67e11110e3a87a561c5615f5a011e5d6d5d7..cb07a488180082f927575f3c39ee515f9aaf648b 100644 (file)
@@ -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
index 1737f1aeaf163c44ea0d27b16df6d5c2c9c1aff8..2a60b65178257fbea2efabc866eb59866fb6d780 100644 (file)
@@ -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
index 9e90bee2240161c7293450712830d826fac63b53..1b0138f36b0212f950ebf241c5de37892ae91bba 100644 (file)
@@ -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);
 }
index ade8777247faa158c74630e492534a3036eed434..5e94475ce23fbff63ae8831c0972bb469c990357 100644 (file)
@@ -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
index 7181f020b2a8ec36cb58137b11dc73eca82acefb..ed2334bbd79091b882501208179da47397e42512 100644 (file)
@@ -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
index 3900b08deabdf8c510daeeb94aad7b7fe3f50dcf..531a3115baaa8ae9b83a4bff870f90207f3ec233 100644 (file)
@@ -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"
index 0051d8759a4d9a3a9384152d53e848d0a8427dc4..3a405c40be8f52fe179c71cb631ec044da90213c 100644 (file)
@@ -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);
index fec2a0976f196e2f1e29c154b1f86587f57057b9..74b4ecea88c17683996b4b65aacca357f00b10fb 100644 (file)
@@ -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);
 
index e969146ca40e145ed8e73e7e04a20f1f09e94330..f873ea7c6b00331ed188b2bf1bf3f030f165fc4f 100644 (file)
@@ -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);
 
index f4cc8744518593fcb456907ece1c026174ab059e..45320f2db526f0303cb0f3e9d8aed3181e78c9e7 100644 (file)
@@ -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");
index 8f6a9104946ce3f6dc263191d5520853f1065e57..c3c9d52f9b43926370c8af33e53e78714e69e18e 100644 (file)
@@ -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
index b95a7cef897645479054eba22b5e7d79e269a2c8..7f6062d3f6a65bd262f0278a5b59f1ee31aa2b42 100644 (file)
@@ -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
index c9e7d23c31eff0682d56453b594b2cfdbd115481..45168cdacf66fcf60d685f5521ec16f64e2a25aa 100644 (file)
@@ -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
index 0462cd9018b256f0febe222f9e415b3c164e3a2c..d5c0b13f950fcc72542db32c4cd6a11c917ba122 100644 (file)
@@ -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
index 251137401c4a0580d934da6f6b4949313131ed59..b340f76c90bc79f2eaa85c0f83076ddddbadce3e 100644 (file)
@@ -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
index 638e18bcc261f5f718de326eb40647d3640f8e6a..c95a90e5dae9d78cf135fc143ea3c69b1f75cebe 100644 (file)
@@ -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
index ecd30d76911d0b8f016eada99910014eb7cf9d31..5fe75ab2ca46bfbdfa0828b564b68aa419e8c060 100644 (file)
@@ -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
index 7b4eba094df0d558318942fbb8879947102f6097..9e5868355991106d4b48cd6feae4171c2903802d 100644 (file)
@@ -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
index 4d749d0ba1c36bdcdc792883cee07b0d1652cc0e..a17f2a4c54031886124a3b2bfec6a2c9bf971fe8 100644 (file)
@@ -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
index 00e8fd890a0ea2f2a7bf22ac9328fc52daf9ac3c..f28c8581cc5ee3c6fa2550561a6c994f8fcd55a5 100644 (file)
@@ -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
index 7a9103ccfabf2cd619919b4863fbfcdc9a1ccaa9..c23a47b5d668fbe1b000321698f4404e5dcc260d 100644 (file)
@@ -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
index 55bbc51f8c4bc44624187cabe4fcdba3ddc74cce..1ab117885b02dde03a068e511da43c681403e366 100644 (file)
@@ -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
index 348a79c700630c8cd78663c1014ea95394e897a0..f6975b3b6a0d13d6903830adc2526c8c9940110f 100644 (file)
@@ -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
index 83d615884c89e2b81473c279404197acbd65473b..3b23c211294895996cfd5ca80567b4f5b1fc271d 100644 (file)
@@ -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
index 0b499f4832586cc8b5c03e6688d00c519a7adcd6..512eb28e8ca1800407a4c838cc02c175d363c805 100644 (file)
@@ -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
index eab14f4f516d62da409e3c2ada398c8afb81b9ce..f3b91649159d9aef03eda4e9685cd140f036d184 100644 (file)
@@ -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
index 4887f803d36e518153bf69de39a14378f1b6c982..5879b00b8c029a9ddb516d8e7fc5ae9c65108559 100644 (file)
@@ -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
index 7b4c09ccb7cb17a9ee2b16b47094e2c5b302e6d4..f2b3581887536234d6614690906e444dd27f2bd9 100644 (file)
@@ -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 (file)
index 090dc12..0000000
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 (file)
index 0000000..7a6075f
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 (file)
index 0000000..43f9d42
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 (file)
index 0000000..0df3a07
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 (file)
index 0000000..4f9d053
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 (file)
index 0000000..b570c01
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 (file)
index 0000000..137f0e5
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 (file)
index 0000000..910c453
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 (file)
index 0000000..3bfa2f8
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 (file)
index 0000000..ce4b6d6
Binary files /dev/null and b/textures/gakarmor_shirt.tga differ