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!