How balloon_race works

This is for people wanting to create their own race map with capture points that allow the other team to continue if already captured. I’ll explain only the basics, so no speed boosts or alternate paths.

So what are the basic entities?

Balloon ship

The balloon ship itself is a func_tracktrain. This train follows a path of path_track entities. Some important flags for the train are:

  • No pitch (or else the camera screws up whenever someone teleports in, since the teleporter destinations are parented)
  • No user control (since an entity should handle train speed)
  • Is unblockable by player (the player is killed if blocking)

The important entities that the balloon uses are:

  • Trigger_multiple: At the wheel, this controls the speed by checking if a player is inside this entity.
  • Logic_timer: This is triggered by the trigger_multiple. Raises the speed if a player is inside the trigger_multiple for a set amount of seconds
  • Another logic_timer: Decreases the speed of the ship by a set amount of seconds if no-one is in the trigger_multiple.
  • A math_counter: Stores a number: the current speed of the train. Is raised/lowered by the logic_timers. Higher = faster, lower = slower.
  • A logic_case: This fires one logic_relay depending on the speed in the math_counter.
  • A series of logic_relays: one for each speed. These set the train speed (SetSpeedReal) and lets the game_text show.
  • A series of game_text, called by the logic_relays. This shows a line on the HUD with the speed.

All the speed entities

Some other entities that the balloon uses:

  • A mapobj_cart_dispenser, for healing on the go. Triggered by a dispenser_touch_trigger and sits above a dispenser prop_dynamic.
  • A couple of info_teleport_destinations, for quick return on the ship. (also use one for the ladder)
  • A filter_team, so the other team can’t use this balloon’s entities. Also used this for the spawn room doors, teleporters.

The points and track

The control points must not be linked! The teams must be able to capture a next point even if they don’t have the previous one.

Per control point:

  • One team_control_point, set the previous required point 1 (blue AND red) to itself.
  • One trigger_capture_area, sets blue/red mat_counter +1 if captured. Also sets the cap_point_base.mdl skin and raises the flag of the team that captured this point.
  • One path_track to stop the train. (will not stop train if point is already captured)
  • Three logic_relay, one for the red team, another for blue. I put these next to the trigger_capture_area in positions close to the path_track of each team. And yet another one for basic stuff that needs to happen if one of the teams captures a point. Something like enabling the trigger_multiple of both balloons or disabling the other relays. (so the losing team can continue without stopping so they can catch up)


  • One team_control_point_master, tells the HUD how to lay out the cap points. Also does some round rules.
  • Two math_counters, storing the score for each team. (if HitMax, then the other team’s balloon blows up and your team wins)

I hope that was a bit clarifying. I don’t like big walls of text either. 😛


2 Responses to “How balloon_race works”

  1. 1 Street_Wolf
    13 February, 2009 at 02:53

    Awesome, thanks for posting this. 😀

    I’ve had an idea for trying to make a pirate ship-esque map in TF2 for awhile.

  2. 10 March, 2013 at 19:06

    Helpful information. Lucky me I discovered your web site unintentionally, and I am stunned
    why this twist of fate didn’t took place earlier! I bookmarked it.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: