Action Half-Life 2 version 3 manual

Gameplay

The Action menu

The Action Menu is the first thing you see when joining an Action Half-Life 2 game. This is a brief explanation on its tabs and how it works.

Outer Tab

This tab displays the server's message of the day. You're free to read it, it may contain valuable information on the server you're playing on.
It also displays information on the map you are playing on and the current game mode setup.

Inner Tabs

The inner tabs allow to select your character and equipment. If any of the tabs requires your attention it will be marked with an exclamation mark.

Crew

In a free for all game:
Scroll through the list of available player models and click the one you want to play with. The selected model is highlighted with an X mark on its picture.
The last selected player model is saved on exiting the game and restored when you start it up again.

In a team game:
The top left corner shows the available teams, hovering your mouse over one of the team's name will open up the list of available subteams. Each subteam represents a player model available for that team. Clicking a subteam will select the associated model as your player model and displays a preview on the right. The server may be configured for three team teamplay - if not, the name of the third team will read "No third team" and it won't be selectable. You can also choose to have the game assign you to a team automatically. It will pick the team with least players and a random subteam then. You can also choose to be a spectator here.
Note: the names of the teams and subteams are defined in a file called .ini for each map and are placed in the maps directory. A fallback file with default teams is placed in Action Half-Life 2's root directory and it's called defaultteams.ini. This file contains information on how to define teams and subteams for your own map.

Uniques, Sidearms, Items

These tabs allow you to choose your weapon loadout. You can choose the unique weapon, sidearm and special item you will spawn with. Once you select an item, it will be highlighted with an X mark over its image. Based on server settings you may not be allowed to select items from one or more of the categories. In this case the corresponding tabs will not be shown. In addition to that, specific items may be forbidden by server settings, these will not be selectable on their corresponding tab. See equip_restriction_info.txt in AHL2's root directory for more information on this. Each category also allows you to select a random piece of equipment one time or for each spawn.

Action Button

Click the button when you are done selecting your player model and equipment. If any of the tabs still require your attention, the button will not be clickable.

How to play Action Half-Life 2

Basically Action Half-Life 2 plays like any FPS game out there. When you've come here you most probably already know how FPS games work in general, so this page will only talk about what is different about playing Action Half-Life 2.

Stunts

A big part of the fun that Action Half-Life 2 is are its stunts and there are even four of those. To see them in action before you start playing just watch our trailers. Detailed information on what to keep in mind in regards to stunts like distances and ceiling heights can be found from the Mapping General setup section.

Dive
The signature stunt of the mod since its early days as a Half-Life 1 mod. Just press the stunt key and you will dive in the exact same direction you're currently moving. You will land the dive being prone, in case you hold down the stunt button when landing you will end the dive in a roll and directly stand up afterwards.

Duckjump
Press the duck button, hold it down and immediately hit the jump key. This will make you duckjump in whatevery direction you are currently moving. Duckjumps are a bit higher and propel you further than a normal jump (although not as far as a dive). However, during the duckjump your weapon gets holstered and is drawn again as soon as you hit the ground after duckjumping.

Walljump
When you're in a jump and hit anything solid in the map just press the jump key again and you'll perform a walljump. This will get you a bit higher in the air and also automatically turn you around which basically makes you reflect off the surface you walljumped off like a billards ball.

Wallclimb
See that wall in front of you which is just too high to jump on top of it? Well, just jump and keep the jump button pressed - if the wall is not too high you will automatically start to climb on top of the wall. Note that during the climb you'll be looking directly at the wall you are climbing and cannot look around. Climbing walls also works by jumping towards a wall while holding down the jump button, for example off one house towards the roof of another one. You can even stop holding down the jump button mid-air as long as you hold it down again just before you hit the spot you want to climb. Note that you can only climb walls on whose top you can at least duck.

Walldive
You want to quickly escape an enemy but you're in a dead end? Help is here: keep the walk button down while moving towards the wall. When you almost or already hit the wall, press the jump button. You will automatically run up the wall, turn around and dive off of it. It's that easy.

Additional movement possibilities

Getting down to prone
You can become prone by diving. It is also possible to hold down the duck button and pressing the stunt key. This will make you go prone at the exact same spot you're currently standing on.

Moving while being prone
While being prone you can only crawl left or right. Moving forwards or backwards is not possible.

Getting up from prone
To get up from prone just either press the key to move backwards, the stunt key, the duck button or the jump button. Depending on the free room above you, you will either stand up completely, stand up to duck or just stay down. In that case you need to crawl to a spot where you can stand up.

Rolling without diving
Rolls can be executed without the need to dive first. Just keep ducked, move in any direction and press the stunt key and you'll start a roll in the direction you are moving.

Other gameplay mechanics

Getting wounded and breaking your legs
In Action Half-Life 2 you bullets don't only give you damage, however those bullets can get you wounded. In that case you will leave bloodstains on the floor and loose more and more health points. Additionally when you get shot in the legs or fall from great heights you'll break your legs and start limping. When limping you move significantly slower and you cannot perform any stunts. That means neither getting wounded nor breaking your legs is good for you. But wait, there's help - read about it in the next paragraph.

Bandaging
Whenever you are wounded or your legs are broken just press the bandage key. After about 3 seconds you will stop loosing blood and health points and your legs will not be broken anymore. Note that you cannot shoot while bandaging.

Shooting through walls and objects
You may think walls as well as any object on the map provides cover from bullets. Think again. In Action Half-Life 2 bullets can travel through about anything given that it is not too thick, although they loose some of their damage while travelling through walls and objects. So don't expect something like an office wall to provide that much cover.

Action Half-Life 2 Gamerules

Game Modes

Deathmatch
Everyone's up against everybody. A map can end after a specified time in minutes or when a player reaches the score limit. Every frag means one point is added to your score. Staying alive is awarded, starting at four frags without getting killed you will receive 2 points per frag. At six frags without getting killed it is 3 points and so on. This way you can earn up to 16 points per frag. But beware, don't accidentally kill yourself or you will lose one point.
To start a Deathmatch do not activate the "Teamplay" checkbox and set the "Number of lives" to 0.

Team Deathmatch
Normal Deathmatch rules apply, except that players are grouped into teams. Each player's individual score is added to their team's score, the score limit checks the team score. Staying alive is awarded the same way as in Deathmatch. Friendly fire can be enabled or disabled.
A Team Deathmatch is started by enabling the "Teamplay" checkbox and setting the "Number of lives" to 0.

