set g_balance_hagar_reload_time 2
// }}}
// {{{ rocketlauncher
-set g_balance_rocketlauncher_damage 80
-set g_balance_rocketlauncher_edgedamage 40
+set g_balance_rocketlauncher_damage 70
+set g_balance_rocketlauncher_edgedamage 35
set g_balance_rocketlauncher_force 450
set g_balance_rocketlauncher_radius 110
set g_balance_rocketlauncher_speed 1300
set g_balance_rocketlauncher_speedaccel 1300
set g_balance_rocketlauncher_speedstart 1000
set g_balance_rocketlauncher_lifetime 10
-set g_balance_rocketlauncher_refire 1.1
+set g_balance_rocketlauncher_refire 1.2
set g_balance_rocketlauncher_animtime 0.4
set g_balance_rocketlauncher_ammo 4
set g_balance_rocketlauncher_health 30 // 30 // 5 hitpoints above maximum laser value -- this way lasers can't blow it up, but grenadelauncher still can most the time.
set g_balance_rocketlauncher_damageforcescale 1 // low damage force scale so that it can still be affected by other hits, but not so much that it does a 90 degree turn
set g_balance_rocketlauncher_detonatedelay 0.02 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
-set g_balance_rocketlauncher_guiderate 90 // max degrees per second
+set g_balance_rocketlauncher_guiderate 70 // max degrees per second
set g_balance_rocketlauncher_guideratedelay 0.01 // immediate
set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
set g_balance_rocketlauncher_guidedelay 0.2 // delay before guiding kicks in
set g_balance_rocketlauncher_remote_edgedamage 35
set g_balance_rocketlauncher_remote_radius 110
set g_balance_rocketlauncher_remote_force 400
-set g_balance_rocketlauncher_switchdelay_drop 0.2
+set g_balance_rocketlauncher_switchdelay_drop 0.3
set g_balance_rocketlauncher_switchdelay_raise 0.2
set g_balance_rocketlauncher_reload_ammo 0 //default: 25
set g_balance_rocketlauncher_reload_time 2
set g_balance_hagar_reload_time 2
// }}}
// {{{ rocketlauncher
-set g_balance_rocketlauncher_damage 80
-set g_balance_rocketlauncher_edgedamage 40
+set g_balance_rocketlauncher_damage 70
+set g_balance_rocketlauncher_edgedamage 35
set g_balance_rocketlauncher_force 450
set g_balance_rocketlauncher_radius 110
set g_balance_rocketlauncher_speed 1300
set g_balance_rocketlauncher_speedaccel 1300
set g_balance_rocketlauncher_speedstart 1000
set g_balance_rocketlauncher_lifetime 10
-set g_balance_rocketlauncher_refire 1.1
+set g_balance_rocketlauncher_refire 1.2
set g_balance_rocketlauncher_animtime 0.4
set g_balance_rocketlauncher_ammo 4
set g_balance_rocketlauncher_health 30 // 30 // 5 hitpoints above maximum laser value -- this way lasers can't blow it up, but grenadelauncher still can most the time.
set g_balance_rocketlauncher_damageforcescale 1 // low damage force scale so that it can still be affected by other hits, but not so much that it does a 90 degree turn
set g_balance_rocketlauncher_detonatedelay 0.02 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
-set g_balance_rocketlauncher_guiderate 90 // max degrees per second
+set g_balance_rocketlauncher_guiderate 70 // max degrees per second
set g_balance_rocketlauncher_guideratedelay 0.01 // immediate
set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
set g_balance_rocketlauncher_guidedelay 0.2 // delay before guiding kicks in
set g_balance_rocketlauncher_remote_edgedamage 35
set g_balance_rocketlauncher_remote_radius 110
set g_balance_rocketlauncher_remote_force 400
-set g_balance_rocketlauncher_switchdelay_drop 0.2
+set g_balance_rocketlauncher_switchdelay_drop 0.3
set g_balance_rocketlauncher_switchdelay_raise 0.2
set g_balance_rocketlauncher_reload_ammo 0 //default: 25
set g_balance_rocketlauncher_reload_time 2
exec sRGB-disable.cfg
vid_sRGB_fallback 2
r_hdr_glowintensity 1
+// #define Image_LinearFloatFromsRGBFloat(c) (((c) <= 0.04045f) ? (c) * (1.0f / 12.92f) : (float)pow(((c) + 0.055f)*(1.0f/1.055f), 2.4f))
+set rpn_sRGB_to_linear "dup 0.055 add 1.055 div 2.4 pow exch 12.92 div dup 0.0031308 gt when"
+// #define Image_sRGBFloatFromLinearFloat(c) (((c) < 0.0031308f) ? (c) * 12.92f : 1.055f * (float)pow((c), 1.0f/2.4f) - 0.055f)
+set rpn_linear_to_sRGB "dup 1.0 2.4 div pow 1.055 mul 0.055 sub exch 12.92 mul dup 0.04045 ge when"
+
+// -nosRGB to -sRGB sky shader conversion:
+//
+// q3map_sunExt 1 0.6875 0.375 340 25 47 0 16
+// ^^ elevation
+// ^^^ sunlight
+// q3map_skylight 110 3
+// ^^^ skylight
+//
+// With that, do (the last parameter is the ratio of skylight you assume hits
+// the surfaces, about 0.25 for inner surfaces near sky, about 1.00 on
+// terrain):
+// ]skybox_nosRGB_to_sRGB 340 47 110 0.25
+// rpn: still on stack: new_sunlight:
+// rpn: still on stack: 380.464142
+// rpn: still on stack: new_skylight:
+// rpn: still on stack: 9.32523632
+//
+// The equivalent -sRGB shader then will have:
+//
+// q3map_sunExt 1 0.6875 0.375 380.464142 25 47 0 16
+// q3map_skylight 9.32523632 3
+alias skybox_nosRGB_to_sRGB "rpn $3 402.123 $4 div div $rpn_sRGB_to_linear 402.123 $4 div mul /new_skylight: $3 402.123 $4 div div $1 256 div $2 0.017453 mul sin mul add $rpn_sRGB_to_linear $3 402.123 $4 div div $rpn_sRGB_to_linear sub 256 mul $2 0.017453 mul sin div /new_sunlight:"
// these settings determine how much the view is affected by movement/damage
cl_smoothviewheight 0.05 // time of the averaging to the viewheight value so that it creates a smooth transition for crouching and such. 0 for instant transition
set g_playerclip_collisions 1 "0 = disable collision testing against playerclips, might be useful on some defrag maps"
set g_botclip_collisions 1 "0 = disable collision testing against botclips, might be useful on some defrag maps"
-set welcome_message_time 8
-
set g_grappling_hook 0 "let players spawn with the grappling hook which allows them to pull themselves up"
set g_spawn_alloweffects 1 "allow clients to enable spawn point and event effects such as particles and sounds, see cl_spawn_ cvars for more info"
seta scoreboard_accuracy_border_thickness 1 "accuracy stats border thickness"
seta scoreboard_accuracy_doublerows 0 "use two rows instead of one"
seta scoreboard_accuracy_nocolors 0 "don't use colors displaying accuracy stats"
-seta scoreboard_accuracy 0 "show weapon accuracy stats panel on scoreboard; colors can be configured with accuracy_color* cvars"
+seta scoreboard_accuracy 1 "show weapon accuracy stats panel on scoreboard; colors can be configured with accuracy_color* cvars"
seta scoreboard_color_bg_r 0 "red color component of the scoreboard background"
seta scoreboard_color_bg_g 0.4 "green color component of the scoreboard background"
seta scoreboard_color_bg_b 0.6 "blue color component of the scoreboard background"
if(autocvar_hud_panel_healtharmor == 2) // combined health and armor display
{
vector v;
- v = healtharmor_maxdamage(health, armor, armorblockpercent);
+ v = healtharmor_maxdamage(health, armor, armorblockpercent, DEATH_WEAPON);
float x;
x = floor(v_x + 1);
float rpn_getf() { return stof(rpn_get()); }
float rpn_popf() { return stof(rpn_pop()); }
-void rpn_pushf(float f) { return rpn_push(ftos(f)); }
-void rpn_setf(float f) { return rpn_set(ftos(f)); }
+void rpn_pushf(float f) { return rpn_push(sprintf("%.9g", f)); }
+void rpn_setf(float f) { return rpn_set(sprintf("%.9g", f)); }
void GenericCommand_rpn(float request, float argc, string command)
{
f = rpn_popf();
f2 = rpn_getf();
rpn_setf(f2 - f * floor(f2 / f));
+ } else if(rpncmd == "pow" || rpncmd == "**") {
+ f = rpn_popf();
+ rpn_setf(pow(rpn_getf(), f));
+ } else if(rpncmd == "bitand" || rpncmd == "&") {
+ f = rpn_popf();
+ rpn_setf(rpn_getf() & f);
+ } else if(rpncmd == "bitor" || rpncmd == "|") {
+ f = rpn_popf();
+ rpn_setf(rpn_getf() | f);
+ } else if(rpncmd == "bitxor" || rpncmd == "^") {
+ f = rpn_popf();
+ rpn_setf(rpn_getf() ^ f);
+ } else if(rpncmd == "and" || rpncmd == "&&") {
+ f = rpn_popf();
+ rpn_setf(rpn_getf() && f);
+ } else if(rpncmd == "or" || rpncmd == "||") {
+ f = rpn_popf();
+ rpn_setf(rpn_getf() || f);
+ } else if(rpncmd == "xor" || rpncmd == "^^") {
+ f = rpn_popf();
+ rpn_setf(!rpn_getf() != !f);
+ } else if(rpncmd == "bitnot") {
+ rpn_setf(~rpn_popf());
+ } else if(rpncmd == "not") {
+ rpn_setf(!rpn_popf());
} else if(rpncmd == "abs") {
rpn_setf(fabs(rpn_getf()));
} else if(rpncmd == "sgn") {
rpn_setf(floor(rpn_getf()));
} else if(rpncmd == "ceil" || rpncmd == "c") {
rpn_setf(ceil(rpn_getf()));
+ } else if(rpncmd == "exp") {
+ rpn_setf(exp(rpn_getf()));
+ } else if(rpncmd == "log") {
+ rpn_setf(exp(rpn_getf()));
+ } else if(rpncmd == "sin") {
+ rpn_setf(sin(rpn_getf()));
+ } else if(rpncmd == "cos") {
+ rpn_setf(cos(rpn_getf()));
} else if(rpncmd == "max") {
f = rpn_popf();
f2 = rpn_getf();
print(" x x exch --------------------------> x x : swap the top two\n");
print(" /cvarname load --------------------> x : loads a cvar\n");
print(" /cvarname x def -------------------> : writes to a cvar\n");
- print(" f f add|sub|mul|div|mod|max|min ---> f : adds/... two numbers\n");
- print(" f f eq|ne|gt|ge|lt|le -------------> f : compares two numbers\n");
+ print(" f f add|sub|mul|div|mod|pow -------> f : adds/... two numbers\n");
+ print(" f f and|or|xor|bitand|bitor|bitxor > f : logical and bitwise operations\n");
+ print(" f f eq|ne|gt|ge|lt|le|max|min -----> f : compares two numbers\n");
print(" f neg|abs|sgn|rand|floor|ceil------> f : negates/... a number\n");
+ print(" f not|bitnot ----------------------> f : logical and bitwise negation\n");
+ print(" f exp|log|sin|cos -----------------> f : exponential function & Co.\n");
print(" f f f bound -----------------------> f : bounds the middle number\n");
print(" f1 f2 b when ----------------------> f : f1 if b, f2 otherwise\n");
print(" s s union|intersection|difference -> s : set operations\n");
{
MapInfo_Map_flags |= MAPINFO_FLAG_FRUSTRATING;
}
+ else if(t == "noautomaplist")
+ {
+ MapInfo_Map_flags |= MAPINFO_FLAG_NOAUTOMAPLIST;
+ }
else if(t == "type")
{
t = car(s); s = cdr(s);
const float MAPINFO_FLAG_HIDDEN = 1; // not in lsmaps/menu/vcall/etc., can just be changed to manually
const float MAPINFO_FLAG_FORBIDDEN = 2; // don't even allow the map by a cvar setting that allows hidden maps
const float MAPINFO_FLAG_FRUSTRATING = 4; // this map is near impossible to play, enable at your own risk
+const float MAPINFO_FLAG_NOAUTOMAPLIST = 8; // do not include when automatically building maplist (counts as hidden for maplist building purposes)
float MapInfo_count;
}
}
-vector healtharmor_maxdamage(float h, float a, float armorblock)
+#ifndef MENUQC
+vector healtharmor_maxdamage(float h, float a, float armorblock, float deathtype)
{
// NOTE: we'll always choose the SMALLER value...
float healthdamage, armordamage, armorideal;
+ if (deathtype == DEATH_DROWN) // Why should armor help here...
+ armorblock = 0;
vector v;
healthdamage = (h - 1) / (1 - armorblock); // damage we can take if we could use more health
armordamage = a + (h - 1); // damage we can take if we could use more armor
return v;
}
-vector healtharmor_applydamage(float a, float armorblock, float damage)
+vector healtharmor_applydamage(float a, float armorblock, float deathtype, float damage)
{
vector v;
+ if (deathtype == DEATH_DROWN) // Why should armor help here...
+ armorblock = 0;
v_y = bound(0, damage * armorblock, a); // save
v_x = bound(0, damage - v_y, damage); // take
v_z = 0;
return v;
}
+#endif
string getcurrentmod()
{
void RandomSelection_Init();
void RandomSelection_Add(entity e, float f, string s, float weight, float priority);
-vector healtharmor_maxdamage(float h, float a, float armorblock); // returns vector: maxdamage, armorideal, 1 if fully armored
-vector healtharmor_applydamage(float a, float armorblock, float damage); // returns vector: take, save, 0
+#ifndef MENUQC
+vector healtharmor_maxdamage(float h, float a, float armorblock, float deathtype); // returns vector: maxdamage, armorideal, 1 if fully armored
+vector healtharmor_applydamage(float a, float armorblock, float deathtype, float damage); // returns vector: take, save, 0
+#endif
string getcurrentmod();
s = strcat(s, ", ", WeaponArenaString());
if(cvar("g_start_weapon_laser") == 0)
s = strcat(s, ", ", _("No start weapons"));
- if(cvar("sv_gravity") < 800)
+ if(cvar("sv_gravity") < stof(cvar_defstring("sv_gravity")))
s = strcat(s, ", ", _("Low gravity"));
if(cvar("g_cloaked"))
s = strcat(s, ", ", _("Cloaked"));
float autocvar_timelimit_suddendeath;
#define autocvar_utf8_enable cvar("utf8_enable")
float autocvar_waypoint_benchmark;
-float autocvar_welcome_message_time;
float autocvar_sv_gameplayfix_gravityunaffectedbyticrate;
float autocvar_g_trueaim_minrange;
float autocvar_g_debug_defaultsounds;
n = tokenize_console(defaultmodel);
if(n > 0)
+ {
defaultmodel = argv(floor(n * self.model_randomizer));
+ // However, do NOT randomize if the player-selected model is in the list.
+ for (i = 0; i < n; ++i)
+ if ((argv(i) == self.playermodel && defaultskin == stof(self.playerskin)) || argv(i) == strcat(self.playermodel, ":", self.playerskin))
+ defaultmodel = argv(i);
+ }
i = strstrofs(defaultmodel, ":", 0);
if(i >= 0)
{
if(self.BUTTON_INFO) // BUTTON_INFO hides initial MOTD
self.motd_actived_time = -2; // wait until BUTTON_INFO gets released
- else if(self.motd_actived_time == -2 || IS_PLAYER(self) || time - self.jointime > autocvar_welcome_message_time)
+ else if(self.motd_actived_time == -2 || IS_PLAYER(self))
{
// instanctly hide MOTD
self.motd_actived_time = 0;
//pointparticles(particleeffectnum("machinegun_impact"), self.origin + self.view_ofs + '0 0 7', '0 0 0', 1);
if(self.waypointsprite_attachedforcarrier)
- WaypointSprite_UpdateHealth(self.waypointsprite_attachedforcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, autocvar_g_balance_armor_blockpercent));
+ WaypointSprite_UpdateHealth(self.waypointsprite_attachedforcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON));
playerdemo_write();
// damage resistance (ignore most of the damage from a bullet or similar)
damage = max(damage - 5, 1);
- v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, damage);
+ v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, deathtype, damage);
take = v_x;
save = v_y;
Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker);
- v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, damage);
+ v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, deathtype, damage);
take = v_x;
save = v_y;
e.csqcprojectile_type = type;
}
+// FIXME HACK
+float ItemSend(entity to, float sf);
+void ItemUpdate(entity item);
+// END HACK
void UpdateCSQCProjectile(entity e)
{
if(e.SendEntity == CSQCProjectile_SendEntity)
// send new origin data
e.SendFlags |= 0x01;
}
+// FIXME HACK
+ else if(e.SendEntity == ItemSend)
+ {
+ ItemUpdate(e);
+ }
+// END HACK
}
void UpdateCSQCProjectileAfterTeleport(entity e)
if(autocvar_g_mirrordamage_virtual)
{
- vector v = healtharmor_applydamage(attacker.armorvalue, autocvar_g_balance_armor_blockpercent, mirrordamage);
+ vector v = healtharmor_applydamage(attacker.armorvalue, autocvar_g_balance_armor_blockpercent, deathtype, mirrordamage);
attacker.dmg_take += v_x;
attacker.dmg_save += v_y;
attacker.dmg_inflictor = inflictor;
if(autocvar_g_friendlyfire_virtual)
{
- vector v = healtharmor_applydamage(targ.armorvalue, autocvar_g_balance_armor_blockpercent, damage);
+ vector v = healtharmor_applydamage(targ.armorvalue, autocvar_g_balance_armor_blockpercent, deathtype, damage);
targ.dmg_take += v_x;
targ.dmg_save += v_y;
targ.dmg_inflictor = inflictor;
BADCVAR("sv_fraginfo");
BADCVAR("sv_timeout");
BADPREFIX("sv_timeout_");
- BADCVAR("welcome_message_time");
BADPREFIX("crypto_");
BADPREFIX("g_chat_");
BADPREFIX("g_ctf_captimerecord_");
{
float pass, i;
+ dprint("Trying MaplistMethod_Iterate\n");
+
for(pass = 1; pass <= 2; ++pass)
{
for(i = 1; i < Map_Count; ++i)
float() MaplistMethod_Repeat = // fallback method
{
+ dprint("Trying MaplistMethod_Repeat\n");
+
if(Map_Check(Map_Current, 2))
return Map_Current;
return -2;
{
float i, imax;
+ dprint("Trying MaplistMethod_Random\n");
+
imax = 42;
for(i = 0; i <= imax; ++i)
{
float i, j, imax, insertpos;
+ dprint("Trying MaplistMethod_Shuffle\n");
+
imax = 42;
for(i = 0; i <= imax; ++i)
void Maplist_Init()
{
Map_Count = tokenizebyseparator(autocvar_g_maplist, " ");
- if(Map_Count == 0)
+ float i;
+ for (i = 0; i < Map_Count; ++i)
+ if (Map_Check(i, 2))
+ break;
+ if (i == Map_Count)
{
- bprint( "Maplist is empty! Resetting it to default map list.\n" );
- cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
+ bprint( "Maplist contains no usable maps! Resetting it to default map list.\n" );
+ cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags() | MAPINFO_FLAG_NOAUTOMAPLIST));
if(autocvar_g_maplist_shuffle)
ShuffleMaplist();
localcmd("\nmenu_cmd sync\n");
return;
alreadychangedlevel = TRUE;
- {
- string nextMap;
- float allowReset;
+ string nextMap;
- for(allowReset = 1; allowReset >= 0; --allowReset)
- {
- nextMap = GetNextMap();
- if(nextMap != "")
- break;
-
- if(allowReset)
- {
- bprint( "Maplist contains no single playable map! Resetting it to default map list.\n" );
- cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
- if(autocvar_g_maplist_shuffle)
- ShuffleMaplist();
- localcmd("\nmenu_cmd sync\n");
- }
- else
- {
- error("Everything is broken - not even the default map list works. Please report this to the developers.");
- }
- }
- Map_Goto(reinit);
- }
+ nextMap = GetNextMap();
+ if(nextMap == "")
+ error("Everything is broken - cannot find a next map. Please report this to the developers.");
+ Map_Goto(reinit);
}
void ctf_FlagcarrierWaypoints(entity player)
{
WaypointSprite_Spawn("flagcarrier", 0, 0, player, FLAG_WAYPOINT_OFFSET, world, player.team, player, wps_flagcarrier, TRUE, RADARICON_FLAG, WPCOLOR_FLAGCARRIER(player.team));
- WaypointSprite_UpdateMaxHealth(player.wps_flagcarrier, '1 0 0' * healtharmor_maxdamage(start_health, start_armorvalue, autocvar_g_balance_armor_blockpercent) * 2);
- WaypointSprite_UpdateHealth(player.wps_flagcarrier, '1 0 0' * healtharmor_maxdamage(player.health, player.armorvalue, autocvar_g_balance_armor_blockpercent));
+ WaypointSprite_UpdateMaxHealth(player.wps_flagcarrier, '1 0 0' * healtharmor_maxdamage(start_health, start_armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON) * 2);
+ WaypointSprite_UpdateHealth(player.wps_flagcarrier, '1 0 0' * healtharmor_maxdamage(player.health, player.armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON));
WaypointSprite_UpdateTeamRadar(player.wps_flagcarrier, RADARICON_FLAGCARRIER, WPCOLOR_FLAGCARRIER(player.team));
}
// update the health of the flag carrier waypointsprite
if(self.wps_flagcarrier)
- WaypointSprite_UpdateHealth(self.wps_flagcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, autocvar_g_balance_armor_blockpercent));
+ WaypointSprite_UpdateHealth(self.wps_flagcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON));
return FALSE;
}
}
else if(frag_target.flagcarried && (frag_target.deadflag == DEAD_NO) && DIFF_TEAM(frag_target, frag_attacker)) // if the target is a flagcarrier
{
- if(autocvar_g_ctf_flagcarrier_auto_helpme_damage > ('1 0 0' * healtharmor_maxdamage(frag_target.health, frag_target.armorvalue, autocvar_g_balance_armor_blockpercent)))
+ if(autocvar_g_ctf_flagcarrier_auto_helpme_damage > ('1 0 0' * healtharmor_maxdamage(frag_target.health, frag_target.armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON)))
if(time > frag_target.wps_helpme_time + autocvar_g_ctf_flagcarrier_auto_helpme_time)
{
frag_target.wps_helpme_time = time;
return TRUE;
}
+void ItemUpdate(entity item)
+{
+ item.SendFlags |= ISF_LOCATION;
+}
float have_pickup_item(void)
{
e = WaypointSprite_Spawn(spr, 0, 0, carrier, '0 0 64', world, carrier.team, carrier, waypointsprite_attachedforcarrier, FALSE, icon, rgb);
if(e)
{
- WaypointSprite_UpdateMaxHealth(e, '1 0 0' * healtharmor_maxdamage(start_health, start_armorvalue, autocvar_g_balance_armor_blockpercent) * 2);
- WaypointSprite_UpdateHealth(e, '1 0 0' * healtharmor_maxdamage(carrier.health, carrier.armorvalue, autocvar_g_balance_armor_blockpercent));
+ WaypointSprite_UpdateMaxHealth(e, '1 0 0' * healtharmor_maxdamage(start_health, start_armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON) * 2);
+ WaypointSprite_UpdateHealth(e, '1 0 0' * healtharmor_maxdamage(carrier.health, carrier.armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON));
}
return e;
}