author | nemo |
Mon, 29 Oct 2012 14:22:29 -0400 | |
changeset 7877 | b3fb94986255 |
parent 7165 | aad1aea05f1e |
child 8043 | da083f8d95e6 |
permissions | -rw-r--r-- |
3234 | 1 |
-- Hedgewars Shotgun Training |
2 |
-- Scripting Example |
|
3 |
||
4 |
-- Lines such as this one are comments - they are ignored |
|
5 |
-- by the game, no matter what kind of text is in there. |
|
6 |
-- It's also possible to place a comment after some real |
|
7 |
-- instruction as you see below. In short, everything |
|
8 |
-- following "--" is ignored. |
|
9 |
||
10 |
--------------------------------------------------------------- |
|
4506
37744d5c877e
Finnished up the lua translations by adding training maps, campaign is ignored for now
Henek
parents:
4493
diff
changeset
|
11 |
-- At first we implement the localization library using loadfile. |
37744d5c877e
Finnished up the lua translations by adding training maps, campaign is ignored for now
Henek
parents:
4493
diff
changeset
|
12 |
-- This allows us to localize strings without needing to think |
37744d5c877e
Finnished up the lua translations by adding training maps, campaign is ignored for now
Henek
parents:
4493
diff
changeset
|
13 |
-- about translations. |
37744d5c877e
Finnished up the lua translations by adding training maps, campaign is ignored for now
Henek
parents:
4493
diff
changeset
|
14 |
-- We can use the function loc(text) to localize a string. |
3234 | 15 |
|
4506
37744d5c877e
Finnished up the lua translations by adding training maps, campaign is ignored for now
Henek
parents:
4493
diff
changeset
|
16 |
loadfile(GetDataPath() .. "Scripts/Locale.lua")() |
3234 | 17 |
|
18 |
-- This variable will hold the number of destroyed targets. |
|
19 |
local score = 0 |
|
20 |
-- This variable represents the number of targets to destroy. |
|
21 |
local score_goal = 5 |
|
22 |
-- This variable controls how many milliseconds/ticks we'd |
|
23 |
-- like to wait before we end the round once all targets |
|
24 |
-- have been destroyed. |
|
25 |
local end_timer = 5000 -- 5000 ms = 5 s |
|
26 |
-- This variable is set to true if the game is lost (i.e. |
|
27 |
-- time runs out). |
|
28 |
local game_lost = false |
|
29 |
-- This variable will point to the hog's gear |
|
30 |
local player = nil |
|
31 |
-- This variable will grab the time left at the end of the round |
|
32 |
local time_goal = 0 |
|
33 |
||
34 |
-- This is a custom function to make it easier to |
|
35 |
-- spawn more targets with just one line of code |
|
36 |
-- You may define as many custom functions as you |
|
37 |
-- like. |
|
38 |
function spawnTarget() |
|
39 |
-- add a new target gear |
|
40 |
gear = AddGear(0, 0, gtTarget, 0, 0, 0, 0) |
|
41 |
||
42 |
-- move it to a random position within 0 and |
|
43 |
-- LAND_WIDTH - the width of the map |
|
44 |
FindPlace(gear, true, 0, LAND_WIDTH) |
|
45 |
||
46 |
-- move the target to a higher vertical position |
|
47 |
-- to ensure it's not somewhere down below |
|
48 |
x, y = GetGearPosition(gear) |
|
7877
b3fb94986255
Fix training script positions altered by variable land dimension change. Issue #453
nemo
parents:
7165
diff
changeset
|
49 |
SetGearPosition(gear, x, 0) |
3234 | 50 |
end |
51 |
||
4662
63aafc9c2a81
Add a bunch of lua from mikade, update translation files
mikade+nemo
parents:
4506
diff
changeset
|
52 |
function onNewTurn() |
63aafc9c2a81
Add a bunch of lua from mikade, update translation files
mikade+nemo
parents:
4506
diff
changeset
|
53 |
ParseCommand("setweap " .. string.char(amShotgun)) |
63aafc9c2a81
Add a bunch of lua from mikade, update translation files
mikade+nemo
parents:
4506
diff
changeset
|
54 |
end |
63aafc9c2a81
Add a bunch of lua from mikade, update translation files
mikade+nemo
parents:
4506
diff
changeset
|
55 |
|
3234 | 56 |
-- This function is called before the game loads its |
57 |
-- resources. |
|
58 |
-- It's one of the predefined function names that will |
|
59 |
-- be called by the game. They give you entry points |
|
60 |
-- where you're able to call your own code using either |
|
61 |
-- provided instructions or custom functions. |
|
62 |
function onGameInit() |
|
63 |
-- At first we have to overwrite/set some global variables |
|
64 |
-- that define the map, the game has to load, as well as |
|
65 |
-- other things such as the game rules to use, etc. |
|
66 |
-- Things we don't modify here will use their default values. |
|
67 |
||
68 |
-- The base number for the random number generator |
|
4665
fa7ad5f3725f
Make basic training solvable again. Freeze RNG at current version for less of this kind of issue in future, and a bit more savable of seeds. Disable offsets in preparation for release.
nemo
parents:
4662
diff
changeset
|
69 |
Seed = 1 |
3234 | 70 |
-- Game settings and rules |
71 |
GameFlags = gfMultiWeapon + gfOneClanMode |
|
72 |
-- The time the player has to move each round (in ms) |
|
4665
fa7ad5f3725f
Make basic training solvable again. Freeze RNG at current version for less of this kind of issue in future, and a bit more savable of seeds. Disable offsets in preparation for release.
nemo
parents:
4662
diff
changeset
|
73 |
TurnTime = 30000 |
3234 | 74 |
-- The frequency of crate drops |
75 |
CaseFreq = 0 |
|
76 |
-- The number of mines being placed |
|
4162 | 77 |
MinesNum = 0 |
3234 | 78 |
-- The number of explosives being placed |
79 |
Explosives = 0 |
|
80 |
-- The delay between each round |
|
81 |
Delay = 0 |
|
82 |
-- The map to be played |
|
83 |
Map = "Mushrooms" |
|
84 |
-- The theme to be used |
|
85 |
Theme = "Nature" |
|
86 |
||
87 |
-- Create the player team |
|
4506
37744d5c877e
Finnished up the lua translations by adding training maps, campaign is ignored for now
Henek
parents:
4493
diff
changeset
|
88 |
AddTeam(loc("Shotgun Team"), 14483456, "Simple", "Island", "Default") |
3234 | 89 |
-- And add a hog to it |
4506
37744d5c877e
Finnished up the lua translations by adding training maps, campaign is ignored for now
Henek
parents:
4493
diff
changeset
|
90 |
player = AddHog(loc("Hunter"), 0, 1, "NoHat") |
7877
b3fb94986255
Fix training script positions altered by variable land dimension change. Issue #453
nemo
parents:
7165
diff
changeset
|
91 |
SetGearPosition(player, 1210, 230) |
3234 | 92 |
end |
93 |
||
94 |
-- This function is called when the round starts |
|
95 |
-- it spawns the first target that has to be destroyed. |
|
96 |
-- In addition it shows the scenario goal(s). |
|
97 |
function onGameStart() |
|
98 |
-- Spawn the first target. |
|
99 |
spawnTarget() |
|
100 |
||
101 |
-- Show some nice mission goals. |
|
102 |
-- Parameters are: caption, sub caption, description, |
|
103 |
-- extra text, icon and time to show. |
|
104 |
-- A negative icon parameter (-n) represents the n-th weapon icon |
|
105 |
-- A positive icon paramter (n) represents the (n+1)-th mission icon |
|
106 |
-- A timeframe of 0 is replaced with the default time to show. |
|
4506
37744d5c877e
Finnished up the lua translations by adding training maps, campaign is ignored for now
Henek
parents:
4493
diff
changeset
|
107 |
ShowMission(loc("Shotgun Training"), loc("Aiming Practice"), loc("Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."), -amShotgun, 0) |
3234 | 108 |
end |
109 |
||
110 |
-- This function is called every game tick. |
|
111 |
-- Note that there are 1000 ticks within one second. |
|
112 |
-- You shouldn't try to calculate too complicated |
|
113 |
-- code here as this might slow down your game. |
|
7165
aad1aea05f1e
add onGameTick20 to basic training, extend laser sight out way more (it was visible at top when completely zoomed out), move call of new turn to after AfterSwitchHedgehog to avoid lua issues in onNewTurn - if this causes problems, lua can do delayed actions in onGameTick
nemo
parents:
4665
diff
changeset
|
114 |
function onGameTick20() |
3234 | 115 |
-- If time's up, set the game to be lost. |
116 |
-- We actually check the time to be "1 ms" as it |
|
117 |
-- will be at "0 ms" right at the start of the game. |
|
7165
aad1aea05f1e
add onGameTick20 to basic training, extend laser sight out way more (it was visible at top when completely zoomed out), move call of new turn to after AfterSwitchHedgehog to avoid lua issues in onNewTurn - if this causes problems, lua can do delayed actions in onGameTick
nemo
parents:
4665
diff
changeset
|
118 |
if TurnTimeLeft < 40 and TurnTimeLeft > 20 and score < score_goal then |
3234 | 119 |
game_lost = true |
120 |
-- ... and show a short message. |
|
4506
37744d5c877e
Finnished up the lua translations by adding training maps, campaign is ignored for now
Henek
parents:
4493
diff
changeset
|
121 |
ShowMission(loc("Shotgun Training"), loc("Aiming Practice"), loc("Oh no! Time's up! Just try again."), -amSkip, 0) |
3234 | 122 |
-- How about killing our poor hog due to his poor performance? |
4493
45db8e97d282
removing all ; from lua script as an act of temporary rage and perfectionism
Henek
parents:
4350
diff
changeset
|
123 |
SetHealth(player, 0) |
3234 | 124 |
-- Just to be sure set the goal time to 1 ms |
125 |
time_goal = 1 |
|
126 |
end |
|
127 |
-- If the goal is reached or we've lost ... |
|
128 |
if score == score_goal or game_lost then |
|
129 |
-- ... check to see if the time we'd like to |
|
130 |
-- wait has passed and then ... |
|
131 |
if end_timer == 0 then |
|
132 |
-- ... end the game ... |
|
133 |
EndGame() |
|
134 |
else |
|
135 |
-- ... or just lower the timer by 1. |
|
7165
aad1aea05f1e
add onGameTick20 to basic training, extend laser sight out way more (it was visible at top when completely zoomed out), move call of new turn to after AfterSwitchHedgehog to avoid lua issues in onNewTurn - if this causes problems, lua can do delayed actions in onGameTick
nemo
parents:
4665
diff
changeset
|
136 |
end_timer = end_timer - 20 |
3234 | 137 |
-- Reset the time left to stop the timer |
138 |
TurnTimeLeft = time_goal |
|
139 |
end |
|
140 |
end |
|
141 |
end |
|
142 |
||
143 |
-- This function is called when the game is initialized |
|
144 |
-- to request the available ammo and probabilities |
|
145 |
function onAmmoStoreInit() |
|
146 |
-- add an unlimited supply of shotgun ammo |
|
3346 | 147 |
SetAmmo(amShotgun, 9, 0, 0, 0) |
3234 | 148 |
end |
149 |
||
150 |
-- This function is called when a new gear is added. |
|
151 |
-- We don't need it for this training, so we can |
|
152 |
-- keep it empty. |
|
7165
aad1aea05f1e
add onGameTick20 to basic training, extend laser sight out way more (it was visible at top when completely zoomed out), move call of new turn to after AfterSwitchHedgehog to avoid lua issues in onNewTurn - if this causes problems, lua can do delayed actions in onGameTick
nemo
parents:
4665
diff
changeset
|
153 |
-- function onGearAdd(gear) |
aad1aea05f1e
add onGameTick20 to basic training, extend laser sight out way more (it was visible at top when completely zoomed out), move call of new turn to after AfterSwitchHedgehog to avoid lua issues in onNewTurn - if this causes problems, lua can do delayed actions in onGameTick
nemo
parents:
4665
diff
changeset
|
154 |
-- end |
3234 | 155 |
|
156 |
-- This function is called before a gear is destroyed. |
|
157 |
-- We use it to count the number of targets destroyed. |
|
158 |
function onGearDelete(gear) |
|
159 |
-- We're only interested in target gears. |
|
160 |
if GetGearType(gear) == gtTarget then |
|
161 |
-- Add one point to our score/counter |
|
162 |
score = score + 1 |
|
163 |
-- If we haven't reached the goal ... |
|
164 |
if score < score_goal then |
|
165 |
-- ... spawn another target. |
|
166 |
spawnTarget() |
|
167 |
else |
|
168 |
if not game_lost then |
|
169 |
-- Otherwise show that the goal was accomplished |
|
4506
37744d5c877e
Finnished up the lua translations by adding training maps, campaign is ignored for now
Henek
parents:
4493
diff
changeset
|
170 |
ShowMission(loc("Shotgun Training"), loc("Aiming Practice"), loc("Congratulations! You've eliminated all targets|within the allowed time frame."), 0, 0) |
3234 | 171 |
-- Also let the hogs shout "victory!" |
172 |
PlaySound(sndVictory) |
|
173 |
-- Save the time left so we may keep it. |
|
174 |
time_goal = TurnTimeLeft |
|
175 |
end |
|
176 |
end |
|
177 |
end |
|
178 |
end |