• Register

.:Xash3D Engine:.

Custom Gold Source Engine build from a scratch

Unkle Mike (aka G-Cont, aka Дядя Миша) - main developer
HLFX.ru & CS-Mapping.com.ua forum members - help, support, testing

CortexReaver, nemyax - English translation

Xash3D Engine has been tested for compatibility with many of Gold Source games and MODs. At this moment it should provide you an ability to successfully complete almost any existing singleplayer Half-Life mod without compatibility problems. Some mods can be not totally compatible, if they are too hardly modified or using some very specific or unstable features of Gold Source engine. Also multiplayer part of Xash3D engine is not fully completed yet because of lack of some important information and hidden source codes of Gold Source engine. So in most cases multiplayer mods should work good in a local or a LAN game, but some features can not work or work not exactly as under Gold Source engine. Check a detailed list of tested mods and a list of tested maps in "Features" section. A full list of Xash3D Engine features is also there, plus a guide on how to get work Half-Life and its' mods under Xash3D (in English and in Russian).


Since Xash3D is a Half-Life compatible engine, then all the innovations below will be given in comparsion with GoldSrc engine.

Basic limits.

Xash3D limits are not just higher than Half-Life ones, they also can be tuned in gameinfo.txt file.
- MAX_EDICTS is 600 - 4096 (versus 900 in Half-Life).
- MAX_TEMPENTS is 300 - 2048 (vs. 500).
- MAX_PARTICLES is 1024 - 8192 (vs. 4096).
- MAX_BEAMS is 64 - 512 (vs. 64)
Careful limits reduction can save RAM in mods which don't need many edicts. Also MAX_EDICTS parameter is broadcasted from server during a multiplayer session, it adjusts clients to new conditions automatically.

Other limits.

These limits are engine-hardcoded and can not be tuned by user.
- MAX_VISIBLE_PACKET is 512 entities (256 in Half-Life).
- MAX_MODELS is 2048 unique models (including sprites and bmodels)
- MAX_SOUNDS is 2048
- MAX_SENTENCES is 2048 (1534 in Half-Life)
- MAX_USER_MESSAGES is 191 (128 in WON Half-Life)
- MAX_TEXTURES is 4096 (2048 of them can be used for VGUI)
- MAX_MESSAGES is 2048 (1024 in Half-Life) (quantity of messages in titles.txt)
- Maximum size for indexed textures is 4096х4096 (vs. 512х512 in Half-Life)
- Maximum size for true-color textures is 4096x4096.

Limits for bsp-models.

- MAX_MAP_MODELS 1024 (256 in half-life)
- MAX_MAP_LEAFS 32767 (8192 in half-life)
Note: other BSP-model limits are specified by compiler tools and don't depend on the engine.

Realisitic lighting values on server.

Xash3D allows to get more accurate value of current lighting level, because it considers lightstyles and their current values. The player's lighting is taken directly from renderer and considers all lighting types, including entity light and dynamic light.

Improved decal save.

Half-Life supports decal save only on world surfaces and very rare on doors, elevators and other moving models. Xash3D saves decals on every brush model. Decal transition between levels is also maintained (implemented in Half-Life, but doesn't really work).

Entity patch technology support.

This technology allows to load entities from external .ent script file. This script can be produced by the external ripent.exe application or by engine's facilities by typing the entpatch command. If the command is entered when a map is loaded, a new entity patch will be created.

Various map formats support.

Xash3D supports following BSP-map formats: Quake 1, Half-Life, Half-Life Blue Shift. Besides, Quake 1 external bmodels are supported (medikit and ammo models). Note: it is recommended to play Quake 1 maps in Deathmatch Classic mod to prevent stuckness of player because of the difference between hull's sizes of Half-Life and Quake.

Hot resource precaching support.

Xash3D allows to precache models "on the fly" that helps to avoid nasty PF_PRECACHE_ERROR. Also Xash3D doesn't crash if a model or sound wasn't found.

Reliable changelevel.

Before switching to a next map Xash3D will analyze its state (without unloading the current map) and decides whether correct changelevel procedure is possible. In case of any error in a next map the engine will signal about it in the developer's console, and the changelevel will be aborted. The error message also contains troubleshoot tips that can make level designer's life easier, because such errors are most difficult to diagnose and fix.

Built-in credits.

To display credits and exit the game after, run the pfnEndSection command with oem_end_credits argument. The credits code is placed in menu.dll and can be changed by user at his discretion.

MOVETYPE_PUSH physics is more stable.

Xash3D entities behave more stable on moving platforms and don't shift away on sharp turns.

New MOVETYPE_COMPOUND physics type.

It allows to tie one entity to another, taking into account movement and rotation of the former entity. You can see an example in SDK - a crossbow bolt that correctly attaches itself to func_pushable, func_rotating, func_tracktrain and other brush models.

Console autocomplete support.

Xash3D has a powerful console autocomplete system that allows not just print command lists, but also describe all of them during the search. For more comfort you can type "makehelp" in the console, and the engine will generate help.txt that contains the list of all commands and variables with short descriptions. Map, movie, background track, cfg script, save, weapon (give command), sound (play command), game directory names input is also assisted by the autocomplete feature.

No parent directory restriction.

Most Quake engines are restricted to the parent directory with specific name, which doesn't matter when you make mod, but very uncomfortable when you make total game conversion and therefore replace the parent directory. Xash3D doesn't restricted to specific folder, and the parent directory is defined by the launcher. This way you can make your own game that doesn't depend on Half-Life.

Dedicated server has the autocomplete feature now, your command history can be saved.

Dedicated server has the autocomplete feature now, your command history can be saved.

Background maps support.

Background map is a map to be displayed as a menu background. You could see them in Half-Life 2. Xash has a simplier background map system - it doesn't depend on unlocked chapters (because original Half-Life has no chapters system) and it chooses the background map from the list. This list file must be named as chapterbackgrounds.txt and placed in scripts directory (if you don't have such directory, then just make it). Every list's entry is separated by new line. You can use any playable map as the background, but better don't use maps where player starts in a moving train, because it won't look good.