Teamplay
In this game mode two teams are up against each other. The rules are almost the same as in Team Deathmach, except that the individual player's score is not used to determine the team's score but the amount of rounds the team won. A round is won when all players from the opposite team are dead. In addition to the score and time limit you can also set a round win limit to determine when to end a map. The maximum time a round lasts can be set as well. To start Teamplay just enable the "Teamplay" checkbox and set "Number of lives" to any number greater than 0. The number of lives defines how often a player may be fragged before they stay dead until the next round starts. In this mode staying alive does not get awarded.

Last Man Standing
This is another round-based game mode but it does not involve teams. To win a round you have to be the last player alive. Upon winning a round all frags you got during the round are added to your score again, so not hiding until there is only one other player left is awarded. Just like with Teamplay you can set a time, score, round and round time limit. Last Man Standing mode is activated by leaving the "Teamplay" checkbox disabled and setting "Number of lives" to anything greater than 0. Again, the number of lives defines how often a player may get fragged until they have to wait for the next round to start.

Advanced Options

Allowed equipment (mp_allowequip)
  • No equipment (0): Players spawn with just their bare hands, the equipment page on the action menu is not shown.
  • Sidearms only (1): Players spawn with their hands and a sidearm (either a Pistol or 10 knives), uniques and items cannot be selected from the equipment page.
  • Sidearms and items (2): Players spawn with their hands, a sidearm and an item, uniques cannot be selected from the equipment page.
  • Full equipment (3): Players spawn with their hands, a sidearm, item and unique weapon, everything can be selected from the equipment page.

Forced equipment (mp_forcerandom)
  • Nothing forced (0): Players are allowed to spawn with any equipment.
  • Forced random (1): Players spawn with a random set of equipment, restrictions from mp_allowequip apply, the equipment page on the action menu is not shown.
  • Forced same-random (2): All players spawn with the same set of random equipment which is determined by the server and changes for each round in roundbased games. Restrictions from mp_allowequip apply and the equipment page on the action menu is not shown as well.

Allowed pickups (mp_allowpickup)
  • No pickups (0): There will be no weapon or item pickups
  • Sidearms only (1): Only sidearms pickups can be found on the map
  • Sidearms and items (2): Sidearms and unique item pickups can be found on the map
  • Everything (3): No restrictions apply, you'll find all sidearms, unique weapon and item pickups the mapper placed

Common Options

Score limit (mp_fraglimit)
Set the maximum score to be reached before the map is changed. In Deathmatch and Last Man Standing this is a single player's score, in Team Deathmatch this is the team's score, in Teamplay this is the number of rounds won.
Note: Deathmatch and Team Deathmatch award multiple points for staying alive. Starting at 4 frags without being killed 2 points are awarded for each frag. This gets increased by 1 for every additional 2 frags without getting killed up to a maximum of 16 points per frag if you manage to stay alive for 32 frags in a row. Last Man Standing mode awards not waiting until just one additional player is left to easily win the round - at the end of the round the winner is awarded every frag they scored during the round again.

Time limit (mp_timelimit)
This is the maximum number of minutes a game can run before the map is changed. In roundbased games this is checked at the end of the round to prevent changing the map mid-round.

Timelimit per round (mp_roundtimelimit)
Defines for how many minutes a round can run without a winner before it is ended automatically.

Maximum number of rounds (mp_maxrounds)
If no other limit is hit, this defines for how many rounds a roundbased game can run before the map gets changed.

Action Half-Life 2 Goal Modes

Introduction

The goal modes feature in Action Half-Life 2 is meant to be very dynamic. You will find a few goals known from other games, but they come in a different taste here. Additionally all goals may exists multiple times in a map which can lead to a goal to play differently in every round. Goals basically consist of two types of objects: items and zones. Some items may be carried, others not, carried items show up on the player carrying them. Zones are areas where you either have to take an item or just go yourself without carrying an item.
Since all goals to be found below may exists multiple times and simultaneously in a map, the game may also select a new goal every round. But don't worry, you can limit the allowed goal modes on your server.
The game helps you to find your way around the currently active goal by providing a pointer to the next item or zone on the hud, including the name of the location where the next item/zone is to be found (if the name is available) and a short informational text - again, if it's available. No matter how dynamic it is, you will never wonder what to do next.

The Goal Modes

Capture The Briefcase
CTB is a goal for roundless teamplay games and is similar to your average capture the flag mode, except that you are carrying a briefcase instead of a flag. The briefcase itself can be carried and is shown in the players hand. This also means that the player is limited to sidearms, as two-handed weapons can not be used anymore. Players are free to drop the briefcase but the ultimate goal is to take the briefcase to the capture zone. For all stats lovers out there the kills are counted, but do not add to the team's score. Every capture is one point for the team, the team which first hits the score limit wins the map.
There is a nice twist to this game mode as briefcases and capture zones are not necessarily limited to a team, some of them may be free for all. It is also possible to have multiple team-specific items linked to one free for all capture zone. Or just one briefcase and one capture zone for all teams, to have you fight over the briefcase.

Dante Must Die
The Dante Must Die goal can be activated in teamless, roundless games. This is a pure frag-fest and plays like this: the game selects one of the existing Dante Must Die items from the map and activates it. The player who first grabs it becomes Dante. Dante will lose any unique weapons and unique item. The Dante Must Die item is also not droppable, so the player keeps being Dante until another player comes along and kills him. All damage Dante does is multiplied by 2.5 and he receives 10 health points and one point for every kill. An unfair advantage? No - because there are no points for non-Dante players killing other non-Dante players but 10 points for the player who kills Dante. A major frag-fest. The player who first hits the score limit wins the map.

VIP
VIP is a goal for roundbased teamplay. Upon round start a random player from each team is made the VIP and has to be escorted to the escape zone. Escape zones may be team-specific or free for all, which means that it may happen that all teams have to escort their VIP to the same escape zone. As multiple escape zones may exist the teams may have to escort their VIP to different zones each round. Frags are counted, but don't add to the team score - only successful escorts count. The team which first hits the score limit wins the round.

VIP Lite
This is a roundbased goal mode as well. It is available on all maps when there are no VIP escape zones. In this case the goal is to kill the other team's VIP.

