These are the binary files that the game uses to define particle effects.
Technical File Info
//--------------------------------------
//--- 010 Editor v2.1.3 Binary Template
//
// File: LH .mfx File
// Author: Glen Rickey (based primarily on research by XImplosionX)
// Revision: 0.01
// Purpose: To parse LH compiled particle effect files .mfx
//--------------------------------------
struct mfxFile {
struct head
{
int unk;
int16 sysCount;
int16 unknown;
int sysSize;
struct bitflag
{
ubyte flag1 :1 ;
ubyte flag1 :1 ;
ubyte flag1 :1 ;
ubyte flag1 :1 ;
ubyte flag1 :1 ;
ubyte flag1 :1 ;
ubyte flag1 :1 ;
ubyte flag1 :1 ;
} flags[4];
} mfxHead;
struct sys
{
int sysNameIndex;
float ScaleX;
float ScaleY;
float ScaleZ;
ubyte flags1[4];
// Particles
float ParticleLifeSecs;
float ParticleSystemOffsetX;
float ParticleSystemOffsetY;
float ParticleSystemOffsetZ;
float GravityFactor;
float AirResistance;
float ParticleAccelX;
float ParticleAccelY;
float ParticleAccelZ;
float InitialRotationX;
float InitialRotationY;
float InitialRotationZ;
float RotationAxisX; //or CustomDirectionX?
float RotationAxisY; //or CustomDirectionY?
float RotationAxisZ; //or CustomDirectionZ?
float RotMinAngleSpeed;
float RotMaxAngleSpeed;
float ParticleBounce;
ubyte flags2[4];
//CenterParam
int CenterParamIndex;
struct centerParam
{
float Radius;
float RotateSpeed;
int32 Type;
} cParam[3];
float AttractorInfluenceRadius;
float AttractorInfluenceForce;
float AttractorInfluenceType;
float EmitterSize;
int32 EmitterType;
struct {
ubyte UseEmitterLifeSecs;
ubyte unk[3];
} flags3;
float EmitterLifeSecs;
float EmitterStartTime;
float ParticlesPerSec;
float MinSpeed;
float MaxSpeed;
float CustDirX;
float CustDirY;
float CustDirZ;
float NonUniformScaleX;
float NonUniformScaleY;
float NonUniformScaleZ;
int32 ParticlesToStart;
int32 ParticlesToStartRand;
int32 AnglePerturbationInt;
int32 EmitterPosParamIndex;
int32 DirectionParamNameIndex;
int32 SpriteNameIndex;
int32 FadeInEndInt;
int32 FadeOutBeginInt;
ubyte flags4[4];
float AlphaFadeMinimum;
float SizeFadeMinimum;
float StartRenderSize;
float EndRenderSize;
#include "ColorRGBA.bt"
color StartColour;
color MidColour;
color EndColour;
struct {
ubyte UseStartColour;
ubyte UseMidColour;
ubyte UseEndColour;
ubyte pad;
}ColourFlags;
int32 BlendMode;
int32 BlendOp;
int32 SpriteFlags;
int32 TrailNameIndex;
int32 TrailBlendMode;
int32 TrailBlendOp;
float TrailWidth;
int32 TrailLengthInt;
int32 BankNameIndex;
ubyte flags5[4];
} Sys[mfxHead.sysCount];
ubyte pad;
struct SysStrings
{
char sysName[];
char SpriteName[];
char TrailName[];
char EmitterPosParam[];
char DirectionParamName[];
// char DecalEmitterName[];
} Strings[mfxHead.sysCount] <optimize=false>;
} MFX;