Lightstyle interpolation.

Turned off by default. Doesn't work with short sequences like switching on and off the light. It smooths light animation very well on long slow sequences like SlowStrobe or SlowPulse. Note: FPS rate may suffer from this option.

luma glowing textures support (Quake-style).

You can see such textures in original quake maps as glowing fields on a texture. Because this feature is caused by the Quake pallet's special features, the engine enables it for textures that have Quake or Quake2 pallet. This pallet is saved well after the simple conversion of wad2 files to wad3.

Improved model and sprite lighting.

Improved model lighting includes per-bone lighting from static and dynamic light sources, and it also includes correct model lighting on every stage of long sequence execution, when model goes far enough from its real location. The best example is forklift.mdl Sprite lighting is a correct lighting of all sprites that is rendered in additive mode and had "alphtest" during the compilation. For example, blood decals uses the world lighting and doesn't glow in darkness. Both sprites and models don't just use the world lighting, but also consider lighting of the closest brush model if there is one.

Player model display in the menu.

Instead of a usual player image you can see his 3D model in the menu and track all changes right on-the-spot.

  • View media
  • View media
  • View media
  • View media
  • View media
  • View media
Post article RSS Articles

In usual anniversary of Xash3D Unkle Mike has released new beta-version of the engine. Check Files section to download it. This release is very close to version 1.0, many things are changed or added, but hereupon they should be carefully tested for proper work. So don't be lazy, please report about any technical issues or unforeseen discrepancies from standard game's behaviour.

Don't forget to install engine's files properly, including extras for "valve" folder. Otherwise some things will not work as intended or will not work at all. Detailed manual is here. For questions about mods' support refer to this article. Remember that some nowaday mods (or their new versions) which require Steam interfaces are not supported (or have to be patched by old versions of their game dlls to work with Xash3D). Also most of multiplayer mods were not tested thoroughly, but if you have your own experience & found some problems, please report. In most cases, any mods which worked correctly with old WON version of Half-Life, should work correctly with Xash3D too.

As with previous pre-release & experimental builds, the same rule works for build 4097 too: DO NOT USE it with outdated Xash3D games/mods, such as XashXT, Paranoia 2: Savior, Quake Remake. They are not updated yet and will not work with new version of the engine.

