Absolute beginners TF map making by Grimm

copied from here
TF Map Making Tutorial
[ BackHomeD/L Tutor ]
The Team Fortress Map Making Tutor. v1.1
by: grimm [502]


INDEX

0.0 New Since v1.0

1. Basic intro

1.1 Introduction
1.2 File Listing
1.3 What is TF?
1.4 How do I make a TF map?

2. Entity specifics

2.1 Tool & trick of the trade
2.2 TF Entities
2.3 info_tfdetect
2.4 info_player_teamspawn
2.5 info_tfgoal
2.6 item_tfgoal
2.7 info_tfgoal_timer

3. EXAMPLE1.MAP

3.1 the example map
3.2 what we need
3.3 the scoring system
3.4 the crates
3.5 the ladder

4.0 Conclusion

Appendix 1. Bitfields

Appendix 2. Decimal/Binary conversion -Jon Zorn [502]

 


1.1 INTRODUCTION:

This tutorial is not aimed to explore all the facets behind the mapmaking process. Mapmaking is a technical process, but is also subject to a great deal of artistic influence. It is understood that the reader should already possess some basic mapmaking skills in order to comprehend the various terms and techniques described herein.

The tutorial will in the most part deal with the heart and soul of the TF map, which lies in the entities.

This text should be used in conjunction with the EXAMPLE1.MAP file, which is a special sample map containing everything the reader needs to follow this text!

I would appreciate your comments and suggestions. The wave of interest is definitely shifting towards QUAKE2 and the impending arrival of TF2 but your comments can keep this work alive. Feel free to contact me.


1.2 FILE LISTING

You should have the following files, in order to take full advantage of this tutorial. If you downloaded the 502TUTOR.ZIP archive, these files should all be contained within.

tutor.txt the file you are currently reading.
EXAMPLE1.MAP the .map file so the reader can follow and even experiment in, with their favorite map editor.
readme.txt copyright & distribution MUST READ!

 


1.3 WHAT IS TF?

Team Fortress is a special patch for ID Software’s hit game Quake. The people working at Team Fortress Software have done excellent work with their patch, giving players from around the world, a new and dazzling arena of play! Players can choose between the 9 available player classes, each being individualised by their diversified weaponry and skills. For more detailed and accurate information concerning the work of Team Fortress Software, please visit the following sites:

http://www.planetquake.com/teamfortress/
http://www.teamfortress.com


1.4 HOW DO I MAKE A TF MAP?

What is the difference between a normal map, and a Team Fortress map? Unlike most will initially think, the changes needed to be done to a map, in order to make it into a TF map are very minor. The complexity of the entity work needed to be done to your map can roughly be calculated by the complexity of your scoring system.

A great deal of people are very confused by the simplicity of this answer. The only thing you need to do, to make a normal quake map, into a TF specific level is include the proper ENTITIES! But most budding mapmakers just want to start with a basic Capture the Flag scheme, in order to get a better feel for the whole mapmaking process.

This is what this tutorial and the EXAMPLE1.MAP will cover, it is just a very basic map, in which the player selects his team & class, and can take and capture the flag. The flag immediately returns to its point of origin.


2.1 TOOL & TRICK OF THE TRADE

Many tools are available to mapmakers, to accomplish many tasks! But when it comes to making TF maps, the most valuable and downright usefull tool for the beginner mapmaker has got to be ENTed.

What is an ENTed, what does it eat?

ENTed is an Quake Entity Editor, it is also specifically aimed to be used with TF Entities. You can easily load up a .map file to view and edit the existing entities. It has a very simple and efficient interface and you cannot continue in this tutorial without it. You can get ENTed from the official ENTed site:

http://www.erinyes.com/ented/

You can view and edit the entities directly from the .map file using a regular text editor. But your thinking, how does that help me figure out how a specific map author got a certain effect, if they don’t make their .MAPs public. But that is the big surprise! You can also do the same with the .BSP file! That’s right, just open up your favorite map in WORDPAD (my usual text editor runs out of memory..) and go towards the end of the file, you will see a string of variables that are completely legible. Those are the entities and all their attributes.

It is considered good manners not to simply copy someone else’s work without their permission.


2.2 TF ENTITIES

There are 5 TF entities that can be set to produce hundreds of effects. If you do not know what an entity is, you should begin by taking a look at a mapmaking tutorial, which will explain what entities are, and how they are used in maps. The 5 Team Fortress entities are:

info_tfdetect
info_player_teamspawn
info_tfgoal
item_tfgoal
info_tfgoal_timer

The following entity information will not go into explicit detail, concerning the entities. If you wish to read more in depth information, you should consult the following two files:

TFORTMAP.TXT
TFENTREF.TXT

In each specific entity detail section below, you will see a copy of the entities as they are represented in the EXAMPLE1.MAP in order to explain only the aspects pertaining to this tutorial.

You should, in every case, also look at the entities through ENTed, you will see that ENTed provides you with a structured and controlled environment from which to fiddle with the entities. But it also becomes time consuming to use ENTed, once you really get the hang of entity work. But ENTed is always usefull when you don’t want to go looking through entity reference sheets for specific bitfields and such. But we’ll explain all that later.


2.3 info_tfdetect

“TeamFortress maps will be automatically detected by theTeamFortress patch if you put an entity in the map with a classname of “info_tfdetect”. This makes TeamFortress automatically turn on the FORTRESSMAP toggleflag, and turn on teamplay.

Also, once the TeamFortress map has been detected, the patch will look for any spawnpoints dedicated to teams (see below). If it finds any, it will look for the highest team number that is used. Once found, it will limit anybody attempting to join a team to that number. At the moment, Maps are limited to a maximum of 4 teams. E.g. If the highest team number used by a Team Spawnpoint is 3, then the patch will only allow players to join teams 1, 2, and 3.” –Robin Walker TF Software _tfortmap.txt_

 

This entity appears only once, in every TF map. Here is the info_tfdetect variable along with its attributes, as found in the EXAMPLE1.MAP file.

{
“classname” “info_tfdetect”
“hook_out” “1”
“impulse” “4”
“team_broadcast” “SELECT YOUR TEAM\n\n1- BLUE TEAM\n2- RED TEAM\n\nEXAMPLE1.MAP BY GRIMM [502]\nFCO@VIF.COM\n”
“origin” “616 96 -312”
}

classname: is simply the entity type name. That is how you can tell what sort of entity your dealing with. In this case there is only ONE info_tfdetect entity possible on the map. But do not be surprised if you see many with the same name.

there are other attributes we will see, that will give us the ability to distinguish between every entity.

hook_out: this variable controls the availability of the grappling hook in the level. If set to 1, it will NOT be available on the level.

impulse:

 1  ClasSkin Off/On
 2  ClassPersistence Off/On
 4  CheatChecking Off/On
 8  FortressMap Off/On
 16  RespawnDelay See N.B.
 32  RespawnDelay See N.B.
 64  AutoTeam Off/On
 128  Individual Frags Off/On

FortressMap will be set On automatically by the the Detection entity anyway, so just ignore that Bit.

N.B. The RespawnDelay settings takes 2 bits. The value of both of them determines the level of respawn delay, as follows:

 Bit 5  Bit 6  Result
 Off  Off  No Respawn delays
 On  Off  5 Second respawn delay
 Off  On  10 Second respawn delay
 On  On  20 Second respawn delay

team_broadcast: String that replaces the team selection menu. Try removing this line, see what it does. I think most people just never knew you could leave it out if you wanted just the generic team selection menu.

origin: this line holds the exact coordinates of the entity within the map. don’t fiddle with this. If you end up putting an entity in the ‘void’ you will have problems compiling. Finding that one displaced entity is a pain in the ass if you aren’t used to the coordinate system in your map editor.


2.4 info_player_teamspawn

“There is now a new entity for Team Spawnpoints. Team Spawnpoints are used to make players only spawn in points designated for their team. Use it to make players spawn inside their own base/fortress.”-Robin Walker._tfortmap.txt_

There are two ‘info_player_teamspawn’ entities in the EXAMPLE1.MAP file. It just so happens I had decided to make the example map different from most, by including more than 1 team being able to both take the same flag, and capture it at the same point. But I won’t list the entity information twice, since the only differences are the origin and ‘team_no’ variables.

{
“classname” “info_player_teamspawn”
“angle” “180”
“netname” “team2_spawn”
“team_no” “2”
“origin” “256 384 -288”
}

classname: is simply the entity type name. That is how you can tell what sort of entity your dealing with.

angle: the angle of direction this entity is facing. in most cases this value is not usefull, but having players spawn facing a wall can give people some flashbacks of reform school. All that anger makes for very messy play. So use this value well.

netname: variable used to assign a distinctive name to an entity. ENTed uses this value.

team_no: Only players on the specified team can spawn at this location.

origin: this line holds the exact coordinates of the entity within the map. don’t fiddle with this.


2.5 info_tfgoal

The goal entities are the most interesting and versatile entities of the bunch. A goal entity works like an alarm system sensor, unless de-activated, it is constantly trying to determine whether or not the detection criteria are met; and consequently react in the specified manner.

A very simple use of an info_tfgoal is an entity placed where a player will activate it, for example a doorstep. You can have it centerprint to his screen a message like ‘welcome’.

Even a very simple thing as this, can be made more complex. For instance, you decide it will only say ‘welcome’ to players of a specific team. Why not play a sound file instead of the message etc..

If you wish to get a more detailed description of everything a goal can do, you should consult the tfortmap.txt. In this tutorial, we will stick to the basics, and I will explain how I used two goal entities for two completely different effects.

The first of the goals is the trickier one. It is the flag capture goal. In every map you’ve played where there was a flag drop area, sniper tower in 2fort4. There is an invisible entity right over that slightly raised floor portion you drop to flag to. I would be kind of hard to find out where you had to bring the flag unless you have a marker on your map to designate such a special area. In most maps, the flag dropoff is on the ground, as a matter of personal preference, I put the one in the EXAMPLE1.MAP on the wall.

I think it’s important to state that the flag itself is also a goal. But due to the fact that it can be picked up and moved by players, it is an ‘item_tfgoal’. The following goals cannot be moved by players, although they CAN be removed by other goals. In this example map, I stated that ANY team can bring the flag back to this point. In your map, you will have to have both the flag and dropoff entities for each team in your map for a standard Capture The Flag scenario.

{
“classname” “info_tfgoal”
“netname” “Flag Capture”
“goal_activation” “1”
“items_allowed” “1”
“axhitme” “1”
“message” “You have captured the flag!\n”
“increase_team1” “10”
“frags” “12”
“goal_effects” “1”
“origin” “-104 64 -16”
}

classname: is simply the entity type name. That is how you can tell what sort of entity your dealing with.

netname: variable used to assign a distinctive name to an entity. ENTed uses this value.

goal_activation: Determines how the Goal is activated. Bitfields.
1 : Activated when touched by a player.
2 : Activated when touched by a detpack explosion.
4 : Only activated if the AP fails Criteria.

items_allowed: AP needs this GoalItem to meet this Goal’s criteria.

axhitme: Goal removes this GoalItem from APA that has it.

message: This is a message that will be centerprinted to the AP (Affected Player) only.

increase team # : This value will be added to the team #’s frag count. This does not include the AP. So make sure you have a ‘frags’ line to add the points to the capturing player also!

frags: This value will be added to the APA (All Players Affected) frag count.

goal_effects: Determines what players are affected. Bitfields.
1 : AP is affected.
2 : Everyone on the AP’s team is affected.
4 : Everyone not on the AP’s team is affected.
8 : Everyone except the AP is affected.
16 : Radius effect does not go
through walls.

origin: this line holds the exact coordinates of the entity within the map. don’t fiddle with this.


{
“classname” “info_tfgoal”
“mdl” “progs/backpack.mdl”
“netname” “re-supply_pack”
“goal_effects” “1”
“armortype” “0.8”
“armorvalue” “300”
“health” “25”
“ammo_shells” “50”
“ammo_nails” “50”
“ammo_rockets” “50”
“ammo_cells” “50”
“ammo_medikit” “50”
“no_grenades_1” “1”
“no_grenades_2” “1”
“goal_activation” “1”
“message” “Up And At Them!\n”
“wait” “20”
“origin” “-16 480 -192”
}

classname: is simply the entity type name. That is how you can tell what sort of entity your dealing with.

mdl: The mdl used by this Goal. UNSPECIFIED = INVISIBLE

netname: variable used to assign a distinctive name to an entity. ENTed uses this value.

goal_effects: Determines what players are affected. Bitfields.
1 : AP is affected. (default)
2 : Everyone on the AP’s team is affected.
4 : Everyone not on the AP’s team is affected.
8 : Everyone except the AP is affected.
16 : Radius effect does not go through walls.

armortype : Use negative values to remove armor % reduction

Red Armor = 0.8
Yellow Armor = 0.6
Green Armor = 0.3

armorvalue : Use negative values to remove armor

health : Health Added to affected parties. Use Negative values to HURT players.

ammo_shells : Shells Added. Use Negative values to remove ammo.

ammo_nails : Nails Added. Use Negative value to remove ammo.

ammo_rockets : Rockets Added. Use Negative value to remove ammo.

ammo_cells : Cells Added. Use Negative value to remove ammo.

ammo_medikit : MediKit Added. Use Negative value to remove ammo.

no_grenades_1 : Type 1 Grenades Added. Use Negative value to remove from player.

no_grenades_2 : Type 2 Grenades Added. Use Negative value to remove from player.

goal_activation: Determines how the Goal is activated. Bitfields.
1 : Activated when touched by a player.
2 : Activated when touched by a detpack explosion.
4 : Only activated if the AP fails Criteria.

items_allowed: AP needs this GoalItem to meet this Goal’s criteria.

axhitme: Goal removes this GoalItem from APA that has it.

message: This is a message that will be centerprinted to the AP (Affected Player) only.

frags: This value will be added to the APA (All Players Affected) frag count.

goal_effects: Determines what players are affected. Bitfields.
1 : AP is affected.
2 : Everyone on the AP’s team is affected.
4 : Everyone not on the AP’s team is affected.
8 : Everyone except the AP is affected.
16 : Radius effect does not go through walls.

origin: this line holds the exact coordinates of the entity within the map. don’t fiddle with this.


2.6 item_tfgoal

“classname” “item_tfgoal”
“goal_activation” “693”
“skin” “3”
“mdl” “progs/tf_flag.mdl”
“netname” “theflag”
“goal_result” “16”
“pausetime” “10”
“message” “You have the flag!\n return it to the Blue wall return\n”
“goal_no” “1”
“goal_effects” “1”
“delay” “10”
“items” “131072”
“origin” “256 320 80”

 

classname: is simply the entity type name. That is how you can tell what sort of entity your dealing with.

goal_activation : Bitfields
1 : Carrying Player glows.
2 : Carrying Player moves at half speed.
4 : Item is dropped when a player with it dies.
8 : Item is returned when dropped.
16 : Item is returned when removed from players by a Goal
32 : Item is returned due to “pausetime” (see below)
64 : Only activated (picked-up) if AP fails Criteria.
128 : Enable “pausetime” removing.
256 : Players keep this item when they die.
512 : If this Item isn’t being carried, it glowsdimly.
1024: Don’t remove the results of this Item when it’s removed from a player.
2048 : If this bit is set, the GoalItem drops to the ground when it first spawns.
8192 : If this bit is set, the GoalItem is Solid

Skin : The Model Skin # used by this goal item. This obviously only works if multiple skins are
available.

mdl: The mdl used by this Goal. The path to the models in fortress is usually:

progs/model_name
If no model is specified for the item, it will be invisible. This is not a good idea for an item.

netname: variable used to assign a distinctive name to an entity. ENTed uses this value.

goal_result : Determines what results are applied to APA. Bitfields:
1 : Goal is removed after activation.
2 : Goals activated by this one apply their results to the AP.
4 : Display scores and end the level.
8 : Activated goals will not apply their results to the APA
16 : Disable/Stop the spy’s undercover mask.
32 : This forces APA to simply respawn. The player doesn’t die… just respawns.
4096 : If this bit is set, any player carrying this item can drop it using the “dropitems” command.

pausetime : Item is removed if not touched for this time after being dropped by a dying player. Also, see bit 32 in “goal_activation” above.

N.B. This is not used if bit 128 in “goal_activation” is not enabled.

message : This message is centerprinted to the APs screen.

goal_no : Unique ID number of this goal.

goal_effects : Determines what players are affected. Bitfields.
1 : AP is affected. (default)
2 : Everyone on the AP’s team is affected.
4 : Everyone not on the AP’s team is affected.
8 : Everyone except the AP is affected.
16 : Radius effect (see “t_length”) does not go through walls.

items : Specifies which console icon to light up when this Item is carried. Bitfield.
131072 : Silver Key
262144 : Gold Key

origin : this line holds the exact coordinates of the entity within the map. don’t fiddle with this.

 


2.7 info_tfgoal_timer

I have never used this entity, nor does the description of this entity interest me. It cannot be used to activate another goal. It could be used although, to affect all players. I did not use this entity in the EXAMPLE1.MAP, if you wish to have more info on this TF entity, you can consult the TFORTMAP.TXT file, which holds a very detailed description.


3.1 The Example Map.

A great deal of information has been given concerning the use of TF entities in the example map. Some people have probably gotten answers to their questions concerning the creation of a TF map. I would say the majority however, are still confused, especially when it comes to BITFIELDS to select the various options we would like to activate in our entity variables.

See Appendix 1, for information on Bitfields.

Once we understand the process involved in turning options on/off in our entities, we can start to see the possibilities available to us. There are a great deal of advanced topics such as controlling Quake entities through a TF goal, creating complex scoring systems in which goal activation must be done in order etc…

I suggest at this point, that you load the EXAMPLE1.MAP file in ENTed to follow the text, while analysing the various options and menus that ENTed makes available to you.

The goal of this Tutorial is to explain the simple capture the flag (CTF) scenario, which is ever so popular with players and budding mapmakers. We have seen the 5 TF entities available to us, along with the entity data from the actual EXAMPLE1.MAP file. But now we’ll look at it all in a different, less technical light.


3.2 What we need:

In order to create a Team Fortress map, we must follow a certain formula that EVERY TF map follows. There are REQUIRED steps we must take, in order to make a TF map work.

  • info_tfdetect: We must have an info_tfdetect entity
    somewhere in our map, that will give
    the TF patch the proper startup
    information.

In the EXAMPLE1.MAP, I positionned the entity right
under the right side ledge, behind the ladder.

  • 2- info_player_teamspawn: Every team must have at least
    one spawn point to itself. It is a good
    idea to have at least 1 spawn point for
    every 4 players in each team.

In a 2 team, 32 player map, we should estimate 16 players in each team, therefore 4 spawn points for each team.

There is only one spawnpoint for each team in the example map.

The above is ALL that is really required to create a valid Team Fortress map. All your classes would work and so would your teams. But the only way to score points in such a map, would be through frags. I have never seen such a TF map, but that is probably due to the fact that Deathmatch is more
suitable for frag only play.


3.3 Scoring System:

The game of Capture The Flag has always been popular. It also happens to be among the easiest scoring systems to implement in a TF map. I noticed that clone after clone of 2fort4, hardly anyone decided to spice it up. That is more of a philosophical question than anything else.

When planning for your TF map, most of the time, you will know in advance, what sort of scoring system you wish to have. Planning is always a big bonus in any project. You should take a look at the various goal options are available to you, and decide whether you will want to shift from the usual CTF.

In my first map, The Outpost, I had decided to give the flag capturing player an extra frag over his teammates. This will encourage certain lower player classes to do their stuff. Such as scouts, who don’t stand much of a change in a firefight, but who could really use that extra frag per capture, in order to distinguish themselves in their team ranks.

In the EXAMPLE1.MAP, there was no frags given to any teams, because for the example, I chose to make the goal work with either team, therefore the frags were only given to the APA.

In order to make a CTF scoring system work, we need the following for EACH team:

a flag : item_tfgoal
a flag capture point: info_tfgoal

NOTE: you do not capture your own flag in your own base, therefore the flag cannot be taken by your own team, and the flag capture point will work only with enemy flags.

In order to better understand the way these entities work, you should print out the entities contained within the EXAMPLE1.MAP and then load the map in ENTed for experimenting. As you turn options on/off, add or remove.. keep an eye on the FIELDS Tab and see what has changed or disapeared. You can always type the entities over again if you accidently deleted something you shouldn’t have.


3.4 The Crates:

I noticed in MANY maps, that the author created stacks of crates, by copying one crate over and over. That is one way of doing it. But a beginning mapmaker should always try to avoid taking the easy way out of things. That will only cause problems later in the mapmaking process. Many maps have a great deal of potential, but are so badly structured that they exhibit some very harsh problems such as grey-outs, which occur when the Quake engine cannot fully draw the scene before it. Some maps are really well made, but are filled with so much needless detail, that they slow down to a crawl.

The crates in the EXAMPLE1.MAP look like stacks of individual crates, but in reality, are made out of larger brushes with the textures aligned in order to give the illusion of seperate crates. Load up the .MAP in your favorite editor in order to see what I mean more clearly.

Sure, this is a very innane detail. But there are a great deal of instances in which a good deal of effectiveness can be gained by using a touch of foresight. You should also avoid needless
use/abuse of the carving tool. Try to achieve the same visual effect by manually creating the brush composition you need.


3.5 The Ladder:

While working on my map, The Outpost, I had really started getting annoyed of using ramps for everything. Especially when I first started working on the outside bunkers. I had initially
planned on using a ramp, but the amount of room you need to make a proper ramp is just crazy. In tight spaces, when you need to get some height, they are useless. I eventually used lifts to solve
my problem, but maybe in a future version of The Outpost, if there is any demand for one. I will replace the lifts with ladders.

When I first played on BAM4, by Midori, I just flipped out over those nifty ladders he created! I was lucky enough to get a message from Midori with the secret behind this technique.

You will have to load the EXAMPLE1.MAP in your favorite editor and zoom in nice and close to the ladder. You will notice that the front of the ladder texture is made of solid blocks with
a height of 16 (17 is the highest a player can step without jumping). The blocks have a 2 unit wide step.

Once you have the proper brush arrangement. All you need to do is apply the ‘clip’ texture to the brushes. The ‘clip’ texture is transparent and can be shot through, but the player cannot MOVE through it. Therefore when you step towards the invisible steps, you actually climb the invisible steps and not the decorative rungs of the ladder.


4.0 Conclusion

I have given you all the information you need in order to create a basic TF map with CTF scoring system. I am sure I forgot to mention something or that a specific section could be made more
clear. I would be glad to answer your questions and add insight or even the answers to frequently asked questions. But in order to do this, I need feedback. So feel free to contact me.

grimm [502]
March 10th 1998.


New Since v1.0

-in the item_tfgoal section, fixed some entity information on:

goal_activation (added all the missing bitfield info)
goal_result – (added the missing bitfield info)
items – (removed the lights for quad, invinsibility etc..)

17 is the highest a player can step without jumping!
-In ENTed you should keep an eye on the FIELDS tab and NOT the
‘details’ tab.

Added the two new Appendixes on Bitfields & Decimal/Binary Conversion.


Appendix 1. BITFIELDS - grimm [502]

Why do we need to understand what a bitfield is? Well in TF, the entities make tremendous use of bitfields in order to turn entity options ON/OFF. Bitfields are used in the Binary numbering system, to designate each bit.

{
“classname” “item_tfgoal”
“goal_activation” “693”
}

This is an example of bitfields in use, taken from our flag entity from the EXAMPLE1.MAP. Now how do we figure out what options are currently set, from the goal_activation field? Well we can probably just wing it, by adding up various values, you see, every bitfield in the entity info, is given a value:

1 : Carrying Player glows.
2 : Carrying Player moves at half speed.
4 : Item is dropped when a player with it dies.
8 : Item is returned when dropped.
16 : Item is returned when removed from players by a Goal
32 : Item is returned due to “pausetime” (see below)
64 : Only activated (picked-up) if AP fails Criteria.
128 : Enable “pausetime” removing.
256 : Players keep this item when they die.
512 : If this Item isn’t being carried, it glowsdimly.
1024: Don’t remove the results of this Item when it’s removed from a player.
2048 : If this bit is set, the GoalItem drops to the ground when it first spawns.
8192 : If this bit is set, the GoalItem is Solid

693= 512+128+32+16+4+1

512: If this item isn’t being carried, it glows dimly.

128: Enable “pausetime” removing

32: Item is returned due to “pausetime” (see above)

16 : Item is returned when removed from players by a Goal

4 : Item is dropped when a player with it dies.

1 : Carrying Player glows.

But this method is long and tedious. The real way to find out what options are turned ON or OFF, we should simply convert our number from decimal (693) to binary (1010110101). We could then easily and effectively determine what options we have on or off. But many of you probably do not know much about BINARY, or how to convert from Decimal to Binary, or vice-versa. The following is something Jon Zorn [502] put together for this tutorial on just such information. Enjoy.


Appendix 2. Decimal/Binary conversion -Jon Zorn [502]

By using simple division and keeping track of the remainder we can figure out what the binary equivalent is. Here’s how it works, take the number you want to convert to binary and divide by 2, this leaves you with a quotient and a remainder, so mark what the remainder is on the side. Now take the quotient and divide by 2, mark what the remainder is and divide quotient by 2. We keep
doing this until the quotient is zero, once that happens we have our binary number in the the list of remainders, only problem is that its listed backwards, so we have to read it backwards.

Here’s an example, let’s take 502:

502 / 2 = 251 with remainder 0
251 / 2 = 125 with remainder 1
125 / 2 = 62 with remainder  1
 62 / 2 = 31 with remainder  0
 31 / 2 = 15 with remainder  1
 15 / 2 = 7 with remainder   1
  7 / 2 = 3 with remainder   1
  3 / 2 = 1 with remainder   1
  1 / 2 = 0 with remainder   1
  0 / 2 oops quotient is zero so we stop

The binary number is in the remainder but remember its backwards so we read it as 111110110 and NOT as 011011111(this is a totally different number!).
Another 2 examples:

 For 138:                For 340:

138 / 2 = 69    R:0      340 / 2 = 170    R:0
 69 / 2 = 34    R:1      170 / 2 = 85     R:0
 34 / 2 = 17    R:0       85 / 2 = 42     R:1
 17 / 2 = 8     R:1       42 / 2 = 21     R:0
  8 / 2 = 4     R:0       21 / 2 = 10     R:1
  4 / 2 = 2     R:0       10 / 2 = 5      R:0
  2 / 2 = 1     R:0        5 / 2 = 2      R:1
  1 / 2 = 0     R:1        2 / 2 = 1      R:0
                           1 / 2 = 0      R:1
 

we have 10001010 for 138   and 101010100 for 340

To convert binary to decimal it’s a little more annoying. Each digit from right to left is worth 2 to the power of something, and that something depends on the digits position. Starting from right to left the number to raise 2 to the power of goes up 1 at a time starting from zero example:

The powers to raise 2 to: 7 6 5 4 3 2 1 0

Binary number : 1 0 0 0 1 0 1 1
                ³ ³ ³ ³ ³ ³ ³ --2 to the power of 0 = 1
                ³ ³ ³ ³ ³ ³ ----2 to the power of 1 = 2
                ³ ³ ³ ³ ³ ------2 to the power of 2 = 4
                ³ ³ ³ ³ --------2 to the power of 3 = 8
                ³ ³ ³ ----------2 to the power of 4 = 16
                ³ ³ ------------2 to the power of 5 = 32
                ³ --------------2 to the power of 6 = 64
                ----------------2 to the power of 7 = 128

What does all this mean? Well now you just have to make a list as follows: for every 1 in the binary number take the position and raise 2 to the power of that position and add it to the list, ignore the zeros since they’re not too important in binary. Once you’ve gone through the entire binary number, just add up all the numbers in the list and you got the decimal equivalent, here’s an example:

Lets take binary number 10001010:
Now for each 1 digit in the number we raise 2 to the power of that position:
These are all the powers: 7 6 5 4 3 2 1 0

1 0 0 0 1 0 1 0
|       |   |
|       |    ----2 to the power of 1 = 2
|        --------2 to the power of 3 = 8
 ----------------2 to the power of 7 = 128

And Add up the list: 2+8+128 = 138

Remember you raise 2 to the power of the position and the position starts from right to left and starts at zero not 1! Another example with a larger number, 110001001001 (I use the ^ symbol to
denote “to the power of”).

These are the powers: 11 10 9 8 7 6 5 4 3 2 1 0

Binary number: 1 1 0 0 0 1 0 0 1 0 0 1
               | |       |     |     |
               | |       |     |      --2^0 = 1
               | |       |      --------2^3 = 8 
               | |        --------------2^6 = 64
               |  ----------------------2^10 = 1024
                ------------------------2^11 = 2048

Add the list up: 1+8+64+1024+2048 = 3145

Thats all! –Jon Zorn [502]


This site and it’s content is copyright F.C.O. enr. 1998.
All original art and graphics are watermarked for authentication purposes. The content submitted by contributors is copyright by the respectful owner.

 

 

 

======================

*==============================================================*
* TeamFortress v2.14 tfortmap.txt *
*==============================================================*
Introduction
————

NOTE: If you’re interested in seeing what was added in version 2.1,
I suggest you check out the “Summary of Changes” at the bottom
of the file.

If you haven’t read the readme.txt by now, please do.

This file contains details about making Maps specifically
for TeamFortress. You don’t need to know these details to
play the game, even on a TeamFortress Map.

Beware! This is not for the faint-hearted!

