Merge commit 'origin/master' into divVerent/tag_seeker
authorRudolf Polzer <divverent@alientrap.org>
Sat, 8 May 2010 18:43:45 +0000 (20:43 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Sat, 8 May 2010 18:43:45 +0000 (20:43 +0200)
165 files changed:
.gitattributes [new file with mode: 0644]
balance.cfg
balance25.cfg
balanceNexrun.cfg [deleted file]
balanceSamual.cfg
balanceXPM.cfg [new file with mode: 0644]
common-spog.pk3 [deleted file]
config_update.cfg
defaultXonotic.cfg
effectinfo.txt
font-dejavu.pk3dir/font-dejavu.cfg [deleted file]
font-dejavu.pk3dir/fonts/DejaVuSans-Bold.ttf [deleted file]
font-dejavu.pk3dir/fonts/DejaVuSansMono.ttf [deleted file]
gfx/menu/wickedx/background.tga [new file with mode: 0644]
gfx/menu/wickedx/background_ingame.tga [new file with mode: 0644]
gfx/menu/wickedx/background_l2.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbutton_c.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbutton_d.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbutton_f.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbutton_n.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbuttongray_c.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbuttongray_d.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbuttongray_f.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbuttongray_n.tga [new file with mode: 0644]
gfx/menu/wickedx/border.tga [new file with mode: 0644]
gfx/menu/wickedx/button_c.tga [new file with mode: 0644]
gfx/menu/wickedx/button_d.tga [new file with mode: 0644]
gfx/menu/wickedx/button_f.tga [new file with mode: 0644]
gfx/menu/wickedx/button_n.tga [new file with mode: 0644]
gfx/menu/wickedx/buttongray_c.tga [new file with mode: 0644]
gfx/menu/wickedx/buttongray_d.tga [new file with mode: 0644]
gfx/menu/wickedx/buttongray_f.tga [new file with mode: 0644]
gfx/menu/wickedx/buttongray_n.tga [new file with mode: 0644]
gfx/menu/wickedx/charmap.tga [new file with mode: 0755]
gfx/menu/wickedx/charmapbutton.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_c0.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_c1.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_d0.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_d1.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_f0.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_f1.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_n0.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_n1.tga [new file with mode: 0644]
gfx/menu/wickedx/checkmark.tga [new file with mode: 0644]
gfx/menu/wickedx/closebutton_c.tga [new file with mode: 0644]
gfx/menu/wickedx/closebutton_f.tga [new file with mode: 0644]
gfx/menu/wickedx/closebutton_n.tga [new file with mode: 0644]
gfx/menu/wickedx/color.tga [new file with mode: 0755]
gfx/menu/wickedx/colorbutton_c.tga [new file with mode: 0644]
gfx/menu/wickedx/colorbutton_f.tga [new file with mode: 0644]
gfx/menu/wickedx/colorbutton_n.tga [new file with mode: 0755]
gfx/menu/wickedx/colorpicker.tga [new file with mode: 0755]
gfx/menu/wickedx/colorpicker_m.tga [new file with mode: 0755]
gfx/menu/wickedx/crosshairbutton_c.tga [new file with mode: 0644]
gfx/menu/wickedx/crosshairbutton_d.tga [new file with mode: 0755]
gfx/menu/wickedx/crosshairbutton_f.tga [new file with mode: 0644]
gfx/menu/wickedx/crosshairbutton_n.tga [new file with mode: 0755]
gfx/menu/wickedx/cursor.tga [new file with mode: 0644]
gfx/menu/wickedx/inputbox_f.tga [new file with mode: 0644]
gfx/menu/wickedx/inputbox_n.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_c0.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_c1.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_d0.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_d1.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_f0.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_f1.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_n0.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_n1.tga [new file with mode: 0644]
gfx/menu/wickedx/scrollbar_c.tga [new file with mode: 0644]
gfx/menu/wickedx/scrollbar_f.tga [new file with mode: 0644]
gfx/menu/wickedx/scrollbar_n.tga [new file with mode: 0644]
gfx/menu/wickedx/scrollbar_s.tga [new file with mode: 0644]
gfx/menu/wickedx/skinpreview.jpg [new file with mode: 0755]
gfx/menu/wickedx/skinvalues.txt [new file with mode: 0755]
gfx/menu/wickedx/slider_c.tga [new file with mode: 0644]
gfx/menu/wickedx/slider_d.tga [new file with mode: 0644]
gfx/menu/wickedx/slider_f.tga [new file with mode: 0644]
gfx/menu/wickedx/slider_n.tga [new file with mode: 0644]
gfx/menu/wickedx/slider_s.tga [new file with mode: 0644]
gfx/menu/wickedx/tooltip.tga [new file with mode: 0644]
models/monsters/zombie.dpm.framegroups
models/turrets/walker_body.md3.framegroups
models/vehicles/spiderbot.dpm.framegroups
monster_zombie.cfg
particles/particlefont-template.png
particles/particlefont-template.txt [new file with mode: 0644]
particles/particlefont.tga
particles/particlefont.txt
physics10.cfg
physics11.cfg
physics151.cfg
physics151b.cfg
physics16rc1.cfg
physics20.cfg
physics25.cfg
physics26.cfg
physicsCPMA.cfg
physicsHavoc.cfg
physicsLeeStricklin.cfg [new file with mode: 0644]
physicsLzd.cfg
physicsNexrun.cfg [deleted file]
physicsNexrun_old.cfg [deleted file]
physicsNoQWBunny.cfg
physicsQ.cfg
physicsQ2.cfg
physicsQ2a.cfg
physicsQ3.cfg
physicsQBF.cfg
physicsQBFplus.cfg
physicsSamual.cfg
physicsWarsow.cfg
physicsWarsowClassicBunny.cfg
physicsWarsowDev.cfg
physicsXPM.cfg [new file with mode: 0644]
qcsrc/client/Main.qc
qcsrc/client/View.qc
qcsrc/client/csqc_builtins.qc
qcsrc/client/damage.qc
qcsrc/client/gibs.qc
qcsrc/client/main.qh
qcsrc/client/progs.src
qcsrc/client/projectile.qc
qcsrc/client/sbar.qc
qcsrc/client/target_music.qc [new file with mode: 0644]
qcsrc/common/constants.qh
qcsrc/common/mapinfo.qc
qcsrc/menu/xonotic/dialog_settings_audio.c
qcsrc/server/cl_client.qc
qcsrc/server/cl_physics.qc
qcsrc/server/cl_player.qc
qcsrc/server/csqcprojectile.qc
qcsrc/server/extensions.qh
qcsrc/server/g_damage.qc
qcsrc/server/g_tetris.qc
qcsrc/server/g_triggers.qc
qcsrc/server/g_world.qc
qcsrc/server/monsters/monster_zombie.qc
qcsrc/server/mutators/base.qh
qcsrc/server/pathlib/debug.qc
qcsrc/server/pathlib/expandnode.qc
qcsrc/server/pathlib/main.qc
qcsrc/server/pathlib/movenode.qc
qcsrc/server/pathlib/path_waypoint.qc [new file with mode: 0644]
qcsrc/server/pathlib/pathlib.qh
qcsrc/server/pathlib/utility.qc
qcsrc/server/progs.src
qcsrc/server/scores.qc
qcsrc/server/sv_main.qc
qcsrc/server/t_items.qc
qcsrc/server/target_music.qc [new file with mode: 0644]
qcsrc/server/target_spawn.qc
qcsrc/server/w_fireball.qc
qcsrc/server/w_grenadelauncher.qc
qcsrc/warpzonelib/common.qc
scripts/electro.shader [new file with mode: 0644]
scripts/fireball.shader [new file with mode: 0644]
scripts/flags.shader [new file with mode: 0644]
scripts/hlac.shader [new file with mode: 0644]
scripts/onslaught.shader [new file with mode: 0644]
scripts/portals.shader [new file with mode: 0644]
scripts/shotgun.shader [new file with mode: 0644]
scripts/spiderbot.shader [new file with mode: 0644]
scripts/teamfx.shader [new file with mode: 0644]
scripts/tuba.shader [new file with mode: 0644]
update-cvarcount.sh

diff --git a/.gitattributes b/.gitattributes
new file mode 100644 (file)
index 0000000..fb9e9b1
--- /dev/null
@@ -0,0 +1,179 @@
+*.7z -crlf -diff
+*.aft crlf=input
+*.aliases crlf=input
+all crlf=input
+*.animinfo crlf=input
+*.aps -crlf -diff
+*.ase -crlf
+*.bat -crlf
+*.bgs crlf=input
+*.blend -crlf -diff
+*.bmp -crlf -diff
+branch-manager crlf=input
+BSDmakefile crlf=input
+bsp2ent crlf=input
+*.bsp -crlf -diff
+*.cache -crlf -diff
+*.cbp -crlf
+*.cbp -crlf -diff
+*.c crlf=input
+*.cfg crlf=input
+*.cg crlf=input
+ChangeLog crlf=input
+CHANGES crlf=input
+COMPILING crlf=input
+*.conf crlf=input
+CONTRIBUTORS crlf=input
+COPYING crlf=input
+*.cpp crlf=input
+*.css crlf=input
+Current -crlf -diff
+*.cvsignore crlf=input
+*.cvswrappers crlf=input
+*.db -crlf -diff
+*.default crlf=input
+*.def crlf=input
+*.dem -crlf -diff
+*.dev -crlf
+*.dll -crlf -diff
+DOCS -crlf -diff
+*.dot crlf=input
+DoxyConfig crlf=input
+Doxyfile crlf=input
+*.doxygen crlf=input
+*.dpm -crlf -diff
+*.dsp -crlf
+*.dsw -crlf
+*.dtd crlf=input
+*.dylib -crlf -diff
+*.EncoderPlugin crlf=input
+*.ent -crlf
+*.form crlf=input
+*.framegroups crlf=input
+*.game crlf=input
+gendox crlf=input
+gendoxfunctions crlf=input
+genDoxyfile crlf=input
+*.gif -crlf -diff
+*.gitattributes crlf=input
+git-branch-manager crlf=input
+git-filter-index crlf=input
+git-filter-repository crlf=input
+*.gitignore crlf=input
+git-pullall crlf=input
+git-split-repository crlf=input
+git-svn-checkout crlf=input
+git-svn-update crlf=input
+git-update-octopus crlf=input
+*.glp crlf=input
+*.glsl crlf=input
+GPL crlf=input
+*.hardwired crlf=input
+*.h crlf=input
+*.hs crlf=input
+*.html crlf=input
+*.html-part crlf=input
+*.icns -crlf -diff
+*.ico -crlf -diff
+*.idsoftware crlf=input
+*.inc crlf=input
+*.instantaction crlf=input
+*.java crlf=input
+*.jhm crlf=input
+*.jnlp crlf=input
+*.jpg -crlf -diff
+*.jsmooth crlf=input
+LGPL crlf=input
+LICENSE crlf=input
+*.lmp -crlf -diff
+*.loaders crlf=input
+*.lso -crlf -diff
+makefile crlf=input
+Makefile crlf=input
+*.makespr32 crlf=input
+makespr32 crlf=input
+*.map -crlf
+*.mapinfo crlf=input
+*.m crlf=input
+*.md3 -crlf -diff
+*.md5anim -crlf
+*.md5mesh -crlf
+*.mdl -crlf -diff
+*.med crlf=input
+*.mf crlf=input
+*.mid -crlf -diff
+*.mk crlf=input
+*.mmpz -crlf -diff
+*.modinfo crlf=input
+*.modules crlf=input
+nexuiz-map-compiler crlf=input
+nexuiz-osx-agl crlf=input
+nexuiz-osx-sdl crlf=input
+*.nib -crlf
+*.obj -crlf
+OFFSETS -crlf -diff
+*.ogg -crlf -diff
+*.options crlf=input
+pangorc crlf=input
+*.patch crlf=input
+*.patchsets crlf=input
+*.pcx -crlf -diff
+*.pk3 -crlf -diff
+PkgInfo crlf=input
+*.pl crlf=input
+*.plist crlf=input
+*.pm crlf=input
+*.png -crlf -diff
+POSITIONS -crlf -diff
+*.proj -crlf
+*.properties crlf=input
+*.psd -crlf -diff
+*.py crlf=input
+*.q3map1 crlf=input
+*.qc crlf=input
+*.qdt crlf=input
+*.qh crlf=input
+*.rb crlf=input
+*.rc2 crlf=input
+*.rc -crlf
+*.readme crlf=input
+README crlf=input
+*.rtlights -crlf -diff
+SCHEMA crlf=input
+*.scm crlf=input
+SDL -crlf -diff
+SDLMain.m crlf=input
+*.shader crlf=input
+*.sh crlf=input
+*.skin crlf=input
+*.sln -crlf
+*.sounds crlf=input
+*.sp2 -crlf -diff
+*.spr32 -crlf -diff
+*.spr -crlf -diff
+*.src crlf=input
+*.strings crlf=input
+*.strip crlf=input
+strip crlf=input
+*.svg -crlf -diff
+*.TAB -crlf -diff
+*.tga -crlf -diff
+TMAP -crlf -diff
+todo crlf=input
+TODO crlf=input
+*.ttf -crlf -diff
+*.TTF -crlf -diff
+*.txt crlf=input
+*.TXT crlf=input
+*.vcproj -crlf
+*.wav -crlf -diff
+*.waypoints -crlf -diff
+*.width crlf=input
+*.workspace -crlf
+*.xcf -crlf -diff
+*.xlink crlf=input
+*.xml crlf=input
+*.xpm crlf=input
+*.zip -crlf -diff
+zipdiff crlf=input
+*.zym -crlf -diff
index 4d38feb..dc4b654 100644 (file)
@@ -311,6 +311,8 @@ set g_balance_grenadelauncher_secondary_animtime 0.3
 set g_balance_grenadelauncher_secondary_ammo 2
 set g_balance_grenadelauncher_secondary_health 70
 set g_balance_grenadelauncher_secondary_damageforcescale 4
+set g_balance_grenadelauncher_secondary_bouncefactor 0.5
+set g_balance_grenadelauncher_secondary_bouncestop 0.075
 // }}}
 // {{{ electro
 set g_balance_electro_lightning 0
@@ -555,41 +557,41 @@ set g_balance_tuba_radius 200
 set g_balance_tuba_force 40
 // }}}
 // {{{ fireball
-set g_balance_fireball_primary_ammo 5
-set g_balance_fireball_primary_animtime 0.3
-set g_balance_fireball_primary_damage 40
+set g_balance_fireball_primary_ammo 40
+set g_balance_fireball_primary_animtime 0.15
+set g_balance_fireball_primary_bfgdamage 100
+set g_balance_fireball_primary_bfgforce 0
+set g_balance_fireball_primary_bfgradius 1000
+set g_balance_fireball_primary_damage 200
 set g_balance_fireball_primary_damageforcescale 4
-set g_balance_fireball_primary_damagetime 5
-set g_balance_fireball_primary_force 100
+set g_balance_fireball_primary_edgedamage 0
+set g_balance_fireball_primary_force 700
+set g_balance_fireball_primary_health 50
 set g_balance_fireball_primary_laserburntime 0.5
-set g_balance_fireball_primary_laserdamage 30
+set g_balance_fireball_primary_laserdamage 80
 set g_balance_fireball_primary_laseredgedamage 20
-set g_balance_fireball_primary_laserradius 110
-set g_balance_fireball_primary_lifetime 7
-set g_balance_fireball_primary_refire 2
-set g_balance_fireball_primary_speed 900
-set g_balance_fireball_primary_speed_up 100
-set g_balance_fireball_primary_speed_z 0
+set g_balance_fireball_primary_laserradius 256
+set g_balance_fireball_primary_lifetime 15
+set g_balance_fireball_primary_radius 200
+set g_balance_fireball_primary_refire 5
+set g_balance_fireball_primary_refire2 0
+set g_balance_fireball_primary_speed 650
 set g_balance_fireball_primary_spread 0
-set g_balance_fireball_secondary_ammo 25
-set g_balance_fireball_secondary_animtime 0.15
-set g_balance_fireball_secondary_bfgdamage 100
-set g_balance_fireball_secondary_bfgforce 500
-set g_balance_fireball_secondary_bfgradius 750
-set g_balance_fireball_secondary_damage 150
+set g_balance_fireball_secondary_ammo 5
+set g_balance_fireball_secondary_animtime 0.3
+set g_balance_fireball_secondary_damage 40
 set g_balance_fireball_secondary_damageforcescale 4
-set g_balance_fireball_secondary_edgedamage 0
-set g_balance_fireball_secondary_force 700
-set g_balance_fireball_secondary_health 50
+set g_balance_fireball_secondary_damagetime 5
+set g_balance_fireball_secondary_force 100
 set g_balance_fireball_secondary_laserburntime 0.5
 set g_balance_fireball_secondary_laserdamage 30
 set g_balance_fireball_secondary_laseredgedamage 20
-set g_balance_fireball_secondary_laserradius 256
-set g_balance_fireball_secondary_lifetime 15
-set g_balance_fireball_secondary_radius 200
-set g_balance_fireball_secondary_refire 0
-set g_balance_fireball_secondary_refire2 4
-set g_balance_fireball_secondary_speed 650
+set g_balance_fireball_secondary_laserradius 110
+set g_balance_fireball_secondary_lifetime 7
+set g_balance_fireball_secondary_refire 2
+set g_balance_fireball_secondary_speed 900
+set g_balance_fireball_secondary_speed_up 100
+set g_balance_fireball_secondary_speed_z 0
 set g_balance_fireball_secondary_spread 0
 // }}}
 // {{{ seeker
index e588074..e552c82 100644 (file)
@@ -3,6 +3,7 @@
 // use g_start_weapon_* to also replace the on-startup weapons!
 // example: g_weaponreplace_nex "nex minstanex", then Nexes become MinstaNexes 50% of the times
 // set the cvars to "0" to totally disable a weapon
+set sv_q3acompat_machineshotgunswap 0 "shorthand for swapping uzi and shotgun"
 set g_weaponreplace_laser ""
 set g_weaponreplace_shotgun ""
 set g_weaponreplace_uzi ""
@@ -310,6 +311,8 @@ set g_balance_grenadelauncher_secondary_animtime 0.3
 set g_balance_grenadelauncher_secondary_ammo 2
 set g_balance_grenadelauncher_secondary_health 10
 set g_balance_grenadelauncher_secondary_damageforcescale 4
+set g_balance_grenadelauncher_secondary_bouncefactor 0.5
+set g_balance_grenadelauncher_secondary_bouncestop 0.075
 // }}}
 // {{{ electro
 set g_balance_electro_lightning 0
@@ -554,41 +557,41 @@ set g_balance_tuba_radius 200
 set g_balance_tuba_force 40
 // }}}
 // {{{ fireball
-set g_balance_fireball_primary_ammo 5
-set g_balance_fireball_primary_animtime 0.3
-set g_balance_fireball_primary_damage 100
+set g_balance_fireball_primary_ammo 40
+set g_balance_fireball_primary_animtime 0.15
+set g_balance_fireball_primary_bfgdamage 100
+set g_balance_fireball_primary_bfgforce 0
+set g_balance_fireball_primary_bfgradius 1000
+set g_balance_fireball_primary_damage 200
 set g_balance_fireball_primary_damageforcescale 4
-set g_balance_fireball_primary_damagetime 5
-set g_balance_fireball_primary_force 100
+set g_balance_fireball_primary_edgedamage 0
+set g_balance_fireball_primary_force 700
+set g_balance_fireball_primary_health 50
 set g_balance_fireball_primary_laserburntime 0.5
 set g_balance_fireball_primary_laserdamage 80
 set g_balance_fireball_primary_laseredgedamage 20
-set g_balance_fireball_primary_laserradius 128
-set g_balance_fireball_primary_lifetime 7
-set g_balance_fireball_primary_refire 1.5
-set g_balance_fireball_primary_speed 700
-set g_balance_fireball_primary_speed_up 100
-set g_balance_fireball_primary_speed_z 0
+set g_balance_fireball_primary_laserradius 256
+set g_balance_fireball_primary_lifetime 15
+set g_balance_fireball_primary_radius 200
+set g_balance_fireball_primary_refire 5
+set g_balance_fireball_primary_refire2 0
+set g_balance_fireball_primary_speed 650
 set g_balance_fireball_primary_spread 0
-set g_balance_fireball_secondary_ammo 15
-set g_balance_fireball_secondary_animtime 0.15
-set g_balance_fireball_secondary_bfgdamage 200
-set g_balance_fireball_secondary_bfgforce 0
-set g_balance_fireball_secondary_bfgradius 1500
-set g_balance_fireball_secondary_damage 150
+set g_balance_fireball_secondary_ammo 5
+set g_balance_fireball_secondary_animtime 0.3
+set g_balance_fireball_secondary_damage 40
 set g_balance_fireball_secondary_damageforcescale 4
-set g_balance_fireball_secondary_edgedamage 0
-set g_balance_fireball_secondary_force 700
-set g_balance_fireball_secondary_health 50
+set g_balance_fireball_secondary_damagetime 5
+set g_balance_fireball_secondary_force 100
 set g_balance_fireball_secondary_laserburntime 0.5
-set g_balance_fireball_secondary_laserdamage 80
+set g_balance_fireball_secondary_laserdamage 50
 set g_balance_fireball_secondary_laseredgedamage 20
-set g_balance_fireball_secondary_laserradius 256
-set g_balance_fireball_secondary_lifetime 15
-set g_balance_fireball_secondary_radius 200
+set g_balance_fireball_secondary_laserradius 110
+set g_balance_fireball_secondary_lifetime 7
 set g_balance_fireball_secondary_refire 2
-set g_balance_fireball_secondary_refire2 0
-set g_balance_fireball_secondary_speed 650
+set g_balance_fireball_secondary_speed 900
+set g_balance_fireball_secondary_speed_up 100
+set g_balance_fireball_secondary_speed_z 0
 set g_balance_fireball_secondary_spread 0
 // }}}
 // {{{ seeker
diff --git a/balanceNexrun.cfg b/balanceNexrun.cfg
deleted file mode 100644 (file)
index 7dbf5d4..0000000
+++ /dev/null
@@ -1,642 +0,0 @@
-// {{{ weapon replacement
-// NOTE: this only replaces weapons on the map
-// use g_start_weapon_* to also replace the on-startup weapons!
-// example: g_weaponreplace_nex "nex minstanex", then Nexes become MinstaNexes 50% of the times
-// set the cvars to "0" to totally disable a weapon
-set g_weaponreplace_laser ""
-set g_weaponreplace_shotgun "uzi"
-set g_weaponreplace_uzi "shotgun"
-set g_weaponreplace_grenadelauncher ""
-set g_weaponreplace_electro ""
-set g_weaponreplace_crylink ""
-set g_weaponreplace_nex ""
-set g_weaponreplace_hagar ""
-set g_weaponreplace_rocketlauncher ""
-set g_weaponreplace_porto ""
-set g_weaponreplace_minstanex ""
-set g_weaponreplace_hook 0
-set g_weaponreplace_hlac 0
-set g_weaponreplace_campingrifle 0
-set g_weaponreplace_tuba ""
-set g_weaponreplace_fireball 0
-set g_weaponreplace_seeker 0
-set sv_q3acompat_machineshotgunswap 0
-// }}}
-
-// {{{ starting gear
-set g_start_weapon_laser -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_shotgun -2 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_uzi 1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_grenadelauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_electro -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_crylink -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_nex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_hagar -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_rocketlauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_minstanex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_hlac 0 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_campingrifle 0 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_fireball -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_seeker 0 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_balance_health_start 125
-set g_balance_armor_start 0
-set g_start_ammo_shells 0
-set g_start_ammo_nails 100
-set g_start_ammo_rockets 0
-set g_start_ammo_cells 0
-set g_start_ammo_fuel 0
-set g_warmup_start_health 200 "starting values when being in warmup-stage"
-set g_warmup_start_armor 100 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_shells 50 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_nails 150 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_rockets 50 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_cells 50 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage"
-set g_lms_start_health 200
-set g_lms_start_armor 100
-set g_lms_start_ammo_shells 30
-set g_lms_start_ammo_nails 210
-set g_lms_start_ammo_rockets 150
-set g_lms_start_ammo_cells 150
-set g_lms_start_ammo_fuel 0
-set g_balance_nix_roundtime 25
-set g_balance_nix_incrtime 1.6
-set g_balance_nix_ammo_shells 15
-set g_balance_nix_ammo_nails 45
-set g_balance_nix_ammo_rockets 15
-set g_balance_nix_ammo_cells 15
-set g_balance_nix_ammo_fuel 0
-set g_balance_nix_ammoincr_shells 2
-set g_balance_nix_ammoincr_nails 6
-set g_balance_nix_ammoincr_rockets 2
-set g_balance_nix_ammoincr_cells 2
-set g_balance_nix_ammoincr_fuel 2
-// }}}
-
-// {{{ pickup items
-set g_pickup_shells 10
-set g_pickup_shells_max 30
-set g_pickup_nails 30
-set g_pickup_nails_max 210
-set g_pickup_rockets 20
-set g_pickup_rockets_max 150
-set g_pickup_cells 50
-set g_pickup_cells_max 150
-set g_pickup_fuel 25
-set g_pickup_fuel_jetpack 50
-set g_pickup_fuel_max 999
-set g_pickup_armorsmall 5
-set g_pickup_armorsmall_max 200
-set g_pickup_armormedium 25
-set g_pickup_armormedium_max 200
-set g_pickup_armorbig 50
-set g_pickup_armorbig_max 200
-set g_pickup_armorlarge 100
-set g_pickup_armorlarge_max 200
-set g_pickup_healthsmall 5
-set g_pickup_healthsmall_max 200
-set g_pickup_healthmedium 25
-set g_pickup_healthmedium_max 100
-set g_pickup_healthlarge 50
-set g_pickup_healthlarge_max 100
-set g_pickup_healthmega 100
-set g_pickup_healthmega_max 200
-set g_pickup_respawntime_short 30
-set g_pickup_respawntime_medium 30
-set g_pickup_respawntime_long 30
-set g_pickup_respawntime_powerup 90
-set g_pickup_respawntime_weapon 5
-set g_pickup_respawntime_ammo 30
-set g_pickup_respawntimejitter_short 0
-set g_pickup_respawntimejitter_medium 0
-set g_pickup_respawntimejitter_long 0
-set g_pickup_respawntimejitter_powerup 15
-set g_pickup_respawntimejitter_weapon 0
-set g_pickup_respawntimejitter_ammo 0
-// }}}
-
-// {{{ regen/rot
-set g_balance_health_regen 0
-set g_balance_health_regenlinear 0
-set g_balance_pause_health_regen 0
-set g_balance_pause_health_regen_spawn 0
-set g_balance_health_rot 0
-set g_balance_health_rotlinear 1
-set g_balance_pause_health_rot 1
-set g_balance_pause_health_rot_spawn 0
-set g_balance_health_regenstable 100
-set g_balance_health_rotstable 100
-set g_balance_health_limit 999
-set g_balance_armor_regen 0
-set g_balance_armor_regenlinear 0
-set g_balance_armor_rot 0
-set g_balance_armor_rotlinear 1
-set g_balance_pause_armor_rot 1
-set g_balance_pause_armor_rot_spawn 0
-set g_balance_armor_regenstable 100
-set g_balance_armor_rotstable 100
-set g_balance_armor_limit 999
-set g_balance_armor_blockpercent 0.66
-
-set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)"
-set g_balance_fuel_regenlinear 0
-set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter
-set g_balance_fuel_rot 0.05
-set g_balance_fuel_rotlinear 0
-set g_balance_pause_fuel_rot 5
-set g_balance_pause_fuel_rot_spawn 10
-set g_balance_fuel_regenstable 50
-set g_balance_fuel_rotstable 100
-set g_balance_fuel_limit 999
-// }}}
-
-// {{{ misc
-set g_balance_selfdamagepercent 0.75
-set g_balance_weaponswitchdelay 0.1
-set g_weaponspeedfactor 1 "weapon projectile speed multiplier"
-set g_weaponratefactor 1 "weapon fire rate multiplier"
-set g_weapondamagefactor 1 "weapon damage multiplier"
-set g_weaponforcefactor 1 "weapon force multiplier"
-set g_weaponspreadfactor 1 "weapon spread multiplier"
-set g_balance_firetransfer_time 0.9
-set g_balance_firetransfer_damage 0.8
-set g_throughfloor_damage 0.5
-set g_throughfloor_force 0.7
-set g_projectiles_newton_style 0
-// possible values:
-// 0: absolute velocity projectiles (like Quake)
-// 1: relative velocity projectiles, "Newtonian" (like Tribes 2)
-// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard)
-// 3: absolute velocity + player velocity component in shot direction (note: does NOT yield the right relative velocity, but may be good enough, but it is somewhat prone to sniper rockets)
-// 4: just add the player velocity length to the absolute velocity (tZork's sniper rockets)
-set g_projectiles_newton_style_2_minfactor 0.7
-set g_projectiles_newton_style_2_maxfactor 5
-set g_projectiles_spread_style 4
-// possible values:
-// 0: forward + solid sphere (like Quake) - varies velocity
-// 1: forward + flattened solid sphere
-// 2: forward + solid circle
-// 3: forward + normal distribution 3D - varies velocity
-// 4: forward + normal distribution on a plane
-// 5: forward + circle with 1-r falloff
-// 6: forward + circle with 1-r^2 falloff
-// 7: forward + circle with (1-r)(2-r) falloff
-set g_balance_falldamage_deadminspeed 150
-set g_balance_falldamage_minspeed 675
-set g_balance_falldamage_factor 0.25
-set g_balance_falldamage_maxdamage 10
-// }}}
-
-// {{{ powerups
-set g_balance_powerup_invincible_takedamage 0.25
-set g_balance_powerup_invincible_time 30
-set g_balance_powerup_strength_damage 4
-set g_balance_powerup_strength_force 4
-set g_balance_powerup_strength_time 30
-set g_balance_powerup_strength_selfdamage 2
-set g_balance_powerup_strength_selfforce 2
-// }}}
-
-// {{{ jetpack/hook
-set g_jetpack_antigravity 0.8 "factor of gravity compensation of the jetpack"
-set g_jetpack_acceleration_side 1200 "acceleration of the jetpack in xy direction"
-set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)"
-set g_jetpack_maxspeed_side 1200 "max speed of the jetpack in xy direction"
-set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction"
-set g_jetpack_fuel 8 "fuel per second for jetpack"
-set g_jetpack_attenuation 2 "jetpack sound attenuation"
-
-set g_grappling_hook_tarzan 2 // 2: can also pull players
-set g_balance_grapplehook_speed_fly 1800
-set g_balance_grapplehook_speed_pull 2000
-set g_balance_grapplehook_force_rubber 2000
-set g_balance_grapplehook_force_rubber_overstretch 1000
-set g_balance_grapplehook_length_min 50
-set g_balance_grapplehook_stretch 50
-set g_balance_grapplehook_airfriction 0.2
-set g_balance_grapplehook_health 130
-// }}}
-
-// {{{ weapon properties
-// {{{ laser
-set g_balance_laser_primary_damage 22
-set g_balance_laser_primary_edgedamage 0
-set g_balance_laser_primary_force 200
-set g_balance_laser_primary_radius 52
-set g_balance_laser_primary_speed 0
-set g_balance_laser_primary_spread 0
-set g_balance_laser_primary_refire 0.1
-set g_balance_laser_primary_animtime 0.1
-set g_balance_laser_primary_lifetime 0
-set g_balance_laser_primary_shotangle 0
-set g_balance_laser_primary_delay 0
-set g_balance_laser_gauntlet 1
-set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
-set g_balance_laser_secondary_damage 30
-set g_balance_laser_secondary_edgedamage 0
-set g_balance_laser_secondary_force 100
-set g_balance_laser_secondary_radius 3
-set g_balance_laser_secondary_speed 1500
-set g_balance_laser_secondary_spread 0
-set g_balance_laser_secondary_refire 0
-set g_balance_laser_secondary_animtime 0.15
-set g_balance_laser_secondary_lifetime 0.066
-set g_balance_laser_secondary_shotangle 0
-set g_balance_laser_secondary_delay 0
-// }}}
-// {{{ shotgun
-set g_balance_shotgun_primary_bullets 36
-set g_balance_shotgun_primary_damage 3
-set g_balance_shotgun_primary_force 10
-set g_balance_shotgun_primary_spread 0.18
-set g_balance_shotgun_primary_refire 1
-set g_balance_shotgun_primary_animtime 0.7
-set g_balance_shotgun_primary_ammo 1
-set g_balance_shotgun_primary_speed 12000
-set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
-set g_balance_shotgun_secondary 0
-set g_balance_shotgun_secondary_bullets 22
-set g_balance_shotgun_secondary_damage 2
-set g_balance_shotgun_secondary_force 12
-set g_balance_shotgun_secondary_spread 0.25
-set g_balance_shotgun_secondary_refire 1.5
-set g_balance_shotgun_secondary_animtime 0.2
-set g_balance_shotgun_secondary_ammo 0.5
-set g_balance_shotgun_secondary_speed 12000
-set g_balance_shotgun_secondary_bulletconstant 75 // 3.8qu
-// }}}
-// {{{ uzi
-set g_balance_uzi_first 0
-set g_balance_uzi_first_damage 10
-set g_balance_uzi_first_force 50
-set g_balance_uzi_first_spread 0.007
-set g_balance_uzi_first_refire 0.15
-set g_balance_uzi_first_ammo 1
-set g_balance_uzi_sustained_damage 7
-set g_balance_uzi_sustained_force 30
-set g_balance_uzi_sustained_spread 0.02
-set g_balance_uzi_sustained_refire 0.1
-set g_balance_uzi_sustained_ammo 1
-set g_balance_uzi_speed 18000
-set g_balance_uzi_bulletconstant 115 // 13.1qu
-// }}}
-// {{{ mortar
-set g_balance_grenadelauncher_primary2secondary 1
-set g_balance_grenadelauncher_primary_damage 60
-set g_balance_grenadelauncher_primary_edgedamage 10
-set g_balance_grenadelauncher_primary_force 250
-set g_balance_grenadelauncher_primary_radius 100
-set g_balance_grenadelauncher_primary_speed 2000
-set g_balance_grenadelauncher_primary_speed_up 200
-set g_balance_grenadelauncher_primary_speed_z 0
-set g_balance_grenadelauncher_primary_spread 0
-set g_balance_grenadelauncher_primary_lifetime 5
-set g_balance_grenadelauncher_primary_refire 0.7
-set g_balance_grenadelauncher_primary_animtime 0.3
-set g_balance_grenadelauncher_primary_ammo 2
-set g_balance_grenadelauncher_secondary_damage 65
-set g_balance_grenadelauncher_secondary_edgedamage 10
-set g_balance_grenadelauncher_secondary_force 300
-set g_balance_grenadelauncher_secondary_radius 200
-set g_balance_grenadelauncher_secondary_speed 800
-set g_balance_grenadelauncher_secondary_speed_up 0
-set g_balance_grenadelauncher_secondary_speed_z 200
-set g_balance_grenadelauncher_secondary_spread 0
-set g_balance_grenadelauncher_secondary_lifetime 2
-set g_balance_grenadelauncher_secondary_refire 0.8
-set g_balance_grenadelauncher_secondary_animtime 0.5
-set g_balance_grenadelauncher_secondary_ammo 2
-set g_balance_grenadelauncher_secondary_health 0
-set g_balance_grenadelauncher_secondary_damageforcescale 0
-// }}}
-// {{{ electro
-set g_balance_electro_lightning 1
-set g_balance_electro_primary_damage 6
-set g_balance_electro_primary_edgedamage 0
-set g_balance_electro_primary_force 60 // todo: probaby needs movement nerfing code when hit?
-set g_balance_electro_primary_radius 850
-set g_balance_electro_primary_comboradius 0
-set g_balance_electro_primary_speed 0
-set g_balance_electro_primary_spread 0
-set g_balance_electro_primary_lifetime 0
-set g_balance_electro_primary_refire 0.066
-set g_balance_electro_primary_animtime 0.066
-set g_balance_electro_primary_ammo 0.66
-set g_balance_electro_secondary_damage 45
-set g_balance_electro_secondary_spread 0.10
-set g_balance_electro_secondary_edgedamage 10
-set g_balance_electro_secondary_force 100
-set g_balance_electro_secondary_radius 150
-set g_balance_electro_secondary_speed 900
-set g_balance_electro_secondary_speed_up 200
-set g_balance_electro_secondary_speed_z 0
-set g_balance_electro_secondary_spread 0.05
-set g_balance_electro_secondary_lifetime 2.5
-set g_balance_electro_secondary_refire 0.1
-set g_balance_electro_secondary_refire2 2
-set g_balance_electro_secondary_animtime 0.2
-set g_balance_electro_secondary_ammo 2
-set g_balance_electro_secondary_health 5
-set g_balance_electro_secondary_damageforcescale 4
-set g_balance_electro_secondary_count 3
-set g_balance_electro_combo_damage 50
-set g_balance_electro_combo_edgedamage 0
-set g_balance_electro_combo_force 100
-set g_balance_electro_combo_radius 250
-set g_balance_electro_combo_comboradius 0
-set g_balance_electro_combo_speed 2000
-// }}}
-// {{{ crylink
-set g_balance_crylink_primary_damage 18
-set g_balance_crylink_primary_edgedamage 18
-set g_balance_crylink_primary_force 40
-set g_balance_crylink_primary_radius 110
-set g_balance_crylink_primary_speed 1800
-set g_balance_crylink_primary_spread 0.01
-set g_balance_crylink_primary_shots 4
-set g_balance_crylink_primary_bounces 0
-set g_balance_crylink_primary_refire 0.4
-set g_balance_crylink_primary_animtime 0.4
-set g_balance_crylink_primary_ammo 2
-set g_balance_crylink_primary_bouncedamagefactor 0.5
-
-set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000
-set g_balance_crylink_primary_middle_fadetime 5
-set g_balance_crylink_primary_star_lifetime 0.1 // range: 700 full, fades to 2450
-set g_balance_crylink_primary_star_fadetime 0.25
-set g_balance_crylink_primary_other_lifetime 0.1 // range: 700 full, fades to 2450
-set g_balance_crylink_primary_other_fadetime 0.25
-
-set g_balance_crylink_secondary 0
-set g_balance_crylink_secondary_damage 8
-set g_balance_crylink_secondary_edgedamage 8
-set g_balance_crylink_secondary_force -40
-set g_balance_crylink_secondary_radius 10
-set g_balance_crylink_secondary_speed 4000
-set g_balance_crylink_secondary_spread 0.01
-set g_balance_crylink_secondary_shots 3
-set g_balance_crylink_secondary_bounces 0
-set g_balance_crylink_secondary_refire 0.1
-set g_balance_crylink_secondary_animtime 0.1
-set g_balance_crylink_secondary_ammo 1
-set g_balance_crylink_secondary_bouncedamagefactor 0.5
-
-set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000
-set g_balance_crylink_secondary_middle_fadetime 5
-set g_balance_crylink_secondary_line_lifetime 2 // range: 35000 full, fades to 70000
-set g_balance_crylink_secondary_line_fadetime 2
-// }}}
-// {{{ nex
-set g_balance_nex_damage 100
-set g_balance_nex_force 200
-set g_balance_nex_refire 1.25
-set g_balance_nex_animtime 0.8
-set g_balance_nex_ammo 5
-set g_balance_nex_damagefalloff_mindist 1000
-set g_balance_nex_damagefalloff_maxdist 3000
-set g_balance_nex_damagefalloff_halflife 1500
-set g_balance_nex_damagefalloff_forcehalflife 1500
-// }}}
-// {{{ minstanex
-set g_balance_minstanex_refire 1
-set g_balance_minstanex_animtime 1
-set g_balance_minstanex_ammo 10
-// }}}
-// {{{ hagar
-set g_balance_hagar_primary_damage 12
-set g_balance_hagar_primary_edgedamage 5
-set g_balance_hagar_primary_force 70
-set g_balance_hagar_primary_radius 50
-set g_balance_hagar_primary_spread 0
-set g_balance_hagar_primary_speed 1800
-set g_balance_hagar_primary_lifetime 5
-set g_balance_hagar_primary_refire 0.1
-set g_balance_hagar_primary_ammo 1
-set g_balance_hagar_secondary 0
-set g_balance_hagar_secondary_damage 11
-set g_balance_hagar_secondary_edgedamage 4
-set g_balance_hagar_secondary_force 60
-set g_balance_hagar_secondary_radius 70
-set g_balance_hagar_secondary_spread 0.05
-set g_balance_hagar_secondary_speed 1800
-set g_balance_hagar_secondary_lifetime_min 5
-set g_balance_hagar_secondary_lifetime_rand 0
-set g_balance_hagar_secondary_refire 0.1
-set g_balance_hagar_secondary_ammo 1
-// }}}
-// {{{ rocketlauncher
-set g_balance_rocketlauncher_damage 90
-set g_balance_rocketlauncher_edgedamage 30
-set g_balance_rocketlauncher_force 350
-set g_balance_rocketlauncher_radius 110
-set g_balance_rocketlauncher_speed 1000
-set g_balance_rocketlauncher_speedaccel 0
-set g_balance_rocketlauncher_speedstart 1000
-set g_balance_rocketlauncher_lifetime 10
-set g_balance_rocketlauncher_refire 0.9
-set g_balance_rocketlauncher_animtime 0.7
-set g_balance_rocketlauncher_ammo 3
-set g_balance_rocketlauncher_health 0
-set g_balance_rocketlauncher_damageforcescale 0
-set g_balance_rocketlauncher_detonatedelay 9999 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
-set g_balance_rocketlauncher_guiderate 0 // max degrees per second
-set g_balance_rocketlauncher_guideratedelay 0.01 // immediate
-set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
-set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
-set g_balance_rocketlauncher_guidestop 1 // stop guiding when firing again
-set g_balance_rocketlauncher_laserguided_speed 1000 //650
-set g_balance_rocketlauncher_laserguided_speedaccel 0
-set g_balance_rocketlauncher_laserguided_speedstart 1000
-set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5
-set g_balance_rocketlauncher_laserguided_allow_steal 1
-// }}}
-// {{{ porto
-set g_balance_porto_primary_refire 1.5
-set g_balance_porto_primary_animtime 0.3
-set g_balance_porto_primary_speed 5000
-set g_balance_porto_primary_lifetime 30
-set g_balance_portal_health 200 // these get recharged whenever the portal is used
-set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
-// }}}
-// {{{ hook
-set g_balance_hook_primary_fuel 2 // hook monkeys set 0
-set g_balance_hook_primary_refire 0 // hook monkeys set 0
-set g_balance_hook_primary_animtime 0.3 // good shoot anim
-set g_balance_hook_primary_hooked_time_max 0 // infinite
-set g_balance_hook_primary_hooked_time_free 2 // 2s being hooked are free
-set g_balance_hook_primary_hooked_fuel 3 // fuel per second hooked
-set g_balance_hook_secondary_damage 25 // not much
-set g_balance_hook_secondary_edgedamage 5 // not much
-set g_balance_hook_secondary_radius 500 // LOTS
-set g_balance_hook_secondary_force -2000 // LOTS
-set g_balance_hook_secondary_ammo 50 // a whole pack
-set g_balance_hook_secondary_lifetime 10 // infinite
-set g_balance_hook_secondary_speed 0 // not much throwing
-set g_balance_hook_secondary_gravity 5 // fast falling
-set g_balance_hook_secondary_refire 3 // don't drop too many bombs...
-set g_balance_hook_secondary_animtime 0.3 // good shoot anim
-set g_balance_hook_secondary_power 3 // effect behaves like a square function
-set g_balance_hook_secondary_duration 1.5 // effect runs for three seconds
-// }}}
-// {{{ hlac
-set g_balance_hlac_primary_spread_min 0.01
-set g_balance_hlac_primary_spread_max 0.03
-set g_balance_hlac_primary_spread_add 0.002
-set g_balance_hlac_primary_spread_crouchmod 0.5
-
-set g_balance_hlac_primary_damage 6
-set g_balance_hlac_primary_edgedamage 0
-set g_balance_hlac_primary_force 60 // todo: probably needs movement nerfing code when hit
-set g_balance_hlac_primary_radius 850
-set g_balance_hlac_primary_speed 0
-set g_balance_hlac_primary_lifetime 0
-
-set g_balance_hlac_primary_refire 0.066
-set g_balance_hlac_primary_animtime 0.066
-set g_balance_hlac_primary_ammo 0.066
-
-set g_balance_hlac_secondary 0
-set g_balance_hlac_secondary_spread 0.06
-set g_balance_hlac_secondary_spread_crouchmod 0.5
-
-set g_balance_hlac_secondary_damage 11
-set g_balance_hlac_secondary_edgedamage 10
-set g_balance_hlac_secondary_force 60
-set g_balance_hlac_secondary_radius 70
-set g_balance_hlac_secondary_speed 20000
-set g_balance_hlac_secondary_lifetime 5
-
-set g_balance_hlac_secondary_refire 0.6
-set g_balance_hlac_secondary_animtime 0.6
-set g_balance_hlac_secondary_ammo 10
-set g_balance_hlac_secondary_shots 5
-// }}}
-// {{{ campingrifle
-set g_balance_campingrifle_magazinecapacity 0
-set g_balance_campingrifle_reloadtime 2 // matches reload anim
-set g_balance_campingrifle_auto_reload_after_changing_weapons 0
-set g_balance_campingrifle_bursttime 0.85 // 0.35 - 0.1 + 0.35 - 0.1 + 0.35 = three secondaries
-set g_balance_campingrifle_tracer 1
-set g_balance_campingrifle_primary_damage 50
-set g_balance_campingrifle_primary_headshotaddeddamage 80
-set g_balance_campingrifle_primary_spread 0
-set g_balance_campingrifle_primary_force 0
-set g_balance_campingrifle_primary_speed 35000
-set g_balance_campingrifle_primary_lifetime 5
-set g_balance_campingrifle_primary_refire 0.7
-set g_balance_campingrifle_primary_animtime 0.7
-set g_balance_campingrifle_primary_ammo 10
-set g_balance_campingrifle_primary_bulletconstant 130 // 56.3qu
-set g_balance_campingrifle_primary_burstcost 0.35 // require same cooldown as secondary, note it's smaller than primary refire time
-set g_balance_campingrifle_secondary_damage 15
-set g_balance_campingrifle_secondary_headshotaddeddamage 25
-set g_balance_campingrifle_secondary_spread 0.02
-set g_balance_campingrifle_secondary_force 0
-set g_balance_campingrifle_secondary_speed 20000
-set g_balance_campingrifle_secondary_lifetime 5
-set g_balance_campingrifle_secondary_refire 0.1
-set g_balance_campingrifle_secondary_animtime 0.1
-set g_balance_campingrifle_secondary_ammo 4
-set g_balance_campingrifle_secondary_bulletconstant 130 // 18.3qu
-set g_balance_campingrifle_secondary_burstcost 0.35
-// }}}
-// {{{ tuba
-set g_balance_tuba_refire 0.05
-set g_balance_tuba_animtime 0.05
-set g_balance_tuba_attenuation 0.5
-set g_balance_tuba_volume 1
-set g_balance_tuba_fadetime 0.25
-set g_balance_tuba_damage 5
-set g_balance_tuba_edgedamage 0
-set g_balance_tuba_radius 200
-set g_balance_tuba_force 40
-// }}}
-// {{{ fireball
-set g_balance_fireball_primary_ammo 5
-set g_balance_fireball_primary_animtime 0.3
-set g_balance_fireball_primary_damage 40
-set g_balance_fireball_primary_damageforcescale 4
-set g_balance_fireball_primary_damagetime 5
-set g_balance_fireball_primary_force 100
-set g_balance_fireball_primary_laserburntime 0.5
-set g_balance_fireball_primary_laserdamage 30
-set g_balance_fireball_primary_laseredgedamage 20
-set g_balance_fireball_primary_laserradius 110
-set g_balance_fireball_primary_lifetime 7
-set g_balance_fireball_primary_refire 2
-set g_balance_fireball_primary_speed 900
-set g_balance_fireball_primary_spread 0
-set g_balance_fireball_primary_speed_up 100
-set g_balance_fireball_primary_speed_z 0
-set g_balance_fireball_secondary_ammo 25
-set g_balance_fireball_secondary_animtime 0.15
-set g_balance_fireball_secondary_bfgdamage 100
-set g_balance_fireball_secondary_bfgforce 500
-set g_balance_fireball_secondary_bfgradius 750
-set g_balance_fireball_secondary_damage 150
-set g_balance_fireball_secondary_damageforcescale 4
-set g_balance_fireball_secondary_edgedamage 0
-set g_balance_fireball_secondary_force 700
-set g_balance_fireball_secondary_health 50
-set g_balance_fireball_secondary_laserburntime 0.5
-set g_balance_fireball_secondary_laserdamage 30
-set g_balance_fireball_secondary_laseredgedamage 20
-set g_balance_fireball_secondary_laserradius 256
-set g_balance_fireball_secondary_lifetime 15
-set g_balance_fireball_secondary_radius 200
-set g_balance_fireball_secondary_refire 0
-set g_balance_fireball_secondary_refire2 4
-set g_balance_fireball_secondary_speed 650
-set g_balance_fireball_secondary_spread 0
-// }}}
-// {{{ seeker
-set g_balance_seeker_flac_ammo 0.5
-set g_balance_seeker_flac_animtime 0.1
-set g_balance_seeker_flac_damage 15
-set g_balance_seeker_flac_edgedamage 10
-set g_balance_seeker_flac_force 50
-set g_balance_seeker_flac_lifetime 0.1
-set g_balance_seeker_flac_lifetime_rand 0.05
-set g_balance_seeker_flac_radius 100
-set g_balance_seeker_flac_refire 0.1
-set g_balance_seeker_flac_speed 3000
-set g_balance_seeker_flac_speed_up 1000
-set g_balance_seeker_flac_spread 0.4
-set g_balance_seeker_missile_accel 1.05
-set g_balance_seeker_missile_ammo 2
-set g_balance_seeker_missile_animtime 0.3
-set g_balance_seeker_missile_count 4
-set g_balance_seeker_missile_damage 40
-set g_balance_seeker_missile_damageforcescale 4
-set g_balance_seeker_missile_decel 0.9
-set g_balance_seeker_missile_delay 0.25
-set g_balance_seeker_missile_edgedamage 10
-set g_balance_seeker_missile_force 250
-set g_balance_seeker_missile_health 5
-set g_balance_seeker_missile_lifetime 15
-set g_balance_seeker_missile_proxy 0
-set g_balance_seeker_missile_proxy_delay 0.2
-set g_balance_seeker_missile_proxy_maxrange 45
-set g_balance_seeker_missile_radius 80
-set g_balance_seeker_missile_refire 0.5
-set g_balance_seeker_missile_smart 1
-set g_balance_seeker_missile_smart_mindist 800
-set g_balance_seeker_missile_smart_trace_max 2500
-set g_balance_seeker_missile_smart_trace_min 1000
-set g_balance_seeker_missile_speed 700
-set g_balance_seeker_missile_speed_up 300
-set g_balance_seeker_missile_speed_max 1250
-set g_balance_seeker_missile_spread 0
-set g_balance_seeker_missile_turnrate 0.65
-set g_balance_seeker_tag_ammo 1
-set g_balance_seeker_tag_animtime 0.3
-set g_balance_seeker_tag_damageforcescale 4
-set g_balance_seeker_tag_health 5
-set g_balance_seeker_tag_lifetime 15
-set g_balance_seeker_tag_refire 0.7
-set g_balance_seeker_tag_speed 9000
-set g_balance_seeker_tag_spread 0
-// End new seeker
index 57aff30..c6d194d 100644 (file)
@@ -311,6 +311,8 @@ set g_balance_grenadelauncher_secondary_animtime 0.3
 set g_balance_grenadelauncher_secondary_ammo 2
 set g_balance_grenadelauncher_secondary_health 70
 set g_balance_grenadelauncher_secondary_damageforcescale 4
+set g_balance_grenadelauncher_secondary_bouncefactor 0.5
+set g_balance_grenadelauncher_secondary_bouncestop 0.075
 // }}}
 // {{{ electro
 set g_balance_electro_lightning 0
@@ -555,41 +557,41 @@ set g_balance_tuba_radius 200
 set g_balance_tuba_force 40
 // }}}
 // {{{ fireball
-set g_balance_fireball_primary_ammo 5
-set g_balance_fireball_primary_animtime 0.3
-set g_balance_fireball_primary_damage 40
+set g_balance_fireball_primary_ammo 40
+set g_balance_fireball_primary_animtime 0.15
+set g_balance_fireball_primary_bfgdamage 100
+set g_balance_fireball_primary_bfgforce 0
+set g_balance_fireball_primary_bfgradius 1000
+set g_balance_fireball_primary_damage 200
 set g_balance_fireball_primary_damageforcescale 4
-set g_balance_fireball_primary_damagetime 5
-set g_balance_fireball_primary_force 100
+set g_balance_fireball_primary_edgedamage 0
+set g_balance_fireball_primary_force 700
+set g_balance_fireball_primary_health 50
 set g_balance_fireball_primary_laserburntime 0.5
-set g_balance_fireball_primary_laserdamage 30
+set g_balance_fireball_primary_laserdamage 80
 set g_balance_fireball_primary_laseredgedamage 20
-set g_balance_fireball_primary_laserradius 110
-set g_balance_fireball_primary_lifetime 7
-set g_balance_fireball_primary_refire 2
-set g_balance_fireball_primary_speed 900
-set g_balance_fireball_primary_speed_up 100
-set g_balance_fireball_primary_speed_z 0
+set g_balance_fireball_primary_laserradius 256
+set g_balance_fireball_primary_lifetime 15
+set g_balance_fireball_primary_radius 200
+set g_balance_fireball_primary_refire 5
+set g_balance_fireball_primary_refire2 0
+set g_balance_fireball_primary_speed 650
 set g_balance_fireball_primary_spread 0
-set g_balance_fireball_secondary_ammo 25
-set g_balance_fireball_secondary_animtime 0.15
-set g_balance_fireball_secondary_bfgdamage 100
-set g_balance_fireball_secondary_bfgforce 500
-set g_balance_fireball_secondary_bfgradius 750
-set g_balance_fireball_secondary_damage 150
+set g_balance_fireball_secondary_ammo 5
+set g_balance_fireball_secondary_animtime 0.3
+set g_balance_fireball_secondary_damage 40
 set g_balance_fireball_secondary_damageforcescale 4
-set g_balance_fireball_secondary_edgedamage 0
-set g_balance_fireball_secondary_force 700
-set g_balance_fireball_secondary_health 50
+set g_balance_fireball_secondary_damagetime 5
+set g_balance_fireball_secondary_force 100
 set g_balance_fireball_secondary_laserburntime 0.5
-set g_balance_fireball_secondary_laserdamage 30
+set g_balance_fireball_secondary_laserdamage 50
 set g_balance_fireball_secondary_laseredgedamage 20
-set g_balance_fireball_secondary_laserradius 256
-set g_balance_fireball_secondary_lifetime 15
-set g_balance_fireball_secondary_radius 200
-set g_balance_fireball_secondary_refire 0
-set g_balance_fireball_secondary_refire2 4
-set g_balance_fireball_secondary_speed 650
+set g_balance_fireball_secondary_laserradius 110
+set g_balance_fireball_secondary_lifetime 7
+set g_balance_fireball_secondary_refire 2
+set g_balance_fireball_secondary_speed 900
+set g_balance_fireball_secondary_speed_up 100
+set g_balance_fireball_secondary_speed_z 0
 set g_balance_fireball_secondary_spread 0
 // }}}
 // {{{ seeker
diff --git a/balanceXPM.cfg b/balanceXPM.cfg
new file mode 100644 (file)
index 0000000..79bb615
--- /dev/null
@@ -0,0 +1,644 @@
+// {{{ weapon replacement
+// NOTE: this only replaces weapons on the map
+// use g_start_weapon_* to also replace the on-startup weapons!
+// example: g_weaponreplace_nex "nex minstanex", then Nexes become MinstaNexes 50% of the times
+// set the cvars to "0" to totally disable a weapon
+set g_weaponreplace_laser ""
+set g_weaponreplace_shotgun "uzi"
+set g_weaponreplace_uzi "shotgun"
+set g_weaponreplace_grenadelauncher ""
+set g_weaponreplace_electro ""
+set g_weaponreplace_crylink ""
+set g_weaponreplace_nex ""
+set g_weaponreplace_hagar ""
+set g_weaponreplace_rocketlauncher ""
+set g_weaponreplace_porto ""
+set g_weaponreplace_minstanex ""
+set g_weaponreplace_hook 0
+set g_weaponreplace_hlac 0
+set g_weaponreplace_campingrifle 0
+set g_weaponreplace_tuba ""
+set g_weaponreplace_fireball 0
+set g_weaponreplace_seeker 0
+set sv_q3acompat_machineshotgunswap 0
+// }}}
+
+// {{{ starting gear
+set g_start_weapon_laser -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_shotgun -2 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_uzi 1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_grenadelauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_electro -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_crylink -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_nex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_hagar -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_rocketlauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_minstanex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_hlac 0 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_campingrifle 0 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_fireball -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_seeker 0 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_balance_health_start 125
+set g_balance_armor_start 0
+set g_start_ammo_shells 0
+set g_start_ammo_nails 100
+set g_start_ammo_rockets 0
+set g_start_ammo_cells 0
+set g_start_ammo_fuel 0
+set g_warmup_start_health 200 "starting values when being in warmup-stage"
+set g_warmup_start_armor 100 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_shells 50 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_nails 150 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_rockets 50 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_cells 50 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage"
+set g_lms_start_health 200
+set g_lms_start_armor 100
+set g_lms_start_ammo_shells 30
+set g_lms_start_ammo_nails 210
+set g_lms_start_ammo_rockets 150
+set g_lms_start_ammo_cells 150
+set g_lms_start_ammo_fuel 0
+set g_balance_nix_roundtime 25
+set g_balance_nix_incrtime 1.6
+set g_balance_nix_ammo_shells 15
+set g_balance_nix_ammo_nails 45
+set g_balance_nix_ammo_rockets 15
+set g_balance_nix_ammo_cells 15
+set g_balance_nix_ammo_fuel 0
+set g_balance_nix_ammoincr_shells 2
+set g_balance_nix_ammoincr_nails 6
+set g_balance_nix_ammoincr_rockets 2
+set g_balance_nix_ammoincr_cells 2
+set g_balance_nix_ammoincr_fuel 2
+// }}}
+
+// {{{ pickup items
+set g_pickup_shells 10
+set g_pickup_shells_max 30
+set g_pickup_nails 30
+set g_pickup_nails_max 210
+set g_pickup_rockets 20
+set g_pickup_rockets_max 150
+set g_pickup_cells 50
+set g_pickup_cells_max 150
+set g_pickup_fuel 25
+set g_pickup_fuel_jetpack 50
+set g_pickup_fuel_max 999
+set g_pickup_armorsmall 5
+set g_pickup_armorsmall_max 200
+set g_pickup_armormedium 25
+set g_pickup_armormedium_max 200
+set g_pickup_armorbig 50
+set g_pickup_armorbig_max 200
+set g_pickup_armorlarge 100
+set g_pickup_armorlarge_max 200
+set g_pickup_healthsmall 5
+set g_pickup_healthsmall_max 200
+set g_pickup_healthmedium 25
+set g_pickup_healthmedium_max 100
+set g_pickup_healthlarge 50
+set g_pickup_healthlarge_max 100
+set g_pickup_healthmega 100
+set g_pickup_healthmega_max 200
+set g_pickup_respawntime_short 30
+set g_pickup_respawntime_medium 30
+set g_pickup_respawntime_long 30
+set g_pickup_respawntime_powerup 90
+set g_pickup_respawntime_weapon 5
+set g_pickup_respawntime_ammo 30
+set g_pickup_respawntimejitter_short 0
+set g_pickup_respawntimejitter_medium 0
+set g_pickup_respawntimejitter_long 0
+set g_pickup_respawntimejitter_powerup 15
+set g_pickup_respawntimejitter_weapon 0
+set g_pickup_respawntimejitter_ammo 0
+// }}}
+
+// {{{ regen/rot
+set g_balance_health_regen 0
+set g_balance_health_regenlinear 0
+set g_balance_pause_health_regen 0
+set g_balance_pause_health_regen_spawn 0
+set g_balance_health_rot 0
+set g_balance_health_rotlinear 1
+set g_balance_pause_health_rot 1
+set g_balance_pause_health_rot_spawn 0
+set g_balance_health_regenstable 100
+set g_balance_health_rotstable 100
+set g_balance_health_limit 999
+set g_balance_armor_regen 0
+set g_balance_armor_regenlinear 0
+set g_balance_armor_rot 0
+set g_balance_armor_rotlinear 1
+set g_balance_pause_armor_rot 1
+set g_balance_pause_armor_rot_spawn 0
+set g_balance_armor_regenstable 100
+set g_balance_armor_rotstable 100
+set g_balance_armor_limit 999
+set g_balance_armor_blockpercent 0.66
+
+set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)"
+set g_balance_fuel_regenlinear 0
+set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter
+set g_balance_fuel_rot 0.05
+set g_balance_fuel_rotlinear 0
+set g_balance_pause_fuel_rot 5
+set g_balance_pause_fuel_rot_spawn 10
+set g_balance_fuel_regenstable 50
+set g_balance_fuel_rotstable 100
+set g_balance_fuel_limit 999
+// }}}
+
+// {{{ misc
+set g_balance_selfdamagepercent 0.75
+set g_balance_weaponswitchdelay 0.05
+set g_weaponspeedfactor 1 "weapon projectile speed multiplier"
+set g_weaponratefactor 1 "weapon fire rate multiplier"
+set g_weapondamagefactor 1 "weapon damage multiplier"
+set g_weaponforcefactor 1 "weapon force multiplier"
+set g_weaponspreadfactor 1 "weapon spread multiplier"
+set g_balance_firetransfer_time 0.9
+set g_balance_firetransfer_damage 0.8
+set g_throughfloor_damage 0.5
+set g_throughfloor_force 0.7
+set g_projectiles_newton_style 0
+// possible values:
+// 0: absolute velocity projectiles (like Quake)
+// 1: relative velocity projectiles, "Newtonian" (like Tribes 2)
+// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard)
+// 3: absolute velocity + player velocity component in shot direction (note: does NOT yield the right relative velocity, but may be good enough, but it is somewhat prone to sniper rockets)
+// 4: just add the player velocity length to the absolute velocity (tZork's sniper rockets)
+set g_projectiles_newton_style_2_minfactor 0.7
+set g_projectiles_newton_style_2_maxfactor 5
+set g_projectiles_spread_style 4
+// possible values:
+// 0: forward + solid sphere (like Quake) - varies velocity
+// 1: forward + flattened solid sphere
+// 2: forward + solid circle
+// 3: forward + normal distribution 3D - varies velocity
+// 4: forward + normal distribution on a plane
+// 5: forward + circle with 1-r falloff
+// 6: forward + circle with 1-r^2 falloff
+// 7: forward + circle with (1-r)(2-r) falloff
+set g_balance_falldamage_deadminspeed 150
+set g_balance_falldamage_minspeed 675
+set g_balance_falldamage_factor 0.25
+set g_balance_falldamage_maxdamage 10
+// }}}
+
+// {{{ powerups
+set g_balance_powerup_invincible_takedamage 0.25
+set g_balance_powerup_invincible_time 30
+set g_balance_powerup_strength_damage 4
+set g_balance_powerup_strength_force 4
+set g_balance_powerup_strength_time 30
+set g_balance_powerup_strength_selfdamage 2
+set g_balance_powerup_strength_selfforce 2
+// }}}
+
+// {{{ jetpack/hook
+set g_jetpack_antigravity 0.8 "factor of gravity compensation of the jetpack"
+set g_jetpack_acceleration_side 1200 "acceleration of the jetpack in xy direction"
+set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)"
+set g_jetpack_maxspeed_side 1200 "max speed of the jetpack in xy direction"
+set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction"
+set g_jetpack_fuel 8 "fuel per second for jetpack"
+set g_jetpack_attenuation 2 "jetpack sound attenuation"
+
+set g_grappling_hook_tarzan 2 // 2: can also pull players
+set g_balance_grapplehook_speed_fly 1800
+set g_balance_grapplehook_speed_pull 2000
+set g_balance_grapplehook_force_rubber 2000
+set g_balance_grapplehook_force_rubber_overstretch 1000
+set g_balance_grapplehook_length_min 50
+set g_balance_grapplehook_stretch 50
+set g_balance_grapplehook_airfriction 0.2
+set g_balance_grapplehook_health 130
+// }}}
+
+// {{{ weapon properties
+// {{{ laser
+set g_balance_laser_primary_damage 22
+set g_balance_laser_primary_edgedamage 0
+set g_balance_laser_primary_force 200
+set g_balance_laser_primary_radius 52
+set g_balance_laser_primary_speed 0
+set g_balance_laser_primary_spread 0
+set g_balance_laser_primary_refire 0.1
+set g_balance_laser_primary_animtime 0.1
+set g_balance_laser_primary_lifetime 0
+set g_balance_laser_primary_shotangle 0
+set g_balance_laser_primary_delay 0
+set g_balance_laser_gauntlet 1
+set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
+set g_balance_laser_secondary_damage 30
+set g_balance_laser_secondary_edgedamage 0
+set g_balance_laser_secondary_force 100
+set g_balance_laser_secondary_radius 3
+set g_balance_laser_secondary_speed 1500
+set g_balance_laser_secondary_spread 0
+set g_balance_laser_secondary_refire 0
+set g_balance_laser_secondary_animtime 0.15
+set g_balance_laser_secondary_lifetime 0.066
+set g_balance_laser_secondary_shotangle 0
+set g_balance_laser_secondary_delay 0
+// }}}
+// {{{ shotgun
+set g_balance_shotgun_primary_bullets 36
+set g_balance_shotgun_primary_damage 3
+set g_balance_shotgun_primary_force 10
+set g_balance_shotgun_primary_spread 0.18
+set g_balance_shotgun_primary_refire 1
+set g_balance_shotgun_primary_animtime 0.7
+set g_balance_shotgun_primary_ammo 1
+set g_balance_shotgun_primary_speed 12000
+set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
+set g_balance_shotgun_secondary 0
+set g_balance_shotgun_secondary_bullets 22
+set g_balance_shotgun_secondary_damage 2
+set g_balance_shotgun_secondary_force 12
+set g_balance_shotgun_secondary_spread 0.25
+set g_balance_shotgun_secondary_refire 1.5
+set g_balance_shotgun_secondary_animtime 0.2
+set g_balance_shotgun_secondary_ammo 0.5
+set g_balance_shotgun_secondary_speed 12000
+set g_balance_shotgun_secondary_bulletconstant 75 // 3.8qu
+// }}}
+// {{{ uzi
+set g_balance_uzi_first 0
+set g_balance_uzi_first_damage 10
+set g_balance_uzi_first_force 50
+set g_balance_uzi_first_spread 0.007
+set g_balance_uzi_first_refire 0.15
+set g_balance_uzi_first_ammo 1
+set g_balance_uzi_sustained_damage 7
+set g_balance_uzi_sustained_force 30
+set g_balance_uzi_sustained_spread 0.02
+set g_balance_uzi_sustained_refire 0.1
+set g_balance_uzi_sustained_ammo 1
+set g_balance_uzi_speed 18000
+set g_balance_uzi_bulletconstant 115 // 13.1qu
+// }}}
+// {{{ mortar
+set g_balance_grenadelauncher_primary2secondary 1
+set g_balance_grenadelauncher_primary_damage 60
+set g_balance_grenadelauncher_primary_edgedamage 10
+set g_balance_grenadelauncher_primary_force 250
+set g_balance_grenadelauncher_primary_radius 100
+set g_balance_grenadelauncher_primary_speed 2000
+set g_balance_grenadelauncher_primary_speed_up 200
+set g_balance_grenadelauncher_primary_speed_z 0
+set g_balance_grenadelauncher_primary_spread 0
+set g_balance_grenadelauncher_primary_lifetime 5
+set g_balance_grenadelauncher_primary_refire 0.7
+set g_balance_grenadelauncher_primary_animtime 0.3
+set g_balance_grenadelauncher_primary_ammo 2
+set g_balance_grenadelauncher_secondary_damage 65
+set g_balance_grenadelauncher_secondary_edgedamage 10
+set g_balance_grenadelauncher_secondary_force 300
+set g_balance_grenadelauncher_secondary_radius 200
+set g_balance_grenadelauncher_secondary_speed 800
+set g_balance_grenadelauncher_secondary_speed_up 0
+set g_balance_grenadelauncher_secondary_speed_z 200
+set g_balance_grenadelauncher_secondary_spread 0
+set g_balance_grenadelauncher_secondary_lifetime 2
+set g_balance_grenadelauncher_secondary_refire 0.8
+set g_balance_grenadelauncher_secondary_animtime 0.5
+set g_balance_grenadelauncher_secondary_ammo 2
+set g_balance_grenadelauncher_secondary_health 0
+set g_balance_grenadelauncher_secondary_damageforcescale 0
+set g_balance_grenadelauncher_secondary_bouncefactor 0.5
+set g_balance_grenadelauncher_secondary_bouncestop 0.075
+// }}}
+// {{{ electro
+set g_balance_electro_lightning 1
+set g_balance_electro_primary_damage 6
+set g_balance_electro_primary_edgedamage 0
+set g_balance_electro_primary_force 60 // todo: probaby needs movement nerfing code when hit?
+set g_balance_electro_primary_radius 850
+set g_balance_electro_primary_comboradius 0
+set g_balance_electro_primary_speed 0
+set g_balance_electro_primary_spread 0
+set g_balance_electro_primary_lifetime 0
+set g_balance_electro_primary_refire 0.066
+set g_balance_electro_primary_animtime 0.066
+set g_balance_electro_primary_ammo 0.66
+set g_balance_electro_secondary_damage 45
+set g_balance_electro_secondary_spread 0.10
+set g_balance_electro_secondary_edgedamage 10
+set g_balance_electro_secondary_force 100
+set g_balance_electro_secondary_radius 150
+set g_balance_electro_secondary_speed 900
+set g_balance_electro_secondary_speed_up 200
+set g_balance_electro_secondary_speed_z 0
+set g_balance_electro_secondary_spread 0.05
+set g_balance_electro_secondary_lifetime 2.5
+set g_balance_electro_secondary_refire 0.1
+set g_balance_electro_secondary_refire2 2
+set g_balance_electro_secondary_animtime 0.2
+set g_balance_electro_secondary_ammo 2
+set g_balance_electro_secondary_health 5
+set g_balance_electro_secondary_damageforcescale 4
+set g_balance_electro_secondary_count 3
+set g_balance_electro_combo_damage 50
+set g_balance_electro_combo_edgedamage 0
+set g_balance_electro_combo_force 100
+set g_balance_electro_combo_radius 250
+set g_balance_electro_combo_comboradius 0
+set g_balance_electro_combo_speed 2000
+// }}}
+// {{{ crylink
+set g_balance_crylink_primary_damage 18
+set g_balance_crylink_primary_edgedamage 18
+set g_balance_crylink_primary_force 50
+set g_balance_crylink_primary_radius 100
+set g_balance_crylink_primary_speed 1100
+set g_balance_crylink_primary_spread 0.01
+set g_balance_crylink_primary_shots 4
+set g_balance_crylink_primary_bounces 0
+set g_balance_crylink_primary_refire 0.4
+set g_balance_crylink_primary_animtime 0.4
+set g_balance_crylink_primary_ammo 2
+set g_balance_crylink_primary_bouncedamagefactor 0.5
+
+set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000
+set g_balance_crylink_primary_middle_fadetime 5
+set g_balance_crylink_primary_star_lifetime 3 // range: 700 full, fades to 2450
+set g_balance_crylink_primary_star_fadetime 5
+set g_balance_crylink_primary_other_lifetime 3 // range: 700 full, fades to 2450
+set g_balance_crylink_primary_other_fadetime 5
+
+set g_balance_crylink_secondary 0
+set g_balance_crylink_secondary_damage 8
+set g_balance_crylink_secondary_edgedamage 8
+set g_balance_crylink_secondary_force -40
+set g_balance_crylink_secondary_radius 10
+set g_balance_crylink_secondary_speed 4000
+set g_balance_crylink_secondary_spread 0.01
+set g_balance_crylink_secondary_shots 3
+set g_balance_crylink_secondary_bounces 0
+set g_balance_crylink_secondary_refire 0.1
+set g_balance_crylink_secondary_animtime 0.1
+set g_balance_crylink_secondary_ammo 1
+set g_balance_crylink_secondary_bouncedamagefactor 0.5
+
+set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000
+set g_balance_crylink_secondary_middle_fadetime 5
+set g_balance_crylink_secondary_line_lifetime 2 // range: 35000 full, fades to 70000
+set g_balance_crylink_secondary_line_fadetime 2
+// }}}
+// {{{ nex
+set g_balance_nex_damage 100
+set g_balance_nex_force 200
+set g_balance_nex_refire 1.25
+set g_balance_nex_animtime 0.8
+set g_balance_nex_ammo 5
+set g_balance_nex_damagefalloff_mindist 1000
+set g_balance_nex_damagefalloff_maxdist 3000
+set g_balance_nex_damagefalloff_halflife 1500
+set g_balance_nex_damagefalloff_forcehalflife 1500
+// }}}
+// {{{ minstanex
+set g_balance_minstanex_refire 1
+set g_balance_minstanex_animtime 1
+set g_balance_minstanex_ammo 10
+// }}}
+// {{{ hagar
+set g_balance_hagar_primary_damage 12
+set g_balance_hagar_primary_edgedamage 5
+set g_balance_hagar_primary_force 70
+set g_balance_hagar_primary_radius 50
+set g_balance_hagar_primary_spread 0
+set g_balance_hagar_primary_speed 1800
+set g_balance_hagar_primary_lifetime 5
+set g_balance_hagar_primary_refire 0.1
+set g_balance_hagar_primary_ammo 1
+set g_balance_hagar_secondary 0
+set g_balance_hagar_secondary_damage 11
+set g_balance_hagar_secondary_edgedamage 4
+set g_balance_hagar_secondary_force 60
+set g_balance_hagar_secondary_radius 70
+set g_balance_hagar_secondary_spread 0.05
+set g_balance_hagar_secondary_speed 1800
+set g_balance_hagar_secondary_lifetime_min 5
+set g_balance_hagar_secondary_lifetime_rand 0
+set g_balance_hagar_secondary_refire 0.1
+set g_balance_hagar_secondary_ammo 1
+// }}}
+// {{{ rocketlauncher
+set g_balance_rocketlauncher_damage 90
+set g_balance_rocketlauncher_edgedamage 30
+set g_balance_rocketlauncher_force 350
+set g_balance_rocketlauncher_radius 110
+set g_balance_rocketlauncher_speed 1000
+set g_balance_rocketlauncher_speedaccel 0
+set g_balance_rocketlauncher_speedstart 1000
+set g_balance_rocketlauncher_lifetime 10
+set g_balance_rocketlauncher_refire 0.9
+set g_balance_rocketlauncher_animtime 0.7
+set g_balance_rocketlauncher_ammo 3
+set g_balance_rocketlauncher_health 0
+set g_balance_rocketlauncher_damageforcescale 0
+set g_balance_rocketlauncher_detonatedelay 9999 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
+set g_balance_rocketlauncher_guiderate 0 // max degrees per second
+set g_balance_rocketlauncher_guideratedelay 0.01 // immediate
+set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
+set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
+set g_balance_rocketlauncher_guidestop 1 // stop guiding when firing again
+set g_balance_rocketlauncher_laserguided_speed 1000 //650
+set g_balance_rocketlauncher_laserguided_speedaccel 0
+set g_balance_rocketlauncher_laserguided_speedstart 1000
+set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5
+set g_balance_rocketlauncher_laserguided_allow_steal 1
+// }}}
+// {{{ porto
+set g_balance_porto_primary_refire 1.5
+set g_balance_porto_primary_animtime 0.3
+set g_balance_porto_primary_speed 5000
+set g_balance_porto_primary_lifetime 30
+set g_balance_portal_health 200 // these get recharged whenever the portal is used
+set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
+// }}}
+// {{{ hook
+set g_balance_hook_primary_fuel 2 // hook monkeys set 0
+set g_balance_hook_primary_refire 0 // hook monkeys set 0
+set g_balance_hook_primary_animtime 0.3 // good shoot anim
+set g_balance_hook_primary_hooked_time_max 0 // infinite
+set g_balance_hook_primary_hooked_time_free 2 // 2s being hooked are free
+set g_balance_hook_primary_hooked_fuel 3 // fuel per second hooked
+set g_balance_hook_secondary_damage 25 // not much
+set g_balance_hook_secondary_edgedamage 5 // not much
+set g_balance_hook_secondary_radius 500 // LOTS
+set g_balance_hook_secondary_force -2000 // LOTS
+set g_balance_hook_secondary_ammo 50 // a whole pack
+set g_balance_hook_secondary_lifetime 10 // infinite
+set g_balance_hook_secondary_speed 0 // not much throwing
+set g_balance_hook_secondary_gravity 5 // fast falling
+set g_balance_hook_secondary_refire 3 // don't drop too many bombs...
+set g_balance_hook_secondary_animtime 0.3 // good shoot anim
+set g_balance_hook_secondary_power 3 // effect behaves like a square function
+set g_balance_hook_secondary_duration 1.5 // effect runs for three seconds
+// }}}
+// {{{ hlac
+set g_balance_hlac_primary_spread_min 0.01
+set g_balance_hlac_primary_spread_max 0.03
+set g_balance_hlac_primary_spread_add 0.002
+set g_balance_hlac_primary_spread_crouchmod 0.5
+
+set g_balance_hlac_primary_damage 6
+set g_balance_hlac_primary_edgedamage 0
+set g_balance_hlac_primary_force 60 // todo: probably needs movement nerfing code when hit
+set g_balance_hlac_primary_radius 850
+set g_balance_hlac_primary_speed 0
+set g_balance_hlac_primary_lifetime 0
+
+set g_balance_hlac_primary_refire 0.066
+set g_balance_hlac_primary_animtime 0.066
+set g_balance_hlac_primary_ammo 0.066
+
+set g_balance_hlac_secondary 0
+set g_balance_hlac_secondary_spread 0.06
+set g_balance_hlac_secondary_spread_crouchmod 0.5
+
+set g_balance_hlac_secondary_damage 11
+set g_balance_hlac_secondary_edgedamage 10
+set g_balance_hlac_secondary_force 60
+set g_balance_hlac_secondary_radius 70
+set g_balance_hlac_secondary_speed 20000
+set g_balance_hlac_secondary_lifetime 5
+
+set g_balance_hlac_secondary_refire 0.6
+set g_balance_hlac_secondary_animtime 0.6
+set g_balance_hlac_secondary_ammo 10
+set g_balance_hlac_secondary_shots 5
+// }}}
+// {{{ campingrifle
+set g_balance_campingrifle_magazinecapacity 0
+set g_balance_campingrifle_reloadtime 2 // matches reload anim
+set g_balance_campingrifle_auto_reload_after_changing_weapons 0
+set g_balance_campingrifle_bursttime 0.85 // 0.35 - 0.1 + 0.35 - 0.1 + 0.35 = three secondaries
+set g_balance_campingrifle_tracer 1
+set g_balance_campingrifle_primary_damage 50
+set g_balance_campingrifle_primary_headshotaddeddamage 80
+set g_balance_campingrifle_primary_spread 0
+set g_balance_campingrifle_primary_force 0
+set g_balance_campingrifle_primary_speed 35000
+set g_balance_campingrifle_primary_lifetime 5
+set g_balance_campingrifle_primary_refire 0.7
+set g_balance_campingrifle_primary_animtime 0.7
+set g_balance_campingrifle_primary_ammo 10
+set g_balance_campingrifle_primary_bulletconstant 130 // 56.3qu
+set g_balance_campingrifle_primary_burstcost 0.35 // require same cooldown as secondary, note it's smaller than primary refire time
+set g_balance_campingrifle_secondary_damage 15
+set g_balance_campingrifle_secondary_headshotaddeddamage 25
+set g_balance_campingrifle_secondary_spread 0.02
+set g_balance_campingrifle_secondary_force 0
+set g_balance_campingrifle_secondary_speed 20000
+set g_balance_campingrifle_secondary_lifetime 5
+set g_balance_campingrifle_secondary_refire 0.1
+set g_balance_campingrifle_secondary_animtime 0.1
+set g_balance_campingrifle_secondary_ammo 4
+set g_balance_campingrifle_secondary_bulletconstant 130 // 18.3qu
+set g_balance_campingrifle_secondary_burstcost 0.35
+// }}}
+// {{{ tuba
+set g_balance_tuba_refire 0.05
+set g_balance_tuba_animtime 0.05
+set g_balance_tuba_attenuation 0.5
+set g_balance_tuba_volume 1
+set g_balance_tuba_fadetime 0.25
+set g_balance_tuba_damage 5
+set g_balance_tuba_edgedamage 0
+set g_balance_tuba_radius 200
+set g_balance_tuba_force 40
+// }}}
+// {{{ fireball
+set g_balance_fireball_primary_ammo 40
+set g_balance_fireball_primary_animtime 0.15
+set g_balance_fireball_primary_bfgdamage 100
+set g_balance_fireball_primary_bfgforce 0
+set g_balance_fireball_primary_bfgradius 1000
+set g_balance_fireball_primary_damage 200
+set g_balance_fireball_primary_damageforcescale 4
+set g_balance_fireball_primary_edgedamage 0
+set g_balance_fireball_primary_force 700
+set g_balance_fireball_primary_health 50
+set g_balance_fireball_primary_laserburntime 0.5
+set g_balance_fireball_primary_laserdamage 80
+set g_balance_fireball_primary_laseredgedamage 20
+set g_balance_fireball_primary_laserradius 256
+set g_balance_fireball_primary_lifetime 15
+set g_balance_fireball_primary_radius 200
+set g_balance_fireball_primary_refire 5
+set g_balance_fireball_primary_refire2 0
+set g_balance_fireball_primary_speed 650
+set g_balance_fireball_primary_spread 0
+set g_balance_fireball_secondary_ammo 5
+set g_balance_fireball_secondary_animtime 0.3
+set g_balance_fireball_secondary_damage 40
+set g_balance_fireball_secondary_damageforcescale 4
+set g_balance_fireball_secondary_damagetime 5
+set g_balance_fireball_secondary_force 100
+set g_balance_fireball_secondary_laserburntime 0.5
+set g_balance_fireball_secondary_laserdamage 50
+set g_balance_fireball_secondary_laseredgedamage 20
+set g_balance_fireball_secondary_laserradius 110
+set g_balance_fireball_secondary_lifetime 7
+set g_balance_fireball_secondary_refire 2
+set g_balance_fireball_secondary_speed 900
+set g_balance_fireball_secondary_speed_up 100
+set g_balance_fireball_secondary_speed_z 0
+set g_balance_fireball_secondary_spread 0
+// }}}
+// {{{ seeker
+set g_balance_seeker_flac_ammo 0.5
+set g_balance_seeker_flac_animtime 0.1
+set g_balance_seeker_flac_damage 15
+set g_balance_seeker_flac_edgedamage 10
+set g_balance_seeker_flac_force 50
+set g_balance_seeker_flac_lifetime 0.1
+set g_balance_seeker_flac_lifetime_rand 0.05
+set g_balance_seeker_flac_radius 100
+set g_balance_seeker_flac_refire 0.1
+set g_balance_seeker_flac_speed 3000
+set g_balance_seeker_flac_speed_up 1000
+set g_balance_seeker_flac_spread 0.4
+set g_balance_seeker_missile_accel 1.05
+set g_balance_seeker_missile_ammo 2
+set g_balance_seeker_missile_animtime 0.3
+set g_balance_seeker_missile_count 4
+set g_balance_seeker_missile_damage 40
+set g_balance_seeker_missile_damageforcescale 4
+set g_balance_seeker_missile_decel 0.9
+set g_balance_seeker_missile_delay 0.25
+set g_balance_seeker_missile_edgedamage 10
+set g_balance_seeker_missile_force 250
+set g_balance_seeker_missile_health 5
+set g_balance_seeker_missile_lifetime 15
+set g_balance_seeker_missile_proxy 0
+set g_balance_seeker_missile_proxy_delay 0.2
+set g_balance_seeker_missile_proxy_maxrange 45
+set g_balance_seeker_missile_radius 80
+set g_balance_seeker_missile_refire 0.5
+set g_balance_seeker_missile_smart 1
+set g_balance_seeker_missile_smart_mindist 800
+set g_balance_seeker_missile_smart_trace_max 2500
+set g_balance_seeker_missile_smart_trace_min 1000
+set g_balance_seeker_missile_speed 700
+set g_balance_seeker_missile_speed_up 300
+set g_balance_seeker_missile_speed_max 1250
+set g_balance_seeker_missile_spread 0
+set g_balance_seeker_missile_turnrate 0.65
+set g_balance_seeker_tag_ammo 1
+set g_balance_seeker_tag_animtime 0.3
+set g_balance_seeker_tag_damageforcescale 4
+set g_balance_seeker_tag_health 5
+set g_balance_seeker_tag_lifetime 15
+set g_balance_seeker_tag_refire 0.7
+set g_balance_seeker_tag_speed 9000
+set g_balance_seeker_tag_spread 0
+// End new seeker
diff --git a/common-spog.pk3 b/common-spog.pk3
deleted file mode 100644 (file)
index 3696bbb..0000000
Binary files a/common-spog.pk3 and /dev/null differ
index 0143318..372784d 100644 (file)
@@ -20,3 +20,6 @@ _update_configversion_$g_configversion
 _update_generic
 
 set g_configversion 2
