From: MaidenBeast Date: Sun, 31 Jul 2011 19:01:05 +0000 (+0200) Subject: Merge branch 'master' into MaidenBeast/translation_updates X-Git-Tag: xonotic-v0.5.0~148^2~25^2~5 X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=ef3002909bfd4b08ff4e2fc2f23e07849bac77e0;hp=e7b12effc56b759e64fff06e252d1953096a9d9f Merge branch 'master' into MaidenBeast/translation_updates --- diff --git a/balance25.cfg b/balance25.cfg index e48e20933b..843bd634fd 100644 --- a/balance25.cfg +++ b/balance25.cfg @@ -333,7 +333,8 @@ set g_balance_grenadelauncher_secondary_speed_up 200 set g_balance_grenadelauncher_secondary_speed_z 0 set g_balance_grenadelauncher_secondary_spread 0 set g_balance_grenadelauncher_secondary_lifetime 2.5 -set g_balance_grenadelauncher_secondary_lifetime2 0 +set g_balance_grenadelauncher_secondary_lifetime_bounce 0 +set g_balance_grenadelauncher_secondary_lifetime_stick 0 set g_balance_grenadelauncher_secondary_refire 0.7 set g_balance_grenadelauncher_secondary_animtime 0.3 set g_balance_grenadelauncher_secondary_ammo 2 diff --git a/balanceFruit.cfg b/balanceFruit.cfg index 7256633aca..5a078e44cf 100644 --- a/balanceFruit.cfg +++ b/balanceFruit.cfg @@ -333,7 +333,8 @@ set g_balance_grenadelauncher_secondary_speed_up 250 set g_balance_grenadelauncher_secondary_speed_z 0 set g_balance_grenadelauncher_secondary_spread 0 set g_balance_grenadelauncher_secondary_lifetime 3 -set g_balance_grenadelauncher_secondary_lifetime2 0.65 +set g_balance_grenadelauncher_secondary_lifetime_bounce 0 +set g_balance_grenadelauncher_secondary_lifetime_stick 0.65 set g_balance_grenadelauncher_secondary_refire 0.8 set g_balance_grenadelauncher_secondary_animtime 0.3 set g_balance_grenadelauncher_secondary_ammo 2 diff --git a/balanceLeeStricklin.cfg b/balanceLeeStricklin.cfg index 2237ef53e0..02e804e798 100644 --- a/balanceLeeStricklin.cfg +++ b/balanceLeeStricklin.cfg @@ -333,7 +333,8 @@ set g_balance_grenadelauncher_secondary_speed_up 200 set g_balance_grenadelauncher_secondary_speed_z 0 set g_balance_grenadelauncher_secondary_spread 0 set g_balance_grenadelauncher_secondary_lifetime 2.5 -set g_balance_grenadelauncher_secondary_lifetime2 1 +set g_balance_grenadelauncher_secondary_lifetime_bounce 0 +set g_balance_grenadelauncher_secondary_lifetime_stick 1 set g_balance_grenadelauncher_secondary_refire 0.6 set g_balance_grenadelauncher_secondary_animtime 0.3 set g_balance_grenadelauncher_secondary_ammo 2 diff --git a/balanceXonotic.cfg b/balanceXonotic.cfg index a8719766f7..864ead2cce 100644 --- a/balanceXonotic.cfg +++ b/balanceXonotic.cfg @@ -332,8 +332,9 @@ set g_balance_grenadelauncher_secondary_speed 1400 set g_balance_grenadelauncher_secondary_speed_up 150 set g_balance_grenadelauncher_secondary_speed_z 0 set g_balance_grenadelauncher_secondary_spread 0.02 -set g_balance_grenadelauncher_secondary_lifetime 1 -set g_balance_grenadelauncher_secondary_lifetime2 0 +set g_balance_grenadelauncher_secondary_lifetime 5 +set g_balance_grenadelauncher_secondary_lifetime_bounce 0.5 +set g_balance_grenadelauncher_secondary_lifetime_stick 0 set g_balance_grenadelauncher_secondary_refire 0.7 set g_balance_grenadelauncher_secondary_animtime 0.3 set g_balance_grenadelauncher_secondary_ammo 2 diff --git a/balancetZork.cfg b/balancetZork.cfg index 73600d3eea..57c4996871 100644 --- a/balancetZork.cfg +++ b/balancetZork.cfg @@ -333,7 +333,8 @@ set g_balance_grenadelauncher_secondary_speed_up 200 set g_balance_grenadelauncher_secondary_speed_z 0 set g_balance_grenadelauncher_secondary_spread 0 set g_balance_grenadelauncher_secondary_lifetime 2.5 -set g_balance_grenadelauncher_secondary_lifetime2 0 +set g_balance_grenadelauncher_secondary_lifetime_bounce 0 +set g_balance_grenadelauncher_secondary_lifetime_stick 0 set g_balance_grenadelauncher_secondary_refire 0.7 set g_balance_grenadelauncher_secondary_animtime 0.3 set g_balance_grenadelauncher_secondary_ammo 2 diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index a536af133f..58d54e41d0 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -702,7 +702,7 @@ set g_ctf_flagcarrier_selfforce 1 set g_ctf_fullbrightflags 0 set g_ctf_dynamiclights 0 set g_ctf_allow_drop 1 "dropping allows circumventing carrierkill score, so enable this with care!" -set g_ctf_reverse 0 "when 1, bases/flags are switched :P you have to capture your OWN flag by bringing it to the ENEMY's" +set g_ctf_reverse 0 "if enabled, flags positions are switched: you have to capture the enemy's flag from your own base by bringing it to your own flag in the enemy base" set g_balance_ctf_delay_collect 1.0 set g_balance_ctf_damageforcescale 1 @@ -899,6 +899,7 @@ set g_multijump_add 0 "0 = make the current z velocity equal to jumpvelocity, 1 set g_multijump_speed -999999 "Minimum vertical speed a player must have in order to jump again" // effects +r_glsl_vertextextureblend_usebothalphas 1 // allows to abuse texture blending as detail texture r_glsl_postprocess 1 r_picmipsprites 0 // Xonotic uses sprites that should never be picmipped (team mate, typing, waypoints) r_picmipworld 1 @@ -1245,6 +1246,10 @@ seta g_waypointsprite_alpha 1 "This allows the client to control transparency of seta g_waypointsprite_edgefadealpha 0.5 "alpha multiplier near the edge" seta g_waypointsprite_edgefadescale 1 "scale multiplier near the edge" seta g_waypointsprite_edgefadedistance 50 "distance in virtual pixels from edge where to start fading" +seta g_waypointsprite_edgeoffset_bottom 0 "offset of how close the waypoint can be to the bottom edge of the screen" +seta g_waypointsprite_edgeoffset_left 0 "offset of how close the waypoint can be to the left edge of the screen" +seta g_waypointsprite_edgeoffset_right 0 "offset of how close the waypoint can be to the right edge of the screen" +seta g_waypointsprite_edgeoffset_top 0 "offset of how close the waypoint can be to the top edge of the screen" seta g_waypointsprite_crosshairfadealpha 0.25 "alpha multiplier near crosshair" seta g_waypointsprite_crosshairfadescale 1 "scale multiplier near the crosshair" seta g_waypointsprite_crosshairfadedistance 150 "distance in virtual pixels from crosshair where to start fading" @@ -1263,7 +1268,7 @@ alias "g_waypointsprite_team_danger_p" "impulse 38" alias "g_waypointsprite_team_danger_d" "impulse 39" alias "g_waypointsprite_clear_personal" "impulse 47" alias "g_waypointsprite_clear" "impulse 48" -alias "g_waypointsprite_toggle" "impulse 49" +alias "g_waypointsprite_toggle" "toggle cl_hidewaypoints" // key for that? seta cl_hidewaypoints 0 "disable static waypoints, only show team waypoints" diff --git a/fixtooltips.pl b/fixtooltips.pl new file mode 100644 index 0000000000..e7af7b2306 --- /dev/null +++ b/fixtooltips.pl @@ -0,0 +1,28 @@ +use strict; +use warnings; +use Locale::PO; + +sub quote($) +{ + my $s = shift; + $s = '"' . quotemeta($s) . '"'; + return $s; +} +sub unquote($) +{ + my $s = shift; + $s =~ s/^"//; + $s =~ s/"$//; + $s =~ s/\\(.)/$1/g; + return $s; +} +my $po = Locale::PO->load_file_ashash("menu.dat." . $ENV{L} . ".po"); +while(<>) +{ + /\\(.*?)\\(.*)/s or do { print; next; }; + my @s = split /\//, $1; + @s = map { $po->{quote($_)} ? unquote($po->{quote($_)}->msgstr()) : $_ } @s; + my $s = join "/", @s; + $_ = "\\$s\\$2"; + print "$_"; +} diff --git a/models/domination/dom_blue.md3 b/models/domination/dom_blue.md3 index 8fd6b4fc09..6429f48948 100644 Binary files a/models/domination/dom_blue.md3 and b/models/domination/dom_blue.md3 differ diff --git a/models/domination/dom_pink.md3 b/models/domination/dom_pink.md3 index d8a9579cdb..7aa01bf395 100644 Binary files a/models/domination/dom_pink.md3 and b/models/domination/dom_pink.md3 differ diff --git a/models/domination/dom_red.md3 b/models/domination/dom_red.md3 index cb68ce4051..332b0f2395 100644 Binary files a/models/domination/dom_red.md3 and b/models/domination/dom_red.md3 differ diff --git a/models/domination/dom_unclaimed.md3 b/models/domination/dom_unclaimed.md3 index efbcf9cf74..be5aaa9571 100644 Binary files a/models/domination/dom_unclaimed.md3 and b/models/domination/dom_unclaimed.md3 differ diff --git a/models/domination/dom_yellow.md3 b/models/domination/dom_yellow.md3 index bb6ff52fe5..b1da0d1b09 100644 Binary files a/models/domination/dom_yellow.md3 and b/models/domination/dom_yellow.md3 differ diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index fb9a1bb74d..0b0faa3108 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -827,8 +827,6 @@ void Ent_ClientData() if(newspectatee_status != spectatee_status) { - float i; - // clear race stuff race_laptime = 0; race_checkpointtime = 0; @@ -849,13 +847,26 @@ void Ent_Nagger() { float nags, i, j, b, f; - nags = ReadByte(); + nags = ReadByte(); // NAGS NAGS NAGS NAGS NAGS NAGS NADZ NAGS NAGS NAGS if(!(nags & 4)) { if(vote_called_vote) strunzone(vote_called_vote); vote_called_vote = string_null; + vote_active = 0; + } + else + { + vote_active = 1; + } + + if(nags & 64) + { + vote_yescount = ReadByte(); + vote_nocount = ReadByte(); + vote_needed = ReadByte(); + vote_highlighted = ReadChar(); } if(nags & 128) @@ -1302,22 +1313,6 @@ void Net_ReadPingPLReport() playerslots[e].ping_movementloss = ml / 255.0; } -void Net_VoteDialog(float highlight) { - if(highlight) { - vote_highlighted = ReadByte(); - return; - } - - vote_yescount = ReadByte(); - vote_nocount = ReadByte(); - vote_needed = ReadByte(); - vote_active = 1; -} - -void Net_VoteDialogReset() { - vote_active = 0; -} - void Net_Notify() { float type; type = ReadByte(); @@ -1387,14 +1382,6 @@ float CSQC_Parse_TempEntity() Net_TeamNagger(); bHandled = true; break; - case TE_CSQC_VOTE: - Net_VoteDialog(ReadByte()); - bHandled = true; - break; - case TE_CSQC_VOTERESET: - Net_VoteDialogReset(); - bHandled = true; - break; case TE_CSQC_LIGHTNINGARC: Net_ReadLightningarc(); bHandled = true; diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index dfefe96ff5..e6dc730983 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -1,7 +1,5 @@ entity porto; vector polyline[16]; -float trace_dphitcontents; -float trace_networkentity; float Q3SURFACEFLAG_SLICK = 2; // low friction surface float DPCONTENTS_SOLID = 1; // blocks player movement float DPCONTENTS_BODY = 32; // blocks player movement @@ -177,11 +175,15 @@ vector GetCurrentFov(float fov) else setsensitivityscale(1); - velocityzoom = bound(0, drawframetime / max(0.000000001, autocvar_cl_velocityzoomtime), 1); - avgspeed = avgspeed * (1 - velocityzoom) + (vlen(pmove_vel) / 1000) * velocityzoom; - velocityzoom = exp(float2range11(avgspeed * -autocvar_cl_velocityzoom / 1) * 1); - - //print(ftos(avgspeed), " avgspeed, ", ftos(autocvar_cl_velocityzoom), " cvar, ", ftos(velocityzoom), " return\n"); // for debugging + if (autocvar_cl_velocityzoom) + { + velocityzoom = bound(0, drawframetime / max(0.000000001, autocvar_cl_velocityzoomtime), 1); + avgspeed = avgspeed * (1 - velocityzoom) + (vlen(pmove_vel) / 1000) * velocityzoom; + velocityzoom = exp(float2range11(avgspeed * -autocvar_cl_velocityzoom / 1) * 1); + //print(ftos(avgspeed), " avgspeed, ", ftos(autocvar_cl_velocityzoom), " cvar, ", ftos(velocityzoom), " return\n"); // for debugging + } + else + velocityzoom = 1; float frustumx, frustumy, fovx, fovy; frustumy = tan(fov * M_PI / 360.0) * 0.75 * current_viewzoom * velocityzoom; diff --git a/qcsrc/client/autocvars.qh b/qcsrc/client/autocvars.qh index ae87f9a429..8e60d8212f 100644 --- a/qcsrc/client/autocvars.qh +++ b/qcsrc/client/autocvars.qh @@ -134,6 +134,10 @@ var float autocvar_g_waypointsprite_distancefadescale = 1; var float autocvar_g_waypointsprite_edgefadealpha = 1; float autocvar_g_waypointsprite_edgefadedistance; var float autocvar_g_waypointsprite_edgefadescale = 1; +var float autocvar_g_waypointsprite_edgeoffset_bottom = 0; +var float autocvar_g_waypointsprite_edgeoffset_left = 0; +var float autocvar_g_waypointsprite_edgeoffset_right = 0; +var float autocvar_g_waypointsprite_edgeoffset_top = 0; float autocvar_g_waypointsprite_minalpha; float autocvar_g_waypointsprite_minscale; float autocvar_g_waypointsprite_normdistance; diff --git a/qcsrc/client/casings.qc b/qcsrc/client/casings.qc index 9234b47434..d809c79802 100644 --- a/qcsrc/client/casings.qc +++ b/qcsrc/client/casings.qc @@ -55,7 +55,7 @@ void Casing_Touch() break; } - sound (self, CH_SHOTS_SINGLE, s, VOL_BASE, ATTN_NORM); + sound (self, CH_SHOTS, s, VOL_BASE, ATTN_NORM); } } } diff --git a/qcsrc/client/csqc_builtins.qc b/qcsrc/client/csqc_builtins.qc index b7e4b39713..c8b555dc39 100644 --- a/qcsrc/client/csqc_builtins.qc +++ b/qcsrc/client/csqc_builtins.qc @@ -329,3 +329,8 @@ float CVAR_TYPEFLAG_PRIVATE = 4; float CVAR_TYPEFLAG_ENGINE = 8; float CVAR_TYPEFLAG_HASDESCRIPTION = 16; float CVAR_TYPEFLAG_READONLY = 32; + +void (entity e, float chan, string samp, float vol, float atten, float pitchshift, float flags) sound7 = #8; + +float trace_dphitcontents; +float trace_networkentity; diff --git a/qcsrc/client/damage.qc b/qcsrc/client/damage.qc index daff7554e0..1617e4923d 100644 --- a/qcsrc/client/damage.qc +++ b/qcsrc/client/damage.qc @@ -88,33 +88,33 @@ void Ent_DamageInfo(float isNew) case DEATH_SBMINIGUN: string _snd; _snd = strcat("weapons/ric", ftos(1 + rint(random() * 2)), ".waw"); - sound(self, CH_SHOTS_SINGLE, _snd, VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, _snd, VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("spiderbot_minigun_impact"), self.origin, w_backoff * 1000, 1); break; case DEATH_SBROCKET: - sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("spiderbot_rocket_explode"), self.origin, w_backoff * 1000, 1); break; case DEATH_SBBLOWUP: - sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN); + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN); pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1); break; case DEATH_WAKIGUN: - sound(self, CH_SHOTS_SINGLE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("wakizashi_gun_impact"), self.origin, w_backoff * 1000, 1); break; case DEATH_WAKIROCKET: - sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("wakizashi_rocket_explode"), self.origin, w_backoff * 1000, 1); break; case DEATH_WAKIBLOWUP: - sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN); + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN); pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1); break; case DEATH_RAPTOR_CANNON: - sound(self, CH_SHOTS_SINGLE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("raptor_cannon_impact"), self.origin, w_backoff * 1000, 1); break; case DEATH_RAPTOR_BOMB_SPLIT: @@ -128,15 +128,15 @@ void Ent_DamageInfo(float isNew) } - sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("raptor_bomb_spread"), self.origin, w_backoff * 1000, 1); break; case DEATH_RAPTOR_BOMB: - sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("raptor_bomb_impact"), self.origin, w_backoff * 1000, 1); break; case DEATH_RAPTOR_DEATH: - sound(self, CH_SHOTS_SINGLE, "weapons/laserimpact.wav", VOL_BASE, ATTN_MIN); + sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_MIN); pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1); break; } @@ -156,7 +156,7 @@ void Ent_DamageInfo(float isNew) switch(w_deathtype) { case DEATH_TURRET_EWHEEL: - sound(self, CH_SHOTS_SINGLE, "weapons/laserimpact.wav", VOL_BASE, ATTN_MIN); + sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_MIN); pointparticles(particleeffectnum("electro_impact"), self.origin, w_backoff * 1000, 1); break; @@ -165,11 +165,11 @@ void Ent_DamageInfo(float isNew) org2 = w_org + w_backoff * 6; pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1); if (w_random<0.15) - sound(self, CH_SHOTS_SINGLE, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM); else if (w_random<0.7) - sound(self, CH_SHOTS_SINGLE, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM); else - sound(self, CH_SHOTS_SINGLE, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM); break; @@ -177,7 +177,7 @@ void Ent_DamageInfo(float isNew) case DEATH_TURRET_HK: case DEATH_TURRET_WALKER_ROCKET: case DEATH_TURRET_HELLION: - sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN); + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN); pointparticles(particleeffectnum("rocket_explode"), self.origin, w_backoff * 1000, 1); break; @@ -185,17 +185,17 @@ void Ent_DamageInfo(float isNew) case DEATH_TURRET_WALKER_GUN: string _snd; _snd = strcat("weapons/ric", ftos(1 + rint(random() * 2)), ".waw"); - sound(self, CH_SHOTS_SINGLE, _snd, VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, _snd, VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("machinegun_impact"), self.origin, w_backoff * 1000, 1); break; case DEATH_TURRET_PLASMA: - sound(self, CH_SHOTS_SINGLE, "weapons/electro_impact.wav", VOL_BASE, ATTN_MIN); + sound(self, CH_SHOTS, "weapons/electro_impact.wav", VOL_BASE, ATTN_MIN); pointparticles(particleeffectnum("electro_impact"), self.origin, w_backoff * 1000, 1); break; case DEATH_TURRET_WALKER_MEELE: - sound(self, CH_SHOTS_SINGLE, "weapons/ric1.wav", VOL_BASE, ATTN_MIN); + sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_MIN); pointparticles(particleeffectnum("TE_SPARK"), self.origin, w_backoff * 1000, 1); break; diff --git a/qcsrc/client/hud.qc b/qcsrc/client/hud.qc index 6b11719567..260b2c5c59 100644 --- a/qcsrc/client/hud.qc +++ b/qcsrc/client/hud.qc @@ -3117,7 +3117,7 @@ void HUD_VoteWindow(void) pos = panel_pos; mySize = panel_size; - a = vote_alpha * bound(autocvar_hud_panel_vote_alreadyvoted_alpha, 1 - vote_highlighted, 1); + a = vote_alpha * (vote_highlighted ? autocvar_hud_panel_vote_alreadyvoted_alpha : 1); HUD_Panel_DrawBg(a); a = panel_fg_alpha * a; @@ -3168,7 +3168,7 @@ void HUD_VoteWindow(void) drawsetcliparea(pos_x, pos_y, mySize_x * 0.5, mySize_y); drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_voted", eX * mySize_x + eY * (3/8) * mySize_y, '1 1 1', a, DRAWFLAG_NORMAL); } - else if(vote_highlighted == 2) { + else if(vote_highlighted == -1) { drawsetcliparea(pos_x + 0.5 * mySize_x, pos_y, mySize_x * 0.5, mySize_y); drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_voted", eX * mySize_x + eY * (3/8) * mySize_y, '1 1 1', a, DRAWFLAG_NORMAL); } @@ -3187,10 +3187,6 @@ void HUD_VoteWindow(void) } drawresetcliparea(); - - if(!vote_active) { - vote_highlighted = 0; - } } // Mod icons panel (#10) diff --git a/qcsrc/client/hud.qh b/qcsrc/client/hud.qh index d2fbfebef2..fc3dd74221 100644 --- a/qcsrc/client/hud.qh +++ b/qcsrc/client/hud.qh @@ -232,7 +232,7 @@ else\ panel_pos = (1 - autocvar__menu_alpha) * panel_pos + (autocvar__menu_alpha) * menu_enable_panelpos; // return smoothly faded size of given panel when a dialog is active -//var vector menu_enable_maxsize; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(menu_enable_maxsize); +//var vector menu_enable_maxsize; var float menu_enable_maxsize_x; var float menu_enable_maxsize_y; var vector menu_enable_size; diff --git a/qcsrc/client/main.qh b/qcsrc/client/main.qh index 6788daad18..a0634d42c9 100644 --- a/qcsrc/client/main.qh +++ b/qcsrc/client/main.qh @@ -86,8 +86,8 @@ string scores_label[MAX_SCORE]; float scores_flags[MAX_SCORE]; string teamscores_label[MAX_SCORE]; float teamscores_flags[MAX_SCORE]; -.float scores[MAX_SCORE]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(scores); -.float teamscores[MAX_TEAMSCORE]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(teamscores); +.float scores[MAX_SCORE]; +.float teamscores[MAX_TEAMSCORE]; #define IS_INCREASING(x) ( (x)&SFL_LOWER_IS_BETTER ) #define IS_DECREASING(x) ( !((x)&SFL_LOWER_IS_BETTER) ) diff --git a/qcsrc/client/mapvoting.qc b/qcsrc/client/mapvoting.qc index b40dd49ee1..48b2106e14 100644 --- a/qcsrc/client/mapvoting.qc +++ b/qcsrc/client/mapvoting.qc @@ -170,7 +170,7 @@ void MapVote_Draw() if(!mv_active) return; - + mv_mousepos = mv_mousepos + getmousepos(); mv_mousepos_x = bound(0, mv_mousepos_x, vid_conwidth); @@ -190,14 +190,14 @@ void MapVote_Draw() pos_y = ymin; pos_z = 0; - //pos_x = center - stringwidth("Vote for a map", false) * 0.5 * 24; - pos_x = center - stringwidth(_("Vote for a map"), false, '12 0 0'); - drawstring(pos, "Vote for a map", '24 24 0', '1 1 1', 1, DRAWFLAG_NORMAL); + + map = _("Vote for a map"); + pos_x = center - stringwidth(map, false, '12 0 0'); + drawstring(pos, map, '24 24 0', '1 1 1', 1, DRAWFLAG_NORMAL); pos_y += 26; i = ceil(max(0, mv_timeout - time)); map = sprintf(_("%d seconds left"), i); - //pos_x = center - stringwidth(map, false) * 0.5 * 16; pos_x = center - stringwidth(map, false, '8 0 0'); drawstring(pos, map, '16 16 0', '0 1 0', 1, DRAWFLAG_NORMAL); pos_y += 22; @@ -207,7 +207,7 @@ void MapVote_Draw() ymin = pos_y; if(mv_abstain) mv_num_maps -= 1; - + if(mv_num_maps > 3) { columns = 3; @@ -242,7 +242,7 @@ void MapVote_Draw() if(mv_abstain) ++mv_num_maps; - + if(mv_abstain && i < mv_num_maps) { tmp = mv_votes[i]; pos_y = ymax + isize - hud_fontsize_y; diff --git a/qcsrc/client/miscfunctions.qc b/qcsrc/client/miscfunctions.qc index da09230dbc..0ba6097701 100644 --- a/qcsrc/client/miscfunctions.qc +++ b/qcsrc/client/miscfunctions.qc @@ -319,9 +319,6 @@ vector HUD_GetFontsize(string cvarname) float PreviewExists(string name) { - float f; - string file; - if(autocvar_cl_readpicture_force) return false; diff --git a/qcsrc/client/movetypes.qc b/qcsrc/client/movetypes.qc index 9a17dea356..4dcdae90bf 100644 --- a/qcsrc/client/movetypes.qc +++ b/qcsrc/client/movetypes.qc @@ -1,3 +1,7 @@ +float STAT_MOVEFLAGS = 225; +float MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE = 4; +#define GRAVITY_UNAFFECTED_BY_TICRATE (getstati(STAT_MOVEFLAGS) & MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE) + .entity move_groundentity; .float move_suspendedinair; .float move_didgravity; @@ -232,11 +236,21 @@ void _Movetype_Physics_Toss(float dt) // SV_Physics_Toss if(self.move_movetype == MOVETYPE_BOUNCE || self.move_movetype == MOVETYPE_TOSS) { - self.move_didgravity = TRUE; - if(self.gravity) - self.move_velocity_z -= dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY); + self.move_didgravity = 1; + if(GRAVITY_UNAFFECTED_BY_TICRATE) + { + if(self.gravity) + self.move_velocity_z -= 0.5 * dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY); + else + self.move_velocity_z -= 0.5 * dt * getstatf(STAT_MOVEVARS_GRAVITY); + } else - self.move_velocity_z -= dt * getstatf(STAT_MOVEVARS_GRAVITY); + { + if(self.gravity) + self.move_velocity_z -= dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY); + else + self.move_velocity_z -= dt * getstatf(STAT_MOVEVARS_GRAVITY); + } } self.move_angles = self.move_angles + self.move_avelocity * dt; @@ -318,12 +332,22 @@ void _Movetype_Physics_Toss(float dt) // SV_Physics_Toss break; } + if(GRAVITY_UNAFFECTED_BY_TICRATE) + if(self.move_didgravity > 0) + if(!(self.move_flags & FL_ONGROUND)) + { + if(self.gravity) + self.move_velocity_z -= 0.5 * dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY); + else + self.move_velocity_z -= 0.5 * dt * getstatf(STAT_MOVEVARS_GRAVITY); + } + _Movetype_CheckWaterTransition(); } void _Movetype_Physics_Frame(float movedt) { - self.move_didgravity = FALSE; + self.move_didgravity = -1; switch(self.move_movetype) { case MOVETYPE_PUSH: @@ -364,9 +388,6 @@ void Movetype_Physics_NoMatchServer() // optimized movedt = time - self.move_time; self.move_time = time; - //self.move_didgravity = ((self.move_movetype == MOVETYPE_BOUNCE || self.move_movetype == MOVETYPE_TOSS) && !(self.move_flags & FL_ONGROUND)); - // we use the field as set by the last run of this - _Movetype_Physics_Frame(movedt); if(wasfreed(self)) return; @@ -399,8 +420,8 @@ void Movetype_Physics_MatchTicrate(float tr, float sloppy) // SV_Physics_Entity dt -= n * tr; self.move_time += n * tr; - //self.move_didgravity = ((self.move_movetype == MOVETYPE_BOUNCE || self.move_movetype == MOVETYPE_TOSS) && !(self.move_flags & FL_ONGROUND)); - // we use the field as set by the last run of this + if(!self.move_didgravity) + self.move_didgravity = ((self.move_movetype == MOVETYPE_BOUNCE || self.move_movetype == MOVETYPE_TOSS) && !(self.move_flags & FL_ONGROUND)); for(i = 0; i < n; ++i) { @@ -415,12 +436,23 @@ void Movetype_Physics_MatchTicrate(float tr, float sloppy) // SV_Physics_Entity { // now continue the move from move_time to time self.velocity = self.move_velocity; - if(self.move_didgravity) + + if(self.move_didgravity > 0) { - if(self.gravity) - self.velocity_z -= dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY); + if(GRAVITY_UNAFFECTED_BY_TICRATE) + { + if(self.gravity) + self.velocity_z -= 0.5 * dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY); + else + self.velocity_z -= 0.5 * dt * getstatf(STAT_MOVEVARS_GRAVITY); + } else - self.velocity_z -= dt * getstatf(STAT_MOVEVARS_GRAVITY); + { + if(self.gravity) + self.velocity_z -= dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY); + else + self.velocity_z -= dt * getstatf(STAT_MOVEVARS_GRAVITY); + } } self.angles = self.move_angles + dt * self.avelocity; @@ -435,6 +467,17 @@ void Movetype_Physics_MatchTicrate(float tr, float sloppy) // SV_Physics_Entity if(!trace_startsolid) setorigin(self, trace_endpos); } + + if(self.move_didgravity > 0) + { + if(GRAVITY_UNAFFECTED_BY_TICRATE) + { + if(self.gravity) + self.velocity_z -= 0.5 * dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY); + else + self.velocity_z -= 0.5 * dt * getstatf(STAT_MOVEVARS_GRAVITY); + } + } } else { diff --git a/qcsrc/client/scoreboard.qc b/qcsrc/client/scoreboard.qc index 37ace81a32..67b7f746c8 100644 --- a/qcsrc/client/scoreboard.qc +++ b/qcsrc/client/scoreboard.qc @@ -981,7 +981,7 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) if(getstati(STAT_SWITCHWEAPON) == WEP_MINSTANEX) g_minstagib = 1; // TODO: real detection for minstagib? - float weapon_stats, weapon_number; + float weapon_stats; if (!acc_levels) rgb = '1 1 1'; diff --git a/qcsrc/client/shownames.qc b/qcsrc/client/shownames.qc index 28d0d161eb..e3c6f3d4bd 100644 --- a/qcsrc/client/shownames.qc +++ b/qcsrc/client/shownames.qc @@ -13,27 +13,29 @@ void Draw_ShowNames(entity ent) if(ent.sv_entnum == player_localentnum && !autocvar_chase_active) return; + makevectors(view_angles); + if(ent.sameteam || (!ent.sameteam && autocvar_hud_shownames_enemies)) { ent.origin_z += autocvar_hud_shownames_offset; - if(!ent.sameteam) + float hit; + 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); + hit = 1; + } + else + { + traceline(view_origin, ent.origin, MOVE_NORMAL, ent); + if(trace_fraction < 1 && trace_networkentity != ent.sv_entnum) + hit = 0; + else + hit = 1; } vector o, eo; o = project_3d_to_2d(ent.origin); - float overlap; + float overlap, onscreen; if(autocvar_hud_shownames_antioverlap) { @@ -56,7 +58,9 @@ void Draw_ShowNames(entity ent) } } - if(!ent.sameteam && trace_endpos != view_origin) // out of view, fade out + onscreen = (o_z >= 0 && o_x >= 0 && o_y >= 0 && o_x <= vid_conwidth && o_y <= vid_conheight); + + if(!ent.sameteam && (!onscreen || !hit)) // 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); @@ -90,7 +94,7 @@ void Draw_ShowNames(entity ent) 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) + if(o_z >= 0) { o_z = 0; @@ -150,7 +154,6 @@ void Draw_ShowNames_All() float i; for(i = 0; i < maxclients; ++i) { - vector o; float t; t = GetPlayerColor(i); if(t == COLOR_SPECTATOR) diff --git a/qcsrc/client/shownames.qh b/qcsrc/client/shownames.qh index a17f31d424..50380e8209 100644 --- a/qcsrc/client/shownames.qh +++ b/qcsrc/client/shownames.qh @@ -1,5 +1,4 @@ .float healthvalue; .float armorvalue; .float sameteam; -.float the_entnum; diff --git a/qcsrc/client/teamradar.qh b/qcsrc/client/teamradar.qh index 2a93fe163a..2dbdf89658 100644 --- a/qcsrc/client/teamradar.qh +++ b/qcsrc/client/teamradar.qh @@ -2,6 +2,6 @@ // to make entities have dots on the team radar .float teamradar_icon; -.float teamradar_times[MAX_TEAMRADAR_TIMES]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(teamradar_times); +.float teamradar_times[MAX_TEAMRADAR_TIMES]; .float teamradar_time_index; .vector teamradar_color; diff --git a/qcsrc/client/tturrets.qc b/qcsrc/client/tturrets.qc index d625804908..1332d60ca1 100644 --- a/qcsrc/client/tturrets.qc +++ b/qcsrc/client/tturrets.qc @@ -355,7 +355,7 @@ void turret_gibboom() { float i; - sound (self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1); for (i = 1; i < 5; i = i + 1) @@ -399,7 +399,7 @@ void turret_die() setmodel(self, ""); setmodel(self.tur_head, ""); - sound (self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1); turret_tid2info(self.turret_type); dprint("Turret ", tid2info_name, " dies.\n"); diff --git a/qcsrc/client/waypointsprites.qc b/qcsrc/client/waypointsprites.qc index 3e83e45bca..72488fca2f 100644 --- a/qcsrc/client/waypointsprites.qc +++ b/qcsrc/client/waypointsprites.qc @@ -10,6 +10,10 @@ float waypointsprite_fontsize; float waypointsprite_edgefadealpha; float waypointsprite_edgefadescale; float waypointsprite_edgefadedistance; +float waypointsprite_edgeoffset_bottom; +float waypointsprite_edgeoffset_left; +float waypointsprite_edgeoffset_right; +float waypointsprite_edgeoffset_top; float waypointsprite_crosshairfadealpha; float waypointsprite_crosshairfadescale; float waypointsprite_crosshairfadedistance; @@ -224,6 +228,22 @@ vector spritelookupcolor(string s, vector def) switch(s) { case "keycarrier-friend": return '0 1 0'; + case "wpn-laser": return '1 0.5 0.5'; + case "wpn-shotgun": return '0.5 0.25 0'; + case "wpn-uzi": return '1 1 0'; + case "wpn-gl": return '1 0 0'; + case "wpn-electro": return '0 0.5 1'; + case "wpn-crylink": return '1 0.5 1'; + case "wpn-nex": return '0.5 1 1'; + case "wpn-hagar": return '1 1 0.5'; + case "wpn-rl": return '1 1 0'; + case "wpn-porto": return '0.5 0.5 0.5'; + case "wpn-minstanex": return '0.5 1 1'; + case "wpn-hookgun": return '0 0.5 0'; + case "wpn-fireball": return '1 0.5 0'; + case "wpn-hlac": return '0 1 0'; + case "wpn-campingrifle": return '0.5 1 0'; + case "wpn-minelayer": return '0.75 1 0'; default: return def; } } @@ -458,7 +478,11 @@ void Draw_WaypointSprite() float ang; o = project_3d_to_2d(self.origin); - if(o_z < 0 || o_x < 0 || o_y < 0 || o_x > vid_conwidth || o_y > vid_conheight) + if(o_z < 0 + || o_x < (vid_conwidth * waypointsprite_edgeoffset_left) + || o_y < (vid_conheight * waypointsprite_edgeoffset_top) + || o_x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) + || o_y > (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom))) { // scale it to be just in view vector d; @@ -477,12 +501,12 @@ void Draw_WaypointSprite() if(d_z * f1 > 0) { // RIGHT edge - d = d * (0.5 / f1); + d = d * ((0.5 - waypointsprite_edgeoffset_right) / f1); } else { // LEFT edge - d = d * (-0.5 / f1); + d = d * (-(0.5 - waypointsprite_edgeoffset_left) / f1); } } else @@ -490,12 +514,12 @@ void Draw_WaypointSprite() if(d_z * f2 > 0) { // BOTTOM edge - d = d * (0.5 / f2); + d = d * ((0.5 - waypointsprite_edgeoffset_bottom) / f2); } else { // TOP edge - d = d * (-0.5 / f2); + d = d * (-(0.5 - waypointsprite_edgeoffset_top) / f2); } } @@ -514,7 +538,10 @@ void Draw_WaypointSprite() o_z = 0; float edgedistance_min, crosshairdistance; - edgedistance_min = min4(o_y, o_x,vid_conwidth - o_x, vid_conheight - o_y); + edgedistance_min = min4((o_y - (vid_conheight * waypointsprite_edgeoffset_top)), + (o_x - (vid_conwidth * waypointsprite_edgeoffset_left)), + (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) - o_x, + (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)) - o_y); float vidscale; vidscale = max(vid_conwidth / vid_width, vid_conheight / vid_height); @@ -746,6 +773,10 @@ void WaypointSprite_Load() waypointsprite_edgefadealpha = autocvar_g_waypointsprite_edgefadealpha; waypointsprite_edgefadescale = autocvar_g_waypointsprite_edgefadescale; waypointsprite_edgefadedistance = autocvar_g_waypointsprite_edgefadedistance; + waypointsprite_edgeoffset_bottom = autocvar_g_waypointsprite_edgeoffset_bottom; + waypointsprite_edgeoffset_left = autocvar_g_waypointsprite_edgeoffset_left; + waypointsprite_edgeoffset_right = autocvar_g_waypointsprite_edgeoffset_right; + waypointsprite_edgeoffset_top = autocvar_g_waypointsprite_edgeoffset_top; waypointsprite_crosshairfadealpha = autocvar_g_waypointsprite_crosshairfadealpha; waypointsprite_crosshairfadescale = autocvar_g_waypointsprite_crosshairfadescale; waypointsprite_crosshairfadedistance = autocvar_g_waypointsprite_crosshairfadedistance; diff --git a/qcsrc/common/campaign_file.qc b/qcsrc/common/campaign_file.qc index 08cec80928..067cd8054d 100644 --- a/qcsrc/common/campaign_file.qc +++ b/qcsrc/common/campaign_file.qc @@ -18,7 +18,7 @@ float CampaignFile_Load(float offset, float n) campaign_entries = 0; campaign_title = string_null; - fn = strcat("maps/campaign", campaign_name, ".txt"); + fn = language_filename(strcat("maps/campaign", campaign_name, ".txt")); fh = fopen(fn, FILE_READ); if(fh >= 0) { diff --git a/qcsrc/common/constants.qh b/qcsrc/common/constants.qh index de0edbb31f..939f6f9700 100644 --- a/qcsrc/common/constants.qh +++ b/qcsrc/common/constants.qh @@ -55,8 +55,6 @@ const float TE_CSQC_NEXGUNBEAMPARTICLE = 104; const float TE_CSQC_LIGHTNINGARC = 105; const float TE_CSQC_TEAMNAGGER = 106; const float TE_CSQC_PINGPLREPORT = 107; -const float TE_CSQC_VOTE = 108; -const float TE_CSQC_VOTERESET = 109; const float TE_CSQC_ANNOUNCE = 110; const float TE_CSQC_TARGET_MUSIC = 111; const float TE_CSQC_NOTIFY = 112; @@ -433,11 +431,12 @@ const float STAT_DOM_PPS_YELLOW = 104; float CH_INFO = 0; // only on world and csqc float CH_TRIGGER = 0; // only on players; compat: FALSELY CONTROLLED BY "Info" float CH_WEAPON_A = 1; // only on players and entities -float CH_WEAPON_SINGLE = 1; // only on players and entities +float CH_WEAPON_SINGLE = 5; // only on players and entities float CH_VOICE = 2; // only on players float CH_BGM_SINGLE = 2; // only on csqc; compat: FALSELY CONTROLLED BY "Voice" float CH_AMBIENT = 2; // only on csqc; compat: FALSELY CONTROLLED BY "Voice" float CH_TRIGGER_SINGLE = 3; // only on players, entities, csqc +float CH_SHOTS = 4; // only on players, entities, csqc float CH_SHOTS_SINGLE = 4; // only on players, entities, csqc float CH_WEAPON_B = 5; // only on players and entities float CH_PAIN = 6; // only on players and csqc @@ -452,6 +451,7 @@ float CH_VOICE = -2; float CH_BGM_SINGLE = 8; float CH_AMBIENT = -9; float CH_TRIGGER_SINGLE = 3; +float CH_SHOTS = -4; float CH_SHOTS_SINGLE = 4; float CH_WEAPON_B = -1; float CH_PAIN = -6; diff --git a/qcsrc/common/mapinfo.qc b/qcsrc/common/mapinfo.qc index a6b0788088..cca716a339 100644 --- a/qcsrc/common/mapinfo.qc +++ b/qcsrc/common/mapinfo.qc @@ -802,7 +802,7 @@ float MapInfo_Get_ByName(string pFilename, float pAllowGenerate, float pGametype { string fn; string s, t; - float fh, fh2; + float fh; float r, f, n, i, p; string acl; @@ -1253,6 +1253,24 @@ string MapInfo_ListAllowedMaps(float pRequiredFlags, float pForbiddenFlags) return substring(out, 1, strlen(out) - 1); } +string MapInfo_ListAllAllowedMaps(float pRequiredFlags, float pForbiddenFlags) +{ + string out; + float i; + + // to make absolutely sure: + MapInfo_Enumerate(); + MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, pRequiredFlags, pForbiddenFlags, 0); + + out = ""; + for(i = 0; i < MapInfo_count; ++i) + out = strcat(out, " ", _MapInfo_GlobItem(MapInfo_FilterList_Lookup(i))); + + MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), pRequiredFlags, pForbiddenFlags, 0); + + return substring(out, 1, strlen(out) - 1); +} + void MapInfo_LoadMapSettings(string s) // to be called from worldspawn { float t, t0; diff --git a/qcsrc/common/mapinfo.qh b/qcsrc/common/mapinfo.qh index 12026689b8..2ce5d60c90 100644 --- a/qcsrc/common/mapinfo.qh +++ b/qcsrc/common/mapinfo.qh @@ -68,6 +68,8 @@ void MapInfo_LoadMap(string s); // list all maps for the current game type string MapInfo_ListAllowedMaps(float pFlagsRequired, float pFlagsForbidden); +// list all allowed maps (for any game type) +string MapInfo_ListAllAllowedMaps(float pFlagsRequired, float pFlagsForbidden); // gets a gametype from a string float MapInfo_Type_FromString(string t); diff --git a/qcsrc/menu/oo/classdefs.h b/qcsrc/menu/oo/classdefs.h deleted file mode 100644 index 85bc6c2afa..0000000000 --- a/qcsrc/menu/oo/classdefs.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef INTERFACE -#define INTERFACE -#endif - -#ifdef IMPLEMENTATION -#undef IMPLEMENTATION -#endif - -#ifdef CLASS -#undef CLASS -#undef EXTENDS -#undef METHOD -#undef ATTRIB -#undef ATTRIBARRAY -#undef ENDCLASS -#undef SUPER -#endif - -#define CLASS(cname) entity spawn##cname(); entity cname##_vtbl; -#define EXTENDS(base) -#define METHOD(cname,name,prototype) prototype cname##_##name; .prototype name; -#define ATTRIB(cname,name,type,val) .type name; -#define ATTRIBARRAY(cname,name,type,cnt) .type name[cnt]; -#define ENDCLASS(cname) .float instanceOf##cname; -#define SUPER(cname) diff --git a/qcsrc/menu/oo/constructors.h b/qcsrc/menu/oo/constructors.h deleted file mode 100644 index 4e758dd472..0000000000 --- a/qcsrc/menu/oo/constructors.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef INTERFACE -#define INTERFACE -#endif - -#ifdef IMPLEMENTATION -#undef IMPLEMENTATION -#endif - -#ifdef CLASS -#undef CLASS -#undef EXTENDS -#undef METHOD -#undef ATTRIB -#undef ATTRIBARRAY -#undef ENDCLASS -#undef SUPER -#endif - -#define CLASS(cname) entity spawn##cname() { entity me; -#define EXTENDS(base) me = spawn##base (); entity basevtbl; basevtbl = base##_vtbl; -#define METHOD(cname,name,prototype) me.name = cname##_##name; -#define ATTRIB(cname,name,type,val) me.name = val; -#define ATTRIBARRAY(cname,name,type,cnt) me.name = me.name; -#define ENDCLASS(cname) me.instanceOf##cname = 1; me.classname = #cname; if(!cname##_vtbl) cname##_vtbl = spawnVtbl(me, basevtbl); return me; } -#define SUPER(cname) diff --git a/qcsrc/menu/oo/implementation.h b/qcsrc/menu/oo/implementation.h index ed6bd71f36..34f32e306a 100644 --- a/qcsrc/menu/oo/implementation.h +++ b/qcsrc/menu/oo/implementation.h @@ -1,5 +1,5 @@ -#ifdef INTERFACE -#undef INTERFACE +#ifndef INTERFACE +#define INTERFACE #endif #ifndef IMPLEMENTATION @@ -16,4 +16,13 @@ #undef SUPER #endif +// for the constructor +#define CLASS(cname) entity spawn##cname() { entity me; +#define EXTENDS(base) me = spawn##base (); entity basevtbl; basevtbl = base##_vtbl; +#define METHOD(cname,name,prototype) me.name = cname##_##name; +#define ATTRIB(cname,name,type,val) me.name = val; +#define ATTRIBARRAY(cname,name,type,cnt) me.name = me.name; +#define ENDCLASS(cname) me.instanceOf##cname = 1; me.classname = #cname; if(!cname##_vtbl) cname##_vtbl = spawnVtbl(me, basevtbl); return me; } + +// for the implementation #define SUPER(cname) (cname##_vtbl.vtblbase) diff --git a/qcsrc/menu/oo/interface.h b/qcsrc/menu/oo/interface.h new file mode 100644 index 0000000000..85bc6c2afa --- /dev/null +++ b/qcsrc/menu/oo/interface.h @@ -0,0 +1,25 @@ +#ifndef INTERFACE +#define INTERFACE +#endif + +#ifdef IMPLEMENTATION +#undef IMPLEMENTATION +#endif + +#ifdef CLASS +#undef CLASS +#undef EXTENDS +#undef METHOD +#undef ATTRIB +#undef ATTRIBARRAY +#undef ENDCLASS +#undef SUPER +#endif + +#define CLASS(cname) entity spawn##cname(); entity cname##_vtbl; +#define EXTENDS(base) +#define METHOD(cname,name,prototype) prototype cname##_##name; .prototype name; +#define ATTRIB(cname,name,type,val) .type name; +#define ATTRIBARRAY(cname,name,type,cnt) .type name[cnt]; +#define ENDCLASS(cname) .float instanceOf##cname; +#define SUPER(cname) diff --git a/qcsrc/menu/progs.src b/qcsrc/menu/progs.src index 34eb5db888..1184c32d18 100644 --- a/qcsrc/menu/progs.src +++ b/qcsrc/menu/progs.src @@ -20,10 +20,7 @@ draw.qh skin.qh xonotic/util.qh -oo/classdefs.h - classes.c - -oo/constructors.h +oo/interface.h classes.c oo/implementation.h classes.c diff --git a/qcsrc/menu/xonotic/credits.c b/qcsrc/menu/xonotic/credits.c index daf4d22f9c..0d998d7de9 100644 --- a/qcsrc/menu/xonotic/credits.c +++ b/qcsrc/menu/xonotic/credits.c @@ -31,8 +31,6 @@ void XonoticCreditsList_configureXonoticCreditsList(entity me) me.configureXonoticListBox(me); // load the file me.bufferIndex = buf_load(language_filename("xonotic-credits.txt")); - if(me.bufferIndex < 0) - me.bufferIndex = buf_load("xonotic-credits.txt"); me.nItems = buf_getsize(me.bufferIndex); } void XonoticCreditsList_destroy(entity me) diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_physics.c b/qcsrc/menu/xonotic/dialog_hudpanel_physics.c index 66c872b9f9..f8b162f239 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_physics.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_physics.c @@ -16,7 +16,6 @@ void XonoticHUDPhysicsDialog_fill(entity me) { entity e; string panelname = "physics"; - float i; me.TR(me); me.TD(me, 1, 4, e = makeXonoticTextSlider("hud_panel_physics")); diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_create.c b/qcsrc/menu/xonotic/dialog_multiplayer_create.c index 2d9689f644..b9b5896804 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_create.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_create.c @@ -29,7 +29,6 @@ entity makeXonoticServerCreateTab() void XonoticServerCreateTab_fill(entity me) { entity e, e0; - float n; me.TR(me); me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Game type:"))); diff --git a/qcsrc/qc-client.cbp b/qcsrc/qc-client.cbp index 63e00e9e17..b8d82f5745 100644 --- a/qcsrc/qc-client.cbp +++ b/qcsrc/qc-client.cbp @@ -11,11 +11,7 @@ -<<<<<<< HEAD -======= - ->>>>>>> origin/master @@ -49,21 +45,12 @@ -<<<<<<< HEAD -======= - - - - - - ->>>>>>> origin/master @@ -108,13 +95,10 @@ -<<<<<<< HEAD -======= ->>>>>>> origin/master diff --git a/qcsrc/server/accuracy.qc b/qcsrc/server/accuracy.qc index 95ddf78e1f..de6b52752b 100644 --- a/qcsrc/server/accuracy.qc +++ b/qcsrc/server/accuracy.qc @@ -2,10 +2,6 @@ .float accuracy_fired[WEP_MAXCOUNT]; .float accuracy_cnt_hit[WEP_MAXCOUNT]; .float accuracy_cnt_fired[WEP_MAXCOUNT]; -FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(accuracy_hit); -FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(accuracy_fired); -FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(accuracy_cnt_hit); -FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(accuracy_cnt_fired); float accuracy_byte(float n, float d) { diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index 512a9c6d9a..ff99823330 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -289,7 +289,7 @@ float autocvar_g_balance_grenadelauncher_primary_edgedamage; float autocvar_g_balance_grenadelauncher_primary_force; float autocvar_g_balance_grenadelauncher_primary_health; float autocvar_g_balance_grenadelauncher_primary_lifetime; -float autocvar_g_balance_grenadelauncher_primary_lifetime2; +float autocvar_g_balance_grenadelauncher_primary_lifetime_stick; float autocvar_g_balance_grenadelauncher_primary_radius; float autocvar_g_balance_grenadelauncher_primary_refire; float autocvar_g_balance_grenadelauncher_primary_remote_minbouncecnt; @@ -304,7 +304,8 @@ float autocvar_g_balance_grenadelauncher_secondary_edgedamage; float autocvar_g_balance_grenadelauncher_secondary_force; float autocvar_g_balance_grenadelauncher_secondary_health; float autocvar_g_balance_grenadelauncher_secondary_lifetime; -float autocvar_g_balance_grenadelauncher_secondary_lifetime2; +float autocvar_g_balance_grenadelauncher_secondary_lifetime_bounce; +float autocvar_g_balance_grenadelauncher_secondary_lifetime_stick; float autocvar_g_balance_grenadelauncher_secondary_radius; float autocvar_g_balance_grenadelauncher_secondary_refire; float autocvar_g_balance_grenadelauncher_secondary_speed; diff --git a/qcsrc/server/bot/havocbot/role_keepaway.qc b/qcsrc/server/bot/havocbot/role_keepaway.qc index 30d96499a2..8ea23f1af0 100644 --- a/qcsrc/server/bot/havocbot/role_keepaway.qc +++ b/qcsrc/server/bot/havocbot/role_keepaway.qc @@ -9,7 +9,7 @@ entity ka_ball; void havocbot_goalrating_ball(float ratingscale, vector org) { - local float t, distance; + local float t; local entity ball_owner; ball_owner = ka_ball.owner; diff --git a/qcsrc/server/bot/scripting.qc b/qcsrc/server/bot/scripting.qc index a70e55bf64..e540a438d5 100644 --- a/qcsrc/server/bot/scripting.qc +++ b/qcsrc/server/bot/scripting.qc @@ -63,8 +63,8 @@ float bot_havecommand(entity bot, float idx) #define MAX_BOT_PLACES 4 .float bot_places_count; -.entity bot_places[MAX_BOT_PLACES]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(bot_places); -.string bot_placenames[MAX_BOT_PLACES]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(bot_placenames); +.entity bot_places[MAX_BOT_PLACES]; +.string bot_placenames[MAX_BOT_PLACES]; entity bot_getplace(string placename) { entity e; diff --git a/qcsrc/server/cheats.qc b/qcsrc/server/cheats.qc index 1d22cc7282..3270a9077f 100644 --- a/qcsrc/server/cheats.qc +++ b/qcsrc/server/cheats.qc @@ -249,7 +249,7 @@ float CheatImpulse(float i) e2 = spawn(); setorigin(e2, org); pointparticles(particleeffectnum("rocket_explode"), org, '0 0 0', 1); - sound(e2, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound(e2, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); RadiusDamage(e2, e, 1000, 0, 128, e, 500, DEATH_CHEAT, world); remove(e2); } diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 5b9c8d907e..a4f937a338 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -1015,6 +1015,7 @@ void PutClientInServer (void) self.oldorigin = self.origin; self.prevorigin = self.origin; self.lastrocket = world; // stop rocket guiding, no revenge from the grave! + self.lastteleporttime = time; // prevent insane speeds due to changing origin if(g_arena) { diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index 0ba5f1d105..6f82d9f104 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -1,6 +1,5 @@ .entity accuracy; .float accuracy_frags[WEP_MAXCOUNT]; -FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(accuracy_frags); float weaponstats_buffer; @@ -341,11 +340,11 @@ void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, float if(sound_allowed(MSG_BROADCAST, attacker)) { if (save > 10) - sound (self, CH_SHOTS_SINGLE, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_SHOTS, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM); else if (take > 30) - sound (self, CH_SHOTS_SINGLE, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_SHOTS, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM); else if (take > 10) - sound (self, CH_SHOTS_SINGLE, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_SHOTS, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM); } if (take > 50) @@ -458,11 +457,11 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht if(sound_allowed(MSG_BROADCAST, attacker)) { if (save > 10) - sound (self, CH_SHOTS_SINGLE, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_SHOTS, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM); else if (take > 30) - sound (self, CH_SHOTS_SINGLE, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_SHOTS, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM); else if (take > 10) - sound (self, CH_SHOTS_SINGLE, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM); // FIXME possibly remove them? + sound (self, CH_SHOTS, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM); // FIXME possibly remove them? } if (take > 50) diff --git a/qcsrc/server/cl_weapons.qc b/qcsrc/server/cl_weapons.qc index 9e59a4c555..3106169008 100644 --- a/qcsrc/server/cl_weapons.qc +++ b/qcsrc/server/cl_weapons.qc @@ -374,8 +374,7 @@ void W_WeaponFrame() if(ATTACK_FINISHED(self) <= time + self.weapon_frametime * 0.5) { #endif - // UGLY WORKAROUND: play this on CH_WEAPON_B so it can't cut off fire sounds - sound (self, CH_WEAPON_B, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_WEAPON_SINGLE, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM); self.weaponentity.state = WS_DROP; // set up weapon switch think in the future, and start drop anim weapon_thinkf(WFRAME_DONTCHANGE, autocvar_g_balance_weaponswitchdelay, w_clear); diff --git a/qcsrc/server/clientcommands.qc b/qcsrc/server/clientcommands.qc index ac08cc916a..c1d3162a57 100644 --- a/qcsrc/server/clientcommands.qc +++ b/qcsrc/server/clientcommands.qc @@ -1,11 +1,22 @@ entity nagger; float readycount; + float Nagger_SendEntity(entity to, float sendflags) { float nags, i, f, b; entity e; WriteByte(MSG_ENTITY, ENT_CLIENT_NAGGER); + // bits: + // 1 = ready + // 2 = player needs to ready up + // 4 = vote + // 8 = player needs to vote + // 16 = warmup + // sendflags: + // 64 = vote counts + // 128 = vote string + nags = 0; if(readycount) { @@ -22,19 +33,28 @@ float Nagger_SendEntity(entity to, float sendflags) if(inWarmupStage) nags |= 16; + if(sendflags & 64) + nags |= 64; + if(sendflags & 128) nags |= 128; if(!(nags & 4)) // no vote called? send no string - nags &~= 128; + nags &~= (64 | 128); WriteByte(MSG_ENTITY, nags); - if(nags & 128) + if(nags & 64) { - WriteString(MSG_ENTITY, votecalledvote_display); + WriteByte(MSG_ENTITY, vote_yescount); + WriteByte(MSG_ENTITY, vote_nocount); + WriteByte(MSG_ENTITY, vote_needed_absolute); + WriteChar(MSG_ENTITY, to.vote_vote); } + if(nags & 128) + WriteString(MSG_ENTITY, votecalledvote_display); + if(nags & 1) { for(i = 1; i <= maxclients; i += 8) @@ -60,7 +80,7 @@ void Nagger_VoteChanged() void Nagger_VoteCountChanged() { if(nagger) - nagger.SendFlags |= 1; + nagger.SendFlags |= 64; } void Nagger_ReadyCounted() { diff --git a/qcsrc/server/ctf.qc b/qcsrc/server/ctf.qc index d88ae5d375..93446ed5ba 100644 --- a/qcsrc/server/ctf.qc +++ b/qcsrc/server/ctf.qc @@ -358,7 +358,7 @@ void FlagThink() { bprint("The ", self.netname, " became impatient after ", ftos_decimals(flagcaptimerecord, 2), " seconds and returned itself\n"); - sound (self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTN_NONE); + sound (self, CH_TRIGGER, self.noise3, VOL_BASE, ATTN_NONE); self.owner.impulse = 141; // returning! e = self; @@ -385,7 +385,7 @@ void FlagThink() if (time > self.pain_finished) { bprint("The ", self.netname, " has returned to base\n"); - sound (self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTN_NONE); + sound (self, CH_TRIGGER, self.noise3, VOL_BASE, ATTN_NONE); LogCTF("returned", self.team, world); ReturnFlag(self); } @@ -765,6 +765,7 @@ Keys: (default ctf/respawn.wav) */ +void spawnfunc_item_flag_team2(); void spawnfunc_item_flag_team1() { if (!g_ctf) @@ -773,21 +774,22 @@ void spawnfunc_item_flag_team1() return; } + if (g_ctf_reverse) + { + float old_g_ctf_reverse = g_ctf_reverse; + g_ctf_reverse = 0; // avoid an endless loop + spawnfunc_item_flag_team2(); + g_ctf_reverse = old_g_ctf_reverse; + return; + } + // link flag into ctf_worldflaglist self.ctf_worldflagnext = ctf_worldflaglist; ctf_worldflaglist = self; self.classname = "item_flag_team"; - if(g_ctf_reverse) - { - self.team = COLOR_TEAM2; // color 13 team (blue) - self.items = IT_KEY1; // silver key (bluish enough) - } - else - { - self.team = COLOR_TEAM1; // color 4 team (red) - self.items = IT_KEY2; // gold key (redish enough) - } + self.team = COLOR_TEAM1; // color 4 team (red) + self.items = IT_KEY2; // gold key (redish enough) self.netname = "^1RED^7 flag"; self.target = "###item###"; self.skin = autocvar_g_ctf_flag_red_skin; @@ -871,21 +873,22 @@ void spawnfunc_item_flag_team2() return; } + if (g_ctf_reverse) + { + float old_g_ctf_reverse = g_ctf_reverse; + g_ctf_reverse = 0; // avoid an endless loop + spawnfunc_item_flag_team1(); + g_ctf_reverse = old_g_ctf_reverse; + return; + } + // link flag into ctf_worldflaglist self.ctf_worldflagnext = ctf_worldflaglist; ctf_worldflaglist = self; self.classname = "item_flag_team"; - if(g_ctf_reverse) - { - self.team = COLOR_TEAM1; // color 4 team (red) - self.items = IT_KEY2; // gold key (redish enough) - } - else - { - self.team = COLOR_TEAM2; // color 13 team (blue) - self.items = IT_KEY1; // silver key (bluish enough) - } + self.team = COLOR_TEAM2; // color 13 team (blue) + self.items = IT_KEY1; // silver key (bluish enough) self.netname = "^4BLUE^7 flag"; self.target = "###item###"; self.skin = autocvar_g_ctf_flag_blue_skin; diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index bb9c075943..2e8ba3d698 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -605,7 +605,7 @@ float client_cefc_accumulatortime; ..float current_ammo; -.float weapon_load[WEP_MAXCOUNT]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(weapon_load); +.float weapon_load[WEP_MAXCOUNT]; .float ammo_none; // used by the reloading system, must always be 0 .float clip_load; .float old_clip_load; diff --git a/qcsrc/server/domination.qc b/qcsrc/server/domination.qc index a6cc9a88de..cf0584b728 100644 --- a/qcsrc/server/domination.qc +++ b/qcsrc/server/domination.qc @@ -111,7 +111,7 @@ void dompoint_captured () if(self.enemy) sound(self.enemy, CH_TRIGGER, head.noise, VOL_BASE, ATTN_NORM); else - sound(self, CH_TRIGGER_SINGLE, head.noise, VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, head.noise, VOL_BASE, ATTN_NORM); if (head.noise1 != "") play2all(head.noise1); diff --git a/qcsrc/server/func_breakable.qc b/qcsrc/server/func_breakable.qc index 4a0e8d922c..1e474c0d64 100644 --- a/qcsrc/server/func_breakable.qc +++ b/qcsrc/server/func_breakable.qc @@ -162,7 +162,7 @@ void func_breakable_destroy() { func_breakable_destroyed(); if(self.noise) - sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_NORM); + sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM); if(self.dmg) RadiusDamage(self, activator, self.dmg, self.dmg_edge, self.dmg_radius, self, self.dmg_force, DEATH_HURTTRIGGER, world); diff --git a/qcsrc/server/g_hook.qc b/qcsrc/server/g_hook.qc index 0437f80432..bd5b2c328d 100644 --- a/qcsrc/server/g_hook.qc +++ b/qcsrc/server/g_hook.qc @@ -66,7 +66,7 @@ void GrapplingHookThink(); void GrapplingHook_Stop() { pointparticles(particleeffectnum("grapple_impact"), self.origin, '0 0 0', 1); - sound (self, CH_SHOTS_SINGLE, "weapons/hook_impact.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_SHOTS, "weapons/hook_impact.wav", VOL_BASE, ATTN_NORM); self.state = 1; self.think = GrapplingHookThink; diff --git a/qcsrc/server/g_triggers.qc b/qcsrc/server/g_triggers.qc index 2b96b967a0..6407cefaa9 100644 --- a/qcsrc/server/g_triggers.qc +++ b/qcsrc/server/g_triggers.qc @@ -721,7 +721,7 @@ void target_speaker_use_activator() else snd = self.noise; msg_entity = activator; - soundto(MSG_ONE, self, CH_TRIGGER_SINGLE, snd, VOL_BASE * self.volume, self.atten); + soundto(MSG_ONE, self, CH_TRIGGER, snd, VOL_BASE * self.volume, self.atten); } void target_speaker_use_on() { diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index 9a3533f4cd..047d2c0be6 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -1194,7 +1194,7 @@ void Maplist_Init() if(Map_Count == 0) { bprint( "Maplist is empty! Resetting it to default map list.\n" ); - cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); + cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); if(autocvar_g_maplist_shuffle) ShuffleMaplist(); localcmd("\nmenu_cmd sync\n"); @@ -1314,7 +1314,7 @@ void GotoNextMap() if(allowReset) { bprint( "Maplist contains no single playable map! Resetting it to default map list.\n" ); - cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); + cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); if(autocvar_g_maplist_shuffle) ShuffleMaplist(); localcmd("\nmenu_cmd sync\n"); @@ -2299,7 +2299,6 @@ string mapvote_maps_pakfile[MAPVOTE_COUNT]; float mapvote_maps_suggested[MAPVOTE_COUNT]; string mapvote_suggestions[MAPVOTE_COUNT]; float mapvote_suggestion_ptr; -float mapvote_maxlen; float mapvote_voters; float mapvote_votes[MAPVOTE_COUNT]; float mapvote_run; @@ -2361,8 +2360,10 @@ void MapVote_AddVotable(string nextMap, float isSuggestion) for(j = 0; j < mapvote_count; ++j) if(mapvote_maps[j] == nextMap) return; - if(strlen(nextMap) > mapvote_maxlen) - mapvote_maxlen = strlen(nextMap); + // suggestions might be no longer valid/allowed after gametype switch! + if(isSuggestion) + if(!MapInfo_CheckMap(nextMap)) + return; mapvote_maps[mapvote_count] = strzone(nextMap); mapvote_maps_suggested[mapvote_count] = isSuggestion; @@ -2424,7 +2425,7 @@ void MapVote_Init() if(mapvote_count == 0) { bprint( "Maplist contains no single playable map! Resetting it to default map list.\n" ); - cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); + cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); if(autocvar_g_maplist_shuffle) ShuffleMaplist(); localcmd("\nmenu_cmd sync\n"); diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 6970499972..b669b041f5 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -1434,7 +1434,7 @@ void stopsoundto(float dest, entity e, float chan) entno = num_for_edict(e); - if (entno >= 8192 || chan > 7) + if (entno >= 8192 || chan < 0 || chan > 7) { float idx, sflags; idx = precache_sound_index("misc/null.wav"); diff --git a/qcsrc/server/mode_onslaught.qc b/qcsrc/server/mode_onslaught.qc index 5662f95bd2..457141f74a 100644 --- a/qcsrc/server/mode_onslaught.qc +++ b/qcsrc/server/mode_onslaught.qc @@ -384,7 +384,7 @@ void onslaught_generator_think() { // self.max_health / 300 gives 5 minutes of overtime. // control points reduce the overtime duration. - sound(self, CH_TRIGGER_SINGLE, "onslaught/generator_decay.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/generator_decay.wav", VOL_BASE, ATTN_NORM); d = 1; e = findchain(classname, "onslaught_controlpoint"); while (e) @@ -455,7 +455,7 @@ void onslaught_generator_damage_think() if(random() < 0.01) { pointparticles(particleeffectnum("electro_ballexplode"), self.origin + randompos('-50 -50 -20', '50 50 50'), '0 0 0', 1); - sound(self, CH_TRIGGER_SINGLE, "onslaught/electricity_explode.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/electricity_explode.wav", VOL_BASE, ATTN_NORM); } else pointparticles(particleeffectnum("torch_small"), self.origin + randompos('-60 -60 -20', '60 60 60'), '0 0 0', 1); @@ -484,7 +484,7 @@ void onslaught_generator_deaththink() if(self.count==40||self.count==20) { onslaught_generator_ring_spawn(self.origin); - sound(self, CH_TRIGGER_SINGLE, "onslaught/shockwave.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/shockwave.wav", VOL_BASE, ATTN_NORM); } // Throw some gibs @@ -510,7 +510,7 @@ void onslaught_generator_deaththink() if(random() < 0.25) { te_explosion(self.origin); - sound(self, CH_TRIGGER_SINGLE, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM); } // Particles @@ -530,7 +530,7 @@ void onslaught_generator_deaththink() te_explosion(org); onslaught_generator_shockwave_spawn(org); pointparticles(particleeffectnum("onslaught_generator_finalexplosion"), org, '0 0 0', 1); - sound(self, CH_TRIGGER_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); } else self.nextthink = time + 0.05; @@ -631,7 +631,7 @@ void onslaught_generator_damage(entity inflictor, entity attacker, float damage, // Throw some flaming gibs on damage, more damage = more chance for gib if(random() < damage/220) { - sound(self, CH_TRIGGER_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); i = random(); if(i < 0.3) ons_throwgib(hitloc + '0 0 20', force * -1, "models/onslaught/gen_gib1.md3", 5, TRUE); @@ -647,9 +647,9 @@ void onslaught_generator_damage(entity inflictor, entity attacker, float damage, //sound on every hit if (random() < 0.5) - sound(self, CH_TRIGGER_SINGLE, "onslaught/ons_hit1.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE, ATTN_NORM); else - sound(self, CH_TRIGGER_SINGLE, "onslaught/ons_hit2.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE, ATTN_NORM); } //throw some gibs on damage @@ -977,13 +977,13 @@ void onslaught_controlpoint_icon_damage(entity inflictor, entity attacker, float pointparticles(particleeffectnum("sparks"), hitloc, force*-1, 1); //sound on every hit if (random() < 0.5) - sound(self, CH_TRIGGER_SINGLE, "onslaught/ons_hit1.wav", VOL_BASE+0.3, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE+0.3, ATTN_NORM); else - sound(self, CH_TRIGGER_SINGLE, "onslaught/ons_hit2.wav", VOL_BASE+0.3, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE+0.3, ATTN_NORM); if (self.health < 0) { - sound(self, CH_TRIGGER_SINGLE, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1); { string t; @@ -1129,7 +1129,7 @@ void onslaught_controlpoint_icon_buildthink() self.health = self.max_health; self.count = autocvar_g_onslaught_cp_regen * sys_frametime; // slow repair rate from now on self.think = onslaught_controlpoint_icon_think; - sound(self, CH_TRIGGER_SINGLE, "onslaught/controlpoint_built.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "onslaught/controlpoint_built.wav", VOL_BASE, ATTN_NORM); bprint(ColoredTeamName(self.team), " captured ", self.owner.message, " control point\n"); self.owner.iscaptured = TRUE; @@ -1192,7 +1192,7 @@ void onslaught_controlpoint_touch() e.think = onslaught_controlpoint_icon_buildthink; e.nextthink = time + sys_frametime; e.count = (e.max_health - e.health) * sys_frametime / autocvar_g_onslaught_cp_buildtime; // how long it takes to build - sound(e, CH_TRIGGER_SINGLE, "onslaught/controlpoint_build.wav", VOL_BASE, ATTN_NORM); + sound(e, CH_TRIGGER, "onslaught/controlpoint_build.wav", VOL_BASE, ATTN_NORM); self.team = e.team; self.colormap = e.colormap; WaypointSprite_UpdateBuildFinished(self.sprite, time + (e.max_health - e.health) / (e.count / sys_frametime)); diff --git a/qcsrc/server/mutators/gamemode_freezetag.qc b/qcsrc/server/mutators/gamemode_freezetag.qc index c3d9272598..f74c9951fd 100644 --- a/qcsrc/server/mutators/gamemode_freezetag.qc +++ b/qcsrc/server/mutators/gamemode_freezetag.qc @@ -69,6 +69,7 @@ void freezetag_Freeze(entity attacker) return; self.freezetag_frozen = 1; self.freezetag_revive_progress = 0; + self.health = 1; entity ice; ice = spawn(); @@ -113,6 +114,7 @@ void freezetag_Unfreeze(entity attacker) { self.freezetag_frozen = 0; self.freezetag_revive_progress = 0; + self.health = autocvar_g_balance_health_start; // remove the ice block entity ice; @@ -183,7 +185,7 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerDies) bprint("^7", frag_target.netname, "^1 was frozen by ^7", frag_attacker.netname, ".\n"); } - frag_target.health = autocvar_g_balance_health_start; // "respawn" the player :P + frag_target.health = 1; // "respawn" the player :P freezetag_CheckWinner(); @@ -244,6 +246,7 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerPreThink) if(n && self.freezetag_frozen) // OK, there is at least one teammate reviving us { self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress + frametime * autocvar_g_freezetag_revive_speed, 1); + self.health = max(1, self.freezetag_revive_progress * autocvar_g_balance_health_start); if(self.freezetag_revive_progress >= 1) { @@ -292,6 +295,7 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerPreThink) else if(!n && self.freezetag_frozen) // only if no teammate is nearby will we reset { self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress - frametime * autocvar_g_freezetag_revive_clearspeed, 1); + self.health = max(1, self.freezetag_revive_progress * autocvar_g_balance_health_start); } else if(!n) { diff --git a/qcsrc/server/mutators/gamemode_keepaway.qc b/qcsrc/server/mutators/gamemode_keepaway.qc index ac6d5dccdb..e71c2d7ef6 100644 --- a/qcsrc/server/mutators/gamemode_keepaway.qc +++ b/qcsrc/server/mutators/gamemode_keepaway.qc @@ -78,7 +78,7 @@ void ka_RespawnBall() // runs whenever the ball needs to be relocated WaypointSprite_Spawn("ka-ball", 0, 0, self, '0 0 64', world, self.team, self, waypointsprite_attachedforcarrier, FALSE, RADARICON_FLAGCARRIER, '0 1 1'); WaypointSprite_Ping(self.waypointsprite_attachedforcarrier); - sound(self, CH_TRIGGER_SINGLE, "keepaway/respawn.wav", VOL_BASE, ATTN_NONE); // ATTN_NONE (it's a sound intended to be heard anywhere) + sound(self, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTN_NONE); // ATTN_NONE (it's a sound intended to be heard anywhere) } else { @@ -99,7 +99,7 @@ void ka_TouchEvent() // runs any time that the ball comes in contact with someth if(other.classname != "player") { // The ball just touched an object, most likely the world pointparticles(particleeffectnum("kaball_sparks"), self.origin, '0 0 0', 1); - sound(self, CH_TRIGGER_SINGLE, "keepaway/touch.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_TRIGGER, "keepaway/touch.wav", VOL_BASE, ATTN_NORM); return; } else if(self.wait > time) { return; } diff --git a/qcsrc/server/nexball.qc b/qcsrc/server/nexball.qc index 3ee7b5597d..61385f6b5e 100644 --- a/qcsrc/server/nexball.qc +++ b/qcsrc/server/nexball.qc @@ -222,7 +222,7 @@ void InitBall (void) self.teamtime = 0; self.pusher = world; self.team = FALSE; - sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTN_NORM); + sound (self, CH_TRIGGER, self.noise1, VOL_BASE, ATTN_NORM); WaypointSprite_Ping(self.waypointsprite_attachedforcarrier); LogNB("init", world); } @@ -262,7 +262,7 @@ void football_touch (void) if (other.solid == SOLID_BSP) { if (time > self.lastground + 0.1) { - sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_NORM); + sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM); self.lastground = time; } if (vlen(self.velocity) && !self.cnt) @@ -308,7 +308,7 @@ void basketball_touch (void) LogNB("caught", other); GiveBall(other, self); } else if (other.solid == SOLID_BSP) { - sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_NORM); + sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM); if (vlen(self.velocity) && !self.cnt) self.nextthink = min(time + g_nexball_delay_idle, self.teamtime); } @@ -366,7 +366,7 @@ void GoalTouch (void) pscore = 1; } - sound (ball, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_NONE); + sound (ball, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NONE); if(ball.team && pscore) { diff --git a/qcsrc/server/pathlib/pathlib.qh b/qcsrc/server/pathlib/pathlib.qh index 2616a77369..71d13caa4e 100644 --- a/qcsrc/server/pathlib/pathlib.qh +++ b/qcsrc/server/pathlib/pathlib.qh @@ -18,7 +18,6 @@ void pathlib_showpath2(entity path); entity openlist; entity closedlist; -entity edgelist; entity goal_node; entity start_node; @@ -106,7 +105,6 @@ var float pathlib_makenode(entity parent,vector start, vector to, vector goal,f var float buildpath_nodefilter(vector n,vector c,vector p); var float pathlib_wpp_waypointcallback(entity wp, entity wp_prev); -var const float pathlib_wpp_wpcb_null(); #ifdef DEBUGPATHING #include "debug.qc" diff --git a/qcsrc/server/portals.qc b/qcsrc/server/portals.qc index af7e8b415c..461f475c78 100644 --- a/qcsrc/server/portals.qc +++ b/qcsrc/server/portals.qc @@ -394,14 +394,14 @@ void Portal_Remove(entity portal, float killed) if(killed) { fixedmakevectors(portal.mangle); - sound(portal, CH_SHOTS_SINGLE, "porto/explode.wav", VOL_BASE, ATTN_NORM); + sound(portal, CH_SHOTS, "porto/explode.wav", VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("rocket_explode"), portal.origin + v_forward * 16, v_forward * 1024, 4); remove(portal); } else { Portal_MakeBrokenPortal(portal); - sound(portal, CH_SHOTS_SINGLE, "porto/expire.wav", VOL_BASE, ATTN_NORM); + sound(portal, CH_SHOTS, "porto/expire.wav", VOL_BASE, ATTN_NORM); SUB_SetFade(portal, time, 0.5); } } diff --git a/qcsrc/server/t_items.qc b/qcsrc/server/t_items.qc index 001063585b..99ddc018b9 100644 --- a/qcsrc/server/t_items.qc +++ b/qcsrc/server/t_items.qc @@ -146,11 +146,11 @@ void Item_Respawn (void) { Item_Show(self, 1); if(!g_minstagib && self.items == IT_STRENGTH) - sound (self, CH_TRIGGER_SINGLE, "misc/strength_respawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound + sound (self, CH_TRIGGER, "misc/strength_respawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound else if(!g_minstagib && self.items == IT_INVINCIBLE) - sound (self, CH_TRIGGER_SINGLE, "misc/shield_respawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound + sound (self, CH_TRIGGER, "misc/shield_respawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound else - sound (self, CH_TRIGGER_SINGLE, "misc/itemrespawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound + sound (self, CH_TRIGGER, "misc/itemrespawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound setorigin (self, self.origin); //pointparticles(particleeffectnum("item_respawn"), self.origin + self.mins_z * '0 0 1' + '0 0 48', '0 0 0', 1); @@ -203,7 +203,7 @@ void Item_RespawnCountdown (void) WaypointSprite_UpdateBuildFinished(self.waypointsprite_attached, time + ITEM_RESPAWN_TICKS); } } - sound (self, CH_TRIGGER_SINGLE, "misc/itemrespawncountdown.wav", VOL_BASE, ATTN_NORM); // play respawn sound + sound (self, CH_TRIGGER, "misc/itemrespawncountdown.wav", VOL_BASE, ATTN_NORM); // play respawn sound if(self.waypointsprite_attached) { WaypointSprite_Ping(self.waypointsprite_attached); diff --git a/qcsrc/server/t_plats.qc b/qcsrc/server/t_plats.qc index 39d206696b..e2d801fa49 100644 --- a/qcsrc/server/t_plats.qc +++ b/qcsrc/server/t_plats.qc @@ -614,7 +614,7 @@ void button_fire() return; if (self.noise != "") - sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_NORM); + sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM); self.state = STATE_UP; SUB_CalcMove (self.pos2, self.speed, button_wait); diff --git a/qcsrc/server/tturrets/units/unit_phaser.qc b/qcsrc/server/tturrets/units/unit_phaser.qc index 7c32882db4..91794929b6 100644 --- a/qcsrc/server/tturrets/units/unit_phaser.qc +++ b/qcsrc/server/tturrets/units/unit_phaser.qc @@ -40,7 +40,7 @@ void beam_think() self.owner.attack_finished_single = time + self.owner.shot_refire; self.owner.fireflag = 2; self.owner.tur_head.frame = 10; - sound (self, CH_SHOTS_SINGLE, "", VOL_BASE, ATTN_NORM); + sound (self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTN_NORM); remove(self); return; } @@ -102,7 +102,7 @@ void turret_phaser_attack() setattachment(beam,self.tur_head,"tag_fire"); - soundat (self, trace_endpos, CH_SHOTS_SINGLE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM); + soundat (self, trace_endpos, CH_SHOTS, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM); if (self.tur_head.frame == 0) self.tur_head.frame = 1; diff --git a/qcsrc/server/vehicles/raptor.qc b/qcsrc/server/vehicles/raptor.qc index a233577a97..26054ae092 100644 --- a/qcsrc/server/vehicles/raptor.qc +++ b/qcsrc/server/vehicles/raptor.qc @@ -563,7 +563,7 @@ void raptor_diethink() { if(random() < 0.1) { - sound (self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1); } self.nextthink = time + 0.1; diff --git a/qcsrc/server/vehicles/spiderbot.qc b/qcsrc/server/vehicles/spiderbot.qc index 81e1e5a1d8..8d64ca420f 100644 --- a/qcsrc/server/vehicles/spiderbot.qc +++ b/qcsrc/server/vehicles/spiderbot.qc @@ -508,7 +508,7 @@ void spiderbot_headfade() { if(self.alpha > 0.1) { - sound (self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("explosion_big"), self.origin + '0 0 100', '0 0 0', 1); } remove(self); @@ -521,7 +521,7 @@ void spiderbot_blowup() { if(random() < 0.1) { - sound (self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1); } self.nextthink = time + 0.1; diff --git a/qcsrc/server/vote.qc b/qcsrc/server/vote.qc index bad3eafe40..1690cf437b 100644 --- a/qcsrc/server/vote.qc +++ b/qcsrc/server/vote.qc @@ -116,18 +116,6 @@ float RemapVote(string vote, string cmd, entity e) return TRUE; } -void VoteDialog_UpdateHighlight(float selected) { - WriteByte(MSG_ONE, SVC_TEMPENTITY); - WriteByte(MSG_ONE, TE_CSQC_VOTE); - WriteByte(MSG_ONE, 1); - WriteByte(MSG_ONE, selected); -} - -void VoteDialog_Reset() { - WriteByte(MSG_ALL, SVC_TEMPENTITY); - WriteByte(MSG_ALL, TE_CSQC_VOTERESET); -} - float GameCommand_Vote(string s, entity e) { local float playercount; float argc; @@ -180,10 +168,9 @@ float GameCommand_Vote(string s, entity e) { bprint("\{1}^2* ^3", VoteNetname(votecaller), "^2 calls a vote for ", votecalledvote_display, "\n"); if(autocvar_sv_eventlog) GameLogEcho(strcat(":vote:vcall:", ftos(votecaller.playerid), ":", votecalledvote_display)); - VoteCount(); // needed if you are the only one Nagger_VoteChanged(); + VoteCount(); // needed if you are the only one msg_entity = e; - VoteDialog_UpdateHighlight(1); local entity player; FOR_EACH_REALCLIENT(player) @@ -203,13 +190,10 @@ float GameCommand_Vote(string s, entity e) { if(!votecalled) { print_to(e, "^1No vote called."); } else if(e == votecaller) { // the votecaller can stop a vote - VoteDialog_Reset(); VoteStop(e); } else if(!e) { // server admin / console can too - VoteDialog_Reset(); VoteStop(e); } else if(e.vote_master) { // masters can too - VoteDialog_Reset(); VoteStop(e); } else { print_to(e, "^1You are not allowed to stop that Vote."); @@ -232,8 +216,8 @@ float GameCommand_Vote(string s, entity e) { bprint("\{1}^2* ^3", VoteNetname(votecaller), "^2 calls a vote to become ^3master^2.\n"); if(autocvar_sv_eventlog) GameLogEcho(strcat(":vote:vcall:", ftos(votecaller.playerid), ":", votecalledvote_display)); - VoteCount(); // needed if you are the only one Nagger_VoteChanged(); + VoteCount(); // needed if you are the only one } } else { print_to(e, "^1Vote to become master is NOT allowed."); @@ -284,7 +268,6 @@ float GameCommand_Vote(string s, entity e) { } else if(e.vote_vote == 0 || autocvar_sv_vote_change) { msg_entity = e; - VoteDialog_UpdateHighlight(1); print_to(e, "^1You accepted the vote."); e.vote_vote = 1; centerprint_expire(e, CENTERPRIO_VOTE); @@ -302,7 +285,6 @@ float GameCommand_Vote(string s, entity e) { } else if(e.vote_vote == 0 || autocvar_sv_vote_change) { msg_entity = e; - VoteDialog_UpdateHighlight(2); print_to(e, "^1You rejected the vote."); e.vote_vote = -1; centerprint_expire(e, CENTERPRIO_VOTE); @@ -320,7 +302,6 @@ float GameCommand_Vote(string s, entity e) { } else if(e.vote_vote == 0 || autocvar_sv_vote_change) { msg_entity = e; - VoteDialog_UpdateHighlight(3); print_to(e, "^1You abstained from your vote."); e.vote_vote = -2; centerprint_expire(e, CENTERPRIO_VOTE); @@ -525,54 +506,42 @@ void VoteStop(entity stopper) { VoteReset(); } -void VoteSpam(float yescount, float nocount, float abstaincount, float notvoters, float mincount, string result) +void VoteSpam(float notvoters, float mincount, string result) { string s; if(mincount >= 0) { - s = strcat("\{1}^2* vote results: ^1", ftos(yescount), "^2:^1"); - s = strcat(s, ftos(nocount), "^2 (^1"); + s = strcat("\{1}^2* vote results: ^1", ftos(vote_yescount), "^2:^1"); + s = strcat(s, ftos(vote_nocount), "^2 (^1"); s = strcat(s, ftos(mincount), "^2 needed), ^1"); - s = strcat(s, ftos(abstaincount), "^2 didn't care, ^1"); + s = strcat(s, ftos(vote_abstaincount), "^2 didn't care, ^1"); s = strcat(s, ftos(notvoters), "^2 didn't vote\n"); } else { - s = strcat("\{1}^2* vote results: ^1", ftos(yescount), "^2:^1"); - s = strcat(s, ftos(nocount), "^2, ^1"); - s = strcat(s, ftos(abstaincount), "^2 didn't care, ^1"); + s = strcat("\{1}^2* vote results: ^1", ftos(vote_yescount), "^2:^1"); + s = strcat(s, ftos(vote_nocount), "^2, ^1"); + s = strcat(s, ftos(vote_abstaincount), "^2 didn't care, ^1"); s = strcat(s, ftos(notvoters), "^2 didn't have to vote\n"); } bprint(s); if(autocvar_sv_eventlog) { - s = strcat(":vote:v", result, ":", ftos(yescount)); - s = strcat(s, ":", ftos(nocount)); - s = strcat(s, ":", ftos(abstaincount)); + s = strcat(":vote:v", result, ":", ftos(vote_yescount)); + s = strcat(s, ":", ftos(vote_nocount)); + s = strcat(s, ":", ftos(vote_abstaincount)); s = strcat(s, ":", ftos(notvoters)); s = strcat(s, ":", ftos(mincount)); GameLogEcho(s); } } -void VoteDialog_Update(float msg, float vyes, float vno, float needed) { - WriteByte(msg, SVC_TEMPENTITY); - WriteByte(msg, TE_CSQC_VOTE); - WriteByte(msg, 0); - WriteByte(msg, vyes); - WriteByte(msg, vno); - WriteByte(msg, needed); -} - void VoteCount() { local float playercount; playercount = 0; - local float yescount; - yescount = 0; - local float nocount; - nocount = 0; - local float abstaincount; - abstaincount = 0; + vote_yescount = 0; + vote_nocount = 0; + vote_abstaincount = 0; local entity player; //same for real players local float realplayercount; @@ -581,14 +550,16 @@ void VoteCount() { local float realplayerabstaincount; realplayercount = realplayernocount = realplayerabstaincount = realplayeryescount = 0; + Nagger_VoteCountChanged(); + FOR_EACH_REALCLIENT(player) { if(player.vote_vote == -1) { - ++nocount; + ++vote_nocount; } else if(player.vote_vote == 1) { - ++yescount; + ++vote_yescount; } else if(player.vote_vote == -2) { - ++abstaincount; + ++vote_abstaincount; } ++playercount; //do the same for real players @@ -607,18 +578,25 @@ void VoteCount() { //in tournament mode, if we have at least one player then don't make the vote dependent on spectators (so specs don't have to press F1) if(autocvar_sv_vote_nospectators) if(realplayercount > 0) { - yescount = realplayeryescount; - nocount = realplayernocount; - abstaincount = realplayerabstaincount; + vote_yescount = realplayeryescount; + vote_nocount = realplayernocount; + vote_abstaincount = realplayerabstaincount; playercount = realplayercount; } float votefactor, simplevotefactor; votefactor = bound(0.5, autocvar_sv_vote_majority_factor, 0.999); simplevotefactor = autocvar_sv_vote_simple_majority_factor; - float needed; - needed = floor((playercount - abstaincount) * max(votefactor, simplevotefactor)) + 1; - VoteDialog_Update(MSG_ALL, yescount, nocount, needed); + + // FIXME this number is a guess + vote_needed_absolute = floor((playercount - vote_abstaincount) * votefactor) + 1; + if(simplevotefactor) + { + simplevotefactor = bound(votefactor, simplevotefactor, 0.999); + vote_needed_simple = floor((vote_yescount + vote_nocount) * simplevotefactor) + 1; + } + else + vote_needed_simple = 0; if(votecalledmaster && playercount == 1) { @@ -634,31 +612,28 @@ void VoteCount() { } VoteReset(); } else { - if(yescount > (playercount - abstaincount) * votefactor) + if(vote_yescount >= vote_needed_absolute) { - VoteSpam(yescount, nocount, abstaincount, playercount - yescount - nocount - abstaincount, -1, "yes"); + VoteSpam(playercount - vote_yescount - vote_nocount - vote_abstaincount, -1, "yes"); VoteAccept(); - VoteDialog_Reset(); } - else if(nocount >= (playercount - abstaincount) * (1 - votefactor)) // that means, yescount cannot reach minyes any more + else if(vote_nocount > playercount - vote_abstaincount - vote_needed_absolute) // that means, vote_yescount cannot reach vote_needed_absolute any more { - VoteSpam(yescount, nocount, abstaincount, playercount - yescount - nocount - abstaincount, -1, "no"); + VoteSpam(playercount - vote_yescount - vote_nocount - vote_abstaincount, -1, "no"); VoteReject(); - VoteDialog_Reset(); } else if(time > votefinished) { if(simplevotefactor) { string result; - simplevotefactor = bound(votefactor, simplevotefactor, 0.999); - if(yescount > (yescount + nocount) * simplevotefactor) + if(vote_yescount >= vote_needed_simple) result = "yes"; - else if(yescount + nocount > 0) + else if(vote_yescount + vote_nocount > 0) result = "no"; else result = "timeout"; - VoteSpam(yescount, nocount, abstaincount, playercount - yescount - nocount - abstaincount, floor(min((playercount - abstaincount) * votefactor, (yescount + nocount) * simplevotefactor)) + 1, result); + VoteSpam(playercount - vote_yescount - vote_nocount - vote_abstaincount, min(vote_needed_absolute, vote_needed_simple), result); if(result == "yes") VoteAccept(); else if(result == "no") @@ -668,10 +643,9 @@ void VoteCount() { } else { - VoteSpam(yescount, nocount, abstaincount, playercount - yescount - nocount - abstaincount, floor((playercount - abstaincount) * votefactor) + 1, "timeout"); + VoteSpam(playercount - vote_yescount - vote_nocount - vote_abstaincount, vote_needed_absolute, "timeout"); VoteTimeout(); } - VoteDialog_Reset(); } } } diff --git a/qcsrc/server/vote.qh b/qcsrc/server/vote.qh index 7d937a93c1..75eda9849e 100644 --- a/qcsrc/server/vote.qh +++ b/qcsrc/server/vote.qh @@ -7,6 +7,11 @@ float votefinished; .float vote_master; .float vote_next; .float vote_vote; +float vote_yescount; +float vote_nocount; +float vote_abstaincount; +float vote_needed_absolute; +float vote_needed_simple; float VoteCheckNasty(string cmd); entity GetKickVoteVictim(string vote, string cmd, entity caller); @@ -22,5 +27,5 @@ void VoteAccept(); void VoteReject(); void VoteTimeout(); void VoteStop(entity stopper); -void VoteSpam(float yescount, float nocount, float abstaincount, float notvoters, float mincount, string result); +void VoteSpam(float notvoters, float mincount, string result); void VoteCount(); diff --git a/qcsrc/server/w_common.qc b/qcsrc/server/w_common.qc index 1ceec920e0..f1e33ec968 100644 --- a/qcsrc/server/w_common.qc +++ b/qcsrc/server/w_common.qc @@ -117,7 +117,7 @@ void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, f if(!pseudoprojectile) pseudoprojectile = spawn(); // we need this so the sound uses the "entchannel4" volume - soundtoat(MSG_ONE, pseudoprojectile, beampos, CH_SHOTS_SINGLE, snd, VOL_BASE * f, ATTN_NONE); + soundtoat(MSG_ONE, pseudoprojectile, beampos, CH_SHOTS, snd, VOL_BASE * f, ATTN_NONE); } if(pseudoprojectile) diff --git a/qcsrc/server/w_crylink.qc b/qcsrc/server/w_crylink.qc index 2db4d6e843..6490a3e3a4 100644 --- a/qcsrc/server/w_crylink.qc +++ b/qcsrc/server/w_crylink.qc @@ -17,7 +17,7 @@ void W_Crylink_CheckLinks(entity e) if(e == world) error("W_Crylink_CheckLinks: entity is world"); if(e.classname != "spike") - error("W_Crylink_CheckLinks: entity is not a spike"); + error(sprintf("W_Crylink_CheckLinks: entity is not a spike but a %s (freed: %d)", e.classname, wasfreed(e))); p = e; for(i = 0; i < 1000; ++i) @@ -645,13 +645,13 @@ float w_crylink(float req) { pointparticles(particleeffectnum("crylink_impact"), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/crylink_impact2.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/crylink_impact2.wav", VOL_BASE, ATTN_NORM); } else { pointparticles(particleeffectnum("crylink_impactbig"), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/crylink_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/crylink_impact.wav", VOL_BASE, ATTN_NORM); } } else if(req == WR_PRECACHE) diff --git a/qcsrc/server/w_electro.qc b/qcsrc/server/w_electro.qc index e818fa550f..526d4cd32d 100644 --- a/qcsrc/server/w_electro.qc +++ b/qcsrc/server/w_electro.qc @@ -68,7 +68,7 @@ void W_Plasma_Touch (void) W_Plasma_Explode (); } else { //UpdateCSQCProjectile(self); - spamsound (self, CH_SHOTS_SINGLE, "weapons/electro_bounce.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/electro_bounce.wav", VOL_BASE, ATTN_NORM); self.projectiledeathtype |= HITTYPE_BOUNCE; } } @@ -544,7 +544,7 @@ float w_electro(float req) { pointparticles(particleeffectnum("electro_ballexplode"), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM); } else { @@ -553,13 +553,13 @@ float w_electro(float req) // this is sent as "primary (w_deathtype & HITTYPE_BOUNCE)" to distinguish it from (w_deathtype & HITTYPE_SECONDARY) bounced balls pointparticles(particleeffectnum("electro_combo"), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/electro_impact_combo.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/electro_impact_combo.wav", VOL_BASE, ATTN_NORM); } else { pointparticles(particleeffectnum("electro_impact"), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM); } } } diff --git a/qcsrc/server/w_fireball.qc b/qcsrc/server/w_fireball.qc index c5f749f560..bbb74204c6 100644 --- a/qcsrc/server/w_fireball.qc +++ b/qcsrc/server/w_fireball.qc @@ -197,7 +197,7 @@ void W_Fireball_Attack1_Frame0() W_DecreaseAmmo(ammo_fuel, autocvar_g_balance_fireball_primary_ammo, autocvar_g_balance_fireball_reload_ammo); W_Fireball_AttackEffect(0, '-1.25 -3.75 0'); - sound (self, CH_WEAPON_A, "weapons/fireball_prefire2.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_WEAPON_SINGLE, "weapons/fireball_prefire2.wav", VOL_BASE, ATTN_NORM); weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_fireball_primary_animtime, W_Fireball_Attack1_Frame1); } @@ -404,7 +404,7 @@ float w_fireball(float req) org2 = w_org + w_backoff * 16; pointparticles(particleeffectnum("fireball_explode"), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/fireball_impact2.wav", VOL_BASE, ATTN_NORM * 0.25); // long range boom + sound(self, CH_SHOTS, "weapons/fireball_impact2.wav", VOL_BASE, ATTN_NORM * 0.25); // long range boom } } else if(req == WR_PRECACHE) diff --git a/qcsrc/server/w_grenadelauncher.qc b/qcsrc/server/w_grenadelauncher.qc index 02c2b682f1..1d2ee93b9a 100644 --- a/qcsrc/server/w_grenadelauncher.qc +++ b/qcsrc/server/w_grenadelauncher.qc @@ -82,23 +82,23 @@ void W_Grenade_Touch1 (void) float r; r = random() * 6; if(r < 1) - spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce1.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/grenade_bounce1.wav", VOL_BASE, ATTN_NORM); else if(r < 2) - spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce2.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/grenade_bounce2.wav", VOL_BASE, ATTN_NORM); else if(r < 3) - spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce3.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/grenade_bounce3.wav", VOL_BASE, ATTN_NORM); else if(r < 4) - spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce4.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/grenade_bounce4.wav", VOL_BASE, ATTN_NORM); else if(r < 5) - spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM); else - spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM); self.projectiledeathtype |= HITTYPE_BOUNCE; self.gl_bouncecnt += 1; } else if(autocvar_g_balance_grenadelauncher_primary_type == 2 && (!other || (other.takedamage != DAMAGE_AIM && other.movetype == MOVETYPE_NONE))) // stick { - spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_stick.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/grenade_stick.wav", VOL_BASE, ATTN_NORM); // let it stick whereever it is self.oldvelocity = self.velocity; @@ -110,7 +110,7 @@ void W_Grenade_Touch1 (void) // do not respond to any more touches self.solid = SOLID_NOT; - self.nextthink = min(self.nextthink, time + autocvar_g_balance_grenadelauncher_primary_lifetime2); + self.nextthink = min(self.nextthink, time + autocvar_g_balance_grenadelauncher_primary_lifetime_stick); } } @@ -126,23 +126,27 @@ void W_Grenade_Touch2 (void) float r; r = random() * 6; if(r < 1) - spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce1.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/grenade_bounce1.wav", VOL_BASE, ATTN_NORM); else if(r < 2) - spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce2.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/grenade_bounce2.wav", VOL_BASE, ATTN_NORM); else if(r < 3) - spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce3.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/grenade_bounce3.wav", VOL_BASE, ATTN_NORM); else if(r < 4) - spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce4.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/grenade_bounce4.wav", VOL_BASE, ATTN_NORM); else if(r < 5) - spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM); else - spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM); self.projectiledeathtype |= HITTYPE_BOUNCE; self.gl_bouncecnt += 1; + + if (autocvar_g_balance_grenadelauncher_secondary_lifetime_bounce && self.gl_bouncecnt == 1) + self.nextthink = time + autocvar_g_balance_grenadelauncher_secondary_lifetime_bounce; + } else if(autocvar_g_balance_grenadelauncher_secondary_type == 2 && (!other || (other.takedamage != DAMAGE_AIM && other.movetype == MOVETYPE_NONE))) // stick { - spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_stick.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/grenade_stick.wav", VOL_BASE, ATTN_NORM); // let it stick whereever it is self.oldvelocity = self.velocity; @@ -154,7 +158,7 @@ void W_Grenade_Touch2 (void) // do not respond to any more touches self.solid = SOLID_NOT; - self.nextthink = min(self.nextthink, time + autocvar_g_balance_grenadelauncher_secondary_lifetime2); + self.nextthink = min(self.nextthink, time + autocvar_g_balance_grenadelauncher_secondary_lifetime_stick); } } @@ -367,7 +371,7 @@ float w_glauncher(float req) org2 = w_org + w_backoff * 12; pointparticles(particleeffectnum("grenade_explode"), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM); } else if(req == WR_PRECACHE) { diff --git a/qcsrc/server/w_hagar.qc b/qcsrc/server/w_hagar.qc index 2715166f75..a628be25bb 100644 --- a/qcsrc/server/w_hagar.qc +++ b/qcsrc/server/w_hagar.qc @@ -365,11 +365,11 @@ float w_hagar(float req) if(!w_issilent) { if (w_random<0.15) - sound(self, CH_SHOTS_SINGLE, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM); else if (w_random<0.7) - sound(self, CH_SHOTS_SINGLE, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM); else - sound(self, CH_SHOTS_SINGLE, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM); } } else if(req == WR_PRECACHE) diff --git a/qcsrc/server/w_hlac.qc b/qcsrc/server/w_hlac.qc index 4943bcbea9..978ac5f4a4 100644 --- a/qcsrc/server/w_hlac.qc +++ b/qcsrc/server/w_hlac.qc @@ -230,7 +230,7 @@ float w_hlac(float req) org2 = w_org + w_backoff * 6; pointparticles(particleeffectnum("laser_impact"), org2, w_backoff * 1000, 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM); } else if(req == WR_PRECACHE) { diff --git a/qcsrc/server/w_hook.qc b/qcsrc/server/w_hook.qc index a7f5984663..32892d5558 100644 --- a/qcsrc/server/w_hook.qc +++ b/qcsrc/server/w_hook.qc @@ -256,7 +256,7 @@ float w_hook(float req) org2 = w_org + w_backoff * 2; pointparticles(particleeffectnum("hookbomb_explode"), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/hookbomb_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/hookbomb_impact.wav", VOL_BASE, ATTN_NORM); } else if(req == WR_PRECACHE) { diff --git a/qcsrc/server/w_laser.qc b/qcsrc/server/w_laser.qc index 83eb4ed0b1..5e034acb90 100644 --- a/qcsrc/server/w_laser.qc +++ b/qcsrc/server/w_laser.qc @@ -301,7 +301,7 @@ float w_laser(float req) org2 = w_org + w_backoff * 6; pointparticles(particleeffectnum("laser_impact"), org2, w_backoff * 1000, 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM); } else if(req == WR_PRECACHE) { diff --git a/qcsrc/server/w_minelayer.qc b/qcsrc/server/w_minelayer.qc index aeeb2bb07b..4e56d2d94e 100644 --- a/qcsrc/server/w_minelayer.qc +++ b/qcsrc/server/w_minelayer.qc @@ -13,7 +13,7 @@ void spawnfunc_weapon_minelayer (void) void W_Mine_Stick (entity to) { - spamsound (self, CH_SHOTS_SINGLE, "weapons/mine_stick.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/mine_stick.wav", VOL_BASE, ATTN_NORM); // in order for mines to face properly when sticking to the ground, they must be a server side entity rather than a csqc projectile @@ -176,7 +176,7 @@ void W_Mine_Think (void) if ((time > self.cnt) && (!self.mine_time)) { if(autocvar_g_balance_minelayer_lifetime_countdown > 0) - spamsound (self, CH_SHOTS_SINGLE, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM); self.mine_time = time + autocvar_g_balance_minelayer_lifetime_countdown; self.mine_explodeanyway = 1; // make the mine super aggressive -- Samual: Rather, make it not care if a team mate is near. } @@ -199,7 +199,7 @@ void W_Mine_Think (void) if(head != self.realowner && IsDifferentTeam(head, self.realowner)) // don't trigger for team mates if(!self.mine_time) { - spamsound (self, CH_SHOTS_SINGLE, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM); self.mine_time = time + autocvar_g_balance_minelayer_time; } head = head.chain; @@ -513,7 +513,7 @@ float w_minelayer(float req) org2 = w_org + w_backoff * 12; pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/mine_exp.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/mine_exp.wav", VOL_BASE, ATTN_NORM); } else if(req == WR_PRECACHE) { diff --git a/qcsrc/server/w_minstanex.qc b/qcsrc/server/w_minstanex.qc index c0376547ab..54dd5a6ce8 100644 --- a/qcsrc/server/w_minstanex.qc +++ b/qcsrc/server/w_minstanex.qc @@ -280,7 +280,7 @@ float w_minstanex(float req) org2 = w_org + w_backoff * 6; pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM); } else if(req == WR_PRECACHE) { diff --git a/qcsrc/server/w_nex.qc b/qcsrc/server/w_nex.qc index 59734f20c3..f936705955 100644 --- a/qcsrc/server/w_nex.qc +++ b/qcsrc/server/w_nex.qc @@ -243,7 +243,7 @@ float w_nex(float req) org2 = w_org + w_backoff * 6; pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM); } else if(req == WR_PRECACHE) { diff --git a/qcsrc/server/w_porto.qc b/qcsrc/server/w_porto.qc index 0138c78a70..cb46f52823 100644 --- a/qcsrc/server/w_porto.qc +++ b/qcsrc/server/w_porto.qc @@ -95,19 +95,19 @@ void W_Porto_Touch (void) if(self.realowner.playerid != self.playerid) { - sound(self, CH_SHOTS_SINGLE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); remove(self); } else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK || trace_dphitcontents & DPCONTENTS_PLAYERCLIP) { - spamsound(self, CH_SHOTS_SINGLE, "porto/bounce.wav", VOL_BASE, ATTN_NORM); + spamsound(self, CH_SHOTS, "porto/bounce.wav", VOL_BASE, ATTN_NORM); // just reflect self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * trace_plane_normal); self.angles = vectoangles(self.velocity - 2 * trace_plane_normal * (self.velocity * trace_plane_normal)); } else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT) { - sound(self, CH_SHOTS_SINGLE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); W_Porto_Fail(0); } else if(self.effects & EF_RED) @@ -115,7 +115,7 @@ void W_Porto_Touch (void) self.effects += EF_BLUE - EF_RED; if(Portal_SpawnInPortalAtTrace(self.realowner, self.right_vector, self.portal_id)) { - sound(self, CH_SHOTS_SINGLE, "porto/create.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTN_NORM); trace_plane_normal = norm; centerprint(self.realowner, "^1In^7-portal created."); self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * norm); @@ -124,7 +124,7 @@ void W_Porto_Touch (void) } else { - sound(self, CH_SHOTS_SINGLE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); trace_plane_normal = norm; W_Porto_Fail(0); } @@ -135,20 +135,20 @@ void W_Porto_Touch (void) { if(Portal_SpawnOutPortalAtTrace(self.realowner, self.right_vector, self.portal_id)) { - sound(self, CH_SHOTS_SINGLE, "porto/create.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTN_NORM); trace_plane_normal = norm; centerprint(self.realowner, "^4Out^7-portal created."); W_Porto_Success(); } else { - sound(self, CH_SHOTS_SINGLE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); W_Porto_Fail(0); } } else { - sound(self, CH_SHOTS_SINGLE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); W_Porto_Fail(0); } } diff --git a/qcsrc/server/w_rifle.qc b/qcsrc/server/w_rifle.qc index 8ce7427bcb..d89d44571d 100644 --- a/qcsrc/server/w_rifle.qc +++ b/qcsrc/server/w_rifle.qc @@ -214,11 +214,11 @@ float w_rifle(float req) if(!w_issilent) { if(w_random < 0.2) - sound(self, CH_SHOTS_SINGLE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_NORM); else if(w_random < 0.4) - sound(self, CH_SHOTS_SINGLE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/ric2.wav", VOL_BASE, ATTN_NORM); else if(w_random < 0.5) - sound(self, CH_SHOTS_SINGLE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/ric3.wav", VOL_BASE, ATTN_NORM); } } else if(req == WR_PRECACHE) diff --git a/qcsrc/server/w_rocketlauncher.qc b/qcsrc/server/w_rocketlauncher.qc index 249ddd2934..b4987b69f9 100644 --- a/qcsrc/server/w_rocketlauncher.qc +++ b/qcsrc/server/w_rocketlauncher.qc @@ -491,7 +491,7 @@ float w_rlauncher(float req) org2 = w_org + w_backoff * 12; pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); } else if(req == WR_PRECACHE) { diff --git a/qcsrc/server/w_seeker.qc b/qcsrc/server/w_seeker.qc index 479cb5b245..11423cdf9c 100644 --- a/qcsrc/server/w_seeker.qc +++ b/qcsrc/server/w_seeker.qc @@ -615,17 +615,17 @@ float w_seeker(float req) if(!w_issilent) { if (w_random<0.15) - sound(self, CH_SHOTS_SINGLE, "weapons/tagexp1.wav", 1, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/tagexp1.wav", 1, ATTN_NORM); else if (w_random<0.7) - sound(self, CH_SHOTS_SINGLE, "weapons/tagexp2.wav", 1, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/tagexp2.wav", 1, ATTN_NORM); else - sound(self, CH_SHOTS_SINGLE, "weapons/tagexp3.wav", 1, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/tagexp3.wav", 1, ATTN_NORM); } } else if(w_deathtype & HITTYPE_HEADSHOT) { if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/tag_impact.wav", 1, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/tag_impact.wav", 1, ATTN_NORM); } else { @@ -633,11 +633,11 @@ float w_seeker(float req) if(!w_issilent) { if (w_random<0.15) - sound(self, CH_SHOTS_SINGLE, "weapons/seekerexp1.wav", 1, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/seekerexp1.wav", 1, ATTN_NORM); else if (w_random<0.7) - sound(self, CH_SHOTS_SINGLE, "weapons/seekerexp2.wav", 1, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/seekerexp2.wav", 1, ATTN_NORM); else - sound(self, CH_SHOTS_SINGLE, "weapons/seekerexp3.wav", 1, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/seekerexp3.wav", 1, ATTN_NORM); } } } diff --git a/qcsrc/server/w_shotgun.qc b/qcsrc/server/w_shotgun.qc index 46495fe646..b77ed92252 100644 --- a/qcsrc/server/w_shotgun.qc +++ b/qcsrc/server/w_shotgun.qc @@ -91,7 +91,7 @@ void shotgun_meleethink (void) void W_Shotgun_Attack2 (void) { - sound (self, CH_SHOTS_SINGLE, "weapons/shotgun_melee.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_SHOTS, "weapons/shotgun_melee.wav", VOL_BASE, ATTN_NORM); weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_shotgun_secondary_animtime, w_ready); entity meleetemp; @@ -191,11 +191,11 @@ float w_shotgun(float req) if(!w_issilent && time - self.prevric > 0.25) { if(w_random < 0.0165) - sound(self, CH_SHOTS_SINGLE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_NORM); else if(w_random < 0.033) - sound(self, CH_SHOTS_SINGLE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/ric2.wav", VOL_BASE, ATTN_NORM); else if(w_random < 0.05) - sound(self, CH_SHOTS_SINGLE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/ric3.wav", VOL_BASE, ATTN_NORM); self.prevric = time; } } diff --git a/qcsrc/server/w_tuba.qc b/qcsrc/server/w_tuba.qc index 693612de95..117d32cb96 100644 --- a/qcsrc/server/w_tuba.qc +++ b/qcsrc/server/w_tuba.qc @@ -3,7 +3,6 @@ REGISTER_WEAPON(TUBA, w_tuba, 0, 1, WEP_FLAG_HIDDEN | WEP_TYPE_SPLASH, BOT_PICKU #else #ifdef SVQC //#define TUBA_NOTE(n) strcat("weapons/tuba_note", ftos(n), ".wav") -.float tuba_notecount; .entity tuba_note; .float tuba_smoketime; diff --git a/qcsrc/server/w_uzi.qc b/qcsrc/server/w_uzi.qc index 3e69a7da57..92c81714a1 100644 --- a/qcsrc/server/w_uzi.qc +++ b/qcsrc/server/w_uzi.qc @@ -301,11 +301,11 @@ float w_uzi(float req) pointparticles(particleeffectnum("machinegun_impact"), org2, w_backoff * 1000, 1); if(!w_issilent) if(w_random < 0.05) - sound(self, CH_SHOTS_SINGLE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_NORM); else if(w_random < 0.1) - sound(self, CH_SHOTS_SINGLE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/ric2.wav", VOL_BASE, ATTN_NORM); else if(w_random < 0.2) - sound(self, CH_SHOTS_SINGLE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/ric3.wav", VOL_BASE, ATTN_NORM); } else if(req == WR_PRECACHE) { diff --git a/qcsrc/server/waypointsprites.qc b/qcsrc/server/waypointsprites.qc index 836a853570..b5b6a0beb3 100644 --- a/qcsrc/server/waypointsprites.qc +++ b/qcsrc/server/waypointsprites.qc @@ -214,6 +214,23 @@ float WaypointSprite_Customize() if(e.classname == "spectator") e = e.enemy; + // as a GENERAL rule: + // if you have the invisibility powerup, sprites ALWAYS are restricted to your team + // but only apply this to real players, not to spectators + if(g_minstagib && (self.owner.items & IT_STRENGTH) && (e == other)) + { + if(teamplay) + { + if(self.owner.team != e.team) + return FALSE; + } + else + { + if(self.owner != e) + return FALSE; + } + } + return self.waypointsprite_visible_for_player(e); } diff --git a/qcsrc/warpzonelib/server.qc b/qcsrc/warpzonelib/server.qc index 861b2e01f8..94209205ba 100644 --- a/qcsrc/warpzonelib/server.qc +++ b/qcsrc/warpzonelib/server.qc @@ -298,7 +298,7 @@ float WarpZone_Camera_Send(entity to, float sendflags) float WarpZone_CheckProjectileImpact(entity player) { - vector o0, a0, v0; + vector o0, v0; o0 = player.origin + player.view_ofs; v0 = player.velocity; diff --git a/tooltips.db.de b/tooltips.db.de index 959dc7afdb..d16043306c 100644 --- a/tooltips.db.de +++ b/tooltips.db.de @@ -8,7 +8,7 @@ \menu_slist_showfull\Aktiviere die Anzeige von vollen Servern, die keinen freien Platz mehr haben \net_slist_pause\Unterbreche die automatische Aktualisierung der Serverliste um ein "Herumspringen" zu verhindern \XonoticMultiplayerDialog/Info\Lass dir mehr Informationen über den markierten Server anzeigen -\XonoticMultiplayerDialog/Bookmark\Setze ein Lesezeichen für den markierten Server um ihn beim nächsten mal schneller wiederzufinden +\XonoticMultiplayerDialog/Speichern\Setze ein Lesezeichen für den markierten Server um ihn beim nächsten mal schneller wiederzufinden \XonoticMultiplayerDialog/Havoc\Wechsel in den Havoc Modus, welcher zu Änderungen des Spielverhaltens führt \XonoticMultiplayerDialog/Starten\Hoste dein eigenes Spiel \XonoticMultiplayerDialog/Demos\Gucke dir Demos an @@ -160,7 +160,7 @@ \r_motionblur\Wert für die Bewegungsunschärfe - 0.5 empfohlen \r_damageblur\Wert für die Unschärfe bei einer Verletzung - 0.4 empfohlen -\XonoticSettingsDialog/Audio\Audio-Einstellungen +\XonoticSettingsDialog/Ton\Audio-Einstellungen \bgmvolume\- \volume\- \snd_staticvolume\- diff --git a/tooltips.db.es b/tooltips.db.es index 46371502f3..5cb3912263 100644 --- a/tooltips.db.es +++ b/tooltips.db.es @@ -3,22 +3,22 @@ \XonoticMultiplayerDialog\Juega online, contra tus amigos en LAN, ver demos o cambia la configuración del jugador -\XonoticMultiplayerDialog/Servers\Encuentra servidores para jugar +\XonoticMultiplayerDialog/Servidores\Encuentra servidores para jugar \menu_slist_showempty\Mostrar servidores vacíos \menu_slist_showfull\Mostrar los servidores que no tienen espacio disponible \net_slist_pause\Pausa la actualización de la lista de servidores para evitar que salteen \XonoticMultiplayerDialog/Info\Mostrar mas información sobre el actual servidor resaltado -\XonoticMultiplayerDialog/Bookmark\Marcar el actual servidor resaltado para que sea mas facil encontrarlo en un futuro +\XonoticMultiplayerDialog/Marcador\Marcar el actual servidor resaltado para que sea mas facil encontrarlo en un futuro \XonoticMultiplayerDialog/Havoc\Cambiar a Havoc modo, el cual tiene algunas modificaciones en el juego -\XonoticMultiplayerDialog/Create\Crear tu propio juego +\XonoticMultiplayerDialog/Crear\Crear tu propio juego \XonoticMultiplayerDialog/Demos\Navegar y ver demos \XonoticMultiplayerDialog/Player Setup\Configuración de jugador \XonoticTeamSelectDialog/Unirse al'mejor' equipo (seleccion automática)\Auto seleccionar equipo (recomendado) -\XonoticTeamSelectDialog/red\Unirse al equipo rojo -\XonoticTeamSelectDialog/blue\Unirse al equipo azul -\XonoticTeamSelectDialog/yellow\Unirse al equipo amarillo -\XonoticTeamSelectDialog/pink\Unirse al equipo rosa +\XonoticTeamSelectDialog/rojo\Unirse al equipo rojo +\XonoticTeamSelectDialog/azul\Unirse al equipo azul +\XonoticTeamSelectDialog/amarillo\Unirse al equipo amarillo +\XonoticTeamSelectDialog/rosa\Unirse al equipo rosa \timelimit_override\Límite de tiempo en minutos que cuando pase, terminara el combate \fraglimit_override\Cantidad de puntos necesarios antes de que termine el combate @@ -49,7 +49,7 @@ \XonoticMultiplayerDialog/None\Deseleccionar todos los mapas -\XonoticMultiplayerDialog/Timedemo\Prueba cuan rápido tu computadora puede correr la demo seleccionada +\XonoticMultiplayerDialog/Demo temporizado\Prueba cuan rápido tu computadora puede correr la demo seleccionada \fov\Campo de visión en grados de 60 a 130, 90 es el default \cl_bobcycle\Frecuencia de balanceo de la vista @@ -87,10 +87,10 @@ \XonoticCvarsDialog\- \XonoticQuitDialog\Salir del juego -\XonoticQuitDialog/Yes\Volver al trabajo... +\XonoticQuitDialog/Si\Volver al trabajo... \XonoticQuitDialog/No\Tengo algunos puntos más por hacer! -\XonoticSettingsDialog/Input\configuración de entrada +\XonoticSettingsDialog/Entrada\configuración de entrada \sensitivity\Multiplicador de velocidad del ratón \menu_mouse_speed\Multiplicador de velocidad del raton en el menu, esto no afecta al apuntar en el juego \m_filter\Suaviza el movimiento del raton, pero hace menos sensible al apuntar al objetivo @@ -121,7 +121,7 @@ \vid_samples\activar antialiasing, el cual suaviza los bordes en geometrias en 3D. Note que esto puede disminuir bastante el rendimiento (por defecto: desactivado) \v_flipped\Invertir la imagen horizontalmente (por defecto: desactivado) -\XonoticSettingsDialog/Effects\configuración de efectos. +\XonoticSettingsDialog/Efectos\configuración de efectos. \r_subdivisions_tolerance\Cambiar la suavidad de las curvas en el mapa (por defecto: normal) \gl_picmip\Cambiar la dureza de las texturas. Bajándolo efectivamente reducira el uso de la memoria de la textura, pero hará que las texturas aparezcan muy borrosas. (por defecto: bueno) \r_picmipworld\Si se activa, solo reduce la calidad de texturas de los modelos (activado por defecto) @@ -155,7 +155,7 @@ \r_motionblur\Nivel de desenfoque de movimiento - 0.5 recomendado \r_damageblur\Cantidad de desenfoque de movimiento en presencia de daños - 0.4 recomendado -\XonoticSettingsDialog/Audio\configuración de audio +\XonoticSettingsDialog/Sonido\configuración de audio \bgmvolume\- \volume\- \snd_staticvolume\- @@ -177,7 +177,7 @@ \cl_hitsound\Reproduce un sonido indicador de anotacion cuando disparas a un enemigo \menu_sounds\Reproduce sonidos cuando se clickea o se posiciona sobre un item del menú -\XonoticSettingsDialog/Network\configuración de la red +\XonoticSettingsDialog/Red\configuración de la red \cl_movement\Activar predicción de movimiento del lado del cliente \cl_nolerp\Activar actualización suave en la red \shownetgraph\Activar un gráfico de tamaño de paquetes y otra información diff --git a/tooltips.db.fr b/tooltips.db.fr index 1ab14650e3..89019251a2 100644 --- a/tooltips.db.fr +++ b/tooltips.db.fr @@ -3,22 +3,22 @@ \XonoticMultiplayerDialog\Jouer en ligne avec des amis en réseau local ou sur Internet -\XonoticMultiplayerDialog/Servers\Trouver des serveurs pour y jouer dessus +\XonoticMultiplayerDialog/Serveurs\Trouver des serveurs pour y jouer dessus \menu_slist_showempty\Montrer les serveurs vides \menu_slist_showfull\Montrer les serveurs où toutes les places sont prises \net_slist_pause\Ne met pas à jour la liste de serveurs pour éviter de "glisser" sur un autre serveur \XonoticMultiplayerDialog/Info\Montrer plus d'information sur le serveur séléctionné -\XonoticMultiplayerDialog/Bookmark\Mettre le serveur en haut de la liste pour pouvoir le repérer plus facilement plus tard +\XonoticMultiplayerDialog/Marque-page\Mettre le serveur en haut de la liste pour pouvoir le repérer plus facilement plus tard \XonoticMultiplayerDialog/Havoc\Changer au mode Havoc qui comporte des modifications sur le jeu -\XonoticMultiplayerDialog/Create\Héberger votre propre partie -\XonoticMultiplayerDialog/Demos\Regarder des Vidéos pré-enregistrées +\XonoticMultiplayerDialog/Créer\Héberger votre propre partie +\XonoticMultiplayerDialog/Vidéos\Regarder des Vidéos pré-enregistrées \XonoticMultiplayerDialog/Player Setup\Personaliser vos paramètres \XonoticTeamSelectDialog/join 'best' team (auto-select)\Auto-séléction de l'équipe qui a le plus besoin de vous (recommandé) -\XonoticTeamSelectDialog/red\Joindre l'équipe rouge -\XonoticTeamSelectDialog/blue\Joindre l'équipe bleue -\XonoticTeamSelectDialog/yellow\Joindre l'équipe jaune -\XonoticTeamSelectDialog/pink\Joindre l'équipe rose +\XonoticTeamSelectDialog/rouge\Joindre l'équipe rouge +\XonoticTeamSelectDialog/bleu\Joindre l'équipe bleue +\XonoticTeamSelectDialog/jaune\Joindre l'équipe jaune +\XonoticTeamSelectDialog/rose\Joindre l'équipe rose \timelimit_override\Limite de temps au match, le match se finit quand elle est atteinte \fraglimit_override\Limite de tués pour le match, le match se finit quand elle est atteinte @@ -48,7 +48,7 @@ \XonoticMultiplayerDialog/None\Déséléctionner toutes les cartes -\XonoticMultiplayerDialog/Timedemo\Faire un test de performance en utilisant la vidéo choisie +\XonoticMultiplayerDialog/Test Performance\Faire un test de performance en utilisant la vidéo choisie \fov\Champ de vision en degrés, par défaut 90, certains joueurs préfèrent entre 110 et 130 \cl_bobcycle\Effet de "tremblement" de la caméra en courant @@ -86,10 +86,10 @@ \XonoticCvarsDialog\- \XonoticQuitDialog\Quitter Xonotic -\XonoticQuitDialog/Yes\Retour au boulot... -\XonoticQuitDialog/No\'Faut que je fragge plus de monde! +\XonoticQuitDialog/Oui\Retour au boulot... +\XonoticQuitDialog/Non\'Faut que je fragge plus de monde! -\XonoticSettingsDialog/Input\Paramètres contrôle souris/clavier +\XonoticSettingsDialog/Contrôles\Paramètres contrôle souris/clavier \sensitivity\Sensitivité de la souris \menu_mouse_speed\Sensitivité de la souris dans les menus, n'affecte pas le jeu \m_filter\Adoucit le mouvement de souris, mais crée une légère latence de souris @@ -99,7 +99,7 @@ \sbar_showbinds\Afficher les actions possibles avec des touches/commandes \cl_showpressedkeys\Afficher les touches qu'un joueur est en train d'appuyer -\XonoticSettingsDialog/Video\Video settings +\XonoticSettingsDialog/Vidéo\Video settings \vid_width\Résolution de l'écran \vid_bitsperpixel\Profondeur des couleurs: 16 bits est plus rapide, mais 32 bits est de meilleure qualité (recommandé) \vid_fullscreen\Activer le mode plein écran (par défaut: activé) @@ -120,7 +120,7 @@ \vid_samples\Activer l'anticrénelage, réduit l'effet d'escalier sur les modèles 3D, mais augmente fortement l'utilisation des ressources \v_flipped\Mode mirroir (par défaut: désactivé) -\XonoticSettingsDialog/Effects\Paramètres des effets graphiques +\XonoticSettingsDialog/Graphiques\Paramètres des effets graphiques \r_subdivisions_tolerance\Ajuster la qualité des modèles 3D de carte (courbes, tuyaux) (par défaut: normal) \gl_picmip\Ajuster la qualité des textures. La baisser diminue l'utilisation des ressources, mais rend les textures floues. (par défaut: normal) \r_picmipworld\If set, only reduce the texture quality of models (default: enabled) @@ -176,7 +176,7 @@ \cl_hitsound\Jouer un son quand vous touchez un enemi \menu_sounds\Jouer des sons en cliquant ou en passant la souris sur des options -\XonoticSettingsDialog/Network\Paramètres du jeu en réseau +\XonoticSettingsDialog/Réseau\Paramètres du jeu en réseau \cl_movement\Activer la prédiction des mouvements du joueur pour éviter les saccades lors de parties en réseau \cl_nolerp\Algorithme pour éviter les saccades lors de parties en réseau \shownetgraph\Show a @@ -186,7 +186,7 @@ \cl_curl_maxspeed\Vitesse maximum de téléchargement \cl_port\Forcer le client à passer par le port défini (UDP) s'il n'est pas 0 -\XonoticSettingsDialog/Misc\Autres paramètres +\XonoticSettingsDialog/Autres\Autres paramètres \showtime\Montrer l'heure, utile pour les captures d'écran \showdate\Montrer la date, utile pour les captures d'écran \showfps\Montrer le nombre d'Images Par Seconde rendues (Frames Per Second = FPS) diff --git a/tooltips.db.ru b/tooltips.db.ru index 914d3d47ef..36d11a2105 100644 --- a/tooltips.db.ru +++ b/tooltips.db.ru @@ -3,22 +3,22 @@ \XonoticMultiplayerDialog\Играть по сети, просмотреть демо или изменить настройки игрока -\XonoticMultiplayerDialog/Servers\Поиск игровых серверов +\XonoticMultiplayerDialog/Серверы\Поиск игровых серверов \menu_slist_showempty\Показывать пустые сервера \menu_slist_showfull\Показывать полные сервера, не имеющие свободных мест \net_slist_pause\Приостановить обновление списка серверов для предотвращения их скакания \XonoticMultiplayerDialog/Info\Показать больше сведений о выбранном сервере -\XonoticMultiplayerDialog/Bookmark\Добавить выбранный сервер в закладки, так найти его будет быстрее +\XonoticMultiplayerDialog/В закладки\Добавить выбранный сервер в закладки, так найти его будет быстрее \XonoticMultiplayerDialog/Havoc\Change to Havoc mode which has some modifications to the gameplay -\XonoticMultiplayerDialog/Create\Запустить собственную игру -\XonoticMultiplayerDialog/Demos\Список демо для просмотра +\XonoticMultiplayerDialog/Создать\Запустить собственную игру +\XonoticMultiplayerDialog/Демо\Список демо для просмотра \XonoticMultiplayerDialog/Player Setup\Изменить настройки игрока \XonoticTeamSelectDialog/join 'best' team (auto-select)\Автовыбор команды (советуется) -\XonoticTeamSelectDialog/red\Присоединиться к красной команде -\XonoticTeamSelectDialog/blue\Присоединиться к синей команде -\XonoticTeamSelectDialog/yellow\Присоединиться к жёлтой команде -\XonoticTeamSelectDialog/pink\Присоединиться к розовой команде +\XonoticTeamSelectDialog/красная\Присоединиться к красной команде +\XonoticTeamSelectDialog/синяя\Присоединиться к синей команде +\XonoticTeamSelectDialog/жёлтая\Присоединиться к жёлтой команде +\XonoticTeamSelectDialog/розовая\Присоединиться к розовой команде \timelimit_override\Ограничение времени в минутах, состязание закончится при его достижении \fraglimit_override\Количество очков, необходимых для завершения состязания @@ -48,7 +48,7 @@ \XonoticMultiplayerDialog/None\Снять выделение со всех карт -\XonoticMultiplayerDialog/Timedemo\Замерить, насколько быстро компьютер способен играть выбранное демо +\XonoticMultiplayerDialog/Проверка производительности\Замерить, насколько быстро компьютер способен играть выбранное демо \fov\Угол обзора в градусах, допустимы значения от 60 то 130, по умолчанию 90 \cl_bobcycle\Частота качания вида @@ -86,10 +86,10 @@ \XonoticCvarsDialog\- \XonoticQuitDialog\Выйти из игры -\XonoticQuitDialog/Yes\Пора саночки возить... -\XonoticQuitDialog/No\Остались здесь ещё дела! +\XonoticQuitDialog/Да\Пора саночки возить... +\XonoticQuitDialog/Нет\Остались здесь ещё дела! -\XonoticSettingsDialog/Input\Настройки устройств ввода +\XonoticSettingsDialog/Ввод\Настройки устройств ввода \sensitivity\Множитель скорости мыши \menu_mouse_speed\Множитель скорости мыши в меню, не влияет на прицеливание в игре \m_filter\Сглаживает движения мыши, но значительно ухудшает отзывчивость прицеливания @@ -99,7 +99,7 @@ \sbar_showbinds\Отображать действия / привязанные клавиши в строках, показываемых во время игры \cl_showpressedkeys\Показывать, какие кнопки движений нажимает игрок -\XonoticSettingsDialog/Video\Настройки изображения +\XonoticSettingsDialog/Изображение\Настройки изображения \vid_width\Разрешение экрана \vid_bitsperpixel\Сколько бит на точку использовать для вывода, советуется 32 \vid_fullscreen\Включить полноэкранный режим (по умолчанию: включено) @@ -120,7 +120,7 @@ \vid_samples\Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled) \v_flipped\Poor man's left handed mode (default: off) -\XonoticSettingsDialog/Effects\Настройки эффектов +\XonoticSettingsDialog/Эффекты\Настройки эффектов \r_subdivisions_tolerance\Change the smoothness of the curves on the map (default: normal) \gl_picmip\Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good) \r_picmipworld\If set, only reduce the texture quality of models (default: enabled) @@ -154,7 +154,7 @@ \r_motionblur\Motion blur strength - 0.5 recommended \r_damageblur\Amount of motion blur when hurt - 0.4 recommended -\XonoticSettingsDialog/Audio\Настройки звука +\XonoticSettingsDialog/Звук\Настройки звука \bgmvolume\- \volume\- \snd_staticvolume\- @@ -176,7 +176,7 @@ \cl_hitsound\Играть звук оповещения, когда выстрел достигает противника \menu_sounds\Играть звуки при взаимодействии с меню -\XonoticSettingsDialog/Network\Настройки сети +\XonoticSettingsDialog/Сеть\Настройки сети \cl_movement\Включить предсказание движения на стороне клиента \cl_nolerp\Enable network update smoothing \shownetgraph\Показывать график размеров пакетов и других сведений @@ -186,7 +186,7 @@ \cl_curl_maxspeed\Предел скорости скачивания \cl_port\Force client to use chosen port unless it is set to 0 -\XonoticSettingsDialog/Misc\Разные настройки +\XonoticSettingsDialog/Разное\Разные настройки \showtime\Показывать текущее время, полезно на снимках экранов \showdate\Показывать текущую дату, полезно на снимках экранов \showfps\Show your rendered frames per second