------------------- ABOUT ----------------------
--
-- Hero has collected all the anti-gravity device
-- parts but because of the size of the meteorite
-- he needs to detonate some faulty explosives that
-- PAotH have previously placed on it.
HedgewarsScriptLoad("/Scripts/Locale.lua")
HedgewarsScriptLoad("/Scripts/Animate.lua")
HedgewarsScriptLoad("/Missions/Campaign/A_Space_Adventure/global_functions.lua")
----------------- VARIABLES --------------------
-- globals
local missionName = loc("The big bang")
local challengeObjectives = loc("Find a way to detonate all the explosives and stay alive!")
local explosives = {}
local currentHealth = 1
local currentDamage = 0
-- hogs
local hero = {
name = loc("Hog Solo"),
x = 790,
y = 70
}
-- teams
local teamA = {
name = loc("Hog Solo"),
color = tonumber("38D61C",16) -- green
}
-------------- LuaAPI EVENT HANDLERS ------------------
function onGameInit()
GameFlags = gfDisableWind + gfOneClanMode
Seed = 1
TurnTime = -1
CaseFreq = 0
MinesNum = 0
MinesTime = 1
Explosives = 0
HealthCaseAmount = 50
Map = "final_map"
Theme = "EarthRise"
-- Hog Solo
AddTeam(teamA.name, teamA.color, "Bone", "Island", "HillBilly", "cm_birdy")
hero.gear = AddHog(hero.name, 0, 1, "war_desertgrenadier1")
AnimSetGearPosition(hero.gear, hero.x, hero.y)
initCheckpoint("final")
AnimInit()
end
function onGameStart()
AnimWait(hero.gear, 3000)
FollowGear(hero.gear)
ShowMission(missionName, loc("Challenge Objectives"), challengeObjectives, -amSkip, 0)
-- explosives
x = 400
while x < 815 do
local gear = AddGear(x, 500, gtExplosives, 0, 0, 0, 0)
x = x + math.random(15,40)
table.insert(explosives, gear)
end
-- mines
local x = 360
while x < 815 do
AddGear(x, 480, gtMine, 0, 0, 0, 0)
x = x + math.random(5,20)
end
-- health crate
SpawnHealthCrate(900, 5)
-- ammo crates
SpawnAmmoCrate(930, 1000,amRCPlane)
SpawnAmmoCrate(1220, 672,amPickHammer)
SpawnAmmoCrate(1220, 672,amGirder)
-- ammo
AddAmmo(hero.gear, amPortalGun, 1)
AddAmmo(hero.gear, amFirePunch, 1)
AddEvent(onHeroDeath, {hero.gear}, heroDeath, {hero.gear}, 0)
AddEvent(onHeroWin, {hero.gear}, heroWin, {hero.gear}, 0)
SendHealthStatsOff()
end
function onGameTick()
AnimUnWait()
if ShowAnimation() == false then
return
end
ExecuteAfterAnimations()
CheckEvents()
end
function onAmmoStoreInit()
SetAmmo(amRCPlane, 0, 0, 0, 1)
SetAmmo(amPickHammer, 0, 0, 0, 2)
SetAmmo(amGirder, 0, 0, 0, 1)
end
function onNewTurn()
currentDamage = 0
currentHealth = GetHealth(hero.gear)
end
function onGearDamage(gear, damage)
if gear == hero.gear then
currentDamage = currentDamage + damage
end
end
-------------- EVENTS ------------------
function onHeroDeath(gear)
if not GetHealth(hero.gear) then
return true
end
return false
end
function onHeroWin(gear)
local win = true
for i=1,table.getn(explosives) do
if GetHealth(explosives[i]) then
win = false
break
end
end
if currentHealth <= currentDamage then
win = false
end
return win
end
-------------- ACTIONS ------------------
function heroDeath(gear)
SendStat(siGameResult, loc("Hog Solo lost, try again!"))
SendStat(siCustomAchievement, loc("You have to destroy all the explosives without dying!"))
SendStat(siPlayerKills,'0',teamA.name)
EndGame()
end
function heroWin(gear)
SendStat(siGameResult, loc("Congratulations, you have saved Hogera!"))
SendStat(siCustomAchievement, loc("Hogera is safe!"))
SendStat(siPlayerKills,'1',teamA.name)
EndGame()
end