+
+// we now use mastervolume
+volume 1
index bb0294b..699503a 100644 (file)
@@ -251,6 +251,8 @@ cl_deathfade 1 // fade screen to dark red when dead, value represents how fast t
 cl_bobcycle 0 // how long the cycle of up/down view movement takes (only works if cl_bob is not 0), default is 0.6
 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_followmodel 1 // enables weapon pushing / pulling effect when walking
 cl_rollangle 0 // amount of view tilt when strafing, default is 2.0
 v_kicktime 0 // how long damage kicks of the view last, default is 0 seconds
 gl_polyblend 0.5 // whether to use screen tints, default is 1
@@ -317,6 +319,10 @@ set g_telefrags 1
 set g_telefrags_avoid 0
 set g_teleport_maxspeed 0 "maximum speed that a player can keep when going through a teleporter (if a misc_teleporter_dest also has a cap the smallest one of these will be used), 0 = don't limit, -1 = keep no speed"
 
+set g_respawn_ghosts 1 "if 1 dead bodies become ghosts and float away when the player respawns"
+set g_respawn_ghosts_speed 5 "the speed with which respawn ghosts float and rotate"
+set g_respawn_ghosts_maxtime 6 "maximum amount of time a respawn ghost can last, minimum time is half this value. 0 disables and ghosts fade when the body would"
+
 // fragmessage: This allows extra information to be displayed with the frag centerprints. 
 set sv_fragmessage_information_ping 0 "Enable ping display information, 0 = Never display; 1 = Always display (If the player is a bot, it will say bot instead of the ping.)"
 set sv_fragmessage_information_handicap 1 "Enable handicap display information, 0 = Never display; 1 = Only when the player has handicap on; 2 = Always display (Displays Off if off)"
@@ -1434,11 +1440,22 @@ alias sethostname "set menu_use_default_hostname 0; hostname $*"
 set sv_foginterval 0
 
 // Audio track names (for old-style "cd loop NUMBER" usage)
-set g_cdtracks_remaplist "digital-pursuit breakdown-easy brainsukker chaos-fog infight neuronal-diving subcities thru-the-mirror calling-bogus beast-of-insanity thunder brokenlight brokenlight stairs sixtyfour_ desert3 ninesix sixtyfour_revisited northern-lights" "list used by mapinfo system to automatically assign cdtracks - must match the cd remap command"
-set g_cdtracks_dontusebydefault "digital-pursuit thunder brokenlight" "list used by mapinfo system to automatically assign cdtracks - must be a subset of g_cdtracks_remaplist"
+set _cdtrack_first "1"
+alias _cdtrack_0 "g_cdtracks_remaplist \"$g_cdtracks_remaplist $1\""
+alias _cdtrack_1 "g_cdtracks_remaplist \"$1\"; set _cdtrack_first 0"
+alias _cdtrack "_cdtrack_$_cdtrack_first $2"
+set g_cdtracks_remaplist ""
+exec cdtracks.cfg
+unset _cdtrack_first
+unalias _cdtrack_0
+unalias _cdtrack_1
+unalias _cdtrack
+
 cd remap $g_cdtracks_remaplist
 set sv_intermission_cdtrack ""
-set menu_cdtrack brokenlight
+
+set g_cdtracks_dontusebydefault ""
+set menu_cdtrack "ninesix"
 
 // maxidle (in seconds): kick players idle for more than that amount of time
 set sv_maxidle 0
@@ -1804,3 +1821,12 @@ mod_q1bsp_polygoncollisions 1
 // improve some minor details
 sv_gameplayfix_gravityunaffectedbyticrate 1
 sv_gameplayfix_nogravityonground 1
+
+// autodemo deleting
+seta cl_autodemo_delete_keeprecords 0 "when 1, records with a newly made race/cts demo are kept even if cl_autodemo_delete is used to delete demos"
+
+// freeze camera
+set cl_lockview 0 "when 1, the camera does not move any more"
+
+// we now use mastervolume
+volume 1
index 2885afb..a644a84 100644 (file)
@@ -595,7 +595,7 @@ velocityjitter 0 0 256
 effect TE_TEI_G3
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 color 0xFFFFFF 0xFFFFFF
 size 4 4
 alpha 128 128 256
@@ -769,10 +769,11 @@ originjitter 11 11 11
 effect teleport
 count 1000
 type spark
-tex 40 40
-color 0x807aff 0x4463d5
-size 1 3
+tex 64 64
+color 0xff8400 0xff2a00
+size 1 1
 alpha 0 256 100
+stretchfactor 2
 //gravity 1
 bounce 1.5
 originjitter 1 1 1
@@ -780,6 +781,14 @@ velocityjitter 1000 1000 1500
 velocitymultiplier 0.5
 airfriction 2
 stretchfactor 0.6
+effect teleport
+countabsolute 1
+type smoke
+tex 65 65
+size 150 150
+alpha 190 190 180
+sizeincrease -80
+color 0xff8400 0xff2a00
 
 
 
@@ -873,20 +882,48 @@ lightcolor 2 2 2
 // used in qcsrc/server/w_hlac.qc:     pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
 // used in qcsrc/server/w_laser.qc:    pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
 effect laser_muzzleflash
-count 1
+// glow and light
+countabsolute 1
 type smoke
-color 0xFFFFFF 0xFFFFFF
-tex 0 8
-size 5 5
-alpha 64 64 128
-airfriction 12
-originjitter 1.5 1.5 1.5
-velocityjitter 6 6 6
-velocitymultiplier 0.01
+color 0xcc0000 0xff0000
+tex 65 65
+size 10 15
+alpha 256 512 6280
+airfriction 10
+sizeincrease -100
+stretchfactor 2
 lightradius 200
 lightradiusfade 2000
 lightcolor 3 0.1 0.1
-
+// electricity
+effect laser_muzzleflash
+count 6
+type spark
+color 0xb44215 0xff0000
+tex 43 43
+size 5 7
+alpha 256 512 6280
+airfriction 10
+originjitter 2 2 2
+velocityjitter 150 150 150
+velocitymultiplier 0.2
+sizeincrease -100
+stretchfactor 2.3
+rotate -180 180 4000 -4000
+// fire
+effect laser_muzzleflash
+count 12
+type spark
+color 0xff4200 0xff0000
+tex 8 15
+size 7 9
+alpha 256 512 6280
+airfriction 12
+originjitter 2 2 2
+velocityjitter 100 100 100
+velocitymultiplier 0.2
+sizeincrease -100
+stretchfactor 2
 
 
 // decal
@@ -955,19 +992,17 @@ lightcolor 2 1.5 0.2
 sizeincrease 12
 velocitymultiplier 0.05
 effect shotgun_muzzleflash
-count 10
+count 32
 type spark
-tex 40 40
-color 0xFFFDD9 0xff5a00
-size 2 2
+tex 48 55
+color 0xffdb96 0xff5400
+size 10 20
 alpha 0 128 1024
 originjitter 1 1 1
-velocityjitter 444 444 444
-velocitymultiplier 1.7
-gravity 0.3
+velocityjitter 100 100 100
 airfriction 5
-
-
+stretchfactor 2.5
+velocitymultiplier 0.5
 
 // shotgun pellet impact
 // decal
@@ -976,7 +1011,7 @@ effect shotgun_impact
 countabsolute 1
 type decal
 tex 56 59
-size 3 3
+size 5 8
 alpha 256 256 0
 originjitter 10 10 10
 //lightradius 30
@@ -984,43 +1019,48 @@ originjitter 10 10 10
 //lightcolor 1 1 1
 // dust/smoke drifting away from the impact
 effect shotgun_impact
-count 5
-type smoke
+type alphastatic
+notunderwater
 tex 0 8
-color 0xFFFFFF 0xA37443
-size 7 7
-alpha 0 64 32
-originjitter 1 1 1
-airfriction 7
-liquidfriction 16
-velocityjitter 100 100 100
-sizeincrease 12
-velocitymultiplier 0.25
+count 6
+size 10 20
+sizeincrease 25
+alpha 300 550 756
+velocityjitter 150 150 150
+velocitymultiplier 0.2
+airfriction 5
+color 0x473a37 0x0b0a07
+rotate 0 360 -50 50
 // dust/smoke staying at the impact
 effect shotgun_impact
+type alphastatic
+notunderwater
+tex 36 36
 count 1
-type smoke
-tex 0 8
-color 0xFFFFFF 0xFFFFFF
-size 17 17
-alpha 64 64 32
-sizeincrease 4
+size 10 11
+sizeincrease 74
+alpha 200 350 500
+velocityjitter 11 11 11
+airfriction 5
+color 0x201d1a 0x000000
+bounce 6
+velocitymultiplier 0.03
+rotate 0 360 -50 50
 // sparks
 effect shotgun_impact
 notunderwater
-count 20
+count 3
 type spark
 tex 40 40
 color 0xFDFFD9 0xFDFFD9
 size 0.6 0.6
-alpha 256 256 768
+alpha 0 356 268
 gravity 1
-bounce 1
-airfriction 5
+bounce 1.5
+airfriction 1.1
 originjitter 1 1 1
-velocityjitter 400 400 400
-velocitymultiplier 0.1
-
+velocityjitter 200 200 200
+velocitymultiplier 0.2
 
 
 // used in qcsrc/server/w_uzi.qc:      pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
@@ -1051,10 +1091,10 @@ velocitymultiplier 0.5
 airfriction 12
 
 
-// decal
 // used in qcsrc/server/cl_client.qc:  //pointparticles(particleeffectnum("machinegun_impact"), self.origin + self.view_ofs + '0 0 7', '0 0 0', 1)
 // used in qcsrc/client/damage.qc:                             pointparticles(particleeffectnum("machinegun_impact"), org2, backoff * 1000, 1)
 // used in qcsrc/client/damage.qc:                             pointparticles(particleeffectnum("machinegun_impact"), org2, backoff * 1000, 1)
+// decal
 effect machinegun_impact
 countabsolute 1
 type decal
@@ -1067,42 +1107,64 @@ lightradiusfade 800
 lightcolor 6 3.6 0.6
 // dust/smoke drifting away from the impact
 effect machinegun_impact
-count 5
-type smoke
+type alphastatic
+notunderwater
 tex 0 8
-color 0xFFFFFF 0xA37443
-size 7 7
-alpha 0 64 32
-originjitter 1 1 1
-airfriction 7
-liquidfriction 16
-velocityjitter 100 100 100
-sizeincrease 12
-velocitymultiplier 0.25
+count 6
+size 10 20
+sizeincrease 15
+alpha 300 550 456
+velocityjitter 150 150 150
+velocitymultiplier 0.1
+airfriction 5
+color 0x473a37 0x0b0a07
+rotate 0 360 -50 50
 // dust/smoke staying at the impact
 effect machinegun_impact
+type alphastatic
+notunderwater
+tex 36 36
 count 1
-type smoke
-tex 0 8
-color 0xFFFFFF 0xFFFFFF
-size 17 17
-alpha 64 64 32
-sizeincrease 4
+size 10 11
+sizeincrease 74
+alpha 200 350 500
+velocityjitter 11 11 11
+airfriction 5
+color 0x201d1a 0x000000
+bounce 6
+velocitymultiplier 0.03
+rotate 0 360 -50 50
+//derbis
+effect machinegun_impact
+type alphastatic
+notunderwater
+tex 66 68
+count 2
+size 1 5
+airfriction 1
+gravity 1.4
+alpha 300 550 256
+velocityjitter 350 350 350
+velocitymultiplier 0.2
+bounce 1.7
+color 0x63493e 0xffffff
+rotate 0 360 -500 500
 // sparks
 effect machinegun_impact
 notunderwater
-count 20
+count 2
 type spark
 tex 40 40
 color 0xFDFFD9 0xFDFFD9
 size 0.3 0.3
-alpha 256 256 768
+alpha 256 256 168
 gravity 1
 bounce 1
-airfriction 5
+airfriction 2
 originjitter 1 1 1
-velocityjitter 400 400 400
-velocitymultiplier 0.1
+velocityjitter 300 300 300
+velocitymultiplier 0.2
+
 
 
 
@@ -1125,16 +1187,17 @@ lightradius 200
 lightradiusfade 2000
 lightcolor 2 1.5 0.2
 effect grenadelauncher_muzzleflash
-count 30
+count 32
 type spark
-tex 40 40
-color 0xFFFDD9 0xFFFDD9
-size 3 3
+tex 48 55
+color 0xffdb96 0xff5400
+size 10 20
 alpha 0 128 1024
 originjitter 1 1 1
-velocityjitter 300 300 300
+velocityjitter 100 100 100
 velocitymultiplier 0.5
-airfriction 12
+airfriction 5
+stretchfactor 2.5
 
 
 
@@ -1143,14 +1206,14 @@ airfriction 12
 // used in qcsrc/client/projectile.qc:                 trailparticles(self, particleeffectnum("TR_GRENADE"), from, to)
 // used in qcsrc/client/projectile.qc:                 trailparticles(self, particleeffectnum("TR_GRENADE"), from, to)
 effect TR_GRENADE
-trailspacing 6
-type alphastatic
-color 0x303030 0x000000
+trailspacing 2
+type smoke
+color 0x101010 0x000000
 tex 0 8
-size 1 2
+size 3 2
 bounce 1
-sizeincrease 2
-alpha 100 200 280
+sizeincrease 10
+alpha 300 400 780
 originjitter 1 1 1
 velocityjitter 1 1 1
 velocitymultiplier -0.02
@@ -1191,14 +1254,14 @@ velocityjitter 16 16 16
 // used in qcsrc/client/projectile.qc:                 trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), from, to)
 effect TR_KNIGHTSPIKE // used for MF_TRACER2
 notunderwater
-trailspacing 5
-type alphastatic
+trailspacing 3
+type smoke
 color 0x303030 0x000000
 tex 0 8
 size 3 3
 bounce 1
 sizeincrease 11
-alpha 100 200 400
+alpha 300 400 600
 originjitter 2 2 2
 velocityjitter 3 3 3
 velocitymultiplier -0.02
@@ -1234,55 +1297,55 @@ effect grenade_explode
 countabsolute 1
 type decal
 tex 8 16
-size 72 72
+size 48 48
 alpha 256 256 0
-originjitter 23 23 23
-lightradius 400
-lightradiusfade 750
+originjitter 26 26 26
+lightradius 250
+lightradiusfade 400
 lightcolor 8 4 1
-// fire effect
+// fire effect which expands then slows
 effect grenade_explode
 notunderwater
-count 64
+count 80
 type static
 tex 48 55
-color 0x8f0d00 0xff5a00
-size 33 44
-sizeincrease 45
-alpha 200 256 512
-bounce 1.5
+color 0xe03f00 0x5e0000
+size 16 26
+sizeincrease 20
+alpha 128 228 356
+bounce 4.5
 airfriction 8
 liquidfriction 8
 originjitter 8 8 8
-velocityjitter 512 512 512
-// fire effect 2
+velocityjitter 256 256 256
+// fire effect which make brigt dot inside
 effect grenade_explode
 notunderwater
-count 28
-type smoke
+count 30
+type static
 tex 48 55
-color 0xea691b 0xeed05a
-size 33 44
-sizeincrease 55
-alpha 200 256 612
-bounce 2.5
-airfriction 19
-liquidfriction 19
+color 0xe03f00 0xffdf92
+size 6 16
+sizeincrease 40
+alpha 228 328 756
+bounce 1
+airfriction 8
+liquidfriction 8
 originjitter 8 8 8
-velocityjitter 912 912 912
+velocityjitter 256 256 256
 // smoke
 effect grenade_explode
 type alphastatic
 notunderwater
 tex 0 8
-count 64
+count 20
 size 20 40
-sizeincrease 44
-alpha 200 450 456
-velocityjitter 444 444 444
+sizeincrease 34
+alpha 300 550 556
+velocityjitter 256 256 256
 airfriction 5
 color 0x000000 0x111111
-bounce 2
+bounce 6
 // underwater bubbles
 effect grenade_explode
 underwater
@@ -1290,60 +1353,100 @@ count 64
 type bubble
 tex 62 62
 color 0x404040 0x808080
-size 3 3
+size 3 6
 alpha 128 256 64
 gravity -0.125
 bounce 1.5
 liquidfriction 0.25
 originjitter 16 16 16
-velocityjitter 144 144 144
+velocityjitter 196 196 196
+rotate 0 0 0 0
+// underwatershockwave
+effect grenade_explode
+underwater
+type smoke
+countabsolute 1
+tex 33 33
+size 5 5
+sizeincrease 1500
+alpha 40 40 300
+velocitymultiplier 0.3
 // bouncing sparks
 effect grenade_explode
 notunderwater
-count 64
+count 32
 type spark
 tex 40 40
-color 0xffa800 0xffedaf
-size 1 1
-sizeincrease 2
-alpha 44 256 384
+color 0xffa35b 0xfff2be
+size 1 0.1
+alpha 644 956 484
 gravity 1
-airfriction -1
-bounce 1.5
+airfriction 1
+bounce 1.6
 liquidfriction 0.8
 velocityoffset 0 0 80
 originjitter 16 16 16
-velocityjitter 224 224 324
+velocityjitter 424 424 624
+// derbis
+effect grenade_explode
+notunderwater
+count 24
+type alphastatic
+tex 66 68
+color 0x6a3d25 0xcac5b4
+size 2 6
+alpha 644 956 684
+gravity 1.3
+airfriction 0.5
+bounce 1.6
+velocityjitter 324 324 524
+rotate -180 180 -1000 1000
 
 
 
 // used in qcsrc/server/w_electro.qc:  pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
 // used in qcsrc/server/w_electro.qc:  pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
 effect electro_muzzleflash
-count 1
+countabsolute 1
 type smoke
 color 0x283880 0x283880 // 0x202020 0x404040
-tex 0 8
-size 5
+tex 65 65
+size 15 15
 alpha 256 256 512
 originjitter 1.5 1.5 1.5
 velocityjitter 6 6 6
+sizeincrease -10
 velocitymultiplier 0.01
 lightradius 200
 lightradiusfade 2000
 lightcolor 1.5 3 6
+
 effect electro_muzzleflash
-count 30
+count 14
 type spark
-tex 31 31
+tex 8 15
 color 0xD9FDFF 0xD9FDFF
-size 3 3
-alpha 0 128 1024
+size 5 15
+alpha 110 228 2024
 originjitter 1 1 1
-velocityjitter 300 300 300
+velocityjitter 150 150 150
 velocitymultiplier 0.5
-airfriction 12
+airfriction 2
+stretchfactor 1.5
 
+effect electro_muzzleflash
+count 10
+type spark
+tex 41 41
+color 0xD9FDFF 0xD9FDFF
+size 7 6
+alpha 110 228 1024
+originjitter 1 1 1
+velocityjitter 350 350 350
+velocitymultiplier 2.5
+airfriction 8
+gravity 1.3
+stretchfactor 0.1
 
 
 // electro trail
@@ -1391,6 +1494,16 @@ originjitter 17 17 17
 lightradius 250
 lightradiusfade 250
 lightcolor 3.125 4.375 10
+// shockwave
+effect electro_impact
+type smoke
+countabsolute 1
+tex 33 33
+size 32 32
+sizeincrease 1000
+color 0x80C0FF 0x80C0FF
+alpha 40 40 350
+velocitymultiplier 44
 // flare effect
 effect electro_impact
 countabsolute 1
@@ -1413,6 +1526,7 @@ gravity -0.3
 airfriction 6
 originjitter 1 1 1
 velocityjitter 512 512 512
+rotate -180 180 -9999 9999
 // inner cloud of smoke
 effect electro_impact
 count 60
@@ -1452,9 +1566,10 @@ count 128
 type spark
 tex 41 41
 color 0xFDFFD9 0xFDFFD9
-size 16 16
+size 1 2
 alpha 256 256 1024
 bounce 2
+stretchfactor 0.4
 //airfriction 2
 originjitter 1 1 1
 velocityjitter 512 512 512
@@ -1493,11 +1608,13 @@ size 48 48
 alpha 128 128 64
 // large sparks
 effect electro_combo
-count 20
+count 10
 type static
 color 0x2030FF 0x80C0FF
 size 32 32
-alpha 256 256 256
+sizeincrease 50
+tex 0 7
+alpha 156 156 156
 bounce 2
 airfriction 6
 liquidfriction 16
@@ -1507,13 +1624,16 @@ effect electro_combo
 count 64
 type spark
 tex 41 41
-color 0xFDFFD9 0xFDFFD9
-size 16 16
-alpha 444 512 866
-bounce 2
+color 0xa9cacf 0x0054ff
+size 2 4
+stretchfactor 2
+gravity 0.3
+alpha 444 512 700
+velocitymultiplier 3
+bounce 1.6
 //airfriction 2
 originjitter 1 1 1
-velocityjitter 512 512 512
+velocityjitter 312 312 312
 // inner cloud of smoke
 effect electro_combo
 count 0.25
@@ -1524,6 +1644,16 @@ size 24 24
 alpha 256 256 256
 originjitter 20 20 20
 velocityjitter 32 32 32
+// shockwave
+effect electro_combo
+type smoke
+countabsolute 1
+color 0xa9cacf 0x0054ff
+tex 33 33
+size 30 30
+sizeincrease 600
+alpha 40 40 100
+velocitymultiplier 0.3
 
 
 
@@ -1532,12 +1662,10 @@ velocityjitter 32 32 32
 effect crylink_muzzleflash
 count 1
 type smoke
-color 0x202020 0x404040
-tex 0 8
-size 5 5
-alpha 128 128 256
-originjitter 1.5 1.5 1.5
-velocityjitter 6 6 6
+color 0xdd9cff 0xff0090
+tex 65 65
+size 15 20
+alpha 128 128 2024
 velocitymultiplier 0.01
 lightradius 200
 lightradiusfade 2000
@@ -1545,15 +1673,15 @@ lightcolor 1.6 0.2 2
 effect crylink_muzzleflash
 count 10
 type spark
-tex 40 40
+tex 35 36
 color 0xA080C0 0xA080C0
-size 3 3
+size 5 10
 alpha 0 128 1024
 originjitter 1 1 1
 velocityjitter 200 200 200
 velocitymultiplier 0.3
 airfriction 12
-
+stretchfactor 1.5
 
 
 // crylink impact effect
@@ -1584,7 +1712,7 @@ type spark
 tex 41 41
 color 0xA040C0 0xA040C0
 bounce 2
-size 4 4
+size 1 2
 alpha 256 256 1024
 velocityjitter 256 256 256
 // purple splash
@@ -1609,28 +1737,31 @@ velocityjitter 32 32 32
 // used in qcsrc/server/w_minstanex.qc:        pointparticles(particleeffectnum("nex_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
 // used in qcsrc/client/particles.qc:  pointparticles(particleeffectnum("nex_muzzleflash"), shotorg, normalize(endpos - shotorg) * 1000, 1)
 effect nex_muzzleflash
-count 10
-type smoke
-color 0x202020 0x404040
-tex 0 8
+count 24
+type spark
+color 0x202020 0x0072ff
+tex 48 55
 size 16 16
-alpha 128 128 192
+alpha 328 328 4000
 originjitter 4 4 4
-velocityjitter 24 24 24
-velocitymultiplier 0.02
+velocityjitter 180 180 180
+velocitymultiplier 1.4
+stretchfactor 2
+sizeincrease -100
+airfriction 9
 lightradius 200
 lightradiusfade 200
 lightcolor 2 2.5 3
 effect nex_muzzleflash
-count 150
+count 100
 type spark
 tex 41 41
 color 0xD9FDFF 0xD9FDFF
-size 3 3
+size 1 1
 alpha 0 128 1024
 originjitter 1 1 1
 velocityjitter 600 600 600
-velocitymultiplier 0.5
+velocitymultiplier 1.5
 airfriction 9
 
 
@@ -1639,7 +1770,7 @@ airfriction 9
 //effect nex_beam
 //countabsolute 1
 //type beam
-//tex 60 60
+//tex 200 200
 //color 0xFFFFFF 0xFFFFFF
 //size 6 6
 //alpha 128 128 192
@@ -1698,15 +1829,35 @@ originjitter 14 14 14
 lightradius 200
 lightradiusfade 250
 lightcolor 4 6 8
+rotate -180 180 0 0
+// rotating something
+effect nex_impact
+count 10
+type smoke
+tex 46 46
+color 0x1680A0 0x1680A0
+size 25 28
+sizeincrease 20
+alpha 55 55 50
+rotate 180 -180 500 -500
 // shockwave
 effect nex_impact
 countabsolute 1
 type static
-tex 34 34
+tex 33 33
+color 0x1680A0 0x1680A0
 size 16 16
-alpha 100 100 300
-sizeincrease 200
-
+alpha 50 50 400
+sizeincrease 900
+// shockwave2
+effect nex_impact
+countabsolute 1
+type static
+tex 65 65
+color 0x1680A0 0x1680A0
+size 5 5
+alpha 50 50 100
+sizeincrease 500
 
 // flare effect
 effect nex_impact
@@ -1736,11 +1887,24 @@ color 0xD9FDFF 0xD9FDFF
 size 4 4
 alpha 0 128 512
 bounce 2
+stretchfactor 3
 velocityjitter 600 600 600
 velocitymultiplier 0.5
 airfriction 9
-
-
+// small sparks that live longer
+effect nex_impact
+count 32
+type spark
+tex 41 41
+color 0xD9FDFF 0xD9FDFF
+size 2 2
+alpha 255 255 112
+bounce 1.6
+stretchfactor 0.7
+velocityjitter 300 300 600
+velocitymultiplier 2.5
+airfriction 2
+gravity 1
 
 // used in qcsrc/server/w_hagar.qc:    pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
 // used in qcsrc/server/w_hagar.qc:    pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
@@ -1761,14 +1925,16 @@ lightcolor 2 1.5 0.2
 effect hagar_muzzleflash
 count 30
 type spark
-tex 40 40
-color 0xFFFDD9 0xFFFDD9
-size 3 3
+tex 48 55
+color 0xff8400 0xff4200
+size 5 10
 alpha 0 128 1024
 originjitter 1 1 1
