EvilEngine/SHRP: Difference between revisions

Content added Content deleted
No edit summary
No edit summary
Line 12: Line 12:
This asset defines data for shrapnel.
This asset defines data for shrapnel.


==Format==
==Format (Headers)==
===zShrapnelAsset===
The asset data starts with a 0xC byte header:
The asset data starts with a 0xC byte header:

{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
|-
| 0x00 || int || Amount of SHRP entries
| 0x00 || int || '''fassetCount''' || Amount of frag entries
|-
|-
| 0x04 || [[AssetID]] || This asset
| 0x04 || [[AssetID]] || '''sharpnelID''' || This asset
|-
|-
| 0x08 || int || Unknown, always 0
| 0x08 || int || colspan="2" | Unknown, always 0
|}
|}


After that, there's an array of shrapnel entries, as defined in the header. Each entry is of variable size:
After that, there's an array of shrapnel entries, as defined in the header. Each entry is of variable size:


* Type 1 (group)
* '''Type 1 (Group)'''
* Type 2 (shrapnel)
* '''Type 2 (Shrapnel)'''
* Type 3 (particle) (BFBB) - 0x1D4
* '''Type 3 (Particle)'''
** BFBB - 0x1D4
* Type 3 (particle) (Movie) - 0x1E0
** TSSM - 0x1F8
* Type 4 (projectile) (BFBB) - 0x90
* Type 4 (projectile) (Movie) - 0x110
* '''Type 4 (Projectile)'''
* Type 5 (lightning) (BFBB) - 0x68
** BFBB - 0x90
** TSSM - 0x110
* Type 5 (lightning) (Movie) - 0x70
* Type 6 (sound) (BFBB) - 0x4C
* '''Type 5 (Lightning)'''
** BFBB - 0x68
* Type 6 (sound) (Movie) - 0x44
** TSSM - 0x70
* Type 7 (shockwave)
* Type 8 (explosion) (Movie) - 0x48
* '''Type 6 (Sound)'''
** BFBB - 0x4C
* Type 9 (distortion) - 0x5C
* Type 10 (fire) - 0x5C
** TSSM - 0x44
* '''Type 7 (Shockwave)'''
** TSSM - 0x48
* '''Type 8 (Explosion)'''
** TSSM - 0x48
* '''Type 9 (Distortion)'''
** TSSM - 0x5C
* '''Type 10 (Fire)'''
** TSSM - 0x5C


===zFragAsset===
The entries have the following structure:
The entries have the following structure:

{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
|-
| 0x00 || int || Type
| 0x00 || int || '''type''' ||
* 0 = eFragInactive
* 1 = eFragGroup
* 2 = eFragShrapnel
* 3 = eFragParticle
* 4 = eFragProjectile
* 5 = eFragLightning
* 6 = eFragSound
* 7 = eFragShockwave
* 8 = eFragExplosion
* 9 = eFragDistortion
* 10 = eFragFire
|-
|-
| 0x04 || [[AssetID]] || UnknownID
| 0x04 || [[AssetID]] || '''id''' ||
|-
|-
| 0x08 || int || '''parentID1'''
| 0x08 || [[AssetID]] || '''parentID''' ||
|-
|-
| 0x0C || int || '''parentID2'''
| 0x0C || [[AssetID]] || '''parentID2''' ||
|-
|-
| 0x10 || float || '''lifetime'''
| 0x10 || float || '''lifetime''' ||
|-
|-
| 0x14 || float || '''delay'''
| 0x14 || float || '''delay''' ||
|}
|}


