Why look, another headcrab.

We've managed to cobble together a small update in spite of the entire team being rather busy with Summer activities. This update includes a very important crash fix for a player naming exploit, a few bug fixes, and a new map by Nih.

New Map - Judgement

Judgement, created by Nih, is now packaged with the game. The map features survival gameplay in which players must defeat three waves of 'archangels' in order to successfully defend the mythical city of Godom and protect it from the wrath of an angry god.

Players have ten minutes to defeat each wave of archangels before the city is reduced to a burning heap of rubble. All dead players are revived with the successful destruction of each wave of archangels. Alternatively, players may find the 'Rat of Returning' and sacrifice it at an altar in the map's center to revive a single player at a time.


If you are running a dedicated server please use SteamCmd to update your servers. Those of you that were using the public release candidate can remain to do so, as this branch now matches the standard branch.

Changes are as follows:

Notable changes

  • Fixed a player name exploit causing servers and other players to crash.
  • New map: Judgement.
  • New work-in-progress entity: ambient_music. This entity plays sounds on a separate audio channel from normal game sounds that is unaffected by DSP effects. Volume level is controlled by the 'Music Volume' slider in the player configuration menu.

Code

Game library

  • Added check if the game rules has loaded and is valid when executing "loadadminlist" and "kicksteamid".
  • Added console help for "create" and "create_grunt" console commands.
  • Added inventory rules to all triggers (use / multi-use), func_door (touch), and trigger_changelevel (touch and use).
  • Added "remove" cheat command which can be used to remove entity/entities with a given target name.
  • Added support for entities with custom top/bottom colour. Uses "topcolor" and "bottomcolor" key values, range 0-255.
  • Client-side sounds are now played only during the first frame run to avoid sound stuttering when 'fall damage' sound is played.
  • Fixed an exploit where player could leave the server to avoid vote-kick/ban.
  • Fixed locked button sounds not playing.
  • Fixed issue where a non-player model with colour changing textures would re-use top/bottom colour from a previously rendered player model.
  • Fixed 'null player' issues, where disconnected players would reappear as invisible objects or interfere with scripts.
  • Fixed potential access violation in ClientDisconnect() (although it was very unlikely to ever happen).
  • Fixed sand footstep sounds not playing.
  • Fixed weapons not re-deploying correctly after a player exits Observer Mode.
  • No-clip now correctly ignores ground planes. Fixes issues with players sticking to ground planes when flying up with a shallow angle.
  • Removed redundant footstep sound functions.
  • Self referencing path_corner entities now impose at least a 10ms delay.
  • Separated "player drowned" and "player fell or something" into two separate death messages.
  • Survival Mode is now notified when player enters Observer Mode (i.e. when he is forced to observer mode by custom AFK plug-in).
  • Using create command with no arguments no longer crashes the game.

AngelScript

  • Added CASConCommandSystem::ServerCommand() - more convenient way of executing custom AS commands from scripts.
  • Added CASSoundEngine::FindMaterialType() function that returns material type for given texture.
  • Added CBaseEntity::IsBreakable() method that can be used to check whether this is a breakable brush entity or not.
  • Added CEngine::force_retouch.
  • Added CHAN_MUSIC value to the "Audio channels" AngelScript API enum.
  • Added implicit conversion from char to uint32.
  • Added missing ItemInfo opAssign method.
  • Added MOVE_TYPE enum for MoveToOrigin() movement types.
  • Added overloaded g_SoundSystem::PrecacheSound() AS method that supports sound replacement for entities.
  • Added override for CBaseMonster::IgnoreConditions() to CBaseCustomMonsterEntity.
  • Added PlayerEnteredObserver and PlayerLeftObserver AS hooks. Available to both - map scripts and server plugins.
  • CBaseEntity::StartPlayerFollowing() and CBaseEntity::StopPlayerFollowing() methods are now available through AS API.
  • CBaseEntity::StopFollowing() method was removed from AS API (merged with StopPlayerFollowing()).
  • CCVar constructors now have proper default value for string arguments.
  • CEngine is no longer const, selected members are non-const.
  • CEntityFuncs methods will now release array references correctly if the array type is invalid.
  • Fixed File::ReadLine() not handling CRLF line endings correctly.
  • Fixed return type of CEngineFuncs::Voice_GetClientListening and Voice_SetClientListening().
  • Optional parameter was added to StartPlayerFollowing()/StopPlayerFollowing() methods and will make the monster start/stop following the player without playing any sentence.
  • PlayerUse, PlayerPreThink, PlayerPostThink, GetPlayerSpawnSpot AS hooks are now available to server plugins.
  • Removed CEngineFuncs::AnimationAutomove(). corresponding function in the engine is empty.
  • Removed CHAN_NETWORKVOICE_BASE and CHAN_NETWORKVOICE_END from the "Audio channels" AngelScript API enum.
  • string::SetCharAt() is no longer const.
  • Survival Mode AS API is now available to server plugins.
  • Tweaked few documentation strings.
  • WeaponPrimaryAttack, WeaponSecondaryAttack and WeaponTertiaryAttack AS hooks: Fixed invalid data type being used for the first function argument (caused run-time AS errors when hook arguments were accessed). All 3 hooks are now available to server plugins.

