Between normal Half-Life deathmatch and TFC, there exists a buffer zone... a team-based style of play with very little rules... it's know as... er... well, Half-Life Teamplay. This style of play is based upon the set of
entities implemented in after Half-Life was released. Not all of the game_ entities are specifically aimed at multiplayer teamplay maps. Below are a few of the basics.
The basics of a Half-Life Teamplay map are quite basic indeed. All that is really needed is a couple worlddpawn settings and the game_team_master and info_player_deathmatch entities.
worldspawn (map properties)
entity contains two properties that exert a bit of control over a Teamplay game. To access it, select Map Properties from the Map menu in Worldcraft.
- Map Team List (mapteams) - This will be copied into the mp_teamlist while your map is running if the server allows maps to override the team list (it does by default).
- Default Team (defaultteam) - If this is set to 1, then players are forced on to the first team (team index 0) when they join. Otherwise, they are forced to join the team with fewest players. If they are forced to join the first team by the map (defaultteam 1), then players are not allowed to change teams during that map (unless the map changes their team for them).
The first property allows you to setup which models will define the teams. For example, if you wanted to have two teams, one for scientists and one for the human grunts, you'd specify
here. The models you have available by default are: gina, gordon, helmet, hgrunt, and scientist. Later Half-Life patches also add barney, robo, and zombie player models.
The second property lets you decide how teams will be picked. It's quite simple, you can either be automatically placed on the first team (1) or you can be automatically placed on the team with the least players (0).
is the key to the whole thing. This is the entity that allows you to actually implement teamplay in a map. It's quite easy to setup. Below are the required properties.
- Name (targetname) - set this to a descriptive name of the team, for example,
- Team Index (-1 = no team) (teamindex) - set this to the index value of the team. For example, if the Map Team List in the worldspawn was set as shown above, to
scientist;hgrunt, then index value 0 would be the scientist team, and index value 1 would be the human grunts.
Each team in the map needs a game_team_master defined for it. Going with the scientist/grunt theme, you'd want one game_team_master named
with a team index of 0, and one game_team_master named
with a team index of 1.
info_player_deathmatch (team spawns)
What good is a Teamplay game if you can't define where specific teams will spawn? Well, this is actually quite easy once you have the game_team_masters defined (above). As long as you have a fairly current version of the Half-Life game data file, the info_player_deathmatch
entity will have a Master property. Set the value of the Master property to the name of one of the game_team_masters.
Using the the previous examples, to make a spawn point for the scientist's team, you'd place an info_player_deathmatch entity and set its Master value to
. Likewise, to make spawn points for the human grunts, you'd set the info_player_deathmatch entity's Master value to
Ok, so, we've decided who's going to be on what team, we've setup the team masters, and we've defined the team spawn points. These are the absolute basics of a Half-Life Teamplay map. There are a number of other things that you can do, however.
- Almost any entity that can have a Master value can also use a game_team_master to make the entity usable by only a single team. For example, if you give a func_door's Master property a value of
grunts, only people on the human grunts team (using our previous examples) could use the door.
- Different teams can start with different weapons and equipement, just use the game_player_equip entity.
Keeping Players Informed
With a Teamplay game, its very important that players keep informed of their mission so that they can properly work together to defeat the opposing team. This can be accomplished by using the game_text
entity in conjunction with the special Teamplay entity naming convention - the following five names can be used as names of entities, and they'll be triggered automatically.
game_playerdie - entities with this name will be triggered when a player dies
game_playerkill - entities with this name will be triggered when a player is killed
game_playerjoin - entities with this name will be triggered when a player joins the server
game_playerspawn - entities with this name will be triggered when a player spawns
game_playerleave - entities with this name will be triggered when a player leaves the game
For example, if you create a game_text and give it a Name
, the game_text output will be displayed to the player each time he spawns. Note that you can have a number of game_text's with the
name, but also using different game_team_masters for their Master values. This lets you display different text to each team.
There's lots more you can do with the game entities in a Half-Life Teamplay map, but the above outlines all the required basics. It is definitely recommended that you read through the
entities in the entity guide and let your mind wander to cool applications of their use. Some things to look into -
- the game_zone_player entity allows you to cause every player to trigger a specific event depending on their location (either inside or outside the zone). There's an "inside" target and an "outside" target. Interesting, no?
- the game_score entity allows you to increase or decrease a team's score
- players can switch to a different team using the game_player_team entity
- the game_team_set entity allows you to set a game_team_master's team index to the team of the player who activates it
- the game_player_hurt entity can hurt (or heal) players of a specific team
- the game_end entity can force the game to end, useful for time limited missions