share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/moon01.lua
branchspacecampaign
changeset 9314 b7ee054888f8
parent 9312 f6bec1cfbfbd
child 9316 213b4267db81
equal deleted inserted replaced
9312:f6bec1cfbfbd 9314:b7ee054888f8
     7 -- So hero has to get whatever available equipement
     7 -- So hero has to get whatever available equipement
     8 -- there is and rescue them.
     8 -- there is and rescue them.
     9 
     9 
    10 -- TODO
    10 -- TODO
    11 -- Fix some glitches when gaining control on animations
    11 -- Fix some glitches when gaining control on animations
       
    12 -- Round time after check point 2
       
    13 -- Enemys take control
    12 -- Continue with the rest :P
    14 -- Continue with the rest :P
    13 
    15 
    14 HedgewarsScriptLoad("/Scripts/Locale.lua")
    16 HedgewarsScriptLoad("/Scripts/Locale.lua")
    15 HedgewarsScriptLoad("/Scripts/Animate.lua")
    17 HedgewarsScriptLoad("/Scripts/Animate.lua")
    16 
    18 
    17 ----------------- VARIABLES --------------------
    19 ----------------- VARIABLES --------------------
    18 -- globals
    20 -- globals
    19 local campaignName = loc("A Space Adventure")
    21 local campaignName = loc("A Space Adventure")
    20 local missionName = loc("Moon, stop for fuels!")
    22 local missionName = loc("Moon, stop for fuels!")
       
    23 local weaponsAcquired = false
       
    24 local checkPointReached = 1 -- 1 is start of the game
    21 -- dialogs
    25 -- dialogs
    22 local dialog01 = {}
    26 local dialog01 = {}
    23 local dialog02 = {}
    27 local dialog02 = {}
    24 -- mission objectives
    28 -- mission objectives
    25 local goals = {
    29 local goals = {
    51 local teamD = {}
    55 local teamD = {}
    52 -- hedgehogs values
    56 -- hedgehogs values
    53 hero.name = "Hog Solo"
    57 hero.name = "Hog Solo"
    54 hero.x = 1380
    58 hero.x = 1380
    55 hero.y = 1750
    59 hero.y = 1750
       
    60 hero.dead = false
    56 paoth1.name = "Joe"
    61 paoth1.name = "Joe"
    57 paoth1.x = 1430
    62 paoth1.x = 1430
    58 paoth1.y = 1750
    63 paoth1.y = 1750
    59 paoth2.name = "Bruce"
    64 paoth2.name = "Bruce"
    60 paoth2.x = 3760
    65 paoth2.x = 3760
    88 
    93 
    89 -------------- LuaAPI EVENT HANDLERS ------------------
    94 -------------- LuaAPI EVENT HANDLERS ------------------
    90 
    95 
    91 function onGameInit()
    96 function onGameInit()
    92 	Seed = 1
    97 	Seed = 1
    93 	GameFlags = gfInfAttack + gfSolidLand + gfDisableWind 
    98 	GameFlags = gfSolidLand + gfDisableWind
    94 	TurnTime = 45000
    99 	TurnTime = 45000
    95 	CaseFreq = 0
   100 	CaseFreq = 0
    96 	MinesNum = 0
   101 	MinesNum = 0
    97 	MinesTime = 3000
   102 	MinesTime = 3000
    98 	Explosives = 0
   103 	Explosives = 0
   103 	AddTeam(teamD.name, teamD.color, "Bone", "Island", "HillBilly", "cm_birdy")
   108 	AddTeam(teamD.name, teamD.color, "Bone", "Island", "HillBilly", "cm_birdy")
   104 	hero.gear = AddHog(hero.name, 0, 100, "war_desertgrenadier1")
   109 	hero.gear = AddHog(hero.name, 0, 100, "war_desertgrenadier1")
   105 	AnimSetGearPosition(hero.gear, hero.x, hero.y)
   110 	AnimSetGearPosition(hero.gear, hero.x, hero.y)
   106 	-- PAoTH
   111 	-- PAoTH
   107 	AddTeam(teamA.name, teamA.color, "Bone", "Island", "HillBilly", "cm_birdy")
   112 	AddTeam(teamA.name, teamA.color, "Bone", "Island", "HillBilly", "cm_birdy")
   108 	paoth1.gear = AddHog(paoth1.name, 0, 100, "war_desertgrenadier1")
   113 	paoth1.gear = AddHog(paoth1.name, 0, 100, "scif_2001O")
   109 	AnimSetGearPosition(paoth1.gear, paoth1.x, paoth1.y)
   114 	AnimSetGearPosition(paoth1.gear, paoth1.x, paoth1.y)
   110 	HogTurnLeft(paoth1.gear, true)
   115 	HogTurnLeft(paoth1.gear, true)
   111 	paoth2.gear = AddHog(paoth2.name, 0, 100, "war_desertgrenadier1")
   116 	paoth2.gear = AddHog(paoth2.name, 0, 100, "scif_2001Y")
   112 	AnimSetGearPosition(paoth2.gear, paoth2.x, paoth2.y)
   117 	AnimSetGearPosition(paoth2.gear, paoth2.x, paoth2.y)
   113 	HogTurnLeft(paoth2.gear, true)
   118 	HogTurnLeft(paoth2.gear, true)
   114 	paoth3.gear = AddHog(paoth3.name, 0, 100, "war_desertgrenadier1")
   119 	paoth3.gear = AddHog(paoth3.name, 0, 100, "hair_purple")
   115 	AnimSetGearPosition(paoth3.gear, paoth3.x, paoth3.y)
   120 	AnimSetGearPosition(paoth3.gear, paoth3.x, paoth3.y)
   116 	HogTurnLeft(paoth3.gear, true)
   121 	HogTurnLeft(paoth3.gear, true)
   117 	paoth4.gear = AddHog(paoth4.name, 0, 100, "war_desertgrenadier1")
   122 	paoth4.gear = AddHog(paoth4.name, 0, 100, "scif_2001Y")
   118 	AnimSetGearPosition(paoth4.gear, paoth4.x, paoth4.y)
   123 	AnimSetGearPosition(paoth4.gear, paoth4.x, paoth4.y)
   119 	HogTurnLeft(paoth4.gear, true)
   124 	HogTurnLeft(paoth4.gear, true)
   120 	-- Professor
   125 	-- Professor
   121 	AddTeam(teamC.name, teamC.color, "Bone", "Island", "HillBilly", "cm_birdy")
   126 	AddTeam(teamC.name, teamC.color, "Bone", "Island", "HillBilly", "cm_birdy")
   122 	professor.gear = AddHog(professor.name, 0, 100, "war_desertgrenadier1")
   127 	professor.gear = AddHog(professor.name, 0, 100, "tophats")
   123 	AnimSetGearPosition(professor.gear, professor.x, professor.y)
   128 	AnimSetGearPosition(professor.gear, professor.x, professor.y)
   124 	HogTurnLeft(professor.gear, true)
   129 	HogTurnLeft(professor.gear, true)
   125 	-- Minions
   130 	-- Minions
   126 	AddTeam(teamB.name, teamB.color, "Bone", "Island", "HillBilly", "cm_birdy")
   131 	AddTeam(teamB.name, teamB.color, "Bone", "Island", "HillBilly", "cm_birdy")
   127 	minion1.gear = AddHog(minion1.name, 0, 100, "war_desertgrenadier1")
   132 	minion1.gear = AddHog(minion1.name, 1, 100, "Gasmask")
   128 	AnimSetGearPosition(minion1.gear, minion1.x, minion1.y)
   133 	AnimSetGearPosition(minion1.gear, minion1.x, minion1.y)
   129 	HogTurnLeft(minion1.gear, true)
   134 	HogTurnLeft(minion1.gear, true)
   130 	minion2.gear = AddHog(minion2.name, 0, 100, "war_desertgrenadier1")
   135 	minion2.gear = AddHog(minion2.name, 1, 100, "Gasmask")
   131 	AnimSetGearPosition(minion2.gear, minion2.x, minion2.y)
   136 	AnimSetGearPosition(minion2.gear, minion2.x, minion2.y)
   132 	HogTurnLeft(minion2.gear, true)
   137 	HogTurnLeft(minion2.gear, true)
   133 	minion3.gear = AddHog(minion3.name, 0, 100, "war_desertgrenadier1")
   138 	minion3.gear = AddHog(minion3.name, 1, 100, "Gasmask")
   134 	AnimSetGearPosition(minion3.gear, minion3.x, minion3.y)
   139 	AnimSetGearPosition(minion3.gear, minion3.x, minion3.y)
   135 	HogTurnLeft(minion3.gear, true)	
   140 	HogTurnLeft(minion3.gear, true)
       
   141 	
       
   142 	-- get the check point
       
   143 	if tonumber(GetCampaignVar("Moon01CheckPoint")) then
       
   144 		checkPointReached = tonumber(GetCampaignVar("Moon01CheckPoint"))
       
   145 	end
       
   146 	
       
   147 	if checkPointReached == 1 then
       
   148 		-- Start of the game
       
   149 	elseif checkPointReached == 2 then
       
   150 		AnimSetGearPosition(hero.gear, parachuteX, weaponsY)
       
   151 	end
   136 	
   152 	
   137 	AnimInit()
   153 	AnimInit()
   138 	AnimationSetup()	
   154 	AnimationSetup()	
   139 end
   155 end
   140 
   156 
   143 	AnimWait(hero.gear, 3000)
   159 	AnimWait(hero.gear, 3000)
   144 
   160 
   145 	FollowGear(hero.gear)
   161 	FollowGear(hero.gear)
   146 	
   162 	
   147 	ShowMission(campaignName, missionName, loc("Hog Solo has to refuel his saucer.")..
   163 	ShowMission(campaignName, missionName, loc("Hog Solo has to refuel his saucer.")..
   148 	"|"..loc("Rescue the imprisoned PAoTH team and get your fuels!"), -amSkip, 0)
   164 	"|"..loc("Rescue the imprisoned PAoTH team and get your fuels!"), -amSkip, 0)	
   149 	
   165 	
   150 	AddAmmo(hero.gear, amRope, 2)
   166 	-- check for death has to go first
   151 	SpawnAmmoCrate(bazookaX, weaponsY, amBazooka)
   167 	AddEvent(onHeroDeath, {hero.gear}, heroDeath, {hero.gear}, 0)
   152 	SpawnAmmoCrate(parachuteX, weaponsY, amParachute)
   168 
   153 	SpawnAmmoCrate(grenadeX, weaponsY, amGrenade)
   169 	if checkPointReached == 1 then
   154 	SpawnAmmoCrate(deserteagleX, weaponsY, amDEagle)
   170 		AddAmmo(hero.gear, amRope, 2)
   155 	
   171 		SpawnAmmoCrate(bazookaX, weaponsY, amBazooka)
   156 	AddEvent(onWeaponsPlatform, {hero.gear}, weaponsPlatform, {hero.gear}, 0)
   172 		SpawnAmmoCrate(parachuteX, weaponsY, amParachute)
   157 
   173 		SpawnAmmoCrate(grenadeX, weaponsY, amGrenade)
   158 	AddAnim(dialog01)
   174 		SpawnAmmoCrate(deserteagleX, weaponsY, amDEagle)
       
   175 		AddEvent(onWeaponsPlatform, {hero.gear}, weaponsPlatform, {hero.gear}, 0)
       
   176 		AddAnim(dialog01)
       
   177 	elseif checkPointReached == 2 then	
       
   178 		AddAmmo(hero.gear, amBazooka, 2)
       
   179 		AddAmmo(hero.gear, amParachute, 2)
       
   180 		AddAmmo(hero.gear, amGrenade, 2)
       
   181 		AddAmmo(hero.gear, amDEagle, 2)
       
   182 		SetWind(80)		
       
   183 		GameFlags = bor(GameFlags,gfDisableWind)
       
   184 		weaponsAcquired = true
       
   185 		AddAnim(dialog02)
       
   186 	end
   159 end
   187 end
   160 
   188 
   161 function onAmmoStoreInit()
   189 function onAmmoStoreInit()
   162 	SetAmmo(amBazooka, 0, 0, 0, 2)
   190 	SetAmmo(amBazooka, 0, 0, 0, 2)
   163 	SetAmmo(amParachute, 0, 0, 0, 2)
   191 	SetAmmo(amParachute, 0, 0, 0, 2)
   170 	if ShowAnimation() == false then
   198 	if ShowAnimation() == false then
   171 		return
   199 		return
   172 	end
   200 	end
   173 	ExecuteAfterAnimations()
   201 	ExecuteAfterAnimations()
   174 	CheckEvents()
   202 	CheckEvents()
       
   203 	if CurrentHedgehog ~= hero.gear then
       
   204 		TurnTimeLeft = 0
       
   205 	end
       
   206 end
       
   207 
       
   208 function onNewTurn()
       
   209 	if not weaponsAcquired and CurrentHedgehog ~= hero.gear then
       
   210 		TurnTimeLeft = 0
       
   211 	elseif not weaponsAcquired and CurrentHedgehog == hero.gear then
       
   212 		TurnTimeLeft = -1
       
   213 	elseif CurrentHedgehog == paoth1.gear or CurrentHedgehog == paoth1.gear
       
   214 		or CurrentHedgehog == paoth3.gear or CurrentHedgehog == paoth4.gear
       
   215 		or CurrentHedgehog == professor.gear then
       
   216 		TurnTimeLeft = 0
       
   217 	end
   175 end
   218 end
   176 
   219 
   177 function onPrecise()
   220 function onPrecise()
   178 	if GameTime > 3000 then
   221 	if GameTime > 3000 then
   179 		SetAnimSkip(true)   
   222 		SetAnimSkip(true)   
   180 	end
   223 	end
   181 end
   224 end
   182 
   225 
       
   226 function onGearDelete(gear)
       
   227 	if gear == hero.gear then
       
   228 		hero.dead = true
       
   229 	end
       
   230 end
       
   231 
   183 -------------- EVENTS ------------------
   232 -------------- EVENTS ------------------
   184 
   233 
   185 function onWeaponsPlatform(gear)
   234 function onWeaponsPlatform(gear)
   186 	if GetX(gear) > bazookaX-200 and GetX(gear) < deserteagleX+400  and GetY(gear) < weaponsY+150 and StoppedGear(gear) then
   235 	if GetX(gear) > bazookaX-200 and GetX(gear) < deserteagleX+400  and GetY(gear) < weaponsY+150 and StoppedGear(gear) then
   187 		return true
   236 		return true
   188 	end
   237 	end
   189 	return false
   238 	return false
   190 end
   239 end
   191 
   240 
       
   241 function onHeroDeath(gear)
       
   242 	if hero.dead then
       
   243 		return true
       
   244 	end
       
   245 	return false
       
   246 end
       
   247 
   192 -------------- OUTCOMES ------------------
   248 -------------- OUTCOMES ------------------
   193 
   249 
   194 function weaponsPlatform(gear)
   250 function weaponsPlatform(gear)	
       
   251 	SaveCampaignVar("Moon01CheckPoint", "2")
       
   252 	TurnTimeLeft = 0
       
   253 	weaponsAqcuired = true
       
   254 	SetWind(80)		
       
   255 	GameFlags = bor(GameFlags,gfDisableWind)
   195 	AddAnim(dialog02)
   256 	AddAnim(dialog02)
       
   257 end
       
   258 
       
   259 function heroDeath(gear)
       
   260 	
       
   261 	EndGame()
   196 end
   262 end
   197 
   263 
   198 -------------- ANIMATIONS ------------------
   264 -------------- ANIMATIONS ------------------
   199 
   265 
   200 function Skipanim(anim)
   266 function Skipanim(anim)
   224 	table.insert(dialog02, {func = AnimCaption, args = {hero.gear, loc("Checkpoint reached!"),  4000}})
   290 	table.insert(dialog02, {func = AnimCaption, args = {hero.gear, loc("Checkpoint reached!"),  4000}})
   225 	table.insert(dialog02, {func = AnimSay, args = {hero.gear, loc("I've made it! YEAAAAAH!"), SAY_SHOUT, 4000}})
   291 	table.insert(dialog02, {func = AnimSay, args = {hero.gear, loc("I've made it! YEAAAAAH!"), SAY_SHOUT, 4000}})
   226 	table.insert(dialog02, {func = AnimSay, args = {paoth1.gear, loc("Nice! Now hurry up and get down! You have to rescue my friends!"), SAY_SHOUT, 7000}})
   292 	table.insert(dialog02, {func = AnimSay, args = {paoth1.gear, loc("Nice! Now hurry up and get down! You have to rescue my friends!"), SAY_SHOUT, 7000}})
   227 	table.insert(dialog02, {func = AnimSwitchHog, args = {hero.gear}})
   293 	table.insert(dialog02, {func = AnimSwitchHog, args = {hero.gear}})
   228 end
   294 end
       
   295 
       
   296 ------------------- custom "animation" functions --------------------------
       
   297 
       
   298 function startCombat()
       
   299 	-- use this so guard2 will gain control
       
   300 	AnimSwitchHog(minion3.gear)
       
   301 	TurnTimeLeft = 0
       
   302 end