project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Balanced_Random_Weapon.lua
changeset 7568 75ba91f14ed5
equal deleted inserted replaced
7566:57d343ee382f 7568:75ba91f14ed5
       
     1 loadfile(GetDataPath() .. "Scripts/Locale.lua")()
       
     2 loadfile(GetDataPath() .. "Scripts/Tracker.lua")()
       
     3 
       
     4 local weapons = { amGrenade, amClusterBomb, amBazooka, amBee, amShotgun, amMine, amDEagle, amDynamite, amFirePunch, amWhip, amPickHammer, amBaseballBat, amMortar, amCake, amSeduction, amWatermelon, amHellishBomb, amDrill, amBallgun, amRCPlane, amSniperRifle, amMolotov, amBirdy, amBlowTorch, amGasBomb, amFlamethrower, amSMine, amKamikaze }
       
     5 
       
     6 --                      G,C,B,B,S,M,D,D,F,W,P,B,M,C,S,W,H,D,B,R,S,M,B,B,G,F,S,K
       
     7 local weapons_values = {1,1,1,2,1,1,1,2,1,1,1,2,1,3,1,3,3,2,3,3,1,1,2,1,1,2,2,1}
       
     8 
       
     9 local airweapons = { amAirAttack, amMineStrike, amNapalm, amDrillStrike }
       
    10 
       
    11 --                         A,M,N,D
       
    12 local airweapons_values = {2,2,2,2}
       
    13 
       
    14 local utilities = { amTeleport, amGirder, amSwitch, amLowGravity, amResurrector, amRope, amParachute, amJetpack, amPortalGun, amSnowball }
       
    15 
       
    16 --                        T,G,S,L,R,R,P,J,P,S
       
    17 local utilities_values = {1,2,2,1,2,2,1,2,2,2}
       
    18 
       
    19 function randomAmmo()
       
    20     local n = 3   --"points" to be allocated on weapons
       
    21 
       
    22     --pick random weapon and subtract cost
       
    23     local r = GetRandom(table.maxn(weapons_values)) + 1
       
    24     local picked_items = {}
       
    25     table.insert(picked_items, weapons[r])
       
    26     n = n - weapons_values[r]
       
    27 
       
    28 
       
    29     --choose any weapons or utilities to use up remaining n
       
    30 
       
    31     while n > 0 do
       
    32         local items = {}
       
    33         local items_values = {}
       
    34 
       
    35         for i, w in pairs(weapons_values) do
       
    36             local used = false
       
    37             if w <= n then
       
    38                 --check that this weapon hasn't been given already
       
    39                 for j, k in pairs(picked_items) do
       
    40                     if weapons[i] == k then
       
    41                         used = true
       
    42                     end
       
    43                 end
       
    44                 if not used then
       
    45                     table.insert(items_values, w)
       
    46                     table.insert(items, weapons[i])
       
    47                 end
       
    48             end
       
    49         end
       
    50 
       
    51         for i, w in pairs(utilities_values) do
       
    52             local used = false
       
    53             if w <= n then
       
    54                 --check that this weapon hasn't been given already
       
    55                 for j, k in pairs(picked_items) do
       
    56                     if utilities[i] == k then
       
    57                         used = true
       
    58                     end
       
    59                 end
       
    60                 if not used then
       
    61                     table.insert(items_values, w)
       
    62                     table.insert(items, utilities[i])
       
    63                 end
       
    64             end
       
    65         end
       
    66 
       
    67         local r = GetRandom(table.maxn(items_values)) + 1
       
    68         table.insert(picked_items, items[r])
       
    69         n = n - items_values[r]
       
    70     end
       
    71 
       
    72     return picked_items
       
    73 end
       
    74 
       
    75 function assignAmmo(hog)
       
    76     local name = GetHogTeamName(hog)
       
    77     local processed = getTeamValue(name, "processed")
       
    78     if processed == nil or not processed then
       
    79         local ammo = getTeamValue(name, "ammo")
       
    80         if ammo == nil then
       
    81             ammo = randomAmmo()
       
    82             setTeamValue(name, "ammo", ammo)
       
    83         end
       
    84         for i, w in pairs(ammo) do
       
    85             AddAmmo(hog, w)
       
    86         end
       
    87         setTeamValue(name, "processed", true)
       
    88     end
       
    89 end
       
    90 
       
    91 function reset(hog)
       
    92     setTeamValue(GetHogTeamName(hog), "processed", false)
       
    93 end
       
    94 
       
    95 function onGameInit()
       
    96     GameFlags = band(bor(GameFlags, gfResetWeps), bnot(gfPerHogAmmo))
       
    97     Goals = loc("Each turn you get 1-3 random weapons")
       
    98 end
       
    99 
       
   100 function onGameStart()
       
   101     trackTeams()
       
   102     if MapHasBorder() == false then
       
   103         for i, w in pairs(airweapons) do
       
   104             table.insert(weapons, w)
       
   105         end
       
   106         for i, w in pairs(airweapons_values) do
       
   107             table.insert(weapons_values, w)
       
   108         end
       
   109     end
       
   110 end
       
   111 
       
   112 function onAmmoStoreInit()
       
   113     SetAmmo(amSkip, 9, 0, 0, 0)
       
   114 
       
   115     SetAmmo(amExtraDamage, 0, 1, 0, 1)
       
   116     SetAmmo(amInvulnerable, 0, 1, 0, 1)
       
   117     SetAmmo(amExtraTime, 0, 1, 0, 1)
       
   118     SetAmmo(amLaserSight, 0, 1, 0, 1)
       
   119     SetAmmo(amVampiric, 0, 1, 0, 1)
       
   120 
       
   121     for i, w in pairs(utilities) do
       
   122         SetAmmo(w, 0, 0, 0, 1)
       
   123     end
       
   124 
       
   125     for i, w in pairs(weapons) do
       
   126         SetAmmo(w, 0, 0, 0, 1)
       
   127     end
       
   128 
       
   129     for i, w in pairs(airweapons) do
       
   130         SetAmmo(w, 0, 0, 0, 1)
       
   131     end
       
   132 end
       
   133 
       
   134 function onNewTurn()
       
   135     runOnGears(assignAmmo)
       
   136     runOnGears(reset)
       
   137     setTeamValue(GetHogTeamName(CurrentHedgehog), "ammo", nil)
       
   138 end
       
   139 
       
   140 function onGearAdd(gear)
       
   141     if GetGearType(gear) == gtHedgehog then
       
   142         trackGear(gear)
       
   143     end
       
   144 end
       
   145 
       
   146 function onGearDelete(gear)
       
   147     trackDeletion(gear)
       
   148 end