Half-Life Featureful SDK Created 1 year ago2023-06-05 13:54:51 UTC by FreeSlave FreeSlave

Created 1 year ago2023-06-05 13:54:51 UTC by FreeSlave FreeSlave

Posted 1 year ago2023-06-05 13:54:51 UTC Post #347583
Hi everyone. You may know me as a developer of Half-Life mods like Field Intensity and Half-Life: Induction.
While working on Field Intensity, I made my own version of Half-Life SDK incorporating a lot of features that I needed in the mods I worked on or implemented just for fun. A few months ago I've come with a name for the SDK and properly published it on github.

Github Repository

Currently the releases include one map that demonstrates a number of features (but not all of them). I might make more demo maps in future.

Some excerpts from the wiki:

Half-Life Featureful aims to serve as a base for a classic Half-Life mod. This SDK provides entities from various mods and official addons, as well as additional entity parameters, bugfixes and new monsters' abilities and behavioral changes. Half-Life Featureful is meant to be used by modmakers without experience in HLSDK programming, who seek for easy ways to bring more features to their mods.

Feature overview

  • All Opposing Force monsters and weapons are implemented, as well as other opfor-specific entities (excluding CTF-related).
  • Some of Spirit of Half-Life features merged into the codebase, e.g. the locus system.
  • Modeled health and HEV chargers and eye scanner from PS2 version of Half-Life are implemented.
  • Introduced many new entities and additional parameters for standard Half-Life entities useful for a mapper. Timers, trigger randomizers. Useful properties for monstermaker, scripted_sequence and scripted_sentence. Precise configuration of some behavior aspects of monsters.
  • Improvements to monsters' AI and new abilities for standard monsters.
  • A lot of features and behavior aspects can be adjusted specifically for your mod via the Feature configuration files without rebuilding the game libraries. E.g. the unused custom weapons can be disabled and their assets won't need to be distributed with the mod.
  • Crossplatform. Support for GoldSource (including old pre-SDL2 versions) and Xash3D-FWGS engines. VGUI and VGUI-less builds. SDK potentially may work on mobile platforms, but it needs to be tested.

Some Q/A

Q: Why is it called Featureful?
A: In the context of this SDK features are adjustable gameplay aspects. Most of the features are configured via text files and don't require rebuilding of the game libraries. In that sense "customizable" or "featureable" would fit more, but "featureful" just sounds better.

Q: You call it featureFUL, but the SDK X provides more features to me!
A: There're different Half-Life SDKs available, and each of them has their own focus. Featureful may lack some of the features that exist in other projects, but it also introduces a bunch of its own additions and improvements. More features will be incorporated in future.

Q: Is there a roadmap for future updates of this SDK?
A: There's no strict roadmap, but you can look at the TODO list.

Q: Is it well-tested?
A: The mod Field Intensity is based on the same code, but the ability to adjust features via configuration files is a recent change and it's not present in the mod, so this particular detail needs to be tested better.

Q: If Field Intensity uses the same codebase, why Featureful SDK lacks some of FI additions like scalable HUD, captions, objectives interface and improved squad mechanic?
A: Some of these features were quite experimental and not ready to be merged back into the main codebase. Some of them are made for Field Intensity only and probably won't be merged back at all.
Posted 1 year ago2023-06-06 17:17:11 UTC Post #347584
Great addition for sure, thanks :D Field Intensity is awsome
Posted 1 year ago2023-06-07 15:23:40 UTC Post #347588
It supports Linux. It's mentioned in the README on github.
As for macOS, as far as I know GoldSource doesn't work on modern macOS versions, and you can't even build 32-bit applications for macOS anymore. So I guess the only way would be to play on 64-bit version of Xash3D-FWGS, and I haven't tested the 64-bit builds of my SDK yet.
Posted 1 year ago2023-06-11 23:41:46 UTC Post #347603
I'm not sure why you bring up all of this.
The opengl hacking is not planned in this SDK.
The only place where the OpenGL is used is to set the opengl fog type (the engine uses the exponential one by default, but it can be configured with opengl call), and this is completely optional.
If you're interested in graphics improvements on the opengl level, you might resort to Trinity or some other sdk with custom renderer.
Posted 1 year ago2023-07-06 15:04:08 UTC Post #347688
New release of Half-Life Featureful SDK (including the mod sample) is available.

Incomplete list of changes:
  • Added func_illusionary_toggle
  • "Victory dance" AI schedules of human grunts and alien grunts are now interrupted by danger sounds (e.g. grenades).
  • "Move away" AI schedules (when the ally monster is "pushed" by a player) are now interrupted by damage and danger sounds.
  • New configurable feature doors_open_in_move_direction to allow opening rotating doors in the direction of player's moving instead of facing.
  • Fixed a crash when controllable func_tank is triggered with null activator (original Half-Life bug).
  • Voice pitch of talking monsters is now customizable in entity properties.