-velocityjitter 300 300 300
+velocityjitter 200 200 200
 velocitymultiplier 0.5
 airfriction 12
+stretchfactor 2
+rotate -180 180 -400 400
 
 
 
@@ -1878,18 +2044,19 @@ velocityjitter 96 96 96
 // bouncing sparks
 effect hagar_explode
 notunderwater
-count 16
+count 8
 type spark
-color 0x903010 0xFFD030
-size 2 2
 tex 40 40
-alpha 256 256 384
+color 0xffa35b 0xfff2be
+size 1 0.1
+alpha 644 956 684
 gravity 1
-airfriction 0.2
-bounce 1.5
+airfriction 1
+bounce 1.6
 liquidfriction 0.8
 velocityoffset 0 0 80
-velocityjitter 256 256 256
+originjitter 16 16 16
+velocityjitter 224 224 224
 
 
 
@@ -1910,16 +2077,18 @@ velocitymultiplier -0.13
 //lightradiusfade 2000
 //lightcolor 2 1.5 0.2
 effect rocketlauncher_muzzleflash
-count 30
-type spark
-tex 40 40
+count 12
+type smoke
+tex 35 36
 color 0xFFFDD9 0xFFFDD9
-size 3 3
-alpha 0 128 1024
-originjitter 1 1 1
-velocityjitter 300 300 300
-velocitymultiplier 0.5
-airfriction 12
+size 5 10
+sizeincrease 20
+alpha 10 25 20
+originjitter 3 3 3
+velocityjitter 100 100 100
+velocitymultiplier 0.3
+airfriction 9
+rotate -180 180 -30 30
 
 
 
@@ -1931,10 +2100,11 @@ airfriction 12
 // used in qcsrc/client/projectile.qc:                 trailparticles(self, particleeffectnum("TR_ROCKET"), from, to)
 effect TR_ROCKET
 trailspacing 5
-type alphastatic
+type smoke
+notunderwater
 color 0x000000 0x666666
 tex 0 8
-size 1 4
+size 3 4
 bounce 1
 sizeincrease 11
 alpha 200 300 200
@@ -1944,10 +2114,10 @@ lightcolor 6 3 1
 originjitter 2 2 2
 velocityjitter 3 3 3
 velocitymultiplier -0.02
+rotate -180 180 -30 30
 //gravity -0.11
 // fire
 effect TR_ROCKET
-notunderwater
 trailspacing 2
 type static
 color 0xffdf72 0x811200
@@ -1960,25 +2130,28 @@ velocityjitter 32 32 32
 velocitymultiplier -1.5
 // bubbles
 effect TR_ROCKET
+type bubble
 underwater
 trailspacing 8
-type bubble
 tex 62 62
-color 0x404040 0x808080
-size 1 1
+size 1 2
 alpha 256 256 256
 gravity -0.125
 bounce 1.5
 liquidfriction 4
 velocityjitter 16 16 16
+velocitymultiplier -0.31
+rotate 0 0 0 0
 // sparks
 effect TR_ROCKET
+notunderwater
 trailspacing 10
 type spark
 tex 40 40
 color 0xFFFDD9 0xFFFDD9
-size 1 1
+size 0.5 0.5
 alpha 444 512 1866
+stretchfactor 0.3
 //gravity 1
 bounce 1
 //velocityoffset 0 0 15
@@ -1992,59 +2165,59 @@ effect rocket_explode
 countabsolute 1
 type decal
 tex 8 16
-size 48 48
+size 72 72
 alpha 256 256 0
-originjitter 26 26 26
-lightradius 250
-lightradiusfade 400
+originjitter 23 23 23
+lightradius 400
+lightradiusfade 750
 lightcolor 8 4 1
-// fire effect which expands then slows
+// fire effect
 effect rocket_explode
 notunderwater
-count 80
+count 64
 type static
 tex 48 55
-color 0xe03f00 0x5e0000
-size 16 26
-sizeincrease 20
-alpha 128 228 356
-bounce 4.5
+color 0x8f0d00 0xff5a00
+size 33 44
+sizeincrease 45
+alpha 200 256 512
+bounce 1.5
 airfriction 8
 liquidfriction 8
 originjitter 8 8 8
-velocityjitter 256 256 256
-// fire effect which make brigt dot inside
+velocityjitter 512 512 512
+// fire effect 2
 effect rocket_explode
 notunderwater
-count 30
-type static
+count 28
+type smoke
 tex 48 55
-color 0xe03f00 0xffdf92
-size 6 16
-sizeincrease 40
-alpha 228 328 756
-bounce 1
-airfriction 8
-liquidfriction 8
+color 0xea691b 0xeed05a
+size 33 44
+sizeincrease 55
+alpha 200 256 612
+bounce 2.5
+airfriction 19
+liquidfriction 19
 originjitter 8 8 8
-velocityjitter 256 256 256
+velocityjitter 912 912 912
 // smoke
 effect rocket_explode
 type alphastatic
 notunderwater
 tex 0 8
-count 20
+count 64
 size 20 40
-sizeincrease 34
-alpha 300 550 556
-velocityjitter 256 256 256
+sizeincrease 44
+alpha 200 450 456
+velocityjitter 444 444 444
 airfriction 5
 color 0x000000 0x111111
-bounce 6
+bounce 2
 // underwater bubbles
 effect rocket_explode
 underwater
-count 32
+count 64
 type bubble
 tex 62 62
 color 0x404040 0x808080
@@ -2054,24 +2227,47 @@ gravity -0.125
 bounce 1.5
 liquidfriction 0.25
 originjitter 16 16 16
-velocityjitter 96 96 96
+velocityjitter 144 144 144
+// underwatershockwave
+effect rocket_explode
+underwater
+type smoke
+countabsolute 1
+tex 33 33
+size 30 30
+sizeincrease 1900
+alpha 40 40 300
+velocitymultiplier 0.3
 // bouncing sparks
 effect rocket_explode
 notunderwater
-count 16
+count 32
 type spark
-color 0x903010 0xFFD030
-size 2 2
 tex 40 40
-alpha 256 256 384
+color 0xffa35b 0xfff2be
+size 1 0.1
+alpha 644 956 484
 gravity 1
-airfriction 0.2
-bounce 1.5
+airfriction 1
+bounce 1.6
 liquidfriction 0.8
 velocityoffset 0 0 80
-velocityjitter 256 256 256
-
-
+originjitter 16 16 16
+velocityjitter 424 424 624
+// derbis
+effect rocket_explode
+notunderwater
+count 24
+type alphastatic
+tex 66 68
+color 0x6a3d25 0xcac5b4
+size 2 6
+alpha 644 956 684
+gravity 1.3
+airfriction 0.5
+bounce 1.6
+velocityjitter 324 324 524
+rotate -180 180 -1000 1000
 
 // used in qcsrc/server/g_hook.qc:     pointparticles(particleeffectnum("grapple_muzzleflash"), org, '0 0 0', 1)
 effect grapple_muzzleflash
@@ -2093,7 +2289,7 @@ lightcolor 1 0 0
 effect nex242_misc_laser_beam
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 size 1 1
 alpha 256 256 64
 color 0xff0000 0xff0000
@@ -2117,7 +2313,7 @@ velocitymultiplier 100
 effect nex242_misc_laser_beam_fast
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 size 1 1
 alpha 256 256 640
 color 0xff0000 0xff0000
@@ -2140,7 +2336,7 @@ velocitymultiplier 100
 effect nex242_misc_laser_green_beam
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 size 1 1
 alpha 256 256 64
 color 0x00ff00 0x00ff00
@@ -2162,7 +2358,7 @@ velocitymultiplier 100
 effect nex242_misc_laser_blue_beam
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 size 1 1
 alpha 256 256 64
 color 0x0000ff 0x0000ff
@@ -2184,7 +2380,7 @@ velocitymultiplier 100
 effect nex242_misc_laser_yellow_beam
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 size 1 1
 alpha 256 256 64
 color 0xffff00 0xffff00
@@ -2206,7 +2402,7 @@ velocitymultiplier 100
 effect nex242_misc_laser_cyan_beam
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 size 1 1
 alpha 256 256 64
 color 0x00ffff 0x00ffff
@@ -2228,7 +2424,7 @@ velocitymultiplier 100
 effect nex242_misc_laser_magenta_beam
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 size 1 1
 alpha 256 256 64
 color 0xff00ff 0xff00ff
@@ -2250,7 +2446,7 @@ velocitymultiplier 100
 effect nex242_misc_laser_white_beam
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 size 1 1
 alpha 256 256 64
 color 0xffffff 0xffffff
@@ -2272,7 +2468,7 @@ velocitymultiplier 100
 effect nex242_misc_laser_black_beam
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 size 1 1
 alpha 256 256 64
 color 0x000000 0x000000
@@ -2294,7 +2490,7 @@ velocitymultiplier 100
 effect nex242_misc_laser_orange_beam
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 size 1 1
 alpha 256 256 64
 color 0xff6600 0xff6600
@@ -2452,6 +2648,7 @@ airfriction 3
 liquidfriction 6
 velocityjitter 512 512 512
 
+
 // decal
 // used in qcsrc/server/g_triggers.qc:                                 self.cnt = particleeffectnum("laser_deadly")
 // used in qcsrc/server/g_triggers.qc:                 self.cnt = particleeffectnum("laser_deadly")
@@ -3594,41 +3791,42 @@ originjitter 10 10 10
 effect morphed_damage_dissolve
 tex 43 43
 count 20
-type spark
+type smoke
 color 0xffffff 0x9271fb
-size 62 62
+size 40 40
 sizeincrease -16
-alpha 256 256 328
-gravity -0.4
-airfriction 3
+alpha 456 456 1828
+gravity -1.9
+airfriction 8
 liquidfriction 6
 velocityjitter 256 256 512
+rotate -180 180 -399 -99
 
 effect morphed_damage_dissolve
 tex 43 43
 count 5
-type spark
+type smoke
 color 0x7bdbff 0xbed2ff
-size 62 62
+size 40 40
 sizeincrease -16
-alpha 256 256 328
+alpha 256 256 628
 gravity -0.8
-airfriction 5
+airfriction 9
 liquidfriction 6
 velocityjitter 256 256 512
+rotate -180 180 0 0
 
 effect morphed_damage_dissolve
-tex 0 8
+tex 65 65
 count 10
 type smoke
 color 0xffffff 0x9271fb
 size 44 44
 sizeincrease -16
-alpha 256 256 228
+alpha 156 156 128
 airfriction 3
 liquidfriction 6
-originjitter 32 32 96
-
+originjitter 22 22 76
 
 effect morphed_damage_dissolve
 tex 46 46
@@ -3637,18 +3835,19 @@ type smoke
 color 0xffffff 0x9271fb
 size 32 32
 sizeincrease -16
-alpha 256 256 228
+alpha 56 56 128
 gravity 1
 bounce 1.5
 airfriction 3
 liquidfriction 6
 velocityjitter 400 400 0
+rotate -180 180 999 -999
 
 // Team / hit minsta effects
 effect TE_TEI_G3RED
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 color 0xFF0000 0xFF0000
 size 4 4
 alpha 128 128 256
@@ -3669,7 +3868,7 @@ type smoke
 effect TE_TEI_G3RED_HIT
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 color 0xFF0000 0xFF0000
 size 8 8
 alpha 128 128 256
@@ -3700,7 +3899,7 @@ type smoke
 effect TE_TEI_G3BLUE
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 color 0x0000FF 0x1100FF
 size 4 4
 alpha 128 128 256
@@ -3721,7 +3920,7 @@ type smoke
 effect TE_TEI_G3BLUE_HIT
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 color 0x0000FF 0x1100FF
 size 8 8
 alpha 128 128 256
@@ -3753,7 +3952,7 @@ type smoke
 effect TE_TEI_G3YELLOW
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 color 0xffff00 0xffff11
 size 4 4
 alpha 128 128 256
@@ -3772,7 +3971,7 @@ type smoke
 effect TE_TEI_G3YELLOW_HIT
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 color 0xffff00 0xffff11
 size 8 8
 alpha 128 128 256
@@ -3803,7 +4002,7 @@ type smoke
 effect TE_TEI_G3PINK
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 color 0xFF00FF 0xFF11FF
 size 4 4
 alpha 128 128 256
@@ -3824,7 +4023,7 @@ type smoke
 effect TE_TEI_G3PINK_HIT
 countabsolute 1
 type beam
-tex 60 60
+tex 200 200
 color 0xFF00FF 0xFF11FF
 size 8 8
 alpha 128 128 256
@@ -4498,20 +4697,6 @@ velocityjitter 16 16 16
 
 
 // rocket guiding start
-// smoke
-effect rocket_guide
-type alphastatic
-notunderwater
-tex 0 8
-count 5
-size 10 20
-sizeincrease 17
-alpha 300 550 556
-velocityjitter 128 128 128
-airfriction 5
-color 0x000000 0x111111
-bounce 6
-velocitymultiplier -0.1
 // underwater bubbles
 effect rocket_guide
 underwater
@@ -4533,16 +4718,25 @@ notunderwater
 count 16
 type spark
 color 0x903010 0xFFD030
-size 2 2
+size 0.3 0.7
 tex 40 40
-alpha 256 256 384
+alpha 256 256 984
 gravity 1
 airfriction 0.2
 bounce 1.5
 liquidfriction 0.8
 velocityoffset 0 0 80
-velocityjitter 256 256 256
-velocitymultiplier -0.1
+velocityjitter 156 156 156
+velocitymultiplier -0.3
+stretchfactor 0.4
+effect rocket_guide
+countabsolute 1
+type smoke
+tex 65 65
+color 0x903010 0xFFD030
+size 10 10
+sizeincrease 300
+alpha 100 100 500
 
 
 // gauntlet laser
@@ -4630,3 +4824,86 @@ originjitter 10 10 10
 velocitymultiplier 20
 velocityoffset 0 0 10
 airfriction 1
