From: Rudolf Polzer Date: Fri, 16 Dec 2011 15:48:38 +0000 (+0100) Subject: Merge remote-tracking branch 'origin/divVerent/csqcmodel' X-Git-Tag: xonotic-v0.6.0~74^2~100 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=7548b068fae6d831133281ff225280eca61be97d;hp=afc13caf824c2a865812bc893856eea9808d036d Merge remote-tracking branch 'origin/divVerent/csqcmodel' --- diff --git a/balanceXonotic.cfg b/balanceXonotic.cfg index e3c0ecff4..4d893d609 100644 --- a/balanceXonotic.cfg +++ b/balanceXonotic.cfg @@ -282,7 +282,7 @@ set g_balance_shotgun_secondary_melee_traces 10 set g_balance_shotgun_secondary_melee_no_doubleslap 1 set g_balance_shotgun_secondary_melee_nonplayerdamage 40 set g_balance_shotgun_secondary_melee_multihit 1 -set g_balance_shotgun_secondary_damage 100 +set g_balance_shotgun_secondary_damage 70 set g_balance_shotgun_secondary_force 200 set g_balance_shotgun_secondary_refire 1.25 set g_balance_shotgun_secondary_animtime 1 @@ -445,16 +445,16 @@ set g_balance_crylink_primary_damage 10 set g_balance_crylink_primary_edgedamage 5 set g_balance_crylink_primary_force -55 set g_balance_crylink_primary_radius 80 -set g_balance_crylink_primary_speed 1800 -set g_balance_crylink_primary_spread 0.075 -set g_balance_crylink_primary_shots 7 +set g_balance_crylink_primary_speed 2000 +set g_balance_crylink_primary_spread 0.08 +set g_balance_crylink_primary_shots 6 set g_balance_crylink_primary_bounces 1 set g_balance_crylink_primary_refire 0.7 set g_balance_crylink_primary_animtime 0.3 set g_balance_crylink_primary_ammo 3 set g_balance_crylink_primary_bouncedamagefactor 0.5 -set g_balance_crylink_primary_joindelay 0 -set g_balance_crylink_primary_joinspread 0.4 +set g_balance_crylink_primary_joindelay 0.1 +set g_balance_crylink_primary_joinspread 0.2 set g_balance_crylink_primary_jointime 0 set g_balance_crylink_primary_joinexplode 1 set g_balance_crylink_primary_joinexplode_damage 0 diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index 87076513d..2db0a5534 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -500,12 +500,9 @@ set g_shootfromfixedorigin "" "if set to a string like 0 y z, the gun is moved t set g_pinata 0 "if set to 1 you will not only drop your current weapon when you are killed, but you will drop all weapons that you possessed" set g_weapon_stay 0 "if set to 1 or 2, weapons stay after they were picked up (1: weapons you don't have yet give you ammo of their type and they can not be dropped, 2: weapons don't give ammo, but instead players start with one pickup-load of ammo by default, 3: weapons give ammo, weapons only stay as ammo-less ghosts)" set g_weapon_throwable 1 "if set to 1, weapons can be dropped" -set g_powerup_superhealth 1 "if set to 0 the mega health powerup will not spawn on the map" -set g_powerup_strength 1 "if set to 0 the strength powerup will not spawn on the map" -set g_powerup_shield 1 "if set to 0 the shield (invincibility) powerup will not spawn on the map" -set g_balance_powerup_timer 1 "if set to 0 the powerups dont wear off" +set g_powerups -1 "if set to 0 the strength and shield (invincibility) will not spawn on the map, if 1 they will spawn in all game modes, -1 is game mode default" set g_use_ammunition 1 "if set to 0 all weapons have unlimited ammunition" -set g_pickup_items 1 "if set to 0 all items (health, armor, ammo, weapons...) are removed from the map" +set g_pickup_items -1 "if set to 0 all items (health, armor, ammo, weapons...) are removed from the map, if 1 they are forced to spawn" set g_minstagib 0 "enable minstagib" set g_minstagib_extralives 2 "how many extra lives you will get per powerup" set g_minstagib_ammo_start 10 "starting ammo" @@ -838,7 +835,6 @@ set g_arena 0 "Arena: many one-on-one rounds are played to find the winner" set g_arena_maxspawned 2 "maximum number of players to spawn at once (the rest is spectating, waiting for their turn)" set g_arena_roundbased 1 "if disabled, the next player will spawn as soon as someone dies" set g_arena_warmup 5 "time, newly spawned players have to prepare themselves in round based matches" -set g_arena_powerups 0 "enables powerups (superhealth, strength and shield), which are removed by default" // ca set g_ca 0 "Clan Arena: Played in rounds, once you're dead you're out! The team with survivors wins the round." diff --git a/effectinfo.txt b/effectinfo.txt index 07061642b..0d464f5f7 100644 --- a/effectinfo.txt +++ b/effectinfo.txt @@ -1219,7 +1219,7 @@ stretchfactor 2.5 -// hagar trail +// mortar trail // smoke // used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_GRENADE"), from, to) // used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_GRENADE"), from, to) @@ -1265,7 +1265,7 @@ velocityjitter 16 16 16 -// mortar trail +// hookbomb trail // smoke // used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), from, to) // used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), from, to) @@ -6644,3 +6644,45 @@ velocityjitter 96 96 96 velocitymultiplier 5 staincolor 0x808080 0x808080 staintex 16 24 + +// hagar trail +// smoke +effect tr_hagar +trailspacing 4 +type smoke +color 0x101010 0x000000 +tex 0 8 +size 3 2 +bounce 1 +sizeincrease 10 +alpha 300 400 780 +originjitter 1 1 1 +velocityjitter 1 1 1 +velocitymultiplier -0.02 +//gravity -0.11 +// fire +effect tr_hagar +notunderwater +trailspacing 4 +type static +color 0xffdf72 0x811200 +tex 48 55 +size 5 2 +sizeincrease -15 +alpha 100 144 988 +airfriction 8 +velocityjitter 32 32 32 +velocitymultiplier -1.0 +// bubbles +effect tr_hagar +underwater +trailspacing 16 +type bubble +tex 62 62 +color 0x404040 0x808080 +size 1 1 +alpha 256 256 256 +gravity -0.125 +bounce 1.5 +liquidfriction 4 +velocityjitter 16 16 16 diff --git a/menu.dat.es.po b/menu.dat.es.po index 47ba9ac19..65636cfcc 100644 --- a/menu.dat.es.po +++ b/menu.dat.es.po @@ -8,7 +8,8 @@ msgstr "" "Project-Id-Version: Xonotic 0.1preview\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-09-02 07:51+0200\n" -"Last-Translator: Rodrigo Mouton Laudin \n" +"Author: Rodrigo Mouton Laudin \n" +"Last-Translator: mand1nga \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/qcsrc/client/projectile.qc b/qcsrc/client/projectile.qc index e8274c8cd..426ef7825 100644 --- a/qcsrc/client/projectile.qc +++ b/qcsrc/client/projectile.qc @@ -289,8 +289,8 @@ void Ent_Projectile() case PROJECTILE_PORTO_RED: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_WIZSPIKE"); self.scale = 4; break; case PROJECTILE_PORTO_BLUE: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_WIZSPIKE"); self.scale = 4; break; case PROJECTILE_HOOKBOMB: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_KNIGHTSPIKE"); break; - case PROJECTILE_HAGAR: setmodel(self, "models/hagarmissile.mdl");self.traileffect = particleeffectnum("TR_GRENADE"); self.scale = 0.75; break; - case PROJECTILE_HAGAR_BOUNCING: setmodel(self, "models/hagarmissile.mdl");self.traileffect = particleeffectnum("TR_GRENADE"); self.scale = 0.75; break; + case PROJECTILE_HAGAR: setmodel(self, "models/hagarmissile.mdl");self.traileffect = particleeffectnum("tr_hagar"); self.scale = 0.75; break; + case PROJECTILE_HAGAR_BOUNCING: setmodel(self, "models/hagarmissile.mdl");self.traileffect = particleeffectnum("tr_hagar"); self.scale = 0.75; break; case PROJECTILE_FIREBALL: self.model = ""; self.modelindex = 0; self.traileffect = particleeffectnum("fireball"); break; // particle effect is good enough case PROJECTILE_FIREMINE: self.model = ""; self.modelindex = 0; self.traileffect = particleeffectnum("firemine"); break; // particle effect is good enough case PROJECTILE_TAG: setmodel(self, "models/laser.mdl"); self.traileffect = particleeffectnum("TR_ROCKET"); break; diff --git a/qcsrc/dpdefs/menudefs.qc b/qcsrc/dpdefs/menudefs.qc index 0a7bd6ae4..4b56257a0 100644 --- a/qcsrc/dpdefs/menudefs.qc +++ b/qcsrc/dpdefs/menudefs.qc @@ -16,7 +16,7 @@ void end_sys_fields; void() m_init; void(float keynr, float ascii) m_keydown; void() m_draw; -void() m_toggle; +void(float mode) m_toggle; void() m_shutdown; ///////////////////////////////////////////////////////// diff --git a/qcsrc/menu/menu.qc b/qcsrc/menu/menu.qc index f5c0f6da5..2b0a636bb 100644 --- a/qcsrc/menu/menu.qc +++ b/qcsrc/menu/menu.qc @@ -819,12 +819,20 @@ void m_hide() main.hideNotify(main); } -void m_toggle() +void m_toggle(float mode) { if(Menu_Active) + { + if (mode == 1) + return; m_hide(); + } else + { + if (mode == 0) + return; m_display(); + } } void m_shutdown() diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c b/qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c index 2711c57e7..7133eb67f 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c @@ -96,6 +96,10 @@ string XonoticMutatorsDialog_toString(entity me) s = strcat(s, ", ", _("Blood loss")); if(cvar("g_jetpack")) s = strcat(s, ", ", _("Jet pack")); + if(cvar("g_powerups") == 0) + s = strcat(s, ", ", _("No powerups")); + if(cvar("g_powerups") > 0) + s = strcat(s, ", ", _("Powerups")); if(s == "") return ZCTX(_("MUT^None")); else diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index c210f848a..c6c29817a 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -73,7 +73,6 @@ float autocvar_g_antilag_nudge; float autocvar_g_arena_maxspawned; float autocvar_g_arena_point_leadlimit; float autocvar_g_arena_point_limit; -float autocvar_g_arena_powerups; float autocvar_g_arena_roundbased; float autocvar_g_arena_warmup; float autocvar_g_assault; @@ -566,7 +565,6 @@ float autocvar_g_balance_powerup_strength_force; float autocvar_g_balance_powerup_strength_selfdamage; float autocvar_g_balance_powerup_strength_selfforce; float autocvar_g_balance_powerup_strength_time; -float autocvar_g_balance_powerup_timer; float autocvar_g_balance_rocketlauncher_ammo; float autocvar_g_balance_rocketlauncher_animtime; float autocvar_g_balance_rocketlauncher_damage; @@ -924,9 +922,7 @@ float autocvar_g_player_alpha; float autocvar_g_player_brightness; float autocvar_g_playerclip_collisions; string autocvar_g_playerstats_uri; -float autocvar_g_powerup_shield; -float autocvar_g_powerup_strength; -float autocvar_g_powerup_superhealth; +float autocvar_g_powerups; float autocvar_g_projectiles_damage; float autocvar_g_projectiles_newton_style; float autocvar_g_projectiles_newton_style_2_maxfactor; diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 171fcf35b..d34a0c287 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -1852,7 +1852,7 @@ void player_powerups (void) if (self.items & IT_INVINCIBLE) { play_countdown(self.invincible_finished, "misc/poweroff.wav"); - if (time > self.invincible_finished && autocvar_g_balance_powerup_timer) + if (time > self.invincible_finished) { self.items = self.items - (self.items & IT_INVINCIBLE); sprint(self, "^3Speed has worn off\n"); @@ -1873,7 +1873,7 @@ void player_powerups (void) { play_countdown(self.strength_finished, "misc/poweroff.wav"); self.effects = self.effects | (EF_BLUE | EF_ADDITIVE | EF_FULLBRIGHT); - if (time > self.strength_finished && autocvar_g_balance_powerup_timer) + if (time > self.strength_finished) { self.items = self.items - (self.items & IT_STRENGTH); sprint(self, "^3Strength has worn off\n"); @@ -1891,7 +1891,7 @@ void player_powerups (void) { play_countdown(self.invincible_finished, "misc/poweroff.wav"); self.effects = self.effects | (EF_RED | EF_ADDITIVE | EF_FULLBRIGHT); - if (time > self.invincible_finished && autocvar_g_balance_powerup_timer) + if (time > self.invincible_finished) { self.items = self.items - (self.items & IT_INVINCIBLE); sprint(self, "^3Shield has worn off\n"); diff --git a/qcsrc/server/clientcommands.qc b/qcsrc/server/clientcommands.qc index b62f34f23..7f52f8f8c 100644 --- a/qcsrc/server/clientcommands.qc +++ b/qcsrc/server/clientcommands.qc @@ -278,25 +278,33 @@ void SV_ParseClientCommand(string s) { } else if(lockteams) { sprint( self, "^7The game has already begun, you must wait until the next map to be able to join a team.\n"); } else if( argv(1) == "red" ) { - if(self.team != COLOR_TEAM1 || self.deadflag != DEAD_NO) - ClientKill_TeamChange(COLOR_TEAM1); - else + if(self.team == COLOR_TEAM1 && self.deadflag == DEAD_NO) sprint( self, "^7You already are on that team.\n"); - } else if( argv(1) == "blue" ) { - if(self.team != COLOR_TEAM2 || self.deadflag != DEAD_NO) - ClientKill_TeamChange(COLOR_TEAM2); + else if (self.wasplayer && autocvar_g_changeteam_banned) + sprint( self, "^1You cannot change team, forbidden by the server.\n"); else + ClientKill_TeamChange(COLOR_TEAM1); + } else if( argv(1) == "blue" ) { + if(self.team == COLOR_TEAM2 && self.deadflag == DEAD_NO) sprint( self, "^7You already are on that team.\n"); - } else if( argv(1) == "yellow" ) { - if(self.team != COLOR_TEAM3 || self.deadflag != DEAD_NO) - ClientKill_TeamChange(COLOR_TEAM3); + else if (self.wasplayer && autocvar_g_changeteam_banned) + sprint( self, "^1You cannot change team, forbidden by the server.\n"); else + ClientKill_TeamChange(COLOR_TEAM2); + } else if( argv(1) == "yellow" ) { + if(self.team == COLOR_TEAM3 && self.deadflag == DEAD_NO) sprint( self, "^7You already are on that team.\n"); - } else if( argv(1) == "pink" ) { - if(self.team != COLOR_TEAM4 || self.deadflag != DEAD_NO) - ClientKill_TeamChange(COLOR_TEAM4); + else if (self.wasplayer && autocvar_g_changeteam_banned) + sprint( self, "^1You cannot change team, forbidden by the server.\n"); else + ClientKill_TeamChange(COLOR_TEAM3); + } else if( argv(1) == "pink" ) { + if(self.team == COLOR_TEAM4 && self.deadflag == DEAD_NO) sprint( self, "^7You already are on that team.\n"); + else if (self.wasplayer && autocvar_g_changeteam_banned) + sprint( self, "^1You cannot change team, forbidden by the server.\n"); + else + ClientKill_TeamChange(COLOR_TEAM4); } else if( argv(1) == "auto" ) { ClientKill_TeamChange(-1); } else { diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index 79641ed70..bf89111c7 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -410,10 +410,10 @@ void cvar_changes_init() // :%s,//\([^ ]*\).*,BADCVAR("\1");, // :%!sort // yes, this does contain some redundant stuff, don't really care + BADCVAR("bot_config_file"); BADCVAR("bot_number"); BADCVAR("bot_prefix"); BADCVAR("bot_suffix"); - BADCVAR("bot_config_file"); BADCVAR("capturelimit_override"); BADCVAR("fraglimit_override"); BADCVAR("gametype"); @@ -444,6 +444,7 @@ void cvar_changes_init() BADCVAR("g_minstagib"); BADCVAR("g_mirrordamage"); BADCVAR("g_nexball_goallimit"); + BADCVAR("g_powerups"); BADCVAR("g_runematch_point_limit"); BADCVAR("g_start_delay"); BADCVAR("g_warmup"); @@ -460,6 +461,7 @@ void cvar_changes_init() BADCVAR("skill"); BADCVAR("sv_adminnick"); BADCVAR("sv_autoscreenshot"); + BADCVAR("sv_autotaunt"); BADCVAR("sv_curl_defaulturl"); BADCVAR("sv_defaultcharacter"); BADCVAR("sv_defaultplayercolors"); @@ -471,6 +473,7 @@ void cvar_changes_init() BADCVAR("sv_public"); BADCVAR("sv_ready_restart"); BADCVAR("sv_status_privacy"); + BADCVAR("sv_taunt"); BADCVAR("sv_vote_call"); BADCVAR("sv_vote_commands"); BADCVAR("sv_vote_majority_factor"); @@ -482,6 +485,7 @@ void cvar_changes_init() BADCVAR("teamplay_mode"); BADCVAR("timelimit_override"); BADPREFIX("g_warmup_"); + BADPREFIX("sv_ready_restart_"); if(autocvar_g_minstagib) { @@ -743,8 +747,10 @@ void spawnfunc_worldspawn (void) s = strcat(s, ":no_use_ammunition"); // initialiation stuff, not good in the mutator system - if(!autocvar_g_pickup_items) + if(autocvar_g_pickup_items == 0) s = strcat(s, ":no_pickup_items"); + if(autocvar_g_pickup_items > 0) + s = strcat(s, ":pickup_items"); // initialiation stuff, not good in the mutator system if(autocvar_g_weaponarena != "0") @@ -762,6 +768,12 @@ void spawnfunc_worldspawn (void) if(autocvar_g_minstagib) s = strcat(s, ":minstagib"); + // TODO to mutator system + if(autocvar_g_powerups == 0) + s = strcat(s, ":no_powerups"); + if(autocvar_g_powerups > 0) + s = strcat(s, ":powerups"); + GameLogEcho(s); GameLogEcho(":gameinfo:end"); } diff --git a/qcsrc/server/t_items.qc b/qcsrc/server/t_items.qc index f7a8d2aec..9a8ac7123 100644 --- a/qcsrc/server/t_items.qc +++ b/qcsrc/server/t_items.qc @@ -1,3 +1,40 @@ +float have_pickup_item(void) +{ + // minstagib: only allow filtered items + if(g_minstagib) + if(self.classname != "minstagib") + return FALSE; + + if(self.items == IT_STRENGTH || self.items == IT_INVINCIBLE) + { + if(autocvar_g_powerups > 0) + return TRUE; + if(autocvar_g_powerups == 0) + return FALSE; + if(g_lms) + return FALSE; + if(g_ca) + return FALSE; + if(g_arena) + return FALSE; + } + else + { + if(autocvar_g_pickup_items > 0) + return TRUE; + if(autocvar_g_pickup_items == 0) + return FALSE; + if(g_lms) + return FALSE; + if(g_ca) + return FALSE; + if(g_weaponarena) + if((self.weapons & WEPBIT_ALL) || (self.items & IT_AMMO)) + return FALSE; + } + return TRUE; +} + #define ITEM_RESPAWN_TICKS 10 #define ITEM_RESPAWNTIME(i) ((i).respawntime + crandom() * (i).respawntimejitter) @@ -707,6 +744,13 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, return; } + if(!have_pickup_item()) + { + startitem_failed = TRUE; + remove (self); + return; + } + self.reset = Item_Reset; // it's a level item if(self.spawnflags & 1) @@ -759,35 +803,6 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime, self.is_item = TRUE; } - if(g_lms || g_ca) - { - startitem_failed = TRUE; - remove(self); - return; - } - else if (g_weaponarena && ((weaponid & WEPBIT_ALL) || (itemid & IT_AMMO))) - { - startitem_failed = TRUE; - remove(self); - return; - } - else if (g_minstagib) - { - // don't remove dropped items and powerups - if (self.classname != "minstagib") - { - startitem_failed = TRUE; - remove (self); - return; - } - } - else if (!autocvar_g_pickup_items && itemid != IT_STRENGTH && itemid != IT_INVINCIBLE && itemid != IT_HEALTH) - { - startitem_failed = TRUE; - remove (self); - return; - } - weaponsInMap |= weaponid; precache_model (itemmodel); @@ -1220,12 +1235,6 @@ void spawnfunc_item_health_large (void) { } void spawnfunc_item_health_mega (void) { - if(!autocvar_g_powerup_superhealth) - return; - - if((g_arena || g_ca) && !autocvar_g_arena_powerups) - return; - if(g_minstagib) { minstagib_items(IT_NAILS); } else { @@ -1247,12 +1256,6 @@ void spawnfunc_item_health25() { spawnfunc_item_health_medium(); } void spawnfunc_item_health100() { spawnfunc_item_health_mega(); } void spawnfunc_item_strength (void) { - if(!autocvar_g_powerup_strength) - return; - - if((g_arena || g_ca) && !autocvar_g_arena_powerups) - return; - if(g_minstagib) { minstagib_items(IT_STRENGTH); } else { @@ -1263,12 +1266,6 @@ void spawnfunc_item_strength (void) { } void spawnfunc_item_invincible (void) { - if(!autocvar_g_powerup_shield) - return; - - if((g_arena || g_ca) && !autocvar_g_arena_powerups) - return; - if(g_minstagib) { minstagib_items(IT_INVINCIBLE); } else { diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index 3d65d760d..66e909eec 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -478,6 +478,10 @@ string getwelcomemessage(void) modifications = strcat(modifications, ", Blood loss"); if(g_jetpack) modifications = strcat(modifications, ", Jet pack"); + if(autocvar_g_powerups == 0) + modifications = strcat(modifications, ", No powerups"); + if(autocvar_g_powerups > 0) + modifications = strcat(modifications, ", Powerups"); modifications = substring(modifications, 2, strlen(modifications) - 2); string versionmessage; diff --git a/qcsrc/server/waypointsprites.qc b/qcsrc/server/waypointsprites.qc index 0e62df7cb..0e6f2168b 100644 --- a/qcsrc/server/waypointsprites.qc +++ b/qcsrc/server/waypointsprites.qc @@ -241,7 +241,7 @@ float WaypointSprite_Customize() // 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(g_minstagib && (self.owner.flags & FL_CLIENT) && (self.owner.items & IT_STRENGTH) && (e == other)) { if(!WaypointSprite_isteammate(self.owner, e)) return FALSE;