Skip to content

Half-Life Featureful SDK 2024-12-19

Latest
Compare
Choose a tag to compare
@FreeSlave FreeSlave released this 19 Dec 16:08

The mod sample is included in the archive, with the test map and assets

The provided FGD has an extended format used by J.A.C.K. and won't work with Valve Hammer Editor!

This release also includes the custom FGD provided by the community with assets like entity-specific icons and models that might help the level designer.

Note: zhlt entities are not included in the FGD. You must add zhlt.fgd to your game profile configuration in the map editor.

If you already have a mod in development based on Half-Life Featureful read this article to get the idea how to apply the new SDK version for your project.

Changelog

New animation events

Introduced more animation events:

  • 1012 - expects a sound path. Plays the sound on the voice channel with normal attenuation. Opposing Force compatible.
  • 1013 - expects a sound path. Plays the sound on the weapon channel with normal attenuation. Opposing Force compatible.
  • 1014 - expects a soundscript name. Plays the soundscript according to its parameters.

NPC changes

  • Female assassins now check for potential friendly fire before shooting and throwing grenades.
  • Made voltigore and voltigore's projectile behave closer to the Opposing Force implementation.
  • Removed precaching of some unused NPC sounds in order to reduce the number of precached resources a bit.
  • Xen plants now have configurable models.

Weapon changes

  • Increased the maximum number of weapons from 32 to 64 (actually 63 as the first one is used as no weapon). The new weapons themselves will be added in future updates.
  • Dropping the last weapon is now allowed in multiplayer.
  • If previously thrown satchels were crashed by the door and player still have some satchels in the inventory, the satchel view model will be drawn automatically instead of the radio view model.

New soundscripts and visuals

  • Added visuals for the voltigore's beam effects and the bolt projectile.
  • Added soundcripts for flashlight and NVG: Player.FlashlightOn, Player.FlashlightOff, Player.NVGOn and Player.NVGOff. Note that soundscripts for NVG supersede the nvg_sound_on and nvg_sound_off entries in the features/featureful_server.cfg. The latter features are now deprecated and will be removed in future.
  • Added XenLight.Glow visual for the xen_plantlight. If the visual is missing color, alpha or renderfx, these parameters for the glow sprite are still taken from the xen_plantlight itself (compatibility with default behavior).

New properties for entity templates

  • sound_replacement - an alternative to sound list files. Now sound replacemnet can be defined for the entity template. The old sound replacement system will probably be deprecated and removed in future in favor of templated approach.
  • precached_sounds - the array of sound paths to precache for the entity with this template. This is useful if you use a custom model with custom sound events and want to tell the game code which sounds should be precached.
  • precached_soundscripts - the array of soundscript names to precache for the entity with this template. This is useful if you use a the new 1014 animation event in the model and want to tell the game code which soundscripts should be precached.
  • autoprecache_sounds - an option to automatically precache sounds defined in the animation events of the entity model. Events 1004, 1008, 1011, 1012 and 1013 are considered for sound autoprecaching. This is an alternative to otherwise manual precached_sounds.
  • autoprecache_soundscripts - an option to automatically precache soundscripts defined in the animation events of the entity model (event 1014). This is an alternative to otherwise manual precached_soundscripts.

Bugfixes

  • Fixed animation events sometimes playing again after the attack animation ends (observable on gonome and pitdrone attacks). As this is an experimental fix, it's controlled by anim_attack_reset_fix cvar for now.
  • Fixed gonome playing melee sounds on the wrong channel.
  • Fixed redifinitions of soundscripts and visuals in entity templates being processed incorrectly if the entity template is named after the entity classname (e.g. monster_gonome).
  • Fixed flybees not finishing their death schedule if they fall into water.

Disabling standard Half-Life weapons

Now it's possible to remove the standard Half-Life weapons from the mod. This is configured via features/featureful_weapons.cfg. Disabling the standard Half-Life weapons can help to reduce the number of precached resources (as player weapons are always getting precached). E.g. if your mod campaign doesn't feature the hornetgun and gluon gun (egon) you can add the following lines:

-egon
-hornetgun

Console command changes

  • Now dump_precached_sounds and dump_precached_models can take arguments which are processed as path prefixes for filtering. Examples:
    • dump_precached_sounds items/ will show all precached sounds from the items/ directory.
    • dump_precached_models models/w_ will show all precached models starting with w_.
    • dump_precached_models sprites/ will show all precached sprites.
  • impulse 103 now also reports the current sequence name and illumination value of the monster.

Sample mod changes

  • The flyers_demo map has been updated to include ichthyosaur and leeches.
  • delta.lst has been updated for the increased max weapons limit.

Some models distributed with the sample mod got few changes:

  • massn.mdl - set the head hitgroup for the head hitbox (the original Opposing Force model didn't set the proper hitgroup for the assassin's head).
  • strooper.mdl - replaced shocktrooper/shock_trooper_attack with shocktrooper/shock_trooper_attack.wav in the frontkick animation event (the event data in the original Opposing Force model was missing the .wav extension).
  • voltigore.mdl - removed voltigore/voltigore_die2 and voltigore/voltigore_die3 sound events from death sequences (the event data in the original Opposing Force model was missing the .wav extension). The death sound is played via the Voltigore.Die soundscript independent of the sequence.
  • zombie_soldier.mdl - set appropriate hitgroups for the hitboxes (the original Opposing Force model had all hitgroups set to 0, i.e. generic).

Codebase changes

This version introduces pretty big changes to the codebase. So if you maintain a fork of Featureful SDK it's better if you read this.

  • Removed m_iId data member from the CBasePlayerWeapon class. Now weapons must define the WeaponId() override.
  • The weapon bits now should be accessed via the m_WeaponBits instead of pev->weapons. The helper functions HasWeaponBit, SetWeaponBit and ClearWeaponBit have been added - they accept the weapon id as a parameter.
  • Matching the actual C++ data type with field type in the save-data is now enforced at compile time.
  • Completely got rid off BOOL typedef and TRUE and FALSE definitions for non-Windows systems. All instances of BOOL in the game library code are replaced with standard bool. TRUE and FALSE are replaced with true and false. The FIELD_BOOLEAN now expects the data variable to be bool. As some virtual functions used BOOL either in return type or in the arguments, their interface now has been changed to use bool. This should be taken into account if you forked the Featureful SDK and override some of the virtual functions:
    • CBaseEntity functions: IsAlive, IsAllowedToSpeak, IsBSPModel, IsInWorld, IsNetClient, IsPlayer, OnControls, PlayScriptedSentence, ReflectGauss.
    • CBaseToggle functions: IsAllowedToSpeak, PlayScriptedSentence
    • CBaseMonster functions: CanPlaySentence, CanPlaySequence, CheckEnemy, CheckRangeAttack1, CheckRangeAttack2, CheckMeleeAttack1, CheckMeleeAttack2, FCanCheckAttacks, FInViewCone, FVisible, HasTarget, IsMoving, ShouldFadeOnDeath, StopFollowing
    • CBasePlayerWeapon functions: CanDeploy, CanHolster, Deploy, IsUseable, PlayEmptySound, ShouldWeaponIdle, UseDecrement
    • CItem functions: MyTouch
  • Following globals changed from BOOL/int to bool:
    • g_fGameOver
    • gDisplayTitle
    • gInitHUD
    • gTouchDisabled