Custom Goals
Custom Goals are difficult to describe as they give mappers the freedom to create their own goals by chaining items and zones together. They can also select their goals to be either for roundless or roundbased games and may also make the goals free for all, so they can also be played in teamless modes. Just follow the directions on the HUD to complete the goal. For teambased goals only completing the goal adds to the team's score, whereas frags are still counted for your stats. In roundless custom goals every frag adds to the player's score and the player who first hits the score limits wins the map.

Console variables and commands

Client

dropweapon
Drop the current weapon.

dropitem
Drop the current item.

dropspecificweapon
Drop a specific weapon, refer to the file weaponID.txt for a list of weapon names to be used as a parameter for this command.

cl_autopickup
Set to 0 to never automatically pick up weapons, to 1 to only pick up weapons with ammo (default) and to 2 to pick up every weapon.

cl_lastunique
Set by the action menu, defines the previously selected unique weapon. This is selected automatically when joining the next game/map even after restarting the game.

cl_lastsidearm
Like cl_lastunique but defines the previously selected sidearm.

cl_lastitem
Like cl_lastunique as well, this time defines the previously selected unique item.

playername
Followed by a new name this is an easy way to change your player name.

Server

mp_allowequip
Sets what kinds of equipment may be selected from the action menu, see GameRules for details.

mp_allowpickup
Sets what kinds of map placed equipment is found on the map, see GameRules for details.

mp_forcerandom
Sets whether or not to force random equipment for players, see GameRules for details.

mp_limitteams
Defines how many players a team can have over another team.

mp_autoteambalance
Defines whether the game should balance out teams based on mp_limitteams in team games. In roundbased TP this is done at round restart, during Team DM this is done every time a player dies.

mp_threeteams
Sets whether or not three team teamplay is allowed (changes require a map change to become effective).

mp_allowctb
Sets whether or not the goal mode Capture The Briefcase is allowed, when it's being found in the current map.

mp_allowdante
Sets whether or not the goal mode Dante Must Die is allowed, when it's being found in the current map.

mp_allowvip
Sets whether or not the goal mode VIP is allowed, when it's being found in the current map.

mp_allowcustom
Sets whether or not custom goals are allowed, when they are being found in the current map.

mp_maxrounds
The maximum number of rounds that can be played on a map in a roundbased game.

mp_playerlives
This defines how many times a player can spawn before staying dead for the rest of the round. Applies to roundbased games only, see GameRules for details.

mp_roundtimelimit
The maximum number of minutes a round can run for in roundbased games.

mp_waitbeforeroundend
The number of seconds to wait after the last kill before starting the next round.

mp_restartround
Forces the game to start a new round after the defined number of seconds.

sv_forcelan
Set to 0 for a server which is supposed to be accessible on the Internet and to 1 if this is supposed to be a LAN server.

sv_mindistancedm
When a player respawns each spawn point is checked for its distance to every player. This defines the minimum distance a spawn point needs to away from any player to become a valid spawn point. If no spawn point matches this condition the spawn point which is furthest away from any player is selected, leaving out the previously used spawn point for this player.

sv_maxdistancedm
When a player respawns each spawn point is checked for its distance to every player. This defines the maximum distance a spawn point can be away from any player to become a valid spawn point. If no spawn point matches this condition the spawn point which is furthest away from any player is selected, leaving out the previously used spawn point for this player.

sv_respawntimeammo
Sets how many seconds it takes for an ammo pickup to respawn after it got picked up, default is 30.

sv_respawntimeweapon
Sets how many seconds it takes for a weapon pickup to respawn after it got picked up, default is 20. Note that unique weapons do not respawn after they get picked up. They move back to their original position as soon as the player who picked them up drops them.

sv_respawntimeitem
Sets how many seconds it takes for an item pickup to reappear after it got picked up, default is 30. Note that items do not respawn after they get picked up. They move back to their original position as soon as the player who picked them up drops them.

sv_assistspawn
By setting this to 1 in roundbased games a respawning player will spawn as near as possible to their weakest teammate, default is 0. It does not have any effect in non-roundbased games.

Weapons and Items

Action Half-Life 2 Melee Weapons

Kung Fu

You can either punch or kick a player. Punching does not deal much damage, but is fast. Kicking deals more damage, but is slower than punching. If you hit an enemy with your kick you will also kick their current weapon out of their hands.

Melee Key

The melee key can be used with any weapon to hit other players with it. Useful if you are fresh out of ammo. There is a special use for this key with Kung Fu: it allows you to catch knives which were thrown at you and add them to your inventory. Requires quite some skill in timing, but is worth to master.

Action Half-Life 2 Sidearms

Beretta

While it's firing fast and quite accurate and does not have much recoil, it does not deal much damage. Three firing modes are available - full and semi-automatic and burst. It can be equipped with the lasersight as well as the silencer. The clip size is 16.

Colt 1911

Compared to the Beretta the Colt 1911 deals more damage but is little less accurate and has more recoil. It also does not come with the burst firing mode. Lasersight can silencer can be attached to it. The weapon can handle 8 bullets per clip.

Desert Eagle

This weapon deals quite a bit of damage. The downside is its recoil and accuracy as it takes some time between shots and it is not as accurate as the Beretta or Colt 1911. You can attach the lasersight to it but not the silencer. Each clip comes with 8 rounds.

Magnum

The Magnum deals much damage and is very accurate. However, it takes quite long between shots and there is much recoil. While the lasersight can be equipped with it you cannot use the silencer with it. Clip size is 6.

Colt SAA

The Colt SAA causes high damage but is slow to fire and very slow to reload. However, it is quite accurate so this might be your weapon of choice. Clip size is 6.

Knives

Knives can either be set to slash or throw. Slash is great for close combat and deals a fair amount of damage. Throwing requires some skill to hit your enemy but is almost always lethal.

Action Half-Life 2 Unique Weapons

Assault Rifle

It is fast, deals a fair amount of damage, there is not much bullet spread and the recoil is manageable. Three firing modes are available, burst full-automatic and semi-automatic. Burst mode fires three bullets in a row very fast, the other firing modes are a bit slower. The lasersight can be attached to the Assault Rifle. Each clip comes with 30 shots.

Handcannon

The sawn-off double-barreled shotgun fires 30 bullets per shell which deal little damage by themselves. There is much recoil as well as bullet spread and it takes a fair amount of time between shots. Still it is very deadly at close quarters. You can either shoot both chambered shells at once or one by one. Each ammo pack adds 8 shells.

