← Back to team overview

widelands-dev team mailing list archive

[Merge] lp:~widelands-dev/widelands/bug-1397500 into lp:widelands

 

GunChleoc has proposed merging lp:~widelands-dev/widelands/bug-1397500 into lp:widelands.

Requested reviews:
  Widelands Developers (widelands-dev)
Related bugs:
  Bug #1397500 in widelands: ""warning: unterminated string literal" in utils/buildcat.py. + Discussion on directory structure"
  https://bugs.launchpad.net/widelands/+bug/1397500

For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/bug-1397500/+merge/243860

Welcome to the scope creep of the week. Basically, this moves some directories into a new "data" directory:

campaigns: data -> campaigns
global:    data -> global
fonts:     data -> i18n -> fonts
maps:      data -> maps
music:     data -> music
scripting: data -> scripting
sound:     data -> sound
pics:      data -> images (now sorted into subdirectories)
tribes:    data -> tribes
txts:      data -> txts
world:     data -> world

After moving these, I found that I had to redefine the directories in the code in numerous places, and I mean a whole lot of them. So, we were defining the base directories for data files over and over in the code. I also came across weird bugs like the one I fixed in this commit: http://bazaar.launchpad.net/~widelands-dev/widelands/bug-1397500/revision/7306

So, I decided to do some overhaul:

1. sounds and music now have to live in their respective data directories, which is defined once in the sound handler. Subdirectories are possible.

2. Since we have so many images and there was some bad fiddling with image filenames going on, I decided to give them a central image catalog in http://bazaar.launchpad.net/~widelands-dev/widelands/bug-1397500/view/head:/src/graphic/image_catalog.h, which is accessed though our g_gr singleton. So, images are now mainly fetched by enum class keys, making it pretty safe to move stuff around. Defining images by their filenames is still possible though, because we need to get the stuff from the conf and Lua in. Richtext images can drop the "data/images" prefix though, and I have fixed the files accordingly. So, as long as we don't shift/rename images within the data/images directory, the Lua side of things is more stable ow as well.

3. What I failed to do is to move 'locale' into 'data' - compile.sh insists on keeping it where it is, and I don't know why.

4. I haven't done anything with the shaders yet, which started the whole thing.

5. Since this is a huge diff, I have added NOCOM(GunChleoc) comments to the files to focus the review. Also, the installers need testing - I have added NOCOM comments here as well.
-- 
The attached diff has been truncated due to its size.
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/bug-1397500 into lp:widelands.
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt	2014-12-03 19:14:07 +0000
+++ CMakeLists.txt	2014-12-05 20:26:47 +0000
@@ -1,3 +1,4 @@
+# NOCOM(GunChleoc) fix datadir?
 project (widelands)
 
 cmake_minimum_required (VERSION 2.8.7)
@@ -228,32 +229,32 @@
 # install files to the correct locations here
 install(
   DIRECTORY
-    campaigns
-    fonts
-    global
-    tribes
-    txts
-    world
-    pics
-    scripting
-  DESTINATION ${WL_INSTALL_DATADIR}
+    data/campaigns
+    data/global
+    data/i18n
+    data/tribes
+    data/txts
+    data/world
+    data/images
+    data/scripting
+  DESTINATION ${WL_INSTALL_DATADIR}/data
   CONFIGURATIONS Debug;Release
   COMPONENT CoreDataFiles
 )
 
 install(
   DIRECTORY
-    maps
-  DESTINATION ${WL_INSTALL_DATADIR}
+    data/maps
+  DESTINATION ${WL_INSTALL_DATADIR}/data
   CONFIGURATIONS Debug;Release
   COMPONENT MapFiles
 )
 
 install(
   DIRECTORY
-    music
-	sound
-  DESTINATION ${WL_INSTALL_DATADIR}
+    data/music
+    data/sound
+  DESTINATION ${WL_INSTALL_DATADIR}/data
   CONFIGURATIONS Debug;Release
   COMPONENT MusicFiles
 )

=== added directory 'data'
=== renamed directory 'campaigns' => 'data/campaigns'
=== modified file 'data/campaigns/atl01.wmf/elemental'
--- campaigns/atl01.wmf/elemental	2014-10-13 10:48:33 +0000
+++ data/campaigns/atl01.wmf/elemental	2014-12-05 20:26:47 +0000
@@ -9,4 +9,4 @@
 name=_"From Nemesis to Genesis"
 author="SirVer,Nasenbaer"
 descr=_ "After landing on a mysterious island close to Atlantis, the remaining Atlanteans struggle to make a new home for themselves."
-background="campaigns/atl01.wmf/pics/background.jpg"
+background="data/campaigns/atl01.wmf/pics/background.jpg"

=== modified file 'data/campaigns/atl01.wmf/scripting/init.lua'
--- campaigns/atl01.wmf/scripting/init.lua	2014-10-03 08:58:44 +0000
+++ data/campaigns/atl01.wmf/scripting/init.lua	2014-12-05 20:26:47 +0000
@@ -2,12 +2,12 @@
 --                      Atlanteans Tutorial Mission 01
 -- =======================================================================
 
-include "scripting/coroutine.lua"
-include "scripting/infrastructure.lua"
-include "scripting/messages.lua"
-include "scripting/objective_utils.lua"
-include "scripting/table.lua"
-include "scripting/ui.lua"
+include "data/scripting/coroutine.lua"
+include "data/scripting/infrastructure.lua"
+include "data/scripting/messages.lua"
+include "data/scripting/objective_utils.lua"
+include "data/scripting/table.lua"
+include "data/scripting/ui.lua"
 
 include "map:scripting/water_rising.lua"
 

=== modified file 'data/campaigns/atl01.wmf/scripting/starting_conditions.lua'
--- campaigns/atl01.wmf/scripting/starting_conditions.lua	2014-10-03 08:58:44 +0000
+++ data/campaigns/atl01.wmf/scripting/starting_conditions.lua	2014-12-05 20:26:47 +0000
@@ -10,7 +10,7 @@
 p1:forbid_buildings{"shipyard"}
 
 -- A default headquarters
-include "tribes/atlanteans/scripting/sc00_headquarters.lua"
+include "data/tribes/atlanteans/scripting/sc00_headquarters.lua"
 init.func(p1) -- defined in sc00_headquarters
 
 local hq = wl.Game().map.player_slots[1].starting_field.immovable

=== modified file 'data/campaigns/atl01.wmf/scripting/texts.lua'
--- campaigns/atl01.wmf/scripting/texts.lua	2014-11-11 10:43:36 +0000
+++ data/campaigns/atl01.wmf/scripting/texts.lua	2014-12-05 20:26:47 +0000
@@ -2,8 +2,8 @@
 --                 Texts for the Atlantean tutorial mission
 -- =======================================================================
 
-include "scripting/formatting.lua"
-include "scripting/format_scenario.lua"
+include "data/scripting/formatting.lua"
+include "data/scripting/format_scenario.lua"
 
 function jundlina(title, text)
    return speech("map:princess.png", "2F9131", title, text)

=== modified file 'data/campaigns/atl01.wmf/scripting/water_rising.lua'
--- campaigns/atl01.wmf/scripting/water_rising.lua	2014-03-25 06:18:48 +0000
+++ data/campaigns/atl01.wmf/scripting/water_rising.lua	2014-12-05 20:26:47 +0000
@@ -2,7 +2,7 @@
 --                        Water rising Functionality
 -- =======================================================================
 
-include "scripting/set.lua"
+include "data/scripting/set.lua"
 
 -- ================
 -- Helper function

=== modified file 'data/campaigns/bar01.wmf/elemental'
--- campaigns/bar01.wmf/elemental	2014-10-28 09:24:36 +0000
+++ data/campaigns/bar01.wmf/elemental	2014-12-05 20:26:47 +0000
@@ -8,4 +8,4 @@
 name=_"A Place to Call Home"
 author="Winterwind,wl-zocker"
 descr=_"In this scenario, the higher production buildings including mining will be introduced."
-background="campaigns/bar01.wmf/pics/background.jpg"
+background="data/campaigns/bar01.wmf/pics/background.jpg"

=== modified file 'data/campaigns/bar01.wmf/scripting/init.lua'
--- campaigns/bar01.wmf/scripting/init.lua	2014-10-20 13:59:04 +0000
+++ data/campaigns/bar01.wmf/scripting/init.lua	2014-12-05 20:26:47 +0000
@@ -4,10 +4,10 @@
 
 set_textdomain("scenario_bar01.wmf")
 
-include "scripting/coroutine.lua"
-include "scripting/objective_utils.lua"
-include "scripting/infrastructure.lua"
-include "scripting/messages.lua"
+include "data/scripting/coroutine.lua"
+include "data/scripting/objective_utils.lua"
+include "data/scripting/infrastructure.lua"
+include "data/scripting/messages.lua"
 
 -- ==========
 -- Constants

=== modified file 'data/campaigns/bar01.wmf/scripting/mission_thread.lua'
--- campaigns/bar01.wmf/scripting/mission_thread.lua	2014-10-30 11:37:38 +0000
+++ data/campaigns/bar01.wmf/scripting/mission_thread.lua	2014-12-05 20:26:47 +0000
@@ -2,8 +2,8 @@
 --                            Main mission thread
 -- =======================================================================
 
-include "scripting/table.lua"
-include "scripting/ui.lua"
+include "data/scripting/table.lua"
+include "data/scripting/ui.lua"
 
 quarry_done = false
 enhance_buildings_done = false

=== modified file 'data/campaigns/bar01.wmf/scripting/texts.lua'
--- campaigns/bar01.wmf/scripting/texts.lua	2014-10-31 08:59:54 +0000
+++ data/campaigns/bar01.wmf/scripting/texts.lua	2014-12-05 20:26:47 +0000
@@ -2,8 +2,8 @@
 -- Some formating functions
 -- =========================
 
-include "scripting/formatting.lua"
-include "scripting/format_scenario.lua"
+include "data/scripting/formatting.lua"
+include "data/scripting/format_scenario.lua"
 
 function thron(title, text)
    return speech("map:chieftain.png", "2F9131", title, text)
@@ -45,16 +45,16 @@
       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 appropriate mine to be built:") ..
 		"</rt>" ..
-		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_granite1/resi_00.png", p(_"a bit of granite")) ..
-		rt("image=tribes/barbarians/resi_granite2/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("image=data/tribes/barbarians/resi_coal1/resi_00.png", p(_"a bit of coal")) ..
+		rt("image=data/tribes/barbarians/resi_coal2/resi_00.png", p(_"a lot of coal")) ..
+		rt("image=data/tribes/barbarians/resi_iron1/resi_00.png", p(_"a bit of iron")) ..
+		rt("image=data/tribes/barbarians/resi_iron2/resi_00.png", p(_"a lot of iron")) ..
+		rt("image=data/tribes/barbarians/resi_gold1/resi_00.png", p(_"a bit of gold")) ..
+		rt("image=data/tribes/barbarians/resi_gold2/resi_00.png", p(_"a lot of gold")) ..
+		rt("image=data/tribes/barbarians/resi_granite1/resi_00.png", p(_"a bit of granite")) ..
+		rt("image=data/tribes/barbarians/resi_granite2/resi_00.png", p(_"a lot of granite")) ..
+		rt("image=data/tribes/barbarians/resi_water1/resi_00.png", p(_"water")) ..
+		rt("image=data/tribes/barbarians/resi_none/resi_00.png", p(_"nothing was found here")) ..
 		"<rt>" ..
 			p(_[[Mines can only be built on mountain terrain. Suitable places for mines are displayed as orange mine symbols.]]))
 }
@@ -118,7 +118,7 @@
       _([[You can obtain water by building a well upon a water source, which your geologists can discover when you send them to any flag that is not on a mountain.]])
       ..paragraphdivider() ..
       "</p></rt>" ..
-      rt("image=pics/menu_geologist.png", p(_"In order to call a geologist to search for water, click on a flag in the area that you want him to search and then on the button labeled ‘Send geologist to explore site’.")
+      rt("image=wui/fieldaction/menu_geologist.png", p(_"In order to call a geologist to search for water, click on a flag in the area that you want him to search and then on the button labeled ‘Send geologist to explore site’.")
       .. paragraphdivider() ..
       _([[Coal can be obtained by building a charcoal kiln or a coal mine. Burning charcoal out of logs is slow. You should only build a charcoal kiln when no coal is available.]])
       .. paragraphdivider() ..

=== modified file 'data/campaigns/bar02.wmf/elemental'
--- campaigns/bar02.wmf/elemental	2014-10-28 09:24:36 +0000
+++ data/campaigns/bar02.wmf/elemental	2014-12-05 20:26:47 +0000
@@ -7,4 +7,4 @@
 name=_"This Land is Our Land"
 author="Wolfpac,Nasenbaer"
 descr=_"This tutorial explains the handling of military and training site buildings and will introduce fighting."
-background="campaigns/bar02.wmf/pics/background.jpg"
+background="data/campaigns/bar02.wmf/pics/background.jpg"

=== modified file 'data/campaigns/bar02.wmf/scripting/init.lua'
--- campaigns/bar02.wmf/scripting/init.lua	2014-10-30 11:37:38 +0000
+++ data/campaigns/bar02.wmf/scripting/init.lua	2014-12-05 20:26:47 +0000
@@ -4,11 +4,11 @@
 
 set_textdomain("scenario_bar02.wmf")
 
-include "scripting/coroutine.lua"
-include "scripting/objective_utils.lua"
-include "scripting/infrastructure.lua"
-include "scripting/table.lua"
-include "scripting/ui.lua"
+include "data/scripting/coroutine.lua"
+include "data/scripting/objective_utils.lua"
+include "data/scripting/infrastructure.lua"
+include "data/scripting/table.lua"
+include "data/scripting/ui.lua"
 
 game = wl.Game()
 p1 = game.players[1]

=== modified file 'data/campaigns/bar02.wmf/scripting/mission_thread.lua'
--- campaigns/bar02.wmf/scripting/mission_thread.lua	2014-10-02 18:51:30 +0000
+++ data/campaigns/bar02.wmf/scripting/mission_thread.lua	2014-12-05 20:26:47 +0000
@@ -2,7 +2,7 @@
 --                          Various mission threads
 -- =======================================================================
 
-include "scripting/messages.lua"
+include "data/scripting/messages.lua"
 
 game = wl.Game()
 -- Mountain and frontier fields

=== modified file 'data/campaigns/bar02.wmf/scripting/texts.lua'
--- campaigns/bar02.wmf/scripting/texts.lua	2014-10-30 11:37:38 +0000
+++ data/campaigns/bar02.wmf/scripting/texts.lua	2014-12-05 20:26:47 +0000
@@ -1,5 +1,5 @@
-include "scripting/formatting.lua"
-include "scripting/format_scenario.lua"
+include "data/scripting/formatting.lua"
+include "data/scripting/format_scenario.lua"
 
 function thron(title, text)
    return speech("map:chieftain.png", "2F9131", title, text)

=== modified file 'data/campaigns/campaigns.conf'
--- campaigns/campaigns.conf	2014-10-28 12:50:28 +0000
+++ data/campaigns/campaigns.conf	2014-12-05 20:26:47 +0000
@@ -66,37 +66,37 @@
 [barbariantut00]
 name=_"A Place to Call Home"
 visible=1
-path="campaigns/bar01.wmf"
+path="data/campaigns/bar01.wmf"
 
 [barbariantut01]
 name=_"This Land is Our Land"
 visible=0
-path="campaigns/bar02.wmf"
+path="data/campaigns/bar02.wmf"
 
 
 [empiretut00]
 name=_"The Strands of Malac’ Mor"
 visible=1
-path="campaigns/emp01.wmf"
+path="data/campaigns/emp01.wmf"
 
 [empiretut01]
 name=_"An Outpost for Exile"
 visible=0
-path="campaigns/emp02.wmf"
+path="data/campaigns/emp02.wmf"
 
 [empiretut02]
 name=_"Not yet implemented"
 newvisi="campsect2"
 visible=0
-path="campaigns/dummy.wmf"
+path="data/campaigns/dummy.wmf"
 
 
 [atlanteans00]
 name=_"From Nemesis to Genesis"
 visible=1
-path="campaigns/atl01.wmf"
+path="data/campaigns/atl01.wmf"
 
 [atlanteans01]
 name=_"Not yet implemented"
 visible=0
-path="campaigns/dummy.wmf"
+path="data/campaigns/dummy.wmf"

=== modified file 'data/campaigns/dummy.wmf/scripting/init.lua'
--- campaigns/dummy.wmf/scripting/init.lua	2014-10-02 15:44:48 +0000
+++ data/campaigns/dummy.wmf/scripting/init.lua	2014-12-05 20:26:47 +0000
@@ -3,8 +3,8 @@
 -- =======================================================================
 set_textdomain("scenario_dummy.wmf")
 
-include "scripting/messages.lua"
-include "scripting/ui.lua"
+include "data/scripting/messages.lua"
+include "data/scripting/ui.lua"
 
 p1 = wl.Game().players[1]
 dummy_msg = {

=== modified file 'data/campaigns/emp01.wmf/elemental'
--- campaigns/emp01.wmf/elemental	2014-10-13 10:48:33 +0000
+++ data/campaigns/emp01.wmf/elemental	2014-12-05 20:26:47 +0000
@@ -7,4 +7,4 @@
 name=_"The Strands of Malac’ Mor"
 author=Nasenbaer
 descr=_"After losing an important battle against the barbarians which lead to the loss of a big part of the Empire’s territory, Lutius leaves Fremil to start a new life. But his destiny takes his ship into a heavy storm, which nearly destroys it. Only with a lot of luck he manages to beach his damaged ship on an unknown desert strand and save his people. For now."
-background="campaigns/emp01.wmf/pics/background.jpg"
+background="data/campaigns/emp01.wmf/pics/background.jpg"

=== modified file 'data/campaigns/emp01.wmf/scripting/init.lua'
--- campaigns/emp01.wmf/scripting/init.lua	2014-10-02 17:05:38 +0000
+++ data/campaigns/emp01.wmf/scripting/init.lua	2014-12-05 20:26:47 +0000
@@ -3,11 +3,11 @@
 -- =======================================================================
 set_textdomain("scenario_emp01.wmf")
 
-include "scripting/coroutine.lua"
-include "scripting/objective_utils.lua"
-include "scripting/infrastructure.lua"
-include "scripting/table.lua"
-include "scripting/ui.lua"
+include "data/scripting/coroutine.lua"
+include "data/scripting/objective_utils.lua"
+include "data/scripting/infrastructure.lua"
+include "data/scripting/table.lua"
+include "data/scripting/ui.lua"
 
 p1 = wl.Game().players[1]
 

=== modified file 'data/campaigns/emp01.wmf/scripting/mission_thread.lua'
--- campaigns/emp01.wmf/scripting/mission_thread.lua	2014-10-31 11:36:29 +0000
+++ data/campaigns/emp01.wmf/scripting/mission_thread.lua	2014-12-05 20:26:47 +0000
@@ -1,4 +1,4 @@
-include "scripting/messages.lua"
+include "data/scripting/messages.lua"
 
 function mission_thread()
    sleep(100) -- This is needed for yet unknown reasons

=== modified file 'data/campaigns/emp01.wmf/scripting/texts.lua'
--- campaigns/emp01.wmf/scripting/texts.lua	2014-10-30 11:37:38 +0000
+++ data/campaigns/emp01.wmf/scripting/texts.lua	2014-12-05 20:26:47 +0000
@@ -2,8 +2,8 @@
 -- Some formating functions
 -- =========================
 
-include "scripting/formatting.lua"
-include "scripting/format_scenario.lua"
+include "data/scripting/formatting.lua"
+include "data/scripting/format_scenario.lua"
 
 function lutius(title, text)
    return speech("map:Lutius.png", "2F9131", title, text)

=== modified file 'data/campaigns/emp02.wmf/elemental'
--- campaigns/emp02.wmf/elemental	2014-10-13 10:48:33 +0000
+++ data/campaigns/emp02.wmf/elemental	2014-12-05 20:26:47 +0000
@@ -9,4 +9,4 @@
 name=_"An Outpost for Exile"
 author=Nasenbaer
 descr=_"Finally the ship was repaired, so Lutius and his people returned to the quest to find a good place for a new beginning. Only a few days later, they land on a green, Mediterranean island, looking like paradise. Overjoyed, they set out to explore this new living space."
-background="campaigns/emp01.wmf/pics/background.jpg"
+background="data/campaigns/emp01.wmf/pics/background.jpg"

=== modified file 'data/campaigns/emp02.wmf/scripting/init.lua'
--- campaigns/emp02.wmf/scripting/init.lua	2014-10-02 17:05:38 +0000
+++ data/campaigns/emp02.wmf/scripting/init.lua	2014-12-05 20:26:47 +0000
@@ -3,11 +3,11 @@
 -- =======================================================================
 set_textdomain("scenario_emp02.wmf")
 
-include "scripting/coroutine.lua"
-include "scripting/infrastructure.lua"
-include "scripting/objective_utils.lua"
-include "scripting/table.lua"
-include "scripting/ui.lua"
+include "data/scripting/coroutine.lua"
+include "data/scripting/infrastructure.lua"
+include "data/scripting/objective_utils.lua"
+include "data/scripting/table.lua"
+include "data/scripting/ui.lua"
 
 game = wl.Game()
 p1 = game.players[1]

=== modified file 'data/campaigns/emp02.wmf/scripting/mission_thread.lua'
--- campaigns/emp02.wmf/scripting/mission_thread.lua	2014-10-31 11:36:29 +0000
+++ data/campaigns/emp02.wmf/scripting/mission_thread.lua	2014-12-05 20:26:47 +0000
@@ -2,7 +2,7 @@
 --                              Mission Threads
 -- =======================================================================
 
-include "scripting/messages.lua"
+include "data/scripting/messages.lua"
 
 function building_materials()
    sleep(200)

=== modified file 'data/campaigns/emp02.wmf/scripting/texts.lua'
--- campaigns/emp02.wmf/scripting/texts.lua	2014-10-30 11:37:38 +0000
+++ data/campaigns/emp02.wmf/scripting/texts.lua	2014-12-05 20:26:47 +0000
@@ -2,8 +2,8 @@
 -- Some formating functions
 -- =========================
 
-include "scripting/formatting.lua"
-include "scripting/format_scenario.lua"
+include "data/scripting/formatting.lua"
+include "data/scripting/format_scenario.lua"
 
 function lutius(title, text)
    return speech("map:Lutius.png", "2F9131", title, text)

=== modified file 'data/campaigns/tutorial01_basic_control.wmf/scripting/init.lua'
--- campaigns/tutorial01_basic_control.wmf/scripting/init.lua	2014-10-28 12:58:23 +0000
+++ data/campaigns/tutorial01_basic_control.wmf/scripting/init.lua	2014-12-05 20:26:47 +0000
@@ -7,11 +7,11 @@
 
 set_textdomain("scenario_tutorial01_basic_control.wmf")
 
-include "scripting/coroutine.lua"
-include "scripting/infrastructure.lua"
-include "scripting/messages.lua"
-include "scripting/table.lua"
-include "scripting/ui.lua"
+include "data/scripting/coroutine.lua"
+include "data/scripting/infrastructure.lua"
+include "data/scripting/messages.lua"
+include "data/scripting/table.lua"
+include "data/scripting/ui.lua"
 
 -- Constants
 sf = map.player_slots[1].starting_field

=== modified file 'data/campaigns/tutorial01_basic_control.wmf/scripting/starting_conditions.lua'
--- campaigns/tutorial01_basic_control.wmf/scripting/starting_conditions.lua	2014-10-17 08:38:24 +0000
+++ data/campaigns/tutorial01_basic_control.wmf/scripting/starting_conditions.lua	2014-12-05 20:26:47 +0000
@@ -5,6 +5,6 @@
 plr:allow_buildings("all")
 
 -- A default headquarters
-include "tribes/barbarians/scripting/sc00_headquarters.lua"
+include "data/tribes/barbarians/scripting/sc00_headquarters.lua"
 init.func(plr) -- defined in sc00_headquarters
 

=== modified file 'data/campaigns/tutorial01_basic_control.wmf/scripting/texts.lua'
--- campaigns/tutorial01_basic_control.wmf/scripting/texts.lua	2014-11-11 10:21:43 +0000
+++ data/campaigns/tutorial01_basic_control.wmf/scripting/texts.lua	2014-12-05 20:26:47 +0000
@@ -6,8 +6,8 @@
 -- Some formating functions
 -- =========================
 
-include "scripting/formatting.lua"
-include "scripting/format_scenario.lua"
+include "data/scripting/formatting.lua"
+include "data/scripting/format_scenario.lua"
 
 -- =============
 -- Texts below
@@ -117,7 +117,7 @@
       paragraphdivider() ..
       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.")
+   rt("image=wui/fieldaction/menu_build_flag.png", p(_"build flag symbol.")
    ),
    h = 300,
    obj_name = "build_flag_on_road_to_lumberjack",
@@ -216,7 +216,7 @@
    body = rt(
       p(_[[Very good. And now about the minimap. You can open it by clicking on the]])
    ) ..
-   rt("image=pics/menu_toggle_minimap.png", p(_[[minimap button at the bottom of the screen or simply by using the keyboard shortcut ‘m’.]])
+   rt("image=wui/menus/menu_toggle_minimap.png", p(_[[minimap button at the bottom of the screen or simply by using the keyboard shortcut ‘m’.]])
    ) ..
    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.]]) ..
@@ -250,10 +250,10 @@
       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("image=wui/overlays/big.png", p(_[[Everything can be built on the green house symbol.]])) ..
+   rt("image=wui/overlays/medium.png", p(_[[Everything except for big buildings can be built on a yellow house symbol.]])) ..
+   rt("image=wui/overlays/small.png", p(_[[Red building symbols can only hold small buildings and flags.]])) ..
+   rt("image=wui/overlays/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.]]) ..
       paragraphdivider() ..
@@ -277,10 +277,10 @@
    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("image=wui/fieldaction/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("image=wui/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:]])
    ),
@@ -294,10 +294,10 @@
    body = rt(
       p(_[[Excellent! To enter road building mode for any flag, left-click on a flag and select]])
       ) ..
-   rt("image=pics/menu_build_way.png", p(_[[the road building symbol.]])) ..
+   rt("image=wui/fieldaction/menu_build_way.png", p(_[[the road building symbol.]])) ..
    rt(
       p(_[[If you decide that 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("image=wui/menu_abort.png", p(_[[the abort symbol.]])) ..
    rt(
       p(_[[Now, about this road. I’ll enter the road building mode and then 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:]])
    ),
@@ -319,9 +319,9 @@
    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("image=wui/overlays/roadb_green.png", p(_[[The terrain is flat here. Your carriers will be very swift on this terrain.]])) ..
+   rt("image=wui/overlays/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=wui/overlays/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. If you hold Ctrl or Shift+Ctrl while you finish the road, flags are placed automatically.]]) ..
       paragraphdivider() ..
@@ -383,7 +383,7 @@
       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("image=wui/messages/message_archive.png", p(_[[archive message button to move them into your archive.]])) ..
    rt(
       paragraphdivider() ..
       listitem_bullet(_[[Archive all messages that you currently have in your inbox, including this one.]])
@@ -493,8 +493,8 @@
       p(_[[However, since you now know how to control Widelands, you can also start a game (or continue this one) and discover more by yourself.]]) ..
       p(_[[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("image=wui/menus/menu_options_menu.png", p(_[[‘Options’ menu button on the very left at the bottom of the screen. Then click the]])) ..
+   rt("image=wui/menus/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>"),
    h = 450

=== modified file 'data/campaigns/tutorial02_warfare.wmf/scripting/init.lua'
--- campaigns/tutorial02_warfare.wmf/scripting/init.lua	2014-10-28 12:58:23 +0000
+++ data/campaigns/tutorial02_warfare.wmf/scripting/init.lua	2014-12-05 20:26:47 +0000
@@ -6,11 +6,11 @@
 
 set_textdomain("scenario_tutorial02_warfare.wmf")
 
-include "scripting/coroutine.lua"
-include "scripting/infrastructure.lua"
-include "scripting/messages.lua"
-include "scripting/table.lua"
-include "scripting/ui.lua"
+include "data/scripting/coroutine.lua"
+include "data/scripting/infrastructure.lua"
+include "data/scripting/messages.lua"
+include "data/scripting/table.lua"
+include "data/scripting/ui.lua"
 
 include "map:scripting/starting_conditions.lua"
 

=== modified file 'data/campaigns/tutorial02_warfare.wmf/scripting/texts.lua'
--- campaigns/tutorial02_warfare.wmf/scripting/texts.lua	2014-11-11 10:29:02 +0000
+++ data/campaigns/tutorial02_warfare.wmf/scripting/texts.lua	2014-12-05 20:26:47 +0000
@@ -6,8 +6,8 @@
 -- Some formating functions
 -- =========================
 
-include "scripting/formatting.lua"
-include "scripting/format_scenario.lua"
+include "data/scripting/formatting.lua"
+include "data/scripting/format_scenario.lua"
 
 -- =============
 -- Texts below
@@ -31,14 +31,14 @@
       p(_[[Take a look at the soldiers that are on their way to our military buildings. 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(_[[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 abilities have the following meaning:]])
    ) ..
-   rt("image=tribes/barbarians/soldier/hp_level0.png", h2(_"Health:"))..
+   rt("image=data/tribes/barbarians/soldier/hp_level0.png", h2(_"Health:"))..
    rt(p(_[[The total life of a soldier. A barbarian soldier starts with 130 health, and he will gain 28 health with each health level.]])) ..
-   rt("image=tribes/barbarians/soldier/attack_level0.png", h2(_"Attack:")) ..
+   rt("image=data/tribes/barbarians/soldier/attack_level0.png", h2(_"Attack:")) ..
    rt(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.]])) ..
    -- The Atlanteans' image, because the Barbarian one has a white background
-   rt("image=tribes/atlanteans/soldier/defense_level0.png", h2(_"Defense:")) ..
+   rt("image=data/tribes/atlanteans/soldier/defense_level0.png", h2(_"Defense:")) ..
    rt(p(_[[The defense is the percentage that is subtracted from the attack value. The barbarians cannot train in this skill and therefore have always defense level 0, which means that the damage is always reduced by 3%. If an attacker with an attack value of 35 points hits a barbarian soldier, the barbarian will lose 35·0.97 = 34 health.]])) ..
-   rt("image=tribes/barbarians/soldier/evade_level0.png", h2(_"Evade:")) ..
+   rt("image=data/tribes/barbarians/soldier/evade_level0.png", h2(_"Evade:")) ..
    rt(p(_[[Evade is the chance that the soldier is able to dodge an attack. A level 0 barbarian has a 25% chance to evade an attack, and this increases in steps of 15% for each level.]]))
 }
 
@@ -73,9 +73,9 @@
 		_[[For more information, you can have a look at the building’s help window, accessible via the question mark in every building’s window.]]) ..
       p(_[[To learn how far your soldiers have progressed in their training, you can have a look at their icons. They are modified by red dots:]])
    ) ..
-   rt("image=tribes/barbarians/soldier/evade_level0.png", p(_[[No red dots means that the soldier is not trained, so he has level 0. All your new recruits have this.]])) ..
-   rt("image=tribes/barbarians/soldier/evade_level1.png", p(_[[With every successful training step, your soldier becomes stronger. This is indicated by a red dot. This soldier is on level 1 in evade training.]])) ..
-   rt("image=tribes/barbarians/soldier/evade_level2.png", p(_[[When your soldier has reached the highest possible level (in this case level 2), this is indicated by a white background color.]])),
+   rt("image=data/tribes/barbarians/soldier/evade_level0.png", p(_[[No red dots means that the soldier is not trained, so he has level 0. All your new recruits have this.]])) ..
+   rt("image=data/tribes/barbarians/soldier/evade_level1.png", p(_[[With every successful training step, your soldier becomes stronger. This is indicated by a red dot. This soldier is on level 1 in evade training.]])) ..
+   rt("image=data/tribes/barbarians/soldier/evade_level2.png", p(_[[When your soldier has reached the highest possible level (in this case level 2), this is indicated by a white background color.]])),
    h = 450
 }
 

=== modified file 'data/campaigns/tutorial03_seafaring.wmf/scripting/helper_functions.lua'
--- campaigns/tutorial03_seafaring.wmf/scripting/helper_functions.lua	2014-10-17 08:38:24 +0000
+++ data/campaigns/tutorial03_seafaring.wmf/scripting/helper_functions.lua	2014-12-05 20:26:47 +0000
@@ -2,7 +2,7 @@
 -- Helper functions
 -- =================
 
--- A copy of prefilled_buildings from scripting/infrastructure.lua, but with
+-- A copy of prefilled_buildings from data/scripting/infrastructure.lua, but with
 -- as much wares as possible, if not indicated otherwise
 function filled_buildings(p, ...)
    for idx,bdescr in ipairs({...}) do

=== modified file 'data/campaigns/tutorial03_seafaring.wmf/scripting/init.lua'
--- campaigns/tutorial03_seafaring.wmf/scripting/init.lua	2014-10-28 12:58:23 +0000
+++ data/campaigns/tutorial03_seafaring.wmf/scripting/init.lua	2014-12-05 20:26:47 +0000
@@ -7,11 +7,11 @@
 
 set_textdomain("scenario_tutorial03_seafaring.wmf")
 
-include "scripting/coroutine.lua"
-include "scripting/infrastructure.lua"
-include "scripting/messages.lua"
-include "scripting/table.lua"
-include "scripting/ui.lua"
+include "data/scripting/coroutine.lua"
+include "data/scripting/infrastructure.lua"
+include "data/scripting/messages.lua"
+include "data/scripting/table.lua"
+include "data/scripting/ui.lua"
 
 sf = map.player_slots[1].starting_field
 second_port_field = map:get_field(37, 27)

=== modified file 'data/campaigns/tutorial03_seafaring.wmf/scripting/texts.lua'
--- campaigns/tutorial03_seafaring.wmf/scripting/texts.lua	2014-11-11 10:31:01 +0000
+++ data/campaigns/tutorial03_seafaring.wmf/scripting/texts.lua	2014-12-05 20:26:47 +0000
@@ -6,8 +6,8 @@
 -- Some formating functions
 -- =========================
 
-include "scripting/formatting.lua"
-include "scripting/format_scenario.lua"
+include "data/scripting/formatting.lua"
+include "data/scripting/format_scenario.lua"
 
 
 -- =============
@@ -57,7 +57,7 @@
       h1(_"How to build a port") ..
       p(_[[Ports are big buildings, but they can only be built at special locations: those marked with the]])
    ) ..
-   rt("image=pics/port.png", p(_[[blue port space icon.]])) ..
+   rt("image=wui/overlays/port.png", p(_[[blue port space icon.]])) ..
    rt(
       p(_[[Port spaces are set by the map designer, so a map will either contain them or not. They might, however, be hidden under trees or be blocked by surrounding buildings.]]) ..
       p(_[[You might already have noticed that you have such an icon next to your castle.]]) ..
@@ -109,7 +109,7 @@
       listitem_bullet(_[[We should wait until we have two ships. That should be enough for now.]]) ..
       listitem_arrow(_[[You need to stop your shipyard when you have enough ships. Otherwise, your shipwright will consume all your logs and spidercloth, producing dozens of ships.]])
    ) ..
-   rt("image=pics/stop.png",p(_[[This is the icon for stopping production. You will find it in the building window.]])),
+   rt("image=ui_basic/stop.png",p(_[[This is the icon for stopping production. You will find it in the building window.]])),
    obj_name = "wait_for_ships",
    obj_title = _"Construct two ships",
    obj_body = rt(
@@ -140,7 +140,7 @@
       h1(_"Expeditions") ..
       p(_[[During an expedition, you send a ship out to discover new islands and maybe found a colony there.]])
    ) ..
-   rt("image=pics/start_expedition.png",p(_[[Expeditions can be started in every port. Then, all needed wares are transported to that port. The wares are exactly those your tribe needs to build a port (your goal is to build a port far away from home, so this is not surprising), and of course you need a builder, too. When everything is prepared, a ship will come and pick it up.]] .. " " ..
+   rt("image=wui/buildings/start_expedition.png",p(_[[Expeditions can be started in every port. Then, all needed wares are transported to that port. The wares are exactly those your tribe needs to build a port (your goal is to build a port far away from home, so this is not surprising), and of course you need a builder, too. When everything is prepared, a ship will come and pick it up.]] .. " " ..
 		_[[You can check out the needed wares in the fifth tab of your port (it will appear when you’ve started an expedition).]]) ..
       p(_[[Now try this out. I will tell you later what the next steps are.]]) ..
       paragraphdivider() ..
@@ -152,7 +152,7 @@
       paragraphdivider() ..
       listitem_bullet(_[[Start an expedition.]])
    ) ..
-   rt("image=pics/start_expedition.png",p(_[[To do so, click on the ‘Start Expedition’ button in any port. A new tab where you can see the needed wares will appear.]])
+   rt("image=wui/buildings/start_expedition.png",p(_[[To do so, click on the ‘Start Expedition’ button in any port. A new tab where you can see the needed wares will appear.]])
    )
 }
 

=== modified file 'data/campaigns/tutorial04_economy.wmf/scripting/helper_functions.lua'
--- campaigns/tutorial04_economy.wmf/scripting/helper_functions.lua	2014-10-29 07:55:28 +0000
+++ data/campaigns/tutorial04_economy.wmf/scripting/helper_functions.lua	2014-12-05 20:26:47 +0000
@@ -2,7 +2,7 @@
 -- Helper functions
 -- =================
 
--- A copy of prefilled_buildings from scripting/infrastructure.lua, but with
+-- A copy of prefilled_buildings from data/scripting/infrastructure.lua, but with
 -- as much wares as possible, if not indicated otherwise, and only one soldier
 function filled_buildings_one_soldier(p, ...)
    for idx,bdescr in ipairs({...}) do

=== modified file 'data/campaigns/tutorial04_economy.wmf/scripting/init.lua'
--- campaigns/tutorial04_economy.wmf/scripting/init.lua	2014-10-28 12:58:23 +0000
+++ data/campaigns/tutorial04_economy.wmf/scripting/init.lua	2014-12-05 20:26:47 +0000
@@ -7,11 +7,11 @@
 
 set_textdomain("scenario_tutorial04_economy.wmf")
 
-include "scripting/coroutine.lua"
-include "scripting/infrastructure.lua"
-include "scripting/messages.lua"
-include "scripting/table.lua"
-include "scripting/ui.lua"
+include "data/scripting/coroutine.lua"
+include "data/scripting/infrastructure.lua"
+include "data/scripting/messages.lua"
+include "data/scripting/table.lua"
+include "data/scripting/ui.lua"
 
 map = wl.Game().map
 mv = wl.ui.MapView()

=== modified file 'data/campaigns/tutorial04_economy.wmf/scripting/texts.lua'
--- campaigns/tutorial04_economy.wmf/scripting/texts.lua	2014-11-11 10:41:28 +0000
+++ data/campaigns/tutorial04_economy.wmf/scripting/texts.lua	2014-12-05 20:26:47 +0000
@@ -6,8 +6,8 @@
 -- Some formating functions
 -- =========================
 
-include "scripting/formatting.lua"
-include "scripting/format_scenario.lua"
+include "data/scripting/formatting.lua"
+include "data/scripting/format_scenario.lua"
 
 
 -- =============
@@ -55,8 +55,8 @@
       h1(_[[Check out your taverns]]) ..
       p(_[[At first, we should find out how many taverns we currently have. Widelands offers you a list where you can easily check this.]])
    ) ..
-   rt("image=pics/menu_toggle_menu.png",p(_[[First, you will have to open the statistics menu (you can find the corresponding button at the bottom). We will need this menu several times.]])) ..
-   rt("image=pics/menu_building_stats.png",p(_[[Afterwards, choose the ‘Building statistics’.]]) ..
+   rt("image=wui/menus/menu_toggle_menu.png",p(_[[First, you will have to open the statistics menu (you can find the corresponding button at the bottom). We will need this menu several times.]])) ..
+   rt("image=wui/menus/menu_building_stats.png",p(_[[Afterwards, choose the ‘Building statistics’.]]) ..
       paragraphdivider() ..
       listitem_bullet(_[[Open the building statistics window.]]) ..
       listitem_bullet(_[[When you have looked up the number of taverns, close it.]])
@@ -65,7 +65,7 @@
    obj_name = "open_building_stat",
    obj_title = _"Look up your number of taverns in the building statistics window.",
    obj_body =
-      rt("image=pics/menu_building_stats.png", p(_[[The building statistics window gives you an overview over the buildings you have.]])) ..
+      rt("image=wui/menus/menu_building_stats.png", p(_[[The building statistics window gives you an overview over the buildings you have.]])) ..
    rt(
       paragraphdivider() ..
       -- TRANSLATORS: "it" refers to the building statistics window
@@ -83,7 +83,7 @@
       h1(_[[Check for rations]]) ..
       p(_[[OK. In the list, you’ve seen that you have no more taverns or inns. That means that you’re not producing any rations. But let’s see what we still have in stock.]])
    ) ..
-   rt("image=pics/menu_stock.png",p(_[[Click on the ‘Stock’ button.]])) ..
+   rt("image=wui/menus/menu_stock.png",p(_[[Click on the ‘Stock’ button.]])) ..
    rt(
       paragraphdivider() ..
       listitem_arrow(_[[You can also use the hotkey ‘i’ (as in ‘inventory’) to access this window quickly.]])
@@ -107,7 +107,7 @@
       p(_[[Looking at the rations, there are currently only five in total, probably on their way to somewhere. Five rations are not much for such a big economy.]]) ..
       p(_[[The second tab shows you all your workers, again those on roads and in buildings summed up.]]) ..
       p(_[[Now have a look at these two tabs. When you click on the]])) ..
-   rt("image=pics/menu_tab_wares_warehouse.png",p(_[[third tab (‘Wares in warehouses’), I’ll continue.]])
+   rt("image=wui/stats/menu_tab_wares_warehouse.png",p(_[[third tab (‘Wares in warehouses’), I’ll continue.]])
    ),
    h = 350,
    show_instantly = true,
@@ -179,7 +179,7 @@
       p(_[[When you’ve played a lot, you will know such things by heart. But when you’re unsure what this tribe needs for a special ware, you can easily look it up in your tribe’s ware encyclopedia.]]) ..
       p(_[[This encyclopedia can be accessed via]])
    ) ..
-   rt("image=pics/menu_help.png",p(_[[the help button at the bottom. For all your tribe’s wares, it shows a short help text, a list of buildings that produces the ware and the needed wares.]]) ..
+   rt("image=menu_help.png",p(_[[the help button at the bottom. For all your tribe’s wares, it shows a short help text, a list of buildings that produces the ware and the needed wares.]]) ..
       p(_[[If you want, you can try it out. A soldier needs a wood lance and a helm – from there on out, you can search backwards.]])
    ),
    h = 350
@@ -204,7 +204,7 @@
    title = _"Ware Statistics",
    body = rt(
       p(_[[In the statistics menu, there is also a]])) ..
-      rt("image=pics/menu_ware_stats.png",p(_[[‘Ware statistics’ button.]])) ..
+      rt("image=wui/menus/menu_ware_stats.png",p(_[[‘Ware statistics’ button.]])) ..
       rt(paragraphdivider() ..
       -- TRANSLATORS: "it" refers to the ware statistics button
       listitem_bullet(_[[Click on it.]])
@@ -225,7 +225,7 @@
       p(_[[In this menu window, you can select wares to see how their production or consumption has changed over time. Try it out with some wares.]]) ..
       paragraphdivider() ..
       listitem_bullet(_[[I’ll continue as soon as you click on the]])) ..
-   rt("image=pics/menu_tab_wares_econ_health.png",p(_[[third tab (‘Economy Health’).]])
+   rt("image=wui/stats/menu_tab_wares_econ_health.png",p(_[[third tab (‘Economy Health’).]])
    ),
    h = 250,
    show_instantly = true,
@@ -325,7 +325,7 @@
       p(_[[I’ve shown you our stock menu window, where you could see which wares are at the warehouses. You remember?]]) ..
       p(_[[Now I’ll tell you how you can determine how many wares you want to have. The menu window for this purpose can be accessed via any flag and is called ‘Configure economy’.]])) ..
    -- Yup, that's indeed the correct icon
-   rt("image=pics/genstats_nrwares.png",p(_[[This is the icon.]])) ..
+   rt("image=wui/stats/genstats_nrwares.png",p(_[[This is the icon.]])) ..
    rt(
       paragraphdivider() ..
       listitem_bullet(_[[Open this window.]])

=== modified file 'data/campaigns/tutorials.conf'
--- campaigns/tutorials.conf	2014-10-28 12:50:28 +0000
+++ data/campaigns/tutorials.conf	2014-12-05 20:26:47 +0000
@@ -13,16 +13,16 @@
 
 [tutorials00]
 name=_"Basic Control"
-path="campaigns/tutorial01_basic_control.wmf"
+path="data/campaigns/tutorial01_basic_control.wmf"
 
 [tutorials01]
 name=_"Warfare"
-path="campaigns/tutorial02_warfare.wmf"
+path="data/campaigns/tutorial02_warfare.wmf"
 
 [tutorials02]
 name=_"Seafaring"
-path="campaigns/tutorial03_seafaring.wmf"
+path="data/campaigns/tutorial03_seafaring.wmf"
 
 [tutorials03]
 name=_"Economy"
-path="campaigns/tutorial04_economy.wmf"
+path="data/campaigns/tutorial04_economy.wmf"

=== renamed directory 'global' => 'data/global'
=== added directory 'data/i18n'
=== renamed directory 'fonts' => 'data/i18n/fonts'
=== renamed file 'txts/languages' => 'data/i18n/languages'
=== renamed directory 'pics' => 'data/images'
=== added directory 'data/images/ai'
=== renamed file 'pics/ai_Aggressive.png' => 'data/images/ai/Aggressive.png'
=== renamed file 'pics/ai_Defensive.png' => 'data/images/ai/Defensive.png'
=== renamed file 'pics/ai_None.png' => 'data/images/ai/None.png'
=== renamed file 'pics/ai_Normal.png' => 'data/images/ai/Normal.png'
=== renamed file 'pics/ai_Random.png' => 'data/images/ai/Random.png'
=== added directory 'data/images/loadscreens'
=== renamed file 'pics/editor.jpg' => 'data/images/loadscreens/editor.jpg'
=== renamed file 'pics/progress.png' => 'data/images/loadscreens/progress.png'
=== renamed file 'pics/splash.jpg' => 'data/images/loadscreens/splash.jpg'
=== renamed file 'pics/tips_bg.png' => 'data/images/loadscreens/tips_bg.png'
=== added directory 'data/images/logos'
=== renamed file 'pics/WL-Editor-128.png' => 'data/images/logos/WL-Editor-128.png'
=== renamed file 'pics/WL-Editor-16.png' => 'data/images/logos/WL-Editor-16.png'
=== renamed file 'pics/WL-Editor-32.png' => 'data/images/logos/WL-Editor-32.png'
=== renamed file 'pics/WL-Editor-64.png' => 'data/images/logos/WL-Editor-64.png'
=== renamed file 'pics/widelands-disk.icns' => 'data/images/logos/widelands-disk.icns'
=== renamed file 'pics/widelands.icns' => 'data/images/logos/widelands.icns'
=== renamed file 'pics/wl-ico-128.png' => 'data/images/logos/wl-ico-128.png'
=== renamed file 'pics/wl-ico-16.png' => 'data/images/logos/wl-ico-16.png'
=== renamed file 'pics/wl-ico-32.png' => 'data/images/logos/wl-ico-32.png'
=== renamed file 'pics/wl-ico-48.png' => 'data/images/logos/wl-ico-48.png'
=== renamed file 'pics/wl-ico-64.png' => 'data/images/logos/wl-ico-64.png'
=== renamed file 'pics/wl-logo-64.png' => 'data/images/logos/wl-logo-64.png'
=== added directory 'data/images/players'
=== renamed file 'pics/editor_player_01_starting_pos.png' => 'data/images/players/editor_player_01_starting_pos.png'
=== renamed file 'pics/editor_player_02_starting_pos.png' => 'data/images/players/editor_player_02_starting_pos.png'
=== renamed file 'pics/editor_player_03_starting_pos.png' => 'data/images/players/editor_player_03_starting_pos.png'
=== renamed file 'pics/editor_player_04_starting_pos.png' => 'data/images/players/editor_player_04_starting_pos.png'
=== renamed file 'pics/editor_player_05_starting_pos.png' => 'data/images/players/editor_player_05_starting_pos.png'
=== renamed file 'pics/editor_player_06_starting_pos.png' => 'data/images/players/editor_player_06_starting_pos.png'
=== renamed file 'pics/editor_player_07_starting_pos.png' => 'data/images/players/editor_player_07_starting_pos.png'
=== renamed file 'pics/editor_player_08_starting_pos.png' => 'data/images/players/editor_player_08_starting_pos.png'
=== renamed file 'pics/fsel_editor_set_player_01_pos.png' => 'data/images/players/fsel_editor_set_player_01_pos.png'
=== renamed file 'pics/fsel_editor_set_player_02_pos.png' => 'data/images/players/fsel_editor_set_player_02_pos.png'
=== renamed file 'pics/fsel_editor_set_player_03_pos.png' => 'data/images/players/fsel_editor_set_player_03_pos.png'
=== renamed file 'pics/fsel_editor_set_player_04_pos.png' => 'data/images/players/fsel_editor_set_player_04_pos.png'
=== renamed file 'pics/fsel_editor_set_player_05_pos.png' => 'data/images/players/fsel_editor_set_player_05_pos.png'
=== renamed file 'pics/fsel_editor_set_player_06_pos.png' => 'data/images/players/fsel_editor_set_player_06_pos.png'
=== renamed file 'pics/fsel_editor_set_player_07_pos.png' => 'data/images/players/fsel_editor_set_player_07_pos.png'
=== renamed file 'pics/fsel_editor_set_player_08_pos.png' => 'data/images/players/fsel_editor_set_player_08_pos.png'
=== renamed file 'pics/genstats_enable_plr_01.png' => 'data/images/players/genstats_enable_plr_01.png'
=== renamed file 'pics/genstats_enable_plr_02.png' => 'data/images/players/genstats_enable_plr_02.png'
=== renamed file 'pics/genstats_enable_plr_03.png' => 'data/images/players/genstats_enable_plr_03.png'
=== renamed file 'pics/genstats_enable_plr_04.png' => 'data/images/players/genstats_enable_plr_04.png'
=== renamed file 'pics/genstats_enable_plr_05.png' => 'data/images/players/genstats_enable_plr_05.png'
=== renamed file 'pics/genstats_enable_plr_06.png' => 'data/images/players/genstats_enable_plr_06.png'
=== renamed file 'pics/genstats_enable_plr_07.png' => 'data/images/players/genstats_enable_plr_07.png'
=== renamed file 'pics/genstats_enable_plr_08.png' => 'data/images/players/genstats_enable_plr_08.png'
=== added directory 'data/images/richtext'
=== renamed file 'pics/arrow-right.png' => 'data/images/richtext/arrow-right.png'
=== added directory 'data/images/ui_basic'
=== renamed file 'pics/but0.png' => 'data/images/ui_basic/but0.png'
=== renamed file 'pics/but1.png' => 'data/images/ui_basic/but1.png'
=== renamed file 'pics/but2.png' => 'data/images/ui_basic/but2.png'
=== renamed file 'pics/but3.png' => 'data/images/ui_basic/but3.png'
=== renamed file 'pics/but4.png' => 'data/images/ui_basic/but4.png'
=== renamed file 'pics/caret.png' => 'data/images/ui_basic/caret.png'
=== renamed file 'pics/checkbox.png' => 'data/images/ui_basic/checkbox.png'
=== renamed file 'pics/checkbox_checked.png' => 'data/images/ui_basic/checkbox_checked.png'
=== renamed file 'pics/checkbox_empty.png' => 'data/images/ui_basic/checkbox_empty.png'
=== renamed file 'pics/checkbox_light.png' => 'data/images/ui_basic/checkbox_light.png'
=== renamed file 'pics/continue.png' => 'data/images/ui_basic/continue.png'
=== renamed file 'pics/cursor.png' => 'data/images/ui_basic/cursor.png'
=== renamed file 'pics/cursor_click.png' => 'data/images/ui_basic/cursor_click.png'
=== renamed file 'pics/different.png' => 'data/images/ui_basic/different.png'
=== renamed file 'pics/fsel.png' => 'data/images/ui_basic/fsel.png'
=== renamed file 'pics/list_first_entry.png' => 'data/images/ui_basic/list_first_entry.png'
=== renamed file 'pics/list_selected.png' => 'data/images/ui_basic/list_selected.png'
=== renamed file 'pics/ls_dir.png' => 'data/images/ui_basic/ls_dir.png'
=== renamed file 'pics/ls_s2map.png' => 'data/images/ui_basic/ls_s2map.png'
=== renamed file 'pics/ls_wlmap.png' => 'data/images/ui_basic/ls_wlmap.png'
=== renamed file 'pics/ls_wlscenario.png' => 'data/images/ui_basic/ls_wlscenario.png'
=== renamed file 'pics/menu_help.png' => 'data/images/ui_basic/menu_help.png'
=== renamed file 'pics/scrollbar_background.png' => 'data/images/ui_basic/scrollbar_background.png'
=== renamed file 'pics/scrollbar_down.png' => 'data/images/ui_basic/scrollbar_down.png'
=== renamed file 'pics/scrollbar_left.png' => 'data/images/ui_basic/scrollbar_left.png'
=== renamed file 'pics/scrollbar_right.png' => 'data/images/ui_basic/scrollbar_right.png'
=== renamed file 'pics/scrollbar_up.png' => 'data/images/ui_basic/scrollbar_up.png'
=== renamed file 'pics/stop.png' => 'data/images/ui_basic/stop.png'
=== added directory 'data/images/ui_fsmenu'
=== renamed file 'pics/challenging.png' => 'data/images/ui_fsmenu/challenging.png'
=== renamed file 'pics/choosemapmenu.jpg' => 'data/images/ui_fsmenu/choosemapmenu.jpg'
=== renamed file 'pics/easy.png' => 'data/images/ui_fsmenu/easy.png'
=== renamed file 'pics/fileviewmenu.jpg' => 'data/images/ui_fsmenu/fileviewmenu.jpg'
=== renamed file 'pics/hard.png' => 'data/images/ui_fsmenu/hard.png'
=== renamed file 'pics/internetmenu.jpg' => 'data/images/ui_fsmenu/internetmenu.jpg'
=== renamed file 'pics/launchMPGmenu.jpg' => 'data/images/ui_fsmenu/launch_mpg_menu.jpg'
=== renamed file 'pics/mainmenu.jpg' => 'data/images/ui_fsmenu/mainmenu.jpg'
=== renamed file 'pics/menu_load_game.png' => 'data/images/ui_fsmenu/menu_load_game.png'
=== renamed file 'pics/optionsmenu.jpg' => 'data/images/ui_fsmenu/optionsmenu.jpg'
=== renamed file 'pics/random.png' => 'data/images/ui_fsmenu/random.png'
=== renamed file 'pics/shared_in.png' => 'data/images/ui_fsmenu/shared_in.png'
=== renamed file 'pics/ui_fsmenu.jpg' => 'data/images/ui_fsmenu/ui_fsmenu.jpg'
=== added directory 'data/images/unused'
=== renamed file 'pics/attack_add_soldier.png' => 'data/images/unused/attack_add_soldier.png'
=== renamed file 'pics/attack_strongest.png' => 'data/images/unused/attack_strongest.png'
=== renamed file 'pics/attack_sub_soldier.png' => 'data/images/unused/attack_sub_soldier.png'
=== renamed file 'pics/attack_weakest.png' => 'data/images/unused/attack_weakest.png'
=== renamed file 'pics/cursor2.png' => 'data/images/unused/cursor2.png'
=== renamed file 'pics/list_second_entry.png' => 'data/images/unused/list_second_entry.png'
=== renamed file 'pics/list_third_entry.png' => 'data/images/unused/list_third_entry.png'
=== renamed file 'pics/menu_message_deleteall.png' => 'data/images/unused/menu_message_deleteall.png'
=== renamed file 'pics/menu_sort.png' => 'data/images/unused/menu_sort.png'
=== renamed file 'pics/menu_tab_training.png' => 'data/images/unused/menu_tab_training.png'
=== renamed file 'pics/menu_toggle_objectives_menu.png' => 'data/images/unused/menu_toggle_objectives_menu.png'
=== renamed file 'pics/menu_train_options.png' => 'data/images/unused/menu_train_options.png'
=== renamed file 'pics/progress_bg.png' => 'data/images/unused/progress_bg.png'
=== renamed file 'pics/queue_background.png' => 'data/images/unused/queue_background.png'
=== renamed file 'pics/warehousewindow_switchpage.png' => 'data/images/unused/warehousewindow_switchpage.png'
=== added directory 'data/images/wui'
=== added directory 'data/images/wui/buildings'
=== renamed file 'pics/cancel_expedition.png' => 'data/images/wui/buildings/cancel_expedition.png'
=== renamed file 'pics/high_priority_button.png' => 'data/images/wui/buildings/high_priority_button.png'
=== renamed file 'pics/low_priority_button.png' => 'data/images/wui/buildings/low_priority_button.png'
=== renamed file 'pics/max_fill_indicator.png' => 'data/images/wui/buildings/max_fill_indicator.png'
=== renamed file 'pics/menu_attack.png' => 'data/images/wui/buildings/menu_attack.png'
=== renamed file 'pics/menu_bld_bulldoze.png' => 'data/images/wui/buildings/menu_bld_bulldoze.png'
=== renamed file 'pics/menu_bld_dismantle.png' => 'data/images/wui/buildings/menu_bld_dismantle.png'
=== renamed file 'pics/menu_down_train.png' => 'data/images/wui/buildings/menu_down_train.png'
=== renamed file 'pics/menu_drop_soldier.png' => 'data/images/wui/buildings/menu_drop_soldier.png'
=== renamed file 'pics/menu_list_workers.png' => 'data/images/wui/buildings/menu_list_workers.png'
=== renamed file 'pics/menu_tab_military.png' => 'data/images/wui/buildings/menu_tab_military.png'
=== renamed file 'pics/menu_tab_wares.png' => 'data/images/wui/buildings/menu_tab_wares.png'
=== renamed file 'pics/menu_tab_wares_dock.png' => 'data/images/wui/buildings/menu_tab_wares_dock.png'
=== renamed file 'pics/menu_tab_workers.png' => 'data/images/wui/buildings/menu_tab_workers.png'
=== renamed file 'pics/menu_tab_workers_dock.png' => 'data/images/wui/buildings/menu_tab_workers_dock.png'
=== renamed file 'pics/menu_up_train.png' => 'data/images/wui/buildings/menu_up_train.png'
=== renamed file 'pics/normal_priority_button.png' => 'data/images/wui/buildings/normal_priority_button.png'
=== renamed file 'pics/prefer_heroes.png' => 'data/images/wui/buildings/prefer_heroes.png'
=== renamed file 'pics/prefer_rookies.png' => 'data/images/wui/buildings/prefer_rookies.png'
=== renamed file 'pics/start_expedition.png' => 'data/images/wui/buildings/start_expedition.png'
=== renamed file 'pics/stock_policy_button_dontstock.png' => 'data/images/wui/buildings/stock_policy_button_dontstock.png'
=== renamed file 'pics/stock_policy_button_normal.png' => 'data/images/wui/buildings/stock_policy_button_normal.png'
=== renamed file 'pics/stock_policy_button_prefer.png' => 'data/images/wui/buildings/stock_policy_button_prefer.png'
=== renamed file 'pics/stock_policy_button_remove.png' => 'data/images/wui/buildings/stock_policy_button_remove.png'
=== renamed file 'pics/stock_policy_dontstock.png' => 'data/images/wui/buildings/stock_policy_dontstock.png'
=== renamed file 'pics/stock_policy_prefer.png' => 'data/images/wui/buildings/stock_policy_prefer.png'
=== renamed file 'pics/stock_policy_remove.png' => 'data/images/wui/buildings/stock_policy_remove.png'
=== added directory 'data/images/wui/editor'
=== renamed file 'pics/editor_menu_player_menu.png' => 'data/images/wui/editor/editor_menu_player_menu.png'
=== renamed file 'pics/editor_menu_set_toolsize_menu.png' => 'data/images/wui/editor/editor_menu_set_toolsize_menu.png'
=== renamed file 'pics/editor_menu_toggle_tool_menu.png' => 'data/images/wui/editor/editor_menu_toggle_tool_menu.png'
=== renamed file 'pics/editor_menu_tool_change_height.png' => 'data/images/wui/editor/editor_menu_tool_change_height.png'
=== renamed file 'pics/editor_menu_tool_change_resources.png' => 'data/images/wui/editor/editor_menu_tool_change_resources.png'
=== renamed file 'pics/editor_menu_tool_noise_height.png' => 'data/images/wui/editor/editor_menu_tool_noise_height.png'
=== renamed file 'pics/editor_menu_tool_place_bob.png' => 'data/images/wui/editor/editor_menu_tool_place_bob.png'
=== renamed file 'pics/editor_menu_tool_place_immovable.png' => 'data/images/wui/editor/editor_menu_tool_place_immovable.png'
=== renamed file 'pics/editor_menu_tool_set_port_space.png' => 'data/images/wui/editor/editor_menu_tool_set_port_space.png'
=== renamed file 'pics/editor_menu_tool_set_terrain.png' => 'data/images/wui/editor/editor_menu_tool_set_terrain.png'
=== renamed file 'pics/editor_redo.png' => 'data/images/wui/editor/editor_redo.png'
=== renamed file 'pics/editor_undo.png' => 'data/images/wui/editor/editor_undo.png'
=== renamed file 'pics/fsel_editor_decrease_height.png' => 'data/images/wui/editor/fsel_editor_decrease_height.png'
=== renamed file 'pics/fsel_editor_decrease_resources.png' => 'data/images/wui/editor/fsel_editor_decrease_resources.png'
=== renamed file 'pics/fsel_editor_delete.png' => 'data/images/wui/editor/fsel_editor_delete.png'
=== renamed file 'pics/fsel_editor_increase_height.png' => 'data/images/wui/editor/fsel_editor_increase_height.png'
=== renamed file 'pics/fsel_editor_increase_resources.png' => 'data/images/wui/editor/fsel_editor_increase_resources.png'
=== renamed file 'pics/fsel_editor_info.png' => 'data/images/wui/editor/fsel_editor_info.png'
=== renamed file 'pics/fsel_editor_noise_height.png' => 'data/images/wui/editor/fsel_editor_noise_height.png'
=== renamed file 'pics/fsel_editor_place_bob.png' => 'data/images/wui/editor/fsel_editor_place_bob.png'
=== renamed file 'pics/fsel_editor_place_immovable.png' => 'data/images/wui/editor/fsel_editor_place_immovable.png'
=== renamed file 'pics/fsel_editor_set_height.png' => 'data/images/wui/editor/fsel_editor_set_height.png'
=== renamed file 'pics/fsel_editor_set_port_space.png' => 'data/images/wui/editor/fsel_editor_set_port_space.png'
=== renamed file 'pics/fsel_editor_set_resources.png' => 'data/images/wui/editor/fsel_editor_set_resources.png'
=== renamed file 'pics/fsel_editor_unset_port_space.png' => 'data/images/wui/editor/fsel_editor_unset_port_space.png'
=== renamed file 'pics/terrain_dead.png' => 'data/images/wui/editor/terrain_dead.png'
=== renamed file 'pics/terrain_dry.png' => 'data/images/wui/editor/terrain_dry.png'
=== renamed file 'pics/terrain_green.png' => 'data/images/wui/editor/terrain_green.png'
=== renamed file 'pics/terrain_mountain.png' => 'data/images/wui/editor/terrain_mountain.png'
=== renamed file 'pics/terrain_unpassable.png' => 'data/images/wui/editor/terrain_unpassable.png'
=== renamed file 'pics/terrain_water.png' => 'data/images/wui/editor/terrain_water.png'
=== added directory 'data/images/wui/fieldaction'
=== renamed file 'pics/menu_build_flag.png' => 'data/images/wui/fieldaction/menu_build_flag.png'
=== renamed file 'pics/menu_build_way.png' => 'data/images/wui/fieldaction/menu_build_way.png'
=== renamed file 'pics/menu_debug.png' => 'data/images/wui/fieldaction/menu_debug.png'
=== renamed file 'pics/menu_geologist.png' => 'data/images/wui/fieldaction/menu_geologist.png'
=== renamed file 'pics/menu_rem_way.png' => 'data/images/wui/fieldaction/menu_rem_way.png'
=== renamed file 'pics/menu_rip_flag.png' => 'data/images/wui/fieldaction/menu_rip_flag.png'
=== renamed file 'pics/menu_show_census.png' => 'data/images/wui/fieldaction/menu_show_census.png'
=== renamed file 'pics/menu_show_statistics.png' => 'data/images/wui/fieldaction/menu_show_statistics.png'
=== renamed file 'pics/menu_tab_attack.png' => 'data/images/wui/fieldaction/menu_tab_attack.png'
=== renamed file 'pics/menu_tab_buildbig.png' => 'data/images/wui/fieldaction/menu_tab_buildbig.png'
=== renamed file 'pics/menu_tab_buildmedium.png' => 'data/images/wui/fieldaction/menu_tab_buildmedium.png'
=== renamed file 'pics/menu_tab_buildmine.png' => 'data/images/wui/fieldaction/menu_tab_buildmine.png'
=== renamed file 'pics/menu_tab_buildport.png' => 'data/images/wui/fieldaction/menu_tab_buildport.png'
=== renamed file 'pics/menu_tab_buildroad.png' => 'data/images/wui/fieldaction/menu_tab_buildroad.png'
=== renamed file 'pics/menu_tab_buildsmall.png' => 'data/images/wui/fieldaction/menu_tab_buildsmall.png'
=== renamed file 'pics/menu_tab_watch.png' => 'data/images/wui/fieldaction/menu_tab_watch.png'
=== renamed file 'pics/menu_watch_field.png' => 'data/images/wui/fieldaction/menu_watch_field.png'
=== renamed file 'pics/menu_abort.png' => 'data/images/wui/menu_abort.png'
=== renamed file 'pics/menu_okay.png' => 'data/images/wui/menu_okay.png'
=== added directory 'data/images/wui/menus'
=== renamed file 'pics/menu_building_stats.png' => 'data/images/wui/menus/menu_building_stats.png'
=== renamed file 'pics/menu_chat.png' => 'data/images/wui/menus/menu_chat.png'
=== renamed file 'pics/menu_exit_game.png' => 'data/images/wui/menus/menu_exit_game.png'
=== renamed file 'pics/menu_general_stats.png' => 'data/images/wui/menus/menu_general_stats.png'
=== renamed file 'pics/menu_goto.png' => 'data/images/wui/menus/menu_goto.png'
=== renamed file 'pics/menu_objectives.png' => 'data/images/wui/menus/menu_objectives.png'
=== renamed file 'pics/menu_options_menu.png' => 'data/images/wui/menus/menu_options_menu.png'
=== renamed file 'pics/menu_save_game.png' => 'data/images/wui/menus/menu_save_game.png'
=== renamed file 'pics/menu_stock.png' => 'data/images/wui/menus/menu_stock.png'
=== renamed file 'pics/menu_toggle_buildhelp.png' => 'data/images/wui/menus/menu_toggle_buildhelp.png'
=== renamed file 'pics/menu_toggle_menu.png' => 'data/images/wui/menus/menu_toggle_menu.png'
=== renamed file 'pics/menu_toggle_minimap.png' => 'data/images/wui/menus/menu_toggle_minimap.png'
=== renamed file 'pics/menu_toggle_newmessage_menu.png' => 'data/images/wui/menus/menu_toggle_newmessage_menu.png'
=== renamed file 'pics/menu_toggle_oldmessage_menu.png' => 'data/images/wui/menus/menu_toggle_oldmessage_menu.png'
=== renamed file 'pics/menu_ware_stats.png' => 'data/images/wui/menus/menu_ware_stats.png'
=== renamed file 'pics/menu_watch_follow.png' => 'data/images/wui/menus/menu_watch_follow.png'
=== added directory 'data/images/wui/messages'
=== renamed file 'pics/message_archive.png' => 'data/images/wui/messages/message_archive.png'
=== renamed file 'pics/message_archived.png' => 'data/images/wui/messages/message_archived.png'
=== renamed file 'pics/message_new.png' => 'data/images/wui/messages/message_new.png'
=== renamed file 'pics/message_read.png' => 'data/images/wui/messages/message_read.png'
=== renamed file 'pics/message_restore.png' => 'data/images/wui/messages/message_restore.png'
=== added directory 'data/images/wui/minimap'
=== renamed file 'pics/button_bldns.png' => 'data/images/wui/minimap/button_bldns.png'
=== renamed file 'pics/button_flags.png' => 'data/images/wui/minimap/button_flags.png'
=== renamed file 'pics/button_owner.png' => 'data/images/wui/minimap/button_owner.png'
=== renamed file 'pics/button_roads.png' => 'data/images/wui/minimap/button_roads.png'
=== renamed file 'pics/button_terrn.png' => 'data/images/wui/minimap/button_terrn.png'
=== renamed file 'pics/button_zoom.png' => 'data/images/wui/minimap/button_zoom.png'
=== added directory 'data/images/wui/overlays'
=== renamed file 'pics/big.png' => 'data/images/wui/overlays/big.png'
=== renamed file 'pics/map_spot.png' => 'data/images/wui/overlays/map_spot.png'
=== renamed file 'pics/medium.png' => 'data/images/wui/overlays/medium.png'
=== renamed file 'pics/mine.png' => 'data/images/wui/overlays/mine.png'
=== renamed file 'pics/port.png' => 'data/images/wui/overlays/port.png'
=== renamed file 'pics/roadb_green.png' => 'data/images/wui/overlays/roadb_green.png'
=== renamed file 'pics/roadb_red.png' => 'data/images/wui/overlays/roadb_red.png'
=== renamed file 'pics/roadb_reddown.png' => 'data/images/wui/overlays/roadb_reddown.png'
=== renamed file 'pics/roadb_yellow.png' => 'data/images/wui/overlays/roadb_yellow.png'
=== renamed file 'pics/roadb_yellowdown.png' => 'data/images/wui/overlays/roadb_yellowdown.png'
=== renamed file 'pics/set_flag.png' => 'data/images/wui/overlays/set_flag.png'
=== renamed file 'pics/small.png' => 'data/images/wui/overlays/small.png'
=== renamed file 'pics/workarea1.png' => 'data/images/wui/overlays/workarea1.png'
=== renamed file 'pics/workarea12.png' => 'data/images/wui/overlays/workarea12.png'
=== renamed file 'pics/workarea123.png' => 'data/images/wui/overlays/workarea123.png'
=== renamed file 'pics/workarea2.png' => 'data/images/wui/overlays/workarea2.png'
=== renamed file 'pics/workarea23.png' => 'data/images/wui/overlays/workarea23.png'
=== renamed file 'pics/workarea3.png' => 'data/images/wui/overlays/workarea3.png'
=== renamed file 'pics/plot_area_bg.png' => 'data/images/wui/plot_area_bg.png'
=== added directory 'data/images/wui/ship'
=== renamed file 'pics/menu_ship_cancel_expedition.png' => 'data/images/wui/ship/menu_ship_cancel_expedition.png'
=== renamed file 'pics/menu_ship_destination.png' => 'data/images/wui/ship/menu_ship_destination.png'
=== renamed file 'pics/menu_ship_goto.png' => 'data/images/wui/ship/menu_ship_goto.png'
=== renamed file 'pics/menu_ship_sink.png' => 'data/images/wui/ship/menu_ship_sink.png'
=== renamed file 'pics/ship_explore_island_ccw.png' => 'data/images/wui/ship/ship_explore_island_ccw.png'
=== renamed file 'pics/ship_explore_island_cw.png' => 'data/images/wui/ship/ship_explore_island_cw.png'
=== renamed file 'pics/ship_scout_e.png' => 'data/images/wui/ship/ship_scout_e.png'
=== renamed file 'pics/ship_scout_ne.png' => 'data/images/wui/ship/ship_scout_ne.png'
=== renamed file 'pics/ship_scout_nw.png' => 'data/images/wui/ship/ship_scout_nw.png'
=== renamed file 'pics/ship_scout_se.png' => 'data/images/wui/ship/ship_scout_se.png'
=== renamed file 'pics/ship_scout_sw.png' => 'data/images/wui/ship/ship_scout_sw.png'
=== renamed file 'pics/ship_scout_w.png' => 'data/images/wui/ship/ship_scout_w.png'
=== added directory 'data/images/wui/stats'
=== renamed file 'pics/genstats_casualties.png' => 'data/images/wui/stats/genstats_casualties.png'
=== renamed file 'pics/genstats_civil_blds_lost.png' => 'data/images/wui/stats/genstats_civil_blds_lost.png'
=== renamed file 'pics/genstats_kills.png' => 'data/images/wui/stats/genstats_kills.png'
=== renamed file 'pics/genstats_landsize.png' => 'data/images/wui/stats/genstats_landsize.png'
=== renamed file 'pics/genstats_militarystrength.png' => 'data/images/wui/stats/genstats_militarystrength.png'
=== renamed file 'pics/genstats_msites_defeated.png' => 'data/images/wui/stats/genstats_msites_defeated.png'
=== renamed file 'pics/genstats_msites_lost.png' => 'data/images/wui/stats/genstats_msites_lost.png'
=== renamed file 'pics/genstats_nrbuildings.png' => 'data/images/wui/stats/genstats_nrbuildings.png'
=== renamed file 'pics/genstats_nrwares.png' => 'data/images/wui/stats/genstats_nrwares.png'
=== renamed file 'pics/genstats_nrworkers.png' => 'data/images/wui/stats/genstats_nrworkers.png'
=== renamed file 'pics/genstats_points.png' => 'data/images/wui/stats/genstats_points.png'
=== renamed file 'pics/genstats_productivity.png' => 'data/images/wui/stats/genstats_productivity.png'
=== renamed file 'pics/genstats_trees.png' => 'data/images/wui/stats/genstats_trees.png'
=== renamed file 'pics/menu_tab_wares_consumption.png' => 'data/images/wui/stats/menu_tab_wares_consumption.png'
=== renamed file 'pics/menu_tab_wares_econ_health.png' => 'data/images/wui/stats/menu_tab_wares_econ_health.png'
=== renamed file 'pics/menu_tab_wares_production.png' => 'data/images/wui/stats/menu_tab_wares_production.png'
=== renamed file 'pics/menu_tab_wares_stock.png' => 'data/images/wui/stats/menu_tab_wares_stock.png'
=== renamed file 'pics/menu_tab_wares_warehouse.png' => 'data/images/wui/stats/menu_tab_wares_warehouse.png'
=== renamed file 'pics/menu_tab_workers_warehouse.png' => 'data/images/wui/stats/menu_tab_workers_warehouse.png'
=== renamed file 'pics/ware_list_bg.png' => 'data/images/wui/ware_list_bg.png'
=== renamed file 'pics/ware_list_bg_selected.png' => 'data/images/wui/ware_list_bg_selected.png'
=== renamed file 'pics/win_bg.png' => 'data/images/wui/window_background.png'
=== renamed file 'pics/win_bot.png' => 'data/images/wui/window_bottom.png'
=== renamed file 'pics/win_l_border.png' => 'data/images/wui/window_left.png'
=== renamed file 'pics/win_r_border.png' => 'data/images/wui/window_right.png'
=== renamed file 'pics/win_top.png' => 'data/images/wui/window_top.png'
=== renamed directory 'maps' => 'data/maps'
=== modified file 'data/maps/MP Scenarios/Island Hopping.wmf/scripting/multiplayer_init.lua'
--- maps/MP Scenarios/Island Hopping.wmf/scripting/multiplayer_init.lua	2014-10-02 11:45:56 +0000
+++ data/maps/MP Scenarios/Island Hopping.wmf/scripting/multiplayer_init.lua	2014-12-05 20:26:47 +0000
@@ -1,11 +1,11 @@
 -- =================================
 -- Island Hopping Fun Map Scripting
 -- =================================
-include "scripting/coroutine.lua"
-include "scripting/formatting.lua"
-include "scripting/infrastructure.lua"
-include "scripting/messages.lua"
-include "scripting/objective_utils.lua"
+include "data/cripting/coroutine.lua"
+include "data/scripting/formatting.lua"
+include "data/scripting/infrastructure.lua"
+include "data/scripting/messages.lua"
+include "data/scripting/objective_utils.lua"
 
 -- ==========
 -- Constants

=== modified file 'data/maps/MP Scenarios/Smugglers.wmf/scripting/multiplayer_init.lua'
--- maps/MP Scenarios/Smugglers.wmf/scripting/multiplayer_init.lua	2014-10-03 20:16:29 +0000
+++ data/maps/MP Scenarios/Smugglers.wmf/scripting/multiplayer_init.lua	2014-12-05 20:26:47 +0000
@@ -1,11 +1,11 @@
 -- =================================
 -- Smugglers Fun Map
 -- =================================
-include "scripting/coroutine.lua"
-include "scripting/infrastructure.lua"
-include "scripting/formatting.lua"
-include "scripting/objective_utils.lua"
-include "scripting/set.lua"
+include "data/scripting/coroutine.lua"
+include "data/scripting/infrastructure.lua"
+include "data/scripting/formatting.lua"
+include "data/scripting/objective_utils.lua"
+include "data/scripting/set.lua"
 
 -- ==========
 -- Constants

=== modified file 'data/maps/MP Scenarios/Smugglers.wmf/scripting/smuggling.lua'
--- maps/MP Scenarios/Smugglers.wmf/scripting/smuggling.lua	2014-10-03 20:16:29 +0000
+++ data/maps/MP Scenarios/Smugglers.wmf/scripting/smuggling.lua	2014-12-05 20:26:47 +0000
@@ -2,7 +2,7 @@
 --                              Smuggling logic
 -- =======================================================================
 
-include "scripting/messages.lua"
+include "data/scripting/messages.lua"
 
 -- =================
 -- Helper functions

=== modified file 'data/maps/Plateau.wmf/scripting/init.lua'
--- maps/Plateau.wmf/scripting/init.lua	2014-10-02 09:39:55 +0000
+++ data/maps/Plateau.wmf/scripting/init.lua	2014-12-05 20:26:47 +0000
@@ -4,11 +4,11 @@
 
 set_textdomain("map_plateau.wmf")
 
-include "scripting/coroutine.lua"
-include "scripting/infrastructure.lua"
-include "scripting/messages.lua"
-include "scripting/table.lua"
-include "scripting/ui.lua"
+include "data/scripting/coroutine.lua"
+include "data/scripting/infrastructure.lua"
+include "data/scripting/messages.lua"
+include "data/scripting/table.lua"
+include "data/scripting/ui.lua"
 
 p1 = wl.Game().players[1]
 p2 = wl.Game().players[2]

=== modified file 'data/maps/Plateau.wmf/scripting/texts.lua'
--- maps/Plateau.wmf/scripting/texts.lua	2014-10-02 09:39:55 +0000
+++ data/maps/Plateau.wmf/scripting/texts.lua	2014-12-05 20:26:47 +0000
@@ -2,9 +2,9 @@
 --                     TEXTS - No logic inside this file
 -- =======================================================================
 
-include "scripting/formatting.lua"
-include "scripting/format_scenario.lua"
-include "scripting/messages.lua"
+include "data/scripting/formatting.lua"
+include "data/scripting/format_scenario.lua"
+include "data/scripting/messages.lua"
 
 
 -- ===========

=== modified file 'data/maps/Trident of Fire.wmf/scripting/multiplayer_init.lua'
--- maps/Trident of Fire.wmf/scripting/multiplayer_init.lua	2014-03-25 06:18:48 +0000
+++ data/maps/Trident of Fire.wmf/scripting/multiplayer_init.lua	2014-12-05 20:26:47 +0000
@@ -2,12 +2,12 @@
 --                      Scenario Trident of Fire
 -- =======================================================================
 
-include "scripting/coroutine.lua"
-include "scripting/table.lua"
-include "scripting/infrastructure.lua"
-include "scripting/objective_utils.lua"
-include "scripting/ui.lua"
-include "scripting/set.lua"
+include "data/scripting/coroutine.lua"
+include "data/scripting/table.lua"
+include "data/scripting/infrastructure.lua"
+include "data/scripting/objective_utils.lua"
+include "data/scripting/ui.lua"
+include "data/scripting/set.lua"
 
 game = wl.Game()
 map = game.map

=== renamed directory 'music' => 'data/music'
=== renamed directory 'scripting' => 'data/scripting'
=== modified file 'data/scripting/messages.lua'
--- scripting/messages.lua	2014-10-31 11:36:29 +0000
+++ data/scripting/messages.lua	2014-12-05 20:26:47 +0000
@@ -4,8 +4,8 @@
 --
 -- Functions to send messages to the player and to add objectives to campaigns.
 
-include "scripting/coroutine.lua"
-include "scripting/table.lua"
+include "data/scripting/coroutine.lua"
+include "data/scripting/table.lua"
 
 -- RST
 -- .. function:: send_message(player, title, body, parameters)

=== modified file 'data/scripting/ui.lua'
--- scripting/ui.lua	2014-11-04 07:17:52 +0000
+++ data/scripting/ui.lua	2014-12-05 20:26:47 +0000
@@ -1,4 +1,4 @@
-include "scripting/coroutine.lua"
+include "data/scripting/coroutine.lua"
 
 -- RST
 -- ui.lua
@@ -77,7 +77,7 @@
 --
 --    .. code-block:: lua
 --
---       include "scripting/table.lua" -- for reverse()
+--       include "data/scripting/table.lua" -- for reverse()
 --
 --       -- Move there in one second
 --       pts = scroll_smoothly_to(wl.Game().map:get_field(23, 42))

=== modified file 'data/scripting/win_condition_functions.lua'
--- scripting/win_condition_functions.lua	2014-10-02 20:45:24 +0000
+++ data/scripting/win_condition_functions.lua	2014-12-05 20:26:47 +0000
@@ -1,4 +1,4 @@
-include "scripting/messages.lua"
+include "data/scripting/messages.lua"
 
 -- RST
 -- win_condition_functions.lua

=== modified file 'data/scripting/win_conditions/00_endless_game.lua'
--- scripting/win_conditions/00_endless_game.lua	2014-06-05 10:04:20 +0000
+++ data/scripting/win_conditions/00_endless_game.lua	2014-12-05 20:26:47 +0000
@@ -2,12 +2,12 @@
 --                         An endless game without rules
 -- =======================================================================
 
-include "scripting/coroutine.lua" -- for sleep
-include "scripting/win_condition_functions.lua"
+include "data/scripting/coroutine.lua" -- for sleep
+include "data/scripting/win_condition_functions.lua"
 
 set_textdomain("win_conditions")
 
-include "scripting/win_condition_texts.lua"
+include "data/scripting/win_condition_texts.lua"
 
 local wc_name = _ "Endless Game"
 local wc_version = 1

=== modified file 'data/scripting/win_conditions/01_defeat_all.lua'
--- scripting/win_conditions/01_defeat_all.lua	2014-06-05 10:04:20 +0000
+++ data/scripting/win_conditions/01_defeat_all.lua	2014-12-05 20:26:47 +0000
@@ -2,12 +2,12 @@
 --                         Defeat all Win condition
 -- =======================================================================
 
-include "scripting/coroutine.lua" -- for sleep
-include "scripting/win_condition_functions.lua"
+include "data/scripting/coroutine.lua" -- for sleep
+include "data/scripting/win_condition_functions.lua"
 
 set_textdomain("win_conditions")
 
-include "scripting/win_condition_texts.lua"
+include "data/scripting/win_condition_texts.lua"
 
 local wc_name = _ "Autocrat"
 local wc_version = 2

=== modified file 'data/scripting/win_conditions/02_collectors.lua'
--- scripting/win_conditions/02_collectors.lua	2014-10-02 20:45:24 +0000
+++ data/scripting/win_conditions/02_collectors.lua	2014-12-05 20:26:47 +0000
@@ -2,15 +2,15 @@
 --                         Collectors Win condition
 -- =======================================================================
 
-include "scripting/coroutine.lua" -- for sleep
-include "scripting/messages.lua"
-include "scripting/formatting.lua"
-include "scripting/table.lua"
-include "scripting/win_condition_functions.lua"
+include "data/scripting/coroutine.lua" -- for sleep
+include "data/scripting/messages.lua"
+include "data/scripting/formatting.lua"
+include "data/scripting/table.lua"
+include "data/scripting/win_condition_functions.lua"
 
 set_textdomain("win_conditions")
 
-include "scripting/win_condition_texts.lua"
+include "data/scripting/win_condition_texts.lua"
 
 local wc_name = _ "Collectors"
 local wc_version = 2
@@ -161,7 +161,7 @@
    if hooks == nil then hooks = {} end
    hooks.custom_statistic = {
       name = wc_points,
-      pic = "pics/genstats_points.png",
+      pic = "wui/stats/genstats_points.png",
       calculator = function(p)
          local pts = _calc_points(p)
          return pts

=== modified file 'data/scripting/win_conditions/03_territorial_lord.lua'
--- scripting/win_conditions/03_territorial_lord.lua	2014-10-02 20:45:24 +0000
+++ data/scripting/win_conditions/03_territorial_lord.lua	2014-12-05 20:26:47 +0000
@@ -2,14 +2,14 @@
 --                   Territorial Lord Win condition
 -- =======================================================================
 
-include "scripting/coroutine.lua" -- for sleep
-include "scripting/messages.lua"
-include "scripting/table.lua"
-include "scripting/win_condition_functions.lua"
+include "data/scripting/coroutine.lua" -- for sleep
+include "data/scripting/messages.lua"
+include "data/scripting/table.lua"
+include "data/scripting/win_condition_functions.lua"
 
 set_textdomain("win_conditions")
 
-include "scripting/win_condition_texts.lua"
+include "data/scripting/win_condition_texts.lua"
 
 local wc_name = _ "Territorial Lord"
 local wc_version = 2

=== modified file 'data/scripting/win_conditions/03_territorial_time.lua'
--- scripting/win_conditions/03_territorial_time.lua	2014-10-02 20:45:24 +0000
+++ data/scripting/win_conditions/03_territorial_time.lua	2014-12-05 20:26:47 +0000
@@ -2,14 +2,14 @@
 --                   Territorial Time Win condition
 -- =======================================================================
 
-include "scripting/coroutine.lua" -- for sleep
-include "scripting/messages.lua"
-include "scripting/table.lua"
-include "scripting/win_condition_functions.lua"
+include "data/scripting/coroutine.lua" -- for sleep
+include "data/scripting/messages.lua"
+include "data/scripting/table.lua"
+include "data/scripting/win_condition_functions.lua"
 
 set_textdomain("win_conditions")
 
-include "scripting/win_condition_texts.lua"
+include "data/scripting/win_condition_texts.lua"
 
 local wc_name = _ "Territorial Time"
 local wc_version = 1

=== modified file 'data/scripting/win_conditions/04_wood_gnome.lua'
--- scripting/win_conditions/04_wood_gnome.lua	2014-07-15 17:28:03 +0000
+++ data/scripting/win_conditions/04_wood_gnome.lua	2014-12-05 20:26:47 +0000
@@ -2,13 +2,13 @@
 --                       Wood Gnome win condition
 -- =======================================================================
 
-include "scripting/coroutine.lua" -- for sleep
-include "scripting/table.lua"
-include "scripting/win_condition_functions.lua"
+include "data/scripting/coroutine.lua" -- for sleep
+include "data/scripting/table.lua"
+include "data/scripting/win_condition_functions.lua"
 
 set_textdomain("win_conditions")
 
-include "scripting/win_condition_texts.lua"
+include "data/scripting/win_condition_texts.lua"
 
 local wc_name = _ "Wood Gnome"
 local wc_version = 2
@@ -104,7 +104,7 @@
 	if hooks == nil then hooks = {} end
 	hooks.custom_statistic = {
 		name = wc_trees_owned,
-		pic = "pics/genstats_trees.png",
+		pic = "wui/stats/genstats_trees.png",
 		calculator = function(p)
 			local pts = _calc_points(p)
 			return pts[p.number]

=== modified file 'data/scripting/win_conditions/05_endless_game_fogless.lua'
--- scripting/win_conditions/05_endless_game_fogless.lua	2014-06-05 10:04:20 +0000
+++ data/scripting/win_conditions/05_endless_game_fogless.lua	2014-12-05 20:26:47 +0000
@@ -2,12 +2,12 @@
 --                         An endless game without rules
 -- =======================================================================
 
-include "scripting/coroutine.lua" -- for sleep
-include "scripting/win_condition_functions.lua"
+include "data/scripting/coroutine.lua" -- for sleep
+include "data/scripting/win_condition_functions.lua"
 
 set_textdomain("win_conditions")
 
-include "scripting/win_condition_texts.lua"
+include "data/scripting/win_condition_texts.lua"
 
 local wc_name    = _ "Endless Game (no fog)"
 local wc_desc    = _ "This is an endless game without rules. Fog of war is disabled."

=== renamed directory 'sound' => 'data/sound'
=== renamed file 'world/critters/duck/duck_00.ogg' => 'data/sound/animals/duck_00.ogg'
=== renamed file 'world/critters/duck/duck_01.ogg' => 'data/sound/animals/duck_01.ogg'
=== renamed file 'world/critters/duck/duck_02.ogg' => 'data/sound/animals/duck_02.ogg'
=== renamed directory 'tribes' => 'data/tribes'
=== modified file 'data/tribes/atlanteans/armorsmithy/help.lua'
--- tribes/atlanteans/armorsmithy/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/armorsmithy/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Armor Smithy
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/bakery/help.lua'
--- tribes/atlanteans/bakery/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/bakery/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Bakery
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/blackroot_farm/help.lua'
--- tribes/atlanteans/blackroot_farm/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/blackroot_farm/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Blackroot Farm
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/builder/conf'
--- tribes/atlanteans/builder/conf	2014-04-18 08:46:19 +0000
+++ data/tribes/atlanteans/builder/conf	2014-12-05 20:26:47 +0000
@@ -11,7 +11,7 @@
 
 [work]
 pics=work_??.png
-sfx=../../../sound/hammering/hammering
+sfx=hammering/hammering
 hotspot=6 22
 fps=10
 

=== modified file 'data/tribes/atlanteans/castle/help.lua'
--- tribes/atlanteans/castle/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/castle/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Castle
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/charcoal_kiln/help.lua'
--- tribes/atlanteans/charcoal_kiln/help.lua	2014-08-26 17:25:00 +0000
+++ data/tribes/atlanteans/charcoal_kiln/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Charcoal Kiln
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/coalmine/help.lua'
--- tribes/atlanteans/coalmine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/coalmine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Coal Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/conf'
--- tribes/atlanteans/conf	2014-08-26 17:25:00 +0000
+++ data/tribes/atlanteans/conf	2014-12-05 20:26:47 +0000
@@ -19,7 +19,7 @@
 pics=pics/frontier_??.png
 hotspot=3 12
 
-# Not just a plain color, maybe a cross or some stribes
+# Not just a plain color, maybe a cross or some stripes
 [flag]
 pics=pics/flag_??.png
 hotspot=15 35

=== modified file 'data/tribes/atlanteans/crystalmine/help.lua'
--- tribes/atlanteans/crystalmine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/crystalmine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Crystal Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/dungeon/help.lua'
--- tribes/atlanteans/dungeon/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/dungeon/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Dungeon
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/farm/conf'
--- tribes/atlanteans/farm/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/atlanteans/farm/conf	2014-12-05 20:26:47 +0000
@@ -40,7 +40,7 @@
 [work]
 call=plant_corn
 call=harvest_corn
-playFX=../../../sound/farm/farm_animal 192
+playFX=farm/farm_animal 192
 return=skipped
 
 [out_of_resource_notification]

=== modified file 'data/tribes/atlanteans/farm/help.lua'
--- tribes/atlanteans/farm/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/farm/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Farm
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/farmer/conf'
--- tribes/atlanteans/farmer/conf	2014-03-16 20:55:15 +0000
+++ data/tribes/atlanteans/farmer/conf	2014-12-05 20:26:47 +0000
@@ -17,7 +17,7 @@
 [harvest]
 0=findobject attrib:cornfield radius:2
 1=walk object
-2=playFX ../../../sound/farm/scythe 220
+2=playFX farm/scythe 220
 3=animation harvesting 10000
 4=object harvest
 5=animation gathering 4000

=== modified file 'data/tribes/atlanteans/fish_breeders_house/help.lua'
--- tribes/atlanteans/fish_breeders_house/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/fish_breeders_house/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Fish Breeder's House
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/fisher/conf'
--- tribes/atlanteans/fisher/conf	2014-03-16 20:55:15 +0000
+++ data/tribes/atlanteans/fisher/conf	2014-12-05 20:26:47 +0000
@@ -8,10 +8,10 @@
 [fish]
 0=findspace size:any radius:7 resource:fish
 1=walk coords
-2=playFX ../../../sound/fisher/fisher_throw_net 192
+2=playFX fisher/fisher_throw_net 192
 3=mine fish 1
 4=animation fishing 3000
-5=playFX ../../../sound/fisher/fisher_pull_net 192
+5=playFX fisher/fisher_pull_net 192
 6=createware fish
 7=return
 

=== modified file 'data/tribes/atlanteans/fishers_house/help.lua'
--- tribes/atlanteans/fishers_house/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/fishers_house/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Fisher's House
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/foresters_house/help.lua'
--- tribes/atlanteans/foresters_house/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/foresters_house/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Atlantean's House
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/geologist/conf'
--- tribes/atlanteans/geologist/conf	2013-07-23 20:21:03 +0000
+++ data/tribes/atlanteans/geologist/conf	2014-12-05 20:26:47 +0000
@@ -16,7 +16,7 @@
 [search]
 0=animation hacking 5000
 1=animation idle 2000
-2=playFX ../../../sound/hammering/geologist_hammer 192
+2=playFX hammering/geologist_hammer 192
 3=animation hacking 3000
 4=geologist-find
 

=== modified file 'data/tribes/atlanteans/gold-spinning-mill/help.lua'
--- tribes/atlanteans/gold-spinning-mill/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/gold-spinning-mill/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Goldweaver
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/goldmine/help.lua'
--- tribes/atlanteans/goldmine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/goldmine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Gold Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/guardhall/help.lua'
--- tribes/atlanteans/guardhall/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/guardhall/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Guardhall
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/guardhouse/help.lua'
--- tribes/atlanteans/guardhouse/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/guardhouse/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Guardhouse
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/headquarters/help.lua'
--- tribes/atlanteans/headquarters/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/headquarters/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Headquarters
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/high_tower/help.lua'
--- tribes/atlanteans/high_tower/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/high_tower/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean High Tower
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/horsefarm/conf'
--- tribes/atlanteans/horsefarm/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/atlanteans/horsefarm/conf	2014-12-05 20:26:47 +0000
@@ -28,7 +28,7 @@
 sleep=15000
 return=skipped unless economy needs horse
 consume=corn water
-playFX=../../../sound/farm/horse 192
+playFX=farm/horse 192
 animate=working 15000 # feeding cute little foals ;)
 recruit=horse
 

=== modified file 'data/tribes/atlanteans/horsefarm/help.lua'
--- tribes/atlanteans/horsefarm/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/horsefarm/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Horse Farm
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/hunters_house/help.lua'
--- tribes/atlanteans/hunters_house/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/hunters_house/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Hunter's House
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/ironmine/help.lua'
--- tribes/atlanteans/ironmine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/ironmine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Iron Ore Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/labyrinth/help.lua'
--- tribes/atlanteans/labyrinth/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/labyrinth/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Labyrinth
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/mill/help.lua'
--- tribes/atlanteans/mill/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/mill/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Mill
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/port/help.lua'
--- tribes/atlanteans/port/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/port/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Port
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/quarry/help.lua'
--- tribes/atlanteans/quarry/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/quarry/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Quarry
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/sawmill/conf'
--- tribes/atlanteans/sawmill/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/atlanteans/sawmill/conf	2014-12-05 20:26:47 +0000
@@ -27,7 +27,7 @@
 sleep=16500 # much faster than barbarians hardener
 return=skipped unless economy needs planks
 consume=log:2
-playFX=../../../sound/sawmill/sawmill 192
+playFX=sawmill/sawmill 192
 animate=working 20000 # much more faster than barbarians hardener
 produce=planks
 

=== modified file 'data/tribes/atlanteans/sawmill/help.lua'
--- tribes/atlanteans/sawmill/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/sawmill/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Sawmill
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/scouts_house/help.lua'
--- tribes/atlanteans/scouts_house/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/scouts_house/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Scout's House
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/scripting/sc00_headquarters.lua'
--- tribes/atlanteans/scripting/sc00_headquarters.lua	2014-08-26 17:25:00 +0000
+++ data/tribes/atlanteans/scripting/sc00_headquarters.lua	2014-12-05 20:26:47 +0000
@@ -2,7 +2,7 @@
 --              Headquarters Starting Conditions for Atlanteans
 -- =======================================================================
 
-include "scripting/infrastructure.lua"
+include "data/scripting/infrastructure.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/scripting/sc01_fortified_village.lua'
--- tribes/atlanteans/scripting/sc01_fortified_village.lua	2014-08-26 17:25:00 +0000
+++ data/tribes/atlanteans/scripting/sc01_fortified_village.lua	2014-12-05 20:26:47 +0000
@@ -2,7 +2,7 @@
 --                    Castle Village Starting Conditions
 -- =======================================================================
 
-include "scripting/infrastructure.lua"
+include "data/scripting/infrastructure.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/shipwright/conf'
--- tribes/atlanteans/shipwright/conf	2014-04-18 08:46:19 +0000
+++ data/tribes/atlanteans/shipwright/conf	2014-12-05 20:26:47 +0000
@@ -8,7 +8,7 @@
 [buildship]
 0=walk object-or-coords
 1=plant tribe:shipconstruction unless object
-2=playFX ../../../sound/sawmill/sawmill 230
+2=playFX sawmill/sawmill 230
 3=animation idle 500
 4=construct
 5=animation idle 5000
@@ -16,7 +16,7 @@
 
 [idle]
 pics=idle_??.png
-sfx=../../../sound/hammering/hammering
+sfx=hammering/hammering
 hotspot=12 28
 fps=10
 

=== modified file 'data/tribes/atlanteans/shipyard/help.lua'
--- tribes/atlanteans/shipyard/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/shipyard/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Ship Yard
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/small_tower/help.lua'
--- tribes/atlanteans/small_tower/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/small_tower/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Small Tower
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/smelting_works/help.lua'
--- tribes/atlanteans/smelting_works/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/smelting_works/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Smelting Works
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/smokery/help.lua'
--- tribes/atlanteans/smokery/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/smokery/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Smokery
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/spiderfarm/help.lua'
--- tribes/atlanteans/spiderfarm/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/spiderfarm/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Spider Farm
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/stonecutter/conf'
--- tribes/atlanteans/stonecutter/conf	2014-07-18 09:49:03 +0000
+++ data/tribes/atlanteans/stonecutter/conf	2014-12-05 20:26:47 +0000
@@ -8,7 +8,7 @@
 [cut_stone]
 0=findobject attrib:granite radius:6
 1=walk object
-2=playFX ../../../sound/stonecutting/stonecutter 192
+2=playFX stonecutting/stonecutter 192
 3=animation hacking 10000
 4=object shrink
 5=createware stone

=== modified file 'data/tribes/atlanteans/toolsmithy/help.lua'
--- tribes/atlanteans/toolsmithy/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/toolsmithy/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Toolsmithy
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/tower/help.lua'
--- tribes/atlanteans/tower/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/tower/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Tower
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/warehouse/help.lua'
--- tribes/atlanteans/warehouse/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/warehouse/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Warehouse
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/weaponsmithy/conf'
--- tribes/atlanteans/weaponsmithy/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/atlanteans/weaponsmithy/conf	2014-12-05 20:26:47 +0000
@@ -47,45 +47,45 @@
 return=skipped unless economy needs light_trident
 sleep=20000
 consume=iron planks
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 30000
-playFX=../../../sound/smiths/sharpening 192
+playFX=smiths/sharpening 192
 produce=light_trident
 
 [produce_long_trident]
 return=skipped unless economy needs long_trident
 sleep=32000
 consume=iron coal planks
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 45000
-playFX=../../../sound/smiths/sharpening 192
+playFX=smiths/sharpening 192
 produce=long_trident
 
 [produce_steel_trident]
 return=skipped unless economy needs steel_trident
 sleep=32000
 consume=iron:2 coal planks
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 45000
-playFX=../../../sound/smiths/sharpening 192
+playFX=smiths/sharpening 192
 produce=steel_trident
 
 [produce_double_trident]
 return=skipped unless economy needs double_trident
 sleep=32000
 consume=iron coal:2 planks gold
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 45000
-playFX=../../../sound/smiths/sharpening 192
+playFX=smiths/sharpening 192
 produce=double_trident
 
 [produce_heavy_double_trident]
 return=skipped unless economy needs heavy_double_trident
 sleep=32000
 consume=iron:2 coal:2 planks gold
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 45000
-playFX=../../../sound/smiths/sharpening 192
+playFX=smiths/sharpening 192
 produce=heavy_double_trident
 
 [work]

=== modified file 'data/tribes/atlanteans/weaponsmithy/help.lua'
--- tribes/atlanteans/weaponsmithy/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/weaponsmithy/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Weapon Smithy
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/weaving-mill/help.lua'
--- tribes/atlanteans/weaving-mill/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/weaving-mill/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Weaving Mill
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/well/help.lua'
--- tribes/atlanteans/well/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/well/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Well
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/atlanteans/woodcutter/conf'
--- tribes/atlanteans/woodcutter/conf	2014-03-17 17:23:26 +0000
+++ data/tribes/atlanteans/woodcutter/conf	2014-12-05 20:26:47 +0000
@@ -8,7 +8,7 @@
 [harvest]
 0=findobject attrib:tree radius:10
 1=walk object
-2=playFX ../../../sound/sawmill/sawmill 230
+2=playFX sawmill/sawmill 230
 3=animation sawing 10000
 4=object fall
 5=animation idle 2000

=== modified file 'data/tribes/atlanteans/woodcutters_house/help.lua'
--- tribes/atlanteans/woodcutters_house/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/atlanteans/woodcutters_house/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Atlantean Lumberjack's House
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_atlanteans")
 

=== modified file 'data/tribes/barbarians/axfactory/conf'
--- tribes/barbarians/axfactory/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/barbarians/axfactory/conf	2014-12-05 20:26:47 +0000
@@ -41,27 +41,27 @@
 return=skipped unless economy needs ax
 sleep=32000
 consume=coal iron
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 25000
-playFX=../../../sound/smiths/sharpening 192
+playFX=smiths/sharpening 192
 produce=ax
 
 [produce_sharpax]
 return=skipped unless economy needs sharpax
 sleep=32000
 consume=coal iron:2
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 25000
-playFX=../../../sound/smiths/sharpening 192
+playFX=smiths/sharpening 192
 produce=sharpax
 
 [produce_broadax]
 return=skipped unless economy needs broadax
 sleep=32000
 consume=coal:2 iron:2
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 25000
-playFX=../../../sound/smiths/sharpening 192
+playFX=smiths/sharpening 192
 produce=broadax
 
 [work]

=== modified file 'data/tribes/barbarians/axfactory/help.lua'
--- tribes/barbarians/axfactory/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/axfactory/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Axfactory
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/bakery/help.lua'
--- tribes/barbarians/bakery/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/bakery/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Bakery
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/barrier/help.lua'
--- tribes/barbarians/barrier/help.lua	2014-07-20 15:19:51 +0000
+++ data/tribes/barbarians/barrier/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Sentry
 
-include "scripting/formatting.lua"
-include "scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/battlearena/help.lua'
--- tribes/barbarians/battlearena/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/battlearena/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Battle Arena"
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/big_inn/help.lua'
--- tribes/barbarians/big_inn/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/big_inn/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- "The Barbarian Big Inn"
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/brewery/help.lua'
--- tribes/barbarians/brewery/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/brewery/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Brewery
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/builder/conf'
--- tribes/barbarians/builder/conf	2014-04-18 08:46:19 +0000
+++ data/tribes/barbarians/builder/conf	2014-12-05 20:26:47 +0000
@@ -11,7 +11,7 @@
 
 [work]
 pics=work_??.png
-sfx=../../../sound/hammering/hammering
+sfx=hammering/hammering
 hotspot=10 21
 fps=10
 

=== modified file 'data/tribes/barbarians/cattlefarm/conf'
--- tribes/barbarians/cattlefarm/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/barbarians/cattlefarm/conf	2014-12-05 20:26:47 +0000
@@ -28,7 +28,7 @@
 sleep=15000
 return=skipped unless economy needs ox
 consume=wheat water
-playFX=../../../sound/farm/ox 192
+playFX=farm/ox 192
 animate=working 15000 # animation of feeding the cattles
 recruit=ox
 

=== modified file 'data/tribes/barbarians/cattlefarm/help.lua'
--- tribes/barbarians/cattlefarm/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/cattlefarm/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Cattle Farm
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/charcoal_kiln/help.lua'
--- tribes/barbarians/charcoal_kiln/help.lua	2014-08-26 17:25:00 +0000
+++ data/tribes/barbarians/charcoal_kiln/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Charcoal Kiln
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/citadel/help.lua'
--- tribes/barbarians/citadel/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/citadel/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Citadel
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/coalmine/help.lua'
--- tribes/barbarians/coalmine/help.lua	2014-08-26 17:25:00 +0000
+++ data/tribes/barbarians/coalmine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Coal Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/deep_coalmine/help.lua'
--- tribes/barbarians/deep_coalmine/help.lua	2014-08-26 17:25:00 +0000
+++ data/tribes/barbarians/deep_coalmine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Deep Coal Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/deep_goldmine/help.lua'
--- tribes/barbarians/deep_goldmine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/deep_goldmine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Deep Gold Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/deep_oremine/help.lua'
--- tribes/barbarians/deep_oremine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/deep_oremine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Deep Iron Ore Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/deeper_coalmine/help.lua'
--- tribes/barbarians/deeper_coalmine/help.lua	2014-08-26 17:25:00 +0000
+++ data/tribes/barbarians/deeper_coalmine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Deep Coal Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/deeper_goldmine/help.lua'
--- tribes/barbarians/deeper_goldmine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/deeper_goldmine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Deeper Gold Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/deeper_oremine/help.lua'
--- tribes/barbarians/deeper_oremine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/deeper_oremine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Deeper Iron Ore Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/donjon/help.lua'
--- tribes/barbarians/donjon/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/donjon/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Donjon
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/farm/conf'
--- tribes/barbarians/farm/conf	2014-07-27 19:32:24 +0000
+++ data/tribes/barbarians/farm/conf	2014-12-05 20:26:47 +0000
@@ -36,7 +36,7 @@
 [work]
 call=plant_wheat
 call=harvest_wheat
-playFX=../../../sound/farm/farm_animal 192
+playFX=farm/farm_animal 192
 return=skipped
 
 [out_of_resource_notification]

=== modified file 'data/tribes/barbarians/farm/help.lua'
--- tribes/barbarians/farm/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/farm/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Farm
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/farmer/conf'
--- tribes/barbarians/farmer/conf	2014-03-16 20:55:15 +0000
+++ data/tribes/barbarians/farmer/conf	2014-12-05 20:26:47 +0000
@@ -17,7 +17,7 @@
 [harvest]
 0=findobject attrib:wheat radius:2
 1=walk object
-2=playFX ../../../sound/farm/scythe 220
+2=playFX farm/scythe 220
 3=animation harvesting 10000
 4=object harvest
 5=animation gathering 4000

=== modified file 'data/tribes/barbarians/fisher/conf'
--- tribes/barbarians/fisher/conf	2014-07-28 12:48:04 +0000
+++ data/tribes/barbarians/fisher/conf	2014-12-05 20:26:47 +0000
@@ -8,10 +8,10 @@
 [fish]
 0=findspace size:any radius:7 resource:fish
 1=walk coords
-2=playFX ../../../sound/fisher/fisher_throw_net 192
+2=playFX fisher/fisher_throw_net 192
 3=mine fish 1
 4=animation fishing 3000 # Play a fishing animation
-5=playFX ../../../sound/fisher/fisher_pull_net 192
+5=playFX fisher/fisher_pull_net 192
 6=createware fish
 7=return
 

=== modified file 'data/tribes/barbarians/fishers_hut/help.lua'
--- tribes/barbarians/fishers_hut/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/fishers_hut/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Fisher's Hut
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/fortress/help.lua'
--- tribes/barbarians/fortress/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/fortress/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Fortress
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/gamekeepers_hut/help.lua'
--- tribes/barbarians/gamekeepers_hut/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/gamekeepers_hut/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Gamekeeper's Hut
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/geologist/conf'
--- tribes/barbarians/geologist/conf	2013-07-23 20:21:03 +0000
+++ data/tribes/barbarians/geologist/conf	2014-12-05 20:26:47 +0000
@@ -16,7 +16,7 @@
 [search]
 0=animation hacking 5000
 1=animation idle 2000
-2=playFX ../../../sound/hammering/geologist_hammer 192
+2=playFX hammering/geologist_hammer 192
 3=animation hacking 3000
 4=geologist-find
 

=== modified file 'data/tribes/barbarians/goldmine/help.lua'
--- tribes/barbarians/goldmine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/goldmine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- "The Barbarian Gold Mine"
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/granitemine/help.lua'
--- tribes/barbarians/granitemine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/granitemine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Granite Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/hardener/help.lua'
--- tribes/barbarians/hardener/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/hardener/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Wood Hardener
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/headquarters/help.lua'
--- tribes/barbarians/headquarters/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/headquarters/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Headquarters
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/headquarters_interim/help.lua'
--- tribes/barbarians/headquarters_interim/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/headquarters_interim/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Interim Headquarters
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/helmsmithy/help.lua'
--- tribes/barbarians/helmsmithy/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/helmsmithy/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Helm Smithy
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/hunters_hut/help.lua'
--- tribes/barbarians/hunters_hut/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/hunters_hut/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Hunter's Hut
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/inn/help.lua'
--- tribes/barbarians/inn/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/inn/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Inn
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/lime_kiln/help.lua'
--- tribes/barbarians/lime_kiln/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/lime_kiln/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Lime Kiln
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/lumberjack/conf'
--- tribes/barbarians/lumberjack/conf	2014-03-17 17:23:26 +0000
+++ data/tribes/barbarians/lumberjack/conf	2014-12-05 20:26:47 +0000
@@ -8,9 +8,9 @@
 [chop]
 0=findobject attrib:tree radius:10
 1=walk object
-2=playFX ../../../sound/woodcutting/woodcutting 255
+2=playFX woodcutting/woodcutting 255
 3=animation hacking 10000
-4=playFX ../../../sound/spoken/timber 192
+4=playFX spoken/timber 192
 5=object fall
 6=animation idle 2000
 7=createware log

=== modified file 'data/tribes/barbarians/lumberjacks_hut/help.lua'
--- tribes/barbarians/lumberjacks_hut/help.lua	2014-11-11 10:19:51 +0000
+++ data/tribes/barbarians/lumberjacks_hut/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Lumberjack's Hut
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/metalworks/conf'
--- tribes/barbarians/metalworks/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/barbarians/metalworks/conf	2014-12-05 20:26:47 +0000
@@ -62,7 +62,7 @@
 return=skipped unless economy needs bread_paddle
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=bread_paddle
 
@@ -70,7 +70,7 @@
 return=skipped unless economy needs felling_ax
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=felling_ax
 
@@ -78,7 +78,7 @@
 return=skipped unless economy needs fire_tongs
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=fire_tongs
 
@@ -86,7 +86,7 @@
 return=skipped unless economy needs fishing_rod
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=fishing_rod
 
@@ -94,7 +94,7 @@
 return=skipped unless economy needs hammer
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=hammer
 
@@ -102,7 +102,7 @@
 return=skipped unless economy needs hunting_spear
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=hunting_spear
 
@@ -110,7 +110,7 @@
 return=skipped unless economy needs kitchen_tools
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=kitchen_tools
 
@@ -118,7 +118,7 @@
 return=skipped unless economy needs pick
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=pick
 
@@ -126,7 +126,7 @@
 return=skipped unless economy needs scythe
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=scythe
 
@@ -134,7 +134,7 @@
 return=skipped unless economy needs shovel
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=shovel
 

=== modified file 'data/tribes/barbarians/metalworks/help.lua'
--- tribes/barbarians/metalworks/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/metalworks/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Metal Workshop
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/micro-brewery/help.lua'
--- tribes/barbarians/micro-brewery/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/micro-brewery/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Micro Brewery
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/oremine/help.lua'
--- tribes/barbarians/oremine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/oremine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Iron Ore Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/port/help.lua'
--- tribes/barbarians/port/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/port/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Port
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/quarry/help.lua'
--- tribes/barbarians/quarry/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/quarry/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Quarry
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/rangers_hut/help.lua'
--- tribes/barbarians/rangers_hut/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/rangers_hut/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Ranger's Hut
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/reed_yard/help.lua'
--- tribes/barbarians/reed_yard/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/reed_yard/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Reed Yard
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/scouts_hut/help.lua'
--- tribes/barbarians/scouts_hut/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/scouts_hut/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Scout's Hut
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/scripting/sc00_headquarters.lua'
--- tribes/barbarians/scripting/sc00_headquarters.lua	2014-08-26 17:25:00 +0000
+++ data/tribes/barbarians/scripting/sc00_headquarters.lua	2014-12-05 20:26:47 +0000
@@ -2,7 +2,7 @@
 --                 Start conditions for Headquarters Medium
 -- =======================================================================
 
-include "scripting/infrastructure.lua"
+include "data/scripting/infrastructure.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/scripting/sc01_fortified_village.lua'
--- tribes/barbarians/scripting/sc01_fortified_village.lua	2014-08-26 17:25:00 +0000
+++ data/tribes/barbarians/scripting/sc01_fortified_village.lua	2014-12-05 20:26:47 +0000
@@ -2,7 +2,7 @@
 --                    Start conditions for Citadel Village
 -- =======================================================================
 
-include "scripting/infrastructure.lua"
+include "data/scripting/infrastructure.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/sentry/help.lua'
--- tribes/barbarians/sentry/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/sentry/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Sentry
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/shipwright/conf'
--- tribes/barbarians/shipwright/conf	2014-04-18 08:46:19 +0000
+++ data/tribes/barbarians/shipwright/conf	2014-12-05 20:26:47 +0000
@@ -8,7 +8,7 @@
 [buildship]
 0=walk object-or-coords
 1=plant tribe:shipconstruction unless object
-2=playFX ../../../sound/sawmill/sawmill 230
+2=playFX sawmill/sawmill 230
 3=animation work 500
 4=construct
 5=animation work 5000
@@ -16,7 +16,7 @@
 
 [work]
 pics=work_??.png
-sfx=../../../sound/hammering/hammering
+sfx=hammering/hammering
 hotspot=11 26
 fps=10
 

=== modified file 'data/tribes/barbarians/shipyard/help.lua'
--- tribes/barbarians/shipyard/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/shipyard/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Ship Yard
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/smelting_works/help.lua'
--- tribes/barbarians/smelting_works/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/smelting_works/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Smelting Works
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/stonemason/conf'
--- tribes/barbarians/stonemason/conf	2014-07-18 09:49:03 +0000
+++ data/tribes/barbarians/stonemason/conf	2014-12-05 20:26:47 +0000
@@ -8,7 +8,7 @@
 [cut]
 0=findobject attrib:granite radius:6
 1=walk object
-2=playFX ../../../sound/stonecutting/stonecutter 192
+2=playFX stonecutting/stonecutter 192
 3=animation hacking 10000
 4=object shrink
 5=createware raw_stone

=== modified file 'data/tribes/barbarians/tavern/help.lua'
--- tribes/barbarians/tavern/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/tavern/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Tavern
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/trainingcamp/help.lua'
--- tribes/barbarians/trainingcamp/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/trainingcamp/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Training Camp
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/warehouse/help.lua'
--- tribes/barbarians/warehouse/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/warehouse/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Warehouse
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/warmill/conf'
--- tribes/barbarians/warmill/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/barbarians/warmill/conf	2014-12-05 20:26:47 +0000
@@ -51,54 +51,54 @@
 return=skipped unless economy needs ax
 sleep=32000
 consume=coal iron
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 25000
-playFX=../../../sound/smiths/sharpening 192
+playFX=smiths/sharpening 192
 produce=ax
 
 [produce_sharpax]
 return=skipped unless economy needs sharpax
 sleep=32000
 consume=coal iron:2
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 25000
-playFX=../../../sound/smiths/sharpening 192
+playFX=smiths/sharpening 192
 produce=sharpax
 
 [produce_broadax]
 return=skipped unless economy needs broadax
 sleep=32000
 consume=coal:2 iron:2
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 25000
-playFX=../../../sound/smiths/sharpening 192
+playFX=smiths/sharpening 192
 produce=broadax
 
 [produce_bronzeax]
 return=skipped unless economy needs bronzeax
 sleep=32000
 consume=coal:2 iron:2
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 25000
-playFX=../../../sound/smiths/sharpening 192
+playFX=smiths/sharpening 192
 produce=bronzeax
 
 [produce_battleax]
 return=skipped unless economy needs battleax
 sleep=32000
 consume=coal gold iron:2
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 25000
-playFX=../../../sound/smiths/sharpening 192
+playFX=smiths/sharpening 192
 produce=battleax
 
 [produce_warriorsax]
 return=skipped unless economy needs warriorsax
 sleep=32000
 consume=coal:2 gold:2 iron:2
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 25000
-playFX=../../../sound/smiths/sharpening 192
+playFX=smiths/sharpening 192
 produce=warriorsax
 
 [work]

=== modified file 'data/tribes/barbarians/warmill/help.lua'
--- tribes/barbarians/warmill/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/warmill/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian War Mill
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/weaving-mill/help.lua'
--- tribes/barbarians/weaving-mill/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/weaving-mill/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Weaving Mill
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/barbarians/well/help.lua'
--- tribes/barbarians/well/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/barbarians/well/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Barbarian Well
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_barbarians")
 

=== modified file 'data/tribes/empire/arena/help.lua'
--- tribes/empire/arena/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/arena/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Arena
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/armorsmithy/help.lua'
--- tribes/empire/armorsmithy/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/armorsmithy/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Armor Smithy
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/bakery/help.lua'
--- tribes/empire/bakery/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/bakery/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Bakery
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/barracks/help.lua'
--- tribes/empire/barracks/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/barracks/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Barracks
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/barrier/help.lua'
--- tribes/empire/barrier/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/barrier/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Barrier
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/brewery/help.lua'
--- tribes/empire/brewery/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/brewery/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Brewery
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/builder/conf'
--- tribes/empire/builder/conf	2014-04-18 08:46:19 +0000
+++ data/tribes/empire/builder/conf	2014-12-05 20:26:47 +0000
@@ -11,7 +11,7 @@
 
 [work]
 pics=work_??.png
-sfx=../../../sound/hammering/hammering
+sfx=hammering/hammering
 hotspot=11 21
 fps=10
 

=== modified file 'data/tribes/empire/castle/help.lua'
--- tribes/empire/castle/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/castle/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Castle
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/charcoal_kiln/help.lua'
--- tribes/empire/charcoal_kiln/help.lua	2014-08-26 17:25:00 +0000
+++ data/tribes/empire/charcoal_kiln/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Charcoal Kiln
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/coalmine/help.lua'
--- tribes/empire/coalmine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/coalmine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Coal Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/colosseum/help.lua'
--- tribes/empire/colosseum/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/colosseum/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Colosseum
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/conf'
--- tribes/empire/conf	2014-08-26 17:25:00 +0000
+++ data/tribes/empire/conf	2014-12-05 20:26:47 +0000
@@ -19,7 +19,7 @@
 pics=pics/frontier_??.png
 hotspot=1 19
 
-# Not just a plain color, maybe a cross or some stribes
+# Not just a plain color, maybe a cross or some stripes
 [flag]
 pics=pics/flag_??.png
 hotspot=14 38

=== modified file 'data/tribes/empire/deep_coalmine/help.lua'
--- tribes/empire/deep_coalmine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/deep_coalmine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Deep Coal Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/deep_goldmine/help.lua'
--- tribes/empire/deep_goldmine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/deep_goldmine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Deep Gold Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/deep_marblemine/help.lua'
--- tribes/empire/deep_marblemine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/deep_marblemine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Deep Marble Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/deep_oremine/help.lua'
--- tribes/empire/deep_oremine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/deep_oremine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Deep Iron Ore Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/donkeyfarm/conf'
--- tribes/empire/donkeyfarm/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/empire/donkeyfarm/conf	2014-12-05 20:26:47 +0000
@@ -28,7 +28,7 @@
 sleep=15000
 return=skipped unless economy needs donkey
 consume=wheat water
-playFX=../../../sound/farm/donkey 192
+playFX=farm/donkey 192
 animate=working 15000 # feeding cute little baby donkeys ;)
 recruit=donkey
 

=== modified file 'data/tribes/empire/donkeyfarm/help.lua'
--- tribes/empire/donkeyfarm/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/donkeyfarm/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Donkey Farm
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/farm/conf'
--- tribes/empire/farm/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/empire/farm/conf	2014-12-05 20:26:47 +0000
@@ -39,7 +39,7 @@
 [work]
 call=plant_wheat
 call=harvest_wheat
-playFX=../../../sound/farm/farm_animal 192
+playFX=farm/farm_animal 192
 return=skipped
 
 [out_of_resource_notification]

=== modified file 'data/tribes/empire/farm/help.lua'
--- tribes/empire/farm/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/farm/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Farm
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/farmer/conf'
--- tribes/empire/farmer/conf	2014-03-16 20:55:15 +0000
+++ data/tribes/empire/farmer/conf	2014-12-05 20:26:47 +0000
@@ -9,18 +9,18 @@
 [plant]
 0=findspace size:any radius:2 space
 1=walk coords
-2=animation planting 4000  
+2=animation planting 4000
 3=plant tribe:field0t
-4=animation planting 4000  
+4=animation planting 4000
 5=return
 
 [harvest]
 0=findobject attrib:wheat radius:2
 1=walk object
-2=playFX ../../../sound/farm/scythe 220
+2=playFX farm/scythe 220
 3=animation harvesting 10000
 4=object harvest
-5=animation gathering 4000  
+5=animation gathering 4000
 6=createware wheat
 7=return
 

=== modified file 'data/tribes/empire/fisher/conf'
--- tribes/empire/fisher/conf	2014-03-16 20:55:15 +0000
+++ data/tribes/empire/fisher/conf	2014-12-05 20:26:47 +0000
@@ -8,10 +8,10 @@
 [fish]
 0=findspace size:any radius:7 resource:fish
 1=walk coords
-2=playFX ../../../sound/fisher/fisher_throw_net 192
+2=playFX fisher/fisher_throw_net 192
 3=mine fish 1
 4=animation fishing 3000 # Play a fishing animation
-5=playFX ../../../sound/fisher/fisher_pull_net 192
+5=playFX fisher/fisher_pull_net 192
 6=createware fish
 7=return
 

=== modified file 'data/tribes/empire/fishers_house/help.lua'
--- tribes/empire/fishers_house/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/fishers_house/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Fisher's House
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/foresters_house/help.lua'
--- tribes/empire/foresters_house/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/foresters_house/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Forester's House
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/fortress/help.lua'
--- tribes/empire/fortress/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/fortress/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Fortress
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/geologist/conf'
--- tribes/empire/geologist/conf	2013-07-23 20:21:03 +0000
+++ data/tribes/empire/geologist/conf	2014-12-05 20:26:47 +0000
@@ -16,7 +16,7 @@
 [search]
 0=animation hacking 5000
 1=animation idle 2000
-2=playFX ../../../sound/hammering/geologist_hammer 192
+2=playFX hammering/geologist_hammer 192
 3=animation hacking 3000
 4=geologist-find
 

=== modified file 'data/tribes/empire/goldmine/help.lua'
--- tribes/empire/goldmine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/goldmine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Gold Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/headquarters/help.lua'
--- tribes/empire/headquarters/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/headquarters/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Headquarters
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/headquarters_shipwreck/help.lua'
--- tribes/empire/headquarters_shipwreck/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/headquarters_shipwreck/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Headquarters Shipwreck
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/hunters_house/help.lua'
--- tribes/empire/hunters_house/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/hunters_house/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Hunter's House
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/inn/help.lua'
--- tribes/empire/inn/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/inn/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Inn
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/lumberjack/conf'
--- tribes/empire/lumberjack/conf	2014-03-17 17:23:26 +0000
+++ data/tribes/empire/lumberjack/conf	2014-12-05 20:26:47 +0000
@@ -8,9 +8,9 @@
 [chop]
 0=findobject attrib:tree radius:10
 1=walk object
-2=playFX ../../../sound/woodcutting/fast_woodcutting 250
+2=playFX woodcutting/fast_woodcutting 250
 3=animation hacking 10000
-4=playFX ../../../sound/spoken/timber 156
+4=playFX spoken/timber 156
 5=object fall
 6=animation idle 2000
 7=createware log

=== modified file 'data/tribes/empire/lumberjacks_house/help.lua'
--- tribes/empire/lumberjacks_house/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/lumberjacks_house/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Lumberjack's House
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/marblemine/help.lua'
--- tribes/empire/marblemine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/marblemine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Marble Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/mill/conf'
--- tribes/empire/mill/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/empire/mill/conf	2014-12-05 20:26:47 +0000
@@ -28,7 +28,7 @@
 sleep=5000
 return=skipped unless economy needs flour
 consume=wheat
-playFX=../../../sound/mill/mill_turning 240
+playFX=mill/mill_turning 240
 animate=working 10000
 produce=flour
 

=== modified file 'data/tribes/empire/mill/help.lua'
--- tribes/empire/mill/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/mill/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Mill
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/oremine/help.lua'
--- tribes/empire/oremine/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/oremine/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Iron Ore Mine
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/outpost/help.lua'
--- tribes/empire/outpost/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/outpost/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Outpost
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/piggery/conf'
--- tribes/empire/piggery/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/empire/piggery/conf	2014-12-05 20:26:47 +0000
@@ -28,7 +28,7 @@
 sleep=25000
 return=skipped unless economy needs meat
 consume=water wheat
-playFX=../../../sound/farm/farm_animal 180
+playFX=farm/farm_animal 180
 animate=working 30000
 produce=meat
 

=== modified file 'data/tribes/empire/piggery/help.lua'
--- tribes/empire/piggery/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/piggery/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Piggery
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/port/help.lua'
--- tribes/empire/port/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/port/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Port
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/quarry/help.lua'
--- tribes/empire/quarry/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/quarry/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Quarry
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/sawmill/conf'
--- tribes/empire/sawmill/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/empire/sawmill/conf	2014-12-05 20:26:47 +0000
@@ -28,7 +28,7 @@
 sleep=16500 # much faster than barbarians hardener
 return=skipped unless economy needs wood
 consume=log:2
-playFX=../../../sound/sawmill/sawmill 180
+playFX=sawmill/sawmill 180
 animate=working 20000 # much more faster than barbarians hardener
 produce=wood
 

=== modified file 'data/tribes/empire/sawmill/help.lua'
--- tribes/empire/sawmill/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/sawmill/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Sawmill
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/scouts_house/help.lua'
--- tribes/empire/scouts_house/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/scouts_house/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Scout's House
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/scripting/sc00_headquarters.lua'
--- tribes/empire/scripting/sc00_headquarters.lua	2014-08-26 17:25:00 +0000
+++ data/tribes/empire/scripting/sc00_headquarters.lua	2014-12-05 20:26:47 +0000
@@ -2,7 +2,7 @@
 --                Starting conditions for Headquarters Medium
 -- =======================================================================
 
-include "scripting/infrastructure.lua"
+include "data/scripting/infrastructure.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/scripting/sc01_fortified_village.lua'
--- tribes/empire/scripting/sc01_fortified_village.lua	2014-08-26 17:25:00 +0000
+++ data/tribes/empire/scripting/sc01_fortified_village.lua	2014-12-05 20:26:47 +0000
@@ -2,7 +2,7 @@
 --                 Empire Castle Village Starting Conditions
 -- =======================================================================
 
-include "scripting/infrastructure.lua"
+include "data/scripting/infrastructure.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/sentry/help.lua'
--- tribes/empire/sentry/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/sentry/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Sentry
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/sheepfarm/conf'
--- tribes/empire/sheepfarm/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/empire/sheepfarm/conf	2014-12-05 20:26:47 +0000
@@ -28,7 +28,7 @@
 sleep=25000
 return=skipped unless economy needs wool
 consume=water wheat
-playFX=../../../sound/farm/sheep 192
+playFX=farm/sheep 192
 animate=working 30000
 produce=wool
 

=== modified file 'data/tribes/empire/sheepfarm/help.lua'
--- tribes/empire/sheepfarm/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/sheepfarm/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Sheepfarm
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/shipwright/conf'
--- tribes/empire/shipwright/conf	2014-04-18 08:46:19 +0000
+++ data/tribes/empire/shipwright/conf	2014-12-05 20:26:47 +0000
@@ -8,7 +8,7 @@
 [buildship]
 0=walk object-or-coords
 1=plant tribe:shipconstruction unless object
-2=playFX ../../../sound/sawmill/sawmill 230
+2=playFX sawmill/sawmill 230
 3=animation work 500
 4=construct
 5=animation work 5000
@@ -16,7 +16,7 @@
 
 [work]
 pics=work_??.png
-sfx=../../../sound/hammering/hammering
+sfx=hammering/hammering
 hotspot=12 27
 fps=10
 

=== modified file 'data/tribes/empire/shipyard/help.lua'
--- tribes/empire/shipyard/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/shipyard/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Ship Yard
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/smelting_works/help.lua'
--- tribes/empire/smelting_works/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/smelting_works/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Smelting Works
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/stonemason/conf'
--- tribes/empire/stonemason/conf	2014-07-18 09:49:03 +0000
+++ data/tribes/empire/stonemason/conf	2014-12-05 20:26:47 +0000
@@ -9,7 +9,7 @@
 [cut_stone]
 0=findobject attrib:granite radius:6
 1=walk object
-2=playFX ../../../sound/stonecutting/stonecutter 220
+2=playFX stonecutting/stonecutter 220
 3=animation hacking 10000
 4=object shrink
 5=createware stone
@@ -18,7 +18,7 @@
 [cut_marble]
 0=findobject attrib:granite radius:6
 1=walk object
-2=playFX ../../../sound/stonecutting/stonecutter 220
+2=playFX stonecutting/stonecutter 220
 3=animation hacking 10000
 4=object shrink
 5=createware marble

=== modified file 'data/tribes/empire/stonemasons_house/conf'
--- tribes/empire/stonemasons_house/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/empire/stonemasons_house/conf	2014-12-05 20:26:47 +0000
@@ -29,7 +29,7 @@
 sleep=50000
 return=skipped unless economy needs marblecolumn
 consume=marble:2
-playFX=../../../sound/stonecutting/stonemason 192
+playFX=stonecutting/stonemason 192
 animate=working 32000
 produce=marblecolumn
 

=== modified file 'data/tribes/empire/stonemasons_house/help.lua'
--- tribes/empire/stonemasons_house/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/stonemasons_house/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Stonemason's House
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/tavern/help.lua'
--- tribes/empire/tavern/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/tavern/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Tavern
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/toolsmithy/conf'
--- tribes/empire/toolsmithy/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/empire/toolsmithy/conf	2014-12-05 20:26:47 +0000
@@ -65,7 +65,7 @@
 return=skipped unless economy needs ax
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=ax
 
@@ -73,7 +73,7 @@
 return=skipped unless economy needs basket
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=basket
 
@@ -81,7 +81,7 @@
 return=skipped unless economy needs bread_paddle
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=bread_paddle
 
@@ -89,7 +89,7 @@
 return=skipped unless economy needs fire_tongs
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=fire_tongs
 
@@ -97,7 +97,7 @@
 return=skipped unless economy needs fishing_rod
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=fishing_rod
 
@@ -105,7 +105,7 @@
 return=skipped unless economy needs hammer
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=hammer
 
@@ -113,7 +113,7 @@
 return=skipped unless economy needs hunting_spear
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=hunting_spear
 
@@ -121,7 +121,7 @@
 return=skipped unless economy needs kitchen_tools
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=kitchen_tools
 
@@ -129,7 +129,7 @@
 return=skipped unless economy needs pick
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=pick
 
@@ -137,7 +137,7 @@
 return=skipped unless economy needs saw
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=saw
 
@@ -145,7 +145,7 @@
 return=skipped unless economy needs scythe
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=scythe
 
@@ -153,7 +153,7 @@
 return=skipped unless economy needs shovel
 sleep=32000
 consume=iron log
-playFX=../../../sound/smiths/toolsmith 192
+playFX=smiths/toolsmith 192
 animate=working 35000
 produce=shovel
 

=== modified file 'data/tribes/empire/toolsmithy/help.lua'
--- tribes/empire/toolsmithy/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/toolsmithy/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Toolsmithy
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/tower/help.lua'
--- tribes/empire/tower/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/tower/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Tower
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/trainingcamp/help.lua'
--- tribes/empire/trainingcamp/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/trainingcamp/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Training Camp
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/vineyard/help.lua'
--- tribes/empire/vineyard/help.lua	2014-09-30 11:50:31 +0000
+++ data/tribes/empire/vineyard/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Vineyard
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/warehouse/help.lua'
--- tribes/empire/warehouse/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/warehouse/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Warehouse
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/weaponsmithy/conf'
--- tribes/empire/weaponsmithy/conf	2014-08-02 19:55:23 +0000
+++ data/tribes/empire/weaponsmithy/conf	2014-12-05 20:26:47 +0000
@@ -47,45 +47,45 @@
 return=skipped unless economy needs wood_lance
 sleep=20000
 consume=wood
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 30000
-playFX=../../../sound/smiths/sharpening 120
+playFX=smiths/sharpening 120
 produce=wood_lance
 
 [produce_lance]
 return=skipped unless economy needs lance
 sleep=32000
 consume=coal iron wood
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 45000
-playFX=../../../sound/smiths/sharpening 120
+playFX=smiths/sharpening 120
 produce=lance
 
 [produce_advanced_lance]
 return=skipped unless economy needs advanced_lance
 sleep=32000
 consume=coal iron:2 wood
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 45000
-playFX=../../../sound/smiths/sharpening 120
+playFX=smiths/sharpening 120
 produce=advanced_lance
 
 [produce_heavy_lance]
 return=skipped unless economy needs heavy_lance
 sleep=32000
 consume=coal:2 gold iron wood
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 45000
-playFX=../../../sound/smiths/sharpening 120
+playFX=smiths/sharpening 120
 produce=heavy_lance
 
 [produce_war_lance]
 return=skipped unless economy needs war_lance
 sleep=32000
 consume=coal:2 gold iron:2 wood
-playFX=../../../sound/smiths/smith 192
+playFX=smiths/smith 192
 animate=working 45000
-playFX=../../../sound/smiths/sharpening 120
+playFX=smiths/sharpening 120
 produce=war_lance
 
 [work]

=== modified file 'data/tribes/empire/weaponsmithy/help.lua'
--- tribes/empire/weaponsmithy/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/weaponsmithy/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Weapon Smithy
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/weaving-mill/help.lua'
--- tribes/empire/weaving-mill/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/weaving-mill/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Weaving Mill
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/well/help.lua'
--- tribes/empire/well/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/well/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Well
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/empire/winery/help.lua'
--- tribes/empire/winery/help.lua	2014-07-25 12:19:33 +0000
+++ data/tribes/empire/winery/help.lua	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 -- The Imperial Winery
 
-include "scripting/formatting.lua"
-include "tribes/scripting/format_help.lua"
+include "data/scripting/formatting.lua"
+include "data/tribes/scripting/format_help.lua"
 
 set_textdomain("tribe_empire")
 

=== modified file 'data/tribes/scripting/format_help.lua'
--- tribes/scripting/format_help.lua	2014-10-19 12:02:45 +0000
+++ data/tribes/scripting/format_help.lua	2014-12-05 20:26:47 +0000
@@ -76,7 +76,7 @@
 
 	local string = "image=" .. images[1]
 	for k,v in ipairs({table.unpack(images,2)}) do
-		string = string .. ";pics/arrow-right.png;" .. v
+		string = string .. ";richtext/arrow-right.png;" .. v
 	end
 
 	return rt(string, text)
@@ -99,7 +99,7 @@
 	end
 	local string = "image=" .. items[1].icon_name
 	for k,v in ipairs({table.unpack(items,2)}) do
-		string = string .. ";pics/arrow-right.png;" ..  v.icon_name
+		string = string .. ";richtext/arrow-right.png;" ..  v.icon_name
 	end
 	return rt(string, p(text))
 end
@@ -120,9 +120,9 @@
 	if not text then
 		text = ""
 	end
-	string = "image=tribes/" .. tribename .. "/" .. resource  .. "/resi_00.png"
+	string = "image=data/tribes/" .. tribename .. "/" .. resource  .. "/resi_00.png"
 	for k,v in ipairs({table.unpack(items)}) do
-		string = string .. ";pics/arrow-right.png;" ..  v.icon_name
+		string = string .. ";richtext/arrow-right.png;" ..  v.icon_name
 	end
 	return rt(string, p(text))
 end
@@ -149,13 +149,13 @@
 	return
 		rt(h2(_"Dependencies")) .. rt(h3(_"Soldiers:")) ..
 		dependencies_basic({
-			"tribes/" .. tribename .. "/soldier/" .. untrained .. ".png",
+			"data/tribes/" .. tribename .. "/soldier/" .. untrained .. ".png",
 			building_description.icon_name,
-			"tribes/" .. tribename .. "/soldier/" .. interim1 .. ".png"}) ..
+			"data/tribes/" .. tribename .. "/soldier/" .. interim1 .. ".png"}) ..
 		dependencies_basic({
-			"tribes/" .. tribename .. "/soldier/" .. interim2 .. ".png",
+			"data/tribes/" .. tribename .. "/soldier/" .. interim2 .. ".png",
 			building_description.icon_name,
-			"tribes/" .. tribename .. "/soldier/" .. fulltrained .. ".png"})
+			"data/tribes/" .. tribename .. "/soldier/" .. fulltrained .. ".png"})
 end
 
 
@@ -482,16 +482,16 @@
 
 	-- Space required
 	if (building_description.is_mine) then
-		result = result .. text_line(_"Space required:",_"Mine plot","pics/mine.png")
+		result = result .. text_line(_"Space required:",_"Mine plot","wui/overlays/mine.png")
 	elseif (building_description.is_port) then
-		result = result .. text_line(_"Space required:",_"Port plot","pics/port.png")
+		result = result .. text_line(_"Space required:",_"Port plot","wui/overlays/port.png")
 	else
 		if (building_description.size == 1) then
-			result = result .. text_line(_"Space required:",_"Small plot","pics/small.png")
+			result = result .. text_line(_"Space required:",_"Small plot","wui/overlays/small.png")
 		elseif (building_description.size == 2) then
-			result = result .. text_line(_"Space required:",_"Medium plot","pics/medium.png")
+			result = result .. text_line(_"Space required:",_"Medium plot","wui/overlays/medium.png")
 		elseif (building_description.size == 3) then
-			result = result .. text_line(_"Space required:",_"Big plot","pics/big.png")
+			result = result .. text_line(_"Space required:",_"Big plot","wui/overlays/big.png")
 		else
 			result = result .. p(_"Space required:" .. _"Unknown")
 		end

=== renamed directory 'txts' => 'data/txts'
=== modified file 'data/txts/README.lua'
--- txts/README.lua	2014-10-12 06:30:08 +0000
+++ data/txts/README.lua	2014-12-05 20:26:47 +0000
@@ -1,11 +1,11 @@
-include "scripting/formatting.lua"
+include "data/scripting/formatting.lua"
 
 set_textdomain("texts")
 
 return {
    title = _ "README",
    text =
-rt("image=pics/wl-logo-64.png image-align=center text-align=center") ..
+rt("image=logos//wl-logo-64.png image-align=center text-align=center") ..
 rt("text-align=center",
    p("font-size=38 font-face=Widelands/Widelands font-color=#2F9131",
 [[Widelands]]

=== modified file 'data/txts/developers'
--- txts/developers	2014-11-12 10:58:30 +0000
+++ data/txts/developers	2014-12-05 20:26:47 +0000
@@ -7,7 +7,7 @@
 ""
 _ "Chieftain"
 "</p></rt>"
-"<rt image=pics/genstats_enable_plr_01.png image-align=left text-align=left><p font-size=12> Holger Rapp (SirVer)</p></rt>"
+"<rt image=players/genstats_enable_plr_01.png image-align=left text-align=left><p font-size=12> Holger Rapp (SirVer)</p></rt>"
 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=DejaVuSerif font-color=f4a131><br>"
 ""
 ""
@@ -17,155 +17,155 @@
 ""
 _ "Graphics"
 "</p></rt>"
-"<rt image=pics/genstats_enable_plr_04.png image-align=left text-align=left><p font-size=12>vacant</p></rt>"
+"<rt image=players/genstats_enable_plr_04.png image-align=left text-align=left><p font-size=12>vacant</p></rt>"
 "<rt text-align=left><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Homepage"
 "</p></rt>"
-"<rt image=pics/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12> Markus Pfitzner (janus)</p></rt>"
+"<rt image=players/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12> Markus Pfitzner (janus)</p></rt>"
 "<rt text-align=left><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Sound"
 "</p></rt>"
-"<rt image=pics/genstats_enable_plr_04.png image-align=left text-align=left><p font-size=12> Jan Bruns (solatis)</p></rt>"
+"<rt image=players/genstats_enable_plr_04.png image-align=left text-align=left><p font-size=12> Jan Bruns (solatis)</p></rt>"
 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=DejaVuSerif font-color=f4a131><br>"
 ""
 _ "Tongues"
 "</p></rt>"
-"<rt image=pics/genstats_enable_plr_04.png image-align=left text-align=left><p font-size=12>GunChleoc</p></rt>"
+"<rt image=players/genstats_enable_plr_04.png image-align=left text-align=left><p font-size=12>GunChleoc</p></rt>"
 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=DejaVuSerif font-color=f4a131><br>"
 ""
 _ "Coders"
 "</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Holger Rapp (SirVer)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Nicolai Hähnle (ixprefect)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Florian Bluemel</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Florian Falkner (foldrian)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Florian Weber (Bedouin)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Philipp Engelhard</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Stefan Boettner</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Tron</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Martin Quinson</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Raul Ferriz</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Willem Jan Palenstijn</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Josef Spillner</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Christof Petig</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Erik Sigra (sigra)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Nanne Wams</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Surgery</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Andrius R. (knutux)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Jari Hautio (jarih)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Victor Pelt (Dwarik)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Axel Gehlert (dunkelbrauer)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> András Eisenberger (Kiscsirke)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Andi</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Timo</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Hannes</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> TimoW</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Jens Beyer (Qcumber-some)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Andreas Breitschopp (ab-tools)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Joachim Breitner (nomeata)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Nizamov Shawkat</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Carl-Philip Hänsch (carli)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Martin Prussak (martin)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> David Allwicher (aber)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Nathan Peters (nathanpeters)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Leif Sandstede (lcsand)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Matthias Horne (shevonar)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Borim (borim)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Angelo Locritani (alocritani)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Gabriel Margiani (gamag)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Anthony J. Bentley (anthonyjbentley)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Peter Waller (iri)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Johannes Ebke (sirius-in4matiker)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Andreas Eriksson</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Mark Scott</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Teppo Mäenpää</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Steven De Herdt</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Charly Ghislain (cghislai)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Tino Miegel (TinoM)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Tibor Bamhor (tiborb95)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Ferdinand Thiessen (f-thiessen)</p></rt>"
-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> wl-zocker</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Holger Rapp (SirVer)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Nicolai Hähnle (ixprefect)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Florian Bluemel</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Florian Falkner (foldrian)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Florian Weber (Bedouin)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Philipp Engelhard</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Stefan Boettner</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Tron</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Martin Quinson</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Raul Ferriz</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Willem Jan Palenstijn</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Josef Spillner</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Christof Petig</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Erik Sigra (sigra)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Nanne Wams</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Surgery</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Andrius R. (knutux)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Jari Hautio (jarih)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Victor Pelt (Dwarik)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Axel Gehlert (dunkelbrauer)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> András Eisenberger (Kiscsirke)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Andi</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Timo</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Hannes</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> TimoW</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Jens Beyer (Qcumber-some)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Andreas Breitschopp (ab-tools)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Joachim Breitner (nomeata)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Nizamov Shawkat</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Carl-Philip Hänsch (carli)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Martin Prussak (martin)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> David Allwicher (aber)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Nathan Peters (nathanpeters)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Leif Sandstede (lcsand)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Matthias Horne (shevonar)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Borim (borim)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Angelo Locritani (alocritani)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Gabriel Margiani (gamag)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Anthony J. Bentley (anthonyjbentley)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Peter Waller (iri)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Johannes Ebke (sirius-in4matiker)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Andreas Eriksson</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Mark Scott</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Teppo Mäenpää</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Steven De Herdt</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Charly Ghislain (cghislai)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Tino Miegel (TinoM)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Tibor Bamhor (tiborb95)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Ferdinand Thiessen (f-thiessen)</p></rt>"
+"<rt image=wui/stats/genstats_nrwares.png image-align=left text-align=left><p font-size=12> wl-zocker</p></rt>"
 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=DejaVuSerif font-color=f4a131><br>"
 ""
 ""
 _ "Graphicians"
 "</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Albert Jasiowka</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Holger Rapp (SirVer)</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Marz</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Philipp Engelhard</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Yannick Warnier</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Delia</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Florian Neuerburg</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Jerome Rosinski</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Mats Olsson</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Odin Omdal</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Wolfgang Weidner</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Andreas Baier</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Juri Chomé</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Toralf Bethke (bithunter32)</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Alexia Death</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Repsa Jih</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Geoffroy Schmitlin (Trimard)</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Benedikt Freisen (Objpaswriter)</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Stefano Guidoni (Ilguido)</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Samith Sandanayake (samithdisal)</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Chuck Wilder (chuckw)</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Astuur</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Gerrit Familiegrosskopf (kingcreole)</p></rt>"
-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Florian Angermeier (fraang)</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Albert Jasiowka</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Holger Rapp (SirVer)</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Marz</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Philipp Engelhard</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Yannick Warnier</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Delia</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Florian Neuerburg</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Jerome Rosinski</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Mats Olsson</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Odin Omdal</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Wolfgang Weidner</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Andreas Baier</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Juri Chomé</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Toralf Bethke (bithunter32)</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Alexia Death</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Repsa Jih</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Geoffroy Schmitlin (Trimard)</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Benedikt Freisen (Objpaswriter)</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Stefano Guidoni (Ilguido)</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Samith Sandanayake (samithdisal)</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Chuck Wilder (chuckw)</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Astuur</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Gerrit Familiegrosskopf (kingcreole)</p></rt>"
+"<rt image=wui/stats/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Florian Angermeier (fraang)</p></rt>"
 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=DejaVuSerif font-color=f4a131><br>"
 ""
 ""
 _ "Musicians"
 "</p></rt>"
-"<rt image=pics/workarea123.png image-align=left text-align=left><p font-size=12> Kristian</p></rt>"
-"<rt image=pics/workarea123.png image-align=left text-align=left><p font-size=12> MiddleFinger</p></rt>"
-"<rt image=pics/workarea123.png image-align=left text-align=left><p font-size=12> Valerio Orlandini (Symbiosis)</p></rt>"
-"<rt image=pics/workarea123.png image-align=left text-align=left><p font-size=12> Barry van Oudtshoorn (barryvan)</p></rt>"
-"<rt image=pics/workarea123.png image-align=left text-align=left><p font-size=12> Jan Bruns (Solatis)</p></rt>"
-"<rt image=pics/workarea123.png image-align=left text-align=left><p font-size=12> Nikola Whallon (Saturn)</p></rt>"
-"<rt image=pics/workarea123.png image-align=left text-align=left><p font-size=12> Joshua O'Leary (Joshun)</p></rt>"
+"<rt image=wui/overlays/workarea123.png image-align=left text-align=left><p font-size=12> Kristian</p></rt>"
+"<rt image=wui/overlays/workarea123.png image-align=left text-align=left><p font-size=12> MiddleFinger</p></rt>"
+"<rt image=wui/overlays/workarea123.png image-align=left text-align=left><p font-size=12> Valerio Orlandini (Symbiosis)</p></rt>"
+"<rt image=wui/overlays/workarea123.png image-align=left text-align=left><p font-size=12> Barry van Oudtshoorn (barryvan)</p></rt>"
+"<rt image=wui/overlays/workarea123.png image-align=left text-align=left><p font-size=12> Jan Bruns (Solatis)</p></rt>"
+"<rt image=wui/overlays/workarea123.png image-align=left text-align=left><p font-size=12> Nikola Whallon (Saturn)</p></rt>"
+"<rt image=wui/overlays/workarea123.png image-align=left text-align=left><p font-size=12> Joshua O'Leary (Joshun)</p></rt>"
 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=DejaVuSerif font-color=f4a131><br>"
 ""
 ""
 _ "Sound Effects"
 "</p></rt>"
-"<rt image=pics/workarea123.png image-align=left text-align=left><p font-size=12> Stefan de Konik</p></rt>"
-"<rt image=pics/workarea123.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
-"<rt image=pics/workarea123.png image-align=left text-align=left><p font-size=12> Stephan</p></rt>"
-"<rt image=pics/workarea123.png image-align=left text-align=left><p font-size=12> Adam Piggott (_aD)</p></rt>"
-"<rt image=pics/workarea123.png image-align=left text-align=left><p font-size=12> Stanisław Gackowski (Soeb)</p></rt>"
+"<rt image=wui/overlays/workarea123.png image-align=left text-align=left><p font-size=12> Stefan de Konik</p></rt>"
+"<rt image=wui/overlays/workarea123.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
+"<rt image=wui/overlays/workarea123.png image-align=left text-align=left><p font-size=12> Stephan</p></rt>"
+"<rt image=wui/overlays/workarea123.png image-align=left text-align=left><p font-size=12> Adam Piggott (_aD)</p></rt>"
+"<rt image=wui/overlays/workarea123.png image-align=left text-align=left><p font-size=12> Stanisław Gackowski (Soeb)</p></rt>"
 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=DejaVuSerif font-color=f4a131><br>"
 ""
 ""
 _ "Maps and Missions"
 "</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Michal Szopa (Winterwind)</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Jan-Henrik Kluth (Isch)</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Sven (deviant)</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Tuxlands</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Kamil Wilczek (Another Barbarian)</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Tarvo Reim (Tarrei)</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Manuel Holzmeier (Quappo)</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> ivh</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Hanna Podewski (kristin)</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Teppo Mäenpää</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> fk</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Einstein13</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Jenia</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Robnick</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Michal Szopa (Winterwind)</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Jan-Henrik Kluth (Isch)</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Sven (deviant)</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Tuxlands</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Kamil Wilczek (Another Barbarian)</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Tarvo Reim (Tarrei)</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Manuel Holzmeier (Quappo)</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> ivh</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Hanna Podewski (kristin)</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Teppo Mäenpää</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> fk</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Einstein13</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Jenia</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Robnick</p></rt>"
 "<rt text-align=left><p font-size=24 font-decoration=bold text-align=left font-face=DejaVuSerif font-color=f4a131><br>"
 ""
 ""
 _ "Tutorials"
 "</p></rt>"
-"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> wl-zocker</p></rt>"
+"<rt image=ui_basic/ls_wlmap.png image-align=left text-align=left><p font-size=12> wl-zocker</p></rt>"
 "<rt text-align=left><p font-size=24 font-decoration=bold text-align=left font-face=DejaVuSerif font-color=f4a131><br>"
 ""
 ""
@@ -174,18 +174,18 @@
 "<rt text-align=left><p font-size=18 font-decoration=bold text-align=left font-face=DejaVuSerif font-color=f4a131>"
 _ "Barbarian"
 "</p></rt>"
-"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> Bastian Rapp</p></rt>"
-"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> Alexander Kahl (wolfpac)</p></rt>"
-"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
+"<rt image=ui_basic/ls_wlmap.png image-align=left text-align=left><p font-size=12> Bastian Rapp</p></rt>"
+"<rt image=ui_basic/ls_wlmap.png image-align=left text-align=left><p font-size=12> Alexander Kahl (wolfpac)</p></rt>"
+"<rt image=ui_basic/ls_wlmap.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
 "<rt text-align=left><p font-size=18 font-decoration=bold text-align=left font-face=DejaVuSerif font-color=f4a131>"
 _ "Empire"
 "</p></rt>"
-"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
+"<rt image=ui_basic/ls_wlmap.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
 "<rt text-align=left><p font-size=18 font-decoration=bold text-align=left font-face=DejaVuSerif font-color=f4a131>"
 _ "Atlantean"
 "</p></rt>"
-"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> Holger Rapp (SirVer)</p></rt>"
-"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
+"<rt image=ui_basic/ls_wlmap.png image-align=left text-align=left><p font-size=12> Holger Rapp (SirVer)</p></rt>"
+"<rt image=ui_basic/ls_wlmap.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=DejaVuSerif font-color=f4a131><br>"
 ""
 ""
@@ -199,96 +199,96 @@
 ""
 _ "Czech"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Matej Svrcek (prometheus)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Martin Vecera (Marvec)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Marek Donar (Markus7cz)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Matej Svrcek (prometheus)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Martin Vecera (Marvec)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Marek Donar (Markus7cz)</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Dansk"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Erik Soe Sorensen</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Joe Hansen (joedalton)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Erik Soe Sorensen</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Joe Hansen (joedalton)</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Dutch"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Rob Snelders (Ertai)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Johan Jonkman (Dikjuh)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Pieter Ouwerkerk (Pietertje)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Rob Snelders (Ertai)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Johan Jonkman (Dikjuh)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Pieter Ouwerkerk (Pietertje)</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Finnish"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Pekka Järvinen (Raspi)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Sini Ruohomaa (Byakushin)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Pekka Järvinen (Raspi)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Sini Ruohomaa (Byakushin)</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "French"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>AnubiS</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Emmanuel Andry (Eandry)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Jean-Pierre Gemble</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>AnubiS</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Emmanuel Andry (Eandry)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Jean-Pierre Gemble</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Galician"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Antonio Trueba (Fasser)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Antonio Trueba (Fasser)</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "German"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Hagen</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Peter Schwanemann (Nasenbaer)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Philipp Niemann (Azagtoth)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Johannes (nuefke)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Tino Miegel (TinoM)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Markus Pfitzner (janus)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Hanna Podewski (kristin)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Matthias Krüger</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Hagen</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Peter Schwanemann (Nasenbaer)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Philipp Niemann (Azagtoth)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Johannes (nuefke)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Tino Miegel (TinoM)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Markus Pfitzner (janus)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Hanna Podewski (kristin)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Matthias Krüger</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Hebrew"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Solomon Gruber (Piql7)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Solomon Gruber (Piql7)</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Hungarian"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Dániel Varga (EuroF)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Dániel Varga (EuroF)</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Italian"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Gabriel Rota</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Gabriel Rota</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Polish"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Januzi (januzi)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Andrzej Krentosz (Endrju)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Jacek Wolszczak (Shutdownrunner)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Stanisław Gackowski (Soeb)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Januzi (januzi)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Andrzej Krentosz (Endrju)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Jacek Wolszczak (Shutdownrunner)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Stanisław Gackowski (Soeb)</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Russian"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Alexander Bikmeyev (Rombal)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Alexander Bikmeyev (Rombal)</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Slovak"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Vladímir Tóth (Ike)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Vladímir Tóth (Ike)</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Spanish"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Antonio Trueba(Fasser)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Antonio Trueba(Fasser)</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Swedish"
 "</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Daniel Nylander (yeager)</p></rt>"
-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Frederik Pettersson (luno)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Daniel Nylander (yeager)</p></rt>"
+"<rt image=wui/editor/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Frederik Pettersson (luno)</p></rt>"
 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=DejaVuSerif font-color=f4a131><br>"
 ""
 ""
@@ -332,24 +332,24 @@
 ""
 _ "Homepage Coders"
 "</p></rt>"
-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Holger Rapp (SirVer)</p></rt>"
-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Stanislaw Gackowski (Soeb)</p></rt>"
-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Markus Pfitzner (janus)</p></rt>"
-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Tobi</p></rt>"
+"<rt image=logos/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Holger Rapp (SirVer)</p></rt>"
+"<rt image=logos/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Stanislaw Gackowski (Soeb)</p></rt>"
+"<rt image=logos/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Markus Pfitzner (janus)</p></rt>"
+"<rt image=logos/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Tobi</p></rt>"
 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=DejaVuSerif font-color=f4a131><br>"
 ""
 ""
 _ "Documentation, Help and Wiki"
 "</p></rt>"
-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Erik Sigra (sigra)</p></rt>"
-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Florian Falkner (foldrian)</p></rt>"
-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Florian Weber (bedouin)</p></rt>"
-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Nicolai Haehnle</p></rt>"
-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Holger Rapp (SirVer)</p></rt>"
-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Johannes (nuefke)</p></rt>"
-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Alexander Kahl (wolfpac)</p></rt>"
-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Stanislaw Gackowski (Soeb)</p></rt>"
-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Hanna Podewski (kristin)</p></rt>"
+"<rt image=logos/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Erik Sigra (sigra)</p></rt>"
+"<rt image=logos/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Florian Falkner (foldrian)</p></rt>"
+"<rt image=logos/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Florian Weber (bedouin)</p></rt>"
+"<rt image=logos/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Nicolai Haehnle</p></rt>"
+"<rt image=logos/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Holger Rapp (SirVer)</p></rt>"
+"<rt image=logos/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Johannes (nuefke)</p></rt>"
+"<rt image=logos/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Alexander Kahl (wolfpac)</p></rt>"
+"<rt image=logos/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Stanislaw Gackowski (Soeb)</p></rt>"
+"<rt image=logos/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Hanna Podewski (kristin)</p></rt>"
 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=DejaVuSerif font-color=f4a131><br>"
 ""
 ""
@@ -360,32 +360,32 @@
 ""
 _ "Homepage"
 "</p></rt>"
-"<rt image=pics/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>holymoly</p></rt>"
-"<rt image=pics/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Stuart Eglington (DaaL1973)</p></rt>"
-"<rt image=pics/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Jon Harris (jonsjava)</p></rt>"
+"<rt image=players/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>holymoly</p></rt>"
+"<rt image=players/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Stuart Eglington (DaaL1973)</p></rt>"
+"<rt image=players/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Jon Harris (jonsjava)</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Graphics"
 "</p></rt>"
-"<rt image=pics/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Salamander</p></rt>"
-"<rt image=pics/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Alexia Death (death)</p></rt>"
-"<rt image=pics/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Chuck Wilder (chuckw)</p></rt>"
+"<rt image=players/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Salamander</p></rt>"
+"<rt image=players/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Alexia Death (death)</p></rt>"
+"<rt image=players/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Chuck Wilder (chuckw)</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Sound"
 "</p></rt>"
-"<rt image=pics/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Yannick Warnier</p></rt>"
+"<rt image=players/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Yannick Warnier</p></rt>"
 "<rt><p font-size=18 font-decoration=underline font-face=DejaVuSerif font-color=2F9131>"
 ""
 _ "Translation"
 "</p></rt>"
-"<rt image=pics/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Peter Schwanemann (Nasenbaer)</p></rt>"
-"<rt image=pics/genstats_enable_plr_04.png image-align=left text-align=left><p font-size=12>Philipp Niemann (Azagtoth)</p></rt>"
+"<rt image=players/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Peter Schwanemann (Nasenbaer)</p></rt>"
+"<rt image=players/genstats_enable_plr_04.png image-align=left text-align=left><p font-size=12>Philipp Niemann (Azagtoth)</p></rt>"
 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=DejaVuSerif font-color=f4a131><br>"
 ""
 ""
 _ "Other"
 "</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Matt Howe (mdhowe)</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Samuel Tilly (eldamar)</p></rt>"
-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> and many, many more (thank you for everything you've done)</p></rt>""
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Matt Howe (mdhowe)</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> Samuel Tilly (eldamar)</p></rt>"
+"<rt image=wui/stats/genstats_landsize.png image-align=left text-align=left><p font-size=12> and many, many more (thank you for everything you've done)</p></rt>""

=== modified file 'data/txts/editor_readme'
--- txts/editor_readme	2014-03-30 13:26:07 +0000
+++ data/txts/editor_readme	2014-12-05 20:26:47 +0000
@@ -1,5 +1,5 @@
 title=_ README for the Widelands Editor
-text=_ ""<rt image=pics/WL-Editor-64.png image-align=center text-align=center><p></p></rt>"
+text=_ ""<rt image=logos/WL-Editor-64.png image-align=center text-align=center><p></p></rt>"
 ""<rt text-align=center><p font-size=38 font-face=DejaVuSerif font-color=2F9131>"
 _"README for the Editor"
 "</p></rt>"

=== renamed directory 'world' => 'data/world'
=== modified file 'data/world/critters/duck/init.lua'
--- world/critters/duck/init.lua	2014-04-18 12:57:10 +0000
+++ data/world/critters/duck/init.lua	2014-12-05 20:26:47 +0000
@@ -4,7 +4,7 @@
    idle = {
       pictures = path.list_directory(dirname, "duck_\\d+.png"),
       sound_effect = {
-         directory = dirname,
+         directory = "animals",
          name = "duck",
       },
       hotspot = { 5, 7 },

=== modified file 'data/world/critters/sheep/init.lua'
--- world/critters/sheep/init.lua	2014-04-18 12:57:10 +0000
+++ data/world/critters/sheep/init.lua	2014-12-05 20:26:47 +0000
@@ -4,7 +4,7 @@
    idle = {
       pictures = path.list_directory(dirname, "sheep_\\d+.png"),
       sound_effect = {
-         directory = "sound/farm",
+         directory = "farm",
          name = "sheep",
       },
       hotspot = { 8, 16 },

=== modified file 'data/world/immovables/trees/alder/init.lua'
--- world/immovables/trees/alder/init.lua	2014-07-05 09:00:48 +0000
+++ data/world/immovables/trees/alder/init.lua	2014-12-05 20:26:47 +0000
@@ -107,7 +107,7 @@
          hotspot = { 23, 59 },
          fps = 10,
          sound_effect = {
-            directory = "sound/animals",
+            directory = "animals",
             name = "bird4",
          },
       },

=== modified file 'data/world/immovables/trees/aspen/init.lua'
--- world/immovables/trees/aspen/init.lua	2014-07-05 09:00:48 +0000
+++ data/world/immovables/trees/aspen/init.lua	2014-12-05 20:26:47 +0000
@@ -103,7 +103,7 @@
          hotspot = { 23, 58 },
          fps = 10,
          sound_effect = {
-            directory = "sound/animals",
+            directory = "animals",
             name = "bird1",
          },
       },

=== modified file 'data/world/immovables/trees/beech/init.lua'
--- world/immovables/trees/beech/init.lua	2014-07-05 09:00:48 +0000
+++ data/world/immovables/trees/beech/init.lua	2014-12-05 20:26:47 +0000
@@ -99,7 +99,7 @@
          hotspot = { 24, 60 },
          fps = 10,
          sound_effect = {
-            directory = "sound/animals",
+            directory = "animals",
             name = "bird6",
          },
       },

=== modified file 'data/world/immovables/trees/birch/init.lua'
--- world/immovables/trees/birch/init.lua	2014-07-05 09:00:48 +0000
+++ data/world/immovables/trees/birch/init.lua	2014-12-05 20:26:47 +0000
@@ -102,7 +102,7 @@
          hotspot = { 23, 58 },
          fps = 10,
          sound_effect = {
-            directory = "sound/animals",
+            directory = "animals",
             name = "bird5",
          },
       },

=== modified file 'data/world/immovables/trees/larch/init.lua'
--- world/immovables/trees/larch/init.lua	2014-07-05 09:00:48 +0000
+++ data/world/immovables/trees/larch/init.lua	2014-12-05 20:26:47 +0000
@@ -99,7 +99,7 @@
          hotspot = { 15, 59 },
          fps = 10,
          sound_effect = {
-            directory = "sound/animals",
+            directory = "animals",
             name = "bird6",
          },
       },

=== modified file 'data/world/immovables/trees/maple/init.lua'
--- world/immovables/trees/maple/init.lua	2014-07-05 09:00:48 +0000
+++ data/world/immovables/trees/maple/init.lua	2014-12-05 20:26:47 +0000
@@ -99,7 +99,7 @@
          hotspot = { 23, 59 },
          fps = 10,
          sound_effect = {
-            directory = "sound/animals",
+            directory = "animals",
             name = "bird4",
          },
       },

=== modified file 'data/world/immovables/trees/oak/init.lua'
--- world/immovables/trees/oak/init.lua	2014-07-05 09:00:48 +0000
+++ data/world/immovables/trees/oak/init.lua	2014-12-05 20:26:47 +0000
@@ -100,7 +100,7 @@
          hotspot = { 24, 60 },
          fps = 10,
          sound_effect = {
-            directory = "sound/animals",
+            directory = "animals",
             name = "bird2",
          },
       },

=== modified file 'data/world/immovables/trees/palm_borassus/init.lua'
--- world/immovables/trees/palm_borassus/init.lua	2014-07-05 14:09:47 +0000
+++ data/world/immovables/trees/palm_borassus/init.lua	2014-12-05 20:26:47 +0000
@@ -99,7 +99,7 @@
          hotspot = { 24, 60 },
          fps = 10,
          sound_effect = {
-            directory = "sound/animals",
+            directory = "animals",
             name = "bird2",
          },
       },

=== modified file 'data/world/immovables/trees/palm_coconut/init.lua'
--- world/immovables/trees/palm_coconut/init.lua	2014-07-05 14:09:47 +0000
+++ data/world/immovables/trees/palm_coconut/init.lua	2014-12-05 20:26:47 +0000
@@ -99,7 +99,7 @@
          hotspot = { 24, 59 },
          fps = 10,
          sound_effect = {
-            directory = "sound/animals",
+            directory = "animals",
             name = "bird3",
          },
       },

=== modified file 'data/world/immovables/trees/palm_date/init.lua'
--- world/immovables/trees/palm_date/init.lua	2014-07-05 14:09:47 +0000
+++ data/world/immovables/trees/palm_date/init.lua	2014-12-05 20:26:47 +0000
@@ -102,7 +102,7 @@
          hotspot = { 24, 60 },
          fps = 10,
          sound_effect = {
-            directory = "sound/animals",
+            directory = "animals",
             name = "bird1",
          },
       },

=== modified file 'data/world/immovables/trees/palm_oil/init.lua'
--- world/immovables/trees/palm_oil/init.lua	2014-07-05 14:09:47 +0000
+++ data/world/immovables/trees/palm_oil/init.lua	2014-12-05 20:26:47 +0000
@@ -103,7 +103,7 @@
          hotspot = { 24, 60 },
          fps = 10,
          sound_effect = {
-            directory = "sound/animals",
+            directory = "animals",
             name = "bird5",
          },
       },

=== modified file 'data/world/immovables/trees/palm_roystonea/init.lua'
--- world/immovables/trees/palm_roystonea/init.lua	2014-07-05 14:09:47 +0000
+++ data/world/immovables/trees/palm_roystonea/init.lua	2014-12-05 20:26:47 +0000
@@ -99,7 +99,7 @@
          hotspot = { 24, 60 },
          fps = 10,
          sound_effect = {
-            directory = "sound/animals",
+            directory = "animals",
             name = "bird4",
          },
       },

=== modified file 'data/world/immovables/trees/rowan/init.lua'
--- world/immovables/trees/rowan/init.lua	2014-07-05 09:00:48 +0000
+++ data/world/immovables/trees/rowan/init.lua	2014-12-05 20:26:47 +0000
@@ -102,7 +102,7 @@
          hotspot = { 23, 59 },
          fps = 10,
          sound_effect = {
-            directory = "sound/animals",
+            directory = "animals",
             name = "bird6",
          },
       },

=== modified file 'data/world/immovables/trees/spruce/init.lua'
--- world/immovables/trees/spruce/init.lua	2014-07-05 09:00:48 +0000
+++ data/world/immovables/trees/spruce/init.lua	2014-12-05 20:26:47 +0000
@@ -99,7 +99,7 @@
          hotspot = { 15, 59 },
          fps = 10,
          sound_effect = {
-            directory = "sound/animals",
+            directory = "animals",
             name = "bird3",
          },
       },

=== modified file 'data/world/init.lua'
--- world/init.lua	2014-07-18 19:26:15 +0000
+++ data/world/init.lua	2014-12-05 20:26:47 +0000
@@ -2,183 +2,183 @@
 
 set_textdomain("world")
 
-include "world/resources/init.lua"
-include "world/terrains/init.lua"
+include "data/world/resources/init.lua"
+include "data/world/terrains/init.lua"
 
 
 world:new_editor_immovable_category{
    name = "miscellaneous",
    descname = _ "Miscellaneous",
-   picture = "world/immovables/ruin5/idle.png",
+   picture = "data/world/immovables/ruin5/idle.png",
 }
 
 world:new_editor_immovable_category{
    name = "plants",
    descname = _ "Plants",
-   picture = "world/immovables/cactus3/idle.png",
+   picture = "data/world/immovables/cactus3/idle.png",
 }
 
 world:new_editor_immovable_category{
    name = "standing_stones",
    descname = _ "Standing Stones",
-   picture = "world/immovables/standing_stones/standing_stone4_desert/idle.png",
+   picture = "data/world/immovables/standing_stones/standing_stone4_desert/idle.png",
 }
 
 world:new_editor_immovable_category{
    name = "stones",
    descname = _ "Stones",
-   picture = "world/immovables/stones/greenland_stones6/idle.png",
+   picture = "data/world/immovables/stones/greenland_stones6/idle.png",
 }
 
 world:new_editor_immovable_category{
    name = "trees_coniferous",
    descname = _ "Coniferous Trees",
-   picture = "world/immovables/trees/spruce/old/idle_0.png",
+   picture = "data/world/immovables/trees/spruce/old/idle_0.png",
 }
 
 world:new_editor_immovable_category{
    name = "trees_dead",
    descname = _ "Dead Trees",
-   picture = "world/immovables/trees/deadtree2/idle.png",
+   picture = "data/world/immovables/trees/deadtree2/idle.png",
 }
 
 world:new_editor_immovable_category{
    name = "trees_deciduous",
    descname = _ "Deciduous Trees",
-   picture = "world/immovables/trees/alder/old/idle_0.png",
+   picture = "data/world/immovables/trees/alder/old/idle_0.png",
 }
 
 world:new_editor_immovable_category{
    name = "trees_palm",
    descname = _ "Palm Trees",
-   picture = "world/immovables/trees/palm_borassus/old/idle_0.png",
+   picture = "data/world/immovables/trees/palm_borassus/old/idle_0.png",
 }
 
 world:new_editor_immovable_category{
    name = "trees_wasteland",
    descname = _ "Wasteland Trees",
-   picture = "world/immovables/trees/umbrella_red/old/idle_0.png",
+   picture = "data/world/immovables/trees/umbrella_red/old/idle_0.png",
 }
 
-include "world/immovables/grass1/init.lua"
-include "world/immovables/bush1/init.lua"
-include "world/immovables/bush2/init.lua"
-include "world/immovables/bush3/init.lua"
-include "world/immovables/bush4/init.lua"
-include "world/immovables/bush5/init.lua"
-include "world/immovables/cactus1/init.lua"
-include "world/immovables/cactus2/init.lua"
-include "world/immovables/cactus3/init.lua"
-include "world/immovables/cactus4/init.lua"
-include "world/immovables/grass2/init.lua"
-include "world/immovables/grass3/init.lua"
-include "world/immovables/manmade/bar-ruin00/init.lua"
-include "world/immovables/manmade/bar-ruin01/init.lua"
-include "world/immovables/manmade/bar-ruin02/init.lua"
-include "world/immovables/manmade/bar-ruin03/init.lua"
-include "world/immovables/manmade/debris00/init.lua"
-include "world/immovables/manmade/debris01/init.lua"
-include "world/immovables/manmade/debris02/init.lua"
-include "world/immovables/manmade/snowman/init.lua"
-include "world/immovables/mushroom1/init.lua"
-include "world/immovables/mushroom2/init.lua"
-include "world/immovables/pebble1/init.lua"
-include "world/immovables/pebble2/init.lua"
-include "world/immovables/pebble3/init.lua"
-include "world/immovables/pebble4/init.lua"
-include "world/immovables/pebble5/init.lua"
-include "world/immovables/pebble6/init.lua"
-include "world/immovables/ruin1/init.lua"
-include "world/immovables/ruin2/init.lua"
-include "world/immovables/ruin3/init.lua"
-include "world/immovables/ruin4/init.lua"
-include "world/immovables/ruin5/init.lua"
-include "world/immovables/skeleton1/init.lua"
-include "world/immovables/skeleton2/init.lua"
-include "world/immovables/skeleton3/init.lua"
-include "world/immovables/skeleton4/init.lua"
-include "world/immovables/track_winter/init.lua"
+include "data/world/immovables/grass1/init.lua"
+include "data/world/immovables/bush1/init.lua"
+include "data/world/immovables/bush2/init.lua"
+include "data/world/immovables/bush3/init.lua"
+include "data/world/immovables/bush4/init.lua"
+include "data/world/immovables/bush5/init.lua"
+include "data/world/immovables/cactus1/init.lua"
+include "data/world/immovables/cactus2/init.lua"
+include "data/world/immovables/cactus3/init.lua"
+include "data/world/immovables/cactus4/init.lua"
+include "data/world/immovables/grass2/init.lua"
+include "data/world/immovables/grass3/init.lua"
+include "data/world/immovables/manmade/bar-ruin00/init.lua"
+include "data/world/immovables/manmade/bar-ruin01/init.lua"
+include "data/world/immovables/manmade/bar-ruin02/init.lua"
+include "data/world/immovables/manmade/bar-ruin03/init.lua"
+include "data/world/immovables/manmade/debris00/init.lua"
+include "data/world/immovables/manmade/debris01/init.lua"
+include "data/world/immovables/manmade/debris02/init.lua"
+include "data/world/immovables/manmade/snowman/init.lua"
+include "data/world/immovables/mushroom1/init.lua"
+include "data/world/immovables/mushroom2/init.lua"
+include "data/world/immovables/pebble1/init.lua"
+include "data/world/immovables/pebble2/init.lua"
+include "data/world/immovables/pebble3/init.lua"
+include "data/world/immovables/pebble4/init.lua"
+include "data/world/immovables/pebble5/init.lua"
+include "data/world/immovables/pebble6/init.lua"
+include "data/world/immovables/ruin1/init.lua"
+include "data/world/immovables/ruin2/init.lua"
+include "data/world/immovables/ruin3/init.lua"
+include "data/world/immovables/ruin4/init.lua"
+include "data/world/immovables/ruin5/init.lua"
+include "data/world/immovables/skeleton1/init.lua"
+include "data/world/immovables/skeleton2/init.lua"
+include "data/world/immovables/skeleton3/init.lua"
+include "data/world/immovables/skeleton4/init.lua"
+include "data/world/immovables/track_winter/init.lua"
 
 -- Standing Stones
-include "world/immovables/standing_stones/standing_stone1_desert/init.lua"
-include "world/immovables/standing_stones/standing_stone1_summer/init.lua"
-include "world/immovables/standing_stones/standing_stone1_wasteland/init.lua"
-include "world/immovables/standing_stones/standing_stone1_winter/init.lua"
-include "world/immovables/standing_stones/standing_stone2_desert/init.lua"
-include "world/immovables/standing_stones/standing_stone2_summer/init.lua"
-include "world/immovables/standing_stones/standing_stone2_wasteland/init.lua"
-include "world/immovables/standing_stones/standing_stone2_winter/init.lua"
-include "world/immovables/standing_stones/standing_stone3_desert/init.lua"
-include "world/immovables/standing_stones/standing_stone3_summer/init.lua"
-include "world/immovables/standing_stones/standing_stone3_wasteland/init.lua"
-include "world/immovables/standing_stones/standing_stone3_winter/init.lua"
-include "world/immovables/standing_stones/standing_stone4_desert/init.lua"
-include "world/immovables/standing_stones/standing_stone4_summer/init.lua"
-include "world/immovables/standing_stones/standing_stone4_wasteland/init.lua"
-include "world/immovables/standing_stones/standing_stone4_winter/init.lua"
-include "world/immovables/standing_stones/standing_stone5_desert/init.lua"
-include "world/immovables/standing_stones/standing_stone5_summer/init.lua"
-include "world/immovables/standing_stones/standing_stone5_wasteland/init.lua"
-include "world/immovables/standing_stones/standing_stone5_winter/init.lua"
-include "world/immovables/standing_stones/standing_stone6/init.lua"
-include "world/immovables/standing_stones/standing_stone7/init.lua"
+include "data/world/immovables/standing_stones/standing_stone1_desert/init.lua"
+include "data/world/immovables/standing_stones/standing_stone1_summer/init.lua"
+include "data/world/immovables/standing_stones/standing_stone1_wasteland/init.lua"
+include "data/world/immovables/standing_stones/standing_stone1_winter/init.lua"
+include "data/world/immovables/standing_stones/standing_stone2_desert/init.lua"
+include "data/world/immovables/standing_stones/standing_stone2_summer/init.lua"
+include "data/world/immovables/standing_stones/standing_stone2_wasteland/init.lua"
+include "data/world/immovables/standing_stones/standing_stone2_winter/init.lua"
+include "data/world/immovables/standing_stones/standing_stone3_desert/init.lua"
+include "data/world/immovables/standing_stones/standing_stone3_summer/init.lua"
+include "data/world/immovables/standing_stones/standing_stone3_wasteland/init.lua"
+include "data/world/immovables/standing_stones/standing_stone3_winter/init.lua"
+include "data/world/immovables/standing_stones/standing_stone4_desert/init.lua"
+include "data/world/immovables/standing_stones/standing_stone4_summer/init.lua"
+include "data/world/immovables/standing_stones/standing_stone4_wasteland/init.lua"
+include "data/world/immovables/standing_stones/standing_stone4_winter/init.lua"
+include "data/world/immovables/standing_stones/standing_stone5_desert/init.lua"
+include "data/world/immovables/standing_stones/standing_stone5_summer/init.lua"
+include "data/world/immovables/standing_stones/standing_stone5_wasteland/init.lua"
+include "data/world/immovables/standing_stones/standing_stone5_winter/init.lua"
+include "data/world/immovables/standing_stones/standing_stone6/init.lua"
+include "data/world/immovables/standing_stones/standing_stone7/init.lua"
 
 -- Stones
-include "world/immovables/stones/blackland_stones1/init.lua"
-include "world/immovables/stones/blackland_stones2/init.lua"
-include "world/immovables/stones/blackland_stones3/init.lua"
-include "world/immovables/stones/blackland_stones4/init.lua"
-include "world/immovables/stones/blackland_stones5/init.lua"
-include "world/immovables/stones/blackland_stones6/init.lua"
-include "world/immovables/stones/desert_stones1/init.lua"
-include "world/immovables/stones/desert_stones2/init.lua"
-include "world/immovables/stones/desert_stones3/init.lua"
-include "world/immovables/stones/desert_stones4/init.lua"
-include "world/immovables/stones/desert_stones5/init.lua"
-include "world/immovables/stones/desert_stones6/init.lua"
-include "world/immovables/stones/greenland_stones1/init.lua"
-include "world/immovables/stones/greenland_stones2/init.lua"
-include "world/immovables/stones/greenland_stones3/init.lua"
-include "world/immovables/stones/greenland_stones4/init.lua"
-include "world/immovables/stones/greenland_stones5/init.lua"
-include "world/immovables/stones/greenland_stones6/init.lua"
-include "world/immovables/stones/winterland_stones1/init.lua"
-include "world/immovables/stones/winterland_stones2/init.lua"
-include "world/immovables/stones/winterland_stones3/init.lua"
-include "world/immovables/stones/winterland_stones4/init.lua"
-include "world/immovables/stones/winterland_stones5/init.lua"
-include "world/immovables/stones/winterland_stones6/init.lua"
+include "data/world/immovables/stones/blackland_stones1/init.lua"
+include "data/world/immovables/stones/blackland_stones2/init.lua"
+include "data/world/immovables/stones/blackland_stones3/init.lua"
+include "data/world/immovables/stones/blackland_stones4/init.lua"
+include "data/world/immovables/stones/blackland_stones5/init.lua"
+include "data/world/immovables/stones/blackland_stones6/init.lua"
+include "data/world/immovables/stones/desert_stones1/init.lua"
+include "data/world/immovables/stones/desert_stones2/init.lua"
+include "data/world/immovables/stones/desert_stones3/init.lua"
+include "data/world/immovables/stones/desert_stones4/init.lua"
+include "data/world/immovables/stones/desert_stones5/init.lua"
+include "data/world/immovables/stones/desert_stones6/init.lua"
+include "data/world/immovables/stones/greenland_stones1/init.lua"
+include "data/world/immovables/stones/greenland_stones2/init.lua"
+include "data/world/immovables/stones/greenland_stones3/init.lua"
+include "data/world/immovables/stones/greenland_stones4/init.lua"
+include "data/world/immovables/stones/greenland_stones5/init.lua"
+include "data/world/immovables/stones/greenland_stones6/init.lua"
+include "data/world/immovables/stones/winterland_stones1/init.lua"
+include "data/world/immovables/stones/winterland_stones2/init.lua"
+include "data/world/immovables/stones/winterland_stones3/init.lua"
+include "data/world/immovables/stones/winterland_stones4/init.lua"
+include "data/world/immovables/stones/winterland_stones5/init.lua"
+include "data/world/immovables/stones/winterland_stones6/init.lua"
 
 -- Trees
-include "world/immovables/trees/alder/init.lua"
-include "world/immovables/trees/aspen/init.lua"
-include "world/immovables/trees/beech/init.lua"
-include "world/immovables/trees/birch/init.lua"
-include "world/immovables/trees/cirrus/init.lua"
-include "world/immovables/trees/deadtree1/init.lua"
-include "world/immovables/trees/deadtree2/init.lua"
-include "world/immovables/trees/deadtree3/init.lua"
-include "world/immovables/trees/deadtree4/init.lua"
-include "world/immovables/trees/deadtree5/init.lua"
-include "world/immovables/trees/deadtree6/init.lua"
-include "world/immovables/trees/fallentree/init.lua"
-include "world/immovables/trees/larch/init.lua"
-include "world/immovables/trees/liana/init.lua"
-include "world/immovables/trees/maple/init.lua"
-include "world/immovables/trees/mushroom_dark/init.lua"
-include "world/immovables/trees/mushroom_green/init.lua"
-include "world/immovables/trees/mushroom_red/init.lua"
-include "world/immovables/trees/oak/init.lua"
-include "world/immovables/trees/palm_borassus/init.lua"
-include "world/immovables/trees/palm_coconut/init.lua"
-include "world/immovables/trees/palm_date/init.lua"
-include "world/immovables/trees/palm_oil/init.lua"
-include "world/immovables/trees/palm_roystonea/init.lua"
-include "world/immovables/trees/rowan/init.lua"
-include "world/immovables/trees/spruce/init.lua"
-include "world/immovables/trees/twine/init.lua"
-include "world/immovables/trees/umbrella_green/init.lua"
-include "world/immovables/trees/umbrella_red/init.lua"
+include "data/world/immovables/trees/alder/init.lua"
+include "data/world/immovables/trees/aspen/init.lua"
+include "data/world/immovables/trees/beech/init.lua"
+include "data/world/immovables/trees/birch/init.lua"
+include "data/world/immovables/trees/cirrus/init.lua"
+include "data/world/immovables/trees/deadtree1/init.lua"
+include "data/world/immovables/trees/deadtree2/init.lua"
+include "data/world/immovables/trees/deadtree3/init.lua"
+include "data/world/immovables/trees/deadtree4/init.lua"
+include "data/world/immovables/trees/deadtree5/init.lua"
+include "data/world/immovables/trees/deadtree6/init.lua"
+include "data/world/immovables/trees/fallentree/init.lua"
+include "data/world/immovables/trees/larch/init.lua"
+include "data/world/immovables/trees/liana/init.lua"
+include "data/world/immovables/trees/maple/init.lua"
+include "data/world/immovables/trees/mushroom_dark/init.lua"
+include "data/world/immovables/trees/mushroom_green/init.lua"
+include "data/world/immovables/trees/mushroom_red/init.lua"
+include "data/world/immovables/trees/oak/init.lua"
+include "data/world/immovables/trees/palm_borassus/init.lua"
+include "data/world/immovables/trees/palm_coconut/init.lua"
+include "data/world/immovables/trees/palm_date/init.lua"
+include "data/world/immovables/trees/palm_oil/init.lua"
+include "data/world/immovables/trees/palm_roystonea/init.lua"
+include "data/world/immovables/trees/rowan/init.lua"
+include "data/world/immovables/trees/spruce/init.lua"
+include "data/world/immovables/trees/twine/init.lua"
+include "data/world/immovables/trees/umbrella_green/init.lua"
+include "data/world/immovables/trees/umbrella_red/init.lua"
 
 -- Adds 6 animations for each walking direction into 'table'. The pictures are
 -- searched for in 'dirname'. All files should look like this
@@ -193,19 +193,19 @@
    end
 end
 
-include "world/critters/badger/init.lua"
-include "world/critters/brownbear/init.lua"
-include "world/critters/bunny/init.lua"
-include "world/critters/chamois/init.lua"
-include "world/critters/deer/init.lua"
-include "world/critters/duck/init.lua"
-include "world/critters/elk/init.lua"
-include "world/critters/fox/init.lua"
-include "world/critters/lynx/init.lua"
-include "world/critters/marten/init.lua"
-include "world/critters/reindeer/init.lua"
-include "world/critters/sheep/init.lua"
-include "world/critters/stag/init.lua"
-include "world/critters/wildboar/init.lua"
-include "world/critters/wisent/init.lua"
-include "world/critters/wolf/init.lua"
+include "data/world/critters/badger/init.lua"
+include "data/world/critters/brownbear/init.lua"
+include "data/world/critters/bunny/init.lua"
+include "data/world/critters/chamois/init.lua"
+include "data/world/critters/deer/init.lua"
+include "data/world/critters/duck/init.lua"
+include "data/world/critters/elk/init.lua"
+include "data/world/critters/fox/init.lua"
+include "data/world/critters/lynx/init.lua"
+include "data/world/critters/marten/init.lua"
+include "data/world/critters/reindeer/init.lua"
+include "data/world/critters/sheep/init.lua"
+include "data/world/critters/stag/init.lua"
+include "data/world/critters/wildboar/init.lua"
+include "data/world/critters/wisent/init.lua"
+include "data/world/critters/wolf/init.lua"

=== modified file 'data/world/map_generation.lua'
--- world/map_generation.lua	2014-07-20 08:55:58 +0000
+++ data/world/map_generation.lua	2014-12-05 20:26:47 +0000
@@ -1,5 +1,5 @@
 -- This file is only used by the random map generator. It is not part of the
--- world definition (i.e. it is not sourced by world/init.lua) and is only
+-- world definition (i.e. it is not sourced by data/world/init.lua) and is only
 -- loaded when the random map generator is initialized in the Editor.
 
 

=== modified file 'data/world/terrains/init.lua'
--- world/terrains/init.lua	2014-11-26 08:07:13 +0000
+++ data/world/terrains/init.lua	2014-12-05 20:26:47 +0000
@@ -2,22 +2,22 @@
 world:new_editor_terrain_category{
    name = "green",
    descname = _ "Summer",
-   picture = "world/pics/editor_terrain_category_green.png",
+   picture = "data/world/pics/editor_terrain_category_green.png",
 }
 world:new_editor_terrain_category{
    name = "wasteland",
    descname = _ "Wasteland",
-   picture = "world/pics/editor_terrain_category_wasteland.png",
+   picture = "data/world/pics/editor_terrain_category_wasteland.png",
 }
 world:new_editor_terrain_category{
    name = "winter",
    descname = _ "Winter",
-   picture = "world/pics/editor_terrain_category_winter.png",
+   picture = "data/world/pics/editor_terrain_category_winter.png",
 }
 world:new_editor_terrain_category{
    name = "desert",
    descname = _ "Desert",
-   picture = "world/pics/editor_terrain_category_desert.png",
+   picture = "data/world/pics/editor_terrain_category_desert.png",
 }
 
 ------------------------

=== modified file 'doc/Doxyfile.in'
--- doc/Doxyfile.in	2014-07-01 18:59:56 +0000
+++ doc/Doxyfile.in	2014-12-05 20:26:47 +0000
@@ -692,18 +692,11 @@
 
 EXCLUDE_PATTERNS       = */.svn/* \
                          build \
-                         fonts \
-                         campaigns \
+                         data \
                          doc \
                          locale \
-                         maps \
-                         music \
-                         pics \
                          po \
                          utils \
-                         tribes \
-                         txts \
-                         worlds \
                          .git
 
 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names

=== modified file 'doc/sphinx/extract_rst.py'
--- doc/sphinx/extract_rst.py	2014-03-01 12:35:59 +0000
+++ doc/sphinx/extract_rst.py	2014-12-05 20:26:47 +0000
@@ -25,7 +25,7 @@
     Widelands. Return the base directory and the source/ directory."""
     curdir = p.abspath(p.dirname(__file__))
     source_dir = p.join(curdir, "source")
-    while not (p.exists(p.join(curdir, "tribes")) and p.exists(p.join(curdir, "world"))):
+    while not (p.exists(p.join(curdir, "data/tribes")) and p.exists(p.join(curdir, "data/world"))):
         curdir = p.abspath(p.join(curdir, p.pardir))
     return source_dir, curdir
 source_dir, base_dir = _find_basedir()
@@ -86,7 +86,7 @@
 
         replace_auxilary_toc(
             filter(lambda a: a, [
-                extract_rst_from_lua(i) for i in glob(p.join(base_dir, "scripting", "*.lua"))
+                extract_rst_from_lua(i) for i in glob(p.join(base_dir, "data/scripting", "*.lua"))
             ])
         )
 

=== modified file 'doc/sphinx/source/auxiliary.rst.in'
--- doc/sphinx/source/auxiliary.rst.in	2012-06-20 09:07:10 +0000
+++ doc/sphinx/source/auxiliary.rst.in	2014-12-05 20:26:47 +0000
@@ -1,7 +1,7 @@
 Auxiliary Scripts
 =================
 
-Some Lua scripts come bundled with Widelands (in the ``scripting/``
+Some Lua scripts come bundled with Widelands (in the ``data/scripting/``
 directory).  They can be imported in any script by the :func:`use` function
 using "aux" as namespace. Most of those scripts provide some convenience
 functionality around the core functions that are easier to use or offer more

=== modified file 'doc/sphinx/source/introduction.rst'
--- doc/sphinx/source/introduction.rst	2014-03-15 11:29:32 +0000
+++ doc/sphinx/source/introduction.rst	2014-12-05 20:26:47 +0000
@@ -12,21 +12,21 @@
 ^^^^^^^^^
 
 The most prominent usage of Lua is in scenarios: All scenario logic is
-scripted using Lua. How this works is described in the :ref:`scenario_tutorial`. 
+scripted using Lua. How this works is described in the :ref:`scenario_tutorial`.
 
 Initializations of Tribes in non-scenario games
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 At the beginning of non scenario games, the player has a choice to use
 different starting conditions. There is the very essential one that just sets
-a hq and some starting wares and there are more sophisticated ones. 
+a hq and some starting wares and there are more sophisticated ones.
 
-Adding new ones is simple. All you have to do is to create a new script in 
+Adding new ones is simple. All you have to do is to create a new script in
 the ``scripting`` directory of a tribe. The script should return a :class:`table`
 with two keys: ``name`` is the name for this start condition shown to the user
 and ``func`` is the function that will be called. This function takes on
 argument, a :class:`~wl.game.Player` for which to create the initial
-infrastructure. 
+infrastructure.
 
 A small example. Let's assume we want to add an initialization to the
 barbarians that gives the player 80 logs, but not at once but one by one
@@ -39,7 +39,7 @@
    use("aux", "coroutine")  -- For convenience function sleep()
 
    -- Set the textdomain, so that all strings given to the _() function are
-   -- properly translated. 
+   -- properly translated.
    set_textdomain("tribe_barbarians")
 
    -- Now for the array we must return
@@ -53,7 +53,7 @@
          local hq = player:place_building("headquarters", player.starting_field)
 
          -- Now add one log to the hq every 250 ms
-         for i=1,80 do 
+         for i=1,80 do
             hq:set_wares("log", hq:get_wares("log") + 1)
             sleep(250)
          end
@@ -68,10 +68,10 @@
 In non player scenarios, win conditions define when one single player has won
 a game. The definitions of win conditions is very similar to defining
 initializations: We have to create a Lua script in
-``/scripting/win_conditions`` which returns an array with ``name``,
+``/data/scripting/win_conditions`` which returns an array with ``name``,
 ``description`` and ``func``. Let's also make up a quick example: The first
 player to have 200 logs in his HQ wins the game. All others loose. Save the
-following file as ``/scripting/win_conditions/havest_logs.lua``.
+following file as ``/data/scripting/win_conditions/havest_logs.lua``.
 
 .. code-block:: lua
 
@@ -83,7 +83,7 @@
    return {
       name = _ "Harvest logs",
       description = _ "The first player with 200 logs wins!",
-      func = function() 
+      func = function()
          -- Find all valid players.
          local plrs = wl.Game().players
 
@@ -102,7 +102,7 @@
                end
             end
          end
-               
+
          -- Send the winner a hurray message, the losers a boo
          for idx,p in ipairs(losers) do
             p:send_message(_"You lost!", _"You lost this game!")
@@ -116,7 +116,7 @@
 
 Hooks are called by widelands when a certain event happened.  They are a
 rather recent implementation and therefore still limited. More hooks might be
-implemented in the future. 
+implemented in the future.
 
 You set a hook by setting a field in the global variable ``hooks`` which must
 be a dictionary. The only valid hook currently is the ``custom_statistic``
@@ -126,7 +126,7 @@
 something like this:
 
 .. code-block:: lua
-   
+
    hooks = {}
    hooks.custom_statistic = {
       name = _ "Unchanging statistic",
@@ -160,7 +160,7 @@
 debug purposes only -- in network games running Lua commands this way will
 desync and therefore crash the game and also replays where you changed the
 game state via the debug console will not work. It is very useful
-for debugging scenarios though. 
+for debugging scenarios though.
 
 Regression testing infrastructure
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

=== modified file 'doc/sphinx/source/tutorial.rst'
--- doc/sphinx/source/tutorial.rst	2014-07-14 10:45:44 +0000
+++ doc/sphinx/source/tutorial.rst	2014-12-05 20:26:47 +0000
@@ -273,7 +273,7 @@
 Preparing Strings for Translation
 ---------------------------------
 
-If you want your scenario to be translatable into different languages, it is important to keep in mind that languages differ widely in their grammar. This entails that word forms and word order will change, and some languages have more than one plural form. So, here are some pointers for good string design. For examples for the formatting discussed here, have a look at ``maps/MP Scenarios/Island Hopping.wmf/scripting/multiplayer_init.lua`` in the source code.
+If you want your scenario to be translatable into different languages, it is important to keep in mind that languages differ widely in their grammar. This entails that word forms and word order will change, and some languages have more than one plural form. So, here are some pointers for good string design. For examples for the formatting discussed here, have a look at ``data/maps/MP Scenarios/Island Hopping.wmf/scripting/multiplayer_init.lua`` in the source code.
 
 Marking a String for Translation
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -341,6 +341,6 @@
 
 If you have a really long string, e.g. a dialog stretching over multiple sentences, check if there is a logical place where you could split this into two separate strings for translators. We don't have a "break after x characters" rule for this; please use common sense here. It is easier for translators to translate smaller chunks, and if you should have to change the string later on, e.g. to fix a typo, you will break less translations. The strings will be put into the translation files in the same order as they appear in the source code, so the context will remain intact for the translators.
 
-Also, please hide all formatting control characers from our translators. This includes HTML tags as well as new lines in the code! For an example, have a look at ``campaigns/atl01.wmf/scripting/texts.lua``
+Also, please hide all formatting control characers from our translators. This includes HTML tags as well as new lines in the code! For an example, have a look at ``data/campaigns/atl01.wmf/scripting/texts.lua``
 
 .. vim:ft=rst:spelllang=en:spell

=== modified file 'doc/sphinx/source/wlrichtext.rst'
--- doc/sphinx/source/wlrichtext.rst	2012-12-16 19:08:53 +0000
+++ doc/sphinx/source/wlrichtext.rst	2014-12-05 20:26:47 +0000
@@ -4,16 +4,16 @@
 All texts that can be displayed to the user can be formatted to be layouted
 and nicely formatted. This allows for changing of font sizes, weights, colors
 and for the embedding of images. This documents how to format a string to be
-recognized as rich text and which attributes are understood. 
+recognized as rich text and which attributes are understood.
 
 The Widelands rich text language is inspired by HTML and therefore uses a
 syntax very similar to it. A rich text is started with ``<rt>`` and ended with
 ``</rt>``. A rich text can have an image associated with it, this image is
-then displayed next to the text. 
+then displayed next to the text.
 
 Inside the rich text, each paragraph is enclosed by ``<p>`` and ``</p>``. You
 give font attributes to this tag to change the appearance of the text
-displayed inside. 
+displayed inside.
 
 Reference
 ---------
@@ -21,9 +21,9 @@
 ``<rt>``
 ^^^^^^^^
 
-Starts or ends a rich text. Must be the first tag to appear in the string. 
+Starts or ends a rich text. Must be the first tag to appear in the string.
 A full example would be::
-   
+
    <rt image=map:khanktrukh.png><p line-spacing=3 font-size=12>Hello<br>World</p></rt>
 
 This would instruct widelands to use the image of Khankruth that comes with
@@ -49,7 +49,7 @@
 ^^^^^^^^
 
 A text paragraph inside a rich text. This gives control over which font is
-used for rendering and how it should be formatted. 
+used for rendering and how it should be formatted.
 
 Valid attributes for ``<p>`` are:
 
@@ -58,7 +58,7 @@
    mission texts.
 
 font-face
-   Name of the font to use. The valid fonts can be found in the ``fonts/``
+   Name of the font to use. The valid fonts can be found in the ``data/i18n/fonts/``
    directory inside the widelands directory. The default is ``DejaVuSans``.
 
 font-color
@@ -94,7 +94,7 @@
 
    wl.Game().players[1]:send_message(
       "Hi",
-      "<rt image=pics/wl-ico-128.png image-align=center></rt>" ..
+      "<rt image=logos/wl-ico-128.png image-align=center></rt>" ..
       "<rt text-align=center>" ..
       "<p font-weight=bold font-decoration=underline font-style=italic font-size=24>" ..
          "YOU so rock dude!" ..
@@ -102,13 +102,13 @@
       "<rt><p>No. I really mean this.<br><br>Seriously.</p></rt>",
       { popup = true }
    )
-   
+
 The title of the message mustn't be a rich text, the body (which is just one
 string, it has been separated for easier reading and concatenated Lua-style
 via the ``..`` operator) is one: the first rich text includes a centered image
 and no text. The second is the text ``YOU so rock dude!`` in italic, bold and
 underlined. Then a simple text follows in four lines -- two of them being
-empty. The message popups the message window when it is received. 
+empty. The message popups the message window when it is received.
 
 The complete message rendered looks like this on my system:
 

=== modified file 'src/ai/CMakeLists.txt'
--- src/ai/CMakeLists.txt	2014-07-16 08:23:42 +0000
+++ src/ai/CMakeLists.txt	2014-12-05 20:26:47 +0000
@@ -14,5 +14,6 @@
     base_log
     profile
     base_i18n
+    graphic_image_catalog
     logic
 )

=== modified file 'src/ai/computer_player.h'
--- src/ai/computer_player.h	2014-09-30 20:31:43 +0000
+++ src/ai/computer_player.h	2014-12-05 20:26:47 +0000
@@ -24,6 +24,7 @@
 #include <vector>
 
 #include "base/macros.h"
+#include "graphic/image_catalog.h"
 #include "logic/widelands.h"
 
 namespace Widelands {
@@ -52,6 +53,7 @@
 	 */
 	struct Implementation {
 		std::string name;
+		ImageCatalog::Key image_key;
 		virtual ~Implementation() {}
 		virtual ComputerPlayer * instantiate
 			(Widelands::Game &, Widelands::PlayerNumber) const = 0;

=== modified file 'src/editor/editorinteractive.cc'
--- src/editor/editorinteractive.cc	2014-12-03 08:14:35 +0000
+++ src/editor/editorinteractive.cc	2014-12-05 20:26:47 +0000
@@ -75,36 +75,38 @@
 	m_left_mouse_button_is_down(false),
 	m_history(m_undo, m_redo),
 
-#define INIT_BUTTON(picture, name, tooltip)                         \
-	TOOLBAR_BUTTON_COMMON_PARAMETERS(name),                                      \
-	g_gr->images().get("pics/" picture ".png"),                      \
-	tooltip                                                                      \
-
 	m_toggle_main_menu
-	(INIT_BUTTON
-	 ("menu_toggle_menu", "menu", _("Menu"))),
+	(TOOLBAR_BUTTON_COMMON_PARAMETERS("menu"),
+	 g_gr->cataloged_image(ImageCatalog::Key::kMenuOptions),
+	 _("Menu")),
 	m_toggle_tool_menu
-	(INIT_BUTTON
-	 ("editor_menu_toggle_tool_menu", "tools", _("Tools"))),
+	(TOOLBAR_BUTTON_COMMON_PARAMETERS("tools"),
+	 g_gr->cataloged_image(ImageCatalog::Key::kEditorMenuTools),
+	 _("Tools")),
 	m_toggle_toolsize_menu
-	(INIT_BUTTON
-	 ("editor_menu_set_toolsize_menu", "toolsize",
-	  _("Tool Size"))),
+	(TOOLBAR_BUTTON_COMMON_PARAMETERS("toolsize"),
+	 g_gr->cataloged_image(ImageCatalog::Key::kEditorMenuToolSize),
+	 _("Tool Size")),
 	m_toggle_minimap
-	(INIT_BUTTON
-	 ("menu_toggle_minimap", "minimap", _("Minimap"))),
+	(TOOLBAR_BUTTON_COMMON_PARAMETERS("minimap"),
+	 g_gr->cataloged_image(ImageCatalog::Key::kMenuMinimap),
+	 _("Minimap")),
 	m_toggle_buildhelp
-	(INIT_BUTTON
-	 ("menu_toggle_buildhelp", "buildhelp", _("Show Building Spaces (on/off)"))),
+	(TOOLBAR_BUTTON_COMMON_PARAMETERS("buildhelp"),
+	 g_gr->cataloged_image(ImageCatalog::Key::kMenuBuildhelp),
+	 _("Show Building Spaces (on/off)")),
 	m_toggle_player_menu
-	(INIT_BUTTON
-	 ("editor_menu_player_menu", "players", _("Players"))),
+	(TOOLBAR_BUTTON_COMMON_PARAMETERS("players"),
+	 g_gr->cataloged_image(ImageCatalog::Key::kEditorMenuPlayer),
+	 _("Players")),
 	m_undo
-	(INIT_BUTTON
-	 ("editor_undo", "undo", _("Undo"))),
+	(TOOLBAR_BUTTON_COMMON_PARAMETERS("undo"),
+	 g_gr->cataloged_image(ImageCatalog::Key::kEditorUndo),
+	 _("Undo")),
 	m_redo
-	(INIT_BUTTON
-	 ("editor_redo", "redo", _("Redo")))
+	(TOOLBAR_BUTTON_COMMON_PARAMETERS("redo"),
+	 g_gr->cataloged_image(ImageCatalog::Key::kEditorRedo),
+	 _("Redo"))
 {
 	m_toggle_main_menu.sigclicked.connect(boost::bind(&EditorInteractive::toggle_mainmenu, this));
 	m_toggle_tool_menu.sigclicked.connect(boost::bind(&EditorInteractive::tool_menu_btn, this));
@@ -145,15 +147,15 @@
 
 	//  Starting locations
 	Widelands::PlayerNumber const nr_players = map.get_nrplayers();
-	assert(nr_players <= 99); //  2 decimal digits
-	char fname[] = "pics/editor_player_00_starting_pos.png";
+	assert(nr_players <= MAX_PLAYERS);
 	iterate_player_numbers(p, nr_players) {
-		if (fname[20] == '9') {fname[20] = '0'; ++fname[19];} else ++fname[20];
 		if (Widelands::Coords const sp = map.get_starting_pos(p)) {
-			const Image* pic = g_gr->images().get(fname);
-			assert(pic);
+			ImageCatalog::Key offset = ImageCatalog::Key::kPlayerStartingPosBig1;
+			const Image* player_image =
+					g_gr->cataloged_image(static_cast<ImageCatalog::Key>(p - 1 + static_cast<uint8_t>(offset)));
+
 			map.overlay_manager().register_overlay
-				(sp, pic, 8, Point(pic->width() / 2, STARTING_POS_HOTSPOT_Y));
+				(sp, player_image, 8, Point(player_image->width() / 2, STARTING_POS_HOTSPOT_Y));
 		}
 	}
 
@@ -190,7 +192,7 @@
 			 filename.c_str());
 	ml->preload_map(true);
 
-	UI::ProgressWindow loader_ui("pics/editor.jpg");
+	UI::ProgressWindow loader_ui(ImageCatalog::Key::kLoadscreenEditor);
 	std::vector<std::string> tipstext;
 	tipstext.push_back("editor");
 
@@ -508,10 +510,12 @@
 	tools.current_pointer = &primary;
 	tools.use_tool        = which;
 
-	if (char const * const sel_pic = primary.get_sel(which))
-		set_sel_picture(sel_pic);
-	else
+	ImageCatalog::Key sel_key = primary.get_sel(which);
+	if (g_gr->image_catalog().has_key(sel_key)) {
+		set_sel_picture(sel_key);
+	} else {
 		unset_sel_picture();
+	}
 	set_sel_triangles(primary.operates_on_triangles());
 }
 
@@ -574,7 +578,7 @@
 	EditorInteractive eia(editor);
 	editor.set_ibase(&eia); // TODO(unknown): get rid of this
 	{
-		UI::ProgressWindow loader_ui("pics/editor.jpg");
+		UI::ProgressWindow loader_ui(ImageCatalog::Key::kLoadscreenEditor);
 		std::vector<std::string> tipstext;
 		tipstext.push_back("editor");
 		GameTips editortips(loader_ui, tipstext);

=== modified file 'src/editor/map_generator.cc'
--- src/editor/map_generator.cc	2014-12-01 21:47:22 +0000
+++ src/editor/map_generator.cc	2014-12-05 20:26:47 +0000
@@ -45,7 +45,7 @@
 	map_info_(mapInfo),
 	egbase_(egbase)
 {
-	std::unique_ptr<LuaTable> map_gen_config(egbase.lua().run_script("world/map_generation.lua"));
+	std::unique_ptr<LuaTable> map_gen_config(egbase.lua().run_script("data/world/map_generation.lua"));
 	map_gen_config->do_not_warn_about_unaccessed_keys();
 
 	map_gen_info_.reset(

=== modified file 'src/editor/tools/editor_decrease_height_tool.h'
--- src/editor/tools/editor_decrease_height_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_decrease_height_tool.h	2014-12-05 20:26:47 +0000
@@ -40,8 +40,8 @@
 
 	EditorActionArgs format_args_impl(EditorInteractive & parent) override;
 
-	char const * get_sel_impl() const override {
-		return "pics/fsel_editor_decrease_height.png";
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kEditorToolHeightDecrease;
 	}
 
 	int32_t get_change_by() const {return m_change_by;}

=== modified file 'src/editor/tools/editor_decrease_resources_tool.h'
--- src/editor/tools/editor_decrease_resources_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_decrease_resources_tool.h	2014-12-05 20:26:47 +0000
@@ -42,8 +42,8 @@
 
 	EditorActionArgs format_args_impl(EditorInteractive & parent) override;
 
-	char const * get_sel_impl() const override {
-		return "pics/fsel_editor_decrease_resources.png";
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kEditorToolResourcesDecrease;
 	}
 
 	int32_t get_change_by() const        {return m_change_by;}

=== modified file 'src/editor/tools/editor_delete_bob_tool.h'
--- src/editor/tools/editor_delete_bob_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_delete_bob_tool.h	2014-12-05 20:26:47 +0000
@@ -40,8 +40,8 @@
 
 	EditorActionArgs format_args_impl(EditorInteractive & parent) override;
 
-	char const * get_sel_impl() const override {
-		return "pics/fsel_editor_delete.png";
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kEditorToolDelete;
 	}
 };
 

=== modified file 'src/editor/tools/editor_delete_immovable_tool.h'
--- src/editor/tools/editor_delete_immovable_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_delete_immovable_tool.h	2014-12-05 20:26:47 +0000
@@ -40,8 +40,8 @@
 
 	EditorActionArgs format_args_impl(EditorInteractive & parent) override;
 
-	char const * get_sel_impl() const override {
-		return "pics/fsel_editor_delete.png";
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kEditorToolDelete;
 	}
 };
 

=== modified file 'src/editor/tools/editor_draw_tool.h'
--- src/editor/tools/editor_draw_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_draw_tool.h	2014-12-05 20:26:47 +0000
@@ -42,8 +42,8 @@
 
 	EditorActionArgs format_args_impl(EditorInteractive & parent) override;
 
-	char const * get_sel_impl() const override {
-		return "EDITOR_DRAW_TOOL";
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kUnknownImage;
 	}
 
 	void add_action(EditorToolAction ac, EditorActionArgs & args);

=== modified file 'src/editor/tools/editor_history.cc'
--- src/editor/tools/editor_history.cc	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_history.cc	2014-12-05 20:26:47 +0000
@@ -106,7 +106,7 @@
 	if (draw && tool.is_unduable()) {
 		if
 			(undo_stack.empty() ||
-			 undo_stack.front().tool.get_sel_impl() != std::string(m_draw_tool.get_sel_impl()))
+			 undo_stack.front().tool.get_sel_impl() != m_draw_tool.get_sel_impl())
 		{
 			EditorToolAction da
 				(m_draw_tool, EditorTool::First,

=== modified file 'src/editor/tools/editor_increase_height_tool.h'
--- src/editor/tools/editor_increase_height_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_increase_height_tool.h	2014-12-05 20:26:47 +0000
@@ -48,8 +48,8 @@
 
 	EditorActionArgs format_args_impl(EditorInteractive & parent) override;
 
-	char const * get_sel_impl() const override {
-		return "pics/fsel_editor_increase_height.png";
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kEditorToolHeightIncrease;
 	}
 
 	int32_t get_change_by() const {return m_change_by;}

=== modified file 'src/editor/tools/editor_increase_resources_tool.h'
--- src/editor/tools/editor_increase_resources_tool.h	2014-09-20 09:37:47 +0000
+++ src/editor/tools/editor_increase_resources_tool.h	2014-12-05 20:26:47 +0000
@@ -49,8 +49,8 @@
 
 	EditorActionArgs format_args_impl(EditorInteractive & parent) override;
 
-	char const * get_sel_impl() const override {
-		return "pics/fsel_editor_increase_resources.png";
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kEditorToolResourcesIncrease;
 	}
 
 	int32_t get_change_by() const        {return m_change_by;}

=== modified file 'src/editor/tools/editor_info_tool.h'
--- src/editor/tools/editor_info_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_info_tool.h	2014-12-05 20:26:47 +0000
@@ -33,8 +33,8 @@
 	                          EditorInteractive& parent,
 	                          EditorActionArgs& args) override;
 
-	char const* get_sel_impl() const override {
-		return "pics/fsel_editor_info.png";
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kEditorToolInfo;
 	}
 };
 

=== modified file 'src/editor/tools/editor_make_infrastructure_tool.h'
--- src/editor/tools/editor_make_infrastructure_tool.h	2014-09-20 09:37:47 +0000
+++ src/editor/tools/editor_make_infrastructure_tool.h	2014-12-05 20:26:47 +0000
@@ -45,8 +45,10 @@
 	                          EditorInteractive& parent,
 	                          EditorActionArgs& args) override;
 
-	const char * get_sel_impl() const override
-		{return "pics/fsel.png";} //  Standard sel icon, most complex tool of all
+	ImageCatalog::Key get_sel_impl() const override {
+		 //  Standard sel icon, most complex tool of all
+		return ImageCatalog::Key::kSelect;
+	}
 
 private:
 	Widelands::PlayerNumber m_player;

=== modified file 'src/editor/tools/editor_noise_height_tool.h'
--- src/editor/tools/editor_noise_height_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_noise_height_tool.h	2014-12-05 20:26:47 +0000
@@ -48,8 +48,8 @@
 
 	EditorActionArgs format_args_impl(EditorInteractive & parent) override;
 
-	char const * get_sel_impl() const override {
-		return "pics/fsel_editor_noise_height.png";
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kEditorToolNoiseHeight;
 	}
 
 	Widelands::HeightInterval get_interval() const {

=== modified file 'src/editor/tools/editor_place_bob_tool.h'
--- src/editor/tools/editor_place_bob_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_place_bob_tool.h	2014-12-05 20:26:47 +0000
@@ -43,7 +43,9 @@
 
 	EditorActionArgs format_args_impl(EditorInteractive & parent) override;
 
-	char const * get_sel_impl() const override {return "pics/fsel_editor_place_bob.png";}
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kEditorToolBob;
+	}
 };
 
 #endif  // end of include guard: WL_EDITOR_TOOLS_EDITOR_PLACE_BOB_TOOL_H

=== modified file 'src/editor/tools/editor_place_immovable_tool.h'
--- src/editor/tools/editor_place_immovable_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_place_immovable_tool.h	2014-12-05 20:26:47 +0000
@@ -45,8 +45,8 @@
 
 	EditorActionArgs format_args_impl(EditorInteractive & parent) override;
 
-	char const * get_sel_impl() const override {
-		return "pics/fsel_editor_place_immovable.png";
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kEditorToolImmovable;
 	}
 };
 

=== modified file 'src/editor/tools/editor_set_height_tool.h'
--- src/editor/tools/editor_set_height_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_set_height_tool.h	2014-12-05 20:26:47 +0000
@@ -44,8 +44,8 @@
 
 	EditorActionArgs format_args_impl(EditorInteractive & parent) override;
 
-	char const * get_sel_impl() const override {
-		return "pics/fsel_editor_set_height.png";
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kEditorToolHeight;
 	}
 
 	Widelands::HeightInterval get_interval() const {

=== modified file 'src/editor/tools/editor_set_origin_tool.h'
--- src/editor/tools/editor_set_origin_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_set_origin_tool.h	2014-12-05 20:26:47 +0000
@@ -41,7 +41,9 @@
 
 	EditorActionArgs format_args_impl(EditorInteractive & parent) override;
 
-	char const * get_sel_impl() const override {return "pics/fsel.png";}
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kSelect;
+	}
 
 	bool has_size_one() const override {return true;}
 };

=== modified file 'src/editor/tools/editor_set_port_space_tool.h'
--- src/editor/tools/editor_set_port_space_tool.h	2014-09-20 09:37:47 +0000
+++ src/editor/tools/editor_set_port_space_tool.h	2014-12-05 20:26:47 +0000
@@ -23,9 +23,6 @@
 #include "editor/tools/editor_tool.h"
 #include "logic/widelands.h"
 
-#define FSEL_ESPS_FILENAME "pics/fsel_editor_set_port_space.png"
-#define FSEL_EUPS_FILENAME "pics/fsel_editor_unset_port_space.png"
-
 /// Unsets a buildspace for ports.
 class EditorUnsetPortSpaceTool : public EditorTool {
 public:
@@ -43,7 +40,9 @@
 	                         EditorInteractive& parent,
 	                         EditorActionArgs& args) override;
 
-	char const * get_sel_impl() const override {return FSEL_EUPS_FILENAME;}
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kEditorToolPortSpaceSetSet;
+	}
 };
 
 
@@ -64,7 +63,9 @@
 	                         EditorInteractive& parent,
 	                         EditorActionArgs& args) override;
 
-	char const * get_sel_impl() const override {return FSEL_ESPS_FILENAME;}
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kEditorToolPortSpaceSet;
+	}
 };
 
 int32_t editor_Tool_set_port_space_callback

=== modified file 'src/editor/tools/editor_set_resources_tool.h'
--- src/editor/tools/editor_set_resources_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_set_resources_tool.h	2014-12-05 20:26:47 +0000
@@ -42,8 +42,8 @@
 
 	EditorActionArgs format_args_impl(EditorInteractive & parent) override;
 
-	char const * get_sel_impl() const override {
-		return "pics/fsel_editor_set_resources.png";
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kEditorToolResourcesSet;
 	}
 
 	uint8_t get_set_to() const       {return m_set_to;}

=== modified file 'src/editor/tools/editor_set_starting_pos_tool.cc'
--- src/editor/tools/editor_set_starting_pos_tool.cc	2014-09-20 09:37:47 +0000
+++ src/editor/tools/editor_set_starting_pos_tool.cc	2014-12-05 20:26:47 +0000
@@ -56,10 +56,10 @@
 }
 
 EditorSetStartingPosTool::EditorSetStartingPosTool()
-	: EditorTool(*this, *this, false), m_current_sel_pic(nullptr)
+	: EditorTool(*this, *this, false), m_current_sel_pic(ImageCatalog::Key::kUnknownImage)
 {
 	m_current_player = 0;
-	strcpy(fsel_picsname, FSEL_PIC_FILENAME);
+	fsel_picsname = ImageCatalog::Key::kPlayerStartingPosSmall1;
 }
 
 int32_t EditorSetStartingPosTool::handle_click_impl(Widelands::Map& map,
@@ -82,24 +82,23 @@
 
 		Widelands::Coords const old_sp = map.get_starting_pos(m_current_player);
 
-		char picname[] = "pics/editor_player_00_starting_pos.png";
-		picname[19] += m_current_player / 10;
-		picname[20] += m_current_player % 10;
-		const Image* pic = g_gr->images().get(picname);
+		ImageCatalog::Key offset = ImageCatalog::Key::kPlayerStartingPosBig1;
+		const Image* player_image =
+				g_gr->cataloged_image(static_cast<ImageCatalog::Key>(m_current_player - 1 +
+																						static_cast<uint8_t>(offset)));
 
 		//  check if field is valid
 		if (editor_tool_set_starting_pos_callback(map.get_fcoords(center.node), map)) {
 			OverlayManager & overlay_manager = map.overlay_manager();
 			//  remove old overlay if any
-			overlay_manager.remove_overlay(old_sp, pic);
+			overlay_manager.remove_overlay(old_sp, player_image);
 
 			//  add new overlay
 			overlay_manager.register_overlay
-			(center.node, pic, 8, Point(pic->width() / 2, STARTING_POS_HOTSPOT_Y));
+					(center.node, player_image, 8, Point(player_image->width() / 2, STARTING_POS_HOTSPOT_Y));
 
 			//  set new player pos
 			map.set_starting_pos(m_current_player, center.node);
-
 		}
 	}
 	return 1;
@@ -114,8 +113,8 @@
 
 void EditorSetStartingPosTool::set_current_player(int32_t const i) {
 	m_current_player = i;
+	ImageCatalog::Key offset = ImageCatalog::Key::kPlayerStartingPosSmall1;
+	fsel_picsname = static_cast<ImageCatalog::Key>(m_current_player - 1 + static_cast<uint8_t>(offset));
 
-	fsel_picsname[28] = '0' + m_current_player / 10;
-	fsel_picsname[29] = '0' + m_current_player % 10;
 	m_current_sel_pic = fsel_picsname;
 }

=== modified file 'src/editor/tools/editor_set_starting_pos_tool.h'
--- src/editor/tools/editor_set_starting_pos_tool.h	2014-09-20 09:37:47 +0000
+++ src/editor/tools/editor_set_starting_pos_tool.h	2014-12-05 20:26:47 +0000
@@ -28,8 +28,6 @@
 #define MIN_PLACE_AROUND_PLAYERS 24
 #define STARTING_POS_HOTSPOT_Y 55
 
-#define FSEL_PIC_FILENAME "pics/fsel_editor_set_player_00_pos.png"
-
 /// Sets the starting position of players.
 struct EditorSetStartingPosTool : public EditorTool {
 	EditorSetStartingPosTool();
@@ -39,7 +37,7 @@
 	                          Widelands::NodeAndTriangle<>,
 	                          EditorInteractive&,
 	                          EditorActionArgs&) override;
-	char const * get_sel_impl() const override
+	ImageCatalog::Key get_sel_impl() const override
 		{return m_current_sel_pic;}
 
 	Widelands::PlayerNumber get_current_player() const;
@@ -47,8 +45,8 @@
 	bool has_size_one() const override {return true;}
 
 private:
-	char fsel_picsname[sizeof(FSEL_PIC_FILENAME)];
-	char const * m_current_sel_pic;
+	ImageCatalog::Key fsel_picsname;
+	ImageCatalog::Key m_current_sel_pic;
 };
 
 int32_t editor_tool_set_starting_pos_callback

=== modified file 'src/editor/tools/editor_set_terrain_tool.h'
--- src/editor/tools/editor_set_terrain_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_set_terrain_tool.h	2014-12-05 20:26:47 +0000
@@ -40,7 +40,9 @@
 
 	EditorActionArgs format_args_impl(EditorInteractive & parent) override;
 
-	char const * get_sel_impl() const override {return "pics/fsel.png";}
+	ImageCatalog::Key get_sel_impl() const override {
+		return ImageCatalog::Key::kSelect;
+	}
 	bool operates_on_triangles() const override {return true;}
 };
 

=== modified file 'src/editor/tools/editor_tool.h'
--- src/editor/tools/editor_tool.h	2014-09-10 14:08:25 +0000
+++ src/editor/tools/editor_tool.h	2014-12-05 20:26:47 +0000
@@ -24,6 +24,9 @@
 
 #include "base/macros.h"
 #include "editor/tools/editor_action_args.h"
+#include "graphic/graphic.h"
+#include "graphic/image.h"
+#include "graphic/image_catalog.h"
 #include "logic/widelands_geometry.h"
 
 struct EditorInteractive;
@@ -66,7 +69,7 @@
 		    .handle_undo_impl(map, world, center, parent, args);
 	}
 
-	const char * get_sel(const ToolIndex i) {
+	ImageCatalog::Key get_sel(const ToolIndex i) {
 		return
 		    (i == First ? *this : i == Second ? m_second : m_third)
 		    .get_sel_impl();
@@ -95,7 +98,7 @@
 	                                 EditorActionArgs&) {
 		return 0;
 	}  // non unduable tools don't need to implement this.
-	virtual const char * get_sel_impl() const = 0;
+	virtual ImageCatalog::Key get_sel_impl() const = 0;
 	virtual bool operates_on_triangles() const {return false;}
 
 protected:

=== modified file 'src/editor/ui_menus/categorized_item_selection_menu.h'
--- src/editor/ui_menus/categorized_item_selection_menu.h	2014-12-03 19:11:31 +0000
+++ src/editor/ui_menus/categorized_item_selection_menu.h	2014-12-05 20:26:47 +0000
@@ -82,7 +82,7 @@
 	current_selection_names_(this, 0, 0, 0, 20, UI::Align_Center),
 	tool_(tool)
 {
-	UI::TabPanel* tab_panel = new UI::TabPanel(this, 0, 0, nullptr);
+	UI::TabPanel* tab_panel = new UI::TabPanel(this, 0, 0);
 	add(tab_panel, UI::Align_Center);
 
 	for (uint32_t category_index = 0; category_index < categories.get_nitems(); ++category_index) {

=== modified file 'src/editor/ui_menus/editor_main_menu.cc'
--- src/editor/ui_menus/editor_main_menu.cc	2014-11-30 18:49:38 +0000
+++ src/editor/ui_menus/editor_main_menu.cc	2014-12-05 20:26:47 +0000
@@ -52,37 +52,37 @@
 	m_button_new_map
 		(this, "new_map",
 		 hmargin, vmargin + 0 * (height + vspacing), width, height,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("New Map")),
 	m_button_new_random_map
 		(this, "new_random_map",
 		 hmargin, vmargin + 1 * (height + vspacing), width, height,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("New Random Map")),
 	m_button_load_map
 		(this, "load_map",
 		 hmargin, vmargin + 2 * (height + vspacing), width, height,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("Load Map")),
 	m_button_save_map
 		(this, "save_map",
 		 hmargin, vmargin + 3 * (height + vspacing), width, height,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("Save Map")),
 	m_button_map_options
 		(this, "map_options",
 		 hmargin, vmargin + 4 * (height + vspacing), width, height,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("Map Options")),
 	m_button_view_readme
 		(this, "readme",
 		 hmargin, vmargin + 5 * (height + vspacing), width, height,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("View Readme")),
 	m_button_exit_editor
 		(this, "exit",
 		 hmargin, vmargin + 6 * (height + vspacing), width, height,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("Exit Editor"))
 {
 	m_button_new_map.sigclicked.connect(boost::bind(&EditorMainMenu::new_map_btn, this));
@@ -92,7 +92,7 @@
 	m_button_map_options.sigclicked.connect(boost::bind(&EditorMainMenu::map_options_btn, this));
 
 	m_window_readme.open_window = [this] {
-		fileview_window(eia(), m_window_readme, "txts/editor_readme");
+		fileview_window(eia(), m_window_readme, "data/txts/editor_readme");
 	};
 	m_button_view_readme.sigclicked.connect(
 	   boost::bind(&UI::UniqueWindow::Registry::toggle, m_window_readme));

=== modified file 'src/editor/ui_menus/editor_main_menu_load_map.cc'
--- src/editor/ui_menus/editor_main_menu_load_map.cc	2014-11-30 18:49:38 +0000
+++ src/editor/ui_menus/editor_main_menu_load_map.cc	2014-12-05 20:26:47 +0000
@@ -113,7 +113,7 @@
 		(this, "ok",
 		 posx, posy,
 		 get_inner_w() / 4 - 1.5 * spacing, 20,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("OK"),
 		 std::string(),
 		 false);
@@ -123,12 +123,12 @@
 		(this, "cancel",
 		 posx + get_inner_w() / 4 - spacing / 2, posy,
 		 get_inner_w() / 4 - 1.5 * spacing, 20,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("Cancel"));
 	cancelbtn->sigclicked.connect(boost::bind(&MainMenuLoadMap::die, this));
 
-	m_basedir = "maps";
-	m_curdir  = "maps";
+	m_basedir = "data/maps";
+	m_curdir  = "data/maps";
 
 	fill_list();
 
@@ -214,7 +214,7 @@
 				/** TRANSLATORS: Parent directory */
 				((boost::format("\\<%s\\>") % _("parent")).str(),
 				 m_parentdir.c_str(),
-				 g_gr->images().get("pics/ls_dir.png"));
+				 g_gr->cataloged_image(ImageCatalog::Key::kFilesDirectory));
 	}
 
 	const FilenameSet::const_iterator mapfiles_end = m_mapfiles.end();
@@ -233,7 +233,7 @@
 		m_ls->add
 			(FileSystem::fs_filename(name),
 			 name,
-			 g_gr->images().get("pics/ls_dir.png"));
+			 g_gr->cataloged_image(ImageCatalog::Key::kFilesDirectory));
 	}
 
 	Widelands::Map map;
@@ -251,9 +251,9 @@
 				m_ls->add
 					(FileSystem::filename_without_ext(name),
 					 name,
-					 g_gr->images().get
+					 g_gr->cataloged_image
 						 (dynamic_cast<WidelandsMapLoader*>(map_loader.get())
-							? "pics/ls_wlmap.png" : "pics/ls_s2map.png"));
+							? ImageCatalog::Key::kFilesWLMap : ImageCatalog::Key::kFilesS2Map));
 			} catch (const WException &) {} //  we simply skip illegal entries
 		}
 	}

=== modified file 'src/editor/ui_menus/editor_main_menu_map_options.cc'
--- src/editor/ui_menus/editor_main_menu_map_options.cc	2014-11-30 18:49:38 +0000
+++ src/editor/ui_menus/editor_main_menu_map_options.cc	2014-12-05 20:26:47 +0000
@@ -63,7 +63,7 @@
 			(this,
 			 posx + ta->get_w() + spacing, posy,
 			 get_inner_w() - (posx + ta->get_w() + spacing) - spacing, 20,
-			 g_gr->images().get("pics/but1.png"));
+			 ImageCatalog::Key::kButton1);
 	m_name->changed.connect(boost::bind(&MainMenuMapOptions::changed, this, 0));
 	posy += height + spacing;
 	ta = new UI::Textarea(this, posx, posy - 2, _("Size:"));
@@ -81,7 +81,7 @@
 			(this,
 			 posx + ta->get_w() + spacing, posy,
 			 get_inner_w() - (posx + ta->get_w() + spacing) - spacing, 20,
-			 g_gr->images().get("pics/but1.png"));
+			 ImageCatalog::Key::kButton1);
 	m_author->changed.connect(boost::bind(&MainMenuMapOptions::changed, this, 1));
 	posy += height + spacing;
 	m_descr =
@@ -96,7 +96,7 @@
 		new UI::Button
 			(this, "set_origin",
 			 5, get_inner_h() - 25, get_inner_w() - 10, 20,
-			 g_gr->images().get("pics/but0.png"),
+			 ImageCatalog::Key::kButton0,
 			 _("Set origin"),
 			 _
 				("Set the position that will have the coordinates (0, 0). This will "

=== modified file 'src/editor/ui_menus/editor_main_menu_new_map.cc'
--- src/editor/ui_menus/editor_main_menu_new_map.cc	2014-11-30 18:49:38 +0000
+++ src/editor/ui_menus/editor_main_menu_new_map.cc	2014-12-05 20:26:47 +0000
@@ -67,15 +67,15 @@
 	UI::Button * widthupbtn = new UI::Button
 		(this, "width_up",
 		 get_inner_w() - spacing - 20, posy, 20, 20,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp));
 	widthupbtn->sigclicked.connect(boost::bind(&MainMenuNewMap::button_clicked, this, 0));
 
 	UI::Button * widthdownbtn = new UI::Button
 		(this, "width_down",
 		 posx, posy, 20, 20,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown));
 	widthdownbtn->sigclicked.connect(boost::bind(&MainMenuNewMap::button_clicked, this, 1));
 
 	posy += 20 + spacing + spacing;
@@ -87,15 +87,15 @@
 	UI::Button * heightupbtn = new UI::Button
 		(this, "height_up",
 		 get_inner_w() - spacing - 20, posy, 20, 20,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp));
 	heightupbtn->sigclicked.connect(boost::bind(&MainMenuNewMap::button_clicked, this, 2));
 
 	UI::Button * heightdownbtn = new UI::Button
 		(this, "height_down",
 		 posx, posy, 20, 20,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown));
 	heightdownbtn->sigclicked.connect(boost::bind(&MainMenuNewMap::button_clicked, this, 3));
 
 	posy += 20 + spacing + spacing;
@@ -105,7 +105,7 @@
 	UI::Button * createbtn = new UI::Button
 		(this, "create_map",
 		 posx, posy, width, height,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("Create Map"));
 	createbtn->sigclicked.connect(boost::bind(&MainMenuNewMap::clicked_create_map, this));
 }

=== modified file 'src/editor/ui_menus/editor_main_menu_random_map.cc'
--- src/editor/ui_menus/editor_main_menu_random_map.cc	2014-11-30 18:49:38 +0000
+++ src/editor/ui_menus/editor_main_menu_random_map.cc	2014-12-05 20:26:47 +0000
@@ -78,12 +78,7 @@
 	new UI::Textarea(this, posx, posy, _("Random Number:"));
 	posy += height + spacing;
 
-	m_nrEditbox =
-		new UI::EditBox
-			(this,
-			 posx, posy,
-			 width, height,
-			 g_gr->images().get("pics/but1.png"));
+	m_nrEditbox = new UI::EditBox(this, posx, posy, width, height, ImageCatalog::Key::kButton1);
 	m_nrEditbox->changed.connect
 		(boost::bind(&MainMenuNewRandomMap::nr_edit_box_changed, this));
 	RNG rng;
@@ -108,16 +103,16 @@
 	UI::Button * widthupbtn = new UI::Button
 		(this, "width_up",
 		 get_inner_w() - spacing - height, posy, height, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp));
 	widthupbtn->sigclicked.connect
 		(boost::bind(&MainMenuNewRandomMap::button_clicked, this, ButtonId::MAP_W_PLUS));
 
 	UI::Button * widthdownbtn = new UI::Button
 		(this, "width_down",
 		 posx, posy, height, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown));
 	widthdownbtn->sigclicked.connect
 		(boost::bind(&MainMenuNewRandomMap::button_clicked, this, ButtonId::MAP_W_MINUS));
 
@@ -136,16 +131,16 @@
 	UI::Button * heightupbtn = new UI::Button
 		(this, "height_up",
 		 get_inner_w() - spacing - height, posy, height, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp));
 	heightupbtn->sigclicked.connect
 		(boost::bind(&MainMenuNewRandomMap::button_clicked, this, ButtonId::MAP_H_PLUS));
 
 	UI::Button * heightdownbtn = new UI::Button
 		(this, "height_down",
 		 posx, posy, height, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown));
 	heightdownbtn->sigclicked.connect
 		(boost::bind(&MainMenuNewRandomMap::button_clicked, this, ButtonId::MAP_H_MINUS));
 
@@ -157,16 +152,16 @@
 	UI::Button * waterupbtn = new UI::Button
 		(this, "water_up",
 		 get_inner_w() - spacing - height, posy, height, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp));
 	waterupbtn->sigclicked.connect
 		(boost::bind(&MainMenuNewRandomMap::button_clicked, this, ButtonId::WATER_PLUS));
 
 	UI::Button * waterdownbtn = new UI::Button
 		(this, "water_down",
 		 posx, posy, height, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown));
 	waterdownbtn->sigclicked.connect
 		(boost::bind(&MainMenuNewRandomMap::button_clicked, this, ButtonId::WATER_MINUS));
 
@@ -182,16 +177,16 @@
 	UI::Button * landupbtn = new UI::Button
 		(this, "land_up",
 		 get_inner_w() - spacing - height, posy, height, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp));
 	landupbtn->sigclicked.connect
 		(boost::bind(&MainMenuNewRandomMap::button_clicked, this, ButtonId::LAND_PLUS));
 
 	UI::Button * landdownbtn = new UI::Button
 		(this, "land_down",
 		 posx, posy, height, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown));
 	landdownbtn->sigclicked.connect
 		(boost::bind(&MainMenuNewRandomMap::button_clicked, this, ButtonId::LAND_MINUS));
 
@@ -207,16 +202,16 @@
 	UI::Button * wastelandupbtn = new UI::Button
 		(this, "wasteland_up",
 		 get_inner_w() - spacing - height, posy, height, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp));
 	wastelandupbtn->sigclicked.connect
 		(boost::bind(&MainMenuNewRandomMap::button_clicked, this, ButtonId::WASTE_PLUS));
 
 	UI::Button * wastelanddownbtn = new UI::Button
 		(this, "wasteland_down",
 		 posx, posy, height, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown));
 	wastelanddownbtn->sigclicked.connect
 		(boost::bind(&MainMenuNewRandomMap::button_clicked, this, ButtonId::WASTE_MINUS));
 
@@ -262,7 +257,7 @@
 	m_res = new UI::Button
 		(this, "resources",
 		 posx, posy, width, height,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 m_res_amounts[m_res_amount].c_str());
 	m_res->sigclicked.connect(boost::bind(&MainMenuNewRandomMap::button_clicked, this, ButtonId::SWITCH_RES));
 
@@ -272,7 +267,7 @@
 	m_world = new UI::Button
 		(this, "world",
 		 posx, posy, width, height,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 m_world_descriptions[m_current_world].descrname);
 	m_world->sigclicked.connect
 		(boost::bind(&MainMenuNewRandomMap::button_clicked, this, ButtonId::SWITCH_WORLD));
@@ -284,12 +279,7 @@
 	new UI::Textarea(this, posx, posy, _("Map ID:"));
 	posy += height + spacing;
 
-	m_idEditbox =
-		new UI::EditBox
-			(this,
-			 posx, posy,
-			 width, height,
-			 g_gr->images().get("pics/but1.png"));
+	m_idEditbox = new UI::EditBox(this, posx, posy, width, height, ImageCatalog::Key::kButton1);
 	m_idEditbox->set_text("abcd-efgh-ijkl-mnop");
 	m_idEditbox->changed.connect
 		(boost::bind(&MainMenuNewRandomMap::id_edit_box_changed, this));
@@ -302,16 +292,16 @@
 	UI::Button * playerupbtn = new UI::Button
 		(this, "player_up",
 		 get_inner_w() - spacing - height, posy, height, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp));
 	playerupbtn->sigclicked.connect
 		(boost::bind(&MainMenuNewRandomMap::button_clicked, this, ButtonId::PLAYER_PLUS));
 
 	UI::Button * playerdownbtn = new UI::Button
 		(this, "player_down",
 		 posx, posy, height, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"));
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown));
 	playerdownbtn->sigclicked.connect
 		(boost::bind(&MainMenuNewRandomMap::button_clicked, this, ButtonId::PLAYER_MINUS));
 
@@ -328,7 +318,7 @@
 	m_goButton = new UI::Button
 		(this, "generate_map",
 		 posx, posy, width, height,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("Generate Map"));
 	m_goButton->sigclicked.connect(boost::bind(&MainMenuNewRandomMap::clicked_create_map, this));
 	posy += height + spacing;

=== modified file 'src/editor/ui_menus/editor_main_menu_save_map.cc'
--- src/editor/ui_menus/editor_main_menu_save_map.cc	2014-11-30 18:49:38 +0000
+++ src/editor/ui_menus/editor_main_menu_save_map.cc	2014-12-05 20:26:47 +0000
@@ -73,7 +73,7 @@
 			(this,
 			 posx, posy + get_inner_h() - spacing - offsy - 60 + 3,
 			 get_inner_w() / 2 - spacing, 20,
-			 g_gr->images().get("pics/but1.png"), UI::Align::Align_Left);
+			 ImageCatalog::Key::kButton1, UI::Align::Align_Left);
 	m_editbox->set_text(parent.egbase().map().get_name());
 	m_editbox->changed.connect(boost::bind(&MainMenuSaveMap::edit_box_changed, this));
 
@@ -123,7 +123,7 @@
 		(this, "ok",
 		 posx, posy,
 		 get_inner_w() / 4 - 1.5 * spacing, 20,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("OK"));
 	m_ok_btn->sigclicked.connect(boost::bind(&MainMenuSaveMap::clicked_ok, boost::ref(*this)));
 
@@ -131,21 +131,21 @@
 		(this, "cancel",
 		 posx + get_inner_w() / 4 - spacing / 2, posy,
 		 get_inner_w() / 4 - 1.5 * spacing, 20,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("Cancel"));
 	cancelbtn->sigclicked.connect(boost::bind(&MainMenuSaveMap::die, boost::ref(*this)));
 
 	UI::Button * make_directorybtn = new UI::Button
 		(this, "make_directory",
 		 spacing, posy, 185, 20,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("Make Directory"));
 	make_directorybtn->sigclicked.connect
 		(boost::bind(&MainMenuSaveMap::clicked_make_directory, boost::ref(*this)));
 
 
-	m_basedir = "maps";
-	m_curdir  = "maps";
+	m_basedir = "data/maps";
+	m_curdir  = "data/maps";
 
 	fill_list();
 	edit_box_changed();
@@ -292,7 +292,7 @@
 				/** TRANSLATORS: Parent directory */
 				((boost::format("\\<%s\\>") % _("parent")).str(),
 				 m_parentdir.c_str(),
-				 g_gr->images().get("pics/ls_dir.png"));
+				 g_gr->cataloged_image(ImageCatalog::Key::kFilesDirectory));
 	}
 
 	const FilenameSet::const_iterator mapfiles_end = m_mapfiles.end();
@@ -311,7 +311,7 @@
 		m_ls->add
 			(FileSystem::fs_filename(name),
 			 name,
-			 g_gr->images().get("pics/ls_dir.png"));
+			 g_gr->cataloged_image(ImageCatalog::Key::kFilesDirectory));
 	}
 
 	Widelands::Map map;
@@ -331,7 +331,7 @@
 				m_ls->add
 					(FileSystem::filename_without_ext(name),
 					 name,
-					 g_gr->images().get("pics/ls_wlmap.png"));
+					 g_gr->cataloged_image(ImageCatalog::Key::kFilesWLMap));
 			} catch (const WException &) {} //  we simply skip illegal entries
 		}
 	}

=== modified file 'src/editor/ui_menus/editor_main_menu_save_map_make_directory.cc'
--- src/editor/ui_menus/editor_main_menu_save_map_make_directory.cc	2014-09-19 09:07:14 +0000
+++ src/editor/ui_menus/editor_main_menu_save_map_make_directory.cc	2014-12-05 20:26:47 +0000
@@ -41,7 +41,7 @@
 	m_edit =
 		new UI::EditBox
 			(this, spacing, posy, get_inner_w() - 2 * spacing, 20,
-			 g_gr->images().get("pics/but1.png"));
+			 ImageCatalog::Key::kButton1);
 	m_edit->set_text(dirname);
 	m_dirname = dirname;
 	m_edit->changed.connect(boost::bind(&MainMenuSaveMapMakeDirectory::edit_changed, this));
@@ -52,7 +52,7 @@
 		UI::Button
 		(this, "ok",
 		 get_inner_w() / 2 - spacing - 80, posy, 80, 20,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("OK"),
 		 std::string(),
 		 m_dirname.size());
@@ -62,7 +62,7 @@
 	UI::Button * cancelbtn = new UI::Button
 		(this, "cancel",
 		 get_inner_w() / 2 + spacing, posy, 80, 20,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("Cancel"));
 	cancelbtn->sigclicked.connect
 		(boost::bind(&MainMenuSaveMapMakeDirectory::end_modal, boost::ref(*this), 0));

=== modified file 'src/editor/ui_menus/editor_player_menu.cc'
--- src/editor/ui_menus/editor_player_menu.cc	2014-11-30 18:49:38 +0000
+++ src/editor/ui_menus/editor_player_menu.cc	2014-12-05 20:26:47 +0000
@@ -50,15 +50,15 @@
 	m_add_player
 		(this, "add_player",
 		 get_inner_w() - 5 - 20, 5, 20, 20,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp),
 		 _("Add player"),
 		 parent.egbase().map().get_nrplayers() < MAX_PLAYERS),
 	m_remove_last_player
 		(this, "remove_last_player",
 		 5, 5, 20, 20,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown),
 		 _("Remove last player"),
 		 1 < parent.egbase().map().get_nrplayers())
 {
@@ -144,7 +144,7 @@
 			m_plr_names[p - 1] =
 				new UI::EditBox
 					(this, posx, posy, 140, size,
-					 g_gr->images().get("pics/but0.png"));
+					 ImageCatalog::Key::kButton0);
 			m_plr_names[p - 1]->changed.connect
 				(boost::bind(&EditorPlayerMenu::name_changed, this, p - 1));
 			posx += 140 + spacing;
@@ -156,7 +156,7 @@
 				new UI::Button
 					(this, "tribe",
 					 posx, posy, 140, size,
-					 g_gr->images().get("pics/but0.png"),
+					 ImageCatalog::Key::kButton0,
 					 "");
 			m_plr_set_tribes_buts[p - 1]->sigclicked.connect
 				(boost::bind(&EditorPlayerMenu::player_tribe_clicked, boost::ref(*this), p - 1));
@@ -180,16 +180,17 @@
 				new UI::Button
 					(this, "starting_pos",
 					 posx, posy, size, size,
-					 g_gr->images().get("pics/but0.png"),
+					 ImageCatalog::Key::kButton0,
 					 nullptr,
 					 "");
 			m_plr_set_pos_buts[p - 1]->sigclicked.connect
 				(boost::bind(&EditorPlayerMenu::set_starting_pos_clicked, boost::ref(*this), p));
 		}
-		char text[] = "pics/fsel_editor_set_player_00_pos.png";
-		text[28] += p / 10;
-		text[29] += p % 10;
-		m_plr_set_pos_buts[p - 1]->set_pic(g_gr->images().get(text));
+		ImageCatalog::Key offset = ImageCatalog::Key::kPlayerStartingPosSmall1;
+		const Image* player_image =
+				g_gr->cataloged_image(static_cast<ImageCatalog::Key>(p - 1 + static_cast<uint8_t>(offset)));
+
+		m_plr_set_pos_buts[p - 1]->set_image(player_image);
 		posy += size + spacing;
 	}
 	set_inner_size(get_inner_w(), posy + spacing);
@@ -227,16 +228,18 @@
 	if (!eia().is_player_tribe_referenced(old_nr_players)) {
 		if (const Widelands::Coords sp = map.get_starting_pos(old_nr_players)) {
 			//  Remove starting position marker.
-			char picsname[] = "pics/editor_player_00_starting_pos.png";
-			picsname[19] += old_nr_players / 10;
-			picsname[20] += old_nr_players % 10;
-			map.overlay_manager().remove_overlay
-				(sp, g_gr->images().get(picsname));
+			ImageCatalog::Key offset = ImageCatalog::Key::kPlayerStartingPosBig1;
+			const Image* player_image =
+					g_gr->cataloged_image(static_cast<ImageCatalog::Key>(old_nr_players - 1 +
+																							static_cast<uint8_t>(offset)));
+			map.overlay_manager().remove_overlay(sp, player_image);
 		}
 	}
 	map.set_nrplayers(nr_players);
 	m_remove_last_player.set_enabled(1 < nr_players);
 
+	// TODO(GunChleoc): Player selection tool isn't updated, it has the wrong color.
+
 	update();
 	// TODO(SirVer): Take steps when the player is referenced someplace. Not
 	// TODO(SirVer): currently possible in the editor though.
@@ -424,12 +427,10 @@
 
 		// Remove the player overlay from this starting pos.
 		// A HQ is overlay enough
-		std::string picsname = "pics/editor_player_";
-		picsname += static_cast<char>((n / 10) + 0x30);
-		picsname += static_cast<char>((n % 10) + 0x30);
-		picsname += "_starting_pos.png";
-		overlay_manager.remove_overlay
-			(start_pos, g_gr->images().get(picsname));
+		ImageCatalog::Key offset = ImageCatalog::Key::kPlayerStartingPosBig1;
+		const Image* player_image =
+				g_gr->cataloged_image(static_cast<ImageCatalog::Key>(n - 1 + static_cast<uint8_t>(offset)));
+		overlay_manager.remove_overlay(start_pos, player_image);
 	}
 
 	parent.select_tool(parent.tools.make_infrastructure, EditorTool::First);

=== modified file 'src/editor/ui_menus/editor_player_menu_allowed_buildings_menu.cc'
--- src/editor/ui_menus/editor_player_menu_allowed_buildings_menu.cc	2014-10-27 10:31:04 +0000
+++ src/editor/ui_menus/editor_player_menu_allowed_buildings_menu.cc	2014-12-05 20:26:47 +0000
@@ -80,7 +80,7 @@
 		 m_allowed.get_y()
 		 + (list_height - middle_button_height * 2 - vspacing) / 2,
 		 middle_button_width, middle_button_height,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 ("->"),
 		 _("Forbid"),
 		 false),
@@ -89,7 +89,7 @@
 		 m_forbid_button.get_x(),
 		 m_forbid_button.get_y() + middle_button_height + vspacing,
 		 middle_button_width, middle_button_height,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 ("<-"),
 		 _("Allow"),
 		 false)

=== modified file 'src/editor/ui_menus/editor_tool_change_height_options_menu.cc'
--- src/editor/ui_menus/editor_tool_change_height_options_menu.cc	2014-09-18 18:52:34 +0000
+++ src/editor/ui_menus/editor_tool_change_height_options_menu.cc	2014-12-05 20:26:47 +0000
@@ -49,8 +49,8 @@
 		 get_inner_w() - hmargin() - width,
 		 m_change_by_label.get_y() + m_change_by_label.get_h() + spacing(),
 		 width, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp),
 		 std::string(),
 		 increase_tool.get_change_by() < MAX_FIELD_HEIGHT_DIFF),
 	m_change_by_decrease
@@ -58,8 +58,8 @@
 		 hmargin(),
 		 m_change_by_increase.get_y(),
 		 width, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown),
 		 std::string(),
 		 1 < increase_tool.get_change_by()),
 	m_change_by_value
@@ -85,8 +85,8 @@
 		 m_change_by_increase.get_x(),
 		 m_set_to_label.get_y() + m_set_to_label.get_h() + vspacing(),
 		 width, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp),
 		 std::string(),
 		 increase_tool.set_tool().get_interval().min < MAX_FIELD_HEIGHT),
 	m_set_to_decrease
@@ -94,8 +94,8 @@
 		 hmargin(),
 		 m_set_to_increase.get_y(),
 		 width, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown),
 		 std::string(),
 		 0 < increase_tool.set_tool().get_interval().min),
 	m_set_to_value

=== modified file 'src/editor/ui_menus/editor_tool_change_resources_options_menu.cc'
--- src/editor/ui_menus/editor_tool_change_resources_options_menu.cc	2014-11-30 18:49:38 +0000
+++ src/editor/ui_menus/editor_tool_change_resources_options_menu.cc	2014-12-05 20:26:47 +0000
@@ -59,15 +59,15 @@
 		 get_inner_w() - hmargin() - BUTTON_WIDTH,
 		 m_change_by_label.get_y() + m_change_by_label.get_h() + spacing(),
 		 BUTTON_WIDTH, BUTTON_HEIGHT,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_up.png")),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp)),
 	m_change_by_decrease
 		(this, "decr_change_by",
 		 hmargin(),
 		 m_change_by_increase.get_y(),
 		 BUTTON_WIDTH, BUTTON_HEIGHT,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_down.png")),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown)),
 	m_change_by_value
 		(this,
 		 m_change_by_increase.get_x() + m_change_by_increase.get_w() +
@@ -90,14 +90,14 @@
 		 m_change_by_increase.get_x(),
 		 m_set_to_label.get_y() + m_set_to_label.get_h() + vspacing(),
 		 BUTTON_WIDTH, BUTTON_HEIGHT,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_up.png")),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp)),
 	m_set_to_decrease
 		(this, "decr_set_to",
 		 hmargin(),
 		 m_set_to_increase.get_y(), BUTTON_WIDTH, BUTTON_HEIGHT,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_down.png")),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown)),
 	m_set_to_value
 		(this,
 		 m_change_by_value.get_x(), m_set_to_increase.get_y(),

=== modified file 'src/editor/ui_menus/editor_tool_menu.cc'
--- src/editor/ui_menus/editor_tool_menu.cc	2014-11-30 18:49:38 +0000
+++ src/editor/ui_menus/editor_tool_menu.cc	2014-12-05 20:26:47 +0000
@@ -58,17 +58,17 @@
    m_radioselect.add_button                                                   \
       (this,                                                                  \
        pos,                                                                   \
-       g_gr->images().get("pics/editor_menu_tool_" pic ".png"),       \
+		 pic,                                                                   \
        tooltip);                                                              \
    pos.x += width + spacing;                                                  \
 
-	ADD_BUTTON("change_height",    _("Change height"));
-	ADD_BUTTON("noise_height",     _("Noise height"));
-	ADD_BUTTON("set_terrain",      _("Terrain"));
-	ADD_BUTTON("place_immovable",  _("Immovables"));
-	ADD_BUTTON("place_bob",        _("Animals"));
-	ADD_BUTTON("change_resources", _("Resources"));
-	ADD_BUTTON("set_port_space",   _("Set port space"));
+	ADD_BUTTON(g_gr->cataloged_image(ImageCatalog::Key::kEditorMenuToolHeight), _("Change height"));
+	ADD_BUTTON(g_gr->cataloged_image(ImageCatalog::Key::kEditorMenuToolNoiseHeight), _("Noise height"));
+	ADD_BUTTON(g_gr->cataloged_image(ImageCatalog::Key::kEditorMenuToolTerrain), _("Terrain"));
+	ADD_BUTTON(g_gr->cataloged_image(ImageCatalog::Key::kEditorMenuToolImmovable), _("Immovables"));
+	ADD_BUTTON(g_gr->cataloged_image(ImageCatalog::Key::kEditorMenuToolBob), _("Animals"));
+	ADD_BUTTON(g_gr->cataloged_image(ImageCatalog::Key::kEditorMenuToolResources), _("Resources"));
+	ADD_BUTTON(g_gr->cataloged_image(ImageCatalog::Key::kEditorMenuToolPortSpace), _("Set port space"));
 
 	set_inner_size
 		(offs.x + (width + spacing) * num_tools, offs.y + (height + spacing));

=== modified file 'src/editor/ui_menus/editor_tool_noise_height_options_menu.cc'
--- src/editor/ui_menus/editor_tool_noise_height_options_menu.cc	2014-09-18 18:52:34 +0000
+++ src/editor/ui_menus/editor_tool_noise_height_options_menu.cc	2014-12-05 20:26:47 +0000
@@ -61,8 +61,8 @@
 		 get_inner_w() - 2 * width - hspacing(),
 		 m_lower_label.get_y(),
 		 width, height,
-		 g_gr->images().get("pics/but0.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"),
+		 ImageCatalog::Key::kButton0,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown),
 		 std::string(),
 		 0 < noise_tool.get_interval().min),
 	m_lower_increase
@@ -70,8 +70,8 @@
 		 get_inner_w() - width - hspacing(),
 		 m_lower_label.get_y(),
 		 width, height,
-		 g_gr->images().get("pics/but0.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"),
+		 ImageCatalog::Key::kButton0,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp),
 		 std::string(),
 		 noise_tool.get_interval().min < MAX_FIELD_HEIGHT),
 	m_upper_decrease
@@ -79,8 +79,8 @@
 		 get_inner_w() - 2 * width - hspacing(),
 		 m_upper_label.get_y(),
 		 width, height,
-		 g_gr->images().get("pics/but0.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"),
+		 ImageCatalog::Key::kButton0,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown),
 		 std::string(),
 		 0 < noise_tool.get_interval().max),
 	m_upper_increase
@@ -88,8 +88,8 @@
 		 get_inner_w() - width - hspacing(),
 		 m_upper_label.get_y(),
 		 width, height,
-		 g_gr->images().get("pics/but0.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"),
+		 ImageCatalog::Key::kButton0,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp),
 		 std::string(),
 		 noise_tool.get_interval().max < MAX_FIELD_HEIGHT),
 	m_set_label
@@ -103,8 +103,8 @@
 		 get_inner_w() - 2 * width - hspacing(),
 		 m_set_label.get_y(),
 		 width, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown),
 		 std::string(),
 		 0 < noise_tool.set_tool().get_interval().min),
 	m_setto_increase
@@ -112,8 +112,8 @@
 		 get_inner_w() - width - hspacing(),
 		 m_set_label.get_y(),
 		 width, height,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp),
 		 std::string(),
 		 noise_tool.set_tool().get_interval().max < MAX_FIELD_HEIGHT)
 {

=== modified file 'src/editor/ui_menus/editor_tool_place_bob_options_menu.cc'
--- src/editor/ui_menus/editor_tool_place_bob_options_menu.cc	2014-12-03 20:16:51 +0000
+++ src/editor/ui_menus/editor_tool_place_bob_options_menu.cc	2014-12-05 20:26:47 +0000
@@ -44,7 +44,7 @@
 :
 EditorToolOptionsMenu(parent, registry, 100, 100, _("Animals")),
 
-m_tabpanel          (this, 0, 0, g_gr->images().get("pics/but1.png")),
+m_tabpanel          (this, 0, 0, ImageCatalog::Key::kButton1),
 m_pit               (pit),
 m_click_recursion_protect(false)
 {
@@ -74,7 +74,7 @@
 	}
 
 	const Image* tab_icon =
-		g_gr->images().get("pics/list_first_entry.png");
+		g_gr->cataloged_image(ImageCatalog::Key::kListFirst);
 	Point pos;
 	uint32_t cur_x = bobs_in_row;
 	int32_t i = 0;

=== modified file 'src/editor/ui_menus/editor_tool_set_terrain_options_menu.cc'
--- src/editor/ui_menus/editor_tool_set_terrain_options_menu.cc	2014-12-02 08:31:02 +0000
+++ src/editor/ui_menus/editor_tool_set_terrain_options_menu.cc	2014-12-05 20:26:47 +0000
@@ -57,12 +57,12 @@
 UI::Checkbox* create_terrain_checkbox(UI::Panel* parent,
                                       const TerrainDescription& terrain_descr,
                                       std::vector<std::unique_ptr<const Image>>* offscreen_images) {
-	const Image* green = g_gr->images().get("pics/terrain_green.png");
-	const Image* water = g_gr->images().get("pics/terrain_water.png");
-	const Image* mountain = g_gr->images().get("pics/terrain_mountain.png");
-	const Image* dead = g_gr->images().get("pics/terrain_dead.png");
-	const Image* unpassable = g_gr->images().get("pics/terrain_unpassable.png");
-	const Image* dry = g_gr->images().get("pics/terrain_dry.png");
+	const Image* green = g_gr->cataloged_image(ImageCatalog::Key::kEditorTerrainGreen);
+	const Image* water = g_gr->cataloged_image(ImageCatalog::Key::kEditorTerrainWater);
+	const Image* mountain = g_gr->cataloged_image(ImageCatalog::Key::kEditorTerrainMountain);
+	const Image* dead = g_gr->cataloged_image(ImageCatalog::Key::kEditorTerrainDead);
+	const Image* unpassable = g_gr->cataloged_image(ImageCatalog::Key::kEditorTerrainUnpassable);
+	const Image* dry = g_gr->cataloged_image(ImageCatalog::Key::kEditorTerrainDry);
 
 	constexpr int kSmallPicHeight = 20;
 	constexpr int kSmallPicWidth = 20;

=== modified file 'src/editor/ui_menus/editor_toolsize_menu.cc'
--- src/editor/ui_menus/editor_toolsize_menu.cc	2014-11-30 18:49:38 +0000
+++ src/editor/ui_menus/editor_toolsize_menu.cc	2014-12-05 20:26:47 +0000
@@ -45,15 +45,15 @@
 	m_increase
 		(this, "incr",
 		 get_inner_w() / 2 - 10, 25, 20, 20,
-		 g_gr->images().get("pics/but0.png"),
-		 g_gr->images().get("pics/scrollbar_up.png"),
+		 ImageCatalog::Key::kButton0,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarUp),
 		 std::string(),
 		 parent.get_sel_radius() < MAX_TOOL_AREA),
 	m_decrease
 		(this, "decr",
 		 get_inner_w() / 2 + 10, 25, 20, 20,
-		 g_gr->images().get("pics/but0.png"),
-		 g_gr->images().get("pics/scrollbar_down.png"),
+		 ImageCatalog::Key::kButton0,
+		 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarDown),
 		 std::string(),
 		 0 < parent.get_sel_radius())
 {

=== modified file 'src/graphic/CMakeLists.txt'
--- src/graphic/CMakeLists.txt	2014-12-05 07:54:43 +0000
+++ src/graphic/CMakeLists.txt	2014-12-05 20:26:47 +0000
@@ -25,6 +25,12 @@
     io_stream
 )
 
+wl_library(graphic_image_catalog
+  SRCS
+    image_catalog.cc
+    image_catalog.h
+)
+
 wl_library(graphic_image
   SRCS
     image.h
@@ -34,6 +40,7 @@
   DEPENDS
     base_log
     base_macros
+    graphic_image_catalog
     graphic_image_io
     graphic_surface
 )

=== modified file 'src/graphic/animation.cc'
--- src/graphic/animation.cc	2014-12-02 08:31:02 +0000
+++ src/graphic/animation.cc	2014-12-05 20:26:47 +0000
@@ -162,8 +162,8 @@
 	// If this animation has a sound effect associated, try to load it now.
 	const std::string sfx = section.get_string("sfx", "");
 	if (!sfx.empty()) {
-			sound_effect_ = string(directory) + "/" + sfx;
-			g_sound_handler.load_fx_if_needed(directory, sfx, sound_effect_);
+			sound_effect_ = string(directory) + sfx;
+			g_sound_handler.load_fx_if_needed("", sfx, sound_effect_);
 	}
 
 	int32_t const fps = section.get_int("fps");

=== modified file 'src/graphic/font.cc'
--- src/graphic/font.cc	2014-09-20 09:37:47 +0000
+++ src/graphic/font.cc	2014-12-05 20:26:47 +0000
@@ -53,7 +53,7 @@
 Font::Font(const std::string & name, int size)
 {
 	// Load the TrueType Font
-	std::string filename = "fonts/";
+	std::string filename = "data/i18n/fonts/";
 	filename += name;
 
 	//  We must keep this File Read open, otherwise the following calls are

=== modified file 'src/graphic/font_handler.cc'
--- src/graphic/font_handler.cc	2014-11-24 07:10:03 +0000
+++ src/graphic/font_handler.cc	2014-12-05 20:26:47 +0000
@@ -50,7 +50,7 @@
 {
 	int caret_x = style.calc_bare_width(text.substr(0, caret_offset));
 
-	const Image* caret_image = g_gr->images().get("pics/caret.png");
+	const Image* caret_image = g_gr->cataloged_image(ImageCatalog::Key::kCaret);
 	Point caretpt;
 	caretpt.x = dstpoint.x + caret_x + LINE_MARGIN - caret_image->width();
 	caretpt.y = dstpoint.y + (style.font->height() - caret_image->height()) / 2;

=== modified file 'src/graphic/gl/dither_program.cc'
--- src/graphic/gl/dither_program.cc	2014-11-28 05:40:53 +0000
+++ src/graphic/gl/dither_program.cc	2014-12-05 20:26:47 +0000
@@ -88,7 +88,7 @@
 	u_terrain_texture_ = glGetUniformLocation(gl_program_.object(), "u_terrain_texture");
 	u_texture_dimensions_ = glGetUniformLocation(gl_program_.object(), "u_texture_dimensions");
 
-	dither_mask_.reset(new Texture(load_image_as_sdl_surface("world/pics/edge.png", g_fs), true));
+	dither_mask_.reset(new Texture(load_image_as_sdl_surface("data/world/pics/edge.png", g_fs), true));
 
 	glBindTexture(GL_TEXTURE_2D, dither_mask_->get_gl_texture());
 	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);

=== modified file 'src/graphic/gl/road_program.cc'
--- src/graphic/gl/road_program.cc	2014-11-24 07:10:03 +0000
+++ src/graphic/gl/road_program.cc	2014-12-05 20:26:47 +0000
@@ -87,8 +87,8 @@
 	u_normal_road_texture_ = glGetUniformLocation(gl_program_.object(), "u_normal_road_texture");
 	u_busy_road_texture_ = glGetUniformLocation(gl_program_.object(), "u_busy_road_texture");
 
-	normal_road_texture_.reset(load_image("world/pics/roadt_normal.png"));
-	busy_road_texture_.reset(load_image("world/pics/roadt_busy.png"));
+	normal_road_texture_.reset(load_image("data/world/pics/roadt_normal.png"));
+	busy_road_texture_.reset(load_image("data/world/pics/roadt_busy.png"));
 }
 
 RoadProgram::~RoadProgram() {

=== modified file 'src/graphic/graphic.cc'
--- src/graphic/graphic.cc	2014-12-01 21:28:21 +0000
+++ src/graphic/graphic.cc	2014-12-05 20:26:47 +0000
@@ -49,9 +49,9 @@
 // Sets the icon for the application.
 void set_icon(SDL_Window* sdl_window) {
 #ifndef _WIN32
-	const std::string icon_name = "pics/wl-ico-128.png";
+	const std::string icon_name = "data/images/logos/wl-ico-128.png";
 #else
-	const std::string icon_name = "pics/wl-ico-32.png";
+	const std::string icon_name = "data/images/logos/wl-ico-32.png";
 #endif
 	SDL_Surface* s = load_image_as_sdl_surface(icon_name, g_fs);
 	SDL_SetWindowIcon(sdl_window, s);
@@ -69,6 +69,7 @@
      m_update(true),
      texture_cache_(create_texture_cache(TRANSIENT_TEXTURE_CACHE_SIZE)),
      image_cache_(new ImageCache(texture_cache_.get())),
+	  image_catalog_(new ImageCatalog()),
      animation_manager_(new AnimationManager())
 {
 	ImageTransformations::initialize();
@@ -276,6 +277,10 @@
 	m_update = false;
 }
 
+const Image* Graphic::cataloged_image(ImageCatalog::Key key) {
+	return images().get(image_catalog_.get()->filepath(key));
+}
+
 
 /**
  * Saves a pixel region to a png. This can be a file or part of a stream.

=== modified file 'src/graphic/graphic.h'
--- src/graphic/graphic.h	2014-11-27 21:29:21 +0000
+++ src/graphic/graphic.h	2014-12-05 20:26:47 +0000
@@ -25,6 +25,7 @@
 #include <SDL.h>
 
 #include "graphic/image_cache.h"
+#include "graphic/image_catalog.h"
 #include "notifications/notifications.h"
 #include "notifications/note_ids.h"
 
@@ -74,7 +75,16 @@
 	SDL_Window* get_sdlwindow() {return m_sdl_window;}
 
 	TextureCache& textures() const {return *texture_cache_.get();}
+
+	// Returns all cached images. Use cataloged_image instead of this function
+	// if the image is registered there.
 	ImageCache& images() const {return *image_cache_.get();}
+
+	// Uses catalog 'key' to fetch an image from images().
+	// NOCOM(GunChleoc): Review these 2 functions
+	const Image* cataloged_image(ImageCatalog::Key key);
+	ImageCatalog& image_catalog() const {return *image_catalog_.get();}
+
 	AnimationManager& animations() const {return *animation_manager_.get();}
 
 	void save_png(const Image*, StreamWrite*) const;
@@ -107,6 +117,8 @@
 	/// Non-volatile cache of hardware independent images. The use the
 	/// texture_cache_ to cache their pixel data.
 	std::unique_ptr<ImageCache> image_cache_;
+	/// Maps images from keys to filenames.
+	std::unique_ptr<ImageCatalog> image_catalog_;
 	/// This holds all animations.
 	std::unique_ptr<AnimationManager> animation_manager_;
 };

=== added file 'src/graphic/image_catalog.cc'
--- src/graphic/image_catalog.cc	1970-01-01 00:00:00 +0000
+++ src/graphic/image_catalog.cc	2014-12-05 20:26:47 +0000
@@ -0,0 +1,339 @@
+/*
+ * Copyright (C) 2006-2012 by the Widelands Development Team
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include "graphic/image_catalog.h"
+
+#include <cassert>
+#include <map>
+#include <string>
+
+#include "io/filesystem/layered_filesystem.h"
+
+ImageCatalog::ImageCatalog() {
+	init();
+}
+
+ImageCatalog::~ImageCatalog() {
+	entries_.clear();
+}
+
+// Register all images here
+void ImageCatalog::init()  {
+	entries_.clear();
+
+	// general
+	insert(Key::kNoValue, "novalue.png");
+
+	// ui_basic
+	insert(Key::kActionContinue, "ui_basic/continue.png");
+	insert(Key::kActionDifferent, "ui_basic/different.png");
+	insert(Key::kActionStop, "ui_basic/stop.png");
+	insert(Key::kButton0, "ui_basic/but0.png");
+	insert(Key::kButton1, "ui_basic/but1.png");
+	insert(Key::kButton2, "ui_basic/but2.png");
+	insert(Key::kButton3, "ui_basic/but3.png");
+	insert(Key::kButton4, "ui_basic/but4.png");
+	insert(Key::kCaret, "ui_basic/caret.png");
+	insert(Key::kCheckbox, "ui_basic/checkbox.png");
+	insert(Key::kCheckboxChecked, "ui_basic/checkbox_checked.png");
+	insert(Key::kCheckboxEmpty, "ui_basic/checkbox_empty.png");
+	insert(Key::kCheckboxLight, "ui_basic/checkbox_light.png");
+	insert(Key::kCursor, "ui_basic/cursor.png");
+	insert(Key::kCursorClick, "ui_basic/cursor_click.png");
+	insert(Key::kFilesDirectory, "ui_basic/ls_dir.png");
+	insert(Key::kFilesS2Map, "ui_basic/ls_s2map.png");
+	insert(Key::kFilesScenario, "ui_basic/ls_wlscenario.png");
+	insert(Key::kFilesWLMap, "ui_basic/ls_wlmap.png");
+	insert(Key::kHelp, "ui_basic/menu_help.png");
+	insert(Key::kListFirst, "ui_basic/list_first_entry.png");
+	insert(Key::kListSelected, "ui_basic/list_selected.png");
+	insert(Key::kScrollbarBackground, "ui_basic/scrollbar_background.png");
+	insert(Key::kScrollbarDown, "ui_basic/scrollbar_down.png");
+	insert(Key::kScrollbarLeft, "ui_basic/scrollbar_left.png");
+	insert(Key::kScrollbarRight, "ui_basic/scrollbar_right.png");
+	insert(Key::kScrollbarUp, "ui_basic/scrollbar_up.png");
+	insert(Key::kSelect, "ui_basic/fsel.png");
+
+	// players
+	insert(Key::kPlayerFlag1, "players/genstats_enable_plr_01.png");
+	insert(Key::kPlayerFlag2, "players/genstats_enable_plr_02.png");
+	insert(Key::kPlayerFlag3, "players/genstats_enable_plr_03.png");
+	insert(Key::kPlayerFlag4, "players/genstats_enable_plr_04.png");
+	insert(Key::kPlayerFlag5, "players/genstats_enable_plr_05.png");
+	insert(Key::kPlayerFlag6, "players/genstats_enable_plr_06.png");
+	insert(Key::kPlayerFlag7, "players/genstats_enable_plr_07.png");
+	insert(Key::kPlayerFlag8, "players/genstats_enable_plr_08.png");
+	insert(Key::kPlayerStartingPosBig1, "players/editor_player_01_starting_pos.png");
+	insert(Key::kPlayerStartingPosBig2, "players/editor_player_02_starting_pos.png");
+	insert(Key::kPlayerStartingPosBig3, "players/editor_player_03_starting_pos.png");
+	insert(Key::kPlayerStartingPosBig4, "players/editor_player_04_starting_pos.png");
+	insert(Key::kPlayerStartingPosBig5, "players/editor_player_05_starting_pos.png");
+	insert(Key::kPlayerStartingPosBig6, "players/editor_player_06_starting_pos.png");
+	insert(Key::kPlayerStartingPosBig7, "players/editor_player_07_starting_pos.png");
+	insert(Key::kPlayerStartingPosBig8, "players/editor_player_08_starting_pos.png");
+	insert(Key::kPlayerStartingPosSmall1, "players/fsel_editor_set_player_01_pos.png");
+	insert(Key::kPlayerStartingPosSmall2, "players/fsel_editor_set_player_02_pos.png");
+	insert(Key::kPlayerStartingPosSmall3, "players/fsel_editor_set_player_03_pos.png");
+	insert(Key::kPlayerStartingPosSmall4, "players/fsel_editor_set_player_04_pos.png");
+	insert(Key::kPlayerStartingPosSmall5, "players/fsel_editor_set_player_05_pos.png");
+	insert(Key::kPlayerStartingPosSmall6, "players/fsel_editor_set_player_06_pos.png");
+	insert(Key::kPlayerStartingPosSmall7, "players/fsel_editor_set_player_07_pos.png");
+	insert(Key::kPlayerStartingPosSmall8, "players/fsel_editor_set_player_08_pos.png");
+
+	// ui_fsmenu
+	insert(Key::kFullscreen, "ui_fsmenu/ui_fsmenu.jpg");
+	insert(Key::kFullscreenChooseMap, "ui_fsmenu/choosemapmenu.jpg");
+	insert(Key::kFullscreenDifficulty2, "ui_fsmenu/easy.png");
+	insert(Key::kFullscreenDifficulty3, "ui_fsmenu/challenging.png");
+	insert(Key::kFullscreenDifficulty4, "ui_fsmenu/hard.png");
+	insert(Key::kFullscreenFileWiew, "ui_fsmenu/fileviewmenu.jpg");
+	insert(Key::kFullscreenInternet, "ui_fsmenu/internetmenu.jpg");
+	insert(Key::kFullscreenLaunchMPG, "ui_fsmenu/launch_mpg_menu.jpg");
+	insert(Key::kFullscreenLoadGame, "ui_fsmenu/menu_load_game.png");
+	insert(Key::kFullscreenMain, "ui_fsmenu/mainmenu.jpg");
+	insert(Key::kFullscreenOptions, "ui_fsmenu/optionsmenu.jpg");
+	insert(Key::kFullscreenRandomTribe, "ui_fsmenu/random.png");
+	insert(Key::kFullscreenSharedIn, "ui_fsmenu/shared_in.png");
+
+	// loadscreens
+	insert(Key::kLoadscreen, "loadscreens/progress.png");
+	insert(Key::kLoadscreenEditor, "loadscreens/editor.jpg");
+	insert(Key::kLoadscreenSplash, "loadscreens/splash.jpg");
+	insert(Key::kLoadscreenTips, "loadscreens/tips_bg.png");
+
+	// ai
+	// TODO(GunChleoc): Need to change the network packets to use all of these.
+	// At the moment, we still have a hack in multiplayersetupgroup.
+	insert(Key::kAiAggressive, "ai/Aggressive.png");
+	insert(Key::kAiDefensive, "ai/Defensive.png");
+	insert(Key::kAiNone, "ai/None.png");
+	insert(Key::kAiNormal, "ai/Normal.png");
+	insert(Key::kAiRandom, "ai/Random.png");
+
+	// wui
+	insert(Key::kBackgroundButtonFlat, "wui/ware_list_bg.png");
+	insert(Key::kBackgroundButtonFlatSelected, "wui/ware_list_bg_selected.png");
+	insert(Key::kBackgroundPlot, "wui/plot_area_bg.png");
+	insert(Key::kButtonMenuAbort, "wui/menu_abort.png");
+	insert(Key::kButtonMenuOK, "wui/menu_okay.png");
+	insert(Key::kWindowBackground, "wui/window_background.png");
+	insert(Key::kWindowBorderBottom, "wui/window_bottom.png");
+	insert(Key::kWindowBorderLeft, "wui/window_left.png");
+	insert(Key::kWindowBorderRight, "wui/window_right.png");
+	insert(Key::kWindowBorderTop, "wui/window_top.png");
+
+	// menus
+	insert(Key::kMenuBuildhelp, "wui/menus/menu_toggle_buildhelp.png");
+	insert(Key::kMenuChat, "wui/menus/menu_chat.png");
+	insert(Key::kMenuGoto, "wui/menus/menu_goto.png");
+	insert(Key::kMenuMessagesNew, "wui/menus/menu_toggle_newmessage_menu.png");
+	insert(Key::kMenuMessagesOld, "wui/menus/menu_toggle_oldmessage_menu.png");
+	insert(Key::kMenuMinimap, "wui/menus/menu_toggle_minimap.png");
+	insert(Key::kMenuObjectives, "wui/menus/menu_objectives.png");
+	insert(Key::kMenuOptions, "wui/menus/menu_options_menu.png");
+	insert(Key::kMenuOptionsExit, "wui/menus/menu_exit_game.png");
+	insert(Key::kMenuOptionsSave, "wui/menus/menu_save_game.png");
+	insert(Key::kMenuStatistics, "wui/menus/menu_toggle_menu.png");
+	insert(Key::kMenuStatsBuilding, "wui/menus/menu_building_stats.png");
+	insert(Key::kMenuStatsGeneral, "wui/menus/menu_general_stats.png");
+	insert(Key::kMenuStatsStock, "wui/menus/menu_stock.png");
+	insert(Key::kMenuStatsWare, "wui/menus/menu_ware_stats.png");
+	insert(Key::kMenuWatch, "wui/menus/menu_watch_follow.png");
+
+	// stats
+	insert(Key::kStatsBuildingsLost, "wui/stats/genstats_civil_blds_lost.png");
+	insert(Key::kStatsBuildingsNumber, "wui/stats/genstats_nrbuildings.png");
+	insert(Key::kStatsCasualties, "wui/stats/genstats_casualties.png");
+	insert(Key::kStatsKills, "wui/stats/genstats_kills.png");
+	insert(Key::kStatsLandsize, "wui/stats/genstats_landsize.png");
+	insert(Key::kStatsMilitarySitesDefeated, "wui/stats/genstats_msites_defeated.png");
+	insert(Key::kStatsMilitarySitesLost, "wui/stats/genstats_msites_lost.png");
+	insert(Key::kStatsMilitaryStrength, "wui/stats/genstats_militarystrength.png");
+	insert(Key::kStatsPoints, "wui/stats/genstats_points.png");
+	insert(Key::kStatsProductivity, "wui/stats/genstats_productivity.png");
+	insert(Key::kStatsTabWarehouseWares, "wui/stats/menu_tab_wares_warehouse.png");
+	insert(Key::kStatsTabWarehouseWorkers, "wui/stats/menu_tab_workers_warehouse.png");
+	insert(Key::kStatsTabWaresConsumption, "wui/stats/menu_tab_wares_consumption.png");
+	insert(Key::kStatsTabWaresEconomyHealth, "wui/stats/menu_tab_wares_econ_health.png");
+	insert(Key::kStatsTabWaresProduction, "wui/stats/menu_tab_wares_production.png");
+	insert(Key::kStatsTabWaresStock, "wui/stats/menu_tab_wares_stock.png");
+	insert(Key::kStatsTrees, "wui/stats/genstats_trees.png");
+	insert(Key::kStatsWaresNumber, "wui/stats/genstats_nrwares.png");
+	insert(Key::kStatsWorkersNumber, "wui/stats/genstats_nrworkers.png");
+
+	// minimap
+	insert(Key::kMinimapBuildings, "wui/minimap/button_bldns.png");
+	insert(Key::kMinimapFlags, "wui/minimap/button_flags.png");
+	insert(Key::kMinimapOwner, "wui/minimap/button_owner.png");
+	insert(Key::kMinimapRoads, "wui/minimap/button_roads.png");
+	insert(Key::kMinimapTerrain, "wui/minimap/button_terrn.png");
+	insert(Key::kMinimapZoom, "wui/minimap/button_zoom.png");
+
+	// messages
+	insert(Key::kMessageActionArchive, "wui/messages/message_archive.png");
+	insert(Key::kMessageActionRestore, "wui/messages/message_restore.png");
+	insert(Key::kMessageArchived, "wui/messages/message_archived.png");
+	insert(Key::kMessageNew, "wui/messages/message_new.png");
+	insert(Key::kMessageRead, "wui/messages/message_read.png");
+
+	// fieldaction
+	insert(Key::kFieldAttack, "wui/fieldaction/menu_tab_attack.png");
+	insert(Key::kFieldCensus, "wui/fieldaction/menu_show_census.png");
+	insert(Key::kFieldDebug, "wui/fieldaction/menu_debug.png");
+	insert(Key::kFieldFlagBuild, "wui/fieldaction/menu_build_flag.png");
+	insert(Key::kFieldFlagDestroy, "wui/fieldaction/menu_rip_flag.png");
+	insert(Key::kFieldGeologist, "wui/fieldaction/menu_geologist.png");
+	insert(Key::kFieldRoadBuild, "wui/fieldaction/menu_build_way.png");
+	insert(Key::kFieldRoadDestroy, "wui/fieldaction/menu_rem_way.png");
+	insert(Key::kFieldStatistics, "wui/fieldaction/menu_show_statistics.png");
+	insert(Key::kFieldTabBuildBig, "wui/fieldaction/menu_tab_buildbig.png");
+	insert(Key::kFieldTabBuildMedium, "wui/fieldaction/menu_tab_buildmedium.png");
+	insert(Key::kFieldTabBuildMine, "wui/fieldaction/menu_tab_buildmine.png");
+	insert(Key::kFieldTabBuildPort, "wui/fieldaction/menu_tab_buildport.png");
+	insert(Key::kFieldTabBuildRoad, "wui/fieldaction/menu_tab_buildroad.png");
+	insert(Key::kFieldTabBuildSmall, "wui/fieldaction/menu_tab_buildsmall.png");
+	insert(Key::kFieldTabWatch, "wui/fieldaction/menu_tab_watch.png");
+	insert(Key::kFieldWatch, "wui/fieldaction/menu_watch_field.png");
+
+	// buildings
+	insert(Key::kBuildingAttack, "wui/buildings/menu_attack.png");
+	insert(Key::kBuildingBulldoze, "wui/buildings/menu_bld_bulldoze.png");
+	insert(Key::kBuildingDismantle, "wui/buildings/menu_bld_dismantle.png");
+	insert(Key::kBuildingMaxFillIndicator, "wui/buildings/max_fill_indicator.png");
+	insert(Key::kBuildingPriorityHigh, "wui/buildings/high_priority_button.png");
+	insert(Key::kBuildingPriorityLow, "wui/buildings/low_priority_button.png");
+	insert(Key::kBuildingPriorityNormal, "wui/buildings/normal_priority_button.png");
+	insert(Key::kBuildingSoldierCapacityDecrease, "wui/buildings/menu_down_train.png");
+	insert(Key::kBuildingSoldierCapacityIncrease, "wui/buildings/menu_up_train.png");
+	insert(Key::kBuildingSoldierDrop, "wui/buildings/menu_drop_soldier.png");
+	insert(Key::kBuildingSoldierHeroes, "wui/buildings/prefer_heroes.png");
+	insert(Key::kBuildingSoldierRookies, "wui/buildings/prefer_rookies.png");
+	insert(Key::kBuildingStockPolicyDontStock, "wui/buildings/stock_policy_dontstock.png");
+	insert(Key::kBuildingStockPolicyDontStockButton, "wui/buildings/stock_policy_button_dontstock.png");
+	insert(Key::kBuildingStockPolicyNormalButton, "wui/buildings/stock_policy_button_normal.png");
+	insert(Key::kBuildingStockPolicyPrefer, "wui/buildings/stock_policy_prefer.png");
+	insert(Key::kBuildingStockPolicyPreferButton, "wui/buildings/stock_policy_button_prefer.png");
+	insert(Key::kBuildingStockPolicyRemove, "wui/buildings/stock_policy_remove.png");
+	insert(Key::kBuildingStockPolicyRemoveButton, "wui/buildings/stock_policy_button_remove.png");
+	insert(Key::kBuildingTabDockWares, "wui/buildings/menu_tab_wares_dock.png");
+	insert(Key::kBuildingTabDockWorkers, "wui/buildings/menu_tab_workers_dock.png");
+	insert(Key::kBuildingTabMilitary, "wui/buildings/menu_tab_military.png");
+	insert(Key::kBuildingTabWarehouseWares, "wui/buildings/menu_tab_wares.png");
+	insert(Key::kBuildingTabWarehouseWorkers, "wui/buildings/menu_tab_workers.png");
+	insert(Key::kBuildingTabWares, "wui/buildings/menu_tab_wares.png");
+	insert(Key::kBuildingTabWorkers, "wui/buildings/menu_list_workers.png");
+	insert(Key::kDockExpeditionCancel, "wui/buildings/cancel_expedition.png");
+	insert(Key::kDockExpeditionStart, "wui/buildings/start_expedition.png");
+
+	// overlays
+	insert(Key::kOverlaysFlag, "wui/overlays/set_flag.png");
+	insert(Key::kOverlaysMapSpot, "wui/overlays/map_spot.png");
+	insert(Key::kOverlaysPlotBig, "wui/overlays/big.png");
+	insert(Key::kOverlaysPlotMedium, "wui/overlays/medium.png");
+	insert(Key::kOverlaysPlotMine, "wui/overlays/mine.png");
+	insert(Key::kOverlaysPlotPort, "wui/overlays/port.png");
+	insert(Key::kOverlaysPlotSmall, "wui/overlays/small.png");
+	insert(Key::kOverlaysRoadbuildingAscending, "wui/overlays/roadb_yellow.png");
+	insert(Key::kOverlaysRoadbuildingDecending, "wui/overlays/roadb_yellowdown.png");
+	insert(Key::kOverlaysRoadbuildingLevel, "wui/overlays/roadb_green.png");
+	insert(Key::kOverlaysRoadbuildingSteepAscending, "wui/overlays/roadb_red.png");
+	insert(Key::kOverlaysRoadbuildingSteepDecending, "wui/overlays/roadb_reddown.png");
+	insert(Key::kOverlaysWorkarea1, "wui/overlays/workarea1.png");
+	insert(Key::kOverlaysWorkarea12, "wui/overlays/workarea12.png");
+	insert(Key::kOverlaysWorkarea123, "wui/overlays/workarea123.png");
+	insert(Key::kOverlaysWorkarea2, "wui/overlays/workarea2.png");
+	insert(Key::kOverlaysWorkarea23, "wui/overlays/workarea23.png");
+	insert(Key::kOverlaysWorkarea3, "wui/overlays/workarea3.png");
+
+	// ship
+	insert(Key::kShipDestination, "wui/ship/menu_ship_destination.png");
+	insert(Key::kShipExpeditionCancel, "wui/ship/menu_ship_cancel_expedition.png");
+	insert(Key::kShipExploreClockwise, "wui/ship/ship_explore_island_cw.png");
+	insert(Key::kShipExploreCounterclockwise, "wui/ship/ship_explore_island_ccw.png");
+	insert(Key::kShipGoto, "wui/ship/menu_ship_goto.png");
+	insert(Key::kShipScoutEast, "wui/ship/ship_scout_e.png");
+	insert(Key::kShipScoutNorthEast, "wui/ship/ship_scout_ne.png");
+	insert(Key::kShipScoutNorthWest, "wui/ship/ship_scout_nw.png");
+	insert(Key::kShipScoutSouthEast, "wui/ship/ship_scout_se.png");
+	insert(Key::kShipScoutSouthWest, "wui/ship/ship_scout_sw.png");
+	insert(Key::kShipScoutWest, "wui/ship/ship_scout_w.png");
+	insert(Key::kShipSink, "wui/ship/menu_ship_sink.png");
+
+	// editor
+	insert(Key::kEditorMenuPlayer, "wui/editor/editor_menu_player_menu.png");
+	insert(Key::kEditorMenuToolBob, "wui/editor/editor_menu_tool_place_bob.png");
+	insert(Key::kEditorMenuToolHeight, "wui/editor/editor_menu_tool_change_height.png");
+	insert(Key::kEditorMenuToolImmovable, "wui/editor/editor_menu_tool_place_immovable.png");
+	insert(Key::kEditorMenuToolNoiseHeight, "wui/editor/editor_menu_tool_noise_height.png");
+	insert(Key::kEditorMenuToolPortSpace, "wui/editor/editor_menu_tool_set_port_space.png");
+	insert(Key::kEditorMenuToolResources, "wui/editor/editor_menu_tool_change_resources.png");
+	insert(Key::kEditorMenuTools, "wui/editor/editor_menu_toggle_tool_menu.png");
+	insert(Key::kEditorMenuToolSize, "wui/editor/editor_menu_set_toolsize_menu.png");
+	insert(Key::kEditorMenuToolTerrain, "wui/editor/editor_menu_tool_set_terrain.png");
+	insert(Key::kEditorRedo, "wui/editor/editor_redo.png");
+	insert(Key::kEditorTerrainDead, "wui/editor/terrain_dead.png");
+	insert(Key::kEditorTerrainDry, "wui/editor/terrain_dry.png");
+	insert(Key::kEditorTerrainGreen, "wui/editor/terrain_green.png");
+	insert(Key::kEditorTerrainMountain, "wui/editor/terrain_mountain.png");
+	insert(Key::kEditorTerrainUnpassable, "wui/editor/terrain_unpassable.png");
+	insert(Key::kEditorTerrainWater, "wui/editor/terrain_water.png");
+	insert(Key::kEditorToolBob, "wui/editor/fsel_editor_place_bob.png");
+	insert(Key::kEditorToolDelete, "wui/editor/fsel_editor_delete.png");
+	insert(Key::kEditorToolHeight, "wui/editor/fsel_editor_set_height.png");
+	insert(Key::kEditorToolHeightDecrease, "wui/editor/fsel_editor_decrease_height.png");
+	insert(Key::kEditorToolHeightIncrease, "wui/editor/fsel_editor_increase_height.png");
+	insert(Key::kEditorToolImmovable, "wui/editor/fsel_editor_place_immovable.png");
+	insert(Key::kEditorToolInfo, "wui/editor/fsel_editor_info.png");
+	insert(Key::kEditorToolNoiseHeight, "wui/editor/fsel_editor_noise_height.png");
+	insert(Key::kEditorToolPortSpaceSet, "wui/editor/fsel_editor_set_port_space.png");
+	insert(Key::kEditorToolPortSpaceSetSet, "wui/editor/fsel_editor_unset_port_space.png");
+	insert(Key::kEditorToolResourcesDecrease, "wui/editor/fsel_editor_decrease_resources.png");
+	insert(Key::kEditorToolResourcesDelete, "wui/editor/fsel_editor_delete.png");
+	insert(Key::kEditorToolResourcesIncrease, "wui/editor/fsel_editor_increase_resources.png");
+	insert(Key::kEditorToolResourcesSet, "wui/editor/fsel_editor_set_resources.png");
+	insert(Key::kEditorUndo, "wui/editor/editor_undo.png");
+
+	// logos
+	insert(Key::kLogoEditor16, "logos/WL-Editor-16.png");
+	insert(Key::kLogoEditor32, "logos/WL-Editor-32.png");
+	insert(Key::kLogoEditor64, "logos/WL-Editor-64.png");
+	insert(Key::kLogoEditor128, "logos/WL-Editor-128.png");
+	insert(Key::kLogoWidelands16, "logos/wl-ico-16.png");
+	insert(Key::kLogoWidelands32, "logos/wl-ico-32.png");
+	insert(Key::kLogoWidelands48, "logos/wl-ico-48.png");
+	insert(Key::kLogoWidelands64, "logos/wl-ico-64.png");
+	insert(Key::kLogoWidelands128, "logos/wl-ico-128.png");
+	insert(Key::kLogoWidelandsLogo, "logos/wl-logo-64.png");
+}
+
+void ImageCatalog::insert(Key key, const std::string& filename) {
+	const std::string path = kBaseDir + filename;
+	assert(!has_key(key));
+	assert(g_fs->file_exists(path));
+	entries_.emplace(key, path);
+}
+
+const std::string& ImageCatalog::filepath(Key key) const {
+	assert(has_key(key));
+	return entries_.at(key);
+}
+
+bool ImageCatalog::has_key(Key key) const {
+	return entries_.count(key) == 1;
+}

=== added file 'src/graphic/image_catalog.h'
--- src/graphic/image_catalog.h	1970-01-01 00:00:00 +0000
+++ src/graphic/image_catalog.h	2014-12-05 20:26:47 +0000
@@ -0,0 +1,350 @@
+/*
+ * Copyright (C) 2006-2014 by the Widelands Development Team
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#ifndef WL_GRAPHIC_IMAGE_CATALOG_H
+#define WL_GRAPHIC_IMAGE_CATALOG_H
+
+// NOCOM(GunChleoc): Review this class
+
+#include <string>
+#include <map>
+#include <vector>
+
+#include "base/macros.h"
+
+/// This class maps enum keys to image filenames.
+/// All image files we have in 'kBaseDir' should be registered in this catalog.
+class ImageCatalog {
+public:
+	/// The keys to fetch the image filenames.
+	enum class Key {
+		kUnknownImage = 0, // This is the key for a nonexistent image. Do not add this to the entries.
+
+		// general
+		kNoValue,
+
+		// ui_basic
+		kActionContinue,
+		kActionDifferent,
+		kActionStop,
+		kButton0,
+		kButton1,
+		kButton2,
+		kButton3,
+		kButton4,
+		kCaret,
+		kCheckbox,
+		kCheckboxChecked,
+		kCheckboxEmpty,
+		kCheckboxLight,
+		kCursor,
+		kCursorClick,
+		kFilesDirectory,
+		kFilesS2Map,
+		kFilesScenario,
+		kFilesWLMap,
+		kHelp,
+		kListFirst,
+		kListSelected,
+		kScrollbarBackground,
+		kScrollbarDown,
+		kScrollbarLeft,
+		kScrollbarRight,
+		kScrollbarUp,
+		kSelect,
+
+		// players
+		kPlayerFlag1, // Keep player icons in ascending order
+		kPlayerFlag2,
+		kPlayerFlag3,
+		kPlayerFlag4,
+		kPlayerFlag5,
+		kPlayerFlag6,
+		kPlayerFlag7,
+		kPlayerFlag8,
+		kPlayerStartingPosBig1, // Keep player icons in ascending order
+		kPlayerStartingPosBig2,
+		kPlayerStartingPosBig3,
+		kPlayerStartingPosBig4,
+		kPlayerStartingPosBig5,
+		kPlayerStartingPosBig6,
+		kPlayerStartingPosBig7,
+		kPlayerStartingPosBig8,
+		kPlayerStartingPosSmall1, // Keep player icons in ascending order
+		kPlayerStartingPosSmall2,
+		kPlayerStartingPosSmall3,
+		kPlayerStartingPosSmall4,
+		kPlayerStartingPosSmall5,
+		kPlayerStartingPosSmall6,
+		kPlayerStartingPosSmall7,
+		kPlayerStartingPosSmall8,
+
+		// ui_fsmenu
+		kFullscreen,
+		kFullscreenChooseMap,
+		kFullscreenDifficulty2,
+		kFullscreenDifficulty3,
+		kFullscreenDifficulty4,
+		kFullscreenFileWiew,
+		kFullscreenInternet,
+		kFullscreenLaunchMPG,
+		kFullscreenLoadGame,
+		kFullscreenMain,
+		kFullscreenOptions,
+		kFullscreenRandomTribe,
+		kFullscreenSharedIn,
+
+		//loadscreens
+		kLoadscreen,
+		kLoadscreenEditor,
+		kLoadscreenSplash,
+		kLoadscreenTips,
+
+		// ai
+		kAiAggressive,
+		kAiDefensive,
+		kAiNone,
+		kAiNormal,
+		kAiRandom,
+
+		// wui
+		kBackgroundButtonFlat,
+		kBackgroundButtonFlatSelected,
+		kBackgroundPlot,
+		kButtonMenuAbort,
+		kButtonMenuOK,
+		kWindowBackground,
+		kWindowBorderBottom,
+		kWindowBorderLeft,
+		kWindowBorderRight,
+		kWindowBorderTop,
+
+		// menus
+		kMenuBuildhelp,
+		kMenuChat,
+		kMenuGoto,
+		kMenuMessagesNew,
+		kMenuMessagesOld,
+		kMenuMinimap,
+		kMenuObjectives,
+		kMenuOptions,
+		kMenuOptionsExit,
+		kMenuOptionsSave,
+		kMenuStatistics,
+		kMenuStatsBuilding,
+		kMenuStatsGeneral,
+		kMenuStatsStock,
+		kMenuStatsWare,
+		kMenuWatch,
+
+		// stats
+		kStatsBuildingsLost,
+		kStatsBuildingsNumber,
+		kStatsCasualties,
+		kStatsKills,
+		kStatsLandsize,
+		kStatsMilitarySitesDefeated,
+		kStatsMilitarySitesLost,
+		kStatsMilitaryStrength,
+		kStatsPoints,
+		kStatsProductivity,
+		kStatsTabWarehouseWares,
+		kStatsTabWarehouseWorkers,
+		kStatsTabWaresConsumption,
+		kStatsTabWaresEconomyHealth,
+		kStatsTabWaresProduction,
+		kStatsTabWaresStock,
+		kStatsTrees,
+		kStatsWaresNumber,
+		kStatsWorkersNumber,
+
+		// minimap
+		kMinimapBuildings,
+		kMinimapFlags,
+		kMinimapOwner,
+		kMinimapRoads,
+		kMinimapTerrain,
+		kMinimapZoom,
+
+		// messages
+		kMessageActionArchive,
+		kMessageActionRestore,
+		kMessageArchived,
+		kMessageNew,
+		kMessageRead,
+
+		// fieldaction
+		kFieldAttack,
+		kFieldCensus,
+		kFieldDebug,
+		kFieldFlagBuild,
+		kFieldFlagDestroy,
+		kFieldGeologist,
+		kFieldRoadBuild,
+		kFieldRoadDestroy,
+		kFieldStatistics,
+		kFieldTabBuildBig,
+		kFieldTabBuildMedium,
+		kFieldTabBuildMine,
+		kFieldTabBuildPort,
+		kFieldTabBuildRoad,
+		kFieldTabBuildSmall,
+		kFieldTabWatch,
+		kFieldWatch,
+
+		// buildings
+		kBuildingAttack,
+		kBuildingBulldoze,
+		kBuildingDismantle,
+		kBuildingMaxFillIndicator,
+		kBuildingPriorityHigh,
+		kBuildingPriorityLow,
+		kBuildingPriorityNormal,
+		kBuildingSoldierCapacityDecrease,
+		kBuildingSoldierCapacityIncrease,
+		kBuildingSoldierDrop,
+		kBuildingSoldierHeroes,
+		kBuildingSoldierRookies,
+		kBuildingStockPolicyDontStock,
+		kBuildingStockPolicyDontStockButton,
+		kBuildingStockPolicyNormalButton,
+		kBuildingStockPolicyPrefer,
+		kBuildingStockPolicyPreferButton,
+		kBuildingStockPolicyRemove,
+		kBuildingStockPolicyRemoveButton,
+		kBuildingTabDockWares,
+		kBuildingTabDockWorkers,
+		kBuildingTabMilitary,
+		kBuildingTabWarehouseWares,
+		kBuildingTabWarehouseWorkers,
+		kBuildingTabWares,
+		kBuildingTabWorkers,
+		kDockExpeditionCancel,
+		kDockExpeditionStart,
+
+		// overlays
+		kOverlaysFlag,
+		kOverlaysMapSpot,
+		kOverlaysPlotBig,
+		kOverlaysPlotMedium,
+		kOverlaysPlotMine,
+		kOverlaysPlotPort,
+		kOverlaysPlotSmall,
+		kOverlaysRoadbuildingAscending,
+		kOverlaysRoadbuildingDecending,
+		kOverlaysRoadbuildingLevel,
+		kOverlaysRoadbuildingSteepAscending,
+		kOverlaysRoadbuildingSteepDecending,
+		kOverlaysWorkarea1,
+		kOverlaysWorkarea12,
+		kOverlaysWorkarea123,
+		kOverlaysWorkarea2,
+		kOverlaysWorkarea23,
+		kOverlaysWorkarea3,
+
+		// ship
+		kShipDestination,
+		kShipExpeditionCancel,
+		kShipExploreClockwise,
+		kShipExploreCounterclockwise,
+		kShipGoto,
+		kShipScoutEast,
+		kShipScoutNorthEast,
+		kShipScoutNorthWest,
+		kShipScoutSouthEast,
+		kShipScoutSouthWest,
+		kShipScoutWest,
+		kShipSink,
+
+		// editor
+		kEditorMenuPlayer,
+		kEditorMenuToolBob,
+		kEditorMenuToolHeight,
+		kEditorMenuToolImmovable,
+		kEditorMenuToolNoiseHeight,
+		kEditorMenuToolPortSpace,
+		kEditorMenuToolResources,
+		kEditorMenuTools,
+		kEditorMenuToolSize,
+		kEditorMenuToolTerrain,
+		kEditorRedo,
+		kEditorTerrainDead,
+		kEditorTerrainDry,
+		kEditorTerrainGreen,
+		kEditorTerrainMountain,
+		kEditorTerrainUnpassable,
+		kEditorTerrainWater,
+		kEditorToolBob,
+		kEditorToolDelete,
+		kEditorToolHeight,
+		kEditorToolHeightDecrease,
+		kEditorToolHeightIncrease,
+		kEditorToolImmovable,
+		kEditorToolInfo,
+		kEditorToolNoiseHeight,
+		kEditorToolPortSpaceSet,
+		kEditorToolPortSpaceSetSet,
+		kEditorToolResourcesDecrease,
+		kEditorToolResourcesDelete,
+		kEditorToolResourcesIncrease,
+		kEditorToolResourcesSet,
+		kEditorUndo,
+
+		// logos
+		kLogoEditor16,
+		kLogoEditor32,
+		kLogoEditor64,
+		kLogoEditor128,
+		kLogoWidelands16,
+		kLogoWidelands32,
+		kLogoWidelands48,
+		kLogoWidelands64,
+		kLogoWidelands128,
+		kLogoWidelandsLogo,
+
+	};
+
+	/// The base directory for the images in this catalog.
+	static constexpr const char* kBaseDir = "data/images/";
+
+	/// The constructor will map keys to filenames.
+	ImageCatalog();
+	~ImageCatalog();
+
+	/// Returns the filepath starting from the Widelands root
+	/// for the image associated with 'key'.
+	const std::string& filepath(ImageCatalog::Key key) const;
+
+	bool has_key(ImageCatalog::Key key) const;
+
+private:
+	/// This function registers a filename for each member of ImageCatalog::Key.
+	void init();
+
+	/// Inserts an image into the catalog for the 'key'.
+	/// The 'filename' is the relative path starting from kBaseDir.
+	void insert(ImageCatalog::Key key, const std::string& filename);
+
+	/// Container for the key - filename mapping.
+	std::map<ImageCatalog::Key, std::string> entries_;
+
+	DISALLOW_COPY_AND_ASSIGN(ImageCatalog);
+};
+
+#endif  // end of include guard: WL_GRAPHIC_IMAGE_CATALOG_H

=== modified file 'src/graphic/richtext.cc'
--- src/graphic/richtext.cc	2014-11-26 19:53:52 +0000
+++ src/graphic/richtext.cc	2014-12-05 20:26:47 +0000
@@ -19,6 +19,8 @@
 
 #include "graphic/richtext.h"
 
+#include <boost/algorithm/string/predicate.hpp>
+
 #include "base/rect.h"
 #include "graphic/font.h"
 #include "graphic/font_handler.h"
@@ -26,6 +28,7 @@
 #include "graphic/image.h"
 #include "graphic/rendertarget.h"
 #include "graphic/text_parser.h"
+#include "io/filesystem/layered_filesystem.h"
 
 namespace UI {
 
@@ -332,14 +335,19 @@
 		text.images_height = 0;
 		text.images_width = 0;
 
-		for
-			(std::vector<std::string>::const_iterator image_it = cur_block_images.begin();
-			 image_it != cur_block_images.end();
-			 ++image_it)
-		{
-			const Image* image = g_gr->images().get(*image_it);
-			if (!image)
+		// NOCOM(GunChleoc): Review this.
+		for (const std::string& image_filename : cur_block_images) {
+			const Image* image;
+			// Images that come in from Lua should define their paths starting from kBaseDir,
+			// unless they are map images.
+			if (!g_fs->file_exists(image_filename) && !boost::starts_with(image_filename, "map:")) {
+				image = g_gr->images().get(g_gr->image_catalog().kBaseDir + image_filename);
+			} else {
+				image = g_gr->images().get(image_filename);
+			}
+			if (!image) {
 				continue;
+			}
 
 			Rect bbox;
 			bbox.x = text.images_width;

=== modified file 'src/graphic/text/font_io.cc'
--- src/graphic/text/font_io.cc	2014-09-20 09:37:47 +0000
+++ src/graphic/text/font_io.cc	2014-12-05 20:26:47 +0000
@@ -32,7 +32,7 @@
 namespace RT {
 
 IFont* load_font(const std::string& face, int ptsize) {
-	std::string filename = "fonts/";
+	std::string filename = "data/i18n/fonts/";
 	filename += face;
 
 	// Some older versions of sdl_ttf seem to rely on this block of memory to

=== modified file 'src/logic/building.cc'
--- src/logic/building.cc	2014-11-30 18:49:38 +0000
+++ src/logic/building.cc	2014-12-05 20:26:47 +0000
@@ -124,7 +124,7 @@
 	}
 
 	m_enhanced_building = global_s.get_bool("enhanced_building", false);
-	m_global = directory.find("global/") < directory.size();
+	m_global = directory.find("data/global/") < directory.size();
 	if (m_buildable || m_enhanced_building) {
 		//  get build icon
 		m_icon_fname  = directory;

=== modified file 'src/logic/campaign_visibility.cc'
--- src/logic/campaign_visibility.cc	2014-10-28 12:50:28 +0000
+++ src/logic/campaign_visibility.cc	2014-12-05 20:26:47 +0000
@@ -49,7 +49,7 @@
 		update_campvis(savepath);
 	else {
 		Section & ca_s = ca.get_safe_section("global");
-		Profile cc("campaigns/campaigns.conf");
+		Profile cc("data/campaigns/campaigns.conf");
 		Section & cc_s = cc.get_safe_section("global");
 		if (cc_s.get_int("version") > ca_s.get_int("version"))
 			update_campvis(savepath);
@@ -89,7 +89,7 @@
 	std::string cms;
 
 	// Prepare campaigns.conf and campvis
-	Profile cconfig("campaigns/campaigns.conf");
+	Profile cconfig("data/campaigns/campaigns.conf");
 	Section & cconf_s = cconfig.get_safe_section("global");
 	Profile campvisr(savepath.c_str());
 	Profile campvisw(savepath.c_str());

=== modified file 'src/logic/editor_game_base.cc'
--- src/logic/editor_game_base.cc	2014-11-28 05:40:53 +0000
+++ src/logic/editor_game_base.cc	2014-12-05 20:26:47 +0000
@@ -113,7 +113,7 @@
 		world_.reset(new World());
 
 		try {
-			lua_->run_script("world/init.lua");
+			lua_->run_script("data/world/init.lua");
 		} catch (const WException& e) {
 			log("Could not read world information: %s", e.what());
 			throw;

=== modified file 'src/logic/game_data_error.h'
--- src/logic/game_data_error.h	2014-09-09 17:15:20 +0000
+++ src/logic/game_data_error.h	2014-12-05 20:26:47 +0000
@@ -24,7 +24,7 @@
 
 namespace Widelands {
 
-/// Exceptiont that is thrown when game data (world/tribe definitions, maps,
+/// Exception that is thrown when game data (world/tribe definitions, maps,
 /// savegames or replays) are erroneous.
 struct GameDataError : public WException {
 	explicit GameDataError(char const * fmt, ...) PRINTF_FORMAT(2, 3);

=== modified file 'src/logic/immovable.cc'
--- src/logic/immovable.cc	2014-11-30 18:49:38 +0000
+++ src/logic/immovable.cc	2014-12-05 20:26:47 +0000
@@ -864,7 +864,7 @@
 		} else
 			priority = 127;
 
-		g_sound_handler.load_fx_if_needed(directory, filename, name);
+		g_sound_handler.load_fx_if_needed("", filename, name);
 	} catch (const WException & e) {
 		throw GameDataError("playFX: %s", e.what());
 	}

=== modified file 'src/logic/partially_finished_building.cc'
--- src/logic/partially_finished_building.cc	2014-11-30 18:49:38 +0000
+++ src/logic/partially_finished_building.cc	2014-12-05 20:26:47 +0000
@@ -73,7 +73,7 @@
 	if (upcast(Game, game, &egbase))
 		request_builder(*game);
 
-	g_sound_handler.play_fx("sound/create_construction_site", m_position, 255);
+	g_sound_handler.play_fx("create_construction_site", m_position, 255);
 }
 
 /*

=== modified file 'src/logic/player.cc'
--- src/logic/player.cc	2014-11-30 18:49:38 +0000
+++ src/logic/player.cc	2014-12-05 20:26:47 +0000
@@ -299,10 +299,10 @@
 	}
 
 	if (g_options.pull_section("global").get_bool("sound_at_message", true)) {
-		MAYBE_PLAY("site_occupied", "sound/military/site_occupied");
-		MAYBE_PLAY("under_attack", "sound/military/under_attack");
+		MAYBE_PLAY("site_occupied", "military/site_occupied");
+		MAYBE_PLAY("under_attack", "military/under_attack");
 
-		g_sound_handler.play_fx("sound/message", 200, PRIO_ALWAYS_PLAY);
+		g_sound_handler.play_fx("message", 200, PRIO_ALWAYS_PLAY);
 	}
 }
 

=== modified file 'src/logic/production_program.cc'
--- src/logic/production_program.cc	2014-12-01 21:47:22 +0000
+++ src/logic/production_program.cc	2014-12-05 20:26:47 +0000
@@ -1542,7 +1542,7 @@
 		} else
 			priority = 127;
 
-		g_sound_handler.load_fx_if_needed(directory, filename, name);
+		g_sound_handler.load_fx_if_needed("", filename, name);
 	} catch (const WException & e) {
 		throw GameDataError("playFX: %s", e.what());
 	}

=== modified file 'src/logic/ship.cc'
--- src/logic/ship.cc	2014-11-30 18:49:38 +0000
+++ src/logic/ship.cc	2014-12-05 20:26:47 +0000
@@ -459,7 +459,7 @@
 			// Send a message to the player, that a new port space was found
 			std::string msg_head = _("Port Space Found");
 			std::string msg_body = _("An expedition ship found a new port build space.");
-			send_message(game, "exp_port_space", msg_head, msg_body, "port.png");
+			send_message(game, "exp_port_space", msg_head, msg_body, ImageCatalog::Key::kOverlaysPlotPort);
 		}
 		m_expedition->seen_port_buildspaces.swap(temp_port_buildspaces);
 	}
@@ -569,7 +569,7 @@
 							std::string msg_body = _("An expedition ship sailed around its"
 										 " island without any events.");
 							send_message(game, "exp_island", msg_head, msg_body,
-								"ship_explore_island_cw.png");
+											 ImageCatalog::Key::kShipExploreClockwise);
 							m_ship_state = EXP_WAITING;
 							return start_task_idle(game, descr().main_animation(), 1500);
 						}
@@ -624,7 +624,7 @@
 				std::string msg_head = _("Coast Reached");
 				std::string msg_body =
 					_("An expedition ship reached a coast and is waiting for further commands.");
-				send_message(game, "exp_coast", msg_head, msg_body, "ship_explore_island_cw.png");
+				send_message(game, "exp_coast", msg_head, msg_body, ImageCatalog::Key::kShipExploreClockwise);
 				return;
 			}
 		}
@@ -787,7 +787,7 @@
 	// Send a message to the player, that an expedition is ready to go
 	const std::string msg_head = _("Expedition Ready");
 	const std::string msg_body = _("An expedition ship is waiting for your commands.");
-	send_message(game, "exp_ready", msg_head, msg_body, "start_expedition.png");
+	send_message(game, "exp_ready", msg_head, msg_body, ImageCatalog::Key::kDockExpeditionStart);
 }
 
 /// Initializes / changes the direction of scouting to @arg direction
@@ -896,20 +896,14 @@
  * \param msgsender a computer-readable description of why the message was sent
  * \param title user-visible title of the message
  * \param description user-visible message body, will be placed in an appropriate rich-text paragraph
- * \param picture picture name relative to the pics directory
+ * \param image_key an image from the ImageCatalog.
  */
-void Ship::send_message
-	(Game & game, const std::string & msgsender,
-	 const std::string & title, const std::string & description,
-	 const std::string & picture)
-{
-	std::string rt_description;
-	if (picture.size() > 3) {
-		rt_description  = "<rt image=pics/";
-		rt_description += picture;
-		rt_description += "><p font-size=14 font-face=DejaVuSerif>";
-	} else
-		rt_description  = "<rt><p font-size=14 font-face=DejaVuSerif>";
+void Ship::send_message(Game & game, const std::string & msgsender,
+								const std::string & title, const std::string & description,
+								ImageCatalog::Key image_key) {
+	std::string rt_description  = "<rt image=";
+	rt_description += g_gr->image_catalog().filepath(image_key);
+	rt_description += "><p font-size=14 font-face=DejaVuSerif>";
 	rt_description += description;
 	rt_description += "</p></rt>";
 

=== modified file 'src/logic/ship.h'
--- src/logic/ship.h	2014-09-10 08:55:04 +0000
+++ src/logic/ship.h	2014-12-05 20:26:47 +0000
@@ -27,6 +27,7 @@
 #include "logic/bob.h"
 #include "economy/shippingitem.h"
 #include "graphic/diranimations.h"
+#include "graphic/image_catalog.h"
 
 namespace UI {class Window;}
 class InteractiveGameBase;
@@ -209,7 +210,7 @@
 	void set_fleet(Fleet * fleet);
 
 	void send_message
-		(Game &, const std::string &, const std::string &, const std::string &, const std::string &);
+		(Game &, const std::string &, const std::string &, const std::string &, ImageCatalog::Key image_key);
 
 	UI::Window * m_window;
 

=== modified file 'src/logic/tribe.cc'
--- src/logic/tribe.cc	2014-11-28 09:02:24 +0000
+++ src/logic/tribe.cc	2014-12-05 20:26:47 +0000
@@ -62,7 +62,7 @@
 	(const std::string & tribename, EditorGameBase & egbase)
 	: m_name(tribename)
 {
-	std::string path = "tribes/";
+	std::string path = "data/tribes/";
 	try {
 		path            += tribename;
 
@@ -154,10 +154,10 @@
 			PARSE_MAP_OBJECT_TYPES_END;
 
 
-			// global militarysites are in /global not in /tribes
+			// global militarysites are in /data/global not in /tribes
 			std::string temp                = path;
 			std::string::size_type sizetemp = base_path_size;
-			path           = "global/militarysites/";
+			path           = "data/global/militarysites/";
 			base_path_size = path.size();
 
 			PARSE_MAP_OBJECT_TYPES_BEGIN("global militarysite")
@@ -299,7 +299,7 @@
 bool TribeDescr::exists_tribe
 	(const std::string & name, TribeBasicInfo * const info)
 {
-	std::string buf = "tribes/";
+	std::string buf = "data/tribes/";
 	buf            += name;
 	buf            += "/conf";
 
@@ -313,7 +313,7 @@
 				info->uiposition =
 					prof.get_safe_section("tribe").get_int("uiposition", 0);
 
-				std::string path = "tribes/" + name + "/scripting";
+				std::string path = "data/tribes/" + name + "/scripting";
 				for (const std::string& script :
 					  filter(g_fs->list_directory(path),
 				            [](const string& fn) {return boost::ends_with(fn, ".lua");})) {
@@ -346,14 +346,14 @@
 
 	//  get all tribes
 	std::vector<TribeBasicInfo> tribes;
-	FilenameSet m_tribes = g_fs->list_directory("tribes");
+	FilenameSet m_tribes = g_fs->list_directory("data/tribes");
 	for
 		(FilenameSet::iterator pname = m_tribes.begin();
 		 pname != m_tribes.end();
 		 ++pname)
 	{
 		TribeBasicInfo info;
-		if (TribeDescr::exists_tribe(pname->substr(7), &info))
+		if (TribeDescr::exists_tribe(g_fs->fs_filename(pname->c_str()), &info))
 			tribes.push_back(info);
 	}
 
@@ -369,14 +369,15 @@
 	std::vector<TribeBasicInfo> tribes;
 
 	//  get all tribes
-	FilenameSet m_tribes = g_fs->list_directory("tribes");
+	FilenameSet m_tribes = g_fs->list_directory("data/tribes");
 	for
 		(FilenameSet::iterator pname = m_tribes.begin();
 		 pname != m_tribes.end();
 		 ++pname)
 	{
 		TribeBasicInfo info;
-		if (TribeDescr::exists_tribe(pname->substr(7), &info))
+
+		if (TribeDescr::exists_tribe(g_fs->fs_filename(pname->c_str()), &info))
 			tribes.push_back(info);
 	}
 

=== modified file 'src/logic/ware_descr.cc'
--- src/logic/ware_descr.cc	2014-11-23 14:34:38 +0000
+++ src/logic/ware_descr.cc	2014-12-05 20:26:47 +0000
@@ -36,7 +36,7 @@
 	m_tribe         (gtribe),
 	m_helptext      (global_s.get_string("help", "")),
 	m_icon_fname    (directory + "/menu.png"),
-	m_icon(g_gr->images().get("pics/but0.png"))
+	m_icon(g_gr->cataloged_image(ImageCatalog::Key::kButton0))
 {
 	m_default_target_quantity =
 		global_s.get_positive("default_target_quantity", std::numeric_limits<uint32_t>::max());

=== modified file 'src/logic/warehouse.cc'
--- src/logic/warehouse.cc	2014-11-30 18:49:38 +0000
+++ src/logic/warehouse.cc	2014-12-05 20:26:47 +0000
@@ -376,7 +376,6 @@
 			(owner().is_worker_type_allowed(worker_index) &&
 			 m_next_worker_without_cost_spawn[i] == static_cast<uint32_t>(never()))
 		{
-			upcast(Game, game, &egbase);
 			if (next_spawn == static_cast<uint32_t>(never())) {
 				next_spawn = schedule_act(dynamic_cast<Game&>(egbase), WORKER_WITHOUT_COST_SPAWN_INTERVAL);
 			}

=== modified file 'src/logic/worker.cc'
--- src/logic/worker.cc	2014-12-01 21:50:28 +0000
+++ src/logic/worker.cc	2014-12-05 20:26:47 +0000
@@ -933,7 +933,7 @@
 			// TODO(sirver): this is very wrong: It assumes a directory layout
 			// that might not be around forever.
 			const std::string message =
-					(boost::format("<rt image=world/resources/pics/%s4.png>"
+					(boost::format("<rt image=data/world/resources/pics/%s4.png>"
 										"<p font-size=14 font-face=DejaVuSerif>%s</p></rt>")
 					 % rdescr->name().c_str()
 					 % _("A geologist found resources.")).str();

=== modified file 'src/logic/worker_program.cc'
--- src/logic/worker_program.cc	2014-09-30 05:41:55 +0000
+++ src/logic/worker_program.cc	2014-12-05 20:26:47 +0000
@@ -648,7 +648,7 @@
 
 	act->sparam1 = parser->directory + "/" + cmd[1];
 
-	g_sound_handler.load_fx_if_needed(parser->directory, cmd[1], act->sparam1);
+	g_sound_handler.load_fx_if_needed("", cmd[1], act->sparam1);
 
 	act->function = &Worker::run_playfx;
 	act->iparam1 =

=== modified file 'src/network/netclient.cc'
--- src/network/netclient.cc	2014-10-11 16:03:18 +0000
+++ src/network/netclient.cc	2014-12-05 20:26:47 +0000
@@ -126,7 +126,7 @@
 
 	// Temporarily register win condition scripts to get the default
 	std::set<std::string> win_condition_scripts =
-		filter(g_fs->list_directory("scripting/win_conditions"),
+		filter(g_fs->list_directory("data/scripting/win_conditions"),
 	          [](const std::string& fn) {return boost::ends_with(fn, ".lua");});
 	assert(win_condition_scripts.size());
 	d->settings.win_condition_script = *win_condition_scripts.begin();
@@ -187,7 +187,8 @@
 #endif
 
 	try {
-		UI::ProgressWindow * loaderUI = new UI::ProgressWindow("pics/progress.png");
+		UI::ProgressWindow * loaderUI =
+				new UI::ProgressWindow(ImageCatalog::Key::kLoadscreen);
 		std::vector<std::string> tipstext;
 		tipstext.push_back("general_game");
 		tipstext.push_back("multiplayer");

=== modified file 'src/network/nethost.cc'
--- src/network/nethost.cc	2014-11-28 09:02:24 +0000
+++ src/network/nethost.cc	2014-12-05 20:26:47 +0000
@@ -298,7 +298,7 @@
 			if (!m_lua)
 				m_lua = new LuaInterface();
 			std::set<std::string> win_conditions =
-				filter(g_fs->list_directory("scripting/win_conditions"),
+				filter(g_fs->list_directory("data/scripting/win_conditions"),
 			          [](const std::string& fn) {return boost::ends_with(fn, ".lua");});
 			m_win_condition_scripts.insert(
 			   m_win_condition_scripts.end(), win_conditions.begin(), win_conditions.end());
@@ -835,7 +835,7 @@
 				set_win_condition_script(gpdp.get_win_condition());
 			}
 		} else {
-			loaderUI.reset(new UI::ProgressWindow ("pics/progress.png"));
+			loaderUI.reset(new UI::ProgressWindow(ImageCatalog::Key::kLoadscreen));
 			std::vector<std::string> tipstext;
 			tipstext.push_back("general_game");
 			tipstext.push_back("multiplayer");
@@ -1308,7 +1308,7 @@
 	if (d->settings.maps.empty()) {
 		// Read in maps
 		std::vector<std::string> directories;
-		directories.push_back("maps");
+		directories.push_back("data/maps");
 		while (!directories.empty()) {
 			FilenameSet files = g_fs->list_directory(directories.at(directories.size() - 1).c_str());
 			directories.resize(directories.size() - 1);

=== modified file 'src/scripting/lua_root.cc'
--- src/scripting/lua_root.cc	2014-09-20 09:37:47 +0000
+++ src/scripting/lua_root.cc	2014-12-05 20:26:47 +0000
@@ -334,7 +334,7 @@
 
 		Adds a new resource type that can be in the different maps. Takes a
 		single argument, a table with the descriptions for the resource type. See the
-		files in world/ for usage examples.
+		files in data/world/ for usage examples.
 
 		:returns: :const:`nil`
 */
@@ -357,7 +357,7 @@
 	.. method:: new_terrain_type(table)
 
 		Adds a new terrain type that can be used in maps. Takes a single
-		argument, a table with the descriptions for the terrain type. See the files in world/
+		argument, a table with the descriptions for the terrain type. See the files in data/world/
 		for usage examples.
 
 		:returns: :const:`nil`
@@ -381,7 +381,7 @@
 	.. method:: new_critter_type(table)
 
 		Adds a new critter type that can be used in maps. Takes a single
-		argument, a table with the description. See the files in world/ for usage
+		argument, a table with the description. See the files in data/world/ for usage
 		examples.
 
 		:returns: :const:`nil`
@@ -404,7 +404,7 @@
 	.. method:: new_immovable_type(table)
 
 		Adds a new immovable type that can be used in maps. Takes a single
-		argument, a table with the description. See the files in world/ for usage
+		argument, a table with the description. See the files in data/world/ for usage
 		examples.
 
 		:returns: :const:`nil`
@@ -428,7 +428,7 @@
 
 		Adds a new editor category that can be used to classify objects in the
 		world. This will be used to sort them into sub menus in the editor. See
-		usage examples in world/.
+		usage examples in data/world/.
 
 		:returns: :const:`nil`
 */

=== modified file 'src/sound/sound_handler.cc'
--- src/sound/sound_handler.cc	2014-12-03 07:15:40 +0000
+++ src/sound/sound_handler.cc	2014-12-05 20:26:47 +0000
@@ -190,9 +190,9 @@
 
 	random_order_    =  s.get_bool("sound_random_order", true);
 
-	register_song("music", "intro");
-	register_song("music", "menu");
-	register_song("music", "ingame");
+	register_song("", "intro");
+	register_song("", "menu");
+	register_song("", "ingame");
 }
 
 /** Load systemwide sound fx into memory.
@@ -201,22 +201,22 @@
 */
 void SoundHandler::load_system_sounds()
 {
-	load_fx_if_needed("sound", "click", "sound/click");
-	load_fx_if_needed("sound", "create_construction_site", "sound/create_construction_site");
-	load_fx_if_needed("sound", "message", "sound/message");
-	load_fx_if_needed("sound/military", "under_attack", "sound/military/under_attack");
-	load_fx_if_needed("sound/military", "site_occupied", "sound/military/site_occupied");
-	load_fx_if_needed("sound", "lobby_chat", "sound/lobby_chat");
-	load_fx_if_needed("sound", "lobby_freshmen", "sound/lobby_freshmen");
+	load_fx_if_needed("", "click", "click");
+	load_fx_if_needed("", "create_construction_site", "create_construction_site");
+	load_fx_if_needed("", "message", "message");
+	load_fx_if_needed("military", "under_attack", "military/under_attack");
+	load_fx_if_needed("military", "site_occupied", "military/site_occupied");
+	load_fx_if_needed("", "lobby_chat", "lobby_chat");
+	load_fx_if_needed("", "lobby_freshmen", "lobby_freshmen");
 }
 
 /** Load a sound effect. One sound effect can consist of several audio files
  * named EFFECT_XX.ogg, where XX is between 00 and 99.
  *
- * Subdirectories of and files under BASENAME_XX can be named anything you want.
+ * Subdirectories of and files under FILENAME_XX can be named anything you want.
  *
- * \param dir        The directory where the audio files reside
- * \param basename   Name from which filenames will be formed
+ * \param dir        The relative directory where the audio files reside in data/sound
+ * \param filename   Name from which filenames will be formed
  *                   (BASENAME_XX.ogg);
  *                   also the name used with \ref play_fx
 */
@@ -235,10 +235,14 @@
 
 	fxs_.insert(std::make_pair(fx_name, std::unique_ptr<FXset>(new FXset())));
 
-	// filename can be relative to dir.
-	const std::string full_path = dir + "/" + filename;
+	// NOCOM(GunChleoc): Review this. All sounds have to sit in this directory and its subdirectories now.
+	// So, I moved over the duck's sounds from 'world'.
+
+	// filename is relative to dir.
+	const std::string full_path = "data/sound/" + dir + (dir.empty() ? "" : "/") + filename;
 	const std::string basename = FileSystem::fs_filename(full_path.c_str());
 	const std::string dirname = FileSystem::fs_dirname(full_path);
+
 	boost::regex re(basename + "_\\d+\\.ogg");
 	files = filter(g_fs->list_directory(dirname), [&re](const std::string& fn) {
 		return boost::regex_match(FileSystem::fs_filename(fn.c_str()), re);
@@ -503,7 +507,8 @@
 
 	FilenameSet files;
 
-	files = filter(g_fs->list_directory(dir), [&basename](const std::string& fn) {
+	// NOCOM(GunChleoc): Review this. All music has to sit in this directory and its subdirectories now.
+	files = filter(g_fs->list_directory("data/music/" + dir), [&basename](const std::string& fn) {
 		const std::string only_filename = FileSystem::fs_filename(fn.c_str());
 		return boost::starts_with(only_filename, basename) && boost::ends_with(only_filename, ".ogg");
 	});

=== modified file 'src/ui_basic/button.cc'
--- src/ui_basic/button.cc	2014-12-03 19:14:07 +0000
+++ src/ui_basic/button.cc	2014-12-05 20:26:47 +0000
@@ -22,6 +22,7 @@
 #include "base/log.h"
 #include "graphic/font.h"
 #include "graphic/font_handler.h"
+#include "graphic/graphic.h"
 #include "graphic/image.h"
 #include "graphic/image_transformations.h"
 #include "graphic/rendertarget.h"
@@ -39,7 +40,7 @@
 	(Panel * const parent,
 	 const std::string & name,
 	 int32_t const x, int32_t const y, uint32_t const w, uint32_t const h,
-	 const Image* bg_pic,
+	 const ImageCatalog::Key background_image_key,
 	 const std::string & title_text,
 	 const std::string & tooltip_text,
 	 bool const _enabled, bool const flat)
@@ -54,9 +55,9 @@
 	m_draw_flat_background(false),
 	m_time_nextact  (0),
 	m_title         (title_text),
-	m_pic_background(bg_pic),
-	m_pic_custom    (nullptr),
-	m_pic_custom_disabled(nullptr),
+	background_image_(g_gr->cataloged_image(background_image_key)),
+	foreground_image_(nullptr),
+	foreground_image_disabled_(nullptr),
 	m_font(UI::Font::ui_small()),
 	m_clr_down      (229, 161, 2),
 	m_draw_caret    (false)
@@ -68,8 +69,8 @@
 	(Panel * const parent,
 	 const std::string & name,
 	 const int32_t x, const int32_t y, const uint32_t w, const uint32_t h,
-	 const Image* bg_pic,
-	 const Image* fg_pic,
+	 const ImageCatalog::Key background_image_key,
+	 const Image* foreground_image,
 	 const std::string & tooltip_text,
 	 bool const _enabled, bool const flat)
 	:
@@ -82,9 +83,11 @@
 	m_flat          (flat),
 	m_draw_flat_background(false),
 	m_time_nextact  (0),
-	m_pic_background(bg_pic),
-	m_pic_custom    (fg_pic),
-	m_pic_custom_disabled(fg_pic ? ImageTransformations::gray_out(fg_pic) : nullptr),
+	background_image_(g_gr->cataloged_image(background_image_key)),
+	foreground_image_    (foreground_image),
+	foreground_image_disabled_(foreground_image ?
+									 ImageTransformations::gray_out(foreground_image) :
+									 nullptr),
 	m_font(UI::Font::ui_small()),
 	m_clr_down      (229, 161, 2),
 	m_draw_caret    (false)
@@ -101,15 +104,15 @@
 /**
  * Sets a new picture for the Button.
 */
-void Button::set_pic(const Image* pic)
+void Button::set_image(const Image* foreground)
 {
 	m_title.clear();
 
-	if (m_pic_custom == pic)
+	if (foreground_image_ == foreground)
 		return;
 
-	m_pic_custom = pic;
-	m_pic_custom_disabled = ImageTransformations::gray_out(pic);
+	foreground_image_ = foreground;
+	foreground_image_disabled_ = ImageTransformations::gray_out(foreground);
 
 	update();
 }
@@ -122,7 +125,7 @@
 	if (m_title == title)
 		return;
 
-	m_pic_custom = nullptr;
+	foreground_image_ = nullptr;
 	m_title      = title;
 
 	update();
@@ -161,9 +164,9 @@
 {
 	// Draw the background
 	if (!m_flat || m_draw_flat_background) {
-		assert(m_pic_background);
+		assert(background_image_);
 		dst.fill_rect(Rect(Point(0, 0), get_w(), get_h()), RGBAColor(0, 0, 0, 255));
-		dst.tile(Rect(Point(0, 0), get_w(), get_h()), m_pic_background, Point(get_x(), get_y()));
+		dst.tile(Rect(Point(0, 0), get_w(), get_h()), background_image_, Point(get_x(), get_y()));
 	}
 
 	if (m_enabled && m_highlighted && !m_flat)
@@ -171,20 +174,20 @@
 			(Rect(Point(0, 0), get_w(), get_h()), MOUSE_OVER_BRIGHT_FACTOR);
 
 	//  if we got a picture, draw it centered
-	if (m_pic_custom) {
+	if (foreground_image_) {
 		const int max_image_w = get_w() - 2 * kButtonImageMargin;
 		const int max_image_h = get_h() - 2 * kButtonImageMargin;
 		double image_scale =
 		   std::min(1.,
-		            std::min(static_cast<double>(max_image_w) / m_pic_custom->width(),
-		                     static_cast<double>(max_image_h) / m_pic_custom->height()));
-		int blit_width = image_scale * m_pic_custom->width();
-		int blit_height = image_scale * m_pic_custom->height();
+						std::min(static_cast<double>(max_image_w) / foreground_image_->width(),
+									static_cast<double>(max_image_h) / foreground_image_->height()));
+		int blit_width = image_scale * foreground_image_->width();
+		int blit_height = image_scale * foreground_image_->height();
 
 		dst.blitrect_scale(
 		   Rect((get_w() - blit_width) / 2, (get_h() - blit_height) / 2, blit_width, blit_height),
-		   m_enabled ? m_pic_custom : m_pic_custom_disabled,
-		   Rect(0, 0, m_pic_custom->width(), m_pic_custom->height()));
+			m_enabled ? foreground_image_ : foreground_image_disabled_,
+			Rect(0, 0, foreground_image_->width(), foreground_image_->height()));
 
 	} else if (m_title.length()) {
 		//  otherwise draw title string centered

=== modified file 'src/ui_basic/button.h'
--- src/ui_basic/button.h	2014-07-14 10:45:44 +0000
+++ src/ui_basic/button.h	2014-12-05 20:26:47 +0000
@@ -25,6 +25,7 @@
 #include <boost/signals2.hpp>
 
 #include "graphic/color.h"
+#include "graphic/image_catalog.h"
 #include "ui_basic/panel.h"
 
 namespace UI {
@@ -39,23 +40,25 @@
 		(Panel * const parent,
 		 const std::string & name,
 		 int32_t const x, int32_t const y, uint32_t const w, uint32_t const h,
-		 const Image* background_pictute_id,
+		 const ImageCatalog::Key background_image_key,
 		 const std::string & title_text,
 		 const std::string & tooltip_text = std::string(),
 		 bool const _enabled = true,
 		 bool const flat    = false);
+	// NOCOM(GunChleoc): Review these constructors. The foreground image can come from Lua/conf, so we need to operate with the filename here.
+	// I have also changed the background image for other ui_basic classes over to the new system.
 	Button /// for pictorial buttons
 		(Panel * const parent,
 		 const std::string & name,
 		 const int32_t x, const int32_t y, const uint32_t w, const uint32_t h,
-		 const Image* background_pictute_id,
-		 const Image* foreground_picture_id,
+		 const ImageCatalog::Key background_image_key,
+		 const Image* foreground_image,
 		 const std::string & tooltip_text = std::string(),
 		 bool const _enabled = true,
 		 bool const flat     = false);
 	~Button();
 
-	void set_pic(const Image* pic);
+	void set_image(const Image* foreground);
 	void set_title(const std::string &);
 	const std::string & get_title() const {return m_title;}
 
@@ -103,9 +106,9 @@
 
 	std::string m_title;          //  title string used when _mypic == 0
 
-	const Image* m_pic_background; //  background texture (picture ID)
-	const Image* m_pic_custom;     //  custom icon on the button
-	const Image* m_pic_custom_disabled;
+	const Image* background_image_; //  background texture (picture ID)
+	const Image* foreground_image_;     //  custom icon on the button
+	const Image* foreground_image_disabled_;
 	Font * m_font;
 
 	RGBColor    m_clr_down; //  color of border while a flat button is "down"

=== modified file 'src/ui_basic/checkbox.cc'
--- src/ui_basic/checkbox.cc	2014-11-08 14:59:03 +0000
+++ src/ui_basic/checkbox.cc	2014-12-05 20:26:47 +0000
@@ -47,7 +47,7 @@
 		m_pic_graphics = pic;
 	} else
 		m_pic_graphics =
-			g_gr->images().get("pics/checkbox_light.png");
+			g_gr->cataloged_image(ImageCatalog::Key::kCheckboxLight);
 }
 
 
@@ -70,7 +70,9 @@
 	set_flags(Is_Enabled, enabled);
 
 	if (!(m_flags & Has_Custom_Picture)) {
-		m_pic_graphics = g_gr->images().get(enabled ? "pics/checkbox_light.png" : "pics/checkbox.png");
+		m_pic_graphics = enabled ?
+								  g_gr->cataloged_image(ImageCatalog::Key::kCheckboxLight) :
+								  g_gr->cataloged_image(ImageCatalog::Key::kCheckbox);
 		set_flags
 			(Is_Highlighted, (m_flags & Is_Highlighted) && (m_flags & Is_Enabled));
 	}

=== modified file 'src/ui_basic/editbox.cc'
--- src/ui_basic/editbox.cc	2014-11-22 11:26:51 +0000
+++ src/ui_basic/editbox.cc	2014-12-05 20:26:47 +0000
@@ -43,7 +43,7 @@
 	/*@}*/
 
 	/// Background tile style.
-	const Image* background;
+	ImageCatalog::Key background_image_key_;
 
 	/// Maximum number of characters in the input
 	uint32_t maxLength;
@@ -64,7 +64,7 @@
 EditBox::EditBox
 	(Panel * const parent,
 	 const int32_t x, const int32_t y, const uint32_t w, const uint32_t h,
-	 const Image* background,
+	 const ImageCatalog::Key background_image_key,
 	 Align _align)
 	:
 	Panel(parent, x, y, w, h),
@@ -74,7 +74,7 @@
 {
 	set_thinks(false);
 
-	m->background = background;
+	m->background_image_key_ = background_image_key;
 	m->fontname = UI_FONT_NAME;
 	m->fontsize = UI_FONT_SIZE_SMALL;
 	m->fontcolor = UI_FONT_CLR_FG;
@@ -404,7 +404,7 @@
 	// Draw the background
 	dst.tile
 		(Rect(Point(0, 0), get_w(), get_h()),
-		 m->background,
+		 g_gr->cataloged_image(m->background_image_key_),
 		 Point(get_x(), get_y()));
 
 	// Draw border.

=== modified file 'src/ui_basic/editbox.h'
--- src/ui_basic/editbox.h	2014-11-22 10:18:20 +0000
+++ src/ui_basic/editbox.h	2014-12-05 20:26:47 +0000
@@ -42,7 +42,8 @@
 	EditBox
 		(Panel *,
 		 int32_t x, int32_t y, uint32_t w, uint32_t h,
-		 const Image* background = g_gr->images().get("pics/but2.png"), Align align = Align_Center);
+		 const ImageCatalog::Key background_image_key = ImageCatalog::Key::kButton2,
+		 Align align = Align_Center);
 	virtual ~EditBox();
 
 	boost::signals2::signal<void ()> changed;

=== modified file 'src/ui_basic/helpwindow.cc'
--- src/ui_basic/helpwindow.cc	2014-10-27 10:14:10 +0000
+++ src/ui_basic/helpwindow.cc	2014-12-05 20:26:47 +0000
@@ -80,7 +80,7 @@
 		(this, "ok",
 		 in_width / 3, in_height - but_height * 3 / 2,
 		 in_width / 3, but_height,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("OK"), std::string(), true, false);
 	btn->sigclicked.connect(boost::bind(&HelpWindow::pressed_ok, boost::ref(*this)));
 	btn->set_font(Font::get(UI_FONT_NAME, (fontsize < 12 ? 12 : fontsize)));
@@ -112,10 +112,11 @@
 	m_text += m_fn;
 	m_text += " font-size=";
 	m_text += m_p;
-	if (lastentry == HEADING)
+	if (lastentry == HEADING) {
 		m_text += ">";
-	else
+	} else {
 		m_text += "><br>";
+	}
 	lastentry = BLOCK;
 	return add_block(block);
 }
@@ -123,8 +124,9 @@
 /// Behaves the same as add_paragraph, just it adds only one < br> if last
 /// written entry was already a block text.
 void HelpWindow::add_block(std::string block) {
-	if (lastentry == HEADING)
+	if (lastentry == HEADING) {
 		return add_paragraph(block);
+	}
 	m_text += "<br>";
 	m_text += block;
 	m_text += "</p></rt>";
@@ -132,10 +134,10 @@
 	lastentry = BLOCK;
 }
 
-void HelpWindow::add_picture_li(std::string block, std::string picpath) {
+void HelpWindow::add_picture_li(std::string block, ImageCatalog::Key image_key) {
 	m_text += "<rt image=";
-	m_text += picpath;
 	m_text += " image-align=left><p font-face=";
+	m_text += g_gr->image_catalog().filepath(image_key);
 	m_text += m_fn;
 	m_text += " font-size=";
 	m_text += m_p;
@@ -166,9 +168,9 @@
 
 void HelpWindow::pressed_ok()
 {
-	if (is_modal())
+	if (is_modal()) {
 		end_modal(0);
-	else {
+	} else {
 		// do not call die() here - could lead to broken pointers.
 		// the window should get deleted with the parent anyways.
 		set_visible(false);

=== modified file 'src/ui_basic/helpwindow.h'
--- src/ui_basic/helpwindow.h	2014-09-19 09:07:14 +0000
+++ src/ui_basic/helpwindow.h	2014-12-05 20:26:47 +0000
@@ -23,6 +23,7 @@
 #include <memory>
 
 #include "graphic/align.h"
+#include "graphic/image_catalog.h"
 #include "ui_basic/multilinetextarea.h"
 #include "ui_basic/unique_window.h"
 #include "ui_basic/window.h"
@@ -64,7 +65,7 @@
 	void add_heading   (std::string text);
 	void add_paragraph (std::string text);
 	void add_block     (std::string text);
-	void add_picture_li(std::string text, std::string picpath);
+	void add_picture_li(std::string text, ImageCatalog::Key image_key);
 
 protected:
 	virtual void pressed_ok();

=== modified file 'src/ui_basic/icongrid.cc'
--- src/ui_basic/icongrid.cc	2014-09-10 14:48:40 +0000
+++ src/ui_basic/icongrid.cc	2014-12-05 20:26:47 +0000
@@ -32,14 +32,14 @@
 		(IconGrid         & parent,
 		 const std::string & name,
 		 int32_t x, int32_t y, uint32_t w, uint32_t h,
-		 const Image* background_pictute_id,
-		 const Image* foreground_picture_id,
+		 const ImageCatalog::Key background_image_key,
+		 const Image* foreground_image,
 		 uint32_t callback_argument_id,
 		 const std::string & tooltip_text)
 		:
 		Button
-			(&parent, name, x, y, w, h, background_pictute_id,
-			 foreground_picture_id,
+			(&parent, name, x, y, w, h, background_image_key,
+			 foreground_image,
 			 tooltip_text, true, true),
 			 m_icongrid(parent),
 			 _callback_argument_id(callback_argument_id)
@@ -105,7 +105,7 @@
 	UI::Button * btn = new IconGridButton
 		(*this, name,
 		 x, y, m_cell_width, m_cell_height,
-		 nullptr, pic,
+		 ImageCatalog::Key::kBackgroundButtonFlat, pic,
 		 idx, tooltip_text);
 	btn->sigclicked.connect(boost::bind(&IconGrid::clicked_button, this, idx));
 

=== modified file 'src/ui_basic/listselect.cc'
--- src/ui_basic/listselect.cc	2014-11-28 16:40:55 +0000
+++ src/ui_basic/listselect.cc	2014-12-05 20:26:47 +0000
@@ -71,7 +71,7 @@
 
 	if (show_check) {
 		uint32_t pic_h;
-		m_check_pic = g_gr->images().get("pics/list_selected.png");
+		m_check_pic = g_gr->cataloged_image(ImageCatalog::Key::kListSelected);
 		m_max_pic_width = m_check_pic->width();
 		pic_h = m_check_pic->height();
 		if (pic_h > m_lineheight)

=== modified file 'src/ui_basic/messagebox.cc'
--- src/ui_basic/messagebox.cc	2014-11-22 10:18:20 +0000
+++ src/ui_basic/messagebox.cc	2014-12-05 20:26:47 +0000
@@ -86,21 +86,21 @@
 		UI::Button * okbtn = new Button
 			(this, "ok",
 			 (get_inner_w() - 120) / 2, get_inner_h() - 30, 120, 20,
-			 g_gr->images().get("pics/but0.png"),
+			 ImageCatalog::Key::kButton0,
 			 _("OK"));
 		okbtn->sigclicked.connect(boost::bind(&WLMessageBox::pressed_ok, boost::ref(*this)));
 	} else if (type == YESNO) {
 		UI::Button * yesbtn = new Button
 			(this, "yes",
 			 (get_inner_w() / 2 - 120) / 2, get_inner_h() - 30, 120, 20,
-			 g_gr->images().get("pics/but0.png"),
+			 ImageCatalog::Key::kButton0,
 			 _("Yes"));
 		yesbtn->sigclicked.connect(boost::bind(&WLMessageBox::pressed_yes, boost::ref(*this)));
 		UI::Button * nobtn = new Button
 			(this, "no",
 			 (get_inner_w() / 2 - 120) / 2 + get_inner_w() / 2, get_inner_h() - 30,
 			 120, 20,
-			 g_gr->images().get("pics/but1.png"),
+			 ImageCatalog::Key::kButton1,
 			 _("No"));
 		nobtn->sigclicked.connect(boost::bind(&WLMessageBox::pressed_no, boost::ref(*this)));
 	}

=== modified file 'src/ui_basic/panel.cc'
--- src/ui_basic/panel.cc	2014-11-29 20:37:34 +0000
+++ src/ui_basic/panel.cc	2014-12-05 20:26:47 +0000
@@ -142,8 +142,8 @@
 	while (Panel * const p = forefather->_parent)
 		forefather = p;
 
-	s_default_cursor = g_gr->images().get("pics/cursor.png");
-	s_default_cursor_click = g_gr->images().get("pics/cursor_click.png");
+	s_default_cursor = g_gr->cataloged_image(ImageCatalog::Key::kCursor);
+	s_default_cursor_click = g_gr->cataloged_image(ImageCatalog::Key::kCursorClick);
 
 	// Loop
 	_running = true;
@@ -788,15 +788,15 @@
  */
 void Panel::play_click()
 {
-	g_sound_handler.play_fx("sound/click", 128, PRIO_ALWAYS_PLAY);
+	g_sound_handler.play_fx("click", 128, PRIO_ALWAYS_PLAY);
 }
 void Panel::play_new_chat_message()
 {
-	g_sound_handler.play_fx("sound/lobby_chat", 128, PRIO_ALWAYS_PLAY);
+	g_sound_handler.play_fx("lobby_chat", 128, PRIO_ALWAYS_PLAY);
 }
 void Panel::play_new_chat_member()
 {
-	g_sound_handler.play_fx("sound/lobby_freshmen", 128, PRIO_ALWAYS_PLAY);
+	g_sound_handler.play_fx("lobby_freshmen", 128, PRIO_ALWAYS_PLAY);
 }
 
 
@@ -1222,7 +1222,7 @@
 		return UI_FONT_NAME_SERIF;
 	if (style == "sans")
 		return UI_FONT_NAME_SANS;
-	if (g_fs->file_exists("fonts/" + style))
+	if (g_fs->file_exists("data/i18n/fonts/" + style))
 		return style;
 	log
 		("Could not find font file \"%s\"\n"

=== modified file 'src/ui_basic/progresswindow.cc'
--- src/ui_basic/progresswindow.cc	2014-12-02 08:31:02 +0000
+++ src/ui_basic/progresswindow.cc	2014-12-05 20:26:47 +0000
@@ -41,8 +41,8 @@
 
 namespace UI {
 
-ProgressWindow::ProgressWindow(const std::string& background) {
-	set_background(background);
+ProgressWindow::ProgressWindow(ImageCatalog::Key background_image_key) {
+	set_background(g_gr->image_catalog().filepath(background_image_key));
 	step(_("Preparing..."));
 }
 
@@ -84,7 +84,7 @@
 	if (!file_name.empty() && g_fs->file_exists(file_name)) {
 		m_background = file_name;
 	} else {
-		m_background = "pics/progress.png";
+		m_background = g_gr->image_catalog().filepath(ImageCatalog::Key::kLoadscreen);
 	}
 	draw_background(rt, g_gr->get_xres(), g_gr->get_yres());
 	update(true);

=== modified file 'src/ui_basic/progresswindow.h'
--- src/ui_basic/progresswindow.h	2014-12-02 08:31:02 +0000
+++ src/ui_basic/progresswindow.h	2014-12-05 20:26:47 +0000
@@ -26,6 +26,7 @@
 
 #include "base/point.h"
 #include "base/rect.h"
+#include "graphic/image_catalog.h"
 
 class Image;
 class RenderTarget;
@@ -46,7 +47,7 @@
 
 /// Manages a progress window on the screen.
 struct ProgressWindow {
-	ProgressWindow(const std::string & background = std::string());
+	ProgressWindow(ImageCatalog::Key background_image_key = ImageCatalog::Key::kLoadscreen);
 	~ProgressWindow();
 
 	/// Register additional visualization (tips/hints, animation, etc)

=== modified file 'src/ui_basic/scrollbar.cc'
--- src/ui_basic/scrollbar.cc	2014-11-22 10:18:20 +0000
+++ src/ui_basic/scrollbar.cc	2014-12-05 20:26:47 +0000
@@ -56,12 +56,14 @@
 	m_time_nextact  (0),
 	m_knob_grabdelta(0),
 	m_pic_minus
-		(g_gr->images().get(horiz ? "pics/scrollbar_left.png"  : "pics/scrollbar_up.png")),
+		(g_gr->cataloged_image(horiz ? ImageCatalog::Key::kScrollbarLeft :
+												 ImageCatalog::Key::kScrollbarUp)),
 	m_pic_plus
-		(g_gr->images().get(horiz ? "pics/scrollbar_right.png" : "pics/scrollbar_down.png")),
+		(g_gr->cataloged_image(horiz ? ImageCatalog::Key::kScrollbarRight :
+												 ImageCatalog::Key::kScrollbarDown)),
 	m_pic_background
-		(g_gr->images().get("pics/scrollbar_background.png")),
-	m_pic_buttons   (g_gr->images().get("pics/but3.png"))
+		(g_gr->cataloged_image(ImageCatalog::Key::kScrollbarBackground)),
+	m_pic_buttons   (g_gr->cataloged_image(ImageCatalog::Key::kButton3))
 {
 	set_thinks(true);
 }

=== modified file 'src/ui_basic/slider.cc'
--- src/ui_basic/slider.cc	2014-11-22 10:18:20 +0000
+++ src/ui_basic/slider.cc	2014-12-05 20:26:47 +0000
@@ -22,6 +22,7 @@
 
 #include "graphic/font.h"
 #include "graphic/font_handler.h"
+#include "graphic/graphic.h"
 #include "graphic/rendertarget.h"
 #include "ui_basic/mouse_constants.h"
 
@@ -51,7 +52,7 @@
 	(Panel * const parent,
 	 const int32_t x, const int32_t y, const uint32_t w, const uint32_t h,
 	 const int32_t min_value, const int32_t max_value, const int32_t value,
-	 const Image* background_picture_id,
+	 const ImageCatalog::Key background_image_key,
 	 const std::string & tooltip_text,
 	 const uint32_t cursor_size,
 	 const bool enabled,
@@ -64,7 +65,7 @@
 	m_highlighted    (false),
 	m_pressed        (false),
 	m_enabled        (enabled),
-	m_pic_background (background_picture_id),
+	background_image_key_ (background_image_key),
 	m_x_gap          (x_gap),
 	m_y_gap          (y_gap),
 	m_bar_size       (bar_size),
@@ -149,7 +150,9 @@
 	RGBColor black(0, 0, 0);
 
 	dst.tile //  background
-		(Rect(Point(x, y), w, h), m_pic_background, Point(get_x(), get_y()));
+		(Rect(Point(x, y), w, h),
+		 g_gr->cataloged_image(background_image_key_),
+		 Point(get_x(), get_y()));
 
 	if (m_highlighted)
 		dst.brighten_rect(Rect(Point(x, y), w, h), MOUSE_OVER_BRIGHT_FACTOR);
@@ -552,7 +555,7 @@
 	 const int32_t x, const int32_t y, const uint32_t w, const uint32_t h,
 	 const std::vector<std::string> labels_in,
 	 uint32_t m_value,
-	 const Image* background_picture_id,
+	 const ImageCatalog::Key background_image_key,
 	 const std::string & tooltip_text,
 	 const uint32_t cursor_size,
 	 const bool enabled)
@@ -565,7 +568,7 @@
 		 w - (w / labels_in.size()) + cursor_size,
 		 h - UI::Font::ui_small()->lineskip() - 2,
 		 0, labels_in.size() - 1, m_value,
-		 background_picture_id,
+		 background_image_key,
 		 tooltip_text,
 		 cursor_size,
 		 enabled),

=== modified file 'src/ui_basic/slider.h'
--- src/ui_basic/slider.h	2014-07-26 10:43:23 +0000
+++ src/ui_basic/slider.h	2014-12-05 20:26:47 +0000
@@ -22,6 +22,7 @@
 #include <boost/signals2.hpp>
 
 #include "graphic/font.h"
+#include "graphic/image_catalog.h"
 #include "ui_basic/panel.h"
 
 namespace UI {
@@ -42,7 +43,7 @@
 		(Panel * parent,
 		 int32_t x, int32_t y, uint32_t w, uint32_t h,
 		 int32_t min_value, int32_t max_value, int32_t value,
-		 const Image* background_picture_id,
+		 const ImageCatalog::Key background_image_key,
 		 const std::string & tooltip_text,
 		 uint32_t cursor_size,
 		 bool enabled,
@@ -98,7 +99,7 @@
 	bool m_pressed;           //  the cursor is pressed
 	bool m_enabled;           //  enabled widget
 
-	const Image* m_pic_background;    //  background texture (picture ID)
+	ImageCatalog::Key background_image_key_;    //  background texture (picture ID)
 
 protected:
 	int32_t m_x_gap;              //  draw positions
@@ -118,7 +119,7 @@
 		(Panel * const parent,
 		 const int32_t x, const int32_t y, const uint32_t w, const uint32_t h,
 		 const int32_t min_value, const int32_t max_value, const int32_t value,
-		 const Image* background_picture_id,
+		 const ImageCatalog::Key background_image_key,
 		 const std::string & tooltip_text = std::string(),
 		 const uint32_t cursor_size = 20,
 		 const bool enabled = true)
@@ -127,7 +128,7 @@
 			(parent,
 			 x, y, w, h,
 			 min_value, max_value, value,
-			 background_picture_id,
+			 background_image_key,
 			 tooltip_text,
 			 cursor_size,
 			 enabled,
@@ -153,7 +154,7 @@
 		(Panel * const parent,
 		 const int32_t x, const int32_t y, const uint32_t w, const uint32_t h,
 		 const int32_t min_value, const int32_t max_value, const int32_t value,
-		 const Image* background_picture_id,
+		 const ImageCatalog::Key background_image_key,
 		 const uint32_t cursor_size = 20,
 		 const std::string & tooltip_text = std::string(),
 		 const bool enabled = true)
@@ -162,7 +163,7 @@
 			(parent,
 			 x, y, w, h,
 			 min_value, max_value, value,
-			 background_picture_id,
+			 background_image_key,
 			 tooltip_text,
 			 cursor_size,
 			 enabled,
@@ -188,7 +189,7 @@
 		 const int32_t x, const int32_t y, const uint32_t w, const uint32_t h,
 		 const std::vector<std::string> labels_in,
 		 uint32_t m_value,
-		 const Image* background_picture_id,
+		 const ImageCatalog::Key background_image_key,
 		 const std::string & tooltip_text = std::string(),
 		 const uint32_t cursor_size = 20,
 		 const bool enabled = true);

=== modified file 'src/ui_basic/spinbox.cc'
--- src/ui_basic/spinbox.cc	2014-11-28 16:40:55 +0000
+++ src/ui_basic/spinbox.cc	2014-12-05 20:26:47 +0000
@@ -51,7 +51,7 @@
 	std::string unit;
 
 	/// Background tile style of buttons.
-	const Image* background;
+	ImageCatalog::Key button_background_;
 
 	/// Alignment of the text. Vertical alignment is always centered.
 	Align align;
@@ -79,7 +79,7 @@
 	 const int32_t x, const int32_t y, const uint32_t w, const uint32_t h,
 	 int32_t const startval, int32_t const minval, int32_t const maxval,
 	 const std::string &       unit,
-	 const Image* background,
+	 const ImageCatalog::Key button_background,
 	 bool                const big,
 	 Align               const alignm)
 	:
@@ -92,7 +92,7 @@
 	sbi->max   = maxval;
 	sbi->unit  = unit;
 
-	sbi->background = background;
+	sbi->button_background_ = button_background;
 	sbi->align      = alignm;
 
 	if (w < 20)
@@ -132,7 +132,7 @@
 		new Button
 			(this, "+",
 			 but_plus_x, 0, butw, butw,
-			 sbi->background,
+			 sbi->button_background_,
 			 "+", _("Increase the value"),
 			 true, false);
 	sbi->butPlus->sigclicked.connect(boost::bind(&SpinBox::change_value, boost::ref(*this), 1));
@@ -140,7 +140,7 @@
 		new Button
 			(this, "-",
 			 but_minus_x, 0, butw, butw,
-			 sbi->background,
+			 sbi->button_background_,
 			 "-", _("Decrease the value"),
 			 true, false);
 	sbi->butMinus->sigclicked.connect(boost::bind(&SpinBox::change_value, boost::ref(*this), -1));
@@ -151,7 +151,7 @@
 			new Button
 				(this, "++",
 				 w - 2 * butw, 0, butw * 2, butw,
-				 sbi->background,
+				 sbi->button_background_,
 				 "++", _("Increase the value by 10"),
 				 true, false);
 		sbi->butTenPlus->sigclicked.connect(boost::bind(&SpinBox::change_value, boost::ref(*this), 10));
@@ -159,7 +159,7 @@
 			new Button
 				(this, "--",
 				 0, 0, butw * 2, butw,
-				 sbi->background,
+				 sbi->button_background_,
 				 "--", _("Decrease the value by 10"),
 				 true, false);
 		sbi->butTenMinus->sigclicked.connect(boost::bind(&SpinBox::change_value, boost::ref(*this), -10));

=== modified file 'src/ui_basic/spinbox.h'
--- src/ui_basic/spinbox.h	2014-09-29 19:25:24 +0000
+++ src/ui_basic/spinbox.h	2014-12-05 20:26:47 +0000
@@ -40,8 +40,7 @@
 		 int32_t x, int32_t y, uint32_t w, uint32_t h,
 		 int32_t startval, int32_t minval, int32_t maxval,
 		 const std::string & unit             = std::string(),
-		 const Image* buttonbackground =
-		 	g_gr->images().get("pics/but2.png"),
+		 const ImageCatalog::Key button_background = ImageCatalog::Key::kButton2,
 		 bool big = false,
 		 Align align = Align_Center);
 	~SpinBox();

=== modified file 'src/ui_basic/table.cc'
--- src/ui_basic/table.cc	2014-11-28 16:40:55 +0000
+++ src/ui_basic/table.cc	2014-12-05 20:26:47 +0000
@@ -103,7 +103,7 @@
 				new Button
 					(this, title,
 					 complete_width, 0, width, m_headerheight,
-					 g_gr->images().get("pics/but3.png"),
+					 ImageCatalog::Key::kButton3,
 					 title, tooltip_string, true, false);
 			c.btn->sigclicked.connect
 				(boost::bind(&Table::header_button_clicked, boost::ref(*this), m_columns.size()));
@@ -152,7 +152,7 @@
 			new Button
 				(this, title,
 				 complete_width, 0, column.width, m_headerheight,
-				 g_gr->images().get("pics/but3.png"),
+				 ImageCatalog::Key::kButton3,
 				 title, "", true, false);
 		column.btn->sigclicked.connect
 			(boost::bind(&Table::header_button_clicked, boost::ref(*this), col));
@@ -183,8 +183,9 @@
 	_data & cell = m_data.at(col);
 
 	cell.d_checked = checked;
-	cell.d_picture =
-		g_gr->images().get(checked ? "pics/checkbox_checked.png" : "pics/checkbox_empty.png");
+	cell.d_picture = checked ?
+							  g_gr->cataloged_image(ImageCatalog::Key::kCheckboxChecked) :
+							  g_gr->cataloged_image(ImageCatalog::Key::kCheckboxEmpty);
 }
 
 void Table<void *>::EntryRecord::toggle(uint8_t const col)
@@ -477,7 +478,7 @@
 	for (size_t i = 0; i < m_columns.size(); ++i)
 		if (m_columns.at(i).is_checkbox_column) {
 			result.m_data.at(i).d_picture =
-				g_gr->images().get("pics/checkbox_empty.png");
+				g_gr->cataloged_image(ImageCatalog::Key::kCheckboxEmpty);
 		}
 
 	m_scrollbar->set_steps

=== modified file 'src/ui_basic/tabpanel.cc'
--- src/ui_basic/tabpanel.cc	2014-12-03 19:11:31 +0000
+++ src/ui_basic/tabpanel.cc	2014-12-05 20:26:47 +0000
@@ -19,6 +19,7 @@
 
 #include "ui_basic/tabpanel.h"
 
+#include "graphic/graphic.h"
 #include "graphic/rendertarget.h"
 #include "ui_basic/mouse_constants.h"
 
@@ -78,22 +79,22 @@
 TabPanel::TabPanel
 	(Panel * const parent,
 	 int32_t const x, int32_t const y,
-	 const Image* background)
+	 const ImageCatalog::Key background_image_key)
 	:
 	Panel            (parent, x, y, 0, 0),
 	m_active         (0),
 	m_highlight      (-1),
-	m_pic_background (background)
+	background_image_key_(background_image_key)
 {}
 TabPanel::TabPanel
 	(Panel * const parent,
 	 int32_t const x, int32_t const y, int32_t const w, int32_t const h,
-	 const Image* background)
+	 const ImageCatalog::Key background_image_key)
 	:
 	Panel            (parent, x, y, w, h),
 	m_active         (0),
 	m_highlight      (-1),
-	m_pic_background (background)
+	background_image_key_(background_image_key)
 {}
 
 /**
@@ -209,16 +210,17 @@
 	static_assert(2 < kTabPanelButtonSize, "assert(2 < kTabPanelButtonSize) failed.");
 	static_assert(4 < kTabPanelButtonSize, "assert(4 < kTabPanelButtonSize) failed.");
 
-	if (m_pic_background) {
+	if (g_gr->image_catalog().has_key(background_image_key_)) {
+		const Image* background_image = g_gr->cataloged_image(background_image_key_);
 		dst.tile
 			(Rect(Point(0, 0), m_tabs.size() * kTabPanelButtonSize, kTabPanelButtonSize - 2),
-			 m_pic_background, Point(get_x(), get_y()));
+			 background_image, Point(get_x(), get_y()));
 		assert(kTabPanelButtonSize - 2 <= get_h());
 		dst.tile
 			(Rect
 			 (Point(0, kTabPanelButtonSize - 2),
 			  get_w(), get_h() - kTabPanelButtonSize + 2),
-			 m_pic_background,
+			 background_image,
 			 Point(get_x(), get_y() + kTabPanelButtonSize - 2));
 	}
 

=== modified file 'src/ui_basic/tabpanel.h'
--- src/ui_basic/tabpanel.h	2014-09-14 11:31:58 +0000
+++ src/ui_basic/tabpanel.h	2014-12-05 20:26:47 +0000
@@ -22,6 +22,7 @@
 
 #include <vector>
 
+#include "graphic/image_catalog.h"
 #include "ui_basic/panel.h"
 
 namespace UI {
@@ -68,12 +69,13 @@
 struct TabPanel : public Panel {
 	friend struct Tab;
 
-	TabPanel(Panel * parent, int32_t x, int32_t y, const Image* background);
+	TabPanel(Panel * parent, int32_t x, int32_t y,
+				const ImageCatalog::Key background_image_key = ImageCatalog::Key::kUnknownImage);
 	// For Fullscreen menus
 	TabPanel
 		(Panel * parent,
 		 int32_t x, int32_t y, int32_t w, int32_t h,
-		 const Image* background);
+		 const ImageCatalog::Key background_image_key = ImageCatalog::Key::kUnknownImage);
 
 	uint32_t add
 		(const std::string & name,
@@ -107,7 +109,7 @@
 	uint32_t         m_active;         ///< index of the currently active tab
 	int32_t          m_highlight;      ///< index of the highlighted button
 
-	const Image* m_pic_background; ///< picture used to draw background
+	const ImageCatalog::Key background_image_key_; ///< picture used to draw background
 };
 }
 

=== modified file 'src/ui_basic/window.cc'
--- src/ui_basic/window.cc	2014-11-24 07:25:21 +0000
+++ src/ui_basic/window.cc	2014-12-05 20:26:47 +0000
@@ -84,15 +84,15 @@
 		_drag_start_win_x(0), _drag_start_win_y(0),
 		_drag_start_mouse_x(0), _drag_start_mouse_y(0),
 		m_pic_lborder
-			(g_gr->images().get("pics/win_l_border.png")),
+			(g_gr->cataloged_image(ImageCatalog::Key::kWindowBorderLeft)),
 		m_pic_rborder
-			(g_gr->images().get("pics/win_r_border.png")),
+			(g_gr->cataloged_image(ImageCatalog::Key::kWindowBorderRight)),
 		m_pic_top
-			(g_gr->images().get("pics/win_top.png")),
+			(g_gr->cataloged_image(ImageCatalog::Key::kWindowBorderTop)),
 		m_pic_bottom
-			(g_gr->images().get("pics/win_bot.png")),
+			(g_gr->cataloged_image(ImageCatalog::Key::kWindowBorderBottom)),
 		m_pic_background
-			(g_gr->images().get("pics/win_bg.png")),
+			(g_gr->cataloged_image(ImageCatalog::Key::kWindowBackground)),
 		m_center_panel(nullptr),
 		m_fastclick_panel(nullptr)
 {

=== modified file 'src/ui_fsmenu/base.cc'
--- src/ui_fsmenu/base.cc	2014-12-04 06:52:04 +0000
+++ src/ui_fsmenu/base.cc	2014-12-05 20:26:47 +0000
@@ -44,16 +44,16 @@
 /**
  * Initialize a pre-game menu
  *
- * Args: bgpic  name of the background picture
+ * Args: background_image_key ImageCatalog key for the background picture
  */
-FullscreenMenuBase::FullscreenMenuBase(char const* const bgpic)
+FullscreenMenuBase::FullscreenMenuBase(ImageCatalog::Key background_image_key)
    : UI::Panel(nullptr, 0, 0, g_gr->get_xres(), g_gr->get_yres()) {
 	textstyle_small_ = UI::TextStyle::ui_small();
 	textstyle_small_.font = UI::Font::get(ui_fn(), fs_small());
 
 	textstyle_big_ = UI::TextStyle::ui_big();
 	textstyle_big_.font = UI::Font::get(ui_fn(), fs_big());
-	background_image_ = (boost::format("pics/%s") % bgpic).str();
+	background_image_key_ = background_image_key;
 }
 
 FullscreenMenuBase::~FullscreenMenuBase()
@@ -65,7 +65,7 @@
  * Draw the background / splash screen
 */
 void FullscreenMenuBase::draw(RenderTarget & dst) {
-	const Image* bg = g_gr->images().get(background_image_);
+	const Image* bg = g_gr->cataloged_image(background_image_key_);
 	dst.blitrect_scale(Rect(0, 0, get_w(), get_h()), bg, Rect(0, 0, bg->width(), bg->height()));
 }
 

=== modified file 'src/ui_fsmenu/base.h'
--- src/ui_fsmenu/base.h	2014-12-04 06:52:04 +0000
+++ src/ui_fsmenu/base.h	2014-12-05 20:26:47 +0000
@@ -24,6 +24,7 @@
 #include <memory>
 
 #include "graphic/font.h"
+#include "graphic/image_catalog.h"
 #include "ui_basic/panel.h"
 
 class Image;
@@ -35,7 +36,7 @@
  */
 class FullscreenMenuBase : public UI::Panel {
 public:
-	FullscreenMenuBase(char const * bgpic);
+	FullscreenMenuBase(ImageCatalog::Key background_image_key);
 	virtual ~FullscreenMenuBase();
 
 	void draw(RenderTarget &) override;
@@ -54,7 +55,7 @@
 private:
 	UI::TextStyle textstyle_big_;
 	UI::TextStyle textstyle_small_;
-	std::string background_image_;
+	ImageCatalog::Key background_image_key_;
 };
 
 

=== modified file 'src/ui_fsmenu/campaign_select.cc'
--- src/ui_fsmenu/campaign_select.cc	2014-10-31 07:40:54 +0000
+++ src/ui_fsmenu/campaign_select.cc	2014-12-05 20:26:47 +0000
@@ -133,11 +133,11 @@
 }
 
 /// Pictorial descriptions of difficulty levels.
-static char const * const difficulty_picture_filenames[] = {
-	"pics/novalue.png",
-	"pics/easy.png",
-	"pics/challenging.png",
-	"pics/hard.png"
+static const std::vector<ImageCatalog::Key> difficulty_picture_keys = {
+	ImageCatalog::Key::kNoValue,
+	ImageCatalog::Key::kFullscreenDifficulty2,
+	ImageCatalog::Key::kFullscreenDifficulty3,
+	ImageCatalog::Key::kFullscreenDifficulty4
 };
 
 
@@ -192,7 +192,7 @@
 	m_table.clear();
 
 	// Read in the campaign config
-	Profile prof("campaigns/campaigns.conf", nullptr, "maps");
+	Profile prof("data/campaigns/campaigns.conf", nullptr, "maps");
 	Section & s = prof.get_safe_section("global");
 
 	// Read in campvis-file
@@ -221,12 +221,7 @@
 		if (c.get_bool(csection.c_str())) {
 
 			uint32_t difficulty = s.get_int(cdifficulty.c_str());
-			if
-				(sizeof (difficulty_picture_filenames)
-				 /
-				 sizeof(*difficulty_picture_filenames)
-				 <=
-				 difficulty) {
+			if (difficulty >= difficulty_picture_keys.size()) {
 				difficulty = 0;
 			}
 
@@ -241,7 +236,7 @@
 			m_campaigns_data.push_back(campaign_data);
 
 			UI::Table<uintptr_t>::EntryRecord& tableEntry = m_table.add(i);
-			tableEntry.set_picture(0, g_gr->images().get(difficulty_picture_filenames[difficulty]));
+			tableEntry.set_picture(0, g_gr->cataloged_image(difficulty_picture_keys.at(difficulty)));
 			tableEntry.set_string(1, campaign_data.tribename);
 			tableEntry.set_string(2, campaign_data.name);
 		}
@@ -447,7 +442,7 @@
 	Profile* prof;
 	std::string campsection;
 	if (m_is_tutorial) {
-		prof = new Profile("campaigns/tutorials.conf", nullptr, "maps");
+		prof = new Profile("data/campaigns/tutorials.conf", nullptr, "maps");
 
 		// Set subtitle of the page
 		const std::string subtitle1 = _("Pick a tutorial from the list, then hit \"OK\".");
@@ -459,7 +454,7 @@
 		campsection = "tutorials";
 
 	} else {
-		prof = new Profile("campaigns/campaigns.conf", nullptr, "maps");
+		prof = new Profile("data/campaigns/campaigns.conf", nullptr, "maps");
 
 		Section & global_s = prof->get_safe_section("global");
 
@@ -496,7 +491,9 @@
 
 			UI::Table<uintptr_t>::EntryRecord& tableEntry = m_table.add(i);
 			tableEntry.set_string(0, (boost::format("%u") % scenario_data.index).str());
-			tableEntry.set_picture(1, g_gr->images().get("pics/ls_wlmap.png"), scenario_data.name);
+			tableEntry.set_picture(1,
+										  g_gr->cataloged_image(ImageCatalog::Key::kFilesWLMap),
+										  scenario_data.name);
 		}
 
 		// Increase counter & mapsection

=== modified file 'src/ui_fsmenu/campaign_select.h'
--- src/ui_fsmenu/campaign_select.h	2014-11-13 08:39:14 +0000
+++ src/ui_fsmenu/campaign_select.h	2014-12-05 20:26:47 +0000
@@ -41,6 +41,8 @@
 public:
 	FullscreenMenuCampaignSelect();
 
+	static constexpr int kMaxDifficulty = 4;
+
 	int32_t get_campaign();
 
 protected:

=== modified file 'src/ui_fsmenu/editor.cc'
--- src/ui_fsmenu/editor.cc	2014-11-13 11:29:20 +0000
+++ src/ui_fsmenu/editor.cc	2014-12-05 20:26:47 +0000
@@ -34,13 +34,13 @@
 	vbox(this, m_box_x, m_box_y, UI::Box::Vertical,
 		  m_butw, get_h() - vbox.get_y(), m_padding),
 	new_map
-		(&vbox, "new_map", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "new_map", 0, 0, m_butw, m_buth, m_button_background,
 		 _("New Map"), "", true, false),
 	load_map
-		(&vbox, "load_map", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "load_map", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Load Map"), "", true, false),
 	back
-		(&vbox, "back", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "back", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Back"), "", true, false)
 {
 	new_map.sigclicked.connect

=== modified file 'src/ui_fsmenu/editor.h'
--- src/ui_fsmenu/editor.h	2014-12-04 06:35:12 +0000
+++ src/ui_fsmenu/editor.h	2014-12-05 20:26:47 +0000
@@ -33,7 +33,7 @@
 public:
 	FullscreenMenuEditor();
 
-	enum class MenuTarget { kBack = UI::Panel::dying_code, kNewMap, kLoadMap };
+	enum class MenuTarget {kBack = UI::Panel::dying_code, kNewMap, kLoadMap};
 
 private:
 	UI::Textarea title;

=== modified file 'src/ui_fsmenu/fileview.cc'
--- src/ui_fsmenu/fileview.cc	2014-09-10 14:48:40 +0000
+++ src/ui_fsmenu/fileview.cc	2014-12-05 20:26:47 +0000
@@ -59,7 +59,7 @@
 FullscreenMenuTextView::FullscreenMenuTextView
 	(const std::string & filename)
 	:
-	FullscreenMenuBase("fileviewmenu.jpg"),
+	FullscreenMenuBase(ImageCatalog::Key::kFullscreenFileWiew),
 
 	title (this, get_w() * 3 / 50, get_h() / 10),
 
@@ -71,7 +71,7 @@
 	close_button
 		(this, "close",
 		 get_w() * 3 / 8, get_h() * 9 / 10, get_w() / 4, get_h() * 9 / 200,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("Close"), std::string(), true, false)
 {
 	close_button.sigclicked.connect(boost::bind(&FullscreenMenuTextView::end_modal, boost::ref(*this), 0));

=== modified file 'src/ui_fsmenu/internet_lobby.cc'
--- src/ui_fsmenu/internet_lobby.cc	2014-10-27 10:31:04 +0000
+++ src/ui_fsmenu/internet_lobby.cc	2014-12-05 20:26:47 +0000
@@ -37,7 +37,7 @@
 FullscreenMenuInternetLobby::FullscreenMenuInternetLobby
 	(char const * const nick, char const * const pwd, bool registered)
 :
-	FullscreenMenuBase("internetmenu.jpg"),
+	FullscreenMenuBase(ImageCatalog::Key::kFullscreenInternet),
 
 // Values for alignment and size
 	m_butx (get_w() * 13 / 40),
@@ -80,23 +80,23 @@
 	joingame
 		(this, "join_game",
 		 get_w() * 17 / 25, get_h() * 55 / 100, m_butw, m_buth,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("Join this game"), std::string(), false, false),
 	hostgame
 		(this, "host_game",
 		 get_w() * 17 / 25, get_h() * 81 / 100, m_butw, m_buth,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("Open a new game"), std::string(), true, false),
 	back
 		(this, "back",
 		 get_w() * 17 / 25, get_h() * 90 / 100, m_butw, m_buth,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("Back"), std::string(), true, false),
 
 // Edit boxes
 	servername
 		(this, get_w() * 17 / 25, get_h() * 68 / 100, m_butw, m_buth,
-		 g_gr->images().get("pics/but2.png")),
+		 ImageCatalog::Key::kButton2),
 
 // List
 	clientsonline
@@ -154,17 +154,17 @@
 
 	// prepare the lists
 	clientsonline .set_font(m_fn, m_fs);
-	std::string t_tip = (boost::format("%s%s%s%s%s%s%s%s%s%s")
-		% "<rt><p><font underline=yes>"
+	std::string t_tip = (boost::format("<rt><p><font underline=yes>%s</font>"
+												  "<br><img src=%s> %s"
+												  "<br><img src=%s> %s"
+												  "<br><img src=%s> %s</p></rt>")
 		% _("User Status")
-		% "</font><br>"
-		% "<img src=pics/roadb_yellow.png> "
+		% g_gr->image_catalog().filepath(ImageCatalog::Key::kOverlaysRoadbuildingAscending).c_str()
 		% _("Registered")
-		% "<br><img src=pics/roadb_green.png> "
+		% g_gr->image_catalog().filepath(ImageCatalog::Key::kOverlaysRoadbuildingLevel).c_str()
 		% _("Administrator")
-		% "<br><img src=pics/roadb_red.png> "
-		% _("Unregistered")
-		%  "</p></rt>").str();
+		% g_gr->image_catalog().filepath(ImageCatalog::Key::kOverlaysRoadbuildingSteepAscending).c_str()
+		% _("Unregistered")).str();
 	clientsonline .add_column(22, "*", t_tip);
 	clientsonline .add_column((m_lisw - 22) * 3 / 8, _("Name"));
 	clientsonline .add_column((m_lisw - 22) * 2 / 8, _("Points"));
@@ -237,12 +237,12 @@
 		const Image* pic;
 		if (games.at(i).connectable) {
 			if (games.at(i).build_id == build_id())
-				pic = g_gr->images().get("pics/continue.png");
+				pic = g_gr->cataloged_image(ImageCatalog::Key::kActionContinue);
 			else {
-				pic = g_gr->images().get("pics/different.png");
+				pic = g_gr->cataloged_image(ImageCatalog::Key::kActionDifferent);
 			}
 		} else {
-			pic = g_gr->images().get("pics/stop.png");
+			pic = g_gr->cataloged_image(ImageCatalog::Key::kActionStop);
 		}
 		// If one of the servers has the same name as the local name of the
 		// clients server, we disable the 'hostgame' button to avoid having more
@@ -292,16 +292,16 @@
 		const Image* pic;
 		switch (convert_clienttype(client.type)) {
 			case 0: // UNREGISTERED
-				pic = g_gr->images().get("pics/roadb_red.png");
+				pic = g_gr->cataloged_image(ImageCatalog::Key::kOverlaysRoadbuildingSteepAscending);
 				er.set_picture(0, pic);
 				break;
 			case 1: // REGISTERED
-				pic = g_gr->images().get("pics/roadb_yellow.png");
+				pic = g_gr->cataloged_image(ImageCatalog::Key::kOverlaysRoadbuildingAscending);
 				er.set_picture(0, pic);
 				break;
 			case 2: // SUPERUSER
 			case 3: // BOT
-				pic = g_gr->images().get("pics/roadb_green.png");
+				pic = g_gr->cataloged_image(ImageCatalog::Key::kOverlaysRoadbuildingLevel);
 				er.set_color(RGBColor(0, 255, 0));
 				er.set_picture(0, pic);
 				break;

=== modified file 'src/ui_fsmenu/intro.cc'
--- src/ui_fsmenu/intro.cc	2014-11-29 20:37:34 +0000
+++ src/ui_fsmenu/intro.cc	2014-12-05 20:26:47 +0000
@@ -20,10 +20,11 @@
 #include "ui_fsmenu/intro.h"
 
 #include "base/i18n.h"
+#include "graphic/graphic.h"
 
 
 FullscreenMenuIntro::FullscreenMenuIntro()
-	: FullscreenMenuBase("splash.jpg"),
+	: FullscreenMenuBase(ImageCatalog::Key::kLoadscreenSplash),
 
 // Text area
 m_message

=== modified file 'src/ui_fsmenu/launch_mpg.cc'
--- src/ui_fsmenu/launch_mpg.cc	2014-10-28 08:16:53 +0000
+++ src/ui_fsmenu/launch_mpg.cc	2014-12-05 20:26:47 +0000
@@ -64,7 +64,7 @@
 		UI::Button * btn = new UI::Button
 			(this, "map",
 			 space, y, butw, buth,
-			 g_gr->images().get("pics/but0.png"),
+			 ImageCatalog::Key::kButton0,
 			 _("Map"), _("Select a map"), true, false);
 		btn->sigclicked.connect
 			(boost::bind
@@ -74,7 +74,7 @@
 		btn = new UI::Button
 			(this, "saved_game",
 			 space, y + buth + space, butw, buth,
-			 g_gr->images().get("pics/but0.png"),
+			 ImageCatalog::Key::kButton0,
 			 _("Saved game"), _("Select a saved game"), true, false);
 		btn->sigclicked.connect
 			(boost::bind
@@ -84,7 +84,7 @@
 		btn = new UI::Button
 			(this, "cancel",
 			 space + butw / 4, y + 3 * buth + 2 * space, butw / 2, buth,
-			 g_gr->images().get("pics/but1.png"),
+			 ImageCatalog::Key::kButton1,
 			 _("Cancel"), _("Cancel selection"), true, false);
 		btn->sigclicked.connect
 			(boost::bind
@@ -108,7 +108,7 @@
 FullscreenMenuLaunchMPG::FullscreenMenuLaunchMPG
 	(GameSettingsProvider * const settings, GameController * const ctrl)
 	:
-	FullscreenMenuBase("launchMPGmenu.jpg"),
+	FullscreenMenuBase(ImageCatalog::Key::kFullscreenLaunchMPG),
 
 // Values for alignment and size
 	m_butw (get_w() / 4),
@@ -126,29 +126,29 @@
 	m_change_map_or_save
 		(this, "change_map_or_save",
 		 m_right_column_x + m_butw - m_buth, get_h() * 3 / 20, m_buth, m_buth,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/menu_toggle_minimap.png"),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kMenuMinimap),
 		 _("Change map or saved game"), false, false),
 	m_ok
 		(this, "ok",
 		 m_right_column_x, get_h() * 12 / 20 - 2 * m_label_height, m_butw, m_buth,
-		 g_gr->images().get("pics/but2.png"),
+		 ImageCatalog::Key::kButton2,
 		 _("Start game"), std::string(), false, false),
 	m_back
 		(this, "back",
 		 m_right_column_x, get_h() * 218 / 240, m_butw, m_buth,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("Back"), std::string(), true, false),
 	m_wincondition
 		(this, "win_condition",
 		 m_right_column_x, get_h() * 11 / 20 - 2 * m_label_height, m_butw, m_buth,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 "", std::string(), false, false),
 	m_help_button
 		(this, "help",
 		 m_right_column_x + m_butw - m_buth, get_h() / 100, m_buth, m_buth,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/menu_help.png"),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kHelp),
 		 _("Show the help window"), true, false),
 
 // Text labels
@@ -599,7 +599,7 @@
 		m_settings->set_player_tribe(i - 1, player_save_tribe[i - 1]);
 
 		// get translated tribename
-		Profile tribe((new std::string("tribes/" + player_save_tribe[i - 1] + "/conf"))->c_str(),
+		Profile tribe((new std::string("data/tribes/" + player_save_tribe[i - 1] + "/conf"))->c_str(),
 				nullptr, "tribe_" + player_save_tribe[i - 1]);
 		Section & global = tribe.get_safe_section("tribe");
 		player_save_tribe[i - 1] = global.get_safe_string("name");
@@ -683,24 +683,25 @@
 		(_
 		 ("The player with the color of the flag. If more than one client selected the same color, these "
 		  "share control over the player (‘shared kingdom mode’)."),
-		 "pics/genstats_enable_plr_08.png");
+		 ImageCatalog::Key::kEditorToolPortSpaceSet);
 	m_help->add_picture_li
 		(_("Spectator mode, meaning you can see everything, but cannot control any player"),
-		"pics/menu_tab_watch.png");
+		 ImageCatalog::Key::kMenuWatch);
 	m_help->add_heading(_("Player settings"));
 	m_help->add_paragraph
 		(_
 		 ("In the middle are the settings for the players. To start a game, each player must be one of the "
 		  "following:"));
 	m_help->add_picture_li
-		(_("Connected to one or more clients (see ‘Client settings’)."), "pics/genstats_nrworkers.png");
+		(_("Connected to one or more clients (see ‘Client settings’)."),
+		 ImageCatalog::Key::kStatsWorkersNumber);
 	m_help->add_picture_li
 		(_
 		 ("Connected to a computer player (the face in the picture as well as the mouse hover texts "
-		  "indicate the strength of the currently selected computer player)."),
-		"pics/ai_Normal.png");
-	m_help->add_picture_li(_("Set as shared in starting position for another player."), "pics/shared_in.png");
-	m_help->add_picture_li(_("Closed."), "pics/stop.png");
+		  "indicate the strength of the currently selected computer player)."), ImageCatalog::Key::kAiNormal);
+	m_help->add_picture_li(_("Set as shared in starting position for another player."),
+								  ImageCatalog::Key::kFullscreenSharedIn);
+	m_help->add_picture_li(_("Closed."), ImageCatalog::Key::kActionStop);
 	m_help->add_block
 		(_
 		 ("The latter three can only be set by the hosting client by left-clicking the ‘type’ button of a "

=== modified file 'src/ui_fsmenu/launch_spg.cc'
--- src/ui_fsmenu/launch_spg.cc	2014-10-04 09:40:18 +0000
+++ src/ui_fsmenu/launch_spg.cc	2014-12-05 20:26:47 +0000
@@ -48,7 +48,7 @@
 	(GameSettingsProvider * const settings, GameController * const ctrl,
 	 bool /* autolaunch */)
 	:
-	FullscreenMenuBase("ui_fsmenu.jpg"),
+	FullscreenMenuBase(ImageCatalog::Key::kFullscreen),
 
 // Values for alignment and size
 	m_butw (get_w() / 4),
@@ -58,22 +58,22 @@
 	m_select_map
 		(this, "select_map",
 		 get_w() * 7 / 10, get_h() * 3 / 10, m_butw, m_buth,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("Select map"), std::string(), false, false),
 	m_wincondition
 		(this, "win_condition",
 		 get_w() * 7 / 10, get_h() * 4 / 10 + m_buth, m_butw, m_buth,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 "", std::string(), false, false),
 	m_back
 		(this, "back",
 		 get_w() * 7 / 10, get_h() * 17 / 20, m_butw, m_buth,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("Back"), std::string(), true, false),
 	m_ok
 		(this, "ok",
 		 get_w() * 7 / 10, get_h() * 9 / 10, m_butw, m_buth,
-		 g_gr->images().get("pics/but2.png"),
+		 ImageCatalog::Key::kButton2,
 		 _("Start game"), std::string(), false, false),
 
 // Text labels
@@ -129,7 +129,7 @@
 
 	m_lua = new LuaInterface();
 	std::set<std::string> win_conditions =
-	   filter(g_fs->list_directory("scripting/win_conditions"),
+	   filter(g_fs->list_directory("data/scripting/win_conditions"),
 	          [](const std::string& fn) {return boost::ends_with(fn, ".lua");});
 
 	m_win_condition_scripts.insert(
@@ -157,15 +157,17 @@
 	m_ok.set_font(font_small());
 
 	uint32_t y = get_h() * 3 / 10 - m_buth;
-	char posIco[42];
 	for (uint32_t i = 0; i < MAX_PLAYERS; ++i) {
-		sprintf(posIco, "pics/fsel_editor_set_player_0%i_pos.png", i + 1);
+		ImageCatalog::Key offset = ImageCatalog::Key::kPlayerStartingPosSmall1;
+		const Image* player_image =
+				g_gr->cataloged_image(static_cast<ImageCatalog::Key>(i + static_cast<uint8_t>(offset)));
+
 		m_pos[i] =
 			new UI::Button
 				(this, "switch_to_position",
 				 get_w() / 100, y += m_buth, get_h() * 17 / 500, get_h() * 17 / 500,
-				 g_gr->images().get("pics/but1.png"),
-				 g_gr->images().get(posIco),
+				 ImageCatalog::Key::kButton1,
+				 player_image,
 				 _("Switch to position"), false);
 		m_pos[i]->sigclicked.connect
 			(boost::bind(&FullscreenMenuLaunchSPG::switch_to_position, boost::ref(*this), i));

=== modified file 'src/ui_fsmenu/load_map_or_game.cc'
--- src/ui_fsmenu/load_map_or_game.cc	2014-11-23 11:38:50 +0000
+++ src/ui_fsmenu/load_map_or_game.cc	2014-12-05 20:26:47 +0000
@@ -36,7 +36,7 @@
 /// This class defines common coordinates for these UI screens.
 /// It also defines common buttons.
 FullscreenMenuLoadMapOrGame::FullscreenMenuLoadMapOrGame(bool sort_descending) :
-		FullscreenMenuBase("choosemapmenu.jpg"),
+		FullscreenMenuBase(ImageCatalog::Key::kFullscreenChooseMap),
 
 		// Values for alignment and size
 		m_padding(4),
@@ -57,12 +57,12 @@
 		m_back
 		  (this, "back",
 			m_right_column_x, m_buty, m_butw, m_buth,
-			g_gr->images().get("pics/but0.png"),
+			ImageCatalog::Key::kButton0,
 			_("Back"), std::string(), true, false),
 		m_ok
 		  (this, "ok",
 			get_w() - m_right_column_margin - m_butw, m_buty, m_butw, m_buth,
-			g_gr->images().get("pics/but2.png"),
+			ImageCatalog::Key::kButton2,
 			_("OK"), std::string(), false, false),
 		m_table(this, m_tablex, m_tabley, m_tablew, m_tableh, sort_descending)
 	{}

=== modified file 'src/ui_fsmenu/loadgame.cc'
--- src/ui_fsmenu/loadgame.cc	2014-12-03 19:11:31 +0000
+++ src/ui_fsmenu/loadgame.cc	2014-12-05 20:26:47 +0000
@@ -93,7 +93,7 @@
 		(this, "delete",
 		 m_right_column_x, m_buty - m_buth - 2 * m_padding,
 		 m_butw, m_buth,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("Delete"), std::string(), false, false),
 
 	m_ta_errormessage

=== modified file 'src/ui_fsmenu/main.cc'
--- src/ui_fsmenu/main.cc	2014-11-13 11:29:20 +0000
+++ src/ui_fsmenu/main.cc	2014-12-05 20:26:47 +0000
@@ -26,41 +26,41 @@
 #include "graphic/graphic.h"
 
 FullscreenMenuMain::FullscreenMenuMain() :
-	FullscreenMenuMainMenu("mainmenu.jpg"),
+	FullscreenMenuMainMenu(ImageCatalog::Key::kFullscreenMain),
 
 	// Buttons
 	// This box needs to be a bit higher than in the other menus, because we have a lot of buttons
 	vbox(this, m_box_x, m_box_y - m_buth, UI::Box::Vertical,
 		  m_butw, get_h() - vbox.get_y(), m_padding),
 	playtutorial
-		(&vbox, "play_tutorial", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "play_tutorial", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Play Tutorial"), "", true, false),
 	singleplayer
-		(&vbox, "single_player", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "single_player", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Single Player"), "", true, false),
 	multiplayer
-		(&vbox, "multi_player", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "multi_player", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Multiplayer"), "", true, false),
 	replay
-		(&vbox, "replay", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "replay", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Watch Replay"), "", true, false),
 	editor
-		(&vbox, "editor", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "editor", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Editor"), "", true, false),
 	options
-		(&vbox, "options", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "options", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Options"), "", true, false),
 	readme
-		(&vbox, "readme", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "readme", 0, 0, m_butw, m_buth, m_button_background,
 		 _("View Readme"), "", true, false),
 	license
-		(&vbox, "license", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "license", 0, 0, m_butw, m_buth, m_button_background,
 		 _("License"), "", true, false),
 	authors
-		(&vbox, "authors", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "authors", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Authors"), "", true, false),
 	exit
-		(&vbox, "exit", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "exit", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Exit Widelands"), "", true, false),
 
 	// Textlabels

=== modified file 'src/ui_fsmenu/main_menu.cc'
--- src/ui_fsmenu/main_menu.cc	2014-11-13 11:29:20 +0000
+++ src/ui_fsmenu/main_menu.cc	2014-12-05 20:26:47 +0000
@@ -20,11 +20,11 @@
 #include "ui_fsmenu/main_menu.h"
 
 FullscreenMenuMainMenu::FullscreenMenuMainMenu():
-	FullscreenMenuMainMenu("ui_fsmenu.jpg")
+	FullscreenMenuMainMenu(ImageCatalog::Key::kFullscreen)
 	{}
 
-FullscreenMenuMainMenu::FullscreenMenuMainMenu(const char* background_image):
-	FullscreenMenuBase(background_image),
+FullscreenMenuMainMenu::FullscreenMenuMainMenu(ImageCatalog::Key background_image_key):
+	FullscreenMenuBase(background_image_key),
 
 	// Values for alignment and size
 	m_box_x(get_w() * 13 / 40),
@@ -33,5 +33,5 @@
 	m_buth(get_h() * 9 / 200),
 	m_title_y(get_h() * 3 / 40),
 	m_padding(m_buth / 3),
-	m_button_background("pics/but3.png")
+	m_button_background(ImageCatalog::Key::kButton3)
 {}

=== modified file 'src/ui_fsmenu/main_menu.h'
--- src/ui_fsmenu/main_menu.h	2014-11-13 11:29:20 +0000
+++ src/ui_fsmenu/main_menu.h	2014-12-05 20:26:47 +0000
@@ -29,13 +29,13 @@
 class FullscreenMenuMainMenu : public FullscreenMenuBase {
 public:
 
-	/// Calls FullscreenMenuMainMenu(char const * background_image)
+	/// Calls FullscreenMenuMainMenu(ImageCatalog::Key background_image_key)
 	/// with a default background image
 	FullscreenMenuMainMenu();
 
 	/// Sets the background image and assigns values
 	/// for alignment and size, depending on screen size
-	FullscreenMenuMainMenu(char const * background_image);
+	FullscreenMenuMainMenu(ImageCatalog::Key background_image_key);
 
 protected:
 	const uint32_t m_box_x, m_box_y;
@@ -43,7 +43,7 @@
 	const uint32_t m_title_y;
 	const uint32_t m_padding;
 
-	const std::string m_button_background;
+	const ImageCatalog::Key m_button_background;
 };
 
 #endif  // end of include guard: WL_UI_FSMENU_MAIN_MENU_H

=== modified file 'src/ui_fsmenu/mapselect.cc'
--- src/ui_fsmenu/mapselect.cc	2014-10-29 06:00:52 +0000
+++ src/ui_fsmenu/mapselect.cc	2014-12-05 20:26:47 +0000
@@ -79,7 +79,7 @@
 	m_is_scenario(false),
 
 	// Runtime variables
-	m_curdir("maps"), m_basedir("maps"),
+	m_curdir("data/maps"), m_basedir("data/maps"),
 
 	m_settings(settings),
 	m_ctrl(ctrl)
@@ -372,7 +372,7 @@
  * be taken to sort uncompressed maps (which look like and really are
  * directories) with the files.
  *
- * The search starts in \ref m_curdir ("..../maps") and there is no possibility
+ * The search starts in \ref m_curdir ("..../data/maps") and there is no possibility
  * to move further up. If the user moves down into subdirectories, we insert an
  * entry to move back up.
  *
@@ -414,7 +414,7 @@
 
 			te.set_string(col_players, "");
 			te.set_picture
-				(col_name,  g_gr->images().get("pics/ls_dir.png"),
+				(col_name,  g_gr->cataloged_image(ImageCatalog::Key::kFilesDirectory),
 				mapdata.localized_name);
 			te.set_string(col_size, "");
 
@@ -436,7 +436,7 @@
 
 			MapData mapdata;
 			mapdata.filename = name;
-			if (strcmp (name, "maps/MP Scenarios") == 0) {
+			if (strcmp (name, "data/maps/MP Scenarios") == 0) {
 				/** TRANSLATORS: Directory name for MP Scenarios in map selection */
 				mapdata.localized_name = _("Multiplayer Scenarios");
 			} else {
@@ -447,7 +447,9 @@
 			UI::Table<uintptr_t const>::EntryRecord & te = m_table.add(m_maps_data.size() - 1);
 
 			te.set_string(col_players, "");
-			te.set_picture(col_name, g_gr->images().get("pics/ls_dir.png"), mapdata.localized_name);
+			te.set_picture(col_name,
+								g_gr->cataloged_image(ImageCatalog::Key::kFilesDirectory),
+								mapdata.localized_name);
 			te.set_string(col_size, "");
 
 			++ndirs;
@@ -512,10 +514,11 @@
 						map_displayname = mapdata.name;
 					}
 					te.set_picture
-						(col_name,  g_gr->images().get
+						(col_name,  g_gr->cataloged_image
 						 (dynamic_cast<WidelandsMapLoader*>(ml.get()) ?
-							  (mapdata.scenario ? "pics/ls_wlscenario.png" : "pics/ls_wlmap.png") :
-						"pics/ls_s2map.png"),
+							  (mapdata.scenario ? ImageCatalog::Key::kFilesScenario :
+														 ImageCatalog::Key::kFilesWLMap) :
+							  ImageCatalog::Key::kFilesS2Map),
 						map_displayname);
 
 					te.set_string(col_size, (boost::format("%u x %u") % mapdata.width % mapdata.height).str());
@@ -570,7 +573,9 @@
 				te.set_string(col_players, (boost::format("(%i)") % mapdata.nrplayers).str());
 				te.set_picture
 					(col_name,
-					 g_gr->images().get((mapdata.scenario ? "pics/ls_wlscenario.png" : "pics/ls_wlmap.png")),
+					 g_gr->cataloged_image((mapdata.scenario ?
+														ImageCatalog::Key::kFilesScenario :
+														ImageCatalog::Key::kFilesWLMap)),
 					 mapdata.name.c_str());
 				te.set_string(col_size, (boost::format("%u x %u") % mapdata.width % mapdata.height).str());
 
@@ -595,8 +600,8 @@
 
 				te.set_string(col_players, (boost::format("(%i)") % mapdata.nrplayers).str());
 				te.set_picture
-					(col_name, g_gr->images().get
-					 ((mapdata.scenario ? "pics/ls_wlscenario.png" : "pics/ls_wlmap.png")),
+					(col_name, g_gr->cataloged_image
+					 ((mapdata.scenario ? ImageCatalog::Key::kFilesScenario : ImageCatalog::Key::kFilesWLMap)),
 					 mapdata.name.c_str());
 				te.set_string(col_size, (boost::format("%u x %u") % mapdata.width % mapdata.height).str());
 			}

=== modified file 'src/ui_fsmenu/multiplayer.cc'
--- src/ui_fsmenu/multiplayer.cc	2014-11-13 11:29:20 +0000
+++ src/ui_fsmenu/multiplayer.cc	2014-12-05 20:26:47 +0000
@@ -37,13 +37,13 @@
 	vbox(this, m_box_x, m_box_y, UI::Box::Vertical,
 		  m_butw, get_h() - vbox.get_y(), m_padding),
 	metaserver
-		(&vbox, "metaserver", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "metaserver", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Internet game"), "", true, false),
 	lan
-		(&vbox, "lan", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "lan", 0, 0, m_butw, m_buth, m_button_background,
 		 _("LAN / Direct IP"), "", true, false),
 	back
-		(&vbox, "back", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "back", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Back"), "", true, false)
 {
 	metaserver.sigclicked.connect(boost::bind(&FullscreenMenuMultiPlayer::internet_login, boost::ref(*this)));
@@ -79,8 +79,8 @@
 			new UI::Button
 				(this, "login_dialog",
 				 m_box_x + m_butw + m_buth / 4, get_h() * 6 / 25, m_buth, m_buth,
-				 g_gr->images().get("pics/but1.png"),
-				 g_gr->images().get("pics/continue.png"),
+				 ImageCatalog::Key::kButton1,
+				 g_gr->cataloged_image(ImageCatalog::Key::kActionContinue),
 				 _("Show login dialog"), true, false);
 		showloginbox->sigclicked.connect
 			(boost::bind

=== modified file 'src/ui_fsmenu/netsetup_lan.cc'
--- src/ui_fsmenu/netsetup_lan.cc	2014-09-29 19:25:24 +0000
+++ src/ui_fsmenu/netsetup_lan.cc	2014-12-05 20:26:47 +0000
@@ -28,7 +28,7 @@
 #include "wui/text_constants.h"
 
 FullscreenMenuNetSetupLAN::FullscreenMenuNetSetupLAN () :
-	FullscreenMenuBase("ui_fsmenu.jpg"), //  TODO(unknown): change this
+	FullscreenMenuBase(ImageCatalog::Key::kFullscreen),
 
 // Values for alignment and size
 	m_butx (get_w() * 13 / 40),
@@ -58,32 +58,32 @@
 	joingame
 		(this, "join_game",
 		 get_w() * 16 / 25, get_h() * 5333 / 10000, m_butw, m_buth,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("Join this game"), std::string(), true, false),
 	hostgame
 		(this, "host_game",
 		 get_w() * 16 / 25, get_h() * 6083 / 10000, m_butw, m_buth,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("Host a new game"), std::string(), true, false),
 	back
 		(this, "back",
 		 get_w() * 16 / 25, get_h() * 8333 / 10000, m_butw, m_buth,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("Back"), std::string(), true, false),
 	loadlasthost
 		(this, "load_previous_host",
 		 get_w() * 171 / 200, get_h() * 19 / 40, m_buth, m_buth,
-		 g_gr->images().get("pics/but1.png"),
-		 g_gr->images().get("pics/menu_load_game.png"),
+		 ImageCatalog::Key::kButton1,
+		 g_gr->cataloged_image(ImageCatalog::Key::kFullscreenLoadGame),
 		 _("Load previous host"), true, false),
 
 // Edit boxes
 	playername
 		(this, get_w() * 16 / 25, get_h() * 3333 / 10000, m_butw,       m_buth,
-		 g_gr->images().get("pics/but2.png")),
+		 ImageCatalog::Key::kButton2),
 	hostname
 		(this, get_w() * 16 / 25, get_h() * 19 / 40,  get_w() * 17 / 80, m_buth,
-		 g_gr->images().get("pics/but2.png")),
+		 ImageCatalog::Key::kButton2),
 
 // List
 	opengames

=== modified file 'src/ui_fsmenu/options.cc'
--- src/ui_fsmenu/options.cc	2014-11-28 09:02:24 +0000
+++ src/ui_fsmenu/options.cc	2014-12-05 20:26:47 +0000
@@ -54,7 +54,7 @@
 };
 
 void add_languages_to_list(UI::Listselect<std::string>* list, const std::string& language) {
-	Profile ln("txts/languages");
+	Profile ln("data/i18n/languages");
 	Section* s = &ln.pull_section("languages");
 	bool own_selected = "" == language || "en" == language;
 
@@ -86,7 +86,7 @@
 FullscreenMenuOptions::FullscreenMenuOptions
 		(OptionsCtrl::OptionsStruct opt)
 	:
-	FullscreenMenuBase("optionsmenu.jpg"),
+	FullscreenMenuBase(ImageCatalog::Key::kFullscreenOptions),
 
 // Values for alignment and size
 	m_vbutw   (get_h() * 333 / 10000),
@@ -102,17 +102,17 @@
 	m_advanced_options
 		(this, "advanced_options",
 		 get_w() * 9 / 80, get_h() * 19 / 20, m_butw, m_buth,
-		 g_gr->images().get("pics/but2.png"),
+		 ImageCatalog::Key::kButton2,
 		 _("Advanced Options"), std::string(), true, false),
 	m_cancel
 		(this, "cancel",
 		 get_w() * 51 / 80, get_h() * 19 / 20, m_butw, m_buth,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("Cancel"), std::string(), true, false),
 	m_apply
 		(this, "apply",
 		 get_w() * 3 / 8, get_h() * 19 / 20, m_butw, m_buth,
-		 g_gr->images().get("pics/but2.png"),
+		 ImageCatalog::Key::kButton2,
 		 _("Apply"), std::string(), true, false),
 
 	// Title
@@ -165,7 +165,7 @@
 		 m_hmargin + m_reslist.get_w() - 80, m_label_maxfps.get_y(),
 		 80, m_vbutw,
 		 opt.maxfps, 0, 99, "",
-		 g_gr->images().get("pics/but1.png")),
+		 ImageCatalog::Key::kButton1),
 
 
 	// First options block 'general options', second column
@@ -265,7 +265,7 @@
 		 /** TRANSLATORS: Options: Save game automatically every: */
 		 /** TRANSLATORS: This will have a number added in front of it */
 		 opt.autosave / 60, 0, 100, ngettext("minute", "minutes", opt.autosave / 60),
-		 g_gr->images().get("pics/but1.png"), true),
+		 ImageCatalog::Key::kButton1, true),
 	m_label_autosave
 		(this,
 		 m_dock_windows_to_edges.get_x(),
@@ -283,7 +283,7 @@
 		 /** TRANSLATORS: Options: Remove Replays older than: */
 		 /** TRANSLATORS: This will have a number added in front of it */
 		 opt.remove_replays, 0, 365, ngettext("day", "days", opt.remove_replays),
-		 g_gr->images().get("pics/but1.png"), true),
+		 ImageCatalog::Key::kButton1, true),
 	m_label_remove_replays
 		(this,
 		 m_label_autosave.get_x(),
@@ -453,7 +453,7 @@
 FullscreenMenuAdvancedOptions::FullscreenMenuAdvancedOptions
 	(OptionsCtrl::OptionsStruct const opt)
 	:
-	FullscreenMenuBase("ui_fsmenu.jpg"),
+	FullscreenMenuBase(ImageCatalog::Key::kFullscreen),
 
 // Values for alignment and size
 	m_vbutw   (get_h() * 333 / 10000),
@@ -468,12 +468,12 @@
 	m_cancel
 		(this, "cancel",
 		 get_w() * 41 / 80, get_h() * 19 / 20, m_butw, m_buth,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("Cancel"), std::string(), true, false),
 	m_apply
 		(this, "apply",
 		 get_w() / 4,   get_h() * 19 / 20, m_butw, m_buth,
-		 g_gr->images().get("pics/but2.png"),
+		 ImageCatalog::Key::kButton2,
 		 _("Apply"), std::string(), true, false),
 
 // Title
@@ -508,14 +508,14 @@
 			 get_w() - m_hmargin - (get_w() / 5), m_label_snap_dis_panel.get_y(),
 			 get_w() / 5, m_vbutw,
 			 opt.panel_snap_distance, 0, 99, ngettext("pixel", "pixels", opt.panel_snap_distance),
-			 g_gr->images().get("pics/but1.png")),
+			 ImageCatalog::Key::kButton1),
 
 	m_sb_dis_border
 			(this,
 			 get_w() - m_hmargin - (get_w() / 5), m_label_snap_dis_border.get_y(),
 			 get_w() / 5, m_vbutw,
 			 opt.border_snap_distance, 0, 99, ngettext("pixel", "pixels", opt.border_snap_distance),
-			 g_gr->images().get("pics/but1.png")),
+			 ImageCatalog::Key::kButton1),
 
 	m_transparent_chat (this, Point(m_hmargin,
 											  m_label_snap_dis_border.get_y() +
@@ -607,7 +607,7 @@
 
 		// Fill with all left *.ttf files we find in fonts
 		FilenameSet files =
-		   filter(g_fs->list_directory("fonts"),
+		   filter(g_fs->list_directory("data/i18n/fonts"),
 		          [](const std::string& fn) {return boost::ends_with(fn, ".ttf");});
 
 		for

=== modified file 'src/ui_fsmenu/singleplayer.cc'
--- src/ui_fsmenu/singleplayer.cc	2014-11-13 11:29:20 +0000
+++ src/ui_fsmenu/singleplayer.cc	2014-12-05 20:26:47 +0000
@@ -36,16 +36,16 @@
 	vbox(this, m_box_x, m_box_y, UI::Box::Vertical,
 		  m_butw, get_h() - vbox.get_y(), m_padding),
 	new_game
-		(&vbox, "new_game", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "new_game", 0, 0, m_butw, m_buth, m_button_background,
 		 _("New Game"), "", true, false),
 	campaign
-		(&vbox, "campaigns", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "campaigns", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Campaigns"), "", true, false),
 	load_game
-		(&vbox, "load_game", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "load_game", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Load Game"), "", true, false),
 	back
-		(&vbox, "back", 0, 0, m_butw, m_buth, g_gr->images().get(m_button_background),
+		(&vbox, "back", 0, 0, m_butw, m_buth, m_button_background,
 		 _("Back"), "", true, false)
 {
 	new_game.sigclicked.connect

=== modified file 'src/ui_fsmenu/suggested_teams_box.cc'
--- src/ui_fsmenu/suggested_teams_box.cc	2014-10-29 06:00:52 +0000
+++ src/ui_fsmenu/suggested_teams_box.cc	2014-12-05 20:26:47 +0000
@@ -22,8 +22,6 @@
 #include <set>
 #include <string>
 
-#include <boost/format.hpp>
-
 #include "graphic/graphic.h"
 
 namespace UI {
@@ -115,10 +113,12 @@
 
 				for (uint16_t player : team) {
 					assert(player < MAX_PLAYERS);
-					const std::string player_filename = (boost::format("pics/fsel_editor_set_player_0%i_pos.png")
-																	 % (++player)).str().c_str();
-					player_icon = new UI::Icon(m_lineup_box, 0, 0, 20, 20,
-																	 g_gr->images().get(player_filename));
+					ImageCatalog::Key offset = ImageCatalog::Key::kPlayerStartingPosSmall1;
+					const Image* player_image =
+							g_gr->cataloged_image(static_cast<ImageCatalog::Key>(player +
+																									static_cast<uint8_t>(offset)));
+
+					player_icon = new UI::Icon(m_lineup_box, 0, 0, 20, 20, player_image);
 					player_icon->set_visible(true);
 					player_icon->set_no_frame();
 					m_lineup_box->add(player_icon, UI::Box::AlignLeft);

=== modified file 'src/wlapplication.cc'
--- src/wlapplication.cc	2014-12-04 06:44:42 +0000
+++ src/wlapplication.cc	2014-12-05 20:26:47 +0000
@@ -1086,17 +1086,17 @@
 				break;
 			}
 			case FullscreenMenuMain::MenuTarget::kReadme: {
-				FullscreenMenuFileView ff("txts/README.lua");
+				FullscreenMenuFileView ff("data/txts/README.lua");
 				ff.run();
 				break;
 			}
 			case FullscreenMenuMain::MenuTarget::kLicense: {
-				FullscreenMenuFileView ff("txts/license");
+				FullscreenMenuFileView ff("data/txts/license");
 				ff.run();
 				break;
 			}
 			case FullscreenMenuMain::MenuTarget::kAuthors: {
-				FullscreenMenuFileView ff("txts/developers");
+				FullscreenMenuFileView ff("data/txts/developers");
 				ff.run();
 				break;
 			}

=== modified file 'src/wui/actionconfirm.cc'
--- src/wui/actionconfirm.cc	2014-11-30 18:49:38 +0000
+++ src/wui/actionconfirm.cc	2014-12-05 20:26:47 +0000
@@ -154,16 +154,16 @@
 		new UI::Button
 			(this, "ok",
 			 6, 80, 80, 34,
-			 g_gr->images().get("pics/but4.png"),
-			 g_gr->images().get("pics/menu_okay.png"));
+			 ImageCatalog::Key::kButton4,
+			 g_gr->cataloged_image(ImageCatalog::Key::kButtonMenuOK));
 	okbtn->sigclicked.connect(boost::bind(&ActionConfirm::ok, this));
 
 	UI::Button * cancelbtn =
 		new UI::Button
 			(this, "abort",
 			 114, 80, 80, 34,
-			 g_gr->images().get("pics/but4.png"),
-			 g_gr->images().get("pics/menu_abort.png"));
+			 ImageCatalog::Key::kButton4,
+			 g_gr->cataloged_image(ImageCatalog::Key::kButtonMenuAbort));
 	cancelbtn->sigclicked.connect(boost::bind(&ActionConfirm::die, this));
 
 	center_to_parent();
@@ -190,16 +190,16 @@
 		new UI::Button
 			(this, "ok",
 			 6, 80, 80, 34,
-			 g_gr->images().get("pics/but4.png"),
-			 g_gr->images().get("pics/menu_okay.png"));
+			 ImageCatalog::Key::kButton4,
+			 g_gr->cataloged_image(ImageCatalog::Key::kButtonMenuOK));
 	okbtn->sigclicked.connect(boost::bind(&ActionConfirm::ok, this));
 
 	UI::Button * cancelbtn =
 		new UI::Button
 			(this, "abort",
 			 114, 80, 80, 34,
-			 g_gr->images().get("pics/but4.png"),
-			 g_gr->images().get("pics/menu_abort.png"));
+			 ImageCatalog::Key::kButton4,
+			 g_gr->cataloged_image(ImageCatalog::Key::kButtonMenuAbort));
 	cancelbtn->sigclicked.connect(boost::bind(&ActionConfirm::die, this));
 
 	center_to_parent();

=== modified file 'src/wui/attack_box.cc'
--- src/wui/attack_box.cc	2014-09-30 05:41:55 +0000
+++ src/wui/attack_box.cc	2014-12-05 20:26:47 +0000
@@ -67,7 +67,7 @@
 	 uint32_t          width,
 	 uint32_t          height,
 	 uint32_t          min, uint32_t max, uint32_t initial,
-	 char      const * picname,
+	 ImageCatalog::Key image_key,
 	 char      const * hint)
 {
 	UI::HorizontalSlider & result =
@@ -76,7 +76,7 @@
 			 0, 0,
 			 width, height,
 			 min, max, initial,
-			 g_gr->images().get(picname),
+			 image_key,
 			 hint);
 	parent.add(&result, UI::Box::AlignCenter);
 	return result;
@@ -109,7 +109,7 @@
 		new UI::Button
 			(&parent, text,
 			 8, 8, 26, 26,
-			 g_gr->images().get("pics/but2.png"),
+			 ImageCatalog::Key::kButton2,
 			 text,
 			 tooltip_text);
 	button->sigclicked.connect(boost::bind(fn, boost::ref(*this)));
@@ -172,7 +172,7 @@
 			(columnbox,
 			 100, 10,
 			 0, max_attackers, max_attackers > 0 ? 1 : 0,
-			 "pics/but2.png",
+			 ImageCatalog::Key::kButton2,
 			 _("Number of soldiers"));
 
 	m_slider_soldiers->changed.connect(boost::bind(&AttackBox::update_attack, this));

=== modified file 'src/wui/attack_box.h'
--- src/wui/attack_box.h	2014-07-05 16:41:51 +0000
+++ src/wui/attack_box.h	2014-12-05 20:26:47 +0000
@@ -22,6 +22,7 @@
 
 #include <list>
 
+#include "graphic/image_catalog.h"
 #include "logic/attackable.h"
 #include "logic/bob.h"
 #include "logic/player.h"
@@ -60,7 +61,7 @@
 			 uint32_t      width,
 			 uint32_t      height,
 			 uint32_t      min, uint32_t max, uint32_t initial,
-			 char const  * picname,
+			 ImageCatalog::Key image_key,
 			 char const  * hint);
 		UI::Textarea & add_text
 			(UI::Box           & parent,

=== modified file 'src/wui/building_statistics_menu.cc'
--- src/wui/building_statistics_menu.cc	2014-11-30 18:49:38 +0000
+++ src/wui/building_statistics_menu.cc	2014-12-05 20:26:47 +0000
@@ -127,8 +127,8 @@
 		new UI::Button
 			(this, "previous_owned",
 			 JUMP_PREV_BUTTON_X, OWNED_Y, 24, 24,
-			 g_gr->images().get("pics/but4.png"),
-			 g_gr->images().get("pics/scrollbar_left.png"),
+			 ImageCatalog::Key::kButton4,
+			 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarLeft),
 			 _("Show previous"),
 			 false);
 	m_btn[PrevOwned]->sigclicked.connect
@@ -138,8 +138,8 @@
 		new UI::Button
 			(this, "next_owned",
 			 JUMP_NEXT_BUTTON_X, OWNED_Y, 24, 24,
-			 g_gr->images().get("pics/but4.png"),
-			 g_gr->images().get("pics/scrollbar_right.png"),
+			 ImageCatalog::Key::kButton4,
+			 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarRight),
 			 _("Show next"),
 			 false);
 	m_btn[NextOwned]->sigclicked.connect
@@ -149,8 +149,8 @@
 		new UI::Button
 			(this, "previous_constructed",
 			 JUMP_PREV_BUTTON_X, IN_BUILD_Y, 24, 24,
-			 g_gr->images().get("pics/but4.png"),
-			 g_gr->images().get("pics/scrollbar_left.png"),
+			 ImageCatalog::Key::kButton4,
+			 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarLeft),
 			 _("Show previous"),
 			 false);
 	m_btn[PrevConstruction]->sigclicked.connect
@@ -160,8 +160,8 @@
 		new UI::Button
 			(this, "next_constructed",
 			 JUMP_NEXT_BUTTON_X, IN_BUILD_Y, 24, 24,
-			 g_gr->images().get("pics/but4.png"),
-			 g_gr->images().get("pics/scrollbar_right.png"),
+			 ImageCatalog::Key::kButton4,
+			 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarRight),
 			 _("Show next"),
 			 false);
 	m_btn[NextConstruction]->sigclicked.connect
@@ -171,8 +171,8 @@
 		new UI::Button
 			(this, "previous_unproductive",
 			 JUMP_PREV_BUTTON_X, UNPRODUCTIVE_Y, 24, 24,
-			 g_gr->images().get("pics/but4.png"),
-			 g_gr->images().get("pics/scrollbar_left.png"),
+			 ImageCatalog::Key::kButton4,
+			 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarLeft),
 			 _("Show previous"),
 			 false);
 	m_btn[PrevUnproductive]->sigclicked.connect
@@ -182,8 +182,8 @@
 		new UI::Button
 			(this, "next_unproductive",
 			 JUMP_NEXT_BUTTON_X, UNPRODUCTIVE_Y, 24, 24,
-			 g_gr->images().get("pics/but4.png"),
-			 g_gr->images().get("pics/scrollbar_right.png"),
+			 ImageCatalog::Key::kButton4,
+			 g_gr->cataloged_image(ImageCatalog::Key::kScrollbarRight),
 			 _("Show next"),
 			 false);
 	m_btn[NextUnproductive]->sigclicked.connect
@@ -442,27 +442,27 @@
 			(Columns::Name, building.get_icon(), building.descname());
 
 		{
-			char const * pic = "pics/novalue.png";
+			ImageCatalog::Key image_key = ImageCatalog::Key::kNoValue;
 			if (building.get_ismine()) {
-				pic = "pics/menu_tab_buildmine.png";
+				image_key = ImageCatalog::Key::kFieldTabBuildMine;
 			} else if (building.get_isport()) {
-				pic = "pics/menu_tab_buildport.png";
+				image_key = ImageCatalog::Key::kFieldTabBuildPort;
 			}
 			else switch (building.get_size()) {
-			case Widelands::BaseImmovable::SMALL:
-				pic = "pics/menu_tab_buildsmall.png";
-				break;
-			case Widelands::BaseImmovable::MEDIUM:
-				pic = "pics/menu_tab_buildmedium.png";
-				break;
-			case Widelands::BaseImmovable::BIG:
-				pic = "pics/menu_tab_buildbig.png";
-				break;
-			default:
-				assert(false);
-				break;
+				case Widelands::BaseImmovable::SMALL:
+					image_key = ImageCatalog::Key::kFieldTabBuildSmall;
+					break;
+				case Widelands::BaseImmovable::MEDIUM:
+					image_key = ImageCatalog::Key::kFieldTabBuildMedium;
+					break;
+				case Widelands::BaseImmovable::BIG:
+					image_key = ImageCatalog::Key::kFieldTabBuildBig;
+					break;
+				default:
+					assert(false);
+					break;
 			}
-			te->set_picture(Columns::Size, g_gr->images().get(pic));
+			te->set_picture(Columns::Size, g_gr->cataloged_image(image_key));
 		}
 
 		if (productionsite && nr_owned) {

=== modified file 'src/wui/buildingwindow.cc'
--- src/wui/buildingwindow.cc	2014-11-30 18:49:38 +0000
+++ src/wui/buildingwindow.cc	2014-12-05 20:26:47 +0000
@@ -42,11 +42,6 @@
 #include "wui/unique_window_handler.h"
 #include "wui/waresqueuedisplay.h"
 
-static const char * pic_bulldoze           = "pics/menu_bld_bulldoze.png";
-static const char * pic_dismantle          = "pics/menu_bld_dismantle.png";
-static const char * pic_debug              = "pics/menu_debug.png";
-
-
 BuildingWindow::BuildingWindow
 	(InteractiveGameBase & parent,
 	 Widelands::Building  & b,
@@ -72,7 +67,7 @@
 
 	UI::Box * vbox = new UI::Box(this, 0, 0, UI::Box::Vertical);
 
-	m_tabs = new UI::TabPanel(vbox, 0, 0, nullptr);
+	m_tabs = new UI::TabPanel(vbox, 0, 0);
 	vbox->add(m_tabs, UI::Box::AlignLeft, true);
 
 	m_capsbuttons = new UI::Box(vbox, 0, 0, UI::Box::Horizontal);
@@ -177,8 +172,8 @@
 					UI::Button * expeditionbtn =
 						new UI::Button
 							(capsbuttons, "cancel_expedition", 0, 0, 34, 34,
-							g_gr->images().get("pics/but4.png"),
-							g_gr->images().get("pics/cancel_expedition.png"),
+							 ImageCatalog::Key::kButton4,
+							 g_gr->cataloged_image(ImageCatalog::Key::kDockExpeditionCancel),
 							_("Cancel the expedition"));
 					expeditionbtn->sigclicked.connect
 						(boost::bind(&BuildingWindow::act_start_or_cancel_expedition, boost::ref(*this)));
@@ -187,8 +182,8 @@
 					UI::Button * expeditionbtn =
 						new UI::Button
 							(capsbuttons, "start_expedition", 0, 0, 34, 34,
-							g_gr->images().get("pics/but4.png"),
-							g_gr->images().get("pics/start_expedition.png"),
+							 ImageCatalog::Key::kButton4,
+							 g_gr->cataloged_image(ImageCatalog::Key::kDockExpeditionStart),
 							_("Start an expedition"));
 					expeditionbtn->sigclicked.connect
 						(boost::bind(&BuildingWindow::act_start_or_cancel_expedition, boost::ref(*this)));
@@ -203,8 +198,10 @@
 				UI::Button * stopbtn =
 					new UI::Button
 						(capsbuttons, is_stopped ? "continue" : "stop", 0, 0, 34, 34,
-						 g_gr->images().get("pics/but4.png"),
-						 g_gr->images().get((is_stopped ? "pics/continue.png" : "pics/stop.png")),
+						 ImageCatalog::Key::kButton4,
+						 is_stopped ?
+							 g_gr->cataloged_image(ImageCatalog::Key::kActionContinue) :
+							 g_gr->cataloged_image(ImageCatalog::Key::kActionStop),
 						 /** TRANSLATORS: Stop/Continue toggle button for production sites. */
 						 is_stopped ? _("Continue") : _("Stop"));
 				stopbtn->sigclicked.connect(boost::bind(&BuildingWindow::act_start_stop, boost::ref(*this)));
@@ -238,7 +235,7 @@
 					UI::Button * enhancebtn =
 						new UI::Button
 							(capsbuttons, "enhance", 0, 0, 34, 34,
-							 g_gr->images().get("pics/but4.png"),
+							 ImageCatalog::Key::kButton4,
 							 building_descr.get_icon(),
 							 enhance_tooltip);
 
@@ -255,8 +252,8 @@
 			UI::Button * destroybtn =
 				new UI::Button
 					(capsbuttons, "destroy", 0, 0, 34, 34,
-					 g_gr->images().get("pics/but4.png"),
-					 g_gr->images().get(pic_bulldoze),
+					 ImageCatalog::Key::kButton4,
+					 g_gr->cataloged_image(ImageCatalog::Key::kBuildingBulldoze),
 					 _("Destroy"));
 			destroybtn->sigclicked.connect
 				(boost::bind(&BuildingWindow::act_bulldoze, boost::ref(*this)));
@@ -273,8 +270,8 @@
 			UI::Button * dismantlebtn =
 				new UI::Button
 					(capsbuttons, "dismantle", 0, 0, 34, 34,
-					 g_gr->images().get("pics/but4.png"),
-					 g_gr->images().get(pic_dismantle),
+					 ImageCatalog::Key::kButton4,
+					 g_gr->cataloged_image(ImageCatalog::Key::kBuildingDismantle),
 					 std::string(_("Dismantle")) + "<br><font size=11>" + _("Returns:") + "</font><br>" +
 						 waremap_to_richtext(owner.tribe(), wares));
 			dismantlebtn->sigclicked.connect(boost::bind(&BuildingWindow::act_dismantle, boost::ref(*this)));
@@ -305,8 +302,8 @@
 			m_toggle_workarea = new UI::Button
 				(capsbuttons, "workarea",
 				 0, 0, 34, 34,
-				 g_gr->images().get("pics/but4.png"),
-				 g_gr->images().get("pics/workarea123.png"),
+				 ImageCatalog::Key::kButton4,
+				 g_gr->cataloged_image(ImageCatalog::Key::kOverlaysWorkarea123),
 				 _("Hide work area"));
 			m_toggle_workarea->sigclicked.connect
 				(boost::bind(&BuildingWindow::toggle_workarea, boost::ref(*this)));
@@ -320,8 +317,8 @@
 			UI::Button * debugbtn =
 				new UI::Button
 					(capsbuttons, "debug", 0, 0, 34, 34,
-					 g_gr->images().get("pics/but4.png"),
-					 g_gr->images().get(pic_debug),
+					 ImageCatalog::Key::kButton4,
+					 g_gr->cataloged_image(ImageCatalog::Key::kFieldDebug),
 					 _("Debug"));
 			debugbtn->sigclicked.connect(boost::bind(&BuildingWindow::act_debug, boost::ref(*this)));
 			capsbuttons->add
@@ -332,8 +329,9 @@
 		UI::Button * gotobtn =
 			new UI::Button
 				(capsbuttons, "goto", 0, 0, 34, 34,
-				 g_gr->images().get("pics/but4.png"),
-				 g_gr->images().get("pics/menu_goto.png"), _("Center view on this"));
+				 ImageCatalog::Key::kButton4,
+				 g_gr->cataloged_image(ImageCatalog::Key::kMenuGoto),
+				 _("Center view on this"));
 		gotobtn->sigclicked.connect(boost::bind(&BuildingWindow::clicked_goto, boost::ref(*this)));
 		capsbuttons->add
 			(gotobtn,
@@ -349,8 +347,8 @@
 			UI::Button * helpbtn =
 				new UI::Button
 					(capsbuttons, "help", 0, 0, 34, 34,
-					 g_gr->images().get("pics/but4.png"),
-					 g_gr->images().get("pics/menu_help.png"),
+					 ImageCatalog::Key::kButton4,
+					 g_gr->cataloged_image(ImageCatalog::Key::kHelp),
 					 _("Help"));
 
 			UI::UniqueWindow::Registry& registry =

=== modified file 'src/wui/constructionsitewindow.cc'
--- src/wui/constructionsitewindow.cc	2014-11-30 18:49:38 +0000
+++ src/wui/constructionsitewindow.cc	2014-12-05 20:26:47 +0000
@@ -27,8 +27,6 @@
 #include "ui_basic/progressbar.h"
 #include "ui_basic/tabpanel.h"
 
-static const char pic_tab_wares[] = "pics/menu_tab_wares.png";
-
 /**
  * Status window for construction sites.
  */
@@ -71,8 +69,10 @@
 			(new WaresQueueDisplay(&box, 0, 0, igbase(), cs, cs.get_waresqueue(i)),
 			 UI::Box::AlignLeft);
 
-
-	get_tabs()->add("wares", g_gr->images().get(pic_tab_wares), &box, _("Building materials"));
+	get_tabs()->add("wares",
+						 g_gr->cataloged_image(ImageCatalog::Key::kBuildingTabWares),
+						 &box,
+						 _("Building materials"));
 }
 
 

=== modified file 'src/wui/dismantlesitewindow.cc'
--- src/wui/dismantlesitewindow.cc	2014-11-30 18:49:38 +0000
+++ src/wui/dismantlesitewindow.cc	2014-12-05 20:26:47 +0000
@@ -24,8 +24,6 @@
 #include "ui_basic/tabpanel.h"
 #include "wui/buildingwindow.h"
 
-static const char pic_tab_wares[] = "pics/menu_tab_wares.png";
-
 /**
  * Status window for dismantle sites.
  */
@@ -66,7 +64,10 @@
 	for (uint32_t i = 0; i < cs.get_nrwaresqueues(); ++i)
 		BuildingWindow::create_ware_queue_panel(&box, cs, cs.get_waresqueue(i), true);
 
-	get_tabs()->add("wares", g_gr->images().get(pic_tab_wares), &box, _("Building materials"));
+	get_tabs()->add("wares",
+						 g_gr->cataloged_image(ImageCatalog::Key::kBuildingTabWares),
+						 &box,
+						 _("Building materials"));
 }
 
 

=== modified file 'src/wui/fieldaction.cc'
--- src/wui/fieldaction.cc	2014-12-03 19:11:31 +0000
+++ src/wui/fieldaction.cc	2014-12-05 20:26:47 +0000
@@ -202,13 +202,13 @@
 private:
 	uint32_t add_tab
 		(const std::string & name,
-		 const char * picname,
+		 ImageCatalog::Key image_key,
 		 UI::Panel * panel,
 		 const std::string & tooltip_text = "");
 	UI::Button & add_button
 		(UI::Box *,
 		 const char * name,
-		 const char * picname,
+		 ImageCatalog::Key image_key,
 		 void (FieldActionWindow::*fn)(),
 		 const std::string & tooltip_text,
 		 bool repeating = false);
@@ -229,13 +229,11 @@
 	AttackBox * m_attack_box;
 };
 
-static const char * const pic_tab_buildroad  = "pics/menu_tab_buildroad.png";
-static const char * const pic_tab_watch      = "pics/menu_tab_watch.png";
-static const char * const pic_tab_buildhouse[] = {
-	"pics/menu_tab_buildsmall.png",
-	"pics/menu_tab_buildmedium.png",
-	"pics/menu_tab_buildbig.png",
-	"pics/menu_tab_buildport.png"
+static const ImageCatalog::Key pic_tab_buildhouse[] = {
+	ImageCatalog::Key::kFieldTabBuildSmall,
+	ImageCatalog::Key::kFieldTabBuildMedium,
+	ImageCatalog::Key::kFieldTabBuildBig,
+	ImageCatalog::Key::kFieldTabBuildPort
 };
 static const std::string tooltip_tab_build[] = {
 	_("Build small building"),
@@ -245,24 +243,6 @@
 };
 static const std::string name_tab_build[] = {"small", "medium", "big", "port"};
 
-
-static const char * const pic_tab_buildmine  = "pics/menu_tab_buildmine.png";
-
-static const char * const pic_buildroad      = "pics/menu_build_way.png";
-static const char * const pic_remroad        = "pics/menu_rem_way.png";
-static const char * const pic_buildflag      = "pics/menu_build_flag.png";
-static const char * const pic_ripflag        = "pics/menu_rip_flag.png";
-static const char * const pic_watchfield     = "pics/menu_watch_field.png";
-static const char * const pic_showcensus     = "pics/menu_show_census.png";
-static const char * const pic_showstatistics = "pics/menu_show_statistics.png";
-static const char * const pic_debug          = "pics/menu_debug.png";
-static const char * const pic_abort          = "pics/menu_abort.png";
-static const char * const pic_geologist      = "pics/menu_geologist.png";
-
-static const char * const pic_tab_attack     = "pics/menu_tab_attack.png";
-static const char * const pic_attack         = "pics/menu_attack.png";
-
-
 /*
 ===============
 Initialize a field action window, creating the appropriate buttons.
@@ -278,33 +258,32 @@
 	m_map(&ib->egbase().map()),
 	m_overlay_manager(*m_map->get_overlay_manager()),
 	m_node(ib->get_sel_pos().node, &(*m_map)[ib->get_sel_pos().node]),
-	m_tabpanel(this, 0, 0, g_gr->images().get("pics/but1.png")),
+	m_tabpanel(this, 0, 0, ImageCatalog::Key::kButton1),
 	m_fastclick(true),
 	m_best_tab(0),
 	m_workarea_preview_job_id(0),
-	m_attack_box(nullptr)
-{
+	m_attack_box(nullptr) {
 	ib->set_sel_freeze(true);
-
-
 	set_center_panel(&m_tabpanel);
 }
 
 
 FieldActionWindow::~FieldActionWindow()
 {
-	if (m_workarea_preview_job_id)
+	if (m_workarea_preview_job_id) {
 		m_overlay_manager.remove_overlay(m_workarea_preview_job_id);
+	}
 	ibase().set_sel_freeze(false);
 	delete m_attack_box;
 }
 
 
 void FieldActionWindow::think() {
-	if
-		(m_plr && m_plr->vision(m_node.field - &ibase().egbase().map()[0]) <= 1
-		 && !m_plr->see_all())
+	if (m_plr
+		 && m_plr->vision(m_node.field - &ibase().egbase().map()[0]) <= 1
+		 && !m_plr->see_all()) {
 		die();
+	}
 }
 
 
@@ -356,7 +335,7 @@
 			if (can_act) {
 				add_button
 					(buildbox, "build_road",
-					 pic_buildroad,
+					 ImageCatalog::Key::kFieldRoadBuild,
 					 &FieldActionWindow::act_buildroad,
 					 _("Build road"));
 
@@ -368,7 +347,7 @@
 					 (building->get_playercaps() & Building::PCap_Bulldoze))
 					add_button
 						(buildbox, "rip_flag",
-						 pic_ripflag,
+						 ImageCatalog::Key::kFieldFlagDestroy,
 						 &FieldActionWindow::act_ripflag,
 						 _("Destroy this flag"));
 			}
@@ -376,13 +355,13 @@
 			if (dynamic_cast<Game const *>(&ibase().egbase())) {
 				add_button
 					(buildbox, "configure_economy",
-					 "pics/genstats_nrwares.png",
+					 ImageCatalog::Key::kStatsWaresNumber,
 					 &FieldActionWindow::act_configure_economy,
 					 _("Configure economy"));
 				if (can_act)
 					add_button
 						(buildbox, "geologist",
-						 pic_geologist,
+						 ImageCatalog::Key::kFieldGeologist,
 						 &FieldActionWindow::act_geologist,
 						 _("Send geologist to explore site"));
 			}
@@ -400,14 +379,14 @@
 			if ((m_fastclick = buildcaps & Widelands::BUILDCAPS_FLAG))
 				add_button
 					(buildbox, "build_flag",
-					 pic_buildflag,
+					 ImageCatalog::Key::kFieldFlagBuild,
 					 &FieldActionWindow::act_buildflag,
 					 _("Place a flag"));
 
 			if (can_act && dynamic_cast<const Widelands::Road *>(imm))
 				add_button
 					(buildbox, "destroy_road",
-					 pic_remroad,
+					 ImageCatalog::Key::kFieldRoadDestroy,
 					 &FieldActionWindow::act_removeroad,
 					 _("Destroy a road"));
 		}
@@ -425,33 +404,33 @@
 	if (dynamic_cast<const Game *>(&ibase().egbase())) {
 		add_button
 			(&watchbox, "watch",
-			 pic_watchfield,
+			 ImageCatalog::Key::kFieldWatch,
 			 &FieldActionWindow::act_watch,
 			 _("Watch field in a separate window"));
 		add_button
 			(&watchbox, "statistics",
-			 pic_showstatistics,
+			 ImageCatalog::Key::kFieldStatistics,
 			 &FieldActionWindow::act_show_statistics,
 			 _("Toggle building statistics display"));
 	}
 	add_button
 		(&watchbox, "census",
-		 pic_showcensus,
+		 ImageCatalog::Key::kFieldCensus,
 		 &FieldActionWindow::act_show_census,
 		 _("Toggle building label display"));
 
 	if (ibase().get_display_flag(InteractiveBase::dfDebug))
 		add_button
 			(&watchbox, "debug",
-			 pic_debug,
+			 ImageCatalog::Key::kFieldDebug,
 			 &FieldActionWindow::act_debug,
 			 _("Debug window"));
 
 	// Add tabs
 	if (buildbox && buildbox->get_nritems())
-		add_tab("roads", pic_tab_buildroad, buildbox, _("Build road"));
+		add_tab("roads", ImageCatalog::Key::kFieldTabBuildRoad, buildbox, _("Build road"));
 
-	add_tab("watch", pic_tab_watch, &watchbox, _("Watch"));
+	add_tab("watch", ImageCatalog::Key::kFieldTabWatch, &watchbox, _("Watch"));
 
 }
 
@@ -473,14 +452,14 @@
 			set_fastclick_panel
 				(&add_button
 				 (&a_box, "attack",
-				  pic_attack,
+				  ImageCatalog::Key::kBuildingAttack,
 				  &FieldActionWindow::act_attack,
 				  _("Start attack")));
 		}
 	}
 
 	if (a_box.get_nritems()) { //  add tab
-		add_tab("attack", pic_tab_attack, &a_box, _("Attack"));
+		add_tab("attack", ImageCatalog::Key::kFieldAttack, &a_box, _("Attack"));
 	}
 }
 
@@ -564,7 +543,7 @@
 	if (bbg_mine)
 		m_tabpanel.activate
 			(m_best_tab = add_tab
-			 	("mines", pic_tab_buildmine, bbg_mine, _("Build mines")));
+				("mines", ImageCatalog::Key::kFieldTabBuildMine, bbg_mine, _("Build mines")));
 }
 
 
@@ -580,14 +559,16 @@
 	if (flag)
 		add_button
 			(&buildbox, "build_flag",
-			 pic_buildflag, &FieldActionWindow::act_buildflag, _("Build flag"));
+			 ImageCatalog::Key::kFieldFlagBuild,
+			 &FieldActionWindow::act_buildflag, _("Build flag"));
 
 	add_button
 		(&buildbox, "cancel_road",
-		 pic_abort, &FieldActionWindow::act_abort_buildroad, _("Cancel road"));
+		 ImageCatalog::Key::kButtonMenuAbort,
+		 &FieldActionWindow::act_abort_buildroad, _("Cancel road"));
 
 	// Add the box as tab
-	add_tab("roads", pic_tab_buildroad, &buildbox, _("Build roads"));
+	add_tab("roads", ImageCatalog::Key::kFieldRoadBuild, &buildbox, _("Build roads"));
 }
 
 
@@ -597,19 +578,19 @@
 ===============
 */
 uint32_t FieldActionWindow::add_tab
-	(const std::string & name, const char * picname,
+	(const std::string & name, ImageCatalog::Key image_key,
 	 UI::Panel * panel, const std::string & tooltip_text)
 {
 	return
 		m_tabpanel.add
-			(name, g_gr->images().get(picname), panel, tooltip_text);
+			(name, g_gr->cataloged_image(image_key), panel, tooltip_text);
 }
 
 
 UI::Button & FieldActionWindow::add_button
 	(UI::Box           * const box,
 	 const char        * const name,
-	 const char        * const picname,
+	 ImageCatalog::Key        image_key,
 	 void (FieldActionWindow::*fn)(),
 	 const std::string & tooltip_text,
 	 bool                repeating)
@@ -618,8 +599,8 @@
 		*new UI::Button
 			(box, name,
 			 0, 0, 34, 34,
-			 g_gr->images().get("pics/but2.png"),
-			 g_gr->images().get(picname),
+			 ImageCatalog::Key::kButton2,
+			 g_gr->cataloged_image(image_key),
 			 tooltip_text);
 	button.sigclicked.connect(boost::bind(fn, this));
 	button.set_repeating(repeating);

=== modified file 'src/wui/game_debug_ui.cc'
--- src/wui/game_debug_ui.cc	2014-12-02 20:21:07 +0000
+++ src/wui/game_debug_ui.cc	2014-12-05 20:26:47 +0000
@@ -109,7 +109,7 @@
 	(const Widelands::EditorGameBase & egbase, UI::TabPanel & tabs)
 {
 	tabs.add
-		("debug", g_gr->images().get("pics/menu_debug.png"),
+		("debug", g_gr->cataloged_image(ImageCatalog::Key::kFieldDebug),
 		 new MapObjectDebugPanel(tabs, egbase, *this));
 }
 
@@ -152,9 +152,7 @@
 	UI::Window        (&parent, "map_object_debug", 0, 0, 100, 100, ""),
 	m_log_general_info(true),
 	m_object          (&obj),
-	m_tabs
-		(this, 0, 0,
-		 g_gr->images().get("pics/but1.png"))
+	m_tabs            (this, 0, 0, ImageCatalog::Key::kButton1)
 {
 	m_serial = obj.serial();
 	set_title(std::to_string(m_serial));
@@ -243,7 +241,7 @@
 	m_ui_immovable
 		(this, "immovable",
 		 0, 280, 214, 24,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 ""),
 
 	m_ui_bobs(this, 0, 304, 214, 96)

=== modified file 'src/wui/game_main_menu.cc'
--- src/wui/game_main_menu.cc	2014-10-11 09:11:29 +0000
+++ src/wui/game_main_menu.cc	2014-12-05 20:26:47 +0000
@@ -42,26 +42,26 @@
 general_stats
 	(this, "general_stats",
 	 posx(0, 4), posy(0, 3), buttonw(4), buttonh(1),
-	 g_gr->images().get("pics/but4.png"),
-	 g_gr->images().get("pics/menu_general_stats.png"),
+	 ImageCatalog::Key::kButton4,
+	 g_gr->cataloged_image(ImageCatalog::Key::kMenuStatsGeneral),
 	 _("General Statistics")),
 ware_stats
 	(this, "ware_stats",
 	 posx(1, 4), posy(0, 3), buttonw(4), buttonh(1),
-	 g_gr->images().get("pics/but4.png"),
-	 g_gr->images().get("pics/menu_ware_stats.png"),
+	 ImageCatalog::Key::kButton4,
+	 g_gr->cataloged_image(ImageCatalog::Key::kMenuStatsWare),
 	 _("Ware Statistics")),
 building_stats
 	(this, "building_stats",
 	 posx(2, 4), posy(0, 3), buttonw(4), buttonh(1),
-	 g_gr->images().get("pics/but4.png"),
-	 g_gr->images().get("pics/menu_building_stats.png"),
+	 ImageCatalog::Key::kButton4,
+	 g_gr->cataloged_image(ImageCatalog::Key::kMenuStatsBuilding),
 	 _("Building Statistics")),
 stock
 	(this, "stock",
 	 posx(3, 4), posy(0, 3), buttonw(4), buttonh(1),
-	 g_gr->images().get("pics/but4.png"),
-	 g_gr->images().get("pics/menu_stock.png"),
+	 ImageCatalog::Key::kButton4,
+	 g_gr->cataloged_image(ImageCatalog::Key::kMenuStatsStock),
 	 _("Stock"))
 {
 	general_stats.sigclicked.connect

=== modified file 'src/wui/game_main_menu_save_game.cc'
--- src/wui/game_main_menu_save_game.cc	2014-11-30 18:49:38 +0000
+++ src/wui/game_main_menu_save_game.cc	2014-12-05 20:26:47 +0000
@@ -80,7 +80,7 @@
 	m_editbox =
 		new UI::EditBox
 			(this, HSPACING, EDITBOX_Y, LIST_WIDTH, EDITBOX_HEIGHT,
-			 g_gr->images().get("pics/but1.png"));
+			 ImageCatalog::Key::kButton1);
 	m_editbox->changed.connect(boost::bind(&GameMainMenuSaveGame::edit_box_changed, this));
 	m_editbox->ok.connect(boost::bind(&GameMainMenuSaveGame::ok, this));
 
@@ -88,7 +88,7 @@
 		new UI::Button
 			(this, "ok",
 			 DESCRIPTION_X, OK_Y, DESCRIPTION_WIDTH, BUTTON_HEIGHT,
-			 g_gr->images().get("pics/but4.png"),
+			 ImageCatalog::Key::kButton4,
 			 _("OK"),
 			 std::string(),
 			 false);
@@ -98,7 +98,7 @@
 		new UI::Button
 			(this, "cancel",
 			 DESCRIPTION_X, CANCEL_Y, DESCRIPTION_WIDTH, BUTTON_HEIGHT,
-			 g_gr->images().get("pics/but4.png"),
+			 ImageCatalog::Key::kButton4,
 			 _("Cancel"));
 	cancelbtn->sigclicked.connect(boost::bind(&GameMainMenuSaveGame::die, this));
 
@@ -106,7 +106,7 @@
 		new UI::Button
 			(this, "delete",
 			 DESCRIPTION_X, DELETE_Y, DESCRIPTION_WIDTH, BUTTON_HEIGHT,
-			 g_gr->images().get("pics/but4.png"),
+			 ImageCatalog::Key::kButton4,
 			 _("Delete"));
 	deletebtn->sigclicked.connect(boost::bind(&GameMainMenuSaveGame::delete_clicked, this));
 

=== modified file 'src/wui/game_message_menu.cc'
--- src/wui/game_message_menu.cc	2014-11-30 18:49:38 +0000
+++ src/wui/game_message_menu.cc	2014-12-05 20:26:47 +0000
@@ -62,7 +62,7 @@
 		new UI::Button
 			(this, "clear_selection",
 			 5, 5, 140, 25,
-			 g_gr->images().get("pics/but0.png"),
+			 ImageCatalog::Key::kButton0,
 			 _("Clear"), _("Clear selection"));
 	clearselectionbtn->sigclicked.connect
 		(boost::bind(&GameMessageMenu::do_clear_selection, this));
@@ -71,7 +71,7 @@
 		new UI::Button
 			(this, "invert_selection",
 			 150, 5, 140, 25,
-			 g_gr->images().get("pics/but0.png"),
+			 ImageCatalog::Key::kButton0,
 			 _("Invert"), _("Invert selection"));
 	invertselectionbtn->sigclicked.connect
 		(boost::bind(&GameMessageMenu::do_invert_selection, this));
@@ -80,8 +80,8 @@
 		new UI::Button
 			(this, "archive_or_restore_selected_messages",
 			 295, 5, 25, 25,
-			 g_gr->images().get("pics/but2.png"),
-			 g_gr->images().get("pics/message_archive.png"),
+			 ImageCatalog::Key::kButton2,
+			 g_gr->cataloged_image(ImageCatalog::Key::kMessageActionArchive),
 			 _("Archive selected messages"));
 	m_archivebtn->sigclicked.connect
 		(boost::bind(&GameMessageMenu::archive_or_restore, this));
@@ -90,7 +90,7 @@
 		new UI::Button
 			(this, "toggle_between_inbox_or_archive",
 			 325, 5, 190, 25,
-			 g_gr->images().get("pics/but2.png"),
+			 ImageCatalog::Key::kButton2,
 			 _("Show Archive"));
 	m_togglemodebtn->sigclicked.connect
 		(boost::bind(&GameMessageMenu::toggle_mode, this));
@@ -99,8 +99,8 @@
 		new UI::Button
 			(this, "center_main_mapview_on_location",
 			 550, 5, 25, 25,
-			 g_gr->images().get("pics/but2.png"),
-			 g_gr->images().get("pics/menu_goto.png"),
+			 ImageCatalog::Key::kButton2,
+			 g_gr->cataloged_image(ImageCatalog::Key::kMenuGoto),
 			 _("center main mapview on location"),
 			 false);
 	m_centerviewbtn->sigclicked.connect(boost::bind(&GameMessageMenu::center_view, this));
@@ -132,10 +132,10 @@
 	return false; // shouldn't happen
 }
 
-static char const * const status_picture_filename[] = {
-	"pics/message_new.png",
-	"pics/message_read.png",
-	"pics/message_archived.png"
+static constexpr ImageCatalog::Key status_picture_keys[] = {
+	ImageCatalog::Key::kMessageNew,
+	ImageCatalog::Key::kMessageRead,
+	ImageCatalog::Key::kMessageArchived,
 };
 
 void GameMessageMenu::show_new_message
@@ -201,7 +201,7 @@
 {
 	er.set_picture
 		(ColStatus,
-		 g_gr->images().get(status_picture_filename[message.status()]));
+		 g_gr->cataloged_image(status_picture_keys[message.status()]));
 	er.set_string(ColTitle, message.title());
 
 	const uint32_t time = message.sent();
@@ -358,14 +358,14 @@
 	case Inbox:
 		mode = Archive;
 		set_title(_("Messages: Archive"));
-		m_archivebtn->set_pic(g_gr->images().get("pics/message_restore.png"));
+		m_archivebtn->set_image(g_gr->cataloged_image(ImageCatalog::Key::kMessageActionRestore));
 		m_archivebtn->set_tooltip(_("Restore selected messages"));
 		m_togglemodebtn->set_title(_("Show Inbox"));
 		break;
 	case Archive:
 		mode = Inbox;
 		set_title(_("Messages: Inbox"));
-		m_archivebtn->set_pic(g_gr->images().get("pics/message_archive.png"));
+		m_archivebtn->set_image(g_gr->cataloged_image(ImageCatalog::Key::kMessageActionArchive));
 		m_archivebtn->set_tooltip(_("Archive selected messages"));
 		m_togglemodebtn->set_title(_("Show Archive"));
 		break;

=== modified file 'src/wui/game_options_menu.cc'
--- src/wui/game_options_menu.cc	2014-10-17 14:26:08 +0000
+++ src/wui/game_options_menu.cc	2014-12-05 20:26:47 +0000
@@ -75,7 +75,7 @@
 		 posx(0, 1),
 		 vmargin() + 0 * (20 + vspacing()) + 0 * vgap(),
 		 buttonw(1), 20,
-		 g_gr->images().get("pics/but4.png"),
+		 ImageCatalog::Key::kButton4,
 		 _("README"),
 		/** TRANSLATORS: Button tooltip */
 		_("Show general information about Widelands and keyboard shortcuts")),
@@ -84,7 +84,7 @@
 		 posx(0, 1),
 		 vmargin() + 1 * (20 + vspacing()) + 0 * vgap(),
 		 buttonw(1), 20,
-		 g_gr->images().get("pics/but4.png"),
+		 ImageCatalog::Key::kButton4,
 		 _("License"),
 		/** TRANSLATORS: Button tooltip */
 		_("Show the distribution licence document")),
@@ -93,7 +93,7 @@
 		 posx(0, 1),
 		 vmargin() + 2 * (20 + vspacing()) + 0 * vgap(),
 		 buttonw(1), 20,
-		 g_gr->images().get("pics/but4.png"),
+		 ImageCatalog::Key::kButton4,
 		 _("Authors"),
 		/** TRANSLATORS: Button tooltip */
 		_("Show information about the Widelands Development Team")),
@@ -102,7 +102,7 @@
 		 posx(0, 1),
 		 vmargin() + 3 * (20 + vspacing()) + 1 * vgap(),
 		 buttonw(1), 20,
-		 g_gr->images().get("pics/but4.png"),
+		 ImageCatalog::Key::kButton4,
 		 _("Sound Options"),
 		/** TRANSLATORS: Button tooltip */
 		_("Set sound effect and music options")),
@@ -111,8 +111,8 @@
 		 posx(0, 1),
 		 vmargin() + 4 * (20 + vspacing()) + 2 * vgap(),
 		 buttonw(1), 35,
-		 g_gr->images().get("pics/but4.png"),
-		 g_gr->images().get("pics/menu_save_game.png"),
+		 ImageCatalog::Key::kButton4,
+		 g_gr->cataloged_image(ImageCatalog::Key::kMenuOptionsSave),
 		 /** TRANSLATORS: Button tooltip */
 		 _("Save Game")),
 	exit_game
@@ -121,8 +121,8 @@
 		 vmargin() + 4 * (20 + vspacing()) + 2 * vgap() +
 		 35 + vspacing(),
 		 buttonw(1), 35,
-		 g_gr->images().get("pics/but4.png"),
-		 g_gr->images().get("pics/menu_exit_game.png"),
+		 ImageCatalog::Key::kButton4,
+		 g_gr->cataloged_image(ImageCatalog::Key::kMenuOptionsExit),
 		 /** TRANSLATORS: Button tooltip */
 		 _("Exit Game"))
 {
@@ -140,15 +140,15 @@
 	m_windows.readme.open_window = boost::bind
 		(&fileview_window, boost::ref(m_gb),
 		 boost::ref(m_windows.readme),
-		 "txts/README.lua");
+		 "data/txts/README.lua");
 	m_windows.license.open_window = boost::bind
 		(&fileview_window, boost::ref(m_gb),
 		 boost::ref(m_windows.license),
-		 "txts/license");
+		 "data/txts/license");
 	m_windows.authors.open_window = boost::bind
 		(&fileview_window, boost::ref(m_gb),
 		 boost::ref(m_windows.authors),
-		 "txts/developers");
+		 "data/txts/developers");
 
 #define INIT_BTN_HOOKS(registry, btn)                                        \
  registry.on_create = std::bind(&UI::Button::set_perm_pressed, &btn, true);  \

=== modified file 'src/wui/game_options_sound_menu.cc'
--- src/wui/game_options_sound_menu.cc	2014-09-10 08:55:04 +0000
+++ src/wui/game_options_sound_menu.cc	2014-12-05 20:26:47 +0000
@@ -49,7 +49,7 @@
 	 + 1 * vspacing() + ingame_music_volume_label.get_h(),
 	 get_inner_w() - 2 * hmargin(), slideh(),
 	 0, g_sound_handler.get_max_volume(), g_sound_handler.get_music_volume(),
-	 g_gr->images().get("pics/but1.png")),
+	 ImageCatalog::Key::kButton1),
 ingame_sound_volume_label
 	(this,
 	 hmargin(),
@@ -64,7 +64,7 @@
 	 + ingame_music_volume_label.get_h() + ingame_music_volume_label.get_h(),
 	 get_inner_w() - 2 * hmargin(), slideh(),
 	 0, g_sound_handler.get_max_volume(), g_sound_handler.get_fx_volume(),
-	 g_gr->images().get("pics/but1.png"))
+	 ImageCatalog::Key::kButton1)
 {
 	ingame_music.set_state(!g_sound_handler.get_disable_music());
 	ingame_sound.set_state(!g_sound_handler.get_disable_fx   ());

=== modified file 'src/wui/game_summary.cc'
--- src/wui/game_summary.cc	2014-10-16 05:21:30 +0000
+++ src/wui/game_summary.cc	2014-12-05 20:26:47 +0000
@@ -74,16 +74,16 @@
 	m_continue_button = new UI::Button
 		(buttonBox, "continue_button",
 		 0, 0, 35, 35,
-		 g_gr->images().get("pics/but4.png"),
-		 g_gr->images().get("pics/continue.png"),
+		 ImageCatalog::Key::kButton4,
+		 g_gr->cataloged_image(ImageCatalog::Key::kActionContinue),
 		 _("Continue playing"));
 	buttonBox->add(m_continue_button, UI::Box::AlignRight);
 	buttonBox->add_space(PADDING);
 	m_stop_button = new UI::Button
 		(buttonBox, "stop_button",
 		 0, 0, 35, 35,
-		 g_gr->images().get("pics/but4.png"),
-		 g_gr->images().get("pics/menu_exit_game.png"),
+		 ImageCatalog::Key::kButton4,
+		 g_gr->cataloged_image(ImageCatalog::Key::kMenuOptionsExit),
 		_("Exit Game"));
 	buttonBox->add(m_stop_button, UI::Box::AlignRight);
 	buttonBox->add_space(PADDING);
@@ -144,11 +144,11 @@
 		UI::Table<uintptr_t const>::EntryRecord & te
 			= m_players_table->add(i);
 		// Player name & pic
-		std::string pic_path =
-			(boost::format("pics/genstats_enable_plr_0%|1$u|.png")
-			 % static_cast<unsigned int>(pes.player)).str();
-		const Image* pic = g_gr->images().get(pic_path);
-		te.set_picture(0, pic, p->get_name());
+		ImageCatalog::Key offset = ImageCatalog::Key::kPlayerFlag1;
+		const Image* player_image =
+				g_gr->cataloged_image(static_cast<ImageCatalog::Key>(pes.player - 1 +
+																						static_cast<uint8_t>(offset)));
+		te.set_picture(0, player_image, p->get_name());
 		// Team
 		std::string team_str =
 			(boost::format("%|1$u|")

=== modified file 'src/wui/game_tips.cc'
--- src/wui/game_tips.cc	2014-10-14 06:30:20 +0000
+++ src/wui/game_tips.cc	2014-12-05 20:26:47 +0000
@@ -29,7 +29,6 @@
 #include "wui/text_layout.h"
 
 #define DEFAULT_INTERVAL 5  // seconds
-#define BG_IMAGE "pics/tips_bg.png"
 
 GameTips::GameTips
 	(UI::ProgressWindow & progressWindow, const std::vector<std::string>& names)
@@ -61,7 +60,7 @@
 /// Loads tips out of \var filename
 void GameTips::load_tips(std::string name)
 {
-	std::string filename = "txts/tips/" + name + ".tip";
+	std::string filename = "data/txts/tips/" + name + ".tip";
 	try {
 		Profile prof(filename.c_str());
 		while (Section * const s = prof.get_next_section(nullptr)) {
@@ -105,7 +104,7 @@
 
 void GameTips::show_tip(int32_t index) {
 	// try to load a background
-	const Image* pic_background = g_gr->images().get(BG_IMAGE);
+	const Image* pic_background = g_gr->cataloged_image(ImageCatalog::Key::kLoadscreenTips);
 	assert(pic_background);
 
 	RenderTarget & rt = *g_gr->get_render_target();

=== modified file 'src/wui/general_statistics_menu.cc'
--- src/wui/general_statistics_menu.cc	2014-11-30 18:49:38 +0000
+++ src/wui/general_statistics_menu.cc	2014-12-05 20:26:47 +0000
@@ -21,8 +21,6 @@
 
 #include <memory>
 
-#include <boost/format.hpp>
-
 #include "base/i18n.h"
 #include "graphic/graphic.h"
 #include "graphic/rendertarget.h"
@@ -145,14 +143,15 @@
 	iterate_players_existing_novar(p, nr_players, game) ++plr_in_game;
 
 	iterate_players_existing_const(p, nr_players, game, player) {
-		const std::string pic = (boost::format("pics/genstats_enable_plr_%02u.png")
-										 % static_cast<unsigned int>(p)).str();
+		ImageCatalog::Key offset = ImageCatalog::Key::kPlayerFlag1;
+		const Image* player_image =
+				g_gr->cataloged_image(static_cast<ImageCatalog::Key>(p - 1 + static_cast<uint8_t>(offset)));
 		UI::Button & cb =
 			*new UI::Button
 				(hbox1, "playerbutton",
 				 0, 0, 25, 25,
-				 g_gr->images().get("pics/but4.png"),
-				 g_gr->images().get(pic),
+				 ImageCatalog::Key::kButton4,
+				 player_image,
 				 player->get_name().c_str());
 		cb.sigclicked.connect
 			(boost::bind(&GeneralStatisticsMenu::cb_changed_to, this, p));
@@ -173,7 +172,7 @@
 	m_radiogroup.add_button
 		(hbox2,
 		 Point(0, 0),
-		 g_gr->images().get("pics/genstats_landsize.png"),
+		 g_gr->cataloged_image(ImageCatalog::Key::kStatsLandsize),
 		 _("Land"),
 		 &btn);
 	hbox2->add(btn, UI::Box::AlignLeft, false, true);
@@ -181,7 +180,7 @@
 	m_radiogroup.add_button
 		(hbox2,
 		 Point(0, 0),
-		 g_gr->images().get("pics/genstats_nrworkers.png"),
+		 g_gr->cataloged_image(ImageCatalog::Key::kStatsWorkersNumber),
 		 _("Workers"),
 		 &btn);
 	hbox2->add(btn, UI::Box::AlignLeft, false, true);
@@ -189,7 +188,7 @@
 	m_radiogroup.add_button
 		(hbox2,
 		 Point(0, 0),
-		 g_gr->images().get("pics/genstats_nrbuildings.png"),
+		 g_gr->cataloged_image(ImageCatalog::Key::kStatsBuildingsNumber),
 		 _("Buildings"),
 		 &btn);
 	hbox2->add(btn, UI::Box::AlignLeft, false, true);
@@ -197,7 +196,7 @@
 	m_radiogroup.add_button
 		(hbox2,
 		 Point(0, 0),
-		 g_gr->images().get("pics/genstats_nrwares.png"),
+		 g_gr->cataloged_image(ImageCatalog::Key::kStatsWaresNumber),
 		 _("Wares"),
 		 &btn);
 	hbox2->add(btn, UI::Box::AlignLeft, false, true);
@@ -205,7 +204,7 @@
 	m_radiogroup.add_button
 		(hbox2,
 		 Point(0, 0),
-		 g_gr->images().get("pics/genstats_productivity.png"),
+		 g_gr->cataloged_image(ImageCatalog::Key::kStatsProductivity),
 		 _("Productivity"),
 		 &btn);
 	hbox2->add(btn, UI::Box::AlignLeft, false, true);
@@ -213,7 +212,7 @@
 	m_radiogroup.add_button
 		(hbox2,
 		 Point(0, 0),
-		 g_gr->images().get("pics/genstats_casualties.png"),
+		 g_gr->cataloged_image(ImageCatalog::Key::kStatsCasualties),
 		 _("Casualties"),
 		 &btn);
 	hbox2->add(btn, UI::Box::AlignLeft, false, true);
@@ -221,7 +220,7 @@
 	m_radiogroup.add_button
 		(hbox2,
 		 Point(0, 0),
-		 g_gr->images().get("pics/genstats_kills.png"),
+		 g_gr->cataloged_image(ImageCatalog::Key::kStatsKills),
 		 _("Kills"),
 		 &btn);
 	hbox2->add(btn, UI::Box::AlignLeft, false, true);
@@ -229,7 +228,7 @@
 	m_radiogroup.add_button
 		(hbox2,
 		 Point(0, 0),
-		 g_gr->images().get("pics/genstats_msites_lost.png"),
+		 g_gr->cataloged_image(ImageCatalog::Key::kStatsMilitarySitesLost),
 		 _("Military buildings lost"),
 		 &btn);
 	hbox2->add(btn, UI::Box::AlignLeft, false, true);
@@ -237,7 +236,7 @@
 	m_radiogroup.add_button
 		(hbox2,
 		 Point(0, 0),
-		 g_gr->images().get("pics/genstats_msites_defeated.png"),
+		 g_gr->cataloged_image(ImageCatalog::Key::kStatsMilitarySitesDefeated),
 		 _("Military buildings defeated"),
 		 &btn);
 	hbox2->add(btn, UI::Box::AlignLeft, false, true);
@@ -245,7 +244,7 @@
 	m_radiogroup.add_button
 		(hbox2,
 		 Point(0, 0),
-		 g_gr->images().get("pics/genstats_civil_blds_lost.png"),
+		 g_gr->cataloged_image(ImageCatalog::Key::kStatsBuildingsLost),
 		 _("Civilian buildings lost"),
 		 &btn);
 	hbox2->add(btn, UI::Box::AlignLeft, false, true);
@@ -253,7 +252,7 @@
 	m_radiogroup.add_button
 		(hbox2,
 		 Point(0, 0),
-		 g_gr->images().get("pics/genstats_militarystrength.png"),
+		 g_gr->cataloged_image(ImageCatalog::Key::kStatsMilitaryStrength),
 		 _("Military"),
 		 &btn);
 	hbox2->add(btn, UI::Box::AlignLeft, false, true);
@@ -274,12 +273,8 @@
 
 	m_box.add(hbox2, UI::Box::AlignTop, true);
 
-	m_box.add
-		(new WuiPlotAreaSlider
-			(&m_box, m_plot, 0, 0, 100, 45,
-			 g_gr->images().get("pics/but1.png"))
-		, UI::Box::AlignTop
-		, true);
+	m_box.add(new WuiPlotAreaSlider(&m_box, m_plot, 0, 0, 100, 45, ImageCatalog::Key::kButton1),
+				 UI::Box::AlignTop, true);
 
 }
 

=== modified file 'src/wui/interactive_base.cc'
--- src/wui/interactive_base.cc	2014-12-03 08:14:35 +0000
+++ src/wui/interactive_base.cc	2014-12-05 20:26:47 +0000
@@ -100,12 +100,12 @@
      m_road_build_player(0),
      unique_window_handler_(new UniqueWindowHandler()),
      // Start at idx 0 for 2 enhancements, idx 3 for 1, idx 5 if none
-     m_workarea_pics{g_gr->images().get("pics/workarea123.png"),
-                     g_gr->images().get("pics/workarea23.png"),
-                     g_gr->images().get("pics/workarea3.png"),
-                     g_gr->images().get("pics/workarea12.png"),
-                     g_gr->images().get("pics/workarea2.png"),
-                     g_gr->images().get("pics/workarea1.png")} {
+	  m_workarea_pics{g_gr->cataloged_image(ImageCatalog::Key::kOverlaysWorkarea123),
+							g_gr->cataloged_image(ImageCatalog::Key::kOverlaysWorkarea23),
+							g_gr->cataloged_image(ImageCatalog::Key::kOverlaysWorkarea3),
+							g_gr->cataloged_image(ImageCatalog::Key::kOverlaysWorkarea12),
+							g_gr->cataloged_image(ImageCatalog::Key::kOverlaysWorkarea2),
+							g_gr->cataloged_image(ImageCatalog::Key::kOverlaysWorkarea1)} {
 
 	graphic_resolution_changed_subscriber_ = Notifications::subscribe<GraphicResolutionChanged>(
 	   [this](const GraphicResolutionChanged& message) {
@@ -134,7 +134,7 @@
 
 	//  Having this in the initializer list (before Sys_InitGraphics) will give
 	//  funny results.
-	m_sel.pic = g_gr->images().get("pics/fsel.png");
+	m_sel.pic = g_gr->cataloged_image(ImageCatalog::Key::kSelect);
 
 	setDefaultCommand (boost::bind(&InteractiveBase::cmd_lua, this, _1));
 	addCommand
@@ -224,12 +224,12 @@
 /*
  * Set/Unset sel picture
  */
-void InteractiveBase::set_sel_picture(const char * const file) {
-	m_sel.pic = g_gr->images().get(file);
+void InteractiveBase::set_sel_picture(ImageCatalog::Key key) {
+	m_sel.pic = g_gr->cataloged_image(key);
 	set_sel_pos(get_sel_pos()); //  redraw
 }
 void InteractiveBase::unset_sel_picture() {
-	set_sel_picture("pics/fsel.png");
+	set_sel_picture(ImageCatalog::Key::kSelect);
 }
 
 
@@ -815,22 +815,22 @@
 		else
 			slope = endpos.field->get_height() - neighb.field->get_height();
 
-		const char * name = nullptr;
+		const Image* road_image = nullptr;
 
 		if (slope <= -4)
-			name = "pics/roadb_reddown.png";
+			road_image = g_gr->cataloged_image(ImageCatalog::Key::kOverlaysRoadbuildingSteepDecending);
 		else if (slope <= -2)
-			name = "pics/roadb_yellowdown.png";
+			road_image = g_gr->cataloged_image(ImageCatalog::Key::kOverlaysRoadbuildingDecending);
 		else if (slope < 2)
-			name = "pics/roadb_green.png";
+			road_image = g_gr->cataloged_image(ImageCatalog::Key::kOverlaysRoadbuildingLevel);
 		else if (slope < 4)
-			name = "pics/roadb_yellow.png";
+			road_image = g_gr->cataloged_image(ImageCatalog::Key::kOverlaysRoadbuildingAscending);
 		else
-			name = "pics/roadb_red.png";
+			road_image = g_gr->cataloged_image(ImageCatalog::Key::kOverlaysRoadbuildingSteepAscending);
 
 		egbase().map().overlay_manager().register_overlay
 			(neighb,
-			 g_gr->images().get(name),
+			 road_image,
 			 7,
 			 Point::invalid(),
 			 m_road_buildhelp_overlay_jobid);

=== modified file 'src/wui/interactive_base.h'
--- src/wui/interactive_base.h	2014-11-30 12:23:45 +0000
+++ src/wui/interactive_base.h	2014-12-05 20:26:47 +0000
@@ -138,8 +138,10 @@
 	void draw_overlay(RenderTarget &) override;
 	bool handle_key(bool down, SDL_Keysym) override;
 
+	// Uses 'key' to fetch and set the sel_picture from the ImageCatalog.
+	void set_sel_picture(ImageCatalog::Key key);
 	void unset_sel_picture();
-	void set_sel_picture(const char * const);
+
 	void adjust_toolbar_position() {
 		m_toolbar.set_pos
 			(Point((get_inner_w() - m_toolbar.get_w()) >> 1, get_inner_h() - 34));
@@ -198,8 +200,7 @@
 	std::vector<const Image*> m_workarea_pics;
 };
 
-#define PIC2 g_gr->images().get("pics/but2.png")
 #define TOOLBAR_BUTTON_COMMON_PARAMETERS(name) \
-    &m_toolbar, name, 0, 0, 34U, 34U, PIC2
+	 &m_toolbar, name, 0, 0, 34U, 34U, ImageCatalog::Key::kButton2
 
 #endif  // end of include guard: WL_WUI_INTERACTIVE_BASE_H

=== modified file 'src/wui/interactive_player.cc'
--- src/wui/interactive_player.cc	2014-12-03 08:14:35 +0000
+++ src/wui/interactive_player.cc	2014-12-05 20:26:47 +0000
@@ -87,42 +87,42 @@
 // Buildhelp is different as it does not toggle a UniqueWindow
 // Minimap is different as it warps and stuff
 
-#define INIT_BTN_this(picture, name, tooltip)                       \
+#define INIT_BTN_this(image_key, name, tooltip)                       \
  TOOLBAR_BUTTON_COMMON_PARAMETERS(name),                                      \
- g_gr->images().get("pics/" picture ".png"),                      \
+ g_gr->cataloged_image(image_key),                      \
  tooltip                                                                      \
 
 
-#define INIT_BTN(picture, name, tooltip)                            \
+#define INIT_BTN(image_key, name, tooltip)                            \
  TOOLBAR_BUTTON_COMMON_PARAMETERS(name),                                      \
- g_gr->images().get("pics/" picture ".png"),                      \
+ g_gr->cataloged_image(image_key),                      \
  tooltip                                                                      \
 
 
 m_toggle_chat
 	(INIT_BTN_this
-	 ("menu_chat", "chat", _("Chat"))),
+	 (ImageCatalog::Key::kMenuChat, "chat", _("Chat"))),
 m_toggle_options_menu
 	(INIT_BTN
-	 ("menu_options_menu", "options_menu", _("Options"))),
+	 (ImageCatalog::Key::kMenuOptions, "options_menu", _("Options"))),
 m_toggle_statistics_menu
 	(INIT_BTN
-	 ("menu_toggle_menu", "statistics_menu", _("Statistics"))),
+	 (ImageCatalog::Key::kMenuStatistics, "statistics_menu", _("Statistics"))),
 m_toggle_objectives
 	(INIT_BTN
-	 ("menu_objectives", "objectives", _("Objectives"))),
+	 (ImageCatalog::Key::kMenuObjectives, "objectives", _("Objectives"))),
 m_toggle_minimap
 	(INIT_BTN_this
-	 ("menu_toggle_minimap", "minimap", _("Minimap"))),
+	 (ImageCatalog::Key::kMenuMinimap, "minimap", _("Minimap"))),
 m_toggle_buildhelp
 	(INIT_BTN_this
-	 ("menu_toggle_buildhelp", "buildhelp", _("Show Building Spaces (on/off)"))),
+	 (ImageCatalog::Key::kMenuBuildhelp, "buildhelp", _("Show Building Spaces (on/off)"))),
 m_toggle_message_menu
 	(INIT_BTN
-	 ("menu_toggle_oldmessage_menu", "messages", _("Messages"))),
+	 (ImageCatalog::Key::kMenuMessagesOld, "messages", _("Messages"))),
 m_toggle_help
 	(INIT_BTN
-	 ("menu_help", "help", _("Tribal Ware Encyclopedia")))
+	 (ImageCatalog::Key::kHelp, "help", _("Tribal Ware Encyclopedia")))
 
 {
 	m_toggle_chat.sigclicked.connect
@@ -250,18 +250,19 @@
 		m_toggle_chat.set_enabled(m_chatenabled);
 	}
 	{
-		char const * msg_icon = "pics/menu_toggle_oldmessage_menu.png";
+		ImageCatalog::Key image_key = ImageCatalog::Key::kMenuMessagesOld;
+
 		std::string msg_tooltip = _("Messages");
 		if
 			(uint32_t const nr_new_messages =
 			 	player().messages().nr_messages(Widelands::Message::New))
 		{
-			msg_icon    = "pics/menu_toggle_newmessage_menu.png";
+			image_key = ImageCatalog::Key::kMenuMessagesNew;
 			msg_tooltip =
 			   (boost::format(ngettext("%u new message", "%u new messages", nr_new_messages)) %
 			    nr_new_messages).str();
 		}
-		m_toggle_message_menu.set_pic(g_gr->images().get(msg_icon));
+		m_toggle_message_menu.set_image(g_gr->cataloged_image(image_key));
 		m_toggle_message_menu.set_tooltip(msg_tooltip);
 	}
 }

=== modified file 'src/wui/interactive_spectator.cc'
--- src/wui/interactive_spectator.cc	2014-12-03 08:14:35 +0000
+++ src/wui/interactive_spectator.cc	2014-12-05 20:26:47 +0000
@@ -42,23 +42,23 @@
 	:
 	InteractiveGameBase(_game, global_s, OBSERVER, multiplayer, multiplayer),
 
-#define INIT_BTN(picture, name, tooltip)                            \
+#define INIT_BTN(image_key, name, tooltip)                            \
  TOOLBAR_BUTTON_COMMON_PARAMETERS(name),                                      \
- g_gr->images().get("pics/" picture ".png"),                      \
+ g_gr->cataloged_image(image_key),                      \
  tooltip                                                                      \
 
 	m_toggle_chat
-		(INIT_BTN("menu_chat", "chat", _("Chat"))),
+		(INIT_BTN(ImageCatalog::Key::kMenuChat, "chat", _("Chat"))),
 	m_exit
-		(INIT_BTN("menu_exit_game", "exit_replay", _("Exit Replay"))),
+		(INIT_BTN(ImageCatalog::Key::kMenuOptionsExit, "exit_replay", _("Exit Replay"))),
 	m_save
-		(INIT_BTN("menu_save_game", "save_game", _("Save Game"))),
+		(INIT_BTN(ImageCatalog::Key::kMenuOptionsSave, "save_game", _("Save Game"))),
 	m_toggle_options_menu
-		(INIT_BTN("menu_options_menu", "options_menu", _("Options"))),
+		(INIT_BTN(ImageCatalog::Key::kMenuOptions, "options_menu", _("Options"))),
 	m_toggle_statistics
-		(INIT_BTN("menu_general_stats", "general_stats", _("Statistics"))),
+		(INIT_BTN(ImageCatalog::Key::kMenuStatsGeneral, "general_stats", _("Statistics"))),
 	m_toggle_minimap
-		(INIT_BTN("menu_toggle_minimap", "minimap", _("Minimap")))
+		(INIT_BTN(ImageCatalog::Key::kMenuMinimap, "minimap", _("Minimap")))
 {
 	m_toggle_chat.sigclicked.connect(boost::bind(&InteractiveSpectator::toggle_chat, this));
 	m_exit.sigclicked.connect(boost::bind(&InteractiveSpectator::exit_btn, this));

=== modified file 'src/wui/login_box.cc'
--- src/wui/login_box.cc	2014-09-29 19:25:24 +0000
+++ src/wui/login_box.cc	2014-12-05 20:26:47 +0000
@@ -36,13 +36,13 @@
 	eb_nickname =
 		new UI::EditBox
 			(this, 150, margin, 330, 20,
-			 g_gr->images().get("pics/but2.png"), UI::Align_Left);
+			 ImageCatalog::Key::kButton2, UI::Align_Left);
 
 	ta_password = new UI::Textarea(this, margin, 40, _("Password:"));
 	eb_password =
 		new UI::EditBox
 			(this, 150, 40, 330, 20,
-			 g_gr->images().get("pics/but2.png"), UI::Align_Left);
+			 ImageCatalog::Key::kButton2, UI::Align_Left);
 
 	pwd_warning =
 		new UI::MultilineTextarea
@@ -63,13 +63,13 @@
 		(this, "login",
 		 (get_inner_w() / 2 - 200) / 2, get_inner_h() - 20 - margin,
 		 200, 20,
-		 g_gr->images().get("pics/but0.png"),
+		 ImageCatalog::Key::kButton0,
 		 _("Login"));
 	loginbtn->sigclicked.connect(boost::bind(&LoginBox::pressed_login, boost::ref(*this)));
 	UI::Button * cancelbtn = new UI::Button
 		(this, "cancel",
 		 (get_inner_w() / 2 - 200) / 2 + get_inner_w() / 2, loginbtn->get_y(), 200, 20,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 _("Cancel"));
 	cancelbtn->sigclicked.connect(boost::bind(&LoginBox::pressed_cancel, boost::ref(*this)));
 

=== modified file 'src/wui/militarysitewindow.cc'
--- src/wui/militarysitewindow.cc	2014-11-30 18:49:38 +0000
+++ src/wui/militarysitewindow.cc	2014-12-05 20:26:47 +0000
@@ -26,8 +26,6 @@
 
 using Widelands::MilitarySite;
 
-static char const * pic_tab_military = "pics/menu_tab_military.png";
-
 /**
  * Status window for \ref MilitarySite
  */
@@ -54,7 +52,7 @@
 BuildingWindow(parent, ms, registry)
 {
 	get_tabs()->add
-		("soldiers", g_gr->images().get(pic_tab_military),
+		("soldiers", g_gr->cataloged_image(ImageCatalog::Key::kBuildingTabMilitary),
 		 create_soldier_list(*get_tabs(), parent, militarysite()),
 		 _("Soldiers"));
 }

=== modified file 'src/wui/minimap.cc'
--- src/wui/minimap.cc	2014-11-30 18:49:38 +0000
+++ src/wui/minimap.cc	2014-12-05 20:26:47 +0000
@@ -41,7 +41,7 @@
 	m_ibase       (ibase),
 	m_viewx       (0),
 	m_viewy       (0),
-	m_pic_map_spot(g_gr->images().get("pics/map_spot.png")),
+	m_pic_map_spot(g_gr->cataloged_image(ImageCatalog::Key::kOverlaysMapSpot)),
 	m_flags       (flags)
 {}
 
@@ -145,38 +145,38 @@
 	button_terrn
 		(this, "terrain",
 		 but_w() * 0, m_view.get_h() + but_h() * 0, but_w(), but_h(),
-		 g_gr->images().get("pics/but0.png"),
-		 g_gr->images().get("pics/button_terrn.png"),
+		 ImageCatalog::Key::kButton0,
+		 g_gr->cataloged_image(ImageCatalog::Key::kMinimapTerrain),
 		 _("Terrain")),
 	button_owner
 		(this, "owner",
 		 but_w() * 1, m_view.get_h() + but_h() * 0, but_w(), but_h(),
-		 g_gr->images().get("pics/but0.png"),
-		 g_gr->images().get("pics/button_owner.png"),
+		 ImageCatalog::Key::kButton0,
+		 g_gr->cataloged_image(ImageCatalog::Key::kMinimapOwner),
 		 _("Owner")),
 	button_flags
 		(this, "flags",
 		 but_w() * 2, m_view.get_h() + but_h() * 0, but_w(), but_h(),
-		 g_gr->images().get("pics/but0.png"),
-		 g_gr->images().get("pics/button_flags.png"),
+		 ImageCatalog::Key::kButton0,
+		 g_gr->cataloged_image(ImageCatalog::Key::kMinimapFlags),
 		 _("Flags")),
 	button_roads
 		(this, "roads",
 		 but_w() * 0, m_view.get_h() + but_h() * 1, but_w(), but_h(),
-		 g_gr->images().get("pics/but0.png"),
-		 g_gr->images().get("pics/button_roads.png"),
+		 ImageCatalog::Key::kButton0,
+		 g_gr->cataloged_image(ImageCatalog::Key::kMinimapRoads),
 		 _("Roads")),
 	button_bldns
 		(this, "buildings",
 		 but_w() * 1, m_view.get_h() + but_h() * 1, but_w(), but_h(),
-		 g_gr->images().get("pics/but0.png"),
-		 g_gr->images().get("pics/button_bldns.png"),
+		 ImageCatalog::Key::kButton0,
+		 g_gr->cataloged_image(ImageCatalog::Key::kMinimapBuildings),
 		 _("Buildings")),
 	button_zoom
 		(this, "zoom",
 		 but_w() * 2, m_view.get_h() + but_h() * 1, but_w(), but_h(),
-		 g_gr->images().get("pics/but0.png"),
-		 g_gr->images().get("pics/button_zoom.png"),
+		 ImageCatalog::Key::kButton0,
+		 g_gr->cataloged_image(ImageCatalog::Key::kMinimapZoom),
 		 _("Zoom"))
 {
 	button_terrn.sigclicked.connect(boost::bind(&MiniMap::toggle, boost::ref(*this), MiniMapLayer::Terrain));

=== modified file 'src/wui/multiplayersetupgroup.cc'
--- src/wui/multiplayersetupgroup.cc	2014-10-27 10:14:10 +0000
+++ src/wui/multiplayersetupgroup.cc	2014-12-05 20:26:47 +0000
@@ -64,7 +64,7 @@
 			type = new UI::Button
 				(this, "client_type",
 				 0, 0, h, h,
-				 g_gr->images().get("pics/but1.png"),
+				 ImageCatalog::Key::kButton1,
 				 std::string(), std::string(), true, false);
 			type->sigclicked.connect
 				(boost::bind
@@ -74,7 +74,7 @@
 		} else { // just a shown client
 			type_icon = new UI::Icon
 				(this, 0, 0, h, h,
-				 g_gr->images().get("pics/menu_tab_watch.png"));
+				 g_gr->cataloged_image(ImageCatalog::Key::kFieldTabWatch));
 			add(type_icon, UI::Box::AlignCenter);
 		}
 
@@ -115,25 +115,27 @@
 		} else {
 			name->set_text(us.name);
 			if (m_save != us.position) {
-				std::string pic;
+				const Image* player_image;
 				std::string temp_tooltip;
 				if (us.position < UserSettings::highest_playernum()) {
-					pic = (boost::format("pics/genstats_enable_plr_0%u.png")
-							  % static_cast<unsigned int>(us.position + 1)).str();
+					// NOCOM(GunChleoc): Review this
+					ImageCatalog::Key offset = ImageCatalog::Key::kPlayerFlag1;
+					player_image = g_gr->cataloged_image(static_cast<ImageCatalog::Key>(us.position +
+																									static_cast<uint8_t>(offset)));
 					temp_tooltip = (boost::format(_("Player %u"))
 										 % static_cast<unsigned int>(us.position + 1)).str();
 				} else {
-					pic = "pics/menu_tab_watch.png";
+					player_image = g_gr->cataloged_image(ImageCatalog::Key::kFieldTabWatch);
 					temp_tooltip = _("Spectator");
 				}
 
 				// Either Button if changeable OR text if not
 				if (m_id == s->settings().usernum) {
-					type->set_pic(g_gr->images().get(pic));
+					type->set_image(player_image);
 					type->set_tooltip(temp_tooltip);
 					type->set_visible(true);
 				} else {
-					type_icon->set_icon(g_gr->images().get(pic));
+					type_icon->set_icon(player_image);
 					type_icon->set_tooltip(temp_tooltip);
 					type_icon->set_visible(true);
 				}
@@ -173,15 +175,16 @@
 	{
 		set_size(w, h);
 
-		const std::string pic = (boost::format("pics/fsel_editor_set_player_0%i_pos.png")
-										 % static_cast<unsigned int>(id + 1)).str();
-		player =
-			new UI::Icon(this, 0, 0, h, h, g_gr->images().get(pic));
+		ImageCatalog::Key offset = ImageCatalog::Key::kPlayerStartingPosSmall1;
+		const Image* player_image =
+				g_gr->cataloged_image(static_cast<ImageCatalog::Key>(id + static_cast<uint8_t>(offset)));
+		player = new UI::Icon(this, 0, 0, h, h, player_image);
 		add(player, UI::Box::AlignCenter);
+
 		type = new UI::Button
 			(this, "player_type",
 			 0, 0, h, h,
-			 g_gr->images().get("pics/but1.png"),
+			 ImageCatalog::Key::kButton1,
 			 std::string(), std::string(), true, false);
 		type->sigclicked.connect
 			(boost::bind
@@ -191,7 +194,7 @@
 		tribe = new UI::Button
 			(this, "player_tribe",
 			 0, 0, h, h,
-			 g_gr->images().get("pics/but1.png"),
+			 ImageCatalog::Key::kButton1,
 			 std::string(), std::string(), true, false);
 		tribe->sigclicked.connect
 			(boost::bind
@@ -202,7 +205,7 @@
 		init = new UI::Button
 			(this, "player_init",
 			 0, 0, w - 4 * h, h,
-			 g_gr->images().get("pics/but1.png"),
+			 ImageCatalog::Key::kButton1,
 			 std::string(), std::string(), true, false);
 		init->sigclicked.connect
 			(boost::bind
@@ -212,7 +215,7 @@
 		team = new UI::Button
 			(this, "player_team",
 			 0, 0, h, h,
-			 g_gr->images().get("pics/but1.png"),
+			 ImageCatalog::Key::kButton1,
 			 std::string(), std::string(), true, false);
 		team->sigclicked.connect
 			(boost::bind
@@ -263,7 +266,7 @@
 		type->set_enabled(typeaccess);
 		if (player_setting.state == PlayerSettings::stateClosed) {
 			type ->set_tooltip(_("Closed"));
-			type ->set_pic(g_gr->images().get("pics/stop.png"));
+			type ->set_image(g_gr->cataloged_image(ImageCatalog::Key::kActionStop));
 			team ->set_visible(false);
 			team ->set_enabled(false);
 			tribe->set_visible(false);
@@ -274,7 +277,7 @@
 			return;
 		} else if (player_setting.state == PlayerSettings::stateOpen) {
 			type ->set_tooltip(_("Open"));
-			type ->set_pic(g_gr->images().get("pics/continue.png"));
+			type ->set_image(g_gr->cataloged_image(ImageCatalog::Key::kActionContinue));
 			team ->set_visible(false);
 			team ->set_enabled(false);
 			tribe->set_visible(false);
@@ -285,12 +288,14 @@
 			return;
 		} else if (player_setting.state == PlayerSettings::stateShared) {
 			type ->set_tooltip(_("Shared in"));
-			type ->set_pic(g_gr->images().get("pics/shared_in.png"));
-
-			const std::string pic = (boost::format("pics/fsel_editor_set_player_0%u_pos.png")
-											 % static_cast<unsigned int>(player_setting.shared_in)).str();
-
-			tribe->set_pic(g_gr->images().get(pic));
+			type ->set_image(g_gr->cataloged_image(ImageCatalog::Key::kFullscreenSharedIn));
+
+			ImageCatalog::Key offset = ImageCatalog::Key::kPlayerStartingPosSmall1;
+			const Image* player_image =
+					g_gr->cataloged_image(static_cast<ImageCatalog::Key>(player_setting.shared_in - 1 +
+																							static_cast<uint8_t>(offset)));
+
+			tribe->set_image(player_image);
 			tribe->set_tooltip((boost::format(_("Player %u"))
 									  % static_cast<unsigned int>(player_setting.shared_in)).str());
 
@@ -301,34 +306,37 @@
 			tribe->set_enabled(true);
 		} else {
 			std::string title;
-			std::string pic = "pics/";
+			std::string pic;
 			if (player_setting.state == PlayerSettings::stateComputer) {
 				if (player_setting.ai.empty()) {
 					title = _("Computer");
-					pic += "novalue.png";
+					pic = g_gr->image_catalog().filepath(ImageCatalog::Key::kNoValue);
 				} else {
 					if (player_setting.random_ai) {
 						title = (boost::format(_("AI: %s")) % _("Random")).str();
-						pic += "ai_Random.png";
+						pic = g_gr->image_catalog().filepath(ImageCatalog::Key::kAiRandom);
 					} else {
 						title = (boost::format(_("AI: %s")) % _(player_setting.ai)).str();
-						pic += "ai_" + player_setting.ai + ".png";
+						// TODO(GunChleoc): We should use the image catalog instead.
+						// NOCOM(GunChleoc): Review this. I could not get these to play ball easily, so I decided to leave this one.
+						pic = (boost::format("data/images/ai/%s.png")
+								 % player_setting.ai.c_str()).str();
 					}
 				}
 			} else { // PlayerSettings::stateHuman
 				title = _("Human");
-				pic += "genstats_nrworkers.png";
+				pic = g_gr->image_catalog().filepath(ImageCatalog::Key::kStatsWorkersNumber);
 			}
 			type->set_tooltip(title.c_str());
-			type->set_pic(g_gr->images().get(pic));
+			type->set_image(g_gr->images().get(pic));
 			if (player_setting.random_tribe) {
 				std::string random = _("Random");
 				if (!m_tribenames["random"].size())
-					m_tribepics[random] = g_gr->images().get("pics/random.png");
+					m_tribepics[random] = g_gr->cataloged_image(ImageCatalog::Key::kFullscreenRandomTribe);
 				tribe->set_tooltip(random.c_str());
-				tribe->set_pic(m_tribepics[random]);
+				tribe->set_image(m_tribepics[random]);
 			} else {
-				std::string tribepath("tribes/" + player_setting.tribe);
+				std::string tribepath("data/tribes/" + player_setting.tribe);
 				if (!m_tribenames[player_setting.tribe].size()) {
 					// get tribes name and picture
 					Profile prof((tribepath + "/conf").c_str(), nullptr, "tribe_" + player_setting.tribe);
@@ -338,7 +346,7 @@
 						g_gr->images().get((tribepath + "/") + global.get_safe_string("icon"));
 				}
 				tribe->set_tooltip(m_tribenames[player_setting.tribe].c_str());
-				tribe->set_pic(m_tribepics[player_setting.tribe]);
+				tribe->set_image(m_tribepics[player_setting.tribe]);
 			}
 			tribe->set_flat(false);
 
@@ -360,8 +368,9 @@
 		else if (settings.savegame)
 			init->set_title(_("Savegame"));
 		else {
-			std::string tribepath("tribes/" + player_setting.tribe);
-			i18n::Textdomain td(tribepath); // for translated initialisation
+			std::string tribepath("data/tribes/" + player_setting.tribe);
+			// for translated initialisation
+			i18n::Textdomain td(textdomain(std::string("tribe_" + player_setting.tribe).c_str()));
 			for (const TribeBasicInfo& tribeinfo : settings.tribes) {
 				if (tribeinfo.name == player_setting.tribe) {
 					init->set_title(_(tribeinfo.initializations.at(player_setting.initialization_index).second));

=== modified file 'src/wui/overlay_manager.cc'
--- src/wui/overlay_manager.cc	2014-09-14 11:31:58 +0000
+++ src/wui/overlay_manager.cc	2014-12-05 20:26:47 +0000
@@ -268,27 +268,27 @@
 		return;
 
 	OverlayInfo * buildhelp_info = m_buildhelp_infos;
-	static const char * filenames[] = {
-		"pics/set_flag.png",
-		"pics/small.png",
-		"pics/medium.png",
-		"pics/big.png",
-		"pics/mine.png",
-		"pics/port.png"
+	static const Image * image_files[] = {
+		g_gr->cataloged_image(ImageCatalog::Key::kOverlaysFlag),
+		g_gr->cataloged_image(ImageCatalog::Key::kOverlaysPlotSmall),
+		g_gr->cataloged_image(ImageCatalog::Key::kOverlaysPlotMedium),
+		g_gr->cataloged_image(ImageCatalog::Key::kOverlaysPlotBig),
+		g_gr->cataloged_image(ImageCatalog::Key::kOverlaysPlotMine),
+		g_gr->cataloged_image(ImageCatalog::Key::kOverlaysPlotPort)
 	};
-	const char * const * filename = filenames;
+	const Image * const * image_file = image_files;
 
 	//  Special case for flag, which has a different formula for hotspot_y.
-	buildhelp_info->pic = g_gr->images().get(*filename);
+	buildhelp_info->pic = *image_file;
 	buildhelp_info->hotspot = Point(buildhelp_info->pic->width() / 2, buildhelp_info->pic->height() - 1);
 
 	const OverlayInfo * const buildhelp_infos_end =
 		buildhelp_info + Widelands::Field::Buildhelp_None;
 	for (;;) { // The other buildhelp overlays.
-		++buildhelp_info, ++filename;
+		++buildhelp_info, ++image_file;
 		if (buildhelp_info == buildhelp_infos_end)
 			break;
-		buildhelp_info->pic = g_gr->images().get(*filename);
+		buildhelp_info->pic = *image_file;
 		buildhelp_info->hotspot = Point(buildhelp_info->pic->width() / 2, buildhelp_info->pic->height() / 2);
 	}
 

=== modified file 'src/wui/playerdescrgroup.cc'
--- src/wui/playerdescrgroup.cc	2014-09-30 05:41:55 +0000
+++ src/wui/playerdescrgroup.cc	2014-12-05 20:26:47 +0000
@@ -74,7 +74,7 @@
 	d->btnPlayerType = new UI::Button
 		(this, "player_type",
 		 xplayertype, 0, xplayertribe - xplayertype - 2, h / 2,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 std::string(), std::string(),
 		 true, false);
 	d->btnPlayerType->sigclicked.connect
@@ -83,7 +83,7 @@
 	d->btnPlayerTeam = new UI::Button
 		(this, "player_team",
 		 xplayerteam, h / 2, xplayerinit - xplayerteam - 2, h / 2,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 std::string(), std::string(),
 		 true, false);
 	d->btnPlayerTeam->sigclicked.connect
@@ -92,7 +92,7 @@
 	d->btnPlayerTribe = new UI::Button
 		(this, "player_tribe",
 		 xplayertribe, 0, w - xplayertribe, h / 2,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 std::string(), std::string(),
 		 true, false);
 	d->btnPlayerTribe->sigclicked.connect
@@ -101,7 +101,7 @@
 	d->btnPlayerInit = new UI::Button
 		(this, "player_initialization",
 		 xplayerinit, h / 2, w - xplayerinit, h / 2,
-		 g_gr->images().get("pics/but1.png"),
+		 ImageCatalog::Key::kButton1,
 		 std::string(), _("Initialization"),
 		 true, false);
 	d->btnPlayerInit->sigclicked.connect
@@ -184,7 +184,7 @@
 				title = _("Human");
 			}
 			d->btnPlayerType->set_title(title);
-			std::string tribepath("tribes/" + player.tribe);
+			std::string tribepath("data/tribes/" + player.tribe);
 			if (!m_tribenames[player.tribe].size()) {
 				// get translated tribesname
 				Profile prof
@@ -199,7 +199,7 @@
 			}
 
 			{
-				i18n::Textdomain td(tribepath); // for translated initialisation
+				i18n::Textdomain td(std::string("tribe_") + player.tribe); // for translated initialisation
 				for (const TribeBasicInfo& tribeinfo : settings.tribes) {
 					if (tribeinfo.name == player.tribe) {
 						d->btnPlayerInit->set_title

=== modified file 'src/wui/plot_area.cc'
--- src/wui/plot_area.cc	2014-11-24 07:25:21 +0000
+++ src/wui/plot_area.cc	2014-12-05 20:26:47 +0000
@@ -59,7 +59,6 @@
 	30 * hours
 };
 
-const char BG_PIC[] = "pics/plot_area_bg.png";
 const RGBColor LINE_COLOR(0, 0, 0);
 const RGBColor ZERO_LINE_COLOR(255, 255, 255);
 
@@ -183,7 +182,7 @@
 	// first, tile the background
 	dst.tile
 		(Rect(Point(0, 0), inner_w, inner_h),
-		 g_gr->images().get(BG_PIC), Point(0, 0));
+		 g_gr->cataloged_image(ImageCatalog::Key::kBackgroundPlot), Point(0, 0));
 
 	// Draw coordinate system
 	// X Axis

=== modified file 'src/wui/plot_area.h'
--- src/wui/plot_area.h	2014-09-10 13:03:40 +0000
+++ src/wui/plot_area.h	2014-12-05 20:26:47 +0000
@@ -120,7 +120,7 @@
 		(Panel * const parent,
 		 WuiPlotArea & plot_area,
 		 const int32_t x, const int32_t y, const uint32_t w, const uint32_t h,
-		 const Image* background_picture_id,
+		 const ImageCatalog::Key background_image_key,
 		 const std::string & tooltip_text = std::string(),
 		 const uint32_t cursor_size = 20,
 		 const bool enabled = true)
@@ -129,7 +129,7 @@
 		 x, y, w, h,
 		 plot_area.get_labels(),
 		 plot_area.get_time_id(),
-		 background_picture_id,
+		 background_image_key,
 		 tooltip_text,
 		 cursor_size,
 		 enabled),

=== modified file 'src/wui/productionsitewindow.cc'
--- src/wui/productionsitewindow.cc	2014-10-14 07:53:47 +0000
+++ src/wui/productionsitewindow.cc	2014-12-05 20:26:47 +0000
@@ -35,9 +35,6 @@
 
 using Widelands::ProductionSite;
 
-static char const * pic_tab_wares = "pics/menu_tab_wares.png";
-static char const * pic_tab_workers = "pics/menu_list_workers.png";
-
 /*
 ===============
 Create the window and its panels, add it to the registry.
@@ -64,7 +61,7 @@
 				 UI::Box::AlignLeft);
 
 		get_tabs()->add
-			("wares", g_gr->images().get(pic_tab_wares),
+			("wares", g_gr->cataloged_image(ImageCatalog::Key::kBuildingTabWares),
 			 prod_box, _("Wares"));
 	}
 
@@ -93,8 +90,8 @@
 			m_worker_caps->add_inf_space();
 			UI::Button * evict_button = new UI::Button
 							(m_worker_caps, "evict", 0, 0, 34, 34,
-							 g_gr->images().get("pics/but4.png"),
-							 g_gr->images().get("pics/menu_drop_soldier.png"),
+							 ImageCatalog::Key::kButton4,
+							 g_gr->cataloged_image(ImageCatalog::Key::kBuildingSoldierDrop),
 							 _("Terminate the employment of the selected worker"));
 			evict_button->sigclicked.connect
 					(boost::bind(&ProductionSiteWindow::evict_worker, boost::ref(*this)));
@@ -104,7 +101,7 @@
 		worker_box->add(m_worker_table, UI::Box::AlignLeft, true);
 		worker_box->add(m_worker_caps, UI::Box::AlignLeft, true);
 		get_tabs()->add
-			("workers", g_gr->images().get(pic_tab_workers),
+			("workers", g_gr->cataloged_image(ImageCatalog::Key::kBuildingTabWorkers),
 			 worker_box,
 			 (ngettext("Worker", "Workers", productionsite().descr().nr_working_positions()))
 			);

=== modified file 'src/wui/shipwindow.cc'
--- src/wui/shipwindow.cc	2014-11-30 18:49:38 +0000
+++ src/wui/shipwindow.cc	2014-12-05 20:26:47 +0000
@@ -32,19 +32,6 @@
 #include "wui/interactive_player.h"
 #include "wui/itemwaresdisplay.h"
 
-static const char pic_goto[] = "pics/menu_ship_goto.png";
-static const char pic_destination[] = "pics/menu_ship_destination.png";
-static const char pic_sink[]     = "pics/menu_ship_sink.png";
-static const char pic_cancel_expedition[] = "pics/menu_ship_cancel_expedition.png";
-static const char pic_explore_cw[]  = "pics/ship_explore_island_cw.png";
-static const char pic_explore_ccw[] = "pics/ship_explore_island_ccw.png";
-static const char pic_scout_nw[] = "pics/ship_scout_nw.png";
-static const char pic_scout_ne[] = "pics/ship_scout_ne.png";
-static const char pic_scout_w[]  = "pics/ship_scout_w.png";
-static const char pic_scout_e[]  = "pics/ship_scout_e.png";
-static const char pic_scout_sw[] = "pics/ship_scout_sw.png";
-static const char pic_scout_se[] = "pics/ship_scout_se.png";
-static const char pic_construct_port[] = "pics/fsel_editor_set_port_space.png";
 
 namespace Widelands {
 
@@ -61,7 +48,7 @@
 		(UI::Panel * parent,
 		 const std::string & name,
 		 const std::string & title,
-		 const std::string & picname,
+		 ImageCatalog::Key image_key,
 		 boost::function<void()> callback);
 
 	void act_goto();
@@ -113,55 +100,58 @@
 
 		m_btn_scout[WALK_NW - 1] =
 			make_button
-				(exp_top, "scnw", _("Scout towards the north west"), pic_scout_nw,
+				(exp_top, "scnw", _("Scout towards the north west"), ImageCatalog::Key::kShipScoutNorthWest,
 				 boost::bind(&ShipWindow::act_scout_towards, this, WALK_NW));
 		exp_top->add(m_btn_scout[WALK_NW - 1], 0, false);
 
 		m_btn_explore_island_cw =
 			make_button
-				(exp_top, "expcw", _("Explore the island’s coast clockwise"), pic_explore_cw,
+				(exp_top, "expcw", _("Explore the island’s coast clockwise"),
+				 ImageCatalog::Key::kShipExploreClockwise,
 				 boost::bind(&ShipWindow::act_explore_island, this, true));
 		exp_top->add(m_btn_explore_island_cw, 0, false);
 
 		m_btn_scout[WALK_NE - 1] =
 			make_button
-				(exp_top, "scne", _("Scout towards the north east"), pic_scout_ne,
+				(exp_top, "scne", _("Scout towards the north east"), ImageCatalog::Key::kShipScoutNorthEast,
 				 boost::bind(&ShipWindow::act_scout_towards, this, WALK_NE));
 		exp_top->add(m_btn_scout[WALK_NE - 1], 0, false);
 
 		m_btn_scout[WALK_W - 1] =
 			make_button
-				(exp_mid, "scw", _("Scout towards the west"), pic_scout_w,
+				(exp_mid, "scw", _("Scout towards the west"), ImageCatalog::Key::kShipScoutWest,
 				 boost::bind(&ShipWindow::act_scout_towards, this, WALK_W));
 		exp_mid->add(m_btn_scout[WALK_W - 1], 0, false);
 
 		m_btn_construct_port =
 			make_button
-				(exp_mid, "buildport", _("Construct a port at the current location"), pic_construct_port,
+				(exp_mid, "buildport", _("Construct a port at the current location"),
+				 ImageCatalog::Key::kEditorToolPortSpaceSet,
 				 boost::bind(&ShipWindow::act_construct_port, this));
 		exp_mid->add(m_btn_construct_port, 0, false);
 
 		m_btn_scout[WALK_E - 1] =
 			make_button
-				(exp_mid, "sce", _("Scout towards the east"), pic_scout_e,
+				(exp_mid, "sce", _("Scout towards the east"), ImageCatalog::Key::kShipScoutEast,
 				 boost::bind(&ShipWindow::act_scout_towards, this, WALK_E));
 		exp_mid->add(m_btn_scout[WALK_E - 1], 0, false);
 
 		m_btn_scout[WALK_SW - 1] =
 			make_button
-				(exp_bot, "scsw", _("Scout towards the south west"), pic_scout_sw,
+				(exp_bot, "scsw", _("Scout towards the south west"), ImageCatalog::Key::kShipScoutSouthWest,
 				 boost::bind(&ShipWindow::act_scout_towards, this, WALK_SW));
 		exp_bot->add(m_btn_scout[WALK_SW - 1], 0, false);
 
 		m_btn_explore_island_ccw =
 			make_button
-				(exp_bot, "expccw", _("Explore the island’s coast counter clockwise"), pic_explore_ccw,
+				(exp_bot, "expccw", _("Explore the island’s coast counter clockwise"),
+				 ImageCatalog::Key::kShipExploreCounterclockwise,
 				 boost::bind(&ShipWindow::act_explore_island, this, false));
 		exp_bot->add(m_btn_explore_island_ccw, 0, false);
 
 		m_btn_scout[WALK_SE - 1] =
 			make_button
-				(exp_bot, "scse", _("Scout towards the south east"), pic_scout_se,
+				(exp_bot, "scse", _("Scout towards the south east"), ImageCatalog::Key::kShipScoutSouthEast,
 				 boost::bind(&ShipWindow::act_scout_towards, this, WALK_SE));
 		exp_bot->add(m_btn_scout[WALK_SE - 1], 0, false);
 
@@ -173,25 +163,27 @@
 
 	m_btn_goto =
 		make_button
-			(buttons, "goto", _("Go to ship"), pic_goto,
+			(buttons, "goto", _("Go to ship"), ImageCatalog::Key::kShipGoto,
 			 boost::bind(&ShipWindow::act_goto, this));
 	buttons->add(m_btn_goto, 0, false);
 	m_btn_destination =
 		make_button
-			(buttons, "destination", _("Go to destination"), pic_destination,
+			(buttons, "destination", _("Go to destination"), ImageCatalog::Key::kShipDestination,
 			 boost::bind(&ShipWindow::act_destination, this));
 	m_btn_destination->set_enabled(false);
 	buttons->add(m_btn_destination, 0, false);
 
 	m_btn_sink =
 		make_button
-			(buttons, "sink", _("Sink the ship"), pic_sink, boost::bind(&ShipWindow::act_sink, this));
+			(buttons, "sink", _("Sink the ship"), ImageCatalog::Key::kShipSink,
+			 boost::bind(&ShipWindow::act_sink, this));
 	buttons->add(m_btn_sink, 0, false);
 	if (m_ship.state_is_expedition()) {
 		m_btn_cancel_expedition =
 			make_button
-				(buttons, "cancel_expedition", _("Cancel the Expedition"), pic_cancel_expedition,
-				boost::bind(&ShipWindow::act_cancel_expedition, this));
+				(buttons, "cancel_expedition", _("Cancel the Expedition"),
+				 ImageCatalog::Key::kShipExpeditionCancel,
+				 boost::bind(&ShipWindow::act_cancel_expedition, this));
 		buttons->add(m_btn_cancel_expedition, 0, false);
 	}
 	set_center_panel(vbox);
@@ -262,13 +254,13 @@
 
 UI::Button * ShipWindow::make_button
 	(UI::Panel * parent, const std::string & name, const std::string & title,
-	 const std::string & picname, boost::function<void()> callback)
+	 ImageCatalog::Key image_key, boost::function<void()> callback)
 {
 	UI::Button * btn =
 		new UI::Button
 			(parent, name, 0, 0, 34, 34,
-			 g_gr->images().get("pics/but4.png"),
-			 g_gr->images().get(picname),
+			 ImageCatalog::Key::kButton4,
+			 g_gr->cataloged_image(image_key),
 			 title);
 	btn->sigclicked.connect(callback);
 	return btn;

=== modified file 'src/wui/soldiercapacitycontrol.cc'
--- src/wui/soldiercapacitycontrol.cc	2014-11-22 10:18:20 +0000
+++ src/wui/soldiercapacitycontrol.cc	2014-12-05 20:26:47 +0000
@@ -62,12 +62,14 @@
 m_building(build

Follow ups