Skip to content
Engels Quintero edited this page Nov 30, 2024 · 7 revisions
public enum ModDataType : int
{
    /// <summary>
    /// Advanced Material
    /// </summary>
    ModDataMtrl = 0x00000000,

    ModDataTexAni = 0x00010000,
    ModDataMultiTex = 0x00010001,
    ModDataMultiTexRev = 0x00010002,

    ModDataParticle = 0x00030000,

    ModDataEnvMap = 0x00040000,
    ModDataBumpEnv = 0x00040001,

    /// <summary>
    /// Sound Config
    /// </summary>
    ModDataSound = 0x00050000,

    /// <summary>
    /// Dynamic Vertex Config
    /// </summary>
    ModDataDyVertex = 0x00060000,

    /// <summary>
    /// Dynamic Joint Config
    /// </summary>
    ModDataDyJoint = 0x00060001,

    /// <summary>
    /// Dynamic Lattice Config
    /// </summary>
    ModDataDyLattice = 0x00060002,

    ModDataProgEquipPow = 0x00070000,
}
// IModData
4   float   Float0
4   int     Int0
4   int     Int1
4   int     JMXVBMT_MtrlIdx // -1 = Apply to all materials
4   int     Int3
4   int     Int4
1   byte    Byte0
1   byte    Byte1
1   byte    Byte2
1   byte    Byte3

"Dy(namic)Joint"

// ModDataDyJoint : IModData
No additional data

"Dy(namic)Lattice"

//ModDataDyLattice : IModData
No additional data

"Dy(namic)Vertex"

//ModDataDyVertex : IModData
No additional data

"Mtrl"

//ModDataMtrl : IModData
4   uint    length       //length in ms
4   uint    flag         //4 = Curve
4   uint    unkUInt7

4   uint    gradientKeyCount
for (int i = 0; i < gradientKeyCount; i++)
{
    4   uint    key.Time    //in ms
    16  Color4  key.Value
}

if(flag & 4)
{
    4   uint    curveKeyCount
    for (int i = 0; i < curveKeyCount; i++)
    {
        4   uint    key.Time    //in ms
        4   float   key.Value
    }
}

4   uint    unkUInt8
4   uint    unkUInt9
4   uint    unkUInt10
4   uint    unkUInt11

//as 16 byte struct -> Color4?, Vector4?, Quaternion?
{
   4   uint    unkUInt12
   4   uint    unkUInt13
   4   uint    unkUInt14
   4   uint    unkUInt15
}

4   uint    unkUInt16

"MultiTex"

//ModDataMultiTex : IModData

4   uint    unkUInt5
4   uint    Texture.Length
*   string  Texture             //.ddj
4   uint    unkUInt6

"MultiTexRev"

//ModDataMultiTexRev : IModData

4   uint    unkUInt5
4   uint    Texture.Length
*   string  Texture             //.ddj
4   uint    unkUInt6

"Particle"

//ModDataParticle : IModData
4   uint    particleCount
for (int i = 0; i < particleCount; i++)
{
    4   uint    particle.IsRelativeToOrigin       //indicates position pivot

    4   uint    particle.File.Length
    *   string  particle.File           //.efp


    4   uint    particle.Bone.Length
    *   string  particle.Bone
    12  Vector3 particle.Position       //relative to origin or bone if present

    4   uint    particle.BirthTime           // in ms
    
    // Initial settings?
    1   byte    particle.unkByte0
    1   byte    particle.unkByte1           // 1 = Night time only
    1   byte    particle.unkByte2
    1   byte    particle.unkByte3
    if(particle.unkByte3 == 1)
    {
        12  Vector3 particle.unkVector // initial velocity?
    }    
}

ProgEquipPow"

//ModDataProgEquipPow : IModData
No additional data

"Sound"

//ModDataSound : IModData
//(%s) m_pSndSet->Tracks.size()(%d) <= MAX_SOUND_TRACK_PER_ANI
4   uint    nSndSetNum
if(nSndSetNum <= 0)
    return;

//ModDataSound::ReadConfig (for the 3D audio source?)
{
    4   int    pSndConfig.Flag        // see DSBCAPS.dwFlag (https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ee416818(v=vs.85))
    4   int    pSndConfig.Int6
    4   int    pSndConfig.Int7

    4   float   pSndConfig.Float0   //10
    4   float   pSndConfig.Float1   //100

    4   int    pSndConfig.Int8

    //read as 16 byte struct -> Color4?, Vector4?, Quaternion?
    4   int    pSndConfig.Int9
    4   int    pSndConfig.Int10
    4   int    pSndConfig.Int11
    4   int    pSndConfig.Int12

    4   int    pSndConfig.Int13
}

for (int i = 0; i < nSndSetNum; i++)
{
    4   uint    pSndSet.Name.Length
    *   string  pSndSet.Name                                //default

    4   uint    nTrackNum                  
    //MAX_SOUND_TRACK_PER_ANI = 15
    //ASSERT(nTrackNum >= 0 && nTrackNum <= MAX_SOUND_TRACK_PER_ANI)
    for (int i = 0; i < nTrackNum; i++)
    {
        4   uint    hasValue
        if(hasValue != 1)
            continue;
        
        4   uint    pSndTrack.File.Length
        *   string  pSndTrack.File                          //.wav
        
        4   uint    pSndTrack.KeyTime                       //in ms 

        4   uint    pSndTrack.Event.Length
        *   string  pSndTrack.Event
    }
}

"TexAni"

//ModDataTexAni : IModData

4   uint    unkUInt5
4   uint    unkUInt6
4   uint    unkUInt7
4   uint    unkUInt8
4   uint    unkUInt9

64  Matrix  AnimationMatrix                                 //vss2.c -> VSC_TEXTUREANI_MATRIX

"EnvMap"

//ModDataEnvMap : IModData
4   uint   unkUInt5
4   uint   unkUInt6
4   uint   unkUInt7
4   uint   unkUInt8

"BumpEnv"

//ModDataBumpEnv : ModDataEnvMap
4   float   unkFloat1
4   float   unkFloat2
4   float   unkFloat3
4   float   unkFloat4
4   float   unkFloat5
4   float   unkFloat6

4   uint    textureCount
for (int i = 0; i < textureCount; i++)
{
    1   byte    hasValue
    if(hasValue)    
    {
        //BumpData
        4   uint    texture.Length
        *   string  texture                 //.ddj
    }
}
Clone this wiki locally