- wget -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints
- wget -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache
- make
- - EXPECT=905d184cd4c5c17605f58d153dae6ce7
+ - EXPECT=9ad57788673e6a5aa1caad302eddb1ad
- HASH=$(${ENGINE} -noconfig -nohome +exec serverbench.cfg
| tee /dev/stderr
| grep '^:'
-Sun May 31 07:24:59 CEST 2020
+Tue Jun 2 07:23:45 CEST 2020
seta hud_panel_engineinfo_framecounter_exponentialmovingaverage 1 "use an averaging method for calculating fps instead of counting frametime like engine does"
seta hud_panel_engineinfo_framecounter_exponentialmovingaverage_new_weight 0.1 "weight of latest data point"
seta hud_panel_engineinfo_framecounter_exponentialmovingaverage_instantupdate_change_threshold 0.5 "threshold for fps change when to update instantly, to make big fps changes update faster"
+seta hud_panel_engineinfo_framecounter_decimals "0" "amount of decimals to show"
+seta hud_panel_engineinfo_framecounter_time "0.1" "time between framerate display updates"
seta hud_panel_physics_acceleration_movingaverage 1 "use an averaging method for calculating acceleration instead of the real value"
seta hud_panel_physics_update_interval 0.016 "how often (in seconds) numeric values get updated on screen"
seta hud_panel_engineinfo_bg_alpha "" "if set to something else than \"\" = override default panel background alpha"
seta hud_panel_engineinfo_bg_border "" "if set to something else than \"\" = override default size of border around the background"
seta hud_panel_engineinfo_bg_padding "" "if set to something else than \"\" = override default padding of contents from border"
-seta hud_panel_engineinfo_framecounter_decimals "" "amount of decimals to show"
-seta hud_panel_engineinfo_framecounter_time "" "time between framerate display updates"
seta hud_panel_infomessages_pos "" "position of this base of the panel"
seta hud_panel_infomessages_size "" "size of this panel"
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Antonio <piuntn@gmail.com>, 2013-2019
+# Antonio <piuntn@gmail.com>, 2013-2020
# Antonio 'terencehill' Piu <piuntn@gmail.com>, 2011-2012
# Costa <yesbubu@hotmail.it>, 2014
# Felice Sallustio <fel.sallustio@gmail.com>, 2011
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-30 00:02+0200\n"
-"PO-Revision-Date: 2020-05-29 22:02+0000\n"
-"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"PO-Revision-Date: 2020-06-02 01:43+0000\n"
+"Last-Translator: Antonio <piuntn@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/team-xonotic/xonotic/"
"language/it/)\n"
"Language: it\n"
#: qcsrc/common/notifications/all.inc:719 qcsrc/menu/xonotic/campaign.qc:244
#, c-format
msgid "Level %s: "
-msgstr ""
+msgstr "Livello %s: "
#: qcsrc/common/notifications/all.inc:719
#, c-format
msgid "^BGPress ^F2%s^BG to enter the game"
-msgstr ""
+msgstr "^BGPremi ^F2%s^BG per entrare nella partita"
#: qcsrc/common/notifications/all.inc:722
#, c-format
#: qcsrc/common/notifications/all.inc:726
msgid "^BGYou captured a control point"
-msgstr ""
+msgstr "^BGHai catturato un punto di controllo"
#: qcsrc/common/notifications/all.inc:727
#, c-format
#: qcsrc/common/notifications/all.inc:728
msgid "^TC^TT^BG team captured a control point"
-msgstr ""
+msgstr "^BG La squadra ^TC^TT^BG ha catturato un punto di controllo"
#: qcsrc/common/notifications/all.inc:729
msgid "^BGThis control point currently cannot be captured"
#: qcsrc/menu/xonotic/dialog_disconnect.qc:22
msgid "I would play more!"
-msgstr ""
+msgstr "Giocherei ancora!"
#: qcsrc/menu/xonotic/dialog_disconnect.qh:6
#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qh:6
#: qcsrc/menu/xonotic/dialog_disconnect.qh:7
msgid "Disconnect server"
-msgstr ""
+msgstr "Disconnetti dal server"
#: qcsrc/menu/xonotic/dialog_firstrun.qc:39
msgid ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:168
msgid "An explosion occurs when two players collide"
-msgstr ""
+msgstr "Succede un'esplosione quando due giocatori collidono"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:172
msgid "All players are almost invisible"
#: qcsrc/menu/xonotic/keybinder.qc:93
msgid "Communication"
-msgstr ""
+msgstr "Comunicazione"
#: qcsrc/menu/xonotic/keybinder.qc:94
msgid "public chat"
#: qcsrc/menu/xonotic/keybinder.qc:120
msgid "drop key/flag, exit vehicle"
-msgstr ""
+msgstr "lascia chiave/bandiera, esci dal veicolo"
#: qcsrc/menu/xonotic/keybinder.qc:121
msgid "suicide / respawn"
-msgstr ""
+msgstr "suicidati / rinasci"
#: qcsrc/menu/xonotic/keybinder.qc:122
msgid "quick menu"
#: qcsrc/menu/xonotic/keybinder.qc:132
msgid "Development"
-msgstr ""
+msgstr "Sviluppo"
#: qcsrc/menu/xonotic/keybinder.qc:133
msgid "sandbox menu"
#: qcsrc/menu/xonotic/statslist.qc:44
msgid "DATE^%m %d, %Y"
-msgstr ""
+msgstr "DATE^%d/%m/%Y"
#: qcsrc/menu/xonotic/statslist.qc:95
msgid "Joined:"
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-30 00:02+0200\n"
-"PO-Revision-Date: 2020-05-31 01:03+0000\n"
+"PO-Revision-Date: 2020-05-31 13:52+0000\n"
"Last-Translator: Andrei Stepanov <adem4ik@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/team-xonotic/xonotic/"
"language/ru/)\n"
#: qcsrc/common/notifications/all.inc:719 qcsrc/menu/xonotic/campaign.qc:244
#, c-format
msgid "Level %s: "
-msgstr ""
+msgstr "Уровень %s:"
#: qcsrc/common/notifications/all.inc:719
#, c-format
sizeincrease -6
size 10 10
trailspacing 40
+effect respawn_ghost
+ count 75
+ type static
+ color 0xA0A0A0 0xFFFFFF
+ size 2 2
+ alpha 32 64 128
+ airfriction 1
+ liquidfriction 4
+ originoffset 0 0 -8
+ originjitter 28 28 16
+ velocityjitter 0 0 256
seta hud_panel_engineinfo_bg_alpha ""
seta hud_panel_engineinfo_bg_border ""
seta hud_panel_engineinfo_bg_padding ""
-seta hud_panel_engineinfo_framecounter_time "0.1"
-seta hud_panel_engineinfo_framecounter_decimals "0"
seta hud_panel_infomessages_pos "0.680000 0.100000"
seta hud_panel_infomessages_size "0.280000 0.080000"
seta hud_panel_engineinfo_bg_alpha ""
seta hud_panel_engineinfo_bg_border ""
seta hud_panel_engineinfo_bg_padding ""
-seta hud_panel_engineinfo_framecounter_time "0.1"
-seta hud_panel_engineinfo_framecounter_decimals "0"
seta hud_panel_infomessages_pos "0.680000 0.100000"
seta hud_panel_infomessages_size "0.280000 0.080000"
seta hud_panel_engineinfo_bg_alpha ""
seta hud_panel_engineinfo_bg_border ""
seta hud_panel_engineinfo_bg_padding ""
-seta hud_panel_engineinfo_framecounter_time "0.1"
-seta hud_panel_engineinfo_framecounter_decimals "0"
seta hud_panel_infomessages_pos "0.710000 0"
seta hud_panel_infomessages_size "0.280000 0.090000"
seta hud_panel_engineinfo_bg_alpha ""
seta hud_panel_engineinfo_bg_border ""
seta hud_panel_engineinfo_bg_padding ""
-seta hud_panel_engineinfo_framecounter_time "0.1"
-seta hud_panel_engineinfo_framecounter_decimals "0"
seta hud_panel_infomessages_pos "0.710000 0"
seta hud_panel_infomessages_size "0.280000 0.090000"
seta hud_panel_engineinfo_bg_alpha ""
seta hud_panel_engineinfo_bg_border ""
seta hud_panel_engineinfo_bg_padding ""
-seta hud_panel_engineinfo_framecounter_time "0.1"
-seta hud_panel_engineinfo_framecounter_decimals "0"
seta hud_panel_infomessages_pos "0.510000 0"
seta hud_panel_infomessages_size "0.340000 0.090000"
seta hud_panel_engineinfo_bg_alpha ""
seta hud_panel_engineinfo_bg_border ""
seta hud_panel_engineinfo_bg_padding ""
-seta hud_panel_engineinfo_framecounter_time "0.1"
-seta hud_panel_engineinfo_framecounter_decimals "0"
seta hud_panel_infomessages_pos "0.690000 0.620000"
seta hud_panel_infomessages_size "0.300000 0.100000"
float autocvar_cl_particles_quality;
bool autocvar_cl_projectiles_sloppy;
bool autocvar_cl_readpicture_force;
+bool autocvar_cl_respawn_ghosts_keepcolors;
bool autocvar_cl_reticle = 1;
float autocvar_cl_reticle_normal_alpha = 1;
bool autocvar_cl_reticle_weapon = 1;
LABEL(skipforcemodels)
- if(this.csqcmodel_effects & CSQCMODEL_EF_RESPAWNGHOST)
+ if((this.csqcmodel_effects & CSQCMODEL_EF_RESPAWNGHOST) && !autocvar_cl_respawn_ghosts_keepcolors)
{
- // no glowmod or team colors for ghosts
this.glowmod = '0 0 0';
this.colormap = 0;
return;
void HUD_EngineInfo_Export(int fh)
{
// allow saving cvars that aesthetically change the panel into hud skin files
- HUD_Write_Cvar("hud_panel_engineinfo_framecounter_time");
- HUD_Write_Cvar("hud_panel_engineinfo_framecounter_decimals");
}
float prevfps;
// local spawn actions
if(is_new && (!entnum || (entnum == player_localentnum)))
{
- zoomin_effect = 1;
- current_viewzoom = (1 / bound(1, autocvar_cl_spawnzoom_factor, 16));
+ if(autocvar_cl_spawnzoom && !autocvar_cl_lockview)
+ {
+ zoomin_effect = 1;
+ current_viewzoom = (1 / bound(1, autocvar_cl_spawnzoom_factor, 16));
+ }
if(autocvar_cl_unpress_zoom_on_spawn)
{
return r;
}
+#define SET_POS_AND_SZ_Y_ASPECT(allow_colors) MACRO_BEGIN \
+ float textaspect, oldsz; \
+ vector dfs = drawfontscale; \
+ drawfontscale = '1 1 0'; \
+ textaspect = stringwidth(text, allow_colors, '1 1 1' * sz.y) / sz.y; \
+ drawfontscale = dfs; \
+ if(sz.x/sz.y > textaspect) { \
+ oldsz = sz.x; \
+ sz.x = sz.y * textaspect; \
+ pos.x += (oldsz - sz.x) * 0.5; \
+ } else { \
+ oldsz = sz.y; \
+ sz.y = sz.x / textaspect; \
+ pos.y += (oldsz - sz.y) * 0.5; \
+ } \
+MACRO_END
+
// drawstring wrapper to draw a string as large as possible with preserved aspect ratio into a box
void drawstring_aspect(vector pos, string text, vector sz, vector color, float theAlpha, float drawflag) {
SET_POS_AND_SZ_Y_ASPECT(false);
void drawpic_aspect_skin_expanding_two(vector position, string pic, vector theScale, vector rgb, float theAlpha, float flag, float fadelerp);
-#define SET_POS_AND_SZ_Y_ASPECT(allow_colors) MACRO_BEGIN \
- float textaspect, oldsz; \
- vector dfs = drawfontscale; \
- drawfontscale = '1 1 0'; \
- textaspect = stringwidth(text, allow_colors, '1 1 1' * sz.y) / sz.y; \
- drawfontscale = dfs; \
- if(sz.x/sz.y > textaspect) { \
- oldsz = sz.x; \
- sz.x = sz.y * textaspect; \
- pos.x += (oldsz - sz.x) * 0.5; \
- } else { \
- oldsz = sz.y; \
- sz.y = sz.x / textaspect; \
- pos.y += (oldsz - sz.y) * 0.5; \
- } \
-MACRO_END
-
// drawstring wrapper to draw a string as large as possible with preserved aspect ratio into a box
void drawstring_aspect(vector pos, string text, vector sz, vector color, float theAlpha, float drawflag);
else
setsensitivityscale(1);
- if(autocvar_cl_velocityzoom_enabled && autocvar_cl_velocityzoom_type) // _type = 0 disables velocity zoom too
+ if(autocvar_cl_velocityzoom_enabled && autocvar_cl_velocityzoom_type && !autocvar_cl_lockview) // _type = 0 disables velocity zoom too
{
if (intermission || (spectatee_status > 0 && STAT(CAMERA_SPECTATOR) == 2))
curspeed = 0;
float f, i, j;
vector v;
- if(!scoreboard_active && !camera_active && intermission != 2 && !STAT(GAME_STOPPED) &&
- spectatee_status != -1 && (!csqcplayer.viewloc || (!spectatee_status && (csqcplayer.viewloc.spawnflags & VIEWLOC_FREEAIM))) && !MUTATOR_CALLHOOK(DrawCrosshair) &&
- !HUD_MinigameMenu_IsOpened() )
+ if(!scoreboard_active && !camera_active && intermission != 2 && !STAT(GAME_STOPPED) && !autocvar_cl_lockview
+ && spectatee_status != -1 && (!csqcplayer.viewloc || (!spectatee_status && (csqcplayer.viewloc.spawnflags & VIEWLOC_FREEAIM))) && !MUTATOR_CALLHOOK(DrawCrosshair)
+ && !HUD_MinigameMenu_IsOpened())
{
if (!autocvar_crosshair_enabled) // main toggle for crosshair rendering
return;
// use `cl_particles_reloadeffects` to reload effects without restarting engine
// use `chase_active 1` and `cl_lockview 1` to see effects from different perspectives
// `dumpeffectinfo` currently doesn't work so edit effectinfo.txt manually, just try to keep the files in sync
+// always add new effects to the bottom of the list
// `tex` are indices into particles/particlefont.tga (see particles/particlefont-template.tga for numbers)
// the first index is inclusive, second exclusive (so `tex 0 8` will use images 0 though 7)
MY(trailspacing) = 40;
MY(type) = "smoke";
}
+
+// respawn ghosts effect
+DEF(RESPAWN_GHOST);
+SUB(RESPAWN_GHOST) {
+ MY(count) = 75;
+ MY(type) = "static";
+ MY(color_min) = "0xA0A0A0";
+ MY(color_max) = "0xFFFFFF";
+ MY(size_min) = 2;
+ MY(size_max) = 2;
+ MY(alpha_min) = 32;
+ MY(alpha_max) = 64;
+ MY(alpha_fade) = 128;
+ MY(airfriction) = 1;
+ MY(liquidfriction) = 4;
+ MY(originoffset) = '0 0 -8';
+ MY(originjitter) = '28 28 16';
+ MY(velocityjitter) = '0 0 256';
+}
+
+// always add new effects to the bottom of the list. And keep this comment in the bottom line of this file!
+#if ENABLE_EFFECTINFO
+
#include "effectinfo.qh"
#define EFFECTINFO_PARSER(on, MY) \
on(type, MY(type) \
#undef MY
#undef DEF
#undef SUB
+
+#endif
if(warmup_stage)
return false;
- if(player.frags == FRAGS_SPECTATOR)
- return true;
- if(GameRules_scoring_add(player, LMS_LIVES, 0) <= 0)
+ if(player.frags == FRAGS_SPECTATOR || GameRules_scoring_add(player, LMS_LIVES, 0) <= 0)
{
Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_LMS_NOLIVES);
return true;
==================
SUB_SetFade
-Fade 'ent' out when time >= 'when'
+Fade ent out when time >= vanish_time
==================
*/
-void SUB_SetFade (entity ent, float when, float fading_time)
+void SUB_SetFade(entity ent, float vanish_time, float fading_time)
{
+ if (fading_time <= 0)
+ fading_time = 0.01;
ent.fade_rate = 1/fading_time;
setthink(ent, SUB_SetFade_Think);
- ent.nextthink = when;
+ ent.nextthink = vanish_time;
}
/*
// Very short animations don't really show off the effect
// of controlled animation, so let's just use linear movement.
// Alternatively entities can choose to specify non-controlled movement.
- // The only currently implemented alternative movement is linear (value 1)
+ // The only currently implemented alternative movement is linear (value 1)
if (traveltime < 0.15 || (this.platmovetype_start == 1 && this.platmovetype_end == 1)) // is this correct?
{
this.velocity = delta * (1/traveltime); // QuakeC doesn't allow vector/float division
void SetBrushEntityModel(entity this, bool with_lod)
{
- if(this.model != "")
- {
- precache_model(this.model);
+ if(this.model != "")
+ {
+ precache_model(this.model);
if(this.mins != '0 0 0' || this.maxs != '0 0 0')
{
vector mi = this.mins;
if(endsWith(this.model, ".obj")) // WORKAROUND: darkplaces currently rotates .obj models on entities incorrectly, we need to add 180 degrees to the Y axis
this.angles_y = anglemods(this.angles_y - 180);
- }
+ }
setorigin(this, this.origin);
ApplyMinMaxScaleAngles(this);
}
if (PHYS_FROZEN(this))
return true; // no jumping in freezetag when frozen
+ if(PHYS_INPUT_BUTTON_CHAT(this) || PHYS_INPUT_BUTTON_MINIGAME(this))
+ return true; // no jumping while typing
+
#ifdef SVQC
if (this.player_blocked)
return true; // no jumping while blocked
void PM_check_blocked(entity this)
{
+ if(PHYS_INPUT_BUTTON_CHAT(this) || PHYS_INPUT_BUTTON_MINIGAME(this))
+ PHYS_CS(this).movement = '0 0 0';
#ifdef SVQC
if (!this.player_blocked)
return;
CLASS(XonoticDisconnectDialog, XonoticDialog)
METHOD(XonoticDisconnectDialog, fill, void(entity));
ATTRIB(XonoticDisconnectDialog, title, string, _("Disconnect"));
- ATTRIB(XonoticDisconnectDialog, tooltip, string, _("Disconnect server"));
+ ATTRIB(XonoticDisconnectDialog, tooltip, string, _("Disconnect from the server you are connected to"));
ATTRIB(XonoticDisconnectDialog, color, vector, SKINCOLOR_DIALOG_QUIT);
ATTRIB(XonoticDisconnectDialog, intendedWidth, float, 0.5);
ATTRIB(XonoticDisconnectDialog, rows, float, 3);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_touchexplode", _("Touch explode"),
- _("An explosion occurs when two players collide")));
+ _("An explosion occurs when two players collide")));
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_cloaked", _("Cloaked"),
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_buffs", _("Buffs"),
- _("Enable buff pickups (random bonuses like Medic, Invisible, etc.) on the maps that support it")));
+ _("Enable buff pickups (random bonuses like Medic, Invisible, etc.) on the maps that support it")));
e.cvarOffValue = "-1"; // TODO: make this a radio button?
me.TR(me);
me.TDempty(me, 0.2);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_invincible_projectiles", _("Invincible Projectiles"),
- _("Projectiles can't be destroyed. However, Electro combos still work")));
+ _("Projectiles can't be destroyed. However, you can still explode Electro orbs with the Electro primary fire")));
setDependent(e, "g_instagib", 0, 0);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_new_toys", _("New Toys"),
- _("Some weapon spawns will be randomly replaced with new weapons: Heavy Laser Assault Cannon, Mine Layer, Rifle, T.A.G. Seeker")));
+ _("Some weapon spawns will be randomly replaced with new weapons: Heavy Laser Assault Cannon, Mine Layer, Rifle, T.A.G. Seeker")));
setDependentWeird(e, checkCompatibility_newtoys);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_rocket_flying", _("Rocket Flying"),
- _("Devastator rockets can be detonated instantly (otherwise, there's a short delay). This allows players to fire and detonate a Devastator rocket while in the air for a strong mid-air boost even while moving fast")));
+ _("Devastator rockets can be detonated instantly (otherwise, there's a short delay). This allows players to fire and detonate a Devastator rocket while in the air for a strong mid-air boost even while moving fast")));
setDependent(e, "g_instagib", 0, 0);
me.TR(me);
me.TDempty(me, 0.2);
}
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1, e = makeXonoticCheckBoxEx_T(1, 0, "r_sky", _("Show skyboxes"), _("Disable skyboxes for performance and visibility")));
+ me.TD(me, 1, 1, e = makeXonoticCheckBoxEx_T(1, 0, "r_sky", _("Show sky"), _("Disable sky for performance and visibility")));
if(cvar("developer") > 0)
{
me.TD(me, 1, 1, e = makeXonoticCheckBoxEx_T(3, 0, "r_showsurfaces", _("Show surfaces"),
entity e = me.favoriteButton;
if(IsFavorite(me.ipAddressBox.text))
{
- e.setText(e, _("Remove favorite"));
+ e.setText(e, _("SERVER^Remove favorite"));
setZonedTooltip(e, _("Remove the currently highlighted server from bookmarks"), string_null);
}
else
{
- e.setText(e, _("Favorite"));
+ e.setText(e, _("SERVER^Favorite"));
setZonedTooltip(e, _("Bookmark the currently highlighted server so that it's faster to find in the future"), string_null);
}
}
default: return input; // failed, why?
}
+ // without no-c-format this string looks messed up in Transifex since only %d is a valid c placeholder
+ /* xgettext:no-c-format */
string date = ZCTX(_("DATE^%m %d, %Y"));
date = strreplace("%Y", substring(input, 0, 4), date);
date = strreplace("%d", ftos(stof(substring(input, 8, 2))), date); // ftos-stof removes leading 0
float autocvar_g_respawn_delay_max;
bool autocvar_g_respawn_delay_forced;
bool autocvar_g_respawn_ghosts;
-float autocvar_g_respawn_ghosts_maxtime;
+float autocvar_g_respawn_ghosts_alpha = 1;
+float autocvar_g_respawn_ghosts_fadetime = 1.5;
+float autocvar_g_respawn_ghosts_time = 4.5;
float autocvar_g_respawn_ghosts_speed;
int autocvar_g_respawn_waves;
string autocvar_g_shootfromfixedorigin;
void respawn(entity this)
{
+ bool damagedbycontents_prev = this.damagedbycontents;
if(this.alpha >= 0)
{
if(autocvar_g_respawn_ghosts)
{
this.solid = SOLID_NOT;
this.takedamage = DAMAGE_NO;
+ this.damagedbycontents = false;
set_movetype(this, MOVETYPE_FLY);
this.velocity = '0 0 1' * autocvar_g_respawn_ghosts_speed;
this.avelocity = randomvec() * autocvar_g_respawn_ghosts_speed * 3 - randomvec() * autocvar_g_respawn_ghosts_speed * 3;
this.effects |= CSQCMODEL_EF_RESPAWNGHOST;
+ this.alpha = min(this.alpha, autocvar_g_respawn_ghosts_alpha);
Send_Effect(EFFECT_RESPAWN_GHOST, this.origin, '0 0 0', 1);
- if(autocvar_g_respawn_ghosts_maxtime)
- SUB_SetFade (this, time + autocvar_g_respawn_ghosts_maxtime / 2 + random () * (autocvar_g_respawn_ghosts_maxtime - autocvar_g_respawn_ghosts_maxtime / 2), 1.5);
+ if(autocvar_g_respawn_ghosts_time > 0)
+ SUB_SetFade(this, time + autocvar_g_respawn_ghosts_time, autocvar_g_respawn_ghosts_fadetime);
}
else
SUB_SetFade (this, time, 1); // fade out the corpse immediately
}
CopyBody(this, 1);
+ this.damagedbycontents = damagedbycontents_prev;
this.effects |= EF_NODRAW; // prevent another CopyBody
PutClientInServer(this);
store.ping_movementloss = this.ping_movementloss;
store.v_angle = this.v_angle;
- store.movement = (typing) ? '0 0 0' : this.movement;
+ store.movement = this.movement;
}
NET_HANDLE(fpsreport, bool)
set cl_deathglow 2 "number of seconds during which dead bodies glow out"
set cl_deathglow_min 0.5 "glow out up to this glow factor"
+set cl_respawn_ghosts_keepcolors 0 "if enabled respawn ghosts keep body colors"
+
cl_movement 1
cl_movement_track_canjump 0
cl_stairsmoothspeed 200
set g_respawn_ghosts 1 "if 1 dead bodies become ghosts and float away when the player respawns"
set g_respawn_ghosts_speed 5 "the speed with which respawn ghosts float and rotate"
-set g_respawn_ghosts_maxtime 6 "maximum amount of time a respawn ghost can last, minimum time is half this value. 0 disables and ghosts fade when the body would"
+set g_respawn_ghosts_time 4.5 "amount of time a respawn ghost lasts before it starts fading out. 0 disables and ghosts fade when the body would"
+set g_respawn_ghosts_fadetime 1.5 "amount of time a respawn ghost takes to fade out"
+set g_respawn_ghosts_alpha 1 "respawn ghost alpha"
set sv_gibhealth 100 "Minus health a dead body must have in order to get gibbed"