+
+//happy death fx for cl_gentle
+effect happy_damage_dissolve
+tex 69 69
+count 30
+type alphastatic
+color 0x00FFFF 0xFF00FF
+size 32 32
+sizeincrease -10
+alpha 256 256 228
+gravity -0.4
+bounce 1.5
+airfriction 3
+liquidfriction 6
+velocityjitter 312 312 312
+effect happy_damage_dissolve
+tex 69 69
+count 30
+type alphastatic
+color 0xFF00FF 0xFFFF00
+size 32 32
+sizeincrease -10
+alpha 256 256 228
+gravity -0.4
+bounce 1.5
+airfriction 3
+liquidfriction 6
+velocityjitter 312 312 312
+effect happy_damage_dissolve
+tex 69 69
+count 30
+type alphastatic
+color 0xFFFF00 0x00FFFF
+size 32 32
+sizeincrease -10
+alpha 256 256 228
+gravity -0.4
+bounce 1.5
+airfriction 3
+liquidfriction 6
+velocityjitter 312 312 312
+
+
+//happy damage fx for cl_gentle
+effect happy_damage_hit
+tex 69 69
+count 0.2
+type alphastatic
+color 0x00FFFF 0xFF00FF
+size 26 26
+sizeincrease -28
+alpha 128 128 192
+gravity -0.4
+bounce 1.5
+airfriction 5
+liquidfriction 10
+velocityjitter 156 156 156
+effect happy_damage_hit
+tex 69 69
+count 0.2
+type alphastatic
+color 0xFF00FF 0xFFFF00
+size 26 26
+sizeincrease -28
+alpha 128 128 192
+gravity -0.4
+bounce 1.5
+airfriction 5
+liquidfriction 10
+velocityjitter 156 156 156
+effect happy_damage_hit
+tex 69 69
+count 0.2
+type alphastatic
+color 0xFFFF00 0x00FFFF
+size 26 26
+sizeincrease -28
+alpha 128 128 192
+gravity -0.4
+bounce 1.5
+airfriction 5
+liquidfriction 10
+velocityjitter 156 156 156
\ No newline at end of file
diff --git a/font-dejavu.pk3dir/font-dejavu.cfg b/font-dejavu.pk3dir/font-dejavu.cfg
deleted file mode 100644 (file)
index 4b3200f..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-// must be loaded AFTER config.cfg
-utf8_enable 1
-r_font_disable_freetype 0
-r_font_size_snapping 2
-loadfont console fonts/DejaVuSansMono,gfx/conchars $con_textsize
-loadfont notify fonts/DejaVuSans-Bold,gfx/vera-sans $con_notifysize
-loadfont chat fonts/DejaVuSans-Bold,gfx/vera-sans $con_chatsize
-loadfont centerprint fonts/DejaVuSansMono,gfx/conchars 9
-loadfont infobar fonts/DejaVuSansMono,gfx/conchars 8
-loadfont user0 fonts/DejaVuSans-Bold,gfx/vera-sans 9.6 12 12.8 16
-loadfont user1 fonts/DejaVuSans-Bold,gfx/vera-sans 8 10 14 $sbar_fontsize $scr_centersize // csqc font
-loadfont user2 fonts/DejaVuSans-Bold,gfx/vera-sans 16 24 32 // csqc bigfont
-sbar_columns_set
diff --git a/font-dejavu.pk3dir/fonts/DejaVuSans-Bold.ttf b/font-dejavu.pk3dir/fonts/DejaVuSans-Bold.ttf
deleted file mode 100644 (file)
index b8f6c3e..0000000
Binary files a/font-dejavu.pk3dir/fonts/DejaVuSans-Bold.ttf and /dev/null differ
diff --git a/font-dejavu.pk3dir/fonts/DejaVuSansMono.ttf b/font-dejavu.pk3dir/fonts/DejaVuSansMono.ttf
deleted file mode 100644 (file)
index af80fb7..0000000
Binary files a/font-dejavu.pk3dir/fonts/DejaVuSansMono.ttf and /dev/null differ
diff --git a/gfx/menu/wickedx/background.tga b/gfx/menu/wickedx/background.tga
new file mode 100644 (file)
index 0000000..d785d64
Binary files /dev/null and b/gfx/menu/wickedx/background.tga differ
diff --git a/gfx/menu/wickedx/background_ingame.tga b/gfx/menu/wickedx/background_ingame.tga
new file mode 100644 (file)
index 0000000..2532d17
Binary files /dev/null and b/gfx/menu/wickedx/background_ingame.tga differ
diff --git a/gfx/menu/wickedx/background_l2.tga b/gfx/menu/wickedx/background_l2.tga
new file mode 100644 (file)
index 0000000..2532d17
Binary files /dev/null and b/gfx/menu/wickedx/background_l2.tga differ
diff --git a/gfx/menu/wickedx/bigbutton_c.tga b/gfx/menu/wickedx/bigbutton_c.tga
new file mode 100644 (file)
index 0000000..a8bf8ad
Binary files /dev/null and b/gfx/menu/wickedx/bigbutton_c.tga differ
diff --git a/gfx/menu/wickedx/bigbutton_d.tga b/gfx/menu/wickedx/bigbutton_d.tga
new file mode 100644 (file)
index 0000000..f6a832b
Binary files /dev/null and b/gfx/menu/wickedx/bigbutton_d.tga differ
diff --git a/gfx/menu/wickedx/bigbutton_f.tga b/gfx/menu/wickedx/bigbutton_f.tga
new file mode 100644 (file)
index 0000000..c4cda96
Binary files /dev/null and b/gfx/menu/wickedx/bigbutton_f.tga differ
diff --git a/gfx/menu/wickedx/bigbutton_n.tga b/gfx/menu/wickedx/bigbutton_n.tga
new file mode 100644 (file)
index 0000000..d54d5d5
Binary files /dev/null and b/gfx/menu/wickedx/bigbutton_n.tga differ
diff --git a/gfx/menu/wickedx/bigbuttongray_c.tga b/gfx/menu/wickedx/bigbuttongray_c.tga
new file mode 100644 (file)
index 0000000..38e9653
Binary files /dev/null and b/gfx/menu/wickedx/bigbuttongray_c.tga differ
diff --git a/gfx/menu/wickedx/bigbuttongray_d.tga b/gfx/menu/wickedx/bigbuttongray_d.tga
new file mode 100644 (file)
index 0000000..959ef93
Binary files /dev/null and b/gfx/menu/wickedx/bigbuttongray_d.tga differ
diff --git a/gfx/menu/wickedx/bigbuttongray_f.tga b/gfx/menu/wickedx/bigbuttongray_f.tga
new file mode 100644 (file)
index 0000000..55ff591
Binary files /dev/null and b/gfx/menu/wickedx/bigbuttongray_f.tga differ
diff --git a/gfx/menu/wickedx/bigbuttongray_n.tga b/gfx/menu/wickedx/bigbuttongray_n.tga
new file mode 100644 (file)
index 0000000..edff6d6
Binary files /dev/null and b/gfx/menu/wickedx/bigbuttongray_n.tga differ
diff --git a/gfx/menu/wickedx/border.tga b/gfx/menu/wickedx/border.tga
new file mode 100644 (file)
index 0000000..d435e60
Binary files /dev/null and b/gfx/menu/wickedx/border.tga differ
diff --git a/gfx/menu/wickedx/button_c.tga b/gfx/menu/wickedx/button_c.tga
new file mode 100644 (file)
index 0000000..745ee7c
Binary files /dev/null and b/gfx/menu/wickedx/button_c.tga differ
diff --git a/gfx/menu/wickedx/button_d.tga b/gfx/menu/wickedx/button_d.tga
new file mode 100644 (file)
index 0000000..6639525
Binary files /dev/null and b/gfx/menu/wickedx/button_d.tga differ
diff --git a/gfx/menu/wickedx/button_f.tga b/gfx/menu/wickedx/button_f.tga
new file mode 100644 (file)
index 0000000..817d849
Binary files /dev/null and b/gfx/menu/wickedx/button_f.tga differ
diff --git a/gfx/menu/wickedx/button_n.tga b/gfx/menu/wickedx/button_n.tga
new file mode 100644 (file)
index 0000000..643360e
Binary files /dev/null and b/gfx/menu/wickedx/button_n.tga differ
diff --git a/gfx/menu/wickedx/buttongray_c.tga b/gfx/menu/wickedx/buttongray_c.tga
new file mode 100644 (file)
index 0000000..032ea91
Binary files /dev/null and b/gfx/menu/wickedx/buttongray_c.tga differ
diff --git a/gfx/menu/wickedx/buttongray_d.tga b/gfx/menu/wickedx/buttongray_d.tga
new file mode 100644 (file)
index 0000000..55f1e62
Binary files /dev/null and b/gfx/menu/wickedx/buttongray_d.tga differ
diff --git a/gfx/menu/wickedx/buttongray_f.tga b/gfx/menu/wickedx/buttongray_f.tga
new file mode 100644 (file)
index 0000000..5ed3a7d
Binary files /dev/null and b/gfx/menu/wickedx/buttongray_f.tga differ
diff --git a/gfx/menu/wickedx/buttongray_n.tga b/gfx/menu/wickedx/buttongray_n.tga
new file mode 100644 (file)
index 0000000..6ba22b5
Binary files /dev/null and b/gfx/menu/wickedx/buttongray_n.tga differ
diff --git a/gfx/menu/wickedx/charmap.tga b/gfx/menu/wickedx/charmap.tga
new file mode 100755 (executable)
index 0000000..d8ed1d5
Binary files /dev/null and b/gfx/menu/wickedx/charmap.tga differ
diff --git a/gfx/menu/wickedx/charmapbutton.tga b/gfx/menu/wickedx/charmapbutton.tga
new file mode 100644 (file)
index 0000000..54fe07e
Binary files /dev/null and b/gfx/menu/wickedx/charmapbutton.tga differ
diff --git a/gfx/menu/wickedx/checkbox_c0.tga b/gfx/menu/wickedx/checkbox_c0.tga
new file mode 100644 (file)
index 0000000..aafd089
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_c0.tga differ
diff --git a/gfx/menu/wickedx/checkbox_c1.tga b/gfx/menu/wickedx/checkbox_c1.tga
new file mode 100644 (file)
index 0000000..4e517e2
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_c1.tga differ
diff --git a/gfx/menu/wickedx/checkbox_d0.tga b/gfx/menu/wickedx/checkbox_d0.tga
new file mode 100644 (file)
index 0000000..40efe7a
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_d0.tga differ
diff --git a/gfx/menu/wickedx/checkbox_d1.tga b/gfx/menu/wickedx/checkbox_d1.tga
new file mode 100644 (file)
index 0000000..bba6824
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_d1.tga differ
diff --git a/gfx/menu/wickedx/checkbox_f0.tga b/gfx/menu/wickedx/checkbox_f0.tga
new file mode 100644 (file)
index 0000000..aafd089
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_f0.tga differ
diff --git a/gfx/menu/wickedx/checkbox_f1.tga b/gfx/menu/wickedx/checkbox_f1.tga
new file mode 100644 (file)
index 0000000..4e517e2
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_f1.tga differ
diff --git a/gfx/menu/wickedx/checkbox_n0.tga b/gfx/menu/wickedx/checkbox_n0.tga
new file mode 100644 (file)
index 0000000..aafd089
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_n0.tga differ
diff --git a/gfx/menu/wickedx/checkbox_n1.tga b/gfx/menu/wickedx/checkbox_n1.tga
new file mode 100644 (file)
index 0000000..4e517e2
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_n1.tga differ
diff --git a/gfx/menu/wickedx/checkmark.tga b/gfx/menu/wickedx/checkmark.tga
new file mode 100644 (file)
index 0000000..cf34dde
Binary files /dev/null and b/gfx/menu/wickedx/checkmark.tga differ
diff --git a/gfx/menu/wickedx/closebutton_c.tga b/gfx/menu/wickedx/closebutton_c.tga
new file mode 100644 (file)
index 0000000..56488ec
Binary files /dev/null and b/gfx/menu/wickedx/closebutton_c.tga differ
diff --git a/gfx/menu/wickedx/closebutton_f.tga b/gfx/menu/wickedx/closebutton_f.tga
new file mode 100644 (file)
index 0000000..7338573
Binary files /dev/null and b/gfx/menu/wickedx/closebutton_f.tga differ
diff --git a/gfx/menu/wickedx/closebutton_n.tga b/gfx/menu/wickedx/closebutton_n.tga
new file mode 100644 (file)
index 0000000..e4b6058
Binary files /dev/null and b/gfx/menu/wickedx/closebutton_n.tga differ
diff --git a/gfx/menu/wickedx/color.tga b/gfx/menu/wickedx/color.tga
new file mode 100755 (executable)
index 0000000..5189ab4
Binary files /dev/null and b/gfx/menu/wickedx/color.tga differ
diff --git a/gfx/menu/wickedx/colorbutton_c.tga b/gfx/menu/wickedx/colorbutton_c.tga
new file mode 100644 (file)
index 0000000..1c294f7
Binary files /dev/null and b/gfx/menu/wickedx/colorbutton_c.tga differ
diff --git a/gfx/menu/wickedx/colorbutton_f.tga b/gfx/menu/wickedx/colorbutton_f.tga
new file mode 100644 (file)
index 0000000..0031c35
Binary files /dev/null and b/gfx/menu/wickedx/colorbutton_f.tga differ
diff --git a/gfx/menu/wickedx/colorbutton_n.tga b/gfx/menu/wickedx/colorbutton_n.tga
new file mode 100755 (executable)
index 0000000..7fec859
Binary files /dev/null and b/gfx/menu/wickedx/colorbutton_n.tga differ
diff --git a/gfx/menu/wickedx/colorpicker.tga b/gfx/menu/wickedx/colorpicker.tga
new file mode 100755 (executable)
index 0000000..6f9845b
Binary files /dev/null and b/gfx/menu/wickedx/colorpicker.tga differ
diff --git a/gfx/menu/wickedx/colorpicker_m.tga b/gfx/menu/wickedx/colorpicker_m.tga
new file mode 100755 (executable)
index 0000000..6775942
Binary files /dev/null and b/gfx/menu/wickedx/colorpicker_m.tga differ
diff --git a/gfx/menu/wickedx/crosshairbutton_c.tga b/gfx/menu/wickedx/crosshairbutton_c.tga
new file mode 100644 (file)
index 0000000..1c294f7
Binary files /dev/null and b/gfx/menu/wickedx/crosshairbutton_c.tga differ
diff --git a/gfx/menu/wickedx/crosshairbutton_d.tga b/gfx/menu/wickedx/crosshairbutton_d.tga
new file mode 100755 (executable)
index 0000000..110faa1
Binary files /dev/null and b/gfx/menu/wickedx/crosshairbutton_d.tga differ
diff --git a/gfx/menu/wickedx/crosshairbutton_f.tga b/gfx/menu/wickedx/crosshairbutton_f.tga
new file mode 100644 (file)
index 0000000..0031c35
Binary files /dev/null and b/gfx/menu/wickedx/crosshairbutton_f.tga differ
diff --git a/gfx/menu/wickedx/crosshairbutton_n.tga b/gfx/menu/wickedx/crosshairbutton_n.tga
new file mode 100755 (executable)
index 0000000..ac94535
Binary files /dev/null and b/gfx/menu/wickedx/crosshairbutton_n.tga differ
diff --git a/gfx/menu/wickedx/cursor.tga b/gfx/menu/wickedx/cursor.tga
new file mode 100644 (file)
index 0000000..0a2e295
Binary files /dev/null and b/gfx/menu/wickedx/cursor.tga differ
diff --git a/gfx/menu/wickedx/inputbox_f.tga b/gfx/menu/wickedx/inputbox_f.tga
new file mode 100644 (file)
index 0000000..6b5bd20
Binary files /dev/null and b/gfx/menu/wickedx/inputbox_f.tga differ
diff --git a/gfx/menu/wickedx/inputbox_n.tga b/gfx/menu/wickedx/inputbox_n.tga
new file mode 100644 (file)
index 0000000..ad169c2
Binary files /dev/null and b/gfx/menu/wickedx/inputbox_n.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_c0.tga b/gfx/menu/wickedx/radiobutton_c0.tga
new file mode 100644 (file)
index 0000000..68ed15e
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_c0.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_c1.tga b/gfx/menu/wickedx/radiobutton_c1.tga
new file mode 100644 (file)
index 0000000..68ed15e
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_c1.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_d0.tga b/gfx/menu/wickedx/radiobutton_d0.tga
new file mode 100644 (file)
index 0000000..f935318
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_d0.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_d1.tga b/gfx/menu/wickedx/radiobutton_d1.tga
new file mode 100644 (file)
index 0000000..1bcc41d
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_d1.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_f0.tga b/gfx/menu/wickedx/radiobutton_f0.tga
new file mode 100644 (file)
index 0000000..237e09b
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_f0.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_f1.tga b/gfx/menu/wickedx/radiobutton_f1.tga
new file mode 100644 (file)
index 0000000..68ed15e
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_f1.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_n0.tga b/gfx/menu/wickedx/radiobutton_n0.tga
new file mode 100644 (file)
index 0000000..55dae24
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_n0.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_n1.tga b/gfx/menu/wickedx/radiobutton_n1.tga
new file mode 100644 (file)
index 0000000..68ed15e
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_n1.tga differ
diff --git a/gfx/menu/wickedx/scrollbar_c.tga b/gfx/menu/wickedx/scrollbar_c.tga
new file mode 100644 (file)
index 0000000..eb4326d
Binary files /dev/null and b/gfx/menu/wickedx/scrollbar_c.tga differ
diff --git a/gfx/menu/wickedx/scrollbar_f.tga b/gfx/menu/wickedx/scrollbar_f.tga
new file mode 100644 (file)
index 0000000..eb4326d
Binary files /dev/null and b/gfx/menu/wickedx/scrollbar_f.tga differ
diff --git a/gfx/menu/wickedx/scrollbar_n.tga b/gfx/menu/wickedx/scrollbar_n.tga
new file mode 100644 (file)
index 0000000..eb4326d
Binary files /dev/null and b/gfx/menu/wickedx/scrollbar_n.tga differ
diff --git a/gfx/menu/wickedx/scrollbar_s.tga b/gfx/menu/wickedx/scrollbar_s.tga
new file mode 100644 (file)
index 0000000..c7d4700
Binary files /dev/null and b/gfx/menu/wickedx/scrollbar_s.tga differ
diff --git a/gfx/menu/wickedx/skinpreview.jpg b/gfx/menu/wickedx/skinpreview.jpg
new file mode 100755 (executable)
index 0000000..9b8e393
Binary files /dev/null and b/gfx/menu/wickedx/skinpreview.jpg differ
diff --git a/gfx/menu/wickedx/skinvalues.txt b/gfx/menu/wickedx/skinvalues.txt
new file mode 100755 (executable)
index 0000000..f91a8f2
--- /dev/null
@@ -0,0 +1,224 @@
+title WickedX
+author sev
+
+// Colors: 'Red Green Blue'
+// Suffixes: Clicked (_c), Disabled (_d), Focused (_f), Normal (_n)
+
+// Background layer scaling:
+//   Crop (c), Letterbox (l), Height (h), Width (w), Stretch (s)
+// Background layer positioning:
+//   Top Left (7), Top Center (8) Top Right (9)
+//   Middle Left (4), Middle Center (5) Middle Right (6)
+//   Bottom Left (1), Bottom Center (2) Bottom Right (3)
+// ALIGN_BACKGROUND(_INGAME) spspsp, s=Scale p=Position
+
+//------------------------------------------------------------------------------
+// Structure (e.g. positions, sizes, margins)
+//------------------------------------------------------------------------------
+// item: color picker
+//   uses "colorpicker" images
+MARGIN_COLORPICKER              '0 0 0'
+
+// item: dialog
+//   uses "border" images
+//   uses "closebutton" images
+MARGIN_TOP                      8
+MARGIN_BOTTOM                   8
+MARGIN_LEFT                     8
+MARGIN_RIGHT                    8
+MARGIN_COLUMNS                  4
+MARGIN_ROWS                     4
+HEIGHT_DIALOGBORDER             1
+
+// font sizes (used for everything)
+FONTSIZE_NORMAL                 12
+HEIGHT_NORMAL                   1.5
+FONTSIZE_TITLE                  16
+HEIGHT_TITLE                    1.5
+HEIGHT_ZOOMEDTITLE              -1
+
+// general 
+//   uses "background" images
+//   uses "background_ingame" images
+ALIGN_BACKGROUND                h5h5
+ALIGN_BACKGROUND_INGAME         h5
+ALPHA_BACKGROUND_INGAME         1
+ALPHA_DISABLED                  0.2
+ALPHA_BEHIND                    0.5
+ALPHA_TEXT                      0.7
+
+// mouse
+//   uses "cursor" images
+SIZE_CURSOR                     '32 32 0'
+OFFSET_CURSOR                   '0 0 0'
+ALPHA_CURSOR_INTRO              0
+
+// nexposee positions of windows (they are the scale transformation
+// centers, NOT the actual positions of the windows!)
+POSITION_DIALOG_MULTIPLAYER     '0.8 0.4 0'
+POSITION_DIALOG_SINGLEPLAYER    '0.2 0.4 0'
+POSITION_DIALOG_SETTINGS        '0.5 0.95 0'
+POSITION_DIALOG_CREDITS         '-0.05 1.2 0'
+POSITION_DIALOG_QUIT            '1.05 1.2 0'
+
+// tooltips
+//   uses "tooltip" images
+MARGIN_TOOLTIP                  '8 8 0'
+BORDER_TOOLTIP                  '16 16 0'
+FONTSIZE_TOOLTIP                12
+ALPHA_TOOLTIP                   0.7
+WIDTH_TOOLTIP                   0.3
+AVOID_TOOLTIP                   '8 8 0'
+
+//------------------------------------------------------------------------------
+// Colors (e.g. font colors, field colors)
+//------------------------------------------------------------------------------
+// item: campaign
+ALPHA_CAMPAIGN_SELECTABLE       0.8
+COLOR_CAMPAIGN_SELECTABLE       '1 1 1'
+ALPHA_CAMPAIGN_CURRENT          1
+COLOR_CAMPAIGN_CURRENT          '1 1 1'
+ALPHA_CAMPAIGN_FUTURE           0.2
+COLOR_CAMPAIGN_FUTURE           '1 1 1'
+ALPHA_CAMPAIGN_DESCRIPTION      0.7
+
+// item: credits list
+COLOR_CREDITS_TITLE             '0.875 0.375 0'
+ALPHA_CREDITS_TITLE             1
+COLOR_CREDITS_FUNCTION          '0 0.1875 0.4375'
+ALPHA_CREDITS_FUNCTION          0.5
+COLOR_CREDITS_PERSON            '0 0.375 0.75'
+ALPHA_CREDITS_PERSON            0.875
+ROWS_CREDITS                    20
+WIDTH_CREDITS                   0.5
+
+// item: cvar list
+ALPHA_CVARLIST_SAVED            1
+ALPHA_CVARLIST_TEMPORARY        0.7    
+COLOR_CVARLIST_CHANGED          '0 0.375 0.75' 
+COLOR_CVARLIST_REVERTBUTTON     '1 0 0'
+COLOR_CVARLIST_UNCHANGED        '1 1 1'
+
+// item: list box
+COLOR_LISTBOX_SELECTED          '0.875 0.375 0'
+ALPHA_LISTBOX_SELECTED          1
+COLOR_LISTBOX_WAITING           '1 1 1'
+ALPHA_LISTBOX_WAITING           0.5
+
+// item: map list
+COLOR_MAPLIST_TITLE             '1 1 1'
+COLOR_MAPLIST_AUTHOR            '0 0.375 0.75'
+COLOR_MAPLIST_INCLUDEDBG        '0 0.1875 0.4375'
+ALPHA_MAPLIST_INCLUDEDFG        1
+ALPHA_MAPLIST_INCLUDEDBG        0.375
+ALPHA_MAPLIST_NOTINCLUDEDFG     0.25
+
+// item: nexposee
+ALPHAS_MAINMENU                 '0.8 0.9 1'
+
+// item: player model
+COLOR_MODELTITLE                '1 1 1'
+ALPHA_MODELTITLE                1
+
+// item: server info
+COLOR_SERVERINFO_NAME           '1 1 1'
+COLOR_SERVERINFO_IP             '0.875 0.375 0'
+
+// item: server list
+ALPHA_SERVERLIST_FULL           0.4
+ALPHA_SERVERLIST_EMPTY          0.7
+COLOR_SERVERLIST_LOWPING        '0 1 0'
+COLOR_SERVERLIST_MEDPING        '1 0.75 0'
+COLOR_SERVERLIST_HIGHPING       '1 0 0'
+ALPHA_SERVERLIST_HIGHPING       0.4
+ALPHA_SERVERLIST_FAVORITE       0.8
+COLOR_SERVERLIST_FAVORITE       '1 1 1'
+
+// item: skin list
+COLOR_SKINLIST_TITLE            '1 1 1'
+COLOR_SKINLIST_AUTHOR           '0 0.375 0.75'
+
+//------------------------------------------------------------------------------
+// Images (colors multiplied to images)
+//------------------------------------------------------------------------------
+// item: button
+//   uses "button" images
+//   uses "buttongray" images
+//   uses "bigbutton" images
+//   uses "bigbuttongray" images
+COLOR_BUTTON_N                  '1 1 1'
+COLOR_BUTTON_C                  '1 1 1'
+COLOR_BUTTON_F                  '1 1 1'
+COLOR_BUTTON_D                  '1 1 1'
+
+// item: checkbox
+//   uses "checkbox" images
+COLOR_CHECKBOX_N                '1 1 1'
+COLOR_CHECKBOX_C                '0.5 0.75 1'
+COLOR_CHECKBOX_F                '0.5 0.75 1'
+COLOR_CHECKBOX_D                '1 1 1'
+
+// item: crosshair button
+//   uses "crosshairbutton" images
+
+// dialog background colors
+//   uses "border" images
+COLOR_DIALOG_MULTIPLAYER        '1 1 1'
+COLOR_DIALOG_SETTINGS           '1 1 1'
+COLOR_DIALOG_TEAMSELECT         '1 1 1'
+COLOR_DIALOG_QUIT               '1 1 1'
+COLOR_DIALOG_ADVANCED           '1 1 1'
+COLOR_DIALOG_MUTATORS           '1 1 1'
+COLOR_DIALOG_MAPINFO            '1 1 1'
+COLOR_DIALOG_USERBIND           '1 1 1'
+COLOR_DIALOG_SINGLEPLAYER       '1 1 1'
+COLOR_DIALOG_CREDITS            '1 1 1'
+COLOR_DIALOG_WEAPONS            '1 1 1'
+COLOR_DIALOG_RADAR              '1 1 1'
+COLOR_DIALOG_SERVERINFO         '1 1 1'
+COLOR_DIALOG_CVARS              '1 0 0'
+
+// item: input box
+//   uses "inputbox" images
+COLOR_INPUTBOX_N                '1 1 1'
+COLOR_INPUTBOX_F                '1 1 1'
+MARGIN_INPUTBOX_CHARS           1
+
+// item: key grabber
+COLOR_KEYGRABBER_TITLES         '1 1 1'
+ALPHA_KEYGRABBER_TITLES         1
+COLOR_KEYGRABBER_KEYS           '1 1 1'
+ALPHA_KEYGRABBER_KEYS           0.7
+
+// item: player color button
+//   uses "colorbutton" images
+//   uses "color" images
+
+// item: player name editor
+//   uses "charmap" images
+//   uses "charmapbutton" images
+
+// item: radio button
+//   uses "radiobutton" images
+COLOR_RADIOBUTTON_N             '1 1 1'
+COLOR_RADIOBUTTON_C             '1 1 1'
+COLOR_RADIOBUTTON_F             '1 1 1'
+COLOR_RADIOBUTTON_D             '1 1 1'
+
+// item: scrollbar
+//   uses "scrollbar" images
+COLOR_SCROLLBAR_N               '1 1 1'
+COLOR_SCROLLBAR_C               '0.5 0.75 1'
+COLOR_SCROLLBAR_F               '0.5 0.75 1'
+COLOR_SCROLLBAR_S               '0.25 0.25 0.25'
+WIDTH_SCROLLBAR                 16
+
+// item: slider
+//   uses "slider" images
+COLOR_SLIDER_N                  '1 1 1'
+COLOR_SLIDER_C                  '0.5 0.75 1'
+COLOR_SLIDER_F                  '0.5 0.75 1'
+COLOR_SLIDER_D                  '1 1 1'
+COLOR_SLIDER_S                  '0.25 0.25 0.25'
+WIDTH_SLIDERTEXT                0.333333333333
+TOLERANCE_SLIDER                '0.2 2 0'
diff --git a/gfx/menu/wickedx/slider_c.tga b/gfx/menu/wickedx/slider_c.tga
new file mode 100644 (file)
index 0000000..42e3e98
Binary files /dev/null and b/gfx/menu/wickedx/slider_c.tga differ
diff --git a/gfx/menu/wickedx/slider_d.tga b/gfx/menu/wickedx/slider_d.tga
new file mode 100644 (file)
index 0000000..87ccbe5
Binary files /dev/null and b/gfx/menu/wickedx/slider_d.tga differ
diff --git a/gfx/menu/wickedx/slider_f.tga b/gfx/menu/wickedx/slider_f.tga
new file mode 100644 (file)
index 0000000..42e3e98
Binary files /dev/null and b/gfx/menu/wickedx/slider_f.tga differ
diff --git a/gfx/menu/wickedx/slider_n.tga b/gfx/menu/wickedx/slider_n.tga
new file mode 100644 (file)
index 0000000..42e3e98
Binary files /dev/null and b/gfx/menu/wickedx/slider_n.tga differ
diff --git a/gfx/menu/wickedx/slider_s.tga b/gfx/menu/wickedx/slider_s.tga
new file mode 100644 (file)
index 0000000..954c90c
Binary files /dev/null and b/gfx/menu/wickedx/slider_s.tga differ
diff --git a/gfx/menu/wickedx/tooltip.tga b/gfx/menu/wickedx/tooltip.tga
new file mode 100644 (file)
index 0000000..1dc5679
Binary files /dev/null and b/gfx/menu/wickedx/tooltip.tga differ
index 4bd49bd..3d56cdb 100644 (file)
@@ -1,31 +1,31 @@
-1 56 30 0      // zombie attackleap         1\r
-57 41 60 1     // zombie attackrun1         2\r
-98 41 60 1     // zombie attackrun2         3\r
-139 41 60 1    // zombie attackrun3         4\r
-180 41 30 1    // zombie attackstanding1    5\r
-221 35 30 1    // zombie attackstanding2    6\r
-256 41 30 1    // zombie attackstanding3    7\r
-297 21 60 1    // zombie blockend           8\r
-318 21 60 0    // zombie blockstart         9\r
-339 96 30 0    // zombie deathback1         10\r
-435 67 30 0    // zombie deathback2         11\r
-502 71 30 0    // zombie deathback3         12\r
-573 61 30 0    // zombie deathfront1        13\r
-634 66 30 0    // zombie deathfront2        14\r
-700 96 30 0    // zombie deathfront3        15\r
-796 96 30 0    // zombie deathleft1         16\r
-892 71 30 0    // zombie deathleft2         17\r
-963 66 30 0    // zombie deathright1        18\r
-1029 86  30 0  // zombie deathright2        19\r
-1115 121 10 1  // zombie idle               20\r
-1236 11 30 0   // zombie painback1          21\r
-1247 11 30 0   // zombie painback2          22\r
-1258 11 30 0   // zombie painfront1         23\r
-1269 11 30 0   // zombie painfront2         24\r
-1280 41 60 1   // zombie runbackwards       25\r
-1321 41 60 1   // zombie runbackwardsleft   26\r
-1362 41 60 1   // zombie runbackwardsright  27\r
-1403 41 60 1   // zombie runforward         28\r
-1444 41 60 1   // zombie runforwardleft     29\r
-1485 41 60 1   // zombie runforwardright    30\r
-1526 61 30 0   // zombie spawn              31\r
+1 56 30 0      // zombie attackleap         1
+57 41 60 1     // zombie attackrun1         2
+98 41 60 1     // zombie attackrun2         3
+139 41 60 1    // zombie attackrun3         4
+180 41 30 1    // zombie attackstanding1    5
+221 35 30 1    // zombie attackstanding2    6
+256 41 30 1    // zombie attackstanding3    7
+297 21 60 1    // zombie blockend           8
+318 21 60 0    // zombie blockstart         9
+339 96 30 0    // zombie deathback1         10
+435 67 30 0    // zombie deathback2         11
+502 71 30 0    // zombie deathback3         12
+573 61 30 0    // zombie deathfront1        13
+634 66 30 0    // zombie deathfront2        14
+700 96 30 0    // zombie deathfront3        15
+796 96 30 0    // zombie deathleft1         16
+892 71 30 0    // zombie deathleft2         17
+963 66 30 0    // zombie deathright1        18
+1029 86  30 0  // zombie deathright2        19
+1115 121 10 1  // zombie idle               20
+1236 11 30 0   // zombie painback1          21
+1247 11 30 0   // zombie painback2          22
+1258 11 30 0   // zombie painfront1         23
+1269 11 30 0   // zombie painfront2         24
+1280 41 60 1   // zombie runbackwards       25
+1321 41 60 1   // zombie runbackwardsleft   26
+1362 41 60 1   // zombie runbackwardsright  27
+1403 41 60 1   // zombie runforward         28
+1444 41 60 1   // zombie runforwardleft     29
+1485 41 60 1   // zombie runforwardright    30
+1526 61 30 0   // zombie spawn              31
index 590155e..050d79c 100644 (file)
@@ -1,12 +1,12 @@
-1   1   1  0  // ANIM_NO\r
-35 55 20 1 // ANIM_TURN\r
-5 25 20 1   // ANIM_WALK\r
-5 25 40 1   // ANIM_RUN\r
-35 55 20 1 // ANIM_STRAFE_L\r
-65 85 20 1 // ANIM_STRAFE_R\r
-95 100 20 0 // ANIM_JUMP\r
-100 107 20 0 // ANIM_LAND\r
-90 95 20 0 // ANIM_PAIN\r
-123 140 40 0 // ANIM_MEELE\r
-146 151 20 1 // ANIM_SWIM\r
-5 25 20 1   // ANIM_ROAM\r
+1   1   1  0  // ANIM_NO
+35 55 20 1 // ANIM_TURN
+5 25 20 1   // ANIM_WALK
+5 25 40 1   // ANIM_RUN
+35 55 20 1 // ANIM_STRAFE_L
+65 85 20 1 // ANIM_STRAFE_R
+95 100 20 0 // ANIM_JUMP
+100 107 20 0 // ANIM_LAND
+90 95 20 0 // ANIM_PAIN
+123 140 40 0 // ANIM_MEELE
+146 151 20 1 // ANIM_SWIM
+5 25 20 1   // ANIM_ROAM
index 3ea278d..f9db722 100644 (file)
@@ -1,6 +1,6 @@
-1   30  20 1 // forward\r
-32  30  20 1 // backward\r
-63  30  20 1 // left\r
-94  30 20 1 // right\r
-125 30 20 0 // jump\r
-0   1   20 0 // idle\r
+1   30  20 1 // forward
+32  30  20 1 // backward
+63  30  20 1 // left
+94  30 20 1 // right
+125 30 20 0 // jump
+0   1   20 0 // idle
index 89eba2b..65d9e71 100644 (file)
@@ -1,21 +1,21 @@
-set g_monster_zombie_respawntime    2\r
-set g_monster_zombie_movespeed      350\r
-set g_monster_zombie_health         275\r
-set g_monster_zombie_stopspeed      90\r
-set g_monster_zombie_turnspeed      360\r
-set g_monster_zombie_idle_timer_min 5\r
-set g_monster_zombie_idle_timer_max 10\r
-set g_monster_zombie_targetrange    2048\r
-\r
-set g_monster_zombie_attack_run_range    128\r
-set g_monster_zombie_attack_run_hitrange 96\r
-set g_monster_zombie_attack_run_delay    0.35\r
-set g_monster_zombie_attack_run_damage   30\r
-set g_monster_zombie_attack_run_force    300\r
-\r
-set g_monster_zombie_attack_stand_range    64\r
-set g_monster_zombie_attack_stand_hitrange 64\r
-set g_monster_zombie_attack_stand_delay    0.25\r
-set g_monster_zombie_attack_stand_damage   60\r
-set g_monster_zombie_attack_stand_force    250\r
-\r
+set g_monster_zombie_respawntime    2
+set g_monster_zombie_movespeed      350
+set g_monster_zombie_health         275
+set g_monster_zombie_stopspeed      90
+set g_monster_zombie_turnspeed      360
+set g_monster_zombie_idle_timer_min 5
+set g_monster_zombie_idle_timer_max 10
+set g_monster_zombie_targetrange    2048
+
+set g_monster_zombie_attack_run_range    128
+set g_monster_zombie_attack_run_hitrange 96
+set g_monster_zombie_attack_run_delay    0.35
+set g_monster_zombie_attack_run_damage   30
+set g_monster_zombie_attack_run_force    300
+
+set g_monster_zombie_attack_stand_range    64
+set g_monster_zombie_attack_stand_hitrange 64
+set g_monster_zombie_attack_stand_delay    0.25
+set g_monster_zombie_attack_stand_damage   60
+set g_monster_zombie_attack_stand_force    250
+
index 6fa9949..a6fd71e 100644 (file)
Binary files a/particles/particlefont-template.png and b/particles/particlefont-template.png differ
diff --git a/particles/particlefont-template.txt b/particles/particlefont-template.txt
new file mode 100644 (file)
index 0000000..6d6b740
--- /dev/null
@@ -0,0 +1,166 @@
+0 0.00048828125 0.00048828125 0.06201171875 0.06201171875
+1 0.06298828125 0.00048828125 0.12451171875 0.06201171875
+2 0.12548828125 0.00048828125 0.18701171875 0.06201171875
+3 0.18798828125 0.00048828125 0.24951171875 0.06201171875
+4 0.25048828125 0.00048828125 0.31201171875 0.06201171875
+5 0.31298828125 0.00048828125 0.37451171875 0.06201171875
+6 0.37548828125 0.00048828125 0.43701171875 0.06201171875
+7 0.43798828125 0.00048828125 0.49951171875 0.06201171875
+8 0.50048828125 0.00048828125 0.56201171875 0.06201171875
+9 0.56298828125 0.00048828125 0.62451171875 0.06201171875
+10 0.62548828125 0.00048828125 0.68701171875 0.06201171875
+11 0.68798828125 0.00048828125 0.74951171875 0.06201171875
+12 0.75048828125 0.00048828125 0.81201171875 0.06201171875
+13 0.81298828125 0.00048828125 0.87451171875 0.06201171875
+14 0.87548828125 0.00048828125 0.93701171875 0.06201171875
+15 0.93798828125 0.00048828125 0.99951171875 0.06201171875
+16 0.00048828125 0.06298828125 0.06201171875 0.12451171875
+17 0.06298828125 0.06298828125 0.12451171875 0.12451171875
+18 0.12548828125 0.06298828125 0.18701171875 0.12451171875
+19 0.18798828125 0.06298828125 0.24951171875 0.12451171875
+20 0.25048828125 0.06298828125 0.31201171875 0.12451171875
+21 0.31298828125 0.06298828125 0.37451171875 0.12451171875
+22 0.37548828125 0.06298828125 0.43701171875 0.12451171875
+23 0.43798828125 0.06298828125 0.49951171875 0.12451171875
+24 0.50048828125 0.06298828125 0.56201171875 0.12451171875
+25 0.56298828125 0.06298828125 0.62451171875 0.12451171875
+26 0.62548828125 0.06298828125 0.68701171875 0.12451171875
+27 0.68798828125 0.06298828125 0.74951171875 0.12451171875
+28 0.75048828125 0.06298828125 0.81201171875 0.12451171875
+29 0.81298828125 0.06298828125 0.87451171875 0.12451171875
+30 0.87548828125 0.06298828125 0.93701171875 0.12451171875
+31 0.93798828125 0.06298828125 0.99951171875 0.12451171875
+32 0.00048828125 0.12548828125 0.06201171875 0.18701171875
+33 0.06298828125 0.12548828125 0.12451171875 0.18701171875
+34 0.12548828125 0.12548828125 0.18701171875 0.18701171875
+35 0.18798828125 0.12548828125 0.24951171875 0.18701171875
+36 0.25048828125 0.12548828125 0.31201171875 0.18701171875
+37 0.31298828125 0.12548828125 0.37451171875 0.18701171875
+38 0.37548828125 0.12548828125 0.43701171875 0.18701171875
+39 0.43798828125 0.12548828125 0.49951171875 0.18701171875
+40 0.50048828125 0.12548828125 0.56201171875 0.18701171875
+41 0.56298828125 0.12548828125 0.62451171875 0.18701171875
+42 0.62548828125 0.12548828125 0.68701171875 0.18701171875
+43 0.68798828125 0.12548828125 0.74951171875 0.18701171875
+44 0.75048828125 0.12548828125 0.81201171875 0.18701171875
+45 0.81298828125 0.12548828125 0.87451171875 0.18701171875
+46 0.87548828125 0.12548828125 0.93701171875 0.18701171875
+47 0.93798828125 0.12548828125 0.99951171875 0.18701171875
+48 0.00048828125 0.18798828125 0.06201171875 0.24951171875
+49 0.06298828125 0.18798828125 0.12451171875 0.24951171875
+50 0.12548828125 0.18798828125 0.18701171875 0.24951171875
+51 0.18798828125 0.18798828125 0.24951171875 0.24951171875
+52 0.25048828125 0.18798828125 0.31201171875 0.24951171875
+53 0.31298828125 0.18798828125 0.37451171875 0.24951171875
+54 0.37548828125 0.18798828125 0.43701171875 0.24951171875
+55 0.43798828125 0.18798828125 0.49951171875 0.24951171875
+56 0.50048828125 0.18798828125 0.56201171875 0.24951171875
+57 0.56298828125 0.18798828125 0.62451171875 0.24951171875
+58 0.62548828125 0.18798828125 0.68701171875 0.24951171875
+59 0.68798828125 0.18798828125 0.74951171875 0.24951171875
+60 0.75048828125 0.18798828125 0.81201171875 0.24951171875
+61 0.81298828125 0.18798828125 0.87451171875 0.24951171875
+62 0.87548828125 0.18798828125 0.93701171875 0.24951171875
+63 0.93798828125 0.18798828125 0.99951171875 0.24951171875
+64 0.00048828125 0.25048828125 0.06201171875 0.31201171875
+65 0.06298828125 0.25048828125 0.12451171875 0.31201171875
+66 0.12548828125 0.25048828125 0.18701171875 0.31201171875
+67 0.18798828125 0.25048828125 0.24951171875 0.31201171875
+68 0.25048828125 0.25048828125 0.31201171875 0.31201171875
+69 0.31298828125 0.25048828125 0.37451171875 0.31201171875
+70 0.37548828125 0.25048828125 0.43701171875 0.31201171875
+71 0.43798828125 0.25048828125 0.49951171875 0.31201171875
+72 0.50048828125 0.25048828125 0.56201171875 0.31201171875
+73 0.56298828125 0.25048828125 0.62451171875 0.31201171875
+74 0.62548828125 0.25048828125 0.68701171875 0.31201171875
+75 0.68798828125 0.25048828125 0.74951171875 0.31201171875
+76 0.75048828125 0.25048828125 0.81201171875 0.31201171875
+77 0.81298828125 0.25048828125 0.87451171875 0.31201171875
+78 0.87548828125 0.25048828125 0.93701171875 0.31201171875
+79 0.93798828125 0.25048828125 0.99951171875 0.31201171875
+80 0.00048828125 0.31298828125 0.06201171875 0.37451171875
+81 0.06298828125 0.31298828125 0.12451171875 0.37451171875
+82 0.12548828125 0.31298828125 0.18701171875 0.37451171875
+83 0.18798828125 0.31298828125 0.24951171875 0.37451171875
+84 0.25048828125 0.31298828125 0.31201171875 0.37451171875
+85 0.31298828125 0.31298828125 0.37451171875 0.37451171875
+86 0.37548828125 0.31298828125 0.43701171875 0.37451171875
+87 0.43798828125 0.31298828125 0.49951171875 0.37451171875
+88 0.50048828125 0.31298828125 0.56201171875 0.37451171875
+89 0.56298828125 0.31298828125 0.62451171875 0.37451171875
+90 0.62548828125 0.31298828125 0.68701171875 0.37451171875
+91 0.68798828125 0.31298828125 0.74951171875 0.37451171875
+92 0.75048828125 0.31298828125 0.81201171875 0.37451171875
+93 0.81298828125 0.31298828125 0.87451171875 0.37451171875
+94 0.87548828125 0.31298828125 0.93701171875 0.37451171875
+95 0.93798828125 0.31298828125 0.99951171875 0.37451171875
+96 0.00048828125 0.37548828125 0.06201171875 0.43701171875
+97 0.06298828125 0.37548828125 0.12451171875 0.43701171875
+98 0.12548828125 0.37548828125 0.18701171875 0.43701171875
+99 0.18798828125 0.37548828125 0.24951171875 0.43701171875
+100 0.25048828125 0.37548828125 0.31201171875 0.43701171875
+101 0.31298828125 0.37548828125 0.37451171875 0.43701171875
+102 0.37548828125 0.37548828125 0.43701171875 0.43701171875
+103 0.43798828125 0.37548828125 0.49951171875 0.43701171875
+104 0.50048828125 0.37548828125 0.56201171875 0.43701171875
+105 0.56298828125 0.37548828125 0.62451171875 0.43701171875
+106 0.62548828125 0.37548828125 0.68701171875 0.43701171875
+107 0.68798828125 0.37548828125 0.74951171875 0.43701171875
+108 0.75048828125 0.37548828125 0.81201171875 0.43701171875
+109 0.81298828125 0.37548828125 0.87451171875 0.43701171875
+110 0.87548828125 0.37548828125 0.93701171875 0.43701171875
+111 0.93798828125 0.37548828125 0.99951171875 0.43701171875
+112 0.00048828125 0.43798828125 0.06201171875 0.49951171875
+113 0.06298828125 0.43798828125 0.12451171875 0.49951171875
+114 0.12548828125 0.43798828125 0.18701171875 0.49951171875
+115 0.18798828125 0.43798828125 0.24951171875 0.49951171875
+116 0.25048828125 0.43798828125 0.31201171875 0.49951171875
+117 0.31298828125 0.43798828125 0.37451171875 0.49951171875
+118 0.37548828125 0.43798828125 0.43701171875 0.49951171875
+119 0.43798828125 0.43798828125 0.49951171875 0.49951171875
+120 0.50048828125 0.43798828125 0.56201171875 0.49951171875
+121 0.56298828125 0.43798828125 0.62451171875 0.49951171875
+122 0.62548828125 0.43798828125 0.68701171875 0.49951171875
+123 0.68798828125 0.43798828125 0.74951171875 0.49951171875
+124 0.75048828125 0.43798828125 0.81201171875 0.49951171875
+125 0.81298828125 0.43798828125 0.87451171875 0.49951171875
+126 0.87548828125 0.43798828125 0.93701171875 0.49951171875
+127 0.93798828125 0.43798828125 0.99951171875 0.49951171875
+128 0.00048828125 0.50048828125 0.06201171875 0.56201171875
+129 0.06298828125 0.50048828125 0.12451171875 0.56201171875
+130 0.12548828125 0.50048828125 0.18701171875 0.56201171875
+131 0.18798828125 0.50048828125 0.24951171875 0.56201171875
+132 0.25048828125 0.50048828125 0.31201171875 0.56201171875
+133 0.31298828125 0.50048828125 0.37451171875 0.56201171875
+134 0.37548828125 0.50048828125 0.43701171875 0.56201171875
+135 0.43798828125 0.50048828125 0.49951171875 0.56201171875
+136 0.50048828125 0.50048828125 0.56201171875 0.56201171875
+137 0.56298828125 0.50048828125 0.62451171875 0.56201171875
+138 0.62548828125 0.50048828125 0.68701171875 0.56201171875
+139 0.68798828125 0.50048828125 0.74951171875 0.56201171875
+140 0.75048828125 0.50048828125 0.81201171875 0.56201171875
+141 0.81298828125 0.50048828125 0.87451171875 0.56201171875
+142 0.87548828125 0.50048828125 0.93701171875 0.56201171875
+143 0.93798828125 0.50048828125 0.99951171875 0.56201171875
+144 0.00048828125 0.56298828125 0.06201171875 0.62451171875
+145 0.06298828125 0.56298828125 0.12451171875 0.62451171875
+146 0.12548828125 0.56298828125 0.18701171875 0.62451171875
+147 0.18798828125 0.56298828125 0.24951171875 0.62451171875
+148 0.25048828125 0.56298828125 0.31201171875 0.62451171875
+149 0.31298828125 0.56298828125 0.37451171875 0.62451171875
+150 0.37548828125 0.56298828125 0.43701171875 0.62451171875
+151 0.43798828125 0.56298828125 0.49951171875 0.62451171875
+152 0.50048828125 0.56298828125 0.56201171875 0.62451171875
+153 0.56298828125 0.56298828125 0.62451171875 0.62451171875
+154 0.62548828125 0.56298828125 0.68701171875 0.62451171875
+155 0.68798828125 0.56298828125 0.74951171875 0.62451171875
+156 0.75048828125 0.56298828125 0.81201171875 0.62451171875
+157 0.81298828125 0.56298828125 0.87451171875 0.62451171875
+158 0.87548828125 0.56298828125 0.93701171875 0.62451171875
+159 0.93798828125 0.56298828125 0.99951171875 0.62451171875
+1000 0 0.62548828125 1 0.68701171875
+1001 0 0.68798828125 1 0.74951171875
+1002 0 0.75048828125 1 0.81201171875
+1003 0 0.81298828125 1 0.87451171875
+1004 0 0.87548828125 1 0.93701171875
+1005 0 0.93798828125 1 0.99951171875
index 5455e7b..8ee89ad 100644 (file)
Binary files a/particles/particlefont.tga and b/particles/particlefont.tga differ
index 10073ca..2994f82 100644 (file)
-0 0.001953125 0.001953125 0.123046875 0.123046875
-1 0.126953125 0.001953125 0.248046875 0.123046875
-2 0.251953125 0.001953125 0.373046875 0.123046875
-3 0.376953125 0.001953125 0.498046875 0.123046875
-4 0.501953125 0.001953125 0.623046875 0.123046875
-5 0.626953125 0.001953125 0.748046875 0.123046875
-6 0.751953125 0.001953125 0.873046875 0.123046875
-7 0.876953125 0.001953125 0.998046875 0.123046875
-8 0.001953125 0.126953125 0.123046875 0.248046875
-9 0.126953125 0.126953125 0.248046875 0.248046875
-10 0.251953125 0.126953125 0.373046875 0.248046875
-11 0.376953125 0.126953125 0.498046875 0.248046875
-12 0.501953125 0.126953125 0.623046875 0.248046875
-13 0.626953125 0.126953125 0.748046875 0.248046875
-14 0.751953125 0.126953125 0.873046875 0.248046875
-15 0.876953125 0.126953125 0.998046875 0.248046875
-16 0.001953125 0.251953125 0.123046875 0.373046875
-17 0.126953125 0.251953125 0.248046875 0.373046875
-18 0.251953125 0.251953125 0.373046875 0.373046875
-19 0.376953125 0.251953125 0.498046875 0.373046875
-20 0.501953125 0.251953125 0.623046875 0.373046875
-21 0.626953125 0.251953125 0.748046875 0.373046875
-22 0.751953125 0.251953125 0.873046875 0.373046875
-23 0.876953125 0.251953125 0.998046875 0.373046875
-24 0.001953125 0.376953125 0.123046875 0.498046875
-25 0.126953125 0.376953125 0.248046875 0.498046875
-26 0.251953125 0.376953125 0.373046875 0.498046875
-27 0.376953125 0.376953125 0.498046875 0.498046875
-28 0.501953125 0.376953125 0.623046875 0.498046875
-29 0.626953125 0.376953125 0.748046875 0.498046875
-30 0.751953125 0.376953125 0.873046875 0.498046875
-31 0.876953125 0.376953125 0.998046875 0.498046875
-32 0.001953125 0.501953125 0.123046875 0.623046875
-33 0.126953125 0.501953125 0.248046875 0.623046875
-34 0.251953125 0.501953125 0.373046875 0.623046875
-35 0.376953125 0.501953125 0.498046875 0.623046875
-36 0.501953125 0.501953125 0.623046875 0.623046875
-37 0.626953125 0.501953125 0.748046875 0.623046875
-38 0.751953125 0.501953125 0.873046875 0.623046875
-39 0.876953125 0.501953125 0.998046875 0.623046875
-40 0.001953125 0.626953125 0.123046875 0.748046875
-41 0.126953125 0.626953125 0.248046875 0.748046875
-42 0.251953125 0.626953125 0.373046875 0.748046875
-43 0.376953125 0.626953125 0.498046875 0.748046875
-44 0.501953125 0.626953125 0.623046875 0.748046875
-45 0.626953125 0.626953125 0.748046875 0.748046875
-46 0.751953125 0.626953125 0.873046875 0.748046875
-47 0.876953125 0.626953125 0.998046875 0.748046875
-48 0.001953125 0.751953125 0.123046875 0.873046875
-49 0.126953125 0.751953125 0.248046875 0.873046875
-50 0.251953125 0.751953125 0.373046875 0.873046875
-51 0.376953125 0.751953125 0.498046875 0.873046875
-52 0.501953125 0.751953125 0.623046875 0.873046875
-53 0.626953125 0.751953125 0.748046875 0.873046875
-54 0.751953125 0.751953125 0.873046875 0.873046875
-55 0.876953125 0.751953125 0.998046875 0.873046875
-56 0.001953125 0.876953125 0.123046875 0.998046875
-57 0.126953125 0.876953125 0.248046875 0.998046875
-58 0.251953125 0.876953125 0.373046875 0.998046875
-59 0.376953125 0.876953125 0.498046875 0.998046875
-// 60 0.501953125 0.876953125 0.623046875 0.998046875
-61 0.626953125 0.876953125 0.748046875 0.998046875
-62 0.751953125 0.876953125 0.873046875 0.998046875
-63 0.876953125 0.876953125 0.998046875 0.998046875
+0 0.00048828125 0.00048828125 0.06201171875 0.06201171875
+1 0.06298828125 0.00048828125 0.12451171875 0.06201171875
+2 0.12548828125 0.00048828125 0.18701171875 0.06201171875
+3 0.18798828125 0.00048828125 0.24951171875 0.06201171875
+4 0.25048828125 0.00048828125 0.31201171875 0.06201171875
+5 0.31298828125 0.00048828125 0.37451171875 0.06201171875
+6 0.37548828125 0.00048828125 0.43701171875 0.06201171875
+7 0.43798828125 0.00048828125 0.49951171875 0.06201171875
+8 0.50048828125 0.00048828125 0.56201171875 0.06201171875
+9 0.56298828125 0.00048828125 0.62451171875 0.06201171875
+10 0.62548828125 0.00048828125 0.68701171875 0.06201171875
+11 0.68798828125 0.00048828125 0.74951171875 0.06201171875
+12 0.75048828125 0.00048828125 0.81201171875 0.06201171875
+13 0.81298828125 0.00048828125 0.87451171875 0.06201171875
+14 0.87548828125 0.00048828125 0.93701171875 0.06201171875
+15 0.93798828125 0.00048828125 0.99951171875 0.06201171875
+16 0.00048828125 0.06298828125 0.06201171875 0.12451171875
+17 0.06298828125 0.06298828125 0.12451171875 0.12451171875
+18 0.12548828125 0.06298828125 0.18701171875 0.12451171875
+19 0.18798828125 0.06298828125 0.24951171875 0.12451171875
+20 0.25048828125 0.06298828125 0.31201171875 0.12451171875
+21 0.31298828125 0.06298828125 0.37451171875 0.12451171875
+22 0.37548828125 0.06298828125 0.43701171875 0.12451171875
+23 0.43798828125 0.06298828125 0.49951171875 0.12451171875
+24 0.50048828125 0.06298828125 0.56201171875 0.12451171875
+25 0.56298828125 0.06298828125 0.62451171875 0.12451171875
+26 0.62548828125 0.06298828125 0.68701171875 0.12451171875
+27 0.68798828125 0.06298828125 0.74951171875 0.12451171875
+28 0.75048828125 0.06298828125 0.81201171875 0.12451171875
+29 0.81298828125 0.06298828125 0.87451171875 0.12451171875
+30 0.87548828125 0.06298828125 0.93701171875 0.12451171875
+31 0.93798828125 0.06298828125 0.99951171875 0.12451171875
+32 0.00048828125 0.12548828125 0.06201171875 0.18701171875
+33 0.06298828125 0.12548828125 0.12451171875 0.18701171875
+34 0.12548828125 0.12548828125 0.18701171875 0.18701171875
+35 0.18798828125 0.12548828125 0.24951171875 0.18701171875
+36 0.25048828125 0.12548828125 0.31201171875 0.18701171875
+37 0.31298828125 0.12548828125 0.37451171875 0.18701171875
+38 0.37548828125 0.12548828125 0.43701171875 0.18701171875
+39 0.43798828125 0.12548828125 0.49951171875 0.18701171875
+40 0.50048828125 0.12548828125 0.56201171875 0.18701171875
+41 0.56298828125 0.12548828125 0.62451171875 0.18701171875
+42 0.62548828125 0.12548828125 0.68701171875 0.18701171875
+43 0.68798828125 0.12548828125 0.74951171875 0.18701171875
+44 0.75048828125 0.12548828125 0.81201171875 0.18701171875
+45 0.81298828125 0.12548828125 0.87451171875 0.18701171875
+46 0.87548828125 0.12548828125 0.93701171875 0.18701171875
+47 0.93798828125 0.12548828125 0.99951171875 0.18701171875
+48 0.00048828125 0.18798828125 0.06201171875 0.24951171875
+49 0.06298828125 0.18798828125 0.12451171875 0.24951171875
+50 0.12548828125 0.18798828125 0.18701171875 0.24951171875
+51 0.18798828125 0.18798828125 0.24951171875 0.24951171875
+52 0.25048828125 0.18798828125 0.31201171875 0.24951171875
+53 0.31298828125 0.18798828125 0.37451171875 0.24951171875
+54 0.37548828125 0.18798828125 0.43701171875 0.24951171875
+55 0.43798828125 0.18798828125 0.49951171875 0.24951171875
+56 0.50048828125 0.18798828125 0.56201171875 0.24951171875
+57 0.56298828125 0.18798828125 0.62451171875 0.24951171875
+58 0.62548828125 0.18798828125 0.68701171875 0.24951171875
+59 0.68798828125 0.18798828125 0.74951171875 0.24951171875
+60 0.75048828125 0.18798828125 0.81201171875 0.24951171875
+61 0.81298828125 0.18798828125 0.87451171875 0.24951171875
+62 0.87548828125 0.18798828125 0.93701171875 0.24951171875
+63 0.93798828125 0.18798828125 0.99951171875 0.24951171875
+64 0.00048828125 0.25048828125 0.06201171875 0.31201171875
+65 0.06298828125 0.25048828125 0.12451171875 0.31201171875
+66 0.12548828125 0.25048828125 0.18701171875 0.31201171875
+67 0.18798828125 0.25048828125 0.24951171875 0.31201171875
+68 0.25048828125 0.25048828125 0.31201171875 0.31201171875
+69 0.31298828125 0.25048828125 0.37451171875 0.31201171875
+70 0.37548828125 0.25048828125 0.43701171875 0.31201171875
+71 0.43798828125 0.25048828125 0.49951171875 0.31201171875
+72 0.50048828125 0.25048828125 0.56201171875 0.31201171875
+73 0.56298828125 0.25048828125 0.62451171875 0.31201171875
+74 0.62548828125 0.25048828125 0.68701171875 0.31201171875
+75 0.68798828125 0.25048828125 0.74951171875 0.31201171875
+76 0.75048828125 0.25048828125 0.81201171875 0.31201171875
+77 0.81298828125 0.25048828125 0.87451171875 0.31201171875
+78 0.87548828125 0.25048828125 0.93701171875 0.31201171875
+79 0.93798828125 0.25048828125 0.99951171875 0.31201171875
+80 0.00048828125 0.31298828125 0.06201171875 0.37451171875
+81 0.06298828125 0.31298828125 0.12451171875 0.37451171875
+82 0.12548828125 0.31298828125 0.18701171875 0.37451171875
+83 0.18798828125 0.31298828125 0.24951171875 0.37451171875
+84 0.25048828125 0.31298828125 0.31201171875 0.37451171875
+85 0.31298828125 0.31298828125 0.37451171875 0.37451171875
+86 0.37548828125 0.31298828125 0.43701171875 0.37451171875
+87 0.43798828125 0.31298828125 0.49951171875 0.37451171875
+88 0.50048828125 0.31298828125 0.56201171875 0.37451171875
+89 0.56298828125 0.31298828125 0.62451171875 0.37451171875
+90 0.62548828125 0.31298828125 0.68701171875 0.37451171875
+91 0.68798828125 0.31298828125 0.74951171875 0.37451171875
+92 0.75048828125 0.31298828125 0.81201171875 0.37451171875
+93 0.81298828125 0.31298828125 0.87451171875 0.37451171875
+94 0.87548828125 0.31298828125 0.93701171875 0.37451171875
+95 0.93798828125 0.31298828125 0.99951171875 0.37451171875
+96 0.00048828125 0.37548828125 0.06201171875 0.43701171875
+97 0.06298828125 0.37548828125 0.12451171875 0.43701171875
+98 0.12548828125 0.37548828125 0.18701171875 0.43701171875
+99 0.18798828125 0.37548828125 0.24951171875 0.43701171875
+100 0.25048828125 0.37548828125 0.31201171875 0.43701171875
+101 0.31298828125 0.37548828125 0.37451171875 0.43701171875
+102 0.37548828125 0.37548828125 0.43701171875 0.43701171875
+103 0.43798828125 0.37548828125 0.49951171875 0.43701171875
+104 0.50048828125 0.37548828125 0.56201171875 0.43701171875
+105 0.56298828125 0.37548828125 0.62451171875 0.43701171875
+106 0.62548828125 0.37548828125 0.68701171875 0.43701171875
+107 0.68798828125 0.37548828125 0.74951171875 0.43701171875
+108 0.75048828125 0.37548828125 0.81201171875 0.43701171875
+109 0.81298828125 0.37548828125 0.87451171875 0.43701171875
+110 0.87548828125 0.37548828125 0.93701171875 0.43701171875
+111 0.93798828125 0.37548828125 0.99951171875 0.43701171875
+112 0.00048828125 0.43798828125 0.06201171875 0.49951171875
+113 0.06298828125 0.43798828125 0.12451171875 0.49951171875
+114 0.12548828125 0.43798828125 0.18701171875 0.49951171875
+115 0.18798828125 0.43798828125 0.24951171875 0.49951171875
+116 0.25048828125 0.43798828125 0.31201171875 0.49951171875
+117 0.31298828125 0.43798828125 0.37451171875 0.49951171875
+118 0.37548828125 0.43798828125 0.43701171875 0.49951171875
+119 0.43798828125 0.43798828125 0.49951171875 0.49951171875
+120 0.50048828125 0.43798828125 0.56201171875 0.49951171875
+121 0.56298828125 0.43798828125 0.62451171875 0.49951171875
+122 0.62548828125 0.43798828125 0.68701171875 0.49951171875
+123 0.68798828125 0.43798828125 0.74951171875 0.49951171875
+124 0.75048828125 0.43798828125 0.81201171875 0.49951171875
+125 0.81298828125 0.43798828125 0.87451171875 0.49951171875
+126 0.87548828125 0.43798828125 0.93701171875 0.49951171875
+127 0.93798828125 0.43798828125 0.99951171875 0.49951171875
+128 0.00048828125 0.50048828125 0.06201171875 0.56201171875
+129 0.06298828125 0.50048828125 0.12451171875 0.56201171875
+130 0.12548828125 0.50048828125 0.18701171875 0.56201171875
+131 0.18798828125 0.50048828125 0.24951171875 0.56201171875
+132 0.25048828125 0.50048828125 0.31201171875 0.56201171875
+133 0.31298828125 0.50048828125 0.37451171875 0.56201171875
+134 0.37548828125 0.50048828125 0.43701171875 0.56201171875
+135 0.43798828125 0.50048828125 0.49951171875 0.56201171875
+136 0.50048828125 0.50048828125 0.56201171875 0.56201171875
+137 0.56298828125 0.50048828125 0.62451171875 0.56201171875
+138 0.62548828125 0.50048828125 0.68701171875 0.56201171875
+139 0.68798828125 0.50048828125 0.74951171875 0.56201171875
+140 0.75048828125 0.50048828125 0.81201171875 0.56201171875
+141 0.81298828125 0.50048828125 0.87451171875 0.56201171875
+142 0.87548828125 0.50048828125 0.93701171875 0.56201171875
+143 0.93798828125 0.50048828125 0.99951171875 0.56201171875
+144 0.00048828125 0.56298828125 0.06201171875 0.62451171875
+145 0.06298828125 0.56298828125 0.12451171875 0.62451171875
+146 0.12548828125 0.56298828125 0.18701171875 0.62451171875
+147 0.18798828125 0.56298828125 0.24951171875 0.62451171875
+148 0.25048828125 0.56298828125 0.31201171875 0.62451171875
+149 0.31298828125 0.56298828125 0.37451171875 0.62451171875
+150 0.37548828125 0.56298828125 0.43701171875 0.62451171875
+151 0.43798828125 0.56298828125 0.49951171875 0.62451171875
+152 0.50048828125 0.56298828125 0.56201171875 0.62451171875
+153 0.56298828125 0.56298828125 0.62451171875 0.62451171875
+154 0.62548828125 0.56298828125 0.68701171875 0.62451171875
+155 0.68798828125 0.56298828125 0.74951171875 0.62451171875
+156 0.75048828125 0.56298828125 0.81201171875 0.62451171875
+157 0.81298828125 0.56298828125 0.87451171875 0.62451171875
+158 0.87548828125 0.56298828125 0.93701171875 0.62451171875
+159 0.93798828125 0.56298828125 0.99951171875 0.62451171875
+200 0 0.62548828125 1 0.68701171875
+201 0 0.68798828125 1 0.74951171875
+202 0 0.75048828125 1 0.81201171875
+203 0 0.81298828125 1 0.87451171875
+204 0 0.87548828125 1 0.93701171875
+205 0 0.93798828125 1 0.99951171875
index 30f22a6..4d9a118 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index 46d6587..8fba574 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index e56e6f1..59cf1de 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index 528f623..6ab373f 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index bdf1525..e6926e4 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index 6aaf747..39d1e6a 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index b60f74b..048d2bb 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index a314678..b28cb4f 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index 95b34c2..4ee66f2 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
 sv_aircontrol 150
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index 78d4240..1731b12 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
diff --git a/physicsLeeStricklin.cfg b/physicsLeeStricklin.cfg
new file mode 100644 (file)
index 0000000..c0a5e21
--- /dev/null
@@ -0,0 +1,30 @@
+// These have been modified from Nexuiz 2.4.2's physicsQBR.cfg file
+sv_gravity 800
+sv_gravity 802
+sv_maxspeed 417
+sv_maxairspeed 202
+sv_stopspeed 100
+sv_accelerate 5.8
+sv_airaccelerate 5.5
+sv_friction 4.1
+edgefriction 1
+sv_stepheight 34
+sv_jumpvelocity 307
+sv_wateraccelerate -1
+sv_waterfriction -1
+sv_airaccel_sideways_friction 0.207
+sv_airaccel_qw -0.93
+sv_airstopaccelerate 0
+sv_airstrafeaccelerate 0
+sv_maxairstrafespeed 0
+sv_aircontrol 0
+sv_aircontrol_power 2
+sv_warsowbunny_turnaccel 0
+sv_warsowbunny_accel 0.1593
+sv_warsowbunny_topspeed 925
+sv_warsowbunny_backtosideratio 0.8
+sv_friction_on_land 0
+sv_doublejump 0
+sv_jumpspeedcap_min ""
+sv_jumpspeedcap_max ""
+sv_jumpspeedcap_max_disable_on_ramps 0
index 0349610..d408285 100644 (file)
@@ -18,6 +18,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
diff --git a/physicsNexrun.cfg b/physicsNexrun.cfg
deleted file mode 100644 (file)
index 122c89b..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-// Nexrun tweaked to suit CPM
-sv_gravity 800
-sv_maxspeed 320
-// CPMA: 320
-sv_maxairspeed 320
-// CPMA: 320
-sv_stopspeed 100
-sv_accelerate 15
-sv_airaccelerate 1
-sv_friction 8
-edgefriction 1
-sv_stepheight 34
-// CPMA: 18
-sv_jumpvelocity 270
-sv_wateraccelerate 4
-sv_waterfriction 1
-sv_airaccel_sideways_friction 0
-sv_airaccel_qw 0.95
-// CPMA: 1
-sv_airstopaccelerate 2.5
-sv_airstrafeaccelerate 70
-sv_maxairstrafespeed 30
-sv_aircontrol 150
-sv_warsowbunny_turnaccel 0
-sv_warsowbunny_accel 0.1593
-sv_warsowbunny_topspeed 925
-sv_warsowbunny_backtosideratio 0.8
-sv_friction_on_land 0
-sv_doublejump 1
-sv_jumpspeedcap_min 0
-sv_jumpspeedcap_max 1
-sv_jumpspeedcap_max_disable_on_ramps 1
diff --git a/physicsNexrun_old.cfg b/physicsNexrun_old.cfg
deleted file mode 100644 (file)
index 6142cf2..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-// CPMA tweaked to match the speeds in old Nexrun
-sv_gravity 800
-sv_maxspeed 400
-// CPMA: 320
-sv_maxairspeed 400
-// CPMA: 320
-sv_stopspeed 100
-sv_accelerate 15
-sv_airaccelerate 1
-sv_friction 8
-edgefriction 1
-sv_stepheight 34
-// CPMA: 18
-sv_jumpvelocity 270
-sv_wateraccelerate 4
-sv_waterfriction 1
-sv_airaccel_sideways_friction 0
-sv_airaccel_qw 0.95
-// CPMA: 1
-sv_airstopaccelerate 2.5
-sv_airstrafeaccelerate 70
-sv_maxairstrafespeed 30
-sv_aircontrol 150
-sv_warsowbunny_turnaccel 0
-sv_warsowbunny_accel 0.1593
-sv_warsowbunny_topspeed 925
-sv_warsowbunny_backtosideratio 0.8
-sv_friction_on_land 0
-sv_doublejump 1
-sv_jumpspeedcap_min 0
-sv_jumpspeedcap_max 1
-sv_jumpspeedcap_max_disable_on_ramps 1
index 363a425..88290d6 100644 (file)
@@ -1,22 +1,23 @@
-// Xonotic 2.0-2.4.2 physics minus QW-bunnyhopping-bug, faster onground accel, CPMA air control
+// 2.0-2.4.2 physics minus QW-bunnyhopping-bug, faster onground accel, CPMA air control
 sv_gravity 800