Posted 11 months ago2023-08-07 14:43:19 UTC Post #347762
New release

List of important changes:
  • Target on pickup now works on ammo entities too.
  • Fix zombies not being able to attack sentry turrets (original Half-Life bug).
  • func_ladder can be turned on and off.
  • Don't mess Yaw spawnflag for env_sprite. In Half-Life the yaw value set in the editor for env_sprite is used as a roll value in the game. It's programmed this way due to some historical reasons and it makes oriented sprites setup harder. The new spawnflag is added to overcome this problem.
  • Female assassin cloaking ability can be controlled by sk_hassassin_cloaking skill cvars. If they're missing, the original behavior from Half-Life is used (cloaking enabled only on Hard difficulty).
  • Configuring custom amount of gibs for func_breakable and func_breakable_effect.
Posted 10 months ago2023-08-16 08:50:38 UTC Post #347775
Hi, I just remembered something. Can you join an NPC in a protective suit?
Lei Shi Lei ShiFRS石磊
Posted 10 months ago2023-08-17 13:48:27 UTC Post #347779
Your pic doesn't load for me.
If you mean the cleansuit scientist, it's already in the mod.
Posted 10 months ago2023-08-17 15:40:56 UTC Post #347780
I don't know why, but please right-click the icon to open the picture in a new page. This can be resolved, hopefully without bothering you too much.
Lei Shi Lei ShiFRS石磊
Posted 10 months ago2023-08-17 17:04:31 UTC Post #347781
Every mod impements HEV scientists differently and there's no golden standard (different behavior, different models).
I will need to think of the best way to implement them.
Posted 10 months ago2023-08-19 16:07:39 UTC Post #347786
I look forward to it.
Lei Shi Lei ShiFRS石磊
Posted 10 months ago2023-08-19 19:11:56 UTC Post #347787
In case the project won't use opfor ally soldiers, one can make a custom model for opfor human grunts which would look like a guy in HEV. Then also replace sounds and redefine sentences. Of course it's a hacky solution but it's at least something.
Posted 10 months ago2023-09-08 14:45:33 UTC Post #347846
New release

  • New parameter Gravity Setting for pickups (items, weapons and ammo)
  • Customizable models for ammo entities.
  • Add Master parameter for scripted_sequence. If the script has a master, then it won't possess the monster until the master is enabled.
  • Sound Radius parameter for func_tracktrain
  • Add HG_HOSTILE sentence group for human grunts to use against non-player non-alien enemies (in Half-Life they use HG_ALERT only against player and HG_MONSTER against alien monsters).
  • Add Speech Group parameter for talk monsters. It's a custom prefix used by a monster. E.g. you can make Barney talk like scientists by specifying the SC Speech group. Note that the monster will still use its original pain and death sounds in this case.
  • Add bigmomma_wait_fix configurable feature in featureful_server.cfg. When enabled info_bigmomma entities actually use the provided Wait value (bugged in original Half-Life).
  • Fix the upper rope segment sometimes incorrectly aligned.
  • env_warpball can create AI sounds now (e.g. combat sounds).
  • New flags Relative Teleport and Random Destination for trigger_teleport.
  • Allow +use, flashlight and other impulse commands during weapon reload (those commands are locked during reload in original Half-Life).
Posted 9 months ago2023-10-09 11:54:54 UTC Post #347930
New release


Configurable features

  • Wall puff sprites (cl_weapon_wallpuff) can be configured via featureful_server.cfg. Up to 4 sprites can defined (wall_puff1 - wall_puff4) which allows to set sprites from Counter Strike. By default sprites/stmbal1.spr is used as a sole wall puff sprite.


  • Fixed opfor ropes physics on high framerates.
  • Fixed spore launcher not playing a pet sound.
  • Fixed some HUD issues when player has both flashlight and NVG.
  • Fixed FG_CURE sentence group (a resource change)
  • Replaced fgrunt/checkin (a missing sound) with fgrunt/check in sentences.txt (a resource change).


  • Each global variable has one integer number associated with them, in addition to the state value. The number can be changed via game_counter_set targeting env_global with Modify/Set value triggermode. Also, triggering such env_global with 'On' or 'Toggle' use-type increments the global variable number by 1. Triggering it with 'Off' use-type decrements the number by 1.
  • New parameter Obey Use-type for env_global which allows to change the global variable state accordingly to the input use-type.
  • New spawnflag Act as Master for env_global which allows to use the global variable state as a master.
  • New entity trigger_compare for comparing constant numbers and numbers associated with entities (so called Locus Ratio) and triggering different targets depending on the result of comparison.
  • New entity calc_state to evaluate the state from boolean operation where the 'On' state corresponds to True and 'Off' state corresponds to False. Can be used as a master.
  • Copy Input and Reverse Input trigger modes for trigger_relay.
  • New entity calc_eval_number to evaluate the math expression based on constant numbers and calc ratios of entities.
  • New entity game_number for storing floating point numbers (you can still use game_counter to store and retrieve integer values). Can be used as a storage or parameter of calc_eval_number.
  • New entity trigger_check_state to check the master entity state and trigger the target depending on the check result.
  • Customizable smoke sprite for env_explosion.
  • monster_human_assassin_dead.
  • Barnacles can't grab victims possessed by non-interruptible scripts anymore.

