]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into mirceakitsune/hud_postprocessing
authorMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Sat, 21 May 2011 12:15:34 +0000 (15:15 +0300)
committerMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Sat, 21 May 2011 12:15:34 +0000 (15:15 +0300)
55 files changed:
balanceSamual.cfg
defaultXonotic.cfg
gfx/hud/default/nametag_statusbar.tga [new file with mode: 0644]
gfx/hud/luminos/nametag_statusbar.tga [new file with mode: 0644]
physicsCPMA.cfg
physicsFruit.cfg
physicsHavoc.cfg
physicsLeeStricklin-ModdedFruit.cfg
physicsLeeStricklin.cfg
physicsLeeStricklinOld.cfg
physicsLzd.cfg
physicsNexuiz10.cfg
physicsNexuiz11.cfg
physicsNexuiz151.cfg
physicsNexuiz151b.cfg
physicsNexuiz16rc1.cfg
physicsNexuiz20.cfg
physicsNexuiz25.cfg
physicsNexuiz26.cfg
physicsNoQWBunny-nexbased.cfg
physicsQ.cfg
physicsQ2.cfg
physicsQ2a.cfg
physicsQ3.cfg
physicsQBF.cfg
physicsQBFplus.cfg
physicsSamual.cfg
physicsWarsow.cfg
physicsWarsowClassicBunny.cfg
physicsWarsowDev.cfg
physicsX.cfg [new file with mode: 0644]
physicsX0.cfg [deleted file]
physicsX010.cfg [new file with mode: 0644]
physicsXPM.cfg
physicsXPMLight.cfg
qcsrc/client/Main.qc
qcsrc/client/View.qc
qcsrc/client/autocvars.qh
qcsrc/client/hud.qc
qcsrc/client/main.qh
qcsrc/client/miscfunctions.qc
qcsrc/client/shownames.qc
qcsrc/server/autocvars.qh
qcsrc/server/cl_client.qc
qcsrc/server/cl_physics.qc
qcsrc/server/cl_player.qc
qcsrc/server/defs.qh
qcsrc/server/domination.qc
qcsrc/server/ent_cs.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/playerstats.qc
textures/pickups.tga [deleted file]
textures/pickups_bump.tga [deleted file]
textures/pickups_gloss.tga [deleted file]
textures/pickups_glow.tga [deleted file]

index 441b604020d6636fb1d90ea0ffcf1c25889d8765..f10c2600a1647758caa2b3e04a6890210c3ceffc 100644 (file)
@@ -110,13 +110,13 @@ set g_pickup_respawntimejitter_ammo 0
 // }}}
 
 // {{{ regen/rot
-set g_balance_health_regen 0
-set g_balance_health_regenlinear 5
+set g_balance_health_regen 0.08
+set g_balance_health_regenlinear 0.5
 set g_balance_pause_health_regen 5
 set g_balance_pause_health_regen_spawn 0
 set g_balance_health_rot 0.04
-set g_balance_health_rotlinear 1
-set g_balance_pause_health_rot 0.5
+set g_balance_health_rotlinear 0.75
+set g_balance_pause_health_rot 1
 set g_balance_pause_health_rot_spawn 5
 set g_balance_health_regenstable 100
 set g_balance_health_rotstable 100
@@ -124,7 +124,7 @@ set g_balance_health_limit 999
 set g_balance_armor_regen 0
 set g_balance_armor_regenlinear 0
 set g_balance_armor_rot 0.04
-set g_balance_armor_rotlinear 1
+set g_balance_armor_rotlinear 0.75
 set g_balance_pause_armor_rot 1
 set g_balance_pause_armor_rot_spawn 5
 set g_balance_armor_regenstable 100
@@ -215,7 +215,7 @@ set g_balance_grapplehook_health 130
 // {{{ laser
 set g_balance_laser_primary_damage 25
 set g_balance_laser_primary_edgedamage 12.5
-set g_balance_laser_primary_force 175
+set g_balance_laser_primary_force 250
 set g_balance_laser_primary_radius 70
 set g_balance_laser_primary_speed 6000
 set g_balance_laser_primary_spread 0
@@ -225,8 +225,8 @@ set g_balance_laser_primary_lifetime 5
 set g_balance_laser_primary_shotangle 0
 set g_balance_laser_primary_delay 0
 set g_balance_laser_primary_gauntlet 0
-set g_balance_laser_primary_force_zscale 2 // 350 upforce
-set g_balance_laser_primary_force_velocitybias 0.3
+set g_balance_laser_primary_force_zscale 1.5
+set g_balance_laser_primary_force_velocitybias 0
 set g_balance_laser_primary_force_other_scale 1
 set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
 set g_balance_laser_secondary_damage 25
@@ -286,14 +286,14 @@ set g_balance_uzi_burst_force 20
 set g_balance_uzi_burst_ammo 3
 
 set g_balance_uzi_first 1
-set g_balance_uzi_first_damage 18
-set g_balance_uzi_first_force 20
+set g_balance_uzi_first_damage 16
+set g_balance_uzi_first_force 5
 set g_balance_uzi_first_spread 0.03
 set g_balance_uzi_first_refire 0.2
 set g_balance_uzi_first_ammo 1
 
 set g_balance_uzi_sustained_damage 14
-set g_balance_uzi_sustained_force 20
+set g_balance_uzi_sustained_force 5
 set g_balance_uzi_sustained_spread 0.04
 set g_balance_uzi_sustained_refire 0.1
 set g_balance_uzi_sustained_ammo 1
@@ -406,13 +406,13 @@ set g_balance_electro_secondary_ammo 2
 set g_balance_electro_secondary_health 5
 set g_balance_electro_secondary_damageforcescale 4
 set g_balance_electro_secondary_count 3
-set g_balance_electro_secondary_bouncefactor 0.5
-set g_balance_electro_secondary_bouncestop 0.075
+set g_balance_electro_secondary_bouncefactor 0.4
+set g_balance_electro_secondary_bouncestop 0.05
 set g_balance_electro_combo_damage 40
 set g_balance_electro_combo_edgedamage 20
 set g_balance_electro_combo_force 120
 set g_balance_electro_combo_radius 175
-set g_balance_electro_combo_comboradius 250
+set g_balance_electro_combo_comboradius 275
 set g_balance_electro_combo_speed 2000
 set g_balance_electro_reload_ammo 0 //default: 20
 set g_balance_electro_reload_time 2
@@ -528,7 +528,7 @@ set g_balance_minstanex_laser_ammo 0
 set g_balance_minstanex_reload_ammo 0 //default: 50
 set g_balance_minstanex_reload_time 2
 // }}}
-// {{{ hagar // TO BE REMOVED
+// {{{ hagar
 set g_balance_hagar_primary_damage 30
 set g_balance_hagar_primary_edgedamage 15
 set g_balance_hagar_primary_force 50
@@ -539,17 +539,17 @@ set g_balance_hagar_primary_lifetime 5
 set g_balance_hagar_primary_refire 0.15
 set g_balance_hagar_primary_ammo 1
 set g_balance_hagar_secondary 1
-set g_balance_hagar_secondary_load 0
+set g_balance_hagar_secondary_load 1
 set g_balance_hagar_secondary_load_speed 0.6
 set g_balance_hagar_secondary_load_max 4
-set g_balance_hagar_secondary_load_hold 0
-set g_balance_hagar_secondary_load_releasedeath 1
+set g_balance_hagar_secondary_load_hold 1
+set g_balance_hagar_secondary_load_releasedeath 0
 set g_balance_hagar_secondary_load_abort 1
-set g_balance_hagar_secondary_damage 35
-set g_balance_hagar_secondary_edgedamage 17.5
-set g_balance_hagar_secondary_force 100
-set g_balance_hagar_secondary_radius 65
-set g_balance_hagar_secondary_spread 0.015
+set g_balance_hagar_secondary_damage 30
+set g_balance_hagar_secondary_edgedamage 15
+set g_balance_hagar_secondary_force 50
+set g_balance_hagar_secondary_radius 70
+set g_balance_hagar_secondary_spread 0.05
 set g_balance_hagar_secondary_speed 2000
 set g_balance_hagar_secondary_lifetime_min 10
 set g_balance_hagar_secondary_lifetime_rand 0
index 2a2bca6b748613d2673dee27eb355d87c32b48f4..a13252209fcb94126cd10350eddea72e93fb2029 100644 (file)
@@ -1507,11 +1507,11 @@ seta hud_contents_water_alpha 0.5 "alpha of the water color blend when inside it
 seta hud_contents_water_color "0.4 0.3 0.3"
 
 seta hud_shownames 1 "draw names and health/armor of nearby players"
-seta hud_shownames_enemies 2 "1 = draw names of enemies you point at, 2 = draw names of all enemies in view"
-seta hud_shownames_status 2 "1 = draw health/armor status of teammates, 2 = same as 1, but draw health/armor icons with a question mark on enemies in teamgames"
-seta hud_shownames_height 15 "height of icons"
+seta hud_shownames_enemies 2 "1 = draw names of enemies you point at (TODO), 2 = draw names of all enemies in view"
+seta hud_shownames_status 1 "1 = draw health/armor status of teammates"
+seta hud_shownames_statusbar_height 4 "height of status bar"
 seta hud_shownames_aspect 8 "aspect ratio of total drawing area per name"
