Merge lp:~widelands-dev/widelands/bug-1298301 into lp:widelands

Proposed by GunChleoc
Status: Merged
Merged at revision: 7244
Proposed branch: lp:~widelands-dev/widelands/bug-1298301
Merge into: lp:widelands
Diff against target: 3705 lines (+983/-1187)
30 files modified
campaigns/atl01.wmf/scripting/init.lua (+80/-0)
campaigns/atl01.wmf/scripting/mission_thread.lua (+14/-114)
campaigns/atl01.wmf/scripting/starting_conditions.lua (+27/-0)
campaigns/atl01.wmf/scripting/texts.lua (+219/-342)
campaigns/bar01.wmf/scripting/mission_thread.lua (+1/-1)
campaigns/bar01.wmf/scripting/texts.lua (+142/-165)
campaigns/bar02.wmf/scripting/init.lua (+0/-10)
campaigns/bar02.wmf/scripting/mission_thread.lua (+35/-33)
campaigns/bar02.wmf/scripting/texts.lua (+125/-134)
campaigns/dummy.wmf/scripting/init.lua (+2/-1)
campaigns/emp01.wmf/scripting/init.lua (+0/-10)
campaigns/emp01.wmf/scripting/mission_thread.lua (+20/-19)
campaigns/emp01.wmf/scripting/texts.lua (+61/-84)
campaigns/emp02.wmf/scripting/init.lua (+1/-12)
campaigns/emp02.wmf/scripting/mission_thread.lua (+32/-29)
campaigns/emp02.wmf/scripting/texts.lua (+69/-84)
maps/MP Scenarios/Island Hopping.wmf/scripting/multiplayer_init.lua (+3/-2)
maps/MP Scenarios/Smugglers.wmf/scripting/multiplayer_init.lua (+1/-1)
maps/MP Scenarios/Smugglers.wmf/scripting/smuggling.lua (+5/-3)
maps/MP Scenarios/Smugglers.wmf/scripting/texts.lua (+28/-42)
maps/Plateau.wmf/scripting/init.lua (+11/-10)
maps/Plateau.wmf/scripting/texts.lua (+44/-75)
scripting/coroutine.lua (+3/-2)
scripting/format_scenario.lua (+14/-1)
scripting/messages.lua (+7/-7)
scripting/ui.lua (+27/-0)
scripting/win_condition_functions.lua (+4/-1)
scripting/win_conditions/02_collectors.lua (+3/-2)
scripting/win_conditions/03_territorial_lord.lua (+3/-2)
scripting/win_conditions/03_territorial_time.lua (+2/-1)
To merge this branch: bzr merge lp:~widelands-dev/widelands/bug-1298301
Reviewer Review Type Date Requested Status
SirVer Approve
GunChleoc Needs Resubmitting
Review via email: mp+236966@code.launchpad.net

Description of the change

Created new script "messages.lua" that contains functions to give send_message and message_box a delay while in road building mode. Also contains a global definition for creating a campaign objective.

Implemented with all campaign and map scenarios. Also implemented for win conditions.

Cleaned up scenario string formatting.

ETA:

Solved the threading issue for Barbarian campaign scenario 1. Crossroads message now only appears if the flag hasn't already been set by the player.

The coroutine diff is big because it contained trailing whitespaces - the only real change there is in the function "wake_me(at)".

To post a comment you must log in.
Revision history for this message
SirVer (sirver) wrote :

This will likely conflict with wl-zockers changes. Is he aware of this branch?

Revision history for this message
wl-zocker (wl-zocker) wrote :

Now I am. Parts of this I had planned anyway: An extra message_box function, the splitting into several files and string re-formatting.
I have never had to solve conflicts. How hard is that?

Revision history for this message
GunChleoc (gunchleoc) wrote :

That depends on the conflict and how well you know the code you're working on.

If you haven't defined these functions yet, you could copy over the code from this branch.

Let me know if you need help.

Revision history for this message
wl-zocker (wl-zocker) wrote :

Currently, I am still improving the tutorials. When there is an end in sight, I will take care of this branch.
Is this branch ready? The sooner it is merged, the more time I have to solve conflicts.

Revision history for this message
GunChleoc (gunchleoc) wrote :

Let's merge https://code.launchpad.net/~widelands-dev/widelands/new-tutorials first.

I'll then fix this up afterwards and send a resubmit.

Revision history for this message
GunChleoc (gunchleoc) wrote :

I have finished integrating wl-zocker's changes, so this is ready for review again.

