share/hedgewars/Data/Scripts/Multiplayer/Random_Weapon.lua
changeset 5138 f991f87969ff
parent 4893 353781305c07
child 5141 2fb6555011d3
--- a/share/hedgewars/Data/Scripts/Multiplayer/Random_Weapon.lua	Sun Apr 10 17:25:34 2011 -0400
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Random_Weapon.lua	Mon Apr 11 00:35:53 2011 +0200
@@ -1,32 +1,59 @@
+-- Random Weapons, example for gameplay scripts
+
+-- Load the library for localisation ("loc" function)
 loadfile(GetDataPath() .. "Scripts/Locale.lua")()
 
+-- Load the gear tracker
+loadfile(GetDataPath() .. "Scripts/Tracker.lua")()
+
+-- List of available weapons
 local weapons = { amGrenade, amClusterBomb, amBazooka, amBee, amShotgun,
             amMine, amDEagle, amDynamite, amFirePunch, amWhip, amPickHammer,
             amBaseballBat, amTeleport, amMortar, amCake, amSeduction,
             amWatermelon, amHellishBomb, amDrill, amBallgun, amRCPlane,
             amSniperRifle, amMolotov, amBirdy, amBlowTorch, amGasBomb,
-            amFlamethrower, amSMine, amHammer, amSnowball, amTardis, amStructure }
+            amFlamethrower, amSMine, amHammer }
 
+-- List of weapons that attack from the air
 local airweapons = { amAirAttack, amMineStrike, amNapalm, amDrillStrike }
 
+-- Function that assigns the team their weapon
+-- Due to the fact that the gameplay uses reset weapons and no inf attack there is no point in limiting the ammo count
+function assignWeapon(hog)
+    -- Get the ammo for this hog's team
+    local ammo = getTeamValue(GetHogTeamName(hog), "ammo")
+    -- If there is no ammo, get a random one from the list and store it
+    if ammo == nil then
+        ammo = weapons[GetRandom(table.maxn(weapons)) + 1]
+        setTeamValue(GetHogTeamName(hog), "ammo", ammo)
+    end
+    -- Add the ammo for the hog
+    AddAmmo(hog, ammo)
+end
 
 function onGameInit()
+    -- Limit flags that can be set, but allow game schemes to be used
     GameFlags = band(bor(GameFlags, gfResetWeps), bnot(gfInfAttack + gfPerHogAmmo))
+    -- Set a custom game goal that will show together with the scheme ones
     Goals = loc("Each turn you get one random weapon")
 end
 
 function onGameStart()
+    -- Initialize the tracking of hogs and teams
+    trackTeams()
+    -- Add air weapons to the game if the border is not active
     if MapHasBorder() == false then
         for i, w in pairs(airweapons) do
             table.insert(weapons, w)
         end
     end
-    --ShowMission(loc("Random Weapons"), loc("A game of luck"), loc("There has been a mix-up with your gear and now you|have to utilize whatever is coming your way!"), -amSkip, 0)
 end
 
 function onAmmoStoreInit()
+    -- Allow skip at all times
     SetAmmo(amSkip, 9, 0, 0, 0)
 
+    -- Let utilities be available through crates
     SetAmmo(amParachute, 0, 1, 0, 1)
     SetAmmo(amGirder, 0, 1, 0, 2)
     SetAmmo(amSwitch, 0, 1, 0, 1)
@@ -40,15 +67,32 @@
     SetAmmo(amPortalGun, 0, 1, 0, 1)
     SetAmmo(amResurrector, 0, 1, 0, 1)
 
+    -- Allow weapons to be used
     for i, w in pairs(weapons) do
         SetAmmo(w, 0, 0, 0, 1)
     end
 
+    -- Allow air weapons to be used
     for i, w in pairs(airweapons) do
         SetAmmo(w, 0, 0, 0, 1)
     end
 end
 
 function onNewTurn()
-    AddAmmo(CurrentHedgehog, weapons[GetRandom(table.maxn(weapons)) + 1])
+    -- Give every team their weapons, so one can plan during anothers turn
+    runOnGears(assignWeapon)
+    -- Set the current teams weapons to nil so they will get new after the turn has ended
+    setTeamValue(GetHogTeamName(CurrentHedgehog), "ammo", nil)
 end
+
+function onGearAdd(gear)
+    -- Catch hedgehogs for the tracker
+    if GetGearType(gear) == gtHedgehog then
+        trackGear(gear)
+    end
+end
+
+function onGearDelete(gear)
+    -- Remove hogs that are gone
+    trackDeletion(gear)
+end