------------------- ABOUT ----------------------
--
-- Hero has get into an Red Strawberies ambush
-- He has to eliminate the enemies by using limited
-- ammo of sniper rifle and watermelon
HedgewarsScriptLoad("/Scripts/Locale.lua")
HedgewarsScriptLoad("/Scripts/Animate.lua")
HedgewarsScriptLoad("/Missions/Campaign/A_Space_Adventure/global_functions.lua")
----------------- VARIABLES --------------------
-- globals
local missionName = loc("Precise shooting")
local timeLeft = 10000
local lastWeaponUsed = amSniperRifle
local challengeObjectives = loc("Use your available weapons in order to eliminate the enemies").."|"..
loc("You can only use the Sniper Rifle or the Watermelon bomb").."|"..
loc("You'll have only 2 watermelon bombs during the game").."|"..
loc("You'll get an extra Sniper Rifle every time you kill an enemy hog with a limit of max 3 rifles").."|"..
loc("You'll get an extra Teleport every time you kill an enemy hog with a limit of max 2 teleports").."|"..
loc("The first turn will last 25 sec and every other turn 15 sec").."|"..
loc("If you skip the game your time left will be added to your next turn").."|"..
loc("Some parts of the land are indestructible")
-- dialogs
local dialog01 = {}
-- mission objectives
local goals = {
[dialog01] = {missionName, loc("Challenge Objectives"), challengeObjectives, 1, 4500},
}
-- hogs
local hero = {
name = loc("Hog Solo"),
x = 1100,
y = 560
}
local enemiesOdd = {
{name = "Hog 1", x = 2000 , y = 175},
{name = "Hog 3", x = 1950 , y = 1110},
{name = "Hog 5", x = 1270 , y = 1480},
{name = "Hog 7", x = 240 , y = 790},
{name = "Hog 9", x = 620 , y = 1950},
{name = "Hog 11", x = 720 , y = 1950},
{name = "Hog 13", x = 1620 , y = 1950},
{name = "Hog 15", x = 1720 , y = 1950},
}
local enemiesEven = {
{name = "Hog 2", x = 660, y = 140},
{name = "Hog 4", x = 1120, y = 1250},
{name = "Hog 6", x = 1290, y = 1250},
{name = "Hog 8", x = 820, y = 1950},
{name = "Hog 10", x = 920, y = 1950},
{name = "Hog 12", x = 1820, y = 1950},
{name = "Hog 14", x = 1920, y = 1950},
{name = "Hog 16", x = 1200, y = 560},
}
-- teams
local teamA = {
name = loc("Hog Solo"),
color = tonumber("38D61C",16) -- green
}
local teamB = {
name = loc("RS1"),
color = tonumber("FF0000",16) -- red
}
local teamC = {
name = loc("RS2"),
color = tonumber("FF0000",16) -- red
}
-------------- LuaAPI EVENT HANDLERS ------------------
function onGameInit()
GameFlags = gfDisableWind + gfInfAttack
Seed = 1
TurnTime = 15000
CaseFreq = 0
MinesNum = 0
MinesTime = 1
Explosives = 0
Map = "fruit03_map"
Theme = "Fruit"
-- Hog Solo
AddTeam(teamA.name, teamA.color, "Bone", "Island", "HillBilly", "cm_birdy")
hero.gear = AddHog(hero.name, 0, 100, "war_desertgrenadier1")
AnimSetGearPosition(hero.gear, hero.x, hero.y)
-- enemies
AddTeam(teamC.name, teamC.color, "Bone", "Island", "HillBilly", "cm_birdy")
for i=1,table.getn(enemiesEven) do
enemiesEven[i].gear = AddHog(enemiesEven[i].name, 1, 100, "war_desertgrenadier1")
AnimSetGearPosition(enemiesEven[i].gear, enemiesEven[i].x, enemiesEven[i].y)
end
AddTeam(teamB.name, teamB.color, "Bone", "Island", "HillBilly", "cm_birdy")
for i=1,table.getn(enemiesOdd) do
enemiesOdd[i].gear = AddHog(enemiesOdd[i].name, 1, 100, "war_desertgrenadier1")
AnimSetGearPosition(enemiesOdd[i].gear, enemiesOdd[i].x, enemiesOdd[i].y)
end
initCheckpoint("fruit03")
AnimInit()
AnimationSetup()
end
function onGameStart()
AnimWait(hero.gear, 3000)
FollowGear(hero.gear)
ShowMission(missionName, loc("Challenge Objectives"), challengeObjectives, -amSkip, 0)
AddEvent(onHeroDeath, {hero.gear}, heroDeath, {hero.gear}, 0)
AddEvent(onHeroWin, {hero.gear}, heroWin, {hero.gear}, 0)
--hero ammo
AddAmmo(hero.gear, amTeleport, 2)
AddAmmo(hero.gear, amSniperRifle, 2)
AddAmmo(hero.gear, amWatermelon, 2)
--enemies ammo
AddAmmo(enemiesOdd[1].gear, amDEagle, 100)
AddAmmo(enemiesOdd[1].gear, amSniperRifle, 100)
AddAmmo(enemiesOdd[1].gear, amWatermelon, 1)
AddAmmo(enemiesOdd[1].gear, amGrenade, 5)
AddAmmo(enemiesEven[1].gear, amDEagle, 100)
AddAmmo(enemiesEven[1].gear, amSniperRifle, 100)
AddAmmo(enemiesEven[1].gear, amWatermelon, 1)
AddAmmo(enemiesEven[1].gear, amGrenade, 5)
SendHealthStatsOff()
AddAnim(dialog01)
end
function onNewTurn()
if CurrentHedgehog == hero.gear then
if GetAmmoCount(hero.gear, amSkip) == 0 then
TurnTimeLeft = TurnTime + timeLeft
AddAmmo(hero.gear, amSkip, 1)
end
timeLeft = 0
end
turnHogs()
end
function onGameTick()
AnimUnWait()
if ShowAnimation() == false then
return
end
ExecuteAfterAnimations()
CheckEvents()
end
function onGameTick20()
if CurrentHedgehog == hero.gear and TurnTimeLeft ~= 0 then
timeLeft = TurnTimeLeft
end
end
function onGearDelete(gear)
if (gear > hero.gear and gear <= enemiesOdd[table.getn(enemiesOdd)].gear) or
(gear > hero.gear and gear <= enemiesEven[table.getn(enemiesEven)].gear) then
local availableTeleports = GetAmmoCount(hero.gear,amTeleport)
local availableSniper = GetAmmoCount(hero.gear,amSniperRifle)
if availableTeleports < 2 then
AddAmmo(hero.gear, amTeleport, availableTeleports + 1 )
end
if availableSniper < 3 then
AddAmmo(hero.gear, amSniperRifle, availableSniper + 1 )
end
end
end
function onPrecise()
if GameTime > 3000 then
SetAnimSkip(true)
end
end
-------------- EVENTS ------------------
function onHeroDeath(gear)
if not GetHealth(hero.gear) then
return true
end
return false
end
function onHeroWin(gear)
local enemies = enemiesOdd
for i=1,table.getn(enemiesEven) do
table.insert(enemies, enemiesEven[i])
end
local allDead = true
for i=1,table.getn(enemies) do
if GetHealth(enemies[i].gear) then
allDead = false
break
end
end
return allDead
end
-------------- ACTIONS ------------------
-- game ends anyway but I want to sent custom stats probably...
function heroDeath(gear)
SendStat('siGameResult', loc("Hog Solo lost, try again!")) --1
SendStat('siCustomAchievement', loc("You have to eliminate all the enemies")) --11
SendStat('siCustomAchievement', loc("Read the Challenge Objectives from within the mission for more details")) --11
SendStat('siPlayerKills','1',teamB.name)
SendStat('siPlayerKills','0',teamA.name)
EndGame()
end
function heroWin(gear)
SendStat('siGameResult', loc("Congratulations, you won!")) --1
SendStat('siCustomAchievement', loc("You complete the mission in "..TotalRounds.." rounds")) --11
-- TODO SendStat('siCustomAchievement', loc("You will gain some extra ammo the next time you play the Getting to the device mission")) --11
SendStat('siPlayerKills','1',teamA.name)
EndGame()
end
-------------- ANIMATIONS ------------------
function Skipanim(anim)
if goals[anim] ~= nil then
ShowMission(unpack(goals[anim]))
end
startBattle()
end
function AnimationSetup()
-- DIALOG 01 - Start, game instructions
AddSkipFunction(dialog01, Skipanim, {dialog01})
table.insert(dialog01, {func = AnimWait, args = {hero.gear, 3000}})
table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("Somewhere in the Fruit Planet Hog Solo got lost..."), 5000}})
table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("...and got ambushed by the Red Strawberies"), 5000}})
table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("Use your available weapons in order to eliminate the enemies"), 5000}})
table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("You can only use the Sniper Rifle or the Watermelon bomb"), 5000}})
table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("You'll have only 2 watermelon bombs during the game"), 5000}})
table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("You'll get an extra Sniper Rifle every time you kill an enemy hog with a limit of max 3 rifles"), 5000}})
table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("You'll get an extra Teleport every time you kill an enemy hog with a limit of max 2 teleports"), 5000}})
table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("The first turn will last 25 sec and every other turn 15 sec"), 5000}})
table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("If you skip the game your time left will be added to your next turn"), 5000}})
table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("Some parts of the land are indestructible"), 5000}})
table.insert(dialog01, {func = AnimWait, args = {hero.gear, 500}})
table.insert(dialog01, {func = startBattle, args = {hero.gear}})
end
------------------ Other Functions -------------------
function turnHogs()
if GetHealth(hero.gear) then
for i=1,table.getn(enemiesEven) do
if GetHealth(enemiesEven[i].gear) then
if GetX(enemiesEven[i].gear) < GetX(hero.gear) then
HogTurnLeft(enemiesEven[i].gear, false)
elseif GetX(enemiesEven[i].gear) > GetX(hero.gear) then
HogTurnLeft(enemiesEven[i].gear, true)
end
end
end
for i=1,table.getn(enemiesOdd) do
if GetHealth(enemiesOdd[i].gear) then
if GetX(enemiesOdd[i].gear) < GetX(hero.gear) then
HogTurnLeft(enemiesOdd[i].gear, false)
elseif GetX(enemiesOdd[i].gear) > GetX(hero.gear) then
HogTurnLeft(enemiesOdd[i].gear, true)
end
end
end
end
end
function startBattle()
AnimSwitchHog(enemiesOdd[table.getn(enemiesOdd)].gear)
TurnTimeLeft = 0
-- these 2 are needed in order hero has 10 sec more in the first turn
timeLeft = 10000
AddAmmo(hero.gear, amSkip, 0)
end