-sv_maxspeed 320
-sv_maxairspeed 320
+sv_maxspeed 400
+sv_maxairspeed 220
 sv_stopspeed 100
-sv_accelerate 15
-sv_airaccelerate 5.5
-sv_friction 5
+sv_accelerate 12
+sv_airaccelerate 8
+sv_friction 7
 edgefriction 1
 sv_stepheight 34
 sv_jumpvelocity 300
 sv_wateraccelerate -1
 sv_waterfriction -1
-sv_airaccel_sideways_friction -1
+sv_airaccel_sideways_friction -0.125
 sv_airaccel_qw -0.95
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
-sv_aircontrol 70
+sv_aircontrol 100
+sv_aircontrol_power 3
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index 51cf682..343971c 100644 (file)
@@ -18,6 +18,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index ecbd2a3..de8ff72 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index 76c0ba1..ff08d07 100644 (file)
@@ -18,6 +18,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index 6b8d4c1..716728e 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index 2e2d0b5..88e7e8f 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index f64b2be..7c5da3f 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index f4a1840..3631c80 100644 (file)
@@ -1,27 +1,28 @@
-sv_gravity 880\r
-sv_maxspeed 420\r
-sv_maxairspeed 235\r
-sv_stopspeed 200\r
-sv_accelerate 6\r
-sv_airaccelerate 6\r
-sv_friction 4\r
-edgefriction 0\r
-sv_stepheight 34\r
-sv_jumpvelocity 330\r
-sv_wateraccelerate -1\r
-sv_waterfriction -1\r
-sv_airaccel_sideways_friction 0.3\r
-sv_airaccel_qw 0.93\r
-sv_airstopaccelerate 0\r
-sv_airstrafeaccelerate 0\r
-sv_maxairstrafespeed 0\r
-sv_aircontrol 0\r
-sv_warsowbunny_turnaccel 0\r
-sv_warsowbunny_accel 0.1593\r
-sv_warsowbunny_topspeed 925\r
-sv_warsowbunny_backtosideratio 0.8\r
-sv_friction_on_land 0\r
-sv_doublejump 0\r
+sv_gravity 880
+sv_maxspeed 420
+sv_maxairspeed 235
+sv_stopspeed 200
+sv_accelerate 6
+sv_airaccelerate 6
+sv_friction 4
+edgefriction 0
+sv_stepheight 34
+sv_jumpvelocity 330
+sv_wateraccelerate -1
+sv_waterfriction -1
+sv_airaccel_sideways_friction 0.3
+sv_airaccel_qw 0.93
+sv_airstopaccelerate 0
+sv_airstrafeaccelerate 0
+sv_maxairstrafespeed 0
+sv_aircontrol 0
+sv_aircontrol_power 2
+sv_warsowbunny_turnaccel 0
+sv_warsowbunny_accel 0.1593
+sv_warsowbunny_topspeed 925
+sv_warsowbunny_backtosideratio 0.8
+sv_friction_on_land 0
+sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
index eeb919b..bc53f7a 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
 sv_aircontrol 0
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 9 // activates warsow movement mode
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index 0a66f45..6c60724 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
 sv_aircontrol 150
+sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
index 4f7fff9..324676d 100644 (file)
@@ -17,6 +17,7 @@ sv_airstopaccelerate 2
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
 sv_aircontrol 0
+sv_aircontrol_power 2
 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
new file mode 100644 (file)
index 0000000..da81a24
--- /dev/null
@@ -0,0 +1,33 @@
+// Nexrun tweaked to suit CPM
+sv_gravity 800
+sv_maxspeed 320
+// CPMA: 320
+sv_maxairspeed 320
+// CPMA: 320
+sv_stopspeed 100
+sv_accelerate 15
+sv_airaccelerate 1
+sv_friction 8
+edgefriction 1
+sv_stepheight 34
+// CPMA: 18
+sv_jumpvelocity 270
+sv_wateraccelerate 4
+sv_waterfriction 1
+sv_airaccel_sideways_friction 0
+sv_airaccel_qw 0.95
+// CPMA: 1
+sv_airstopaccelerate 2.5
+sv_airstrafeaccelerate 70
+sv_maxairstrafespeed 30
+sv_aircontrol 150
+sv_aircontrol_power 2
+sv_warsowbunny_turnaccel 0
+sv_warsowbunny_accel 0.1593
+sv_warsowbunny_topspeed 925
+sv_warsowbunny_backtosideratio 0.8
+sv_friction_on_land 0
+sv_doublejump 1
+sv_jumpspeedcap_min 0
+sv_jumpspeedcap_max 1
+sv_jumpspeedcap_max_disable_on_ramps 1
index 985bcc7..d16e918 100644 (file)
@@ -902,6 +902,7 @@ void(float bIsNewEntity) CSQC_Ent_Update =
                case ENT_CLIENT_TUBANOTE: Ent_TubaNote(bIsNewEntity); break;
                case ENT_CLIENT_WARPZONE: WarpZone_Read(bIsNewEntity); break;
                case ENT_CLIENT_WARPZONE_CAMERA: WarpZone_Camera_Read(bIsNewEntity); break;
+               case ENT_CLIENT_TRIGGER_MUSIC: Ent_ReadTriggerMusic(); break;
                default:
                        error(strcat("unknown entity type in CSQC_Ent_Update: ", ftos(self.enttype), "\n"));
                        break;
@@ -1016,6 +1017,9 @@ void Ent_Init()
 
        g_weaponswitchdelay = ReadByte() / 255.0;
 
+       g_balance_grenadelauncher_secondary_bouncefactor = ReadCoord();
+       g_balance_grenadelauncher_secondary_bouncestop = ReadCoord();
+
        if(!postinit)
                PostInit();
 }
