Body Destructibility xml files can be found in this folder: GameSDK/Libs/BodyDamage/
Any number of files can be created, usually one per actor type is enough. The naming convention is the following: BodyDestructibility_NameOfCharacter.xml
For example:
These files will be usually edited by tech artist together with game designers.
They define a mapping of character bones and attachments to destructible 'body parts', destruction events, actor health thresholds and special death events.
Let's explain it with an example. The following is a collapsed version of the body parts setup for the alien grunt.
<BodyDestructibility>
<DestructibleParts>
<!-- Attachments -->
<Attachment name="armor_chest_l" >
<Health ratio="0.05" ratioToDestroyOnDeath="0.01" eventOnDestruction="armor_chest_l_explode" eventOnActorDeath="armor_chest_l_explode" />
<HitTypes>
<HitType name="gaussbullet" damageMultiplier="1.0" eventOnDestruction="armor_chest_l_explode" eventOnActorDeath="jelly_explode" />
<HitType name="mike_burn" damageMultiplier="0" />
<HitType name="frag" damageMultiplier="0.5" />
</HitTypes>
</Attachment>
...
<!-- Bones -->
<Bone name="Head" >
<Health ratio="1" ratioToDestroyOnDeath="0" eventOnDestruction="head_explode" eventOnActorDeath="head_explode" />
<HitTypes>
<HitType name="mike_burn" damageMultiplier="0.0" />
</HitTypes>
</Bone>
...
</DestructibleParts>
<Events>
<Event name="head_explode" >
<AttachmentsToHide>
<Attachment name="armor_head" />
<Attachment name="jelly_alive" />
<Attachment name="armor_head_tentacles" />
<Attachment name="eye_left" />
<Attachment name="eye_right" />
</AttachmentsToHide>
<AttachmentToUnhide>
<Attachment name="jelly_destroyed_head" />
</AttachmentToUnhide>
<Effect name="Crysis2_alien_effects.grunt.jelly_head_explode" />
<DisableEvents>
<Event name="head_damaged" />
<Event name="jelly_explode" />
</DisableEvents>
</Event>
...
</Events>
<HealthRatioEvents>
<HealthRatio ratio="0" bone="" event="" material="Objects/characters/alien/grunt/grunt_dead" />
</HealthRatioEvents>
<ExplosionDeaths>
<GibEvent minExplosionDamage="200" probability="0.5" event="aliengrunt_gib" bone="jellyBone" /> <!-- Trigger event, and hide actor -->
<NonGibEvent event="jelly_boiling_explode" bone="jellyBone" material="Objects/characters/alien/grunt/grunt_dead" />
</ExplosionDeaths>
<MikeDeath>
<Destruction event="jelly_boiling_explode" bone="jellyBone" />
<Attachment name="jelly_destroyed_mike_attach" object="Objects/characters/alien/grunt/jelly_destroyed_mike.cdf" animation="jelly_destroyed_mike" alphaTestFadeOutDelay="0.85" alphaTestFadeOutTimeOut="0.25" />
</MikeDeath>
</BodyDestructibility>
Contains a list of Bones and Bone Attachments that can be destroyed. Each part has a certain amount of health points - when they are depleted a Destruction Event is triggered.
The following parameters are available:
Contains a list of Destruction Events that can be triggered by destroyed body parts or actor health thresholds being crossed.
Each event has a enabled/disabled state and can only be triggered if enabled. Once triggered an event will be disabled.
The following parameters are available:
Contains a list of Destruction Events which will happen as the health of the character reaches certain levels.
The following parameters are available:
When a character dies by an explosion, two different events can be triggered.
The mike death block is a special destruction event for Crysis2. This events triggers a destruction event at a bone location, and additionally it spawns and attaches an extra animated chr to the base character.
Additionally some alpha blend operations are done in the attached chr material.