share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/ice01.lua
branchspacecampaign
changeset 9386 808d38b2182c
parent 9384 557ae509547b
child 9388 790d4f7d57d1
equal deleted inserted replaced
9384:557ae509547b 9386:808d38b2182c
     8 -- TODO
     8 -- TODO
     9 -- alter map so hero may climb to the higher place
     9 -- alter map so hero may climb to the higher place
    10 -- maybe use rope challenge to go there
    10 -- maybe use rope challenge to go there
    11 -- add checkpoints
    11 -- add checkpoints
    12 -- fix the stats
    12 -- fix the stats
    13 -- add mines to the higher place/final stage
    13 -- Add first checkpoint save if icegun is taken
    14 
    14 
    15 HedgewarsScriptLoad("/Scripts/Locale.lua")
    15 HedgewarsScriptLoad("/Scripts/Locale.lua")
    16 HedgewarsScriptLoad("/Scripts/Animate.lua")
    16 HedgewarsScriptLoad("/Scripts/Animate.lua")
    17 
    17 
    18 ----------------- VARIABLES --------------------
    18 ----------------- VARIABLES --------------------
    19 -- globals
    19 -- globals
       
    20 local campaignName = loc("A Space Adventure")
       
    21 local missionName = loc("Ice planet, a frozen adventure!")
    20 local heroAtAntiFlyArea = false
    22 local heroAtAntiFlyArea = false
    21 local heroVisitedAntiFlyArea = false
    23 local heroVisitedAntiFlyArea = false
    22 local heroAtFinaleStep = false
    24 local heroAtFinaleStep = false
       
    25 local iceGunTaken = false
       
    26 local checkPointReached = 1 -- 1 is normal spawn
       
    27 -- dialogs
       
    28 local dialog01 = {}
       
    29 -- mission objectives
       
    30 local goals = {
       
    31 	[dialog01] = {missionName, loc("Getting ready"), loc("Collect the icegun and get the device part from Thanta"), 1, 4500},
       
    32 }
    23 -- crates
    33 -- crates
    24 local icegunY = 1950
    34 local icegunY = 1950
    25 local icegunX = 260
    35 local icegunX = 260
    26 -- hogs
    36 -- hogs
    27 local hero = {}
    37 local hero = {}
    72 	Seed = 1
    82 	Seed = 1
    73 	--GameFlags = gfDisableWind
    83 	--GameFlags = gfDisableWind
    74 	TurnTime = 25000
    84 	TurnTime = 25000
    75 	CaseFreq = 0
    85 	CaseFreq = 0
    76 	MinesNum = 0
    86 	MinesNum = 0
    77 	MinesTime = 3000
    87 	MinesTime = 1
    78 	Explosives = 0
    88 	Explosives = 0
    79 	Delay = 5 
    89 	Delay = 3
    80 	Map = "ice01_map"
    90 	Map = "ice01_map"
    81 	Theme = "Snow"
    91 	Theme = "Snow"
    82 	
    92 	
    83 	-- Hog Solo
    93 	-- Hog Solo
    84 	AddTeam(teamC.name, teamC.color, "Bone", "Island", "HillBilly", "cm_birdy")
    94 	AddTeam(teamC.name, teamC.color, "Bone", "Island", "HillBilly", "cm_birdy")
   103 	HogTurnLeft(bandit4.gear, true)
   113 	HogTurnLeft(bandit4.gear, true)
   104 	bandit5.gear = AddHog(bandit5.name, 1, 100, "tophats")
   114 	bandit5.gear = AddHog(bandit5.name, 1, 100, "tophats")
   105 	AnimSetGearPosition(bandit5.gear, bandit5.x, bandit5.y)
   115 	AnimSetGearPosition(bandit5.gear, bandit5.x, bandit5.y)
   106 	HogTurnLeft(bandit5.gear, true)
   116 	HogTurnLeft(bandit5.gear, true)
   107 	
   117 	
       
   118 	-- get the check point
       
   119 	if tonumber(GetCampaignVar("Ice01CheckPoint")) then
       
   120 		checkPointReached = tonumber(GetCampaignVar("Ice01CheckPoint"))
       
   121 	end
       
   122 	
       
   123 	if checkPointReached == 1 then
       
   124 		-- Start of the game
       
   125 	elseif checkPointReached == 2 then
       
   126 		AnimSetGearPosition(hero.gear, 840, 1650)
       
   127 	end
       
   128 	
   108 	AnimInit()
   129 	AnimInit()
   109 	AnimationSetup()	
   130 	AnimationSetup()	
   110 end
   131 end
   111 
   132 
   112 function onGameStart()
   133 function onGameStart()
   118 	AddGear(1622, 945, gtMine, 0, 0, 0, 0)
   139 	AddGear(1622, 945, gtMine, 0, 0, 0, 0)
   119 	AddGear(1645, 950, gtMine, 0, 0, 0, 0)
   140 	AddGear(1645, 950, gtMine, 0, 0, 0, 0)
   120 	AddGear(1655, 960, gtMine, 0, 0, 0, 0)
   141 	AddGear(1655, 960, gtMine, 0, 0, 0, 0)
   121 	AddGear(1665, 965, gtMine, 0, 0, 0, 0)
   142 	AddGear(1665, 965, gtMine, 0, 0, 0, 0)
   122 	
   143 	
   123 	
       
   124 	AddGear(1800, 1000, gtMine, 0, 0, 0, 0)
   144 	AddGear(1800, 1000, gtMine, 0, 0, 0, 0)
   125 	AddGear(1810, 1005, gtMine, 0, 0, 0, 0)
   145 	AddGear(1810, 1005, gtMine, 0, 0, 0, 0)
   126 	AddGear(1820, 1010, gtMine, 0, 0, 0, 0)
   146 	AddGear(1820, 1010, gtMine, 0, 0, 0, 0)
   127 	AddGear(1830, 1015, gtMine, 0, 0, 0, 0)
   147 	AddGear(1830, 1015, gtMine, 0, 0, 0, 0)
   128 	AddGear(1840, 1020, gtMine, 0, 0, 0, 0)
   148 	AddGear(1840, 1020, gtMine, 0, 0, 0, 0)
   129 	
   149 	
   130 	
       
   131 	AddGear(1900, 1020, gtMine, 0, 0, 0, 0)
   150 	AddGear(1900, 1020, gtMine, 0, 0, 0, 0)
   132 	AddGear(1910, 1020, gtMine, 0, 0, 0, 0)
   151 	AddGear(1910, 1020, gtMine, 0, 0, 0, 0)
   133 	AddGear(1920, 1020, gtMine, 0, 0, 0, 0)
   152 	AddGear(1920, 1020, gtMine, 0, 0, 0, 0)
   134 	AddGear(1930, 1030, gtMine, 0, 0, 0, 0)
   153 	AddGear(1930, 1030, gtMine, 0, 0, 0, 0)
   135 	AddGear(1940, 1040, gtMine, 0, 0, 0, 0)
   154 	AddGear(1940, 1040, gtMine, 0, 0, 0, 0)
   136 	
       
   137 	
   155 	
   138 	AddGear(2130, 1110, gtMine, 0, 0, 0, 0)
   156 	AddGear(2130, 1110, gtMine, 0, 0, 0, 0)
   139 	AddGear(2140, 1120, gtMine, 0, 0, 0, 0)
   157 	AddGear(2140, 1120, gtMine, 0, 0, 0, 0)
   140 	AddGear(2180, 1120, gtMine, 0, 0, 0, 0)
   158 	AddGear(2180, 1120, gtMine, 0, 0, 0, 0)
   141 	AddGear(2200, 1130, gtMine, 0, 0, 0, 0)
   159 	AddGear(2200, 1130, gtMine, 0, 0, 0, 0)
   158 	AddEvent(onHeroFinalStep, {hero.gear}, heroFinalStep, {hero.gear}, 0)
   176 	AddEvent(onHeroFinalStep, {hero.gear}, heroFinalStep, {hero.gear}, 0)
   159 	AddEvent(onAntiFlyArea, {hero.gear}, antiFlyArea, {hero.gear}, 1)
   177 	AddEvent(onAntiFlyArea, {hero.gear}, antiFlyArea, {hero.gear}, 1)
   160 	AddEvent(onNonAntiFlyArea, {hero.gear}, nonAntiFlyArea, {hero.gear}, 1)
   178 	AddEvent(onNonAntiFlyArea, {hero.gear}, nonAntiFlyArea, {hero.gear}, 1)
   161 	
   179 	
   162 	AddAmmo(hero.gear, amJetpack, 99)
   180 	AddAmmo(hero.gear, amJetpack, 99)
   163 	AddAmmo(hero.gear, amBazooka, 1)
       
   164 	AddAmmo(bandit1.gear, amBazooka, 5)
   181 	AddAmmo(bandit1.gear, amBazooka, 5)
   165 	AddAmmo(bandit2.gear, amBazooka, 4)
   182 	AddAmmo(bandit2.gear, amBazooka, 4)
   166 	AddAmmo(bandit3.gear, amMine, 2)
   183 	AddAmmo(bandit3.gear, amMine, 2)
   167 	AddAmmo(bandit3.gear, amGrenade, 3)
   184 	AddAmmo(bandit3.gear, amGrenade, 3)
   168 	AddAmmo(bandit4.gear, amBazooka, 5)
   185 	AddAmmo(bandit4.gear, amBazooka, 5)
   169 	AddAmmo(bandit5.gear, amBazooka, 5)
   186 	AddAmmo(bandit5.gear, amBazooka, 5)
   170 	SpawnAmmoCrate(icegunX, icegunY, amIceGun)
   187 	
       
   188 	if checkPointReached == 1 then
       
   189 		AddAmmo(hero.gear, amBazooka, 1)
       
   190 		SpawnAmmoCrate(icegunX, icegunY, amIceGun)
       
   191 		AddEvent(onColumnCheckPoint, {hero.gear}, columnCheckPoint, {hero.gear}, 0)
       
   192 		AddEvent(onHeroAtIceGun, {hero.gear}, heroAtIceGun, {hero.gear}, 0)
       
   193 		AddAnim(dialog01)
       
   194 	elseif checkPointReached == 2 then		
       
   195 		AddAmmo(hero.gear, amIceGun, 8)
       
   196 	end
   171 	
   197 	
   172 end
   198 end
   173 
   199 
   174 function onNewTurn()		
   200 function onNewTurn()		
   175 	-- round has to start if hero goes near the column
   201 	-- round has to start if hero goes near the column
   202 	if gear == hero.gear then
   228 	if gear == hero.gear then
   203 		hero.dead = true
   229 		hero.dead = true
   204 	end
   230 	end
   205 end
   231 end
   206 
   232 
       
   233 function onPrecise()
       
   234 	if GameTime > 3000 then
       
   235 		SetAnimSkip(true)   
       
   236 	end
       
   237 end
       
   238 
   207 -------------- EVENTS ------------------
   239 -------------- EVENTS ------------------
   208 
   240 
   209 function onAntiFlyArea(gear)
   241 function onAntiFlyArea(gear)
   210 	if not hero.dead and (GetX(gear) > 860 or GetY(gear) < 1400) and not heroAtAntiFlyArea then
   242 	if not hero.dead and (GetX(gear) > 860 or GetY(gear) < 1400) and not heroAtAntiFlyArea then
   211 		return true
   243 		return true
   227 	return false
   259 	return false
   228 end
   260 end
   229 
   261 
   230 function onHeroFinalStep(gear)
   262 function onHeroFinalStep(gear)
   231 	if not hero.dead and GetY(gear) < 900 and GetX(gear) > 1400 then
   263 	if not hero.dead and GetY(gear) < 900 and GetX(gear) > 1400 then
       
   264 		return true
       
   265 	end
       
   266 	return false
       
   267 end
       
   268 
       
   269 function onColumnCheckPoint(gear)
       
   270 	if not hero.dead and iceGunTaken and GetX(gear) < 870 and GetX(gear) > 850 and GetY(gear) > 1500 and StoppedGear(gear) then
       
   271 		return true
       
   272 	end
       
   273 	return false
       
   274 end
       
   275 
       
   276 function onHeroAtIceGun(gear)
       
   277 	if not hero.dead and GetX(gear) < icegunX+15 and GetX(gear) > icegunX-15 and GetY(gear) > icegunY-15 and GetY(gear) < icegunY+15 then
   232 		return true
   278 		return true
   233 	end
   279 	end
   234 	return false
   280 	return false
   235 end
   281 end
   236 
   282 
   264 
   310 
   265 function heroFinalStep(gear)
   311 function heroFinalStep(gear)
   266 	heroAtFinaleStep = true
   312 	heroAtFinaleStep = true
   267 end
   313 end
   268 
   314 
       
   315 function columnCheckPoint(gear)
       
   316 	SaveCampaignVar("Ice01CheckPoint", "2")
       
   317 	WriteLnToConsole("I AM HERE")
       
   318 	AnimCaption(hero.gear, loc("Checkpoint reached!"), 5000)
       
   319 end
       
   320 
       
   321 function heroAtIceGun(gear)
       
   322 	iceGunTaken=true
       
   323 end
       
   324 
   269 -------------- ANIMATIONS ------------------
   325 -------------- ANIMATIONS ------------------
   270 
   326 
       
   327 function Skipanim(anim)
       
   328 	if goals[anim] ~= nil then
       
   329 		ShowMission(unpack(goals[anim]))
       
   330     end
       
   331 end
       
   332 
   271 function AnimationSetup()
   333 function AnimationSetup()
   272 
   334 	-- DIALOG 01 - Start, welcome to moon
   273 end
   335 	AddSkipFunction(dialog01, Skipanim, {dialog01})
       
   336 	table.insert(dialog01, {func = AnimWait, args = {hero.gear, 3000}})
       
   337 	table.insert(dialog01, {func = AnimCaption, args = {hero.gear, loc("In the ice planet, where ice rules..."), 5000}})
       
   338 	table.insert(dialog01, {func = AnimSay, args = {ally.gear, loc("Finaly you are here..."), SAY_SAY, 2000}})
       
   339 	table.insert(dialog01, {func = AnimWait, args = {hero.gear, 2000}})
       
   340 	table.insert(dialog01, {func = AnimSay, args = {hero.gear, loc("Hi! Nice to meet you"), SAY_SAY, 3000}})
       
   341 	table.insert(dialog01, {func = AnimWait, args = {ally.gear, 2000}})
       
   342 	table.insert(dialog01, {func = AnimSay, args = {ally.gear, loc("Listen carefuly! The bandit leader, Thanta has recently found a very strange device"), SAY_SAY, 4000}})
       
   343 	table.insert(dialog01, {func = AnimSay, args = {ally.gear, loc("He doesn't know it but this device is a part of the antigravity device"), SAY_SAY, 2500}})
       
   344 	table.insert(dialog01, {func = AnimWait, args = {hero.gear, 8000}})
       
   345 	table.insert(dialog01, {func = AnimSay, args = {hero.gear, loc("Nice, then I should get the part as soon as possible!"), SAY_SAY, 4000}})
       
   346 	table.insert(dialog01, {func = AnimWait, args = {ally.gear, 4000}})
       
   347 	table.insert(dialog01, {func = AnimSay, args = {ally.gear, loc("Be careful, your gadgets won't work in the bandit area. You should get an ice gun"), SAY_SAY, 7000}})
       
   348 	table.insert(dialog01, {func = AnimSay, args = {ally.gear, loc("There is one below us!"), SAY_SAY, 4000}})
       
   349 	table.insert(dialog01, {func = AnimWait, args = {hero.gear, 500}})
       
   350 	table.insert(dialog01, {func = AnimSwitchHog, args = {hero.gear}})
       
   351 end