Server commands

  • set_global_state - set the state of global variable. Available only when sv_cheats is enabled.
  • set_global_value - set the number value associated with global variables. Available only when sv_cheats is enabled.
  • ReportAIState (impulse 103) now reports the name of the scripted sequence entity if monster is currently possessed by a script. The command also draws the current monster route and the nearest node using temporary beams.
  • calc_ratio - calculate a ratio values associated with entity and report the result to developer console.
  • calc_state - calculate/get the entity state and report the result to developer console.


  • Support for snow texture material.
  • Added item_sodacan to FGD.
New pages on wiki: Math and Master entities.
Posted 8 months ago2023-11-10 13:50:27 UTC Post #348018
New release https://github.com/FreeSlave/halflife-featureful/releases/tag/featureful-2023-11-10



  • Fixed Pitworm entity light, laser attack sprite, strafe beam and missing sound precache.
  • Fixed barnacle grapple physics to match Opposing Force.
  • Fixed player_weaponstrip unintentionally removing player's flashlight or NVG.
  • Fixed trigger_camera no longer prevents enabling the control if player dies while using the camera.
  • Level transition won't be activated if player is dead, to avoid strange situation when player gets transitioned to another level in a dead state (which is possible if trigger_changelevel is triggered by something else with a delay).
  • When trigger_camera entity gets removed it automatically releases the player who activated it.


  • Added Ignore Armor flag for trigger_hurt and trigger_hurt_remote
  • Added No Camera Punch flag for trigger_hurt and trigger_hurt_remote
  • Added Alive player only flag for trigger_camera to ensure that the camera won't start if player is dead. It also makes camera release the player's view if player died while camera was activated.
  • Allow opfor human grunts to have no weapons if weapons are set to "None".
  • Opfor medics and torch grunts can be set to throw hand grenades. FGD was changed accordingly.

Client cvars and commands

  • hud_min_alpha cvar to control the minimum HUD alpha value.
  • hud_color is now a client command. The color is now getting saved to the player's configuration.

Server cvars

  • Added items_physics_fix server cvar in attempt to fix items and ammo sometimes falling through the floor (e.g. if spawned from a func_breakable on a shelf). Changing this cvar may have some unwanted side-effects. Read description in featureful_exec.cfg

Configurable features

  • monsters_spawned_named_wait_trigger. When set to false, named monsters spawned from monstermaker won't wait 5 seconds before entering their regular AI loop, unlike they do in Half-Life. Previously the default behavior in this SDK was the same as having this feature set to false, and while it's usually desirable, it might break some existing maps. So now it's set to true by default in order to match original Half-Life behavior.
  • vortigaunt_squad allows to add a capability to form squads for vortigaunts. In original Half-Life they don't have this capability set.
Posted 8 months ago2023-11-12 09:38:44 UTC Post #348020
Nice work.
Posted 7 months ago2023-12-11 17:03:35 UTC Post #348196
New release https://github.com/FreeSlave/halflife-featureful/releases/tag/featureful-2023-12-11


  • The glow shell effect (applied by the shockroach projectiles) now wears off over time from osprey and apache.
  • Fixed Desert Eagle not ejecting a shell upon firing.
  • Fixed the Half-Life path finding bug when the fleeing monster couldn't choose a spot as a cover because the enemy couldn't build a path to this spot.
  • Don't report missing HG_HOSTILE and ST_HOSTILE sentences (as they're optional)
  • The entity with game_playerdie targetname is now triggered upon the player's death in singleplayer as well.
  • The pain indicator sprite color doesn't blend with the HUD color anymore. This prevents pain sprite rendering green or other weird colors depending on the HUD color.
Posted 6 months ago2024-01-12 15:22:07 UTC Post #348441
New release https://github.com/FreeSlave/halflife-featureful/releases/tag/featureful-2024-01-12


Support for subtitles

Mods can use sound/captions.txt and sound/captions_profiles.txt files to define captions.
Sample files defining captions for some sentences on the first two maps of "Anomalous Materials" chapter are packed with the mod sample.

HUD scaling

Added hud_scale client cvar to control HUD scaling. 1 means the original scale. 0 means autoscale depending on the screen resolution. Note that support for high definition sprites from the anniversary patch will be added later.

Configurable Weapon Layout

