If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!
This article has a talk page!
This page is a good article.

Half-Life 2 (Windows)

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Half-Life 2

Developers: Valve,[1] EA UK (PS3)
Publishers: Valve,[1] Sierra Entertainment (retail distribution)
Platforms: Windows, Xbox, Xbox 360, PlayStation 3, Mac OS X, Linux
Released internationally: November 16, 2004 (Windows),[1] May 26, 2010 (Mac OS X)[2], June 27, 2013 (Linux)
Released in US: November 15, 2005 (Xbox), October 10, 2007 (Windows/360, The Orange Box), December 11, 2007 (PS3, The Orange Box)
Released in EU: November 18, 2005 (Xbox), October 19, 2007 (Windows/360, The Orange Box), November 23, 2007 (PS3, The Orange Box)
Released in AU: October 25, 2007 (Windows/360, The Orange Box), November 22, 2007 (PS3, The Orange Box)


AnimationsIcon.png This game has unused animations.
AreasIcon.png This game has unused areas.
CodeIcon.png This game has unused code.
SourceIcon.png This game has uncompiled source code.
GraphicsIcon.png This game has unused graphics.
ModelsIcon.png This game has unused models.
MovieIcon.png This game has unused cinematics.
ItemsIcon.png This game has unused items.
Sgf2-unusedicon1.png This game has unused abilities.
SoundIcon.png This game has unused sounds.
TextIcon.png This game has unused text.
DebugIcon.png This game has debugging material.


DevelopmentIcon.png This game has a development article
ProtoIcon.png This game has a prototype article
PrereleaseIcon.png This game has a prerelease article

Hmmm...
To do:
  • Document weapon_sniperrifle, weapon_flaregun, weapon_irifle, MP3 Player (Disabled features that can be found in SDK).
  • Cover Xbox version more thoroughly (are there any hidden cheat codes? is it identical content wise to the PC version? etc)
    • If there isn't any content unique to the Xbox version add a notice about parity of content.
  • We might want to remove that "Windows" tag from the article title, considering this page covers multiple versions.
  • Anything related to the 20th Anniversary update (e.g. EP1/2 pre-included, dev commentary, Workshop support, various pre release information released by Valve, etc.)

Half-Life 2 is a game where the right crowbar in the wrong hand will make all the difference in the world.

Sub-Pages

Read about development information and materials for this game.
Development Info
Read about prototype versions of this game that have been released or dumped.
Prototype Info
Read about prerelease information and/or media for this game.
Prerelease Info
Hl2 sounds.png
Unused Sounds and Dialogue
Galunga?
Hl2 texture.png
Unused Textures
LOTS of unused textures, varying from snowy environments to Xbox 360 leftovers.
Half-Life 2-perftest-gman.png
Unused Models
The wrong men in the right place.
SourceIcon.png
Unused Text
At least seven minutes worth of text that goes unread.
HL2-2004Vortigaunt.png
Revisional Differences
Texture changes, particle effects, physics, menu changes ect, that all occured over time.

Debug Menu

HL2-DebugMenu.png
A debug menu can be activated by pressing [Shift+F1], and displays a collection of multiple shortcuts to console commands. You still need sv_cheats 1 for many of these shortcuts to function correctly. The window can be closed by pressing [Shift+F1] again. Closing the window by clicking on the "X" will not disable the overlay, just hide the window.

The debug menu loads its interface from the script file "debugoptions.txt." The file uses the following format:

DebugMenu
{
	"width"	"512"
	"height" "300"

	"<tab>" // a tab on the debug panel
	{
		"<command>" // adds a button that executes a command when clicked
		{
			"command" "<command>" // console command to execute
		}
		"<toggle>" // checkbox that toggles a cvar between 1 and 0
		{
			"togglecvar" "<cvar>" // cvar to toggle
		}
		"<increment>" // button that cycles through options for a cvar
		{
			"incrementcvar" "<cvar> 0 5 10 15" // cvar, followed by the numbers to cycle through
		}
	}
}

The menu also exists in practically all games that use the Source Engine.

Parlor Games and Steam Friends

Inside the game's platform folder are assets and VGUI menus for several board games, along with Steam friends list and messaging menus.

