share/hedgewars/Data/Scripts/Multiplayer/Gravity.lua
changeset 11893 25a6faa5ac46
parent 10758 0f3a0f117810
child 11894 dd3cbbde7876
equal deleted inserted replaced
11892:0526a26ddd6e 11893:25a6faa5ac46
     2 HedgewarsScriptLoad("/Scripts/Params.lua")
     2 HedgewarsScriptLoad("/Scripts/Params.lua")
     3 
     3 
     4 local gravity = 100
     4 local gravity = 100
     5 local mingravity
     5 local mingravity
     6 local maxgravity
     6 local maxgravity
       
     7 local mingravity_normal
       
     8 local maxgravity_normal
       
     9 local mingravity_low
       
    10 local maxgravity_low
     7 local delta = 0
    11 local delta = 0
     8 local period
    12 local period
     9 local periodtimer = 0
    13 local periodtimer = 0
    10 local wdGameTicks = 0
    14 local wdGameTicks = 0
    11 local wdTTL = 0
    15 local wdTTL = 0
    12 local mln = 1000000
    16 local mln = 1000000
       
    17 local lowGravityUsed = false
    13 
    18 
    14 local script2_onNewTurn
    19 local script2_onNewTurn
    15 local script2_onGameTick20
    20 local script2_onGameTick20
    16 local script2_onGameStart
    21 local script2_onGameStart
       
    22 local script2_onHogAttack
    17 
    23 
    18 
    24 
    19 function grav_onNewTurn()
    25 function grav_onNewTurn()
       
    26     lowGravityUsed = false
       
    27     if maxgravity_normal == nil then
       
    28         gravity = mingravity_normal
       
    29     else
       
    30         mingravity = mingravity_normal
       
    31         maxgravity = maxgravity_normal
       
    32         if period > 0 then
       
    33            delta = div(maxgravity_normal - mingravity_normal, period)
       
    34         end
       
    35     end
    20     if delta ~= nil and period == nil then 
    36     if delta ~= nil and period == nil then 
    21       SetGravity(gravity)
    37       SetGravity(gravity)
    22     else
    38     else
    23       SetGravity(div(gravity, mln))
    39       SetGravity(div(gravity, mln))
    24     end
    40     end
    70 end
    86 end
    71 
    87 
    72 function onParameters()
    88 function onParameters()
    73     parseParams()
    89     parseParams()
    74 
    90 
    75     gravity = params["g"]
    91     gravity = tonumber(params["g"]) or 100
    76 
    92 
    77     mingravity = gravity
    93     mingravity_normal = gravity
    78     maxgravity = params["g2"]
    94     if mingravity_normal > 0 then
       
    95         mingravity_low = div(mingravity_normal, 2)
       
    96     else
       
    97         mingravity_low = mingravity_normal * 2
       
    98     end
       
    99     mingravity = mingravity_normal
       
   100     if type(tonumber(params["g2"])) == "number" then
       
   101         maxgravity_normal = tonumber(params["g2"])
       
   102         if maxgravity_normal > 0 then
       
   103             maxgravity_low = div(maxgravity_normal, 2)
       
   104         else
       
   105             maxgravity_low = maxgravity_normal * 2
       
   106         end
       
   107         maxgravity = maxgravity_normal
       
   108     end
    79     period = params["period"]
   109     period = params["period"]
    80 
   110 
    81     if mingravity ~= nil and maxgravity ~= nil then
   111     if type(mingravity) == "number" and type(maxgravity) == "number" then
    82         if period ~= nil then
   112         if period ~= nil then
    83             period = div(period, 40)
   113             period = div(period, 40)
    84         else
   114         else
    85             period = 125
   115             period = 125
    86         end
   116         end
    87 
   117 
    88         mingravity = mingravity * mln
   118         mingravity = mingravity * mln
       
   119         mingravity_normal = mingravity_normal * mln
       
   120         mingravity_low = mingravity_low * mln
    89         maxgravity = maxgravity * mln
   121         maxgravity = maxgravity * mln
    90 
   122         maxgravity_normal = maxgravity_normal * mln
    91         -- note: mingravity and maxgravity MUST NOT be strings at this point
   123         maxgravity_low = maxgravity_low * mln
       
   124 
    92         if mingravity > maxgravity then
   125         if mingravity > maxgravity then
    93             mingravity, maxgravity = maxgravity, mingravity
   126             mingravity, maxgravity = maxgravity, mingravity
       
   127             mingravity_normal, maxgravity_normal = maxgravity_normal, mingravity_normal
       
   128             mingravity_low, maxgravity_low = maxgravity_low, mingravity_low
    94         end
   129         end
    95 
   130 
    96         gravity = mingravity
   131         gravity = mingravity
    97 
   132 
    98         if period > 0 then
   133         if period > 0 then
    99             delta = div(maxgravity - mingravity, period)
   134             delta = div(maxgravity_normal - mingravity_normal, period)
   100         else
   135         else
   101             period = -period
   136             period = -period
   102             delta = nil
   137             delta = nil
   103         end
   138         end
   104     end
       
   105 
       
   106     if gravity == nil then
       
   107         gravity = 100
       
   108     end
   139     end
   109     
   140     
   110     secondScript = params["script2"]
   141     secondScript = params["script2"]
   111     
   142     
   112     if secondScript ~= nil then
   143     if secondScript ~= nil then
   114         HedgewarsScriptLoad("/Scripts/Multiplayer/" .. secondScript .. ".lua")
   145         HedgewarsScriptLoad("/Scripts/Multiplayer/" .. secondScript .. ".lua")
   115         
   146         
   116         script2_onNewTurn = onNewTurn
   147         script2_onNewTurn = onNewTurn
   117         script2_onGameTick20 = onGameTick20
   148         script2_onGameTick20 = onGameTick20
   118         script2_onGameStart = onGameStart
   149         script2_onGameStart = onGameStart
       
   150         script2_onHogAttack = onHogAttack
   119                 
   151                 
   120         if onParameters ~= nil then
   152         if onParameters ~= nil then
   121             onParameters()
   153             onParameters()
   122         end
   154         end
   123     end
   155     end
   124     
   156     
   125     onNewTurn = grav_onNewTurn
   157     onNewTurn = grav_onNewTurn
   126     onGameTick20 = grav_onGameTick20
   158     onGameTick20 = grav_onGameTick20
   127     onGameStart = grav_onGameStart
   159     onGameStart = grav_onGameStart
       
   160     onHogAttack = grav_onHogAttack
   128 end
   161 end
   129 
   162 
   130 function grav_onGameStart()
   163 function grav_onGameStart()
       
   164     DisableGameFlags(gfLowGravity)
       
   165 
   131     if delta == nil then
   166     if delta == nil then
   132         v = string.format(loc("random in range from %i%% to %i%% with period of %i msec"), div(mingravity, mln), div(maxgravity, mln), period * 40)
   167         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)
   133     elseif period ~= nil then
   168     elseif period ~= nil then
   134         v = string.format(loc("changing range from %i%% to %i%% with period of %i msec"), div(mingravity, mln), div(maxgravity, mln), period * 40)
   169         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)
   135     else
   170     else
   136         v = gravity .. "%"
   171         v = gravity .. "%"
   137     end
   172     end
   138 
   173 
   139     ShowMission(loc("Gravity"),
   174     ShowMission(loc("Gravity"),
   146     if script2_onGameStart ~= nil then
   181     if script2_onGameStart ~= nil then
   147         script2_onGameStart()
   182         script2_onGameStart()
   148     end
   183     end
   149 end
   184 end
   150 
   185 
   151 
   186 function grav_onHogAttack(ammoType)
       
   187     if ammoType == amLowGravity then
       
   188         lowGravityUsed = true
       
   189         if maxgravity_normal == nil then
       
   190             gravity = mingravity_low
       
   191         else
       
   192             mingravity = mingravity_low
       
   193             maxgravity = maxgravity_low
       
   194             if period > 0 then
       
   195                 delta = div(maxgravity_low - mingravity_low, period)
       
   196             end
       
   197         end
       
   198     end
       
   199     if script2_onHogAttack ~= nil then
       
   200         script2_onHogAttack()
       
   201     end
       
   202 end