-seta hud_shownames_fontsize 13 "font size"
+seta hud_shownames_fontsize 12 "font size"
 seta hud_shownames_decolorize 1 "1 = decolorize name in team games, 2 = decolorize always"
 seta hud_shownames_alpha 0.7 "alpha"
 seta hud_shownames_resize 1 "enable resizing of the names, then the size cvars will correspond to the maximum size"
@@ -1519,6 +1519,7 @@ seta hud_shownames_mindistance 1000 "start fading alpha/size at this distance"
 seta hud_shownames_maxdistance 2500 "alpha/size is 0 at this distance"
 seta hud_shownames_antioverlap 1 "if two tags get too close to each other, fade out the one further away from you"
 seta hud_shownames_antioverlap_distance 125 "2d distance to other tag after which to fade out"
+seta hud_shownames_offset 52 "offset (along z-axis) tag from player origin by this many units"
 
 // scoreboard
 seta scoreboard_columns default
@@ -1551,7 +1552,7 @@ seta accuracy_color2 "0 1 0"
 // for menu server list (eventually make them have engine support?)
 seta menu_slist_showfull 1 "show servers even if they are full and have no slots to join"
 seta menu_slist_showempty 1 "show servers even if they are no empty and have no opponents to play against"
-set menu_slist_modfilter "=" // set to either: !modname or modname. modname of = means "same as we are running now".
+seta menu_slist_modfilter "" // set to either: !modname or modname. modname of = means "same as we are running now".
 
 // for menu weapon arena
 set menu_weaponarena_with_laser 0 "also enable the Laser in this weapon arena"
@@ -2147,7 +2148,7 @@ alias sRGBcorrect_off "r_texture_sRGB_skin_diffuse 0;r_texture_sRGB_skin_gloss 0
 exec balanceXonotic.cfg
 exec ctfscoring-ai.cfg
 exec effects-normal.cfg
-exec physicsX0.cfg
+exec physicsX.cfg
 exec turrets.cfg
 
 // hud cvar descriptions
diff --git a/gfx/hud/default/nametag_statusbar.tga b/gfx/hud/default/nametag_statusbar.tga
new file mode 100644 (file)
index 0000000..1f55921
Binary files /dev/null and b/gfx/hud/default/nametag_statusbar.tga differ
diff --git a/gfx/hud/luminos/nametag_statusbar.tga b/gfx/hud/luminos/nametag_statusbar.tga
new file mode 100644 (file)
index 0000000..1f55921
Binary files /dev/null and b/gfx/hud/luminos/nametag_statusbar.tga differ
index cbfd802bbe83ac86e6f3c8bbcdd8141e3dee8dbe..620ec882e54d1f2b1d8108df6edf2d18afe5c8f3 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate 4
 sv_waterfriction 1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw 1
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
index 6467afad4c3b13e354e3fc8ad6069c94194cd2a2..1afb26330c643725fee6695071bb881eaaddb625 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0 // breaks strafing?
 sv_airaccel_qw 0.92
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 20
 sv_maxairstrafespeed 100
index a19617d93f89be9ef474bff4f7820936bb72920e..d78346e1b604f870bf9cacce45171215285fd1bf 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0.65
 sv_airaccel_qw 0.95
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index c3329426e1370368da1a0dbea20c03d8aa19501b..21bafef57c523cbbc9d08c579c618f83ca55e5d5 100644 (file)
@@ -20,6 +20,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0 // breaks strafing?
 sv_airaccel_qw -0.8
+sv_airaccel_qw_stretchfactor 0
 
 sv_airstopaccelerate -0.95
 sv_airstrafeaccelerate 24
index 2f23ae763dbdb30e0da4f093d4fe269dce4e6bcf..3c740da33733257b50e8a46af2167714c3dcf815 100644 (file)
@@ -20,6 +20,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw -0.8
+sv_airaccel_qw_stretchfactor 0
 
 sv_airstopaccelerate 3
 sv_airstrafeaccelerate 24
index bb6133a8b79f8b08fef018af239bc84425235b07..d240d991b3f55a812ab5bce0bda2c53f9942fa7e 100644 (file)
@@ -15,6 +15,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0 // pain in the ass to tweak without screwing up the strafing
 sv_airaccel_qw -0.93 //given a negative value to combat potential cheats, was told by divVerent not to mess with it
+sv_airaccel_qw_stretchfactor 0
 
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
index 01e446e8ba32c2219d4f366c94e8b307ce88fcc9..86b4bdcf024617699c1a7c8818349378e3e5b6e7 100644 (file)
@@ -14,6 +14,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0.35
 sv_airaccel_qw 0.95
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index de2ff2591250b235a69eea7525611167386cf78d..a6673a28e248cef489dcbc8bbfacefa2d1aeef12 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw 0
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index 64ac7b019cafcc6947711454fa968d39432ebd19..60459c37474067be06d5a1aed7c23cfd57df1ff5 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw 0
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index c527b29efb3489637e6defbbfdea9d460b404f59..b099d4cf34935bea0c778605abdb4f4b89e335b6 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw 0
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index aa2f530cdf6f782bafa86b1264a3f942cf8fb108..8821b5a319082f63b7f86150ebbde7f2d1385e1f 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw 0
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index 0622e1a48134efa1e984be177e67f30e9dc137d1..ff6343f781a3d72fea86a6a92466ecd6d1f3dbfd 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw 0
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index 1d15fe1d67be61adbdbf3c50b4fe89b8d6be3a72..0834bb5aa60c439bbd03a93420835934db5468a2 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0.3
 sv_airaccel_qw 0.93
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index 5b6db6b944c423b765a301238414d854ce41bf04..8c5ab5e851342b87146a95334ddf08dbc2c762ff 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0.35
 sv_airaccel_qw 0.95
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index f7661523ea146abdb371ee77589e5401600a641e..4e104d1aa99f2d71e76acc12bf5bb4f6fff618e6 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0.35
 sv_airaccel_qw 0.95
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index 2f12a4ebceb3ac7cea0e1ed94f7d7f1aa1ac2bf4..e74b332ede27e84f582a158e35a49bf1a61acbc2 100644 (file)
@@ -21,6 +21,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw -0.9475
+sv_airaccel_qw_stretchfactor 0
 
 sv_airstopaccelerate 3
 sv_airstrafeaccelerate 24
index 509310843b5e31ebbd5c6c18e56bd6291f0448b6..1eb53ab38321b709375486f6d3a8307323275901 100644 (file)
@@ -14,6 +14,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw 1
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index dc580a51190ead71c541fc9833e70c0e0449ccf0..2e3c0af6f310e4c6e5dfa3d94bccb02688782ab7 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate -1
 sv_waterfriction 1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw 1
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index c5f21116ec9a4bff476338502dace8b7a9937a8b..2d223a2051ea58977e84391c7d8f20059b3dba38 100644 (file)
@@ -14,6 +14,7 @@ sv_wateraccelerate -1
 sv_waterfriction 1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw 1
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index a50427155e11414f2d3362960165284e1cb2344b..b3fdf41a82982855ae253933cbae7982d7906b9c 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate 4
 sv_waterfriction 1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw 1
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index 9725e8cc4a207e12d49789ea413ba09ddcc35707..390cb968ad31ed8867763a41830aa302e0d5f238 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0.8
 sv_airaccel_qw 1
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index 75c70c1818bec4bac9ef7dae8f2e361412a39e63..8c1a78f3b9f80d4b613361f8503813a95c266b07 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0.5
 sv_airaccel_qw 0.93
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index 731b1482e6ddae0e04cc904cdebe671ba55c107f..178eed0aedfa79ffc9f58dca509387eaad43bbde 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0.3
 sv_airaccel_qw 0.93
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
index 068d22ce67c7387e0b4ec3574dd434df246899c7..6cae75a7977759b1510ecec9ec60fb8ae321100d 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate 10
 sv_waterfriction 1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw 1
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
index 72ca9ffcae73a43a275813ab8865ca882290c7ab..5c0c81c8fb8408593b6e12170d366b1a9631b771 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate 10
 sv_waterfriction 1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw 1
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
index 051775de9a900680e0ab37949b827f1d798387a7..0c30fcd9a0de82ada7acb5a922cc8097c5ab1b5d 100644 (file)
@@ -13,6 +13,7 @@ sv_wateraccelerate 10
 sv_waterfriction 1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw 1
