share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit02.lua
changeset 12520 22f2a586b9ca
parent 12514 d89dabfd07ce
child 12528 7b32e83aaf48
equal deleted inserted replaced
12519:206cb38d030f 12520:22f2a586b9ca
    11 -- globals
    11 -- globals
    12 local missionName = loc("Getting to the device")
    12 local missionName = loc("Getting to the device")
    13 local inBattle = false
    13 local inBattle = false
    14 local tookPartInBattle = false
    14 local tookPartInBattle = false
    15 local previousHog = -1
    15 local previousHog = -1
    16 local checkPointReached = 1 -- 1 is normal spawn
       
    17 local permitCaptainLimeDeath = false
    16 local permitCaptainLimeDeath = false
    18 -- dialogs
    17 -- dialogs
    19 local dialog01 = {}
    18 local dialog01 = {}
    20 local dialog02 = {}
    19 local dialog02 = {}
    21 local dialog03 = {}
    20 local dialog03 = {}
    83 	HealthDecrease = 0
    82 	HealthDecrease = 0
    84 	WaterRise = 0
    83 	WaterRise = 0
    85 	Map = "fruit02_map"
    84 	Map = "fruit02_map"
    86 	Theme = "Fruit"
    85 	Theme = "Fruit"
    87 
    86 
    88 	-- load checkpoints, problem getting the campaign variable
       
    89 	local health = 100
    87 	local health = 100
    90 	checkPointReached = initCheckpoint("fruit02")
       
    91 	if checkPointReached ~= 1 then
       
    92 		loadHogsPositions()
       
    93 		health = tonumber(GetCampaignVar("HeroHealth"))
       
    94 	end
       
    95 
    88 
    96 	-- Hog Solo and Green Bananas
    89 	-- Hog Solo and Green Bananas
    97 	AddTeam(teamA.name, teamA.color, "Bone", "Island", "HillBilly", "hedgehog")
    90 	AddTeam(teamA.name, teamA.color, "Bone", "Island", "HillBilly", "hedgehog")
    98 	hero.gear = AddHog(hero.name, 0, health, "war_desertgrenadier1")
    91 	hero.gear = AddHog(hero.name, 0, health, "war_desertgrenadier1")
    99 	AnimSetGearPosition(hero.gear, hero.x, hero.y)
    92 	AnimSetGearPosition(hero.gear, hero.x, hero.y)
   180 	AddGear(3105, 1680, gtMine, 0, 0, 0, 0)
   173 	AddGear(3105, 1680, gtMine, 0, 0, 0, 0)
   181 	AddGear(3095, 1680, gtMine, 0, 0, 0, 0)
   174 	AddGear(3095, 1680, gtMine, 0, 0, 0, 0)
   182 	AddGear(3085, 1680, gtMine, 0, 0, 0, 0)
   175 	AddGear(3085, 1680, gtMine, 0, 0, 0, 0)
   183 	AddGear(3075, 1680, gtMine, 0, 0, 0, 0)
   176 	AddGear(3075, 1680, gtMine, 0, 0, 0, 0)
   184 
   177 
   185 	if checkPointReached == 1 then
   178 	AddAmmo(hero.gear, amFirePunch, 3)
   186 		AddAmmo(hero.gear, amFirePunch, 3)
   179 	if tookPartInBattle then
   187 		AddEvent(onCheckPoint1, {hero.gear}, checkPoint1, {hero.gear}, 0)
   180 		AddAnim(dialog01)
   188 		AddEvent(onCheckPoint2, {hero.gear}, checkPoint2, {hero.gear}, 0)
   181 	else
   189 		AddEvent(onCheckPoint3, {hero.gear}, checkPoint3, {hero.gear}, 0)
   182 		AddAnim(dialog02)
   190 		AddEvent(onCheckPoint4, {hero.gear}, checkPoint4, {hero.gear}, 0)
       
   191 		if tookPartInBattle then
       
   192 			AddAnim(dialog01)
       
   193 		else
       
   194 			AddAnim(dialog02)
       
   195 		end
       
   196 	elseif checkPointReached == 2 then
       
   197 		AddEvent(onCheckPoint2, {hero.gear}, checkPoint2, {hero.gear}, 0)
       
   198 		AddEvent(onCheckPoint3, {hero.gear}, checkPoint3, {hero.gear}, 0)
       
   199 		AddEvent(onCheckPoint4, {hero.gear}, checkPoint4, {hero.gear}, 0)
       
   200 	elseif checkPointReached == 3 then
       
   201 		AddEvent(onCheckPoint1, {hero.gear}, checkPoint1, {hero.gear}, 0)
       
   202 		AddEvent(onCheckPoint3, {hero.gear}, checkPoint3, {hero.gear}, 0)
       
   203 		AddEvent(onCheckPoint4, {hero.gear}, checkPoint4, {hero.gear}, 0)
       
   204 	elseif checkPointReached == 4 then
       
   205 		AddEvent(onCheckPoint4, {hero.gear}, checkPoint4, {hero.gear}, 0)
       
   206 	elseif checkPointReached == 5 then
       
   207 		-- EMPTY
       
   208 	end
       
   209 	if checkPointReached ~= 1 then
       
   210 		loadWeapons()
       
   211 	end
       
   212 
       
   213 	-- girders
       
   214 	if checkPointReached > 1 then
       
   215 		PlaceGirder(1580, 875, 4)
       
   216 		PlaceGirder(1800, 875, 4)
       
   217 	end
   183 	end
   218 
   184 
   219 	-- place crates
   185 	-- place crates
   220 	if checkPointReached < 2 then
   186 	SpawnUtilityCrate(girderCrate.x, girderCrate.y, girderCrate.name)
   221 		SpawnUtilityCrate(girderCrate.x, girderCrate.y, girderCrate.name)
   187 	SpawnAmmoCrate(eagleCrate.x, eagleCrate.y, eagleCrate.name)
   222 	end
       
   223 	if checkPointReached < 5 then
       
   224 		SpawnAmmoCrate(eagleCrate.x, eagleCrate.y, eagleCrate.name)
       
   225 	end
       
   226 	SpawnUtilityCrate(ropeCrate.x, ropeCrate.y, ropeCrate.name)
   188 	SpawnUtilityCrate(ropeCrate.x, ropeCrate.y, ropeCrate.name)
   227 
   189 
   228 	if tookPartInBattle then
   190 	if tookPartInBattle then
   229 		SpawnAmmoCrate(weaponCrate.x, weaponCrate.y, amWatermelon)
   191 		SpawnAmmoCrate(weaponCrate.x, weaponCrate.y, amWatermelon)
   230 	else
   192 	else
   354 			redDead = false
   316 			redDead = false
   355 			break
   317 			break
   356 		end
   318 		end
   357 	end
   319 	end
   358 	return redDead
   320 	return redDead
   359 end
       
   360 
       
   361 function onCheckPoint1(gear)
       
   362 	-- before barrel jump
       
   363 	if not hero.dead and GetX(hero.gear) > 2850 and GetX(hero.gear) < 2945
       
   364 			and GetY(hero.gear) > 808 and GetY(hero.gear) < 852 and	not isHeroAtWrongPlace() then
       
   365 		return true
       
   366 	end
       
   367 	return false
       
   368 end
       
   369 
       
   370 function onCheckPoint2(gear)
       
   371 	-- before barrel jump
       
   372 	if ((GetHealth(green2.gear) and GetX(green2.gear) > 2850 and GetX(green2.gear) < 2945 and GetY(green2.gear) > 808 and GetY(green2.gear) < 852)
       
   373 			or (GetHealth(green3.gear) and GetX(green3.gear) > 2850 and GetX(green3.gear) < 2945 and GetY(green3.gear) > 808 and GetY(green3.gear) < 852))
       
   374 			and not isHeroAtWrongPlace() then
       
   375 		return true
       
   376 	end
       
   377 	return false
       
   378 end
       
   379 
       
   380 function onCheckPoint3(gear)
       
   381 	-- after barrel jump
       
   382 	if ((GetHealth(green2.gear) and GetY(green2.gear) > 1550 and GetX(green2.gear) < 3000 and StoppedGear(green2.gear))
       
   383 			or (GetHealth(green3.gear) and GetY(green3.gear) > 1550 and GetX(green3.gear) < 3000 and StoppedGear(green2.gear)))
       
   384 			and not isHeroAtWrongPlace() then
       
   385 		return true
       
   386 	end
       
   387 	return false
       
   388 end
       
   389 
       
   390 function onCheckPoint4(gear)
       
   391 	-- hero at crates
       
   392 	if not hero.dead and GetX(hero.gear) > 1288 and GetX(hero.gear) < 1420
       
   393 			and GetY(hero.gear) > 1840 and	not isHeroAtWrongPlace() then
       
   394 		return true
       
   395 	end
       
   396 	return false
       
   397 end
   321 end
   398 
   322 
   399 -------------- ACTIONS ------------------
   323 -------------- ACTIONS ------------------
   400 ended = false
   324 ended = false
   401 
   325 
   473 	SendStat(siCustomAchievement, loc("You retrieved the lost part."))
   397 	SendStat(siCustomAchievement, loc("You retrieved the lost part."))
   474 	SendStat(siCustomAchievement, loc("You defended yourself against the Strawberry Assassins."))
   398 	SendStat(siCustomAchievement, loc("You defended yourself against the Strawberry Assassins."))
   475 	SendStat(siPlayerKills,'1',teamA.name)
   399 	SendStat(siPlayerKills,'1',teamA.name)
   476 	SendStat(siPlayerKills,'0',teamC.name)
   400 	SendStat(siPlayerKills,'0',teamC.name)
   477 	EndGame()
   401 	EndGame()
   478 end
       
   479 
       
   480 function checkPoint1(gear)
       
   481 	saveCheckPointLocal(2)
       
   482 end
       
   483 
       
   484 function checkPoint2(gear)
       
   485 	saveCheckPointLocal(3)
       
   486 end
       
   487 
       
   488 function checkPoint3(gear)
       
   489 	saveCheckPointLocal(4)
       
   490 end
       
   491 
       
   492 function checkPoint4(gear)
       
   493 	saveCheckPointLocal(5)
       
   494 end
   402 end
   495 
   403 
   496 -------------- ANIMATIONS ------------------
   404 -------------- ANIMATIONS ------------------
   497 
   405 
   498 function Skipanim(anim)
   406 function Skipanim(anim)
   554 
   462 
   555 function wind()
   463 function wind()
   556 	SetWind(GetRandom(201)-100)
   464 	SetWind(GetRandom(201)-100)
   557 end
   465 end
   558 
   466 
   559 function saveHogsPositions()
       
   560 	local positions;
       
   561 	positions = GetX(hero.gear)..","..GetY(hero.gear)
       
   562 	if GetHealth(green2.gear) then
       
   563 		positions = positions..","..GetX(green2.gear)..","..GetY(green2.gear)
       
   564 	else
       
   565 		positions = positions..",1,1"
       
   566 	end
       
   567 	if GetHealth(green3.gear) then
       
   568 		positions = positions..","..GetX(green3.gear)..","..GetY(green3.gear)
       
   569 	else
       
   570 		positions = positions..",1,1"
       
   571 	end
       
   572 	SaveCampaignVar("HogsPosition", positions)
       
   573 end
       
   574 
       
   575 function loadHogsPositions()
       
   576 	local positions;
       
   577 	if GetCampaignVar("HogsPosition") then
       
   578 		positions = GetCampaignVar("HogsPosition")
       
   579 	else
       
   580 		return
       
   581 	end
       
   582 	positions = split(positions,",")
       
   583 	if positions[1] then
       
   584 		hero.x = positions[1]
       
   585 		hero.y = positions[2]
       
   586 	end
       
   587 	if positions[3] then
       
   588 		green2.x = tonumber(positions[3])
       
   589 		green2.y = tonumber(positions[4])
       
   590 	end
       
   591 	if positions[5] then
       
   592 		green3.x = tonumber(positions[5])
       
   593 		green3.y = tonumber(positions[6])
       
   594 	end
       
   595 end
       
   596 
       
   597 function saveWeapons()
       
   598 	-- firepunch - gilder - deagle - watermelon - sniper
       
   599 	SaveCampaignVar("HeroAmmo", GetAmmoCount(hero.gear, amFirePunch)..GetAmmoCount(hero.gear, amGirder)..
       
   600 			GetAmmoCount(hero.gear, amDEagle)..GetAmmoCount(hero.gear, amWatermelon)..GetAmmoCount(hero.gear, amSniperRifle))
       
   601 end
       
   602 
       
   603 function loadWeapons()
       
   604 	local ammo = GetCampaignVar("HeroAmmo")
       
   605 	AddAmmo(hero.gear, amFirePunch, tonumber(ammo:sub(1,1)))
       
   606 	AddAmmo(hero.gear, amGirder, tonumber(ammo:sub(2,2)))
       
   607 	AddAmmo(hero.gear, amDEagle, tonumber(ammo:sub(3,3)))
       
   608 	AddAmmo(hero.gear, amWatermelon, tonumber(ammo:sub(4,4)))
       
   609 	AddAmmo(hero.gear, amSniperRifle, tonumber(ammo:sub(5,5)))
       
   610 end
       
   611 
       
   612 function isHeroAtWrongPlace()
       
   613 	if GetX(hero.gear) > 1480 and GetX(hero.gear) < 1892 and GetY(hero.gear) > 1000 and GetY(hero.gear) < 1220 then
       
   614 		return true
       
   615 	end
       
   616 	return false
       
   617 end
       
   618 
       
   619 function saveCheckPointLocal(cpoint)
       
   620 	AnimCaption(hero.gear, loc("Checkpoint reached!"), 3000)
       
   621 	saveCheckpoint(cpoint)
       
   622 	SaveCampaignVar("HeroHealth", GetHealth(hero.gear))
       
   623 	saveHogsPositions()
       
   624 	saveWeapons()
       
   625 end