Shotgun

While there are only 20 bullets per shell, compared to the Handcannon it deals more damage per shell and there is way less recoil and bullet spread. However, it is a bit slower between shots. The weapon can be loaded with 6 shells at max of which all are loaded one after another. The ammo packs found for it contain 6 shells.

Sniper Rifle

The Sniper Rifle deals a very high amount of damage. While it is unzoomed the bullet spread is quite high but it is spot-on while zoomed. It takes long between shots and there is much recoil, the silencer can be attached to it. Each clip contains 6 bullets.

Submachine Gun

All of the three firing modes (semi-automatic, full-automatic and burst) are very fast. The bullets do not deall too much damage and the bullet spread is quite low. There is very little recoil and lasersight as well as silencer can be attached. Each clip contains 30 shots.

Akimbo Beretta

The Akimbo Beretta is about the same as the single Beretta. The only changes are that it is slightly slower, less accurate, burst firing mode is not available and it cannot be equipped with the lasersight. Each weapon can store 16 rounds, so you can shoot 32 rounds at max without reloading.

Akimbo Colt 1911

As with the Akimbo Beretta the Akimbo Colt 1911 is slightly slower and less accurate as its single counterpart. The lasersight cannot be equipped to it as well. As each weapon has 8 rounds in its clip you can shoot 16 bullets before you have to reload.

Akimbo Colt SAA

As with all akimbo weapons, these are slightly less accurate than their single counterpart. However, these fire a little faster and you got double the ammo to use before you have to reload.

Action Half-Life 2 Items

Bandolier

The bandolier allows you to carry more ammo than usual. Instead of 10 knives you can carry up to 20 knives, it allows for one extra grenade as well as one additional clip for the weapons.

Quickdraw Holster

This allows you to instantly switch your weapons. That is you won't see any holster and draw animations.

Lasersight

It'll display a red laser dot for easier aiming and reduce your current weapons' spread by 50%. However, it can only be used with sidearms.

Silencer

When the silencer is equipped your shots will be way less loud than usual. Like the lasersight it is not available for all weapons, you can use it with the sidearms (except Magnum and Desert Eagle), the sniper rifle and the submachine gun.

Stealth Slippers

As long as you're running around with your stealth slippers on your movement won't make any sound. Except for landing dives that is.

Armour Vest

The armour vest provides protection for your upper body. Every bullet caught in the chest or stomach will cause half its usual damage while you're wearing the armour vest.

Hand Grenade

There are two ways to throw your grenade. Either you throw it and it starts cooking as soon as it leaves your hands or it starts cooking as soon as you are ready to throw.

Mapping

Action Half-Life 2: Mapping

This section describes how to map for Action Half-Life 2 version 3. It is divided into two parts, the setup and general information which may be useful when designing your map's layout.

Setup

In order to map for AHL2 you need to download "Source SDK Base 2013 Multiplayer" from the Tools category in Steam, a proper Gameconfig.txt and the AHL2 .fgd. This paragraph gives information on how to create or edit the Gameconfig.txt yourself, the AHL2 .fgd is included in the installer.

Gameconfig.txt
Action Half-Life 2 uses the Source 2013 engine, so you need to edit/create the file Gameconfig.txt in "\steamapps\common\Source SDK Base 2013 Multiplayer\bin". In case there is no file called Gameconfig.txt in that folder please create the file and copy and paste the following text into the file. Be sure to replace "" with the full path to your Steam installation and "" should obviously replaced by the full path of the directory where you want to save your map sources.
In case the file Gameconfig.txt already exists and there are one or more game configurations already you only need to copy the "Action Half-Life 2" block.
"Configs"
{
	"Games"
	{
		"Action Half-Life 2"
		{
			"GameDir"		"\steamapps\sourcemods\ahl2"
			"hammer"
			{
				"TextureFormat"		"5"
				"MapFormat"		"4"
				"DefaultTextureScale"		"0.250000"
				"DefaultLightmapScale"		"16"
				"DefaultSolidEntity"		"func_detail"
				"DefaultPointEntity"		"info_player_deathmatch"
				"GameExeDir"		"\steamapps\common\Source SDK Base 2013 Multiplayer"
				"MapDir"		""
				"CordonTexture"		"tools\toolsskybox"
				"MaterialExcludeCount"		"0"
				"GameExe"		"\steamapps\common\Source SDK Base 2013 Multiplayer\hl2.exe"
				"BSP"		"\steamapps\common\Source SDK Base 2013 Multiplayer\bin\vbsp.exe"
				"Vis"		"\steamapps\common\Source SDK Base 2013 Multiplayer\bin\vvis.exe"
				"Light"		"\steamapps\common\Source SDK Base 2013 Multiplayer\bin\vrad.exe"
				"BSPDir"		"\steamapps\sourcemods\ahl2\maps"
				"GameData0"		"\steamapps\sourcemods\ahl2\ahl2.fgd"
			}
		}
	}
	"SDKVersion"		"3"
}
After these files are created you can start up the map editor by starting "\steamapps\common\Source SDK Base 2013 Multiplayer\bin\Hammer.bat" and selecting "Action Half-Life 2" as the current game.

Mapping-related information on Action Half-Life 2 player movement

Action Half-Life 2 comes with several movement features you may want to take into account when designing your map's layout. Please note that the dive length and jump height are subject to change at the time of writing. The final numbers may be a bit lower than stated in the following text. As soon as the distances and heights are finalized this note will be removed and the figures below replaced by their final values.

Dives
A dive without a roll is about 544 units long, with the roll it's 576 units.

Duckjump
A duckjump gets the player a bit further than a normal jump. The duckjump propels the player roughly 384 units in their movement direction while a normal jump covers roughly 256 units. The player can duckjump three times without pausing until they have to recover for a brief moment. At its highest point the duckjump is 64 units high - this means indoor levels should have a ceiling height of at least 136 units. Duckjumps cannot be combined with walljumps or wallclimbs.

Walljump
The usual jump makes the player jump up 56 units, when ducking after jumping the player can get up 72 units. The height of a walljump is 80% the height of the normal jump, so 44 units. Under ideal conditions that is, the player's falling speed also influences the height of the walljump. Two walljumps can be done directly one after another until the player has to recover, as with the duckjump only for a brief moment. Also important to know: the player jumps back from the wall at the same angle they jumped towards the wall - just like a billards ball. The walljump can be combined with the wallclimb.