Engine

  • Added validation checks with error messages to help mappers correct problematic BSP models.
  • Fixed a player name exploit causing servers and other players to crash.
  • Graceful disconnect if an invalid BSP model is parsed, instead of crashing.
  • Graceful disconnect if the models or sounds pre-cache limit is reached, instead of crashing.
  • Replace '%' and '&' for space when setting player names. (Fixes crash exploit.)
  • Workaround for Sys_Error() not printing the last word in the message. (May not always work.)

Sound

  • Added an error message if something tries to specify an empty sound file, or a sound index out of bounds.
  • Added channel groups. Two groups for now: SFX and MUSIC. Each with an individual volume controls. Volume of the MUSIC channel group is controlled by MP3Volume CVAR. Master channel group is used to mute all sounds when the game window is inactive.
  • Added fall back createSound() call for MP3 files with a large ID3 tag chunk.
  • Made the "EMPTY AMBIENT AT x, y, z" message more descriptive.
  • New work in progress entity "ambient_music":
    • Plays everywhere, is not affected by 3D positioning, reverberation, or filters.
    • Mappers can adjust volume of individual music tracks by "volume" key value, but the final volume is determined on the client-side based on a value of "MP3Volume" CVAR.
    • Music will play even for players that joined after the entity was triggered. Playback will start with an appropriate offset for them.
    • Music can be looped.
    • Music can be played for an individual player (activator).
  • The MUSIC channel group is 2D only. (No positioning info, attenuation, or DSP.)

Non-playable characters

  • Fixed NPCs not throwing grenades.
  • Fixed Talk Monster sentences getting interrupted mid-speech. The static talk timer is now initialized only once - when the map loads, instead of keep re-initializing every time new talk monster spawns.
  • Fixed medics/scientists not being able to revive players.
  • Fixed scientists following the player indefinitely if he respawned while being revived.
  • Fixed the problem where if player dies multiple times only the same scientist would try to revive him (m_hHealTarget and m_hMyMedic was not cleared properly).
  • Fixed scientists screaming constantly if they see fallen player/ally.
  • Fixed the issue where player could get stuck in "frozen" state if his corpse was blocked while being revived (added watchdog that will put him back to the normal "dead" state if the process takes too long).
  • Fixed multiple scientists/medics trying to revive a single corpse at the same time.
  • Idling Talk Monsters will no longer talk to friendly monster that is currently reviving fallen ally (otherwise the process could get interrupted).
  • Scientists will use special set of sentences when they see fallen ally and when they start their CPR procedure.
  • Added "weapons/hks1.wav" to the file pre-cache list for human grunts / male assassins / bodyguards to fix zombie grunts with silent weapons in They Hunger Episode 3.
  • [Alien Grunt] Removed friendly model selection for classic mode.
  • [Barnacle] Change barnacle classification to CLASS_ALIEN_PREDATOR. Barnacles will now try to munch on any CLASS_ALIEN_PREY walking by.
  • [Big Momma] Fixed potential crash.
  • [Chumtoad] Friendly chumtoads without an owner will now follow player when used.
  • [Houndeye] Fixed houndeyes not being able to damage breakables.
  • [Pit Drone] Added "initammo" key value which defines how many "spikes" will be loaded when the monster spawns (used on some OP4 maps).

Weapons/Items

  • [Grapple] Possibly fixed issues with the barnacle grapple sometimes failing to latch onto targets.
  • [Satchel] Fixed potential crashes prior to detonation and deactivation.

Maps

Half-Life Campaign

  • [All] Recompiled everything with default lighting parameters.
  • [All] Replaced trigger_cdaudio entities with ambient_music.
  • [HL C00] Fixed helicopter that was completely silent as the train drove by.
  • [HL C13 A4] Fixed trigger_changelevel teleport being turned on with the map start, and instead made it activate only when the scientist says you can jump into the portal.

Half-Life: Opposing Force Campaign

  • [All] Converted trigger_cdaudio and target_cdaudio entities to ambient_music entities. Maps now use the Opposing Force soundtrack instead of Half-Life's.

Infested

  • [Part 1] Fixed incorrect "nextmap" configuration.

Persia

  • Prevented first sneaky snipers hiding behind building.
  • Prevented players dying during cutscene near sniper rifle/grenades.

Polar Rescue

  • Removed ospreyT.mdl from the res file.

Stadium 4

  • Fixed friendly turrets/miniturrets not deploying after being spawned.
  • Implemented weapon filters to the human grunt and RPG grunt monster counters so that they don't overlap.

They Hunger

  • [Episode 1 Part 5] Fixed "mp_survival_nextmap" being commented out.
  • [Episode 3] Fixed zombie grunts with silent weapons.

Models

Other

  • [Player_Construction] Cleaned up the model, fixed smoothing, repaired UVs.
  • [Player_Gus] Cleaned up the model, fixed smoothing, patched holes, etc.

SDK

FGD

  • Added ambient_music entity.

Other

Game manual

  • Added guides on running SvenDS as a service.
  • Added Linux SvenDS service script example.
  • Added 'Judgement' to the list of official maps.

UI Text

  • Added FMOD copyright notice.
  • Changed "MP3 Volume" to "Music Volume".
  • Changed Miles notice to FMOD notice.

Misc

  • Deleted unused 3DFX GL library.
  • Deleted unused Bzip2 library.

Version details

Steam build ID numbers: Game 1965203, dedicated server tool 1965204, SDK tool 1965205.

Please use the steam build ID number as a reference when posting an issue or query on our message boards. You can find the build number you currently have within Steam by right clicking our game or tools, selecting Properties, then selecting the Local Files tab.