If you do make a TeamFortressMap, could you mail us and tell us?
We’d like to create a collection of TeamFortressMaps on the
WWW page (http://yallara.cs.rmit.edu.au/~cookj)
Also, a collection of TeamFortressMaps is also kept at
ftp://ftp.cdrom.com/pub/idgames2/levels/team_fortress/

There are few maps on the WWW page that use these specs to
do interesting things. Don’t forget you can simply view the
.bsp file to look at the entities inside the map, so if
you want to see some examples of Goals, etc, I suggest you
look at those maps.

Oh, and some variables we use for the Goal entities are variables
used for completely different things for other entities. We did
this to preserve variable space.

Also, this document has been re-hashed so many times that it’s
almost certain that I missed updating a bitfield number or
something. If you see anything that looks wierd, or is
contradicted somewhere else in the document, please tell me.

Finally, The TeamFortress Entity Editor is available on
the WWW page. It’s a Windows program that creates goals, items,
etc for you. I suggest you read these specs, and skip over
the Technical Info. Then, just use the Entity Editor to make
your goals.
Reading the Technical Info is good, since it will give you a
better understanding of Goal entities and their uses, but don’t
bother trying to remember it all.

Robin.

—————————————————————————-
TeamFortressMap Specification
—————————————————————————-
Apart from being a normal map, TeamFortress Maps
have the following changes:

Auto Detection
Team SpawnPoints
Armor

Goals
GoalItems
Timer Goals

If you are only interested in the changes made to the map specs
since the last version, to update your maps etc, then check
out the section entitled “Summary of Changes”

—————————————————————————-
Notes about using existing Entities
—————————————————————————-
In TeamFortress, we have an Observer mode, where players who haven’t
chosen a class, or have run out of lives, are able to cycle through
all the Intermission points to watch the action.
Because of this, make sure you have a few Intermission points at
interesting viewing locations around the map. If you don’t have some
of these, Observers won’t have much fun.

—————————————————————————-
Auto Detection
—————————————————————————-
TeamFortress maps will be automatically detected by the TeamFortress patch
if you put an entity in the map with a classname of “info_tfdetect”.
This makes TeamFortress automatically turn on the FORTRESSMAP toggleflag,
and turn on teamplay.

Also, once the TeamFortress map has been detected, the patch will look
for any spawnpoints dedicated to teams (see below).
If it finds any, it will look for the highest team number that is used.
Once found, it will limit anybody attempting to join a team to that
number.
At the moment, Maps are limited to a maximum of 4 teams.
E.g. If the highest team number used by a Team Spawnpoint is 3, then
the patch will only allow players to join teams 1, 2, and 3.

 

The detection entity can also do the following:
– specify a version string in the “broadcast” variable.
This will be compared with the version string for the TeamFortress
patch. If the don’t match, a warning will be displayed to the
player that their patch and the map are incompatible.
The version string is in the format as follows:
TeamFortress v2.1
The string is case sensitive, so make sure you’ve got it right.
Don’t put a \n on the end of it.

– Set the state of the toggleflags when the map starts up. The
value of the toggleflags should be in the “impulse” variable.
The bits for the toggleflags are:

Bit 1 (1) : Off – ClasSkin , On – Multiskin
Bit 2 (2) : Off – ClassPersistence Off , On – ClassPersistence On
Bit 3 (4) : Off – CheatChecking Off , On – CheatChecking On
Bit 4 (8) : Off – FortressMap Off , On – FortressMap On
Bit 5 (16) : Off – RespawnDelay Off , On – RespawnDelay (See below)
Bit 6 (32) : Off – RespawnDelay Off , On – RespawnDelay (See below)
Bit 7 (64) : Off – AutoTeam Off , On – AutoTeam On
Bit 8 (128) : Off – Individual Frags , On – Frags = TeamScore

N.B. FortressMap will be set On automatically by the the
Detection entity anyway, so just ignore that Bit.

N.B. The RespawnDelay settings takes 2 bits. The value of both of
them determines the level of respawn delay, as follows:
Bit 5 Bit 6 Result
Off Off No Respawn delays
On Off 5 Second respawn delay
Off On 10 Second respawn delay
On On 20 Second respawn delay

– Specify a string which is then “localcmd”ed. This allows you
to automatically set gravity, friction, etc.
The string should be stored in the “message” variable.

– Put a limit on the number of lives each player has. When a player
runs out of lives, they are stuck in observer mode for the rest
of the level.
Lives for each player depend on the setting for the team they
belong to. The number of lives players of each team be should
be specified in the following variables:
Team 1 : “ammo_shells”
Team 2 : “ammo_nails”
Team 3 : “ammo_rockets”
Team 4 : “ammo_cells”
If the value of any team is 0, then the players of that team get
infinite lives.

– Specify any playerclass that is _not_ allowed on this map
for each particular team.
The bits of the four variables are used for this.
The variables are as follows:
Team 1 : “maxammo_shells”
Team 2 : “maxammo_nails”
Team 3 : “maxammo_rockets”
Team 4 : “maxammo_cells”
Also, the “playerclass” variable can be used to restrict classes
for all teams.
The bits for all the variables are as follows:
Bit 1 (1) : No Scout
Bit 2 (2) : No Sniper
Bit 3 (4) : No Soldier
Bit 4 (8) : No Demolitions Man
Bit 5 (16) : No Combat Medic
Bit 6 (32) : No Heavy Weapons Guy
Bit 7 (64) : No Pyro
Bit 8 (128) : No Random PlayerClass
E.g. If the “maxammo_nails” variable is set to 3, then players
in Team 2 will be unable to play Scouts or Snipers.

Finally, if you want the Team to be a special team for a fancy
map, such as the President in President-Quake, then you can
restrict the team to only play Civilian Class. Do this by setting
the team’s variable to “-1”.

Notes:
When using the “message” variable to set do localcmd’s, you
can issue more than one command by seperating them with \n
Make sure you end it with a \n too.
E.g. The following changes the gravity and the friction.
“message” “sv_gravity 200\nsv_friction .5\n”

—————————————————————————-
Team Spawnpoints
—————————————————————————-
There is now a new entity for Team Spawnpoints. Team Spawnpoints are used
to make players only spawn in points designated for their team. Use it
to make players spawn inside their own base/fortress.
The entity is called “info_player_teamspawn”, and the “team_no” variable
sets the team_no that owns this spawnpoint.

Also, spawnpoints allow you to give any player the spawns from this
point a GoalItem. This is done using the following variables:
“items” : Contains the ID of the GoalItem to give
“message” : Message displayed to anyone who spawns on this
point.

The “goal_activation” of the Spawnpoint determines how the above works:

1 : If set, then every player who spawns on this point
will be given a copy of the GoalItem. Otherwise, only
the first player to spawn will be given it.
2 : If set, then every player who spawns on this point
will have the “message” displayed to them. Otherwise, only
the first player to spawn will be see it.

Also, the “goal_effects” variable of the spawnpoint sets the re-use
behaviour of the spawnpoint. If it’s 1, then the spawnpoint removes
itself after someone has spawned on it.

 

—————————————————————————-
Armor
—————————————————————————-
TeamFortress supports not only armor levels and absorption percentages the
same way Quake does: it also supports armor classes. E.g. Armor can be designed
to prevent particular attack types.
The Armor Types are as follows:

Kevlar : Better protection against Bullets
Wooden 😉 : Better protection against Nails
Blast : Better protection against Explosions
Shock : Better protection against Electricity
Ceramic : Better protection against Fire

To use these armor types, just create an armor entity on the map as usual,
and set it’s “armorclass” variable. The “armorclass” is used as bitfields,
as follows:
Bit 1 (1) : Kevlar
Bit 2 (2) : Wooden
Bit 3 (4) : Blast
Bit 4 (8) : Shock
Bit 5 (16) : Ceramic

Any combination of armor is legal, but try not to have armor which
is too good.

—————————————————————————-
Goal Summary / Terminology
—————————————————————————-
Goals are the really fun things you can do with TeamFortressMaps.
A goal is simply an entity you place in a map. It is then handled
in the game based on the flags you give it. They’re essentially
more complex triggers. I’ve kept all the code separate from
the triggers tho, to allow us to toggle the use of them ingame.
The flags and variables set for a Goal allow us to create powerful
maps without changing the QuakeC code at all.
———–
Goals
———–
Goals are always in one of the following states:

ACTIVE : The goal has been activated in some way.
It cannot be touched by a player.
Active goals return to the INACTIVE state based on their
result criteria, or when they’re forced into INACTIVE state
by another goal.

INACTIVE: The goal is not active.
It can be activated by players, and if the players meet the
activation criteria, the goal moves to the ACTIVE state.

REMOVED : The goal is not active.
It cannot be touched by players.
Removed goals can still be activated by other goals, in which
case they move to the ACTIVE state.
Removed goals can be restored to the INACTIVE by being restored
by another goal.

Terminology
———–

activated : Goal moves to the ACTIVE state
inactivate : If the Goal is in ACTIVE state, it moves to the INACTIVE state
removed : Goal moves to the REMOVED state
restored : If the Goal is in REMOVED state, it moves to the INACTIVE state

returned : GoalItems can be returned to their starting point, based on
a number of settings.

Goal Group : A group of goals that can be altered as one.

Activating Player(AP): The player who either touched the Goal, or set the
detpack which touched the Goal. In the case of GoalItems,
the player that’s attempting to pick up the GoalItem.

Actions
——-
When goals go to ACTIVE state, they can perform various actions.
These include:

– Increase the score of the team the AP belongs to.
– Display a message to all players
– Display a message just to the AP

– Alter the details of one or more players, as follows:
– Give the player extra lives (if applicable)
– Alter a player’s health/ammo/armor/powerups
– Give the player(s) a GoalItem
– Remove a GoalItem from the player(s)

The player can be the AP, all the members of a Team the AP is/isn’t in,
all the players on the map, everyone but the AP, all the players
within a specified distance from the goal, or everyone in/not in one
particular team.

– Activate another goal, applying the bonuses of the goal to the AP
– Activate another goal, without applying the bonuses of the goal to the AP
– Inactivate another goal
– Remove another goal
– Restore another goal

– Activate a goal if all the goals in a goal group are now ACTIVE
– Activate a group of goals
– Inactivate a group of goals
– Remove a group of goals
– Restore a group of goals

– Display team’s scores and End the Level

Activation
———-
Goals can be activated in one of the following ways:

– Touched by a player
– Touched by a detpack explosion
– Activated by another Goal
– Activated by a Goal Group command from another Goal
– Activated by a Quake Trigger

Additionally, the AP’s details can be checked.
This allows you to have goals that are only activated if:

– The AP is of a particular class
– The AP has a particular GoalItem
– The AP is of a particular team

Goals can also be activated only if the AP details _don’t_
meet the criteria specified.

Inactivation
————
Goals can be inactivated in one of the following ways:

– Inactivated after being ACTIVE for a specified time
– Inactivated by another Goal
– Inactivated by a Goal Group command from another Goal

Also, some goals are marked as Multiple Goals. They return to INACTIVE
state immediately after they become ACTIVE.

Removal
——-
Goals can be removed in one of the following ways:

– Removed after being activated
– Removed by another Goal
– Removed by a Goal Group command from another Goal
– Removed by a Quake Trigger

Restoration
———–
Goals can be restored in one of the following ways:

– Restored by a GoalItem when it Returns (See below).
– Restored by another Goal
– Restored by a Goal Group command from another Goal

—————————————————————————-
GoalItems
—————————————————————————-
GoalItems are items that players can carry around.
GoalItems can be placed directly into a map, where a player
can collect them as usual.
Also, on activation, Goals can give/remove GoalItems from the AP.
The details of players attempting to collect the GoalItems can
also be checked.
This allows you to have GoalItems that can only be picked up if:

– The Player is of a particular class
– The Player has a particular GoalItem
– The Player is of a particular team

GoalItems can also be set to only be picked up by players who
meet the AP criteria.

GoalItems can be returned to their starting position in any of the
following circumstances:

– When it’s dropped by a dying player
– When it’s removed from an AP by a Goal activation
– When it’s untouched for a specified time

GoalItems can affect players in the same way Goals can, except that
any modifications done by the GoalItem are permanent, until the
GoalItem is dropped.
E.g. if a GoalItem grants invisibility to any players, they stay
invisible until the GoalItem is dropped/removed.

Also, when they’re picked up by a player, GoalItems can perform the
following actions on Goals:

– Activate another goal, applying the bonuses of the goal to the AP
– Activate another goal, without applying the bonuses of the goal to the AP
– Inactivate another goal
– Remove another goal
– Restore another goal

– Activate a group of goals
– Inactivate a group of goals
– Remove a group of goals
– Restore a group of goals

GoalItems can also belong to Groups. GoalItems groups are kept
separate from Goal Groups. Operations on either of them do not
affect the other type, even if the Group No is the same.
Using GoalItem groups, GoalItems can:

– Activate a goal if all the Items in a GoalItem group are being
carried by players.
– Activate a goal if all the Items in a GoalItem group are being
carried by one particular player.

—————————————————————————-
Timer Goals
—————————————————————————-
There is also a special type of goal called a Timer Goal. TG’s
have a Timer Delay. TG’s start INACTIVE, and then every Timer
Delay seconds they activate, do their results, and inactivate.
They can also be forced to activate by other Goals. They cannot
be activated by player or detpack touches.
N.B. When a TG goes ACTIVE, it does not have any AP, and hence
_cannot_ activate other goals, or apply modifications to
individual players.

N.B. When a TG is forced to activate by another goal, they reset
their internal timer that decides when they are next going
to activate.
E.g. If a TG with a setting of 5 seconds is forced to activate,
it will reset it’s timer, and still activate 5 seconds after
it was forced to activate.

So, as a quick summary, TG’s can have their state altered as
usual by other goals, and when they activate, they can:

– Display a message to all players

– Alter the details of one or more players, as follows:
– Give a player extra lives (if applicable)
– Alter a player’s health/ammo/armor/powerups
– Give a player a GoalItem
– Remove a player from an AP

The player can be all the members of a Team, all the players
on the map, or all the players within a specified distance from
the goal.

– Inactivate another goal
– Remove another goal
– Restore another goal

– Inactivate a group of goals
– Remove a group of goals
– Restore a group of goals

– Display team’s scores and End the Level

At the moment, TG’s are handled in an ugly way, so be extremely
careful when using them. The next release of this should have them
wrapped up in a neat little package, where you can’t do
anything wrong with them 🙂

—————————————————————————-
Standard Quake Triggers and TeamFortress Goals
—————————————————————————-
Quake triggers can be linked into TF Goals and vice versa.
When they are activated, a trigger can affect Goals
in the following ways:

– Activate a goal, applying the bonuses of the goal to the AP
– Activate a goal, without applying the bonuses of the goal to the AP
– Inactivate another goal
– Remove another goal
– Restore another goal

– Activate a group of goals
– Inactivate a group of goals
– Remove a group of goals
– Restore a group of goals

When a Goal is activated, it can affect Quake Triggers
in the following ways:

– Activate Quake Trigger(s)
– Remove Quake Trigger(s)

Don’t forget that Quake Triggers include Buttons, Doors,
Platforms, Health Boxes, Backpacks, Weapons, Armor, Keys, Sigils,
Monsters, Spikeshooters, Lights, Special Walls, and
Teleporters..
The ‘activation’ of any of these things can affect goals
if you want it to.
Triggers Activate when:

– Collected by a player
Health Boxes, Weapons, Armor, Keys, Sigils, Backpacks
– Touched by a player or hit by a weapon
Buttons, Doors, Platforms, Special Walls,Teleporters
– Killed
Monsters

Also, Quake Triggers have been enhanced so that any Trigger
can be made to triggered only by a player if:
– The Player is of a particular class
– The Player has a particular GoalItem
– The Player is of a particular team

This means that if the player does not match the criteria,
the following happens:
– Health Boxes, Weapons, Armor, Keys, Sigils, Backpacks
Player cannot pick them up.
– Buttons, Doors, Platforms, Special Walls, Teleporters
Player cannot activate/open/use them.
– Monsters
Player cannot hurt them.

The result of ‘Activation’ of Triggers are as follows:

– Health Boxes, Weapons, Armor, Keys, Sigils
Bad. These items should never be activated by
Goals or Triggers. They should only be used
to activate other Goals/Triggers.

– Buttons
The button, if not already depressed, depressed
and sets off whatever it was designed to do.

– Doors
If the door is a DOOR_TOGGLE type door, it reveres it’s
current state. e.g. Opens if it’s closed, closes if it’s open.
It not, if it’s closed, it opens.

– Platforms
If it has not been triggered before, it will lower. Otherwise,
it does nothing.

– Special Walls
Changes it’s texture.

– Teleporters
Doesn’t do anything.

– Monsters
Wakes the monster.

These are a rough guide. You should look at the qc code which handles
trigger activation to see the details. Every Trigger that can be
activated by another trigger/goal has a .use function.
Look inside it to see how activations for that type of Trigger
are handled.

—————————————————————————-
Order of Actions
—————————————————————————-
You don’t really need to know the order in which the actions are applied,
and they’re far too complex now to describe them in any useful way. The
only important thing of note is:

The Group Goal alterations are applied _before_ the single goal
alterations. This is so you can do things like:
Inactivate an entire group, and then activate one goal in that group.
Remove an entire group, and then restore one goal in that group.

—————————————————————————-
Goal Technical Info
—————————————————————————-
Goal behaviour is entirely defined by the variables of the Goal object
when it is spawned at the start of the level. These variables are set
in the map file. Just add up the flags that you want and set the
variable to that.
E.g. If you want a goal that can be activated by a Player touch(1) and
a detpack explosion(2), you would set the “goal_activation” variable
to 3.

Don’t worry! It’s actually fairly easy 🙂
N.B. Bit descriptions marked with (*) are dangerous, and should
be handled with care.

The variables of the Goals are handled as follows:

classname : “info_tfgoal”
broadcast : Message broadcasted when this goal is activated, if any.
Don’t forget to put the \n at the end of it.
message : Message displayed to the activating player, if any.
Don’t forget to put the \n at the end of it.
deathtype : Message broadcasted if the goal kills the activating
player. It is appended to the name of the player.
E.g. deathtype = ” gets killed by a goal!\n” displays
Bro gets killed by a goal!
Not needed if this goal doesn’t do damage to a player.
Don’t forget to put the \n at the end of it.
target : If set, any Quake Triggers with the same name as this
will be activated.
killtarget : If set, any Quake Triggers with the same name as this
will be removed.
count : Score the team of the player who activates this goal gets.
Use negative numbers for penalty goals.
goal_no : A unique number ID identifying this goal. Used to make
references to this goal in other goals.
group_no : The number of the goal group this goal belongs to.
netname : This isn’t used in Quake, but in the TeamFortress
Entity Editor, it’s used as the name for this goal.
noise : A .wav file played when the goal is activated.
Make sure it’s a .wav file you’ve got. It’s probably
best to use one of Quake’s .wavs.
If unspecified, no sound is played.
mdl : The .mdl file used for this item. Make sure it’s a .mdl
file you’ve got. It’s probably best to use one of Quake’s
.mdls. If unspecified, the Goal is invisible.

All the following attributes are applied to the attributes of
every player specified by the “goal_effect”(see below).
(e.g. the self.health is added to the health of the player)
lives : Use negative values to remove lives from the player
health : Use negative values to hurt the player
armortype : Use negative values to remove armor % reduction
armorvalue : Use negative values to remove armor
armorclass : The type of armor the player gets. (See Armor Types above)
frags : Use negative values to lower frag count
ammo_shells : Use negative values to remove ammo
ammo_nails : Use negative values to remove ammo
ammo_rockets : Use negative values to remove ammo
ammo_cells : Use negative values to remove ammo
ammo_medikit : Use negative values to remove ammo
ammo_detpack : Use negative values to remove ammo

Note A: After applying all these values to the player, the playerclass
limitations of the player are applied. So if you set the health of
the player over that allowed, by his/her playerclass, it will then
be lowered to the max_health for that playerclass.

Note B: “lives” allows you to give/remove lives from players. This is only
useful if the current map limits the number of lives each player
has. See the Auto Detection section above.

TeamFortress Grenades can be given/removed to/from the player by setting
the following two variables.
no_grenades_1 : Use negative values to remove grenades
no_grenades_2 : Use negative values to remove grenades

And finally, the following attributes are added to the global time
and applied to every player specified by the “goal_effect”(see below).
(e.g. if the goal’s invincible_finished is 5, then the player will
get invincibility for 5 seconds after activating the goal.)
invincible_finished : Pentagram of Protection
invisible_finished : Ring of Shadows
super_damage_finished : Quad Damage
radsuit_finished : Environmental Suit

—————————
Goal Activation
—————————
The “goal_activation” of the goals determine how the goal is activated.
The bitfields are as follows:

Activation Details
1 : Activated when touched by a player.
2 : Activated when touched by a detpack explosion.

AP Details
– If the “items_allowed” variable is non-zero, the AP must be
carrying a GoalItem with an ID of “items_allowed”.
– If the “playerclass” variable is non-zero, the AP must be
be of the same class specified in “playerclass”.
Classes are:
Scout : 1
Sniper : 2
Soldier : 3
Demolitions Man : 4
Medic : 5
Heavy Weapons Guy : 6
– If the “team_no” variable is non-zero, the AP must belong
to the same team as the number specified in “team_no”.

4 : This goal is only activated if the AP details above are _not_ met.

—————————
Goal Effects
—————————
The “goal_effects” of the goal defines which players are affected by
the activation of the goal. It defaults to 1, so that only the AP is
affected.
The player modifications of this Goal are applied to every player
that matches these criteria. GoalItems will also be given/removed
to/from every one of the players matching the criteria.
The bitfields are as follows:

Basics
1 : The AP is affected
2 : Everyone on the AP’s team is affected
4 : Everyone not on the AP’s team is affected
8 : Everyone except the AP is affected

Specific Groups
– If the “maxammo_shells” variable is non-zero, then all members of that
team are affected.
– If the “maxammo_nails” variable is non-zero, then all members of any
team except that one are affected.

Radius
– If the “t_length” variable is non-zero, then everyone within
“t_length” distance of the goal is affected, unless the above
bitfields are in use.
If they are, then the bitfield check is applied only to those
caught in the radius.
E.g. if “t_length” is 50, and “goal_effects” is 4, then everyone
within 50 who isn’t on the AP’s team is affected.

16 : If set, the radius effect is obstructed by walls.

Note A: If the Goal gives out a GoalItem, then every player who matches
this criteria will get the GoalItem. This can result in lots of these
GoalItems, so be careful.

—————————
Goal Results
—————————
The “goal_result” of the goals determine how the goal behaves when it is
activated, and the results of it’s activation. It also determines what it
will do to any players that match it’s “goal_effects” criteria.
The bitfields are as follows:

Respawn behaviour
1 : The goal is immediately removed after it is activated.

– If the “wait” variable is non-zero, then the Goal stays ACTIVE for
the “wait” seconds, and then inactivates.

GoalItem behaviour
– If the “items” variable is non-zero, the Goal gives a GoalItem
to the player. The GoalItem it gives is the Item with a GoalNo
of “items”.
– If the “axhitme” variable is non-zero, the Goal removes a GoalItem
from the player. The GoalItem it removes is the Item with a GoalNo
of “axhitme”.
If the player does not have the GoalItem, nothing happens.

Goal behaviour
2 : If this is set, the goals activated by this one apply
their AP modifications. Otherwise, they don’t.

– If the “activate_goal_no” variable is non-zero, then the Goal with
a Goal_No equal to the variable is activated.
– If the “inactivate_goal_no” variable is non-zero, then the Goal with
a Goal_No equal to the variable is inactivated.
– If the “remove_goal_no” variable is non-zero, then the Goal with
a Goal_No equal to the variable is removed.
– If the “restore_goal_no” variable is non-zero, then the Goal with
a Goal_No equal to the variable is restored.

Miscellaneous
4 : Display teamscores, fire intermission, and end the level

—-
Note A: If (1) is not set and their is no “wait” specified, then the
goal is a Multiple Goal.
After it activates, it will automatically inactivate.
This is not always a good idea. When a player runs over an entity,
the touch function will usually be run about 6 or 7 times, so the
player will activate the goal multiple times. If you want a player
to be able to activate it over and over again, make it respawn
every 2-3 seconds.
This is especially dangerous if the goal gives out an item on
activation, since you will end up with a _lot_ of items.
Of course, you may want this for a goal that is activated remotely
by another goal at certain times.

Note B: When a goal is activated by another goal, _no_ checking is done
based on the “goal_activation” variable of the target goal. It is
simply activated. The AP who activated the original goal is used
as the activator for all the goals, but the stats of an activated
goal are only added to the player’s if (2) is set on the goal
that activates it.
GoalItems are always given/removed.

—————————
Goal Groups
—————————
Goal groups allow you to do operations of multiple goals in one go.
The “group_no” of a Goal defines the ID of goal group it is in.
Any goal group operation affects all goals with the specified ID.
A goal’s “goal_group” specifies what operations, if any, it performs
on any goal groups.
Since I’ve cleaned up the goal group handling to get rid of bitflags
which aren’t needed, there are no bits used in the “goal_group”
variable anymore 🙂
I’ve left it in anyway, since some may come along later.
Goal Group handling is as follows:

– If the “all_active” variable is non-zero, then when this goal is activated,
a check is done. If all the goals in the group specified in the “all_active”
variable are ACTIVE, activate a goal with a goal number equal to the
value of the “last_impulse” variable.

– If the “activate_group_no” variable is non-zero, activate all the
goals in that Group.
– If the “inactivate_group_no” variable is non-zero, inactivate all the
goals in that Group.
– If the “remove_group_no” variable is non-zero, remove all the
goals in that Group.
– If the “restore_group_no” variable is non-zero, restore all the
goals in that Group.

—-
Note A: When a goal is activated by another goal, _no_ checking is done
based on the “goal_activation” variable of the target goal. It is
simply activated. The AP who activated the original goal is used
as the activator for all the group goals.
Bonuses of goals in groups are _never_ applied to the activating player.
GoalItems are always given/removed.

—————————————————————————-
Timer Goal Technical Info
—————————————————————————-
Timer Goals are basically identical to Goals, except they are never activated
by players or detpack explosions. They automatically activate every
“search_time” seconds. They can also be activated by other goals and triggers.
The variables of Timer Goals are the same as Goals, except for:

classname : “info_tfgoal_timer”

search_time : The time in seconds that this goal activates.
e.g. a search_time of 2 makes this goal activate every
2 seconds.

As a result of their method of activation, Timer Goals can _never_ do
anything that requires an AP, and they can’t activate any other Goals.
They _can_ do operations on groups of players, such as all the players
on the map, or all the players in a team, etc.
This is done using the “goal_effect” variable in much the same way
as Goals, as follows:
Basics
1 : Illegal for Timer Goals.
2 : Illegal for Timer Goals.
4 : Illegal for Timer Goals.
8 : Illegal for Timer Goals.
16 : Everyone is affected

Radius
– If the “t_length” variable is non-zero, then everyone within
“t_length” distance of the goal is affected, unless they’re
overridden by the above bitfields.
E.g. if “t_length” is 50, and “goal_effects” is 4, then everyone
within 50 who isn’t on the AP’s team is affected.

32 : If set, the radius effect is obstructed by walls.

Specific Groups
– If the “maxammo_shells” variable is non-zero, then all members of that
team are affected.
– If the “maxammo_nails” variable is non-zero, then all members of any
team except that one are affected.

Note A : The first 4 bits in the “goal_effects” are illegal for Timer Goals,
and should _never_ be set, because they involve an AP.

—————————————————————————-
Goal Items Technical Info
—————————————————————————-
GoalItems do not have to be given to a player by a Goal activation.
They can be placed directly into a map.
The variables of the GoalItems are as follows:

classname : “item_tfgoal”
netname : Name of this GoalItem.
broadcast : Message broadcasted when this goalitem is retrieved, if any.
Don’t forget to put the \n at the end of it.
message : Message displayed to a player when they get the Item, if any.
Don’t forget to put the \n at the end of it.
noise : A .wav file played when the item is collected.
Make sure it’s a .wav file you’ve got. It’s probably
best to use one of Quake’s .wavs.
If unspecified, no sound is played.
mdl : The .mdl file used for this item. Make sure it’s a .mdl
file you’ve got. It’s probably best to use one of Quake’s
.mdls. It defaults to the silver key.
goal_no : A unique number identifying this GoalItem. Used to make
references to this Item in goals.
goal_group : The number of the goalitem group this goal belongs to.

GoalItems can also modify player details in the same Goals can, using
the “goal_effects” variable (see above).
The tricky bit is that any Player Modifications done by goals are added
when the player first picks the item up, and are _removed_ when the player
loses the item.
E.g. If the item has a health of 40, then the player gets 40 health
added to their health when he/she picks it up. Then, when they
drop it, he/she loses 40 health.
There are two exceptions to this:

1. Power-Ups. Items give the players a powerup for the entire time the
player has the item. The time specified in the _finished variable
is ignored: If it’s non-zero, then all players the GoalItem specifies
get the power-up while item is still carried.

2. GoalItems. Items given/removed by another GoalItem when it’s picked up
are not removed/given back when the original GoalItem is dropped/removed.

With the “goal_effects” variable you can make Items affect more than
one player. This is done exactly as if it was just one person.
E.g. If the Item adds health to everyone, then as soon as any player
picks it up, the modifications are applied to everyone, and as soon as
it’s dropped, the modifications are removed from everyone.

Also, GoalItems can affect Goals in much the same way as other Goals,
as follows:

– If the “activate_goal_no” variable is non-zero, then the Goal with
a Goal_No equal to the variable is activated.
– If the “inactivate_goal_no” variable is non-zero, then the Goal with
a Goal_No equal to the variable is inactivated.
– If the “remove_goal_no” variable is non-zero, then the Goal with
a Goal_No equal to the variable is removed.
– If the “restore_goal_no” variable is non-zero, then the Goal with
a Goal_No equal to the variable is restored.

– If the “activate_group_no” variable is non-zero, activate all the
goals in that Group.
– If the “inactivate_group_no” variable is non-zero, inactivate all the
goals in that Group.
– If the “remove_group_no” variable is non-zero, remove all the
goals in that Group.
– If the “restore_group_no” variable is non-zero, restore all the
goals in that Group.

– If the “goal_result” variable of the GoalItem is 0, then any Goals
activated by this Item _don’t_ add bonuses to the AP. If it’s 2, they do.

When Goals are activated by a GoalItem, the AP used to activate the Goals
is the Player who picked up the Item. AP Modifications are applied if (512)
is set it the “goal_activation” variable (see below).
GoalItems themselves have various bitfields to depict the GoalItem’s
behaviour. The bitfields are stored in the GoalItem’s “goal_activation”
variable, and are:

Carrying Details
1 : Any player carrying this item will glow.
2 : Any player carrying this item will move at half-speed.
(*) 4 : When a player carrying this is killed, the item will be dropped

Returning
8 : Return the item if dropped by a dying player
16 : Return the item if removed from a player by a goal activation.
32 : Return the item if removed from the map by the action of the
(128) (see below).

– If the “impulse” variable is non-zero, then when the GoalItem
is returned by one of the above, the goal with a Goal No equal to
the “impulse” is restored.

Pickup Details
– If the “items_allowed” variable is non-zero, the Player must be
carrying a GoalItem with an ID matching the variable. If not,
he/she will not be able to get this item.
– If the “playerclass” variable is non-zero, the Player must be
be of the same class specified in the variable. If not,
he/she will not be able to get this item.
Classes are:
Scout : 1
Sniper : 2
Soldier : 3
Demolitions Man : 4
Medic : 5
Heavy Weapons Guy : 6
– If the “team_no” variable is non-zero, the Player must belong
to the same team as the number specified in the variable.
If not, he/she will not be able to get this item.

64 : This GoalItem can only be picked up by a player if they _don’t_
match the player details above.

Miscellaneous
128 : If this is set, then, after the goal is dropped by a player,
if it has not been touched for the time specified in the
“pausetime” variable, in seconds, it is removed.

– If the “distance” variable is non-zero, then, If all GoalItems in the
goalitem group specified by “distance” are being carried by players,
activate a goal, the Goal No of which is specified in “pain_finished”.
– If the “speed” variable is non-zero, then, If all GoalItems in the
goalitem group specified by “speed” are being carried by one player,
activate a goal, the Goal No of which is specified in “attack_finished”.

256 : If a player carrying this Item dies, they keep it, even after
they respawn.

512 : If this Item is not being carried by a goal, it glows.

—-
Note A: (4) is dangerous. If you have goals giving out this item multiple
times, make sure the item is getting removed somehow, or you could
end up with too many items on the map.

Note B: The Pickup Details are only used when a player picks up this
item directly. If this item is given to an AP by a goal, these
are ignored.

Note D: (128) allows you to make items that are untouched for a while
disappear. This should be set if you have Goals that give out
multiple copies of GoalItems that are dropped when players
carrying them are killed. Otherwise you could end up with too many
entities on the map 🙂
If you have a GoalItem that is only given out once and is dropped
when players with it die, you will probably want to set (128)
and (32), so that if it falls in lava or something, it’ll be
returned.
If you don’t specify a value, “pausetime” defaults to 2 minutes.

—————————————————————————-
Quake Triggers that use TeamFortress Goals Technical Details
—————————————————————————-
For Triggers to use Goals, you need to use various variables.
Triggers can use the same AP criteria matching as Goals, as follows:

– If the “items_allowed” variable is non-zero, the AP must be
carrying a GoalItem with an ID of “items_allowed”.
– If the “playerclass” variable is non-zero, the AP must be
be of the same class specified in “playerclass”.
Classes are:
Scout : 1
Sniper : 2
Soldier : 3
Demolitions Man : 4
Medic : 5
Heavy Weapons Guy : 6
– If the “team_no” variable is non-zero, the AP must belong
to the same team as the number specified in “team_no”.

 

If any of the following variables is not set, or 0, then the effect of that
variable is simply not used.
The variables are:

activate_goal_no : Activates a goal with a goal_no equal to this.
inactivate_goal_no : Inactivates a goal with a goal_no equal to this.
remove_goal_no : Removes a goal with a goal_no equal to this.
restore_goal_no : Restores a goal with a goal_no equal to this.

activate_group_no : Activates a group of goals with a goal_group equal to this.
inactivate_group_no : Inactivates a group of goals with a goal_group equal to this.
remove_group_no : Removes a group of goals with a goal_group equal to this.
restore_group_no : Restores a group of goals with a goal_group equal to this.

 

Also:

– If the “goal_result” variable of the Trigger is 0, then any Goals
activated by this Trigger _don’t_ add bonuses to the AP. If it’s 2, they do.

– If the “all_active” variable is non-zero, then when this Trigger is activated,
a check is done. If all the goals in the group specified in the “all_active”
variable are ACTIVE, activate a goal with a goal number equal to the
value of the “last_impulse” variable.

In all cases, the AP for the goals will be set to the “activator”. If the
AP is not a player, then no player-related operations will be performed by
the Goals, or any Goals activated by those Goals.
This stuff is kind of dangerous, if the Trigger isn’t activated by a player,
and the Goals your playing with alter other Goals. Just be careful 🙂

—————————————————————————-
Summary of Changes
—————————————————————————-
This is a summary of changes in the map specs from TeamFortress v1.3x
to TeamFortress v2.x :

– All entities, most especially GoalItems, can specify the team
they belong to by putting the team number in the “owned_by” variable.

– The “goal_state” variable allows you to set the starting state
of a goal. The available states are:
Active 1
Inactive (default) 2
Removed 3

– Activation criteria for Goals/Items/Timers/Triggers can
now include the Checking of the state of other Goals
The following variables are used:
“if_goal_is_active” : If this is non-zero, the goal will only activate
if the goal with a “goal_no” matching
“if_goal_is_active” is active.
“if_goal_is_inactive” : As above, if the goal is inactive.
“if_goal_is_removed” : As above, if the goal is removed.

“if_group_is_active” : As above, except that all goals with a “group_no”
matching “if_group_is_active” must be active.
“if_group_is_inactive”: As above, if all the group is inactive.
“if_group_is_removed” : As above, if all the group is removed.

– Upon activation, Goals can now centerprint more intelligently,
as follows:
“broadcast” : Instead of being bprinted, it now gets
centerprinted to everyone, except the AP.
You’ll probably want to use “team_broadcast”
and “non_team_broadcast” instead.
“message” : Instead of sprinting to the AP, it now
centerprints.
“team_broadcast” : Gets centerprinted to all of the AP’s team,
except the AP.
“non_team_broadcast” : Gets centerprinted to all non-AP-teammembers.
If there is a “owners_team_broadcast” specified,
it isn’t centerprinted to members of the team
that own the goal/item.
“owners_team_broadcast” : Gets centerprinted to all the members of the
team that own the goal/item.

– The detection entity can now supply the Team Menu string, which
effectively allows you to provide names for team.
The string should be put in the detection entity’s “team_broadcast” var.
It gets centerprinted when player’s are asked to join a team,
so it should be similar to the following format:

“=== Choose your team ===\n\n1.. Team One \n\n\n\n\n7.. Bind my keys for me!\n\nFor full details on this patch:\nhttp://yallara.cs.rmit.edu.au/~cookj\n”
“=== Choose your team ===\n\n2.. Team One \n2.. Team Two \n\n\n\n\n7.. Bind my keys for me!\n\nFor full details on this patch:\nhttp://yallara.cs.rmit.edu.au/~cookj\n”
“=== Choose your team ===\n\n2.. Team One \n2.. Team Two \n3.. Team Three\n\n\n\n\n7.. Bind my keys for me!\n\nFor full details on this patch:\nhttp://yallara.cs.rmit.edu.au/~cookj\n”
“=== Choose your team ===\n\n3.. Team One \n2.. Team Two \n3.. Team Three\n4.. Team Four \n\n\n\n\n7.. Bind my keys for me!\n\nFor full details on this patch:\nhttp://yallara.cs.rmit.edu.au/~cookj\n”

Other examples are:

“=== Choose your team ===\n\n1.. Blue Team \n2.. Red Team \n\n\n\n7.. Bind keys”
“=== Choose your team ===\n\n1.. Attackers \n2.. Defenders \n\n\n\n7.. Bind keys”

You need to have a team number and choice for every team on your map.
Don’t forget that TF determines the number of teams on a map based upon
the Teamspawn points. If there are spawn points for 3 teams, then you
should have three teams in the team menu string.

N.B. Unfortunately, qbsp prevents you from having large strings, so you
have to be curt. If you get a “Token too large” error when qbsping,
then you’ve got the string too long.

– The detection entity can now specify a Map Help string in it’s
“non_team_broadcast” variable.
Player’s can do the Map Help impulse, and the Map Help string will
be printed. The string can be anything you like, but it should be
a quick description of the goal of the map, such as:
“Havoc: Get into the enemy’s castle and destroy their computer room!\n”

End the string with a \n.
N.B. Unfortunately, qbsp prevents you from having large strings, so you
have to be curt. If you get a “Token too large” error when qbsping,
then you’ve got the string too long.

– All Entities can specify whether they exist for different skill
settings, as follows:
“ex_skill_min” : The entity only exists when the skill variable
is >= to this value.
“ex_skill_max” : The entity only exists when the skill variable
is <= to this value.

N.B. The checking is done in the initial spawning, so if the skill
changes during the level, it will have no effect on the entities.

You can use this to do so many things, such as making plats move
in different trains at different skill levels, more/less monsters
and ammo and different levels, more secrets at higher levels, etc.

– Team Spawnpoints can set their “goal_effects” variable to 1, which
makes them remove themselves after someone has spawned on them.
Use this to make a team spawn inside their base initially, and then
spawn throughout the level for the rest of the game.

– Items now have a ItemGlow flag, which makes the Item glow when it’s
not being carried by a player.
The flag is Bit 10 (512) in the Goalitem’s “goal_activation” variable.

– The Detection entity can now restrict the classes available to
members of particular teams, in the following variables:
Team 1 : “maxammo_shells”
Team 2 : “maxammo_nails”
Team 3 : “maxammo_rockets”
Team 4 : “maxammo_cells”

– The Detection entity can now specify a Class Selection string for
any team. The default string allows them to pick any class, but you
may want to refine it for teams that have a limited selection of
classes.
If you don’t supply one, the default will be used.
The strings should be put in following Detection entity variables :
Team 1 String : “noise1”
Team 2 String : “noise2”
Team 3 String : “noise3”
Team 4 String : “noise4”

The default string looks like this:

“=== Choose your class ===\n\n1.. Scout \n2.. Sniper \n3.. Soldier \n4.. Demoman \n5.. Medic \n6.. Hvwep \n7.. Pyro \n8.. Randompc\n”

But if you restricted Team 1 to Scout, Demoman, and Medic, you might
want to set the “team1_class_string” variable to:

“=== Choose your class ===\n\n1.. Scout \n4.. Demoman \n5.. Medic \n”

N.B. You _MUST_ not alter the numbering of the class.
e.g. Sniper must always be selected with 2, Demoman with 4, etc.
N.B. Unfortunately, qbsp prevents you from having large strings, so you
have to be curt. If you get a “Token too large” error when qbsping,
then you’ve got the string too long.

– Any Goal can now specify an ‘else’ goal. This is a goal which is
activated if this goal fails to activate because it’s Criteria wasn’t met.
The “goal_no” of the ‘else’ goal should be specified in the Goal’s
“else_goal” variable.

– The Detection entity can now specify a maximum number of players
for each team. The default is 0, which is unlimited.
The player limits should be put in the following variables of
the Detection Entity :
Team 1 : “ammo_medikit”
Team 2 : “ammo_detpack”
Team 3 : “maxammo_medikit”
Team 4 : “maxammo_detpack”

N.B. The total number of players _MUST_ be >= 16. This is the total
number of players for the _existing_ teams.
e.g. if you have TeamSpawnpoints for only 2 teams, then the
total number of players allowed in the two teams must be >= 16.

– Any Goal can now display the status of upto 4 GoalItems when it’s
activated. The Goal specifies 6 different strings, which are used
to do the displaying for all the items.
The item’s “goal_no” are specified in the following variables:
“display_item_status1” : Item 1
“display_item_status2” : Item 2
“display_item_status3” : Item 2
“display_item_status4” : Item 2

The strings are specified in the following variables:
“team_str_home” : Displayed when the item is at the point
it originally spawned at.
“team_str_moved” : Displayed if the item has been moved from
it’s original spawning point.
“team_str_carried” : Displayed if the item is being carried. It
is prepended to the carrier’s name, or ” You”
if the Player is carrying the item.
e.g. “Your flag is being carried by” Bro.
“non_team_str_home” : Displayed when the item is at the point
it originally spawned at.
“non_team_str_moved” : Displayed if the item has been moved from
it’s original spawning point.
“non_team_str_carried” : Displayed if the item is being carried. It
is prepended to the carrier’s name, or ” You”
if the Player is carrying the item.
e.g. “The enemy flag is being carried by” You.

The “team…” strings are displayed to members of the team that the
GoalItem belongs too. The “non_team…” strings are displayed to anyone
not on the team the GoalItem belongs to.
If the Goalitem does not belong to a team, the “team…” strings
are displayed.

Finally, if the Detection Entity has these variable set, then when
a player does Impulse 21 (FlagInfo in CTF), then the details of the
items specified by the Detection Entity will be displayed.

– GoalItems can centerprint messages to players when they return to
their starting point, regardless of how they return.
Two messages should be supplied in the following variables:
“noise3” : Is centerprinted to all the members of the team
that own the item.
“noise4” : Is centerprinted to everyone except the members of
the team that own the item.

– You can restrict teams to only the Civilian class, for special
purposes. Do it by setting their class restriction variable to “-1”.

– Any Goal can force a GoalItem to return, if it’s not being carried,
by specifying an Item No in the “return_item_no” variable.

– Goals activated by other Goals don’t automatically activate like
they used to. Now they check their Criteria before activating. The AP
used is the AP of the first Goal.
N.B. The AP doesn’t have to initiate the Criteria checking on
activated goals. E.g. The AP doesn’t have to be touching
the Goal which was activated, even if the Goal’s “goal_activation”
specifies that it’s activated by touch.

– GoalItems have a flag, which they can check, which tells them if they’re
not at their starting position.
You can make any Goal/Item/whatever have part of it’s Criteria
check to see if an Item is _not_ at it’s origin by putting the
“goal_no” of the item in the “if_item_has_moved” variable.
You can make any Goal/Item/whatever have part of it’s Criteria
check to see if an Item _is_ at it’s origin by putting the
“goal_no” of the item in the “if_item_hasnt_moved” variable.

– Goals that give out items can specify whether they want the Items
to apply their results. Usually, the goal that gives out the items
does all the results you want, so you can specify this.
Do it by setting Bit 4 (8) in the Goal’s “goal_result” variable.

– The Detection Entity can specify that the grappling hook cannot
be used on a map, by setting the Detection Entity’s “hook_out”
variable to 1.

– Any Goal can remove/restore Teamspawnpoints. The variables to use
are:
“remove_spawnpoint” : Remove a spawnpoint with a matching “goal_no”
“restore_spawnpoint” : Restore the matching spawnpoint
“remove_spawngroup” : Remove all spawnpoints with a “group_no”
matching this number.
“restore_spawngoup” : Restore a group of spawnpoints.

– GoalItems can make console items light up, such as the silver key icon,
when they’re being carried. In the “items” variable, just specify a
bitfield. The bit’s values are as follows:

Silver Key : 131072
Gold Key : 262144

Invisibility Icon : 524288
Invulnerability Icon : 1048576
Radsuit Icon : 2097152
Quad Icon : 4194304

– GoalItems don’t restore a goal when they return, now they activate it.
If you had any GoalItems using the “impulse” variable to restore a Goal
when the GoalItem returns, you’ll need to redo the Goalwork.

– Goals can increase the scores of any specific teams, using the following
variables:

increase_team1 : Increase the score of team 1 by this value
increase_team2 : Increase the score of team 2 by this value
increase_team3 : Increase the score of team 3 by this value
increase_team4 : Increase the score of team 4 by this value

————————-
Changes from 2.11 to 2.12

– Upon activation, Goals can now broadcast even more,
as follows:

“netname_broadcast” : Gets bprinted to _all_ players, prepended
by the AP’s name.
E.g. ” got the RED flag” would be bprinted
as “Bro got the Red Flag”

“netname_team_broadcast” : Gets bprinted to all of the AP’s team,
except the AP, with the AP’s name prepending
it.

“netname_non_team_broadcast” : Gets bprinted to all non-AP-teammembers,
prepended by the AP’s name.
If there is a “owners_team_broadcast” specified,
it isn’t centerprinted to members of the team
that own the goal/item.

“netname_owners_team_broadcast” : Gets bprinted to all the members of
the team that own the goal/item, prepended by
the AP’s name.

————————-
Changes from 2.12 to 2.13

– GoalItems can centerprint messages to players when they’re dropped by
a dying player.
Two messages should be supplied in the following variables:
“team_drop” : Is centerprinted to all the members of the team
that own the item.
“non_team_drop” : Is centerprinted to everyone except the members of
the team that own the item.
Also, messages can be appended to the name of the player who dropped
the item, and then bprinted.
As follows:
“netname_team_drop” : Gets bprinted to all members of the team
who own the item, prepended by the name of
the player who dropped the item.
“netname_non_team_drop” : Gets bprinted to all players not of the team
who own the item, prepended by the name of
the player who dropped the item.

—————————————————————————-
Future Additions
—————————————————————————-
I want to be able to attach Goals to brushes, in the same
way Quake Triggers are.

 

—————————————————————————-
If you think of any more things goals could do when activated,
please don’t hesitate to mail them to me.

And as a last word, I _really_ suggest that you use the Entity Editor.
I use it myself. It’s far too much of a pain mucking about getting all
the right variables set to the right things to bother with doing
it all manually.
Originally, it looked like it would be feasible to do it yourself,
but they’ve just become far too complex now.

Have fun!

Robin.

 

++++++++++++++++++++++++++++++++++++++

—————————————————————————-
The New TeamFortress Entity Reference Sheet TF Version 2.6
—————————————————————————-

This is a reference sheet for people who’re trying to read/debug the
entities on their TF map. It’s simply a quick description of every variable
for all the TF entities. It’s simply a quick-reference. For full details,
see the tfortmap.txt file.

Print this out, and keep it by you whenever you’re reading through someone
else’s .map file to see how they did something 🙂 Also get Raistlan’s EntEd
which supports TeamFortress Entities at http://www.lockandload.com/ented/

Robin (walker@netspace.net.au) | Network (network@lockandload.com)
—————————————————————————-

GLOSSARY
——–
AP : Activating Player. The player who activated a Goal/Trigger, or picked
up the GoalItem.

APA : Any Player Affected. Any player who is affected by the current
Goal/Trigger/Item’s activation.

 

INDEX
——–
I. : DETECTION ENTITY VARIABLES (info_tfdetect)
II. : TEAM SPAWNPOINT VARIABLES (info_player_teamspawn)
III. : GOAL VARIABLES (info_tfgoal)
IV. : GOALITEM VARIABLES (item_tfgoal)
V. : TIMER GOAL VARIABLES (info_tfgoal_timer)
VI. : OTHER QUAKE ENTITY VARIABLES
VII. : VARIABLE ABBREVIATION LIST

 

============================================================================
DETECTION ENTITY VARIABLES (info_tfdetect)
============================================================================

broadcast The TF version string. e.g. “TeamFortress v2.6”

impulse Initial Toggleflags status. Bitfields: (Unspecified = OFF)
1 : ClasSkin Off/On
2 : ClassPersistence Off/On
4 : CheatChecking Off/On
8 : FortressMap Off/On
16 : RespawnDelay See tfortmap.txt
32 : RespawnDelay See tfortmap.txt
64 : AutoTeam Off/On
128 : Individual Frags Off/On

message Commands that are localcmd’d into the server when the map
first starts. e.g. “sv_gravity 300\nsv_friction 0.1\n”
Be sure to end all commands with ‘\n’.

ammo_shells Max number of lives for each player in Team 1.
ammo_nails Max number of lives for each player in Team 2.
ammo_rockets Max number of lives for each player in Team 3.
ammo_cells Max number of lives for each player in Team 4.
(0 = Unlimited number of lives)

ammo_medikit Maximum number of players allowed in Team 1.
ammo_detpack Maximum number of players allowed in Team 2.
maxammo_medikit Maximum number of players allowed in Team 3.
maxammo_detpack Maximum number of players allowed in Team 4.
(0 = Unlimited number of players)

maxammo_shells Illegal Classes for Team 1.
maxammo_nails Illegal Classes for Team 2.
maxammo_rockets Illegal Classes for Team 3.
maxammo_cells Illegal Classes for Team 4.
-1 : Civilian Only. (Cannot Specify Others)
1 : No Scout
2 : No Sniper
4 : No Soldier
8 : No Demolitions Man
16 : No Combat Medic
32 : No Heavy Weapons Guy
64 : No Pyro
128 : No Random PlayerClass
256 : No Spy
512 : No Engineer

hook_out If 1, the grappling hook cannot be used on this map.
Else, this does not need to be specified.

display_item_status1 On FlagInfo command, display this GoalItem status
display_item_status2 On FlagInfo command, display this GoalItem status
display_item_status3 On FlagInfo command, display this GoalItem status
display_item_status4 On FlagInfo command, display this GoalItem status

team_str_home String displayed to the owners of an Item
in an Item Status if the Item is at it’s origin.
If not the owner of the Item, non_team_str_home
will be used. Refer to the “owned_by” variable
for GoalItems.
e.g. “Your flag is in it’s base”

team_str_moved String displayed to the owners of an Item in an
Item Status if the Item is not at it’s origin.
If not the owner of the Item, non_team_str_moved
will be used. Refer to the “owned_by” variable
for GoalItems.
e.g. “Your flag is lying around”

team_str_carried String displayed to the owners of an Item in an Item
Status if the Item is being carried by a player. The
player’s name is appended to the String. If not the
owner of the Item, non_team_str_carried will be used.
Refer to the “owned_by” variable for GoalItems.
e.g. “Your flag is being carried by” < players’s_name>

non_team_str_home String displayed to everyone except the owners of an
Item in an Item Status if the Item is at it’s origin.
If they are owner of the Item, team_str_home will be
used. Refer to the “owned_by” variable for GoalItems.
e.g. “The enemy flag is in it’s base”

non_team_str_moved String displayed to everyone except the owners of an
Item in an Item Status if the Item is not at it’s origin.
If they are owner of the Item, team_str_moved will be
used. Refer to the “owned_by” variable for GoalItems.
e.g. “The enemy flag is lying around”

non_team_str_carried String displayed to everyone except the owners of an
Item in an Item Status if the Item is being carried by a
player. The player’s name is appended to the String.
If they are owner of the Item, team_str_home will be
used. Refer to the “owned_by” variable for GoalItems.
e.g. “The enemy flag is being carried by” < player’s_name>

team_broadcast String that replaces the Team Menu.
(Line breaks should be used: \n)

non_team_broadcast String that is displayed in the Map Help command.
(Line breaks could be used: \n)

noise1 String that replaces the Class Menu for Team 1.
noise2 String that replaces the Class Menu for Team 2.
noise3 String that replaces the Class Menu for Team 3.
noise4 String that replaces the Class Menu for Team 4.
(Line breaks should be used: \n)

 

============================================================================
TEAM SPAWNPOINT VARIABLES (info_player_teamspawn)
============================================================================

netname The name of the spawn point. (A reference)

goal_no Unique ID number of this spawn.

group_no ID Number of the spawn group this spawn belongs to.

team_no Only players on this team spawn here.

items GoalItem ID is given to the first player who
spawn here.

axhitme Goal removes this GoalItem from APA that has it.

message A String displayed to the first player who
spawns here.

goal_activation Bitfields:
1 : Give the GoalItem in “items” to every player who
spawns here instead of just the first player.
2 : Display the “message” to every player who spawns
here instead of just the first player.

goal_effects Bitfields:
1 : The spawnpoint removes itself after the first
player has spawned here.

activate_goal_no Activate this Goal.

items_allowed AP needs this GoalItem to meet this Goal’s criteria.

has_item_from_group AP must have GoalItem from group “group_no”.

playerclass AP must be this playerclass to meet this Goal’s criteria.
You can not add these up, you can only specify one player
class. Bitfields:
1 : Only allow a Scout to activate
2 : Only allow a Sniper to activate
3 : Only allow a Soldier to activate
4 : Only allow a Demolition Man to activate
5 : Only allow a Medic to activate
6 : Only allow a Heavy Weapons Guy to activate
7 : Only allow a Pyro to activate
8 : Only allow a Spy to activate
9 : Only allow an Engineer to activate

if_goal_is_active This Goal must be in ACTIVE state.
if_goal_is_inactive This Goal must be in INACTIVE state.
if_goal_is_removed This Goal must be in REMOVED state.
if_group_is_active All Goals in this Group must be in ACTIVE state.
if_group_is_inactive All Goals in this Group must be in INACTIVE state.
if_group_is_removed All Goals in this Group must be in REMOVED state.
if_item_has_moved This GoalItem must not have moved from it’s origin,
and must not be being carried.
if_item_hasnt_moved This GoalItem must have moved from it’s origin,
or be being carried.

target Activate any Goal/Quake Trigger with this targetname

killtarget Remove any Goal/Quake Trigger with this targetname

goal_state The initial state of this entity. The default
(nothing specified) is Inactive the same as if
you specified a value of 2. Bitfields:
1 : Active (Already On)
2 : Inactive (Ready to be used)
3 : Removed (Unmanipulatable until restored)

ex_skill_min This entity is removed when the map starts if the game’s “skill”
variable is >= to this value. To specify a skill of 0, use
-1 instead.

ex_skill_max This entity is removed when the map starts if the game’s “skill”
variable is <= to this value. To specify a skill of 0, use
-1 instead.

count Specified score given to the AP’s team.

increase_team1 Specified score given to team 1
increase_team2 Specified score given to team 2
increase_team3 Specified score given to team 3
increase_team4 Specified score given to team 4

noise WAV file played when this Goal is activated.

lives Added to APA’s lives.

health Added to APA’s health.

armortype The APA’s armortype is set to the Goals “armortype”.
Armortype Bitfields:
0.3 : Green
0.6 : Yellow
0.8 : Red

armorvalue APA’s armorvalue is set to this value. (0-250)

armorclass APA’s armorclass is set to this type(s).
1 : Shell Resistant
2 : Nail Resistant
4 : Explosion Resistant
8 : Electricity Resistant
16 : Fire Resistant

frags Added to APA’s frags.

ammo_shells Added this number of shells to the APA’s ammo supply.
ammo_nails Added this number of nails to the APA’s ammo supply.
ammo_rockets Added this number of rockets to the APA’s ammo supply.
ammo_cells Added this number of cells to the APA’s ammo supply.
ammo_detpack Added this number of det packs to the APA’s supply.
ammo_medikit Added this number of medikits to the APA’s supply.

no_grenades_1 Added to APA’s number of type 1 TF grenades.
no_grenades_2 Added to APA’s number of type 2 TF grenades.

invincible_finished Number of seconds of invincibility APA gets.
invisible_finished Number of seconds of invisibility APA gets.
super_damage_finished Number of seconds of quad APA gets.
radsuit_finished Number of seconds of radsuit APA gets.

activate_goal_no Activate this Goal.
inactivate_goal_no Inactivate this Goal.
remove_goal_no Remove this Goal.
restore_goal_no Restore this Goal.

activate_group_no Activate all Goals in this GoalGroup.
inactivate_group_no Inactivate all Goals in this GoalGroup.
remove_group_no Remove all Goals in this GoalGroup.
restore_group_no Restore all Goals in this GoalGroup.

remove_item_group Removes a GoalItems APA has from GoalGroup

all_active If all Goals in this GoalGroup are ACTIVE, activate
the Goal in the “last_impulse” variable.

last_impulse If all Goals in the “all_active” GoalGroup are ACTIVE,
activate this Goal.

remove_spawnpoint Remove the spawnpoint with this “goal_no”.

restore_spawnpoint Restore the spawnpoint with this “goal_no”, if it’s
in the REMOVED state.

remove_spawngroup Remove all spawnpoints with this “group_no”.

restore_spawngroup Restore all spawnpoints with this “group_no”, if
they’re in the REMOVED state.

 

============================================================================
GOAL VARIABLES (info_tfgoal)
============================================================================

netname The name of the Goal. (A reference)

goal_no Unique ID number of this goal.

group_no ID Number of the goal group this goal belongs to.

owned_by The Team that own this entity.

goal_state The initial state of this entity. The default
(nothing specified) is Inactive the same as if
you specified a value of 2. Bitfields:
1 : Active (Already On)
2 : Inactive (Ready to be used)
3 : Removed (Unmanipulatable until restored)

mdl The mdl used by this Goal. (Unspecified = Invisible Goal.)

skin The number of the skin to be used in the specified model.

goal_activation Determines how the Goal is activated. Bitfields:
1 : Activated when touched by a player.
2 : Activated when touched by a detpack explosion.
4 : Only activated if the AP fails Criteria.
2048 : If this bit is set, the Goal drops to the
ground when it first spawns.

team_no AP must be of this team to meet this Goal’s criteria.

items_allowed AP needs this GoalItem to meet this Goal’s criteria.

has_item_from_group AP must have GoalItem from group “group_no”.

playerclass AP must be this playerclass to meet this Goal’s criteria.
You can not add these up, you can only specify one player
class. Bitfields:
1 : Only allow a Scout to activate
2 : Only allow a Sniper to activate
3 : Only allow a Soldier to activate
4 : Only allow a Demolition Man to activate
5 : Only allow a Medic to activate
6 : Only allow a Heavy Weapons Guy to activate
7 : Only allow a Pyro to activate
8 : Only allow a Spy to activate
9 : Only allow an Engineer to activate

if_goal_is_active This Goal must be in ACTIVE state.
if_goal_is_inactive This Goal must be in INACTIVE state.
if_goal_is_removed This Goal must be in REMOVED state.
if_group_is_active All Goals in this Group must be in ACTIVE state.
if_group_is_inactive All Goals in this Group must be in INACTIVE state.
if_group_is_removed All Goals in this Group must be in REMOVED state.
if_item_has_moved This GoalItem must not have moved from it’s origin,
and must not be being carried.
if_item_hasnt_moved This GoalItem must have moved from it’s origin,
or be being carried.

else_goal If the AP fails the Criteria of this entity, then
attempt to activate the Goal with this ID.

goal_min The minimum bounding box size of a Goal can be set using
this. The default is: “goal_min” “-16 -16 -24”

goal_max The maximum bounding box size of a Goal can be set using
this. The default is: “goal_max” “16 16 32”

——————————————-
When this Goal is successfully activated
up, the following variables may be executed
——————————————-

return_item_no Return this GoalItem, if it’s not being carried.

broadcast Message centerprinted to everyone except the AP.
e.g. “Clean-up on isle 4!”

message Message centerprinted to AP.
e.g. “You activated this goal!”

team_broadcast Message centerprinted to players on the AP’s team,
except the AP. e.g. “Your team has the enemy flag!”

non_team_broadcast Message centerprinted to players not on the AP’s team.
If there is a “owners_team_broadcast” specified, this
message isn’t centerprinted to the owners of the entity.
e.g. “An enemy flag was taken!”

owners_team_broadcast Gets centerprinted to all the members of the
team that own the goal/item.
e.g. “Your flag was taken!”

netname_broadcast Broadcast to all players, prepended to the AP’s name.
A line break should be used at the end.
e.g. <player’s_name> ” activated this goal!\n”

netname_team_broadcast Broadcast to all players on the AP’s team, except
the AP, prepended by the AP’s name. A line break should
be used at the end.
e.g. <player’s_name> ” activated your team’s goal!\n”

netname_non_team_broadcast
Broadcast to all players on the AP’s team, prepended by the
AP’s name. If there is a “netname_owners_team_broadcast”
specified, this message isn’t broadcast to the owners of
the entity. A line break should be used at the end.
e.g. <player’s_name> ” took an enemy flag!\n”

netname_owners_team_broadcast
Broadcast to all members of the team that own this entity
(see “owned_by” above), prepended by the AP’s name.
e.g. <player’s_name> ” took your flag!\n”

deathtype Death message appended to the AP’s name and broadcasted, if the
AP is killed by the Goal. A line break should be used at the end.
e.g. <player’s_name> ” was killed by this goal!\n”

target Activate any Goal/Quake Trigger with this targetname

killtarget Remove any Goal/Quake Trigger with this targetname

ex_skill_min This entity is removed when the map starts if the game’s “skill”
variable is >= to this value. To specify a skill of 0, use
-1 instead.

ex_skill_max This entity is removed when the map starts if the game’s “skill”
variable is <= to this value. To specify a skill of 0, use
-1 instead.

goal_effects Determines what players are affected. If nothing is specified
the goal will not effect anybody. Bitfields:
1 : AP is affected.
2 : Everyone on the AP’s team is affected.
4 : Everyone not on the AP’s team is affected.
8 : Everyone except the AP is affected.
16 : Radius effect (see “t_length”) does not go
through walls.
32 : If APA is not in the same environment as the
Goal, don’t affect him. Environments are air,
water, slime, lava. e.g. If a Goal is above
some water, and does a radius effect with
“t_length”, and a player in the water is within
the radius, he won’t be affected if this bit
is set.
64 : If this bit is set, then instead of just applying
this Goal’s results to the group of players
specified by the other “goal_effects” variable,
this Goal checks it’s criteria for each player
in the group and then applies it’s results
invididually to any of them that pass.

maxammo_shells All members of this team are affected.

maxammo_nails All members not of this team are affected.

t_length Everyone within this radius is affected. To specify whether
the radius should go through walls or not see bit 16
in “goal_effects”

 

goal_results Determines what results are applied to APA. Bitfields:
1 : Goal is removed after activation.
2 : Goals activated by this one apply their
results to the AP.
4 : Display scores and end the level.
8 : Activated goals will not apply their results to
the APA
16 : Disable/Stop the spy’s undercover mask.
32 : This forces APA to simply respawn. The player
doesn’t die… just respawns.

count Specified score given to the AP’s team.

increase_team1 Specified score given to team 1
increase_team2 Specified score given to team 2
increase_team3 Specified score given to team 3
increase_team4 Specified score given to team 4

noise WAV file played when this Goal is activated.

lives Added to APA’s lives.

health Added to APA’s health.

armortype The APA’s armortype is set to the Goals “armortype”.
Armortype Bitfields:
0.3 : Green
0.6 : Yellow
0.8 : Red

armorvalue APA’s armorvalue is set to this value. (0-250)

armorclass APA’s armorclass is set to this type(s).
1 : Shell Resistant
2 : Nail Resistant
4 : Explosion Resistant
8 : Electricity Resistant
16 : Fire Resistant

frags Added to APA’s frags.

ammo_shells Added this number of shells to the APA’s ammo supply.
ammo_nails Added this number of nails to the APA’s ammo supply.
ammo_rockets Added this number of rockets to the APA’s ammo supply.
ammo_cells Added this number of cells to the APA’s ammo supply.
ammo_detpack Added this number of det packs to the APA’s supply.
ammo_medikit Added this number of medikits to the APA’s supply.

no_grenades_1 Added to APA’s number of type 1 TF grenades.
no_grenades_2 Added to APA’s number of type 2 TF grenades.

invincible_finished Number of seconds of invincibility APA gets.
invisible_finished Number of seconds of invisibility APA gets.
super_damage_finished Number of seconds of quad APA gets.
radsuit_finished Number of seconds of radsuit APA gets.

items Goal gives this GoalItem to APA.
axhitme Goal removes this GoalItem from APA that has it.

delay_time If the criteria is meant for activation, the goal waits
this amount of time before activating, in seconds.

wait Goal stays ACTIVE for this amount of time, in seconds.

activate_goal_no Activate this Goal.
inactivate_goal_no Inactivate this Goal.
remove_goal_no Remove this Goal.
restore_goal_no Restore this Goal.

activate_group_no Activate all Goals in this GoalGroup.
inactivate_group_no Inactivate all Goals in this GoalGroup.
remove_group_no Remove all Goals in this GoalGroup.
restore_group_no Restore all Goals in this GoalGroup.

remove_item_group Removes a GoalItems APA has from GoalGroup

all_active If all Goals in this GoalGroup are ACTIVE, activate
the Goal in the “last_impulse” variable.

last_impulse If all Goals in the “all_active” GoalGroup are ACTIVE,
activate this Goal.

remove_spawnpoint Remove the spawnpoint with this “goal_no”.

restore_spawnpoint Restore the spawnpoint with this “goal_no”, if it’s
in the REMOVED state.

remove_spawngroup Remove all spawnpoints with this “group_no”.

restore_spawngroup Restore all spawnpoints with this “group_no”, if
they’re in the REMOVED state.

display_item_status1 Display this GoalItem Status when this goal is activated
display_item_status2 Display this GoalItem Status when this goal is activated
display_item_status3 Display this GoalItem Status when this goal is activated
display_item_status4 Display this GoalItem Status when this goal is activated

team_str_home String displayed to the owners of an Item
in an Item Status if the Item is at it’s origin.
If not the owner of the Item, non_team_str_home
will be used. Refer to the “owned_by” variable
for GoalItems.
e.g. “Your flag is in it’s base”

team_str_moved String displayed to the owners of an Item in an
Item Status if the Item is not at it’s origin.
If not the owner of the Item, non_team_str_moved
will be used. Refer to the “owned_by” variable
for GoalItems.
e.g. “Your flag is lying around”

team_str_carried String displayed to the owners of an Item in an Item
Status if the Item is being carried by a player. The
player’s name is appended to the String. If not the
owner of the Item, non_team_str_carried will be used.
Refer to the “owned_by” variable for GoalItems.
e.g. “Your flag is being carried by” < players’s_name>

non_team_str_home String displayed to everyone except the owners of an
Item in an Item Status if the Item is at it’s origin.
If they are owner of the Item, team_str_home will be
used. Refer to the “owned_by” variable for GoalItems.
e.g. “The enemy flag is in it’s base”

non_team_str_moved String displayed to everyone except the owners of an
Item in an Item Status if the Item is not at it’s origin.
If they are owner of the Item, team_str_moved will be
used. Refer to the “owned_by” variable for GoalItems.
e.g. “The enemy flag is lying around”

non_team_str_carried String displayed to everyone except the owners of an
Item in an Item Status if the Item is being carried by a
player. The player’s name is appended to the String.
If they are owner of the Item, team_str_home will be
used. Refer to the “owned_by” variable for GoalItems.
e.g. “The enemy flag is being carried by” < player’s_name>

 

============================================================================
GOALITEM VARIABLES (item_tfgoal)
============================================================================

netname The name of the GoalItem. (A reference)

goal_no Unique ID number of this GoalItem.

group_no ID Number of the goal group this GoalItem belongs to.

owned_by The Team that own this entity.

goal_state The initial state of this item. The default
(nothing specified) is Inactive the same as if
you specified a value of 2. Bitfields:
1 : Active (Already On)
2 : Inactive (Ready to be used)
3 : Removed (Unmanipulatable until restored)

mdl The mdl used by this GoalItem. (Unspecified = Invisible)

skin The number of the skin to be used in the specified model.

goal_activation Bitfields:
1 : Carrying Player glows.
2 : Carrying Player moves at half speed.
4 : Item is dropped when a player with it dies.
8 : Item is returned when dropped.
16 : Item is returned when removed from players by a Goal
32 : Item is returned due to “pausetime” (see below)
64 : Only activated (picked-up) if AP fails Criteria.
128 : Enable “pausetime” removing.
256 : Players keep this item when they die.
512 : If this Item isn’t being carried, it glows dimly.
1024 : Don’t remove the results of this Item when it’s
removed from a player.
2048 : If this bit is set, the GoalItem drops to the
ground when it first spawns.
8192 : If this bit is set, the GoalItem is Solid while not
being carried by a player. This means it blocks
bullets, grenades, and those that do not pass it’s
criteria. Others will simply pick it up.

playerclass AP must be this playerclass to meet this GoalItem’s criteria.
You can not add these up, you can only specify one player
class. Bitfields:
1 : Only allow a Scout to activate
2 : Only allow a Sniper to activate
3 : Only allow a Soldier to activate
4 : Only allow a Demolition Man to activate
5 : Only allow a Medic to activate
6 : Only allow a Heavy Weapons Guy to activate
7 : Only allow a Pyro to activate
8 : Only allow a Spy to activate
9 : Only allow an Engineer to activate

if_goal_is_active This Goal must be in ACTIVE state.
if_goal_is_inactive This Goal must be in INACTIVE state.
if_goal_is_removed This Goal must be in REMOVED state.
if_group_is_active All Goals in this Group must be in ACTIVE state.
if_group_is_inactive All Goals in this Group must be in INACTIVE state.
if_group_is_removed All Goals in this Group must be in REMOVED state.
if_item_has_moved This GoalItem must not have moved from it’s origin,
and must not be being carried.
if_item_hasnt_moved This GoalItem must have moved from it’s origin,
or be being carried.

else_goal If the AP fails the Criteria of this entity, then
attempt to activate the Goal with this ID.

has_item_from_group AP must have GoalItem from group “group_no”

goal_min The minimum bounding box size of a GoalItem can be set
using this. The default is: “goal_min” “-16 -16 -24”

goal_max The maximum bounding box size of a GoalItem can be set
using this. The default is: “goal_max” “16 16 32”

——————————————-
When this GoalItem is successfully picked
up, the following variables may be executed
——————————————-

return_item_no Return this GoalItem, if it’s not being carried.

target Activate any Goal/Quake Trigger with this targetname

killtarget Remove any Goal/Quake Trigger with this targetname

ex_skill_min This entity is removed when the map starts if the game’s “skill”
variable is >= to this value. To specify a skill of 0, use
-1 instead.

ex_skill_max This entity is removed when the map starts if the game’s “skill”
variable is <= to this value. To specify a skill of 0, use
-1 instead.

goal_effects Determines what players are affected. If nothing is specified
the goal will not effect anybody. Bitfields:
1 : AP is affected.
2 : Everyone on the AP’s team is affected.
4 : Everyone not on the AP’s team is affected.
8 : Everyone except the AP is affected.
16 : Radius effect (see “t_length”) does not go
through walls.
32 : If APA is not in the same environment as the
Goal, don’t affect him. Environments are air,
water, slime, lava. e.g. If a Goal is above
some water, and does a radius effect with
“t_length”, and a player in the water is within
the radius, he won’t be affected if this bit
is set.
64 : If this bit is set, then instead of just applying
this Goal’s results to the group of players
specified by the other “goal_effects” variable,
this Goal checks it’s criteria for each player
in the group and then applies it’s results
invididually to any of them that pass.

maxammo_shells All members of this team are affected.

maxammo_nails All members not of this team are affected.

t_length Everyone within this radius is affected. To specify whether
the radius should go through walls or not see bit 16
in “goal_effects”

impulse When the GoalItem is Returned, activate this Goal.

pausetime Item is removed if not touched for this time after being
dropped by a dying player. Also, see bit 32 in
“goal_activation” above. N.B. This will not be used if
bit 128 in “goal_activation” is not enabled.

 

maxammo_shells All members of this team are affected.

maxammo_nails All members not of this team are affected.

goal_results Determines what results are applied to APA. Bitfields:
1 : Goal is removed after activation.
2 : Goals activated by this one apply their
results to the AP.
4 : Display scores and end the level.
8 : Activated goals will not apply their results to
the APA
16 : Disable/Stop the spy’s undercover mask.
32 : This forces APA to simply respawn. The player
doesn’t die… just respawns.
4096 : If this bit is set, any player carrying this
item can drop it using the “dropitems” command.

count Specified score given to the AP’s team.

increase_team1 Specified score given to team 1
increase_team2 Specified score given to team 2
increase_team3 Specified score given to team 3
increase_team4 Specified score given to team 4

noise WAV file played when this Goal is activated.

lives Added to APA’s lives.

health Added to APA’s health.

armortype The APA’s armortype is set to the Goals “armortype”.
Armortype Bitfields:
0.3 : Green
0.6 : Yellow
0.8 : Red

armorvalue APA’s armorvalue is set to this value. (0-250)

armorclass APA’s armorclass is set to this type(s).
1 : Shell Resistant
2 : Nail Resistant
4 : Explosion Resistant
8 : Electricity Resistant
16 : Fire Resistant

frags Added to APA’s frags.

ammo_shells Added this number of shells to the APA’s ammo supply.
ammo_nails Added this number of nails to the APA’s ammo supply.
ammo_rockets Added this number of rockets to the APA’s ammo supply.
ammo_cells Added this number of cells to the APA’s ammo supply.
ammo_detpack Added this number of det packs to the APA’s supply.
ammo_medikit Added this number of medikits to the APA’s supply.

no_grenades_1 Added to APA’s number of type 1 TF grenades.
no_grenades_2 Added to APA’s number of type 2 TF grenades.

invincible_finished Number of seconds of invincibility APA gets.
invisible_finished Number of seconds of invisibility APA gets.
super_damage_finished Number of seconds of quad APA gets.
radsuit_finished Number of seconds of radsuit APA gets.

delay_time If the criteria is meant for activation, the goal waits
this amount of time before activating, in seconds.

items Goal gives this GoalItem to APA.
axhitme Goal removes this GoalItem from APA that has it.

distance If all GoalItems in this GoalItem Group are being carried
by players, activate the Goal in the “pain_finished” variable.

pain_finished If all GoalItems in the GoalItem Group specified in the
“distance” variable are being carried by players, activate
this Goal.

speed If all GoalItems in this GoalItem Group are being
carried by one player, activate the Goal in the
“attack_finished” variable.

attack_finished If all GoalItems in the GoalItem Group specified in the “speed”
variable are being carried by one player, activate this Goal.

noise3 String centerprinted to the all the members of the team
that own this GoalItem whenever it returns.
e.g. “Your flag has been returned to base\n”

noise4 String centerprinted to the everyone except all the members
of the team that own this GoalItem whenever it returns.
e.g. “An enemy flag has been returned to base\n”

team_drop Centerprinted to all members of the team that own this Item,
whenever this Item is dropped by a player.
e.g. “Your flag is lying around!\n”

non_team_drop Centerprinted to all members not in the team that own this
Item, whenever this Item is dropped by a player.
e.g. “An enemy flag is lying around!\n”

netname_team_drop Broadcast to all members of the team that own this item,
prepended by the name of the player who dropped the item.
A line break should be used at the end.
e.g. <player’s_name> ” lost your flag!\n”

netname_non_team_drop Broadcast to all members not in the team that own this item,
prepended by the name of the player who dropped the item.
A line break should be used at the end.
e.g. <player’s_name> ” lost the enemy flag!\n”

broadcast Message centerprinted to everyone except the AP.
e.g. “Clean-up on isle 4!”

message Message centerprinted to AP.
e.g. “You activated this goal!”

team_broadcast Message centerprinted to players on the AP’s team,
except the AP. e.g. “Your team has the enemy flag!”

non_team_broadcast Message centerprinted to players not on the AP’s team.
If there is a “owners_team_broadcast” specified, this
message isn’t centerprinted to the owners of the entity.
e.g. “An enemy flag was taken!”

owners_team_broadcast Gets centerprinted to all the members of the
team that own the goal/item.
e.g. “Your flag was taken!”

netname_broadcast Broadcast to all players, prepended to the AP’s name.
A line break should be used at the end.
e.g. <player’s_name> ” activated this goal!\n”

netname_team_broadcast Broadcast to all players on the AP’s team, except
the AP, prepended by the AP’s name. A line break should
be used at the end.
e.g. <player’s_name> ” activated your team’s goal!\n”

netname_non_team_broadcast
Broadcast to all players on the AP’s team, prepended by the
AP’s name. If there is a “netname_owners_team_broadcast”
specified, this message isn’t broadcast to the owners of
the entity. A line break should be used at the end.
e.g. <player’s_name> ” took an enemy flag!\n”

netname_owners_team_broadcast
Broadcast to all members of the team that own this entity
(see “owned_by” above), prepended by the AP’s name.
e.g. <player’s_name> ” took your flag!\n”

deathtype Death message appended to the AP’s name and broadcasted, if the
AP is killed by the Goal. A line break should be used at the end.
e.g. <player’s_name> ” was killed by this goal!\n”

activate_goal_no Activate this Goal.
inactivate_goal_no Inactivate this Goal.
remove_goal_no Remove this Goal.
restore_goal_no Restore this Goal.

activate_group_no Activate all Goals in this GoalGroup.
inactivate_group_no Inactivate all Goals in this GoalGroup.
remove_group_no Remove all Goals in this GoalGroup.
restore_group_no Restore all Goals in this GoalGroup.

remove_item_group Removes a GoalItems APA has from GoalGroup

all_active If all Goals in this GoalGroup are ACTIVE, activate
the Goal in the “last_impulse” variable.

last_impulse If all Goals in the “all_active” GoalGroup are ACTIVE,
activate this Goal.

remove_spawnpoint Remove the spawnpoint with this “goal_no”.

restore_spawnpoint Restore the spawnpoint with this “goal_no”, if it’s
in the REMOVED state.

remove_spawngroup Remove all spawnpoints with this “group_no”.

restore_spawngroup Restore all spawnpoints with this “group_no”, if
they’re in the REMOVED state.

display_item_status1 Display this GoalItem Status when this goal is activated
display_item_status2 Display this GoalItem Status when this goal is activated
display_item_status3 Display this GoalItem Status when this goal is activated
display_item_status4 Display this GoalItem Status when this goal is activated

team_str_home String displayed to the owners of an Item
in an Item Status if the Item is at it’s origin.
If not the owner of the Item, non_team_str_home
will be used. Refer to the “owned_by” variable
for GoalItems.
e.g. “Your flag is in it’s base”

team_str_moved String displayed to the owners of an Item in an
Item Status if the Item is not at it’s origin.
If not the owner of the Item, non_team_str_moved
will be used. Refer to the “owned_by” variable
for GoalItems.
e.g. “Your flag is lying around”

team_str_carried String displayed to the owners of an Item in an Item
Status if the Item is being carried by a player. The
player’s name is appended to the String. If not the
owner of the Item, non_team_str_carried will be used.
Refer to the “owned_by” variable for GoalItems.
e.g. “Your flag is being carried by” < players’s_name>

non_team_str_home String displayed to everyone except the owners of an
Item in an Item Status if the Item is at it’s origin.
If they are owner of the Item, team_str_home will be
used. Refer to the “owned_by” variable for GoalItems.
e.g. “The enemy flag is in it’s base”

non_team_str_moved String displayed to everyone except the owners of an
Item in an Item Status if the Item is not at it’s origin.
If they are owner of the Item, team_str_moved will be
used. Refer to the “owned_by” variable for GoalItems.
e.g. “The enemy flag is lying around”

non_team_str_carried String displayed to everyone except the owners of an
Item in an Item Status if the Item is being carried by a
player. The player’s name is appended to the String.
If they are owner of the Item, team_str_home will be
used. Refer to the “owned_by” variable for GoalItems.
e.g. “The enemy flag is being carried by” < player’s_name>

 

============================================================================
TIMER GOAL VARIABLES (info_tfgoal_timer)
============================================================================

goal_effects Determines what players are affected. If nothing is specified
the goal will not effect anybody. Bitfields:
1 : Illegal for Timer Goals
2 : Illegal for Timer Goals
4 : Illegal for Timer Goals
8 : Illegal for Timer Goals
16 : Radius effect (see “t_length”) does not go
through walls.
32 : If APA is not in the same environment as the
Goal, don’t affect him. Environments are air,
water, slime, lava. e.g. If a Goal is above
some water, and does a radius effect with
“t_length”, and a player in the water is within
the radius, he won’t be affected if this bit
is set.
64 : If this bit is set, then instead of just applying
this Goal’s results to the group of players
specified by the other “goal_effects” variable,
this Goal checks it’s criteria for each player
in the group and then applies it’s results
invididually to any of them that pass.

search_time Period between Timer activations.

netname The name of the Timer Goal. (A reference)

goal_no Unique ID number of this Timer Goal.

group_no ID Number of the goal group this Timer Goal belongs to.

goal_state The initial state of this entity. The default
(nothing specified) is Inactive the same as if
you specified a value of 2. Bitfields:
1 : Active (Already On)
2 : Inactive (Ready to be used)
3 : Removed (Unmanipulatable until restored)

items_allowed AP needs this GoalItem to be effected by the results.

playerclass AP must be this playerclass to meet this Goal’s criteria.
You can not add these up, you can only specify one player
class. Bitfields:
1 : Only allow a Scout to activate
2 : Only allow a Sniper to activate
3 : Only allow a Soldier to activate
4 : Only allow a Demolition Man to activate
5 : Only allow a Medic to activate
6 : Only allow a Heavy Weapons Guy to activate
7 : Only allow a Pyro to activate
8 : Only allow a Spy to activate
9 : Only allow an Engineer to activate

if_goal_is_active This Goal must be in ACTIVE state.
if_goal_is_inactive This Goal must be in INACTIVE state.
if_goal_is_removed This Goal must be in REMOVED state.
if_group_is_active All Goals in this Group must be in ACTIVE state.
if_group_is_inactive All Goals in this Group must be in INACTIVE state.
if_group_is_removed All Goals in this Group must be in REMOVED state.

if_item_has_moved This GoalItem must not have moved from it’s origin,
and must not be being carried.

if_item_hasnt_moved This GoalItem must have moved from it’s origin,
or be being carried.

has_item_from_group APA will be effected if they have GoalItem
from group “group_no”

maxammo_shells All members of this team are checked for meeting the criteria.

maxammo_nails All members not on this team are checked for meeting the
criteria.

t_length Everyone within this radius is affected. To specify whether
the radius should go through walls or not see bit 16
in “goal_effects”

——————————————-
When this Goal is successfully activated
up, the following variables may be executed
——————————————-

return_item_no Return this GoalItem, if it’s not being carried.

deathtype Death message appended to the AP’s name and broadcasted, if the
AP is killed by the Goal. A line break should be used at the end.
e.g. <player’s_name> ” was killed by this goal!\n”

target Activate any Goal/Quake Trigger with this targetname

killtarget Remove any Goal/Quake Trigger with this targetname

ex_skill_min This entity is removed when the map starts if the game’s “skill”
variable is >= to this value. To specify a skill of 0, use
-1 instead.

ex_skill_max This entity is removed when the map starts if the game’s “skill”
variable is <= to this value. To specify a skill of 0, use
-1 instead.

goal_results Determines what results are applied to APA. Bitfields:
1 : Goal is removed after activation.
2 : Goals activated by this one apply their
results to APA.
4 : Display scores and end the level.
8 : Activated goals will not apply their results to
the APA
16 : Disable/Stop the spy’s undercover mask.
32 : This forces APA to simply respawn. The player
doesn’t die… just respawns.
64 : If this bit is set, the results are applied to all the
players that do NOT fit the criteria.

increase_team1 Specified score given to team 1
increase_team2 Specified score given to team 2
increase_team3 Specified score given to team 3
increase_team4 Specified score given to team 4

noise WAV file played when this Goal is activated.

lives Added to APA’s lives.

health Added to APA’s health.

armortype The APA’s armortype is set to the Goals “armortype”.
Armortype Bitfields:
0.3 : Green
0.6 : Yellow
0.8 : Red

armorvalue APA’s armorvalue is set to this value. (0-250)

armorclass APA’s armorclass is set to this type(s).
1 : Shell Resistant
2 : Nail Resistant
4 : Explosion Resistant
8 : Electricity Resistant
16 : Fire Resistant

frags Added to APA’s frags.

ammo_shells Added this number of shells to the APA’s ammo supply.
ammo_nails Added this number of nails to the APA’s ammo supply.
ammo_rockets Added this number of rockets to the APA’s ammo supply.
ammo_cells Added this number of cells to the APA’s ammo supply.
ammo_detpack Added this number of det packs to the APA’s supply.
ammo_medikit Added this number of medikits to the APA’s supply.

no_grenades_1 Added to APA’s number of type 1 TF grenades.
no_grenades_2 Added to APA’s number of type 2 TF grenades.

invincible_finished Number of seconds of invincibility APA gets.
invisible_finished Number of seconds of invisibility APA gets.
super_damage_finished Number of seconds of quad APA gets.
radsuit_finished Number of seconds of radsuit APA gets.

items Goal gives this GoalItem to APA.
axhitme Goal removes this GoalItem from APA that has it.

delay_time If the criteria is meant for activation, the goal waits
this amount of time before activating, in seconds.

wait Goal stays ACTIVE for this amount of time, in seconds.

activate_goal_no Activate this Goal.
inactivate_goal_no Inactivate this Goal.
remove_goal_no Remove this Goal.
restore_goal_no Restore this Goal.

activate_group_no Activate all Goals in this GoalGroup.
inactivate_group_no Inactivate all Goals in this GoalGroup.
remove_group_no Remove all Goals in this GoalGroup.
restore_group_no Restore all Goals in this GoalGroup.

all_active If all Goals in this GoalGroup are ACTIVE, activate
the Goal in the “last_impulse” variable.

last_impulse If all Goals in the “all_active” GoalGroup are ACTIVE,
activate this Goal.

remove_item_group Removes a GoalItems APA has from GoalGroup

remove_spawnpoint Remove the spawnpoint with this “goal_no”.

restore_spawnpoint Restore the spawnpoint with this “goal_no”, if it’s
in the REMOVED state.

remove_spawngroup Remove all spawnpoints with this “group_no”.

restore_spawngroup Restore all spawnpoints with this “group_no”, if
they’re in the REMOVED state.

display_item_status1 Display this GoalItem Status when this goal is activated
display_item_status2 Display this GoalItem Status when this goal is activated
display_item_status3 Display this GoalItem Status when this goal is activated
display_item_status4 Display this GoalItem Status when this goal is activated

team_str_home String displayed to the owners of an Item
in an Item Status if the Item is at it’s origin.
If not the owner of the Item, non_team_str_home
will be used. Refer to the “owned_by” variable
for GoalItems.
e.g. “Your flag is in it’s base”

team_str_moved String displayed to the owners of an Item in an
Item Status if the Item is not at it’s origin.
If not the owner of the Item, non_team_str_moved
will be used. Refer to the “owned_by” variable
for GoalItems.
e.g. “Your flag is lying around”

team_str_carried String displayed to the owners of an Item in an Item
Status if the Item is being carried by a player. The
player’s name is appended to the String. If not the
owner of the Item, non_team_str_carried will be used.
Refer to the “owned_by” variable for GoalItems.
e.g. “Your flag is being carried by” < players’s_name>

non_team_str_home String displayed to everyone except the owners of an
Item in an Item Status if the Item is at it’s origin.
If they are owner of the Item, team_str_home will be
used. Refer to the “owned_by” variable for GoalItems.
e.g. “The enemy flag is in it’s base”

non_team_str_moved String displayed to everyone except the owners of an
Item in an Item Status if the Item is not at it’s origin.
If they are owner of the Item, team_str_moved will be
used. Refer to the “owned_by” variable for GoalItems.
e.g. “The enemy flag is lying around”

non_team_str_carried String displayed to everyone except the owners of an
Item in an Item Status if the Item is being carried by a
player. The player’s name is appended to the String.
If they are owner of the Item, team_str_home will be
used. Refer to the “owned_by” variable for GoalItems.
e.g. “The enemy flag is being carried by” < player’s_name>

============================================================================
OTHER QUAKE ENTITY VARIABLES
============================================================================

 

func_button / func_door
This works the same as info_tfgoal except for obvious
variables such as “model”. Additional Bitfields:
goal_activation 8 : only activated when hit by an engineer’s spanner

 

OTHER ENTITIES Most Quake entities work the same as info_tfgoal except
for obvious variables such as “model”, “goal_no”, and
“goal_activation” fields. So you can limit func_doors to
certain team_nos and so on…

 

============================================================================
VARIABLE ABBREVIATION LIST
============================================================================

Abbreviations can be used in replace of certain full named variables to save
entity space due to many Quake limits. Here is a complete list of all the
variables:

 

Classnames
“i_p_t” for “info_player_teamspawn”
“i_t_g” for “info_tfgoal”
“i_t_t” for “info_tfgoal_timer”

Floats
“g_a” for “goal_activation”
“g_e” for “goal_effects”

“h_i_g” for “has_item_from_group”
“r_i_g” for “remove_item_group”

“a_s” for “ammo_shells”
“a_n” for “ammo_nails”
“a_r” for “ammo_rockets”
“a_c” for “ammo_cells”

“rv_s_h” for “remove_spawngroup”
“rs_s_h” for “restore_spawngroup”
“rv_gr” for “remove_group_no”
“rs_gr” for “restore_group_no”
“rv_g” for “remove_goal_no”
“rs_g” for “restore_goal_no”

Strings
“t_s_h” for “team_str_home”
“t_s_m” for “team_str_moved”
“t_s_c” for “team_str_carried”
“n_s_h” for “non_team_str_home”
“n_s_m” for “non_team_str_moved”
“n_s_c” for “non_team_str_carried”

“b_b” for “broadcast”
“b_t” for “team_broadcast”
“b_n” for “non_team_broadcast”
“b_o” for “owners_team_broadcast”
“n_b” for “netname_broadcast”
“n_t” for “netname_team_broadcast”
“n_n” for “netname_non_team_broadcast”
“n_o” for “netname_owners_team_broadcast”

“d_t” for “team_drop”
“d_n” for “non_team_drop”
“d_n_t” for “netname_team_drop”
“d_n_n” for “netname_non_team_drop”

EOF

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>