Let me tell you how to fix RK-s-Explosions Mod on the latest FAF game
-
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. -
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) -
Nice!