Wallclimb
To perform a wallclimb the player must be able to hang from the ledge they grab, so a wall has to be at least 73 units high. As the player's bounding box is 72 units high and a player can jump 56 units in AHL2 the maximum wall height to be climbable is 128 units. These figures are valid for a wallclimb from a stand. A player can also jump across a chasm towards a wall and climb up that wall, then the player just has to be able to hang from that wall - it has to be at least 73 units high. The climb ends being ducked, so there has to be enough room to duck on the wall the player climbs up, otherwise the wallclimb will not start.

Walldive
Basically a walldive just requires a wall to dive off. Now, since we don't want it to look weird or get the player stuck somewhere somehow it is checked whether or not the player can move up 56 units from where they stand: read, whether or not the wall is at least 128 units high and nothing blocks the player while running up. Addtionally, the wall must be all solid and may not have any gaps. Last but not least: if you don't want a player to run up specific walls for any reason, just make it a func_wall.

How to include Goals in your map

This section assumes that you have already read the information on the available goal modes. To add goals to your map, simply add the entities described below and if necessary link them together as the game expects. Then configure your server to allow specific goals and based on teamplay and player lives settings and the available goals in the map, the game will select a random goal for the current round. As the pre-defined goal modes are all based on the generic entitites, let us start with the custom goals.

Custom Goals

To add a custom goal to your map you just need to add any number of ahlg_item and ahlg_zone entities (called nodes from here on). They may be linked together as described below. The start of a goal is a node with no other node which links to it and the end is a node with no next node. It is highly recommended that you enable the developer mode when testing your goal as the game will print debug messages if it comes across anything it does not like about the way you set up your goal while it tries to build a goal object. Both ahlg_item and ahlg_zone have one output which can fire on several conditions so you can have goal nodes interacting with other types of entities. The entities ahlg_item and ahlg_zone have the parameters described below.

ahlg_item
  • HUD Texture: the texture shown as the goal item on the HUD when picked up (should be 128x128).
  • Linked Zone: the name of the goal zone to which this item is linked. Players have to take this item to the zone defined here by any means.
  • Next Item Or Zone: the name of the item or zone which should be enabled after interaction with this item.
  • Model: the model which is used to render this item in the game world.
  • Trigger Condition: condition to be met for this goal item to be triggered (which tells the game to move forward with this goal). Possible values are never, on being picked up, on use and on taking damage and any combination of those values.
  • Is Roundbased Goal: defines whether or not this goal is meant for roundbased games.
  • Is Carryable: sets if this item can be carried or not.
  • Is Droppable: defines whether or not this item can be dropped manually by the player after it has been picked up.
  • Restricts To Sidearms: when set, players lose all their unique weapons and may not pick up any while they carry this item.
  • Disallows Unique Items: when set, player lose their unique item and may not pick up any unique item while they carry this goal item.
  • All Teams Be Alive: when set all teams must have at least one live player to use this item in any way. If one team is already completely dead, the goal this item belongs to cannot be completed anymore.
  • Attach Point: defines where this item is shown on the player. Possible values are not shown, shown in the player's hand and shown on their back.
  • Owner Team: sets the team this item belongs to. Can be free for all, red, blue and green (yes, 3 team teamplay is making a return as well).
  • Heal Type: defines how this item heals the player. It may not heal the player at all, heal per kill and heal per time.
  • Heal Amount: sets the amount of health the player receives back per kill or per interval.
  • Heal Interval: if the heal type is set to heal per time this defines after how many seconds the player receives health.
  • Damage Boost Type: sets if carrying this item boosts the player's damage. It can not boost the damage at all, by ratio and make the player perform one hit kills with any weapon.
  • Damage Boost Ratio: if the item boosts damage by ratio, this sets the ratio.
  • Info Text: the informational text to be shown on the HUD when this item is the next node in a goal game.
  • Is Removeable: sets if this item should stay after a round ends.
  • Timeout: sets the time in seconds this item stays enabled once it's been activated. After it has timed out the goal this item belongs to cannot be completed anymore.
  • Fire Output Condition: condition to be met for this goal item to fire its output. Can be set to never fire output, on pickup, on use, on taking damage and any combination of these values.

ahlg_zone
  • Trigger Condition: condition to be met for this goal zone to be triggered (which tells the game to move forward with this goal). Possible values are never, on player touch, on item touch (includes being touched by a player carrying the item) and both.
  • Next Item Or Zone: the name of the item or zone which should be enabled after interaction with this zone.
  • Is Roundbased Goal: defines whether or not this goal is meant for roundbased games.
  • All Teams Be Alive: when set all teams must have at least one live player to use this zone in any way. If one team is already completely dead, the goal this zone belongs to cannot be completed anymore.
  • Owner Team: sets the team this zone belongs to. Can be free for all, red, blue and green.
  • Heal Type: defines how this zone heals the player. It may not heal the player at all, heal per kill and heal per time.
  • Heal Amount: sets the amount of health the player receives back per kill or per interval.
  • Heal Interval: if the heal type is set to heal per time this defines after how many seconds the player receives health.
  • Damage Boost Type: sets if staying inside this zone boosts the player's damage. It can not boost the damage at all, by ratio and make the player perform one hit kills with any weapon.
  • Damage Boost Ratio: if the zone boosts damage by ratio, this sets the ratio.
  • Info Text: the informational text to be shown on the HUD when this zone is the next node in a goal game.
  • Timeout: sets the time in seconds this zone stays enabled once it's been activated. After it has timed out the goal this zone belongs to cannot be completed anymore.
  • Fire Output Condition: condition to be met for this goal zone to fire its output. Can be set to never fire output, on player touch, on item touch (includes being touched by a player carrying the item) and both.

Capture The Briefcase

CTB consists of multiple ahlg_item_ctb entities which are linked to ahlg_zone_ctb entities. It's possible to assign both the item and the zone to a specific team or no team. Additionally you can have team-specific items to be assigned to free for all zones. The other way around (free for all item to team-specific zone) is not possible.
The item has these parameters as described above: Linked Zone, Trigger Condition (fixed to on pickup), Owner Team, Info Text, Is Removeable and Fire Output Condition.
The zone has these parameters as described above: Linked Item, Trigger Condition (fixed to on linked item touch), Owner Team, Info Text and Timeout.

