HedgewarsScriptLoad("/Scripts/Locale.lua") HedgewarsScriptLoad("/Scripts/Params.lua") local gravity = 100 local mingravity local maxgravity local mingravity_normal local maxgravity_normal local mingravity_low local maxgravity_low local delta = 0 local period local periodtimer = 0 local wdGameTicks = 0 local wdTTL = 0 local mln = 1000000 local lowGravityUsed = false local script2_onNewTurn local script2_onGameTick20 local script2_onGameStart local script2_onHogAttack function grav_onNewTurn() lowGravityUsed = false if maxgravity_normal == nil then gravity = mingravity_normal else mingravity = mingravity_normal maxgravity = maxgravity_normal if period > 0 then delta = div(maxgravity_normal - mingravity_normal, period) end end if delta ~= nil and period == nil then SetGravity(gravity) else SetGravity(div(gravity, mln)) end wdGameTicks = GameTime if script2_onNewTurn ~= nil then script2_onNewTurn() end end function grav_onGameTick20() if wdGameTicks + 15000 < GameTime then SetGravity(100) else if wdTTL ~= TurnTimeLeft then wdGameTicks = GameTime end if delta == nil then if periodtimer == 0 then periodtimer = period * 2 SetGravity(div(GetRandom(maxgravity - mingravity + 1) + mingravity, mln)) else periodtimer = periodtimer - 1 end elseif delta == 0 then SetGravity(gravity) else if delta > 0 and gravity + delta > maxgravity then gravity = maxgravity delta = -delta elseif delta < 0 and gravity + delta < mingravity then gravity = mingravity delta = -delta else gravity = gravity + delta end SetGravity(div(gravity, mln)) end end wdTTL = TurnTimeLeft if script2_onGameTick20 ~= nil then script2_onGameTick20() end end function onParameters() parseParams() gravity = tonumber(params["g"]) or 100 mingravity_normal = gravity if mingravity_normal > 0 then mingravity_low = div(mingravity_normal, 2) else mingravity_low = mingravity_normal * 2 end mingravity = mingravity_normal if type(tonumber(params["g2"])) == "number" then maxgravity_normal = tonumber(params["g2"]) if maxgravity_normal > 0 then maxgravity_low = div(maxgravity_normal, 2) else maxgravity_low = maxgravity_normal * 2 end maxgravity = maxgravity_normal end period = params["period"] if type(mingravity) == "number" and type(maxgravity) == "number" then if period ~= nil then period = div(period, 40) else period = 125 end mingravity = mingravity * mln mingravity_normal = mingravity_normal * mln mingravity_low = mingravity_low * mln maxgravity = maxgravity * mln maxgravity_normal = maxgravity_normal * mln maxgravity_low = maxgravity_low * mln if mingravity > maxgravity then mingravity, maxgravity = maxgravity, mingravity mingravity_normal, maxgravity_normal = maxgravity_normal, mingravity_normal mingravity_low, maxgravity_low = maxgravity_low, mingravity_low end gravity = mingravity if period > 0 then delta = div(maxgravity_normal - mingravity_normal, period) else period = -period delta = nil end end secondScript = params["script2"] if secondScript ~= nil then onParameters = nil HedgewarsScriptLoad("/Scripts/Multiplayer/" .. secondScript .. ".lua") script2_onNewTurn = onNewTurn script2_onGameTick20 = onGameTick20 script2_onGameStart = onGameStart script2_onHogAttack = onHogAttack if onParameters ~= nil then onParameters() end end onNewTurn = grav_onNewTurn onGameTick20 = grav_onGameTick20 onGameStart = grav_onGameStart onHogAttack = grav_onHogAttack end function grav_onGameStart() DisableGameFlags(gfLowGravity) if delta == nil then v = string.format(loc("random in range from %i%% to %i%% with period of %i msec"), div(mingravity_normal, mln), div(maxgravity_normal, mln), period * 40) elseif period ~= nil then v = string.format(loc("changing range from %i%% to %i%% with period of %i msec"), div(mingravity_normal, mln), div(maxgravity_normal, mln), period * 40) else v = gravity .. "%" end ShowMission(loc("Gravity"), loc("Current setting is ") .. v, loc("Setup:|'g=150', where 150 is 150% of normal gravity") .. "|" .. loc("or 'g=50, g2=150, period=4000' for gravity changing|from 50 to 150 and back with period of 4000 msec") .. "||" .. loc("Set period to negative value for random gravity"), 0, 5000) if script2_onGameStart ~= nil then script2_onGameStart() end end function grav_onHogAttack(ammoType) if ammoType == amLowGravity then lowGravityUsed = true if maxgravity_normal == nil then gravity = mingravity_low else mingravity = mingravity_low maxgravity = maxgravity_low if period > 0 then delta = div(maxgravity_low - mingravity_low, period) end end end if script2_onHogAttack ~= nil then script2_onHogAttack() end end