← Back to team overview

widelands-dev team mailing list archive

[Merge] lp:~widelands-dev/widelands/rtl-reverse-gui into lp:widelands

 

GunChleoc has proposed merging lp:~widelands-dev/widelands/rtl-reverse-gui into lp:widelands.

Requested reviews:
  Widelands Developers (widelands-dev)
Related bugs:
  Bug #1307356 in widelands: "Implement RTL support"
  https://bugs.launchpad.net/widelands/+bug/1307356

For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/rtl-reverse-gui/+merge/220863

Just a bit of refactoring for bullet lists in LUA.

I don't know when I will get ideas on how to solve more of the RTL stuff, so better merge this now.

I tried merging master but it won't compile although I didn't touch the C++ code; maybe it will work better the other way around.
-- 
https://code.launchpad.net/~widelands-dev/widelands/rtl-reverse-gui/+merge/220863
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/rtl-reverse-gui into lp:widelands.
=== modified file 'campaigns/atl01.wmf/scripting/texts.lua'
--- campaigns/atl01.wmf/scripting/texts.lua	2014-04-18 08:40:41 +0000
+++ campaigns/atl01.wmf/scripting/texts.lua	2014-05-24 16:01:14 +0000
@@ -32,11 +32,11 @@
    title = _ "Ensure the supply of building wares",
    number = 6,
    body = objective_text(_"Supply Building Wares", _
-[[Supply basic building material for your economy:]] .. "<br>" ..
-[[• ]] .. _[[Build a quarry]] .. "<br>" ..
-[[• ]] .. _[[Build two woodcutter’s houses]] .. "<br>" ..
-[[• ]] .. _[[Build two forester’s houses]] .. "<br>" ..
-[[• ]] .. _[[Build a sawmill]]
+[[Supply basic building material for your economy:]] .. paragraphdivider() ..
+      listitem_bullet(_[[Build a quarry]]) ..
+      listitem_bullet(_[[Build two woodcutter’s houses]]) ..
+      listitem_bullet(_[[Build two forester’s houses]]) ..
+      listitem_bullet(_[[Build a sawmill]])
    ),
 }
 
@@ -46,8 +46,8 @@
    number = 1,
    body = objective_text(_"Expand and Explore", _(
 [[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.]]) .. [[<br>]] ..
-[[• ]] .. _[[Build military sites to expand your territory]]
+[[Explore and conquer it, this is the only way to protect us from threats on the island and from Atlantis.]]) .. paragraphdivider() ..
+      listitem_bullet(_[[Build military sites to expand your territory]])
    ),
 }
 
@@ -55,25 +55,16 @@
    name = "obj_make_food_infrastructure",
    title = _ "Establish a solid food production",
    number = 10,
-   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() ..
-_([[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.]]) .. [[<br>]] ..
-[[• ]] .. _[[Build a farm and a blackroot farm]] .. "<br>" ..
-[[• ]] .. _[[Build a mill to make cornflour and blackroot flour]] .. "<br>" ..
-[[• ]] .. _[[Build a well]] .. "<br>" ..
-[[• ]] .. _[[Build a bakery to bake bread from cornflour, blackroot flour and water]] .. "<br>" ..
-[[• ]] .. _[[Build a hunter’s house to get raw meat]] .. "<br>" ..
-[[• ]] .. _[[Build a fisher’s house close to water to get raw fish]] .. "<br>" ..
-[[• ]] .. _[[Build a fish breeder’s house close to the fisher to make sure the fish do not die out]] .. "<br>" ..
-[[• ]] .. _[[Build two smokeries to smoke raw meat and fish]]
+   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() ..
+      _[[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() ..
+      listitem_bullet(_[[Build a farm and a blackroot farm]]) ..
+      listitem_bullet(_[[Build a mill to make cornflour and blackroot flour]]) ..
+      listitem_bullet(_[[Build a well]]) ..
+      listitem_bullet(_[[Build a bakery to bake bread from cornflour, blackroot flour and water]]) ..
+      listitem_bullet(_[[Build a hunter’s house to get raw meat]]) ..
+      listitem_bullet(_[[Build a fisher’s house close to water to get raw fish]]) ..
+      listitem_bullet(_[[Build a fish breeder’s house close to the fisher to make sure the fish do not die out]]) ..
+      listitem_bullet(_[[Build two smokeries to smoke raw meat and fish]])
    )
 }
 
@@ -81,15 +72,10 @@
    name = "obj_spidercloth_production",
    title = _ "Build a spider farm and a weaving mill",
    number = 3,
-   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 weaver out of gold.]]) .. "<br>" ..
-[[• ]] .. _[[Build a weaving mill]] .. "<br>" ..
-[[• ]] .. _[[Build a spider farm]] .. "<br>" ..
-[[• ]] .. _[[Build a goldweaver]]
+   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 weaver out of gold.]] .. paragraphdivider() ..
+      listitem_bullet(_[[Build a weaving mill]]) ..
+      listitem_bullet(_[[Build a spider farm]]) ..
+      listitem_bullet(_[[Build a goldweaver]])
  )
 }
 
@@ -97,29 +83,21 @@
    name = "obj_make_heavy_industry_and_mining",
    title = _ "Build industry and mines",
    number = 5,
-   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.]]) .. "<br>" ..
-_([[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.]]) .. "<br>" ..
-[[• ]] .. _[[Build a mine of each type. Make sure to send geologists to the mountain first.]] .. "<br>" ..
-[[• ]] .. _[[Build a smelting works]] .. "<br>" ..
-[[• ]] .. _[[Build an armor smithy and a weapon smithy]] .. "<br>" ..
-[[• ]] .. _[[Build a toolsmithy]]
- )
+   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() ..
+      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() ..
+      listitem_bullet(_[[Build a mine of each type. Make sure to send geologists to the mountain first.]]) ..
+      listitem_bullet(_[[Build a smelting works]]) ..
+      listitem_bullet(_[[Build an armor smithy and a weapon smithy]]) ..
+      listitem_bullet(_[[Build a toolsmithy]])
+   )
 }
 
 obj_make_training_buildings = {
    name = "obj_make_training_buildings",
    title = _"Build training buildings for soldiers",
    number = 2,
-   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.]]) .. "<br>" ..
-[[• ]] .. _[[Build a dungeon and a labyrinth]]
+   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() ..
+      listitem_bullet(_[[Build a dungeon and a labyrinth]])
  )
 }
 
@@ -127,23 +105,18 @@
    name = "obj_horsefarm_and_warehouse",
    title = _"Build a warehouse and a horse farm",
    number = 2,
-   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.]]) .. "<br>" ..
-[[• ]] .. _[[Build a warehouse]] .. "<br>" ..
-[[• ]] .. _[[Build a horse farm]])
+   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() ..
+      listitem_bullet(_[[Build a warehouse]]) ..
+      listitem_bullet(_[[Build a horse farm]])
+  )
 }
 
 obj_build_ships = {
    name = "obj_build_ships",
    title = _ "Build 3 ships to escape from the island",
    number = 1,
-   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.]])  .. "<br>" ..
-[[• ]] .. _[[Build a shipyard close to the lake to start building ships]]
+   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() ..
+      listitem_bullet(_[[Build a shipyard close to the lake to start building ships]])
    )
 }
 

=== modified file 'campaigns/emp01.wmf/scripting/texts.lua'
--- campaigns/emp01.wmf/scripting/texts.lua	2014-04-03 12:46:12 +0000
+++ campaigns/emp01.wmf/scripting/texts.lua	2014-05-24 16:01:14 +0000
@@ -28,7 +28,8 @@
    title=_"Build a barracks",
    number = 1,
    body = objective_text(_"Barracks",
-[[• ]] .. _[[Build a barracks at the red house symbol on the east side of the forests, to the right of your provisional headquarters.]]),
+      listitem_bullet(_[[Build a barracks at the red house symbol on the east side of the forests, to the right of your provisional headquarters.]])
+   ),
 }
 
 obj_build_lumberjack = {
@@ -36,10 +37,9 @@
    title=_"Build a lumberjack’s house",
    number = 1,
    body = objective_text(_"Lumberjack’s House",
-[[• ]] .. _[[Build a lumberjack’s house at the red house symbol, south of your provisional headquarters.]]
-.. paragraphdivider() ..
-[[→ ]] .. _([[Cutting down enough trees for more buildings will take a while. ]] ..
-[[You can speed the game up by using PAGE UP and slow it down again with PAGE DOWN.]])),
+      listitem_bullet(_[[Build a lumberjack’s house at the red house symbol, south of your provisional headquarters.]]) ..
+      listitem_arrow(_[[Cutting down enough trees for more buildings will take a while. You can speed the game up by using PAGE UP and slow it down again with PAGE DOWN.]])
+   ),
 }
 
 obj_build_sawmill_and_lumberjacks = {
@@ -47,7 +47,8 @@
    title=_"Build 2 lumberjack’s houses and a sawmill",
    number = 3,
    body = objective_text(_"Two Lumberjack’s Houses and a Sawmill",
-[[• ]] .. _[[Build two more lumberjack’s houses and a sawmill as soon as there is enough space for them.]]),
+      listitem_bullet(_[[Build two more lumberjack’s houses and a sawmill as soon as there is enough space for them.]])
+   ),
 }
 
 obj_build_forester = {
@@ -55,7 +56,8 @@
    title=_"Build a forester’s house",
    number = 1,
    body = objective_text(_"Forester’s House",
-[[• ]] .. _[[Build a forester’s house to preserve the wood resources of this island.]]),
+      listitem_bullet(_[[Build a forester’s house to preserve the wood resources of this island.]])
+   ),
 }
 
 obj_build_quarry = {
@@ -63,9 +65,9 @@
    title=_"Build a quarry",
    number = 5,
    body = objective_text(_"Quarry",
-[[• ]] .. _[[Build a quarry in the south to cut some stones and marble out of the rocks.]]
-.. paragraphdivider() ..
-[[→ ]] .. _[[These might be used for future buildings.]]),
+      listitem_bullet(_[[Build a quarry in the south to cut some stones and marble out of the rocks.]]) ..
+      listitem_arrow(_[[These might be used for future buildings.]])
+   ),
 }
 
 

