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 |
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 |