]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into mand1nga/bot-navigation-fixes
authormand1nga <mand1nga@xonotic.org>
Sat, 18 Dec 2010 22:14:42 +0000 (19:14 -0300)
committermand1nga <mand1nga@xonotic.org>
Sat, 18 Dec 2010 22:14:42 +0000 (19:14 -0300)
108 files changed:
_hud_descriptions.cfg
balanceLeeStricklin.cfg
balanceXonotic.cfg
defaultXPM.cfg
defaultXonotic.cfg
effects-ultimate.cfg
effects-ultra.cfg
gfx/hud/default/weaponminelayer.tga
gfx/hud/luminos/weaponminelayer.tga
gfx/hud/old/weaponminelayer.tga
gfx/loading.tga
gfx/winner.tga
hud_luminos.cfg
hud_luminos_minimal.cfg
hud_luminos_xhair_minimal.cfg
hud_nexuiz.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]
particles/nexbeam.tga [deleted file]
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/hud.qh
qcsrc/client/scoreboard.qc
qcsrc/client/waypointsprites.qc
qcsrc/common/items.qc
qcsrc/common/util.qc
qcsrc/common/util.qh
qcsrc/menu/item/inputbox.c
qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c
qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c
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/playerstats.qc
qcsrc/server/race.qc
qcsrc/server/t_items.qc
qcsrc/server/t_quake3.qc
qcsrc/server/teamplay.qc
qcsrc/server/w_crylink.qc
qcsrc/server/w_electro.qc
qcsrc/server/w_nex.qc
qcsrc/server/w_seeker.qc
qcsrc/server/w_shotgun.qc
qcsrc/warpzonelib/server.qc
quake.rc
turrets.cfg
xonotic-credits.txt

index 932e95bf9fb4577a7e0e7afe2cf7398c1a09de46..269b07c526ce3dc2293a7cf67e38bb2c81066359 100644 (file)
@@ -47,6 +47,8 @@ seta hud_panel_weapons_complainbubble_color_donthave "" "color of the complainbu
 seta hud_panel_weapons_complainbubble_color_unavailable "" "color of the complainbubble when showing weapon unavailable message"
 seta hud_panel_weapons_ammo_color "" "color of status bar"
 seta hud_panel_weapons_ammo_alpha "" "alpha of status bar"
+seta hud_panel_weapons_timeout "" "panel disappears if you don't switch weapon for this amount of seconds"
+seta hud_panel_weapons_timeout_effect "" "disappearance effect: 0) no effect; 1) panel moves out of screen; 2) panel fades out"
 
 seta hud_panel_ammo "" "enable/disable this panel"
 seta hud_panel_ammo_pos "" "position of this panel"
index 37a589fd36d6a2bc46de506576c92ee2317afcd4..1bb993bac9107427a13b1c95d0a0be00f2f456b0 100644 (file)
@@ -288,7 +288,7 @@ set g_balance_uzi_sustained_ammo 1
 set g_balance_uzi_speed 18000
 set g_balance_uzi_bulletconstant 300 // 13.1qu
 // }}}
-// {{{ mortar // TODO
+// {{{ mortar 
 set g_balance_grenadelauncher_primary_type 0
 set g_balance_grenadelauncher_primary_damage 65
 set g_balance_grenadelauncher_primary_edgedamage 35
@@ -328,7 +328,7 @@ set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
 set g_balance_grenadelauncher_bouncefactor 0.7
 set g_balance_grenadelauncher_bouncestop 0.12
 // }}}
-// {{{ minelayer // TODO
+// {{{ minelayer 
 set g_balance_minelayer_damage 65
 set g_balance_minelayer_edgedamage 30
 set g_balance_minelayer_force 250
@@ -350,7 +350,7 @@ set g_balance_minelayer_remote_edgedamage 40
 set g_balance_minelayer_remote_radius 200
 set g_balance_minelayer_remote_force 300
 // }}}
-// {{{ electro // TODO
+// {{{ electro 
 set g_balance_electro_lightning 0
 set g_balance_electro_primary_damage 55
 set g_balance_electro_primary_edgedamage 5
@@ -398,7 +398,7 @@ set g_balance_crylink_primary_damage 23
 set g_balance_crylink_primary_edgedamage 0
 set g_balance_crylink_primary_force -55
 set g_balance_crylink_primary_radius 80
-set g_balance_crylink_primary_speed 6950
+set g_balance_crylink_primary_speed 6820
 set g_balance_crylink_primary_spread 0.03
 set g_balance_crylink_primary_shots 4
 set g_balance_crylink_primary_bounces 2
@@ -448,19 +448,19 @@ 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 78
+set g_balance_nex_primary_damage 72
 set g_balance_nex_primary_force 600
 set g_balance_nex_primary_refire 1.505
 set g_balance_nex_primary_animtime 0.3
-set g_balance_nex_primary_ammo 13
+set g_balance_nex_primary_ammo 5
 set g_balance_nex_primary_damagefalloff_mindist 9999999
 set g_balance_nex_primary_damagefalloff_maxdist 9999999
 set g_balance_nex_primary_damagefalloff_halflife 9999999
 set g_balance_nex_primary_damagefalloff_forcehalflife 9999999
 
-set g_balance_nex_secondary 0
-set g_balance_nex_secondary_charge 0
-set g_balance_nex_secondary_charge_rate 0.1
+set g_balance_nex_secondary 1
+set g_balance_nex_secondary_charge 1
+set g_balance_nex_secondary_charge_rate 0.25
 set g_balance_nex_secondary_chargepool 0
 set g_balance_nex_secondary_chargepool_regen 0.15
 set g_balance_nex_secondary_chargepool_pause_regen 1
@@ -469,23 +469,23 @@ set g_balance_nex_secondary_damage 80
 set g_balance_nex_secondary_force -500
 set g_balance_nex_secondary_refire 1.25
 set g_balance_nex_secondary_animtime 0.75