Here is a list of changes which were made since previous public build 3887 to current 4097.

  • Engine: new version of extended BSP30 map format (increased clipnode limits, adjustable lightmap resolution, per-vertex lighting etc)
  • Engine: BSP31 is obsolete now and removed from the engine (please use bsp31migrate.exe tool to convert your old BSP31 maps into new extended BSP30 format)
  • Engine: mextrasurf_t reorganized, please check the source code
  • Engine: event API reorganized, two old functions were removed & one new added
  • Engine: engine feature ENGINE_FIXED_FRAMERATE is no longer supported
  • Engine: RenderAPI changed to version 37 and reorganized
  • Engine: some unused functions from undocumented part of the game and client interface were replaced by stubs
  • Engine: demos protocol changed to version 3
  • Engine: implemented "timedemo" command
  • Engine: fixed very old bug in CheckParm export function (internal version were not bugged)
  • Engine: new queue system for map changing (not stuck with Cbuf_Execute)
  • Engine: experimental function CL_ChangeGame removed from the engine
  • Engine: enabled interpolation for addangle (fixangle = 2)
  • Engine: added a handle for exception in Q_vsnprintf to prevent engine's crash on the error of formatted args
  • Engine: new polymorphic BSP loader
  • Render: mirrors are not supported anymore and have been removed from the engine (but will be kept maintained by such mods as XashXT or P2: Savior)
  • Render: allowed colors remapping for alias player models (for Quake 1)
  • Render: tuned up intensity of dynamic lights (affects alias and studio models)
  • Render: enabled built-in MSAA feature ("gl_enable_msaa" cvar in opengl.cfg)
  • Render: fixed bug of "sticky bind" on texture's uploading
  • Render: most of internal procedural textures have been moved out from the engine (kept only those textures which engine is using itself)
  • Render: fixed VERY old (since Quake 1) bug of R_LightPoint which has contained inaccurate color samples from lightmap and produced invalid results in some cases
  • Render: added new extension of BSP file format (lightmaps which are based now on luxel per units instead of luxel per texels). Also check P2: Savior compile tools, they allow to use this new feature.
  • Render: fixed bug of sorting STUDIO_NF_ADDITIVE meshes in studio models (old Half-Life bug)
  • Render: fixed perfomance-killing water subdivision bug on water's rendering
  • Render: "r_drawentities 7" now shows world position of luxel for lighting
  • Render: removed all unused GL-extensions
  • Render: fixed 16-bit color mode and NPOT textures case
  • Render: now, if video subsystem's initalization is failed, game shows system error instead of switching into dedicated mode
  • Render: removed rotational sky's support (it just never be used by anybody)
  • Client: implemented predictable laser spot for RPG weapon
  • Client: rewritten HudSprite manager to allow the download of missed HUD sprites
  • Client: rewritten SPR_GetList to prevent memory leak (old Half-Life bug)
  • Client: getAppID changed to 70
  • Client: single export for client.dll renamed to GetClientAPI
  • Client: added mp3 command like in GoldSrc (warning - not tested yet)
  • Client: cvar value request can now detect mismatches between cvar.string and cvar.value to detect potential cheaters
  • Client: added built-in resource paths to list downloadable resources
  • Client: revision of tempents code, fixed some bugs
  • Client: EF_MUZZLEFLASH can work now for alias models (Quake 1)
  • Server: fixed problems with russian letters in chat
  • Server: "decalfrequency" parameter is stored now into config.cfg
  • Server: implemented instanced baselines (which can be specified by user)
  • Server: implemented resource consistency check (model CRC and bounds)
  • Server: first implementation of server's game log
  • Server: "changelevel" command is not supported anymore (only internal changelevel is possible)
  • Server: "kill" command moved from server to the client
  • Server: new save/restore system which supports saved games made with GoldSrc (but old Xash3D saves are not supported from now on, also backward compatibility of new Xash3D saves with GoldSrc is not guaranteed & wasn't tested)
  • Server: implemented server FPS control called "sv_fps" (use with precaution)
  • Server: fixed some bugs in unlag system
  • Network: network connection completely rewritten to allow downloading and uploading of files (missing resources, player logos)
  • Network: first implementation of player's customization (logos)
  • Network: network protocol changed to version 49
  • Network: implemented a sign-on sequence
  • Network: max size of user messages is increased up to 2048 bytes
  • Network: IPX protocol is no longer supported and has been removed
  • Network: new experimenal system to get maximum pack size for UDP (official size is 1200 bytes, but in theory it can be increased up to 64000 bytes)
  • Network: new generic resource system which includes sounds, models, events, decals and all other types
  • Network: StudioDecal message moved out from the engine completely
  • Network: fragmented packets now can be compressed by LZSS algorhytm
  • Console: mapinfo now shows information about editor and compiler
  • Console: debug messages system rewritten as in Quake (Con_Printf instead of MsgDev)
  • Console: fixed ConsolePrint to allow messages to go only into notify buffer
  • VGUI: CEngineApp class declared as static
  • VGUI: rewritten Font manager, enabled vertex arrays support
  • GameUI: import interface updated by two new functions (save file and remove file)
  • GameUI: fixed old crash of playersetup and changelevel on a background map
  • Sound: fixed save/restore bug with static sounds
  • Sound: some minor changes in DirectSound backend code
  • Memory: fixed bug in Mem_CheckFilename

If you'd like to support Unkle Mike and inspire him for further development of Xash3D, you can donate him some money via:

Pre-release version 0.99 of Xash3D Engine, build 3887 is here!

Pre-release version 0.99 of Xash3D Engine, build 3887 is here!

News 8 comments

So the very new build of Xash3D Engine is released and awaits you in 'Files' section. This pre-release version brings many changes, so if you interested...

CS16Client v1.0 release!

CS16Client v1.0 release!

Xash3D Android 26 comments

First stable and public version of CS16Client -- best Counter-Strike 1.6 Android port.

List of singleplayer Half-Life mods tested under Xash3D

List of singleplayer Half-Life mods tested under Xash3D

Feature 30 comments

The list has been updated on December 22nd, 2014. Xash3D Engine was tested for compatibility with most of singleplayer Half-Life mods and maps, and for...

Running Half-Life under Xash3D: user's manual (English)

Running Half-Life under Xash3D: user's manual (English)

Feature 88 comments

Hello, if you are new with how to use Xash3D Engine to run Half-Life and its' mods, this manual is for you. Just follow the instruction and have fun!

Add game Games
Xash3D Android

Xash3D Android

First Person Shooter

Fork of Xash3D engine that ported to Android. Allows play Half-Life out-of-box.

No Name

No Name

Third Person Shooter

This game is in early development and it is a common clone of GTA. If you would like to help, please contact me -kyp1998.

Comments  (0 - 10 of 754)

I've encountered a couple of minor issues with mods I was wondering if you had possible solutions / config tweaks to resolve. Most mods work perfectly but there are small bugs I was hoping could be fixed

Poke 646 / Poke 646 Vendetta / Escape From The Darkness (original versions and Zikshadow's remods): grey bars appear across the bottom of the screen


Afraid of Monsters DC / Zikshadow's remod: visual glitch on some ground textures


Timeline II (Original and Zikshadow's remod): On map ice28 a few seconds after the plane lands something causes the level transition to fire prematurely, and after it does the next map loads with the character a long way outside of the map:

Skybox glitch and OpenGL errors in They Hunger (Original and remod):


I prefer your engine as some mods (most notably AoMDC) perform pretty badly on the Steam version of goldsource, so any advice fixing these bugs would be appreciated.

Reply Good karma Bad karma+1 vote

>I prefer your engine as some mods (most notably AoMDC) perform pretty badly on the Steam version of goldsource, so any advice fixing these bugs would be appreciated.
Poke646 was released for steam Moddb.com
In timeline II you can remove cl_dlls and dlls folders.
For anothers mods you can download custom builds from my profile.

Reply Good karma Bad karma+1 vote

>Poke646 was released for steam
Oh... wrong link.

Reply Good karma Bad karma+1 vote

>Poke 646 / Poke 646 Vendetta / Escape From The Darkness (original versions and Zikshadow's remods): grey bars appear across the bottom of the screen
Resize screen using "Ctrl" + "+" keys.

Reply Good karma Bad karma+1 vote

I know Poke 646 works in Steam, but they just run more smoothly in Xash, that's why I prefer using it.

Your tips did fix the problem with Timeline and They Hunger so thanks, but pressing ctrl and + in the mods with the grey bar problem didn't change the size of the screen, it changed the cl_showfps variable from 1 to 2

Reply Good karma Bad karma+1 vote

On second thoughts I was able to make the error messages in TH go away by changing a convar but the visual glitches persist. Oddly though they appear on first load of a level but a quicksave followed by a quick load resets the skybox to normal.

Reply Good karma Bad karma+1 vote

This comment is currently awaiting admin approval, join now to view.


I kinda noobie in all that stuff, but will XASH have it's own level and map editor that will have more advanced features that gerular goldsource editors and will be more easy to use?

Reply Good karma Bad karma+1 vote
Qwertyus Creator

J.A.C.K. supports some features related to Xash3D (you can buy it in Steam). But technically there is no problem if you try anything else intended to use for GoldSource. Official editor for Xash3D is not planned.

Reply Good karma+1 vote

Okay, thanks. Sad, as John Romero said once - to make good game you need make good instruments for it. I always wanted to get into hl modding but compare to doom or warcraft 3 or tes3 morrowind it really feels like pain in *** lol. But I understand, thanks for answer.

Reply Good karma Bad karma+1 vote

TrenchBroom has support for Quake, Hexen, Daikatana and Half-Life. AFAIK, doom support planned too.

Reply Good karma Bad karma+1 vote

Wait, Trench Broom have support for Half-life? Are you shure?

Reply Good karma Bad karma+1 vote

AFAIR, mittorn added some features support, but I do not know how it working in the latest TrenchBroom release. Seems kduske not applied some changes.

Reply Good karma Bad karma+1 vote
Post a comment
Sign in or join with:

Only registered members can share their thoughts. So come on! Join the community today (totally free - or sign in with your social account on the right) and join in the conversation.

Follow Report Profile
Xash XT Group
Send Message
Release date
Engine watch
Community Rating



116 votes submitted.

You Say


Ratings closed.

Highest Rated (5 agree) 10/10

Just awesome. What you did creating this engine cannot be described with any words.

Jan 28 2012 by ADTeam™

Embed Buttons
Link to Xash3D Engine by selecting a button and using the embed code provided more...
Xash3D Engine
86 of 444
Last Update
347 members
You may also like
Infinity Engine
Infinity Engine Commercial
GLBasic Commercial
Stencyl Commercial
AppGameKit Commercial
Gemix Commercial
Unreal Development Kit
Unreal Development Kit Commercial