The item will always be shown in the player's hand and it'll always restrict to sidearms. It's also sufficient to either link the item to the zone or the zone to the item. There is no need to fill both "Linked Item" and "Linked Zone".

Dante Must Die

The easiest goal to include in your map. Just place any number of ahlg_item_dante entities in your map. This really has only the "Is Removeable" parameter as everything else is fixed as described in the goal mode information.

VIP

Another easy to include goal. Just place any number of ahlg_zone_vip entities in your map. These parameters are available: Trigger Condition (fixed to on player touch), Owner Team, Info Text and Timeout.
VIP zones may either be free for all or limited to a specific team.

Modelling

Creating custom player models for Action Half-Life 2

Creating your own player models for Action Half-Life 2 is easy. There are just two things you need to keep in mind. First, you got to replace the bones1.qci from the SDK with this file:
		$definebone "ValveBiped.Bip01_Pelvis" "" -0.000005 -0.533615 38.566917 0.000000 0.000000 89.999985 0.000000 -0.000000 0.000000 0.000000 0.000000 0.000000
		$definebone "ValveBiped.Bip01_L_Thigh" "ValveBiped.Bip01_Pelvis" 3.890452 -0.000004 -0.000003 3.890040 -83.880280 -89.999985 0.000000 0.000000 -0.000000 -0.000000 -0.000000 0.000000
		$definebone "ValveBiped.Bip01_L_Calf" "ValveBiped.Bip01_L_Thigh" 17.848179 0.000000 -0.000000 -0.000000 -0.000000 0.000000 0.000000 0.000000 -0.000000 -0.000000 -0.000000 0.000000
		$definebone "ValveBiped.Bip01_L_Foot" "ValveBiped.Bip01_L_Calf" 16.525257 -0.000000 -0.000000 -13.166783 -58.015354 -8.799197 0.000000 0.000000 -0.000000 0.000000 0.000001 0.000000
		$definebone "ValveBiped.Bip01_L_Toe0" "ValveBiped.Bip01_L_Foot" 6.879455 0.000000 -0.000001 -0.163750 -33.966026 -0.433051 0.000000 -0.000000 0.000000 0.000000 0.000000 0.000000
		$definebone "ValveBiped.Bip01_L_Knee" "ValveBiped.Bip01_L_Thigh" 17.848179 0.000000 -0.000000 -0.000000 -0.000000 0.000000 0.000000 0.000000 -0.000000 -0.000000 -0.000000 0.000000
		$definebone "ValveBiped.Bip01_R_Thigh" "ValveBiped.Bip01_Pelvis" -3.890452 0.000004 0.000007 3.890003 -96.119896 -90.000000 -0.000000 0.000000 -0.000000 0.000000 -0.000000 -0.000000
		$definebone "ValveBiped.Bip01_R_Calf" "ValveBiped.Bip01_R_Thigh" 17.848173 0.000000 -0.000000 0.000000 -0.000000 -0.000000 -0.000001 0.000000 -0.000000 0.000000 -0.000000 -0.000000
		$definebone "ValveBiped.Bip01_R_Foot" "ValveBiped.Bip01_R_Calf" 16.525253 -0.000000 -0.000000 13.166629 -58.015186 9.393414 -0.000000 -0.000000 0.000000 0.000000 -0.000002 -0.000001
		$definebone "ValveBiped.Bip01_R_Toe0" "ValveBiped.Bip01_R_Foot" 6.879454 -0.000000 0.000000 -0.168221 -33.966026 -4.281973 -0.000000 -0.000000 -0.000000 -0.000001 0.000001 -0.000002
		$definebone "ValveBiped.Bip01_Spine" "ValveBiped.Bip01_Pelvis" 0.000005 3.345128 -2.981901 4.944224 89.999985 89.999985 -0.000001 0.000000 -0.000000 0.000000 -0.000000 -0.000000
		$definebone "ValveBiped.Bip01_Spine1" "ValveBiped.Bip01_Spine" 4.018331 0.000000 -0.000000 0.000000 -1.675443 -0.000000 -0.000002 -0.000000 -0.000000 0.000000 -0.000000 -0.000000
		$definebone "ValveBiped.Bip01_Spine2" "ValveBiped.Bip01_Spine1" 3.518565 0.000000 -0.000000 0.000000 5.748830 -0.000000 0.000001 -0.000000 -0.000000 0.000000 -0.000000 -0.000000
		$definebone "ValveBiped.Bip01_Spine4" "ValveBiped.Bip01_Spine2" 8.942642 -0.000000 -0.000000 0.000000 11.120881 -0.000000 -0.000001 0.000000 0.000000 0.000000 -0.000000 -0.000000
		$definebone "ValveBiped.Bip01_Neck1" "ValveBiped.Bip01_Spine4" 3.307271 0.000000 0.000000 0.000000 22.945700 179.999863 -0.000000 -0.000001 -0.000000 -0.000000 0.000000 -0.000000
		$definebone "ValveBiped.Bip01_Head1" "ValveBiped.Bip01_Neck1" 3.593712 -0.000001 -0.000000 -0.000057 23.295721 -0.000000 -0.000001 -0.000000 0.000000 -0.000000 0.000000 0.000000
		$definebone "ValveBiped.Bip01_L_Clavicle" "ValveBiped.Bip01_Spine4" 2.033346 1.000768 1.937660 -73.711861 168.619278 91.480545 -0.000000 0.000000 -0.000000 -0.000000 0.000002 0.000000
		$definebone "ValveBiped.Bip01_L_UpperArm" "ValveBiped.Bip01_L_Clavicle" 6.028142 0.000001 -0.000000 3.269412 -29.727108 -90.501205 0.000000 -0.000000 -0.000002 -0.000006 0.000000 -0.000000
		$definebone "ValveBiped.Bip01_L_Forearm" "ValveBiped.Bip01_L_UpperArm" 11.692554 0.000000 0.000001 -0.000007 -4.462023 0.000000 0.000001 0.000000 0.000001 -0.000007 0.000000 0.000000
		$definebone "ValveBiped.Bip01_L_Hand" "ValveBiped.Bip01_L_Forearm" 11.481672 0.000000 -0.000029 -6.108939 4.890882 -0.114306 0.000000 -0.000000 -0.000001 -0.000006 -0.000000 -0.000001
		$definebone "ValveBiped.Bip01_L_Finger4" "ValveBiped.Bip01_L_Hand" 3.859702 -0.142405 -1.191975 6.336393 -48.929226 -27.095287 -0.000000 0.000000 0.000001 -0.000002 -0.000006 0.000002
		$definebone "ValveBiped.Bip01_L_Finger41" "ValveBiped.Bip01_L_Finger4" 1.312561 -0.000000 0.000001 0.689380 -6.869082 0.275309 -0.000000 0.000000 -0.000001 -0.000003 -0.000007 0.000003
		$definebone "ValveBiped.Bip01_L_Finger42" "ValveBiped.Bip01_L_Finger41" 0.729364 0.000001 -0.000001 0.351506 -2.715997 0.000004 -0.000000 -0.000000 0.000002 -0.000004 -0.000005 0.000003
		$definebone "ValveBiped.Bip01_L_Finger3" "ValveBiped.Bip01_L_Hand" 3.942326 0.046771 -0.431444 4.543839 -46.421329 -8.880842 -0.000000 -0.000000 -0.000000 -0.000003 -0.000004 0.000005
		$definebone "ValveBiped.Bip01_L_Finger31" "ValveBiped.Bip01_L_Finger3" 1.539094 0.000001 -0.000001 0.335408 -14.196180 0.000006 0.000000 -0.000000 0.000001 -0.000001 -0.000006 0.000005
		$definebone "ValveBiped.Bip01_L_Finger32" "ValveBiped.Bip01_L_Finger31" 1.196323 0.000001 0.000000 0.553704 7.890882 0.000005 0.000000 0.000000 -0.000001 -0.000001 -0.000009 0.000003
		$definebone "ValveBiped.Bip01_L_Finger2" "ValveBiped.Bip01_L_Hand" 3.883689 -0.046771 0.431443 1.512890 -33.672447 4.921997 -0.000000 0.000000 0.000001 -0.000006 -0.000001 0.000002
		$definebone "ValveBiped.Bip01_L_Finger21" "ValveBiped.Bip01_L_Finger2" 1.719575 0.000000 -0.000000 0.456871 -20.995180 0.000005 0.000000 -0.000000 -0.000000 -0.000005 -0.000000 0.000004
		$definebone "ValveBiped.Bip01_L_Finger22" "ValveBiped.Bip01_L_Finger21" 1.209183 0.000000 0.000000 0.255592 -12.397375 0.000005 0.000000 0.000000 0.000001 -0.000005 -0.000002 0.000006
		$definebone "ValveBiped.Bip01_L_Finger1" "ValveBiped.Bip01_L_Hand" 3.859860 -0.137948 1.332466 2.812015 -28.624401 0.109609 -0.000000 0.000000 0.000001 -0.000005 -0.000002 0.000002
		$definebone "ValveBiped.Bip01_L_Finger11" "ValveBiped.Bip01_L_Finger1" 1.719427 -0.000001 0.000002 0.378893 -20.796593 0.000005 -0.000000 0.000000 0.000000 -0.000005 -0.000001 0.000005
		$definebone "ValveBiped.Bip01_L_Finger12" "ValveBiped.Bip01_L_Finger11" 1.099666 -0.000000 -0.000001 0.241269 -13.997992 0.000006 -0.000000 -0.000000 0.000000 -0.000003 -0.000001 0.000006
		$definebone "ValveBiped.Bip01_L_Finger0" "ValveBiped.Bip01_L_Hand" 0.806047 -0.348922 1.321258 -38.595524 -45.490326 -68.995514 0.000001 -0.000001 0.000000 0.000000 0.000001 0.000000
		$definebone "ValveBiped.Bip01_L_Finger01" "ValveBiped.Bip01_L_Finger0" 1.789785 0.000000 0.000001 0.361023 13.095178 0.000000 -0.000001 -0.000001 -0.000000 0.000003 -0.000002 0.000000
		$definebone "ValveBiped.Bip01_L_Finger02" "ValveBiped.Bip01_L_Finger01" 1.206998 -0.000002 -0.000001 0.551132 20.792919 0.000002 0.000000 0.000002 -0.000000 0.000003 -0.000007 0.000001
		$definebone "ValveBiped.Bip01_R_Clavicle" "ValveBiped.Bip01_Spine4" 2.033353 1.000771 -1.937610 73.712036 168.618774 -95.596497 0.000000 0.000002 0.000000 0.000000 0.000002 -0.000000
		$definebone "ValveBiped.Bip01_R_UpperArm" "ValveBiped.Bip01_R_Clavicle" 6.028143 0.000001 0.000000 -1.222520 -29.867315 94.075256 -0.000002 -0.000000 -0.000000 -0.000001 -0.000000 0.000000
		$definebone "ValveBiped.Bip01_R_Forearm" "ValveBiped.Bip01_R_UpperArm" 11.692548 -0.000000 -0.000001 -0.000002 -4.459790 0.000000 -0.000000 0.000000 -0.000001 -0.000002 -0.000000 0.000000
		$definebone "ValveBiped.Bip01_R_Hand" "ValveBiped.Bip01_R_Forearm" 11.481697 0.000000 0.000000 6.089165 4.890711 0.586365 -0.000000 0.000000 -0.000002 -0.000001 0.000000 0.000000
		$definebone "ValveBiped.Bip01_R_Finger4" "ValveBiped.Bip01_R_Hand" 3.859673 -0.132568 1.193107 -6.336342 -48.929165 27.424686 0.000000 0.000000 -0.000000 -0.000004 -0.000003 0.000007
		$definebone "ValveBiped.Bip01_R_Finger41" "ValveBiped.Bip01_R_Finger4" 1.312562 -0.000000 -0.000000 -0.689386 -6.869135 0.275313 0.000000 0.000000 0.000002 -0.000003 -0.000003 0.000007
		$definebone "ValveBiped.Bip01_R_Finger42" "ValveBiped.Bip01_R_Finger41" 0.729364 -0.000001 0.000002 -0.351455 -2.716051 0.000007 0.000000 -0.000001 0.000002 -0.000002 -0.000002 0.000007
		$definebone "ValveBiped.Bip01_R_Finger3" "ValveBiped.Bip01_R_Hand" 3.942293 0.050328 0.431040 -4.543844 -46.421329 8.880792 -0.000000 -0.000000 0.000000 -0.000003 -0.000003 0.000005
		$definebone "ValveBiped.Bip01_R_Finger31" "ValveBiped.Bip01_R_Finger3" 1.539097 0.000000 0.000002 -0.335412 -14.196236 0.000006 0.000000 0.000000 0.000001 -0.000001 -0.000003 0.000005
		$definebone "ValveBiped.Bip01_R_Finger32" "ValveBiped.Bip01_R_Finger31" 1.196323 -0.000000 -0.000000 -0.553651 7.890884 0.000004 -0.000000 0.000000 -0.000000 -0.000002 -0.000005 0.000004
		$definebone "ValveBiped.Bip01_R_Finger2" "ValveBiped.Bip01_R_Hand" 3.883655 -0.050328 -0.431046 -1.512841 -33.672451 -4.921994 -0.000000 0.000000 0.000001 -0.000004 -0.000006 -0.000000
		$definebone "ValveBiped.Bip01_R_Finger21" "ValveBiped.Bip01_R_Finger2" 1.719576 -0.000000 -0.000001 -0.456879 -20.995243 0.000002 -0.000000 -0.000000 -0.000000 -0.000002 -0.000007 0.000001
		$definebone "ValveBiped.Bip01_R_Finger22" "ValveBiped.Bip01_R_Finger21" 1.209182 0.000000 0.000001 -0.255599 -12.397437 0.000003 0.000000 0.000000 -0.000000 -0.000002 -0.000006 0.000002
		$definebone "ValveBiped.Bip01_R_Finger1" "ValveBiped.Bip01_R_Hand" 3.859828 -0.148935 -1.331282 -2.812022 -28.624346 -0.109664 0.000000 -0.000000 0.000001 -0.000000 -0.000005 -0.000001
		$definebone "ValveBiped.Bip01_R_Finger11" "ValveBiped.Bip01_R_Finger1" 1.719425 -0.000000 0.000002 -0.378899 -20.796654 -0.000002 0.000000 0.000000 0.000001 -0.000003 -0.000003 -0.000001
		$definebone "ValveBiped.Bip01_R_Finger12" "ValveBiped.Bip01_R_Finger11" 1.099666 -0.000000 0.000001 -0.241274 -13.998050 -0.000001 0.000000 0.000000 0.000001 -0.000002 -0.000002 -0.000002
		$definebone "ValveBiped.Bip01_R_Finger0" "ValveBiped.Bip01_R_Hand" 0.806016 -0.359833 -1.318336 38.595478 -45.490330 68.995583 -0.000000 0.000002 0.000000 0.000001 -0.000009 0.000005
		$definebone "ValveBiped.Bip01_R_Finger01" "ValveBiped.Bip01_R_Finger0" 1.789782 0.000001 0.000000 -0.361023 13.095230 0.000005 0.000001 0.000000 0.000000 -0.000002 -0.000008 0.000004
		$definebone "ValveBiped.Bip01_R_Finger02" "ValveBiped.Bip01_R_Finger01" 1.206999 -0.000002 0.000001 -0.551075 20.792921 0.000003 -0.000000 -0.000001 -0.000000 -0.000004 -0.000002 0.000004

		$definebone "ValveBiped.weapon_bone" "ValveBiped.Bip01_R_Hand" 8.386827 -2.717052 47.380913 -39.868702 176.232513 -89.737427 0.000000 0.000000 -0.000002 -0.000001 0.000000 0.000000
		$definebone "ValveBiped.weapon_bone_left" "ValveBiped.Bip01_L_Hand" 8.386827 -2.717052 47.380913 -39.868702 176.232513 -89.737427 0.000000 0.000000 -0.000002 -0.000001 0.000000 0.000000
		$definebone "ValveBiped.weapon_help" "ValveBiped.weapon_bone" -0.000012 -5.475904 1.045521 1.570796 -0.000000 -3.141592 0.000000 0.000000 -0.000001 -0.000000 0.000000 0.000000
		$definebone "ValveBiped.weapon_help_left" "ValveBiped.weapon_bone_left" -0.454004 1.806438 -0.000001 -1.570797 1.570796 0.000000 0.000000 0.000000 -0.000001 -0.000000 0.000000 0.000000

		// This is the list of bones on the model that are bone merged against
		$bonemerge "ValveBiped.Bip01_R_Hand"
		$bonemerge "ValveBiped.Bip01_L_Hand"
		$bonemerge "ValveBiped.weapon_bone"
		$bonemerge "ValveBiped.weapon_help"
		$bonemerge "ValveBiped.weapon_bone_left"
		$bonemerge "ValveBiped.weapon_help_left"
		