=== Type 3 (BFBB) ===
===zFragLocation===
Every entry/frag (except shockwave) has this header at a different position.<br>
{| class="wikitable"
Sometimes it only has 0xCD padding bytes.
! Offset !! Type !! Description

{| class="wikitable"
! Offset !! Type !! Variable !! Description
|-
|-
| 0x18 || zFragLocType || '''type'''
| 0x00 || uint || type ||
* 0 = eFragLocBone
* 1 = eFragLocBoneUpdated
* 2 = eFragLocBoneLocal
* 3 = eFragLocBoneLocalUpdated
* 4 = eFragLocTag
* 5 = eFragLocTagUpdated
|-
|-
! colspan="4" | [Frag] Bone only
| 0x1C || int || '''index'''
|-
|-
| 0x20 || [[Vector3]] || '''Offset'''
| 0x04 || int || '''index''' ||
|-
|-
| 0x2C || byte[0x10] || Padding? (all bytes are 0xCD)
| 0x08 || [[Vector3]] || '''offset''' ||
|-
|-
| 0x0C || uint[4] || colspan="2" | Padding - 0xCD bytes, 4-byte alignment
| 0x3C || zFragLocType || '''type2'''
|-
|-
! colspan="4" | [Model] Tag only
| 0x40 || int || '''index2'''
|-
|-
| 0x44 || [[Vector3]] || '''Offset2'''
| 0x04 || [[Vector3]] || '''v''' ||
|-
|-
| 0x10 || uint || '''matidx''' ||
| 0x50 || byte[0x144] || Padding? (all bytes are 0xCD)
|-
|-
| 0x14 || float[4] || '''wt''' || Always 0xCD padding bytes?
| 0x194 || short || Unknown
|-
|-
! colspan="4" |
| 0x198 || short || Unknown
|-
|-
| 0x24 || float || '''rand_radius''' || '''Not present in BFBB'''
| 0x19C || byte[0x30] || Padding? (all bytes are 0xCD)
|-
| 0x1CC || [[AssetID]] || [[PARE]]
|-
| 0x1D0 || int || Unknown
|}
|}


===Type 3 (Movie) ===
==Format (Frags)==
===Type 3 - Particle===

