--- a/share/hedgewars/Data/Missions/Scenario/Big_Armory.lua Thu Feb 22 01:35:16 2018 +0100
+++ b/share/hedgewars/Data/Missions/Scenario/Big_Armory.lua Thu Feb 22 01:39:30 2018 +0100
@@ -1,310 +1,59 @@
-HedgewarsScriptLoad("/Scripts/Locale.lua")
-
-local playerHog
-local playerTeamName = loc("Pro Killers")
-local enemyTeamName = loc("Galaxy Guardians")
-local enemyTeam1 = {
- {name=loc("Rocket"), x=796, y=1184},
- {name=loc("Star"), x=733, y=1525},
- {name=loc("Asteroid"), x=738, y=1855},
- {name=loc("Comet"), x=937, y=1318},
- {name=loc("Sunflame"), x=3424, y=1536},
- {name=loc("Eclipse"), x=3417, y=1081},
- {name=loc("Jetpack"), x=2256, y=1246},
- {name=loc("Void"), x=1587, y=1231},
-}
-local gameStarted = false
-local turnNo = 0
-local toleranceTimer = nil
-local enemyHogsLeft = #enemyTeam1
-local pendingDeaths = {}
-local enemyHogs = {}
-local gameEnded = false
-local waitGears = 0
-local hasAttacked = false
-local minePlaced = false
-local delayGear = nil
-
-function onGameInit()
- Seed = "{7e34a56b-ee7b-4fe1-8f30-352a998f3f6a}"
- GameFlags = gfDisableWind + gfDisableLandObjects
- TurnTime= 45000
- CaseFreq = 0
- MinesNum = 0
- Explosives = 0
- Theme = "EarthRise"
- MapGen = mgRandom
- MapFeatureSize = 12
- -- Disable Sudden Death
- WaterRise = 0
- HealthDecrease = 0
-
- AddTeam(playerTeamName, 0xFF0000, "Bone", "Island", "Default", "cm_scout")
- playerHog = AddHog(loc("Ultrasoldier"), 0, 100, "Terminator_Glasses")
- SetGearPosition(playerHog, 543, 1167)
-
- AddTeam(enemyTeamName, 0xF5F808, "Earth", "Island", "Default", "cm_galaxy")
- for i=1,8 do
- local hogID = AddHog(enemyTeam1[i].name, 0, 100, "NoHat")
- table.insert(enemyHogs, hogID)
- SetGearPosition(hogID, enemyTeam1[i].x, enemyTeam1[i].y)
- end
-end
-
-function onAmmoStoreInit()
-
- SetAmmo(amGrenade, 9, 0, 0, 1)
- SetAmmo(amClusterBomb, 9, 0, 0, 1)
- SetAmmo(amBazooka, 9, 0, 0, 1)
- SetAmmo(amBee, 9, 0, 0, 1)
- SetAmmo(amShotgun, 9, 0, 0, 1)
- SetAmmo(amPickHammer, 9, 0, 0, 1)
- SetAmmo(amSkip, 9, 0, 0, 1)
- SetAmmo(amRope, 9, 0, 0, 1)
- SetAmmo(amMine, 9, 0, 0, 1)
- SetAmmo(amDEagle, 9, 0, 0, 1)
- SetAmmo(amDynamite, 9, 0, 0, 1)
- SetAmmo(amFirePunch, 9, 0, 0, 1)
- SetAmmo(amWhip, 9, 0, 0, 1)
- SetAmmo(amBaseballBat, 9, 0, 0, 1)
- SetAmmo(amParachute, 9, 0, 0, 1)
- SetAmmo(amAirAttack, 9, 0, 0, 1)
- SetAmmo(amMineStrike, 9, 0, 0, 1)
- SetAmmo(amBlowTorch, 9, 0, 0, 1)
- SetAmmo(amGirder, 9, 0, 0, 1)
- SetAmmo(amTeleport, 9, 0, 0, 1)
- SetAmmo(amSwitch, 9, 0, 0, 1)
- SetAmmo(amMortar, 9, 0, 0, 1)
- SetAmmo(amKamikaze, 9, 0, 0, 1)
- SetAmmo(amCake, 9, 0, 0, 1)
- SetAmmo(amSeduction, 9, 0, 0, 1)
- SetAmmo(amWatermelon, 9, 0, 0, 1)
- SetAmmo(amHellishBomb, 9, 0, 0, 1)
- SetAmmo(amNapalm, 9, 0, 0, 1)
- SetAmmo(amDrill, 9, 0, 0, 1)
- SetAmmo(amBallgun, 9, 0, 0, 1)
- SetAmmo(amRCPlane, 9, 0, 0, 1)
- SetAmmo(amLowGravity, 9, 0, 0, 1)
- SetAmmo(amExtraDamage, 9, 0, 0, 1)
- SetAmmo(amInvulnerable, 9, 0, 0, 1)
- SetAmmo(amLaserSight, 9, 0, 0, 1)
- SetAmmo(amVampiric, 9, 0, 0, 1)
- SetAmmo(amSniperRifle, 9, 0, 0, 1)
- SetAmmo(amJetpack, 9, 0, 0, 1)
- SetAmmo(amMolotov, 9, 0, 0, 1)
- SetAmmo(amBirdy, 9, 0, 0, 1)
- SetAmmo(amPortalGun, 9, 0, 0, 1)
- SetAmmo(amPiano, 9, 0, 0, 1)
- SetAmmo(amGasBomb, 9, 0, 0, 1)
- SetAmmo(amSineGun, 9, 0, 0, 1)
- SetAmmo(amFlamethrower, 9, 0, 0, 1)
- SetAmmo(amSMine, 9, 0, 0, 1)
- SetAmmo(amHammer, 9, 0, 0, 1)
- SetAmmo(amResurrector, 9, 0, 0, 1)
- SetAmmo(amDrillStrike, 9, 0, 0, 1)
- SetAmmo(amSnowball, 9, 0, 0, 1)
- SetAmmo(amTardis, 9, 0, 0, 1)
- SetAmmo(amLandGun, 9, 0, 0, 1)
- SetAmmo(amIceGun, 9, 0, 0, 1)
- SetAmmo(amKnife, 9, 0, 0, 1)
- SetAmmo(amRubber, 9, 0, 0, 1)
- SetAmmo(amAirMine, 9, 0, 0, 1)
- SetAmmo(amDuck, 9, 0, 0, 1)
-
- SetAmmo(amExtraTime, 2, 0, 0, 0)
-
-end
-
-function onGameStart()
- SendHealthStatsOff()
- ShowMission(loc("Big Armory"), loc("Scenario"), loc("Kill all enemy hedgehogs in a single turn."), -amBazooka, 0)
- SetWind(15)
-end
-
-function onGameTick20()
- if not gameStarted and turnNo == 1 and TurnTimeLeft < TurnTime then
- gameStarted = true
- elseif gameStarted and not gameEnded then
- if isPlayerAlive() then
- if enemyHogsLeft - countPending() <= 0 then
- TurnTimeLeft = 0
- if delayGear then
- DeleteGear(delayGear)
- end
- return
- elseif (enemyHogsLeft > 0) and TurnTimeLeft < 40 then
- if not toleranceTimer and waitGears <= 0 then
- SetInputMask(0)
- SetGearMessage(playerHog, 0)
- if not minePlaced then
- TurnTimeLeft = 10000000
- end
- if hasAttacked then
- if minePlaced then
- toleranceTimer = 12000
- else
- toleranceTimer = 7500
- end
- else
- PlaySound(sndBoring, playerHog)
- toleranceTimer = 5020
- end
- return
- end
- end
- if toleranceTimer ~= nil then
- if toleranceTimer % 1000 == 0 and toleranceTimer > 0 and toleranceTimer <= 5000 then
- AddCaption(string.format(loc("Mission failure in %d s"), div(toleranceTimer, 1000)), 0xFFFFFFFF, capgrpGameState)
- end
- if waitGears <= 0 then
- if toleranceTimer <= 0 then
- lose()
- return
- end
- toleranceTimer = toleranceTimer - 20
- end
- return
- end
- end
- end
-end
-
-function onGearAdd(gear)
- local gt = GetGearType(gear)
- if gt == gtIceGun or gt == gtPickHammer or gt == gtSineGunShot or gt == gtCake
- or gt == gtTeleport or gt == gtFlamethrower or gt == gtBallGun or gt == gtSeduction
- or gt == gtAirAttack or gt == gtMine or gt == gtSMine or gt == gtAirMine
- or (isWaitGear(gear) and gt ~= gtFlame) then
- --[[ This is a hack to prevent the turn from instantly ending
- after using a weapon with a retreat time of 0. For some reason, there would be
- are also problems with the hellish-hand grenade without this hack.
- It spawns an invisible grenade with disabled gravity at (0,0) with a
- high timer, which will delay the end of the turn. ]]
- if delayGear == nil then
- delayGear = AddGear(0, 0, gtGrenade, gstNoGravity + gstInvisible, 0, 0, 2147483647)
- end
- end
- if gt == gtMine or gt == gtSMine or gt == gtAirMine then
- minePlaced = true
- end
- if isWaitGear(gear) then
- waitGears = waitGears + 1
- end
- if gt == gtAirAttack then
- hasAttacked = true
- end
-end
-
-function onGearDelete(gear)
- if isWaitGear(gear) then
- waitGears = waitGears - 1
- end
- if GetGearType(gear) == gtHedgehog then
- if GetHogTeamName(gear) == enemyTeamName then
- enemyHogsLeft = enemyHogsLeft - 1
- pendingDeaths[gear] = nil
- if enemyHogsLeft <= 0 then
- win()
- end
- end
- end
-end
-
-function countPending()
- local p = 0
- for h, v in pairs(pendingDeaths) do
- if v then
- p = p + 1
- end
- end
- return p
-end
-
-function isPlayerAlive()
- if GetGearType(playerHog) == gtHedgehog then
- if GetHealth(playerHog) == 0 then
- return false
- else
- local _, gearDamage
- _, _, _, _, _, _, _, _, _, _, _, gearDamage = GetGearValues(playerHog)
- return (GetHealth(playerHog) - gearDamage) > 0
- end
- else
- return false
- end
-end
-
-function onGearDamage(gear, damage)
- if GetGearType(gear) == gtHedgehog then
- if GetHogTeamName(gear) == enemyTeamName then
- local _, gearDamage
- _, _, _, _, _, _, _, _, _, _, _, gearDamage = GetGearValues(gear)
- if (GetHealth(gear) - gearDamage) <= 0 then
- pendingDeaths[gear] = true
- end
- end
- end
-end
-
-function isWaitGear(gear)
- local gt = GetGearType(gear)
- return gt == gtBall or gt == gtHellishBomb or gt == gtWatermelon or gt == gtMelonPiece
- or (gt == gtFlame and band(GetState(gear), gsttmpFlag) == 0)
- or gt == gtDrill or gt == gtAirAttack or gt == gtAirBomb or gt == gtCluster
- or gt == gtEgg or gt == gtHammerHit or gt == gtNapalmBomb or gt == gtPoisonCloud
- or gt == gtGasBomb
-end
-
-function onNewTurn()
- turnNo = turnNo + 1
- if turnNo > 1 then
- PlaySound(sndBoring, playerHog)
- lose()
- end
-end
-
-function onHogAttack(ammoType)
- -- Set hasAttacked if hog attacked NOT with a non-turn ending weapon
- if ammoType ~= amNothing and ammoType ~= amSkip and ammoType ~= amJetpack and ammoType ~= amGirder and ammoType ~= amRubber
- and ammoType ~= amLandGun and ammoType ~= amParachute and ammoType ~= amResurrector and ammoType ~= amRope and ammoType ~= amSwitcher
- and ammoType ~= amExtraDamage and ammoType ~= amExtraTime and ammoType ~= amLowGravity and ammoType ~= amInvulnerable
- and ammoType ~= amLaserSight and ammoType ~= amVampiric and ammoType ~= amPortalGun and ammoType ~= amSnowball then
- hasAttacked = true
- end
- if ammoType == amSkip and enemyHogsLeft > 0 then
- PlaySound(sndCoward, playerHog)
- lose()
- return
- end
-end
-
-function lose()
- if not gameEnded then
- PlaySound(sndStupid, playerHog)
- local mission, achievement
- mission = loc("You failed to kill all enemies in this turn.")
- achievement = loc("You failed to kill all enemies in a single turn.")
- AddCaption(loc("Mission failed!"), 0xFFFFFFFF, capgrpGameState)
- ShowMission(loc("Big Armory"), loc("Scenario"), mission, -amBazooka, 5000)
- SendStat(siGameResult, loc("You lose!"))
- SendStat(siCustomAchievement, achievement)
- SendStat(siPlayerKills, tostring(0), enemyTeamName)
- SendStat(siPlayerKills, tostring(8-enemyHogsLeft), playerTeamName)
- gameEnded = true
- EndGame()
- end
-end
-
-function win()
- if not gameEnded then
- AddCaption(loc("Victory!"), 0xFFFFFFFF, capgrpGameState)
- ShowMission(loc("Big Armory"), loc("Scenario"), loc("Congratulations! You win."), 4, 5000)
- PlaySound(sndVictory, playerHog)
- SendStat(siGameResult, loc("You win!"))
- SendStat(siCustomAchievement, loc("You have killed all enemies."))
- SendStat(siPlayerKills, tostring(8-enemyHogsLeft), playerTeamName)
- SendStat(siPlayerKills, tostring(0), enemyTeamName)
- gameEnded = true
- EndGame()
- end
-end
+HedgewarsScriptLoad("/Scripts/SimpleMission.lua")
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+
+local heroAmmo = {}
+for a=0, amDuck do
+ if a == amExtraTime then
+ heroAmmo[a] = 2
+ elseif a ~= amNothing then
+ heroAmmo[a] = 100
+ end
+end
+
+SimpleMission({
+ missionTitle = loc("Big Armory"),
+ wind = 15,
+ initVars = {
+ TurnTime = 45000,
+ Seed = "{7e34a56b-ee7b-4fe1-8f30-352a998f3f6a}",
+ GameFlags = gfDisableWind + gfDisableLandObjects,
+ Theme = "EarthRise",
+ MapGen = mgRandom,
+ MapFeatureSize = 12,
+ },
+ teams = {
+ { name = loc("Pro Killers"),
+ clanID = 0,
+ flag = "cm_scout",
+ grave = "Bone",
+ hogs = {
+ {
+ name = loc("Ultrasoldier"),
+ health = 100,
+ x = 543, y = 1167,
+ hat = "Terminator_Glasses",
+ ammo = heroAmmo,
+ }
+ }, },
+
+ { name = loc("Galaxy Guardians"),
+ clanID = 8,
+ flag = "cm_galaxy",
+ grave = "Earth",
+ hogs = {
+ {name=loc("Rocket"), x=796, y=1184, faceLeft=true},
+ {name=loc("Star"), x=733, y=1525, faceLeft=true},
+ {name=loc("Asteroid"), x=738, y=1855, faceLeft=true},
+ {name=loc("Comet"), x=937, y=1318, faceLeft=true},
+ {name=loc("Sunflame"), x=3424, y=1536},
+ {name=loc("Eclipse"), x=3417, y=1081},
+ {name=loc("Jetpack"), x=2256, y=1246},
+ {name=loc("Void"), x=1587, y=1231, faceLeft=true},
+ }, },
+ },
+ customNonGoals = {
+ { type = "turns", turns = 1, failText = loc("You failed to kill all enemies in a single turn.") }
+ },
+ customGoalCheck = "turnEnd",
+ goalText = loc("Kill all enemy hedgehogs in a single turn."),
+})