Then make sure your models' .qc includes this reference:
		$includemodel player/ahl_player_shared.mdl
		
Everything else is just the standard procedure to create Source Engine player models. And we guess you know about this already.

Linux

Linux server and client

Running the game and server

Both client and server require you to install 32-bit libraries on 64-bit Linux installations.

Client
This is fairly easy. Install Steam, get the Source SDK 2013 Base Multiplayer tool from the "Tools" section, copy all game files to your SourceMods directory into a subdirectory called ahl2 and drop your newly built server.so and client.so in the bin directory below ahl2. Then run Steam and given your system is set up correctly to run the Source engine: enjoy the game.

Server
A little more complicated than the client, but still doable. First you need to get SteamCMD by running the command "wget http://media.steampowered.com/client/steamcmd_linux.tar.gz" on the console. Move the downloaded file to where you want it to reside, change to that directory and run the command "tar -xvzf steamcmd_linux.tar.gz" to extract it.
To install (and later update) the dedicated server for Source SDK 2013 Multiplayer based games, just run this command: "./steamcmd +@ShutdownOnFailedCommand 1 +login anonymous +force_install_dir +app_update 244310 +quit".
Drop the ahl2 folder as prepared for the client into your (you have to replace this by an actual directory name, but I guess you already knew that). Now there are a few changes you have to make to actually be able to run the game (at least at the time of writing this article). The dedicated server expects the game library to be called server_srv.so instead of server.so, so you have to rename the file in the ahl2/bin folder. Additionally, in the bin folder of the dedicated server installation you have to rename two files. scenefilecache_srv.so needs to be renamed to scenefilecache.so and soundemittersystem_srv.so has to be renamed to soundemittersystem.so. If you do not rename these files the dedicated server will just fail, telling you that the files are missing.
Now, to run the game just execute this command from the root of the dedicated server installation:

> ./srcds_run -game ahl2

That's all.