====BFBB====
{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
|-
! colspan="3" | Type 3
! 0x18 || colspan="3" | [[#zFragLocation|zFragLocation]] source
|-
|-
! 0x3C || colspan="3" | [[#zFragLocation|zFragLocation]] vel
| 0x18 || zFragLocType || '''type'''
|-
|-
| 0x60 || uint[91] || colspan="2" | Padding - 0xCD bytes, 4-byte alignment
| 0x1C || int || '''index'''
|-
|-
| 0x20 || [[Vector3]] || '''Offset'''
| 0x1CC || [[AssetID]] || '''parEmitterID''' ||
|-
|-
| 0x1D0 || uint || '''parEmitter''' || Always 0
| 0x2C || byte[0x10] || Padding? (all bytes are 0xCD)
|}

====Movie====
{| class="wikitable"
! Offset !! Type !! Variable !! Description
|-
|-
! 0x18 || colspan="3" | [[#zFragLocation|zFragLocation]] source
| 0x3C || float || '''rand_radius'''
|-
|-
! 0x40 || colspan="3" | [[#zFragLocation|zFragLocation]] vel
| 0x40 || zFragLocType || '''type2'''
|-
|-
| 0x44 || int || '''index2'''
| 0x68 || byte[388] || '''dummy''' ||
|-
|-
| 0x48 || [[Vector3]] || '''Offset2'''
| 0x1EC || uint || '''dummy0''' || ?
|-
|-
| 0x54 || byte[0x10] || Padding? (all bytes are 0xCD)
| 0x1F0 || [[AssetID]] || [[PARE]]
|-
|-
| 0x58 || float || '''rand_radius2'''
| 0x1F4 || uint || '''dummy1''' || ?
|-
| 0x5C || byte[0x138] || Padding? (all bytes are 0xCD)
|-
| 0x194 || short || Unknown
|-
| 0x196 || short || Unknown
|-
| 0x198 || byte[0x48] || Padding? (all bytes are 0xCD)
|-
| 0x1E0 || byte || Unknown
|-
| 0x1E1 || byte[3] || padding?
|-
| 0x1E4 || [[Asset ID]] || [[PARE]]
|-
| 0x1E8 || int || null
|}
|}


=== Type 4 (BFBB) ===
===Type 4 (Projectile)===
====BFBB====

{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
|-
| 0x18 || [[AssetID]] || [[MODL]]
| 0x18 || [[AssetID]] || '''modelInfoID''' || [[MODL]]
|-
|-
| 0x1C || RpAtomic || '''modelFile'''
| 0x1C || uint|| '''modelFile''' || Always 0
|-
|-
! 0x20 || colspan="3" | [[#zFragLocation|zFragLocation]] launch
| 0x20 || zFragLocType || '''type'''
|-
|-
! 0x44 || colspan="3" | [[#zFragLocation|zFragLocation]] vel
| 0x24 || int || '''index'''
|-
|-
| 0x28 || float || '''Offset X''' - Offset the Shrapnel spawns at
| 0x68 || float || '''bounce''' ||
|-
|-
| 0x2C || float || '''Offset Y'''
| 0x6C || int || '''maxbounces''' ||
|-
|-
| 0x30 || float || '''Offset Z'''
| 0x70 || uint || '''flags''' ||
|-
|-
| 0x74 || [[AssetID]] || '''childID''' || [[SHRP]] - Child shrapnel ID. Always 0?
| 0x34 || byte[0x34] || Padding? (all bytes are 0xCD)
|-
|-
| 0x68 || float || '''bounce'''
| 0x78 || zSharpnelAsset* || '''child''' || Always 0?
|-
|-
| 0x6C || int || '''maxbounces'''
| 0x7C || float || '''minScale''' ||
|-
|-
| 0x70 || int || '''flags'''
| 0x80 || float || '''maxScale''' ||
|-
|-
| 0x74 || [[AssetID]] || [[SHRP]] - Child shrapnel ID
| 0x84 || [[AssetID]] || '''scaleCurveID''' || Always 0?
|-
|-
| 0x78 || [[AssetID]] || [[SHRP]] - Child shrapnel2 ID
| 0x88 || xCurveAsset* || '''scaleCurve''' || Always 0?
|-
|-
| 0x7C || float || '''minScale'''
| 0x8C || float || '''gravity''' ||
|-
| 0x80 || float || '''maxScale'''
|-
| 0x84 || [[AssetID]] || '''scaleCurveID'''
|-
| 0x88 || [[AssetID]] || '''scaleCurve'''
|-
| 0x8C || float || '''Gravity'''
|}
|}


=== Type 4 (Movie) ===
====Movie====

{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
|-
| 0x18 || [[AssetID]] || [[MODL]]
| 0x18 || [[AssetID]] || '''modelInfoID''' || [[MODL]]
|-
|-
| 0x1C || RpAtomic* || '''modelFile'''
| 0x1C || RpAtomic* || '''modelFile''' || Always 0?
|-
|-
! 0x20 || colspan="3" | [[#zFragLocation|zFragLocation]] launch
| 0x20 || zFragLocType || '''type'''
|-
|-
! 0x48 || colspan="3" | [[#zFragLocation|zFragLocation]] vel
| 0x24 || int || '''index'''
|-
|-
! 0x70 || colspan="3" | [[#zFragLocation|zFragLocation]] velPlusMinus
| 0x28 || float || '''Offset X''' - Offset the Shrapnel spawns at
|-
|-
! 0x98 || colspan="3" | [[#zFragLocation|zFragLocation]] rot
| 0x2C || float || '''Offset Y'''
|-
|-
! 0xC0 || colspan="3" | [[#zFragLocation|zFragLocation]] rotPlusMinus
| 0x30 || float || '''Offset Z'''
|-
|-
| 0xE8 || float || '''bounce''' ||
| 0x34 || byte[0x10] || Padding? (all bytes are 0xCD)
|-
|-
| 0x44 || float || '''rand_radius'''
| 0xEC || int || '''maxBounces''' ||
|-
|-
| 0x48 || zFragLocType || '''type2'''
| 0xF0 || int || '''flags''' ||
|-
|-
| 0xF4 || [[AssetID]] || '''childID''' || [[SHRP]] - Child shrapnel ID. Always 0?
| 0x4C || int || '''index2'''
|-
|-
| 0x50 || [[Vector3]] || '''Offset2'''
| 0xF8 || zShrapnelAsset* || '''child''' || Always 0?
|-
|-
| 0xFC || float || '''minScale''' ||
| 0x5C || byte[0x3C] || Padding? (all bytes are 0xCD)
|-
|-
| 0x98 || zFragLocType || '''type3'''
| 0x100 || float || '''maxScale''' ||
|-
|-
| 0x9C || int || '''index3'''
| 0x104 || [[AssetID]] || '''scaleCurveID''' || Always 0?
|-
|-
| 0xA8 || [[Vector3]] || '''Offset3'''
| 0x108 || xCurveAsset* || '''scaleCurve''' || Always 0?
|-
|-
| 0x10C || float || '''Gravity''' ||
| 0xAC || byte[0x3C] || Padding? (all bytes are 0xCD)
|-
| 0xE8 || float || '''Bounce'''
|-
| 0xEC || int || '''maxBounces'''
|-
| 0xF0 || int || '''Flags'''
|-
| 0xF4 || [[AssetID]] || [[SHRP]] - Child shrapnel ID
|-
| 0xF8 || [[AssetID]] || [[SHRP]] - Child shrapnel2 ID
|-
| 0xFC || float || '''minScale'''
|-
| 0x100 || float || '''maxScale'''
|-
| 0x104 || [[AssetID]] || '''scaleCurveID'''
|-
| 0x108 || [[AssetID]] || '''scaleCurve'''
|-
| 0x10C || float || '''Gravity'''
|}
|}


===Type 5 (BFBB)===
===Type 5 (Lightning)===
====BFBB====

{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
|-
! 0x18 || colspan="3" | [[#zFragLocation|zFragLocation]] start
| 0x18 || zFragLocType || '''type'''
|-
|-
! 0x3C || colspan="3" | [[#zFragLocation|zFragLocation]] end
| 0x1C || int || '''index'''
|-
|-
| 0x20 || [[Vector3]] || '''Offset'''
| 0x60 || uint || '''startParentID''' || all bytes are 0xCD?
|-
|-
| 0x2C || byte[0x10] || Padding? (all bytes are 0xCD)
| 0x64 || uint || '''endParentID''' || all bytes are 0xCD?
|-
| 0x3C || zFragLocType || '''type2'''
|-
| 0x40 || int || '''index2'''
|-
| 0x44 || [[Vector3]] || '''Offset2'''
|-
| 0x50 || byte[0x10] || Padding? (all bytes are 0xCD)
|-
| 0x60 || int || '''startParentID''' (all bytes are 0xCD?)
|-
| 0x64 || int || '''endParentID''' (all bytes are 0xCD?)
|}
|}


===Type 5 (Movie)===
====Movie====

{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
|-
! 0x18 || colspan="3" | [[#zFragLocation|zFragLocation]] start
| 0x18 || zFragLocType || '''type'''
|-
|-
! 0x40 || colspan="3" | [[#zFragLocation|zFragLocation]] end
| 0x1C || int || '''index'''
|-
|-
| 0x20 || [[Vector3]] || '''Offset'''
| 0x68 || uint || '''startParentID''' || all bytes are 0xCD?
|-
|-
| 0x2C || byte[0x10] || Padding? (all bytes are 0xCD)
| 0x6C || uint || '''endParentID''' || all bytes are 0xCD?
|-
| 0x3C || float || '''rand_radius'''
|-
| 0x40 || zFragLocType || '''type2'''
|-
| 0x44 || int || '''index2'''
|-
| 0x48 || [[Vector3]] || '''Offset2'''
|-
| 0x54 || byte[0x10] || Padding? (all bytes are 0xCD)
|-
| 0x64 || float || '''rand_radius2'''
|-
| 0x68 || int || '''startParentID''' (all bytes are 0xCD?)
|-
| 0x6C || int || '''endParentID''' (all bytes are 0xCD?)
|}
|}


===Type 6 (BFBB)===
===Type 6 (Sound)===
====BFBB====

{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
| 0x18 || [[AssetID]] || [[SND]]/[[SNDS]]
|-
| 0x1C || zFragLocType || '''type'''
|-
| 0x20 || int || '''index'''
|-
|-
| 0x24 || [[Vector3]] || '''Offset'''
| 0x18 || [[AssetID]] || '''assetID''' || [[SND]]/[[SNDS]]
|-
|-
! 0x1C || colspan="3" | [[#zFragLocation|zFragLocation]] source
| 0x30 || byte[0x10] || Padding? (all bytes are 0xCD)
|-
|-
| 0x40 || float || '''volume'''
| 0x40 || float || '''volume''' ||
|-
|-
| 0x44 || float || '''innerRadius'''
| 0x44 || float || '''innerRadius''' ||
|-
|-
| 0x48 || float || '''outerRadius'''
| 0x48 || float || '''outerRadius''' ||
|}
|}


===Type 6 (Movie)===
====Movie====

{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
|-
| 0x18 || [[AssetID]] || [[SND]]/[[SNDS]]
| 0x18 || [[AssetID]] || '''assetID''' || [[SGRP]]
|-
|-
! 0x1C || colspan="3" | [[#zFragLocation|zFragLocation]] source
| 0x1C || zFragLocType || '''type'''
|-
| 0x20 || int || '''index'''
|-
| 0x24 || [[Vector3]] || '''Offset'''
|-
| 0x30 || byte[0x10] || Padding? (all bytes are 0xCD)
|-
| 0x40 || float || '''rand_radius'''
|}
|}


=== Type 7 ===
===Type 7 (Shockwave)===

{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
|-
| 0x18 || [[AssetID]] || [[MODL]]
| 0x18 || [[AssetID]] || '''modelInfoID''' || [[MODL]]
|-
|-
| 0x1C || float || '''birthRadius'''
| 0x1C || float || '''birthRadius''' ||
|-
|-
| 0x20 || float || '''deathRadius'''
| 0x20 || float || '''deathRadius''' ||
|-
|-
| 0x24 || float || '''birthVelocity'''
| 0x24 || float || '''birthVelocity''' ||
|-
|-
| 0x28 || float || '''deathVelocity'''
| 0x28 || float || '''deathVelocity''' ||
|-
|-
| 0x2C || float || '''birthSpin'''
| 0x2C || float || '''birthSpin''' ||
|-
|-
| 0x30 || float || '''deathSpin'''
| 0x30 || float || '''deathSpin''' ||
|-
|-
| 0x34 || [[Color]] || '''birthColor'''
| 0x34 || [[Vector4]] || '''birthColor''' ||
|-
|-
| 0x44 || [[Color]] || '''deathColor'''
| 0x44 || [[Vector4]] || '''deathColor''' ||
|}
|}


=== Type 8 ===
===Type 8 (Explosion)===

{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
|-
| 0x18 || [[AssetID]] || Unknown
| 0x18 || [[AssetID]]? || '''type''' || Unknown
|-
|-
| 0x1C || zFragLocType || '''type'''
! 0x1C || colspan="3" | [[#zFragLocation|zFragLocation]]
|-
|-
| 0x20 || int || '''index'''
| 0x44 || uint || '''flags''' ||
|-
| 0x24 || [[Vector3]] || '''Offset'''
|-
| 0x30 || byte[0x10] || Padding? (all bytes are 0xCD)
|-
| 0x40 || float || '''rand_radius'''
|-
| 0x44 || int || '''flags'''
|}
|}


=== Type 9 ===
===Type 9 (Distortion)===

{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
|-
| 0x18 || [[AssetID]] || Unknown
| 0x18 || [[AssetID]]? || '''type''' ||
|-
|-
| 0x1C || zFragLocType || '''type'''
! 0x1C || colspan="3" | [[#zFragLocation|zFragLocation]]
|-
|-
| 0x20 || int || '''index'''
| 0x44 || uint || '''flags''' ||
|-
|-
| 0x2C || [[Vector3]] || '''Offset'''
| 0x48 || float || '''radius''' ||
|-
|-
| 0x4C || float || '''duration''' ||
| 0x30 || byte[0x10] || Padding? (all bytes are 0xCD)
|-
|-
| 0x40 || float || '''rand_radius'''
| 0x50 || float || '''intensity''' ||
|-
|-
| 0x44 || int || '''flags'''
| 0x54 || float || '''freq''' ||
|-
|-
| 0x48 || float || '''radius'''
| 0x58 || float || '''repeat_delay''' ||
|-
| 0x4C || float || '''duration'''
|-
| 0x50 || float || '''intensity'''
|-
| 0x54 || float || '''freq'''
|-
| 0x58 || float || '''repeat_delay'''
|}
|}


=== Type 10 ===
===Type 10 (Fire)===

{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
| 0x18 || zFragLocType || '''type'''
|-
| 0x1C || int || '''index'''
|-
| 0x20 || [[Vector3]] || '''Offset'''
|-
| 0x2C || byte[0x10] || Padding? (all bytes are 0xCD)
|-
|-
! 0x18 || colspan="3" | [[#zFragLocation|zFragLocation]] loc
| 0x3C || float || '''rand_radius'''
|-
|-
| 0x40 || int || '''flags'''
| 0x40 || int || '''flags''' ||
|-
|-
| 0x44 || float || '''radius'''
| 0x44 || float || '''radius''' ||
|-
|-
| 0x48 || float || '''scale'''
| 0x48 || float || '''scale''' ||
|-
|-
| 0x4C || float || '''fuel'''
| 0x4C || float || '''fuel''' ||
|-
|-
| 0x50 || float || '''heat'''
| 0x50 || float || '''heat''' ||
|-
|-
| 0x54 || float || '''damage'''
| 0x54 || float || '''damage''' ||
|-
|-
| 0x58 || float || '''knockback'''
| 0x58 || float || '''knockback''' ||
|}
|}