@@ -1231,6 +1235,10 @@ float CSQC_Parse_TempEntity()
                // NOTE: Could just do return instead of break...
        switch(nTEID)
        {
+               case TE_CSQC_TARGET_MUSIC:
+                       Net_TargetMusic();
+                       bHandled = true;
+                       break;
                case TE_CSQC_PICTURE:
                        Net_MapVote_Picture();
                        bHandled = true;
index fa7ca03..0802ade 100644 (file)
@@ -345,6 +345,10 @@ float view_set;
 float camera_mode;
 string NextFrameCommand;
 void CSQC_SPIDER_HUD();
+void CSQC_RAPTOR_HUD();
+
+vector freeze_pmove_org, freeze_input_angles;
+
 void CSQC_UpdateView(float w, float h)
 {
        entity e;
@@ -368,6 +372,17 @@ void CSQC_UpdateView(float w, float h)
        pmove_org = warpzone_fixview_origin - vo;
        input_angles = warpzone_fixview_angles;
 
+       if(cvar("cl_lockview"))
+       {
+               pmove_org = warpzone_fixview_origin = freeze_pmove_org;
+               input_angles = freeze_input_angles;
+               R_SetView(VF_ORIGIN, pmove_org + vo);
+               R_SetView(VF_ANGLES, input_angles);
+               //R_SetView(VF_CL_VIEWANGLES, input_angles);
+       }
+       freeze_pmove_org = pmove_org;
+       freeze_input_angles = input_angles;
+
        // Render the Scene
        if(!intermission || !view_set)
        {
@@ -402,6 +417,7 @@ void CSQC_UpdateView(float w, float h)
        }
 #endif
 
+       TargetMusic_Advance();
        Fog_Force();
 
        drawframetime = max(0.000001, time - drawtime);
@@ -600,6 +616,8 @@ void CSQC_UpdateView(float w, float h)
        }
        else if(hud == HUD_WAKIZASHI)
         CSQC_WAKIZASHI_HUD();
+    else if(hud == HUD_RAPTOR)
+        CSQC_RAPTOR_HUD();
        else
        {
                if(cvar("r_letterbox") == 0)
@@ -861,13 +879,13 @@ void Sbar_Draw();
 
 void CSQC_SPIDER_HUD()
 {
-       float rockets, reload, heat, hp, shield, i;
+       float rockets, reload, heat, hp, shield;
        vector picsize, hudloc;
 
     // Fetch health & ammo stats
     hp      = bound(0,getstatf(STAT_VEHICLESTAT_HEALTH), 1);
        shield  = bound(0,getstatf(STAT_VEHICLESTAT_SHIELD), 1);
-       heat    = min(getstatf(STAT_VEHICLESTAT_RELOAD1), 1);
+       heat    = min(getstatf(STAT_VEHICLESTAT_RELOAD1), 2);
        rockets =     getstati(STAT_VEHICLESTAT_AMMO2);
        reload  = min(getstatf(STAT_VEHICLESTAT_RELOAD2), 1);
 
@@ -886,10 +904,8 @@ void CSQC_SPIDER_HUD()
     picsize = drawgetimagesize(spider_a2) * 0.5;
     drawpic(hudloc + '120 96  0', spider_a2, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
 
-
     drawstring(hudloc + '145 19  0', strcat(ftos(rint(hp * 100)), "%"),'15 15 0','0 1 0', 1, DRAWFLAG_NORMAL);
     drawstring(hudloc + '175 34  0', strcat(ftos(rint(shield * 100)), "%"),'15 15 0','0 0 1', 1, DRAWFLAG_NORMAL);
-
     drawstring(hudloc + '136 102  0', strcat(ftos(100 - rint(heat * 100)), "%"),'14 14 0','1 1 0', 1, DRAWFLAG_NORMAL);
 
     picsize = drawgetimagesize(spider_a1) * 0.85;
@@ -968,6 +984,76 @@ void CSQC_SPIDER_HUD()
 
 }
 
+#define raptor_h "gfx/vehicles/hud_bg.tga"
+#define raptor_b "gfx/vehicles/raptor.tga"
+#define raptor_g1 "gfx/vehicles/raptor_guns.tga"
+#define raptor_g2 "gfx/vehicles/raptor_bombs.tga"
+#define raptor_s "gfx/vehicles/shiled.tga"
+
+#define spider_a1 "gfx/hud/sb_rocket.tga"
+#define spider_a2 "gfx/sb_bullets.tga"
+
+void CSQC_RAPTOR_HUD()
+{
+       float rockets, reload, heat, hp, shield, energy;
+       vector picsize, hudloc;
+
+    // Fetch health & ammo stats
+    hp      = bound(0,getstatf(STAT_VEHICLESTAT_HEALTH), 1);
+       shield  = bound(0,getstatf(STAT_VEHICLESTAT_SHIELD), 1);
+       reload  = min(getstatf(STAT_VEHICLESTAT_RELOAD1), 1);
+       energy  = min(getstatf(STAT_VEHICLESTAT_ENERGY),  1);
+
+    // Draw the crosshairs
+    picsize = drawgetimagesize(SPIDER_CROSS);
+    picsize_x *= cvar_or("cl_vehicle_spiderbot_cross_size", 1);
+    picsize_y *= cvar_or("cl_vehicle_spiderbot_cross_size", 1);
+    drawpic('0.5 0 0' * (vid_conwidth - picsize_x) + '0 0.5 0' * (vid_conheight - picsize_y), SPIDER_CROSS, picsize, '1 1 1', cvar_or("cl_vehicle_spiderbot_cross_alpha",0.6), DRAWFLAG_NORMAL);
+
+    hudloc_y =  4;
+    hudloc_x = 4;
+
+    picsize = drawgetimagesize(raptor_h) * 0.5;
+    drawpic(hudloc, raptor_h, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+
+    picsize = drawgetimagesize(spider_a2) * 0.5;
+    drawpic(hudloc + '120 96  0', spider_a2, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+
+    drawstring(hudloc + '145 19  0', strcat(ftos(rint(hp * 100)), "%"),'15 15 0','0 1 0', 1, DRAWFLAG_NORMAL);
+    drawstring(hudloc + '175 34  0', strcat(ftos(rint(shield * 100)), "%"),'15 15 0','0 0 1', 1, DRAWFLAG_NORMAL);
+    drawstring(hudloc + '136 102 0', strcat(ftos(rint(energy * 100)), "%"),'15 15 0','0.5 0.5 1', 1, DRAWFLAG_NORMAL);
+
+
+    picsize = drawgetimagesize(spider_a1) * 0.85;
+    if(reload == 1)
+    {
+        drawpic(hudloc + '132 54  0', spider_a1, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+        drawstring(hudloc + '179 69  0', strcat(ftos(rint(reload * 100)), "%"),'14 14 0','0 1 0', 0.5, DRAWFLAG_NORMAL);
+    }
+    else
+    {
+        drawpic(hudloc + '132 54  0', spider_a1, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+        drawstring(hudloc + '179 69  0', strcat(ftos(rint(reload * 100)), "%"),'14 14 0','0 0 1', 1, DRAWFLAG_NORMAL);
+    }
+
+    picsize = drawgetimagesize(raptor_b) * 0.5;
+    hudloc_y = 10.5;
+    hudloc_x = 10.5;
+
+    drawpic(hudloc, raptor_s, picsize, '1 1 1', shield, DRAWFLAG_NORMAL);
+    drawpic(hudloc, raptor_b, picsize, '0 1 0' * hp + '1 0 0' * (1 - hp), 1, DRAWFLAG_NORMAL);
+    drawpic(hudloc, raptor_g1, picsize, '1 1 1' * energy + '1 0 0' * (1 - energy), 1, DRAWFLAG_NORMAL);
+    drawpic(hudloc, raptor_g2, picsize, '1 1 1' * reload + '1 0 0' *  (1 - reload), 1, DRAWFLAG_NORMAL);
+
+
+       if (sb_showscores)
+       {
+               Sbar_DrawScoreboard();
+               Sbar_DrawCenterPrint();
+       }
+
+}
+
 #define waki_h "gfx/vehicles/hud_bg.tga"
 #define waki_b "gfx/vehicles/waki.tga"
 #define waki_e "gfx/vehicles/waki_e.tga"
index d3e42cd..c108a4c 100644 (file)
@@ -308,3 +308,5 @@ float PI      = 3.14159265358979323846264338327950288419716939937510582097494459
 float log(float f) = #532;
 
 void(entity e, entity ignore) tracetoss = #64;
+
+float(entity e, float ch) getsoundtime = #533; // (DP_SND_GETSOUNDTIME)
index 503b5e4..9e90bee 100644 (file)
@@ -292,15 +292,15 @@ void Ent_DamageInfo(float isNew)
                        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
                                }
-                               else
-                               {
-                                       // firemine goes out silently
-                               }
                                break;
                        default:
                                dprint("Unhandled damage of weapon ", ftos(hitwep), "\n");
index 9842a28..67951fc 100644 (file)
@@ -156,8 +156,10 @@ void Ent_GibSplash(float isNew)
 
        if(type & 0x80)
        {
-               if(cvar("cl_gentle") > 1)
+               if(cvar("cl_gentle") == 2)
                        gentle_prefix = "";
+               else if(cvar("cl_gentle") == 3) 
+                       gentle_prefix = "happy_";
                else
                        gentle_prefix = "morphed_";
        }
index b7a3d59..d2847af 100644 (file)
@@ -163,3 +163,6 @@ float calledhooks;
 #define HOOK_END      2
 
 .float ping, ping_packetloss, ping_movementloss;
+
+float g_balance_grenadelauncher_secondary_bouncefactor;
+float g_balance_grenadelauncher_secondary_bouncestop;
index 15f230d..e039ce4 100644 (file)
@@ -49,6 +49,7 @@ effects.qc
 wall.qc
 modeleffects.qc
 tuba.qc
+target_music.qc
 
 //vehicles/spiderbot.qc
 Main.qc
index d77e03c..7072a1b 100644 (file)
@@ -213,13 +213,15 @@ void Ent_Projectile()
                        self.velocity_x = ReadCoord();
                        self.velocity_y = ReadCoord();
                        self.velocity_z = ReadCoord();
-                       self.gravity = ReadCoord();
-
+                       if(f & 0x10)
+                               self.gravity = ReadCoord();
+                       else
+                               self.gravity = 0; // none
                        self.move_origin = self.origin;
                        self.move_velocity = self.velocity;
                }
 
-               if(time == self.spawntime || (self.count & 0x80) || (f & 0x10))
+               if(time == self.spawntime || (self.count & 0x80) || (f & 0x08))
                {
                        self.trail_oldorigin = self.origin;
                        if(!(self.count & 0x80))
@@ -307,6 +309,8 @@ void Ent_Projectile()
                                self.maxs = '0 0 -3';
                                self.move_movetype = MOVETYPE_BOUNCE;
                                self.move_touch = SUB_Null;
+                               self.move_bounce_factor = g_balance_grenadelauncher_secondary_bouncefactor;
+                               self.move_bounce_stopspeed = g_balance_grenadelauncher_secondary_bouncestop;
                                break;
                        case PROJECTILE_PORTO_RED:
                                self.colormod = '2 1 1';
index 2b06979..d817590 100644 (file)
@@ -3395,8 +3395,15 @@ void CSQC_race_hud(void)
                rr = RACE_RECORD;
        t = stof(db_get(ClientProgsDB, strcat(shortmapname, rr, "time")));
 
-       if(score && score < t || !t)
+       if(score && (score < t || !t)) {
                db_put(ClientProgsDB, strcat(shortmapname, rr, "time"), ftos(score));
+               if(cvar("cl_autodemo_delete_keeprecords"))
+               {
+                       f = cvar("cl_autodemo_delete");
+                       f &~= 1;
+                       cvar_set("cl_autodemo_delete", ftos(f)); // don't delete demo with new record!
+               }
+       }
 
        if(t != crecordtime_prev) {
                crecordtime_prev = t;
diff --git a/qcsrc/client/target_music.qc b/qcsrc/client/target_music.qc
new file mode 100644 (file)
index 0000000..4ef9a37
--- /dev/null
@@ -0,0 +1,185 @@
+float music_disabled;
+entity music_default;
+entity music_target;
+entity music_trigger;
+
+.float state;
+
+void TargetMusic_Advance()
+{
+       // run AFTER all the thinks!
+       entity best, e;
+       float s0;
+       best = music_default;
+       if(music_target && time < music_target.lifetime)
+               best = music_target;
+       if(music_trigger)
+               best = music_trigger;
+       for(e = world; (e = findfloat(e, enttype, ENT_CLIENT_TRIGGER_MUSIC)); ) if(e.noise)
+       {
+               s0 = e.state;
+               if(getsoundtime(e, CHAN_VOICE) < 0)
+               {
+                       s0 = -1;
+               }
+               if(e == best)
+               {
+                       // increase volume
+                       if(e.fade_time > 0)
+                               e.state = bound(0, e.state + frametime / e.fade_time, 1);
+                       else
+                               e.state = 1;
+               }
+               else
+               {
+                       // decrease volume
+                       if(e.fade_rate > 0)
+                               e.state = bound(0, e.state - frametime / e.fade_rate, 1);
+                       else
+                               e.state = 0;
+               }
+               if(e.state != s0)
+               {
+                       if(s0 < 0)
+                               sound(e, CHAN_VOICE, e.noise, e.volume * e.state * cvar("bgmvolume"), ATTN_NONE); // restart
+                       else
+                               sound(e, CHAN_VOICE, "", e.volume * e.state * cvar("bgmvolume"), ATTN_NONE);
+               }
+       }
+       music_trigger = world;
+}
+
+void Net_TargetMusic()
+{
+       float vol, fai, fao, tim, id;
+       string noi, s;
+       entity e;
+
+       id = ReadShort();
+       vol = ReadByte() / 255.0;
+       fai = ReadByte() / 16.0;
+       fao = ReadByte() / 16.0;
+       tim = ReadByte();
+       noi = ReadString();
+
+       for(e = world; (e = findfloat(e, enttype, ENT_CLIENT_TRIGGER_MUSIC)); )
+       {
+               if(e.count == id)
+                       break;
+       }
+       if(!e)
+       {
+               e = spawn();
+               e.enttype = ENT_CLIENT_TRIGGER_MUSIC;
+       }
+       s = e.noise;
+       if(e.noise)
+               strunzone(e.noise);
+       e.noise = strzone(noi);
+       if(e.noise != s)
+       {
+               precache_sound(e.noise);
+               sound(e, CHAN_VOICE, e.noise, 0, ATTN_NONE);
+               if(getsoundtime(e, CHAN_VOICE) < 0)
+               {
+                       print("Cannot initialize sound ", e.noise, "\n");
+                       strunzone(e.noise);
+                       e.noise = string_null;
+               }
+       }
+       e.volume = vol;
+       e.fade_time = fai;
+       e.fade_rate = fao;
+       if(vol > 0)
+       {
+               if(tim == 0)
+               {
+                       music_default = e;
+                       if(!music_disabled)
+                       {
+                               e.state = 2;
+                               localcmd("cd stop\n"); // just in case
+                               music_disabled = 1;
+                       }
+               }
+               else
+               {
+                       music_target = e;
+                       e.lifetime = time + tim;
+               }
+       }
+}
+
+void Ent_TriggerMusic_Think()
+{
+       if(WarpZoneLib_BoxTouchesBrush(view_origin, view_origin, self, world))
+       {
+               music_trigger = self;
+       }
+       self.nextthink = time;
+}
+
+void Ent_TriggerMusic_Remove()
+{
+       if(self.noise)
+               strunzone(self.noise);
+       self.noise = string_null;
+}
+
+void Ent_ReadTriggerMusic()
+{
+       float f;
+       string s;
+       f = ReadByte();
+       if(f & 4)
+       {
+               self.origin_x = ReadCoord();
+               self.origin_y = ReadCoord();
+               self.origin_z = ReadCoord();
+       }
+       if(f & 1)
+       {
+               self.modelindex = ReadShort();
+               if(self.modelindex)
+               {
+                       self.mins_x = ReadCoord();
+                       self.mins_y = ReadCoord();
+                       self.mins_z = ReadCoord();
+                       self.maxs_x = ReadCoord();
+                       self.maxs_y = ReadCoord();
+                       self.maxs_z = ReadCoord();
+               }
+               else
+               {
+                       self.mins    = '0 0 0';
+                       self.maxs_x = ReadCoord();
+                       self.maxs_y = ReadCoord();
+                       self.maxs_z = ReadCoord();
+               }
+
+               self.volume = ReadByte() / 255.0;
+               self.fade_time = ReadByte() / 16.0;
+               self.fade_rate = ReadByte() / 16.0;
+               s = self.noise;
+               if(self.noise)
+                       strunzone(self.noise);
+               self.noise = strzone(ReadString());
+               if(self.noise != s)
+               {
+                       precache_sound(self.noise);
+                       sound(self, CHAN_VOICE, self.noise, 0, ATTN_NONE);
+                       if(getsoundtime(self, CHAN_VOICE) < 0)
+                       {
+                               print("Cannot initialize sound ", self.noise, "\n");
+                               strunzone(self.noise);
+                               self.noise = string_null;
+                       }
+               }
+       }
+
+       setorigin(self, self.origin);
+       setsize(self, self.mins, self.maxs);
+       self.cnt = 1;
+       self.think = Ent_TriggerMusic_Think;
+       self.nextthink = time;
+}
index 3dae7e6..cdf92f0 100644 (file)
@@ -56,6 +56,7 @@ const float TE_CSQC_PINGPLREPORT = 107;
 const float TE_CSQC_VOTE = 108;
 const float TE_CSQC_VOTERESET = 109;
 const float TE_CSQC_ANNOUNCE = 110;
+const float TE_CSQC_TARGET_MUSIC = 111;
 
 const float RACE_NET_CHECKPOINT_HIT_QUALIFYING = 0; // byte checkpoint, short time, short recordtime, string recordholder
 const float RACE_NET_CHECKPOINT_CLEAR = 1;
@@ -98,6 +99,7 @@ const float ENT_CLIENT_MODELEFFECT = 22;
 const float ENT_CLIENT_TUBANOTE = 23;
 const float ENT_CLIENT_WARPZONE = 24;
 const float ENT_CLIENT_WARPZONE_CAMERA = 25;
+const float ENT_CLIENT_TRIGGER_MUSIC = 26;
 
 const float ENT_CLIENT_TURRET = 40;
 
@@ -285,6 +287,7 @@ const float STAT_HUD = 50;
 const float HUD_NORMAL = 0;
 const float HUD_SPIDERBOT = 10;
 const float HUD_WAKIZASHI = 11;
+const float HUD_RAPTOR    = 12;
 
 const float STAT_VEHICLESTAT_HEALTH  = 60;
 const float STAT_VEHICLESTAT_SHIELD  = 61;
@@ -367,7 +370,7 @@ float       CHAN_VOICE                              = 2; // Voice/Radio
        // on world: UNUSED
        // on players: voice                             VOICE
        // on entities: ambient                          AMBIENT
-       // on csqc: UNUSED
+       // on csqc: background music                     BGM
 float  CHAN_TRIGGER                    = 3; // Triggers/Items
        // on world: UNUSED
        // on players: item pickup                       ITEMS
index 003377e..53a0718 100644 (file)
@@ -324,6 +324,8 @@ float _MapInfo_Generate(string pFilename) // 0: failure, 1: ok ent, 2: ok bsp
                                        { }
                                else if(startsWith(v, "weapon_"))
                                        MapInfo_Map_supportedFeatures |= MAPINFO_FEATURE_WEAPONS;
+                               else if(v == "target_music" || v == "trigger_music")
+                                       _MapInfo_Map_worldspawn_music = string_null; // don't use regular BGM
                        }
                }
        }
@@ -630,7 +632,7 @@ float MapInfo_Get_ByName(string pFilename, float pAllowGenerate, float pGametype
                        else
                                fputs(fh, strcat("cdtrack ", _MapInfo_Map_worldspawn_music, "\n"));
                }
-               else
+               else if(_MapInfo_Map_worldspawn_music)
                {
                        n = tokenize_console(cvar_string("g_cdtracks_remaplist"));
                        s = strcat(" ", cvar_string("g_cdtracks_dontusebydefault"), " ");
index 1c589ec..7c3c754 100644 (file)
@@ -23,13 +23,14 @@ void fillXonoticAudioSettingsTab(entity me)
        entity e, s, sl;
 
        me.TR(me);
-               s = makeXonoticDecibelsSlider(-20, 0, 0.5, "bgmvolume");
-               me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Music:"));
+               s = makeXonoticDecibelsSlider(-20, 0, 0.5, "mastervolume");
+               me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Master:"));
                me.TD(me, 1, 2, s);
        me.TR(me);
-       me.TR(me);
-               s = makeXonoticDecibelsSlider(-20, 0, 0.5, "volume");
-               me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Master:"));
+               me.TDempty(me, 0.2);
+               s = makeXonoticDecibelsSlider(-20, 0, 0.5, "bgmvolume");
+               makeMulti(s, "snd_csqcchannel2volume");
+               me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Music:"));
                me.TD(me, 1, 2, s);
        me.TR(me);
                me.TDempty(me, 0.2);
index ef83ef6..0ec16a9 100644 (file)
@@ -1064,14 +1064,50 @@ float ClientInit_SendEntity(entity to, float sf)
                WriteString(MSG_ENTITY, world.fog);
        else
                WriteString(MSG_ENTITY, "");
-       WriteByte(MSG_ENTITY, cvar("g_balance_armor_blockpercent") * 255.0);
-       WriteByte(MSG_ENTITY, cvar("g_balance_weaponswitchdelay") * 255.0);
+       WriteByte(MSG_ENTITY, self.count * 255.0); // g_balance_armor_blockpercent
+       WriteByte(MSG_ENTITY, self.cnt * 255.0); // g_balance_weaponswitchdelay
+       WriteCoord(MSG_ENTITY, self.bouncefactor); // g_balance_grenadelauncher_secondary_bouncefactor
+       WriteCoord(MSG_ENTITY, self.bouncestop); // g_balance_grenadelauncher_secondary_bouncestop
        return TRUE;
 }
 
+void ClientInit_CheckUpdate()
+{
+       self.nextthink = time;
+       if(self.count != cvar("g_balance_armor_blockpercent"))
+       {
+               self.count = cvar("g_balance_armor_blockpercent");
+               self.SendFlags |= 1;
+       }
+       if(self.cnt != cvar("g_balance_weaponswitchdelay"))
+       {
+               self.cnt = cvar("g_balance_weaponswitchdelay");
+               self.SendFlags |= 1;
+       }
+       if(self.bouncefactor != cvar("g_balance_grenadelauncher_secondary_bouncefactor"))
+       {
+               self.bouncefactor = cvar("g_balance_grenadelauncher_secondary_bouncefactor");
+               self.SendFlags |= 1;
+       }
+       if(self.bouncestop != cvar("g_balance_grenadelauncher_secondary_bouncestop"))
+       {
+               self.bouncestop = cvar("g_balance_grenadelauncher_secondary_bouncestop");
+               self.SendFlags |= 1;
+       }
+}
+
 void ClientInit_Spawn()
 {
-       Net_LinkEntity(spawn(), FALSE, 0, ClientInit_SendEntity);
+       entity o;
+       entity e;
+       e.classname = "clientinit";
+       e.think = ClientInit_CheckUpdate;
+       e.nextthink = time;
+       Net_LinkEntity(e, FALSE, 0, ClientInit_SendEntity);
+       o = self;
+       self = e;
+       ClientInit_CheckUpdate();
+       self = o;
 }
 
 /*
@@ -1748,10 +1784,31 @@ void UpdateTeamBubble()
        else self.colormod = '1 1 1';
 };*/
 
+.float oldcolormap;
 void respawn(void)
 {
+       if(self.modelindex != 0 && cvar("g_respawn_ghosts"))
+       {
+               self.solid = SOLID_NOT;
+               self.takedamage = DAMAGE_NO;
+               self.movetype = MOVETYPE_FLY;
+               self.velocity = '0 0 1' * cvar("g_respawn_ghosts_speed");
+               self.avelocity = randomvec() * cvar("g_respawn_ghosts_speed") * 3 - randomvec() * cvar("g_respawn_ghosts_speed") * 3;
+               self.effects |= EF_ADDITIVE;
+               self.oldcolormap = self.colormap;
+               self.colormap = 512;
+               pointparticles(particleeffectnum("respawn_ghost"), self.origin, '0 0 0', 1);
+               if(cvar("g_respawn_ghosts_maxtime"))
+                       SUB_SetFade (self, time + cvar("g_respawn_ghosts_maxtime") / 2 + random () * (cvar("g_respawn_ghosts_maxtime") - cvar("g_respawn_ghosts_maxtime") / 2), 1.5);
+       }
+
        CopyBody(1);
        self.effects |= EF_NODRAW; // prevent another CopyBody
+       if(self.oldcolormap)
+       {
+               self.colormap = self.oldcolormap;
+               self.oldcolormap = 0;
+       }
        PutClientInServer();
 }
 
index 52477cb..ff5fbaa 100644 (file)
@@ -14,6 +14,7 @@ float sv_airstopaccelerate;
 float sv_airstrafeaccelerate;
 float sv_maxairstrafespeed;
 float sv_aircontrol;
+float sv_aircontrol_power;
 float sv_warsowbunny_airforwardaccel;
 float sv_warsowbunny_accel;
 float sv_warsowbunny_topspeed;
@@ -416,10 +417,10 @@ void CPM_PM_Aircontrol(vector wishdir, float wishspeed)
        xyspeed = vlen(self.velocity); self.velocity = normalize(self.velocity);
 
        dot = self.velocity * wishdir;
-       k *= sv_aircontrol*dot*dot*frametime;
 
        if(dot > 0) // we can't change direction while slowing down
        {
+               k *= fabs(sv_aircontrol)*pow(dot, sv_aircontrol_power)*frametime;
                self.velocity = normalize(self.velocity * xyspeed + wishdir * k);
        }
 
index 8925f17..47b7ac0 100644 (file)
@@ -412,7 +412,7 @@ void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, float
        self.dmg_take = self.dmg_take + take;//max(take - 10, 0);
        self.dmg_inflictor = inflictor;
 
-       if (self.health <= -75 && self.modelindex != 0)
+       if (self.health <= -100 && self.modelindex != 0)
        {
                // don't use any animations as a gib
                self.frame = 0;
@@ -636,6 +636,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht
 
                frag_attacker = attacker;
                frag_inflictor = inflictor;
+               frag_target = self;
                MUTATOR_CALLHOOK(PlayerDies);
 
                if(self.flagcarried)
index e585b1e..d250d39 100644 (file)
@@ -4,8 +4,8 @@ float CSQCProjectile_SendEntity(entity to, float sf)
 {
        float ft, fr;
 
-       // note: flag 0x10 = no trail please
-       sf = sf & 0x1F;
+       // note: flag 0x08 = no trail please (teleport bit)
+       sf = sf & 0x0F;
 
        if(self.csqcprojectile_clientanimate)
                sf |= 0x80; // client animated, not interpolated
@@ -21,6 +21,9 @@ float CSQCProjectile_SendEntity(entity to, float sf)
                        sf |= 0x20;
        }
 
+       if(self.gravity != 0)
+               sf |= 0x10;
+
        WriteByte(MSG_ENTITY, ENT_CLIENT_PROJECTILE);
        WriteByte(MSG_ENTITY, sf);
 
@@ -35,7 +38,8 @@ float CSQCProjectile_SendEntity(entity to, float sf)
                        WriteCoord(MSG_ENTITY, self.velocity_x);
                        WriteCoord(MSG_ENTITY, self.velocity_y);
                        WriteCoord(MSG_ENTITY, self.velocity_z);
-                       WriteCoord(MSG_ENTITY, self.gravity);
+                       if(sf & 0x10)
+                               WriteCoord(MSG_ENTITY, self.gravity);
                }
 
                if(sf & 0x20)
@@ -85,7 +89,7 @@ void UpdateCSQCProjectile(entity e)
        if(e.SendEntity == CSQCProjectile_SendEntity)
        {
                // send new origin data
-               e.SendFlags |= 1;
+               e.SendFlags |= 0x01;
        }
 }
 
@@ -93,8 +97,10 @@ void UpdateCSQCProjectileAfterTeleport(entity e)
 {
        if(e.SendEntity == CSQCProjectile_SendEntity)
        {
-               // send new origin data and mark as teleported
-               e.SendFlags |= 0x11;
+               // send new origin data
+               e.SendFlags |= 0x01;
+               // mark as teleported
+               e.SendFlags |= 0x08;
        }
 }
 
index e5df457..ea6f0b0 100644 (file)
@@ -1306,6 +1306,17 @@ float(entity clent) clienttype = #455; // returns one of the CLIENTTYPE_* consta
 //implementation notes:
 //entity customization is done before per-client culling (visibility for instance) because the entity may be doing setorigin to display itself in different locations on different clients, may be altering its .modelindex, .effects and other fields important to culling, so customized entities increase cpu usage (non-customized entities can use all the early culling they want however, as they are not changing on a per client basis).
 
+//DP_SV_DISCARDABLEDEMO
+//idea: parasti
+//darkplaces implementation: parasti
+//field definitions:
+.float discardabledemo;
+//description:
+//when this field is set to a non-zero value on a player entity, a possibly recorded server-side demo for the player is discarded
+//Note that this extension only works if:
+//  auto demos are enabled (the cvar sv_autodemo_perclient is set)
+//  discarding demos is enabled (the cvar sv_autodemo_perclient_discardable is set)
+
 //DP_SV_DRAWONLYTOCLIENT
 //idea: LordHavoc
 //darkplaces implementation: LordHavoc
index 338204c..0c44648 100644 (file)
@@ -149,6 +149,7 @@ void GiveFrags (entity attacker, entity targ, float f)
        entity oldself;
        oldself = self;
        self = attacker;
+       frag_attacker = attacker;
        frag_target = targ;
        frag_score = f;
        if(MUTATOR_CALLHOOK(GiveFragsForKill))
index 5c65847..3f14bf3 100644 (file)
@@ -8,6 +8,7 @@ compile with -DTETRIS
 
 #ifdef TETRIS
 
+float autocvar_g_bastet;
 .vector tet_org;
 
 float tet_vs_current_id;
@@ -26,8 +27,11 @@ float tet_vs_current_timeout;
 
 var float tet_high_score = 0;
 
-float TET_LINES = 20;
+vector TET_START_PIECE_POS = '5 1 0';
+float TET_LINES = 22;
+float TET_DISPLAY_LINES = 20;
 float TET_WIDTH = 10;
+string TET_EMPTY_LINE = "0000000000"; // must match TET_WIDTH
 //character values
 float TET_BORDER = 139;
 float TET_BLOCK = 133;
@@ -46,10 +50,7 @@ string TET_PADDING_RIGHT = "\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0
 
 float PIECES = 7;
 
-.float line1, line2, line3, line4, line5, line6, line7,
-line8, line9, line10, line11, line12, line13, line14, line15,
-line16, line17, line18, line19, line20;
-
+float tet_line_buf;
 
 float  SVC_CENTERPRINTa                = 26;
 
@@ -70,146 +71,36 @@ Library Functions
 
 *********************************
 */
-void SetLine(float ln, float vl)
+void SetLine(float ln, string vl)
 {
-       if (ln == 1)
-               self.line1 = vl;
-       else if (ln == 2)
-               self.line2 = vl;
-       else if (ln == 3)
-               self.line3 = vl;
-       else if (ln == 4)
-               self.line4 = vl;
-       else if (ln == 5)
-               self.line5 = vl;
-       else if (ln == 6)
-               self.line6 = vl;
-       else if (ln == 7)
-               self.line7 = vl;
-       else if (ln == 8)
-               self.line8 = vl;
-       else if (ln == 9)
-               self.line9 = vl;
-       else if (ln == 10)
-               self.line10 = vl;
-       else if (ln == 11)
-               self.line11 = vl;
-       else if (ln == 12)
-               self.line12 = vl;
-       else if (ln == 13)
-               self.line13 = vl;
-       else if (ln == 14)
-               self.line14 = vl;
-       else if (ln == 15)
-               self.line15 = vl;
-       else if (ln == 16)
-               self.line16 = vl;
-       else if (ln == 17)
-               self.line17 = vl;
-       else if (ln == 18)
-               self.line18 = vl;
-       else if (ln == 19)
-               self.line19 = vl;
-       else if (ln == 20)
-               self.line20 = vl;
+       if(ln < 1 || ln > TET_LINES)
+               error("WTF");
+       bufstr_set(tet_line_buf, ln + TET_LINES * num_for_edict(self), vl);
 };
 
-float GetLine(float ln)
+string GetLine(float ln)
 {
-       if (ln == 1)
-               return self.line1;
-       else if (ln == 2)
-               return self.line2;
-       else if (ln == 3)
-               return self.line3;
-       else if (ln == 4)
-               return self.line4;
-       else if (ln == 5)
-               return self.line5;
-       else if (ln == 6)
-               return self.line6;
-       else if (ln == 7)
-               return self.line7;
-       else if (ln == 8)
-               return self.line8;
-       else if (ln == 9)
-               return self.line9;
-       else if (ln == 10)
-               return self.line10;
-       else if (ln == 11)
-               return self.line11;
-       else if (ln == 12)
-               return self.line12;
-       else if (ln == 13)
-               return self.line13;
-       else if (ln == 14)
-               return self.line14;
-       else if (ln == 15)
-               return self.line15;
-       else if (ln == 16)
-               return self.line16;
-       else if (ln == 17)
-               return self.line17;
-       else if (ln == 18)
-               return self.line18;
-       else if (ln == 19)
-               return self.line19;
-       else if (ln == 20)
-               return self.line20;
-       else
-               return 0;
+       if(ln < 1 || ln > TET_LINES)
+               error("WTF");
+       if(ln < 1 || ln > TET_LINES)
+               return TET_EMPTY_LINE;
+       return bufstr_get(tet_line_buf, ln + TET_LINES * num_for_edict(self));
 };
 
-float GetXBlock(float x, float dat)
-{
-       if (x == 1)
-               return dat & 3;
-       else if (x == 2)
-               return (dat & 12) / 4;
-       else if (x == 3)
-               return (dat & 48) / 16;
-       else if (x == 4)
-               return (dat & 192) / 64;
-       else if (x == 5)
-               return (dat & 768) / 256;
-       else if (x == 6)
-               return (dat & 3072) / 1024;
-       else if (x == 7)
-               return (dat & 12288) / 4096;
-       else if (x == 8)
-               return (dat & 49152) / 16384;
-       else if (x == 9)
-               return (dat & 196608) / 65536;
-       else if (x == 10)
-               return (dat & 786432) / 262144;
-       else
-               return 0;
+float GetXBlock(float x, string dat)
+{
+       if(x < 1 || x > TET_WIDTH)
+               error("WTF");
+       return stof(substring(dat, x-1, 1));
 };
 
-float SetXBlock(float x, float dat, float new)
-{
-       if (x == 1)
-               return (dat - (dat & 3)) | new;
-       else if (x == 2)
-               return (dat - (dat & 12)) | (new*4);
-       else if (x == 3)
-               return (dat - (dat & 48)) | (new*16);
-       else if (x == 4)
-               return (dat - (dat & 192)) | (new*64);
-       else if (x == 5)
-               return (dat - (dat & 768)) | (new*256);
-       else if (x == 6)
-               return (dat - (dat & 3072)) | (new*1024);
-       else if (x == 7)
-               return (dat - (dat & 12288)) | (new*4096);
-       else if (x == 8)
-               return (dat - (dat & 49152)) | (new*16384);
-       else if (x == 9)
-               return (dat - (dat & 196608)) | (new*65536);
-       else if (x == 10)
-               return (dat - (dat & 786432)) | (new*262144);
-       else
-               return dat;
+string SetXBlock(float x, string dat, float new)
+{
+       return strcat(
+               substring(dat, 0, x-1),
+               ftos(new),
+               substring(dat, x, -1)
+       );
 };
 
 
@@ -220,23 +111,41 @@ float GetSquare(float x, float y)
 
 void SetSquare(float x, float y, float val)
 {
-       float dat;
-
+       string dat;
        dat = GetLine(y);
-       dat  = SetXBlock(x, dat, val & 3);
+       dat  = SetXBlock(x, dat, val);
        SetLine(y, dat);
 };
 
+float PieceColor(float pc)
+{
+       if (pc == 1)
+               return 3; // O
+       else if (pc == 2)
+               return 4; // J
+       else if (pc == 3)
+               return 7; // L // we don't have orange, let's use white instead!
+       else if (pc == 4)
+               return 5; // I
+       else if (pc == 5)
+               return 1; // Z
+       else if (pc == 6)
+               return 2; // S
+       else if (pc == 7)
+               return 6; // T
+       else
+               return 0;
+}
 vector PieceShape(float pc)
 {
        if (pc == 1)
-               return '5 5 0'; // O
+               return '20 20 0'; // O
        else if (pc == 2)
                return '1 21 0'; // J
        else if (pc == 3)
-               return '21 1 0'; // L
+               return '16 21 0'; // L
        else if (pc == 4)
-               return '85 0 0'; // I
+               return '0 85 0'; // I
        else if (pc == 5)
                return '5 20 0'; // Z
        else if (pc == 6)
@@ -246,17 +155,35 @@ vector PieceShape(float pc)
        else
                return '0 0 0';
 }
-
+vector PieceSize(float pc)
+{
+       if (pc == 1)
+               return '2 2 0'; // O
+       else if (pc == 2)
+               return '3 2 0'; // J
+       else if (pc == 3)
+               return '3 2 0'; // L
+       else if (pc == 4)
+               return '4 1 0'; // I
+       else if (pc == 5)
+               return '3 2 0'; // Z
+       else if (pc == 6)
+               return '3 2 0'; // S
+       else if (pc == 7)
+               return '3 2 0'; // T
+       else
+               return '0 0 0';
+}
 vector PieceCenter(float pc)
 {
        if(pc == 1)
-               return '1.5 1.5 0'; // O
+               return '2.5 1.5 0'; // O
        else if (pc == 2)
                return '2 2 0'; // J
        else if (pc == 3)
-               return '2 1 0'; // L
+               return '2 2 0'; // L
        else if (pc == 4)
-               return '2.5 1.5 0'; // I
+               return '2.5 2.5 0'; // I
        else if (pc == 5)
                return '2 2 0'; // Z
        else if (pc == 6)
@@ -271,12 +198,10 @@ vector PieceCenter(float pc)
 float PieceMetric(float x, float y, float rot, float pc)
 {
        float t;
-       vector piece_dat;
-       float wid;
+       vector ce;
 
        // return bits of a piece
-       wid = piece_dat_z + 1;
-       piece_dat = PieceCenter(pc);
+       ce = PieceCenter(pc);
        if (rot == 1) // 90 degrees
        {
                // x+cx, y+cy -> -y+cx, x+cy
@@ -284,13 +209,13 @@ float PieceMetric(float x, float y, float rot, float pc)
                //   x = X-cx
                //   y = Y-cy
                t = y;
-               y = x - piece_dat_x + piece_dat_y;
-               x = -t + piece_dat_x + piece_dat_y;
+               y = x - ce_x + ce_y;
+               x = -t + ce_x + ce_y;
        }
        else if (rot == 2)//180
        {
-               x = 2 * piece_dat_x - x;
-               y = 2 * piece_dat_y - y;
+               x = 2 * ce_x - x;
+               y = 2 * ce_y - y;
        }
        else if (rot == 3) // 270
        {
@@ -299,19 +224,104 @@ float PieceMetric(float x, float y, float rot, float pc)
                //   x = X-cx
                //   y = Y-cy
                t = y;
-               y = -x + piece_dat_y + piece_dat_x;
-               x =  t - piece_dat_y + piece_dat_x;
+               y = -x + ce_y + ce_x;
+               x =  t - ce_y + ce_x;
        }
        if (x < 1 || y < 1 || x > 4 || y > 2)
                return 0;
-       piece_dat = PieceShape(pc);
+       ce = PieceShape(pc);
        if (y == 1)
-               return GetXBlock(x, piece_dat_x); // first row
+               return !!(ce_x & pow(4, x-1)); // first row
        else if (y == 2)
-               return GetXBlock(x, piece_dat_y); // second row
+               return !!(ce_y & pow(4, x-1)); // second row
        else
                return 0; // illegal parms
 };
+vector tet_piecemins;
+vector tet_piecemaxs;
+void PieceMinsMaxs(float rot, float pc)
+{
+       vector sz, ce;
+       float t;
+       vector v;
+
+       sz = PieceSize(pc);
+       ce = PieceCenter(pc);
+       // 1 = 2..2
+       // 2 = 2..3
+       // 3 = 1..3
+       // 4 = 1..4
+       tet_piecemins_x = floor(3.0 - sz_x * 0.5);
+       tet_piecemaxs_x = floor(2.0 + sz_x * 0.5);
+       if(sz_y == 1)
+       {
+               // special case for "I"
+               tet_piecemins_y = tet_piecemaxs_y = 2;
+       }
+       else
+       {
+               tet_piecemins_y = 1;
+               tet_piecemaxs_y = sz_y;
+       }
+       //print(sprintf("ce%v sz%v mi%v ma%v\n", ce, sz, tet_piecemins, tet_piecemaxs));
+       if (rot == 1) // 90 degrees
+       {
+               t = tet_piecemins_y;
+               tet_piecemins_y = -tet_piecemins_x + ce_y + ce_x;
+               tet_piecemins_x = t - ce_y + ce_x;
+               t = tet_piecemaxs_y;
+               tet_piecemaxs_y = -tet_piecemaxs_x + ce_y + ce_x;
+               tet_piecemaxs_x = t - ce_y + ce_x;
+               // swap mins_y, maxs_y
+               t = tet_piecemins_y;
+               tet_piecemins_y = tet_piecemaxs_y;
+               tet_piecemaxs_y = t;
+               // TODO OPTIMIZE
+       }
+       else if (rot == 2)//180
+       {
+               v = tet_piecemins;
+               tet_piecemins = 2 * ce - tet_piecemaxs;
+               tet_piecemaxs = 2 * ce - v;
+       }
+       else if (rot == 3) // 270
+       {
+               t = tet_piecemins_y;
+               tet_piecemins_y = tet_piecemins_x - ce_x + ce_y;
+               tet_piecemins_x = -t + ce_x + ce_y;
+               t = tet_piecemaxs_y;
+               tet_piecemaxs_y = tet_piecemaxs_x - ce_x + ce_y;
+               tet_piecemaxs_x = -t + ce_x + ce_y;
+               // swap mins_x, maxs_x
+               t = tet_piecemins_x;
+               tet_piecemins_x = tet_piecemaxs_x;
+               tet_piecemaxs_x = t;
+               // TODO OPTIMIZE
+       }
+#ifdef VERIFY
+       print(vtos(tet_piecemins), "-");
+       print(vtos(tet_piecemaxs), "\n");
+       if(tet_piecemins_x > tet_piecemaxs_x)
+               error("inconsistent mins/maxs");
+       if(tet_piecemins_y > tet_piecemaxs_y)
+               error("inconsistent mins/maxs");
+       float i, j;
+       vector realmins, realmaxs;
+       realmins = '4 4 0';
+       realmaxs = '1 1 0';
+       for(i = 1; i <= 4; ++i)
+               for(j = 1; j <= 4; ++j)
+                       if(PieceMetric(i, j, rot, pc))
+                       {
+                               realmins_x = min(realmins_x, i);
+                               realmins_y = min(realmins_y, j);
+                               realmaxs_x = max(realmaxs_x, i);
+                               realmaxs_y = max(realmaxs_y, j);
+                       }
+       if(realmins != tet_piecemins || realmaxs != tet_piecemaxs)
+               error(sprintf("incorrect mins/maxs: %v %v in %d rot %d mins %v maxs %v\n", realmins, realmaxs, rot, pc, tet_piecemins, tet_piecemaxs));
+#endif
+}
 /*
 *********************************
 
@@ -361,11 +371,11 @@ void DrawLine(float ln)
 
        for (x = 1; x <= TET_WIDTH; x = x + 1)
        {
-               d = GetSquare(x, ln);
+               d = GetSquare(x, ln + TET_LINES - TET_DISPLAY_LINES);
                if (d)
                {
                        WriteChar(MSG_ONE, '^');
-                       WriteChar(MSG_ONE, d * d - 2 * d + 50); // 1, 2, 5
+                       WriteChar(MSG_ONE, d + '0');
                        WriteChar(MSG_ONE, TET_BLOCK);
                }
                else
@@ -380,7 +390,7 @@ void DrawPiece(float pc, float ln)
 {
        float x, d, piece_ln, pcolor;
        vector piece_dat;
-       pcolor = mod(pc, 3) + 1;
+       pcolor = PieceColor(pc);
        WriteChar(MSG_ONE, TET_SPACE); // pad to 6
 
        piece_dat = PieceShape(pc);
@@ -390,11 +400,10 @@ void DrawPiece(float pc, float ln)
                piece_ln = piece_dat_y;
        for (x = 1; x <= 4; x = x + 1)
        {
-               d = GetXBlock(x, piece_ln) * pcolor;
-               if (d)
+               if (piece_ln & pow(4, x-1))
                {
                        WriteChar(MSG_ONE, '^');
-                       WriteChar(MSG_ONE, d * d - 2 * d + 50); // 1, 2, 5
+                       WriteChar(MSG_ONE, pcolor + '0');
                        WriteChar(MSG_ONE, TET_BLOCK);
                }
                else
@@ -408,13 +417,18 @@ void Draw_Tetris()
        entity head;
        msg_entity = self;
        WriteChar(MSG_ONE, SVC_CENTERPRINTa);
+       if(autocvar_g_bastet)
+       {
+               WriteTetrisString("NEVER GONNA GIVE YOU");
+               WriteChar(MSG_ONE, 10);
+       }
        // decoration
        for (i = 1; i <= (TET_WIDTH + 2); i = i + 1)
                WriteChar(MSG_ONE, TET_BORDER);
        WriteTetrisString("      ");
        WriteUnterminatedString(MSG_ONE, TET_PADDING_RIGHT);
        WriteChar(MSG_ONE, 10);
-       for (i = 1; i <= TET_LINES; i = i + 1)
+       for (i = 1; i <= TET_DISPLAY_LINES; i = i + 1)
        {
                if(self.tetris_on == 2)
                        WriteTetrisString(" GAME  OVER ");
@@ -423,7 +437,7 @@ void Draw_Tetris()
                else
                        DrawLine(i);
                if (i == 1)
-                       WriteTetrisString(" NEXT ");
+                       WriteTetrisString(autocvar_g_bastet ? " THAT " : " NEXT ");
                else if (i == 3)
                        DrawPiece(self.next_piece, 1);
                else if (i == 4)
@@ -501,8 +515,11 @@ void ResetTetris()
 {
        float i;
 
+       if(!tet_line_buf)
+               tet_line_buf = buf_create();
+
        for (i=1; i<=TET_LINES; i = i + 1)
-               SetLine(i, 0);
+               SetLine(i, TET_EMPTY_LINE);
        self.piece_pos = '0 0 0';
        self.piece_type = 0;
        self.next_piece = self.tet_lines = self.tet_score = 0;
@@ -518,6 +535,227 @@ void Tet_GameExit()
        self.movetype = MOVETYPE_WALK;
 };
 
+void PrintField()
+{
+       string l;
+       float r, c;
+       for(r = 1; r <= TET_LINES; ++r)
+       {
+               l = GetLine(r);
+               print(">");
+               for(c = 1; c <= TET_WIDTH; ++c)
+               {
+                       print(ftos(GetXBlock(c, l)));
+               }
+               print("\n");
+       }
+}
+
+float BastetEvaluate()
+{
+       float height;
+       string l;
+       float lines;
+       float score, score_save;
+       string occupied, occupied_save;
+       float occupied_count, occupied_count_save;
+       float i, j, line;
+
+       score = 0;
+
+       // adds a bonus for each free dot above the occupied blocks profile
+       occupied = TET_EMPTY_LINE;
+       occupied_count = TET_WIDTH;
+       height = 0;
+       lines = 0;
+       for(i = 1; i <= TET_LINES; ++i)
+       {
+               l = GetLine(i);
+               if(l == TET_EMPTY_LINE)
+               {
+                       height = i;
+                       continue;
+               }
+               line = 1;
+               occupied_save = occupied;
+               occupied_count_save = occupied_count;
+               score_save = score;
+               for(j = 1; j <= TET_WIDTH; ++j)
+               {
+                       if(GetXBlock(j, l))
+                       {
+                               if(!GetXBlock(j, occupied))
+                               {
+                                       occupied = SetXBlock(j, occupied, 1);
+                                       --occupied_count;
+                               }
+                       }
+                       else
+                               line = 0;
+                       score += 10000 * occupied_count;
+               }
+               if(line)
+               {
+                       occupied = occupied_save;
+                       occupied_count = occupied_count_save;
+                       score = score_save + 100000000 + 10000 * TET_WIDTH + 1000;
+                       ++lines;
+               }
+       }
+
+       score += 1000 * height;
+
+       return score;
+}
+
+float CheckMetrics(float piece, float orgx, float orgy, float rot);
+void ClearPiece(float piece, float orgx, float orgy, float rot);
+void CementPiece(float piece, float orgx, float orgy, float rot);
+float bastet_profile_evaluate_time;
+float bastet_profile_checkmetrics_time;
+float BastetSearch(float buf, float pc, float x, float y, float rot, float move_bias)
+// returns best score, or -1 if position is impossible
+{
+       string r;
+       float b;
+       float s, sm;
+       float t1, t2;
+
+       if(move_bias < 0)
+               return 0; // DO NOT WANT
+
+       if(x < 1 || x > TET_WIDTH || y < 1 || y > TET_LINES)
+               return -1; // impossible
+       if(rot < 0) rot = 3;
+       if(rot > 3) rot = 0;
+
+       // did we already try?
+       b = x + (TET_WIDTH+2) * (y + (TET_LINES+2) * rot);
+       r = bufstr_get(buf, b);
+       if(r != "") // already tried
+               return stof(r);
+
+       bufstr_set(buf, b, "0"); // in case we READ that, not that bad - we already got that value in another branch then anyway
+
+
+
+       t1 = gettime(GETTIME_HIRES);
+       if(CheckMetrics(pc, x, y, rot))
+       {
+               t2 = gettime(GETTIME_HIRES);
+               bastet_profile_checkmetrics_time += (t2 - t1);
+               // try all moves
+               sm = 1;
+               s = BastetSearch(buf, pc, x-1, y, rot, move_bias - 1); if(s > sm) sm = s;
+               s = BastetSearch(buf, pc, x+1, y, rot, move_bias - 1); if(s > sm) sm = s;
+               s = BastetSearch(buf, pc, x, y, rot+1, move_bias - 1); if(s > sm) sm = s;
+               s = BastetSearch(buf, pc, x, y, rot-1, move_bias - 1); if(s > sm) sm = s;
+
+               s = BastetSearch(buf, pc, x, y+1, rot, move_bias + 2); if(s > sm) sm = s;
+               if(s < 0)
+               {
+                       //print(sprintf("MAY CEMENT AT: %d %d %d\n", x, y, rot));
+                       // moving down did not work - that means we can fixate the block here
+                       t1 = gettime(GETTIME_HIRES);
+
+                       CementPiece(pc, x, y, rot);
+                       s = BastetEvaluate();
+                       ClearPiece(pc, x, y, rot);
+
+                       t2 = gettime(GETTIME_HIRES);
+                       bastet_profile_evaluate_time += (t2 - t1);
+
+                       if(s > sm) sm = s;
+               }
+       }
+       else
+       {
+               t2 = gettime(GETTIME_HIRES);
+               bastet_profile_checkmetrics_time += (t2 - t1);
+               sm = -1; // impassible
+       }
+
+       bufstr_set(buf, b, ftos(sm));
+
+       return sm;
+}
+
+float bastet_piece[7];
+float bastet_score[7];
+float bastet_piecetime[7];
+float BastetPiece()
+{
+       float b;
+
+       bastet_profile_evaluate_time = 0;
+       bastet_profile_checkmetrics_time = 0;
+       var float t1 = gettime(GETTIME_HIRES);
+
+       b = buf_create(); bastet_piece[0] = 1; bastet_score[0] = BastetSearch(b, 1, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[0]; buf_del(b);
+       b = buf_create(); bastet_piece[1] = 2; bastet_score[1] = BastetSearch(b, 2, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[1]; buf_del(b);
+       b = buf_create(); bastet_piece[2] = 3; bastet_score[2] = BastetSearch(b, 3, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[2]; buf_del(b);
+       b = buf_create(); bastet_piece[3] = 4; bastet_score[3] = BastetSearch(b, 4, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[3]; buf_del(b);
+       b = buf_create(); bastet_piece[4] = 5; bastet_score[4] = BastetSearch(b, 5, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[4]; buf_del(b);
+       b = buf_create(); bastet_piece[5] = 6; bastet_score[5] = BastetSearch(b, 6, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[5]; buf_del(b);
+       b = buf_create(); bastet_piece[6] = 7; bastet_score[6] = BastetSearch(b, 7, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[6]; buf_del(b);
+
+       var float t2 = gettime(GETTIME_HIRES);
+       dprint(sprintf("Time taken: %.6f seconds (of this, ev = %.2f%%, cm = %.2f%%)\n", t2 - t1, 100 * bastet_profile_evaluate_time / (t2 - t1), 100 * bastet_profile_checkmetrics_time / (t2 - t1)));
+
+       // sort
+       float i, j, k, p, s;
+
+/*
+       for(i = 0; i < 7; ++i)
+       {
+               print(sprintf("piece %s value = %d\n", substring("OJLIZST", bastet_piece[i]-1, 1), bastet_score[i]));
+       }
+*/
+
+       for(i = 0; i < 7; ++i)
+       {
+               k = i;
+               p = bastet_piece[k];
+               s = bastet_score[k];
+               for(j = i + 1; j < 7; ++j)
+               {
+                       if(bastet_score[j] < s)
+                       {
+                               k = j;
+                               s = bastet_score[k];
+                               p = bastet_piece[k];
+                       }
+               }
+               if(k != i)
+               {
+                       bastet_score[k] = bastet_score[i];
+                       bastet_piece[k] = bastet_piece[i];
+                       bastet_score[i] = s;
+                       bastet_piece[i] = p;
+               }
+       }
+
+       b = random();
+       if(b < 0.8)
+               j = 0;
+       else if(b < 0.92)
+               j = 1;
+       else if(b < 0.98)
+               j = 2;
+       else
+               j = 3;
+       j = bastet_piece[j];
+
+       for(i = 0; i < 7; ++i)
+       {
+               if(i == j-1)
+                       bastet_piecetime[i] = 0.2 * bastet_piecetime[i];
+               else
+                       bastet_piecetime[i] = 1.8 * bastet_piecetime[i] + 1000;
+       }
+
+       return j;
+}
 
 
 /*
@@ -534,6 +772,7 @@ float RandomPiece()
        float p, q;
        float b;
        float seen;
+
        if(self.tet_piece_bucket > 1)
        {
                p = mod(self.tet_piece_bucket, 7);
@@ -575,37 +814,37 @@ float CheckMetrics(float piece, float orgx, float orgy, float rot) /*FIXDECL*/
        // check to see if the piece, if moved to the locations will overlap
 
        float x, y;
+       string l;
        // why did I start counting from 1, damnit
        orgx = orgx - 1;
        orgy = orgy - 1;
 
-       for (y = 0; y < 5; y = y + 1)
+       PieceMinsMaxs(rot, piece);
+       if (tet_piecemins_x+orgx<1 || tet_piecemaxs_x+orgx > TET_WIDTH || tet_piecemins_y+orgy<1 || tet_piecemaxs_y+orgy> TET_LINES)
+               return FALSE; // ouside the level
+       for (y = tet_piecemins_y; y <= tet_piecemaxs_y; y = y + 1)
        {
-               for (x = 0; x < 5; x = x + 1)
-               {
+               l = GetLine(y + orgy);
+               if(l != TET_EMPTY_LINE)
+               for (x = tet_piecemins_x; x <= tet_piecemaxs_x; x = x + 1)
                        if (PieceMetric(x, y, rot, piece))
-                       {
-                               if (GetSquare(x + orgx, y + orgy))
+                               if (GetXBlock(x + orgx, l))
                                        return FALSE; // uhoh, gonna hit something.
-                               if (x+orgx<1 || x+orgx > TET_WIDTH || y+orgy<1 || y+orgy> TET_LINES)
-                                       return FALSE; // ouside the level
-                       }
-               }
        }
        return TRUE;
 }
 
 void ClearPiece(float piece, float orgx, float orgy, float rot) /*FIXDECL*/
 {
-
        float x, y;
        // why did I start counting from 1, damnit
        orgx = orgx - 1;
        orgy = orgy - 1;
 
-       for (y = 0; y < 5; y = y + 1)
+       PieceMinsMaxs(rot, piece);
+       for (y = tet_piecemins_y; y <= tet_piecemaxs_y; y = y + 1)
        {
-               for (x = 0; x < 5; x = x + 1)
+               for (x = tet_piecemins_x; x <= tet_piecemaxs_x; x = x + 1)
                {
                        if (PieceMetric(x, y, rot, piece))
                        {
@@ -622,11 +861,12 @@ void CementPiece(float piece, float orgx, float orgy, float rot) /*FIXDECL*/
        orgx = orgx - 1;
        orgy = orgy - 1;
 
-       pcolor = mod(piece, 3) + 1;
+       pcolor = PieceColor(piece);
 
-       for (y = 0; y < 5; y = y + 1)
+       PieceMinsMaxs(rot, piece);
+       for (y = tet_piecemins_y; y <= tet_piecemaxs_y; y = y + 1)
        {
-               for (x = 0; x < 5; x = x + 1)
+               for (x = tet_piecemins_x; x <= tet_piecemaxs_x; x = x + 1)
                {
                        if (PieceMetric(x, y, rot, piece))
                        {
@@ -650,18 +890,24 @@ void AddLines(float n)
 
 void CompletedLines()
 {
-       float y, cleared, ln, added, pos, i;
+       float y, cleared, added, pos, i;
+       string ln;
 
        cleared = 0;
        y = TET_LINES;
-       while(y >= 1)
+       for(;;)
        {
                ln = GetLine(y);
-               if (((ln & LINE_LOW) | ((ln & LINE_HIGH)/2)) == LINE_LOW)
+               if(strstrofs(ln, "0", 0) < 0)
                        cleared = cleared + 1;
                else
                        y = y - 1;
-               ln = GetLine(y - cleared);
+               if(y < 1)
+                       break;
+               if(y - cleared < 1)
+                       ln = TET_EMPTY_LINE;
+               else
+                       ln = GetLine(y - cleared);
                SetLine(y, ln);
        }
 
@@ -685,17 +931,17 @@ void CompletedLines()
                for(y = max(1, TET_LINES - added + 1); y <= TET_LINES; ++y)
                {
                        pos = floor(random() * TET_WIDTH);
-                       ln = 0;
+                       ln = TET_EMPTY_LINE;
                        for(i = 1; i <= TET_WIDTH; ++i)
                                if(i != pos)
-                                       ln = SetXBlock(i, ln, floor(random() * 3 + 1));
+                                       ln = SetXBlock(i, ln, floor(random() * 7 + 1));
                        SetLine(y, ln);
                }
        }
 
        self.tet_highest_line = 0;
        for(y = 1; y <= TET_LINES; ++y)
-               if(GetLine(y) != 0)
+               if(GetLine(y) != TET_EMPTY_LINE)
                {
                        self.tet_highest_line = TET_LINES + 1 - y;
                        break;
@@ -725,12 +971,21 @@ void HandleGame(float keyss)
 
        if (self.piece_type == 0)
        {
-               self.piece_pos = '5 1 0'; // that's about middle top, we count from 1 ARGH
-               if (self.next_piece)
-                       self.piece_type = self.next_piece;
+               self.piece_pos = TET_START_PIECE_POS; // that's about middle top, we count from 1 ARGH
+
+               if(autocvar_g_bastet)
+               {
+                       self.piece_type = BastetPiece();
+                       self.next_piece = bastet_piece[6];
+               }
                else
-                       self.piece_type = RandomPiece();
-               self.next_piece =  RandomPiece();
+               {
+                       if (self.next_piece)
+                               self.piece_type = self.next_piece;
+                       else
+                               self.piece_type = RandomPiece();
+                       self.next_piece =  RandomPiece();
+               }
                keyss = 0; // no movement first frame
                self.tet_autodown = time + 0.2;
                brand_new = 1;
index 7868844..c31352e 100644 (file)
@@ -533,7 +533,112 @@ void spawnfunc_trigger_heal()
 //
 //////////////////////////////////////////////////////////////
 
+.entity trigger_gravity_check;
+void trigger_gravity_remove(entity own)
+{
+       if(own.trigger_gravity_check.owner == own)
+       {
+               UpdateCSQCProjectile(own);
+               own.gravity = own.trigger_gravity_check.gravity;
+               remove(own.trigger_gravity_check);
+       }
+       else
+               backtrace("Removing a trigger_gravity_check with no valid owner");
+       own.trigger_gravity_check = world;
+}
+void trigger_gravity_check_think()
+{
+       // This spawns when a player enters the gravity zone and checks if he left.
+       // Each frame, self.count is set to 2 by trigger_gravity_touch() and decreased by 1 here.
+       // It the player has left the gravity trigger, this will be allowed to reach 0 and indicate that.
+       if(self.count <= 0)
+       {
+               if(self.owner.trigger_gravity_check == self)
+                       trigger_gravity_remove(self.owner);
+               else
+                       remove(self);
+               return;
+       }
+       else
+       {
+               self.count -= 1;
+               self.nextthink = time;
+       }
+};
+
+void trigger_gravity_use()
+{
+       self.state = !self.state;
+};
+
+void trigger_gravity_touch()
+{
+       float g;
+
+       if(self.state != TRUE)
+               return;
+
+       EXACTTRIGGER_TOUCH;
+
+       g = self.gravity;
+
+       if not(self.spawnflags & 1)
+       {
+               if(other.trigger_gravity_check)
+               {
+                       if(self == other.trigger_gravity_check.enemy)
+                       {
+                               // same?
+                               other.trigger_gravity_check.count = 2; // gravity one more frame...
+                               return;
+                       }
+
+                       // compare prio
+                       if(self.cnt > other.trigger_gravity_check.enemy.cnt)
+                               trigger_gravity_remove(other);
+                       else
+                               return;
+               }
+               other.trigger_gravity_check = spawn();
+               other.trigger_gravity_check.enemy = self;
+               other.trigger_gravity_check.owner = other;
+               other.trigger_gravity_check.gravity = other.gravity;
+               other.trigger_gravity_check.think = trigger_gravity_check_think;
+               other.trigger_gravity_check.nextthink = time;
+               other.trigger_gravity_check.count = 2;
+               if(other.gravity)
+                       g *= other.gravity;
+       }
+
+       if (other.gravity != g)
+       {
+               other.gravity = g;
+               if(self.noise != "")
+                       sound (other, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NORM);
+               UpdateCSQCProjectile(self.owner);
+       }
+};
 
+void spawnfunc_trigger_gravity()
+{
+       if(self.gravity == 1)
+               return;
+
+       EXACTTRIGGER_INIT;
+       self.touch = trigger_gravity_touch;
+       if(self.noise != "")
+               precache_sound(self.noise);
+
+       self.state = TRUE;
+       IFTARGETED
+       {
+               self.use = trigger_gravity_use;
+               if(self.spawnflags & 2)
+                       self.state = FALSE;
+       }
+};
+
+//=============================================================================
 
 // TODO add a way to do looped sounds with sound(); then complete this entity
 .float volume, atten;
index 2287827..c815b08 100644 (file)
@@ -2697,6 +2697,7 @@ float RedirectionThink()
        return TRUE;
 }
 
+void TargetMusic_RestoreGame();
 void RestoreGame()
 {
        // Loaded from a save game
@@ -2710,6 +2711,8 @@ void RestoreGame()
        MapInfo_Enumerate();
        MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 1);
        WeaponStats_Init();
+
+       TargetMusic_RestoreGame();
 }
 
 void SV_Shutdown()
index 0d43660..9b7ad54 100644 (file)
-//#define MONSTES_ENABLED\r
-#ifdef MONSTES_ENABLED\r
-\r
-#define zombie_anim_attackleap         0\r
-#define zombie_anim_attackrun1         1\r
-#define zombie_anim_attackrun2         2\r
-#define zombie_anim_attackrun3         3\r
-#define zombie_anim_attackstanding1    4\r
-#define zombie_anim_attackstanding2    5\r
-#define zombie_anim_attackstanding3    6\r
-#define zombie_anim_blockend           7\r
-#define zombie_anim_blockstart         8\r
-#define zombie_anim_deathback1         9\r
-#define zombie_anim_deathback2         10\r
-#define zombie_anim_deathback3         11\r
-#define zombie_anim_deathfront1        12\r
-#define zombie_anim_deathfront2        13\r
-#define zombie_anim_deathfront3        14\r
-#define zombie_anim_deathleft1         15\r
-#define zombie_anim_deathleft2         16\r
-#define zombie_anim_deathright1        17\r
-#define zombie_anim_deathright2        18\r
-#define zombie_anim_idle               19\r
-#define zombie_anim_painback1          20\r
-#define zombie_anim_painback2          21\r
-#define zombie_anim_painfront1         22\r
-#define zombie_anim_painfront2         23\r
-#define zombie_anim_runbackwards       24\r
-#define zombie_anim_runbackwardsleft   25\r
-#define zombie_anim_runbackwardsright  26\r
-#define zombie_anim_runforward         27\r
-#define zombie_anim_runforwardleft     28\r
-#define zombie_anim_runforwardright    29\r
-#define zombie_anim_spawn              30\r
-\r
-#define ZOMBIE_MIN                                      '-18 -18 -25'\r
-#define ZOMBIE_MAX                                      '18 18 47'\r
-\r
-#define ZV_IDLE     10\r
-\r
-#define ZV_PATH     100\r
-#define ZV_HUNT     200\r
-\r
-#define ZV_ATTACK_FIND  10\r
-#define ZV_ATTACK_RUN   20\r
-#define ZV_ATTACK_STAND 30\r
-\r
-#define ZV_PATH2 10000\r
-\r
-//.entity verbs_idle;\r
-//.entity verbs_attack;\r
-//.entity verbs_move;\r
-\r
-//.float  state_timeout;\r
-//.void() monster_state;\r
-#define MONSTERFLAG_NORESPAWN 2\r
-\r
-void zombie_spawn();\r
-\r
-float zombie_scoretarget(entity trg)\r
-{\r
-    float  tmp;\r
-    vector ang1;\r
-\r
-    if (trg.takedamage == DAMAGE_AIM)\r
-    if not (trg.flags & FL_NOTARGET)\r
-    if (trg.deadflag == DEAD_NO)\r
-    if (trg.team != self.team)\r
-    {\r
-        if((self.origin_z - trg.origin_z) < 128)\r
-        {\r
-            ang1 = normalize(self.origin - trg.origin);\r
-            tmp = vlen(ang1 - v_forward);\r
-            if(tmp > 1.5)\r
-            {\r
-                traceline(self.origin + '0 0 47',trg.origin + '0 0 32',MOVE_NORMAL,self);\r
-                if(trace_ent != trg)\r
-                    return 0;\r
-\r
-                return (cvar("g_monster_zombie_targetrange") - vlen(self.origin - trg.origin)) * tmp;\r
-            }\r
-            else if(self.enemy == trg)\r
-                return (cvar("g_monster_zombie_targetrange") - vlen(self.origin - trg.origin)) * tmp;\r
-        }\r
-    }\r
-\r
-    return 0;\r
-}\r
-\r
-void zombie_corpse_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)\r
-{\r
-    //dprint("zombie_corpse_damage\n");\r
-    Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker);\r
-\r
-    self.health -= damage;\r
-\r
-    if(self.health < 0)\r
-    {\r
-        Violence_GibSplash(self, 1, 1, attacker);\r
-        remove(self);\r
-    }\r
-}\r
-\r
-void zombie_die(vector dir)\r
-{\r
-    vector v;\r
-    float f;\r
-\r
-    entity dummy;\r
-\r
-    dummy = spawn();\r
-    setmodel(dummy,"models/monsters/zombie.dpm");\r
-    setorigin(dummy, self.origin);\r
-    dummy.velocity  = self.velocity;\r
-    dummy.movetype  = MOVETYPE_BOUNCE;\r
-    dummy.think     = SUB_Remove;\r
-    dummy.nextthink = time + 3;\r
-    dummy.health    = 50;\r
-    dummy.takedamage = DAMAGE_YES;\r
-    dummy.event_damage = zombie_corpse_damage;\r
-    dummy.solid      = SOLID_CORPSE;\r
-    setsize(dummy,self.mins,self.maxs);\r
-\r
-    SUB_SetFade(dummy,time + 5,2);\r
-\r
-\r
-    v = normalize(self.origin - dir);\r
-    f = vlen(v_forward - v) - 1;\r
-    if(f > 0.5)\r
-        dummy.frame = zombie_anim_deathfront1 + rint(random() * 2);\r
-    else if(f < 0.5)\r
-        dummy.frame = zombie_anim_deathback1 + rint(random() * 2);\r
-    else\r
-    {\r
-        f = vlen(v_right - v) - 1;\r
-        if(f > 0.5)\r
-            dummy.frame = zombie_anim_deathright1 + rint(random() * 2);\r
-        else if(f < 0.5)\r
-            dummy.frame = zombie_anim_deathleft1 + rint(random() * 2);\r
-    }\r
-\r
-\r
-    if(self.spawnflags & MONSTERFLAG_NORESPAWN)\r
-    {\r
-        self.think = SUB_Remove;\r
-        self.nextthink = time;\r
-        return;\r
-    }\r
-\r
-    setmodel(self,"");\r
-    self.solid          = SOLID_NOT;\r
-    self.takedamage     = DAMAGE_NO;\r
-    self.event_damage   = SUB_Null;\r
-    self.enemy          = world;\r
-    self.think          = zombie_spawn;\r
-    self.nextthink      = time + cvar("g_monster_zombie_respawntime");\r
-    self.pain_finished  = self.nextthink;\r
-}\r
-\r
-void zombie_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)\r
-{\r
-\r
-    vector v;\r
-    float f;\r
-\r
-    v = normalize(self.origin - hitloc);\r
-    f = vlen(v_forward - v) - 1;\r
-\r
-\r
-    self.health -= damage;\r
-    self.velocity = self.velocity + force;\r
-    if(self.health <= 0)\r
-    {\r
-        zombie_die(hitloc);\r
-        return;\r
-    }\r
-\r
-    Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker);\r
-\r
-       if (damage > 50)\r
-               Violence_GibSplash_At(hitloc, force * -0.1, 3, 1, self, attacker);\r
-       if (damage > 100)\r
-               Violence_GibSplash_At(hitloc, force * -0.2, 3, 1, self, attacker);\r
-\r
-    if (time > self.pain_finished)\r
-    {\r
-        if(f < 0.5)\r
-        {\r
-            if(random() < 0.5)\r
-                self.frame = zombie_anim_painback1;\r
-            else\r
-                self.frame = zombie_anim_painback2;\r
-        }\r
-        else\r
-        {\r
-            if(random() < 0.5)\r
-                self.frame = zombie_anim_painfront1;\r
-            else\r
-                self.frame = zombie_anim_painfront2;\r
-        }\r
-\r
-        self.pain_finished = time + 0.36;\r
-    }\r
-}\r
-\r
-.vector bvec;\r
-.float bvec_time;\r
-\r
-void zombie_move()\r
-{\r
-    vector real_angle;\r
-    float vz, tdiff, tspeed;\r
-\r
-    tdiff = time - self.zoomstate;\r
-    tspeed = tdiff * cvar("g_monster_zombie_turnspeed");\r
-    vz = self.velocity_z;\r
-    self.zoomstate = time;\r
-\r
-    if(self.bvec_time < time)\r
-    {\r
-        self.bvec_time = time + 0.2;\r
-        self.bvec = steerlib_beamsteer(steerlib_attract2(self.moveto,0.5,500,0.95),512,32,34,64);\r
-    }\r
-\r
-    if(self.enemy)\r
-        self.moveto = self.enemy.origin;\r
-    else\r
-        self.moveto = self.origin + v_forward;\r
-\r
-    self.steerto = normalize(steerlib_attract2(self.moveto,0.5,500,0.95) + self.bvec);\r
-\r
-    self.angles_y = safeangle(self.angles_y);\r
-    real_angle = vectoangles(self.steerto) - self.angles;\r
-    self.angles_y += bound(-10, real_angle_y, 10);\r
-\r
-    if(vlen(self.origin - self.moveto) > 64)\r
-    {\r
-        movelib_move_simple(v_forward ,cvar("g_monster_zombie_movespeed"),0.6);\r
-        if(time > self.pain_finished)\r
-            if(self.attack_finished_single < time)\r
-                self.frame = zombie_anim_runforward;\r
-    }\r
-    else\r
-    {\r
-        movelib_beak_simple(cvar("g_monster_zombie_stopspeed"));\r
-        if(time > self.pain_finished)\r
-            if(self.attack_finished_single < time)\r
-                self.frame = zombie_anim_idle;\r
-    }\r
-\r
-    self.velocity_z = vz;\r
-    self.steerto = self.origin;\r
-}\r
-\r
-float zombie_verb_idle_roam(float eval)\r
-{\r
-    switch (eval)\r
-    {\r
-    case VCM_EVAL:\r
-\r
-        if(self.enemy)\r
-            return VS_CALL_NO;\r
-\r
-        return verb.verb_static_value;\r
-\r
-    case VCM_DO:\r
-\r
-        self.moveto = v_forward * 128;\r
-        self.steerto = v_forward; //steerlib_beamsteer(v_forward,512,32,34,64);\r
-\r
-        return VS_CALL_YES_DOING;\r
-    }\r
-\r
-    return VS_CALL_YES_DONE;\r
-}\r
-\r
-float zombie_verb_idle_stand(float eval)\r
-{\r
-    switch (eval)\r
-    {\r
-    case VCM_EVAL:\r
-\r
-        if(self.enemy)\r
-            return VS_CALL_NO;\r
-\r
-        return verb.verb_static_value;\r
-\r
-    case VCM_DO:\r
-\r
-        self.moveto   = self.origin;\r
-        self.frame    = zombie_anim_idle;\r
-        self.velocity = '0 0 0';\r
-\r
-        return VS_CALL_YES_DOING;\r
-    }\r
-\r
-    return VS_CALL_YES_DONE;\r
-}\r
-\r
-float zombie_verb_idle(float eval)\r
-{\r
-    switch (eval)\r
-    {\r
-    case VCM_EVAL:\r
-\r
-        if(self.enemy)\r
-            return VS_CALL_NO;\r
-\r
-        return verb.verb_static_value;\r
-\r
-    case VCM_DO:\r
-        float t;\r
-\r
-        t = cvar("g_monster_zombie_idle_timer_max") -  cvar("g_monster_zombie_idle_timer_min");\r
-        t = cvar("g_monster_zombie_idle_timer_min") + (random() * t);\r
-\r
-        if(random() < 0.5)\r
-            verbstack_push(self.verbs_idle, zombie_verb_idle_roam,  ZV_IDLE + 1, t, self);\r
-        else\r
-            verbstack_push(self.verbs_idle, zombie_verb_idle_stand, ZV_IDLE + 1, 0.1, self);\r
-\r
-        return VS_CALL_YES_DOING;\r
-    }\r
-\r
-    return VS_CALL_YES_DONE;\r
-}\r
-\r
-float zombie_verb_attack_findtarget(float eval)\r
-{\r
-    switch (eval)\r
-    {\r
-    case VCM_EVAL:\r
-        if(self.enemy)\r
-            return VS_CALL_NO;\r
-\r
-        return verb.verb_static_value;\r
-\r
-    case VCM_DO:\r
-\r
-        entity trg, best_trg;\r
-        float trg_score, best_trg_score;\r
-\r
-        trg = findradius(self.origin,cvar("g_monster_zombie_targetrange"));\r
-        while(trg)\r
-        {\r
-            trg_score = zombie_scoretarget(trg);\r
-            if(trg_score > best_trg_score)\r
-            {\r
-                best_trg = trg;\r
-                best_trg_score = trg_score;\r
-            }\r
-\r
-            trg = trg.chain;\r
-        }\r
-\r
-        if(best_trg)\r
-        {\r
-            self.enemy = best_trg;\r
-            dprint("Selected: ",best_trg.netname, " as target.\n");\r
-        }\r
-\r
-        return VS_CALL_YES_DOING;\r
-    }\r
-\r
-    return VS_CALL_YES_DONE;\r
-}\r
-\r
-void zombie_runattack_damage()\r
-{\r
-    entity oldself;\r
-    oldself = self;\r
-    self = self.owner;\r
-\r
-    if(vlen(self.origin - self.enemy.origin) > cvar("g_monster_zombie_attack_run_hitrange"))\r
-        return;\r
-\r
-    if(vlen(normalize(self.origin - self.enemy.origin) - v_forward) < 1.6)\r
-        return;\r
-\r
-    Damage(self.enemy, self, self, cvar("g_monster_zombie_attack_run_damage"), DEATH_TURRET, self.enemy.origin, normalize(self.enemy.origin - self.origin)  * cvar("g_monster_zombie_attack_run_force"));\r
-\r
-    self = oldself;\r
-    self.think = SUB_Remove;\r
-    self.nextthink = time;\r
-}\r
-\r
-float zombie_verb_attack_run(float eval)\r
-{\r
-    switch (eval)\r
-    {\r
-    case VCM_EVAL:\r
-        if not (self.enemy)\r
-            return VS_CALL_NO;\r
-\r
-        if(self.attack_finished_single > time)\r
-            return VS_CALL_NO;\r
-\r
-        if(vlen(self.origin - self.enemy.origin) > cvar("g_monster_zombie_attack_run_range"))\r
-            return VS_CALL_NO;\r
-\r
-        if(vlen(normalize(self.origin - self.enemy.origin) - v_forward) < 1.6)\r
-            return VS_CALL_NO;\r
-\r
-        return verb.verb_static_value;\r
-\r
-    case VCM_DO:\r
-        entity pain;\r
-        pain = spawn();\r
-        pain.owner = self;\r
-        pain.think = zombie_runattack_damage;\r
-        pain.nextthink = time + cvar("g_monster_zombie_attack_run_delay");\r
-\r
-        self.attack_finished_single = time + 0.7;\r
-        self.frame = zombie_anim_attackrun1 + rint(random() * 2);\r
-\r
-        return VS_CALL_YES_DOING;\r
-    }\r
-\r
-    return VS_CALL_YES_DONE;\r
-}\r
-\r
-void zombie_standattack_damage()\r
-{\r
-    //entity oldself;\r
-    //oldself = self;\r
-    //self = self.owner;\r
-\r
-    setorigin(self,self.owner.origin + v_forward * 32);\r
-    RadiusDamage(self, self.owner, cvar("g_monster_zombie_attack_stand_damage"),cvar("g_monster_zombie_attack_stand_damage"),16,self, cvar("g_monster_zombie_attack_stand_force"),DEATH_TURRET,world);\r
-    //float RadiusDamage (entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity ignore, float forceintensity, float deathtype, entity directhitentity)\r
-\r
-\r
-    //self = oldself;\r
-    self.think = SUB_Remove;\r
-    self.nextthink = time;\r
-}\r
-\r
-float zombie_verb_attack_stand(float eval)\r
-{\r
-    switch (eval)\r
-    {\r
-    case VCM_EVAL:\r
-        if not (self.enemy)\r
-            return VS_CALL_NO;\r
-\r
-        if(self.attack_finished_single > time)\r
-            return VS_CALL_NO;\r
-\r
-        if(vlen(self.origin - self.enemy.origin) > cvar("g_monster_zombie_attack_stand_range"))\r
-            return VS_CALL_NO;\r
-\r
-        if(vlen(normalize(self.origin - self.enemy.origin) - v_forward) < 1.8)\r
-            return VS_CALL_NO;\r
-\r
-        return verb.verb_static_value;\r
-\r
-    case VCM_DO:\r
-        entity pain;\r
-        pain = spawn();\r
-        pain.owner = self;\r
-        pain.think = zombie_runattack_damage;\r
-        pain.nextthink = time + cvar("g_monster_zombie_attack_stand_delay");\r
-\r
-        self.attack_finished_single = time + 0.7;\r
-        self.frame = zombie_anim_attackstanding1 + rint(random() * 1);\r
-        dprint("frame:",ftos(self.frame),"\n");\r
-\r
-        return VS_CALL_YES_DOING;\r
-    }\r
-\r
-    return VS_CALL_YES_DONE;\r
-}\r
-\r
-void zombie_think()\r
-{\r
-    self.angles_x *= -1;\r
-    makevectors(self.angles);\r
-    self.angles_x *= -1;\r
-\r
-    if (zombie_scoretarget(self.enemy) == 0)\r
-        self.enemy = world;\r
-\r
-    verbstack_pop(self.verbs_attack);\r
-    //verbstack_pop(self.verbs_move);\r
-\r
-    if not (self.enemy)\r
-        verbstack_pop(self.verbs_idle);\r
-\r
-    zombie_move();\r
-\r
-    if(self.enemy)\r
-        self.nextthink = time;\r
-    else\r
-        self.nextthink = time + 0.2;\r
-}\r
-\r
-void zombie_spawn()\r
-{\r
-    setmodel(self,"models/monsters/zombie.dpm");\r
-\r
-    self.solid          = SOLID_BBOX;\r
-    self.takedamage     = DAMAGE_AIM;\r
-    self.event_damage   = zombie_damage;\r
-    self.enemy          = world;\r
-    self.frame          = zombie_anim_spawn;\r
-    self.think          = zombie_think;\r
-    self.nextthink      = time + 2.1;\r
-    self.pain_finished  = self.nextthink;\r
-    self.movetype       = MOVETYPE_WALK;\r
-    self.health         = cvar("g_monster_zombie_health");\r
-    self.velocity       = '0 0 0';\r
-    self.angles         = self.pos2;\r
-    self.moveto         = self.origin;\r
-    self.flags          = FL_MONSTER;\r
-\r
-    setorigin(self,self.pos1);\r
-    setsize(self,ZOMBIE_MIN,ZOMBIE_MAX);\r
-}\r
-\r
-\r
-void spawnfunc_monster_zombie()\r
-{\r
-    if not(cvar("g_monsters"))\r
-    {\r
-        remove(self);\r
-        return;\r
-    }\r
-\r
-    precache_model("models/monsters/zombie.dpm");\r
-\r
-\r
-    self.verbs_idle   = spawn();\r
-    self.verbs_attack = spawn();\r
-\r
-    self.verbs_idle.owner = self;\r
-    self.verbs_attack.owner = self;\r
-\r
-    self.think      = zombie_spawn;\r
-    self.nextthink  = time + 2;\r
-\r
-    traceline(self.origin + '0 0 10', self.origin - '0 0 32', MOVE_WORLDONLY, self);\r
-\r
-    self.pos1 = trace_endpos;\r
-    self.pos2 = self.angles;\r
-    self.team = MAX_SHOT_DISTANCE -1;\r
-\r
-    verbstack_push(self.verbs_idle, zombie_verb_idle, ZV_IDLE,0 , self);\r
-\r
-    verbstack_push(self.verbs_attack, zombie_verb_attack_findtarget, ZV_ATTACK_FIND,0 , self);\r
-    verbstack_push(self.verbs_attack, zombie_verb_attack_run, ZV_ATTACK_RUN,0 , self);\r
-    verbstack_push(self.verbs_attack, zombie_verb_attack_stand, ZV_ATTACK_STAND,0 , self);\r
-\r
-}\r
-\r
-#endif // MONSTES_ENABLED\r
+//#define MONSTES_ENABLED
+#ifdef MONSTES_ENABLED
+
+#define zombie_anim_attackleap         0
+#define zombie_anim_attackrun1         1
+#define zombie_anim_attackrun2         2
+#define zombie_anim_attackrun3         3
+#define zombie_anim_attackstanding1    4
+#define zombie_anim_attackstanding2    5
+#define zombie_anim_attackstanding3    6
+#define zombie_anim_blockend           7
+#define zombie_anim_blockstart         8
+#define zombie_anim_deathback1         9
+#define zombie_anim_deathback2         10
+#define zombie_anim_deathback3         11
+#define zombie_anim_deathfront1        12
+#define zombie_anim_deathfront2        13
+#define zombie_anim_deathfront3        14
+#define zombie_anim_deathleft1         15
+#define zombie_anim_deathleft2         16
+#define zombie_anim_deathright1        17
+#define zombie_anim_deathright2        18
+#define zombie_anim_idle               19
+#define zombie_anim_painback1          20
+#define zombie_anim_painback2          21
+#define zombie_anim_painfront1         22
+#define zombie_anim_painfront2         23
+#define zombie_anim_runbackwards       24
+#define zombie_anim_runbackwardsleft   25
+#define zombie_anim_runbackwardsright  26
+#define zombie_anim_runforward         27
+#define zombie_anim_runforwardleft     28
+#define zombie_anim_runforwardright    29
+#define zombie_anim_spawn              30
+
+#define ZOMBIE_MIN                                      '-18 -18 -25'
+#define ZOMBIE_MAX                                      '18 18 47'
+
+#define ZV_IDLE     10
+
+#define ZV_PATH     100
+#define ZV_HUNT     200
+
+#define ZV_ATTACK_FIND  10
+#define ZV_ATTACK_RUN   20
+#define ZV_ATTACK_STAND 30
+
+#define ZV_PATH2 10000
+
+//.entity verbs_idle;
+//.entity verbs_attack;
+//.entity verbs_move;
+
+//.float  state_timeout;
+//.void() monster_state;
+#define MONSTERFLAG_NORESPAWN 2
+
+void zombie_spawn();
+
+float zombie_scoretarget(entity trg)
+{
+    float  tmp;
+    vector ang1;
+
+    if (trg.takedamage == DAMAGE_AIM)
+    if not (trg.flags & FL_NOTARGET)
+    if (trg.deadflag == DEAD_NO)
+    if (trg.team != self.team)
+    {
+        if((self.origin_z - trg.origin_z) < 128)
+        {
+            ang1 = normalize(self.origin - trg.origin);
+            tmp = vlen(ang1 - v_forward);
+            if(tmp > 1.5)
+            {
+                traceline(self.origin + '0 0 47',trg.origin + '0 0 32',MOVE_NORMAL,self);
+                if(trace_ent != trg)
+                    return 0;
+
+                return (cvar("g_monster_zombie_targetrange") - vlen(self.origin - trg.origin)) * tmp;
+            }
+            else if(self.enemy == trg)
+                return (cvar("g_monster_zombie_targetrange") - vlen(self.origin - trg.origin)) * tmp;
+        }
+    }
+
+    return 0;
+}
+
+void zombie_corpse_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+    //dprint("zombie_corpse_damage\n");
+    Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker);
+
+    self.health -= damage;
+
+    if(self.health < 0)
+    {
+        Violence_GibSplash(self, 1, 1, attacker);
+        remove(self);
+    }
+}
+
+void zombie_die(vector dir)
+{
+    vector v;
+    float f;
+
+    entity dummy;
+
+    dummy = spawn();
+    setmodel(dummy,"models/monsters/zombie.dpm");
+    setorigin(dummy, self.origin);
+    dummy.velocity  = self.velocity;
+    dummy.movetype  = MOVETYPE_BOUNCE;
+    dummy.think     = SUB_Remove;
+    dummy.nextthink = time + 3;
+    dummy.health    = 50;
+    dummy.takedamage = DAMAGE_YES;
+    dummy.event_damage = zombie_corpse_damage;
+    dummy.solid      = SOLID_CORPSE;
+    setsize(dummy,self.mins,self.maxs);
+
+    SUB_SetFade(dummy,time + 5,2);
+
+
+    v = normalize(self.origin - dir);
+    f = vlen(v_forward - v) - 1;
+    if(f > 0.5)
+        dummy.frame = zombie_anim_deathfront1 + rint(random() * 2);
+    else if(f < 0.5)
+        dummy.frame = zombie_anim_deathback1 + rint(random() * 2);
+    else
+    {
+        f = vlen(v_right - v) - 1;
+        if(f > 0.5)
+            dummy.frame = zombie_anim_deathright1 + rint(random() * 2);
+        else if(f < 0.5)
+            dummy.frame = zombie_anim_deathleft1 + rint(random() * 2);
+    }
+
+
+    if(self.spawnflags & MONSTERFLAG_NORESPAWN)
+    {
+        self.think = SUB_Remove;
+        self.nextthink = time;
+        return;
+    }
+
+    setmodel(self,"");
+    self.solid          = SOLID_NOT;
+    self.takedamage     = DAMAGE_NO;
+    self.event_damage   = SUB_Null;
+    self.enemy          = world;
+    self.think          = zombie_spawn;
+    self.nextthink      = time + cvar("g_monster_zombie_respawntime");
+    self.pain_finished  = self.nextthink;
+}
+
+void zombie_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+
+    vector v;
+    float f;
+
+    v = normalize(self.origin - hitloc);
+    f = vlen(v_forward - v) - 1;
+
+
+    self.health -= damage;
+    self.velocity = self.velocity + force;
+    if(self.health <= 0)
+    {
+        zombie_die(hitloc);
+        return;
+    }
+
+    Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker);
+
+       if (damage > 50)
+               Violence_GibSplash_At(hitloc, force * -0.1, 3, 1, self, attacker);
+       if (damage > 100)
+               Violence_GibSplash_At(hitloc, force * -0.2, 3, 1, self, attacker);
+
+    if (time > self.pain_finished)
+    {
+        if(f < 0.5)
+        {
+            if(random() < 0.5)
+                self.frame = zombie_anim_painback1;
+            else
+                self.frame = zombie_anim_painback2;
+        }
+        else
+        {
+            if(random() < 0.5)
+                self.frame = zombie_anim_painfront1;
+            else
+                self.frame = zombie_anim_painfront2;
+        }
+
+        self.pain_finished = time + 0.36;
+    }
+}
+
+.vector bvec;
+.float bvec_time;
+
+void zombie_move()
+{
+    vector real_angle;
+    float vz, tdiff, tspeed;
+
+    tdiff = time - self.zoomstate;
+    tspeed = tdiff * cvar("g_monster_zombie_turnspeed");
+    vz = self.velocity_z;
+    self.zoomstate = time;
+
+    if(self.bvec_time < time)
+    {
+        self.bvec_time = time + 0.2;
+        self.bvec = steerlib_beamsteer(steerlib_attract2(self.moveto,0.5,500,0.95),512,32,34,64);
+    }
+
+    if(self.enemy)
+        self.moveto = self.enemy.origin;
+    else
+        self.moveto = self.origin + v_forward;
+
+    self.steerto = normalize(steerlib_attract2(self.moveto,0.5,500,0.95) + self.bvec);
+
+    self.angles_y = safeangle(self.angles_y);
+    real_angle = vectoangles(self.steerto) - self.angles;
+    self.angles_y += bound(-10, real_angle_y, 10);
+
+    if(vlen(self.origin - self.moveto) > 64)
+    {
+        movelib_move_simple(v_forward ,cvar("g_monster_zombie_movespeed"),0.6);
+        if(time > self.pain_finished)
+            if(self.attack_finished_single < time)
+                self.frame = zombie_anim_runforward;
+    }
+    else
+    {
+        movelib_beak_simple(cvar("g_monster_zombie_stopspeed"));
+        if(time > self.pain_finished)
+            if(self.attack_finished_single < time)
+                self.frame = zombie_anim_idle;
+    }
+
+    self.velocity_z = vz;
+    self.steerto = self.origin;
+}
+
+float zombie_verb_idle_roam(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+
+        if(self.enemy)
+            return VS_CALL_NO;
+
+        return verb.verb_static_value;
+
+    case VCM_DO:
+
+        self.moveto = v_forward * 128;
+        self.steerto = v_forward; //steerlib_beamsteer(v_forward,512,32,34,64);
+
+        return VS_CALL_YES_DOING;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+float zombie_verb_idle_stand(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+
+        if(self.enemy)
+            return VS_CALL_NO;
+
+        return verb.verb_static_value;
+
+    case VCM_DO:
+
+        self.moveto   = self.origin;
+        self.frame    = zombie_anim_idle;
+        self.velocity = '0 0 0';
+
+        return VS_CALL_YES_DOING;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+float zombie_verb_idle(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+
+        if(self.enemy)
+            return VS_CALL_NO;
+
+        return verb.verb_static_value;
+
+    case VCM_DO:
+        float t;
+
+        t = cvar("g_monster_zombie_idle_timer_max") -  cvar("g_monster_zombie_idle_timer_min");
+        t = cvar("g_monster_zombie_idle_timer_min") + (random() * t);
+
+        if(random() < 0.5)
+            verbstack_push(self.verbs_idle, zombie_verb_idle_roam,  ZV_IDLE + 1, t, self);
+        else
+            verbstack_push(self.verbs_idle, zombie_verb_idle_stand, ZV_IDLE + 1, 0.1, self);
+
+        return VS_CALL_YES_DOING;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+float zombie_verb_attack_findtarget(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+        if(self.enemy)
+            return VS_CALL_NO;
+
+        return verb.verb_static_value;
+
+    case VCM_DO:
+
+        entity trg, best_trg;
+        float trg_score, best_trg_score;
+
+        trg = findradius(self.origin,cvar("g_monster_zombie_targetrange"));
+        while(trg)
+        {
+            trg_score = zombie_scoretarget(trg);
+            if(trg_score > best_trg_score)
+            {
+                best_trg = trg;
+                best_trg_score = trg_score;
+            }
+
+            trg = trg.chain;
+        }
+
+        if(best_trg)
+        {
+            self.enemy = best_trg;
+            dprint("Selected: ",best_trg.netname, " as target.\n");
+        }
+
+        return VS_CALL_YES_DOING;
+    }
+
+    return VS_CALL_YES_DONE;
+}
+
+void zombie_runattack_damage()
+{
+    entity oldself;
+    oldself = self;
+    self = self.owner;
+
+    if(vlen(self.origin - self.enemy.origin) > cvar("g_monster_zombie_attack_run_hitrange"))
+        return;
+
+    if(vlen(normalize(self.origin - self.enemy.origin) - v_forward) < 1.6)
+        return;
+
+    Damage(self.enemy, self, self, cvar("g_monster_zombie_attack_run_damage"), DEATH_TURRET, self.enemy.origin, normalize(self.enemy.origin - self.origin)  * cvar("g_monster_zombie_attack_run_force"));
+
+    self = oldself;
+    self.think = SUB_Remove;
+    self.nextthink = time;
+}
+
+float zombie_verb_attack_run(float eval)
+{
+    switch (eval)
+    {
+    case VCM_EVAL:
+        if not (self.enemy)
+            return VS_CALL_NO;
+
+        if(self.attack_finished_single > time)
+            return VS_CALL_NO;
+
+        if(vlen(self.origin - self.enemy.origin) > cvar("g_monster_zombie_attack_run_range"))
+            return VS_CALL_NO;
+
+        if(vlen(normalize(self.origin - self.enemy.origin) - v_forward) < 1.6)
+            return VS_CALL_NO;
+
+        return verb.verb_static_value;
+
+    case VCM_DO:
+        entity pain;
+        pain = spawn();
+        pain.owner = self;
+        pain.think = zombie_runattack_damage;
+        pain.nextthink = time + cvar("g_monster_zombie_attack_run_delay");
+
+        self.attack_finished_single = time + 0.7;
+        self.frame = zombie_anim_attackrun1 + rint(random() * 2);
+
+        return VS_CALL_YES_DOING;
+    }
+