Weapon layout can be configured in features/hud_weapon_layout.cfg file. The format is described in the sample file.


  • trigger_configure_monster can configure more monster's parameters: Free Roaming, Gib Policy and Size For Grapple.
  • Added dead turret entities: monster_miniturret_dead, monster_sentry_dead and monster_turret_dead
  • Added Custom amount parameter for ammo entities.
  • Added Custom Initial Ammo parameter for weapons.
  • Added Delay after blocked parameter for monstermaker. If not zero, this is used instead of spawn delay before trying to to spawn the monster again, if the spawn was blocked before.
  • Added Don't fire look target for trigger_camera.
  • Added scripted_following entity and the Followage policy parameter for following monster (Experimental).


  • Fixed HUD not showing after 'fullupdate' command.
  • Fixed repeatable scripted_sequence with Walk or Run move type not properly working after it got interrupted and triggered again (Half-Life bug). Thanks @Aynekko for reporting.
  • Fixed scripted_sequence being unresponsive when it has Idle Animation and Turn to Face move type (Half-Life bug).

Configurable features

  • Color values in hexadecimal form can be prefixed with # symbol instead of 0x.
  • hud_autoscale_by_default - whether hud_scale value is 0 by default (meaning autoscale).
  • crosshair_colorable feature and corresponding cvar. Allows crosshair color to depend on the chosen HUD color. Requires a sprite with white crosshairs to apply colors properly. Experimental feature, not enabled by default.
Posted 5 months ago2024-02-13 18:36:29 UTC Post #348574
New release https://github.com/FreeSlave/halflife-featureful/releases/tag/featureful-2024-02-13


Half-Life Anniversary changes

Some Half-Life Anniversary changes were merged from https://github.com/FWGS/hlsdk-portable. Thanks @nekonomicon
  • Improved handgrenade throw physics.
  • Improved spawn spot randomization in multiplayer.
  • Fix gauss sound on level transition.
  • Added HL anniversary fix for pushable acceleration
  • func_vehicle implementation
  • Fixed snark throwing when player is on the edge.
  • Applied new satchel controls.
More changes related to HL anniversary will be merged in the next version.

Cvar changes

  • New client cvar cl_satchelcontrol to control the preferred control scheme. 0 is for legacy, 1 is for anniversary.
  • Changed how pushablemode cvar works. Now 0 means anniversary mode (default), -1 means legacy mode and 1 means XashXT mode. The special value 2 (which meant the SoHL mode) has been removed.

Configurable features

  • gargantua_larger_size - when enabled, make Gargantua's size equal to one from Opposing Force. This fixes the problem with some projectiles (e.g. shockroach and hornetgun ones) not properly hitting the monster.

Other changes and fixes

  • Shock trooper and voltigores now have a 'hate' relationship to the player instead of just 'dislike'.
  • Picking up items by +use (when the pickup_policy value is not 0) is no longer allowed through the walls.
  • Fixed a bug when colorable crosshair didn't restore properly after using a func_tank.