review: Needs Resubmitting
Revision history for this message
SirVer (sirver) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'campaigns/atl01.wmf/scripting/init.lua'
2--- campaigns/atl01.wmf/scripting/init.lua 1970-01-01 00:00:00 +0000
3+++ campaigns/atl01.wmf/scripting/init.lua 2014-10-31 11:37:25 +0000
4@@ -0,0 +1,80 @@
5+-- =======================================================================
6+-- Atlanteans Tutorial Mission 01
7+-- =======================================================================
8+
9+include "scripting/coroutine.lua"
10+include "scripting/infrastructure.lua"
11+include "scripting/messages.lua"
12+include "scripting/objective_utils.lua"
13+include "scripting/table.lua"
14+include "scripting/ui.lua"
15+
16+include "map:scripting/water_rising.lua"
17+
18+-- ===================
19+-- Constants & Config
20+-- ===================
21+set_textdomain("scenario_atl01.wmf")
22+
23+game = wl.Game()
24+map = game.map
25+p1 = game.players[1]
26+first_tower_field = map:get_field(94, 149)
27+second_tower_field = map:get_field(79, 150)
28+
29+-- =================
30+-- global variables
31+-- =================
32+expand_objective = nil
33+let_the_water_rise = false -- If set to true, the water will begin to rise
34+
35+include "map:scripting/texts.lua"
36+
37+-- =================
38+-- Helper functions
39+-- =================
40+-- Show one message box
41+function msg_box(i)
42+ if i.pre_func then i.pre_func() end
43+
44+ if not i.h then i.h = 400 end
45+
46+ message_box(p1, i.title, i.body, i)
47+
48+ if i.post_func then i.post_func() end
49+
50+ sleep(130)
51+end
52+
53+-- Show many message boxes
54+function msg_boxes(boxes_descr)
55+ for idx,box_descr in ipairs(boxes_descr) do
56+ msg_box(box_descr)
57+ end
58+end
59+
60+-- Return the total number of items in warehouses of the given
61+-- ware.
62+function count_in_warehouses(ware)
63+ local whs = array_combine(
64+ p1:get_buildings("headquarters"),
65+ p1:get_buildings("warehouse")
66+ )
67+ local rv = 0
68+ for idx,wh in ipairs(whs) do
69+ rv = rv + wh:get_wares(ware)
70+ end
71+ return rv
72+end
73+
74+function send_building_lost_message(f)
75+ send_message(p1, _"Building lost!",
76+ rt("image=".. f.immovable.descr.representative_image,
77+ p(_"We lost a building to the ocean!")
78+ ), { field = f, popup = false }
79+ )
80+end
81+
82+-- starting conditions are included later in the intro
83+include "map:scripting/mission_thread.lua"
84+include "map:scripting/water_rising.lua"
85
86=== renamed file 'campaigns/atl01.wmf/scripting/init.lua' => 'campaigns/atl01.wmf/scripting/mission_thread.lua'
87--- campaigns/atl01.wmf/scripting/init.lua 2014-07-27 16:26:39 +0000
88+++ campaigns/atl01.wmf/scripting/mission_thread.lua 2014-10-31 11:37:25 +0000
89@@ -2,108 +2,6 @@
90 -- Atlanteans Tutorial Mission 01
91 -- =======================================================================
92
93-include "scripting/coroutine.lua"
94-include "scripting/table.lua"
95-include "scripting/infrastructure.lua"
96-include "scripting/objective_utils.lua"
97-include "scripting/ui.lua"
98-
99-include "map:scripting/water_rising.lua"
100-
101--- ===================
102--- Constants & Config
103--- ===================
104-set_textdomain("scenario_atl01.wmf")
105-
106-game = wl.Game()
107-map = game.map
108-p1 = game.players[1]
109-first_tower_field = map:get_field(94, 149)
110-second_tower_field = map:get_field(79, 150)
111-
112--- =================
113--- global variables
114--- =================
115-expand_objective = nil
116-let_the_water_rise = false -- If set to true, the water will begin to rise
117-
118-include "map:scripting/texts.lua"
119-
120--- =================
121--- Helper functions
122--- =================
123--- Show one message box
124-function msg_box(i)
125- if i.pre_func then i.pre_func() end
126-
127- if not i.h then i.h = 400 end
128-
129- p1:message_box(i.title, i.body, i)
130-
131- if i.post_func then i.post_func() end
132-
133- sleep(130)
134-end
135-
136--- Show many message boxes
137-function msg_boxes(boxes_descr)
138- for idx,box_descr in ipairs(boxes_descr) do
139- msg_box(box_descr)
140- end
141-end
142-
143--- Add an objective
144-function add_obj(o)
145- return p1:add_objective(o.name, o.title, o.body)
146-end
147-
148--- Return the total number of items in warehouses of the given
149--- ware.
150-function count_in_warehouses(ware)
151- local whs = array_combine(
152- p1:get_buildings("headquarters"),
153- p1:get_buildings("warehouse")
154- )
155- local rv = 0
156- for idx,wh in ipairs(whs) do
157- rv = rv + wh:get_wares(ware)
158- end
159- return rv
160-end
161-
162-function send_building_lost_message(f)
163--- TODO: replace menu.png with representative_image as soon as this has been wrapped
164- p1:send_message(_"Building lost!",
165- rt("image=tribes/atlanteans/".. f.immovable.descr.name .."/menu.png",
166- p(_"We lost a building to the ocean!")
167- ), { field = f, popup = true }
168- )
169-end
170-
171--- ===============
172--- Initialization
173--- ===============
174-function initialize()
175- p1:allow_buildings("all")
176- p1:forbid_buildings{"shipyard"}
177-
178- -- A default headquarters
179- include "tribes/atlanteans/scripting/sc00_headquarters.lua"
180- init.func(p1) -- defined in sc00_headquarters
181- set_textdomain("scenario_atl01.wmf")
182- local hq = wl.Game().map.player_slots[1].starting_field.immovable
183- hq:set_workers{shipwright=1}
184-
185- -- Place some buildings
186- prefilled_buildings(p1,
187- {"high_tower", first_tower_field.x, first_tower_field.y,
188- soldiers = { [{0,0,0,0}] = 1 }
189- },
190- {"high_tower", second_tower_field.x, second_tower_field.y,
191- soldiers = { [{0,0,0,0}] = 1 }
192- }
193- )
194-end
195
196 -- ==============
197 -- Logic Threads
198@@ -114,7 +12,7 @@
199 msg_boxes(initial_messages)
200 sleep(200)
201
202- initialize()
203+ include "map:scripting/starting_conditions.lua"
204
205 build_environment()
206 end
207@@ -141,10 +39,12 @@
208 expand_objective.done = true
209 let_the_water_rise = true
210
211- scroll_smoothly_to(fowned)
212+ local pts = wait_for_roadbuilding_and_scroll(fowned)
213 msg_boxes(horsefarm_and_warehouse_story)
214+ -- Go back to where we were
215+ timed_scroll(array_reverse(pts))
216
217- local o = add_obj(obj_horsefarm_and_warehouse)
218+ local o = add_campaign_objective(obj_horsefarm_and_warehouse)
219 while not check_for_buildings(p1, {
220 horsefarm = 1, warehouse = 1,
221 }) do sleep(2384) end
222@@ -154,7 +54,7 @@
223 function build_training()
224 msg_boxes(training_story)
225
226- local o = add_obj(obj_make_training_buildings)
227+ local o = add_campaign_objective(obj_make_training_buildings)
228 while not check_for_buildings(p1, {
229 dungeon = 1, labyrinth = 1
230 }) do sleep(3874) end
231@@ -166,7 +66,7 @@
232 function build_heavy_industrys_and_mining()
233 msg_boxes(heavy_industry_story)
234
235- local o = add_obj(obj_make_heavy_industry_and_mining)
236+ local o = add_campaign_objective(obj_make_heavy_industry_and_mining)
237 while not check_for_buildings(p1, {
238 coalmine = 1, ironmine = 1, goldmine = 1, crystalmine = 1,
239 smelting_works = 1, weaponsmithy = 1, armorsmithy = 1,
240@@ -186,7 +86,7 @@
241 run(build_heavy_industrys_and_mining)
242 end)
243
244- local o = add_obj(obj_make_food_infrastructure)
245+ local o = add_campaign_objective(obj_make_food_infrastructure)
246 while not check_for_buildings(p1, {
247 farm = 1, blackroot_farm = 1,
248 sawmill = 1, well = 1, bakery = 1,
249@@ -203,7 +103,7 @@
250
251 -- There is no spidercloth in any warehouse!
252 msg_boxes(spidercloth_messages)
253- local o = add_obj(obj_spidercloth_production)
254+ local o = add_campaign_objective(obj_spidercloth_production)
255
256 while not check_for_buildings(p1, {
257 spiderfarm = 1, ["gold-spinning-mill"] = 1, ["weaving-mill"] = 1
258@@ -216,9 +116,9 @@
259
260 function build_environment()
261 msg_boxes(first_briefing_messages)
262- local o = add_obj(obj_ensure_build_wares_production)
263+ local o = add_campaign_objective(obj_ensure_build_wares_production)
264
265- expand_objective = add_obj(obj_expand)
266+ expand_objective = add_campaign_objective(obj_expand)
267
268 while not check_for_buildings(p1, {
269 woodcutters_house = 2,
270@@ -254,7 +154,7 @@
271 while lob_fields.size > 0 and #msgs > 0 do
272 for f in lob_fields:items() do
273 if p1:sees_field(f) then
274- scroll_smoothly_to(f)
275+ wait_for_roadbuilding_and_scroll(f)
276
277 msg_boxes(msgs[1])
278
279@@ -312,9 +212,9 @@
280 first_message_send = true
281 run(function()
282 sleep(200)
283- scroll_smoothly_to(f)
284+ wait_for_roadbuilding_and_scroll(f)
285 msg_boxes(field_flooded_msg)
286- add_obj(obj_build_ships)
287+ add_campaign_objective(obj_build_ships)
288 p1:allow_buildings{"shipyard"}
289 run(check_for_ships)
290 end)
291
292=== added file 'campaigns/atl01.wmf/scripting/starting_conditions.lua'
293--- campaigns/atl01.wmf/scripting/starting_conditions.lua 1970-01-01 00:00:00 +0000
294+++ campaigns/atl01.wmf/scripting/starting_conditions.lua 2014-10-31 11:37:25 +0000
295@@ -0,0 +1,27 @@
296+-- =======================================================================
297+-- Atlanteans Tutorial Mission 01
298+-- =======================================================================
299+
300+-- ===============
301+-- Initialization
302+-- ===============
303+
304+p1:allow_buildings("all")
305+p1:forbid_buildings{"shipyard"}
306+
307+-- A default headquarters
308+include "tribes/atlanteans/scripting/sc00_headquarters.lua"
309+init.func(p1) -- defined in sc00_headquarters
310+
311+local hq = wl.Game().map.player_slots[1].starting_field.immovable
312+hq:set_workers{shipwright=1}
313+
314+-- Place some buildings
315+prefilled_buildings(p1,
316+ {"high_tower", first_tower_field.x, first_tower_field.y,
317+ soldiers = { [{0,0,0,0}] = 1 }
318+ },
319+ {"high_tower", second_tower_field.x, second_tower_field.y,
320+ soldiers = { [{0,0,0,0}] = 1 }
321+ }
322+)
323
324=== modified file 'campaigns/atl01.wmf/scripting/texts.lua'
325--- campaigns/atl01.wmf/scripting/texts.lua 2014-10-18 07:37:16 +0000
326+++ campaigns/atl01.wmf/scripting/texts.lua 2014-10-31 11:37:25 +0000
327@@ -29,7 +29,7 @@
328 -- =======================================================================
329 obj_ensure_build_wares_production = {
330 name = "obj_ensure_build_wares_production",
331- title = _ "Ensure the supply of building wares",
332+ title = _"Ensure the supply of building wares",
333 number = 6,
334 body = objective_text(_"Supply Building Wares", _
335 [[Supply basic building material for your economy:]] .. paragraphdivider() ..
336@@ -42,20 +42,20 @@
337
338 obj_expand = {
339 name = "obj_expand",
340- title = _ "Expand your territory and explore",
341+ title = _"Expand your territory and explore",
342 number = 1,
343- body = objective_text(_"Expand and Explore", _(
344-[[The island is huge and as long as we are not sure that we are alone here, we cannot relax. ]] ..
345-[[Explore and conquer it, this is the only way to protect us from threats on the island and from Atlantis.]]) .. paragraphdivider() ..
346+ body = objective_text(_"Expand and Explore",
347+ _([[The island is huge and as long as we are not sure that we are alone here, we cannot relax. Explore and conquer it, this is the only way to protect us from threats on the island and from Atlantis.]]) .. paragraphdivider() ..
348 listitem_bullet(_[[Build military sites to expand your territory]])
349 ),
350 }
351
352 obj_make_food_infrastructure = {
353 name = "obj_make_food_infrastructure",
354- title = _ "Establish a solid food production",
355+ title = _"Establish a solid food production",
356 number = 10,
357- body = objective_text(_"Food Production", _[[Food is very important for mines and military training areas. Establish a well working food environment by building at least one farm, one blackroot farm and a mill. The two kinds of flour together with water from a well will be baked into bread in a bakery, so build a bakery and a well, too.]] .. paragraphdivider() ..
358+ body = objective_text(_"Food Production",
359+ _[[Food is very important for mines and military training areas. Establish a well working food environment by building at least one farm, one blackroot farm and a mill. The two kinds of flour together with water from a well will be baked into bread in a bakery, so build a bakery and a well, too.]] .. paragraphdivider() ..
360 _[[The other two important food wares are smoked fish and smoked meat. Raw meat is delivered from a hunter. A fisher gets the fish out of the sea while a fish breeder makes sure that a school of fish does not go extinct by breeding more. Make sure that there are always fish left, otherwise the fish breeder won’t be able to breed new ones. The smoking happens in a smokery, you will need at least two of those.]] .. paragraphdivider() ..
361 listitem_bullet(_[[Build a farm and a blackroot farm]]) ..
362 listitem_bullet(_[[Build a mill to make cornflour and blackroot flour]]) ..
363@@ -70,9 +70,10 @@
364
365 obj_spidercloth_production = {
366 name = "obj_spidercloth_production",
367- title = _ "Build a spider farm and a weaving mill",
368+ title = _"Build a spider farm and a weaving mill",
369 number = 3,
370- body = objective_text(_"Spidercloth Production", _[[The weavers produce spidercloth and tabards in the weaving mill. Spidercloth is needed for the construction of some buildings and clothing, while tabards are the uniforms of soldiers. The weaving mill needs gold yarn and spideryarn as raw material. Spideryarn is produced by the spider farm, while gold yarn is produced by the gold spinning mill out of gold.]] .. paragraphdivider() ..
371+ body = objective_text(_"Spidercloth Production",
372+ _[[The weavers produce spidercloth and tabards in the weaving mill. Spidercloth is needed for the construction of some buildings and clothing, while tabards are the uniforms of soldiers. The weaving mill needs gold yarn and spideryarn as raw material. Spideryarn is produced by the spider farm, while gold yarn is produced by the gold spinning mill out of gold.]] .. paragraphdivider() ..
373 listitem_bullet(_[[Build a weaving mill]]) ..
374 listitem_bullet(_[[Build a spider farm]]) ..
375 listitem_bullet(_[[Build a gold spinning mill]])
376@@ -81,9 +82,10 @@
377
378 obj_make_heavy_industry_and_mining = {
379 name = "obj_make_heavy_industry_and_mining",
380- title = _ "Build industry and mines",
381+ title = _"Build industry and mines",
382 number = 5,
383- body = objective_text(_"Industry and Mines", _[[Iron ore, gold ore and coal are mined in the respective mines. The crystal mine will dig for crystal, quartz and diamond – all of them are precious materials and very rarely found. It will produce a lot of stone while searching for them.]] .. paragraphdivider() ..
384+ body = objective_text(_"Industry and Mines",
385+ _[[Iron ore, gold ore and coal are mined in the respective mines. The crystal mine will dig for crystal, quartz and diamond – all of them are precious materials and very rarely found. It will produce a lot of stone while searching for them.]] .. paragraphdivider() ..
386 listitem_bullet(_[[The ores have to be smelted at a smelting works before they can be used. The refined materials are then used in the weapon smithy, the armor smithy and the toolsmithy.]]) .. paragraphdivider() ..
387 listitem_bullet(_[[Build a mine of each type. Make sure to send geologists to the mountain first.]]) ..
388 listitem_bullet(_[[Build a smelting works]]) ..
389@@ -96,7 +98,8 @@
390 name = "obj_make_training_buildings",
391 title = _"Build training buildings for soldiers",
392 number = 2,
393- body = objective_text(_"Soldier Training Buildings", _[[Like all other tribes, the Atlanteans are also able to train soldiers: the dungeon trains attack – the major attribute of the Atlanteans – and the labyrinth trains evasion, health and defense. The items produced by the industry are used to train better soldiers in the two training buildings.]] .. paragraphdivider() ..
394+ body = objective_text(_"Soldier Training Buildings",
395+ _[[Like all other tribes, the Atlanteans are also able to train soldiers: the dungeon trains attack – the major attribute of the Atlanteans – and the labyrinth trains evasion, health and defense. The items produced by the industry are used to train better soldiers in the two training buildings.]] .. paragraphdivider() ..
396 listitem_bullet(_[[Build a dungeon and a labyrinth]])
397 )
398 }
399@@ -105,7 +108,8 @@
400 name = "obj_horsefarm_and_warehouse",
401 title = _"Build a warehouse and a horse farm",
402 number = 2,
403- body = objective_text(_"Warehouse and Horse Farm", _[[As your road network gets longer and more complicated, you should employ horses to help out your carriers. Horses are bred at horse farms using water and corn. A warehouse will also help to ensure that your transportation system does not collapse.]] .. paragraphdivider() ..
404+ body = objective_text(_"Warehouse and Horse Farm",
405+ _[[As your road network gets longer and more complicated, you should employ horses to help out your carriers. Horses are bred at horse farms using water and corn. A warehouse will also help to ensure that your transportation system does not collapse.]] .. paragraphdivider() ..
406 listitem_bullet(_[[Build a warehouse]]) ..
407 listitem_bullet(_[[Build a horse farm]])
408 )
409@@ -113,9 +117,10 @@
410
411 obj_build_ships = {
412 name = "obj_build_ships",
413- title = _ "Build 3 ships to escape from the island",
414+ title = _"Build 3 ships to escape from the island",
415 number = 1,
416- body = objective_text(_"Escape From the Island", _[[There is a lake at the top of the island. Build three ships in these waters and you might be able to rescue your people before the island is swallowed completely by the ocean.]] .. paragraphdivider() ..
417+ body = objective_text(_"Escape From the Island",
418+ _[[There is a lake at the top of the island. Build three ships in these waters and you might be able to rescue your people before the island is swallowed completely by the ocean.]] .. paragraphdivider() ..
419 listitem_bullet(_[[Build a shipyard close to the lake to start building ships]])
420 )
421 }
422@@ -126,284 +131,183 @@
423
424 -- This is an array or message descriptions
425 initial_messages = {
426-{
427- title = _ "Proud to the Death",
428- body = rt(
429- h1(_"Favored by the God") ..
430- p(_(
431-[[On the hidden and lost island of Atlantis, a proud tribe settled since the ]] ..
432-[[world was very young. Ruled by the bloodline of King Ajanthul – the first human ]] ..
433-[[to be empowered by the sea god Lutas to breathe above sea level – and the ]] ..
434-[[wise clerics, who provided the link to Lutas – they prospered and became ]] ..
435-[[civilized.]]
436- )) .. p(_(
437-[[This story is taking place during the reign of King Askandor, the 43rd successor of King Ajanthul. ]] ..
438-[[He had been a good king, ruling Atlantis with wisdom and foresight. ]] ..
439-[[But with age, he became afraid of dying and so he began looking for ]] ..
440-[[a cure for death even though most clerics warned him against it. ]] ..
441-[[Some said that endless life was only for the gods and that to seek for it was forbidden.]]
442- ))
443- ),
444-},
445-{
446- title = _ "Disgraced Before the God",
447- body = rt(
448- h1(_"The God’s Punishment") ..
449- p(_(
450-[[But all seemed well. Only the horses seemed to feel something was wrong. ]] ..
451-[[During the nights, they went crazy and were full of fear. ]] ..
452-[[It was not long before the horse breeder Xydra figured out what was wrong with them: ]] ..
453-[[the sea level in front of their stable was rising with ever increasing speed.]]
454- )) .. p(_(
455-[[The clerics retreated into meditation and the reason for the rising water was soon to be found: ]] ..
456-[[the god Lutas had lost faith in the Atlanteans because of the boldness of their king. ]] ..
457-[[He decided to withdraw the rights that were granted to King Ajanthul and his children. ]] ..
458-[[And so, he called them back below the sea again.]]
459- ))
460-)
461-},
462-{
463- title = _ "Uproar and Confusion",
464- body = rt(
465- h1(_"Emerging Chaos…") ..
466- p(_(
467-[[Guilt-ridden, the king committed suicide. ]] ..
468-[[Without a monarch, the people turned to the clerics, but they had no substantial help to offer. ]] ..
469-[[Most accepted their fate while others tried to change the god’s mind by offering animals in his temple. ]] ..
470-[[But to no avail…]]
471- )) .. p(_(
472-[[Jundlina, the late king’s daughter and the highest priestess of the god was the most determined cleric. ]] ..
473-[[As countless offerings didn’t change the situation, she convinced herself that to soothe the god, ]] ..
474-[[an offer of great personal value was needed. So she offered him her most beloved: ]] ..
475-[[her husband, the father of her only child.]]
476- )) .. p(_(
477-[[But not even this changed the mind of the god. The water kept on rising. ]] ..
478-[[Nearly driven insane by guilt, pain and anger, Jundlina became a heretic: ]] ..
479-[[Secretly, she gathered people of the common folk who were not in line ]] ..
480-[[with the decision of the clerics to accept the god’s will. ]] ..
481-[[Together with them, she set the temple on fire and stole a ship to flee from the god’s influence over Atlantis. ]] ..
482-[[This small group started praying to Satul, the fire god and the worst enemy of Lutas.]]
483- )) .. p(_(
484-[[Leaving the dying Atlantis and their past behind, they started on a quest to ]] ..
485-[[find a place sheltered by the fire and protected from the sea.]]
486- ))
487-)
488-},
489+ {
490+ title = _"Proud to the Death",
491+ body = rt(
492+ h1(_"Favored by the God") ..
493+ p(_([[On the hidden and lost island of Atlantis, a proud tribe settled since the world was very young. Ruled by the bloodline of King Ajanthul – the first human to be empowered by the sea god Lutas to breathe above sea level – and the wise clerics, who provided the link to Lutas – they prospered and became civilized.]])) ..
494+ p(_([[This story is taking place during the reign of King Askandor, the 43rd successor of King Ajanthul. He had been a good king, ruling Atlantis with wisdom and foresight. But with age, he became afraid of dying and so he began looking for a cure for death even though most clerics warned him against it. Some said that endless life was only for the gods and that to seek for it was forbidden.]]))
495+ )
496+ },
497+ {
498+ title = _"Disgraced Before the God",
499+ body = rt(
500+ h1(_"The God’s Punishment") ..
501+ p(_([[But all seemed well. Only the horses seemed to feel something was wrong. During the nights, they went crazy and were full of fear. It was not long before the horse breeder Xydra figured out what was wrong with them: the sea level in front of their stable was rising with ever increasing speed.]])) ..
502+ p(_([[The clerics retreated into meditation and the reason for the rising water was soon to be found: the god Lutas had lost faith in the Atlanteans because of the boldness of their king. He decided to withdraw the rights that were granted to King Ajanthul and his children. And so, he called them back below the sea again.]]))
503+ )
504+ },
505+ {
506+ title = _"Uproar and Confusion",
507+ body = rt(
508+ h1(_"Emerging Chaos...") ..
509+ p(_([[Guilt-ridden, the king committed suicide. Without a monarch, the people turned to the clerics, but they had no substantial help to offer. Most accepted their fate while others tried to change the god’s mind by offering animals in his temple. But to no avail...]])) ..
510+ p(_([[Jundlina, the late king’s daughter and the highest priestess of the god was the most determined cleric. As countless offerings didn’t change the situation, she convinced herself that to soothe the god, an offer of great personal value was needed. So she offered him her most beloved: her husband, the father of her only child.]])) ..
511+ p(_([[But not even this changed the mind of the god. The water kept on rising. Nearly driven insane by guilt, pain and anger, Jundlina became a heretic: Secretly, she gathered people of the common folk who were not in line with the decision of the clerics to accept the god’s will. Together with them, she set the temple on fire and stole a ship to flee from the god’s influence over Atlantis. This small group started praying to Satul, the fire god and the worst enemy of Lutas.]])) ..
512+ p(_([[Leaving the dying Atlantis and their past behind, they started on a quest to find a place sheltered by the fire and protected from the sea.]]))
513+ )
514+ },
515 } -- end of initial messages.
516
517 first_briefing_messages = {
518-{
519- title = _ "The Princess’ Memoir",
520- body = jundlina(_ "Jundlina Writes Down Her Memories", _(
521-[[We left Atlantis and sailed east. ]] ..
522-[[We entered the forbidden sea on the sixth day without noticing any pursuers from Atlantis ]] ..
523-[[and without Lutas having smashed our ship. Now, we are out of his reach. ]] ..
524-[[One day later, we sighted an island which seems to have one of these fire spitting mountains on it. ]] ..
525-[[I deemed this a sign from the fire god and we landed on its shore.]])
526-.. paragraphdivider() .. _(
527-[[We spent the last week building two watchtowers on the mountains close to our landing area; ]] ..
528-[[and, of course, a hall for us all. We have very talented constructors in our group – still, ]] ..
529-[[the buildings do not match the art we had on Atlantis. I hope they will withstand the next rain. ]] ..
530-[[At least, the towers will warn us if a ship from Atlantis follows us and if the island is inhabited, ]] ..
531-[[we will see attackers a long time before they arrive.]])
532-.. paragraphdivider() .. _(
533-[[We have established ourselves on this island. The next step is now to make it a home. ]] ..
534-[[I reckon we need to establish a sustainable economy and to explore our surroundings. ]] ..
535-[[I called for specialists and will follow their advice.]])
536- )
537-},
538-{
539- title = _ "Loftomor and Sidolus Arrive",
540- body = jundlina( _"Jundlina", _(
541-[[May Satul warm you both. Loftomor, you have been the island’s most renowned architect. ]] ..
542-[[Sidolus, you are a seasoned warrior and strategist. I have called you before me to seek your counsel: ]] ..
543-[[what needs to be done to make this our new home?]]
544- ))
545-},
546-{
547- title = _ "Loftomor Speaks",
548- body = loftomor(_(
549-[[May Satul warm you, Jundlina! ]] ..
550-[[The most important things for building a settlement are the building materials. ]] ..
551-[[There are some trees here, so we should build housings for some woodcutters and of course also for foresters, ]] ..
552-[[so we will not run out of trees. Oh, and we mustn’t forget the sawmill, ]] ..
553-[[for most buildings can’t be made out of logs alone. Stronger buildings also need stone, ]] ..
554-[[but there is plenty to the north-east of here; ]] ..
555-[[we just need to build a quarry, and my stonemasons will go to work promptly.]]
556- )) .. new_objectives(obj_ensure_build_wares_production)
557-},
558-{
559- title = _ "Sidolus Speaks",
560- body = sidolus(_(
561-[[May Satul warm you, Jundlina! I agree with what Loftomor proposes. ]] ..
562-[[We need a good supply of building materials for we have to expand our territory swiftly. ]] ..
563-[[I will not feel safe on this island as long as we have not seen all its shores it. ]] ..
564-[[I brought plenty of good men from Atlantis. The military might is available. ]] ..
565-[[We only need some housing to live in.]])
566- ) .. new_objectives(obj_expand)
567-}
568+ {
569+ title = _"The Princess’ Memoir",
570+ body = jundlina(_"Jundlina Writes Down Her Memories",
571+ _([[We left Atlantis and sailed east. We entered the forbidden sea on the sixth day without noticing any pursuers from Atlantis and without Lutas having smashed our ship. Now, we are out of his reach. One day later, we sighted an island which seems to have one of these fire spitting mountains on it. I deemed this a sign from the fire god and we landed on its shore.]])
572+ .. paragraphdivider() ..
573+ _([[We spent the last week building two watchtowers on the mountains close to our landing area; and, of course, a hall for us all. We have very talented constructors in our group – still, the buildings do not match the art we had on Atlantis. I hope they will withstand the next rain. At least, the towers will warn us if a ship from Atlantis follows us and if the island is inhabited, we will see attackers a long time before they arrive.]])
574+ .. paragraphdivider() ..
575+ _([[We have established ourselves on this island. The next step is now to make it a home. I reckon we need to establish a sustainable economy and to explore our surroundings. I called for specialists and will follow their advice.]]))
576+ },
577+ {
578+ title = _"Loftomor and Sidolus Arrive",
579+ body = jundlina( _"Jundlina",
580+ _([[May Satul warm you both. Loftomor, you have been the island’s most renowned architect. Sidolus, you are a seasoned warrior and strategist. I have called you before me to seek your counsel: what needs to be done to make this our new home?]]))
581+ },
582+ {
583+ title = _"Loftomor Speaks",
584+ body = loftomor(
585+ _([[May Satul warm you, Jundlina! The most important things for building a settlement are the building materials. There are some trees here, so we should build housings for some woodcutters and of course also for foresters, so we will not run out of trees. Oh, and we mustn’t forget the sawmill, for most buildings can’t be made out of logs alone. Stronger buildings also need stone, but there is plenty to the north-east of here; we just need to build a quarry, and my stonemasons will go to work promptly.]]))
586+ .. new_objectives(obj_ensure_build_wares_production)
587+ },
588+ {
589+ title = _"Sidolus Speaks",
590+ body = sidolus(
591+ _([[May Satul warm you, Jundlina! I agree with what Loftomor proposes. We need a good supply of building materials for we have to expand our territory swiftly. I will not feel safe on this island as long as we have not seen all its shores it. I brought plenty of good men from Atlantis. The military might is available. We only need some housing to live in.]]))
592+ .. new_objectives(obj_expand)
593+ }
594 }
595
596 food_story_message = {
597-{
598- title = _ "Jundlina is Satisfied",
599- body = jundlina(_"Jundlina’s Memoirs", _(
600-[[Our building infrastructure is finished and I spent some days making sure that everybody is working well together. ]] ..
601-[[Now, there are other pressing matters. ]] ..
602-[[I called Colionder, my personal cook, before me to get his help with sorting some things out.]]
603- ))
604-},
605-{
606- title = _ "Colionder Arrives",
607- body = colionder(_
608-[[May Satul warm you, Jundlina. Can I be of any service to you or the god?]]
609- )
610-},
611-{
612- title = _ "Jundlina Replies",
613- body = jundlina(_"Jundlina", _(
614-[[May Satul warm you too, Colionder. ]] ..
615-[[Yes, I wondered if there is a way that we could centralize our food production. ]] ..
616-[[We lose a lot of productivity because our people are accustomed to making their own food. ]] ..
617-[[I feel if we could split responsibilities, it would be better for us all. ]] ..
618-[[I want your thoughts on this.]]
619- ))
620-},
621-{
622- title = _ "Colionder is in Thought",
623- body = colionder(_(
624-[[Ahh, but I think this is impossible to change. The preparing and eating of food is something deeply ingrained in us Atlanteans – it is a ceremony that we just need for our well-being. So I guess we cannot take this away from the individuals completely.]])
625-.. paragraphdivider() .. _(
626-[[But we might find a compromise in between: for me, making bread is a troublesome task. Grinding the blackroot and corn to flour and then baking the bread is tedious and boring; I feel a more industrial approach would be helpful here. I for one would love to just have fresh bread delivered to my house every day.]])
627-.. paragraphdivider() .. _(
628-[[Oooh and even more important: the smoking of fish and meat to cleanse them and improve their taste is terrible. My house is full of smoke and stinks for weeks afterwards. Don’t you think that this could be done in a special building where the side effects do not matter? I think those two things would be accepted by the people and would reduce the cooking time without taking away the ritual.]]
629- ))
630-},
631-{
632- title = _ "Jundlina Agrees",
633- body = jundlina(_
634-[[Your words sound wise to me, Colionder. So be it then.]]
635- ) .. new_objectives(obj_make_food_infrastructure)
636-},
637+ {
638+ title = _"Jundlina is Satisfied",
639+ body = jundlina(_"Jundlina’s Memoirs",
640+ _([[Our building infrastructure is finished and I spent some days making sure that everybody is working well together. Now, there are other pressing matters. I called Colionder, my personal cook, before me to get his help with sorting some things out.]]))
641+ },
642+ {
643+ title = _"Colionder Arrives",
644+ body = colionder(
645+ _[[May Satul warm you, Jundlina. Can I be of any service to you or the god?]])
646+ },
647+ {
648+ title = _"Jundlina Replies",
649+ body = jundlina(_"Jundlina",
650+ _([[May Satul warm you too, Colionder. Yes, I wondered if there is a way that we could centralize our food production. We lose a lot of productivity because our people are accustomed to making their own food. I feel if we could split responsibilities, it would be better for us all. I want your thoughts on this.]]))
651+ },
652+ {
653+ title = _"Colionder is in Thought",
654+ body = colionder(
655+ _([[Ahh, but I think this is impossible to change. The preparing and eating of food is something deeply ingrained in us Atlanteans – it is a ceremony that we just need for our well-being. So I guess we cannot take this away from the individuals completely.]])
656+ .. paragraphdivider() ..
657+ _([[But we might find a compromise in between: for me, making bread is a troublesome task. Grinding the blackroot and corn to flour and then baking the bread is tedious and boring; I feel a more industrial approach would be helpful here. I for one would love to just have fresh bread delivered to my house every day.]])
658+ .. paragraphdivider() ..
659+ _([[Oooh and even more important: the smoking of fish and meat to cleanse them and improve their taste is terrible. My house is full of smoke and stinks for weeks afterwards. Don’t you think that this could be done in a special building where the side effects do not matter? I think those two things would be accepted by the people and would reduce the cooking time without taking away the ritual.]]))
660+ },
661+ {
662+ title = _"Jundlina Agrees",
663+ body = jundlina(_"Jundlina Agrees",
664+ _([[Your words sound wise to me, Colionder. So be it then.]]))
665+ .. new_objectives(obj_make_food_infrastructure)
666+ },
667 }
668
669 food_story_ended_messages = {
670 {
671- title = _ "Jundlina is Satisfied",
672- body = jundlina(_ "Jundlina is Reviewing the Reports", _(
673-[[Seems like our food production is finished and everybody is working together nicely. ]] ..
674-[[It is really starting to feel like home here.]]
675- ))
676+ title = _"Jundlina is Satisfied",
677+ body = jundlina(_"Jundlina is Reviewing the Reports",
678+ _([[Seems like our food production is finished and everybody is working together nicely. It is really starting to feel like home here.]]))
679 }
680 }
681
682 spidercloth_messages = {
683 {
684- title = _"A Man Comes to Jundlina",
685- body = opol(_(
686-[[May Satul warm you, Jundlina. My name is Opol, and I am the highest weaver of the guild abandoning Atlantis and Lutas with you. I come with sad news indeed: we have no more spidercloth. Not a single piece is to be found in our warehouses. Could you not help the weavers’ guild by arranging the building of a weaving mill and a spider farm? The spiders deliver the finest silk and we will produce the finest spidercloth from it.]])
687-.. paragraphdivider() .. _(
688-[[We offer to also produce the tabards for young soldiers and the golden tabards for officers for you in exchange. You will need them for sure as soon as you want to recruit new soldiers.]]))
689- },
690- {
691- title = _ "Jundlina Replies",
692- body = jundlina(_ "Jundlina Replies", _(
693-[[May Satul warm you too, Opol. I wanted to delay production of spidercloth, but I understand your urgency. ]] ..
694-[[Your suggestion sounds fair to me, I will build your weaving mill and spider farm. ]] ..
695-[[I will also build a gold spinning mill so that the golden tabards you make will not be golden by name alone.]]
696- )) .. new_objectives(obj_spidercloth_production)
697- }
698+ title = _"A Man Comes to Jundlina",
699+ body = opol(
700+ _([[May Satul warm you, Jundlina. My name is Opol, and I am the highest weaver of the guild abandoning Atlantis and Lutas with you. I come with sad news indeed: we have no more spidercloth. Not a single piece is to be found in our warehouses. Could you not help the weavers’ guild by arranging the building of a weaving mill and a spider farm? The spiders deliver the finest silk and we will produce the finest spidercloth from it.]])
701+ .. paragraphdivider() ..
702+ _([[We offer to also produce the tabards for young soldiers and the golden tabards for officers for you in exchange. You will need them for sure as soon as you want to recruit new soldiers.]]))
703+ },
704+ {
705+ title = _"Jundlina Replies",
706+ body = jundlina(_"Jundlina",
707+ _([[May Satul warm you too, Opol. I wanted to delay production of spidercloth, but I understand your urgency. Your suggestion sounds fair to me, I will build your weaving mill and spider farm. I will also build a gold spinning mill so that the golden tabards you make will not be golden by name alone.]]))
708+ .. new_objectives(obj_spidercloth_production)
709+ }
710 }
711
712 spidercloth_story_ended_messages = {
713 {
714- title = _ "Opol Seeks Out Jundlina",
715- body = opol(_(
716-[[May Satul warm you, Jundlina! ]] ..
717-[[The weaving mill, gold spinning mill and spider farm buildings are complete ]] ..
718-[[and are starting their work at this very moment. The weavers’ guild is very grateful for your support ]] ..
719-[[and we will stand by our word and deliver the first tabard very soon.]]
720- ))
721+ title = _"Opol Seeks Out Jundlina",
722+ body = opol(
723+ _([[May Satul warm you, Jundlina! The weaving mill, gold spinning mill and spider farm buildings are complete and are starting their work at this very moment. The weavers’ guild is very grateful for your support and we will stand by our word and deliver the first tabard very soon.]]))
724 },
725 {
726- title = _ "Jundlina Replies",
727- body = jundlina(_(
728-[[This is good news indeed, Opol. Our economy is developing very well. ]] ..
729-[[Go back to your work now, Opol, and may Satul warm you and all your guild members!]]
730- ))
731+ title = _"Jundlina Replies",
732+ body = jundlina(_"Jundlina",
733+ _([[This is good news indeed, Opol. Our economy is developing very well. Go back to your work now, Opol, and may Satul warm you and all your guild members!]]))
734 }
735 }
736
737
738 heavy_industry_story = {
739 {
740- title = _ "Sidolus Seeks Out Jundlina",
741- body = sidolus(_(
742-[[May Satul warm you, Jundlina. Have you considered mining for resources in the mountains around us? ]] ..
743-[[We are running short of quartz, crystal and diamonds for our buildings. ]] ..
744-[[Also we could use more iron, gold and especially coal. If we find an ample supply of those commodities, ]] ..
745-[[we could start producing weapons and tools; this would help enormously. ]] ..
746-[[Of course, we would need smelters, a weapon smithy, an armor smithy and a toolsmithy. And maybe even more.]]
747- ))
748+ title = _"Sidolus Seeks Out Jundlina",
749+ body = sidolus(
750+ _([[May Satul warm you, Jundlina. Have you considered mining for resources in the mountains around us? We are running short of quartz, crystal and diamonds for our buildings. Also we could use more iron, gold and especially coal. If we find an ample supply of those commodities, we could start producing weapons and tools; this would help enormously. Of course, we would need smelters, a weapon smithy, an armor smithy and a toolsmithy. And maybe even more.]]))
751 },
752 {
753- title = _ "Jundlina Replies",
754- body = jundlina(_"Jundlina Nods", _(
755-[[I have considered this, Sidolus. I think it is about time. We will make this a priority for now. You shall get your industry soon!]]
756- )) .. new_objectives(obj_make_heavy_industry_and_mining)
757+ title = _"Jundlina Replies",
758+ body = jundlina(_"Jundlina Nods",
759+ _([[I have considered this, Sidolus. I think it is about time. We will make this a priority for now. You shall get your industry soon!]]))
760+ .. new_objectives(obj_make_heavy_industry_and_mining)
761 },
762 }
763
764 training_story = {
765 {
766- title = _ "Jundlina Summons Sidolus",
767- body = jundlina(_ "Jundlina is Angry", _(
768-[[What is this I hear, Sidolus? I received words about your soldiers misbehaving and bullying the common folk. ]] ..
769-[[What is this nonsense all about? They are servants for the common good and must not misuse their powers. ]] ..
770-[[This is inexcusable! Explain this, if you will!]]
771- ))
772+ title = _"Jundlina Summons Sidolus",
773+ body = jundlina(_"Jundlina is Angry",
774+ _([[What is this I hear, Sidolus? I received words about your soldiers misbehaving and bullying the common folk. What is this nonsense all about? They are servants for the common good and must not misuse their powers. This is inexcusable! Explain this, if you will!]]))
775 },
776 {
777- title = _ "Sidolus Seems Contrite",
778- body = sidolus(_(
779-[[I agree with you and I have punished the troublemakers severely. ]] ..
780-[[But it is very difficult to keep my men quiet: they are bored and have nothing to do. ]] ..
781-[[I would like to ramp up their drill. ]] ..
782-[[I think more routine in their life would keep them occupied and focused on their duties. ]] ..
783-[[I would need a dungeon and a labyrinth for them. ]] ..
784-[[I have the plans ready, but I guess they won’t come cheap.]]
785- ))
786+ title = _"Sidolus Seems Contrite",
787+ body = sidolus(
788+ _([[I agree with you and I have punished the troublemakers severely. But it is very difficult to keep my men quiet: they are bored and have nothing to do. I would like to ramp up their drill. I think more routine in their life would keep them occupied and focused on their duties. I would need a dungeon and a labyrinth for them. I have the plans ready, but I guess they won’t come cheap.]]))
789 },
790 {
791 title = _"Jundlina Replies",
792- body = jundlina(_(
793-[[I do not fear the cost and labor as long as it keeps your people at bay. You shall get your buildings. ]] ..
794-[[But note that I will not tolerate any rogue soldier; if similar things happen again, ]] ..
795-[[I will make you responsible for them. Dismissed.]]
796- )) .. new_objectives(obj_make_training_buildings)
797+ body = jundlina(_"Jundlina",
798+ _([[I do not fear the cost and labor as long as it keeps your people at bay. You shall get your buildings. But note that I will not tolerate any rogue soldier; if similar things happen again, I will make you responsible for them. Dismissed.]]))
799+ .. new_objectives(obj_make_training_buildings)
800 }
801 }
802
803 training_story_end = {
804 {
805- title = _ "Jundlina Received a Letter",
806- body = jundlina(_"Jundlina", _(
807-[[I received an invitation from Sidolus. The first day of training in the newly finished labyrinth will be tomorrow. ]] ..
808-[[The dungeon is done as well and will start its work soon. I am looking forward to tomorrow; ]] ..
809-[[I am very interested in how our soldiers are trained, and I wonder if the additional workload ]] ..
810-[[will keep them from bullying the civilian population.]]
811- ))
812+ title = _"Jundlina Received a Letter",
813+ body = jundlina(_"Jundlina",
814+ _([[I received an invitation from Sidolus. The first day of training in the newly finished labyrinth will be tomorrow. The dungeon is done as well and will start its work soon. I am looking forward to tomorrow; I am very interested in how our soldiers are trained, and I wonder if the additional workload will keep them from bullying the civilian population.]]))
815 }
816 }
817
818 horsefarm_and_warehouse_story = {
819 {
820- title = _ "Jundlina Considers the Economy",
821- body = jundlina(_"Jundlina", _(
822-[[People are complaining about crowded streets and slow transportation. We need to help out our carriers on the roads. I have decided to build a horse farm so that the horses can help with the heavy wares.]])
823-.. paragraphdivider() .. _(
824-[[Another way to take load from our roads is to build warehouses. We have claimed the mountain now, it seems a good idea to have a warehouse on the plateau to avoid having to transport everything up and down the slopes.]]
825- )) .. new_objectives(obj_horsefarm_and_warehouse)
826+ title = _"Jundlina Considers the Economy",
827+ body = jundlina(_"Jundlina",
828+ _([[People are complaining about crowded streets and slow transportation. We need to help out our carriers on the roads. I have decided to build a horse farm so that the horses can help with the heavy wares.]])
829+ .. paragraphdivider() ..
830+ _([[Another way to take load from our roads is to build warehouses. We have claimed the mountain now, it seems a good idea to have a warehouse on the plateau to avoid having to transport everything up and down the slopes.]]))
831+ .. new_objectives(obj_horsefarm_and_warehouse)
832 }
833 }
834
835@@ -411,118 +315,91 @@
836 -- Leftover buildings found
837 -- =======================================================================
838 first_leftover_building_found = {
839-{
840- posx = 100000,
841- posy = 0,
842- title = _ "A Dangerous Discovery",
843- body = jundlina(_ "Jundlina is in Thought", _(
844-[[We found an old building, destroyed and burned by flames. I am very worried about this discovery. The building is not of any kind I’ve ever seen. It is certainly not designed by any Atlantean architect I’ve ever heard about. The building is crude, the assemblage is sloppy. But the materials are very enduring: the wood used for it seemed to have been burned in a strange way before it was used as building material – it is hard as stone.]])
845-.. paragraphdivider() .. _(
846-[[The implications frighten me. Are there others on this island? Where are they then? They work with fire, are they praying to Satul too? Are they friends or foe? And why is the building burned down? Has this island seen war? Is a war being waged on it right now?]])
847-.. paragraphdivider() .. _(
848-[[We must improve our military capabilities. If there are foes on the island, we have to be prepared when we meet them. We should also enforce the fortification of our borders.]])
849- )
850-}
851+ {
852+ posx = 100000,
853+ posy = 0,
854+ title = _"A Dangerous Discovery",
855+ body = jundlina(_"Jundlina is in Thought",
856+ _([[We found an old building, destroyed and burned by flames. I am very worried about this discovery. The building is not of any kind I’ve ever seen. It is certainly not designed by any Atlantean architect I’ve ever heard about. The building is crude, the assemblage is sloppy. But the materials are very enduring: the wood used for it seemed to have been burned in a strange way before it was used as building material – it is hard as stone.]])
857+ .. paragraphdivider() ..
858+ _([[The implications frighten me. Are there others on this island? Where are they then? They work with fire, are they praying to Satul too? Are they friends or foe? And why is the building burned down? Has this island seen war? Is a war being waged on it right now?]])
859+ .. paragraphdivider() ..
860+ _([[We must improve our military capabilities. If there are foes on the island, we have to be prepared when we meet them. We should also enforce the fortification of our borders.]]))
861+ }
862 }
863
864 second_leftover_building_found = {
865-{
866- posx = 100000,
867- posy = 0,
868- title = _ "Another Building",
869- body = jundlina(_ "Jundlina is Worried", _(
870-[[We found one more building of this strange making. We have yet to see any of its builders. ]] ..
871-[[But obviously there has been a community on this island before and obviously it was militarized. ]] ..
872-[[I have to check on our military status with my generals. ]] ..
873-[[I will not allow that a potential enemy will find us unprepared.]]
874- ))
875-}
876+ {
877+ posx = 100000,
878+ posy = 0,
879+ title = _"Another Building",
880+ body = jundlina(_"Jundlina is Worried",
881+ _([[We found one more building of this strange making. We have yet to see any of its builders. But obviously there has been a community on this island before and obviously it was militarized. I have to check on our military status with my generals. I will not allow that a potential enemy will find us unprepared.]]))
882+ }
883 }
884
885 third_leftover_building_found = {
886-{
887- posx = 100000,
888- posy = 0,
889- title = _ "One More Building",
890- body = jundlina(_(
891-[[And yet another of these buildings. ]] ..
892-[[We know now that the tribe that built them once had complete control over the island. ]] ..
893-[[But I am no longer so scared of potential enemies. ]] ..
894-[[We know so much of this island already and there is no trace of this old economy to be found. ]] ..
895-[[I am starting to relax, but I will not let our guard down as we continue to explore this beautiful island. ]] ..
896-[[But without obvious dangers, I am feeling very much at home here already.]]
897- ))
898-}
899+ {
900+ posx = 100000,
901+ posy = 0,
902+ title = _"One More Building",
903+ body = jundlina(_"Jundlina is in Thought",
904+ _([[And yet another of these buildings. We know now that the tribe that built them once had complete control over the island. But I am no longer so scared of potential enemies. We know so much of this island already and there is no trace of this old economy to be found. I am starting to relax, but I will not let our guard down as we continue to explore this beautiful island. But without obvious dangers, I am feeling very much at home here already.]]))
905+ }
906 }
907
908 -- =======================
909 -- Flooding of the island
910 -- =======================
911 field_flooded_msg = {
912-{
913- posx = 100000,
914- posy = 0,
915- title = _ "The Water is Rising!",
916- body = jundlina(_"Jundlina", _(
917-[[May Satul save us! Lutas is still trying to get to us. A scout informed me that the ocean is rising quickly. ]] ..
918-[[We have to reach higher ground and evacuate everybody and as much wares as we can ]] ..
919-[[from the headquarters up the mountains. How can we escape?]]
920- ))
921-},
922-{
923- title = _ "A Young Man Approaches",
924- body = ostur(_(
925-[[May Satul warm you, Jundlina. My name is Ostur and I construct ships. ]] ..
926-[[I have invented a new kind of ship: smaller than those we are used to, but much sturdier. ]] ..
927-[[If we build them correctly, I am confident that we can sail a much longer distance with them ]] ..
928-[[and maybe escape from Lutas’ influence.]]
929- ))
930-},
931-{
932- title = _ "Jundlina Replies",
933- body = jundlina(_ "Jundlina", _(
934-[[Ostur, we have no time. The water rises too fast, and if we build the ships on the shore ]] ..
935-[[they will vanish in the sea before they can float. I fear we are doomed!]]
936- )),
937-},
938-{
939- posx = 100000,
940- posy = 0,
941- title = _"Ostur Seems Confident",
942- pre_func = function()
943- local lake_field = map:get_field(75,80)
944- p1:reveal_fields(lake_field:region(10))
945- scroll_smoothly_to(lake_field)
946- sleep(200)
947- end,
948- body = ostur(_(
949-[[A friend of mine explored the island on his own and he told me of a big lake at the top of the mountain. ]] ..
950-[[I suggest we build the ships in this lake and wait until the island drowns beneath us. Then we can sail away. ]] ..
951-[[It is a bold plan, but I think it could work.]]
952- ))
953-},
954-{
955- title = _ "Jundlina Replies",
956- body = jundlina(_(
957-[[Your red hair is a signal from the fire god. I will trust you and support your plan. Our survival lies in your hands now, Ostur.]])
958-.. paragraphdivider() .. _(
959-[[Swift now, we need a house for Ostur next to the lake, and we need planks, logs and spidercloth for the construction there. Forget about everything else, we need those wares on top of the mountain before our warehouses are all swallowed by the sea.]]
960- )) .. new_objectives(obj_build_ships)
961-}
962+ {
963+ posx = 100000,
964+ posy = 0,
965+ title = _"The Water is Rising!",
966+ body = jundlina(_"Jundlina",
967+ _([[May Satul save us! Lutas is still trying to get to us. A scout informed me that the ocean is rising quickly. We have to reach higher ground and evacuate everybody and as much wares as we can from the headquarters up the mountains. How can we escape?]]))
968+ },
969+ {
970+ title = _"A Young Man Approaches",
971+ body = ostur(
972+ _([[May Satul warm you, Jundlina. My name is Ostur and I construct ships. I have invented a new kind of ship: smaller than those we are used to, but much sturdier. If we build them correctly, I am confident that we can sail a much longer distance with them and maybe escape from Lutas’ influence.]]))
973+ },
974+ {
975+ title = _"Jundlina Replies",
976+ body = jundlina(_"Jundlina",
977+ _([[Ostur, we have no time. The water rises too fast, and if we build the ships on the shore they will vanish in the sea before they can float. I fear we are doomed!]]))
978+ },
979+ {
980+ posx = 100000,
981+ posy = 0,
982+ title = _"Ostur Seems Confident",
983+ pre_func = function()
984+ local lake_field = map:get_field(75,80)
985+ p1:reveal_fields(lake_field:region(10))
986+ scroll_smoothly_to(lake_field)
987+ sleep(200)
988+ end,
989+ body = ostur(
990+ _([[A friend of mine explored the island on his own and he told me of a big lake at the top of the mountain. I suggest we build the ships in this lake and wait until the island drowns beneath us. Then we can sail away. It is a bold plan, but I think it could work.]]))
991+ },
992+ {
993+ title = _"Jundlina Replies",
994+ body = jundlina(_"Jundlina",
995+ _([[Your red hair is a signal from the fire god. I will trust you and support your plan. Our survival lies in your hands now, Ostur.]])
996+ .. paragraphdivider() ..
997+ _([[Swift now, we need a house for Ostur next to the lake, and we need planks, logs and spidercloth for the construction there. Forget about everything else, we need those wares on top of the mountain before our warehouses are all swallowed by the sea.]]))
998+ .. new_objectives(obj_build_ships)
999+ }
1000 }
1001
1002 scenario_won = {
1003 {
1004- title = _ "Jundlina is Relieved",
1005- body = jundlina(_"Jundlina", _(
1006-[[Praise Satul! Ostur, the young ship builder did it. ]] ..
1007-[[We have three ships – never have I seen sturdier ones – with enough room to carry all of us and some wares too. ]] ..
1008-[[And this rescue came just in time: Lutas is about to swallow the rest of this island, ]] ..
1009-[[the water rises faster by the hour. But we can make our escape now and start over in some country farther away… ]] ..
1010-[[I expect a long journey, but we will find the land of Satul in the end. ]] ..
1011-[[This is what I promised my people. And myself.]]
1012- )) .. rt("<p font-size=10> <br></p>" .. h1(_ "Congratulations") .. p(_
1013-[[You have won this mission. Continue with the next one or keep playing for as long as you like.]]
1014- )),
1015- },
1016+ title = _"Jundlina is Relieved",
1017+ body = jundlina(_"Jundlina",
1018+ _([[Praise Satul! Ostur, the young ship builder did it. We have three ships – never have I seen sturdier ones – with enough room to carry all of us and some wares too. And this rescue came just in time: Lutas is about to swallow the rest of this island, the water rises faster by the hour. But we can make our escape now and start over in some country farther away...]])
1019+ .. paragraphdivider() ..
1020+ _([[I expect a long journey, but we will find the land of Satul in the end. This is what I promised my people. And myself.]]))
1021+ .. rt("<p font-size=10> <br></p>" .. h1(_ "Congratulations") ..
1022+ p(_[[You have won this mission. Continue with the next one or keep playing for as long as you like.]]))
1023+ }
1024 }
1025
1026=== modified file 'campaigns/bar01.wmf/scripting/mission_thread.lua'
1027--- campaigns/bar01.wmf/scripting/mission_thread.lua 2014-10-28 19:23:06 +0000
1028+++ campaigns/bar01.wmf/scripting/mission_thread.lua 2014-10-31 11:37:25 +0000
1029@@ -10,10 +10,10 @@
1030 build_materials_done = false
1031 cattle_farm_done = false
1032
1033-
1034 -- =====================================================
1035 -- First messages to the player at beginning of mission
1036 -- =====================================================
1037+
1038 function introduction_thread()
1039 sleep(2000)
1040
1041
1042=== modified file 'campaigns/bar01.wmf/scripting/texts.lua'
1043--- campaigns/bar01.wmf/scripting/texts.lua 2014-10-19 09:39:36 +0000
1044+++ campaigns/bar01.wmf/scripting/texts.lua 2014-10-31 11:37:25 +0000
1045@@ -34,8 +34,7 @@
1046 number = 1,
1047 body = objective_text(_"Expand north-east to the rocks",
1048 listitem_bullet(_"Build military buildings (like sentries or barriers) to expand your territory.") ..
1049- listitem_bullet(_"Get to the rocks north-east from you and build a quarry there.")
1050- ),
1051+ listitem_bullet(_"Get to the rocks north-east from you and build a quarry there."))
1052 }
1053
1054 obj_build_mines = {
1055@@ -45,20 +44,19 @@
1056 body = objective_text(_"Build coal and iron ore mines",
1057 listitem_bullet(_"Build a coal mine and an iron ore mine.") ..
1058 listitem_arrow(_"To do so, place a flag up on the mountain’s flank to the east (on mountain terrain though, not mountain meadow). When you click on the new flag, you can send geologists there. Because the flag is on a mountain, the geologists will search for ores; otherwise, they would search for water. Then build a mine for both kinds of resources that he will find, choosing the appropriate mine to be built:") ..
1059- "</rt>" ..
1060- rt("image=tribes/barbarians/resi_coal1/resi_00.png", p(_"a bit of coal")) ..
1061- rt("image=tribes/barbarians/resi_coal2/resi_00.png", p(_"a lot of coal")) ..
1062- rt("image=tribes/barbarians/resi_iron1/resi_00.png", p(_"a bit of iron")) ..
1063- rt("image=tribes/barbarians/resi_iron2/resi_00.png", p(_"a lot of iron")) ..
1064- rt("image=tribes/barbarians/resi_gold1/resi_00.png", p(_"a bit of gold")) ..
1065- rt("image=tribes/barbarians/resi_gold2/resi_00.png", p(_"a lot of gold")) ..
1066- rt("image=tribes/barbarians/resi_granite1/resi_00.png", p(_"a bit of granite")) ..
1067- rt("image=tribes/barbarians/resi_granite2/resi_00.png", p(_"a lot of granite")) ..
1068- rt("image=tribes/barbarians/resi_water1/resi_00.png", p(_"water")) ..
1069- rt("image=tribes/barbarians/resi_none/resi_00.png", p(_"nothing was found here")) ..
1070- "<rt>" ..
1071- p(_[[Mines can only be built on mountain terrain. Suitable places for mines are displayed as orange mine symbols.]])
1072- )
1073+ "</rt>" ..
1074+ rt("image=tribes/barbarians/resi_coal1/resi_00.png", p(_"a bit of coal")) ..
1075+ rt("image=tribes/barbarians/resi_coal2/resi_00.png", p(_"a lot of coal")) ..
1076+ rt("image=tribes/barbarians/resi_iron1/resi_00.png", p(_"a bit of iron")) ..
1077+ rt("image=tribes/barbarians/resi_iron2/resi_00.png", p(_"a lot of iron")) ..
1078+ rt("image=tribes/barbarians/resi_gold1/resi_00.png", p(_"a bit of gold")) ..
1079+ rt("image=tribes/barbarians/resi_gold2/resi_00.png", p(_"a lot of gold")) ..
1080+ rt("image=tribes/barbarians/resi_granite1/resi_00.png", p(_"a bit of granite")) ..
1081+ rt("image=tribes/barbarians/resi_granite2/resi_00.png", p(_"a lot of granite")) ..
1082+ rt("image=tribes/barbarians/resi_water1/resi_00.png", p(_"water")) ..
1083+ rt("image=tribes/barbarians/resi_none/resi_00.png", p(_"nothing was found here")) ..
1084+ "<rt>" ..
1085+ p(_[[Mines can only be built on mountain terrain. Suitable places for mines are displayed as orange mine symbols.]]))
1086 }
1087
1088 obj_basic_food = {
1089@@ -68,8 +66,7 @@
1090 body = objective_text(_"Build a hunter, a gamekeeper and a tavern",
1091 listitem_bullet(_"In order to work, your miners need food.") ..
1092 listitem_arrow(_"A hunter can hunt down animals, while a gamekeeper prevents them from becoming extinct. The meat is then processed in a tavern into lunches for your miners.") .. " " ..
1093- _([[This is only the first example of a ware which has to be refined before being used in a secondary building – others will follow.]])
1094- )
1095+ _([[This is only the first example of a ware which has to be refined before being used in a secondary building – others will follow.]]))
1096 }
1097
1098 obj_begin_farming = {
1099@@ -77,8 +74,7 @@
1100 title = _"Bake bread",
1101 number = 3,
1102 body = objective_text(_"Build a well, a farm and a bakery",
1103- _([[Other ways to produce food – different kinds of food – are fishers and hunters. The wheat of the farms has to be processed with water in a bakery before it becomes edible. You can obtain water by building a well on a spot where your geologists have found a water source.]])
1104- )
1105+ _([[Other ways to produce food – different kinds of food – are fishers and hunters. The wheat of the farms has to be processed with water in a bakery before it becomes edible. You can obtain water by building a well on a spot where your geologists have found a water source.]]))
1106 }
1107
1108 obj_refine_ores = {
1109@@ -86,8 +82,7 @@
1110 title = _"Refine your mined resources",
1111 number = 1,
1112 body = objective_text(_"Build a smelting works",
1113- _[[The iron ore your miners dig up is not usable yet – it has to be melted into iron first.]]
1114- )
1115+ _[[The iron ore your miners dig up is not usable yet – it has to be melted into iron first.]])
1116 }
1117
1118 obj_enhance_buildings = {
1119@@ -100,8 +95,7 @@
1120 listitem_arrow(_"A normal mine can only dig up about one third of all the resources that lie beneath it; then it must be enhanced to a deep mine in order to keep it working properly. To enhance a building, choose it and then click the appropriate button in the appearing window.") ..
1121 listitem_arrow(_"Workers gain experience by successful work. With enough experience, they become more advanced workers, who are necessary to operate the enhanced buildings. Do not enhance a building before you have enough advanced workers to operate the advanced building!") ..
1122 listitem_arrow(_"Such buildings usually have greater demands than the basic kind of that building – for instance, deep mines need snacks instead of rations. You will have to enhance your tavern to an inn in order to produce snacks out of pitta bread AND a second kind of food (meat or fish) AND beer.") ..
1123- _"You may of course enhance all mines to deep mines instantly given you have the workers – bigger mines work a bit faster, smaller mines need cheaper food. It’s up to you which strategy you prefer."
1124- )
1125+ _"You may of course enhance all mines to deep mines instantly given you have the workers – bigger mines work a bit faster, smaller mines need cheaper food. It’s up to you which strategy you prefer.")
1126 }
1127
1128 obj_better_material_1 = {
1129@@ -109,10 +103,9 @@
1130 title = _"Build a wood hardener",
1131 number = 1,
1132 body = objective_text(_"Build a wood hardener",
1133- _([[Bigger and better buildings – including all military ones – require better building materials. They cannot be built out of simple logs – the wood has to be refined to blackwood by a wood hardener first. Always remember to build a wood hardener before you run out of blackwood, as without it you cannot expand.]]) ..
1134- paragraphdivider() ..
1135- listitem_bullet(_"Build a wood hardener")
1136- )
1137+ _([[Bigger and better buildings – including all military ones – require better building materials. They cannot be built out of simple logs – the wood has to be refined to blackwood by a wood hardener first. Always remember to build a wood hardener before you run out of blackwood, as without it you cannot expand.]])
1138+ .. paragraphdivider() ..
1139+ listitem_bullet(_"Build a wood hardener"))
1140 }
1141
1142 obj_better_material_2 = {
1143@@ -120,16 +113,16 @@
1144 title = _"Build a lime kiln and coal economy",
1145 number = 3,
1146 body = objective_text(_"Build a lime kiln fed by a well, and by a charcoal kiln or by a coal mine",
1147- _([[Better buildings may also require other improved materials besides blackwood. One of these is grout, which is produced out of raw stone, water and coal by a lime-burner.]]) ..
1148- paragraphdivider() ..
1149- _([[You can obtain water by building a well upon a water source, which your geologists can discover when you send them to any flag that is not on a mountain.]]) ..paragraphdivider() ..
1150+ _([[Better buildings may also require other improved materials besides blackwood. One of these is grout, which is produced out of raw stone, water and coal by a lime-burner.]])
1151+ .. paragraphdivider() ..
1152+ _([[You can obtain water by building a well upon a water source, which your geologists can discover when you send them to any flag that is not on a mountain.]])
1153+ ..paragraphdivider() ..
1154 "</p></rt>" ..
1155- rt("image=pics/menu_geologist.png", p(_"In order to call a geologist to search for water, click on a flag in the area that you want him to search and then on the button labeled ‘Send geologist to explore site’.") ..
1156- paragraphdivider() ..
1157- _([[Coal can be obtained by building a charcoal kiln or a coal mine. Burning charcoal out of logs is slow. You should only build a charcoal kiln when no coal is available.]]) ..
1158- paragraphdivider() ..
1159- listitem_bullet(_"Build a lime kiln and a well. Additionally, build either a charcoal kiln or a coal mine for coal supply."))
1160- )
1161+ rt("image=pics/menu_geologist.png", p(_"In order to call a geologist to search for water, click on a flag in the area that you want him to search and then on the button labeled ‘Send geologist to explore site’.")
1162+ .. paragraphdivider() ..
1163+ _([[Coal can be obtained by building a charcoal kiln or a coal mine. Burning charcoal out of logs is slow. You should only build a charcoal kiln when no coal is available.]])
1164+ .. paragraphdivider() ..
1165+ listitem_bullet(_"Build a lime kiln and a well. Additionally, build either a charcoal kiln or a coal mine for coal supply.")))
1166 }
1167
1168 obj_better_material_3 = {
1169@@ -137,10 +130,9 @@
1170 title = _"Build a reed yard",
1171 number = 1,
1172 body = objective_text(_"Build a reed yard",
1173- _([[The third material necessary for improved buildings is thatch reed, used to cover roofs. Thatch reed is planted by a gardener around his building, the reed yard.]]) ..
1174- paragraphdivider() ..
1175- listitem_bullet(_"Build a reed yard")
1176- )
1177+ _([[The third material necessary for improved buildings is thatch reed, used to cover roofs. Thatch reed is planted by a gardener around his building, the reed yard.]])
1178+ .. paragraphdivider() ..
1179+ listitem_bullet(_"Build a reed yard"))
1180 }
1181
1182 obj_build_cattlefarm = {
1183@@ -148,12 +140,11 @@
1184 title = _"Build a cattle farm",
1185 number = 1,
1186 body = objective_text(_"Build a cattle farm",
1187- _([[When roads are under heavy load for a long time, one carrier is usually not enough to transport goods swiftly. Traffic jams are the consequence. Such roads therefore employ a second carrier: an ox that helps to carry the wares. This doubles the transport capacity.]]) ..
1188- paragraphdivider() ..
1189- _([[Oxen are bred in cattle farms out of wheat and water.]]) ..
1190- paragraphdivider() ..
1191- listitem_bullet(_"Build a cattle farm")
1192- )
1193+ _([[When roads are under heavy load for a long time, one carrier is usually not enough to transport goods swiftly. Traffic jams are the consequence. Such roads therefore employ a second carrier: an ox that helps to carry the wares. This doubles the transport capacity.]])
1194+ .. paragraphdivider() ..
1195+ _([[Oxen are bred in cattle farms out of wheat and water.]])
1196+ .. paragraphdivider() ..
1197+ listitem_bullet(_"Build a cattle farm"))
1198 }
1199
1200
1201@@ -164,8 +155,8 @@
1202 briefing_msg_01 = {
1203 title = _"The Story Begins",
1204 body = thron(_"Thron sighs…",
1205- _[[It’s been months, and we are still hiding where the forests are old and dark.]] ..
1206- paragraphdivider() ..
1207+ _[[It’s been months, and we are still hiding where the forests are old and dark.]]
1208+ .. paragraphdivider() ..
1209 _[[My warriors hunt at day and lie awake at night – listening to the sounds of the cruel slaughter echoing from afar amongst the ancient trees.]]
1210 )
1211 }
1212@@ -174,10 +165,9 @@
1213 briefing_msg_02 = {
1214 title = _"The Story Begins",
1215 body = thron(
1216- _[[We can see the raging flames that swallow Al’thunran from here, miles away.]] ..
1217- paragraphdivider() ..
1218- _[[The red lights flash in the darkness and dance to the rhythm of the war drums that haunt me even in my nightmares.]]
1219- ),
1220+ _[[We can see the raging flames that swallow Al’thunran from here, miles away.]]
1221+ .. paragraphdivider() ..
1222+ _[[The red lights flash in the darkness and dance to the rhythm of the war drums that haunt me even in my nightmares.]]),
1223 field = al_thunran,
1224 position = "topleft",
1225 scroll_back = true
1226@@ -187,10 +177,9 @@
1227 briefing_msg_03 = {
1228 title = _"The Story Begins",
1229 body = thron(
1230- _[[My father’s bones rest peacefully in the ground on which he once ended the senseless spilling of blood that had arisen amongst us. It pains me that his peace only endured for one generation.]] ..
1231- paragraphdivider() ..
1232- _[[Boldreth, my loyal companion and friend is a source of peace and comfort to me in these dark times. He keeps my spirits high and those of my warriors awake, preventing greed or despair from destroying the bonds between us as well.]]
1233- ),
1234+ _[[My father’s bones rest peacefully in the ground on which he once ended the senseless spilling of blood that had arisen amongst us. It pains me that his peace only endured for one generation.]]
1235+ .. paragraphdivider() ..
1236+ _[[Boldreth, my loyal companion and friend is a source of peace and comfort to me in these dark times. He keeps my spirits high and those of my warriors awake, preventing greed or despair from destroying the bonds between us as well.]]),
1237 field = grave,
1238 position = "topleft"
1239 }
1240@@ -199,18 +188,16 @@
1241 briefing_msg_04 = {
1242 title = _"The Story Begins",
1243 body = thron(
1244- _[[As father told me, there are times to fight and times to lie and wait, trying not to fall asleep or die before the right time comes. And so I do wait.]]
1245- )
1246+ _[[As father told me, there are times to fight and times to lie and wait, trying not to fall asleep or die before the right time comes. And so I do wait.]])
1247 }
1248
1249
1250 briefing_msg_05 = {
1251 title = _"The Story Begins",
1252 body = thron(_"Thron is shaking his head…",
1253- _([[Yet the war goes on. More and more of our brothers and sisters flee the brutal war raging in the capital beneath the trees.]]) ..
1254- paragraphdivider() ..
1255- _([[The stories they tell about the deeds of our kin are sad to hear. I’ve spent nights lying awake, restless, more tired than I ever believed one could be. Yet whenever I close my eyes, I see the fortress my father built consumed by flames. The Throne Among the Trees, the symbol of unity and peace among our kin, became the wedge that drives us apart.]])
1256- ),
1257+ _([[Yet the war goes on. More and more of our brothers and sisters flee the brutal war raging in the capital beneath the trees.]])
1258+ .. paragraphdivider() ..
1259+ _([[The stories they tell about the deeds of our kin are sad to hear. I’ve spent nights lying awake, restless, more tired than I ever believed one could be. Yet whenever I close my eyes, I see the fortress my father built consumed by flames. The Throne Among the Trees, the symbol of unity and peace among our kin, became the wedge that drives us apart.]])),
1260 field = sf -- scroll back when showing this and the next few message boxes
1261 }
1262
1263@@ -218,111 +205,103 @@
1264 briefing_msg_06 = {
1265 title = _"The Story Begins",
1266 body = thron(
1267- _([[Today my hunters brought men, women and little children before me who had hidden out in the forests, trying to escape the war, hate and revenge that rage among the tribes fighting each other like in olden times, when we were no more but wild beasts driven and controlled by instincts. None of my brothers will ever gain and hold control over the wooden throne, none of the tribes will be strong enough to subdue the other. There will be no end to this slaughter, unless… is this it? As father told me?]]) ..
1268- paragraphdivider() ..
1269- _([[To rise against whoever threatens our very existence, even though it may be one of your own blood or mind?]])
1270- )
1271+ _([[Today my hunters brought men, women and little children before me who had hidden out in the forests, trying to escape the war, hate and revenge that rage among the tribes fighting each other like in olden times, when we were no more but wild beasts driven and controlled by instincts. None of my brothers will ever gain and hold control over the wooden throne, none of the tribes will be strong enough to subdue the other. There will be no end to this slaughter, unless… is this it? As father told me?]])
1272+ .. paragraphdivider() ..
1273+ _([[To rise against whoever threatens our very existence, even though it may be one of your own blood or mind?]]))
1274 }
1275
1276
1277 briefing_msg_07 = {
1278 title = _"The Story Begins",
1279 body = thron(
1280- _([[Boldreth seems more and more torn as the days go by. The spirits of my fellows sink as the cold season approaches, and we are still living in no more than huts and barracks. I never intended to stay out here in the wilderness for so long – but I never thought my brothers would engage in this senseless battle for so long either.]]) ..
1281- paragraphdivider() ..
1282- _([[Perhaps it’s time to make ourselves feel a little more at ease here. Perhaps it’s time to give those who still live and think united a new home, replacing what is now lost to us? Until we can return to the place we once called our home…]])
1283- )
1284+ _([[Boldreth seems more and more torn as the days go by. The spirits of my fellows sink as the cold season approaches, and we are still living in no more than huts and barracks. I never intended to stay out here in the wilderness for so long – but I never thought my brothers would engage in this senseless battle for so long either.]])
1285+ .. paragraphdivider() ..
1286+ _([[Perhaps it’s time to make ourselves feel a little more at ease here. Perhaps it’s time to give those who still live and think united a new home, replacing what is now lost to us? Until we can return to the place we once called our home…]]))
1287 }
1288
1289
1290 briefing_msg_08 = {
1291 title = _"Somebody Comes up to You",
1292 body = khantrukh(_"An old man says…",
1293- _[[Hail, chieftain. I am Khantrukh and have seen many winters pass. Please allow me to aid you with my counsel through these darkened days.]] ..
1294- paragraphdivider() ..
1295- _[[Only the gods know for how long we have to remain hidden here. The warriors hope we may march back gloriously any day now, but I strongly doubt that will happen soon. And the days are short and cold…]]
1296- )
1297+ _[[Hail, chieftain. I am Khantrukh and have seen many winters pass. Please allow me to aid you with my counsel through these darkened days.]]
1298+ .. paragraphdivider() ..
1299+ _[[Only the gods know for how long we have to remain hidden here. The warriors hope we may march back gloriously any day now, but I strongly doubt that will happen soon. And the days are short and cold…]])
1300 }
1301
1302
1303 order_msg_ranger = {
1304 title = _"The Advisor",
1305 body = khantrukh(_"Khantrukh notes…",
1306- _[[I see you have already built a quarry and two lumberjack’s huts. That is a good beginning if we want to stay here longer.]] ..
1307- paragraphdivider() ..
1308- _[[But never forget – these forests are our heritage, entrusted upon us by our ancestors. We must always respect and care for them. What we take, we must give back again.]] ..
1309- paragraphdivider() ..
1310- _[[So, in order to replace the trees we chop down, we should build some ranger’s huts, preferably close to the lumberjack’s huts.]]) ..
1311- new_objectives(obj_build_rangers)
1312+ _[[I see you have already built a quarry and two lumberjack’s huts. That is a good beginning if we want to stay here longer.]]
1313+ .. paragraphdivider() ..
1314+ _[[But never forget – these forests are our heritage, entrusted upon us by our ancestors. We must always respect and care for them. What we take, we must give back again.]]
1315+ .. paragraphdivider() ..
1316+ _[[So, in order to replace the trees we chop down, we should build some ranger’s huts, preferably close to the lumberjack’s huts.]])
1317+ .. new_objectives(obj_build_rangers)
1318 }
1319
1320
1321 story_msg1 = {
1322 title = _"In the Night",
1323 body = thron(_"Thron says…",
1324- _[[During another sleepless night, I went up to the hill and gazed towards the north. The fires are still burning, satisfying their hunger upon my father’s legacy.]] ..
1325- paragraphdivider() ..
1326- _[[They are a constant reminder of why we have to hide here… and why we must return in the end!]]
1327- ),
1328+ _[[During another sleepless night, I went up to the hill and gazed towards the north. The fires are still burning, satisfying their hunger upon my father’s legacy.]]
1329+ .. paragraphdivider() ..
1330+ _[[They are a constant reminder of why we have to hide here… and why we must return in the end!]]),
1331 field = al_thunran,
1332- position = "topleft"
1333+ position = "topleft",
1334+ scroll_back = true
1335 }
1336
1337
1338 story_msg2= {
1339 title = _"At the Tomb",
1340 body = thron(_"Thron says…",
1341- _[[Once again, I went up to my father’s tomb, in a sacred grove at the foot of the great spire of Kal’mavrath. I just stood there and felt neither the hours pass nor the cold rain pouring down from the darkened sky…]] ..
1342- paragraphdivider() ..
1343- _[[Somehow, it felt like a farewell. For the first time, I wondered what the future might hold for me…]]
1344- ),
1345+ _[[Once again, I went up to my father’s tomb, in a sacred grove at the foot of the great spire of Kal’mavrath. I just stood there and felt neither the hours pass nor the cold rain pouring down from the darkened sky…]]
1346+ .. paragraphdivider() ..
1347+ _[[Somehow, it felt like a farewell. For the first time, I wondered what the future might hold for me…]]),
1348 field = grave,
1349- position = "topleft"
1350+ position = "topleft",
1351+ scroll_back = true
1352 }
1353
1354
1355 story_msg3 = {
1356 title = _"The Other Day",
1357 body = thron(_"Thron says thoughtfully…",
1358- _[[Some time ago, Boldreth came to me. His advice was to move to a place closer to home – to strike at the first sign of my brothers’ forces wavering.]] ..
1359- paragraphdivider() ..
1360- _[[But when I look over the forests I can still see black smoke rising to the sky. I know – it is too early yet, and what he hopes for will not happen any time soon. He might still be right, but I fear the bloodshed that returning too fast would cause on both sides…]]
1361- )
1362+ _[[Some time ago, Boldreth came to me. His advice was to move to a place closer to home – to strike at the first sign of my brothers’ forces wavering.]]
1363+ .. paragraphdivider() ..
1364+ _[[But when I look over the forests I can still see black smoke rising to the sky. I know – it is too early yet, and what he hopes for will not happen any time soon. He might still be right, but I fear the bloodshed that returning too fast would cause on both sides…]])
1365 }
1366
1367
1368 story_msg4 = {
1369 title = _"The Oath",
1370 body = thron(_"Thron looks furious…",
1371- _[[Today, my warriors picked up an old man, wandering sick and wounded through the dark forest. We listened in horror as he told us of the atrocities taking place in Al’thunran.]] ..
1372- paragraphdivider() ..
1373- _[[I hereby renew my oath – I will stop this madness at any cost!]]
1374- )
1375+ _[[Today, my warriors picked up an old man, wandering sick and wounded through the dark forest. We listened in horror as he told us of the atrocities taking place in Al’thunran.]]
1376+ .. paragraphdivider() ..
1377+ _[[I hereby renew my oath – I will stop this madness at any cost!]])
1378 }
1379
1380
1381 order_msg_1 = {
1382 title = _"Your Loyal Companion",
1383 body = boldreth(_"Brave Boldreth steps to your side…",
1384-_([[So you want to prepare us for a longer stay in these forests, Thron? Well, I see the wisdom in doing so, yet my heart is yearning for a glorious return to Al’thunran. Too long have we waited while our brethren have fought on the battlefield, and our axes and swords have turned rusty over time.]])
1385- )
1386+ _([[So you want to prepare us for a longer stay in these forests, Thron? Well, I see the wisdom in doing so, yet my heart is yearning for a glorious return to Al’thunran. Too long have we waited while our brethren have fought on the battlefield, and our axes and swords have turned rusty over time.]]))
1387 }
1388
1389
1390 order_msg_2 = {
1391 title = _"The Advisor",
1392 body = khantrukh(_"Khantrukh joins in…",
1393-_([[I beg your forgiveness, chieftain, but I have a grave concern to discuss with you. The rocks close to our camp are shrinking fast under our workers’ tools, and it is a matter of little time only before they are all gone.]])
1394- )
1395+ _([[I beg your forgiveness, chieftain, but I have a grave concern to discuss with you. The rocks close to our camp are shrinking fast under our workers’ tools, and it is a matter of little time only before they are all gone.]]))
1396 }
1397
1398 order_msg_3 = {
1399 title = _"Your Loyal Companion",
1400 position = "left",
1401 body = boldreth(_"Boldreth jumps up…",
1402- _([[While it is certainly no worthy task for a warrior, at least it is something to do! Thron, what would you say about my taking a few of our most restless warriors and venturing somewhat closer to the great mountain of Kal’mavrath – maybe we will find some more big rocks to please the old man?]])
1403- ) ..
1404- new_objectives(obj_claim_northeastern_rocks)
1405+ _([[While it is certainly no worthy task for a warrior, at least it is something to do! Thron, what would you say about my taking a few of our most restless warriors and venturing somewhat closer to the great mountain of Kal’mavrath – maybe we will find some more big rocks to please the old man?]]))
1406+ .. new_objectives(obj_claim_northeastern_rocks)
1407 }
1408
1409 order_msg_4 = {
1410@@ -341,17 +320,17 @@
1411 order_msg_6_geologist = {
1412 title = _"Your Loyal Companion",
1413 body = boldreth(_"Boldreth exclaims…",
1414- _([[Just look at that! In the east is the great mountain of Kal’mavrath! I wonder what treasures nature might have hidden beneath its majestic flanks!]]) ..
1415- paragraphdivider() ..
1416- _([[Let’s expand to the east. There’s a chance for the elderly to become useful once in a while! Let us send out some of those who understand the stone’s tongue to unravel the mountain’s secrets!]])) ..
1417- new_objectives(obj_build_mines)
1418+ _([[Just look at that! In the east is the great mountain of Kal’mavrath! I wonder what treasures nature might have hidden beneath its majestic flanks!]])
1419+ .. paragraphdivider() ..
1420+ _([[Let’s expand to the east. There’s a chance for the elderly to become useful once in a while! Let us send out some of those who understand the stone’s tongue to unravel the mountain’s secrets!]]))
1421+ .. new_objectives(obj_build_mines)
1422 }
1423
1424 order_msg_7_mines_up = {
1425 title = _"Your Loyal Companion",
1426 body = boldreth(_"Boldreth laughs…",
1427- _([[By Chat’Karuth’s beard, this is amazing! Just imagine what we can use this coal and iron ore for!]]) ..
1428- paragraphdivider() ..
1429+ _([[By Chat’Karuth’s beard, this is amazing! Just imagine what we can use this coal and iron ore for!]])
1430+ .. paragraphdivider() ..
1431 _([[It might even be enough to…]]))
1432 }
1433
1434@@ -365,26 +344,26 @@
1435 order_msg_9_hunter = {
1436 title = _"Your Loyal Companion",
1437 body = boldreth(_"Boldreth nods…",
1438- _([[I have to hand it to you: you are right here, old man.]]) ..
1439- paragraphdivider() ..
1440- _([[There seem to be quite a lot of animals in the forests here – we might just hunt down more of them. And, of course, the people would cheer a new tavern – hey, we might call it ‘Thron’s Pride’ or so if you want!]])) ..
1441- new_objectives(obj_basic_food)
1442+ _([[I have to hand it to you: you are right here, old man.]])
1443+ .. paragraphdivider() ..
1444+ _([[There seem to be quite a lot of animals in the forests here – we might just hunt down more of them. And, of course, the people would cheer a new tavern – hey, we might call it ‘Thron’s Pride’ or so if you want!]]))
1445+ .. new_objectives(obj_basic_food)
1446 }
1447
1448 order_msg_10_bread = {
1449 title = _"The Advisor",
1450 body = khantrukh(_"The elder jumps into the air…",
1451- _([[Wisdom commands to seek variety.]]) ..
1452- paragraphdivider() ..
1453- _([[North of the great mountain is a large plain – why don’t we use the space Mother Nature gave us and build a farm? I sure would enjoy a freshly baked pitta bread for a change…]])) ..
1454- new_objectives(obj_begin_farming)
1455+ _([[Wisdom commands to seek variety.]])
1456+ .. paragraphdivider() ..
1457+ _([[North of the great mountain is a large plain – why don’t we use the space Mother Nature gave us and build a farm? I sure would enjoy a freshly baked pitta bread for a change…]]))
1458+ .. new_objectives(obj_begin_farming)
1459 }
1460
1461 order_msg_11_basic_food_began = {
1462 title = _"Your Loyal Companion",
1463 body = boldreth(_"Boldreth cheers up…",
1464- _([[Our hunters are out in the forests, Thron.]]) ..
1465- paragraphdivider() ..
1466+ _([[Our hunters are out in the forests, Thron.]])
1467+ .. paragraphdivider() ..
1468 _([[I promise you, before the sun sets today you will have a magnificent meal fit for the chieftain of all clans!]]))
1469 }
1470
1471@@ -397,53 +376,52 @@
1472 order_msg_13_tavern = {
1473 title = _"A Beautiful Morning",
1474 body = thron(_"Thron recognizes…",
1475- _([[A tavern opened for our people yesterday. While I am hardly in the mood for celebration, I noticed how much this tiny bit of home means to my people. Their songs filled the air until deep in the night, and they were in higher spirits still the day after.]]) ..
1476- paragraphdivider() ..
1477+ _([[A tavern opened for our people yesterday. While I am hardly in the mood for celebration, I noticed how much this tiny bit of home means to my people. Their songs filled the air until deep in the night, and they were in higher spirits still the day after.]])
1478+ .. paragraphdivider() ..
1479 _([[Maybe we actually are slowly creating a place here which we can… call home.]]))
1480 }
1481
1482 order_msg_14_refine_ore = {
1483 title = _"Your Loyal Companion",
1484 body = boldreth(_"Boldreth remarks…",
1485- _([[So now that we have both the mines and the food to sustain them, we should bring what our brave miners gain for us into a more useful state. The iron ore has to be melted into iron so that it is ready to be forged into whatever we want. And we need the coal to keep the smelter’s ovens burning.]])) ..
1486- new_objectives(obj_refine_ores)
1487+ _([[So now that we have both the mines and the food to sustain them, we should bring what our brave miners gain for us into a more useful state. The iron ore has to be melted into iron so that it is ready to be forged into whatever we want. And we need the coal to keep the smelter’s ovens burning.]]))
1488+ .. new_objectives(obj_refine_ores)
1489 }
1490
1491 order_msg_15_mines_exhausted = {
1492 title = _"The Advisor",
1493 body = khantrukh(_"Khantrukh speaks…",
1494- _([[Our miners are digging up less and less by the day! We have to go deeper, closer to the mountain’s core, if we want more of its treasures!]]) ..
1495- paragraphdivider() ..
1496- _([[Of course, it is dark and cold in such depths and only a few venture voluntarily into these places. We should reward this bravery with greater rations for them. And a pint of beer or two will keep their spirits high.]])) ..
1497- new_objectives(obj_enhance_buildings)
1498+ _([[Our miners are digging up less and less by the day! We have to go deeper, closer to the mountain’s core, if we want more of its treasures!]])
1499+ .. paragraphdivider() ..
1500+ _([[Of course, it is dark and cold in such depths and only a few venture voluntarily into these places. We should reward this bravery with greater rations for them. And a pint of beer or two will keep their spirits high.]]))
1501+ .. new_objectives(obj_enhance_buildings)
1502 }
1503
1504 order_msg_16_blackwood = {
1505 title = _"Your Loyal Companion",
1506 body = boldreth(_"Boldreth seems concerned…",
1507- _([[As I just discovered, we are running short on blackwood! We cannot put our warriors into some crumbling huts, and even less so in times as dangerous as ours!]]) ..
1508- paragraphdivider() ..
1509- _([[We need a wood hardener, and we need one now!]])) ..
1510- new_objectives(obj_better_material_1)
1511+ _([[As I just discovered, we are running short on blackwood! We cannot put our warriors into some crumbling huts, and even less so in times as dangerous as ours!]])
1512+ .. paragraphdivider() ..
1513+ _([[We need a wood hardener, and we need one now!]]))
1514+ .. new_objectives(obj_better_material_1)
1515 }
1516
1517 order_msg_17_grout = {
1518 title = _"Your Loyal Companion",
1519 body = boldreth(_"Boldreth smiles…",
1520- _([[Well, old friend, this should ensure that our fortifications do not break down with our foes’ first battle cry! Now we can expand safely!]]) ..
1521- paragraphdivider() ..
1522- _([[Still, it would not hurt to accumulate some grout for our further campaign; thus we could, in times of need, build a fortress such as the world has never seen before!]])) ..
1523- new_objectives(obj_better_material_2)
1524+ _([[Well, old friend, this should ensure that our fortifications do not break down with our foes’ first battle cry! Now we can expand safely!]])
1525+ .. paragraphdivider() ..
1526+ _([[Still, it would not hurt to accumulate some grout for our further campaign; thus we could, in times of need, build a fortress such as the world has never seen before!]]))
1527+ .. new_objectives(obj_better_material_2)
1528 }
1529
1530-
1531 order_msg_18_reed = {
1532 title = _"The Advisor",
1533 body = khantrukh(_"Khantrukh steps in…",
1534- _([[Chieftain, this is a disgrace! It is well that we can produce grout for mighty fortifications and great buildings now – only this does not prevent our roofs from becoming leaky! Maybe the young ones like spending their nights in the rain, but I just can’t find any sleep with these raindrops dripping on my face!]]) ..
1535- paragraphdivider() ..
1536- _([[Now this is a problem we should do something about!]])) ..
1537- new_objectives(obj_better_material_3)
1538+ _([[Chieftain, this is a disgrace! It is well that we can produce grout for mighty fortifications and great buildings now – only this does not prevent our roofs from becoming leaky! Maybe the young ones like spending their nights in the rain, but I just can’t find any sleep with these raindrops dripping on my face!]])
1539+ .. paragraphdivider() ..
1540+ _([[Now this is a problem we should do something about!]]))
1541+ .. new_objectives(obj_better_material_3)
1542 }
1543
1544 order_msg_19_all_material = {
1545@@ -452,53 +430,52 @@
1546 _([[Wonderful! Our roofs are not dripping anymore, and we have all the material we need for, well, whichever monumental building we see fit!]]))
1547 }
1548
1549-
1550 msg_cattlefarm_00 = {
1551 title = _"We Need Oxen!",
1552 body = khantrukh(_"Khantrukh speaks…",
1553- _([[As our realm is getting bigger and bigger, the traffic on the roads is overwhelming. Our poor carriers are no longer able to transport the goods as fast as we need them to. I suggest we give them some support by breeding oxen.]]) ..
1554- paragraphdivider() ..
1555- _([[They are amazing animals: The ox is as swift as a human being while being much stronger and very frugal: all we need is wheat and water to breed them and they will do their work on the roads loyally and reliably.]])) ..
1556- new_objectives(obj_build_cattlefarm)
1557+ _([[As our realm is getting bigger and bigger, the traffic on the roads is overwhelming. Our poor carriers are no longer able to transport the goods as fast as we need them to. I suggest we give them some support by breeding oxen.]])
1558+ .. paragraphdivider() ..
1559+ _([[They are amazing animals: The ox is as swift as a human being while being much stronger and very frugal: all we need is wheat and water to breed them and they will do their work on the roads loyally and reliably.]]))
1560+ .. new_objectives(obj_build_cattlefarm)
1561 }
1562
1563 msg_mission_complete = {
1564 title = _"Mission Complete",
1565 body = thron(_"Thron speaks…",
1566- _([[The other day Boldreth asked me to accompany him to the new inn. It would cheer me up, he said.]]) ..
1567- paragraphdivider() ..
1568- _([[When I looked around, I saw faithful faces, trusting that I could guide them through these dark days. Yet before I could speak any words of gratitude or encouragement, one of my warriors ran into the inn. He had been far out in the forest for the past days and I could see how weary he was.]]) ..
1569- paragraphdivider() ..
1570- _([[The news he brought changed everything…]])) ..
1571- objective_text(_"Victory",
1572- _[[You have completed this mission. You may continue playing if you wish, otherwise move on to the next mission.]])
1573+ _([[The other day Boldreth asked me to accompany him to the new inn. It would cheer me up, he said.]])
1574+ .. paragraphdivider() ..
1575+ _([[When I looked around, I saw faithful faces, trusting that I could guide them through these dark days. Yet before I could speak any words of gratitude or encouragement, one of my warriors ran into the inn. He had been far out in the forest for the past days and I could see how weary he was.]])
1576+ .. paragraphdivider() ..
1577+ _([[The news he brought changed everything…]]))
1578+ .. objective_text(_"Victory",
1579+ _[[You have completed this mission. You may continue playing if you wish, otherwise move on to the next mission.]])
1580 }
1581
1582 msg_story_1 = {
1583 title = _"One Full Moon Night",
1584 body = thron(_"Thron speaks…",
1585- _([[One night, when the moon shone brightly, I climbed to the peak of Kal’mavrath.]]) ..
1586- paragraphdivider() ..
1587+ _([[One night, when the moon shone brightly, I climbed to the peak of Kal’mavrath.]])
1588+ .. paragraphdivider() ..
1589 _([[When I gazed at the horizon, I still saw crimson lights flicker in the distance. It is incredible with how much passion my brethren fight this war. I fear the moment I will see Al’thunran again – will there be anything but ashes and wasted ruins left of our once beautiful capital when we get there?]]))
1590 }
1591
1592 msg_story_2 = {
1593 title = _"Another Cold Day",
1594 body = thron(_"Thron looks worried…",
1595- _([[The winter is upon us. Many of us are suffering from the cold, yet we must endure. The day we may return cannot be far anymore – it must not be far anymore.]]) ..
1596- paragraphdivider() ..
1597- _([[I prayed that it might get warmer again, as I prayed that the war would finally come to an end.]]) ..
1598- paragraphdivider() ..
1599+ _([[The winter is upon us. Many of us are suffering from the cold, yet we must endure. The day we may return cannot be far anymore – it must not be far anymore.]])
1600+ .. paragraphdivider() ..
1601+ _([[I prayed that it might get warmer again, as I prayed that the war would finally come to an end.]])
1602+ .. paragraphdivider() ..
1603 _([[So far, it seems that neither prayer was fulfilled.]]))
1604 }
1605
1606 msg_village = {
1607 title = _"A friendly village has joined us!",
1608 body = thron(_"Thron speaks…",
1609- _([[We have found a village with friendly and productive people, impressed by our wealth, technology and strength.]]) ..
1610- paragraphdivider() ..
1611- _([[They have lived simply, yet blithely, from hunting and farming. They have not been involved in any conflict so far, and are not ready for fighting.]]) ..
1612- paragraphdivider() ..
1613+ _([[We have found a village with friendly and productive people, impressed by our wealth, technology and strength.]])
1614+ .. paragraphdivider() ..
1615+ _([[They have lived simply, yet blithely, from hunting and farming. They have not been involved in any conflict so far, and are not ready for fighting.]])
1616+ .. paragraphdivider() ..
1617 _([[But they fear that the war around Al’thunran will set an end to this life. Therefore, they have decided to join us, hoping that we can help each other.]])
1618 )
1619 }
1620
1621=== modified file 'campaigns/bar02.wmf/scripting/init.lua'
1622--- campaigns/bar02.wmf/scripting/init.lua 2014-10-10 10:02:14 +0000
1623+++ campaigns/bar02.wmf/scripting/init.lua 2014-10-31 11:37:25 +0000
1624@@ -18,14 +18,4 @@
1625
1626 include "map:scripting/starting_conditions.lua"
1627 include "map:scripting/texts.lua"
1628-
1629--- Some messages that spare some typing
1630-function send_msg(msg)
1631- msg.h = 400
1632- p1:message_box(msg.title, msg.body, msg)
1633-end
1634-function add_obj(t)
1635- return p1:add_objective(t.name, t.title, t.body)
1636-end
1637-
1638 include "map:scripting/mission_thread.lua"
1639
1640=== modified file 'campaigns/bar02.wmf/scripting/mission_thread.lua'
1641--- campaigns/bar02.wmf/scripting/mission_thread.lua 2014-08-26 17:25:00 +0000
1642+++ campaigns/bar02.wmf/scripting/mission_thread.lua 2014-10-31 11:37:25 +0000
1643@@ -2,6 +2,8 @@
1644 -- Various mission threads
1645 -- =======================================================================
1646
1647+include "scripting/messages.lua"
1648+
1649 game = wl.Game()
1650 -- Mountain and frontier fields
1651 mountain = game.map:get_field(71,14)
1652@@ -22,10 +24,10 @@
1653 function remember_cattlefarm()
1654 sleep(100)
1655
1656- send_msg(cattlefarm_01)
1657+ campaign_message_box(cattlefarm_01)
1658
1659 p1:allow_buildings{"cattlefarm"}
1660- local o = add_obj(obj_build_cattlefarm)
1661+ local o = add_campaign_objective(obj_build_cattlefarm)
1662 while not check_for_buildings(p1, {cattlefarm = 1}) do
1663 sleep(1223) end
1664 o.done = true
1665@@ -34,11 +36,11 @@
1666
1667 function initial_message_and_small_food_economy()
1668 wake_me(2000)
1669- send_msg(story_msg_1)
1670+ campaign_message_box(story_msg_1)
1671
1672 wake_me(120000)
1673- send_msg(briefing_msg_1)
1674- send_msg(order_msg_1_small_food_economy)
1675+ campaign_message_box(briefing_msg_1)
1676+ campaign_message_box(order_msg_1_small_food_economy)
1677
1678 p1:allow_buildings{"fishers_hut",
1679 "hunters_hut",
1680@@ -50,7 +52,7 @@
1681 "sentry",
1682 }
1683
1684- local o = add_obj(obj_build_small_food_economy)
1685+ local o = add_campaign_objective(obj_build_small_food_economy)
1686 while not check_for_buildings(p1, {
1687 fishers_hut = 1,
1688 hunters_hut = 1,
1689@@ -59,7 +61,7 @@
1690 bakery = 1,
1691 }) do sleep(3413) end
1692 o.done = true
1693- send_msg(story_note_1)
1694+ campaign_message_box(story_note_1)
1695
1696 sleep(600000) -- 10 minutes
1697 remember_cattlefarm()
1698@@ -84,8 +86,8 @@
1699
1700 local pts = scroll_smoothly_to(game.map:get_field(67,19))
1701
1702- send_msg(order_msg_2_build_a_donjon)
1703- local o = add_obj(obj_build_a_donjon)
1704+ campaign_message_box(order_msg_2_build_a_donjon)
1705+ local o = add_campaign_objective(obj_build_a_donjon)
1706 p1:forbid_buildings{"sentry"}
1707 p1:allow_buildings{"donjon"}
1708
1709@@ -97,9 +99,9 @@
1710
1711 while not check_for_buildings(p1, {donjon=1}) do sleep(2341) end
1712 o.done = true
1713- send_msg(order_msg_3_explore_further)
1714+ campaign_message_box(order_msg_3_explore_further)
1715 -- "explore further" is active untill "Boldreth shout out", so the player always has one open objectve.
1716- exploration_objective = add_obj(obj_explore_further)
1717+ exploration_objective = add_campaign_objective(obj_explore_further)
1718
1719 p1:allow_buildings{"sentry", "barrier"}
1720
1721@@ -127,8 +129,8 @@
1722
1723 local pts = scroll_smoothly_to(game.map:get_field(82,20))
1724
1725- send_msg(order_msg_4_build_mining_economy)
1726- local o = add_obj(obj_build_mining_economy)
1727+ campaign_message_box(order_msg_4_build_mining_economy)
1728+ local o = add_campaign_objective(obj_build_mining_economy)
1729
1730 p1:allow_buildings{
1731 "coalmine",
1732@@ -157,11 +159,11 @@
1733 sleep(4139)
1734 end
1735 o.done = true
1736- send_msg(story_note_2)
1737+ campaign_message_box(story_note_2)
1738
1739 sleep(100000)
1740
1741- send_msg(order_msg_6_build_enhanced_economy_and_training)
1742+ campaign_message_box(order_msg_6_build_enhanced_economy_and_training)
1743 p1:allow_buildings{
1744 "axfactory",
1745 "warmill",
1746@@ -179,10 +181,10 @@
1747 "warehouse",
1748 "brewery",
1749 }
1750- run(check_warehouse_obj, add_obj(obj_build_a_warehouse))
1751- run(check_trainingssite_obj, add_obj(obj_build_trainingssites))
1752- run(check_weapon_productions_obj, add_obj(obj_build_weapon_productions))
1753- run(check_helmsmithy_obj, add_obj(obj_build_a_helmsmithy))
1754+ run(check_warehouse_obj, add_campaign_objective(obj_build_a_warehouse))
1755+ run(check_trainingssite_obj, add_campaign_objective(obj_build_trainingssites))
1756+ run(check_weapon_productions_obj, add_campaign_objective(obj_build_weapon_productions))
1757+ run(check_helmsmithy_obj, add_campaign_objective(obj_build_a_helmsmithy))
1758 end
1759
1760 function check_trainingssite_obj(o)
1761@@ -215,14 +217,14 @@
1762 sleep(7349)
1763 end
1764
1765- send_msg(order_msg_5_build_a_fortress)
1766- local o = add_obj(obj_build_a_fortress)
1767+ campaign_message_box(order_msg_5_build_a_fortress)
1768+ local o = add_campaign_objective(obj_build_a_fortress)
1769 p1:allow_buildings{"fortress"}
1770
1771 while #p1:get_buildings("fortress") == 0 do sleep(6523) end
1772
1773 o.done = true
1774- send_msg(story_note_3)
1775+ campaign_message_box(story_note_3)
1776 end
1777
1778 function expansion()
1779@@ -235,13 +237,13 @@
1780 )
1781 do sleep(8374) end
1782
1783- send_msg(story_msg_2)
1784- send_msg(story_msg_3)
1785- send_msg(story_msg_4)
1786+ campaign_message_box(story_msg_2)
1787+ campaign_message_box(story_msg_3)
1788+ campaign_message_box(story_msg_4)
1789
1790 sleep(20000)
1791- send_msg(story_msg_5)
1792- send_msg(story_msg_6)
1793+ campaign_message_box(story_msg_5)
1794+ campaign_message_box(story_msg_6)
1795 end
1796
1797 -- checks if all military buildings are drestroyed (the build-in function "defeated" only checks if all warehouses are destroyed)
1798@@ -270,8 +272,8 @@
1799 -- "explore further" is done
1800 exploration_objective.done = true
1801
1802- send_msg(order_msg_7_destroy_kalitaths_army)
1803- local o = add_obj(obj_destroy_kalitaths_army)
1804+ campaign_message_box(order_msg_7_destroy_kalitaths_army)
1805+ local o = add_campaign_objective(obj_destroy_kalitaths_army)
1806
1807 while not check_player_completely_defeated(p2) do
1808 sleep(7837)
1809@@ -308,9 +310,9 @@
1810
1811 local pts = scroll_smoothly_to(map:get_field(120,92))
1812
1813- send_msg(order_msg_7_renegade_fortification)
1814- send_msg(order_msg_7_free_althunran)
1815- local o = add_obj(obj_military_assault_on_althunran)
1816+ campaign_message_box(order_msg_7_renegade_fortification)
1817+ campaign_message_box(order_msg_7_free_althunran)
1818+ local o = add_campaign_objective(obj_military_assault_on_althunran)
1819
1820 timed_scroll(array_reverse(pts))
1821 sleep(503)
1822@@ -335,7 +337,7 @@
1823
1824 local pts = scroll_smoothly_to(map:get_field(4,5))
1825
1826- send_msg(story_msg_7)
1827+ campaign_message_box(story_msg_7)
1828
1829 p1:reveal_campaign("campsect1")
1830 end
1831
1832=== modified file 'campaigns/bar02.wmf/scripting/texts.lua'
1833--- campaigns/bar02.wmf/scripting/texts.lua 2014-10-18 19:02:40 +0000
1834+++ campaigns/bar02.wmf/scripting/texts.lua 2014-10-31 11:37:25 +0000
1835@@ -18,107 +18,98 @@
1836
1837 obj_build_small_food_economy = {
1838 name = "build_small_food_economy",
1839- title=_"Build up a small food economy",
1840+ title = _"Build up a small food economy",
1841 number = 5,
1842 body = objective_text(_"Build up a small food economy",
1843- _"Build up a basic food economy to provide your people with food." ..
1844- paragraphdivider() ..
1845+ _"Build up a basic food economy to provide your people with food."
1846+ .. paragraphdivider() ..
1847 listitem_bullet(_"Build a fisher’s hut") ..
1848 listitem_bullet(_"Build a hunter’s hut") ..
1849 listitem_bullet(_"Build a well") ..
1850 listitem_bullet(_"Build a farm") ..
1851- listitem_bullet(_"Build a bakery")
1852- ),
1853+ listitem_bullet(_"Build a bakery"))
1854 }
1855
1856 obj_build_cattlefarm = {
1857 name = "obj_build_cattlefarm",
1858- title = _ "Build a cattle farm",
1859+ title = _"Build a cattle farm",
1860 number = 1,
1861 body = objective_text(_"Remember to build a cattle farm",
1862- _"As your roads grow longer and your economy bigger, you should make good use of your oxen to help transport wares more quickly." ..
1863- paragraphdivider () ..
1864+ _"As your roads grow longer and your economy bigger, you should make good use of your oxen to help transport wares more quickly."
1865+ .. paragraphdivider () ..
1866 listitem_bullet(_"Remember to build a cattle farm")
1867 ),
1868 }
1869
1870 obj_build_a_donjon = {
1871 name = "build_a_donjon",
1872- title=_"Build a donjon",
1873+ title = _"Build a donjon",
1874 number = 1,
1875 body = objective_text(_"Build a donjon",
1876- listitem_bullet(_"Build a donjon at the north-east border of your territory to get greater visual range and to protect your people from sudden attacks by enemies.")
1877- ),
1878+ listitem_bullet(_"Build a donjon at the north-east border of your territory to get greater visual range and to protect your people from sudden attacks by enemies."))
1879 }
1880
1881 obj_explore_further = {
1882 name = "explore_further",
1883- title=_"Explore further",
1884+ title = _"Explore further",
1885 number = 1,
1886 body = objective_text(_"Explore further",
1887- listitem_bullet(_"Build more military buildings to explore the area around the headquarters and to ensure the safety of your people.")
1888- ),
1889+ listitem_bullet(_"Build more military buildings to explore the area around the headquarters and to ensure the safety of your people."))
1890 }
1891
1892 obj_build_mining_economy = {
1893 name = "build_mining_economy",
1894- title=_"Build a mining infrastructure",
1895+ title = _"Build a mining infrastructure",
1896 number = 6,
1897 body = objective_text(_"Build a mining infrastructure",
1898- listitem_bullet(_"Expand your territory to the mountains, send geologists to search for ore and coal and build a mining economy with mines, taverns, smelting works and metal workshop.")
1899- ),
1900+ listitem_bullet(_"Expand your territory to the mountains, send geologists to search for ore and coal and build a mining economy with mines, taverns, smelting works and metal workshop."))
1901 }
1902
1903 obj_build_a_fortress = {
1904 name = "build_a_fortress",
1905- title=_"Build a fortress",
1906+ title = _"Build a fortress",
1907 number = 1,
1908 body = objective_text(_"Build a fortress",
1909- listitem_bullet(_"Build a fortress to the east of the mountains.")
1910- ),
1911+ listitem_bullet(_"Build a fortress to the east of the mountains."))
1912 }
1913
1914 obj_build_training_infrastructure = {
1915 name = "build_training_infrastructure",
1916- title=_"Build a training infrastructure",
1917+ title = _"Build a training infrastructure",
1918 number = 4,
1919 body = objective_text(_"Build a training infrastructure",
1920 listitem_bullet(_"Build a battle arena and a training camp to the west of the mountains.") ..
1921 listitem_bullet(_"Enhance your metal workshop to an axfactory in order to produce weapons, and build up a second metal workshop to ensure the production of tools. When the blacksmith reaches his next level (master blacksmith), you can even enhance the axfactory to a war mill, which will produce additional weapons.") ..
1922- listitem_bullet(_"Build a helm smithy to the west of the mountains to provide your soldiers with better armor.")
1923- ),
1924+ listitem_bullet(_"Build a helm smithy to the west of the mountains to provide your soldiers with better armor."))
1925 }
1926
1927
1928 obj_build_a_warehouse = {
1929 name = "build_a_warehouse",
1930- title=_"Build a warehouse",
1931+ title = _"Build a warehouse",
1932 number = 1,
1933 body = objective_text(_"Build a warehouse",
1934 listitem_bullet(_"Build a warehouse to the west of the mountains.") ..
1935- listitem_arrow(_"Warehouses are similar to your headquarters, with the only difference that they aren’t defended by soldiers. It is often wise to build a warehouse when your territory is growing and the paths to your headquarters get longer and longer.")
1936- ),
1937+ listitem_arrow(_"Warehouses are similar to your headquarters, with the only difference that they aren’t defended by soldiers. It is often wise to build a warehouse when your territory is growing and the paths to your headquarters get longer and longer."))
1938 }
1939
1940 obj_build_trainingssites = {
1941 name = "build_trainingssites",
1942- title=_"Build training sites",
1943+ title = _"Build training sites",
1944 number = 2,
1945 body = objective_text(_"Build training sites",
1946 listitem_bullet(_"Build a battle arena and a training camp to the west of the mountains.") ..
1947- listitem_arrow(_"Training sites like a training camp or a battle arena are used for training soldiers in their different attributes. These attributes are important in fights and the better a soldier is, the higher is the chance to win a fight." ..
1948- "<br>" ..
1949- _"The attributes are: health, attack, defense and evade.")
1950- ),
1951+ listitem_arrow(_"Training sites like a training camp or a battle arena are used for training soldiers in their different attributes. These attributes are important in fights and the better a soldier is, the higher is the chance to win a fight."
1952+ .. "<br>" ..
1953+ _"The attributes are: health, attack, defense and evade."))
1954 }
1955
1956 obj_build_weapon_productions = {
1957 name = "build_weapon_productions",
1958- title=_"Build weapons production",
1959+ title = _"Build weapons production",
1960 number = 3,
1961 body = objective_text(_"Build weapons production",
1962- listitem_bullet(_"Enhance your metal workshop to an axfactory in order to produce weapons, and build up a second metal workshop to ensure the production of tools. When the blacksmith reaches his next level (master blacksmith), you can even enhance the axfactory to a war mill, which will produce additional weapons.")
1963- ),
1964+ listitem_bullet(_"Enhance your metal workshop to an axfactory in order to produce weapons, and build up a second metal workshop to ensure the production of tools. When the blacksmith reaches his next level (master blacksmith), you can even enhance the axfactory to a war mill, which will produce additional weapons."))
1965 }
1966
1967 obj_build_a_helmsmithy = {
1968@@ -126,27 +117,24 @@
1969 title=_"Build a helm smithy",
1970 number = 1,
1971 body = objective_text(_"Build a helm smithy",
1972- listitem_bullet(_"Build a helm smithy to the west of the mountains to provide your soldiers with better armor.")
1973- ),
1974+ listitem_bullet(_"Build a helm smithy to the west of the mountains to provide your soldiers with better armor."))
1975 }
1976
1977 obj_destroy_kalitaths_army = {
1978 name = "destroy_kalitaths_army",
1979- title=_"Destroy Kalitath’s army",
1980+ title = _"Destroy Kalitath’s army",
1981 number = 2,
1982 body = objective_text(_"Destroy Kalitath’s army",
1983 listitem_bullet(_"Destroy Kalitath’s army and expand your territory to the east.") ..
1984- listitem_arrow(_"To attack an enemy, you must click on the door of an adversary’s military building. A menu will pop up allowing you to select the number of soldiers that should attack. When you are ready with setting the number, click on the cross (‘Start Attack’).")
1985- ),
1986+ listitem_arrow(_"To attack an enemy, you must click on the door of an adversary’s military building. A menu will pop up allowing you to select the number of soldiers that should attack. When you are ready with setting the number, click on the cross (‘Start Attack’)."))
1987 }
1988
1989 obj_military_assault_on_althunran = {
1990 name = "military_assault_on_althunran",
1991- title=_"Military assault on Al’thunran",
1992+ title = _"Military assault on Al’thunran",
1993 number = 1,
1994 body = objective_text(_"Military assault on Al’thunran",
1995- listitem_bullet(_"Destroy all forces of Thron’s two brothers to liberate the throne-circle.")
1996- ),
1997+ listitem_bullet(_"Destroy all forces of Thron’s two brothers to liberate the throne-circle."))
1998 }
1999
2000 -- =======================================================================
2001@@ -156,169 +144,172 @@
2002 posy=1,
2003 title=_"Close to Home",
2004 body =thron(_"Thron looks worried…",
2005-_([[These last days, we came closer to our capital. Many people have already joined us on our march and set their hopes on me. However, I fear that we are not strong enough to take up the battle against my brothers.]]) ..
2006-paragraphdivider() ..
2007-_([[For now, we are resting at the borders of the old forest and preparing for the coming days.]])),
2008+ _([[These last days, we came closer to our capital. Many people have already joined us on our march and set their hopes on me. However, I fear that we are not strong enough to take up the battle against my brothers.]])
2009+ .. paragraphdivider() ..
2010+ _([[For now, we are resting at the borders of the old forest and preparing for the coming days.]]))
2011 }
2012
2013 story_msg_2 = {
2014 posy=1,
2015 title=_"Another Cold Day",
2016 body =thron(_"Thron looks worried…",
2017-_([[The news that a patrol brought is not good to hear. Our spies tell us that the war tribes still rage in battle, but some of the elder soldiers and tribe leaders seem to grow tired of this senseless war. Kalitath, son of Kun is the first war leader to leave Al’thunran, thus leaving his side weak and vulnerable. As my scouts report, he has set foot on the lower grounds around the capital, securing the outer fortification rings.]])),
2018+ _([[The news that a patrol brought is not good to hear. Our spies tell us that the war tribes still rage in battle, but some of the elder soldiers and tribe leaders seem to grow tired of this senseless war. Kalitath, son of Kun is the first war leader to leave Al’thunran, thus leaving his side weak and vulnerable. As my scouts report, he has set foot on the lower grounds around the capital, securing the outer fortification rings.]]))
2019 }
2020
2021 story_msg_3 = {
2022+ posy=1,
2023 title=_"Doubts",
2024- posy=1,
2025 body = boldreth(_"Boldreth is shaking his head…",
2026-_([[Thron seeks to believe that Kalitath is tired of fighting and would be willing to join us once we march to re-establish law and order in Al’thunran. But I don’t think so. Kalitath is son to one of the mightiest generals of our forces and his family never quite liked the thought of bowing before the banner of Chat’Karuth. Why should he march with Chat’Karuth’s son to reclaim his heritage and the throne?]])),
2027+ _([[Thron seeks to believe that Kalitath is tired of fighting and would be willing to join us once we march to re-establish law and order in Al’thunran. But I don’t think so. Kalitath is son to one of the mightiest generals of our forces and his family never quite liked the thought of bowing before the banner of Chat’Karuth. Why should he march with Chat’Karuth’s son to reclaim his heritage and the throne?]]))
2028 }
2029
2030 story_msg_4 = {
2031- posy=1,
2032- title=_"The Story Continues",
2033- body= boldreth(
2034-_([[However, Thron is not willing to listen to my doubts. He seeks to expand our fortifications to the borders of Kalitath’s territory and to reunite with his forces. I have to keep an eye on everything that happens here.]])),
2035+ posy = 1,
2036+ title = _"The Story Continues",
2037+ body = boldreth(_"Boldreth says:",
2038+ _([[However, Thron is not willing to listen to my doubts. He seeks to expand our fortifications to the borders of Kalitath’s territory and to reunite with his forces. I have to keep an eye on everything that happens here.]]))
2039 }
2040
2041 story_msg_5 = {
2042- posy=1,
2043- title=_"Another Cold Day",
2044+ posy = 1,
2045+ title = _"Another Cold Day",
2046 body= thron(_"Thron is speaking confidently.",
2047-_([[The frontier line of my forces has expanded to the edge of the forests. We have a long and cold winter and so many miles behind us. The fortification that we erected around Ondun will guarantee us a fast supply of men and goods, and once Al’thunran is in my hands, the two cities will be linked by a good and defensible infrastructure. Still, I hope I will not walk alone on this mission, I hope Kalitath son of Kun will follow my call.]])),
2048+ _([[The frontier line of my forces has expanded to the edge of the forests. We have a long and cold winter and so many miles behind us. The fortification that we erected around Ondun will guarantee us a fast supply of men and goods, and once Al’thunran is in my hands, the two cities will be linked by a good and defensible infrastructure. Still, I hope I will not walk alone on this mission, I hope Kalitath son of Kun will follow my call.]]))
2049 }
2050
2051 story_msg_6 = {
2052- posy=1,
2053- title=_"The Story Continues",
2054- body= thron(
2055-_([[I have sent men to meet with Kalitath in his fortress. He has barricaded the former main entrance to the capital and is trying to set up a siege ring around Al’thunran. He will not let anyone enter or leave the city while the ring is intact. Until now, he has not answered any of my messages. But the time I spend waiting won’t be lost. I will further upgrade my soldiers and prepare for battle.]])),
2056+ posy = 1,
2057+ title = _"The Story Continues",
2058+ body = thron(_"Thron says:",
2059+ _([[I have sent men to meet with Kalitath in his fortress. He has barricaded the former main entrance to the capital and is trying to set up a siege ring around Al’thunran. He will not let anyone enter or leave the city while the ring is intact. Until now, he has not answered any of my messages. But the time I spend waiting won’t be lost. I will further upgrade my soldiers and prepare for battle.]]))
2060 }
2061
2062 order_msg_7_destroy_kalitaths_army = {
2063- title=_"Your Loyal Companion",
2064- body= boldreth(_"Boldreth shouts out!",
2065-_([[The BASTARD! Only one man of our frontier patrol came back alive. He carried a message from Kalitath, telling us that he will punish every move of our troops with their own blood! We cannot accept this behavior. From now on, there is war between Kalitath and us!]]))
2066-.. new_objectives(obj_destroy_kalitaths_army),
2067+ title = _"Your Loyal Companion",
2068+ body = boldreth(_"Boldreth shouts out!",
2069+ _([[The BASTARD! Only one man of our frontier patrol came back alive. He carried a message from Kalitath, telling us that he will punish every move of our troops with their own blood! We cannot accept this behavior. From now on, there is war between Kalitath and us!]]))
2070+ .. new_objectives(obj_destroy_kalitaths_army)
2071 }
2072
2073
2074
2075 order_msg_7_renegade_fortification = {
2076 posy = 1,
2077- title=_"Renegade Fortification",
2078- body= thron(_"Thron says:",
2079-_([[The traitor left his armies dying where they lay when he saw that he would not keep my forces back. Kalitath disappeared in the confusion of the war, but I don’t care now. Shall he flee and be forgotten for all times as a tribal leader that would not bow before the wooden throne, that is mine to take now.]]) .. paragraphdivider() ..
2080-_([[Furthermore, his flight brought us a great benefit: all year, Kalitath was so busy fighting that he did not even care to store enough food for all his men. Now that he has fled, their hunger has caused some of his younger followers to desert. This group holds a strong fortification on the main ring.]]) .. " " ..
2081-_([[But there is more news: My scouts have reported that the two raging tribes of my brothers are in chaos and have barely noticed the new danger that is about to strike them. However, they would not care if they noticed I guess, blinded by rage and hate, there is no sense left in them at all I believe.]])),
2082+ title = _"Renegade Fortification",
2083+ body = thron(_"Thron says:",
2084+ _([[The traitor left his armies dying where they lay when he saw that he would not keep my forces back. Kalitath disappeared in the confusion of the war, but I don’t care now. Shall he flee and be forgotten for all times as a tribal leader that would not bow before the wooden throne, that is mine to take now.]])
2085+ .. paragraphdivider() ..
2086+ _([[Furthermore, his flight brought us a great benefit: all year, Kalitath was so busy fighting that he did not even care to store enough food for all his men. Now that he has fled, their hunger has caused some of his younger followers to desert. This group holds a strong fortification on the main ring.]])
2087+ .. paragraphdivider() ..
2088+ _([[But there is more news: My scouts have reported that the two raging tribes of my brothers are in chaos and have barely noticed the new danger that is about to strike them. However, they would not care if they noticed I guess, blinded by rage and hate, there is no sense left in them at all I believe.]]))
2089 }
2090
2091 briefing_msg_1 = {
2092- posy=1,
2093- title=_"Winter Ahead",
2094- body= boldreth(_"Boldreth says:",
2095-_([[This morning, I found Thron’s mind troubled. He returned from his patrol late last night and sat back against a tree, watching over the encampment. The number of quarrels and disputes keeps growing, and the winter has us firmly in its grip. We should put food in our storage to survive the long, cold winter!]])),
2096+ posy = 1,
2097+ title = _"Winter Ahead",
2098+ body = boldreth(_"Boldreth says:",
2099+ _([[This morning, I found Thron’s mind troubled. He returned from his patrol late last night and sat back against a tree, watching over the encampment. The number of quarrels and disputes keeps growing, and the winter has us firmly in its grip. We should put food in our storage to survive the long, cold winter!]]))
2100 }
2101
2102 order_msg_1_small_food_economy = {
2103- posy=1,
2104- title=_"The Advisor",
2105- body= khantrukh(_"Khantrukh nods.",
2106-_([[Boldreth is right! We don’t have enough food to survive a long, cold winter. We should start building a well, a fisher’s and a hunter’s hut. And if we find enough space, we should as well build up a farm and a bakery! One of our farmers seems to be very clever – he already got some crops to grow in this cold soil.]]))
2107-.. new_objectives(obj_build_small_food_economy),
2108+ posy = 1,
2109+ title = _"The Advisor",
2110+ body = khantrukh(_"Khantrukh nods.",
2111+ _([[Boldreth is right! We don’t have enough food to survive a long, cold winter. We should start building a well, a fisher’s and a hunter’s hut. And if we find enough space, we should as well build up a farm and a bakery! One of our farmers seems to be very clever – he already got some crops to grow in this cold soil.]]))
2112+ .. new_objectives(obj_build_small_food_economy)
2113 }
2114
2115 story_note_1 = {
2116- posy=1,
2117- title=_"Food Economy Completed",
2118- body= thron(
2119-_([[Khantrukh has just informed me that our basic food economy was built up successfully. Finally, none of us has to fear starvation anymore.]])),
2120+ posy = 1,
2121+ title = _"Food Economy Completed",
2122+ body = thron(_"Thron says:",
2123+ _([[Khantrukh has just informed me that our basic food economy was built up successfully. Finally, none of us has to fear starvation anymore.]]))
2124 }
2125
2126 order_msg_2_build_a_donjon = {
2127- posy=1,
2128- title=_"Tracks",
2129- body= boldreth(
2130- _([[Thron told me that he discovered tracks in the snow to the northeast of our settlement. He has instructed us to build a donjon, to have a greater visual range over the area around our hall to protect our people from sudden attacks.]]))
2131-.. new_objectives(obj_build_a_donjon),
2132+ posy = 1,
2133+ title = _"Tracks",
2134+ body = boldreth(_"Boldreth says:",
2135+ _([[Thron told me that he discovered tracks in the snow to the northeast of our settlement. He has instructed us to build a donjon, to have a greater visual range over the area around our hall to protect our people from sudden attacks.]]))
2136+ .. new_objectives(obj_build_a_donjon)
2137 }
2138
2139 order_msg_3_explore_further = {
2140- posy=1,
2141- title=_"Further Exploration",
2142- body= boldreth(
2143-_([[The first fortification Thron ordered has just been completed. At the moment, he seeks to bring trust and belief to those who live inside the walls of our new habitat that we named ‘Ondun’, which means ‘those who wait’ in the old tongue. But Thron is not yet satisfied – and I fully understand his fears: the forests are deep, and the frontier to Al’thunran is near. I am sure that there are a thousand greater dangers out there than the unknown tracks.]]) ..
2144-paragraphdivider() ..
2145-_([[To overlook more of the area around our hall, we should explore further and set up more guards and scouts to observe the frontier and keep an eye on the raging wars on our doorstep. THEN we will be prepared once trouble seeks to capture our woods.]]))
2146-.. new_objectives(obj_explore_further),
2147+ posy = 1,
2148+ title = _"Further Exploration",
2149+ body = boldreth(_"Boldreth says:",
2150+ _([[The first fortification Thron ordered has just been completed. At the moment, he seeks to bring trust and belief to those who live inside the walls of our new habitat that we named ‘Ondun’, which means ‘those who wait’ in the old tongue. But Thron is not yet satisfied – and I fully understand his fears: the forests are deep, and the frontier to Al’thunran is near. I am sure that there are a thousand greater dangers out there than the unknown tracks.]])
2151+ .. paragraphdivider() ..
2152+ _([[To overlook more of the area around our hall, we should explore further and set up more guards and scouts to observe the frontier and keep an eye on the raging wars on our doorstep. THEN we will be prepared once trouble seeks to capture our woods.]]))
2153+ .. new_objectives(obj_explore_further)
2154 }
2155
2156 order_msg_4_build_mining_economy = {
2157- posy=1,
2158- title=_"Mountains Found",
2159- body= khantrukh(
2160-_([[I have just spoken to the leader of our patrol. He told me that they found some mountains to the north-east and east of our territory. With a bit of luck this will open up a new chance for rearming our men, because as far as I remember, most of the mountains west of Al’thunran hold coal and some metal ores.]]))
2161-.. new_objectives(obj_build_mining_economy),
2162+ posy = 1,
2163+ title = _"Mountains Found",
2164+ body = khantrukh("Khantrukh says:",
2165+ _([[I have just spoken to the leader of our patrol. He told me that they found some mountains to the north-east and east of our territory. With a bit of luck this will open up a new chance for rearming our men, because as far as I remember, most of the mountains west of Al’thunran hold coal and some metal ores.]]))
2166+ .. new_objectives(obj_build_mining_economy)
2167 }
2168
2169 story_note_2 = {
2170- posy=1,
2171- title=_"Mining Economy Completed",
2172- body= thron(
2173-_([[I just got informed that our mining economy has started its work. This news brought a smile to my face – even if the hardest part is still waiting to be done, now that our smiths will give their best to further ease our lives.]])),
2174+ posy = 1,
2175+ title = _"Mining Economy Completed",
2176+ body = thron(_"Thron says:",
2177+ _([[I just got informed that our mining economy has started its work. This news brought a smile to my face – even if the hardest part is still waiting to be done, now that our smiths will give their best to further ease our lives.]]))
2178 }
2179
2180 order_msg_5_build_a_fortress = {
2181- posy=1,
2182- title=_"Fortress Needed",
2183- body= thron(
2184-_([[Boldreth and I just explored the area around the three mountains. One major strategic problem of that area seems to be that there are two bigger passages – one north and one south of the central mountain. Those passages are quite hard to control, and so it seems to me like we have only one chance to secure the mountains from enemy hands: we must build a fortress to the east of the mountains!]]))
2185-.. new_objectives(obj_build_a_fortress),
2186+ posy = 1,
2187+ title = _"Fortress Needed",
2188+ body = thron(_"Thron says:",
2189+ _([[Boldreth and I just explored the area around the three mountains. One major strategic problem of that area seems to be that there are two bigger passages – one north and one south of the central mountain. Those passages are quite hard to control, and so it seems to me like we have only one chance to secure the mountains from enemy hands: we must build a fortress to the east of the mountains!]]))
2190+ .. new_objectives(obj_build_a_fortress)
2191 }
2192
2193 story_note_3 = {
2194- posy=1,
2195- title=_"Fortress Completed",
2196- body=thron(
2197-_([[Finally! The fortress has just been completed, so the entrance to our settlement should be safe for now. For the future, we might think on building some more fortifications like barriers and donjons at the passages, but for now we can take a deep breath.]])),
2198+ posy = 1,
2199+ title = _"Fortress Completed",
2200+ body = thron(_"Thron says:",
2201+ _([[Finally! The fortress has just been completed, so the entrance to our settlement should be safe for now. For the future, we might think on building some more fortifications like barriers and donjons at the passages, but for now we can take a deep breath.]]))
2202 }
2203
2204 order_msg_6_build_enhanced_economy_and_training = {
2205- posy=1,
2206- title=_"Enhanced Economy and Training",
2207- body= boldreth(
2208-_([[Our mining economy seems to work fine, that is already good news! Anyway, there are still a lot of men and women waiting in our hall to get a task, so they can help our soldiers to prepare for the war to come.]]) ..
2209-paragraphdivider() ..
2210-_([[Our geologists found a lot more deposits of iron ore, coal and even gold. We should enhance our current mines as soon as our miners are more experienced. We should build up some more mines, a bigger food infrastructure to always supply our men with sufficient food and a further processing economy. But that’s still not everything – most of our soldiers are quite young and neither have a good weapon nor are they well trained. We should build up training sites to prepare them for their future tasks.]]))
2211-.. new_objectives(obj_build_training_infrastructure),
2212+ posy = 1,
2213+ title = _"Enhanced Economy and Training",
2214+ body = boldreth(_"Boldreth says:",
2215+ _([[Our mining economy seems to work fine, that is already good news! Anyway, there are still a lot of men and women waiting in our hall to get a task, so they can help our soldiers to prepare for the war to come.]])
2216+ .. paragraphdivider() ..
2217+ _([[Our geologists found a lot more deposits of iron ore, coal and even gold. We should enhance our current mines as soon as our miners are more experienced. We should build up some more mines, a bigger food infrastructure to always supply our men with sufficient food and a further processing economy. But that’s still not everything – most of our soldiers are quite young and neither have a good weapon nor are they well trained. We should build up training sites to prepare them for their future tasks.]]))
2218+ .. new_objectives(obj_build_training_infrastructure)
2219 }
2220
2221 story_msg_7 = {
2222 posy=1,
2223 title=_"Another Cold Day",
2224 body= thron(_"Thron looks worried…",
2225-_([[My brothers and their soldiers are dead and left fire and destruction behind. In none of all the ruins could I find any man or woman of the normal folk, and so I just may hope that they fled from this cruel battleground and started a better life somewhere else.]])
2226-.. paragraphdivider() ..
2227-_([[Nothing is left of that beauty I remember, only ruins remain of the old capital. I am sorrowful but also relieved. I never hoped to see Al’thunran’s old beauty again – it was only a few months ago that I wondered whether I would ever be able to set my feet there again. Now the old town is back in my hands, and I will not hesitate to rebuild it with all the strength my people have. I can’t wait to see it again in its old beauty.]]))
2228-.. objective_text(_"Victory",
2229- _([[You have completed the last mission of the Barbarian tutorial campaign. You may continue playing if you wish, otherwise move on to the next campaign.]]))
2230+ _([[My brothers and their soldiers are dead and left fire and destruction behind. In none of all the ruins could I find any man or woman of the normal folk, and so I just may hope that they fled from this cruel battleground and started a better life somewhere else.]])
2231+ .. paragraphdivider() ..
2232+ _([[Nothing is left of that beauty I remember, only ruins remain of the old capital. I am sorrowful but also relieved. I never hoped to see Al’thunran’s old beauty again – it was only a few months ago that I wondered whether I would ever be able to set my feet there again. Now the old town is back in my hands, and I will not hesitate to rebuild it with all the strength my people have. I can’t wait to see it again in its old beauty.]]))
2233+ .. objective_text(_"Victory",
2234+ _([[You have completed the last mission of the Barbarian tutorial campaign. You may continue playing if you wish, otherwise move on to the next campaign.]]))
2235 }
2236
2237 order_msg_7_free_althunran = {
2238 posy = 1,
2239- title=_"Military Assault",
2240- body= thron(
2241-_([[So be it, the generals are out and about arranging my troops, and Boldreth himself will lead the first strike. I will ride by his side, to free Al’thunran of this war and return peace to our capital.]]) .. paragraphdivider() ..
2242-_([[When the young sun rises above the trees tomorrow morning, I will order the assault. By dusk, I will celebrate my victory in the wooden halls of the warlord and sacrifice a newborn lamb in the honor of my father, whose eyes are set upon me today.]]) ..
2243-paragraphdivider() ..
2244-_([[So be it!]]))
2245-.. new_objectives(obj_military_assault_on_althunran),
2246+ title = _"Military Assault",
2247+ body = thron(_"Thron says:",
2248+ _([[So be it, the generals are out and about arranging my troops, and Boldreth himself will lead the first strike. I will ride by his side, to free Al’thunran of this war and return peace to our capital.]])
2249+ .. paragraphdivider() ..
2250+ _([[When the young sun rises above the trees tomorrow morning, I will order the assault. By dusk, I will celebrate my victory in the wooden halls of the warlord and sacrifice a newborn lamb in the honor of my father, whose eyes are set upon me today.]])
2251+ .. paragraphdivider() ..
2252+ _([[So be it!]]))
2253+ .. new_objectives(obj_military_assault_on_althunran),
2254 }
2255
2256 cattlefarm_01 = {
2257- title = _"Khantrukh says:",
2258- body= khantrukh(
2259-_([[Chieftain, remember the poor carriers: Our roads get longer and longer and the burden on their shoulders never gets lighter. We should breed more oxen to make their work lighter and our transportation more efficient.]]))
2260-.. new_objectives(obj_build_cattlefarm),
2261+ title = _"Faster Transportation",
2262+ body = khantrukh(_"Khantrukh says:",
2263+ _([[Chieftain, remember the poor carriers: Our roads get longer and longer and the burden on their shoulders never gets lighter. We should breed more oxen to make their work lighter and our transportation more efficient.]]))
2264+ .. new_objectives(obj_build_cattlefarm),
2265 }
2266
2267=== modified file 'campaigns/dummy.wmf/scripting/init.lua'
2268--- campaigns/dummy.wmf/scripting/init.lua 2014-03-25 06:18:48 +0000
2269+++ campaigns/dummy.wmf/scripting/init.lua 2014-10-31 11:37:25 +0000
2270@@ -3,6 +3,7 @@
2271 -- =======================================================================
2272 set_textdomain("scenario_dummy.wmf")
2273
2274+include "scripting/messages.lua"
2275 include "scripting/ui.lua"
2276
2277 p1 = wl.Game().players[1]
2278@@ -13,4 +14,4 @@
2279 height=450,
2280 posy=1,
2281 }
2282-p1:message_box(dummy_msg.title, dummy_msg.body, dummy_msg)
2283+campaign_message_box(dummy_msg.title, dummy_msg.body, dummy_msg)
2284
2285=== modified file 'campaigns/emp01.wmf/scripting/init.lua'
2286--- campaigns/emp01.wmf/scripting/init.lua 2014-03-25 06:18:48 +0000
2287+++ campaigns/emp01.wmf/scripting/init.lua 2014-10-31 11:37:25 +0000
2288@@ -13,14 +13,4 @@
2289
2290 include "map:scripting/starting_conditions.lua"
2291 include "map:scripting/texts.lua"
2292-
2293--- Some messages that spare some typing
2294-function send_msg(msg)
2295- if not msg.h then msg.h = 400 end
2296- p1:message_box(msg.title, msg.body, msg)
2297-end
2298-function add_obj(t)
2299- return p1:add_objective(t.name, t.title, t.body)
2300-end
2301-
2302 include "map:scripting/mission_thread.lua"
2303
2304=== modified file 'campaigns/emp01.wmf/scripting/mission_thread.lua'
2305--- campaigns/emp01.wmf/scripting/mission_thread.lua 2014-10-17 08:38:24 +0000
2306+++ campaigns/emp01.wmf/scripting/mission_thread.lua 2014-10-31 11:37:25 +0000
2307@@ -1,71 +1,72 @@
2308+include "scripting/messages.lua"
2309
2310 function mission_thread()
2311 sleep(100) -- This is needed for yet unknown reasons
2312
2313 -- Initial messages
2314 local sea = wl.Game().map:get_field(47,25)
2315- local pts = scroll_smoothly_to(sea)
2316+ scroll_smoothly_to(sea,0)
2317
2318- send_msg(diary_page_1)
2319+ campaign_message_box(diary_page_1)
2320 sleep(200)
2321
2322 -- Show the sea
2323 p1:reveal_fields(sea:region(6))
2324 sleep(200)
2325- send_msg(diary_page_2)
2326+ campaign_message_box(diary_page_2)
2327 -- Hide the sea after 5 seconds
2328 run(function() sleep(5000) p1:hide_fields(sea:region(6)) end)
2329
2330 -- Back home
2331- timed_scroll(array_reverse(pts))
2332- send_msg(diary_page_3)
2333+ scroll_smoothly_to(wl.Game().map.player_slots[1].starting_field)
2334+ campaign_message_box(diary_page_3)
2335
2336
2337 sleep(400)
2338
2339- send_msg(saledus_1)
2340+ campaign_message_box(saledus_1)
2341 p1:allow_buildings{"barracks"}
2342- local o = add_obj(obj_build_barracks)
2343+ local o = add_campaign_objective(obj_build_barracks)
2344 while #p1:get_buildings("barracks") < 1 do sleep(3249) end
2345 o.done = true
2346
2347 -- Barracks are completed now
2348- send_msg(saledus_2)
2349+ campaign_message_box(saledus_2)
2350 p1:allow_buildings{"lumberjacks_house"}
2351- o = add_obj(obj_build_lumberjack)
2352- send_msg(amalea_1)
2353+ o = add_campaign_objective(obj_build_lumberjack)
2354+ campaign_message_box(amalea_1)
2355 while #p1:get_buildings("lumberjacks_house") < 1 do sleep(3249) end
2356 o.done = true
2357
2358 -- Lumberjack is now build
2359- send_msg(amalea_2)
2360+ campaign_message_box(amalea_2)
2361 p1:allow_buildings{"sawmill"}
2362- o = add_obj(obj_build_sawmill_and_lumberjacks)
2363+ o = add_campaign_objective(obj_build_sawmill_and_lumberjacks)
2364 while not check_for_buildings(p1, { lumberjacks_house = 3, sawmill = 1})
2365 do sleep(2343) end
2366 o.done = true
2367
2368 -- Now the lady demands a forester after having us cut down the whole forest.
2369- send_msg(amalea_3)
2370- o = add_obj(obj_build_forester)
2371+ campaign_message_box(amalea_3)
2372+ o = add_campaign_objective(obj_build_forester)
2373 p1:allow_buildings{"foresters_house"}
2374 while not check_for_buildings(p1, { foresters_house = 1 }) do sleep(2434) end
2375 o.done = true
2376
2377
2378 -- Now a quarry
2379- send_msg(saledus_3)
2380- o = add_obj(obj_build_quarry)
2381+ campaign_message_box(saledus_3)
2382+ o = add_campaign_objective(obj_build_quarry)
2383 p1:allow_buildings{"quarry"}
2384 while not check_for_buildings(p1, { quarry = 1 }) do sleep(2434) end
2385 o.done = true
2386
2387 -- All buildings done. Got home
2388- send_msg(saledus_4)
2389+ campaign_message_box(saledus_4)
2390
2391 sleep(25000) -- Sleep a while
2392
2393- send_msg(diary_page_4)
2394+ campaign_message_box(diary_page_4)
2395 p1:reveal_scenario("empiretut01")
2396 end
2397
2398@@ -73,7 +74,7 @@
2399 function easter_egg()
2400 while not check_for_buildings(p1, {barracks = 10}) do sleep(4253) end
2401
2402- send_msg(safe_peninsula)
2403+ campaign_message_box(safe_peninsula)
2404 end
2405
2406
2407
2408=== modified file 'campaigns/emp01.wmf/scripting/texts.lua'
2409--- campaigns/emp01.wmf/scripting/texts.lua 2014-10-18 07:37:16 +0000
2410+++ campaigns/emp01.wmf/scripting/texts.lua 2014-10-31 11:37:25 +0000
2411@@ -77,24 +77,15 @@
2412 diary_page_1 = {
2413 title =_ "A Dark Night",
2414 body=lutius(_"Diary of Lutius",
2415- _([[What has become of our Empire? I really ask this question – why did my king forbid me ]] ..
2416-[[from fighting against that monstrous barbarian tribe, who first acted as a peaceful friend ]] ..
2417-[[and then attacked my army in the darkest night?]]) .. paragraphdivider() ..
2418-_([[With an army of 150 men, I was assigned to patrol on our northern frontier, ]] ..
2419-[[which lies near the Galdin Mountains in a great, beautiful and ancient forest. ]] ..
2420-[[Soon, we met a barbarian tribe, which at first was friendly. A few of my men even traded with them ]] ..
2421-[[and their kids came to us, to admire our clean and tidy uniforms and weapons.]]) .. paragraphdivider() ..
2422-_([[But during our fifth night in that region, they attacked us with no reason. ]] ..
2423-[[I lost dozens of good men, and found myself imprisoned and brought to their chieftain. ]] ..
2424-[[He spat at me, mocked me and told me to leave this land forever. ]] ..
2425-[[He did not want new land and did not want our land, but he told me that THIS forest was their land]] ..
2426-[[ – and it would stay theirs until the ghosts took the last man of his folk!]]) .. paragraphdivider() ..
2427-_([[Three weeks later, I returned to Fremil to speak with our king. ]] ..
2428-[[He was furious at the Barbarians, yet forbade any attack on these tribes. ]] ..
2429-[[He believed that our army was too weak to survive in a war against the barbarians.]]) .. paragraphdivider() ..
2430-_([[Still, I saw no way that I could erase my shame without fighting against these barbarians. ]] ..
2431-[[So, I left Fremil by boat to find a new world and a new life for myself, somewhere in the south. ]] ..
2432-[[Now I am sailing on the perl-gulf with my family, some of my friends and a few of my best warriors.]])),
2433+ _([[What has become of our Empire? I really ask this question – why did my king forbid me from fighting against that monstrous barbarian tribe, who first acted as a peaceful friend and then attacked my army in the darkest night?]])
2434+ .. paragraphdivider() ..
2435+ _([[With an army of 150 men, I was assigned to patrol on our northern frontier, which lies near the Galdin Mountains in a great, beautiful and ancient forest. Soon, we met a barbarian tribe, which at first was friendly. A few of my men even traded with them and their kids came to us, to admire our clean and tidy uniforms and weapons.]])
2436+ .. paragraphdivider() ..
2437+ _([[But during our fifth night in that region, they attacked us with no reason. I lost dozens of good men, and found myself imprisoned and brought to their chieftain. He spat at me, mocked me and told me to leave this land forever. He did not want new land and did not want our land, but he told me that THIS forest was their land – and it would stay theirs until the ghosts took the last man of his folk!]])
2438+ .. paragraphdivider() ..
2439+ _([[Three weeks later, I returned to Fremil to speak with our king. He was furious at the Barbarians, yet forbade any attack on these tribes. He believed that our army was too weak to survive in a war against the barbarians.]])
2440+ .. paragraphdivider() ..
2441+ _([[Still, I saw no way that I could erase my shame without fighting against these barbarians. So, I left Fremil by boat to find a new world and a new life for myself, somewhere in the south. Now I am sailing on the perl-gulf with my family, some of my friends and a few of my best warriors.]])),
2442 w=500,
2443 posy=1,
2444 }
2445@@ -102,12 +93,9 @@
2446 diary_page_2 = {
2447 title=_"The Rough Sea",
2448 body= lutius(_"Diary of Lutius",
2449- _([[It seems as if sailing on the perl-gulf was one of our biggest mistakes. ]] ..
2450-[[Nature was against us and drove us into a dark, wild storm. ]] ..
2451-[[I really don’t know how many hours have passed since the waves rose higher than our boat, ]] ..
2452-[[but still it would be suicide to go outside.]]) .. paragraphdivider() ..
2453-_([[Our ship is badly damaged and is taking in more and more water. ]] ..
2454-[[We can thank the Gods if we survive this black night with our lives.]])),
2455+ _([[It seems as if sailing on the perl-gulf was one of our biggest mistakes. Nature was against us and drove us into a dark, wild storm. I really don’t know how many hours have passed since the waves rose higher than our boat, but still it would be suicide to go outside.]])
2456+ .. paragraphdivider() ..
2457+ _([[Our ship is badly damaged and is taking in more and more water. We can thank the Gods if we survive this black night with our lives.]])),
2458 w=400,
2459 posy=1,
2460 }
2461@@ -115,12 +103,11 @@
2462 diary_page_3 = {
2463 title=_"Survivor",
2464 body= lutius(_"Diary of Lutius",
2465- _([[Finally, the Gods were with us!]]) .. paragraphdivider() ..
2466-_([[We landed on an unknown coast and found peaceful rest under the palm trees growing at the shore. ]] ..
2467-[[But that is about as good as it gets. The truth is: when I woke up this morning, I saw nothing but sand around us.]]) ..
2468-paragraphdivider() ..
2469-_([[It really seems as if we have landed under the only palm trees existing in this far-away sandy desert. ]] ..
2470-[[I fear we won’t find the help we need to get our ship repaired in good time.]])),
2471+ _([[Finally, the Gods were with us!]])
2472+ .. paragraphdivider() ..
2473+ _([[We landed on an unknown coast and found peaceful rest under the palm trees growing at the shore. But that is about as good as it gets. The truth is: when I woke up this morning, I saw nothing but sand around us.]])
2474+ .. paragraphdivider() ..
2475+ _([[It really seems as if we have landed under the only palm trees existing in this far-away sandy desert. I fear we won’t find the help we need to get our ship repaired in good time.]])),
2476 w=400,
2477 posy=1,
2478 }
2479@@ -128,14 +115,12 @@
2480 saledus_1 = {
2481 title=_"A Foreboding",
2482 body= saledus(_"Saledus looks around nervously…",
2483- _([[Sire, I fear we are not safe in this foreign land. ]] ..
2484-[[Who knows what terrible creatures live beyond this forest, in that mighty desert? ]] ..
2485-[[What if these creatures enter the woods and await the time to attack us?]]) .. paragraphdivider() ..
2486-_([[Well, perhaps my fear is misguided, but it can’t be wrong to keep watch in the forests]] ..
2487-[[ – so that we can be sure to see any potential enemies before they can see us.]]) .. paragraphdivider() ..
2488-_([[We really should build a barracks in the eastern portion of the forest. ]] ..
2489-[[Then one of us can keep watch in the darkness and keep us safe from these creatures.]]))
2490-.. new_objectives(obj_build_barracks),
2491+ _([[Sire, I fear we are not safe in this foreign land. Who knows what terrible creatures live beyond this forest, in that mighty desert? What if these creatures enter the woods and await the time to attack us?]])
2492+ .. paragraphdivider() ..
2493+ _([[Well, perhaps my fear is misguided, but it can’t be wrong to keep watch in the forests – so that we can be sure to see any potential enemies before they can see us.]])
2494+ .. paragraphdivider() ..
2495+ _([[We really should build a barracks in the eastern portion of the forest. Then one of us can keep watch in the darkness and keep us safe from these creatures.]]))
2496+ .. new_objectives(obj_build_barracks),
2497 w=400,
2498 }
2499
2500@@ -143,87 +128,79 @@
2501 saledus_2 = {
2502 title=_"Safe For Now",
2503 body= saledus(_"Saledus speaks with a sigh of relief…",
2504- _([[Sire, I saw that the construction of the barracks was completed, ]] ..
2505-[[so I have assigned one of my best soldiers to it to keep watch on the desert.]]) .. paragraphdivider() ..
2506-_([[This is a good step forward. Now we can feel a bit safer and can look forward to repairing our ship.]])),
2507+ _([[Sire, I saw that the construction of the barracks was completed, so I have assigned one of my best soldiers to it to keep watch on the desert.]])
2508+ .. paragraphdivider() ..
2509+ _([[This is a good step forward. Now we can feel a bit safer and can look forward to repairing our ship.]])),
2510 w=400,
2511 }
2512
2513 amalea_1 = {
2514 title=_"Young Amalea",
2515 body= amalea(_"Amalea smiles…",
2516- _([[Hey Lutius, I just met Saledus outside.]]) .. paragraphdivider() ..
2517-_([[He told me about the barracks. Well, I am not one of those girls who think we need more barracks]] ..
2518-[[ – instead, we might concentrate on other things now.]]) .. paragraphdivider() ..
2519-_([[It is absolutely clear that we need wood to repair our ship. ]] ..
2520-[[So, I walked through the forest yesterday and found a nice place for a lumberjack’s house, ]] ..
2521-[[south of our provisional headquarters.]]))
2522-.. new_objectives(obj_build_lumberjack),
2523+ _([[Hey Lutius, I just met Saledus outside.]])
2524+ .. paragraphdivider() ..
2525+ _([[He told me about the barracks. Well, I am not one of those girls who think we need more barracks – instead, we might concentrate on other things now.]])
2526+ .. paragraphdivider() ..
2527+ _([[It is absolutely clear that we need wood to repair our ship. So, I walked through the forest yesterday and found a nice place for a lumberjack’s house, south of our provisional headquarters.]]))
2528+ .. new_objectives(obj_build_lumberjack),
2529 w=400,
2530 }
2531
2532 amalea_2 = {
2533 title=_"Young Amalea",
2534 body= amalea(_"Amalea recommends…",
2535- _([[Hey Lutius, I got the message that our first lumberjack has started his work today. ]] ..
2536-[[Perhaps it would be a good idea to wait until he cleans enough space for constructing two more lumberjack’s houses, ]] ..
2537-[[so that we can harvest the logs faster.]]) .. paragraphdivider() ..
2538-_([[But unfortunately the logs are useless for repairing our ship – we need refined lumber, ]] ..
2539-[[like every ship and every bigger building needs, too. ]] ..
2540-[[So we should build a sawmill – as soon as we have enough space for this.]]))
2541-.. new_objectives(obj_build_sawmill_and_lumberjacks),
2542+ _([[Hey Lutius, I got the message that our first lumberjack has started his work today. Perhaps it would be a good idea to wait until he cleans enough space for constructing two more lumberjack’s houses, so that we can harvest the logs faster.]])
2543+ .. paragraphdivider() ..
2544+ _([[But unfortunately the logs are useless for repairing our ship – we need refined lumber, like every ship and every bigger building needs, too. So we should build a sawmill – as soon as we have enough space for this.]]))
2545+ .. new_objectives(obj_build_sawmill_and_lumberjacks),
2546 w=400,
2547 }
2548
2549 amalea_3 = {
2550 title=_"Young Amalea",
2551 body= amalea(_"Amalea comes in…",
2552- _([[Hi Lutius, I’ve got two important things to talk about… First the good news:]]) .. paragraphdivider() ..
2553-_([[I noticed that the construction of the sawmill is complete, ]] ..
2554-[[so we can begin to refine the logs that the lumberjacks are harvesting into lumber.]]) .. paragraphdivider() ..
2555-_([[But that’s just about the only positive thing I know to talk about. ]] ..
2556-[[The bad news is that our lumberjacks harvest at an incredible speed. ]] ..
2557-[[There are almost no trees left on this island.]]) .. paragraphdivider() ..
2558-_([[Lutius, these trees provide shelter from the sandstorms that sweep in from the desert ]] ..
2559-[[and shade on the hot days, and they are the home of so many gentle animals. ]] ..
2560-[[We shouldn’t leave this island a complete desert.]]) .. paragraphdivider() ..
2561-_([[Lutius, I beg you: find someone who takes care of planting new trees.]]))
2562-.. new_objectives(obj_build_forester),
2563+ _([[Hi Lutius, I’ve got two important things to talk about… First the good news:]])
2564+ .. paragraphdivider() ..
2565+ _([[I noticed that the construction of the sawmill is complete, so we can begin to refine the logs that the lumberjacks are harvesting into lumber.]])
2566+ .. paragraphdivider() ..
2567+ _([[But that’s just about the only positive thing I know to talk about. The bad news is that our lumberjacks harvest at an incredible speed. There are almost no trees left on this island.]])
2568+ .. paragraphdivider() ..
2569+ _([[Lutius, these trees provide shelter from the sandstorms that sweep in from the desert and shade on the hot days, and they are the home of so many gentle animals. We shouldn’t leave this island a complete desert.]])
2570+ .. paragraphdivider() ..
2571+ _([[Lutius, I beg you: find someone who takes care of planting new trees.]]))
2572+ .. new_objectives(obj_build_forester),
2573 w=400,
2574 }
2575
2576 saledus_3 = {
2577 title=_"Thinking About the Future",
2578 body= saledus(_"Saledus notes…",
2579- _([[Hey, my good old friend. I just thought about the rocks standing on the south shore of this land. ]] ..
2580-[[Perhaps we could cut out some useful hard stones and beautiful marble.]]) .. paragraphdivider() ..
2581-_([[The repair of our ship will take a few weeks, anyway, and the resources we harvest now ]] ..
2582-[[might be the base of strong and big buildings in another land.]]))
2583-.. new_objectives(obj_build_quarry),
2584+ _([[Hey, my good old friend. I just thought about the rocks standing on the south shore of this land. Perhaps we could cut out some useful hard stones and beautiful marble.]])
2585+ .. paragraphdivider() ..
2586+ _([[The repair of our ship will take a few weeks, anyway, and the resources we harvest now might be the base of strong and big buildings in another land.]]))
2587+ .. new_objectives(obj_build_quarry),
2588 w=400,
2589 }
2590
2591 saledus_4 = {
2592 title=_"A Step Forward",
2593 body= saledus(_"Saledus looks promising…",
2594- _([[Hey Lutius, today we got a lot closer to our first castle. ]] ..
2595-[[The quarry to the south began its work today and will soon provide us with stones and beautiful marble.]]) .. paragraphdivider() ..
2596-_([[Now we truly can look forward to settling down on another island.]])),
2597+ _([[Hey Lutius, today we got a lot closer to our first castle. The quarry to the south began its work today and will soon provide us with stones and beautiful marble.]])
2598+ .. paragraphdivider() ..
2599+ _([[Now we truly can look forward to settling down on another island.]])),
2600 w=400,
2601 }
2602
2603 diary_page_4 = {
2604 title=_"Mission Complete",
2605- body= lutius(
2606-_([[Today I got the message that our ship is completely repaired. ]] ..
2607-[[At the moment, my people are loading everything onto our newly repaired ship, ]] ..
2608-[[hoping it will serve us better than last time.]]) .. paragraphdivider() ..
2609-_([[Tonight will be our last night on this island. ]] ..
2610-[[Tomorrow morning we will leave, searching for a new place for our exile.]]) .. paragraphdivider() ..
2611-_([[I still wonder if we will ever see Fremil again.]])) ..
2612- objective_text(_"Victory", _
2613-[[You have completed this mission. You may continue playing if you wish, otherwise move on to the next mission.]]
2614- ),
2615+ body= lutius(_"Diary of Lutius",
2616+ _([[Today I got the message that our ship is completely repaired. At the moment, my people are loading everything onto our newly repaired ship, hoping it will serve us better than last time.]])
2617+ .. paragraphdivider() ..
2618+ _([[Tonight will be our last night on this island. Tomorrow morning we will leave, searching for a new place for our exile.]])
2619+ .. paragraphdivider() ..
2620+ _([[I still wonder if we will ever see Fremil again.]]))
2621+ .. objective_text(_"Victory",
2622+ _[[You have completed this mission. You may continue playing if you wish, otherwise move on to the next mission.]]),
2623 posy=1
2624 }
2625
2626
2627=== modified file 'campaigns/emp02.wmf/scripting/init.lua'
2628--- campaigns/emp02.wmf/scripting/init.lua 2014-03-25 06:18:48 +0000
2629+++ campaigns/emp02.wmf/scripting/init.lua 2014-10-31 11:37:25 +0000
2630@@ -4,8 +4,8 @@
2631 set_textdomain("scenario_emp02.wmf")
2632
2633 include "scripting/coroutine.lua"
2634+include "scripting/infrastructure.lua"
2635 include "scripting/objective_utils.lua"
2636-include "scripting/infrastructure.lua"
2637 include "scripting/table.lua"
2638 include "scripting/ui.lua"
2639
2640@@ -15,15 +15,4 @@
2641
2642 include "map:scripting/starting_conditions.lua"
2643 include "map:scripting/texts.lua"
2644-
2645--- Some messages that spare some typing
2646-function send_msg(msg)
2647- if not msg.h then msg.h = 400 end
2648- if not msg.w then msg.w = 450 end
2649- p1:message_box(msg.title, msg.body, msg)
2650-end
2651-function add_obj(t)
2652- return p1:add_objective(t.name, t.title, t.body)
2653-end
2654-
2655 include "map:scripting/mission_thread.lua"
2656
2657=== modified file 'campaigns/emp02.wmf/scripting/mission_thread.lua'
2658--- campaigns/emp02.wmf/scripting/mission_thread.lua 2014-10-17 08:38:24 +0000
2659+++ campaigns/emp02.wmf/scripting/mission_thread.lua 2014-10-31 11:37:25 +0000
2660@@ -1,9 +1,12 @@
2661 -- =======================================================================
2662 -- Mission Threads
2663 -- =======================================================================
2664+
2665+include "scripting/messages.lua"
2666+
2667 function building_materials()
2668 sleep(200)
2669- send_msg(diary_page_5)
2670+ campaign_message_box(diary_page_5)
2671
2672 local map = wl.Game().map
2673 local forests = map:get_field(17,10)
2674@@ -12,10 +15,10 @@
2675 run(function() sleep(5000) p1:hide_fields(forests:region(6)) end)
2676
2677 -- Show the trees
2678- scroll_smoothly_to(forests)
2679+ wait_for_roadbuilding_and_scroll(forests)
2680
2681- send_msg(diary_page_5_1)
2682- local o_woodeconomy = add_obj(obj_build_woodeconomy)
2683+ campaign_message_box(diary_page_5_1)
2684+ local o_woodeconomy = add_campaign_objective(obj_build_woodeconomy)
2685 -- Check for completing of the woodeconomy
2686 run(function()
2687 while not check_for_buildings(p1, {
2688@@ -24,21 +27,21 @@
2689 sawmill = 1,
2690 }) do sleep(2342) end
2691
2692- send_msg(diary_page_6)
2693+ campaign_message_box(diary_page_6)
2694 o_woodeconomy.done = true
2695 end)
2696
2697
2698 -- Show the stones
2699- scroll_smoothly_to(map:get_field(14,25))
2700- send_msg(diary_page_5_2)
2701- local o_quarry = add_obj(obj_build_quarry)
2702+ wait_for_roadbuilding_and_scroll(map:get_field(14,25))
2703+ campaign_message_box(diary_page_5_2)
2704+ local o_quarry = add_campaign_objective(obj_build_quarry)
2705 -- Check for completeness of the quarry
2706 run(function()
2707 while not check_for_buildings(p1, {quarry=1}) do sleep(3423) end
2708 o_quarry.done = true
2709
2710- send_msg(diary_page_7)
2711+ campaign_message_box(diary_page_7)
2712 end)
2713 end
2714
2715@@ -58,7 +61,7 @@
2716 sleep(2344)
2717 end
2718
2719- send_msg(amalea_1)
2720+ campaign_message_box(amalea_1)
2721 p1:allow_buildings{
2722 "well",
2723 "farm",
2724@@ -73,12 +76,12 @@
2725 "inn",
2726 "fishers_house",
2727 }
2728- local o = add_obj(obj_build_Food_infrastructure)
2729+ local o = add_campaign_objective(obj_build_food_infrastructure)
2730
2731 -- Run easter egg: Amalea says something when Tavern is done
2732 run(function()
2733 while #p1:get_buildings("tavern") < 1 do sleep(2349) end
2734- send_msg(amalea_2)
2735+ campaign_message_box(amalea_2)
2736 end)
2737
2738 while true do
2739@@ -116,9 +119,9 @@
2740 end)
2741
2742 local move_point = wl.Game().map:get_field(49,22)
2743- scroll_smoothly_to(move_point)
2744+ wait_for_roadbuilding_and_scroll(move_point)
2745
2746- send_msg(saledus_3)
2747+ campaign_message_box(saledus_3)
2748 p1:allow_buildings{
2749 "coalmine",
2750 "deep_coalmine",
2751@@ -132,7 +135,7 @@
2752 "charcoal_kiln",
2753 }
2754
2755- local o = add_obj(obj_build_mining_infrastructure)
2756+ local o = add_campaign_objective(obj_build_mining_infrastructure)
2757 -- Wait for the infrastructure to come up
2758 while true do
2759 local rv = p1:get_buildings{
2760@@ -168,10 +171,10 @@
2761 run(function() sleep(10000) p1:hide_fields(shipparts:region(5)) end)
2762
2763 -- Move to the shipparts
2764- local pts = scroll_smoothly_to(shipparts)
2765+ local pts = wait_for_roadbuilding_and_scroll(shipparts)
2766
2767- send_msg(saledus_1)
2768- local o = add_obj(obj_build_military_buildings)
2769+ campaign_message_box(saledus_1)
2770+ local o = add_campaign_objective(obj_build_military_buildings)
2771 p1:allow_buildings{"barracks", "sentry"}
2772
2773 -- Go back to where we were
2774@@ -186,11 +189,11 @@
2775 p1:reveal_fields(marblemountains:region(5))
2776 run(function() sleep(10000) p1:hide_fields(marblemountains:region(5)) end)
2777
2778- pts = scroll_smoothly_to(marblemountains)
2779+ pts = wait_for_roadbuilding_and_scroll(marblemountains)
2780
2781- send_msg(saledus_2)
2782+ campaign_message_box(saledus_2)
2783 p1:allow_buildings{"marblemine", "deep_marblemine"}
2784- o = add_obj(obj_build_marblemine)
2785+ o = add_campaign_objective(obj_build_marblemine)
2786 run(function() while not check_for_buildings(p1, {marblemine = 1})
2787 do sleep(2133) end o.done = true end)
2788
2789@@ -220,10 +223,10 @@
2790 )
2791 p1:reveal_fields(barbarians)
2792 run(function() sleep(5000) p1:hide_fields(barbarians) end)
2793- scroll_smoothly_to(wl.Game().map:get_field(59, 55))
2794+ wait_for_roadbuilding_and_scroll(wl.Game().map:get_field(59, 55))
2795
2796- send_msg(diary_page_8)
2797- local o = add_obj(obj_build_bigger_military_buildings)
2798+ campaign_message_box(diary_page_8)
2799+ local o = add_campaign_objective(obj_build_bigger_military_buildings)
2800 p1:allow_buildings{"outpost", "barrier", "tower"}
2801 p2:allow_buildings{"quarry"}
2802
2803@@ -241,10 +244,10 @@
2804 while not mining_infrastructure_done do
2805 sleep(2343)
2806 end
2807- send_msg(diary_page_9)
2808+ campaign_message_box(diary_page_9)
2809 p1:allow_buildings{"fortress"}
2810
2811- o = add_obj(obj_remove_the_barbarians)
2812+ o = add_campaign_objective(obj_remove_the_barbarians)
2813 -- Wait for the fortress to come up
2814 while not check_for_buildings(p1, {fortress=1},
2815 wl.Game().map:get_field(60,65):region(6))
2816@@ -253,9 +256,9 @@
2817 o.done = true
2818
2819 -- Show victory message
2820- send_msg(diary_page_10)
2821- send_msg(seven_days_later)
2822- send_msg(diary_page_11)
2823+ campaign_message_box(diary_page_10)
2824+ campaign_message_box(seven_days_later)
2825+ campaign_message_box(diary_page_11)
2826
2827 p1:reveal_campaign("campsect2")
2828 p1:reveal_scenario("empiretut02")
2829
2830=== modified file 'campaigns/emp02.wmf/scripting/texts.lua'
2831--- campaigns/emp02.wmf/scripting/texts.lua 2014-10-18 07:37:16 +0000
2832+++ campaigns/emp02.wmf/scripting/texts.lua 2014-10-31 11:37:25 +0000
2833@@ -68,7 +68,7 @@
2834 ),
2835 }
2836
2837-obj_build_Food_infrastructure = {
2838+obj_build_food_infrastructure = {
2839 name = "build_food_infrastructure",
2840 title =_"Provide your miners with food",
2841 number = 1,
2842@@ -107,43 +107,38 @@
2843 title =_ "A New Island",
2844 posy= 1,
2845 body = lutius(_"Diary of Lutius",
2846-_([[Finally! This island appears to have been made for us, it is a gift from the Gods to my people and myself. ]] ..
2847-[[Until now, we have only seen a small part of this island, but this part alone is already bringing sunlight to my mind. ]] ..
2848-[[I feel as if we have found a priceless treasure, a land like paradise.]]) .. paragraphdivider() ..
2849-_([[On this island, we will start our new life. ]] ..
2850-[[We will build up an outpost for our exile, which perhaps will become a new, beautiful home for every one of us.]])),
2851+ _([[Finally! This island appears to have been made for us, it is a gift from the Gods to my people and myself. Until now, we have only seen a small part of this island, but this part alone is already bringing sunlight to my mind. I feel as if we have found a priceless treasure, a land like paradise.]])
2852+ .. paragraphdivider() ..
2853+ _([[On this island, we will start our new life. We will build up an outpost for our exile, which perhaps will become a new, beautiful home for every one of us.]])),
2854 }
2855
2856 diary_page_5_1 = {
2857 title =_ "The Green Forests",
2858 posy = 1,
2859 body= lutius(_"Diary of Lutius",
2860-_([[As Saledus and I walked through these wonderful forests in the north, we felt that our future had just begun. ]] ..
2861-[[This land is so peaceful, good and beautiful, I could stay here until the end of my life.]]) .. paragraphdivider() ..
2862-_([[But until that day, may many years pass! For now, we must concentrate on the present, ]] ..
2863-[[and build a few lumberjack’s houses and a sawmill to produce some basic building materials.]]) .. paragraphdivider() ..
2864-_([[But we shouldn’t forget to preserve this natural bounty. ]] ..
2865-[[These forests should last forever, so we really should build a forester’s house too.]]))
2866-.. new_objectives(obj_build_woodeconomy),
2867+ _([[As Saledus and I walked through these wonderful forests in the north, we felt that our future had just begun. This land is so peaceful, good and beautiful, I could stay here until the end of my life.]])
2868+ .. paragraphdivider() ..
2869+ _([[But until that day, may many years pass! For now, we must concentrate on the present, and build a few lumberjack’s houses and a sawmill to produce some basic building materials.]])
2870+ .. paragraphdivider() ..
2871+ _([[But we shouldn’t forget to preserve this natural bounty. These forests should last forever, so we really should build a forester’s house too.]]))
2872+ .. new_objectives(obj_build_woodeconomy)
2873 }
2874
2875 diary_page_5_2 = {
2876 title =_ "The Rocks",
2877 posy = 1,
2878 body= lutius(_"Diary of Lutius",
2879-_([[Later, I walked down to the rocks in the south and looked for a place where we could build a quarry ]] ..
2880-[[to get some hard stone for our larger buildings.]]) .. paragraphdivider() ..
2881-_([[Again, I felt like I was in paradise when I noticed that some marble-like stones were among the rocks. ]] ..
2882-[[It seems that we will soon be able to build strong, luxurious buildings, like those we were accustomed to in Fremil.]]))
2883-.. new_objectives(obj_build_quarry),
2884+ _([[Later, I walked down to the rocks in the south and looked for a place where we could build a quarry to get some hard stone for our larger buildings.]])
2885+ .. paragraphdivider() ..
2886+ _([[Again, I felt like I was in paradise when I noticed that some marble-like stones were among the rocks. It seems that we will soon be able to build strong, luxurious buildings, like those we were accustomed to in Fremil.]]))
2887+ .. new_objectives(obj_build_quarry)
2888 }
2889
2890 diary_page_6 = {
2891 title =_ "Wood for the Colony",
2892 posy=1,
2893 body= lutius(_"Diary of Lutius",
2894-_([[Good news! Today our wood economy was completed. ]] ..
2895-[[Now we can be sure that we will have enough wood for our future building projects.]])),
2896+ _([[Good news! Today our wood economy was completed. Now we can be sure that we will have enough wood for our future building projects.]]))
2897 }
2898
2899 diary_page_7 = {
2900@@ -157,89 +152,86 @@
2901 title =_ "Dangerous Ship Parts",
2902 posy = 1,
2903 body= saledus(_"Saledus looks unhappy",
2904-_([[Greetings Lutius, I don’t want to start a panic, ]] ..
2905-[[but I found something which gives me a sinking feeling in my stomach and spreads waves of fear in my heart. ]] ..
2906-[[As I walked down to the southern shore, I found the remains of another ship. ]] ..
2907-[[I don’t know whether these parts are all that is left of that ship. ]] ..
2908-[[In any case, these parts do not seem to be old.]]) .. paragraphdivider() ..
2909-_([[Perhaps the people aboard that ship were caught in the same storm which brought us to Malac’ Mor]] ..
2910-[[ – and were brought to this island.]]) .. paragraphdivider() ..
2911-_([[I beg you to be cautious and to build some barracks or sentries around our colony.]]))
2912-.. new_objectives(obj_build_military_buildings),
2913+ _([[Greetings Lutius, I don’t want to start a panic, but I found something which gives me a sinking feeling in my stomach and spreads waves of fear in my heart. As I walked down to the southern shore, I found the remains of another ship. I don’t know whether these parts are all that is left of that ship. In any case, these parts do not seem to be old.]])
2914+ .. paragraphdivider() ..
2915+ _([[Perhaps the people aboard that ship were caught in the same storm which brought us to Malac’ Mor – and were brought to this island.]])
2916+ .. paragraphdivider() ..
2917+ _([[I beg you to be cautious and to build some barracks or sentries around our colony.]]))
2918+ .. new_objectives(obj_build_military_buildings)
2919 }
2920
2921 saledus_2 = {
2922 title =_ "Marble on the Mountain",
2923 body= saledus(_"Saledus smiles",
2924-_([[Lutius, I’ve got good news for you: As I walked to the east, I found a larger mountain. I am not absolutely sure – a geologist should check if I am right – but I believe we could mine marble from some places on the mountain.]])
2925-.. paragraphdivider() ..
2926-_([[It would be a good source for bolstering our supply of quality marble, ]] ..
2927-[[beyond the meager quantities available from the quarry. ]] ..
2928-[[Perhaps you were right when you said that this island was like paradise.]]) .. paragraphdivider() ..
2929-_([[Let us expand to that mountain and start mining marble.]]))
2930-.. new_objectives(obj_build_marblemine),
2931+ _([[Lutius, I’ve got good news for you: As I walked to the east, I found a larger mountain. I am not absolutely sure – a geologist should check if I am right – but I believe we could mine marble from some places on the mountain.]])
2932+ .. paragraphdivider() ..
2933+ _([[It would be a good source for bolstering our supply of quality marble, beyond the meager quantities available from the quarry. Perhaps you were right when you said that this island was like paradise.]])
2934+ .. paragraphdivider() ..
2935+ _([[Let us expand to that mountain and start mining marble.]]))
2936+ .. new_objectives(obj_build_marblemine)
2937 }
2938
2939 saledus_3 = {
2940 title =_ "Further Mountains",
2941 body= saledus(_"Saledus is amazed",
2942-_([[By the Gods, this is an unbelievable stroke of fortune! ]] ..
2943-[[There are two more mountains, and it seems that one has a large quantity of coal and the other of iron ore. ]] ..
2944-[[We should immediately start to build iron ore and coal mines (or at least charcoal kilns), ]] ..
2945-[[smelting works, toolsmithies, armor and weapon smithies.]]) .. paragraphdivider() ..
2946-_([[However: for all these bigger buildings, we need better and more elegant building materials. ]] ..
2947-[[So, let’s build a stonemason, who will cut columns from marble.]]) .. paragraphdivider() ..
2948-_([[After everything, we can now begin to live like we did in Fremil.]]))
2949-.. new_objectives(obj_build_mining_infrastructure),
2950+ _([[By the Gods, this is an unbelievable stroke of fortune! There are two more mountains, and it seems that one has a large quantity of coal and the other of iron ore. We should immediately start to build iron ore and coal mines (or at least charcoal kilns), smelting works, toolsmithies, armor and weapon smithies.]])
2951+ .. paragraphdivider() ..
2952+ _([[However: for all these bigger buildings, we need better and more elegant building materials. So, let’s build a stonemason, who will cut columns from marble.]])
2953+ .. paragraphdivider() ..
2954+ _([[After everything, we can now begin to live like we did in Fremil.]]))
2955+ .. new_objectives(obj_build_mining_infrastructure)
2956 }
2957
2958 amalea_1 = {
2959 title =_ "Food for the Miners",
2960- body= amalea(_"Amalea comes in…",
2961-_([[Hi Lutius, I hope you forgive my criticism, but it seems to me as if you forgot something.]]) .. paragraphdivider() ..
2962-_([[It’s nice, and of course a good idea, to build up mines, which will give us a more comfortable life, ]] ..
2963-[[but the people working in the mines are unhappy with the current situation. ]] ..
2964-[[They have to do hard work and have no time for making their own food.]]) .. paragraphdivider() ..
2965-_([[What do you think about helping them out? ]] ..
2966-[[I can’t tell you what we need exactly… but here are my recommendations:]]))
2967-.. new_objectives(obj_build_Food_infrastructure),
2968+ body= amalea(_"Amalea enters…",
2969+ _([[Hi Lutius, I hope you forgive my criticism, but it seems to me as if you forgot something.]])
2970+ .. paragraphdivider() ..
2971+ _([[It’s nice, and of course a good idea, to build up mines, which will give us a more comfortable life, but the people working in the mines are unhappy with the current situation. They have to do hard work and have no time for making their own food.]])
2972+ .. paragraphdivider() ..
2973+ _([[What do you think about helping them out? I can’t tell you what we need exactly… but here are my recommendations:]]))
2974+ .. new_objectives(obj_build_Food_infrastructure)
2975+}
2976+
2977+amalea_2 = {
2978+ title =_ "Our New Tavern",
2979+ body= amalea(_"Amalea smiles",
2980+ _([[Greetings, my friend, I just visited our new tavern ‘At the palms’. The beer they serve is really tasty. You really should have a drink there, too.]])
2981+ .. paragraphdivider() ..
2982+ _([[It is good to see that we have now got a warmer and more familiar environment on our island. Thank you, Lutius.]]))
2983 }
2984
2985 diary_page_8 = {
2986 title =_ "The Barbarians",
2987 posy=1,
2988 body= lutius(_"Diary of Lutius",
2989-_([[By the Gods! This is absolutely terrible. It seems as if we stand close to a test]] ..
2990-[[ – and it seems as if Saledus was right with his fear concerning the shipwreck he found.]]) .. paragraphdivider() ..
2991-_([[Today, as I walked down to the eastern shore, I got a shock. ]] ..
2992-[[I caught sight of one of those hated, evil, barbarian tribes with whom we have had so many problems before.]])
2993-.. paragraphdivider() ..
2994-_([[At first, I was naive and hoped that they were peaceful, but as soon as one of them saw me, ]] ..
2995-[[they charged towards me and started attacking me with their throwing-spears. Thanks be to the Gods ]] ..
2996-[[that I was able to flee and hide myself, before retreating back to our colony under cover of darkness.]])
2997-.. paragraphdivider() ..
2998-_([[Anyway, we must build up stronger military buildings as soon as possible.]]))
2999-.. new_objectives(obj_build_bigger_military_buildings),
3000+ _([[By the Gods! This is absolutely terrible. It seems as if we stand close to a test – and it seems as if Saledus was right with his fear concerning the shipwreck he found.]])
3001+ .. paragraphdivider() ..
3002+ _([[Today, as I walked down to the eastern shore, I got a shock. I caught sight of one of those hated, evil, barbarian tribes with whom we have had so many problems before.]])
3003+ .. paragraphdivider() ..
3004+ _([[At first, I was naive and hoped that they were peaceful, but as soon as one of them saw me, they charged towards me and started attacking me with their throwing-spears. Thanks be to the Gods that I was able to flee and hide myself, before retreating back to our colony under cover of darkness.]])
3005+ .. paragraphdivider() ..
3006+ _([[Anyway, we must build up stronger military buildings as soon as possible.]]))
3007+ .. new_objectives(obj_build_bigger_military_buildings)
3008 }
3009
3010 diary_page_9 = {
3011 title =_ "Command to Attack",
3012 posy=1,
3013 body= lutius(_"Diary of Lutius",
3014-_([[That’s good. The first large military building is complete and the mining infrastructure is getting better and better. ]] ..
3015-[[Now we should think about preparing ourselves for battle.]]))
3016-.. new_objectives(obj_remove_the_barbarians),
3017+ _([[That’s good. The first large military building is complete and the mining infrastructure is getting better and better. Now we should think about preparing ourselves for battle.]]))
3018+ .. new_objectives(obj_remove_the_barbarians)
3019 }
3020
3021 diary_page_10 = {
3022 title =_ "Victory",
3023 posy=1,
3024- body= lutius(
3025-_([[Today is a proud day. We have fought for our new home and risen victorious.]]) .. paragraphdivider() ..
3026-_([[There are still a few barbarians hiding on our island, but I am sure that we will find them soon. Every barbarian who doesn’t attack us will be put in a boat with the other peaceful ones, and sent back to their country.]]))
3027-.. objective_text(_"Victory",
3028- _[[You have established a working economy, trained new soldiers and driven the barbarians from the island.]]
3029-),
3030+ body= lutius(_"Diary of Lutius",
3031+ _([[Today is a proud day. We have fought for our new home and risen victorious.]])
3032+ .. paragraphdivider() ..
3033+ _([[There are still a few barbarians hiding on our island, but I am sure that we will find them soon. Every barbarian who doesn’t attack us will be put in a boat with the other peaceful ones, and sent back to their country.]]))
3034+ .. objective_text(_"Victory",
3035+ _[[You have established a working economy, trained new soldiers and driven the barbarians from the island.]])
3036 }
3037
3038 seven_days_later = {
3039@@ -253,16 +245,9 @@
3040 title =_ "A Message",
3041 posy=1,
3042 body= lutius(_"Diary of Lutius",
3043-_([[Today a pigeon landed on our island. ]] ..
3044-[[It brought a message which fills me with dark thoughts and brings back my fears.]]) .. paragraphdivider() ..
3045-_([[The message was addressed to me, begging me to come back to Fremil. It says that the Empire is at war with the Barbarians. They were attacked from the north by the tribe that I was forbidden to attack. It is clear to me what I must do…]]) .. paragraphdivider() ..
3046-_([[You have completed this mission. You may continue playing if you wish, otherwise move on to the next mission.]])),
3047-}
3048-
3049-amalea_2 = {
3050- title =_ "Our New Tavern",
3051- body= amalea(_"Amalea smiles",
3052-_([[Greetings, my friend, I just visited our new tavern ‘At the palms’. ]] ..
3053-[[The beer they serve is really tasty. You really should have a drink there, too.]]) .. paragraphdivider() ..
3054-_([[It is good to see that we have now got a warmer and more familiar environment on our island. Thank you, Lutius.]])),
3055+ _([[Today a pigeon landed on our island. It brought a message which fills me with dark thoughts and brings back my fears.]])
3056+ .. paragraphdivider() ..
3057+ _([[The message was addressed to me, begging me to come back to Fremil. It says that the Empire is at war with the Barbarians. They were attacked from the north by the tribe that I was forbidden to attack. It is clear to me what I must do…]])
3058+ .. paragraphdivider() ..
3059+ _([[You have completed this mission. You may continue playing if you wish, otherwise move on to the next mission.]]))
3060 }
3061
3062=== modified file 'maps/MP Scenarios/Island Hopping.wmf/scripting/multiplayer_init.lua'
3063--- maps/MP Scenarios/Island Hopping.wmf/scripting/multiplayer_init.lua 2014-08-26 17:25:00 +0000
3064+++ maps/MP Scenarios/Island Hopping.wmf/scripting/multiplayer_init.lua 2014-10-31 11:37:25 +0000
3065@@ -2,8 +2,9 @@
3066 -- Island Hopping Fun Map Scripting
3067 -- =================================
3068 include "scripting/coroutine.lua"
3069+include "scripting/formatting.lua"
3070 include "scripting/infrastructure.lua"
3071-include "scripting/formatting.lua"
3072+include "scripting/messages.lua"
3073 include "scripting/objective_utils.lua"
3074
3075 -- ==========
3076@@ -95,7 +96,7 @@
3077 -- Sends a game status message to all players
3078 function send_to_all(text)
3079 for idx,plr in ipairs(game.players) do
3080- plr:send_message(_ "Game Status", text, {popup=true})
3081+ send_message(plr, _ "Game Status", text, {popup=true})
3082 end
3083 end
3084
3085
3086=== modified file 'maps/MP Scenarios/Smugglers.wmf/scripting/multiplayer_init.lua'
3087--- maps/MP Scenarios/Smugglers.wmf/scripting/multiplayer_init.lua 2014-08-26 17:25:00 +0000
3088+++ maps/MP Scenarios/Smugglers.wmf/scripting/multiplayer_init.lua 2014-10-31 11:37:25 +0000
3089@@ -116,7 +116,7 @@
3090 function setup_statistics_hook()
3091 if hooks == nil then hooks = {} end
3092 hooks.custom_statistic = {
3093- name = _ "Wares Smuggled",
3094+ name = _"Wares Smuggled",
3095 pic = "map:genstats_wares_smuggled.png",
3096 calculator = function(p)
3097 return points[p.team]
3098
3099=== modified file 'maps/MP Scenarios/Smugglers.wmf/scripting/smuggling.lua'
3100--- maps/MP Scenarios/Smugglers.wmf/scripting/smuggling.lua 2014-07-27 16:43:42 +0000
3101+++ maps/MP Scenarios/Smugglers.wmf/scripting/smuggling.lua 2014-10-31 11:37:25 +0000
3102@@ -2,6 +2,8 @@
3103 -- Smuggling logic
3104 -- =======================================================================
3105
3106+include "scripting/messages.lua"
3107+
3108 -- =================
3109 -- Helper functions
3110 -- =================
3111@@ -91,13 +93,13 @@
3112 )
3113 for idx,plr in ipairs(game.players) do
3114 if plr.number ~= receiving_wh.owner.number and plr.number ~= sending_wh.owner.number then
3115- plr:send_message(_ "Game Status", non_team_message, {popup=true})
3116+ send_message(plr, _"Game Status", non_team_message, {popup=true})
3117 end
3118 end
3119- receiving_wh.owner:send_message(_ "Game Status",
3120+ send_message(receiving_wh.owner, _"Game Status",
3121 smuggling_route_established_receiver:format(points), {popup=true, field=receiving_wh.fields[1]}
3122 )
3123- sending_wh.owner:send_message(_ "Game Status",
3124+ send_message(sending_wh.owner, _"Game Status",
3125 smuggling_route_established_sender:format(points), {popup=true, field=sending_wh.fields[1]}
3126 )
3127
3128
3129=== modified file 'maps/MP Scenarios/Smugglers.wmf/scripting/texts.lua'
3130--- maps/MP Scenarios/Smugglers.wmf/scripting/texts.lua 2014-07-15 18:30:46 +0000
3131+++ maps/MP Scenarios/Smugglers.wmf/scripting/texts.lua 2014-10-31 11:37:25 +0000
3132@@ -4,52 +4,38 @@
3133 welcome_msg = rt(
3134 h1(_"Smugglers") ..
3135 h2(_"Rules") ..
3136- p(_(
3137-[[Smugglers is a fun map for 4 players. You and your partner start diagonally from each other on a point symmetric island. ]] ..
3138-[[There are plenty of smuggling tunnels on this island, each consisting of a receiving and a sending end. ]])
3139-.. _(
3140-[[To establish a smuggling route, you need to build a warehouse on a sending/receiving spot ]] ..
3141-[[while your team mate has to build one on the corresponding receiving/sending spot. ]] ..
3142-[[A ware is then transported every 10 seconds. ]]) ..
3143+ p(_([[Smugglers is a fun map for 4 players. You and your partner start diagonally from each other on a point symmetric island. There are plenty of smuggling tunnels on this island, each consisting of a receiving and a sending end. ]]) ..
3144+ _([[To establish a smuggling route, you need to build a warehouse on a sending/receiving spot while your team mate has to build one on the corresponding receiving/sending spot. A ware is then transported every 10 seconds. ]]) ..
3145 -- TRANSLATORS: %s = '<number> points'
3146-_([[For harder to defend smuggling routes, you get 2 or 3 points per ware smuggled. The first team to collect %s wins.]]
3147-)) ..
3148- rt("image=map:send_spot.png", p(_"A sending spot")) ..
3149- rt("image=map:recv_spot.png", p(_"A receiving spot")) ..
3150-rt(
3151- p(_(
3152-[[Remember that the map has rotational symmetry. ]] ..
3153-[[For example, when you have found a spot to the top-left of your headquarters, ]] ..
3154-[[the corresponding spot will be to the bottom-right of the headquarters of your team mate.]])
3155-)) .. p(_(
3156-[[You can see the number of wares traded at any time in the general statistics menu. Good luck!]]
3157-)))
3158+ _([[For harder to defend smuggling routes, you get 2 or 3 points per ware smuggled. The first team to collect %s wins.]])) ..
3159+ rt(h2(_"A sending spot")) .. rt("image=map:send_spot.png", p(" ")) ..
3160+ rt(h2(_"A receiving spot")) .. rt("image=map:recv_spot.png", p(" ")) ..
3161+ rt(h2(_"Notes") ..
3162+ p(_([[Remember that the map has rotational symmetry. For example, when you have found a spot to the top-left of your headquarters, the corresponding spot will be to the bottom-right of the headquarters of your team mate.]]))) ..
3163+ p(_([[You can see the number of wares traded at any time in the general statistics menu. Good luck!]])))
3164
3165+smuggling_route_established_other_team = rt(
3166 -- TRANSLATORS: the first 2 parameters are player names, the last parameter is '<number> points'
3167-smuggling_route_established_other_team = rt(p(_(
3168-[[A new smuggling route from %1$s to %2$s has been established! ]] ..
3169-[[Every ware they smuggle there is worth %3$s.]]
3170-)))
3171--- TRANSLATORS: %s = '<number> points'
3172-smuggling_route_established_sender = rt(p(_(
3173-[[Your team has established a new smuggling route. You have the sending warehouse. ]] ..
3174-[[Every ware smuggled here is worth %s.]]
3175-)))
3176--- TRANSLATORS: %s = '<number> points'
3177-smuggling_route_established_receiver = rt(p(_(
3178-[[Your team has established a new smuggling route. You have the receiving warehouse. ]] ..
3179-[[Every ware smuggled here is worth %s.]]
3180-)))
3181-
3182+ p(_([[A new smuggling route from %1$s to %2$s has been established! Every ware they smuggle there is worth %3$s.]]))
3183+ )
3184+
3185+smuggling_route_established_sender = rt(
3186+-- TRANSLATORS: %s = '<number> points'
3187+ p(_([[Your team has established a new smuggling route. You have the sending warehouse. Every ware smuggled here is worth %s.]]))
3188+ )
3189+
3190+smuggling_route_established_receiver = rt(
3191+-- TRANSLATORS: %s = '<number> points'
3192+ p(_([[Your team has established a new smuggling route. You have the receiving warehouse. Every ware smuggled here is worth %s.]]))
3193+ )
3194+
3195+smuggling_route_broken = rt(
3196 -- TRANSLATORS: the first parameter is '<number> points', the last 2 parameters are player names
3197-smuggling_route_broken = rt(p(_
3198-[[The smuggling route worth %1$s from %2$s to %3$s has been broken!]]
3199-))
3200+ p(_[[The smuggling route worth %1$s from %2$s to %3$s has been broken!]])
3201+ )
3202
3203 game_over = rt(
3204- h1("Game over!") ..
3205+ h1(_"Game over!") ..
3206 -- TRANSLATORS: the first 4 parameters are player names, the last parameter is '<number> points'
3207- p(_
3208-[[Game over! %1$s and %2$s have won the game! %3$s and %4$s only managed to collect %5$s.]]
3209-)
3210-)
3211+ p(_[[Game over! %1$s and %2$s have won the game! %3$s and %4$s only managed to collect %5$s.]])
3212+ )
3213
3214=== modified file 'maps/Plateau.wmf/scripting/init.lua'
3215--- maps/Plateau.wmf/scripting/init.lua 2014-05-28 09:15:34 +0000
3216+++ maps/Plateau.wmf/scripting/init.lua 2014-10-31 11:37:25 +0000
3217@@ -6,6 +6,7 @@
3218
3219 include "scripting/coroutine.lua"
3220 include "scripting/infrastructure.lua"
3221+include "scripting/messages.lua"
3222 include "scripting/table.lua"
3223 include "scripting/ui.lua"
3224
3225@@ -21,8 +22,8 @@
3226 function mission_thread()
3227 sleep(300)
3228
3229- send_msg(briefing_1_the_forbidden_island)
3230- local o = add_obj(obj_forbidden_island)
3231+ campaign_message_box(briefing_1_the_forbidden_island)
3232+ local o = add_campaign_objective(obj_forbidden_island)
3233
3234 local map = wl.Game().map
3235 while not p1:seen_field(map:get_field(5,8)) do sleep(2345) end
3236@@ -47,9 +48,9 @@
3237 -- Move to the castle
3238 scroll_smoothly_to(castle)
3239
3240- send_msg(briefing_2_found_ancient_castle)
3241+ campaign_message_box(briefing_2_found_ancient_castle)
3242 o.done = true
3243- o = add_obj(obj_capture_ancient_castle)
3244+ o = add_campaign_objective(obj_capture_ancient_castle)
3245
3246 -- Wait till we conquered the castle
3247 while #p1:get_buildings"castle.atlanteans" < 1 do sleep(2345) end
3248@@ -58,9 +59,9 @@
3249 scroll_smoothly_to(castle)
3250
3251 p1:reveal_fields(castle:region(18))
3252- send_msg(briefing_3_captured_ancient_castle)
3253- local o_erwyn = add_obj(obj_defeat_erwyn)
3254- local o_jomo = add_obj(obj_defeat_jomo)
3255+ campaign_message_box(briefing_3_captured_ancient_castle)
3256+ local o_erwyn = add_campaign_objective(obj_defeat_erwyn)
3257+ local o_jomo = add_campaign_objective(obj_defeat_jomo)
3258
3259 sleep(100)
3260 p1:hide_fields(castle:region(18))
3261@@ -68,19 +69,19 @@
3262 -- Function to check for victory over erwyn
3263 run(function()
3264 while not p2.defeated do sleep(3434) end
3265- send_msg(briefing_erwyn_defeated)
3266+ campaign_message_box(briefing_erwyn_defeated)
3267 o_erwyn.done = true
3268 end)
3269 -- Function to check for victory over jomo
3270 run(function()
3271 while not p3.defeated do sleep(3434) end
3272- send_msg(briefing_jomo_defeated)
3273+ campaign_message_box(briefing_jomo_defeated)
3274 o_jomo.done = true
3275 end)
3276
3277 while not (p2.defeated and p3.defeated) do sleep(4325) end
3278
3279- send_msg(last_briefing_victory)
3280+ campaign_message_box(last_briefing_victory)
3281 end
3282
3283 run(mission_thread)
3284
3285=== modified file 'maps/Plateau.wmf/scripting/texts.lua'
3286--- maps/Plateau.wmf/scripting/texts.lua 2014-07-15 17:29:28 +0000
3287+++ maps/Plateau.wmf/scripting/texts.lua 2014-10-31 11:37:25 +0000
3288@@ -4,34 +4,19 @@
3289
3290 include "scripting/formatting.lua"
3291 include "scripting/format_scenario.lua"
3292+include "scripting/messages.lua"
3293
3294--- Removes whitespace at the beginning or the end and translates
3295--- newlines into spaces.
3296-function reflow(s)
3297- s = s:gsub("\r", ""):gsub("\n", " ")
3298- return s:match'^%s*(.*%S)' or ''
3299-end
3300
3301 -- ===========
3302 -- Objectives
3303 -- ===========
3304-function _obj(t)
3305- return
3306- "<rt><p line-spacing=3 font-size=12>" .. reflow(t) .. "</p></rt>"
3307-end
3308-function add_obj(o)
3309- return p1:add_objective(o.name, o.title, _obj(reflow(o.body)), o)
3310-end
3311-
3312 obj_forbidden_island = {
3313 name = "forbidden_island",
3314 title = _"The Forbidden Island",
3315- body = _(
3316-[[Finally! We have just taken our first step towards victory! ]] ..
3317-[[Last night, we landed on the forbidden island and defeated the few guards that were watching the ]] ..
3318-[[north-western part of the island. ]] ..
3319-[[I am quite sure that none of the other warlords has detected us so far, ]] ..
3320-[[so we should keep quiet and build up our infrastructure. Soon we will be strong enough to raid their positions.]]),
3321+ number = 1,
3322+ body = objective_text(_"The Forbidden Island",
3323+ _([[Finally! We have just taken our first step towards victory! Last night, we landed on the forbidden island and defeated the few guards that were watching the north-western part of the island. I am quite sure that none of the other warlords has detected us so far, so we should keep quiet and build up our infrastructure. Soon we will be strong enough to raid their positions.]])
3324+ ),
3325 }
3326
3327
3328@@ -39,42 +24,40 @@
3329 obj_capture_ancient_castle = {
3330 name = "capture_ancient_castle",
3331 title = _"Capture the Ancient Castle",
3332- body = listitem_bullet(_[[Defeat Lanissa and capture the ancient castle.]]),
3333+ number = 1,
3334+ body = objective_text(_"Capture the Ancient Castle",
3335+ listitem_bullet(_[[Defeat Lanissa and capture the ancient castle.]])
3336+ ),
3337 }
3338
3339 obj_defeat_erwyn = {
3340 name = "defeat_erwyn",
3341 title = _"Defeat Erwyn",
3342- body = listitem_bullet(_[[Defeat Erwyn. He commands the strongest opposing military force left on this island.]]),
3343+ number = 1,
3344+ body = objective_text(_"Defeat Erwyn",
3345+ listitem_bullet(_[[Defeat Erwyn. He commands the strongest opposing military force left on this island.]])
3346+ ),
3347 }
3348 obj_defeat_jomo = {
3349 name = "defeat_jomo",
3350- title =_ "Defeat Jomo",
3351- body = listitem_bullet(_[[Defeat Jomo. He is taking care of the soldiers’ food supply.]]),
3352+ title = _"Defeat Jomo",
3353+ number = 1,
3354+ body = objective_text(_"Defeat Jomo",
3355+ listitem_bullet(_[[Defeat Jomo. He is taking care of the soldiers’ food supply.]])
3356+ ),
3357 }
3358
3359 -- =====================
3360 -- Messages to the User
3361 -- =====================
3362-function _msg(title, text, ...)
3363- local s =
3364-"<rt><p font-size=24 font-face=DejaVuSerif font-weight=bold font-color=3333FF>"
3365- .. title .. "</p></rt><rt>" ..
3366- "<rt><p line-spacing=3 font-size=12>" .. reflow(text)
3367- objs = {...}
3368- if #objs > 0 then
3369- s = s .. "<br><br></p></rt>" .. rt(h2(_"New Objective")) .. "<rt><p line-spacing=3 font-size=12>"
3370- local i = 1
3371- while i < #objs do
3372- s = s .. reflow(objs[i].body) .. "<br>"
3373- i = i+1
3374- end
3375- s = s .. reflow(objs[#objs].body)
3376- end
3377- return s .. "</p></rt>"
3378-end
3379-function send_msg(t)
3380- p1:message_box(t.title, t.body, t)
3381+
3382+function obj_message(title, text)
3383+ return
3384+ rt("<p font-size=20 font-weight=bold font-face=DejaVuSerif font-color=3333FF>"
3385+ .. title ..
3386+ "</p><p font-size=10> <br></p>"
3387+ .. p(text)
3388+ )
3389 end
3390
3391 briefing_1_the_forbidden_island = {
3392@@ -82,12 +65,9 @@
3393 width = 400,
3394 height = 300,
3395 posy = 1,
3396- body = _msg(_"The Forbidden Island", _(
3397-[[Finally! We have just taken our first step towards victory! ]] ..
3398-[[Last night, we landed on the forbidden island and defeated the few guards that were watching the ]] ..
3399-[[north-western part of the island. ]] ..
3400-[[I am quite sure that none of the other warlords has detected us so far, ]] ..
3401-[[so we should keep quiet and build up our infrastructure. Soon we will be strong enough to raid their positions.]])),
3402+ body = obj_message(_"The Forbidden Island",
3403+ _([[Finally! We have just taken our first step towards victory! Last night, we landed on the forbidden island and defeated the few guards that were watching the north-western part of the island. I am quite sure that none of the other warlords has detected us so far, so we should keep quiet and build up our infrastructure. Soon we will be strong enough to raid their positions.]])
3404+ ),
3405 }
3406
3407 briefing_2_found_ancient_castle = {
3408@@ -95,14 +75,10 @@
3409 width = 400,
3410 height = 300,
3411 posy = 1,
3412- body = _msg(_"An Ancient Castle", _(
3413-[[By the Gods! One of our scouts has discovered a mighty castle at the center of the old plateau. ]] ..
3414-[[The castle must be quite old and seems to have been built in a foreign style. ]] ..
3415-[[It’s quite obvious that this is not barbarian craft.]]) .. paragraphdivider() ..
3416-_([[Let’s hope that Lanissa – the warlord holding sway over that castle – has not discovered our movements yet. ]] ..
3417-[[Perhaps we have a chance of conquering that mighty building without a bigger fight! ]] ..
3418-[[However, it is essential that we capture it. It will be the key to our reign over this island!]]),
3419- obj_capture_ancient_castle),
3420+ body = obj_message(_"An Ancient Castle",
3421+ _([[By the Gods! One of our scouts has discovered a mighty castle at the center of the old plateau. The castle must be quite old and seems to have been built in a foreign style. It’s quite obvious that this is not barbarian craft.]]) .. paragraphdivider() ..
3422+ _([[Let’s hope that Lanissa – the warlord holding sway over that castle – has not discovered our movements yet. Perhaps we have a chance of conquering that mighty building without a bigger fight! However, it is essential that we capture it. It will be the key to our reign over this island!]]))
3423+ .. new_objectives(obj_capture_ancient_castle)
3424 }
3425
3426 briefing_3_captured_ancient_castle = {
3427@@ -110,16 +86,10 @@
3428 width = 400,
3429 height = 300,
3430 posy = 1,
3431- body = _msg(_"Ancient Castle Captured", _(
3432-[[Wonderful! Our troops have finally defeated Lanissa and her soldiers. The ancient castle is ours!]]) .. paragraphdivider() ..
3433-_([[It is amazing how far one can see from the highest tower of the castle. We can watch the whole island. ]] ..
3434-[[So now I wonder why Lanissa did not see us and thus did not prepare. ]] ..
3435-[[Be that as it may, some things will never come to the light of day. ]] ..
3436-[[The only important issue at the moment are the opposing troops still left. ]] ..
3437-[[We have discovered enemy positions held by Erwyn to the north and east of the castle. ]] ..
3438-[[He is known to be a strong warlord and surely commands the strongest warriors. ]] ..
3439-[[In the south, we caught sight of some food infrastructures guarded by Jomo – a younger warlord – ]] ..
3440-[[and we should take care of those infrastructures so we can cut off our enemies’ food supply.]]), obj_defeat_erwyn, obj_defeat_jomo),
3441+ body = obj_message(_"Ancient Castle Captured",
3442+ _([[Wonderful! Our troops have finally defeated Lanissa and her soldiers. The ancient castle is ours!]]) .. paragraphdivider() ..
3443+ _([[It is amazing how far one can see from the highest tower of the castle. We can watch the whole island. So now I wonder why Lanissa did not see us and thus did not prepare. Be that as it may, some things will never come to the light of day. The only important issue at the moment are the opposing troops still left. We have discovered enemy positions held by Erwyn to the north and east of the castle. He is known to be a strong warlord and surely commands the strongest warriors. In the south, we caught sight of some food infrastructures guarded by Jomo – a younger warlord – and we should take care of those infrastructures so we can cut off our enemies’ food supply.]]))
3444+ .. new_objectives(obj_defeat_erwyn) .. new_objectives(obj_defeat_jomo)
3445 }
3446
3447 briefing_erwyn_defeated = {
3448@@ -127,8 +97,8 @@
3449 width = 400,
3450 height = 300,
3451 posy = 1,
3452- body = _msg( _"Erwyn Defeated", _
3453-[[Great! Erwyn gave up when he saw his last buildings burning down. That’s one less strong warlord on this island!]]),
3454+ body = obj_message(_"Erwyn Defeated",
3455+ _([[Great! Erwyn gave up when he saw his last buildings burning down. That’s one less strong warlord on this island!]]))
3456 }
3457
3458 briefing_jomo_defeated = {
3459@@ -136,8 +106,8 @@
3460 width = 400,
3461 height = 300,
3462 posy = 1,
3463- body = _msg( _"Jomo Defeated", _
3464-[[Great! Jomo gave up when he saw his last buildings burning down. That’s one less warlord on this island!]]),
3465+ body = obj_message(_"Jomo Defeated",
3466+ _([[Great! Jomo gave up when he saw his last buildings burning down. That’s one less warlord on this island!]]))
3467 }
3468
3469 last_briefing_victory = {
3470@@ -145,8 +115,7 @@
3471 width = 400,
3472 height = 300,
3473 posy = 1,
3474- body = _msg( _"Victory!", _
3475-[[Finally! The island is completely ours. Now we just have to defend it better than the warlords did.]] .. paragraphdivider() ..
3476-_"Congratulations! You have mastered this scenario. You may play on if you like!"
3477-),
3478+ body = obj_message(_"Victory!",
3479+ _([[Finally! The island is completely ours. Now we just have to defend it better than the warlords did.]]) .. paragraphdivider() ..
3480+ _("Congratulations! You have mastered this scenario. You may play on if you like!"))
3481 }
3482
3483=== modified file 'scripting/coroutine.lua'
3484--- scripting/coroutine.lua 2014-10-17 08:38:24 +0000
3485+++ scripting/coroutine.lua 2014-10-31 11:37:25 +0000
3486@@ -52,14 +52,15 @@
3487 --
3488 -- This must be called inside a coroutine. This will put the coroutine to
3489 -- sleep. Widelands will wake it at the absolute time given. If this time is
3490--- already in the past (that is at < :func:`wl.Game().time`) the
3491--- behaviour is undefined.
3492+-- already in the past (that is at < :func:`wl.Game().time`), the
3493+-- coroutine will be woken at :func:`wl.Game().time instead.
3494 --
3495 -- :arg at: when to wake this coroutine
3496 -- :type at: :class:`integer`
3497 --
3498 -- :returns: :const:`nil`
3499 function wake_me(at)
3500+ if (at < wl.Game().time) then at = wl.Game().time end
3501 coroutine.yield(at)
3502 end
3503
3504
3505=== modified file 'scripting/format_scenario.lua'
3506--- scripting/format_scenario.lua 2014-10-17 08:38:24 +0000
3507+++ scripting/format_scenario.lua 2014-10-31 11:37:25 +0000
3508@@ -57,7 +57,7 @@
3509 --
3510 -- :returns: symbol .. " " .. text .. paragraphdivider()
3511 function listitem(symbol, text)
3512- return symbol .. " " .. text .. paragraphdivider()
3513+ return symbol .. " " .. text .. listdivider()
3514 end
3515
3516 -- RST
3517@@ -84,6 +84,19 @@
3518 return listitem("•", text)
3519 end
3520
3521+
3522+-- RST
3523+-- .. function:: listdivider()
3524+--
3525+-- Closes a paragraph and opens a new paragraph.
3526+-- Use this before starting a list when it doesn't create a paragraph.
3527+-- If you want more space, before the list, use paragraphdivider().
3528+--
3529+-- :returns: <br></p><p font-size=4><br></p><p line-spacing=3 font-size=12>
3530+function listdivider()
3531+ return ("<br></p><p font-size=4><br></p><p line-spacing=3 font-size=12>")
3532+end
3533+
3534 -- RST
3535 -- .. function:: paragraphdivider()
3536 --
3537
3538=== modified file 'scripting/messages.lua'
3539--- scripting/messages.lua 2014-10-17 08:38:24 +0000
3540+++ scripting/messages.lua 2014-10-31 11:37:25 +0000
3541@@ -26,7 +26,7 @@
3542 --
3543 function send_message(player, title, body, parameters)
3544 if (parameters["popup"]) then
3545- while (wl.ui.MapView().is_building_road) do sleep(2000) end
3546+ wait_for_roadbuilding()
3547 end
3548 player:send_message(title, body, parameters)
3549 end
3550@@ -45,7 +45,7 @@
3551 -- for wl.game.Player, e.g. { field = f }.
3552 --
3553 function message_box(player, title, body, parameters)
3554- while (wl.ui.MapView().is_building_road) do sleep(2000) end
3555+ wait_for_roadbuilding()
3556 -- In case the user input was forbidden for some reason, allow him to close the message box.
3557 -- While the message box is shown, the user cannot do anything else anyway.
3558 local user_input = wl.ui.get_user_input_allowed()
3559@@ -117,15 +117,15 @@
3560 local way, x, y
3561
3562 if message.field then
3563- -- This is necessary. Otherwise, we would scroll and then wait until the road is finished.
3564- -- In this time, could user can scroll elsewhere, giving weird results.
3565- if not message.show_instantly then
3566- while (wl.ui.MapView().is_building_road) do sleep(2000) end
3567- end
3568 if message.jump_to_field then
3569 x,y = wl.ui.MapView().viewpoint_x, wl.ui.MapView().viewpoint_y
3570 -- player:message_box jumps, so nothing to do for us
3571 else
3572+ -- This is necessary. Otherwise, we would scroll and then wait until the road is finished.
3573+ -- In this time, could user can scroll elsewhere, giving weird results.
3574+ if not message.show_instantly then
3575+ wait_for_roadbuilding()
3576+ end
3577 way = scroll_smoothly_to(message.field)
3578 end
3579 end
3580
3581=== modified file 'scripting/ui.lua'
3582--- scripting/ui.lua 2014-10-17 08:38:24 +0000
3583+++ scripting/ui.lua 2014-10-31 11:37:25 +0000
3584@@ -355,3 +355,30 @@
3585 v:close()
3586 end
3587 end
3588+
3589+
3590+-- RST
3591+-- .. function:: wait_for_roadbuilding()
3592+--
3593+-- Sleeps while player is in roadbuilding mode.
3594+--
3595+-- :returns: :const:`nil`
3596+--
3597+function wait_for_roadbuilding()
3598+ while (wl.ui.MapView().is_building_road) do sleep(2000) end
3599+end
3600+
3601+
3602+-- RST
3603+-- .. function:: wait_for_roadbuilding_and_scroll(f[, T = 1000])
3604+--
3605+-- Sleeps while player is in roadbuilding mode, then calls
3606+-- scroll_smoothly_to(f[, T = 1000]).
3607+--
3608+-- :returns: an :class:`array` with the intermediate points that were
3609+-- targeted
3610+--
3611+function wait_for_roadbuilding_and_scroll(f, g_T)
3612+ wait_for_roadbuilding()
3613+ return scroll_smoothly_to(f, g_T)
3614+end
3615
3616=== modified file 'scripting/win_condition_functions.lua'
3617--- scripting/win_condition_functions.lua 2014-06-05 10:04:20 +0000
3618+++ scripting/win_condition_functions.lua 2014-10-31 11:37:25 +0000
3619@@ -1,3 +1,5 @@
3620+include "scripting/messages.lua"
3621+
3622 -- RST
3623 -- win_condition_functions.lua
3624 -- ---------------------------
3625@@ -101,10 +103,11 @@
3626 -- broadcast a message to all players using
3627 -- :meth:`~wl.game.Player.send_message`. All parameters are passed
3628 -- literally.
3629+-- Message is delayed while player is in road building mode.
3630 function broadcast(plrs, header, msg, goptions)
3631 local options = goptions or {}
3632 for idx, p in ipairs(plrs) do
3633- p:send_message(header, msg, options)
3634+ send_message(p, header, msg, options)
3635 end
3636 end
3637
3638
3639=== modified file 'scripting/win_conditions/02_collectors.lua'
3640--- scripting/win_conditions/02_collectors.lua 2014-07-15 18:30:46 +0000
3641+++ scripting/win_conditions/02_collectors.lua 2014-10-31 11:37:25 +0000
3642@@ -3,8 +3,9 @@
3643 -- =======================================================================
3644
3645 include "scripting/coroutine.lua" -- for sleep
3646+include "scripting/messages.lua"
3647+include "scripting/formatting.lua"
3648 include "scripting/table.lua"
3649-include "scripting/formatting.lua"
3650 include "scripting/win_condition_functions.lua"
3651
3652 set_textdomain("win_conditions")
3653@@ -138,7 +139,7 @@
3654 end
3655
3656 for idx, plr in ipairs(plrs) do
3657- plr:send_message(game_status.title, "<rt>" .. msg .. "</rt>")
3658+ send_message(plr, game_status.title, "<rt>" .. msg .. "</rt>", {popup = true})
3659 end
3660 end
3661
3662
3663=== modified file 'scripting/win_conditions/03_territorial_lord.lua'
3664--- scripting/win_conditions/03_territorial_lord.lua 2014-06-05 10:04:20 +0000
3665+++ scripting/win_conditions/03_territorial_lord.lua 2014-10-31 11:37:25 +0000
3666@@ -3,6 +3,7 @@
3667 -- =======================================================================
3668
3669 include "scripting/coroutine.lua" -- for sleep
3670+include "scripting/messages.lua"
3671 include "scripting/table.lua"
3672 include "scripting/win_condition_functions.lua"
3673
3674@@ -167,9 +168,9 @@
3675 for idx, p in ipairs(plrs) do
3676 if candidateisteam and currentcandidate == p.team
3677 or not candidateisteam and currentcandidate == p.name then
3678- p:send_message(game_status.title, msg2)
3679+ send_message(p, game_status.title, msg2, {popup = true})
3680 else
3681- p:send_message(game_status.title, msg1)
3682+ send_message(p, game_status.title, msg1, {popup = true})
3683 end
3684 end
3685 end
3686
3687=== modified file 'scripting/win_conditions/03_territorial_time.lua'
3688--- scripting/win_conditions/03_territorial_time.lua 2014-06-05 10:04:20 +0000
3689+++ scripting/win_conditions/03_territorial_time.lua 2014-10-31 11:37:25 +0000
3690@@ -3,6 +3,7 @@
3691 -- =======================================================================
3692
3693 include "scripting/coroutine.lua" -- for sleep
3694+include "scripting/messages.lua"
3695 include "scripting/table.lua"
3696 include "scripting/win_condition_functions.lua"
3697
3698@@ -231,7 +232,7 @@
3699 msg = msg .. "\n\n"
3700 msg = msg .. game_status.body
3701 msg = msg .. _status(points, "has")
3702- p:send_message(game_status.title, msg, {popup = true})
3703+ send_message(p, game_status.title, msg, {popup = true})
3704 end
3705 end
3706

Subscribers

People subscribed via source and target branches

to status/vote changes: