[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#685913: marked as done (RM: warzone2100/3.1~beta11-2)



Your message dated Fri, 11 Jan 2013 09:08:45 +0000
with message-id <1357895325.32456.7.camel@jacala.jungle.funky-badger.org>
and subject line Re: Bug#685913: unblock: warzone2100/3.1~rc2-1
has caused the Debian Bug report #685913,
regarding RM: warzone2100/3.1~beta11-2
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
685913: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=685913
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

I would like to find out if it would be possible for the release team to
review and unblock warzone2100 3.1~rc2-1. Here are some thoughts:

      * it is a leaf package and a game so it won't affect other
        packages, except via maintainers playing it too much ;)
      * it bumps the netcode version number so not having it in would
        mean that wheezy wz would be incompatible with the final wz 3.1
        release and any other distributions that include 3.1. The
        alternative here is to remove it from wheezy altogether.
      * it fixes some memory leaks, crashes and other important issues
        that were found by upstream in 3.1 beta 11.
      * if I revert the two upstream commits that changed all the
        whitespace in a few files, ignore all changes to translations,
        data and non-Linux platforms then the diffstat size looks
        semi-reasonable, I've pasted the diffstat below and attached the
        filtered output.
      * Upstream switched the source tarball from gz to xz, hope that is
        ok.
      * I've uploaded the package to experimental in case you want to
        review the full diff including the style commits. The only
        changes to the Debian directory are the changelog and removal of
        the FTBFS fixing patch that was merged upstream.

pabs@chianamo ~/devel/games/warzone2100 ((v3.1_rc2_style_changes_reverted)) $ git diff v3.1_beta11..v3.1_rc2_style_changes_reverted | filterdiff -x '*/po/*.po' -x '*/win32/*' -x '*/macosx/*' -x '*/data/*' | grep  -v 'Binary files' | diffstat 
 .gitignore                                |    6 
 ChangeLog                                 |   17 +
 configure.ac                              |    7 
 icons/warzone2100.desktop                 |    6 
 lib/exceptionhandler/exceptionhandler.cpp |    8 
 lib/framework/crc.cpp                     |   28 +
 lib/framework/crc.h                       |    1 
 lib/framework/debug.cpp                   |    4 
 lib/framework/frameresource.cpp           |    4 
 lib/framework/i18n.cpp                    |   54 +--
 lib/framework/treap.cpp                   |    2 
 lib/ivis_opengl/bitimage.cpp              |  239 +++++++++++++---
 lib/ivis_opengl/bitimage.h                |   24 -
 lib/ivis_opengl/ivisdef.h                 |   16 -
 lib/ivis_opengl/pieblitfunc.cpp           |   29 --
 lib/ivis_opengl/piedef.h                  |    1 
 lib/ivis_opengl/piedraw.cpp               |    8 
 lib/ivis_opengl/piestate.cpp              |   16 +
 lib/ivis_opengl/piestate.h                |    2 
 lib/ivis_opengl/png_util.cpp              |    8 
 lib/ivis_opengl/screen.cpp                |   10 
 lib/netplay/netplay.cpp                   |   18 -
 lib/netplay/netplay.h                     |    3 
 lib/qtgame/wzapp_qt.cpp                   |   51 +--
 lib/qtgame/wzapp_qt.h                     |    4 
 src/combat.cpp                            |    2 
 src/configuration.cpp                     |   40 +-
 src/display.cpp                           |  427 +++++++++---------------------
 src/display.h                             |   13 
 src/display3d.cpp                         |   19 -
 src/droid.cpp                             |   39 --
 src/droid.h                               |    3 
 src/edit3d.cpp                            |    5 
 src/frend.h                               |    2 
 src/frontend.cpp                          |   17 -
 src/frontend.h                            |    2 
 src/game.cpp                              |   51 +--
 src/hci.cpp                               |   27 +
 src/init.cpp                              |    1 
 src/levels.cpp                            |   47 +++
 src/levels.h                              |    1 
 src/loop.cpp                              |    1 
 src/main.cpp                              |   25 +
 src/map.cpp                               |   23 -
 src/mission.cpp                           |   20 -
 src/missiondef.h                          |    3 
 src/movedef.h                             |    6 
 src/multiint.cpp                          |   20 -
 src/multiopt.cpp                          |    6 
 src/multiplay.cpp                         |   11 
 src/qtscriptfuncs.cpp                     |   29 ++
 src/radar.cpp                             |    3 
 src/researchdef.h                         |    1 
 src/scriptfuncs.cpp                       |    3 
 src/structure.cpp                         |  119 ++------
 src/structure.h                           |    3 
 src/template.cpp                          |   48 ++-
 src/template.h                            |    2 
 src/transporter.cpp                       |    1 
 src/version.cpp                           |    2 
 src/warzoneconfig.h                       |    5 
 src/weapondef.h                           |    1 
 62 files changed, 832 insertions(+), 762 deletions(-)

-- 
bye,
pabs

http://wiki.debian.org/PaulWise
diff --git a/.gitignore b/.gitignore
index ae9bddb..225de7e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -213,7 +213,7 @@ tools/qwzm/ui_qwzm.h
 macosx/Warzone.xcodeproj/xcuserdata/*
 macosx/Warzone.xcodeproj/project.xcworkspace/xcuserdata/*
 macosx/Warzone.xcworkspace/xcuserdata/*
-macosx/configs/codeident
+macosx/configs/CS-ID.xcconfig
 
 # build folders
 /macosx/build/
@@ -268,10 +268,6 @@ warzone*.*build
 # profiler stuff
 win32/CodeAnalyst
 
-# Split img files
-data/base/images/frontend/
-data/base/images/intfac/
-
 # Tests
 /tests/jslist.txt
 /tests/maplist.txt
diff --git a/ChangeLog b/ChangeLog
index 363460e..1f39aa1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2012-08-05: Version 3.1 rc1
+ * General:
+   * Change: Allow multiple AIs with similar names (commit:ee95d785bdfd72a490863d7cdb3f504f88f9eecd)
+   * Change: Increase the maximum number of terrain tiles (commit:ab44eafb7bd1daa2d0f4efe367673b4c2985a05d)
+   * Change: No longer save last map played (ticket:3618, commit:398f77ede082063bd1bc607d5814e9630f663967)
+   * Fix: Saving the game might crash it (ticket:3620, commit:fdb1c0b52153d3368ae79e8f0befdd2744b43692)
+   * Fix: Qt backend compatibility with Qt 4.8.2 (ticket:3562, commit:df32833ab8b17e6db5815b7eca9f5fe01a5b7f8f)
+   * Fix: Scavengers in challenges were always disabled (ticket:3630, commit:95677b02b9959b05372e7dc10286fe184bfd6cdd)
+   * Fix: Moving repair delivery points (ticket:3581, commit:caabd96741fb3113dc96127ae32826ada643992a)
+   * Fix: Destroyed research lab can no longer block research (ticket:3570, commit:6a04b6ad677678e1d824209dda45a70f85b64a96)
+   * Fix: Do not halt production on template becoming redundant (commit:7621581c8f76f3b7a774182cd3b5eee8e26b7954)
+   * Fix: Do not require texture_env_crossbar for shaders (ticket:3575, ticket:3629, commit:64a3cc13deda9a59aae2cf0705c68dbe3eadeaa8)
+   * Fix: Various memory issues (commit:032956e649e69aa51edd80787c9c94bf2c08d164, commit:88e94391669e54808b2d6f40cba994d3501efb08)
+   * Fix: Possible crash when delivery points are removed (commit:6382bbb08ea7e6ca93a0ba83fdb65952778c962a, ticket:2041)
+   * Fix: Fix loading of campaign savegames (commit:1461b3a5a81b72381bc3cc3dbc57bbd2f5ce22a7, commit:9784c655af2a66bd541268e2c9e6f19fcd1ac200)
+   * Fix: Terrain rendering should now be more visually accurate (ticket:3621, commit:087ab8c5058730925c747dcdf14c8319319b3929)
+
 2012-06-20: Version 3.1 beta11
  * General:
    * Change: CB sensor also defends allies (commit:313738ed235c69c64c83eb9b987d63efc95d8782)
diff --git a/configure.ac b/configure.ac
index 3c97d4d..2bc68c7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,7 +1,10 @@
 AC_PREREQ([2.56])
-AC_INIT([Warzone 2100],[3.1_beta11],[http://wz2100.net/],[warzone2100])
+AC_INIT([Warzone 2100],[3.1_rc2],[http://wz2100.net/],[warzone2100])
 
-AM_INIT_AUTOMAKE([1.10 tar-ustar])
+AM_INIT_AUTOMAKE([1.10 tar-ustar no-dist-gzip dist-xz])
+
+# Set to the default or stupid automake will use the much slower but useless -e(xtreme!!!) option.
+AC_SUBST([XZ_OPT], ["-6"])
 
 AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_SRCDIR([lib/framework/frame.cpp])
diff --git a/data/base/images/frontend.img b/data/base/images/frontend.img
index ba06618..88b8db0 100644
diff --git a/data/base/images/frontend/image_115200.png b/data/base/images/frontend/image_115200.png
new file mode 100644
index 0000000..47fe3a9
Binary files /dev/null and b/data/base/images/frontend/image_115200.png differ
diff --git a/data/base/images/frontend/image_115200_hi.png b/data/base/images/frontend/image_115200_hi.png
new file mode 100644
index 0000000..1b5f7a2
Binary files /dev/null and b/data/base/images/frontend/image_115200_hi.png differ
diff --git a/data/base/images/frontend/image_14400.png b/data/base/images/frontend/image_14400.png
new file mode 100644
index 0000000..465c878
Binary files /dev/null and b/data/base/images/frontend/image_14400.png differ
diff --git a/data/base/images/frontend/image_14400_hi.png b/data/base/images/frontend/image_14400_hi.png
new file mode 100644
index 0000000..faa5b88
Binary files /dev/null and b/data/base/images/frontend/image_14400_hi.png differ
diff --git a/data/base/images/frontend/image_19200.png b/data/base/images/frontend/image_19200.png
new file mode 100644
index 0000000..4076035
Binary files /dev/null and b/data/base/images/frontend/image_19200.png differ
diff --git a/data/base/images/frontend/image_19200_hi.png b/data/base/images/frontend/image_19200_hi.png
new file mode 100644
index 0000000..7667f08
Binary files /dev/null and b/data/base/images/frontend/image_19200_hi.png differ
diff --git a/data/base/images/frontend/image_56000.png b/data/base/images/frontend/image_56000.png
new file mode 100644
index 0000000..01aca97
Binary files /dev/null and b/data/base/images/frontend/image_56000.png differ
diff --git a/data/base/images/frontend/image_56000_hi.png b/data/base/images/frontend/image_56000_hi.png
new file mode 100644
index 0000000..f42a69c
Binary files /dev/null and b/data/base/images/frontend/image_56000_hi.png differ
diff --git a/data/base/images/frontend/image_alli.png b/data/base/images/frontend/image_alli.png
new file mode 100644
index 0000000..93bbd38
Binary files /dev/null and b/data/base/images/frontend/image_alli.png differ
diff --git a/data/base/images/frontend/image_alli_hi.png b/data/base/images/frontend/image_alli_hi.png
new file mode 100644
index 0000000..37d6887
Binary files /dev/null and b/data/base/images/frontend/image_alli_hi.png differ
diff --git a/data/base/images/frontend/image_alli_teams.png b/data/base/images/frontend/image_alli_teams.png
new file mode 100644
index 0000000..40e617d
Binary files /dev/null and b/data/base/images/frontend/image_alli_teams.png differ
diff --git a/data/base/images/frontend/image_alli_teams_hi.png b/data/base/images/frontend/image_alli_teams_hi.png
new file mode 100644
index 0000000..80f92a9
Binary files /dev/null and b/data/base/images/frontend/image_alli_teams_hi.png differ
diff --git a/data/base/images/frontend/image_arena.png b/data/base/images/frontend/image_arena.png
new file mode 100644
index 0000000..946472e
Binary files /dev/null and b/data/base/images/frontend/image_arena.png differ
diff --git a/data/base/images/frontend/image_arena_hi.png b/data/base/images/frontend/image_arena_hi.png
new file mode 100644
index 0000000..17abcae
Binary files /dev/null and b/data/base/images/frontend/image_arena_hi.png differ
diff --git a/data/base/images/frontend/image_arena_over.png b/data/base/images/frontend/image_arena_over.png
new file mode 100644
index 0000000..d1302f1
Binary files /dev/null and b/data/base/images/frontend/image_arena_over.png differ
diff --git a/data/base/images/frontend/image_campaign.png b/data/base/images/frontend/image_campaign.png
new file mode 100644
index 0000000..95c60f5
Binary files /dev/null and b/data/base/images/frontend/image_campaign.png differ
diff --git a/data/base/images/frontend/image_campaign_hi.png b/data/base/images/frontend/image_campaign_hi.png
new file mode 100644
index 0000000..739f8a2
Binary files /dev/null and b/data/base/images/frontend/image_campaign_hi.png differ
diff --git a/data/base/images/frontend/image_campaign_over.png b/data/base/images/frontend/image_campaign_over.png
new file mode 100644
index 0000000..c781b58
Binary files /dev/null and b/data/base/images/frontend/image_campaign_over.png differ
diff --git a/data/base/images/frontend/image_check_off.png b/data/base/images/frontend/image_check_off.png
new file mode 100644
index 0000000..bc136fe
Binary files /dev/null and b/data/base/images/frontend/image_check_off.png differ
diff --git a/data/base/images/frontend/image_check_off_hi.png b/data/base/images/frontend/image_check_off_hi.png
new file mode 100644
index 0000000..70c0b26
Binary files /dev/null and b/data/base/images/frontend/image_check_off_hi.png differ
diff --git a/data/base/images/frontend/image_check_on.png b/data/base/images/frontend/image_check_on.png
new file mode 100644
index 0000000..fb31222
Binary files /dev/null and b/data/base/images/frontend/image_check_on.png differ
diff --git a/data/base/images/frontend/image_check_on_hi.png b/data/base/images/frontend/image_check_on_hi.png
new file mode 100644
index 0000000..4d7bba7
Binary files /dev/null and b/data/base/images/frontend/image_check_on_hi.png differ
diff --git a/data/base/images/frontend/image_clearforce.png b/data/base/images/frontend/image_clearforce.png
new file mode 100644
index 0000000..d50959d
Binary files /dev/null and b/data/base/images/frontend/image_clearforce.png differ
diff --git a/data/base/images/frontend/image_com1.png b/data/base/images/frontend/image_com1.png
new file mode 100644
index 0000000..548da1a
Binary files /dev/null and b/data/base/images/frontend/image_com1.png differ
diff --git a/data/base/images/frontend/image_com1_hi.png b/data/base/images/frontend/image_com1_hi.png
new file mode 100644
index 0000000..bb3b8fe
Binary files /dev/null and b/data/base/images/frontend/image_com1_hi.png differ
diff --git a/data/base/images/frontend/image_com2.png b/data/base/images/frontend/image_com2.png
new file mode 100644
index 0000000..6c536f2
Binary files /dev/null and b/data/base/images/frontend/image_com2.png differ
diff --git a/data/base/images/frontend/image_com2_hi.png b/data/base/images/frontend/image_com2_hi.png
new file mode 100644
index 0000000..2485490
Binary files /dev/null and b/data/base/images/frontend/image_com2_hi.png differ
diff --git a/data/base/images/frontend/image_com3.png b/data/base/images/frontend/image_com3.png
new file mode 100644
index 0000000..a0fa369
Binary files /dev/null and b/data/base/images/frontend/image_com3.png differ
diff --git a/data/base/images/frontend/image_com3_hi.png b/data/base/images/frontend/image_com3_hi.png
new file mode 100644
index 0000000..c53b691
Binary files /dev/null and b/data/base/images/frontend/image_com3_hi.png differ
diff --git a/data/base/images/frontend/image_com4.png b/data/base/images/frontend/image_com4.png
new file mode 100644
index 0000000..36ba2d1
Binary files /dev/null and b/data/base/images/frontend/image_com4.png differ
diff --git a/data/base/images/frontend/image_com4_hi.png b/data/base/images/frontend/image_com4_hi.png
new file mode 100644
index 0000000..5cc6055
Binary files /dev/null and b/data/base/images/frontend/image_com4_hi.png differ
diff --git a/data/base/images/frontend/image_computer_n.png b/data/base/images/frontend/image_computer_n.png
new file mode 100644
index 0000000..6d02c3d
Binary files /dev/null and b/data/base/images/frontend/image_computer_n.png differ
diff --git a/data/base/images/frontend/image_computer_n_hi.png b/data/base/images/frontend/image_computer_n_hi.png
new file mode 100644
index 0000000..a12e605
Binary files /dev/null and b/data/base/images/frontend/image_computer_n_hi.png differ
diff --git a/data/base/images/frontend/image_computer_y.png b/data/base/images/frontend/image_computer_y.png
new file mode 100644
index 0000000..c01f200
Binary files /dev/null and b/data/base/images/frontend/image_computer_y.png differ
diff --git a/data/base/images/frontend/image_computer_y_hi.png b/data/base/images/frontend/image_computer_y_hi.png
new file mode 100644
index 0000000..36d5af7
Binary files /dev/null and b/data/base/images/frontend/image_computer_y_hi.png differ
diff --git a/data/base/images/frontend/image_cyborg.png b/data/base/images/frontend/image_cyborg.png
new file mode 100644
index 0000000..e79b65b
Binary files /dev/null and b/data/base/images/frontend/image_cyborg.png differ
diff --git a/data/base/images/frontend/image_dark_locked.png b/data/base/images/frontend/image_dark_locked.png
new file mode 100644
index 0000000..a9e2a83
Binary files /dev/null and b/data/base/images/frontend/image_dark_locked.png differ
diff --git a/data/base/images/frontend/image_dark_unlocked.png b/data/base/images/frontend/image_dark_unlocked.png
new file mode 100644
index 0000000..8bf1b44
Binary files /dev/null and b/data/base/images/frontend/image_dark_unlocked.png differ
diff --git a/data/base/images/frontend/image_defaultforce.png b/data/base/images/frontend/image_defaultforce.png
new file mode 100644
index 0000000..dd6489d
Binary files /dev/null and b/data/base/images/frontend/image_defaultforce.png differ
diff --git a/data/base/images/frontend/image_easy.png b/data/base/images/frontend/image_easy.png
new file mode 100644
index 0000000..ae7e03e
Binary files /dev/null and b/data/base/images/frontend/image_easy.png differ
diff --git a/data/base/images/frontend/image_edit_force.png b/data/base/images/frontend/image_edit_force.png
new file mode 100644
index 0000000..a227f6e
Binary files /dev/null and b/data/base/images/frontend/image_edit_force.png differ
diff --git a/data/base/images/frontend/image_edit_game.png b/data/base/images/frontend/image_edit_game.png
new file mode 100644
index 0000000..3471ccf
Binary files /dev/null and b/data/base/images/frontend/image_edit_game.png differ
diff --git a/data/base/images/frontend/image_edit_game_hi.png b/data/base/images/frontend/image_edit_game_hi.png
new file mode 100644
index 0000000..5c3280f
Binary files /dev/null and b/data/base/images/frontend/image_edit_game_hi.png differ
diff --git a/data/base/images/frontend/image_edit_map.png b/data/base/images/frontend/image_edit_map.png
new file mode 100644
index 0000000..dfda51d
Binary files /dev/null and b/data/base/images/frontend/image_edit_map.png differ
diff --git a/data/base/images/frontend/image_edit_map_hi.png b/data/base/images/frontend/image_edit_map_hi.png
new file mode 100644
index 0000000..0303f40
Binary files /dev/null and b/data/base/images/frontend/image_edit_map_hi.png differ
diff --git a/data/base/images/frontend/image_edit_player.png b/data/base/images/frontend/image_edit_player.png
new file mode 100644
index 0000000..470fb13
Binary files /dev/null and b/data/base/images/frontend/image_edit_player.png differ
diff --git a/data/base/images/frontend/image_edit_player_hi.png b/data/base/images/frontend/image_edit_player_hi.png
new file mode 100644
index 0000000..425bce2
Binary files /dev/null and b/data/base/images/frontend/image_edit_player_hi.png differ
diff --git a/data/base/images/frontend/image_fe_logo.png b/data/base/images/frontend/image_fe_logo.png
new file mode 100644
index 0000000..868e1ac
Binary files /dev/null and b/data/base/images/frontend/image_fe_logo.png differ
diff --git a/data/base/images/frontend/image_fog_off.png b/data/base/images/frontend/image_fog_off.png
new file mode 100644
index 0000000..8982729
Binary files /dev/null and b/data/base/images/frontend/image_fog_off.png differ
diff --git a/data/base/images/frontend/image_fog_off_hi.png b/data/base/images/frontend/image_fog_off_hi.png
new file mode 100644
index 0000000..cac6e9b
Binary files /dev/null and b/data/base/images/frontend/image_fog_off_hi.png differ
diff --git a/data/base/images/frontend/image_fog_on.png b/data/base/images/frontend/image_fog_on.png
new file mode 100644
index 0000000..49c6cee
Binary files /dev/null and b/data/base/images/frontend/image_fog_on.png differ
diff --git a/data/base/images/frontend/image_fog_on_hi.png b/data/base/images/frontend/image_fog_on_hi.png
new file mode 100644
index 0000000..961e9bb
Binary files /dev/null and b/data/base/images/frontend/image_fog_on_hi.png differ
diff --git a/data/base/images/frontend/image_fraglimit.png b/data/base/images/frontend/image_fraglimit.png
new file mode 100644
index 0000000..fbaeecb
Binary files /dev/null and b/data/base/images/frontend/image_fraglimit.png differ
diff --git a/data/base/images/frontend/image_fraglimit_hi.png b/data/base/images/frontend/image_fraglimit_hi.png
new file mode 100644
index 0000000..7d3b902
Binary files /dev/null and b/data/base/images/frontend/image_fraglimit_hi.png differ
diff --git a/data/base/images/frontend/image_hard.png b/data/base/images/frontend/image_hard.png
new file mode 100644
index 0000000..3737807
Binary files /dev/null and b/data/base/images/frontend/image_hard.png differ
diff --git a/data/base/images/frontend/image_hi23.png b/data/base/images/frontend/image_hi23.png
new file mode 100644
index 0000000..03efe1e
Binary files /dev/null and b/data/base/images/frontend/image_hi23.png differ
diff --git a/data/base/images/frontend/image_hi31.png b/data/base/images/frontend/image_hi31.png
new file mode 100644
index 0000000..c41782d
Binary files /dev/null and b/data/base/images/frontend/image_hi31.png differ
diff --git a/data/base/images/frontend/image_hi34.png b/data/base/images/frontend/image_hi34.png
new file mode 100644
index 0000000..32acd58
Binary files /dev/null and b/data/base/images/frontend/image_hi34.png differ
diff --git a/data/base/images/frontend/image_hi39.png b/data/base/images/frontend/image_hi39.png
new file mode 100644
index 0000000..d71948c
Binary files /dev/null and b/data/base/images/frontend/image_hi39.png differ
diff --git a/data/base/images/frontend/image_hi41.png b/data/base/images/frontend/image_hi41.png
new file mode 100644
index 0000000..900bc87
Binary files /dev/null and b/data/base/images/frontend/image_hi41.png differ
diff --git a/data/base/images/frontend/image_hi56.png b/data/base/images/frontend/image_hi56.png
new file mode 100644
index 0000000..5587fe4
Binary files /dev/null and b/data/base/images/frontend/image_hi56.png differ
diff --git a/data/base/images/frontend/image_hi64.png b/data/base/images/frontend/image_hi64.png
new file mode 100644
index 0000000..a09db8d
Binary files /dev/null and b/data/base/images/frontend/image_hi64.png differ
diff --git a/data/base/images/frontend/image_host.png b/data/base/images/frontend/image_host.png
new file mode 100644
index 0000000..ca7d2f9
Binary files /dev/null and b/data/base/images/frontend/image_host.png differ
diff --git a/data/base/images/frontend/image_host_hi.png b/data/base/images/frontend/image_host_hi.png
new file mode 100644
index 0000000..9e373e9
Binary files /dev/null and b/data/base/images/frontend/image_host_hi.png differ
diff --git a/data/base/images/frontend/image_insane.png b/data/base/images/frontend/image_insane.png
new file mode 100644
index 0000000..88214a8
Binary files /dev/null and b/data/base/images/frontend/image_insane.png differ
diff --git a/data/base/images/frontend/image_keymap_default.png b/data/base/images/frontend/image_keymap_default.png
new file mode 100644
index 0000000..e0639b9
Binary files /dev/null and b/data/base/images/frontend/image_keymap_default.png differ
diff --git a/data/base/images/frontend/image_keymap_default_hi.png b/data/base/images/frontend/image_keymap_default_hi.png
new file mode 100644
index 0000000..e07ed41
Binary files /dev/null and b/data/base/images/frontend/image_keymap_default_hi.png differ
diff --git a/data/base/images/frontend/image_kick.png b/data/base/images/frontend/image_kick.png
new file mode 100644
index 0000000..4fdf57c
Binary files /dev/null and b/data/base/images/frontend/image_kick.png differ
diff --git a/data/base/images/frontend/image_kick_trans.png b/data/base/images/frontend/image_kick_trans.png
new file mode 100644
index 0000000..ee9379f
Binary files /dev/null and b/data/base/images/frontend/image_kick_trans.png differ
diff --git a/data/base/images/frontend/image_lamp_amber.png b/data/base/images/frontend/image_lamp_amber.png
new file mode 100644
index 0000000..30eaab2
Binary files /dev/null and b/data/base/images/frontend/image_lamp_amber.png differ
diff --git a/data/base/images/frontend/image_lamp_green.png b/data/base/images/frontend/image_lamp_green.png
new file mode 100644
index 0000000..1b9fddd
Binary files /dev/null and b/data/base/images/frontend/image_lamp_green.png differ
diff --git a/data/base/images/frontend/image_lamp_red.png b/data/base/images/frontend/image_lamp_red.png
new file mode 100644
index 0000000..a90617f
Binary files /dev/null and b/data/base/images/frontend/image_lamp_red.png differ
diff --git a/data/base/images/frontend/image_lbase.png b/data/base/images/frontend/image_lbase.png
new file mode 100644
index 0000000..0a0cc97
Binary files /dev/null and b/data/base/images/frontend/image_lbase.png differ
diff --git a/data/base/images/frontend/image_lbase_hi.png b/data/base/images/frontend/image_lbase_hi.png
new file mode 100644
index 0000000..d8464f9
Binary files /dev/null and b/data/base/images/frontend/image_lbase_hi.png differ
diff --git a/data/base/images/frontend/image_loadforce.png b/data/base/images/frontend/image_loadforce.png
new file mode 100644
index 0000000..b2ed3be
Binary files /dev/null and b/data/base/images/frontend/image_loadforce.png differ
diff --git a/data/base/images/frontend/image_lock_blue.png b/data/base/images/frontend/image_lock_blue.png
new file mode 100644
index 0000000..55fb2ec
Binary files /dev/null and b/data/base/images/frontend/image_lock_blue.png differ
diff --git a/data/base/images/frontend/image_locked_nobg.png b/data/base/images/frontend/image_locked_nobg.png
new file mode 100644
index 0000000..7557975
Binary files /dev/null and b/data/base/images/frontend/image_locked_nobg.png differ
diff --git a/data/base/images/frontend/image_medal_bronze.png b/data/base/images/frontend/image_medal_bronze.png
new file mode 100644
index 0000000..cf09a92
Binary files /dev/null and b/data/base/images/frontend/image_medal_bronze.png differ
diff --git a/data/base/images/frontend/image_medal_dummy.png b/data/base/images/frontend/image_medal_dummy.png
new file mode 100644
index 0000000..707d604
Binary files /dev/null and b/data/base/images/frontend/image_medal_dummy.png differ
diff --git a/data/base/images/frontend/image_medal_gold.png b/data/base/images/frontend/image_medal_gold.png
new file mode 100644
index 0000000..731d547
Binary files /dev/null and b/data/base/images/frontend/image_medal_gold.png differ
diff --git a/data/base/images/frontend/image_medal_silver.png b/data/base/images/frontend/image_medal_silver.png
new file mode 100644
index 0000000..71e8774
Binary files /dev/null and b/data/base/images/frontend/image_medal_silver.png differ
diff --git a/data/base/images/frontend/image_medium.png b/data/base/images/frontend/image_medium.png
new file mode 100644
index 0000000..ffb21d0
Binary files /dev/null and b/data/base/images/frontend/image_medium.png differ
diff --git a/data/base/images/frontend/image_multirank1.png b/data/base/images/frontend/image_multirank1.png
new file mode 100644
index 0000000..bbea64c
Binary files /dev/null and b/data/base/images/frontend/image_multirank1.png differ
diff --git a/data/base/images/frontend/image_multirank2.png b/data/base/images/frontend/image_multirank2.png
new file mode 100644
index 0000000..71962eb
Binary files /dev/null and b/data/base/images/frontend/image_multirank2.png differ
diff --git a/data/base/images/frontend/image_multirank3.png b/data/base/images/frontend/image_multirank3.png
new file mode 100644
index 0000000..7867b0a
Binary files /dev/null and b/data/base/images/frontend/image_multirank3.png differ
diff --git a/data/base/images/frontend/image_no.png b/data/base/images/frontend/image_no.png
new file mode 100644
index 0000000..341819f
Binary files /dev/null and b/data/base/images/frontend/image_no.png differ
diff --git a/data/base/images/frontend/image_no_cyborg.png b/data/base/images/frontend/image_no_cyborg.png
new file mode 100644
index 0000000..e51b421
Binary files /dev/null and b/data/base/images/frontend/image_no_cyborg.png differ
diff --git a/data/base/images/frontend/image_no_lassat.png b/data/base/images/frontend/image_no_lassat.png
new file mode 100644
index 0000000..3b05a0f
Binary files /dev/null and b/data/base/images/frontend/image_no_lassat.png differ
diff --git a/data/base/images/frontend/image_no_tank.png b/data/base/images/frontend/image_no_tank.png
new file mode 100644
index 0000000..d724e80
Binary files /dev/null and b/data/base/images/frontend/image_no_tank.png differ
diff --git a/data/base/images/frontend/image_no_uplink.png b/data/base/images/frontend/image_no_uplink.png
new file mode 100644
index 0000000..20dfa1b
Binary files /dev/null and b/data/base/images/frontend/image_no_uplink.png differ
diff --git a/data/base/images/frontend/image_no_vtol.png b/data/base/images/frontend/image_no_vtol.png
new file mode 100644
index 0000000..9dd6034
Binary files /dev/null and b/data/base/images/frontend/image_no_vtol.png differ
diff --git a/data/base/images/frontend/image_noalli.png b/data/base/images/frontend/image_noalli.png
new file mode 100644
index 0000000..05c6d0a
Binary files /dev/null and b/data/base/images/frontend/image_noalli.png differ
diff --git a/data/base/images/frontend/image_noalli_hi.png b/data/base/images/frontend/image_noalli_hi.png
new file mode 100644
index 0000000..637c457
Binary files /dev/null and b/data/base/images/frontend/image_noalli_hi.png differ
diff --git a/data/base/images/frontend/image_nobase.png b/data/base/images/frontend/image_nobase.png
new file mode 100644
index 0000000..d14a4dc
Binary files /dev/null and b/data/base/images/frontend/image_nobase.png differ
diff --git a/data/base/images/frontend/image_nobase_hi.png b/data/base/images/frontend/image_nobase_hi.png
new file mode 100644
index 0000000..2c5a323
Binary files /dev/null and b/data/base/images/frontend/image_nobase_hi.png differ
diff --git a/data/base/images/frontend/image_nojoin.png b/data/base/images/frontend/image_nojoin.png
new file mode 100644
index 0000000..34cae74
Binary files /dev/null and b/data/base/images/frontend/image_nojoin.png differ
diff --git a/data/base/images/frontend/image_nojoin_full.png b/data/base/images/frontend/image_nojoin_full.png
new file mode 100644
index 0000000..a199c5b
Binary files /dev/null and b/data/base/images/frontend/image_nojoin_full.png differ
diff --git a/data/base/images/frontend/image_nojoin_mod.png b/data/base/images/frontend/image_nojoin_mod.png
new file mode 100644
index 0000000..f8ae75f
Binary files /dev/null and b/data/base/images/frontend/image_nojoin_mod.png differ
diff --git a/data/base/images/frontend/image_nolimit.png b/data/base/images/frontend/image_nolimit.png
new file mode 100644
index 0000000..3e414fb
Binary files /dev/null and b/data/base/images/frontend/image_nolimit.png differ
diff --git a/data/base/images/frontend/image_nolimit_hi.png b/data/base/images/frontend/image_nolimit_hi.png
new file mode 100644
index 0000000..2d316ed
Binary files /dev/null and b/data/base/images/frontend/image_nolimit_hi.png differ
diff --git a/data/base/images/frontend/image_nopencil.png b/data/base/images/frontend/image_nopencil.png
new file mode 100644
index 0000000..299ff79
Binary files /dev/null and b/data/base/images/frontend/image_nopencil.png differ
diff --git a/data/base/images/frontend/image_offalli.png b/data/base/images/frontend/image_offalli.png
new file mode 100644
index 0000000..95f41a0
Binary files /dev/null and b/data/base/images/frontend/image_offalli.png differ
diff --git a/data/base/images/frontend/image_offalli_hi.png b/data/base/images/frontend/image_offalli_hi.png
new file mode 100644
index 0000000..8c17195
Binary files /dev/null and b/data/base/images/frontend/image_offalli_hi.png differ
diff --git a/data/base/images/frontend/image_ok.png b/data/base/images/frontend/image_ok.png
new file mode 100644
index 0000000..d7fa506
Binary files /dev/null and b/data/base/images/frontend/image_ok.png differ
diff --git a/data/base/images/frontend/image_pencil.png b/data/base/images/frontend/image_pencil.png
new file mode 100644
index 0000000..ca04f92
Binary files /dev/null and b/data/base/images/frontend/image_pencil.png differ
diff --git a/data/base/images/frontend/image_player0.png b/data/base/images/frontend/image_player0.png
new file mode 100644
index 0000000..42f1d77
Binary files /dev/null and b/data/base/images/frontend/image_player0.png differ
diff --git a/data/base/images/frontend/image_player0_hi.png b/data/base/images/frontend/image_player0_hi.png
new file mode 100644
index 0000000..40604af
Binary files /dev/null and b/data/base/images/frontend/image_player0_hi.png differ
diff --git a/data/base/images/frontend/image_player1.png b/data/base/images/frontend/image_player1.png
new file mode 100644
index 0000000..f62112e
Binary files /dev/null and b/data/base/images/frontend/image_player1.png differ
diff --git a/data/base/images/frontend/image_player10.png b/data/base/images/frontend/image_player10.png
new file mode 100644
index 0000000..6d2d960
Binary files /dev/null and b/data/base/images/frontend/image_player10.png differ
diff --git a/data/base/images/frontend/image_player10_hi.png b/data/base/images/frontend/image_player10_hi.png
new file mode 100644
index 0000000..31790d2
Binary files /dev/null and b/data/base/images/frontend/image_player10_hi.png differ
diff --git a/data/base/images/frontend/image_player1_hi.png b/data/base/images/frontend/image_player1_hi.png
new file mode 100644
index 0000000..eb86215
Binary files /dev/null and b/data/base/images/frontend/image_player1_hi.png differ
diff --git a/data/base/images/frontend/image_player2.png b/data/base/images/frontend/image_player2.png
new file mode 100644
index 0000000..cf2e187
Binary files /dev/null and b/data/base/images/frontend/image_player2.png differ
diff --git a/data/base/images/frontend/image_player2_hi.png b/data/base/images/frontend/image_player2_hi.png
new file mode 100644
index 0000000..04e652b
Binary files /dev/null and b/data/base/images/frontend/image_player2_hi.png differ
diff --git a/data/base/images/frontend/image_player3.png b/data/base/images/frontend/image_player3.png
new file mode 100644
index 0000000..e303b6a
Binary files /dev/null and b/data/base/images/frontend/image_player3.png differ
diff --git a/data/base/images/frontend/image_player3_hi.png b/data/base/images/frontend/image_player3_hi.png
new file mode 100644
index 0000000..4cf5f6f
Binary files /dev/null and b/data/base/images/frontend/image_player3_hi.png differ
diff --git a/data/base/images/frontend/image_player4.png b/data/base/images/frontend/image_player4.png
new file mode 100644
index 0000000..c9e9fd2
Binary files /dev/null and b/data/base/images/frontend/image_player4.png differ
diff --git a/data/base/images/frontend/image_player4_hi.png b/data/base/images/frontend/image_player4_hi.png
new file mode 100644
index 0000000..55b3461
Binary files /dev/null and b/data/base/images/frontend/image_player4_hi.png differ
diff --git a/data/base/images/frontend/image_player5.png b/data/base/images/frontend/image_player5.png
new file mode 100644
index 0000000..ee09255
Binary files /dev/null and b/data/base/images/frontend/image_player5.png differ
diff --git a/data/base/images/frontend/image_player5_hi.png b/data/base/images/frontend/image_player5_hi.png
new file mode 100644
index 0000000..1bfba6d
Binary files /dev/null and b/data/base/images/frontend/image_player5_hi.png differ
diff --git a/data/base/images/frontend/image_player6.png b/data/base/images/frontend/image_player6.png
new file mode 100644
index 0000000..340a99f
Binary files /dev/null and b/data/base/images/frontend/image_player6.png differ
diff --git a/data/base/images/frontend/image_player6_hi.png b/data/base/images/frontend/image_player6_hi.png
new file mode 100644
index 0000000..049de7b
Binary files /dev/null and b/data/base/images/frontend/image_player6_hi.png differ
diff --git a/data/base/images/frontend/image_player7.png b/data/base/images/frontend/image_player7.png
new file mode 100644
index 0000000..cbd40d5
Binary files /dev/null and b/data/base/images/frontend/image_player7.png differ
diff --git a/data/base/images/frontend/image_player7_hi.png b/data/base/images/frontend/image_player7_hi.png
new file mode 100644
index 0000000..9c29d8d
Binary files /dev/null and b/data/base/images/frontend/image_player7_hi.png differ
diff --git a/data/base/images/frontend/image_player8.png b/data/base/images/frontend/image_player8.png
new file mode 100644
index 0000000..f0ef182
Binary files /dev/null and b/data/base/images/frontend/image_player8.png differ
diff --git a/data/base/images/frontend/image_player8_hi.png b/data/base/images/frontend/image_player8_hi.png
new file mode 100644
index 0000000..2e7094c
Binary files /dev/null and b/data/base/images/frontend/image_player8_hi.png differ
diff --git a/data/base/images/frontend/image_player9.png b/data/base/images/frontend/image_player9.png
new file mode 100644
index 0000000..7ebf037
Binary files /dev/null and b/data/base/images/frontend/image_player9.png differ
diff --git a/data/base/images/frontend/image_player9_hi.png b/data/base/images/frontend/image_player9_hi.png
new file mode 100644
index 0000000..ff8ff97
Binary files /dev/null and b/data/base/images/frontend/image_player9_hi.png differ
diff --git a/data/base/images/frontend/image_player_pc.png b/data/base/images/frontend/image_player_pc.png
new file mode 100644
index 0000000..828215b
Binary files /dev/null and b/data/base/images/frontend/image_player_pc.png differ
diff --git a/data/base/images/frontend/image_playern.png b/data/base/images/frontend/image_playern.png
new file mode 100644
index 0000000..d69d94e
Binary files /dev/null and b/data/base/images/frontend/image_playern.png differ
diff --git a/data/base/images/frontend/image_playern_hi.png b/data/base/images/frontend/image_playern_hi.png
new file mode 100644
index 0000000..2b79f6d
Binary files /dev/null and b/data/base/images/frontend/image_playern_hi.png differ
diff --git a/data/base/images/frontend/image_playern_hi_tc.png b/data/base/images/frontend/image_playern_hi_tc.png
new file mode 100644
index 0000000..84ef8c2
Binary files /dev/null and b/data/base/images/frontend/image_playern_hi_tc.png differ
diff --git a/data/base/images/frontend/image_playern_tc.png b/data/base/images/frontend/image_playern_tc.png
new file mode 100644
index 0000000..0a73e1a
Binary files /dev/null and b/data/base/images/frontend/image_playern_tc.png differ
diff --git a/data/base/images/frontend/image_playerx.png b/data/base/images/frontend/image_playerx.png
new file mode 100644
index 0000000..322c75b
Binary files /dev/null and b/data/base/images/frontend/image_playerx.png differ
diff --git a/data/base/images/frontend/image_playerx_tc.png b/data/base/images/frontend/image_playerx_tc.png
new file mode 100644
index 0000000..d5718a1
Binary files /dev/null and b/data/base/images/frontend/image_playerx_tc.png differ
diff --git a/data/base/images/frontend/image_powhi.png b/data/base/images/frontend/image_powhi.png
new file mode 100644
index 0000000..e5bd960
Binary files /dev/null and b/data/base/images/frontend/image_powhi.png differ
diff --git a/data/base/images/frontend/image_powhi_hi.png b/data/base/images/frontend/image_powhi_hi.png
new file mode 100644
index 0000000..06c74b0
Binary files /dev/null and b/data/base/images/frontend/image_powhi_hi.png differ
diff --git a/data/base/images/frontend/image_powlo.png b/data/base/images/frontend/image_powlo.png
new file mode 100644
index 0000000..0d44782
Binary files /dev/null and b/data/base/images/frontend/image_powlo.png differ
diff --git a/data/base/images/frontend/image_powlo_hi.png b/data/base/images/frontend/image_powlo_hi.png
new file mode 100644
index 0000000..33ebef5
Binary files /dev/null and b/data/base/images/frontend/image_powlo_hi.png differ
diff --git a/data/base/images/frontend/image_powmed.png b/data/base/images/frontend/image_powmed.png
new file mode 100644
index 0000000..0eb59f5
Binary files /dev/null and b/data/base/images/frontend/image_powmed.png differ
diff --git a/data/base/images/frontend/image_powmed_hi.png b/data/base/images/frontend/image_powmed_hi.png
new file mode 100644
index 0000000..934e77f
Binary files /dev/null and b/data/base/images/frontend/image_powmed_hi.png differ
diff --git a/data/base/images/frontend/image_question.png b/data/base/images/frontend/image_question.png
new file mode 100644
index 0000000..5ae313c
Binary files /dev/null and b/data/base/images/frontend/image_question.png differ
diff --git a/data/base/images/frontend/image_refresh.png b/data/base/images/frontend/image_refresh.png
new file mode 100644
index 0000000..5dbcee5
Binary files /dev/null and b/data/base/images/frontend/image_refresh.png differ
diff --git a/data/base/images/frontend/image_return.png b/data/base/images/frontend/image_return.png
new file mode 100644
index 0000000..71c2875
Binary files /dev/null and b/data/base/images/frontend/image_return.png differ
diff --git a/data/base/images/frontend/image_return_hi.png b/data/base/images/frontend/image_return_hi.png
new file mode 100644
index 0000000..d6af365
Binary files /dev/null and b/data/base/images/frontend/image_return_hi.png differ
diff --git a/data/base/images/frontend/image_saveforce.png b/data/base/images/frontend/image_saveforce.png
new file mode 100644
index 0000000..4f5cbf5
Binary files /dev/null and b/data/base/images/frontend/image_saveforce.png differ
diff --git a/data/base/images/frontend/image_sbase.png b/data/base/images/frontend/image_sbase.png
new file mode 100644
index 0000000..34232ec
Binary files /dev/null and b/data/base/images/frontend/image_sbase.png differ
diff --git a/data/base/images/frontend/image_sbase_hi.png b/data/base/images/frontend/image_sbase_hi.png
new file mode 100644
index 0000000..b87fe23
Binary files /dev/null and b/data/base/images/frontend/image_sbase_hi.png differ
diff --git a/data/base/images/frontend/image_scavengers_off.png b/data/base/images/frontend/image_scavengers_off.png
new file mode 100644
index 0000000..52b9492
Binary files /dev/null and b/data/base/images/frontend/image_scavengers_off.png differ
diff --git a/data/base/images/frontend/image_scavengers_off_hi.png b/data/base/images/frontend/image_scavengers_off_hi.png
new file mode 100644
index 0000000..52d6ef3
Binary files /dev/null and b/data/base/images/frontend/image_scavengers_off_hi.png differ
diff --git a/data/base/images/frontend/image_scavengers_on.png b/data/base/images/frontend/image_scavengers_on.png
new file mode 100644
index 0000000..16040be
Binary files /dev/null and b/data/base/images/frontend/image_scavengers_on.png differ
diff --git a/data/base/images/frontend/image_scavengers_on_hi.png b/data/base/images/frontend/image_scavengers_on_hi.png
new file mode 100644
index 0000000..9230b5a
Binary files /dev/null and b/data/base/images/frontend/image_scavengers_on_hi.png differ
diff --git a/data/base/images/frontend/image_skirmish.png b/data/base/images/frontend/image_skirmish.png
new file mode 100644
index 0000000..3038562
Binary files /dev/null and b/data/base/images/frontend/image_skirmish.png differ
diff --git a/data/base/images/frontend/image_skirmish_hi.png b/data/base/images/frontend/image_skirmish_hi.png
new file mode 100644
index 0000000..f6aeb12
Binary files /dev/null and b/data/base/images/frontend/image_skirmish_hi.png differ
diff --git a/data/base/images/frontend/image_skirmish_over.png b/data/base/images/frontend/image_skirmish_over.png
new file mode 100644
index 0000000..72f61a5
Binary files /dev/null and b/data/base/images/frontend/image_skirmish_over.png differ
diff --git a/data/base/images/frontend/image_slim.png b/data/base/images/frontend/image_slim.png
new file mode 100644
index 0000000..746a84a
Binary files /dev/null and b/data/base/images/frontend/image_slim.png differ
diff --git a/data/base/images/frontend/image_slim_hi.png b/data/base/images/frontend/image_slim_hi.png
new file mode 100644
index 0000000..49f2642
Binary files /dev/null and b/data/base/images/frontend/image_slim_hi.png differ
diff --git a/data/base/images/frontend/image_tank.png b/data/base/images/frontend/image_tank.png
new file mode 100644
index 0000000..2b75da0
Binary files /dev/null and b/data/base/images/frontend/image_tank.png differ
diff --git a/data/base/images/frontend/image_team.png b/data/base/images/frontend/image_team.png
new file mode 100644
index 0000000..564c761
Binary files /dev/null and b/data/base/images/frontend/image_team.png differ
diff --git a/data/base/images/frontend/image_team0.png b/data/base/images/frontend/image_team0.png
new file mode 100644
index 0000000..f7e3df9
Binary files /dev/null and b/data/base/images/frontend/image_team0.png differ
diff --git a/data/base/images/frontend/image_team0_hi.png b/data/base/images/frontend/image_team0_hi.png
new file mode 100644
index 0000000..2d1dd56
Binary files /dev/null and b/data/base/images/frontend/image_team0_hi.png differ
diff --git a/data/base/images/frontend/image_team1.png b/data/base/images/frontend/image_team1.png
new file mode 100644
index 0000000..5c9bece
Binary files /dev/null and b/data/base/images/frontend/image_team1.png differ
diff --git a/data/base/images/frontend/image_team10.png b/data/base/images/frontend/image_team10.png
new file mode 100644
index 0000000..bb10c1a
Binary files /dev/null and b/data/base/images/frontend/image_team10.png differ
diff --git a/data/base/images/frontend/image_team10_hi.png b/data/base/images/frontend/image_team10_hi.png
new file mode 100644
index 0000000..7c5a948
Binary files /dev/null and b/data/base/images/frontend/image_team10_hi.png differ
diff --git a/data/base/images/frontend/image_team11.png b/data/base/images/frontend/image_team11.png
new file mode 100644
index 0000000..1e20a7c
Binary files /dev/null and b/data/base/images/frontend/image_team11.png differ
diff --git a/data/base/images/frontend/image_team11_hi.png b/data/base/images/frontend/image_team11_hi.png
new file mode 100644
index 0000000..8635337
Binary files /dev/null and b/data/base/images/frontend/image_team11_hi.png differ
diff --git a/data/base/images/frontend/image_team12.png b/data/base/images/frontend/image_team12.png
new file mode 100644
index 0000000..a83a648
Binary files /dev/null and b/data/base/images/frontend/image_team12.png differ
diff --git a/data/base/images/frontend/image_team12_hi.png b/data/base/images/frontend/image_team12_hi.png
new file mode 100644
index 0000000..9f6c406
Binary files /dev/null and b/data/base/images/frontend/image_team12_hi.png differ
diff --git a/data/base/images/frontend/image_team13.png b/data/base/images/frontend/image_team13.png
new file mode 100644
index 0000000..5903b2b
Binary files /dev/null and b/data/base/images/frontend/image_team13.png differ
diff --git a/data/base/images/frontend/image_team13_hi.png b/data/base/images/frontend/image_team13_hi.png
new file mode 100644
index 0000000..ea14e68
Binary files /dev/null and b/data/base/images/frontend/image_team13_hi.png differ
diff --git a/data/base/images/frontend/image_team14.png b/data/base/images/frontend/image_team14.png
new file mode 100644
index 0000000..617128c
Binary files /dev/null and b/data/base/images/frontend/image_team14.png differ
diff --git a/data/base/images/frontend/image_team14_hi.png b/data/base/images/frontend/image_team14_hi.png
new file mode 100644
index 0000000..ccc49c7
Binary files /dev/null and b/data/base/images/frontend/image_team14_hi.png differ
diff --git a/data/base/images/frontend/image_team15.png b/data/base/images/frontend/image_team15.png
new file mode 100644
index 0000000..68d47f9
Binary files /dev/null and b/data/base/images/frontend/image_team15.png differ
diff --git a/data/base/images/frontend/image_team15_hi.png b/data/base/images/frontend/image_team15_hi.png
new file mode 100644
index 0000000..ff09839
Binary files /dev/null and b/data/base/images/frontend/image_team15_hi.png differ
diff --git a/data/base/images/frontend/image_team1_hi.png b/data/base/images/frontend/image_team1_hi.png
new file mode 100644
index 0000000..dc23093
Binary files /dev/null and b/data/base/images/frontend/image_team1_hi.png differ
diff --git a/data/base/images/frontend/image_team2.png b/data/base/images/frontend/image_team2.png
new file mode 100644
index 0000000..81327e8
Binary files /dev/null and b/data/base/images/frontend/image_team2.png differ
diff --git a/data/base/images/frontend/image_team2_hi.png b/data/base/images/frontend/image_team2_hi.png
new file mode 100644
index 0000000..cd8fd8c
Binary files /dev/null and b/data/base/images/frontend/image_team2_hi.png differ
diff --git a/data/base/images/frontend/image_team3.png b/data/base/images/frontend/image_team3.png
new file mode 100644
index 0000000..35dfca6
Binary files /dev/null and b/data/base/images/frontend/image_team3.png differ
diff --git a/data/base/images/frontend/image_team3_hi.png b/data/base/images/frontend/image_team3_hi.png
new file mode 100644
index 0000000..60992aa
Binary files /dev/null and b/data/base/images/frontend/image_team3_hi.png differ
diff --git a/data/base/images/frontend/image_team4.png b/data/base/images/frontend/image_team4.png
new file mode 100644
index 0000000..7921409
Binary files /dev/null and b/data/base/images/frontend/image_team4.png differ
diff --git a/data/base/images/frontend/image_team4_hi.png b/data/base/images/frontend/image_team4_hi.png
new file mode 100644
index 0000000..5aee6f1
Binary files /dev/null and b/data/base/images/frontend/image_team4_hi.png differ
diff --git a/data/base/images/frontend/image_team5.png b/data/base/images/frontend/image_team5.png
new file mode 100644
index 0000000..f9a1d56
Binary files /dev/null and b/data/base/images/frontend/image_team5.png differ
diff --git a/data/base/images/frontend/image_team5_hi.png b/data/base/images/frontend/image_team5_hi.png
new file mode 100644
index 0000000..bc2fd34
Binary files /dev/null and b/data/base/images/frontend/image_team5_hi.png differ
diff --git a/data/base/images/frontend/image_team6.png b/data/base/images/frontend/image_team6.png
new file mode 100644
index 0000000..43f2f54
Binary files /dev/null and b/data/base/images/frontend/image_team6.png differ
diff --git a/data/base/images/frontend/image_team6_hi.png b/data/base/images/frontend/image_team6_hi.png
new file mode 100644
index 0000000..f25642d
Binary files /dev/null and b/data/base/images/frontend/image_team6_hi.png differ
diff --git a/data/base/images/frontend/image_team7.png b/data/base/images/frontend/image_team7.png
new file mode 100644
index 0000000..c8c773b
Binary files /dev/null and b/data/base/images/frontend/image_team7.png differ
diff --git a/data/base/images/frontend/image_team7_hi.png b/data/base/images/frontend/image_team7_hi.png
new file mode 100644
index 0000000..cd5a6b9
Binary files /dev/null and b/data/base/images/frontend/image_team7_hi.png differ
diff --git a/data/base/images/frontend/image_team8.png b/data/base/images/frontend/image_team8.png
new file mode 100644
index 0000000..7029c42
Binary files /dev/null and b/data/base/images/frontend/image_team8.png differ
diff --git a/data/base/images/frontend/image_team8_hi.png b/data/base/images/frontend/image_team8_hi.png
new file mode 100644
index 0000000..1adaf8a
Binary files /dev/null and b/data/base/images/frontend/image_team8_hi.png differ
diff --git a/data/base/images/frontend/image_team9.png b/data/base/images/frontend/image_team9.png
new file mode 100644
index 0000000..87c4fcd
Binary files /dev/null and b/data/base/images/frontend/image_team9.png differ
diff --git a/data/base/images/frontend/image_team9_hi.png b/data/base/images/frontend/image_team9_hi.png
new file mode 100644
index 0000000..31e8198
Binary files /dev/null and b/data/base/images/frontend/image_team9_hi.png differ
diff --git a/data/base/images/frontend/image_team_hi.png b/data/base/images/frontend/image_team_hi.png
new file mode 100644
index 0000000..22a3569
Binary files /dev/null and b/data/base/images/frontend/image_team_hi.png differ
diff --git a/data/base/images/frontend/image_team_over.png b/data/base/images/frontend/image_team_over.png
new file mode 100644
index 0000000..a14809e
Binary files /dev/null and b/data/base/images/frontend/image_team_over.png differ
diff --git a/data/base/images/frontend/image_techhi.png b/data/base/images/frontend/image_techhi.png
new file mode 100644
index 0000000..eb32fd6
Binary files /dev/null and b/data/base/images/frontend/image_techhi.png differ
diff --git a/data/base/images/frontend/image_techhi_hi.png b/data/base/images/frontend/image_techhi_hi.png
new file mode 100644
index 0000000..54cbce3
Binary files /dev/null and b/data/base/images/frontend/image_techhi_hi.png differ
diff --git a/data/base/images/frontend/image_techlo.png b/data/base/images/frontend/image_techlo.png
new file mode 100644
index 0000000..efd0343
Binary files /dev/null and b/data/base/images/frontend/image_techlo.png differ
diff --git a/data/base/images/frontend/image_techlo_hi.png b/data/base/images/frontend/image_techlo_hi.png
new file mode 100644
index 0000000..f26b479
Binary files /dev/null and b/data/base/images/frontend/image_techlo_hi.png differ
diff --git a/data/base/images/frontend/image_techmed.png b/data/base/images/frontend/image_techmed.png
new file mode 100644
index 0000000..dc1c59f
Binary files /dev/null and b/data/base/images/frontend/image_techmed.png differ
diff --git a/data/base/images/frontend/image_techmed_hi.png b/data/base/images/frontend/image_techmed_hi.png
new file mode 100644
index 0000000..eaf4433
Binary files /dev/null and b/data/base/images/frontend/image_techmed_hi.png differ
diff --git a/data/base/images/frontend/image_timelimit.png b/data/base/images/frontend/image_timelimit.png
new file mode 100644
index 0000000..c2d4020
Binary files /dev/null and b/data/base/images/frontend/image_timelimit.png differ
diff --git a/data/base/images/frontend/image_timelimit_hi.png b/data/base/images/frontend/image_timelimit_hi.png
new file mode 100644
index 0000000..1f15add
Binary files /dev/null and b/data/base/images/frontend/image_timelimit_hi.png differ
diff --git a/data/base/images/frontend/image_trans_locked.png b/data/base/images/frontend/image_trans_locked.png
new file mode 100644
index 0000000..d6a4d76
Binary files /dev/null and b/data/base/images/frontend/image_trans_locked.png differ
diff --git a/data/base/images/frontend/image_trans_unlocked.png b/data/base/images/frontend/image_trans_unlocked.png
new file mode 100644
index 0000000..8be6ab0
Binary files /dev/null and b/data/base/images/frontend/image_trans_unlocked.png differ
diff --git a/data/base/images/frontend/image_unlock_blue.png b/data/base/images/frontend/image_unlock_blue.png
new file mode 100644
index 0000000..2ce5ef5
Binary files /dev/null and b/data/base/images/frontend/image_unlock_blue.png differ
diff --git a/data/base/images/frontend/image_unlocked_nobg.png b/data/base/images/frontend/image_unlocked_nobg.png
new file mode 100644
index 0000000..399ff6f
Binary files /dev/null and b/data/base/images/frontend/image_unlocked_nobg.png differ
diff --git a/data/base/images/frontend/image_vtol.png b/data/base/images/frontend/image_vtol.png
new file mode 100644
index 0000000..0d91006
Binary files /dev/null and b/data/base/images/frontend/image_vtol.png differ
diff --git a/data/base/images/frontend/image_wee_guy.png b/data/base/images/frontend/image_wee_guy.png
new file mode 100644
index 0000000..172aacb
Binary files /dev/null and b/data/base/images/frontend/image_wee_guy.png differ
diff --git a/data/base/images/frontend0.png b/data/base/images/frontend0.png
deleted file mode 100644
index 2852692..0000000
Binary files a/data/base/images/frontend0.png and /dev/null differ
diff --git a/data/base/images/frontend1.png b/data/base/images/frontend1.png
deleted file mode 100644
index 1cd78e7..0000000
Binary files a/data/base/images/frontend1.png and /dev/null differ
diff --git a/data/base/images/frontend2.png b/data/base/images/frontend2.png
deleted file mode 100644
index e697902..0000000
Binary files a/data/base/images/frontend2.png and /dev/null differ
diff --git a/data/base/images/frontend3.png b/data/base/images/frontend3.png
deleted file mode 100644
index 2a1578f..0000000
Binary files a/data/base/images/frontend3.png and /dev/null differ
diff --git a/data/base/images/frontend4.png b/data/base/images/frontend4.png
deleted file mode 100644
index 4f9c9c2..0000000
Binary files a/data/base/images/frontend4.png and /dev/null differ
diff --git a/data/base/images/intfac.img b/data/base/images/intfac.img
index 96ef3cc..c326464 100644
diff --git a/data/base/images/intfac/image_0.png b/data/base/images/intfac/image_0.png
new file mode 100644
index 0000000..1633493
Binary files /dev/null and b/data/base/images/intfac/image_0.png differ
diff --git a/data/base/images/intfac/image_1.png b/data/base/images/intfac/image_1.png
new file mode 100644
index 0000000..7f31431
Binary files /dev/null and b/data/base/images/intfac/image_1.png differ
diff --git a/data/base/images/intfac/image_2.png b/data/base/images/intfac/image_2.png
new file mode 100644
index 0000000..05c1db9
Binary files /dev/null and b/data/base/images/intfac/image_2.png differ
diff --git a/data/base/images/intfac/image_3.png b/data/base/images/intfac/image_3.png
new file mode 100644
index 0000000..73ee66a
Binary files /dev/null and b/data/base/images/intfac/image_3.png differ
diff --git a/data/base/images/intfac/image_4.png b/data/base/images/intfac/image_4.png
new file mode 100644
index 0000000..5fdb5ef
Binary files /dev/null and b/data/base/images/intfac/image_4.png differ
diff --git a/data/base/images/intfac/image_5.png b/data/base/images/intfac/image_5.png
new file mode 100644
index 0000000..79635bd
Binary files /dev/null and b/data/base/images/intfac/image_5.png differ
diff --git a/data/base/images/intfac/image_6.png b/data/base/images/intfac/image_6.png
new file mode 100644
index 0000000..54ec381
Binary files /dev/null and b/data/base/images/intfac/image_6.png differ
diff --git a/data/base/images/intfac/image_7.png b/data/base/images/intfac/image_7.png
new file mode 100644
index 0000000..7616059
Binary files /dev/null and b/data/base/images/intfac/image_7.png differ
diff --git a/data/base/images/intfac/image_8.png b/data/base/images/intfac/image_8.png
new file mode 100644
index 0000000..5bb7ef0
Binary files /dev/null and b/data/base/images/intfac/image_8.png differ
diff --git a/data/base/images/intfac/image_9.png b/data/base/images/intfac/image_9.png
new file mode 100644
index 0000000..eeb8197
Binary files /dev/null and b/data/base/images/intfac/image_9.png differ
diff --git a/data/base/images/intfac/image_ally_research.png b/data/base/images/intfac/image_ally_research.png
new file mode 100644
index 0000000..bce1e0a
Binary files /dev/null and b/data/base/images/intfac/image_ally_research.png differ
diff --git a/data/base/images/intfac/image_ally_research_tc.png b/data/base/images/intfac/image_ally_research_tc.png
new file mode 100644
index 0000000..42cf50d
Binary files /dev/null and b/data/base/images/intfac/image_ally_research_tc.png differ
diff --git a/data/base/images/intfac/image_ascii100.png b/data/base/images/intfac/image_ascii100.png
new file mode 100644
index 0000000..562c30d
Binary files /dev/null and b/data/base/images/intfac/image_ascii100.png differ
diff --git a/data/base/images/intfac/image_ascii101.png b/data/base/images/intfac/image_ascii101.png
new file mode 100644
index 0000000..39ea1c0
Binary files /dev/null and b/data/base/images/intfac/image_ascii101.png differ
diff --git a/data/base/images/intfac/image_ascii102.png b/data/base/images/intfac/image_ascii102.png
new file mode 100644
index 0000000..eb9321e
Binary files /dev/null and b/data/base/images/intfac/image_ascii102.png differ
diff --git a/data/base/images/intfac/image_ascii103.png b/data/base/images/intfac/image_ascii103.png
new file mode 100644
index 0000000..b84ad33
Binary files /dev/null and b/data/base/images/intfac/image_ascii103.png differ
diff --git a/data/base/images/intfac/image_ascii104.png b/data/base/images/intfac/image_ascii104.png
new file mode 100644
index 0000000..dbda0bd
Binary files /dev/null and b/data/base/images/intfac/image_ascii104.png differ
diff --git a/data/base/images/intfac/image_ascii105.png b/data/base/images/intfac/image_ascii105.png
new file mode 100644
index 0000000..111a292
Binary files /dev/null and b/data/base/images/intfac/image_ascii105.png differ
diff --git a/data/base/images/intfac/image_ascii106.png b/data/base/images/intfac/image_ascii106.png
new file mode 100644
index 0000000..ff9ebce
Binary files /dev/null and b/data/base/images/intfac/image_ascii106.png differ
diff --git a/data/base/images/intfac/image_ascii107.png b/data/base/images/intfac/image_ascii107.png
new file mode 100644
index 0000000..7b4d2d5
Binary files /dev/null and b/data/base/images/intfac/image_ascii107.png differ
diff --git a/data/base/images/intfac/image_ascii108.png b/data/base/images/intfac/image_ascii108.png
new file mode 100644
index 0000000..85c440c
Binary files /dev/null and b/data/base/images/intfac/image_ascii108.png differ
diff --git a/data/base/images/intfac/image_ascii109.png b/data/base/images/intfac/image_ascii109.png
new file mode 100644
index 0000000..65c0bd0
Binary files /dev/null and b/data/base/images/intfac/image_ascii109.png differ
diff --git a/data/base/images/intfac/image_ascii110.png b/data/base/images/intfac/image_ascii110.png
new file mode 100644
index 0000000..e37dfe8
Binary files /dev/null and b/data/base/images/intfac/image_ascii110.png differ
diff --git a/data/base/images/intfac/image_ascii111.png b/data/base/images/intfac/image_ascii111.png
new file mode 100644
index 0000000..e32656d
Binary files /dev/null and b/data/base/images/intfac/image_ascii111.png differ
diff --git a/data/base/images/intfac/image_ascii112.png b/data/base/images/intfac/image_ascii112.png
new file mode 100644
index 0000000..2c08d0d
Binary files /dev/null and b/data/base/images/intfac/image_ascii112.png differ
diff --git a/data/base/images/intfac/image_ascii113.png b/data/base/images/intfac/image_ascii113.png
new file mode 100644
index 0000000..5c48b94
Binary files /dev/null and b/data/base/images/intfac/image_ascii113.png differ
diff --git a/data/base/images/intfac/image_ascii114.png b/data/base/images/intfac/image_ascii114.png
new file mode 100644
index 0000000..a6ca20c
Binary files /dev/null and b/data/base/images/intfac/image_ascii114.png differ
diff --git a/data/base/images/intfac/image_ascii115.png b/data/base/images/intfac/image_ascii115.png
new file mode 100644
index 0000000..44b6d51
Binary files /dev/null and b/data/base/images/intfac/image_ascii115.png differ
diff --git a/data/base/images/intfac/image_ascii116.png b/data/base/images/intfac/image_ascii116.png
new file mode 100644
index 0000000..5b92f6a
Binary files /dev/null and b/data/base/images/intfac/image_ascii116.png differ
diff --git a/data/base/images/intfac/image_ascii117.png b/data/base/images/intfac/image_ascii117.png
new file mode 100644
index 0000000..52a2715
Binary files /dev/null and b/data/base/images/intfac/image_ascii117.png differ
diff --git a/data/base/images/intfac/image_ascii118.png b/data/base/images/intfac/image_ascii118.png
new file mode 100644
index 0000000..a25f905
Binary files /dev/null and b/data/base/images/intfac/image_ascii118.png differ
diff --git a/data/base/images/intfac/image_ascii119.png b/data/base/images/intfac/image_ascii119.png
new file mode 100644
index 0000000..1d393d2
Binary files /dev/null and b/data/base/images/intfac/image_ascii119.png differ
diff --git a/data/base/images/intfac/image_ascii120.png b/data/base/images/intfac/image_ascii120.png
new file mode 100644
index 0000000..0dfec86
Binary files /dev/null and b/data/base/images/intfac/image_ascii120.png differ
diff --git a/data/base/images/intfac/image_ascii121.png b/data/base/images/intfac/image_ascii121.png
new file mode 100644
index 0000000..0321c65
Binary files /dev/null and b/data/base/images/intfac/image_ascii121.png differ
diff --git a/data/base/images/intfac/image_ascii122.png b/data/base/images/intfac/image_ascii122.png
new file mode 100644
index 0000000..a13a1fc
Binary files /dev/null and b/data/base/images/intfac/image_ascii122.png differ
diff --git a/data/base/images/intfac/image_ascii123.png b/data/base/images/intfac/image_ascii123.png
new file mode 100644
index 0000000..d1e60a6
Binary files /dev/null and b/data/base/images/intfac/image_ascii123.png differ
diff --git a/data/base/images/intfac/image_ascii124.png b/data/base/images/intfac/image_ascii124.png
new file mode 100644
index 0000000..6286590
Binary files /dev/null and b/data/base/images/intfac/image_ascii124.png differ
diff --git a/data/base/images/intfac/image_ascii125.png b/data/base/images/intfac/image_ascii125.png
new file mode 100644
index 0000000..f8c8d86
Binary files /dev/null and b/data/base/images/intfac/image_ascii125.png differ
diff --git a/data/base/images/intfac/image_ascii126.png b/data/base/images/intfac/image_ascii126.png
new file mode 100644
index 0000000..ea686f8
Binary files /dev/null and b/data/base/images/intfac/image_ascii126.png differ
diff --git a/data/base/images/intfac/image_ascii131.png b/data/base/images/intfac/image_ascii131.png
new file mode 100644
index 0000000..120c831
Binary files /dev/null and b/data/base/images/intfac/image_ascii131.png differ
diff --git a/data/base/images/intfac/image_ascii161.png b/data/base/images/intfac/image_ascii161.png
new file mode 100644
index 0000000..20a0659
Binary files /dev/null and b/data/base/images/intfac/image_ascii161.png differ
diff --git a/data/base/images/intfac/image_ascii188.png b/data/base/images/intfac/image_ascii188.png
new file mode 100644
index 0000000..4856bea
Binary files /dev/null and b/data/base/images/intfac/image_ascii188.png differ
diff --git a/data/base/images/intfac/image_ascii189.png b/data/base/images/intfac/image_ascii189.png
new file mode 100644
index 0000000..f0e3209
Binary files /dev/null and b/data/base/images/intfac/image_ascii189.png differ
diff --git a/data/base/images/intfac/image_ascii191.png b/data/base/images/intfac/image_ascii191.png
new file mode 100644
index 0000000..7bee0dc
Binary files /dev/null and b/data/base/images/intfac/image_ascii191.png differ
diff --git a/data/base/images/intfac/image_ascii192.png b/data/base/images/intfac/image_ascii192.png
new file mode 100644
index 0000000..cc458ec
Binary files /dev/null and b/data/base/images/intfac/image_ascii192.png differ
diff --git a/data/base/images/intfac/image_ascii193.png b/data/base/images/intfac/image_ascii193.png
new file mode 100644
index 0000000..0887f2f
Binary files /dev/null and b/data/base/images/intfac/image_ascii193.png differ
diff --git a/data/base/images/intfac/image_ascii194.png b/data/base/images/intfac/image_ascii194.png
new file mode 100644
index 0000000..cfb7aaf
Binary files /dev/null and b/data/base/images/intfac/image_ascii194.png differ
diff --git a/data/base/images/intfac/image_ascii195.png b/data/base/images/intfac/image_ascii195.png
new file mode 100644
index 0000000..32bc1cf
Binary files /dev/null and b/data/base/images/intfac/image_ascii195.png differ
diff --git a/data/base/images/intfac/image_ascii196.png b/data/base/images/intfac/image_ascii196.png
new file mode 100644
index 0000000..1d236b5
Binary files /dev/null and b/data/base/images/intfac/image_ascii196.png differ
diff --git a/data/base/images/intfac/image_ascii197.png b/data/base/images/intfac/image_ascii197.png
new file mode 100644
index 0000000..1717f22
Binary files /dev/null and b/data/base/images/intfac/image_ascii197.png differ
diff --git a/data/base/images/intfac/image_ascii198.png b/data/base/images/intfac/image_ascii198.png
new file mode 100644
index 0000000..195e316
Binary files /dev/null and b/data/base/images/intfac/image_ascii198.png differ
diff --git a/data/base/images/intfac/image_ascii200.png b/data/base/images/intfac/image_ascii200.png
new file mode 100644
index 0000000..3f7fff9
Binary files /dev/null and b/data/base/images/intfac/image_ascii200.png differ
diff --git a/data/base/images/intfac/image_ascii201.png b/data/base/images/intfac/image_ascii201.png
new file mode 100644
index 0000000..eb2ef79
Binary files /dev/null and b/data/base/images/intfac/image_ascii201.png differ
diff --git a/data/base/images/intfac/image_ascii202.png b/data/base/images/intfac/image_ascii202.png
new file mode 100644
index 0000000..fcf52d6
Binary files /dev/null and b/data/base/images/intfac/image_ascii202.png differ
diff --git a/data/base/images/intfac/image_ascii203.png b/data/base/images/intfac/image_ascii203.png
new file mode 100644
index 0000000..b9ee7d5
Binary files /dev/null and b/data/base/images/intfac/image_ascii203.png differ
diff --git a/data/base/images/intfac/image_ascii204.png b/data/base/images/intfac/image_ascii204.png
new file mode 100644
index 0000000..b007869
Binary files /dev/null and b/data/base/images/intfac/image_ascii204.png differ
diff --git a/data/base/images/intfac/image_ascii205.png b/data/base/images/intfac/image_ascii205.png
new file mode 100644
index 0000000..1e50bae
Binary files /dev/null and b/data/base/images/intfac/image_ascii205.png differ
diff --git a/data/base/images/intfac/image_ascii206.png b/data/base/images/intfac/image_ascii206.png
new file mode 100644
index 0000000..3146a44
Binary files /dev/null and b/data/base/images/intfac/image_ascii206.png differ
diff --git a/data/base/images/intfac/image_ascii207.png b/data/base/images/intfac/image_ascii207.png
new file mode 100644
index 0000000..c194ac5
Binary files /dev/null and b/data/base/images/intfac/image_ascii207.png differ
diff --git a/data/base/images/intfac/image_ascii208.png b/data/base/images/intfac/image_ascii208.png
new file mode 100644
index 0000000..fb8002b
Binary files /dev/null and b/data/base/images/intfac/image_ascii208.png differ
diff --git a/data/base/images/intfac/image_ascii210.png b/data/base/images/intfac/image_ascii210.png
new file mode 100644
index 0000000..1371c27
Binary files /dev/null and b/data/base/images/intfac/image_ascii210.png differ
diff --git a/data/base/images/intfac/image_ascii211.png b/data/base/images/intfac/image_ascii211.png
new file mode 100644
index 0000000..e4f10dc
Binary files /dev/null and b/data/base/images/intfac/image_ascii211.png differ
diff --git a/data/base/images/intfac/image_ascii212.png b/data/base/images/intfac/image_ascii212.png
new file mode 100644
index 0000000..6f14ba2
Binary files /dev/null and b/data/base/images/intfac/image_ascii212.png differ
diff --git a/data/base/images/intfac/image_ascii213.png b/data/base/images/intfac/image_ascii213.png
new file mode 100644
index 0000000..baa47e7
Binary files /dev/null and b/data/base/images/intfac/image_ascii213.png differ
diff --git a/data/base/images/intfac/image_ascii214.png b/data/base/images/intfac/image_ascii214.png
new file mode 100644
index 0000000..c9a6b33
Binary files /dev/null and b/data/base/images/intfac/image_ascii214.png differ
diff --git a/data/base/images/intfac/image_ascii216.png b/data/base/images/intfac/image_ascii216.png
new file mode 100644
index 0000000..66df5b8
Binary files /dev/null and b/data/base/images/intfac/image_ascii216.png differ
diff --git a/data/base/images/intfac/image_ascii217.png b/data/base/images/intfac/image_ascii217.png
new file mode 100644
index 0000000..fa47e27
Binary files /dev/null and b/data/base/images/intfac/image_ascii217.png differ
diff --git a/data/base/images/intfac/image_ascii218.png b/data/base/images/intfac/image_ascii218.png
new file mode 100644
index 0000000..3ada08c
Binary files /dev/null and b/data/base/images/intfac/image_ascii218.png differ
diff --git a/data/base/images/intfac/image_ascii219.png b/data/base/images/intfac/image_ascii219.png
new file mode 100644
index 0000000..5c59786
Binary files /dev/null and b/data/base/images/intfac/image_ascii219.png differ
diff --git a/data/base/images/intfac/image_ascii220.png b/data/base/images/intfac/image_ascii220.png
new file mode 100644
index 0000000..9ac238c
Binary files /dev/null and b/data/base/images/intfac/image_ascii220.png differ
diff --git a/data/base/images/intfac/image_ascii221.png b/data/base/images/intfac/image_ascii221.png
new file mode 100644
index 0000000..947046a
Binary files /dev/null and b/data/base/images/intfac/image_ascii221.png differ
diff --git a/data/base/images/intfac/image_ascii223.png b/data/base/images/intfac/image_ascii223.png
new file mode 100644
index 0000000..0cd22dc
Binary files /dev/null and b/data/base/images/intfac/image_ascii223.png differ
diff --git a/data/base/images/intfac/image_ascii224.png b/data/base/images/intfac/image_ascii224.png
new file mode 100644
index 0000000..877aea1
Binary files /dev/null and b/data/base/images/intfac/image_ascii224.png differ
diff --git a/data/base/images/intfac/image_ascii225.png b/data/base/images/intfac/image_ascii225.png
new file mode 100644
index 0000000..235eb72
Binary files /dev/null and b/data/base/images/intfac/image_ascii225.png differ
diff --git a/data/base/images/intfac/image_ascii226.png b/data/base/images/intfac/image_ascii226.png
new file mode 100644
index 0000000..06afeb8
Binary files /dev/null and b/data/base/images/intfac/image_ascii226.png differ
diff --git a/data/base/images/intfac/image_ascii227.png b/data/base/images/intfac/image_ascii227.png
new file mode 100644
index 0000000..d63386d
Binary files /dev/null and b/data/base/images/intfac/image_ascii227.png differ
diff --git a/data/base/images/intfac/image_ascii228.png b/data/base/images/intfac/image_ascii228.png
new file mode 100644
index 0000000..ab9f04f
Binary files /dev/null and b/data/base/images/intfac/image_ascii228.png differ
diff --git a/data/base/images/intfac/image_ascii229.png b/data/base/images/intfac/image_ascii229.png
new file mode 100644
index 0000000..ae1e246
Binary files /dev/null and b/data/base/images/intfac/image_ascii229.png differ
diff --git a/data/base/images/intfac/image_ascii230.png b/data/base/images/intfac/image_ascii230.png
new file mode 100644
index 0000000..05543a6
Binary files /dev/null and b/data/base/images/intfac/image_ascii230.png differ
diff --git a/data/base/images/intfac/image_ascii231.png b/data/base/images/intfac/image_ascii231.png
new file mode 100644
index 0000000..fa176d6
Binary files /dev/null and b/data/base/images/intfac/image_ascii231.png differ
diff --git a/data/base/images/intfac/image_ascii232.png b/data/base/images/intfac/image_ascii232.png
new file mode 100644
index 0000000..f630bb6
Binary files /dev/null and b/data/base/images/intfac/image_ascii232.png differ
diff --git a/data/base/images/intfac/image_ascii233.png b/data/base/images/intfac/image_ascii233.png
new file mode 100644
index 0000000..7520413
Binary files /dev/null and b/data/base/images/intfac/image_ascii233.png differ
diff --git a/data/base/images/intfac/image_ascii234.png b/data/base/images/intfac/image_ascii234.png
new file mode 100644
index 0000000..e72ee0e
Binary files /dev/null and b/data/base/images/intfac/image_ascii234.png differ
diff --git a/data/base/images/intfac/image_ascii235.png b/data/base/images/intfac/image_ascii235.png
new file mode 100644
index 0000000..af59c0d
Binary files /dev/null and b/data/base/images/intfac/image_ascii235.png differ
diff --git a/data/base/images/intfac/image_ascii236.png b/data/base/images/intfac/image_ascii236.png
new file mode 100644
index 0000000..717a569
Binary files /dev/null and b/data/base/images/intfac/image_ascii236.png differ
diff --git a/data/base/images/intfac/image_ascii237.png b/data/base/images/intfac/image_ascii237.png
new file mode 100644
index 0000000..b884db2
Binary files /dev/null and b/data/base/images/intfac/image_ascii237.png differ
diff --git a/data/base/images/intfac/image_ascii238.png b/data/base/images/intfac/image_ascii238.png
new file mode 100644
index 0000000..1df4760
Binary files /dev/null and b/data/base/images/intfac/image_ascii238.png differ
diff --git a/data/base/images/intfac/image_ascii239.png b/data/base/images/intfac/image_ascii239.png
new file mode 100644
index 0000000..8e3de4a
Binary files /dev/null and b/data/base/images/intfac/image_ascii239.png differ
diff --git a/data/base/images/intfac/image_ascii241.png b/data/base/images/intfac/image_ascii241.png
new file mode 100644
index 0000000..d35ac7b
Binary files /dev/null and b/data/base/images/intfac/image_ascii241.png differ
diff --git a/data/base/images/intfac/image_ascii242.png b/data/base/images/intfac/image_ascii242.png
new file mode 100644
index 0000000..8b5585d
Binary files /dev/null and b/data/base/images/intfac/image_ascii242.png differ
diff --git a/data/base/images/intfac/image_ascii243.png b/data/base/images/intfac/image_ascii243.png
new file mode 100644
index 0000000..a651443
Binary files /dev/null and b/data/base/images/intfac/image_ascii243.png differ
diff --git a/data/base/images/intfac/image_ascii244.png b/data/base/images/intfac/image_ascii244.png
new file mode 100644
index 0000000..537cf07
Binary files /dev/null and b/data/base/images/intfac/image_ascii244.png differ
diff --git a/data/base/images/intfac/image_ascii245.png b/data/base/images/intfac/image_ascii245.png
new file mode 100644
index 0000000..60a8540
Binary files /dev/null and b/data/base/images/intfac/image_ascii245.png differ
diff --git a/data/base/images/intfac/image_ascii246.png b/data/base/images/intfac/image_ascii246.png
new file mode 100644
index 0000000..7e34ea3
Binary files /dev/null and b/data/base/images/intfac/image_ascii246.png differ
diff --git a/data/base/images/intfac/image_ascii248.png b/data/base/images/intfac/image_ascii248.png
new file mode 100644
index 0000000..9432ce1
Binary files /dev/null and b/data/base/images/intfac/image_ascii248.png differ
diff --git a/data/base/images/intfac/image_ascii249.png b/data/base/images/intfac/image_ascii249.png
new file mode 100644
index 0000000..380e5d8
Binary files /dev/null and b/data/base/images/intfac/image_ascii249.png differ
diff --git a/data/base/images/intfac/image_ascii250.png b/data/base/images/intfac/image_ascii250.png
new file mode 100644
index 0000000..4c7972e
Binary files /dev/null and b/data/base/images/intfac/image_ascii250.png differ
diff --git a/data/base/images/intfac/image_ascii251.png b/data/base/images/intfac/image_ascii251.png
new file mode 100644
index 0000000..2752953
Binary files /dev/null and b/data/base/images/intfac/image_ascii251.png differ
diff --git a/data/base/images/intfac/image_ascii252.png b/data/base/images/intfac/image_ascii252.png
new file mode 100644
index 0000000..8badd92
Binary files /dev/null and b/data/base/images/intfac/image_ascii252.png differ
diff --git a/data/base/images/intfac/image_ascii253.png b/data/base/images/intfac/image_ascii253.png
new file mode 100644
index 0000000..b3ed692
Binary files /dev/null and b/data/base/images/intfac/image_ascii253.png differ
diff --git a/data/base/images/intfac/image_ascii33.png b/data/base/images/intfac/image_ascii33.png
new file mode 100644
index 0000000..e7a9afe
Binary files /dev/null and b/data/base/images/intfac/image_ascii33.png differ
diff --git a/data/base/images/intfac/image_ascii34.png b/data/base/images/intfac/image_ascii34.png
new file mode 100644
index 0000000..fe28332
Binary files /dev/null and b/data/base/images/intfac/image_ascii34.png differ
diff --git a/data/base/images/intfac/image_ascii35.png b/data/base/images/intfac/image_ascii35.png
new file mode 100644
index 0000000..6312e86
Binary files /dev/null and b/data/base/images/intfac/image_ascii35.png differ
diff --git a/data/base/images/intfac/image_ascii36.png b/data/base/images/intfac/image_ascii36.png
new file mode 100644
index 0000000..7010b0a
Binary files /dev/null and b/data/base/images/intfac/image_ascii36.png differ
diff --git a/data/base/images/intfac/image_ascii37.png b/data/base/images/intfac/image_ascii37.png
new file mode 100644
index 0000000..2d1e079
Binary files /dev/null and b/data/base/images/intfac/image_ascii37.png differ
diff --git a/data/base/images/intfac/image_ascii38.png b/data/base/images/intfac/image_ascii38.png
new file mode 100644
index 0000000..d710b45
Binary files /dev/null and b/data/base/images/intfac/image_ascii38.png differ
diff --git a/data/base/images/intfac/image_ascii39.png b/data/base/images/intfac/image_ascii39.png
new file mode 100644
index 0000000..382f91b
Binary files /dev/null and b/data/base/images/intfac/image_ascii39.png differ
diff --git a/data/base/images/intfac/image_ascii40.png b/data/base/images/intfac/image_ascii40.png
new file mode 100644
index 0000000..9cf64b0
Binary files /dev/null and b/data/base/images/intfac/image_ascii40.png differ
diff --git a/data/base/images/intfac/image_ascii41.png b/data/base/images/intfac/image_ascii41.png
new file mode 100644
index 0000000..9b786ed
Binary files /dev/null and b/data/base/images/intfac/image_ascii41.png differ
diff --git a/data/base/images/intfac/image_ascii42.png b/data/base/images/intfac/image_ascii42.png
new file mode 100644
index 0000000..de8b424
Binary files /dev/null and b/data/base/images/intfac/image_ascii42.png differ
diff --git a/data/base/images/intfac/image_ascii43.png b/data/base/images/intfac/image_ascii43.png
new file mode 100644
index 0000000..e05abd9
Binary files /dev/null and b/data/base/images/intfac/image_ascii43.png differ
diff --git a/data/base/images/intfac/image_ascii44.png b/data/base/images/intfac/image_ascii44.png
new file mode 100644
index 0000000..254fa71
Binary files /dev/null and b/data/base/images/intfac/image_ascii44.png differ
diff --git a/data/base/images/intfac/image_ascii45.png b/data/base/images/intfac/image_ascii45.png
new file mode 100644
index 0000000..75a088f
Binary files /dev/null and b/data/base/images/intfac/image_ascii45.png differ
diff --git a/data/base/images/intfac/image_ascii46.png b/data/base/images/intfac/image_ascii46.png
new file mode 100644
index 0000000..5a59884
Binary files /dev/null and b/data/base/images/intfac/image_ascii46.png differ
diff --git a/data/base/images/intfac/image_ascii47.png b/data/base/images/intfac/image_ascii47.png
new file mode 100644
index 0000000..be6bcb1
Binary files /dev/null and b/data/base/images/intfac/image_ascii47.png differ
diff --git a/data/base/images/intfac/image_ascii48.png b/data/base/images/intfac/image_ascii48.png
new file mode 100644
index 0000000..95b6a14
Binary files /dev/null and b/data/base/images/intfac/image_ascii48.png differ
diff --git a/data/base/images/intfac/image_ascii49.png b/data/base/images/intfac/image_ascii49.png
new file mode 100644
index 0000000..d946d27
Binary files /dev/null and b/data/base/images/intfac/image_ascii49.png differ
diff --git a/data/base/images/intfac/image_ascii50.png b/data/base/images/intfac/image_ascii50.png
new file mode 100644
index 0000000..848dce5
Binary files /dev/null and b/data/base/images/intfac/image_ascii50.png differ
diff --git a/data/base/images/intfac/image_ascii51.png b/data/base/images/intfac/image_ascii51.png
new file mode 100644
index 0000000..d66a0ad
Binary files /dev/null and b/data/base/images/intfac/image_ascii51.png differ
diff --git a/data/base/images/intfac/image_ascii52.png b/data/base/images/intfac/image_ascii52.png
new file mode 100644
index 0000000..12d86e5
Binary files /dev/null and b/data/base/images/intfac/image_ascii52.png differ
diff --git a/data/base/images/intfac/image_ascii53.png b/data/base/images/intfac/image_ascii53.png
new file mode 100644
index 0000000..20f94ce
Binary files /dev/null and b/data/base/images/intfac/image_ascii53.png differ
diff --git a/data/base/images/intfac/image_ascii54.png b/data/base/images/intfac/image_ascii54.png
new file mode 100644
index 0000000..02271f7
Binary files /dev/null and b/data/base/images/intfac/image_ascii54.png differ
diff --git a/data/base/images/intfac/image_ascii55.png b/data/base/images/intfac/image_ascii55.png
new file mode 100644
index 0000000..ad1e8ba
Binary files /dev/null and b/data/base/images/intfac/image_ascii55.png differ
diff --git a/data/base/images/intfac/image_ascii56.png b/data/base/images/intfac/image_ascii56.png
new file mode 100644
index 0000000..2697e5f
Binary files /dev/null and b/data/base/images/intfac/image_ascii56.png differ
diff --git a/data/base/images/intfac/image_ascii57.png b/data/base/images/intfac/image_ascii57.png
new file mode 100644
index 0000000..a25e56b
Binary files /dev/null and b/data/base/images/intfac/image_ascii57.png differ
diff --git a/data/base/images/intfac/image_ascii58.png b/data/base/images/intfac/image_ascii58.png
new file mode 100644
index 0000000..7917878
Binary files /dev/null and b/data/base/images/intfac/image_ascii58.png differ
diff --git a/data/base/images/intfac/image_ascii59.png b/data/base/images/intfac/image_ascii59.png
new file mode 100644
index 0000000..8efe7e3
Binary files /dev/null and b/data/base/images/intfac/image_ascii59.png differ
diff --git a/data/base/images/intfac/image_ascii60.png b/data/base/images/intfac/image_ascii60.png
new file mode 100644
index 0000000..36624f8
Binary files /dev/null and b/data/base/images/intfac/image_ascii60.png differ
diff --git a/data/base/images/intfac/image_ascii61.png b/data/base/images/intfac/image_ascii61.png
new file mode 100644
index 0000000..7dbafb2
Binary files /dev/null and b/data/base/images/intfac/image_ascii61.png differ
diff --git a/data/base/images/intfac/image_ascii62.png b/data/base/images/intfac/image_ascii62.png
new file mode 100644
index 0000000..5ab77ff
Binary files /dev/null and b/data/base/images/intfac/image_ascii62.png differ
diff --git a/data/base/images/intfac/image_ascii63.png b/data/base/images/intfac/image_ascii63.png
new file mode 100644
index 0000000..d2564c8
Binary files /dev/null and b/data/base/images/intfac/image_ascii63.png differ
diff --git a/data/base/images/intfac/image_ascii64.png b/data/base/images/intfac/image_ascii64.png
new file mode 100644
index 0000000..23a1e99
Binary files /dev/null and b/data/base/images/intfac/image_ascii64.png differ
diff --git a/data/base/images/intfac/image_ascii65.png b/data/base/images/intfac/image_ascii65.png
new file mode 100644
index 0000000..9567a13
Binary files /dev/null and b/data/base/images/intfac/image_ascii65.png differ
diff --git a/data/base/images/intfac/image_ascii66.png b/data/base/images/intfac/image_ascii66.png
new file mode 100644
index 0000000..0ec608d
Binary files /dev/null and b/data/base/images/intfac/image_ascii66.png differ
diff --git a/data/base/images/intfac/image_ascii67.png b/data/base/images/intfac/image_ascii67.png
new file mode 100644
index 0000000..7683953
Binary files /dev/null and b/data/base/images/intfac/image_ascii67.png differ
diff --git a/data/base/images/intfac/image_ascii68.png b/data/base/images/intfac/image_ascii68.png
new file mode 100644
index 0000000..ab90840
Binary files /dev/null and b/data/base/images/intfac/image_ascii68.png differ
diff --git a/data/base/images/intfac/image_ascii69.png b/data/base/images/intfac/image_ascii69.png
new file mode 100644
index 0000000..abb553a
Binary files /dev/null and b/data/base/images/intfac/image_ascii69.png differ
diff --git a/data/base/images/intfac/image_ascii70.png b/data/base/images/intfac/image_ascii70.png
new file mode 100644
index 0000000..fe0f510
Binary files /dev/null and b/data/base/images/intfac/image_ascii70.png differ
diff --git a/data/base/images/intfac/image_ascii71.png b/data/base/images/intfac/image_ascii71.png
new file mode 100644
index 0000000..f938b87
Binary files /dev/null and b/data/base/images/intfac/image_ascii71.png differ
diff --git a/data/base/images/intfac/image_ascii72.png b/data/base/images/intfac/image_ascii72.png
new file mode 100644
index 0000000..64ace2c
Binary files /dev/null and b/data/base/images/intfac/image_ascii72.png differ
diff --git a/data/base/images/intfac/image_ascii73.png b/data/base/images/intfac/image_ascii73.png
new file mode 100644
index 0000000..85c440c
Binary files /dev/null and b/data/base/images/intfac/image_ascii73.png differ
diff --git a/data/base/images/intfac/image_ascii74.png b/data/base/images/intfac/image_ascii74.png
new file mode 100644
index 0000000..8caf4eb
Binary files /dev/null and b/data/base/images/intfac/image_ascii74.png differ
diff --git a/data/base/images/intfac/image_ascii75.png b/data/base/images/intfac/image_ascii75.png
new file mode 100644
index 0000000..2f2099c
Binary files /dev/null and b/data/base/images/intfac/image_ascii75.png differ
diff --git a/data/base/images/intfac/image_ascii76.png b/data/base/images/intfac/image_ascii76.png
new file mode 100644
index 0000000..11c5914
Binary files /dev/null and b/data/base/images/intfac/image_ascii76.png differ
diff --git a/data/base/images/intfac/image_ascii77.png b/data/base/images/intfac/image_ascii77.png
new file mode 100644
index 0000000..3237f27
Binary files /dev/null and b/data/base/images/intfac/image_ascii77.png differ
diff --git a/data/base/images/intfac/image_ascii78.png b/data/base/images/intfac/image_ascii78.png
new file mode 100644
index 0000000..af2cfd7
Binary files /dev/null and b/data/base/images/intfac/image_ascii78.png differ
diff --git a/data/base/images/intfac/image_ascii79.png b/data/base/images/intfac/image_ascii79.png
new file mode 100644
index 0000000..2f540a9
Binary files /dev/null and b/data/base/images/intfac/image_ascii79.png differ
diff --git a/data/base/images/intfac/image_ascii80.png b/data/base/images/intfac/image_ascii80.png
new file mode 100644
index 0000000..0272c9d
Binary files /dev/null and b/data/base/images/intfac/image_ascii80.png differ
diff --git a/data/base/images/intfac/image_ascii81.png b/data/base/images/intfac/image_ascii81.png
new file mode 100644
index 0000000..c3c6f96
Binary files /dev/null and b/data/base/images/intfac/image_ascii81.png differ
diff --git a/data/base/images/intfac/image_ascii82.png b/data/base/images/intfac/image_ascii82.png
new file mode 100644
index 0000000..ecf9d27
Binary files /dev/null and b/data/base/images/intfac/image_ascii82.png differ
diff --git a/data/base/images/intfac/image_ascii83.png b/data/base/images/intfac/image_ascii83.png
new file mode 100644
index 0000000..87f7d7a
Binary files /dev/null and b/data/base/images/intfac/image_ascii83.png differ
diff --git a/data/base/images/intfac/image_ascii84.png b/data/base/images/intfac/image_ascii84.png
new file mode 100644
index 0000000..a587fcf
Binary files /dev/null and b/data/base/images/intfac/image_ascii84.png differ
diff --git a/data/base/images/intfac/image_ascii85.png b/data/base/images/intfac/image_ascii85.png
new file mode 100644
index 0000000..2f06067
Binary files /dev/null and b/data/base/images/intfac/image_ascii85.png differ
diff --git a/data/base/images/intfac/image_ascii86.png b/data/base/images/intfac/image_ascii86.png
new file mode 100644
index 0000000..0e0125d
Binary files /dev/null and b/data/base/images/intfac/image_ascii86.png differ
diff --git a/data/base/images/intfac/image_ascii87.png b/data/base/images/intfac/image_ascii87.png
new file mode 100644
index 0000000..f76de44
Binary files /dev/null and b/data/base/images/intfac/image_ascii87.png differ
diff --git a/data/base/images/intfac/image_ascii88.png b/data/base/images/intfac/image_ascii88.png
new file mode 100644
index 0000000..93e361a
Binary files /dev/null and b/data/base/images/intfac/image_ascii88.png differ
diff --git a/data/base/images/intfac/image_ascii89.png b/data/base/images/intfac/image_ascii89.png
new file mode 100644
index 0000000..7996f15
Binary files /dev/null and b/data/base/images/intfac/image_ascii89.png differ
diff --git a/data/base/images/intfac/image_ascii90.png b/data/base/images/intfac/image_ascii90.png
new file mode 100644
index 0000000..adc2828
Binary files /dev/null and b/data/base/images/intfac/image_ascii90.png differ
diff --git a/data/base/images/intfac/image_ascii91.png b/data/base/images/intfac/image_ascii91.png
new file mode 100644
index 0000000..6befb82
Binary files /dev/null and b/data/base/images/intfac/image_ascii91.png differ
diff --git a/data/base/images/intfac/image_ascii92.png b/data/base/images/intfac/image_ascii92.png
new file mode 100644
index 0000000..1c554df
Binary files /dev/null and b/data/base/images/intfac/image_ascii92.png differ
diff --git a/data/base/images/intfac/image_ascii93.png b/data/base/images/intfac/image_ascii93.png
new file mode 100644
index 0000000..6876a17
Binary files /dev/null and b/data/base/images/intfac/image_ascii93.png differ
diff --git a/data/base/images/intfac/image_ascii94.png b/data/base/images/intfac/image_ascii94.png
new file mode 100644
index 0000000..3423012
Binary files /dev/null and b/data/base/images/intfac/image_ascii94.png differ
diff --git a/data/base/images/intfac/image_ascii95.png b/data/base/images/intfac/image_ascii95.png
new file mode 100644
index 0000000..8bce206
Binary files /dev/null and b/data/base/images/intfac/image_ascii95.png differ
diff --git a/data/base/images/intfac/image_ascii96.png b/data/base/images/intfac/image_ascii96.png
new file mode 100644
index 0000000..47839a1
Binary files /dev/null and b/data/base/images/intfac/image_ascii96.png differ
diff --git a/data/base/images/intfac/image_ascii97.png b/data/base/images/intfac/image_ascii97.png
new file mode 100644
index 0000000..3ab3a1f
Binary files /dev/null and b/data/base/images/intfac/image_ascii97.png differ
diff --git a/data/base/images/intfac/image_ascii98.png b/data/base/images/intfac/image_ascii98.png
new file mode 100644
index 0000000..ac8ba46
Binary files /dev/null and b/data/base/images/intfac/image_ascii98.png differ
diff --git a/data/base/images/intfac/image_ascii99.png b/data/base/images/intfac/image_ascii99.png
new file mode 100644
index 0000000..9fccb24
Binary files /dev/null and b/data/base/images/intfac/image_ascii99.png differ
diff --git a/data/base/images/intfac/image_asterisk.png b/data/base/images/intfac/image_asterisk.png
new file mode 100644
index 0000000..465ef44
Binary files /dev/null and b/data/base/images/intfac/image_asterisk.png differ
diff --git a/data/base/images/intfac/image_audio_lastsample.png b/data/base/images/intfac/image_audio_lastsample.png
new file mode 100644
index 0000000..65a80aa
Binary files /dev/null and b/data/base/images/intfac/image_audio_lastsample.png differ
diff --git a/data/base/images/intfac/image_audio_lastsampleh.png b/data/base/images/intfac/image_audio_lastsampleh.png
new file mode 100644
index 0000000..8afa197
Binary files /dev/null and b/data/base/images/intfac/image_audio_lastsampleh.png differ
diff --git a/data/base/images/intfac/image_blue1.png b/data/base/images/intfac/image_blue1.png
new file mode 100644
index 0000000..fc1fd09
Binary files /dev/null and b/data/base/images/intfac/image_blue1.png differ
diff --git a/data/base/images/intfac/image_blue2.png b/data/base/images/intfac/image_blue2.png
new file mode 100644
index 0000000..fbb54b2
Binary files /dev/null and b/data/base/images/intfac/image_blue2.png differ
diff --git a/data/base/images/intfac/image_blue3.png b/data/base/images/intfac/image_blue3.png
new file mode 100644
index 0000000..727ed8a
Binary files /dev/null and b/data/base/images/intfac/image_blue3.png differ
diff --git a/data/base/images/intfac/image_blue4.png b/data/base/images/intfac/image_blue4.png
new file mode 100644
index 0000000..f3d159e
Binary files /dev/null and b/data/base/images/intfac/image_blue4.png differ
diff --git a/data/base/images/intfac/image_blue5.png b/data/base/images/intfac/image_blue5.png
new file mode 100644
index 0000000..392211d
Binary files /dev/null and b/data/base/images/intfac/image_blue5.png differ
diff --git a/data/base/images/intfac/image_blue6.png b/data/base/images/intfac/image_blue6.png
new file mode 100644
index 0000000..231fdd4
Binary files /dev/null and b/data/base/images/intfac/image_blue6.png differ
diff --git a/data/base/images/intfac/image_build_down.png b/data/base/images/intfac/image_build_down.png
new file mode 100644
index 0000000..adb8c30
Binary files /dev/null and b/data/base/images/intfac/image_build_down.png differ
diff --git a/data/base/images/intfac/image_build_up.png b/data/base/images/intfac/image_build_up.png
new file mode 100644
index 0000000..36282ed
Binary files /dev/null and b/data/base/images/intfac/image_build_up.png differ
diff --git a/data/base/images/intfac/image_but0_down.png b/data/base/images/intfac/image_but0_down.png
new file mode 100644
index 0000000..9338163
Binary files /dev/null and b/data/base/images/intfac/image_but0_down.png differ
diff --git a/data/base/images/intfac/image_but0_up.png b/data/base/images/intfac/image_but0_up.png
new file mode 100644
index 0000000..9e594b4
Binary files /dev/null and b/data/base/images/intfac/image_but0_up.png differ
diff --git a/data/base/images/intfac/image_but_hilite.png b/data/base/images/intfac/image_but_hilite.png
new file mode 100644
index 0000000..8bcf1a6
Binary files /dev/null and b/data/base/images/intfac/image_but_hilite.png differ
diff --git a/data/base/images/intfac/image_butb0_down.png b/data/base/images/intfac/image_butb0_down.png
new file mode 100644
index 0000000..d9ffe1e
Binary files /dev/null and b/data/base/images/intfac/image_butb0_down.png differ
diff --git a/data/base/images/intfac/image_butb0_up.png b/data/base/images/intfac/image_butb0_up.png
new file mode 100644
index 0000000..22f38ca
Binary files /dev/null and b/data/base/images/intfac/image_butb0_up.png differ
diff --git a/data/base/images/intfac/image_butb_hilite.png b/data/base/images/intfac/image_butb_hilite.png
new file mode 100644
index 0000000..e4be887
Binary files /dev/null and b/data/base/images/intfac/image_butb_hilite.png differ
diff --git a/data/base/images/intfac/image_cancel_down.png b/data/base/images/intfac/image_cancel_down.png
new file mode 100644
index 0000000..16e107b
Binary files /dev/null and b/data/base/images/intfac/image_cancel_down.png differ
diff --git a/data/base/images/intfac/image_cancel_hilight.png b/data/base/images/intfac/image_cancel_hilight.png
new file mode 100644
index 0000000..5bd4ddf
Binary files /dev/null and b/data/base/images/intfac/image_cancel_hilight.png differ
diff --git a/data/base/images/intfac/image_cancel_up.png b/data/base/images/intfac/image_cancel_up.png
new file mode 100644
index 0000000..16e107b
Binary files /dev/null and b/data/base/images/intfac/image_cancel_up.png differ
diff --git a/data/base/images/intfac/image_cannon.png b/data/base/images/intfac/image_cannon.png
new file mode 100644
index 0000000..8071b74
Binary files /dev/null and b/data/base/images/intfac/image_cannon.png differ
diff --git a/data/base/images/intfac/image_cdchange_cancel.png b/data/base/images/intfac/image_cdchange_cancel.png
new file mode 100644
index 0000000..849a946
Binary files /dev/null and b/data/base/images/intfac/image_cdchange_cancel.png differ
diff --git a/data/base/images/intfac/image_cdchange_ok.png b/data/base/images/intfac/image_cdchange_ok.png
new file mode 100644
index 0000000..4729800
Binary files /dev/null and b/data/base/images/intfac/image_cdchange_ok.png differ
diff --git a/data/base/images/intfac/image_cdp_down.png b/data/base/images/intfac/image_cdp_down.png
new file mode 100644
index 0000000..45cd7a9
Binary files /dev/null and b/data/base/images/intfac/image_cdp_down.png differ
diff --git a/data/base/images/intfac/image_cdp_hi.png b/data/base/images/intfac/image_cdp_hi.png
new file mode 100644
index 0000000..5e216eb
Binary files /dev/null and b/data/base/images/intfac/image_cdp_hi.png differ
diff --git a/data/base/images/intfac/image_cdp_up.png b/data/base/images/intfac/image_cdp_up.png
new file mode 100644
index 0000000..51bcc98
Binary files /dev/null and b/data/base/images/intfac/image_cdp_up.png differ
diff --git a/data/base/images/intfac/image_close.png b/data/base/images/intfac/image_close.png
new file mode 100644
index 0000000..6e79889
Binary files /dev/null and b/data/base/images/intfac/image_close.png differ
diff --git a/data/base/images/intfac/image_closedown.png b/data/base/images/intfac/image_closedown.png
new file mode 100644
index 0000000..a4e3111
Binary files /dev/null and b/data/base/images/intfac/image_closedown.png differ
diff --git a/data/base/images/intfac/image_closehilight.png b/data/base/images/intfac/image_closehilight.png
new file mode 100644
index 0000000..20d3310
Binary files /dev/null and b/data/base/images/intfac/image_closehilight.png differ
diff --git a/data/base/images/intfac/image_cmddroid_exp.png b/data/base/images/intfac/image_cmddroid_exp.png
new file mode 100644
index 0000000..465ef44
Binary files /dev/null and b/data/base/images/intfac/image_cmddroid_exp.png differ
diff --git a/data/base/images/intfac/image_commanddroid_down.png b/data/base/images/intfac/image_commanddroid_down.png
new file mode 100644
index 0000000..2112612
Binary files /dev/null and b/data/base/images/intfac/image_commanddroid_down.png differ
diff --git a/data/base/images/intfac/image_commanddroid_up.png b/data/base/images/intfac/image_commanddroid_up.png
new file mode 100644
index 0000000..b33148f
Binary files /dev/null and b/data/base/images/intfac/image_commanddroid_up.png differ
diff --git a/data/base/images/intfac/image_cursor_attach.png b/data/base/images/intfac/image_cursor_attach.png
new file mode 100644
index 0000000..3591150
Binary files /dev/null and b/data/base/images/intfac/image_cursor_attach.png differ
diff --git a/data/base/images/intfac/image_cursor_attack.png b/data/base/images/intfac/image_cursor_attack.png
new file mode 100644
index 0000000..e2680ed
Binary files /dev/null and b/data/base/images/intfac/image_cursor_attack.png differ
diff --git a/data/base/images/intfac/image_cursor_bomb.png b/data/base/images/intfac/image_cursor_bomb.png
new file mode 100644
index 0000000..24cc45d
Binary files /dev/null and b/data/base/images/intfac/image_cursor_bomb.png differ
diff --git a/data/base/images/intfac/image_cursor_bridge.png b/data/base/images/intfac/image_cursor_bridge.png
new file mode 100644
index 0000000..9b965f6
Binary files /dev/null and b/data/base/images/intfac/image_cursor_bridge.png differ
diff --git a/data/base/images/intfac/image_cursor_build.png b/data/base/images/intfac/image_cursor_build.png
new file mode 100644
index 0000000..f690c34
Binary files /dev/null and b/data/base/images/intfac/image_cursor_build.png differ
diff --git a/data/base/images/intfac/image_cursor_default.png b/data/base/images/intfac/image_cursor_default.png
new file mode 100644
index 0000000..f391404
Binary files /dev/null and b/data/base/images/intfac/image_cursor_default.png differ
diff --git a/data/base/images/intfac/image_cursor_dest.png b/data/base/images/intfac/image_cursor_dest.png
new file mode 100644
index 0000000..45d7b7c
Binary files /dev/null and b/data/base/images/intfac/image_cursor_dest.png differ
diff --git a/data/base/images/intfac/image_cursor_disembark.png b/data/base/images/intfac/image_cursor_disembark.png
new file mode 100644
index 0000000..6967e58
Binary files /dev/null and b/data/base/images/intfac/image_cursor_disembark.png differ
diff --git a/data/base/images/intfac/image_cursor_ecm.png b/data/base/images/intfac/image_cursor_ecm.png
new file mode 100644
index 0000000..59fcb3d
Binary files /dev/null and b/data/base/images/intfac/image_cursor_ecm.png differ
diff --git a/data/base/images/intfac/image_cursor_embark.png b/data/base/images/intfac/image_cursor_embark.png
new file mode 100644
index 0000000..fe9212c
Binary files /dev/null and b/data/base/images/intfac/image_cursor_embark.png differ
diff --git a/data/base/images/intfac/image_cursor_fix.png b/data/base/images/intfac/image_cursor_fix.png
new file mode 100644
index 0000000..a7379a1
Binary files /dev/null and b/data/base/images/intfac/image_cursor_fix.png differ
diff --git a/data/base/images/intfac/image_cursor_guard.png b/data/base/images/intfac/image_cursor_guard.png
new file mode 100644
index 0000000..4579114
Binary files /dev/null and b/data/base/images/intfac/image_cursor_guard.png differ
diff --git a/data/base/images/intfac/image_cursor_lockon.png b/data/base/images/intfac/image_cursor_lockon.png
new file mode 100644
index 0000000..3210d62
Binary files /dev/null and b/data/base/images/intfac/image_cursor_lockon.png differ
diff --git a/data/base/images/intfac/image_cursor_move.png b/data/base/images/intfac/image_cursor_move.png
new file mode 100644
index 0000000..3fae499
Binary files /dev/null and b/data/base/images/intfac/image_cursor_move.png differ
diff --git a/data/base/images/intfac/image_cursor_notpos.png b/data/base/images/intfac/image_cursor_notpos.png
new file mode 100644
index 0000000..58b9493
Binary files /dev/null and b/data/base/images/intfac/image_cursor_notpos.png differ
diff --git a/data/base/images/intfac/image_cursor_pickup.png b/data/base/images/intfac/image_cursor_pickup.png
new file mode 100644
index 0000000..acf2df3
Binary files /dev/null and b/data/base/images/intfac/image_cursor_pickup.png differ
diff --git a/data/base/images/intfac/image_cursor_repair.png b/data/base/images/intfac/image_cursor_repair.png
new file mode 100644
index 0000000..daf4b04
Binary files /dev/null and b/data/base/images/intfac/image_cursor_repair.png differ
diff --git a/data/base/images/intfac/image_cursor_scout.png b/data/base/images/intfac/image_cursor_scout.png
new file mode 100644
index 0000000..7606d9a
Binary files /dev/null and b/data/base/images/intfac/image_cursor_scout.png differ
diff --git a/data/base/images/intfac/image_cursor_select.png b/data/base/images/intfac/image_cursor_select.png
new file mode 100644
index 0000000..34302b4
Binary files /dev/null and b/data/base/images/intfac/image_cursor_select.png differ
diff --git a/data/base/images/intfac/image_des_armour_explosive.png b/data/base/images/intfac/image_des_armour_explosive.png
new file mode 100644
index 0000000..b3d9748
Binary files /dev/null and b/data/base/images/intfac/image_des_armour_explosive.png differ
diff --git a/data/base/images/intfac/image_des_armour_kinetic.png b/data/base/images/intfac/image_des_armour_kinetic.png
new file mode 100644
index 0000000..4103be6
Binary files /dev/null and b/data/base/images/intfac/image_des_armour_kinetic.png differ
diff --git a/data/base/images/intfac/image_des_back.png b/data/base/images/intfac/image_des_back.png
new file mode 100644
index 0000000..1947166
Binary files /dev/null and b/data/base/images/intfac/image_des_back.png differ
diff --git a/data/base/images/intfac/image_des_barback.png b/data/base/images/intfac/image_des_barback.png
new file mode 100644
index 0000000..80a5854
Binary files /dev/null and b/data/base/images/intfac/image_des_barback.png differ
diff --git a/data/base/images/intfac/image_des_barblue.png b/data/base/images/intfac/image_des_barblue.png
new file mode 100644
index 0000000..d6ca842
Binary files /dev/null and b/data/base/images/intfac/image_des_barblue.png differ
diff --git a/data/base/images/intfac/image_des_barred.png b/data/base/images/intfac/image_des_barred.png
new file mode 100644
index 0000000..855bb6a
Binary files /dev/null and b/data/base/images/intfac/image_des_barred.png differ
diff --git a/data/base/images/intfac/image_des_baryellow.png b/data/base/images/intfac/image_des_baryellow.png
new file mode 100644
index 0000000..6f9ddb5
Binary files /dev/null and b/data/base/images/intfac/image_des_baryellow.png differ
diff --git a/data/base/images/intfac/image_des_bin.png b/data/base/images/intfac/image_des_bin.png
new file mode 100644
index 0000000..4da29f5
Binary files /dev/null and b/data/base/images/intfac/image_des_bin.png differ
diff --git a/data/base/images/intfac/image_des_binh.png b/data/base/images/intfac/image_des_binh.png
new file mode 100644
index 0000000..f7af04d
Binary files /dev/null and b/data/base/images/intfac/image_des_binh.png differ
diff --git a/data/base/images/intfac/image_des_body.png b/data/base/images/intfac/image_des_body.png
new file mode 100644
index 0000000..f5fc92b
Binary files /dev/null and b/data/base/images/intfac/image_des_body.png differ
diff --git a/data/base/images/intfac/image_des_bodyh.png b/data/base/images/intfac/image_des_bodyh.png
new file mode 100644
index 0000000..3268c2b
Binary files /dev/null and b/data/base/images/intfac/image_des_bodyh.png differ
diff --git a/data/base/images/intfac/image_des_bodypoints.png b/data/base/images/intfac/image_des_bodypoints.png
new file mode 100644
index 0000000..f75508f
Binary files /dev/null and b/data/base/images/intfac/image_des_bodypoints.png differ
diff --git a/data/base/images/intfac/image_des_buildrate.png b/data/base/images/intfac/image_des_buildrate.png
new file mode 100644
index 0000000..13df68f
Binary files /dev/null and b/data/base/images/intfac/image_des_buildrate.png differ
diff --git a/data/base/images/intfac/image_des_command.png b/data/base/images/intfac/image_des_command.png
new file mode 100644
index 0000000..b1432b4
Binary files /dev/null and b/data/base/images/intfac/image_des_command.png differ
diff --git a/data/base/images/intfac/image_des_commanddown.png b/data/base/images/intfac/image_des_commanddown.png
new file mode 100644
index 0000000..f19abf6
Binary files /dev/null and b/data/base/images/intfac/image_des_commanddown.png differ
diff --git a/data/base/images/intfac/image_des_crosscountry.png b/data/base/images/intfac/image_des_crosscountry.png
new file mode 100644
index 0000000..f79793c
Binary files /dev/null and b/data/base/images/intfac/image_des_crosscountry.png differ
diff --git a/data/base/images/intfac/image_des_damage.png b/data/base/images/intfac/image_des_damage.png
new file mode 100644
index 0000000..f5b5b99
Binary files /dev/null and b/data/base/images/intfac/image_des_damage.png differ
diff --git a/data/base/images/intfac/image_des_delete.png b/data/base/images/intfac/image_des_delete.png
new file mode 100644
index 0000000..7cc5f74
Binary files /dev/null and b/data/base/images/intfac/image_des_delete.png differ
diff --git a/data/base/images/intfac/image_des_deleteh.png b/data/base/images/intfac/image_des_deleteh.png
new file mode 100644
index 0000000..b7710e8
Binary files /dev/null and b/data/base/images/intfac/image_des_deleteh.png differ
diff --git a/data/base/images/intfac/image_des_editboxleft.png b/data/base/images/intfac/image_des_editboxleft.png
new file mode 100644
index 0000000..795fb89
Binary files /dev/null and b/data/base/images/intfac/image_des_editboxleft.png differ
diff --git a/data/base/images/intfac/image_des_editboxlefth.png b/data/base/images/intfac/image_des_editboxlefth.png
new file mode 100644
index 0000000..040d946
Binary files /dev/null and b/data/base/images/intfac/image_des_editboxlefth.png differ
diff --git a/data/base/images/intfac/image_des_editboxmid.png b/data/base/images/intfac/image_des_editboxmid.png
new file mode 100644
index 0000000..0d97cba
Binary files /dev/null and b/data/base/images/intfac/image_des_editboxmid.png differ
diff --git a/data/base/images/intfac/image_des_editboxmidh.png b/data/base/images/intfac/image_des_editboxmidh.png
new file mode 100644
index 0000000..73c3a8f
Binary files /dev/null and b/data/base/images/intfac/image_des_editboxmidh.png differ
diff --git a/data/base/images/intfac/image_des_editboxright.png b/data/base/images/intfac/image_des_editboxright.png
new file mode 100644
index 0000000..4d9f971
Binary files /dev/null and b/data/base/images/intfac/image_des_editboxright.png differ
diff --git a/data/base/images/intfac/image_des_editboxrighth.png b/data/base/images/intfac/image_des_editboxrighth.png
new file mode 100644
index 0000000..7b945d1
Binary files /dev/null and b/data/base/images/intfac/image_des_editboxrighth.png differ
diff --git a/data/base/images/intfac/image_des_extrahi.png b/data/base/images/intfac/image_des_extrahi.png
new file mode 100644
index 0000000..592a382
Binary files /dev/null and b/data/base/images/intfac/image_des_extrahi.png differ
diff --git a/data/base/images/intfac/image_des_firerate.png b/data/base/images/intfac/image_des_firerate.png
new file mode 100644
index 0000000..419f8d3
Binary files /dev/null and b/data/base/images/intfac/image_des_firerate.png differ
diff --git a/data/base/images/intfac/image_des_hilight.png b/data/base/images/intfac/image_des_hilight.png
new file mode 100644
index 0000000..07222e6
Binary files /dev/null and b/data/base/images/intfac/image_des_hilight.png differ
diff --git a/data/base/images/intfac/image_des_hover.png b/data/base/images/intfac/image_des_hover.png
new file mode 100644
index 0000000..f4882df
Binary files /dev/null and b/data/base/images/intfac/image_des_hover.png differ
diff --git a/data/base/images/intfac/image_des_power.png b/data/base/images/intfac/image_des_power.png
new file mode 100644
index 0000000..54c82b0
Binary files /dev/null and b/data/base/images/intfac/image_des_power.png differ
diff --git a/data/base/images/intfac/image_des_powerback.png b/data/base/images/intfac/image_des_powerback.png
new file mode 100644
index 0000000..b0742c8
Binary files /dev/null and b/data/base/images/intfac/image_des_powerback.png differ
diff --git a/data/base/images/intfac/image_des_powerbar_left.png b/data/base/images/intfac/image_des_powerbar_left.png
new file mode 100644
index 0000000..69ea223
Binary files /dev/null and b/data/base/images/intfac/image_des_powerbar_left.png differ
diff --git a/data/base/images/intfac/image_des_powerbar_right.png b/data/base/images/intfac/image_des_powerbar_right.png
new file mode 100644
index 0000000..ac1c022
Binary files /dev/null and b/data/base/images/intfac/image_des_powerbar_right.png differ
diff --git a/data/base/images/intfac/image_des_powercurr.png b/data/base/images/intfac/image_des_powercurr.png
new file mode 100644
index 0000000..ff29d46
Binary files /dev/null and b/data/base/images/intfac/image_des_powercurr.png differ
diff --git a/data/base/images/intfac/image_des_propulsion.png b/data/base/images/intfac/image_des_propulsion.png
new file mode 100644
index 0000000..482dc98
Binary files /dev/null and b/data/base/images/intfac/image_des_propulsion.png differ
diff --git a/data/base/images/intfac/image_des_propulsionh.png b/data/base/images/intfac/image_des_propulsionh.png
new file mode 100644
index 0000000..fc7d41f
Binary files /dev/null and b/data/base/images/intfac/image_des_propulsionh.png differ
diff --git a/data/base/images/intfac/image_des_range.png b/data/base/images/intfac/image_des_range.png
new file mode 100644
index 0000000..25c6083
Binary files /dev/null and b/data/base/images/intfac/image_des_range.png differ
diff --git a/data/base/images/intfac/image_des_road.png b/data/base/images/intfac/image_des_road.png
new file mode 100644
index 0000000..d561b23
Binary files /dev/null and b/data/base/images/intfac/image_des_road.png differ
diff --git a/data/base/images/intfac/image_des_save.png b/data/base/images/intfac/image_des_save.png
new file mode 100644
index 0000000..fb8605c
Binary files /dev/null and b/data/base/images/intfac/image_des_save.png differ
diff --git a/data/base/images/intfac/image_des_saveh.png b/data/base/images/intfac/image_des_saveh.png
new file mode 100644
index 0000000..015ccab
Binary files /dev/null and b/data/base/images/intfac/image_des_saveh.png differ
diff --git a/data/base/images/intfac/image_des_statbackleft.png b/data/base/images/intfac/image_des_statbackleft.png
new file mode 100644
index 0000000..79131e5
Binary files /dev/null and b/data/base/images/intfac/image_des_statbackleft.png differ
diff --git a/data/base/images/intfac/image_des_statbackmid.png b/data/base/images/intfac/image_des_statbackmid.png
new file mode 100644
index 0000000..c5adfe1
Binary files /dev/null and b/data/base/images/intfac/image_des_statbackmid.png differ
diff --git a/data/base/images/intfac/image_des_statbackright.png b/data/base/images/intfac/image_des_statbackright.png
new file mode 100644
index 0000000..c19314f
Binary files /dev/null and b/data/base/images/intfac/image_des_statbackright.png differ
diff --git a/data/base/images/intfac/image_des_statsback.png b/data/base/images/intfac/image_des_statsback.png
new file mode 100644
index 0000000..ca0b667
Binary files /dev/null and b/data/base/images/intfac/image_des_statsback.png differ
diff --git a/data/base/images/intfac/image_des_statscomp.png b/data/base/images/intfac/image_des_statscomp.png
new file mode 100644
index 0000000..b58db1b
Binary files /dev/null and b/data/base/images/intfac/image_des_statscomp.png differ
diff --git a/data/base/images/intfac/image_des_statscurr.png b/data/base/images/intfac/image_des_statscurr.png
new file mode 100644
index 0000000..2debd17
Binary files /dev/null and b/data/base/images/intfac/image_des_statscurr.png differ
diff --git a/data/base/images/intfac/image_des_systems.png b/data/base/images/intfac/image_des_systems.png
new file mode 100644
index 0000000..ebeacc8
Binary files /dev/null and b/data/base/images/intfac/image_des_systems.png differ
diff --git a/data/base/images/intfac/image_des_systemsdown.png b/data/base/images/intfac/image_des_systemsdown.png
new file mode 100644
index 0000000..4d1afe9
Binary files /dev/null and b/data/base/images/intfac/image_des_systemsdown.png differ
diff --git a/data/base/images/intfac/image_des_tabweapon.png b/data/base/images/intfac/image_des_tabweapon.png
new file mode 100644
index 0000000..487ce41
Binary files /dev/null and b/data/base/images/intfac/image_des_tabweapon.png differ
diff --git a/data/base/images/intfac/image_des_tabweapondown.png b/data/base/images/intfac/image_des_tabweapondown.png
new file mode 100644
index 0000000..b466a47
Binary files /dev/null and b/data/base/images/intfac/image_des_tabweapondown.png differ
diff --git a/data/base/images/intfac/image_des_turret.png b/data/base/images/intfac/image_des_turret.png
new file mode 100644
index 0000000..7802b56
Binary files /dev/null and b/data/base/images/intfac/image_des_turret.png differ
diff --git a/data/base/images/intfac/image_des_turreth.png b/data/base/images/intfac/image_des_turreth.png
new file mode 100644
index 0000000..24dc5bd
Binary files /dev/null and b/data/base/images/intfac/image_des_turreth.png differ
diff --git a/data/base/images/intfac/image_des_weapons.png b/data/base/images/intfac/image_des_weapons.png
new file mode 100644
index 0000000..7eda446
Binary files /dev/null and b/data/base/images/intfac/image_des_weapons.png differ
diff --git a/data/base/images/intfac/image_des_weaponsdown.png b/data/base/images/intfac/image_des_weaponsdown.png
new file mode 100644
index 0000000..ae8e879
Binary files /dev/null and b/data/base/images/intfac/image_des_weaponsdown.png differ
diff --git a/data/base/images/intfac/image_des_weight.png b/data/base/images/intfac/image_des_weight.png
new file mode 100644
index 0000000..65f45d7
Binary files /dev/null and b/data/base/images/intfac/image_des_weight.png differ
diff --git a/data/base/images/intfac/image_design_down.png b/data/base/images/intfac/image_design_down.png
new file mode 100644
index 0000000..fa321c6
Binary files /dev/null and b/data/base/images/intfac/image_design_down.png differ
diff --git a/data/base/images/intfac/image_design_up.png b/data/base/images/intfac/image_design_up.png
new file mode 100644
index 0000000..2f14c72
Binary files /dev/null and b/data/base/images/intfac/image_design_up.png differ
diff --git a/data/base/images/intfac/image_desync_hi.png b/data/base/images/intfac/image_desync_hi.png
new file mode 100644
index 0000000..cf8f434
Binary files /dev/null and b/data/base/images/intfac/image_desync_hi.png differ
diff --git a/data/base/images/intfac/image_desync_lo.png b/data/base/images/intfac/image_desync_lo.png
new file mode 100644
index 0000000..9c41fa1
Binary files /dev/null and b/data/base/images/intfac/image_desync_lo.png differ
diff --git a/data/base/images/intfac/image_disconnect_hi.png b/data/base/images/intfac/image_disconnect_hi.png
new file mode 100644
index 0000000..e269865
Binary files /dev/null and b/data/base/images/intfac/image_disconnect_hi.png differ
diff --git a/data/base/images/intfac/image_disconnect_lo.png b/data/base/images/intfac/image_disconnect_lo.png
new file mode 100644
index 0000000..3b9b363
Binary files /dev/null and b/data/base/images/intfac/image_disconnect_lo.png differ
diff --git a/data/base/images/intfac/image_ecm.png b/data/base/images/intfac/image_ecm.png
new file mode 100644
index 0000000..884dbbe
Binary files /dev/null and b/data/base/images/intfac/image_ecm.png differ
diff --git a/data/base/images/intfac/image_edit_build_down.png b/data/base/images/intfac/image_edit_build_down.png
new file mode 100644
index 0000000..d032f97
Binary files /dev/null and b/data/base/images/intfac/image_edit_build_down.png differ
diff --git a/data/base/images/intfac/image_edit_build_up.png b/data/base/images/intfac/image_edit_build_up.png
new file mode 100644
index 0000000..bc53b4a
Binary files /dev/null and b/data/base/images/intfac/image_edit_build_up.png differ
diff --git a/data/base/images/intfac/image_edit_design_down.png b/data/base/images/intfac/image_edit_design_down.png
new file mode 100644
index 0000000..35541a1
Binary files /dev/null and b/data/base/images/intfac/image_edit_design_down.png differ
diff --git a/data/base/images/intfac/image_edit_design_up.png b/data/base/images/intfac/image_edit_design_up.png
new file mode 100644
index 0000000..a1ab711
Binary files /dev/null and b/data/base/images/intfac/image_edit_design_up.png differ
diff --git a/data/base/images/intfac/image_edit_manufacture_down.png b/data/base/images/intfac/image_edit_manufacture_down.png
new file mode 100644
index 0000000..db2a477
Binary files /dev/null and b/data/base/images/intfac/image_edit_manufacture_down.png differ
diff --git a/data/base/images/intfac/image_edit_manufacture_up.png b/data/base/images/intfac/image_edit_manufacture_up.png
new file mode 100644
index 0000000..a13bcdc
Binary files /dev/null and b/data/base/images/intfac/image_edit_manufacture_up.png differ
diff --git a/data/base/images/intfac/image_edit_options_down.png b/data/base/images/intfac/image_edit_options_down.png
new file mode 100644
index 0000000..f61abb9
Binary files /dev/null and b/data/base/images/intfac/image_edit_options_down.png differ
diff --git a/data/base/images/intfac/image_edit_options_up.png b/data/base/images/intfac/image_edit_options_up.png
new file mode 100644
index 0000000..9bb23ba
Binary files /dev/null and b/data/base/images/intfac/image_edit_options_up.png differ
diff --git a/data/base/images/intfac/image_edit_research_down.png b/data/base/images/intfac/image_edit_research_down.png
new file mode 100644
index 0000000..62cd7b9
Binary files /dev/null and b/data/base/images/intfac/image_edit_research_down.png differ
diff --git a/data/base/images/intfac/image_edit_research_up.png b/data/base/images/intfac/image_edit_research_up.png
new file mode 100644
index 0000000..df84e8e
Binary files /dev/null and b/data/base/images/intfac/image_edit_research_up.png differ
diff --git a/data/base/images/intfac/image_edit_tiles_down.png b/data/base/images/intfac/image_edit_tiles_down.png
new file mode 100644
index 0000000..ba4b007
Binary files /dev/null and b/data/base/images/intfac/image_edit_tiles_down.png differ
diff --git a/data/base/images/intfac/image_edit_tiles_up.png b/data/base/images/intfac/image_edit_tiles_up.png
new file mode 100644
index 0000000..c301aad
Binary files /dev/null and b/data/base/images/intfac/image_edit_tiles_up.png differ
diff --git a/data/base/images/intfac/image_fdp_down.png b/data/base/images/intfac/image_fdp_down.png
new file mode 100644
index 0000000..d873b6d
Binary files /dev/null and b/data/base/images/intfac/image_fdp_down.png differ
diff --git a/data/base/images/intfac/image_fdp_hi.png b/data/base/images/intfac/image_fdp_hi.png
new file mode 100644
index 0000000..e02c1b2
Binary files /dev/null and b/data/base/images/intfac/image_fdp_hi.png differ
diff --git a/data/base/images/intfac/image_fdp_up.png b/data/base/images/intfac/image_fdp_up.png
new file mode 100644
index 0000000..e327ad3
Binary files /dev/null and b/data/base/images/intfac/image_fdp_up.png differ
diff --git a/data/base/images/intfac/image_frame_c0.png b/data/base/images/intfac/image_frame_c0.png
new file mode 100644
index 0000000..0dc93fd
Binary files /dev/null and b/data/base/images/intfac/image_frame_c0.png differ
diff --git a/data/base/images/intfac/image_frame_c1.png b/data/base/images/intfac/image_frame_c1.png
new file mode 100644
index 0000000..8bca8f4
Binary files /dev/null and b/data/base/images/intfac/image_frame_c1.png differ
diff --git a/data/base/images/intfac/image_frame_c2.png b/data/base/images/intfac/image_frame_c2.png
new file mode 100644
index 0000000..b9e2144
Binary files /dev/null and b/data/base/images/intfac/image_frame_c2.png differ
diff --git a/data/base/images/intfac/image_frame_c3.png b/data/base/images/intfac/image_frame_c3.png
new file mode 100644
index 0000000..dc57ebf
Binary files /dev/null and b/data/base/images/intfac/image_frame_c3.png differ
diff --git a/data/base/images/intfac/image_frame_hb.png b/data/base/images/intfac/image_frame_hb.png
new file mode 100644
index 0000000..cd13d18
Binary files /dev/null and b/data/base/images/intfac/image_frame_hb.png differ
diff --git a/data/base/images/intfac/image_frame_hb2.png b/data/base/images/intfac/image_frame_hb2.png
new file mode 100644
index 0000000..bf7e49c
Binary files /dev/null and b/data/base/images/intfac/image_frame_hb2.png differ
diff --git a/data/base/images/intfac/image_frame_hbh.png b/data/base/images/intfac/image_frame_hbh.png
new file mode 100644
index 0000000..be6b74b
Binary files /dev/null and b/data/base/images/intfac/image_frame_hbh.png differ
diff --git a/data/base/images/intfac/image_frame_hc0.png b/data/base/images/intfac/image_frame_hc0.png
new file mode 100644
index 0000000..ea7a142
Binary files /dev/null and b/data/base/images/intfac/image_frame_hc0.png differ
diff --git a/data/base/images/intfac/image_frame_hc1.png b/data/base/images/intfac/image_frame_hc1.png
new file mode 100644
index 0000000..4775e2b
Binary files /dev/null and b/data/base/images/intfac/image_frame_hc1.png differ
diff --git a/data/base/images/intfac/image_frame_hc2.png b/data/base/images/intfac/image_frame_hc2.png
new file mode 100644
index 0000000..2146a39
Binary files /dev/null and b/data/base/images/intfac/image_frame_hc2.png differ
diff --git a/data/base/images/intfac/image_frame_hc3.png b/data/base/images/intfac/image_frame_hc3.png
new file mode 100644
index 0000000..b06de6c
Binary files /dev/null and b/data/base/images/intfac/image_frame_hc3.png differ
diff --git a/data/base/images/intfac/image_frame_ht.png b/data/base/images/intfac/image_frame_ht.png
new file mode 100644
index 0000000..cd13d18
Binary files /dev/null and b/data/base/images/intfac/image_frame_ht.png differ
diff --git a/data/base/images/intfac/image_frame_ht2.png b/data/base/images/intfac/image_frame_ht2.png
new file mode 100644
index 0000000..4ce446b
Binary files /dev/null and b/data/base/images/intfac/image_frame_ht2.png differ
diff --git a/data/base/images/intfac/image_frame_hth.png b/data/base/images/intfac/image_frame_hth.png
new file mode 100644
index 0000000..50252b8
Binary files /dev/null and b/data/base/images/intfac/image_frame_hth.png differ
diff --git a/data/base/images/intfac/image_frame_vc0.png b/data/base/images/intfac/image_frame_vc0.png
new file mode 100644
index 0000000..c4c9576
Binary files /dev/null and b/data/base/images/intfac/image_frame_vc0.png differ
diff --git a/data/base/images/intfac/image_frame_vc1.png b/data/base/images/intfac/image_frame_vc1.png
new file mode 100644
index 0000000..6b6446c
Binary files /dev/null and b/data/base/images/intfac/image_frame_vc1.png differ
diff --git a/data/base/images/intfac/image_frame_vc2.png b/data/base/images/intfac/image_frame_vc2.png
new file mode 100644
index 0000000..4db4e80
Binary files /dev/null and b/data/base/images/intfac/image_frame_vc2.png differ
diff --git a/data/base/images/intfac/image_frame_vc3.png b/data/base/images/intfac/image_frame_vc3.png
new file mode 100644
index 0000000..67fd312
Binary files /dev/null and b/data/base/images/intfac/image_frame_vc3.png differ
diff --git a/data/base/images/intfac/image_frame_vl.png b/data/base/images/intfac/image_frame_vl.png
new file mode 100644
index 0000000..c3314f6
Binary files /dev/null and b/data/base/images/intfac/image_frame_vl.png differ
diff --git a/data/base/images/intfac/image_frame_vl2.png b/data/base/images/intfac/image_frame_vl2.png
new file mode 100644
index 0000000..617f3fb
Binary files /dev/null and b/data/base/images/intfac/image_frame_vl2.png differ
diff --git a/data/base/images/intfac/image_frame_vlh.png b/data/base/images/intfac/image_frame_vlh.png
new file mode 100644
index 0000000..c4c047d
Binary files /dev/null and b/data/base/images/intfac/image_frame_vlh.png differ
diff --git a/data/base/images/intfac/image_frame_vr.png b/data/base/images/intfac/image_frame_vr.png
new file mode 100644
index 0000000..c3314f6
Binary files /dev/null and b/data/base/images/intfac/image_frame_vr.png differ
diff --git a/data/base/images/intfac/image_frame_vr2.png b/data/base/images/intfac/image_frame_vr2.png
new file mode 100644
index 0000000..d9a2c68
Binary files /dev/null and b/data/base/images/intfac/image_frame_vr2.png differ
diff --git a/data/base/images/intfac/image_frame_vrh.png b/data/base/images/intfac/image_frame_vrh.png
new file mode 100644
index 0000000..89543b4
Binary files /dev/null and b/data/base/images/intfac/image_frame_vrh.png differ
diff --git a/data/base/images/intfac/image_generic_tank.png b/data/base/images/intfac/image_generic_tank.png
new file mode 100644
index 0000000..90ab362
Binary files /dev/null and b/data/base/images/intfac/image_generic_tank.png differ
diff --git a/data/base/images/intfac/image_generic_tank_tc.png b/data/base/images/intfac/image_generic_tank_tc.png
new file mode 100644
index 0000000..1c32375
Binary files /dev/null and b/data/base/images/intfac/image_generic_tank_tc.png differ
diff --git a/data/base/images/intfac/image_gn_0.png b/data/base/images/intfac/image_gn_0.png
new file mode 100644
index 0000000..663b4f8
Binary files /dev/null and b/data/base/images/intfac/image_gn_0.png differ
diff --git a/data/base/images/intfac/image_gn_1.png b/data/base/images/intfac/image_gn_1.png
new file mode 100644
index 0000000..d2537b4
Binary files /dev/null and b/data/base/images/intfac/image_gn_1.png differ
diff --git a/data/base/images/intfac/image_gn_10.png b/data/base/images/intfac/image_gn_10.png
new file mode 100644
index 0000000..1e4f9ba
Binary files /dev/null and b/data/base/images/intfac/image_gn_10.png differ
diff --git a/data/base/images/intfac/image_gn_11.png b/data/base/images/intfac/image_gn_11.png
new file mode 100644
index 0000000..d4bae2c
Binary files /dev/null and b/data/base/images/intfac/image_gn_11.png differ
diff --git a/data/base/images/intfac/image_gn_12.png b/data/base/images/intfac/image_gn_12.png
new file mode 100644
index 0000000..cc433cf
Binary files /dev/null and b/data/base/images/intfac/image_gn_12.png differ
diff --git a/data/base/images/intfac/image_gn_13.png b/data/base/images/intfac/image_gn_13.png
new file mode 100644
index 0000000..31c6926
Binary files /dev/null and b/data/base/images/intfac/image_gn_13.png differ
diff --git a/data/base/images/intfac/image_gn_14.png b/data/base/images/intfac/image_gn_14.png
new file mode 100644
index 0000000..759a55a
Binary files /dev/null and b/data/base/images/intfac/image_gn_14.png differ
diff --git a/data/base/images/intfac/image_gn_15.png b/data/base/images/intfac/image_gn_15.png
new file mode 100644
index 0000000..67bcf1b
Binary files /dev/null and b/data/base/images/intfac/image_gn_15.png differ
diff --git a/data/base/images/intfac/image_gn_2.png b/data/base/images/intfac/image_gn_2.png
new file mode 100644
index 0000000..38c9c79
Binary files /dev/null and b/data/base/images/intfac/image_gn_2.png differ
diff --git a/data/base/images/intfac/image_gn_3.png b/data/base/images/intfac/image_gn_3.png
new file mode 100644
index 0000000..0801e6a
Binary files /dev/null and b/data/base/images/intfac/image_gn_3.png differ
diff --git a/data/base/images/intfac/image_gn_4.png b/data/base/images/intfac/image_gn_4.png
new file mode 100644
index 0000000..f019d7c
Binary files /dev/null and b/data/base/images/intfac/image_gn_4.png differ
diff --git a/data/base/images/intfac/image_gn_5.png b/data/base/images/intfac/image_gn_5.png
new file mode 100644
index 0000000..8a73c33
Binary files /dev/null and b/data/base/images/intfac/image_gn_5.png differ
diff --git a/data/base/images/intfac/image_gn_6.png b/data/base/images/intfac/image_gn_6.png
new file mode 100644
index 0000000..58f51dd
Binary files /dev/null and b/data/base/images/intfac/image_gn_6.png differ
diff --git a/data/base/images/intfac/image_gn_7.png b/data/base/images/intfac/image_gn_7.png
new file mode 100644
index 0000000..c39530b
Binary files /dev/null and b/data/base/images/intfac/image_gn_7.png differ
diff --git a/data/base/images/intfac/image_gn_8.png b/data/base/images/intfac/image_gn_8.png
new file mode 100644
index 0000000..8e4e95b
Binary files /dev/null and b/data/base/images/intfac/image_gn_8.png differ
diff --git a/data/base/images/intfac/image_gn_9.png b/data/base/images/intfac/image_gn_9.png
new file mode 100644
index 0000000..1cfbea3
Binary files /dev/null and b/data/base/images/intfac/image_gn_9.png differ
diff --git a/data/base/images/intfac/image_gn_star.png b/data/base/images/intfac/image_gn_star.png
new file mode 100644
index 0000000..a20fb2b
Binary files /dev/null and b/data/base/images/intfac/image_gn_star.png differ
diff --git a/data/base/images/intfac/image_hovercraft.png b/data/base/images/intfac/image_hovercraft.png
new file mode 100644
index 0000000..4e43351
Binary files /dev/null and b/data/base/images/intfac/image_hovercraft.png differ
diff --git a/data/base/images/intfac/image_infinite_down.png b/data/base/images/intfac/image_infinite_down.png
new file mode 100644
index 0000000..b0e0d9b
Binary files /dev/null and b/data/base/images/intfac/image_infinite_down.png differ
diff --git a/data/base/images/intfac/image_infinite_hi.png b/data/base/images/intfac/image_infinite_hi.png
new file mode 100644
index 0000000..163a41e
Binary files /dev/null and b/data/base/images/intfac/image_infinite_hi.png differ
diff --git a/data/base/images/intfac/image_infinite_up.png b/data/base/images/intfac/image_infinite_up.png
new file mode 100644
index 0000000..f83d302
Binary files /dev/null and b/data/base/images/intfac/image_infinite_up.png differ
diff --git a/data/base/images/intfac/image_intel_campaign.png b/data/base/images/intfac/image_intel_campaign.png
new file mode 100644
index 0000000..5f793f5
Binary files /dev/null and b/data/base/images/intfac/image_intel_campaign.png differ
diff --git a/data/base/images/intfac/image_intel_campaigndown.png b/data/base/images/intfac/image_intel_campaigndown.png
new file mode 100644
index 0000000..e5b03a6
Binary files /dev/null and b/data/base/images/intfac/image_intel_campaigndown.png differ
diff --git a/data/base/images/intfac/image_intel_mission.png b/data/base/images/intfac/image_intel_mission.png
new file mode 100644
index 0000000..b8b14aa
Binary files /dev/null and b/data/base/images/intfac/image_intel_mission.png differ
diff --git a/data/base/images/intfac/image_intel_missiondown.png b/data/base/images/intfac/image_intel_missiondown.png
new file mode 100644
index 0000000..a673617
Binary files /dev/null and b/data/base/images/intfac/image_intel_missiondown.png differ
diff --git a/data/base/images/intfac/image_intel_research.png b/data/base/images/intfac/image_intel_research.png
new file mode 100644
index 0000000..57cec84
Binary files /dev/null and b/data/base/images/intfac/image_intel_research.png differ
diff --git a/data/base/images/intfac/image_intel_researchdown.png b/data/base/images/intfac/image_intel_researchdown.png
new file mode 100644
index 0000000..41c6f56
Binary files /dev/null and b/data/base/images/intfac/image_intel_researchdown.png differ
diff --git a/data/base/images/intfac/image_intelmap_down.png b/data/base/images/intfac/image_intelmap_down.png
new file mode 100644
index 0000000..70333b7
Binary files /dev/null and b/data/base/images/intfac/image_intelmap_down.png differ
diff --git a/data/base/images/intfac/image_intelmap_up.png b/data/base/images/intfac/image_intelmap_up.png
new file mode 100644
index 0000000..a13d9f6
Binary files /dev/null and b/data/base/images/intfac/image_intelmap_up.png differ
diff --git a/data/base/images/intfac/image_launchdown.png b/data/base/images/intfac/image_launchdown.png
new file mode 100644
index 0000000..2602940
Binary files /dev/null and b/data/base/images/intfac/image_launchdown.png differ
diff --git a/data/base/images/intfac/image_launchup.png b/data/base/images/intfac/image_launchup.png
new file mode 100644
index 0000000..cb90535
Binary files /dev/null and b/data/base/images/intfac/image_launchup.png differ
diff --git a/data/base/images/intfac/image_lev_0.png b/data/base/images/intfac/image_lev_0.png
new file mode 100644
index 0000000..ac37436
Binary files /dev/null and b/data/base/images/intfac/image_lev_0.png differ
diff --git a/data/base/images/intfac/image_lev_1.png b/data/base/images/intfac/image_lev_1.png
new file mode 100644
index 0000000..7d3433e
Binary files /dev/null and b/data/base/images/intfac/image_lev_1.png differ
diff --git a/data/base/images/intfac/image_lev_2.png b/data/base/images/intfac/image_lev_2.png
new file mode 100644
index 0000000..3edc288
Binary files /dev/null and b/data/base/images/intfac/image_lev_2.png differ
diff --git a/data/base/images/intfac/image_lev_3.png b/data/base/images/intfac/image_lev_3.png
new file mode 100644
index 0000000..5410961
Binary files /dev/null and b/data/base/images/intfac/image_lev_3.png differ
diff --git a/data/base/images/intfac/image_lev_4.png b/data/base/images/intfac/image_lev_4.png
new file mode 100644
index 0000000..67d6240
Binary files /dev/null and b/data/base/images/intfac/image_lev_4.png differ
diff --git a/data/base/images/intfac/image_lev_5.png b/data/base/images/intfac/image_lev_5.png
new file mode 100644
index 0000000..2e7e61e
Binary files /dev/null and b/data/base/images/intfac/image_lev_5.png differ
diff --git a/data/base/images/intfac/image_lev_6.png b/data/base/images/intfac/image_lev_6.png
new file mode 100644
index 0000000..4008e0a
Binary files /dev/null and b/data/base/images/intfac/image_lev_6.png differ
diff --git a/data/base/images/intfac/image_lev_7.png b/data/base/images/intfac/image_lev_7.png
new file mode 100644
index 0000000..a897216
Binary files /dev/null and b/data/base/images/intfac/image_lev_7.png differ
diff --git a/data/base/images/intfac/image_lfttab.png b/data/base/images/intfac/image_lfttab.png
new file mode 100644
index 0000000..7f11afc
Binary files /dev/null and b/data/base/images/intfac/image_lfttab.png differ
diff --git a/data/base/images/intfac/image_lfttabd.png b/data/base/images/intfac/image_lfttabd.png
new file mode 100644
index 0000000..574feff
Binary files /dev/null and b/data/base/images/intfac/image_lfttabd.png differ
diff --git a/data/base/images/intfac/image_lfttabh.png b/data/base/images/intfac/image_lfttabh.png
new file mode 100644
index 0000000..81ff5f0
Binary files /dev/null and b/data/base/images/intfac/image_lfttabh.png differ
diff --git a/data/base/images/intfac/image_loop_down.png b/data/base/images/intfac/image_loop_down.png
new file mode 100644
index 0000000..ba4fb95
Binary files /dev/null and b/data/base/images/intfac/image_loop_down.png differ
diff --git a/data/base/images/intfac/image_loop_hi.png b/data/base/images/intfac/image_loop_hi.png
new file mode 100644
index 0000000..5e4c048
Binary files /dev/null and b/data/base/images/intfac/image_loop_hi.png differ
diff --git a/data/base/images/intfac/image_loop_up.png b/data/base/images/intfac/image_loop_up.png
new file mode 100644
index 0000000..f2e3c71
Binary files /dev/null and b/data/base/images/intfac/image_loop_up.png differ
diff --git a/data/base/images/intfac/image_manufacture_down.png b/data/base/images/intfac/image_manufacture_down.png
new file mode 100644
index 0000000..5448414
Binary files /dev/null and b/data/base/images/intfac/image_manufacture_down.png differ
diff --git a/data/base/images/intfac/image_manufacture_up.png b/data/base/images/intfac/image_manufacture_up.png
new file mode 100644
index 0000000..fbe0846
Binary files /dev/null and b/data/base/images/intfac/image_manufacture_up.png differ
diff --git a/data/base/images/intfac/image_mission_clock.png b/data/base/images/intfac/image_mission_clock.png
new file mode 100644
index 0000000..6cd4ce2
Binary files /dev/null and b/data/base/images/intfac/image_mission_clock.png differ
diff --git a/data/base/images/intfac/image_mission_clock_up.png b/data/base/images/intfac/image_mission_clock_up.png
new file mode 100644
index 0000000..8ba54fd
Binary files /dev/null and b/data/base/images/intfac/image_mission_clock_up.png differ
diff --git a/data/base/images/intfac/image_multi_al.png b/data/base/images/intfac/image_multi_al.png
new file mode 100644
index 0000000..b3cad61
Binary files /dev/null and b/data/base/images/intfac/image_multi_al.png differ
diff --git a/data/base/images/intfac/image_multi_al_hi.png b/data/base/images/intfac/image_multi_al_hi.png
new file mode 100644
index 0000000..c328403
Binary files /dev/null and b/data/base/images/intfac/image_multi_al_hi.png differ
diff --git a/data/base/images/intfac/image_multi_chan.png b/data/base/images/intfac/image_multi_chan.png
new file mode 100644
index 0000000..51bd898
Binary files /dev/null and b/data/base/images/intfac/image_multi_chan.png differ
diff --git a/data/base/images/intfac/image_multi_dro.png b/data/base/images/intfac/image_multi_dro.png
new file mode 100644
index 0000000..034c966
Binary files /dev/null and b/data/base/images/intfac/image_multi_dro.png differ
diff --git a/data/base/images/intfac/image_multi_dro_hi.png b/data/base/images/intfac/image_multi_dro_hi.png
new file mode 100644
index 0000000..b7f93ef
Binary files /dev/null and b/data/base/images/intfac/image_multi_dro_hi.png differ
diff --git a/data/base/images/intfac/image_multi_noal.png b/data/base/images/intfac/image_multi_noal.png
new file mode 100644
index 0000000..01876e1
Binary files /dev/null and b/data/base/images/intfac/image_multi_noal.png differ
diff --git a/data/base/images/intfac/image_multi_noal_hi.png b/data/base/images/intfac/image_multi_noal_hi.png
new file mode 100644
index 0000000..f4510cb
Binary files /dev/null and b/data/base/images/intfac/image_multi_noal_hi.png differ
diff --git a/data/base/images/intfac/image_multi_nochan.png b/data/base/images/intfac/image_multi_nochan.png
new file mode 100644
index 0000000..f2ad002
Binary files /dev/null and b/data/base/images/intfac/image_multi_nochan.png differ
diff --git a/data/base/images/intfac/image_multi_offal.png b/data/base/images/intfac/image_multi_offal.png
new file mode 100644
index 0000000..000c4ae
Binary files /dev/null and b/data/base/images/intfac/image_multi_offal.png differ
diff --git a/data/base/images/intfac/image_multi_offal_hi.png b/data/base/images/intfac/image_multi_offal_hi.png
new file mode 100644
index 0000000..4062a23
Binary files /dev/null and b/data/base/images/intfac/image_multi_offal_hi.png differ
diff --git a/data/base/images/intfac/image_multi_pow.png b/data/base/images/intfac/image_multi_pow.png
new file mode 100644
index 0000000..dcc0814
Binary files /dev/null and b/data/base/images/intfac/image_multi_pow.png differ
diff --git a/data/base/images/intfac/image_multi_pow_hi.png b/data/base/images/intfac/image_multi_pow_hi.png
new file mode 100644
index 0000000..4c2e952
Binary files /dev/null and b/data/base/images/intfac/image_multi_pow_hi.png differ
diff --git a/data/base/images/intfac/image_multi_tek.png b/data/base/images/intfac/image_multi_tek.png
new file mode 100644
index 0000000..88c3072
Binary files /dev/null and b/data/base/images/intfac/image_multi_tek.png differ
diff --git a/data/base/images/intfac/image_multi_tek_hi.png b/data/base/images/intfac/image_multi_tek_hi.png
new file mode 100644
index 0000000..3fd6235
Binary files /dev/null and b/data/base/images/intfac/image_multi_tek_hi.png differ
diff --git a/data/base/images/intfac/image_multi_vis.png b/data/base/images/intfac/image_multi_vis.png
new file mode 100644
index 0000000..fdf20d7
Binary files /dev/null and b/data/base/images/intfac/image_multi_vis.png differ
diff --git a/data/base/images/intfac/image_multi_vis_hi.png b/data/base/images/intfac/image_multi_vis_hi.png
new file mode 100644
index 0000000..8ef1e12
Binary files /dev/null and b/data/base/images/intfac/image_multi_vis_hi.png differ
diff --git a/data/base/images/intfac/image_nadda.png b/data/base/images/intfac/image_nadda.png
new file mode 100644
index 0000000..e85795d
Binary files /dev/null and b/data/base/images/intfac/image_nadda.png differ
diff --git a/data/base/images/intfac/image_nruter.png b/data/base/images/intfac/image_nruter.png
new file mode 100644
index 0000000..fe70d07
Binary files /dev/null and b/data/base/images/intfac/image_nruter.png differ
diff --git a/data/base/images/intfac/image_ord_circledown.png b/data/base/images/intfac/image_ord_circledown.png
new file mode 100644
index 0000000..906aa58
Binary files /dev/null and b/data/base/images/intfac/image_ord_circledown.png differ
diff --git a/data/base/images/intfac/image_ord_circleup.png b/data/base/images/intfac/image_ord_circleup.png
new file mode 100644
index 0000000..3bb364a
Binary files /dev/null and b/data/base/images/intfac/image_ord_circleup.png differ
diff --git a/data/base/images/intfac/image_ord_destruct1down.png b/data/base/images/intfac/image_ord_destruct1down.png
new file mode 100644
index 0000000..6a5bead
Binary files /dev/null and b/data/base/images/intfac/image_ord_destruct1down.png differ
diff --git a/data/base/images/intfac/image_ord_destruct1up.png b/data/base/images/intfac/image_ord_destruct1up.png
new file mode 100644
index 0000000..df6ae25
Binary files /dev/null and b/data/base/images/intfac/image_ord_destruct1up.png differ
diff --git a/data/base/images/intfac/image_ord_destruct2down.png b/data/base/images/intfac/image_ord_destruct2down.png
new file mode 100644
index 0000000..62d36ce
Binary files /dev/null and b/data/base/images/intfac/image_ord_destruct2down.png differ
diff --git a/data/base/images/intfac/image_ord_destruct2grey.png b/data/base/images/intfac/image_ord_destruct2grey.png
new file mode 100644
index 0000000..26d5733
Binary files /dev/null and b/data/base/images/intfac/image_ord_destruct2grey.png differ
diff --git a/data/base/images/intfac/image_ord_destruct2up.png b/data/base/images/intfac/image_ord_destruct2up.png
new file mode 100644
index 0000000..2bf7c80
Binary files /dev/null and b/data/base/images/intfac/image_ord_destruct2up.png differ
diff --git a/data/base/images/intfac/image_ord_embarkdown.png b/data/base/images/intfac/image_ord_embarkdown.png
new file mode 100644
index 0000000..270a790
Binary files /dev/null and b/data/base/images/intfac/image_ord_embarkdown.png differ
diff --git a/data/base/images/intfac/image_ord_embarkup.png b/data/base/images/intfac/image_ord_embarkup.png
new file mode 100644
index 0000000..b130fd2
Binary files /dev/null and b/data/base/images/intfac/image_ord_embarkup.png differ
diff --git a/data/base/images/intfac/image_ord_fac1down.png b/data/base/images/intfac/image_ord_fac1down.png
new file mode 100644
index 0000000..1a78a6e
Binary files /dev/null and b/data/base/images/intfac/image_ord_fac1down.png differ
diff --git a/data/base/images/intfac/image_ord_fac1up.png b/data/base/images/intfac/image_ord_fac1up.png
new file mode 100644
index 0000000..626de47
Binary files /dev/null and b/data/base/images/intfac/image_ord_fac1up.png differ
diff --git a/data/base/images/intfac/image_ord_fac2down.png b/data/base/images/intfac/image_ord_fac2down.png
new file mode 100644
index 0000000..96b12f2
Binary files /dev/null and b/data/base/images/intfac/image_ord_fac2down.png differ
diff --git a/data/base/images/intfac/image_ord_fac2up.png b/data/base/images/intfac/image_ord_fac2up.png
new file mode 100644
index 0000000..9062fd0
Binary files /dev/null and b/data/base/images/intfac/image_ord_fac2up.png differ
diff --git a/data/base/images/intfac/image_ord_fac3down.png b/data/base/images/intfac/image_ord_fac3down.png
new file mode 100644
index 0000000..0cca787
Binary files /dev/null and b/data/base/images/intfac/image_ord_fac3down.png differ
diff --git a/data/base/images/intfac/image_ord_fac3up.png b/data/base/images/intfac/image_ord_fac3up.png
new file mode 100644
index 0000000..44f9788
Binary files /dev/null and b/data/base/images/intfac/image_ord_fac3up.png differ
diff --git a/data/base/images/intfac/image_ord_fac4down.png b/data/base/images/intfac/image_ord_fac4down.png
new file mode 100644
index 0000000..ddea3b4
Binary files /dev/null and b/data/base/images/intfac/image_ord_fac4down.png differ
diff --git a/data/base/images/intfac/image_ord_fac4up.png b/data/base/images/intfac/image_ord_fac4up.png
new file mode 100644
index 0000000..f32c57d
Binary files /dev/null and b/data/base/images/intfac/image_ord_fac4up.png differ
diff --git a/data/base/images/intfac/image_ord_fac5down.png b/data/base/images/intfac/image_ord_fac5down.png
new file mode 100644
index 0000000..fb021b4
Binary files /dev/null and b/data/base/images/intfac/image_ord_fac5down.png differ
diff --git a/data/base/images/intfac/image_ord_fac5up.png b/data/base/images/intfac/image_ord_fac5up.png
new file mode 100644
index 0000000..341296c
Binary files /dev/null and b/data/base/images/intfac/image_ord_fac5up.png differ
diff --git a/data/base/images/intfac/image_ord_fachilite.png b/data/base/images/intfac/image_ord_fachilite.png
new file mode 100644
index 0000000..ba4694d
Binary files /dev/null and b/data/base/images/intfac/image_ord_fachilite.png differ
diff --git a/data/base/images/intfac/image_ord_fatwilldown.png b/data/base/images/intfac/image_ord_fatwilldown.png
new file mode 100644
index 0000000..3b3f4d4
Binary files /dev/null and b/data/base/images/intfac/image_ord_fatwilldown.png differ
diff --git a/data/base/images/intfac/image_ord_fatwillup.png b/data/base/images/intfac/image_ord_fatwillup.png
new file mode 100644
index 0000000..fbab405
Binary files /dev/null and b/data/base/images/intfac/image_ord_fatwillup.png differ
diff --git a/data/base/images/intfac/image_ord_firedes_down.png b/data/base/images/intfac/image_ord_firedes_down.png
new file mode 100644
index 0000000..a677f78
Binary files /dev/null and b/data/base/images/intfac/image_ord_firedes_down.png differ
diff --git a/data/base/images/intfac/image_ord_firedes_up.png b/data/base/images/intfac/image_ord_firedes_up.png
new file mode 100644
index 0000000..c80c711
Binary files /dev/null and b/data/base/images/intfac/image_ord_firedes_up.png differ
diff --git a/data/base/images/intfac/image_ord_gotohqdown.png b/data/base/images/intfac/image_ord_gotohqdown.png
new file mode 100644
index 0000000..ecf6430
Binary files /dev/null and b/data/base/images/intfac/image_ord_gotohqdown.png differ
diff --git a/data/base/images/intfac/image_ord_gotohqup.png b/data/base/images/intfac/image_ord_gotohqup.png
new file mode 100644
index 0000000..796c6c2
Binary files /dev/null and b/data/base/images/intfac/image_ord_gotohqup.png differ
diff --git a/data/base/images/intfac/image_ord_guarddown.png b/data/base/images/intfac/image_ord_guarddown.png
new file mode 100644
index 0000000..abb4860
Binary files /dev/null and b/data/base/images/intfac/image_ord_guarddown.png differ
diff --git a/data/base/images/intfac/image_ord_guardup.png b/data/base/images/intfac/image_ord_guardup.png
new file mode 100644
index 0000000..8853e9c
Binary files /dev/null and b/data/base/images/intfac/image_ord_guardup.png differ
diff --git a/data/base/images/intfac/image_ord_haltdown.png b/data/base/images/intfac/image_ord_haltdown.png
new file mode 100644
index 0000000..eb43fea
Binary files /dev/null and b/data/base/images/intfac/image_ord_haltdown.png differ
diff --git a/data/base/images/intfac/image_ord_haltup.png b/data/base/images/intfac/image_ord_haltup.png
new file mode 100644
index 0000000..f396cfd
Binary files /dev/null and b/data/base/images/intfac/image_ord_haltup.png differ
diff --git a/data/base/images/intfac/image_ord_holdfiredown.png b/data/base/images/intfac/image_ord_holdfiredown.png
new file mode 100644
index 0000000..7182ba5
Binary files /dev/null and b/data/base/images/intfac/image_ord_holdfiredown.png differ
diff --git a/data/base/images/intfac/image_ord_holdfireup.png b/data/base/images/intfac/image_ord_holdfireup.png
new file mode 100644
index 0000000..6fc249f
Binary files /dev/null and b/data/base/images/intfac/image_ord_holdfireup.png differ
diff --git a/data/base/images/intfac/image_ord_patroldown.png b/data/base/images/intfac/image_ord_patroldown.png
new file mode 100644
index 0000000..320e82b
Binary files /dev/null and b/data/base/images/intfac/image_ord_patroldown.png differ
diff --git a/data/base/images/intfac/image_ord_patrolup.png b/data/base/images/intfac/image_ord_patrolup.png
new file mode 100644
index 0000000..02e2015
Binary files /dev/null and b/data/base/images/intfac/image_ord_patrolup.png differ
diff --git a/data/base/images/intfac/image_ord_pursuedown.png b/data/base/images/intfac/image_ord_pursuedown.png
new file mode 100644
index 0000000..91bfac0
Binary files /dev/null and b/data/base/images/intfac/image_ord_pursuedown.png differ
diff --git a/data/base/images/intfac/image_ord_pursueup.png b/data/base/images/intfac/image_ord_pursueup.png
new file mode 100644
index 0000000..033a0a7
Binary files /dev/null and b/data/base/images/intfac/image_ord_pursueup.png differ
diff --git a/data/base/images/intfac/image_ord_range1down.png b/data/base/images/intfac/image_ord_range1down.png
new file mode 100644
index 0000000..8974812
Binary files /dev/null and b/data/base/images/intfac/image_ord_range1down.png differ
diff --git a/data/base/images/intfac/image_ord_range1up.png b/data/base/images/intfac/image_ord_range1up.png
new file mode 100644
index 0000000..4c21d18
Binary files /dev/null and b/data/base/images/intfac/image_ord_range1up.png differ
diff --git a/data/base/images/intfac/image_ord_range2down.png b/data/base/images/intfac/image_ord_range2down.png
new file mode 100644
index 0000000..aff21af
Binary files /dev/null and b/data/base/images/intfac/image_ord_range2down.png differ
diff --git a/data/base/images/intfac/image_ord_range2up.png b/data/base/images/intfac/image_ord_range2up.png
new file mode 100644
index 0000000..601805c
Binary files /dev/null and b/data/base/images/intfac/image_ord_range2up.png differ
diff --git a/data/base/images/intfac/image_ord_range3down.png b/data/base/images/intfac/image_ord_range3down.png
new file mode 100644
index 0000000..9f0a608
Binary files /dev/null and b/data/base/images/intfac/image_ord_range3down.png differ
diff --git a/data/base/images/intfac/image_ord_range3up.png b/data/base/images/intfac/image_ord_range3up.png
new file mode 100644
index 0000000..480d659
Binary files /dev/null and b/data/base/images/intfac/image_ord_range3up.png differ
diff --git a/data/base/images/intfac/image_ord_repair1down.png b/data/base/images/intfac/image_ord_repair1down.png
new file mode 100644
index 0000000..328c5b2
Binary files /dev/null and b/data/base/images/intfac/image_ord_repair1down.png differ
diff --git a/data/base/images/intfac/image_ord_repair1up.png b/data/base/images/intfac/image_ord_repair1up.png
new file mode 100644
index 0000000..55f689a
Binary files /dev/null and b/data/base/images/intfac/image_ord_repair1up.png differ
diff --git a/data/base/images/intfac/image_ord_repair2down.png b/data/base/images/intfac/image_ord_repair2down.png
new file mode 100644
index 0000000..1f869c9
Binary files /dev/null and b/data/base/images/intfac/image_ord_repair2down.png differ
diff --git a/data/base/images/intfac/image_ord_repair2up.png b/data/base/images/intfac/image_ord_repair2up.png
new file mode 100644
index 0000000..ca573ed
Binary files /dev/null and b/data/base/images/intfac/image_ord_repair2up.png differ
diff --git a/data/base/images/intfac/image_ord_repair3down.png b/data/base/images/intfac/image_ord_repair3down.png
new file mode 100644
index 0000000..8bc4cde
Binary files /dev/null and b/data/base/images/intfac/image_ord_repair3down.png differ
diff --git a/data/base/images/intfac/image_ord_repair3up.png b/data/base/images/intfac/image_ord_repair3up.png
new file mode 100644
index 0000000..1a19d5a
Binary files /dev/null and b/data/base/images/intfac/image_ord_repair3up.png differ
diff --git a/data/base/images/intfac/image_ord_retfiredown.png b/data/base/images/intfac/image_ord_retfiredown.png
new file mode 100644
index 0000000..cbc7f5f
Binary files /dev/null and b/data/base/images/intfac/image_ord_retfiredown.png differ
diff --git a/data/base/images/intfac/image_ord_retfireup.png b/data/base/images/intfac/image_ord_retfireup.png
new file mode 100644
index 0000000..6db7b1c
Binary files /dev/null and b/data/base/images/intfac/image_ord_retfireup.png differ
diff --git a/data/base/images/intfac/image_ord_rtrdown.png b/data/base/images/intfac/image_ord_rtrdown.png
new file mode 100644
index 0000000..c3971f2
Binary files /dev/null and b/data/base/images/intfac/image_ord_rtrdown.png differ
diff --git a/data/base/images/intfac/image_ord_rtrup.png b/data/base/images/intfac/image_ord_rtrup.png
new file mode 100644
index 0000000..8595111
Binary files /dev/null and b/data/base/images/intfac/image_ord_rtrup.png differ
diff --git a/data/base/images/intfac/image_origin_commander.png b/data/base/images/intfac/image_origin_commander.png
new file mode 100644
index 0000000..a57e563
Binary files /dev/null and b/data/base/images/intfac/image_origin_commander.png differ
diff --git a/data/base/images/intfac/image_origin_radar_detector.png b/data/base/images/intfac/image_origin_radar_detector.png
new file mode 100644
index 0000000..1958c10
Binary files /dev/null and b/data/base/images/intfac/image_origin_radar_detector.png differ
diff --git a/data/base/images/intfac/image_origin_sensor_airdef.png b/data/base/images/intfac/image_origin_sensor_airdef.png
new file mode 100644
index 0000000..25a7338
Binary files /dev/null and b/data/base/images/intfac/image_origin_sensor_airdef.png differ
diff --git a/data/base/images/intfac/image_origin_sensor_cb.png b/data/base/images/intfac/image_origin_sensor_cb.png
new file mode 100644
index 0000000..437d6b7
Binary files /dev/null and b/data/base/images/intfac/image_origin_sensor_cb.png differ
diff --git a/data/base/images/intfac/image_origin_sensor_standard.png b/data/base/images/intfac/image_origin_sensor_standard.png
new file mode 100644
index 0000000..4875372
Binary files /dev/null and b/data/base/images/intfac/image_origin_sensor_standard.png differ
diff --git a/data/base/images/intfac/image_origin_visual.png b/data/base/images/intfac/image_origin_visual.png
new file mode 100644
index 0000000..da8b11a
Binary files /dev/null and b/data/base/images/intfac/image_origin_visual.png differ
diff --git a/data/base/images/intfac/image_pbar_avail.png b/data/base/images/intfac/image_pbar_avail.png
new file mode 100644
index 0000000..0fd3b77
Binary files /dev/null and b/data/base/images/intfac/image_pbar_avail.png differ
diff --git a/data/base/images/intfac/image_pbar_bottom.png b/data/base/images/intfac/image_pbar_bottom.png
new file mode 100644
index 0000000..e5939eb
Binary files /dev/null and b/data/base/images/intfac/image_pbar_bottom.png differ
diff --git a/data/base/images/intfac/image_pbar_empty.png b/data/base/images/intfac/image_pbar_empty.png
new file mode 100644
index 0000000..4c53e06
Binary files /dev/null and b/data/base/images/intfac/image_pbar_empty.png differ
diff --git a/data/base/images/intfac/image_pbar_required.png b/data/base/images/intfac/image_pbar_required.png
new file mode 100644
index 0000000..e22bc52
Binary files /dev/null and b/data/base/images/intfac/image_pbar_required.png differ
diff --git a/data/base/images/intfac/image_pbar_top.png b/data/base/images/intfac/image_pbar_top.png
new file mode 100644
index 0000000..77ae5c2
Binary files /dev/null and b/data/base/images/intfac/image_pbar_top.png differ
diff --git a/data/base/images/intfac/image_pbar_used.png b/data/base/images/intfac/image_pbar_used.png
new file mode 100644
index 0000000..2763f57
Binary files /dev/null and b/data/base/images/intfac/image_pbar_used.png differ
diff --git a/data/base/images/intfac/image_plascrete.png b/data/base/images/intfac/image_plascrete.png
new file mode 100644
index 0000000..0429fd4
Binary files /dev/null and b/data/base/images/intfac/image_plascrete.png differ
diff --git a/data/base/images/intfac/image_player_left_hi.png b/data/base/images/intfac/image_player_left_hi.png
new file mode 100644
index 0000000..5f3ba8c
Binary files /dev/null and b/data/base/images/intfac/image_player_left_hi.png differ
diff --git a/data/base/images/intfac/image_player_left_lo.png b/data/base/images/intfac/image_player_left_lo.png
new file mode 100644
index 0000000..161fb60
Binary files /dev/null and b/data/base/images/intfac/image_player_left_lo.png differ
diff --git a/data/base/images/intfac/image_question_mark.png b/data/base/images/intfac/image_question_mark.png
new file mode 100644
index 0000000..11b6cb8
Binary files /dev/null and b/data/base/images/intfac/image_question_mark.png differ
diff --git a/data/base/images/intfac/image_rad_art1.png b/data/base/images/intfac/image_rad_art1.png
new file mode 100644
index 0000000..5c6203a
Binary files /dev/null and b/data/base/images/intfac/image_rad_art1.png differ
diff --git a/data/base/images/intfac/image_rad_art2.png b/data/base/images/intfac/image_rad_art2.png
new file mode 100644
index 0000000..3285f79
Binary files /dev/null and b/data/base/images/intfac/image_rad_art2.png differ
diff --git a/data/base/images/intfac/image_rad_art3.png b/data/base/images/intfac/image_rad_art3.png
new file mode 100644
index 0000000..fcf5170
Binary files /dev/null and b/data/base/images/intfac/image_rad_art3.png differ
diff --git a/data/base/images/intfac/image_rad_artread.png b/data/base/images/intfac/image_rad_artread.png
new file mode 100644
index 0000000..2343529
Binary files /dev/null and b/data/base/images/intfac/image_rad_artread.png differ
diff --git a/data/base/images/intfac/image_rad_burnres1.png b/data/base/images/intfac/image_rad_burnres1.png
new file mode 100644
index 0000000..f78c943
Binary files /dev/null and b/data/base/images/intfac/image_rad_burnres1.png differ
diff --git a/data/base/images/intfac/image_rad_burnres2.png b/data/base/images/intfac/image_rad_burnres2.png
new file mode 100644
index 0000000..71e9d61
Binary files /dev/null and b/data/base/images/intfac/image_rad_burnres2.png differ
diff --git a/data/base/images/intfac/image_rad_burnres3.png b/data/base/images/intfac/image_rad_burnres3.png
new file mode 100644
index 0000000..e83beb6
Binary files /dev/null and b/data/base/images/intfac/image_rad_burnres3.png differ
diff --git a/data/base/images/intfac/image_rad_burnres4.png b/data/base/images/intfac/image_rad_burnres4.png
new file mode 100644
index 0000000..65e3733
Binary files /dev/null and b/data/base/images/intfac/image_rad_burnres4.png differ
diff --git a/data/base/images/intfac/image_rad_burnres5.png b/data/base/images/intfac/image_rad_burnres5.png
new file mode 100644
index 0000000..09dcb48
Binary files /dev/null and b/data/base/images/intfac/image_rad_burnres5.png differ
diff --git a/data/base/images/intfac/image_rad_burnres6.png b/data/base/images/intfac/image_rad_burnres6.png
new file mode 100644
index 0000000..14098ce
Binary files /dev/null and b/data/base/images/intfac/image_rad_burnres6.png differ
diff --git a/data/base/images/intfac/image_rad_burnresread.png b/data/base/images/intfac/image_rad_burnresread.png
new file mode 100644
index 0000000..1ed7d3a
Binary files /dev/null and b/data/base/images/intfac/image_rad_burnresread.png differ
diff --git a/data/base/images/intfac/image_rad_enm1.png b/data/base/images/intfac/image_rad_enm1.png
new file mode 100644
index 0000000..9a35991
Binary files /dev/null and b/data/base/images/intfac/image_rad_enm1.png differ
diff --git a/data/base/images/intfac/image_rad_enm2.png b/data/base/images/intfac/image_rad_enm2.png
new file mode 100644
index 0000000..ee5b2ab
Binary files /dev/null and b/data/base/images/intfac/image_rad_enm2.png differ
diff --git a/data/base/images/intfac/image_rad_enm3.png b/data/base/images/intfac/image_rad_enm3.png
new file mode 100644
index 0000000..0418f31
Binary files /dev/null and b/data/base/images/intfac/image_rad_enm3.png differ
diff --git a/data/base/images/intfac/image_rad_enmread.png b/data/base/images/intfac/image_rad_enmread.png
new file mode 100644
index 0000000..4311d3f
Binary files /dev/null and b/data/base/images/intfac/image_rad_enmread.png differ
diff --git a/data/base/images/intfac/image_rad_res1.png b/data/base/images/intfac/image_rad_res1.png
new file mode 100644
index 0000000..fd1c00f
Binary files /dev/null and b/data/base/images/intfac/image_rad_res1.png differ
diff --git a/data/base/images/intfac/image_rad_res2.png b/data/base/images/intfac/image_rad_res2.png
new file mode 100644
index 0000000..238791c
Binary files /dev/null and b/data/base/images/intfac/image_rad_res2.png differ
diff --git a/data/base/images/intfac/image_rad_res3.png b/data/base/images/intfac/image_rad_res3.png
new file mode 100644
index 0000000..1a5f399
Binary files /dev/null and b/data/base/images/intfac/image_rad_res3.png differ
diff --git a/data/base/images/intfac/image_rad_resread.png b/data/base/images/intfac/image_rad_resread.png
new file mode 100644
index 0000000..b1362cc
Binary files /dev/null and b/data/base/images/intfac/image_rad_resread.png differ
diff --git a/data/base/images/intfac/image_res_computertech.png b/data/base/images/intfac/image_res_computertech.png
new file mode 100644
index 0000000..45f5d52
Binary files /dev/null and b/data/base/images/intfac/image_res_computertech.png differ
diff --git a/data/base/images/intfac/image_res_cyborgtech.png b/data/base/images/intfac/image_res_cyborgtech.png
new file mode 100644
index 0000000..fd29351
Binary files /dev/null and b/data/base/images/intfac/image_res_cyborgtech.png differ
diff --git a/data/base/images/intfac/image_res_defence.png b/data/base/images/intfac/image_res_defence.png
new file mode 100644
index 0000000..5d88a39
Binary files /dev/null and b/data/base/images/intfac/image_res_defence.png differ
diff --git a/data/base/images/intfac/image_res_droidtech.png b/data/base/images/intfac/image_res_droidtech.png
new file mode 100644
index 0000000..8d6393f
Binary files /dev/null and b/data/base/images/intfac/image_res_droidtech.png differ
diff --git a/data/base/images/intfac/image_res_grpacc.png b/data/base/images/intfac/image_res_grpacc.png
new file mode 100644
index 0000000..265c66b
Binary files /dev/null and b/data/base/images/intfac/image_res_grpacc.png differ
diff --git a/data/base/images/intfac/image_res_grpdam.png b/data/base/images/intfac/image_res_grpdam.png
new file mode 100644
index 0000000..8ba5224
Binary files /dev/null and b/data/base/images/intfac/image_res_grpdam.png differ
diff --git a/data/base/images/intfac/image_res_grprep.png b/data/base/images/intfac/image_res_grprep.png
new file mode 100644
index 0000000..5b4cfa3
Binary files /dev/null and b/data/base/images/intfac/image_res_grprep.png differ
diff --git a/data/base/images/intfac/image_res_grprof.png b/data/base/images/intfac/image_res_grprof.png
new file mode 100644
index 0000000..0c5193f
Binary files /dev/null and b/data/base/images/intfac/image_res_grprof.png differ
diff --git a/data/base/images/intfac/image_res_grpupg.png b/data/base/images/intfac/image_res_grpupg.png
new file mode 100644
index 0000000..8a1c44e
Binary files /dev/null and b/data/base/images/intfac/image_res_grpupg.png differ
diff --git a/data/base/images/intfac/image_res_major_electronic.png b/data/base/images/intfac/image_res_major_electronic.png
new file mode 100644
index 0000000..452cabd
Binary files /dev/null and b/data/base/images/intfac/image_res_major_electronic.png differ
diff --git a/data/base/images/intfac/image_res_major_heavywep.png b/data/base/images/intfac/image_res_major_heavywep.png
new file mode 100644
index 0000000..0837296
Binary files /dev/null and b/data/base/images/intfac/image_res_major_heavywep.png differ
diff --git a/data/base/images/intfac/image_res_major_hover.png b/data/base/images/intfac/image_res_major_hover.png
new file mode 100644
index 0000000..7bcf333
Binary files /dev/null and b/data/base/images/intfac/image_res_major_hover.png differ
diff --git a/data/base/images/intfac/image_res_major_plascrete.png b/data/base/images/intfac/image_res_major_plascrete.png
new file mode 100644
index 0000000..643d6bf
Binary files /dev/null and b/data/base/images/intfac/image_res_major_plascrete.png differ
diff --git a/data/base/images/intfac/image_res_major_rocket.png b/data/base/images/intfac/image_res_major_rocket.png
new file mode 100644
index 0000000..e48dc6c
Binary files /dev/null and b/data/base/images/intfac/image_res_major_rocket.png differ
diff --git a/data/base/images/intfac/image_res_minor_autoweapons.png b/data/base/images/intfac/image_res_minor_autoweapons.png
new file mode 100644
index 0000000..9bc136a
Binary files /dev/null and b/data/base/images/intfac/image_res_minor_autoweapons.png differ
diff --git a/data/base/images/intfac/image_res_minor_plassteel.png b/data/base/images/intfac/image_res_minor_plassteel.png
new file mode 100644
index 0000000..50c56ba
Binary files /dev/null and b/data/base/images/intfac/image_res_minor_plassteel.png differ
diff --git a/data/base/images/intfac/image_res_minor_radar.png b/data/base/images/intfac/image_res_minor_radar.png
new file mode 100644
index 0000000..98f1e36
Binary files /dev/null and b/data/base/images/intfac/image_res_minor_radar.png differ
diff --git a/data/base/images/intfac/image_res_powertech.png b/data/base/images/intfac/image_res_powertech.png
new file mode 100644
index 0000000..2210241
Binary files /dev/null and b/data/base/images/intfac/image_res_powertech.png differ
diff --git a/data/base/images/intfac/image_res_questionmark.png b/data/base/images/intfac/image_res_questionmark.png
new file mode 100644
index 0000000..87db1eb
Binary files /dev/null and b/data/base/images/intfac/image_res_questionmark.png differ
diff --git a/data/base/images/intfac/image_res_structuretech.png b/data/base/images/intfac/image_res_structuretech.png
new file mode 100644
index 0000000..d494fdc
Binary files /dev/null and b/data/base/images/intfac/image_res_structuretech.png differ
diff --git a/data/base/images/intfac/image_res_systemtech.png b/data/base/images/intfac/image_res_systemtech.png
new file mode 100644
index 0000000..5d31878
Binary files /dev/null and b/data/base/images/intfac/image_res_systemtech.png differ
diff --git a/data/base/images/intfac/image_res_weapontech.png b/data/base/images/intfac/image_res_weapontech.png
new file mode 100644
index 0000000..db6b581
Binary files /dev/null and b/data/base/images/intfac/image_res_weapontech.png differ
diff --git a/data/base/images/intfac/image_research_down.png b/data/base/images/intfac/image_research_down.png
new file mode 100644
index 0000000..62cd7b9
Binary files /dev/null and b/data/base/images/intfac/image_research_down.png differ
diff --git a/data/base/images/intfac/image_research_up.png b/data/base/images/intfac/image_research_up.png
new file mode 100644
index 0000000..df84e8e
Binary files /dev/null and b/data/base/images/intfac/image_research_up.png differ
diff --git a/data/base/images/intfac/image_reticule_butdown.png b/data/base/images/intfac/image_reticule_butdown.png
new file mode 100644
index 0000000..9aeb68d
Binary files /dev/null and b/data/base/images/intfac/image_reticule_butdown.png differ
diff --git a/data/base/images/intfac/image_reticule_grey.png b/data/base/images/intfac/image_reticule_grey.png
new file mode 100644
index 0000000..f59a5ff
Binary files /dev/null and b/data/base/images/intfac/image_reticule_grey.png differ
diff --git a/data/base/images/intfac/image_reticule_hilight.png b/data/base/images/intfac/image_reticule_hilight.png
new file mode 100644
index 0000000..fedf567
Binary files /dev/null and b/data/base/images/intfac/image_reticule_hilight.png differ
diff --git a/data/base/images/intfac/image_rgttab.png b/data/base/images/intfac/image_rgttab.png
new file mode 100644
index 0000000..540a6cd
Binary files /dev/null and b/data/base/images/intfac/image_rgttab.png differ
diff --git a/data/base/images/intfac/image_rgttabd.png b/data/base/images/intfac/image_rgttabd.png
new file mode 100644
index 0000000..64e8723
Binary files /dev/null and b/data/base/images/intfac/image_rgttabd.png differ
diff --git a/data/base/images/intfac/image_rgttabh.png b/data/base/images/intfac/image_rgttabh.png
new file mode 100644
index 0000000..e85795d
Binary files /dev/null and b/data/base/images/intfac/image_rgttabh.png differ
diff --git a/data/base/images/intfac/image_rocket.png b/data/base/images/intfac/image_rocket.png
new file mode 100644
index 0000000..598db5b
Binary files /dev/null and b/data/base/images/intfac/image_rocket.png differ
diff --git a/data/base/images/intfac/image_sidetab.png b/data/base/images/intfac/image_sidetab.png
new file mode 100644
index 0000000..bd7c03c
Binary files /dev/null and b/data/base/images/intfac/image_sidetab.png differ
diff --git a/data/base/images/intfac/image_sidetabdown.png b/data/base/images/intfac/image_sidetabdown.png
new file mode 100644
index 0000000..118f5c3
Binary files /dev/null and b/data/base/images/intfac/image_sidetabdown.png differ
diff --git a/data/base/images/intfac/image_sidetabhi.png b/data/base/images/intfac/image_sidetabhi.png
new file mode 100644
index 0000000..640f03f
Binary files /dev/null and b/data/base/images/intfac/image_sidetabhi.png differ
diff --git a/data/base/images/intfac/image_sidetabsel.png b/data/base/images/intfac/image_sidetabsel.png
new file mode 100644
index 0000000..118f5c3
Binary files /dev/null and b/data/base/images/intfac/image_sidetabsel.png differ
diff --git a/data/base/images/intfac/image_slider_ai.png b/data/base/images/intfac/image_slider_ai.png
new file mode 100644
index 0000000..4fe675e
Binary files /dev/null and b/data/base/images/intfac/image_slider_ai.png differ
diff --git a/data/base/images/intfac/image_slider_back.png b/data/base/images/intfac/image_slider_back.png
new file mode 100644
index 0000000..3421dcf
Binary files /dev/null and b/data/base/images/intfac/image_slider_back.png differ
diff --git a/data/base/images/intfac/image_slider_big.png b/data/base/images/intfac/image_slider_big.png
new file mode 100644
index 0000000..c80087d
Binary files /dev/null and b/data/base/images/intfac/image_slider_big.png differ
diff --git a/data/base/images/intfac/image_slider_bigbut.png b/data/base/images/intfac/image_slider_bigbut.png
new file mode 100644
index 0000000..02d94e9
Binary files /dev/null and b/data/base/images/intfac/image_slider_bigbut.png differ
diff --git a/data/base/images/intfac/image_slider_but.png b/data/base/images/intfac/image_slider_but.png
new file mode 100644
index 0000000..239fbbd
Binary files /dev/null and b/data/base/images/intfac/image_slider_but.png differ
diff --git a/data/base/images/intfac/image_slider_infinity.png b/data/base/images/intfac/image_slider_infinity.png
new file mode 100644
index 0000000..2133fe9
Binary files /dev/null and b/data/base/images/intfac/image_slider_infinity.png differ
diff --git a/data/base/images/intfac/image_star.png b/data/base/images/intfac/image_star.png
new file mode 100644
index 0000000..0bc5682
Binary files /dev/null and b/data/base/images/intfac/image_star.png differ
diff --git a/data/base/images/intfac/image_tab1.png b/data/base/images/intfac/image_tab1.png
new file mode 100644
index 0000000..dea8242
Binary files /dev/null and b/data/base/images/intfac/image_tab1.png differ
diff --git a/data/base/images/intfac/image_tab1_sm.png b/data/base/images/intfac/image_tab1_sm.png
new file mode 100644
index 0000000..3dbccd6
Binary files /dev/null and b/data/base/images/intfac/image_tab1_sm.png differ
diff --git a/data/base/images/intfac/image_tab1down.png b/data/base/images/intfac/image_tab1down.png
new file mode 100644
index 0000000..60f3522
Binary files /dev/null and b/data/base/images/intfac/image_tab1down.png differ
diff --git a/data/base/images/intfac/image_tab1down_sm.png b/data/base/images/intfac/image_tab1down_sm.png
new file mode 100644
index 0000000..3689732
Binary files /dev/null and b/data/base/images/intfac/image_tab1down_sm.png differ
diff --git a/data/base/images/intfac/image_tab1selected_sm.png b/data/base/images/intfac/image_tab1selected_sm.png
new file mode 100644
index 0000000..3689732
Binary files /dev/null and b/data/base/images/intfac/image_tab1selected_sm.png differ
diff --git a/data/base/images/intfac/image_tab2.png b/data/base/images/intfac/image_tab2.png
new file mode 100644
index 0000000..dea8242
Binary files /dev/null and b/data/base/images/intfac/image_tab2.png differ
diff --git a/data/base/images/intfac/image_tab2down.png b/data/base/images/intfac/image_tab2down.png
new file mode 100644
index 0000000..60f3522
Binary files /dev/null and b/data/base/images/intfac/image_tab2down.png differ
diff --git a/data/base/images/intfac/image_tab3.png b/data/base/images/intfac/image_tab3.png
new file mode 100644
index 0000000..dea8242
Binary files /dev/null and b/data/base/images/intfac/image_tab3.png differ
diff --git a/data/base/images/intfac/image_tab3down.png b/data/base/images/intfac/image_tab3down.png
new file mode 100644
index 0000000..60f3522
Binary files /dev/null and b/data/base/images/intfac/image_tab3down.png differ
diff --git a/data/base/images/intfac/image_tab4.png b/data/base/images/intfac/image_tab4.png
new file mode 100644
index 0000000..dea8242
Binary files /dev/null and b/data/base/images/intfac/image_tab4.png differ
diff --git a/data/base/images/intfac/image_tab4down.png b/data/base/images/intfac/image_tab4down.png
new file mode 100644
index 0000000..60f3522
Binary files /dev/null and b/data/base/images/intfac/image_tab4down.png differ
diff --git a/data/base/images/intfac/image_tabhilight.png b/data/base/images/intfac/image_tabhilight.png
new file mode 100644
index 0000000..e60126d
Binary files /dev/null and b/data/base/images/intfac/image_tabhilight.png differ
diff --git a/data/base/images/intfac/image_tabhilight_sm.png b/data/base/images/intfac/image_tabhilight_sm.png
new file mode 100644
index 0000000..a72cdd9
Binary files /dev/null and b/data/base/images/intfac/image_tabhilight_sm.png differ
diff --git a/data/base/images/intfac/image_tabselected.png b/data/base/images/intfac/image_tabselected.png
new file mode 100644
index 0000000..60f3522
Binary files /dev/null and b/data/base/images/intfac/image_tabselected.png differ
diff --git a/data/base/images/intfac/image_target1.png b/data/base/images/intfac/image_target1.png
new file mode 100644
index 0000000..c02020f
Binary files /dev/null and b/data/base/images/intfac/image_target1.png differ
diff --git a/data/base/images/intfac/image_target2.png b/data/base/images/intfac/image_target2.png
new file mode 100644
index 0000000..0a96ecc
Binary files /dev/null and b/data/base/images/intfac/image_target2.png differ
diff --git a/data/base/images/intfac/image_target3.png b/data/base/images/intfac/image_target3.png
new file mode 100644
index 0000000..e5f37b7
Binary files /dev/null and b/data/base/images/intfac/image_target3.png differ
diff --git a/data/base/images/intfac/image_target4.png b/data/base/images/intfac/image_target4.png
new file mode 100644
index 0000000..0a4d39b
Binary files /dev/null and b/data/base/images/intfac/image_target4.png differ
diff --git a/data/base/images/intfac/image_target5.png b/data/base/images/intfac/image_target5.png
new file mode 100644
index 0000000..1a60d67
Binary files /dev/null and b/data/base/images/intfac/image_target5.png differ
diff --git a/data/base/images/intfac/image_tracks.png b/data/base/images/intfac/image_tracks.png
new file mode 100644
index 0000000..6676ce4
Binary files /dev/null and b/data/base/images/intfac/image_tracks.png differ
diff --git a/data/base/images/intfac/image_transeta_down.png b/data/base/images/intfac/image_transeta_down.png
new file mode 100644
index 0000000..1eef8c5
Binary files /dev/null and b/data/base/images/intfac/image_transeta_down.png differ
diff --git a/data/base/images/intfac/image_transeta_up.png b/data/base/images/intfac/image_transeta_up.png
new file mode 100644
index 0000000..55c0a5e
Binary files /dev/null and b/data/base/images/intfac/image_transeta_up.png differ
diff --git a/data/base/images/intfac/image_vdp_down.png b/data/base/images/intfac/image_vdp_down.png
new file mode 100644
index 0000000..f5b6677
Binary files /dev/null and b/data/base/images/intfac/image_vdp_down.png differ
diff --git a/data/base/images/intfac/image_vdp_hi.png b/data/base/images/intfac/image_vdp_hi.png
new file mode 100644
index 0000000..f093bbc
Binary files /dev/null and b/data/base/images/intfac/image_vdp_hi.png differ
diff --git a/data/base/images/intfac/image_vdp_up.png b/data/base/images/intfac/image_vdp_up.png
new file mode 100644
index 0000000..4e87be7
Binary files /dev/null and b/data/base/images/intfac/image_vdp_up.png differ
diff --git a/data/base/images/intfac/image_waiting_hi.png b/data/base/images/intfac/image_waiting_hi.png
new file mode 100644
index 0000000..c4d208b
Binary files /dev/null and b/data/base/images/intfac/image_waiting_hi.png differ
diff --git a/data/base/images/intfac/image_waiting_lo.png b/data/base/images/intfac/image_waiting_lo.png
new file mode 100644
index 0000000..3be54c2
Binary files /dev/null and b/data/base/images/intfac/image_waiting_lo.png differ
diff --git a/data/base/images/intfac/radar_north.png b/data/base/images/intfac/radar_north.png
new file mode 100644
index 0000000..7996efe
Binary files /dev/null and b/data/base/images/intfac/radar_north.png differ
diff --git a/data/base/images/intfac0.png b/data/base/images/intfac0.png
deleted file mode 100644
index 39479c3..0000000
Binary files a/data/base/images/intfac0.png and /dev/null differ
diff --git a/data/base/images/intfac1.png b/data/base/images/intfac1.png
deleted file mode 100644
index a0e1e86..0000000
Binary files a/data/base/images/intfac1.png and /dev/null differ
diff --git a/data/base/images/intfac2.png b/data/base/images/intfac2.png
deleted file mode 100644
index 1104d24..0000000
Binary files a/data/base/images/intfac2.png and /dev/null differ
diff --git a/data/base/images/intfac3.png b/data/base/images/intfac3.png
deleted file mode 100644
index 83bb582..0000000
Binary files a/data/base/images/intfac3.png and /dev/null differ
diff --git a/data/base/images/intfac4.png b/data/base/images/intfac4.png
deleted file mode 100644
index 75c49ce..0000000
Binary files a/data/base/images/intfac4.png and /dev/null differ
diff --git a/data/base/images/intfac5.png b/data/base/images/intfac5.png
deleted file mode 100644
index a75bbdc..0000000
Binary files a/data/base/images/intfac5.png and /dev/null differ
diff --git a/data/base/tileset/rockiedecals.txt b/data/base/tileset/rockiedecals.txt
index d2dec79..c81ffcd 100644
diff --git a/data/base/tileset/rockieground.txt b/data/base/tileset/rockieground.txt
index d834bde..282524a 100644
diff --git a/data/base/tileset/urbanground.txt b/data/base/tileset/urbanground.txt
index 029b373..2c33fd4 100644
diff --git a/data/base/wrf/frontend.wrf b/data/base/wrf/frontend.wrf
index 4070b98..66dd3e8 100644
diff --git a/data/base/wrf/vidmem.wrf b/data/base/wrf/vidmem.wrf
index 0e80935..75bf110 100644
diff --git a/data/base/wrf/vidmem2.wrf b/data/base/wrf/vidmem2.wrf
index da22839..373fd71 100644
diff --git a/data/base/wrf/vidmem3.wrf b/data/base/wrf/vidmem3.wrf
index 9b274c2..fddeb48 100644
diff --git a/data/mp/multiplay/skirmish/nullbot-generic.js.inc b/data/mp/multiplay/skirmish/nullbot-generic.js.inc
new file mode 100644
index 0000000..a9a1a16
diff --git a/data/mp/multiplay/skirmish/nullbot-header.js.inc b/data/mp/multiplay/skirmish/nullbot-header.js.inc
new file mode 100644
index 0000000..06d12bc
diff --git a/data/mp/multiplay/skirmish/nullbot-main.js.inc b/data/mp/multiplay/skirmish/nullbot-main.js.inc
new file mode 100644
index 0000000..fd79f15
diff --git a/data/mp/multiplay/skirmish/nullbot.ai b/data/mp/multiplay/skirmish/nullbot.ai
new file mode 100644
index 0000000..67827e4
diff --git a/data/mp/multiplay/skirmish/nullbot.js b/data/mp/multiplay/skirmish/nullbot.js
new file mode 100644
index 0000000..b6f7697
diff --git a/data/mp/wrf/vidmem.wrf b/data/mp/wrf/vidmem.wrf
index e332a5d..65ea216 100644
diff --git a/data/mp/wrf/vidmem2.wrf b/data/mp/wrf/vidmem2.wrf
index 85fc294..584719b 100644
diff --git a/data/mp/wrf/vidmem3.wrf b/data/mp/wrf/vidmem3.wrf
index cdc5404..0cbd68b 100644
diff --git a/icons/warzone2100.desktop b/icons/warzone2100.desktop
index 7ad3312..5cb8008 100644
--- a/icons/warzone2100.desktop
+++ b/icons/warzone2100.desktop
@@ -36,3 +36,9 @@ Comment[ru] = Постядерная стратегия в реальном вр
 Name[fr] = Warzone 2100
 GenericName[fr] = Jeu de stratégie
 Comment[fr] = Jeu de stratégie en temps réel dans un contexte post-nucléaire.
+Name[nl] = Warzone 2100
+Name[ca_ES] = Warzone 2100
+GenericName[nl] = Strategie Spel
+GenericName[ca_ES] = Partida d'estratègia
+Comment[nl] = Nucleaire naoorlogse strategie
+Comment[ca_ES] = Estratègia en temps real postnuclear
diff --git a/lib/exceptionhandler/exceptionhandler.cpp b/lib/exceptionhandler/exceptionhandler.cpp
index cee9cb7..88ab9be 100644
--- a/lib/exceptionhandler/exceptionhandler.cpp
+++ b/lib/exceptionhandler/exceptionhandler.cpp
@@ -494,9 +494,9 @@ static bool gdbExtendedBacktrace(int const dumpFile)
 	 * additions to the frame-pointer register's content.
 	 */
 	void const * const frame =
-#if   defined(SA_SIGINFO) && __WORDSIZE == 64
+#if   defined(SA_SIGINFO) && defined(REG_RBP)
 		sigcontext ? (void*)(sigcontext->uc_mcontext.gregs[REG_RBP] + sizeof(greg_t) + sizeof(void (*)(void))) : NULL;
-#elif defined(SA_SIGINFO) && __WORDSIZE == 32
+#elif defined(SA_SIGINFO) && defined(REG_EBP)
 		sigcontext ? (void*)(sigcontext->uc_mcontext.gregs[REG_EBP] + sizeof(greg_t) + sizeof(void (*)(void))) : NULL;
 #else
 		NULL;
@@ -506,9 +506,9 @@ static bool gdbExtendedBacktrace(int const dumpFile)
 	 * Faulting instruction.
 	 */
 	void (*instruction)(void) =
-#if   defined(SA_SIGINFO) && __WORDSIZE == 64
+#if   defined(SA_SIGINFO) && defined(REG_RIP)
 		sigcontext ? (void (*)(void))sigcontext->uc_mcontext.gregs[REG_RIP] : NULL;
-#elif defined(SA_SIGINFO) && __WORDSIZE == 32
+#elif defined(SA_SIGINFO) && defined(REG_EIP)
 		sigcontext ? (void (*)(void))sigcontext->uc_mcontext.gregs[REG_EIP] : NULL;
 #else
 		NULL;
diff --git a/lib/framework/crc.cpp b/lib/framework/crc.cpp
index ed70c14..f2bb3c1 100644
--- a/lib/framework/crc.cpp
+++ b/lib/framework/crc.cpp
@@ -190,3 +190,31 @@ std::string Sha256::toString() const
 	}
 	return str;
 }
+
+void Sha256::fromString(std::string const &s)
+{
+	setZero();
+	unsigned nChars = std::min<unsigned>(Bytes*2, s.size());
+	for (unsigned n = 0; n < nChars; ++n)
+	{
+		unsigned h;
+		unsigned c = s[n];
+		if (c >= '0' && c <= '9')
+		{
+			h = c - '0';
+		}
+		else if (c >= 'a' && c <= 'f')
+		{
+			h = c - 'a' + 10;
+		}
+		else if (c >= 'A' && c <= 'F')
+		{
+			h = c - 'A' + 10;
+		}
+		else
+		{
+			break;
+		}
+		bytes[n/2] |= h << (n%2? 0 : 4);
+	}
+}
diff --git a/lib/framework/crc.h b/lib/framework/crc.h
index 4e74e67..73da693 100644
--- a/lib/framework/crc.h
+++ b/lib/framework/crc.h
@@ -38,6 +38,7 @@ struct Sha256
 	bool isZero() const;
 	void setZero();
 	std::string toString() const;
+	void fromString(std::string const &s);
 
 	uint8_t bytes[Bytes];
 };
diff --git a/lib/framework/debug.cpp b/lib/framework/debug.cpp
index 62cb286..77b8074 100644
--- a/lib/framework/debug.cpp
+++ b/lib/framework/debug.cpp
@@ -204,7 +204,7 @@ bool debug_callback_file_init(void **data)
 	}
 
 	setbuf(logfile, NULL);
-	fprintf(logfile, "\n--- Starting log ---\n");
+	fprintf(logfile, "\n--- Starting log [%s]---\n", WZDebugfilename);
 	*data = logfile;
 
 	return true;
@@ -316,7 +316,7 @@ void debug_register_callback( debug_callback_fn callback, debug_callback_init in
 	if (tmpCallback->init
 	 && !tmpCallback->init(&tmpCallback->data))
 	{
-		debug(LOG_ERROR, "Failed to initialise debug callback");
+		fprintf(stderr, "Failed to initialise debug callback, debugfile set to [%s]!\n", WZDebugfilename);
 		free(tmpCallback);
 		return;
 	}
diff --git a/lib/framework/frameresource.cpp b/lib/framework/frameresource.cpp
index 3f3e66c..12dc70d 100644
--- a/lib/framework/frameresource.cpp
+++ b/lib/framework/frameresource.cpp
@@ -419,6 +419,7 @@ bool resLoadFile(const char *pType, const char *pFile)
 	{
 		if (psT->HashedType == HashedType)
 		{
+			ASSERT(strcmp(psT->aType, pType) == 0, "Hash collision \"%s\" vs \"%s\"", psT->aType, pType);
 			break;
 		}
 	}
@@ -435,7 +436,8 @@ bool resLoadFile(const char *pType, const char *pFile)
 	{
 		if(psRes->HashedID == HashedName)
 		{
-			debug(LOG_WZ, "resLoadFile: Duplicate file name: %s (hash %x) for type %s",
+			ASSERT(strcasecmp(psRes->aID, pFile) == 0, "Hash collision \"%s\" vs \"%s\"", psRes->aID, pFile);
+			debug(LOG_WZ, "Duplicate file name: %s (hash %x) for type %s",
 			      pFile, HashedName, psT->aType);
 			// assume that they are actually both the same and silently fail
 			// lovely little hack to allow some files to be loaded from disk (believe it or not!).
diff --git a/lib/framework/i18n.cpp b/lib/framework/i18n.cpp
index 7dcb72b..5a095ef 100644
--- a/lib/framework/i18n.cpp
+++ b/lib/framework/i18n.cpp
@@ -92,15 +92,15 @@ static const struct
 	{ "", N_("System locale"), LANG_NEUTRAL, SUBLANG_DEFAULT },
 #  if defined(ENABLE_NLS)
 	{ "ca", LANG_NAME_CATALAN, LANG_CATALAN, SUBLANG_DEFAULT },
-	{ "cs", LANG_NAME_CZECH, LANG_CZECH, SUBLANG_DEFAULT },
-	{ "da", LANG_NAME_DANISH, LANG_DANISH, SUBLANG_DEFAULT },
+//	{ "cs", LANG_NAME_CZECH, LANG_CZECH, SUBLANG_DEFAULT },
+//	{ "da", LANG_NAME_DANISH, LANG_DANISH, SUBLANG_DEFAULT },
 	{ "de", LANG_NAME_GERMAN, LANG_GERMAN, SUBLANG_GERMAN },
 	{ "en", LANG_NAME_ENGLISH, LANG_ENGLISH, SUBLANG_DEFAULT },
 	{ "en_GB", LANG_NAME_ENGLISH_UK, LANG_ENGLISH, SUBLANG_ENGLISH_UK },
 	{ "es", LANG_NAME_SPANISH, LANG_SPANISH, SUBLANG_SPANISH },
 	{ "et_EE", LANG_NAME_ESTONIAN, LANG_ESTONIAN, SUBLANG_DEFAULT },
 //	{ "eu", LANG_NAME_BASQUE, LANG_BASQUE, SUBLANG_DEFAULT },
-	{ "fi", LANG_NAME_FINNISH, LANG_FINNISH, SUBLANG_DEFAULT },
+//	{ "fi", LANG_NAME_FINNISH, LANG_FINNISH, SUBLANG_DEFAULT },
 	{ "fr", LANG_NAME_FRENCH, LANG_FRENCH, SUBLANG_FRENCH },
 	/* Our Frisian translation is the "West Frisian" variation of it. This
 	 * variation is mostly spoken in the Dutch province Friesland (Fryslân
@@ -109,26 +109,26 @@ static const struct
 	 * FIXME: We should really use a sub-language code for this. E.g.
 	 *        fy_XX.
 	 */
-	{ "fy", LANG_NAME_FRISIAN_NETHERLANDS, LANG_FRISIAN, SUBLANG_FRISIAN_NETHERLANDS },
-	{ "ga", LANG_NAME_IRISH, LANG_IRISH, SUBLANG_IRISH_IRELAND },
-	{ "hr", LANG_NAME_CROATIAN, LANG_CROATIAN, SUBLANG_DEFAULT },
+//	{ "fy", LANG_NAME_FRISIAN_NETHERLANDS, LANG_FRISIAN, SUBLANG_FRISIAN_NETHERLANDS },
+//	{ "ga", LANG_NAME_IRISH, LANG_IRISH, SUBLANG_IRISH_IRELAND },
+//	{ "hr", LANG_NAME_CROATIAN, LANG_CROATIAN, SUBLANG_DEFAULT },
 	{ "hu", LANG_NAME_HUNGARIAN, LANG_HUNGARIAN, SUBLANG_DEFAULT },
 	{ "it", LANG_NAME_ITALIAN, LANG_ITALIAN, SUBLANG_ITALIAN },
 	{ "ko_KR", LANG_NAME_KOREAN, LANG_KOREAN, SUBLANG_DEFAULT },
 //	{ "la", LANG_NAME_LATIN, LANG_LATIN, SUBLANG_DEFAULT },
-	{ "lt", LANG_NAME_LITHUANIAN, LANG_LITHUANIAN, SUBLANG_DEFAULT },
+//	{ "lt", LANG_NAME_LITHUANIAN, LANG_LITHUANIAN, SUBLANG_DEFAULT },
 //	{ "lv", LANG_NAME_LATVIAN, LANG_LATVIAN, SUBLANG_DEFAULT },
 	// MSDN uses "no"...
-	{ "nb", LANG_NAME_NORWEGIAN, LANG_NORWEGIAN, SUBLANG_DEFAULT },
+//	{ "nb", LANG_NAME_NORWEGIAN, LANG_NORWEGIAN, SUBLANG_DEFAULT },
 //	{ "nn", LANG_NAME_NORWEGIAN_NYNORSK, LANG_NORWEGIAN, SUBLANG_NORWEGIAN_NYNORSK },
 	{ "nl", LANG_NAME_DUTCH, LANG_DUTCH, SUBLANG_DUTCH },
 	{ "pl", LANG_NAME_POLISH, LANG_POLISH, SUBLANG_DEFAULT },
 	{ "pt_BR", LANG_NAME_PORTUGUESE_BRAZILIAN, LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN },
 	{ "pt", LANG_NAME_PORTUGUESE, LANG_PORTUGUESE, SUBLANG_DEFAULT },
-	{ "ro", LANG_NAME_ROMANIAN, LANG_ROMANIAN, SUBLANG_DEFAULT },
+//	{ "ro", LANG_NAME_ROMANIAN, LANG_ROMANIAN, SUBLANG_DEFAULT },
 	{ "ru", LANG_NAME_RUSSIAN, LANG_RUSSIAN, SUBLANG_DEFAULT },
-	{ "sk", LANG_NAME_SLOVAK, LANG_SLOVAK, SUBLANG_DEFAULT },
-	{ "sl", LANG_NAME_SLOVENIAN, LANG_SLOVENIAN, SUBLANG_DEFAULT },
+//	{ "sk", LANG_NAME_SLOVAK, LANG_SLOVAK, SUBLANG_DEFAULT },
+//	{ "sl", LANG_NAME_SLOVENIAN, LANG_SLOVENIAN, SUBLANG_DEFAULT },
 #if (WINVER >= 0x0600)
 //	{ "sv_SE", LANG_NAME_SWEDISH_SWEDEN, LANG_SWEDISH, SUBLANG_SWEDISH_SWEDEN },
 #else
@@ -138,8 +138,8 @@ static const struct
 	{ "tr", LANG_NAME_TURKISH, LANG_TURKISH, SUBLANG_DEFAULT },
 //	{ "uz", LANG_NAME_UZBEK_CYRILLIC, LANG_UZBEK, SUBLANG_UZBEK_CYRILLIC },
 	{ "uk_UA", LANG_NAME_UKRAINIAN, LANG_UKRAINIAN, SUBLANG_DEFAULT },
-	{ "zh_CN", LANG_NAME_CHINESE_SIMPLIFIED, LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED },
-	{ "zh_TW", LANG_NAME_CHINESE_TRADITIONAL, LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL },
+//	{ "zh_CN", LANG_NAME_CHINESE_SIMPLIFIED, LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED },
+//	{ "zh_TW", LANG_NAME_CHINESE_TRADITIONAL, LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL },
 #  endif
 };
 #else
@@ -153,46 +153,46 @@ static const struct
 	{ "",   N_("System locale"), "", "" },
 #  if defined(ENABLE_NLS)
 	{ "ca_ES", LANG_NAME_CATALAN, "ca_ES.UTF-8", "ca" },
-	{ "cs_CZ", LANG_NAME_CZECH, "cs_CZ.UTF-8", "cs" },
-	{ "da", LANG_NAME_DANISH, "da_DK.UTF-8", "da_DK" },
+//	{ "cs_CZ", LANG_NAME_CZECH, "cs_CZ.UTF-8", "cs" },
+//	{ "da", LANG_NAME_DANISH, "da_DK.UTF-8", "da_DK" },
 	{ "de", LANG_NAME_GERMAN, "de_DE.UTF-8", "de_DE" },
 	{ "en", LANG_NAME_ENGLISH, "en_US.UTF-8", "en_US" },
 	{ "en_GB", LANG_NAME_ENGLISH_UK, "en_GB.UTF-8", "en_GB" },
 	{ "es", LANG_NAME_SPANISH, "es_ES.UTF-8", "es_ES" },
 	{ "et_EE", LANG_NAME_ESTONIAN, "et_EE.UTF-8", "et" },
 //	{ "eu_ES", LANG_NAME_BASQUE, "eu_ES.UTF-8", "eu" },
-	{ "fi", LANG_NAME_FINNISH, "fi_FI.UTF-8", "fi_FI" },
+//	{ "fi", LANG_NAME_FINNISH, "fi_FI.UTF-8", "fi_FI" },
 	{ "fr", LANG_NAME_FRENCH, "fr_FR.UTF-8", "fr_FR" },
 	/* Our Frisian translation is the "West Frisian" variation of it. This
 	 * variation is mostly spoken in the Dutch province Friesland (Fryslân
 	 * in Frisian) and has ISO 639-3 code "fry".
 	 */
-	{ "fy_NL", LANG_NAME_FRISIAN_NETHERLANDS, "fy_NL.UTF-8", "fy" },
-	{ "ga_IE", LANG_NAME_IRISH, "ga_IE.UTF-8", "ga" },
-	{ "hr", LANG_NAME_CROATIAN, "hr_HR.UTF-8", "hr_HR" },
+//	{ "fy_NL", LANG_NAME_FRISIAN_NETHERLANDS, "fy_NL.UTF-8", "fy" },
+//	{ "ga_IE", LANG_NAME_IRISH, "ga_IE.UTF-8", "ga" },
+//	{ "hr", LANG_NAME_CROATIAN, "hr_HR.UTF-8", "hr_HR" },
 	{ "hu", LANG_NAME_HUNGARIAN, "hu_HU.UTF-8", "hu_HU" },
 	{ "it", LANG_NAME_ITALIAN, "it_IT.UTF-8", "it_IT" },
 	{ "ko_KR", LANG_NAME_KOREAN, "ko_KR.UTF-8", "ko" },
-	{ "la", LANG_NAME_LATIN, "la.UTF-8", "la" },
-	{ "lt", LANG_NAME_LITHUANIAN, "lt_LT.UTF-8", "lt_LT" },
+//	{ "la", LANG_NAME_LATIN, "la.UTF-8", "la" },
+//	{ "lt", LANG_NAME_LITHUANIAN, "lt_LT.UTF-8", "lt_LT" },
 //	{ "lv", LANG_NAME_LATVIAN, "lv_LV.UTF-8", "lv_LV" },
-	{ "nb_NO", LANG_NAME_NORWEGIAN, "nb_NO.UTF-8", "nb" },
+//	{ "nb_NO", LANG_NAME_NORWEGIAN, "nb_NO.UTF-8", "nb" },
 //	{ "nn_NO", LANG_NAME_NORWEGIAN_NYNORSK, "nn_NO.UTF-8", "nn" },
 	{ "nl", LANG_NAME_DUTCH, "nl_NL.UTF-8", "nl_NL" },
 	{ "pl", LANG_NAME_POLISH, "pl_PL.UTF-8", "pl_PL" },
 	{ "pt_BR", LANG_NAME_PORTUGUESE_BRAZILIAN, "pt_BR.UTF-8", "pt_BR" },
 	{ "pt", LANG_NAME_PORTUGUESE, "pt_PT.UTF-8", "pt_PT" },
-	{ "ro", LANG_NAME_ROMANIAN, "ro_RO.UTF-8", "ro_RO" },
+//	{ "ro", LANG_NAME_ROMANIAN, "ro_RO.UTF-8", "ro_RO" },
 	{ "ru", LANG_NAME_RUSSIAN, "ru_RU.UTF-8", "ru_RU" },
-	{ "sk", LANG_NAME_SLOVAK, "sk_SK.UTF-8", "sk_SK" },
-	{ "sl_SI", LANG_NAME_SLOVENIAN, "sl_SI.UTF-8", "sl" },
+//	{ "sk", LANG_NAME_SLOVAK, "sk_SK.UTF-8", "sk_SK" },
+//	{ "sl_SI", LANG_NAME_SLOVENIAN, "sl_SI.UTF-8", "sl" },
 //	{ "sv_SE", LANG_NAME_SWEDISH_SWEDEN, "sv_SE.UTF-8", "sv" },
 //	{ "sv", LANG_NAME_SWEDISH, "sv.UTF-8", "sv" },
 	{ "tr", LANG_NAME_TURKISH, "tr_TR.UTF-8", "tr_TR" },
 //	{ "uz", LANG_NAME_UZBEK_CYRILLIC, "uz_UZ.UTF-8", "uz_UZ" },
 	{ "uk_UA", LANG_NAME_UKRAINIAN, "uk_UA.UTF-8", "uk" },
-	{ "zh_CN", LANG_NAME_CHINESE_SIMPLIFIED, "zh_CN.UTF-8", "zh_CN" },
-	{ "zh_TW", LANG_NAME_CHINESE_TRADITIONAL, "zh_TW.UTF-8", "zh_TW" },
+//	{ "zh_CN", LANG_NAME_CHINESE_SIMPLIFIED, "zh_CN.UTF-8", "zh_CN" },
+//	{ "zh_TW", LANG_NAME_CHINESE_TRADITIONAL, "zh_TW.UTF-8", "zh_TW" },
 #  endif
 };
 #endif
diff --git a/lib/framework/treap.cpp b/lib/framework/treap.cpp
index 80ac10a..51ff9712 100644
--- a/lib/framework/treap.cpp
+++ b/lib/framework/treap.cpp
@@ -222,7 +222,7 @@ static const char* treapFindKeyRec(TREAP_NODE const * const psNode, const char *
 		return key;
 	}
 
-	return treapFindKeyRec(psNode->psLeft, string);
+	return treapFindKeyRec(psNode->psRight, string);
 }
 
 const char* treapFindKey(TREAP_NODE** psTreap, const char* string)
diff --git a/lib/ivis_opengl/bitimage.cpp b/lib/ivis_opengl/bitimage.cpp
index fb7383f..1a3faa9 100644
--- a/lib/ivis_opengl/bitimage.cpp
+++ b/lib/ivis_opengl/bitimage.cpp
@@ -25,96 +25,237 @@
 #include "bitimage.h"
 #include "tex.h"
 
+#include <set>
+#include <algorithm>
 
-static unsigned short LoadTextureFile(const char *FileName)
+
+struct ImageMergeRectangle
+{
+	bool operator <(ImageMergeRectangle const &b) const
+	{
+		if (std::max(siz.x, siz.y) != std::max(b.siz.x, b.siz.y)) return std::max(siz.x, siz.y) < std::max(b.siz.x, b.siz.y);
+		if (std::min(siz.x, siz.y) != std::min(b.siz.x, b.siz.y)) return std::min(siz.x, siz.y) < std::min(b.siz.x, b.siz.y);
+		                                                          return siz.x                  < b.siz.x;
+	}
+
+	int index;  // Index in ImageDefs array.
+	int page;   // Texture page index.
+	Vector2i loc, siz;
+	iV_Image *data;
+};
+
+struct ImageMerge
 {
-	iV_Image *pSprite;
-	unsigned int i;
+	static const int pageSize = 256;
 
-	ASSERT_OR_RETURN( 0, resPresent("IMGPAGE", FileName), "Texture file \"%s\" not preloaded.", FileName);
+	void arrange();
 
-	pSprite = (iV_Image*)resGetData("IMGPAGE", FileName);
-	debug(LOG_TEXTURE, "Load texture from resource cache: %s (%d, %d)",
-	      FileName, pSprite->width, pSprite->height);
+	std::vector<ImageMergeRectangle> images;
+	std::vector<int> pages;  // List of page sizes, normally all pageSize, unless an image is too large for a normal page.
+};
 
-	/* Have we already uploaded this one? */
-	for (i = 0; i < _TEX_INDEX; ++i)
+inline void ImageMerge::arrange()
+{
+	std::multiset<ImageMergeRectangle> freeSpace;
+	pages.clear();
+
+	std::sort(images.begin(), images.end());
+
+	std::vector<ImageMergeRectangle>::iterator r = images.end();
+	while (r != images.begin())
 	{
-		if (strcasecmp(FileName, _TEX_PAGE[i].name) == 0)
+		--r;
+
+		std::multiset<ImageMergeRectangle>::iterator f = freeSpace.lower_bound(*r);  // Find smallest free rectangle which is large enough.
+		while (f != freeSpace.end() && (f->siz.x < r->siz.x || f->siz.y < r->siz.y))
+		{
+			++f;  // Rectangle has wrong shape.
+		}
+		if (f == freeSpace.end())
 		{
-			debug(LOG_TEXTURE, "LoadTextureFile: already uploaded");
-			return _TEX_PAGE[i].id;
+			// No free space, make new page.
+			int s = pageSize;
+			while (s < (r->siz.x | r->siz.y))
+			{
+				s *= 2;
+			}
+			ImageMergeRectangle newPage;
+			newPage.page = pages.size();
+			newPage.loc = Vector2i(0, 0);
+			newPage.siz = Vector2i(s, s);
+			pages.push_back(s);
+			f = freeSpace.insert(newPage);
 		}
+		r->page = f->page;
+		r->loc = f->loc;
+		ImageMergeRectangle spRight;
+		ImageMergeRectangle spDown;
+		spRight.page = f->page;
+		spDown.page  = f->page;
+		spRight.loc = f->loc + Vector2i(r->siz.x, 0);
+		spDown.loc  = f->loc + Vector2i(0, r->siz.y);
+		spRight.siz = Vector2i(f->siz.x - r->siz.x, r->siz.y);
+		spDown.siz  = Vector2i(r->siz.x, f->siz.y - r->siz.y);
+		if (spRight.siz.x <= spDown.siz.y)
+		{
+			// Split horizontally.
+			spDown.siz.x = f->siz.x;
+		}
+		else
+		{
+			// Split vertically.
+			spRight.siz.y = f->siz.y;
+		}
+		if (spRight.siz.x > 0 && spRight.siz.y > 0)
+		{
+			freeSpace.insert(spRight);
+		}
+		if (spDown.siz.x > 0 && spDown.siz.y > 0)
+		{
+			freeSpace.insert(spDown);
+		}
+		freeSpace.erase(f);
 	}
-
-	debug(LOG_TEXTURE, "LoadTextureFile: had to upload texture!");
-	return pie_AddTexPage(pSprite, FileName, 0, 0, true);
 }
 
 IMAGEFILE *iV_LoadImageFile(const char *fileName)
 {
-	char *pFileData, *ptr, *dot;
-	unsigned int pFileSize, numImages = 0, i, tPages = 0;
-	IMAGEFILE *ImageFile;
-	char texFileName[PATH_MAX];
+	// Find the directory of images.
+	std::string imageDir = fileName;
+	if (imageDir.find_last_of('.') != std::string::npos)
+	{
+		imageDir.erase(imageDir.find_last_of('.'));
+	}
+	imageDir += '/';
 
+	// Load the image list file.
+	char *pFileData;
+	unsigned pFileSize;
 	if (!loadFile(fileName, &pFileData, &pFileSize))
 	{
 		debug(LOG_ERROR, "iV_LoadImageFile: failed to open %s", fileName);
 		return NULL;
 	}
-	ptr = pFileData;
+
+	char *ptr = pFileData;
 	// count lines, which is identical to number of images
+	int numImages = 0;
 	while (ptr < pFileData + pFileSize && *ptr != '\0')
 	{
-		numImages += (*ptr == '\n') ? 1 : 0;
-		ptr++;
+		numImages += *ptr == '\n';
+		++ptr;
 	}
-	ImageFile = (IMAGEFILE *)malloc(sizeof(IMAGEFILE) + sizeof(IMAGEDEF) * numImages);
-	ImageFile->ImageDefs = (IMAGEDEF*)(ImageFile + 1); // we allocated extra space for it
+	IMAGEFILE *imageFile = new IMAGEFILE;
+	imageFile->imageDefs.resize(numImages);
+	ImageMerge pageLayout;
+	pageLayout.images.resize(numImages);
 	ptr = pFileData;
 	numImages = 0;
 	while (ptr < pFileData + pFileSize)
 	{
 		int temp, retval;
-		IMAGEDEF *ImageDef = &ImageFile->ImageDefs[numImages];
+		ImageDef *ImageDef = &imageFile->imageDefs[numImages];
 
-		retval = sscanf(ptr, "%u,%u,%u,%u,%u,%d,%d%n", &ImageDef->TPageID, &ImageDef->Tu, &ImageDef->Tv, &ImageDef->Width,
-		       &ImageDef->Height, &ImageDef->XOffset, &ImageDef->YOffset, &temp);
-		if (retval != 7)
+		char tmpName[256];
+		retval = sscanf(ptr, "%d,%d,%255[^\r\n\",]%n", &ImageDef->XOffset, &ImageDef->YOffset, tmpName, &temp);
+		if (retval != 3)
 		{
-			break;
+			debug(LOG_ERROR, "Bad line in \"%s\".", fileName);
+			return NULL;
 		}
-		ptr += temp;
-		numImages++;
-		// Find number of texture pages to load (no gaps allowed in number series, eg use intfac0, intfac1, etc.!)
-		if (ImageDef->TPageID > tPages)
+		std::string spriteName = imageDir + tmpName;
+
+		ImageMergeRectangle *imageRect = &pageLayout.images[numImages];
+		imageRect->index = numImages;
+		imageRect->data = new iV_Image;
+		if (!iV_loadImage_PNG(spriteName.c_str(), imageRect->data))
 		{
-			tPages = ImageDef->TPageID;
+			debug(LOG_ERROR, "Failed to find image \"%s\" listed in \"%s\".", spriteName.c_str(), fileName);
+			return NULL;
 		}
+		imageRect->siz = Vector2i(imageRect->data->width, imageRect->data->height);
+		numImages++;
+		ptr += temp;
 		while (ptr < pFileData + pFileSize && *ptr++ != '\n') {} // skip rest of line
 	}
+	free(pFileData);
+
+	pageLayout.arrange();  // Arrange all the images onto texture pages (attempt to do so with as few pages as possible).
+	imageFile->pages.resize(pageLayout.pages.size());
+
+	std::vector<iV_Image> ivImages(pageLayout.pages.size());
+
+	for (unsigned p = 0; p < pageLayout.pages.size(); ++p)
+	{
+		int size = pageLayout.pages[p];
+		ivImages[p].depth = 4;
+		ivImages[p].width = size;
+		ivImages[p].height = size;
+		ivImages[p].bmp = (unsigned char *)malloc(size*size*4);  // MUST be malloc, since this is free()d later by pie_AddTexPage().
+		memset(ivImages[p].bmp, 0x00, size*size*4);
+		imageFile->pages[p].size = size;
+		// Must set imageFile->pages[p].id later, after filling out ivImages[p].bmp.
+	}
 
-	dot = (char *)strrchr(fileName, '/');  // go to last path character
-	dot++;				// skip it
-	strcpy(texFileName, dot);	// make a copy
-	dot = strchr(texFileName, '.');	// find extension
-	*dot = '\0';			// then discard it
-	// Load the texture pages.
-	for (i = 0; i <= tPages; i++)
+	for (std::vector<ImageMergeRectangle>::const_iterator r = pageLayout.images.begin(); r != pageLayout.images.end(); ++r)
 	{
-		char path[PATH_MAX];
+		imageFile->imageDefs[r->index].TPageID = r->page;
+		imageFile->imageDefs[r->index].Tu = r->loc.x;
+		imageFile->imageDefs[r->index].Tv = r->loc.y;
+		imageFile->imageDefs[r->index].Width = r->siz.x;
+		imageFile->imageDefs[r->index].Height = r->siz.y;
+
+		// Copy image data onto texture page.
+		iV_Image *srcImage = r->data;
+		int srcDepth = srcImage->depth;
+		int srcStride = srcImage->width*srcDepth;  // Not sure whether to pad in the case that srcDepth ≠ 4, however this apparently cannot happen.
+		unsigned char *srcBytes = srcImage->bmp + 0*srcDepth + 0*srcStride;
+		iV_Image *dstImage = &ivImages[r->page];
+		int dstDepth = dstImage->depth;
+		int dstStride = dstImage->width*dstDepth;
+		unsigned char *dstBytes = dstImage->bmp + r->loc.x*dstDepth + r->loc.y*dstStride;
+		Vector2i size = r->siz;
+		unsigned char rgba[4] = {0x00, 0x00, 0x00, 0xFF};
+		for (int y = 0; y < size.y; ++y)
+			for (int x = 0; x < size.x; ++x)
+		{
+			memcpy(rgba, srcBytes + x*srcDepth + y*srcStride, srcDepth);
+			memcpy(dstBytes + x*dstDepth + y*dstStride, rgba, dstDepth);
+		}
 
-		snprintf(path, PATH_MAX, "%s%u.png", texFileName, i);
-		ImageFile->TPageIDs[i] = LoadTextureFile(path);
+		// Finished reading the image data and copying it to the texture page, delete it.
+		free(r->data->bmp);
+		delete r->data;
+	}
+
+	// Debug usage only. Dump all images to disk (do mkdir images/, first). Doesn't dump the alpha channel, since the .ppm format doesn't support that.
+	/*for (unsigned p = 0; p < pageLayout.pages.size(); ++p)
+	{
+		char fName[100];
+		sprintf(fName, "%s-%d", fileName, p);
+		printf("Dump %s\n", fName);
+		FILE *f = fopen(fName, "wb");
+		iV_Image *image = &ivImages[p];
+		fprintf(f, "P6\n%d %d\n255\n", image->width, image->height);
+		for (int x = 0; x < image->width*image->height; ++x)
+			if (fwrite(image->bmp + x*4, 3, 1, f) == 0)
+				abort();
+		fclose(f);
+	}*/
+
+	// Upload texture pages and free image data.
+	for (unsigned p = 0; p < pageLayout.pages.size(); ++p)
+	{
+		char arbitraryName[256];
+		ssprintf(arbitraryName, "%s-%03u", fileName, p);
+		// Now we can set imageFile->pages[p].id. This free()s the ivImages[p].bmp array!
+		imageFile->pages[p].id = pie_AddTexPage(&ivImages[p], arbitraryName, 0, 0, true);
 	}
-	ImageFile->NumImages = numImages;
-	free(pFileData);
 
-	return ImageFile;
+	return imageFile;
 }
 
-void iV_FreeImageFile(IMAGEFILE *ImageFile)
+void iV_FreeImageFile(IMAGEFILE *imageFile)
 {
-	free(ImageFile);
+	delete imageFile;
 }
diff --git a/lib/ivis_opengl/bitimage.h b/lib/ivis_opengl/bitimage.h
index aa60126..da74f69 100644
--- a/lib/ivis_opengl/bitimage.h
+++ b/lib/ivis_opengl/bitimage.h
@@ -24,43 +24,43 @@
 
 static inline WZ_DECL_PURE unsigned short iV_GetImageWidth(const IMAGEFILE *ImageFile, const unsigned short ID)
 {
-	assert(ID < ImageFile->NumImages);
-	return ImageFile->ImageDefs[ID].Width;
+	assert(ID < ImageFile->imageDefs.size());
+	return ImageFile->imageDefs[ID].Width;
 }
 
 
 static inline WZ_DECL_PURE unsigned short iV_GetImageHeight(const IMAGEFILE *ImageFile, const unsigned short ID)
 {
-	assert(ID < ImageFile->NumImages);
-	return ImageFile->ImageDefs[ID].Height;
+	assert(ID < ImageFile->imageDefs.size());
+	return ImageFile->imageDefs[ID].Height;
 }
 
 
 static inline WZ_DECL_PURE short iV_GetImageXOffset(const IMAGEFILE *ImageFile, const unsigned short ID)
 {
-	assert(ID < ImageFile->NumImages);
-	return ImageFile->ImageDefs[ID].XOffset;
+	assert(ID < ImageFile->imageDefs.size());
+	return ImageFile->imageDefs[ID].XOffset;
 }
 
 
 static inline WZ_DECL_PURE short iV_GetImageYOffset(const IMAGEFILE *ImageFile, const unsigned short ID)
 {
-	assert(ID < ImageFile->NumImages);
-	return ImageFile->ImageDefs[ID].YOffset;
+	assert(ID < ImageFile->imageDefs.size());
+	return ImageFile->imageDefs[ID].YOffset;
 }
 
 
 static inline WZ_DECL_PURE unsigned short iV_GetImageCenterX(const IMAGEFILE *ImageFile, const unsigned short ID)
 {
-	assert(ID < ImageFile->NumImages);
-	return ImageFile->ImageDefs[ID].XOffset + ImageFile->ImageDefs[ID].Width/2;
+	assert(ID < ImageFile->imageDefs.size());
+	return ImageFile->imageDefs[ID].XOffset + ImageFile->imageDefs[ID].Width/2;
 }
 
 
 static inline WZ_DECL_PURE unsigned short iV_GetImageCenterY(const IMAGEFILE *ImageFile, const unsigned short ID)
 {
-	assert(ID < ImageFile->NumImages);
-	return ImageFile->ImageDefs[ID].YOffset + ImageFile->ImageDefs[ID].Height/2;
+	assert(ID < ImageFile->imageDefs.size());
+	return ImageFile->imageDefs[ID].YOffset + ImageFile->imageDefs[ID].Height/2;
 }
 
 
diff --git a/lib/ivis_opengl/ivisdef.h b/lib/ivis_opengl/ivisdef.h
index 91f6c25..ea8ed91 100644
--- a/lib/ivis_opengl/ivisdef.h
+++ b/lib/ivis_opengl/ivisdef.h
@@ -32,6 +32,8 @@
 #include "lib/framework/frame.h"
 #include "pietypes.h"
 
+#include <vector>
+
 //*************************************************************************
 //
 // screen surface structure
@@ -112,7 +114,7 @@ struct iIMDShape
 //
 //*************************************************************************
 
-struct IMAGEDEF
+struct ImageDef
 {
 	unsigned int TPageID;   /**< Which associated file to read our info from */
 	unsigned int Tu;        /**< First vertex coordinate */
@@ -123,12 +125,16 @@ struct IMAGEDEF
 	int YOffset;            /**< Y offset into source position */
 };
 
-#define MAX_NUM_TPAGEIDS 16
 struct IMAGEFILE
 {
-	int NumImages;          /**< Number of images contained here */
-	int TPageIDs[MAX_NUM_TPAGEIDS];	/**< OpenGL Texture IDs */
-	IMAGEDEF *ImageDefs;    /**< Stored images */
+	struct Page
+	{
+		int id;    /// OpenGL texture ID.
+		int size;  /// Size of texture in pixels. (Should be square.)
+	};
+
+	std::vector<Page> pages;          /// Texture pages.
+	std::vector<ImageDef> imageDefs;  /// Stored images.
 };
 
 #endif // _ivisdef_h
diff --git a/lib/ivis_opengl/pieblitfunc.cpp b/lib/ivis_opengl/pieblitfunc.cpp
index 298f887..b6677eb 100644
--- a/lib/ivis_opengl/pieblitfunc.cpp
+++ b/lib/ivis_opengl/pieblitfunc.cpp
@@ -158,16 +158,17 @@ void pie_UniTransBoxFill(float x0, float y0, float x1, float y1, PIELIGHT light)
 
 bool assertValidImage(IMAGEFILE *imageFile, unsigned id)
 {
-	ASSERT_OR_RETURN(false, id < (unsigned)imageFile->NumImages, "Out of range 1: %u/%d", id, imageFile->NumImages);
-	ASSERT_OR_RETURN(false, imageFile->ImageDefs[id].TPageID < MAX_NUM_TPAGEIDS, "Out of range 2: %u", imageFile->ImageDefs[id].TPageID);
+	ASSERT_OR_RETURN(false, id < imageFile->imageDefs.size(), "Out of range 1: %u/%d", id, (int)imageFile->imageDefs.size());
+	ASSERT_OR_RETURN(false, imageFile->imageDefs[id].TPageID < imageFile->pages.size(), "Out of range 2: %u", imageFile->imageDefs[id].TPageID);
 	return true;
 }
 
 static PIEIMAGE makePieImage(IMAGEFILE *imageFile, unsigned id, PIERECT *dest = NULL, int x = 0, int y = 0)
 {
-	IMAGEDEF const &image = imageFile->ImageDefs[id];
+	ImageDef const &image = imageFile->imageDefs[id];
 	PIEIMAGE pieImage;
-	pieImage.texPage = imageFile->TPageIDs[image.TPageID];
+	pieImage.texPage = imageFile->pages[image.TPageID].id;
+	pieImage.invTextureSize = 1.f / imageFile->pages[image.TPageID].size;
 	pieImage.tu = image.Tu;
 	pieImage.tv = image.Tv;
 	pieImage.tw = image.Width;
@@ -218,28 +219,16 @@ void iV_DrawImageTc(IMAGEFILE *imageFile, unsigned id, unsigned idTc, int x, int
 
 void iV_DrawImageRect(IMAGEFILE *ImageFile, UWORD ID, int x, int y, int Width, int Height)
 {
-	IMAGEDEF *Image;
 	SDWORD hRep, hRemainder, vRep, vRemainder;
-	PIEIMAGE pieImage;
-	PIERECT dest;
 
-	ASSERT_OR_RETURN(, ID < ImageFile->NumImages, "Out of range 1: %d", (int)ID);
-	Image = &ImageFile->ImageDefs[ID];
+	assertValidImage(ImageFile, ID);
+	ImageDef *Image = &ImageFile->imageDefs[ID];
 
-	ASSERT_OR_RETURN(, Image->TPageID < MAX_NUM_TPAGEIDS, "Out of range 2: %d", (int)Image->TPageID);
 	pie_SetRendMode(REND_OPAQUE);
 	pie_SetAlphaTest(true);
 
-	pieImage.texPage = ImageFile->TPageIDs[Image->TPageID];
-	pieImage.tu = Image->Tu;
-	pieImage.tv = Image->Tv;
-	pieImage.tw = Image->Width;
-	pieImage.th = Image->Height;
-
-	dest.x = x + Image->XOffset;
-	dest.y = y + Image->YOffset;
-	dest.w = Image->Width;
-	dest.h = Image->Height;
+	PIERECT dest;
+	PIEIMAGE pieImage = makePieImage(ImageFile, ID, &dest, x, y);
 
 	vRemainder = Height % Image->Height;
 	hRemainder = Width % Image->Width;
diff --git a/lib/ivis_opengl/piedef.h b/lib/ivis_opengl/piedef.h
index 6c48d10..222b32b 100644
--- a/lib/ivis_opengl/piedef.h
+++ b/lib/ivis_opengl/piedef.h
@@ -63,6 +63,7 @@ struct PIEIMAGE  ///< An area of texture.
 {
 	SDWORD texPage;
 	SWORD tu, tv, tw, th;
+	float invTextureSize;
 };
 
 /***************************************************************************/
diff --git a/lib/ivis_opengl/piedraw.cpp b/lib/ivis_opengl/piedraw.cpp
index 5e63d13..a7344c1 100644
--- a/lib/ivis_opengl/piedraw.cpp
+++ b/lib/ivis_opengl/piedraw.cpp
@@ -651,16 +651,16 @@ void pie_DrawImage(const PIEIMAGE *image, const PIERECT *dest, PIELIGHT colour)
 
 	glBegin(GL_TRIANGLE_STRIP);
 		//set up 4 pie verts
-		glTexCoord2f(image->tu / OLD_TEXTURE_SIZE_FIX, image->tv / OLD_TEXTURE_SIZE_FIX);
+		glTexCoord2f(image->tu * image->invTextureSize, image->tv * image->invTextureSize);
 		glVertex2f(dest->x, dest->y);
 
-		glTexCoord2f((image->tu + image->tw) / OLD_TEXTURE_SIZE_FIX, image->tv / OLD_TEXTURE_SIZE_FIX);
+		glTexCoord2f((image->tu + image->tw) * image->invTextureSize, image->tv * image->invTextureSize);
 		glVertex2f(dest->x + dest->w, dest->y);
 
-		glTexCoord2f(image->tu / OLD_TEXTURE_SIZE_FIX, (image->tv + image->th) / OLD_TEXTURE_SIZE_FIX);
+		glTexCoord2f(image->tu * image->invTextureSize, (image->tv + image->th) * image->invTextureSize);
 		glVertex2f(dest->x, dest->y + dest->h);
 
-		glTexCoord2f((image->tu + image->tw) / OLD_TEXTURE_SIZE_FIX, (image->tv + image->th) / OLD_TEXTURE_SIZE_FIX);
+		glTexCoord2f((image->tu + image->tw) * image->invTextureSize, (image->tv + image->th) * image->invTextureSize);
 		glVertex2f(dest->x + dest->w, dest->y + dest->h);
 	glEnd();
 }
diff --git a/lib/ivis_opengl/piestate.cpp b/lib/ivis_opengl/piestate.cpp
index ede1326..27c9667 100644
--- a/lib/ivis_opengl/piestate.cpp
+++ b/lib/ivis_opengl/piestate.cpp
@@ -38,6 +38,7 @@
 
 static bool shadersAvailable = false;
 static bool shaderUsage = false;
+static bool fallbackAvailable = true;
 static GLuint shaderProgram[SHADER_MAX];
 static GLfloat shaderStretch = 0;
 static GLint locTeam, locStretch, locTCMask, locFog, locNormalMap, locEcm, locTime;
@@ -140,6 +141,16 @@ void pie_SetShaderAvailability(bool availability)
 	shadersAvailable = availability;
 }
 
+bool pie_GetFallbackAvailability(void)
+{
+	return fallbackAvailable;
+}
+
+void pie_SetFallbackAvailability(bool availability)
+{
+	fallbackAvailable = availability;
+}
+
 bool pie_GetShaderUsage(void)
 {
 	return shaderUsage;
@@ -147,7 +158,10 @@ bool pie_GetShaderUsage(void)
 
 void pie_SetShaderUsage(bool usage)
 {
-	shaderUsage = pie_GetShaderAvailability() && usage;
+	bool valid = !usage && pie_GetFallbackAvailability();
+	valid = valid || (usage && pie_GetShaderAvailability());
+	if (valid)
+		shaderUsage = usage;
 }
 
 // Read shader into text buffer
diff --git a/lib/ivis_opengl/piestate.h b/lib/ivis_opengl/piestate.h
index 7d94551..93c4aae 100644
--- a/lib/ivis_opengl/piestate.h
+++ b/lib/ivis_opengl/piestate.h
@@ -85,6 +85,8 @@ extern void pie_SetRendMode(REND_MODE rendMode);
 // Shaders control center
 extern bool pie_GetShaderAvailability(void);
 extern void pie_SetShaderAvailability(bool);
+extern bool pie_GetFallbackAvailability(void);
+extern void pie_SetFallbackAvailability(bool);
 extern bool pie_GetShaderUsage(void);
 extern void pie_SetShaderUsage(bool);
 
diff --git a/lib/ivis_opengl/png_util.cpp b/lib/ivis_opengl/png_util.cpp
index 3b496a7..1ee2173 100644
--- a/lib/ivis_opengl/png_util.cpp
+++ b/lib/ivis_opengl/png_util.cpp
@@ -144,11 +144,11 @@ bool iV_loadImage_PNG(const char *fileName, iV_Image *image)
 // 	png_set_packing(png_ptr);
 
 	/* More transformations to ensure we end up with 32bpp, 4 channel RGBA */
-// 	png_set_gray_to_rgb(png_ptr);
- 	png_set_palette_to_rgb(png_ptr);
- 	png_set_tRNS_to_alpha(png_ptr);
+	png_set_gray_to_rgb(png_ptr);
+	png_set_palette_to_rgb(png_ptr);
+	png_set_tRNS_to_alpha(png_ptr);
 	png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER);
-// 	png_set_gray_1_2_4_to_8(png_ptr);
+//	png_set_gray_1_2_4_to_8(png_ptr);
 
 	png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
 
diff --git a/lib/ivis_opengl/screen.cpp b/lib/ivis_opengl/screen.cpp
index 385b403..8b32cb5 100644
--- a/lib/ivis_opengl/screen.cpp
+++ b/lib/ivis_opengl/screen.cpp
@@ -166,8 +166,12 @@ bool screenInitialise()
 		debug(LOG_3D, "  * (current) Max Sample level is %d.", (int) glmaxSamples);
 	}
 
-	bool canRunAtAll = GLEW_VERSION_1_2 /*&& GLEW_ARB_vertex_buffer_object*/ && GLEW_ARB_texture_env_crossbar;  // There seems to be a fallback for missing GLEW_ARB_vertex_buffer_object, in the 3.1 branch.
-	bool canRunShaders = canRunAtAll && glslVersion >= std::make_pair(1, 20);  // glGetString(GL_SHADING_LANGUAGE_VERSION) >= "1.20"
+	//bool haveARB_vertex_buffer_object = GLEW_ARB_vertex_buffer_object || GLEW_VERSION_1_5;
+	bool haveARB_texture_env_crossbar = GLEW_ARB_texture_env_crossbar || GLEW_NV_texture_env_combine4 || GLEW_VERSION_1_4;
+	bool canRunFallback = GLEW_VERSION_1_2 /*&& haveARB_vertex_buffer_object*/ && haveARB_texture_env_crossbar;  // There seems to be a fallback for missing GLEW_ARB_vertex_buffer_object, in the 3.1 branch.
+	bool canRunShaders = GLEW_VERSION_1_2 /*&& haveARB_vertex_buffer_object*/ && glslVersion >= std::make_pair(1, 20);  // glGetString(GL_SHADING_LANGUAGE_VERSION) >= "1.20"
+
+	pie_SetFallbackAvailability(canRunFallback);
 
 	if (canRunShaders)
 	{
@@ -177,7 +181,7 @@ bool screenInitialise()
 			pie_SetShaderAvailability(true);
 		}
 	}
-	else if (canRunAtAll)
+	else if (canRunFallback)
 	{
 		// corner cases: vbo(core 1.5 or ARB ext), texture crossbar (core 1.4 or ARB ext)
 		debug(LOG_POPUP, _("OpenGL GLSL shader version 1.20 is not supported by your system. Some things may look wrong. Please upgrade your graphics driver/hardware, if possible."));
diff --git a/lib/netplay/netplay.cpp b/lib/netplay/netplay.cpp
index 84d5476..04b6de5 100644
--- a/lib/netplay/netplay.cpp
+++ b/lib/netplay/netplay.cpp
@@ -176,7 +176,7 @@ unsigned NET_PlayerConnectionStatus[CONNECTIONSTATUS_NORMAL][MAX_PLAYERS];
 **/
 static char const *versionString = version_getVersionString();
 static int NETCODE_VERSION_MAJOR = 6;
-static int NETCODE_VERSION_MINOR = 20120620;
+static int NETCODE_VERSION_MINOR = 20120821;
 
 bool NETisCorrectVersion(uint32_t game_version_major, uint32_t game_version_minor)
 {
@@ -575,7 +575,7 @@ void NETfixDuplicatePlayerNames(void)
 	for (i = 1; i != MAX_PLAYERS; ++i)
 	{
 		sstrcpy(name, NetPlay.players[i].name);
-		if (name[0] == '\0')
+		if (name[0] == '\0' || !NetPlay.players[i].allocated)
 		{
 			continue;  // Ignore empty names.
 		}
@@ -1917,7 +1917,7 @@ UBYTE NETrecvFile(NETQUEUE queue)
 		}
 		snprintf(fileName, sizeof(fileName), "maps/%dc-%s-%s.wz", game.maxPlayers, mapName, fileHash.toString().c_str());  // Wonder whether game.maxPlayers is initialised already?
 
-		debug(LOG_NET, "Creating new file %s hash %s", fileName, fileHash.toString().c_str());
+		debug(LOG_INFO, "Creating new file %s hash %s", fileName, fileHash.toString().c_str());
 
 		if (PHYSFS_exists(fileName))
 		{
@@ -1980,6 +1980,7 @@ UBYTE NETrecvFile(NETQUEUE queue)
 
 		}
 		NetPlay.pMapFileHandle = PHYSFS_openWrite(fileName);	// create a new file.
+		sstrcpy(NetPlay.mapFileName, fileName);
 	}
 
 	debug(LOG_NET, "New file position is %d", currPos);
@@ -2006,8 +2007,17 @@ UBYTE NETrecvFile(NETQUEUE queue)
 
 	if (currPos + bytesToRead == fileSize)	// last packet
 	{
-		PHYSFS_close(NetPlay.pMapFileHandle);
+		int noError = PHYSFS_close(NetPlay.pMapFileHandle);
+		if (noError == 0)
+		{
+			debug(LOG_ERROR, "Could not close file handle after trying to save map: %s", PHYSFS_getLastError());
+		}
 		NetPlay.pMapFileHandle = NULL;
+		PHYSFS_File *file = PHYSFS_openRead(NetPlay.mapFileName);
+		int actualFileSize = PHYSFS_fileLength(file);
+		PHYSFS_close(file);
+		NetPlay.mapFileName[0] = '\0';
+		ASSERT(actualFileSize == fileSize, "Downloaded map too small! Got %d, expected %d!", actualFileSize, fileSize);
 	}
 
 	//return the percentage count
diff --git a/lib/netplay/netplay.h b/lib/netplay/netplay.h
index cc0aae6..8a8b2a1 100644
--- a/lib/netplay/netplay.h
+++ b/lib/netplay/netplay.h
@@ -259,7 +259,8 @@ struct NETPLAY
 	bool		isHost;			///< True if we are hosting the game
 	bool		isUPNP;					// if we want the UPnP detection routines to run
 	bool		isHostAlive;	/// if the host is still alive
-	PHYSFS_file	*pMapFileHandle;
+	PHYSFS_file *   pMapFileHandle;         ///< Only non-NULL during map download.
+	char mapFileName[255];            ///< Only valid during map download.
 	char gamePassword[password_string_size];		//
 	bool GamePassworded;				// if we have a password or not.
 	bool ShowedMOTD;					// only want to show this once
diff --git a/lib/qtgame/wzapp_qt.cpp b/lib/qtgame/wzapp_qt.cpp
index e31a449..ff83a2f 100644
--- a/lib/qtgame/wzapp_qt.cpp
+++ b/lib/qtgame/wzapp_qt.cpp
@@ -22,7 +22,7 @@
  *  Qt-related functions.
  */
 
-#include <QtGui/QImageReader>
+#include <QtGui/QImage>
 #include <QtGui/QBitmap>
 #include <QtGui/QPainter>
 #include <QtGui/QMouseEvent>
@@ -112,11 +112,9 @@ unsigned screenHeight = 0;  // Declared in frameint.h.
 static void inputAddBuffer(UDWORD key, utf_32_char unicode);
 static int WZkeyToQtKey(int code);
 
-void WzMainWindow::loadCursor(CURSOR cursor, int x, int y, QImageReader &buffer)
+void WzMainWindow::loadCursor(CURSOR cursor, char const *name)
 {
-	buffer.device()->reset();
-	buffer.setClipRect(QRect(x, y, 32, 32));
-	cursors[cursor] = new QCursor(QPixmap::fromImage(buffer.read()));
+	cursors[cursor] = new QCursor(QPixmap::fromImage(QImage(name, "PNG")));
 }
 
 WzMainWindow::WzMainWindow(QSize resolution, const QGLFormat &format, QWidget *parent) : QtGameWidget(resolution, format, parent)
@@ -135,32 +133,27 @@ WzMainWindow::WzMainWindow(QSize resolution, const QGLFormat &format, QWidget *p
 #endif
 	setWindowTitle(PACKAGE_NAME);
 
-	QImageReader buffer("wz::images/intfac5.png", "PNG");
-	if (!buffer.canRead())
-	{
-		debug(LOG_ERROR, "Failed to read cursor image: %s", buffer.errorString().toAscii().constData());
-	}
-	loadCursor(CURSOR_EMBARK, 0, 128, buffer);
-	loadCursor(CURSOR_DEST, 32, 128, buffer);
-	loadCursor(CURSOR_DEFAULT, 64, 128, buffer);
-	loadCursor(CURSOR_BUILD, 96, 128, buffer);
-	loadCursor(CURSOR_SCOUT, 128, 128, buffer);
-	loadCursor(CURSOR_DISEMBARK, 160, 128, buffer);
-	loadCursor(CURSOR_ATTACK, 192, 128, buffer);
-	loadCursor(CURSOR_GUARD, 224, 128, buffer);
-	loadCursor(CURSOR_FIX, 0, 160, buffer);
-	loadCursor(CURSOR_SELECT, 32, 160, buffer);
+	loadCursor(CURSOR_EMBARK, "wz::images/intfac/image_cursor_embark.png");
+	loadCursor(CURSOR_DEST, "wz::images/intfac/image_cursor_dest.png");
+	loadCursor(CURSOR_DEFAULT, "wz::images/intfac/image_cursor_default.png");
+	loadCursor(CURSOR_BUILD, "wz::images/intfac/image_cursor_build.png");
+	loadCursor(CURSOR_SCOUT, "wz::images/intfac/image_cursor_scout.png");
+	loadCursor(CURSOR_DISEMBARK, "wz::images/intfac/image_cursor_disembark.png");
+	loadCursor(CURSOR_ATTACK, "wz::images/intfac/image_cursor_attack.png");
+	loadCursor(CURSOR_GUARD, "wz::images/intfac/image_cursor_guard.png");
+	loadCursor(CURSOR_FIX, "wz::images/intfac/image_cursor_fix.png");
+	loadCursor(CURSOR_SELECT, "wz::images/intfac/image_cursor_select.png");
 //	loadCursor(CURSOR_REPAIR, 64, 160, buffer);		// FIX ME: This IS in infac.img, but the define is MIA
-	loadCursor(CURSOR_SEEKREPAIR, 64, 160, buffer);	// FIX ME: This is NOT in infac.img!
-	loadCursor(CURSOR_PICKUP, 96, 160, buffer);
-	loadCursor(CURSOR_NOTPOSSIBLE, 128, 160, buffer);
-	loadCursor(CURSOR_MOVE, 160, 160, buffer);
-	loadCursor(CURSOR_LOCKON, 192, 160, buffer);
+	loadCursor(CURSOR_SEEKREPAIR, "wz::images/intfac/image_cursor_repair.png");  // FIX ME: This is NOT in infac.img!
+	loadCursor(CURSOR_PICKUP, "wz::images/intfac/image_cursor_pickup.png");
+	loadCursor(CURSOR_NOTPOSSIBLE, "wz::images/intfac/image_cursor_notpos.png");
+	loadCursor(CURSOR_MOVE, "wz::images/intfac/image_cursor_move.png");
+	loadCursor(CURSOR_LOCKON, "wz::images/intfac/image_cursor_lockon.png");
 //	loadCursor(CURSOR_ECM, 224, 160, buffer);		// FIX ME: Not defined yet!
-	loadCursor(CURSOR_JAM, 224, 160, buffer);		// FIX ME: This is NOT in infac.img, and is using IMAGE CURSOR ECM ?
-	loadCursor(CURSOR_ATTACH, 0, 192, buffer);
-	loadCursor(CURSOR_BRIDGE, 32, 192, buffer);
-	loadCursor(CURSOR_BOMB, 64, 192, buffer);
+	loadCursor(CURSOR_JAM, "wz::images/intfac/image_cursor_ecm.png");  // FIX ME: This is NOT in infac.img, and is using IMAGE CURSOR ECM ?
+	loadCursor(CURSOR_ATTACH, "wz::images/intfac/image_cursor_attach.png");
+	loadCursor(CURSOR_BRIDGE, "wz::images/intfac/image_cursor_bridge.png");
+	loadCursor(CURSOR_BOMB, "wz::images/intfac/image_cursor_bomb.png");
 
 	// Reused (unused) cursors
 	cursors[CURSOR_ARROW] = new QCursor(Qt::ArrowCursor);
diff --git a/lib/qtgame/wzapp_qt.h b/lib/qtgame/wzapp_qt.h
index f1c5e62..890648a 100644
--- a/lib/qtgame/wzapp_qt.h
+++ b/lib/qtgame/wzapp_qt.h
@@ -21,7 +21,7 @@
 #define WZAPP_H
 
 #include <QtGui/QApplication>
-#include <QtGui/QImageReader>
+#include <QtGui/QImage>
 #include <QtOpenGL/QGLWidget>
 #include <QtCore/QBuffer>
 #include <QtCore/QTime>
@@ -44,7 +44,7 @@ class WzMainWindow : public QtGameWidget
 	Q_OBJECT
 
 private:
-	void loadCursor(CURSOR cursor, int x, int y, QImageReader &buffer);
+	void loadCursor(CURSOR cursor, char const *name);
 	void mouseMoveEvent(QMouseEvent *event);
 	void mousePressEvent(QMouseEvent *event);
 	void mouseReleaseEvent(QMouseEvent *event);
diff --git a/macosx/Warzone.xcodeproj/project.pbxproj b/macosx/Warzone.xcodeproj/project.pbxproj
index 4268f56..4f697e7 100644
diff --git a/macosx/configs/LangDis b/macosx/configs/LangDis
index d25a56c..61f1c0e 100644
diff --git a/macosx/configs/ResourceRules.plist b/macosx/configs/ResourceRules.plist
new file mode 100644
index 0000000..096589e
diff --git a/macosx/configs/Warzone-All.xcconfig b/macosx/configs/Warzone-All.xcconfig
index 8728ead..f78d0cb 100644
diff --git a/macosx/configs/codesignrules.plist b/macosx/configs/codesignrules.plist
deleted file mode 100644
index 2a9014f..0000000
diff --git a/macosx/configs/fetchscripts/GLExtensionWrangler-FetchSource.sh b/macosx/configs/fetchscripts/GLExtensionWrangler-FetchSource.sh
index 0646afe..6f760c3 100755
diff --git a/macosx/configs/fetchscripts/Png-FetchSource.sh b/macosx/configs/fetchscripts/Png-FetchSource.sh
index b0a127e..4bb6183 100755
diff --git a/macosx/configs/fetchscripts/SetupPrebuiltComponents-CS-ID.sh b/macosx/configs/fetchscripts/SetupPrebuiltComponents-CS-ID.sh
new file mode 100755
index 0000000..71d899b
diff --git a/macosx/configs/mkdmgs.sh b/macosx/configs/mkdmgs.sh
index 6da8943..cd9df47 100755
diff --git a/po/ca_ES.po b/po/ca_ES.po
index b1be672..05404d5 100644
diff --git a/po/cs.po b/po/cs.po
index fc6a2ba..853e887 100644
diff --git a/po/da.po b/po/da.po
index 4bfc3d2..d6c60d3 100644
diff --git a/po/de.po b/po/de.po
index 4d13aeb..0c7eb85 100644
diff --git a/po/en_GB.po b/po/en_GB.po
index 24e7538..bc03d59 100644
diff --git a/po/es.po b/po/es.po
index 5bbe453..3ddeb38 100644
diff --git a/po/et_EE.po b/po/et_EE.po
index 110ba30..518e8eb 100644
diff --git a/po/fi.po b/po/fi.po
index 80d4f14..d3e6a9e 100644
diff --git a/po/fr.po b/po/fr.po
index f0dc51b..fbac59e 100644
diff --git a/po/fy.po b/po/fy.po
index ecdba86..9577ea7 100644
diff --git a/po/ga.po b/po/ga.po
index ee79e4a..8cbd447 100644
diff --git a/po/hr.po b/po/hr.po
index cacc10a..ebd616d 100644
diff --git a/po/hu.po b/po/hu.po
index 6f473ff..9a08e1b 100644
diff --git a/po/it.po b/po/it.po
index 9fccb1b..5d3774b 100644
diff --git a/po/ko.po b/po/ko.po
index a465b87..33d62af 100644
diff --git a/po/la.po b/po/la.po
index 50b01e7..f5fe524 100644
diff --git a/po/lt.po b/po/lt.po
index b0833b7..63cdda6 100644
diff --git a/po/nb.po b/po/nb.po
index fc3fc05..c2c5e77 100644
diff --git a/po/nl.po b/po/nl.po
index 9d895b8..19dd90c 100644
diff --git a/po/pl.po b/po/pl.po
index 97af2c3..958b0f5 100644
diff --git a/po/pt.po b/po/pt.po
index abba197..5de76fe 100644
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 1a45442..2e77650 100644
diff --git a/po/ro.po b/po/ro.po
index 0e06100..e65d224 100644
diff --git a/po/ru.po b/po/ru.po
index 35c80ae..8a75387 100644
diff --git a/po/sk.po b/po/sk.po
index 24e9b1a..e16e609 100644
diff --git a/po/sl.po b/po/sl.po
index 91a7896..29a359d 100644
diff --git a/po/tr.po b/po/tr.po
index 7723329..8289a54 100644
diff --git a/po/uk_UA.po b/po/uk_UA.po
index 40e9ff3..599116b 100644
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 88a7931..978e693 100644
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 00991c1..5be474d 100644
diff --git a/src/combat.cpp b/src/combat.cpp
index d1910ad..57253c5 100644
--- a/src/combat.cpp
+++ b/src/combat.cpp
@@ -54,7 +54,7 @@ bool combFire(WEAPON *psWeap, BASE_OBJECT *psAttacker, BASE_OBJECT *psTarget, in
 	/* Watermelon:dont shoot if the weapon_slot of a vtol is empty */
 	if (psAttacker->type == OBJ_DROID && isVtolDroid(((DROID *)psAttacker)))
 	{
-		if (((DROID *)psAttacker)->sMove.iAttackRuns[weapon_slot] >= getNumAttackRuns(((DROID *)psAttacker), weapon_slot))
+		if (psWeap->usedAmmo >= getNumAttackRuns(((DROID *)psAttacker), weapon_slot))
 		{
 			objTrace(psAttacker->id, "VTOL slot %d is empty", weapon_slot);
 			return false;
diff --git a/src/configuration.cpp b/src/configuration.cpp
index ee9892c..f13c82a 100644
--- a/src/configuration.cpp
+++ b/src/configuration.cpp
@@ -95,19 +95,12 @@ bool loadConfig()
 	war_setMPcolour(ini.value("colourMP", -1).toInt());  // default is random (-1)
 	sstrcpy(game.name, ini.value("gameName", _("My Game")).toString().toUtf8().constData());
 	sstrcpy(sPlayer, ini.value("playerName", _("Player")).toString().toUtf8().constData());
-	if (ini.contains("mapName") && ini.contains("maxPlayers"))
-	{
-		sstrcpy(game.map, ini.value("mapName").toString().toUtf8().constData());
-		game.hash.setZero();
-		game.maxPlayers = ini.value("maxPlayers").toInt();	// FIXME: horrible kluge, MUST match map above
-	}
-	else
-	{
-		// Set a default map to prevent hosting games without a map.
-		sstrcpy(game.map, "Sk-Rush");
-		game.hash.setZero();
-		game.maxPlayers = 4;
-	}
+
+	// Set a default map to prevent hosting games without a map.
+	sstrcpy(game.map, "Sk-Rush");
+	game.hash.setZero();
+	game.maxPlayers = 4;
+
 	game.power = ini.value("power", LEV_MED).toInt();
 	game.base = ini.value("base", CAMP_BASE).toInt();
 	game.alliance = ini.value("alliance", NO_ALLIANCES).toInt();
@@ -212,6 +205,7 @@ bool saveConfig()
 				ini.setValue("gameName", game.name);			//  last hosted game
 			}
 			ini.setValue("mapName", game.map);				//  map name
+			ini.setValue("mapHash", game.hash.toString().c_str());          //  map hash
 			ini.setValue("maxPlayers", game.maxPlayers);		// maxPlayers
 			ini.setValue("power", game.power);				// power
 			ini.setValue("base", game.base);				// size of base
@@ -267,8 +261,12 @@ bool reloadMPConfig(void)
 				sstrcpy(game.name, ini.value("gameName").toString().toUtf8().constData());
 			}
 		}
-		ini.setValue("mapName", game.map);				//  map name
-		ini.setValue("maxPlayers", game.maxPlayers);		// maxPlayers
+
+		// Set a default map to prevent hosting games without a map.
+		sstrcpy(game.map, "Sk-Rush");
+		game.hash.setZero();
+		game.maxPlayers = 4;
+
 		ini.setValue("power", game.power);				// power
 		ini.setValue("base", game.base);				// size of base
 		ini.setValue("alliance", game.alliance);		// allow alliances
@@ -282,12 +280,12 @@ bool reloadMPConfig(void)
 	{
 		sstrcpy(game.name, ini.value("gameName").toString().toUtf8().constData());
 	}
-	if (ini.contains("mapName") && ini.contains("maxPlayers"))
-	{
-		sstrcpy(game.map, ini.value("mapName").toString().toUtf8().constData());
-		game.hash.setZero();
-		game.maxPlayers = ini.value("maxPlayers").toInt();	// FIXME: horrible kluge, MUST match map above
-	}
+
+	// Set a default map to prevent hosting games without a map.
+	sstrcpy(game.map, "Sk-Rush");
+	game.hash.setZero();
+	game.maxPlayers = 4;
+
 	game.power = ini.value("power", LEV_MED).toInt();
 	game.base = ini.value("base", CAMP_BASE).toInt();
 	game.alliance = ini.value("alliance", NO_ALLIANCES).toInt();
diff --git a/src/display.cpp b/src/display.cpp
index 85c5b3e..cd98fd9 100644
--- a/src/display.cpp
+++ b/src/display.cpp
@@ -24,7 +24,6 @@
  *
  */
 
-
 #include "lib/framework/frame.h"
 #include "lib/framework/input.h"
 #include "lib/framework/strres.h"
@@ -109,6 +108,8 @@ static void	dealWithRMB( void );
 static bool	mouseInBox(SDWORD x0, SDWORD y0, SDWORD x1, SDWORD y1);
 static OBJECT_POSITION *checkMouseLoc(void);
 
+void finishDeliveryPosition(void);
+
 static bool	bInstantRadarJump = false;
 static SDWORD	desiredPitch = 340;
 static UDWORD	currentFrame;
@@ -213,7 +214,6 @@ void	setRightClickOrders( bool val )
 	bRightClickOrders = val;
 }
 
-
 bool	getMiddleClickRotate( void )
 {
 	return bMiddleClickRotate;
@@ -224,7 +224,6 @@ void	setMiddleClickRotate( bool val )
 	bMiddleClickRotate = val;
 }
 
-
 bool	getDrawShadows( void )
 {
 	return(bDrawShadows);
@@ -235,13 +234,11 @@ void	setDrawShadows( bool val )
 	bDrawShadows = val;
 }
 
-
 void	setShakeStatus( bool val )
 {
 	bShakingPermitted = val;
 }
 
-
 void shakeStart(unsigned int length)
 {
 	if(bShakingPermitted)
@@ -255,14 +252,12 @@ void shakeStart(unsigned int length)
 	}
 }
 
-
 void shakeStop(void)
 {
 	bScreenShakeActive = false;
 	player.r.z = 0;
 }
 
-
 static void shakeUpdate(void)
 {
 	UDWORD	screenShakePercentage;
@@ -290,14 +285,6 @@ static void shakeUpdate(void)
 	}
 }
 
-
-/* Initialise the display system */
-bool dispInitialise(void)
-{
-	return true;
-}
-
-
 void ProcessRadarInput()
 {
 	int PosX, PosY;
@@ -330,14 +317,9 @@ void ProcessRadarInput()
 				} else {
 
 					/* If we're tracking a droid, then cancel that */
-//					if(getWarCamStatus() == true)
-//					{
-//						camToggleStatus();
-//					}
 					CalcRadarPosition(x, y, &PosX, &PosY);
 					if(mouseOverRadar)
 					{
-					//	requestRadarTrack(PosX*TILE_UNITS,PosY*TILE_UNITS);
 						// MARKER
 						// Send all droids to that location
 						orderSelectedLoc(selectedPlayer, (PosX*TILE_UNITS)+TILE_UNITS/2,
@@ -345,7 +327,6 @@ void ProcessRadarInput()
 
 
 					}
-	//				setViewPos(PosX,PosY);
 					CheckScrollLimits();
 					audio_PlayTrack( ID_SOUND_MESSAGEEND );
 				}
@@ -396,7 +377,6 @@ void ProcessRadarInput()
 	}
 }
 
-
 // reset the input state
 void resetInput(void)
 {
@@ -405,7 +385,6 @@ void resetInput(void)
 	wallDrag.status = DRAG_INACTIVE;
 }
 
-
 /* Process the user input. This just processes the key input and jumping around the radar*/
 void processInput(void)
 {
@@ -488,13 +467,11 @@ void processInput(void)
 	}
 }
 
-
 static bool OverRadarAndNotDragging(void)
 {
 	return mouseOverRadar && dragBox3D.status != DRAG_DRAGGING && radarPermitted && wallDrag.status != DRAG_DRAGGING;
 }
 
-
 static void CheckFinishedDrag(void)
 {
 	if(driveModeActive()) {
@@ -586,7 +563,13 @@ static bool CheckFinishedFindPosition(void)
 	/* Do not let the player position buildings 'under' the radar */
 	if(mouseReleased(MOUSE_LMB) && !OverRadar)
 	{
-		if (buildState == BUILD3D_VALID)
+
+		if (deliveryReposValid())
+		{
+			finishDeliveryPosition();
+			return true;
+		}
+		else if (buildState == BUILD3D_VALID)
 		{
 			if ((((STRUCTURE_STATS *)sBuildDetails.psStats)->type == REF_WALL
 			     || ((STRUCTURE_STATS *)sBuildDetails.psStats)->type == REF_GATE
@@ -621,7 +604,6 @@ static bool CheckFinishedFindPosition(void)
 	return false;
 }
 
-
 static void HandleDrag(void)
 {
 	UDWORD dragX, dragY;
@@ -681,9 +663,6 @@ void processMouseClickInput(void)
 	MOUSE_TARGET	item=MT_NOTARGET;
 	bool OverRadar = OverRadarAndNotDragging();
 
-	// These four functions were embedded in this function but I moved them out for readability. In the
-	// absense of any comments I had a guess as to there use and named them accordingly PD 28/05/98.
-	//ignoreOrder = CheckFinishedWallDrag(); - this name is misleading since called for all Structures AB
 	ignoreOrder = CheckFinishedFindPosition();
 
 	CheckStartWallDrag();
@@ -761,6 +740,10 @@ void processMouseClickInput(void)
 				kill3DBuilding();
 				bRadarDragging = false;
 			}
+			if (mouseReleased(MOUSE_RMB))
+			{
+				cancelDeliveryRepos();
+			}
 			if (mouseDrag(MOUSE_ROTATE,(UDWORD *)&rotX,(UDWORD *)&rotY) && !rotActive && !bRadarDragging)
 			{
 				rotInitial = player.r.y;
@@ -797,13 +780,6 @@ void processMouseClickInput(void)
 		item = itemUnderMouse(&ObjUnderMouse);
 		ASSERT( item<POSSIBLE_TARGETS,"Weirdy target!" );
 
-		// alliance override. If in alli then just use the move icon. - but not if its the same player
-		//in single player, the genexp script defaults to setting an alliance between player 0 and selectedPlayer
-		/* if(ObjUnderMouse && (selectedPlayer != ObjUnderMouse->player) &&
-			aiCheckAlliances(selectedPlayer,ObjUnderMouse->player))
-		{
-			item = MT_NOTARGET;
-		} */
 		ObjAllied = (ObjUnderMouse && selectedPlayer != ObjUnderMouse->player && aiCheckAlliances(selectedPlayer,ObjUnderMouse->player));
 
 		if(item != MT_NOTARGET)
@@ -1027,7 +1003,6 @@ void processMouseClickInput(void)
 	CurrentItemUnderMouse = item;
 }
 
-
 static void calcScroll(float *y, float *dydt, float accel, float decel, float targetVelocity, float dt)
 {
 	double tMid;
@@ -1152,31 +1127,6 @@ bool CheckInScrollLimits(SDWORD *xPos,SDWORD *zPos)
 	bool EdgeHit = false;
 	SDWORD	minX,minY,maxX,maxY;
 
-	//always view that little bit more than the scroll limits...
-	/*minX = scrollMinX * TILE_UNITS;
-	minY = scrollMinY * TILE_UNITS;
-	maxX = (((scrollMaxX-1) - visibleXTiles) * TILE_UNITS);
-	maxY = (((scrollMaxY-1) - visibleYTiles) * TILE_UNITS);
-
-	if(scrollMinX==0)
-	{
-		minX = ((0 - visibleXTiles/2) * TILE_UNITS);
-	}
-
-	if((UDWORD)scrollMaxX == mapWidth)
-	{
-		maxX = ((mapWidth-1-(visibleXTiles/2)) * TILE_UNITS);
-	}
-
-	if(scrollMinY==0)
-	{
-		minY = ((0 - visibleYTiles/2) * TILE_UNITS);
-	}
-
-	if((UDWORD)scrollMaxY == mapHeight)
-	{
-		maxY = ((mapHeight-1-(visibleYTiles/2)) * TILE_UNITS);
-	}*/
 	minX = world_coord(scrollMinX);
 	maxX = world_coord(scrollMaxX - 1);
 	minY = world_coord(scrollMinY);
@@ -1211,7 +1161,6 @@ bool CheckInScrollLimits(SDWORD *xPos,SDWORD *zPos)
 	return EdgeHit;
 }
 
-
 // Check the view is within the scroll limits,
 // Returns true if edge hit.
 //
@@ -1227,8 +1176,6 @@ bool CheckScrollLimits(void)
 	return ret;
 }
 
-
-
 /* Do the 3D display */
 void displayWorld(void)
 {
@@ -1316,7 +1263,6 @@ bool DrawnInLastFrame(int32_t frame)
 	on MOUSE_LMB. We aren't concerned here with setting selection flags - just what it
 	actually was
 */
-
 BASE_OBJECT	*mouseTarget( void )
 {
 UDWORD		i;
@@ -1332,7 +1278,6 @@ UDWORD		dispX,dispY,dispR;
 		return(NULL);
 	}
 
-
 	/* We haven't found anything yet */
 	psReturn = NULL;
 
@@ -1349,10 +1294,8 @@ UDWORD		dispX,dispY,dispR;
 			dispR = psDroid->sDisplay.screenR;
 			/* Only check droids that're on screen */
 
-
-// Has the droid been drawn since the start of the last frame
+			// Has the droid been drawn since the start of the last frame
 			if (psDroid->visible[selectedPlayer] && DrawnInLastFrame(psDroid->sDisplay.frameNumber)==true)
-// 			if(psDroid->sDisplay.frameNumber+1 == currentFrame)
 			{
 				if (mouseInBox(dispX-dispR, dispY-dispR, dispX+dispR, dispY+dispR))
 				{
@@ -1378,13 +1321,6 @@ UDWORD		dispX,dispY,dispR;
 	return(psReturn);
 }
 
-// Dummy structure stats used for positioning delivery points.
-static STRUCTURE_STATS ReposStats;
-static bool ReposValid = false;
-static bool BVReposValid = false;
-static FLAG_POSITION *ReposFlag;
-FLAG_POSITION *deliveryPointToMove = NULL;
-
 void StartTacticalScrollObj(WZ_DECL_UNUSED bool driveActive, WZ_DECL_UNUSED BASE_OBJECT* psObj)
 {
 }
@@ -1393,24 +1329,23 @@ void CancelTacticalScroll(void)
 {
 }
 
-
-void displayInitVars(void)
-{
-	ReposValid = false;
-	BVReposValid = false;
-}
-
-
-
 // Start repositioning a delivery point.
 //
-void StartDeliveryPosition( OBJECT_POSITION *psLocation )
+static FLAG_POSITION flagPos;
+static int flagStructId;
+static bool flagReposVarsValid;
+static bool flagReposFinished;
+
+void startDeliveryPosition(FLAG_POSITION *psFlag)
 {
 	FLAG_POSITION	*psFlagPos;
-	STRUCTURE_STATS	*tmpStructStats;
-	BASE_STATS	*tmpBaseStats;
 
-	//clear the Deliv Point if one
+	if (tryingToGetLocation()) // if we're placing a building don't place
+	{
+		return;
+	}
+
+	//clear the selected delivery point
 	for (psFlagPos = apsFlagPosLists[selectedPlayer]; psFlagPos;
 		psFlagPos = psFlagPos->psNext)
 	{
@@ -1418,84 +1353,121 @@ void StartDeliveryPosition( OBJECT_POSITION *psLocation )
 	}
 
 	//set this object position to be highlighted
-	psLocation->selected = true;
-	deliveryPointToMove = (FLAG_POSITION*)psLocation;
+	psFlag->selected = true;
+	flagPos = *psFlag;
 
-	if(bInTutorial)
+	STRUCTURE* psStruct = findDeliveryFactory(psFlag);
+	if (!psStruct)
 	{
-		eventFireCallbackTrigger((TRIGGER_TYPE)CALL_DELIVPOINTMOVED);
+		flagStructId = 0; // not a struct, just a flag.
 	}
+	else
+	{
+		flagStructId = psStruct->id;
+	}
+	flagReposVarsValid = true;
+	flagReposFinished = false;
 
-	// Setup dummy structure stats for positioning a delivery point.
-	ReposValid = false;
-	ReposFlag = NULL;
-	ReposStats.baseWidth = 1;
-	ReposStats.baseBreadth = 1;
-	ReposStats.ref = 0;//REF_STRUCTURE_START;
-
-	//set up the buildSite variable for drawing
-	buildSite.xTL = (UWORD)psLocation->screenX;
-	buildSite.yTL = (UWORD)psLocation->screenY;
-	buildSite.xBR = (UWORD)(buildSite.xTL-1);
-	buildSite.yBR = (UWORD)(buildSite.yTL-1);
-
-	tmpStructStats = &ReposStats;
-	tmpBaseStats = (BASE_STATS *)tmpStructStats;
-	init3DBuilding(tmpBaseStats, FinishDeliveryPosition, psLocation);
+	if (bInTutorial)
+	{
+		eventFireCallbackTrigger((TRIGGER_TYPE)CALL_DELIVPOINTMOVED);
+	}
 }
 
-
 // Finished repositioning a delivery point.
 //
-void FinishDeliveryPosition(UDWORD xPos,UDWORD yPos,void *UserData)
+void finishDeliveryPosition()
 {
-	//This deals with adding waypoints and moving the primary
-	processDeliveryPoint(((FLAG_POSITION*)UserData)->player,
-		world_coord(xPos), world_coord(yPos));
-
-	//deselect it
-	((FLAG_POSITION*)UserData)->selected = false;
-	deliveryPointToMove = NULL;
-
-	CancelDeliveryRepos();
+	FLAG_POSITION* psFlagPos;
+	if (flagStructId)
+	{
+		flagReposVarsValid = false;
+		STRUCTURE* psStruct = IdToStruct(flagStructId, selectedPlayer);
+		if (StructIsFactory(psStruct) && psStruct->pFunctionality
+			&& psStruct->pFunctionality->factory.psAssemblyPoint)
+		{
+			setAssemblyPoint(psStruct->pFunctionality->factory.psAssemblyPoint,
+							 flagPos.coords.x, flagPos.coords.y, selectedPlayer, true);
+		}
+		else if (psStruct->pStructureType->type == REF_REPAIR_FACILITY)
+		{
+			setAssemblyPoint(psStruct->pFunctionality->repairFacility.psDeliveryPoint,
+							 flagPos.coords.x, flagPos.coords.y, selectedPlayer, true);
+		}
+		//deselect once moved
+		for (psFlagPos = apsFlagPosLists[selectedPlayer]; psFlagPos;
+			psFlagPos = psFlagPos->psNext)
+		{
+			psFlagPos->selected = false;
+		}
+	}
+	flagReposFinished = true;
 }
 
-
 // Is there a valid delivery point repositioning going on.
-//
-bool DeliveryReposValid(void)
+bool deliveryReposValid(void)
 {
-	if(driveModeActive()) {
-		return ReposValid && (ReposFlag !=NULL);
-	} else {
-		return BVReposValid;
+	if (!flagReposVarsValid)
+		return false;
+
+	Vector2i map = map_coord(removeZ(flagPos.coords));
+
+	//make sure we are not too near map edge
+	if (map.x < scrollMinX + TOO_NEAR_EDGE || map.x + 1 > scrollMaxX - TOO_NEAR_EDGE ||
+	    map.y < scrollMinY + TOO_NEAR_EDGE || map.y + 1 > scrollMaxY - TOO_NEAR_EDGE)
+	{
+		return false;
 	}
+
+	// cant place on top of a delivery point...
+	for (FLAG_POSITION const *psCurrFlag = apsFlagPosLists[selectedPlayer]; psCurrFlag; psCurrFlag = psCurrFlag->psNext)
+	{
+		Vector2i flagTile = map_coord(removeZ(psCurrFlag->coords));
+		if (flagTile == map)
+			return false;
+	}
+
+	if (fpathBlockingTile(map.x, map.y, PROPULSION_TYPE_WHEELED))
+	{
+		return false;
+	}
+
+	return true;
+}
+
+bool deliveryReposFinished(FLAG_POSITION *psFlag)
+{
+	if (!flagReposVarsValid)
+		return false;
+
+	if (psFlag)
+		*psFlag = flagPos;
+	return flagReposFinished;
 }
 
+void processDeliveryRepos(void)
+{
+	if (!flagReposVarsValid)
+		return;
+
+	int bX = clip(mouseTileX, 2, mapWidth - 3);
+	int bY = clip(mouseTileY, 2, mapHeight - 3);
+
+	flagPos.coords = Vector3i(world_coord(Vector2i(bX, bY))+Vector2i(TILE_UNITS/2,TILE_UNITS/2), map_TileHeight(bX, bY) + 2*ASSEMBLY_POINT_Z_PADDING);
+}
 
 // Cancel repositioning of the delivery point without moving it.
 //
-void CancelDeliveryRepos(void)
+void cancelDeliveryRepos(void)
 {
-	if((ReposValid) && (ReposFlag!=NULL))
-	{
-		if(driveModeActive())
-		{
-			DROID *Driven = driveGetDriven();
-			if(Driven != NULL) {
-//				Driven->selected = true;
-				SelectDroid(Driven);
-				camAllignWithTarget((BASE_OBJECT *)Driven);
-			}
-			driveEnableControl();
-		}
-		ReposValid = false;
-		ReposFlag = NULL;
-	}
-
-	BVReposValid = false;
+	flagReposVarsValid = false;
 }
 
+void renderDeliveryRepos(void)
+{
+	if (flagReposVarsValid)
+		renderDeliveryPoint(&flagPos, true);
+}
 
 // check whether a clicked on droid is in a command group or assigned to a sensor
 static bool droidHasLeader(DROID *psDroid)
@@ -1520,7 +1492,6 @@ static bool droidHasLeader(DROID *psDroid)
 
 	if (psLeader != NULL)
 	{
-//		psLeader->selected = true;
 		if (psLeader->type == OBJ_DROID)
 		{
 			SelectDroid((DROID *)psLeader);
@@ -1572,7 +1543,6 @@ void dealWithDroidSelect(DROID *psDroid, bool bDragBox)
 	}
 }
 
-
 static void FeedbackOrderGiven(void)
 {
 	static UDWORD LastFrame = 0;
@@ -1591,7 +1561,6 @@ bool ctrlShiftDown(void)
 	return keyDown(KEY_LCTRL) || keyDown(KEY_RCTRL) || keyDown(KEY_LSHIFT) || keyDown(KEY_RSHIFT);
 }
 
-
 void AddDerrickBurningMessage(void)
 {
 	addConsoleMessage(_("Cannot Build. Oil Resource Burning."),DEFAULT_JUSTIFY,SYSTEM_MESSAGE);
@@ -1626,7 +1595,6 @@ static void dealWithLMBDroid(DROID* psDroid, SELECTION_TYPE selection)
 
 		FeedbackOrderGiven();
 		driveDisableTactical();
-
 		return;
 	}
 
@@ -1805,13 +1773,10 @@ static void dealWithLMBDroid(DROID* psDroid, SELECTION_TYPE selection)
 
 		FeedbackOrderGiven();
 	}
-
-
 }
 
 static void dealWithLMBStructure(STRUCTURE* psStructure, SELECTION_TYPE selection)
 {
-//	clearSelection();	// Clear droid selection.
 	bool ownStruct = (psStructure->player == selectedPlayer);
 
 	if (!aiCheckAlliances(psStructure->player, selectedPlayer))
@@ -1963,7 +1928,6 @@ static void dealWithLMBFeature(FEATURE* psFeature)
 				}
 			}
 		}
-
 	}
 	else
 	{
@@ -2031,7 +1995,6 @@ void	dealWithLMB( void )
 	OBJECT_POSITION     *psLocation;
 	STRUCTURE			*psStructure;
 
-
 	/* Don't process if in game options are on screen */
 	if (mouseOverRadar ||
 	    InGameOpUp == true || widgGetFromID(psWScreen,INTINGAMEOP))
@@ -2111,40 +2074,15 @@ void	dealWithLMB( void )
 				}
 				else
 				{
-					StartDeliveryPosition(psLocation);
+					startDeliveryPosition((FLAG_POSITION *)psLocation);
 				}
-#if 0
-				/* We've clicked on one of our own DP */
-				addConsoleMessage("Clicked on your delivery point",DEFAULT_JUSTIFY,SYSTEM_MESSAGE);
-
-				/* clear the selection */
-				clearSelection();
-
-				//set this object position to be highlighted
-				psLocation->selected = true;
-			}
-			else
-			{
-				/* We've clicked on somebody else's DP - remove this sometime?*/
-				addConsoleMessage("Clicked on another player's delivery point",DEFAULT_JUSTIFY,SYSTEM_MESSAGE);
-#endif
-			}
-			break;
-
-#if 0
-		case POS_PROX:
-			if(psLocation->player == selectedPlayer)
-			{
-				displayProximityMessage((PROXIMITY_DISPLAY *)psLocation);
 			}
 			break;
-#endif
 		default:
 			ASSERT(!"unknown object position type", "Unknown type from checkMouseLoc" );
 	}
 }
 
-
 bool	getRotActive( void )
 {
 	return(rotActive);
@@ -2215,13 +2153,11 @@ static void dealWithLMBDClick(void)
 	}
 }
 
-
 /*This checks to see if the mouse was over a delivery point or a proximity message
 when the mouse button was pressed */
 static OBJECT_POSITION *	checkMouseLoc(void)
 {
 	FLAG_POSITION		*psPoint;
-	//PROXIMITY_DISPLAY	*psProxDisp;
 	UDWORD				i;
 	UDWORD				dispX,dispY,dispR;
 
@@ -2244,27 +2180,9 @@ static OBJECT_POSITION *	checkMouseLoc(void)
 			}
 		}
 	}
-	//now check for Proximity Message
-	/*for(psProxDisp = apsProxDisp[selectedPlayer]; psProxDisp; psProxDisp =
-		psProxDisp->psNext)
-	{
-		dispX = psProxDisp->screenX;
-		dispY = psProxDisp->screenY;
-		dispR = psProxDisp->screenR;
-		// Only check DP's that are on screen
-		if (DrawnInLastFrame(psProxDisp->frameNumber)==true)
-		{
-			if (mouseInBox(dispX-dispR, dispY-dispR, dispX+dispR, dispY+dispR))
-			{
-				// We HAVE clicked on Proximity Message!
-				return psProxDisp;
-			}
-		}
-	}*/
 	return NULL;
 }
 
-
 static void dealWithRMB( void )
 {
 	BASE_OBJECT			*psClickedOn;
@@ -2289,9 +2207,6 @@ static void dealWithRMB( void )
 			psDroid = (DROID *) psClickedOn;
 			if (psDroid->player == selectedPlayer)
 			{
-//				addGameMessage("Right clicked on own droid",1000,true);
-//				addConsoleMessage("Right click detected on own droid",DEFAULT_JUSTIFY,SYSTEM_MESSAGE);
-
 				if (bRightClickOrders && ctrlShiftDown())
 				{
 					dealWithDroidSelect(psDroid, false);
@@ -2395,9 +2310,6 @@ static void dealWithRMB( void )
 			if (psStructure->player == selectedPlayer)
 			{
 				/* We've clicked on our own building */
-//				addGameMessage("Right clicked on own building",1000,true);
-//				addConsoleMessage("Right clicked on own building",DEFAULT_JUSTIFY,SYSTEM_MESSAGE);
-
 				if (bRightClickOrders && intDemolishSelectMode())
 				{
 					orderSelectedObjAdd(selectedPlayer, psClickedOn, ctrlShiftDown());
@@ -2472,7 +2384,7 @@ static void dealWithRMB( void )
 					{
 						if (bRightClickOrders)
 						{
-							StartDeliveryPosition(psLocation);
+							startDeliveryPosition((FLAG_POSITION *)psLocation);
 						}
 						else
 						{
@@ -2494,44 +2406,13 @@ static void dealWithRMB( void )
 		}
 		else
 		{
-			/* Transporter orders disabled */
-#if 0
-			/* We've just clicked on an area of terrain. A 'send to' operation
-			for Transporter in multiPlay mode*/
-			if (bMultiPlayer && !bLeftClickOrders)
-			{
-				//there may be more than one Transporter selected
-				for (psDroid = apsDroidLists[selectedPlayer]; psDroid != NULL;
-					psDroid = psDroid->psNext)
-				{
-					if (psDroid->selected)
-					{
-						if (psDroid->droidType == DROID_TRANSPORTER || psDroid->droidType == DROID_SUPERTRANSPORTER)
-						{
-							orderDroidLoc(psDroid, DORDER_DISEMBARK, mouseTileX *
-								TILE_UNITS + TILE_UNITS/2, mouseTileY * TILE_UNITS +
-								TILE_UNITS/2);
-						}
-						else
-						{
-							//de-select any other units
-							psDroid->selected = false;
-						}
-					}
-				}
-			}
-			else
-#endif
-			{
-				clearSelection();
-				intObjectSelected(NULL);
-				memset(DROIDDOING, 0x0 , sizeof(DROIDDOING));	// clear string when deselected
-			}
+			clearSelection();
+			intObjectSelected(NULL);
+			memset(DROIDDOING, 0x0 , sizeof(DROIDDOING));	// clear string when deselected
 		}
 	}
 }
 
-
 /* if there is a valid object under the mouse this routine returns not only the type of the object in the
 return code, but also a pointer to the BASE_OBJECT) ... well if your going to be "object orientated" you might as well do it right
 - it sets it to null if we don't find anything
@@ -2738,12 +2619,6 @@ STRUCTURE	*psStructure;
 				{
 						retVal = MT_OWNSTRINCOMP;
 				}
-
-				// standard buildings.
-				//else if(buildingDamaged(psStructure))
-				//{
-				//	retVal = MT_OWNSTRDAM;
-				//}
 				else
 				{
 					/* All the different stages of construction */
@@ -2757,7 +2632,6 @@ STRUCTURE	*psStructure;
 		}
 	}
 
-
 	/* Send the result back - if it's null then we clicked on an area of terrain */
 	/* make unseen objects just look like terrain. */
 	if(retVal == MT_NOTARGET || !(psNotDroid->visible[selectedPlayer])  )
@@ -2767,14 +2641,12 @@ STRUCTURE	*psStructure;
 	return(retVal);
 }
 
-
 // Indicates the priority given to any given droid
 // type in a multiple droid selection, the larger the
 // number, the lower the priority. The order of entries
 // corresponds to the order of droid types in the DROID_TYPE
 // enum in DroidDef.h
 //
-//#define NUM_DROID_WEIGHTS (10)
 #define NUM_DROID_WEIGHTS (14)
 UBYTE DroidSelectionWeights[NUM_DROID_WEIGHTS] = {
 	3,	//DROID_WEAPON,
@@ -2793,7 +2665,6 @@ UBYTE DroidSelectionWeights[NUM_DROID_WEIGHTS] = {
 	10, //DROID_SUPERTRANSPORTER
 };
 
-
 /* Only deals with one type of droid being selected!!!! */
 /*	We'll have to make it assesss which selection is to be dominant in the case
 	of multiple selections */
@@ -2801,8 +2672,6 @@ static SELECTION_TYPE	establishSelection(UDWORD selectedPlayer)
 {
 DROID			*psDroid,*psDominant=NULL;
 	UBYTE	CurrWeight;
-//bool			gotWeapon = false;
-//DROID			*psWeapDroid = NULL;
 bool			atLeastOne;
 SELECTION_TYPE	selectionClass;
 
@@ -2813,23 +2682,6 @@ SELECTION_TYPE	selectionClass;
 	for(psDroid = apsDroidLists[selectedPlayer];
 			psDroid /*&& !atLeastOne*/; psDroid = psDroid->psNext)
 	{
-		// This code dos'nt work, what about the case of a selection of DROID_WEAPON types with a
-		// DROID_CONSTRUCT type grouped with them,claims to handle this but dos'nt.
-//PD		if(psDroid->selected)
-//PD		{
-//PD			atLeastOne = true;
-//PD			if(psDroid->type == DROID_WEAPON)
-//PD			{
-//PD				gotWeapon = true;
-//PD				psWeapDroid = psDroid;
-//PD			}
-//PD			if (psDroid->droidType == DROID_COMMAND ||
-//PD				psDominant == NULL)
-//PD			{
-//PD				psDominant = psDroid;
-//PD			}
-//PD		}
-
 		// This works, uses the DroidSelectionWeights[] table to priorities the different
 		// droid types and find the dominant selection.
 		if(psDroid->selected) {
@@ -2844,16 +2696,6 @@ SELECTION_TYPE	selectionClass;
 		}
 	}
 
-//	/* Weapon droids in a selection will override all others */
-//	if(psWeapDroid)
-//	{
-//		psDominant = psWeapDroid;
-//	}
-
-//	if(psDominant) {
-//		DBPRINTF(("Dominant selection type == %d\n",psDominant->droidType));
-//	}
-
 	if(atLeastOne)
 	{
 		psDominantSelected = psDominant;
@@ -2942,7 +2784,6 @@ bool	repairDroidSelected(UDWORD player)
 
 	//didn't find one...
 	return false;
-
 }
 
 /*Looks through the list of selected players droids to see if one is a VTOL droid*/
@@ -2962,7 +2803,6 @@ bool	vtolDroidSelected(UDWORD player)
 
 	//didn't find one...
 	return false;
-
 }
 
 /*Looks through the list of selected players droids to see if any is selected*/
@@ -2980,7 +2820,6 @@ bool	anyDroidSelected(UDWORD player)
 
 	//didn't find one...
 	return false;
-
 }
 
 /*Looks through the list of selected players droids to see if one is a cyborg droid*/
@@ -2998,11 +2837,8 @@ bool cyborgDroidSelected(UDWORD player)
 
 	//didn't find one...
 	return false;
-
 }
 
-
-
 /* Clear the selection flag for a player */
 void clearSel(void)
 {
@@ -3022,26 +2858,18 @@ void clearSel(void)
 		psStruct->selected = false;
 	}
 	bLasSatStruct = false;
-	//can a feature ever be selected?
-	/*for(psFeat = apsFeatureLists[0]; psFeat;
-		psFeat = psFeat->psNext)
-	{
-		psFeat->selected = false;
-	}*/
 	//clear the Deliv Point if one
 	for (psFlagPos = apsFlagPosLists[selectedPlayer]; psFlagPos;
 		psFlagPos = psFlagPos->psNext)
 	{
 		psFlagPos->selected = false;
 	}
-	deliveryPointToMove = NULL;
 
 	setSelectedGroup(UBYTE_MAX);
 	setSelectedCommander(UBYTE_MAX);
 	intRefreshScreen();
 }
 
-
 // Clear the selection and stop driver mode.
 //
 void clearSelection(void)
@@ -3055,3 +2883,10 @@ void setSensorAssigned(void)
 {
 	bSensorAssigned = true;
 }
+
+/* Initialise the display system */
+bool dispInitialise(void)
+{
+	flagReposVarsValid = false;
+	return true;
+}
diff --git a/src/display.h b/src/display.h
index 91a7d91..d8ec6ba 100644
--- a/src/display.h
+++ b/src/display.h
@@ -183,11 +183,12 @@ BASE_OBJECT	*mouseTarget( void );
 bool StartObjectOrbit(BASE_OBJECT *psObj);
 void CancelObjectOrbit(void);
 
-extern void FinishDeliveryPosition(UDWORD xPos,UDWORD yPos,void *UserData);
-extern void CancelDeliveryRepos(void);
-extern void StartDeliveryPosition( OBJECT_POSITION *psLocation );
-extern bool DeliveryReposValid(void);
-extern FLAG_POSITION *deliveryPointToMove;
+extern void cancelDeliveryRepos(void);
+extern void startDeliveryPosition(FLAG_POSITION *psFlag);
+extern bool deliveryReposValid(void);
+extern void processDeliveryRepos(void);
+extern void renderDeliveryRepos(void);
+extern bool deliveryReposFinished(FLAG_POSITION *psFlag = NULL);
 
 extern void StartTacticalScrollObj(bool driveActive,BASE_OBJECT *psObj);
 extern void CancelTacticalScroll(void);
@@ -218,8 +219,6 @@ extern void setSensorAssigned(void);
 extern void	setShakeStatus( bool val );
 extern bool	getShakeStatus( void );
 
-extern void	displayInitVars(void);
-
 void AddDerrickBurningMessage(void);
 
 // check whether the queue order keys are pressed
diff --git a/src/display3d.cpp b/src/display3d.cpp
index d9f18d6..cc8711f 100644
--- a/src/display3d.cpp
+++ b/src/display3d.cpp
@@ -1724,19 +1724,6 @@ void displayBlueprints(void)
 				blueprints.push_back(blueprint);
 			}
 		}
-		else
-		{
-			ASSERT(deliveryPointToMove != NULL, "Expected a delivery point.");
-			if (deliveryPointToMove)
-			{
-				// it's a droid (from the debug menu) or a delivery point
-				FLAG_POSITION pos = *deliveryPointToMove;
-				pos.coords.x = world_coord(sBuildDetails.x)+world_coord(1)/2;
-				pos.coords.y = world_coord(sBuildDetails.y)+world_coord(1)/2;
-				pos.coords.z = map_Height(pos.coords.x, pos.coords.y) + world_coord(1)/8;
-				renderDeliveryPoint(&pos, true);
-			}
-		}
 	}
 
 	// now we draw the blueprints for all ordered buildings
@@ -1770,6 +1757,8 @@ void displayBlueprints(void)
 	{
 		blueprint->renderBlueprint();
 	}
+
+	renderDeliveryRepos();
 }
 
 /// Draw Factory Delivery Points
@@ -2616,7 +2605,7 @@ void	renderDeliveryPoint(FLAG_POSITION *psPosition, bool blueprint)
 
 	if (blueprint)
 	{
-		colour = (buildState == BUILD3D_VALID) ? WZCOL_BLUEPRINT_VALID : WZCOL_BLUEPRINT_INVALID;
+		colour = deliveryReposValid() ? WZCOL_BLUEPRINT_VALID : WZCOL_BLUEPRINT_INVALID;
 	}
 	else
 	{
@@ -2863,7 +2852,7 @@ static void drawWeaponReloadBar(BASE_OBJECT *psObj, WEAPON *psWeap, int weapon_s
 		if (psObj->type == OBJ_DROID && isVtolDroid((DROID *)psObj))
 		{
 			//deal with VTOLs
-			firingStage = getNumAttackRuns((DROID *)psObj, weapon_slot) - ((DROID *)psObj)->sMove.iAttackRuns[weapon_slot];
+			firingStage = getNumAttackRuns((DROID *)psObj, weapon_slot) - ((DROID *)psObj)->asWeaps[weapon_slot].usedAmmo;
 
 			//compare with max value
 			interval = getNumAttackRuns((DROID *)psObj, weapon_slot);
diff --git a/src/droid.cpp b/src/droid.cpp
index 0054916..b250465 100644
--- a/src/droid.cpp
+++ b/src/droid.cpp
@@ -1898,6 +1898,7 @@ DROID *reallyBuildDroid(DROID_TEMPLATE *pTemplate, Position pos, UDWORD player,
 	// Initialise the movement stuff
 	psDroid->baseSpeed = calcDroidBaseSpeed(pTemplate, psDroid->weight, (UBYTE)player);
 
+	psDroid->sMove.asPath = NULL;
 	initDroidMovement(psDroid);
 
 	// it was never drawn before
@@ -1988,6 +1989,7 @@ DROID *buildDroid(DROID_TEMPLATE *pTemplate, UDWORD x, UDWORD y, UDWORD player,
 //initialises the droid movement model
 void initDroidMovement(DROID *psDroid)
 {
+	free(psDroid->sMove.asPath);
 	memset(&psDroid->sMove, 0, sizeof(MOVE_CONTROL));
 }
 
@@ -2021,6 +2023,7 @@ void droidSetBits(DROID_TEMPLATE *pTemplate,DROID *psDroid)
 			psDroid->asWeaps[inc].nStat = pTemplate->asWeaps[inc];
 			psDroid->asWeaps[inc].ammo = (asWeaponStats + psDroid->asWeaps[inc].nStat)->numRounds;
 		}
+		psDroid->asWeaps[inc].usedAmmo = 0;
 	}
 	//allocate the components hit points
 	psDroid->asBits[COMP_BODY].nStat = (UBYTE)pTemplate->asParts[COMP_BODY];
@@ -2963,7 +2966,7 @@ bool vtolEmpty(DROID *psDroid)
 	for (i = 0; i < psDroid->numWeaps; i++)
 	{
 		if (asWeaponStats[psDroid->asWeaps[i].nStat].vtolAttackRuns > 0 &&
-		    psDroid->sMove.iAttackRuns[i] < getNumAttackRuns(psDroid, i))
+		    psDroid->asWeaps[i].usedAmmo < getNumAttackRuns(psDroid, i))
 		{
 			return false;
 		}
@@ -2991,7 +2994,7 @@ bool vtolFull(DROID *psDroid)
 	for (i = 0; i < psDroid->numWeaps; i++)
 	{
 		if (asWeaponStats[psDroid->asWeaps[i].nStat].vtolAttackRuns > 0 &&
-		    psDroid->sMove.iAttackRuns[i] > 0)
+		    psDroid->asWeaps[i].usedAmmo > 0)
 		{
 			return false;
 		}
@@ -3177,7 +3180,7 @@ bool vtolHappy(const DROID* psDroid)
 	for (i = 0; i < psDroid->numWeaps; ++i)
 	{
 		if (asWeaponStats[psDroid->asWeaps[i].nStat].vtolAttackRuns > 0
-		 && psDroid->sMove.iAttackRuns[i] != 0)
+		 && psDroid->asWeaps[i].usedAmmo != 0)
 		{
 			return false;
 		}
@@ -3195,42 +3198,18 @@ void updateVtolAttackRun(DROID *psDroid , int weapon_slot)
 		{
 			if (asWeaponStats[psDroid->asWeaps[weapon_slot].nStat].vtolAttackRuns > 0)
 			{
-				psDroid->sMove.iAttackRuns[weapon_slot]++;
-				if (psDroid->sMove.iAttackRuns[weapon_slot] == getNumAttackRuns(psDroid, weapon_slot))
+				++psDroid->asWeaps[weapon_slot].usedAmmo;
+				if (psDroid->asWeaps[weapon_slot].usedAmmo == getNumAttackRuns(psDroid, weapon_slot))
 				{
 					psDroid->asWeaps[weapon_slot].ammo = 0;
 				}
 				//quick check doesn't go over limit
-				ASSERT( psDroid->sMove.iAttackRuns[weapon_slot] < UWORD_MAX, "too many attack runs");
+				ASSERT(psDroid->asWeaps[weapon_slot].usedAmmo < UWORD_MAX, "too many attack runs");
 			}
 		}
 	}
 }
 
-/*this mends the VTOL when it has been returned to home base whilst on an
-offworld mission*/
-void mendVtol(DROID *psDroid)
-{
-	UBYTE	i;
-	ASSERT_OR_RETURN( , vtolEmpty(psDroid), "droid is not an empty weapon VTOL!");
-
-	CHECK_DROID(psDroid);
-
-	/* set rearm value to no runs made */
-	for (i = 0;i < psDroid->numWeaps;i++)
-	{
-		psDroid->sMove.iAttackRuns[i] = 0;
-		//reset ammo and lastTimeFired
-		psDroid->asWeaps[i].ammo = asWeaponStats[psDroid->
-			asWeaps[i].nStat].numRounds;
-		psDroid->asWeaps[i].lastFired = 0;
-	}
-	/* set droid points to max */
-	psDroid->body = psDroid->originalBody;
-
-	CHECK_DROID(psDroid);
-}
-
 //assign rearmPad to the VTOL
 void assignVTOLPad(DROID *psNewDroid, STRUCTURE *psReArmPad)
 {
diff --git a/src/droid.h b/src/droid.h
index d4b93d8..6d381d8 100644
--- a/src/droid.h
+++ b/src/droid.h
@@ -286,9 +286,6 @@ extern bool vtolFull(DROID *psDroid);
 /*Checks a vtol for being fully armed and fully repaired to see if ready to
 leave reArm pad */
 extern bool  vtolHappy(const DROID* psDroid);
-/*this mends the VTOL when it has been returned to home base whilst on an
-offworld mission*/
-extern void mendVtol(DROID *psDroid);
 /*checks if the droid is a VTOL droid and updates the attack runs as required*/
 extern void updateVtolAttackRun(DROID *psDroid, int weapon_slot);
 /*returns a count of the base number of attack runs for the weapon attached to the droid*/
diff --git a/src/edit3d.cpp b/src/edit3d.cpp
index e6a5255..d59432d 100644
--- a/src/edit3d.cpp
+++ b/src/edit3d.cpp
@@ -157,7 +157,6 @@ void init3DBuilding(BASE_STATS *psStats,BUILDCALLBACK CallBack,void *UserData)
 
 void	kill3DBuilding		( void )
 {
-	CancelDeliveryRepos();
     //cancel the drag boxes
     dragBox3D.status = DRAG_INACTIVE;
     wallDrag.status = DRAG_INACTIVE;
@@ -243,7 +242,7 @@ bool found3DBuilding(UDWORD *x, UDWORD *y)
 	if (ctrlShiftDown())
 	{
 		quickQueueMode = true;
-		init3DBuilding(sBuildDetails.psStats, NULL, NULL);
+		init3DBuilding(sBuildDetails.psStats, sBuildDetails.CallBack, sBuildDetails.UserData);
 	}
 	else
 	{
@@ -280,7 +279,7 @@ bool found3DBuildLocTwo(UDWORD *px1, UDWORD *py1, UDWORD *px2, UDWORD *py2)
 	if (ctrlShiftDown())
 	{
 		quickQueueMode = true;
-		init3DBuilding(sBuildDetails.psStats, NULL, NULL);
+		init3DBuilding(sBuildDetails.psStats, sBuildDetails.CallBack, sBuildDetails.UserData);
 	}
 
 	return true;
diff --git a/src/frend.h b/src/frend.h
index 4d45732..3a646d4 100644
--- a/src/frend.h
+++ b/src/frend.h
@@ -205,6 +205,8 @@ enum
 	IMAGE_NO_VTOL,
 	IMAGE_NO_CYBORG,
 	IMAGE_NO_TANK,
+	IMAGE_NO_UPLINK,
+	IMAGE_NO_LASSAT,
 	IMAGE_EASY,
 	IMAGE_MEDIUM,
 	IMAGE_HARD,
diff --git a/src/frontend.cpp b/src/frontend.cpp
index a381fbc..f4d63db 100644
--- a/src/frontend.cpp
+++ b/src/frontend.cpp
@@ -300,6 +300,7 @@ static void SPinit(void)
 		playercolor = 0;	// default is green
 	}
 	setPlayerColour(0, playercolor);
+	game.hash.setZero();	// must reset this to zero
 }
 
 bool runSinglePlayerMenu(void)
@@ -887,7 +888,7 @@ static bool startVideoOptionsMenu(void)
 	// Shaders
 	addTextButton(FRONTEND_SHADERS, FRONTEND_POS6X-35, FRONTEND_POS7Y, _("Shaders"), 0);
 
-	if (war_GetShaders() == SHADERS_ON)
+	if (war_GetShaders() == SHADERS_ON || war_GetShaders() == SHADERS_ONLY)
 	{
 		addTextButton(FRONTEND_SHADERS_R, FRONTEND_POS6M-55, FRONTEND_POS7Y, _("On"), 0);
 	}
@@ -1063,16 +1064,18 @@ bool runVideoOptionsMenu(void)
 			{
 				case SHADERS_ON:
 					war_SetShaders(SHADERS_OFF);
+					pie_SetShaderUsage(false);
 					widgSetString(psWScreen, FRONTEND_SHADERS_R, _("Off"));
 					break;
 				case SHADERS_OFF:
 					war_SetShaders(SHADERS_ON);
+					pie_SetShaderUsage(true);
 					widgSetString(psWScreen, FRONTEND_SHADERS_R, _("On"));
 					break;
 				case FALLBACK:
+				case SHADERS_ONLY:
 					break;
 			}
-			pie_SetShaderUsage(war_GetShaders()==SHADERS_ON);
 			break;
 		}
 
@@ -1491,7 +1494,7 @@ static void displayTitleBitmap(WZ_DECL_UNUSED WIDGET *psWidget, WZ_DECL_UNUSED U
 // show warzone logo
 static void displayLogo(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, WZ_DECL_UNUSED PIELIGHT *pColours)
 {
-	iV_DrawImage(FrontImages,IMAGE_FE_LOGO,xOffset+psWidget->x,yOffset+psWidget->y);
+	iV_DrawImage(FrontImages, IMAGE_FE_LOGO, xOffset + psWidget->x, std::max<int>(yOffset + psWidget->y, 0));
 }
 
 
@@ -1675,10 +1678,10 @@ void addTopForm(void)
 
 	sFormInit.formID= FRONTEND_TOPFORM;
 	sFormInit.id	= FRONTEND_LOGO;
-	sFormInit.x		= (short)((sFormInit.width/2)-(FRONTEND_LOGOW/2)); //115;
-	sFormInit.y		= (short)((sFormInit.height/2)-(FRONTEND_LOGOH/2));//18;
-	sFormInit.width = FRONTEND_LOGOW;
-	sFormInit.height= FRONTEND_LOGOH;
+	sFormInit.x		= sFormInit.width/2  - iV_GetImageWidth(FrontImages, IMAGE_FE_LOGO)/2;
+	sFormInit.y		= sFormInit.height/2 - iV_GetImageHeight(FrontImages, IMAGE_FE_LOGO)/2;
+	sFormInit.width = iV_GetImageWidth(FrontImages, IMAGE_FE_LOGO);
+	sFormInit.height= iV_GetImageHeight(FrontImages, IMAGE_FE_LOGO);
 	sFormInit.pDisplay= displayLogo;
 	widgAddForm(psWScreen, &sFormInit);
 }
diff --git a/src/frontend.h b/src/frontend.h
index 80a6443..3af00e0 100644
--- a/src/frontend.h
+++ b/src/frontend.h
@@ -145,8 +145,6 @@ bool CancelPressed(void);
 
 #define FRONTEND_SIDEX			24
 #define FRONTEND_SIDEY			FRONTEND_BOTFORMY
-#define FRONTEND_LOGOW			248
-#define FRONTEND_LOGOH			118
 
 enum
 {
diff --git a/src/game.cpp b/src/game.cpp
index 5388c73..148b63a 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -1936,7 +1936,7 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 		pFileData = fileLoadBuffer;
 		if (!loadFileToBuffer(aFileName, pFileData, FILE_LOAD_BUFFER_SIZE, &fileSize))
 		{
-			debug( LOG_NEVER, "loadgame: Fail23\n" );
+			debug(LOG_ERROR, "Failed with: %s", aFileName);
 			goto error;
 		}
 
@@ -1946,7 +1946,7 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 		{
 			if (!loadTerrainTypeMap(pFileData, fileSize))
 			{
-				debug( LOG_NEVER, "loadgame: Fail25\n" );
+				debug(LOG_ERROR, "Failed with: %s", aFileName);
 				goto error;
 			}
 		}
@@ -1992,7 +1992,7 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 		//load the data into apsTemplates
 		if (!loadSaveTemplate(aFileName))
 		{
-			debug(LOG_NEVER, "Failed to load templates from %s", aFileName);
+			debug(LOG_ERROR, "Failed with: %s", aFileName);
 			goto error;
 		}
 	}
@@ -2015,7 +2015,7 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 		strcat(aFileName, "mission.map");
 		if (!mapLoad(aFileName, false))
 		{
-			debug(LOG_ERROR, "Failed to load map");
+			debug(LOG_ERROR, "Failed with: %s", aFileName);
 			return false;
 		}
 
@@ -2026,7 +2026,7 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 		// Load in the visibility data from the chosen file
 		if (!readVisibilityData(aFileName))
 		{
-			debug( LOG_NEVER, "loadgame: Fail33\n" );
+			debug(LOG_ERROR, "Failed with: %s", aFileName);
 			goto error;
 		}
 
@@ -2044,12 +2044,12 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 			pFileData = fileLoadBuffer;
 			if (!loadFileToBuffer(aFileName, pFileData, FILE_LOAD_BUFFER_SIZE, &fileSize))
 			{
-				debug( LOG_NEVER, "loadgame: Fail14\n" );
+				debug(LOG_ERROR, "Failed with: %s", aFileName);
 				goto error;
 			}
 			if (!loadSaveFeature(pFileData, fileSize))
 			{
-				debug( LOG_NEVER, "loadgame: Fail16\n" );
+				debug(LOG_ERROR, "Failed with: %s", aFileName);
 				goto error;
 			}
 		}
@@ -2067,13 +2067,13 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 			pFileData = fileLoadBuffer;
 			if (!loadFileToBuffer(aFileName, pFileData, FILE_LOAD_BUFFER_SIZE, &fileSize))
 			{
-				debug( LOG_NEVER, "loadgame: Fail17\n" );
+				debug(LOG_ERROR, "Failed with: %s", aFileName);
 				goto error;
 			}
 			//load the data into apsStructLists
 			if (!loadSaveStructure(pFileData, fileSize))
 			{
-				debug( LOG_NEVER, "loadgame: Fail19\n" );
+				debug(LOG_ERROR, "Failed with: %s", aFileName);
 				goto error;
 			}
 		}
@@ -2130,7 +2130,7 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 		strcat(aFileName, "game.map");
 		if (!mapLoad(aFileName, false))
 		{
-			debug( LOG_NEVER, "loadgame: Fail7\n" );
+			debug(LOG_ERROR, "Failed with: %s", aFileName);
 			return(false);
 		}
 	}
@@ -2149,7 +2149,7 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 			// load the fx data from the file
 			if (!readFXData(aFileName))
 			{
-				debug(LOG_ERROR, "loadgame: Fail33");
+				debug(LOG_ERROR, "Failed with: %s", aFileName);
 				goto error;
 			}
 		}
@@ -2206,12 +2206,12 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 			pFileData = fileLoadBuffer;
 			if (!loadFileToBuffer(aFileName, pFileData, FILE_LOAD_BUFFER_SIZE, &fileSize))
 			{
-				debug( LOG_NEVER, "loadgame: Fail8\n" );
+				debug(LOG_ERROR, "Failed with: %s", aFileName);
 				goto error;
 			}
 			if (!loadSaveDroidInit(pFileData,fileSize))
 			{
-				debug( LOG_NEVER, "loadgame: Fail10\n" );
+				debug(LOG_ERROR, "Failed with: %s", aFileName);
 				goto error;
 			}
 			debug(LOG_SAVE, "Loaded old style droids");
@@ -2284,14 +2284,14 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 		pFileData = fileLoadBuffer;
 		if (!loadFileToBuffer(aFileName, pFileData, FILE_LOAD_BUFFER_SIZE, &fileSize))
 		{
-			debug( LOG_NEVER, "loadgame: Fail14\n" );
+			debug(LOG_ERROR, "Failed with: %s", aFileName);
 			goto error;
 		}
 
 		//load the data into apsFeatureLists
 		if (!loadSaveFeature(pFileData, fileSize))
 		{
-			debug( LOG_NEVER, "loadgame: Fail16\n" );
+			debug(LOG_ERROR, "Failed with: %s", aFileName);
 			goto error;
 		}
 	}
@@ -2308,13 +2308,13 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 		pFileData = fileLoadBuffer;
 		if (!loadFileToBuffer(aFileName, pFileData, FILE_LOAD_BUFFER_SIZE, &fileSize))
 		{
-			debug( LOG_NEVER, "loadgame: Fail17\n" );
+			debug(LOG_ERROR, "Failed with: %s", aFileName);
 			goto error;
 		}
 		//load the data into apsStructLists
 		if (!loadSaveStructure(pFileData, fileSize))
 		{
-			debug( LOG_NEVER, "loadgame: Fail19\n" );
+			debug(LOG_ERROR, "Failed with: %s", aFileName);
 			goto error;
 		}
 	}
@@ -2357,7 +2357,7 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 			// Load in the visibility data from the chosen file
 			if (!readVisibilityData(aFileName))
 			{
-				debug( LOG_NEVER, "loadgame: Fail33\n" );
+				debug(LOG_ERROR, "Failed with: %s", aFileName);
 				goto error;
 			}
 		}
@@ -2375,7 +2375,7 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 			// Load the fx data from the chosen file
 			if (!readScoreData(aFileName))
 			{
-				debug( LOG_NEVER, "loadgame: Fail33\n" );
+				debug(LOG_ERROR, "Failed with: %s", aFileName);
 				goto error;
 			}
 		}
@@ -2393,7 +2393,7 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 
 			if (!readFiresupportDesignators(aFileName))
 			{
-				debug( LOG_NEVER, "loadMissionExtras: readFiresupportDesignators(%s) failed\n", aFileName );
+				debug(LOG_ERROR, "Failed with: %s", aFileName);
 				goto error;
 			}
 		}
@@ -2506,7 +2506,8 @@ bool loadGame(const char *pGameToLoad, bool keepObjects, bool freeMem, bool User
 	return true;
 
 error:
-	debug(LOG_ERROR, "Game load failed");
+	debug(LOG_ERROR, "Game load failed for %s, FS:%s, params=%s,%s,%s", pGameToLoad, PHYSFS_getRealDir(pGameToLoad),
+		keepObjects ? "true":"false", freeMem ? "true":"false", UserSaveGame ? "true":"false");
 
 	/* Clear all the objects off the map and free up the map memory */
 	freeAllDroids();
@@ -4310,9 +4311,9 @@ static bool loadSaveDroid(const char *pFileName, DROID **ppsCurrentDroidLists)
 		psDroid->sMove.iVertSpeed = ini.value("vertSpeed").toInt();
 		psDroid->sMove.bumpTime = ini.value("bumpTime").toInt();
 		psDroid->sMove.shuffleStart = ini.value("shuffleStart").toInt();
-		for (int j = 0; j < sizeof(psDroid->sMove.iAttackRuns) / sizeof(psDroid->sMove.iAttackRuns[0]); ++j)
+		for (int j = 0; j < DROID_MAXWEAPS; ++j)
 		{
-			psDroid->sMove.iAttackRuns[j] = ini.value("attackRun/" + QString::number(j)).toInt();
+			psDroid->asWeaps[j].usedAmmo = ini.value("attackRun/" + QString::number(j)).toInt();
 		}
 		psDroid->sMove.lastBump = ini.value("lastBump").toInt();
 		psDroid->sMove.pauseTime = ini.value("pauseTime").toInt();
@@ -4460,9 +4461,9 @@ static bool writeDroid(WzConfig &ini, DROID *psCurr, bool onMission, int &counte
 	ini.setValue("vertSpeed", psCurr->sMove.iVertSpeed);
 	ini.setValue("bumpTime", psCurr->sMove.bumpTime);
 	ini.setValue("shuffleStart", psCurr->sMove.shuffleStart);
-	for (int i = 0; i < sizeof(psCurr->sMove.iAttackRuns) / sizeof(psCurr->sMove.iAttackRuns[0]); ++i)
+	for (int i = 0; i < DROID_MAXWEAPS; ++i)
 	{
-		ini.setValue("attackRun/" + QString::number(i), psCurr->sMove.iAttackRuns[i]);
+		ini.setValue("attackRun/" + QString::number(i), psCurr->asWeaps[i].usedAmmo);
 	}
 	ini.setValue("lastBump", psCurr->sMove.lastBump);
 	ini.setValue("pauseTime", psCurr->sMove.pauseTime);
diff --git a/src/hci.cpp b/src/hci.cpp
index 254d64d..6d663fc 100644
--- a/src/hci.cpp
+++ b/src/hci.cpp
@@ -88,8 +88,6 @@ bool SecondaryWindowUp = false;
 
 static UDWORD		newMapWidth, newMapHeight;
 
-static FLAG_POSITION debugMenuDroidDeliveryPoint;
-
 #define RETXOFFSET (0)// Reticule button offset
 #define RETYOFFSET (0)
 #define NUMRETBUTS	7 // Number of reticule buttons.
@@ -822,7 +820,7 @@ static void intDoScreenRefresh(void)
 			if (psFlag != NULL)
 			{
 				// need to restart the delivery point position
-				StartDeliveryPosition(psFlag);
+				startDeliveryPosition(psFlag);
 			}
 
 			// make sure the commander order screen is in the right state
@@ -1355,12 +1353,17 @@ static void intProcessEditStats(UDWORD id)
 		if (psPositionStats->ref >= REF_TEMPLATE_START &&
 		    psPositionStats->ref < REF_TEMPLATE_START + REF_RANGE)
 		{
+			FLAG_POSITION debugMenuDroidDeliveryPoint;
 			// Placing a droid from the debug menu, set up the flag. (This would probably be safe to do, even if we're placing something else.)
 			debugMenuDroidDeliveryPoint.factoryType = REPAIR_FLAG;
 			debugMenuDroidDeliveryPoint.factoryInc = 0;
-			deliveryPointToMove = &debugMenuDroidDeliveryPoint;
+			debugMenuDroidDeliveryPoint.player = selectedPlayer;
+			startDeliveryPosition(&debugMenuDroidDeliveryPoint);
+		}
+		else
+		{
+			intStartStructPosition(psPositionStats);
 		}
-		intStartStructPosition(psPositionStats);
 		editPosMode = IED_POS;
 	}
 	else if (id == IDSTAT_CLOSE)
@@ -1905,9 +1908,10 @@ INT_RETVAL intRunWidgets(void)
 			/* Directly positioning some type of object */
 			unsigned structX1 = INT32_MAX;
 			unsigned structY1 = INT32_MAX;
+			FLAG_POSITION flag;
 			structX2 = INT32_MAX - 1;
 			structY2 = INT32_MAX - 1;
-			if (found3DBuildLocTwo(&structX1, &structY1, &structX2, &structY2) || found3DBuilding(&structX1, &structY1))
+			if (sBuildDetails.psStats && (found3DBuilding(&structX1, &structY1) || found3DBuildLocTwo(&structX1, &structY1, &structX2, &structY2)))
 			{
 				if (structX2 == INT32_MAX - 1)
 				{
@@ -1923,6 +1927,12 @@ INT_RETVAL intRunWidgets(void)
 					std::swap(structY1, structY2);
 				}
 			}
+			else if (deliveryReposFinished(&flag))
+			{
+				structX2 = structX1 = map_coord(flag.coords.x);
+				structY2 = structY1 = map_coord(flag.coords.y);
+			}
+
 			for (unsigned j = structY1; j <= structY2; ++j)
 				for (unsigned i = structX1; i <= structX2; ++i)
 			{
@@ -2001,6 +2011,7 @@ INT_RETVAL intRunWidgets(void)
 					psDroid = buildDroid((DROID_TEMPLATE *)psPositionStats,
 								 world_coord(structX) + TILE_UNITS / 2, world_coord(structY) + TILE_UNITS / 2,
 								 selectedPlayer, false, NULL);
+					cancelDeliveryRepos();
 					if (psDroid)
 					{
 						addDroid(psDroid, apsDroidLists);
@@ -2751,7 +2762,7 @@ static void intProcessStats(UDWORD id)
 			psFlag = FindFactoryDelivery(psStruct);
 			if (psFlag)
 			{
-				StartDeliveryPosition(psFlag);
+				startDeliveryPosition(psFlag);
 			}
 		}
 	}
@@ -2897,8 +2908,6 @@ void intCommanderSelected(DROID *psDroid)
 	widgHide(psWScreen, IDOBJ_FORM);
 }
 
-extern void FinishStructurePosition(UDWORD xPos,UDWORD yPos,void *UserData);
-
 /* Start looking for a structure location */
 static void intStartStructPosition(BASE_STATS *psStats)
 {
diff --git a/src/init.cpp b/src/init.cpp
index d7ee4e8..8549695 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -1143,7 +1143,6 @@ bool stageThreeInitialise(void)
 	// Re-inititialise some static variables.
 
 	driveInitVars(false);
-	displayInitVars();
 	resizeRadar();
 
 	setAllPauseStates(false);
diff --git a/src/levels.cpp b/src/levels.cpp
index 5b5832b..f62512a 100644
--- a/src/levels.cpp
+++ b/src/levels.cpp
@@ -176,6 +176,19 @@ Sha256 levGetFileHash(LEVEL_DATASET *level)
 	return level->realFileHash;
 }
 
+Sha256 levGetMapNameHash(char const *mapName)
+{
+	LEVEL_DATASET *level = levFindDataSet(mapName, NULL);
+	if (level == NULL)
+	{
+		debug(LOG_WARNING, "Couldn't find map \"%s\" to hash.", mapName);
+		Sha256 zero;
+		zero.setZero();
+		return zero;
+	}
+	return levGetFileHash(level);
+}
+
 // parse a level description data file
 // the ignoreWrf hack is for compatibility with old maps that try to link in various
 // data files that we have removed
@@ -635,7 +648,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 	psNewLevel = levFindDataSet(name, hash);
 	if (psNewLevel == NULL)
 	{
-		debug(LOG_WZ, "Dataset %s not found - trying to load as WRF", name);
+		debug(LOG_INFO, "Dataset %s not found - trying to load as WRF", name);
 		return levLoadSingleWRF(name);
 	}
 	debug(LOG_WZ, "** Data set found is %s type %d", psNewLevel->pName, (int)psNewLevel->type);
@@ -682,6 +695,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 				      psCurrLevel->psBaseData, psNewLevel->psBaseData, (int)psCurrLevel->type, (int)psNewLevel->type);
 				if (!levReleaseAll())	// this sets psCurrLevel to NULL
 				{
+					debug(LOG_ERROR, "Failed to release old data");
 					return false;
 				}
 			}
@@ -710,6 +724,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 	setCurrentMap(psNewLevel->realFileName, psNewLevel->players);
 	if (!rebuildSearchPath(psNewLevel->dataDir, true))
 	{
+		debug(LOG_ERROR, "Failed to rebuild search path");
 		return false;
 	}
 
@@ -719,6 +734,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 		debug(LOG_WZ, "Reseting old mission data");
 		if (!levReleaseMissionData())
 		{
+			debug(LOG_ERROR, "Failed to unload old mission data");
 			return false;
 		}
 	}
@@ -729,6 +745,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 	{
 		if (!saveGameReset())
 		{
+			debug(LOG_ERROR, "Failed to saveGameReset()!");
 			return false;
 		}
 	}
@@ -740,6 +757,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 		debug(LOG_WZ, "Calling stageOneInitialise!");
 		if (!stageOneInitialise())
 		{
+			debug(LOG_ERROR, "Failed stageOneInitialise!");
 			return false;
 		}
 	}
@@ -756,6 +774,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 				debug(LOG_WZ, "Loading [directory: %s] %s ...", PHYSFS_getRealDir(psBaseData->apDataFiles[i]), psBaseData->apDataFiles[i]);
 				if (!resLoad(psBaseData->apDataFiles[i], i))
 				{
+					debug(LOG_ERROR, "Failed resLoad(%s)!", psBaseData->apDataFiles[i]);
 					return false;
 				}
 			}
@@ -765,6 +784,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 	{
 		if (!campaignReset())
 		{
+			debug(LOG_ERROR, "Failed campaignReset()!");
 			return false;
 		}
 	}
@@ -779,6 +799,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 			{
 				if (!stageTwoInitialise())
 				{
+					debug(LOG_ERROR, "Failed stageTwoInitialise()!");
 					return false;
 				}
 			}
@@ -789,6 +810,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 				debug(LOG_WZ, "Init mission stuff");
 				if (!startMissionSave(psNewLevel->type))
 				{
+					debug(LOG_ERROR, "Failed startMissionSave(%d)!", psNewLevel->type);
 					return false;
 				}
 
@@ -799,6 +821,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 			debug(LOG_NEVER, "Loading savegame: %s", pSaveName);
 			if (!loadGame(pSaveName, false, true,true))
 			{
+				debug(LOG_ERROR, "Failed loadGame(%s)!", pSaveName);
 				return false;
 			}
 		}
@@ -809,6 +832,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 			debug(LOG_NEVER, "Start mission - no .gam");
 			if (!startMission((LEVEL_TYPE)psNewLevel->type, NULL))
 			{
+				debug(LOG_ERROR, "Failed startMission(%d)!", psNewLevel->type);
 				return false;
 			}
 		}
@@ -823,6 +847,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 			{
 				if (!stageTwoInitialise())
 				{
+					debug(LOG_ERROR, "Failed stageTwoInitialise() [camchange]!");
 					return false;
 				}
 			}
@@ -830,6 +855,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 			debug(LOG_NEVER, "loading savegame: %s", pSaveName);
 			if (!loadGame(pSaveName, false, true,true))
 			{
+				debug(LOG_ERROR, "Failed loadGame(%s)!", pSaveName);
 				return false;
 			}
 
@@ -852,6 +878,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 			{
 				if (!stageTwoInitialise())
 				{
+					debug(LOG_ERROR, "Failed stageTwoInitialise() [newdata]!");
 					return false;
 				}
 			}
@@ -865,6 +892,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 					debug(LOG_WZ, "Init mission stuff");
 					if (!startMissionSave(psNewLevel->type))
 					{
+						debug(LOG_ERROR, "Failed startMissionSave(%d)!", psNewLevel->type);
 						return false;
 					}
 
@@ -875,6 +903,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 				debug(LOG_NEVER, "Loading save game %s", pSaveName);
 				if (!loadGame(pSaveName, false, true,true))
 				{
+					debug(LOG_ERROR, "Failed loadGame(%s)!", pSaveName);
 					return false;
 				}
 			}
@@ -891,6 +920,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 					debug(LOG_WZ, "LDS_COMPLETE / LDS_CAMSTART");
 					if (!startMission(LDS_CAMSTART, psNewLevel->apDataFiles[i]))
 					{
+						debug(LOG_ERROR, "Failed startMission(%d, %s)!", LDS_CAMSTART, psNewLevel->apDataFiles[i]);
 						return false;
 					}
 					break;
@@ -898,6 +928,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 					debug(LOG_WZ, "LDS_BETWEEN");
 					if (!startMission(LDS_BETWEEN, psNewLevel->apDataFiles[i]))
 					{
+						debug(LOG_ERROR, "Failed startMission(%d, %s)!", LDS_BETWEEN, psNewLevel->apDataFiles[i]);
 						return false;
 					}
 					break;
@@ -906,6 +937,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 					debug(LOG_WZ, "LDS_MKEEP");
 					if (!startMission(LDS_MKEEP, psNewLevel->apDataFiles[i]))
 					{
+						debug(LOG_ERROR, "Failed startMission(%d, %s)!", LDS_MKEEP, psNewLevel->apDataFiles[i]);
 						return false;
 					}
 					break;
@@ -913,6 +945,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 					debug(LOG_WZ, "LDS_CAMCHANGE");
 					if (!startMission(LDS_CAMCHANGE, psNewLevel->apDataFiles[i]))
 					{
+						debug(LOG_ERROR, "Failed startMission(%d, %s)!", LDS_CAMCHANGE, psNewLevel->apDataFiles[i]);
 						return false;
 					}
 					break;
@@ -921,6 +954,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 					debug(LOG_WZ, "LDS_EXPAND");
 					if (!startMission(LDS_EXPAND, psNewLevel->apDataFiles[i]))
 					{
+						debug(LOG_ERROR, "Failed startMission(%d, %s)!", LDS_EXPAND, psNewLevel->apDataFiles[i]);
 						return false;
 					}
 					break;
@@ -928,6 +962,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 					debug(LOG_WZ, "LDS_LIMBO");
 					if (!startMission(LDS_EXPAND_LIMBO, psNewLevel->apDataFiles[i]))
 					{
+						debug(LOG_ERROR, "Failed startMission(%d, %s)!", LDS_EXPAND_LIMBO, psNewLevel->apDataFiles[i]);
 						return false;
 					}
 					break;
@@ -936,6 +971,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 					debug(LOG_WZ, "LDS_MCLEAR");
 					if (!startMission(LDS_MCLEAR, psNewLevel->apDataFiles[i]))
 					{
+						debug(LOG_ERROR, "Failed startMission(%d, %s)!", LDS_MCLEAR, psNewLevel->apDataFiles[i]);
 						return false;
 					}
 					break;
@@ -943,15 +979,16 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 					debug(LOG_WZ, "LDS_MKEEP_LIMBO");
 					if (!startMission(LDS_MKEEP_LIMBO, psNewLevel->apDataFiles[i]))
 					{
+						debug(LOG_ERROR, "Failed startMission(%d, %s)!", LDS_MKEEP_LIMBO, psNewLevel->apDataFiles[i]);
 						return false;
 					}
 					break;
 				default:
-					ASSERT( psNewLevel->type >= LDS_MULTI_TYPE_START,
-						"levLoadData: Unexpected mission type" );
+					ASSERT( psNewLevel->type >= LDS_MULTI_TYPE_START, "Unexpected mission type" );
 					debug(LOG_WZ, "default (MULTIPLAYER)");
 					if (!startMission(LDS_CAMSTART, psNewLevel->apDataFiles[i]))
 					{
+						debug(LOG_ERROR, "Failed startMission(%d, %s) (default)!", LDS_CAMSTART, psNewLevel->apDataFiles[i]);
 						return false;
 					}
 					break;
@@ -964,6 +1001,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 			debug(LOG_WZ, "Loading %s", psNewLevel->apDataFiles[i]);
 			if (!resLoad(psNewLevel->apDataFiles[i], i + CURRENT_DATAID))
 			{
+				debug(LOG_ERROR, "Failed resLoad(%s, %d) (default)!", psNewLevel->apDataFiles[i], i + CURRENT_DATAID);
 				return false;
 			}
 		}
@@ -974,6 +1012,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 		//load MidMission Extras
 		if (!loadMissionExtras(pSaveName, psNewLevel->type))
 		{
+			debug(LOG_ERROR, "Failed loadMissionExtras(%s, %d)!", pSaveName, psNewLevel->type);
 			return false;
 		}
 	}
@@ -989,12 +1028,14 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 		debug(LOG_SAVE, "Loading script system state");
 		if (!loadScriptState(pSaveName))
 		{
+			debug(LOG_ERROR, "Failed loadScriptState(%s)!", pSaveName);
 			return false;
 		}
 	}
 
 	if (!stageThreeInitialise())
 	{
+		debug(LOG_ERROR, "Failed stageThreeInitialise()!");
 		return false;
 	}
 
diff --git a/src/levels.h b/src/levels.h
index d83c440..045ad43 100644
--- a/src/levels.h
+++ b/src/levels.h
@@ -93,6 +93,7 @@ bool levLoadData(char const *name, Sha256 const *hash, char *pSaveName, GAME_TYP
 LEVEL_DATASET *levFindDataSet(char const *name, Sha256 const *hash = NULL);
 
 Sha256 levGetFileHash(LEVEL_DATASET *level);
+Sha256 levGetMapNameHash(char const *name);
 
 // free the currently loaded dataset
 extern bool levReleaseAll(void);
diff --git a/src/loop.cpp b/src/loop.cpp
index d7055e4..84c4845 100644
--- a/src/loop.cpp
+++ b/src/loop.cpp
@@ -182,6 +182,7 @@ static GAMECODE renderLoop()
 
 			//handles callbacks for positioning of DP's
 			process3DBuilding();
+			processDeliveryRepos();
 
 			//ajl. get the incoming netgame messages and process them.
 			// FIXME Previous comment is deprecated. multiPlayerLoop does some other weird stuff, but not that anymore.
diff --git a/src/main.cpp b/src/main.cpp
index d59c48d..1bf7fc1 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1123,6 +1123,9 @@ int realmain(int argc, char *argv[])
 		snprintf(buf, sizeof(buf), "%slogs%sWZlog-%02d%02d_%02d%02d%02d.txt", PHYSFS_getWriteDir(), PHYSFS_getDirSeparator(),
 			newtime->tm_mon + 1, newtime->tm_mday, newtime->tm_hour, newtime->tm_min, newtime->tm_sec );
 		debug_register_callback( debug_callback_file, debug_callback_file_init, debug_callback_file_exit, buf );
+
+		// FIXME: Change this to LOG_WZ on next release
+		debug(LOG_INFO, "Using %s debug file", buf);
 	}
 
 	// NOTE: it is now safe to use debug() calls to make sure output gets captured.
@@ -1248,13 +1251,33 @@ int realmain(int argc, char *argv[])
 	war_SetWidth(pie_GetVideoBufferWidth());
 	war_SetHeight(pie_GetVideoBufferHeight());
 
+	// Fix up settings from the config file
+	// And initialize shader usage setting
 	if (!pie_GetShaderAvailability())
 	{
 		war_SetShaders(FALLBACK);
+		pie_SetShaderUsage(false);
 	}
 	else
 	{
-		pie_SetShaderUsage(war_GetShaders()==SHADERS_ON);
+		if (war_GetShaders() == FALLBACK)
+		{
+			war_SetShaders(SHADERS_OFF);
+		}
+		if (!pie_GetFallbackAvailability())
+		{
+			war_SetShaders(SHADERS_ONLY);
+			pie_SetShaderUsage(true);
+		}
+		else if (war_GetShaders() == SHADERS_ONLY || war_GetShaders() == SHADERS_ON)
+		{
+			war_SetShaders(SHADERS_ON);
+			pie_SetShaderUsage(true);
+		}
+		else  // (war_GetShaders() == SHADERS_OFF)
+		{
+			pie_SetShaderUsage(false);
+		}
 	}
 
 	pie_SetFogStatus(false);
diff --git a/src/map.cpp b/src/map.cpp
index bd8fe69..4a4048a 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -128,8 +128,8 @@ static char *Tile_names = NULL;
 #define ROCKIE 3
 
 static int *map;			// 3D array pointer that holds the texturetype
-static int *mapDecals;		// array that tells us what tile is a decal
-#define MAX_TERRAIN_TILES 100		// max that we support (for now)
+static bool *mapDecals;           // array that tells us what tile is a decal
+#define MAX_TERRAIN_TILES 0x0200  // max that we support (for now), see TILE_NUMMASK
 
 /* Look up table that returns the terrain type of a given tile texture */
 UBYTE terrainTypes[MAX_TILE_TEXTURES];
@@ -686,21 +686,22 @@ static void SetDecals(const char *filename, const char *decal_type)
 	debug(LOG_TERRAIN, "reading: %s, with %d entries", filename, numlines);
 	//increment the pointer to the start of the next record
 	pFileData = strchr(pFileData,'\n') + 1;
-	if (numlines > MAX_TERRAIN_TILES)
-	{
-		debug(LOG_FATAL, "Too many tiles, we only support %d max at this time", MAX_TERRAIN_TILES);
-		abort();
-	}
-	mapDecals = (int *)malloc(sizeof(int)*MAX_TERRAIN_TILES);		// max of 80 tiles that we support
-	memset(mapDecals, 0x0, sizeof(int)*MAX_TERRAIN_TILES);	// set everything to false;
+	mapDecals = new bool[MAX_TERRAIN_TILES];
+	std::fill_n(mapDecals, MAX_TERRAIN_TILES, false);  // set everything to false.
 
 	for (i=0; i < numlines; i++)
 	{
+		tiledecal = -1;
 		sscanf(pFileData, "%d%n", &tiledecal, &cnt);
 		pFileData += cnt;
 		//increment the pointer to the start of the next record
 		pFileData = strchr(pFileData,'\n') + 1;
-		mapDecals[tiledecal] = 1;
+		if ((unsigned)tiledecal > MAX_TERRAIN_TILES)
+		{
+			debug(LOG_ERROR, "Tile index is out of range!  Was %d, our max is %d", tiledecal, MAX_TERRAIN_TILES);
+			continue;
+		}
+		mapDecals[tiledecal] = true;
 	}
 }
 // hasDecals()
@@ -1054,7 +1055,7 @@ bool mapShutdown(void)
 	}
 
 	free(psMapTiles);
-	free(mapDecals);
+	delete[] mapDecals;
 	free(psGroundTypes);
 	free(map);
 	free(Tile_names);
diff --git a/src/mission.cpp b/src/mission.cpp
index 0a8c303..6c23dd5 100644
--- a/src/mission.cpp
+++ b/src/mission.cpp
@@ -512,8 +512,7 @@ bool startMission(LEVEL_TYPE missionType, char *pGame)
 
 	if (!loaded)
 	{
-		debug( LOG_ERROR, "Unable to load mission file" );
-
+		debug(LOG_ERROR, "Failed to start mission, missiontype = %d, game, %s", (int)missionType, pGame);
 		return false;
 	}
 
@@ -1205,15 +1204,9 @@ bool startMissionOffClear(char *pGame)
 		return false;
 	}
 
-	//call after everything has been loaded up - done on stageThreeInit
-	//gridReset();
-
 	offWorldKeepLists = false;
 	intResetPreviousObj();
 
-	//this gets set when the timer is added in scriptFuncs
-	//mission.startTime = gameTime;
-
 	// The message should have been played at the between stage
 	missionCountDown &= ~NOT_PLAYED_ACTIVATED;
 
@@ -1232,15 +1225,9 @@ bool startMissionOffKeep(char *pGame)
 		return false;
 	}
 
-	//call after everything has been loaded up - done on stageThreeInit
-	//gridReset();
-
 	offWorldKeepLists = true;
 	intResetPreviousObj();
 
-	//this gets set when the timer is added in scriptFuncs
-	//mission.startTime = gameTime;
-
 	// The message should have been played at the between stage
 	missionCountDown &= ~NOT_PLAYED_ACTIVATED;
 
@@ -1301,9 +1288,6 @@ bool startMissionCampaignExpand(char *pGame)
 		return false;
 	}
 
-	//call after everything has been loaded up - done on stageThreeInit
-	//gridReset();
-
 	offWorldKeepLists = false;
 	return true;
 }
@@ -1918,8 +1902,6 @@ void missionMoveTransporterOffWorld( DROID *psTransporter )
 		eventFireCallbackTrigger((TRIGGER_TYPE)CALL_TRANSPORTER_OFFMAP);
 		transporterSetScriptCurrent( NULL );
 
-		//gridRemoveObject( (BASE_OBJECT *) psTransporter ); - these happen in droidRemove()
-		//clustRemoveObject( (BASE_OBJECT *) psTransporter );
 		if (droidRemove(psTransporter, apsDroidLists))
         {
 		    addDroid(psTransporter, mission.apsDroidLists);
diff --git a/src/missiondef.h b/src/missiondef.h
index c7d4d36..579275c 100644
--- a/src/missiondef.h
+++ b/src/missiondef.h
@@ -67,7 +67,6 @@ struct MISSION
 	FEATURE						*apsFeatureLists[MAX_PLAYERS];
 	BASE_OBJECT			*apsSensorList[1];
 	FEATURE				*apsOilList[1];
-	//struct _proximity_display	*apsProxDisp[MAX_PLAYERS];
 	FLAG_POSITION				*apsFlagPosLists[MAX_PLAYERS];
 	int32_t                         asCurrentPower[MAX_PLAYERS];
 
@@ -78,7 +77,6 @@ struct MISSION
 											// < 0 = none allowed
    	UDWORD				cheatTime;			//time the cheating started (mission time-wise!)
 
-	//LANDING_ZONE		homeLZ;
     UWORD               homeLZ_X;           //selectedPlayer's LZ x and y
     UWORD               homeLZ_Y;
 	SDWORD				playerX;			//original view position
@@ -89,7 +87,6 @@ struct MISSION
 	UWORD				iTranspEntryTileY[MAX_PLAYERS];
 	UWORD				iTranspExitTileX[MAX_PLAYERS];
 	UWORD				iTranspExitTileY[MAX_PLAYERS];
-
 };
 
 #endif // __INCLUDED_MISSIONDEF_H__
diff --git a/src/movedef.h b/src/movedef.h
index a4bea0c..a998099 100644
--- a/src/movedef.h
+++ b/src/movedef.h
@@ -26,9 +26,6 @@
 
 #include "lib/framework/vector.h"
 
-//Watermelon:num of VTOL weapons should be same as DROID_MAXWEAPS
-#define VTOL_MAXWEAPS 3
-
 enum MOVE_STATUS
 {
 	MOVEINACTIVE,
@@ -65,9 +62,6 @@ struct MOVE_CONTROL
 
 	/* vtol movement - GJ */
 	SWORD	iVertSpeed;
-
-	// iAttackRuns tracks the amount of ammunition a VTOL has remaining for each weapon
-	UDWORD	iAttackRuns[VTOL_MAXWEAPS];
 };
 
 #endif // __INCLUDED_MOVEDEF_H__
diff --git a/src/multiint.cpp b/src/multiint.cpp
index c2696db..ed91db4 100644
--- a/src/multiint.cpp
+++ b/src/multiint.cpp
@@ -446,18 +446,18 @@ void loadMapPreview(bool hideInterface)
 	psLevel = levFindDataSet(game.map, &game.hash);
 	if (psLevel == NULL)
 	{
-		debug(LOG_INFO, "Could not find level dataset. Probably waiting for download.");
+		debug(LOG_INFO, "Could not find level dataset \"%s\" %s. We %s waiting for a download.", game.map, game.hash.toString().c_str(), NetPlay.players[selectedPlayer].needFile? "are":"aren't");
 		loadEmptyMapPreview();
 		return;
 	}
 	setCurrentMap(psLevel->realFileName, psLevel->players);
 	if (psLevel->realFileName == NULL)
 	{
-		debug(LOG_WZ, "Loading map preview: \"%s\" builtin t%d", psLevel->pName, psLevel->dataDir);
+		debug(LOG_INFO, "Loading map preview: \"%s\" builtin t%d", psLevel->pName, psLevel->dataDir);
 	}
 	else
 	{
-		debug(LOG_WZ, "Loading map preview: \"%s\" in \"%s\" %s t%d", psLevel->pName, psLevel->realFileName, psLevel->realFileHash.toString().c_str(), psLevel->dataDir);
+		debug(LOG_INFO, "Loading map preview: \"%s\" in (%s)\"%s\"  %s t%d", psLevel->pName, PHYSFS_getRealDir(psLevel->realFileName), psLevel->realFileName, psLevel->realFileHash.toString().c_str(), psLevel->dataDir);
 	}
 	rebuildSearchPath(psLevel->dataDir, false);
 	sstrcpy(aFileName,psLevel->apDataFiles[0]);
@@ -467,7 +467,7 @@ void loadMapPreview(bool hideInterface)
 
 	if (!loadFileToBuffer(aFileName, pFileData, FILE_LOAD_BUFFER_SIZE, &fileSize))
 	{
-		debug(LOG_ERROR, "Failed to load terrain types file");
+		debug(LOG_ERROR, "Failed to load terrain types file: [%s]", aFileName);
 		return;
 	}
 	if (pFileData)
@@ -1395,7 +1395,9 @@ static const LimitIcon limitIcons[] =
 {
 	{"A0LightFactory",  N_("Tanks disabled!!"),  IMAGE_NO_TANK},
 	{"A0CyborgFactory", N_("Cyborgs disabled."), IMAGE_NO_CYBORG},
-	{"A0VTolFactory1",  N_("VTOLs disabled."),   IMAGE_NO_VTOL}
+	{"A0VTolFactory1",  N_("VTOLs disabled."),   IMAGE_NO_VTOL},
+	{"A0Sat-linkCentre", N_("Satellite Uplink disabled."), IMAGE_NO_UPLINK},
+	{"A0LasSatCommand",  N_("Laser Satellite disabled."),  IMAGE_NO_LASSAT},
 };
 
 void updateLimitFlags()
@@ -1667,7 +1669,7 @@ static void addGameOptions()
 			{
 				if (!skip)
 				{	// only add this once.
-					addBlueForm(MULTIOP_OPTIONS, MULTIOP_NO_SOMETHING, "", MULTIOP_HOSTX, MULTIOP_NO_SOMETHINGY, 41, 90 );
+					addBlueForm(MULTIOP_OPTIONS, MULTIOP_NO_SOMETHING, "", MULTIOP_HOSTX, MULTIOP_NO_SOMETHINGY, 41, 152);
 				}
 
 				addMultiBut(psWScreen, MULTIOP_NO_SOMETHING, MULTIOP_NO_SOMETHINGY + i, MULTIOP_NO_SOMETHINGX, y,
@@ -3758,7 +3760,7 @@ bool startMultiOptions(bool bReenter)
 			game.type = SKIRMISH;
 			game.scavengers = false;
 			sstrcpy(game.map, DEFAULTSKIRMISHMAP);
-			game.hash.setZero();
+			game.hash = levGetMapNameHash(game.map);
 			game.maxPlayers = 4;
 		}
 
@@ -3783,9 +3785,9 @@ bool startMultiOptions(bool bReenter)
 
 			challenge.beginGroup("challenge");
 			sstrcpy(game.map, challenge.value("Map", game.map).toString().toAscii().constData());
-			game.hash.setZero();
+			game.hash = levGetMapNameHash(game.map);
 			game.maxPlayers = challenge.value("MaxPlayers", game.maxPlayers).toInt();	// TODO, read from map itself, not here!!
-			game.scavengers = challenge.value("Scavengers", game.scavengers).toInt();
+			game.scavengers = challenge.value("Scavengers", game.scavengers).toBool();
 			game.alliance = ALLIANCES_TEAMS;
 			netPlayersUpdated = true;
 			mapDownloadProgress = 100;
diff --git a/src/multiopt.cpp b/src/multiopt.cpp
index c562652..7ed618d 100644
--- a/src/multiopt.cpp
+++ b/src/multiopt.cpp
@@ -194,7 +194,7 @@ void recvOptions(NETQUEUE queue)
 			widgSetSliderPos(psWScreen, MULTIOP_SKSLIDE + i, game.skDiff[i]);
 		}
 	}
-	debug(LOG_NET, "Rebuilding map list");
+	debug(LOG_INFO, "Rebuilding map list");
 	// clear out the old level list.
 	levShutDown();
 	levInitialise();
@@ -206,13 +206,13 @@ void recvOptions(NETQUEUE queue)
 	{
 		uint32_t player = selectedPlayer;
 
-		debug(LOG_NET, "Map was not found, requesting map %s from host.", game.map);
+		debug(LOG_INFO, "Map was not found, requesting map %s from host.", game.map);
 		// Request the map from the host
 		NETbeginEncode(NETnetQueue(NET_HOST_ONLY), NET_FILE_REQUESTED);
 		NETuint32_t(&player);
 		NETend();
 
-		addConsoleMessage("MAP REQUESTED!",DEFAULT_JUSTIFY, SYSTEM_MESSAGE);
+		addConsoleMessage("MAP REQUESTED!", DEFAULT_JUSTIFY, SYSTEM_MESSAGE);
 	}
 	else
 	{
diff --git a/src/multiplay.cpp b/src/multiplay.cpp
index dec289f..f294da5 100644
--- a/src/multiplay.cpp
+++ b/src/multiplay.cpp
@@ -970,6 +970,8 @@ bool recvResearchStatus(NETQUEUE queue)
 	// psBuilding may be null if finishing
 	if (bStart)							// Starting research
 	{
+		ResetPendingResearchStatus(pPlayerRes);  // Reset pending state, even if research state is not changed due to the structure being destroyed.
+
 		psBuilding = IdToStruct(structRef, player);
 
 		// Set that facility to research
@@ -992,7 +994,6 @@ bool recvResearchStatus(NETQUEUE queue)
 			MakeResearchStarted(pPlayerRes);
 			psResFacilty->timeStartHold		= 0;
 		}
-
 	}
 	// Finished/cancelled research
 	else
@@ -1622,7 +1623,7 @@ bool recvMapFileRequested(NETQUEUE queue)
 		addConsoleMessage("Map was requested: SENDING MAP!",DEFAULT_JUSTIFY, SYSTEM_MESSAGE);
 
 		char *mapStr = mapData->realFileName;
-		debug(LOG_NET, "Map was requested. Looking for %s", mapStr);
+		debug(LOG_INFO, "Map was requested. Looking for %s", mapStr);
 
 		// Checking to see if file is available...
 		pFileHandle = PHYSFS_openRead(mapStr);
@@ -1640,7 +1641,7 @@ bool recvMapFileRequested(NETQUEUE queue)
 
 		// get the file's size.
 		fileSize_64 = PHYSFS_fileLength(pFileHandle);
-		debug(LOG_NET, "File is valid, sending [directory: %s] %s to client %u", PHYSFS_getRealDir(mapStr), mapStr, player);
+		debug(LOG_INFO, "File is valid, sending [directory: %s] %s to client %u", PHYSFS_getRealDir(mapStr), mapStr, player);
 
 		NetPlay.players[player].wzFile.pFileHandle = pFileHandle;
 		NetPlay.players[player].wzFile.fileSize_32 = (int32_t) fileSize_64;		//we don't support 64bit int nettypes.
@@ -1664,7 +1665,7 @@ void sendMap(void)
 			if (done == 100)
 			{
 				addConsoleMessage("MAP SENT!",DEFAULT_JUSTIFY, SYSTEM_MESSAGE);
-				debug(LOG_NET, "=== File has been sent to player %d ===", i);
+				debug(LOG_INFO, "=== File has been sent to player %d ===", i);
 				NetPlay.players[i].wzFile.isSending = false;
 				NetPlay.players[i].needFile = false;
 			}
@@ -1680,7 +1681,7 @@ bool recvMapFileData(NETQUEUE queue)
 	{
 		addConsoleMessage("MAP DOWNLOADED!",DEFAULT_JUSTIFY, SYSTEM_MESSAGE);
 		sendTextMessage("MAP DOWNLOADED",true);					//send
-		debug(LOG_NET, "=== File has been received. ===");
+		debug(LOG_INFO, "=== File has been received. ===");
 
 		// clear out the old level list.
 		levShutDown();
diff --git a/src/qtscriptfuncs.cpp b/src/qtscriptfuncs.cpp
index 69b3013..680c363 100644
--- a/src/qtscriptfuncs.cpp
+++ b/src/qtscriptfuncs.cpp
@@ -2044,6 +2044,34 @@ static QScriptValue js_hackNetOn(QScriptContext *, QScriptEngine *)
 	return QScriptValue();
 }
 
+//-- \subsection{getDroidLimit([player[, unit type]])}
+//-- Return maximum number of droids that this player can produce. This limit is usually
+//-- fixed throughout a game and the same for all players. If no arguments are passed,
+//-- returns general unit limit for the current player. If a second, unit type argument 
+//-- is passed, the limit for this unit type is returned, which may be different from
+//-- the general unit limit (eg for commanders and construction droids).
+static QScriptValue js_getDroidLimit(QScriptContext *context, QScriptEngine *engine)
+{
+	if (context->argumentCount() > 1)
+	{
+		DROID_TYPE type = (DROID_TYPE)context->argument(1).toInt32();
+		if (type == DROID_COMMAND)
+		{
+			return QScriptValue(MAX_COMMAND_DROIDS);
+		}
+		else if (type == DROID_CONSTRUCT)
+		{
+			return QScriptValue(MAX_CONSTRUCTOR_DROIDS);
+		}
+		// else return general unit limit
+	}
+	if (context->argumentCount() > 0)
+	{
+		return QScriptValue(getMaxDroids(context->argument(0).toInt32()));
+	}
+	return QScriptValue(getMaxDroids(engine->globalObject().property("me").toInt32()));
+}
+
 // ----------------------------------------------------------------------------------------
 // Register functions with scripting system
 
@@ -2090,6 +2118,7 @@ bool registerFunctions(QScriptEngine *engine)
 	engine->globalObject().setProperty("isVTOL", engine->newFunction(js_isVTOL));
 	engine->globalObject().setProperty("safeDest", engine->newFunction(js_safeDest));
 	engine->globalObject().setProperty("activateStructure", engine->newFunction(js_activateStructure));
+	engine->globalObject().setProperty("getDroidLimit", engine->newFunction(js_getDroidLimit));
 
 	// Functions that operate on the current player only
 	engine->globalObject().setProperty("centreView", engine->newFunction(js_centreView));
diff --git a/src/radar.cpp b/src/radar.cpp
index 40ffd56..bd6707d 100644
--- a/src/radar.cpp
+++ b/src/radar.cpp
@@ -27,6 +27,7 @@
 #include "lib/ivis_opengl/piepalette.h"
 #include "lib/ivis_opengl/piestate.h"
 #include "lib/ivis_opengl/piefunc.h"
+#include "lib/ivis_opengl/bitimage.h"
 #include "lib/gamelib/gtime.h"
 #include "advvis.h"
 #include "objects.h"
@@ -326,7 +327,7 @@ void drawRadar(void)
 
 static void DrawNorth(void)
 {
-	iV_DrawImage(IntImages, RADAR_NORTH, -((radarWidth / 2.0) + (IntImages->ImageDefs[RADAR_NORTH].Width) + 1) , -(radarHeight / 2.0));
+	iV_DrawImage(IntImages, RADAR_NORTH, -((radarWidth / 2.0) + iV_GetImageWidth(IntImages, RADAR_NORTH) + 1), -(radarHeight / 2.0));
 }
 
 static PIELIGHT appliedRadarColour(RADAR_DRAW_MODE radarDrawMode, MAPTILE *WTile)
diff --git a/src/researchdef.h b/src/researchdef.h
index 8750626..352b2c7 100644
--- a/src/researchdef.h
+++ b/src/researchdef.h
@@ -108,6 +108,7 @@ static inline void MakeResearchStarted(PLAYER_RESEARCH *x)              { x->Res
 /// Pending means not yet synchronised, so only permitted to affect the UI, not the game state.
 static inline void MakeResearchCancelledPending(PLAYER_RESEARCH *x)     { x->ResearchStatus &= ~RESBITS_PENDING_ONLY; x->ResearchStatus |= CANCELLED_RESEARCH_PENDING; }
 static inline void MakeResearchStartedPending(PLAYER_RESEARCH *x)       { x->ResearchStatus &= ~RESBITS_PENDING_ONLY; x->ResearchStatus |= STARTED_RESEARCH_PENDING;   }
+static inline void ResetPendingResearchStatus(PLAYER_RESEARCH *x)       { x->ResearchStatus &= ~RESBITS_PENDING_ONLY;                                                  }
 
 /// clear all bits in the status except for the possible bit
 static inline void ResetResearchStatus(PLAYER_RESEARCH *x)              { x->ResearchStatus &= ~RESBITS_PENDING;                                                       }
diff --git a/src/scriptfuncs.cpp b/src/scriptfuncs.cpp
index a11e1c5..1fc1490 100644
--- a/src/scriptfuncs.cpp
+++ b/src/scriptfuncs.cpp
@@ -5640,7 +5640,8 @@ bool scrGetGameStatus(void)
 
 			break;
 		case STATUS_DeliveryReposInProgress:
-			if (DeliveryReposValid()==true) bResult=true;
+			if (deliveryReposValid())
+				bResult=true;
 			break;
 
 		default:
diff --git a/src/structure.cpp b/src/structure.cpp
index 7388706..e8b7bac 100644
--- a/src/structure.cpp
+++ b/src/structure.cpp
@@ -1008,7 +1008,7 @@ bool structSetManufacture(STRUCTURE *psStruct, DROID_TEMPLATE *psTempl, QUEUE_MO
 	                 (int)psStruct->pStructureType->type);
 	/* psTempl might be NULL if the build is being cancelled in the middle */
 
-	ASSERT_OR_RETURN(false, (validTemplateForFactory(psTempl, psStruct) && researchedTemplate(psTempl, psStruct->player)) || psStruct->player == scavengerPlayer() || !bMultiPlayer, "Wrong template for player %d factory, type %d.", psStruct->player, psStruct->pStructureType->type);
+	ASSERT_OR_RETURN(false, (validTemplateForFactory(psTempl, psStruct) && researchedTemplate(psTempl, psStruct->player, true)) || psStruct->player == scavengerPlayer() || !bMultiPlayer, "Wrong template for player %d factory, type %d.", psStruct->player, psStruct->pStructureType->type);
 
 	psFact = &psStruct->pFunctionality->factory;
 
@@ -3424,61 +3424,45 @@ static void aiUpdateStructure(STRUCTURE *psStructure, bool isMission)
 					psReArmPad->timeLastUpdated = gameTime;
 				}
 
-				// dont rearm on remote pcs.
-				// Huh?! Why not?! if(!bMultiPlayer || myResponsibility(psDroid->player))
+				/* do rearming */
+				UDWORD      pointsRequired;
+
+				//amount required is a factor of the droids' weight
+				pointsRequired = psDroid->weight / REARM_FACTOR;
+				//take numWeaps into consideration
+				pointsToAdd = psReArmPad->reArmPoints * (gameTime - psReArmPad->timeStarted) / GAME_TICKS_PER_SEC;
+				pointsAlreadyAdded = psReArmPad->reArmPoints * (psReArmPad->timeLastUpdated - psReArmPad->timeStarted) / GAME_TICKS_PER_SEC;
+				if (pointsToAdd >= pointsRequired)
 				{
-					/* do rearming */
-					if (psDroid->sMove.iAttackRuns != 0)
+					// We should be fully loaded by now.
+					for (i = 0; i < psDroid->numWeaps; i++)
 					{
-						UDWORD      pointsRequired;
-
-						//amount required is a factor of the droids' weight
-						pointsRequired = psDroid->weight / REARM_FACTOR;
-						//take numWeaps into consideration
-						pointsToAdd = psReArmPad->reArmPoints * (gameTime - psReArmPad->timeStarted) /
-						    GAME_TICKS_PER_SEC;
-						pointsAlreadyAdded = psReArmPad->reArmPoints * (psReArmPad->timeLastUpdated - psReArmPad->timeStarted) /
-						    GAME_TICKS_PER_SEC;
-						if (pointsToAdd >= pointsRequired)
+						// set rearm value to no runs made
+						psDroid->asWeaps[i].usedAmmo = 0;
+						// reset ammo and lastFired
+						psDroid->asWeaps[i].ammo = asWeaponStats[psDroid->asWeaps[i].nStat].numRounds;
+						psDroid->asWeaps[i].lastFired = 0;
+					}
+				}
+				else
+				{
+					for (i = 0; i < psDroid->numWeaps; i++)
+					{
+						// Make sure it's a rearmable weapon (and so we don't divide by zero)
+						if (psDroid->asWeaps[i].usedAmmo > 0 && asWeaponStats[psDroid->asWeaps[i].nStat].numRounds > 0)
 						{
-							// We should be fully loaded by now.
-							for (i = 0; i < psDroid->numWeaps; i++)
+							// Do not "simplify" this formula.
+							// It is written this way to prevent rounding errors.
+							int ammoToAddThisTime =
+								pointsToAdd*getNumAttackRuns(psDroid,i)/pointsRequired -
+								pointsAlreadyAdded*getNumAttackRuns(psDroid,i)/pointsRequired;
+							psDroid->asWeaps[i].usedAmmo -= std::min<unsigned>(ammoToAddThisTime, psDroid->asWeaps[i].usedAmmo);
+							if (ammoToAddThisTime)
 							{
-								// set rearm value to no runs made
-								psDroid->sMove.iAttackRuns[i] = 0;
 								// reset ammo and lastFired
 								psDroid->asWeaps[i].ammo = asWeaponStats[psDroid->asWeaps[i].nStat].numRounds;
 								psDroid->asWeaps[i].lastFired = 0;
-							}
-						}
-						else
-						{
-							for (i = 0; i < psDroid->numWeaps; i++)
-							{
-								// Make sure it's a rearmable weapon (and so we don't divide by zero)
-								if (psDroid->sMove.iAttackRuns[i] > 0 && asWeaponStats[psDroid->asWeaps[i].nStat].numRounds > 0)
-								{
-									// Do not "simplify" this formula.
-									// It is written this way to prevent rounding errors.
-									int ammoToAddThisTime =
-									    pointsToAdd*getNumAttackRuns(psDroid,i)/pointsRequired -
-									    pointsAlreadyAdded*getNumAttackRuns(psDroid,i)/pointsRequired;
-									if (ammoToAddThisTime > psDroid->sMove.iAttackRuns[i])
-									{
-										psDroid->sMove.iAttackRuns[i] = 0;
-									}
-									else if (ammoToAddThisTime > 0)
-									{
-										psDroid->sMove.iAttackRuns[i] -= ammoToAddThisTime;
-									}
-									if (ammoToAddThisTime)
-									{
-										// reset ammo and lastFired
-										psDroid->asWeaps[i].ammo = asWeaponStats[psDroid->asWeaps[i].nStat].numRounds;
-										psDroid->asWeaps[i].lastFired = 0;
-										break;
-									}
-								}
+								break;
 							}
 						}
 					}
@@ -4557,7 +4541,6 @@ static void removeStructFromMap(STRUCTURE *psStruct)
 bool removeStruct(STRUCTURE *psDel, bool bDestroy)
 {
 	bool		resourceFound = false;
-	FACTORY		*psFactory;
 	SDWORD		cluster;
 	FLAG_POSITION	*psAssemblyPoint=NULL;
 
@@ -4614,7 +4597,7 @@ bool removeStruct(STRUCTURE *psDel, bool bDestroy)
 	//if it is a factory - need to reset the factoryNumFlag
 	if (StructIsFactory(psDel))
 	{
-		psFactory = &psDel->pFunctionality->factory;
+		FACTORY *psFactory = &psDel->pFunctionality->factory;
 
 		//need to initialise the production run as well
 		cancelProduction(psDel, ModeImmediate);
@@ -4634,17 +4617,9 @@ bool removeStruct(STRUCTURE *psDel, bool bDestroy)
 		}
 
 		//need to cancel the repositioning of the DP if selectedPlayer and currently moving
-		if (psDel->player == selectedPlayer)
+		if (psDel->player == selectedPlayer && psAssemblyPoint->selected)
 		{
-			//if currently trying to place a DP
-			if (tryingToGetLocation())
-			{
-				//need to check if this factory's DP is trying to be re-positioned
-				if (psAssemblyPoint == sBuildDetails.UserData)
-				{
-					kill3DBuilding();
-				}
-			}
+			cancelDeliveryRepos();
 		}
 	}
 
@@ -5071,28 +5046,6 @@ void setFlagPositionInc(FUNCTIONALITY* pFunctionality, UDWORD player, UBYTE fact
 	ASSERT( false, "Can't set flag!");
 }
 
-
-/* called from order.c.. delivery/assembly point handler*/
-/*now called from display.c */
-void processDeliveryPoint(UDWORD player, UDWORD x, UDWORD y)
-{
-	FLAG_POSITION	*psCurrFlag;//,*psFlag;//,*psNewFlag
-
-	for (psCurrFlag = apsFlagPosLists[player]; psCurrFlag; psCurrFlag = psCurrFlag->psNext)
-	{
-		// must be selected and have a valid pos.
-		if (psCurrFlag->selected)
-		{
-			setAssemblyPoint(psCurrFlag, x, y, player, true);
-
-			//deselect once moved
-			psCurrFlag->selected = false;
-			return;	//will want to break if more than one can be selected?
-		}
-	}
-}
-
-
 /*called when a structure has been built - checks through the list of callbacks
 for the scripts*/
 void structureCompletedCallback(STRUCTURE_STATS *psStructType)
diff --git a/src/structure.h b/src/structure.h
index cd03e44..f7eabb6 100644
--- a/src/structure.h
+++ b/src/structure.h
@@ -183,9 +183,6 @@ extern bool checkStructureStatus( STRUCTURE_STATS *psStats, UDWORD player, UDWOR
 extern void setAssemblyPoint(FLAG_POSITION *psAssemblyPoint, UDWORD x, UDWORD y,
                              UDWORD player, bool bCheck);
 
-/* consider delivery points when selected by player*/
-extern void processDeliveryPoint(UDWORD player, UDWORD x, UDWORD y);
-
 /*called when a structure has been built - checks through the list of callbacks
 for the scripts*/
 extern void structureCompletedCallback(STRUCTURE_STATS *psStructType);
diff --git a/src/template.cpp b/src/template.cpp
index dce78ec..198866d 100644
--- a/src/template.cpp
+++ b/src/template.cpp
@@ -60,7 +60,27 @@ static const StringToEnum<DROID_TYPE> map_DROID_TYPE[] =
 	{"DROID",               DROID_DEFAULT           },
 };
 
-bool researchedTemplate(DROID_TEMPLATE *psCurr, int player)
+static bool researchedItem(DROID_TEMPLATE *psCurr, int player, COMPONENT_TYPE partIndex, int part, bool allowZero, bool allowRedundant)
+{
+	if (allowZero && part <= 0)
+	{
+		return true;
+	}
+	int availability = apCompLists[player][partIndex][part];
+	return availability == AVAILABLE || (allowRedundant && availability == REDUNDANT);
+}
+
+static bool researchedPart(DROID_TEMPLATE *psCurr, int player, COMPONENT_TYPE partIndex, bool allowZero, bool allowRedundant)
+{
+	return researchedItem(psCurr, player, partIndex, psCurr->asParts[partIndex], allowZero, allowRedundant);
+}
+
+static bool researchedWeap(DROID_TEMPLATE *psCurr, int player, int weapIndex, bool allowRedundant)
+{
+	return researchedItem(psCurr, player, COMP_WEAPON, psCurr->asWeaps[weapIndex], false, allowRedundant);
+}
+
+bool researchedTemplate(DROID_TEMPLATE *psCurr, int player, bool allowRedundant)
 {
 	// super hack -- cyborgs and transports are special, only check their body
 	switch (psCurr->droidType)
@@ -72,25 +92,25 @@ bool researchedTemplate(DROID_TEMPLATE *psCurr, int player)
 	case DROID_CYBORG_REPAIR:
 	case DROID_TRANSPORTER:
 	case DROID_SUPERTRANSPORTER:
-		return (apCompLists[player][COMP_BODY][psCurr->asParts[COMP_BODY]] == AVAILABLE);
+		return researchedPart(psCurr, player, COMP_BODY, false, allowRedundant);
 	default:
 		break; // now proceed to normal droids...
 	}
 	// Note the ugly special case for commanders - their weapon is unavailable
-	// NOTE: This is one ugly & hard to debug if statement.
-	if (apCompLists[player][COMP_BODY][psCurr->asParts[COMP_BODY]] != AVAILABLE
-	    || (psCurr->asParts[COMP_BRAIN] > 0 && apCompLists[player][COMP_BRAIN][psCurr->asParts[COMP_BRAIN]] != AVAILABLE)
-	    || apCompLists[player][COMP_PROPULSION][psCurr->asParts[COMP_PROPULSION]] != AVAILABLE
-	    || (psCurr->asParts[COMP_SENSOR] > 0 && apCompLists[player][COMP_SENSOR][psCurr->asParts[COMP_SENSOR]] != AVAILABLE)
-	    || (psCurr->asParts[COMP_ECM] > 0 && apCompLists[player][COMP_ECM][psCurr->asParts[COMP_ECM]] != AVAILABLE)
-	    || (psCurr->asParts[COMP_REPAIRUNIT] > 0 && apCompLists[player][COMP_REPAIRUNIT][psCurr->asParts[COMP_REPAIRUNIT]] != AVAILABLE)
-	    || (psCurr->asParts[COMP_CONSTRUCT] > 0 && apCompLists[player][COMP_CONSTRUCT][psCurr->asParts[COMP_CONSTRUCT]] != AVAILABLE)
-	    || (psCurr->asParts[COMP_BRAIN] == 0 && psCurr->numWeaps > 0 && apCompLists[player][COMP_WEAPON][psCurr->asWeaps[0]] != AVAILABLE)
-	    || (psCurr->numWeaps > 1 && apCompLists[player][COMP_WEAPON][psCurr->asWeaps[1]] != AVAILABLE))
+	// NOTE: This was one ugly & hard to debug if statement.
+	bool researchedEverything = researchedPart(psCurr, player, COMP_BODY,       false, allowRedundant)
+	                         && researchedPart(psCurr, player, COMP_BRAIN,      true,  allowRedundant)
+	                         && researchedPart(psCurr, player, COMP_PROPULSION, false, allowRedundant)
+	                         && researchedPart(psCurr, player, COMP_SENSOR,     true,  allowRedundant)
+	                         && researchedPart(psCurr, player, COMP_ECM,        true,  allowRedundant)
+	                         && researchedPart(psCurr, player, COMP_REPAIRUNIT, true,  allowRedundant)
+	                         && researchedPart(psCurr, player, COMP_CONSTRUCT,  true,  allowRedundant);
+	unsigned ignoreFirstWeapon = psCurr->asParts[COMP_BRAIN] != 0? 1 : 0;
+	for (unsigned weapIndex = ignoreFirstWeapon; weapIndex < psCurr->numWeaps && researchedEverything; ++weapIndex)
 	{
-		return false;
+		researchedEverything = researchedWeap(psCurr, player, weapIndex, allowRedundant);
 	}
-	return true;
+	return researchedEverything;
 }
 
 bool initTemplates()
diff --git a/src/template.h b/src/template.h
index c7d6626..fe8eb4a 100644
--- a/src/template.h
+++ b/src/template.h
@@ -35,6 +35,6 @@ a string ID or something the user types in*/
 const char* getTemplateName(const DROID_TEMPLATE *psTemplate);
 
 /// Have we researched the components of this template?
-bool researchedTemplate(DROID_TEMPLATE *psCurr, int player);
+bool researchedTemplate(DROID_TEMPLATE *psCurr, int player, bool allowRedundant = false);
 
 #endif // TEMPLATE_H
diff --git a/src/transporter.cpp b/src/transporter.cpp
index a3014be..f3f64b6 100644
--- a/src/transporter.cpp
+++ b/src/transporter.cpp
@@ -1437,6 +1437,7 @@ void transporterAddDroid(DROID *psTransporter, DROID *psDroidToAdd)
 	{
 		visRemoveVisibility((BASE_OBJECT *)psDroidToAdd);
 	}
+	fpathRemoveDroidData(psDroidToAdd->id);
 
 	// This is called by droidRemove. But we still need to refresh after adding to the transporter group.
 	intRefreshScreen();
diff --git a/src/version.cpp b/src/version.cpp
index c5d2668..5e125ef 100644
--- a/src/version.cpp
+++ b/src/version.cpp
@@ -47,7 +47,7 @@ unsigned int version_getRevision()
 
 const char* version_getVersionString()
 {
-	static const char* version_string = "3.1 beta11";
+	static const char* version_string = "3.1 rc2";
 
 	if (version_string == NULL)
 	{
diff --git a/src/warzoneconfig.h b/src/warzoneconfig.h
index b56f095..cee01fb 100644
--- a/src/warzoneconfig.h
+++ b/src/warzoneconfig.h
@@ -52,8 +52,9 @@ enum FSAA_LEVEL
 enum RENDER_MODE
 {
 	FALLBACK,	/// Shaders not supported
-	SHADERS_OFF,/// Shaders supported but off
-	SHADERS_ON,	///  Shaders supported and on
+	SHADERS_OFF,/// Shaders supported but off (fallback supported)
+	SHADERS_ON,	/// Shaders supported and on (fallback supported)
+	SHADERS_ONLY/// Shaders but no fallback support
 };
 /***************************************************************************/
 /*
diff --git a/src/weapondef.h b/src/weapondef.h
index ed7c5e7..0e7d951 100644
--- a/src/weapondef.h
+++ b/src/weapondef.h
@@ -32,6 +32,7 @@ struct WEAPON
 	uint32_t        shotsFired;
 	Rotation	rot;
 	Rotation	prevRot;
+	unsigned        usedAmmo;    ///< Amount of ammunition used up by a VTOL
 };
 
 // Defined in droid.cpp.
diff --git a/win32/warzone2100.rc b/win32/warzone2100.rc
index 066e072..37673e5 100644

Attachment: signature.asc
Description: This is a digitally signed message part


--- End Message ---
--- Begin Message ---
On Fri, 2013-01-11 at 10:56 +0800, Paul Wise wrote:
> Control: retitle 685913 RM: warzone2100/3.1~beta11-2
> 
> On Sat, 2012-10-13 at 08:02 +0800, Paul Wise wrote:
> 
> > No final release yet, but I just noticed now there has been an rc3
> > released a few days ago. I'd prefer to upload and unblock rc2 first,
> > otherwise the diff to review will probably be larger than your
> > thresholds.
> 
> Talking with upstream, it seems that the release is a while away, the
> total changes needed will probably be too big to review and they don't
> really want an old beta in stable. Please remove warzone2100 from
> testing, I will maintain a backport for the life of wheezy instead.

Okay, thanks for the update; hint added. Apologies for not finally
deciding on this at an earlier stage. :-(

Regards,

Adam

--- End Message ---

Reply to: