diff -r 57d343ee382f -r 75ba91f14ed5 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Random_Weapon.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Random_Weapon.lua Sat Aug 18 18:11:04 2012 +0200 @@ -0,0 +1,113 @@ +-- 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 } + +-- List of weapons that attack from the air +local airweapons = { amAirAttack, amMineStrike, amNapalm, amDrillStrike } + +-- Function that assigns the team their weapon +function assignAmmo(hog) + -- Get name of the current team + local name = GetHogTeamName(hog) + -- Get whither the team has been processed + local processed = getTeamValue(name, "processed") + -- If it has not, process it + if processed == nil or not processed then + -- Get the ammo for this hog's team + local ammo = getTeamValue(name, "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(name, "ammo", ammo) + end + -- Add the ammo for the hog + AddAmmo(hog, ammo) + -- Mark as processed + setTeamValue(name, "processed", true) + end +end + +-- Mark team as not processed +function reset(hog) + setTeamValue(GetHogTeamName(hog), "processed", false) +end + +function onGameInit() + -- Limit flags that can be set, but allow game schemes to be used + GameFlags = band(bor(GameFlags, gfResetWeps), bnot(gfInfAttack)) + -- 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 +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) + SetAmmo(amLowGravity, 0, 1, 0, 1) + SetAmmo(amExtraDamage, 0, 1, 0, 1) + SetAmmo(amInvulnerable, 0, 1, 0, 1) + SetAmmo(amExtraTime, 0, 1, 0, 1) + SetAmmo(amLaserSight, 0, 1, 0, 1) + SetAmmo(amVampiric, 0, 1, 0, 1) + SetAmmo(amJetpack, 0, 1, 0, 1) + 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() + -- Give every team their weapons, so one can plan during anothers turn + runOnGears(assignAmmo) + -- Mark all teams as not processed + runOnGears(reset) + -- 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