Posted 5 months ago2024-02-15 01:18:45 UTC Post #348575
Hey! i really love your work, this level of easy customization its awesome, i downloaded this recent version (yesterday's) and i found a bug, the grande of the mp5/m4 grenade launcher doesn't do any damage (player itself and/or monsters) and for some reason the sprite its really big, like x3-x4 scale of a normal grenade.

EDIT: And i don't know if its just me, but in the sample mod, no matter what i try like executing the skill.cfg, or skillopfor.cfg, or whatever, all monsters health and parameters are 0 in every map. In the console it shows all the overriden values:

"sk_agrunt_health1" is "0"
"sk_agrunt_health2" is "0"
"sk_agrunt_health3" is "0"
"sk_agrunt_dmg_punch1" is "0"
"sk_agrunt_dmg_punch2" is "0"
"sk_agrunt_dmg_punch3" is "0"
"sk_apache_health1" is "0"
"sk_apache_health2" is "0"

Posted 4 months ago2024-02-18 10:36:34 UTC Post #348585
Thanks for reporting. Yeah, that's weird. I'll look at it and make a fixing release when I find out what causes the problem.

For now the fix is to replace all tab characters in skill.cfg with spaces.
Posted 4 months ago2024-02-18 11:01:17 UTC Post #348586
I've uploaded the new archive with fixed skill.cfg.

I also added user.scr, so Advanced tab in player settings has some configurable options.
for some reason the sprite its really big, like x3-x4 scale of a normal grenade.
Do you mean the HUD sprite? There's a HUD autoscaling feature, but it's turned off by default, so it shouldn't scale unless you change hud_scale client cvar.
Posted 4 months ago2024-03-14 16:29:16 UTC Post #348650
New release https://github.com/FreeSlave/halflife-featureful/releases/tag/featureful-2024-03-14


Ammo changes

  • The max ammo carry per each ammo type can be configured via features/maxammo.cfg file (example included).
  • Increased the max ammo the player can potentially carry - now it supports showing up to 4 digits in HUD.

ParticleMan implementation

ParticleMan is an additional library made by Valve that is used to spawn particle effects in Counter Strike and Day of Defeat. While Valve's ParticleMan is a separate closed-source library, it can be reimplemented in the client.
  • The ParticleMan reimplementation by SamVanheer added to the SDK.
  • Added a new client command test_particles to spawn test particles with ParticleMan.
  • Note: particles produced by ParticleMan won't work in Software render mode.


  • New entity particle_shooter - create particles with ParticleMan. Designed after the entity from Day of Defeat.
  • Buttons are now allowed to play scripted_sentences.
  • New parameter Delay Before Reset for trigger_relay which allows to ignore consequent calls to trigger_relay until the specified time has passed since the last call.
  • New suffixes for multi_manager delay values: forward and reverse to forward or forward-reverse the use type the multi_manager has been called with to its targets. E.g. if multi_manager was triggered with On use type, all targets which have #forward suffix in the delay value will be triggered with On. All targets which have #reverse suffix in the delay will be triggered with Off in this case.

Cvar changes

  • The client cvar cl_satchelcontrol has been renamed to _satctrl and set to 0 by default (classic satchel control behavior).
  • New client cvar _grenphys added to let user control whether they want the new hand grenade anniversary or not.
  • Note: weird cvar names is the result of user info buffer being limited to 256 bytes.

Other changes

  • Added previously missing func_vehicle to fgd.

Codebase changes

  • The minimum required C++ version now is C++11, instead of C++98.
  • Ammo types registration is now separated from weapon precaching.
Posted 4 months ago2024-03-14 21:29:42 UTC Post #348651
I love you guys for doing this. Your todo list also looks very impressive. It will contain everything I always dreamed of.

Additional wishes or recommendations if not added yet:

-Solokillers random trigger spawning possibility. Making each play through unique and different.
-Solokillers triggers that only activate based upon the set difficulty.
-Solokillers Audio library & entity maximum extension. (I believe that was already included within Field Intensity, am I right?) So that the game allows for more maximum npc sentences written within the sentences.txt and an increased number of entity usage within any given map.
-Fix on Field Intensity Code and probably here as well to give Hecu_Ally_Grunts a rifle. When I spawned em per entity or per console they still spawn without a rifle just like in the original Op4 SDK.

As far as Monsters go possibly this:

-Hecu Minigunner, seeing how you're gonna add the minigun at some point.
-rpg hecu and blackop rpg variant- also being able to take on choppers.
-Robo Grunt of the censored German Version?
-Decay: npc Keller. Rosenberg is already in it if I remember correctly.
-Eventually a port of the Sweet Half-Life Hev Suit npcs & the Grey Aliens? :D
-Would be cool to get the Todesangst 2 Loader Enemies in as well. That was a one timer. Haven't seen anything like it any other Half-Life mod since. :)
-Eventually female Scientists https://gamebanana.com/mods/393927 (I've got a full sound set ready, based upon their male counterparts.)
But it's not yet released. Let me know if you're interested in obtaining that.
-Female Azure Sheep Security Guards.
While these can get added in by the mapper themselves it might save time and would serve as full package for any upcoming mappers to have everything available from start.

Last but not least a minor and more fun like request:
-If permission given add the brown shocktrooper variant of this SDK project onto your project: https://www.moddb.com/mods/opposing-force-enlightened It uses the former Alpha model but enhanced to the default op4 standards and uses the spore launcher instead the shock roach. Of course it's just a simple weapon and model swap within the entities in the editor but still kinda cool to have. Maybe eventually as 2nd skin within the model itself? Might be even cool to have for Field Intensity. That combined with a slight different pitch within the monster entities and you get a female version of said Alien. ;)
As far as the Archer is concerned: I love how it got handled back in Azure Sheep, game play wise.
Although an additional distance attack might not be wrong especially if the player is hiding behind something in the water.

It could have 3 attacks.
1. When it comes under close range attack from the player with a crowbar it will release a minor electrical charge which stuns the player and their vision, swims off before charging or long range attacking the player again. Similar like you did with the Alien Slaves.
2. the regular bite animation that azure sheep portrayed
3. and your suggested pit drone like attack.

I'd love to get the sounds from the Azure Sheep version for it. It had the best sounds for the Archer and the most memorable.

Stukabat - Hl: Point of View - hanging as ammo or idling around in the air and attacking any humans once it sees them.
Panthereye - Hl: Invasion, yes.
Charger - Hl: Invasion, yes.
Alienflyer aka Aflock - Love to see a dynamic flight script like you did for the boid.
chumtoad - Idle walking and hopping logic like for the boids. If approached to closely they explode on you.
Posted 3 months ago2024-03-15 08:28:44 UTC Post #348653
23-down, some of the things you mentioned are already implemented.
E.g. robogrunt, heavy weapons grunt (he probably needs a bit of improvement though), Richard Keller and female security guards. Some of them are not enabled by default in the sample mod but can be configured. Look at the features/featureful_monsters.cfg file.

As for females scientists and HEV scientists (similar to ones from Sweet HL) it would be ideal to come up with a system that allows a mapper to replace NPC's sounds for specific instances. Currently only the sentence prefix replacement is already supported, but one will need to replace pain/death sounds as well. Once it's implemented mappers can make female scientists based on monster_scientist and HEV scientists based on monster_human_grunt or monster_barney.
-Solokillers random trigger spawning possibility. Making each play through unique and different.
You can emulate random spawn via trigger_random.
-Solokillers triggers that only activate based upon the set difficulty.
This is something I want to add later along with some other utilitary entities.
-Solokillers Audio library & entity maximum extension.
It basically requires to rewrite the whole Audio Engine. While it's technically possible (Sam used OpenAL, but there're other alternatives like miniaudio), it's a lot of work, I'm not sure when I'm gonna do it.

