From: Samual Date: Thu, 4 Aug 2011 17:53:53 +0000 (-0400) Subject: Merge remote branch 'origin/master' into samual/updatecommands X-Git-Tag: xonotic-v0.6.0~188^2~28^2~274 X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=9342fa27f9245d9dd57c524876e583475fe3c0f9;hp=1755141520a1d040da0296a5db35b6076f27eb4d Merge remote branch 'origin/master' into samual/updatecommands Conflicts: qcsrc/server/clientcommands.qc --- diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index c4611d77ec..36d6aecd59 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -707,7 +707,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 @@ -1273,7 +1273,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/effects-high.cfg b/effects-high.cfg index 664fca7ad3..48d0d43b87 100644 --- a/effects-high.cfg +++ b/effects-high.cfg @@ -1,4 +1,5 @@ cl_decals 1 +cl_decals_models 0 cl_decals_time 4 cl_particles_quality 1 gl_flashblend 0 diff --git a/effects-low.cfg b/effects-low.cfg index 769ca51217..9609a57802 100644 --- a/effects-low.cfg +++ b/effects-low.cfg @@ -1,4 +1,5 @@ cl_decals 1 +cl_decals_models 0 cl_decals_time 2 cl_particles_quality 0.4 gl_flashblend 1 diff --git a/effects-med.cfg b/effects-med.cfg index a6e5e7d0bd..94a85e5091 100644 --- a/effects-med.cfg +++ b/effects-med.cfg @@ -1,4 +1,5 @@ cl_decals 1 +cl_decals_models 0 cl_decals_time 2 cl_particles_quality 1 gl_flashblend 0 diff --git a/effects-normal.cfg b/effects-normal.cfg index dbad238261..7822102ba9 100644 --- a/effects-normal.cfg +++ b/effects-normal.cfg @@ -1,4 +1,5 @@ cl_decals 1 +cl_decals_models 0 cl_decals_time 2 cl_particles_quality 1 gl_flashblend 0 diff --git a/effects-omg.cfg b/effects-omg.cfg index 6e6a1dcbbe..a68a15787d 100644 --- a/effects-omg.cfg +++ b/effects-omg.cfg @@ -1,4 +1,5 @@ cl_decals 0 +cl_decals_models 0 cl_decals_time 2 cl_particles_quality 0.4 gl_flashblend 1 diff --git a/effects-ultimate.cfg b/effects-ultimate.cfg index d6e501892b..20cd2e5638 100644 --- a/effects-ultimate.cfg +++ b/effects-ultimate.cfg @@ -1,4 +1,5 @@ cl_decals 1 +cl_decals_models 1 cl_decals_time 10 cl_particles_quality 1 gl_flashblend 0 diff --git a/effects-ultra.cfg b/effects-ultra.cfg index 47949e551b..94d47fab2e 100644 --- a/effects-ultra.cfg +++ b/effects-ultra.cfg @@ -1,4 +1,5 @@ cl_decals 1 +cl_decals_models 1 cl_decals_time 10 cl_particles_quality 1 gl_flashblend 0 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 95a01ab0e7..0b0faa3108 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -847,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) @@ -1300,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(); @@ -1385,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 48566db573..e6dc730983 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -175,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/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/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/waypointsprites.qc b/qcsrc/client/waypointsprites.qc index 9e5b199882..72488fca2f 100644 --- a/qcsrc/client/waypointsprites.qc +++ b/qcsrc/client/waypointsprites.qc @@ -228,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; } } 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 e253ee5c71..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; 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_settings_effects.c b/qcsrc/menu/xonotic/dialog_settings_effects.c index 2aa2d52397..23cb6a3b9b 100644 --- a/qcsrc/menu/xonotic/dialog_settings_effects.c +++ b/qcsrc/menu/xonotic/dialog_settings_effects.c @@ -114,7 +114,9 @@ void XonoticEffectsSettingsTab_fill(entity me) me.TD(me, 1, 1.9, e = makeXonoticSlider(500, 2000, 100, "r_drawparticles_drawdistance")); me.TR(me); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_decals", _("Decals"))); + me.TD(me, 1, 1.5, e = makeXonoticCheckBox(0, "cl_decals", _("Decals"))); + me.TD(me, 1, 1.5, e = makeXonoticCheckBox(0, "cl_decals_models", _("Decals on models"))); + setDependent(e, "cl_decals", 1, 1); me.TR(me); me.TDempty(me, 0.2); me.TD(me, 1, 0.9, e = makeXonoticTextLabel(0, _("Distance:"))); diff --git a/qcsrc/qc-client.cbp b/qcsrc/qc-client.cbp deleted file mode 100644 index 63e00e9e17..0000000000 --- a/qcsrc/qc-client.cbp +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - diff --git a/qcsrc/qc-common.cbp b/qcsrc/qc-common.cbp deleted file mode 100644 index 95f1ba836e..0000000000 --- a/qcsrc/qc-common.cbp +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - diff --git a/qcsrc/qc-server.cbp b/qcsrc/qc-server.cbp deleted file mode 100644 index eaa30d2d46..0000000000 --- a/qcsrc/qc-server.cbp +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - diff --git a/qcsrc/server/assault.qc b/qcsrc/server/assault.qc index 2a0d8bc537..85009dd830 100644 --- a/qcsrc/server/assault.qc +++ b/qcsrc/server/assault.qc @@ -313,9 +313,31 @@ void spawnfunc_target_assault_roundstart() { // trigger new round // reset objectives, toggle spawnpoints, reset triggers, ... -void assault_new_round() { +void vehicles_clearrturn(); +void vehicles_spawn(); +void assault_new_round() +{ + entity oldself; //bprint("ASSAULT: new round\n"); + oldself = self; + // Eject players from vehicles + FOR_EACH_PLAYER(self) + { + if(self.vehicle) + vehicles_exit(VHEF_RELESE); + } + + self = findchainflags(vehicle_flags, VHF_ISVEHICLE); + while(self) + { + vehicles_clearrturn(); + vehicles_spawn(); + self = self.chain; + } + + self = oldself; + // up round counter self.winning = self.winning + 1; @@ -338,7 +360,7 @@ void assault_new_round() { ent.team_saved = COLOR_TEAM1; } } - + // reset the level with a countdown cvar_set("timelimit", ftos(ceil(time - game_starttime) / 60)); ReadyRestartForce(); // sets game_starttime 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/clientcommands.qc b/qcsrc/server/clientcommands.qc index 88672c7e3f..8770f11f71 100644 --- a/qcsrc/server/clientcommands.qc +++ b/qcsrc/server/clientcommands.qc @@ -50,6 +50,16 @@ float Nagger_SendEntity(entity to, float sendflags) 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) { @@ -66,19 +76,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) @@ -104,7 +123,7 @@ void Nagger_VoteChanged() void Nagger_VoteCountChanged() { if(nagger) - nagger.SendFlags |= 1; + nagger.SendFlags |= 64; } void Nagger_ReadyCounted() { @@ -843,4 +862,4 @@ void SV_ParseClientCommand(string command) default: clientcommand(self, command); //print("Invalid command. For a list of supported commands, try cmd help.\n"); } -} \ No newline at end of file +} diff --git a/qcsrc/server/ctf.qc b/qcsrc/server/ctf.qc index a54ee6a8ac..93446ed5ba 100644 --- a/qcsrc/server/ctf.qc +++ b/qcsrc/server/ctf.qc @@ -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/mode_onslaught.qc b/qcsrc/server/mode_onslaught.qc index 457141f74a..4f6b6328d4 100644 --- a/qcsrc/server/mode_onslaught.qc +++ b/qcsrc/server/mode_onslaught.qc @@ -1067,33 +1067,55 @@ void onslaught_controlpoint_icon_think() self.owner.waslinked = self.owner.islinked; } - if (self.punchangle_x > 2) - self.punchangle_x = self.punchangle_x - 2; - else if (self.punchangle_x < -2) - self.punchangle_x = self.punchangle_x + 2; - else - self.punchangle_x = 0; - if (self.punchangle_y > 2) - self.punchangle_y = self.punchangle_y - 2; - else if (self.punchangle_y < -2) - self.punchangle_y = self.punchangle_y + 2; - else - self.punchangle_y = 0; - if (self.punchangle_z > 2) - self.punchangle_z = self.punchangle_z - 2; - else if (self.punchangle_z < -2) - self.punchangle_z = self.punchangle_z + 2; - else - self.punchangle_z = 0; + + if (self.punchangle_x > 0) + { + self.punchangle_x = self.punchangle_x - 60 * sys_frametime; + if (self.punchangle_x < 0) + self.punchangle_x = 0; + } + else if (self.punchangle_x < 0) + { + self.punchangle_x = self.punchangle_x + 60 * sys_frametime; + if (self.punchangle_x > 0) + self.punchangle_x = 0; + } + + if (self.punchangle_y > 0) + { + self.punchangle_y = self.punchangle_y - 60 * sys_frametime; + if (self.punchangle_y < 0) + self.punchangle_y = 0; + } + else if (self.punchangle_y < 0) + { + self.punchangle_y = self.punchangle_y + 60 * sys_frametime; + if (self.punchangle_y > 0) + self.punchangle_y = 0; + } + + if (self.punchangle_z > 0) + { + self.punchangle_z = self.punchangle_z - 60 * sys_frametime; + if (self.punchangle_z < 0) + self.punchangle_z = 0; + } + else if (self.punchangle_z < 0) + { + self.punchangle_z = self.punchangle_z + 60 * sys_frametime; + if (self.punchangle_z > 0) + self.punchangle_z = 0; + } + self.angles_x = self.punchangle_x; self.angles_y = self.punchangle_y + self.mangle_y; self.angles_z = self.punchangle_z; - self.mangle_y = self.mangle_y + 1.5; + self.mangle_y = self.mangle_y + 45 * sys_frametime; - self.cp_bob_origin_z = 4 * PI * (1 - cos(self.cp_bob_spd / 8)); - self.cp_bob_spd = self.cp_bob_spd + 0.5; + self.cp_bob_origin_z = 4 * PI * (1 - cos(self.cp_bob_spd)); + self.cp_bob_spd = self.cp_bob_spd + 1.875 * sys_frametime; if(self.cp_bob_dmg_z > 0) - self.cp_bob_dmg_z = self.cp_bob_dmg_z - 0.1; + self.cp_bob_dmg_z = self.cp_bob_dmg_z - 3 * sys_frametime; else self.cp_bob_dmg_z = 0; setorigin(self,self.cp_origin + self.cp_bob_origin + self.cp_bob_dmg); 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/vehicles/racer.qc b/qcsrc/server/vehicles/racer.qc index 9fbd6541fc..e3c74c5e19 100644 --- a/qcsrc/server/vehicles/racer.qc +++ b/qcsrc/server/vehicles/racer.qc @@ -669,6 +669,10 @@ void spawnfunc_vehicle_racer() self.vehicle_flags |= VHF_HEALTHREGEN; self.think = racer_dinit; - self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_racer_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5); + + if(g_assault) + self.nextthink = time + 0.5; + else + self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_racer_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5); } #endif // SVQC diff --git a/qcsrc/server/vehicles/raptor.qc b/qcsrc/server/vehicles/raptor.qc index 26054ae092..201c186c37 100644 --- a/qcsrc/server/vehicles/raptor.qc +++ b/qcsrc/server/vehicles/raptor.qc @@ -734,6 +734,10 @@ void spawnfunc_vehicle_raptor() precache_sound ("vehicles/raptor_speed.wav"); self.think = raptor_dinit; - self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_raptor_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5); + + if(g_assault) + self.nextthink = time + 0.5; + else + self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_raptor_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5); } #endif // SVQC diff --git a/qcsrc/server/vehicles/spiderbot.qc b/qcsrc/server/vehicles/spiderbot.qc index 8d64ca420f..f43ec08e52 100644 --- a/qcsrc/server/vehicles/spiderbot.qc +++ b/qcsrc/server/vehicles/spiderbot.qc @@ -673,7 +673,11 @@ void spawnfunc_vehicle_spiderbot() if(autocvar_g_vehicle_spiderbot_health_regen) self.vehicle_flags |= VHF_HEALTHREGEN; - self.think = vewhicle_spiderbot_dinit; - self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_spiderbot_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5); + self.think = vewhicle_spiderbot_dinit; + + if(g_assault) + self.nextthink = time + 0.5; + else + self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_spiderbot_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5); } #endif // SVQC diff --git a/qcsrc/server/vehicles/vehicles.qc b/qcsrc/server/vehicles/vehicles.qc index 901e68ff1b..d9d77b5f52 100644 --- a/qcsrc/server/vehicles/vehicles.qc +++ b/qcsrc/server/vehicles/vehicles.qc @@ -618,7 +618,9 @@ void vehicles_exit(float eject) if(!teamplay) self.team = 0; - + else + self.team = self.tur_head.team; + if(self.owner.flagcarried) { self.owner.flagcarried.scale = 0.6; @@ -629,6 +631,7 @@ void vehicles_exit(float eject) sound (self, CH_TRIGGER_SINGLE, "misc/null.wav", 1, ATTN_NORM); self.vehicle_exit(eject); self.owner = world; + vehicles_reset_colors(); if(oldself) self = oldself; @@ -845,7 +848,7 @@ void vehicles_setreturn() ret.classname = "vehicle_return"; ret.enemy = self; ret.team = self.team; - ret.think = vehicles_showwp; + ret.think = vehicles_showwp; if(self.deadflag != DEAD_NO) { @@ -856,8 +859,6 @@ void vehicles_setreturn() { ret.nextthink = min(time + self.vehicle_respawntime, time + self.vehicle_respawntime - 1); } - - setmodel(ret, "null"); setorigin(ret, self.pos1 + '0 0 96'); @@ -959,7 +960,7 @@ float vehicle_initialize(string net_name, if(self.team && !teamplay) self.team = 0; - + self.vehicle_flags |= VHF_ISVEHICLE; setmodel(self, bodymodel); @@ -1018,7 +1019,8 @@ float vehicle_initialize(string net_name, self.pos1 = self.origin; self.pos2 = self.angles; - + self.tur_head.team = self.team; + return TRUE; } 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/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/xonotic-gamecode.workspace b/qcsrc/xonotic-gamecode.workspace deleted file mode 100644 index 3f4a59a303..0000000000 --- a/qcsrc/xonotic-gamecode.workspace +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - 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