]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' of git://git.xonotic.org/xonotic/xonotic-data.pk3dir
authorRudolf Polzer <divVerent@xonotic.org>
Mon, 13 Dec 2010 06:00:50 +0000 (07:00 +0100)
committerRudolf Polzer <divVerent@xonotic.org>
Mon, 13 Dec 2010 06:00:50 +0000 (07:00 +0100)
88 files changed:
balanceXonotic.cfg
defaultXPM.cfg
defaultXonotic.cfg
gfx/hud/default/weaponminelayer.tga
gfx/hud/luminos/weaponminelayer.tga
gfx/hud/old/weaponminelayer.tga
gfx/loading.tga
gfx/winner.tga
hud_luminos_xhair_minimal.cfg
models/player/erebus.iqm.framegroups
models/player/erebus_lod1.iqm.framegroups
models/player/erebus_lod2.iqm.framegroups
models/player/gak.iqm.framegroups
models/player/gakarmored.iqm.framegroups
models/player/gakmasked.iqm.framegroups
models/player/ignis.iqm.framegroups
models/player/ignis_lod1.iqm.framegroups
models/player/ignis_lod2.iqm.framegroups
models/player/ignishalfmasked.iqm.framegroups
models/player/ignishalfmasked_lod1.iqm.framegroups
models/player/ignishalfmasked_lod2.iqm.framegroups
models/player/ignismasked.iqm.framegroups
models/player/ignismasked_lod1.iqm.framegroups
models/player/ignismasked_lod2.iqm.framegroups
models/player/nyx.iqm.framegroups
models/player/pyria.iqm.framegroups
models/player/seraphina.iqm.framegroups
models/player/seraphina_lod1.iqm.framegroups
models/player/seraphina_lod2.iqm.framegroups
models/player/seraphinamasked.iqm.framegroups
models/player/seraphinamasked_lod1.iqm.framegroups
models/player/seraphinamasked_lod2.iqm.framegroups
models/player/umbra.iqm.framegroups
models/sprites/make-sprites.sh
models/sprites/wpn-minelayer_frame0.tga [new file with mode: 0644]
physicsCPMA.cfg
physicsFruit.cfg
physicsHavoc.cfg
physicsLeeStricklin-ModdedFruit.cfg
physicsLeeStricklin.cfg
physicsLeeStricklinOld.cfg
physicsLzd.cfg
physicsNexuiz10.cfg
physicsNexuiz11.cfg
physicsNexuiz151.cfg
physicsNexuiz151b.cfg
physicsNexuiz16rc1.cfg
physicsNexuiz20.cfg
physicsNexuiz25.cfg
physicsNexuiz26.cfg
physicsNoQWBunny-nexbased.cfg
physicsQ.cfg
physicsQ2.cfg
physicsQ2a.cfg
physicsQ3.cfg
physicsQBF.cfg
physicsQBFplus.cfg
physicsSamual.cfg
physicsWarsow.cfg
physicsWarsowClassicBunny.cfg
physicsWarsowDev.cfg
physicsX0.cfg
physicsXPM.cfg
physicsXPMLight.cfg
qcsrc/client/hud.qc
qcsrc/client/scoreboard.qc
qcsrc/client/waypointsprites.qc
qcsrc/common/items.qc
qcsrc/server/autocvars.qh
qcsrc/server/bot/havocbot/role_onslaught.qc
qcsrc/server/cl_client.qc
qcsrc/server/cl_physics.qc
qcsrc/server/cl_player.qc
qcsrc/server/cl_weapons.qc
qcsrc/server/cl_weaponsystem.qc
qcsrc/server/clientcommands.qc
qcsrc/server/defs.qh
qcsrc/server/g_damage.qc
qcsrc/server/g_world.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/race.qc
qcsrc/server/t_items.qc
qcsrc/server/t_quake3.qc
qcsrc/server/teamplay.qc
qcsrc/server/w_nex.qc
qcsrc/server/w_seeker.qc
quake.rc
turrets.cfg

index def0f54ecbcfe3374c3b5373b575de5b9f14aa73..72283286f3831fc29beff6cad238f71069b9da31 100644 (file)
@@ -99,7 +99,7 @@ set g_pickup_respawntime_short 15
 set g_pickup_respawntime_medium 20
 set g_pickup_respawntime_long 30
 set g_pickup_respawntime_powerup 120
-set g_pickup_respawntime_weapon 5
+set g_pickup_respawntime_weapon 10
 set g_pickup_respawntime_ammo 25
 set g_pickup_respawntimejitter_short 0
 set g_pickup_respawntimejitter_medium 0
@@ -294,7 +294,7 @@ set g_balance_uzi_bulletconstant 115 // 13.1qu
 // }}}
 // {{{ mortar
 set g_balance_grenadelauncher_primary_type 0
-set g_balance_grenadelauncher_primary_damage 50
+set g_balance_grenadelauncher_primary_damage 44
 set g_balance_grenadelauncher_primary_edgedamage 32
 set g_balance_grenadelauncher_primary_force 300
 set g_balance_grenadelauncher_primary_radius 115
@@ -312,7 +312,7 @@ set g_balance_grenadelauncher_primary_damageforcescale 0
 set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
 
 set g_balance_grenadelauncher_secondary_type 1
-set g_balance_grenadelauncher_secondary_damage 70
+set g_balance_grenadelauncher_secondary_damage 62
 set g_balance_grenadelauncher_secondary_edgedamage 32
 set g_balance_grenadelauncher_secondary_force 300
 set g_balance_grenadelauncher_secondary_radius 150
@@ -333,7 +333,7 @@ set g_balance_grenadelauncher_bouncefactor 0.5
 set g_balance_grenadelauncher_bouncestop 0.12
 // }}}
 // {{{ minelayer
-set g_balance_minelayer_damage 35
+set g_balance_minelayer_damage 42
 set g_balance_minelayer_edgedamage 30
 set g_balance_minelayer_force 250
 set g_balance_minelayer_radius 175
@@ -452,7 +452,7 @@ set g_balance_crylink_secondary_line_lifetime 2 // range: 4000 full, fades to 80
 set g_balance_crylink_secondary_line_fadetime 2
 // }}}
 // {{{ nex
-set g_balance_nex_primary_damage 100
+set g_balance_nex_primary_damage 90
 set g_balance_nex_primary_force 500
 set g_balance_nex_primary_refire 1
 set g_balance_nex_primary_animtime 0.4
@@ -519,10 +519,10 @@ set g_balance_hagar_secondary_refire 0.12
 set g_balance_hagar_secondary_ammo 1
 // }}}
 // {{{ rocketlauncher
-set g_balance_rocketlauncher_damage 90
-set g_balance_rocketlauncher_edgedamage 30
+set g_balance_rocketlauncher_damage 82
+set g_balance_rocketlauncher_edgedamage 32
 set g_balance_rocketlauncher_force 350
-set g_balance_rocketlauncher_radius 125
+set g_balance_rocketlauncher_radius 130
 set g_balance_rocketlauncher_speed 1400
 set g_balance_rocketlauncher_speedaccel 1400
 set g_balance_rocketlauncher_speedstart 800
@@ -533,7 +533,7 @@ set g_balance_rocketlauncher_ammo 3
 set g_balance_rocketlauncher_health 0
 set g_balance_rocketlauncher_damageforcescale 0
 set g_balance_rocketlauncher_detonatedelay 0.05 // 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 40 // max degrees per second
+set g_balance_rocketlauncher_guiderate 42 // 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
@@ -610,8 +610,8 @@ set g_balance_campingrifle_reloadtime 2 // matches reload anim
 set g_balance_campingrifle_auto_reload_on_switch 0
 set g_balance_campingrifle_bursttime 0
 set g_balance_campingrifle_primary_tracer 1
