Credit to Smoke39 (https://smoke39.github.io/turok/fx.html) for the comments on some of these after rotationOffset. There's too many properties to explain! bFadeout // Not used bStopAnimOnImpact // if impacts a floor and onCollideFloor is Bounce or Reflect then stops animating the sprite bOffsetFromFloor // sprite z position += (textureAtlasHeight - (GAME_SCALE * 0.4f)) * drawScale bTextureWrapMirrorWidth // Mirrors sprite horizontally and vertically bTextureWrapMirrorHeight // Not used bDepthBuffer // if set will draw behind objects otherwise will draw in front bActorInstance // Not used bScaleLerp // if is 0 will multiply scale by scaleDest otherwise will add scaleDest bLensFlares // Enable Lens Flare effect. lensFlares // Path to the lens flare. lensFlares = "lensflares/sunflare.klf" bBlood // Blood effects won't spawn if the menu option is set to no blood or actor has the no blood flag set. bAddOffset // The velocity passed into SpawnFx will be added to the initial velocity of this Fx. kActor::SpawnProjectile, kActor::FireProjectile, all Game.SpawnFx except the one that has a velocity param, and kexEmitter's use no velocity. kActor::SpawnFx will use the actors Movement() as the velocity. bNoDirection // Uses no rotation (World forward direction) for translation and offset (including random variants) bFlash // Changes the sunDirection based on the Fx Origin. Adds white color to the sunLightColor and black color to the sunAmbientColor. (only the last Fx that was created with this property will take effect) bProjectile // If this Fx has an owner actor then rotation is set towards the owners target. Also allows more than 200 instances. bDestroyOnWaterSurface // Removes this Fx when it enters or exits the areas water height. If this Fx is a bBullet then will only remove it when velocity.z is less than 0. bStickOnTarget // if collides with an actor then it's position is set to the actors position + half the height of the actor. bBullet // bounces off collided walls/floors if onCollideWall/onCollideFloor is Bounce or Reflect. Also allows more than 200 instances. bWeaponView // Draws in the camera view bFullScreen // Draws to the center of the camera view and forward by GAME_SCALE * 20. bDecalOffset // if drawType is a decal(2) and onCollideWall is not default(0) then the z position will never be lower than floorheight + (GAME_SCALE * 0.1f) otherwise the z position will never be lower than floorheight + 3.413333333333334f. bOffsetFromFloor can still further affect the z position offset after this. bNoSpawnNear // Will not spawn the effect if the squared distance to the camera view is <= (GAME_SCALE * 20) * (GAME_SCALE * 20). You can use noSpawnNearFarDist to set the distance. bNoSpawnFar // Will not spawn the effect if the squared distance to the camera view is >= (GAME_SCALE * 20) * (GAME_SCALE * 20). You can use noSpawnNearFarDist to set the distance. noSpawnNearFarDist // Set a custom squared distance to be used for bNoSpawnNear or bNoSpawnFar bAttachSource // Sets to this Fx's owner position bDrawOnBottom // Will draw the Fx last bSparkle // Not used bCrossFade // Not used bImpactEffect // Not used bRestrictAim // if Fx is a bProjectile then will RestrictAim towards the target by 90 degrees yaw. and will move forward if not in that fov. bNoWallSpawn // if onCollideWall is Destroy(1) then won't spawn impact fx. Bullets won't spawn impact fx and could bounce forever. bNoGroundSpawn // if onCollideFloor is Destroy(1) then won't spawn impact fx. if onCollideFloor is Bounce(3) or Reflect(2) and Fx is a bullet then won't spawn impact fx and could bounce forever. bRetainVelocity // Not used bNoHitSource // Not used bPerPolyCollision // Enables poly collision checks on static meshes if the menu option precise is on. bMuzzleEffect // enables muzzle effect using the cameras view and muzzleOffset property. Lifetime of a muzzle effect is 0.03125 seconds. muzzleOffset // position offset of muzzle effect. mass // used as bounce damping. translationRandomGlobal // scale value of 0 to 1 translationRandom // scales from 0 to 1 how much to apply randomness to the translation. translation // scales from 0 to 1 how much to apply (forwardSpeed + forwardSpeedRandom) to the initial velocity. gravity // Amount to increase the velocities z value every tick. (real value is this value divided by 3072) gravityRandomScale // Random amount applied to gravity. (real value is this value divided by 3072) friction // if on the ground then velocity xy is multiplied by this value. (real friction value is (1.0f - this value)) airFriction // if is not 0.0 then increases the forward velocity of this Fx every tick by this value * GameSpeed. waterFriction // if in water then velocity xy is multiplied by this value. (real waterFriction value is (1.0f - this value)). Afterwards if the Fx z velocity is < 0 then the z velocity is multiplied by 0.905f animFriction // if is not 0.0 and animtype != 6(DrawSingleFrame) then: float af = 1.0f; // final animFriction result used if(animFriction != 0.0f) { float d = 30.0f * (velocity.Length() / animFriction); if(d <= 1.0f) { af = d; } } if(animtype != 6) { frameTime -= ((15.0f * af) * GameSpeed); // if frameTime <= 0 then sprite advances to the next frame. ... } scale // the draw scale of this Fx scaleRandom // random amount applied to the draw scale scaleDest // Used with bScaleLerp scaleDestRandom // random amount applied to scaleDest forwardSpeed // forwardSpeed * finalTranslationValue is the initial velocity forwardSpeedRandom // random amount applied to forwardSpeed offset // starting position offset offsetRandom // random amount applied to offset rotationOffset // radians, clockwise rotationOffsetRandom // random amount applied to rotationOffset rotationSpeed // radians per 1⁄15 seconds, clockwise rotationSpeedRandom // random amount applied to rotationSpeedRandom rotationPivotX // offset from the particles's physical location to render the sprite rotationPivotY // offset from the particles's physical location to render the sprite shader // shader to render the sprite with sprite // sprite to represent the particle with trailFile // Not used trailDefinition_1 // "Trail_TekBow_Crossline_1" (max of 4 trails) trailDefinition_2 // "Trail_TekBow_Crossline_2" trailDefinition_3 // "Trail_TekBow_Crossline_3" trailDefinition_4 // "Trail_TekBow_Crossline_4" instances // number of this fx to spawn instancesRandom // random amount applied to instances recurseLifetime // amount of time until this Fx will no longer spawn any more child Fx. recurseLifetimeRandom // random amount applied to recurseLifetime lifeTime // how long the particle will exist, in 1⁄15 seconds lifeTimeRandom // random amount applied to lifeTime restart // The delay from a random value from 0 to this value (in 1⁄15 seconds). the fx will not tick during this delay. animSpeed // sets frameTime to this value if animType is 2, 3, or 4. (See animFriction for the code to how the frameTime decreases) whiteColor // alters light colors of the sprite blackColor // alters dark colors of the sprite hueRandom // color randomization saturationRandom // color randomization brightnessRandom // color randomization fadeInTime // fade in during first fadeInTime 1⁄15 seconds of lifeTime fadeOutTime // fade out during last fadeOutTime 1⁄15 seconds of lifeTime onCollideActor // 0 = Default, 1 = Destroy, 2 = Reflect (Same as Bounce), 3 = Bounce (Same as Reflect). Other values are undefined. onCollideWall // sector with link or cliff sector with plane y direction >= 0.5 onCollideFloor // same as other 2 but with the floor drawType // 0 = Default, 1 = Flat, 2 = Decal, 3 = Wall, 4 = Surface, 5 = Billboard, 6 = hidden visibilityType // 0 = Close, 1 = Far, 2 = Always, 3 = Invisible animType // 0 = Default, 1 = OneTime, 2 = Loop, 3 = SinWave, 4 = Random, 5 = RandomAndHold, 6 = DrawSingleFrame. Values other than 1-5 will run the onExpire or onWaterExpire events to occur when it reaches the last frame. priority // Not used -----Event Blocks: onImpact // The 10 OnImpact events with each surface type you can have. onExpire // happens when lifeTime runs out, unless underwater onTick // happens continuously, unless underwater onWaterImpact // happens when entering or exiting water. If this Fx is a bBullet then will only be called if velocity.z is less than 0. onWaterExpire // happens instead of onExpire when lifeTime runs out, if underwater onWaterTick // happens continuously instead of onTick while underwater -----Inside event blocks you can define: fx // spawn another effect. fx = "fx/blood.kfx" sound // play a sound. sound = "sounds/shaders/bullet_impact_13.ksnd" damageClass // deal damage, from defs/damageInfo.txt. damageClass = "S_Damage_Target_damage_10". ignored by onWaterImpact.