=== modified file 'campaigns/emp02.wmf/scripting/texts.lua'
--- campaigns/emp02.wmf/scripting/texts.lua	2014-04-08 06:25:04 +0000
+++ campaigns/emp02.wmf/scripting/texts.lua	2014-05-24 16:01:14 +0000
@@ -28,7 +28,8 @@
    title =_"Build up a wood economy",
    number = 5,
    body = objective_text(_"Wood Economy",
-[[• ]] .. _[[Build three lumberjack’s houses, a forester’s house and a sawmill.]]),
+      listitem_bullet(_[[Build three lumberjack’s houses, a forester’s house and a sawmill.]])
+   ),
 }
 
 obj_build_quarry = {
@@ -36,7 +37,8 @@
    title =_"Build a quarry",
    number = 1,
    body = objective_text(_"Quarry",
-[[• ]] .. _[[Build a quarry to the south of your headquarters.]]),
+      listitem_bullet(_[[Build a quarry to the south of your headquarters.]])
+   ),
 }
 
 obj_build_military_buildings = {
@@ -44,7 +46,8 @@
    title =_"Protect your colony",
    number = 1,
    body = objective_text(_"Protect Your Colony",
-[[• ]] .. _[[Build some barracks and sentries around the colony.]]),
+      listitem_bullet(_[[Build some barracks and sentries around the colony.]])
+   ),
 }
 
 obj_build_marblemine = {
@@ -52,7 +55,8 @@
    title =_"Start mining marble",
    number = 1,
    body = objective_text(_"Marble",
-[[• ]] .. _[[Expand to the east, to start mining marble from the mountain.]]),
+      listitem_bullet(_[[Expand to the east, to start mining marble from the mountain.]])
+   ),
 }
 
 obj_build_mining_infrastructure = {
@@ -60,7 +64,8 @@
    title =_"Build a stonemason and mining infrastructure",
    number = 7,
    body = objective_text(_"Stonemason and Mining Infrastructure",
-[[• ]] .. _[[Build a stonemason and then a complete mining and production infrastructure (coal mine and / or charcoal burner, iron ore mine, toolsmithy, weapon smithy, armor smithy and smelting works).]]),
+      listitem_bullet(_[[Build a stonemason and then a complete mining and production infrastructure (coal mine and / or charcoal burner, iron ore mine, toolsmithy, weapon smithy, armor smithy and smelting works).]])
+   ),
 }
 
 obj_build_Food_infrastructure = {
@@ -68,12 +73,11 @@
    title =_"Provide your miners with food",
    number = 1,
    body = objective_text(_"Food For Your Miners",
-[[• ]] .. _([[To produce some sustaining food for our miners, we could build up a tavern. ]] ..
-[[To supply them with some good and strong drinks, we could build up a brewery and a winery.]]) .. "<br>" ..
-[[• ]] .. _([[Of course this means we will need more resources for preparing this food – like fish, meat or bread. To provide these foodstuffs, you would have to build a fisher’s house, a farm, a mill and a bakery.]]) .. "<br>" ..
-[[• ]] .. _[[Maybe you will also need a hunter’s house, a piggery, a vineyard and some wells.]] .. paragraphdivider() ..
-[[→ ]] .. _([[It’s up to you what you want to build. But remember – coal and iron ore mines need beer, ]] ..
-[[marble and gold mines need wine and all mines need at least rations, which are produced out of bread OR meat OR fish.]])),
+      listitem_bullet(_[[To produce some sustaining food for our miners, we could build up a tavern. To supply them with some good and strong drinks, we could build up a brewery and a winery.]]) ..
+      listitem_bullet(_[[Of course this means we will need more resources for preparing this food – like fish, meat or bread. To provide these foodstuffs, you would have to build a fisher’s house, a farm, a mill and a bakery.]]) ..
+      listitem_bullet(_[[Maybe you will also need a hunter’s house, a piggery, a vineyard and some wells.]]) ..
+      listitem_arrow(_[[It’s up to you what you want to build. But remember – coal and iron ore mines need beer, marble and gold mines need wine and all mines need at least rations, which are produced out of bread OR meat OR fish.]])
+   ),
 }
 
 obj_build_bigger_military_buildings = {
@@ -81,9 +85,9 @@
    title =_"Protect your eastern frontier",
    number = 1,
    body = objective_text(_"Protect Your Eastern Frontier",
-[[• ]] .. _[[Build up stronger military buildings, such as an outpost, a barrier or a tower, on the eastern frontier.]] ..
-paragraphdivider() ..
-[[→ ]] .. _[[To watch deep inside the enemy territory, build a tower.]]),
+      listitem_bullet(_[[Build up stronger military buildings, such as an outpost, a barrier or a tower, on the eastern frontier.]]) ..
+      listitem_arrow(_[[To watch deep inside the enemy territory, build a tower.]])
+   ),
 }
 
 obj_remove_the_barbarians = {
@@ -91,9 +95,9 @@
    title =_"Destroy the barbarian tribe",
    number = 2,
    body = objective_text(_"Destroy the Barbarian Tribe",
-[[• ]] .. _[[As soon as you have enough soldiers, attack and completely destroy the barbarian buildings.]] .. "<br>" ..
-[[• ]] .. _([[Finally, build up a fortress on the peninsula (near where the barbarian headquarters stood before), ]] ..
-[[to avoid new settlements of other tribes in that region.]])),
+      listitem_bullet(_[[As soon as you have enough soldiers, attack and completely destroy the barbarian buildings.]]) ..
+      listitem_bullet(_[[Finally, build up a fortress on the peninsula (near where the barbarian headquarters stood before), to avoid new settlements of other tribes in that region.]])
+   ),
 }
 
 -- =====================

=== modified file 'campaigns/t01.wmf/scripting/texts.lua'
--- campaigns/t01.wmf/scripting/texts.lua	2014-04-03 12:46:12 +0000
+++ campaigns/t01.wmf/scripting/texts.lua	2014-05-24 16:01:14 +0000
@@ -17,12 +17,12 @@
    title = _ "Build a lumberjack’s hut",
    number = 2,
    body = objective_text(_"Build a lumberjack’s hut",
-[[• ]] .. _"Press SPACE to see where you can build. The red house symbols show you where a small building – like a lumberjack’s hut – may be built." .. paragraphdivider() ..
-[[• ]] .. _"Build a lumberjack’s hut at the red house symbol just right of your headquarters by clicking on it and selecting a lumberjack’s hut." .. paragraphdivider() ..
-[[• ]] .. _"Build a road between your headquarters and the construction site of the lumberjack’s hut." .. paragraphdivider() ..
-[[→ ]] .. _"When you place the lumberjack’s hut, a flag is created for it. You need to connect it to another flag by building a road between them. If you click on a flag and select to build a road, little symbols will appear around it to show you in which directions you can build it." .. paragraphdivider() ..
-[[→ ]] .. _"The colors of these symbols indicate how steep this part of the road will be. Green is for flat, yellow means steep and red stands for very steep. The steeper the road is, the harder it will be for your people to walk on it (and your wares will be transported more slowly)." .. paragraphdivider() ..
-[[→ ]] .. "You can click on any of the symbols to build the first part of the road there. New symbols will appear to show you where the next part of the road can go, and so on. However, you can also click farther away from the flag to build several steps at once. Click on the flag at the headquarters to finish the road."
+      listitem_bullet(_"Press SPACE to see where you can build. The red house symbols show you where a small building – like a lumberjack’s hut – may be built.") ..
+      listitem_bullet(_"Build a lumberjack’s hut at the red house symbol just right of your headquarters by clicking on it and selecting a lumberjack’s hut.") ..
+      listitem_bullet(_"Build a road between your headquarters and the construction site of the lumberjack’s hut.") ..
+      listitem_arrow(_"When you place the lumberjack’s hut, a flag is created for it. You need to connect it to another flag by building a road between them. If you click on a flag and select to build a road, little symbols will appear around it to show you in which directions you can build it.") ..
+      listitem_arrow(_"The colors of these symbols indicate how steep this part of the road will be. Green is for flat, yellow means steep and red stands for very steep. The steeper the road is, the harder it will be for your people to walk on it (and your wares will be transported more slowly).") ..
+      listitem_arrow(_"You can click on any of the symbols to build the first part of the road there. New symbols will appear to show you where the next part of the road can go, and so on. However, you can also click farther away from the flag to build several steps at once. Click on the flag at the headquarters to finish the road.")
    ),
 }
 
@@ -31,8 +31,8 @@
    title = _ "Build a lumberjack’s hut",
    number = 1,
    body = objective_text(_"Build a lumberjack’s hut",
-[[• ]] .. _"Press SPACE to see where you can build. The red house symbols show you where a small building – like a lumberjack’s hut – may be built." .. paragraphdivider() ..
-[[• ]] .. _"Build a lumberjack’s hut at the red house symbol just right of your headquarters by clicking on it and selecting a lumberjack’s hut."
+      listitem_bullet(_"Press SPACE to see where you can build. The red house symbols show you where a small building – like a lumberjack’s hut – may be built.") ..
+      listitem_bullet(_"Build a lumberjack’s hut at the red house symbol just right of your headquarters by clicking on it and selecting a lumberjack’s hut.")
    ),
 }
 
@@ -41,10 +41,10 @@
    title = _ "Build a road to the lumberjack’s hut",
    number = 1,
    body = objective_text(_"Road to the lumberjack’ hut",
-[[• ]] .. _"Build a road between your headquarters and the construction site of the lumberjack’s hut." .. paragraphdivider() ..
-[[→ ]] .. _"When you place the lumberjack’s hut, a flag is created for it. You need to connect it to another flag by building a road between them. If you click on a flag and select to build a road, little symbols will appear around it to show you in which directions you can build it." .. paragraphdivider() ..
-[[→ ]] .. _"The colors of these symbols indicate how steep this part of the road will be. Green is for flat, yellow means steep and red stands for very steep. The steeper the road is, the harder it will be for your people to walk on it (and your wares will be transported more slowly)." .. paragraphdivider() ..
-[[→ ]] .. _"You can click on any of the symbols to build the first part of the road there. New symbols will appear to show you where the next part of the road can go, and so on. However, you can also click farther away from the flag to build several steps at once. Click on the flag at the headquarters to finish the road."
+      listitem_bullet(_"Build a road between your headquarters and the construction site of the lumberjack’s hut.") ..
+      listitem_arrow(_"When you place the lumberjack’s hut, a flag is created for it. You need to connect it to another flag by building a road between them. If you click on a flag and select to build a road, little symbols will appear around it to show you in which directions you can build it.") ..
+      listitem_arrow(_"The colors of these symbols indicate how steep this part of the road will be. Green is for flat, yellow means steep and red stands for very steep. The steeper the road is, the harder it will be for your people to walk on it (and your wares will be transported more slowly).") ..
+      listitem_arrow(_"You can click on any of the symbols to build the first part of the road there. New symbols will appear to show you where the next part of the road can go, and so on. However, you can also click farther away from the flag to build several steps at once. Click on the flag at the headquarters to finish the road.")
    ),
 }
 
@@ -53,9 +53,9 @@
    title = _ "Build a second lumberjack’s hut",
    number = 2,
    body = objective_text(_"Build a second lumberjack’s hut",
-[[• ]] .. _"Place a flag in the middle of the road. There is a flag symbol in the middle of the road you just built. You create a flag there by clicking on the symbol and then choosing the flag button in the menu that opens up. This will divide the road the wood is transported into two parts with one carrier each." .. paragraphdivider() ..
-[[• ]] .. _"Place a lumberjack’s hut just south of the flag you just placed on the road. Connect the flag you just raised with the flag of the new lumberjack’s hut construction site afterwards. Note that instead of building a road step by step, you may also click directly at its destination to build the entire road at once." .. paragraphdivider() ..
-[[→ ]] .. _"When many wares are being transported between two points, additional flags in between make them arrive at their destination faster, thus improving your infrastructure."
+      listitem_bullet(_"Place a flag in the middle of the road. There is a flag symbol in the middle of the road you just built. You create a flag there by clicking on the symbol and then choosing the flag button in the menu that opens up. This will divide the road the wood is transported into two parts with one carrier each.") ..
+      listitem_bullet(_"Place a lumberjack’s hut just south of the flag you just placed on the road. Connect the flag you just raised with the flag of the new lumberjack’s hut construction site afterwards. Note that instead of building a road step by step, you may also click directly at its destination to build the entire road at once.") ..
+      listitem_arrow(_"When many wares are being transported between two points, additional flags in between make them arrive at their destination faster, thus improving your infrastructure.")
    ),
 }
 
@@ -64,8 +64,8 @@
    title = _ "Build a second lumberjack’s hut",
    number = 1,
    body = objective_text(_"Build a second lumberjack’s hut",
-[[• ]] .. _"Place a flag in the middle of the road. There is a flag symbol in the middle of the road you just built. You create a flag there by clicking on the symbol and then choosing the flag button in the menu that opens up. This will divide the road the wood is transported into two parts with one carrier each." .. paragraphdivider() ..
-[[→ ]] .. _"When many wares are being transported between two points, additional flags in between make them arrive at their destination faster, thus improving your infrastructure."
+      listitem_bullet(_"Place a flag in the middle of the road. There is a flag symbol in the middle of the road you just built. You create a flag there by clicking on the symbol and then choosing the flag button in the menu that opens up. This will divide the road the wood is transported into two parts with one carrier each.") ..
+      listitem_arrow(_"When many wares are being transported between two points, additional flags in between make them arrive at their destination faster, thus improving your infrastructure.")
    ),
 }
 
@@ -74,7 +74,7 @@
    title = _ "Build a second lumberjack’s hut",
    number = 1,
    body = objective_text(_"Build a second lumberjack’s hut",
-[[• ]] .. _"Place a lumberjack’s hut just south of the flag you just placed on the road. Connect the flag you just raised with the flag of the new lumberjack’s hut construction site afterwards. Note that instead of building a road step by step, you may also click directly at its destination to build the entire road at once."
+      listitem_bullet(_"Place a lumberjack’s hut just south of the flag you just placed on the road. Connect the flag you just raised with the flag of the new lumberjack’s hut construction site afterwards. Note that instead of building a road step by step, you may also click directly at its destination to build the entire road at once.")
    ),
 }
 