-set g_balance_campingrifle_primary_damage 70
-set g_balance_campingrifle_primary_headshotaddeddamage 110
+set g_balance_campingrifle_primary_damage 60
+set g_balance_campingrifle_primary_headshotaddeddamage 100
 set g_balance_campingrifle_primary_spread 0
 set g_balance_campingrifle_primary_force 2
 set g_balance_campingrifle_primary_speed 40000
@@ -624,8 +624,8 @@ set g_balance_campingrifle_primary_burstcost 0
 set g_balance_campingrifle_primary_bullethail 0 // empty magazine on shot
 set g_balance_campingrifle_secondary 1
 set g_balance_campingrifle_secondary_tracer 0
-set g_balance_campingrifle_secondary_damage 50
-set g_balance_campingrifle_secondary_headshotaddeddamage 75
+set g_balance_campingrifle_secondary_damage 42
+set g_balance_campingrifle_secondary_headshotaddeddamage 70
 set g_balance_campingrifle_secondary_spread 0
 set g_balance_campingrifle_secondary_force 2
 set g_balance_campingrifle_secondary_speed 20000
index 37aee96d07a9f96acdff42e9cccfae4441f29119..35d5da985993d7ad40c8d974ebf7620ba60ac08b 100644 (file)
@@ -1,22 +1,32 @@
+// Xonotic ProMode
 exec defaultXonotic.cfg
-exec physicsXPM.cfg
 
-set g_start_weapon_laser 0
-set g_balance_weaponswitchdelay 0
+//==============
+// pure changes
+//==============
 
-set g_shootfromcenter 1
+// players
+sv_fbskin_green // visible playermodel forced on everyone
 
-set g_forced_respawn 1
+//================
+// impure changes
+//================
 
-set g_mirrordamage 0
-set g_friendlyfire 1
+// players
+g_jump_grunt 1 // make enemies even easier to hear when they're jumping around
 
-set timelimit_overtimes 1
+// physics
+exec physicsXPM.cfg // XPM physics. Similar to vanilla Xonotic physics, with a different way to accelerate: through strafejumping
 
-set sv_fragmessage_information_stats 0
+// balance
+set g_balance_weaponswitchdelay 0 // no switch animation, this is standard in "pro modes" ;)
+set g_shootfromcenter 1 // hit where you point at with the crosshair (almost so, no shooteye because it's really ugly)
 
-// force a visible playermodel!
-set sv_defaultcharacter 1
-set sv_defaultplayermodel "models/player/nyx.iqm"
-set sv_defaultplayercolors 60
-set g_fullbrightplayers 1
+// match rules
+set timelimit_overtimes 1 // overtimes on, draw matches are less interesting! :)
+set g_forced_respawn 1 // no delaying/cheating a match by not spawning
+set g_mirrordamage 0 // hurting teammates does not hurt you...
+set g_friendlyfire 1 // ...it hurts them.
+
+// info
+set sv_fragmessage_information_stats 0 // don't reveal how much health/armor the attacker had
index f591fe31f9684d86facd08f53bc8ce49a8afc195..57ae352abaebb949fb1dd92bb52d8ff0d74d44ee 100644 (file)
@@ -387,25 +387,6 @@ set ekg 0  "Throw huge amounts of gibs"
 
 cl_movement 1
 cl_stairsmoothspeed 200
-cl_forwardspeed $sv_maxspeed
-cl_backspeed $sv_maxspeed
-cl_sidespeed $sv_maxspeed
-cl_upspeed $sv_maxspeed
-cl_movement_accelerate $sv_accelerate
-cl_movement_airaccel_qw $sv_airaccel_qw
-cl_movement_airaccel_sideways_friction $sv_airaccel_sideways_friction
-cl_movement_airaccelerate $sv_airaccelerate
-cl_movement_edgefriction $edgefriction
-cl_movement_friction $sv_friction
-cl_movement_jumpvelocity $sv_jumpvelocity
-cl_movement_maxairspeed $sv_maxairspeed
-cl_movement_maxspeed $sv_maxspeed
-cl_movement_stepheight $sv_stepheight
-cl_movement_stopspeed $sv_stopspeed
-cl_movement_track_canjump 0 // till DP bug gets fixed
-cl_movement_wallfriction $sv_wallfriction
-cl_movement_wateraccelerate $sv_wateraccelerate
-cl_movement_waterfriction $sv_waterfriction
 
 seta cl_autoswitch 1 "automatically switch to newly picked up weapons if they are better than what you are carrying"
 alias autoswitch "set cl_autoswitch $1 ; cmd autoswitch $1"
@@ -596,40 +577,56 @@ set g_respawn_waves 0 "respawn in waves (every n seconds), intended to decrease
 // to force disable delay or waves, set them to 0.125
 set g_ctf_respawn_delay 0
 set g_ctf_respawn_waves 0
+set g_ctf_weapon_stay 0
 set g_dm_respawn_delay 0
 set g_dm_respawn_waves 0
+set g_dm_weapon_stay 0
 set g_dom_respawn_delay 0
 set g_dom_respawn_waves 0
+set g_dom_weapon_stay 0
 set g_lms_respawn_delay 0
 set g_lms_respawn_waves 0
+set g_lms_weapon_stay 0
 set g_rune_respawn_delay 0
 set g_rune_respawn_waves 0
+set g_rune_weapon_stay 0
 set g_tdm_respawn_delay 0
 set g_tdm_respawn_waves 0
+set g_tdm_weapon_stay 0
 set g_kh_respawn_delay 0
 set g_kh_respawn_waves 0
+set g_kh_weapon_stay 0
 set g_arena_respawn_delay 0
 set g_arena_respawn_waves 0
+set g_arena_weapon_stay 0
 set g_ca_respawn_delay 0
 set g_ca_respawn_waves 0
+set g_ca_weapon_stay 0
 set g_ca_damage2score_multiplier 0.01
 set g_ca_round_timelimit 180
 set g_nexball_respawn_delay 0
 set g_nexball_respawn_waves 0
+set g_nexball_weapon_stay 0
 set g_as_respawn_delay 0
 set g_as_respawn_waves 0
+set g_as_weapon_stay 0
 set g_ons_respawn_delay 0
 set g_ons_respawn_waves 0
+set g_ons_weapon_stay 0
 set g_rc_respawn_waves 0
 set g_rc_respawn_delay 0
+set g_rc_weapon_stay 0
 set g_cts_respawn_waves 0
-set g_cts_respawn_delay 0.25
+set g_cts_respawn_delay 0
 set g_cts_selfdamage 1 "0 = disable all selfdamage and falldamage in cts"
 set g_cts_finish_kill_delay 10 "prevent cheating by running back to the start line, and starting out with more speed than otherwise possible"
+set g_cts_weapon_stay 1
 set g_freezetag_respawn_waves 0
-set g_freezetag_respawn_delay 0.25
+set g_freezetag_respawn_delay 0
+set g_freezetag_weapon_stay 0
 set g_ka_respawn_delay 0
 set g_ka_respawn_waves 0
+set g_ka_weapon_stay 0
 
 // overtime
 seta timelimit_overtime 2 "duration in minutes of one added overtime, added to the timelimit"
@@ -1538,7 +1535,8 @@ sv_gameplayfix_q2airaccelerate 1
 sv_gameplayfix_stepmultipletimes 1
 
 // delay for "kill" to prevent abuse
-set g_balance_kill_delay 5
+set g_balance_kill_delay 2
+set g_balance_kill_antispam 5
 
 // this feature is currently buggy in the engine (it appears to PREVENT any dropping in lots of maps, leading to weirdly aligned entities, and in some cases even CAUSES them to drop through solid, like in facing worlds nex)
 sv_gameplayfix_droptofloorstartsolid 0
@@ -1626,7 +1624,7 @@ if_dedicated set g_start_delay 15 "delay before the game starts, so everyone can
 
 alias ons_map           "cl_cmd radar" // legacy alias
 alias radar             "cl_cmd radar"
-alias scoreboard_columns_set  "cl_cmd scoreboard_columns_set $*"
+alias scoreboard_columns_set  "" // aliased later
 alias scoreboard_columns_help "cl_cmd scoreboard_columns_help $*"
 
 alias _gl_flashblend_update_00 "gl_flashblend 1"
@@ -1644,7 +1642,6 @@ set cl_handicap 1 "the higher, the more damage you will receive (client setting)
 alias menu_showteamselect "menu_cmd directmenu TeamSelect"
 alias menu_showhudexit "menu_cmd directmenu HUDExit"
 alias menu_showhudoptions "menu_cmd directpanelhudmenu $*"
-alias menu_sync "menu_cmd sync"
 bind f5 menu_showteamselect
 
 set g_bugrigs 0
@@ -1985,6 +1982,7 @@ scr_loadingscreen_background 0
 scr_loadingscreen_barcolor "0 0.5 1"
 scr_loadingscreen_barheight 20
 scr_loadingscreen_count 1
+scr_conforcewhiledisconnected 0
 
 // DP cannot properly detect this, so rather turn off the detection
 r_texture_dds_load_dxt1_noalpha 1
@@ -2064,15 +2062,25 @@ set g_playerstats_uri ""
 // create this cvar in case the engine did not
 set snd_soundradius 1200
 
+// loading screen
+scr_loadingscreen_scale 1
+scr_loadingscreen_scale_base 1
+scr_loadingscreen_scale_limit 1
+
 // other config files
 exec balanceXonotic.cfg
 exec ctfscoring-ai.cfg
 exec effects-normal.cfg
 exec physicsX0.cfg
 exec turrets.cfg
+exec font-nimbussansl.cfg
 
 // hud cvar descriptions
 exec _hud_descriptions.cfg
 // exec the default skin config
 // please add any new cvars into the hud_save script in qcsrc/client/hud.qc for consistency
 exec hud_luminos.cfg
+
+// enable menu syncing
+alias menu_sync "menu_cmd sync"
+alias scoreboard_columns_set  "cl_cmd scoreboard_columns_set $*"
index 3fbccf9dee9f9d50f81982e9386e2f4dd17fa74e..4e31286157bb35c26cff8eb725df1f82117246fb 100644 (file)
Binary files a/gfx/hud/default/weaponminelayer.tga and b/gfx/hud/default/weaponminelayer.tga differ
index 3fbccf9dee9f9d50f81982e9386e2f4dd17fa74e..4e31286157bb35c26cff8eb725df1f82117246fb 100644 (file)
Binary files a/gfx/hud/luminos/weaponminelayer.tga and b/gfx/hud/luminos/weaponminelayer.tga differ
index 444247ffd7ea788493b0b82f6c24bb6eec0f707d..0c82a484158e5b02637e5e25e643bfba32056f37 100644 (file)
Binary files a/gfx/hud/old/weaponminelayer.tga and b/gfx/hud/old/weaponminelayer.tga differ
index 2b6e22ce76fb1ba1ebfa8009a4cc5abb435f4be1..44ebb5294a7921b0f8e52f86753a6dcc7d0b0dbc 100644 (file)
Binary files a/gfx/loading.tga and b/gfx/loading.tga differ
index 70bb566cdf82e63e4e37fd3b46c346ff517a3731..c713a85714322ce5b3953e0592baa28f2fbc3dc3 100644 (file)
Binary files a/gfx/winner.tga and b/gfx/winner.tga differ
index ba9e01a906d8b96f0540a0f40543f586248cc992..73b08adeb16ea344a2e8b01815b9b37cad8e01ae 100644 (file)
@@ -59,6 +59,7 @@ seta hud_panel_ammo_onlycurrent "1"
 seta hud_panel_ammo_iconalign "0"
 seta hud_panel_ammo_progressbar "1"
 seta hud_panel_ammo_progressbar_name "progressbar_ammo"
+seta hud_panel_ammo_progressbar_xoffset "0.32"
 seta hud_panel_ammo_text "1"
 
 seta hud_panel_powerups 1
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index b98d0b9818be941fbe715c5114f0b70cbd23e273..a257a2469eb0f5c7bd5feedf17d76e78848d615a 100644 (file)
@@ -9,7 +9,7 @@
 156 16 15.000000 0 // jump
 172 15 15.000000 0 // painone
 187 17 15.000000 0 // paintwo
-204 5 15.000000 1 // shoot
+204 5 15.000000 0 // shoot
 209 21 15.000000 1 // taunt
 230 21 40.000000 1 // run
 251 21 40.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index 71128c6c82fd047ec1b0b0a7e854df45dc67fe59..16b3e92c79f591ec88405a7ae46bece049f8c854 100644 (file)
@@ -9,7 +9,7 @@
 184 21 25.000000 0 // jump
 205 15 15.000000 0 // painone
 220 17 15.000000 0 // paintwo
-237 3 15.000000 1 // shoot
+237 3 15.000000 0 // shoot
 240 21 15.000000 1 // taunt
 261 21 35.000000 1 // run
 282 21 35.000000 1 // runbackwards
index b98d0b9818be941fbe715c5114f0b70cbd23e273..a257a2469eb0f5c7bd5feedf17d76e78848d615a 100644 (file)
@@ -9,7 +9,7 @@
 156 16 15.000000 0 // jump
 172 15 15.000000 0 // painone
 187 17 15.000000 0 // paintwo
-204 5 15.000000 1 // shoot
+204 5 15.000000 0 // shoot
 209 21 15.000000 1 // taunt
 230 21 40.000000 1 // run
 251 21 40.000000 1 // runbackwards
index 50131ee91c12fbeeb6c374b9e606114a28e9b3f2..87f24a6d0b49fed6eb041a421f8b080d1e99002e 100644 (file)
@@ -189,6 +189,7 @@ sprite wpn-hookgun        "Hook"          008000 000000 0.0 # dark green
 sprite wpn-fireball       "Fireball"      ff8000 000000 0.0 # orange
 sprite wpn-hlac           "HLAC"          00ff00 000000 0.0 # green
 sprite wpn-campingrifle   "Rifle"         80ff00 000000 0.0 # orange
+sprite wpn-minelayer      "Mine Layer"    ccff00 000000 0.0 # yellowish orange
 
 sprite dom-neut           "Control point" 00ffff 000000 0.0
 sprite dom-red            "Control point" ff0000 000000 0.0
diff --git a/models/sprites/wpn-minelayer_frame0.tga b/models/sprites/wpn-minelayer_frame0.tga
new file mode 100644 (file)
index 0000000..b2d2905
Binary files /dev/null and b/models/sprites/wpn-minelayer_frame0.tga differ
index 5660a33421e5d6d3f65b4651789af40e2dc33334..2ae8d2d6b8c7316b5ec7ed0de79d58ed59b880bc 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 320
index 82d996f55bcea8600e6e54d8c5227963e8921588..6467afad4c3b13e354e3fc8ad6069c94194cd2a2 100644 (file)
@@ -29,3 +29,4 @@ sv_doublejump 1 // TINY (1.35x normal) doublejumps only, can be disabled if want
 sv_jumpspeedcap_min 0 // need predicting? (it should already be in CSQC prediction code)
 sv_jumpspeedcap_max 0.35
 sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
index f328f8967b67db1c46b4af61d66c5dd87951e2da..a19617d93f89be9ef474bff4f7820936bb72920e 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 805df99b8831070346e637f3eb9cc068463f9c4b..c3329426e1370368da1a0dbea20c03d8aa19501b 100644 (file)
@@ -38,3 +38,4 @@ sv_doublejump 0 // TINY (1.35x normal) doublejumps only, can be disabled if want
 sv_jumpspeedcap_min 0 // need predicting? (it should already be in CSQC prediction code)
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
index dc82a81f54702c34e8273b6003e42fd25f09b1bb..2f23ae763dbdb30e0da4f093d4fe269dce4e6bcf 100644 (file)
@@ -38,3 +38,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
index 5d9a1280b6ae7d4bb21adef218a4edcc5aada830..bb6133a8b79f8b08fef018af239bc84425235b07 100644 (file)
@@ -33,3 +33,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max 0.38
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 064499002a2981fd266240bbb63bc2467eafc4dd..01e446e8ba32c2219d4f366c94e8b307ce88fcc9 100644 (file)
@@ -31,3 +31,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 6e112b9f67f3ccdcc7e26a0c7477a4fe85d16120..de2ff2591250b235a69eea7525611167386cf78d 100644 (file)
@@ -31,3 +31,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index d4e1f54ababe70d5aadcbc7cdac254b344881e94..64ac7b019cafcc6947711454fa968d39432ebd19 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 6cb19f1bde23333f0f2363419496b0dc72b3ce5c..c527b29efb3489637e6defbbfdea9d460b404f59 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 4796765cd3db3c906d7c0b436120d755d2f7c9b9..aa2f530cdf6f782bafa86b1264a3f942cf8fb108 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index c4d60c7f333b0a84d84315158ed8f82c77ff308e..0622e1a48134efa1e984be177e67f30e9dc137d1 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index d317514c00f0232528c7c97a3078c976bdbc3f07..1d15fe1d67be61adbdbf3c50b4fe89b8d6be3a72 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index af5f3863278bdab434c3217c22fbc00062607ef6..5b6db6b944c423b765a301238414d854ce41bf04 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 8fa5abc006df61b586cd358c6b4f55cab50feeca..f7661523ea146abdb371ee77589e5401600a641e 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index e67832dcb74a97c64ab3562a166b0475a591c37f..2f12a4ebceb3ac7cea0e1ed94f7d7f1aa1ac2bf4 100644 (file)
@@ -39,3 +39,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
index 6fb02afe7880a41e02bb26f8242030acb6c9f5ef..509310843b5e31ebbd5c6c18e56bd6291f0448b6 100644 (file)
@@ -31,3 +31,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 927fef3c44edd49d4ddf7eced660035966311204..dc580a51190ead71c541fc9833e70c0e0449ccf0 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 1
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 7828cc608b2303368ab4bb3bfb32f2fc879a1ed8..c5f21116ec9a4bff476338502dace8b7a9937a8b 100644 (file)
@@ -31,3 +31,4 @@ sv_doublejump 1
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 37973aef68f90d59a53e9ec7aaa1793cb6bfb939..a50427155e11414f2d3362960165284e1cb2344b 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 320
index 2f325586e363f133153ffcce967a796807d6c5e5..9725e8cc4a207e12d49789ea413ba09ddcc35707 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 03be62dd43d66b6c586750aef68e42a1fd7140bb..75c70c1818bec4bac9ef7dae8f2e361412a39e63 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 7492b415c56220840633b2aa256913b391931e2f..731b1482e6ddae0e04cc904cdebe671ba55c107f 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 811084dd5f316c3e8e32120cf8f3a8279d5a1be6..068d22ce67c7387e0b4ec3574dd434df246899c7 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 467c4212a02626942b5557f0d86c5a740f1b9d5f..72ca9ffcae73a43a275813ab8865ca882290c7ab 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 8a62f3e053c355a24d1f14c519f0e0d6a009e849..051775de9a900680e0ab37949b827f1d798387a7 100644 (file)
@@ -30,3 +30,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
+g_teleport_maxspeed 0
index 18973158ebd47fb1de2ad0f06cee71f039bd1b52..8fec0268663a6455b1631276e941457ac0b74c41 100644 (file)
@@ -38,3 +38,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
index 6c6b8a4ec54133fba4d6ec2ad082419a762ab319..9191ab8e83d66f2f2e9d9142d36182ed21ff5f4c 100644 (file)
@@ -34,3 +34,4 @@ sv_doublejump 1
 sv_jumpspeedcap_min 0
 sv_jumpspeedcap_max 0.5
 sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 320
index 519db9f729fbde9d008ec3bbb6443a0832019a32..3e7ee55570fa21cc92fa488a4aaae9b3a99336a4 100644 (file)
@@ -34,3 +34,4 @@ sv_doublejump 0
 sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
index 6cb1e4470f8324274c89e250c268c0132ac4b17d..476eb607e48b6be0b28f05bba4a7aeef19d6e532 100644 (file)
@@ -498,6 +498,7 @@ void HUD_Panel_ExportCfg(string cfgname)
                                        HUD_Write_PanelCvar_q("_iconalign");
                                        HUD_Write_PanelCvar_q("_progressbar");
                                        HUD_Write_PanelCvar_q("_progressbar_name");
+                                       HUD_Write_PanelCvar_q("_progressbar_xoffset");
                                        HUD_Write_PanelCvar_q("_text");
                                        break;
                                case HUD_PANEL_POWERUPS:
index 502c4481bcb2183da2863b480fdb2b8c050b922a..31cdc45bfa04b4bcffe5697e0bbf47d4fcc4ccec 100644 (file)
@@ -883,8 +883,10 @@ float HUD_WouldDrawScoreboard() {
                return 1;
        else if (intermission == 1)
                return 1;
-       else if (getstati(STAT_HEALTH) <= 0 && autocvar_cl_deathscoreboard)
+       else if (getstati(STAT_HEALTH) <= 0 && autocvar_cl_deathscoreboard && gametype != GAME_CTS)
                return 1;
+    else if (spectatee_status == -1)
+        return 1;
        else if (scoreboard_showscores_force)
                return 1;
        return 0;
index fad229f6a914ca905ae2f0a02da164ad7c9d24f7..2cd50789f14157b307380372329a1157a5e29c4d 100644 (file)
@@ -425,6 +425,7 @@ void WaypointSprite_Load()
        waypointsprite_distancefadealpha = autocvar_g_waypointsprite_distancefadealpha;
        waypointsprite_distancefadescale = autocvar_g_waypointsprite_distancefadescale;
        waypointsprite_distancefadedistance = waypointsprite_fadedistance * autocvar_g_waypointsprite_distancefadedistancemultiplier;
+       waypointsprite_alpha = autocvar_g_waypointsprite_alpha;
 
        if(!waypointsprite_initialized)
        {
index 37ffb25e7c3cff3b49e3581dc69a179048483212..5387c05aae1cac4d2d26d1aae4172536be840326 100644 (file)
@@ -1,5 +1,5 @@
 // WEAPON PLUGIN SYSTEM
-entity weapon_info[24];
+entity weapon_info[WEP_MAXCOUNT];
 entity dummy_weapon_info;
 
 void register_weapon(float id, float(float) func, float ammotype, float i, float weapontype, float pickupbasevalue, string modelname, string shortname, string wname)
@@ -43,7 +43,7 @@ void register_weapons_done()
 
        float i;
        weaponorder_byid = "";
-       for(i = 24; i >= 1; --i)
+       for(i = WEP_MAXCOUNT; i >= 1; --i)
                if(weapon_info[i-1])
                        weaponorder_byid = strcat(weaponorder_byid, " ", ftos(i));
        weaponorder_byid = strzone(substring(weaponorder_byid, 1, strlen(weaponorder_byid) - 1));
index eb344da93c67c64d8d66277ec7726593ff512647..c5beab269911b3a761d0bd7fa9785b870a12bc32 100644 (file)
@@ -382,6 +382,7 @@ float autocvar_g_balance_keyhunt_score_destroyed_ownfactor;
 float autocvar_g_balance_keyhunt_score_push;
 float autocvar_g_balance_keyhunt_throwvelocity;
 float autocvar_g_balance_kill_delay;
+float autocvar_g_balance_kill_antispam;
 float autocvar_g_balance_laser_primary_animtime;
 float autocvar_g_balance_laser_primary_damage;
 float autocvar_g_balance_laser_primary_delay;
@@ -1028,6 +1029,8 @@ float autocvar_g_weapon_throwable;
 string autocvar_g_xonoticversion;
 float autocvar_gamecfg;
 float autocvar_gameversion;
+float autocvar_gameversion_min;
+float autocvar_gameversion_max;
 string autocvar_hostname;
 float autocvar_lastlevel;
 float autocvar_leadlimit;
@@ -1083,6 +1086,7 @@ float autocvar_sv_dodging_sound;
 float autocvar_sv_dodging_up_speed;
 float autocvar_sv_dodging_wall_distance_threshold;
 float autocvar_sv_dodging_wall_dodging;
+float autocvar_sv_doublejump;
 float autocvar_sv_eventlog;
 float autocvar_sv_eventlog_console;
 float autocvar_sv_eventlog_files;
index af6eeb686d07537a54d956131e4385c17af66b52..bc84340287ff8938e5e3b60d80d9073f41443095 100644 (file)
@@ -35,7 +35,7 @@ void havocbot_goalrating_ons_offenseitems(float ratingscale, vector org, float s
                needarmor = TRUE;
 
        // Needs weapons?
-       for(i = WEP_FIRST; i < WEP_LAST ; ++i)
+       for(i = WEP_FIRST; i <= WEP_LAST ; ++i)
        {
                // Find weapon
                if(power2of(i-1) & self.weapons)
index e480b4f25aca65701096ef886c752936b118c5b2..12c810f16c7d43fcfbe55f644b5b5c5528785cff 100644 (file)
@@ -1213,6 +1213,7 @@ Called when a client types 'kill' in the console
 =============
 */
 
+.float clientkill_nexttime;
 void ClientKill_Now_TeamChange()
 {
        if(self.killindicator_teamchange == -1)
@@ -1220,24 +1221,30 @@ void ClientKill_Now_TeamChange()
                self.team = -1;
                JoinBestTeam( self, FALSE, FALSE );
        }
+       else if(self.killindicator_teamchange == -2)
+       {
+               if(g_ca)
+                       self.caplayer = 0;
+               if(blockSpectators)
+                       sprint(self, strcat("^7You have to become a player within the next ", ftos(autocvar_g_maxplayers_spectator_blocktime), " seconds, otherwise you will be kicked, because spectators aren't allowed at this time!\n"));
+               PutObserverInServer();
+       }
        else
                SV_ChangeTeam(self.killindicator_teamchange - 1);
 }
 
 void ClientKill_Now()
 {
+       remove(self.killindicator);
+       self.killindicator = world;
+
        if(self.killindicator_teamchange)
                ClientKill_Now_TeamChange();
 
        // in any case:
        Damage(self, self, self, 100000, DEATH_KILL, self.origin, '0 0 0');
 
-       if(self.killindicator)
-       {
-               dprint("Cleaned up after a leaked kill indicator.\n");
-               remove(self.killindicator);
-               self.killindicator = world;
-       }
+       // now I am sure the player IS dead
 }
 void KillIndicator_Think()
 {
@@ -1254,6 +1261,11 @@ void KillIndicator_Think()
                ClientKill_Now(); // no oldself needed
                return;
        }
+    else if(g_cts && self.health == 1) // health == 1 means that it's silent
+    {
+        self.nextthink = time + 1;
+        self.cnt -= 1;
+    }
        else
        {
                if(self.cnt <= 10)
@@ -1266,6 +1278,8 @@ void KillIndicator_Think()
                        {
                                if(self.owner.killindicator_teamchange == -1)
                                        centerprint(self.owner, strcat("Changing team in ", ftos(self.cnt), " seconds"));
+                               else if(self.owner.killindicator_teamchange == -2)
+                                       centerprint(self.owner, strcat("Spectating in ", ftos(self.cnt), " seconds"));
                                else
                                        centerprint(self.owner, strcat("Changing to ", ColoredTeamName(self.owner.killindicator_teamchange), " in ", ftos(self.cnt), " seconds"));
                        }
@@ -1277,19 +1291,34 @@ void KillIndicator_Think()
        }
 }
 
-void ClientKill_TeamChange (float targetteam) // 0 = don't change, -1 = auto
+void ClientKill_TeamChange (float targetteam) // 0 = don't change, -1 = auto, -2 = spec
 {
        float killtime;
        entity e;
        killtime = autocvar_g_balance_kill_delay;
 
-       if(g_race_qualifying)
+       if(g_race_qualifying || g_cts)
                killtime = 0;
 
+    if(g_cts && self.killindicator && self.killindicator.health == 1) // self.killindicator.health == 1 means that the kill indicator was spawned by CTS_ClientKill
+    {
+               remove(self.killindicator);
+               self.killindicator = world;
+
+        ClientKill_Now(); // allow instant kill in this case
+        return;
+    }
+
        self.killindicator_teamchange = targetteam;
 
-       if(!self.killindicator)
+    if(!self.killindicator)
        {
+               if(self.modelindex && self.deadflag == DEAD_NO)
+               {
+                       killtime = max(killtime, self.clientkill_nexttime - time);
+                       self.clientkill_nexttime = time + killtime + autocvar_g_balance_kill_antispam;
+               }
+
                if(killtime <= 0 || !self.modelindex || self.deadflag != DEAD_NO)
                {
                        ClientKill_Now();
@@ -1325,10 +1354,14 @@ void ClientKill_TeamChange (float targetteam) // 0 = don't change, -1 = auto
        }
        if(self.killindicator)
        {
-               if(targetteam)
-                       self.killindicator.colormod = TeamColor(targetteam);
-               else
+               if(targetteam == 0) // just die
                        self.killindicator.colormod = '0 0 0';
+               else if(targetteam == -1) // auto
+                       self.killindicator.colormod = '0 1 0';
+               else if(targetteam == -2) // spectate
+                       self.killindicator.colormod = '0.5 0.5 0.5';
+               else
+                       self.killindicator.colormod = TeamColor(targetteam);
        }
 }
 
@@ -1346,20 +1379,15 @@ void ClientKill (void)
                ClientKill_TeamChange(0);
 }
 
-void CTS_ClientKill_Think (void)
+void CTS_ClientKill (entity e) // silent version of ClientKill, used when player finishes a CTS run. Useful to prevent cheating by running back to the start line and starting out with more speed
 {
-       self = self.owner; // set self to the player to be killed
-       sprint(self, "^1You were killed in order to prevent cheating!");
-       ClientKill_Now();
-}
-
-void CTS_ClientKill (float t) // silent version of ClientKill
-{
-       entity e;
-       e = spawn();
-       e.owner = self;
-       e.think = CTS_ClientKill_Think;
-       e.nextthink = t;
+    e.killindicator = spawn();
+    e.killindicator.owner = e;
+    e.killindicator.think = KillIndicator_Think;
+    e.killindicator.nextthink = time + (e.lip) * 0.05;
+    e.killindicator.cnt = ceil(autocvar_g_cts_finish_kill_delay);
+    e.killindicator.health = 1; // this is used to indicate that it should be silent
+    e.lip = 0;
 }
 
 void DoTeamChange(float destteam)
@@ -2709,7 +2737,7 @@ void PlayerPreThink (void)
                                if(frametime)
                                        player_anim();
                                button_pressed = (self.BUTTON_ATCK || self.BUTTON_JUMP || self.BUTTON_ATCK2 || self.BUTTON_HOOK || self.BUTTON_USE);
-                               force_respawn = (g_lms || (g_ca) || autocvar_g_forced_respawn);
+                               force_respawn = (g_lms || g_ca || g_cts || autocvar_g_forced_respawn);
                                if (self.deadflag == DEAD_DYING)
                                {
                                        if(force_respawn)
index ed459ae5eba762dac4d693feeb4456802855e081..e2feca927b94472af9ff963e1c01d141be5d2d01 100644 (file)
@@ -30,7 +30,7 @@ void PlayerJump (void)
        float doublejump;
 
        doublejump = FALSE;
-       if (sv_doublejump)
+       if (autocvar_sv_doublejump)
        {
                tracebox(self.origin + '0 0 0.01', self.mins, self.maxs, self.origin - '0 0 0.01', MOVE_NORMAL, self);
                if (trace_fraction < 1 && trace_plane_normal_z > 0.7)
index 2b4981745bfd879b0256d48d4f3e789b6139727e..342cbbc3d69e4a8e6e9a011c246e14d892f24a09 100644 (file)
@@ -669,7 +669,12 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht
                waves = 0;
                sdelay = cvar(strcat("g_", GetGametype(), "_respawn_delay"));
                if(!sdelay)
-                       sdelay = autocvar_g_respawn_delay;
+        {
+            if(g_cts)
+                sdelay = 0; // no respawn delay in CTS
+            else
+                sdelay = autocvar_g_respawn_delay;
+        }
                waves = cvar(strcat("g_", GetGametype(), "_respawn_waves"));
                if(!waves)
                        waves = autocvar_g_respawn_waves;
index db79588cf503959ac3dd5e43ea3da31793ce55b9..6de63b9377fd76893498adebe0507247737e3fe1 100644 (file)
@@ -275,6 +275,8 @@ void W_ThrowWeapon(vector velo, vector delta, float doreduce)
                return;
        if (g_ca)
                return;
+    if (g_cts)
+        return;
        if(!autocvar_g_weapon_throwable)
                return;
        if(autocvar_g_weapon_stay == 1)
@@ -389,9 +391,8 @@ void W_WeaponFrame()
                        v_forward = fo;
                        v_right = ri;
                        v_up = up;
-            self.weaponentity.weaponentity.glowmod = '0 0 0'; // reset glowmod, weapon think function only *might* set it
+                       self.weaponentity_glowmod = '0 0 0'; // reset glowmod, weapon think function only *might* set it
                        weapon_action(self.weapon, WR_THINK);
-            self.exteriorweaponentity.glowmod = self.weaponentity.weaponentity.glowmod; // exterior weaponmodel has the same glowmod
                }
                if (time + self.weapon_frametime * 0.5 >= self.weapon_nextthink)
                {
index bb71d5965af2f2be6bb548f0aa11bca000d613ff..4f5e7604448fc0e7458a91be39f81fc4808f9f20 100644 (file)
@@ -603,12 +603,14 @@ void CL_Weaponentity_Think()
        else
                self.alpha = 1;
 
+       self.glowmod = self.owner.weaponentity_glowmod;
        self.colormap = self.owner.colormap;
        if (self.weaponentity)
        {
                self.weaponentity.effects = self.effects;
                self.weaponentity.alpha = self.alpha;
                self.weaponentity.colormap = self.colormap;
+               self.weaponentity.glowmod = self.glowmod;
        }
 
        self.angles = '0 0 0';
@@ -847,6 +849,7 @@ void CL_ExteriorWeaponentity_Think()
                self.angles = ang;
        }
 
+       self.glowmod = self.owner.weaponentity_glowmod;
        self.colormap = self.owner.colormap;
 };
 
index 92e4b8ac18ac0a0c4c264fd311fc5297a7ac987f..adaf36f16415dc860c2b746dfc5d42074e98a856 100644 (file)
@@ -164,11 +164,10 @@ void SV_ParseClientCommand(string s) {
                } else {
                        self.version = stof(argv(1));
                }
-               if(self.version != autocvar_gameversion)
+               if(self.version < autocvar_gameversion_min || self.version > autocvar_gameversion_max)
                {
-                       self.classname = "observer";
                        self.version_mismatch = 1;
-                       PutClientInServer();
+                       ClientKill_TeamChange(-2); // observe
                } else if(autocvar_g_campaign || autocvar_g_balance_teams || autocvar_g_balance_teams_force) {
                        //JoinBestTeam(self, FALSE, TRUE);
                } else if(teams_matter && !autocvar_sv_spectate && !(self.team_forced > 0)) {
@@ -211,17 +210,7 @@ void SV_ParseClientCommand(string s) {
                        }
                }
                if(self.classname == "player" && autocvar_sv_spectate == 1) {
-                       if(self.flagcarried)
-                               DropFlag(self.flagcarried, world, world);
-                       if(self.ballcarried && g_nexball)
-                               DropBall(self.ballcarried, self.origin, self.velocity);
-                       WaypointSprite_PlayerDead();
-                       self.classname = "observer";
-                       if(g_ca)
-                               self.caplayer = 0;
-                       if(blockSpectators)
-                               sprint(self, strcat("^7You have to become a player within the next ", ftos(autocvar_g_maxplayers_spectator_blocktime), " seconds, otherwise you will be kicked, because spectators aren't allowed at this time!\n"));
-                       PutClientInServer();
+                       ClientKill_TeamChange(-2); // observe
                }
        } else if(cmd == "join") {
                if not(self.flags & FL_CLIENT)
@@ -256,15 +245,15 @@ void SV_ParseClientCommand(string s) {
                } else if(lockteams) {
                        sprint( self, "^7The game has already begun, you must wait until the next map to be able to join a team.\n");
                } else if( argv(1) == "red" ) {
-                       DoTeamChange(COLOR_TEAM1);
+                       ClientKill_TeamChange(COLOR_TEAM1);
                } else if( argv(1) == "blue" ) {
-                       DoTeamChange(COLOR_TEAM2);
+                       ClientKill_TeamChange(COLOR_TEAM2);
                } else if( argv(1) == "yellow" ) {
-                       DoTeamChange(COLOR_TEAM3);
+                       ClientKill_TeamChange(COLOR_TEAM3);
                } else if( argv(1) == "pink" ) {
-                       DoTeamChange(COLOR_TEAM4);
+                       ClientKill_TeamChange(COLOR_TEAM4);
                } else if( argv(1) == "auto" ) {
-                       DoTeamChange(-1);
+                       ClientKill_TeamChange(-1);
                } else {
                        sprint( self, strcat( "selectteam none/red/blue/yellow/pink/auto - \"", argv(1), "\" not recognised\n" ) );
                }
index c9a7e61c432ef3cae0b9ea29f9d5eb5f8616b1d1..86a57d460b42a5d952bc09785dad450ec23b2648 100644 (file)
@@ -200,6 +200,7 @@ void setanim(entity e, vector anim, float looping, float override, float restart
 
 .entity weaponentity;
 .entity exteriorweaponentity;
+.vector weaponentity_glowmod;
 .float switchweapon;
 .float autoswitch;
 float weapon_action(float wpn, float wrequest);
@@ -427,7 +428,6 @@ float sv_maxidle;
 float sv_maxidle_spectatorsareidle;
 
 float sv_pogostick;
-float sv_doublejump;
 float tracebox_hits_trigger_hurt(vector start, vector mi, vector ma, vector end);
 
 float next_pingtime;
index f064e53593fbb65ef03a7e62b180c68499d88ab8..6ab29006d2226bc8fa897b446aa05a4f8de6c262 100644 (file)
@@ -295,7 +295,8 @@ void Obituary (entity attacker, entity inflictor, entity targ, float deathtype)
                {
                        if (deathtype == DEATH_TEAMCHANGE || deathtype == DEATH_AUTOTEAMCHANGE)
                                msg = ColoredTeamName(targ.team); // TODO: check if needed?
-                       Send_CSQC_Centerprint(targ, msg, "", deathtype, MSG_SUICIDE);
+            if(!g_cts) // no "killed your own dumb self" message in CTS
+                Send_CSQC_Centerprint(targ, msg, "", deathtype, MSG_SUICIDE);
 
                        if(deathtype != DEATH_TEAMCHANGE && deathtype != DEATH_QUIET)
                        {
index 18ddcdae85bc66c778c0217dacba93b2d3c08b4e..30a63ba7d44b027fb2e58c160142d900ba000820 100644 (file)
@@ -235,6 +235,7 @@ void cvar_changes_init()
                k = bufstr_get(h, i);
 
 #define BADPREFIX(p) if(substring(k, 0, strlen(p)) == p) continue
+#define BADPRESUFFIX(p,s) if(substring(k, 0, strlen(p)) == p && substring(k, -strlen(s), -1) == s) continue
 #define BADCVAR(p) if(k == p) continue
                // internal
                BADPREFIX("csqc_");
@@ -414,6 +415,7 @@ void cvar_changes_init()
                BADCVAR("g_nexball_goallimit");
                BADCVAR("g_runematch_point_limit");
                BADCVAR("g_start_delay");
+               BADCVAR("g_weapon_stay"); BADPRESUFFIX("g_", "_weapon_stay");
                BADCVAR("hostname");
                BADCVAR("log_file");
                BADCVAR("maxplayers");
index 8e052e8377a0688a3b143abaf181375b6090274b..113e9f427df5b8105d918b7483e482142b3d4deb 100644 (file)
@@ -880,8 +880,8 @@ float want_weapon(string cvarprefix, entity weaponinfo, float allguns)
                        t = (weaponinfo.spawnflags & WEP_FLAG_NORMAL);
                else if(t < -1)
                        t = 0;
-               else if (g_race || g_cts)
-                       t = (i == WEP_LASER);
+               else if (g_cts)
+                       t = (i == WEP_SHOTGUN);
                else if (g_nexball)
                        t = 0; // weapon is set a few lines later
                else
@@ -981,16 +981,23 @@ void readplayerstartcvars()
        if (g_weaponarena)
        {
                start_weapons = g_weaponarena;
-               if (g_weaponarena & (WEPBIT_GRENADE_LAUNCHER | WEPBIT_MINE_LAYER | WEPBIT_HAGAR | WEPBIT_ROCKET_LAUNCHER))
-                       start_ammo_rockets = 999;
-               if (g_weaponarena & WEPBIT_SHOTGUN)
-                       start_ammo_shells = 999;
-               if (g_weaponarena & (WEPBIT_ELECTRO | WEPBIT_CRYLINK | WEPBIT_NEX | WEPBIT_MINSTANEX | WEPBIT_HLAC | WEPBIT_HOOK))
-                       start_ammo_cells = 999;
-               if (g_weaponarena & (WEPBIT_UZI | WEPBIT_CAMPINGRIFLE))
-                       start_ammo_nails = 999;
-               if (g_weaponarena & WEPBIT_HOOK)
-                       start_ammo_fuel = 999;
+               for (j = WEP_FIRST; j <= WEP_LAST; ++j)
+               {
+                       e = get_weaponinfo(j);
+                       if(start_weapons & e.weapons)
+                       {
+                               if(e.items & IT_ROCKETS)
+                                       start_ammo_rockets = 999;
+                               if(e.items & IT_SHELLS)
+                                       start_ammo_shells = 999;
+                               if(e.items & IT_CELLS)
+                                       start_ammo_cells = 999;
+                               if(e.items & IT_NAILS)
+                                       start_ammo_nails = 999;
+                               if(e.items & IT_FUEL)
+                                       start_ammo_fuel = 999;
+                       }
+               }
                start_items |= IT_UNLIMITED_AMMO;
        }
        else if (g_minstagib)
@@ -1157,6 +1164,7 @@ float sv_pitch_min;
 float sv_pitch_max;
 float sv_pitch_fixyaw;
 
+string GetGametype(); // g_world.qc
 void readlevelcvars(void)
 {
        // first load all the mutators
@@ -1207,6 +1215,8 @@ void readlevelcvars(void)
        sv_gentle = cvar("sv_gentle");
        sv_foginterval = cvar("sv_foginterval");
        g_cloaked = cvar("g_cloaked");
+    if(g_cts)
+        g_cloaked = 1; // always enable cloak in CTS
        g_jump_grunt = cvar("g_jump_grunt");
        g_footsteps = cvar("g_footsteps");
        g_grappling_hook = cvar("g_grappling_hook");
@@ -1290,7 +1300,9 @@ void readlevelcvars(void)
 
        g_pinata = cvar("g_pinata");
 
-       g_weapon_stay = cvar("g_weapon_stay");
+    g_weapon_stay = cvar(strcat("g_", GetGametype(), "_weapon_stay"));
+    if(!g_weapon_stay)
+        g_weapon_stay = cvar("g_weapon_stay");
 
        if (!g_weapon_stay && (cvar("deathmatch") == 2))
                g_weapon_stay = 1;
@@ -1516,8 +1528,12 @@ void precache_playermodel(string m)
        precache_model(m);
        if(sv_loddistance1)
        {
-               precache_model(strcat(substring(m, 0, -5), "_lod1", substring(m, -4, -1)));
-               precache_model(strcat(substring(m, 0, -5), "_lod2", substring(m, -4, -1)));
+               f = strcat(substring(m, 0, -5), "_lod1", substring(m, -4, -1));
+               if(fexists(f))
+                       precache_model(f);
+               f = strcat(substring(m, 0, -5), "_lod2", substring(m, -4, -1));
+               if(fexists(f))
+                       precache_model(f);
        }
 
        globhandle = search_begin(strcat(m, "_*.sounds"), TRUE, FALSE);
@@ -1743,6 +1759,14 @@ void objerror(string s)
     objerror_builtin(s);
 }
 
+.float remove_except_protected_forbidden;
+void remove_except_protected(entity e)
+{
+       if(e.remove_except_protected_forbidden)
+               error("not allowed to remove this at this point");
+       remove_builtin(e);
+}
+
 void remove_unsafely(entity e)
 {
     remove_builtin(e);
@@ -1793,6 +1817,11 @@ void InitializeEntitiesRun()
     entity startoflist;
     startoflist = initialize_entity_first;
     initialize_entity_first = world;
+    remove = remove_except_protected;
+    for (self = startoflist; self; self = self.initialize_entity_next)
+    {
+       self.remove_except_protected_forbidden = 1;
+    }
     for (self = startoflist; self; )
     {
         entity e;
@@ -1802,6 +1831,7 @@ void InitializeEntitiesRun()
         self.initialize_entity_order = 0;
         self.initialize_entity = func_null;
         self.initialize_entity_next = world;
+       self.remove_except_protected_forbidden = 0;
         if (self.classname == "initialize_entity")
         {
             entity e_old;
@@ -1810,9 +1840,16 @@ void InitializeEntitiesRun()
             self = e_old;
         }
         //dprint("Delayed initialization: ", self.classname, "\n");
-        func();
+        if(func != func_null)
+            func();
+        else
+        {
+            eprint(self);
+            backtrace(strcat("Null function in: ", self.classname, "\n"));
+        }
         self = e;
     }
+    remove = remove_unsafely;
 }
 
 .float uncustomizeentityforclient_set;
@@ -2588,7 +2625,6 @@ void zcurveparticles_from_tracetoss(float effectno, vector start, vector end, ve
        zcurveparticles(effectno, start, end, end_dz, vlen(vel));
 }
 
-string GetGametype(); // g_world.qc
 void write_recordmarker(entity pl, float tstart, float dt)
 {
     GameLogEcho(strcat(":recordset:", ftos(pl.playerid), ":", ftos(dt)));
index 80a379aa1f806090f170ceb4586d738cb19d06c9..9817b3b0e1afaa45675b4755f45989da50afe0d6 100644 (file)
@@ -308,7 +308,7 @@ void race_SendTime(entity e, float cp, float t, float tvalid)
                                        race_setTime(GetMapname(), t, e.crypto_idfp, e.netname, e);
                                        if(g_cts && autocvar_g_cts_finish_kill_delay)
                                        {
-                                               CTS_ClientKill(autocvar_g_cts_finish_kill_delay);
+                                               CTS_ClientKill(e);
                                        }
                                }
                                if(t < recordtime || recordtime == 0)
@@ -742,11 +742,21 @@ void trigger_race_checkpoint_verify()
                for(trigger = world; (trigger = find(trigger, classname, "trigger_multiple")); )
                        for(targ = world; (targ = find(targ, targetname, trigger.target)); )
                                if (targ.classname == "target_checkpoint" || targ.classname == "target_startTimer" || targ.classname == "target_stopTimer") {
-                                       targ.wait = -2;
+                                       trigger.wait = 0;
+                                       trigger.delay = 0;
+                                       targ.wait = 0;
                                        targ.delay = 0;
 
-                                       setsize(targ, trigger.mins, trigger.maxs);
-                                       setorigin(targ, trigger.origin);
+                    // These just make the game crash on some maps with oddly shaped triggers. 
+                    // (on the other hand they used to fix the case when two players ran through a checkpoint at once, 
+                    // and often one of them just passed through without being registered. Hope it's fixed  in a better way now.
+                    // (happened on item triggers too)
+                    //
+                                       //targ.wait = -2;
+                                       //targ.delay = 0;
+
+                                       //setsize(targ, trigger.mins, trigger.maxs);
+                                       //setorigin(targ, trigger.origin);
                                        //remove(trigger);
                                }
        }
index 5a86bee8391a617e719bc3d3e419b2eed2780b9a..143b3be4879d79cc2993a685f275e0a1cc2e0bee 100644 (file)
@@ -590,7 +590,7 @@ float weapon_pickupevalfunc(entity player, entity item)
        // If custom weapon priorities for bots is enabled rate most wanted weapons higher
        if( bot_custom_weapon && c )
        {
-               for(i = WEP_FIRST; i < WEP_LAST ; ++i)
+               for(i = WEP_FIRST; i <= WEP_LAST ; ++i)
                {
                        // Find weapon
                        if( (get_weaponinfo(i)).weapons & item.weapons  != item.weapons )
@@ -630,7 +630,7 @@ float commodity_pickupevalfunc(entity player, entity item)
        c = 0;
 
        // Detect needed ammo
-       for(i = WEP_FIRST; i < WEP_LAST ; ++i)
+       for(i = WEP_FIRST; i <= WEP_LAST ; ++i)
        {
                wi = get_weaponinfo(i);
 
index 241b8f76df6cbb85cc53e18a2d2cb3e255005625..44036ade494e9b437934f93438fdd5ead1dab8ab 100644 (file)
@@ -47,11 +47,13 @@ void target_init_verify()
                for(targ = world; (targ = find(targ, targetname, trigger.target)); )
                        if (targ.classname == "target_init" || targ.classname == "target_give" || targ.classname == "target_items")
                        {
-                               targ.wait = -2;
+                               trigger.wait = 0;
+                               trigger.delay = 0;
+                               targ.wait = 0;
                                targ.delay = 0;
 
-                               setsize(targ, trigger.mins, trigger.maxs);
-                               setorigin(targ, trigger.origin);
+                               //setsize(targ, trigger.mins, trigger.maxs);
+                               //setorigin(targ, trigger.origin);
                                //remove(trigger);
                        }
 }
@@ -59,7 +61,7 @@ void target_init_verify()
 void spawnfunc_target_init()
 {
        self.spawnflags = 0; // remove all weapons except the ones listed below
-       self.netname = "laser uzi"; // keep these weapons through the remove trigger
+       self.netname = "shotgun"; // keep these weapons through the remove trigger
        spawnfunc_target_items();
        InitializeEntity(self, target_init_verify, INITPRIO_FINDTARGET);
 }
@@ -98,7 +100,9 @@ void target_give_init()
                        self.armorvalue = 100;
                else if (targ.classname == "item_health_mega")
                        self.health = 200;
-               remove(targ);
+               //remove(targ); // removing ents in init functions causes havoc, workaround:
+        targ.think = SUB_Remove;
+        targ.nextthink = time;
        }
        self.spawnflags = 2;
        spawnfunc_target_items();
index 1c8f51734c7e894cdc9d24d845f0628bad9ed9b3..9cb52c1daa2444053ea8e6fbe2d344127f4197ad 100644 (file)
@@ -517,7 +517,7 @@ void PrintWelcomeMessage(entity pl)
                modifications = strcat(modifications, ", No start weapons");
        if(autocvar_sv_gravity < 800)
                modifications = strcat(modifications, ", Low gravity");
-       if(g_cloaked)
+       if(g_cloaked && !g_cts)
                modifications = strcat(modifications, ", Cloaked");
        if(g_grappling_hook)
                modifications = strcat(modifications, ", Hook");
@@ -525,7 +525,7 @@ void PrintWelcomeMessage(entity pl)
                modifications = strcat(modifications, ", Midair");
        if(g_pinata)
                modifications = strcat(modifications, ", Pinata");
-       if(g_weapon_stay)
+       if(g_weapon_stay && !g_cts)
                modifications = strcat(modifications, ", Weapons stay");
        if(g_bloodloss > 0)
                modifications = strcat(modifications, ", Bloodloss");
index d3b768fef1d7a6512fad8a488afaca89626cb4b9..7b1239b898859f206b22bfe7881b49d8b72a8fb6 100644 (file)
@@ -96,15 +96,15 @@ float w_nex(float req)
 
         if(autocvar_g_balance_nex_charge)
         {
-            self.weaponentity.weaponentity.glowmod_x = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_half * bound(0, self.weaponentity.weaponentity.glowmod_y + self.nex_charge / autocvar_g_balance_nex_charge_limit, 1);
-            self.weaponentity.weaponentity.glowmod_y = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_half * bound(0, self.weaponentity.weaponentity.glowmod_y + self.nex_charge / autocvar_g_balance_nex_charge_limit, 1);
-            self.weaponentity.weaponentity.glowmod_z = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_half * bound(0, self.weaponentity.weaponentity.glowmod_z + self.nex_charge / autocvar_g_balance_nex_charge_limit, 1);
+            self.weaponentity_glowmod_x = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_limit);
+            self.weaponentity_glowmod_y = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_limit);
+            self.weaponentity_glowmod_z = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_limit);
 
             if(self.nex_charge > autocvar_g_balance_nex_charge_limit)
             {
-                self.weaponentity.weaponentity.glowmod_x = self.weaponentity.weaponentity.glowmod_x + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit);
-                self.weaponentity.weaponentity.glowmod_y = self.weaponentity.weaponentity.glowmod_y + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit);
-                self.weaponentity.weaponentity.glowmod_z = self.weaponentity.weaponentity.glowmod_z + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit);
+                self.weaponentity_glowmod_x = self.weaponentity_glowmod_x + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit);
+                self.weaponentity_glowmod_y = self.weaponentity_glowmod_y + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit);
+                self.weaponentity_glowmod_z = self.weaponentity_glowmod_z + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit);
             }
         }
 