-set g_balance_nex_secondary_ammo 5
+set g_balance_nex_secondary_ammo 2
 set g_balance_nex_secondary_damagefalloff_mindist 9999999
 set g_balance_nex_secondary_damagefalloff_maxdist 9999999
 set g_balance_nex_secondary_damagefalloff_halflife 9999999
 set g_balance_nex_secondary_damagefalloff_forcehalflife 9999999
 
-set g_balance_nex_charge 0
+set g_balance_nex_charge 1
 set g_balance_nex_charge_mindmg 40
 set g_balance_nex_charge_start 0
 set g_balance_nex_charge_rate 0.1
 set g_balance_nex_charge_limit 0.5
 set g_balance_nex_charge_rot_rate 0
 set g_balance_nex_charge_rot_pause 0 // Dont rot down untill this long after release of charge button
-set g_balance_nex_charge_shot_multiplier 0.5
+set g_balance_nex_charge_shot_multiplier 0
 set g_balance_nex_charge_velocity_rate 0.2
-set g_balance_nex_charge_minspeed 400
-set g_balance_nex_charge_maxspeed 1000
+set g_balance_nex_charge_minspeed ""
+set g_balance_nex_charge_maxspeed ""
 // }}}
 // {{{ minstanex
 set g_balance_minstanex_refire 1
@@ -514,7 +514,7 @@ set g_balance_hagar_secondary_lifetime_rand 0
 set g_balance_hagar_secondary_refire 0.15
 set g_balance_hagar_secondary_ammo 2
 // }}}
-// {{{ rocketlauncher // TODO
+// {{{ rocketlauncher 
 set g_balance_rocketlauncher_damage 65
 set g_balance_rocketlauncher_edgedamage 25
 set g_balance_rocketlauncher_force 360
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 49f43b9c4dd9d8c2474636f89263955ba680f20c..18ce4a988194079a8b0ef0368ea96a8a1401ae92 100644 (file)
@@ -88,17 +88,17 @@ alias movetoteam_auto "sv_cmd movetoteam $1 auto"
 mod_q3bsp_lightmapmergepower 4
 
 // player defaults
-_cl_color 102
+_cl_color 112
 _cl_name Player
-_cl_playermodel models/player/umbra.iqm
+_cl_playermodel models/player/erebus.iqm
 _cl_playerskin 0
 seta crosshair 16
 seta crosshair_color "0.6 0.8 1"
-seta crosshair_alpha 0.3
-seta crosshair_size 0.5
+seta crosshair_alpha 0.300000
+seta crosshair_size 0.500000
 seta crosshair_dot 1
 seta crosshair_dot_alpha 1
-seta crosshair_dot_size 0.6
+seta crosshair_dot_size 0.600000
 seta crosshair_dot_color "1 0 0" "when != 0, use custom color for the crosshair dot"
 seta crosshair_pickup 0.25
 seta crosshair_pickup_speed 4
@@ -386,26 +386,8 @@ sv_jumpstep 1 // step up stairs while jumping, makes it easier to reach ledges
 set ekg 0      "Throw huge amounts of gibs"
 
 cl_movement 1
+cl_movement_track_canjump 0
 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"
@@ -437,9 +419,9 @@ set bot_ai_keyboard_treshold 0.57
 set bot_ai_aimskill_offset 0.3 "Amount of error induced to the bots aim"
 set bot_ai_aimskill_think 1 "Aiming velocity. Use values below 1 for slower aiming"
 set bot_ai_custom_weapon_priority_distances "300 850"  "Define close and far distances in any order. Based on the distance to the enemy bots will choose different weapons"
-set bot_ai_custom_weapon_priority_far   "minstanex nex campingrifle rocketlauncher minelayer grenadelauncher electro hagar hlac crylink laser uzi fireball seeker shotgun tuba"        "Desired weapons for far distances ordered by priority"
-set bot_ai_custom_weapon_priority_mid   "minstanex rocketlauncher nex fireball seeker minelayer grenadelauncher electro uzi campingrifle crylink hlac hagar shotgun laser tuba"        "Desired weapons for middle distances ordered by priority"
-set bot_ai_custom_weapon_priority_close "minstanex nex uzi hlac tuba seeker hagar crylink minelayer grenadelauncher shotgun electro campingrifle rocketlauncher laser fireball"        "Desired weapons for close distances ordered by priority"
+set bot_ai_custom_weapon_priority_far   "minstanex nex campingrifle electro rocketlauncher grenadelauncher hagar hlac crylink laser uzi fireball seeker shotgun tuba minelayer"        "Desired weapons for far distances ordered by priority"
+set bot_ai_custom_weapon_priority_mid   "minstanex rocketlauncher nex fireball seeker grenadelauncher electro uzi campingrifle crylink hlac hagar shotgun laser tuba minelayer"        "Desired weapons for middle distances ordered by priority"
+set bot_ai_custom_weapon_priority_close "minstanex shotgun nex uzi hlac tuba seeker hagar crylink grenadelauncher electro campingrifle rocketlauncher laser fireball minelayer"        "Desired weapons for close distances ordered by priority"
 set bot_ai_weapon_combo 1      "Enable bots to do weapon combos"
 set bot_ai_weapon_combo_threshold 0.3  "Try to make a combo N seconds after the last attack"
 set bot_ai_friends_aware_pickup_radius "500"   "Bots will not pickup items if a team mate is this distance near the item"
@@ -596,40 +578,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"
@@ -870,7 +868,7 @@ r_picmipsprites 0 // Xonotic uses sprites that should never be picmipped (team m
 r_picmipworld 1
 gl_picmip_world 0
 gl_picmip_sprites 0
-gl_picmip_other 2 // so, picmip -2 is best possible quality
+gl_picmip_other 1 // so, picmip -1 is best possible quality
 r_mipsprites 1
 r_mipskins 1
 r_shadow_realtime_world_lightmaps 1
@@ -1135,7 +1133,7 @@ set quit_and_redirect ""  "set to an IP to redirect all players at the end of the
 // singleplayer campaign
 set g_campaign 0
 set g_campaign_forceteam 0 "Forces the player to a given team in campaign mode, 1 = red, 2 = blue, 3 = yellow, 4 = pink"
-seta g_campaign_name "xonotic25"
+seta g_campaign_name "xonoticbeta"
 set g_campaign_skill 0
 set g_campaignxonotic20_index 0
 set g_campaignxonotic25_index 1
@@ -1391,8 +1389,6 @@ seta hud_panel_weapons_ammo_full_nails 200 "show 100% of the status bar at this
 seta hud_panel_weapons_ammo_full_cells 80 "show 100% of the status bar at this ammo count"
 seta hud_panel_weapons_ammo_full_rockets 80 "show 100% of the status bar at this ammo count"
 seta hud_panel_weapons_ammo_full_fuel 100 "show 100% of the status bar at this ammo count"
-seta hud_panel_weapons_timeout "3" "panel disappears if you don't switch weapon for this amount of seconds"
-seta hud_panel_weapons_timeout_effect "1" "disappearance effect: 0) no effect; 1) panel moves out of screen; 2) panel fades out"
 
 seta hud_panel_ammo_maxammo "40" "when you have this much ammo, the ammo status bar is full"
 
@@ -1538,7 +1534,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 +1623,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 +1641,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 +1981,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 +2061,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 f6e002ba6d1d69d19423656a818c4fcb0278ddb0..5a6deb9b9430f71a4bc3ce20a4ff8e180caee048 100644 (file)
@@ -2,7 +2,7 @@ cl_decals 1
 cl_decals_time 10
 cl_particles_quality 1
 gl_flashblend 0
-gl_picmip -2
+gl_picmip -1
 gl_texture_anisotropy 16
 mod_q3bsp_nolightmaps 0
 r_bloom 1
index e9f7b0cc76d33fe7cda7f4327dd308d20290622b..b6d7f04aa4b9f2d5121bce06e326877f22d72a99 100644 (file)
@@ -2,7 +2,7 @@ cl_decals 1
 cl_decals_time 10
 cl_particles_quality 1
 gl_flashblend 0
-gl_picmip -2
+gl_picmip -1
 gl_texture_anisotropy 16
 mod_q3bsp_nolightmaps 0
 r_bloom 1
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 8a946578f79e0e17351556bdef69de5169c7e8c3..a3f3ed39e51f0dd8961f77f80094f1f600986fd6 100644 (file)
@@ -45,6 +45,8 @@ seta hud_panel_weapons_complainbubble_color_unavailable "0 0.3 0.8"
 seta hud_panel_weapons_ammo_color "0 1 0"
 seta hud_panel_weapons_ammo_alpha "1"
 seta hud_panel_weapons_aspect "2"
+seta hud_panel_weapons_timeout "3"
+seta hud_panel_weapons_timeout_effect "1"
 
 seta hud_panel_ammo 1
 seta hud_panel_ammo_pos "0.190000 0.920000"
@@ -191,7 +193,7 @@ seta hud_panel_chat_bg_alpha ""
 seta hud_panel_chat_bg_border ""
 seta hud_panel_chat_bg_padding ""
 
-seta hud_panel_engineinfo 1
+seta hud_panel_engineinfo 0
 seta hud_panel_engineinfo_pos "0.910000 0.970000"
 seta hud_panel_engineinfo_size "0.090000 0.030000"
 seta hud_panel_engineinfo_bg "0"
index 8ee4ea7780133da438d856aa9c205b4048a2e4e1..8e39416314bdf665e1ad59b1cfaf26119ee926a5 100644 (file)
@@ -45,6 +45,8 @@ seta hud_panel_weapons_complainbubble_color_unavailable "0 0.3 0.8"
 seta hud_panel_weapons_ammo_color "0 1 0"
 seta hud_panel_weapons_ammo_alpha "1"
 seta hud_panel_weapons_aspect "2"
+seta hud_panel_weapons_timeout "0"
+seta hud_panel_weapons_timeout_effect "0"
 
 seta hud_panel_ammo 1
 seta hud_panel_ammo_pos "0.650000 0.890000"
index ba9e01a906d8b96f0540a0f40543f586248cc992..10f7afd149822e08d9b99e94521e17373d04dbf3 100644 (file)
@@ -45,6 +45,8 @@ seta hud_panel_weapons_complainbubble_color_unavailable "0 0.3 0.8"
 seta hud_panel_weapons_ammo_color "0 1 0"
 seta hud_panel_weapons_ammo_alpha "1"
 seta hud_panel_weapons_aspect "2"
+seta hud_panel_weapons_timeout "0"
+seta hud_panel_weapons_timeout_effect "0"
 
 seta hud_panel_ammo 1
 seta hud_panel_ammo_pos "0.450000 0.630000"
@@ -59,6 +61,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 dfecf74009385704191e561a0f00e1c87407aa76..681b7378e01fa3ce213ba3b552b2cca169f6913c 100644 (file)
@@ -45,6 +45,8 @@ seta hud_panel_weapons_complainbubble_color_unavailable "0 0.3 0.8"
 seta hud_panel_weapons_ammo_color "0 1 0"
 seta hud_panel_weapons_ammo_alpha "1"
 seta hud_panel_weapons_aspect "2"
+seta hud_panel_weapons_timeout "0"
+seta hud_panel_weapons_timeout_effect "0"
 
 seta hud_panel_ammo 1
 seta hud_panel_ammo_pos "0.160000 0.910000"
@@ -191,7 +193,7 @@ seta hud_panel_chat_bg_alpha ""
 seta hud_panel_chat_bg_border ""
 seta hud_panel_chat_bg_padding ""
 
-seta hud_panel_engineinfo 1
+seta hud_panel_engineinfo 0
 seta hud_panel_engineinfo_pos "0.887500 0.870000"
 seta hud_panel_engineinfo_size "0.112500 0.030000"
 seta hud_panel_engineinfo_bg "0"
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
diff --git a/particles/nexbeam.tga b/particles/nexbeam.tga
deleted file mode 100644 (file)
index cb8bd34..0000000
Binary files a/particles/nexbeam.tga and /dev/null 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 5536cec21eb71663b621e0cce499372c3e9624a9..2f3ec3b1744eaa7867499279891bf6acbed56904 100644 (file)
@@ -492,12 +492,15 @@ void HUD_Panel_ExportCfg(string cfgname)
                                        HUD_Write_PanelCvar_q("_ammo_color");
                                        HUD_Write_PanelCvar_q("_ammo_alpha");
                                        HUD_Write_PanelCvar_q("_aspect");