+sv_airaccel_qw_stretchfactor 0
 sv_airstopaccelerate 2
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
diff --git a/physicsX.cfg b/physicsX.cfg
new file mode 100644 (file)
index 0000000..5cc6b52
--- /dev/null
@@ -0,0 +1,42 @@
+// current Xonotic physics
+sv_gravity 800
+sv_maxspeed 360
+sv_maxairspeed 360
+
+sv_stopspeed 100
+sv_accelerate 15
+sv_airaccelerate 2
+sv_friction 8
+edgefriction 1
+sv_stepheight 26
+// Q1: 16+2
+// Nex: 32+2
+// we try: 24+2
+
+// actually, what we want is 266.6666 for 180bpm
+// but 260 takes same amount of frames and is nicer to mappers
+sv_jumpvelocity 260
+sv_wateraccelerate -1
+sv_waterfriction -1
+sv_airaccel_sideways_friction 0
+sv_airaccel_qw -0.8
+sv_airaccel_qw_stretchfactor 2
+
+sv_airstopaccelerate 3
+sv_airstrafeaccelerate 24
+sv_maxairstrafespeed 100
+sv_airstrafeaccel_qw -0.95
+sv_aircontrol 125
+sv_aircontrol_penalty 180
+sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 800
+sv_warsowbunny_turnaccel 0
+sv_warsowbunny_accel 0.1593
+sv_warsowbunny_topspeed 925
+sv_warsowbunny_backtosideratio 0.8
+sv_friction_on_land 0
+sv_doublejump 0
+sv_jumpspeedcap_min ""
+sv_jumpspeedcap_max ""
+sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
diff --git a/physicsX0.cfg b/physicsX0.cfg
deleted file mode 100644 (file)
index f1e4abc..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-// "NoQWBunny" physics based on XPM
-sv_gravity 800
-sv_maxspeed 360
-sv_maxairspeed 360
-
-sv_stopspeed 100
-sv_accelerate 15
-sv_airaccelerate 2
-sv_friction 8
-edgefriction 1
-sv_stepheight 26
-// Q1: 16+2
-// Nex: 32+2
-// we try: 24+2
-
-// actually, what we want is 266.6666 for 180bpm
-// but 260 takes same amount of frames and is nicer to mappers
-sv_jumpvelocity 260
-sv_wateraccelerate -1
-sv_waterfriction -1
-sv_airaccel_sideways_friction 0
-sv_airaccel_qw -0.8
-
-sv_airstopaccelerate 3
-sv_airstrafeaccelerate 24
-sv_maxairstrafespeed 100
-sv_airstrafeaccel_qw -0.95
-sv_aircontrol 125
-sv_aircontrol_penalty 180
-sv_aircontrol_power 2
-sv_airspeedlimit_nonqw 700
-sv_warsowbunny_turnaccel 0
-sv_warsowbunny_accel 0.1593
-sv_warsowbunny_topspeed 925
-sv_warsowbunny_backtosideratio 0.8
-sv_friction_on_land 0
-sv_doublejump 0
-sv_jumpspeedcap_min ""
-sv_jumpspeedcap_max ""
-sv_jumpspeedcap_max_disable_on_ramps 1
-g_teleport_maxspeed 0
diff --git a/physicsX010.cfg b/physicsX010.cfg
new file mode 100644 (file)
index 0000000..bda6272
--- /dev/null
@@ -0,0 +1,42 @@
+// Xonotic 0.1.0preview physics
+sv_gravity 800
+sv_maxspeed 360
+sv_maxairspeed 400
+
+sv_stopspeed 100
+sv_accelerate 15
+sv_airaccelerate 2
+sv_friction 8
+edgefriction 1
+sv_stepheight 26
+// Q1: 16+2
+// Nex: 32+2
+// we try: 24+2
+
+// actually, what we want is 266.6666 for 180bpm
+// but 260 takes same amount of frames and is nicer to mappers
+sv_jumpvelocity 260
+sv_wateraccelerate -1
+sv_waterfriction -1
+sv_airaccel_sideways_friction 0
+sv_airaccel_qw -0.8
+sv_airaccel_qw_stretchfactor 0
+
+sv_airstopaccelerate 3
+sv_airstrafeaccelerate 24
+sv_maxairstrafespeed 100
+sv_airstrafeaccel_qw -0.95
+sv_aircontrol 125
+sv_aircontrol_penalty 150
+sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 800
+sv_warsowbunny_turnaccel 0
+sv_warsowbunny_accel 0.1593
+sv_warsowbunny_topspeed 925
+sv_warsowbunny_backtosideratio 0.8
+sv_friction_on_land 0
+sv_doublejump 0
+sv_jumpspeedcap_min ""
+sv_jumpspeedcap_max ""
+sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
index e4ba14a56234aa12208ac83a5f7901b2eecbb8af..f781539485bc37246caaa6d8392d14abb8e360ef 100644 (file)
@@ -16,6 +16,7 @@ sv_wateraccelerate 4
 sv_waterfriction 1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw 0.95
+sv_airaccel_qw_stretchfactor 0
 // CPMA: 1
 sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
index 3e7ee55570fa21cc92fa488a4aaae9b3a99336a4..3a8b8e1503f7e2819d434becb7d55b0c826da051 100644 (file)
@@ -16,6 +16,8 @@ sv_wateraccelerate 4
 sv_waterfriction 1
 sv_airaccel_sideways_friction 0
 sv_airaccel_qw -0.9146875
+sv_airaccel_qw_stretchfactor 0
+sv_airaccel_qw_stretchfactor 0
 // CPMA: 1
 sv_airstopaccelerate 6.5625 // matches strafe-stopping speed
 sv_airstrafeaccelerate 14
index 03cbd528a2cf3cbf983ef500bc57edcaf3addee3..bac1fdaef9c2719bf3c0438f6f5af51e1aeec43a 100644 (file)
@@ -654,17 +654,38 @@ float CSQC_InputEvent(float bInputType, float nPrimary, float nSecondary)
 
 // --------------------------------------------------------------------------
 // BEGIN OPTIONAL CSQC FUNCTIONS
+void Ent_RemoveEntCS()
+{
+       entcs_receiver[self.sv_entnum] = world;
+}
 void Ent_ReadEntCS()
 {
+       float sf;
        InterpolateOrigin_Undo();
 
        self.classname = "entcs_receiver";
-       self.sv_entnum = ReadByte() - 1;
-       self.origin_x = ReadShort();
-       self.origin_y = ReadShort();
-       self.origin_z = ReadShort();
-       self.angles_y = ReadByte() * 360.0 / 256;
-       self.origin_z = self.angles_x = self.angles_z = 0;
+       sf = ReadByte();
+
+       if(sf & 1)
+               self.sv_entnum = ReadByte();
+       if(sf & 2)
+       {
+               self.origin_x = ReadShort();
+               self.origin_y = ReadShort();
+               self.origin_z = ReadShort();
+       }
+       if(sf & 4)
+       {
+               self.angles_y = ReadByte() * 360.0 / 256;
+               self.angles_x = self.angles_z = 0;
+       }
+       if(sf & 8)
+               self.healthvalue = ReadByte() * 10;
+       if(sf & 16)
+               self.armorvalue = ReadByte() * 10;
+
+       entcs_receiver[self.sv_entnum] = self;
+       self.entremove = Ent_RemoveEntCS;
 
        InterpolateOrigin_Note();
 }
@@ -890,41 +911,6 @@ void Ent_ReadAccuracy(void)
        }
 }
 
-void Ent_ShowNames()
-{
-    float sf;
-
-    // entity init, TODO can this be done only once somehow?
-    self.the_entnum = ReadByte(); // TODO: fixme to only send once somehow
-    self.draw2d = Draw_ShowNames;
-    //self.movetype = MOVETYPE_FLY; // movetype needed so we can traceline?
-    self.mins = '-20 -20 -24';
-    self.maxs = '20 20 45';
-    self.classname = "shownames_tag";
-
-    sf = ReadByte();
-
-    if(sf & 1)
-    {
-        self.origin_x = ReadShort();
-        self.origin_y = ReadShort();
-        self.origin_z = ReadShort();
-    }
-    if(sf & 2)
-    {
-        self.healthvalue = ReadByte();
-    }
-    if(sf & 4)
-    {
-        self.armorvalue = ReadByte();
-    }
-
-    if(sf & 128) // same team
-        self.sameteam = TRUE;
-    else
-        self.sameteam = FALSE;
-}
-
 // CSQC_Ent_Update : Called every frame that the server has indicated an update to the SSQC / CSQC entity has occured.
 // The only parameter reflects if the entity is "new" to the client, meaning it just came into the client's PVS.
 void Ent_RadarLink();
@@ -991,7 +977,6 @@ void(float bIsNewEntity) CSQC_Ent_Update =
                case ENT_CLIENT_LGBEAM: Ent_ReadHook(bIsNewEntity, ENT_CLIENT_LGBEAM); break;
                case ENT_CLIENT_GAUNTLET: Ent_ReadHook(bIsNewEntity, ENT_CLIENT_GAUNTLET); break;
                case ENT_CLIENT_ACCURACY: Ent_ReadAccuracy(); break;
-               case ENT_CLIENT_SHOWNAMES: Ent_ShowNames(); break;
                default:
                        //error(strcat(_("unknown entity type in CSQC_Ent_Update: %d\n"), self.enttype));
                        error(sprintf(_("Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: %s)\n"), self.enttype, num_for_edict(self), self.classname));
index 173abcb9d3b95e274b7e880df4fbe7065e07e250..ae42a7b18c41dbce9a4a96d4c42faec6fa96f715 100644 (file)
@@ -950,6 +950,7 @@ void CSQC_UpdateView(float w, float h)
                if(self.draw2d)
                        self.draw2d();
        self = e;
+       Draw_ShowNames_All();
 
        scoreboard_active = HUD_WouldDrawScoreboard();
 