When Steam originally released in 2003 it featured in-game Steam chat, and the ability to play board games with friends at any time (e.g., while waiting for a round of Counter-Strike to end) called "Parlor Games".

The original launch of the Steam network was infamously unstable and these games did not remain accessible for much longer, and in 2009 the rest of the menus were replaced by the Steam Overlay, however all of the assets remain in the game files.

The games featured were Checkers, Chess, Go, Hearts, and Spades.

Hmmm...
To do:
Find surviving screenshots and/or figure out how to open and restore these menus. The vgui_togglepanel console command does not seem to have much documentation.

The VGUI files for the Steam Friends menu are prefixed with "tracker", a reference to the chat menu's original launch as a standalone program called "Valve Tracker" in 2002.

A screenshot of the Chess minigame.

Unused Weapons

A number of non-player weapons have varying levels of implementation for player usage.

Alyx's Gun

HL2-weapon alyxgun-ingame.png
The pistol used by Alyx (weapon_alyxgun). Can only be obtained by typing give weapon_alyxgun in the console (it must be picked up manually after closing the console, as it spawns on the ground). The worldmodel is used for its viewmodel, and will block the player's vision frequently. The gun can fire in semi and full-auto modes, which can be swapped with "secondary attack" button. Both modes do the same amount of damage (about as much as the retail 9mm Pistol), but neither mode has any recoil, and both modes are about as accurate as the pistol. As noted below, there was also evidently a rifle mode planned at some point.

Picking up the gun will have it show up in the 5th pistol category slot. It has one full clip loaded and none in reserve, and the only known way to get more ammo would be to use the givecurrentammo command, which will max out your ammo to 150 (180 including the loaded clip). This can be increased by using the command sk_max_alyxgun #, # being the amount of ammo you want.

Half-Life 2: Episode One gives Alyx's gun a unique firing sound which also carried over to Episode Two, but the sound remains unchanged in Half-Life 2.

Annabelle

HL2 annabelle unused weapon.png
Father Grigori's rifle (weapon_annabelle). Can only be obtained by typing give weapon_annabelle in the console. It has a two-bullet tube magazine and shares the .357 Magnum's ammunition. The viewmodel is identical to the retail Shotgun. It does the same amount of damage as the Magnum, but will only reload a single bullet when emptied. Upon reloading manually, console errors reference an incorrect call to the retail Shotgun reload, and the weapon is reloaded instantly at full capacity. Despite sounding and looking like a Shotgun, it fires a single bullet like the revolver, and has zero recoil.

It occupies the same slot as the AR2, and if you select the AR2 (with the 3 key by default), you'll pull out the Annabelle instead. Apart from the console command use weapon_ar2, this is the only way to reequip it apart from pressing the "last weapon used" key...if it was your last used weapon. With Episode One, the Annabelle gained its own slot under the Bugbait (slot 17) which displays off-screen, but is fully selectable. This change was brought over to the base game in the 20th Anniversary Update.

Food Package

Half-Life 2-weapon citizenpackage-ingame.png
The food package (weapon_citizenpackage). Can only be obtained by typing give weapon_citizenpackage in the console. It has no proper viewmodel, instead using its worldmodel, though it lines up decently with how other weapons are held by the player. Comments in the weapon's coding reveal that it's a weapon because NPCs are able to carry weapons, but can not pick up or wield normal objects, so any objects the devs wanted citizens to hold needed to be coded as a "weapon".

   // Citizen package. Not really a weapon, just needs to be a visible model for citizens to open.

Two things of note are that its pickup icon reuses the Shotgun's, and that it occupies the same slot as the SMG, but it doesn't have its own selectable slot, meaning that like the Annabelle, you can only reequip it if you press the "last weapon used" key or press 3 on the keyboard and then fire.

Like the Annabelle, the Citizen Package gained its own slot (slot 19) under the Bugbait that displays off-screen yet remains selectable beginning with Episode One, and the 20th Anniversary Update bringing it back to the base game.

Suitcase