@@ -83,7 +83,7 @@
    title = _ "Build a ranger’s hut",
    number = 1,
    body = objective_text(_"Build a ranger’s hut",
-[[• ]] .. _"Build a ranger’s hut to the east of the first lumberjack’s hut."
+      listitem_bullet(_"Build a ranger’s hut to the east of the first lumberjack’s hut.")
    ),
 }
 
@@ -92,7 +92,7 @@
    title = _ "Build two quarries",
    number = 1,
    body = objective_text(_"Build two quarries",
-[[• ]] .. _"Build two quarries south-west of your headquarters."
+      listitem_bullet(_"Build two quarries south-west of your headquarters.")
    ),
 }
 

=== modified file 'campaigns/t02.wmf/scripting/mission_thread_texts.lua'
--- campaigns/t02.wmf/scripting/mission_thread_texts.lua	2014-04-08 06:27:03 +0000
+++ campaigns/t02.wmf/scripting/mission_thread_texts.lua	2014-05-24 16:01:14 +0000
@@ -22,21 +22,19 @@
    name = "mission quarry",
    title =_"Expand north-east and build a quarry",
    number = 1,
-   body = objective_text(_"Expand north-east to the stones", _(
-[[Build military buildings (like sentries or barriers) to expand your territory. ]] ..
-[[Get to the rocks north-east from you and build a quarry there.]]
-   )),
+   body = objective_text(_"Expand north-east to the stones", 
+      listitem_bullet(_"Build military buildings (like sentries or barriers) to expand your territory.") ..
+      listitem_bullet(_"Get to the rocks north-east from you and build a quarry there.")
+   ),
 }
 
 obj_build_mines = {
    name="mission mines",
    title=_"Start building mines on the mountain",
    number = 2,
-   body= objective_text(_"Build coal and iron ore mines", _(
-[[Build a coal mine and an iron ore mine. 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 mine to be built appropriately:]]) .. paragraphdivider() ..
+   body= objective_text(_"Build coal and iron ore mines",
+      listitem_bullet(_"Build a coal mine and an iron ore mine.") ..
+      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 mine to be built appropriately:") ..
 _[[Black – coal]] .. "<br>" ..
 _[[Red – iron ore]] .. "<br>" ..
 _[[Yellow – gold]] .. "<br>" ..
@@ -49,10 +47,9 @@
    name="basic food began",
    title=_"Provide your miners with food",
    number = 3,
-   body= objective_text(_"Build a hunter, a gamekeeper and a tavern", _
-[[In order to work, your miners need food.]] .. paragraphdivider() ..
-_([[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.]]) .. paragraphdivider() ..
+   body= objective_text(_"Build a hunter, a gamekeeper and a tavern", 
+      listitem_bullet(_"In order to work, your miners need food.") ..
+      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.") ..
 _([[This is only the first example of a ware which has to be refined before being used in a secondary building]] ..
 [[ – others will follow.]])
    )
@@ -82,21 +79,14 @@
    name="enhance buildings",
    title=_"Enhance buildings and build a micro brewery",
    number = 3,
-   body= objective_text(_
-[[Enhance the coal mine and the tavern to the better versions of their
-buildings respectively. Also build a micro brewery.]], _(
-[[A normal mine can only dig up about one third of all the resources lying 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.]]) .. paragraphdivider() ..
-_([[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!]]) .. paragraphdivider() ..
-_([[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. 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.]]
-   ))
+   body= objective_text(_[[Enhance the coal mine and the tavern, and build a micro brewery.]],
+      listitem_bullet(_"Enhance the coal mine and the tavern to the better versions of their buildings respectively.") ..
+      listitem_bullet(_"Also build a micro brewery.") ..
+      listitem_arrow(_"A normal mine can only dig up about one third of all the resources lying 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.")  ..
+      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!") ..
+      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.") ..
+      _"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."
+   )
 }
 
 obj_better_material_1 = {
@@ -106,7 +96,8 @@
    body= objective_text(_ "Build a wood hardener", _(
 [[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.]]
+[[Always remember to build a wood hardener before you run out of blackwood, as without it you cannot expand.]] ..
+      listitem_bullet(_"Build a wood hardener")
    ))
 }
 
@@ -114,12 +105,13 @@
    name="mission grindstone",
    title=_"Build a lime kiln and coal economy",
    number = 3,
-   body=objective_text(_"Build a lime kiln, a well and a charcoal burner or coal mine", _(
+   body=objective_text(_"Build a lime kiln, a well and a charcoal burner, or a coal mine", _(
 [[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.]]) .. paragraphdivider() ..
 _([[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. ]] ..
-[[Coal can be obtained by building a charcoal burner or a coal mine.]]
+[[Coal can be obtained by building a charcoal burner or a coal mine.]] ..
+      listitem_bullet(_"Build a lime kiln, a well and a charcoal burner, or a coal mine")
    ))
 }
 
@@ -129,7 +121,8 @@
    number = 1,
    body= objective_text(_"Build a reed yard", _(
 [[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.]]
+[[Thatch reed is planted by a gardener around his building, the reed yard.]] ..
+      listitem_bullet(_"Build a reed yard")
    ))
 }
 
@@ -141,7 +134,8 @@
 [[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.]]) .. paragraphdivider() ..
-_[[Oxen are bred in cattle farms out of wheat and water.]]
+_[[Oxen are bred in cattle farms out of wheat and water.]] ..
+      listitem_bullet(_"Build a cattle farm")
    )
 }
 

=== modified file 'campaigns/t03.wmf/scripting/texts.lua'
--- campaigns/t03.wmf/scripting/texts.lua	2014-04-03 12:46:12 +0000
+++ campaigns/t03.wmf/scripting/texts.lua	2014-05-24 16:01:14 +0000
@@ -21,8 +21,13 @@
    title=_"Build up a small food economy",
    number = 5,
    body = objective_text(_"Build up a small food economy",
-[[• ]] .. _([[Build up a basic food economy to provide your people with food]] ..
-[[ – a fisher’s hut, a hunter’s hut, a well, a farm and a bakery.]])),
+      _"Build up a basic food economy to provide your people with food." ..
+      listitem_bullet(_"Build a fisher’s hut") ..
+      listitem_bullet(_"Build a hunter’s hut") ..
+      listitem_bullet(_"Build a well") ..
+      listitem_bullet(_"Build a farm") ..
+      listitem_bullet(_"Build a bakery")
+   ),
 }
 
 obj_build_cattlefarm = {
@@ -30,8 +35,9 @@
    title = _ "Build a cattle farm",
    number = 1,
    body = objective_text(_"Remember to build a cattle farm",
-_([[As your roads grow longer and your economy bigger, you should make good use of your oxen ]] ..
-[[to help transport wares more quickly. Remember to build a cattle farm!]])),
+      _"As your roads grow longer and your economy bigger, you should make good use of your oxen to help transport wares more quickly.)" ..
+      listitem_bullet(_"Remember to build a cattle farm!")
+   ),
 }
 
 obj_build_a_donjon = {
@@ -39,8 +45,8 @@
    title=_"Build a donjon",
    number = 1,
    body = objective_text(_"Build a donjon",
-[[• ]] .. _([[Build a donjon at the north-east of your territory to get greater visual range ]] ..
-[[and to protect your people from sudden attacks of enemies.]])),
+      listitem_bullet(_"Build a donjon at the north-east of your territory to get greater visual range and to protect your people from sudden attacks of enemies.")
+   ),
 }
 
 obj_explore_further = {
@@ -48,8 +54,8 @@
    title=_"Explore further",
    number = 1,
    body = objective_text(_"Explore further",
-[[• ]] .. _([[Build more military buildings to explore the area around the headquarters ]] ..
-[[and to ensure the safety of your people.]])),
+      listitem_bullet(_"Build more military buildings to explore the area around the headquarters and to ensure the safety of your people.")
+   ),
 }
 
 obj_build_mining_economy = {
@@ -57,8 +63,8 @@
    title=_"Build a mining infrastructure",
    number = 6,
    body = objective_text(_"Build a mining infrastructure",
-[[• ]] .. _([[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 metalworks.]])),
+      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 metalworks.")
+   ),
 }
 
 obj_build_a_fortress = {
@@ -66,7 +72,8 @@
    title=_"Build a fortress",
    number = 1,
    body = objective_text(_"Build a fortress",
-[[• ]] .. _"Build a fortress to the east of the mountains."),
+      listitem_bullet(_"Build a fortress to the east of the mountains.")
+   ),
 }
 
 obj_build_training_infrastructure = {
@@ -74,14 +81,10 @@
    title=_"Build a training infrastructure",
    number = 4,
    body = objective_text(_"Build a training infrastructure",
-[[• ]] .. _"Build a battle arena and a training camp to the west of the mountains." ..
-"<br>" ..
-[[• ]] .. _([[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.]]) ..
-"<br>" ..
-[[• ]] .. _"Build a helmsmithy to the west of the mountains to provide your soldiers with better armor."),
+      listitem_bullet(_"Build a battle arena and a training camp to the west of the mountains.") ..
+      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.") ..
+      listitem_bullet(_"Build a helmsmithy to the west of the mountains to provide your soldiers with better armor.")
+   ),
 }
 
 
@@ -90,12 +93,9 @@
    title=_"Build a warehouse",
    number = 1,
    body = objective_text(_"Build a warehouse",
-[[• ]] .. _"Build a warehouse to the west of the mountains." ..
-paragraphdivider() ..
-[[→ ]] .. _([[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.]])),
+      listitem_bullet(_"Build a warehouse to the west of the mountains.") ..
+      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.")
+   ),
 }
 
 obj_build_trainingssites = {
@@ -103,12 +103,11 @@
    title=_"Build training sites",
    number = 2,
    body = objective_text(_"Build training sites",
-[[• ]] .. _"Build a battle arena and a training camp to the west of the mountains." ..
-"<br>" ..
-[[→ ]] .. _([[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.]]) .. "<br>" ..
-_"The attributes are: health points, attack, defense and evade."),
+      listitem_bullet(_"Build a battle arena and a training camp to the west of the mountains.") ..
+      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." ..
+         "<br>" ..
+         _"The attributes are: health points, attack, defense and evade.")
+   ),
 }
 
 obj_build_weapon_productions = {
@@ -116,10 +115,8 @@
    title=_"Build weapons production",
    number = 3,
    body = objective_text(_"Build weapons production",
-[[• ]] .. _([[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.]])),
+      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.")
+   ),
 }
 
 obj_build_a_helmsmithy = {
@@ -127,7 +124,8 @@
    title=_"Build a helmsmithy",
    number = 1,
    body = objective_text(_"Build a helmsmithy",
-[[• ]] .. _"Build a helmsmithy to the west of the mountains to provide your soldiers with better armor."),
+      listitem_bullet(_"Build a helmsmithy to the west of the mountains to provide your soldiers with better armor.")
+   ),
 }
 
 obj_destroy_kalitaths_army = {
@@ -135,11 +133,9 @@
    title=_"Destroy Kalitath’s army",
    number = 2,
    body = objective_text(_"Destroy Kalitath’s army",
-[[• ]] .. _"Destroy Kalitath’s army and expand your territory to the east." ..
-paragraphdivider() ..
-[[→ ]] .. _([[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’).]])),
+      listitem_bullet(_"Destroy Kalitath’s army and expand your territory to the east.") ..
+      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’).")
+   ),
 }
 
 obj_military_assault_on_althunran = {
@@ -147,7 +143,8 @@
    title=_"Military assault on Al’thunran",
    number = 1,
    body = objective_text(_"Military assault on Al’thunran",
-[[• ]] .. _"Destroy all forces of Thron’s two brothers to liberate the throne-circle."),
+      listitem_bullet(_"Destroy all forces of Thron’s two brothers to liberate the throne-circle.")
+   ),
 }
 
 -- =======================================================================

=== modified file 'campaigns/tutorial01.wmf/scripting/texts.lua'
--- campaigns/tutorial01.wmf/scripting/texts.lua	2014-03-25 06:18:48 +0000
+++ campaigns/tutorial01.wmf/scripting/texts.lua	2014-05-24 16:01:14 +0000
@@ -7,18 +7,16 @@
 -- =========================
 
 include "scripting/formatting.lua"