@@ -992,7 +993,7 @@ void CSQC_UpdateView(float w, float h)
                                CSQC_common_hud();
 
                // crosshair goes VERY LAST
-               if(!scoreboard_active && !camera_active && intermission != 2) {
+               if(!scoreboard_active && !camera_active && intermission != 2 && spectatee_status != -1) {
                        string wcross_style;
                        float wcross_alpha, wcross_resolution;
                        wcross_style = autocvar_crosshair;
index 1b09366845a9b5c37cfc5898bfea7a74d4fa52f2..596e3a3c5e0ebb476a5d7e485670277cff76cc99 100644 (file)
@@ -289,7 +289,7 @@ float autocvar_hud_showbinds_limit;
 float autocvar_hud_shownames;
 float autocvar_hud_shownames_enemies;
 float autocvar_hud_shownames_status;
-float autocvar_hud_shownames_height;
+float autocvar_hud_shownames_statusbar_height;
 float autocvar_hud_shownames_aspect;
 float autocvar_hud_shownames_fontsize;
 float autocvar_hud_shownames_decolorize;
@@ -299,6 +299,7 @@ float autocvar_hud_shownames_mindistance;
 float autocvar_hud_shownames_maxdistance;
 float autocvar_hud_shownames_antioverlap;
 float autocvar_hud_shownames_antioverlap_distance;
+float autocvar_hud_shownames_offset;
 string autocvar_hud_skin;
 float autocvar_loddebug;
 float autocvar_menu_mouse_speed;
index c224fcd7ccb386855fe0e96bc35d350bf41d5ce8..91256b9c5d566bb9d1d900368ceb53688992766e 100644 (file)
@@ -2586,9 +2586,7 @@ void HUD_Score_Rankings(vector pos, vector mySize, entity me, float team_count)
 #define SCOREPANEL_MAX_ENTRIES 6
 #define SCOREPANEL_ASPECTRATIO 2
        const float entries = bound(1, floor(SCOREPANEL_MAX_ENTRIES * mySize_y/mySize_x * SCOREPANEL_ASPECTRATIO), SCOREPANEL_MAX_ENTRIES);
-       const float height = mySize_y/entries;
-       const vector fontsize = '0.9 0.9 0' * height;
-       pos_y += height * (1 - 0.9) / 2;
+       const vector fontsize = '1 1 0' * (mySize_y/entries);
 
        vector rgb, score_color;
        rgb = '1 1 1';
@@ -2602,20 +2600,19 @@ void HUD_Score_Rankings(vector pos, vector mySize, entity me, float team_count)
        i, first_pl = 0;
        if (autocvar__hud_configure)
        {
+               float players_per_team;
                if (team_count)
                {
                        // show team scores in the first line
                        float score_size = mySize_x / team_count;
-                       for(tm = teams.sort_next; tm; tm = tm.sort_next) {
-                               if(tm.team == COLOR_SPECTATOR)
-                                       continue;
-                               if (tm.team == myteam)
-                                       HUD_Panel_DrawHighlight(pos - eY * (height * (1 - 0.9) / 2) + eX * score_size * i, eX * score_size + eY * height, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
-                               drawstring_aspect(pos + eX * score_size * i, ftos(123), eX * score_size + eY * fontsize_y, GetTeamRGB(tm.team) * 0.8, panel_fg_alpha, DRAWFLAG_NORMAL);
-                               ++i;
+                       players_per_team = max(2, ceil((entries - 1) / team_count));
+                       for(i=0; i<team_count; ++i) {
+                               if (i == floor((entries - 2) / players_per_team) || (entries == 1 && i == 0))
+                                       HUD_Panel_DrawHighlight(pos + eX * score_size * i, eX * score_size + eY * fontsize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+                               drawstring_aspect(pos + eX * score_size * i, ftos(175 - 23*i), eX * score_size + eY * fontsize_y, GetTeamRGB(ColorByTeam(i)) * 0.8, panel_fg_alpha, DRAWFLAG_NORMAL);
                        }
                        first_pl = 1;
-                       pos_y += height;
+                       pos_y += fontsize_y;
                }
                score = 10 + SCOREPANEL_MAX_ENTRIES * 3;
                for (i=first_pl; i<entries; ++i)
@@ -2626,7 +2623,7 @@ void HUD_Score_Rankings(vector pos, vector mySize, entity me, float team_count)
                        if (i == entries-1 && autocvar_hud_panel_score_rankings == 1)
                        {
                                rgb = '1 1 0';
-                               drawfill(pos - eY * (height * (1 - 0.9) / 2), eX * mySize_x + eY * height, rgb, highlight_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
+                               drawfill(pos, eX * mySize_x + eY * fontsize_y, rgb, highlight_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                                s = GetPlayerName(pl.sv_entnum);
                                score = 7;
                        }
@@ -2637,11 +2634,11 @@ void HUD_Score_Rankings(vector pos, vector mySize, entity me, float team_count)
                        }
 
                        if (team_count)
-                               score_color = GetTeamRGB(ColorByTeam(mod(i + 2, team_count))) * 0.8;
+                               score_color = GetTeamRGB(ColorByTeam(floor((i - first_pl) / players_per_team))) * 0.8;
                        s = textShortenToWidth(s, name_size, fontsize, stringwidth_colors);
                        drawcolorcodedstring(pos + eX * (name_size - stringwidth(s, TRUE, fontsize)), s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL);
                        drawstring(pos + eX * (name_size + spacing_size), ftos(score), fontsize, score_color, panel_fg_alpha, DRAWFLAG_NORMAL);
-                       pos_y += height;
+                       pos_y += fontsize_y;
                }
                return;
        }
@@ -2656,17 +2653,20 @@ void HUD_Score_Rankings(vector pos, vector mySize, entity me, float team_count)
                        if(tm.team == COLOR_SPECTATOR)
                                continue;
                        if (tm.team == myteam)
-                               drawfill(pos - eY * (height * (1 - 0.9) / 2) + eX * score_size * i, eX * score_size + eY * height, '1 1 1', highlight_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
+                               drawfill(pos + eX * score_size * i, eX * score_size + eY * fontsize_y, '1 1 1', highlight_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                        drawstring_aspect(pos + eX * score_size * i, ftos(tm.(teamscores[ts_primary])), eX * score_size + eY * fontsize_y, GetTeamRGB(tm.team) * 0.8, panel_fg_alpha, DRAWFLAG_NORMAL);
                        ++i;
                }
                first_pl = 1;
-               pos_y += height;
+               pos_y += fontsize_y;
+               tm = teams.sort_next;
        }
        i = first_pl;
-       for (pl = players.sort_next; pl && i<entries; pl = pl.sort_next, ++i)
+
+       do
+       for (pl = players.sort_next; pl && i<entries; pl = pl.sort_next)
        {
-               if (pl.team == COLOR_SPECTATOR)
+               if ((team_count && pl.team != tm.team) || pl.team == COLOR_SPECTATOR)
                        continue;
 
                if (i == entries-1 && !me_printed && pl != me)
@@ -2688,15 +2688,17 @@ void HUD_Score_Rankings(vector pos, vector mySize, entity me, float team_count)
                        if (i == first_pl)
                                rgb = '0 1 0'; //first: green
                        me_printed = 1;
-                       drawfill(pos - eY * (height * (1 - 0.9) / 2), eX * mySize_x + eY * height, rgb, highlight_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
+                       drawfill(pos, eX * mySize_x + eY * fontsize_y, rgb, highlight_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                }
                if (team_count)
                        score_color = GetTeamRGB(pl.team) * 0.8;
                s = textShortenToWidth(GetPlayerName(pl.sv_entnum), name_size, fontsize, stringwidth_colors);
                drawcolorcodedstring(pos + eX * (name_size - stringwidth(s, TRUE, fontsize)), s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL);
                drawstring(pos + eX * (name_size + spacing_size), ftos(pl.(scores[ps_primary])), fontsize, score_color, panel_fg_alpha, DRAWFLAG_NORMAL);
-               pos_y += height;
+               pos_y += fontsize_y;
+               ++i;
        }
+       while (i<entries && team_count && (tm = tm.sort_next) && (tm.team != COLOR_SPECTATOR || (tm = tm.sort_next)));
 }
 
 void HUD_Score(void)
@@ -4136,16 +4138,14 @@ void HUD_InfoMessages(void)
        fontsize = '0.20 0.20 0' * mySize_y;
        
        float a;
-       if(spectatee_status != 0)
-               a = 1;
-       else
-               a = panel_fg_alpha;
+       a = panel_fg_alpha;
 
        string s;
        if(!autocvar__hud_configure)
        {
                if(spectatee_status && !intermission)
                {
+                       a = 1;
                        if(spectatee_status == -1)
                                s = _("^1Observing");
                        else
@@ -4560,7 +4560,18 @@ void HUD_Main (void)
                hud_fade_alpha = (1 - scoreboard_fade_alpha);
 
        if(intermission == 2) // no hud during mapvote
+       {
+               if (autocvar__hud_configure) //force exit from hud config
+               {
+                       if (menu_enabled)
+                       {
+                               menu_enabled = 0;
+                               localcmd("togglemenu\n");
+                       }
+                       cvar_set("_hud_configure", "0");
+               }
                hud_fade_alpha = 0;
+       }
        else if(autocvar__menu_alpha == 0 && scoreboard_fade_alpha == 0)
                hud_fade_alpha = 1;
 
index aacd41589aae6de1dbdd65a6704f733c6d246e9e..af849e18c57c92dce1d1580b3342962b5b23403d 100644 (file)
@@ -162,3 +162,5 @@ float g_balance_grenadelauncher_bouncestop;
 float g_balance_electro_secondary_bouncefactor;
 float g_balance_electro_secondary_bouncestop;
 float g_trueaim_minrange;
+
+entity entcs_receiver[255]; // 255 is the engine limit on maxclients
index 247dc4b35a64dedc2c7de722420154e9084df48e..d59c75ba8d81629cfc485bea7499a6fe32a9a60a 100644 (file)
@@ -754,3 +754,20 @@ void DrawCircleClippedPic(vector centre, float radius, string pic, float f, vect
                R_EndPolygon();
        }
 }
+
+const vector GETPLAYERORIGIN_ERROR = '1123581321 2357111317 3141592653'; // way out of bounds for anything on the map
+vector getplayerorigin(float pl)
+{
+       string s;
+       entity e;
+
+       s = getplayerkey(pl, "TEMPHACK_origin");
+       if(s != "")
+               return stov(s);
+
+       e = entcs_receiver[pl];
+       if(e)
+               return e.origin;
+
+       return GETPLAYERORIGIN_ERROR;
+}
index f69c495fb0fa493b87867469b47f4c5f826e59ba..28d0d161eb3453108a9d854fbff1562f06fc0bed 100644 (file)
 // self.sameteam = player is on same team as local client
 //
 const float SHOWNAMES_FADESPEED = 4;
-void Draw_ShowNames()
+void Draw_ShowNames(entity ent)
 {
-    if(!autocvar_hud_shownames)
-        return;
-
-    if(self.sameteam || (!self.sameteam && autocvar_hud_shownames_enemies))
-    {
-        InterpolateOrigin_Do();
-
-        if(!self.sameteam)
-        {
-            traceline(self.origin, view_origin, 1, self);
-
-            /* WIP, why does trace_ent != self not work as intended here?
-            if(autocvar_hud_shownames_enemies != 2) // player has to point at enemy if so
-            {
-                traceline(view_origin, view_origin + view_forward * MAX_SHOT_DISTANCE, MOVETYPE_FLY, world);
-                print("trace_endpos: ", vtos(trace_endpos), " view_origin: ", vtos(view_origin), "\n");
-                if(trace_ent != self)
-                    return;
-            }*/
-        }
-
-        vector o, eo;
-        o = project_3d_to_2d(self.origin);
-        float overlap;
-
-        if(autocvar_hud_shownames_antioverlap)
-        {
-            // fade tag out if another tag that is closer to you overlaps
-            entity e;
-            for(e = world; (e = find(e, classname, "shownames_tag")); )
-            {
-                if(e == self)
-                    continue;
-                eo = project_3d_to_2d(e.origin);
-                if not(eo_z < 0 || eo_x < 0 || eo_y < 0 || eo_x > vid_conwidth || eo_y > vid_conheight)
-                {
-                    eo_z = 0;
-                    if(vlen((eX * o_x + eY * o_y) - eo) < autocvar_hud_shownames_antioverlap_distance && vlen(self.origin - view_origin) > vlen(e.origin - view_origin))
-                    {
-                        overlap = TRUE;
-                        break;
-                    }
-                }
-            }
-        }
-
-        if(!self.sameteam && trace_endpos != view_origin) // out of view, fade out
-            self.alpha = max(0, self.alpha - SHOWNAMES_FADESPEED * frametime);
-        else if(!self.healthvalue) // dead player, fade out slowly
-            self.alpha = max(0, self.alpha - SHOWNAMES_FADESPEED * 0.25 * frametime);
-        else if(overlap) // tag overlap detected, fade out
-            self.alpha = max(0, self.alpha - SHOWNAMES_FADESPEED * frametime);
-        else // fade in
-            self.alpha = min(1, self.alpha + SHOWNAMES_FADESPEED * frametime);
-
-        if(!self.alpha)
-            return;
-
-        float dist;
-        dist = vlen(self.origin - view_origin);
-
-        float a;
-        a = autocvar_hud_shownames_alpha;
-        a *= self.alpha;
-        if(autocvar_hud_shownames_maxdistance)
-        {
-            if(dist >= autocvar_hud_shownames_maxdistance)
-                return;
-            a *= ((autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance) - max(0, dist - autocvar_hud_shownames_mindistance)) / (autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance);
-        }
-
-        if(!a)
-            return;
-
-        float resize;
-        resize = 1;
-        if(autocvar_hud_shownames_resize) // limit resize so its never smaller than 0.5... gets unreadable
-            resize = 0.5 + 0.5 * ((autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance) - max(0, dist - autocvar_hud_shownames_mindistance)) / (autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance);
-
-        // draw the sprite image
-        if not(o_z < 0 || o_x < 0 || o_y < 0 || o_x > vid_conwidth || o_y > vid_conheight)
-        {
-            o_z = 0;
-
-            vector myPos, mySize;
-            mySize = (eX * autocvar_hud_shownames_aspect + eY) * autocvar_hud_shownames_height;
-            myPos = o - '0.5 0 0' * mySize_x - '0 1 0' * mySize_y;
-
-            // size scaling
-            mySize_x *= resize;
-            mySize_y *= resize;
-
-            myPos_x += 0.5 * (mySize_x / resize - mySize_x);
-            myPos_y += (mySize_y / resize - mySize_y);
-
-            vector iconpos, iconsize; // these determine icon position/size, if any
-            vector namepos; // this is where the origin of the string
-            float namesize; // total area where we can draw the string
-
-            iconpos = myPos;
-
-            if(autocvar_hud_shownames_status && teamplay)
-            {
-                if(self.sameteam)
-                {
-                    iconsize = eX * 2 * mySize_y + eY * mySize_y;
-                    // "ghost" backgrounds
-                    drawpic_aspect_skin(iconpos, "health", '1 1 0' * iconsize_y, '0 0 0', a * 0.5, DRAWFLAG_NORMAL);
-                    drawpic_aspect_skin(iconpos + '0.5 0 0' * iconsize_x, "armor", '1 1 0' * iconsize_y, '0 0 0', a * 0.5, DRAWFLAG_NORMAL);
-
-                    if(self.healthvalue > 0)
-                    {
-                        drawsetcliparea(0, myPos_y + iconsize_y - iconsize_y * min(1, self.healthvalue/autocvar_hud_panel_healtharmor_maxhealth), vid_conwidth, myPos_y + iconsize_y);
-                        drawpic_aspect_skin(iconpos, "health", '1 1 0' * iconsize_y, '1 1 1', a, DRAWFLAG_NORMAL);
-                    }
-
-                    if(self.armorvalue > 0)
-                    {
-                        drawsetcliparea(0, myPos_y + iconsize_y - iconsize_y * min(1, self.armorvalue/autocvar_hud_panel_healtharmor_maxarmor), vid_conwidth, myPos_y + iconsize_y);
-                        drawpic_aspect_skin(iconpos + '0.5 0 0' * iconsize_x, "armor", '1 1 0' * iconsize_y, '1 1 1', a, DRAWFLAG_NORMAL);
-                    }
-                    drawresetcliparea();
-                }
-                else if(autocvar_hud_shownames_status == 2)
-                {
-                    iconsize = eX * 2 * mySize_y + eY * mySize_y;
-                    drawpic_aspect_skin(iconpos, "health_unknown", '1 1 0' * iconsize_y, '0 0 0', a, DRAWFLAG_NORMAL);
-                    drawpic_aspect_skin(iconpos + '0.5 0 0' * iconsize_x, "armor_unknown", '1 1 0' * iconsize_y, '0 0 0', a, DRAWFLAG_NORMAL);
-                }
-            }
-
-            namepos = myPos + eX * 2 * iconsize_y + eY * 0.5 * resize * (autocvar_hud_shownames_height - autocvar_hud_shownames_fontsize);
-            namesize = mySize_x - 2 * iconsize_y;
-
-            string s;
-            s = GetPlayerName(self.the_entnum-1);
-            if((autocvar_hud_shownames_decolorize == 1 && teamplay) || autocvar_hud_shownames_decolorize == 2)
-                s = playername(s, GetPlayerColor(self.the_entnum-1));
-
-            drawfontscale = '1 1 0' * resize;
-            s = textShortenToWidth(s, namesize, '1 1 0' * autocvar_hud_shownames_fontsize, stringwidth_colors);
-
-            float width;
-            width = stringwidth(s, TRUE, '1 1 0' * autocvar_hud_shownames_fontsize);
-
-            if (width != namesize)
-                namepos_x += (namesize - width) / 2;
-            drawcolorcodedstring(namepos, s, '1 1 0' * autocvar_hud_shownames_fontsize, a, DRAWFLAG_NORMAL);
-            drawfontscale = '1 1 0';
-        }
-    }
+       if(!autocvar_hud_shownames)
+               return;
+
+       if(ent.sv_entnum == player_localentnum && !autocvar_chase_active)
+               return;
+
+       if(ent.sameteam || (!ent.sameteam && autocvar_hud_shownames_enemies))
+       {
+               ent.origin_z += autocvar_hud_shownames_offset;
+
+               if(!ent.sameteam)
+               {
+                       /* WIP, why does trace_ent != ent not work as intended here?
+                          if(autocvar_hud_shownames_enemies != 2) // player has to point at enemy if so
+                          {
+                          traceline(view_origin, view_origin + view_forward * MAX_SHOT_DISTANCE, MOVETYPE_FLY, world);
+                          print("trace_endpos: ", vtos(trace_endpos), " view_origin: ", vtos(view_origin), "\n");
+                          if(trace_ent != ent)
+                          return;
+                          }*/
+
+                       traceline(ent.origin, view_origin, 1, ent);
+               }
+
+               vector o, eo;
+               o = project_3d_to_2d(ent.origin);
+               float overlap;
+
+               if(autocvar_hud_shownames_antioverlap)
+               {
+                       // fade tag out if another tag that is closer to you overlaps
+                       entity e;
+                       for(e = world; (e = find(e, classname, "shownames_tag")); )
+                       {
+                               if(e == ent)
+                                       continue;
+                               eo = project_3d_to_2d(e.origin);
+                               if not(eo_z < 0 || eo_x < 0 || eo_y < 0 || eo_x > vid_conwidth || eo_y > vid_conheight)
+                               {
+                                       eo_z = 0;
+                                       if(vlen((eX * o_x + eY * o_y) - eo) < autocvar_hud_shownames_antioverlap_distance && vlen(ent.origin - view_origin) > vlen(e.origin - view_origin))
+                                       {
+                                               overlap = TRUE;
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               if(!ent.sameteam && trace_endpos != view_origin) // out of view, fade out
+                       ent.alpha = max(0, ent.alpha - SHOWNAMES_FADESPEED * frametime);
+               else if(ent.healthvalue < 1) // dead player, fade out slowly
+                       ent.alpha = max(0, ent.alpha - SHOWNAMES_FADESPEED * 0.25 * frametime);
+               else if(overlap) // tag overlap detected, fade out
+                       ent.alpha = max(0, ent.alpha - SHOWNAMES_FADESPEED * frametime);
+               else // fade in
+                       ent.alpha = min(1, ent.alpha + SHOWNAMES_FADESPEED * frametime);
+
+               if(!ent.alpha)
+                       return;
+
+               float dist;
+               dist = vlen(ent.origin - view_origin);
+
+               float a;
+               a = autocvar_hud_shownames_alpha;
+               a *= ent.alpha;
+               if(autocvar_hud_shownames_maxdistance)
+               {
+                       if(dist >= autocvar_hud_shownames_maxdistance)
+                               return;
+                       a *= ((autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance) - max(0, dist - autocvar_hud_shownames_mindistance)) / (autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance);
+               }
+
+               if(!a)
+                       return;
+
+               float resize;
+               resize = 1;
+               if(autocvar_hud_shownames_resize) // limit resize so its never smaller than 0.5... gets unreadable
+                       resize = 0.5 + 0.5 * ((autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance) - max(0, dist - autocvar_hud_shownames_mindistance)) / (autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance);
+
+               // draw the sprite image
+               if not(o_z < 0 || o_x < 0 || o_y < 0 || o_x > vid_conwidth || o_y > vid_conheight)
+               {
+                       o_z = 0;
+
+                       vector myPos, mySize;
+                       mySize = (eX * autocvar_hud_shownames_aspect + eY) * autocvar_hud_shownames_fontsize;
+                       myPos = o - '0.5 0 0' * mySize_x - '0 1 0' * mySize_y;
+
+                       // size scaling
+                       mySize_x *= resize;
+                       mySize_y *= resize;
+
+                       myPos_x += 0.5 * (mySize_x / resize - mySize_x);
+                       myPos_y += (mySize_y / resize - mySize_y);
+
+                       vector namepos; // this is where the origin of the string
+                       float namewidth;
+
+                       namepos = myPos;
+                       namewidth = mySize_x;
+
+                       if(autocvar_hud_shownames_status && teamplay)
+                       {
+                               if(ent.sameteam)
+                               {
+                                       if(ent.healthvalue > 0)
+                                       {
+                                               HUD_Panel_DrawProgressBar(namepos + '0 1 0' * autocvar_hud_shownames_fontsize * resize, eX * 0.5 * mySize_x + eY * resize * autocvar_hud_shownames_statusbar_height, "nametag_statusbar", ent.healthvalue/autocvar_hud_panel_healtharmor_maxhealth, 0, 1, '1 0 0', a, DRAWFLAG_NORMAL);
+
+                                               if(ent.armorvalue > 0)
+                                                       HUD_Panel_DrawProgressBar(namepos + '0 1 0' * autocvar_hud_shownames_fontsize * resize + eX * 0.5 * mySize_x, eX * 0.5 * mySize_x + eY * resize * autocvar_hud_shownames_statusbar_height, "nametag_statusbar", ent.armorvalue/autocvar_hud_panel_healtharmor_maxarmor, 0, 0, '0 1 0', a, DRAWFLAG_NORMAL);
+                                       }
+                               }
+                       }
+
+                       string s;
+                       s = GetPlayerName(ent.sv_entnum-1);
+                       if((autocvar_hud_shownames_decolorize == 1 && teamplay) || autocvar_hud_shownames_decolorize == 2)
+                               s = playername(s, GetPlayerColor(ent.sv_entnum-1));
+
+                       drawfontscale = '1 1 0' * resize;
+                       s = textShortenToWidth(s, namewidth, '1 1 0' * autocvar_hud_shownames_fontsize, stringwidth_colors);
+
+                       float width;
+                       width = stringwidth(s, TRUE, '1 1 0' * autocvar_hud_shownames_fontsize);
+
+                       if (width != namewidth)
+                               namepos_x += (namewidth - width) / 2;
+                       drawcolorcodedstring(namepos, s, '1 1 0' * autocvar_hud_shownames_fontsize, a, DRAWFLAG_NORMAL);
+                       drawfontscale = '1 1 0';
+               }
+       }
+}
+
+entity shownames_ent[255];
+void Draw_ShowNames_All()
+{
+       float i;
+       for(i = 0; i < maxclients; ++i)
+       {
+               vector o;
+               float t;
+               t = GetPlayerColor(i);
+               if(t == COLOR_SPECTATOR)
+                       continue;
+
+               entity e;
+               e = shownames_ent[i];
+               if(!e)
+               {
+                       e = spawn();
+                       e.classname = "shownames_tag";
+                       e.sv_entnum = i+1;
+                       shownames_ent[i] = e;
+               }
+
+               entity entcs;
+               entcs = entcs_receiver[i];
+               if(entcs)
+               {
+                       e.healthvalue = entcs.healthvalue;
+                       e.armorvalue = entcs.armorvalue;
+                       e.sameteam = 1; /* (teamplay && (t == myteam)); */
+               }
+               else
+               {
+                       e.healthvalue = 2342;
+                       e.armorvalue = 0;
+                       e.sameteam = 0;
+               }
+
+               e.origin = getplayerorigin(i);
+               if(e.origin == GETPLAYERORIGIN_ERROR)
+                       continue;
+
+               Draw_ShowNames(e);
+       }
 }
index 70719e0d7c9f03e09f3c24c16634b251db7074b5..d3112f73d12161ee549c4b84ec6d7c04a48a9482 100644 (file)
@@ -1118,6 +1118,7 @@ float autocvar_sv_accelerate;
 var float autocvar_sv_accuracy_data_share = 1;
 string autocvar_sv_adminnick;
 float autocvar_sv_airaccel_qw;
+float autocvar_sv_airaccel_qw_stretchfactor;
 float autocvar_sv_airaccel_sideways_friction;
 float autocvar_sv_airaccelerate;
 float autocvar_sv_aircontrol;
@@ -1127,7 +1128,6 @@ float autocvar_sv_airspeedlimit_nonqw;
 float autocvar_sv_airstopaccelerate;
 float autocvar_sv_airstrafeaccel_qw;
 float autocvar_sv_airstrafeaccelerate;
-float autocvar_sv_allow_shownames;
 float autocvar_sv_autoscreenshot;
 float autocvar_sv_cheats;
 float autocvar_sv_curl_serverpackages_auto;
@@ -1244,4 +1244,3 @@ float autocvar_waypoint_benchmark;
 float autocvar_welcome_message_time;
 float autocvar_sv_gameplayfix_gravityunaffectedbyticrate;
 float autocvar_g_trueaim_minrange;
-float autocvar_sv_shownames_cull_distance;
index a655b0199f6af4e21cc46f741bf761f69f0bbac9..561b755c9694b9d2ff05f95fc946dfbd7df31256 100644 (file)
@@ -333,7 +333,7 @@ entity SelectSpawnPoint (float anypoint)
                {
                        // we request a spawn for a team, and we have team
                        // spawns, but that team has no spawns?
-                       if(have_team_spawns[0])
+                       if(have_team_spawns_forteam[0])
                                // try noteam spawns
                                teamcheck = 0;
                        else
@@ -343,7 +343,7 @@ entity SelectSpawnPoint (float anypoint)
                else
                        teamcheck = self.team; // MUST be team
        }
-       else if(have_team_spawns == 0 && have_team_spawns[0])
+       else if(have_team_spawns == 0 && have_team_spawns_forteam[0])
                teamcheck = 0; // MUST be noteam
        else
                teamcheck = -1;
@@ -1701,8 +1701,7 @@ void ClientConnect (void)
                ctf_clientconnect();
        }*/
 
-       if(teams_matter || radar_showennemies)
-               attach_entcs();
+       attach_entcs();
 
        bot_relinkplayerlist();
 
@@ -1771,15 +1770,6 @@ void ClientConnect (void)
                set_dom_state(self);
 
        CheatInitClient();
-
-       PlayerStats_AddPlayer(self);
-
-    self.shownames = spawn();
-    self.shownames.owner = self;
-    self.shownames.think = shownames_think;
-    self.shownames.nextthink = time;
-       self.shownames.customizeentityforclient = shownames_customize;
-    Net_LinkEntity(self.shownames, FALSE, 0, SendEntity_ShowNames);
 }
 
 /*
@@ -1790,7 +1780,6 @@ Called when a client disconnects from the server
 =============
 */
 .entity chatbubbleentity;
-.entity teambubbleentity;
 void ReadyCount();
 void ClientDisconnect (void)
 {
@@ -1844,9 +1833,6 @@ void ClientDisconnect (void)
        if (self.chatbubbleentity)
                remove (self.chatbubbleentity);
 
-       if (self.teambubbleentity)
-               remove (self.teambubbleentity);
-
        if (self.killindicator)
                remove (self.killindicator);
 
@@ -1879,8 +1865,6 @@ void ClientDisconnect (void)
        self.playerid = 0;
        ReadyCount();
 
-    remove(self.shownames);
-
        // free cvars
        GetCvars(-1);
 }
@@ -1929,52 +1913,6 @@ void UpdateChatBubble()
 }
 
 
-void TeamBubbleThink()
-{
-       self.nextthink = time;
-       if (!self.owner.modelindex || self.owner.teambubbleentity != self)
-       {
-               if(self.owner) // but why can that ever be world?
-                       self.owner.teambubbleentity = world;
-               remove(self);
-               return;
-       }
-//     setorigin(self, self.owner.origin + '0 0 15' + self.owner.maxs_z * '0 0 1');  // bandwidth hog. setattachment does this now
-       if (self.owner.BUTTON_CHAT || self.owner.deadflag || self.owner.killindicator)
-               self.model = "";
-       else
-               self.model = self.mdl;
-
-};
-
-float TeamBubble_customizeentityforclient()
-{
-       return (self.owner != other && self.owner.team == other.team && other.killcount > -666);
-}
-
-void UpdateTeamBubble()
-{
-       if (!self.modelindex || !teams_matter)
-               return;
-       // spawn a teambubble entity if needed
-       if (!self.teambubbleentity && teams_matter)
-       {
-               self.teambubbleentity = spawn();
-               self.teambubbleentity.owner = self;
-               self.teambubbleentity.exteriormodeltoclient = self;
-               self.teambubbleentity.think = TeamBubbleThink;
-               self.teambubbleentity.nextthink = time;
-               setmodel(self.teambubbleentity, "models/misc/teambubble.spr"); // precision set below
-//             setorigin(self.teambubbleentity, self.origin + '0 0 15' + self.maxs_z * '0 0 1');
-               setorigin(self.teambubbleentity, '0 0 15' + self.maxs_z * '0 0 1');
-               setattachment(self.teambubbleentity, self, "");  // sticks to moving player better, also conserves bandwidth
-               self.teambubbleentity.mdl = self.teambubbleentity.model;
-               self.teambubbleentity.model = self.teambubbleentity.mdl;
-               self.teambubbleentity.customizeentityforclient = TeamBubble_customizeentityforclient;
-               self.teambubbleentity.effects = EF_LOWPRECISION;
-       }
-}
-
 // LordHavoc: this hack will be removed when proper _pants/_shirt layers are
 // added to the model skins
 /*void UpdateColorModHack()
@@ -3101,7 +3039,6 @@ void PlayerPostThink (void)
        if(self.classname == "player") {
                CheckRules_Player();
                UpdateChatBubble();
-               UpdateTeamBubble();
                if (self.impulse)
                        ImpulseCommands();
                if (intermission_running)
index 08368676d0055791a10e7d6a9c7135a5ff568ceb..e986341cd027eb11b5904f5542d5ab833e8a2ea9 100644 (file)
@@ -504,7 +504,7 @@ float AdjustAirAccelQW(float accelqw, float factor)
 //   sv_airaccel_sideways_friction 0
 //   prvm_globalset server speedclamp_mode 1
 //     (or 2)
-void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float accel, float accelqw, float sidefric, float speedlimit)
+void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float accel, float accelqw, float stretchfactor, float sidefric, float speedlimit)
 {
        float vel_straight;
        float vel_z;
@@ -516,8 +516,14 @@ void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float acce
        float vel_xy_backward, vel_xy_forward;
        float speedclamp;
 
-       speedclamp = (accelqw < 0);
-       if(speedclamp)
+       if(stretchfactor > 0)
+               speedclamp = stretchfactor;
+       else if(accelqw < 0)
+               speedclamp = 1; // full clamping, no stretch
+       else
+               speedclamp = -1; // no clamping
+
+       if(accelqw < 0)
                accelqw = -accelqw;
 
        if(autocvar_sv_gameplayfix_q2airaccelerate)
@@ -560,12 +566,16 @@ void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float acce
        
        vel_xy = vel_straight * wishdir + vel_perpend;
        
-       if(speedclamp)
+       if(speedclamp >= 0)
        {
-               // ensure we don't get too fast or decelerate faster than we should
-               vel_xy_current = min(vlen(vel_xy), vel_xy_forward);
-               if(vel_xy_current > 0) // prevent division by zero
-                       vel_xy = normalize(vel_xy) * vel_xy_current;
+               float vel_xy_preclamp;
+               vel_xy_preclamp = vlen(vel_xy);
+               if(vel_xy_preclamp > 0) // prevent division by zero
+               {
+                       vel_xy_current += (vel_xy_forward - vel_xy_current) * speedclamp;
+                       if(vel_xy_current < vel_xy_preclamp)
+                               vel_xy = vel_xy * (vel_xy_current / vel_xy_preclamp);
+               }
        }
 
        self.velocity = vel_xy + vel_z * '0 0 1';
@@ -967,7 +977,7 @@ void SV_PlayerPhysics()
                if (wishspeed > self.stat_sv_maxspeed*maxspd_mod)
                        wishspeed = self.stat_sv_maxspeed*maxspd_mod;
                if (time >= self.teleport_time)
-                       PM_Accelerate(wishdir, wishspeed, wishspeed, autocvar_sv_accelerate*maxspd_mod, 1, 0, 0);
+                       PM_Accelerate(wishdir, wishspeed, wishspeed, autocvar_sv_accelerate*maxspd_mod, 1, 0, 0, 0);
        }
        else if (self.waterlevel >= WATERLEVEL_SWIMMING)
        {
@@ -990,7 +1000,7 @@ void SV_PlayerPhysics()
                self.velocity = self.velocity * (1 - frametime * autocvar_sv_friction);
 
                // water acceleration
-               PM_Accelerate(wishdir, wishspeed, wishspeed, autocvar_sv_accelerate*maxspd_mod, 1, 0, 0);
+               PM_Accelerate(wishdir, wishspeed, wishspeed, autocvar_sv_accelerate*maxspd_mod, 1, 0, 0, 0);
        }
        else if (time < self.ladder_time)
        {
@@ -1040,7 +1050,7 @@ void SV_PlayerPhysics()
                if (time >= self.teleport_time)
                {
                        // water acceleration
-                       PM_Accelerate(wishdir, wishspeed, wishspeed, autocvar_sv_accelerate*maxspd_mod, 1, 0, 0);
+                       PM_Accelerate(wishdir, wishspeed, wishspeed, autocvar_sv_accelerate*maxspd_mod, 1, 0, 0, 0);
                }
        }
        else if ((self.items & IT_JETPACK) && self.BUTTON_HOOK && (!autocvar_g_jetpack_fuel || self.ammo_fuel >= 0.01 || self.items & IT_UNLIMITED_WEAPON_AMMO))
@@ -1200,7 +1210,7 @@ void SV_PlayerPhysics()
                if (self.crouch)
                        wishspeed = wishspeed * 0.5;
                if (time >= self.teleport_time)
-                       PM_Accelerate(wishdir, wishspeed, wishspeed, autocvar_sv_accelerate*maxspd_mod, 1, 0, 0);
+                       PM_Accelerate(wishdir, wishspeed, wishspeed, autocvar_sv_accelerate*maxspd_mod, 1, 0, 0, 0);
        }
        else
        {
@@ -1271,7 +1281,7 @@ void SV_PlayerPhysics()
                        if(autocvar_sv_warsowbunny_turnaccel && accelerating && self.movement_y == 0 && self.movement_x != 0)
                                PM_AirAccelerate(wishdir, wishspeed);
                        else
-                               PM_Accelerate(wishdir, wishspeed, wishspeed0, airaccel, airaccelqw, autocvar_sv_airaccel_sideways_friction / maxairspd, self.stat_sv_airspeedlimit_nonqw);
+                               PM_Accelerate(wishdir, wishspeed, wishspeed0, airaccel, airaccelqw, autocvar_sv_airaccel_qw_stretchfactor, autocvar_sv_airaccel_sideways_friction / maxairspd, self.stat_sv_airspeedlimit_nonqw);
 
                        if(autocvar_sv_aircontrol)
                                CPM_PM_Aircontrol(wishdir, wishspeed2);
index 3e507f4ab644b2bb25f1d2eced3a7a3363e4b178..c4bcded2805f99d4546ff023ddb27dee68b29eec 100644 (file)
@@ -735,72 +735,6 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht
        }
 }
 
-// sendflags use: 1 = origin, 2 = health (0 or 1 for dead/alive on enemies), 4 = armor, 0x80 = same team (includes health)
-float SendEntity_ShowNames(entity to, float sendflags)
-{
-    float the_health;
-    the_health = self.health;
-
-    WriteByte(MSG_ENTITY, ENT_CLIENT_SHOWNAMES);
-    WriteByte(MSG_ENTITY, num_for_edict(self.owner));
-
-    sendflags = sendflags & 127;
-    if(teams_matter && self.owner.team == to.team)
-        sendflags |= 128;
-    else if(self.owner.health >= 1)
-        the_health = 1;
-
-    WriteByte(MSG_ENTITY, sendflags);
-    if(sendflags & 1)
-    {
-        WriteShort(MSG_ENTITY, rint(self.origin_x));
-        WriteShort(MSG_ENTITY, rint(self.origin_y));
-        WriteShort(MSG_ENTITY, rint(self.origin_z));
-    }
-    if(sendflags & 2)
-    {
-        WriteByte(MSG_ENTITY, the_health);
-    }
-    if(sendflags & 4)
-    {
-        WriteByte(MSG_ENTITY, self.armorvalue);
-    }
-    return TRUE;
-}
-
-const vector SHOWNAMES_ORIGIN_OFFSET = '0 0 48';
-void shownames_think()
-{
-    if(self.origin - SHOWNAMES_ORIGIN_OFFSET != self.owner.origin)
-    {
-        setorigin(self, self.owner.origin + SHOWNAMES_ORIGIN_OFFSET);
-        self.SendFlags |= 1;
-    }
-    if(self.health != max(0, floor(self.owner.health)) || self.armorvalue != max(0, floor(self.owner.armorvalue)))
-    {
-        self.health = max(0, floor(self.owner.health));
-        self.armorvalue = max(0, floor(self.owner.armorvalue));
-        self.SendFlags |= 2;
-    }
-    if(self.armorvalue != max(0, floor(self.owner.armorvalue)))
-    {
-        self.armorvalue = max(0, floor(self.owner.armorvalue));
-        self.SendFlags |= 4;
-    }
-    self.nextthink = time;
-}
-
-float shownames_customize()
-{
-    if(self.owner.classname == "player") // only send players, no spectators!
-    if(self.owner != other) // no need to spam own coordinates
-    if(vlen(other.origin - self.origin) < autocvar_sv_shownames_cull_distance) // distance cull
-    if(self.owner.team == other.team || (self.owner.team != other.team && checkpvs(self.origin, other)))
-        return TRUE;
-
-    return FALSE;
-}
-
 .float muted; // to be used by prvm_edictset server playernumber muted 1
 float Say(entity source, float teamsay, entity privatesay, string msgin, float floodcontrol)
 // message "": do not say, just test flood control
index 19f0c24a5981c6d2c4001623c99188b17fc5abf7..f3c754151e87ac719a10ff11bdc9758160b92e66 100644 (file)
@@ -664,6 +664,3 @@ float serverflags;
 
 .entity muzzle_flash;
 .float misc_bulletcounter;     // replaces uzi & hlac bullet counter.
-
-.entity shownames;
-void shownames_think();
index 281a0b4a4548df2f5583c43266be37cd6c619e36..b58c0f074fd052ba8824c007d89293247d5ea686 100644 (file)
@@ -179,7 +179,7 @@ void dompoint_captured ()
 
        self.captime = time;
 
-       FOR_EACH_PLAYER(head)
+       FOR_EACH_REALCLIENT(head)
                set_dom_state(head);
 };
 
index bee79d682e9e2d5d4ad31cd84a8c0231b788187c..3ffcb3b3868aa23f16e7628ab816fbb75a5a1ea7 100644 (file)
@@ -31,7 +31,7 @@ float entcs_customize()
        if(other == o)
                return FALSE;
        if(other.classname == "player")
-               if(o.team != other.team)
+               if(!teams_matter || o.team != other.team)
                        if not (radar_showennemies)
                                return FALSE;
        return TRUE;
@@ -39,29 +39,51 @@ float entcs_customize()
 
 float entcs_send(entity to, float sf)
 {
-       entity o;
-       o = self.owner;
        WriteByte(MSG_ENTITY, ENT_CLIENT_ENTCS);
-       WriteByte(MSG_ENTITY, num_for_edict(o));
-       WriteShort(MSG_ENTITY, o.origin_x);
-       WriteShort(MSG_ENTITY, o.origin_y);
-       WriteShort(MSG_ENTITY, o.origin_z);
-       WriteByte(MSG_ENTITY, o.angles_y * 256.0 / 360);
+       WriteByte(MSG_ENTITY, sf);
+       if(sf & 1)
+               WriteByte(MSG_ENTITY, num_for_edict(self.owner)-1);
+       if(sf & 2)
+       {
+               WriteShort(MSG_ENTITY, self.origin_x);
+               WriteShort(MSG_ENTITY, self.origin_y);
+               WriteShort(MSG_ENTITY, self.origin_z);
+       }
+       if(sf & 4)
+               WriteByte(MSG_ENTITY, self.angles_y * 256.0 / 360);
+       if(sf & 8)
+               WriteByte(MSG_ENTITY, self.health / 10); // FIXME use a better scale?
+       if(sf & 16)
+               WriteByte(MSG_ENTITY, self.armorvalue / 10); // FIXME use a better scale?
        return TRUE;
 };
 
 void entcs_think()
 {
-       self.nextthink = time;
+       self.nextthink = time + 0.033333333333; // increase this to like 0.15 once the client can do smoothing
 
        entity o;
        o = self.owner;
 
-       if(o.origin != self.origin || o.angles != self.angles)
+       if(o.origin != self.origin)
        {
                setorigin(self, o.origin);
+               self.SendFlags |= 2;
+       }
+       if(o.angles_y != self.angles_y)
+       {
                self.angles = o.angles;
-               self.SendFlags |= 1;
+               self.SendFlags |= 4;
+       }
+       if(o.health != self.health)
+       {
+               self.health = o.health;
+               self.SendFlags |= 8;
+       }
+       if(o.armorvalue != self.armorvalue)
+       {
+               self.armorvalue = o.armorvalue;
+               self.SendFlags |= 16;
        }
 };
 
index 0602ed9d87b3f436234bb0e681333d6a4f17491b..6622dea1ff5c6ca9c8cbce3b7114252cb9136ffd 100644 (file)
@@ -617,6 +617,8 @@ void GetCvars(float f)
        {
                if (s == "cl_weaponpriority")
                        self.switchweapon = w_getbestweapon(self);
+               if (s == "cl_allow_uidtracking")
+                       PlayerStats_AddPlayer(self);
        }
 }
 
@@ -1555,7 +1557,6 @@ void precache()
 {
     // gamemode related things
     precache_model ("models/misc/chatbubble.spr");
-    precache_model ("models/misc/teambubble.spr");
     if (g_runematch)
     {
         precache_model ("models/runematch/curse.mdl");
index 2bb5540d6b26680cd4027bcf3739a12c90812dae..b3ed92210408a1597e2c0ad62a1154fd72aef337 100644 (file)
@@ -39,6 +39,8 @@ void PlayerStats_AddPlayer(entity e)
 {
        if(playerstats_db < 0)
                return;
+       if(e.playerstats_id)
+               return;
 
        if(e.crypto_idfp != "" && e.cvar_cl_allow_uidtracking == 1)
                e.playerstats_id = strzone(e.crypto_idfp);
diff --git a/textures/pickups.tga b/textures/pickups.tga
deleted file mode 100644 (file)
index ee2a1f5..0000000
Binary files a/textures/pickups.tga and /dev/null differ
diff --git a/textures/pickups_bump.tga b/textures/pickups_bump.tga
deleted file mode 100644 (file)
index 90acf58..0000000
Binary files a/textures/pickups_bump.tga and /dev/null differ
diff --git a/textures/pickups_gloss.tga b/textures/pickups_gloss.tga
deleted file mode 100644 (file)
index 4f310bf..0000000
Binary files a/textures/pickups_gloss.tga and /dev/null differ
diff --git a/textures/pickups_glow.tga b/textures/pickups_glow.tga
deleted file mode 100644 (file)
index d747029..0000000
Binary files a/textures/pickups_glow.tga and /dev/null differ