+                                       HUD_Write_PanelCvar_q("_timeout");
+                                       HUD_Write_PanelCvar_q("_timeout_effect");
                                        break;
                                case HUD_PANEL_AMMO:
                                        HUD_Write_PanelCvar_q("_onlycurrent");
                                        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:
@@ -1767,10 +1770,10 @@ void HUD_Weapons(void)
                                drawstring(wpnpos, getcommandkey(ftos(weapid), strcat("impulse ", ftos(weapid))), '1 1 0' * 0.5 * wpnsize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
 
                        // draw ammo status bar
-                       if(show_ammo && weapid != WEP_TUBA && weapid != WEP_LASER && weapid != WEP_PORTO)
+                       if(show_ammo && self.weapon != WEP_TUBA && self.weapon != WEP_LASER && self.weapon != WEP_PORTO)
                        {
                                a = 0;
-                               type = GetAmmoTypeForWep(weapid);
+                               type = GetAmmoTypeForWep(self.weapon);
                                if(type != -1)
                                        a = getstati(GetAmmoStat(type)); // how much ammo do we have?
 
@@ -3562,7 +3565,7 @@ void HUD_Radar(void)
        if(hud_panel_radar_rotation == 0)
        {
                // max-min distance must fit the radar in any rotation
-               bigsize = vlen_minnorm2d(teamradar_size2d) * scale2d / (1.05 * vlen2d(mi_max - mi_min));
+               bigsize = vlen_minnorm2d(teamradar_size2d) * scale2d / (1.05 * vlen2d(mi_scale));
        }
        else
        {
@@ -3590,7 +3593,7 @@ void HUD_Radar(void)
                  f * bigsize
                + (1 - f) * normalsize;
        teamradar_origin3d_in_texcoord = teamradar_3dcoord_to_texcoord(
-                 f * (mi_min + mi_max) * 0.5
+                 f * mi_center
                + (1 - f) * view_origin);
 
        color1 = GetPlayerColor(player_localentnum-1);
@@ -5213,6 +5216,8 @@ void HUD_Main (void)
                }
        }
 
+    current_player = (spectatee_status > 0) ? spectatee_status : player_localentnum;
+
        // draw the dock
        if(autocvar_hud_dock != "" && autocvar_hud_dock != "0")
        {
@@ -5220,7 +5225,7 @@ void HUD_Main (void)
                vector color;
                float hud_dock_color_team = autocvar_hud_dock_color_team;
                if((teamplay) && hud_dock_color_team) {
-                       f = stof(getplayerkey(player_localentnum - 1, "colors"));
+                       f = stof(getplayerkey(current_player - 1, "colors"));
                        color = colormapPaletteColor(mod(f, 16), 1) * hud_dock_color_team;
                }
                else if(autocvar_hud_configure_teamcolorforced && autocvar__hud_configure && hud_dock_color_team) {
@@ -5230,11 +5235,11 @@ void HUD_Main (void)
                {
                        string hud_dock_color = autocvar_hud_dock_color;
                        if(hud_dock_color == "shirt") {
-                               f = stof(getplayerkey(player_localentnum - 1, "colors"));
+                               f = stof(getplayerkey(current_player - 1, "colors"));
                                color = colormapPaletteColor(floor(f / 16), 0);
                        }
                        else if(hud_dock_color == "pants") {
-                               f = stof(getplayerkey(player_localentnum - 1, "colors"));
+                               f = stof(getplayerkey(current_player - 1, "colors"));
                                color = colormapPaletteColor(mod(f, 16), 1);
                        }
                        else
index bbb57d91ff01686dbe7aabcbeb448f0a745d9111..21e3746b560811ee3d89c7b422b8c28f5f55a1bc 100644 (file)
@@ -80,6 +80,8 @@ var string panel_bg_border_str;
 var float panel_bg_padding;
 var string panel_bg_padding_str;
 
+float current_player;
+
 // Because calling lots of functions in QC apparently cuts fps in half on many machines:
 // ----------------------
 // MACRO HELL STARTS HERE
@@ -125,7 +127,7 @@ if(!autocvar__hud_configure && panel_bg_str == "0") {\
 // Get value for panel_bg_color: if "" fetch default, else use panel_bg_color. Convert pants, shirt or teamcolor into a vector.
 #define HUD_Panel_GetColor()\
 if((teamplay) && panel_bg_color_team) {\
-       panel_bg_color = colormapPaletteColor(mod(stof(getplayerkey(player_localentnum - 1, "colors")), 16), 1) * panel_bg_color_team;\
+       panel_bg_color = colormapPaletteColor(mod(stof(getplayerkey(current_player - 1, "colors")), 16), 1) * panel_bg_color_team;\
 } else if (autocvar_hud_configure_teamcolorforced && autocvar__hud_configure && panel_bg_color_team) {\
        panel_bg_color = '1 0 0' * panel_bg_color_team;\
 } else {\
@@ -133,9 +135,9 @@ if((teamplay) && panel_bg_color_team) {\
                panel_bg_color = autocvar_hud_panel_bg_color;\
        } else {\
                if(panel_bg_color_str == "shirt") {\
-                       panel_bg_color = colormapPaletteColor(floor(stof(getplayerkey(player_localentnum - 1, "colors")) / 16), 0);\
+                       panel_bg_color = colormapPaletteColor(floor(stof(getplayerkey(current_player - 1, "colors")) / 16), 0);\
                } else if(panel_bg_color_str == "pants") {\
-                       panel_bg_color = colormapPaletteColor(mod(stof(getplayerkey(player_localentnum - 1, "colors")), 16), 1);\
+                       panel_bg_color = colormapPaletteColor(mod(stof(getplayerkey(current_player - 1, "colors")), 16), 1);\
                } else {\
                        panel_bg_color = stov(panel_bg_color_str);\
                }\
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 8584d24f2b26a52fad6a308b753bfdf3dcab4463..1a35579839537d024d714813abd2e0b70cb1ac2d 100644 (file)
@@ -409,7 +409,7 @@ void Ent_WaypointSprite()
 
 void WaypointSprite_Load()
 {
-       waypointsprite_fadedistance = vlen(mi_max - mi_min);
+       waypointsprite_fadedistance = vlen(mi_scale);
        waypointsprite_normdistance = autocvar_g_waypointsprite_normdistance;
        waypointsprite_minscale = autocvar_g_waypointsprite_minscale;
        waypointsprite_minalpha = autocvar_g_waypointsprite_minalpha;
@@ -424,7 +424,7 @@ void WaypointSprite_Load()
        waypointsprite_crosshairfadedistance = autocvar_g_waypointsprite_crosshairfadedistance;
        waypointsprite_distancefadealpha = autocvar_g_waypointsprite_distancefadealpha;
        waypointsprite_distancefadescale = autocvar_g_waypointsprite_distancefadescale;
-       waypointsprite_distancefadedistance = vlen(mi_max - mi_min) * autocvar_g_waypointsprite_distancefadedistancemultiplier;
+       waypointsprite_distancefadedistance = waypointsprite_fadedistance * autocvar_g_waypointsprite_distancefadedistancemultiplier;
        waypointsprite_alpha = autocvar_g_waypointsprite_alpha * (1 - autocvar__menu_alpha);
 
        if(!waypointsprite_initialized)
@@ -461,6 +461,6 @@ void WaypointSprite_Load()
                        db_put(tempdb, sname, ftos(max(f, stof(db_get(tempdb, sname)))));
                }
                search_end(dh);
+               waypointsprite_initialized = true;
        }
-       waypointsprite_initialized = 1;
 }
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 44f8751733aab62e96406a890da8cee451966806..1bfbca6ae107cf27eab18fe437035669cc140e02 100644 (file)
@@ -1837,7 +1837,13 @@ float get_model_parameters(string m, float sk)
        fn = get_model_datafilename(m, sk, "txt");
        fh = fopen(fn, FILE_READ);
        if(fh < 0)
-               return 0;
+       {
+               sk = 0;
+               fn = get_model_datafilename(m, sk, "txt");
+               fh = fopen(fn, FILE_READ);
+               if(fh < 0)
+                       return 0;
+       }
 
        get_model_parameters_modelname = m;
        get_model_parameters_modelskin = sk;
@@ -1953,3 +1959,23 @@ float vercmp(string v1, string v2)
 
        return vercmp_recursive(v1, v2);
 }
+
+float u8_strsize(string s)
+{
+       float l, i, c;
+       l = 0;
+       for(i = 0; ; ++i)
+       {
+               c = str2chr(s, i);
+               if(c <= 0)
+                       break;
+               ++l;
+               if(c >= 0x80)
+                       ++l;
+               if(c >= 0x800)
+                       ++l;
+               if(c >= 0x10000)
+                       ++l;
+       }
+       return l;
+}
index cfb955e3566cb44d576ab6b09963eed1fe79c1b2..79b93d3ede3d238d5e6d8ad4eaf4f787aa331ea0 100644 (file)
@@ -247,3 +247,5 @@ vector NearestPointOnBox(entity box, vector org);
 #endif
 
 float vercmp(string v1, string v2);
+
+float u8_strsize(string s);
index 2d64590306139cc97f1b860ac56c5e7a72de836a..750bc83b890453eb917fcaaac3aa804a54142727 100644 (file)
@@ -25,7 +25,7 @@ CLASS(InputBox) EXTENDS(Label)
        ATTRIB(InputBox, forbiddenCharacters, string, "")
        ATTRIB(InputBox, color, vector, '1 1 1')
        ATTRIB(InputBox, colorF, vector, '1 1 1')
-       ATTRIB(InputBox, maxLength, float, 255)
+       ATTRIB(InputBox, maxLength, float, 255) // if negative, it counts bytes, not chars
 ENDCLASS(InputBox)
 void InputBox_Clear_Click(entity btn, entity me);
 #endif
@@ -79,8 +79,16 @@ void InputBox_enterText(entity me, string ch)
        for(i = 0; i < strlen(ch); ++i)
                if(strstrofs(me.forbiddenCharacters, substring(ch, i, 1), 0) > -1)
                        return;
-       if(strlen(ch) + strlen(me.text) > me.maxLength)
-               return;
+       if(me.maxLength > 0)
+       {
+               if(strlen(ch) + strlen(me.text) > me.maxLength)
+                       return;
+       }
+       else if(me.maxLength < 0)
+       {
+               if(u8_strsize(ch) + u8_strsize(me.text) > -me.maxLength)
+                       return;
+       }
        me.setText(me, strcat(substring(me.text, 0, me.cursorPos), ch, substring(me.text, me.cursorPos, strlen(me.text) - me.cursorPos)));
        me.cursorPos += strlen(ch);
 }
index a49e3529c0cbcc099a78094f1e68e690fc01ce86..417cfa6108891e7b93396b73cf7a26506de07284 100644 (file)
@@ -6,7 +6,7 @@ CLASS(XonoticAdvancedDialog) EXTENDS(XonoticDialog)
        ATTRIB(XonoticAdvancedDialog, title, string, "Advanced server settings")
        ATTRIB(XonoticAdvancedDialog, color, vector, SKINCOLOR_DIALOG_ADVANCED)
        ATTRIB(XonoticAdvancedDialog, intendedWidth, float, 0.5)
-       ATTRIB(XonoticAdvancedDialog, rows, float, 13)
+       ATTRIB(XonoticAdvancedDialog, rows, float, 12)
        ATTRIB(XonoticAdvancedDialog, columns, float, 3)
        ATTRIB(XonoticAdvancedDialog, refilterEntity, entity, NULL)
 ENDCLASS(XonoticAdvancedDialog)
@@ -35,9 +35,6 @@ void XonoticAdvancedDialog_fill(entity me)
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Game speed:"));
                me.TD(me, 1, 1.7, e = makeXonoticSlider(0.5, 2.0, 0.1, "slowmo"));
-       me.TR(me);
-               me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.2, e = makeXonoticCheckBoxEx(2, 0, "g_antilag", "AntiLag"));
        me.TR(me);
        me.TR(me);
                me.TD(me, 1, 1.2, makeXonoticTextLabel(0, "Teamplay settings:"));
index 562c097ce8f228d6738fdf6c8bc0f8cd6a02c9f1..586896171e76df85676739208b209b6a113524b3 100644 (file)
@@ -46,7 +46,7 @@ void XonoticPlayerSettingsTab_fill(entity me)
        me.TR(me);
                me.TD(me, 1, 3.0, box = makeXonoticInputBox(1, "_cl_name"));
                        box.forbiddenCharacters = "\r\n\\\"$"; // don't care, isn't getting saved
-                       box.maxLength = 63;
+                       box.maxLength = -63; // negativ means encoded length in bytes
                        label.textEntity = box;
        me.TR(me);
                me.TD(me, 5, 1, e = makeXonoticColorpicker(box));
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 5ff519bd70695e15627a7680d7342b2ef9f441d7..fea11ec930d644bd47feadd9804851e1581f73df 100644 (file)
@@ -724,15 +724,6 @@ void PutObserverInServer (void)
                self.frags = FRAGS_SPECTATOR;
 }
 
-float RestrictSkin(float s)
-{
-       if(!teams_matter)
-               return s;
-       if(s == 6)
-               return 6;
-       return mod(s, 3);
-}
-
 void FixPlayermodel()
 {
        local string defaultmodel;
@@ -794,7 +785,7 @@ void FixPlayermodel()
                }
 
                oldskin = self.skinindex;
-               self.skinindex = RestrictSkin(stof(self.playerskin));
+               self.skinindex = stof(self.playerskin);
        }
 
        if(chmdl || oldskin != self.skinindex)
