share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/ice01.lua
changeset 9758 3b8058b251b8
parent 9757 9be28be004d4
child 9759 0efa9672c000
equal deleted inserted replaced
9757:9be28be004d4 9758:3b8058b251b8
    88 	MinesTime = 1
    88 	MinesTime = 1
    89 	Explosives = 0
    89 	Explosives = 0
    90 	Delay = 3
    90 	Delay = 3
    91 	Map = "ice01_map"
    91 	Map = "ice01_map"
    92 	Theme = "Snow"
    92 	Theme = "Snow"
    93 	
    93 
    94 	-- get the check point
    94 	-- get the check point
    95 	checkPointReached = initCheckpoint("ice01")
    95 	checkPointReached = initCheckpoint("ice01")
    96 	-- get hero health
    96 	-- get hero health
    97 	local heroHealth = 100
    97 	local heroHealth = 100
    98 	if tonumber(GetCampaignVar("HeroHealth")) then
    98 	if tonumber(GetCampaignVar("HeroHealth")) then
    99 		heroHealth = tonumber(GetCampaignVar("HeroHealth"))
    99 		heroHealth = tonumber(GetCampaignVar("HeroHealth"))
   100 	end
   100 	end
   101 	
   101 
   102 	if heroHealth ~= 100 then
   102 	if heroHealth ~= 100 then
   103 		heroHealth = heroHealth + 5
   103 		heroHealth = heroHealth + 5
   104 		if heroHealth > 100 then
   104 		if heroHealth > 100 then
   105 			heroHealth = 100
   105 			heroHealth = 100
   106 		end
   106 		end
   107 		SaveCampaignVar("HeroHealth", heroHealth)	
   107 		SaveCampaignVar("HeroHealth", heroHealth)
   108 	end
   108 	end
   109 	
   109 
   110 	-- Hog Solo
   110 	-- Hog Solo
   111 	AddTeam(teamC.name, teamC.color, "Bone", "Island", "HillBilly", "cm_birdy")
   111 	AddTeam(teamC.name, teamC.color, "Bone", "Island", "HillBilly", "cm_birdy")
   112 	hero.gear = AddHog(hero.name, 0, heroHealth, "war_desertgrenadier1")
   112 	hero.gear = AddHog(hero.name, 0, heroHealth, "war_desertgrenadier1")
   113 	AnimSetGearPosition(hero.gear, hero.x, hero.y)
   113 	AnimSetGearPosition(hero.gear, hero.x, hero.y)
   114 	HogTurnLeft(hero.gear, true)
   114 	HogTurnLeft(hero.gear, true)
   117 	ally.gear = AddHog(ally.name, 0, 100, "war_airwarden02")
   117 	ally.gear = AddHog(ally.name, 0, 100, "war_airwarden02")
   118 	AnimSetGearPosition(ally.gear, ally.x, ally.y)
   118 	AnimSetGearPosition(ally.gear, ally.x, ally.y)
   119 	-- Frozen Bandits
   119 	-- Frozen Bandits
   120 	AddTeam(teamB.name, teamB.color, "Bone", "Island", "HillBilly", "cm_birdy")
   120 	AddTeam(teamB.name, teamB.color, "Bone", "Island", "HillBilly", "cm_birdy")
   121 	bandit1.gear = AddHog(bandit1.name, 1, 120, "Santa")
   121 	bandit1.gear = AddHog(bandit1.name, 1, 120, "Santa")
   122 	AnimSetGearPosition(bandit1.gear, bandit1.x, bandit1.y)	
   122 	AnimSetGearPosition(bandit1.gear, bandit1.x, bandit1.y)
   123 	HogTurnLeft(bandit1.gear, true)
   123 	HogTurnLeft(bandit1.gear, true)
   124 	bandit2.gear = AddHog(bandit2.name, 1, 100, "ushanka")
   124 	bandit2.gear = AddHog(bandit2.name, 1, 100, "ushanka")
   125 	AnimSetGearPosition(bandit2.gear, bandit2.x, bandit2.y)
   125 	AnimSetGearPosition(bandit2.gear, bandit2.x, bandit2.y)
   126 	bandit3.gear = AddHog(bandit3.name, 1, 100, "thug")
   126 	bandit3.gear = AddHog(bandit3.name, 1, 100, "thug")
   127 	AnimSetGearPosition(bandit3.gear, bandit3.x, bandit3.y)
   127 	AnimSetGearPosition(bandit3.gear, bandit3.x, bandit3.y)
   129 	AnimSetGearPosition(bandit4.gear, bandit4.x, bandit4.y)
   129 	AnimSetGearPosition(bandit4.gear, bandit4.x, bandit4.y)
   130 	HogTurnLeft(bandit4.gear, true)
   130 	HogTurnLeft(bandit4.gear, true)
   131 	bandit5.gear = AddHog(bandit5.name, 1, 40, "Sniper")
   131 	bandit5.gear = AddHog(bandit5.name, 1, 40, "Sniper")
   132 	AnimSetGearPosition(bandit5.gear, bandit5.x, bandit5.y)
   132 	AnimSetGearPosition(bandit5.gear, bandit5.x, bandit5.y)
   133 	HogTurnLeft(bandit5.gear, true)
   133 	HogTurnLeft(bandit5.gear, true)
   134 	
   134 
   135 	if checkPointReached == 1 then
   135 	if checkPointReached == 1 then
   136 		-- Start of the game
   136 		-- Start of the game
   137 	elseif checkPointReached == 2 then
   137 	elseif checkPointReached == 2 then
   138 		iceGunTaken = true
   138 		iceGunTaken = true
   139 		AnimSetGearPosition(hero.gear, 840, 1650)
   139 		AnimSetGearPosition(hero.gear, 840, 1650)
   140 	elseif checkPointReached == 3 then		
   140 	elseif checkPointReached == 3 then
   141 		iceGunTaken = true
   141 		iceGunTaken = true
   142 		heroAtFinalStep = true
   142 		heroAtFinalStep = true
   143 		heroVisitedAntiFlyArea = true
   143 		heroVisitedAntiFlyArea = true
   144 		AnimSetGearPosition(hero.gear, 1450, 910)
   144 		AnimSetGearPosition(hero.gear, 1450, 910)
   145 	end
   145 	end
   146 	
   146 
   147 	AnimInit()
   147 	AnimInit()
   148 	AnimationSetup()	
   148 	AnimationSetup()
   149 end
   149 end
   150 
   150 
   151 function onGameStart()
   151 function onGameStart()
   152 	AnimWait(hero.gear, 3000)
   152 	AnimWait(hero.gear, 3000)
   153 	FollowGear(hero.gear)
   153 	FollowGear(hero.gear)
   154 	
   154 
   155 	-- Add mines
   155 	-- Add mines
   156 	AddGear(1612, 940, gtMine, 0, 0, 0, 0)
   156 	AddGear(1612, 940, gtMine, 0, 0, 0, 0)
   157 	AddGear(1622, 945, gtMine, 0, 0, 0, 0)
   157 	AddGear(1622, 945, gtMine, 0, 0, 0, 0)
   158 	AddGear(1645, 950, gtMine, 0, 0, 0, 0)
   158 	AddGear(1645, 950, gtMine, 0, 0, 0, 0)
   159 	AddGear(1655, 960, gtMine, 0, 0, 0, 0)
   159 	AddGear(1655, 960, gtMine, 0, 0, 0, 0)
   160 	AddGear(1665, 965, gtMine, 0, 0, 0, 0)
   160 	AddGear(1665, 965, gtMine, 0, 0, 0, 0)
   161 	
   161 
   162 	AddGear(1800, 1000, gtMine, 0, 0, 0, 0)
   162 	AddGear(1800, 1000, gtMine, 0, 0, 0, 0)
   163 	AddGear(1810, 1005, gtMine, 0, 0, 0, 0)
   163 	AddGear(1810, 1005, gtMine, 0, 0, 0, 0)
   164 	AddGear(1820, 1010, gtMine, 0, 0, 0, 0)
   164 	AddGear(1820, 1010, gtMine, 0, 0, 0, 0)
   165 	AddGear(1830, 1015, gtMine, 0, 0, 0, 0)
   165 	AddGear(1830, 1015, gtMine, 0, 0, 0, 0)
   166 	AddGear(1840, 1020, gtMine, 0, 0, 0, 0)
   166 	AddGear(1840, 1020, gtMine, 0, 0, 0, 0)
   167 	
   167 
   168 	AddGear(1900, 1020, gtMine, 0, 0, 0, 0)
   168 	AddGear(1900, 1020, gtMine, 0, 0, 0, 0)
   169 	AddGear(1910, 1020, gtMine, 0, 0, 0, 0)
   169 	AddGear(1910, 1020, gtMine, 0, 0, 0, 0)
   170 	AddGear(1920, 1020, gtMine, 0, 0, 0, 0)
   170 	AddGear(1920, 1020, gtMine, 0, 0, 0, 0)
   171 	AddGear(1930, 1030, gtMine, 0, 0, 0, 0)
   171 	AddGear(1930, 1030, gtMine, 0, 0, 0, 0)
   172 	AddGear(1940, 1040, gtMine, 0, 0, 0, 0)
   172 	AddGear(1940, 1040, gtMine, 0, 0, 0, 0)
   173 	
   173 
   174 	AddGear(2130, 1110, gtMine, 0, 0, 0, 0)
   174 	AddGear(2130, 1110, gtMine, 0, 0, 0, 0)
   175 	AddGear(2140, 1120, gtMine, 0, 0, 0, 0)
   175 	AddGear(2140, 1120, gtMine, 0, 0, 0, 0)
   176 	AddGear(2180, 1120, gtMine, 0, 0, 0, 0)
   176 	AddGear(2180, 1120, gtMine, 0, 0, 0, 0)
   177 	AddGear(2200, 1130, gtMine, 0, 0, 0, 0)
   177 	AddGear(2200, 1130, gtMine, 0, 0, 0, 0)
   178 	AddGear(2210, 1130, gtMine, 0, 0, 0, 0)
   178 	AddGear(2210, 1130, gtMine, 0, 0, 0, 0)
   179 	
   179 
   180 	local x=2300
   180 	local x=2300
   181 	local step=0
   181 	local step=0
   182 	while x<3100 do
   182 	while x<3100 do
   183 		AddGear(x, 1150, gtMine, 0, 0, 0, 0)
   183 		AddGear(x, 1150, gtMine, 0, 0, 0, 0)
   184 		step = step + 1
   184 		step = step + 1
   187 			x = x + math.random(100,300)
   187 			x = x + math.random(100,300)
   188 		else
   188 		else
   189 			x = x + math.random(10,30)
   189 			x = x + math.random(10,30)
   190 		end
   190 		end
   191 	end
   191 	end
   192 	
   192 
   193 	AddEvent(onHeroDeath, {hero.gear}, heroDeath, {hero.gear}, 0)
   193 	AddEvent(onHeroDeath, {hero.gear}, heroDeath, {hero.gear}, 0)
   194 	AddEvent(onHeroFinalStep, {hero.gear}, heroFinalStep, {hero.gear}, 0)
   194 	AddEvent(onHeroFinalStep, {hero.gear}, heroFinalStep, {hero.gear}, 0)
   195 	AddEvent(onAntiFlyArea, {hero.gear}, antiFlyArea, {hero.gear}, 1)
   195 	AddEvent(onAntiFlyArea, {hero.gear}, antiFlyArea, {hero.gear}, 1)
   196 	AddEvent(onAntiFlyAreaVelocity, {hero.gear}, antiFlyAreaVelocity, {hero.gear}, 1)
   196 	AddEvent(onAntiFlyAreaVelocity, {hero.gear}, antiFlyAreaVelocity, {hero.gear}, 1)
   197 	AddEvent(onNonAntiFlyArea, {hero.gear}, nonAntiFlyArea, {hero.gear}, 1)
   197 	AddEvent(onNonAntiFlyArea, {hero.gear}, nonAntiFlyArea, {hero.gear}, 1)
   198 	AddEvent(onThantaDeath, {bandit1.gear}, thantaDeath, {bandit1.gear}, 0)
   198 	AddEvent(onThantaDeath, {bandit1.gear}, thantaDeath, {bandit1.gear}, 0)
   199 	AddEvent(onHeroWin, {hero.gear}, heroWin, {hero.gear}, 0)
   199 	AddEvent(onHeroWin, {hero.gear}, heroWin, {hero.gear}, 0)
   200 	
   200 
   201 	AddAmmo(hero.gear, amJetpack, 99)
   201 	AddAmmo(hero.gear, amJetpack, 99)
   202 	AddAmmo(bandit1.gear, amBazooka, 5)
   202 	AddAmmo(bandit1.gear, amBazooka, 5)
   203 	AddAmmo(bandit2.gear, amBazooka, 4)
   203 	AddAmmo(bandit2.gear, amBazooka, 4)
   204 	AddAmmo(bandit3.gear, amMine, 2)
   204 	AddAmmo(bandit3.gear, amMine, 2)
   205 	AddAmmo(bandit3.gear, amGrenade, 3)
   205 	AddAmmo(bandit3.gear, amGrenade, 3)
   206 	AddAmmo(bandit4.gear, amBazooka, 5)
   206 	AddAmmo(bandit4.gear, amBazooka, 5)
   207 	AddAmmo(bandit5.gear, amBazooka, 5)
   207 	AddAmmo(bandit5.gear, amBazooka, 5)
   208 	
   208 
   209 	if checkPointReached == 1 then
   209 	if checkPointReached == 1 then
   210 		AddAmmo(hero.gear, amBazooka, 1)
   210 		AddAmmo(hero.gear, amBazooka, 1)
   211 		SpawnAmmoCrate(icegunX, icegunY, amIceGun)
   211 		SpawnAmmoCrate(icegunX, icegunY, amIceGun)
   212 		AddEvent(onColumnCheckPoint, {hero.gear}, columnCheckPoint, {hero.gear}, 0)
   212 		AddEvent(onColumnCheckPoint, {hero.gear}, columnCheckPoint, {hero.gear}, 0)
   213 		AddEvent(onHeroAtIceGun, {hero.gear}, heroAtIceGun, {hero.gear}, 0)
   213 		AddEvent(onHeroAtIceGun, {hero.gear}, heroAtIceGun, {hero.gear}, 0)
   217 		AnimCaption(hero.gear, loc("Go to Thanta and get the device part!"), 5000)
   217 		AnimCaption(hero.gear, loc("Go to Thanta and get the device part!"), 5000)
   218 	elseif checkPointReached == 3 then
   218 	elseif checkPointReached == 3 then
   219 		AddAmmo(hero.gear, amIceGun, 6)
   219 		AddAmmo(hero.gear, amIceGun, 6)
   220 		AnimCaption(hero.gear, loc("Go to Thanta and get the device part!"), 5000)
   220 		AnimCaption(hero.gear, loc("Go to Thanta and get the device part!"), 5000)
   221 	end
   221 	end
   222 	
   222 
   223 	SendHealthStatsOff()
   223 	SendHealthStatsOff()
   224 end
   224 end
   225 
   225 
   226 function onNewTurn()
   226 function onNewTurn()
   227 	heroDamageAtCurrentTurn = 0
   227 	heroDamageAtCurrentTurn = 0
   228 	-- round has to start if hero goes near the column
   228 	-- round has to start if hero goes near the column
   229 	if not heroVisitedAntiFlyArea and CurrentHedgehog ~= hero.gear then
   229 	if not heroVisitedAntiFlyArea and CurrentHedgehog ~= hero.gear then
   230 		TurnTimeLeft = 0
   230 		TurnTimeLeft = 0
   231 	elseif not heroVisitedAntiFlyArea and CurrentHedgehog == hero.gear then
   231 	elseif not heroVisitedAntiFlyArea and CurrentHedgehog == hero.gear then
   232 		TurnTimeLeft = -1
   232 		TurnTimeLeft = -1
   233 	elseif not heroAtFinalStep and (CurrentHedgehog == bandit1.gear or CurrentHedgehog == bandit4.gear or CurrentHedgehog == bandit5.gear) then		
   233 	elseif not heroAtFinalStep and (CurrentHedgehog == bandit1.gear or CurrentHedgehog == bandit4.gear or CurrentHedgehog == bandit5.gear) then
   234 		AnimSwitchHog(hero.gear)
   234 		AnimSwitchHog(hero.gear)
   235 		TurnTimeLeft = 0
   235 		TurnTimeLeft = 0
   236 	elseif heroAtFinalStep and (CurrentHedgehog == bandit2.gear or CurrentHedgehog == bandit3.gear) then
   236 	elseif heroAtFinalStep and (CurrentHedgehog == bandit2.gear or CurrentHedgehog == bandit3.gear) then
   237 		if (GetHealth(bandit1.gear) and GetEffect(bandit1.gear,heFrozen) > 256) and
   237 		if (GetHealth(bandit1.gear) and GetEffect(bandit1.gear,heFrozen) > 256) and
   238 			((GetHealth(bandit4.gear) and GetEffect(bandit4.gear,heFrozen) > 256) or not GetHealth(bandit4.gear)) and
   238 			((GetHealth(bandit4.gear) and GetEffect(bandit4.gear,heFrozen) > 256) or not GetHealth(bandit4.gear)) and
   289 	if ShowAnimation() == false then
   289 	if ShowAnimation() == false then
   290 		return
   290 		return
   291 	end
   291 	end
   292 	ExecuteAfterAnimations()
   292 	ExecuteAfterAnimations()
   293 	CheckEvents()
   293 	CheckEvents()
   294 	
   294 
   295 	if GetEffect(bandit1.gear, heFrozen) > 256 and not bandit1.frozen then
   295 	if GetEffect(bandit1.gear, heFrozen) > 256 and not bandit1.frozen then
   296 		bandit1.frozen = true
   296 		bandit1.frozen = true
   297 		SetEffect(bandit1.gear, heFrozen, 9999999999)
   297 		SetEffect(bandit1.gear, heFrozen, 9999999999)
   298 		bandit1.roundsToUnfreeze = 1
   298 		bandit1.roundsToUnfreeze = 1
   299 	end
   299 	end
   321 	end
   321 	end
   322 end
   322 end
   323 
   323 
   324 function onPrecise()
   324 function onPrecise()
   325 	if GameTime > 3000 then
   325 	if GameTime > 3000 then
   326 		SetAnimSkip(true)   
   326 		SetAnimSkip(true)
   327 	end
   327 	end
   328 end
   328 end
   329 
   329 
   330 function onGearDamage(gear, damage)
   330 function onGearDamage(gear, damage)
   331 	if gear == hero.gear then
   331 	if gear == hero.gear then
   402 -------------- ACTIONS ------------------
   402 -------------- ACTIONS ------------------
   403 
   403 
   404 function antiFlyArea(gear)
   404 function antiFlyArea(gear)
   405 	heroAtAntiFlyArea = true
   405 	heroAtAntiFlyArea = true
   406 	if not heroVisitedAntiFlyArea then
   406 	if not heroVisitedAntiFlyArea then
   407 		TurnTimeLeft = 0        
   407 		TurnTimeLeft = 0
   408 		FollowGear(hero.gear)
   408 		FollowGear(hero.gear)
   409 		AnimSwitchHog(bandit1.gear)     
   409 		AnimSwitchHog(bandit1.gear)
   410 		FollowGear(hero.gear)
   410 		FollowGear(hero.gear)
   411 		TurnTimeLeft = 0
   411 		TurnTimeLeft = 0
   412 	end	
   412 	end
   413 	AddAmmo(hero.gear, amJetpack, 0)
   413 	AddAmmo(hero.gear, amJetpack, 0)
   414 	heroVisitedAntiFlyArea = true
   414 	heroVisitedAntiFlyArea = true
   415 end
   415 end
   416 
   416 
   417 function antiFlyAreaVelocity(gear)
   417 function antiFlyAreaVelocity(gear)
   508 	table.insert(dialog02, {func = AnimSay, args = {bandit1.gear, loc("Oh! Please spare me. You can take all my treasures!"), SAY_SAY, 3000}})
   508 	table.insert(dialog02, {func = AnimSay, args = {bandit1.gear, loc("Oh! Please spare me. You can take all my treasures!"), SAY_SAY, 3000}})
   509 	table.insert(dialog02, {func = AnimWait, args = {hero.gear, 5000}})
   509 	table.insert(dialog02, {func = AnimWait, args = {hero.gear, 5000}})
   510 	table.insert(dialog02, {func = AnimSay, args = {hero.gear, loc("I just want the strange device you found!"), SAY_SAY, 3000}})
   510 	table.insert(dialog02, {func = AnimSay, args = {hero.gear, loc("I just want the strange device you found!"), SAY_SAY, 3000}})
   511 	table.insert(dialog02, {func = AnimWait, args = {bandit1.gear, 4000}})
   511 	table.insert(dialog02, {func = AnimWait, args = {bandit1.gear, 4000}})
   512 	table.insert(dialog02, {func = AnimSay, args = {bandit1.gear, loc("Here! Take it..."), SAY_SAY, 3000}})
   512 	table.insert(dialog02, {func = AnimSay, args = {bandit1.gear, loc("Here! Take it..."), SAY_SAY, 3000}})
   513 	table.insert(dialog02, {func = actionsOnWin, args = {}})	
   513 	table.insert(dialog02, {func = actionsOnWin, args = {}})
   514 end
   514 end
   515 
   515 
   516 -------------- Other Functions -------------------
   516 -------------- Other Functions -------------------
   517 
   517 
   518 function actionsOnWin()
   518 function actionsOnWin()
   519 	saveCompletedStatus(4)	
   519 	saveCompletedStatus(4)
   520 	SendStat(siGameResult, loc("Congratulations, you acquired the device part!"))
   520 	SendStat(siGameResult, loc("Congratulations, you acquired the device part!"))
   521 	SendStat(siCustomAchievement, loc("At the end of the game your health was ")..GetHealth(hero.gear))
   521 	SendStat(siCustomAchievement, loc("At the end of the game your health was ")..GetHealth(hero.gear))
   522 	-- maybe add number of tries for each part?
   522 	-- maybe add number of tries for each part?
   523 	SendStat(siPlayerKills,'1',teamC.name)
   523 	SendStat(siPlayerKills,'1',teamC.name)
   524 	SendStat(siPlayerKills,'0',teamB.name)
   524 	SendStat(siPlayerKills,'0',teamB.name)