share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua
changeset 12521 1877ca9e8703
parent 12515 2df340544f25
child 12525 767920fd03a1
equal deleted inserted replaced
12520:22f2a586b9ca 12521:1877ca9e8703
    18 local campaignName = loc("A Space Adventure")
    18 local campaignName = loc("A Space Adventure")
    19 local missionName = loc("Searching in the dust")
    19 local missionName = loc("Searching in the dust")
    20 local heroIsInBattle = false
    20 local heroIsInBattle = false
    21 local ongoingBattle = 0
    21 local ongoingBattle = 0
    22 local cratesFound = 0
    22 local cratesFound = 0
    23 local checkPointReached = 1 -- 1 is normal spawn
       
    24 -- dialogs
    23 -- dialogs
    25 local dialog01 = {}
    24 local dialog01 = {}
    26 -- mission objectives
    25 -- mission objectives
    27 local goals = {
    26 local goals = {
    28 	[dialog01] = {missionName, loc("Getting ready"), loc("The device part is hidden in one of the crates! Go and get it!").."|"..
    27 	[dialog01] = {missionName, loc("Getting ready"), loc("The device part is hidden in one of the crates! Go and get it!").."|"..
    97 	HealthDecrease = 0
    96 	HealthDecrease = 0
    98 	WaterRise = 0
    97 	WaterRise = 0
    99 	Map = "desert01_map"
    98 	Map = "desert01_map"
   100 	Theme = "Desert"
    99 	Theme = "Desert"
   101 
   100 
   102 	-- get the check point
       
   103 	checkPointReached = initCheckpoint("desert01")
       
   104 	-- get hero health
   101 	-- get hero health
   105 	local heroHealth = 100
   102 	local heroHealth = 100
   106 	if checkPointReached > 1 and tonumber(GetCampaignVar("HeroHealth")) then
       
   107 		heroHealth = tonumber(GetCampaignVar("HeroHealth"))
       
   108 	end
       
   109 
   103 
   110 	-- Hog Solo
   104 	-- Hog Solo
   111 	AddTeam(teamC.name, teamC.color, "Bone", "Island", "HillBilly", "hedgewars")
   105 	AddTeam(teamC.name, teamC.color, "Bone", "Island", "HillBilly", "hedgewars")
   112 	hero.gear = AddHog(hero.name, 0, heroHealth, "war_desertgrenadier1")
   106 	hero.gear = AddHog(hero.name, 0, heroHealth, "war_desertgrenadier1")
   113 	AnimSetGearPosition(hero.gear, hero.x, hero.y)
   107 	AnimSetGearPosition(hero.gear, hero.x, hero.y)
   123 	smuggler2.gear = AddHog(smuggler2.name, 1, 100, "lambda")
   117 	smuggler2.gear = AddHog(smuggler2.name, 1, 100, "lambda")
   124 	AnimSetGearPosition(smuggler2.gear, smuggler2.x, smuggler2.y)
   118 	AnimSetGearPosition(smuggler2.gear, smuggler2.x, smuggler2.y)
   125 	smuggler3.gear = AddHog(smuggler3.name, 1, 100, "beefeater")
   119 	smuggler3.gear = AddHog(smuggler3.name, 1, 100, "beefeater")
   126 	AnimSetGearPosition(smuggler3.gear, smuggler3.x, smuggler3.y)
   120 	AnimSetGearPosition(smuggler3.gear, smuggler3.x, smuggler3.y)
   127 
   121 
   128 	if checkPointReached == 1 then
   122 	AnimInit(true)
   129 		-- Start of the game
       
   130 	elseif checkPointReached == 2 then
       
   131 		AnimSetGearPosition(hero.gear, 1050, 615)
       
   132 		HogTurnLeft(hero.gear, true)
       
   133 	elseif checkPointReached == 3 then
       
   134 		AnimSetGearPosition(hero.gear, 1680, 920)
       
   135 		HogTurnLeft(hero.gear, true)
       
   136 	elseif checkPointReached == 4 then
       
   137 		AnimSetGearPosition(hero.gear, 1160, 1180)
       
   138 	elseif checkPointReached == 5 then
       
   139 		local positions = GetCampaignVar("HogsPosition")
       
   140 		positions = split(positions,",")
       
   141 		local x
       
   142 		local y
       
   143 		if positions[1] then
       
   144 			x = positions[1]
       
   145 			y = positions[2]
       
   146 		else
       
   147 			-- this should *NEVER* happen, remove?
       
   148 			x = girderX+40
       
   149 			y = girderY-30
       
   150 		end
       
   151 		AnimSetGearPosition(hero.gear, x, y)
       
   152 	end
       
   153 
       
   154 	AnimInit()
       
   155 	AnimationSetup()
   123 	AnimationSetup()
   156 end
   124 end
   157 
   125 
   158 function onGameStart()
   126 function onGameStart()
   159 	AnimWait(hero.gear, 3000)
   127 	AnimWait(hero.gear, 3000)
   160 	FollowGear(hero.gear)
   128 	FollowGear(hero.gear)
   161 
   129 
   162 	AddEvent(onHeroDeath, {hero.gear}, heroDeath, {hero.gear}, 0)
   130 	AddEvent(onHeroDeath, {hero.gear}, heroDeath, {hero.gear}, 0)
   163 	AddEvent(onHeroAtFirstBattle, {hero.gear}, heroAtFirstBattle, {hero.gear}, 1)
   131 	AddEvent(onHeroAtFirstBattle, {hero.gear}, heroAtFirstBattle, {hero.gear}, 1)
   164 	AddEvent(onHeroAtCheckpoint4, {hero.gear}, heroAtCheckpoint4, {hero.gear}, 0)
       
   165 	AddEvent(onHeroAtThirdBattle, {hero.gear}, heroAtThirdBattle, {hero.gear}, 0)
   132 	AddEvent(onHeroAtThirdBattle, {hero.gear}, heroAtThirdBattle, {hero.gear}, 0)
   166 	AddEvent(onCheckForWin1, {hero.gear}, checkForWin1, {hero.gear}, 0)
   133 	AddEvent(onCheckForWin1, {hero.gear}, checkForWin1, {hero.gear}, 0)
   167 	AddEvent(onCheckForWin2, {hero.gear}, checkForWin2, {hero.gear}, 0)
   134 	AddEvent(onCheckForWin2, {hero.gear}, checkForWin2, {hero.gear}, 0)
   168 	AddEvent(onCrateDestroyed, {hero.gear}, crateDestroyed, {hero.gear}, 0)
   135 	AddEvent(onCrateDestroyed, {hero.gear}, crateDestroyed, {hero.gear}, 0)
   169 
   136 
   211 	while x < 2900 do
   178 	while x < 2900 do
   212 		AddGear(x, 470, gtMine, 0, 0, 0, 0)
   179 		AddGear(x, 470, gtMine, 0, 0, 0, 0)
   213 		x = x + GetRandom(13)+8
   180 		x = x + GetRandom(13)+8
   214 	end
   181 	end
   215 
   182 
   216 	if checkPointReached == 1 then
   183 	AddEvent(onHeroFleeFirstBattle, {hero.gear}, heroFleeFirstBattle, {hero.gear}, 1)
   217 		AddEvent(onHeroFleeFirstBattle, {hero.gear}, heroFleeFirstBattle, {hero.gear}, 1)
   184 	AddEvent(onHeroAtBattlePoint1, {hero.gear}, heroAtBattlePoint1, {hero.gear}, 0)
   218 		AddEvent(onHeroAtCheckpoint2, {hero.gear}, heroAtCheckpoint2, {hero.gear}, 0)
   185 	AddEvent(onHeroAtBattlePoint2, {hero.gear}, heroAtBattlePoint2, {hero.gear}, 0)
   219 		AddEvent(onHeroAtCheckpoint3, {hero.gear}, heroAtCheckpoint3, {hero.gear}, 0)
   186 	-- crates
   220 		-- crates
   187 	SpawnAmmoCrate(btorch1X, btorch1Y, amBlowTorch)
   221 		SpawnAmmoCrate(btorch1X, btorch1Y, amBlowTorch)
   188 	SpawnHealthCrate(680, 460)
   222 		SpawnHealthCrate(680, 460)
   189 	-- hero ammo
   223 		-- hero ammo
   190 	AddAmmo(hero.gear, amRope, 2)
   224 		AddAmmo(hero.gear, amRope, 2)
   191 	AddAmmo(hero.gear, amBazooka, 3)
   225 		AddAmmo(hero.gear, amBazooka, 3)
   192 	AddAmmo(hero.gear, amParachute, 1)
   226 		AddAmmo(hero.gear, amParachute, 1)
   193 	AddAmmo(hero.gear, amGrenade, 6)
   227 		AddAmmo(hero.gear, amGrenade, 6)
   194 	AddAmmo(hero.gear, amDEagle, 4)
   228 		AddAmmo(hero.gear, amDEagle, 4)
   195 	AddAmmo(hero.gear, amRCPlane, tonumber(getBonus(1)))
   229 		AddAmmo(hero.gear, amRCPlane, tonumber(getBonus(1)))
   196 
   230 
   197 	AddAnim(dialog01)
   231 		AddAnim(dialog01)
       
   232 	elseif checkPointReached == 2 or checkPointReached == 3 then
       
   233 		ShowMission(campaignName, missionName, loc("The device part is hidden in one of the crates! Go and get it!"), -amSkip, 0)
       
   234 		loadHeroAmmo()
       
   235 
       
   236 		secondBattle()
       
   237 	elseif checkPointReached == 4 or checkPointReached == 5 then
       
   238 		ShowMission(campaignName, missionName, loc("The part device is hidden in one of the crates! Go and get it!"), -amSkip, 0)
       
   239 		loadHeroAmmo()
       
   240 	end
       
   241 
   198 
   242 	SendHealthStatsOff()
   199 	SendHealthStatsOff()
   243 end
   200 end
   244 
   201 
   245 function onNewTurn()
   202 function onNewTurn()
   345 	end
   302 	end
   346 	return false
   303 	return false
   347 end
   304 end
   348 
   305 
   349 -- saves the location of the hero and prompts him for the second battle
   306 -- saves the location of the hero and prompts him for the second battle
   350 function onHeroAtCheckpoint2(gear)
   307 function onHeroAtBattlePoint1(gear)
   351 	if not hero.dead and GetX(hero.gear) > 1000 and GetX(hero.gear) < 1100
   308 	if not hero.dead and GetX(hero.gear) > 1000 and GetX(hero.gear) < 1100
   352 			and GetY(hero.gear) > 590 and GetY(hero.gear) < 700 and StoppedGear(hero.gear) then
   309 			and GetY(hero.gear) > 590 and GetY(hero.gear) < 700 and StoppedGear(hero.gear) then
   353 		return true
   310 		return true
   354 	end
   311 	end
   355 	return false
   312 	return false
   356 end
   313 end
   357 
   314 
   358 function onHeroAtCheckpoint3(gear)
   315 function onHeroAtBattlePoint2(gear)
   359 	if not hero.dead and GetX(hero.gear) > 1610 and GetX(hero.gear) < 1680
   316 	if not hero.dead and GetX(hero.gear) > 1610 and GetX(hero.gear) < 1680
   360 			and GetY(hero.gear) > 850 and GetY(hero.gear) < 1000 and StoppedGear(hero.gear) then
   317 			and GetY(hero.gear) > 850 and GetY(hero.gear) < 1000 and StoppedGear(hero.gear) then
   361 		return true
       
   362 	end
       
   363 	return false
       
   364 end
       
   365 
       
   366 function onHeroAtCheckpoint4(gear)
       
   367 	if not hero.dead and GetX(hero.gear) > 1110 and GetX(hero.gear) < 1300
       
   368 			and GetY(hero.gear) > 1100 and GetY(hero.gear) < 1220 then
       
   369 		return true
   318 		return true
   370 	end
   319 	end
   371 	return false
   320 	return false
   372 end
   321 end
   373 
   322 
   420 	EndTurn(true)
   369 	EndTurn(true)
   421 	heroIsInBattle = false
   370 	heroIsInBattle = false
   422 	ongoingBattle = 0
   371 	ongoingBattle = 0
   423 end
   372 end
   424 
   373 
   425 function heroAtCheckpoint2(gear)
   374 function heroAtBattlePoint1(gear)
   426 	if GetAmmoCount(hero.gear, amRope) > 0 or GetAmmoCount(hero.gear, amParachute) > 0 then
       
   427 		saveCheckPointLocal("2")
       
   428 	end
       
   429 	secondBattle()
   375 	secondBattle()
   430 end
   376 end
   431 
   377 
   432 function heroAtCheckpoint3(gear)
   378 function heroAtBattlePoint2(gear)
   433 	if GetAmmoCount(hero.gear, amRope) > 0 then
       
   434 		saveCheckPointLocal("3")
       
   435 	end
       
   436 	secondBattle()
   379 	secondBattle()
   437 end
       
   438 
       
   439 function heroAtCheckpoint4(gear)
       
   440 	saveCheckPointLocal("4")
       
   441 end
   380 end
   442 
   381 
   443 function heroAtThirdBattle(gear)
   382 function heroAtThirdBattle(gear)
   444 	heroIsInBattle = true
   383 	heroIsInBattle = true
   445 	ongoingBattle = 3
   384 	ongoingBattle = 3
   456 function checkForWin1(gear)
   395 function checkForWin1(gear)
   457 	checkForWin()
   396 	checkForWin()
   458 end
   397 end
   459 
   398 
   460 function checkForWin2(gear)
   399 function checkForWin2(gear)
   461 	-- ok lets place one more checkpoint as next part seems challenging without rope
       
   462 	if cratesFound ==  0 then
       
   463 		saveCheckPointLocal("5")
       
   464 		SaveCampaignVar("HogsPosition", GetX(hero.gear)..","..GetY(hero.gear))
       
   465 	end
       
   466 
       
   467 	checkForWin()
   400 	checkForWin()
   468 end
   401 end
   469 
   402 
   470 -------------- ANIMATIONS ------------------
   403 -------------- ANIMATIONS ------------------
   471 
   404 
   521 	AnimSay(smuggler2.gear, loc("This is seems like a wealthy hedgehog, nice ..."), SAY_THINK, 5000)
   454 	AnimSay(smuggler2.gear, loc("This is seems like a wealthy hedgehog, nice ..."), SAY_THINK, 5000)
   522 	AnimSwitchHog(smuggler2.gear)
   455 	AnimSwitchHog(smuggler2.gear)
   523 	EndTurn(true)
   456 	EndTurn(true)
   524 end
   457 end
   525 
   458 
   526 function saveCheckPointLocal(cpoint)
       
   527 	-- save checkpoint
       
   528 	saveCheckpoint(cpoint)
       
   529 	SaveCampaignVar("HeroHealth", GetHealth(hero.gear))
       
   530 	-- bazooka - grenade - rope - parachute - deagle - btorch - construct - portal - rcplane
       
   531 	SaveCampaignVar("HeroAmmo", GetAmmoCount(hero.gear, amBazooka)..GetAmmoCount(hero.gear, amGrenade)..
       
   532 			GetAmmoCount(hero.gear, amRope)..GetAmmoCount(hero.gear, amParachute)..GetAmmoCount(hero.gear, amDEagle)..
       
   533 			GetAmmoCount(hero.gear, amBlowTorch)..GetAmmoCount(hero.gear, amGirder)..
       
   534 			GetAmmoCount(hero.gear, amPortalGun)..GetAmmoCount(hero.gear, amRCPlane))
       
   535 	AnimCaption(hero.gear, loc("Checkpoint reached!"), 5000)
       
   536 end
       
   537 
       
   538 function loadHeroAmmo()
       
   539 	-- hero ammo
       
   540 	local ammo = GetCampaignVar("HeroAmmo")
       
   541 	AddAmmo(hero.gear, amRope, tonumber(ammo:sub(3,3)))
       
   542 	AddAmmo(hero.gear, amBazooka, tonumber(ammo:sub(1,1)))
       
   543 	AddAmmo(hero.gear, amParachute, tonumber(ammo:sub(4,4)))
       
   544 	AddAmmo(hero.gear, amGrenade, tonumber(ammo:sub(2,2)))
       
   545 	AddAmmo(hero.gear, amDEagle, tonumber(ammo:sub(5,5)))
       
   546 	AddAmmo(hero.gear, amBlowTorch, tonumber(ammo:sub(6,6)))
       
   547 	-- weird, if 0 bazooka isn't displayed in the weapons menu
       
   548 	if tonumber(ammo:sub(7,7)) > 0 then
       
   549 		AddAmmo(hero.gear, amGirder, tonumber(ammo:sub(7,7)))
       
   550 	end
       
   551 	AddAmmo(hero.gear, amPortalGun, tonumber(ammo:sub(8,8)))
       
   552 	AddAmmo(hero.gear, amRCPlane, tonumber(ammo:sub(9,9)))
       
   553 end
       
   554 
       
   555 function checkForWin()
   459 function checkForWin()
   556 	if cratesFound ==  0 then
   460 	if cratesFound ==  0 then
   557 		-- have to look more
   461 		-- have to look more
   558 		AnimSay(hero.gear, loc("Haven't found it yet ..."), SAY_THINK, 5000)
   462 		AnimSay(hero.gear, loc("Haven't found it yet ..."), SAY_THINK, 5000)
   559 		cratesFound = cratesFound + 1
   463 		cratesFound = cratesFound + 1