HL2-weapon citizensuitcase.png
A suitcase (weapon_citizensuitcase). Can only be obtained by typing give weapon_citizensuitcase in the console. It has no proper viewmodel, instead using its worldmodel which blocks most of the player's vision, as it's placed almost directly in front of Gordon's face. Like the food package, it was coded as a weapon to allow citizens to carry it around, even going as far to have the exact same comment as the food package in its coding. Also like the food package, it's in the same "slot" as the SMG, but doesn't actually show up in your weapons, and can only be reequiped using the same methods as the food package (pressing 3 will not work if you already have the package). Like the previous examples, the Suitcase gained its own slot (slot 18) under the Bugbait that displays off-screen, but is fully selectable, with Episode One.

Interestingly, it seems to use the MP5K icon from the prototype as its pickup icon.

Stunstick

The Stunstick from the game's prototype kept its viewmodel, along with the early suit color. However, it is normally only usable by NPCs in the retail version, as picking one up gives armor instead. Valve updated and completed this weapon for Half-Life 2: Deathmatch.

To remove the armor pickup: open src/hl2/hl2_player.cpp in the Source SDK and comment out or remove the following section:

#ifndef HL2MP	
	if ( pWeapon->ClassMatches( "weapon_stunstick" ) )
	{
		if ( ApplyBattery( 0.5 ) )
			UTIL_Remove( pWeapon );
		return false;
	}
#endif

