share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit03.lua
branchspacecampaign
changeset 9593 ac522dd06f00
parent 9592 a39cb287e83e
child 9594 749ef5bd0eaf
equal deleted inserted replaced
9592:a39cb287e83e 9593:ac522dd06f00
     9 HedgewarsScriptLoad("/Missions/Campaign/A_Space_Adventure/global_functions.lua")
     9 HedgewarsScriptLoad("/Missions/Campaign/A_Space_Adventure/global_functions.lua")
    10 
    10 
    11 ----------------- VARIABLES --------------------
    11 ----------------- VARIABLES --------------------
    12 -- globals
    12 -- globals
    13 local missionName = loc("Precise shooting")
    13 local missionName = loc("Precise shooting")
       
    14 local timeLeft = 10000
       
    15 local lastWeaponUsed = amSniperRifle
    14 -- hogs
    16 -- hogs
    15 local hero = {
    17 local hero = {
    16 	name = loc("Hog Solo"),
    18 	name = loc("Hog Solo"),
    17 	x = 1830,
    19 	x = 1100,
    18 	y = 560,
    20 	y = 560
    19 	dead = false
       
    20 }
    21 }
    21 local enemiesOdd = {
    22 local enemiesOdd = {
    22 	{name = "Hog 1", x = 3670 , y = 175},
    23 	{name = "Hog 1", x = 2000 , y = 175},
    23 	{name = "Hog 3", x = 3795 , y = 1110},
    24 	{name = "Hog 3", x = 1950 , y = 1110},
    24 	{name = "Hog 5", x = 1950 , y = 1480},
    25 	{name = "Hog 5", x = 1270 , y = 1480},
    25 	{name = "Hog 7", x = 400 , y = 920},
    26 	{name = "Hog 7", x = 240 , y = 790},
    26 	{name = "Hog 9", x = 1100 , y = 1950},
    27 	{name = "Hog 9", x = 620 , y = 1950},
    27 	{name = "Hog 11", x = 1200 , y = 1950},
    28 	{name = "Hog 11", x = 720 , y = 1950},
    28 	{name = "Hog 13", x = 2300 , y = 1950},
    29 	{name = "Hog 13", x = 1620 , y = 1950},
    29 	{name = "Hog 15", x = 2400 , y = 1950},
    30 	{name = "Hog 15", x = 1720 , y = 1950},
    30 }
    31 }
    31 local enemiesEven = {
    32 local enemiesEven = {
    32 	{name = "Hog 2", x = 660, y = 170},
    33 	{name = "Hog 2", x = 660, y = 140},
    33 	{name = "Hog 4", x = 1900, y = 1320},
    34 	{name = "Hog 4", x = 1120, y = 1250},
    34 	{name = "Hog 6", x = 2030, y = 1335},
    35 	{name = "Hog 6", x = 1290, y = 1250},
    35 	{name = "Hog 8", x = 1300, y = 1950},
    36 	{name = "Hog 8", x = 820, y = 1950},
    36 	{name = "Hog 10", x = 1400, y = 1950},
    37 	{name = "Hog 10", x = 920, y = 1950},
    37 	{name = "Hog 12", x = 2500, y = 1950},
    38 	{name = "Hog 12", x = 1820, y = 1950},
    38 	{name = "Hog 14", x = 2600, y = 1950},
    39 	{name = "Hog 14", x = 1920, y = 1950},
    39 	{name = "Hog 16", x = 1850, y = 560},
    40 	{name = "Hog 16", x = 1200, y = 560},
    40 }
    41 }
    41 -- teams
    42 -- teams
    42 local teamA = {
    43 local teamA = {
    43 	name = loc("Hog Solo"),
    44 	name = loc("Hog Solo"),
    44 	color = tonumber("38D61C",16) -- green
    45 	color = tonumber("38D61C",16) -- green
    55 -------------- LuaAPI EVENT HANDLERS ------------------
    56 -------------- LuaAPI EVENT HANDLERS ------------------
    56 
    57 
    57 function onGameInit()
    58 function onGameInit()
    58 	GameFlags = gfDisableWind + gfInfAttack
    59 	GameFlags = gfDisableWind + gfInfAttack
    59 	Seed = 1
    60 	Seed = 1
    60 	TurnTime = 25000
    61 	TurnTime = 15000
    61 	CaseFreq = 0
    62 	CaseFreq = 0
    62 	MinesNum = 0
    63 	MinesNum = 0
    63 	MinesTime = 1
    64 	MinesTime = 1
    64 	Explosives = 0
    65 	Explosives = 0
    65 	Map = "fruit03_map"
    66 	Map = "fruit03_map"
    72 	-- enemies
    73 	-- enemies
    73 	AddTeam(teamC.name, teamC.color, "Bone", "Island", "HillBilly", "cm_birdy")
    74 	AddTeam(teamC.name, teamC.color, "Bone", "Island", "HillBilly", "cm_birdy")
    74 	for i=1,table.getn(enemiesEven) do
    75 	for i=1,table.getn(enemiesEven) do
    75 		enemiesEven[i].gear = AddHog(enemiesEven[i].name, 1, 100, "war_desertgrenadier1")
    76 		enemiesEven[i].gear = AddHog(enemiesEven[i].name, 1, 100, "war_desertgrenadier1")
    76 		AnimSetGearPosition(enemiesEven[i].gear, enemiesEven[i].x, enemiesEven[i].y)
    77 		AnimSetGearPosition(enemiesEven[i].gear, enemiesEven[i].x, enemiesEven[i].y)
    77 		enemiesEven[i].turnLeft = false
       
    78 	end	
    78 	end	
    79 	AddTeam(teamB.name, teamB.color, "Bone", "Island", "HillBilly", "cm_birdy")
    79 	AddTeam(teamB.name, teamB.color, "Bone", "Island", "HillBilly", "cm_birdy")
    80 	for i=1,table.getn(enemiesOdd) do
    80 	for i=1,table.getn(enemiesOdd) do
    81 		enemiesOdd[i].gear = AddHog(enemiesOdd[i].name, 1, 100, "war_desertgrenadier1")
    81 		enemiesOdd[i].gear = AddHog(enemiesOdd[i].name, 1, 100, "war_desertgrenadier1")
    82 		AnimSetGearPosition(enemiesOdd[i].gear, enemiesOdd[i].x, enemiesOdd[i].y)
    82 		AnimSetGearPosition(enemiesOdd[i].gear, enemiesOdd[i].x, enemiesOdd[i].y)
    83 		enemiesOdd[i].turnLeft = false
       
    84 	end
    83 	end
    85 	
    84 	
    86 	initCheckpoint("fruit03")
    85 	initCheckpoint("fruit03")
    87 	
    86 	
    88 	AnimInit()
    87 	AnimInit()
    94 	FollowGear(hero.gear)
    93 	FollowGear(hero.gear)
    95 	
    94 	
    96 	AddEvent(onHeroDeath, {hero.gear}, heroDeath, {hero.gear}, 0)
    95 	AddEvent(onHeroDeath, {hero.gear}, heroDeath, {hero.gear}, 0)
    97 	
    96 	
    98 	--hero ammo
    97 	--hero ammo
       
    98 	AddAmmo(hero.gear, amSkip, 1)
    99 	AddAmmo(hero.gear, amTeleport, 2)
    99 	AddAmmo(hero.gear, amTeleport, 2)
   100 	AddAmmo(hero.gear, amSniperRifle, 2)
   100 	AddAmmo(hero.gear, amSniperRifle, 2)
   101 	AddAmmo(hero.gear, amWatermelon, 2)
   101 	AddAmmo(hero.gear, amWatermelon, 2)
   102 	--enemies ammo
   102 	--enemies ammo
       
   103 	AddAmmo(enemiesOdd[1].gear, amDEagle, 100)
   103 	AddAmmo(enemiesOdd[1].gear, amSniperRifle, 100)
   104 	AddAmmo(enemiesOdd[1].gear, amSniperRifle, 100)
   104 	AddAmmo(enemiesOdd[1].gear, amWatermelon, 1)
   105 	AddAmmo(enemiesOdd[1].gear, amWatermelon, 1)
       
   106 	AddAmmo(enemiesOdd[1].gear, amGrenade, 5)
       
   107 	AddAmmo(enemiesEven[1].gear, amDEagle, 100)
   105 	AddAmmo(enemiesEven[1].gear, amSniperRifle, 100)
   108 	AddAmmo(enemiesEven[1].gear, amSniperRifle, 100)
   106 	AddAmmo(enemiesEven[1].gear, amWatermelon, 1)
   109 	AddAmmo(enemiesEven[1].gear, amWatermelon, 1)
       
   110 	AddAmmo(enemiesEven[1].gear, amGrenade, 5)
   107 	
   111 	
   108 	SendHealthStatsOff()
   112 	SendHealthStatsOff()
   109 end
   113 end
   110 
   114 
   111 function onNewTurn()
   115 function onNewTurn()
       
   116 	if CurrentHedgehog == hero.gear then
       
   117 		TurnTimeLeft = TurnTime + timeLeft
       
   118 		timeLeft = 0
       
   119 	end
       
   120 	turnHogs()
   112 	WriteLnToConsole("NEW TURN")
   121 	WriteLnToConsole("NEW TURN")
   113 end
   122 end
   114 
   123 
   115 function onGameTick20()
   124 function onGameTick20()
   116 	turnHogs()
   125 	--WriteLnToConsole("TURN TIME LEFT : "..timeLeft)
       
   126 	if CurrentHedgehog == hero.gear and GetAmmoCount(hero.gear, amSkip) == 0 then
       
   127 		AddAmmo(hero.gear, amSkip, 1)
       
   128 		--WriteLnToConsole("----- TURN TIME LEFT : "..TurnTimeLeft)
       
   129 		timeLeft = TurnTimeLeft
       
   130 		--WriteLnToConsole("***** TURN TIME LEFT : "..timeLeft)
       
   131 		TurnTimeLeft = 0
       
   132 	--WriteLnToConsole("NEW TURN TIME LEFT : "..timeLeft)
       
   133 	end
   117 end
   134 end
   118 
   135 
   119 function onGearDamage(gear, damage)
   136 function onGearDamage(gear, damage)
   120 	FollowGear(gear)
   137 	FollowGear(gear)
   121 	WriteLnToConsole("GEAR DAMAGED")
   138 	WriteLnToConsole("GEAR DAMAGED")
   122 end
   139 end
   123 
   140 
   124 function onGearDelete(gear)
   141 function onGearDelete(gear)
   125 	if gear == hero.gear then
   142 	WriteLnToConsole("HERO : "..hero.gear)
   126 		hero.dead = true
   143 	WriteLnToConsole("GEAR : "..gear)
   127 	else
   144 	WriteLnToConsole("UPPER BOUND : "..enemiesOdd[table.getn(enemiesOdd)].gear)
   128 		AddAmmo(hero.gear, amTeleport, 2)
   145 	WriteLnToConsole("UPPER BOUND : "..enemiesEven[table.getn(enemiesEven)].gear)
   129 		AddAmmo(hero.gear, amSniperRifle, 2)
   146 	
   130 		AddAmmo(hero.gear, amWatermelon, 2)
   147 	if (gear > hero.gear and gear <= enemiesOdd[table.getn(enemiesOdd)].gear) or 
       
   148 			(gear > hero.gear and gear <= enemiesEven[table.getn(enemiesEven)].gear) then
       
   149 		WriteLnToConsole("NOT HERO GEAR")
       
   150 		local availableTeleports = GetAmmoCount(hero.gear,amTeleport)
       
   151 		local availableSniper = GetAmmoCount(hero.gear,amSniperRifle)
       
   152 		if availableTeleports < 2 then
       
   153 			AddAmmo(hero.gear, amTeleport, availableTeleports + 1 )
       
   154 		end
       
   155 		if availableSniper < 3 then
       
   156 			AddAmmo(hero.gear, amSniperRifle, availableSniper + 1 )
       
   157 		end
   131 	end
   158 	end
   132 	WriteLnToConsole("GEAR KILLED")
   159 	WriteLnToConsole("GEAR KILLED")
   133 end
   160 end
   134 
   161 
   135 -------------- EVENTS ------------------
   162 -------------- EVENTS ------------------
   136 
   163 
   137 function onHeroDeath(gear)
   164 function onHeroDeath(gear)
   138 	if hero.dead then
   165 	if not GetHealth(hero.gear) then
   139 		return true
   166 		return true
   140 	end
   167 	end
   141 	return false
   168 	return false
   142 end
   169 end
   143 
   170 
   144 -------------- ACTIONS ------------------
   171 -------------- ACTIONS ------------------
   145 
   172 
   146 -- game ends anyway but I want to sent custom stats probably...
   173 -- game ends anyway but I want to sent custom stats probably...
   147 function heroDeath(gear)
   174 function heroDeath(gear)
   148 	heroLost()
   175 	EndGame()
   149 end
   176 end
   150 
   177 
   151 ------------------ Other Functions -------------------
   178 ------------------ Other Functions -------------------
   152 
   179 
   153 function turnHogs()
   180 function turnHogs()
   154 	if GetHealth(hero.gear) then
   181 	if GetHealth(hero.gear) then
   155 		for i=1,table.getn(enemiesEven) do
   182 		for i=1,table.getn(enemiesEven) do
   156 			if GetHealth(enemiesEven[i].gear) then
   183 			if GetHealth(enemiesEven[i].gear) then
   157 				if GetX(enemiesEven[i].gear) < GetX(hero.gear) and enemiesEven[i].turnLeft then
   184 				if GetX(enemiesEven[i].gear) < GetX(hero.gear) then
   158 					HogTurnLeft(enemiesEven[i].gear, false)
   185 					HogTurnLeft(enemiesEven[i].gear, false)
   159 				elseif GetX(enemiesEven[i].gear) > GetX(hero.gear) and not enemiesEven[i].turnLeft then
   186 				elseif GetX(enemiesEven[i].gear) > GetX(hero.gear) then
   160 					HogTurnLeft(enemiesEven[i].gear, true)
   187 					HogTurnLeft(enemiesEven[i].gear, true)
   161 				end
   188 				end
   162 			end
   189 			end
   163 		end
   190 		end
   164 		for i=1,table.getn(enemiesOdd) do
   191 		for i=1,table.getn(enemiesOdd) do
   165 			if GetHealth(enemiesOdd[i].gear) then
   192 			if GetHealth(enemiesOdd[i].gear) then
   166 				if GetX(enemiesOdd[i].gear) < GetX(hero.gear) and enemiesOdd[i].turnLeft then
   193 				if GetX(enemiesOdd[i].gear) < GetX(hero.gear) then
   167 					HogTurnLeft(enemiesOdd[i].gear, false)
   194 					HogTurnLeft(enemiesOdd[i].gear, false)
   168 				elseif GetX(enemiesOdd[i].gear) > GetX(hero.gear) and not enemiesOdd[i].turnLeft then
   195 				elseif GetX(enemiesOdd[i].gear) > GetX(hero.gear) then
   169 					HogTurnLeft(enemiesOdd[i].gear, true)
   196 					HogTurnLeft(enemiesOdd[i].gear, true)
   170 				end
   197 				end
   171 			end
   198 			end
   172 		end
   199 		end
   173 	end
   200 	end