index 4ab7f4f22e34dc0a215bb8c54cc5bf4967a6c4ed..eb64dddd802875bbbdcc2b98d76025e55a0b02d7 100644 (file)
@@ -158,7 +158,7 @@ void Seeker_Fire_Missile(vector f_diff)
 {
        local entity missile;
 
-       if not(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)
+       if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
                self.ammo_rockets = self.ammo_rockets - autocvar_g_balance_seeker_missile_ammo;
 
        makevectors(self.v_angle);
index 994a1c566ea261be3c9ba87a6b372fe53f4bff2e..725fa430e1bdad63ef5c28560b257ef89a82b25d 100644 (file)
--- a/quake.rc
+++ b/quake.rc
@@ -4,7 +4,6 @@ maxplayers $menu_maxplayers
 exec data/campaign.cfg
 exec config_update.cfg
 exec autoexec.cfg
-exec font-nimbussansl.cfg
 stuffcmds
 //startdemos demos/demo1 demos/demo2 demos/demo3
 //startdemos
index 101defc6162b63aeb29e6a0e73586c5c1552edeb..876862b1c50a49684ef2afcc5d49212e00d4a2e9 100644 (file)
@@ -51,8 +51,8 @@ exec unit_walker.cfg
 // OMG! Its the Evil Wheel! :O
 exec unit_ewheel.cfg
 
-//
-exec unit_repulsor.cfg
+// It is so repulsive, it doesn't even exist!
+// exec unit_repulsor.cfg
 
 set g_turrets_reloadcvars 0 // reload when this cfg has been exec'd
 alias g_turrets_reload "set g_turrets_reloadcvars 1"