nyuuzyou/wikis huggingface dataset:
HLFX Hammer Editor

HLFX Hammer Editor is a modified version of the , tailored to address specific limitations and enhance functionality within the domain of level design and map creation. 
== Features ==
* Elimination of coordinate rounding during export to .MAP format.
* Resolution of a bug affecting flag functionality, ensuring proper operation of all 24 checkboxes.
* Alignment of flag checkboxes within their respective windows, alongside increased text field size.
* Addition of a "Clear Flags" button for enhanced flag management.
* Heightened visibility of visgroup lists through increased list height.
* Removal of non-functional Pitch/Roll options from entity properties.
* Expanded width of parameter lists within entity properties.
* Increased window height for the list of used textures.
* Addition of default grid sizes "1" and "2" within the settings window.
* Enlarged texture display areas on the toolbar and within the Texture Application window.
* Inclusion of missing tooltips for "Load pointfile" and "Unload pointfile" menu items.
* Version information within the editor properties now correctly reflects version 3.5.
* Replacement of non-functional links within the Help->Web Resources menu.
* Integration of a manifest for control styling reminiscent of Windows XP.
* Elimination of disruptive messages upon editor closure, such as "ShutdownOpenGL - wglMakeCurrent failed."
== See also ==
* 
* 
== External links ==
* HLFX Topic
HLGameRules

This is the basic interface for hl2 game rules
#include <boost/python.hpp>
namespace bp = boost::python;
CTeam* pyGetTeam(int index)
{
	return GetGlobalTeam(index);
}
BOOST_PYTHON_MODULE(HLGameRules)
{
	bp::def("GetTeam", pyGetTeam, bp::return_value_policy<bp::reference_existing_object>());
	bp::class_<CTeam, boost::noncopyable>("CTeam", bp::no_init)
		.def("GetRoundsWon", &CTeam::GetRoundsWon)
		.def("SetRoundsWon", &CTeam::SetRoundsWon)
		.def("IncrementRoundsWon", &CTeam::IncrementRoundsWon)
		.def("ResetScores", &CTeam::ResetScores)
		.def("GetScore", &CTeam::GetScore)
		.def("SetScore", &CTeam::SetScore)
		.def("AddScore", &CTeam::AddScore)
		.def("GetNumPlayers", &CTeam::GetNumPlayers)
		.def("GetName", &CTeam::GetName)
		.def("GetTeamNumber", &CTeam::GetTeamNumber);
}
Category:HalfLife_SDK_Python_Interface
HLGlobal

This is the basic interface for hl2 game rules
#include <boost/python.hpp>
namespace bp = boost::python;
BOOST_PYTHON_MODULE(HLGlobal)
{
	bp::scope().attr("TEAM_NONE") = TEAM_UNASSIGNED;
	bp::scope().attr("TEAM_SPECTATOR") = TEAM_SPECTATOR;
	bp::scope().attr("TEAM_RED") = TEAM_RED;
	bp::scope().attr("TEAM_BLUE") = TEAM_BLUE;
	bp::scope().attr("HUD_PRINTNOTIFY") = HUD_PRINTNOTIFY;
	bp::scope().attr("HUD_PRINTCONSOLE") = HUD_PRINTCONSOLE;
	bp::scope().attr("HUD_PRINTTALK") = HUD_PRINTTALK;
	bp::scope().attr("HUD_PRINTCENTER") = HUD_PRINTCENTER;
}
Category:HalfLife_SDK_Python_Interface
HLLib

is a LGPL open source programming library, which abstracts several Half-Life and Half-Life 2 package formats and provides a simple interface for all of them. HLLib works natively in both and .
HLLib is written in native C++ but exposes both a C and C++ interface which can be used in any C or C++ application (additional languages may also use the library with Win32 imports). 
Created by Ryan "Nemesis" Gregg.
== File formats ==
# .bsp
# .gcf
# .ncf
# .pak
# .vpk
# .wad
# .xzp
# an uncompressed .zip
== HLExtract ==
HLLib contains a example application called HLExtract. HLExtract is a GPL command-line utility written in C that can browse, extract, validate and defragment all supported packages. It provides a lean and mean shell-like interface for browsing as well as a command-line interface for automating tasks. HLExtract works natively in both Windows and Linux.
=== Screenshot ===
=== Common Options ===
; -p <path>: Package file to open.
; -d <path>: Directory to extract content to (defaults to the package's directory).
; -e <path>: Path to a file for folder in the package to extract. Chain these for multiple items. -e root for everything.
; -t <path>: Path to a file for folder in the package to validate. Chain these for multiple items. -t root for everything.
; -l[d][f]: List the contents of the package. -ld for directories. -lf for files. -ldf for everything.
; -f: Defragment the package.
; -c: Drop into shell-like console mode.
; -s: Silent mode. Display minimal messages.
; -m: Use file mapping.
; -q: Use quick file mapping. (Must also specify -m.)
; -v: Allow volatile access. Enable this to share file access with other processes such as Steam.
; -o: Don't overwrite files when extracting.
; -r: Force complete lexicographical reordering of files during defragment even if there is no fragmentation.
; -n <path>: The directory to find a NCF file's data in (for validation for example).
.
=== Examples ===
 HLExtract.exe -p "half-life.gcf" -d "backup" -e "root\valve\models" -e "root\valve\config.cfg"
 HLExtract.exe -p "half-life.gcf" -c -m -v
 HLExtract.exe -p "half-life.gcf" -lf "half-life.txt"
 HLExtract.exe -p "half-life.gcf" -m -f
=== Console Commands ===
; dir: List the current directory's contents.
; cd <name>: Change directory to <name>. Type cd .. to go up one level.
; info <name>: Display information about <name>.
; extract <name>: Extract <name> to destination directory (specified by -d).
; validate <name>: Validate <name> and its subdirectories.
; find <string>: Search for <string> if the current directory and its subdirectories.
; type <name>: Type the contents of <name> to the console.
; open <name>: Open the package <name> within the current package.
; root: Change to the root directory.
; status: Display information about the package.
; cls: Clear the screen.
; help: Display program help.
; exit: Exit the current package.
== External links ==
*Original HLLib Homepage
*New HLLib Homepage (because original is unavailable)
Category:Third Party Tools
HLPlayer

This is the basic interface for hl2 players
#include <boost/python.hpp>
namespace bp = boost::python;
BOOST_PYTHON_MODULE(HLPlayer)
{
	//because CommitSuicide is overloaded we must tell it which one to use
	void (CBasePlayer::*CommitSuicideFP)(bool, bool) = &CBasePlayer::CommitSuicide;
	bp::class_<CBasePlayer, bp::bases<CBaseEntity> , boost::noncopyable>("CBasePlayer", bp::no_init)
		.def("DeathCount", &CBasePlayer::DeathCount)
		.def("ArmorValue", &CBasePlayer::ArmorValue)
		.def("ResetDeathCount", &CBasePlayer::ResetDeathCount)
		.def("CommitSuicide", CommitSuicideFP)
		.def("GetPlayerName", &CBasePlayer::GetPlayerName)
		.def("GetHealth", &CBasePlayer::GetHealth);
	bp::class_<CHL2_Player, bp::bases<CBasePlayer>, boost::noncopyable >("CHL2_Player", bp::no_init)
		.def("Weapon_Switch", &CHL2_Player::Weapon_Switch);
}
Category:HalfLife_SDK_Python_Interface
HLSL

uses the C-style HLSL (High Level Shading Language) for shaders. The language is very similar to GLSL. For example, ToGL converts from HLSL to GLSL on the fly. 
==Direct3D Versions and Shader Models==
Direct3D 9 shaders can target Shader Models 1, 2 or 3. Shader Model 2 has additional pixel shader profiles called ps2.0a and ps2.0b (collectively as ps2.0x) that offer more features than the base ps2.0.
Direct3D 10 shaders can only target Shader Model 4.
Direct3D 11 shaders can target Shader Model 5.
Direct3D 12 shaders can target Shader Models 5 and 6.
Microsoft HLSL website
== See also ==
* GLSL (OpenGL and Vulkan equivalent)
* CG 
Category:Technical
Category:Glossary
HLWeapon

This is the basic interface for weapons
#include <boost/python.hpp>
namespace bp = boost::python;
BOOST_PYTHON_MODULE(HLWeapon)
{
	bp::class_<CBaseCombatWeapon, bp::bases<BASECOMBATWEAPON_DERIVED_FROM>, boost::noncopyable>("CBaseCombatWeapon", bp::no_init)
		.def("HasAnyAmmo", &CBaseCombatWeapon::HasAnyAmmo)
		.def("HasPrimaryAmmo", &CBaseCombatWeapon::HasPrimaryAmmo)
		.def("HasSecondaryAmmo", &CBaseCombatWeapon::HasSecondaryAmmo)
		.def("UsesPrimaryAmmo", &CBaseCombatWeapon::UsesPrimaryAmmo)
		.def("UsesSecondaryAmmo", &CBaseCombatWeapon::UsesSecondaryAmmo)
		.def("GiveDefaultAmmo", &CBaseCombatWeapon::GiveDefaultAmmo)
		.def("GetViewModel", &CBaseCombatWeapon::GetViewModel)
		.def("GetWorldModel", &CBaseCombatWeapon::GetWorldModel)
		.def("GetAnimPrefix", &CBaseCombatWeapon::GetAnimPrefix)
		.def("GetMaxClip1", &CBaseCombatWeapon::GetMaxClip1)
		.def("GetMaxClip2", &CBaseCombatWeapon::GetMaxClip2)
		.def("GetDefaultClip1", &CBaseCombatWeapon::GetDefaultClip1)
		.def("GetDefaultClip2", &CBaseCombatWeapon::GetDefaultClip2)
		.def("GetWeight", &CBaseCombatWeapon::GetWeight)
		.def("GetWeaponFlags", &CBaseCombatWeapon::GetWeaponFlags)
		.def("GetSlot", &CBaseCombatWeapon::GetSlot)
		.def("GetPosition", &CBaseCombatWeapon::GetPosition)
		.def("GetName", &CBaseCombatWeapon::GetName)
		.def("GetPrintName", &CBaseCombatWeapon::GetPrintName)
		.def("GetShootSound", &CBaseCombatWeapon::GetShootSound)
		.def("UsesClipsForAmmo1", &CBaseCombatWeapon::UsesClipsForAmmo1)
		.def("UsesClipsForAmmo2", &CBaseCombatWeapon::UsesClipsForAmmo2)
		.def("IsMeleeWeapon", &CBaseCombatWeapon::IsMeleeWeapon)
		.def("GetPrimaryAmmoCount", &CBaseCombatWeapon::GetPrimaryAmmoCount)
		.def("SetPrimaryAmmoCount", &CBaseCombatWeapon::SetPrimaryAmmoCount)
		.def("GetSecondaryAmmoCount", &CBaseCombatWeapon::GetSecondaryAmmoCount)
		.def("SetSecondaryAmmoCount", &CBaseCombatWeapon::SetSecondaryAmmoCount)
		.def("GetClip1", &CBaseCombatWeapon::Clip1)
		.def("GetClip2", &CBaseCombatWeapon::Clip2);
	bp::class_<CWeaponHL2MPBase, bp::bases<CBaseCombatWeapon>, boost::noncopyable>("CWeaponHL2MPBase", bp::no_init);
	bp::class_<CBaseHL2MPCombatWeapon, bp::bases<CWeaponHL2MPBase>, boost::noncopyable>("CBaseHL2MPCombatWeapon", bp::no_init);
}
Category:HalfLife_SDK_Python_Interface
HL Log Standard Examples

Category:Programming
Category:Logs
These examples comply with Specification Rev. 1.03.
==Example 1: Perl: Log parsing routines.==
if ($logline =~ /^\/\//)
{
 # matches comments
 # you should skip to the next log line
}
elsif ($logline =~ /^"([^"]+)" ([^"\(]+) "([^"]+)" ([^"\(]+) "([^"]+)"(.*)$/)
{
 # matches events 057,058,059,066
 $team = "";
 $player = $1; # parse out name, uid and team later
 $event1 = $2; # event type - "killed", "attacked", etc.
 $noun1 = $3; # victim name/objective code, etc.
 $event2 = $4; # "with", etc.
 $noun2 = $5; # weapon/victim name, etc.
 $properties = $6; # parse out keys and values later
}
elsif ($logline =~ /^"([^"]+)" ([^"\(]+) "([^"]+)"(.*)$/)
{
 # matches events 050,053,054,055,056,060,063a,063b,068,069
 $team = "";
 $player = $1;
 $event1 = $2;
 $noun1 = $3; # weapon/team code/objective code, etc.
 $event2 = "";
 $noun2 = "";
 $properties = $4;
}
elsif ($logline =~ /^"([^"]+)" ([^\(]+)(.*)$/)
{
 # matches events 050b,051,052
 $team = "";
 $player = $1;
 $event1 = $2;
 $noun1 = "";
 $event2 = "";
 $noun2 = "";
 $properties = $3;
}
elsif ($logline =~ /^Team "([^"]+)" ([^"\(]+) "([^"]+)"(.*)$/)
{
 # matches events 061,064
 $team = $1; # Team code
 $player = 0;
 $event1 = $2;
 $noun1 = $3;
 $event2 = "";
 $noun2 = "";
 $properties = $4;
}
elsif ($logline =~ /^([^"\(]+) "([^"]+)"(.*)$/)
{
 # matches events 062,003a,003b,005,006
 $team = "";
 $player = 0;
 $event1 = $1;
 $noun1 = $2;
 $event2 = "";
 $noun2 = "";
 $properties = $3;
}
# array getPlayerInfo (string player)
sub getPlayerInfo
{
 my ($player) = @_;
 if ($player =~ /^(.+)<(\d+)><(\d+)><(.*)>$/)
 {
 return ($1, $2, $3, $4);
 }
 else
 {
 return ("", 0, 0, "");
 }
}
# hash getProperties (string propstring)
sub getProperties
{
 my ($propstring) = @_;
 my %properties;
 while ($propstring =~ s/^\s*\((\S+)(?: "([^"]+)")?\)//)
 {
 if ($2)
 {
 $properties{$1} = $2;
 }
 else
 {
 $properties{$1} = 1; # for boolean properties per Note (4)
 }
 }
 return %properties;
}
# To get a player's name, uid, wonid and team from the
# Name<uid><wonid><team> string:
($player_name, $player_uid, $player_wonid, $player_team) = getPlayerInfo($player);
# To parse all (key "value") properties from end of a log line into an
# associative array:
%properties = getProperties($properties);
print $properties{'weapon'};
HSVtoRGB()

HSVtoRGB() converts a Hue, Saturation, Value color to a Red, Green, Blue one.
HSVtoRGB(const Vector& HSV, Vector& RGB);
The values of the HSV Vector are not immediately obvious:
* float Hue (range 0-360)
* normal Saturation (range 0-1)
* normal Value (range 0-1)
Category:Functions
Half-Life: Absolute Zero

== Overview ==
 is a mod for that re-creates the original ideas and plans for the base game.
== Development ==
Half-Life: Absolute Zero is currently available for early access. The source code is publicly available on gitlab. All maps created with 
== Media ==
Half-Life_Absolute_Zero_-_Screenshot_1.jpg
Half-Life_Absolute_Zero_-_Screenshot_2.jpg
Half-Life_Absolute_Zero_-_Screenshot_3.jpg
Half-Life_Absolute_Zero_-_Screenshot_4.jpg
Half-Life_Absolute_Zero_-_Screenshot_5.jpg
Half-Life_Absolute_Zero_-_Screenshot_6.jpg
Half-Life_Absolute_Zero_-_Screenshot_7.jpg
Half-Life_Absolute_Zero_-_Screenshot_8.jpg
Half-Life_Absolute_Zero_-_Screenshot_9.jpg
Half-Life_Absolute_Zero_-_Screenshot_10.jpg
Half-Life_Absolute_Zero_-_Screenshot_11.jpg
Half-Life_Absolute_Zero_-_Screenshot_12.jpg
== External links ==
* Source code at GitLab
* Bug Report
Category:GoldSrc mods
Category:Released Mods
Half-Life: Alyx

Half-Life: Alyx is Valve’s VR return to the series, built on the engine. It’s the story of an impossible fight against a vicious alien race known as the Combine, set between the events of and . Playing as Alyx Vance, you are humanity’s only chance for survival.
A set of Source 2 tools was released on May 15, 2020.
== Chapters ==
== External links ==
* Official Website
* on Youtube
* on Combine OverWiki
* on Wikipedia
* Steam VR Knowledge Base
== See also ==
* :Category:Half-Life: Alyx Workshop Tools/Level Design
* Half-Life: Alyx Level Creation
* Half-Life: Alyx Workshop Tools
Half-Life: Alyx Workshop Tools/Animgraph/Debugging AnimGraphs

Category:Half-Life: Alyx Workshop Tools/Animgraph
The AnimGraph editor has support for debugging graphs, in addition to creating them.
= AnimGraph Debug Replay =
When the AnimGraph Editor is in Preview Mode, it saves a buffer of the last several frames. The bar at the bottom of the timeline control panel will fill up as the buffer fills, and at any time you can click on that timeline bar to see what the state of the graph was at that time. 
Replay buffers are a fixed size, so they will not continue to use memory when used for a long time, but that means they only hold that last few seconds of data. 
Replay buffers can be saved and loaded in the editor, and they can be recorded from entities during a running game. Note that these buffers are only suitable for debugging and not as a user-facing feature for a game, as tend to be large and they are not guaranteed to still work if the code for the animation graph changes. 
To load a recording in the editor, click the Load Replay button () on the timeline control panel
= Console Commands =
* ent_animgraph_debug, cl_ent_animgraph_debug: Displays the entity's current path and its forward, look, facing, and move directions
* ent_animgraph_record, cl_ent_animgraph_record: Starts recording the animgraph of an entity on the server or client. Parameters can be the entity's ID or its class name. When used without parameters the entity selected is the one at middle of the screen. 
* save_animgraph_recording, cl_save_animgraph_recording: Saves all active recordings to disk on the server or client. Files are saved to game\<mod>\SAVE\animgraph with the type of the entity, the date and time. 
= Visualizing Replay Data =
Most of the areas of the graph display some information about their status during replays and in preview mode.
=== Preview Window ===
=== Graph View ===
The graph view will highlight the active branches of the graph in blue. Nodes will light up orange when they are reset
=== State Machines ===
The State Machine Editor will highlight the current state and the transition from its previous state in blue
=== Inputs and Parameters ===
The values of the main inputs and the parameters will all reflect what their values were at the end of the current frame
=== Node Info ===
The Properties panel will include detailed information about the status of the selected node, including its cycle, the root motion it is producing, and the status of its foot motion (if configured)
=== Node Preview ===
The Properties panel will show a preview of the pose coming from the selected node, before it gets blended or changed by any of its parent. If you are seeing an error in the final animation of your graph, you can click on each node to see what its pose is and quickly identify the source of the problem.
=== Tags ===
The list of tags will show lights that are green of the the tag is active and green if it isn't
Half-Life: Alyx Workshop Tools/Examples

== Workshop Examples ==
These are annotated examples of various Half-Life: Alyx features made by the Alyx dev team. 
They are located in \Steam\steamapps\common\Half-Life Alyx\content\hlvr\maps\workshop_examples unless otherwise noted. 
=== Showcase of Hammer Tools ===
* cables_example.vmap
* tilemesh_example.vmap
* hotspot_example.vmap
* vis_example.vmap
* postprocessvolume_example.vmap
=== Gameplay Examples ===
* combine_encounter.vmap
* blind_zombie_example.vmap
* hacking_example.vmap
* vehicles_and_prefabs_example.vmap
=== Sky and lighting presets ===
* prefabs/environment_settings/environment_afternoon_01.vmap
* prefabs/environment_settings/environment_afternoon_02.vmap
* prefabs/environment_settings/environment_day_01.vmap
* prefabs/environment_settings/environment_night_01.vmap
* prefabs/environment_settings/environment_overcast_01.vmap
* prefabs/environment_settings/environment_storm_01.vmap
* prefabs/environment_settings/environment_sunset_01.vmap
* prefabs/environment_settings/environment_sunset_02.vmap
* prefabs/environment_settings/environment_workshop_01.vmap
=== Material examples ===
The following are located in \Steam\steamapps\common\Half-Life Alyx\content\hlvr\materials\workshop_examples 
* blend/brick_1c_comp_hs_to_dead_xen_example.vmat
* brick/brick_1c_comp_hs_example.vmat
* combine/example_combine_monitor_screens.vmat
* hotspot/example_metal1_hs_color.vmat
* hotspot/example_wall_plaster1_hs.vmat
* monitor/screen_russell_desktop_02_example.vmat
* monitor/screen_russell_desktop_10_example.vmat
* monitor/screen_russell_desktop_12_example.vmat
* skybox/skybox_workshop.vmat
== Full source of released maps ==
You can check out the full source of all maps and supporting prefabs shipped in the final game here \Steam\steamapps\common\Half-Life Alyx\content\hlvr\maps\release 
You're not expected to recompile the release maps. The full lighting and audio calculations would likely take an excessive amount of time on a home PC - but you'll be able to add content at an entity level using the new Map Extensions feature.
Half-Life: Alyx Workshop Tools/HLA Sky List

This is a list of skies, along with pictures of each skybox. Sun Angle, Color, Brightness, Indirect Light Multiplier, Sky Color, Sky Intensity, Sky IBL Scale, and Skybox Bounce Multiplier are all settings found in the light_environment of the map referenced in Example Map
Skybox Material is the name of the skybox vmat used by the env_sky of the map referenced in Example Map. Image shown does not necessarily represent actual skybox but is the image found using and decompiling the VTEX.
For most of the example maps, the env_sky is used as the Sky IBL Source inside of the light_environment which is then used to "Estimate Lighting from HDR Skybox" (Done by Right Clicking the light_environment, and going to Selected Entities>Estimate Lighting from HDR Skybox)
For more information on the light_environment entity in HL: Alyx as well as the env_sky entity, please visit the Source 2 Lighting Page
{| class="standard-table" style="width: 100%; text-align:center;"
|- style="position:-webkit-sticky; position:sticky; top:0"
! Example Map !! Sun Angle !! Color !! Brightness !! Indirect Light Multiplier !! Sky Color !! Sky Intensity !! Sky IBL Scale !! Sky Indirect Light Multiplier
|-
! colspan="9"| colorscript/intro_01
|-
| a1_intro_world || 24.60 254.44 -95.69 || || 1.5 || 1 || || 0.5 || 1 || N/A
|-
! colspan="9"| a4_c17_zoo_sky
|-
| a4_c17_zoo || 28.47 169.39 -10.13 || || 0.1 || 1 || || 0.5 || 1 || N/A
|-
|}
==See also==
*List of Skyboxes
Category:Skybox
Half-Life: Alyx Workshop Tools/Installing and Launching Tools

The Half-Life: Alyx Workshop Tools are an optional free download included in Half-Life: Alyx and must be installed to create workshop items or addons.
== Installing the Tools ==
* Right click Half-Life: Alyx in your Steam Library, and choose "Properties..." from the drop-down menu. 
* Navigate to the DLC tab and click the "Install" checkbox next to Half-Life: Alyx Workshop Tools. This will begin the download.
File:Creating_an_Addon-128485197.png|Editing Properties...
File:Enabling_the_DLC..png|Enabling Workshop DLC.
If you don't see the tools under DLC tab, relaunch Steam. There's a pending update that needs to be installed for the DLC to show up.
== Launching the Tools ==
* To launch the Workshop tools, press the "Play" button in your Steam library (or right-click the game in your library and choose Play).
* A dialog box will pop up asking to run Half-Life: Alyx in VR Mode or to launch the Workshop Tools. (Launch the Workshop Tools.)
File:Creating_an_Addon-128485199.png|The Play Button
File:Creating_an_Addon-128485200.png|Launch Workshop Tools
Congratulations, you're in the Half-Life: Alyx Workshop Tools! Any existing addon projects you have on your PC will be displayed here.
== Create a New Addon ==
Now that you're in the tools, it's time to create your first addon.
Category:Half-Life: Alyx Workshop Tools
Category:Half-Life: Alyx Workshop Tools/Level Design
Half-Life: Alyx Workshop Tools/Level Design

__NOTOC__
== Getting started ==
* Launching Custom Maps
== Source 2 Hammer ==
* Navigation
* Hammer Overview
* Basic Construction
* Creating Your First Room
* Prefabs and Instances
* Mesh Entities
* Lighting
* Visibility
* Addon Sounds
* 3D Skybox Creation
* Map Extensions
* Importing Source 1 .VMF Maps
* Hotspot Texturing
* Light Cookies
== Interactions ==
* Doors
* Ladders
* Holo Hacking Puzzle
* Toner Puzzle
* Buttons
* Keycard Readers
* Whiteboard
== Weapons ==
* Custom Pistols
* Gordon Gloves
* Vortigaunt Energy Gloves
* Flashlight
* Pistol
* Shotgun
* SMG
* Ammo Balancing
== Enemies ==
* Navigation Mesh
* Temporary Ragdolls
* Barnacle
* Runner Headcrab
* Blind Zombie
== Triggers ==
* Player Out Of Ammo
* Detect Bullet Fire
* Detect Explosion
==Reference==
*List of Half-Life: Alyx Entities
*List of Half-Life: Alyx Soundscapes
*List of Half-Life: Alyx Holo Hacking Difficulties
==External links==
* CQB with the CMB - Google Doc on Close Quarters Combine Combat in HLA
* Headcrabs, Zombies, and Other Foul Flora - Google Doc on Zombie and Xen level design in HLA
Category:Modding
Half-Life: Alyx Workshop Tools/Level Design/Barnacle

== Introduction ==
This tutorial will teach you how to add a Barnacle to the game.
== Setup ==
Create a test room. Insert a npc_barnacle (hlvr) entity and translate it's origin to the ceiling of the room. Switch the grid size to 1 unit and translate the entity in the Z axis 1 unit down. For some reason, the model origin is 1 unit below it's top face, so, if you don't translate it down, it will crop part of the model.
== Finishing up ==
Compile and run your map, and you should have a working Barnacle, with sounds and AI.
You can download the example map here [].