-Sun Feb 4 07:24:40 CET 2018
+Wed Feb 7 07:23:41 CET 2018
set g_pickup_respawntime_weapon 10
set g_pickup_respawntime_superweapon 120
set g_pickup_respawntime_ammo 10
+set g_pickup_respawntime_initial_random 2
set g_pickup_respawntimejitter_short 0
set g_pickup_respawntimejitter_medium 0
set g_pickup_respawntimejitter_long 0
set g_pickup_respawntime_weapon 15
set g_pickup_respawntime_superweapon 120
set g_pickup_respawntime_ammo 15
+set g_pickup_respawntime_initial_random 2
set g_pickup_respawntimejitter_short 0
set g_pickup_respawntimejitter_medium 0
set g_pickup_respawntimejitter_long 0
set g_pickup_respawntime_weapon 10
set g_pickup_respawntime_superweapon 120
set g_pickup_respawntime_ammo 10
+set g_pickup_respawntime_initial_random 0
set g_pickup_respawntimejitter_short 0
set g_pickup_respawntimejitter_medium 0
set g_pickup_respawntimejitter_long 0
set g_pickup_respawntime_weapon 10
set g_pickup_respawntime_superweapon 120
set g_pickup_respawntime_ammo 10
+set g_pickup_respawntime_initial_random 2
set g_pickup_respawntimejitter_short 0
set g_pickup_respawntimejitter_medium 0
set g_pickup_respawntimejitter_long 0
set g_pickup_respawntime_weapon 0.1
set g_pickup_respawntime_superweapon 0.1
set g_pickup_respawntime_ammo 0.1
+set g_pickup_respawntime_initial_random 2
set g_pickup_respawntimejitter_short 0
set g_pickup_respawntimejitter_medium 0
set g_pickup_respawntimejitter_long 0
set g_pickup_respawntime_weapon 10
set g_pickup_respawntime_superweapon 120
set g_pickup_respawntime_ammo 10
+set g_pickup_respawntime_initial_random 1
set g_pickup_respawntimejitter_short 0
set g_pickup_respawntimejitter_medium 0
set g_pickup_respawntimejitter_long 0
set g_pickup_respawntime_weapon 10
set g_pickup_respawntime_superweapon 120
set g_pickup_respawntime_ammo 10
+set g_pickup_respawntime_initial_random 1
set g_pickup_respawntimejitter_short 0
set g_pickup_respawntimejitter_medium 0
set g_pickup_respawntimejitter_long 0
# adem4ik, 2014
# Alex Talker <alextalker7@gmail.com>, 2014-2015
# Andrei Stepanov, 2014
-# Andrei Stepanov, 2014-2017
+# Andrei Stepanov, 2014-2018
# Andrey P <andrey.pyntikov@gmail.com>, 2016
# Artem Vorotnikov <artem@vorotnikov.me>, 2015
# Lord Canistra <lordcanistra@gmail.com>, 2011
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-09 00:35+0200\n"
-"PO-Revision-Date: 2017-09-19 19:55+0000\n"
+"PO-Revision-Date: 2018-02-06 07:53+0000\n"
"Last-Translator: Andrei Stepanov\n"
"Language-Team: Russian (http://www.transifex.com/team-xonotic/xonotic/"
"language/ru/)\n"
"Kill enemies to freeze them, stand next to frozen teammates to revive them; "
"freeze all enemies to win"
msgstr ""
-"Поражайте врагов, чтобы заморозить их всех и выиграть раунд, и "
-"Ñ\80азмоÑ\80аживайÑ\82е Ñ\81оÑ\8eзников, Ñ\81Ñ\82оÑ\8f Ñ\80Ñ\8fдом Ñ\81 ними"
+"Поражайте врагов, чтобы заморозить их всех и выиграть раунд. Размораживайте "
+"союзников, стоя рядом с ними"
#: qcsrc/common/mapinfo.qh:446
msgid "Hold the ball to get points for kills"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:65
msgid "Geometry detail:"
-msgstr "Детали геометрии:"
+msgstr "Детализация окружения:"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:67
msgid "Change the smoothness of the curves on the map (default: normal)"
CSQCMODEL_PROPERTY_SCALED(BIT(8), float, ReadByte, WriteByte, glowmod_x, 254, -1, 254) \
CSQCMODEL_PROPERTY_SCALED(BIT(8), float, ReadByte, WriteByte, glowmod_y, 254, -1, 254) \
CSQCMODEL_PROPERTY_SCALED(BIT(8), float, ReadByte, WriteByte, glowmod_z, 254, -1, 254) \
- CSQCMODEL_PROPERTY_SCALED(BIT(8), float, ReadByte, WriteByte, colormod_x, 254, -1, 254) \
- CSQCMODEL_PROPERTY_SCALED(BIT(8), float, ReadByte, WriteByte, colormod_y, 254, -1, 254) \
- CSQCMODEL_PROPERTY_SCALED(BIT(8), float, ReadByte, WriteByte, colormod_z, 254, -1, 254) \
CSQCMODEL_ENDIF \
+ CSQCMODEL_PROPERTY_SCALED(BIT(8), float, ReadByte, WriteByte, colormod_x, 16, 0, 255) \
+ CSQCMODEL_PROPERTY_SCALED(BIT(8), float, ReadByte, WriteByte, colormod_y, 16, 0, 255) \
+ CSQCMODEL_PROPERTY_SCALED(BIT(8), float, ReadByte, WriteByte, colormod_z, 16, 0, 255) \
CSQCMODEL_IF(isplayer) \
CSQCMODEL_PROPERTY(BIT(7), int, ReadByte, WriteByte, anim_state) \
CSQCMODEL_PROPERTY(BIT(7), float, ReadApproxPastTime, WriteApproxPastTime, anim_time) \
AUTOCVAR(g_pickup_respawntime_scaling_offset, float, 0.0, "Multiply respawn time by `reciprocal / (p + offset) + linear` where `p` is the current number of players, takes effect with 2 or more players present, `offset` offsets the curve left or right - the results are not intuitive and I recommend plotting the respawn time and the number of items per player to see what's happening");
AUTOCVAR(g_pickup_respawntime_scaling_linear, float, 1.0, "Multiply respawn time by `reciprocal / (p + offset) + linear` where `p` is the current number of players, takes effect with 2 or more players present, `linear` can be used to simply scale the respawn time linearly");
+/// Adjust respawn time according to the number of players.
float adjust_respawntime(float normal_respawntime) {
float r = autocvar_g_pickup_respawntime_scaling_reciprocal;
float o = autocvar_g_pickup_respawntime_scaling_offset;
//LOG_INFOF("item %s will respawn in %f", e.classname, adjusted_respawntime);
// range: adjusted_respawntime - respawntimejitter .. adjusted_respawntime + respawntimejitter
- float actual_time = adjusted_respawntime + crandom() * e.respawntimejitter;
- Item_ScheduleRespawnIn(e, actual_time);
+ float respawn_in = adjusted_respawntime + crandom() * e.respawntimejitter;
+ Item_ScheduleRespawnIn(e, respawn_in);
}
else // if respawntime is -1, this item does not respawn
Item_Show(e, -1);
}
+AUTOCVAR(g_pickup_respawntime_initial_random, int, 1,
+ "For items that don't start spawned: 0: spawn after their normal respawntime; 1: spawn after `random * respawntime` with the *same* random; 2: same as 1 but each item has separate random");
+
+float shared_random;
+STATIC_INIT(shared_random) { shared_random = random(); }
void Item_ScheduleInitialRespawn(entity e)
{
Item_Show(e, 0);
- Item_ScheduleRespawnIn(e, max(0, game_starttime - time) + ((e.respawntimestart) ? e.respawntimestart : ITEM_RESPAWNTIME_INITIAL(e)));
+
+ float spawn_in;
+ if (autocvar_g_pickup_respawntime_initial_random == 0)
+ {
+ // range: respawntime .. respawntime + respawntimejitter
+ spawn_in = e.respawntime + random() * e.respawntimejitter;
+ }
+ else if (autocvar_g_pickup_respawntime_initial_random == 1)
+ {
+ // range:
+ // if respawntime >= ITEM_RESPAWN_TICKS: ITEM_RESPAWN_TICKS .. respawntime + respawntimejitter
+ // else: 0 .. ITEM_RESPAWN_TICKS
+ // this is to prevent powerups spawning unexpectedly without waypoints
+ spawn_in = ITEM_RESPAWN_TICKS + shared_random * (e.respawntime + e.respawntimejitter - ITEM_RESPAWN_TICKS);
+ }
+ else
+ {
+ // range: same as 1
+ spawn_in = ITEM_RESPAWN_TICKS + random() * (e.respawntime + e.respawntimejitter - ITEM_RESPAWN_TICKS);
+ }
+
+ Item_ScheduleRespawnIn(e, max(0, game_starttime - time) + ((e.respawntimestart) ? e.respawntimestart : spawn_in));
}
void GiveRandomWeapons(entity receiver, int num_weapons, string weapon_names,
const float ITEM_RESPAWN_TICKS = 10;
-#define ITEM_RESPAWNTIME_INITIAL(i) (ITEM_RESPAWN_TICKS + random() * ((i).respawntime + (i).respawntimejitter - ITEM_RESPAWN_TICKS))
- // range: 10 .. respawntime + respawntimejitter
-
.float max_armorvalue;
.float pickup_anyway;
#include <common/triggers/target/location.qc>
#include <common/triggers/target/music.qc>
#include <common/triggers/target/spawn.qc>
+#include <common/triggers/target/spawnpoint.qc>
#include <common/triggers/target/speaker.qc>
#include <common/triggers/target/voicescript.qc>
#include <common/triggers/target/location.qh>
#include <common/triggers/target/music.qh>
#include <common/triggers/target/spawn.qh>
+#include <common/triggers/target/spawnpoint.qh>
#include <common/triggers/target/speaker.qh>
#include <common/triggers/target/voicescript.qh>
#include "location.qc"
#include "music.qc"
#include "spawn.qc"
+#include "spawnpoint.qc"
#include "speaker.qc"
#include "voicescript.qc"
--- /dev/null
+#include "spawnpoint.qh"
+
+#ifdef SVQC
+void target_spawnpoint_use(entity this, entity actor, entity trigger)
+{
+ if(this.active != ACTIVE_ACTIVE)
+ return;
+
+ actor.spawnpoint_targ = this;
+}
+
+void target_spawnpoint_reset(entity this)
+{
+ this.active = ACTIVE_ACTIVE;
+}
+
+// TODO: persistent spawnflag?
+spawnfunc(target_spawnpoint)
+{
+ this.active = ACTIVE_ACTIVE;
+ this.use = target_spawnpoint_use;
+ this.reset = target_spawnpoint_reset;
+}
+#endif
--- /dev/null
+#pragma once
+
+#ifdef SVQC
+.entity spawnpoint_targ;
+#endif
// set myself as current viewloc where possible
#if 1
- FOREACH_CLIENT(it.viewloc == this,
+ FOREACH_CLIENT(IS_PLAYER(it) && it.viewloc == this,
{
it.viewloc = NULL;
});
me.gotoRC(me, 1.25, 0);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Geometry detail:")));
me.TD(me, 1, 2, e = makeXonoticTextSlider_T("r_subdivisions_tolerance",
- _("Change the smoothness of the curves on the map (default: normal)")));
+ _("Change the smoothness of the curves on the map")));
e.addValue(e, ZCTX(_("DET^Lowest")), "16");
e.addValue(e, ZCTX(_("DET^Low")), "8");
e.addValue(e, ZCTX(_("DET^Normal")), "4");
{
me.TDempty(me, 0.2);
me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx_T(3, 0, "r_showsurfaces", _("Show surfaces"),
- _("Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly. (default: disabled)")));
+ _("Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly.")));
}
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(1, "mod_q3bsp_nolightmaps", _("Use lightmaps"),
- _("Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)")));
+ _("Use high resolution lightmaps, which will look pretty but use up some extra video memory")));
e.applyButton = effectsApplyButton;
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_glsl_deluxemapping", _("Deluxe mapping"),
- _("Use per-pixel lighting effects (default: enabled)")));
+ _("Use per-pixel lighting effects")));
setDependentAND(e, "vid_gl20", 1, 1, "mod_q3bsp_nolightmaps", 0, 0);
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_shadow_gloss", _("Gloss"),
- _("Enable the use of glossmaps on textures supporting it (default: enabled)")));
+ _("Enable the use of glossmaps on textures supporting it")));
setDependentAND3(e, "vid_gl20", 1, 1, "mod_q3bsp_nolightmaps", 0, 0, "r_glsl_deluxemapping", 1, 1);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_glsl_offsetmapping", _("Offset mapping"),
- _("Offset mapping effect that will make textures with bumpmaps appear like they \"pop out\" of the flat 2D surface (default: disabled)")));
+ _("Offset mapping effect that will make textures with bumpmaps appear like they \"pop out\" of the flat 2D surface")));
setDependent(e, "vid_gl20", 1, 1);
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_glsl_offsetmapping_reliefmapping", _("Relief mapping"),
- _("Higher quality offset mapping, which also has a huge impact on performance (default: disabled)")));
+ _("Higher quality offset mapping, which also has a huge impact on performance")));
setDependentAND(e, "vid_gl20", 1, 1, "r_glsl_offsetmapping", 1, 1);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_water", _("Reflections:"),
- _("Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces (default: disabled)")));
+ _("Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces")));
setDependent(e, "vid_gl20", 1, 1);
me.TD(me, 1, 2, e = makeXonoticTextSlider_T("r_water_resolutionmultiplier",
- _("Resolution of reflections/refractions (default: good)")));
+ _("Resolution of reflections/refractions")));
e.addValue(e, _("Blurred"), "0.25");
e.addValue(e, ZCTX(_("REFL^Good")), "0.5");
e.addValue(e, _("Sharp"), "1");
setDependentAND(e, "vid_gl20", 1, 1, "r_water", 1, 1);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "cl_decals", _("Decals"),
- _("Enable decals (bullet holes and blood) (default: enabled)")));
+ _("Enable decals (bullet holes and blood)")));
me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "cl_decals_models", _("Decals on models")));
setDependent(e, "cl_decals", 1, 1);
me.TR(me);
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Distance:")));
setDependent(e, "cl_decals", 1, 1);
me.TD(me, 1, 2, e = makeXonoticSlider_T(200, 500, 20, "r_drawdecals_drawdistance",
- _("Decals further away than this will not be drawn (default: 300)")));
+ _("Decals further away than this will not be drawn")));
setDependent(e, "cl_decals", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Time:")));
setDependent(e, "cl_decals", 1, 1);
me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 20, 1, "cl_decals_fadetime",
- _("Time in seconds before decals fade away (default: 2)")));
+ _("Time in seconds before decals fade away")));
setDependent(e, "cl_decals", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
me.gotoRC(me, 1.25, 3.2); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 3, e = makeXonoticRadioButton_T(1, "r_coronas", "0", _("No dynamic lighting"),
- _("Enable corona flares around certain lights (default: enabled)")));
+ _("Enable corona flares around certain lights")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticRadioButton_T(1, "gl_flashblend", string_null, _("Fake corona lighting"),
- _("Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)")));
+ _("Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights")));
makeMulti(e, "r_coronas");
me.TR(me);
me.TD(me, 1, 2, e = makeXonoticRadioButton_T(1, "r_shadow_realtime_dlight", string_null, _("Realtime dynamic lighting"),
- _("Enable rendering of dynamic lights such as explosions and rocket lights (default: enabled)")));
+ _("Enable rendering of dynamic lights such as explosions and rocket lights")));
makeMulti(e, "r_coronas");
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_dlight_shadows", _("Shadows"),
- _("Enable rendering of shadows from dynamic lights (default: disabled)")));
+ _("Enable rendering of shadows from dynamic lights")));
setDependent(e, "r_shadow_realtime_dlight", 1, 1);
me.TR(me);
me.TD(me, 1, 2, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_world", _("Realtime world lighting"),
- _("Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance. (default: disabled)")));
+ _("Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance.")));
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_world_shadows", _("Shadows"),
- _("Enable rendering of shadows from realtime world lights (default: disabled)")));
+ _("Enable rendering of shadows from realtime world lights")));
setDependent(e, "r_shadow_realtime_world", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "r_shadow_usenormalmap", _("Use normal maps"),
- _("Enable use of directional shading on textures (default: enabled)")));
+ _("Enable use of directional shading on textures")));
setDependentOR(e, "r_shadow_realtime_dlight", 1, 1, "r_shadow_realtime_world", 1, 1);
me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_shadowmapping", _("Soft shadows")));
setDependentWeird(e, someShadowCvarIsEnabled);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 2.8, e = makeXonoticCheckBox_T(0, "r_coronas_occlusionquery", _("Fade corona according to visibility"),
- _("Fade coronas according to visibility (default: enabled)")));
+ _("Fade coronas according to visibility")));
setDependent(e, "r_coronas", 1, 1);
me.TR(me);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_bloom", _("Bloom"),
- _("Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)")));
+ _("Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance.")));
me.TD(me, 1, 2, e = makeXonoticCheckBoxEx_T(0.5, 0, "hud_postprocessing_maxbluralpha", _("Extra postprocessing effects"),
- _("Enables special postprocessing effects for when damaged or under water or using a powerup (default: disabled)")));
+ _("Enables special postprocessing effects for when damaged or under water or using a powerup")));
makeMulti(e, "hud_powerup");
setDependent(e, "vid_gl20", 1, 1);
me.TR(me);
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Quality:")));
setDependent(e, "cl_particles", 1, 1);
me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 3.0, 0.25, "cl_particles_quality",
- _("Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1.0)")));
+ _("Multiplier for amount of particles. Less means less particles, which in turn gives for better performance")));
setDependent(e, "cl_particles", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Distance:")));
setDependent(e, "cl_particles", 1, 1);
me.TD(me, 1, 2, e = makeXonoticSlider_T(200, 3000, 200, "r_drawparticles_drawdistance",
- _("Particles further away than this will not be drawn (default: 1000)")));
+ _("Particles further away than this will not be drawn")));
setDependent(e, "cl_particles", 1, 1);
me.gotoRC(me, me.rows - 1, 0);
me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Field of view:")));
me.TD(me, 1, 2, e = makeXonoticSlider_T(60, 130, 5, "fov",
- _("Field of vision in degrees (default: 100)")));
+ _("Field of vision in degrees")));
me.TR(me);
me.TR(me);
//me.TDempty(me, 0.2);
me.gotoRC(me, 11.5, 3.25); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 2.5, e = makeXonoticCheckBox_T(0, "cl_gentle", _("Disable gore effects and harsh language"),
- _("Replace blood and gibs with content that does not have any gore effects (default: disabled)")));
+ _("Replace blood and gibs with content that does not have any gore effects")));
e.applyButton = userApplyButton;
me.gotoRC(me, me.rows - 1, 0);
me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "vid_fullscreen", _("Full screen")));
e.applyButton = videoApplyButton;
me.TD(me, 1, 2, e = makeXonoticCheckBox_T(0, "vid_vsync", _("Vertical Synchronization"),
- _("Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)")));
+ _("Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate")));
me.TR(me);
if(cvar("developer"))
{
me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "v_flipped", _("Flip view horizontally"),
- _("Poor man's left handed mode (default: off)")));
+ _("Poor man's left handed mode")));
}
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Anisotropy:")));
me.TD(me, 1, 2, e = makeXonoticTextSlider_T("gl_texture_anisotropy",
- _("Anisotropic filtering quality (default: 1x)")));
+ _("Anisotropic filtering quality")));
e.addValue(e, ZCTX(_("ANISO^Disabled")), "1");
e.addValue(e, _("2x"), "2");
e.addValue(e, _("4x"), "4");
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Antialiasing:")));
setDependent(e, "r_viewfbo", 0, 0);
me.TD(me, 1, 2, e = makeXonoticTextSlider_T("vid_samples",
- _("Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)")));
+ _("Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot")));
e.addValue(e, ZCTX(_("AA^Disabled")), "1");
e.addValue(e, _("2x"), "2");
e.addValue(e, _("4x"), "4");
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Depth first:")));
me.TD(me, 1, 2, e = makeXonoticTextSlider_T("r_depthfirst",
- _("Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)")));
+ _("Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts")));
e.addValue(e, ZCTX(_("DF^Disabled")), "0");
e.addValue(e, ZCTX(_("DF^World")), "1");
e.addValue(e, ZCTX(_("DF^All")), "2");
me.TDempty(me, 0.2);
me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "gl_vbo", "0", ZCTX(_("VBO^Off"))));
me.TD(me, 1, 1.9, e = makeXonoticRadioButton_T(1, "gl_vbo", "3", _("Vertices, some Tris (compatible)"),
- _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)")));
+ _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering")));
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 0.9, e = makeXonoticRadioButton_T(1, "gl_vbo", "2", _("Vertices"),
- _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)")));
+ _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering")));
me.TD(me, 1, 1.9, e = makeXonoticRadioButton_T(1, "gl_vbo", "1", _("Vertices and Triangles"),
- _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)")));
+ _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering")));
me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Brightness:")));
me.TD(me, 1, 2, e = makeXonoticSlider_T(0.0, 0.5, 0.02, "v_brightness",
- _("Brightness of black (default: 0)")));
+ _("Brightness of black")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Contrast:")));
me.TD(me, 1, 2, e = makeXonoticSlider_T(1.0, 3.0, 0.05, "v_contrast",
- _("Brightness of white (default: 1)")));
+ _("Brightness of white")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gamma:")));
setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
me.TD(me, 1, 2, e = makeXonoticSlider_T(0.5, 2.0, 0.05, "v_gamma",
- _("Inverse gamma correction value, a brightness effect that does not affect white or black (default: 1.125)")));
+ _("Inverse gamma correction value, a brightness effect that does not affect white or black")));
setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Contrast boost:")));
setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
me.TD(me, 1, 2, e = makeXonoticSlider_T(1.0, 5.0, 0.1, "v_contrastboost",
- _("By how much to multiply the contrast in dark areas (default: 1)")));
+ _("By how much to multiply the contrast in dark areas")));
setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Saturation:")));
setDependent(e, "vid_gl20", 1, 1);
me.TD(me, 1, 2, e = makeXonoticSlider_T(0.5, 2.0, 0.05, "r_glsl_saturation",
- _("Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control (default: 1)")));
+ _("Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control")));
setDependent(e, "vid_gl20", 1, 1);
me.TR(me);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, ZCTX(_("LIT^Ambient:"))));
me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 20.0, 0.25, "r_ambient",
- _("Ambient lighting, if set too high it tends to make light on maps look dull and flat (default: 4)")));
+ _("Ambient lighting, if set too high it tends to make light on maps look dull and flat")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Intensity:")));
me.TD(me, 1, 2, e = makeXonoticSlider_T(0.5, 2.0, 0.05, "r_hdr_scenebrightness",
- _("Global rendering brightness (default: 1)")));
+ _("Global rendering brightness")));
me.TR(me);
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "gl_finish", _("Wait for GPU to finish each frame"),
- _("Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)")));
+ _("Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "vid_gl20", _("Use OpenGL 2.0 shaders (GLSL)")));
e.applyButton = videoApplyButton;
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 2.8, e = makeXonoticCheckBox_T(0, "v_glslgamma", _("Use GLSL to handle color control"),
- _("Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot (default: disabled)")));
+ _("Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot")));
setDependent(e, "vid_gl20", 1, 1);
if(cvar("developer"))
{
void XonoticParticlesSlider_configureXonoticParticlesSlider(entity me)
{
me.configureXonoticTextSlider(me, "cl_particles_quality",
- _("Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1)"));
+ _("Multiplier for amount of particles. Less means less particles, which in turn gives for better performance"));
if(cvar("developer")) { me.addValue(me, ZCTX(_("PART^OMG")), "0.25 250 0"); }
me.addValue(me, ZCTX(_("PART^Low")), "0.5 500 0");
me.addValue(me, ZCTX(_("PART^Medium")), "0.75 750 0");
void XonoticPicmipSlider_configureXonoticPicmipSlider(entity me)
{
me.configureXonoticTextSlider(me, "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)"));
+ _("Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry."));
me.autofix(me);
me.have_s3tc = GL_Have_TextureCompression();
}
bool autocvar_sv_precacheplayermodels;
//float autocvar_sv_precacheweapons; // WEAPONTODO?
bool autocvar_sv_q3acompat_machineshotgunswap;
-bool autocvar_sv_ready_restart;
-bool autocvar_sv_ready_restart_after_countdown;
-bool autocvar_sv_ready_restart_repeatable;
bool autocvar_sv_servermodelsonly;
int autocvar_sv_spectate;
float autocvar_sv_spectator_speed_multiplier;
#include "../common/triggers/func/conveyor.qh"
#include "../common/triggers/teleporters.qh"
+#include "../common/triggers/target/spawnpoint.qh"
#include "../common/vehicles/all.qh"
this.weapons = '0 0 0';
this.drawonlytoclient = this;
+ this.viewloc = NULL;
+
+ //this.spawnpoint_targ = NULL; // keep it so they can return to where they were?
+
this.weaponmodel = "";
for (int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
{
this.pauserothealth_finished = time + autocvar_g_balance_pause_health_rot_spawn;
this.pauserotfuel_finished = time + autocvar_g_balance_pause_fuel_rot_spawn;
this.pauseregen_finished = time + autocvar_g_balance_pause_health_regen_spawn;
- // extend the pause of rotting if client was reset at the beginning of the countdown
- if (!autocvar_sv_ready_restart_after_countdown && time < game_starttime) { // TODO why is this cvar NOTted?
+ if (!sv_ready_restart_after_countdown && time < game_starttime)
+ {
float f = game_starttime - time;
this.spawnshieldtime += f;
this.pauserotarmor_finished += f;
this.pauserothealth_finished += f;
this.pauseregen_finished += f;
}
+
this.damageforcescale = 2;
this.death_time = 0;
this.respawn_flags = 0;
this.viewloc = NULL;
+ this.spawnpoint_targ = NULL;
+
this.crouch = false;
this.view_ofs = STAT(PL_VIEW_OFS, this);
setsize(this, STAT(PL_MIN, this), STAT(PL_MAX, this));
{
if (IS_CLIENT(caller))
{
- if (warmup_stage || autocvar_sv_ready_restart || g_race_qualifying == 2)
+ if (warmup_stage || sv_ready_restart || g_race_qualifying == 2)
{
- if (!readyrestart_happened || autocvar_sv_ready_restart_repeatable)
+ if (!readyrestart_happened || sv_ready_restart_repeatable)
{
if (time < game_starttime) // game is already restarting
return;
}
// initiate the restart-countdown-announcer entity
- if (autocvar_sv_ready_restart_after_countdown)
+ if (sv_ready_restart_after_countdown)
{
entity restart_timer = new_pure(restart_timer);
setthink(restart_timer, ReadyRestart_think);
{
FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it), { CS(it).allowed_timeouts = autocvar_sv_timeout_number; });
}
- // reset map immediately if this cvar is not set
- if (!autocvar_sv_ready_restart_after_countdown) reset_map(true);
+
+ if (!sv_ready_restart_after_countdown) reset_map(true);
if (autocvar_sv_eventlog) GameLogEcho(":restart");
}
// Reset ALL scores, but only do that at the beginning of the countdown if sv_ready_restart_after_countdown is off!
// Otherwise scores could be manipulated during the countdown.
- if (!autocvar_sv_ready_restart_after_countdown) Score_ClearAll();
+ if (!sv_ready_restart_after_countdown) Score_ClearAll();
ReadyRestart_force();
}
float warmup_stage;
float g_jetpack;
+bool sv_ready_restart;
+bool sv_ready_restart_after_countdown;
+bool sv_ready_restart_repeatable;
+
float sv_clones;
float sv_foginterval;
sv_maxidle_slots_countbots = cvar("sv_maxidle_slots_countbots");
sv_autotaunt = cvar("sv_autotaunt");
sv_taunt = cvar("sv_taunt");
+ sv_ready_restart = cvar("sv_ready_restart");
+ sv_ready_restart_after_countdown = cvar("sv_ready_restart_after_countdown");
+ sv_ready_restart_repeatable = cvar("sv_ready_restart_repeatable");
warmup_stage = cvar("g_warmup");
warmup_limit = cvar("g_warmup_limit");
MUTATOR_HOOKFUNCTION(as, ReadLevelCvars)
{
- // no assault warmups
+ // incompatible
warmup_stage = 0;
+ sv_ready_restart_after_countdown = 0;
}
MUTATOR_HOOKFUNCTION(as, OnEntityPreSpawn)
if (spot)
return spot;
+ if(this.spawnpoint_targ)
+ return this.spawnpoint_targ;
+
if(anypoint || autocvar_g_spawn_useallspawns)
teamcheck = -1;
else if(have_team_spawns > 0)
bool forbidWeaponUse(entity player)
{
- if (time < game_starttime && !autocvar_sv_ready_restart_after_countdown) return true;
+ if (time < game_starttime && !sv_ready_restart_after_countdown) return true;
if (player.player_blocked) return true;
if (game_stopped) return true;
if (STAT(FROZEN, player)) return true;
if (this.m_switchweapon == WEP_Null)
{
+ if (this.state != WS_CLEAR)
+ w_ready(this.m_weapon, actor, weaponentity, button_atck | (button_atck2 << 1));
this.m_weapon = WEP_Null;
this.m_switchingweapon = WEP_Null;
this.state = WS_CLEAR;