Page 1 of 1

Frozen Ford V2

Posted: 04 Oct 2021, 21:29
by Beherith
A new map, this time, with the guest appearance of skyreflectmodtex. The normals rotation for skyreflectmodtex (along with the skycube reflecttex rendering) was fixed in the engine, so for best results, play this map on the BAR version for now, until ivand's improvements propagate upstream.

Once again, pure world machine + springboard, sources included!

Oh its a 12x12 1v1 map btw.

Image

Image

https://springfiles.springrts.com/?type ... 5eeb2b58a0

Re: Frozen Ford V2

Posted: 09 Oct 2021, 18:10
by PicassoCT
This needs a river freezing over, shattering under artillery. This needs weeping pathing engine devs in the corner..

Code: Select all

function gadget:GetInfo()
    return {
        name = "River Freeze and break",
        desc = " freezes all water (teraforms it up) and breaks it on bullet impact",
        author = "Picasso",
        date = "3rd of May 2010",
        license = "GPL3",
        layer = 3,
        version = 1,
        enabled = true
    }
end

if (gadgetHandler:IsSyncedCode()) then
    local resolutionStep= 10
    local iceCrackTresholdDamage = 999 
    local terrainDamageMap = makeTable(0, Game.mapSizeX/resolutionStep, Game.mapSizeZ/resolutionStep)
    local spGetUnitPosition = Spring.GetUnitPosition

    -- > Creates a Table and initializes it with default value
    function makeTable(default, xDimension, yDimension, zDimension,
                       boolNegativeMirror)
        boolNegativeMirror = boolNegativeMirror or false

        xStartIndex = 1
        yStartIndex = 1
        zStartIndex = 1

        if boolNegativeMirror == true then
            xStartIndex = -xDimension
            yStartIndex = -yDimension
            zStartIndex = -zDimension
        end

        local RetTable = {}
        if not xDimension then return default end

        for x = xStartIndex, xDimension, 1 do
            if yDimension then
                RetTable[x] = {}
            elseif xDimension then
                RetTable[x] = default
            else
                return default
            end

            if yDimension then
                for y = yStartIndex, yDimension, 1 do
                    if zDimension then
                        RetTable[x][y] = {}
                    else
                        RetTable[x][y] = default
                    end

                    if zDimension then
                        for z = zStartIndex, zDimension, 1 do
                            RetTable[x][y][z] = default
                        end
                    end
                end
            end
        end
        return RetTable
    end

    function transformToMapCoord(x,z)
        return math.ceil(x/resolutionStep), math.ceil(z/resolutionStep)
    end

    function gadget:GameFrame(frame)
        callDistributedTerraformer(frame)
    end

    function callDistributedTerraformer(frame)
        x = (frame % #terrainDamageMap) + 1
        for i=1, #terrainDamageMap[frame] do
            --we only care about water
            if  Spring.GetGroundOrigHeight (  x*resolutionStep,  z* resolutionStep ) < 0 then
                if terrainDamageMap[x][z] > 0 and terrainDamageMap[x] >  iceCrackTresholdDamage + math.random(50, 500) and then
                    --Terraformcode down - the water kills the unit
                    terrainDamageMap[x][z] = 0
                else
                    --terraform slowly up (freeze) 
                end
            end
        end
    end

    function gadget:Explosion(weaponDefID, x, y, z, AttackerID)
         mx,mz = transformToMapCoord(x,z)
         terrainDamageMap[mx][mz] =terrainDamageMap[mx][mz] + WeaponDefs[weaponDefID].damage
    end

    function gadget:UnitDestroyed(unitID, unitDefID, teamID, attackerID)
        x,y,z= spGetUnitPosition(unitID)
        mx,mz = transformToMapCoord(x,z)
        _,maxHp = Spring.GetUnitHealth(unitID)
        terrainDamageMap[mx][mz] =terrainDamageMap[mx][mz] + maxHp
    end

    function gadget:Initialize()  
        terrainDamageMap = makeTable(0, Game.mapSizeX/resolutionStep, Game.mapSizeZ/resolutionStep)   
    end

end