+include "scripting/format_scenario.lua"
 
 -- =============
 -- Texts below
 -- =============
 scould_player = {
    title = _ "Nice And Easy Does It All the Time",
-   body = rt(p(_(
-[[I am sorry, but will I have to tear this down again. ]] ..
-[[We might need the space here later on. ]] ..
-[[If I am too slow for you, you might want to play a real game and just find everything out for yourself. ]] ..
-[[Otherwise, please bear with me, I am not the youngest and quickest anymore.]]
-      ))
+   body = rt(
+      p(_[[I am sorry, but will I have to tear this down again. We might need the space here later on. If I am too slow for you, you might want to play a real game and just find everything out for yourself. Otherwise, please bear with me, I am not the youngest and quickest anymore.]]
+      )
    )
 }
 
@@ -26,11 +24,8 @@
    title = _ "Welcome to the Widelands Tutorial!",
    body = rt(
       h1(_"Welcome to Widelands!") ..
-      p(_(
-[[Widelands is a slow-paced build-up strategy game with an emphasis on construction, not destruction. ]] ..
-[[This tutorial will guide you through the basics of the game.]])
-      ) .. p([[• ]] .. _[[Dismiss this box by left-clicking on the button below.]]
-      )
+      p(_[[Widelands is a slow-paced build-up strategy game with an emphasis on construction, not destruction. This tutorial will guide you through the basics of the game.]]) ..
+      listitem_bullet(_[[Dismiss this box by left-clicking on the button below.]])
    ),
 }
 initial_message_02 = {
@@ -39,37 +34,17 @@
    field = wl.Game().map.player_slots[1].starting_field,
    body = rt(
       h1(_"Let’s dive right in!") ..
-      p(_(
-[[There are three different tribes in Widelands: the Barbarians, the Empire and the Atlanteans. ]] ..
-[[All tribes have a different economy, strength and weaknesses, ]] ..
-[[but the general gameplay is the same for all. We will play the barbarians for now.]])
-      ) .. p(_(
-[[You will usually start the game with one headquarters. ]] ..
-[[This is the big building with the blue flag in front of it. ]] ..
-[[The headquarters is a warehouse that stores wares, workers and soldiers. ]] ..
-[[Some wares are needed for building houses, others for making other wares. ]] ..
-[[Obviously, the wares in the headquarters will not last forever, so you must make sure to replace them. ]] ..
-[[The most important wares in the early game are the basic construction wares: logs and raw stone. ]] ..
-[[Let’s make sure that we do not run out of logs. ]] ..
-[[For this, we need a lumberjack and a hut for him to stay in.]])
-      ) .. p(_(
-[[We need to find a nice place for the lumberjack’s hut. ]] ..
-[[To make this easier, we can activate ‘Show Building Spaces’. ]] ..
-[[There are two ways you can do this, either by clicking on the ‘Show Building Spaces’ button at the bottom of the screen, ]] ..
-[[which is the fourth one from the left. Or you can use the SPACE key to toggle it.]])
-      ) .. p([[• ]] .. _[[Left-click the ‘OK’ button to close this box and then try it.]]
-      )
+      p(_[[There are three different tribes in Widelands: the Barbarians, the Empire and the Atlanteans. All tribes have a different economy, strength and weaknesses, but the general gameplay is the same for all. We will play the barbarians for now.]]) ..
+      p(_[[You will usually start the game with one headquarters. This is the big building with the blue flag in front of it. The headquarters is a warehouse that stores wares, workers and soldiers. Some wares are needed for building houses, others for making other wares. Obviously, the wares in the headquarters will not last forever, so you must make sure to replace them. The most important wares in the early game are the basic construction wares: logs and raw stone. Let’s make sure that we do not run out of logs. For this, we need a lumberjack and a hut for him to stay in.]]) ..
+      p(_[[We need to find a nice place for the lumberjack’s hut. To make this easier, we can activate ‘Show Building Spaces’. There are two ways you can do this, either by clicking on the ‘Show Building Spaces’ button at the bottom of the screen, which is the fourth one from the left. Or you can use the SPACE key to toggle it.]]) ..
+      listitem_bullet(_[[Left-click the ‘OK’ button to close this box and then try it.]])
    ),
    obj_name = "enable_buildhelp",
    obj_title = _ "Enable the showing of building spaces",
-   obj_body = rt(h1(_"Show Building Spaces") ..
-      p(_(
-[[It is easier to understand what type of buildings can be built on which field ]] ..
-[[when the symbols for the building spaces are enabled.]]) )..
-      p([[• ]] ..
-_([[Do so now either by pressing SPACE or by clicking the fourth button from the left at the very bottom of the screen. ]] ..
-[[Right-click on this window and then give it a try.]])
-      )
+   obj_body = rt(
+      h1(_"Show Building Spaces") ..
+      p(_[[It is easier to understand what type of buildings can be built on which field when the symbols for the building spaces are enabled.]]) ..
+      listitem_bullet(_[[Do so now either by pressing SPACE or by clicking the fourth button from the left at the very bottom of the screen. Right-click on this window and then give it a try.]])
    )
 }
 
@@ -77,131 +52,94 @@
    title = _ "Lumberjack’s Spot",
    pos = "topright",
    field = first_lumberjack_field,
-   body = rt(p(_(
-[[There you go. I will explain about all those symbols in a minute. ]] ..
-[[First, let me show you how to make a lumberjack’s hut and how to connect it with a road. ]] ..
-[[There is a sweet spot for a lumberjack right next to those trees. ]] ..
-[[I’ll describe the steps I will take and then ask you to click on the ‘OK’ button for me to demonstrate.]])
-      )
+   body = rt(
+      p(_[[There you go. I will explain about all those symbols in a minute. First, let me show you how to make a lumberjack’s hut and how to connect it with a road. There is a sweet spot for a lumberjack right next to those trees. I’ll describe the steps I will take and then ask you to click on the ‘OK’ button for me to demonstrate.]])
    )
 }
 
 lumberjack_message_02 = {
    title = _ "Building the Lumberjack",
    pos = "topright",
-   body = rt(p(_(
-[[First, I’ll left-click on the symbol where I want the lumberjack’s hut to be built. ]] ..
-[[A window will appear where I can choose between buildings. ]] ..
-[[Because I’ll click a yellow house symbol – which means that its field can house medium and small buildings]] ..
-[[ – I am presented with all the medium buildings that I can build. ]] ..
-[[The lumberjack’s hut is a small building, so I will go on to select the small buildings tab. ]] ..
-[[Then I’ll choose the lumberjack’s hut.]])) ..
-      p([[• ]] ..
-_([[Click the ‘OK’ button to watch me. ]] ..
-[[I’ll go really slowly: I will click – then select the tab – and finally I’ll choose the building.]])
-    )
+   body = rt(
+      p(_[[First, I’ll left-click on the symbol where I want the lumberjack’s hut to be built. A window will appear where I can choose between buildings. Because I’ll click a yellow house symbol – which means that its field can house medium and small buildings – I am presented with all the medium buildings that I can build. The lumberjack’s hut is a small building, so I will go on to select the small buildings tab. Then I’ll choose the lumberjack’s hut.]]) ..
+      listitem_bullet(_[[Click the ‘OK’ button to watch me. I’ll go really slowly: I will click – then select the tab – and finally I’ll choose the building.]])
    )
 }
 
 lumberjack_message_03 = {
    title = _ "Building a Connecting Road",
    pos = "topright",
-   body = rt(p(_(
-[[That won’t do yet. I still need to connect the lumberjack’s hut to the rest of my road network. ]] ..
-[[After ordering the construction site, I was automatically put into road building mode, ]] ..
-[[so all I have to do is click on the blue flag in front of my headquarters.]])
-       )
+   body = rt(
+      p(_[[That won’t do yet. I still need to connect the lumberjack’s hut to the rest of my road network. After ordering the construction site, I was automatically put into road building mode, so all I have to do is click on the blue flag in front of my headquarters.]])
    )
 }
 
 lumberjack_message_04 = {
    title = _ "Waiting for the Lumberjack to Go Up",
    pos = "topright",
-   body = rt(p(_(
-[[Now watch closely while a builder leaves the headquarters and goes to the construction site. ]] ..
-[[Also, a carrier will take position in between the two blue flags and carry wares from one blue flag to the other.]])
-      )
+   body = rt(
+      p(_[[Now watch closely while a builder leaves the headquarters and goes to the construction site. Also, a carrier will take position in between the two blue flags and carry wares from one blue flag to the other.]])
    )
 }
 
 lumberjack_message_05 = {
    title = _ "Placing Another Flag",
    pos = "topright",
-   body = rt(p(_(
-[[Nice how they are working, isn’t it? But the poor carrier has a very long way to go. ]] ..
-[[We can make it easier for him (and more efficient for us) when we place another blue flag on the road.]])
-   ) .. p([[• ]] ..
-_([[You try it this time: click on the yellow flag symbol in between the two blue flags we just placed and then click on the]])
-      )) .. rt("image=pics/menu_build_flag.png", p(_ "build flag symbol.")
+   body = rt(
+      p(_[[Nice how they are working, isn’t it? But the poor carrier has a very long way to go. We can make it easier for him (and more efficient for us) when we place another blue flag on the road.]]) ..
+      listitem_bullet(_[[You try it this time: click on the yellow flag symbol in between the two blue flags we just placed and then click on the]])
+   ) ..
+   rt("image=pics/menu_build_flag.png", p(_ "build flag symbol.")
    ),
    obj_name = "build_flag_on_road_to_lumberjack",
    obj_title = _ "Build a flag to divide the road to the lumberjack",
-   obj_body = rt(h1(_"Build a Flag on the Road") .. p(_(
-[[The shorter your road segments are, the faster your wares will be transported. ]] ..
-[[You should therefore make sure that your roads have as many flags as possible.]])) ..
-      p([[• ]] ..
-_[[Build a blue flag now in the middle of the road that connects your headquarters to your lumberjack’s hut.]])
+   obj_body = rt(
+      h1(_"Build a Flag on the Road") ..
+      p(_[[The shorter your road segments are, the faster your wares will be transported. You should therefore make sure that your roads have as many flags as possible.]]) ..
+      listitem_bullet(_[[Build a blue flag now in the middle of the road that connects your headquarters to your lumberjack’s hut.]])
    )
 }
 
 lumberjack_message_06 = {
    title = _ "Waiting For the Hut to be Finished",
    pos = "topright",
-   body = rt(p(_
-[[Well done! Let’s wait till the hut is finished.]]) ..
-      p(_(
-[[If you want things to go faster, simply use the PAGE UP key on your keyboard to increase the game speed. ]] ..
-[[You can use PAGE DOWN to make the game slower again.]])
-      )
+   body = rt(
+      p(_[[Well done! Let’s wait till the hut is finished.]]) ..
+      p(_[[If you want things to go faster, simply use the PAGE UP key on your keyboard to increase the game speed. You can use PAGE DOWN to make the game slower again.]])
    )
 }
 
 lumberjack_message_07 = {
    title = _ "Lumberjack is Done",
    pos = "topright",
-   body = rt(p(_(
-[[Excellent. The lumberjack’s hut is done. ]] ..
-[[A lumberjack will now move in and start chopping down trees, so our logs income is secured for now. ]] ..
-[[Now on to the raw stone.]])
-      )
+   body = rt(
+      p(_[[Excellent. The lumberjack’s hut is done. A lumberjack will now move in and start chopping down trees, so our logs income is secured for now. Now on to the raw stone.]])
    )
 }
 
 inform_about_stones = {
    title = _ "Some Stones Were Found",
    body = rt(h1(_"Getting a Quarry Up.")) ..
-   rt(p(_(
-[[Stones can be mined in granite mines, but the easier way is to build a quarry next to some stones lying around. ]] ..
-[[As it happens, there is a pile of them just to the west (left) of your headquarters. ]] ..
-[[I will teach you now how to move your view over there.]])
-      ) .. p([[→ ]] ..
-_([[There are two ways to move your view. The first one is using the cursor keys on your keyboard. ]] ..
-[[Go ahead and try this out.]])) ..
-      p([[• ]] ..
-_[[Click the ‘OK’ button and then move the view using the cursor keys]]
-      )
+   rt(
+      p(_[[Stones can be mined in granite mines, but the easier way is to build a quarry next to some stones lying around. As it happens, there is a pile of them just to the west (left) of your headquarters. I will teach you now how to move your view over there.]]) ..
+      listitem_arrow(_[[There are two ways to move your view. The first one is using the cursor keys on your keyboard. Go ahead and try this out.]]) ..
+      listitem_bullet(_[[Click the ‘OK’ button and then move the view using the cursor keys]])
    ),
    obj_name = "move_view_with_cursor_keys",
    obj_title = _ "Move your view with the cursor keys",
-   obj_body = rt(h1(_"Moving Your View") .. p(_(
-[[Moving your view is essential to get a complete overview of your whole economy. ]] ..
-[[There are two ways to move your view in Widelands.]])) .. p(
-[[→ ]] .. _[[The first one is to use the cursor keys on your keyboard.]])
- .. p(
-[[→ ]] .. _([[The second one is the more common and faster one: press-and-hold the right mouse button anywhere on the map, ]] ..
-[[then move your mouse around and you’ll see the view scroll.]])
-      )
+   obj_body = rt(
+      h1(_"Moving Your View") ..
+      p(_[[Moving your view is essential to get a complete overview of your whole economy. There are two ways to move your view in Widelands.]]) ..
+      listitem_arrow(_[[The first one is to use the cursor keys on your keyboard.]]) ..
+      listitem_arrow(_[[The second one is the more common and faster one: press-and-hold the right mouse button anywhere on the map, then move your mouse around and you’ll see the view scroll.]])
    )
 }
 
 tell_about_right_drag_move = {
    title = _ "Other Ways to Move the View",
-   body = rt(p(_
-[[Excellent. Now there is a faster way to move, using the mouse instead:]]
-   ) .. p([[• ]] ..
-_([[Simply right-click-and-hold anywhere on the map, ]] ..
-[[then drag the mouse and instead of the cursor, the view will be moved. Try it.]])
-      )
+   body = rt(
+      p(_[[Excellent. Now there is a faster way to move, using the mouse instead:]]) ..
+      listitem_bullet(_[[Simply right-click-and-hold anywhere on the map, then drag the mouse and instead of the cursor, the view will be moved. Try it.]])
    ),
    obj_name = "move_view_with_mouse",
    obj_title = _ "Move your view with the mouse",
@@ -210,53 +148,35 @@
 
 congratulate_and_on_to_quarry = {
    title = _ "Onward to the Quarry",
-   body = rt(p(_
-[[Great. Now about that quarry...]]
-      )
-   )
+   body = rt(p(_[[Great. Now about that quarry...]]))
 }
 
 order_quarry_recap_how_to_build = {
    field = first_quarry_field,
    pos = "topright",
    title = _ "How to Build a Quarry",
-   body = rt(p(_
-[[Build a quarry next to those stones here. Remember how I did it earlier?]]
-) .. p(_(
-[[Make sure that you are showing the building spaces, then just click on the space were you want the building to be, ]] ..
-[[choose it from the window that appears and it is placed. ]] ..
-[[Maybe this is a good time to explain about all those building space symbols we activated earlier.]])
-   ) .. p(_(
-[[You can build four things on fields in Widelands: Flags, small houses, medium houses and big houses. ]] ..
-[[But not every field can hold everything. The build space symbols ease recognition:]])
-   )) .. rt("image=pics/big.png", p(_
-[[Everything can be built on the green house symbol.]]
-   )) .. rt("image=pics/medium.png", p(_
-[[Everything except for big buildings can be built on a yellow house symbol.]]
-   )) .. rt("image=pics/small.png", p(_
-[[Red building symbols can only hold small buildings and flags.]]
-   )) .. rt("image=pics/set_flag.png", p(_
-[[And finally the yellow flag symbol only allows for flags.]]
-   )) .. rt(p(_(
-[[If you place something on a field, the surrounding fields might have less space for holding buildings, ]] ..
-[[so choose your fields wisely.]])
-   )) .. rt(p([[• ]] ..
-_([[Now go ahead, try it. ]] ..
-[[The quarry is a small building, so if you click on a medium or big building symbol, ]] ..
-[[you will have to select the small buildings tab first to find it. Go on, check it out!]])
-      )
+   body = rt(
+      p(_[[Build a quarry next to those stones here. Remember how I did it earlier?]]) ..
+      p(_[[Make sure that you are showing the building spaces, then just click on the space were you want the building to be, choose it from the window that appears and it is placed. Maybe this is a good time to explain about all those building space symbols we activated earlier.]]) ..
+      p(_[[You can build four things on fields in Widelands: Flags, small houses, medium houses and big houses. But not every field can hold everything. The build space symbols ease recognition:]])
+   ) ..
+   rt("image=pics/big.png", p(_[[Everything can be built on the green house symbol.]])) ..
+   rt("image=pics/medium.png", p(_[[Everything except for big buildings can be built on a yellow house symbol.]])) ..
+   rt("image=pics/small.png", p(_[[Red building symbols can only hold small buildings and flags.]])) ..
+   rt("image=pics/set_flag.png", p(_[[And finally the yellow flag symbol only allows for flags.]])) ..
+   rt(
+      p(_[[If you place something on a field, the surrounding fields might have less space for holding buildings, so choose your fields wisely.]])
+   ) ..
+   rt(
+      listitem_bullet(_[[Now go ahead, try it. The quarry is a small building, so if you click on a medium or big building symbol, you will have to select the small buildings tab first to find it. Go on, check it out!]])
    ),
    obj_name = "build_a_quarry",
    obj_title = _ "Build a quarry next to the stones",
-   obj_body = rt(h1(_ "Build a Quarry") .. p([[• ]] ..
-_[[There are some stones to the west of your headquarters. Build a quarry right next to them.]]) .. p(
-[[→ ]] .. _([[The quarry is a small building like the lumberjack’s hut. ]] ..
-[[You can therefore build it on any field that shows a red, ]] ..
-[[yellow or green house when the building spaces symbols are enabled (Press SPACE for that).]]
-   )) .. p([[→ ]] ..
-_([[Just click on any house symbol next to the stones, select the small buildings tab in the window ]] ..
-[[that opens up, then click on the quarry symbol.]])
-      )
+   obj_body = rt(
+      h1(_ "Build a Quarry") ..
+      listitem_bullet(_[[There are some stones to the west of your headquarters. Build a quarry right next to them.]]) ..
+      listitem_arrow(_[[The quarry is a small building like the lumberjack’s hut. You can therefore build it on any field that shows a red, yellow or green house when the building spaces symbols are enabled (Press SPACE for that).]]) ..
+      listitem_arrow(_[[Just click on any house symbol next to the stones, select the small buildings tab in the window that opens up, then click on the quarry symbol.]])
    )
 }
 
@@ -264,131 +184,81 @@
    pos = "topright",
    field = wl.Game().map:get_field(9,12),
    title = _ "Road Building",
-   body = rt(p(_(
-[[Excellent! Directly after placing the building, you have been switched into road building mode. ]] ..
-[[The new road will start at the flag in front of your newly placed construction site. ]] ..
-[[You can enter road building mode for any flag by left-clicking on a flag and selecting]])
-      )) .. rt("image=pics/menu_build_way.png", p(_
-[[the road building symbol.]]
-      )) .. rt(p(_(
-[[If you decide you do not want to build a road at this time, you can cancel road building ]] ..
-[[by clicking on the starting flag of the road and selecting]])
-      )) .. rt("image=pics/menu_abort.png", p(_
-[[the abort symbol.]]
-      )) .. rt(p(_(
-[[Now, about this road. Remember: we are already in road building mode since you just ordered the quarry. ]] ..
-[[You can either make it longer by one field at a time by left-clicking multiple times on neighboring fields ]] ..
-[[for perfect control over the route the road takes like so:]])
-      ))
+   body = rt(
+      p(_[[Excellent! Directly after placing the building, you have been switched into road building mode. The new road will start at the flag in front of your newly placed construction site. You can enter road building mode for any flag by left-clicking on a flag and selecting]])
+      ) ..
+   rt("image=pics/menu_build_way.png", p(_[[the road building symbol.]])) ..
+   rt(
+      p(_[[If you decide you do not want to build a road at this time, you can cancel road building by clicking on the starting flag of the road and selecting]])) ..
+   rt("image=pics/menu_abort.png", p(_[[the abort symbol.]])) ..
+   rt(
+      p(_[[Now, about this road. Remember: we are already in road building mode since you just ordered the quarry. You can either make it longer by one field at a time by left-clicking multiple times on neighboring fields for perfect control over the route the road takes like so:]])
+   )
 }
 
 talk_about_roadbuilding_01 = {
    pos = "topright",
    field = wl.Game().map:get_field(9,12),
    title = _ "Road Building",
-   body = rt(p(_
-[[Or, you can directly click the flag where the road should end like so:]]
-   ))
+   body = rt(p(_[[Or, you can directly click the flag where the road should end like so:]]))
 }
 
 talk_about_roadbuilding_02 = {
    pos = "topright",
    title = _ "Road Building",
-   body = rt(p(_(
-[[One more thing: around the field where your road would end, you can see different markers. ]] ..
-[[They have the following meaning:]])
-      )) .. rt("image=pics/roadb_green.png", p(_
-[[The terrain is flat here. Your carriers will be very swift on this terrain.]]
-   )) .. rt("image=pics/roadb_yellow.png", p(_(
-[[There is a small slope to climb to reach this field. ]] ..
-[[This means that your workers will be faster walking downhill than they will be walking uphill.]])
-   )) .. rt("image=pics/roadb_red.png", p(_(
-[[The connection between the fields is extremely steep. ]] ..
-[[The speed increase in one direction is huge while the slowdown in the other is also substantial.]])
-   )) .. rt(p(_(
-[[Keep the slopes in mind while placing roads and use them to your advantage. ]] ..
-[[Also, try to keep roads as short as possible and always remember to place ]] ..
-[[as many flags as you can on road segments to share the load better.]])
-   )) .. rt(p([[• ]] ..
-_([[Now please rebuild the road between your quarry and your headquarters. ]] ..
-[[We’ll wait until the quarry is completed.]])
-   )),
+   body = rt(
+      p(_[[One more thing: around the field where your road would end, you can see different markers. They have the following meaning:]])
+   ) ..
+   rt("image=pics/roadb_green.png", p(_[[The terrain is flat here. Your carriers will be very swift on this terrain.]])) ..
+   rt("image=pics/roadb_yellow.png", p(_[[There is a small slope to climb to reach this field. This means that your workers will be faster walking downhill than they will be walking uphill.]])) ..
+   rt("image=pics/roadb_red.png", p(_[[The connection between the fields is extremely steep. The speed increase in one direction is huge while the slowdown in the other is also substantial.]])) ..
+   rt(
+      p(_[[Keep the slopes in mind while placing roads and use them to your advantage. Also, try to keep roads as short as possible and always remember to place as many flags as you can on road segments to share the load better.]]) ..
+      listitem_bullet(_[[Now please rebuild the road between your quarry and your headquarters. We’ll wait until the quarry is completed.]])
+   ),
    obj_name = "build_road_to_quarry",
    obj_title = _ "Connect the quarry to the headquarters",
-   obj_body = rt(h1(_"Connect Your Construction Site") .. p(_(
-[[Connect your quarry construction site to your headquarters with a road. ]] ..
-[[You would have been put directly into road building mode after ordering a new site. But now, you aren’t.]])) ..
-      p([[→ ]] ..
-_([[To build a completely new road, just click on the flag in front of your construction site, ]] ..
-[[click on the build road icon and then click on the flag in front of your headquarters. ]] ..
-[[Wait for the completion of the quarry.]])
-      )
+   obj_body = rt(
+      h1(_"Connect Your Construction Site") ..
+      p(_[[Connect your quarry construction site to your headquarters with a road. You would have been put directly into road building mode after ordering a new site. But now, you aren’t.]]) ..
+      listitem_arrow(_[[To build a completely new road, just click on the flag in front of your construction site, click on the build road icon and then click on the flag in front of your headquarters. Wait for the completion of the quarry.]])
    )
 }
 
 census_and_statistics_00 = {
    title = _ "Census and Statistics",
-   body = rt(p(_(
-[[While we wait, I’ll quickly show you another useful feature. ]] ..
-[[All construction sites look the same, and some buildings look alike. It is sometimes hard to tell them apart. ]] ..
-[[Widelands offers a feature to show label texts over the buildings. ]] ..
-[[They are called the ‘census’ and you can toggle them via the ‘c’ key or via the button on the ‘Watch’ tab of any field.]])
-    ) .. p(_(
-[[Similar to this are the building statistics, which are also toggled via a button on the ‘Watch’ tab of any field. ]] ..
-[[The hotkey for it is ‘s’. This will display information about the productivity of buildings ]] ..
-[[or the progress of construction sites.]])
-   ) .. p(_(
-[[Let me quickly enable these two for you. Remember: ‘c’ and ‘s’ are the keys. ]] ..
-[[Alternatively, you can click on any field without a building on it, ]] ..
-[[select the watch tab and then click on the corresponding buttons.]])
+   body = rt(
+      p(_[[While we wait, I’ll quickly show you another useful feature. All construction sites look the same, and some buildings look alike. It is sometimes hard to tell them apart. Widelands offers a feature to show label texts over the buildings. They are called the ‘census’ and you can toggle them via the ‘c’ key or via the button on the ‘Watch’ tab of any field.]]) ..
+      p(_[[Similar to this are the building statistics, which are also toggled via a button on the ‘Watch’ tab of any field. The hotkey for it is ‘s’. This will display information about the productivity of buildings or the progress of construction sites.]]) ..
+      p(_[[Let me quickly enable these two for you. Remember: ‘c’ and ‘s’ are the keys. Alternatively, you can click on any field without a building on it, select the watch tab and then click on the corresponding buttons.]])
    )
-)
 }
 
 census_and_statistics_01 = {
    title = _ "Census and Statistics",
-   body = rt(p(_
-[[Now we know what’s going on. Let’s wait for this quarry to finish.]]
-   )
-)
+   body = rt(p(_[[Now we know what’s going on. Let’s wait for this quarry to finish.]]))
 }
 
 teaching_about_messages = {
    popup = true,
    title = _ "Introducing Messages",
-   body = rt(h1(_"Messages") ..
-      p(_(
-[[Hi, it’s me again! This time, I have sent you a message. ]] ..
-[[Messages are sent to you by Widelands to inform you about important events: empty mines, attacks on your tribe, ]] ..
-[[won or lost military buildings, resources found...]]
-      )) .. p(_(
-[[The message window can be toggled by the button on the very right at the bottom of the screen. ]] ..
-[[This button will also change appearance whenever new messages are available, ]] ..
-[[but there is also a bell sound played whenever you receive a new message.]]
-      )) .. p(_(
-[[You have two messages at the moment. ]] ..
-[[This one, which you are currently reading, and the one that informed you that a new headquarters ]] ..
-[[was added to your economy. Let’s learn how to archive messages: ]] ..
-[[You can check them off in your inbox so that they get a tick-symbol in front of them. ]] ..
-[[Then, you can click the]]
-      ))) .. rt("image=pics/message_archive.png", p(_
-[[archive message button to move them into your archive.]]
-      )) .. rt(p([[• ]] ..
-_[[Archive all messages that you currently have in your inbox, including this one.]]
-      )
+   body = rt(
+      h1(_"Messages") ..
+      p(_[[Hi, it’s me again! This time, I have sent you a message. Messages are sent to you by Widelands to inform you about important events: empty mines, attacks on your tribe, won or lost military buildings, resources found...]]) ..
+      p(_[[The message window can be toggled by the button on the very right at the bottom of the screen. This button will also change appearance whenever new messages are available, but there is also a bell sound played whenever you receive a new message.]]) ..
+      p(_[[You have two messages at the moment. This one, which you are currently reading, and the one that informed you that a new headquarters was added to your economy. Let’s learn how to archive messages: You can check them off in your inbox so that they get a tick-symbol in front of them. Then, you can click the]])
+   ) ..
+   rt("image=pics/message_archive.png", p(_[[archive message button to move them into your archive.]])) ..
+   rt(
+      listitem_bullet(_[[Archive all messages that you currently have in your inbox, including this one.]])
    ),
    obj_name = "archive_all_messages",
    obj_title = _"Archive all messages in your inbox",
-   obj_body = rt(h1(_"Archive Your Inbox Messages") .. p(_(
-[[The message window is central to fully controlling your tribe’s fortune. ]] ..
-[[However, you will get a lot of messages in a real game. ]] ..
-[[To keep your head straight, you should try to keep the inbox empty. ]])
-      ) .. p([[• ]] ..
-_[[Archive all your messages in your inbox now.]]
-      ) .. p([[→ ]] ..
-_([[To do so, open the message window by pressing ‘n’ or clicking the rightmost button at the very bottom of the screen. ]] ..
-[[Then mark all messages by checking the check box in front of them. Then, click the ‘Archive All’ button.]])
-      )
+   obj_body = rt(
+      h1(_"Archive Your Inbox Messages") ..
+      p(_[[The message window is central to fully controlling your tribe’s fortune. However, you will get a lot of messages in a real game. To keep your head straight, you should try to keep the inbox empty. ]]) ..
+      listitem_bullet(_[[Archive all your messages in your inbox now.]]) ..
+      listitem_arrow(_[[To do so, open the message window by pressing ‘n’ or clicking the rightmost button at the very bottom of the screen. Then mark all messages by checking the check box in front of them. Then, click the ‘Archive All’ button.]])
    )
 }
 
@@ -396,21 +266,16 @@
    pos = "topright",
    field = first_quarry_field,
    title = _"Closing Windows",
-   body = rt(p(_(
-[[Excellent. By the way: closing windows in Widelands is as easy as right-clicking on them. ]] ..
-[[This will work with all windows except for story message windows like this one. Go ahead and try it.]])
-      ) .. p([[• ]] ..
-_[[First, close this window by pressing the button below, then right-click into the messages window to close it.]]
-      )
+   body = rt(
+      p(_[[Excellent. By the way: closing windows in Widelands is as easy as right-clicking on them. This will work with all windows except for story message windows like this one. Go ahead and try it.]]) ..
+      listitem_bullet(_[[First, close this window by pressing the button below, then right-click into the messages window to close it.]])
    ),
    obj_name = "close_message_window",
    obj_title = _ "Close the messages window",
-   obj_body = rt(h1(_"Close the Messages Window") .. p(_(
-[[All windows in Widelands can be closed by right-clicking into them. ]] ..
-[[Some windows can also be toggled with the buttons at the very bottom of the screen.]])
-      ) .. p([[• ]] ..
-_[[Close the messages window now by right-clicking into it.]]
-      )
+   obj_body = rt(
+      h1(_"Close the Messages Window") ..
+      p(_[[All windows in Widelands can be closed by right-clicking into them. Some windows can also be toggled with the buttons at the very bottom of the screen.]]) ..
+      listitem_bullet(_[[Close the messages window now by right-clicking into it.]])
    )
 }
 
@@ -418,273 +283,160 @@
    pos = "topright",
    field = first_quarry_field,
    title = _ "Closing Windows",
-   body = rt(p(_(
-[[Well done! Let’s see how messages work in a real game, shall we? ]] ..
-[[For this, I’ll take all stones away from the poor stonemason in the quarry. ]] ..
-[[He will then send a message that he can’t find any in his working area the next time he tries to do some work.]])
-      )
+   body = rt(
+      p(_[[Well done! Let’s see how messages work in a real game, shall we? For this, I’ll take all stones away from the poor stonemason in the quarry. He will then send a message that he can’t find any in his working area the next time he tries to do some work.]])
    )
 }
 
 conclude_messages = {
    pos = "topright",
    title = _ "Message Arrived!",
-   body = rt(p(_(
-[[A message has been sent to you. See how the button at the bottom of the screen has changed appearance? ]] ..
-[[You can burn this quarry down now as it is no longer of any use and just blocking space.]])
-      ) .. p([[• ]] ..
-_[[To do that, click on the quarry and select the destroy button.]]
-   ))
+   body = rt(
+      p(_[[A message has been sent to you. See how the button at the bottom of the screen has changed appearance? You can burn this quarry down now as it is no longer of any use and just blocking space.]]) ..
+      listitem_bullet(_[[To do that, click on the quarry and select the destroy button.]])
+   )
 }
 
 introduce_expansion = {
    title = _ "Expanding Your Territory!",
-   body = rt(p(_(
-[[There is one more thing I’d like to teach you now: Expanding your territory. ]] ..
-[[The place that we started with around our headquarters is barely enough for a basic building infrastructure, ]] ..
-[[and we do not have access to mountains, which we need to mine minerals and coal. So, we have to expand our territory.]])
-      ) .. p(_(
-[[Expanding is as simple as building a military building at the edge of your territory. ]] ..
-[[The barbarians have a selection of different military buildings: ]] ..
-[[sentries, barriers, donjons, fortresses and citadels. ]] ..
-[[The bigger the building, the more expensive it is to build, but the more land it will conquer around itself ]] ..
-[[and the more soldiers can be stationed there. ]] ..
-[[The buildings also vary in their vision range: buildings with a tower see farther than others.]])
-      ) .. p(_(
-[[As soon as a military building is manned, it will extend your land. ]] ..
-[[You can then burn it down again if you need the space. ]] ..
-[[But note that your land is then vulnerable: any military site from another player could conquer the land. ]] ..
-[[You therefore need military sites to keep military influence over your land.]])
-      ) .. p([[• ]] ..
-_[[Let’s try it out now: build a few military buildings on your south-western border.]]
-      ) .. p([[→ ]] ..
-_([[We want to capture some of this mountain so we can search for resources there. ]] ..
-[[Bigger buildings will conquer more land, which can be beneficial close to mountains, ]] ..
-[[because you can’t build houses on mountains.]])
-      )
+   body = rt(
+      p(_[[There is one more thing I’d like to teach you now: Expanding your territory. The place that we started with around our headquarters is barely enough for a basic building infrastructure, and we do not have access to mountains, which we need to mine minerals and coal. So, we have to expand our territory.]]) ..
+      p(_[[Expanding is as simple as building a military building at the edge of your territory. The barbarians have a selection of different military buildings: sentries, barriers, donjons, fortresses and citadels. The bigger the building, the more expensive it is to build, but the more land it will conquer around itself and the more soldiers can be stationed there. The buildings also vary in their vision range: buildings with a tower see farther than others.]]) ..
+      p(_[[As soon as a military building is manned, it will extend your land. You can then burn it down again if you need the space. But note that your land is then vulnerable: any military site from another player could conquer the land. You therefore need military sites to keep military influence over your land.]]) ..
+      listitem_bullet(_[[Let’s try it out now: build a few military buildings on your south-western border.]]) ..
+      listitem_arrow(_[[We want to capture some of this mountain so we can search for resources there. Bigger buildings will conquer more land, which can be beneficial close to mountains, because you can’t build houses on mountains.]])
    ),
    obj_name = "conquer_mountain",
    obj_title = _ "Conquer an area were we can build mines",
-   obj_body = rt(h1(_"Conquer the Mountain to the South-West") .. p(_(
-[[For a full-fledged economy, we need coal, iron and gold. These can be found in mountains. ]] ..
-[[Conquer some area on the mountains to the south-west of your headquarters ]] ..
-[[by building some military buildings close to your border.]])
-      ) .. p([[→ ]] ..
-_([[You can choose from the following military buildings: sentry, donjon, barrier and fortress. ]] ..
-[[The bigger the building, the more expensive it is to build it, but it will also conquer a bigger region. ]] ..
-[[Sometimes, it is useful to build a big military building next to a mountain ]] ..
-[[so that you can reach building sites farther up.]])
-      )
+   obj_body = rt(
+      h1(_"Conquer the Mountain to the South-West") ..
+      p(_[[For a full-fledged economy, we need coal, iron and gold. These can be found in mountains. Conquer some area on the mountains to the south-west of your headquarters by building some military buildings close to your border.]]) ..
+      listitem_arrow(_[[You can choose from the following military buildings: sentry, donjon, barrier and fortress. The bigger the building, the more expensive it is to build it, but it will also conquer a bigger region. Sometimes, it is useful to build a big military building next to a mountain so that you can reach building sites farther up.]])
    )
 }
 
 mining_00 = {
    pos = "topright",
    title = _ "Searching for Resources",
-   body = rt(p(_(
-[[Okay, now we own some of the area on this mountain. ]] ..
-[[Mountains are very important, because they contain resources: coal, iron ore, gold ore and granite. ]] ..
-[[Each tribe uses the resources differently, but all need mines to extract the resources from the ground.]])
-      ) .. p(_(
-[[Let’s search for resources in this mountain. First, we’ll build a road onto the mountain and place a flag. ]] ..
-[[Then, we will click on the flag and call a geologist to it. I’ll show you how it’s done.]])
+   body = rt(
+      p(_[[Okay, now we own some of the area on this mountain. Mountains are very important, because they contain resources: coal, iron ore, gold ore and granite. Each tribe uses the resources differently, but all need mines to extract the resources from the ground.]]) ..
+      p(_[[Let’s search for resources in this mountain. First, we’ll build a road onto the mountain and place a flag. Then, we will click on the flag and call a geologist to it. I’ll show you how it’s done.]])
    )
-)
 }
 
 mining_01 = {
    pos = "topright",
    title = _"Waiting for the Geologist",
-   body = rt(p(_(
-[[The geologist will arrive at the flag shortly and start investigating the area in his surroundings. ]] ..
-[[He will place the following markers for the various resources:]])
-   )) ..
+   body = rt(
+      p(_[[The geologist will arrive at the flag shortly and start investigating the area in his surroundings. He will place the following markers for the various resources:]])
+   ) ..
    rt("image=tribes/barbarians/resi_coal1/resi_00.png", p(_ "a bit of coal")) ..
    rt("image=tribes/barbarians/resi_coal2/resi_00.png", p(_ "a lot of coal")) ..
    rt("image=tribes/barbarians/resi_iron1/resi_00.png", p(_ "a bit of iron")) ..
    rt("image=tribes/barbarians/resi_iron2/resi_00.png", p(_ "a lot of iron")) ..
    rt("image=tribes/barbarians/resi_gold1/resi_00.png", p(_ "a bit of gold")) ..
    rt("image=tribes/barbarians/resi_gold2/resi_00.png", p(_ "a lot of gold")) ..
-   rt("image=tribes/barbarians/resi_granit1/resi_00.png",
-      p(_ "a bit of granite")) ..
-   rt("image=tribes/barbarians/resi_granit2/resi_00.png",
-      p(_ "a lot of granite")) ..
+   rt("image=tribes/barbarians/resi_granit1/resi_00.png", p(_ "a bit of granite")) ..
+   rt("image=tribes/barbarians/resi_granit2/resi_00.png", p(_ "a lot of granite")) ..
    rt("image=tribes/barbarians/resi_water1/resi_00.png", p(_ "water")) ..
-   rt("image=tribes/barbarians/resi_none/resi_00.png",
-      p(_ "nothing was found here"))
-   .. rt(p(_
-[[Let’s wait and see what the geologist finds on the mountain.]]
-   )
-)
+   rt("image=tribes/barbarians/resi_none/resi_00.png", p(_ "nothing was found here")) ..
+   rt(p(_[[Let’s wait and see what the geologist finds on the mountain.]]))
 }
 
 mining_02 = {
    pos = "topright",
    title = _ "Mining Conclusion",
-   body = rt(p(_(
-[[So our geologist found a lot of coal on this mountain. ]] ..
-[[You should therefore build a coal mine here. Building a mine is like building a house. ]] ..
-[[The building space symbol for where a mine can be built is]])
-   )) .. rt("image=pics/mine.png", p(_"this one.")) ..
-   rt(p(_(
-[[Note that a mine needs rations to work. ]] ..
-[[Rations are produced in taverns, and taverns need meat, pitta bread, and fish to produce them. ]] ..
-[[You will need a lot more infrastructure to get your mines working well. ]] ..
-[[This infrastructure also varies from tribe to tribe. ]] ..
-[[We will explain them to you in the introduction campaigns for the three tribes.]])
+   body = rt(
+      p(_[[So our geologist found a lot of coal on this mountain. You should therefore build a coal mine here. Building a mine is like building a house. The building space symbol for where a mine can be built is]])
+   ) ..
+   rt("image=pics/mine.png", p(_"this one.")) ..
+   rt(
+      p(_[[Note that a mine needs rations to work. Rations are produced in taverns, and taverns need meat, pitta bread, and fish to produce them. You will need a lot more infrastructure to get your mines working well. This infrastructure also varies from tribe to tribe. We will explain them to you in the introduction campaigns for the three tribes.]])
    )
-)
 }
 
 warfare_and_training_00 = {
    title = _ "Warfare and Training",
-   body = rt(h1(_ "Soldiers and Warfare") .. p(_(
-[[On to the last topic now. We are going to talk about soldiers, their training and their profession: warfare. ]] ..
-[[As I mentioned, Widelands is about building up, not burning down: ]] ..
-[[therefore, warfare is also more focused on economics than on military strategies.]]
-      )) .. p(_(
-[[Nevertheless, warfare offers one way of challenging other players, ]] ..
-[[and it has some game mechanics that deserve explanation. ]] ..
-[[The economies of the tribes are explained in their individual tutorial campaigns. ]]
-      )) .. p(_(
-[[Ok, I am going to create a little training ground for us with a training camp and a warehouse to the north east of here.]]))
- .. p(_(
-[[If you want to come back to this south-western part of your realm, ]] ..
-[[just scroll here via right-button scrolling or open the minimap by clicking on the]])
-         )) .. rt("image=pics/menu_toggle_minimap.png", p(_(
-[[minimap button at the bottom of the screen.]]
-      )) .. p(_(
-[[Alternatively, you could also press ‘m’ on your keyboard.]])
-         )) .. (rt(p(_(
-[[The minimap shows the complete map in miniature. You can directly jump to any field by left-clicking on it. ]] ..
-[[You can also toggle buildings, roads, flags and player indicators on and off inside the minimap.]])
-         ) .. p(_(
-[[But I digress. Back to soldiers. What was I about to do? ]] ..
-[[Oh yes, I wanted to build a small training scenario for you. Let’s do that now.]])
-         )
-      )
+   body = rt(
+      h1(_ "Soldiers and Warfare") ..
+      p(_[[On to the last topic now. We are going to talk about soldiers, their training and their profession: warfare. As I mentioned, Widelands is about building up, not burning down: therefore, warfare is also more focused on economics than on military strategies.]]) ..
+      p(_[[Nevertheless, warfare offers one way of challenging other players, and it has some game mechanics that deserve explanation. The economies of the tribes are explained in their individual tutorial campaigns.]]) ..
+      p(_[[Ok, I am going to create a little training ground for us with a training camp and a warehouse to the north east of here.]]) ..
+      p(_[[If you want to come back to this south-western part of your realm, just scroll here via right-button scrolling or open the minimap by clicking on the]])
+   ) ..
+   rt("image=pics/menu_toggle_minimap.png", p(_[[minimap button at the bottom of the screen.]]) ..
+      p(_[[Alternatively, you could also press ‘m’ on your keyboard.]])
+   ) ..
+   rt(
+      p(_[[The minimap shows the complete map in miniature. You can directly jump to any field by left-clicking on it. You can also toggle buildings, roads, flags and player indicators on and off inside the minimap.]]) ..
+      p(_[[But I digress. Back to soldiers. What was I about to do? Oh yes, I wanted to build a small training scenario for you. Let’s do that now.]])
    )
 }
 
 warfare_and_training_01 = {
    pos = "topright",
    title = _ "Trainings Camp and Soldier Stats",
-   body = rt(p(_(
-[[Here we go. Take a look at the soldiers that are on their way into our training camp. ]] ..
-[[They look different from normal workers: they have a health bar over their head ]] ..
-[[that displays their remaining health, and they have four symbols, ]] ..
-[[which symbolize the individual soldier’s current levels in the four different categories ]] ..
-[[health, attack, defense and evade.]])
-      ) .. p(_(
-[[A soldier is created like any normal worker: ]] ..
-[[a carrier grabs a tool in a warehouse as soon as a request for a certain profession is not fulfilled. ]] ..
-[[The tool to create a barbarian soldier is an ax. Newly created soldiers are of level 0. ]] ..
-[[To make soldiers better in any of the four categories, training is needed.]])
-      ) .. p(_(
-[[Training happens in training sites like the training camp or the battle arena: ]] ..
-[[soldiers go there (as our little fellows are currently doing), ]] ..
-[[consume some wares and advance a level in one category. If a barbarian soldier is fully trained, ]] ..
-[[he has level 3 health, level 5 attack, level 0 defense and level 2 evade. This is one fearsome warrior then! ]] ..
-[[The individual statistics have the following meaning:]])
-      ) .. h2(_"Health:") .. p(_(
-[[The total life of a soldier. A barbarian soldier starts with ~130 health points, ]] ..
-[[and with each health level he gains 28 health points.]])
-      ) .. h2(_"Attack:") .. p(_(
-[[The amount of damage a soldier will inflict on the enemy when an attack is successful. ]] ..
-[[A barbarian soldier with attack level 0 inflicts ~14 points of health damage when he succeeds in hitting an enemy. ]] ..
-[[For each attack level, he gains 7 damage points.]])
-      ) .. h2(_"Defense:") .. p(_(
-[[Defense is the value that is subtracted from the attack value. ]] ..
-[[The barbarians cannot train in this skill and therefore have always defense level 0, ]] ..
-[[which means that they always get 3 points subtracted from the damage inflicted. ]] ..
-[[If an attacker with an attack value of 15 points hits a barbarian soldier, the barbarian will lose 15 - 3 = 12 health. ]] ..
-[[The 3 points are subtracted because of the defense ability.]])
-      ) .. h2(_"Evade:") .. p(_(
-[[Evade is the chance that the soldier is able to dodge an attack. ]] ..
-[[It is 25% for a level 0 evade barbarian and increases in steps of 15% for each level.]])
-      )
+   body = rt(
+      p(_[[Here we go. Take a look at the soldiers that are on their way into our training camp. They look different from normal workers: they have a health bar over their head that displays their remaining health, and they have four symbols, which symbolize the individual soldier’s current levels in the four different categories health, attack, defense and evade.]]) ..
+      p(_[[A soldier is created like any normal worker: a carrier grabs a tool in a warehouse as soon as a request for a certain profession is not fulfilled. The tool to create a barbarian soldier is an ax. Newly created soldiers are of level 0. To make soldiers better in any of the four categories, training is needed.]]) ..
+      p(_[[Training happens in training sites like the training camp or the battle arena: soldiers go there (as our little fellows are currently doing), consume some wares and advance a level in one category. If a barbarian soldier is fully trained, he has level 3 health, level 5 attack, level 0 defense and level 2 evade. This is one fearsome warrior then! The individual statistics have the following meaning:]]) ..
+      h2(_"Health:") ..
+      p(_[[The total life of a soldier. A barbarian soldier starts with ~130 health points, and with each health level he gains 28 health points.]]) ..
+      h2(_"Attack:") ..
+      p(_[[The amount of damage a soldier will inflict on the enemy when an attack is successful. A barbarian soldier with attack level 0 inflicts ~14 points of health damage when he succeeds in hitting an enemy. For each attack level, he gains 7 damage points.]]) ..
+      h2(_"Defense:") ..
+      p(_[[Defense is the value that is subtracted from the attack value. The barbarians cannot train in this skill and therefore have always defense level 0, which means that they always get 3 points subtracted from the damage inflicted. If an attacker with an attack value of 15 points hits a barbarian soldier, the barbarian will lose 15 - 3 = 12 health. The 3 points are subtracted because of the defense ability.]]) ..
+      h2(_"Evade:") ..
+      p(_[[Evade is the chance that the soldier is able to dodge an attack. It is 25% for a level 0 evade barbarian and increases in steps of 15% for each level.]])
    )
 }
 
 enhance_fortress = {
    pos = "topright",
    title = _ "Enhance This Fortress",
-   body = rt(h1(_ "Enhancing Buildings") .. p(_(
-[[I will create an enemy for you soon, but first let’s make sure you are prepared. ]] ..
-[[This fortress is already quite strong and conquers a lot of space. ]] ..
-[[But there is an even bigger building: the citadel.]])
-      ) .. p(_(
-[[Citadels cannot be built directly. ]] ..
-[[Instead, you will have to construct a fortress first and then enhance it to a citadel. ]] ..
-[[To do so, click on the fortress, then choose the ‘Enhance to Citadel’ button. ]] ..
-[[Your soldiers will leave the fortress while the construction is going on. ]] ..
-[[This means that your fortress will lose its military influence. If an enemy occupies a military building nearby, ]] ..
-[[your construction site will burn down. No sweat, that won’t happen here.]])
-      ) .. p([[• ]] ..
-_[[Enhance your fortress to a citadel now.]]
-      ) .. p([[→ ]] ..
-_([[Remember that you can speed time up by using PAGE_UP. ]] ..
-[[Building a citadel takes a while.]])
-      )
+   body = rt(
+      h1(_ "Enhancing Buildings") ..
+      p(_[[I will create an enemy for you soon, but first let’s make sure you are prepared. This fortress is already quite strong and conquers a lot of space. But there is an even bigger building: the citadel.]]) ..
+      p(_[[Citadels cannot be built directly. Instead, you will have to construct a fortress first and then enhance it to a citadel. To do so, click on the fortress, then choose the ‘Enhance to Citadel’ button. Your soldiers will leave the fortress while the construction is going on. This means that your fortress will lose its military influence. If an enemy occupies a military building nearby, your construction site will burn down. No sweat, that won’t happen here.]]) ..
+      listitem_bullet(_[[Enhance your fortress to a citadel now.]]) ..
+      listitem_arrow(_[[Remember that you can speed time up by using PAGE_UP. Building a citadel takes a while.]])
    ),
    obj_name = "enhance_fortress",
    obj_title = _"Enhance your fortress to a citadel",
-   obj_body = rt(h1(_ "Enhance Your Fortress") .. p([[• ]] ..
-_[[Enhance your fortress to a mighty citadel.]]
-      ) .. p([[→ ]] ..
-_([[The citadel can house 12 soldiers and is the biggest military building the barbarians can build. ]] ..
-[[It also costs a lot of resources and takes a long time to build. ]] ..
-[[It is most suited to guard strategically important points like constricted points or mountains.]])
-      )
+   obj_body = rt(
+      h1(_ "Enhance Your Fortress") ..
+      listitem_bullet(_[[Enhance your fortress to a mighty citadel.]]) ..
+      listitem_arrow(_[[The citadel can house 12 soldiers and is the biggest military building the barbarians can build. It also costs a lot of resources and takes a long time to build. It is most suited to guard strategically important points like constricted points or mountains.]])
    )
 }
 
 attack_enemey = {
    pos = "topright",
    title = _ "Defeat your enemy",
-   body = rt(h1(_ "Defeat the Enemy") .. p(_(
-[[I have created a sparring partner for you: It is an empire tribe close to your citadel. ]] ..
-[[To attack its buildings, click on the door of a target building, ]] ..
-[[choose the number of soldiers that you wish to send and click on the attack button. ]] ..
-[[Your soldiers will come from all nearby military buildings. ]] ..
-[[Likewise, the defenders will come from all nearby military buildings of the enemy and intercept your forces.]])
-      ) .. p([[• ]] ..
-_[[Attack and conquer all military buildings of the enemy and destroy their headquarters.]]
-      )
+   body = rt(
+      h1(_ "Defeat the Enemy") ..
+      p(_[[I have created a sparring partner for you: It is an empire tribe close to your citadel. To attack its buildings, click on the door of a target building, choose the number of soldiers that you wish to send and click on the attack button. Your soldiers will come from all nearby military buildings. Likewise, the defenders will come from all nearby military buildings of the enemy and intercept your forces.]]) ..
+      listitem_bullet(_[[Attack and conquer all military buildings of the enemy and destroy their headquarters.]])
    ),
    obj_name = "defeated_the_empire",
    obj_title = _ "Defeat the enemy tribe",
-   obj_body = rt(h1(_"Defeat Your Enemy") .. p([[• ]] ..
-_[[Defeat the nearby enemy.]]
-      ) .. p([[→ ]] ..
-_([[To attack a building, click on its doors, choose the number of attacking soldiers, ]] ..
-[[then send them via the ‘Attack’ button.]])
-      )
+   obj_body = rt(
+      h1(_"Defeat Your Enemy") ..
+      listitem_bullet(_[[Defeat the nearby enemy.]]) ..
+      listitem_arrow(_[[To attack a building, click on its doors, choose the number of attacking soldiers, then send them via the ‘Attack’ button.]])
    )
 }
 
 conclude_tutorial = {
    title = _ "Conclusion",
-   body = rt(h1(_"Conclusion") ..
-      p(_(
-[[This concludes the tutorial. ]] ..
-[[There is some stuff we have not covered here – we have not even built a single production building ]] ..
-[[even though producing wares is the most important thing in Widelands – but you’ve learned the ropes.]])
-      ) .. p(_(
-[[You can learn about the remaining stuff while you go through the individual tribes’ introduction campaigns. ]] ..
-[[Each consists of some scenarios explaining the tribe and its economy while introducing the background story of Widelands. ]] ..
-[[Have fun playing!]])
-      ) .. p(_(
-[[You can continue playing this map or you can end this game whenever you like. ]] ..
-[[To leave this game and return to the main menu, click on the]])
-      )) .. rt("image=pics/menu_options_menu.png", p(_(
-[[‘Options’ menu button on the very left at the bottom of the screen. ]] ..
-[[Then click the]])
-      )) .. rt("image=pics/menu_exit_game.png", p(_
-[[‘Exit Game’ button.]]
-      )) .. rt(p(_
-[[Thanks for playing this tutorial. Enjoy Widelands and remember to visit us at]]
-      )) .. rt("text-align=center",
-   "<p font-size=24 font-decoration=underline>http://www.widelands.org</p>"
-   )
+   body = rt(
+      h1(_"Conclusion") ..
+      p(_[[This concludes the tutorial. There is some stuff we have not covered here – we have not even built a single production building even though producing wares is the most important thing in Widelands – but you’ve learned the ropes.]]) ..
+      p(_[[You can learn about the remaining stuff while you go through the individual tribes’ introduction campaigns. Each consists of some scenarios explaining the tribe and its economy while introducing the background story of Widelands. Have fun playing!]]) ..
+      p(_[[You can continue playing this map or you can end this game whenever you like. To leave this game and return to the main menu, click on the]])
+   ) ..
+   rt("image=pics/menu_options_menu.png", p(_[[‘Options’ menu button on the very left at the bottom of the screen. Then click the]])) ..
+   rt("image=pics/menu_exit_game.png", p(_[[‘Exit Game’ button.]])) ..
+   rt(p(_[[Thanks for playing this tutorial. Enjoy Widelands and remember to visit us at]])) ..
+   rt("text-align=center", "<p font-size=24 font-decoration=underline>http://www.widelands.org</p>")
 }

=== modified file 'maps/Plateau.wmf/scripting/texts.lua'
--- maps/Plateau.wmf/scripting/texts.lua	2014-04-09 17:50:02 +0000
+++ maps/Plateau.wmf/scripting/texts.lua	2014-05-24 16:01:14 +0000
@@ -26,22 +26,18 @@
 obj_capture_ancient_castle = {
    name = "capture_ancient_castle",
    title =_ "Capture the Ancient Castle",
-   body = [[• ]] .. _
-[[Defeat Lanissa and capture the ancient castle.]],
+   body = listitem_bullet(_[[Defeat Lanissa and capture the ancient castle.]]),
 }
 
 obj_defeat_erwyn = {
    name = "defeat_erwyn",
    title =_ "Defeat Erwyn",
-   body = [[• ]] .. _
-[[Defeat Erwyn. He commands the strongest opposing military force left on this island.]],
+   body = listitem_bullet(_[[Defeat Erwyn. He commands the strongest opposing military force left on this island.]]),
 }
 obj_defeat_jomo = {
    name = "defeat_jomo",
    title =_ "Defeat Jomo",
-   body = [[• ]] .. _
-[[Defeat Jomo. He is taking care of the soldiers’ food supply.]]
-   ,
+   body = listitem_bullet(_[[Defeat Jomo. He is taking care of the soldiers’ food supply.]]),
 }
 
 -- =====================

=== modified file 'scripting/format_scenario.lua'
--- scripting/format_scenario.lua	2014-04-03 12:16:03 +0000
+++ scripting/format_scenario.lua	2014-05-24 16:01:14 +0000
@@ -48,6 +48,43 @@
 
 
 -- RST
+-- .. function:: listitem(symbol, text)
+--
+--    Adds the symbol in front of the text to create a list item and adds a paragraphdivider
+--
+--    :arg symbol: the item symbol for the list, e.g. "•" or "→"
+--    :arg text: the text of the list item
+--
+--    :returns: symbol .. " " .. text .. paragraphdivider()
+function listitem(symbol, text)
+   return symbol .. " " .. text .. paragraphdivider()
+end
+
+-- RST
+-- .. function:: listitem_bullet(text)
+--
+--    Creates a list item with an arrow
+--
+--    :arg text: the text of the list item
+--
+--    :returns: listitem("→", text)
+function listitem_arrow(text)
+   return listitem("→", text)
+end
+
+-- RST
+-- .. function:: listitem_bullet(text)
+--
+--    Creates a list item with a bullet point
+--
+--    :arg text: the text of the list item
+--
+--    :returns: listitem("•", text)
+function listitem_bullet(text)
+   return listitem("•", text)
+end
+
+-- RST
 -- .. function:: paragraphdivider()
 --
 --    Closes a paragraph and opens a new paragraph. Use this when you format a string with the speech function

=== modified file 'src/ui_fsmenu/mapselect.cc'
--- src/ui_fsmenu/mapselect.cc	2014-04-18 08:51:53 +0000
+++ src/ui_fsmenu/mapselect.cc	2014-05-24 16:01:14 +0000
@@ -155,28 +155,29 @@
 		 boost::bind
 		 (&Fullscreen_Menu_MapSelect::compare_maprows, this, _1, _2));
 	m_table.set_sort_column(0);
-
 	m_load_map_as_scenario.set_state(false);
 	m_load_map_as_scenario.set_enabled(false);
 
 	m_table.selected.connect(boost::bind(&Fullscreen_Menu_MapSelect::map_selected, this, _1));
 	m_table.double_clicked.connect(boost::bind(&Fullscreen_Menu_MapSelect::double_clicked, this, _1));
 
-	UI::Box * vbox = new UI::Box
-		(this, m_table.get_x(), m_table.get_y() - 120, UI::Box::Horizontal, m_table.get_w());
+	UI::Box * vbox = new UI::Box(this, m_table.get_x(), m_table.get_y() - 120, UI::Box::Horizontal, m_table.get_w());
 	m_show_all_maps = _add_tag_checkbox(vbox, "blumba", _("Show all maps"));
 	m_tags_checkboxes.clear(); // Remove this again, it is a special tag checkbox
 	m_show_all_maps->set_state(true);
 	vbox->set_size(get_w(), 25);
+
 	vbox = new UI::Box(this, m_table.get_x(), m_table.get_y() - 90, UI::Box::Horizontal, m_table.get_w());
 	_add_tag_checkbox(vbox, "official", _("Official Map"));
 	_add_tag_checkbox(vbox, "seafaring", _("Seafaring Map"));
 	vbox->set_size(get_w(), 25);
+
 	vbox = new UI::Box(this, m_table.get_x(), m_table.get_y() - 60, UI::Box::Horizontal, m_table.get_w());
 	_add_tag_checkbox(vbox, "1v1", _("1v1"));
 	_add_tag_checkbox(vbox, "2teams", _("Teams of 2"));
 	_add_tag_checkbox(vbox, "3teams", _("Teams of 3"));
 	vbox->set_size(get_w(), 25);
+
 	vbox = new UI::Box(this, m_table.get_x(), m_table.get_y() - 30, UI::Box::Horizontal, m_table.get_w());
 	_add_tag_checkbox(vbox, "4teams", _("Teams of 4"));
 	_add_tag_checkbox(vbox, "ffa", _("Free for all"));


Follow ups