Cut HL monsters is something I will be implementing when I need them in my own mods. Basically I do most of the stuff because my own projects may need it.
Posted 3 months ago2024-03-15 18:08:30 UTC Post #348655
Sounds lovely... I will have a check on it. At the moment I'm working only with your Field Intensity Build v1.6 so I haven't even started yet to check out featureful.

Are there some documentation files you published somewhere explaining what each new entitiy does? I did go through your test maps on the Field Intensity SDK. Some maps didn't work as they should've as far as I could've determined.

Anyway stay on it. You're doing a wonderful job as always. :)
Posted 3 months ago2024-03-16 01:11:51 UTC Post #348656
There's some documentation on wiki, e.g. https://github.com/FreeSlave/halflife-featureful/wiki/Other-entities
The wiki just lists changes comparing to Half-Life. For (re)implemented SoHL or Sven Co-op entities you'll need to refer to the corresponding tutorials. The FGD itself serves as documentation since most of the new entities and property names has descriptions you can read in J.A.C.K.

While Field Intensity uses the same codebase it has some adjustments that are currently not available in Half-Life Featureful SDK.
I'm not sure what you mean by test maps. There's only one demo map included in the Half-Life Featureful archive.
Posted 3 months ago2024-03-29 04:37:54 UTC Post #348673
Thanks for letting me know about that. I just tinkered around with your various config files and also read your github guide. This project is truly stunning. I've finally switched from Fi 1.6 to featureful.

Still missing all the fancy Field Intensity monsters though, but all in the good time, eh? :)

The fact that you won't re-add your story, thought and radio features saddens me immensely. Besides your mod and Todesangst2, Point of View I can't recall any other SP mod that ever did something similar. Would be a massive boost to any story driven mod to get that included in featureful even if it was just experimental.
Any chance on getting the Squad disband and recruitment feature into Featureful? Might be useful for all sorts of Npcs later on.

Bug report: monster_flyer_flock won't accept my custom models. It launches by default with the Boid model. But what I'd like for my XEN map is the real flock.mdl model. The model animations are present and accounted for.

So far I'm very happy and very grateful to you and your ambitious project..
For you: http://sndup.net/t8hd
Posted 3 months ago2024-03-30 00:14:26 UTC Post #348678
Thanks for the bug report regarding boids. It will be fixed in the next version.

There're reasons why some FI specific features are not ported yet:
  • They're not implemented in a manner which is generelized enough to be used in other mods.
  • I just want FI to have some things unique to the mod.
I'll port FI features over time when I figure out how to implement them in a more generalized way.
Posted 2 months ago2024-05-05 14:02:19 UTC Post #348769
New version https://github.com/FreeSlave/halflife-featureful/releases


Per-monster sound replacement

Now monsters have a Sound Replacement File parameter. These files define sound replacements for the monster entity. See example in sound/female_pain.txt.

This feature is quite experimental and needs more testing.

The demo map update

The demo map was extended a bit to include demonstration of more entities and features.

Captions changes

  • Number of captions is virtually unlimited now (as opposed to maximum 256 in the previous releases). Note that you're still limited by the number of sentences depending on the engine (2048 on the modern GoldSource).
  • The length of the caption is virtually unlimited (as opposed to maximum 599 characters in the previous releases).
  • Added support for the forced caption duration (the hold time). See example in sound/captions.txt.
  • Added more HL sentences to the sample sound/captions.txt.