@@ -1222,6 +1213,7 @@ Called when a client types 'kill' in the console
 =============
 */
 
+.float clientkill_nexttime;
 void ClientKill_Now_TeamChange()
 {
        if(self.killindicator_teamchange == -1)
@@ -1229,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()
 {
@@ -1263,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)
@@ -1275,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"));
                        }
@@ -1286,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();
@@ -1314,7 +1334,7 @@ void ClientKill_TeamChange (float targetteam) // 0 = don't change, -1 = auto
                        self.killindicator.nextthink = time + (self.lip) * 0.05;
                        self.killindicator.cnt = ceil(killtime);
                        self.killindicator.count = bound(0, ceil(killtime), 10);
-                       sprint(self, strcat("^1You'll be dead in ", ftos(self.killindicator.cnt), " seconds\n"));
+                       //sprint(self, strcat("^1You'll be dead in ", ftos(self.killindicator.cnt), " seconds\n"));
 
                        for(e = world; (e = find(e, classname, "body")) != world; )
                        {
@@ -1334,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);
        }
 }
 
@@ -1355,20 +1379,15 @@ void ClientKill (void)
                ClientKill_TeamChange(0);
 }
 
-void CTS_ClientKill_Think (void)
-{
-       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
+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
 {
-       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)
@@ -2718,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 27bd209c501ca6d799f48ec6e13f822b6e7eee86..342cbbc3d69e4a8e6e9a011c246e14d892f24a09 100644 (file)
@@ -168,7 +168,7 @@ void CopyBody(float keepvelocity)
 float player_getspecies()
 {
        float s;
-       get_model_parameters(self.playermodel, self.skinindex);
+       get_model_parameters(self.model, self.skinindex);
        s = get_model_parameters_species;
        get_model_parameters(string_null, 0);
        if(s < 0)
@@ -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;
@@ -1224,7 +1229,7 @@ void ClearPlayerSounds()
 #undef _VOICEMSG
 }
 
-void LoadPlayerSounds(string f, float first)
+float LoadPlayerSounds(string f, float first)
 {
        float fh;
        string s;
@@ -1233,7 +1238,7 @@ void LoadPlayerSounds(string f, float first)
        if(fh < 0)
        {
                dprint("Player sound file not found: ", f, "\n");
-               return;
+               return 0;
        }
        while((s = fgets(fh)))
        {
@@ -1249,6 +1254,7 @@ void LoadPlayerSounds(string f, float first)
                self.field = strzone(strcat(argv(1), " ", argv(2)));
        }
        fclose(fh);
+       return 1;
 }
 
 .float modelindex_for_playersound;
@@ -1262,7 +1268,8 @@ void UpdatePlayerSounds()
        self.skinindex_for_playersound = self.skinindex;
        ClearPlayerSounds();
        LoadPlayerSounds("sound/player/default.sounds", 1);
-       LoadPlayerSounds(get_model_datafilename(self.playermodel, self.skinindex, "sounds"), 0);
+       if(!LoadPlayerSounds(get_model_datafilename(self.model, self.skinindex, "sounds"), 0))
+               LoadPlayerSounds(get_model_datafilename(self.model, 0, "sounds"), 0);
 }
 
 void FakeGlobalSound(string sample, float chan, float voicetype)
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..9203d87a1ae760f97561fff1dbd9a1fe5b19d60f 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" ) );
                }
@@ -272,7 +261,7 @@ void SV_ParseClientCommand(string s) {
                if not(self.flags & FL_CLIENT)
                        return;
 
-               if((inWarmupStage && 0 >= g_warmup_limit) // with unlimited warmup players have to be able to restart
+               if((inWarmupStage)
                   || autocvar_sv_ready_restart || g_race_qualifying == 2)
                {
                        if(!readyrestart_happened || autocvar_sv_ready_restart_repeatable)
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..e2a123adc445f1a7eb0291001bf828357d6db770 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_");
@@ -254,12 +255,15 @@ void cvar_changes_init()
                BADPREFIX("gl_");
                BADPREFIX("joy");
                BADPREFIX("hud_");
+               BADPREFIX("m_");
                BADPREFIX("menu_");
                BADPREFIX("net_slist_");
                BADPREFIX("r_");
                BADPREFIX("sbar_");
                BADPREFIX("scr_");
                BADPREFIX("snd_");
+               BADPREFIX("show");
+               BADPREFIX("sensitivity");
                BADPREFIX("userbind");
                BADPREFIX("v_");
                BADPREFIX("vid_");
@@ -321,6 +325,7 @@ void cvar_changes_init()
                BADCVAR("g_ctf");
                BADCVAR("g_dm");
                BADCVAR("g_domination");
+               BADCVAR("g_freezetag");
                BADCVAR("g_keyhunt");
                BADCVAR("g_keyhunt_teams");
                BADCVAR("g_onslaught");
@@ -367,6 +372,8 @@ void cvar_changes_init()
                BADCVAR("leadlimit_and_fraglimit");
                BADCVAR("leadlimit_override");
                BADCVAR("sv_checkforpacketsduringsleep");
+               BADCVAR("pausable");
+               BADCVAR("sv_timeout");
                BADPREFIX("crypto_");
                BADPREFIX("g_chat_");
                BADPREFIX("net_");
@@ -414,6 +421,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");
@@ -445,6 +453,8 @@ void cvar_changes_init()
                BADCVAR("sv_vote_master_password");
                BADCVAR("sv_vote_simple_majority_factor");
                BADCVAR("timelimit_override");
+               BADCVAR("g_warmup");
+               BADPREFIX("g_warmup_");
 
                if(autocvar_g_minstagib)
                {
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 47e1a7ecd44b11fe7f7a46ae6cbdc8b7d5302040..7904e30ef1efab3ce7ed4dba8214781522401020 100644 (file)
@@ -85,6 +85,7 @@ void PlayerStats_Sent_URI_Get_Callback(float id, float status, string data)
                playerstats_waitforme = TRUE;
 }
 
+//#NO AUTOCVARS START
 void PlayerStats_Shutdown()
 {
        string p, pn;
@@ -109,6 +110,8 @@ void PlayerStats_Shutdown()
                bufstr_set(b, i++, sprintf("T %s.%06d", strftime(FALSE, "%s"), floor(random() * 1000000)));
                bufstr_set(b, i++, sprintf("G %s", GetGametype()));
                bufstr_set(b, i++, sprintf("M %s", GetMapname()));
+               bufstr_set(b, i++, sprintf("S %s", cvar_string("hostname")));
+               bufstr_set(b, i++, sprintf("C %d", cvar_purechanges_count));
                for(p = playerstats_last; (pn = db_get(playerstats_db, sprintf("%s:*", p))) != ""; p = pn)
                {
                        bufstr_set(b, i++, sprintf("P %s", p));
@@ -137,6 +140,7 @@ void PlayerStats_Shutdown()
        db_close(playerstats_db);
        playerstats_db = -1;
 }
+//#NO AUTOCVARS END
 
 void PlayerStats_AddGlobalInfo(entity p)
 {
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 d1f4e5d5ecc9b04852885fb5c26f1809bc820374..4495b720c54e02eecd3ab2ca62e772aa31771adb 100644 (file)
@@ -177,27 +177,27 @@ void W_Crylink_LinkJoinEffect_Think()
                                if(autocvar_g_balance_crylink_secondary_joinexplode)
                                {
                                        n = n / autocvar_g_balance_crylink_secondary_shots;
-                                       RadiusDamage (e, e.realowner, autocvar_g_balance_crylink_secondary_joinexplode_damage * n, 
-                                                                       autocvar_g_balance_crylink_secondary_joinexplode_edgedamage * n, 
-                                                                       autocvar_g_balance_crylink_secondary_joinexplode_radius * n, e.realowner, 
+                                       RadiusDamage (e, e.realowner, autocvar_g_balance_crylink_secondary_joinexplode_damage * n,
+                                                                       autocvar_g_balance_crylink_secondary_joinexplode_edgedamage * n,
+                                                                       autocvar_g_balance_crylink_secondary_joinexplode_radius * n, e.realowner,
                                                                        autocvar_g_balance_crylink_secondary_joinexplode_force * n, e.projectiledeathtype, other);
 
                                        pointparticles(particleeffectnum("crylink_joinexplode"), self.origin, '0 0 0', n);
-                               }                               
+                               }
                        }
                        else
                        {
                                if(autocvar_g_balance_crylink_primary_joinexplode)
                                {
                                        n = n / autocvar_g_balance_crylink_primary_shots;
-                                       RadiusDamage (e, e.realowner, autocvar_g_balance_crylink_primary_joinexplode_damage * n, 
-                                                                       autocvar_g_balance_crylink_primary_joinexplode_edgedamage * n, 
-                                                                       autocvar_g_balance_crylink_primary_joinexplode_radius * n, e.realowner, 
+                                       RadiusDamage (e, e.realowner, autocvar_g_balance_crylink_primary_joinexplode_damage * n,
+                                                                       autocvar_g_balance_crylink_primary_joinexplode_edgedamage * n,
+                                                                       autocvar_g_balance_crylink_primary_joinexplode_radius * n, e.realowner,
                                                                        autocvar_g_balance_crylink_primary_joinexplode_force * n, e.projectiledeathtype, other);
 
                                        pointparticles(particleeffectnum("crylink_joinexplode"), self.origin, '0 0 0', n);
-                               }                               
-                       }                       
+                               }
+                       }
                }
        }
        remove(self);
@@ -511,7 +511,7 @@ float w_crylink(float req)
 {
        if (req == WR_AIM)
        {
-               if (random() > 0.15)
+               if (random() < 0.10)
                        self.BUTTON_ATCK = bot_aim(autocvar_g_balance_crylink_primary_speed, 0, autocvar_g_balance_crylink_primary_middle_lifetime, FALSE);
                else
                        self.BUTTON_ATCK2 = bot_aim(autocvar_g_balance_crylink_secondary_speed, 0, autocvar_g_balance_crylink_secondary_middle_lifetime, FALSE);
@@ -549,21 +549,21 @@ float w_crylink(float req)
                                {
                                        vector pos;
                                        entity linkjoineffect;
-                                       
-                                       
+
+
                                        if(self.crylink_waitrelease == 1)
                                        {
                                                pos = W_Crylink_LinkJoin(self.crylink_lastgroup, autocvar_g_balance_crylink_primary_joinspread * autocvar_g_balance_crylink_primary_speed, autocvar_g_balance_crylink_primary_jointime);
-                                               
+
                                        }
                                        else
                                        {
                                                pos = W_Crylink_LinkJoin(self.crylink_lastgroup, autocvar_g_balance_crylink_secondary_joinspread * autocvar_g_balance_crylink_secondary_speed, autocvar_g_balance_crylink_secondary_jointime);
                                        }
-                                       
+
                                        linkjoineffect = spawn();
                                        linkjoineffect.think = W_Crylink_LinkJoinEffect_Think;
-                                       linkjoineffect.classname = "linkjoineffect";                                    
+                                       linkjoineffect.classname = "linkjoineffect";
                                        linkjoineffect.nextthink = time + w_crylink_linkjoin_time;
                                        linkjoineffect.owner = self;
                                        setorigin(linkjoineffect, pos);
index da29a441843d3f9122f683f0522276feb57d724d..1ae02b1613e47c5f1e7ba97a347688cd0a35b2ce 100644 (file)
@@ -62,7 +62,7 @@ void W_Plasma_Explode_Combo (void)
 void W_Plasma_Touch (void)
 {
        //self.velocity = self.velocity  * 0.1;
-       
+
        PROJECTILE_TOUCH;
        if (other.takedamage == DAMAGE_AIM) {
                W_Plasma_Explode ();
@@ -178,10 +178,10 @@ void W_Electro_Attack2()
        proj.health = autocvar_g_balance_electro_secondary_health;
        proj.event_damage = W_Plasma_Damage;
        proj.flags = FL_PROJECTILE;
-       
+
        proj.bouncefactor = autocvar_g_balance_electro_secondary_bouncefactor;
        proj.bouncestop = autocvar_g_balance_electro_secondary_bouncestop;
-       
+
 #if 0
        entity p2;
        p2 = spawn();
@@ -351,7 +351,14 @@ float w_electro(float req)
                        self.bot_secondary_electromooth = 0;
                if(self.bot_secondary_electromooth == 0)
                {
-                       if(bot_aim(autocvar_g_balance_electro_primary_speed, 0, autocvar_g_balance_electro_primary_lifetime, FALSE))
+                       float shoot;
+
+                       if(autocvar_g_balance_electro_primary_speed)
+                               shoot = bot_aim(autocvar_g_balance_electro_primary_speed, 0, autocvar_g_balance_electro_primary_lifetime, FALSE);
+                       else
+                               shoot = bot_aim(1000000, 0, 0.001, FALSE);
+
+                       if(shoot)
                        {
                                self.BUTTON_ATCK = TRUE;
                                if(random() < 0.01) self.bot_secondary_electromooth = 1;
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 d9bb056ee6c6c8e65678509ba6c4ff1b91041411..08c4a901e12083d7bdd972ed8755e3010cf97d9e 100644 (file)
@@ -100,10 +100,10 @@ void spawnfunc_weapon_shotgun(); // defined in t_items.qc
 float w_shotgun(float req)
 {
        if (req == WR_AIM)
-               if(vlen(self.origin-self.enemy.origin)>200)
-                       self.BUTTON_ATCK = bot_aim(1000000, 0, 0.001, FALSE);
-               else
+               if(vlen(self.origin-self.enemy.origin) <= autocvar_g_balance_shotgun_secondary_melee_range)
                        self.BUTTON_ATCK2 = bot_aim(1000000, 0, 0.001, FALSE);
+               else
+                       self.BUTTON_ATCK = bot_aim(1000000, 0, 0.001, FALSE);
        else if (req == WR_THINK)
        {
                if (self.BUTTON_ATCK)
index f71fbe2d985b37fc9279f11f98009f307c5540c5..f4141c8a3df01899ca3754c2bcb20c8a98f24cfe 100644 (file)
@@ -604,8 +604,38 @@ void WarpZone_StartFrame()
                self = e;
                WarpZones_Reconnect();
        }
+
+       entity oldself, oldother;
+       oldself = self;
+       oldother = other;
        for(e = world; (e = nextent(e)); )
+       {
                WarpZone_StoreProjectileData(e);
+               float f;
+               f = clienttype(e);
+               if(f == CLIENTTYPE_REAL)
+               {
+                       if(e.solid != SOLID_NOT) // not spectating?
+                               continue;
+                       if(e.movetype != MOVETYPE_NOCLIP && e.movetype != MOVETYPE_FLY) // not spectating? (this is to catch observers)
+                               continue;
+                       self = WarpZone_Find(e.origin + e.mins, e.origin + e.maxs);
+                       if(!self)
+                               continue;
+                       other = e;
+                       if(WarpZoneLib_ExactTrigger_Touch())
+                               continue;
+                       WarpZone_Teleport(e); // NOT triggering targets by this!
+               }
+               if(f == CLIENTTYPE_NOTACLIENT)
+               {
+                       for(; (e = nextent(e)); )
+                               WarpZone_StoreProjectileData(e);
+                       break;
+               }
+       }
+       self = oldself;
+       other = oldother;
 }
 
 .float warpzone_reconnecting;
index 994a1c566ea261be3c9ba87a6b372fe53f4bff2e..a85fbab69b2c430a37a44b7c9bb3e6c885cf4e05 100644 (file)
--- a/quake.rc
+++ b/quake.rc
@@ -4,9 +4,8 @@ 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
 //play announcer/male/welcome.ogg
-crypto_keygen 0 http://rm.endoftheinternet.org/~xonotic/keygen/?ca=0&key=
+crypto_keygen 0 http://ca.xonotic.org/?ca=0&key=
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"
index 0e4cb86289e81aecac9046e00f6c15e27c3739b8..ec46525c90a1ec87dea004ba58f94e62ad837625 100644 (file)
@@ -20,6 +20,10 @@ FruitieX (game / web)
 *3D Art
 morphed
 
+*Concept Art
+LJFHutch
+theShadow
+
 *Level Design
 FruitieX
 MirceaKitsune