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
andPlayer.NVGOff
. Note that soundscripts for NVG supersede thenvg_sound_on
andnvg_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 thexen_plantlight
. If the visual is missing color, alpha or renderfx, these parameters for the glow sprite are still taken from thexen_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 manualprecached_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 manualprecached_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
anddump_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 withw_
.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
withshocktrooper/shock_trooper_attack.wav
in thefrontkick
animation event (the event data in the original Opposing Force model was missing the.wav
extension). - voltigore.mdl - removed
voltigore/voltigore_die2
andvoltigore/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 theVoltigore.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 theCBasePlayerWeapon
class. Now weapons must define theWeaponId()
override. - The weapon bits now should be accessed via the
m_WeaponBits
instead ofpev->weapons
. The helper functionsHasWeaponBit
,SetWeaponBit
andClearWeaponBit
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 andTRUE
andFALSE
definitions for non-Windows systems. All instances ofBOOL
in the game library code are replaced with standardbool
.TRUE
andFALSE
are replaced withtrue
andfalse
. TheFIELD_BOOLEAN
now expects the data variable to bebool
. As some virtual functions usedBOOL
either in return type or in the arguments, their interface now has been changed to usebool
. 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
tobool
:g_fGameOver
gDisplayTitle
gInitHUD
gTouchDisabled