As we all know, RK-s-Explosions Mod is the coolest explosion effects mod for FA, but it doesn't work on the latest version of faf now. Since I can't contact with the author (I'm a Chinese player so I can't use any common social programs like x, telegram or gmail).
Without the author's permission, I won't post the moded files, but I will tell you how to make it work on the latest 3812 version of the game by simply modifying a lua file.
Let me tell you how to fix RK-s-Explosions Mod on the latest FAF game
First, you should get the newest mod from github(Not FAF, the newest version hasn't be uploaded) : https://github.com/RK4000/RK-s-Explosions/releases
And then, you must rename the mod folder name from ''RK-s-Explosions-13'' to ''rks_explosions'', to make most of effects work.(Because the path of most effects in lua is still "rks_explosions", not "RK-s-Explosions-13")
Then, let's go to the FAF github repository to find a key file:
https://github.com/FAForever/fa/blob/develop/lua/defaultexplosions.lua
Download it and compare it to rks_explosions\hook\lua\defaultexplosions.lua;
We can see that the contents of the function “CreateScalableUnitExplosion” have changed considerably. That is why the mod doesn't work properly.
A simple solution is to overwrite the defaultexplosions.lua file in the mod with the same file in FAF, and then using your text editor, modify"function CreateScalableUnitExplosion "to the following form:
function CreateScalableUnitExplosion(unit, debrisMultiplier, circularDebris)
debrisMultiplier = debrisMultiplier or 1
circularDebris = circularDebris or false
if unit and (not IsDestroyed(unit)) then
if IsUnit(unit) then
-- cache blueprint values
local blueprint = EntityGetBlueprint(unit)
local sx = blueprint.SizeX or 1
local sy = blueprint.SizeY or 1
local sz = blueprint.SizeZ or 1
-- cache stats
local army = unit.Army
local boundingXZRadius = 0.25 * (sx + sz)
local boundingXYZRadius = 0.166 * (sx + sy + sz)
local volume = sx * sy * sz
local layer = unit.Layer
-- data for emitters / shaking
local baseEffects = false
local environmentEffects = false
local shakeTimeModifier = 0
local shakeMaxMul = 1
if layer == 'Land' then
-- determine land effects
if boundingXZRadius < 1.1 then
baseEffects = NEffectTemplate.ExplosionSmallest
elseif boundingXZRadius > 3.75 then
-- large units cause camera to shake
baseEffects = NEffectTemplate.ExplosionSmall
ShakeTimeModifier = 1.0
ShakeMaxMul = 0.25
else
baseEffects = NEffectTemplate.ExplosionSmaller
end
-- environment effects (splat / decal creation)
local position = EntityGetPosition(unit)
local scorchRotation = 6.28 * Random()
local scorchDuration = 200 + 150 * Random()
local scorchLOD = 300 + 300 * Random()
if boundingXZRadius > 1.2 then
CreateDecal(
position,
scorchRotation,
UpvaluedScorchDecalTextures[Random(1, ScorchDecalTexturesN)],
'',
'Albedo',
boundingXZRadius,
boundingXZRadius,
scorchLOD,
scorchDuration,
army
)
else
CreateSplat(
position,
scorchRotation,
UpvaluedScorchSplatTextures[Random(1, ScorchSplatTexturesN)],
boundingXZRadius,
boundingXZRadius,
scorchLOD,
scorchDuration,
army
)
end
elseif layer == 'Air' then
-- determine air effects
if boundingXZRadius < 1.1 then
baseEffects = ExplosionSmallAir
elseif boundingXZRadius > 7 then
-- large units cause camera to shake
baseEffects = ExplosionLarge
ShakeTimeModifier = 1.0
ShakeMaxMul = 0.25
else
baseEffects = ExplosionMedium
end
elseif layer == 'Water' then
-- determine water effects
if boundingXZRadius < 2 then
baseEffects = ExplosionSmallWater
elseif boundingXZRadius > 3.6 then
-- large units cause camera to shake
baseEffects = ExplosionMediumWater
ShakeTimeModifier = 1.0
ShakeMaxMul = 0.25
else
baseEffects = ExplosionMediumWater
end
-- environment effects
if boundingXZRadius < 1.0 then
environmentEffects = Splashy
end
end
-- create the emitters
if baseEffects then
CreateEffectsOpti(unit, army, baseEffects)
end
if environmentEffects then
CreateEffectsOpti(unit, army, environmentEffects)
end
-- create the flash
CreateLightParticle(
unit,
-1,
army,
boundingXZRadius * (2 + 1 * Random()), -- (2, 3)
10.5 + 4 * Random(), -- (10.5, 14.5)
'glow_03',
'ramp_flare_02'
)
-- determine debris amount
local amount = debrisMultiplier * MathMin(Random(1 + (boundingXYZRadius * 6), (boundingXYZRadius * 15)) , 100)
-- determine debris velocity range
local velocity = 2 * boundingXYZRadius
local hVelocity = 0.5 * velocity
-- determine heading adjustments for debris origin
local heading = -1 * unit:GetHeading() -- inverse heading because Supreme Commander :)
local mch = MathCos(heading)
local msh = MathSin(heading)
-- make it slightly smaller so that debris originates from mesh and not from the air
sx = 0.8 * sx
sy = 0.8 * sy
sz = 0.8 * sz
-- create debris
for i = 1, amount do
-- get some random numbers
local r1, r2, r3 = Random(), Random(), Random()
-- position somewhere in the size of the unit
local xpos = r1 * sx - (sx * 0.5)
local ypos = 0.1 * sy + 0.5 * r2 * sy
local zpos = r3 * sz - (sz * 0.5)
-- launch them into space
local xdir, ydir, zdir
if circularDebris then
xdir = velocity * r1 - (hVelocity)
ydir = velocity * r2 - (hVelocity)
zdir = velocity * r3 - (hVelocity)
else
xdir = velocity * r1 - (hVelocity)
ydir = boundingXYZRadius + velocity * r2
zdir = velocity * r3 - (hVelocity)
end
-- choose a random blueprint
local bp = ProjectileDebrisBps[MathMin(ProjectileDebrisBpsN, Random(1, i))]
EntityCreateProjectile(
unit,
bp,
xpos * mch - zpos * msh, -- adjust for orientation of unit
ypos,
xpos * msh + zpos * mch, -- adjust for orientation of unit
xdir * mch - zdir * msh, -- adjust for orientation of unit
ydir,
xdir * msh + zdir * mch -- adjust for orientation of unit
)
end
-- do camera shake
EntityShakeCamera(unit, 30 * boundingXZRadius, boundingXZRadius * shakeMaxMul, 0, 0.5 + shakeTimeModifier)
end
end
end
And, you need to add the following definition to the beginning of the moded defaultexplosions.lua file:
"local SDEffectTemplate = import('/mods/rks_explosions/lua/SDEffectTemplates.lua')
local NEffectTemplate = import('/mods/rks_explosions/lua/NEffectTemplates.lua')"
Then you'll see that the mod will almost work (but there are still some units with incorrect fire effects, such as the Experimental Bomber, which will require some more detailed modifications, which I'm still working on)