68 if(this.
enemy.classname ==
"onslaught_generator")
83 entity shield =
new(ons_captureshield);
87 shield.team = this.
team;
95 shield.avelocity =
'7 0 11';
96 shield.scale = this.
scale;
98 float shield_extra_size = 1.20;
99 setorigin(shield, this.
origin);
101 setsize(shield, shield_extra_size * this.
mins, shield_extra_size * this.
maxs);
121 l.islinked = l.iscaptured;
122 l.isshielded = l.iscaptured;
123 l.sprite.SendFlags |= 16;
130 l.aregensneighbor = 0;
131 l.arecpsneighbor = 0;
133 l.sprite.SendFlags |= 16;
144 if (l.enemy.iscaptured && l.goalentity.iscaptured)
145 if (l.enemy.islinked != l.goalentity.islinked)
148 if (!l.goalentity.islinked)
151 l.goalentity.islinked =
true;
152 LOG_DEBUG(
etos(l),
" (link) is marking ",
etos(l.goalentity),
" (point) because its team matches ",
etos(l.enemy),
" (point)");
154 else if (!l.enemy.islinked)
157 l.enemy.islinked =
true;
158 LOG_DEBUG(
etos(l),
" (link) is marking ",
etos(l.enemy),
" (point) because its team matches ",
etos(l.goalentity),
" (point)");
167 if (l.goalentity.islinked)
171 LOG_DEBUG(
etos(l),
" (link) is unshielding ",
etos(l.enemy),
" (point) because its team does not match ",
etos(l.goalentity),
" (point)");
172 l.enemy.isshielded =
false;
174 if(l.goalentity.classname ==
"onslaught_generator")
175 l.enemy.aregensneighbor |=
BIT(l.goalentity.team);
177 l.enemy.arecpsneighbor |=
BIT(l.goalentity.team);
179 if (l.enemy.islinked)
183 LOG_DEBUG(
etos(l),
" (link) is unshielding ",
etos(l.goalentity),
" (point) because its team does not match ",
etos(l.enemy),
" (point)");
184 l.goalentity.isshielded =
false;
186 if(l.enemy.classname ==
"onslaught_generator")
187 l.goalentity.aregensneighbor |=
BIT(l.enemy.team);
189 l.goalentity.arecpsneighbor |=
BIT(l.enemy.team);
201 l.bot_attack =
false;
223 if(l.goalentity.bot_attack)
225 l.goalentity.bot_attack =
false;
234 if(!l.goalentity.bot_attack)
236 l.goalentity.bot_attack =
true;
243 it.team = it.enemy.team;
244 it.colormap = it.enemy.colormap;
275 float cc = 0, cc1 = 0, cc2 = 0;
277 if(this.
goalentity.islinked ||
this.goalentity.iscaptured) { cc1 = (this.
goalentity.team - 1) * 0x01; }
278 if(this.
enemy.islinked ||
this.enemy.iscaptured) { cc2 = (this.
enemy.team - 1) * 0x10; }
296 if(!this.
enemy) {
objerror(
this,
"can not find target2\n"); }
311 if(cp.aregensneighbor &
BIT(teamnum))
return 2;
312 if(cp.arecpsneighbor &
BIT(teamnum))
return 1;
333 else if(cp.goalentity)
336 if(cp.team == teamnum)
367 if(damage <= 0) {
return; }
369 if (this.
owner.isshielded)
375 play2(attacker,
SND(ONS_DAMAGEBLOCKEDBYSHIELD));
377 attacker.typehitsound += 1;
391 if(this.
owner.iscaptured)
409 if (attacker !=
this)
421 if (attacker ==
this)
431 if (this.
owner.message !=
"")
437 this.
owner.islinked =
false;
438 this.
owner.iscaptured =
false;
440 this.
owner.colormap = 1024;
450 if(this.
owner.model !=
"models/onslaught/controlpoint_pad.md3")
463 float true_limit = ((limit !=
RES_LIMIT_NONE) ? limit : targ.max_health);
464 if (hlth <= 0 || hlth >= true_limit)
469 if(targ.owner.iscaptured)
483 int _enemy_count = 0;
485 int _friendly_count = 0;
511 entity attacker = first_enemy;
512 if (_enemy_count > 1)
528 if(this.
owner.islinked !=
this.owner.waslinked)
531 int t = this.
owner.team;
532 if(!this.
owner.islinked)
575 this.
owner.iscaptured =
true;
577 setorigin(
this, this.
origin);
586 if(this.
owner.message !=
"")
611 if(this.
owner.model != MDL_ONS_CP_PAD2.model_str())
622 entity e =
new(onslaught_controlpoint_icon);
636 e.team = player.team;
637 e.colormap = 1024 + (e.team - 1) * 17;
644 cp.colormap = e.colormap;
650 cp.sprite.SendFlags |= 16;
661 if(a == -2) {
return WP_OnsCPDefend; }
662 if(a == -1 || a == 1 || a == 2) {
return WP_OnsCP; }
663 if(a == 3 || a == 4) {
return WP_OnsCPAttack; }
679 if(e.lastteam != e.team + 2 || e.lastshielded != sh || e.iscaptured != e.lastcaptured)
709 e.lastteam = e.team + 2;
711 e.lastcaptured = e.iscaptured;
739 if(attackable != 2 && attackable != 4)
799 cp.netname =
"Control point";
808 cp.iscaptured =
false;
810 cp.isshielded =
true;
816 if((cp.spawnflags & 1) || cp.noalign)
823 setorigin(cp, cp.origin +
'0 0 20');
844 return WP_OnsGenShielded;
853 if(e.lastteam != e.team + 2 || e.lastshielded != e.isshielded)
855 e.lastteam = e.team + 2;
856 e.lastshielded = e.isshielded;
888 vector best_ang =
'0 0 0';
889 float best_trace_fraction = 0;
907 setorigin(
cam,
cam.origin);
908 cam.angles = best_ang;
922 if(damage <= 0)
return;
926 if (attacker !=
this)
934 play2(attacker,
SND(ONS_DAMAGEBLOCKEDBYSHIELD));
935 attacker.typehitsound += 1;
959 if (attacker ==
this)
1008 float true_limit = ((limit !=
RES_LIMIT_NONE) ? limit : targ.max_health);
1010 if (hlth <= 0 || hlth >= true_limit)
1016 targ.frame = 10 *
bound(0, (1 - hlth / targ.max_health), 1);
1017 targ.lasthealth = hlth;
1101 int teamnum = gen.team;
1109 gen.team_saved = teamnum;
1115 gen.bot_attack =
true;
1122 gen.iscaptured =
true;
1123 gen.islinked =
true;
1124 gen.isshielded =
true;
1131 gen.colormap = 1024 + (teamnum - 1) * 17;
1189 for(tmp_entity =
ons_worldgeneratorlist; tmp_entity; tmp_entity = tmp_entity.ons_worldgeneratornext)
if(
time >= tmp_entity.ons_overtime_damagedelay)
1203 d = d * tmp_entity.max_health;
1207 Damage(tmp_entity, tmp_entity, tmp_entity, d, DEATH_HURTTRIGGER.m_id,
DMG_NOWEP, tmp_entity.origin,
'0 0 0');
1209 tmp_entity.sprite.SendFlags |= 16;
1211 tmp_entity.ons_overtime_damagedelay =
time + 1;
1227 else if(winner_team == -1)
1240 STAT(ROUNDLOST, it) =
true;
1241 it.player_blocked =
true;
1259 for(tmp_entity =
ons_worldcplist; tmp_entity; tmp_entity = tmp_entity.ons_worldcpnext)
1260 tmp_entity.sprite.SendFlags |= 16;
1263 tmp_entity.sprite.SendFlags |= 16;
1306 cp2.wpconsidered =
false;
1312 if(!((cp2.aregensneighbor &
BIT(this.
team)) || (cp2.arecpsneighbor &
BIT(this.
team))))
1320 if(it.havocbot_ons_target == cp2)
1326 cp2.wpconsidered =
true;
1334 if (!cp1.wpconsidered)
1337 if(cp1.wpcost<bestvalue)
1339 bestvalue = cp1.wpcost;
1361 if (!(it.wpflags & WAYPOINTFLAG_GENERATED) && checkpvs(it.origin, cp))
1364 if (it.cnt < bestvalue)
1416 if (checkpvs(it.origin, g))
1419 if (it.cnt < bestvalue)
1429 LOG_DEBUG(
"waypoints found around generator");
1442 LOG_DEBUG(
"generator found without waypoints around");
1521 if(max_dist <= 0 ||
vdist(cp.origin - pos, <=, max_dist))
1522 if(
vlen2(cp.origin - pos) <=
vlen2(closest_target.origin - pos) || closest_target ==
NULL)
1523 closest_target = cp;
1528 if(max_dist <= 0 ||
vdist(gen.origin - pos, <, max_dist))
1529 if(
vlen2(gen.origin - pos) <=
vlen2(closest_target.origin - pos) || closest_target ==
NULL)
1530 closest_target = gen;
1533 return closest_target;
1545 float smallest_distance = 0, distance;
1549 delta = cp.origin - pos;
1551 distance =
vlen(delta);
1555 if(max_dist <= 0 || distance <= max_dist)
1556 if(closest_target ==
NULL || distance <= smallest_distance )
1558 closest_target = cp;
1559 smallest_distance = distance;
1564 delta = gen.origin - pos;
1566 distance =
vlen(delta);
1569 if(max_dist <= 0 || distance <= max_dist)
1570 if(closest_target ==
NULL || distance <= smallest_distance )
1572 closest_target = gen;
1573 smallest_distance = distance;
1577 return closest_target;
1614 float iteration_scale = 1;
1615 for(i = 0; i < 16; ++i)
1617 iteration_scale -= i / 16;
1622 loc *=
random() * range * iteration_scale;
1624 loc += tele_target.origin +
'0 0 128' * iteration_scale;
1634 Send_Effect(EFFECT_TELEPORT, player.origin,
'0 0 0', 1);
1637 setorigin(player, loc);
1638 player.angles =
'0 1 0' * ( theta *
RAD2DEG + 180 );
1640 player.fixangle =
true;
1643 player.v_angle = player.angles;
1665 STAT(ROUNDLOST, it) =
false;
1666 it.ons_deathloc =
'0 0 0';
1668 it.clientcamera = it;
1677 player.ons_deathloc =
'0 0 0';
1684 player.ons_deathloc =
'0 0 0';
1693 player.player_blocked =
true;
1700 l.sprite.SendFlags |= 16;
1704 l.sprite.SendFlags |= 16;
1710 if ( player.ons_spawn_by )
1713 player.ons_spawn_by =
NULL;
1722 vector spawn_loc = player.ons_deathloc;
1725 if(spawn_loc ==
'0 0 0') {
return false; }
1729 for(tmp_entity =
ons_worldcplist; tmp_entity; tmp_entity = tmp_entity.ons_worldcpnext)
1735 else if(
vlen2(tmp_entity.origin - spawn_loc) <=
vlen2(closest_target.origin - spawn_loc) || closest_target ==
NULL)
1736 closest_target = tmp_entity;
1746 float iteration_scale = 1;
1747 for(i = 0; i < 10; ++i)
1749 iteration_scale -= i / 10;
1750 loc = closest_target.origin +
'0 0 96' * iteration_scale;
1751 loc += (
'0 1 0' *
random()) * 128 * iteration_scale;
1755 traceline(closest_target.origin, loc,
MOVE_NOMONSTERS, closest_target);
1758 setorigin(player, loc);
1772 vector spawn_loc = player.ons_deathloc;
1775 if(spawn_loc ==
'0 0 0') {
return false; }
1786 if(
vlen2(tmp_entity.origin - spawn_loc) <=
vlen2(closest_target.origin - spawn_loc) || closest_target ==
NULL)
1787 closest_target = tmp_entity;
1797 float iteration_scale = 1;
1798 for(i = 0; i < 10; ++i)
1800 iteration_scale -= i / 10;
1801 loc = closest_target.origin +
'0 0 128' * iteration_scale;
1802 loc += (
'0 1 0' *
random()) * 256 * iteration_scale;
1806 traceline(closest_target.origin, loc,
MOVE_NOMONSTERS, closest_target);
1809 setorigin(player, loc);
1829 l.sprite.SendFlags |= 16;
1833 l.sprite.SendFlags |= 16;
1856 if(!own) {
delete(
this);
return; }
1865 own.use(own, e,
NULL);
1885 if(!own) {
delete(
this);
return; }
1895 own.use(own, e,
NULL);
1940 STAT(ROUNDLOST, client) =
STAT(ROUNDLOST, spectatee);
1954 vector pos = player.origin;
1966 if ( !source_point &&
GetResource(player, RES_HEALTH) > 0 )
1968 sprint(player,
"\nYou need to be next to a control point\n");
1974 if ( closest_target ==
NULL )
1976 sprint(player,
"\nNo control point found\n");
1982 player.ons_spawn_by = closest_target;
1983 player.respawn_flags = player.respawn_flags |
RESPAWN_FORCE;
1987 if ( source_point == closest_target )
1989 sprint(player,
"\nTeleporting to the same point\n");
1994 sprint(player,
"\nUnable to teleport there\n");
2011 if((
time > player.teleport_antispam) && (!
IS_DEAD(player)) && !player.vehicle)
2016 stuffcmd(player,
"qc_cmd_cl hud clickradar\n");
2026 return (frag_victim.classname ==
"onslaught_generator" && !frag_victim.isshielded)
2027 || (frag_victim.classname ==
"onslaught_controlpoint_icon" && !frag_victim.owner.isshielded);
2035 int wp_flag =
M_ARGV(3,
int);
2039 if(wp.owner.classname ==
"onslaught_controlpoint")
2041 entity wp_owner = wp.owner;
2043 if(
SAME_TEAM(e, wp_owner) &&
GetResource(wp_owner.goalentity, RES_HEALTH) >= wp_owner.goalentity.max_health) { wp_flag |= 2; }
2046 if(wp.owner.classname ==
"onslaught_generator")
2048 entity wp_owner = wp.owner;
2049 if(wp_owner.isshielded &&
GetResource(wp_owner, RES_HEALTH) >= wp_owner.max_health) { wp_flag |= 2; }
2050 if(
GetResource(wp_owner, RES_HEALTH) <= 0) { wp_flag |= 2; }
2054 M_ARGV(3,
int) = wp_flag;
2061 if(
substring(turret_target.classname, 0, 10) ==
"onslaught_")
2079 turret.team = e.team;
2082 if(turret.team != turret.tur_head.team)
2105 objerror(
this,
"target and target2 must be set\n");
2158 field(SP_ONS_TAKES,
"takes", 0);
2176 cam =
new(objective_camera);
float frame
primary framegroup animation (strength = 1 - lerpfrac - lerpfrac3 - lerpfrac4)
void navigation_goalrating_start(entity this)
void navigation_goalrating_timeout_set(entity this)
float nearestwaypointtimeout
bool navigation_goalrating_timeout(entity this)
void navigation_routerating(entity this, entity e, float f, float rangebias)
IntrusiveList g_bot_targets
void navigation_goalrating_end(entity this)
void bot_aim_reset(entity this)
float havocbot_role_timeout
void waypoint_spawnforitem_force(entity e, vector org)
IntrusiveList g_waypoints
#define MUTATOR_HOOKFUNCTION(...)
#define MUTATOR_RETURNVALUE
#define BIT(n)
Only ever assign into the first 24 bits in QC (so max is BIT(23)).
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
const vector GENERATOR_MIN
const vector GENERATOR_MAX
float GetResource(entity e, Resource res_type)
Returns the current amount of resource the given entity has.
void TakeResource(entity receiver, Resource res_type, float amount)
Takes an entity some resource.
bool SetResourceExplicit(entity e, Resource res_type, float amount)
Sets the resource amount of an entity without calling any hooks.
#define colormapPaletteColor(c, isPants)
#define setmodel(this, m)
const int SFL_SORT_PRIO_SECONDARY
Scoring priority (NOTE: PRIMARY is used for fraglimit) NOTE: SFL_SORT_PRIO_SECONDARY value must be lo...
const int SFL_SORT_PRIO_PRIMARY
#define autocvar_timelimit
const int INITPRIO_SETLOCATION
const int INITPRIO_GAMETYPE
const int INITPRIO_FINDTARGET
const float MOVE_NOMONSTERS
const float SOLID_TRIGGER
float checkpvs(vector viewpos, entity viewee)
#define CSQCMODEL_AUTOUPDATE(e)
#define CSQCMODEL_AUTOINIT(e)
void Damage(entity targ, entity inflictor, entity attacker, float damage, int deathtype,.entity weaponentity, vector hitloc, vector force)
#define pointparticles(effect, org, vel, howmany)
entity EFFECT_CAP(int teamid)
entity EFFECT_FLAG_TOUCH(int teamid)
void Send_Effect(entity eff, vector eff_loc, vector eff_vel, int eff_cnt)
ERASEABLE void IL_REMOVE(IntrusiveList this, entity it)
Remove any element, anywhere in the list.
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
ERASEABLE bool IL_CONTAINS(IntrusiveList this, entity it)
#define IL_EACH(this, cond, body)
void SUB_UseTargets(entity this, entity actor, entity trigger)
#define SV_ParseClientCommand
#define PutClientInServer
#define WriteHeader(to, id)
void Net_LinkEntity(entity e, bool docull, float dt, bool(entity this, entity to, int sendflags) sendfunc)
void set_movetype(entity this, int mt)
const int MOVETYPE_NOCLIP
spree_inf s1 s2 s3loc s2 s1
void Send_Notification(NOTIF broadcast, entity client, MSG net_type, Notification net_name,...count)
#define APP_TEAM_NUM(num, prefix)
ERASEABLE void RandomSelection_Init()
#define RandomSelection_AddEnt(e, weight, priority)
entity RandomSelection_chosen_ent
void round_handler_Init(float the_delay, float the_count, float the_round_timelimit)
void round_handler_Spawn(bool() canRoundStart_func, bool() canRoundEnd_func, void() roundStart_func)
#define round_handler_GetEndTime()
#define round_handler_IsRoundStarted()
float TeamScore_AddToTeam(int t, float scorefield, float score)
Adds a score to the given team.
bool autocvar__campaign_testrun
void SpectateCopy(entity this, entity spectatee)
void PlayerUseKey(entity this)
IntrusiveList g_saved_team
#define sound(e, c, s, v, a)
void play2(entity e, string filename)
void play2team(float t, string filename)
void play2all(string samp)
void soundto(int _dest, entity e, int chan, string samp, float vol, float _atten, float _pitch)
float havocbot_attack_time
bool wpforenemy_announced
bool generator_send(entity this, entity to, int sf)
void nades_RemovePlayer(entity this)
bool Onslaught_CheckPlayers()
bool autocvar_g_onslaught_spawn_at_controlpoints
void havocbot_role_ons_offense(entity this)
float autocvar_g_onslaught_spawn_at_controlpoints_chance
void ons_DelayedControlPoint_Setup(entity this)
void ons_ControlPoint_Touch(entity this, entity toucher)
void ons_camSetup(entity this)
float autocvar_g_onslaught_click_radius
void onslaught_updatelinks()
void ons_GeneratorReset(entity this)
void havocbot_goalrating_ons_controlpoints_attack(entity this, float ratingscale)
void ons_ControlPoint_Icon_Think(entity this)
void ons_ControlPoint_Think(entity this)
float autocvar_g_onslaught_cp_proximitydecap_dps
void ons_ControlPoint_Setup(entity cp)
bool Onslaught_CheckWinner()
entity ons_ControlPoint_Waypoint(entity e)
bool ons_ControlPoint_Icon_Heal(entity targ, entity inflictor, float amount, float limit)
bool clientcamera_send(entity this, entity to, int sf)
void ons_DelayedLinkSetup(entity this)
void havocbot_role_ons_setrole(entity this, int role)
float autocvar_g_onslaught_cp_health
float autocvar_g_onslaught_cp_regen
float autocvar_g_onslaught_cp_proximitydecap
bool ons_Link_Send(entity this, entity to, int sendflags)
void ons_Link_CheckUpdate(entity this)
void ons_ControlPoint_UpdateSprite(entity e)
entity ons_Nearest_ControlPoint_2D(entity this, vector pos, float max_dist)
float autocvar_g_onslaught_cp_buildhealth
void Onslaught_count_generators()
void ons_GeneratorThink(entity this)
float autocvar_g_onslaught_spawn_at_controlpoints_random
entity ons_Generator_Waypoint(entity e)
void ons_DelayedInit(entity this)
float autocvar_g_onslaught_warmup
void ons_CaptureShield_Spawn(entity this, Model shield_model)
bool ons_GeneratorHeal(entity targ, entity inflictor, float amount, float limit)
float autocvar_g_onslaught_shield_force
float autocvar_g_onslaught_spawn_at_generator_chance
void ons_GeneratorDamage(entity this, entity inflictor, entity attacker, float damage, int deathtype,.entity weaponentity, vector hitloc, vector force)
entity ons_Nearest_ControlPoint(entity this, vector pos, float max_dist)
void onslaught_generator_touch(entity this, entity toucher)
float autocvar_g_onslaught_cp_proximitydecap_distance
void Onslaught_RoundStart()
void ons_MonsterSpawn_Delayed(entity this)
float autocvar_g_onslaught_spawn_at_generator_random
void ons_ControlPoint_Icon_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype,.entity weaponentity, vector hitloc, vector force)
float autocvar_g_onslaught_cp_buildtime
void ons_ControlPoint_Reset(entity this)
bool autocvar_g_onslaught_spawn_at_generator
int ons_Count_SelfControlPoints(entity this)
find the number of control points and generators in the same team as this
void ons_ControlPoint_Icon_BuildThink(entity this)
float autocvar_g_onslaught_teleport_wait
void havocbot_role_ons_defense(entity this)
void ons_CaptureShield_Touch(entity this, entity toucher)
float autocvar_g_onslaught_round_timelimit
void ons_TurretSpawn_Delayed(entity this)
void ons_DelayedGeneratorSetup(entity this)
int ons_ControlPoint_Attackable(entity cp, int teamnum)
void ons_GeneratorSetup(entity gen)
void ons_ControlPoint_Icon_Spawn(entity cp, entity player)
bool havocbot_goalrating_ons_generator_attack(entity this, float ratingscale)
void havocbot_ons_reset_role(entity this)
void ons_CaptureShield_Reset(entity this)
bool ons_CaptureShield_Customize(entity this, entity client)
float autocvar_g_onslaught_teleport_radius
float autocvar_g_onslaught_gen_health
float autocvar_g_onslaught_spawn_choose
float autocvar_g_onslaught_allow_vehicle_touch
void havocbot_role_ons_assistant(entity this)
bool ons_Teleport(entity player, entity tele_target, float range, bool tele_effects)
Teleport player to a random position near tele_target if tele_effects is true, teleport sound+particl...
void ons_Generator_UpdateSprite(entity e)
void onslaught_controlpoint_icon_link(entity e, void(entity this) spawnproc)
int ons_ControlPoint_CanBeLinked(entity cp, int teamnum)
const int HAVOCBOT_ONS_ROLE_DEFENSE
float ons_notification_time[17]
const int HAVOCBOT_ONS_ROLE_OFFENSE
void havocbot_goalrating_items(entity this, float ratingscale, vector org, float sradius)
#define CPGEN_SPAWN_OFFSET
void havocbot_goalrating_enemyplayers(entity this, float ratingscale, vector org, float sradius)
float ons_captureshield_force
const vector CPICON_OFFSET
IntrusiveList g_onsshields
const vector CPGEN_WAYPOINT_OFFSET
entity havocbot_ons_target
entity ons_worldgeneratorlist
const float GEN_THINKRATE
const int HAVOCBOT_ONS_ROLE_ASSISTANT
const float ONS_CP_THINKRATE
void GiveResource(entity receiver, Resource res_type, float amount)
Gives an entity some resource.
void GiveResourceWithLimit(entity receiver, Resource res_type, float amount, float limit)
Gives an entity some resource but not more than a limit.
#define GameRules_scoring_add(client, fld, value)
#define GameRules_scoring_add_team(client, fld, value)
#define GameRules_scoring(teams, spprio, stprio, fields)
void turret_respawn(entity this)
const float SVC_SETVIEWANGLES
int Team_GetWinnerTeam_WithOwnedItems(int min_control_points)
Returns the winner team.
void TeamBalance_Destroy(entity balance)
Destroy the team balance entity.
entity Entity_GetTeam(entity this)
Returns the team entity of the given entity.
void Team_SetNumberOfOwnedItems(entity team_ent, int number)
Sets the number of items owned by a team.
int Team_GetNumberOfOwnedItems(entity team_ent)
Returns the number of items owned by a team.
int TeamBalance_GetAllowedTeams(entity balance)
Returns the bitmask of allowed teams.
entity TeamBalance_CheckAllowedTeams(entity for_whom)
Checks whether the player can join teams according to global configuration and mutator settings.
entity Team_GetTeamFromIndex(int index)
Returns the global team entity at the given index.
bool Team_IsValidTeam(int team_num)
Returns whether team value is valid.
int Team_TeamToBit(int team_num)
Converts team value into bit value that is used in team bitmasks.
#define Team_ColoredFullName(teamid)
const int NUM_TEAMS
Number of teams in the game.
#define IS_REAL_CLIENT(v)
#define FOREACH_CLIENT(cond, body)
#define IS_BOT_CLIENT(v)
want: (IS_CLIENT(v) && !IS_REAL_CLIENT(v))
ERASEABLE vector randompos(vector m1, vector m2)
#define vdist(v, cmp, f)
Vector distance comparison, avoids sqrt()
void WaypointSprite_UpdateTeamRadar(entity e, entity icon, vector col)
void WaypointSprite_UpdateSprites(entity e, entity _m1, entity _m2, entity _m3)
void WaypointSprite_UpdateMaxHealth(entity e, float f)
void WaypointSprite_Ping(entity e)
entity WaypointSprite_getviewentity(entity e)
void WaypointSprite_UpdateHealth(entity e, float f)
entity WaypointSprite_SpawnFixed(entity spr, vector ofs, entity own,.entity ownfield, entity icon)
void WaypointSprite_UpdateBuildFinished(entity e, float f)
void WaypointSprite_UpdateRule(entity e, float t, float r)
const int SPRITERULE_TEAMPLAY
void DropToFloor_QC_DelayedInit(entity this)
void InitializeEntity(entity e, void(entity this) func, int order)
float autocvar_timelimit_suddendeath