New features in featureful_server.cfg

  • gauss_fidget - allows to enable/disable the Tau-cannon fidget idle animation.
  • medic_drop_healthkit - whether medic grunts drop healthkits upon dying.


  • New monster monster_civilian - generic friendly npc with scientist-like behavior. Doesn't have the healing ability. Suitable for making civilian npcs like construction workers or unarmed npcs from Condition Zero Deleted Scenes.
  • Commented out monster_gus and monster_gus_dead in the fgd. This monster was from Cleaner's Adventures and wasn't enabled in the game code anyway.
  • Customizable Fly Speed, Turn Rate and Check Distance for monster_flyer_flock.
  • Added Alert friends and Friends can alert me parameters for talk monsters.
  • Monsters with Tolerance level set to Absolute are now not alerted by friends death by default (it still can be forced via Friends can alert me parameter).


  • New entity player_hasweapon - check if player has a specific weapon. Can be used as Master.
  • New entity player_hasitem - check if player has a specified item (suit, flashlight or longjump). Can be used as Master.
  • New entity trigger_skill_test - fire a trigger depending on the current difficulty.
  • New flag Fade sprite for env_smoker to automatically fade smoke sprites (by default the entity relies on fading in the sprite animation).
  • New parameter Scale unit type for env_smoker (historically the entity used tenths of the scale, i.e. 10 meant scale 1).
  • New entity player_calc_ratio - calculate the absolute or fractional value of player's health, armor or ammo amount.
  • trigger_compare has a new way to fire a target depending on the condition. Now you can define test type and triggers for pass and fail. The old triggers work independently from the new ones, but it's not recommended to use both approaches at the same time.
  • trigger_compare now can be used as a master. The state depends on the evaluation of the chosen condition.
  • The parameter Fire On Equal To of trigger_compare now uses a different internal key name. The old key is still supported, but considered deprecated.
  • New entity env_extinguisher to produce a fire extintinguisher effect. Ported from Field Intensity.
  • New parameter Starting frame for env_model. The negative value allows randomizing the starting frame.
  • momentary_door now has an associted Calc Ratio value (like in Spirit of Half-Life).


  • Fixed player being able to pick up the same ammo item multiple times when the pickup policy allows picking up by pressing +use button. Thanks b0rdie for reporting.
  • Fixed not being able to set custom model and custom model scale for monster_flyer_flock. Thanks 23-down for reporting.
  • Fixed setting Gun State parameter with some custom Barney models. Thanks 23-down for reporting.
  • Now if sk_rgrunt_explode skill is not defined, the hand grenade damage is used as a fallback.

Client input changes

  • Windows version now uses SDL2 to handle mouse and joystick input when running on the engine version post 2013 update (when SDL2 was added to the engine). The old non-SDL2 input handling is still supported when running on the older versions.

Codebase changes:

  • ARRAYSIZE is now a template constexpr function instead of the macro.
  • The virtual function IsTriggered now returns bool instead of BOOL.
Posted 2 months ago2024-05-13 22:43:03 UTC Post #348797
New version https://github.com/FreeSlave/halflife-featureful/releases/tag/featureful-2024-05-13


Configuring the ammo amounts in ammo and weapon entities

The new features/ammo_amounts.cfg file allows you to customize the ammo provided in ammo_ and weapon_ entities by default.

This is an experimental feature.

Changes to the sample mod

  • The new demo map is included in the sample mod - flyers_demo - for demonstration and testing of the osprey and apache.
  • Previously missing models/blkop_tailgibs.mdl has been added to the resources.