You can obtain a semi-functional Stunstick in vanilla retail by using the command: ent_create weapon_stunstick and renaming its classname after spawning the weapon. Once picked up afterwards, the armor pickup code will be skipped (as its classname isn't "weapon_stunstick") and allow you to equip it. The hardcoded behavior of the Stunstick is functional in this state (i.e. it is a melee weapon that emits sparks and uses the stunstick damage value defined in skill.cfg), it will even use the properties defined in the weapon script file (weapon_stunstick.txt) if the weapon's classname is unmodified using ent_create: otherwise it will take on the properties of whichever weapon script file matches the new classname.

In the 20th Anniversary update, the Stunstick received a player-usable entity (weapon_stunstick_player) that doesn't require changing its classname before pickup, but doesn't have its own weapon script file.

Basehlcombatweapon

The base for all firearm weapons in Half-Life 2, it can be picked up thanks to having an entity tied to its code class but doesn't do much else. It has no weapon script file.

Cubemap

Shown in the Half-Life Model Viewer. Shown in-game with proper cubemaps. Now *these* are some shiny balls of steel!

A test "weapon" that can be used to test cubemap reflections in maps. This "weapon" consists of 6 spheres, all using different types of reflective materials. It can be spawned via the developer console using impulse 81 or give weapon_cubemap. It also re-uses the Shotgun's pickup icon. Once another weapon is selected, there is no way to select it back other than to press the "last weapon used" key... if it was your last selected weapon. Opening the model file (shadertest\envballs.mdl) in HLMV has it use the "default" cubemap. This was used in E3 2003 - Source DirectX 9.0 Effects Trailer but only 2 out of the 6 spheres are shown.

Half-Life 2: Episode One put this "weapon" in the 20th slot where the Bugbait is found, which was carried over to base Half-Life 2 in the 20th Anniversary Update.

Brickbat

A weapon from the Half-Life 2 leak. Although cut, it has an entry for it inside of the game's FGD (Forge Game Data) file and is able to be placed in maps. However, the weapon itself is non-functional. The "Brickbat Type" KeyValue would indicate what type of "ammo" the Brickbat would use, whether it be rocks, beer bottles, Headcrabs functioning similarly to Half-Life's snarks and Cremator heads. Of note is that Citizens have entries for "Beer Bottle" and "Beer Bottle2" in the FGD, both of them non-functional.

The Brickbat's class info inside of Hammer.

Unused Items

Sniper Rounds

Halflife2 Sniperrounds 2.png

The sniper ammo (item_box_sniper_rounds) from the prototype was kept in the final game. It can be spawned using ent_create item_box_sniper_rounds and picked up, but no weapon in the game uses this type of ammo. It also has no physics, but will still produce bullet holes if shot at. The original box texture has been replaced with a pink texture saying "OBSOL33T" (obsolete in "leet speak") in cyan letters. Why it wasn't just removed outright is unknown.

Flare Rounds

Hl2-boxflares-mdl.pngHl2 flarerounds.png

Flare rounds (item_box_flare_rounds and item_flare_round) still exist in the final game and can be spawned with ent_create item_box_flare_rounds/item_flare_round, but cannot be picked up due to the FlareRound ammo type having been removed. Like the sniper rounds, neither of these have physics but will produce bullet holes if shot at.

Unused Animations

Hmmm...
To do:
Some images here need to get replaced with gifs to actually show animations.

Alyx's Gun

Alyx's gun has unused animations that show it transforming into a SMG and a rifle. However, no idle animation for these modes exist. In addition, Alyx herself has animations for changing the pistol into a SMG, and the SMG to a rifle, but not back to the pistol or directly to rifle mode.

Used Unused

Combine Soldiers

The Combine soldiers possess an unused firing animation for the HMG1 as well as animations for placing and rolling grenades.

Poison Headcrab

The Poison Headcrab has an unused animation, depicting it spitting something from its mouth, most likely poison. There is no data about the fired projectile or its effect on the player however.

Vortigaunts

Vortigaunts have unused animations for being grabbed by Barnacles, reminiscent of the behaviour of human NPCs in Half-Life. However, these go unused, as they are instantly killed and turned into a ragdoll upon being strangled by one, like all other NPCs. In addition, game files mark such events as "legacy content". They also have animations for using the Tau Cannon. At one point, they were going to dismount it from the Scout Car in Lighthouse Point.

Metrocops/Civil Protection

Metrocops also have an unused animation for being grabbed by barnacles.

Leftover Citizen Animations

Due to how animation files are shared between models, key NPCs like Breen and Alyx have access to all of the regular animations despite only using a few.

Alyx

Click on GIFs to see them animated

Unused Model Features

Elementary, my dear Cactus.
This needs some investigation.
Discuss ideas and findings on the talk page.
Specifically: Look at other weapons/models in the Model Viewer and see if they have unused/unseen features or elements.

SMG Magazine Bone

Unused model bone selected in a model editor.
The model for the SMG contains a magazine bone (ValveBiped.clip) that, as expected, moves the magazine. Despite this, the magazine is never animated during the reload animation in-game, with Gordon instead just smacking the bottom of the clip. Based on the fact this section of the model has been weight painted, it's likely this was meant to be animated at some point, likely being scrapped since you never see that far down when reloading anyway.

"Drivable" APC

Halflife2 apc.png

At one point, APCs were intended to be controllable by the player, but playtesters ultimately felt it was too slow compared to the buggy, and this function was cut. But there are remnants of this left in the game, as it's actually possible to enter an APC pretty early in the game.

In d1_trainstation_03 (the level where Gordon meets Alyx for the first time), two APCs can be seen driving around on the street, eventually veering off into an alley (there's another APC near the opposite end of the map that can't be interacted with). Using god mode, the player can jump down to the APCs and enter them like any normal vehicle...but the camera will be completely screwed up and the player can neither drive nor exit the vehicle, requiring them to reload a save to get out. The APCs can not be entered before they stop moving, likely due to the quirk of Source requiring a separate NPC (npc_apcdriver) to actually make them move and shoot, so when the APCs are in the alley, this effectively means the NPC has exited the vehicle. Also of note is that the controls for the buggy will show up upon entering it.

Portal RTX

Hmmm...
To do:
Need to research why exactly the APC is more finished in this version. Also it is drivable on SDK 2013 aswell as older version of Half-Life 2 (build 4044/Source SDK 2006).

Strangely, the APC can actually be accessed in a slightly more complete state if d1_trainstation_03 is loaded in the 2022 RTX remaster of Portal. You can also boost by holding SHIFT, albeit it is very buggy. This is presumably due to the fact that the version of Portal used in the remaster is based on a different build of the Source engine, where the necessary scripting or required NPC as mentioned above exists, although more research is required to determine the exact reason.

(Source: ansonx10)

Unused Maps

intro

Unused (intro.bsp) Final (d1_trainstation_01.bsp)
HL2-intro background.png

Loading the map intro.bsp via the console will bring you to a slightly different version of the game's intro. The main differences between the two intros is that there is no title card at the beginning, the Anti-Mass Spectrometer uses a design more faithful to the original Half-Life (also utilising several missing textures), and a view of the railway which was seen during E3 2004 as opposed to the prison near the end of the game. The G-Man also uses his regular model instead of the higher-quality gman_high. Unlike the E3 2004 video however, the G-Man says his "right man in the wrong place" line.

intro.bsp doesn't end due to the respective level change trigger not existing (Unless using cl_view 1 in the console, you can explore them). This ultimately suggests that the intro was originally going to be its own separate map rather than being a part of d1_trainstation_01. This was probably removed to avoid creating another loading screen between the intro and gameplay. A similar approach was attempted and scrapped during Episode One and Two's developments.

Due to hardware limitations, the Xbox release does use intro.bsp, but it plays the final version's intro used in d1_trainstation_01.bsp.

When this map is loaded as a menu background through the map_background command, it will instead show a rooftop view of City 17, while the music from the start of the Ravenholm chapter plays. There are also blurred preview images intended for this map like other menu backgrounds, which go unused.

d3_c17_02_camera

A slightly different version of d3_c17_02, the starting map of Anticitizen One. The only difference is that the player isn't given the HEV Suit or any weapons in this version.

sdk_shader_examples

HL2-sdk shader examples-1.png

A small rectangular room which houses a cube with a weird effect on it. When this map is loaded in Source SDK Base 2013, particles of the missing texture checkerboard appear to the right of the cube, which is also now missing textures.

Platform Differences

Hmmm...
To do:
  • PS3 specific - Is G-Man's voice pitched during the ending?
  • Find way launch with command line -dev in Xbox
  • Screenshot from the Xbox version.
  • The console releases run on older versions of Source (Source 2004 for the Xbox and Source 2007 for the Xbox 360 and PlayStation 3).
  • The console releases use proprietary file formats for their files. For example, VTFs/texture files use the VTFX (.360.vtf) format in the Xbox 360 version and .xtf in the Xbox version.
  • Xbox version

    • Audio in the Xbox release uses different DSP compared to all other releases due to the Xbox using a custom chip. This is most noticeable in the intro.
    • In most releases, you can use ladders by just walking into them. The Xbox version requires pressing a button however, since it uses a different brush entity ("func_ladder") due to hardware limitations.
    • In d2_prison_08, when you fight the Combine with Alyx, the power will eventually be cut off in most versions. This doesn't happen on the Xbox version.
    Xbox Other Versions
    Hl2orignalxbox.png Screenshot taken from PC version for comparison
    • Transparent fences have been replaced with opaque walls in many areas that have them for performance reasons. One example is on the chapter "Water Hazard", at d1_canals_07 (the APC hangar).
    Xbox Other Versions
    HL2Xbox-Fences.png HL2OtherReleases-Fences.png
    • Some Lambda Locator areas are missing in the Xbox version.
    • Some items such as weapons and ammo crates are highlighted on the Xbox version.
    • In cheatcodes.txt Xbox has hidden cheat codes has never documented:
    cheat_codes
    {
    
    // Classic cheats ported from HL2 XBox1
    
    	"GiveHealth"
    	{
    		"code"		"UP"
    		"code"		"UP"
    		"code"		"DOWN"
    		"code"		"DOWN"
    		"code"		"LEFT"
    		"code"		"RIGHT"
    		"code"		"LEFT"
    		"code"		"RIGHT"
    		"code"		"B_BUTTON"
    		"code"		"A_BUTTON"
    		"command"	"give item_healthkit"
    	}
    	"AllChapters"
    	{
    		"code"		"LEFT"
    		"code"		"LEFT"
    		"code"		"LEFT"
    		"code"		"LEFT"
    		"code"		"L_SHOULDER"
    		"code"		"RIGHT"
    		"code"		"RIGHT"
    		"code"		"RIGHT"
    		"code"		"RIGHT"
    		"code"		"R_SHOULDER"
    		"command"	"sv_unlockedchapters 15"
    	}
    	"Ammo"
    	{
    		"code"		"Y_BUTTON"
    		"code"		"B_BUTTON"
    		"code"		"A_BUTTON"
    		"code"		"X_BUTTON"
    		"code"		"R_SHOULDER"
    		"code"		"Y_BUTTON"
    		"code"		"X_BUTTON"
    		"code"		"A_BUTTON"
    		"code"		"B_BUTTON"
    		"code"		"R_SHOULDER"
    		"command"	"givecurrentammo"
    	}
    
    // More generic HL2 cheats
    
    	"God"
    	{
    		"code"		"L_SHOULDER"
    		"code"		"UP"
    		"code"		"R_SHOULDER"
    		"code"		"UP"
    		"code"		"L_SHOULDER"
    		"code"		"L_SHOULDER"
    		"code"		"UP"
    		"code"		"R_SHOULDER"
    		"code"		"R_SHOULDER"
    		"code"		"UP"
    
    		"command"	"god"
    	}
    
    // XBox CERT cheat for MS
    
    	"AA"
    	{
    		"code"		"Y_BUTTON"
    		"code"		"UP"
    		"code"		"Y_BUTTON"
    		"code"		"RIGHT"
    		"code"		"Y_BUTTON"
    		"code"		"DOWN"
    		"code"		"Y_BUTTON"
    		"code"		"LEFT"
    		"code"		"Y_BUTTON"
    		"code"		"UP"
    
    		"command"	"toggle mat_software_aa_strength"
    	}
    
    // Dev cheats
    
    	"Kill"
    	{
    		"dev"		"1"
    
    		"code"		"L_SHOULDER"
    		"code"		"DOWN"
    		"code"		"R_SHOULDER"
    		"code"		"DOWN"
    		"code"		"L_SHOULDER"
    		"code"		"L_SHOULDER"
    		"code"		"DOWN"
    		"code"		"R_SHOULDER"
    		"code"		"R_SHOULDER"
    		"code"		"DOWN"
    
    		"command"	"kill"
    	}
    	"NoClip"
    	{
    		"dev"		"1"
    
    		"code"		"UP"
    		"code"		"UP"
    		"code"		"UP"
    		"code"		"L_SHOULDER"
    		"code"		"UP"
    		"code"		"UP"
    		"code"		"UP"
    		"code"		"R_SHOULDER"
    		"code"		"UP"
    		"code"		"UP"
    
    		"command"	"noclip"
    	}
    	"NoTarget"
    	{
    		"dev"		"1"
    
    		"code"		"DOWN"
    		"code"		"DOWN"
    		"code"		"DOWN"
    		"code"		"L_SHOULDER"
    		"code"		"DOWN"
    		"code"		"DOWN"
    		"code"		"DOWN"
    		"code"		"R_SHOULDER"
    		"code"		"DOWN"
    		"code"		"DOWN"
    		"command"	"notarget"
    	}
    	"WireframeCycle"
    	{
    		"dev"		"1"
    
    		"code"		"L_SHOULDER"
    		"code"		"L_SHOULDER"
    		"code"		"R_SHOULDER"
    		"code"		"R_SHOULDER"
    		"code"		"L_SHOULDER"
    		"code"		"R_SHOULDER"
    		"code"		"L_SHOULDER"
    		"code"		"R_SHOULDER"
    		"code"		"LEFT"
    		"code"		"RIGHT"
    
    		"command"	"incrementvar mat_wireframe 0 3 1"
    	}
    }
    }

    PlayStation 3 version (The Orange Box)

    • All corpses will disappear on the PlayStation 3 version.
    • G-Man's voice is strangely pitched in the PlayStation 3 version, this is most noticeable in the intro.

    Oddities

    Unseen stuff in d1_trainstation_01 and d1_trainstation_06

    Through the use of noclip, you can find unseen and unexplorable stuff such as a hidden room and a metrocop in the "A Red Letter Day" chapter, likely a leftover detail from the prototype map.

    Rare G-man Easter Egg

    Normally too bright to see.

    In Black Mesa East (d1_eli_01), a very faint G-Man face can be seen inside a seemingly fully white bright light.

    It is hard to see without cheats as an NPC covers up the hole before you can stare at it long enough for the HDR exposure effect to make it visible, you can get a better look by disabling AI.

    Screenshot (cheats) Screenshot (enhanced)
    HL2 gmanface closer.png HL2 gmanface closer contrast.png

    References