# HG changeset patch # User Wuzzy # Date 1519259970 -3600 # Node ID b1a230d21a48acf1ebb2f504aef20318ed397450 # Parent 5ceb8b0632c481c87a38a38ab35c60d3fea175af Convert Big Armory mission to SimpleMission format diff -r 5ceb8b0632c4 -r b1a230d21a48 share/hedgewars/Data/Missions/Scenario/Big_Armory.lua --- 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."), +})