New features in featureful_server.cfg

  • door_rotating_starts_open_fix - when enabled, fix the bug with func_door_rotating becoming unresponsive after the first use if it has Starts Open spawnflag. This feature is currently left disabled by default just in case some existing map relies on this behavior.
  • warpball_at_monster_center - if enabled, when env_warpball is used as a template effect for monstermaker, create the effect at the monster's body center by default, instead of monster's origin (which is usually at the monster's feet). The feature is enabled by default. If you want the old behavior, set the warpball_at_monster_center to false in your features in featureful_server.cfg.


  • The values of the parameter Warp at monster's... of monstermaker now have a different meaning. Any positive value means to create a warpball effect in the center of the monster's body. Any negative value means to create effect at the origin. And 0 (default) means to create at the position depending on the warpball_at_monster_center feature.
  • env_warpball now can define a second sprite that will be played along with the first one. sprites/xflare1.spr is provided as default second sprite in the fgd. You need to manually set the second sprite on existing maps if you want warpballs to create two sprites.
  • Added Smoke position parameter for env_smoker.
  • Added Instant spawnflag for multi_manager, multi_trigger and multi_sequence. By default targets with 0 delay will be triggered only on the next frame after the multi_manager has been triggered. With this flag such targets will be called instantly.
  • You now can provide custom keyvalues for the monster spawned via monstermaker. In the editor toggle SmartEdit (like you do with multi_manager) and add keyvalues you want to forward to the monster prepending the key names with # symbol. This allows to set some parameters that can't be set via monstermaker otherwise (e.g. bodystate of monster_barney).


  • Fixed opfor grunts coming from osprey without weapons.
  • Fixed osprey and apache sounds not stopping if they were replaced with a sound replacement system.
  • Fixed flocking flyers sounds not being replaceable with a sound replacement system.

Codebase changes

  • Added GetWeaponData and SetWeaponData functions for weapons to tidy and deduplicate some prediction code.
  • ALLOC_STRING is now a function instead of the macro.

Repository changes

  • The features/ directory is no longer included in the automated builds. This is to avoid situations when someone wants to try the latest version and rewrites their features/ directory with the default one by accident.
Posted 1 month ago2024-05-24 23:13:54 UTC Post #348825
New release https://github.com/FreeSlave/halflife-featureful/releases/tag/featureful-2024-05-24


Warpball templates

Warpball templates for monstermakers are now defined in the templates/warpball.json file. The old entity-based approach is still working but now is considered deprecated.

Configuring save titles

The save titles (the ones shown in the Load game menu) are now configurable via external file save_titles.txt (in original Half-Life they're hardcoded in the engine).


  • Added player_capabilities - allows to disable/enable player's capabilities such as jumping, crouching, attacking and using (+use).
  • Added player_speed - allows to change the maximum player speed.
  • trigger_configure_monster now can dynamically change the monster's blood color.
  • Add Ignored by classify parameter for monsters. E.g. one may set barney to be ignored by Alien prey class (which headcrabs belong to), so headcrabs won't see barney as an enemy while barney will still shoot them.

New configurable features

  • dying_monsters_block_player - whether monsters block player movement while in dying animation. This is standard Half-Life behavior which becomes problematic when the dying animation is too long (e.g. bullsquid's one). This is standard Half-Life behavior which becomes problematic when the dying animation is too long (e.g. bullsquid's one).
  • player_maxhealth and player_maxarmor to set the default maximum values for health and armor used in the mod. Alternative way is to set maxhealth and maxarmor in the map .cfg file. game_player_settings now also is capable of changing the maximum health and armor values.


  • Fixed monsters sometimes not finding the nearest node when they're on stairs. This is a bug from original Half-Life. Whether the fix is applied depends on the value of findnearestnodefix cvar (set to 1 by default, which means the fix is enabled).

Codebase changes

  • ALLOC_STRING called on the same data won't request the string allocation again. Instead it will reuse the cached value if such string has been already allocated on the map.
  • UnpackRGB is now shared between client and server code. Added PackRGB.
Posted 1 month ago2024-06-05 16:02:12 UTC Post #348853
New release https://github.com/FreeSlave/halflife-featureful/releases/tag/featureful-2024-06-05


Player inventory items

A simple player inventory system has been implemented.

Configurable armor strength

The global armor strength for the mod now can be configured via sk_plr_armor_strength skill value. Default armor strength in Half-Life is 2 i.e. one armor point has the same value as 2 health points when player takes damage.

The armor strength can also be changed dynamically via game_player_settings.


  • Added player_deployweapon - make a player deploy the specified weapon (if player has it).
  • Added Do Save and Player can't use spawnflags for cycler_sprite.
  • Added player_inventory to do opertions on the player's inventory items.
  • Added player_hasinventory to test if player has a specified inventory item.
  • player_calc_ratio now can count inventory items as well (if Calc Param Type is set to Inventory item count and the Inventory item name is specified).


  • Fixed particle_shooter save-restore.
Posted 2 weeks ago2024-06-25 18:48:34 UTC Post #348921
Can you add these ZHLT Base classes to the fgd and add references to these to eligible entities?
Every time you release a new build, I have to add these back in.
@BaseClass = ZHLT_usemodel
    zhlt_usemodel(string) : "ZHLT Template Model Target"

@BaseClass = ZHLT_customshadow
    zhlt_customshadow(string) : "Custom Shadow (when opaque)"

@BaseClass = ZHLT_embedlightmap
    zhlt_embedlightmap(choices) : "Embed Light Map (when translucent)" : 0 =
            0: "No"
            1: "Yes"
    zhlt_embedlightmapresolution(integer) : "ZHLT Embed Light Map Resolution" : 4

@BaseClass = ZHLT_noclip
    zhlt_noclip(choices) : "ZHLT Noclip" : 0 =
        0 : "Clip"
        1 : "Noclip"

@BaseClass = ZHLT_invisible
    zhlt_invisible(integer) : "Apply NULL texture in Game" : 0 : "Removes faces and NULLs them."
Not sure if ZHLT_usemodel is of any use since you already have model trains and sprite trains, I'll leave it up to you to decide whether you want to include this.
Posted 2 weeks ago2024-06-26 10:06:00 UTC Post #348928
The Mad Carrot, good idea.
But I'm not sure about providing the default value for zhlt_embedlightmapresolution. It's probably better to leave empty.
Posted 2 weeks ago2024-06-26 14:57:02 UTC Post #348929
I think the agreed upon default value for zhlt_embedlightmapresolution is 4, so I'd say go with that, been using this for glass windows/panes.
Posted 2 weeks ago2024-06-27 01:05:51 UTC Post #348930
^ have you tried playing a map with that and with texture filtering off? it looks god awful at anything higher than 1.
Posted 1 week ago2024-07-01 15:14:10 UTC Post #348940
Ah I see what you mean, I never noticed it before because I use a low FX amount value for these window panes. I guess we can get away with a lightmap resolution of 1, this isn't Half-Life like its 1999 any more.
User posted image
You must be logged in to post a response.