share/hedgewars/Data/Missions/Training/Basic_Training_-_Shotgun.lua
author nemo
Fri, 03 May 2013 23:46:15 -0400
changeset 8955 b8cae4fe8edb
parent 8679 a8bdcf7bec20
child 10289 c3a77ff02a23
permissions -rw-r--r--
oops
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3234
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
     1
-- Hedgewars Shotgun Training
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
     2
-- Scripting Example
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
     3
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
     4
-- Lines such as this one are comments - they are ignored
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
     5
-- by the game, no matter what kind of text is in there.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
     6
-- It's also possible to place a comment after some real
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
     7
-- instruction as you see below. In short, everything
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
     8
-- following "--" is ignored.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
     9
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    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
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    15
8043
da083f8d95e6 We need custom script loading function in lua now
unc0rr
parents: 7877
diff changeset
    16
HedgewarsScriptLoad("/Scripts/Locale.lua")
3234
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    17
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    18
-- This variable will hold the number of destroyed targets.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    19
local score = 0
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    20
-- This variable represents the number of targets to destroy.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    21
local score_goal = 5
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    22
-- This variable controls how many milliseconds/ticks we'd
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    23
-- like to wait before we end the round once all targets
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    24
-- have been destroyed.
8679
a8bdcf7bec20 fix fade to black in training
nemo
parents: 8043
diff changeset
    25
local end_timer = 1000 -- 1000 ms = 1 s
3234
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    26
-- This variable is set to true if the game is lost (i.e.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    27
-- time runs out).
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    28
local game_lost = false
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    29
-- This variable will point to the hog's gear
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    30
local player = nil
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    31
-- This variable will grab the time left at the end of the round
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    32
local time_goal = 0
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    33
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    34
-- This is a custom function to make it easier to
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    35
-- spawn more targets with just one line of code
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    36
-- You may define as many custom functions as you
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    37
-- like.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    38
function spawnTarget()
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    39
	-- add a new target gear
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    40
	gear = AddGear(0, 0, gtTarget, 0, 0, 0, 0)
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    41
	
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    42
	-- move it to a random position within 0 and
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    43
	-- LAND_WIDTH - the width of the map
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    44
	FindPlace(gear, true, 0, LAND_WIDTH)
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    45
	
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    46
	-- move the target to a higher vertical position
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    47
	-- to ensure it's not somewhere down below
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    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
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    50
end
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    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
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    56
-- This function is called before the game loads its
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    57
-- resources.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    58
-- It's one of the predefined function names that will
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    59
-- be called by the game. They give you entry points
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    60
-- where you're able to call your own code using either
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    61
-- provided instructions or custom functions.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    62
function onGameInit()
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    63
	-- At first we have to overwrite/set some global variables
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    64
	-- that define the map, the game has to load, as well as
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    65
	-- other things such as the game rules to use, etc.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    66
	-- Things we don't modify here will use their default values.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    67
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    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
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    70
	-- Game settings and rules
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    71
	GameFlags = gfMultiWeapon + gfOneClanMode
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    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
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    74
	-- The frequency of crate drops
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    75
	CaseFreq = 0
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    76
	-- The number of mines being placed
4162
923db448ad16 update and fix some lua stuff
Henek
parents: 3476
diff changeset
    77
	MinesNum = 0
3234
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    78
	-- The number of explosives being placed
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    79
	Explosives = 0
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    80
	-- The delay between each round
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    81
	Delay = 0
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    82
	-- The map to be played
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    83
	Map = "Mushrooms"
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    84
	-- The theme to be used
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    85
	Theme = "Nature"
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    86
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    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
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    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
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    92
end
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    93
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    94
-- This function is called when the round starts
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    95
-- it spawns the first target that has to be destroyed.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    96
-- In addition it shows the scenario goal(s).
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    97
function onGameStart()
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    98
	-- Spawn the first target.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
    99
	spawnTarget()
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   100
	
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   101
	-- Show some nice mission goals.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   102
	-- Parameters are: caption, sub caption, description,
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   103
	-- extra text, icon and time to show.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   104
	-- A negative icon parameter (-n) represents the n-th weapon icon
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   105
	-- A positive icon paramter (n) represents the (n+1)-th mission icon
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   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
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   108
end
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   109
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   110
-- This function is called every game tick.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   111
-- Note that there are 1000 ticks within one second.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   112
-- You shouldn't try to calculate too complicated
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   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
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   115
	-- If time's up, set the game to be lost.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   116
	-- We actually check the time to be "1 ms" as it
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   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
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   119
		game_lost = true
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   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
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   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
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   124
		-- Just to be sure set the goal time to 1 ms
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   125
		time_goal = 1
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   126
	end
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   127
	-- If the goal is reached or we've lost ...
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   128
	if score == score_goal or game_lost then
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   129
		-- ... check to see if the time we'd like to
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   130
		-- wait has passed and then ...
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   131
		if end_timer == 0 then
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   132
			-- ... end the game ...
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   133
			EndGame()
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   134
		else
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   135
			-- ... or just lower the timer by 1.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   136
			-- Reset the time left to stop the timer
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   137
			TurnTimeLeft = time_goal
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   138
		end
8679
a8bdcf7bec20 fix fade to black in training
nemo
parents: 8043
diff changeset
   139
        end_timer = end_timer - 20
3234
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   140
	end
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   141
end
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   142
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   143
-- This function is called when the game is initialized
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   144
-- to request the available ammo and probabilities
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   145
function onAmmoStoreInit()
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   146
	-- add an unlimited supply of shotgun ammo
3346
967fd96f7373 Engine/Frontend:
smxx
parents: 3247
diff changeset
   147
	SetAmmo(amShotgun, 9, 0, 0, 0)
3234
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   148
end
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   149
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   150
-- This function is called when a new gear is added.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   151
-- We don't need it for this training, so we can
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   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
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   155
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   156
-- This function is called before a gear is destroyed.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   157
-- We use it to count the number of targets destroyed.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   158
function onGearDelete(gear)
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   159
	-- We're only interested in target gears.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   160
	if GetGearType(gear) == gtTarget then
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   161
		-- Add one point to our score/counter
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   162
		score = score + 1
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   163
		-- If we haven't reached the goal ...
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   164
		if score < score_goal then
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   165
			-- ... spawn another target.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   166
			spawnTarget()
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   167
		else
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   168
			if not game_lost then
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   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
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   171
			-- Also let the hogs shout "victory!"
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   172
			PlaySound(sndVictory)
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   173
			-- Save the time left so we may keep it.
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   174
			time_goal = TurnTimeLeft
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   175
			end
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   176
		end
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   177
	end
668c7d0a00a6 Trainings:
smxx
parents:
diff changeset
   178
end