Merge pull request #33 from bananaoomarang/cmakeWarnings
authorVittorio Giovara <vittorio.giovara@gmail.com>
Mon, 09 Nov 2015 18:37:57 +0100
changeset 11334 8ce376b16132
parent 11331 14de659a4b79 (diff)
parent 11333 facac91c7c65 (current diff)
child 11335 dfcbc2639ade
Merge pull request #33 from bananaoomarang/cmakeWarnings Remove quotes when checking Haskell Modules to adopt CMP0054
--- a/.hgignore	Sun Apr 26 13:02:38 2015 +0100
+++ b/.hgignore	Mon Nov 09 18:37:57 2015 +0100
@@ -26,7 +26,7 @@
 glob:*.diff
 glob:vittorio.*
 glob:project_files/HedgewarsMobile/Data/
-glob:project_files/HedgewarsMobile/build/
+glob:project_files/HedgewarsMobile/Build/
 glob:gameServer/dist/
 glob:misc/liblua/Xcode/build/
 glob:misc/libphysfs/Xcode/build/
@@ -65,3 +65,18 @@
 glob:*.tar.*
 glob:*.or
 glob:*.res
+glob:Hedgewars.app/*
+glob:tools/CreateMacBundle.cmake
+glob:share/Info.plist
+glob:CTestTestfile.cmake
+glob:arch.c
+glob:*.swp
+glob:*~.nib
+glob:*.pbxuser
+glob:*.perspective
+glob:*.perspectivev3
+glob:*.project.xcworkspace
+glob:*.xcuserdata
+glob:xcuserdata
+glob:*.mode1v3
+glob:*.mode2v3
--- a/.hgtags	Sun Apr 26 13:02:38 2015 +0100
+++ b/.hgtags	Mon Nov 09 18:37:57 2015 +0100
@@ -61,3 +61,12 @@
 2fc02902c7cbf3c29bfe08a50e5f37983582b251 0.9.18-release
 1617149e01a4fa25637e2ab655d0287ef9c21b7c 0.9.19-release
 af0520a6bf0061b27f8321514d35fcd2b1ef5f9c 0.9.20-release
+7e55468ffe384a3065524c483eb5e3cdb1658fd5 0.9.21-release
+7e55468ffe384a3065524c483eb5e3cdb1658fd5 fab746a3597e
+0f5961910e2712582b162abd08ae3eed330cc978 Nice one
+d9622394ec9c2974a84b9b4d9e6c0ac26c4060ff 0.9.22-RC
+0f5961910e2712582b162abd08ae3eed330cc978 Nice one
+0000000000000000000000000000000000000000 Nice one
+4c4f22cc3fa4e6c1e5cd6cce35350dd93478415f 0.9.22-release
+4c4f22cc3fa4e6c1e5cd6cce35350dd93478415f 0.9.22-release
+9621fdcad96589b3fd78713a0f31e72f26f068bb 0.9.22-release
--- a/CMakeLists.txt	Sun Apr 26 13:02:38 2015 +0100
+++ b/CMakeLists.txt	Mon Nov 09 18:37:57 2015 +0100
@@ -32,6 +32,7 @@
 
 option(MINIMAL_FLAGS "Respect system flags as much as possible (off)" OFF)
 option(NOAUTOUPDATE "Disable OS X Sparkle update checking (off)" OFF)
+option(SKIPBUNDLE "Do not create relocate bundle (off)" OFF)
 
 option(BUILD_ENGINE_C "Compile hwengine as native C (off)" OFF)
 option(GL2 "Enable OpenGL 2 rendering !!!EXPERIMENTAL - DO NOT USE!!! [default: off)" OFF)
@@ -51,8 +52,8 @@
 #versioning
 set(CPACK_PACKAGE_VERSION_MAJOR 0)
 set(CPACK_PACKAGE_VERSION_MINOR 9)
-set(CPACK_PACKAGE_VERSION_PATCH 22)
-set(HEDGEWARS_PROTO_VER 50)
+set(CPACK_PACKAGE_VERSION_PATCH 23)
+set(HEDGEWARS_PROTO_VER 52)
 set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
 include(${CMAKE_MODULE_PATH}/revinfo.cmake)
 
--- a/CREDITS	Sun Apr 26 13:02:38 2015 +0100
+++ b/CREDITS	Mon Nov 09 18:37:57 2015 +0100
@@ -46,6 +46,8 @@
 ==========
 - John Dum <fizzy@gmail.com> -> Nature theme
 - Jonatan Nilsson <jonatanfan@gmail.com> -> Pirate theme, City theme, Oriental theme, Snow theme
+- yd - http://opengameart.org/users/yd -> "oriented", used as Olympics SD theme
+- Kevin MacLeod - http://incompetech.com/ -> "hitman", used as basis for preliminary default SD theme
 
 ==========
 = THEMES
--- a/ChangeLog.txt	Sun Apr 26 13:02:38 2015 +0100
+++ b/ChangeLog.txt	Mon Nov 09 18:37:57 2015 +0100
@@ -1,11 +1,45 @@
 + features
 * bugfixes
 
+0.9.22 -> 0.9.23
+ * Hammer damage is now rounded down. This means it will cause NO DAMAGE to a hedgehog with less than 3 hp.
+ * Fixed bee not being affected by wrap world edge while still being thrown
+ * Fixed turn not ending when sticky mine was trapped on rubberband
+
+0.9.21 -> 0.9.22
+ + New Weapon / Map object: AirMine (floating mine that will follow nearby hedgehogs)
+ + Extensive changes to TechRacer: Variable terrain types, enhanced parameters, hwmap interpreter, fuel limiter, etc. 
+ + HedgeEditor - create missions/etc. in-game! see http://hedgewars.org/HedgeEditor
+ + Map previews can now take script parameters into account and preview waypoints in TechRacer
+ + Added a couple new flags
+ + Various tweaks to the interface and in-game chat
+ + Divided teams options will now just be ignored when more/less than 2 teams/clans, instead of displaying a fatal error
+ + Added 6 TechRacer maps to TechMaps
+ + Added 3 SpeedShoppa Challenges: Shoppa Love, Ropes and Crates, The Customer is King
+ + Hammer damage is now rounded up. This means it can be used to execute hedgehogs with only 1 hp.
+ + Improved "Art" theme.
+ * Generated bridges/girders are now connected better to the land mass
+ * Fixed rubberband sprite
+ * Fixed Wind-Indicator being wrong in certain situations
+ * Melon Bomb Pieces now bounce on Rubberband
+ * Reduced menu music volume
+ * The game will now fallback to default voicepack if a team's voicepack is not locally installed. (Instead of rendering team voiceless)
+ * Hammer now does more damage when the Extra-Damage utility is used
+ * Many other bug fixes
+
+Lua-API:
+ + New map parameter: MapFeatureSize -- numeric representation of detail slider below map preview; use within onGameInit()/onPreviewInit()
+ + New function: SetMaxBuildDistance([ distInPx ]) -- specify how many pixels away a hedgehog can still place girders/etc. set to 0 for no limit; call with no param to reset to default
+ + New hook: onSuddenDeath() -- called by engine when sudden death begins
+ * Previously missing gear states are now available (gstSubmersible, gstFrozen and gstNoGravity)
+ * Fixed OnHogAttack giving the incorrect AmmoType (amNothing) under certain conditions
+
 0.9.20 -> 0.9.21:
  + New type of randomly generated maps: Perlin Maps.
  + Old Random generated maps are more diverse now.
  + Slider for adjusting land generation detail.
  + Highlander gamemode can now be used with custom weapon schemes (1-8=How probable to get this weapon. 9=All hogs get it)
+ + New playable themes: "Hoggywood" and "Cake"
  + New gameplay mode "Construction Mode"
  + New gameplay mode "TechRacer"
  + New game play mode "DiagonalMaze" (generates a simple diagonal maze)
--- a/QTfrontend/achievements.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/achievements.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/achievements.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/achievements.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/binds.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/binds.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/binds.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/binds.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/campaign.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/campaign.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/campaign.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/campaign.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/drawmapscene.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/drawmapscene.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/drawmapscene.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/drawmapscene.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/game.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/game.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/game.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/game.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/gameuiconfig.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/gameuiconfig.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/gameuiconfig.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/gameuiconfig.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/hwconsts.cpp.in	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/hwconsts.cpp.in	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/hwconsts.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/hwconsts.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/hwform.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/hwform.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -164,14 +164,12 @@
     ui.pageVideos->init(config);
 #endif
 
-#ifdef __APPLE__
+#if defined(__APPLE__) && defined(SPARKLE_ENABLED)
     if (config->isAutoUpdateEnabled())
     {
         AutoUpdater* updater = NULL;
 
-#ifdef SPARKLE_ENABLED
         updater = new SparkleAutoUpdater();
-#endif
         if (updater)
         {
             updater->checkForUpdates();
--- a/QTfrontend/hwform.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/hwform.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/main.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/main.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/GameStyleModel.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/model/GameStyleModel.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/GameStyleModel.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/model/GameStyleModel.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/HatModel.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/model/HatModel.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/HatModel.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/model/HatModel.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/MapModel.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/model/MapModel.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/MapModel.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/model/MapModel.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/ThemeModel.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/model/ThemeModel.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/ThemeModel.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/model/ThemeModel.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/ammoSchemeModel.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/model/ammoSchemeModel.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/ammoSchemeModel.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/model/ammoSchemeModel.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/netserverslist.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/model/netserverslist.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/netserverslist.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/model/netserverslist.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/roomslistmodel.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/model/roomslistmodel.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/model/roomslistmodel.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/model/roomslistmodel.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/hwmap.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/hwmap.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Ulyanov Igor <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -42,13 +42,14 @@
     return !m_hasStarted;
 }
 
-void HWMap::getImage(const QString & seed, int filter, MapGenerator mapgen, int maze_size, const QByteArray & drawMapData, QString & script, int feature_size)
+void HWMap::getImage(const QString & seed, int filter, MapGenerator mapgen, int maze_size, const QByteArray & drawMapData, QString & script, QString & scriptparam, int feature_size)
 {
     m_seed = seed;
     m_script = script;
+    m_scriptparam = scriptparam;
     templateFilter = filter;
     m_mapgen = mapgen;
-    m_maze_size = maze_size; // TODO replace with feature_size
+    m_maze_size = maze_size;
     m_feature_size = feature_size;
     if(mapgen == MAPGEN_DRAWN) m_drawMapData = drawMapData;
     Start(true);
@@ -125,6 +126,7 @@
     if (!m_script.isEmpty())
     {
         SendIPC(QString("escript Scripts/Multiplayer/%1.lua").arg(m_script).toUtf8());
+        SendIPC(QString("e$scriptparam %1").arg(m_scriptparam).toUtf8());
     }
 
     switch (m_mapgen)
--- a/QTfrontend/net/hwmap.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/hwmap.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -42,7 +42,7 @@
     public:
         HWMap(QObject *parent = 0);
         virtual ~HWMap();
-        void getImage(const QString & seed, int templateFilter, MapGenerator mapgen, int maze_size, const QByteArray & drawMapData, QString & script, int feature_size);
+        void getImage(const QString & seed, int templateFilter, MapGenerator mapgen, int maze_size, const QByteArray & drawMapData, QString & script, QString & scriptparam, int feature_size);
         bool couldBeRemoved();
 
     protected:
@@ -57,6 +57,7 @@
     private:
         QString m_seed;
         QString m_script;
+        QString m_scriptparam;
         int templateFilter;
         MapGenerator m_mapgen;
         int m_maze_size;  // going to try and deprecate this one
--- a/QTfrontend/net/netregister.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/netregister.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netregister.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/netregister.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netserver.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/netserver.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netserver.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/netserver.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netudpserver.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/netudpserver.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2007-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netudpserver.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/netudpserver.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2007-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netudpwidget.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/netudpwidget.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/netudpwidget.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/netudpwidget.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/newnetclient.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/newnetclient.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/newnetclient.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/newnetclient.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/proto.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/proto.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/proto.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/proto.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/recorder.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/recorder.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/recorder.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/recorder.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/tcpBase.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/tcpBase.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/net/tcpBase.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/net/tcpBase.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/res/html/about.html	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/res/html/about.html	Mon Nov 09 18:37:57 2015 +0100
@@ -35,6 +35,7 @@
         Keybinds, feedback, maps and hats interfaces: Drew Gottlieb &lt;<a href="mailto:gottlieb.drew@gmail.com">gottlieb.drew@gmail.com</a>&gt;<br>
         Login dialogs, frontend improvements: Ondrej Skopek &lt;<a href="mailto:skopekondrej@gmail.com">skopekondrej@gmail.com</a>&gt;<br>
         Icegun weapon: Julia Struchenko &lt;<a href="mailto:urbertar@gmail.com">urbertar@gmail.com</a>&gt;<br>
+        iPhone/iPad ports: Anton Malmygin &lt;<a href="mailto:antonc27@mail.ru">antonc27@mail.ru</a>&gt;<br>
         </p>
 
         <h2>Art:</h2>
@@ -82,7 +83,7 @@
             Lithuanian: Lukas Urbonas &lt;<a href="mailto:lukasu08@gmail.com">lukasu08@gmail.com</a>&gt;<br>
             Polish: Maciej Mroziński &lt;<a href="mailto:mynick2@o2.pl">mynick2@o2.pl</a>&gt;, Wojciech Latkowski &lt;<a href="mailto:magik17l@gmail.com">magik17l@gmail.com</a>&gt;, Piotr Mitana, Maciej Górny<br>
             Portuguese: Fábio Canário &lt;<a href="mailto:inufabie@gmail.com">inufabie@gmail.com</a>&gt;<br>
-            Russian: Andrey Korotaev &lt;<a href="mailto:unC0Rr@gmail.com">unC0Rr@gmail.com</a>&gt;, Vitaly Novichkov &lt;<a href="mailto:admin@wohlnet.ru">admin@wohlnet.ru</a>&gt;<br>
+            Russian: Andrey Korotaev &lt;<a href="mailto:unC0Rr@gmail.com">unC0Rr@gmail.com</a>&gt;, Vitaly Novichkov &lt;<a href="mailto:admin@wohlnet.ru">admin@wohlnet.ru</a>&gt;, Anton Malmygin &lt;<a href="mailto:antonc27@mail.ru">antonc27@mail.ru</a>&gt;<br>
             Slovak: Jose Riha<br>
             Spanish: Carlos Vives &lt;<a href="mailto:mail@carlosvives.es">mail@carlosvives.es</a>&gt;<br>
             Swedish: Niklas Grahn &lt;<a href="mailto:raewolusjoon@yaoo.com">raewolusjoon@yaoo.com</a>&gt;, Henrik Rostedt &lt;<a href="mailto:henrik.rostedt@gmail.com">henrik.rostedt@gmail.com</a>&gt;<br>
--- a/QTfrontend/sdlkeys.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/sdlkeys.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/team.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/team.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/team.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/team.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
--- a/QTfrontend/ui/dialog/ask_quit.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/dialog/ask_quit.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/dialog/ask_quit.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/dialog/ask_quit.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/dialog/input_ip.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/dialog/input_ip.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/dialog/input_ip.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/dialog/input_ip.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/dialog/input_password.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/dialog/input_password.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/dialog/input_password.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/dialog/input_password.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/dialog/upload_video.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/dialog/upload_video.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/dialog/upload_video.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/dialog/upload_video.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/AbstractPage.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/AbstractPage.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/AbstractPage.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/AbstractPage.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageadmin.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageadmin.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageadmin.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageadmin.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagecampaign.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagecampaign.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagecampaign.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagecampaign.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageconnecting.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageconnecting.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageconnecting.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageconnecting.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagedata.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagedata.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagedata.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagedata.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagedrawmap.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagedrawmap.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagedrawmap.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagedrawmap.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageeditteam.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageeditteam.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageeditteam.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageeditteam.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagegamestats.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagegamestats.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagegamestats.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagegamestats.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageinfo.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageinfo.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageinfo.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageinfo.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageingame.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageingame.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageingame.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageingame.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagemain.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagemain.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagemain.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagemain.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagemultiplayer.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagemultiplayer.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagemultiplayer.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagemultiplayer.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagenet.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagenet.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagenet.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagenet.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagenetgame.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagenetgame.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagenetgame.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagenetgame.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagenetserver.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagenetserver.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagenetserver.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagenetserver.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageoptions.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageoptions.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageoptions.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageoptions.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageplayrecord.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageplayrecord.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageplayrecord.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageplayrecord.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageroomslist.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageroomslist.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageroomslist.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageroomslist.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagescheme.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagescheme.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagescheme.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagescheme.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageselectweapon.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageselectweapon.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pageselectweapon.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pageselectweapon.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagesingleplayer.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagesingleplayer.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagesingleplayer.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagesingleplayer.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagetraining.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagetraining.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagetraining.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagetraining.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagevideos.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagevideos.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/page/pagevideos.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/page/pagevideos.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/FreqSpinBox.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/FreqSpinBox.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/FreqSpinBox.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/FreqSpinBox.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/HistoryLineEdit.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/HistoryLineEdit.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/HistoryLineEdit.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/HistoryLineEdit.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/SmartLineEdit.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/SmartLineEdit.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/SmartLineEdit.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/SmartLineEdit.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/SquareLabel.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/SquareLabel.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/SquareLabel.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/SquareLabel.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/about.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/about.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/about.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/about.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/bgwidget.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/bgwidget.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2009 Kristian Lehmann <email@thexception.net>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/bgwidget.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/bgwidget.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2009 Kristian Lehmann <email@thexception.net>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/chatwidget.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/chatwidget.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/chatwidget.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/chatwidget.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/databrowser.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/databrowser.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/databrowser.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/databrowser.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/drawmapwidget.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/drawmapwidget.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/drawmapwidget.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/drawmapwidget.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/feedbackdialog.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/feedbackdialog.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/feedbackdialog.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/feedbackdialog.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/fpsedit.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/fpsedit.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/fpsedit.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/fpsedit.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/frameTeam.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/frameTeam.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/frameTeam.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/frameTeam.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/gamecfgwidget.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/gamecfgwidget.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -459,7 +459,7 @@
         if (param == "SCRIPT")
         {
             Scripts->setCurrentIndex(Scripts->findText(value));
-            pMapContainer->setScript(Scripts->itemData(Scripts->currentIndex(), GameStyleModel::ScriptRole).toString().toUtf8());
+            pMapContainer->setScript(Scripts->itemData(Scripts->currentIndex(), GameStyleModel::ScriptRole).toString().toUtf8(), schemeData(43).toString());
             return;
         }
         if (param == "DRAWNMAP")
@@ -606,6 +606,7 @@
             }
         }
     }
+    pMapContainer->setScript(Scripts->itemData(Scripts->currentIndex(), GameStyleModel::ScriptRole).toString().toUtf8(), schemeData(43).toString());
 }
 
 void GameCFGWidget::scriptChanged(int index)
@@ -661,12 +662,11 @@
     }
     if (!index)
     {
-        pMapContainer->setScript(QString(""));
+        pMapContainer->setScript(QString(""), QString(""));
     }
     else
     {
-        pMapContainer->setScript(name);
-        pMapContainer->setScript(Scripts->itemData(index, GameStyleModel::ScriptRole).toString().toUtf8());
+        pMapContainer->setScript(Scripts->itemData(index, GameStyleModel::ScriptRole).toString().toUtf8(), schemeData(43).toString());
     }
     emit paramChanged("SCRIPT", QStringList(name));
 }
--- a/QTfrontend/ui/widget/gamecfgwidget.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/gamecfgwidget.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/hatbutton.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/hatbutton.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/hatbutton.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/hatbutton.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/hatprompt.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/hatprompt.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/hatprompt.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/hatprompt.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/hedgehogerWidget.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/hedgehogerWidget.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Ulyanov Igor <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/hedgehogerWidget.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/hedgehogerWidget.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Ulyanov Igor <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/igbox.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/igbox.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/igbox.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/igbox.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/keybinder.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/keybinder.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/keybinder.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/keybinder.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/lineeditcursor.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/lineeditcursor.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/lineeditcursor.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/lineeditcursor.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/mapContainer.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/mapContainer.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -326,6 +326,7 @@
                    getMazeSize(),
                    getDrawnMapData(),
                    m_script,
+                   m_scriptparam,
 		           m_mapFeatureSize
                   );
 
@@ -431,9 +432,10 @@
         updatePreview();
 }
 
-void HWMapContainer::setScript(const QString & script)
+void HWMapContainer::setScript(const QString & script, const QString & scriptparam)
 {
     m_script = script;
+    m_scriptparam = scriptparam;
     if ((m_mapInfo.type == MapModel::GeneratedMap)
             || (m_mapInfo.type == MapModel::GeneratedMaze)
             || (m_mapInfo.type == MapModel::GeneratedPerlin)
--- a/QTfrontend/ui/widget/mapContainer.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/mapContainer.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -73,7 +73,7 @@
     public slots:
         void askForGeneratedPreview();
         void setSeed(const QString & seed);
-        void setScript(const QString & script);
+        void setScript(const QString & script, const QString & scriptparam);
         void setMap(const QString & map);
         void setTheme(const QString & theme);
         void setTemplateFilter(int);
@@ -131,6 +131,7 @@
         HWMap* pMap;
         QString m_seed;
         QString m_script;
+        QString m_scriptparam;
         QPushButton* seedSet;
         QLabel* seedLabel;
         int hhLimit;
--- a/QTfrontend/ui/widget/qpushbuttonwithsound.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/qpushbuttonwithsound.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/qpushbuttonwithsound.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/qpushbuttonwithsound.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/roomnameprompt.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/roomnameprompt.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/roomnameprompt.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/roomnameprompt.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/seedprompt.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/seedprompt.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/seedprompt.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/seedprompt.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/selectWeapon.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/selectWeapon.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/selectWeapon.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/selectWeapon.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/teamselect.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/teamselect.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/teamselect.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/teamselect.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/teamselhelper.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/teamselhelper.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/teamselhelper.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/teamselhelper.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/themeprompt.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/themeprompt.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/themeprompt.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/themeprompt.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/togglebutton.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/togglebutton.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2009 Kristian Lehmann <email@thexception.net>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/togglebutton.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/togglebutton.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2009 Kristian Lehmann <email@thexception.net>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/vertScrollArea.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/vertScrollArea.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/vertScrollArea.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/vertScrollArea.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/weaponItem.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/weaponItem.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui/widget/weaponItem.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui/widget/weaponItem.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui_hwform.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui_hwform.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/ui_hwform.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/ui_hwform.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/DataManager.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/DataManager.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/DataManager.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/DataManager.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/LibavInteraction.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/LibavInteraction.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,7 +21,9 @@
 #if VIDEOREC
 extern "C"
 {
+#include "libavcodec/avcodec.h"
 #include "libavformat/avformat.h"
+#include "libavutil/avutil.h"
 }
 
 #include <QVector>
@@ -30,13 +32,25 @@
 
 #include "HWApplication.h"
 
-#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54, 25, 0)
-#define CodecID AVCodecID
+// compatibility section
+#if LIBAVCODEC_VERSION_MAJOR < 55
+#define av_codec_is_encoder(x)          x->encode
+#define AVCodecID                       CodecID
+#endif
+
+#if LIBAVFORMAT_VERSION_MAJOR < 54
+#define avformat_find_stream_info(x, y) av_find_stream_info(x)
+#define avformat_close_input(x)         av_close_input_file(*(x))
+#endif
+
+#if LIBAVUTIL_VERSION_MAJOR < 54
+#define AVPixelFormat                   PixelFormat
+#define AV_PIX_FMT_YUV420P              PIX_FMT_YUV420P
 #endif
 
 struct Codec
 {
-    CodecID id;
+    AVCodecID id;
     bool isAudio;
     QString shortName; // used for identification
     QString longName; // used for displaying to user
@@ -56,7 +70,7 @@
 QMap<QString,Format> formats;
 
 // test if given format supports given codec
-bool FormatQueryCodec(AVOutputFormat *ofmt, enum CodecID codec_id)
+bool FormatQueryCodec(AVOutputFormat *ofmt, enum AVCodecID codec_id)
 {
 #if LIBAVFORMAT_VERSION_MAJOR >= 54
     return avformat_query_codec(ofmt, codec_id, FF_COMPLIANCE_NORMAL) == 1;
@@ -76,11 +90,7 @@
     AVCodec* pCodec = NULL;
     while ((pCodec = av_codec_next(pCodec)))
     {
-#if LIBAVCODEC_VERSION_MAJOR >= 54
         if (!av_codec_is_encoder(pCodec))
-#else
-        if (!pCodec->encode)
-#endif
             continue;
 
         if (pCodec->type != AVMEDIA_TYPE_VIDEO && pCodec->type != AVMEDIA_TYPE_AUDIO)
@@ -106,8 +116,8 @@
             if (!pCodec->pix_fmts)
                 continue;
             bool yuv420Supported = false;
-            for (const PixelFormat* pfmt = pCodec->pix_fmts; *pfmt != -1; pfmt++)
-                if (*pfmt == PIX_FMT_YUV420P)
+            for (const enum AVPixelFormat* pfmt = pCodec->pix_fmts; *pfmt != -1; pfmt++)
+                if (*pfmt == AV_PIX_FMT_YUV420P)
                 {
                     yuv420Supported = true;
                     break;
@@ -121,7 +131,7 @@
             if (!pCodec->sample_fmts)
                 continue;
             bool s16Supported = false;
-            for (const AVSampleFormat* pfmt = pCodec->sample_fmts; *pfmt != -1; pfmt++)
+            for (const enum AVSampleFormat* pfmt = pCodec->sample_fmts; *pfmt != -1; pfmt++)
                 if (*pfmt == AV_SAMPLE_FMT_S16)
                 {
                     s16Supported = true;
@@ -274,11 +284,7 @@
     QByteArray utf8path = filepath.toUtf8();
     if (avformat_open_input(&pContext, utf8path.data(), NULL, NULL) < 0)
         return "";
-#if LIBAVFORMAT_VERSION_MAJOR < 53
-    if (av_find_stream_info(pContext) < 0)
-#else
     if (avformat_find_stream_info(pContext, NULL) < 0)
-#endif
         return "";
 
     int s = float(pContext->duration)/AV_TIME_BASE;
@@ -312,11 +318,7 @@
     AVDictionaryEntry* pComment = av_dict_get(pContext->metadata, "comment", NULL, 0);
     if (pComment)
         desc += QString("\n") + pComment->value;
-#if LIBAVFORMAT_VERSION_MAJOR < 53
-    av_close_input_file(pContext);
-#else
     avformat_close_input(&pContext);
-#endif
     return desc;
 }
 
--- a/QTfrontend/util/LibavInteraction.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/LibavInteraction.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/MessageDialog.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/MessageDialog.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/MessageDialog.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/MessageDialog.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/SDLInteraction.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/SDLInteraction.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -245,7 +245,7 @@
     if (m_music == NULL)
         m_music = Mix_LoadMUS_RW(PHYSFSRWOPS_openRead(m_musicTrack.toLocal8Bit().constData()));
 
-    Mix_VolumeMusic(MIX_MAX_VOLUME - 28);
+    Mix_VolumeMusic(MIX_MAX_VOLUME/4);
     Mix_FadeInMusic(m_music, -1, 1750);
 }
 
--- a/QTfrontend/util/SDLInteraction.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/SDLInteraction.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/namegen.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/namegen.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2009 Martin Minarik <ttsmj@pokec.sk>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/namegen.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/namegen.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2009 Martin Minarik <ttsmj@pokec.sk>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/CocoaInitializer.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/platform/CocoaInitializer.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/CocoaInitializer.mm	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/platform/CocoaInitializer.mm	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/InstallController.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/platform/InstallController.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/InstallController.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/platform/InstallController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/M3Panel.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/platform/M3Panel.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/M3Panel.mm	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/platform/M3Panel.mm	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/SparkleAutoUpdater.mm	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/platform/SparkleAutoUpdater.mm	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/xfire.cpp	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/platform/xfire.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/QTfrontend/util/platform/xfire.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/QTfrontend/util/platform/xfire.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/README	Sun Apr 26 13:02:38 2015 +0100
+++ b/README	Mon Nov 09 18:37:57 2015 +0100
@@ -1,46 +1,1 @@
-Hedgewars - a turn based strategy game.
-=======================================
-
-Copyright 2004-2014 Andrey Korotaev <unC0Rr@gmail.com> and others.
-See QTfrontend/res/html/about.html and CREDITS for a complete list of authors.
-
-Licence:
---------
-Source code is distributed under the terms of the GNU General Public Licence
-version 2; images and sounds are distributed under the terms of the GNU Free
-Documentation Licence version 1.2. See the COPYING file for the full text of
-the licenses.
-
-Instructions:
--------------
-See our wiki at: https://code.google.com/p/hedgewars/wiki/BuildingHedgewars
-
-You can find an outline of the necessary dependencies in the INSTALL file.
-
-Source code:
-------------
-Our main repository is located at http://hedgewars.googlecode.com using
-Mercurial as DVCS. A Git repository is also available (mirrored daily)
-at https://github.com/hedgewars/hw
-
-Contribute:
------------
-If you see a bug or have any suggestion please use the official bug tracker at
-http://code.google.com/p/hedgewars/issues/list or the integrated feedback
-button.
-
-If you want to help or get to know the sources better you can do that with some
-easy tasks from http://code.google.com/p/hedgewars/wiki/TODO. We also have an
-extended API in LUA to customize your adventures in our wiki at
-http://code.google.com/p/hedgewars/wiki/LuaAPI.
-
-If you know your way through the code feel free to send a patch or open a pull
-request. The best LUA scripts get released in the official DLC page and later
-integrated in the next version.
-
-Contact:
---------
-* IRC channel     - irc://irc.freenode.net/hedgewars
-* community forum - http://www.hedgewars.org/forum
-* mailing list    - https://mail.gna.org/listinfo/hedgewars-dev
-
+README.md
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,46 @@
+Hedgewars - a turn based strategy game.
+=======================================
+
+Copyright 2004-2015 Andrey Korotaev <unC0Rr@gmail.com> and others.
+See QTfrontend/res/html/about.html and CREDITS for a complete list of authors.
+
+Licence:
+--------
+Source code is distributed under the terms of the GNU General Public Licence
+version 2; images and sounds are distributed under the terms of the GNU Free
+Documentation Licence version 1.2. See the COPYING file for the full text of
+the licenses.
+
+Instructions:
+-------------
+See our wiki at: http://hedgewars.org/kb/BuildingHedgewars
+
+You can find an outline of the necessary dependencies in the INSTALL file.
+
+Source code:
+------------
+Our main repository is located at http://hg.hedgewars.org/hedgewars/ using
+Mercurial as DVCS. A Git repository is also available (mirrored daily)
+at https://github.com/hedgewars/hw
+
+Contribute:
+-----------
+If you see a bug or have any suggestion please use the official bug tracker at
+http://code.google.com/p/hedgewars/issues/list or the integrated feedback
+button.
+
+If you want to help or get to know the sources better you can do that with some
+easy tasks from http://hedgewars.org/kb/TODO. We also have an
+extended API in LUA to customize your adventures in our wiki at
+http://hedgewars.org/kb/LuaAPI.
+
+If you know your way through the code feel free to send a patch or open a pull
+request. The best LUA scripts get released in the official DLC page and later
+integrated in the next version.
+
+Contact:
+--------
+* IRC channel     - irc://irc.freenode.net/hedgewars
+* community forum - http://www.hedgewars.org/forum
+* mailing list    - https://mail.gna.org/listinfo/hedgewars-dev
+
--- a/cmake_modules/paths.cmake	Sun Apr 26 13:02:38 2015 +0100
+++ b/cmake_modules/paths.cmake	Mon Nov 09 18:37:57 2015 +0100
@@ -15,7 +15,7 @@
 #resource paths
 if(UNIX AND NOT APPLE)
     set(target_binary_install_dir "bin" CACHE PATH "install dest for binaries")
-    set(target_library_install_dir "lib" CACHE PATH "install dest for libs")
+    set(target_library_install_dir "lib${LIB_SUFFIX}" CACHE PATH "install dest for libs")
 
     string(SUBSTRING "${DATA_INSTALL_DIR}" 0 1 sharepath_start)
     if(${sharepath_start} MATCHES "/")
@@ -60,11 +60,12 @@
     set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks")
     #install_name_tool for libraries
     set(CMAKE_INSTALL_NAME_DIR "@executable_path/../Frameworks")
-else(APPLE)
+else(APPLE AND NOT (${CMAKE_INSTALL_PREFIX} MATCHES "/usr"))
     #paths where to find libraries (final slash not optional):
     # - the first is relative to the executable
     # - the second is the same directory of the executable (so it runs in bin/)
     # - the third one is the full path of the system dir
     #source http://www.cmake.org/pipermail/cmake/2008-January/019290.html
+    #skip this if the install prefix is the standard one
     set(CMAKE_INSTALL_RPATH "$ORIGIN/../${target_library_install_dir}/:$ORIGIN/:${CMAKE_INSTALL_PREFIX}/${target_library_install_dir}/")
 endif(APPLE)
--- a/gameServer/Actions.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/Actions.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -381,8 +381,9 @@
         ModifyRoom (\r -> r{
                 gameInfo = liftM (\g -> g{
                     teamsInGameNumber = teamsInGameNumber g - 1
-                    , roundMsgs = (if isJust $ lastFilteredTimedMsg g then (:) (fromJust $ lastFilteredTimedMsg g) else id)
-                      $ rmTeamMsg : roundMsgs g
+                    , lastFilteredTimedMsg = Nothing
+                    , roundMsgs = (if isJust $ lastFilteredTimedMsg g then ((:) rmTeamMsg . (:) (fromJust $ lastFilteredTimedMsg g)) else ((:) rmTeamMsg)) 
+                        $ roundMsgs g
                 }) $ gameInfo r
             })
         ]
@@ -756,15 +757,16 @@
 
 
 processAction (CheckFailed msg) = do
-    Just (CheckInfo fileName _) <- client's checkInfo
+    Just (CheckInfo fileName _ _) <- client's checkInfo
     io $ moveFailedRecord fileName
 
 
 processAction (CheckSuccess info) = do
-    Just (CheckInfo fileName teams) <- client's checkInfo
+    Just (CheckInfo fileName teams gameDetails) <- client's checkInfo
     p <- client's clientProto
     si <- gets serverInfo
-    io $ writeChan (dbQueries si) $ StoreAchievements p (B.pack fileName) (map toPair teams) info
+    when (isJust gameDetails)
+        $ io $ writeChan (dbQueries si) $ StoreAchievements p (B.pack fileName) (map toPair teams) (fromJust gameDetails) info
     io $ moveCheckedRecord fileName
     where
         toPair t = (teamname t, teamowner t)
--- a/gameServer/ClientIO.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/ClientIO.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -55,6 +55,7 @@
             unless (B.null recvBS) $ do
                 let (packets, newrecvBuf) = bs2Packets $ B.append recvBuf recvBS
                 forM_ packets sendPacket
+                when (B.length newrecvBuf > 128 * 1024) $ sendPacket ["QUIT", "Protocol violation"]
                 receiveWithBufferLoop $ B.copy newrecvBuf
 
         sendPacket packet = writeChan chan $ ClientMessage (ci, packet)
--- a/gameServer/ConfigFile.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/ConfigFile.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/Consts.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/Consts.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/CoreTypes.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/CoreTypes.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -16,7 +16,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  \-}
 
-{-# LANGUAGE CPP, OverloadedStrings, DeriveDataTypeable #-}
+{-# LANGUAGE CPP, OverloadedStrings, DeriveDataTypeable, GeneralizedNewtypeDeriving #-}
 module CoreTypes where
 
 import Control.Concurrent
@@ -38,7 +38,7 @@
 instance NFData B.ByteString
 #endif
 
-instance NFData (Chan a)
+instance NFData (Chan a) where rnf a  = a `seq` ()
 
 instance NFData Action where
     rnf (AnswerClients chans msg) = chans `deepseq` msg `deepseq` ()
@@ -119,7 +119,8 @@
     CheckInfo
     {
         recordFileName :: String,
-        recordTeams :: [TeamInfo]
+        recordTeams :: [TeamInfo],
+        details :: Maybe GameDetails
     }
 
 data ClientInfo =
@@ -303,8 +304,8 @@
     ServerInfo
         True
         "<h2><p align=center><a href=\"http://www.hedgewars.org/\">http://www.hedgewars.org/</a></p></h2>"
-        "<font color=yellow><h3 align=center>Hedgewars 0.9.19 is out! Please update.</h3><p align=center><a href=http://hedgewars.org/download.html>Download page here</a></font>"
-        47 -- latestReleaseVersion
+        "<font color=yellow><h3 align=center>Hedgewars 0.9.22 is out! Please update.</h3><p align=center><a href=http://hedgewars.org/download.html>Download page here</a></font>"
+        51 -- latestReleaseVersion
         41 -- earliestCompatibleVersion
         46631
         ""
@@ -345,10 +346,21 @@
     CheckAccount ClientIndex Int B.ByteString B.ByteString
     | ClearCache
     | SendStats Int Int
-    | StoreAchievements Word16 B.ByteString [(B.ByteString, B.ByteString)] [B.ByteString]
+    | StoreAchievements Word16 B.ByteString [(B.ByteString, B.ByteString)] GameDetails [B.ByteString]
     | GetReplayName ClientIndex Int B.ByteString
     deriving (Show, Read)
 
+data GameDetails =
+    GameDetails {
+        gameScript :: B.ByteString
+        , infRope
+        , isVamp
+        , infAttacks :: Bool
+    } deriving (Show, Read)
+
+instance NFData GameDetails where
+    rnf (GameDetails a b c d) = a `deepseq` b `deepseq` c `deepseq` d `deepseq` ()
+
 data CoreMessage =
     Accept ClientInfo
     | ClientMessage (ClientIndex, [B.ByteString])
--- a/gameServer/EngineInteraction.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/EngineInteraction.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -16,9 +16,13 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  \-}
 
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE CPP, OverloadedStrings #-}
 
+#if defined(OFFICIAL_SERVER)
 module EngineInteraction(replayToDemo, checkNetCmd, toEngineMsg, drawnMapData) where
+#else
+module EngineInteraction(checkNetCmd, toEngineMsg) where
+#endif
 
 import qualified Data.Set as Set
 import Control.Monad
@@ -36,6 +40,7 @@
 import CoreTypes
 import Utils
 
+#if defined(OFFICIAL_SERVER)
 {-
     this is snippet from http://stackoverflow.com/questions/10043102/how-to-catch-the-decompress-ioerror
     because standard 'catch' doesn't seem to catch decompression errors for some reason
@@ -51,6 +56,7 @@
         cons chunk = right (chunk :)
         finalise = right BL.fromChunks
 {- end snippet  -}
+#endif
 
 toEngineMsg :: B.ByteString -> B.ByteString
 toEngineMsg msg = B.pack $ Base64.encode (fromIntegral (BW.length msg) : BW.unpack msg)
@@ -89,12 +95,13 @@
         slotMessages = "\128\129\130\131\132\133\134\135\136\137\138"
         timedMessages = Set.fromList $ "+LlRrUuDdZzAaSjJ,NpPwtgfc12345" ++ slotMessages
 
+#if defined(OFFICIAL_SERVER)
 replayToDemo :: [TeamInfo]
         -> Map.Map B.ByteString B.ByteString
         -> Map.Map B.ByteString [B.ByteString]
         -> [B.ByteString]
-        -> [B.ByteString]
-replayToDemo ti mParams prms msgs = if not sane then [] else concat [
+        -> (Maybe GameDetails, [B.ByteString])
+replayToDemo ti mParams prms msgs = if not sane then (Nothing, []) else (Just $ GameDetails scriptName infRopes vamp infattacks, concat [
         [em "TD"]
         , maybeScript
         , maybeMap
@@ -110,7 +117,7 @@
         , concatMap teamSetup ti
         , msgs
         , [em "!"]
-        ]
+        ])
     where
         keys1, keys2 :: Set.Set B.ByteString
         keys1 = Set.fromList ["FEATURE_SIZE", "MAP", "MAPGEN", "MAZE_SIZE", "SEED", "TEMPLATE"]
@@ -119,15 +126,19 @@
             && Set.null (keys2 Set.\\ Map.keysSet prms)
             && (not . null . drop 41 $ scheme)
             && (not . null . tail $ prms Map.! "AMMO")
+            && ((B.length . head . tail $ prms Map.! "AMMO") > 200)
         mapGenTypes = ["+rnd+", "+maze+", "+drawn+", "+perlin+"]
-        maybeScript = let s = head . fromMaybe ["Normal"] $ Map.lookup "SCRIPT" prms in if s == "Normal" then [] else [eml ["escript Scripts/Multiplayer/", s, ".lua"]]
+        scriptName = head . fromMaybe ["Normal"] $ Map.lookup "SCRIPT" prms
+        maybeScript = let s = scriptName in if s == "Normal" then [] else [eml ["escript Scripts/Multiplayer/", s, ".lua"]]
         maybeMap = let m = mParams Map.! "MAP" in if m `elem` mapGenTypes then [] else [eml ["emap ", m]]
         scheme = tail $ prms Map.! "SCHEME"
         mapgen = mParams Map.! "MAPGEN"
-        templateFilterMsg = eml ["e$maze_size ", mParams Map.! "MAZE_SIZE"]
+        mazeSizeMsg = eml ["e$maze_size ", mParams Map.! "MAZE_SIZE"]
         mapgenSpecific = case mapgen of
+            "1" -> [mazeSizeMsg]
+            "2" -> [mazeSizeMsg]
             "3" -> let d = head . fromMaybe [""] $ Map.lookup "DRAWNMAP" prms in if BW.length d <= 4 then [] else drawnMapData d
-            _ -> [templateFilterMsg]
+            _ -> []
         gameFlags :: Word32
         gameFlags = foldl (\r (b, f) -> if b == "false" then r else r .|. f) 0 $ zip scheme gameFlagConsts
         schemeFlags = map (\(v, (n, m)) -> eml [n, " ", showB $ (readInt_ v) * m])
@@ -152,6 +163,9 @@
                             ])
                         $ hedgehogs t
                         )
+        infRopes = ammoStr `B.index` 7  == '9'
+        vamp = gameFlags .&. 0x00000200 /= 0
+        infattacks = gameFlags .&. 0x00100000 /= 0
 
 drawnMapData :: B.ByteString -> [B.ByteString]
 drawnMapData =
@@ -219,6 +233,4 @@
         , 0x02000000
         , 0x04000000
         ]
-
-
-
+#endif
--- a/gameServer/FloodDetection.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/FloodDetection.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/HWProtoChecker.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/HWProtoChecker.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/HWProtoCore.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/HWProtoCore.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -50,7 +50,19 @@
         else
         return [ModifyClient (\c -> c{pingsQueue = pingsQueue c - 1})]
 
-handleCmd ["CMD", parameters] = uncurry h $ extractParameters parameters
+handleCmd cmd = do
+    (ci, irnc) <- ask
+    let cl = irnc `client` ci
+    if logonPassed cl then
+        if isChecker cl then
+            handleCmd_checker cmd
+            else
+            handleCmd_loggedin cmd
+        else
+        handleCmd_NotEntered cmd
+
+
+handleCmd_loggedin ["CMD", parameters] = uncurry h $ extractParameters parameters
     where
         h "DELEGATE" n | not $ B.null n = handleCmd ["DELEGATE", n]
         h "SAVEROOM" n | not $ B.null n = handleCmd ["SAVEROOM", n]
@@ -79,23 +91,11 @@
         h "FORCE" msg | not $ B.null msg = handleCmd ["VOTE", upperCase msg, "FORCE"]
         h "MAXTEAMS" n | not $ B.null n = handleCmd ["MAXTEAMS", n]
         h "INFO" n | not $ B.null n = handleCmd ["INFO", n]
+        h "RESTART_SERVER" "YES" = handleCmd ["RESTART_SERVER"]
         h c p = return [Warning $ B.concat ["Unknown cmd: /", c, " ", p]]
 
         extractParameters p = let (a, b) = B.break (== ' ') p in (upperCase a, B.dropWhile (== ' ') b)
 
-
-handleCmd cmd = do
-    (ci, irnc) <- ask
-    let cl = irnc `client` ci
-    if logonPassed cl then
-        if isChecker cl then
-            handleCmd_checker cmd
-            else
-            handleCmd_loggedin cmd
-        else
-        handleCmd_NotEntered cmd
-
-
 handleCmd_loggedin ["INFO", asknick] = do
     (_, rnc) <- ask
     maybeClientId <- clientByNick asknick
--- a/gameServer/HWProtoInRoomState.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/HWProtoInRoomState.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/HWProtoLobbyState.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/HWProtoLobbyState.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -82,9 +82,10 @@
     let isBanned = host cl `elem` roomBansList jRoom
     let clTeams =
             if (clientProto cl >= 48) && (isJust $ gameInfo jRoom) then
-                map teamname . filter (\t -> teamowner t == nick cl) . teamsAtStart . fromJust $ gameInfo jRoom 
+                filter (\t -> teamowner t == nick cl) . teamsAtStart . fromJust $ gameInfo jRoom 
                 else
                 []
+    let clTeamsNames = map teamname clTeams
     return $
         if isNothing maybeRI then
             [Warning $ loc "No such room"]
@@ -101,18 +102,21 @@
             else
             (
                 MoveToRoom jRI
-                : ModifyClient (\c -> c{isJoinedMidGame = isJust $ gameInfo jRoom, teamsInGame = fromIntegral $ length clTeams})
+                : ModifyClient (\c -> c{isJoinedMidGame = isJust $ gameInfo jRoom
+                                        , teamsInGame = fromIntegral $ length clTeams
+                                        , clientClan = teamcolor `fmap` listToMaybe clTeams})
                 : AnswerClients chans ["CLIENT_FLAGS", "-r", nick cl]
                 : [(AnswerClients [sendChan cl] $ "JOINED" : nicks) | not $ null nicks]
             )
-            ++ [ModifyRoom (\r -> let (t', g') = moveTeams clTeams . fromJust $ gameInfo r in r{gameInfo = Just g', teams = t'}) | not $ null clTeams]
+            ++ [ModifyRoom (\r -> let (t', g') = moveTeams clTeamsNames . fromJust $ gameInfo r in r{gameInfo = Just g', teams = t'}) | not $ null clTeams]
             ++ [AnswerClients [sendChan cl] ["CLIENT_FLAGS", "+h", nick $ fromJust owner] | isJust owner]
             ++ [sendStateFlags cl jRoomClients | not $ null jRoomClients]
             ++ answerFullConfig cl jRoom
             ++ answerTeams cl jRoom
             ++ watchRound cl jRoom chans
             ++ [AnswerClients [sendChan cl] ["CHAT", "[greeting]", greeting jRoom] | greeting jRoom /= ""]
-            ++ map (\t -> AnswerClients chans ["EM", toEngineMsg $ 'G' `B.cons` t]) clTeams
+            ++ map (\t -> AnswerClients chans ["EM", toEngineMsg $ 'G' `B.cons` t]) clTeamsNames
+            ++ [AnswerClients [sendChan cl] ["EM", toEngineMsg "I"] | isPaused `fmap` gameInfo jRoom == Just True]
 
         where
         moveTeams :: [B.ByteString] -> GameInfo -> ([TeamInfo], GameInfo)
@@ -163,65 +167,52 @@
     ---------------------------
     -- Administrator's stuff --
 
-handleCmd_lobby ["KICK", kickNick] = do
+handleCmd_lobby ["KICK", kickNick] = serverAdminOnly $ do
     (ci, _) <- ask
-    cl <- thisClient
     kickId <- clientByNick kickNick
-    return [KickClient $ fromJust kickId | isAdministrator cl && isJust kickId && fromJust kickId /= ci]
+    return [KickClient $ fromJust kickId | isJust kickId && fromJust kickId /= ci]
 
 
-handleCmd_lobby ["BAN", banNick, reason, duration] = do
+handleCmd_lobby ["BAN", banNick, reason, duration] = serverAdminOnly $ do
     (ci, _) <- ask
-    cl <- thisClient
     banId <- clientByNick banNick
-    return [BanClient (readInt_ duration) reason (fromJust banId) | isAdministrator cl && isJust banId && fromJust banId /= ci]
+    return [BanClient (readInt_ duration) reason (fromJust banId) | isJust banId && fromJust banId /= ci]
 
-handleCmd_lobby ["BANIP", ip, reason, duration] = do
-    cl <- thisClient
-    return [BanIP ip (readInt_ duration) reason | isAdministrator cl]
+handleCmd_lobby ["BANIP", ip, reason, duration] = serverAdminOnly $
+    return [BanIP ip (readInt_ duration) reason]
 
-handleCmd_lobby ["BANNICK", n, reason, duration] = do
-    cl <- thisClient
-    return [BanNick n (readInt_ duration) reason | isAdministrator cl]
+handleCmd_lobby ["BANNICK", n, reason, duration] = serverAdminOnly $
+    return [BanNick n (readInt_ duration) reason]
 
-handleCmd_lobby ["BANLIST"] = do
-    cl <- thisClient
-    return [BanList | isAdministrator cl]
+handleCmd_lobby ["BANLIST"] = serverAdminOnly $
+    return [BanList]
 
 
-handleCmd_lobby ["UNBAN", entry] = do
-    cl <- thisClient
-    return [Unban entry | isAdministrator cl]
+handleCmd_lobby ["UNBAN", entry] = serverAdminOnly $
+    return [Unban entry]
 
 
-handleCmd_lobby ["SET_SERVER_VAR", "MOTD_NEW", newMessage] = do
-    cl <- thisClient
-    return [ModifyServerInfo (\si -> si{serverMessage = newMessage}) | isAdministrator cl]
+handleCmd_lobby ["SET_SERVER_VAR", "MOTD_NEW", newMessage] = serverAdminOnly $
+    return [ModifyServerInfo (\si -> si{serverMessage = newMessage})]
 
-handleCmd_lobby ["SET_SERVER_VAR", "MOTD_OLD", newMessage] = do
-    cl <- thisClient
-    return [ModifyServerInfo (\si -> si{serverMessageForOldVersions = newMessage}) | isAdministrator cl]
+handleCmd_lobby ["SET_SERVER_VAR", "MOTD_OLD", newMessage] = serverAdminOnly $
+    return [ModifyServerInfo (\si -> si{serverMessageForOldVersions = newMessage})]
 
-handleCmd_lobby ["SET_SERVER_VAR", "LATEST_PROTO", protoNum] = do
-    cl <- thisClient
-    return [ModifyServerInfo (\si -> si{latestReleaseVersion = readNum}) | isAdministrator cl && readNum > 0]
+handleCmd_lobby ["SET_SERVER_VAR", "LATEST_PROTO", protoNum] = serverAdminOnly $
+    return [ModifyServerInfo (\si -> si{latestReleaseVersion = readNum}) | readNum > 0]
     where
         readNum = readInt_ protoNum
 
-handleCmd_lobby ["GET_SERVER_VAR"] = do
-    cl <- thisClient
-    return [SendServerVars | isAdministrator cl]
+handleCmd_lobby ["GET_SERVER_VAR"] = serverAdminOnly $
+    return [SendServerVars]
 
-handleCmd_lobby ["CLEAR_ACCOUNTS_CACHE"] = do
-    cl <- thisClient
-    return [ClearAccountsCache | isAdministrator cl]
+handleCmd_lobby ["CLEAR_ACCOUNTS_CACHE"] = serverAdminOnly $
+    return [ClearAccountsCache]
 
-handleCmd_lobby ["RESTART_SERVER"] = do
-    cl <- thisClient
-    return [RestartServer | isAdministrator cl]
+handleCmd_lobby ["RESTART_SERVER"] = serverAdminOnly $
+    return [RestartServer]
 
-handleCmd_lobby ["STATS"] = do
-    cl <- thisClient
-    return [Stats | isAdministrator cl]
+handleCmd_lobby ["STATS"] = serverAdminOnly $
+    return [Stats]
 
 handleCmd_lobby _ = return [ProtocolError "Incorrect command (state: in lobby)"]
--- a/gameServer/HWProtoNEState.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/HWProtoNEState.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/HandlerUtils.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/HandlerUtils.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/JoinsMonitor.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/JoinsMonitor.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/NetRoutines.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/NetRoutines.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -29,18 +29,18 @@
 import qualified Data.ByteString.Char8 as B
 import qualified Control.Exception as E
 import System.Entropy
+import Data.Either
 -----------------------------
 import CoreTypes
 import Utils
 
 
 acceptLoop :: Socket -> Chan CoreMessage -> IO ()
-acceptLoop servSock chan = E.bracket openHandle closeHandle f
+acceptLoop servSock chan = E.bracket openHandle closeHandle (forever . f)
     where
-    f ch = forever $
-        do
-        (sock, sockAddr) <- Network.Socket.accept servSock
-
+    f ch = E.try (Network.Socket.accept servSock) >>= \v -> case v of
+      Left (e :: E.IOException) -> return ()
+      Right (sock, sockAddr) -> do
         clientHost <- sockAddr2String sockAddr
 
         currentTime <- getCurrentTime
--- a/gameServer/OfficialServer/DBInteraction.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/OfficialServer/DBInteraction.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/OfficialServer/GameReplayStore.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/OfficialServer/GameReplayStore.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -16,7 +16,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  \-}
 
-{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE ScopedTypeVariables, OverloadedStrings #-}
 module OfficialServer.GameReplayStore where
 
 import Data.Time
@@ -70,11 +70,12 @@
     where
         loadFile :: String -> IO (Maybe CheckInfo, [B.ByteString])
         loadFile fileName = E.handle (\(e :: SomeException) ->
-                    warningM "REPLAYS" ("Problems reading " ++ fileName ++ ": " ++ show e) >> return (Just $ CheckInfo fileName [], [])) $ do
+                    warningM "REPLAYS" ("Problems reading " ++ fileName ++ ": " ++ show e) >> return (Just $ CheckInfo fileName [] Nothing, [])) $ do
             (teams, params1, params2, roundMsgs) <- liftM read $ readFile fileName
-            return $ (
-                Just (CheckInfo fileName teams)
-                , let d = replayToDemo teams (Map.fromList params1) (Map.fromList params2) (reverse roundMsgs) in d `deepseq` d
+            let d = replayToDemo teams (Map.fromList params1) (Map.fromList params2) (reverse roundMsgs)
+            d `deepseq` return $ (
+                Just (CheckInfo fileName teams (fst d))
+                , snd d
                 )
 
 moveFailedRecord :: String -> IO ()
--- a/gameServer/OfficialServer/checker.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/OfficialServer/checker.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/OfficialServer/extdbinterface.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/OfficialServer/extdbinterface.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -28,16 +28,17 @@
 import Database.MySQL.Simple
 import Database.MySQL.Simple.QueryResults
 import Database.MySQL.Simple.Result
-import Data.List (lookup)
+import Data.List (lookup, elem)
 import qualified Data.ByteString.Char8 as B
 import Data.Word
+import Data.Int
 --------------------------
 import CoreTypes
 import Utils
 
 
 dbQueryAccount =
-    "SELECT users.pass, \
+    "SELECT CASE WHEN users.status = 1 THEN users.pass ELSE '' END, \
     \ (SELECT COUNT(users_roles.rid) FROM users_roles WHERE users.uid = users_roles.uid AND users_roles.rid = 3), \
     \ (SELECT COUNT(users_roles.rid) FROM users_roles WHERE users.uid = users_roles.uid AND users_roles.rid = 13) \
     \ FROM users WHERE users.name = ?"
@@ -50,6 +51,15 @@
     \ VALUES (?, (SELECT id FROM achievement_types WHERE name = ?), (SELECT uid FROM users WHERE name = ?), \
     \ ?, ?, ?, ?)"
 
+dbQueryGamesHistory =
+    "INSERT INTO rating_games (script, protocol, filename, time, vamp, ropes, infattacks) \
+    \ VALUES (?, ?, ?, ?, ?, ?, ?)"
+
+dbQueryGameId = "SELECT LAST_INSERT_ID()"
+
+dbQueryGamesHistoryPlaces = "INSERT INTO rating_players (userid, gameid, place) \
+    \ VALUES ((SELECT uid FROM users WHERE name = ?), ?, ?)"
+
 dbQueryReplayFilename = "SELECT filename FROM achievements WHERE id = ?"
 
 
@@ -83,37 +93,54 @@
 
         SendStats clients rooms ->
                 void $ execute dbConn dbQueryStats (clients, rooms)
---StoreAchievements (B.pack fileName) (map toPair teams) info
-        StoreAchievements p fileName teams info ->
-            void $ executeMany dbConn dbQueryAchievement $ (parseStats p fileName teams) info
+        StoreAchievements p fileName teams g info ->
+            sequence_ $ parseStats dbConn p fileName teams g info
 
 
-readTime = read . B.unpack . B.take 19 . B.drop 8
-
+--readTime = read . B.unpack . B.take 19 . B.drop 8
+readTime = B.take 19 . B.drop 8
 
 parseStats :: 
-    Word16 
+    Connection
+    -> Word16 
     -> B.ByteString 
     -> [(B.ByteString, B.ByteString)] 
-    -> [B.ByteString] 
-    -> [(B.ByteString, B.ByteString, B.ByteString, Int, B.ByteString, B.ByteString, Int)]
-parseStats p fileName teams = ps
+    -> GameDetails
+    -> [B.ByteString]
+    -> [IO Int64]
+parseStats dbConn p fileName teams (GameDetails script infRopes vamp infAttacks) = ps
     where
     time = readTime fileName
+    ps :: [B.ByteString] -> [IO Int64]
     ps [] = []
-    ps ("DRAW" : bs) = ps bs
-    ps ("WINNERS" : n : bs) = ps $ drop (readInt_ n) bs
-    ps ("ACHIEVEMENT" : typ : teamname : location : value : bs) =
+    ps ("DRAW" : bs) = execute dbConn dbQueryGamesHistory (script, (fromIntegral p) :: Int, fileName, time, vamp, infRopes, infAttacks)
+        : places (map drawParams teams)
+        : ps bs
+    ps ("WINNERS" : n : bs) = let winNum = readInt_ n in execute dbConn dbQueryGamesHistory (script, (fromIntegral p) :: Int, fileName, time, vamp, infRopes, infAttacks)
+        : places (map (placeParams (take winNum bs)) teams)
+        : ps (drop winNum bs)
+    ps ("ACHIEVEMENT" : typ : teamname : location : value : bs) = execute dbConn dbQueryAchievement
         ( time
         , typ
         , fromMaybe "" (lookup teamname teams)
-        , readInt_ value
+        , (readInt_ value) :: Int
         , fileName
         , location
-        , fromIntegral p
+        , (fromIntegral p) :: Int
         ) : ps bs
     ps (b:bs) = ps bs
-
+    drawParams t = (snd t, 0 :: Int)
+    placeParams winners t = (snd t, if (fst t) `elem` winners then 1 else 2 :: Int)
+    places :: [(B.ByteString, Int)] -> IO Int64
+    places params = do
+        res <- query_ dbConn dbQueryGameId
+        let gameId = case res of
+                [Only a] -> a
+                _ -> 0
+        mapM_ (execute dbConn dbQueryGamesHistoryPlaces . midInsert gameId) params
+        return 0
+    midInsert :: Int -> (a, b) -> (a, Int, b)
+    midInsert g (a, b) = (a, g, b)
 
 dbConnectionLoop mySQLConnectionInfo =
     Control.Exception.handle (\(e :: SomeException) -> hPutStrLn stderr $ show e) $
--- a/gameServer/Opts.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/Opts.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/RoomsAndClients.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/RoomsAndClients.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/ServerCore.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/ServerCore.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/ServerState.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/ServerState.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/Store.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/Store.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/Utils.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/Utils.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -115,6 +115,8 @@
             , (48, "0.9.21-dev")
             , (49, "0.9.21")
             , (50, "0.9.22-dev")
+            , (51, "0.9.22")
+            , (52, "0.9.23-dev")
             ]
 
 askFromConsole :: B.ByteString -> IO B.ByteString
--- a/gameServer/Votes.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/Votes.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/hedgewars-server.cabal	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/hedgewars-server.cabal	Mon Nov 09 18:37:57 2015 +0100
@@ -33,7 +33,7 @@
     utf8-string,
     SHA,
     entropy,
-    zlib
+    zlib >= 0.5.3 && < 0.6
 
   if !os(windows)
     build-depends: unix
--- a/gameServer/hedgewars-server.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/hedgewars-server.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/stresstest.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/stresstest.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/stresstest2.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/stresstest2.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/gameServer/stresstest3.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/gameServer/stresstest3.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 {-
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/ArgParsers.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/ArgParsers.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -335,7 +335,7 @@
 //var tmpInt: LongInt;
 begin
 
-    paramIndex:= 1;
+    paramIndex:= {$IFDEF HWLIBRARY}0{$ELSE}1{$ENDIF};
     paramTotal:= ParamCount; //-1 because pascal enumeration is inclusive
     (*
     WriteLn(stdout, 'total parameters: ' + inttostr(paramTotal));
--- a/hedgewars/CMakeLists.txt	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/CMakeLists.txt	Mon Nov 09 18:37:57 2015 +0100
@@ -122,9 +122,23 @@
 
 #DEPENDECIES AND EXECUTABLES SECTION
 if(APPLE AND (NOT BUILD_ENGINE_LIBRARY))
-    #on OSX we need to provide the SDL_main() function when building as executable
+    #on OSX we need to provide the SDL_main() function when building as
+    #executable and the entry point too
     add_subdirectory(sdlmain)
     list(APPEND HW_LINK_LIBS SDLmain)
+    add_flag_append(CMAKE_Pascal_FLAGS "-k-lsdlmain")
+    add_flag_append(CMAKE_Pascal_FLAGS "-XMSDL_main")
+    #OpenGL deps
+    add_flag_append(CMAKE_Pascal_FLAGS "-k-framework -kCocoa")
+    add_flag_append(CMAKE_Pascal_FLAGS "-k-framework -kOpenGL")
+
+    #set the correct library or framework style depending on the main SDL
+    string(FIND "${SDL_LIBRARY}" "dylib" sdl_framework)
+    if(${sdl_framework} GREATER -1)
+        add_flag_append(CMAKE_Pascal_FLAGS "-k-lsdl -k-lsdl_image -k-lsdl_mixer -k-lsdl_ttf -k-lsdl_net")
+    else()
+        add_flag_append(CMAKE_Pascal_FLAGS "-k-framework -kSDL -k-framework -kSDL_image -k-framework -kSDL_mixer -k-framework -kSDL_net -k-framework -kSDL_net -k-framework -kSDL_ttf")
+    endif()
 endif()
 
 if(LIBAV_FOUND)
--- a/hedgewars/PNGh.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/PNGh.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/SDLh.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/SDLh.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -53,20 +53,6 @@
     type PLongInt = ^LongInt;
 {$ENDIF}
 
-{$IFDEF DARWIN}
-    {$IFNDEF HWLIBRARY}
-        {$linklib SDLmain}
-        {$PASCALMAINNAME SDL_main}
-        {$linkframework Cocoa}
-        {$linkframework SDL}
-        {$linkframework SDL_net}
-        {$linkframework SDL_image}
-        {$linkframework SDL_ttf}
-        {$linkframework SDL_mixer}
-        {$linkframework OpenGL}
-    {$ENDIF}
-{$ENDIF}
-
 
 (*  SDL  *)
 const
@@ -77,11 +63,19 @@
     SDL_ImageLibName = 'SDL_image.dll';
     SDL_NetLibName = 'SDL_net.dll';
 {$ELSE}
-    SDLLibName = 'libSDL';
-    SDL_TTFLibName = 'libSDL_ttf';
-    SDL_MixerLibName = 'libSDL_mixer';
-    SDL_ImageLibName = 'libSDL_image';
-    SDL_NetLibName = 'libSDL_net';
+    {$IFDEF SDL2}
+        SDLLibName = 'libSDL2';
+        SDL_TTFLibName = 'libSDL2_ttf';
+        SDL_MixerLibName = 'libSDL2_mixer';
+        SDL_ImageLibName = 'libSDL2_image';
+        SDL_NetLibName = 'libSDL2_net';
+    {$ELSE}
+        SDLLibName = 'libSDL';
+        SDL_TTFLibName = 'libSDL_ttf';
+        SDL_MixerLibName = 'libSDL_mixer';
+        SDL_ImageLibName = 'libSDL_image';
+        SDL_NetLibName = 'libSDL_net';
+    {$ENDIF}
 {$ENDIF}
 
 /////////////////////////////////////////////////////////////////
--- a/hedgewars/avwrapper/avwrapper.c	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/avwrapper/avwrapper.c	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,13 +21,12 @@
 #include <stdint.h>
 #include <string.h>
 #include <stdarg.h>
+
+#include "libavcodec/avcodec.h"
 #include "libavformat/avformat.h"
+#include "libavutil/avutil.h"
 #include "libavutil/mathematics.h"
 
-#ifndef AVIO_FLAG_WRITE
-#define AVIO_FLAG_WRITE AVIO_WRONLY
-#endif
-
 #if (defined _MSC_VER)
 #define AVWRAP_DECL __declspec(dllexport)
 #elif ((__GNUC__ >= 3) && (!__EMX__) && (!sun))
@@ -57,11 +56,38 @@
 static int g_NumSamples;
 
 
+// compatibility section
 #if LIBAVCODEC_VERSION_MAJOR < 54
 #define OUTBUFFER_SIZE 200000
 static uint8_t g_OutBuffer[OUTBUFFER_SIZE];
+#define avcodec_open2(x, y, z)              avcodec_open(x, y)
 #endif
 
+#if LIBAVCODEC_VERSION_MAJOR < 56
+#define av_frame_alloc                      avcodec_alloc_frame
+#define av_frame_free                       av_freep
+#endif
+
+#if LIBAVCODEC_VERSION_MAJOR < 57
+#define AV_CODEC_CAP_DELAY                  CODEC_CAP_DELAY
+#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE    CODEC_CAP_VARIABLE_FRAME_SIZE
+#define AV_CODEC_FLAG_GLOBAL_HEADER         CODEC_FLAG_GLOBAL_HEADER
+#define AV_CODEC_FLAG_QSCALE                CODEC_FLAG_QSCALE
+#endif
+
+#if LIBAVFORMAT_VERSION_MAJOR < 53
+#define AVIO_FLAG_WRITE                     AVIO_WRONLY
+#endif
+
+#if LIBAVFORMAT_VERSION_MAJOR < 54
+#define avformat_new_stream(x, y)           av_new_stream(x, y->type == AVMEDIA_TYPE_AUDIO)
+#endif
+
+#if LIBAVUTIL_VERSION_MAJOR < 54
+#define AV_PIX_FMT_YUV420P                  PIX_FMT_YUV420P
+#endif
+
+
 // pointer to function from hwengine (uUtils.pas)
 static void (*AddFileLogRaw)(const char* pString);
 
@@ -105,11 +131,7 @@
 
 static void AddAudioStream()
 {
-#if LIBAVFORMAT_VERSION_MAJOR >= 53
     g_pAStream = avformat_new_stream(g_pContainer, g_pACodec);
-#else
-    g_pAStream = av_new_stream(g_pContainer, 1);
-#endif
     if(!g_pAStream)
     {
         Log("Could not allocate audio stream\n");
@@ -131,26 +153,22 @@
     g_pAudio->bit_rate = 160000;
 
     // for codecs that support variable bitrate use it, it should be better
-    g_pAudio->flags |= CODEC_FLAG_QSCALE;
+    g_pAudio->flags |= AV_CODEC_FLAG_QSCALE;
     g_pAudio->global_quality = 1*FF_QP2LAMBDA;
 
     // some formats want stream headers to be separate
     if (g_pFormat->flags & AVFMT_GLOBALHEADER)
-        g_pAudio->flags |= CODEC_FLAG_GLOBAL_HEADER;
+        g_pAudio->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
 
     // open it
-#if LIBAVCODEC_VERSION_MAJOR >= 53
     if (avcodec_open2(g_pAudio, g_pACodec, NULL) < 0)
-#else
-    if (avcodec_open(g_pAudio, g_pACodec) < 0)
-#endif
     {
         Log("Could not open audio codec %s\n", g_pACodec->long_name);
         return;
     }
 
 #if LIBAVCODEC_VERSION_MAJOR >= 54
-    if (g_pACodec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE)
+    if (g_pACodec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)
 #else
     if (g_pAudio->frame_size == 0)
 #endif
@@ -158,7 +176,7 @@
     else
         g_NumSamples = g_pAudio->frame_size;
     g_pSamples = (int16_t*)av_malloc(g_NumSamples*g_Channels*sizeof(int16_t));
-    g_pAFrame = avcodec_alloc_frame();
+    g_pAFrame = av_frame_alloc();
     if (!g_pAFrame)
     {
         Log("Could not allocate frame\n");
@@ -172,7 +190,7 @@
     if (!g_pAStream)
         return 0;
 
-    AVPacket Packet = { 0 };
+    AVPacket Packet;
     av_init_packet(&Packet);
 
     int NumSamples = fread(g_pSamples, 2*g_Channels, g_NumSamples, g_pSoundFile);
@@ -217,11 +235,7 @@
 // add a video output stream
 static int AddVideoStream()
 {
-#if LIBAVFORMAT_VERSION_MAJOR >= 53
     g_pVStream = avformat_new_stream(g_pContainer, g_pVCodec);
-#else
-    g_pVStream = av_new_stream(g_pContainer, 0);
-#endif
     if (!g_pVStream)
         return FatalError("Could not allocate video stream");
 
@@ -241,20 +255,20 @@
     g_pVideo->time_base.den = g_Framerate.num;
     g_pVideo->time_base.num = g_Framerate.den;
     //g_pVideo->gop_size = 12; /* emit one intra frame every twelve frames at most */
-    g_pVideo->pix_fmt = PIX_FMT_YUV420P;
+    g_pVideo->pix_fmt = AV_PIX_FMT_YUV420P;
 
     // set quality
     if (g_VQuality > 100)
         g_pVideo->bit_rate = g_VQuality;
     else
     {
-        g_pVideo->flags |= CODEC_FLAG_QSCALE;
+        g_pVideo->flags |= AV_CODEC_FLAG_QSCALE;
         g_pVideo->global_quality = g_VQuality*FF_QP2LAMBDA;
     }
 
     // some formats want stream headers to be separate
     if (g_pFormat->flags & AVFMT_GLOBALHEADER)
-        g_pVideo->flags |= CODEC_FLAG_GLOBAL_HEADER;
+        g_pVideo->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
 
 #if LIBAVCODEC_VERSION_MAJOR < 53
     // for some versions of ffmpeg x264 options must be set explicitly
@@ -288,18 +302,10 @@
 #endif
 
     // open the codec
-#if LIBAVCODEC_VERSION_MAJOR >= 53
-    AVDictionary* pDict = NULL;
-    if (strcmp(g_pVCodec->name, "libx264") == 0)
-        av_dict_set(&pDict, "preset", "medium", 0);
-
-    if (avcodec_open2(g_pVideo, g_pVCodec, &pDict) < 0)
-#else
-    if (avcodec_open(g_pVideo, g_pVCodec) < 0)
-#endif
+    if (avcodec_open2(g_pVideo, g_pVCodec, NULL) < 0)
         return FatalError("Could not open video codec %s", g_pVCodec->long_name);
 
-    g_pVFrame = avcodec_alloc_frame();
+    g_pVFrame = av_frame_alloc();
     if (!g_pVFrame)
         return FatalError("Could not allocate frame");
 
@@ -317,10 +323,10 @@
     // write interleaved audio frame
     if (g_pAStream)
     {
-        VideoTime = (double)g_pVStream->pts.val*g_pVStream->time_base.num/g_pVStream->time_base.den;
+        VideoTime = (double)g_pVFrame->pts * g_pVStream->time_base.num/g_pVStream->time_base.den;
         do
         {
-            AudioTime = (double)g_pAStream->pts.val*g_pAStream->time_base.num/g_pAStream->time_base.den;
+            AudioTime = (double)g_pAFrame->pts * g_pAStream->time_base.num/g_pAStream->time_base.den;
             ret = WriteAudioFrame();
         }
         while (AudioTime < VideoTime && ret);
@@ -496,7 +502,7 @@
 {
     int ret;
     // output buffered frames
-    if (g_pVCodec->capabilities & CODEC_CAP_DELAY)
+    if (g_pVCodec->capabilities & AV_CODEC_CAP_DELAY)
     {
         do
             ret = WriteFrame(NULL);
@@ -526,14 +532,14 @@
         avcodec_close(g_pVideo);
         av_free(g_pVideo);
         av_free(g_pVStream);
-        av_free(g_pVFrame);
+        av_frame_free(&g_pVFrame);
     }
     if (g_pAStream)
     {
         avcodec_close(g_pAudio);
         av_free(g_pAudio);
         av_free(g_pAStream);
-        av_free(g_pAFrame);
+        av_frame_free(&g_pAFrame);
         av_free(g_pSamples);
         fclose(g_pSoundFile);
     }
--- a/hedgewars/config.inc.in	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/config.inc.in	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/hwLibrary.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/hwLibrary.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/hwengine.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/hwengine.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -29,7 +29,7 @@
 program hwengine;
 {$ENDIF}
 
-uses SDLh, uMisc, uConsole, uGame, uConsts, uLand, uAmmos, uVisualGears, uGears, uStore, uWorld, uInputHandler
+uses {$IFDEF IPHONEOS}cmem, {$ENDIF} SDLh, uMisc, uConsole, uGame, uConsts, uLand, uAmmos, uVisualGears, uGears, uStore, uWorld, uInputHandler
      , uSound, uScript, uTeams, uStats, uIO, uLocale, uChat, uAI, uAIMisc, uAILandMarks, uLandTexture, uCollisions
      , SysUtils, uTypes, uVariables, uCommands, uUtils, uCaptions, uDebug, uCommandHandlers, uLandPainted
      , uPhysFSLayer, uCursor, uRandom, ArgParsers, uVisualGearsHandlers, uTextures, uRender
@@ -138,7 +138,8 @@
         ScreenFadeValue:= sfMax;
         ScreenFadeSpeed:= 5;
         
-        if (not flagDumpLand and MakeScreenshot(s, 1, 0)) or (flagDumpLand and MakeScreenshot(s, 1, 1) and MakeScreenshot(s, 1, 2)) then
+        if (not flagDumpLand and MakeScreenshot(s, 1, 0)) or
+           (flagDumpLand and MakeScreenshot(s, 1, 1) and ((cReducedQuality and rqBlurryLand <> 0) or MakeScreenshot(s, 1, 2))) then
             WriteLnToConsole('Screenshot saved: ' + s)
         else
             begin
@@ -540,7 +541,11 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 procedure GenLandPreview;
+{$IFDEF MOBILE}
+var Preview: TPreview;
+{$ELSE}
 var Preview: TPreviewAlpha;
+{$ENDIF}
 begin
     initEverything(false);
 
@@ -549,7 +554,11 @@
     TryDo(InitStepsFlags = cifRandomize, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true);
 
     ScriptOnPreviewInit;
+{$IFDEF MOBILE}
+    GenPreview(Preview);
+{$ELSE}
     GenPreviewAlpha(Preview);
+{$ENDIF}
     WriteLnToConsole('Sending preview...');
     SendIPCRaw(@Preview, sizeof(Preview));
     SendIPCRaw(@MaxHedgehogs, sizeof(byte));
@@ -601,9 +610,13 @@
         end;
 
     {$IFDEF PAS2C}
-    exit(HaltNoError);
+        exit(HaltNoError);
     {$ELSE}
-    halt(HaltNoError);
+        {$IFDEF IPHONEOS}
+            exit;
+        {$ELSE}
+            halt(HaltNoError);
+        {$ENDIF}
     {$ENDIF}
 {$IFDEF HWLIBRARY}
 end;
--- a/hedgewars/options.inc	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/options.inc	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uAI.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uAI.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uAIActions.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uAIActions.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uAIAmmoTests.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uAIAmmoTests.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uAIMisc.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uAIMisc.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uAmmos.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uAmmos.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uCaptions.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uCaptions.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uChat.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uChat.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -36,7 +36,7 @@
 uses SDLh, uInputHandler, uTypes, uVariables, uCommands, uUtils, uTextures, uRender, uIO, uScript, uRenderUtils;
 
 const MaxStrIndex = 27;
-      MaxInputStrLen = 240;
+      MaxInputStrLen = 200;
 
 type TChatLine = record
     Tex: PTexture;
@@ -47,19 +47,15 @@
     end;
     TChatCmd = (ccQuit, ccPause, ccFinish, ccShowHistory, ccFullScreen);
 
-type TInputStrL = array[0..260] of byte;
-
 var Strs: array[0 .. MaxStrIndex] of TChatLine;
     MStrs: array[0 .. MaxStrIndex] of shortstring;
     LocalStrs: array[0 .. MaxStrIndex] of shortstring;
-    LocalStrsL: array[0 .. MaxStrIndex] of TInputStrL;
     missedCount: LongWord;
     lastStr: LongWord;
     localLastStr: LongInt;
     history: LongInt;
     visibleCount: LongWord;
     InputStr: TChatLine;
-    InputStrL: TInputStrL; // for full str + 4-byte utf-8 char
     ChatReady: boolean;
     showAll: boolean;
     liveLua: boolean;
@@ -72,16 +68,17 @@
 
 
 const
-    InputStrLNoPred: byte = 255;
-
-    colors: array[#0..#6] of TSDL_Color = (
-            (r:$FF; g:$FF; b:$FF; a:$FF), // unused, feel free to take it for anything
-            (r:$FF; g:$FF; b:$FF; a:$FF), // chat message [White]
-            (r:$FF; g:$00; b:$FF; a:$FF), // action message [Purple]
-            (r:$90; g:$FF; b:$90; a:$FF), // join/leave message [Lime]
-            (r:$FF; g:$FF; b:$A0; a:$FF), // team message [Light Yellow]
-            (r:$FF; g:$00; b:$00; a:$FF), // error messages [Red]
-            (r:$00; g:$FF; b:$FF; a:$FF)  // input line [Light Blue]
+    colors: array[#0..#9] of TSDL_Color = (
+            (r:$FF; g:$FF; b:$FF; a:$FF), // #0 unused, feel free to take it for anything
+            (r:$FF; g:$FF; b:$FF; a:$FF), // #1 chat message [White]
+            (r:$FF; g:$00; b:$FF; a:$FF), // #2 action message [Purple]
+            (r:$90; g:$FF; b:$90; a:$FF), // #3 join/leave message [Lime]
+            (r:$FF; g:$FF; b:$A0; a:$FF), // #4 team message [Light Yellow]
+            (r:$FF; g:$00; b:$00; a:$FF), // #5 error messages [Red]
+            (r:$00; g:$FF; b:$FF; a:$FF), // #6 input line [Light Blue]
+            (r:$FF; g:$80; b:$80; a:$FF), // #7 team gone [Light Red]
+            (r:$FF; g:$D0; b:$80; a:$FF), // #8 team back [Light Orange]
+            (r:$DF; g:$DF; b:$DF; a:$FF)  // #9 hog speech [Light Gray]
             );
     ChatCommandz: array [TChatCmd] of record
             ChatCmd: string[31];
@@ -98,6 +95,13 @@
 const Padding  = 2;
       ClHeight = 2 * Padding + 16; // font height
 
+// relevant for UTF-8 handling
+function IsFirstCharByte(c: char): boolean; inline;
+begin
+    // based on https://en.wikipedia.org/wiki/UTF-8#Description
+    IsFirstCharByte:= (byte(c) and $C0) <> $80;
+end;
+
 function charIsForHogSpeech(c: char): boolean;
 begin
 exit((c = '"') or (c = '''') or (c = '-'));
@@ -151,6 +155,9 @@
     UpdateCursorCoords();
 end;
 
+(* This procedure [re]renders a texture showing str for the chat line cl.
+ * It will use the color stored in cl and update width
+ *)
 procedure RenderChatLineTex(var cl: TChatLine; var str: shortstring);
 var strSurface,
     resSurface: PSDL_Surface;
@@ -160,6 +167,8 @@
     shadowint  = $80 shl AShift;
 begin
 
+FreeAndNilTexture(cl.Tex);
+
 font:= CheckCJKFont(ansistring(str), fnt16);
 
 // get render size of text
@@ -198,9 +207,6 @@
 procedure SetLine(var cl: TChatLine; str: shortstring; isInput: boolean);
 var color  : TSDL_Color;
 begin
-if cl.Tex <> nil then
-    FreeAndNilTexture(cl.Tex);
-
 if isInput then
     begin
     cl.s:= str;
@@ -231,16 +237,14 @@
 
 // For uStore texture recreation
 procedure ReloadLines;
-var i, t: LongWord;
+var i: LongWord;
 begin
     if InputStr.s <> '' then
         SetLine(InputStr, InputStr.s, true);
     for i:= 0 to MaxStrIndex do
         if Strs[i].s <> '' then
             begin
-            t:= Strs[i].Time;
-            SetLine(Strs[i], Strs[i].s, false);
-            Strs[i].Time:= t
+            RenderChatLineTex(Strs[i], Strs[i].s);
             end;
 end;
 
@@ -427,7 +431,6 @@
     // put in input history
     localLastStr:= (localLastStr + 1) mod MaxStrIndex;
     LocalStrs[localLastStr]:= s;
-    LocalStrsL[localLastStr]:= InputStrL;
     end;
 
 t:= LocalTeam;
@@ -576,7 +579,7 @@
 end;
 
 procedure DelBytesFromInputStrBack(endIdx: integer; count: byte);
-var i, startIdx: integer;
+var startIdx: integer;
 begin
     // nothing to do if count is 0
     if count = 0 then
@@ -588,45 +591,41 @@
     // delete bytes from string
     Delete(InputStr.s, startIdx, count);
 
-    // wipe utf8 info for deleted char
-    InputStrL[endIdx]:= InputStrLNoPred;
-
-    // shift utf8 char info to reflect new string
-    for i:= endIdx + 1 to Length(InputStr.s) + count do
-        begin
-        if InputStrL[i] <> InputStrLNoPred then
-            begin
-            InputStrL[i-count]:= InputStrL[i] - count;
-            InputStrL[i]:= InputStrLNoPred;
-            end;
-        end;
-
     SetLine(InputStr, InputStr.s, true);
 end;
 
-// returns count of removed bytes
-function DelCharFromInputStr(idx: integer): integer;
-var btw: byte;
+procedure MoveCursorToPreviousChar();
 begin
-    // note: idx is always at last byte of utf8 chars. cuz relevant for InputStrL
-
-    if (Length(InputStr.s) < 1) or (idx < 1) or (idx > Length(InputStr.s)) then
-        exit(0);
-
-    btw:= byte(idx) - InputStrL[idx];
-
-    DelCharFromInputStr:= btw;
-
-    DelBytesFromInputStrBack(idx, btw);
+    if cursorPos > 0 then
+        repeat
+            dec(cursorPos);
+        until ((cursorPos = 0) or IsFirstCharByte(InputStr.s[cursorPos + 1]));
 end;
 
-// unchecked
-procedure DoCursorStepForward();
+procedure MoveCursorToNextChar();
+var len: integer;
 begin
-    // go to end of next utf8-char
-    repeat
-        inc(cursorPos);
-    until InputStrL[cursorPos] <> InputStrLNoPred;
+    len:= Length(InputStr.s);
+    if cursorPos < len then
+        repeat
+            inc(cursorPos);
+        until ((cursorPos = len) or IsFirstCharByte(InputStr.s[cursorPos + 1]));
+end;
+
+procedure DeleteLastUTF8CharFromStr(var s: shortstring);
+var l: byte;
+begin
+    l:= Length(s);
+
+    while (l > 1) and (not IsFirstCharByte(s[l])) do
+        begin
+        dec(l);
+        end;
+
+    if l > 0 then
+        dec(l);
+
+    s[0]:= char(l);
 end;
 
 procedure DeleteSelected();
@@ -635,8 +634,8 @@
         begin
         DelBytesFromInputStrBack(max(cursorPos, selectedPos), abs(selectedPos-cursorPos));
         cursorPos:= min(cursorPos, selectedPos);
-        ResetSelection();
         end;
+    ResetSelection();
     UpdateCursorCoords();
 end;
 
@@ -656,10 +655,6 @@
 function GetInputCharSkipClass(index: LongInt): TCharSkip;
 var  c: char;
 begin
-    // multi-byte chars counts as letter
-    if (index > 1) and (InputStrL[index] <> index - 1) then
-        exit(numalpha);
-
     c:= InputStr.s[index];
 
     // non-ascii counts as letter
@@ -700,33 +695,31 @@
         begin
         skip:= GetInputCharSkipClass(cursorPos);
         if skip = wspace then
-            cursorPos:= InputStrL[cursorPos];
+            MoveCursorToPreviousChar();
         end;
     // skip same-type chars
     while (cursorPos > 0) and (GetInputCharSkipClass(cursorPos) = skip) do
-        cursorPos:= InputStrL[cursorPos];
+        MoveCursorToPreviousChar();
     end
 else
     begin
     // skip same-type chars
     while cursorPos < Length(InputStr.s) do
         begin
-        DoCursorStepForward();
+        MoveCursorToNextChar();
         if (GetInputCharSkipClass(cursorPos) <> skip) then
             begin
-            // go back 1 char
-            cursorPos:= InputStrL[cursorPos];
+            MoveCursorToPreviousChar();
             break;
             end;
         end;
     // skip trailing whitespace, similar to Qt
     while cursorPos < Length(InputStr.s) do
         begin
-        DoCursorStepForward();
+        MoveCursorToNextChar();
         if (GetInputCharSkipClass(cursorPos) <> wspace) then
             begin
-            // go back 1 char
-            cursorPos:= InputStrL[cursorPos];
+            MoveCursorToPreviousChar();
             break;
             end;
         end;
@@ -748,42 +741,44 @@
         end;
 end;
 
-// TODO: honor utf8, don't break utf8 chars when shifting chars beyond limit
 procedure InsertIntoInputStr(s: shortstring);
-var i, l, il, lastc: integer;
+var limit: integer;
 begin
-    // safe length for string
-    l:= min(MaxInputStrLen-cursorPos, Length(s));
-    s:= copy(s,1,l);
+    // we check limit for trailing stuff before insertion limit for a reason
+    // (possible remaining space after too long UTF8-insertion has been shortened)
 
-    // if we insert rather than append, shift info in InputStrL accordingly
-    if cursorPos < Length(InputStr.s) then
+    // length limit for stuff to that will trail the insertion
+    limit:= max(cursorPos, MaxInputStrLen-Length(s));
+
+    while Length(InputStr.s) > limit do
         begin
-        for i:= Length(InputStr.s) downto cursorPos + 1 do
-            begin
-            if InputStrL[i] <> InputStrLNoPred then
-                begin
-                il:= i + l;
-                // only shift if not overflowing
-                if il <= MaxInputStrLen then
-                    InputStrL[il]:= InputStrL[i] + l;
-                InputStrL[i]:= InputStrLNoPred;
-                end;
-            end;
+        DeleteLastUTF8CharFromStr(InputStr.s);
         end;
 
-    InputStrL[cursorPos + l]:= cursorPos;
-    // insert string truncated to safe length
-    Insert(s, InputStr.s, cursorPos + 1);
-    if Length(InputStr.s) > MaxInputStrLen then
-        InputStr.s[0]:= char(MaxInputStrLen);
+    // length limit for stuff to insert
+    limit:= max(0, MaxInputStrLen-cursorPos);
+
+    if limit = 0 then
+        s:= ''
+    else while Length(s) > limit do
+        begin
+        DeleteLastUTF8CharFromStr(s);
+        end;
 
-    SetLine(InputStr, InputStr.s, true);
+    if Length(s) > 0 then
+        begin
+        // insert string truncated to safe length
+        Insert(s, InputStr.s, cursorPos + 1);
 
-    // move cursor to end of inserted string
-    lastc:= MaxInputStrLen;
-    cursorPos:= min(lastc, cursorPos + l);
-    UpdateCursorCoords();
+        if Length(InputStr.s) > MaxInputStrLen then
+            InputStr.s[0]:= char(MaxInputStrLen);
+
+        SetLine(InputStr, InputStr.s, true);
+
+        // move cursor to end of inserted string
+        inc(cursorPos, Length(s));
+        UpdateCursorCoords();
+        end;
 end;
 
 procedure PasteFromClipboard();
@@ -802,9 +797,10 @@
 
 procedure KeyPressChat(Key, Sym: Longword; Modifier: Word);
 const firstByteMark: array[0..3] of byte = (0, $C0, $E0, $F0);
+      nonStateMask = (not (KMOD_NUM or KMOD_CAPS));
 var i, btw, index: integer;
     utf8: shortstring;
-    action, selMode, ctrl: boolean;
+    action, selMode, ctrl, ctrlonly: boolean;
     skip: TCharSkip;
 begin
     LastKeyPressTick:= RealTicks;
@@ -814,6 +810,7 @@
 
     selMode:= (modifier and (KMOD_LSHIFT or KMOD_RSHIFT)) <> 0;
     ctrl:= (modifier and (KMOD_LCTRL or KMOD_RCTRL)) <> 0;
+    ctrlonly:= ctrl and ((modifier and nonStateMask and (not (KMOD_LCTRL or KMOD_RCTRL))) = 0);
     skip:= none;
 
     case Sym of
@@ -821,60 +818,41 @@
             begin
             if selectedPos < 0 then
                 begin
-                if ctrl then
-                    skip:= GetInputCharSkipClass(cursorPos);
-
-                // remove char before cursor
-                dec(cursorPos, DelCharFromInputStr(cursorPos));
+                HandleSelection(true);
 
                 // delete more if ctrl is held
-                if ctrl and (selectedPos < 0) then
-                    begin
-                    HandleSelection(true);
-                    SkipInputChars(skip, true);
-                    DeleteSelected();
-                    end
+                if ctrl then
+                    SkipInputChars(GetInputCharSkipClass(cursorPos), true)
                 else
-                    UpdateCursorCoords();
+                    MoveCursorToPreviousChar();
 
-                end
-            else
-                DeleteSelected();
+                end;
+
+            DeleteSelected();
+            UpdateCursorCoords();
             end;
         SDLK_DELETE:
             begin
             if selectedPos < 0 then
                 begin
-                // remove char after cursor
-                if cursorPos < Length(InputStr.s) then
-                    begin
-                    DoCursorStepForward();
-                    if ctrl then
-                        skip:= GetInputCharSkipClass(cursorPos);
-
-                    // delete char
-                    dec(cursorPos, DelCharFromInputStr(cursorPos));
+                HandleSelection(true);
 
-                    // delete more if ctrl is held
-                    if ctrl and (cursorPos < Length(InputStr.s)) then
-                        begin
-                        HandleSelection(true);
-                        SkipInputChars(skip, false);
-                        DeleteSelected();
-                        end;
-                    end
+                // delete more if ctrl is held
+                if ctrl then
+                    SkipInputChars(GetInputCharSkipClass(cursorPos), false)
                 else
-                    UpdateCursorCoords();
-                end
-            else
-                DeleteSelected();
+                    MoveCursorToNextChar();
+
+                end;
+
+            DeleteSelected();
+            UpdateCursorCoords();
             end;
         SDLK_ESCAPE:
             begin
             if Length(InputStr.s) > 0 then
                 begin
                 SetLine(InputStr, '', true);
-                FillChar(InputStrL, sizeof(InputStrL), InputStrLNoPred);
                 ResetCursor();
                 end
             else CleanupInput
@@ -885,7 +863,6 @@
                 begin
                 AcceptChatString(InputStr.s);
                 SetLine(InputStr, '', false);
-                FillChar(InputStrL, sizeof(InputStrL), InputStrLNoPred);
                 ResetCursor();
                 end;
             CleanupInput
@@ -898,12 +875,10 @@
             if (index > localLastStr) then
                 begin
                 SetLine(InputStr, '', true);
-                FillChar(InputStrL, sizeof(InputStrL), InputStrLNoPred);
                 end
             else
                 begin
                 SetLine(InputStr, LocalStrs[index], true);
-                InputStrL:= LocalStrsL[index];
                 end;
             cursorPos:= Length(InputStr.s);
             ResetSelection();
@@ -946,7 +921,7 @@
                     begin
                     HandleSelection(selMode);
                     // go to end of previous utf8-char
-                    cursorPos:= InputStrL[cursorPos];
+                    MoveCursorToPreviousChar();
                     end
                 else // if we're leaving selection mode, jump to its left end
                     begin
@@ -971,7 +946,7 @@
                 if selMode or (selectedPos < 0) then
                     begin
                     HandleSelection(selMode);
-                    DoCursorStepForward();
+                    MoveCursorToNextChar();
                     end
                 else // if we're leaving selection mode, jump to its right end
                     begin
@@ -995,7 +970,7 @@
         SDLK_a:
             begin
             // select all
-            if ctrl then
+            if ctrlonly then
                 begin
                 ResetSelection();
                 cursorPos:= 0;
@@ -1009,7 +984,7 @@
         SDLK_c:
             begin
             // copy
-            if ctrl then
+            if ctrlonly then
                 CopySelectionToClipboard()
             else
                 action:= false;
@@ -1017,15 +992,18 @@
         SDLK_v:
             begin
             // paste
-            if ctrl then
-                PasteFromClipboard()
+            if ctrlonly then
+                begin
+                DeleteSelected();
+                PasteFromClipboard();
+                end
             else
                 action:= false;
             end;
         SDLK_x:
             begin
             // cut
-            if ctrl then
+            if ctrlonly then
                 begin
                 CopySelectionToClipboard();
                 DeleteSelected();
@@ -1062,6 +1040,7 @@
         if Length(InputStr.s) + btw > MaxInputStrLen then
             exit;
 
+        // if speech bubble quotes are used as first input, add the closing quote and place cursor inbetween
         if (Length(InputStr.s) = 0) and (Length(utf8) = 1) and (charIsForHogSpeech(utf8[1])) then
             begin
             InsertIntoInputStr(utf8);
@@ -1127,9 +1106,6 @@
     else
         begin
         SetLine(InputStr, '/team ', true);
-        // update InputStrL and cursor accordingly
-        // this allows cursor-jumping over '/team ' as if it was a single char
-        InputStrL[6]:= 0;
         cursorPos:= 6;
         UpdateCursorCoords();
         end;
@@ -1162,8 +1138,6 @@
     for i:= 0 to MaxStrIndex do
         Strs[i].Tex := nil;
 
-    FillChar(InputStrL, sizeof(InputStrL), InputStrLNoPred);
-
     LastKeyPressTick:= 0;
     ResetCursor();
 end;
--- a/hedgewars/uCollisions.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uCollisions.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -211,10 +211,15 @@
     i:= y + Gear^.Radius * 2 - 2;
     repeat
         if (y and LAND_HEIGHT_MASK) = 0 then
-            if Land[y, x] and Gear^.CollisionMask > 255 then
-                exit(Land[y, x] and Gear^.CollisionMask)
-            else if Land[y, x] and Gear^.CollisionMask <> 0 then
-                pixel:= Land[y, x] and Gear^.CollisionMask;
+            begin
+            if Land[y, x] and Gear^.CollisionMask <> 0 then
+                begin
+                if Land[y, x] and Gear^.CollisionMask > 255 then
+                    exit(Land[y, x] and Gear^.CollisionMask)
+                else
+                    pixel:= Land[y, x] and Gear^.CollisionMask;
+                end;
+            end;
     inc(y)
     until (y > i);
     end;
@@ -274,10 +279,12 @@
     repeat
     if (x and LAND_WIDTH_MASK) = 0 then
         if Land[y, x] > 0 then
+            begin
             if Land[y, x] and Gear^.CollisionMask > 255 then
                 exit(Land[y, x] and Gear^.CollisionMask)
-            else if Land[y, x] <> 0 then
+            else // if Land[y, x] <> 0 then
                 pixel:= Land[y, x] and Gear^.CollisionMask;
+            end;
     inc(x)
     until (x > i);
     end;
--- a/hedgewars/uCommandHandlers.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uCommandHandlers.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -492,7 +492,7 @@
 begin
 s:= s; // avoid compiler hint
 flagMakeCapture:= true;
-flagDumpLand:= LocalMessage and gmPrecise  <> 0;
+flagDumpLand:= (LocalMessage and gmPrecise  <> 0);
 end;
 
 procedure chRecord(var s: shortstring);
--- a/hedgewars/uCommands.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uCommands.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uConsole.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uConsole.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uConsts.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uConsts.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -171,6 +171,8 @@
 
     cFontBorder = 2;
 
+    cDefaultBuildMaxDist = 256;
+
     // do not change this value
     cDefaultZoomLevel = 2.0;
 
--- a/hedgewars/uDebug.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uDebug.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uFloat.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uFloat.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uGame.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uGame.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -108,6 +108,7 @@
                         break;
                         end;
                 gmtDemo, gmtRecord: begin
+                        AddFileLog('End of input, halting now');
                         GameState:= gsExit;
                         exit
                         end;
--- a/hedgewars/uGears.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uGears.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -320,6 +320,7 @@
                     Ammoz[amTardis].Probability:= 0;
                     end;
                 AddCaption(trmsg[sidSuddenDeath], cWhiteColor, capgrpGameState);
+                ScriptCall('onSuddenDeath');
                 playSound(sndSuddenDeath);
                 StopMusic;
                 if SDMusicFN <> '' then PlayMusic
@@ -723,7 +724,7 @@
 begin
 if (GameFlags and gfPlaceHog) <> 0 then
     PlacingHogs:= true;
-if (GameFlags and gfDivideTeams) <> 0 then
+if (ClansCount = 2) and ((GameFlags and gfDivideTeams) <> 0) then
     begin
     t:= 0;
     TryDo(ClansCount = 2, 'More or less than 2 clans on map in divided teams mode!', true);
@@ -981,7 +982,7 @@
                 Gear^.FrameTicks:= x
                 end;
             //ParseCommand('/say [' + hh^.Name + '] '+text, true)
-            AddChatString(#1+'[' + HH^.Name + '] '+text);
+            AddChatString(#9+'[' + HH^.Name + '] '+text);
             end
         end
     else if (x >= 4) then
--- a/hedgewars/uGearsHandlers.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uGearsHandlers.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uGearsHandlersMess.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uGearsHandlersMess.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -1094,6 +1094,7 @@
     AllInactive := false;
     Gear^.X := Gear^.X + Gear^.dX;
     Gear^.Y := Gear^.Y + Gear^.dY;
+    WorldWrap(Gear);
     Gear^.dY := Gear^.dY + cGravity;
     CheckGearDrowning(Gear);
     CheckCollision(Gear);
@@ -1504,6 +1505,11 @@
         SetLittle(HHGear^.dX);
         HHGear^.dY := _0;
         end
+    else if Gear^.dY.isNegative and (TestCollisionYwithGear(HHGear, -1) <> 0) then
+        begin
+        Gear^.dY := cGravity;
+        HHGear^.dY := cGravity;
+        end
     else
         begin
         if CheckLandValue(hwRound(Gear^.X), hwRound(Gear^.Y + Gear^.dY + cGravity), lfLandMask) then
@@ -1914,7 +1920,9 @@
                        (hwRound(hwSqr(tX) + hwSqr(tY)) < sqr(Gear^.Karma)) then
                         begin
                         Gear^.Hedgehog:= CurrentHedgehog;
+                        tmpG:= FollowGear;
                         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Karma, Gear^.Hedgehog, EXPLAutoSound);
+                        FollowGear:= tmpG;
                         DeleteGear(Gear);
                         exit
                         end
@@ -1929,7 +1937,8 @@
                 Gear^.State:= Gear^.State and (not gstAttacking);
                 Gear^.Timer:= Gear^.WDTimer
                 end;
-            dec(Gear^.Timer);
+            if Gear^.Timer > 0 then
+                dec(Gear^.Timer);
             end
         end
     else // gsttmpFlag = 0
@@ -1951,9 +1960,9 @@
     if land = 0 then land:= TestCollisionYwithGear(Gear,-2);
     if land = 0 then land:= TestCollisionXwithGear(Gear,-2);
     if land = 0 then land:= TestCollisionYwithGear(Gear, 2);
-    if (land <> 0) and (land and lfBouncy = 0) then
-        begin
-        if (not isZero(Gear^.dX)) or (not isZero(Gear^.dY)) then
+    if (land <> 0) and ((land and lfBouncy = 0) or ((Gear^.State and gstMoving) = 0)) then
+        begin
+        if ((Gear^.State and gstMoving) <> 0) or (not isZero(Gear^.dX)) or (not isZero(Gear^.dY)) then
             begin
             PlaySound(sndRopeAttach);
             Gear^.dX:= _0;
@@ -2667,7 +2676,7 @@
             //4: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtWaterMelon, 0, cBombsSpeed *
             //                 Gear^.Tag, _0, 5000);
             end;
-        Gear^.dX := Gear^.dX + int2hwFloat(30 * Gear^.Tag);
+        Gear^.dX := Gear^.dX + int2hwFloat(Gear^.Damage * Gear^.Tag);
         if CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y)) then
             FollowGear^.State:= FollowGear^.State or gstSubmersible;
         StopSoundChan(Gear^.SoundChannel, 4000);
@@ -2700,7 +2709,7 @@
         end;
 
     Gear^.Y := int2hwFloat(topY-300);
-    Gear^.dX := int2hwFloat(Gear^.Target.X - 5 * Gear^.Tag * 15);
+    Gear^.dX := int2hwFloat(Gear^.Target.X) - int2hwFloat(Gear^.Tag * Gear^.Health * Gear^.Damage) / 2;
 
     // calcs for Napalm Strike, so that it will hit the target (without wind at least :P)
     if (Gear^.State = 2) then
@@ -2710,7 +2719,6 @@
             Gear^.dX := Gear^.dX - cBombsSpeed * hwSqrt((int2hwFloat(Gear^.Target.Y) - Gear^.Y) * 2 /
                 cGravity) * Gear^.Tag;
 
-    Gear^.Health := 6;
     Gear^.doStep := @doStepAirAttackWork;
     Gear^.SoundChannel := LoopSound(sndPlane, 4000);
 
@@ -2761,10 +2769,10 @@
     if Gear^.AmmoType = amRubber then LandFlags:= lfBouncy
     else if cIce then LandFlags:= lfIce;
 
-    distFail:= ((Distance(tx - x, ty - y) > _256) and ((WorldEdge <> weWrap) or
+    distFail:= (cBuildMaxDist > 0) and ((hwRound(Distance(tx - x, ty - y)) > cBuildMaxDist) and ((WorldEdge <> weWrap) or
             (
-            (Distance(tx - int2hwFloat(rightX+(rx-leftX)), ty - y) > _256) and
-            (Distance(tx - int2hwFloat(leftX-(rightX-rx)), ty - y) > _256)
+            (hwRound(Distance(tx - int2hwFloat(rightX+(rx-leftX)), ty - y)) > cBuildMaxDist) and
+            (hwRound(Distance(tx - int2hwFloat(leftX-(rightX-rx)), ty - y)) > cBuildMaxDist)
             )));
     if distFail
     or (not TryPlaceOnLand(Gear^.Target.X - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Width div 2, Gear^.Target.Y - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Height div 2, Ammoz[Gear^.AmmoType].PosSprite, Gear^.State, true, LandFlags)) then
@@ -2799,11 +2807,12 @@
     HHGear: PGear;
 begin
     HHGear := Gear^.Hedgehog^.Gear;
-    doStepHedgehogMoving(HHGear);
+    if HHGear <> nil then doStepHedgehogMoving(HHGear);
     // if not infattack mode wait for hedgehog finish falling to collect cases
     if ((GameFlags and gfInfAttack) <> 0)
+    or (HHGear = nil)
     or ((HHGear^.State and gstMoving) = 0)
-    or (Gear^.Hedgehog^.Gear^.Damage > 0)
+    or (HHGear^.Damage > 0)
     or ((HHGear^.State and gstDrowning) = 1) then
         begin
         DeleteGear(Gear);
@@ -2813,7 +2822,7 @@
 
 procedure doStepTeleportAnim(Gear: PGear);
 begin
-    if (Gear^.Hedgehog^.Gear^.Damage > 0) then
+    if (Gear^.Hedgehog^.Gear = nil) or (Gear^.Hedgehog^.Gear^.Damage > 0) then
         begin
         DeleteGear(Gear);
         AfterAttack;
@@ -2840,6 +2849,11 @@
     AllInactive := false;
 
     HHGear := Gear^.Hedgehog^.Gear;
+    if HHGear = nil then
+    begin
+        DeleteGear(Gear);
+        exit
+    end; 
 
     valid:= false;
 
@@ -3663,7 +3677,14 @@
     FollowGear := Gear;
 
     if Gear^.Timer > 0 then
+        begin
+        if Gear^.Timer = 1 then
+            begin
+            StopSoundChan(Gear^.SoundChannel);
+            Gear^.SoundChannel:= -1;
+            end;
         dec(Gear^.Timer);
+        end;
 
     fChanged := false;
     if (HHGear = nil) or ((HHGear^.State and gstHHDriven) = 0) or (Gear^.Timer = 0) then
@@ -5177,7 +5198,9 @@
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepPoisonCloud(Gear: PGear);
 begin
-    WorldWrap(Gear);
+    // don't bounce
+    if WorldEdge <> weBounce then
+        WorldWrap(Gear);
     if Gear^.Timer = 0 then
         begin
         DeleteGear(Gear);
@@ -5198,11 +5221,14 @@
 procedure doStepHammer(Gear: PGear);
 var HHGear, tmp, tmp2: PGear;
          t: PGearArray;
-         i: LongInt;
+ i, dmg, d: LongInt;
 begin
 HHGear:= Gear^.Hedgehog^.Gear;
 HHGear^.State:= HHGear^.State or gstNoDamage;
 DeleteCI(HHGear);
+SetLittle(HHGear^.dY);
+HHGear^.dY.IsNegative:= true;
+HHGear^.State:= HHGear^.State or gstMoving;
 
 t:= CheckGearsCollision(Gear);
 
@@ -5217,17 +5243,36 @@
     if (tmp^.State and gstNoDamage) = 0 then
         if (tmp^.Kind = gtHedgehog) or (tmp^.Kind = gtMine) or (tmp^.Kind = gtExplosives) then
             begin
+            dmg:= 0;
             //tmp^.State:= tmp^.State or gstFlatened;
             if (tmp^.Kind <> gtHedgehog) or (tmp^.Hedgehog^.Effects[heInvulnerable] = 0) then
-                ApplyDamage(tmp, CurrentHedgehog, tmp^.Health div 3, dsUnknown);
-            //DrawTunnel(tmp^.X, tmp^.Y - _1, _0, _0_5, cHHRadius * 6, cHHRadius * 3);
-            tmp2:= AddGear(hwRound(tmp^.X), hwRound(tmp^.Y), gtHammerHit, 0, _0, _0, 0);
-            tmp2^.LinkedGear:= tmp;
-            SetAllToActive
-            end
-        else
-            begin
-            end
+                begin
+                // base damage on remaining health
+                dmg:= (tmp^.Health - tmp^.Damage);
+                if dmg > 0 then
+                    begin
+                    // do 1/2 current hp worth of damage if extra damage is enabled (1/3 damage if not)
+                    if cDamageModifier > _1 then
+                        d:= 2
+                    else
+                        d:= 3;
+
+                    // always rounding down
+                    dmg:= dmg div d;
+
+                    if dmg > 0 then
+                        ApplyDamage(tmp, CurrentHedgehog, dmg, dsUnknown);
+                    end;
+                end;
+
+            if (tmp^.Kind <> gtHedgehog) or (dmg > 0) or (tmp^.Health > tmp^.Damage) then
+                begin
+                //DrawTunnel(tmp^.X, tmp^.Y - _1, _0, _0_5, cHHRadius * 6, cHHRadius * 3);
+                tmp2:= AddGear(hwRound(tmp^.X), hwRound(tmp^.Y), gtHammerHit, 0, _0, _0, 0);
+                tmp2^.LinkedGear:= tmp;
+                SetAllToActive
+                end;
+            end;
     end;
 
 HHGear^.State:= HHGear^.State and (not gstNoDamage);
@@ -5386,7 +5431,7 @@
         for i:= 0 to graves.size - 1 do
             if graves.ar^[i]^.Health > 0 then
                 begin
-                resgear := AddGear(hwRound(graves.ar^[i]^.X), hwRound(graves.ar^[i]^.Y), gtHedgehog, gstWait, _0, _0, 0);
+                resgear := AddGear(hwRound(graves.ar^[i]^.X), hwRound(graves.ar^[i]^.Y), gtHedgehog, gstWait, _0, _0, 0,graves.ar^[i]^.Pos);
                 resgear^.Hedgehog := graves.ar^[i]^.Hedgehog;
                 resgear^.Health := graves.ar^[i]^.Health;
                 PHedgehog(graves.ar^[i]^.Hedgehog)^.Gear := resgear;
@@ -5748,9 +5793,16 @@
 All these effects assume the ray's angle is not changed and that the target type was unchanged over a number of ticks.  This is a simplifying assumption for "gun was applying freezing effect to the same target".
   * When fired at water a layer of ice textured land is added above the water.
   * When fired at non-ice land (land and lfLandMask and not lfIce) the land is overlaid with a thin layer of ice textured land around that point (say, 1 or 2px into land, 1px above). For attractiveness, a slope would probably be needed.
-  * When fired at a hog (land and $00FF <> 0), while the hog is targetted, the hog's state is set to frozen.  As long as the gun is on the hog, a frozen hog sprite creeps up from the feet to the head.  If the effect is interrupted before reaching the top, the freezing state is cleared.
-A frozen hog will animate differently.  To be decided, but possibly in a similar fashion to a grave when it comes to explosions.  The hog might (possibly) not be damaged by explosions.  This might make freezing potentially useful for friendlies in a bad position.  It might be better to allow damage though.
-A frozen hog stays frozen for a certain number of turns. Each turn the frozen overlay becomes fainter, until it fades and the hog animates normally again.
+  * When fired at a hog (land and $00FF <> 0), while the hog is targetted, the hog's state is set to frozen.
+    As long as the gun is on the hog, a frozen hog sprite creeps up from the feet to the head.
+    If the effect is interrupted before reaching the top, the freezing state is cleared.
+A frozen hog will animate differently.
+    To be decided, but possibly in a similar fashion to a grave when it comes to explosions.
+    The hog might (possibly) not be damaged by explosions.
+    This might make freezing potentially useful for friendlies in a bad position.
+    It might be better to allow damage though.
+A frozen hog stays frozen for a certain number of turns.
+    Each turn the frozen overlay becomes fainter, until it fades and the hog animates normally again.
 *)
 
 
--- a/hedgewars/uGearsHandlersRope.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uGearsHandlersRope.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -42,7 +42,8 @@
         OutError('ERROR: doStepRopeAfterAttack called while HHGear = nil', IsNilHHFatal);
         DeleteGear(Gear);
         exit()
-        end;
+        end
+    else if not CurrentTeam^.ExtDriven and (FollowGear <> nil) then FollowGear := HHGear;
 
     tX:= HHGear^.X;
     if WorldWrap(HHGear) and (WorldEdge = weWrap) and
@@ -137,7 +138,8 @@
         OutError('ERROR: doStepRopeWork called while HHGear = nil', IsNilHHFatal);
         DeleteGear(Gear);
         exit()
-        end;
+        end
+    else if not CurrentTeam^.ExtDriven and (FollowGear <> nil) then FollowGear := HHGear;
 
     if ((HHGear^.State and gstHHDriven) = 0) or
         (CheckGearDrowning(HHGear)) or (Gear^.PortalCounter <> 0) then
@@ -425,6 +427,7 @@
     HHGear: PGear;
     tx, ty, tt: hwFloat;
 begin
+    
     Gear^.X := Gear^.X - Gear^.dX;
     Gear^.Y := Gear^.Y - Gear^.dY;
     Gear^.Elasticity := Gear^.Elasticity + _1;
@@ -435,7 +438,8 @@
         OutError('ERROR: doStepRopeAttach called while HHGear = nil', IsNilHHFatal);
         DeleteGear(Gear);
         exit()
-        end;
+        end
+    else if not CurrentTeam^.ExtDriven and (FollowGear <> nil) then FollowGear := HHGear;
 
     DeleteCI(HHGear);
 
--- a/hedgewars/uGearsHedgehog.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uGearsHedgehog.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -213,6 +213,7 @@
     speech: PVisualGear;
     newGear:  PGear;
     CurWeapon: PAmmo;
+    usedAmmoType: TAmmoType;
     altUse: boolean;
     elastic: hwFloat;
 begin
@@ -222,6 +223,7 @@
 with Gear^,
     Gear^.Hedgehog^ do
         begin
+        usedAmmoType:= CurAmmoType;
         if ((State and gstHHDriven) <> 0) and ((State and (gstAttacked or gstChooseTarget)) = 0) and (((State and gstMoving) = 0)
         or (Power > 0)
         or (CurAmmoType = amTeleport)
@@ -304,7 +306,7 @@
                    amPickHammer: newGear:= AddGear(hwRound(lx), hwRound(ly) + cHHRadius, gtPickHammer, 0, _0, _0, 0);
                          amSkip: ParseCommand('/skip', true);
                          amRope: newGear:= AddGear(hwRound(lx), hwRound(ly), gtRope, 0, xx, yy, 0);
-                         amMine: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtMine, gstWait, SignAs(_0_02, dX), _0, 3000);
+                         amMine: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtMine, gstWait, SignAs(_0_02, dX), _0, 0);
                         amSMine: newGear:= AddGear(hwRound(lx), hwRound(ly), gtSMine,    0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0);
                         amKnife: begin
                                  newGear:= AddGear(hwRound(lx), hwRound(ly), gtKnife,    0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0);
@@ -449,7 +451,7 @@
             if CurAmmoType = amAirMine then newGear^.Hedgehog:= nil;
 
             if ((CurAmmoType = amMine) or (CurAmmoType = amSMine) or (CurAmmoType = amAirMine)) and (GameFlags and gfInfAttack <> 0) then
-                newGear^.FlightTime:= GameTicks + 1000
+                newGear^.FlightTime:= GameTicks + min(TurnTimeLeft,1000)
             else if CurAmmoType = amDrill then
                 newGear^.FlightTime:= GameTicks + 250;
             if Ammoz[CurAmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0 then
@@ -509,7 +511,7 @@
         else
             Message:= Message and (not gmAttack);
 
-    ScriptCall('onHogAttack', ord(CurAmmoType));
+    ScriptCall('onHogAttack', ord(usedAmmoType));
     end; // of with Gear^, Gear^.Hedgehog^ do
 
     TargetPoint.X := NoPointX;
@@ -570,6 +572,7 @@
 procedure doStepHedgehogDead(Gear: PGear);
 const frametime = 200;
       timertime = frametime * 6;
+var grave:  PGear;
 begin
 if Gear^.Hedgehog^.Unplaced then
     exit;
@@ -585,7 +588,10 @@
     Gear^.Hedgehog^.Effects[heFrozen]:= 0;
     Gear^.State:= Gear^.State or gstNoDamage;
     doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, CurrentHedgehog, EXPLAutoSound);
-    AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtGrave, 0, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
+    grave:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtGrave, 0, _0, _0, 0);
+    grave^.Hedgehog:= Gear^.Hedgehog;
+    grave^.Pos:= Gear^.uid;
+    
     DeleteGear(Gear);
     SetAllToActive
     end
@@ -904,6 +910,7 @@
         end;
     Gear^.State:= Gear^.State or gstMoving;
     if (Gear^.State and gstHHDriven <> 0) and
+       (FollowGear <> nil) and
        (not CurrentTeam^.ExtDriven) and (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > _0_003) then
         begin
         // TODO: why so aggressive at setting FollowGear when falling?
--- a/hedgewars/uGearsList.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uGearsList.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -23,6 +23,7 @@
 uses uFloat, uTypes, SDLh;
 
 function  AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear;
+function  AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer, newUid: LongWord): PGear;
 procedure DeleteGear(Gear: PGear);
 procedure InsertGearToList(Gear: PGear);
 procedure RemoveGearFromList(Gear: PGear);
@@ -155,7 +156,7 @@
     Gear^.NextGear^.PrevGear:= Gear^.PrevGear;
 if Gear^.PrevGear <> nil then
     Gear^.PrevGear^.NextGear:= Gear^.NextGear
-else 
+else
     GearsList:= Gear^.NextGear;
 
 Gear^.NextGear:= nil;
@@ -164,11 +165,16 @@
 
 
 function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear;
+begin
+AddGear:= AddGear(X, Y, Kind, State, dX, dY, Timer, 0);
+end;
+function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer, newUid: LongWord): PGear;
 var gear: PGear;
     //c: byte;
     cakeData: PCakeData;
 begin
-inc(GCounter);
+if newUid = 0 then
+    inc(GCounter);
 
 AddFileLog('AddGear: #' + inttostr(GCounter) + ' (' + inttostr(x) + ',' + inttostr(y) + '), d(' + floattostr(dX) + ',' + floattostr(dY) + ') type = ' + EnumToStr(Kind));
 
@@ -186,7 +192,9 @@
 gear^.doStep:= doStepHandlers[Kind];
 gear^.CollisionIndex:= -1;
 gear^.Timer:= Timer;
-gear^.uid:= GCounter;
+if newUid = 0 then
+     gear^.uid:= GCounter
+else gear^.uid:= newUid;
 gear^.SoundChannel:= -1;
 gear^.ImpactSound:= sndNone;
 gear^.Density:= _1;
@@ -238,6 +246,8 @@
   gtMelonPiece: begin
                 gear^.AdvBounce:= 1;
                 gear^.Density:= _2;
+                gear^.Elasticity:= _0_8;
+                gear^.Friction:= _0_995;
                 gear^.Radius:= 4
                 end;
     gtHedgehog: begin
@@ -464,6 +474,8 @@
                 gear^.Tag:= Y
                 end;
    gtAirAttack: begin
+                gear^.Health:= 6;
+                gear^.Damage:= 30;
                 gear^.Z:= cHHZ+2;
                 gear^.Tint:= gear^.Hedgehog^.Team^.Clan^.Color shl 8 or $FF
                 end;
@@ -669,6 +681,7 @@
     t,i: Longword;
     k: boolean;
     cakeData: PCakeData;
+    iterator: PGear;
 begin
 
 ScriptCall('onGearDelete', gear^.uid);
@@ -677,6 +690,31 @@
 
 FreeAndNilTexture(Gear^.Tex);
 
+// remove potential links to this gear
+// currently relevant to: gears linked by hammer
+if (Gear^.Kind = gtHedgehog) or (Gear^.Kind = gtMine) or (Gear^.Kind = gtExplosives) then
+    begin
+    // check all gears for stuff to port through
+    iterator := nil;
+    while true do
+        begin
+
+        // iterate through GearsList
+        if iterator = nil then
+            iterator := GearsList
+        else
+            iterator := iterator^.NextGear;
+
+        // end of list?
+        if iterator = nil then
+            break;
+
+        if iterator^.LinkedGear = Gear then
+            iterator^.LinkedGear:= nil;
+        end;
+
+    end;
+
 // make sure that portals have their link removed before deletion
 if (Gear^.Kind = gtPortal) then
     begin
@@ -733,10 +771,12 @@
                     k:= true;
             if not k then
                 for i:= 0 to Pred(team^.Clan^.TeamsNumber) do
-                    begin
-                    team^.Clan^.Teams[i]^.hasGone:= true;
-                    TeamGoneEffect(team^.Clan^.Teams[i]^)
-                    end
+                    with team^.Clan^.Teams[i]^ do
+                        for t:= 0 to cMaxHHIndex do
+                            if Hedgehogs[t].Gear <> nil then
+                                Hedgehogs[t].Gear^.Health:= 0
+                            else if (Hedgehogs[t].GearHidden <> nil) then
+                                Hedgehogs[t].GearHidden^.Health:= 0  // hog is still hidden. if tardis should return though, lua, eh...
             end;
 
         // should be not CurrentHedgehog, but hedgehog of the last gear which caused damage to this hog
--- a/hedgewars/uGearsRender.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uGearsRender.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -247,13 +247,10 @@
             HHGear:= hh^.Gear;
             x:= hwRound(HHGear^.X) + WorldDx;
             y:= hwRound(HHGear^.Y) + WorldDy - 2;
-            if (SpeechHogNumber <> c) or ((RealTicks and 512) < 256) then
-                begin
-                DrawTextureF(SpritesData[sprFrame].Texture, 0.5, x - fSprOff, y, 0, 1, SpritesData[sprFrame].Width, SpritesData[sprFrame].Height);
-                DrawTextureF(SpritesData[sprFrame].Texture, 0.5, x + fSprOff, y, 1, 1, SpritesData[sprFrame].Width, SpritesData[sprFrame].Height);
-                DrawTextureF(SpritesData[sprBigDigit].Texture, 0.5, x, y, c, 1, sprW, sprH);
-                end
-            else
+            DrawTextureF(SpritesData[sprFrame].Texture, 0.5, x - fSprOff, y, 0, 1, SpritesData[sprFrame].Width, SpritesData[sprFrame].Height);
+            DrawTextureF(SpritesData[sprFrame].Texture, 0.5, x + fSprOff, y, 1, 1, SpritesData[sprFrame].Width, SpritesData[sprFrame].Height);
+            DrawTextureF(SpritesData[sprBigDigit].Texture, 0.5, x, y, c, 1, sprW, sprH);
+            if SpeechHogNumber = c then
                 DrawCircle(x, y, 20, 3, 0, $FF, $FF, $80);
             end;
         until (i > cMaxHHIndex);
@@ -731,7 +728,7 @@
                 amHellishBomb: DrawSpriteRotated(sprHandHellish, hx, hy, sign, aangle);
                 amGasBomb: DrawSpriteRotated(sprHandCheese, hx, hy, sign, aangle);
                 amMine: DrawSpriteRotated(sprHandMine, hx, hy, sign, aangle);
-                amAirMine: DrawSpriteRotated(sprHandMine, hx, hy, sign, aangle);
+                amAirMine: DrawSpriteRotated(sprHandAirMine, hx, hy, sign, aangle);
                 amSMine: DrawSpriteRotated(sprHandSMine, hx, hy, sign, aangle);
                 amKnife: DrawSpriteRotatedF(sprHandKnife, hx, hy, 0, sign, aangle);
                 amSeduction: begin
@@ -749,32 +746,39 @@
                 amRubber,
                 amGirder: begin
                     DrawSpriteRotated(sprHandConstruction, hx, hy, sign, aangle);
-                    if WorldEdge = weWrap then
+                    if cBuildMaxDist = cDefaultBuildMaxDist then
                         begin
-                        if hwRound(Gear^.X) < LongInt(leftX) + 256 then
-                            DrawSpriteClipped(sprGirder,
-                                            rightX+(ox-leftX)-256,
-                                            oy-256,
-                                            LongInt(topY)+WorldDy,
-                                            LongInt(rightX)+WorldDx,
-                                            cWaterLine+WorldDy,
-                                            LongInt(leftX)+WorldDx);
-                        if hwRound(Gear^.X) > LongInt(rightX) - 256 then
-                            DrawSpriteClipped(sprGirder,
-                                            leftX-(rightX-ox)-256,
-                                            oy-256,
-                                            LongInt(topY)+WorldDy,
-                                            LongInt(rightX)+WorldDx,
-                                            cWaterLine+WorldDy,
-                                            LongInt(leftX)+WorldDx)
+                        if WorldEdge = weWrap then
+                            begin
+                            if hwRound(Gear^.X) < LongInt(leftX) + 256 then
+                                DrawSpriteClipped(sprGirder,
+                                                rightX+(ox-leftX)-256,
+                                                oy-256,
+                                                LongInt(topY)+WorldDy,
+                                                LongInt(rightX)+WorldDx,
+                                                cWaterLine+WorldDy,
+                                                LongInt(leftX)+WorldDx);
+                            if hwRound(Gear^.X) > LongInt(rightX) - 256 then
+                                DrawSpriteClipped(sprGirder,
+                                                leftX-(rightX-ox)-256,
+                                                oy-256,
+                                                LongInt(topY)+WorldDy,
+                                                LongInt(rightX)+WorldDx,
+                                                cWaterLine+WorldDy,
+                                                LongInt(leftX)+WorldDx)
+                            end;
+                        DrawSpriteClipped(sprGirder,
+                                        ox-256,
+                                        oy-256,
+                                        LongInt(topY)+WorldDy,
+                                        LongInt(rightX)+WorldDx,
+                                        cWaterLine+WorldDy,
+                                        LongInt(leftX)+WorldDx)
+                        end
+                    else if cBuildMaxDist > 0 then
+                        begin
+                            DrawCircle(hx, hy, cBuildMaxDist, 3, $FF, 0, 0, $80);
                         end;
-                    DrawSpriteClipped(sprGirder,
-                                    ox-256,
-                                    oy-256,
-                                    LongInt(topY)+WorldDy,
-                                    LongInt(rightX)+WorldDx,
-                                    cWaterLine+WorldDy,
-                                    LongInt(leftX)+WorldDx)
                     end;
                 amBee: DrawSpriteRotatedF(sprHandBee, hx, hy, (RealTicks div 125) mod 4, sign, aangle);
                 amFlamethrower: DrawSpriteRotatedF(sprHandFlamethrower, hx, hy, (RealTicks div 125) mod 4, sign, aangle);
@@ -1384,12 +1388,12 @@
                             Tint(Gear^.Hedgehog^.Team^.Clan^.Color shl 8 or $FF)
                         else
                             Tint(Gear^.Hedgehog^.Team^.Clan^.Color shl 8 or max($00, round(Gear^.Power * (1-abs(0.5 - (GameTicks mod 2000) / 2000)))));
-                        DrawSprite(sprTardis, x-24, y-63,0);
+                        DrawSprite(sprTardis, x-25, y-64,0);
                         if Gear^.Pos = 2 then
                             untint
                         else
                             Tint($FF,$FF,$FF,max($00, round(Gear^.Power * (1-abs(0.5 - (GameTicks mod 2000) / 2000)))));
-                        DrawSprite(sprTardis, x-24, y-63,1);
+                        DrawSprite(sprTardis, x-25, y-64,1);
                         if Gear^.Pos <> 2 then
                             untint
 (*
--- a/hedgewars/uGearsUtils.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uGearsUtils.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -829,7 +829,7 @@
 
 procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt; skipProximity: boolean);
 var x: LongInt;
-    y, sy: LongInt;
+    y, sy, dir: LongInt;
     ar: array[0..1023] of TPoint;
     ar2: array[0..2047] of TPoint;
     temp: TPoint;
@@ -850,9 +850,10 @@
     delta:= LAND_WIDTH div 16;
     cnt2:= 0;
     repeat
-        x:= Left + max(LAND_WIDTH div 2048, LongInt(GetRandom(Delta)));
+        if GetRandom(2) = 0 then dir:= -1 else dir:= 1;
+        x:= max(LAND_WIDTH div 2048, LongInt(GetRandom(Delta)));
+        if dir = 1 then x:= Left + x else x:= Right - x; 
         repeat
-            inc(x, Delta);
             cnt:= 0;
             y:= min(1024, topY) - Gear^.Radius shl 1;
             while y < cWaterLine do
@@ -901,9 +902,10 @@
                     ar2[cnt2].x:= x;
                     ar2[cnt2].y:= y;
                     inc(cnt2)
-                    end
-                end
-        until (x + Delta > Right);
+                    end;
+                end;
+            inc(x, Delta*dir)
+        until ((dir = 1) and (x > Right)) or ((dir = -1) and (x < Left));
 
         dec(Delta, 60)
     until (cnt2 > 0) or (Delta < 70);
--- a/hedgewars/uIO.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uIO.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uInputHandler.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uInputHandler.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uLand.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uLand.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -36,6 +36,7 @@
      uLandGenTemplateBased, uLandUtils;
 
 var digest: shortstring;
+    maskOnly: boolean;
 
 
 procedure PrettifyLandAlpha();
@@ -50,24 +51,32 @@
 var tmpsurf: PSDL_Surface;
     r, rr: TSDL_Rect;
     x, yd, yu: LongInt;
+    targetMask: Word;
 begin
     tmpsurf:= LoadDataImage(ptCurrTheme, 'Border', ifCritical or ifIgnoreCaps or ifTransparent);
+
+    // if mask only, all land gets filled with landtex and therefore needs borders
+    if maskOnly then
+        targetMask:= lfLandMask
+    else
+        targetMask:= lfBasic;
+
     for x:= 0 to LAND_WIDTH - 1 do
     begin
         yd:= LAND_HEIGHT - 1;
         repeat
-            while (yd > 0) and (Land[yd, x] <> lfBasic) do dec(yd);
+            while (yd > 0) and ((Land[yd, x] and targetMask) = 0) do dec(yd);
 
             if (yd < 0) then
                 yd:= 0;
 
-            while (yd < LAND_HEIGHT) and (Land[yd, x] = lfBasic) do
+            while (yd < LAND_HEIGHT) and ((Land[yd, x] and targetMask) <> 0) do
                 inc(yd);
             dec(yd);
             yu:= yd;
 
-            while (yu > 0  ) and (Land[yu, x] = lfBasic) do dec(yu);
-            while (yu < yd ) and (Land[yu, x] <>  lfBasic) do inc(yu);
+            while (yu > 0  ) and ((Land[yu, x] and targetMask) <> 0) do dec(yu);
+            while (yu < yd ) and ((Land[yu, x] and targetMask) =  0) do inc(yu);
 
             if (yd < LAND_HEIGHT - 1) and ((yd - yu) >= 16) then
                 begin
@@ -372,8 +381,16 @@
 BlitImageAndGenerateCollisionInfo(leftX+150, LAND_HEIGHT - tmpsurf^.h, tmpsurf^.w, tmpsurf);
 SDL_FreeSurface(tmpsurf);
 
-tmpsurf:= LoadDataImage(ptForts, ClansArray[1]^.Teams[0]^.FortName + 'R', ifAlpha or ifCritical or ifTransparent or ifIgnoreCaps);
-BlitImageAndGenerateCollisionInfo(rightX - 150 - tmpsurf^.w, LAND_HEIGHT - tmpsurf^.h, tmpsurf^.w, tmpsurf);
+// not critical because if no R we can fallback to mirrored L
+tmpsurf:= LoadDataImage(ptForts, ClansArray[1]^.Teams[0]^.FortName + 'R', ifAlpha or ifTransparent or ifIgnoreCaps);
+// fallback
+if tmpsurf = nil then
+    begin
+    tmpsurf:= LoadDataImage(ptForts, ClansArray[1]^.Teams[0]^.FortName + 'L', ifAlpha or ifCritical or ifTransparent or ifIgnoreCaps);
+    BlitImageAndGenerateCollisionInfo(rightX - 150 - tmpsurf^.w, LAND_HEIGHT - tmpsurf^.h, tmpsurf^.w, tmpsurf, 0, true);
+    end
+else
+    BlitImageAndGenerateCollisionInfo(rightX - 150 - tmpsurf^.w, LAND_HEIGHT - tmpsurf^.h, tmpsurf^.w, tmpsurf);
 SDL_FreeSurface(tmpsurf);
 end;
 
@@ -517,7 +534,6 @@
 procedure GenMap;
 var x, y, w, c: Longword;
     map, mask: shortstring;
-    maskOnly: boolean;
 begin
     hasBorder:= false;
     maskOnly:= false;
@@ -802,6 +818,7 @@
 
     LandBackSurface:= nil;
     digest:= '';
+    maskOnly:= false;
     LAND_WIDTH:= 0;
     LAND_HEIGHT:= 0;
 (*
--- a/hedgewars/uLandGenMaze.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uLandGenMaze.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -315,42 +315,42 @@
 begin
 case cTemplateFilter of
     0: begin
-        cellsize := small_cell_size;
-        maze_inverted := false;
-        minDistance:= max(cFeatureSize*8,32);
-	dabDiv:= 150;
-    end;
+       cellsize := small_cell_size;
+       maze_inverted := false;
+       minDistance:= max(cFeatureSize*8,32);
+       dabDiv:= 150;
+       end;
     1: begin
-        cellsize := medium_cell_size;
-        minDistance:= max(cFeatureSize*6,20);
-        maze_inverted := false;
-	dabDiv:= 100;
-    end;
+       cellsize := medium_cell_size;
+       minDistance:= max(cFeatureSize*6,20);
+       maze_inverted := false;
+       dabDiv:= 100;
+       end;
     2: begin
-        cellsize := large_cell_size;
-        minDistance:= max(cFeatureSize*5,12);
-        maze_inverted := false;
-	dabDiv:= 90;
-    end;
+       cellsize := large_cell_size;
+       minDistance:= max(cFeatureSize*5,12);
+       maze_inverted := false;
+       dabDiv:= 90;
+       end;
     3: begin
-        cellsize := small_cell_size;
-        minDistance:= max(cFeatureSize*8,32);
-        maze_inverted := true;
-	dabDiv:= 130;
-    end;
+       cellsize := small_cell_size;
+       minDistance:= max(cFeatureSize*8,32);
+       maze_inverted := true;
+       dabDiv:= 130;
+       end;
     4: begin
-        cellsize := medium_cell_size;
-        minDistance:= max(cFeatureSize*6,20);
-        maze_inverted := true;
-	dabDiv:= 100;
-    end;
+       cellsize := medium_cell_size;
+       minDistance:= max(cFeatureSize*6,20);
+       maze_inverted := true;
+       dabDiv:= 100;
+       end;
     5: begin
-        cellsize := large_cell_size;
-        minDistance:= max(cFeatureSize*5,12);
-        maze_inverted := true;
-	dabDiv:= 85;
+       cellsize := large_cell_size;
+       minDistance:= max(cFeatureSize*5,12);
+       maze_inverted := true;
+       dabDiv:= 85;
+       end;
     end;
-end;
 
 num_cells_x := LAND_WIDTH div cellsize;
 if not odd(num_cells_x) then
@@ -379,10 +379,10 @@
 done := false;
 
 for current_step := 0 to num_steps - 1 do
-begin
+    begin
     step_done[current_step] := false;
     came_from_pos[current_step] := 0;
-end;
+    end;
 
 current_step := 0;
 
@@ -444,14 +444,14 @@
     begin
     done := true;
     for current_step := 0 to num_steps-1 do
-    begin
+        begin
         if not step_done[current_step] then
-        begin
+            begin
             see_cell;
             done := false;
+            end;
         end;
     end;
-end;
 
 for x := 0 to seen_cells_x - 1 do
     for y := 0 to seen_cells_y - 1 do
--- a/hedgewars/uLandGenTemplateBased.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uLandGenTemplateBased.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -9,7 +9,7 @@
 var minDistance, dabDiv: LongInt; // different details size
 
 implementation
-uses uVariables, uConsts, uFloat, uLandUtils, uRandom, SDLh, math;
+uses uVariables, uTypes, uConsts, uFloat, uLandUtils, uRandom, SDLh, math;
 
 
 procedure SetPoints(var Template: TEdgeTemplate; var pa: TPixAr; fps: PPointArray);
@@ -327,6 +327,9 @@
         DivideEdges(Template.FillPointsCount, pa)
     until i = pa.Count;
 
+{$IFDEF IPHONEOS}
+    if GameType <> gmtLandPreview then
+{$ENDIF}
     // make it smooth
     BezierizeEdge(pa, _0_2);
 end;
--- a/hedgewars/uLandGraphics.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uLandGraphics.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -89,7 +89,8 @@
 
 procedure drawPixelEBC(landX, landY, pixelX, pixelY: Longint); inline;
 begin
-if ((Land[landY, landX] and lfBasic) <> 0) or ((Land[landY, landX] and lfObject) <> 0) then
+if (Land[landY, landX] and lfIndestructible = 0) and 
+    (((Land[landY, landX] and lfBasic) <> 0) or ((Land[landY, landX] and lfObject) <> 0)) then
     begin
     LandPixels[pixelY, pixelX]:= ExplosionBorderColor;
     Land[landY, landX]:= (Land[landY, landX] or lfDamaged) and (not lfIce);
--- a/hedgewars/uLandObjects.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uLandObjects.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -26,7 +26,8 @@
 procedure FreeLandObjects();
 procedure LoadThemeConfig;
 procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface); inline;
-procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface; LandFlags: Word);
+procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface; LandFlags: Word); inline;
+procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface; LandFlags: Word; Flip: boolean);
 procedure BlitImageUsingMask(cpX, cpY: Longword;  Image, Mask: PSDL_Surface);
 procedure AddOnLandObjects(Surface: PSDL_Surface);
 procedure SetLand(var LandWord: Word; Pixel: LongWord); inline;
@@ -92,12 +93,17 @@
 
 procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface); inline;
 begin
-    BlitImageAndGenerateCollisionInfo(cpX, cpY, Width, Image, 0);
+    BlitImageAndGenerateCollisionInfo(cpX, cpY, Width, Image, 0, false);
 end;
 
-procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface; LandFlags: Word);
+procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface; LandFlags: Word); inline;
+begin
+    BlitImageAndGenerateCollisionInfo(cpX, cpY, Width, Image, LandFlags, false);
+end;
+
+procedure BlitImageAndGenerateCollisionInfo(cpX, cpY, Width: Longword; Image: PSDL_Surface; LandFlags: Word; Flip: boolean);
 var p: PLongwordArray;
-    x, y: Longword;
+    px, x, y: Longword;
     bpp: LongInt;
 begin
 WriteToConsole('Generating collision info... ');
@@ -115,21 +121,29 @@
 for y:= 0 to Pred(Image^.h) do
     begin
     for x:= 0 to Pred(Width) do
-        if (p^[x] and AMask) <> 0 then
+        begin
+        // map image pixels per line backwards if in flip mode
+        if Flip then
+            px:= Pred(Image^.w) - x
+        else
+            px:= x;
+
+        if (p^[px] and AMask) <> 0 then
             begin
             if (cReducedQuality and rqBlurryLand) = 0 then
                 begin
                 if (LandPixels[cpY + y, cpX + x] = 0)
-                or (((p^[x] and AMask) <> 0) and (((LandPixels[cpY + y, cpX + x] and AMask) shr AShift) < 255)) then
-                    LandPixels[cpY + y, cpX + x]:= p^[x];
+                or (((p^[px] and AMask) <> 0) and (((LandPixels[cpY + y, cpX + x] and AMask) shr AShift) < 255)) then
+                    LandPixels[cpY + y, cpX + x]:= p^[px];
                 end
             else
                 if LandPixels[(cpY + y) div 2, (cpX + x) div 2] = 0 then
-                    LandPixels[(cpY + y) div 2, (cpX + x) div 2]:= p^[x];
+                    LandPixels[(cpY + y) div 2, (cpX + x) div 2]:= p^[px];
 
-            if (Land[cpY + y, cpX + x] <= lfAllObjMask) and ((p^[x] and AMask) <> 0) then
+            if (Land[cpY + y, cpX + x] <= lfAllObjMask) and ((p^[px] and AMask) <> 0) then
                 Land[cpY + y, cpX + x]:= lfObject or LandFlags
             end;
+        end;
     p:= PLongwordArray(@(p^[Image^.pitch shr 2]))
     end;
 
@@ -219,49 +233,54 @@
 end;
 
 
-function CountNonZeroz(x, y: LongInt): Longword;
+function CountNonZeroz(x, y, h: LongInt): Longword;
 var i: LongInt;
     lRes: Longword;
 begin
     lRes:= 0;
-    for i:= y to y + 15 do
+    for i:= y to Pred(y + h) do
         if Land[i, x] <> 0 then
             inc(lRes);
     CountNonZeroz:= lRes;
 end;
 
 function AddGirder(gX: LongInt; var girSurf: PSDL_Surface): boolean;
-var x1, x2, y, k, i: LongInt;
+var x1, x2, y, k, i, girderHeight: LongInt;
     rr: TSDL_Rect;
     bRes: boolean;
 begin
+if girSurf = nil then
+    girSurf:= LoadDataImageAltPath(ptCurrTheme, ptGraphics, 'Girder', ifCritical or ifTransparent or ifIgnoreCaps);
+
+girderHeight:= girSurf^.h;
+
 y:= topY+150;
 repeat
     inc(y, 24);
     x1:= gX;
     x2:= gX;
 
-    while (x1 > Longint(leftX)+150) and (CountNonZeroz(x1, y) = 0) do
+    while (x1 > Longint(leftX)+150) and (CountNonZeroz(x1, y, girderHeight) = 0) do
         dec(x1, 2);
 
     i:= x1 - 12;
     repeat
-        dec(x1, 2);
-        k:= CountNonZeroz(x1, y)
-    until (x1 < Longint(leftX)+150) or (k = 0) or (k = 16) or (x1 < i);
+        k:= CountNonZeroz(x1, y, girderHeight);
+        dec(x1, 2)
+    until (x1 < Longint(leftX) + 100) or (k = 0) or (k = girderHeight) or (x1 < i);
 
     inc(x1, 2);
-    if k = 16 then
+    if k = girderHeight then
         begin
-        while (x2 < (LongInt(rightX)-150)) and (CountNonZeroz(x2, y) = 0) do
+        while (x2 < (LongInt(rightX) - 100)) and (CountNonZeroz(x2, y, girderHeight) = 0) do
             inc(x2, 2);
         i:= x2 + 12;
         repeat
         inc(x2, 2);
-        k:= CountNonZeroz(x2, y)
-        until (x2 >= (LongInt(rightX)-150)) or (k = 0) or (k = 16) or (x2 > i) or (x2 - x1 >= 768);
+        k:= CountNonZeroz(x2, y, girderHeight)
+        until (x2 >= (LongInt(rightX)-150)) or (k = 0) or (k = girderHeight) or (x2 > i) or (x2 - x1 >= 900);
 
-        if (x2 < (LongInt(rightX) - 150)) and (k = 16) and (x2 - x1 > 250) and (x2 - x1 < 768)
+        if (x2 < (LongInt(rightX) - 100)) and (k = girderHeight) and (x2 - x1 > 200) and (x2 - x1 < 900)
         and (not CheckIntersect(x1 - 32, y - 64, x2 - x1 + 64, 144)) then
                 break;
         end;
@@ -271,8 +290,6 @@
 if x1 > 0 then
 begin
     bRes:= true;
-    if girSurf = nil then
-        girSurf:= LoadDataImageAltPath(ptCurrTheme, ptGraphics, 'Girder', ifCritical or ifTransparent or ifIgnoreCaps);
 
     rr.x:= x1;
     while rr.x < x2 do
--- a/hedgewars/uLandPainted.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uLandPainted.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uLandTemplates.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uLandTemplates.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uLandTexture.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uLandTexture.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uLandUtils.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uLandUtils.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -27,7 +27,7 @@
     SetLength(Land, LAND_HEIGHT, LAND_WIDTH);
     SetLength(LandDirty, (LAND_HEIGHT div 32), (LAND_WIDTH div 32));
     // 0.5 is already approaching on unplayable
-    if (width div 4096 >= 2) or (height div 2048 >= 2) then cMaxZoomLevel:= 0.5;
+    if (width div 4096 >= 2) or (height div 2048 >= 2) then cMaxZoomLevel:= cMaxZoomLevel/2;
     cMinMaxZoomLevelDelta:= cMaxZoomLevel - cMinZoomLevel
     end;
 end;
--- a/hedgewars/uLocale.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uLocale.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -30,7 +30,7 @@
 function  GetEventString(e: TEventId): ansistring;
 
 {$IFDEF HWLIBRARY}
-procedure LoadLocaleWrapper(str: pchar); cdecl; export;
+procedure LoadLocaleWrapper(path: pchar; filename: pchar); cdecl; export;
 {$ENDIF}
 
 implementation
@@ -133,9 +133,19 @@
 end;
 
 {$IFDEF HWLIBRARY}
-procedure LoadLocaleWrapper(str: pchar); cdecl; export;
+procedure LoadLocaleWrapper(path: pchar; filename: pchar); cdecl; export;
 begin
-    LoadLocale(Strpas(str));
+    PathPrefix := Strpas(path);
+ 
+    uUtils.initModule(false);
+    uVariables.initModule;
+    uPhysFSLayer.initModule;
+ 
+    LoadLocale(Strpas(filename));
+ 
+    uPhysFSLayer.freeModule;
+    uVariables.freeModule;
+    uUtils.freeModule;
 end;
 {$ENDIF}
 
--- a/hedgewars/uMisc.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uMisc.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -250,7 +250,7 @@
     exit;
 end;
 
-// read pixels from the front buffer
+// read pixels from land array
 if dump > 0 then
     begin
     for y:= 0 to LAND_HEIGHT-1 do
@@ -274,6 +274,7 @@
                 end
     end
 else
+// read pixels from the front buffer
     begin
     glReadPixels(0, 0, cScreenWidth, cScreenHeight, format, GL_UNSIGNED_BYTE, p);
 {$IFDEF USE_VIDEO_RECORDING}
--- a/hedgewars/uPhysFSLayer.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uPhysFSLayer.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -151,7 +151,9 @@
 procedure initModule;
 var i: LongInt;
     cPhysfsId: shortstring;
+{$IFNDEF MOBILE}
     fp: PChar;
+{$ENDIF}
 begin
 {$IFDEF HWLIBRARY}
     //TODO: http://icculus.org/pipermail/physfs/2011-August/001006.html
@@ -163,6 +165,7 @@
     i:= PHYSFS_init(Str2PChar(cPhysfsId));
     AddFileLog('[PhysFS] init: ' + inttostr(i));
 
+{$IFNDEF MOBILE}
     // mount system fonts paths first
     for i:= low(cFontsPaths) to high(cFontsPaths) do
         begin
@@ -170,6 +173,7 @@
             if fp <> nil then
                 pfsMount(ansistring(fp), PChar('/Fonts'));
         end;
+{$ENDIF}
 
     pfsMountAtRoot(PathPrefix);
     pfsMountAtRoot(UserPathPrefix + ansistring('/Data'));
--- a/hedgewars/uRandom.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uRandom.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uRender.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uRender.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -60,7 +60,9 @@
 procedure DrawWaves             (Dir, dX, dY, oX: LongInt; tnt: Byte);
 
 procedure RenderClear           ();
+{$IFDEF USE_S3D_RENDERING}
 procedure RenderClear           (mode: TRenderMode);
+{$ENDIF}
 procedure RenderSetClearColor   (r, g, b, a: real);
 procedure Tint                  (r, g, b, a: Byte); inline;
 procedure Tint                  (c: Longword); inline;
@@ -136,8 +138,10 @@
 procedure openglRotatef         (RotX, RotY, RotZ: GLfloat; dir: LongInt); forward;
 procedure openglTint            (r, g, b, a: Byte); forward;
 
+{$IFDEF USE_S3D_RENDERING OR USE_VIDEO_RECORDING}
 procedure CreateFramebuffer(var frame, depth, tex: GLuint); forward;
 procedure DeleteFramebuffer(var frame, depth, tex: GLuint); forward;
+{$ENDIF}
 
 function isAreaOffscreen(X, Y, Width, Height: LongInt): boolean; inline;
 begin
@@ -355,25 +359,29 @@
 {$ENDIF}
 
 function glLoadExtension(extension : shortstring) : boolean;
+var logmsg: shortstring;
 begin
-//TODO: pas2c does not handle {$IF (GLunit = gles11) OR DEFINED(PAS2C)}
-{$IFNDEF PAS2C}
-{$IF GLunit = gles11}
-    // FreePascal doesnt come with OpenGL ES 1.1 Extension headers
     extension:= extension; // avoid hint
     glLoadExtension:= false;
-    AddFileLog('OpenGL - "' + extension + '" skipped')
-{$ELSE}
+    logmsg:= 'OpenGL - "' + extension + '" skipped';
+
+{$IFNDEF IPHONEOS}
+//TODO: pas2c does not handle
+{$IFNDEF PAS2C}
+// FreePascal doesnt come with OpenGL ES 1.1 Extension headers
+{$IF GLunit <> gles11}
+
     glLoadExtension:= glext_LoadExtension(extension);
+
     if glLoadExtension then
-        AddFileLog('OpenGL - "' + extension + '" loaded')
+        logmsg:= 'OpenGL - "' + extension + '" loaded'
     else
-        AddFileLog('OpenGL - "' + extension + '" failed to load');
-{$ENDIF}
+        logmsg:= 'OpenGL - "' + extension + '" failed to load';
 
-{$ELSE} // pas2c part
-    glLoadExtension:= false;
+{$ENDIF}
 {$ENDIF}
+{$ENDIF}
+    AddFileLog(logmsg);
 end;
 
 {$IFDEF USE_S3D_RENDERING OR USE_VIDEO_RECORDING}
@@ -424,17 +432,6 @@
     tmpint: LongInt;
     tmpn: LongInt;
 begin
-{$IFDEF MOBILE}
-    // TODO: this function creates an opengles1.1 context
-    // un-comment below and add proper logic to support opengles2.0
-    //SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
-    //SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
-    if SDLGLcontext = nil then
-        SDLGLcontext:= SDL_GL_CreateContext(SDLwindow);
-    SDLTry(SDLGLcontext <> nil, true);
-    SDL_GL_SetSwapInterval(1);
-{$ENDIF}
-
     // suppress hint/warning
     AuxBufNum:= AuxBufNum;
 
@@ -469,7 +466,7 @@
     tmpint := 1;
 
     repeat
-    begin
+        begin
         // print up to 3 extentions per row
         // ExtractWord will return empty string if index out of range
         AddFileLog(TrimRight(
@@ -478,7 +475,7 @@
             ExtractWord(tmpint+2, tmpstr, [' '])
         ));
         tmpint := tmpint + 3;
-    end;
+        end;
     until (tmpint > tmpn);
 {$ENDIF}
     AddFileLog('');
@@ -487,26 +484,26 @@
 
 {$IFDEF USE_VIDEO_RECORDING}
     if GameType = gmtRecord then
-    begin
+        begin
         if glLoadExtension('GL_EXT_framebuffer_object') then
-        begin
+            begin
             CreateFramebuffer(defaultFrame, depthv, texv);
             glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, defaultFrame);
             AddFileLog('Using framebuffer for video recording.');
-        end
+            end
         else if AuxBufNum > 0 then
-        begin
+            begin
             glDrawBuffer(GL_AUX0);
             glReadBuffer(GL_AUX0);
             AddFileLog('Using auxiliary buffer for video recording.');
-        end
+            end
         else
-        begin
+            begin
             glDrawBuffer(GL_BACK);
             glReadBuffer(GL_BACK);
             AddFileLog('Warning: off-screen rendering is not supported; using back buffer but it may not work.');
+            end;
         end;
-    end;
 {$ENDIF}
 
 {$IFDEF GL2}
@@ -514,10 +511,10 @@
 {$IFDEF PAS2C}
     err := glewInit();
     if err <> GLEW_OK then
-    begin
+        begin
         WriteLnToConsole('Failed to initialize GLEW.');
         halt(HaltStartupError);
-    end;
+        end;
 {$ENDIF}
 
 {$IFNDEF PAS2C}
@@ -544,7 +541,7 @@
 
 {$IFDEF USE_S3D_RENDERING}
     if (cStereoMode = smHorizontal) or (cStereoMode = smVertical) then
-    begin
+        begin
         // prepare left and right frame buffers and associated textures
         if glLoadExtension('GL_EXT_framebuffer_object') then
             begin
@@ -559,7 +556,7 @@
             end
         else
             cStereoMode:= smNone;
-    end;
+        end;
 
     // set up vertex/texture buffers for frame textures
     texLRDtb[0].X:= 0.0;
--- a/hedgewars/uRenderUtils.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uRenderUtils.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uScript.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uScript.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -87,7 +87,8 @@
     uIO,
     uVisualGearsList,
     uGearsHandlersMess,
-    uPhysFSLayer
+    uPhysFSLayer,
+    SDLh
 {$IFNDEF PAS2C}
     , typinfo
 {$ENDIF}
@@ -101,6 +102,7 @@
     ScriptLoaded : boolean;
     mapDims : boolean;
     PointsBuffer: shortstring;
+    prevCursorPoint: TPoint;  // why is tpoint still in sdlh...
 
 procedure ScriptPrepareAmmoStore; forward;
 procedure ScriptApplyAmmoStore; forward;
@@ -438,6 +440,26 @@
     lc_setweapon:= 0;
 end;
 
+// no parameter means reset to default (and 0 means unlimited)
+function lc_setmaxbuilddistance(L : Plua_State) : LongInt; Cdecl;
+var np: LongInt;
+const
+    call = 'SetMaxBuildDistance';
+    params = '[ distInPx ]';
+begin
+    if CheckAndFetchParamCountRange(L, 0, 1, call, params, np) then
+        begin
+        if np = 0 then
+            begin
+            // no args? reset
+            cBuildMaxDist:= cDefaultBuildMaxDist;
+            end
+        else
+            CBuildMaxDist:= lua_tointeger(L, 1);
+        end;
+    lc_setmaxbuilddistance:= 0;
+end;
+
 // sets weapon to whatever weapons is next (wraps around, amSkip is skipped)
 function lc_setnextweapon(L : Plua_State) : LongInt; Cdecl;
 var at          : LongInt;
@@ -606,7 +628,9 @@
         begin
         gear := SpawnFakeCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2),
         HealthCrate, lua_toboolean(L, 3), lua_toboolean(L, 4));
-        lua_pushinteger(L, gear^.uid);
+        if gear <> nil then
+             lua_pushinteger(L, gear^.uid)
+        else lua_pushnil(L)
         end
     else
         lua_pushnil(L);
@@ -620,7 +644,9 @@
         begin
         gear := SpawnFakeCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2),
         AmmoCrate, lua_toboolean(L, 3), lua_toboolean(L, 4));
-        lua_pushinteger(L, gear^.uid);
+        if gear <> nil then
+             lua_pushinteger(L, gear^.uid)
+        else lua_pushnil(L)
         end
     else
         lua_pushnil(L);
@@ -634,7 +660,9 @@
         begin
         gear := SpawnFakeCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2),
         UtilityCrate, lua_toboolean(L, 3), lua_toboolean(L, 4));
-        lua_pushinteger(L, gear^.uid);
+        if gear <> nil then
+             lua_pushinteger(L, gear^.uid)
+        else lua_pushnil(L)
         end
     else
         lua_pushnil(L);
@@ -653,9 +681,8 @@
             health:= cHealthCaseAmount;
         gear := SpawnCustomCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2), HealthCrate, health, 0);
         if gear <> nil then
-            lua_pushinteger(L, gear^.uid)
-        else
-            lua_pushnil(L);
+             lua_pushinteger(L, gear^.uid)
+        else lua_pushnil(L);
         end
     else
         lua_pushnil(L);
@@ -672,9 +699,8 @@
              gear := SpawnCustomCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2), AmmoCrate, lua_tointeger(L, 3), 0)
         else gear := SpawnCustomCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2), AmmoCrate, lua_tointeger(L, 3), lua_tointeger(L, 4));
         if gear <> nil then
-            lua_pushinteger(L, gear^.uid)
-        else
-            lua_pushnil(L);
+             lua_pushinteger(L, gear^.uid)
+        else lua_pushnil(L);
         end
     else
         lua_pushnil(L);
@@ -691,9 +717,8 @@
              gear := SpawnCustomCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2), UtilityCrate, lua_tointeger(L, 3), 0)
         else gear := SpawnCustomCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2), UtilityCrate, lua_tointeger(L, 3), lua_tointeger(L, 4));
         if gear <> nil then
-            lua_pushinteger(L, gear^.uid)
-        else
-            lua_pushnil(L);
+             lua_pushinteger(L, gear^.uid)
+        else lua_pushnil(L);
        end
     else
         lua_pushnil(L);
@@ -895,29 +920,30 @@
             lua_pushinteger(L, gear^.AdvBounce);
             lua_pushinteger(L, Integer(gear^.ImpactSound));
             lua_pushinteger(L, gear^.nImpactSounds);
-            lua_pushinteger(L, gear^.Tint)
+            lua_pushinteger(L, gear^.Tint);
+            lua_pushinteger(L, gear^.Damage)
             end
         else
             begin
             lua_pushnil(L); lua_pushnil(L); lua_pushnil(L); lua_pushnil(L); lua_pushnil(L);
             lua_pushnil(L); lua_pushnil(L); lua_pushnil(L); lua_pushnil(L); lua_pushnil(L);
-            lua_pushnil(L)
+            lua_pushnil(L); lua_pushnil(L)
             end
         end
     else
         begin
         lua_pushnil(L); lua_pushnil(L); lua_pushnil(L); lua_pushnil(L); lua_pushnil(L);
         lua_pushnil(L); lua_pushnil(L); lua_pushnil(L); lua_pushnil(L); lua_pushnil(L);
-        lua_pushnil(L)
+        lua_pushnil(L); lua_pushnil(L)
         end;
-    lc_getgearvalues:= 11
+    lc_getgearvalues:= 12
 end;
 
 function lc_setgearvalues(L : Plua_State) : LongInt; Cdecl;
 var gear : PGear;
 begin
-// Currently allows 1-12 params
-//    if CheckLuaParamCount(L, 12, 'SetGearValues', 'gearUid, Angle, Power, WDTimer, Radius, Density, Karma, DirAngle, AdvBounce, ImpactSound, # ImpactSounds, Tint') then
+// Currently allows 1-13 params
+//    if CheckLuaParamCount(L, 13, 'SetGearValues', 'gearUid, Angle, Power, WDTimer, Radius, Density, Karma, DirAngle, AdvBounce, ImpactSound, # ImpactSounds, Tint, Damage') then
 //        begin
         gear:= GearByUID(lua_tointeger(L, 1));
         if gear <> nil then
@@ -943,7 +969,9 @@
             if not lua_isnoneornil(L, 11) then
                 gear^.nImpactSounds := lua_tointeger(L, 11);
             if not lua_isnoneornil(L, 12) then
-                gear^.Tint := lua_tointeger(L, 12)
+                gear^.Tint := lua_tointeger(L, 12);
+            if not lua_isnoneornil(L, 13) then
+                gear^.Damage := lua_tointeger(L, 13);
             end;
 //        end
 //    else
@@ -1211,6 +1239,54 @@
     lc_setclancolor:= 0
 end;
 
+function lc_gethogvoicepack(L : Plua_State) : LongInt; Cdecl;
+var gear : PGear;
+begin
+    if CheckLuaParamCount(L, 1, 'GetHogVoicepack', 'gearUid') then
+        begin
+        gear:= GearByUID(lua_tointeger(L, 1));
+        if (gear <> nil) and (gear^.Kind = gtHedgehog) and (gear^.Hedgehog <> nil) then
+            lua_pushstring(L, str2pchar(gear^.Hedgehog^.Team^.Voicepack^.name))
+        else
+            lua_pushnil(L);
+        end
+    else
+        lua_pushnil(L); // return value on stack (nil)
+    lc_gethogvoicepack:= 1
+end;
+
+function lc_gethoggrave(L : Plua_State) : LongInt; Cdecl;
+var gear : PGear;
+begin
+    if CheckLuaParamCount(L, 1, 'GetHogGrave', 'gearUid') then
+        begin
+        gear:= GearByUID(lua_tointeger(L, 1));
+        if (gear <> nil) and ((gear^.Kind = gtHedgehog) or (gear^.Kind = gtGrave)) and (gear^.Hedgehog <> nil) then
+            lua_pushstring(L, str2pchar(gear^.Hedgehog^.Team^.GraveName))
+        else
+            lua_pushnil(L);
+        end
+    else
+        lua_pushnil(L); // return value on stack (nil)
+    lc_gethoggrave:= 1
+end;
+
+function lc_gethogflag(L : Plua_State) : LongInt; Cdecl;
+var gear : PGear;
+begin
+    if CheckLuaParamCount(L, 1, 'GetHogFlag', 'gearUid') then
+        begin
+        gear:= GearByUID(lua_tointeger(L, 1));
+        if (gear <> nil) and (gear^.Kind = gtHedgehog) and (gear^.Hedgehog <> nil) then
+            lua_pushstring(L, str2pchar(gear^.Hedgehog^.Team^.Flag))
+        else
+            lua_pushnil(L);
+        end
+    else
+        lua_pushnil(L); // return value on stack (nil)
+    lc_gethogflag:= 1
+end;
+
 function lc_gethogteamname(L : Plua_State) : LongInt; Cdecl;
 var gear : PGear;
 begin
@@ -1414,7 +1490,7 @@
                vgear^.Text:= lua_tostring(L, 2);
                if Gear^.Kind = gtHedgehog then
                    begin
-                   AddChatString(#1+'[' + gear^.Hedgehog^.Name + '] '+vgear^.text);
+                   AddChatString(#9+'[' + gear^.Hedgehog^.Name + '] '+vgear^.text);
                    vgear^.Hedgehog:= gear^.Hedgehog
                    end
                else vgear^.Frame:= gear^.uid;
@@ -2226,7 +2302,7 @@
         else flipVert := false;
         lf:= 0;
 
-        // accept any amount of landflags, loop is never executed if n>6
+        // accept any amount of landflags, loop is never executed if n<9
         for i:= 9 to n do
             lf:= lf or lua_tointeger(L, i);
 
@@ -2255,7 +2331,7 @@
     eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert : boolean;
 const
     call = 'EraseSprite';
-    params = 'x, y, sprite, frameIdx, eraseOnLFMatch, flipHoriz, flipVert, [, landFlag, ... ]';
+    params = 'x, y, sprite, frameIdx, eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert, [, landFlag, ... ]';
 begin
     if CheckAndFetchLuaParamMinCount(L, 4, call, params, n) then
         begin
@@ -2273,7 +2349,7 @@
         else flipVert := false;
         lf:= 0;
 
-        // accept any amount of landflags, loop is never executed if n>6
+        // accept any amount of landflags, loop is never executed if n<9
         for i:= 9 to n do
             lf:= lf or lua_tointeger(L, i);
 
@@ -2422,7 +2498,7 @@
     lc_setwaterline:= 0
 end;
 
-function lc_setaihintsongear(L : Plua_State) : LongInt; Cdecl;
+function lc_setgearaihints(L : Plua_State) : LongInt; Cdecl;
 var gear: PGear;
 begin
     if CheckLuaParamCount(L, 2, 'SetAIHintOnGear', 'gearUid, aiHints') then
@@ -2431,7 +2507,7 @@
         if gear <> nil then
             gear^.aihints:= lua_tointeger(L, 2);
         end;
-    lc_setaihintsongear:= 0
+    lc_setgearaihints:= 0
 end;
 
 
@@ -2597,6 +2673,7 @@
 ScriptSetInteger('TemplateFilter', cTemplateFilter);
 ScriptSetInteger('TemplateNumber', LuaTemplateNumber);
 ScriptSetInteger('MapGen', ord(cMapGen));
+ScriptSetInteger('MapFeatureSize', cFeatureSize);
 
 ScriptCall('onPreviewInit');
 
@@ -2605,6 +2682,7 @@
 cTemplateFilter  := ScriptGetInteger('TemplateFilter');
 LuaTemplateNumber:= ScriptGetInteger('TemplateNumber');
 cMapGen          := TMapGen(ScriptGetInteger('MapGen'));
+cFeatureSize     := ScriptGetInteger('MapFeatureSize');
 end;
 
 procedure ScriptOnGameInit;
@@ -2615,12 +2693,15 @@
     exit;
 
 // push game variables so they may be modified by the script
+ScriptSetInteger('CursorX', CursorPoint.X);
+ScriptSetInteger('CursorY', CursorPoint.Y);
 ScriptSetInteger('BorderColor', ExplosionBorderColor);
 ScriptSetInteger('GameFlags', GameFlags);
 ScriptSetString('Seed', cSeed);
 ScriptSetInteger('TemplateFilter', cTemplateFilter);
 ScriptSetInteger('TemplateNumber', LuaTemplateNumber);
 ScriptSetInteger('MapGen', ord(cMapGen));
+ScriptSetInteger('MapFeatureSize', cFeatureSize);
 ScriptSetInteger('ScreenHeight', cScreenHeight);
 ScriptSetInteger('ScreenWidth', cScreenWidth);
 ScriptSetInteger('TurnTime', cHedgehogTurnTime);
@@ -2650,6 +2731,7 @@
 cTemplateFilter  := ScriptGetInteger('TemplateFilter');
 LuaTemplateNumber:= ScriptGetInteger('TemplateNumber');
 cMapGen          := TMapGen(ScriptGetInteger('MapGen'));
+cFeatureSize     := ScriptGetInteger('MapFeatureSize');
 GameFlags        := ScriptGetInteger('GameFlags');
 cHedgehogTurnTime:= ScriptGetInteger('TurnTime');
 cCaseFactor      := ScriptGetInteger('CaseFreq');
@@ -2773,6 +2855,25 @@
 ScriptSetInteger('GameTime', GameTicks);
 ScriptSetInteger('TotalRounds', TotalRounds);
 ScriptSetInteger('WaterLine', cWaterLine);
+if isCursorVisible and (not bShowAmmoMenu) then
+    begin
+    if (prevCursorPoint.X <> CursorPoint.X) or 
+       (prevCursorPoint.Y <> CursorPoint.Y) then
+        begin
+        ScriptSetInteger('CursorX', CursorPoint.X - WorldDx);
+        ScriptSetInteger('CursorY', cScreenHeight - CursorPoint.Y- WorldDy);
+        prevCursorPoint.X:= CursorPoint.X;
+        prevCursorPoint.Y:= CursorPoint.Y;
+        end
+    end
+else
+    begin
+    ScriptSetInteger('CursorX', NoPointX);
+    ScriptSetInteger('CursorY', NoPointX);
+    prevCursorPoint.X:= NoPointX;
+    prevCursorPoint.Y:= NoPointX
+    end;
+
 if not mapDims then
     begin
     mapDims:= true;
@@ -2790,6 +2891,12 @@
 
 procedure GetGlobals;
 begin
+// TODO
+// Use setters instead, because globals should be read-only!
+// Otherwise globals might be changed by Lua, but then unexpectatly overwritten by engine when a ScriptCall is triggered by whatever Lua is doing!
+// Sure, one could work around that in engine (e.g. by setting writable globals in SetGlobals only when their engine-side value has actually changed since SetGlobals was called the last time...), but things just get messier and messier then.
+// It is inconsistent anyway to have some globals be read-only and others not with no indication whatsoever.
+// -- sheepluva
 TurnTimeLeft:= ScriptGetInteger('TurnTimeLeft');
 end;
 
@@ -3085,7 +3192,7 @@
 ScriptSetInteger('gstAttacked'      , gstAttacked);
 ScriptSetInteger('gstAttacking'     , gstAttacking);
 ScriptSetInteger('gstCollision'     , gstCollision);
-ScriptSetInteger('gstChooseTarget', gstChooseTarget);
+ScriptSetInteger('gstChooseTarget'  , gstChooseTarget);
 ScriptSetInteger('gstHHJumping'     , gstHHJumping);
 ScriptSetInteger('gsttmpFlag'       , gsttmpFlag);
 ScriptSetInteger('gstHHThinking'    , gstHHThinking);
@@ -3099,6 +3206,9 @@
 ScriptSetInteger('gstLoser'         , gstLoser);
 ScriptSetInteger('gstHHGone'        , gstHHGone);
 ScriptSetInteger('gstInvisible'     , gstInvisible);
+ScriptSetInteger('gstSubmersible'   , gstSubmersible);
+ScriptSetInteger('gstFrozen'        , gstFrozen);
+ScriptSetInteger('gstNoGravity'     , gstNoGravity);
 
 // ai hints
 ScriptSetInteger('aihUsualProcessing', aihUsualProcessing);
@@ -3170,6 +3280,9 @@
 lua_register(luaState, _P'GetHogClan', @lc_gethogclan);
 lua_register(luaState, _P'GetClanColor', @lc_getclancolor);
 lua_register(luaState, _P'SetClanColor', @lc_setclancolor);
+lua_register(luaState, _P'GetHogVoicepack', @lc_gethogvoicepack);
+lua_register(luaState, _P'GetHogFlag', @lc_gethogflag);
+lua_register(luaState, _P'GetHogGrave', @lc_gethoggrave);
 lua_register(luaState, _P'GetHogTeamName', @lc_gethogteamname);
 lua_register(luaState, _P'SetHogTeamName', @lc_sethogteamname);
 lua_register(luaState, _P'GetHogName', @lc_gethogname);
@@ -3224,11 +3337,12 @@
 lua_register(luaState, _P'SetWaterLine', @lc_setwaterline);
 lua_register(luaState, _P'SetNextWeapon', @lc_setnextweapon);
 lua_register(luaState, _P'SetWeapon', @lc_setweapon);
+lua_register(luaState, _P'SetMaxBuildDistance', @lc_setmaxbuilddistance);
 // drawn map functions
 lua_register(luaState, _P'AddPoint', @lc_addPoint);
 lua_register(luaState, _P'FlushPoints', @lc_flushPoints);
 
-lua_register(luaState, _P'SetGearAIHints', @lc_setaihintsongear);
+lua_register(luaState, _P'SetGearAIHints', @lc_setgearaihints);
 lua_register(luaState, _P'HedgewarsScriptLoad', @lc_hedgewarsscriptload);
 lua_register(luaState, _P'DeclareAchievement', @lc_declareachievement);
 
@@ -3329,6 +3443,8 @@
 begin
 mapDims:= false;
 PointsBuffer:= '';
+prevCursorPoint.X:= NoPointX;
+prevCursorPoint.Y:= 0;
 end;
 
 procedure freeModule;
--- a/hedgewars/uSinTable.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uSinTable.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uSound.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uSound.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -70,7 +70,7 @@
 // Returns sound channel of the looped sound.
 function  LoopSound(snd: TSound): LongInt;
 function  LoopSound(snd: TSound; fadems: LongInt): LongInt;
-function  LoopSoundV(snd: TSound; voicepack: PVoicepack): LongInt; // WTF?
+function  LoopSoundV(snd: TSound; voicepack: PVoicepack): LongInt;
 function  LoopSoundV(snd: TSound; voicepack: PVoicepack; fadems: LongInt): LongInt;
 
 // Stops the normal/looped sound of the given type/in the given channel
@@ -261,8 +261,9 @@
 var i: Longword;
     locName, path: shortstring;
 begin
-i:= 0;
-    // First, attempt to locate a localised version of the voice
+    i:= 0;
+
+    // Adjust voicepack name if there's a localised version version of the voice
     if cLocale <> 'en' then
         begin
         locName:= name+'_'+cLocale;
@@ -279,7 +280,16 @@
                 end
         end;
 
-    // If that fails, use the unmodified one
+    path:= cPathz[ptVoices] + '/' + name;
+
+    // Fallback to Default if voicepack can't be found at all
+    if (name <> 'Default') and (not pfsExists(path)) then
+        begin
+        path:= cPathz[ptVoices] + '/Default';
+        if pfsExists(path) then
+            exit(AskForVoicepack('Default'));
+        end;
+
     while (voicepacks[i].name <> name) and (voicepacks[i].name <> '') do
         begin
         inc(i);
@@ -291,7 +301,7 @@
 end;
 
 procedure InitSound;
-const channels: LongInt = {$IFDEF MOBILE}1{$ELSE}2{$ENDIF};
+const channels: LongInt = 2;
 var success: boolean;
 begin
     if not (isSoundEnabled or isMusicEnabled) then
@@ -717,6 +727,7 @@
     RegisterVariable('mute'     , @chMute     , true );
 
     MusicFN:='';
+    SDMusicFN:= 'sdmusic.ogg';
     Mus:= nil;
     isAudioMuted:= false;
     isSEBackup:= isSoundEnabled;
--- a/hedgewars/uStats.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uStats.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uStore.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uStore.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -370,7 +370,11 @@
     begin
     MakeCrossHairs;
     LoadGraves;
+{$IFDEF IPHONEOS}
+    tmpHatSurf:= LoadDataImage(ptHats, 'chef', ifNone);
+{$ELSE}
     tmpHatSurf:= LoadDataImage(ptHats, 'Reserved/chef', ifNone);
+{$ENDIF}
     ChefHatTexture:= Surface2Tex(tmpHatSurf, true);
     freeTmpHatSurf();
     end;
@@ -719,6 +723,9 @@
 {$IFDEF IPHONEOS}
     SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 0);
     SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 1);
+ 
+    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1);
+    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
 {$ELSE}
     SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
 {$ENDIF}
@@ -745,6 +752,17 @@
     AddFileLog('Setting up OpenGL (using driver: ' + shortstring(SDL_VideoDriverName(buf, sizeof(buf))) + ')');
 {$ENDIF}
 
+{$IFDEF MOBILE}
+    // TODO: this function creates an opengles1.1 context
+    // un-comment below and add proper logic to support opengles2.0
+    //SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
+    //SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
+    if SDLGLcontext = nil then
+        SDLGLcontext:= SDL_GL_CreateContext(SDLwindow);
+    SDLTry(SDLGLcontext <> nil, true);
+    SDL_GL_SetSwapInterval(1);
+{$ENDIF}
+
     RendererSetup();
 end;
 
--- a/hedgewars/uTeams.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uTeams.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
  (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -604,7 +604,6 @@
     SplitBySpace(s, cs);
     SplitBySpace(cs, ts);
     Color:= StrToInt(cs);
-    TryDo(Color <> 0, 'Error: black team color', true);
 
     // color is always little endian so the mask must be constant also in big endian archs
     Color:= Color or $FF000000;
@@ -665,7 +664,7 @@
                 begin
                 if (not hasGone) and isGoneFlagPendingToBeSet then
                     begin
-                    AddChatString('** '+ TeamName + ' is gone'); // TODO: localize
+                    AddChatString(#7 + '* '+ TeamName + ' is gone'); // TODO: localize
                     if not CurrentTeam^.ExtDriven then SendIPC(_S'f' + s);
                     hasGone:= true;
                     skippedTurns:= 0;
@@ -678,7 +677,7 @@
         end
     else
         begin
-        TeamsArray[t]^.isGoneFlagPendingToBeSet:= true;
+        //TeamsArray[t]^.isGoneFlagPendingToBeSet:= true;
 
         if (not CurrentTeam^.ExtDriven) or (CurrentTeam^.TeamName = s) or (CurrentTeam^.hasGone) then
             ParseCommand('/teamgone s' + s, true)
@@ -704,7 +703,7 @@
         with TeamsArray[t]^ do
             if hasGone then
                 begin
-                AddChatString('** '+ TeamName + ' is back');
+                AddChatString(#8 + '* '+ TeamName + ' is back');
                 if not CurrentTeam^.ExtDriven then SendIPC(_S'g' + s);
                 hasGone:= false;
 
@@ -732,6 +731,8 @@
 // avoid compiler hint
 s:= s;
 
+isPaused:= false;
+
 t:= 0;
 while t < TeamsCount do
     begin
@@ -739,7 +740,7 @@
     inc(t)
     end;
 
-AddChatString('** Good-bye!');
+AddChatString(#7 + '* Good-bye!');
 RecountAllTeamsHealth();
 end;
 
--- a/hedgewars/uTextures.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uTextures.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uTouch.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uTouch.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -63,6 +63,7 @@
 
 const
     clickTime = 200;
+    nilFingerId = High(TSDL_FingerId);
     baseRectSize = 96;
 
 var
@@ -295,7 +296,7 @@
     end;
 
 if targetting then
-    AddCaption('Press the target button to mark the target', cWhiteColor, capgrpAmmoInfo);
+    AddCaption(trmsg[sidPressTarget], cWhiteColor, capgrpAmmoInfo);
 
 deleteFinger(pointerId);
 end;
--- a/hedgewars/uTypes.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uTypes.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -61,6 +61,7 @@
 {$IFDEF USE_TOUCH_INTERFACE}
             sprFireButton, sprArrowUp, sprArrowDown, sprArrowLeft, sprArrowRight,
             sprJumpWidget, sprAMWidget, sprPauseButton, sprTimerButton, sprTargetButton,
+            sprSwitchButton,
 {$ENDIF}
             sprFlake, sprHandRope, sprHandBazooka, sprHandShotgun,
             sprHandDEagle, sprHandAirAttack, sprHandBaseball, sprPHammer,
@@ -88,7 +89,7 @@
             sprBulletHit, sprSnowball, sprHandSnowball, sprSnow,
             sprSDFlake, sprSDWater, sprSDCloud, sprSDSplash, sprSDDroplet, sprTardis,
             sprSlider, sprBotlevels, sprHandKnife, sprKnife, sprStar, sprIceTexture, sprIceGun,
-            sprFrozenHog, sprAmRubber, sprBoing, sprCustom1, sprCustom2, sprAirMine
+            sprFrozenHog, sprAmRubber, sprBoing, sprCustom1, sprCustom2, sprAirMine, sprHandAirMine
             );
 
     // Gears that interact with other Gears and/or Land
@@ -455,7 +456,7 @@
             sidConfirm, sidSuddenDeath, sidRemaining, sidFuel, sidSync,
             sidNoEndTurn, sidNotYetAvailable, sidRoundSD, sidRoundsSD, sidReady,
             sidBounce1, sidBounce2, sidBounce3, sidBounce4, sidBounce5, sidBounce,
-            sidMute, sidAFK, sidAutoCameraOff, sidAutoCameraOn);
+            sidMute, sidAFK, sidAutoCameraOff, sidAutoCameraOn, sidPressTarget);
 
     // Events that are important for the course of the game or at least interesting for other reasons
     TEventId = (eidDied, eidDrowned, eidRoundStart, eidRoundWin, eidRoundDraw,
--- a/hedgewars/uUtils.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uUtils.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uVariables.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uVariables.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,7 +21,7 @@
 unit uVariables;
 interface
 
-uses SDLh, uTypes, uFloat, GLunit, uConsts, Math, uUtils, uMatrix;
+uses SDLh, uTypes, uFloat, GLunit, uConsts, Math, uUtils{$IFDEF GL2}, uMatrix{$ENDIF};
 
 var
 /////// init flags ///////
@@ -179,6 +179,7 @@
     cElastic        : hwFloat;
     cGravity        : hwFloat;
     cGravityf       : real;
+    cBuildMaxDist   : LongInt;
     cDamageModifier : hwFloat;
     cLaserSighting  : boolean;
     cVampiric       : boolean;
@@ -237,7 +238,7 @@
 
     LuaTemplateNumber : LongWord;
 
-    LastVoice : TVoice = ( snd: sndNone; voicepack: nil );
+    LastVoice : TVoice;
 
     mobileRecord: TMobileRecord;
 
@@ -258,7 +259,10 @@
 
 var
     // these consts are here because they would cause circular dependencies in uConsts/uTypes
-    cPathz: array[TPathType] of shortstring = (
+    cPathz: array[TPathType] of shortstring;
+
+const
+    cPathzInit: array[TPathType] of shortstring = (
         '',                              // ptNone
         '//',                            // ptData
         '/Graphics',                     // ptGraphics
@@ -285,7 +289,10 @@
     );
 
 var
-    Fontz: array[THWFont] of THHFont = (
+    Fontz: array[THWFont] of THHFont;
+
+const
+    FontzInit: array[THWFont] of THHFont = (
             (Handle: nil;
             Height: 12;
             style: TTF_STYLE_NORMAL;
@@ -315,7 +322,10 @@
             );
 
 var
-    SpritesData: array[TSprite] of TSpriteData = (
+    SpritesData: array[TSprite] of TSpriteData;
+
+const
+    SpritesDataInit: array[TSprite] of TSpriteData = (
             (FileName:  'BlueWater'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: true; getImageDimensions: true),// sprWater
             (FileName:     'Clouds'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
@@ -417,13 +427,13 @@
 {$IFDEF USE_TOUCH_INTERFACE}
             (FileName: 'firebutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprFireButton
-            (FileName: 'arrowUp'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+            (FileName: 'arrowup'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
             Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowUp
-            (FileName: 'arrowDown'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+            (FileName: 'arrowdown'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
             Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowDown
-            (FileName: 'arrowLeft'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+            (FileName: 'arrowleft'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
             Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowLeft
-            (FileName: 'arrowRight'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+            (FileName: 'arrowright'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
             Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowRight
             (FileName: 'forwardjump'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprAMWidget
@@ -431,10 +441,12 @@
             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprJumpWidget
             (FileName: 'pause'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
             Width: 120; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprPauseButton
-            (FileName: 'pause'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;//TODO correct image
-            Width: 120; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTimerButton
-            (FileName: 'forwardjump'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;//TODO correct image
-            Width: 120; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTargetButton
+            (FileName: 'timerbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+            Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTimerButton
+            (FileName: 'targetbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+            Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTargetButton
+            (FileName: 'switchbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+            Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprSwitchButton
 {$ENDIF}
             (FileName:      'Flake'; Path:ptCurrTheme; AltPath: ptNone; Texture: nil; Surface: nil;
             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprFlake
@@ -685,8 +697,8 @@
             Width:  80; Height: 50; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSDSplash
             (FileName:  'SDDroplet'; Path: ptCurrTheme; AltPath: ptSuddenDeath; Texture: nil; Surface: nil;
             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprSDDroplet
-            (FileName:  'TARDIS'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
-            Width:  48; Height: 79; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprTardis
+            (FileName:  'Timebox'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+            Width:  50; Height: 81; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprTardis
             (FileName:  'slider'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
             Width: 3; Height: 17; imageWidth: 3; imageHeight: 17; saveSurf: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprSlider
             (FileName:  'botlevels'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
@@ -712,7 +724,9 @@
             (FileName:       'custom2'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom2
             (FileName:      'AirMine'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
-            Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHighest; getDimensions: false; getImageDimensions: true)// sprAirMine
+            Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHighest; getDimensions: false; getImageDimensions: true), // sprAirMine
+            (FileName:  'amAirMine'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
+            Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true) // sprHandAirMine
             );
 
 const
@@ -733,8 +747,8 @@
             (Sprite:   sprJuggle; FramesCount: 49; Interval:  38; cmd: '/juggle'; Voice: sndNone; VoiceDelay: 0)
             );
 
-var
-    Ammoz: array [TAmmoType] of record
+type
+    TAmmozRec = record
             NameId: TAmmoStrId;
             NameTex: PTexture;
             Probability, NumberInCase: Longword;
@@ -747,7 +761,13 @@
             PosCount: Longword;
             PosSprite: TSprite;
             ejectX, ejectY: Longint;
-            end = (
+            end;
+
+var
+    Ammoz: array [TAmmoType] of TAmmozRec;
+
+const
+    AmmozInit: array [TAmmoType] of TAmmozRec = (
             (NameId: sidNothing;
             NameTex: nil;
             Probability: 0;
@@ -1345,7 +1365,7 @@
             NameTex: nil;
             Probability: 100;
             NumberInCase: 4;
-            Ammo: (Propz: 0;
+            Ammo: (Propz: ammoprop_NeedUpDown;
                 Count: 4;
                 NumPerTurn: 0;
                 Timer: 0;
@@ -2136,6 +2156,7 @@
             NumberInCase: 1;
             Ammo: (Propz: ammoprop_Power or
                           ammoprop_AltUse or
+                          ammoprop_NeedUpDown or
                           ammoprop_NoRoundEnd;
                 Count: 2;
                 NumPerTurn: 0;
@@ -2217,6 +2238,7 @@
             Probability: 20;
             NumberInCase: 1;
             Ammo: (Propz: ammoprop_NoRoundEnd or
+                          ammoprop_NeedUpDown or
                           ammoprop_Utility;
                 Count: 1;
                 NumPerTurn: 0;
@@ -2492,7 +2514,19 @@
 
 procedure initModule;
 var s: shortstring;
+    i: integer;
 begin
+    // init LastVoice
+    LastVoice.snd:= sndNone;
+    LastVoice.voicepack:= nil;
+
+    // init arrays
+    Move(cPathzInit, cPathz, sizeof(cPathz));
+    Move(FontzInit, Fontz, sizeof(Fontz));
+    Move(SpritesDataInit, SpritesData, sizeof(SpritesData));
+    Move(AmmozInit, Ammoz, sizeof(Ammoz));
+
+
     cLocale:= cLocaleFName;
     SplitByChar(cLocale, s, '.');
 
@@ -2565,6 +2599,7 @@
     cElastic                := _0_9;
     cGravity                := cMaxWindSpeed * 2;
     cGravityf               := 0.00025 * 2;
+    cBuildMaxDist           := cDefaultBuildMaxDist;
     cDamageModifier         := _1;
     TargetPoint             := cTargetPointRef;
 
@@ -2620,7 +2655,7 @@
     AttackBar       := 0; // 0 - none, 1 - just bar at the right-down corner, 2 - from weapon
     cCaseFactor     := 5;  {0..9}
     cLandMines      := 4;
-    cAirMines       := 4;
+    cAirMines       := 0;
     cExplosives     := 2;
 
     GameState       := Low(TGameState);
@@ -2672,8 +2707,13 @@
     vobSDVelocity:= 15;
     vobSDFallSpeed:= 250;
 
+{$IFDEF MOBILE}
+    cMinScreenWidth  := min(cScreenWidth, 480);
+    cMinScreenHeight := min(cScreenHeight, 320);
+{$ELSE}
     cMinScreenWidth  := min(cScreenWidth, 640);
     cMinScreenHeight := min(cScreenHeight, 480);
+{$ENDIF}
 
     cNewScreenWidth    := cScreenWidth;
     cNewScreenHeight   := cScreenHeight;
@@ -2700,6 +2740,43 @@
     AprilOne := false;
 
     ChatPasteBuffer:= '';
+
+    // initialize pointers to nil
+    // (don't rely on implicit init of fpc, because that one only happens ONCE when used as lib)
+    CurAmmoGear:= nil;
+    lastGearByUID:= nil;
+    GearsList:= nil;
+    CurrentTeam:= nil;
+    PreviousTeam:= nil;
+    CurrentHedgehog:= nil;
+    FollowGear:= nil;
+    lastVisualGearByUID:= nil;
+
+    ChefHatTexture:= nil;
+    CrosshairTexture:= nil;
+    GenericHealthTexture:= nil;
+    WeaponTooltipTex:= nil;
+    HHTexture:= nil;
+    LandBackSurface:= nil;
+    ConfirmTexture:= nil;
+    MissionIcons:= nil;
+    ropeIconTex:= nil;
+
+    for i:= Low(ClansArray) to High(ClansArray) do
+        begin
+        ClansArray[i]:= nil;
+        end;
+
+    for i:= Low(TeamsArray) to High(TeamsArray) do
+        begin
+        TeamsArray[i]:= nil;
+        end;
+
+    for i:= Low(CountTexz) to High(CountTexz) do
+        begin
+        CountTexz[i]:= nil;
+        end;
+
 end;
 
 procedure freeModule;
--- a/hedgewars/uVideoRec.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uVideoRec.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uVisualGears.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uVisualGears.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uVisualGearsHandlers.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uVisualGearsHandlers.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uVisualGearsList.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uVisualGearsList.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/hedgewars/uWorld.pas	Sun Apr 26 13:02:38 2015 +0100
+++ b/hedgewars/uWorld.pas	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -862,8 +862,8 @@
         begin
         RenderClear();
         DrawWorldStereo(Lag, rmDefault)
+{$IFDEF USE_S3D_RENDERING}
         end
-{$IFDEF USE_S3D_RENDERING}
     else
         begin
         // draw frame for left eye
@@ -873,8 +873,8 @@
         // draw frame for right eye
         RenderClear(rmRightEye);
         DrawWorldStereo(0, rmRightEye);
+{$ENDIF}
         end;
-{$ENDIF}
 
 FinishRender();
 end;
@@ -1148,7 +1148,7 @@
 procedure ShiftWorld(Dir: LongInt); inline;
 begin
     preShiftWorldDx:= WorldDx;
-    WorldDx:= WorldDx + Dir * LongInt(playWidth);
+    WorldDx:= WorldDx + LongInt(Dir * LongInt(playWidth));
 
 end;
 
@@ -1659,35 +1659,32 @@
 
 
 // Cursor
-if isCursorVisible then
+if isCursorVisible and (not bShowAmmoMenu) then
     begin
-    if (not bShowAmmoMenu) then
-        begin
-        if not CurrentTeam^.ExtDriven then TargetCursorPoint:= CursorPoint;
-        with CurrentHedgehog^ do
-            if (Gear <> nil) and ((Gear^.State and gstChooseTarget) <> 0) then
+    if not CurrentTeam^.ExtDriven then TargetCursorPoint:= CursorPoint;
+    with CurrentHedgehog^ do
+        if (Gear <> nil) and ((Gear^.State and gstChooseTarget) <> 0) then
+            begin
+        if (CurAmmoType = amNapalm) or (CurAmmoType = amMineStrike) or (((GameFlags and gfMoreWind) <> 0) and ((CurAmmoType = amDrillStrike) or (CurAmmoType = amAirAttack))) then
+            DrawLine(-3000, topY-300, 7000, topY-300, 3.0, (Team^.Clan^.Color shr 16), (Team^.Clan^.Color shr 8) and $FF, Team^.Clan^.Color and $FF, $FF);
+        i:= GetCurAmmoEntry(CurrentHedgehog^)^.Pos;
+        with Ammoz[CurAmmoType] do
+            if PosCount > 1 then
                 begin
-            if (CurAmmoType = amNapalm) or (CurAmmoType = amMineStrike) or (((GameFlags and gfMoreWind) <> 0) and ((CurAmmoType = amDrillStrike) or (CurAmmoType = amAirAttack))) then
-                DrawLine(-3000, topY-300, 7000, topY-300, 3.0, (Team^.Clan^.Color shr 16), (Team^.Clan^.Color shr 8) and $FF, Team^.Clan^.Color and $FF, $FF);
-            i:= GetCurAmmoEntry(CurrentHedgehog^)^.Pos;
-            with Ammoz[CurAmmoType] do
-                if PosCount > 1 then
+                if (CurAmmoType = amGirder) or (CurAmmoType = amTeleport) then
                     begin
-                    if (CurAmmoType = amGirder) or (CurAmmoType = amTeleport) then
-                        begin
-                    // pulsating transparency
-                        if ((GameTicks div 16) mod $80) >= $40 then
-                            Tint($FF, $FF, $FF, $C0 - (GameTicks div 16) mod $40)
-                        else
-                            Tint($FF, $FF, $FF, $80 + (GameTicks div 16) mod $40);
-                        end;
-                    DrawSprite(PosSprite, TargetCursorPoint.X - (SpritesData[PosSprite].Width shr 1), cScreenHeight - TargetCursorPoint.Y - (SpritesData[PosSprite].Height shr 1),i);
-                    Untint();
+                // pulsating transparency
+                    if ((GameTicks div 16) mod $80) >= $40 then
+                        Tint($FF, $FF, $FF, $C0 - (GameTicks div 16) mod $40)
+                    else
+                        Tint($FF, $FF, $FF, $80 + (GameTicks div 16) mod $40);
                     end;
+                DrawSprite(PosSprite, TargetCursorPoint.X - (SpritesData[PosSprite].Width shr 1), cScreenHeight - TargetCursorPoint.Y - (SpritesData[PosSprite].Height shr 1),i);
+                Untint();
                 end;
-        //DrawSprite(sprArrow, TargetCursorPoint.X, cScreenHeight - TargetCursorPoint.Y, (RealTicks shr 6) mod 8)
-        DrawTextureF(SpritesData[sprArrow].Texture, cDefaultZoomLevel / cScaleFactor, TargetCursorPoint.X + round(SpritesData[sprArrow].Width / cScaleFactor), cScreenHeight + round(SpritesData[sprArrow].Height / cScaleFactor) - TargetCursorPoint.Y, (RealTicks shr 6) mod 8, 1, SpritesData[sprArrow].Width, SpritesData[sprArrow].Height);
-        end
+            end;
+    //DrawSprite(sprArrow, TargetCursorPoint.X, cScreenHeight - TargetCursorPoint.Y, (RealTicks shr 6) mod 8)
+    DrawTextureF(SpritesData[sprArrow].Texture, cDefaultZoomLevel / cScaleFactor, TargetCursorPoint.X + round(SpritesData[sprArrow].Width / cScaleFactor), cScreenHeight + round(SpritesData[sprArrow].Height / cScaleFactor) - TargetCursorPoint.Y, (RealTicks shr 6) mod 8, 1, SpritesData[sprArrow].Width, SpritesData[sprArrow].Height);
     end;
 
 // debug stuff
@@ -1706,7 +1703,7 @@
 var PrevSentPointTime: LongWord = 0;
 
 procedure MoveCamera;
-var EdgesDist, wdy, shs,z, amNumOffsetX, amNumOffsetY, cameraJump: LongInt;
+var EdgesDist, wdy, shs,z, amNumOffsetX, amNumOffsetY, dstX: LongInt;
     inbtwnTrgtAttks: Boolean;
 begin
 {$IFNDEF MOBILE}
@@ -1724,28 +1721,36 @@
         end
     else
         begin
-        if (WorldEdge = weWrap) then
-            cameraJump:= LongInt(playWidth) div 2 + 50
-        else
-            cameraJump:= LongInt(rightX) - leftX - 100;
+            dstX:= hwRound(FollowGear^.X) + hwSign(FollowGear^.dX) * z + WorldDx;
 
-        if abs(prevPoint.X - WorldDx - hwRound(FollowGear^.X)) > cameraJump then
-            begin
-            if prevPoint.X - WorldDx < LongInt(playWidth div 2) then
-                cameraJump:= LongInt(playWidth)
-            else
-                cameraJump:= -LongInt(playWidth);
-            WorldDx:= WorldDx - cameraJump;
-            end;
+            if (WorldEdge = weWrap) then
+                begin
+                    if dstX - prevPoint.X < (LongInt(leftX) - rightX) div 2 then
+                        CursorPoint.X:= (prevPoint.X * 7 + dstX - (leftX - rightX)) div 8
+                    else if dstX - prevPoint.X > (LongInt(rightX) - leftX) div 2 then
+                        CursorPoint.X:= (prevPoint.X * 7 + dstX - (rightX - leftX)) div 8
+                    else
+                        CursorPoint.X:= (prevPoint.X * 7 + dstX) div 8;
+                end
+            else // usual camera movement routine
+                begin
+                    CursorPoint.X:= (prevPoint.X * 7 + dstX) div 8;
+                end;
 
-        CursorPoint.X:= (prevPoint.X * 7 + hwRound(FollowGear^.X) + hwSign(FollowGear^.dX) * z + WorldDx) div 8;
-
-        if isPhone() or (cScreenHeight < 600) or ((hwSign(FollowGear^.dY) * z) < 10)  then
+        if isPhone() or (cScreenHeight < 600) or (hwFloat(FollowGear^.dY * z).Round < 10) then
             CursorPoint.Y:= (prevPoint.Y * 7 + cScreenHeight - (hwRound(FollowGear^.Y) + WorldDy)) div 8
         else
             CursorPoint.Y:= (prevPoint.Y * 7 + cScreenHeight - (hwRound(FollowGear^.Y) + hwSign(FollowGear^.dY) * z + WorldDy)) div 8;
         end;
 
+if (WorldEdge = weWrap) then
+    begin
+        if -WorldDx < leftX then
+            WorldDx:= WorldDx - LongInt(rightX) + leftX
+        else if -WorldDx > rightX then
+            WorldDx:= WorldDx + LongInt(rightX) - leftX;
+    end;
+
 wdy:= trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2 - cWaterLine - cVisibleWater;
 if WorldDy < wdy then
     WorldDy:= wdy;
@@ -1925,7 +1930,7 @@
     ammoType:= CurrentHedgehog^.CurAmmoType;
 
 if(CurrentHedgehog <> nil)then
-    if (Ammoz[ammoType].Ammo.Propz and ammoprop_Timerable) <> 0 then
+    if ((Ammoz[ammoType].Ammo.Propz and ammoprop_Timerable) <> 0) and (ammoType <> amDrillStrike) then
         begin
         utilityWidget.sprite:= sprTimerButton;
         animateWidget(@utilityWidget, true, true);
@@ -1937,7 +1942,7 @@
         end
     else if ammoType = amSwitch then
         begin
-        utilityWidget.sprite:= sprTargetButton;
+        utilityWidget.sprite:= sprSwitchButton;
         animateWidget(@utilityWidget, true, true);
         end
     else if utilityWidget.show then
--- a/man/hedgewars.6	Sun Apr 26 13:02:38 2015 +0100
+++ b/man/hedgewars.6	Mon Nov 09 18:37:57 2015 +0100
@@ -42,7 +42,7 @@
 .
 .SH "COPYRIGHT"
 .
-Copyright \(co 2004\-2014 Andrey Korotaev, Igor Ulyanov
+Copyright \(co 2004\-2015 Andrey Korotaev, Igor Ulyanov
 .br 
 This is Free Software; this software is licensed under the GPL version 2, as published by the Free Software Foundation.
 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
--- a/misc/liblua/Xcode/Lua.xcodeproj/project.pbxproj	Sun Apr 26 13:02:38 2015 +0100
+++ b/misc/liblua/Xcode/Lua.xcodeproj/project.pbxproj	Mon Nov 09 18:37:57 2015 +0100
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 45;
+	objectVersion = 46;
 	objects = {
 
 /* Begin PBXBuildFile section */
@@ -289,8 +289,11 @@
 /* Begin PBXProject section */
 		0867D690FE84028FC02AAC07 /* Project object */ = {
 			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0710;
+			};
 			buildConfigurationList = 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "Lua" */;
-			compatibilityVersion = "Xcode 3.1";
+			compatibilityVersion = "Xcode 3.2";
 			developmentRegion = English;
 			hasScannedForEncodings = 1;
 			knownRegions = (
@@ -354,7 +357,6 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
 				COPY_PHASE_STRIP = NO;
 				DSTROOT = /tmp/Lua.dst;
 				GCC_DYNAMIC_NO_PIC = NO;
@@ -365,6 +367,8 @@
 				GCC_PREFIX_HEADER = Lua_Prefix.pch;
 				INSTALL_PATH = /usr/local/lib;
 				PRODUCT_NAME = Lua;
+				SKIP_INSTALL = YES;
+				VALID_ARCHS = "armv7 x86_64 arm64";
 			};
 			name = Debug;
 		};
@@ -372,49 +376,78 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
 				DSTROOT = /tmp/Lua.dst;
 				GCC_MODEL_TUNING = G5;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Lua_Prefix.pch;
 				INSTALL_PATH = /usr/local/lib;
 				PRODUCT_NAME = Lua;
+				SKIP_INSTALL = YES;
+				VALID_ARCHS = "armv7 x86_64 arm64";
 			};
 			name = Release;
 		};
 		1DEB922308733DC00010E9CD /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
 				GCC_C_LANGUAGE_STANDARD = c99;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_THUMB_SUPPORT = NO;
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 3.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+				ONLY_ACTIVE_ARCH = YES;
 				OTHER_LDFLAGS = "-ObjC";
 				PREBINDING = NO;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
+				VALID_ARCHS = "armv7 armv7s arm64";
 			};
 			name = Debug;
 		};
 		1DEB922408733DC00010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_C_LANGUAGE_STANDARD = c99;
 				GCC_FAST_MATH = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_THUMB_SUPPORT = NO;
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 3.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
 				OTHER_LDFLAGS = "-ObjC";
 				PREBINDING = NO;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
+				VALID_ARCHS = "armv7 armv7s arm64";
 			};
 			name = Release;
 		};
--- a/misc/libphysfs/Xcode/Physfs.xcodeproj/project.pbxproj	Sun Apr 26 13:02:38 2015 +0100
+++ b/misc/libphysfs/Xcode/Physfs.xcodeproj/project.pbxproj	Mon Nov 09 18:37:57 2015 +0100
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 45;
+	objectVersion = 46;
 	objects = {
 
 /* Begin PBXBuildFile section */
@@ -178,8 +178,11 @@
 /* Begin PBXProject section */
 		0867D690FE84028FC02AAC07 /* Project object */ = {
 			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0710;
+			};
 			buildConfigurationList = 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "Physfs" */;
-			compatibilityVersion = "Xcode 3.1";
+			compatibilityVersion = "Xcode 3.2";
 			developmentRegion = English;
 			hasScannedForEncodings = 1;
 			knownRegions = (
@@ -230,7 +233,6 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
 				COPY_PHASE_STRIP = NO;
 				DSTROOT = /tmp/Physfs.dst;
 				GCC_DYNAMIC_NO_PIC = NO;
@@ -241,6 +243,7 @@
 				GCC_PREFIX_HEADER = Physfs_Prefix.pch;
 				INSTALL_PATH = /usr/local/lib;
 				PRODUCT_NAME = Physfs;
+				SKIP_INSTALL = YES;
 			};
 			name = Debug;
 		};
@@ -248,13 +251,13 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
 				DSTROOT = /tmp/Physfs.dst;
 				GCC_MODEL_TUNING = G5;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Physfs_Prefix.pch;
 				INSTALL_PATH = /usr/local/lib;
 				PRODUCT_NAME = Physfs;
+				SKIP_INSTALL = YES;
 			};
 			name = Release;
 		};
@@ -262,20 +265,36 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
 				GCC_C_LANGUAGE_STANDARD = c99;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PREPROCESSOR_DEFINITIONS = "";
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				HEADER_SEARCH_PATHS = (
 					"\"$(SRCROOT)/../../liblua\"",
 					"\"$(SRCROOT)/../../../../Library/SDL/include\"",
 				);
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+				ONLY_ACTIVE_ARCH = YES;
 				OTHER_LDFLAGS = "-ObjC";
 				PREBINDING = NO;
 				SDKROOT = iphoneos;
+				VALID_ARCHS = "armv7 x86_64 arm64";
 			};
 			name = Debug;
 		};
@@ -283,19 +302,33 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_C_LANGUAGE_STANDARD = c99;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_PREPROCESSOR_DEFINITIONS = "";
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				HEADER_SEARCH_PATHS = (
 					"\"$(SRCROOT)/../../liblua\"",
 					"\"$(SRCROOT)/../../../../Library/SDL/include\"",
 				);
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
 				OTHER_LDFLAGS = "-ObjC";
 				PREBINDING = NO;
 				SDKROOT = iphoneos;
+				VALID_ARCHS = "armv7 x86_64 arm64";
 			};
 			name = Release;
 		};
--- a/misc/libphyslayer/Xcode/Physlayer.xcodeproj/project.pbxproj	Sun Apr 26 13:02:38 2015 +0100
+++ b/misc/libphyslayer/Xcode/Physlayer.xcodeproj/project.pbxproj	Mon Nov 09 18:37:57 2015 +0100
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 45;
+	objectVersion = 46;
 	objects = {
 
 /* Begin PBXBuildFile section */
@@ -124,8 +124,11 @@
 /* Begin PBXProject section */
 		0867D690FE84028FC02AAC07 /* Project object */ = {
 			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0710;
+			};
 			buildConfigurationList = 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "Physlayer" */;
-			compatibilityVersion = "Xcode 3.1";
+			compatibilityVersion = "Xcode 3.2";
 			developmentRegion = English;
 			hasScannedForEncodings = 1;
 			knownRegions = (
@@ -162,7 +165,6 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
 				COPY_PHASE_STRIP = NO;
 				DSTROOT = /tmp/Physlayer.dst;
 				GCC_DYNAMIC_NO_PIC = NO;
@@ -173,6 +175,7 @@
 				GCC_PREFIX_HEADER = Physlayer_Prefix.pch;
 				INSTALL_PATH = /usr/local/lib;
 				PRODUCT_NAME = Physlayer;
+				SKIP_INSTALL = YES;
 			};
 			name = Debug;
 		};
@@ -180,24 +183,70 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
 				DSTROOT = /tmp/Physlayer.dst;
 				GCC_MODEL_TUNING = G5;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Physlayer_Prefix.pch;
 				INSTALL_PATH = /usr/local/lib;
 				PRODUCT_NAME = Physlayer;
+				SKIP_INSTALL = YES;
 			};
 			name = Release;
 		};
 		1DEB922308733DC00010E9CD /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
 				GCC_C_LANGUAGE_STANDARD = c99;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = (
+					"\"$(SRCROOT)/../../libphysfs\"",
+					"\"$(SRCROOT)/../../liblua\"",
+					"\"$(SRCROOT)/../../../../Library/SDL/include\"",
+				);
+				ONLY_ACTIVE_ARCH = YES;
+				OTHER_LDFLAGS = "-ObjC";
+				PREBINDING = NO;
+				SDKROOT = iphoneos;
+				VALID_ARCHS = "armv7 x86_64 arm64";
+			};
+			name = Debug;
+		};
+		1DEB922408733DC00010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = c99;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				HEADER_SEARCH_PATHS = (
 					"\"$(SRCROOT)/../../libphysfs\"",
@@ -207,25 +256,7 @@
 				OTHER_LDFLAGS = "-ObjC";
 				PREBINDING = NO;
 				SDKROOT = iphoneos;
-			};
-			name = Debug;
-		};
-		1DEB922408733DC00010E9CD /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
-				GCC_C_LANGUAGE_STANDARD = c99;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				HEADER_SEARCH_PATHS = (
-					"\"$(SRCROOT)/../../libphysfs\"",
-					"\"$(SRCROOT)/../../liblua\"",
-					"\"$(SRCROOT)/../../../../Library/SDL/include\"",
-				);
-				OTHER_LDFLAGS = "-ObjC";
-				PREBINDING = NO;
-				SDKROOT = iphoneos;
+				VALID_ARCHS = "armv7 x86_64 arm64";
 			};
 			name = Release;
 		};
--- a/misc/libphyslayer/physfscompat.c	Sun Apr 26 13:02:38 2015 +0100
+++ b/misc/libphyslayer/physfscompat.c	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
--- a/misc/libphyslayer/physfscompat.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/misc/libphyslayer/physfscompat.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Buttons/switchbutton.png has changed
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Buttons/targetbutton.png has changed
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Buttons/timerbutton.png has changed
--- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/SDLActivity.java	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/SDLActivity.java	Mon Nov 09 18:37:57 2015 +0100
@@ -2,7 +2,7 @@
  * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game
  * Copyright (c) 2011-2012 Richard Deurwaarder <xeli@xelification.com>
  * Copyright (C) 2012 Simeon Maxein <smaxein@googlemail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
--- a/project_files/HedgewarsMobile/Classes/AboutViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/AboutViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -27,7 +27,10 @@
     return rotationManager(interfaceOrientation);
 }
 
--(void) viewDidLoad {
+-(void) viewDidLoad
+{
+    [super viewDidLoad];
+    
     [self.tableView setBackgroundColorForAnyTable:[UIColor clearColor]];
     self.tableView.allowsSelection = NO;
 
@@ -48,12 +51,23 @@
     [self.view insertSubview:background atIndex:0];
     [background release];
 
-    [super viewDidLoad];
+    [self localizeSegmentedControl];
 }
 
 -(IBAction) buttonPressed:(id) sender {
     [[AudioManagerController mainManager] playBackSound];
-    [[self parentViewController] dismissModalViewControllerAnimated:YES];
+    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
+}
+
+#pragma mark - Segmented Control
+
+- (void)localizeSegmentedControl
+{
+    for (NSUInteger i = 0; i < self.segmentedControl.numberOfSegments; i++)
+    {
+        NSString *oldTitle = [self.segmentedControl titleForSegmentAtIndex:i];
+        [self.segmentedControl setTitle:NSLocalizedStringFromTable(oldTitle, @"About", nil) forSegmentAtIndex:i];
+    }
 }
 
 -(IBAction) segmentedControlChanged:(id) sender {
@@ -83,7 +97,8 @@
     cell.textLabel.text = [[self.people objectAtIndex:self.segmentedControl.selectedSegmentIndex] objectAtIndex:[indexPath row]];
     cell.textLabel.adjustsFontSizeToFitWidth = YES;
     cell.textLabel.minimumFontSize = 8;
-    cell.detailTextLabel.text = [[self.people objectAtIndex:(self.segmentedControl.selectedSegmentIndex + 5)] objectAtIndex:[indexPath row]];
+    NSString *detailsKey = [[self.people objectAtIndex:(self.segmentedControl.selectedSegmentIndex + 5)] objectAtIndex:[indexPath row]];
+    cell.detailTextLabel.text = NSLocalizedStringFromTable(detailsKey, @"About", nil);
 
     return cell;
 }
@@ -118,6 +133,7 @@
     label.textColor = [UIColor lightGrayColor];
     label.numberOfLines = 5;
     label.text = footerString;
+    [footerString release];
 
     label.backgroundColor = [UIColor clearColor];
     [footer addSubview:label];
--- a/project_files/HedgewarsMobile/Classes/Appirater.h	Sun Apr 26 13:02:38 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/*
- This file is part of Appirater, http://arashpayan.com
-
- Copyright (c) 2010, Arash Payan
- All rights reserved.
-
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation
- files (the "Software"), to deal in the Software without
- restriction, including without limitation the rights to use,
- copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following
- conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#import <Foundation/Foundation.h>
-
-extern NSString *const kAppiraterLaunchDate;
-extern NSString *const kAppiraterLaunchCount;
-extern NSString *const kAppiraterCurrentVersion;
-extern NSString *const kAppiraterRatedCurrentVersion;
-extern NSString *const kAppiraterDeclinedToRate;
-
-/*
- Place your Apple generated software id here.
- */
-#define APPIRATER_APP_ID                391234866
-
-/*
- Your app's name.
- */
-#define APPIRATER_APP_NAME              [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey]
-
-/*
- This is the message your users will see once they've passed the day+launches
- threshold.
- */
-#define APPIRATER_MESSAGE               [NSString stringWithFormat:@"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!", APPIRATER_APP_NAME]
-
-/*
- This is the title of the message alert that users will see.
- */
-#define APPIRATER_MESSAGE_TITLE         [NSString stringWithFormat:@"Rate %@", APPIRATER_APP_NAME]
-
-/*
- The text of the button that rejects reviewing the app.
- */
-#define APPIRATER_CANCEL_BUTTON         NSLocalizedString(@"No thanks",@"")
-
-/*
- Text of button that will send user to app review page.
- */
-#define APPIRATER_RATE_BUTTON           [NSString stringWithFormat:@"Rate %@", APPIRATER_APP_NAME]
-
-/*
- Text for button to remind the user to review later.
- */
-#define APPIRATER_RATE_LATER            NSLocalizedString(@"Remind me later",@"")
-
-/*
- Users will need to have the same version of your app installed for this many
- days before they will be prompted to rate it.
- */
-#define DAYS_UNTIL_PROMPT               3       // double
-
-/*
- Users will need to launch the same version of the app this many times before
- they will be prompted to rate it.
- */
-#define LAUNCHES_UNTIL_PROMPT           5      // integer
-
-/*
- 'YES' will show the Appirater alert everytime. Useful for testing how your message
- looks and making sure the link to your app's review page works.
- */
-#define APPIRATER_DEBUG                 NO      // bool
-
-@interface Appirater : NSObject <UIAlertViewDelegate> {
-
-}
-
-+(void) appLaunched;
-
-@end
--- a/project_files/HedgewarsMobile/Classes/Appirater.m	Sun Apr 26 13:02:38 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,159 +0,0 @@
-/*
- This file is part of Appirater, http://arashpayan.com
-
- Copyright (c) 2010, Arash Payan
- All rights reserved.
-
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation
- files (the "Software"), to deal in the Software without
- restriction, including without limitation the rights to use,
- copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following
- conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#import "Appirater.h"
-#import <SystemConfiguration/SCNetworkReachability.h>
-#import <netinet/in.h>
-
-NSString *const kAppiraterLaunchDate            = @"kAppiraterLaunchDate";
-NSString *const kAppiraterLaunchCount           = @"kAppiraterLaunchCount";
-NSString *const kAppiraterCurrentVersion        = @"kAppiraterCurrentVersion";
-NSString *const kAppiraterRatedCurrentVersion   = @"kAppiraterRatedCurrentVersion";
-NSString *const kAppiraterDeclinedToRate        = @"kAppiraterDeclinedToRate";
-
-NSString *templateReviewURL = @"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=APP_ID&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software";
-
-@implementation Appirater
-
-+(void) appLaunched {
-    Appirater *appirater = [[Appirater alloc] init];
-    [NSThread detachNewThreadSelector:@selector(appLaunchedHandler) toTarget:appirater withObject:nil];
-}
-
--(void) appLaunchedHandler {
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
-    if (APPIRATER_DEBUG) {
-        [self performSelectorOnMainThread:@selector(showPrompt) withObject:nil waitUntilDone:NO];
-        return;
-    }
-
-    BOOL willShowPrompt = NO;
-
-    // get the app's version
-    NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey];
-
-    // get the version number that we've been tracking
-    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
-    NSString *trackingVersion = [userDefaults stringForKey:kAppiraterCurrentVersion];
-    if (trackingVersion == nil) {
-        trackingVersion = version;
-        [userDefaults setObject:version forKey:kAppiraterCurrentVersion];
-    }
-
-    if (APPIRATER_DEBUG)
-        DLog(@"APPIRATER Tracking version: %@", trackingVersion);
-
-    if ([trackingVersion isEqualToString:version]) {
-        // get the launch date
-        NSTimeInterval timeInterval = [userDefaults doubleForKey:kAppiraterLaunchDate];
-        if (timeInterval == 0) {
-            timeInterval = [[NSDate date] timeIntervalSince1970];
-            [userDefaults setDouble:timeInterval forKey:kAppiraterLaunchDate];
-        }
-
-        NSTimeInterval secondsSinceLaunch = [[NSDate date] timeIntervalSinceDate:[NSDate dateWithTimeIntervalSince1970:timeInterval]];
-        double secondsUntilPrompt = 60 * 60 * 24 * DAYS_UNTIL_PROMPT;
-
-        // get the launch count
-        int launchCount = [userDefaults integerForKey:kAppiraterLaunchCount];
-        launchCount++;
-        [userDefaults setInteger:launchCount forKey:kAppiraterLaunchCount];
-        if (APPIRATER_DEBUG)
-            NSLog(@"APPIRATER Launch count: %d", launchCount);
-
-        // have they previously declined to rate this version of the app?
-        BOOL declinedToRate = [userDefaults boolForKey:kAppiraterDeclinedToRate];
-
-        // have they already rated the app?
-        BOOL ratedApp = [userDefaults boolForKey:kAppiraterRatedCurrentVersion];
-
-        if (secondsSinceLaunch > secondsUntilPrompt &&
-             launchCount > LAUNCHES_UNTIL_PROMPT &&
-             !declinedToRate &&
-             !ratedApp) {
-            if ([HWUtils isNetworkReachable]) { // check if they can reach the app store
-                willShowPrompt = YES;
-                [self performSelectorOnMainThread:@selector(showPrompt) withObject:nil waitUntilDone:NO];
-            }
-        }
-    } else {
-        // it's a new version of the app, so restart tracking
-        [userDefaults setObject:version forKey:kAppiraterCurrentVersion];
-        [userDefaults setDouble:[[NSDate date] timeIntervalSince1970] forKey:kAppiraterLaunchDate];
-        [userDefaults setInteger:1 forKey:kAppiraterLaunchCount];
-        [userDefaults setBool:NO forKey:kAppiraterRatedCurrentVersion];
-        [userDefaults setBool:NO forKey:kAppiraterDeclinedToRate];
-    }
-
-    [userDefaults synchronize];
-    if (!willShowPrompt)
-        [self autorelease];
-
-    [pool release];
-}
-
--(void) showPrompt {
-    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:APPIRATER_MESSAGE_TITLE
-                                                        message:APPIRATER_MESSAGE
-                                                       delegate:self
-                                              cancelButtonTitle:APPIRATER_CANCEL_BUTTON
-                                              otherButtonTitles:APPIRATER_RATE_BUTTON, APPIRATER_RATE_LATER, nil];
-    [alertView show];
-    [alertView release];
-}
-
--(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger) buttonIndex {
-    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
-
-    switch (buttonIndex) {
-        case 0:
-            // they don't want to rate it
-            [userDefaults setBool:YES forKey:kAppiraterDeclinedToRate];
-            break;
-        case 1:
-            // they want to rate it
-            [[UIApplication sharedApplication] openURL:
-             [NSURL URLWithString:[templateReviewURL stringByReplacingOccurrencesOfString:@"APP_ID" withString:[NSString stringWithFormat:@"%d", APPIRATER_APP_ID]]]];
-
-            [userDefaults setBool:YES forKey:kAppiraterRatedCurrentVersion];
-            break;
-        case 2:
-            // remind them later
-            break;
-        default:
-            break;
-    }
-
-    [userDefaults synchronize];
-
-    [self release];
-}
-
-@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/ar.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "إذا كنت تستمع باستخدام %@، فهل تمانع بأن تأخذ دقيقة من وقتك لتقيمه؟ لن يستغرق الأمر أكثر من دقيقة. شكرا لدعمك!";
+"Rate %@" = "قيم %@";
+"No, Thanks" = "لا شكرا";
+"Remind me later" = "ذكرني لاحقا";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/ca.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Si li agrada utilitzar %@, li importaria prendre’s un moment per a valorar-lo? No trigarà més d’un minut. Gràcies por la seva col·laboració!";
+"Rate %@" = "Valorar %@";
+"No, Thanks" = "No, gràcies";
+"Remind me later" = "Recordar-m’ho més tard";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/cs.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Pokud se Vám aplikace %@ líbí, mohli byste ji prosím ohodnotit v App Store? Zabere to jen chvilku. Díky za Vaši podporu!";
+"Rate %@" = "Ohodnotit %@";
+"No, Thanks" = "Ne, díky";
+"Remind me later" = "Možná později";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/da.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Hvis du synes om at bruge %@, vil du have noget imod at bruge et kort øjeblik på at bedømme det? Det tager kun et minut. Tak for din støtte!";
+"Rate %@" = "Bedøm %@";
+"No, Thanks" = "Nej tak";
+"Remind me later" = "Påmind mig senere";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/de.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Sie nutzen %@ gerne? Dann nehmen Sie sich bitte für eine Bewertung einen Moment Zeit! Es dauert nicht länger als eine Minute. Vielen Dank!";
+"Rate %@" = "Bewerte %@";
+"No, Thanks" = "Nein, danke";
+"Remind me later" = "Später erinnern";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/el.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Αν σου αρέσει το %@, θα μπορούσες να αφιερώσεις μια στιγμή για να το βαθμολογήσεις; Η διαδικασία είναι πολύ σύντομη. Ευχαριστούμε για τη στήριξη!";
+"Rate %@" = "Βαθμολόγηση του %@";
+"No, Thanks" = "Όχι, ευχαριστώ";
+"Remind me later" = "Υπενθύμιση αργότερα";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/en.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!";
+"Rate %@" = "Rate %@";
+"No, Thanks" = "No, thanks";
+"Remind me later" = "Remind me later";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/es.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Si te ha gustado  %@, ¿te gustaría calificarnos? No te tomará más de un minuto. ¡Gracias por tu colaboración!";
+"Rate %@" = "Calificar %@";
+"No, Thanks" = "No, gracias";
+"Remind me later" = "Recuérdame más tarde";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/fi.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Jos käytät mielelläsi %@, voisitko käyttää hetken ja arvostella sen? Se ei kestä minuuttia kauempaa. Kiitos tuestasi!";
+"Rate %@" = "Arvioi %@";
+"No, Thanks" = "Ei kiitos";
+"Remind me later" = "Muistuta minua myöhemmin";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/fr.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Si vous aimez %@, voulez-vous prendre un moment pour l'évaluer ? Cela ne vous prendra pas plus d'une minute. Merci de votre soutien !";
+"Rate %@" = "Évaluer %@";
+"No, Thanks" = "Non, merci";
+"Remind me later" = "Me rappeler plus tard";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/he.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "אם נהנת להשתמש ב %@, האם תסכים לדרג אותה? זה לא יקח יותר מדקה. תודה על התמיכה!";
+"Rate %@" = "דרג את %@";
+"No, Thanks" = "לא תודה";
+"Remind me later" = "מאוחר יותר";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/hu.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Ha tetszik a %@, ne felejtsd el értékelni az App Store-ban! Csak egy perc az egész. Köszönet a támogatásért!";
+"Rate %@" = "%@ értékelése";
+"No, Thanks" = "Most inkább nem";
+"Remind me later" = "Emlékeztess később";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/id.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Jika anda menyukai %@, maukah anda memberikan rating kepada aplikasi ini? Rating hanya memakan waktu kurang dari 1 menit. Terimakasih untuk dukungan anda!";
+"Rate %@" = "Rating %@";
+"No, Thanks" = "Tidak, terimakasih";
+"Remind me later" = "Silakan ingatkan saya lagi";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/it.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Se ti piace %@, perché non dedichi qualche istante a darne una valutazione sull'App Store? Non richiederà più di un minuto. Grazie per il supporto!";
+"Rate %@" = "Valuta %@";
+"No, Thanks" = "No, grazie";
+"Remind me later" = "Ricordamelo più tardi";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/ja.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "%@をお使いいただきありがとうございます。もしよろしければ、ほんの少しだけお時間をいただき評価をお願いできませんか?ご協力感謝いたします!";
+"Rate %@" = "%@を評価する";
+"No, Thanks" ="結構です";
+"Remind me later" = "あとで";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/ko.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "%@ 사용이 맘에 드셨나요? 잠시만 시간을 내서 평가를 부탁드리겠습니다. 감사합니다!";
+"Rate %@" = "%@ 평가하기";
+"No, Thanks" = "평가하지 않겠습니다";
+"Remind me later" = "다음에 평가하겠습니다";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/ms.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Jika anda suka %@, bolehkah luangkan sedikit masa untuk beri penarafan? Tak sampai seminit pun. Terima kasih atas sokongan anda!";
+"Rate %@" = "Tarafkan %@";
+"No, Thanks" = "Terima kasih saja";
+"Remind me later" = "Ingatkan saya lain kali";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/nb.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Hvis du liker å bruke %@, kan du ta deg et øyeblikk for å vurdere den? Det vil ikke ta mer enn ett minutt. Takk for din støtte!";
+"Rate %@" = "Vurder %@";
+"No, Thanks" = "Nei, takk";
+"Remind me later" = "Påminn meg senere";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/nl.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Als het gebruik van %@ je bevalt, zou je dan een momentje de tijd willen nemen om het te beoordelen? Het duurt nog geen minuut. Bedankt voor je steun!";
+"Rate %@" = "%@ beoordelen";
+"No, Thanks" = "Nee, bedankt";
+"Remind me later" = "Herinner me er later aan";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/pl.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Jeżeli podoba Ci się korzystanie z %@, może zechciałbyś poświęcić chwilę czasu, aby ocenić aplikację? Nie zajmie Ci to więcej niż minutę. Dziękujemy za pomoc!";
+"Rate %@" = "Oceń %@";
+"No, Thanks" = "Nie, dziękuję";
+"Remind me later" = "Przypomnij później";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/pt-BR.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Se você gosta de usar o %@, que tal avaliá-lo? Não levará mais de um minuto. Agradecemos o seu apoio!";
+"Rate %@" = "Avaliar o %@";
+"No, Thanks" = "Não, obrigado";
+"Remind me later" = "Mais tarde";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/pt.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Se você gosta de usar o %@, que tal avaliá-lo? Não levará mais de um minuto. Agradecemos o seu apoio!";
+"Rate %@" = "Avaliar o %@";
+"No, Thanks" = "Não, obrigado";
+"Remind me later" = "Mais tarde";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/ro.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Dacă îți place %@, acordă-i o notă te rog, nu durează mult. Mulțumim pentru susținere!";
+"Rate %@" = "Acordă notă pentru %@";
+"No, Thanks" = "Nu, mulțumesc";
+"Remind me later" = "Adu-mi aminte mai târziu";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/ru.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Если Вам нравится %@, пожалуйста, поставьте свою оценку. Это займет у Вас не больше одной минуты.\n Спасибо за поддержку!";
+"Rate %@" = "Оценить %@";
+"No, Thanks" = "Нет, спасибо";
+"Remind me later" = "Напомнить позже";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/sk.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Pokiaľ sa Vám páči aplikácia %@, mohli by ste ju prosím ohodnotiť v App Store? Zaberie to len chvíľu. Vďaka za Vašu podporu!";
+"Rate %@" = "Ohodnotiť %@";
+"No, Thanks" = "Nie, ďakujem";
+"Remind me later" = "Pripomenúť neskôr";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/sv.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Om du gillar att använda %@, kan du tänka dig att betygsätta det åt oss? Det tar bara en minut. Tack för hjälpen!";
+"Rate %@" = "Betygsätt %@";
+"No, Thanks" = "Nej tack";
+"Remind me later" = "Påminn mig senare";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/th.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "ถ้าคุณกำลังใช้ %@ โปรดสละเวลาสักครู่ในการให้อันดับแก่เรา คุณจะเสียเวลาไม่เกินหนึ่งนาที ขอบคุณสำหรับการสนับสนุน!";
+"Rate %@" = "ให้อันดับ %@";
+"No, Thanks" = "ไม่ ขอบคุณ";
+"Remind me later" = "เตือนฉันภายหลัง";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/tr.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Eğer %@ uygulamasını kullanmaktan keyif alıyorsanız, onu değerlendirmek için zaman ayırabilir misiniz? Desteğiniz için teşekkür ederiz!";
+"Rate %@" = "%@ uygulamasını değerlendir";
+"No, Thanks" = "Hayır, teşekkürler";
+"Remind me later" = "Daha sonra hatırlat";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/uk.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Якщо вам сподобалося %@, будь ласка, поставте свою оцінку. Це займає не більше однієї хвилини.\n Дякуємо за підтримку!";
+"Rate %@" = "Оцінити %@";
+"No, Thanks" = "Ні, дякую";
+"Remind me later" = "Нагадати пізніше";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/vi.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Cảm ơn bạn đã sử dụng ứng dụng %@ trong thời gian qua, bạn có thể dành chút thời gian để đánh giá ứng dụng trong AppStore không?";
+"Rate %@" = "Đánh giá %@";
+"No, Thanks" = "Không, xin cảm ơn";
+"Remind me later" = "Hãy nhắc nhở tôi sau";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/zh-Hans.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "如果你喜欢使用%@,你介意花一点时间给它评分吗?不会超过一分钟。感谢您的支持!";
+"Rate %@" = "给%@评分";
+"No, Thanks" = "不,谢谢";
+"Remind me later" = "稍后提醒我";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.bundle/zh-Hant.lproj/AppiraterLocalizable.strings	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4 @@
+"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "如果你喜歡使用%@,你介意花一點時間給它評分嗎?不會超過一分鐘。感謝您的支持!";
+"Rate %@" = "給%@評分";
+"No, Thanks" = "不,謝謝";
+"Remind me later" = "稍後提醒我";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.h	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,331 @@
+/*
+ This file is part of Appirater.
+ 
+ Copyright (c) 2012, Arash Payan
+ All rights reserved.
+ 
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+ 
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ 
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+ */
+/*
+ * Appirater.h
+ * appirater
+ *
+ * Created by Arash Payan on 9/5/09.
+ * http://arashpayan.com
+ * Copyright 2012 Arash Payan. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+#import "AppiraterDelegate.h"
+#import <StoreKit/StoreKit.h>
+
+extern NSString *const kAppiraterFirstUseDate;
+extern NSString *const kAppiraterUseCount;
+extern NSString *const kAppiraterSignificantEventCount;
+extern NSString *const kAppiraterCurrentVersion;
+extern NSString *const kAppiraterRatedCurrentVersion;
+extern NSString *const kAppiraterDeclinedToRate;
+extern NSString *const kAppiraterReminderRequestDate;
+
+/*!
+ Your localized app's name.
+ */
+#define APPIRATER_LOCALIZED_APP_NAME    [[[NSBundle mainBundle] localizedInfoDictionary] objectForKey:@"CFBundleDisplayName"]
+
+/*!
+ Your app's name.
+ */
+#define APPIRATER_APP_NAME				APPIRATER_LOCALIZED_APP_NAME ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]
+
+/*!
+ This is the message your users will see once they've passed the day+launches
+ threshold.
+ */
+#define APPIRATER_LOCALIZED_MESSAGE     NSLocalizedStringFromTableInBundle(@"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!", @"AppiraterLocalizable", [Appirater bundle], nil)
+#define APPIRATER_MESSAGE				[NSString stringWithFormat:APPIRATER_LOCALIZED_MESSAGE, APPIRATER_APP_NAME]
+
+/*!
+ This is the title of the message alert that users will see.
+ */
+#define APPIRATER_LOCALIZED_MESSAGE_TITLE   NSLocalizedStringFromTableInBundle(@"Rate %@", @"AppiraterLocalizable", [Appirater bundle], nil)
+#define APPIRATER_MESSAGE_TITLE             [NSString stringWithFormat:APPIRATER_LOCALIZED_MESSAGE_TITLE, APPIRATER_APP_NAME]
+
+/*!
+ The text of the button that rejects reviewing the app.
+ */
+#define APPIRATER_CANCEL_BUTTON			NSLocalizedStringFromTableInBundle(@"No, Thanks", @"AppiraterLocalizable", [Appirater bundle], nil)
+
+/*!
+ Text of button that will send user to app review page.
+ */
+#define APPIRATER_LOCALIZED_RATE_BUTTON NSLocalizedStringFromTableInBundle(@"Rate %@", @"AppiraterLocalizable", [Appirater bundle], nil)
+#define APPIRATER_RATE_BUTTON			[NSString stringWithFormat:APPIRATER_LOCALIZED_RATE_BUTTON, APPIRATER_APP_NAME]
+
+/*!
+ Text for button to remind the user to review later.
+ */
+#define APPIRATER_RATE_LATER			NSLocalizedStringFromTableInBundle(@"Remind me later", @"AppiraterLocalizable", [Appirater bundle], nil)
+
+@interface Appirater : NSObject <UIAlertViewDelegate, SKStoreProductViewControllerDelegate> {
+
+	UIAlertView		*ratingAlert;
+}
+
+@property(nonatomic, strong) UIAlertView *ratingAlert;
+@property(nonatomic) BOOL openInAppStore;
+#if __has_feature(objc_arc_weak)
+@property(nonatomic, weak) NSObject <AppiraterDelegate> *delegate;
+#else
+@property(nonatomic, unsafe_unretained) NSObject <AppiraterDelegate> *delegate;
+#endif
+
+/*!
+ Tells Appirater that the app has launched, and on devices that do NOT
+ support multitasking, the 'uses' count will be incremented. You should
+ call this method at the end of your application delegate's
+ application:didFinishLaunchingWithOptions: method.
+ 
+ If the app has been used enough to be rated (and enough significant events),
+ you can suppress the rating alert
+ by passing NO for canPromptForRating. The rating alert will simply be postponed
+ until it is called again with YES for canPromptForRating. The rating alert
+ can also be triggered by appEnteredForeground: and userDidSignificantEvent:
+ (as long as you pass YES for canPromptForRating in those methods).
+ */
++ (void)appLaunched:(BOOL)canPromptForRating;
+
+/*!
+ Tells Appirater that the app was brought to the foreground on multitasking
+ devices. You should call this method from the application delegate's
+ applicationWillEnterForeground: method.
+ 
+ If the app has been used enough to be rated (and enough significant events),
+ you can suppress the rating alert
+ by passing NO for canPromptForRating. The rating alert will simply be postponed
+ until it is called again with YES for canPromptForRating. The rating alert
+ can also be triggered by appLaunched: and userDidSignificantEvent:
+ (as long as you pass YES for canPromptForRating in those methods).
+ */
++ (void)appEnteredForeground:(BOOL)canPromptForRating;
+
+/*!
+ Tells Appirater that the user performed a significant event. A significant
+ event is whatever you want it to be. If you're app is used to make VoIP
+ calls, then you might want to call this method whenever the user places
+ a call. If it's a game, you might want to call this whenever the user
+ beats a level boss.
+ 
+ If the user has performed enough significant events and used the app enough,
+ you can suppress the rating alert by passing NO for canPromptForRating. The
+ rating alert will simply be postponed until it is called again with YES for
+ canPromptForRating. The rating alert can also be triggered by appLaunched:
+ and appEnteredForeground: (as long as you pass YES for canPromptForRating
+ in those methods).
+ */
++ (void)userDidSignificantEvent:(BOOL)canPromptForRating;
+
+/*!
+ Tells Appirater to try and show the prompt (a rating alert). The prompt will be showed
+ if there is connection available, the user hasn't declined to rate
+ or hasn't rated current version.
+ 
+ You could call to show the prompt regardless Appirater settings,
+ e.g., in case of some special event in your app.
+ */
++ (void)tryToShowPrompt;
+
+/*!
+ Tells Appirater to show the prompt (a rating alert).
+ Similar to tryToShowPrompt, but without checks (the prompt is always displayed).
+ Passing false will hide the rate later button on the prompt.
+  
+ The only case where you should call this is if your app has an
+ explicit "Rate this app" command somewhere. This is similar to rateApp,
+ but instead of jumping to the review directly, an intermediary prompt is displayed.
+ */
++ (void)forceShowPrompt:(BOOL)displayRateLaterButton;
+
+/*!
+ Tells Appirater to open the App Store page where the user can specify a
+ rating for the app. Also records the fact that this has happened, so the
+ user won't be prompted again to rate the app.
+
+ The only case where you should call this directly is if your app has an
+ explicit "Rate this app" command somewhere.  In all other cases, don't worry
+ about calling this -- instead, just call the other functions listed above,
+ and let Appirater handle the bookkeeping of deciding when to ask the user
+ whether to rate the app.
+ */
++ (void)rateApp;
+
+/*!
+ Tells Appirater to immediately close any open rating modals (e.g. StoreKit rating VCs).
+*/
++ (void)closeModal;
+
+/*!
+ Asks Appirater if the user has declined to rate;
+*/
+- (BOOL)userHasDeclinedToRate;
+
+/*!
+ Asks Appirater if the user has rated the current version.
+ Note that this is not a guarantee that the user has actually rated the app in the 
+ app store, but they've just clicked the rate button on the Appirater dialog. 
+*/
+- (BOOL)userHasRatedCurrentVersion;
+
+@end
+
+@interface Appirater(Configuration)
+
+/*!
+ Set your Apple generated software id here.
+ */
++ (void) setAppId:(NSString*)appId;
+
+/*!
+ Users will need to have the same version of your app installed for this many
+ days before they will be prompted to rate it.
+ */
++ (void) setDaysUntilPrompt:(double)value;
+
+/*!
+ An example of a 'use' would be if the user launched the app. Bringing the app
+ into the foreground (on devices that support it) would also be considered
+ a 'use'. You tell Appirater about these events using the two methods:
+ [Appirater appLaunched:]
+ [Appirater appEnteredForeground:]
+ 
+ Users need to 'use' the same version of the app this many times before
+ before they will be prompted to rate it.
+ */
++ (void) setUsesUntilPrompt:(NSInteger)value;
+
+/*!
+ A significant event can be anything you want to be in your app. In a
+ telephone app, a significant event might be placing or receiving a call.
+ In a game, it might be beating a level or a boss. This is just another
+ layer of filtering that can be used to make sure that only the most
+ loyal of your users are being prompted to rate you on the app store.
+ If you leave this at a value of -1, then this won't be a criterion
+ used for rating. To tell Appirater that the user has performed
+ a significant event, call the method:
+ [Appirater userDidSignificantEvent:];
+ */
++ (void) setSignificantEventsUntilPrompt:(NSInteger)value;
+
+
+/*!
+ Once the rating alert is presented to the user, they might select
+ 'Remind me later'. This value specifies how long (in days) Appirater
+ will wait before reminding them.
+ */
++ (void) setTimeBeforeReminding:(double)value;
+
+/*!
+ Set customized title for alert view.
+ */
++ (void) setCustomAlertTitle:(NSString *)title;
+
+/*!
+ Set customized message for alert view.
+ */
++ (void) setCustomAlertMessage:(NSString *)message;
+
+/*!
+ Set customized cancel button title for alert view.
+ */
++ (void) setCustomAlertCancelButtonTitle:(NSString *)cancelTitle;
+
+/*!
+ Set customized rate button title for alert view.
+ */
++ (void) setCustomAlertRateButtonTitle:(NSString *)rateTitle;
+
+/*!
+ Set customized rate later button title for alert view.
+ */
++ (void) setCustomAlertRateLaterButtonTitle:(NSString *)rateLaterTitle;
+
+/*!
+ 'YES' will show the Appirater alert everytime. Useful for testing how your message
+ looks and making sure the link to your app's review page works.
+ */
++ (void) setDebug:(BOOL)debug;
+
+/*!
+ Set the delegate if you want to know when Appirater does something
+ */
++ (void)setDelegate:(id<AppiraterDelegate>)delegate;
+
+/*!
+ Set whether or not Appirater uses animation (currently respected when pushing modal StoreKit rating VCs).
+ */
++ (void)setUsesAnimation:(BOOL)animation;
+
+/*!
+ If set to YES, Appirater will open App Store link (instead of SKStoreProductViewController on iOS 6). Default YES.
+ */
++ (void)setOpenInAppStore:(BOOL)openInAppStore;
+
+/*!
+ If set to YES, the main bundle will always be used to load localized strings.
+ Set this to YES if you have provided your own custom localizations in AppiraterLocalizable.strings
+ in your main bundle.  Default is NO.
+ */
++ (void)setAlwaysUseMainBundle:(BOOL)useMainBundle;
+
+@end
+
+
+/*!
+ Methods in this interface are public out of necessity, but may change without notice
+ */
+@interface Appirater(Unsafe)
+
+/*!
+ The bundle localized strings will be loaded from.
+*/
++(NSBundle *)bundle;
+
+@end
+
+@interface Appirater(Deprecated)
+
+/*!
+ DEPRECATED: While still functional, it's better to use
+ appLaunched:(BOOL)canPromptForRating instead.
+ 
+ Calls [Appirater appLaunched:YES]. See appLaunched: for details of functionality.
+ */
++ (void)appLaunched __attribute__((deprecated)); 
+
+/*!
+ DEPRECATED: While still functional, it's better to use
+ tryToShowPrompt instead.
+ 
+ Calls [Appirater tryToShowPrompt]. See tryToShowPrompt for details of functionality.
+ */
++ (void)showPrompt __attribute__((deprecated));
+
+@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/Appirater.m	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,732 @@
+/*
+ This file is part of Appirater.
+ 
+ Copyright (c) 2012, Arash Payan
+ All rights reserved.
+ 
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+ 
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ 
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+ */
+/*
+ * Appirater.m
+ * appirater
+ *
+ * Created by Arash Payan on 9/5/09.
+ * http://arashpayan.com
+ * Copyright 2012 Arash Payan. All rights reserved.
+ */
+
+#import "Appirater.h"
+#import <SystemConfiguration/SCNetworkReachability.h>
+#include <netinet/in.h>
+
+#if ! __has_feature(objc_arc)
+#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
+#endif
+
+NSString *const kAppiraterFirstUseDate				= @"kAppiraterFirstUseDate";
+NSString *const kAppiraterUseCount					= @"kAppiraterUseCount";
+NSString *const kAppiraterSignificantEventCount		= @"kAppiraterSignificantEventCount";
+NSString *const kAppiraterCurrentVersion			= @"kAppiraterCurrentVersion";
+NSString *const kAppiraterRatedCurrentVersion		= @"kAppiraterRatedCurrentVersion";
+NSString *const kAppiraterDeclinedToRate			= @"kAppiraterDeclinedToRate";
+NSString *const kAppiraterReminderRequestDate		= @"kAppiraterReminderRequestDate";
+
+NSString *templateReviewURL = @"itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=APP_ID";
+NSString *templateReviewURLiOS7 = @"itms-apps://itunes.apple.com/app/idAPP_ID";
+NSString *templateReviewURLiOS8 = @"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=APP_ID&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software";
+
+static NSString *_appId;
+static double _daysUntilPrompt = 30;
+static NSInteger _usesUntilPrompt = 20;
+static NSInteger _significantEventsUntilPrompt = -1;
+static double _timeBeforeReminding = 1;
+static BOOL _debug = NO;
+#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0
+	static id<AppiraterDelegate> _delegate;
+#else
+	__weak static id<AppiraterDelegate> _delegate;
+#endif
+static BOOL _usesAnimation = TRUE;
+static UIStatusBarStyle _statusBarStyle;
+static BOOL _modalOpen = false;
+static BOOL _alwaysUseMainBundle = NO;
+
+@interface Appirater ()
+@property (nonatomic, copy) NSString *alertTitle;
+@property (nonatomic, copy) NSString *alertMessage;
+@property (nonatomic, copy) NSString *alertCancelTitle;
+@property (nonatomic, copy) NSString *alertRateTitle;
+@property (nonatomic, copy) NSString *alertRateLaterTitle;
+- (BOOL)connectedToNetwork;
++ (Appirater*)sharedInstance;
+- (void)showPromptWithChecks:(BOOL)withChecks
+      displayRateLaterButton:(BOOL)displayRateLaterButton;
+- (void)showRatingAlert:(BOOL)displayRateLaterButton;
+- (void)showRatingAlert;
+- (BOOL)ratingAlertIsAppropriate;
+- (BOOL)ratingConditionsHaveBeenMet;
+- (void)incrementUseCount;
+- (void)hideRatingAlert;
+@end
+
+@implementation Appirater 
+
+@synthesize ratingAlert;
+
++ (void) setAppId:(NSString *)appId {
+    _appId = appId;
+}
+
++ (void) setDaysUntilPrompt:(double)value {
+    _daysUntilPrompt = value;
+}
+
++ (void) setUsesUntilPrompt:(NSInteger)value {
+    _usesUntilPrompt = value;
+}
+
++ (void) setSignificantEventsUntilPrompt:(NSInteger)value {
+    _significantEventsUntilPrompt = value;
+}
+
++ (void) setTimeBeforeReminding:(double)value {
+    _timeBeforeReminding = value;
+}
+
++ (void) setCustomAlertTitle:(NSString *)title
+{
+    [self sharedInstance].alertTitle = title;
+}
+
++ (void) setCustomAlertMessage:(NSString *)message
+{
+    [self sharedInstance].alertMessage = message;
+}
+
++ (void) setCustomAlertCancelButtonTitle:(NSString *)cancelTitle
+{
+    [self sharedInstance].alertCancelTitle = cancelTitle;
+}
+
++ (void) setCustomAlertRateButtonTitle:(NSString *)rateTitle
+{
+    [self sharedInstance].alertRateTitle = rateTitle;
+}
+
++ (void) setCustomAlertRateLaterButtonTitle:(NSString *)rateLaterTitle
+{
+    [self sharedInstance].alertRateLaterTitle = rateLaterTitle;
+}
+
++ (void) setDebug:(BOOL)debug {
+    _debug = debug;
+}
++ (void)setDelegate:(id<AppiraterDelegate>)delegate{
+	_delegate = delegate;
+}
++ (void)setUsesAnimation:(BOOL)animation {
+	_usesAnimation = animation;
+}
++ (void)setOpenInAppStore:(BOOL)openInAppStore {
+    [Appirater sharedInstance].openInAppStore = openInAppStore;
+}
++ (void)setStatusBarStyle:(UIStatusBarStyle)style {
+	_statusBarStyle = style;
+}
++ (void)setModalOpen:(BOOL)open {
+	_modalOpen = open;
+}
++ (void)setAlwaysUseMainBundle:(BOOL)alwaysUseMainBundle {
+    _alwaysUseMainBundle = alwaysUseMainBundle;
+}
+
++ (NSBundle *)bundle
+{
+    NSBundle *bundle;
+
+    if (_alwaysUseMainBundle) {
+        bundle = [NSBundle mainBundle];
+    } else {
+        NSURL *appiraterBundleURL = [[NSBundle mainBundle] URLForResource:@"Appirater" withExtension:@"bundle"];
+
+        if (appiraterBundleURL) {
+            // Appirater.bundle will likely only exist when used via CocoaPods
+            bundle = [NSBundle bundleWithURL:appiraterBundleURL];
+        } else {
+            bundle = [NSBundle mainBundle];
+        }
+    }
+
+    return bundle;
+}
+
+- (NSString *)alertTitle
+{
+    return _alertTitle ? _alertTitle : APPIRATER_MESSAGE_TITLE;
+}
+
+- (NSString *)alertMessage
+{
+    return _alertMessage ? _alertMessage : APPIRATER_MESSAGE;
+}
+
+- (NSString *)alertCancelTitle
+{
+    return _alertCancelTitle ? _alertCancelTitle : APPIRATER_CANCEL_BUTTON;
+}
+
+- (NSString *)alertRateTitle
+{
+    return _alertRateTitle ? _alertRateTitle : APPIRATER_RATE_BUTTON;
+}
+
+- (NSString *)alertRateLaterTitle
+{
+    return _alertRateLaterTitle ? _alertRateLaterTitle : APPIRATER_RATE_LATER;
+}
+
+- (void)dealloc {
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+- (id)init {
+    self = [super init];
+    if (self) {
+        if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) {
+            self.openInAppStore = YES;
+        } else {
+            self.openInAppStore = NO;
+        }
+    }
+    
+    return self;
+}
+
+- (BOOL)connectedToNetwork {
+    // Create zero addy
+    struct sockaddr_in zeroAddress;
+    bzero(&zeroAddress, sizeof(zeroAddress));
+    zeroAddress.sin_len = sizeof(zeroAddress);
+    zeroAddress.sin_family = AF_INET;
+	
+    // Recover reachability flags
+    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
+    SCNetworkReachabilityFlags flags;
+	
+    Boolean didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
+    CFRelease(defaultRouteReachability);
+	
+    if (!didRetrieveFlags)
+    {
+        NSLog(@"Error. Could not recover network reachability flags");
+        return NO;
+    }
+	
+    BOOL isReachable = flags & kSCNetworkFlagsReachable;
+    BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
+	BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection;
+	
+	NSURL *testURL = [NSURL URLWithString:@"http://www.apple.com/"];
+	NSURLRequest *testRequest = [NSURLRequest requestWithURL:testURL  cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20.0];
+	NSURLConnection *testConnection = [[NSURLConnection alloc] initWithRequest:testRequest delegate:self];
+	
+    return ((isReachable && !needsConnection) || nonWiFi) ? (testConnection ? YES : NO) : NO;
+}
+
++ (Appirater*)sharedInstance {
+	static Appirater *appirater = nil;
+	if (appirater == nil)
+	{
+        static dispatch_once_t onceToken;
+        dispatch_once(&onceToken, ^{
+            appirater = [[Appirater alloc] init];
+			appirater.delegate = _delegate;
+            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillResignActive) name:
+                UIApplicationWillResignActiveNotification object:nil];
+        });
+	}
+	
+	return appirater;
+}
+
+- (void)showRatingAlert:(BOOL)displayRateLaterButton {
+  UIAlertView *alertView = nil;
+  id <AppiraterDelegate> delegate = _delegate;
+    
+  if(delegate && [delegate respondsToSelector:@selector(appiraterShouldDisplayAlert:)] && ![delegate appiraterShouldDisplayAlert:self]) {
+      return;
+  }
+  
+  if (displayRateLaterButton) {
+  	alertView = [[UIAlertView alloc] initWithTitle:self.alertTitle
+                                           message:self.alertMessage
+                                          delegate:self
+                                 cancelButtonTitle:self.alertCancelTitle
+                                 otherButtonTitles:self.alertRateTitle, self.alertRateLaterTitle, nil];
+  } else {
+  	alertView = [[UIAlertView alloc] initWithTitle:self.alertTitle
+                                           message:self.alertMessage
+                                          delegate:self
+                                 cancelButtonTitle:self.alertCancelTitle
+                                 otherButtonTitles:self.alertRateTitle, nil];
+  }
+
+	self.ratingAlert = alertView;
+    [alertView show];
+
+    if (delegate && [delegate respondsToSelector:@selector(appiraterDidDisplayAlert:)]) {
+             [delegate appiraterDidDisplayAlert:self];
+    }
+}
+
+- (void)showRatingAlert
+{
+  [self showRatingAlert:true];
+}
+
+// is this an ok time to show the alert? (regardless of whether the rating conditions have been met)
+//
+// things checked here:
+// * connectivity with network
+// * whether user has rated before
+// * whether user has declined to rate
+// * whether rating alert is currently showing visibly
+// things NOT checked here:
+// * time since first launch
+// * number of uses of app
+// * number of significant events
+// * time since last reminder
+- (BOOL)ratingAlertIsAppropriate {
+    return ([self connectedToNetwork]
+            && ![self userHasDeclinedToRate]
+            && !self.ratingAlert.visible
+            && ![self userHasRatedCurrentVersion]);
+}
+
+// have the rating conditions been met/earned? (regardless of whether this would be a moment when it's appropriate to show a new rating alert)
+//
+// things checked here:
+// * time since first launch
+// * number of uses of app
+// * number of significant events
+// * time since last reminder
+// things NOT checked here:
+// * connectivity with network
+// * whether user has rated before
+// * whether user has declined to rate
+// * whether rating alert is currently showing visibly
+- (BOOL)ratingConditionsHaveBeenMet {
+	if (_debug)
+		return YES;
+	
+	NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
+	
+	NSDate *dateOfFirstLaunch = [NSDate dateWithTimeIntervalSince1970:[userDefaults doubleForKey:kAppiraterFirstUseDate]];
+	NSTimeInterval timeSinceFirstLaunch = [[NSDate date] timeIntervalSinceDate:dateOfFirstLaunch];
+	NSTimeInterval timeUntilRate = 60 * 60 * 24 * _daysUntilPrompt;
+	if (timeSinceFirstLaunch < timeUntilRate)
+		return NO;
+	
+	// check if the app has been used enough
+	NSInteger useCount = [userDefaults integerForKey:kAppiraterUseCount];
+	if (useCount < _usesUntilPrompt)
+		return NO;
+	
+	// check if the user has done enough significant events
+	NSInteger sigEventCount = [userDefaults integerForKey:kAppiraterSignificantEventCount];
+	if (sigEventCount < _significantEventsUntilPrompt)
+		return NO;
+	
+	// if the user wanted to be reminded later, has enough time passed?
+	NSDate *reminderRequestDate = [NSDate dateWithTimeIntervalSince1970:[userDefaults doubleForKey:kAppiraterReminderRequestDate]];
+	NSTimeInterval timeSinceReminderRequest = [[NSDate date] timeIntervalSinceDate:reminderRequestDate];
+	NSTimeInterval timeUntilReminder = 60 * 60 * 24 * _timeBeforeReminding;
+	if (timeSinceReminderRequest < timeUntilReminder)
+		return NO;
+	
+	return YES;
+}
+
+- (void)incrementUseCount {
+	// get the app's version
+	NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey];
+	
+	// get the version number that we've been tracking
+	NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
+	NSString *trackingVersion = [userDefaults stringForKey:kAppiraterCurrentVersion];
+	if (trackingVersion == nil)
+	{
+		trackingVersion = version;
+		[userDefaults setObject:version forKey:kAppiraterCurrentVersion];
+	}
+	
+	if (_debug)
+		NSLog(@"APPIRATER Tracking version: %@", trackingVersion);
+	
+	if ([trackingVersion isEqualToString:version])
+	{
+		// check if the first use date has been set. if not, set it.
+		NSTimeInterval timeInterval = [userDefaults doubleForKey:kAppiraterFirstUseDate];
+		if (timeInterval == 0)
+		{
+			timeInterval = [[NSDate date] timeIntervalSince1970];
+			[userDefaults setDouble:timeInterval forKey:kAppiraterFirstUseDate];
+		}
+		
+		// increment the use count
+		NSInteger useCount = [userDefaults integerForKey:kAppiraterUseCount];
+		useCount++;
+		[userDefaults setInteger:useCount forKey:kAppiraterUseCount];
+		if (_debug)
+			NSLog(@"APPIRATER Use count: %@", @(useCount));
+	}
+	else
+	{
+		// it's a new version of the app, so restart tracking
+		[userDefaults setObject:version forKey:kAppiraterCurrentVersion];
+		[userDefaults setDouble:[[NSDate date] timeIntervalSince1970] forKey:kAppiraterFirstUseDate];
+		[userDefaults setInteger:1 forKey:kAppiraterUseCount];
+		[userDefaults setInteger:0 forKey:kAppiraterSignificantEventCount];
+		[userDefaults setBool:NO forKey:kAppiraterRatedCurrentVersion];
+		[userDefaults setBool:NO forKey:kAppiraterDeclinedToRate];
+		[userDefaults setDouble:0 forKey:kAppiraterReminderRequestDate];
+	}
+	
+	[userDefaults synchronize];
+}
+
+- (void)incrementSignificantEventCount {
+	// get the app's version
+	NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey];
+	
+	// get the version number that we've been tracking
+	NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
+	NSString *trackingVersion = [userDefaults stringForKey:kAppiraterCurrentVersion];
+	if (trackingVersion == nil)
+	{
+		trackingVersion = version;
+		[userDefaults setObject:version forKey:kAppiraterCurrentVersion];
+	}
+	
+	if (_debug)
+		NSLog(@"APPIRATER Tracking version: %@", trackingVersion);
+	
+	if ([trackingVersion isEqualToString:version])
+	{
+		// check if the first use date has been set. if not, set it.
+		NSTimeInterval timeInterval = [userDefaults doubleForKey:kAppiraterFirstUseDate];
+		if (timeInterval == 0)
+		{
+			timeInterval = [[NSDate date] timeIntervalSince1970];
+			[userDefaults setDouble:timeInterval forKey:kAppiraterFirstUseDate];
+		}
+		
+		// increment the significant event count
+		NSInteger sigEventCount = [userDefaults integerForKey:kAppiraterSignificantEventCount];
+		sigEventCount++;
+		[userDefaults setInteger:sigEventCount forKey:kAppiraterSignificantEventCount];
+		if (_debug)
+			NSLog(@"APPIRATER Significant event count: %@", @(sigEventCount));
+	}
+	else
+	{
+		// it's a new version of the app, so restart tracking
+		[userDefaults setObject:version forKey:kAppiraterCurrentVersion];
+		[userDefaults setDouble:0 forKey:kAppiraterFirstUseDate];
+		[userDefaults setInteger:0 forKey:kAppiraterUseCount];
+		[userDefaults setInteger:1 forKey:kAppiraterSignificantEventCount];
+		[userDefaults setBool:NO forKey:kAppiraterRatedCurrentVersion];
+		[userDefaults setBool:NO forKey:kAppiraterDeclinedToRate];
+		[userDefaults setDouble:0 forKey:kAppiraterReminderRequestDate];
+	}
+	
+	[userDefaults synchronize];
+}
+
+- (void)incrementAndRate:(BOOL)canPromptForRating {
+	[self incrementUseCount];
+	
+	if (canPromptForRating &&
+        [self ratingConditionsHaveBeenMet] &&
+        [self ratingAlertIsAppropriate])
+	{
+        dispatch_async(dispatch_get_main_queue(),
+                       ^{
+                           [self showRatingAlert];
+                       });
+	}
+}
+
+- (void)incrementSignificantEventAndRate:(BOOL)canPromptForRating {
+	[self incrementSignificantEventCount];
+	
+    if (canPromptForRating &&
+        [self ratingConditionsHaveBeenMet] &&
+        [self ratingAlertIsAppropriate])
+	{
+        dispatch_async(dispatch_get_main_queue(),
+                       ^{
+                           [self showRatingAlert];
+                       });
+	}
+}
+
+- (BOOL)userHasDeclinedToRate {
+    return [[NSUserDefaults standardUserDefaults] boolForKey:kAppiraterDeclinedToRate];
+}
+
+- (BOOL)userHasRatedCurrentVersion {
+    return [[NSUserDefaults standardUserDefaults] boolForKey:kAppiraterRatedCurrentVersion];
+}
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-implementations"
++ (void)appLaunched {
+	[Appirater appLaunched:YES];
+}
+#pragma GCC diagnostic pop
+
++ (void)appLaunched:(BOOL)canPromptForRating {
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0),
+                   ^{
+                       Appirater *a = [Appirater sharedInstance];
+                       if (_debug) {
+                           dispatch_async(dispatch_get_main_queue(),
+                                          ^{
+                                              [a showRatingAlert];
+                                          });
+                       } else {
+                           [a incrementAndRate:canPromptForRating]; 
+                       }
+                   });
+}
+
+- (void)hideRatingAlert {
+	if (self.ratingAlert.visible) {
+		if (_debug)
+			NSLog(@"APPIRATER Hiding Alert");
+		[self.ratingAlert dismissWithClickedButtonIndex:-1 animated:NO];
+	}	
+}
+
++ (void)appWillResignActive {
+	if (_debug)
+		NSLog(@"APPIRATER appWillResignActive");
+	[[Appirater sharedInstance] hideRatingAlert];
+}
+
++ (void)appEnteredForeground:(BOOL)canPromptForRating {
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0),
+                   ^{
+                       [[Appirater sharedInstance] incrementAndRate:canPromptForRating];
+                   });
+}
+
++ (void)userDidSignificantEvent:(BOOL)canPromptForRating {
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0),
+                   ^{
+                       [[Appirater sharedInstance] incrementSignificantEventAndRate:canPromptForRating];
+                   });
+}
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-implementations"
++ (void)showPrompt {
+  [Appirater tryToShowPrompt];
+}
+#pragma GCC diagnostic pop
+
++ (void)tryToShowPrompt {
+  [[Appirater sharedInstance] showPromptWithChecks:true
+                            displayRateLaterButton:true];
+}
+
++ (void)forceShowPrompt:(BOOL)displayRateLaterButton {
+  [[Appirater sharedInstance] showPromptWithChecks:false
+                            displayRateLaterButton:displayRateLaterButton];
+}
+
+- (void)showPromptWithChecks:(BOOL)withChecks
+      displayRateLaterButton:(BOOL)displayRateLaterButton {
+  if (withChecks == NO || [self ratingAlertIsAppropriate]) {
+    [self showRatingAlert:displayRateLaterButton];
+  }
+}
+
++ (id)getRootViewController {
+    UIWindow *window = [[UIApplication sharedApplication] keyWindow];
+    if (window.windowLevel != UIWindowLevelNormal) {
+        NSArray *windows = [[UIApplication sharedApplication] windows];
+        for(window in windows) {
+            if (window.windowLevel == UIWindowLevelNormal) {
+                break;
+            }
+        }
+    }
+    
+    return [Appirater iterateSubViewsForViewController:window]; // iOS 8+ deep traverse
+}
+
++ (id)iterateSubViewsForViewController:(UIView *) parentView {
+    for (UIView *subView in [parentView subviews]) {
+        UIResponder *responder = [subView nextResponder];
+        if([responder isKindOfClass:[UIViewController class]]) {
+            return [self topMostViewController: (UIViewController *) responder];
+        }
+        id found = [Appirater iterateSubViewsForViewController:subView];
+        if( nil != found) {
+            return found;
+        }
+    }
+    return nil;
+}
+
++ (UIViewController *) topMostViewController: (UIViewController *) controller {
+	BOOL isPresenting = NO;
+	do {
+		// this path is called only on iOS 6+, so -presentedViewController is fine here.
+		UIViewController *presented = [controller presentedViewController];
+		isPresenting = presented != nil;
+		if(presented != nil) {
+			controller = presented;
+		}
+		
+	} while (isPresenting);
+	
+	return controller;
+}
+
++ (void)rateApp {
+	
+	NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
+	[userDefaults setBool:YES forKey:kAppiraterRatedCurrentVersion];
+	[userDefaults synchronize];
+
+	//Use the in-app StoreKit view if available (iOS 6) and imported. This works in the simulator.
+	if (![Appirater sharedInstance].openInAppStore && NSStringFromClass([SKStoreProductViewController class]) != nil) {
+		
+		SKStoreProductViewController *storeViewController = [[SKStoreProductViewController alloc] init];
+		NSNumber *appId = [NSNumber numberWithInteger:_appId.integerValue];
+		[storeViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier:appId} completionBlock:nil];
+		storeViewController.delegate = self.sharedInstance;
+        
+        id <AppiraterDelegate> delegate = self.sharedInstance.delegate;
+		if ([delegate respondsToSelector:@selector(appiraterWillPresentModalView:animated:)]) {
+			[delegate appiraterWillPresentModalView:self.sharedInstance animated:_usesAnimation];
+		}
+		[[self getRootViewController] presentViewController:storeViewController animated:_usesAnimation completion:^{
+			[self setModalOpen:YES];
+			//Temporarily use a black status bar to match the StoreKit view.
+			[self setStatusBarStyle:[UIApplication sharedApplication].statusBarStyle];
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
+			[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent animated:_usesAnimation];
+#endif
+		}];
+	
+	//Use the standard openUrl method if StoreKit is unavailable.
+	} else {
+		
+		#if TARGET_IPHONE_SIMULATOR
+		NSLog(@"APPIRATER NOTE: iTunes App Store is not supported on the iOS simulator. Unable to open App Store page.");
+		#else
+		NSString *reviewURL = [templateReviewURL stringByReplacingOccurrencesOfString:@"APP_ID" withString:[NSString stringWithFormat:@"%@", _appId]];
+
+		// iOS 7 needs a different templateReviewURL @see https://github.com/arashpayan/appirater/issues/131
+        // Fixes condition @see https://github.com/arashpayan/appirater/issues/205
+		if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0 && [[[UIDevice currentDevice] systemVersion] floatValue] < 8.0) {
+			reviewURL = [templateReviewURLiOS7 stringByReplacingOccurrencesOfString:@"APP_ID" withString:[NSString stringWithFormat:@"%@", _appId]];
+		}
+        // iOS 8 needs a different templateReviewURL also @see https://github.com/arashpayan/appirater/issues/182
+        else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
+        {
+            reviewURL = [templateReviewURLiOS8 stringByReplacingOccurrencesOfString:@"APP_ID" withString:[NSString stringWithFormat:@"%@", _appId]];
+        }
+
+		[[UIApplication sharedApplication] openURL:[NSURL URLWithString:reviewURL]];
+		#endif
+	}
+}
+
+- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
+	NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
+    
+    id <AppiraterDelegate> delegate = _delegate;
+	
+	switch (buttonIndex) {
+		case 0:
+		{
+			// they don't want to rate it
+			[userDefaults setBool:YES forKey:kAppiraterDeclinedToRate];
+			[userDefaults synchronize];
+			if(delegate && [delegate respondsToSelector:@selector(appiraterDidDeclineToRate:)]){
+				[delegate appiraterDidDeclineToRate:self];
+			}
+			break;
+		}
+		case 1:
+		{
+			// they want to rate it
+			[Appirater rateApp];
+			if(delegate&& [delegate respondsToSelector:@selector(appiraterDidOptToRate:)]){
+				[delegate appiraterDidOptToRate:self];
+			}
+			break;
+		}
+		case 2:
+			// remind them later
+			[userDefaults setDouble:[[NSDate date] timeIntervalSince1970] forKey:kAppiraterReminderRequestDate];
+			[userDefaults synchronize];
+			if(delegate && [delegate respondsToSelector:@selector(appiraterDidOptToRemindLater:)]){
+				[delegate appiraterDidOptToRemindLater:self];
+			}
+			break;
+		default:
+			break;
+	}
+}
+
+//Delegate call from the StoreKit view.
+- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {
+	[Appirater closeModal];
+}
+
+//Close the in-app rating (StoreKit) view and restore the previous status bar style.
++ (void)closeModal {
+	if (_modalOpen) {
+		[[UIApplication sharedApplication]setStatusBarStyle:_statusBarStyle animated:_usesAnimation];
+		BOOL usedAnimation = _usesAnimation;
+		[self setModalOpen:NO];
+		
+		// get the top most controller (= the StoreKit Controller) and dismiss it
+		UIViewController *presentingController = [UIApplication sharedApplication].keyWindow.rootViewController;
+		presentingController = [self topMostViewController: presentingController];
+		[presentingController dismissViewControllerAnimated:_usesAnimation completion:^{
+            id <AppiraterDelegate> delegate = self.sharedInstance.delegate;
+			if ([delegate respondsToSelector:@selector(appiraterDidDismissModalView:animated:)]) {
+				[delegate appiraterDidDismissModalView:(Appirater *)self animated:usedAnimation];
+			}
+		}];
+		[self.class setStatusBarStyle:(UIStatusBarStyle)nil];
+	}
+}
+
+@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/Appirater/AppiraterDelegate.h	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,23 @@
+//
+//  AppiraterDelegate.h
+//  Banana Stand
+//
+//  Created by Robert Haining on 9/25/12.
+//  Copyright (c) 2012 News.me. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class Appirater;
+
+@protocol AppiraterDelegate <NSObject>
+
+@optional
+-(BOOL)appiraterShouldDisplayAlert:(Appirater *)appirater;
+-(void)appiraterDidDisplayAlert:(Appirater *)appirater;
+-(void)appiraterDidDeclineToRate:(Appirater *)appirater;
+-(void)appiraterDidOptToRate:(Appirater *)appirater;
+-(void)appiraterDidOptToRemindLater:(Appirater *)appirater;
+-(void)appiraterWillPresentModalView:(Appirater *)appirater animated:(BOOL)animated;
+-(void)appiraterDidDismissModalView:(Appirater *)appirater animated:(BOOL)animated;
+@end
--- a/project_files/HedgewarsMobile/Classes/CreationChamber.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/CreationChamber.m	Mon Nov 09 18:37:57 2015 +0100
@@ -57,7 +57,7 @@
         [[NSFileManager defaultManager] removeItemAtPath:SCHEMES_DIRECTORY() error:NULL];
     NSArray *schemeNames = [[NSArray alloc] initWithObjects:@"Default",@"Pro Mode",@"Shoppa",@"Clean Slate",
                             @"Minefield",@"Barrel Mayhem",@"Tunnel Hogs",@"Fort Mode",@"Timeless",
-                            @"Thinking with Portals",@"King Mode",nil];
+                            @"Thinking with Portals",@"King Mode",@"Construction Mode",nil];
     index = 0;
     for (NSString *name in schemeNames)
         [self createSchemeNamed:name ofType:index++];
@@ -65,7 +65,7 @@
 
     // WEAPONS - always overwrite as merge is not needed (missing weaps are 0ed automatically)
     NSArray *weaponNames = [[NSArray alloc] initWithObjects:@"Default",@"Crazy",@"Pro Mode",@"Shoppa",@"Clean Slate",
-                            @"Minefield",@"Thinking with Portals",nil];
+                            @"Minefield",@"Thinking with Portals",@"One of Everything",@"Highlander",@"Construction Mode",@"Shoppa Pro",nil];
     index = 0;
     for (NSString *name in weaponNames)
         [self createWeaponNamed:name ofType:index++];
@@ -241,6 +241,30 @@
             delay = [[NSString alloc] initWithBytes:AMMOLINE_PORTALS_DELAY length:ammolineSize encoding:NSUTF8StringEncoding];
             crate = [[NSString alloc] initWithBytes:AMMOLINE_PORTALS_CRATE length:ammolineSize encoding:NSUTF8StringEncoding];
             break;
+        case 7:  //one of everything
+            qt = [[NSString alloc] initWithBytes:AMMOLINE_ONEEVERY_QT length:ammolineSize encoding:NSUTF8StringEncoding];
+            prob = [[NSString alloc] initWithBytes:AMMOLINE_ONEEVERY_PROB length:ammolineSize encoding:NSUTF8StringEncoding];
+            delay = [[NSString alloc] initWithBytes:AMMOLINE_ONEEVERY_DELAY length:ammolineSize encoding:NSUTF8StringEncoding];
+            crate = [[NSString alloc] initWithBytes:AMMOLINE_ONEEVERY_CRATE length:ammolineSize encoding:NSUTF8StringEncoding];
+            break;
+        case 8:  //highlander
+            qt = [[NSString alloc] initWithBytes:AMMOLINE_HIGHLANDER_QT length:ammolineSize encoding:NSUTF8StringEncoding];
+            prob = [[NSString alloc] initWithBytes:AMMOLINE_HIGHLANDER_PROB length:ammolineSize encoding:NSUTF8StringEncoding];
+            delay = [[NSString alloc] initWithBytes:AMMOLINE_HIGHLANDER_DELAY length:ammolineSize encoding:NSUTF8StringEncoding];
+            crate = [[NSString alloc] initWithBytes:AMMOLINE_HIGHLANDER_CRATE length:ammolineSize encoding:NSUTF8StringEncoding];
+            break;
+        case 9:  //construction mode
+            qt = [[NSString alloc] initWithBytes:AMMOLINE_CONSTRUCTION_QT length:ammolineSize encoding:NSUTF8StringEncoding];
+            prob = [[NSString alloc] initWithBytes:AMMOLINE_CONSTRUCTION_PROB length:ammolineSize encoding:NSUTF8StringEncoding];
+            delay = [[NSString alloc] initWithBytes:AMMOLINE_CONSTRUCTION_DELAY length:ammolineSize encoding:NSUTF8StringEncoding];
+            crate = [[NSString alloc] initWithBytes:AMMOLINE_CONSTRUCTION_CRATE length:ammolineSize encoding:NSUTF8StringEncoding];
+            break;
+        case 10:  //shoppa pro
+            qt = [[NSString alloc] initWithBytes:AMMOLINE_SHOPPAPRO_QT length:ammolineSize encoding:NSUTF8StringEncoding];
+            prob = [[NSString alloc] initWithBytes:AMMOLINE_SHOPPAPRO_PROB length:ammolineSize encoding:NSUTF8StringEncoding];
+            delay = [[NSString alloc] initWithBytes:AMMOLINE_SHOPPAPRO_DELAY length:ammolineSize encoding:NSUTF8StringEncoding];
+            crate = [[NSString alloc] initWithBytes:AMMOLINE_SHOPPAPRO_CRATE length:ammolineSize encoding:NSUTF8StringEncoding];
+            break;
     }
 
     NSDictionary *theWeapon = [[NSDictionary alloc] initWithObjectsAndKeys: qt,@"ammostore_initialqt",
@@ -303,6 +327,7 @@
             [basicArray replaceObjectAtIndex:9 withObject:[NSNumber numberWithInt:25]];
             [basicArray replaceObjectAtIndex:11 withObject:[NSNumber numberWithInt:0]];
             [basicArray replaceObjectAtIndex:13 withObject:[NSNumber numberWithInt:0]];
+            [basicArray replaceObjectAtIndex:15 withObject:[NSNumber numberWithInt:8]];
             [gamemodArray replaceObjectAtIndex:1 withObject:[NSNumber numberWithBool:YES]];
             [gamemodArray replaceObjectAtIndex:2 withObject:[NSNumber numberWithBool:YES]];
             [gamemodArray replaceObjectAtIndex:11 withObject:[NSNumber numberWithBool:YES]];
@@ -342,6 +367,7 @@
             [basicArray replaceObjectAtIndex:11 withObject:[NSNumber numberWithInt:10]];
             [basicArray replaceObjectAtIndex:12 withObject:[NSNumber numberWithInt:10]];
             [basicArray replaceObjectAtIndex:13 withObject:[NSNumber numberWithInt:10]];
+            [basicArray replaceObjectAtIndex:15 withObject:[NSNumber numberWithInt:4]];
             [gamemodArray replaceObjectAtIndex:2 withObject:[NSNumber numberWithBool:YES]];
             [gamemodArray replaceObjectAtIndex:11 withObject:[NSNumber numberWithBool:YES]];
             [gamemodArray replaceObjectAtIndex:14 withObject:[NSNumber numberWithBool:YES]];
@@ -373,6 +399,7 @@
             [basicArray replaceObjectAtIndex:10 withObject:[NSNumber numberWithInt:4]];
             [basicArray replaceObjectAtIndex:11 withObject:[NSNumber numberWithInt:5]];
             [basicArray replaceObjectAtIndex:13 withObject:[NSNumber numberWithInt:5]];
+            [basicArray replaceObjectAtIndex:15 withObject:[NSNumber numberWithInt:4]];
             [gamemodArray replaceObjectAtIndex:9 withObject:[NSNumber numberWithBool:YES]];
             [gamemodArray replaceObjectAtIndex:11 withObject:[NSNumber numberWithBool:YES]];
             break;
@@ -380,6 +407,15 @@
             [gamemodArray replaceObjectAtIndex:11 withObject:[NSNumber numberWithBool:YES]];
             [gamemodArray replaceObjectAtIndex:12 withObject:[NSNumber numberWithBool:YES]];
             break;
+        case 11: // construction mode
+            [basicArray replaceObjectAtIndex:11 withObject:[NSNumber numberWithInt:0]];
+            [basicArray replaceObjectAtIndex:13 withObject:[NSNumber numberWithInt:0]];
+            [gamemodArray replaceObjectAtIndex:11 withObject:[NSNumber numberWithBool:YES]];
+            [gamemodArray replaceObjectAtIndex:15 withObject:[NSNumber numberWithBool:YES]];
+            [gamemodArray replaceObjectAtIndex:16 withObject:[NSNumber numberWithBool:YES]];
+            [gamemodArray replaceObjectAtIndex:18 withObject:[NSNumber numberWithBool:YES]];
+            [gamemodArray replaceObjectAtIndex:20 withObject:[NSNumber numberWithBool:YES]];
+            break;
     }
 
     NSMutableDictionary *theScheme = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
--- a/project_files/HedgewarsMobile/Classes/EditableCellView.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/EditableCellView.m	Mon Nov 09 18:37:57 2015 +0100
@@ -18,7 +18,7 @@
 
 
 #import "EditableCellView.h"
-
+#import "UITableViewCell+FindTable.h"
 
 @implementation EditableCellView
 @synthesize delegate, textField, titleLabel, minimumCharacters, maximumCharacters, respectEditing, oldValue;
@@ -103,13 +103,13 @@
 -(BOOL) textFieldShouldBeginEditing:(UITextField *)aTextField {
     return (delegate != nil) &&
            [delegate respondsToSelector:@selector(saveTextFieldValue:withTag:)] &&
-           (respectEditing) ? ((UITableView*)[self superview]).editing : YES;
+           (respectEditing) ? [self findTable].editing : YES;
 }
 
 // the textfield is being modified, update the navigation controller
 -(void) textFieldDidBeginEditing:(UITextField *)aTextField{
     // don't interact with table below
-    ((UITableView*)[self superview]).scrollEnabled = NO;
+    [self findTable].scrollEnabled = NO;
 
     self.oldValue = self.textField.text;
 
@@ -147,9 +147,9 @@
         [self save:aTextField];
 
     // restores default behaviour on caller
-    ((UITableView*)[self superview]).scrollEnabled = YES;
-    [(UITableViewController *)delegate navigationItem].rightBarButtonItem = [(UITableViewController *)delegate navigationItem].backBarButtonItem;
-    [(UITableViewController *)delegate navigationItem].leftBarButtonItem = nil;
+    [self findTable].scrollEnabled = YES;
+    [(UITableViewController *)delegate navigationItem].leftBarButtonItem = [(UITableViewController *)delegate navigationItem].backBarButtonItem;
+    [(UITableViewController *)delegate navigationItem].rightBarButtonItem = nil;
 }
 
 #pragma mark -
--- a/project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.m	Mon Nov 09 18:37:57 2015 +0100
@@ -96,8 +96,8 @@
     for (int i = 0; i < numberOfPlayingHogs; i++) {
         NSDictionary *hog = [hogs objectAtIndex:i];
 
-        NSString *hogLevelHealthAndName = [[NSString alloc] initWithFormat:@"eaddhh %@ %d %@",
-                                           [hog objectForKey:@"level"], initialHealth, [hog objectForKey:@"hogname"]];
+        NSString *hogLevelHealthAndName = [[NSString alloc] initWithFormat:@"eaddhh %@ %ld %@",
+                                           [hog objectForKey:@"level"], (long)initialHealth, [hog objectForKey:@"hogname"]];
         [self sendToEngine: hogLevelHealthAndName];
         [hogLevelHealthAndName release];
 
@@ -197,7 +197,7 @@
 
 // wrapper that computes the length of the message and then sends the command string, saving the command on a file
 -(int) sendToEngine:(NSString *)string {
-    uint8_t length = [string length];
+    uint8_t length = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
 
     [self dumpRawData:[string UTF8String] ofSize:length];
     SDLNet_TCP_Send(csd, &length, 1);
@@ -206,7 +206,7 @@
 
 // wrapper that computes the length of the message and then sends the command string, skipping file writing
 -(int) sendToEngineNoSave:(NSString *)string {
-    uint8_t length = [string length];
+    uint8_t length = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
 
     SDLNet_TCP_Send(csd, &length, 1);
     return SDLNet_TCP_Send(csd, [string UTF8String], length);
@@ -214,7 +214,8 @@
 
 // this is launched as thread and handles all IPC with engine
 -(void) engineProtocol:(id) object {
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+    @autoreleasepool {
+    
     NSDictionary *gameConfig = (NSDictionary *)object;
     NSMutableArray *statsArray = nil;
     TCPsocket sd;
@@ -240,7 +241,7 @@
 
     // Open a connection with the IP provided (listen on the host's port)
     if (!(sd = SDLNet_TCP_Open(&ip)) && !clientQuit) {
-        DLog(@"SDLNet_TCP_Open: %s %\n", SDLNet_GetError(), self.enginePort);
+        DLog(@"SDLNet_TCP_Open: %s %d\n", SDLNet_GetError(), self.enginePort);
         clientQuit = YES;
     }
 
@@ -340,19 +341,25 @@
                 NSString *tempStr = [NSString stringWithUTF8String:&buffer[2]];
                 NSArray *info = [tempStr componentsSeparatedByString:@" "];
                 NSString *arg = [info objectAtIndex:0];
-                int index = [arg length] + 3;
+                int index = [arg lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 3;
                 switch (buffer[1]) {
                     case 'r':           // winning team
                         [statsArray insertObject:[NSString stringWithUTF8String:&buffer[2]] atIndex:1];
                         break;
                     case 'D':           // best shot
-                        [statsArray addObject:[NSString stringWithFormat:@"The best shot award won by %s (with %@ points)", &buffer[index], arg]];
+                    {
+                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
+                        [statsArray addObject:[NSString stringWithFormat:NSLocalizedString(@"The best shot award won by %@ (with %@ points)", nil), hogName, arg]];
                         break;
+                    }
                     case 'k':           // best hedgehog
-                        [statsArray addObject:[NSString stringWithFormat:@"The best killer is %s with %@ kill(s) in a turn", &buffer[index], arg]];
+                    {
+                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
+                        [statsArray addObject:[NSString stringWithFormat:NSLocalizedString(@"The best killer is %@ with %@ kill(s) in a turn", nil), hogName, arg]];
                         break;
+                    }
                     case 'K':           // number of hogs killed
-                        [statsArray addObject:[NSString stringWithFormat:@"%@ hedgehog(s) were killed during this round", arg]];
+                        [statsArray addObject:[NSString stringWithFormat:NSLocalizedString(@"%@ hedgehog(s) were killed during this round", nil), arg]];
                         break;
                     case 'H':           // team health/graph
                         break;
@@ -363,14 +370,23 @@
                         [[statsArray objectAtIndex:0] addObject:tempStr];
                         break;
                     case 's':           // self damage
-                        [statsArray addObject:[NSString stringWithFormat:@"%s thought it's good to shoot his own hedgehogs with %@ points", &buffer[index], arg]];
+                    {
+                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
+                        [statsArray addObject:[NSString stringWithFormat:NSLocalizedString(@"%@ thought it's good to shoot his own hedgehogs with %@ points", nil), hogName, arg]];
                         break;
+                    }
                     case 'S':           // friendly fire
-                        [statsArray addObject:[NSString stringWithFormat:@"%s killed %@ of his own hedgehogs", &buffer[index], arg]];
+                    {
+                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
+                        [statsArray addObject:[NSString stringWithFormat:NSLocalizedString(@"%@ killed %@ of his own hedgehogs", nil), hogName, arg]];
                         break;
+                    }
                     case 'B':           // turn skipped
-                        [statsArray addObject:[NSString stringWithFormat:@"%s was scared and skipped turn %@ times", &buffer[index], arg]];
+                    {
+                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
+                        [statsArray addObject:[NSString stringWithFormat:NSLocalizedString(@"%@ was scared and skipped turn %@ times", nil), hogName, arg]];
                         break;
+                    }
                     default:
                         DLog(@"Unhandled stat message, see statsPage.cpp");
                         break;
@@ -403,8 +419,9 @@
     [HWUtils freePort:self.enginePort];
     SDLNet_TCP_Close(csd);
     SDLNet_Quit();
+    
+    }
 
-    [pool release];
     // Invoking this method should be avoided as it does not give your thread a chance
     // to clean up any resources it allocated during its execution.
     //[NSThread exit];
--- a/project_files/HedgewarsMobile/Classes/ExtraCategories.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/ExtraCategories.h	Mon Nov 09 18:37:57 2015 +0100
@@ -50,6 +50,9 @@
 
 -(id) initWithFrame:(CGRect) frame andTitle:(NSString *)title;
 
+- (void)applyBlackQuickStyle;
+- (void)applyDarkBlueQuickStyle;
+
 @end
 
 
--- a/project_files/HedgewarsMobile/Classes/ExtraCategories.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/ExtraCategories.m	Mon Nov 09 18:37:57 2015 +0100
@@ -27,17 +27,18 @@
 
 -(CGFloat) safeScale {
     CGFloat theScale = 1.0f;
-    if ([self respondsToSelector:@selector(scale)])
-         theScale = [self scale];
+//    if ([self respondsToSelector:@selector(scale)])
+//         theScale = [self scale];
     return theScale;
 }
 
 -(CGRect) safeBounds {
-    CGRect original = [self bounds];
-    if (IS_ON_PORTRAIT())
-        return original;
-    else
-        return CGRectMake(original.origin.x, original.origin.y, original.size.height, original.size.width);
+    return [self bounds];
+//    CGRect original = [self bounds];
+//    if (IS_ON_PORTRAIT())
+//        return original;
+//    else
+//        return CGRectMake(original.origin.x, original.origin.y, original.size.height, original.size.width);
 }
 
 @end
@@ -99,17 +100,35 @@
 -(id) initWithFrame:(CGRect) frame andTitle:(NSString *)title {
     [self initWithFrame:frame];
     [self setTitle:title forState:UIControlStateNormal];
+    [self applyBlackQuickStyle];
+
+    return self;
+}
+
+- (void)applyBlackQuickStyle
+{
     [self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
     [self setTitleColor:[UIColor grayColor] forState:UIControlStateHighlighted];
     self.titleLabel.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]];
     self.backgroundColor = [UIColor blackColorTransparent];
-
-    [self.layer setBorderWidth:1];
+    
+    [self.layer setBorderWidth:1.0f];
     [self.layer setBorderColor:[[UIColor darkYellowColor] CGColor]];
     [self.layer setCornerRadius:9.0f];
     [self.layer setMasksToBounds:YES];
+}
 
-    return self;
+- (void)applyDarkBlueQuickStyle
+{
+    [self setTitleColor:[UIColor darkYellowColor] forState:UIControlStateNormal];
+    [self setTitleColor:[UIColor grayColor] forState:UIControlStateHighlighted];
+    self.titleLabel.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]];
+    self.backgroundColor = [UIColor darkBlueColorTransparent];
+    
+    [self.layer setBorderWidth:2.0f];
+    [self.layer setBorderColor:[[UIColor darkYellowColor] CGColor]];
+    [self.layer setCornerRadius:9.0f];
+    [self.layer setMasksToBounds:YES];
 }
 
 @end
--- a/project_files/HedgewarsMobile/Classes/FlagsViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/FlagsViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -131,10 +131,10 @@
 #pragma mark -
 #pragma mark Table view delegate
 -(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    int newRow = [indexPath row];
-    int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
-    int newSection = [indexPath section];
-    int oldSection = (lastIndexPath != nil) ? [lastIndexPath section] : -1;
+    NSInteger newRow = [indexPath row];
+    NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
+    NSInteger newSection = [indexPath section];
+    NSInteger oldSection = (lastIndexPath != nil) ? [lastIndexPath section] : -1;
 
     if (newRow != oldRow || newSection != oldSection) {
         NSString *flag = nil;
--- a/project_files/HedgewarsMobile/Classes/FortsViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/FortsViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -38,11 +38,13 @@
 
     NSArray *directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:FORTS_DIRECTORY() error:NULL];
     NSMutableArray *filteredContents = [[NSMutableArray alloc] initWithCapacity:([directoryContents count] / IMGNUM_PER_FORT)];
-    // we need to remove the double entries and the L.png suffix
-    for (NSUInteger i = 0; i < [directoryContents count]; i++) {
-        if (i % IMGNUM_PER_FORT == IMGNUM_PER_FORT-1) {
-            NSString *currentName = [directoryContents objectAtIndex:i];
-            NSString *correctName = [currentName substringToIndex:([currentName length] - 5)];
+    // we assume here that fort's images has one image with the 'L.png' suffix and we remove this suffix to get the correct name
+    for (NSUInteger i = 0; i < [directoryContents count]; i++)
+    {
+        NSString *currentName = [directoryContents objectAtIndex:i];
+        if ([currentName rangeOfString:@"L.png"].location != NSNotFound)
+        {
+            NSString *correctName = [currentName stringByReplacingOccurrencesOfString:@"L.png" withString:@""];
             [filteredContents addObject:correctName];
         }
     }
@@ -106,8 +108,8 @@
 #pragma mark -
 #pragma mark Table view delegate
 -(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    int newRow = [indexPath row];
-    int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
+    NSInteger newRow = [indexPath row];
+    NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
 
     if (newRow != oldRow) {
         // if the two selected rows differ update data on the hog dictionary and reload table content
--- a/project_files/HedgewarsMobile/Classes/GameConfigViewController-iPad.xib	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/GameConfigViewController-iPad.xib	Mon Nov 09 18:37:57 2015 +0100
@@ -1,34 +1,28 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="7.10">
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00">
 	<data>
-		<int key="IBDocument.SystemTarget">1056</int>
-		<string key="IBDocument.SystemVersion">10K549</string>
-		<string key="IBDocument.InterfaceBuilderVersion">823</string>
-		<string key="IBDocument.AppKitVersion">1038.36</string>
-		<string key="IBDocument.HIToolboxVersion">461.00</string>
+		<int key="IBDocument.SystemTarget">1792</int>
+		<string key="IBDocument.SystemVersion">14E46</string>
+		<string key="IBDocument.InterfaceBuilderVersion">7706</string>
+		<string key="IBDocument.AppKitVersion">1348.17</string>
+		<string key="IBDocument.HIToolboxVersion">758.70</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">132</string>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="2"/>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">7703</string>
 		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys" id="0">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-			<bool key="EncodedWithXMLCoder">YES</bool>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBProxyObject</string>
+			<string>IBUIButton</string>
+			<string>IBUIImageView</string>
+			<string>IBUISlider</string>
+			<string>IBUIView</string>
+			<string>IBUIViewController</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
 			<object class="IBProxyObject" id="841351856">
 				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
 				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
@@ -38,10 +32,9 @@
 				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
 			</object>
 			<object class="IBUIView" id="766721923">
-				<reference key="NSNextResponder"/>
-				<int key="NSvFlags">292</int>
-				<object class="NSMutableArray" key="NSSubviews">
-					<bool key="EncodedWithXMLCoder">YES</bool>
+				<nil key="NSNextResponder"/>
+				<int key="NSvFlags">256</int>
+				<array class="NSMutableArray" key="NSSubviews">
 					<object class="IBUIImageView" id="109536142">
 						<reference key="NSNextResponder" ref="766721923"/>
 						<int key="NSvFlags">274</int>
@@ -66,7 +59,7 @@
 						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
 						<object class="NSCustomResource" key="IBUIImage">
 							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">title~iphone.png</string>
+							<string key="NSResourceName">title.png</string>
 						</object>
 					</object>
 					<object class="IBUIButton" id="410546531">
@@ -79,19 +72,14 @@
 						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
 						<int key="IBUIContentHorizontalAlignment">0</int>
 						<int key="IBUIContentVerticalAlignment">0</int>
-						<object class="NSFont" key="IBUIFont" id="243320520">
-							<string key="NSName">Helvetica-Bold</string>
-							<double key="NSSize">15</double>
-							<int key="NSfFlags">16</int>
+						<object class="NSColor" key="IBUINormalTitleColor">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
 						</object>
 						<object class="NSColor" key="IBUIHighlightedTitleColor" id="473179629">
 							<int key="NSColorSpace">3</int>
 							<bytes key="NSWhite">MQA</bytes>
 						</object>
-						<object class="NSColor" key="IBUINormalTitleColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
-						</object>
 						<object class="NSColor" key="IBUINormalTitleShadowColor" id="702849038">
 							<int key="NSColorSpace">3</int>
 							<bytes key="NSWhite">MC41AA</bytes>
@@ -100,6 +88,17 @@
 							<string key="NSClassName">NSImage</string>
 							<string key="NSResourceName">startGameButton.png</string>
 						</object>
+						<object class="IBUIFontDescription" key="IBUIFontDescription" id="654921024">
+							<string key="name">Helvetica-Bold</string>
+							<string key="family">Helvetica</string>
+							<int key="traits">2</int>
+							<double key="pointSize">15</double>
+						</object>
+						<object class="NSFont" key="IBUIFont" id="243320520">
+							<string key="NSName">Helvetica-Bold</string>
+							<double key="NSSize">15</double>
+							<int key="NSfFlags">16</int>
+						</object>
 					</object>
 					<object class="IBUIButton" id="495854712">
 						<reference key="NSNextResponder" ref="766721923"/>
@@ -110,17 +109,18 @@
 						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
 						<int key="IBUIContentHorizontalAlignment">0</int>
 						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="243320520"/>
-						<reference key="IBUIHighlightedTitleColor" ref="473179629"/>
 						<object class="NSColor" key="IBUINormalTitleColor">
 							<int key="NSColorSpace">1</int>
 							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
 						</object>
+						<reference key="IBUIHighlightedTitleColor" ref="473179629"/>
 						<reference key="IBUINormalTitleShadowColor" ref="702849038"/>
 						<object class="NSCustomResource" key="IBUINormalImage">
 							<string key="NSClassName">NSImage</string>
 							<string key="NSResourceName">backButton.png</string>
 						</object>
+						<reference key="IBUIFontDescription" ref="654921024"/>
+						<reference key="IBUIFont" ref="243320520"/>
 					</object>
 					<object class="IBUIButton" id="688316814">
 						<reference key="NSNextResponder" ref="766721923"/>
@@ -132,17 +132,18 @@
 						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
 						<int key="IBUIContentHorizontalAlignment">0</int>
 						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="243320520"/>
-						<reference key="IBUIHighlightedTitleColor" ref="473179629"/>
 						<object class="NSColor" key="IBUINormalTitleColor">
 							<int key="NSColorSpace">1</int>
 							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
 						</object>
+						<reference key="IBUIHighlightedTitleColor" ref="473179629"/>
 						<reference key="IBUINormalTitleShadowColor" ref="702849038"/>
 						<object class="NSCustomResource" key="IBUINormalImage">
 							<string key="NSClassName">NSImage</string>
 							<string key="NSResourceName">helpButton.png</string>
 						</object>
+						<reference key="IBUIFontDescription" ref="654921024"/>
+						<reference key="IBUIFont" ref="243320520"/>
 					</object>
 					<object class="IBUIView" id="123574818">
 						<reference key="NSNextResponder" ref="766721923"/>
@@ -179,27 +180,47 @@
 						<float key="IBUIValue">0.05000000074505806</float>
 						<float key="IBUIMaxValue">0.05000000074505806</float>
 					</object>
-				</object>
+				</array>
 				<string key="NSFrameSize">{1024, 768}</string>
-				<reference key="NSSuperview"/>
 				<reference key="IBUIBackgroundColor" ref="473179629"/>
 				<bool key="IBUIClipsSubviews">YES</bool>
 				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
+					<int key="IBUIInterfaceOrientation">3</int>
 					<int key="interfaceOrientation">3</int>
 				</object>
+				<object class="IBUIScreenMetrics" key="IBUISimulatedDestinationMetrics" id="465546060">
+					<string key="IBUISimulatedSizeMetricsClass">IBUIScreenMetrics</string>
+					<string key="IBUITargetRuntime">IBIPadFramework</string>
+					<string key="IBUIDisplayName">iPad Full Screen</string>
+					<object class="NSMutableDictionary" key="IBUINormalizedOrientationToSizeMap">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<array key="dict.sortedKeys">
+							<integer value="1"/>
+							<integer value="3"/>
+						</array>
+						<array key="dict.values">
+							<string>{768, 1024}</string>
+							<string>{1024, 768}</string>
+						</array>
+					</object>
+					<int key="IBUIType">1</int>
+				</object>
 				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
 			</object>
 			<object class="IBUIViewController" id="1023023363">
 				<bool key="IBUIAutoresizesArchivedViewToFullSize">NO</bool>
 				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics" id="158576700">
+					<int key="IBUIInterfaceOrientation">3</int>
 					<int key="interfaceOrientation">3</int>
 				</object>
+				<reference key="IBUISimulatedDestinationMetrics" ref="465546060"/>
 				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
 				<bool key="IBUIHorizontal">YES</bool>
 			</object>
 			<object class="IBUIViewController" id="487135035">
 				<bool key="IBUIAutoresizesArchivedViewToFullSize">NO</bool>
 				<reference key="IBUISimulatedOrientationMetrics" ref="158576700"/>
+				<reference key="IBUISimulatedDestinationMetrics" ref="465546060"/>
 				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
 				<bool key="IBUIHorizontal">YES</bool>
 			</object>
@@ -207,13 +228,13 @@
 				<bool key="IBUIAutoresizesArchivedViewToFullSize">NO</bool>
 				<string key="IBUINibName">MapConfigViewController-iPad</string>
 				<reference key="IBUISimulatedOrientationMetrics" ref="158576700"/>
+				<reference key="IBUISimulatedDestinationMetrics" ref="465546060"/>
 				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
 				<bool key="IBUIHorizontal">YES</bool>
 			</object>
-		</object>
+		</array>
 		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
+			<array key="connectionRecords">
 				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchOutletConnection" key="connection">
 						<string key="label">view</string>
@@ -223,6 +244,47 @@
 					<int key="connectionID">3</int>
 				</object>
 				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">teamConfigViewController</string>
+						<reference key="source" ref="841351856"/>
+						<reference key="destination" ref="487135035"/>
+					</object>
+					<int key="connectionID">45</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">schemeWeaponConfigViewController</string>
+						<reference key="source" ref="841351856"/>
+						<reference key="destination" ref="1023023363"/>
+					</object>
+					<int key="connectionID">51</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mapConfigViewController</string>
+						<reference key="source" ref="841351856"/>
+						<reference key="destination" ref="670598485"/>
+					</object>
+					<int key="connectionID">57</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">titleImage</string>
+						<reference key="source" ref="841351856"/>
+						<reference key="destination" ref="533754865"/>
+					</object>
+					<int key="connectionID">68</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">buttonPressed:</string>
+						<reference key="source" ref="410546531"/>
+						<reference key="destination" ref="841351856"/>
+						<int key="IBEventType">7</int>
+					</object>
+					<int key="connectionID">36</int>
+				</object>
+				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchEventConnection" key="connection">
 						<string key="label">buttonPressed:</string>
 						<reference key="source" ref="495854712"/>
@@ -234,15 +296,6 @@
 				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchEventConnection" key="connection">
 						<string key="label">buttonPressed:</string>
-						<reference key="source" ref="410546531"/>
-						<reference key="destination" ref="841351856"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">36</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">buttonPressed:</string>
 						<reference key="source" ref="688316814"/>
 						<reference key="destination" ref="841351856"/>
 						<int key="IBEventType">7</int>
@@ -251,14 +304,6 @@
 				</object>
 				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">teamConfigViewController</string>
-						<reference key="source" ref="841351856"/>
-						<reference key="destination" ref="487135035"/>
-					</object>
-					<int key="connectionID">45</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
 						<string key="label">view</string>
 						<reference key="source" ref="487135035"/>
 						<reference key="destination" ref="983956256"/>
@@ -275,19 +320,11 @@
 				</object>
 				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">schemeWeaponConfigViewController</string>
-						<reference key="source" ref="841351856"/>
-						<reference key="destination" ref="1023023363"/>
+						<string key="label">slider</string>
+						<reference key="source" ref="670598485"/>
+						<reference key="destination" ref="1000322445"/>
 					</object>
-					<int key="connectionID">51</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">mapConfigViewController</string>
-						<reference key="source" ref="841351856"/>
-						<reference key="destination" ref="670598485"/>
-					</object>
-					<int key="connectionID">57</int>
+					<int key="connectionID">69</int>
 				</object>
 				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchEventConnection" key="connection">
@@ -307,29 +344,12 @@
 					</object>
 					<int key="connectionID">67</int>
 				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">titleImage</string>
-						<reference key="source" ref="841351856"/>
-						<reference key="destination" ref="533754865"/>
-					</object>
-					<int key="connectionID">68</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">slider</string>
-						<reference key="source" ref="670598485"/>
-						<reference key="destination" ref="1000322445"/>
-					</object>
-					<int key="connectionID">69</int>
-				</object>
-			</object>
+			</array>
 			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
+				<array key="orderedObjects">
 					<object class="IBObjectRecord">
 						<int key="objectID">0</int>
-						<reference key="object" ref="0"/>
+						<array key="object" id="0"/>
 						<reference key="children" ref="1000"/>
 						<nil key="parent"/>
 					</object>
@@ -347,8 +367,7 @@
 					<object class="IBObjectRecord">
 						<int key="objectID">2</int>
 						<reference key="object" ref="766721923"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
+						<array class="NSMutableArray" key="children">
 							<reference ref="109536142"/>
 							<reference ref="533754865"/>
 							<reference ref="410546531"/>
@@ -357,7 +376,7 @@
 							<reference ref="123574818"/>
 							<reference ref="983956256"/>
 							<reference ref="1000322445"/>
-						</object>
+						</array>
 						<reference key="parent" ref="0"/>
 					</object>
 					<object class="IBObjectRecord">
@@ -393,17 +412,13 @@
 					<object class="IBObjectRecord">
 						<int key="objectID">44</int>
 						<reference key="object" ref="487135035"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
+						<array class="NSMutableArray" key="children"/>
 						<reference key="parent" ref="0"/>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">46</int>
 						<reference key="object" ref="983956256"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
+						<array class="NSMutableArray" key="children"/>
 						<reference key="parent" ref="766721923"/>
 						<string key="objectName">TeamConfigViewController View</string>
 					</object>
@@ -429,650 +444,52 @@
 						<reference key="parent" ref="766721923"/>
 						<string key="objectName">Filter Slider</string>
 					</object>
-				</object>
+				</array>
 			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.CustomClassName</string>
-					<string>-2.CustomClassName</string>
-					<string>2.IBEditorWindowLastContentRect</string>
-					<string>2.IBPluginDependency</string>
-					<string>30.IBPluginDependency</string>
-					<string>30.IBViewBoundsToFrameTransform</string>
-					<string>31.IBPluginDependency</string>
-					<string>31.IBViewBoundsToFrameTransform</string>
-					<string>32.IBPluginDependency</string>
-					<string>32.IBViewBoundsToFrameTransform</string>
-					<string>33.IBPluginDependency</string>
-					<string>33.IBViewBoundsToFrameTransform</string>
-					<string>34.IBPluginDependency</string>
-					<string>34.IBViewBoundsToFrameTransform</string>
-					<string>44.CustomClassName</string>
-					<string>44.IBEditorWindowLastContentRect</string>
-					<string>44.IBPluginDependency</string>
-					<string>46.IBPluginDependency</string>
-					<string>46.IBViewBoundsToFrameTransform</string>
-					<string>48.CustomClassName</string>
-					<string>48.IBEditorWindowLastContentRect</string>
-					<string>48.IBPluginDependency</string>
-					<string>49.IBPluginDependency</string>
-					<string>49.IBViewBoundsToFrameTransform</string>
-					<string>55.CustomClassName</string>
-					<string>55.IBEditorWindowLastContentRect</string>
-					<string>55.IBPluginDependency</string>
-					<string>60.CustomClassName</string>
-					<string>60.IBPluginDependency</string>
-					<string>60.IBViewBoundsToFrameTransform</string>
-				</object>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>GameConfigViewController</string>
-					<string>UIResponder</string>
-					<string>{{252, 239}, {1024, 768}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABAoAAAxLrgAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABDtQAAxGNAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABD3wAAxLqgAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABByAAAxLmAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABEbEAAxLmAAA</bytes>
-					</object>
-					<string>TeamConfigViewController</string>
-					<string>{{63, 355}, {1024, 768}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">AUOogABDOwAAA</bytes>
-					</object>
-					<string>SchemeWeaponConfigViewController</string>
-					<string>{{84, 388}, {1024, 768}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAAAAAAAAxHqAAA</bytes>
-					</object>
-					<string>MapConfigViewController</string>
-					<string>{{126, 377}, {1024, 768}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>MNEValueTrackingSlider</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">AUNRAABEMoAAA</bytes>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">GameConfigViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="30.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="31.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="32.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="33.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="34.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="44.CustomClassName">TeamConfigViewController</string>
+				<string key="44.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="46.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="48.CustomClassName">SchemeWeaponConfigViewController</string>
+				<string key="48.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="49.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="55.CustomClassName">MapConfigViewController</string>
+				<string key="55.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="60.CustomClassName">MNEValueTrackingSlider</string>
+				<string key="60.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
 			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
 			<nil key="sourceID"/>
 			<int key="maxID">69</int>
 		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">GameConfigViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="NSMutableDictionary" key="actions">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>buttonPressed:</string>
-							<string>segmentPressed:</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>id</string>
-							<string>id</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="actionInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>buttonPressed:</string>
-							<string>segmentPressed:</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBActionInfo">
-								<string key="name">buttonPressed:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">segmentPressed:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="outlets">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>mapConfigViewController</string>
-							<string>schemeWeaponConfigViewController</string>
-							<string>teamConfigViewController</string>
-							<string>titleImage</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>MapConfigViewController</string>
-							<string>SchemeWeaponConfigViewController</string>
-							<string>TeamConfigViewController</string>
-							<string>UIImageView</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>mapConfigViewController</string>
-							<string>schemeWeaponConfigViewController</string>
-							<string>teamConfigViewController</string>
-							<string>titleImage</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBToOneOutletInfo">
-								<string key="name">mapConfigViewController</string>
-								<string key="candidateClassName">MapConfigViewController</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">schemeWeaponConfigViewController</string>
-								<string key="candidateClassName">SchemeWeaponConfigViewController</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">teamConfigViewController</string>
-								<string key="candidateClassName">TeamConfigViewController</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">titleImage</string>
-								<string key="candidateClassName">UIImageView</string>
-							</object>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/GameConfigViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">MNEValueTrackingSlider</string>
-					<string key="superclassName">UISlider</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/MNEValueTrackingSlider.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">MapConfigViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="NSMutableDictionary" key="actions">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>mapButtonPressed:</string>
-							<string>segmentedControlChanged:</string>
-							<string>sliderChanged:</string>
-							<string>sliderEndedChanging:</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>id</string>
-							<string>id</string>
-							<string>id</string>
-							<string>id</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="actionInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>mapButtonPressed:</string>
-							<string>segmentedControlChanged:</string>
-							<string>sliderChanged:</string>
-							<string>sliderEndedChanging:</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBActionInfo">
-								<string key="name">mapButtonPressed:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">segmentedControlChanged:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">sliderChanged:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">sliderEndedChanging:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="outlets">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>maxLabel</string>
-							<string>previewButton</string>
-							<string>segmentedControl</string>
-							<string>slider</string>
-							<string>tableView</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>UILabel</string>
-							<string>MapPreviewButtonView</string>
-							<string>UISegmentedControl</string>
-							<string>MNEValueTrackingSlider</string>
-							<string>UITableView</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>maxLabel</string>
-							<string>previewButton</string>
-							<string>segmentedControl</string>
-							<string>slider</string>
-							<string>tableView</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBToOneOutletInfo">
-								<string key="name">maxLabel</string>
-								<string key="candidateClassName">UILabel</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">previewButton</string>
-								<string key="candidateClassName">MapPreviewButtonView</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">segmentedControl</string>
-								<string key="candidateClassName">UISegmentedControl</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">slider</string>
-								<string key="candidateClassName">MNEValueTrackingSlider</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">tableView</string>
-								<string key="candidateClassName">UITableView</string>
-							</object>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/MapConfigViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">MapPreviewButtonView</string>
-					<string key="superclassName">UIButton</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<string key="NS.key.0">delegate</string>
-						<string key="NS.object.0">id</string>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<string key="NS.key.0">delegate</string>
-						<object class="IBToOneOutletInfo" key="NS.object.0">
-							<string key="name">delegate</string>
-							<string key="candidateClassName">id</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/MapPreviewButtonView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SchemeWeaponConfigViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/SchemeWeaponConfigViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">TeamConfigViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/TeamConfigViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIButton</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="106046383">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/ExtraCategories.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UILabel</string>
-					<reference key="sourceIdentifier" ref="106046383"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UITableView</string>
-					<reference key="sourceIdentifier" ref="106046383"/>
-				</object>
-			</object>
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="786211723">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIButton</string>
-					<string key="superclassName">UIControl</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIButton.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIControl</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIControl.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIImageView</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIImageView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UILabel</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UILabel.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIResponder</string>
-					<string key="superclassName">NSObject</string>
-					<reference key="sourceIdentifier" ref="786211723"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIScrollView</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIScrollView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchBar</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchDisplayController</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISegmentedControl</string>
-					<string key="superclassName">UIControl</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISegmentedControl.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISlider</string>
-					<string key="superclassName">UIControl</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISlider.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UITableView</string>
-					<string key="superclassName">UIScrollView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITableView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPrintFormatter.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
-					</object>
-				</object>
-			</object>
-		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes"/>
 		<int key="IBDocument.localizationMode">0</int>
 		<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
-			<integer value="1056" key="NS.object.0"/>
-		</object>
+		<bool key="IBDocument.previouslyAttemptedUpgradeToXcode5">NO</bool>
 		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-			<integer value="3100" key="NS.object.0"/>
+			<integer value="4600" key="NS.object.0"/>
 		</object>
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<string key="IBDocument.LastKnownRelativeProjectPath">../Hedgewars.xcodeproj</string>
 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>backButton.png</string>
-				<string>background.png</string>
-				<string>helpButton.png</string>
-				<string>startGameButton.png</string>
-				<string>title~iphone.png</string>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>{64, 64}</string>
-				<string>{1024, 768}</string>
-				<string>{64, 64}</string>
-				<string>{142, 64}</string>
-				<string>{270, 150}</string>
-			</object>
-		</object>
-		<string key="IBCocoaTouchPluginVersion">132</string>
+		<dictionary class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+			<string key="backButton.png">{64, 64}</string>
+			<string key="background.png">{1024, 768}</string>
+			<string key="helpButton.png">{64, 64}</string>
+			<string key="startGameButton.png">{142, 64}</string>
+			<string key="title.png">{540, 300}</string>
+		</dictionary>
 	</data>
 </archive>
--- a/project_files/HedgewarsMobile/Classes/GameConfigViewController-iPhone.xib	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/GameConfigViewController-iPhone.xib	Mon Nov 09 18:37:57 2015 +0100
@@ -1,1014 +1,105 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
-	<data>
-		<int key="IBDocument.SystemTarget">1056</int>
-		<string key="IBDocument.SystemVersion">10K549</string>
-		<string key="IBDocument.InterfaceBuilderVersion">823</string>
-		<string key="IBDocument.AppKitVersion">1038.36</string>
-		<string key="IBDocument.HIToolboxVersion">461.00</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">132</string>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="30"/>
-			<integer value="2"/>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys" id="0">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="IBProxyObject" id="841351856">
-				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-			<object class="IBProxyObject" id="606714003">
-				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-			<object class="IBUIView" id="766721923">
-				<reference key="NSNextResponder"/>
-				<int key="NSvFlags">292</int>
-				<object class="NSMutableArray" key="NSSubviews">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBUIToolbar" id="836721772">
-						<reference key="NSNextResponder" ref="766721923"/>
-						<int key="NSvFlags">266</int>
-						<object class="NSMutableArray" key="NSSubviews">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBUISegmentedControl" id="563596142">
-								<reference key="NSNextResponder" ref="836721772"/>
-								<int key="NSvFlags">292</int>
-								<string key="NSFrame">{{96, 8}, {270, 30}}</string>
-								<reference key="NSSuperview" ref="836721772"/>
-								<bool key="IBUIOpaque">NO</bool>
-								<int key="IBUITag">12345</int>
-								<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-								<int key="IBSegmentControlStyle">2</int>
-								<int key="IBNumberOfSegments">4</int>
-								<int key="IBSelectedSegmentIndex">0</int>
-								<object class="NSArray" key="IBSegmentTitles">
-									<bool key="EncodedWithXMLCoder">YES</bool>
-									<string>Map</string>
-									<string>Teams</string>
-									<string>Details</string>
-									<string>Help</string>
-								</object>
-								<object class="NSMutableArray" key="IBSegmentWidths">
-									<bool key="EncodedWithXMLCoder">YES</bool>
-									<real value="0.0"/>
-									<real value="0.0"/>
-									<real value="0.0"/>
-									<real value="0.0"/>
-								</object>
-								<object class="NSMutableArray" key="IBSegmentEnabledStates">
-									<bool key="EncodedWithXMLCoder">YES</bool>
-									<boolean value="YES"/>
-									<boolean value="YES"/>
-									<boolean value="YES"/>
-									<boolean value="YES"/>
-								</object>
-								<object class="NSMutableArray" key="IBSegmentContentOffsets">
-									<bool key="EncodedWithXMLCoder">YES</bool>
-									<string>{0, 0}</string>
-									<string>{0, 0}</string>
-									<string>{0, 0}</string>
-									<string>{0, 0}</string>
-								</object>
-								<object class="NSMutableArray" key="IBSegmentImages">
-									<bool key="EncodedWithXMLCoder">YES</bool>
-									<object class="NSNull" id="4"/>
-									<reference ref="4"/>
-									<reference ref="4"/>
-									<reference ref="4"/>
-								</object>
-								<object class="NSColor" key="IBTintColor">
-									<int key="NSColorSpace">1</int>
-									<bytes key="NSRGB">MC42IDAuNiAwLjYAA</bytes>
-								</object>
-							</object>
-						</object>
-						<string key="NSFrame">{{0, 276}, {480, 44}}</string>
-						<reference key="NSSuperview" ref="766721923"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<int key="IBUIBarStyle">1</int>
-						<object class="NSMutableArray" key="IBUIItems">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBUIBarButtonItem" id="80281356">
-								<string key="IBUITitle">Back</string>
-								<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-								<int key="IBUIStyle">1</int>
-								<reference key="IBUIToolbar" ref="836721772"/>
-							</object>
-							<object class="IBUIBarButtonItem" id="716161941">
-								<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-								<reference key="IBUIToolbar" ref="836721772"/>
-								<int key="IBUISystemItemIdentifier">5</int>
-							</object>
-							<object class="IBUIBarButtonItem" id="530186890">
-								<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-								<reference key="IBUICustomView" ref="563596142"/>
-								<reference key="IBUIToolbar" ref="836721772"/>
-							</object>
-							<object class="IBUIBarButtonItem" id="188600069">
-								<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-								<reference key="IBUIToolbar" ref="836721772"/>
-								<int key="IBUISystemItemIdentifier">5</int>
-							</object>
-							<object class="IBUIBarButtonItem" id="919181414">
-								<int key="IBUITag">1</int>
-								<string key="IBUITitle">Start</string>
-								<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-								<float key="IBUIWidth">68</float>
-								<int key="IBUIStyle">2</int>
-								<reference key="IBUIToolbar" ref="836721772"/>
-							</object>
-						</object>
-					</object>
-					<object class="IBUIView" id="914954699">
-						<reference key="NSNextResponder" ref="766721923"/>
-						<int key="NSvFlags">274</int>
-						<string key="NSFrameSize">{480, 276}</string>
-						<reference key="NSSuperview" ref="766721923"/>
-						<object class="NSColor" key="IBUIBackgroundColor">
-							<int key="NSColorSpace">3</int>
-							<bytes key="NSWhite">MQA</bytes>
-							<object class="NSColorSpace" key="NSCustomColorSpace" id="9020506">
-								<int key="NSID">2</int>
-							</object>
-						</object>
-						<bool key="IBUIClipsSubviews">YES</bool>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-					</object>
-					<object class="IBUIView" id="848489667">
-						<reference key="NSNextResponder" ref="766721923"/>
-						<int key="NSvFlags">274</int>
-						<string key="NSFrameSize">{480, 276}</string>
-						<reference key="NSSuperview" ref="766721923"/>
-						<object class="NSColor" key="IBUIBackgroundColor">
-							<int key="NSColorSpace">3</int>
-							<bytes key="NSWhite">MQA</bytes>
-							<reference key="NSCustomColorSpace" ref="9020506"/>
-						</object>
-						<bool key="IBUIClipsSubviews">YES</bool>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-					</object>
-				</object>
-				<string key="NSFrameSize">{480, 320}</string>
-				<reference key="NSSuperview"/>
-				<object class="NSColor" key="IBUIBackgroundColor">
-					<int key="NSColorSpace">3</int>
-					<bytes key="NSWhite">MQA</bytes>
-				</object>
-				<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
-				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-					<int key="interfaceOrientation">3</int>
-				</object>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-			<object class="IBUIViewController" id="682131721">
-				<string key="IBUINibName">MapConfigViewController-iPhone</string>
-				<object class="IBUISimulatedToolbarMetrics" key="IBUISimulatedBottomBarMetrics"/>
-				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics" id="789431191">
-					<int key="interfaceOrientation">3</int>
-				</object>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-				<bool key="IBUIHorizontal">YES</bool>
-			</object>
-			<object class="IBUIViewController" id="508843780">
-				<object class="IBUISimulatedToolbarMetrics" key="IBUISimulatedBottomBarMetrics" id="129104688">
-					<int key="IBUIBarStyle">1</int>
-				</object>
-				<reference key="IBUISimulatedOrientationMetrics" ref="789431191"/>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-				<bool key="IBUIHorizontal">YES</bool>
-			</object>
-			<object class="IBUIViewController" id="290947091">
-				<reference key="IBUISimulatedBottomBarMetrics" ref="129104688"/>
-				<reference key="IBUISimulatedOrientationMetrics" ref="789431191"/>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-				<bool key="IBUIHorizontal">YES</bool>
-			</object>
-		</object>
-		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">view</string>
-						<reference key="source" ref="841351856"/>
-						<reference key="destination" ref="766721923"/>
-					</object>
-					<int key="connectionID">3</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">buttonPressed:</string>
-						<reference key="source" ref="80281356"/>
-						<reference key="destination" ref="841351856"/>
-					</object>
-					<int key="connectionID">17</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">buttonPressed:</string>
-						<reference key="source" ref="919181414"/>
-						<reference key="destination" ref="841351856"/>
-					</object>
-					<int key="connectionID">23</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">segmentPressed:</string>
-						<reference key="source" ref="563596142"/>
-						<reference key="destination" ref="841351856"/>
-						<int key="IBEventType">13</int>
-					</object>
-					<int key="connectionID">29</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">mapConfigViewController</string>
-						<reference key="source" ref="841351856"/>
-						<reference key="destination" ref="682131721"/>
-					</object>
-					<int key="connectionID">33</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">teamConfigViewController</string>
-						<reference key="source" ref="841351856"/>
-						<reference key="destination" ref="508843780"/>
-					</object>
-					<int key="connectionID">34</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">schemeWeaponConfigViewController</string>
-						<reference key="source" ref="841351856"/>
-						<reference key="destination" ref="290947091"/>
-					</object>
-					<int key="connectionID">35</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">view</string>
-						<reference key="source" ref="508843780"/>
-						<reference key="destination" ref="914954699"/>
-					</object>
-					<int key="connectionID">42</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">view</string>
-						<reference key="source" ref="290947091"/>
-						<reference key="destination" ref="848489667"/>
-					</object>
-					<int key="connectionID">43</int>
-				</object>
-			</object>
-			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBObjectRecord">
-						<int key="objectID">0</int>
-						<reference key="object" ref="0"/>
-						<reference key="children" ref="1000"/>
-						<nil key="parent"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-1</int>
-						<reference key="object" ref="841351856"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">File's Owner</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-2</int>
-						<reference key="object" ref="606714003"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">2</int>
-						<reference key="object" ref="766721923"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="836721772"/>
-							<reference ref="914954699"/>
-							<reference ref="848489667"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">15</int>
-						<reference key="object" ref="836721772"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="80281356"/>
-							<reference ref="919181414"/>
-							<reference ref="188600069"/>
-							<reference ref="530186890"/>
-							<reference ref="716161941"/>
-						</object>
-						<reference key="parent" ref="766721923"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">16</int>
-						<reference key="object" ref="80281356"/>
-						<reference key="parent" ref="836721772"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">18</int>
-						<reference key="object" ref="919181414"/>
-						<reference key="parent" ref="836721772"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">19</int>
-						<reference key="object" ref="188600069"/>
-						<reference key="parent" ref="836721772"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">21</int>
-						<reference key="object" ref="530186890"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="563596142"/>
-						</object>
-						<reference key="parent" ref="836721772"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">20</int>
-						<reference key="object" ref="563596142"/>
-						<reference key="parent" ref="530186890"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">22</int>
-						<reference key="object" ref="716161941"/>
-						<reference key="parent" ref="836721772"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">30</int>
-						<reference key="object" ref="682131721"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">31</int>
-						<reference key="object" ref="508843780"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">32</int>
-						<reference key="object" ref="290947091"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">40</int>
-						<reference key="object" ref="914954699"/>
-						<reference key="parent" ref="766721923"/>
-						<string key="objectName">TeamConfigViewController View</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">41</int>
-						<reference key="object" ref="848489667"/>
-						<reference key="parent" ref="766721923"/>
-						<string key="objectName">SchemeWeaponConfigViewController View</string>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.CustomClassName</string>
-					<string>-2.CustomClassName</string>
-					<string>15.IBPluginDependency</string>
-					<string>15.IBViewBoundsToFrameTransform</string>
-					<string>16.IBPluginDependency</string>
-					<string>18.IBPluginDependency</string>
-					<string>19.IBPluginDependency</string>
-					<string>2.IBEditorWindowLastContentRect</string>
-					<string>2.IBPluginDependency</string>
-					<string>20.IBPluginDependency</string>
-					<string>22.IBPluginDependency</string>
-					<string>30.CustomClassName</string>
-					<string>30.IBEditorWindowLastContentRect</string>
-					<string>30.IBPluginDependency</string>
-					<string>31.CustomClassName</string>
-					<string>31.IBEditorWindowLastContentRect</string>
-					<string>31.IBPluginDependency</string>
-					<string>32.CustomClassName</string>
-					<string>32.IBEditorWindowLastContentRect</string>
-					<string>32.IBPluginDependency</string>
-					<string>40.IBPluginDependency</string>
-					<string>40.IBViewBoundsToFrameTransform</string>
-					<string>41.IBPluginDependency</string>
-					<string>41.IBViewBoundsToFrameTransform</string>
-				</object>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>GameConfigViewController</string>
-					<string>UIResponder</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAAAAAAAAw58AAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>{{40, 217}, {480, 320}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>MapConfigViewController</string>
-					<string>{{0, 825}, {480, 320}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>TeamConfigViewController</string>
-					<string>{{21, 802}, {480, 320}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>SchemeWeaponConfigViewController</string>
-					<string>{{42, 779}, {480, 320}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAAAAAAAAw5QAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAAAAAAAAw5QAAA</bytes>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="sourceID"/>
-			<int key="maxID">45</int>
-		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">GameConfigViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="NSMutableDictionary" key="actions">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>buttonPressed:</string>
-							<string>segmentPressed:</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>id</string>
-							<string>id</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="actionInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>buttonPressed:</string>
-							<string>segmentPressed:</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBActionInfo">
-								<string key="name">buttonPressed:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">segmentPressed:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="outlets">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>mapConfigViewController</string>
-							<string>schemeWeaponConfigViewController</string>
-							<string>teamConfigViewController</string>
-							<string>titleImage</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>MapConfigViewController</string>
-							<string>SchemeWeaponConfigViewController</string>
-							<string>TeamConfigViewController</string>
-							<string>UIImageView</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>mapConfigViewController</string>
-							<string>schemeWeaponConfigViewController</string>
-							<string>teamConfigViewController</string>
-							<string>titleImage</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBToOneOutletInfo">
-								<string key="name">mapConfigViewController</string>
-								<string key="candidateClassName">MapConfigViewController</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">schemeWeaponConfigViewController</string>
-								<string key="candidateClassName">SchemeWeaponConfigViewController</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">teamConfigViewController</string>
-								<string key="candidateClassName">TeamConfigViewController</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">titleImage</string>
-								<string key="candidateClassName">UIImageView</string>
-							</object>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/GameConfigViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">MapConfigViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="NSMutableDictionary" key="actions">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>mapButtonPressed:</string>
-							<string>segmentedControlChanged:</string>
-							<string>sliderChanged:</string>
-							<string>sliderEndedChanging:</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>id</string>
-							<string>id</string>
-							<string>id</string>
-							<string>id</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="actionInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>mapButtonPressed:</string>
-							<string>segmentedControlChanged:</string>
-							<string>sliderChanged:</string>
-							<string>sliderEndedChanging:</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBActionInfo">
-								<string key="name">mapButtonPressed:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">segmentedControlChanged:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">sliderChanged:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">sliderEndedChanging:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="outlets">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>maxLabel</string>
-							<string>previewButton</string>
-							<string>segmentedControl</string>
-							<string>slider</string>
-							<string>tableView</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>UILabel</string>
-							<string>MapPreviewButtonView</string>
-							<string>UISegmentedControl</string>
-							<string>ValueTrackingSliderView</string>
-							<string>UITableView</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>maxLabel</string>
-							<string>previewButton</string>
-							<string>segmentedControl</string>
-							<string>slider</string>
-							<string>tableView</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBToOneOutletInfo">
-								<string key="name">maxLabel</string>
-								<string key="candidateClassName">UILabel</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">previewButton</string>
-								<string key="candidateClassName">MapPreviewButtonView</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">segmentedControl</string>
-								<string key="candidateClassName">UISegmentedControl</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">slider</string>
-								<string key="candidateClassName">ValueTrackingSliderView</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">tableView</string>
-								<string key="candidateClassName">UITableView</string>
-							</object>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/MapConfigViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">MapPreviewButtonView</string>
-					<string key="superclassName">UIButton</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<string key="NS.key.0">delegate</string>
-						<string key="NS.object.0">id</string>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<string key="NS.key.0">delegate</string>
-						<object class="IBToOneOutletInfo" key="NS.object.0">
-							<string key="name">delegate</string>
-							<string key="candidateClassName">id</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/MapPreviewButtonView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SchemeWeaponConfigViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/SchemeWeaponConfigViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">TeamConfigViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/TeamConfigViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UILabel</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="910572871">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/ExtraCategories.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UITableView</string>
-					<reference key="sourceIdentifier" ref="910572871"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">ValueTrackingSliderView</string>
-					<string key="superclassName">UISlider</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/MNEValueTrackingSlider.h</string>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="786211723">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIBarButtonItem</string>
-					<string key="superclassName">UIBarItem</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIBarButtonItem.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIBarItem</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIBarItem.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIButton</string>
-					<string key="superclassName">UIControl</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIButton.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIControl</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIControl.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIImageView</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIImageView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UILabel</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UILabel.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIResponder</string>
-					<string key="superclassName">NSObject</string>
-					<reference key="sourceIdentifier" ref="786211723"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIScrollView</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIScrollView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchBar</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchDisplayController</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISegmentedControl</string>
-					<string key="superclassName">UIControl</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISegmentedControl.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISlider</string>
-					<string key="superclassName">UIControl</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISlider.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UITableView</string>
-					<string key="superclassName">UIScrollView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITableView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIToolbar</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIToolbar.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPrintFormatter.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
-					</object>
-				</object>
-			</object>
-		</object>
-		<int key="IBDocument.localizationMode">0</int>
-		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
-			<integer value="1056" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-			<integer value="3100" key="NS.object.0"/>
-		</object>
-		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<string key="IBDocument.LastKnownRelativeProjectPath">../Hedgewars.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<string key="IBCocoaTouchPluginVersion">132</string>
-	</data>
-</archive>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="8191" systemVersion="15B42" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8154"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="GameConfigViewController">
+            <connections>
+                <outlet property="backButton" destination="16" id="JdX-PP-V4d"/>
+                <outlet property="mapConfigViewController" destination="30" id="33"/>
+                <outlet property="schemeWeaponConfigViewController" destination="32" id="35"/>
+                <outlet property="startButton" destination="18" id="0Gc-dB-ioC"/>
+                <outlet property="tabsSegmentedControl" destination="20" id="PVz-zB-sKx"/>
+                <outlet property="teamConfigViewController" destination="31" id="34"/>
+                <outlet property="view" destination="2" id="3"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="2">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="320"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <toolbar opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" barStyle="black" id="15">
+                    <rect key="frame" x="0.0" y="276" width="480" height="44"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+                    <animations/>
+                    <items>
+                        <barButtonItem title="Back" id="16">
+                            <connections>
+                                <action selector="buttonPressed:" destination="-1" id="17"/>
+                            </connections>
+                        </barButtonItem>
+                        <barButtonItem style="plain" systemItem="flexibleSpace" id="22"/>
+                        <barButtonItem style="plain" id="21">
+                            <segmentedControl key="customView" opaque="NO" tag="12345" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bar" selectedSegmentIndex="0" id="20">
+                                <rect key="frame" x="105" y="7" width="270" height="30"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                <animations/>
+                                <segments>
+                                    <segment title="Map"/>
+                                    <segment title="Teams"/>
+                                    <segment title="Details"/>
+                                    <segment title="Help"/>
+                                </segments>
+                                <color key="tintColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                <connections>
+                                    <action selector="segmentPressed:" destination="-1" eventType="valueChanged" id="29"/>
+                                </connections>
+                            </segmentedControl>
+                        </barButtonItem>
+                        <barButtonItem style="plain" systemItem="flexibleSpace" id="19"/>
+                        <barButtonItem tag="1" title="Start" width="68" style="done" id="18">
+                            <connections>
+                                <action selector="buttonPressed:" destination="-1" id="23"/>
+                            </connections>
+                        </barButtonItem>
+                    </items>
+                </toolbar>
+                <view clipsSubviews="YES" contentMode="scaleToFill" id="40" userLabel="TeamConfigViewController View">
+                    <rect key="frame" x="0.0" y="0.0" width="480" height="276"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    <animations/>
+                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                </view>
+                <view clipsSubviews="YES" contentMode="scaleToFill" id="41" userLabel="SchemeWeaponConfigViewController View">
+                    <rect key="frame" x="0.0" y="0.0" width="480" height="276"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    <animations/>
+                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                </view>
+            </subviews>
+            <animations/>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+            <nil key="simulatedStatusBarMetrics"/>
+            <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="944" y="504"/>
+        </view>
+        <viewController nibName="MapConfigViewController-iPhone" id="30" customClass="MapConfigViewController">
+            <extendedEdge key="edgesForExtendedLayout"/>
+            <nil key="simulatedStatusBarMetrics"/>
+            <simulatedToolbarMetrics key="simulatedBottomBarMetrics"/>
+            <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
+        </viewController>
+        <viewController id="31" customClass="TeamConfigViewController">
+            <extendedEdge key="edgesForExtendedLayout"/>
+            <nil key="simulatedStatusBarMetrics"/>
+            <simulatedToolbarMetrics key="simulatedBottomBarMetrics" barStyle="black"/>
+            <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
+            <connections>
+                <outlet property="view" destination="40" id="42"/>
+            </connections>
+        </viewController>
+        <viewController id="32" customClass="SchemeWeaponConfigViewController">
+            <extendedEdge key="edgesForExtendedLayout"/>
+            <nil key="simulatedStatusBarMetrics"/>
+            <simulatedToolbarMetrics key="simulatedBottomBarMetrics" barStyle="black"/>
+            <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
+            <connections>
+                <outlet property="view" destination="41" id="43"/>
+            </connections>
+        </viewController>
+    </objects>
+</document>
--- a/project_files/HedgewarsMobile/Classes/GameConfigViewController.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/GameConfigViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -23,7 +23,7 @@
 @class SchemeWeaponConfigViewController;
 @class TeamConfigViewController;
 @class MapConfigViewController;
-//@class HelpPageLobbyViewController;
+@class HelpPageLobbyViewController;
 
 @interface GameConfigViewController : UIViewController {
     UIView *imgContainer;
@@ -33,16 +33,17 @@
     SchemeWeaponConfigViewController *schemeWeaponConfigViewController;
     TeamConfigViewController *teamConfigViewController;
     MapConfigViewController *mapConfigViewController;
-    //HelpPageLobbyViewController *helpPage;
+    HelpPageLobbyViewController *helpPage;
 }
 
-@property (retain) UIView *imgContainer;
+@property (atomic) BOOL isDrawingNiceHogs;
+@property (nonatomic,retain) UIView *imgContainer;
 @property (nonatomic,retain) UILabel * sliderBackground;
 @property (nonatomic,retain) IBOutlet UIImageView *titleImage;
 @property (nonatomic,retain) IBOutlet SchemeWeaponConfigViewController *schemeWeaponConfigViewController;
 @property (nonatomic,retain) IBOutlet TeamConfigViewController *teamConfigViewController;
 @property (nonatomic,retain) IBOutlet MapConfigViewController *mapConfigViewController;
-//@property (nonatomic,retain) HelpPageLobbyViewController *helpPage;
+@property (nonatomic,retain) HelpPageLobbyViewController *helpPage;
 
 -(IBAction) buttonPressed:(id) sender;
 -(IBAction) segmentPressed:(id) sender;
--- a/project_files/HedgewarsMobile/Classes/GameConfigViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/GameConfigViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -22,16 +22,25 @@
 #import "TeamConfigViewController.h"
 #import "SchemeWeaponConfigViewController.h"
 #import "GameInterfaceBridge.h"
+#import "HelpPageLobbyViewController.h"
 
+@interface GameConfigViewController ()
+@property (nonatomic, retain) IBOutlet UISegmentedControl *tabsSegmentedControl; //iPhone only
+
+@property (nonatomic, retain) IBOutlet UIBarButtonItem *backButton; //iPhone only
+@property (nonatomic, retain) IBOutlet UIBarButtonItem *startButton; //iPhone only
+@end
 
 @implementation GameConfigViewController
-@synthesize imgContainer, titleImage, sliderBackground, //helpPage,
+@synthesize imgContainer, titleImage, sliderBackground, helpPage,
             mapConfigViewController, teamConfigViewController, schemeWeaponConfigViewController;
 
 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
+#pragma mark - Buttons
+
 -(IBAction) buttonPressed:(id) sender {
     UIButton *theButton = (UIButton *)sender;
 
@@ -47,7 +56,7 @@
                 [alert release];
             } else {
                 [[AudioManagerController mainManager] playBackSound];
-                [[self parentViewController] dismissModalViewControllerAnimated:YES];
+                [[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
             }
             break;
         case 1:
@@ -55,26 +64,20 @@
             if ([self isEverythingSet] == NO)
                 return;
             theButton.enabled = NO;
-            for (UIView *oneView in self.imgContainer.subviews) {
-                if ([oneView isMemberOfClass:[UIImageView class]]) {
-                    UIImageView *anImageView = (UIImageView *)oneView;
-                    [anImageView removeFromSuperview];
-                }
-            }
+            [self clearImgContainer];
             [self startGame:theButton];
 
             break;
         case 2:
             [[AudioManagerController mainManager] playClickSound];
-            /*
             if (self.helpPage == nil)
                 self.helpPage = [[HelpPageLobbyViewController alloc] initWithNibName:@"HelpPageLobbyViewController-iPad" bundle:nil];
             self.helpPage.view.alpha = 0;
+            self.helpPage.view.frame = self.view.frame;
             [self.view addSubview:self.helpPage.view];
-            [UIView beginAnimations:@"helplobby" context:NULL];
-            self.helpPage.view.alpha = 1;
-            [UIView commitAnimations];
-            */
+            [UIView animateWithDuration:0.5 animations:^{
+                self.helpPage.view.alpha = 1;
+            }];
             break;
         default:
             DLog(@"Nope");
@@ -82,6 +85,17 @@
     }
 }
 
+#pragma mark - Tabs Segmented Control
+
+- (void)localizeTabsSegmentedControl
+{
+    for (NSUInteger i = 0; i < self.tabsSegmentedControl.numberOfSegments; i++)
+    {
+        NSString *oldTitle = [self.tabsSegmentedControl titleForSegmentAtIndex:i];
+        [self.tabsSegmentedControl setTitle:NSLocalizedString(oldTitle, nil) forSegmentAtIndex:i];
+    }
+}
+
 -(IBAction) segmentPressed:(id) sender {
 
     UISegmentedControl *theSegment = (UISegmentedControl *)sender;
@@ -104,15 +118,16 @@
             [self.view bringSubviewToFront:schemeWeaponConfigViewController.view];
             break;
         case 3:
-            /*
             if (helpPage == nil) {
                 helpPage = [[HelpPageLobbyViewController alloc] initWithNibName:@"HelpPageLobbyViewController-iPhone" bundle:nil];
+                CGRect helpPageFrame = self.view.frame;
+                helpPageFrame.size.height -= 44; //toolbar height
+                self.helpPage.view.frame = helpPageFrame;
                 [self.view addSubview:helpPage.view];
             }
             // this message is compulsory otherwise the table won't be loaded at all
             [helpPage viewWillAppear:NO];
             [self.view bringSubviewToFront:helpPage.view];
-            */
             break;
         default:
             DLog(@"Nope");
@@ -121,6 +136,8 @@
 
 }
 
+#pragma mark -
+
 -(BOOL) isEverythingSet {
     // don't start playing if the preview is in progress
     if ([self.mapConfigViewController busy]) {
@@ -229,71 +246,95 @@
     [gameDictionary release];
 }
 
--(void) loadNiceHogs {
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-    srand(time(NULL));
-    NSString *filePath = [[NSString alloc] initWithFormat:@"%@/Hedgehog/Idle.png",GRAPHICS_DIRECTORY()];
-    UIImage *hogSprite = [[UIImage alloc] initWithContentsOfFile:filePath];
-    [filePath release];
+-(void) loadNiceHogs
+{
+    @autoreleasepool
+    {
+    
+        NSString *filePath = [[NSString alloc] initWithFormat:@"%@/Hedgehog/Idle.png",GRAPHICS_DIRECTORY()];
+        UIImage *hogSprite = [[UIImage alloc] initWithContentsOfFile:filePath];
+        [filePath release];
 
-    NSArray *hatArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:HATS_DIRECTORY() error:NULL];
-    int numberOfHats = [hatArray count];
-    int animationFrames = IS_VERY_POWERFUL([HWUtils modelType]) ? 18 : 1;
-
-    if (self.imgContainer != nil)
-        [self.imgContainer removeFromSuperview];
-
-    self.imgContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 40)];
-    NSInteger numberOfHogs = 1 + random() % 20;
-    DLog(@"Drawing %d nice hedgehogs", numberOfHogs);
-    for (int i = 0; i < numberOfHogs; i++) {
-        NSString *hat = [hatArray objectAtIndex:random()%numberOfHats];
+        NSArray *hatArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:HATS_DIRECTORY() error:NULL];
+        NSUInteger numberOfHats = [hatArray count];
+        int animationFrames = IS_VERY_POWERFUL([HWUtils modelType]) ? 16 : 1;
+        
+        self.imgContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 40)];
+        NSInteger numberOfHogs = 1 + arc4random_uniform(15);
+        DLog(@"Drawing %ld nice hedgehogs", (long)numberOfHogs);
+        for (int i = 0; i < numberOfHogs; i++) {
+            NSString *hat = [hatArray objectAtIndex:arc4random_uniform((int)numberOfHats)];
 
-        NSString *hatFile = [[NSString alloc] initWithFormat:@"%@/%@", HATS_DIRECTORY(), hat];
-        UIImage *hatSprite = [[UIImage alloc] initWithContentsOfFile:hatFile];
-        NSMutableArray *animation = [[NSMutableArray alloc] initWithCapacity:animationFrames];
-        for (int j = 0; j < animationFrames; j++) {
-            int x = ((j*32)/(int)hatSprite.size.height)*32;
-            int y = (j*32)%(int)hatSprite.size.height;
-            UIImage *hatSpriteFrame = [hatSprite cutAt:CGRectMake(x, y, 32, 32)];
-            UIImage *hogSpriteFrame = [hogSprite cutAt:CGRectMake(x, y, 32, 32)];
-            UIImage *hogWithHat = [hogSpriteFrame mergeWith:hatSpriteFrame atPoint:CGPointMake(0, 5)];
-            [animation addObject:hogWithHat];
-        }
-        [hatSprite release];
-        [hatFile release];
+            NSString *hatFile = [[NSString alloc] initWithFormat:@"%@/%@", HATS_DIRECTORY(), hat];
+            UIImage *hatSprite = [[UIImage alloc] initWithContentsOfFile:hatFile];
+            NSMutableArray *animation = [[NSMutableArray alloc] initWithCapacity:animationFrames];
+            for (int j = 0; j < animationFrames; j++) {
+                int x = ((j*32)/(int)hatSprite.size.height)*32;
+                int y = (j*32)%(int)hatSprite.size.height;
+                UIImage *hatSpriteFrame = [hatSprite cutAt:CGRectMake(x, y, 32, 32)];
+                UIImage *hogSpriteFrame = [hogSprite cutAt:CGRectMake(x, y, 32, 32)];
+                UIImage *hogWithHat = [hogSpriteFrame mergeWith:hatSpriteFrame atPoint:CGPointMake(0, 5)];
+                [animation addObject:hogWithHat];
+            }
+            [hatSprite release];
+            [hatFile release];
+
+            UIImageView *hog = [[UIImageView alloc] initWithImage:[animation objectAtIndex:0]];
+            hog.animationImages = animation;
+            hog.animationDuration = 3;
+            [animation release];
 
-        UIImageView *hog = [[UIImageView alloc] initWithImage:[animation objectAtIndex:0]];
-        hog.animationImages = animation;
-        hog.animationDuration = 3;
-        [animation release];
-
-        int x = 20*i+random()%128;
-        if (x > 320 - 32)
-            x = i*random()%32;
-        hog.frame = CGRectMake(x, 25, hog.frame.size.width, hog.frame.size.height);
-        [self.imgContainer addSubview:hog];
-        [hog startAnimating];
-        [hog release];
+            int x = 20*i+arc4random_uniform(128);
+            while (x > 320 - 32)
+                x = i*arc4random_uniform(32);
+            
+            hog.frame = CGRectMake(x, 25, hog.frame.size.width, hog.frame.size.height);
+            [self.imgContainer addSubview:hog];
+            [hog startAnimating];
+            [hog release];
+        }
+        [hogSprite release];
+        
+        dispatch_async(dispatch_get_main_queue(), ^{
+            
+            [self.view addSubview:self.imgContainer];
+            
+            // don't place the nice hogs if there is no space for them
+            if ((self.interfaceOrientation == UIInterfaceOrientationPortrait ||
+                 self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown))
+                self.imgContainer.alpha = 0;
+            
+            self.isDrawingNiceHogs = NO;
+        });
     }
-
-    // don't place the nice hogs if there is no space for them
-    if ((self.interfaceOrientation == UIInterfaceOrientationPortrait ||
-         self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown))
-        self.imgContainer.alpha = 0;
-
-    [self.view addSubview:self.imgContainer];
-    [hogSprite release];
-    [pool drain];
 }
 
--(void) viewDidLoad {
+- (void)clearImgContainer
+{
+    for (UIView *oneView in [self.imgContainer subviews])
+    {
+        if ([oneView isMemberOfClass:[UIImageView class]])
+        {
+            UIImageView *anImageView = (UIImageView *)oneView;
+            [anImageView removeFromSuperview];
+        }
+    }
+    
+    [self.imgContainer removeFromSuperview];
+    self.imgContainer = nil;
+}
+
+-(void) viewDidLoad
+{
+    [super viewDidLoad];
+    
     self.view.backgroundColor = [UIColor blackColor];
 
     CGRect screenRect = [[UIScreen mainScreen] safeBounds];
     self.view.frame = screenRect;
 
-    if (IS_IPAD()) {
+    if (IS_IPAD())
+    {
         // the label for the filter slider
         UILabel *backLabel = [[UILabel alloc] initWithFrame:CGRectMake(116, 714, 310, 40)
                                                    andTitle:nil
@@ -312,21 +353,37 @@
         [self.view addSubview:maxLabel];
         self.mapConfigViewController.maxLabel = maxLabel;
         [maxLabel release];
-    } else {
+    }
+    else
+    {
+        [self localizeTabsSegmentedControl];
+        
+        [self.backButton setTitle:NSLocalizedString(@"Back", nil)];
+        [self.startButton setTitle:NSLocalizedString(@"Start", nil)];
+        
         self.mapConfigViewController.view.frame = CGRectMake(0, 0, screenRect.size.width, screenRect.size.height-44);
     }
+    
     [self.view addSubview:self.mapConfigViewController.view];
     [self.view bringSubviewToFront:self.mapConfigViewController.slider];
-
-    [super viewDidLoad];
 }
 
 -(void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval) duration {
     if (IS_IPAD() == NO)
         return;
 
-    if ((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
-         toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)) {
+    [self updateiPadUIForInterfaceOrientation:toInterfaceOrientation];
+
+    if (self.helpPage)
+    {
+        self.helpPage.view.frame = self.view.frame;
+    }
+}
+
+- (void)updateiPadUIForInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
+{
+    if ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
+         interfaceOrientation == UIInterfaceOrientationLandscapeRight)) {
         self.imgContainer.alpha = 1;
         self.titleImage.frame = CGRectMake(357, 17, 309, 165);
         self.schemeWeaponConfigViewController.view.frame = CGRectMake(0, 60, 320, 620);
@@ -345,46 +402,41 @@
         self.sliderBackground.frame = CGRectMake(465, 975, 200, 40);
         self.mapConfigViewController.slider.frame = CGRectMake(475, 983, 180, 23);
     }
-
-    [self.schemeWeaponConfigViewController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation
-                                                                            duration:duration];
-}
-
--(void) viewWillAppear:(BOOL)animated {
-    if (IS_IPAD())
-        [NSThread detachNewThreadSelector:@selector(loadNiceHogs) toTarget:self withObject:nil];
-
-    [self.mapConfigViewController viewWillAppear:animated];
-    [self.teamConfigViewController viewWillAppear:animated];
-    [self.schemeWeaponConfigViewController viewWillAppear:animated];
-    // add other controllers here and below
-
-    [super viewWillAppear:animated];
 }
 
--(void) viewDidAppear:(BOOL)animated {
-    [self.mapConfigViewController viewDidAppear:animated];
-    [self.teamConfigViewController viewDidAppear:animated];
-    [self.schemeWeaponConfigViewController viewDidAppear:animated];
-    [super viewDidAppear:animated];
+-(void) viewWillAppear:(BOOL)animated
+{
+    [super viewWillAppear:animated];
+    
+    if (IS_IPAD() && !self.imgContainer && !self.isDrawingNiceHogs)
+    {
+        self.isDrawingNiceHogs = YES;
+        [NSThread detachNewThreadSelector:@selector(loadNiceHogs) toTarget:self withObject:nil];
+    }
+    
+    if (IS_IPAD())
+    {
+        // we assume here what 'statusBarOrientation' will never be changed manually!
+        UIInterfaceOrientation currentOrientation = [[UIApplication sharedApplication] statusBarOrientation];
+        [self updateiPadUIForInterfaceOrientation:currentOrientation];
+    }
 }
 
--(void) viewWillDisappear:(BOOL)animated {
-    [self.mapConfigViewController viewWillDisappear:animated];
-    [self.teamConfigViewController viewWillDisappear:animated];
-    [self.schemeWeaponConfigViewController viewWillDisappear:animated];
-    [super viewWillDisappear:animated];
+- (void)viewDidAppear:(BOOL)animated
+{
+    [super viewDidAppear:animated];
+
+    if (IS_IPAD())
+    {
+        // need to call this again in order to fix layout on iOS 9 when going back from rotated stats page
+        UIInterfaceOrientation currentOrientation = [[UIApplication sharedApplication] statusBarOrientation];
+        [self updateiPadUIForInterfaceOrientation:currentOrientation];
+    }
 }
 
--(void) viewDidDisappear:(BOOL)animated {
-    [self.mapConfigViewController viewDidDisappear:animated];
-    [self.teamConfigViewController viewDidDisappear:animated];
-    [self.schemeWeaponConfigViewController viewDidDisappear:animated];
-    [super viewDidDisappear:animated];
-}
-
--(void) didReceiveMemoryWarning {
-    self.imgContainer = nil;
+-(void) didReceiveMemoryWarning
+{
+    [self clearImgContainer];
 
     if (self.titleImage.superview == nil)
         self.titleImage = nil;
@@ -397,8 +449,8 @@
         self.teamConfigViewController = nil;
     if (self.schemeWeaponConfigViewController.view.superview == nil)
         self.schemeWeaponConfigViewController = nil;
-    //if (self.helpPage.view.superview == nil)
-    //    self.helpPage = nil;
+    if (self.helpPage.view.superview == nil)
+        self.helpPage = nil;
     MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
@@ -410,19 +462,22 @@
     self.schemeWeaponConfigViewController = nil;
     self.teamConfigViewController = nil;
     self.mapConfigViewController = nil;
-    //self.helpPage = nil;
+    self.helpPage = nil;
     MSG_DIDUNLOAD();
     [super viewDidUnload];
 }
 
 -(void) dealloc {
+    releaseAndNil(_tabsSegmentedControl);
+    releaseAndNil(_backButton);
+    releaseAndNil(_startButton);
     releaseAndNil(imgContainer);
     releaseAndNil(titleImage);
     releaseAndNil(sliderBackground);
     releaseAndNil(schemeWeaponConfigViewController);
     releaseAndNil(teamConfigViewController);
     releaseAndNil(mapConfigViewController);
-    //releaseAndNil(helpPage);
+    releaseAndNil(helpPage);
     [super dealloc];
 }
 
--- a/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m	Mon Nov 09 18:37:57 2015 +0100
@@ -99,7 +99,9 @@
     CGFloat width, height;
     CGFloat screenScale = [[UIScreen mainScreen] safeScale];
     NSString *ipcString = [[NSString alloc] initWithFormat:@"%d",self.port];
-    NSString *localeString = [[NSString alloc] initWithFormat:@"%@.txt",[[NSLocale preferredLanguages] objectAtIndex:0]];
+    
+    NSString *localeString = [[NSString alloc] initWithFormat:@"%@.txt", [HWUtils languageID]];
+    
     NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
 
     CGRect screenBounds = [[UIScreen mainScreen] safeBounds];
@@ -176,7 +178,7 @@
     [gameParameters release];
 
     // this is the pascal function that starts the game
-    Game(argc, argv);
+    RunEngine(argc, argv);
 
     // cleanup
     for (int i = 0; i < argc; i++)
@@ -201,7 +203,7 @@
         statsPage.statsArray = stats;
         statsPage.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
 
-        [callingController presentModalViewController:statsPage animated:YES];
+        [callingController presentViewController:statsPage animated:YES completion:nil];
         [statsPage release];
     }
 }
@@ -248,8 +250,6 @@
 }
 
 +(void) startSimpleGame {
-    srand(time(0));
-
     // generate a seed
     CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
     NSString *seed = (NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid);
@@ -259,7 +259,7 @@
 
     // pick a random static map
     NSArray *listOfMaps = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:MAPS_DIRECTORY() error:NULL];
-    NSString *mapName = [listOfMaps objectAtIndex:random()%[listOfMaps count]];
+    NSString *mapName = [listOfMaps objectAtIndex:arc4random_uniform((int)[listOfMaps count])];
     NSString *fileCfg = [[NSString alloc] initWithFormat:@"%@/%@/map.cfg",MAPS_DIRECTORY(),mapName];
     NSString *contents = [[NSString alloc] initWithContentsOfFile:fileCfg encoding:NSUTF8StringEncoding error:NULL];
     [fileCfg release];
@@ -272,8 +272,8 @@
     NSArray *colorArray = [HWUtils teamColors];
     NSInteger firstColorIndex, secondColorIndex;
     do {
-        firstColorIndex = random()%[colorArray count];
-        secondColorIndex = random()%[colorArray count];
+        firstColorIndex = arc4random_uniform((int)[colorArray count]);
+        secondColorIndex = arc4random_uniform((int)[colorArray count]);
     } while (firstColorIndex == secondColorIndex);
     unsigned int firstColor = [[colorArray objectAtIndex:firstColorIndex] intValue];
     unsigned int secondColor = [[colorArray objectAtIndex:secondColorIndex] intValue];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/GameLogViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,23 @@
+/*
+ * Hedgewars-iOS, a Hedgewars port for iOS devices
+ * Copyright (c) 2015 Anton Malmygin <antonc27@mail.ru>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface GameLogViewController : UIViewController
+
+@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/GameLogViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,144 @@
+/*
+ * Hedgewars-iOS, a Hedgewars port for iOS devices
+ * Copyright (c) 2015 Anton Malmygin <antonc27@mail.ru>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
+ */
+
+#import "GameLogViewController.h"
+
+#ifdef DEBUG
+#import <MessageUI/MFMailComposeViewController.h>
+#endif
+
+@interface GameLogViewController ()
+#ifdef DEBUG
+<MFMailComposeViewControllerDelegate>
+#endif
+
+@end
+
+@implementation GameLogViewController
+
+#pragma mark - View life cycle
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+    
+    self.title = @"Last game log";
+    
+    UIBarButtonItem *closeButton = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStylePlain target:self action:@selector(dismissAction)];
+    self.navigationItem.rightBarButtonItem = closeButton;
+    [closeButton release];
+    
+#ifdef DEBUG
+    if ([self allowSendLogByEmail])
+    {
+        UIBarButtonItem *sendButton = [[UIBarButtonItem alloc] initWithTitle:@"Send" style:UIBarButtonItemStylePlain target:self action:@selector(sendLogByEmailAction)];
+        self.navigationItem.leftBarButtonItem = sendButton;
+        [sendButton release];
+    }
+#endif
+    
+    NSString *debugStr = nil;
+    if ([[NSFileManager defaultManager] fileExistsAtPath:DEBUG_FILE()])
+        debugStr = [[NSString alloc] initWithContentsOfFile:DEBUG_FILE() encoding:NSUTF8StringEncoding error:nil];
+    else
+        debugStr = [[NSString alloc] initWithString:@"Here be log"];
+    
+    UITextView *logView = [[UITextView alloc] initWithFrame:self.view.frame];
+    [logView setAutoresizingMask:(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)];
+    logView.text = debugStr;
+    [debugStr release];
+    logView.editable = NO;
+    
+    [self.view addSubview:logView];
+    [logView release];
+}
+
+#pragma mark - Parameters
+
+#ifdef DEBUG
+- (BOOL)allowSendLogByEmail
+{
+    return ([MFMailComposeViewController canSendMail] && [[NSFileManager defaultManager] fileExistsAtPath:DEBUG_FILE()]);
+}
+#endif
+
+#pragma mark - Actions
+
+#ifdef DEBUG
+- (void)sendLogByEmailAction
+{
+    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
+    picker.mailComposeDelegate = self;
+    [picker setSubject:@"Log file of iHedgewars game"];
+    
+    // Attach a log file to the email
+    NSData *logData = [NSData dataWithContentsOfFile:DEBUG_FILE()];
+    [picker addAttachmentData:logData mimeType:@"text/plain" fileName:@"game0.log"];
+    
+    // Fill out the email body text
+    NSString *emailBody = @"Add here description of a problem/log";
+    [picker setMessageBody:emailBody isHTML:NO];
+    
+    [self presentViewController:picker animated:YES completion:nil];
+    [picker release];
+}
+#endif
+
+- (void)dismissAction
+{
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+
+#pragma mark - MailCompose delegate
+
+#ifdef DEBUG
+- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
+{
+    // Notifies users about errors associated with the interface
+    switch (result)
+    {
+        case MFMailComposeResultCancelled:
+            NSLog(@"MailComposeResult: canceled");
+            break;
+        case MFMailComposeResultSaved:
+            NSLog(@"MailComposeResult: saved");
+            break;
+        case MFMailComposeResultSent:
+            NSLog(@"MailComposeResult: sent");
+            break;
+        case MFMailComposeResultFailed:
+            NSLog(@"MailComposeResult: failed");
+            break;
+        default:
+            NSLog(@"MailComposeResult: not sent");
+            break;
+    }
+    
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+#endif
+
+#pragma mark - Memory warning
+
+- (void)didReceiveMemoryWarning
+{
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+@end
--- a/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -18,9 +18,9 @@
 
 
 #import <UIKit/UIKit.h>
-
+#import "TableViewControllerWithDoneButton.h"
 
-@interface GeneralSettingsViewController : UITableViewController <EditableCellViewDelegate> {
+@interface GeneralSettingsViewController : TableViewControllerWithDoneButton <EditableCellViewDelegate> {
 
 }
 
--- a/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -30,7 +30,7 @@
 #pragma mark -
 #pragma mark View Lifecycle
 -(void) viewDidLoad {
-    self.navigationItem.title = @"Edit game options";
+    self.navigationItem.title = NSLocalizedString(@"Edit game options", nil);
     [super viewDidLoad];
 }
 
@@ -179,7 +179,7 @@
 
             switchContent = (UISwitch *)cell.accessoryView;
             if (row == 0) {
-                cell.textLabel.text = NSLocalizedString(@"Sound Effects", @"from the settings table");
+                cell.textLabel.text = NSLocalizedString(@"Sound", @"from the settings table");
                 switchContent.on = [[settings objectForKey:@"sound"] boolValue];
                 switchContent.tag = 10;
             } else {
--- a/project_files/HedgewarsMobile/Classes/GravesViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/GravesViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -88,8 +88,8 @@
 #pragma mark -
 #pragma mark Table view delegate
 -(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    int newRow = [indexPath row];
-    int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
+    NSInteger newRow = [indexPath row];
+    NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
 
     if (newRow != oldRow) {
         [teamDictionary setObject:[[graveArray objectAtIndex:newRow] stringByDeletingPathExtension] forKey:@"grave"];
--- a/project_files/HedgewarsMobile/Classes/HWUtils.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/HWUtils.h	Mon Nov 09 18:37:57 2015 +0100
@@ -41,6 +41,7 @@
 +(NSInteger) randomPort;
 +(void) freePort:(NSInteger) port;
 +(BOOL) isNetworkReachable;
++(NSString *) languageID;
 //+(UIView *)mainSDLViewInstance;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/HWUtils.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/HWUtils.m	Mon Nov 09 18:37:57 2015 +0100
@@ -103,23 +103,22 @@
 +(NSInteger) randomPort {
     // set a new feed only at initialization time and forbid connecting to the server port
     if (activePorts == nil) {
-        srandom(time(NULL));
         activePorts = [[NSMutableArray arrayWithObject:[NSNumber numberWithInt:NETGAME_DEFAULT_PORT]] retain];
     }
 
     // pick a random number from the free ports list
     NSInteger res = 0;
     do {
-        res = (random() % 64511) + 1024;
-    } while ([activePorts containsObject:[NSNumber numberWithInt:res]]);
+        res = (arc4random_uniform(64511)) + 1024;
+    } while ([activePorts containsObject:[NSNumber numberWithInteger:res]]);
 
     // add this number to the forbdding list
-    [activePorts addObject:[NSNumber numberWithInt:res]];
+    [activePorts addObject:[NSNumber numberWithInteger:res]];
     return res;
 }
 
 +(void) freePort:(NSInteger) port {
-    [activePorts removeObject:[NSNumber numberWithInt:port]];
+    [activePorts removeObject:[NSNumber numberWithInteger:port]];
 }
 
 +(BOOL) isNetworkReachable {
@@ -156,6 +155,12 @@
     return ((isReachable && !needsConnection) || nonWiFi) ? testResult : NO;
 }
 
++ (NSString *)languageID
+{
+    NSString *language = [[NSLocale preferredLanguages] firstObject];
+    return [[language componentsSeparatedByString:@"-"] firstObject];
+}
+
 /*
 +(UIView *)mainSDLViewInstance {
     SDL_Window *window = HW_getSDLWindow();
--- a/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m	Mon Nov 09 18:37:57 2015 +0100
@@ -19,7 +19,7 @@
 
 #import "HedgewarsAppDelegate.h"
 #import "MainMenuViewController.h"
-
+#import "Appirater.h"
 
 @implementation SDLUIKitDelegate (customDelegate)
 
@@ -50,7 +50,18 @@
 }
 
 // override the direct execution of SDL_main to allow us to implement our own frontend
--(void) postFinishLaunch {
+-(void) postFinishLaunch
+{
+    // Setup Appirater
+    [Appirater setAppId:@"391234866"];
+    [Appirater setDaysUntilPrompt:3];
+    [Appirater setUsesUntilPrompt:5];
+    [Appirater setSignificantEventsUntilPrompt:-1];
+    [Appirater setTimeBeforeReminding:1];
+    //[Appirater setDebug:YES];
+    
+    [self performSelector:@selector(hideLaunchScreen) withObject:nil afterDelay:0.0];
+    
     [[UIApplication sharedApplication] setStatusBarHidden:YES];
 
     self.uiwindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
@@ -58,7 +69,7 @@
 
     NSString *controllerName = (IS_IPAD() ? @"MainMenuViewController-iPad" : @"MainMenuViewController-iPhone");
     self.mainViewController = [[MainMenuViewController alloc] initWithNibName:controllerName bundle:nil];
-    [self.uiwindow addSubview:self.mainViewController.view];
+    self.uiwindow.rootViewController = self.mainViewController;
     [self.mainViewController release];
 
     [self.uiwindow makeKeyAndVisible];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/HelpPageLobbyViewController-iPad.xib	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,320 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="8191" systemVersion="15B42" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8154"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="HelpPageLobbyViewController">
+            <connections>
+                <outlet property="view" destination="2" id="3"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="2" customClass="UIControl">
+            <rect key="frame" x="0.0" y="0.0" width="1024" height="768"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" id="69" userLabel="Customize Bubble">
+                    <rect key="frame" x="10" y="8" width="278" height="52"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                    <subviews>
+                        <imageView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" image="helpleft.png" id="58">
+                            <rect key="frame" x="0.0" y="1" width="278" height="50"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                        </imageView>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Did you know you can customize almost everything in the settings page?" lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="59" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="22" y="8" width="248" height="36"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Oblique" family="Helvetica" pointSize="14"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <animations/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                </view>
+                <view contentMode="scaleToFill" id="65" userLabel="Map theme Bubble">
+                    <rect key="frame" x="742" y="360" width="240" height="102"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                    <subviews>
+                        <imageView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" image="helpabove.png" id="28">
+                            <rect key="frame" x="0.0" y="0.0" width="240" height="102"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                        </imageView>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Map theme" lineBreakMode="tailTruncation" minimumFontSize="10" id="29" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="11" y="19" width="218" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Here you can choose how your map will appear in game." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="30" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="11" y="43" width="218" height="51"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <animations/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                </view>
+                <view contentMode="scaleToFill" id="66" userLabel="Map type Bubble">
+                    <rect key="frame" x="653" y="202" width="240" height="146"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
+                    <subviews>
+                        <imageView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" image="helpabove.png" id="52">
+                            <rect key="frame" x="0.0" y="0.0" width="240" height="146"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                        </imageView>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Map type" lineBreakMode="tailTruncation" minimumFontSize="10" id="53" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="11" y="22" width="221" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="54" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="11" y="46" width="218" height="94"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                            <string key="text">Choose between a static map or a randomly generated one (might require more time). In a mission you need to perfom some action to win.</string>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <animations/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                </view>
+                <view contentMode="scaleToFill" id="67" userLabel="Map preview Bubble">
+                    <rect key="frame" x="494" y="20" width="240" height="101"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
+                    <subviews>
+                        <imageView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" image="helpright.png" id="6">
+                            <rect key="frame" x="0.0" y="0.0" width="240" height="101"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                        </imageView>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Map preview" lineBreakMode="tailTruncation" minimumFontSize="10" id="7" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="8" y="7" width="218" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="This is a small preview of your next map. Tap to select / generate a new map." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="8" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="8" y="25" width="218" height="65"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <animations/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                </view>
+                <view contentMode="scaleToFill" id="60" userLabel="Teams Bubble">
+                    <rect key="frame" x="358" y="389" width="242" height="171"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <subviews>
+                        <imageView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" image="helpabove.png" id="43">
+                            <rect key="frame" x="0.0" y="0.0" width="242" height="171"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                        </imageView>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Teams" lineBreakMode="tailTruncation" minimumFontSize="10" id="44" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="8" y="25" width="226" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="45" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="8" y="48" width="226" height="115"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                            <string key="text">Select which teams are playing! Add hogs by tapping on them and set their color to figure friend and foe teams out. AI teams will appear with a small robot badge next their name.</string>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <animations/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                </view>
+                <view contentMode="scaleToFill" id="68" userLabel="Schemes &amp; Weapons Bubble">
+                    <rect key="frame" x="142" y="160" width="240" height="104"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                    <subviews>
+                        <imageView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" image="helpleft.png" id="40">
+                            <rect key="frame" x="0.0" y="0.0" width="240" height="104"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                        </imageView>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Schemes and Weapons" lineBreakMode="tailTruncation" minimumFontSize="10" id="41" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="23" y="8" width="204" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Here you can choose which rules and which weapon set will be applied in game." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="42" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="23" y="27" width="210" height="71"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <animations/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                </view>
+                <view contentMode="scaleToFill" id="64" userLabel="Max hogs Bubble">
+                    <rect key="frame" x="35" y="590" width="240" height="117"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <subviews>
+                        <imageView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" image="helpbottom.png" id="34">
+                            <rect key="frame" x="0.0" y="0.0" width="240" height="117"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                        </imageView>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Max hedgehogs" lineBreakMode="tailTruncation" minimumFontSize="10" id="35" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="10" y="8" width="219" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="This number is the maximum size for all the hogs playing (in every team)." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="36" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="11" y="32" width="218" height="62"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <animations/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                </view>
+                <view contentMode="scaleToFill" id="63" userLabel="Size slider Bubble">
+                    <rect key="frame" x="695" y="598" width="240" height="109"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+                    <subviews>
+                        <imageView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" image="helpbottom.png" id="37">
+                            <rect key="frame" x="0.0" y="0.0" width="240" height="109"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                        </imageView>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Size slider" lineBreakMode="tailTruncation" minimumFontSize="10" id="38" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="8" y="6" width="224" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="For Random and Maze maps you can decide to generate only maps of a certain size." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="39" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="8" y="29" width="224" height="59"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <animations/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                </view>
+                <view contentMode="scaleToFill" id="61" userLabel="Tap anywere Bubble">
+                    <rect key="frame" x="45" y="360" width="240" height="128"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                    <subviews>
+                        <imageView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" image="helpplain.png" id="25">
+                            <rect key="frame" x="0.0" y="0.0" width="240" height="128"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                        </imageView>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Tap anywhere to dismiss" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="26" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="6" y="7" width="229" height="34"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Still confused? Don't worry, it's really simple! Try a couple of games and everything will become clear to you." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="27" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="8" y="38" width="224" height="81"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <animations/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                </view>
+                <view contentMode="scaleToFill" id="62" userLabel="Start button Bubble">
+                    <rect key="frame" x="344" y="646" width="240" height="61"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <subviews>
+                        <imageView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" image="helpbottom.png" id="49">
+                            <rect key="frame" x="0.0" y="0.0" width="240" height="61"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                        </imageView>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Start button" lineBreakMode="tailTruncation" minimumFontSize="10" id="50" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="8" y="3" width="224" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="This button starts the game." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="51" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="8" y="25" width="224" height="28"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <animations/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                </view>
+            </subviews>
+            <animations/>
+            <color key="backgroundColor" white="0.0" alpha="0.40000000000000002" colorSpace="calibratedWhite"/>
+            <nil key="simulatedStatusBarMetrics"/>
+            <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
+            <connections>
+                <action selector="dismiss" destination="-1" eventType="touchUpInside" id="16"/>
+            </connections>
+            <point key="canvasLocation" x="581" y="369"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="helpabove.png" width="295" height="156"/>
+        <image name="helpbottom.png" width="295" height="156"/>
+        <image name="helpleft.png" width="308" height="144"/>
+        <image name="helpplain.png" width="296" height="138"/>
+        <image name="helpright.png" width="308" height="144"/>
+    </resources>
+</document>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/HelpPageLobbyViewController-iPhone.xib	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="8191" systemVersion="15A284" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8154"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="HelpPageLobbyViewController">
+            <connections>
+                <outlet property="scrollView" destination="60" id="95"/>
+                <outlet property="view" destination="2" id="3"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="2">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="276"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="60">
+                    <rect key="frame" x="0.0" y="0.0" width="480" height="276"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    <subviews>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Still confused? Don't worry, it's really simple! Try a couple of games and everything will become clear to you." textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="61" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="587" width="440" height="52"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Size slider" lineBreakMode="tailTruncation" minimumFontSize="10" id="62" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="279" width="138" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="For Random and Maze maps you can decide to generate only maps of a certain size." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="63" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="298" width="440" height="44"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Schemes and Weapons" lineBreakMode="tailTruncation" minimumFontSize="10" id="64" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="511" width="204" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Here you can choose which rules and which weapon set will be applied in game." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="65" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="530" width="433" height="45"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Map preview" lineBreakMode="tailTruncation" minimumFontSize="10" id="66" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="68" width="109" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="This is a small preview of your next map. Tap to select / generate a new map." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="67" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="88" width="440" height="44"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Map type" lineBreakMode="tailTruncation" minimumFontSize="10" id="68" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="140" width="109" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="69" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="164" width="440" height="58"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <string key="text">Choose between a static map or a randomly generated one (might require more time). In a mission you need to perfom some action to win.</string>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Map theme" lineBreakMode="tailTruncation" minimumFontSize="10" id="70" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="229" width="109" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Here you can choose how your map will appear in game." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="71" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="244" width="440" height="33"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Max hedgehogs" lineBreakMode="tailTruncation" minimumFontSize="10" id="72" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="347" width="138" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="This number is the maximum size for all the hogs playing (in every team)." lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="73" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="367" width="440" height="41"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Teams" lineBreakMode="tailTruncation" minimumFontSize="10" id="74" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="418" width="109" height="22"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="18"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="75" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="436" width="433" height="66"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <string key="text">Select which teams are playing! Add hogs by tapping on them and set their color to figure friend and foe teams out. AI teams will appear with a small robot badge next their name.</string>
+                            <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Here you can find help for the game configuration options. You can customize almost everything in the settings page." textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" minimumFontSize="10" id="76" customClass="LabelWithIBLocalization">
+                            <rect key="frame" x="20" y="3" width="440" height="60"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                            <animations/>
+                            <fontDescription key="fontDescription" name="Helvetica-Oblique" family="Helvetica" pointSize="16"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <animations/>
+                </scrollView>
+            </subviews>
+            <animations/>
+            <color key="backgroundColor" red="0.99607849120000003" green="0.98823535439999999" blue="1" alpha="1" colorSpace="deviceRGB"/>
+            <nil key="simulatedStatusBarMetrics"/>
+            <simulatedToolbarMetrics key="simulatedBottomBarMetrics"/>
+            <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="505" y="338"/>
+        </view>
+    </objects>
+</document>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/HelpPageLobbyViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,31 @@
+/*
+ * Hedgewars-iOS, a Hedgewars port for iOS devices
+ * Copyright (c) 2009-2012 Vittorio Giovara <vittorio.giovara@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+
+#import <UIKit/UIKit.h>
+
+
+@interface HelpPageLobbyViewController : UIViewController <UIScrollViewDelegate> {
+    UIScrollView *scrollView;
+}
+
+@property (nonatomic, retain) IBOutlet UIScrollView *scrollView;
+
+-(IBAction) dismiss;
+
+@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/HelpPageLobbyViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,65 @@
+/*
+ * Hedgewars-iOS, a Hedgewars port for iOS devices
+ * Copyright (c) 2009-2012 Vittorio Giovara <vittorio.giovara@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+
+#import "HelpPageLobbyViewController.h"
+
+
+@implementation HelpPageLobbyViewController
+@synthesize scrollView;
+
+-(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+    return rotationManager(interfaceOrientation);
+}
+
+-(void) didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    self.scrollView = nil;
+}
+
+// on iPhone the XIBs contain UIScrollView
+-(void) viewDidLoad {
+    if (IS_IPAD() == NO){
+        scrollView.contentSize = CGSizeMake(self.view.frame.size.width, 650);
+        scrollView.maximumZoomScale = 4.0;
+        scrollView.minimumZoomScale = 0.75;
+        scrollView.clipsToBounds = YES;
+        scrollView.delegate = self;
+    }
+    [super viewDidLoad];
+}
+
+-(void) viewDidUnload {
+    [super viewDidUnload];
+    self.scrollView = nil;
+}
+
+-(void) dealloc {
+    releaseAndNil(scrollView);
+    [super dealloc];
+}
+
+-(IBAction) dismiss {
+    [UIView animateWithDuration:0.5 animations:^{
+        self.view.alpha = 0;
+    } completion:^(BOOL finished){
+        [self.view performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:0];
+    }];
+}
+
+@end
--- a/project_files/HedgewarsMobile/Classes/HogHatViewController.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/HogHatViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -26,13 +26,11 @@
 
     NSArray *hatArray;
     UIImage *normalHogSprite;
-    NSIndexPath *lastIndexPath;
 }
 
 @property (nonatomic,retain) NSDictionary *teamDictionary;
 @property (nonatomic) NSInteger selectedHog;
 @property (nonatomic,retain) NSArray *hatArray;
 @property (nonatomic,retain) UIImage *normalHogSprite;
-@property (nonatomic,retain) NSIndexPath *lastIndexPath;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/HogHatViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/HogHatViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -21,7 +21,7 @@
 
 
 @implementation HogHatViewController
-@synthesize teamDictionary, hatArray, normalHogSprite, lastIndexPath, selectedHog;
+@synthesize teamDictionary, hatArray, normalHogSprite, selectedHog;
 
 
 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
@@ -77,8 +77,7 @@
     if (cell == nil)
         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
 
-    NSDictionary *hog = [[self.teamDictionary objectForKey:@"hedgehogs"] objectAtIndex:selectedHog];
-    NSString *hat = [hatArray objectAtIndex:[indexPath row]];
+    NSString *hat = [self.hatArray objectAtIndex:[indexPath row]];
     cell.textLabel.text = [hat stringByDeletingPathExtension];
 
     NSString *hatFile = [[NSString alloc] initWithFormat:@"%@/%@", HATS_DIRECTORY(), hat];
@@ -87,9 +86,9 @@
     cell.imageView.image = [self.normalHogSprite mergeWith:hatSprite atPoint:CGPointMake(0, 5)];
     [hatSprite release];
 
-    if ([hat isEqualToString:[hog objectForKey:@"hat"]]) {
+    NSDictionary *hog = (self.selectedHog != -1) ? [[self.teamDictionary objectForKey:@"hedgehogs"] objectAtIndex:self.selectedHog] : nil;
+    if ([[hat stringByDeletingPathExtension] isEqualToString:[hog objectForKey:@"hat"]]) {
         cell.accessoryType = UITableViewCellAccessoryCheckmark;
-        self.lastIndexPath = indexPath;
     } else {
         cell.accessoryType = UITableViewCellAccessoryNone;
     }
@@ -100,45 +99,53 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    int newRow = [indexPath row];
-    int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
-
-    if (newRow != oldRow) {
-        // if the two selected rows differ update data on the hog dictionary and reload table content
-        // TODO: maybe this section could be cleaned up
-        NSDictionary *oldHog = [[teamDictionary objectForKey:@"hedgehogs"] objectAtIndex:selectedHog];
+-(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    NSInteger selectedRow = [indexPath row];
+    NSString *newHat = [[self.hatArray objectAtIndex:selectedRow] stringByDeletingPathExtension];
+    
+    // update data on the hogs dictionary
+    if (self.selectedHog != -1)
+    {
+        // update only selected hog with new hat
+        [self updateTeamDictionaryWithNewHat:newHat forStartHogIndex:self.selectedHog toEndHogIndex:self.selectedHog];
+    }
+    else
+    {
+        // update all hogs with new hat
+        NSInteger startIndex = 0;
+        NSInteger endIndex = [[self.teamDictionary objectForKey:@"hedgehogs"] count] - 1;
+        [self updateTeamDictionaryWithNewHat:newHat forStartHogIndex:startIndex toEndHogIndex:endIndex];
+    }
 
-        NSMutableDictionary *newHog = [[NSMutableDictionary alloc] initWithDictionary: oldHog];
-        [newHog setObject:[[hatArray objectAtIndex:newRow] stringByDeletingPathExtension] forKey:@"hat"];
-        [[teamDictionary objectForKey:@"hedgehogs"] replaceObjectAtIndex:selectedHog withObject:newHog];
-        [newHog release];
-
-        // tell our boss to write this new stuff on disk
-        [[NSNotificationCenter defaultCenter] postNotificationName:@"setWriteNeedTeams" object:nil];
-
-        UITableViewCell *newCell = [aTableView cellForRowAtIndexPath:indexPath];
-        newCell.accessoryType = UITableViewCellAccessoryCheckmark;
-        UITableViewCell *oldCell = [aTableView cellForRowAtIndexPath:lastIndexPath];
-        oldCell.accessoryType = UITableViewCellAccessoryNone;
-        self.lastIndexPath = indexPath;
-        [aTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
-    }
-    [aTableView deselectRowAtIndexPath:indexPath animated:YES];
+    // tell our boss to write this new stuff on disk
+    [[NSNotificationCenter defaultCenter] postNotificationName:@"setWriteNeedTeams" object:nil];
+    
     [self.navigationController popViewControllerAnimated:YES];
 }
 
+- (void)updateTeamDictionaryWithNewHat:(NSString *)newHat forStartHogIndex:(NSInteger)startIndex toEndHogIndex:(NSInteger)endIndex
+{
+    NSMutableArray *hogsArray = [self.teamDictionary objectForKey:@"hedgehogs"];
+    
+    for (NSInteger i=startIndex; i <= endIndex; i++)
+    {
+        NSDictionary *oldHog = [hogsArray objectAtIndex:i];
+        NSMutableDictionary *newHog = [[NSMutableDictionary alloc] initWithDictionary:oldHog];
+        [newHog setObject:newHat forKey:@"hat"];
+        [hogsArray replaceObjectAtIndex:i withObject:newHog];
+        [newHog release];
+    }
+}
 
 #pragma mark -
 #pragma mark Memory management
 -(void) didReceiveMemoryWarning {
-    self.lastIndexPath = nil;
     MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
 
 -(void) viewDidUnload {
-    self.lastIndexPath = nil;
     self.normalHogSprite = nil;
     self.teamDictionary = nil;
     self.hatArray = nil;
@@ -150,7 +157,6 @@
     releaseAndNil(hatArray);
     releaseAndNil(teamDictionary);
     releaseAndNil(normalHogSprite);
-    releaseAndNil(lastIndexPath);
     [super dealloc];
 }
 
--- a/project_files/HedgewarsMobile/Classes/HoldTableViewCell.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/HoldTableViewCell.m	Mon Nov 09 18:37:57 2015 +0100
@@ -18,7 +18,7 @@
 
 
 #import "HoldTableViewCell.h"
-
+#import "UITableViewCell+FindTable.h"
 
 @implementation HoldTableViewCell
 @synthesize delegate;
@@ -57,7 +57,13 @@
 
 -(void) holdAction {
     if (self.delegate != nil && [self.delegate respondsToSelector:@selector(holdAction:onTable:)])
-        [self.delegate holdAction:self.textLabel.text onTable:(UITableView *)self.superview];
+    {
+        UITableView *tableView = [self findTable];
+        if (tableView)
+        {
+            [self.delegate holdAction:self.textLabel.text onTable:tableView];
+        }
+    }
 }
 
 -(void) dealloc {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/LabelWithIBLocalization.h	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,23 @@
+/*
+ * Hedgewars-iOS, a Hedgewars port for iOS devices
+ * Copyright (c) 2015 Anton Malmygin <antonc27@mail.ru>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface LabelWithIBLocalization : UILabel
+
+@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/LabelWithIBLocalization.m	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,41 @@
+/*
+ * Hedgewars-iOS, a Hedgewars port for iOS devices
+ * Copyright (c) 2015 Anton Malmygin <antonc27@mail.ru>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#import "LabelWithIBLocalization.h"
+
+@interface LabelWithIBLocalization ()
+@property (nonatomic) BOOL isAlreadyLocalized;
+@end
+
+@implementation LabelWithIBLocalization
+
+- (void)layoutSubviews
+{
+    [super layoutSubviews];
+    
+    if (!self.isAlreadyLocalized)
+    {
+        // Text which set in Interface Builder used here as a key for localization
+        self.text = NSLocalizedString(self.text, nil);
+        
+        [self setNeedsLayout];
+        self.isAlreadyLocalized = YES;
+    }
+}
+
+@end
--- a/project_files/HedgewarsMobile/Classes/LevelViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/LevelViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -31,7 +31,6 @@
 #pragma mark View lifecycle
 -(void) viewDidLoad {
     [super viewDidLoad];
-    srandom(time(NULL));
 
     NSArray *array = [[NSArray alloc] initWithObjects:
                       NSLocalizedString(@"Brutal",@""),
@@ -59,10 +58,6 @@
     [self.tableView setContentOffset:CGPointMake(0,0) animated:NO];
 }
 
--(void) viewWillDisappear:(BOOL)animated {
- // stuff like checking that at least 1 field was selected
-}
-
 #pragma mark -
 #pragma mark Table view data source
 -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
@@ -133,7 +128,7 @@
     if (theSwitch.on) {
         numberOfSections = 2;
         [self.tableView insertSections:sections withRowAnimation:UITableViewRowAnimationFade];
-        level = 1 + (random() % ([levelArray count] - 1));
+        level = 1 + arc4random_uniform((int)[levelArray count] - 1);
     } else {
         numberOfSections = 1;
         [self.tableView deleteSections:sections withRowAnimation:UITableViewRowAnimationFade];
@@ -141,9 +136,9 @@
     }
     [sections release];
 
-    DLog(@"New level is %d",level);
+    DLog(@"New level is %ld", (long)level);
     for (NSMutableDictionary *hog in hogs)
-        [hog setObject:[NSNumber numberWithInt:level] forKey:@"level"];
+        [hog setObject:[NSNumber numberWithInteger:level] forKey:@"level"];
 
     [self.tableView reloadData];
     [[NSNotificationCenter defaultCenter] postNotificationName:@"setWriteNeedTeams" object:nil];
@@ -153,8 +148,8 @@
 #pragma mark -
 #pragma mark Table view delegate
 -(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    int newRow = [indexPath row];
-    int oldRow = (self.lastIndexPath != nil) ? [self.lastIndexPath row] : -1;
+    NSInteger newRow = [indexPath row];
+    NSInteger oldRow = (self.lastIndexPath != nil) ? [self.lastIndexPath row] : -1;
 
     if ([indexPath section] != 0) {
         if (newRow != oldRow) {
@@ -162,8 +157,8 @@
 
             NSInteger level = newRow + 1;
             for (NSMutableDictionary *hog in hogs)
-                [hog setObject:[NSNumber numberWithInt:level] forKey:@"level"];
-            DLog(@"New level is %d",level);
+                [hog setObject:[NSNumber numberWithInteger:level] forKey:@"level"];
+            DLog(@"New level is %ld", (long)level);
 
             // tell our boss to write this new stuff on disk
             [[NSNotificationCenter defaultCenter] postNotificationName:@"setWriteNeedTeams" object:nil];
--- a/project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitCornersView.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitCornersView.h	Mon Nov 09 18:37:57 2015 +0100
@@ -9,23 +9,23 @@
 #import <UIKit/UIKit.h>
 
 typedef enum _MGCornersPosition {
-    MGCornersPositionLeadingVertical    = 0, // top of screen for a left/right split.
-    MGCornersPositionTrailingVertical   = 1, // bottom of screen for a left/right split.
-    MGCornersPositionLeadingHorizontal  = 2, // left of screen for a top/bottom split.
-    MGCornersPositionTrailingHorizontal = 3  // right of screen for a top/bottom split.
+	MGCornersPositionLeadingVertical	= 0, // top of screen for a left/right split.
+	MGCornersPositionTrailingVertical	= 1, // bottom of screen for a left/right split.
+	MGCornersPositionLeadingHorizontal	= 2, // left of screen for a top/bottom split.
+	MGCornersPositionTrailingHorizontal	= 3  // right of screen for a top/bottom split.
 } MGCornersPosition;
 
 @class MGSplitViewController;
 @interface MGSplitCornersView : UIView {
-    float cornerRadius;
-    MGSplitViewController *splitViewController;
-    MGCornersPosition cornersPosition;
-    UIColor *cornerBackgroundColor;
+	float cornerRadius;
+	MGSplitViewController *__unsafe_unretained splitViewController;
+	MGCornersPosition cornersPosition;
+	UIColor *cornerBackgroundColor;
 }
 
 @property (nonatomic, assign) float cornerRadius;
-@property (nonatomic, assign) MGSplitViewController *splitViewController; // weak ref.
+@property (nonatomic, unsafe_unretained) MGSplitViewController *splitViewController; // weak ref.
 @property (nonatomic, assign) MGCornersPosition cornersPosition; // don't change this manually; let the splitViewController manage it.
-@property (nonatomic, retain) UIColor *cornerBackgroundColor;
+@property (nonatomic, strong) UIColor *cornerBackgroundColor;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitCornersView.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitCornersView.m	Mon Nov 09 18:37:57 2015 +0100
@@ -7,7 +7,7 @@
 //
 
 #import "MGSplitCornersView.h"
-#import "CGPointUtils.h"
+
 
 @implementation MGSplitCornersView
 
@@ -19,23 +19,32 @@
 - (id)initWithFrame:(CGRect)frame
 {
     if ((self = [super initWithFrame:frame])) {
-        self.contentMode = UIViewContentModeRedraw;
-        self.userInteractionEnabled = NO;
-        self.opaque = NO;
-        self.backgroundColor = [UIColor clearColor];
-        cornerRadius = 0.0; // actual value is set by the splitViewController.
-        cornersPosition = MGCornersPositionLeadingVertical;
+		self.contentMode = UIViewContentModeRedraw;
+		self.userInteractionEnabled = NO;
+		self.opaque = NO;
+		self.backgroundColor = [UIColor clearColor];
+		cornerRadius = 0.0; // actual value is set by the splitViewController.
+		cornersPosition = MGCornersPositionLeadingVertical;
     }
-
+	
     return self;
 }
 
 
 - (void)dealloc
 {
-    self.cornerBackgroundColor = nil;
+	self.cornerBackgroundColor = nil;
+}
+
 
-    [super dealloc];
+#pragma mark -
+#pragma mark Geometry helpers
+
+
+static double deg2Rad(double degrees)
+{
+    // Converts degrees to radians.
+    return degrees * (M_PI / 180.0);
 }
 
 
@@ -45,131 +54,127 @@
 
 - (void)drawRect:(CGRect)rect
 {
-    // Draw two appropriate corners, with cornerBackgroundColor behind them.
-    if (cornerRadius > 0) {
-        if (NO) { // just for debugging.
-            [[UIColor redColor] set];
-            UIRectFill(self.bounds);
-        }
-
-        float maxX = CGRectGetMaxX(self.bounds);
-        float maxY = CGRectGetMaxY(self.bounds);
-        UIBezierPath *path = [UIBezierPath bezierPath];
-        CGPoint pt = CGPointZero;
-        switch (cornersPosition) {
-            case MGCornersPositionLeadingVertical: // top of screen for a left/right split
-                [path moveToPoint:pt];
-                pt.y += cornerRadius;
-                [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(90) endAngle:0 clockwise:YES]];
-                pt.x += cornerRadius;
-                pt.y -= cornerRadius;
-                [path addLineToPoint:pt];
-                [path addLineToPoint:CGPointZero];
-                [path closePath];
-
-                pt.x = maxX - cornerRadius;
-                pt.y = 0;
-                [path moveToPoint:pt];
-                pt.y = maxY;
-                [path addLineToPoint:pt];
-                pt.x += cornerRadius;
-                [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(180) endAngle:degreesToRadians(90) clockwise:YES]];
-                pt.y -= cornerRadius;
-                [path addLineToPoint:pt];
-                pt.x -= cornerRadius;
-                [path addLineToPoint:pt];
-                [path closePath];
-
-                break;
-
-            case MGCornersPositionTrailingVertical: // bottom of screen for a left/right split
-                pt.y = maxY;
-                [path moveToPoint:pt];
-                pt.y -= cornerRadius;
-                [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(270) endAngle:degreesToRadians(360) clockwise:NO]];
-                pt.x += cornerRadius;
-                pt.y += cornerRadius;
-                [path addLineToPoint:pt];
-                pt.x -= cornerRadius;
-                [path addLineToPoint:pt];
-                [path closePath];
-
-                pt.x = maxX - cornerRadius;
-                pt.y = maxY;
-                [path moveToPoint:pt];
-                pt.y -= cornerRadius;
-                [path addLineToPoint:pt];
-                pt.x += cornerRadius;
-                [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(180) endAngle:degreesToRadians(270) clockwise:NO]];
-                pt.y += cornerRadius;
-                [path addLineToPoint:pt];
-                pt.x -= cornerRadius;
-                [path addLineToPoint:pt];
-                [path closePath];
-
-                break;
-
-            case MGCornersPositionLeadingHorizontal: // left of screen for a top/bottom split
-                pt.x = 0;
-                pt.y = cornerRadius;
-                [path moveToPoint:pt];
-                pt.y -= cornerRadius;
-                [path addLineToPoint:pt];
-                pt.x += cornerRadius;
-                [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(180) endAngle:degreesToRadians(270) clockwise:NO]];
-                pt.y += cornerRadius;
-                [path addLineToPoint:pt];
-                pt.x -= cornerRadius;
-                [path addLineToPoint:pt];
-                [path closePath];
-
-                pt.x = 0;
-                pt.y = maxY - cornerRadius;
-                [path moveToPoint:pt];
-                pt.y = maxY;
-                [path addLineToPoint:pt];
-                pt.x += cornerRadius;
-                [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(180) endAngle:degreesToRadians(90) clockwise:YES]];
-                pt.y -= cornerRadius;
-                [path addLineToPoint:pt];
-                pt.x -= cornerRadius;
-                [path addLineToPoint:pt];
-                [path closePath];
-
-                break;
-
-            case MGCornersPositionTrailingHorizontal: // right of screen for a top/bottom split
-                pt.y = cornerRadius;
-                [path moveToPoint:pt];
-                pt.y -= cornerRadius;
-                [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(270) endAngle:degreesToRadians(360) clockwise:NO]];
-                pt.x += cornerRadius;
-                pt.y += cornerRadius;
-                [path addLineToPoint:pt];
-                pt.x -= cornerRadius;
-                [path addLineToPoint:pt];
-                [path closePath];
-
-                pt.y = maxY - cornerRadius;
-                [path moveToPoint:pt];
-                pt.y += cornerRadius;
-                [path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:degreesToRadians(90) endAngle:0 clockwise:YES]];
-                pt.x += cornerRadius;
-                pt.y -= cornerRadius;
-                [path addLineToPoint:pt];
-                pt.x -= cornerRadius;
-                [path addLineToPoint:pt];
-                [path closePath];
-
-                break;
-
-            default:
-                break;
-        }
-
-        [self.cornerBackgroundColor set];
-        [path fill];
-    }
+	// Draw two appropriate corners, with cornerBackgroundColor behind them.
+	if (cornerRadius > 0) {
+		
+		float maxX = CGRectGetMaxX(self.bounds);
+		float maxY = CGRectGetMaxY(self.bounds);
+		UIBezierPath *path = [UIBezierPath bezierPath];
+		CGPoint pt = CGPointZero;
+		switch (cornersPosition) {
+			case MGCornersPositionLeadingVertical: // top of screen for a left/right split
+				[path moveToPoint:pt];
+				pt.y += cornerRadius;
+				[path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(90) endAngle:0 clockwise:YES]];
+				pt.x += cornerRadius;
+				pt.y -= cornerRadius;
+				[path addLineToPoint:pt];
+				[path addLineToPoint:CGPointZero];
+				[path closePath];
+				
+				pt.x = maxX - cornerRadius;
+				pt.y = 0;
+				[path moveToPoint:pt];
+				pt.y = maxY;
+				[path addLineToPoint:pt];
+				pt.x += cornerRadius;
+				[path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(180) endAngle:(float)deg2Rad(90) clockwise:YES]];
+				pt.y -= cornerRadius;
+				[path addLineToPoint:pt];
+				pt.x -= cornerRadius;
+				[path addLineToPoint:pt];
+				[path closePath];
+				
+				break;
+				
+			case MGCornersPositionTrailingVertical: // bottom of screen for a left/right split
+				pt.y = maxY;
+				[path moveToPoint:pt];
+				pt.y -= cornerRadius;
+				[path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(270) endAngle:(float)deg2Rad(360) clockwise:NO]];
+				pt.x += cornerRadius;
+				pt.y += cornerRadius;
+				[path addLineToPoint:pt];
+				pt.x -= cornerRadius;
+				[path addLineToPoint:pt];
+				[path closePath];
+				
+				pt.x = maxX - cornerRadius;
+				pt.y = maxY;
+				[path moveToPoint:pt];
+				pt.y -= cornerRadius;
+				[path addLineToPoint:pt];
+				pt.x += cornerRadius;
+				[path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(180) endAngle:(float)deg2Rad(270) clockwise:NO]];
+				pt.y += cornerRadius;
+				[path addLineToPoint:pt];
+				pt.x -= cornerRadius;
+				[path addLineToPoint:pt];
+				[path closePath];
+				
+				break;
+				
+			case MGCornersPositionLeadingHorizontal: // left of screen for a top/bottom split
+				pt.x = 0;
+				pt.y = cornerRadius;
+				[path moveToPoint:pt];
+				pt.y -= cornerRadius;
+				[path addLineToPoint:pt];
+				pt.x += cornerRadius;
+				[path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(180) endAngle:(float)deg2Rad(270) clockwise:NO]];
+				pt.y += cornerRadius;
+				[path addLineToPoint:pt];
+				pt.x -= cornerRadius;
+				[path addLineToPoint:pt];
+				[path closePath];
+				
+				pt.x = 0;
+				pt.y = maxY - cornerRadius;
+				[path moveToPoint:pt];
+				pt.y = maxY;
+				[path addLineToPoint:pt];
+				pt.x += cornerRadius;
+				[path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(180) endAngle:(float)deg2Rad(90) clockwise:YES]];
+				pt.y -= cornerRadius;
+				[path addLineToPoint:pt];
+				pt.x -= cornerRadius;
+				[path addLineToPoint:pt];
+				[path closePath];
+				
+				break;
+				
+			case MGCornersPositionTrailingHorizontal: // right of screen for a top/bottom split
+				pt.y = cornerRadius;
+				[path moveToPoint:pt];
+				pt.y -= cornerRadius;
+				[path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(270) endAngle:(float)deg2Rad(360) clockwise:NO]];
+				pt.x += cornerRadius;
+				pt.y += cornerRadius;
+				[path addLineToPoint:pt];
+				pt.x -= cornerRadius;
+				[path addLineToPoint:pt];
+				[path closePath];
+				
+				pt.y = maxY - cornerRadius;
+				[path moveToPoint:pt];
+				pt.y += cornerRadius;
+				[path appendPath:[UIBezierPath bezierPathWithArcCenter:pt radius:cornerRadius startAngle:(float)deg2Rad(90) endAngle:0 clockwise:YES]];
+				pt.x += cornerRadius;
+				pt.y -= cornerRadius;
+				[path addLineToPoint:pt];
+				pt.x -= cornerRadius;
+				[path addLineToPoint:pt];
+				[path closePath];
+				
+				break;
+				
+			default:
+				break;
+		}
+		
+		[self.cornerBackgroundColor set];
+		[path fill];
+	}
 }
 
 
@@ -179,38 +184,37 @@
 
 - (void)setCornerRadius:(float)newRadius
 {
-    if (newRadius != cornerRadius) {
-        cornerRadius = newRadius;
-        [self setNeedsDisplay];
-    }
+	if (newRadius != cornerRadius) {
+		cornerRadius = newRadius;
+		[self setNeedsDisplay];
+	}
 }
 
 
 - (void)setSplitViewController:(MGSplitViewController *)theController
 {
-    if (theController != splitViewController) {
-        splitViewController = theController;
-        [self setNeedsDisplay];
-    }
+	if (theController != splitViewController) {
+		splitViewController = theController;
+		[self setNeedsDisplay];
+	}
 }
 
 
 - (void)setCornersPosition:(MGCornersPosition)posn
 {
-    if (cornersPosition != posn) {
-        cornersPosition = posn;
-        [self setNeedsDisplay];
-    }
+	if (cornersPosition != posn) {
+		cornersPosition = posn;
+		[self setNeedsDisplay];
+	}
 }
 
 
 - (void)setCornerBackgroundColor:(UIColor *)color
 {
-    if (color != cornerBackgroundColor) {
-        [cornerBackgroundColor release];
-        cornerBackgroundColor = [color retain];
-        [self setNeedsDisplay];
-    }
+	if (color != cornerBackgroundColor) {
+		cornerBackgroundColor = color;
+		[self setNeedsDisplay];
+	}
 }
 
 
--- a/project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitDividerView.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitDividerView.h	Mon Nov 09 18:37:57 2015 +0100
@@ -10,11 +10,11 @@
 
 @class MGSplitViewController;
 @interface MGSplitDividerView : UIView {
-    MGSplitViewController *splitViewController;
-    BOOL allowsDragging;
+	MGSplitViewController *__unsafe_unretained splitViewController;
+	BOOL allowsDragging;
 }
 
-@property (nonatomic, assign) MGSplitViewController *splitViewController; // weak ref.
+@property (nonatomic, unsafe_unretained) MGSplitViewController *splitViewController; // weak ref.
 @property (nonatomic, assign) BOOL allowsDragging;
 
 - (void)drawGripThumbInRect:(CGRect)rect;
--- a/project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitDividerView.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitDividerView.m	Mon Nov 09 18:37:57 2015 +0100
@@ -19,19 +19,18 @@
 
 - (id)initWithFrame:(CGRect)frame
 {
-    if ((self = [super initWithFrame:frame])) {
-        self.userInteractionEnabled = NO;
-        self.allowsDragging = NO;
-        self.contentMode = UIViewContentModeRedraw;
-    }
-    return self;
+	if ((self = [super initWithFrame:frame])) {
+		self.userInteractionEnabled = NO;
+		self.allowsDragging = NO;
+		self.contentMode = UIViewContentModeRedraw;
+	}
+	return self;
 }
 
 
 - (void)dealloc
 {
-    self.splitViewController = nil;
-    [super dealloc];
+	self.splitViewController = nil;
 }
 
 
@@ -41,139 +40,139 @@
 
 - (void)drawRect:(CGRect)rect
 {
-    if (splitViewController.dividerStyle == MGSplitViewDividerStyleThin) {
-        [super drawRect:rect];
-
-    } else if (splitViewController.dividerStyle == MGSplitViewDividerStylePaneSplitter) {
-        // Draw gradient background.
-        CGRect bounds = self.bounds;
-        CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
-        CGFloat locations[2] = {0, 1};
-        CGFloat components[8] = {   0.988, 0.988, 0.988, 1.0,  // light
-                                    0.875, 0.875, 0.875, 1.0 };// dark
-        CGGradientRef gradient = CGGradientCreateWithColorComponents (rgb, components, locations, 2);
-        CGContextRef context = UIGraphicsGetCurrentContext();
-        CGPoint start, end;
-        if (splitViewController.vertical) {
-            // Light left to dark right.
-            start = CGPointMake(CGRectGetMinX(bounds), CGRectGetMidY(bounds));
-            end = CGPointMake(CGRectGetMaxX(bounds), CGRectGetMidY(bounds));
-        } else {
-            // Light top to dark bottom.
-            start = CGPointMake(CGRectGetMidX(bounds), CGRectGetMinY(bounds));
-            end = CGPointMake(CGRectGetMidX(bounds), CGRectGetMaxY(bounds));
-        }
-        CGContextDrawLinearGradient(context, gradient, start, end, 0);
-        CGColorSpaceRelease(rgb);
-        CGGradientRelease(gradient);
-
-        // Draw borders.
-        float borderThickness = 1.0;
-        [[UIColor colorWithWhite:0.7 alpha:1.0] set];
-        CGRect borderRect = bounds;
-        if (splitViewController.vertical) {
-            borderRect.size.width = borderThickness;
-            UIRectFill(borderRect);
-            borderRect.origin.x = CGRectGetMaxX(bounds) - borderThickness;
-            UIRectFill(borderRect);
-
-        } else {
-            borderRect.size.height = borderThickness;
-            UIRectFill(borderRect);
-            borderRect.origin.y = CGRectGetMaxY(bounds) - borderThickness;
-            UIRectFill(borderRect);
-        }
-
-        // Draw grip.
-        [self drawGripThumbInRect:bounds];
-    }
+	if (splitViewController.dividerStyle == MGSplitViewDividerStyleThin) {
+		[super drawRect:rect];
+		
+	} else if (splitViewController.dividerStyle == MGSplitViewDividerStylePaneSplitter) {
+		// Draw gradient background.
+		CGRect bounds = self.bounds;
+		CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
+		CGFloat locations[2] = {0, 1};
+		CGFloat components[8] = {	0.988f, 0.988f, 0.988f, 1.0,  // light
+									0.875, 0.875, 0.875, 1.0 };// dark
+		CGGradientRef gradient = CGGradientCreateWithColorComponents (rgb, components, locations, 2);
+		CGContextRef context = UIGraphicsGetCurrentContext();
+		CGPoint start, end;
+		if (splitViewController.vertical) {
+			// Light left to dark right.
+			start = CGPointMake(CGRectGetMinX(bounds), CGRectGetMidY(bounds));
+			end = CGPointMake(CGRectGetMaxX(bounds), CGRectGetMidY(bounds));
+		} else {
+			// Light top to dark bottom.
+			start = CGPointMake(CGRectGetMidX(bounds), CGRectGetMinY(bounds));
+			end = CGPointMake(CGRectGetMidX(bounds), CGRectGetMaxY(bounds));
+		}
+		CGContextDrawLinearGradient(context, gradient, start, end, 0);
+		CGColorSpaceRelease(rgb);
+		CGGradientRelease(gradient);
+		
+		// Draw borders.
+		float borderThickness = 1.0;
+		[[UIColor colorWithWhite:0.7f alpha:1.0] set];
+		CGRect borderRect = bounds;
+		if (splitViewController.vertical) {
+			borderRect.size.width = borderThickness;
+			UIRectFill(borderRect);
+			borderRect.origin.x = CGRectGetMaxX(bounds) - borderThickness;
+			UIRectFill(borderRect);
+			
+		} else {
+			borderRect.size.height = borderThickness;
+			UIRectFill(borderRect);
+			borderRect.origin.y = CGRectGetMaxY(bounds) - borderThickness;
+			UIRectFill(borderRect);
+		}
+		
+		// Draw grip.
+		[self drawGripThumbInRect:bounds];
+	}
 }
 
 
 - (void)drawGripThumbInRect:(CGRect)rect
 {
-    float width = 9.0;
-    float height;
-    if (splitViewController.vertical) {
-        height = 30.0;
-    } else {
-        height = width;
-        width = 30.0;
-    }
-
-    // Draw grip in centred in rect.
-    CGRect gripRect = CGRectMake(0, 0, width, height);
-    gripRect.origin.x = ((rect.size.width - gripRect.size.width) / 2.0);
-    gripRect.origin.y = ((rect.size.height - gripRect.size.height) / 2.0);
-
-    float stripThickness = 1.0;
-    UIColor *stripColor = [UIColor colorWithWhite:0.35 alpha:1.0];
-    UIColor *lightColor = [UIColor colorWithWhite:1.0 alpha:1.0];
-    float space = 3.0;
-    if (splitViewController.vertical) {
-        gripRect.size.width = stripThickness;
-        [stripColor set];
-        UIRectFill(gripRect);
-
-        gripRect.origin.x += stripThickness;
-        gripRect.origin.y += 1;
-        [lightColor set];
-        UIRectFill(gripRect);
-        gripRect.origin.x -= stripThickness;
-        gripRect.origin.y -= 1;
-
-        gripRect.origin.x += space + stripThickness;
-        [stripColor set];
-        UIRectFill(gripRect);
-
-        gripRect.origin.x += stripThickness;
-        gripRect.origin.y += 1;
-        [lightColor set];
-        UIRectFill(gripRect);
-        gripRect.origin.x -= stripThickness;
-        gripRect.origin.y -= 1;
-
-        gripRect.origin.x += space + stripThickness;
-        [stripColor set];
-        UIRectFill(gripRect);
-
-        gripRect.origin.x += stripThickness;
-        gripRect.origin.y += 1;
-        [lightColor set];
-        UIRectFill(gripRect);
-
-    } else {
-        gripRect.size.height = stripThickness;
-        [stripColor set];
-        UIRectFill(gripRect);
-
-        gripRect.origin.y += stripThickness;
-        gripRect.origin.x -= 1;
-        [lightColor set];
-        UIRectFill(gripRect);
-        gripRect.origin.y -= stripThickness;
-        gripRect.origin.x += 1;
-
-        gripRect.origin.y += space + stripThickness;
-        [stripColor set];
-        UIRectFill(gripRect);
-
-        gripRect.origin.y += stripThickness;
-        gripRect.origin.x -= 1;
-        [lightColor set];
-        UIRectFill(gripRect);
-        gripRect.origin.y -= stripThickness;
-        gripRect.origin.x += 1;
-
-        gripRect.origin.y += space + stripThickness;
-        [stripColor set];
-        UIRectFill(gripRect);
-
-        gripRect.origin.y += stripThickness;
-        gripRect.origin.x -= 1;
-        [lightColor set];
-        UIRectFill(gripRect);
-    }
+	float width = 9.0;
+	float height;
+	if (splitViewController.vertical) {
+		height = 30.0;
+	} else {
+		height = width;
+		width = 30.0;
+	}
+	
+	// Draw grip in centred in rect.
+	CGRect gripRect = CGRectMake(0, 0, width, height);
+	gripRect.origin.x = ((rect.size.width - gripRect.size.width) / 2.f);
+	gripRect.origin.y = ((rect.size.height - gripRect.size.height) / 2.f);
+	
+	float stripThickness = 1.0;
+	UIColor *stripColor = [UIColor colorWithWhite:0.35f alpha:1.0];
+	UIColor *lightColor = [UIColor colorWithWhite:1.0 alpha:1.0];
+	float space = 3.0;
+	if (splitViewController.vertical) {
+		gripRect.size.width = stripThickness;
+		[stripColor set];
+		UIRectFill(gripRect);
+		
+		gripRect.origin.x += stripThickness;
+		gripRect.origin.y += 1;
+		[lightColor set];
+		UIRectFill(gripRect);
+		gripRect.origin.x -= stripThickness;
+		gripRect.origin.y -= 1;
+		
+		gripRect.origin.x += space + stripThickness;
+		[stripColor set];
+		UIRectFill(gripRect);
+		
+		gripRect.origin.x += stripThickness;
+		gripRect.origin.y += 1;
+		[lightColor set];
+		UIRectFill(gripRect);
+		gripRect.origin.x -= stripThickness;
+		gripRect.origin.y -= 1;
+		
+		gripRect.origin.x += space + stripThickness;
+		[stripColor set];
+		UIRectFill(gripRect);
+		
+		gripRect.origin.x += stripThickness;
+		gripRect.origin.y += 1;
+		[lightColor set];
+		UIRectFill(gripRect);
+		
+	} else {
+		gripRect.size.height = stripThickness;
+		[stripColor set];
+		UIRectFill(gripRect);
+		
+		gripRect.origin.y += stripThickness;
+		gripRect.origin.x -= 1;
+		[lightColor set];
+		UIRectFill(gripRect);
+		gripRect.origin.y -= stripThickness;
+		gripRect.origin.x += 1;
+		
+		gripRect.origin.y += space + stripThickness;
+		[stripColor set];
+		UIRectFill(gripRect);
+		
+		gripRect.origin.y += stripThickness;
+		gripRect.origin.x -= 1;
+		[lightColor set];
+		UIRectFill(gripRect);
+		gripRect.origin.y -= stripThickness;
+		gripRect.origin.x += 1;
+		
+		gripRect.origin.y += space + stripThickness;
+		[stripColor set];
+		UIRectFill(gripRect);
+		
+		gripRect.origin.y += stripThickness;
+		gripRect.origin.x -= 1;
+		[lightColor set];
+		UIRectFill(gripRect);
+	}
 }
 
 
@@ -183,16 +182,16 @@
 
 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
 {
-    UITouch *touch = [touches anyObject];
-    if (touch) {
-        CGPoint lastPt = [touch previousLocationInView:self];
-        CGPoint pt = [touch locationInView:self];
-        float offset = (splitViewController.vertical) ? pt.x - lastPt.x : pt.y - lastPt.y;
-        if (!splitViewController.masterBeforeDetail) {
-            offset = -offset;
-        }
-        splitViewController.splitPosition = splitViewController.splitPosition + offset;
-    }
+	UITouch *touch = [touches anyObject];
+	if (touch) {
+		CGPoint lastPt = [touch previousLocationInView:self];
+		CGPoint pt = [touch locationInView:self];
+		float offset = (splitViewController.vertical) ? pt.x - lastPt.x : pt.y - lastPt.y;
+		if (!splitViewController.masterBeforeDetail) {
+			offset = -offset;
+		}
+		splitViewController.splitPosition = splitViewController.splitPosition + offset;
+	}
 }
 
 
@@ -202,10 +201,10 @@
 
 - (void)setAllowsDragging:(BOOL)flag
 {
-    if (flag != allowsDragging) {
-        allowsDragging = flag;
-        self.userInteractionEnabled = allowsDragging;
-    }
+	if (flag != allowsDragging) {
+		allowsDragging = flag;
+		self.userInteractionEnabled = allowsDragging;
+	}
 }
 
 
--- a/project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitViewController.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -9,31 +9,32 @@
 #import <UIKit/UIKit.h>
 
 typedef enum _MGSplitViewDividerStyle {
-    // These names have been chosen to be conceptually similar to those of NSSplitView on Mac OS X.
-    MGSplitViewDividerStyleThin         = 0, // Thin divider, like UISplitViewController (default).
-    MGSplitViewDividerStylePaneSplitter = 1  // Thick divider, drawn with a grey gradient and a grab-strip.
+	// These names have been chosen to be conceptually similar to those of NSSplitView on Mac OS X.
+	MGSplitViewDividerStyleThin			= 0, // Thin divider, like UISplitViewController (default).
+	MGSplitViewDividerStylePaneSplitter	= 1  // Thick divider, drawn with a grey gradient and a grab-strip.
 } MGSplitViewDividerStyle;
 
 @class MGSplitDividerView;
 @protocol MGSplitViewControllerDelegate;
 @interface MGSplitViewController : UIViewController <UIPopoverControllerDelegate> {
-    BOOL _showsMasterInPortrait;
-    BOOL _showsMasterInLandscape;
-    float _splitWidth;
-    id _delegate;
-    BOOL _vertical;
-    BOOL _masterBeforeDetail;
-    NSMutableArray *_viewControllers;
-    UIBarButtonItem *_barButtonItem; // To be compliant with wacky UISplitViewController behaviour.
+	BOOL _showsMasterInPortrait;
+	BOOL _showsMasterInLandscape;
+	float _splitWidth;
+	id _delegate;
+	BOOL _vertical;
+	BOOL _masterBeforeDetail;
+	NSMutableArray *_viewControllers;
+	UIBarButtonItem *_barButtonItem; // To be compliant with wacky UISplitViewController behaviour.
     UIPopoverController *_hiddenPopoverController; // Popover used to hold the master view if it's not always visible.
-    MGSplitDividerView *_dividerView; // View that draws the divider between the master and detail views.
-    NSArray *_cornerViews; // Views to draw the inner rounded corners between master and detail views.
-    float _splitPosition;
-    BOOL _reconfigurePopup;
-    MGSplitViewDividerStyle _dividerStyle; // Meta-setting which configures several aspects of appearance and behaviour.
+	MGSplitDividerView *_dividerView; // View that draws the divider between the master and detail views.
+	NSArray *_cornerViews; // Views to draw the inner rounded corners between master and detail views.
+	float _splitPosition;
+	BOOL _reconfigurePopup;
+	MGSplitViewDividerStyle _dividerStyle; // Meta-setting which configures several aspects of appearance and behaviour.
+	BOOL togglesMasterPopover;
 }
 
-@property (nonatomic, assign) IBOutlet id <MGSplitViewControllerDelegate> delegate;
+@property (nonatomic, unsafe_unretained) IBOutlet id <MGSplitViewControllerDelegate> delegate;
 @property (nonatomic, assign) BOOL showsMasterInPortrait; // applies to both portrait orientations (default NO)
 @property (nonatomic, assign) BOOL showsMasterInLandscape; // applies to both landscape orientations (default YES)
 @property (nonatomic, assign, getter=isVertical) BOOL vertical; // if NO, split is horizontal, i.e. master above detail (default YES)
@@ -43,31 +44,34 @@
 @property (nonatomic, assign) BOOL allowsDraggingDivider; // whether to let the user drag the divider to alter the split position (default NO).
 
 @property (nonatomic, copy) NSArray *viewControllers; // array of UIViewControllers; master is at index 0, detail is at index 1.
-@property (nonatomic, retain) IBOutlet UIViewController *masterViewController; // convenience.
-@property (nonatomic, retain) IBOutlet UIViewController *detailViewController; // convenience.
-@property (nonatomic, retain) MGSplitDividerView *dividerView; // the view which draws the divider/split between master and detail.
+@property (nonatomic, strong) IBOutlet UIViewController *masterViewController; // convenience.
+@property (nonatomic, strong) IBOutlet UIViewController *detailViewController; // convenience.
+@property (nonatomic, strong) MGSplitDividerView *dividerView; // the view which draws the divider/split between master and detail.
 @property (nonatomic, assign) MGSplitViewDividerStyle dividerStyle; // style (and behaviour) of the divider between master and detail.
 
 @property (nonatomic, readonly, getter=isLandscape) BOOL landscape; // returns YES if this view controller is in either of the two Landscape orientations, else NO.
 
+@property (nonatomic, readwrite) BOOL togglesMasterPopover; // default is NO.
+
 // Actions
 - (IBAction)toggleSplitOrientation:(id)sender; // toggles split axis between vertical (left/right; default) and horizontal (top/bottom).
 - (IBAction)toggleMasterBeforeDetail:(id)sender; // toggles position of master view relative to detail view.
 - (IBAction)toggleMasterView:(id)sender; // toggles display of the master view in the current orientation.
 - (IBAction)showMasterPopover:(id)sender; // shows the master view in a popover spawned from the provided barButtonItem, if it's currently hidden.
+- (IBAction)hideMasterPopover:(id)sender; // hides the master view in a popover spawned from the provided barButtonItem, if it's currently shown.
 - (void)notePopoverDismissed; // should rarely be needed, because you should not change the popover's delegate. If you must, then call this when it's dismissed.
 
 // Conveniences for you, because I care.
 - (BOOL)isShowingMaster;
 - (void)setSplitPosition:(float)posn animated:(BOOL)animate; // Allows for animation of splitPosition changes. The property's regular setter is not animated.
-/* Note:    splitPosition is the width (in a left/right split, or height in a top/bottom split) of the master view.
-            It is relative to the appropriate side of the splitView, which can be any of the four sides depending on the values in isMasterBeforeDetail and isVertical:
-                isVertical = YES, isMasterBeforeDetail = YES: splitPosition is relative to the LEFT edge. (Default)
-                isVertical = YES, isMasterBeforeDetail = NO: splitPosition is relative to the RIGHT edge.
-                isVertical = NO, isMasterBeforeDetail = YES: splitPosition is relative to the TOP edge.
-                isVertical = NO, isMasterBeforeDetail = NO: splitPosition is relative to the BOTTOM edge.
+/* Note:	splitPosition is the width (in a left/right split, or height in a top/bottom split) of the master view.
+			It is relative to the appropriate side of the splitView, which can be any of the four sides depending on the values in isMasterBeforeDetail and isVertical:
+				isVertical = YES, isMasterBeforeDetail = YES: splitPosition is relative to the LEFT edge. (Default)
+				isVertical = YES, isMasterBeforeDetail = NO: splitPosition is relative to the RIGHT edge.
+ 				isVertical = NO, isMasterBeforeDetail = YES: splitPosition is relative to the TOP edge.
+ 				isVertical = NO, isMasterBeforeDetail = NO: splitPosition is relative to the BOTTOM edge.
 
-            This implementation was chosen so you don't need to recalculate equivalent splitPositions if the user toggles masterBeforeDetail themselves.
+			This implementation was chosen so you don't need to recalculate equivalent splitPositions if the user toggles masterBeforeDetail themselves.
  */
 - (void)setDividerStyle:(MGSplitViewDividerStyle)newStyle animated:(BOOL)animate; // Allows for animation of dividerStyle changes. The property's regular setter is not animated.
 - (NSArray *)cornerViews;
@@ -76,8 +80,8 @@
  The first view is the "leading" corners (top edge of screen for left/right split, left edge of screen for top/bottom split).
  The second view is the "trailing" corners (bottom edge of screen for left/right split, right edge of screen for top/bottom split).
  Do NOT modify them, except to:
-    1. Change their .cornerBackgroundColor
-    2. Change their .cornerRadius
+	1. Change their .cornerBackgroundColor
+	2. Change their .cornerRadius
  */
 
 @end
@@ -88,21 +92,26 @@
 @optional
 
 // Called when a button should be added to a toolbar for a hidden view controller.
-- (void)splitViewController:(MGSplitViewController*)svc
-     willHideViewController:(UIViewController *)aViewController
-          withBarButtonItem:(UIBarButtonItem*)barButtonItem
-       forPopoverController: (UIPopoverController*)pc;
+- (void)splitViewController:(MGSplitViewController*)svc 
+	 willHideViewController:(UIViewController *)aViewController 
+		  withBarButtonItem:(UIBarButtonItem*)barButtonItem 
+	   forPopoverController: (UIPopoverController*)pc;
 
 // Called when the master view is shown again in the split view, invalidating the button and popover controller.
-- (void)splitViewController:(MGSplitViewController*)svc
-     willShowViewController:(UIViewController *)aViewController
+- (void)splitViewController:(MGSplitViewController*)svc 
+	 willShowViewController:(UIViewController *)aViewController 
   invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem;
 
 // Called when the master view is shown in a popover, so the delegate can take action like hiding other popovers.
-- (void)splitViewController:(MGSplitViewController*)svc
-          popoverController:(UIPopoverController*)pc
+- (void)splitViewController:(MGSplitViewController*)svc 
+		  popoverController:(UIPopoverController*)pc 
   willPresentViewController:(UIViewController *)aViewController;
 
+// Called when a popover containing the master view is going to be hidden so the delegate can take action like showing other popovers.  This only happens if togglesMasterPopover is set to YES.
+- (void)splitViewController:(MGSplitViewController*)svc 
+		  popoverController:(UIPopoverController*)pc 
+  willDismissViewController:(UIViewController *)aViewController;
+
 // Called when the split orientation will change (from vertical to horizontal, or vice versa).
 - (void)splitViewController:(MGSplitViewController*)svc willChangeSplitOrientationToVertical:(BOOL)isVertical;
 
--- a/project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -10,19 +10,18 @@
 #import "MGSplitDividerView.h"
 #import "MGSplitCornersView.h"
 
-#define MG_DEFAULT_SPLIT_POSITION       320.0   // default width of master view in UISplitViewController.
-#define MG_DEFAULT_SPLIT_WIDTH          1.0     // default width of split-gutter in UISplitViewController.
-#define MG_DEFAULT_CORNER_RADIUS        5.0     // default corner-radius of overlapping split-inner corners on the master and detail views.
-#define MG_DEFAULT_CORNER_COLOR         [UIColor blackColor]    // default color of intruding inner corners (and divider background).
+#define MG_DEFAULT_SPLIT_POSITION		320.0	// default width of master view in UISplitViewController.
+#define MG_DEFAULT_SPLIT_WIDTH			1.0		// default width of split-gutter in UISplitViewController.
+#define MG_DEFAULT_CORNER_RADIUS		5.0		// default corner-radius of overlapping split-inner corners on the master and detail views.
+#define MG_DEFAULT_CORNER_COLOR			[UIColor blackColor]	// default color of intruding inner corners (and divider background).
 
-#define MG_PANESPLITTER_CORNER_RADIUS   0.0     // corner-radius of split-inner corners for MGSplitViewDividerStylePaneSplitter style.
-#define MG_PANESPLITTER_SPLIT_WIDTH     25.0    // width of split-gutter for MGSplitViewDividerStylePaneSplitter style.
+#define MG_PANESPLITTER_CORNER_RADIUS	0.0		// corner-radius of split-inner corners for MGSplitViewDividerStylePaneSplitter style.
+#define MG_PANESPLITTER_SPLIT_WIDTH		25.0	// width of split-gutter for MGSplitViewDividerStylePaneSplitter style.
 
-#define MG_MIN_VIEW_WIDTH               200.0   // minimum width a view is allowed to become as a result of changing the splitPosition.
+#define MG_MIN_VIEW_WIDTH				200.0	// minimum width a view is allowed to become as a result of changing the splitPosition.
 
-#define MG_ANIMATION_CHANGE_SPLIT_ORIENTATION   @"ChangeSplitOrientation"   // Animation ID for internal use.
-#define MG_ANIMATION_CHANGE_SUBVIEWS_ORDER      @"ChangeSubviewsOrder"  // Animation ID for internal use.
-
+#define MG_ANIMATION_CHANGE_SPLIT_ORIENTATION	@"ChangeSplitOrientation"	// Animation ID for internal use.
+#define MG_ANIMATION_CHANGE_SUBVIEWS_ORDER		@"ChangeSubviewsOrder"	// Animation ID for internal use.
 
 @interface MGSplitViewController (MGPrivateMethods)
 
@@ -48,50 +47,50 @@
 
 - (NSString *)nameOfInterfaceOrientation:(UIInterfaceOrientation)theOrientation
 {
-    NSString *orientationName = nil;
-    switch (theOrientation) {
-        case UIInterfaceOrientationPortrait:
-            orientationName = @"Portrait"; // Home button at bottom
-            break;
-        case UIInterfaceOrientationPortraitUpsideDown:
-            orientationName = @"Portrait (Upside Down)"; // Home button at top
-            break;
-        case UIInterfaceOrientationLandscapeLeft:
-            orientationName = @"Landscape (Left)"; // Home button on left
-            break;
-        case UIInterfaceOrientationLandscapeRight:
-            orientationName = @"Landscape (Right)"; // Home button on right
-            break;
-        default:
-            break;
-    }
-
-    return orientationName;
+	NSString *orientationName = nil;
+	switch (theOrientation) {
+		case UIInterfaceOrientationPortrait:
+			orientationName = @"Portrait"; // Home button at bottom
+			break;
+		case UIInterfaceOrientationPortraitUpsideDown:
+			orientationName = @"Portrait (Upside Down)"; // Home button at top
+			break;
+		case UIInterfaceOrientationLandscapeLeft:
+			orientationName = @"Landscape (Left)"; // Home button on left
+			break;
+		case UIInterfaceOrientationLandscapeRight:
+			orientationName = @"Landscape (Right)"; // Home button on right
+			break;
+		default:
+			break;
+	}
+	
+	return orientationName;
 }
 
 
 - (BOOL)isLandscape
 {
-    return UIInterfaceOrientationIsLandscape(self.interfaceOrientation);
+	return UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]);
 }
 
 
 - (BOOL)shouldShowMasterForInterfaceOrientation:(UIInterfaceOrientation)theOrientation
 {
-    // Returns YES if master view should be shown directly embedded in the splitview, instead of hidden in a popover.
-    return ((UIInterfaceOrientationIsLandscape(theOrientation)) ? _showsMasterInLandscape : _showsMasterInPortrait);
+	// Returns YES if master view should be shown directly embedded in the splitview, instead of hidden in a popover.
+	return ((UIInterfaceOrientationIsLandscape(theOrientation)) ? _showsMasterInLandscape : _showsMasterInPortrait);
 }
 
 
 - (BOOL)shouldShowMaster
 {
-    return [self shouldShowMasterForInterfaceOrientation:self.interfaceOrientation];
+	return [self shouldShowMasterForInterfaceOrientation:[[UIApplication sharedApplication] statusBarOrientation]];
 }
 
 
 - (BOOL)isShowingMaster
 {
-    return [self shouldShowMaster] && self.masterViewController && self.masterViewController.view && ([self.masterViewController.view superview] == self.view);
+	return [self shouldShowMaster] && self.masterViewController && self.masterViewController.view && ([self.masterViewController.view superview] == self.view);
 }
 
 
@@ -101,61 +100,58 @@
 
 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
 {
-    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
-        [self setup];
-    }
-
-    return self;
+	if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
+		[self setup];
+	}
+	
+	return self;
 }
 
 
 - (id)initWithCoder:(NSCoder *)aDecoder
 {
-    if ((self = [super initWithCoder:aDecoder])) {
-        [self setup];
-    }
-
-    return self;
+	if ((self = [super initWithCoder:aDecoder])) {
+		[self setup];
+	}
+	
+	return self;
 }
 
 
 - (void)setup
 {
-    // Configure default behaviour.
-    _viewControllers = [[NSMutableArray alloc] initWithObjects:[NSNull null], [NSNull null], nil];
-    _splitWidth = MG_DEFAULT_SPLIT_WIDTH;
-    _showsMasterInPortrait = NO;
-    _showsMasterInLandscape = YES;
-    _reconfigurePopup = NO;
-    _vertical = YES;
-    _masterBeforeDetail = YES;
-    _splitPosition = MG_DEFAULT_SPLIT_POSITION;
-    CGRect divRect = self.view.bounds;
-    if ([self isVertical]) {
-        divRect.origin.y = _splitPosition;
-        divRect.size.height = _splitWidth;
-    } else {
-        divRect.origin.x = _splitPosition;
-        divRect.size.width = _splitWidth;
-    }
-    _dividerView = [[MGSplitDividerView alloc] initWithFrame:divRect];
-    _dividerView.splitViewController = self;
-    _dividerView.backgroundColor = MG_DEFAULT_CORNER_COLOR;
-    _dividerStyle = MGSplitViewDividerStyleThin;
+	// Configure default behaviour.
+	_viewControllers = [[NSMutableArray alloc] initWithObjects:[NSNull null], [NSNull null], nil];
+	_splitWidth = MG_DEFAULT_SPLIT_WIDTH;
+	_showsMasterInPortrait = NO;
+	_showsMasterInLandscape = YES;
+	_reconfigurePopup = NO;
+	_vertical = YES;
+	_masterBeforeDetail = YES;
+	_splitPosition = MG_DEFAULT_SPLIT_POSITION;
+	CGRect divRect = self.view.bounds;
+	if ([self isVertical]) {
+		divRect.origin.y = _splitPosition;
+		divRect.size.height = _splitWidth;
+	} else {
+		divRect.origin.x = _splitPosition;
+		divRect.size.width = _splitWidth;
+	}
+	_dividerView = [[MGSplitDividerView alloc] initWithFrame:divRect];
+	_dividerView.splitViewController = self;
+	_dividerView.backgroundColor = MG_DEFAULT_CORNER_COLOR;
+	_dividerStyle = MGSplitViewDividerStyleThin;
+
+    // fix for iOS 6 layout
+    self.view.autoresizesSubviews = NO;
 }
 
 
 - (void)dealloc
 {
-    _delegate = nil;
-    [self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
-    [_viewControllers release];
-    [_barButtonItem release];
-    [_hiddenPopoverController release];
-    [_dividerView release];
-    [_cornerViews release];
-
-    [super dealloc];
+	_delegate = nil;
+	_viewControllers = nil;
+	[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
 }
 
 
@@ -165,377 +161,370 @@
 
 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
 {
+    if (self.detailViewController)
+    {
+        return [self.detailViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
+    }
+
     return YES;
 }
 
 
 - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
 {
-    [self.masterViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
-    [self.detailViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
+	[self.masterViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
+	[self.detailViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
 }
 
 
 - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
 {
-    [self.masterViewController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
-    [self.detailViewController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
+	[self.masterViewController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
+	[self.detailViewController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
 }
 
 
-- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
-                                         duration:(NSTimeInterval)duration
+- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
+										 duration:(NSTimeInterval)duration
 {
-    [self.masterViewController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
-    [self.detailViewController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
-
-    // Hide popover.
-    if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
-        [_hiddenPopoverController dismissPopoverAnimated:NO];
-    }
-
-    // Re-tile views.
-    _reconfigurePopup = YES;
-    [self layoutSubviewsForInterfaceOrientation:toInterfaceOrientation withAnimation:YES];
-}
-
-
-- (void)willAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
-{
-    [self.masterViewController willAnimateFirstHalfOfRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
-    [self.detailViewController willAnimateFirstHalfOfRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
-}
-
-
-- (void)didAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
-{
-    [self.masterViewController didAnimateFirstHalfOfRotationToInterfaceOrientation:toInterfaceOrientation];
-    [self.detailViewController didAnimateFirstHalfOfRotationToInterfaceOrientation:toInterfaceOrientation];
-}
-
-
-- (void)willAnimateSecondHalfOfRotationFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation duration:(NSTimeInterval)duration
-{
-    [self.masterViewController willAnimateSecondHalfOfRotationFromInterfaceOrientation:fromInterfaceOrientation duration:duration];
-    [self.detailViewController willAnimateSecondHalfOfRotationFromInterfaceOrientation:fromInterfaceOrientation duration:duration];
+	[self.masterViewController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
+	[self.detailViewController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
+	
+	// Hide popover.
+	if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
+		[_hiddenPopoverController dismissPopoverAnimated:NO];
+	}
+	
+	// Re-tile views.
+	_reconfigurePopup = YES;
+	[self layoutSubviewsForInterfaceOrientation:toInterfaceOrientation withAnimation:YES];
 }
 
 
 - (CGSize)splitViewSizeForOrientation:(UIInterfaceOrientation)theOrientation
 {
-    UIScreen *screen = [UIScreen mainScreen];
-    CGRect fullScreenRect = screen.bounds; // always implicitly in Portrait orientation.
-    CGRect appFrame = screen.applicationFrame;
-
-    // Find status bar height by checking which dimension of the applicationFrame is narrower than screen bounds.
-    // Little bit ugly looking, but it'll still work even if they change the status bar height in future.
-    float statusBarHeight = MAX((fullScreenRect.size.width - appFrame.size.width), (fullScreenRect.size.height - appFrame.size.height));
-
-    // Initially assume portrait orientation.
-    float width = fullScreenRect.size.width;
-    float height = fullScreenRect.size.height;
-
-    // Correct for orientation.
-    if (UIInterfaceOrientationIsLandscape(theOrientation)) {
-        width = height;
-        height = fullScreenRect.size.width;
+	UIScreen *screen = [UIScreen mainScreen];
+	CGRect fullScreenRect = screen.bounds; // always implicitly in Portrait orientation.
+	CGRect appFrame = screen.applicationFrame;
+	
+	// Find status bar height by checking which dimension of the applicationFrame is narrower than screen bounds.
+	// Little bit ugly looking, but it'll still work even if they change the status bar height in future.
+	float statusBarHeight = MAX((fullScreenRect.size.width - appFrame.size.width), (fullScreenRect.size.height - appFrame.size.height));
+    
+    // In iOS 7 the status bar is transparent, so don't adjust for it.
+    if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_7_0) {
+        statusBarHeight = 0;
     }
-
-    // Account for status bar, which always subtracts from the height (since it's always at the top of the screen).
-    height -= statusBarHeight;
-
-    return CGSizeMake(width, height);
+	
+	float navigationBarHeight = 0;
+	if ((self.navigationController)&&(!self.navigationController.navigationBarHidden)) {
+		navigationBarHeight = self.navigationController.navigationBar.frame.size.height;
+	}
+	
+	// Initially assume portrait orientation.
+	float width = fullScreenRect.size.width;
+	float height = fullScreenRect.size.height;
+	
+    // Correct for orientation (only for iOS7.1 and earlier, since iOS8 it will do it automatically).
+	if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_7_1 && UIInterfaceOrientationIsLandscape(theOrientation)) {
+		width = height;
+		height = fullScreenRect.size.width;
+	}
+	
+	// Account for status bar, which always subtracts from the height (since it's always at the top of the screen).
+	height -= statusBarHeight;
+	height -= navigationBarHeight;
+	
+	return CGSizeMake(width, height);
 }
 
 
 - (void)layoutSubviewsForInterfaceOrientation:(UIInterfaceOrientation)theOrientation withAnimation:(BOOL)animate
 {
-    if (_reconfigurePopup) {
-        [self reconfigureForMasterInPopover:![self shouldShowMasterForInterfaceOrientation:theOrientation]];
-    }
-
-    // Layout the master, detail and divider views appropriately, adding/removing subviews as needed.
-    // First obtain relevant geometry.
-    CGSize fullSize = [self splitViewSizeForOrientation:theOrientation];
-    float width = fullSize.width;
-    float height = fullSize.height;
-
-    if (NO) { // Just for debugging.
-        NSLog(@"Target orientation is %@, dimensions will be %.0f x %.0f",
-              [self nameOfInterfaceOrientation:theOrientation], width, height);
-    }
-
-    // Layout the master, divider and detail views.
-    CGRect newFrame = CGRectMake(0, 0, width, height);
-    UIViewController *controller;
-    UIView *theView;
-    BOOL shouldShowMaster = [self shouldShowMasterForInterfaceOrientation:theOrientation];
-    BOOL masterFirst = [self isMasterBeforeDetail];
-    if ([self isVertical]) {
-        // Master on left, detail on right (or vice versa).
-        CGRect masterRect, dividerRect, detailRect;
-        if (masterFirst) {
-            if (!shouldShowMaster) {
-                // Move off-screen.
-                newFrame.origin.x -= (_splitPosition + _splitWidth);
-            }
-
-            newFrame.size.width = _splitPosition;
-            masterRect = newFrame;
-
-            newFrame.origin.x += newFrame.size.width;
-            newFrame.size.width = _splitWidth;
-            dividerRect = newFrame;
-
-            newFrame.origin.x += newFrame.size.width;
-            newFrame.size.width = width - newFrame.origin.x;
-            detailRect = newFrame;
-
-        } else {
-            if (!shouldShowMaster) {
-                // Move off-screen.
-                newFrame.size.width += (_splitPosition + _splitWidth);
-            }
-
-            newFrame.size.width -= (_splitPosition + _splitWidth);
-            detailRect = newFrame;
-
-            newFrame.origin.x += newFrame.size.width;
-            newFrame.size.width = _splitWidth;
-            dividerRect = newFrame;
-
-            newFrame.origin.x += newFrame.size.width;
-            newFrame.size.width = _splitPosition;
-            masterRect = newFrame;
-        }
-
-        // Position master.
-        controller = self.masterViewController;
-        if (controller && [controller isKindOfClass:[UIViewController class]])  {
-            theView = controller.view;
-            if (theView) {
-                theView.frame = masterRect;
-                if (!theView.superview) {
-                    [controller viewWillAppear:NO];
-                    [self.view addSubview:theView];
-                    [controller viewDidAppear:NO];
-                }
-            }
-        }
-
-        // Position divider.
-        theView = _dividerView;
-        theView.frame = dividerRect;
-        if (!theView.superview) {
-            [self.view addSubview:theView];
-        }
-
-        // Position detail.
-        controller = self.detailViewController;
-        if (controller && [controller isKindOfClass:[UIViewController class]])  {
-            theView = controller.view;
-            if (theView) {
-                theView.frame = detailRect;
-                if (!theView.superview) {
-                    [self.view insertSubview:theView aboveSubview:self.masterViewController.view];
-                } else {
-                    [self.view bringSubviewToFront:theView];
-                }
-            }
-        }
-
-    } else {
-        // Master above, detail below (or vice versa).
-        CGRect masterRect, dividerRect, detailRect;
-        if (masterFirst) {
-            if (!shouldShowMaster) {
-                // Move off-screen.
-                newFrame.origin.y -= (_splitPosition + _splitWidth);
-            }
-
-            newFrame.size.height = _splitPosition;
-            masterRect = newFrame;
-
-            newFrame.origin.y += newFrame.size.height;
-            newFrame.size.height = _splitWidth;
-            dividerRect = newFrame;
-
-            newFrame.origin.y += newFrame.size.height;
-            newFrame.size.height = height - newFrame.origin.y;
-            detailRect = newFrame;
-
-        } else {
-            if (!shouldShowMaster) {
-                // Move off-screen.
-                newFrame.size.height += (_splitPosition + _splitWidth);
-            }
-
-            newFrame.size.height -= (_splitPosition + _splitWidth);
-            detailRect = newFrame;
-
-            newFrame.origin.y += newFrame.size.height;
-            newFrame.size.height = _splitWidth;
-            dividerRect = newFrame;
-
-            newFrame.origin.y += newFrame.size.height;
-            newFrame.size.height = _splitPosition;
-            masterRect = newFrame;
-        }
-
-        // Position master.
-        controller = self.masterViewController;
-        if (controller && [controller isKindOfClass:[UIViewController class]])  {
-            theView = controller.view;
-            if (theView) {
-                theView.frame = masterRect;
-                if (!theView.superview) {
-                    [controller viewWillAppear:NO];
-                    [self.view addSubview:theView];
-                    [controller viewDidAppear:NO];
-                }
-            }
-        }
-
-        // Position divider.
-        theView = _dividerView;
-        theView.frame = dividerRect;
-        if (!theView.superview) {
-            [self.view addSubview:theView];
-        }
-
-        // Position detail.
-        controller = self.detailViewController;
-        if (controller && [controller isKindOfClass:[UIViewController class]])  {
-            theView = controller.view;
-            if (theView) {
-                theView.frame = detailRect;
-                if (!theView.superview) {
-                    [self.view insertSubview:theView aboveSubview:self.masterViewController.view];
-                } else {
-                    [self.view bringSubviewToFront:theView];
-                }
-            }
-        }
-    }
-
-    // Create corner views if necessary.
-    MGSplitCornersView *leadingCorners; // top/left of screen in vertical/horizontal split.
-    MGSplitCornersView *trailingCorners; // bottom/right of screen in vertical/horizontal split.
-    if (!_cornerViews) {
-        CGRect cornerRect = CGRectMake(0, 0, 10, 10); // arbitrary, will be resized below.
-        leadingCorners = [[MGSplitCornersView alloc] initWithFrame:cornerRect];
-        leadingCorners.splitViewController = self;
-        leadingCorners.cornerBackgroundColor = MG_DEFAULT_CORNER_COLOR;
-        leadingCorners.cornerRadius = MG_DEFAULT_CORNER_RADIUS;
-        trailingCorners = [[MGSplitCornersView alloc] initWithFrame:cornerRect];
-        trailingCorners.splitViewController = self;
-        trailingCorners.cornerBackgroundColor = MG_DEFAULT_CORNER_COLOR;
-        trailingCorners.cornerRadius = MG_DEFAULT_CORNER_RADIUS;
-        _cornerViews = [[NSArray alloc] initWithObjects:leadingCorners, trailingCorners, nil];
-        [leadingCorners release];
-        [trailingCorners release];
-
-    } else if ([_cornerViews count] == 2) {
-        leadingCorners = [_cornerViews objectAtIndex:0];
-        trailingCorners = [_cornerViews objectAtIndex:1];
-    }
-
-    // Configure and layout the corner-views.
-    leadingCorners.cornersPosition = (_vertical) ? MGCornersPositionLeadingVertical : MGCornersPositionLeadingHorizontal;
-    trailingCorners.cornersPosition = (_vertical) ? MGCornersPositionTrailingVertical : MGCornersPositionTrailingHorizontal;
-    leadingCorners.autoresizingMask = (_vertical) ? UIViewAutoresizingFlexibleBottomMargin : UIViewAutoresizingFlexibleRightMargin;
-    trailingCorners.autoresizingMask = (_vertical) ? UIViewAutoresizingFlexibleTopMargin : UIViewAutoresizingFlexibleLeftMargin;
-
-    float x, y, cornersWidth, cornersHeight;
-    CGRect leadingRect, trailingRect;
-    float radius = leadingCorners.cornerRadius;
-    if (_vertical) { // left/right split
-        cornersWidth = (radius * 2.0) + _splitWidth;
-        cornersHeight = radius;
-        x = ((shouldShowMaster) ? ((masterFirst) ? _splitPosition : width - (_splitPosition + _splitWidth)) : (0 - _splitWidth)) - radius;
-        y = 0;
-        leadingRect = CGRectMake(x, y, cornersWidth, cornersHeight); // top corners
-        trailingRect = CGRectMake(x, (height - cornersHeight), cornersWidth, cornersHeight); // bottom corners
-
-    } else { // top/bottom split
-        x = 0;
-        y = ((shouldShowMaster) ? ((masterFirst) ? _splitPosition : height - (_splitPosition + _splitWidth)) : (0 - _splitWidth)) - radius;
-        cornersWidth = radius;
-        cornersHeight = (radius * 2.0) + _splitWidth;
-        leadingRect = CGRectMake(x, y, cornersWidth, cornersHeight); // left corners
-        trailingRect = CGRectMake((width - cornersWidth), y, cornersWidth, cornersHeight); // right corners
-    }
-
-    leadingCorners.frame = leadingRect;
-    trailingCorners.frame = trailingRect;
-
-    // Ensure corners are visible and frontmost.
-    if (!leadingCorners.superview) {
-        [self.view insertSubview:leadingCorners aboveSubview:self.detailViewController.view];
-        [self.view insertSubview:trailingCorners aboveSubview:self.detailViewController.view];
-    } else {
-        [self.view bringSubviewToFront:leadingCorners];
-        [self.view bringSubviewToFront:trailingCorners];
-    }
+	if (_reconfigurePopup) {
+		[self reconfigureForMasterInPopover:![self shouldShowMasterForInterfaceOrientation:theOrientation]];
+	}
+	
+	// Layout the master, detail and divider views appropriately, adding/removing subviews as needed.
+	// First obtain relevant geometry.
+	CGSize fullSize = [self splitViewSizeForOrientation:theOrientation];
+	float width = fullSize.width;
+	float height = fullSize.height;
+	
+	if (NO) { // Just for debugging.
+		NSLog(@"Target orientation is %@, dimensions will be %.0f x %.0f", 
+			  [self nameOfInterfaceOrientation:theOrientation], width, height);
+	}
+	
+	// Layout the master, divider and detail views.
+	CGRect newFrame = CGRectMake(0, 0, width, height);
+	UIViewController *controller;
+	UIView *theView;
+	BOOL shouldShowMaster = [self shouldShowMasterForInterfaceOrientation:theOrientation];
+	BOOL masterFirst = [self isMasterBeforeDetail];
+	if ([self isVertical]) {
+		// Master on left, detail on right (or vice versa).
+		CGRect masterRect, dividerRect, detailRect;
+		if (masterFirst) {
+			if (!shouldShowMaster) {
+				// Move off-screen.
+				newFrame.origin.x -= (_splitPosition + _splitWidth);
+			}
+			
+			newFrame.size.width = _splitPosition;
+			masterRect = newFrame;
+			
+			newFrame.origin.x += newFrame.size.width;
+			newFrame.size.width = _splitWidth;
+			dividerRect = newFrame;
+			
+			newFrame.origin.x += newFrame.size.width;
+			newFrame.size.width = width - newFrame.origin.x;
+			detailRect = newFrame;
+			
+		} else {
+			if (!shouldShowMaster) {
+				// Move off-screen.
+				newFrame.size.width += (_splitPosition + _splitWidth);
+			}
+			
+			newFrame.size.width -= (_splitPosition + _splitWidth);
+			detailRect = newFrame;
+			
+			newFrame.origin.x += newFrame.size.width;
+			newFrame.size.width = _splitWidth;
+			dividerRect = newFrame;
+			
+			newFrame.origin.x += newFrame.size.width;
+			newFrame.size.width = _splitPosition;
+			masterRect = newFrame;
+		}
+		
+		// Position master.
+		controller = self.masterViewController;
+		if (controller && [controller isKindOfClass:[UIViewController class]])  {
+			theView = controller.view;
+			if (theView) {
+				theView.frame = masterRect;
+				if (!theView.superview) {
+					[controller viewWillAppear:NO];
+					[self.view addSubview:theView];
+					[controller viewDidAppear:NO];
+				}
+			}
+		}
+		
+		// Position divider.
+		theView = _dividerView;
+		theView.frame = dividerRect;
+		if (!theView.superview) {
+			[self.view addSubview:theView];
+		}
+		
+		// Position detail.
+		controller = self.detailViewController;
+		if (controller && [controller isKindOfClass:[UIViewController class]])  {
+			theView = controller.view;
+			if (theView) {
+				theView.frame = detailRect;
+				if (!theView.superview) {
+					[self.view insertSubview:theView aboveSubview:self.masterViewController.view];
+				} else {
+					[self.view bringSubviewToFront:theView];
+				}
+			}
+		}
+		
+	} else {
+		// Master above, detail below (or vice versa).
+		CGRect masterRect, dividerRect, detailRect;
+		if (masterFirst) {
+			if (!shouldShowMaster) {
+				// Move off-screen.
+				newFrame.origin.y -= (_splitPosition + _splitWidth);
+			}
+			
+			newFrame.size.height = _splitPosition;
+			masterRect = newFrame;
+			
+			newFrame.origin.y += newFrame.size.height;
+			newFrame.size.height = _splitWidth;
+			dividerRect = newFrame;
+			
+			newFrame.origin.y += newFrame.size.height;
+			newFrame.size.height = height - newFrame.origin.y;
+			detailRect = newFrame;
+			
+		} else {
+			if (!shouldShowMaster) {
+				// Move off-screen.
+				newFrame.size.height += (_splitPosition + _splitWidth);
+			}
+			
+			newFrame.size.height -= (_splitPosition + _splitWidth);
+			detailRect = newFrame;
+			
+			newFrame.origin.y += newFrame.size.height;
+			newFrame.size.height = _splitWidth;
+			dividerRect = newFrame;
+			
+			newFrame.origin.y += newFrame.size.height;
+			newFrame.size.height = _splitPosition;
+			masterRect = newFrame;
+		}
+		
+		// Position master.
+		controller = self.masterViewController;
+		if (controller && [controller isKindOfClass:[UIViewController class]])  {
+			theView = controller.view;
+			if (theView) {
+				theView.frame = masterRect;
+				if (!theView.superview) {
+					[controller viewWillAppear:NO];
+					[self.view addSubview:theView];
+					[controller viewDidAppear:NO];
+				}
+			}
+		}
+		
+		// Position divider.
+		theView = _dividerView;
+		theView.frame = dividerRect;
+		if (!theView.superview) {
+			[self.view addSubview:theView];
+		}
+		
+		// Position detail.
+		controller = self.detailViewController;
+		if (controller && [controller isKindOfClass:[UIViewController class]])  {
+			theView = controller.view;
+			if (theView) {
+				theView.frame = detailRect;
+				if (!theView.superview) {
+					[self.view insertSubview:theView aboveSubview:self.masterViewController.view];
+				} else {
+					[self.view bringSubviewToFront:theView];
+				}
+			}
+		}
+	}
+	
+	// Create corner views if necessary.
+	MGSplitCornersView *leadingCorners = nil; // top/left of screen in vertical/horizontal split.
+	MGSplitCornersView *trailingCorners = nil; // bottom/right of screen in vertical/horizontal split.
+	if (!_cornerViews) {
+		CGRect cornerRect = CGRectMake(0, 0, 10, 10); // arbitrary, will be resized below.
+		leadingCorners = [[MGSplitCornersView alloc] initWithFrame:cornerRect];
+		leadingCorners.splitViewController = self;
+		leadingCorners.cornerBackgroundColor = MG_DEFAULT_CORNER_COLOR;
+		leadingCorners.cornerRadius = NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_7_0 ? 0 : MG_DEFAULT_CORNER_RADIUS;
+		trailingCorners = [[MGSplitCornersView alloc] initWithFrame:cornerRect];
+		trailingCorners.splitViewController = self;
+		trailingCorners.cornerBackgroundColor = MG_DEFAULT_CORNER_COLOR;
+		trailingCorners.cornerRadius = NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_7_0 ? 0 : MG_DEFAULT_CORNER_RADIUS;
+		_cornerViews = [[NSArray alloc] initWithObjects:leadingCorners, trailingCorners, nil];
+		
+	} else if ([_cornerViews count] == 2) {
+		leadingCorners = [_cornerViews objectAtIndex:0];
+		trailingCorners = [_cornerViews objectAtIndex:1];
+	}
+	
+	// Configure and layout the corner-views.
+	leadingCorners.cornersPosition = (_vertical) ? MGCornersPositionLeadingVertical : MGCornersPositionLeadingHorizontal;
+	trailingCorners.cornersPosition = (_vertical) ? MGCornersPositionTrailingVertical : MGCornersPositionTrailingHorizontal;
+	leadingCorners.autoresizingMask = (_vertical) ? UIViewAutoresizingFlexibleBottomMargin : UIViewAutoresizingFlexibleRightMargin;
+	trailingCorners.autoresizingMask = (_vertical) ? UIViewAutoresizingFlexibleTopMargin : UIViewAutoresizingFlexibleLeftMargin;
+	
+	float x, y, cornersWidth, cornersHeight;
+	CGRect leadingRect, trailingRect;
+	float radius = leadingCorners.cornerRadius;
+	if (_vertical) { // left/right split
+		cornersWidth = (radius * 2.f) + _splitWidth;
+		cornersHeight = radius;
+		x = ((shouldShowMaster) ? ((masterFirst) ? _splitPosition : width - (_splitPosition + _splitWidth)) : (0 - _splitWidth)) - radius;
+		y = 0;
+		leadingRect = CGRectMake(x, y, cornersWidth, cornersHeight); // top corners
+		trailingRect = CGRectMake(x, (height - cornersHeight), cornersWidth, cornersHeight); // bottom corners
+		
+	} else { // top/bottom split
+		x = 0;
+		y = ((shouldShowMaster) ? ((masterFirst) ? _splitPosition : height - (_splitPosition + _splitWidth)) : (0 - _splitWidth)) - radius;
+		cornersWidth = radius;
+		cornersHeight = (radius * 2.f) + _splitWidth;
+		leadingRect = CGRectMake(x, y, cornersWidth, cornersHeight); // left corners
+		trailingRect = CGRectMake((width - cornersWidth), y, cornersWidth, cornersHeight); // right corners
+	}
+	
+	leadingCorners.frame = leadingRect;
+	trailingCorners.frame = trailingRect;
+	
+	// Ensure corners are visible and frontmost.
+	if (!leadingCorners.superview) {
+		[self.view insertSubview:leadingCorners aboveSubview:self.detailViewController.view];
+		[self.view insertSubview:trailingCorners aboveSubview:self.detailViewController.view];
+	} else {
+		[self.view bringSubviewToFront:leadingCorners];
+		[self.view bringSubviewToFront:trailingCorners];
+	}
 }
 
 
 - (void)layoutSubviewsWithAnimation:(BOOL)animate
 {
-    [self layoutSubviewsForInterfaceOrientation:self.interfaceOrientation withAnimation:animate];
+	[self layoutSubviewsForInterfaceOrientation:self.interfaceOrientation withAnimation:animate];
 }
 
 
 - (void)layoutSubviews
 {
-    [self layoutSubviewsForInterfaceOrientation:self.interfaceOrientation withAnimation:YES];
+	[self layoutSubviewsForInterfaceOrientation:self.interfaceOrientation withAnimation:YES];
 }
 
 
 - (void)viewWillAppear:(BOOL)animated
 {
-    [super viewWillAppear:animated];
-
-    if ([self isShowingMaster]) {
-        [self.masterViewController viewWillAppear:animated];
-    }
-    [self.detailViewController viewWillAppear:animated];
-
-    _reconfigurePopup = YES;
-    [self layoutSubviews];
+	[super viewWillAppear:animated];
+	
+	if ([self isShowingMaster]) {
+		[self.masterViewController viewWillAppear:animated];
+	}
+	[self.detailViewController viewWillAppear:animated];
+	
+	_reconfigurePopup = YES;
 }
 
 
 - (void)viewDidAppear:(BOOL)animated
 {
-    [super viewDidAppear:animated];
-
-    if ([self isShowingMaster]) {
-        [self.masterViewController viewDidAppear:animated];
-    }
-    [self.detailViewController viewDidAppear:animated];
+	[super viewDidAppear:animated];
+	
+	if ([self isShowingMaster]) {
+		[self.masterViewController viewDidAppear:animated];
+	}
+	[self.detailViewController viewDidAppear:animated];
+	[self layoutSubviews];
 }
 
 
 - (void)viewWillDisappear:(BOOL)animated
 {
-    [super viewWillDisappear:animated];
-
-    if ([self isShowingMaster]) {
-        [self.masterViewController viewWillDisappear:animated];
-    }
-    [self.detailViewController viewWillDisappear:animated];
+	[super viewWillDisappear:animated];
+	
+	if ([self isShowingMaster]) {
+		[self.masterViewController viewWillDisappear:animated];
+	}
+	[self.detailViewController viewWillDisappear:animated];
 }
 
 
 - (void)viewDidDisappear:(BOOL)animated
 {
-    [super viewDidDisappear:animated];
-
-    if ([self isShowingMaster]) {
-        [self.masterViewController viewDidDisappear:animated];
-    }
-    [self.detailViewController viewDidDisappear:animated];
+	[super viewDidDisappear:animated];
+	
+	if ([self isShowingMaster]) {
+		[self.masterViewController viewDidDisappear:animated];
+	}
+	[self.detailViewController viewDidDisappear:animated];
 }
 
 
@@ -545,73 +534,73 @@
 
 - (void)reconfigureForMasterInPopover:(BOOL)inPopover
 {
-    _reconfigurePopup = NO;
-
-    if ((inPopover && _hiddenPopoverController) || (!inPopover && !_hiddenPopoverController) || !self.masterViewController) {
-        // Nothing to do.
-        return;
-    }
-
-    if (inPopover && !_hiddenPopoverController && !_barButtonItem) {
-        // Create and configure popover for our masterViewController.
-        [_hiddenPopoverController release];
-        _hiddenPopoverController = nil;
-        [self.masterViewController viewWillDisappear:NO];
-        _hiddenPopoverController = [[UIPopoverController alloc] initWithContentViewController:self.masterViewController];
-        [self.masterViewController viewDidDisappear:NO];
-
-        // Create and configure _barButtonItem.
-        _barButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Master", nil)
-                                                          style:UIBarButtonItemStyleBordered
-                                                         target:self
-                                                         action:@selector(showMasterPopover:)];
-
-        // Inform delegate of this state of affairs.
-        if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:willHideViewController:withBarButtonItem:forPopoverController:)]) {
-            [(NSObject <MGSplitViewControllerDelegate> *)_delegate splitViewController:self
-                                                                willHideViewController:self.masterViewController
-                                                                     withBarButtonItem:_barButtonItem
-                                                                  forPopoverController:_hiddenPopoverController];
+	_reconfigurePopup = NO;
+	
+	if ((inPopover && _hiddenPopoverController) || (!inPopover && !_hiddenPopoverController) || !self.masterViewController) {
+		// Nothing to do.
+		return;
+	}
+	
+	if (inPopover && !_hiddenPopoverController && !_barButtonItem) {
+		// Create and configure popover for our masterViewController.
+		_hiddenPopoverController = nil;
+		[self.masterViewController viewWillDisappear:NO];
+		_hiddenPopoverController = [[UIPopoverController alloc] initWithContentViewController:self.masterViewController];
+		[self.masterViewController viewDidDisappear:NO];
+		
+		// Create and configure _barButtonItem.
+		_barButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Master", nil) 
+														  style:UIBarButtonItemStyleBordered 
+														 target:self 
+														 action:(self.togglesMasterPopover ? @selector(toggleMasterPopover:) : @selector(showMasterPopover:))];
+		
+		// Inform delegate of this state of affairs.
+		if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:willHideViewController:withBarButtonItem:forPopoverController:)]) {
+			[(NSObject <MGSplitViewControllerDelegate> *)_delegate splitViewController:self 
+																willHideViewController:self.masterViewController 
+																	 withBarButtonItem:_barButtonItem 
+																  forPopoverController:_hiddenPopoverController];
+		}
+		
+	} else if (!inPopover && _hiddenPopoverController && _barButtonItem) {
+		// I know this looks strange, but it fixes a bizarre issue with UIPopoverController leaving masterViewController's views in disarray.
+        // It does also break stuff on iOS8, so we disable it.
+        if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_7_1) {
+            [_hiddenPopoverController presentPopoverFromRect:CGRectZero inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO];
         }
 
-    } else if (!inPopover && _hiddenPopoverController && _barButtonItem) {
-        // I know this looks strange, but it fixes a bizarre issue with UIPopoverController leaving masterViewController's views in disarray.
-        [_hiddenPopoverController presentPopoverFromRect:CGRectZero inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO];
-
-        // Remove master from popover and destroy popover, if it exists.
-        [_hiddenPopoverController dismissPopoverAnimated:NO];
-        [_hiddenPopoverController release];
-        _hiddenPopoverController = nil;
-
-        // Inform delegate that the _barButtonItem will become invalid.
-        if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:willShowViewController:invalidatingBarButtonItem:)]) {
-            [(NSObject <MGSplitViewControllerDelegate> *)_delegate splitViewController:self
-                                                                willShowViewController:self.masterViewController
-                                                             invalidatingBarButtonItem:_barButtonItem];
-        }
-
-        // Destroy _barButtonItem.
-        [_barButtonItem release];
-        _barButtonItem = nil;
-
-        // Move master view.
-        UIView *masterView = self.masterViewController.view;
-        if (masterView && masterView.superview != self.view) {
-            [masterView removeFromSuperview];
-        }
-    }
+		// Remove master from popover and destroy popover, if it exists.
+		[_hiddenPopoverController dismissPopoverAnimated:NO];
+		_hiddenPopoverController = nil;
+		
+		// Inform delegate that the _barButtonItem will become invalid.
+		if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:willShowViewController:invalidatingBarButtonItem:)]) {
+			[(NSObject <MGSplitViewControllerDelegate> *)_delegate splitViewController:self 
+																willShowViewController:self.masterViewController 
+															 invalidatingBarButtonItem:_barButtonItem];
+		}
+		
+		// Destroy _barButtonItem.
+		_barButtonItem = nil;
+		
+		// Move master view.
+		UIView *masterView = self.masterViewController.view;
+		if (masterView && masterView.superview != self.view) {
+			[masterView removeFromSuperview];
+		}
+	}
 }
 
 
 - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
 {
-    [self reconfigureForMasterInPopover:NO];
+	[self reconfigureForMasterInPopover:NO];
 }
 
 
 - (void)notePopoverDismissed
 {
-    [self popoverControllerDidDismissPopover:_hiddenPopoverController];
+	[self popoverControllerDidDismissPopover:_hiddenPopoverController];
 }
 
 
@@ -621,14 +610,14 @@
 
 - (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
 {
-    if (([animationID isEqualToString:MG_ANIMATION_CHANGE_SPLIT_ORIENTATION] ||
-         [animationID isEqualToString:MG_ANIMATION_CHANGE_SUBVIEWS_ORDER])
-        && _cornerViews) {
-        for (UIView *corner in _cornerViews) {
-            corner.hidden = NO;
-        }
-        _dividerView.hidden = NO;
-    }
+	if (([animationID isEqualToString:MG_ANIMATION_CHANGE_SPLIT_ORIENTATION] || 
+		 [animationID isEqualToString:MG_ANIMATION_CHANGE_SUBVIEWS_ORDER])
+		&& _cornerViews) {
+		for (UIView *corner in _cornerViews) {
+			corner.hidden = NO;
+		}
+		_dividerView.hidden = NO;
+	}
 }
 
 
@@ -638,83 +627,131 @@
 
 - (IBAction)toggleSplitOrientation:(id)sender
 {
-    BOOL showingMaster = [self isShowingMaster];
-    if (showingMaster) {
-        if (_cornerViews) {
-            for (UIView *corner in _cornerViews) {
-                corner.hidden = YES;
-            }
-            _dividerView.hidden = YES;
-        }
-        [UIView beginAnimations:MG_ANIMATION_CHANGE_SPLIT_ORIENTATION context:nil];
-        [UIView setAnimationDelegate:self];
-        [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
-    }
-    self.vertical = (!self.vertical);
-    if (showingMaster) {
-        [UIView commitAnimations];
-    }
+	BOOL showingMaster = [self isShowingMaster];
+	if (showingMaster) {
+		if (_cornerViews) {
+			for (UIView *corner in _cornerViews) {
+				corner.hidden = YES;
+			}
+			_dividerView.hidden = YES;
+		}
+		[UIView beginAnimations:MG_ANIMATION_CHANGE_SPLIT_ORIENTATION context:nil];
+		[UIView setAnimationDelegate:self];
+		[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
+	}
+	self.vertical = (!self.vertical);
+	if (showingMaster) {
+		[UIView commitAnimations];
+	}
 }
 
 
 - (IBAction)toggleMasterBeforeDetail:(id)sender
 {
-    BOOL showingMaster = [self isShowingMaster];
-    if (showingMaster) {
-        if (_cornerViews) {
-            for (UIView *corner in _cornerViews) {
-                corner.hidden = YES;
-            }
-            _dividerView.hidden = YES;
-        }
-        [UIView beginAnimations:MG_ANIMATION_CHANGE_SUBVIEWS_ORDER context:nil];
-        [UIView setAnimationDelegate:self];
-        [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
-    }
-    self.masterBeforeDetail = (!self.masterBeforeDetail);
-    if (showingMaster) {
-        [UIView commitAnimations];
-    }
+	BOOL showingMaster = [self isShowingMaster];
+	if (showingMaster) {
+		if (_cornerViews) {
+			for (UIView *corner in _cornerViews) {
+				corner.hidden = YES;
+			}
+			_dividerView.hidden = YES;
+		}
+		[UIView beginAnimations:MG_ANIMATION_CHANGE_SUBVIEWS_ORDER context:nil];
+		[UIView setAnimationDelegate:self];
+		[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
+	}
+	self.masterBeforeDetail = (!self.masterBeforeDetail);
+	if (showingMaster) {
+		[UIView commitAnimations];
+	}
 }
 
 
 - (IBAction)toggleMasterView:(id)sender
 {
-    if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
-        [_hiddenPopoverController dismissPopoverAnimated:NO];
-    }
-
-    if (![self isShowingMaster]) {
-        // We're about to show the master view. Ensure it's in place off-screen to be animated in.
-        _reconfigurePopup = YES;
-        [self reconfigureForMasterInPopover:NO];
-        [self layoutSubviews];
-    }
-
-    // This action functions on the current primary orientation; it is independent of the other primary orientation.
-    [UIView beginAnimations:@"toggleMaster" context:nil];
-    if (self.isLandscape) {
-        self.showsMasterInLandscape = !_showsMasterInLandscape;
-    } else {
-        self.showsMasterInPortrait = !_showsMasterInPortrait;
-    }
-    [UIView commitAnimations];
+	if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
+		[_hiddenPopoverController dismissPopoverAnimated:NO];
+	}
+	
+	if (![self isShowingMaster]) {
+		// We're about to show the master view. Ensure it's in place off-screen to be animated in.
+		_reconfigurePopup = YES;
+		[self reconfigureForMasterInPopover:NO];
+		[self layoutSubviews];
+	}
+	
+	// This action functions on the current primary orientation; it is independent of the other primary orientation.
+	[UIView beginAnimations:@"toggleMaster" context:nil];
+	if (self.isLandscape) {
+		self.showsMasterInLandscape = !_showsMasterInLandscape;
+	} else {
+		self.showsMasterInPortrait = !_showsMasterInPortrait;
+	}
+	[UIView commitAnimations];
 }
 
 
-- (IBAction)showMasterPopover:(id) sender
+- (void) setTogglesMasterPopover:(BOOL)flag {
+
+	togglesMasterPopover = flag;
+
+	if (!_barButtonItem)
+	return;
+		
+	_barButtonItem.action = flag ? @selector(toggleMasterPopover:) : @selector(showMasterPopover:);	
+
+}
+
+- (IBAction)toggleMasterPopover:(id)sender 
 {
-    if (_hiddenPopoverController && !(_hiddenPopoverController.popoverVisible)) {
-        // Inform delegate.
-        if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:popoverController:willPresentViewController:)]) {
-            [(NSObject <MGSplitViewControllerDelegate> *)_delegate splitViewController:self
-                                                                     popoverController:_hiddenPopoverController
-                                                             willPresentViewController:self.masterViewController];
-        }
+
+	if (!_hiddenPopoverController)
+	return;
+	
+	if (_hiddenPopoverController.popoverVisible) {
+		
+		[self hideMasterPopover:sender];
+		
+	} else {
+	
+		[self showMasterPopover:sender];
+	
+	}
+
+}
+
 
-        // Show popover.
-        [_hiddenPopoverController presentPopoverFromBarButtonItem:_barButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
-    }
+- (IBAction)showMasterPopover:(id)sender
+{
+	if (_hiddenPopoverController && !(_hiddenPopoverController.popoverVisible)) {
+		// Inform delegate.
+		if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:popoverController:willPresentViewController:)]) {
+			[(NSObject <MGSplitViewControllerDelegate> *)_delegate splitViewController:self 
+																	 popoverController:_hiddenPopoverController 
+															 willPresentViewController:self.masterViewController];
+		}
+		
+		// Show popover.
+		[_hiddenPopoverController presentPopoverFromBarButtonItem:(sender ? sender : _barButtonItem) permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
+	}
+}
+
+
+- (IBAction)hideMasterPopover:(id)sender 
+{
+
+	if(_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
+		
+		if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:popoverController:willDismissViewController:)]) {
+		
+			[(NSObject <MGSplitViewControllerDelegate> *)_delegate splitViewController:self popoverController:_hiddenPopoverController willDismissViewController:self.masterViewController];
+		
+		}
+		
+		[_hiddenPopoverController dismissPopoverAnimated:YES];
+	
+	}
+
 }
 
 
@@ -724,395 +761,393 @@
 
 - (id)delegate
 {
-    return _delegate;
+	return _delegate;
 }
 
 
 - (void)setDelegate:(id <MGSplitViewControllerDelegate>)newDelegate
 {
-    if (newDelegate != _delegate &&
-        (!newDelegate || [(NSObject *)newDelegate conformsToProtocol:@protocol(MGSplitViewControllerDelegate)])) {
-        _delegate = newDelegate;
-    }
+	if (newDelegate != _delegate && 
+		(!newDelegate || [(NSObject *)newDelegate conformsToProtocol:@protocol(MGSplitViewControllerDelegate)])) {
+		_delegate = newDelegate;
+	}
 }
 
 
 - (BOOL)showsMasterInPortrait
 {
-    return _showsMasterInPortrait;
+	return _showsMasterInPortrait;
 }
 
 
 - (void)setShowsMasterInPortrait:(BOOL)flag
 {
-    if (flag != _showsMasterInPortrait) {
-        _showsMasterInPortrait = flag;
-
-        if (![self isLandscape]) { // i.e. if this will cause a visual change.
-            if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
-                [_hiddenPopoverController dismissPopoverAnimated:NO];
-            }
-
-            // Rearrange views.
-            _reconfigurePopup = YES;
-            [self layoutSubviews];
-        }
-    }
+	if (flag != _showsMasterInPortrait) {
+		_showsMasterInPortrait = flag;
+		
+		if (![self isLandscape]) { // i.e. if this will cause a visual change.
+			if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
+				[_hiddenPopoverController dismissPopoverAnimated:NO];
+			}
+			
+			// Rearrange views.
+			_reconfigurePopup = YES;
+			[self layoutSubviews];
+		}
+	}
 }
 
 
 - (BOOL)showsMasterInLandscape
 {
-    return _showsMasterInLandscape;
+	return _showsMasterInLandscape;
 }
 
 
 - (void)setShowsMasterInLandscape:(BOOL)flag
 {
-    if (flag != _showsMasterInLandscape) {
-        _showsMasterInLandscape = flag;
-
-        if ([self isLandscape]) { // i.e. if this will cause a visual change.
-            if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
-                [_hiddenPopoverController dismissPopoverAnimated:NO];
-            }
-
-            // Rearrange views.
-            _reconfigurePopup = YES;
-            [self layoutSubviews];
-        }
-    }
+	if (flag != _showsMasterInLandscape) {
+		_showsMasterInLandscape = flag;
+		
+		if ([self isLandscape]) { // i.e. if this will cause a visual change.
+			if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
+				[_hiddenPopoverController dismissPopoverAnimated:NO];
+			}
+			
+			// Rearrange views.
+			_reconfigurePopup = YES;
+			[self layoutSubviews];
+		}
+	}
 }
 
 
 - (BOOL)isVertical
 {
-    return _vertical;
+	return _vertical;
 }
 
 
 - (void)setVertical:(BOOL)flag
 {
-    if (flag != _vertical) {
-        if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
-            [_hiddenPopoverController dismissPopoverAnimated:NO];
-        }
-
-        _vertical = flag;
-
-        // Inform delegate.
-        if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:willChangeSplitOrientationToVertical:)]) {
-            [_delegate splitViewController:self willChangeSplitOrientationToVertical:_vertical];
-        }
-
-        [self layoutSubviews];
-    }
+	if (flag != _vertical) {
+		if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
+			[_hiddenPopoverController dismissPopoverAnimated:NO];
+		}
+		
+		_vertical = flag;
+		
+		// Inform delegate.
+		if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:willChangeSplitOrientationToVertical:)]) {
+			[_delegate splitViewController:self willChangeSplitOrientationToVertical:_vertical];
+		}
+		
+		[self layoutSubviews];
+	}
 }
 
 
 - (BOOL)isMasterBeforeDetail
 {
-    return _masterBeforeDetail;
+	return _masterBeforeDetail;
 }
 
 
 - (void)setMasterBeforeDetail:(BOOL)flag
 {
-    if (flag != _masterBeforeDetail) {
-        if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
-            [_hiddenPopoverController dismissPopoverAnimated:NO];
-        }
-
-        _masterBeforeDetail = flag;
-
-        if ([self isShowingMaster]) {
-            [self layoutSubviews];
-        }
-    }
+	if (flag != _masterBeforeDetail) {
+		if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
+			[_hiddenPopoverController dismissPopoverAnimated:NO];
+		}
+		
+		_masterBeforeDetail = flag;
+		
+		if ([self isShowingMaster]) {
+			[self layoutSubviews];
+		}
+	}
 }
 
 
 - (float)splitPosition
 {
-    return _splitPosition;
+	return _splitPosition;
 }
 
 
 - (void)setSplitPosition:(float)posn
 {
-    // Check to see if delegate wishes to constrain the position.
-    float newPosn = posn;
-    BOOL constrained = NO;
-    CGSize fullSize = [self splitViewSizeForOrientation:self.interfaceOrientation];
-    if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:constrainSplitPosition:splitViewSize:)]) {
-        newPosn = [_delegate splitViewController:self constrainSplitPosition:newPosn splitViewSize:fullSize];
-        constrained = YES; // implicitly trust delegate's response.
-
-    } else {
-        // Apply default constraints if delegate doesn't wish to participate.
-        float minPos = MG_MIN_VIEW_WIDTH;
-        float maxPos = ((_vertical) ? fullSize.width : fullSize.height) - (MG_MIN_VIEW_WIDTH + _splitWidth);
-        constrained = (newPosn != _splitPosition && newPosn >= minPos && newPosn <= maxPos);
-    }
-
-    if (constrained) {
-        if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
-            [_hiddenPopoverController dismissPopoverAnimated:NO];
-        }
-
-        _splitPosition = newPosn;
-
-        // Inform delegate.
-        if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:willMoveSplitToPosition:)]) {
-            [_delegate splitViewController:self willMoveSplitToPosition:_splitPosition];
-        }
-
-        if ([self isShowingMaster]) {
-            [self layoutSubviews];
-        }
-    }
+	// Check to see if delegate wishes to constrain the position.
+	float newPosn = posn;
+	BOOL constrained = NO;
+	CGSize fullSize = [self splitViewSizeForOrientation:self.interfaceOrientation];
+	if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:constrainSplitPosition:splitViewSize:)]) {
+		newPosn = [_delegate splitViewController:self constrainSplitPosition:newPosn splitViewSize:fullSize];
+		constrained = YES; // implicitly trust delegate's response.
+		
+	} else {
+		// Apply default constraints if delegate doesn't wish to participate.
+		float minPos = MG_MIN_VIEW_WIDTH;
+		float maxPos = (float) (((_vertical) ? fullSize.width : fullSize.height) - (MG_MIN_VIEW_WIDTH + _splitWidth));
+		constrained = (newPosn != _splitPosition && newPosn >= minPos && newPosn <= maxPos);
+	}
+	
+	if (constrained) {
+		if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
+			[_hiddenPopoverController dismissPopoverAnimated:NO];
+		}
+		
+		_splitPosition = newPosn;
+		
+		// Inform delegate.
+		if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:willMoveSplitToPosition:)]) {
+			[_delegate splitViewController:self willMoveSplitToPosition:_splitPosition];
+		}
+		
+		if ([self isShowingMaster]) {
+			[self layoutSubviews];
+		}
+	}
 }
 
 
 - (void)setSplitPosition:(float)posn animated:(BOOL)animate
 {
-    BOOL shouldAnimate = (animate && [self isShowingMaster]);
-    if (shouldAnimate) {
-        [UIView beginAnimations:@"SplitPosition" context:nil];
-    }
-    [self setSplitPosition:posn];
-    if (shouldAnimate) {
-        [UIView commitAnimations];
-    }
+	BOOL shouldAnimate = (animate && [self isShowingMaster]);
+	if (shouldAnimate) {
+		[UIView beginAnimations:@"SplitPosition" context:nil];
+	}
+	[self setSplitPosition:posn];
+	if (shouldAnimate) {
+		[UIView commitAnimations];
+	}
 }
 
 
 - (float)splitWidth
 {
-    return _splitWidth;
+	return _splitWidth;
 }
 
 
 - (void)setSplitWidth:(float)width
 {
-    if (width != _splitWidth && width >= 0) {
-        _splitWidth = width;
-        if ([self isShowingMaster]) {
-            [self layoutSubviews];
-        }
-    }
+	if (width != _splitWidth && width >= 0) {
+		_splitWidth = width;
+		if ([self isShowingMaster]) {
+			[self layoutSubviews];
+		}
+	}
 }
 
 
 - (NSArray *)viewControllers
 {
-    return [[_viewControllers copy] autorelease];
+	return [_viewControllers copy];
 }
 
 
 - (void)setViewControllers:(NSArray *)controllers
 {
-    if (controllers != _viewControllers) {
-        for (UIViewController *controller in _viewControllers) {
-            if ([controller isKindOfClass:[UIViewController class]]) {
-                [controller.view removeFromSuperview];
-            }
-        }
-        [_viewControllers release];
-        _viewControllers = [[NSMutableArray alloc] initWithCapacity:2];
-        if (controllers && [controllers count] >= 2) {
-            self.masterViewController = [controllers objectAtIndex:0];
-            self.detailViewController = [controllers objectAtIndex:1];
-        } else {
-            NSLog(@"Error: %@ requires 2 view-controllers. (%@)", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
-        }
-
-        [self layoutSubviews];
-    }
+	if (controllers != _viewControllers) {
+		for (UIViewController *controller in _viewControllers) {
+			if ([controller isKindOfClass:[UIViewController class]]) {
+				[controller.view removeFromSuperview];
+			}
+		}
+		_viewControllers = [[NSMutableArray alloc] initWithCapacity:2];
+		if (controllers && [controllers count] >= 2) {
+			self.masterViewController = [controllers objectAtIndex:0];
+			self.detailViewController = [controllers objectAtIndex:1];
+		} else {
+			NSLog(@"Error: %@ requires 2 view-controllers. (%@)", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
+		}
+		
+		[self layoutSubviews];
+	}
 }
 
 
 - (UIViewController *)masterViewController
 {
-    if (_viewControllers && [_viewControllers count] > 0) {
-        NSObject *controller = [_viewControllers objectAtIndex:0];
-        if ([controller isKindOfClass:[UIViewController class]]) {
-            return [[controller retain] autorelease];
-        }
-    }
-
-    return nil;
+	if (_viewControllers && [_viewControllers count] > 0) {
+		UIViewController *controller = (UIViewController *)[_viewControllers objectAtIndex:0];
+		if ([controller isKindOfClass:[UIViewController class]]) {
+			return controller;
+		}
+	}
+	
+	return nil;
 }
 
 
 - (void)setMasterViewController:(UIViewController *)master
 {
-    if (!_viewControllers) {
-        _viewControllers = [[NSMutableArray alloc] initWithCapacity:2];
-    }
-
-    NSObject *newMaster = master;
-    if (!newMaster) {
-        newMaster = [NSNull null];
-    }
-
-    BOOL changed = YES;
-    if ([_viewControllers count] > 0) {
-        if ([_viewControllers objectAtIndex:0] == newMaster) {
-            changed = NO;
-        } else {
-            [_viewControllers replaceObjectAtIndex:0 withObject:newMaster];
-        }
-
-    } else {
-        [_viewControllers addObject:newMaster];
-    }
-
-    if (changed) {
-        [self layoutSubviews];
-    }
+	if (!_viewControllers) {
+		_viewControllers = [[NSMutableArray alloc] initWithCapacity:2];
+	}
+	
+	NSObject *newMaster = master;
+	if (!newMaster) {
+		newMaster = [NSNull null];
+	}
+	
+	BOOL changed = YES;
+	if ([_viewControllers count] > 0) {
+		if ([_viewControllers objectAtIndex:0] == newMaster) {
+			changed = NO;
+		} else {
+			[_viewControllers replaceObjectAtIndex:0 withObject:newMaster];
+		}
+		
+	} else {
+		[_viewControllers addObject:newMaster];
+	}
+	
+	if (changed) {
+		[self layoutSubviews];
+	}
 }
 
 
 - (UIViewController *)detailViewController
 {
-    if (_viewControllers && [_viewControllers count] > 1) {
-        NSObject *controller = [_viewControllers objectAtIndex:1];
-        if ([controller isKindOfClass:[UIViewController class]]) {
-            return [[controller retain] autorelease];
-        }
-    }
-
-    return nil;
+	if (_viewControllers && [_viewControllers count] > 1) {
+		UIViewController *controller = (UIViewController *)[_viewControllers objectAtIndex:1];
+		if ([controller isKindOfClass:[UIViewController class]]) {
+			return controller;
+		}
+	}
+	
+	return nil;
 }
 
 
 - (void)setDetailViewController:(UIViewController *)detail
 {
-    if (!_viewControllers) {
-        _viewControllers = [[NSMutableArray alloc] initWithCapacity:2];
-        [_viewControllers addObject:[NSNull null]];
-    }
-
-    BOOL changed = YES;
-    if ([_viewControllers count] > 1) {
-        if ([_viewControllers objectAtIndex:1] == detail) {
-            changed = NO;
-        } else {
-            [_viewControllers replaceObjectAtIndex:1 withObject:detail];
-        }
-
-    } else {
-        [_viewControllers addObject:detail];
-    }
-
-    if (changed) {
-        [self layoutSubviews];
-    }
+	if (!_viewControllers) {
+		_viewControllers = [[NSMutableArray alloc] initWithCapacity:2];
+		[_viewControllers addObject:[NSNull null]];
+	}
+	
+	BOOL changed = YES;
+	if ([_viewControllers count] > 1) {
+		if ([_viewControllers objectAtIndex:1] == detail) {
+			changed = NO;
+		} else {
+			[_viewControllers replaceObjectAtIndex:1 withObject:detail];
+		}
+		
+	} else {
+		[_viewControllers addObject:detail];
+	}
+	
+	if (changed) {
+		[self layoutSubviews];
+	}
 }
 
 
 - (MGSplitDividerView *)dividerView
 {
-    return [[_dividerView retain] autorelease];
+	return _dividerView;
 }
 
 
 - (void)setDividerView:(MGSplitDividerView *)divider
 {
-    if (divider != _dividerView) {
-        [_dividerView removeFromSuperview];
-        [_dividerView release];
-        _dividerView = [divider retain];
-        _dividerView.splitViewController = self;
-        _dividerView.backgroundColor = MG_DEFAULT_CORNER_COLOR;
-        if ([self isShowingMaster]) {
-            [self layoutSubviews];
-        }
-    }
+	if (divider != _dividerView) {
+		[_dividerView removeFromSuperview];
+		_dividerView = divider;
+		_dividerView.splitViewController = self;
+		_dividerView.backgroundColor = MG_DEFAULT_CORNER_COLOR;
+		if ([self isShowingMaster]) {
+			[self layoutSubviews];
+		}
+	}
 }
 
 
 - (BOOL)allowsDraggingDivider
 {
-    if (_dividerView) {
-        return _dividerView.allowsDragging;
-    }
-
-    return NO;
+	if (_dividerView) {
+		return _dividerView.allowsDragging;
+	}
+	
+	return NO;
 }
 
 
 - (void)setAllowsDraggingDivider:(BOOL)flag
 {
-    if (self.allowsDraggingDivider != flag && _dividerView) {
-        _dividerView.allowsDragging = flag;
-    }
+	if (self.allowsDraggingDivider != flag && _dividerView) {
+		_dividerView.allowsDragging = flag;
+	}
 }
 
 
 - (MGSplitViewDividerStyle)dividerStyle
 {
-    return _dividerStyle;
+	return _dividerStyle;
 }
 
 
 - (void)setDividerStyle:(MGSplitViewDividerStyle)newStyle
 {
-    if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
-        [_hiddenPopoverController dismissPopoverAnimated:NO];
-    }
-
-    // We don't check to see if newStyle equals _dividerStyle, because it's a meta-setting.
-    // Aspects could have been changed since it was set.
-    _dividerStyle = newStyle;
-
-    // Reconfigure general appearance and behaviour.
-    float cornerRadius;
-    if (_dividerStyle == MGSplitViewDividerStyleThin) {
-        cornerRadius = MG_DEFAULT_CORNER_RADIUS;
-        _splitWidth = MG_DEFAULT_SPLIT_WIDTH;
-        self.allowsDraggingDivider = NO;
-
-    } else if (_dividerStyle == MGSplitViewDividerStylePaneSplitter) {
-        cornerRadius = MG_PANESPLITTER_CORNER_RADIUS;
-        _splitWidth = MG_PANESPLITTER_SPLIT_WIDTH;
-        self.allowsDraggingDivider = YES;
-    }
-
-    // Update divider and corners.
-    [_dividerView setNeedsDisplay];
-    if (_cornerViews) {
-        for (MGSplitCornersView *corner in _cornerViews) {
-            corner.cornerRadius = cornerRadius;
-        }
-    }
-
-    // Layout all views.
-    [self layoutSubviews];
+	if (_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {
+		[_hiddenPopoverController dismissPopoverAnimated:NO];
+	}
+	
+	// We don't check to see if newStyle equals _dividerStyle, because it's a meta-setting.
+	// Aspects could have been changed since it was set.
+	_dividerStyle = newStyle;
+	
+	// Reconfigure general appearance and behaviour.
+	float cornerRadius = 0.0f;
+	if (_dividerStyle == MGSplitViewDividerStyleThin) {
+		cornerRadius = NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_7_0 ? 0 : MG_DEFAULT_CORNER_RADIUS;
+		_splitWidth = MG_DEFAULT_SPLIT_WIDTH;
+		self.allowsDraggingDivider = NO;
+		
+	} else if (_dividerStyle == MGSplitViewDividerStylePaneSplitter) {
+		cornerRadius = MG_PANESPLITTER_CORNER_RADIUS;
+		_splitWidth = MG_PANESPLITTER_SPLIT_WIDTH;
+		self.allowsDraggingDivider = YES;
+	}
+	
+	// Update divider and corners.
+	[_dividerView setNeedsDisplay];
+	if (_cornerViews) {
+		for (MGSplitCornersView *corner in _cornerViews) {
+			corner.cornerRadius = cornerRadius;
+		}
+	}
+	
+	// Layout all views.
+	[self layoutSubviews];
 }
 
 
 - (void)setDividerStyle:(MGSplitViewDividerStyle)newStyle animated:(BOOL)animate
 {
-    BOOL shouldAnimate = (animate && [self isShowingMaster]);
-    if (shouldAnimate) {
-        [UIView beginAnimations:@"DividerStyle" context:nil];
-    }
-    [self setDividerStyle:newStyle];
-    if (shouldAnimate) {
-        [UIView commitAnimations];
-    }
+	BOOL shouldAnimate = (animate && [self isShowingMaster]);
+	if (shouldAnimate) {
+		[UIView beginAnimations:@"DividerStyle" context:nil];
+	}
+	[self setDividerStyle:newStyle];
+	if (shouldAnimate) {
+		[UIView commitAnimations];
+	}
 }
 
 
 - (NSArray *)cornerViews
 {
-    if (_cornerViews) {
-        return [[_cornerViews retain] autorelease];
-    }
-
-    return nil;
+	if (_cornerViews) {
+		return _cornerViews;
+	}
+	
+	return nil;
 }
 
 
@@ -1120,14 +1155,15 @@
 @synthesize showsMasterInLandscape;
 @synthesize vertical;
 @synthesize delegate;
-@synthesize viewControllers;
+@synthesize viewControllers = _viewControllers;
 @synthesize masterViewController;
 @synthesize detailViewController;
-@synthesize dividerView;
+@synthesize dividerView = _dividerView;
 @synthesize splitPosition;
 @synthesize splitWidth;
 @synthesize allowsDraggingDivider;
 @synthesize dividerStyle;
 
+@synthesize togglesMasterPopover;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/MXAudioPlayerFadeOperation.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MXAudioPlayerFadeOperation.m	Mon Nov 09 18:37:57 2015 +0100
@@ -79,7 +79,8 @@
 }
 
 - (void)main {
-  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+  @autoreleasepool {
+
   [NSThread sleepForTimeInterval:_delay];
   if ([self.audioPlayer isKindOfClass:[AVAudioPlayer class]]) {
     [self beginFadeOperation];
@@ -88,7 +89,7 @@
     ALog(@"AudioPlayerFadeOperation began with invalid AVAudioPlayer");
   }
 
-  [pool release];
+  }
 }
 
 - (void)beginFadeOperation {
--- a/project_files/HedgewarsMobile/Classes/MainMenuViewController-iPad.xib	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MainMenuViewController-iPad.xib	Mon Nov 09 18:37:57 2015 +0100
@@ -1,719 +1,135 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="7.10">
-	<data>
-		<int key="IBDocument.SystemTarget">1056</int>
-		<string key="IBDocument.SystemVersion">10K549</string>
-		<string key="IBDocument.InterfaceBuilderVersion">823</string>
-		<string key="IBDocument.AppKitVersion">1038.36</string>
-		<string key="IBDocument.HIToolboxVersion">461.00</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">132</string>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="1"/>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys" id="0">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="IBProxyObject" id="372490531">
-				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-			<object class="IBProxyObject" id="975951072">
-				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-			<object class="IBUIView" id="191373211">
-				<reference key="NSNextResponder"/>
-				<int key="NSvFlags">294</int>
-				<object class="NSMutableArray" key="NSSubviews">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBUIImageView" id="976741091">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">274</int>
-						<string key="NSFrameSize">{1024, 768}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIUserInteractionEnabled">NO</bool>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<object class="NSCustomResource" key="IBUIImage">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">background.png</string>
-						</object>
-					</object>
-					<object class="IBUIButton" id="867308721">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">301</int>
-						<string key="NSFrame">{{383, 389}, {271, 244}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<object class="NSFont" key="IBUIFont" id="917635782">
-							<string key="NSName">Helvetica-Bold</string>
-							<double key="NSSize">15</double>
-							<int key="NSfFlags">16</int>
-						</object>
-						<double key="IBUITitleEdgeInsets.top">215</double>
-						<double key="IBUITitleEdgeInsets.bottom">0.0</double>
-						<double key="IBUITitleEdgeInsets.left">0.0</double>
-						<double key="IBUITitleEdgeInsets.right">0.0</double>
-						<object class="NSColor" key="IBUIHighlightedTitleColor" id="918890028">
-							<int key="NSColorSpace">3</int>
-							<bytes key="NSWhite">MQA</bytes>
-						</object>
-						<object class="NSColor" key="IBUINormalTitleColor">
-							<int key="NSColorSpace">2</int>
-							<bytes key="NSRGB">MC45OTYwNzg0OTEyIDAuODAwMDAwMDcxNSAwLjAzOTIxNTY4NzY2AA</bytes>
-						</object>
-						<object class="NSColor" key="IBUINormalTitleShadowColor" id="112471976">
-							<int key="NSColorSpace">3</int>
-							<bytes key="NSWhite">MC41AA</bytes>
-						</object>
-						<object class="NSCustomResource" key="IBUINormalImage">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">localplayButton~ipad.png</string>
-						</object>
-					</object>
-					<object class="IBUIButton" id="95106947">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">289</int>
-						<string key="NSFrame">{{986, 19}, {18, 19}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<bool key="IBUIClipsSubviews">YES</bool>
-						<float key="IBUIAlpha">0.31690141558647156</float>
-						<int key="IBUITag">3</int>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="917635782"/>
-						<int key="IBUIButtonType">3</int>
-						<bool key="IBUIShowsTouchWhenHighlighted">YES</bool>
-						<reference key="IBUIHighlightedTitleColor" ref="918890028"/>
-						<object class="NSColor" key="IBUINormalTitleColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
-						</object>
-						<reference key="IBUINormalTitleShadowColor" ref="112471976"/>
-					</object>
-					<object class="IBUIButton" id="898948205">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">265</int>
-						<string key="NSFrame">{{940, 686}, {64, 64}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<int key="IBUITag">2</int>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="917635782"/>
-						<reference key="IBUIHighlightedTitleColor" ref="918890028"/>
-						<object class="NSColor" key="IBUINormalTitleColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
-						</object>
-						<reference key="IBUINormalTitleShadowColor" ref="112471976"/>
-						<object class="NSCustomResource" key="IBUINormalImage">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">settingsButton.png</string>
-						</object>
-					</object>
-					<object class="IBUIButton" id="894101036">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">268</int>
-						<string key="NSFrame">{{20, 686}, {64, 64}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<int key="IBUITag">4</int>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="917635782"/>
-						<reference key="IBUIHighlightedTitleColor" ref="918890028"/>
-						<object class="NSColor" key="IBUINormalTitleColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
-						</object>
-						<reference key="IBUINormalTitleShadowColor" ref="112471976"/>
-						<object class="NSCustomResource" key="IBUINormalImage">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">savesButton.png</string>
-						</object>
-					</object>
-					<object class="IBUIImageView" id="1019880682">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">301</int>
-						<string key="NSFrame">{{242, 43}, {540, 300}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIUserInteractionEnabled">NO</bool>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<object class="NSCustomResource" key="IBUIImage">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">title~ipad.png</string>
-						</object>
-					</object>
-					<object class="IBUIButton" id="357438048">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">269</int>
-						<string key="NSFrame">{{565, 686}, {89, 37}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<int key="IBUITag">5</int>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="917635782"/>
-						<int key="IBUIButtonType">1</int>
-						<string key="IBUINormalTitle">Missions</string>
-						<reference key="IBUIHighlightedTitleColor" ref="918890028"/>
-						<object class="NSColor" key="IBUINormalTitleColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
-						</object>
-						<reference key="IBUINormalTitleShadowColor" ref="112471976"/>
-					</object>
-					<object class="IBUIButton" id="719094980">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">269</int>
-						<string key="NSFrame">{{383, 686}, {89, 37}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<int key="IBUITag">6</int>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="917635782"/>
-						<int key="IBUIButtonType">1</int>
-						<string key="IBUINormalTitle">Simple</string>
-						<reference key="IBUIHighlightedTitleColor" ref="918890028"/>
-						<object class="NSColor" key="IBUINormalTitleColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
-						</object>
-						<reference key="IBUINormalTitleShadowColor" ref="112471976"/>
-					</object>
-				</object>
-				<string key="NSFrameSize">{1024, 768}</string>
-				<reference key="NSSuperview"/>
-				<object class="NSColor" key="IBUIBackgroundColor">
-					<int key="NSColorSpace">1</int>
-					<bytes key="NSRGB">MCAwIDAAA</bytes>
-				</object>
-				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-					<int key="interfaceOrientation">3</int>
-				</object>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-		</object>
-		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">view</string>
-						<reference key="source" ref="372490531"/>
-						<reference key="destination" ref="191373211"/>
-					</object>
-					<int key="connectionID">3</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">switchViews:</string>
-						<reference key="source" ref="95106947"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">47</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">switchViews:</string>
-						<reference key="source" ref="867308721"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">48</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">switchViews:</string>
-						<reference key="source" ref="898948205"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">54</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">switchViews:</string>
-						<reference key="source" ref="894101036"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">89</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">switchViews:</string>
-						<reference key="source" ref="357438048"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">92</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">switchViews:</string>
-						<reference key="source" ref="719094980"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">94</int>
-				</object>
-			</object>
-			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBObjectRecord">
-						<int key="objectID">0</int>
-						<reference key="object" ref="0"/>
-						<reference key="children" ref="1000"/>
-						<nil key="parent"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">1</int>
-						<reference key="object" ref="191373211"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="976741091"/>
-							<reference ref="867308721"/>
-							<reference ref="898948205"/>
-							<reference ref="894101036"/>
-							<reference ref="1019880682"/>
-							<reference ref="95106947"/>
-							<reference ref="357438048"/>
-							<reference ref="719094980"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-1</int>
-						<reference key="object" ref="372490531"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">File's Owner</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-2</int>
-						<reference key="object" ref="975951072"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">39</int>
-						<reference key="object" ref="867308721"/>
-						<reference key="parent" ref="191373211"/>
-						<string key="objectName">local</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">45</int>
-						<reference key="object" ref="95106947"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">52</int>
-						<reference key="object" ref="898948205"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">37</int>
-						<reference key="object" ref="976741091"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">88</int>
-						<reference key="object" ref="894101036"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">90</int>
-						<reference key="object" ref="1019880682"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">91</int>
-						<reference key="object" ref="357438048"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">93</int>
-						<reference key="object" ref="719094980"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.CustomClassName</string>
-					<string>-2.CustomClassName</string>
-					<string>1.IBEditorWindowLastContentRect</string>
-					<string>1.IBPluginDependency</string>
-					<string>37.IBPluginDependency</string>
-					<string>39.IBPluginDependency</string>
-					<string>45.IBPluginDependency</string>
-					<string>45.IBViewBoundsToFrameTransform</string>
-					<string>52.IBPluginDependency</string>
-					<string>52.IBViewBoundsToFrameTransform</string>
-					<string>88.IBPluginDependency</string>
-					<string>88.IBViewBoundsToFrameTransform</string>
-					<string>90.IBPluginDependency</string>
-					<string>90.IBViewBoundsToFrameTransform</string>
-					<string>91.IBPluginDependency</string>
-					<string>91.IBViewBoundsToFrameTransform</string>
-					<string>93.IBPluginDependency</string>
-					<string>93.IBViewBoundsToFrameTransform</string>
-				</object>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>MainMenuViewController</string>
-					<string>UIResponder</string>
-					<string>{{89, 260}, {1024, 768}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABERsAAw6cAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABEaQAAxDsAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABBoAAAxDsAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABDbQAAw6qAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABD6gAAxDRAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABDuYAAxDRAAA</bytes>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="sourceID"/>
-			<int key="maxID">94</int>
-		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">MainMenuViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="NSMutableDictionary" key="actions">
-						<string key="NS.key.0">switchViews:</string>
-						<string key="NS.object.0">id</string>
-					</object>
-					<object class="NSMutableDictionary" key="actionInfosByName">
-						<string key="NS.key.0">switchViews:</string>
-						<object class="IBActionInfo" key="NS.object.0">
-							<string key="name">switchViews:</string>
-							<string key="candidateClassName">id</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/MainMenuViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIButton</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/ExtraCategories.h</string>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="864669175">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIButton</string>
-					<string key="superclassName">UIControl</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIButton.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIControl</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIControl.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIImageView</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIImageView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIResponder</string>
-					<string key="superclassName">NSObject</string>
-					<reference key="sourceIdentifier" ref="864669175"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchBar</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchDisplayController</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPrintFormatter.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
-					</object>
-				</object>
-			</object>
-		</object>
-		<int key="IBDocument.localizationMode">0</int>
-		<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
-			<integer value="1056" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-			<integer value="3000" key="NS.object.0"/>
-		</object>
-		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<string key="IBDocument.LastKnownRelativeProjectPath">../Hedgewars.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>background.png</string>
-				<string>localplayButton~ipad.png</string>
-				<string>savesButton.png</string>
-				<string>settingsButton.png</string>
-				<string>title~ipad.png</string>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>{1024, 768}</string>
-				<string>{263, 244}</string>
-				<string>{64, 64}</string>
-				<string>{64, 64}</string>
-				<string>{540, 300}</string>
-			</object>
-		</object>
-		<string key="IBCocoaTouchPluginVersion">132</string>
-	</data>
-</archive>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="9059" systemVersion="15B42" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9049"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MainMenuViewController">
+            <connections>
+                <outlet property="missionsButton" destination="91" id="96"/>
+                <outlet property="simpleGameButton" destination="93" id="95"/>
+                <outlet property="view" destination="1" id="3"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="1">
+            <rect key="frame" x="0.0" y="0.0" width="1024" height="768"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <subviews>
+                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="background.png" id="37">
+                    <rect key="frame" x="0.0" y="0.0" width="1024" height="768"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    <animations/>
+                </imageView>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="39" userLabel="local">
+                    <rect key="frame" x="383" y="389" width="271" height="244"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <inset key="titleEdgeInsets" minX="0.0" minY="215" maxX="0.0" maxY="0.0"/>
+                    <state key="normal" image="localplayButton.png">
+                        <color key="titleColor" red="0.99607849120000003" green="0.80000007149999997" blue="0.039215687659999998" alpha="1" colorSpace="deviceRGB"/>
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <state key="highlighted">
+                        <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="switchViews:" destination="-1" eventType="touchUpInside" id="48"/>
+                    </connections>
+                </button>
+                <button opaque="NO" clipsSubviews="YES" alpha="0.69999999999999996" tag="3" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="infoLight" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="45">
+                    <rect key="frame" x="984" y="20" width="22" height="22"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <color key="tintColor" red="0.99607843137254903" green="0.85098039215686272" blue="0.039215686274509803" alpha="1" colorSpace="calibratedRGB"/>
+                    <state key="normal">
+                        <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <state key="highlighted">
+                        <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="switchViews:" destination="-1" eventType="touchUpInside" id="47"/>
+                    </connections>
+                </button>
+                <button opaque="NO" tag="2" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="52">
+                    <rect key="frame" x="940" y="686" width="64" height="64"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <state key="normal" image="settingsButton.png">
+                        <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <state key="highlighted">
+                        <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="switchViews:" destination="-1" eventType="touchUpInside" id="54"/>
+                    </connections>
+                </button>
+                <button opaque="NO" tag="4" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="88">
+                    <rect key="frame" x="20" y="686" width="64" height="64"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <state key="normal" image="savesButton.png">
+                        <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <state key="highlighted">
+                        <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="switchViews:" destination="-1" eventType="touchUpInside" id="89"/>
+                    </connections>
+                </button>
+                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="title.png" id="90">
+                    <rect key="frame" x="242" y="43" width="540" height="300"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                </imageView>
+                <button opaque="NO" tag="5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="91">
+                    <rect key="frame" x="565" y="686" width="89" height="37"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <state key="normal" title="Missions">
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="switchViews:" destination="-1" eventType="touchUpInside" id="92"/>
+                    </connections>
+                </button>
+                <button opaque="NO" tag="6" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="93">
+                    <rect key="frame" x="383" y="686" width="89" height="37"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <state key="normal" title="Simple">
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="switchViews:" destination="-1" eventType="touchUpInside" id="94"/>
+                    </connections>
+                </button>
+            </subviews>
+            <animations/>
+            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+            <nil key="simulatedStatusBarMetrics"/>
+            <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
+            <point key="canvasLocation" x="644" y="499"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="background.png" width="1024" height="768"/>
+        <image name="localplayButton.png" width="263" height="244"/>
+        <image name="savesButton.png" width="64" height="64"/>
+        <image name="settingsButton.png" width="64" height="64"/>
+        <image name="title.png" width="540" height="300"/>
+    </resources>
+</document>
--- a/project_files/HedgewarsMobile/Classes/MainMenuViewController-iPhone.xib	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MainMenuViewController-iPhone.xib	Mon Nov 09 18:37:57 2015 +0100
@@ -1,734 +1,137 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
-	<data>
-		<int key="IBDocument.SystemTarget">1056</int>
-		<string key="IBDocument.SystemVersion">10K549</string>
-		<string key="IBDocument.InterfaceBuilderVersion">823</string>
-		<string key="IBDocument.AppKitVersion">1038.36</string>
-		<string key="IBDocument.HIToolboxVersion">461.00</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">132</string>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="48"/>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys" id="0">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="IBProxyObject" id="372490531">
-				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-			<object class="IBProxyObject" id="975951072">
-				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-			<object class="IBUIView" id="191373211">
-				<reference key="NSNextResponder"/>
-				<int key="NSvFlags">293</int>
-				<object class="NSMutableArray" key="NSSubviews">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBUIImageView" id="249993817">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">274</int>
-						<string key="NSFrameSize">{480, 320}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<object class="NSColor" key="IBUIBackgroundColor">
-							<int key="NSColorSpace">3</int>
-							<bytes key="NSWhite">MCAwAA</bytes>
-						</object>
-						<int key="IBUIContentMode">4</int>
-						<bool key="IBUIUserInteractionEnabled">NO</bool>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<object class="NSCustomResource" key="IBUIImage">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">background~iphone.png</string>
-						</object>
-					</object>
-					<object class="IBUIImageView" id="171108356">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">293</int>
-						<string key="NSFrame">{{105, 20}, {270, 150}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
-						<int key="IBUIContentMode">4</int>
-						<bool key="IBUIUserInteractionEnabled">NO</bool>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<object class="NSCustomResource" key="IBUIImage">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">title~iphone.png</string>
-						</object>
-					</object>
-					<object class="IBUIButton" id="124270424">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">289</int>
-						<string key="NSFrame">{{190, 200}, {100, 100}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<object class="NSColor" key="IBUIBackgroundColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MCAwIDAgMAA</bytes>
-						</object>
-						<bool key="IBUIOpaque">NO</bool>
-						<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<object class="NSFont" key="IBUIFont" id="917635782">
-							<string key="NSName">Helvetica-Bold</string>
-							<double key="NSSize">15</double>
-							<int key="NSfFlags">16</int>
-						</object>
-						<object class="NSColor" key="IBUIHighlightedTitleColor" id="918890028">
-							<int key="NSColorSpace">3</int>
-							<bytes key="NSWhite">MQA</bytes>
-						</object>
-						<object class="NSColor" key="IBUINormalTitleColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA</bytes>
-						</object>
-						<object class="NSColor" key="IBUINormalTitleShadowColor" id="112471976">
-							<int key="NSColorSpace">3</int>
-							<bytes key="NSWhite">MC41AA</bytes>
-						</object>
-						<object class="NSCustomResource" key="IBUINormalImage">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">localplayButton~iphone.png</string>
-						</object>
-					</object>
-					<object class="IBUIButton" id="753723574">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">269</int>
-						<string key="NSFrame">{{396, 236}, {64, 64}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
-						<int key="IBUITag">2</int>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="917635782"/>
-						<reference key="IBUIHighlightedTitleColor" ref="918890028"/>
-						<object class="NSColor" key="IBUINormalTitleColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA</bytes>
-						</object>
-						<reference key="IBUINormalTitleShadowColor" ref="112471976"/>
-						<object class="NSCustomResource" key="IBUINormalImage">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">settingsButton.png</string>
-						</object>
-					</object>
-					<object class="IBUIButton" id="705508539">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">269</int>
-						<string key="NSFrame">{{20, 236}, {64, 64}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
-						<int key="IBUITag">4</int>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="917635782"/>
-						<reference key="IBUIHighlightedTitleColor" ref="918890028"/>
-						<object class="NSColor" key="IBUINormalTitleColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA</bytes>
-						</object>
-						<reference key="IBUINormalTitleShadowColor" ref="112471976"/>
-						<object class="NSCustomResource" key="IBUINormalImage">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">savesButton.png</string>
-						</object>
-					</object>
-					<object class="IBUIButton" id="818907840">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">292</int>
-						<string key="NSFrame">{{20, 19}, {18, 19}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<float key="IBUIAlpha">0.5</float>
-						<int key="IBUITag">3</int>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="917635782"/>
-						<int key="IBUIButtonType">3</int>
-						<bool key="IBUIShowsTouchWhenHighlighted">YES</bool>
-						<reference key="IBUIHighlightedTitleColor" ref="918890028"/>
-						<object class="NSColor" key="IBUINormalTitleColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
-						</object>
-						<reference key="IBUINormalTitleShadowColor" ref="112471976"/>
-					</object>
-					<object class="IBUIButton" id="629390161">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">292</int>
-						<string key="NSFrame">{{439, 13}, {29, 31}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<int key="IBUITag">5</int>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="917635782"/>
-						<int key="IBUIButtonType">2</int>
-						<reference key="IBUIHighlightedTitleColor" ref="918890028"/>
-						<object class="NSColor" key="IBUINormalTitleColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
-						</object>
-						<reference key="IBUINormalTitleShadowColor" ref="112471976"/>
-					</object>
-					<object class="IBUIButton" id="274540289">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">292</int>
-						<string key="NSFrame">{{439, 68}, {29, 31}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<int key="IBUITag">6</int>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="917635782"/>
-						<int key="IBUIButtonType">2</int>
-						<reference key="IBUIHighlightedTitleColor" ref="918890028"/>
-						<object class="NSColor" key="IBUINormalTitleColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
-						</object>
-						<reference key="IBUINormalTitleShadowColor" ref="112471976"/>
-					</object>
-				</object>
-				<string key="NSFrameSize">{480, 320}</string>
-				<reference key="NSSuperview"/>
-				<object class="NSColor" key="IBUIBackgroundColor">
-					<int key="NSColorSpace">1</int>
-					<bytes key="NSRGB">MCAwIDAAA</bytes>
-				</object>
-				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-					<int key="interfaceOrientation">3</int>
-				</object>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-		</object>
-		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">view</string>
-						<reference key="source" ref="372490531"/>
-						<reference key="destination" ref="191373211"/>
-					</object>
-					<int key="connectionID">3</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">switchViews:</string>
-						<reference key="source" ref="753723574"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">30</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">switchViews:</string>
-						<reference key="source" ref="124270424"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">40</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">switchViews:</string>
-						<reference key="source" ref="818907840"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">42</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">switchViews:</string>
-						<reference key="source" ref="705508539"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">44</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">switchViews:</string>
-						<reference key="source" ref="629390161"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">47</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">switchViews:</string>
-						<reference key="source" ref="274540289"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">49</int>
-				</object>
-			</object>
-			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBObjectRecord">
-						<int key="objectID">0</int>
-						<reference key="object" ref="0"/>
-						<reference key="children" ref="1000"/>
-						<nil key="parent"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">1</int>
-						<reference key="object" ref="191373211"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="249993817"/>
-							<reference ref="818907840"/>
-							<reference ref="171108356"/>
-							<reference ref="705508539"/>
-							<reference ref="753723574"/>
-							<reference ref="124270424"/>
-							<reference ref="629390161"/>
-							<reference ref="274540289"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-1</int>
-						<reference key="object" ref="372490531"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">File's Owner</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-2</int>
-						<reference key="object" ref="975951072"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">23</int>
-						<reference key="object" ref="171108356"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">22</int>
-						<reference key="object" ref="249993817"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">41</int>
-						<reference key="object" ref="818907840"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">43</int>
-						<reference key="object" ref="705508539"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">24</int>
-						<reference key="object" ref="124270424"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">28</int>
-						<reference key="object" ref="753723574"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">46</int>
-						<reference key="object" ref="629390161"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">48</int>
-						<reference key="object" ref="274540289"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.CustomClassName</string>
-					<string>-2.CustomClassName</string>
-					<string>1.IBEditorWindowLastContentRect</string>
-					<string>1.IBPluginDependency</string>
-					<string>22.IBPluginDependency</string>
-					<string>22.IBViewBoundsToFrameTransform</string>
-					<string>23.IBPluginDependency</string>
-					<string>23.IBViewBoundsToFrameTransform</string>
-					<string>24.IBPluginDependency</string>
-					<string>24.IBViewBoundsToFrameTransform</string>
-					<string>28.IBPluginDependency</string>
-					<string>28.IBViewBoundsToFrameTransform</string>
-					<string>41.IBPluginDependency</string>
-					<string>41.IBViewBoundsToFrameTransform</string>
-					<string>43.IBPluginDependency</string>
-					<string>43.IBViewBoundsToFrameTransform</string>
-					<string>46.IBPluginDependency</string>
-					<string>46.IBViewBoundsToFrameTransform</string>
-					<string>48.IBPluginDependency</string>
-					<string>48.IBViewBoundsToFrameTransform</string>
-				</object>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>MainMenuViewController</string>
-					<string>UIResponder</string>
-					<string>{{517, 519}, {480, 320}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAAAAAAAAw5UAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABCygAAwzcAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABDPgAAw5UAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABDxgAAw5iAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABBcAAAwhAAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABBoAAAw5iAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">AUPbgABBUAAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABD3gAAwjwAAA</bytes>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="sourceID"/>
-			<int key="maxID">49</int>
-		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">MainMenuViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="NSMutableDictionary" key="actions">
-						<string key="NS.key.0">switchViews:</string>
-						<string key="NS.object.0">id</string>
-					</object>
-					<object class="NSMutableDictionary" key="actionInfosByName">
-						<string key="NS.key.0">switchViews:</string>
-						<object class="IBActionInfo" key="NS.object.0">
-							<string key="name">switchViews:</string>
-							<string key="candidateClassName">id</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/MainMenuViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIButton</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/ExtraCategories.h</string>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="238583711">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIButton</string>
-					<string key="superclassName">UIControl</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIButton.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIControl</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIControl.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIImageView</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIImageView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIResponder</string>
-					<string key="superclassName">NSObject</string>
-					<reference key="sourceIdentifier" ref="238583711"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchBar</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchDisplayController</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPrintFormatter.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
-					</object>
-				</object>
-			</object>
-		</object>
-		<int key="IBDocument.localizationMode">0</int>
-		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
-			<integer value="1056" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-			<integer value="3000" key="NS.object.0"/>
-		</object>
-		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<string key="IBDocument.LastKnownRelativeProjectPath">../Hedgewars.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>background~iphone.png</string>
-				<string>localplayButton~iphone.png</string>
-				<string>savesButton.png</string>
-				<string>settingsButton.png</string>
-				<string>title~iphone.png</string>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>{480, 320}</string>
-				<string>{100, 100}</string>
-				<string>{64, 64}</string>
-				<string>{64, 64}</string>
-				<string>{270, 150}</string>
-			</object>
-		</object>
-		<string key="IBCocoaTouchPluginVersion">132</string>
-	</data>
-</archive>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9059" systemVersion="15B42" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9049"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MainMenuViewController">
+            <connections>
+                <outlet property="missionsButton" destination="52" id="54"/>
+                <outlet property="simpleGameButton" destination="51" id="56"/>
+                <outlet property="view" destination="1" id="3"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="1">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="320"/>
+            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <subviews>
+                <imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" image="background.png" id="22">
+                    <rect key="frame" x="0.0" y="0.0" width="480" height="320"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    <animations/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                </imageView>
+                <imageView opaque="NO" clearsContextBeforeDrawing="NO" userInteractionEnabled="NO" contentMode="center" image="title.png" id="23">
+                    <rect key="frame" x="105" y="20" width="270" height="150"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                </imageView>
+                <button opaque="NO" tag="5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="52">
+                    <rect key="frame" x="376" y="14" width="89" height="31"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <state key="normal" title="Missions">
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="switchViews:" destination="-1" eventType="touchUpInside" id="53"/>
+                    </connections>
+                </button>
+                <button opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="24">
+                    <rect key="frame" x="190" y="200" width="100" height="100"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <animations/>
+                    <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <state key="normal" image="localplayButton.png">
+                        <color key="titleColor" red="0.19607843" green="0.30980393000000001" blue="0.52156866000000002" alpha="1" colorSpace="calibratedRGB"/>
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <state key="highlighted">
+                        <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="switchViews:" destination="-1" eventType="touchUpInside" id="40"/>
+                    </connections>
+                </button>
+                <button opaque="NO" clearsContextBeforeDrawing="NO" tag="2" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="28">
+                    <rect key="frame" x="396" y="236" width="64" height="64"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <state key="normal" image="settingsButton.png">
+                        <color key="titleColor" red="0.19607843" green="0.30980393000000001" blue="0.52156866000000002" alpha="1" colorSpace="calibratedRGB"/>
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <state key="highlighted">
+                        <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="switchViews:" destination="-1" eventType="touchUpInside" id="30"/>
+                    </connections>
+                </button>
+                <button opaque="NO" clearsContextBeforeDrawing="NO" tag="4" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="43">
+                    <rect key="frame" x="20" y="236" width="64" height="64"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <state key="normal" image="savesButton.png">
+                        <color key="titleColor" red="0.19607843" green="0.30980393000000001" blue="0.52156866000000002" alpha="1" colorSpace="calibratedRGB"/>
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <state key="highlighted">
+                        <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="switchViews:" destination="-1" eventType="touchUpInside" id="44"/>
+                    </connections>
+                </button>
+                <button opaque="NO" alpha="0.69999999999999996" tag="3" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="infoLight" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="41">
+                    <rect key="frame" x="20" y="20" width="22" height="22"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <color key="tintColor" red="0.99607843137254903" green="0.85098039215686272" blue="0.039215686274509803" alpha="1" colorSpace="calibratedRGB"/>
+                    <state key="normal">
+                        <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <state key="highlighted">
+                        <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="switchViews:" destination="-1" eventType="touchUpInside" id="42"/>
+                    </connections>
+                </button>
+                <button opaque="NO" tag="6" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="51">
+                    <rect key="frame" x="376" y="57" width="89" height="31"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <state key="normal" title="Simple">
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="switchViews:" destination="-1" eventType="touchUpInside" id="55"/>
+                    </connections>
+                </button>
+            </subviews>
+            <animations/>
+            <color key="backgroundColor" cocoaTouchSystemColor="darkTextColor"/>
+            <nil key="simulatedStatusBarMetrics"/>
+            <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="567" y="470"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="background.png" width="480" height="320"/>
+        <image name="localplayButton.png" width="100" height="100"/>
+        <image name="savesButton.png" width="64" height="64"/>
+        <image name="settingsButton.png" width="64" height="64"/>
+        <image name="title.png" width="270" height="150"/>
+    </resources>
+</document>
--- a/project_files/HedgewarsMobile/Classes/MainMenuViewController.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MainMenuViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -19,29 +19,7 @@
 
 #import <UIKit/UIKit.h>
 
-
-@class GameConfigViewController;
-@class SettingsContainerViewController;
-@class AboutViewController;
-@class SavedGamesViewController;
-@class RestoreViewController;
-@class MissionTrainingViewController;
-
-@interface MainMenuViewController : UIViewController <UIAlertViewDelegate> {
-    GameConfigViewController *gameConfigViewController;
-    SettingsContainerViewController *settingsViewController;
-    AboutViewController *aboutViewController;
-    SavedGamesViewController *savedGamesViewController;
-    RestoreViewController *restoreViewController;
-    MissionTrainingViewController *missionsViewController;
-}
-
-@property (nonatomic,retain) GameConfigViewController *gameConfigViewController;
-@property (nonatomic,retain) SettingsContainerViewController *settingsViewController;
-@property (nonatomic,retain) AboutViewController *aboutViewController;
-@property (nonatomic,retain) SavedGamesViewController *savedGamesViewController;
-@property (nonatomic,retain) RestoreViewController *restoreViewController;
-@property (nonatomic,retain) MissionTrainingViewController *missionsViewController;
+@interface MainMenuViewController : UIViewController <UIAlertViewDelegate>
 
 -(IBAction) switchViews:(id)sender;
 
--- a/project_files/HedgewarsMobile/Classes/MainMenuViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MainMenuViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -20,7 +20,8 @@
 #import "MainMenuViewController.h"
 #import <QuartzCore/QuartzCore.h>
 #import "GameConfigViewController.h"
-#import "SettingsContainerViewController.h"
+#import "MGSplitViewController.h"
+#import "SettingsBaseViewController.h"
 #import "AboutViewController.h"
 #import "SavedGamesViewController.h"
 #import "RestoreViewController.h"
@@ -29,10 +30,23 @@
 #import "ServerProtocolNetwork.h"
 #import "GameInterfaceBridge.h"
 
+#import "SettingsBaseViewController.h"
+#import "GeneralSettingsViewController.h"
+#import "TeamSettingsViewController.h"
+#import "WeaponSettingsViewController.h"
+#import "SchemeSettingsViewController.h"
+#import "SupportViewController.h"
+
+#ifdef DEBUG
+#import "GameLogViewController.h"
+#endif
+
+@interface MainMenuViewController ()
+@property (retain, nonatomic) IBOutlet UIButton *simpleGameButton;
+@property (retain, nonatomic) IBOutlet UIButton *missionsButton;
+@end
 
 @implementation MainMenuViewController
-@synthesize gameConfigViewController, settingsViewController, aboutViewController, savedGamesViewController,
-            restoreViewController, missionsViewController;
 
 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
     return rotationManager(interfaceOrientation);
@@ -42,7 +56,13 @@
 -(void) viewDidLoad {
     self.view.frame = [[UIScreen mainScreen] safeBounds];
     [super viewDidLoad];
-
+    
+    [self.simpleGameButton setTitle:NSLocalizedString(@"Simple", nil) forState:UIControlStateNormal];
+    [self.missionsButton setTitle:NSLocalizedString(@"Missions", nil) forState:UIControlStateNormal];
+    
+    [self.simpleGameButton applyDarkBlueQuickStyle];
+    [self.missionsButton applyDarkBlueQuickStyle];
+    
     // get the app's version
     NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey];
 
@@ -62,19 +82,19 @@
 
     // prompt for restoring any previous game
     NSString *saveString = [userDefaults objectForKey:@"savedGamePath"];
-    if (saveString != nil && [saveString isEqualToString:@""] == NO && [[userDefaults objectForKey:@"saveIsValid"] boolValue]) {
-        if (self.restoreViewController == nil) {
-            NSString *xibName = [@"RestoreViewController-" stringByAppendingString:(IS_IPAD() ? @"iPad" : @"iPhone")];
-            RestoreViewController *restored = [[RestoreViewController alloc] initWithNibName:xibName bundle:nil];
-            if ([restored respondsToSelector:@selector(setModalPresentationStyle:)])
-                restored.modalPresentationStyle = UIModalPresentationFormSheet;
-            self.restoreViewController = restored;
-            [restored release];
-        }
-        [self performSelector:@selector(presentModalViewController:animated:) withObject:self.restoreViewController afterDelay:0.25];
-    } else {
+    if (saveString != nil && [saveString isEqualToString:@""] == NO && [[userDefaults objectForKey:@"saveIsValid"] boolValue])
+    {
+        NSString *xibName = [@"RestoreViewController-" stringByAppendingString:(IS_IPAD() ? @"iPad" : @"iPhone")];
+        RestoreViewController *restored = [[RestoreViewController alloc] initWithNibName:xibName bundle:nil];
+        if ([restored respondsToSelector:@selector(setModalPresentationStyle:)])
+            restored.modalPresentationStyle = UIModalPresentationFormSheet;
+
+        [self performSelector:@selector(presentViewController:) withObject:restored afterDelay:0.25];
+    }
+    else
+    {
         // let's not prompt for rating when app crashed >_>
-        [Appirater appLaunched];
+        [Appirater appLaunched:YES];
     }
 
     /*
@@ -82,6 +102,12 @@
     */
 }
 
+- (void) presentViewController:(UIViewController *)vc
+{
+    [self presentViewController:vc animated:NO completion:nil];
+    [vc release];
+}
+
 -(void) viewWillAppear:(BOOL)animated {
     [[AudioManagerController mainManager] playBackgroundMusic];
     [super viewWillAppear:animated];
@@ -92,99 +118,134 @@
     UIButton *button = (UIButton *)sender;
     UIAlertView *alert;
     NSString *xib = nil;
-    NSString *debugStr = nil;
 
     [[AudioManagerController mainManager] playClickSound];
     switch (button.tag) {
         case 0:
-            if (nil == self.gameConfigViewController) {
-                xib = IS_IPAD() ? @"GameConfigViewController-iPad" : @"GameConfigViewController-iPhone";
+            xib = IS_IPAD() ? @"GameConfigViewController-iPad" : @"GameConfigViewController-iPhone";
 
-                GameConfigViewController *gcvc = [[GameConfigViewController alloc] initWithNibName:xib bundle:nil];
-                gcvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
-                self.gameConfigViewController = gcvc;
-                [gcvc release];
-            }
-            [self presentModalViewController:self.gameConfigViewController animated:YES];
+            GameConfigViewController *gcvc = [[GameConfigViewController alloc] initWithNibName:xib bundle:nil];
+            gcvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
+
+            [self presentViewController:gcvc animated:YES completion:nil];
+            [gcvc release];
             break;
         case 2:
-            if (nil == self.settingsViewController) {
-                SettingsContainerViewController *svrc = [[SettingsContainerViewController alloc] initWithNibName:nil bundle:nil];
-                svrc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
-                self.settingsViewController = svrc;
-                [svrc release];
+            if (IS_IPAD())
+            {
+                // the contents on the right of the splitview, setting targetController to nil to avoid creating the table
+                SettingsBaseViewController *rightController = [[SettingsBaseViewController alloc] init];
+                rightController.targetController = nil;
+                UINavigationController *rightNavController = [[UINavigationController alloc] initWithRootViewController:rightController];
+                [rightController release];
+                
+                // the contens on the left of the splitview, setting targetController that will receive push/pop actions
+                SettingsBaseViewController *leftController = [[SettingsBaseViewController alloc] init];
+                leftController.targetController = rightNavController.topViewController;
+                UINavigationController *leftNavController = [[UINavigationController alloc] initWithRootViewController:leftController];
+                [leftController release];
+                
+                MGSplitViewController *splitViewRootController = [[MGSplitViewController alloc] init];
+                splitViewRootController.delegate = nil;
+                splitViewRootController.showsMasterInPortrait = YES;
+                splitViewRootController.viewControllers = [NSArray arrayWithObjects:leftNavController, rightNavController, nil];
+                [leftNavController release];
+                [rightNavController release];
+
+                [self presentViewController:splitViewRootController animated:YES completion:nil];
+                [splitViewRootController release];
             }
-            [self presentModalViewController:self.settingsViewController animated:YES];
+            else
+            {
+                NSMutableArray *tabBarNavigationControllers = [[NSMutableArray alloc] initWithCapacity:5];
+                
+                UIViewController *generalSettingsViewController = [[GeneralSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
+                generalSettingsViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"General",@"") imageName:@"flower" selectedImageName:@"flower_filled"];
+                UINavigationController *generalNavController = [[UINavigationController alloc] initWithRootViewController:generalSettingsViewController];
+                [generalSettingsViewController release];
+                [tabBarNavigationControllers addObject:generalNavController];
+                [generalNavController release];
+                
+                UIViewController *teamSettingsViewController = [[TeamSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
+                teamSettingsViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"Teams",@"") imageName:@"teams" selectedImageName:@"teams_filled"];
+                UINavigationController *teamNavController = [[UINavigationController alloc] initWithRootViewController:teamSettingsViewController];
+                [teamSettingsViewController release];
+                [tabBarNavigationControllers addObject:teamNavController];
+                [teamNavController release];
+                
+                UIViewController *weaponSettingsViewController = [[WeaponSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
+                weaponSettingsViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"Weapons",@"") imageName:@"bullet" selectedImageName:@"bullet_filled"];
+                UINavigationController *weaponNavController = [[UINavigationController alloc] initWithRootViewController:weaponSettingsViewController];
+                [weaponSettingsViewController release];
+                [tabBarNavigationControllers addObject:weaponNavController];
+                [weaponNavController release];
+                
+                UIViewController *schemeSettingsViewController = [[SchemeSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
+                schemeSettingsViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"Schemes",@"") imageName:@"target" selectedImageName:@"target_filled"];
+                UINavigationController *schemeNavController = [[UINavigationController alloc] initWithRootViewController:schemeSettingsViewController];
+                [schemeSettingsViewController release];
+                [tabBarNavigationControllers addObject:schemeNavController];
+                [schemeNavController release];
+                
+                UIViewController *supportViewController = [[SupportViewController alloc] initWithStyle:UITableViewStyleGrouped];
+                supportViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"Support",@"") imageName:@"heart" selectedImageName:@"heart_filled"];
+                UINavigationController *supportNavController = [[UINavigationController alloc] initWithRootViewController:supportViewController];
+                [supportViewController release];
+                [tabBarNavigationControllers addObject:supportNavController];
+                [supportNavController release];
+                
+                UITabBarController *settingsTabController = [[UITabBarController alloc] init];
+                settingsTabController.viewControllers = tabBarNavigationControllers;
+                [tabBarNavigationControllers release];
+                
+                [self presentViewController:settingsTabController animated:YES completion:nil];
+                [settingsTabController release];
+            }
             break;
         case 3:
 #ifdef DEBUG
-            if ([[NSFileManager defaultManager] fileExistsAtPath:DEBUG_FILE()])
-                debugStr = [[NSString alloc] initWithContentsOfFile:DEBUG_FILE()];
-            else
-                debugStr = [[NSString alloc] initWithString:@"Here be log"];
-            UITextView *scroll = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.height, self.view.frame.size.width)];
-            scroll.text = debugStr;
-            [debugStr release];
-            scroll.editable = NO;
-            scroll.alpha = 0;
-
-            UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
-            [btn addTarget:scroll action:@selector(removeFromSuperview) forControlEvents:UIControlEventTouchUpInside];
-            [btn addTarget:btn action:@selector(removeFromSuperview) forControlEvents:UIControlEventTouchUpInside];
-            btn.frame = CGRectMake(self.view.frame.size.height-58, -6, 64, 64);
-            btn.backgroundColor = [UIColor blackColor];
-            btn.titleLabel.textColor = [UIColor whiteColor];
-            btn.titleLabel.textAlignment = UITextAlignmentCenter;
-            btn.titleLabel.font = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
-            [btn setTitle:@"Close" forState:UIControlStateNormal];
-            btn.alpha = 0;
-            [btn.layer setCornerRadius:10.0f];
-            [btn.layer setMasksToBounds:YES];
-
-            [self.view addSubview:scroll];
-            [self.view addSubview:btn];
-
-            [UIView beginAnimations:@"fadein" context:NULL];
-            [UIView setAnimationDuration:0.25f];
-            btn.alpha = 1;
-            scroll.alpha = 1;
-            [UIView commitAnimations];
-            [scroll release];
+            {
+                GameLogViewController *gameLogVC = [[GameLogViewController alloc] init];
+                UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:gameLogVC];
+                [gameLogVC release];
+                
+                [self presentViewController:navController animated:YES completion:nil];
+                [navController release];
+            }
 #else
-            debugStr = debugStr; // prevent compiler warning
-            if (nil == self.aboutViewController) {
+            {
                 AboutViewController *about = [[AboutViewController alloc] initWithNibName:@"AboutViewController" bundle:nil];
                 about.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
                 if ([about respondsToSelector:@selector(setModalPresentationStyle:)])
                      about.modalPresentationStyle = UIModalPresentationFormSheet;
-                self.aboutViewController = about;
+                
+                [self presentViewController:about animated:YES completion:nil];
                 [about release];
             }
-            [self presentModalViewController:self.aboutViewController animated:YES];
 #endif
             break;
         case 4:
-            if (nil == self.savedGamesViewController) {
+            {
                 SavedGamesViewController *savedgames = [[SavedGamesViewController alloc] initWithNibName:@"SavedGamesViewController" bundle:nil];
                 savedgames.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
                 if ([savedgames respondsToSelector:@selector(setModalPresentationStyle:)])
                     savedgames.modalPresentationStyle = UIModalPresentationPageSheet;
-                self.savedGamesViewController = savedgames;
+                
+                [self presentViewController:savedgames animated:YES completion:nil];
                 [savedgames release];
             }
-            [self presentModalViewController:self.savedGamesViewController animated:YES];
             break;
         case 5:
-            if (nil == self.missionsViewController) {
+            {
                 xib = IS_IPAD() ? @"MissionTrainingViewController-iPad" : @"MissionTrainingViewController-iPhone";
                 MissionTrainingViewController *missions = [[MissionTrainingViewController alloc] initWithNibName:xib bundle:nil];
                 missions.modalTransitionStyle = IS_IPAD() ? UIModalTransitionStyleCoverVertical : UIModalTransitionStyleCrossDissolve;
                 if ([missions respondsToSelector:@selector(setModalPresentationStyle:)])
                     missions.modalPresentationStyle = UIModalPresentationPageSheet;
-                self.missionsViewController = missions;
+                
+                [self presentViewController:missions animated:YES completion:nil];
                 [missions release];
             }
-            [self presentModalViewController:self.missionsViewController animated:YES];
             break;
         case 6:
             [GameInterfaceBridge registerCallingController:self];
@@ -202,42 +263,29 @@
     }
 }
 
+- (UITabBarItem *)tabBarItemWithTitle: (NSString *)title
+                            imageName: (NSString *)imageName
+                    selectedImageName: (NSString *)selectedImageName
+{
+    return [[[UITabBarItem alloc] initWithTitle:title
+                                          image:[UIImage imageNamed:imageName]
+                                  selectedImage:[UIImage imageNamed:selectedImageName]] autorelease];
+}
+
 #pragma mark -
 -(void) viewDidUnload {
-    self.gameConfigViewController = nil;
-    self.settingsViewController = nil;
-    self.aboutViewController = nil;
-    self.savedGamesViewController = nil;
-    self.restoreViewController = nil;
-    self.missionsViewController = nil;
     MSG_DIDUNLOAD();
     [super viewDidUnload];
 }
 
 -(void) didReceiveMemoryWarning {
-    if (self.settingsViewController.view.superview == nil)
-        self.settingsViewController = nil;
-    if (self.gameConfigViewController.view.superview == nil)
-        self.gameConfigViewController = nil;
-    if (self.aboutViewController.view.superview == nil)
-        self.aboutViewController = nil;
-    if (self.savedGamesViewController.view.superview == nil)
-        self.savedGamesViewController = nil;
-    if (self.restoreViewController.view.superview == nil)
-        self.restoreViewController = nil;
-    if (self.missionsViewController.view.superview == nil)
-        self.missionsViewController = nil;
     MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
 
 -(void) dealloc {
-    releaseAndNil(settingsViewController);
-    releaseAndNil(gameConfigViewController);
-    releaseAndNil(aboutViewController);
-    releaseAndNil(savedGamesViewController);
-    releaseAndNil(restoreViewController);
-    releaseAndNil(missionsViewController);
+    [_simpleGameButton release];
+    [_missionsButton release];
     [super dealloc];
 }
 
--- a/project_files/HedgewarsMobile/Classes/MapConfigViewController-iPhone.xib	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MapConfigViewController-iPhone.xib	Mon Nov 09 18:37:57 2015 +0100
@@ -1,34 +1,30 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
 	<data>
-		<int key="IBDocument.SystemTarget">1056</int>
-		<string key="IBDocument.SystemVersion">10K549</string>
-		<string key="IBDocument.InterfaceBuilderVersion">823</string>
-		<string key="IBDocument.AppKitVersion">1038.36</string>
-		<string key="IBDocument.HIToolboxVersion">461.00</string>
+		<int key="IBDocument.SystemTarget">1792</int>
+		<string key="IBDocument.SystemVersion">14E46</string>
+		<string key="IBDocument.InterfaceBuilderVersion">7706</string>
+		<string key="IBDocument.AppKitVersion">1348.17</string>
+		<string key="IBDocument.HIToolboxVersion">758.70</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">132</string>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="1"/>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">7703</string>
 		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys" id="0">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-			<bool key="EncodedWithXMLCoder">YES</bool>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBProxyObject</string>
+			<string>IBUIButton</string>
+			<string>IBUIImageView</string>
+			<string>IBUILabel</string>
+			<string>IBUISegmentedControl</string>
+			<string>IBUISlider</string>
+			<string>IBUITableView</string>
+			<string>IBUIView</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
 			<object class="IBProxyObject" id="372490531">
 				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
 				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
@@ -40,18 +36,19 @@
 			<object class="IBUIView" id="191373211">
 				<reference key="NSNextResponder"/>
 				<int key="NSvFlags">274</int>
-				<object class="NSMutableArray" key="NSSubviews">
-					<bool key="EncodedWithXMLCoder">YES</bool>
+				<array class="NSMutableArray" key="NSSubviews">
 					<object class="IBUIImageView" id="574494641">
 						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">292</int>
+						<int key="NSvFlags">274</int>
 						<string key="NSFrameSize">{480, 276}</string>
 						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<int key="IBUIContentMode">2</int>
 						<bool key="IBUIUserInteractionEnabled">NO</bool>
 						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
 						<object class="NSCustomResource" key="IBUIImage">
 							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">background~iphone.png</string>
+							<string key="NSResourceName">background.png</string>
 						</object>
 					</object>
 					<object class="IBUISegmentedControl" id="88728219">
@@ -59,46 +56,42 @@
 						<int key="NSvFlags">292</int>
 						<string key="NSFrame">{{9, 14}, {270, 30}}</string>
 						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
 						<bool key="IBUIOpaque">NO</bool>
 						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
 						<int key="IBSegmentControlStyle">2</int>
 						<int key="IBNumberOfSegments">4</int>
 						<int key="IBSelectedSegmentIndex">1</int>
-						<object class="NSArray" key="IBSegmentTitles">
-							<bool key="EncodedWithXMLCoder">YES</bool>
+						<array key="IBSegmentTitles">
 							<string>Random</string>
 							<string>Map</string>
 							<string>Maze</string>
 							<string>Mission</string>
-						</object>
-						<object class="NSMutableArray" key="IBSegmentWidths">
-							<bool key="EncodedWithXMLCoder">YES</bool>
+						</array>
+						<array class="NSMutableArray" key="IBSegmentWidths">
 							<real value="0.0"/>
 							<real value="0.0"/>
 							<real value="0.0"/>
 							<real value="0.0"/>
-						</object>
-						<object class="NSMutableArray" key="IBSegmentEnabledStates">
-							<bool key="EncodedWithXMLCoder">YES</bool>
+						</array>
+						<array class="NSMutableArray" key="IBSegmentEnabledStates">
 							<boolean value="YES"/>
 							<boolean value="YES"/>
 							<boolean value="YES"/>
 							<boolean value="YES"/>
-						</object>
-						<object class="NSMutableArray" key="IBSegmentContentOffsets">
-							<bool key="EncodedWithXMLCoder">YES</bool>
+						</array>
+						<array class="NSMutableArray" key="IBSegmentContentOffsets">
 							<string>{0, 0}</string>
 							<string>{0, 0}</string>
 							<string>{0, 0}</string>
 							<string>{0, 0}</string>
-						</object>
-						<object class="NSMutableArray" key="IBSegmentImages">
-							<bool key="EncodedWithXMLCoder">YES</bool>
+						</array>
+						<array class="NSMutableArray" key="IBSegmentImages">
 							<object class="NSNull" id="4"/>
 							<reference ref="4"/>
 							<reference ref="4"/>
 							<reference ref="4"/>
-						</object>
+						</array>
 						<object class="NSColor" key="IBTintColor">
 							<int key="NSColorSpace">3</int>
 							<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
@@ -109,17 +102,13 @@
 						<int key="NSvFlags">292</int>
 						<string key="NSFrame">{{71, 196}, {145, 44}}</string>
 						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
 						<bool key="IBUIOpaque">NO</bool>
 						<bool key="IBUIClipsSubviews">YES</bool>
 						<int key="IBUIContentMode">7</int>
 						<bool key="IBUIUserInteractionEnabled">NO</bool>
 						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
 						<string key="IBUIText">Loading...</string>
-						<object class="NSFont" key="IBUIFont">
-							<string key="NSName">Helvetica-Bold</string>
-							<double key="NSSize">17</double>
-							<int key="NSfFlags">16</int>
-						</object>
 						<object class="NSColor" key="IBUITextColor">
 							<int key="NSColorSpace">2</int>
 							<bytes key="NSRGB">MC45NDExNzY1MzM3IDAuODE1Njg2MzQ1MSAwAA</bytes>
@@ -128,39 +117,59 @@
 						<int key="IBUIBaselineAdjustment">1</int>
 						<float key="IBUIMinimumFontSize">10</float>
 						<int key="IBUITextAlignment">1</int>
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
+							<string key="name">Helvetica-Bold</string>
+							<string key="family">Helvetica</string>
+							<int key="traits">2</int>
+							<double key="pointSize">17</double>
+						</object>
+						<object class="NSFont" key="IBUIFont">
+							<string key="NSName">Helvetica-Bold</string>
+							<double key="NSSize">17</double>
+							<int key="NSfFlags">16</int>
+						</object>
+						<bool key="useAutomaticPreferredMaxLayoutWidth">YES</bool>
 					</object>
 					<object class="IBUIButton" id="326163764">
 						<reference key="NSNextResponder" ref="191373211"/>
 						<int key="NSvFlags">292</int>
 						<string key="NSFrame">{{16, 58}, {256, 128}}</string>
 						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
 						<bool key="IBUIOpaque">NO</bool>
 						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
 						<int key="IBUIContentHorizontalAlignment">0</int>
 						<int key="IBUIContentVerticalAlignment">0</int>
-						<object class="NSFont" key="IBUIFont">
-							<string key="NSName">Helvetica-Bold</string>
-							<double key="NSSize">15</double>
-							<int key="NSfFlags">16</int>
+						<object class="NSColor" key="IBUINormalTitleColor">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
 						</object>
 						<object class="NSColor" key="IBUIHighlightedTitleColor" id="437070330">
 							<int key="NSColorSpace">3</int>
 							<bytes key="NSWhite">MQA</bytes>
 						</object>
-						<object class="NSColor" key="IBUINormalTitleColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
-						</object>
 						<object class="NSColor" key="IBUINormalTitleShadowColor">
 							<int key="NSColorSpace">3</int>
 							<bytes key="NSWhite">MC41AA</bytes>
 						</object>
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
+							<string key="name">Helvetica-Bold</string>
+							<string key="family">Helvetica</string>
+							<int key="traits">2</int>
+							<double key="pointSize">15</double>
+						</object>
+						<object class="NSFont" key="IBUIFont">
+							<string key="NSName">Helvetica-Bold</string>
+							<double key="NSSize">15</double>
+							<int key="NSfFlags">16</int>
+						</object>
 					</object>
 					<object class="IBUITableView" id="565214171">
 						<reference key="NSNextResponder" ref="191373211"/>
 						<int key="NSvFlags">274</int>
 						<string key="NSFrame">{{284, 0}, {196, 276}}</string>
 						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
 						<object class="NSColor" key="IBUIBackgroundColor">
 							<int key="NSColorSpace">3</int>
 							<bytes key="NSWhite">MCAwAA</bytes>
@@ -183,6 +192,7 @@
 						<int key="NSvFlags">292</int>
 						<string key="NSFrame">{{52, 239}, {184, 23}}</string>
 						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
 						<bool key="IBUIOpaque">NO</bool>
 						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
 						<int key="IBUIContentHorizontalAlignment">0</int>
@@ -190,20 +200,26 @@
 						<float key="IBUIValue">0.05000000074505806</float>
 						<float key="IBUIMaxValue">0.05000000074505806</float>
 					</object>
-				</object>
+				</array>
 				<string key="NSFrameSize">{480, 276}</string>
 				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
 				<reference key="IBUIBackgroundColor" ref="437070330"/>
+				<bool key="IBUIClipsSubviews">YES</bool>
 				<object class="IBUISimulatedToolbarMetrics" key="IBUISimulatedBottomBarMetrics"/>
 				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
+					<int key="IBUIInterfaceOrientation">3</int>
 					<int key="interfaceOrientation">3</int>
 				</object>
+				<object class="IBUISimulatedSizeMetrics" key="IBUISimulatedDestinationMetrics">
+					<string key="IBUISimulatedSizeMetricsClass">IBUISimulatedFreeformSizeMetricsSentinel</string>
+					<string key="IBUIDisplayName">Freeform</string>
+				</object>
 				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
 			</object>
-		</object>
+		</array>
 		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
+			<array key="connectionRecords">
 				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchOutletConnection" key="connection">
 						<string key="label">view</string>
@@ -229,6 +245,39 @@
 					<int key="connectionID">16</int>
 				</object>
 				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">segmentedControl</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="88728219"/>
+					</object>
+					<int key="connectionID">21</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">tableView</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="565214171"/>
+					</object>
+					<int key="connectionID">32</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">slider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="938256702"/>
+					</object>
+					<int key="connectionID">38</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">segmentedControlChanged:</string>
+						<reference key="source" ref="88728219"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">13</int>
+					</object>
+					<int key="connectionID">22</int>
+				</object>
+				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchEventConnection" key="connection">
 						<string key="label">sliderChanged:</string>
 						<reference key="source" ref="938256702"/>
@@ -248,47 +297,6 @@
 				</object>
 				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">segmentedControl</string>
-						<reference key="source" ref="372490531"/>
-						<reference key="destination" ref="88728219"/>
-					</object>
-					<int key="connectionID">21</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">segmentedControlChanged:</string>
-						<reference key="source" ref="88728219"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">13</int>
-					</object>
-					<int key="connectionID">22</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">dataSource</string>
-						<reference key="source" ref="565214171"/>
-						<reference key="destination" ref="372490531"/>
-					</object>
-					<int key="connectionID">26</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">delegate</string>
-						<reference key="source" ref="565214171"/>
-						<reference key="destination" ref="372490531"/>
-					</object>
-					<int key="connectionID">27</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">tableView</string>
-						<reference key="source" ref="372490531"/>
-						<reference key="destination" ref="565214171"/>
-					</object>
-					<int key="connectionID">32</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
 						<string key="label">delegate</string>
 						<reference key="source" ref="326163764"/>
 						<reference key="destination" ref="372490531"/>
@@ -306,34 +314,40 @@
 				</object>
 				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">slider</string>
-						<reference key="source" ref="372490531"/>
-						<reference key="destination" ref="938256702"/>
+						<string key="label">dataSource</string>
+						<reference key="source" ref="565214171"/>
+						<reference key="destination" ref="372490531"/>
 					</object>
-					<int key="connectionID">38</int>
+					<int key="connectionID">26</int>
 				</object>
-			</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="565214171"/>
+						<reference key="destination" ref="372490531"/>
+					</object>
+					<int key="connectionID">27</int>
+				</object>
+			</array>
 			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
+				<array key="orderedObjects">
 					<object class="IBObjectRecord">
 						<int key="objectID">0</int>
-						<reference key="object" ref="0"/>
+						<array key="object" id="0"/>
 						<reference key="children" ref="1000"/>
 						<nil key="parent"/>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">1</int>
 						<reference key="object" ref="191373211"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
+						<array class="NSMutableArray" key="children">
 							<reference ref="326163764"/>
 							<reference ref="565214171"/>
 							<reference ref="574494641"/>
 							<reference ref="88728219"/>
 							<reference ref="634417433"/>
 							<reference ref="938256702"/>
-						</object>
+						</array>
 						<reference key="parent" ref="0"/>
 					</object>
 					<object class="IBObjectRecord">
@@ -360,9 +374,7 @@
 					<object class="IBObjectRecord">
 						<int key="objectID">25</int>
 						<reference key="object" ref="565214171"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
+						<array class="NSMutableArray" key="children"/>
 						<reference key="parent" ref="191373211"/>
 						<string key="objectName">Table View (Themes)</string>
 					</object>
@@ -381,343 +393,141 @@
 						<reference key="object" ref="938256702"/>
 						<reference key="parent" ref="191373211"/>
 					</object>
-				</object>
+				</array>
 			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.CustomClassName</string>
-					<string>-2.CustomClassName</string>
-					<string>1.IBEditorWindowLastContentRect</string>
-					<string>1.IBPluginDependency</string>
-					<string>11.IBPluginDependency</string>
-					<string>11.IBViewBoundsToFrameTransform</string>
-					<string>25.IBPluginDependency</string>
-					<string>25.IBViewBoundsToFrameTransform</string>
-					<string>35.IBPluginDependency</string>
-					<string>35.IBViewBoundsToFrameTransform</string>
-					<string>7.IBPluginDependency</string>
-					<string>7.IBViewBoundsToFrameTransform</string>
-					<string>8.CustomClassName</string>
-					<string>8.IBPluginDependency</string>
-					<string>8.IBViewBoundsToFrameTransform</string>
-					<string>9.CustomClassName</string>
-					<string>9.IBPluginDependency</string>
-					<string>9.IBViewBoundsToFrameTransform</string>
-				</object>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>MapConfigViewController</string>
-					<string>UIResponder</string>
-					<string>{{790, 298}, {480, 320}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">AUKOAABDRAAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABDjgAAw4kAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAAAAAAAAw4kAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABBUAAAwigAAA</bytes>
-					</object>
-					<string>MNEValueTrackingSlider</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABCWAAAw4IAAA</bytes>
-					</object>
-					<string>MapPreviewButtonView</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABBgAAAwzgAAA</bytes>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">MapConfigViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="25.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="35.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="8.CustomClassName">MNEValueTrackingSlider</string>
+				<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="9.CustomClassName">MapPreviewButtonView</string>
+				<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
 			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
 			<nil key="sourceID"/>
 			<int key="maxID">38</int>
 		</object>
 		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
 				<object class="IBPartialClassDescription">
 					<string key="className">MNEValueTrackingSlider</string>
 					<string key="superclassName">UISlider</string>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/MNEValueTrackingSlider.h</string>
+						<string key="minorKey">../Classes/MNEValueTrackingSlider.h</string>
 					</object>
 				</object>
 				<object class="IBPartialClassDescription">
 					<string key="className">MapConfigViewController</string>
 					<string key="superclassName">UIViewController</string>
-					<object class="NSMutableDictionary" key="actions">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>mapButtonPressed:</string>
-							<string>segmentedControlChanged:</string>
-							<string>sliderChanged:</string>
-							<string>sliderEndedChanging:</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>id</string>
-							<string>id</string>
-							<string>id</string>
-							<string>id</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="mapButtonPressed:">id</string>
+						<string key="segmentedControlChanged:">id</string>
+						<string key="sliderChanged:">id</string>
+						<string key="sliderEndedChanging:">id</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="actionInfosByName">
+						<object class="IBActionInfo" key="mapButtonPressed:">
+							<string key="name">mapButtonPressed:</string>
+							<string key="candidateClassName">id</string>
 						</object>
-					</object>
-					<object class="NSMutableDictionary" key="actionInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>mapButtonPressed:</string>
-							<string>segmentedControlChanged:</string>
-							<string>sliderChanged:</string>
-							<string>sliderEndedChanging:</string>
+						<object class="IBActionInfo" key="segmentedControlChanged:">
+							<string key="name">segmentedControlChanged:</string>
+							<string key="candidateClassName">id</string>
 						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBActionInfo">
-								<string key="name">mapButtonPressed:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">segmentedControlChanged:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">sliderChanged:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">sliderEndedChanging:</string>
-								<string key="candidateClassName">id</string>
-							</object>
+						<object class="IBActionInfo" key="sliderChanged:">
+							<string key="name">sliderChanged:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="sliderEndedChanging:">
+							<string key="name">sliderEndedChanging:</string>
+							<string key="candidateClassName">id</string>
 						</object>
-					</object>
-					<object class="NSMutableDictionary" key="outlets">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>maxLabel</string>
-							<string>previewButton</string>
-							<string>segmentedControl</string>
-							<string>slider</string>
-							<string>tableView</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>UILabel</string>
-							<string>MapPreviewButtonView</string>
-							<string>UISegmentedControl</string>
-							<string>MNEValueTrackingSlider</string>
-							<string>UITableView</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="maxLabel">UILabel</string>
+						<string key="previewButton">MapPreviewButtonView</string>
+						<string key="segmentedControl">UISegmentedControl</string>
+						<string key="slider">MNEValueTrackingSlider</string>
+						<string key="tableView">UITableView</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="maxLabel">
+							<string key="name">maxLabel</string>
+							<string key="candidateClassName">UILabel</string>
 						</object>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>maxLabel</string>
-							<string>previewButton</string>
-							<string>segmentedControl</string>
-							<string>slider</string>
-							<string>tableView</string>
+						<object class="IBToOneOutletInfo" key="previewButton">
+							<string key="name">previewButton</string>
+							<string key="candidateClassName">MapPreviewButtonView</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="segmentedControl">
+							<string key="name">segmentedControl</string>
+							<string key="candidateClassName">UISegmentedControl</string>
 						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBToOneOutletInfo">
-								<string key="name">maxLabel</string>
-								<string key="candidateClassName">UILabel</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">previewButton</string>
-								<string key="candidateClassName">MapPreviewButtonView</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">segmentedControl</string>
-								<string key="candidateClassName">UISegmentedControl</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">slider</string>
-								<string key="candidateClassName">MNEValueTrackingSlider</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">tableView</string>
-								<string key="candidateClassName">UITableView</string>
-							</object>
+						<object class="IBToOneOutletInfo" key="slider">
+							<string key="name">slider</string>
+							<string key="candidateClassName">MNEValueTrackingSlider</string>
 						</object>
-					</object>
+						<object class="IBToOneOutletInfo" key="tableView">
+							<string key="name">tableView</string>
+							<string key="candidateClassName">UITableView</string>
+						</object>
+					</dictionary>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/MapConfigViewController.h</string>
+						<string key="minorKey">../Classes/MapConfigViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">MapConfigViewController</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="mapButtonPressed:">id</string>
+						<string key="segmentedControlChanged:">id</string>
+						<string key="sliderChanged:">id</string>
+						<string key="sliderEndedChanging:">id</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="actionInfosByName">
+						<object class="IBActionInfo" key="mapButtonPressed:">
+							<string key="name">mapButtonPressed:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="segmentedControlChanged:">
+							<string key="name">segmentedControlChanged:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="sliderChanged:">
+							<string key="name">sliderChanged:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="sliderEndedChanging:">
+							<string key="name">sliderEndedChanging:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">../Classes/MapConfigViewController.m</string>
 					</object>
 				</object>
 				<object class="IBPartialClassDescription">
 					<string key="className">MapPreviewButtonView</string>
 					<string key="superclassName">UIButton</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<string key="NS.key.0">delegate</string>
-						<string key="NS.object.0">id</string>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<string key="NS.key.0">delegate</string>
-						<object class="IBToOneOutletInfo" key="NS.object.0">
-							<string key="name">delegate</string>
-							<string key="candidateClassName">id</string>
-						</object>
-					</object>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/MapPreviewButtonView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIButton</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="67684033">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/ExtraCategories.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UILabel</string>
-					<reference key="sourceIdentifier" ref="67684033"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UITableView</string>
-					<reference key="sourceIdentifier" ref="67684033"/>
-				</object>
-			</object>
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
+						<string key="minorKey">../Classes/MapPreviewButtonView.h</string>
 					</object>
 				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="567455553">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
-					</object>
-				</object>
+			</array>
+			<array class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
 				<object class="IBPartialClassDescription">
 					<string key="className">UIButton</string>
 					<string key="superclassName">UIControl</string>
@@ -735,6 +545,14 @@
 					</object>
 				</object>
 				<object class="IBPartialClassDescription">
+					<string key="className">UIGestureRecognizer</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">UIKit.framework/Headers/UIGestureRecognizer.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
 					<string key="className">UIImageView</string>
 					<string key="superclassName">UIView</string>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
@@ -753,7 +571,10 @@
 				<object class="IBPartialClassDescription">
 					<string key="className">UIResponder</string>
 					<string key="superclassName">NSObject</string>
-					<reference key="sourceIdentifier" ref="567455553"/>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
+					</object>
 				</object>
 				<object class="IBPartialClassDescription">
 					<string key="className">UIScrollView</string>
@@ -805,20 +626,6 @@
 				</object>
 				<object class="IBPartialClassDescription">
 					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPrintFormatter.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
 					<string key="superclassName">UIResponder</string>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBFrameworkSource</string>
@@ -827,59 +634,26 @@
 				</object>
 				<object class="IBPartialClassDescription">
 					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
 					<string key="superclassName">UIResponder</string>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBFrameworkSource</string>
 						<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
 					</object>
 				</object>
-			</object>
+			</array>
 		</object>
 		<int key="IBDocument.localizationMode">0</int>
 		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
-			<integer value="1056" key="NS.object.0"/>
-		</object>
+		<bool key="IBDocument.previouslyAttemptedUpgradeToXcode5">NO</bool>
 		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-			<integer value="3000" key="NS.object.0"/>
+			<integer value="4600" key="NS.object.0"/>
 		</object>
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<string key="IBDocument.LastKnownRelativeProjectPath">../Hedgewars.xcodeproj</string>
 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
 		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
-			<string key="NS.key.0">background~iphone.png</string>
+			<string key="NS.key.0">background.png</string>
 			<string key="NS.object.0">{480, 320}</string>
 		</object>
-		<string key="IBCocoaTouchPluginVersion">132</string>
 	</data>
 </archive>
--- a/project_files/HedgewarsMobile/Classes/MapConfigViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MapConfigViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -62,7 +62,7 @@
     [seed release];
 
     // perform as if user clicked on an entry
-    NSIndexPath *theIndex = [NSIndexPath indexPathForRow:(random()%[source count]) inSection:0];
+    NSIndexPath *theIndex = [NSIndexPath indexPathForRow:arc4random_uniform((int)[source count]) inSection:0];
     [self tableView:self.tableView didSelectRowAtIndexPath:theIndex];
     if (IS_NOT_POWERFUL([HWUtils modelType]) == NO)
         [self.tableView scrollToRowAtIndexPath:theIndex atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
@@ -179,8 +179,8 @@
 #pragma mark -
 #pragma mark Table view delegate
 -(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    int newRow = [indexPath row];
-    int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
+    NSInteger newRow = [indexPath row];
+    NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
 
     if (newRow != oldRow) {
         NSArray *source = [self.dataSourceArray objectAtIndex:scIndex];
@@ -352,6 +352,15 @@
     oldPage = newPage;
 }
 
+- (void)localizeSegmentedControl
+{
+    for (NSUInteger i = 0; i < self.segmentedControl.numberOfSegments; i++)
+    {
+        NSString *oldTitle = [self.segmentedControl titleForSegmentAtIndex:i];
+        [self.segmentedControl setTitle:NSLocalizedString(oldTitle, nil) forSegmentAtIndex:i];
+    }
+}
+
 #pragma mark -
 #pragma mark view management
 -(NSArray *) dataSourceArray {
@@ -403,8 +412,9 @@
 
 -(void) viewDidLoad {
     [super viewDidLoad];
-    srandom(time(NULL));
-
+    
+    [self localizeSegmentedControl];
+    
     // initialize some "default" values
     self.slider.value = 0.05f;
     self.slider.enabled = NO;
--- a/project_files/HedgewarsMobile/Classes/MapPreviewButtonView.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MapPreviewButtonView.m	Mon Nov 09 18:37:57 2015 +0100
@@ -24,6 +24,10 @@
 
 #define INDICATOR_TAG 7654
 
+@interface MapPreviewButtonView ()
+@property (nonatomic) NSInteger port;
+@end
+
 @implementation MapPreviewButtonView
 @synthesize delegate;
 
@@ -54,7 +58,7 @@
 #pragma mark -
 #pragma mark preview
 -(int) sendToEngine:(NSString *)string {
-    unsigned char length = [string length];
+    unsigned char length = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
 
     SDLNet_TCP_Send(csd, &length, 1);
     return SDLNet_TCP_Send(csd, [string UTF8String], length);
@@ -64,7 +68,7 @@
     IPaddress ip;
     BOOL serverQuit = NO;
     uint8_t packedMap[128*32];
-    int port = [HWUtils randomPort];
+    self.port = [HWUtils randomPort];
 
     if (SDLNet_Init() < 0) {
         DLog(@"SDLNet_Init: %s", SDLNet_GetError());
@@ -72,23 +76,45 @@
     }
 
     // Resolving the host using NULL make network interface to listen
-    if (SDLNet_ResolveHost(&ip, NULL, port) < 0) {
+    if (SDLNet_ResolveHost(&ip, NULL, self.port) < 0) {
         DLog(@"SDLNet_ResolveHost: %s\n", SDLNet_GetError());
         serverQuit = YES;
     }
 
     // Open a connection with the IP provided (listen on the host's port)
     if (!(sd = SDLNet_TCP_Open(&ip))) {
-        DLog(@"SDLNet_TCP_Open: %s %\n", SDLNet_GetError(), port);
+        DLog(@"SDLNet_TCP_Open: %s %ld\n", SDLNet_GetError(), (long)self.port);
         serverQuit = YES;
     }
 
-    // launch the preview here so that we're sure the tcp channel is open
-    pthread_t thread_id;
-    pthread_create(&thread_id, NULL, (void *(*)(void *))GenLandPreview, (void *)port);
-    pthread_detach(thread_id);
-
-    DLog(@"Waiting for a client on port %d", port);
+    // launch the preview in background here so that we're sure the tcp channel is open
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
+        NSString *ipcString = [[NSString alloc] initWithFormat:@"%ld", (long)self.port];
+        NSString *documentsDirectory = DOCUMENTS_FOLDER();
+        
+        NSMutableArray *gameParameters = [[NSMutableArray alloc] initWithObjects:
+                                          @"--internal",
+                                          @"--port", ipcString,
+                                          @"--user-prefix", documentsDirectory,
+                                          @"--landpreview",
+                                          nil];
+        [ipcString release];
+        
+        int argc = [gameParameters count];
+        const char **argv = (const char **)malloc(sizeof(const char*)*argc);
+        for (int i = 0; i < argc; i++)
+            argv[i] = strdup([[gameParameters objectAtIndex:i] UTF8String]);
+        [gameParameters release];
+        
+        RunEngine(argc, argv);
+        
+        // cleanup
+        for (int i = 0; i < argc; i++)
+            free((void *)argv[i]);
+        free(argv);
+    });
+    
+    DLog(@"Waiting for a client on port %ld", (long)self.port);
     while (!serverQuit) {
         /* This check the sd if there is a pending connection.
          * If there is one, accept that, and open a new socket for communicating */
@@ -111,7 +137,7 @@
             serverQuit = YES;
         }
     }
-    [HWUtils freePort:port];
+    [HWUtils freePort:self.port];
     SDLNet_TCP_Close(sd);
     SDLNet_Quit();
 
@@ -129,13 +155,14 @@
 }
 
 -(void) drawingThread {
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+    @autoreleasepool {
+    
     uint8_t unpackedMap[128*32*8];
     [self engineProtocol:unpackedMap];
 
     // http://developer.apple.com/mac/library/qa/qa2001/qa1037.html
     CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceGray();
-    CGContextRef bitmapImage = CGBitmapContextCreate(unpackedMap, 256, 128, 8, 256, colorspace, kCGImageAlphaNone);
+    CGContextRef bitmapImage = CGBitmapContextCreate(unpackedMap, 256, 128, 8, 256, colorspace, (CGBitmapInfo)kCGImageAlphaNone);
     CGColorSpaceRelease(colorspace);
 
     CGImageRef previewCGImage = CGBitmapContextCreateImage(bitmapImage);
@@ -149,7 +176,7 @@
                         waitUntilDone:NO];
     [previewImage release];
     [self performSelectorOnMainThread:@selector(setLabelText:)
-                           withObject:[NSString stringWithFormat:@"%d", maxHogs]
+                           withObject:[NSString stringWithFormat:@"%ld", (long)maxHogs]
                         waitUntilDone:NO];
     [self performSelectorOnMainThread:@selector(turnOnWidgets)
                            withObject:nil
@@ -157,8 +184,8 @@
     [self performSelectorOnMainThread:@selector(removeIndicator)
                            withObject:nil
                         waitUntilDone:NO];
-
-    [pool release];
+    
+    }
 }
 
 -(void) updatePreviewWithSeed:(NSString *)seed {
--- a/project_files/HedgewarsMobile/Classes/MissionTrainingViewController-iPhone.xib	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MissionTrainingViewController-iPhone.xib	Mon Nov 09 18:37:57 2015 +0100
@@ -1,34 +1,27 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
 	<data>
-		<int key="IBDocument.SystemTarget">1056</int>
-		<string key="IBDocument.SystemVersion">10K549</string>
-		<string key="IBDocument.InterfaceBuilderVersion">823</string>
-		<string key="IBDocument.AppKitVersion">1038.36</string>
-		<string key="IBDocument.HIToolboxVersion">461.00</string>
+		<int key="IBDocument.SystemTarget">1792</int>
+		<string key="IBDocument.SystemVersion">14E46</string>
+		<string key="IBDocument.InterfaceBuilderVersion">7706</string>
+		<string key="IBDocument.AppKitVersion">1348.17</string>
+		<string key="IBDocument.HIToolboxVersion">758.70</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">132</string>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="1"/>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">7703</string>
 		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys" id="0">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-			<bool key="EncodedWithXMLCoder">YES</bool>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBProxyObject</string>
+			<string>IBUIButton</string>
+			<string>IBUIImageView</string>
+			<string>IBUITableView</string>
+			<string>IBUIView</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
 			<object class="IBProxyObject" id="372490531">
 				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
 				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
@@ -40,18 +33,19 @@
 			<object class="IBUIView" id="191373211">
 				<reference key="NSNextResponder"/>
 				<int key="NSvFlags">274</int>
-				<object class="NSMutableArray" key="NSSubviews">
-					<bool key="EncodedWithXMLCoder">YES</bool>
+				<array class="NSMutableArray" key="NSSubviews">
 					<object class="IBUIImageView" id="474863980">
 						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">292</int>
+						<int key="NSvFlags">274</int>
 						<string key="NSFrameSize">{480, 320}</string>
 						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<int key="IBUIContentMode">2</int>
 						<bool key="IBUIUserInteractionEnabled">NO</bool>
 						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
 						<object class="NSCustomResource" key="IBUIImage">
 							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">smallerBackground~iphone.png</string>
+							<string key="NSResourceName">smallerBackground.png</string>
 						</object>
 					</object>
 					<object class="IBUITableView" id="609221433">
@@ -59,6 +53,7 @@
 						<int key="NSvFlags">274</int>
 						<string key="NSFrame">{{180, 0}, {300, 320}}</string>
 						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
 						<object class="NSColor" key="IBUIBackgroundColor" id="76134506">
 							<int key="NSColorSpace">3</int>
 							<bytes key="NSWhite">MQA</bytes>
@@ -80,6 +75,7 @@
 						<int key="NSvFlags">292</int>
 						<string key="NSFrame">{{11, 19}, {157, 130}}</string>
 						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
 						<bool key="IBUIClipsSubviews">YES</bool>
 						<bool key="IBUIUserInteractionEnabled">NO</bool>
 						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
@@ -89,20 +85,16 @@
 						<int key="NSvFlags">292</int>
 						<string key="NSFrame">{{57, 245}, {64, 64}}</string>
 						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
 						<bool key="IBUIOpaque">NO</bool>
 						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
 						<int key="IBUIContentHorizontalAlignment">0</int>
 						<int key="IBUIContentVerticalAlignment">0</int>
-						<object class="NSFont" key="IBUIFont" id="1000305902">
-							<string key="NSName">Helvetica-Bold</string>
-							<double key="NSSize">15</double>
-							<int key="NSfFlags">16</int>
-						</object>
-						<reference key="IBUIHighlightedTitleColor" ref="76134506"/>
 						<object class="NSColor" key="IBUINormalTitleColor">
 							<int key="NSColorSpace">1</int>
 							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
 						</object>
+						<reference key="IBUIHighlightedTitleColor" ref="76134506"/>
 						<object class="NSColor" key="IBUINormalTitleShadowColor" id="181044244">
 							<int key="NSColorSpace">3</int>
 							<bytes key="NSWhite">MC41AA</bytes>
@@ -111,32 +103,46 @@
 							<string key="NSClassName">NSImage</string>
 							<string key="NSResourceName">backButton.png</string>
 						</object>
+						<object class="IBUIFontDescription" key="IBUIFontDescription" id="128202473">
+							<string key="name">Helvetica-Bold</string>
+							<string key="family">Helvetica</string>
+							<int key="traits">2</int>
+							<double key="pointSize">15</double>
+						</object>
+						<object class="NSFont" key="IBUIFont" id="1000305902">
+							<string key="NSName">Helvetica-Bold</string>
+							<double key="NSSize">15</double>
+							<int key="NSfFlags">16</int>
+						</object>
 					</object>
 					<object class="IBUIButton" id="1068873625">
 						<reference key="NSNextResponder" ref="191373211"/>
 						<int key="NSvFlags">292</int>
 						<string key="NSFrame">{{18, 164}, {142, 64}}</string>
 						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
 						<bool key="IBUIOpaque">NO</bool>
 						<int key="IBUITag">1</int>
 						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
 						<int key="IBUIContentHorizontalAlignment">0</int>
 						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="1000305902"/>
-						<reference key="IBUIHighlightedTitleColor" ref="76134506"/>
 						<object class="NSColor" key="IBUINormalTitleColor">
 							<int key="NSColorSpace">1</int>
 							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
 						</object>
+						<reference key="IBUIHighlightedTitleColor" ref="76134506"/>
 						<reference key="IBUINormalTitleShadowColor" ref="181044244"/>
 						<object class="NSCustomResource" key="IBUINormalImage">
 							<string key="NSClassName">NSImage</string>
 							<string key="NSResourceName">startGameButton.png</string>
 						</object>
+						<reference key="IBUIFontDescription" ref="128202473"/>
+						<reference key="IBUIFont" ref="1000305902"/>
 					</object>
-				</object>
+				</array>
 				<string key="NSFrameSize">{480, 320}</string>
 				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
 				<object class="NSColor" key="IBUIBackgroundColor">
 					<int key="NSColorSpace">3</int>
 					<bytes key="NSWhite">MQA</bytes>
@@ -145,14 +151,18 @@
 					</object>
 				</object>
 				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
+					<int key="IBUIInterfaceOrientation">3</int>
 					<int key="interfaceOrientation">3</int>
 				</object>
+				<object class="IBUISimulatedSizeMetrics" key="IBUISimulatedDestinationMetrics">
+					<string key="IBUISimulatedSizeMetricsClass">IBUISimulatedFreeformSizeMetricsSentinel</string>
+					<string key="IBUIDisplayName">Freeform</string>
+				</object>
 				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
 			</object>
-		</object>
+		</array>
 		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
+			<array key="connectionRecords">
 				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchOutletConnection" key="connection">
 						<string key="label">view</string>
@@ -163,6 +173,22 @@
 				</object>
 				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">previewImage</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="776434219"/>
+					</object>
+					<int key="connectionID">13</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">tableView</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="609221433"/>
+					</object>
+					<int key="connectionID">14</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
 						<string key="label">dataSource</string>
 						<reference key="source" ref="609221433"/>
 						<reference key="destination" ref="372490531"/>
@@ -178,22 +204,6 @@
 					<int key="connectionID">12</int>
 				</object>
 				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">previewImage</string>
-						<reference key="source" ref="372490531"/>
-						<reference key="destination" ref="776434219"/>
-					</object>
-					<int key="connectionID">13</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">tableView</string>
-						<reference key="source" ref="372490531"/>
-						<reference key="destination" ref="609221433"/>
-					</object>
-					<int key="connectionID">14</int>
-				</object>
-				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchEventConnection" key="connection">
 						<string key="label">buttonPressed:</string>
 						<reference key="source" ref="1038942684"/>
@@ -211,27 +221,25 @@
 					</object>
 					<int key="connectionID">20</int>
 				</object>
-			</object>
+			</array>
 			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
+				<array key="orderedObjects">
 					<object class="IBObjectRecord">
 						<int key="objectID">0</int>
-						<reference key="object" ref="0"/>
+						<array key="object" id="0"/>
 						<reference key="children" ref="1000"/>
 						<nil key="parent"/>
 					</object>
 					<object class="IBObjectRecord">
 						<int key="objectID">1</int>
 						<reference key="object" ref="191373211"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
+						<array class="NSMutableArray" key="children">
 							<reference ref="609221433"/>
 							<reference ref="776434219"/>
 							<reference ref="1038942684"/>
 							<reference ref="1068873625"/>
 							<reference ref="474863980"/>
-						</object>
+						</array>
 						<reference key="parent" ref="0"/>
 					</object>
 					<object class="IBObjectRecord">
@@ -248,9 +256,7 @@
 					<object class="IBObjectRecord">
 						<int key="objectID">9</int>
 						<reference key="object" ref="609221433"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
+						<array class="NSMutableArray" key="children"/>
 						<reference key="parent" ref="191373211"/>
 					</object>
 					<object class="IBObjectRecord">
@@ -273,72 +279,28 @@
 						<reference key="object" ref="474863980"/>
 						<reference key="parent" ref="191373211"/>
 					</object>
-				</object>
+				</array>
 			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.CustomClassName</string>
-					<string>-2.CustomClassName</string>
-					<string>1.IBEditorWindowLastContentRect</string>
-					<string>1.IBPluginDependency</string>
-					<string>10.IBPluginDependency</string>
-					<string>10.IBViewBoundsToFrameTransform</string>
-					<string>17.IBPluginDependency</string>
-					<string>17.IBViewBoundsToFrameTransform</string>
-					<string>18.IBPluginDependency</string>
-					<string>18.IBViewBoundsToFrameTransform</string>
-					<string>23.IBPluginDependency</string>
-					<string>9.IBPluginDependency</string>
-					<string>9.IBViewBoundsToFrameTransform</string>
-				</object>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>MissionTrainingViewController</string>
-					<string>UIResponder</string>
-					<string>{{492, 751}, {480, 320}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABAoAAAwwYAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABChAAAw5eAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABB2AAAw2cAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABDUAAAw5UAAA</bytes>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">MissionTrainingViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="17.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="18.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="23.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
 			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
 			<nil key="sourceID"/>
 			<int key="maxID">23</int>
 		</object>
 		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
 				<object class="IBPartialClassDescription">
 					<string key="className">MissionTrainingViewController</string>
 					<string key="superclassName">UIViewController</string>
@@ -353,173 +315,50 @@
 							<string key="candidateClassName">id</string>
 						</object>
 					</object>
-					<object class="NSMutableDictionary" key="outlets">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>descriptionLabel</string>
-							<string>previewImage</string>
-							<string>tableView</string>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="descriptionLabel">UILabel</string>
+						<string key="previewImage">UIImageView</string>
+						<string key="tableView">UITableView</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="descriptionLabel">
+							<string key="name">descriptionLabel</string>
+							<string key="candidateClassName">UILabel</string>
 						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>UILabel</string>
-							<string>UIImageView</string>
-							<string>UITableView</string>
+						<object class="IBToOneOutletInfo" key="previewImage">
+							<string key="name">previewImage</string>
+							<string key="candidateClassName">UIImageView</string>
 						</object>
+						<object class="IBToOneOutletInfo" key="tableView">
+							<string key="name">tableView</string>
+							<string key="candidateClassName">UITableView</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">../Classes/MissionTrainingViewController.h</string>
 					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>descriptionLabel</string>
-							<string>previewImage</string>
-							<string>tableView</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBToOneOutletInfo">
-								<string key="name">descriptionLabel</string>
-								<string key="candidateClassName">UILabel</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">previewImage</string>
-								<string key="candidateClassName">UIImageView</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">tableView</string>
-								<string key="candidateClassName">UITableView</string>
-							</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">MissionTrainingViewController</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">buttonPressed:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<string key="NS.key.0">buttonPressed:</string>
+						<object class="IBActionInfo" key="NS.object.0">
+							<string key="name">buttonPressed:</string>
+							<string key="candidateClassName">id</string>
 						</object>
 					</object>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/MissionTrainingViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIButton</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="249392476">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/ExtraCategories.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UILabel</string>
-					<reference key="sourceIdentifier" ref="249392476"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UITableView</string>
-					<reference key="sourceIdentifier" ref="249392476"/>
-				</object>
-			</object>
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
+						<string key="minorKey">../Classes/MissionTrainingViewController.m</string>
 					</object>
 				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="6906421">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
-					</object>
-				</object>
+			</array>
+			<array class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
 				<object class="IBPartialClassDescription">
 					<string key="className">UIButton</string>
 					<string key="superclassName">UIControl</string>
@@ -537,6 +376,14 @@
 					</object>
 				</object>
 				<object class="IBPartialClassDescription">
+					<string key="className">UIGestureRecognizer</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">UIKit.framework/Headers/UIGestureRecognizer.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
 					<string key="className">UIImageView</string>
 					<string key="superclassName">UIView</string>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
@@ -555,7 +402,10 @@
 				<object class="IBPartialClassDescription">
 					<string key="className">UIResponder</string>
 					<string key="superclassName">NSObject</string>
-					<reference key="sourceIdentifier" ref="6906421"/>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
+					</object>
 				</object>
 				<object class="IBPartialClassDescription">
 					<string key="className">UIScrollView</string>
@@ -591,20 +441,6 @@
 				</object>
 				<object class="IBPartialClassDescription">
 					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPrintFormatter.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
 					<string key="superclassName">UIResponder</string>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBFrameworkSource</string>
@@ -613,70 +449,27 @@
 				</object>
 				<object class="IBPartialClassDescription">
 					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
 					<string key="superclassName">UIResponder</string>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBFrameworkSource</string>
 						<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
 					</object>
 				</object>
-			</object>
+			</array>
 		</object>
 		<int key="IBDocument.localizationMode">0</int>
 		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
-			<integer value="1056" key="NS.object.0"/>
-		</object>
+		<bool key="IBDocument.previouslyAttemptedUpgradeToXcode5">NO</bool>
 		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-			<integer value="3000" key="NS.object.0"/>
+			<integer value="4600" key="NS.object.0"/>
 		</object>
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<string key="IBDocument.LastKnownRelativeProjectPath">../Hedgewars.xcodeproj</string>
 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>backButton.png</string>
-				<string>smallerBackground~iphone.png</string>
-				<string>startGameButton.png</string>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>{64, 64}</string>
-				<string>{480, 320}</string>
-				<string>{142, 64}</string>
-			</object>
-		</object>
-		<string key="IBCocoaTouchPluginVersion">132</string>
+		<dictionary class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+			<string key="backButton.png">{64, 64}</string>
+			<string key="smallerBackground.png">{480, 320}</string>
+			<string key="startGameButton.png">{142, 64}</string>
+		</dictionary>
 	</data>
 </archive>
--- a/project_files/HedgewarsMobile/Classes/MissionTrainingViewController.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MissionTrainingViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -20,18 +20,12 @@
 #import <UIKit/UIKit.h>
 
 
-@interface MissionTrainingViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
-    NSArray *listOfMissions;
-    NSArray *listOfDescriptions;
-    NSString *missionName;
-    UIImageView *previewImage;
-    UITableView *tableView;
-    UILabel *descriptionLabel;
-}
+@interface MissionTrainingViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
 
-@property (nonatomic, retain) NSArray *listOfMissions;
-@property (nonatomic, retain) NSArray *listOfDescriptions;
+@property (nonatomic, retain) NSArray *listOfMissionIDs;
+@property (nonatomic, retain) NSDictionary *dictOfMissions;
 @property (nonatomic, retain) NSString *missionName;
+
 @property (nonatomic, retain) IBOutlet UIImageView *previewImage;
 @property (nonatomic, retain) IBOutlet UITableView *tableView;
 @property (nonatomic, retain) IBOutlet UILabel *descriptionLabel;
--- a/project_files/HedgewarsMobile/Classes/MissionTrainingViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/MissionTrainingViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -23,7 +23,6 @@
 
 
 @implementation MissionTrainingViewController
-@synthesize listOfMissions, listOfDescriptions, previewImage, tableView, descriptionLabel, missionName;
 
 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
     return rotationManager(interfaceOrientation);
@@ -31,7 +30,10 @@
 
 #pragma mark -
 #pragma mark View management
--(void) viewDidLoad {
+-(void) viewDidLoad
+{
+    [super viewDidLoad];
+    
     self.previewImage.layer.borderColor = [[UIColor darkYellowColor] CGColor];
     self.previewImage.layer.borderWidth = 3.8f;
     self.previewImage.layer.cornerRadius = 14;
@@ -50,12 +52,11 @@
     self.tableView.separatorColor = [UIColor whiteColor];
 
     self.descriptionLabel.textColor = [UIColor lightYellowColor];
-    [super viewDidLoad];
 }
 
 -(void) viewWillAppear:(BOOL)animated {
-    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:random()%[self.listOfMissions count] inSection:0];
-    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
+    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:arc4random_uniform((int)[self.listOfMissionIDs count]) inSection:0];
+    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle];
     [self tableView:self.tableView didSelectRowAtIndexPath:indexPath];
     [super viewWillAppear:animated];
 }
@@ -65,43 +66,136 @@
 
     if (button.tag == 0) {
         [[AudioManagerController mainManager] playBackSound];
-        [[self parentViewController] dismissModalViewControllerAnimated:YES];
+        [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
     } else {
         [GameInterfaceBridge registerCallingController:self];
         [GameInterfaceBridge startMissionGame:self.missionName];
     }
 }
 
-#pragma mark -
-#pragma mark override setters/getters for better memory handling
--(NSArray *)listOfMissions {
-    if (listOfMissions == nil)
-        self.listOfMissions = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:TRAININGS_DIRECTORY() error:NULL];
-    return listOfMissions;
+#pragma mark - Missions dictionaries methods
+
+- (NSDictionary *)newLocalizedMissionsDictionary
+{
+    NSString *languageID = [HWUtils languageID];
+    
+    NSString *missionsDescLocation = [[NSString alloc] initWithFormat:@"%@/missions_en.txt",LOCALE_DIRECTORY()];
+    NSString *localizedMissionsDescLocation = [[NSString alloc] initWithFormat:@"%@/missions_%@.txt", LOCALE_DIRECTORY(), languageID];
+    
+    if (![languageID isEqualToString:@"en"] && [[NSFileManager defaultManager] fileExistsAtPath:localizedMissionsDescLocation])
+    {
+        NSDictionary *missionsDict = [self newMissionsDictionaryFromMissionsFile:missionsDescLocation];
+        NSDictionary *localizedMissionsDict = [self newMissionsDictionaryFromMissionsFile:localizedMissionsDescLocation];
+        
+        [missionsDescLocation release];
+        [localizedMissionsDescLocation release];
+        
+        NSMutableDictionary *tempMissionsDict = [[NSMutableDictionary alloc] init];
+        
+        for (NSString *key in [missionsDict allKeys])
+        {
+            if ([localizedMissionsDict objectForKey:key])
+            {
+                [tempMissionsDict setObject:[localizedMissionsDict objectForKey:key] forKey:key];
+            }
+            else
+            {
+                [tempMissionsDict setObject:[missionsDict objectForKey:key] forKey:key];
+            }
+        }
+        
+        [missionsDict release];
+        [localizedMissionsDict release];
+        
+        return tempMissionsDict;
+    }
+    else
+    {
+        NSDictionary *missionsDict = [self newMissionsDictionaryFromMissionsFile:missionsDescLocation];
+        
+        [missionsDescLocation release];
+        [localizedMissionsDescLocation release];
+        
+        return missionsDict;
+    }
 }
 
--(NSArray *)listOfDescriptions {
-    if (listOfDescriptions == nil) {
-        NSString *descLocation = [[NSString alloc] initWithFormat:@"%@/missions_en.txt",LOCALE_DIRECTORY()];
-        NSString *descComplete = [[NSString alloc] initWithContentsOfFile:descLocation encoding:NSUTF8StringEncoding error:NULL];
-        [descLocation release];
-        NSArray *descArray = [descComplete componentsSeparatedByString:@"\n"];
-        NSMutableArray *filteredArray = [[NSMutableArray alloc] initWithCapacity:[descArray count]/3];
-        [descComplete release];
-        // sanity check to avoid having missions and descriptions conflicts
-        for (NSUInteger i = 0; i < [self.listOfMissions count]; i++) {
-            NSString *desc = [[self.listOfMissions objectAtIndex:i] stringByDeletingPathExtension];
-            for (NSString *str in descArray)
-                if ([str hasPrefix:desc] && [str hasSuffix:@"\""]) {
-                    NSArray *descriptionText = [str componentsSeparatedByString:@"\""];
-                    [filteredArray insertObject:[descriptionText objectAtIndex:1] atIndex:i];
-                    break;
-                }
+- (NSDictionary *)newMissionsDictionaryFromMissionsFile:(NSString *)filePath
+{
+    NSMutableDictionary *missionsDict = [[NSMutableDictionary alloc] init];
+    
+    NSString *missionsFileContents = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
+    NSArray *missionsLines = [missionsFileContents componentsSeparatedByString:@"\n"];
+    [missionsFileContents release];
+    
+    for (NSString *line in missionsLines)
+    {
+        if ([line length] > 0)
+        {
+            NSUInteger firstDotLocation = [line rangeOfString:@"."].location;
+            
+            NSString *missionID = [line substringToIndex:firstDotLocation];
+            
+            NSString *missionFullPath = [NSString stringWithFormat:@"%@%@.lua", TRAININGS_DIRECTORY(), missionID];
+            if (![[NSFileManager defaultManager] fileExistsAtPath:missionFullPath])
+            {
+                continue;
+            }
+            
+            NSString *nameOrDesc = [line substringFromIndex:firstDotLocation+1];
+            
+            NSString *missionParsedName = ([nameOrDesc hasPrefix:@"name="]) ? [nameOrDesc stringByReplacingOccurrencesOfString:@"name=" withString:@""] : nil;
+            NSString *missionParsedDesc = ([nameOrDesc hasPrefix:@"desc="]) ? [nameOrDesc stringByReplacingOccurrencesOfString:@"desc=" withString:@""] : nil;
+            
+            if (![missionsDict objectForKey:missionID])
+            {
+                NSMutableDictionary *missionDict = [[NSMutableDictionary alloc] init];
+                [missionsDict setObject:missionDict forKey:missionID];
+                [missionDict release];
+            }
+            
+            NSMutableDictionary *missionDict = [missionsDict objectForKey:missionID];
+            
+            if (missionParsedName)
+            {
+                [missionDict setObject:missionParsedName forKey:@"name"];
+            }
+            
+            if (missionParsedDesc)
+            {
+                missionParsedDesc = [missionParsedDesc stringByReplacingOccurrencesOfString:@"\"" withString:@""];
+                [missionDict setObject:missionParsedDesc forKey:@"desc"];
+            }
+            
+            [missionsDict setObject:missionDict forKey:missionID];
         }
-        self.listOfDescriptions = filteredArray;
-        [filteredArray release];
     }
-    return listOfDescriptions;
+    
+    return missionsDict;
+}
+
+#pragma mark -
+#pragma mark override setters/getters for better memory handling
+
+-(NSArray *)listOfMissionIDs
+{
+    if (!_listOfMissionIDs)
+    {
+        NSArray *sortedKeys = [[self.dictOfMissions allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
+        _listOfMissionIDs = [[NSArray alloc] initWithArray:sortedKeys];
+    }
+    
+    return _listOfMissionIDs;
+}
+
+- (NSDictionary *)dictOfMissions
+{
+    if (!_dictOfMissions)
+    {
+        _dictOfMissions = [self newLocalizedMissionsDictionary];
+    }
+    
+    return _dictOfMissions;
 }
 
 #pragma mark -
@@ -111,7 +205,7 @@
 }
 
 -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    return [self.listOfMissions count];
+    return [self.listOfMissionIDs count];
 }
 
 -(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
@@ -126,21 +220,28 @@
     if (cell == nil)
         cell = [[[UITableViewCell alloc] initWithStyle:(IS_IPAD()) ? UITableViewCellStyleDefault : UITableViewCellStyleSubtitle
                                        reuseIdentifier:CellIdentifier] autorelease];
-
-    cell.textLabel.text = [[[self.listOfMissions objectAtIndex:row] stringByDeletingPathExtension]
-                           stringByReplacingOccurrencesOfString:@"_" withString:@" "];
+    
+    NSString *missionID = [self.listOfMissionIDs objectAtIndex:row];
+    cell.textLabel.text = self.dictOfMissions[missionID][@"name"];
+    
     cell.textLabel.textColor = [UIColor lightYellowColor];
     //cell.textLabel.font = [UIFont fontWithName:@"Bradley Hand Bold" size:[UIFont labelFontSize]];
     cell.textLabel.textAlignment = (IS_IPAD()) ? UITextAlignmentCenter : UITextAlignmentLeft;
     cell.textLabel.backgroundColor = [UIColor clearColor];
     cell.textLabel.adjustsFontSizeToFitWidth = YES;
-    cell.detailTextLabel.text = (IS_IPAD()) ? nil : [self.listOfDescriptions objectAtIndex:row];
+    cell.detailTextLabel.text = (IS_IPAD()) ? nil : self.dictOfMissions[missionID][@"desc"];
     cell.detailTextLabel.textColor = [UIColor whiteColor];
     cell.detailTextLabel.backgroundColor = [UIColor clearColor];
     cell.detailTextLabel.adjustsFontSizeToFitWidth = YES;
     cell.detailTextLabel.numberOfLines = ([cell.detailTextLabel.text length] % 40);
     cell.detailTextLabel.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
 
+    UIView *bgColorView = [[UIView alloc] init];
+    bgColorView.backgroundColor = [UIColor colorWithRed:(85.0/255.0) green:(15.0/255.0) blue:(106.0/255.0) alpha:1.0];
+    bgColorView.layer.masksToBounds = YES;
+    cell.selectedBackgroundView = bgColorView;
+    [bgColorView release];
+    
     cell.backgroundColor = [UIColor blackColorTransparent];
     return cell;
 }
@@ -150,7 +251,7 @@
 -(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     NSInteger row = [indexPath row];
 
-    self.missionName = [[self.listOfMissions objectAtIndex:row] stringByDeletingPathExtension];
+    self.missionName = [self.listOfMissionIDs objectAtIndex:row];
     NSString *size = IS_IPAD() ? @"@2x" : @"";
     NSString *filePath = [[NSString alloc] initWithFormat:@"%@/Missions/Training/%@%@.png",GRAPHICS_DIRECTORY(),self.missionName,size];
     UIImage *img = [[UIImage alloc] initWithContentsOfFile:filePath];
@@ -158,24 +259,27 @@
     [self.previewImage setImage:img];
     [img release];
 
-    self.descriptionLabel.text = [self.listOfDescriptions objectAtIndex:row];
+    self.descriptionLabel.text = self.dictOfMissions[self.missionName][@"desc"];
 }
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
+
+-(void) didReceiveMemoryWarning
+{
     self.previewImage = nil;
     self.missionName = nil;
-    self.listOfMissions = nil;
-    self.listOfDescriptions = nil;
+    self.listOfMissionIDs = nil;
+    self.dictOfMissions = nil;
     // if you nil this one it won't get updated anymore
     //self.previewImage = nil;
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
-    self.listOfMissions = nil;
-    self.listOfDescriptions = nil;
+-(void) viewDidUnload
+{
+    self.listOfMissionIDs = nil;
+    self.dictOfMissions = nil;
     self.previewImage = nil;
     self.tableView = nil;
     self.descriptionLabel = nil;
@@ -185,13 +289,14 @@
 }
 
 
--(void) dealloc {
-    releaseAndNil(listOfMissions);
-    releaseAndNil(listOfDescriptions);
-    releaseAndNil(previewImage);
-    releaseAndNil(tableView);
-    releaseAndNil(descriptionLabel);
-    releaseAndNil(missionName);
+-(void) dealloc
+{
+    releaseAndNil(_listOfMissionIDs);
+    releaseAndNil(_dictOfMissions);
+    releaseAndNil(_previewImage);
+    releaseAndNil(_tableView);
+    releaseAndNil(_descriptionLabel);
+    releaseAndNil(_missionName);
     [super dealloc];
 }
 
--- a/project_files/HedgewarsMobile/Classes/PascalImports.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/PascalImports.h	Mon Nov 09 18:37:57 2015 +0100
@@ -28,9 +28,8 @@
      * that you want to use in your non-Pascal code
      */
 
-    void Game(const int argc, const char *argv[]);
-    void GenLandPreview(void);
-    void LoadLocaleWrapper(const char *filename);
+    void RunEngine(const int argc, const char *argv[]);
+    void LoadLocaleWrapper(const char *filepath, const char *filename);
 
     void HW_versionInfo(int *protoNum, char **versionStr);
     void *HW_getSDLWindow(void);
--- a/project_files/HedgewarsMobile/Classes/RestoreViewController-iPad.xib	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/RestoreViewController-iPad.xib	Mon Nov 09 18:37:57 2015 +0100
@@ -1,654 +1,92 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="7.10">
-	<data>
-		<int key="IBDocument.SystemTarget">1056</int>
-		<string key="IBDocument.SystemVersion">10K549</string>
-		<string key="IBDocument.InterfaceBuilderVersion">823</string>
-		<string key="IBDocument.AppKitVersion">1038.36</string>
-		<string key="IBDocument.HIToolboxVersion">461.00</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">132</string>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="1"/>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys" id="0">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="IBProxyObject" id="372490531">
-				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-			<object class="IBProxyObject" id="975951072">
-				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-			<object class="IBUIView" id="191373211">
-				<reference key="NSNextResponder"/>
-				<int key="NSvFlags">274</int>
-				<object class="NSMutableArray" key="NSSubviews">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBUIImageView" id="138553579">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">319</int>
-						<string key="NSFrameSize">{540, 640}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIUserInteractionEnabled">NO</bool>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<object class="NSCustomResource" key="IBUIImage">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">smallerBackground~ipad.png</string>
-						</object>
-					</object>
-					<object class="IBUIButton" id="155385540">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">302</int>
-						<string key="NSFrame">{{84, 517}, {151, 37}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<object class="NSFont" key="IBUIFont" id="204967016">
-							<string key="NSName">Helvetica-Bold</string>
-							<double key="NSSize">15</double>
-							<int key="NSfFlags">16</int>
-						</object>
-						<int key="IBUIButtonType">1</int>
-						<string key="IBUINormalTitle">Dismiss</string>
-						<object class="NSColor" key="IBUIHighlightedTitleColor" id="790402446">
-							<int key="NSColorSpace">3</int>
-							<bytes key="NSWhite">MQA</bytes>
-						</object>
-						<object class="NSColor" key="IBUINormalTitleColor" id="829178890">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MCAwIDAuNTAxOTYwODE0AA</bytes>
-						</object>
-						<object class="NSColor" key="IBUINormalTitleShadowColor" id="644451038">
-							<int key="NSColorSpace">3</int>
-							<bytes key="NSWhite">MC41AA</bytes>
-						</object>
-					</object>
-					<object class="IBUIButton" id="202794507">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">299</int>
-						<string key="NSFrame">{{308, 517}, {151, 37}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<int key="IBUITag">1</int>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="204967016"/>
-						<int key="IBUIButtonType">1</int>
-						<string key="IBUINormalTitle">Restore</string>
-						<reference key="IBUIHighlightedTitleColor" ref="790402446"/>
-						<reference key="IBUINormalTitleColor" ref="829178890"/>
-						<reference key="IBUINormalTitleShadowColor" ref="644451038"/>
-					</object>
-					<object class="IBUILabel" id="655269955">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">295</int>
-						<string key="NSFrame">{{216, 35}, {108, 29}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<bool key="IBUIClipsSubviews">YES</bool>
-						<int key="IBUIContentMode">7</int>
-						<bool key="IBUIUserInteractionEnabled">NO</bool>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<string key="IBUIText">Hmm...</string>
-						<object class="NSFont" key="IBUIFont">
-							<string key="NSName">Helvetica-Bold</string>
-							<double key="NSSize">24</double>
-							<int key="NSfFlags">16</int>
-						</object>
-						<object class="NSColor" key="IBUITextColor">
-							<int key="NSColorSpace">2</int>
-							<bytes key="NSRGB">MSAwLjc4MDM5MjIyOTYgMAA</bytes>
-						</object>
-						<reference key="IBUIHighlightedColor" ref="790402446"/>
-						<int key="IBUIBaselineAdjustment">1</int>
-						<float key="IBUIMinimumFontSize">10</float>
-						<int key="IBUITextAlignment">1</int>
-					</object>
-					<object class="IBUILabel" id="19933541">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">282</int>
-						<string key="NSFrame">{{80, 375}, {380, 96}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<bool key="IBUIClipsSubviews">YES</bool>
-						<int key="IBUIContentMode">7</int>
-						<bool key="IBUIUserInteractionEnabled">NO</bool>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<string key="IBUIText">Would you like to restore it?</string>
-						<object class="NSFont" key="IBUIFont" id="276115526">
-							<string key="NSName">Helvetica</string>
-							<double key="NSSize">18</double>
-							<int key="NSfFlags">16</int>
-						</object>
-						<object class="NSColor" key="IBUITextColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC45MDE5NjA3OTAyIDAuOTAxOTYwNzkwMiAwLjkwMTk2MDc5MDIAA</bytes>
-						</object>
-						<reference key="IBUIHighlightedColor" ref="790402446"/>
-						<int key="IBUIBaselineAdjustment">1</int>
-						<float key="IBUIMinimumFontSize">10</float>
-						<int key="IBUINumberOfLines">4</int>
-						<int key="IBUITextAlignment">1</int>
-					</object>
-					<object class="IBUILabel" id="151967545">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">306</int>
-						<string key="NSFrame">{{80, 87}, {380, 96}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<bool key="IBUIClipsSubviews">YES</bool>
-						<int key="IBUIContentMode">7</int>
-						<bool key="IBUIUserInteractionEnabled">NO</bool>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<string key="IBUIText">It appears you didn't complete your last game!</string>
-						<reference key="IBUIFont" ref="276115526"/>
-						<object class="NSColor" key="IBUITextColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC45MDE5NjA3OTAyIDAuOTAxOTYwNzkwMiAwLjkwMTk2MDc5MDIAA</bytes>
-						</object>
-						<reference key="IBUIHighlightedColor" ref="790402446"/>
-						<int key="IBUIBaselineAdjustment">1</int>
-						<float key="IBUIMinimumFontSize">10</float>
-						<int key="IBUINumberOfLines">4</int>
-						<int key="IBUITextAlignment">1</int>
-					</object>
-					<object class="IBUIImageView" id="129485928">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">301</int>
-						<string key="NSFrame">{{150, 191}, {240, 160}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIUserInteractionEnabled">NO</bool>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<object class="NSCustomResource" key="IBUIImage">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">denied.png</string>
-						</object>
-					</object>
-				</object>
-				<string key="NSFrameSize">{540, 640}</string>
-				<reference key="NSSuperview"/>
-				<reference key="IBUIBackgroundColor" ref="790402446"/>
-				<int key="IBUIContentMode">4</int>
-				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-					<int key="interfaceOrientation">3</int>
-				</object>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-		</object>
-		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">view</string>
-						<reference key="source" ref="372490531"/>
-						<reference key="destination" ref="191373211"/>
-					</object>
-					<int key="connectionID">3</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">buttonReleased:</string>
-						<reference key="source" ref="155385540"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">21</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">buttonReleased:</string>
-						<reference key="source" ref="202794507"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">22</int>
-				</object>
-			</object>
-			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBObjectRecord">
-						<int key="objectID">0</int>
-						<reference key="object" ref="0"/>
-						<reference key="children" ref="1000"/>
-						<nil key="parent"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">1</int>
-						<reference key="object" ref="191373211"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="155385540"/>
-							<reference ref="202794507"/>
-							<reference ref="655269955"/>
-							<reference ref="19933541"/>
-							<reference ref="151967545"/>
-							<reference ref="129485928"/>
-							<reference ref="138553579"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-1</int>
-						<reference key="object" ref="372490531"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">File's Owner</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-2</int>
-						<reference key="object" ref="975951072"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">15</int>
-						<reference key="object" ref="155385540"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">16</int>
-						<reference key="object" ref="202794507"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">18</int>
-						<reference key="object" ref="655269955"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">19</int>
-						<reference key="object" ref="19933541"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">20</int>
-						<reference key="object" ref="129485928"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">23</int>
-						<reference key="object" ref="151967545"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">24</int>
-						<reference key="object" ref="138553579"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.CustomClassName</string>
-					<string>-2.CustomClassName</string>
-					<string>1.IBEditorWindowLastContentRect</string>
-					<string>1.IBPluginDependency</string>
-					<string>15.IBPluginDependency</string>
-					<string>15.IBViewBoundsToFrameTransform</string>
-					<string>16.IBPluginDependency</string>
-					<string>16.IBViewBoundsToFrameTransform</string>
-					<string>18.IBPluginDependency</string>
-					<string>18.IBViewBoundsToFrameTransform</string>
-					<string>19.IBPluginDependency</string>
-					<string>19.IBViewBoundsToFrameTransform</string>
-					<string>20.IBPluginDependency</string>
-					<string>20.IBViewBoundsToFrameTransform</string>
-					<string>23.IBPluginDependency</string>
-					<string>23.IBViewBoundsToFrameTransform</string>
-					<string>24.IBPluginDependency</string>
-					<string>24.IBViewBoundsToFrameTransform</string>
-				</object>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>RestoreViewController</string>
-					<string>UIResponder</string>
-					<string>{{650, 289}, {540, 640}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABDlIAAw2gAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABEAkAAw2gAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABDXAAAw3UAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">AUKgAABDmYAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABDFgAAw8cAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABCoAAAw9uAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform"/>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="sourceID"/>
-			<int key="maxID">24</int>
-		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">RestoreViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="NSMutableDictionary" key="actions">
-						<string key="NS.key.0">buttonReleased:</string>
-						<string key="NS.object.0">id</string>
-					</object>
-					<object class="NSMutableDictionary" key="actionInfosByName">
-						<string key="NS.key.0">buttonReleased:</string>
-						<object class="IBActionInfo" key="NS.object.0">
-							<string key="name">buttonReleased:</string>
-							<string key="candidateClassName">id</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/RestoreViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UILabel</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/ExtraCategories.h</string>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="749404015">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIButton</string>
-					<string key="superclassName">UIControl</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIButton.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIControl</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIControl.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIImageView</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIImageView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UILabel</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UILabel.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIResponder</string>
-					<string key="superclassName">NSObject</string>
-					<reference key="sourceIdentifier" ref="749404015"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchBar</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchDisplayController</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPrintFormatter.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
-					</object>
-				</object>
-			</object>
-		</object>
-		<int key="IBDocument.localizationMode">0</int>
-		<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
-			<integer value="1056" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-			<integer value="3000" key="NS.object.0"/>
-		</object>
-		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<string key="IBDocument.LastKnownRelativeProjectPath">../Hedgewars.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>denied.png</string>
-				<string>smallerBackground~ipad.png</string>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>{240, 160}</string>
-				<string>{540, 640}</string>
-			</object>
-		</object>
-		<string key="IBCocoaTouchPluginVersion">132</string>
-	</data>
-</archive>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="8191" systemVersion="15B42" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8154"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="RestoreViewController">
+            <connections>
+                <outlet property="dismissButton" destination="15" id="kms-tp-evE"/>
+                <outlet property="restoreButton" destination="16" id="iH9-dH-DWf"/>
+                <outlet property="view" destination="1" id="3"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="center" id="1">
+            <rect key="frame" x="0.0" y="0.0" width="540" height="640"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="smallerBackground.png" id="24">
+                    <rect key="frame" x="0.0" y="0.0" width="540" height="640"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                </imageView>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="15">
+                    <rect key="frame" x="84" y="517" width="151" height="37"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <state key="normal" title="Dismiss">
+                        <color key="titleColor" red="0.0" green="0.0" blue="0.50196081400000003" alpha="1" colorSpace="calibratedRGB"/>
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="buttonReleased:" destination="-1" eventType="touchUpInside" id="21"/>
+                    </connections>
+                </button>
+                <button opaque="NO" tag="1" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="16">
+                    <rect key="frame" x="308" y="517" width="151" height="37"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <state key="normal" title="Restore">
+                        <color key="titleColor" red="0.0" green="0.0" blue="0.50196081400000003" alpha="1" colorSpace="calibratedRGB"/>
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="buttonReleased:" destination="-1" eventType="touchUpInside" id="22"/>
+                    </connections>
+                </button>
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Would you like to restore it?" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="4" minimumFontSize="10" id="19" customClass="LabelWithIBLocalization">
+                    <rect key="frame" x="80" y="375" width="380" height="96"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="18"/>
+                    <color key="textColor" red="0.90196079019999997" green="0.90196079019999997" blue="0.90196079019999997" alpha="1" colorSpace="calibratedRGB"/>
+                    <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                </label>
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="It appears you didn't complete your last game!" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="4" minimumFontSize="10" id="23" customClass="LabelWithIBLocalization">
+                    <rect key="frame" x="80" y="87" width="380" height="96"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="18"/>
+                    <color key="textColor" red="0.90196079019999997" green="0.90196079019999997" blue="0.90196079019999997" alpha="1" colorSpace="calibratedRGB"/>
+                    <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                </label>
+                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="denied.png" id="20">
+                    <rect key="frame" x="150" y="191" width="240" height="160"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                </imageView>
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Hmm..." textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="18" customClass="LabelWithIBLocalization">
+                    <rect key="frame" x="80" y="35" width="380" height="29"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="24"/>
+                    <color key="textColor" red="1" green="0.78039222959999999" blue="0.0" alpha="1" colorSpace="deviceRGB"/>
+                    <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                </label>
+            </subviews>
+            <animations/>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+            <nil key="simulatedStatusBarMetrics"/>
+            <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="denied.png" width="240" height="160"/>
+        <image name="smallerBackground.png" width="540" height="640"/>
+    </resources>
+</document>
--- a/project_files/HedgewarsMobile/Classes/RestoreViewController-iPhone.xib	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/RestoreViewController-iPhone.xib	Mon Nov 09 18:37:57 2015 +0100
@@ -1,620 +1,93 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
-	<data>
-		<int key="IBDocument.SystemTarget">1056</int>
-		<string key="IBDocument.SystemVersion">10K549</string>
-		<string key="IBDocument.InterfaceBuilderVersion">823</string>
-		<string key="IBDocument.AppKitVersion">1038.36</string>
-		<string key="IBDocument.HIToolboxVersion">461.00</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">132</string>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="1"/>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys" id="0">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="IBProxyObject" id="372490531">
-				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-			<object class="IBProxyObject" id="975951072">
-				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-			<object class="IBUIView" id="191373211">
-				<reference key="NSNextResponder"/>
-				<int key="NSvFlags">274</int>
-				<object class="NSMutableArray" key="NSSubviews">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBUIImageView" id="396922791">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">319</int>
-						<string key="NSFrameSize">{480, 320}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIUserInteractionEnabled">NO</bool>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<object class="NSCustomResource" key="IBUIImage">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">smallerBackground~iphone.png</string>
-						</object>
-					</object>
-					<object class="IBUIImageView" id="508553704">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">300</int>
-						<string key="NSFrame">{{20, 20}, {240, 160}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIUserInteractionEnabled">NO</bool>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<object class="NSCustomResource" key="IBUIImage">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">denied.png</string>
-						</object>
-					</object>
-					<object class="IBUILabel" id="531154203">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">315</int>
-						<string key="NSFrame">{{310, 32}, {108, 29}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<bool key="IBUIClipsSubviews">YES</bool>
-						<int key="IBUIContentMode">7</int>
-						<bool key="IBUIUserInteractionEnabled">NO</bool>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<string key="IBUIText">Hmm...</string>
-						<object class="NSFont" key="IBUIFont">
-							<string key="NSName">Helvetica-Bold</string>
-							<double key="NSSize">24</double>
-							<int key="NSfFlags">16</int>
-						</object>
-						<object class="NSColor" key="IBUITextColor">
-							<int key="NSColorSpace">2</int>
-							<bytes key="NSRGB">MSAwLjgyNzQ1MTA1MDMgMAA</bytes>
-						</object>
-						<object class="NSColor" key="IBUIHighlightedColor" id="790402446">
-							<int key="NSColorSpace">3</int>
-							<bytes key="NSWhite">MQA</bytes>
-						</object>
-						<int key="IBUIBaselineAdjustment">1</int>
-						<float key="IBUIMinimumFontSize">10</float>
-						<int key="IBUITextAlignment">1</int>
-					</object>
-					<object class="IBUILabel" id="785455561">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">307</int>
-						<string key="NSFrame">{{268, 74}, {192, 96}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<bool key="IBUIClipsSubviews">YES</bool>
-						<int key="IBUIContentMode">7</int>
-						<bool key="IBUIUserInteractionEnabled">NO</bool>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<string key="IBUIText">It appears you didn't complete your last game! Would you like to restore it?</string>
-						<object class="NSFont" key="IBUIFont">
-							<string key="NSName">Helvetica</string>
-							<double key="NSSize">18</double>
-							<int key="NSfFlags">16</int>
-						</object>
-						<object class="NSColor" key="IBUITextColor">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MC45MDE5NjA3OTAyIDAuOTAxOTYwNzkwMiAwLjkwMTk2MDc5MDIAA</bytes>
-						</object>
-						<reference key="IBUIHighlightedColor" ref="790402446"/>
-						<int key="IBUIBaselineAdjustment">1</int>
-						<float key="IBUIMinimumFontSize">10</float>
-						<int key="IBUINumberOfLines">4</int>
-						<int key="IBUITextAlignment">1</int>
-					</object>
-					<object class="IBUIButton" id="472385208">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">302</int>
-						<string key="NSFrame">{{53, 229}, {151, 37}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<object class="NSFont" key="IBUIFont" id="204967016">
-							<string key="NSName">Helvetica-Bold</string>
-							<double key="NSSize">15</double>
-							<int key="NSfFlags">16</int>
-						</object>
-						<int key="IBUIButtonType">1</int>
-						<string key="IBUINormalTitle">Dismiss</string>
-						<reference key="IBUIHighlightedTitleColor" ref="790402446"/>
-						<object class="NSColor" key="IBUINormalTitleColor" id="734262812">
-							<int key="NSColorSpace">1</int>
-							<bytes key="NSRGB">MCAwIDAuNTAxOTYwODE0AA</bytes>
-						</object>
-						<object class="NSColor" key="IBUINormalTitleShadowColor" id="644451038">
-							<int key="NSColorSpace">3</int>
-							<bytes key="NSWhite">MC41AA</bytes>
-						</object>
-					</object>
-					<object class="IBUIButton" id="923913762">
-						<reference key="NSNextResponder" ref="191373211"/>
-						<int key="NSvFlags">299</int>
-						<string key="NSFrame">{{277, 229}, {151, 37}}</string>
-						<reference key="NSSuperview" ref="191373211"/>
-						<bool key="IBUIOpaque">NO</bool>
-						<int key="IBUITag">1</int>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<int key="IBUIContentHorizontalAlignment">0</int>
-						<int key="IBUIContentVerticalAlignment">0</int>
-						<reference key="IBUIFont" ref="204967016"/>
-						<int key="IBUIButtonType">1</int>
-						<string key="IBUINormalTitle">Restore</string>
-						<reference key="IBUIHighlightedTitleColor" ref="790402446"/>
-						<reference key="IBUINormalTitleColor" ref="734262812"/>
-						<reference key="IBUINormalTitleShadowColor" ref="644451038"/>
-					</object>
-				</object>
-				<string key="NSFrameSize">{480, 320}</string>
-				<reference key="NSSuperview"/>
-				<reference key="IBUIBackgroundColor" ref="790402446"/>
-				<int key="IBUIContentMode">4</int>
-				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-					<int key="interfaceOrientation">3</int>
-				</object>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-		</object>
-		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">view</string>
-						<reference key="source" ref="372490531"/>
-						<reference key="destination" ref="191373211"/>
-					</object>
-					<int key="connectionID">3</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">buttonReleased:</string>
-						<reference key="source" ref="923913762"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">11</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">buttonReleased:</string>
-						<reference key="source" ref="472385208"/>
-						<reference key="destination" ref="372490531"/>
-						<int key="IBEventType">7</int>
-					</object>
-					<int key="connectionID">12</int>
-				</object>
-			</object>
-			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBObjectRecord">
-						<int key="objectID">0</int>
-						<reference key="object" ref="0"/>
-						<reference key="children" ref="1000"/>
-						<nil key="parent"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">1</int>
-						<reference key="object" ref="191373211"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="508553704"/>
-							<reference ref="923913762"/>
-							<reference ref="785455561"/>
-							<reference ref="531154203"/>
-							<reference ref="472385208"/>
-							<reference ref="396922791"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-1</int>
-						<reference key="object" ref="372490531"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">File's Owner</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-2</int>
-						<reference key="object" ref="975951072"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">5</int>
-						<reference key="object" ref="508553704"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">6</int>
-						<reference key="object" ref="531154203"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">7</int>
-						<reference key="object" ref="785455561"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">8</int>
-						<reference key="object" ref="472385208"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">10</int>
-						<reference key="object" ref="923913762"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">15</int>
-						<reference key="object" ref="396922791"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.CustomClassName</string>
-					<string>-2.CustomClassName</string>
-					<string>1.IBEditorWindowLastContentRect</string>
-					<string>1.IBPluginDependency</string>
-					<string>10.IBPluginDependency</string>
-					<string>10.IBViewBoundsToFrameTransform</string>
-					<string>15.IBPluginDependency</string>
-					<string>15.IBViewBoundsToFrameTransform</string>
-					<string>5.IBPluginDependency</string>
-					<string>5.IBViewBoundsToFrameTransform</string>
-					<string>6.IBPluginDependency</string>
-					<string>6.IBViewBoundsToFrameTransform</string>
-					<string>7.IBPluginDependency</string>
-					<string>7.IBViewBoundsToFrameTransform</string>
-					<string>8.IBPluginDependency</string>
-					<string>8.IBViewBoundsToFrameTransform</string>
-				</object>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>RestoreViewController</string>
-					<string>UIResponder</string>
-					<string>{{206, 423}, {480, 320}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">AUOKgABDZQAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform"/>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">AUGgAABBoAAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">AUObAABCAAAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">AUOGAABClAAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">AUJUAABDZQAAA</bytes>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="sourceID"/>
-			<int key="maxID">15</int>
-		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">RestoreViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="NSMutableDictionary" key="actions">
-						<string key="NS.key.0">buttonReleased:</string>
-						<string key="NS.object.0">id</string>
-					</object>
-					<object class="NSMutableDictionary" key="actionInfosByName">
-						<string key="NS.key.0">buttonReleased:</string>
-						<object class="IBActionInfo" key="NS.object.0">
-							<string key="name">buttonReleased:</string>
-							<string key="candidateClassName">id</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/RestoreViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UILabel</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/ExtraCategories.h</string>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="749404015">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIButton</string>
-					<string key="superclassName">UIControl</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIButton.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIControl</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIControl.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIImageView</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIImageView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UILabel</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UILabel.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIResponder</string>
-					<string key="superclassName">NSObject</string>
-					<reference key="sourceIdentifier" ref="749404015"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchBar</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchDisplayController</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPrintFormatter.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
-					</object>
-				</object>
-			</object>
-		</object>
-		<int key="IBDocument.localizationMode">0</int>
-		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
-			<integer value="1056" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-			<integer value="3000" key="NS.object.0"/>
-		</object>
-		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<string key="IBDocument.LastKnownRelativeProjectPath">../Hedgewars.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>denied.png</string>
-				<string>smallerBackground~iphone.png</string>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>{240, 160}</string>
-				<string>{480, 320}</string>
-			</object>
-		</object>
-		<string key="IBCocoaTouchPluginVersion">132</string>
-	</data>
-</archive>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="8191" systemVersion="15B42" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8154"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="RestoreViewController">
+            <connections>
+                <outlet property="dismissButton" destination="8" id="0AU-TL-3aN"/>
+                <outlet property="restoreButton" destination="10" id="V8J-Ke-DQd"/>
+                <outlet property="view" destination="1" id="3"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="center" id="1">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="320"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="smallerBackground.png" id="15">
+                    <rect key="frame" x="0.0" y="0.0" width="480" height="320"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                </imageView>
+                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="denied.png" id="5">
+                    <rect key="frame" x="20" y="20" width="240" height="160"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                </imageView>
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Hmm..." textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="6" customClass="LabelWithIBLocalization">
+                    <rect key="frame" x="268" y="32" width="192" height="29"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="24"/>
+                    <color key="textColor" red="1" green="0.82745105029999999" blue="0.0" alpha="1" colorSpace="deviceRGB"/>
+                    <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                </label>
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="It appears you didn't complete your last game!" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="4" minimumFontSize="10" id="7" customClass="LabelWithIBLocalization">
+                    <rect key="frame" x="268" y="74" width="192" height="70"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="18"/>
+                    <color key="textColor" red="0.90196079019999997" green="0.90196079019999997" blue="0.90196079019999997" alpha="1" colorSpace="calibratedRGB"/>
+                    <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                </label>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="8">
+                    <rect key="frame" x="53" y="229" width="151" height="37"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <state key="normal" title="Dismiss">
+                        <color key="titleColor" red="0.0" green="0.0" blue="0.50196081400000003" alpha="1" colorSpace="calibratedRGB"/>
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="buttonReleased:" destination="-1" eventType="touchUpInside" id="12"/>
+                    </connections>
+                </button>
+                <button opaque="NO" tag="1" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="10">
+                    <rect key="frame" x="277" y="229" width="151" height="37"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="15"/>
+                    <state key="normal" title="Restore">
+                        <color key="titleColor" red="0.0" green="0.0" blue="0.50196081400000003" alpha="1" colorSpace="calibratedRGB"/>
+                        <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                    </state>
+                    <connections>
+                        <action selector="buttonReleased:" destination="-1" eventType="touchUpInside" id="11"/>
+                    </connections>
+                </button>
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Would you like to restore it?" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="4" minimumFontSize="10" id="GnJ-yZ-dpc" customClass="LabelWithIBLocalization">
+                    <rect key="frame" x="268" y="152" width="192" height="59"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="18"/>
+                    <color key="textColor" red="0.90196079019999997" green="0.90196079019999997" blue="0.90196079019999997" alpha="1" colorSpace="calibratedRGB"/>
+                    <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                </label>
+            </subviews>
+            <animations/>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+            <nil key="simulatedStatusBarMetrics"/>
+            <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="870" y="246"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="denied.png" width="240" height="160"/>
+        <image name="smallerBackground.png" width="480" height="320"/>
+    </resources>
+</document>
--- a/project_files/HedgewarsMobile/Classes/RestoreViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/RestoreViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -20,6 +20,11 @@
 #import "RestoreViewController.h"
 #import "GameInterfaceBridge.h"
 
+@interface RestoreViewController ()
+@property (retain, nonatomic) IBOutlet UIButton *restoreButton;
+@property (retain, nonatomic) IBOutlet UIButton *dismissButton;
+@end
+
 @implementation RestoreViewController
 
 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
@@ -32,18 +37,31 @@
 
     if (theButton.tag != 0) {
         [[AudioManagerController mainManager] playClickSound];
-        [GameInterfaceBridge registerCallingController:self.parentViewController];
-        [GameInterfaceBridge startSaveGame:[[NSUserDefaults standardUserDefaults] objectForKey:@"savedGamePath"]];
+        [GameInterfaceBridge registerCallingController:self.presentingViewController];
+        
+        // Since iOS 8, the file system layout of app containers has changed.
+        // So, we must rely now on saved game filename, not full path.
+        NSString *oldSavedGamePath = [[NSUserDefaults standardUserDefaults] objectForKey:@"savedGamePath"];
+        NSString *savedGameFile = [oldSavedGamePath lastPathComponent];
+        NSString *newSavedGamePath = [NSString stringWithFormat:@"%@%@", SAVES_DIRECTORY(), savedGameFile];
+        
+        [GameInterfaceBridge startSaveGame:newSavedGamePath];
     } else {
         [[AudioManagerController mainManager] playBackSound];
         [defaults setObject:@"" forKey:@"savedGamePath"];
         [defaults synchronize];
     }
-    [self.parentViewController dismissModalViewControllerAnimated:YES];
+    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
 }
 
 -(void) viewDidLoad {
     [super viewDidLoad];
+    
+    [self.restoreButton setTitle:NSLocalizedString(@"Restore", nil) forState:UIControlStateNormal];
+    [self.dismissButton setTitle:NSLocalizedString(@"Dismiss", nil) forState:UIControlStateNormal];
+    
+    [self.restoreButton applyDarkBlueQuickStyle];
+    [self.dismissButton applyDarkBlueQuickStyle];
 }
 
 -(void) didReceiveMemoryWarning {
@@ -55,6 +73,8 @@
 }
 
 -(void) dealloc {
+    [_restoreButton release];
+    [_dismissButton release];
     [super dealloc];
 }
 
--- a/project_files/HedgewarsMobile/Classes/SavedGamesViewController.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SavedGamesViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -24,12 +24,10 @@
                                                         EditableCellViewDelegate, UIActionSheetDelegate>  {
     UITableView *tableView;
     NSMutableArray *listOfSavegames;
-    NSInteger numberOfItems;
 }
 
 @property (nonatomic,retain) IBOutlet UITableView *tableView;
 @property (nonatomic,retain) NSMutableArray *listOfSavegames;
-@property (assign) NSInteger numberOfItems;
 
 -(IBAction) buttonPressed:(id) sender;
 
--- a/project_files/HedgewarsMobile/Classes/SavedGamesViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SavedGamesViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -20,9 +20,12 @@
 #import "SavedGamesViewController.h"
 #import "GameInterfaceBridge.h"
 
+@interface SavedGamesViewController ()
+@property (retain, nonatomic) IBOutlet UIBarButtonItem *clearAllButton;
+@end
 
 @implementation SavedGamesViewController
-@synthesize tableView, listOfSavegames, numberOfItems;
+@synthesize tableView, listOfSavegames;
 
 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
     return rotationManager(interfaceOrientation);
@@ -33,12 +36,14 @@
     NSMutableArray *array = [[NSMutableArray alloc] initWithArray:contentsOfDir copyItems:YES];
     self.listOfSavegames = array;
     [array release];
-    self.numberOfItems = [self.listOfSavegames count];
 
     [self.tableView reloadData];
 }
 
--(void) viewDidLoad {
+-(void) viewDidLoad
+{
+    [super viewDidLoad];
+    
     [self.tableView setBackgroundColorForAnyTable:[UIColor clearColor]];
 
     NSString *imgName = (IS_IPAD()) ? @"mediumBackground~ipad.png" : @"smallerBackground~iphone.png";
@@ -49,10 +54,11 @@
     background.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
     [self.view insertSubview:background atIndex:0];
     [background release];
-
+    
+    [self.clearAllButton setTitle:NSLocalizedString(@"Clear All", nil)];
+    
     if (self.listOfSavegames == nil)
         [self updateTable];
-    [super viewDidLoad];
 }
 
 -(void) viewWillAppear:(BOOL)animated {
@@ -68,7 +74,7 @@
     if (button.tag == 0) {
         [[AudioManagerController mainManager] playBackSound];
         [self.tableView setEditing:NO animated:YES];
-        [[self parentViewController] dismissModalViewControllerAnimated:YES];
+        [[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
     } else {
         NSString *titleStr, *cancelStr, *confirmStr;
         titleStr = NSLocalizedString(@"Are you reeeeeally sure?", @"");
@@ -96,13 +102,12 @@
         [[NSFileManager defaultManager] createDirectoryAtPath:SAVES_DIRECTORY() withIntermediateDirectories:NO attributes:nil error:NULL];
 
         // update the table and the cached list
-        NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:self.numberOfItems];
-        for (int i = 0; i < self.numberOfItems; i++)
+        NSMutableArray *array = [[NSMutableArray alloc] init];
+        for (int i = 0; i < [self.listOfSavegames count]; i++)
             [array addObject:[NSIndexPath indexPathForRow:i inSection:0]];
-        self.numberOfItems = 0;
+        [self.listOfSavegames removeAllObjects];
+        
         [self.tableView deleteRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationTop];
-        [self.listOfSavegames removeAllObjects];
-
         [array release];
     }
 }
@@ -114,20 +119,19 @@
 }
 
 -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    return self.numberOfItems;
+    return [self.listOfSavegames count];
 }
 
 -(UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     static NSString *CellIdentifier = @"Cell";
 
-    if (self.listOfSavegames == nil)
-        [self updateTable];
     EditableCellView *editableCell = (EditableCellView *)[aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (editableCell == nil) {
         editableCell = [[[EditableCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
-        editableCell.delegate = self;
+        editableCell.delegate = nil;
+        editableCell.textField.userInteractionEnabled = NO;
     }
-    editableCell.respectEditing = YES;
+    editableCell.tag = [indexPath row];
     editableCell.textField.text = [[self.listOfSavegames objectAtIndex:[indexPath row]] stringByDeletingPathExtension];
     editableCell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
 
@@ -158,13 +162,29 @@
 
 -(void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
     [(EditableCellView *)[self.tableView cellForRowAtIndexPath:indexPath] save:nil];
-    self.numberOfItems--;
-    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
+    [self fixTagsForStartTag:[indexPath row]];
 
     NSString *saveName = [self.listOfSavegames objectAtIndex:[indexPath row]];
     NSString *filePath = [NSString stringWithFormat:@"%@/%@",SAVES_DIRECTORY(),saveName];
     [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
     [self.listOfSavegames removeObject:saveName];
+    
+    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
+}
+
+#pragma mark - Fix cells' tags
+
+- (void)fixTagsForStartTag:(NSInteger)tag
+{
+    for (UITableViewCell *cell in self.tableView.visibleCells)
+    {
+        NSInteger oldTag = cell.tag;
+        
+        if (oldTag > tag)
+        {
+            cell.tag--;
+        }
+    }
 }
 
 #pragma mark -
@@ -187,7 +207,6 @@
     [[NSFileManager defaultManager] copyItemAtPath:currentFilePath toPath:newFilePath error:nil];
     [newFilePath release];
 
-    self.numberOfItems++;
     [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
 
     [GameInterfaceBridge registerCallingController:self];
@@ -229,6 +248,7 @@
 -(void) dealloc {
     releaseAndNil(tableView);
     releaseAndNil(listOfSavegames);
+    releaseAndNil(_clearAllButton);
     [super dealloc];
 }
 
--- a/project_files/HedgewarsMobile/Classes/SavedGamesViewController.xib	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SavedGamesViewController.xib	Mon Nov 09 18:37:57 2015 +0100
@@ -1,553 +1,56 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="7.10">
-	<data>
-		<int key="IBDocument.SystemTarget">1056</int>
-		<string key="IBDocument.SystemVersion">10K549</string>
-		<string key="IBDocument.InterfaceBuilderVersion">823</string>
-		<string key="IBDocument.AppKitVersion">1038.36</string>
-		<string key="IBDocument.HIToolboxVersion">461.00</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">132</string>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="7"/>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys" id="0">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="IBProxyObject" id="841351856">
-				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-			<object class="IBProxyObject" id="606714003">
-				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-			<object class="IBUIView" id="766721923">
-				<reference key="NSNextResponder"/>
-				<int key="NSvFlags">292</int>
-				<object class="NSMutableArray" key="NSSubviews">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBUIToolbar" id="832454237">
-						<reference key="NSNextResponder" ref="766721923"/>
-						<int key="NSvFlags">290</int>
-						<string key="NSFrameSize">{768, 44}</string>
-						<reference key="NSSuperview" ref="766721923"/>
-						<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
-						<int key="IBUITag">458912</int>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<object class="NSMutableArray" key="IBUIItems">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBUIBarButtonItem" id="422926197">
-								<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-								<int key="IBUIStyle">1</int>
-								<reference key="IBUIToolbar" ref="832454237"/>
-								<int key="IBUISystemItemIdentifier">0</int>
-							</object>
-							<object class="IBUIBarButtonItem" id="881124109">
-								<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-								<reference key="IBUIToolbar" ref="832454237"/>
-								<int key="IBUISystemItemIdentifier">5</int>
-							</object>
-							<object class="IBUIBarButtonItem" id="882246004">
-								<int key="IBUITag">1</int>
-								<string key="IBUITitle">Clear All</string>
-								<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-								<int key="IBUIStyle">1</int>
-								<reference key="IBUIToolbar" ref="832454237"/>
-							</object>
-						</object>
-					</object>
-					<object class="IBUITableView" id="399289716">
-						<reference key="NSNextResponder" ref="766721923"/>
-						<int key="NSvFlags">274</int>
-						<string key="NSFrame">{{0, 44}, {768, 724}}</string>
-						<reference key="NSSuperview" ref="766721923"/>
-						<object class="NSColor" key="IBUIBackgroundColor">
-							<int key="NSColorSpace">3</int>
-							<bytes key="NSWhite">MCAwAA</bytes>
-						</object>
-						<bool key="IBUIClipsSubviews">YES</bool>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<bool key="IBUIAlwaysBounceVertical">YES</bool>
-						<int key="IBUIStyle">1</int>
-						<int key="IBUISeparatorStyle">2</int>
-						<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
-						<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
-						<float key="IBUIRowHeight">44</float>
-						<float key="IBUISectionHeaderHeight">10</float>
-						<float key="IBUISectionFooterHeight">10</float>
-					</object>
-				</object>
-				<string key="NSFrameSize">{768, 768}</string>
-				<reference key="NSSuperview"/>
-				<object class="NSColor" key="IBUIBackgroundColor">
-					<int key="NSColorSpace">3</int>
-					<bytes key="NSWhite">MQA</bytes>
-				</object>
-				<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
-				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-					<int key="interfaceOrientation">3</int>
-				</object>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-		</object>
-		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">view</string>
-						<reference key="source" ref="841351856"/>
-						<reference key="destination" ref="766721923"/>
-					</object>
-					<int key="connectionID">3</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">buttonPressed:</string>
-						<reference key="source" ref="422926197"/>
-						<reference key="destination" ref="841351856"/>
-					</object>
-					<int key="connectionID">6</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">dataSource</string>
-						<reference key="source" ref="399289716"/>
-						<reference key="destination" ref="841351856"/>
-					</object>
-					<int key="connectionID">8</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">delegate</string>
-						<reference key="source" ref="399289716"/>
-						<reference key="destination" ref="841351856"/>
-					</object>
-					<int key="connectionID">9</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">tableView</string>
-						<reference key="source" ref="841351856"/>
-						<reference key="destination" ref="399289716"/>
-					</object>
-					<int key="connectionID">10</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">buttonPressed:</string>
-						<reference key="source" ref="882246004"/>
-						<reference key="destination" ref="841351856"/>
-					</object>
-					<int key="connectionID">17</int>
-				</object>
-			</object>
-			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBObjectRecord">
-						<int key="objectID">0</int>
-						<reference key="object" ref="0"/>
-						<reference key="children" ref="1000"/>
-						<nil key="parent"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-1</int>
-						<reference key="object" ref="841351856"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">File's Owner</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-2</int>
-						<reference key="object" ref="606714003"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">2</int>
-						<reference key="object" ref="766721923"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="832454237"/>
-							<reference ref="399289716"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">4</int>
-						<reference key="object" ref="832454237"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="422926197"/>
-							<reference ref="881124109"/>
-							<reference ref="882246004"/>
-						</object>
-						<reference key="parent" ref="766721923"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">5</int>
-						<reference key="object" ref="422926197"/>
-						<reference key="parent" ref="832454237"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">7</int>
-						<reference key="object" ref="399289716"/>
-						<reference key="parent" ref="766721923"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">13</int>
-						<reference key="object" ref="881124109"/>
-						<reference key="parent" ref="832454237"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">15</int>
-						<reference key="object" ref="882246004"/>
-						<reference key="parent" ref="832454237"/>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.CustomClassName</string>
-					<string>-2.CustomClassName</string>
-					<string>13.IBPluginDependency</string>
-					<string>15.IBPluginDependency</string>
-					<string>2.IBEditorWindowLastContentRect</string>
-					<string>2.IBPluginDependency</string>
-					<string>4.IBPluginDependency</string>
-					<string>5.IBPluginDependency</string>
-					<string>7.IBPluginDependency</string>
-				</object>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>SavedGamesViewController</string>
-					<string>UIResponder</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>{{467, 276}, {768, 768}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="sourceID"/>
-			<int key="maxID">17</int>
-		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">SavedGamesViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="NSMutableDictionary" key="actions">
-						<string key="NS.key.0">buttonPressed:</string>
-						<string key="NS.object.0">id</string>
-					</object>
-					<object class="NSMutableDictionary" key="actionInfosByName">
-						<string key="NS.key.0">buttonPressed:</string>
-						<object class="IBActionInfo" key="NS.object.0">
-							<string key="name">buttonPressed:</string>
-							<string key="candidateClassName">id</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="outlets">
-						<string key="NS.key.0">tableView</string>
-						<string key="NS.object.0">UITableView</string>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<string key="NS.key.0">tableView</string>
-						<object class="IBToOneOutletInfo" key="NS.object.0">
-							<string key="name">tableView</string>
-							<string key="candidateClassName">UITableView</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/SavedGamesViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UITableView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Classes/ExtraCategories.h</string>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="786211723">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIBarButtonItem</string>
-					<string key="superclassName">UIBarItem</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIBarButtonItem.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIBarItem</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIBarItem.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIResponder</string>
-					<string key="superclassName">NSObject</string>
-					<reference key="sourceIdentifier" ref="786211723"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIScrollView</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIScrollView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchBar</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchDisplayController</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UITableView</string>
-					<string key="superclassName">UIScrollView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITableView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIToolbar</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIToolbar.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPrintFormatter.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
-					</object>
-				</object>
-			</object>
-		</object>
-		<int key="IBDocument.localizationMode">0</int>
-		<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
-			<integer value="1056" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-			<integer value="3100" key="NS.object.0"/>
-		</object>
-		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<string key="IBDocument.LastKnownRelativeProjectPath">../Hedgewars.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<string key="IBCocoaTouchPluginVersion">132</string>
-	</data>
-</archive>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="9059" systemVersion="15B42" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9049"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="SavedGamesViewController">
+            <connections>
+                <outlet property="clearAllButton" destination="15" id="txV-uc-ITF"/>
+                <outlet property="tableView" destination="7" id="10"/>
+                <outlet property="view" destination="2" id="3"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="2">
+            <rect key="frame" x="0.0" y="0.0" width="768" height="768"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <subviews>
+                <toolbar clearsContextBeforeDrawing="NO" tag="458912" contentMode="scaleToFill" id="4">
+                    <rect key="frame" x="0.0" y="0.0" width="768" height="44"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                    <animations/>
+                    <items>
+                        <barButtonItem systemItem="done" id="5">
+                            <connections>
+                                <action selector="buttonPressed:" destination="-1" id="6"/>
+                            </connections>
+                        </barButtonItem>
+                        <barButtonItem style="plain" systemItem="flexibleSpace" id="13"/>
+                        <barButtonItem tag="1" title="Clear All" id="15">
+                            <connections>
+                                <action selector="buttonPressed:" destination="-1" id="17"/>
+                            </connections>
+                        </barButtonItem>
+                    </items>
+                </toolbar>
+                <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="7">
+                    <rect key="frame" x="0.0" y="44" width="768" height="724"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    <animations/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                    <connections>
+                        <outlet property="dataSource" destination="-1" id="8"/>
+                        <outlet property="delegate" destination="-1" id="9"/>
+                    </connections>
+                </tableView>
+            </subviews>
+            <animations/>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+            <nil key="simulatedStatusBarMetrics"/>
+            <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+        </view>
+    </objects>
+</document>
--- a/project_files/HedgewarsMobile/Classes/SchemeSettingsViewController.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SchemeSettingsViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -18,13 +18,10 @@
 
 
 #import <UIKit/UIKit.h>
-
-
-@class SingleSchemeViewController;
+#import "TableViewControllerWithDoneButton.h"
 
-@interface SchemeSettingsViewController : UITableViewController {
+@interface SchemeSettingsViewController : TableViewControllerWithDoneButton {
     NSMutableArray *listOfSchemes;
-    SingleSchemeViewController *childController;
 }
 
 @property (nonatomic, retain) NSMutableArray *listOfSchemes;
--- a/project_files/HedgewarsMobile/Classes/SchemeSettingsViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SchemeSettingsViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -40,7 +40,7 @@
     self.navigationItem.rightBarButtonItem = editButton;
     [editButton release];
 
-    self.navigationItem.title = @"List of schemes";
+    self.navigationItem.title = NSLocalizedString(@"List of schemes", nil);
 }
 
 -(void) viewWillAppear:(BOOL) animated {
@@ -131,43 +131,43 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    if (childController == nil) {
-        childController = [[SingleSchemeViewController alloc] initWithStyle:UITableViewStyleGrouped];
-    }
-
+-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    SingleSchemeViewController *singleSchemeViewController = [[SingleSchemeViewController alloc] initWithStyle:UITableViewStyleGrouped];
+    
     NSInteger row = [indexPath row];
     NSString *selectedSchemeFile = [self.listOfSchemes objectAtIndex:row];
 
     // this must be set so childController can load the correct plist
-    childController.schemeName = [selectedSchemeFile stringByDeletingPathExtension];
-    [childController.tableView setContentOffset:CGPointMake(0,0) animated:NO];
+    singleSchemeViewController.schemeName = [selectedSchemeFile stringByDeletingPathExtension];
+    [singleSchemeViewController.tableView setContentOffset:CGPointMake(0,0) animated:NO];
 
-    [self.navigationController pushViewController:childController animated:YES];
+    [self.navigationController pushViewController:singleSchemeViewController animated:YES];
+    [singleSchemeViewController release];
+    
     [tableView deselectRowAtIndexPath:indexPath animated:YES];
 }
 
 
 #pragma mark -
 #pragma mark Memory management
--(void)didReceiveMemoryWarning {
+-(void)didReceiveMemoryWarning
+{
     [super didReceiveMemoryWarning];
-    if (childController.view.superview == nil )
-        childController = nil;
     MSG_MEMCLEAN();
 }
 
--(void) viewDidUnload {
+-(void) viewDidUnload
+{
     self.listOfSchemes = nil;
-    childController = nil;
     MSG_DIDUNLOAD();
     [super viewDidUnload];
 }
 
 
--(void) dealloc {
+-(void) dealloc
+{
     releaseAndNil(listOfSchemes);
-    releaseAndNil(childController);
     [super dealloc];
 }
 
--- a/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -20,6 +20,7 @@
 #import "SchemeWeaponConfigViewController.h"
 #import <QuartzCore/QuartzCore.h>
 
+#define DISABLED_GAME_STYLES @[@"Frenzy.lua", @"Gravity.lua", @"HedgeEditor.lua", @"Continental_supplies.lua", @"Space_Invasion.lua", @"Tumbler.lua"]
 
 #define LABEL_TAG 57423
 #define TABLE_TAG 45657
@@ -48,7 +49,7 @@
 
 -(NSString *)selectedScript {
     if (selectedScript == nil)
-        self.selectedScript = @"Normal.plist";
+        self.selectedScript = @"";
     return selectedScript;
 }
 
@@ -73,7 +74,7 @@
 -(NSArray *)listOfScripts {
     if (listOfScripts == nil)
         self.listOfScripts = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:SCRIPTS_DIRECTORY() error:NULL]
-                              filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF ENDSWITH '.lua'"]];
+                              filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF ENDSWITH '.lua' AND NOT (SELF IN %@)", DISABLED_GAME_STYLES]];
     return listOfScripts;
 }
 
@@ -125,6 +126,8 @@
     } else {
         UIImage *backgroundImage = [[UIImage alloc] initWithContentsOfFile:@"background~iphone.png"];
         UIImageView *background = [[UIImageView alloc] initWithImage:backgroundImage];
+        background.contentMode = UIViewContentModeScaleAspectFill;
+        background.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
         [backgroundImage release];
         [self.view addSubview:background];
         [background release];
@@ -164,7 +167,7 @@
     else if (self.topControl.selectedSegmentIndex == 1)
         return [self.listOfWeapons count];
     else
-        return [self.listOfScripts count];
+        return [self.listOfScripts count] + 1; // +1 for fake 'Normal'
 }
 
 // Customize the appearance of table view cells.
@@ -203,14 +206,31 @@
             self.lastIndexPath_we = indexPath;
         }
     } else {
-        cell.textLabel.text = [[[self.listOfScripts objectAtIndex:row] stringByDeletingPathExtension]
-                               stringByReplacingOccurrencesOfString:@"_" withString:@" "];
-        //cell.detailTextLabel.text = ;
-        if ([[self.listOfScripts objectAtIndex:row] isEqualToString:self.selectedScript]) {
-            UIImageView *checkbox = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:@"checkbox.png"]];
-            cell.accessoryView = checkbox;
-            [checkbox release];
-            self.lastIndexPath_lu = indexPath;
+        if (row == 0)
+        {
+            cell.textLabel.text = @"Normal";
+            
+            if ([self.selectedScript isEqualToString:@""])
+            {
+                UIImageView *checkbox = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:@"checkbox.png"]];
+                cell.accessoryView = checkbox;
+                [checkbox release];
+                self.lastIndexPath_lu = indexPath;
+            }
+        }
+        else
+        {
+            row--;
+            
+            cell.textLabel.text = [[[self.listOfScripts objectAtIndex:row] stringByDeletingPathExtension]
+                                   stringByReplacingOccurrencesOfString:@"_" withString:@" "];
+            //cell.detailTextLabel.text = ;
+            if ([[self.listOfScripts objectAtIndex:row] isEqualToString:self.selectedScript]) {
+                UIImageView *checkbox = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:@"checkbox.png"]];
+                cell.accessoryView = checkbox;
+                [checkbox release];
+                self.lastIndexPath_lu = indexPath;
+            }
         }
     }
 
@@ -276,8 +296,8 @@
     else
         lastIndexPath = self.lastIndexPath_lu;
 
-    int newRow = [indexPath row];
-    int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
+    NSInteger newRow = [indexPath row];
+    NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
 
     if (newRow != oldRow) {
         //TODO: this code works only for a single section table
@@ -297,7 +317,7 @@
             if ([[settings objectForKey:@"sync_ws"] boolValue]) {
                 for (NSString *str in self.listOfWeapons) {
                     if ([str isEqualToString:self.selectedScheme]) {
-                        int row = [self.listOfSchemes indexOfObject:str];
+                        NSInteger row = [self.listOfSchemes indexOfObject:str];
                         self.selectedWeapon = str;
                         self.lastIndexPath_we = [NSIndexPath indexPathForRow:row inSection:1];
                         break;
@@ -309,32 +329,63 @@
             self.selectedWeapon = [self.listOfWeapons objectAtIndex:newRow];
         } else {
             self.lastIndexPath_lu = indexPath;
-            self.selectedScript = [self.listOfScripts objectAtIndex:newRow];
-
-            // some styles disable or force the choice of a particular scheme/weaponset
-            NSString *path = [[NSString alloc] initWithFormat:@"%@/%@.cfg",SCRIPTS_DIRECTORY(),[self.selectedScript stringByDeletingPathExtension]];
-            NSString *configFile = [[NSString alloc] initWithContentsOfFile:path];
-            [path release];
-            NSArray *scriptOptions = [configFile componentsSeparatedByString:@"\n"];
-            [configFile release];
-
-            self.scriptCommand = [NSString stringWithFormat:@"escript Scripts/Multiplayer/%@",self.selectedScript];
-            NSString *scheme = [scriptOptions objectAtIndex:0];
-            if ([scheme isEqualToString:@"locked"]) {
+            
+            if (newRow == 0)
+            {
+                self.selectedScript = nil;
+                self.scriptCommand = nil;
+                
                 self.selectedScheme = @"Default.plist";
-                [self.topControl setEnabled:NO forSegmentAtIndex:0];
-            } else {
-                self.selectedScheme = [NSString stringWithFormat:@"%@.plist",scheme];
                 [self.topControl setEnabled:YES forSegmentAtIndex:0];
+                
+                self.selectedWeapon = @"Default.plist";
+                [self.topControl setEnabled:YES forSegmentAtIndex:1];
             }
-
-            NSString *weapon = [scriptOptions objectAtIndex:1];
-            if ([weapon isEqualToString:@"locked"]) {
-                self.selectedWeapon = @"Default.plist";
-                [self.topControl setEnabled:NO forSegmentAtIndex:1];
-            } else {
-                self.selectedWeapon = [NSString stringWithFormat:@"%@.plist",weapon];
-                [self.topControl setEnabled:YES forSegmentAtIndex:1];
+            else
+            {
+                newRow--;
+                
+                self.selectedScript = [self.listOfScripts objectAtIndex:newRow];
+                
+                // some styles disable or force the choice of a particular scheme/weaponset
+                NSString *path = [[NSString alloc] initWithFormat:@"%@/%@.cfg",SCRIPTS_DIRECTORY(),[self.selectedScript stringByDeletingPathExtension]];
+                NSString *configFile = [[NSString alloc] initWithContentsOfFile:path];
+                [path release];
+                NSArray *scriptOptions = [configFile componentsSeparatedByString:@"\n"];
+                [configFile release];
+                
+                self.scriptCommand = [NSString stringWithFormat:@"escript Scripts/Multiplayer/%@",self.selectedScript];
+                NSString *scheme = [scriptOptions objectAtIndex:0];
+                if ([scheme isEqualToString:@"locked"])
+                {
+                    self.selectedScheme = @"Default.plist";
+                    [self.topControl setEnabled:NO forSegmentAtIndex:0];
+                }
+                else
+                {
+                    if (scheme && ![scheme isEqualToString:@"*"])
+                    {
+                        NSString *correctScheme = [scheme stringByReplacingOccurrencesOfString:@"_" withString:@" "];
+                        self.selectedScheme = [NSString stringWithFormat:@"%@.plist", correctScheme];
+                    }
+                    [self.topControl setEnabled:YES forSegmentAtIndex:0];
+                }
+                
+                NSString *weapon = [scriptOptions objectAtIndex:1];
+                if ([weapon isEqualToString:@"locked"])
+                {
+                    self.selectedWeapon = @"Default.plist";
+                    [self.topControl setEnabled:NO forSegmentAtIndex:1];
+                }
+                else
+                {
+                    if (weapon && ![weapon isEqualToString:@"*"])
+                    {
+                        NSString *correctWeapon = [weapon stringByReplacingOccurrencesOfString:@"_" withString:@" "];
+                        self.selectedWeapon = [NSString stringWithFormat:@"%@.plist", correctWeapon];
+                    }
+                    [self.topControl setEnabled:YES forSegmentAtIndex:1];
+                }
             }
         }
 
@@ -382,16 +433,6 @@
 #pragma mark -
 #pragma mark Memory management
 -(void) didReceiveMemoryWarning {
-    if ([HWUtils isGameLaunched]) {
-        self.lastIndexPath_sc = nil;
-        self.lastIndexPath_we = nil;
-        self.lastIndexPath_lu = nil;
-        self.selectedScheme = nil;
-        self.selectedWeapon = nil;
-        self.selectedScript = nil;
-        self.scriptCommand = nil;
-        self.topControl = nil;
-    }
     self.listOfSchemes = nil;
     self.listOfWeapons = nil;
     self.listOfScripts = nil;
@@ -400,7 +441,6 @@
 }
 
 -(void) viewDidUnload {
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
     self.listOfSchemes = nil;
     self.listOfWeapons = nil;
     self.listOfScripts = nil;
@@ -416,7 +456,9 @@
     [super viewDidUnload];
 }
 
--(void) dealloc {
+-(void) dealloc
+{
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
     releaseAndNil(listOfSchemes);
     releaseAndNil(listOfWeapons);
     releaseAndNil(listOfScripts);
--- a/project_files/HedgewarsMobile/Classes/ServerProtocolNetwork.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/ServerProtocolNetwork.m	Mon Nov 09 18:37:57 2015 +0100
@@ -69,20 +69,21 @@
 #pragma mark Communication layer
 -(int) sendToServer:(NSString *)command {
     NSString *message = [[NSString alloc] initWithFormat:@"%@\n\n",command];
-    int result = SDLNet_TCP_Send(self.ssd, [message UTF8String], [message length]);
+    int result = SDLNet_TCP_Send(self.ssd, [message UTF8String], [message lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
     [message release];
     return result;
 }
 
 -(int) sendToServer:(NSString *)command withArgument:(NSString *)argument {
     NSString *message = [[NSString alloc] initWithFormat:@"%@\n%@\n\n",command,argument];
-    int result = SDLNet_TCP_Send(self.ssd, [message UTF8String], [message length]);
+    int result = SDLNet_TCP_Send(self.ssd, [message UTF8String], [message lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
     [message release];
     return result;
 }
 
 -(void) serverProtocol {
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+    @autoreleasepool {
+    
     IPaddress ip;
     BOOL clientQuit = NO;
     char *buffer = (char *)malloc(sizeof(char)*BUFFER_SIZE);
@@ -206,7 +207,7 @@
     SDLNet_TCP_Close(self.ssd);
     SDLNet_Quit();
 
-    [pool release];
+    }
 }
 
 @end
--- a/project_files/HedgewarsMobile/Classes/SettingsBaseViewController.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SettingsBaseViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -19,29 +19,16 @@
 
 #import <UIKit/UIKit.h>
 
-
-@class GeneralSettingsViewController;
-@class TeamSettingsViewController;
-@class WeaponSettingsViewController;
-@class SchemeSettingsViewController;
-@class SupportViewController;
-
 @interface SettingsBaseViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, UITabBarControllerDelegate> {
     UIViewController *targetController;
     NSArray *controllerNames;
     NSIndexPath *lastIndexPath;
     UITabBarController *tabController;
-    GeneralSettingsViewController *generalSettingsViewController;
-    TeamSettingsViewController *teamSettingsViewController;
-    WeaponSettingsViewController *weaponSettingsViewController;
-    SchemeSettingsViewController *schemeSettingsViewController;
-    SupportViewController *supportViewController;
 }
 
 @property (nonatomic, retain) UIViewController *targetController;
 @property (nonatomic, retain) NSArray *controllerNames;
 @property (nonatomic, retain) NSIndexPath *lastIndexPath;
-@property (nonatomic, retain) UITabBarController *tabController;
 
 -(void) dismissSplitView;
 
--- a/project_files/HedgewarsMobile/Classes/SettingsBaseViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SettingsBaseViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -26,7 +26,7 @@
 
 
 @implementation SettingsBaseViewController
-@synthesize tabController, targetController, controllerNames, lastIndexPath;
+@synthesize targetController, controllerNames, lastIndexPath;
 
 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
     return rotationManager(interfaceOrientation);
@@ -45,105 +45,40 @@
     self.controllerNames = array;
     [array release];
 
-    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
-                                                                                target:self
-                                                                                action:@selector(dismissSplitView)];
-    if (IS_IPAD()) {
+    if (IS_IPAD())
+    {
         // this class gets loaded twice, we tell the difference by looking at targetController
-        if (self.targetController != nil) {
+        if (self.targetController != nil)
+        {
             UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
+            tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
             tableView.delegate = self;
             tableView.dataSource = self;
             [tableView reloadData];
             [self.view addSubview:tableView];
             [self tableView:tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
             [tableView release];
-            self.navigationItem.leftBarButtonItem = doneButton;
-        }
-    } else {
-        // this class just loads all controllers and set up tabbar and navigation controllers
-        NSMutableArray *tabBarNavigationControllers = [[NSMutableArray alloc] initWithCapacity:5];
-        UINavigationController *navController = nil;
-
-        if (nil == generalSettingsViewController) {
-            generalSettingsViewController = [[GeneralSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
-            generalSettingsViewController.tabBarItem.title = [self.controllerNames objectAtIndex:0];
-            generalSettingsViewController.tabBarItem.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/TargetBee.png",GRAPHICS_DIRECTORY()]];
-            navController = [[UINavigationController alloc] initWithRootViewController:generalSettingsViewController];
-            generalSettingsViewController.navigationItem.backBarButtonItem = doneButton;
-            generalSettingsViewController.navigationItem.leftBarButtonItem = doneButton;
-            [generalSettingsViewController release];
-            [tabBarNavigationControllers addObject:navController];
-            releaseAndNil(navController);
-        }
-        if (nil == teamSettingsViewController) {
-            teamSettingsViewController = [[TeamSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
-            teamSettingsViewController.tabBarItem.title = [self.controllerNames objectAtIndex:1];
-            teamSettingsViewController.tabBarItem.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/Egg.png",GRAPHICS_DIRECTORY()]];
-            navController = [[UINavigationController alloc] initWithRootViewController:teamSettingsViewController];
-            teamSettingsViewController.navigationItem.backBarButtonItem = doneButton;
-            teamSettingsViewController.navigationItem.leftBarButtonItem = doneButton;
-            [tabBarNavigationControllers addObject:navController];
-            releaseAndNil(navController);
+            self.navigationItem.leftBarButtonItem = [self doneButton];
         }
-        if (nil == weaponSettingsViewController) {
-            weaponSettingsViewController = [[WeaponSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
-            weaponSettingsViewController.tabBarItem.title = [self.controllerNames objectAtIndex:2];
-            weaponSettingsViewController.tabBarItem.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/cheese.png",GRAPHICS_DIRECTORY()]];
-            navController = [[UINavigationController alloc] initWithRootViewController:weaponSettingsViewController];
-            weaponSettingsViewController.navigationItem.backBarButtonItem = doneButton;
-            weaponSettingsViewController.navigationItem.leftBarButtonItem = doneButton;
-            [tabBarNavigationControllers addObject:navController];
-            releaseAndNil(navController);
-        }
-        if (nil == schemeSettingsViewController) {
-            schemeSettingsViewController = [[SchemeSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
-            schemeSettingsViewController.tabBarItem.title = [self.controllerNames objectAtIndex:3];
-            schemeSettingsViewController.tabBarItem.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/Targetp.png",GRAPHICS_DIRECTORY()]];
-            navController = [[UINavigationController alloc] initWithRootViewController:schemeSettingsViewController];
-            schemeSettingsViewController.navigationItem.backBarButtonItem = doneButton;
-            schemeSettingsViewController.navigationItem.leftBarButtonItem = doneButton;
-            [tabBarNavigationControllers addObject:navController];
-            releaseAndNil(navController);
-        }
-        if (nil == supportViewController) {
-            supportViewController = [[SupportViewController alloc] initWithStyle:UITableViewStyleGrouped];
-            supportViewController.tabBarItem.title = [self.controllerNames objectAtIndex:4];
-            supportViewController.tabBarItem.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/Seduction.png",GRAPHICS_DIRECTORY()]];
-            navController = [[UINavigationController alloc] initWithRootViewController:supportViewController];
-            supportViewController.navigationItem.backBarButtonItem = doneButton;
-            supportViewController.navigationItem.leftBarButtonItem = doneButton;
-            [tabBarNavigationControllers addObject:navController];
-            releaseAndNil(navController);
-        }
+    }
+    else
+    {
+        //iPhone part moved to MainMenuViewController
+    }
 
-        self.tabController = [[UITabBarController alloc] init];
-        self.tabController.viewControllers = tabBarNavigationControllers;
-        self.tabController.delegate = self;
-
-        [self.view addSubview:self.tabController.view];
-    }
-    [doneButton release];
     [super viewDidLoad];
 }
 
--(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
-    [viewController viewWillAppear:NO];
+- (UIBarButtonItem *)doneButton
+{
+    return [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
+                                                         target:self
+                                                         action:@selector(dismissSplitView)] autorelease];
 }
 
 -(void) dismissSplitView {
     [[AudioManagerController mainManager] playBackSound];
-    [[[HedgewarsAppDelegate sharedAppDelegate] mainViewController] dismissModalViewControllerAnimated:YES];
-}
-
--(void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
-    if (IS_IPAD() == NO)
-        return;
-
-    if (self.targetController != nil) {
-        CGRect screenRect = [[UIScreen mainScreen] safeBounds];
-        self.view.frame = CGRectMake(0, 0, 320, screenRect.size.height);
-    }
+    [[[HedgewarsAppDelegate sharedAppDelegate] mainViewController] dismissViewControllerAnimated:YES completion:nil];
 }
 
 #pragma mark -
@@ -197,40 +132,33 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    int newRow = [indexPath row];
-    int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
+-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    NSInteger newRow = [indexPath row];
+    NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
     UIViewController *nextController = nil;
 
-    if (newRow != oldRow) {
+    if (newRow != oldRow)
+    {
         [tableView deselectRowAtIndexPath:lastIndexPath animated:YES];
         [targetController.navigationController popToRootViewControllerAnimated:NO];
 
-        switch (newRow) {
+        switch (newRow)
+        {
             case 0:
-                if (nil == generalSettingsViewController)
-                    generalSettingsViewController = [[GeneralSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
-                nextController = generalSettingsViewController;
+                nextController = [[GeneralSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];;
                 break;
             case 1:
-                if (nil == teamSettingsViewController)
-                    teamSettingsViewController = [[TeamSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
-                nextController = teamSettingsViewController;
+                nextController = [[TeamSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
                 break;
             case 2:
-                if (nil == weaponSettingsViewController)
-                    weaponSettingsViewController = [[WeaponSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
-                nextController = weaponSettingsViewController;
+                nextController = [[WeaponSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
                 break;
             case 3:
-                if (nil == schemeSettingsViewController)
-                    schemeSettingsViewController = [[SchemeSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
-                nextController = schemeSettingsViewController;
+                nextController = [[SchemeSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
                 break;
             case 4:
-                if (nil == supportViewController)
-                    supportViewController = [[SupportViewController alloc] initWithStyle:UITableViewStyleGrouped];
-                nextController = supportViewController;
+                nextController = [[SupportViewController alloc] initWithStyle:UITableViewStyleGrouped];
                 break;
         }
 
@@ -240,6 +168,8 @@
         nextController.navigationItem.hidesBackButton = YES;
         [nextController viewWillAppear:NO];
         [targetController.navigationController pushViewController:nextController animated:NO];
+        [nextController release];
+        
         [[AudioManagerController mainManager] playClickSound];
     }
 }
@@ -247,62 +177,28 @@
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
-    if (generalSettingsViewController.view.superview == nil)
-        generalSettingsViewController = nil;
-    if (teamSettingsViewController.view.superview == nil)
-        teamSettingsViewController = nil;
-    if (weaponSettingsViewController.view.superview == nil)
-        weaponSettingsViewController = nil;
-    if (schemeSettingsViewController.view.superview == nil)
-        schemeSettingsViewController = nil;
-    if (supportViewController.view.superview == nil)
-        supportViewController = nil;
-    if (tabController.view.superview == nil)
-        tabController = nil;
+-(void) didReceiveMemoryWarning
+{
     MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
+-(void) viewDidUnload
+{
     self.controllerNames = nil;
     self.lastIndexPath = nil;
     self.targetController = nil;
-    self.tabController = nil;
-    generalSettingsViewController = nil;
-    teamSettingsViewController = nil;
-    weaponSettingsViewController = nil;
-    schemeSettingsViewController = nil;
-    supportViewController = nil;
     MSG_DIDUNLOAD();
     [super viewDidUnload];
 }
 
--(void) dealloc {
+-(void) dealloc
+{
     releaseAndNil(targetController);
     releaseAndNil(controllerNames);
     releaseAndNil(lastIndexPath);
-    releaseAndNil(tabController);
-    releaseAndNil(generalSettingsViewController);
-    releaseAndNil(teamSettingsViewController);
-    releaseAndNil(weaponSettingsViewController);
-    releaseAndNil(schemeSettingsViewController);
-    releaseAndNil(supportViewController);
     [super dealloc];
 }
 
-
--(void) viewWillDisappear:(BOOL)animated {
-    // this will send -viewWillDisappear: only the active view
-    [self.tabController viewWillDisappear:animated];
-    // let's send that to every page, even though only GeneralSettingsViewController needs it
-    [generalSettingsViewController viewWillDisappear:animated];
-    [teamSettingsViewController viewWillDisappear:animated];
-    [weaponSettingsViewController viewWillDisappear:animated];
-    [schemeSettingsViewController viewWillDisappear:animated];
-    [supportViewController viewWillDisappear:animated];
-    [super viewWillDisappear:animated];
-}
-
 @end
 
--- a/project_files/HedgewarsMobile/Classes/SettingsContainerViewController.h	Sun Apr 26 13:02:38 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- * Hedgewars-iOS, a Hedgewars port for iOS devices
- * Copyright (c) 2009-2012 Vittorio Giovara <vittorio.giovara@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
- */
-
-
-#import <UIKit/UIKit.h>
-
-
-@class SettingsBaseViewController;
-@class MGSplitViewController;
-
-@interface SettingsContainerViewController : UIViewController {
-    SettingsBaseViewController *baseController;
-    MGSplitViewController *splitViewRootController;
-}
-
-@property (nonatomic,retain) SettingsBaseViewController *baseController;
-@property (nonatomic,retain) MGSplitViewController *splitViewRootController;
-
-@end
--- a/project_files/HedgewarsMobile/Classes/SettingsContainerViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*
- * Hedgewars-iOS, a Hedgewars port for iOS devices
- * Copyright (c) 2009-2012 Vittorio Giovara <vittorio.giovara@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
- */
-
-
-#import "SettingsContainerViewController.h"
-#import "SettingsBaseViewController.h"
-#import "MGSplitViewController.h"
-
-
-@implementation SettingsContainerViewController
-@synthesize baseController, splitViewRootController;
-
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
-    return rotationManager(interfaceOrientation);
-}
-
--(void) viewDidLoad {
-    CGRect screenRect = [[UIScreen mainScreen] safeBounds];
-    self.view.frame = screenRect;
-
-    if (IS_IPAD()) {
-        // the contents on the right of the splitview, setting targetController to nil to avoid creating the table
-        SettingsBaseViewController *rightController = [[SettingsBaseViewController alloc] init];
-        rightController.targetController = nil;
-        UINavigationController *rightNavController = [[UINavigationController alloc] initWithRootViewController:rightController];
-        [rightController release];
-
-        // the contens on the left of the splitview, setting targetController that will receive push/pop actions
-        SettingsBaseViewController *leftController = [[SettingsBaseViewController alloc] init];
-        leftController.targetController = rightNavController.topViewController;
-        UINavigationController *leftNavController = [[UINavigationController alloc] initWithRootViewController:leftController];
-        [leftController release];
-
-        self.splitViewRootController = [[MGSplitViewController alloc] init];
-        self.splitViewRootController.delegate = nil;
-        self.splitViewRootController.view.frame = screenRect;
-        self.splitViewRootController.viewControllers = [NSArray arrayWithObjects: leftNavController, rightNavController, nil];
-        self.splitViewRootController.showsMasterInPortrait = YES;
-        [leftNavController release];
-        [rightNavController release];
-
-        // add view to main controller
-        [self.view addSubview:self.splitViewRootController.view];
-    } else {
-        if (nil == self.baseController) {
-            SettingsBaseViewController *sbvc = [[SettingsBaseViewController alloc] init];
-            self.baseController = sbvc;
-            [sbvc release];
-        }
-        self.baseController.targetController = nil;
-        self.baseController.view.frame = screenRect;
-
-        [self.view addSubview:self.baseController.view];
-    }
-
-    [super viewDidLoad];
-}
-
-#pragma mark -
-#pragma mark Memory management
--(void) didReceiveMemoryWarning {
-    if (self.baseController.view.superview == nil)
-        self.baseController = nil;
-    if (self.splitViewRootController.view.superview == nil)
-        self.splitViewRootController = nil;
-    MSG_MEMCLEAN();
-    [super didReceiveMemoryWarning];
-}
-
--(void) viewDidUnload {
-    self.baseController = nil;
-    self.splitViewRootController = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
--(void) dealloc {
-    releaseAndNil(baseController);
-    releaseAndNil(splitViewRootController);
-    [super dealloc];
-}
-
-
-#pragma mark -
-#pragma mark view event management propagation
-// every time we add a uiviewcontroller programmatically we need to take care of propgating such messages
-// see http://davidebenini.it/2009/01/03/viewwillappear-not-being-called-inside-a-uinavigationcontroller/
--(void) viewWillAppear:(BOOL)animated {
-    [self.splitViewRootController.detailViewController viewWillAppear:animated];
-    [self.baseController viewWillAppear:animated];
-    [super viewWillAppear:animated];
-}
-
--(void) viewWillDisappear:(BOOL)animated {
-    [self.splitViewRootController.detailViewController viewWillDisappear:animated];
-    [self.baseController viewWillDisappear:animated];
-    [super viewWillDisappear:animated];
-}
-
--(void) viewDidAppear:(BOOL)animated {
-    [self.splitViewRootController.detailViewController viewDidAppear:animated];
-    [self.baseController viewDidAppear:animated];
-    [super viewDidAppear:animated];
-}
-
--(void) viewDidDisappear:(BOOL)animated {
-    [self.splitViewRootController.detailViewController viewDidDisappear:animated];
-    [self.baseController viewDidDisappear:animated];
-    [super viewDidDisappear:animated];
-}
-
--(void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
-    [self.splitViewRootController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
-    [self.baseController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
-}
-
--(void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
-    [self.splitViewRootController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
-    [self.baseController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
-}
-
--(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
-    [self.splitViewRootController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
-    [self.baseController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
-}
-
-@end
--- a/project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -25,18 +25,6 @@
 #define SLIDER_TAG 54321
 #define SWITCH_TAG 67890
 
-#define checkValueString(detailString,labelSting,sliderRef); \
-    if ([labelSting isEqualToString:@"Turn Time"] && (NSInteger) sliderRef.value == 100) \
-        detailString = @"∞"; \
-    else if ([labelSting isEqualToString:@"Water Rise Amount"] && (NSInteger) sliderRef.value == 100) \
-        detailString = NSLocalizedString(@"Nvr",@"Short for 'Never'"); \
-    else if ([labelSting isEqualToString:@"Crate Drop Turns"] && (NSInteger) sliderRef.value == 0) \
-        detailString = NSLocalizedString(@"Nvr",@"Short for 'Never'"); \
-    else if ([labelSting isEqualToString:@"Mines Time"] && (NSInteger) sliderRef.value == -1) \
-        detailString = NSLocalizedString(@"Rnd",@"Short for 'Random'"); \
-    else \
-        detailString = [NSString stringWithFormat:@"%d",(NSInteger) sliderRef.value];
-
 
 @implementation SingleSchemeViewController
 @synthesize schemeName, schemeDictionary, basicSettingList, gameModifierArray;
@@ -190,7 +178,8 @@
             [img release];
 
             UILabel *cellLabel = (UILabel *)[cell.contentView viewWithTag:LABEL_TAG];
-            cellLabel.text = [[self.basicSettingList objectAtIndex:row] objectForKey:@"title"];
+            NSString *basicSettingTitleKey = [[self.basicSettingList objectAtIndex:row] objectForKey:@"title"];
+            cellLabel.text = NSLocalizedStringFromTable(basicSettingTitleKey, @"Scheme", nil);
             cellLabel.adjustsFontSizeToFitWidth = YES;
 
             // can't use the viewWithTag method because row is dynamic
@@ -220,8 +209,7 @@
             }
             cellSlider.frame = CGRectMake(hOffset, vOffset, sliderLength, 23);
 
-            NSString *prestring = nil;
-            checkValueString(prestring,cellLabel.text,cellSlider);
+            NSString *prestring = [self localizedValueStringForKey:basicSettingTitleKey andSlider:cellSlider];
 
             // forced to use this weird format otherwise the label disappears when size of the text is bigger than the original
             while ([prestring length] <= 4)
@@ -251,8 +239,10 @@
             [image release];
             cell.imageView.layer.cornerRadius = 6.0f;
             cell.imageView.layer.masksToBounds = YES;
-            cell.textLabel.text = [[self.gameModifierArray objectAtIndex:row] objectForKey:@"title"];
-            cell.detailTextLabel.text = [[self.gameModifierArray objectAtIndex:row] objectForKey:@"description"];
+            NSString *gameModTitleKey = [[self.gameModifierArray objectAtIndex:row] objectForKey:@"title"];
+            cell.textLabel.text = NSLocalizedStringFromTable(gameModTitleKey, @"Scheme", nil);
+            NSString *gameModDescKey = [[self.gameModifierArray objectAtIndex:row] objectForKey:@"description"];
+            cell.detailTextLabel.text = NSLocalizedStringFromTable(gameModDescKey, @"Scheme", nil);
             cell.detailTextLabel.adjustsFontSizeToFitWidth = YES;
             cell.detailTextLabel.minimumFontSize = 6;
 
@@ -277,14 +267,14 @@
     UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
     // grab the associated labels
     UILabel *detailLabel = (UILabel *)cell.detailTextLabel;
-    UILabel *cellLabel = (UILabel *)[cell.contentView viewWithTag:LABEL_TAG];
     // modify it
 
-    checkValueString(detailLabel.text,cellLabel.text,theSlider);
+    NSString *basicSettingTitleKey = [[self.basicSettingList objectAtIndex:[indexPath row]] objectForKey:@"title"];
+    detailLabel.text = [self localizedValueStringForKey:basicSettingTitleKey andSlider:theSlider];
 
     // save changes in the main array
     NSMutableArray *array = [self.schemeDictionary objectForKey:@"basic"];
-    [array replaceObjectAtIndex:theSlider.tag-SLIDER_TAG withObject:[NSNumber numberWithInt:(NSInteger) theSlider.value]];
+    [array replaceObjectAtIndex:theSlider.tag-SLIDER_TAG withObject:[NSNumber numberWithInteger:theSlider.value]];
 }
 
 #pragma mark -
@@ -345,6 +335,42 @@
         return 56;
 }
 
+#pragma mark - Helper methods
+
+- (NSString *)localizedValueStringForKey:(NSString *)keyString andSlider:(UISlider *)slider
+{
+    NSInteger sliderValue = (NSInteger)slider.value;
+    
+    if ([keyString isEqualToString:@"Turn Time"] && sliderValue == 100)
+        return @"∞";
+    else if ([keyString isEqualToString:@"Water Rise Amount"] && sliderValue == 100)
+        return NSLocalizedString(@"Nvr", @"Short for 'Never'");
+    else if ([keyString isEqualToString:@"Crate Drop Turns"] && sliderValue == 0)
+        return NSLocalizedString(@"Nvr", @"Short for 'Never'");
+    else if ([keyString isEqualToString:@"Mines Time"] && sliderValue == -1)
+        return NSLocalizedString(@"Rnd", @"Short for 'Random'");
+    else if ([keyString isEqualToString:@"World Edge"])
+        switch (sliderValue)
+        {
+            case 0:
+                return NSLocalizedString(@"None", nil);
+            
+            case 1:
+                return NSLocalizedString(@"Wrap", nil);
+                
+            case 2:
+                return NSLocalizedString(@"Bounce", nil);
+                
+            case 3:
+                return NSLocalizedString(@"Sea", nil);
+                
+            default:
+                return @"";
+        }
+    else
+        return [NSString stringWithFormat:@"%ld", (long)sliderValue];
+}
+
 #pragma mark -
 #pragma mark Memory management
 -(void) didReceiveMemoryWarning {
--- a/project_files/HedgewarsMobile/Classes/SingleTeamViewController.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SingleTeamViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -19,14 +19,6 @@
 
 #import <UIKit/UIKit.h>
 
-
-@class HogHatViewController;
-@class GravesViewController;
-@class VoicesViewController;
-@class FortsViewController;
-@class FlagsViewController;
-@class LevelViewController;
-
 @interface SingleTeamViewController : UITableViewController <EditableCellViewDelegate> {
     NSMutableDictionary *teamDictionary;
 
@@ -36,13 +28,6 @@
     NSArray *secondaryItems;
     NSArray *moreSecondaryItems;
     BOOL isWriteNeeded;
-
-    HogHatViewController *hogHatViewController;
-    GravesViewController *gravesViewController;
-    VoicesViewController *voicesViewController;
-    FortsViewController *fortsViewController;
-    FlagsViewController *flagsViewController;
-    LevelViewController *levelViewController;
 }
 
 @property (nonatomic,retain) NSMutableDictionary *teamDictionary;
--- a/project_files/HedgewarsMobile/Classes/SingleTeamViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SingleTeamViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -146,7 +146,7 @@
             rows = 1;
             break;
         case 1: // team members
-            rows = HW_getMaxNumberOfHogs();
+            rows = HW_getMaxNumberOfHogs() + 1; // one for 'Select one hat for all hogs' cell
             break;
         case 2: // team details
             rows = [self.secondaryItems count];
@@ -180,6 +180,7 @@
     static NSString *CellIdentifier0 = @"Cell0";
     static NSString *CellIdentifier1 = @"Cell1";
     static NSString *CellIdentifier2 = @"Cell2";
+    static NSString *CellIdentifierDefault = @"CellDefault";
 
     NSArray *hogArray;
     UITableViewCell *cell = nil;
@@ -204,13 +205,28 @@
             cell = editableCell;
             break;
         case 1:
+            if ([indexPath row] == HW_getMaxNumberOfHogs())
+            {
+                cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifierDefault];
+                if (cell == nil)
+                {
+                    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
+                                                   reuseIdentifier:CellIdentifierDefault] autorelease];
+                    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
+                }
+                
+                cell.textLabel.text = NSLocalizedString(@"Select one hat for all hogs", nil);
+                
+                break;
+            }
+            
             editableCell = (EditableCellView *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
             if (editableCell == nil) {
                 editableCell = [[[EditableCellView alloc] initWithStyle:UITableViewCellStyleDefault
                                                reuseIdentifier:CellIdentifier1] autorelease];
                 editableCell.delegate = self;
-                editableCell.tag = [indexPath row];
             }
+            editableCell.tag = [indexPath row];
 
             hogArray = [self.teamDictionary objectForKey:@"hedgehogs"];
 
@@ -290,120 +306,118 @@
     NSInteger row = [indexPath row];
     NSInteger section = [indexPath section];
 
-    if (2 == section) {
-        switch (row) {
+    if (2 == section)
+    {
+        switch (row)
+        {
             case 0: // grave
-                if (nil == gravesViewController)
-                    gravesViewController = [[GravesViewController alloc] initWithStyle:UITableViewStyleGrouped];
+            {
+                GravesViewController *gravesViewController = [[GravesViewController alloc] initWithStyle:UITableViewStyleGrouped];
 
                 [gravesViewController setTeamDictionary:teamDictionary];
                 [self.navigationController pushViewController:gravesViewController animated:YES];
+                [gravesViewController release];
                 break;
+            }
             case 1: // voice
-                if (nil == voicesViewController)
-                    voicesViewController = [[VoicesViewController alloc] initWithStyle:UITableViewStyleGrouped];
+            {
+                VoicesViewController *voicesViewController = [[VoicesViewController alloc] initWithStyle:UITableViewStyleGrouped];
 
                 [voicesViewController setTeamDictionary:teamDictionary];
                 [self.navigationController pushViewController:voicesViewController animated:YES];
+                [voicesViewController release];
                 break;
+            }
             case 2: // fort
-                if (nil == fortsViewController)
-                    fortsViewController = [[FortsViewController alloc] initWithStyle:UITableViewStyleGrouped];
+            {
+                FortsViewController *fortsViewController = [[FortsViewController alloc] initWithStyle:UITableViewStyleGrouped];
 
                 [fortsViewController setTeamDictionary:teamDictionary];
                 [self.navigationController pushViewController:fortsViewController animated:YES];
+                [fortsViewController release];
                 break;
+            }
             case 3: // flag
-                if (nil == flagsViewController)
-                    flagsViewController = [[FlagsViewController alloc] initWithStyle:UITableViewStyleGrouped];
+            {
+                FlagsViewController *flagsViewController = [[FlagsViewController alloc] initWithStyle:UITableViewStyleGrouped];
 
                 [flagsViewController setTeamDictionary:teamDictionary];
                 [self.navigationController pushViewController:flagsViewController animated:YES];
+                [flagsViewController release];
                 break;
+            }
             case 4: // level
-                if (nil == levelViewController)
-                    levelViewController = [[LevelViewController alloc] initWithStyle:UITableViewStyleGrouped];
+            {
+                LevelViewController *levelViewController = [[LevelViewController alloc] initWithStyle:UITableViewStyleGrouped];
 
                 [levelViewController setTeamDictionary:teamDictionary];
                 [self.navigationController pushViewController:levelViewController animated:YES];
+                [levelViewController release];
                 break;
+            }
             default:
                 DLog(@"Nope");
                 break;
         }
     } else {
-        EditableCellView *cell = (EditableCellView *)[aTableView cellForRowAtIndexPath:indexPath];
-        [cell replyKeyboard];
-        [aTableView deselectRowAtIndexPath:indexPath animated:NO];
+        if (section == 1 && row == HW_getMaxNumberOfHogs()) {
+            // 'Select one hat for all hogs' selected
+            [self showHogHatViewControllerForHogIndex:-1];
+        } else {
+            EditableCellView *cell = (EditableCellView *)[aTableView cellForRowAtIndexPath:indexPath];
+            [cell replyKeyboard];
+            [aTableView deselectRowAtIndexPath:indexPath animated:NO];
+        }
     }
 
 }
 
 // action to perform when you want to change a hog hat
 -(void) tableView:(UITableView *)aTableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
-    if (nil == hogHatViewController)
-        hogHatViewController = [[HogHatViewController alloc] initWithStyle:UITableViewStyleGrouped];
-
-    // cache the dictionary file of the team, so that other controllers can modify it
-    hogHatViewController.teamDictionary = self.teamDictionary;
-    hogHatViewController.selectedHog = [indexPath row];
-
     // if we are editing the field undo any change before proceeding
     EditableCellView *cell = (EditableCellView *)[aTableView cellForRowAtIndexPath:indexPath];
     [cell cancel:nil];
-
-    [self.navigationController pushViewController:hogHatViewController animated:YES];
+    
+    [self showHogHatViewControllerForHogIndex:[indexPath row]];
 }
 
+- (void)showHogHatViewControllerForHogIndex:(NSInteger)hogIndex
+{
+    HogHatViewController *hogHatViewController = [[HogHatViewController alloc] initWithStyle:UITableViewStyleGrouped];
+    
+    // cache the dictionary file of the team, so that other controllers can modify it
+    hogHatViewController.teamDictionary = self.teamDictionary;
+    hogHatViewController.selectedHog = hogIndex;
+    
+    [self.navigationController pushViewController:hogHatViewController animated:YES];
+    [hogHatViewController release];
+}
 
 #pragma mark -
 #pragma mark Memory management
 -(void) didReceiveMemoryWarning {
     [super didReceiveMemoryWarning];
-    if (hogHatViewController.view.superview == nil)
-        hogHatViewController = nil;
-    if (gravesViewController.view.superview == nil)
-        gravesViewController = nil;
-    if (voicesViewController.view.superview == nil)
-        voicesViewController = nil;
-    if (fortsViewController.view.superview == nil)
-        fortsViewController = nil;
-    if (flagsViewController.view.superview == nil)
-        flagsViewController = nil;
-    if (levelViewController.view.superview == nil)
-        levelViewController = nil;
     MSG_MEMCLEAN();
 }
 
 -(void) viewDidUnload {
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
     self.teamDictionary = nil;
     self.teamName = nil;
     self.normalHogSprite = nil;
     self.secondaryItems = nil;
     self.moreSecondaryItems = nil;
-    hogHatViewController = nil;
-    gravesViewController = nil;
-    voicesViewController = nil;
-    flagsViewController = nil;
-    fortsViewController = nil;
-    levelViewController = nil;
     MSG_DIDUNLOAD();
     [super viewDidUnload];
 }
 
--(void) dealloc {
+-(void) dealloc
+{
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
     releaseAndNil(teamDictionary);
     releaseAndNil(teamName);
     releaseAndNil(normalHogSprite);
     releaseAndNil(secondaryItems);
     releaseAndNil(moreSecondaryItems);
-    releaseAndNil(hogHatViewController);
-    releaseAndNil(gravesViewController);
-    releaseAndNil(fortsViewController);
-    releaseAndNil(voicesViewController);
-    releaseAndNil(flagsViewController);
-    releaseAndNil(levelViewController);
     [super dealloc];
 }
 
--- a/project_files/HedgewarsMobile/Classes/SingleWeaponViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SingleWeaponViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -19,6 +19,10 @@
 
 #import "SingleWeaponViewController.h"
 
+@interface SingleWeaponViewController ()
+@property (nonatomic, retain) NSString *trPath;
+@property (nonatomic, retain) NSString *trFileName;
+@end
 
 @implementation SingleWeaponViewController
 @synthesize weaponName, description, ammoStoreImage;
@@ -32,9 +36,10 @@
 -(void) viewDidLoad {
     [super viewDidLoad];
 
-    NSString *trFilePath = [NSString stringWithFormat:@"%@/%@.txt",LOCALE_DIRECTORY(),[[NSLocale preferredLanguages] objectAtIndex:0]];
+    self.trPath = [NSString stringWithFormat:@"%@", LOCALE_DIRECTORY()];
+    self.trFileName = [NSString stringWithFormat:@"%@.txt", [HWUtils languageID]];
     // fill the data structure that we are going to read
-    LoadLocaleWrapper([trFilePath UTF8String]);
+    LoadLocaleWrapper([self.trPath UTF8String], [self.trFileName UTF8String]);
 
     quantity = (char *)malloc(sizeof(char)*(HW_getNumberOfWeapons()+1));
     probability = (char *)malloc(sizeof(char)*(HW_getNumberOfWeapons()+1));
@@ -261,6 +266,9 @@
 
 
 -(void) dealloc {
+    releaseAndNil(_trPath);
+    releaseAndNil(_trFileName);
+    
     releaseAndNil(weaponName);
     releaseAndNil(description);
     releaseAndNil(ammoStoreImage);
--- a/project_files/HedgewarsMobile/Classes/SquareButtonView.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SquareButtonView.m	Mon Nov 09 18:37:57 2015 +0100
@@ -61,7 +61,7 @@
 -(void) selectColor:(NSUInteger) color {
     if (color != self.selectedColor) {
         self.selectedColor = color;
-        self.colorIndex = [self.colorArray indexOfObject:[NSNumber numberWithUnsignedInt:color]];
+        self.colorIndex = [self.colorArray indexOfObject:[NSNumber numberWithUnsignedInteger:color]];
 
         self.backgroundColor = [UIColor colorWithRed:((color & 0x00FF0000) >> 16)/255.0f
                                                green:((color & 0x0000FF00) >> 8)/255.0f
--- a/project_files/HedgewarsMobile/Classes/StatsPageViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/StatsPageViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -29,6 +29,7 @@
 
 -(void) viewDidLoad {
     UITableView *aTableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStyleGrouped];
+    aTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
     [aTableView setBackgroundColorForAnyTable:[UIColor clearColor]];
 
     NSString *imgName = (IS_IPAD()) ? @"mediumBackground~ipad.png" : @"smallerBackground~iphone.png";
@@ -44,13 +45,29 @@
     aTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
     aTableView.delegate = self;
     aTableView.dataSource = self;
-
+    
+    aTableView.rowHeight = 44;
+    
     [self.view addSubview:aTableView];
     [aTableView release];
 
     [super viewDidLoad];
 }
 
+#pragma mark - Helpers
+
+- (NSString *)teamNameFromInfo: (NSArray *)info
+{
+    NSString *teamName = [NSString stringWithString:[info objectAtIndex:2]];
+    
+    for (int i=3; i < [info count]; i++)
+    {
+        teamName = [teamName stringByAppendingFormat:@" %@", [info objectAtIndex:i]];
+    }
+    
+    return teamName;
+}
+
 #pragma mark -
 #pragma mark Table view data source
 -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
@@ -90,7 +107,7 @@
                                                    green:((color >> 8) & 0xFF)/255.0f
                                                     blue:(color & 0xFF)/255.0f
                                                    alpha:1.0f];
-        cell.textLabel.text = [NSString stringWithFormat:@"%d. %@ (%@ kills)", row+1, [info objectAtIndex:2], [info objectAtIndex:1]];
+        cell.textLabel.text = [NSString stringWithFormat:@"%d. %@ (%@ %@)", row+1, [self teamNameFromInfo:info], [info objectAtIndex:1], NSLocalizedString(@"kills", nil)];
         imgName = [NSString stringWithFormat:@"StatsMedal%d",row+1];
     } else if (section == 2) {  // general info
         imgName = @"iconDamage";
@@ -116,7 +133,7 @@
 }
 
 -(CGFloat) tableView:(UITableView *)aTableView heightForHeaderInSection:(NSInteger)section {
-    return 160;
+    return (section == 0) ? 160 : 40;
 }
 
 -(UIView *)tableView:(UITableView *)aTableView viewForHeaderInSection:(NSInteger)section {
@@ -162,7 +179,7 @@
 #pragma mark button delegate
 -(void) dismissView {
     [[AudioManagerController mainManager] playClickSound];
-    [self dismissModalViewControllerAnimated:YES];
+    [self dismissViewControllerAnimated:YES completion:nil];
 }
 
 #pragma mark -
--- a/project_files/HedgewarsMobile/Classes/SupportViewController.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SupportViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -18,9 +18,9 @@
 
 
 #import <UIKit/UIKit.h>
-
+#import "TableViewControllerWithDoneButton.h"
 
-@interface SupportViewController : UITableViewController {
+@interface SupportViewController : TableViewControllerWithDoneButton {
     NSArray *waysToSupport;
 }
 
--- a/project_files/HedgewarsMobile/Classes/SupportViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/SupportViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -18,7 +18,7 @@
 
 
 #import "SupportViewController.h"
-
+#import "Appirater.h"
 
 @implementation SupportViewController
 @synthesize waysToSupport;
@@ -95,6 +95,7 @@
                 DLog(@"No way");
                 break;
         }
+        cell.accessoryView = nil;
     }
 
     NSString *imgString = [[NSString alloc] initWithFormat:@"%@/%@.png",[[NSBundle mainBundle] resourcePath],imgName];
@@ -113,12 +114,17 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    NSString *urlString = nil;
+-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
     if ([indexPath section] == 0)
-        urlString = @"http://itunes.apple.com/us/app/hedgewars/id391234866?affC=QQABAAAAHgAFasEiWjVwUGZOc3k1VGctQkRJazlacXhUclpBTVpiU2xteVdfUQ%3D%3D#&mt=8";
+    {
+        [Appirater rateApp];
+    }
     else
-        switch ([indexPath row]) {
+    {
+        NSString *urlString = nil;
+        switch ([indexPath row])
+        {
             case 0:
                 urlString = @"http://www.facebook.com/Hedgewars";
                 break;
@@ -135,7 +141,8 @@
                 DLog(@"No way");
                 break;
         }
-    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
+        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
+    }
 }
 
 -(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger) section {
@@ -154,7 +161,7 @@
         UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 20)];
         label.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
         label.textAlignment = UITextAlignmentCenter;
-        label.text = @" ♥ THANK YOU ♥ ";
+        label.text = NSLocalizedString(@" ♥ THANK YOU ♥ ", nil);
         label.backgroundColor = [UIColor clearColor];
         label.center = CGPointMake(self.tableView.frame.size.width/2, 250);
         [footer addSubview:label];
@@ -167,7 +174,7 @@
 
 -(CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
     // image height + label height
-    return 265;
+    return (section == 1) ? 265 : 20;
 }
 
 #pragma mark -
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/TableViewControllerWithDoneButton.h	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,23 @@
+/*
+ * Hedgewars-iOS, a Hedgewars port for iOS devices
+ * Copyright (c) 2015 Anton Malmygin <antonc27@mail.ru>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface TableViewControllerWithDoneButton : UITableViewController
+
+@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/TableViewControllerWithDoneButton.m	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,52 @@
+/*
+ * Hedgewars-iOS, a Hedgewars port for iOS devices
+ * Copyright (c) 2015 Anton Malmygin <antonc27@mail.ru>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
+ */
+
+#import "TableViewControllerWithDoneButton.h"
+
+@interface TableViewControllerWithDoneButton ()
+
+@end
+
+@implementation TableViewControllerWithDoneButton
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+    
+    if (!IS_IPAD())
+    {
+        UIBarButtonItem *doneButton = [self doneButton];
+        self.navigationItem.backBarButtonItem = doneButton;
+        self.navigationItem.leftBarButtonItem = doneButton;
+    }
+}
+
+- (UIBarButtonItem *)doneButton
+{
+    return [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
+                                                          target:self
+                                                          action:@selector(dismissView)] autorelease];
+}
+
+- (void)dismissView
+{
+    [[AudioManagerController mainManager] playBackSound];
+    [[[HedgewarsAppDelegate sharedAppDelegate] mainViewController] dismissViewControllerAnimated:YES completion:nil];
+}
+
+@end
--- a/project_files/HedgewarsMobile/Classes/TeamConfigViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/TeamConfigViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -45,6 +45,8 @@
     } else {
         UIImage *backgroundImage = [[UIImage alloc] initWithContentsOfFile:@"background~iphone.png"];
         UIImageView *background = [[UIImageView alloc] initWithImage:backgroundImage];
+        background.contentMode = UIViewContentModeScaleAspectFill;
+        background.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
         [backgroundImage release];
         [self.view addSubview:background];
         [background release];
@@ -245,7 +247,7 @@
         SquareButtonView *squareButton = (SquareButtonView *)cell.accessoryView;
 
         NSInteger increaseNumber = [[selectedRow objectForKey:@"number"] intValue] + 1;
-        NSNumber *newNumber = [NSNumber numberWithInt:[self filterNumberOfHogs:increaseNumber]];
+        NSNumber *newNumber = [NSNumber numberWithInteger:[self filterNumberOfHogs:increaseNumber]];
         [squareButton setTitle:[newNumber stringValue] forState:UIControlStateNormal];
         [selectedRow setObject:newNumber forKey:@"number"];
 
--- a/project_files/HedgewarsMobile/Classes/TeamSettingsViewController.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/TeamSettingsViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -18,13 +18,10 @@
 
 
 #import <UIKit/UIKit.h>
-
-
-@class SingleTeamViewController;
+#import "TableViewControllerWithDoneButton.h"
 
-@interface TeamSettingsViewController : UITableViewController {
+@interface TeamSettingsViewController : TableViewControllerWithDoneButton {
     NSMutableArray *listOfTeams;
-    SingleTeamViewController *childController;
 }
 
 @property (nonatomic, retain) NSMutableArray *listOfTeams;
--- a/project_files/HedgewarsMobile/Classes/TeamSettingsViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/TeamSettingsViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -41,7 +41,7 @@
     self.navigationItem.rightBarButtonItem = editButton;
     [editButton release];
 
-    self.navigationItem.title = @"List of teams";
+    self.navigationItem.title = NSLocalizedString(@"List of teams", nil);
 }
 
 // load the list of teams in the teams directory
@@ -136,43 +136,43 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    if (childController == nil) {
-        childController = [[SingleTeamViewController alloc] initWithStyle:UITableViewStyleGrouped];
-    }
-
+-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    SingleTeamViewController *singleTeamViewController = [[SingleTeamViewController alloc] initWithStyle:UITableViewStyleGrouped];
+    
     NSInteger row = [indexPath row];
     NSString *selectedTeamFile = [listOfTeams objectAtIndex:row];
 
     // this must be set so childController can load the correct plist
-    childController.teamName = [selectedTeamFile stringByDeletingPathExtension];
-    [childController.tableView setContentOffset:CGPointMake(0,0) animated:NO];
+    singleTeamViewController.teamName = [selectedTeamFile stringByDeletingPathExtension];
+    [singleTeamViewController.tableView setContentOffset:CGPointMake(0,0) animated:NO];
 
-    [self.navigationController pushViewController:childController animated:YES];
+    [self.navigationController pushViewController:singleTeamViewController animated:YES];
+    [singleTeamViewController release];
+    
     [tableView deselectRowAtIndexPath:indexPath animated:YES];
 }
 
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
+-(void) didReceiveMemoryWarning
+{
     // Releases the view if it doesn't have a superview.
     [super didReceiveMemoryWarning];
     // Relinquish ownership any cached data, images, etc that aren't in use.
-    if (childController.view.superview == nil )
-        childController = nil;
 }
 
--(void) viewDidUnload {
+-(void) viewDidUnload
+{
     self.listOfTeams = nil;
-    childController = nil;
     MSG_DIDUNLOAD();
     [super viewDidUnload];
 }
 
--(void) dealloc {
+-(void) dealloc
+{
     releaseAndNil(listOfTeams);
-    releaseAndNil(childController);
     [super dealloc];
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/UITableViewCell+FindTable.h	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,25 @@
+/*
+ * Hedgewars-iOS, a Hedgewars port for iOS devices
+ * Copyright (c) 2015 Anton Malmygin <antonc27@mail.ru>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface UITableViewCell (FindTable)
+
+- (UITableView *)findTable;
+
+@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/UITableViewCell+FindTable.m	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,39 @@
+/*
+ * Hedgewars-iOS, a Hedgewars port for iOS devices
+ * Copyright (c) 2015 Anton Malmygin <antonc27@mail.ru>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#import "UITableViewCell+FindTable.h"
+
+@implementation UITableViewCell (FindTable)
+
+- (UITableView *)findTable
+{
+    UIView *tableView = self.superview;
+    while (![tableView isKindOfClass:[UITableView class]] || (tableView == nil))
+    {
+        tableView = tableView.superview;
+        
+        if ([tableView isEqual:self.window])
+        {
+            tableView = nil;
+        }
+    }
+    
+    return (UITableView *)tableView;
+}
+
+@end
--- a/project_files/HedgewarsMobile/Classes/VoicesViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/VoicesViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -32,7 +32,6 @@
 #pragma mark View lifecycle
 -(void) viewDidLoad {
     [super viewDidLoad];
-    srandom(time(NULL));
 
     voiceBeingPlayed = NULL;
 
@@ -104,8 +103,8 @@
 #pragma mark -
 #pragma mark Table view delegate
 -(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    int newRow = [indexPath row];
-    int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
+    NSInteger newRow = [indexPath row];
+    NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
 
     if (newRow != oldRow) {
         [teamDictionary setObject:[voiceArray objectAtIndex:newRow] forKey:@"voicepack"];
@@ -129,7 +128,7 @@
     NSString *voiceDir = [[NSString alloc] initWithFormat:@"%@/%@/",VOICES_DIRECTORY(),[voiceArray objectAtIndex:newRow]];
     NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:voiceDir error:NULL];
 
-    int index = random() % [array count];
+    int index = arc4random_uniform((int)[array count]);
 
     voiceBeingPlayed = Mix_LoadWAV([[voiceDir stringByAppendingString:[array objectAtIndex:index]] UTF8String]);
     [voiceDir release];
--- a/project_files/HedgewarsMobile/Classes/WeaponCellView.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/WeaponCellView.m	Mon Nov 09 18:37:57 2015 +0100
@@ -200,10 +200,10 @@
         crateLab.text = ((int)crateSli.value == 9) ? @"∞" : [NSString stringWithFormat:@"%d",(int)crateSli.value];
 
         [delegate updateValues:[NSArray arrayWithObjects:
-                                [NSNumber numberWithInt:(int)initialSli.value],
-                                [NSNumber numberWithInt:(int)probabilitySli.value],
-                                [NSNumber numberWithInt:(int)delaySli.value],
-                                [NSNumber numberWithInt:(int)crateSli.value], nil]
+                                [NSNumber numberWithInteger:initialSli.value],
+                                [NSNumber numberWithInteger:probabilitySli.value],
+                                [NSNumber numberWithInteger:delaySli.value],
+                                [NSNumber numberWithInteger:crateSli.value], nil]
                        atIndex:self.tag];
     } else
         DLog(@"error - delegate = nil!");
--- a/project_files/HedgewarsMobile/Classes/WeaponSettingsViewController.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/WeaponSettingsViewController.h	Mon Nov 09 18:37:57 2015 +0100
@@ -18,13 +18,10 @@
 
 
 #import <UIKit/UIKit.h>
-
-
-@class SingleWeaponViewController;
+#import "TableViewControllerWithDoneButton.h"
 
-@interface WeaponSettingsViewController : UITableViewController {
+@interface WeaponSettingsViewController : TableViewControllerWithDoneButton {
     NSMutableArray *listOfWeapons;
-    SingleWeaponViewController *childController;
 }
 
 @property (nonatomic, retain) NSMutableArray *listOfWeapons;
--- a/project_files/HedgewarsMobile/Classes/WeaponSettingsViewController.m	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Classes/WeaponSettingsViewController.m	Mon Nov 09 18:37:57 2015 +0100
@@ -40,7 +40,7 @@
     self.navigationItem.rightBarButtonItem = editButton;
     [editButton release];
 
-    self.navigationItem.title = @"List of weapons";
+    self.navigationItem.title = NSLocalizedString(@"List of weapons", nil);
 }
 
 -(void) viewWillAppear:(BOOL) animated {
@@ -131,42 +131,42 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    if (childController == nil) {
-        childController = [[SingleWeaponViewController alloc] initWithStyle:UITableViewStyleGrouped];
-    }
+-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    SingleWeaponViewController *singleWeaponViewController = [[SingleWeaponViewController alloc] initWithStyle:UITableViewStyleGrouped];
 
     NSInteger row = [indexPath row];
     NSString *selectedWeaponFile = [self.listOfWeapons objectAtIndex:row];
 
     // this must be set so childController can load the correct plist
-    childController.weaponName = [selectedWeaponFile stringByDeletingPathExtension];
-    [childController.tableView setContentOffset:CGPointMake(0,0) animated:NO];
+    singleWeaponViewController.weaponName = [selectedWeaponFile stringByDeletingPathExtension];
+    [singleWeaponViewController.tableView setContentOffset:CGPointMake(0,0) animated:NO];
 
-    [self.navigationController pushViewController:childController animated:YES];
+    [self.navigationController pushViewController:singleWeaponViewController animated:YES];
+    [singleWeaponViewController release];
+    
     [tableView deselectRowAtIndexPath:indexPath animated:YES];
 }
 
 
 #pragma mark -
 #pragma mark Memory management
--(void)didReceiveMemoryWarning {
+-(void)didReceiveMemoryWarning
+{
     [super didReceiveMemoryWarning];
-    if (childController.view.superview == nil )
-        childController = nil;
 }
 
--(void) viewDidUnload {
+-(void) viewDidUnload
+{
     self.listOfWeapons = nil;
-    childController = nil;
     MSG_DIDUNLOAD();
     [super viewDidUnload];
 }
 
 
--(void) dealloc {
+-(void) dealloc
+{
     releaseAndNil(listOfWeapons);
-    releaseAndNil(childController);
     [super dealloc];
 }
 
Binary file project_files/HedgewarsMobile/Default-568h@2x.png has changed
--- a/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj	Mon Nov 09 18:37:57 2015 +0100
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 45;
+	objectVersion = 46;
 	objects = {
 
 /* Begin PBXAggregateTarget section */
@@ -74,9 +74,9 @@
 		615AD9EB1207654E00F2FF04 /* helpButton.png in Resources */ = {isa = PBXBuildFile; fileRef = 615AD9EA1207654E00F2FF04 /* helpButton.png */; };
 		615BE3D4155C5DDF003CA34D /* uInputHandler.pas in Sources */ = {isa = PBXBuildFile; fileRef = 615BE3D3155C5DDF003CA34D /* uInputHandler.pas */; };
 		615E755A14E41E8C00FBA131 /* MXAudioPlayerFadeOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E755914E41E8C00FBA131 /* MXAudioPlayerFadeOperation.m */; };
-		615E76BC14E4421200FBA131 /* MGSplitCornersView.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E76B714E4421200FBA131 /* MGSplitCornersView.m */; };
-		615E76BD14E4421200FBA131 /* MGSplitDividerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E76B914E4421200FBA131 /* MGSplitDividerView.m */; };
-		615E76BE14E4421200FBA131 /* MGSplitViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E76BB14E4421200FBA131 /* MGSplitViewController.m */; };
+		615E76BC14E4421200FBA131 /* MGSplitCornersView.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E76B714E4421200FBA131 /* MGSplitCornersView.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; };
+		615E76BD14E4421200FBA131 /* MGSplitDividerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E76B914E4421200FBA131 /* MGSplitDividerView.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; };
+		615E76BE14E4421200FBA131 /* MGSplitViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E76BB14E4421200FBA131 /* MGSplitViewController.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; };
 		615FEAE212A2A6640098EE92 /* localplayButton~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 615FEADF12A2A6640098EE92 /* localplayButton~ipad.png */; };
 		615FEAE312A2A6640098EE92 /* localplayButton~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = 615FEAE012A2A6640098EE92 /* localplayButton~iphone.png */; };
 		616065A8159A71FD00CFAEF4 /* hwclassic.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 616065A7159A71FD00CFAEF4 /* hwclassic.mp3 */; };
@@ -96,7 +96,6 @@
 		6165921B11CA9BA200D6E256 /* SchemeWeaponConfigViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 616591FD11CA9BA200D6E256 /* SchemeWeaponConfigViewController.m */; };
 		6165921C11CA9BA200D6E256 /* SingleSchemeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 616591FF11CA9BA200D6E256 /* SingleSchemeViewController.m */; };
 		6165921D11CA9BA200D6E256 /* SingleTeamViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6165920111CA9BA200D6E256 /* SingleTeamViewController.m */; };
-		6165921E11CA9BA200D6E256 /* SettingsContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6165920311CA9BA200D6E256 /* SettingsContainerViewController.m */; };
 		6165921F11CA9BA200D6E256 /* TeamConfigViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6165920511CA9BA200D6E256 /* TeamConfigViewController.m */; };
 		6165922011CA9BA200D6E256 /* TeamSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6165920711CA9BA200D6E256 /* TeamSettingsViewController.m */; };
 		6165922111CA9BA200D6E256 /* VoicesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6165920911CA9BA200D6E256 /* VoicesViewController.m */; };
@@ -208,7 +207,6 @@
 		61A670C112747DB900B06CE7 /* MainMenuViewController-iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6165924C11CA9CB400D6E256 /* MainMenuViewController-iPhone.xib */; };
 		61A670C212747DBD00B06CE7 /* MapConfigViewController-iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6165924E11CA9CB400D6E256 /* MapConfigViewController-iPhone.xib */; };
 		61A976B3136F668500DD9878 /* uCursor.pas in Sources */ = {isa = PBXBuildFile; fileRef = 61A976B2136F668500DD9878 /* uCursor.pas */; };
-		61AC067412B2E32D000B52A2 /* Appirater.m in Sources */ = {isa = PBXBuildFile; fileRef = 61AC067312B2E32D000B52A2 /* Appirater.m */; };
 		61B37A1F17837C78009F283D /* ArgParsers.pas in Sources */ = {isa = PBXBuildFile; fileRef = 61B37A1D17837C78009F283D /* ArgParsers.pas */; };
 		61B37A2017837C78009F283D /* uVisualGearsList.pas in Sources */ = {isa = PBXBuildFile; fileRef = 61B37A1E17837C78009F283D /* uVisualGearsList.pas */; };
 		61B37A80178381DB009F283D /* uGearsHandlersMess.pas in Sources */ = {isa = PBXBuildFile; fileRef = 61B37A7F178381DB009F283D /* uGearsHandlersMess.pas */; };
@@ -244,6 +242,51 @@
 		61F9040B11DF59370068B24D /* background.png in Resources */ = {isa = PBXBuildFile; fileRef = 61F9040A11DF59370068B24D /* background.png */; };
 		61F904D711DF7DA30068B24D /* WeaponCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 61F904D611DF7DA30068B24D /* WeaponCellView.m */; };
 		922F64900F10F53100DC6EC0 /* libfpc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 928301170F10CAFC00CC5A3C /* libfpc.a */; };
+		F60D04771BD137B5003ACB00 /* bullet_filled.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04631BD137B5003ACB00 /* bullet_filled.png */; };
+		F60D04781BD137B5003ACB00 /* bullet_filled@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04641BD137B5003ACB00 /* bullet_filled@2x.png */; };
+		F60D04791BD137B5003ACB00 /* bullet.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04651BD137B5003ACB00 /* bullet.png */; };
+		F60D047A1BD137B5003ACB00 /* bullet@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04661BD137B5003ACB00 /* bullet@2x.png */; };
+		F60D047B1BD137B5003ACB00 /* flower_filled.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04671BD137B5003ACB00 /* flower_filled.png */; };
+		F60D047C1BD137B5003ACB00 /* flower_filled@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04681BD137B5003ACB00 /* flower_filled@2x.png */; };
+		F60D047D1BD137B5003ACB00 /* flower.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04691BD137B5003ACB00 /* flower.png */; };
+		F60D047E1BD137B5003ACB00 /* flower@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D046A1BD137B5003ACB00 /* flower@2x.png */; };
+		F60D047F1BD137B5003ACB00 /* heart_filled.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D046B1BD137B5003ACB00 /* heart_filled.png */; };
+		F60D04801BD137B5003ACB00 /* heart_filled@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D046C1BD137B5003ACB00 /* heart_filled@2x.png */; };
+		F60D04811BD137B5003ACB00 /* heart.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D046D1BD137B5003ACB00 /* heart.png */; };
+		F60D04821BD137B5003ACB00 /* heart@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D046E1BD137B5003ACB00 /* heart@2x.png */; };
+		F60D04831BD137B5003ACB00 /* target_filled.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D046F1BD137B5003ACB00 /* target_filled.png */; };
+		F60D04841BD137B5003ACB00 /* target_filled@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04701BD137B5003ACB00 /* target_filled@2x.png */; };
+		F60D04851BD137B5003ACB00 /* target.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04711BD137B5003ACB00 /* target.png */; };
+		F60D04861BD137B5003ACB00 /* target@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04721BD137B5003ACB00 /* target@2x.png */; };
+		F60D04871BD137B5003ACB00 /* teams_filled.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04731BD137B5003ACB00 /* teams_filled.png */; };
+		F60D04881BD137B5003ACB00 /* teams_filled@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04741BD137B5003ACB00 /* teams_filled@2x.png */; };
+		F60D04891BD137B5003ACB00 /* teams.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04751BD137B5003ACB00 /* teams.png */; };
+		F60D048A1BD137B5003ACB00 /* teams@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04761BD137B5003ACB00 /* teams@2x.png */; };
+		F6448CE31BD2E00500C31C8C /* TableViewControllerWithDoneButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F6448CE21BD2E00500C31C8C /* TableViewControllerWithDoneButton.m */; };
+		F65724FD1B7E784700A86262 /* helpabove.png in Resources */ = {isa = PBXBuildFile; fileRef = F65724F81B7E784700A86262 /* helpabove.png */; };
+		F65724FE1B7E784700A86262 /* helpbottom.png in Resources */ = {isa = PBXBuildFile; fileRef = F65724F91B7E784700A86262 /* helpbottom.png */; };
+		F65724FF1B7E784700A86262 /* helpleft.png in Resources */ = {isa = PBXBuildFile; fileRef = F65724FA1B7E784700A86262 /* helpleft.png */; };
+		F65725001B7E784700A86262 /* helpplain.png in Resources */ = {isa = PBXBuildFile; fileRef = F65724FB1B7E784700A86262 /* helpplain.png */; };
+		F65725011B7E784700A86262 /* helpright.png in Resources */ = {isa = PBXBuildFile; fileRef = F65724FC1B7E784700A86262 /* helpright.png */; };
+		F65E1DBF1B9B95A400A78ADF /* Icon-60@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F65E1DBC1B9B95A400A78ADF /* Icon-60@2x.png */; };
+		F65E1DC01B9B95A400A78ADF /* Icon-76.png in Resources */ = {isa = PBXBuildFile; fileRef = F65E1DBD1B9B95A400A78ADF /* Icon-76.png */; };
+		F65E1DC11B9B95A400A78ADF /* Icon-76@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F65E1DBE1B9B95A400A78ADF /* Icon-76@2x.png */; };
+		F6756D801BD8550500B6AB6B /* LabelWithIBLocalization.m in Sources */ = {isa = PBXBuildFile; fileRef = F6756D7F1BD8550500B6AB6B /* LabelWithIBLocalization.m */; };
+		F67FC8121BEC06E700A9DC75 /* Appirater.m in Sources */ = {isa = PBXBuildFile; fileRef = F67FC8101BEC06E700A9DC75 /* Appirater.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; };
+		F67FC8141BEC072B00A9DC75 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F67FC8131BEC072B00A9DC75 /* StoreKit.framework */; };
+		F67FC8161BEC17AC00A9DC75 /* Appirater.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F67FC8151BEC17AC00A9DC75 /* Appirater.bundle */; };
+		F6BA38461BA7A834005D16EA /* GameLogViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BA38451BA7A834005D16EA /* GameLogViewController.m */; };
+		F6D7E09F1B76884E004F3BCF /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F6D7E09E1B76884E004F3BCF /* Default-568h@2x.png */; };
+		F6D7E0C21B768F19004F3BCF /* uLandGenPerlin.pas in Sources */ = {isa = PBXBuildFile; fileRef = F6D7E0BF1B768F19004F3BCF /* uLandGenPerlin.pas */; };
+		F6D7E0C31B768F19004F3BCF /* uLandGenTemplateBased.pas in Sources */ = {isa = PBXBuildFile; fileRef = F6D7E0C01B768F19004F3BCF /* uLandGenTemplateBased.pas */; };
+		F6D7E0C41B768F19004F3BCF /* uLandUtils.pas in Sources */ = {isa = PBXBuildFile; fileRef = F6D7E0C11B768F19004F3BCF /* uLandUtils.pas */; };
+		F6D7E0C61B769819004F3BCF /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6D7E0C51B769819004F3BCF /* CoreMotion.framework */; };
+		F6D7E0C81B7698BF004F3BCF /* libstdc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F6D7E0C71B7698BE004F3BCF /* libstdc++.dylib */; };
+		F6F07BDE1B7E72D40010E48F /* HelpPageLobbyViewController-iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6F07BDA1B7E72D40010E48F /* HelpPageLobbyViewController-iPad.xib */; };
+		F6F07BDF1B7E72D40010E48F /* HelpPageLobbyViewController-iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6F07BDB1B7E72D40010E48F /* HelpPageLobbyViewController-iPhone.xib */; };
+		F6F07BE01B7E72D40010E48F /* HelpPageLobbyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6F07BDD1B7E72D40010E48F /* HelpPageLobbyViewController.m */; };
+		F6F7DA8F1BE18F5700432EA7 /* UITableViewCell+FindTable.m in Sources */ = {isa = PBXBuildFile; fileRef = F6F7DA8E1BE18F5700432EA7 /* UITableViewCell+FindTable.m */; };
+		F6FF25A21BB8AEE300124053 /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6FF25A11BB8AEE300124053 /* GameController.framework */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXBuildRule section */
@@ -416,9 +459,6 @@
 		61177BA7148A658900686905 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = German; path = Locale/German.lproj/Localizable.strings; sourceTree = "<group>"; };
 		61177BA9148A660C00686905 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = German; path = Locale/German.lproj/Scheme.strings; sourceTree = "<group>"; };
 		61177BAA148A661600686905 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = German; path = Locale/German.lproj/About.strings; sourceTree = "<group>"; };
-		61177BAC148A671600686905 /* Turkish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Turkish; path = Locale/Turkish.lproj/About.strings; sourceTree = "<group>"; };
-		61177BAD148A672000686905 /* Turkish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Turkish; path = Locale/Turkish.lproj/Localizable.strings; sourceTree = "<group>"; };
-		61177BAE148A672C00686905 /* Turkish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Turkish; path = Locale/Turkish.lproj/Scheme.strings; sourceTree = "<group>"; };
 		61177BE4148B881C00686905 /* Danish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Danish; path = Locale/Danish.lproj/About.strings; sourceTree = "<group>"; };
 		61177BF0148B882500686905 /* Danish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Danish; path = Locale/Danish.lproj/Localizable.strings; sourceTree = "<group>"; };
 		61177BF1148B882F00686905 /* Danish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Danish; path = Locale/Danish.lproj/Scheme.strings; sourceTree = "<group>"; };
@@ -493,8 +533,6 @@
 		616591FF11CA9BA200D6E256 /* SingleSchemeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SingleSchemeViewController.m; sourceTree = "<group>"; };
 		6165920011CA9BA200D6E256 /* SingleTeamViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SingleTeamViewController.h; sourceTree = "<group>"; };
 		6165920111CA9BA200D6E256 /* SingleTeamViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SingleTeamViewController.m; sourceTree = "<group>"; };
-		6165920211CA9BA200D6E256 /* SettingsContainerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsContainerViewController.h; sourceTree = "<group>"; };
-		6165920311CA9BA200D6E256 /* SettingsContainerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingsContainerViewController.m; sourceTree = "<group>"; };
 		6165920411CA9BA200D6E256 /* TeamConfigViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TeamConfigViewController.h; sourceTree = "<group>"; };
 		6165920511CA9BA200D6E256 /* TeamConfigViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TeamConfigViewController.m; sourceTree = "<group>"; };
 		6165920611CA9BA200D6E256 /* TeamSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TeamSettingsViewController.h; sourceTree = "<group>"; };
@@ -638,8 +676,6 @@
 		61A4A39312A5CCC2004D81E6 /* uVariables.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uVariables.pas; path = ../../hedgewars/uVariables.pas; sourceTree = SOURCE_ROOT; };
 		61A4A3A112A5CD56004D81E6 /* uCaptions.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uCaptions.pas; path = ../../hedgewars/uCaptions.pas; sourceTree = SOURCE_ROOT; };
 		61A976B2136F668500DD9878 /* uCursor.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uCursor.pas; path = ../../hedgewars/uCursor.pas; sourceTree = SOURCE_ROOT; };
-		61AC067212B2E32D000B52A2 /* Appirater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Appirater.h; path = Classes/Appirater.h; sourceTree = "<group>"; };
-		61AC067312B2E32D000B52A2 /* Appirater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Appirater.m; path = Classes/Appirater.m; sourceTree = "<group>"; };
 		61B37A1D17837C78009F283D /* ArgParsers.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = ArgParsers.pas; path = ../../hedgewars/ArgParsers.pas; sourceTree = SOURCE_ROOT; };
 		61B37A1E17837C78009F283D /* uVisualGearsList.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uVisualGearsList.pas; path = ../../hedgewars/uVisualGearsList.pas; sourceTree = SOURCE_ROOT; };
 		61B37A7F178381DB009F283D /* uGearsHandlersMess.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uGearsHandlersMess.pas; path = ../../hedgewars/uGearsHandlersMess.pas; sourceTree = SOURCE_ROOT; };
@@ -695,6 +731,64 @@
 		61F904D611DF7DA30068B24D /* WeaponCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WeaponCellView.m; path = Classes/WeaponCellView.m; sourceTree = "<group>"; };
 		8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		928301170F10CAFC00CC5A3C /* libfpc.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libfpc.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		F60D04631BD137B5003ACB00 /* bullet_filled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = bullet_filled.png; path = Resources/Icons/bullet_filled.png; sourceTree = "<group>"; };
+		F60D04641BD137B5003ACB00 /* bullet_filled@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "bullet_filled@2x.png"; path = "Resources/Icons/bullet_filled@2x.png"; sourceTree = "<group>"; };
+		F60D04651BD137B5003ACB00 /* bullet.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = bullet.png; path = Resources/Icons/bullet.png; sourceTree = "<group>"; };
+		F60D04661BD137B5003ACB00 /* bullet@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "bullet@2x.png"; path = "Resources/Icons/bullet@2x.png"; sourceTree = "<group>"; };
+		F60D04671BD137B5003ACB00 /* flower_filled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = flower_filled.png; path = Resources/Icons/flower_filled.png; sourceTree = "<group>"; };
+		F60D04681BD137B5003ACB00 /* flower_filled@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "flower_filled@2x.png"; path = "Resources/Icons/flower_filled@2x.png"; sourceTree = "<group>"; };
+		F60D04691BD137B5003ACB00 /* flower.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = flower.png; path = Resources/Icons/flower.png; sourceTree = "<group>"; };
+		F60D046A1BD137B5003ACB00 /* flower@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "flower@2x.png"; path = "Resources/Icons/flower@2x.png"; sourceTree = "<group>"; };
+		F60D046B1BD137B5003ACB00 /* heart_filled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = heart_filled.png; path = Resources/Icons/heart_filled.png; sourceTree = "<group>"; };
+		F60D046C1BD137B5003ACB00 /* heart_filled@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "heart_filled@2x.png"; path = "Resources/Icons/heart_filled@2x.png"; sourceTree = "<group>"; };
+		F60D046D1BD137B5003ACB00 /* heart.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = heart.png; path = Resources/Icons/heart.png; sourceTree = "<group>"; };
+		F60D046E1BD137B5003ACB00 /* heart@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "heart@2x.png"; path = "Resources/Icons/heart@2x.png"; sourceTree = "<group>"; };
+		F60D046F1BD137B5003ACB00 /* target_filled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = target_filled.png; path = Resources/Icons/target_filled.png; sourceTree = "<group>"; };
+		F60D04701BD137B5003ACB00 /* target_filled@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "target_filled@2x.png"; path = "Resources/Icons/target_filled@2x.png"; sourceTree = "<group>"; };
+		F60D04711BD137B5003ACB00 /* target.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = target.png; path = Resources/Icons/target.png; sourceTree = "<group>"; };
+		F60D04721BD137B5003ACB00 /* target@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "target@2x.png"; path = "Resources/Icons/target@2x.png"; sourceTree = "<group>"; };
+		F60D04731BD137B5003ACB00 /* teams_filled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = teams_filled.png; path = Resources/Icons/teams_filled.png; sourceTree = "<group>"; };
+		F60D04741BD137B5003ACB00 /* teams_filled@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "teams_filled@2x.png"; path = "Resources/Icons/teams_filled@2x.png"; sourceTree = "<group>"; };
+		F60D04751BD137B5003ACB00 /* teams.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = teams.png; path = Resources/Icons/teams.png; sourceTree = "<group>"; };
+		F60D04761BD137B5003ACB00 /* teams@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "teams@2x.png"; path = "Resources/Icons/teams@2x.png"; sourceTree = "<group>"; };
+		F6448CE11BD2E00500C31C8C /* TableViewControllerWithDoneButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TableViewControllerWithDoneButton.h; sourceTree = "<group>"; };
+		F6448CE21BD2E00500C31C8C /* TableViewControllerWithDoneButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TableViewControllerWithDoneButton.m; sourceTree = "<group>"; };
+		F65724F81B7E784700A86262 /* helpabove.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = helpabove.png; sourceTree = "<group>"; };
+		F65724F91B7E784700A86262 /* helpbottom.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = helpbottom.png; sourceTree = "<group>"; };
+		F65724FA1B7E784700A86262 /* helpleft.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = helpleft.png; sourceTree = "<group>"; };
+		F65724FB1B7E784700A86262 /* helpplain.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = helpplain.png; sourceTree = "<group>"; };
+		F65724FC1B7E784700A86262 /* helpright.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = helpright.png; sourceTree = "<group>"; };
+		F65725291B7EB9CC00A86262 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = Locale/ru.lproj/About.strings; sourceTree = "<group>"; };
+		F657252A1B7EB9CC00A86262 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = Locale/ru.lproj/Localizable.strings; sourceTree = "<group>"; };
+		F657252B1B7EB9CC00A86262 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = Locale/ru.lproj/Scheme.strings; sourceTree = "<group>"; };
+		F65E1DBC1B9B95A400A78ADF /* Icon-60@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-60@2x.png"; path = "Resources/Icons/Icon-60@2x.png"; sourceTree = "<group>"; };
+		F65E1DBD1B9B95A400A78ADF /* Icon-76.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-76.png"; path = "Resources/Icons/Icon-76.png"; sourceTree = "<group>"; };
+		F65E1DBE1B9B95A400A78ADF /* Icon-76@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-76@2x.png"; path = "Resources/Icons/Icon-76@2x.png"; sourceTree = "<group>"; };
+		F6756D7E1BD8550500B6AB6B /* LabelWithIBLocalization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LabelWithIBLocalization.h; sourceTree = "<group>"; };
+		F6756D7F1BD8550500B6AB6B /* LabelWithIBLocalization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LabelWithIBLocalization.m; sourceTree = "<group>"; };
+		F67FC80F1BEC06E700A9DC75 /* Appirater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Appirater.h; sourceTree = "<group>"; };
+		F67FC8101BEC06E700A9DC75 /* Appirater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Appirater.m; sourceTree = "<group>"; };
+		F67FC8111BEC06E700A9DC75 /* AppiraterDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppiraterDelegate.h; sourceTree = "<group>"; };
+		F67FC8131BEC072B00A9DC75 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
+		F67FC8151BEC17AC00A9DC75 /* Appirater.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Appirater.bundle; sourceTree = "<group>"; };
+		F67FC81F1BEC280D00A9DC75 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Locale/tr.lproj/About.strings; sourceTree = "<group>"; };
+		F67FC8201BEC280D00A9DC75 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Locale/tr.lproj/Localizable.strings; sourceTree = "<group>"; };
+		F67FC8211BEC280D00A9DC75 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Locale/tr.lproj/Scheme.strings; sourceTree = "<group>"; };
+		F6BA38441BA7A834005D16EA /* GameLogViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameLogViewController.h; sourceTree = "<group>"; };
+		F6BA38451BA7A834005D16EA /* GameLogViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GameLogViewController.m; sourceTree = "<group>"; };
+		F6D7E09E1B76884E004F3BCF /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
+		F6D7E0BF1B768F19004F3BCF /* uLandGenPerlin.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uLandGenPerlin.pas; path = ../../hedgewars/uLandGenPerlin.pas; sourceTree = "<group>"; };
+		F6D7E0C01B768F19004F3BCF /* uLandGenTemplateBased.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uLandGenTemplateBased.pas; path = ../../hedgewars/uLandGenTemplateBased.pas; sourceTree = "<group>"; };
+		F6D7E0C11B768F19004F3BCF /* uLandUtils.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uLandUtils.pas; path = ../../hedgewars/uLandUtils.pas; sourceTree = "<group>"; };
+		F6D7E0C51B769819004F3BCF /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; };
+		F6D7E0C71B7698BE004F3BCF /* libstdc++.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libstdc++.dylib"; path = "usr/lib/libstdc++.dylib"; sourceTree = SDKROOT; };
+		F6F07BDA1B7E72D40010E48F /* HelpPageLobbyViewController-iPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "HelpPageLobbyViewController-iPad.xib"; sourceTree = "<group>"; };
+		F6F07BDB1B7E72D40010E48F /* HelpPageLobbyViewController-iPhone.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "HelpPageLobbyViewController-iPhone.xib"; sourceTree = "<group>"; };
+		F6F07BDC1B7E72D40010E48F /* HelpPageLobbyViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HelpPageLobbyViewController.h; sourceTree = "<group>"; };
+		F6F07BDD1B7E72D40010E48F /* HelpPageLobbyViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HelpPageLobbyViewController.m; sourceTree = "<group>"; };
+		F6F7DA8D1BE18F5700432EA7 /* UITableViewCell+FindTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UITableViewCell+FindTable.h"; path = "Classes/UITableViewCell+FindTable.h"; sourceTree = "<group>"; };
+		F6F7DA8E1BE18F5700432EA7 /* UITableViewCell+FindTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UITableViewCell+FindTable.m"; path = "Classes/UITableViewCell+FindTable.m"; sourceTree = "<group>"; };
+		F6FF25A11BB8AEE300124053 /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -702,6 +796,10 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				F67FC8141BEC072B00A9DC75 /* StoreKit.framework in Frameworks */,
+				F6FF25A21BB8AEE300124053 /* GameController.framework in Frameworks */,
+				F6D7E0C81B7698BF004F3BCF /* libstdc++.dylib in Frameworks */,
+				F6D7E0C61B769819004F3BCF /* CoreMotion.framework in Frameworks */,
 				617D791E16D933060091D4D6 /* libPhysfs.a in Frameworks */,
 				617D795716D9345F0091D4D6 /* libPhyslayer.a in Frameworks */,
 				922F64900F10F53100DC6EC0 /* libfpc.a in Frameworks */,
@@ -779,8 +877,7 @@
 				61F8535314578999002CA294 /* Helpers */,
 				61641FE21437CD8F006E049C /* Headers */,
 				61DE91561258B76800B80214 /* Custom UIs */,
-				61AC067212B2E32D000B52A2 /* Appirater.h */,
-				61AC067312B2E32D000B52A2 /* Appirater.m */,
+				F67FC80E1BEC06E700A9DC75 /* Appirater */,
 				61006F93128DE31F00EBA7F7 /* CreationChamber.h */,
 				61006F94128DE31F00EBA7F7 /* CreationChamber.m */,
 				6165929C11CA9E2F00D6E256 /* HedgewarsAppDelegate.h */,
@@ -794,6 +891,7 @@
 		29B97317FDCFA39411CA2CEA /* Resources */ = {
 			isa = PBXGroup;
 			children = (
+				F6D7E09E1B76884E004F3BCF /* Default-568h@2x.png */,
 				6129B9F611EFB04D0017E305 /* denied.png */,
 				6167C88B14294738003DD50F /* denied@2x.png */,
 				6199E86C12464A8E00DADF8C /* surprise.png */,
@@ -814,6 +912,8 @@
 		29B97323FDCFA39411CA2CEA /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				F67FC8131BEC072B00A9DC75 /* StoreKit.framework */,
+				F6FF25A11BB8AEE300124053 /* GameController.framework */,
 				617D78D816D932310091D4D6 /* Physfs.xcodeproj */,
 				617D794316D933B00091D4D6 /* Physlayer.xcodeproj */,
 				6195993F1364C82B00B429B6 /* Lua.xcodeproj */,
@@ -822,6 +922,7 @@
 				61A19C1E14D20F51004B1E6D /* SDL_mixer.xcodeproj */,
 				61A19BF414D20D83004B1E6D /* SDL_net.xcodeproj */,
 				61A19BC114D20CDA004B1E6D /* SDL_ttf.xcodeproj */,
+				F6D7E0C71B7698BE004F3BCF /* libstdc++.dylib */,
 				61798934114AB25F00BA94A9 /* AudioToolbox.framework */,
 				612CABAA1391CE68005E9596 /* AVFoundation.framework */,
 				61A117FE1168322700359010 /* CoreGraphics.framework */,
@@ -833,6 +934,7 @@
 				61272338117DF778005B90CF /* MobileCoreServices.framework */,
 				6199E81512463EA800DADF8C /* CFNetwork.framework */,
 				6199E81912463EC400DADF8C /* SystemConfiguration.framework */,
+				F6D7E0C51B769819004F3BCF /* CoreMotion.framework */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -853,6 +955,8 @@
 				61F2E7CB1205EDE0005734F7 /* AboutViewController.h */,
 				61F2E7CC1205EDE0005734F7 /* AboutViewController.m */,
 				61F2E7CD1205EDE0005734F7 /* AboutViewController.xib */,
+				F6BA38441BA7A834005D16EA /* GameLogViewController.h */,
+				F6BA38451BA7A834005D16EA /* GameLogViewController.m */,
 				6167A6731391514600AA6D07 /* RestoreViewController.h */,
 				6167A6741391514600AA6D07 /* RestoreViewController.m */,
 				6167A6751391514600AA6D07 /* RestoreViewController-iPhone.xib */,
@@ -898,8 +1002,6 @@
 		6163EE4C11CC2478001C0453 /* Settings Page */ = {
 			isa = PBXGroup;
 			children = (
-				6165920211CA9BA200D6E256 /* SettingsContainerViewController.h */,
-				6165920311CA9BA200D6E256 /* SettingsContainerViewController.m */,
 				616591F411CA9BA200D6E256 /* SettingsBaseViewController.h */,
 				616591F511CA9BA200D6E256 /* SettingsBaseViewController.m */,
 				6163EE4E11CC248D001C0453 /* First Level */,
@@ -924,6 +1026,12 @@
 				616591F311CA9BA200D6E256 /* MapConfigViewController.m */,
 				6165924D11CA9CB400D6E256 /* MapConfigViewController-iPad.xib */,
 				6165924E11CA9CB400D6E256 /* MapConfigViewController-iPhone.xib */,
+				F6F07BDC1B7E72D40010E48F /* HelpPageLobbyViewController.h */,
+				F6F07BDD1B7E72D40010E48F /* HelpPageLobbyViewController.m */,
+				F6F07BDA1B7E72D40010E48F /* HelpPageLobbyViewController-iPad.xib */,
+				F6F07BDB1B7E72D40010E48F /* HelpPageLobbyViewController-iPhone.xib */,
+				F6756D7E1BD8550500B6AB6B /* LabelWithIBLocalization.h */,
+				F6756D7F1BD8550500B6AB6B /* LabelWithIBLocalization.m */,
 			);
 			name = "Game Configuration";
 			sourceTree = "<group>";
@@ -931,6 +1039,8 @@
 		6163EE4E11CC248D001C0453 /* First Level */ = {
 			isa = PBXGroup;
 			children = (
+				F6448CE11BD2E00500C31C8C /* TableViewControllerWithDoneButton.h */,
+				F6448CE21BD2E00500C31C8C /* TableViewControllerWithDoneButton.m */,
 				616591E811CA9BA200D6E256 /* GeneralSettingsViewController.h */,
 				616591E911CA9BA200D6E256 /* GeneralSettingsViewController.m */,
 				6165920611CA9BA200D6E256 /* TeamSettingsViewController.h */,
@@ -1069,6 +1179,8 @@
 				619C5BA0124FA59000D041AE /* MapPreviewButtonView.h */,
 				619C5BA1124FA59000D041AE /* MapPreviewButtonView.m */,
 				61F544C512AF1748007FD913 /* HoldTableViewCell.h */,
+				F6F7DA8D1BE18F5700432EA7 /* UITableViewCell+FindTable.h */,
+				F6F7DA8E1BE18F5700432EA7 /* UITableViewCell+FindTable.m */,
 				61F544C612AF1748007FD913 /* HoldTableViewCell.m */,
 				6165922A11CA9BD500D6E256 /* SquareButtonView.h */,
 				6165922B11CA9BD500D6E256 /* SquareButtonView.m */,
@@ -1083,6 +1195,7 @@
 		61F7A42811E2905C0040BA66 /* Icons */ = {
 			isa = PBXGroup;
 			children = (
+				F60D04611BD1378F003ACB00 /* Tabbar */,
 				61F2E7EB12060E31005734F7 /* checkbox.png */,
 				615FEAD912A2A4C10098EE92 /* checkbox@2x.png */,
 				61D3D2A41290E03A003CE7C3 /* irc.png */,
@@ -1120,6 +1233,9 @@
 				61F7A43411E290650040BA66 /* Icon-Small@2x.png */,
 				61F7A43511E290650040BA66 /* Icon.png */,
 				61F7A43611E290650040BA66 /* Icon@2x.png */,
+				F65E1DBC1B9B95A400A78ADF /* Icon-60@2x.png */,
+				F65E1DBD1B9B95A400A78ADF /* Icon-76.png */,
+				F65E1DBE1B9B95A400A78ADF /* Icon-76@2x.png */,
 				61F7A43711E290650040BA66 /* iTunesArtwork.png */,
 			);
 			name = Icons;
@@ -1172,6 +1288,7 @@
 				6172FEEC1298D25D00D73365 /* smallerBackground@2x~iphone.png */,
 				6172FEEE1298D25D00D73365 /* smallerBackground~iphone.png */,
 				6172FEED1298D25D00D73365 /* smallerBackground~ipad.png */,
+				F65724F71B7E784700A86262 /* Help Bubbles */,
 			);
 			name = Frontend;
 			sourceTree = "<group>";
@@ -1229,10 +1346,13 @@
 				617987FC114AA34C00BA94A9 /* uGears.pas */,
 				617987FD114AA34C00BA94A9 /* uIO.pas */,
 				617987FF114AA34C00BA94A9 /* uLand.pas */,
+				F6D7E0BF1B768F19004F3BCF /* uLandGenPerlin.pas */,
+				F6D7E0C01B768F19004F3BCF /* uLandGenTemplateBased.pas */,
 				61798800114AA34C00BA94A9 /* uLandGraphics.pas */,
 				61798801114AA34C00BA94A9 /* uLandObjects.pas */,
 				61798802114AA34C00BA94A9 /* uLandTemplates.pas */,
 				61798803114AA34C00BA94A9 /* uLandTexture.pas */,
+				F6D7E0C11B768F19004F3BCF /* uLandUtils.pas */,
 				61798804114AA34C00BA94A9 /* uLocale.pas */,
 				61798805114AA34C00BA94A9 /* uMisc.pas */,
 				61798806114AA34C00BA94A9 /* uRandom.pas */,
@@ -1247,6 +1367,58 @@
 			name = "Pascal Sources";
 			sourceTree = "<group>";
 		};
+		F60D04611BD1378F003ACB00 /* Tabbar */ = {
+			isa = PBXGroup;
+			children = (
+				F60D04631BD137B5003ACB00 /* bullet_filled.png */,
+				F60D04641BD137B5003ACB00 /* bullet_filled@2x.png */,
+				F60D04651BD137B5003ACB00 /* bullet.png */,
+				F60D04661BD137B5003ACB00 /* bullet@2x.png */,
+				F60D04671BD137B5003ACB00 /* flower_filled.png */,
+				F60D04681BD137B5003ACB00 /* flower_filled@2x.png */,
+				F60D04691BD137B5003ACB00 /* flower.png */,
+				F60D046A1BD137B5003ACB00 /* flower@2x.png */,
+				F60D046B1BD137B5003ACB00 /* heart_filled.png */,
+				F60D046C1BD137B5003ACB00 /* heart_filled@2x.png */,
+				F60D046D1BD137B5003ACB00 /* heart.png */,
+				F60D046E1BD137B5003ACB00 /* heart@2x.png */,
+				F60D046F1BD137B5003ACB00 /* target_filled.png */,
+				F60D04701BD137B5003ACB00 /* target_filled@2x.png */,
+				F60D04711BD137B5003ACB00 /* target.png */,
+				F60D04721BD137B5003ACB00 /* target@2x.png */,
+				F60D04731BD137B5003ACB00 /* teams_filled.png */,
+				F60D04741BD137B5003ACB00 /* teams_filled@2x.png */,
+				F60D04751BD137B5003ACB00 /* teams.png */,
+				F60D04761BD137B5003ACB00 /* teams@2x.png */,
+			);
+			name = Tabbar;
+			sourceTree = "<group>";
+		};
+		F65724F71B7E784700A86262 /* Help Bubbles */ = {
+			isa = PBXGroup;
+			children = (
+				F65724F81B7E784700A86262 /* helpabove.png */,
+				F65724F91B7E784700A86262 /* helpbottom.png */,
+				F65724FA1B7E784700A86262 /* helpleft.png */,
+				F65724FB1B7E784700A86262 /* helpplain.png */,
+				F65724FC1B7E784700A86262 /* helpright.png */,
+			);
+			name = "Help Bubbles";
+			path = "Resources/Frontend/Help Bubbles";
+			sourceTree = "<group>";
+		};
+		F67FC80E1BEC06E700A9DC75 /* Appirater */ = {
+			isa = PBXGroup;
+			children = (
+				F67FC80F1BEC06E700A9DC75 /* Appirater.h */,
+				F67FC8101BEC06E700A9DC75 /* Appirater.m */,
+				F67FC8111BEC06E700A9DC75 /* AppiraterDelegate.h */,
+				F67FC8151BEC17AC00A9DC75 /* Appirater.bundle */,
+			);
+			name = Appirater;
+			path = Classes/Appirater;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -1301,9 +1473,10 @@
 			isa = PBXProject;
 			attributes = {
 				BuildIndependentTargetsInParallel = YES;
+				LastUpgradeCheck = 0710;
 			};
 			buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Hedgewars" */;
-			compatibilityVersion = "Xcode 3.1";
+			compatibilityVersion = "Xcode 3.2";
 			developmentRegion = English;
 			hasScannedForEncodings = 1;
 			knownRegions = (
@@ -1319,6 +1492,8 @@
 				Bulgarian,
 				Portuguese,
 				Romanian,
+				ru,
+				tr,
 			);
 			mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
 			projectDirPath = "";
@@ -1434,27 +1609,42 @@
 				611E12FF117BBBDA0044B62F /* Entitlements-Development.plist in Resources */,
 				6165925311CA9CB400D6E256 /* MainMenuViewController-iPad.xib in Resources */,
 				6165925511CA9CB400D6E256 /* MapConfigViewController-iPad.xib in Resources */,
+				F60D04791BD137B5003ACB00 /* bullet.png in Resources */,
 				61F9040911DF58B00068B24D /* settingsButton.png in Resources */,
 				61F9040B11DF59370068B24D /* background.png in Resources */,
 				61EBA62A11DFF2BC0048B68A /* title~iphone.png in Resources */,
 				61F7A43811E290650040BA66 /* Icon-72.png in Resources */,
+				F60D04781BD137B5003ACB00 /* bullet_filled@2x.png in Resources */,
 				61F7A43911E290650040BA66 /* Icon-Small-50.png in Resources */,
+				F60D04871BD137B5003ACB00 /* teams_filled.png in Resources */,
 				61F7A43A11E290650040BA66 /* Icon-Small.png in Resources */,
 				61F7A43C11E290650040BA66 /* Icon.png in Resources */,
+				F65724FE1B7E784700A86262 /* helpbottom.png in Resources */,
 				61F7A43E11E290650040BA66 /* iTunesArtwork.png in Resources */,
+				F60D04811BD137B5003ACB00 /* heart.png in Resources */,
+				F65E1DC11B9B95A400A78ADF /* Icon-76@2x.png in Resources */,
 				6129B9F711EFB04D0017E305 /* denied.png in Resources */,
 				61F2E7CF1205EDE0005734F7 /* AboutViewController.xib in Resources */,
+				F60D047C1BD137B5003ACB00 /* flower_filled@2x.png in Resources */,
 				61F2E7EC12060E31005734F7 /* checkbox.png in Resources */,
+				F60D04821BD137B5003ACB00 /* heart@2x.png in Resources */,
 				615AD96212073B4D00F2FF04 /* startGameButton.png in Resources */,
+				F60D048A1BD137B5003ACB00 /* teams@2x.png in Resources */,
+				F6D7E09F1B76884E004F3BCF /* Default-568h@2x.png in Resources */,
+				F60D047E1BD137B5003ACB00 /* flower@2x.png in Resources */,
+				F60D04841BD137B5003ACB00 /* target_filled@2x.png in Resources */,
 				615AD9E9120764CA00F2FF04 /* backButton.png in Resources */,
 				615AD9EB1207654E00F2FF04 /* helpButton.png in Resources */,
+				F60D04891BD137B5003ACB00 /* teams.png in Resources */,
 				611EE974122A9C4100DF6938 /* clickSound.caf in Resources */,
 				611EE9DA122AA10A00DF6938 /* selSound.caf in Resources */,
 				6199E86D12464A8E00DADF8C /* surprise.png in Resources */,
 				611D9BFC12497E9800008271 /* SavedGamesViewController.xib in Resources */,
 				6147DAD31253DCDE0010357E /* savesButton.png in Resources */,
 				610D5FB21270E2660033333A /* Icon-Small@2x.png in Resources */,
+				F6F07BDF1B7E72D40010E48F /* HelpPageLobbyViewController-iPhone.xib in Resources */,
 				610D5FB31270E26C0033333A /* Icon@2x.png in Resources */,
+				F65E1DC01B9B95A400A78ADF /* Icon-76.png in Resources */,
 				61A670C012747D9B00B06CE7 /* Default.png in Resources */,
 				61A670C112747DB900B06CE7 /* MainMenuViewController-iPhone.xib in Resources */,
 				61A670C212747DBD00B06CE7 /* MapConfigViewController-iPhone.xib in Resources */,
@@ -1464,15 +1654,24 @@
 				61D3D2A51290E03A003CE7C3 /* irc.png in Resources */,
 				6172FED91298CF9800D73365 /* background~iphone.png in Resources */,
 				6172FEEF1298D25D00D73365 /* mediumBackground~ipad.png in Resources */,
+				F65E1DBF1B9B95A400A78ADF /* Icon-60@2x.png in Resources */,
 				6172FEF11298D25D00D73365 /* smallerBackground~ipad.png in Resources */,
+				F60D047A1BD137B5003ACB00 /* bullet@2x.png in Resources */,
+				F60D04861BD137B5003ACB00 /* target@2x.png in Resources */,
 				6172FEF21298D25D00D73365 /* smallerBackground~iphone.png in Resources */,
 				61889985129995B500D55FD6 /* title~ipad.png in Resources */,
+				F60D047D1BD137B5003ACB00 /* flower.png in Resources */,
+				F60D04801BD137B5003ACB00 /* heart_filled@2x.png in Resources */,
 				615FEAE212A2A6640098EE92 /* localplayButton~ipad.png in Resources */,
 				615FEAE312A2A6640098EE92 /* localplayButton~iphone.png in Resources */,
+				F65725001B7E784700A86262 /* helpplain.png in Resources */,
 				61188BF712A6FE5A0026C5DA /* backButton@2x.png in Resources */,
 				61188BF812A6FE5C0026C5DA /* background@2x~iphone.png in Resources */,
 				61188BF912A6FE5D0026C5DA /* checkbox@2x.png in Resources */,
 				61188BFB12A6FE610026C5DA /* Default-ipad-Landscape.png in Resources */,
+				F60D047B1BD137B5003ACB00 /* flower_filled.png in Resources */,
+				F60D04771BD137B5003ACB00 /* bullet_filled.png in Resources */,
+				F60D04881BD137B5003ACB00 /* teams_filled@2x.png in Resources */,
 				61188BFC12A6FE630026C5DA /* Default@2x.png in Resources */,
 				61188BFD12A6FE730026C5DA /* fb@2x.png in Resources */,
 				61188BFE12A6FE7C0026C5DA /* irc@2x.png in Resources */,
@@ -1481,10 +1680,15 @@
 				61188C0412A6FE880026C5DA /* savesButton@2x.png in Resources */,
 				61188C0512A6FE8F0026C5DA /* Data in Resources */,
 				61188C0612A6FE950026C5DA /* smallerBackground@2x~iphone.png in Resources */,
+				F67FC8161BEC17AC00A9DC75 /* Appirater.bundle in Resources */,
+				F65724FD1B7E784700A86262 /* helpabove.png in Resources */,
+				F6F07BDE1B7E72D40010E48F /* HelpPageLobbyViewController-iPad.xib in Resources */,
 				61188C0712A6FE960026C5DA /* settingsButton@2x.png in Resources */,
 				61188C0812A6FE9A0026C5DA /* title@2x~iphone.png in Resources */,
+				F65724FF1B7E784700A86262 /* helpleft.png in Resources */,
 				61188C0912A6FE9C0026C5DA /* tw@2x.png in Resources */,
 				6174F7C812CD62E300205D6F /* smallerTitle.png in Resources */,
+				F65725011B7E784700A86262 /* helpright.png in Resources */,
 				6174F7C912CD62E300205D6F /* smallerTitle@2x.png in Resources */,
 				6167A6771391514600AA6D07 /* RestoreViewController-iPhone.xib in Resources */,
 				6167A72D13919E6800AA6D07 /* RestoreViewController-iPad.xib in Resources */,
@@ -1496,12 +1700,15 @@
 				6167C8F81429502C003DD50F /* robotBadge@2x.png in Resources */,
 				6167C8F91429502C003DD50F /* star.png in Resources */,
 				6167C8FA1429502C003DD50F /* star@2x.png in Resources */,
+				F60D047F1BD137B5003ACB00 /* heart_filled.png in Resources */,
+				F60D04831BD137B5003ACB00 /* target_filled.png in Resources */,
 				6167CA37142A6ED7003DD50F /* bot0.png in Resources */,
 				6167CA38142A6ED7003DD50F /* bot0@2x.png in Resources */,
 				6167CA39142A6ED7003DD50F /* bot1.png in Resources */,
 				6167CA3A142A6ED7003DD50F /* bot1@2x.png in Resources */,
 				6167CA3B142A6ED7003DD50F /* bot2.png in Resources */,
 				6167CA3C142A6ED7003DD50F /* bot2@2x.png in Resources */,
+				F60D04851BD137B5003ACB00 /* target.png in Resources */,
 				6167CA3D142A6ED7003DD50F /* bot3.png in Resources */,
 				6167CA3E142A6ED7003DD50F /* bot3@2x.png in Resources */,
 				6167CA3F142A6ED7003DD50F /* bot4.png in Resources */,
@@ -1553,7 +1760,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "SOURCE_DIR=${PROJECT_DIR}/../../\n\n#copy new stuff over old stuff\nrm -rf ${PROJECT_DIR}/Data\n\necho \"Copying Data...\"\ncp -R ${SOURCE_DIR}/share/hedgewars/Data ${PROJECT_DIR}/Data\n\n#copy some other files\necho \"Fetching additional graphics...\"\nmkdir -p ${PROJECT_DIR}/Data/Graphics/Icons\ncp    ${SOURCE_DIR}/QTfrontend/res/{btn*,icon*,StatsMedal*,ammopic*}.png ${PROJECT_DIR}/Data/Graphics/Icons/\ncp -R ${SOURCE_DIR}/project_files/Android-build/SDL-android-project/assets/Data/Graphics/Buttons ${PROJECT_DIR}/Data/Graphics/\n\necho \"Removing text and dummy files...\"\n#delete all CMakeLists.txt and image source files\nfind ${PROJECT_DIR}/Data -name CMakeLists.txt -delete\nfind ${PROJECT_DIR}/Data -name *.svg* -delete\nfind ${PROJECT_DIR}/Data -name *.psd -delete\nfind ${PROJECT_DIR}/Data -name *.sifz -delete\nfind ${PROJECT_DIR}/Data -name *.xcf -delete\nfind ${PROJECT_DIR}/Data -name *.orig -delete\nfind ${PROJECT_DIR}/Data -name *.ts -delete\n\n#delete dummy maps and hats, misc stuff\nrm -rf ${PROJECT_DIR}/Data/Maps/test*\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/{TeamCap,TeamHeadband,TeamHair}\nrm -rf ${PROJECT_DIR}/Data/misc/\n\n#delete forbidden maps and WIP themes (remember to check that no Map uses them)\nrm -rf ${PROJECT_DIR}/Data/Maps/{Cheese,FlightJoust}\nrm -rf ${PROJECT_DIR}/Data/Themes/{Beach,Digital}\n\n#delete all names, reserved hats and unused fonts\nrm -rf ${PROJECT_DIR}/Data/Names/\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/Reserved/\nrm -rf ${PROJECT_DIR}/Data/Fonts/{wqy-zenhei.ttc,DroidSansFallback.ttf}\n\necho \"Handling audio files...\"\n#copy mono audio\ncp -R ${SOURCE_DIR}/project_files/AudioMono/* ${PROJECT_DIR}/Data/\n#delete the Classic voice\nrm -rf ${PROJECT_DIR}/Data/Sounds/voices/Classic\n#delete the main theme file\nrm -rf ${PROJECT_DIR}/Data/Music/main_theme.ogg\n\n#remove unused voices\nfor i in {Amazing,Brilliant,Bugger,Bungee,Cutitout,Drat,Excellent,Fire,FlawlessPossibility,Gonnagetyou,Grenade,Hmm,Justyouwait,Leavemealone,Ohdear,Ouch,Perfect,Revenge,Runaway,Solong,Thisoneismine,VictoryPossibility,Watchthis,Whatthe,Whoopsee}; do find Data/Sounds/voices/ -name $i.ogg -delete; done\n\necho \"Tweaking Data contents...\"\n#move Lua maps in Missions\nmkdir ${PROJECT_DIR}/Data/Missions/Maps/\nfor i in `ls ${PROJECT_DIR}/Data/Maps/`;\ndo \n    if [[ `ls -f ${PROJECT_DIR}/Data/Maps/$i/map.lua 2> /dev/null` != '' ]];\n    then\n        mv ${PROJECT_DIR}/Data/Maps/$i ${PROJECT_DIR}/Data/Missions/Maps/;\n    fi;\ndone;\n\n#workaround for missing map in CTF_Blizzard\nln -s ../../../Maps/Blizzard/map.png ${PROJECT_DIR}/Data/Missions/Maps/CTF_Blizzard/map.png\n\n#reduce the number of flakes for City\nsed -i -e 's/1500/50/' ${PROJECT_DIR}/Data/Themes/City/theme.cfg\n\necho \"Done\"";
+			shellScript = "SOURCE_DIR=${PROJECT_DIR}/../../\n\n#copy new stuff over old stuff\nrm -rf ${PROJECT_DIR}/Data\n\necho \"Copying Data...\"\ncp -R ${SOURCE_DIR}/share/hedgewars/Data ${PROJECT_DIR}/Data\n\n#copy some other files\necho \"Fetching additional graphics...\"\nmkdir -p ${PROJECT_DIR}/Data/Graphics/Icons\ncp    ${SOURCE_DIR}/QTfrontend/res/{btn*,icon*,StatsMedal*,ammopic*}.png ${PROJECT_DIR}/Data/Graphics/Icons/\ncp -R ${SOURCE_DIR}/project_files/Android-build/SDL-android-project/assets/Data/Graphics/Buttons ${PROJECT_DIR}/Data/Graphics/\n\necho \"Removing text and dummy files...\"\n#delete all CMakeLists.txt and image source files\nfind ${PROJECT_DIR}/Data -name CMakeLists.txt -delete\nfind ${PROJECT_DIR}/Data -name *.svg* -delete\nfind ${PROJECT_DIR}/Data -name *.psd -delete\nfind ${PROJECT_DIR}/Data -name *.sifz -delete\nfind ${PROJECT_DIR}/Data -name *.xcf -delete\nfind ${PROJECT_DIR}/Data -name *.orig -delete\nfind ${PROJECT_DIR}/Data -name *.ts -delete\n\n#delete all CMake generated files\nfind ${PROJECT_DIR}/Data -name CMakeFiles -type d -exec rm -r {} +\nfind ${PROJECT_DIR}/Data -name Makefile -delete\nfind ${PROJECT_DIR}/Data -name *.cmake -delete\n\n#delete dummy maps and hats, misc stuff\nrm -rf ${PROJECT_DIR}/Data/Maps/test*\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/{TeamCap,TeamHeadband,TeamHair}\nrm -rf ${PROJECT_DIR}/Data/misc/\n\n#delete forbidden maps and WIP themes (remember to check that no Map uses them)\nrm -rf ${PROJECT_DIR}/Data/Maps/{FlightJoust,ClimbHome}\nrm -rf ${PROJECT_DIR}/Data/Themes/{Beach,Digital}\n\n#delete all names, reserved hats and unused fonts\nrm -rf ${PROJECT_DIR}/Data/Names/\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/Reserved/\nrm -rf ${PROJECT_DIR}/Data/Fonts/{wqy-zenhei.ttc,DroidSansFallback.ttf}\n\necho \"Handling audio files...\"\n#delete the Classic voice\nrm -rf ${PROJECT_DIR}/Data/Sounds/voices/Classic\n#delete the main theme file\nrm -rf ${PROJECT_DIR}/Data/Music/main_theme.ogg\n\n#remove unused voices\nfor i in {Amazing,Brilliant,Bugger,Bungee,Cutitout,Drat,Excellent,Fire,FlawlessPossibility,Gonnagetyou,Grenade,Hmm,Leavemealone,Ohdear,Ouch,Perfect,Revenge,Runaway,Solong,Thisoneismine,VictoryPossibility,Watchthis,Whatthe,Whoopsee}; do find Data/Sounds/voices/ -name $i.ogg -delete; done\n\necho \"Tweaking Data contents...\"\n#move Lua maps in Missions\nmkdir ${PROJECT_DIR}/Data/Missions/Maps/\nfor i in `ls ${PROJECT_DIR}/Data/Maps/`;\ndo \n    if [[ `ls -f ${PROJECT_DIR}/Data/Maps/$i/map.lua 2> /dev/null` != '' ]];\n    then\n        mv ${PROJECT_DIR}/Data/Maps/$i ${PROJECT_DIR}/Data/Missions/Maps/;\n    fi;\ndone;\n\n#workaround for missing map in CTF_Blizzard\nln -s ../../../Maps/Blizzard/map.png ${PROJECT_DIR}/Data/Missions/Maps/CTF_Blizzard/map.png\n\n#reduce the number of flakes for City\nsed -i -e 's/1500/50/' ${PROJECT_DIR}/Data/Themes/City/theme.cfg\n\necho \"Done\"";
 		};
 		61806B78170B83EA00C601BC /* config.inc */ = {
 			isa = PBXShellScriptBuildPhase;
@@ -1568,7 +1775,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "HG=/usr/local/bin/hg\nSOURCE_DIR=${PROJECT_DIR}/../../\n\n#create config.inc\necho \"Updating config file...\"\nPRON=`grep HEDGEWARS_PROTO_VER ${SOURCE_DIR}/CMakeLists.txt | grep -o -E [0-9]+`\nMAJN=`grep CPACK_PACKAGE_VERSION_MAJOR ${SOURCE_DIR}/CMakeLists.txt | grep -o -E \"[0-9]+\"`\nMINN=`grep CPACK_PACKAGE_VERSION_MINOR ${SOURCE_DIR}/CMakeLists.txt | grep -o -E \"[0-9]+\"`\nPATN=`grep CPACK_PACKAGE_VERSION_PATCH ${SOURCE_DIR}/CMakeLists.txt | grep -o -E \"[0-9]+\"`\nREVN=`$HG id -n ${SOURCE_DIR}`\nHASH=`$HG id -i ${SOURCE_DIR}`\n\necho \"{Do not change this file, use the project target to regenerate}\" > ${PROJECT_DIR}/config.inc\necho \"const cNetProtoVersion = $PRON;\" >> ${PROJECT_DIR}/config.inc\necho \"const cVersionString = '$MAJN.$MINN.$PATN';\" >> ${PROJECT_DIR}/config.inc\necho \"const cRevisionString = '$REVN';\" >> ${PROJECT_DIR}/config.inc\necho \"const cHashString = '$HASH';\" >> ${PROJECT_DIR}/config.inc\n";
+			shellScript = "HG=/usr/local/bin/hg\nSOURCE_DIR=${PROJECT_DIR}/../../\n\n#create config.inc\necho \"Updating config file...\"\nPRON=`grep HEDGEWARS_PROTO_VER ${SOURCE_DIR}/CMakeLists.txt | grep -o -E [0-9]+`\nMAJN=`grep CPACK_PACKAGE_VERSION_MAJOR ${SOURCE_DIR}/CMakeLists.txt | grep -o -E \"[0-9]+\"`\nMINN=`grep CPACK_PACKAGE_VERSION_MINOR ${SOURCE_DIR}/CMakeLists.txt | grep -o -E \"[0-9]+\"`\nPATN=`grep CPACK_PACKAGE_VERSION_PATCH ${SOURCE_DIR}/CMakeLists.txt | grep -o -E \"[0-9]+\"`\nREVN=`$HG id -n ${SOURCE_DIR}`\nHASH=`$HG id -i ${SOURCE_DIR}`\n\necho \"{Do not change this file, use the project target to regenerate}\" > ${PROJECT_DIR}/config.inc\necho \"const cNetProtoVersion = $PRON;\" >> ${PROJECT_DIR}/config.inc\necho \"const cVersionString = '$MAJN.$MINN.$PATN';\" >> ${PROJECT_DIR}/config.inc\necho \"const cRevisionString = '$REVN';\" >> ${PROJECT_DIR}/config.inc\necho \"const cHashString = '$HASH';\" >> ${PROJECT_DIR}/config.inc\necho \"const cDefaultPathPrefix = '';\" >> ${PROJECT_DIR}/config.inc\n";
 		};
 		9283011B0F10CB2D00CC5A3C /* Build libfpc.a */ = {
 			isa = PBXShellScriptBuildPhase;
@@ -1584,7 +1791,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "# Build libfpc.a\n# 9 July 2006 (Jonas Maebe)\n#   * original version\n# 15 September 2006 (Erling Johansen)\n#   * simplified\n# 26 April 2007 (Jonas Maebe)\n#  * added support for ppc64/x86_64 (future proofing)\n# 4 August 2007 (Jonas Maebe)\n#  * call ranlib after ar so the toc of the library is up-to-date\n# 3 January 2009 (Jonas Maebe)\n#  * support for ARM\n# 24 October 2009 (Jonas Maebe)\n#  * don't hardcode version 2.3.1 anymore under certain circumstances\n#  * use the FPC_RTL_UNITS_BASE setting\n# 13 December 2009 (Jonas Maebe)\n#  * use new FPC_COMPILER_BINARY_DIR setting to make it easier to change the used FPC version\n\nrm -f \"$TARGET_TEMP_DIR\"/*.a\nnarch=\n\ntemparchs=`echo $ARCHS|sed -e 's/arm[^\\w]*/arm\\\n/'|sort -u`\nfor arch in $temparchs\ndo\n\ttargetos=darwin;\n\tcase $arch in\n\t\tppc) fpc_arch=ppc; fpc_rtl=powerpc ;;\n\t\ti386) fpc_arch=386; fpc_rtl=i386; targetos=iphonesim ;;\n\t\tppc64) fpc_arch=ppc64; fpc_rtl=powerpc64 ;;\n\t\tx86_64) fpc_arch=x64; fpc_rtl=x86_64 ;;\n\t\tarm*) fpc_arch=arm; fpc_rtl=arm ;;\n\t\t*) continue\n\tesac\n\tif test -e \"${FPC_COMPILER_BINARY_DIR}\"/ppc${fpc_arch}\n\tthen\n\t\tupath=\"$FPC_RTL_UNITS_BASE\"/`\"${FPC_COMPILER_BINARY_DIR}\"/ppc${fpc_arch} -iV`/units/${fpc_rtl}-${targetos}\n\t\tar -q \"$TARGET_TEMP_DIR\"/libfpc${narch}.a `ls \"$upath\"/*/*.o | grep -v 'darwin/fv/'`\n\t\tranlib \"$TARGET_TEMP_DIR\"/libfpc${narch}.a\n\t\tnarch=${narch}x\n\telse\n\t\techo error: can\\'t build libfpc.a for $arch \\(${FPC_COMPILER_BINARY_DIR}/ppc${fpc_arch} not found, derived from FPC_COMPILER_BINARY_DIR project setting\\)\n\tfi\ndone\n\nif test ${#narch} -gt 1\nthen\n\tlipo -create \"$TARGET_TEMP_DIR\"/libfpc*.a -output \"$TARGET_BUILD_DIR\"/libfpc.a\n\trm -f \"$TARGET_TEMP_DIR\"/*.a\nelse\n\tmv \"$TARGET_TEMP_DIR\"/libfpc.a \"$TARGET_BUILD_DIR\"\nfi\n";
+			shellScript = "# Build libfpc.a\n# 9 July 2006 (Jonas Maebe)\n#   * original version\n# 15 September 2006 (Erling Johansen)\n#   * simplified\n# 26 April 2007 (Jonas Maebe)\n#  * added support for ppc64/x86_64 (future proofing)\n# 4 August 2007 (Jonas Maebe)\n#  * call ranlib after ar so the toc of the library is up-to-date\n# 3 January 2009 (Jonas Maebe)\n#  * support for ARM\n# 24 October 2009 (Jonas Maebe)\n#  * don't hardcode version 2.3.1 anymore under certain circumstances\n#  * use the FPC_RTL_UNITS_BASE setting\n# 13 December 2009 (Jonas Maebe)\n#  * use new FPC_COMPILER_BINARY_DIR setting to make it easier to change the used FPC version\n\nrm -f \"$TARGET_TEMP_DIR\"/*.a\nnarch=\n\n#temparchs=`echo $ARCHS|sed -e 's/arm[^\\w]*/arm\\\n#/'|sort -u`\ntemparchs=`echo $ARCHS|sort -u`\necho $temparchs\nfor arch in $temparchs\ndo\n\ttargetos=darwin;\n\tcase $arch in\n        arm64) fpc_arch=rossa64; fpc_rtl=aarch64 ;;\n        armv7) fpc_arch=rossarm; fpc_rtl=arm ;;\n        x86_64) fpc_arch=x64; fpc_rtl=x86_64; targetos=iphonesim ;;\n#       ppc) fpc_arch=ppc; fpc_rtl=powerpc ;;\n#\t\ti386) fpc_arch=386; fpc_rtl=i386; targetos=iphonesim ;;\n#\t\tppc64) fpc_arch=ppc64; fpc_rtl=powerpc64 ;;\n#\t\tx86_64) fpc_arch=x64; fpc_rtl=x86_64 ;;\n#\t\tarm*) fpc_arch=arm; fpc_rtl=arm ;;\n\t\t*) continue\n\tesac\n\tif test -e \"${FPC_COMPILER_BINARY_DIR}\"/ppc${fpc_arch}\n\tthen\n\t\tupath=\"$FPC_RTL_UNITS_BASE\"/`\"${FPC_COMPILER_BINARY_DIR}\"/ppc${fpc_arch} -iV`/units/${fpc_rtl}-${targetos}\n\t\tar -q \"$TARGET_TEMP_DIR\"/libfpc${narch}.a `ls \"$upath\"/*/*.o | grep -v 'darwin/fv/'`\n\t\tranlib \"$TARGET_TEMP_DIR\"/libfpc${narch}.a\n\t\tnarch=${narch}x\n\telse\n\t\techo error: can\\'t build libfpc.a for $arch \\(${FPC_COMPILER_BINARY_DIR}/ppc${fpc_arch} not found, derived from FPC_COMPILER_BINARY_DIR project setting\\)\n\tfi\ndone\n           \nif test ${#narch} -gt 1\nthen\n\tlipo -create \"$TARGET_TEMP_DIR\"/libfpc*.a -output \"$TARGET_BUILD_DIR\"/libfpc.a\n\trm -f \"$TARGET_TEMP_DIR\"/*.a\nelse\n\tmv \"$TARGET_TEMP_DIR\"/libfpc.a \"$TARGET_BUILD_DIR\"\nfi\n";
 		};
 		928301560F10E04C00CC5A3C /* Compile Pascal Sources */ = {
 			isa = PBXShellScriptBuildPhase;
@@ -1599,7 +1806,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "# Compile Pascal Sources\n# 15sep06,ejo  written.\n# 26 April 2007 - Jonas Maebe\n#  * support for ppc64 and x86_64\n#  * don't run when cleaning (in case running scripts when cleaning is ever fixed by Apple)\n#  * split the options in FPC_COMMON_FLAGS (common to all configurations) and FPC_CFG_SPECIFIC_FLAGS (per configuration)\n# 4 January 2009 - Jonas Maebe\n#  * support for ARM\n# 24 October 2009 - Jonas Maebe\n#  * don't hardcode 2.3.1 in some cases anymore\n# 13 December 2009 (Jonas Maebe)\n#  * use new FPC_COMPILER_BINARY_DIR setting to make it easier to change the used FPC version\n\nif [ x\"$ACTION\" != \"xbuild\" ]; then\n  # in case running scripts during cleaning gets fixed\n  exit 0\nfi\n\nif test ! -e \"$FPC_MAIN_FILE\"\nthen\n\techo error: FPC_MAIN_FILE not found \\($FPC_MAIN_FILE\\)\n\texit 2\nfi\n\nfor variant in $BUILD_VARIANTS\ndo\n\tfor arch in $ARCHS\n\tdo\n\t\ttargetos=darwin;\n\t\tcase $arch in\n\t\t\tppc) fpc_arch=ppc; fpc_rtl=powerpc ;;\n\t\t\ti386) fpc_arch=386; fpc_rtl=i386; targetos=iphonesim ;;\n\t\t\tppc64) fpc_arch=ppc64; fpc_rtl=powerpc64 ;;\n\t\t\tx86_64) fpc_arch=x64; fpc_rtl=x86_64 ;;\n\t\t\tarm*) fpc_arch=arm; fpc_rtl=arm ;;\n\t\t\t*) continue\n\t\tesac\n\n\t\tapp_target_temp_dir=$CONFIGURATION_TEMP_DIR/`basename \"$PROJECT_TEMP_DIR\"`\n\t\tout_dir=$app_target_temp_dir/`basename \"$DERIVED_SOURCES_DIR\"`-$variant/$arch\n\t\tfpccompiler=\"${FPC_COMPILER_BINARY_DIR}/ppc${fpc_arch}\"\n\t\tif test -e \"$fpccompiler\"\n\t\tthen\n\t\t\tfpcversion=`\"$fpccompiler\" -iV`\n\t\t\tmainunitdir=\"$FPC_RTL_UNITS_BASE/$fpcversion/units/${fpc_rtl}-${targetos}/\"\n\t\t\tmkdir -p \"$out_dir\"\n\t\t\tcd \"$out_dir\"\n\t\t\techo \"Compiling to $out_dir\"\n\t\t\trm -f compilefailed\n\t\n\t\t\t# delete any ppu files for which the \".s\" file was somehow deleted (Xcode does that sometimes in case of errors),\n\t\t\t# so that FPC will recompile the unit\n\t\t\tfor file in *.ppu\n\t\t\tdo\n\t\t\t\tasmname=`basename \"$file\" ppu`s\n\t\t\t\tif [ ! -f \"$asmname\" ]; then\n\t\t\t\t\t# can fail in case there are no .ppu files, since then it will try to erase the file with name '*.ppu'\n\t\t\t\t\t# -> use -f so it won't give an error message\n\t\t\t\t\trm -f \"$file\"\n\t\t\t\tfi\n\t\t\tdone\n\n\t\t\techo $fpccompiler -n -l -viwn -a -s -vbr -FE. $FPC_COMMON_OPTIONS $FPC_SPECIFIC_OPTIONS '\\' >ppccmd.sh\n\t\t\techo -Fi\\\"`dirname \"$FPC_MAIN_FILE\"`\\\" '\\' >>ppccmd.sh\n\t\t\techo -Fu\"$mainunitdir/*\" -Fu\"$mainunitdir/rtl\" '\\' >>ppccmd.sh\n\t\t\t# allow FPC_UNIT_PATHS to override default search directory\n\t\t\techo $FPC_UNIT_PATHS '\\' >>ppccmd.sh\n\t\t\techo \\\"$FPC_MAIN_FILE\\\" >>ppccmd.sh\n\t\t\t# cat ppccmd.sh\n\n\t\t\t/bin/sh ppccmd.sh\n\t\t\tif [ $? != 0 ]; then\n\t\t\t\ttouch \"$out_dir\"/compilefailed\n\t\t\t\texit 1\n\t\t\tfi\n\t\telse\n\t\t\ttouch \"$out_dir\"/compilefailed\n\t\t\techo $FPC_MAIN_FILE:1: error: 1: can\\'t compile for $arch \\(ppc${fpc_arch} not found\\)\n\t\t\texit 2\n\t\tfi\n\tdone\ndone\n";
+			shellScript = "# Compile Pascal Sources\n# 15sep06,ejo  written.\n# 26 April 2007 - Jonas Maebe\n#  * support for ppc64 and x86_64\n#  * don't run when cleaning (in case running scripts when cleaning is ever fixed by Apple) (removed)\n#  * split the options in FPC_COMMON_FLAGS (common to all configurations) and FPC_CFG_SPECIFIC_FLAGS (per configuration)\n# 4 January 2009 - Jonas Maebe\n#  * support for ARM\n# 24 October 2009 - Jonas Maebe\n#  * don't hardcode 2.3.1 in some cases anymore\n# 13 December 2009 (Jonas Maebe)\n#  * use new FPC_COMPILER_BINARY_DIR setting to make it easier to change the used FPC version\n\nif test ! -e \"$FPC_MAIN_FILE\"\nthen\n\techo error: FPC_MAIN_FILE not found \\($FPC_MAIN_FILE\\)\n\texit 2\nfi\n\nfor variant in $BUILD_VARIANTS\ndo\n\tfor arch in $ARCHS\n\tdo\n\t\ttargetos=darwin;\n\t\tcase $arch in\n            arm64) fpc_arch=rossa64; fpc_rtl=aarch64 ;;\n            armv7) fpc_arch=rossarm; fpc_rtl=arm ;;\n            x86_64) fpc_arch=x64; fpc_rtl=x86_64; targetos=iphonesim ;;\n#\t\t\tppc) fpc_arch=ppc; fpc_rtl=powerpc ;;\n#\t\t\ti386) fpc_arch=386; fpc_rtl=i386; targetos=iphonesim ;;\n#\t\t\tppc64) fpc_arch=ppc64; fpc_rtl=powerpc64 ;;\n#\t\t\tx86_64) fpc_arch=x64; fpc_rtl=x86_64 ;;\n#\t\t\tarm*) fpc_arch=arm; fpc_rtl=arm ;;\n\t\t\t*) continue\n\t\tesac\n\n\t\tapp_target_temp_dir=$CONFIGURATION_TEMP_DIR/`basename \"$PROJECT_TEMP_DIR\"`\n\t\tout_dir=$app_target_temp_dir/`basename \"$DERIVED_SOURCES_DIR\"`-$variant/$arch\n\t\tfpccompiler=\"${FPC_COMPILER_BINARY_DIR}/ppc${fpc_arch}\"\n\t\tif test -e \"$fpccompiler\"\n\t\tthen\n\t\t\tfpcversion=`\"$fpccompiler\" -iV`\n\t\t\tmainunitdir=\"$FPC_RTL_UNITS_BASE/$fpcversion/units/${fpc_rtl}-${targetos}/\"\n\t\t\tmkdir -p \"$out_dir\"\n\t\t\tcd \"$out_dir\"\n\t\t\techo \"Compiling to $out_dir\"\n\t\t\trm -f compilefailed\n\t\n\t\t\t# delete any ppu files for which the \".s\" file was somehow deleted (Xcode does that sometimes in case of errors),\n\t\t\t# so that FPC will recompile the unit\n\t\t\tfor file in *.ppu\n\t\t\tdo\n\t\t\t\tasmname=`basename \"$file\" ppu`s\n\t\t\t\tif [ ! -f \"$asmname\" ]; then\n\t\t\t\t\t# can fail in case there are no .ppu files, since then it will try to erase the file with name '*.ppu'\n\t\t\t\t\t# -> use -f so it won't give an error message\n\t\t\t\t\trm -f \"$file\"\n\t\t\t\tfi\n\t\t\tdone\n\n\t\t\techo $fpccompiler -n -l -viwn -a -s -vbr -FE. $FPC_COMMON_OPTIONS $FPC_SPECIFIC_OPTIONS '\\' >ppccmd.sh\n\t\t\techo -Fi\\\"`dirname \"$FPC_MAIN_FILE\"`\\\" '\\' >>ppccmd.sh\n\t\t\techo -Fu\"$mainunitdir/*\" -Fu\"$mainunitdir/rtl\" '\\' >>ppccmd.sh\n\t\t\t# allow FPC_UNIT_PATHS to override default search directory\n\t\t\techo $FPC_UNIT_PATHS '\\' >>ppccmd.sh\n\t\t\techo \\\"$FPC_MAIN_FILE\\\" >>ppccmd.sh\n\t\t\t# cat ppccmd.sh\n\n\t\t\t/bin/sh ppccmd.sh\n\t\t\tif [ $? != 0 ]; then\n\t\t\t\ttouch \"$out_dir\"/compilefailed\n\t\t\t\texit 1\n\t\t\tfi\n\t\telse\n\t\t\ttouch \"$out_dir\"/compilefailed\n\t\t\techo $FPC_MAIN_FILE:1: error: 1: can\\'t compile for $arch \\(ppc${fpc_arch} not found\\)\n\t\t\texit 2\n\t\tfi\n\tdone\ndone\n";
 		};
 /* End PBXShellScriptBuildPhase section */
 
@@ -1615,6 +1822,7 @@
 				61798820114AA34C00BA94A9 /* uAIActions.pas in Sources */,
 				61798821114AA34C00BA94A9 /* uAIAmmoTests.pas in Sources */,
 				61798822114AA34C00BA94A9 /* uAIMisc.pas in Sources */,
+				F6BA38461BA7A834005D16EA /* GameLogViewController.m in Sources */,
 				61798823114AA34C00BA94A9 /* uAmmos.pas in Sources */,
 				61798824114AA34C00BA94A9 /* uChat.pas in Sources */,
 				61798825114AA34C00BA94A9 /* uCollisions.pas in Sources */,
@@ -1627,7 +1835,9 @@
 				6179882D114AA34C00BA94A9 /* uLand.pas in Sources */,
 				6179882E114AA34C00BA94A9 /* uLandGraphics.pas in Sources */,
 				6179882F114AA34C00BA94A9 /* uLandObjects.pas in Sources */,
+				F6756D801BD8550500B6AB6B /* LabelWithIBLocalization.m in Sources */,
 				61798830114AA34C00BA94A9 /* uLandTemplates.pas in Sources */,
+				F6D7E0C31B768F19004F3BCF /* uLandGenTemplateBased.pas in Sources */,
 				61798831114AA34C00BA94A9 /* uLandTexture.pas in Sources */,
 				61798832114AA34C00BA94A9 /* uLocale.pas in Sources */,
 				61798833114AA34C00BA94A9 /* uMisc.pas in Sources */,
@@ -1654,7 +1864,6 @@
 				6165921B11CA9BA200D6E256 /* SchemeWeaponConfigViewController.m in Sources */,
 				6165921C11CA9BA200D6E256 /* SingleSchemeViewController.m in Sources */,
 				6165921D11CA9BA200D6E256 /* SingleTeamViewController.m in Sources */,
-				6165921E11CA9BA200D6E256 /* SettingsContainerViewController.m in Sources */,
 				6165921F11CA9BA200D6E256 /* TeamConfigViewController.m in Sources */,
 				6165922011CA9BA200D6E256 /* TeamSettingsViewController.m in Sources */,
 				6165922111CA9BA200D6E256 /* VoicesViewController.m in Sources */,
@@ -1677,10 +1886,12 @@
 				61006F95128DE31F00EBA7F7 /* CreationChamber.m in Sources */,
 				61A4A39412A5CCC2004D81E6 /* uCommandHandlers.pas in Sources */,
 				61A4A39512A5CCC2004D81E6 /* uCommands.pas in Sources */,
+				F6448CE31BD2E00500C31C8C /* TableViewControllerWithDoneButton.m in Sources */,
 				61A4A39612A5CCC2004D81E6 /* uDebug.pas in Sources */,
 				61A4A39712A5CCC2004D81E6 /* uGearsRender.pas in Sources */,
 				61A4A39812A5CCC2004D81E6 /* uRender.pas in Sources */,
 				61A4A39912A5CCC2004D81E6 /* uRenderUtils.pas in Sources */,
+				F6F7DA8F1BE18F5700432EA7 /* UITableViewCell+FindTable.m in Sources */,
 				61A4A39A12A5CCC2004D81E6 /* uSinTable.pas in Sources */,
 				61A4A39B12A5CCC2004D81E6 /* uTextures.pas in Sources */,
 				61A4A39C12A5CCC2004D81E6 /* uTypes.pas in Sources */,
@@ -1689,11 +1900,12 @@
 				61A4A3A212A5CD56004D81E6 /* uCaptions.pas in Sources */,
 				61E5D68D12AB006F00566F29 /* uLandPainted.pas in Sources */,
 				61F544C712AF1748007FD913 /* HoldTableViewCell.m in Sources */,
-				61AC067412B2E32D000B52A2 /* Appirater.m in Sources */,
 				61E2E12E12BAAEE30051B659 /* ServerProtocolNetwork.m in Sources */,
 				61B7A33812CC21080086B604 /* StatsPageViewController.m in Sources */,
+				F6D7E0C41B768F19004F3BCF /* uLandUtils.pas in Sources */,
 				61EDB5B0135B3F97009B29A6 /* GameInterfaceBridge.m in Sources */,
 				61A976B3136F668500DD9878 /* uCursor.pas in Sources */,
+				F67FC8121BEC06E700A9DC75 /* Appirater.m in Sources */,
 				6167A6761391514600AA6D07 /* RestoreViewController.m in Sources */,
 				61C28D3F142D380400DA16C2 /* AudioManagerController.m in Sources */,
 				611D7A50142FDCD3006E0798 /* uTouch.pas in Sources */,
@@ -1709,11 +1921,13 @@
 				615E76BC14E4421200FBA131 /* MGSplitCornersView.m in Sources */,
 				615E76BD14E4421200FBA131 /* MGSplitDividerView.m in Sources */,
 				615E76BE14E4421200FBA131 /* MGSplitViewController.m in Sources */,
+				F6F07BE01B7E72D40010E48F /* HelpPageLobbyViewController.m in Sources */,
 				615BE3D4155C5DDF003CA34D /* uInputHandler.pas in Sources */,
 				619349C8160BAF3E00A08518 /* uAILandMarks.pas in Sources */,
 				619349C9160BAF3E00A08518 /* uGearsHandlers.pas in Sources */,
 				619349CA160BAF3E00A08518 /* uGearsHandlersRope.pas in Sources */,
 				610FB7C81661390E002FB2A7 /* uPhysFSLayer.pas in Sources */,
+				F6D7E0C21B768F19004F3BCF /* uLandGenPerlin.pas in Sources */,
 				61B37A1F17837C78009F283D /* ArgParsers.pas in Sources */,
 				61B37A2017837C78009F283D /* uVisualGearsList.pas in Sources */,
 				61B37A80178381DB009F283D /* uGearsHandlersMess.pas in Sources */,
@@ -1780,13 +1994,14 @@
 				6115652D147F4C52006729A9 /* French */,
 				61156530147F4D10006729A9 /* Polish */,
 				61177BAA148A661600686905 /* German */,
-				61177BAC148A671600686905 /* Turkish */,
 				61177BE4148B881C00686905 /* Danish */,
 				617BC22D1490210E00E1C294 /* Italian */,
 				619BCEC41495615700C1C409 /* Bulgarian */,
 				61D08D8714AEA9670007C078 /* Japanese */,
 				61C6783F14B3DD020087425A /* Portuguese */,
 				6154A53114C37E4A00F6EEF6 /* Romanian */,
+				F65725291B7EB9CC00A86262 /* ru */,
+				F67FC81F1BEC280D00A9DC75 /* tr */,
 			);
 			name = About.strings;
 			sourceTree = "<group>";
@@ -1799,13 +2014,14 @@
 				6115652C147F4C4C006729A9 /* French */,
 				61156531147F4D17006729A9 /* Polish */,
 				61177BA7148A658900686905 /* German */,
-				61177BAD148A672000686905 /* Turkish */,
 				61177BF0148B882500686905 /* Danish */,
 				617BC2391490211500E1C294 /* Italian */,
 				619BCED01495615F00C1C409 /* Bulgarian */,
 				61D08D8814AEA9700007C078 /* Japanese */,
 				61C6784B14B3DD0B0087425A /* Portuguese */,
 				6154A53E14C37E5400F6EEF6 /* Romanian */,
+				F657252A1B7EB9CC00A86262 /* ru */,
+				F67FC8201BEC280D00A9DC75 /* tr */,
 			);
 			name = Localizable.strings;
 			sourceTree = "<group>";
@@ -1818,13 +2034,14 @@
 				6115652B147F4C45006729A9 /* French */,
 				61156532147F4D1E006729A9 /* Polish */,
 				61177BA9148A660C00686905 /* German */,
-				61177BAE148A672C00686905 /* Turkish */,
 				61177BF1148B882F00686905 /* Danish */,
 				617BC23A1490211F00E1C294 /* Italian */,
 				619BCED11495616700C1C409 /* Bulgarian */,
 				61D08D8914AEA9780007C078 /* Japanese */,
 				61C6784C14B3DD140087425A /* Portuguese */,
 				6154A54014C37EB100F6EEF6 /* Romanian */,
+				F657252B1B7EB9CC00A86262 /* ru */,
+				F67FC8211BEC280D00A9DC75 /* tr */,
 			);
 			name = Scheme.strings;
 			sourceTree = "<group>";
@@ -1835,24 +2052,32 @@
 		1D6058940D05DD3E006BFB54 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_GENERATE_TEST_COVERAGE_FILES = YES;
 				GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Hedgewars_Prefix.pch;
 				INFOPLIST_FILE = Info.plist;
+				PRODUCT_BUNDLE_IDENTIFIER = org.hedgewars.mobile;
 				PRODUCT_NAME = Hedgewars;
+				PROVISIONING_PROFILE = "";
 			};
 			name = Debug;
 		};
 		1D6058950D05DD3E006BFB54 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Hedgewars_Prefix.pch;
 				INFOPLIST_FILE = Info.plist;
+				PRODUCT_BUNDLE_IDENTIFIER = org.hedgewars.mobile;
 				PRODUCT_NAME = Hedgewars;
+				PROVISIONING_PROFILE = "";
 			};
 			name = Release;
 		};
@@ -1861,23 +2086,32 @@
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				APPLY_RULES_IN_COPY_FILES = YES;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				CODE_SIGN_IDENTITY = "iPhone Distribution";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_BITCODE = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				FPC_COMMON_OPTIONS = "-l- -dIPHONEOS -Cs2000000 -B  -vwi -Sgix -Fi${PROJECT_DIR}";
-				FPC_COMPILER_BINARY_DIR = /usr/local/lib/fpc/2.7.1;
+				FPC_COMPILER_BINARY_DIR = /usr/local/lib/fpc/3.1.1;
 				FPC_MAIN_FILE = "$(PROJECT_DIR)/../../hedgewars/hwLibrary.pas";
 				FPC_RTL_UNITS_BASE = /usr/local/lib/fpc;
-				FPC_SPECIFIC_OPTIONS = "-Ci- -Cr- -Co- -Os -Xs  -Cfvfpv3 -dNOCONSOLE";
+				FPC_SPECIFIC_OPTIONS = "-Ci- -Cr- -Co- -O2 -Xs -dNOCONSOLE";
 				FPC_UNITS_PATH = "-Fu\"$(PROJECT_DIR)\"";
 				GCC_C_LANGUAGE_STANDARD = c99;
 				GCC_DEBUGGING_SYMBOLS = default;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_FAST_MATH = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_OPTIMIZATION_LEVEL = s;
 				GCC_PREPROCESSOR_DEFINITIONS = "";
 				GCC_STRICT_ALIASING = YES;
-				GCC_THUMB_SUPPORT = NO;
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
@@ -1892,6 +2126,7 @@
 				GCC_WARN_SHADOW = YES;
 				GCC_WARN_STRICT_SELECTOR_MATCH = YES;
 				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNKNOWN_PRAGMAS = YES;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_LABEL = YES;
@@ -1902,21 +2137,18 @@
 					"\"$(SRCROOT)/../../../Library/SDL_net/\"",
 					"\"$(SRCROOT)/../../../Library/SDL_mixer/\"",
 				);
-				IPHONEOS_DEPLOYMENT_TARGET = 3.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
 				LLVM_LTO = NO;
 				ONLY_ACTIVE_ARCH = NO;
 				OTHER_CODE_SIGN_FLAGS = "";
-				OTHER_LDFLAGS = (
-					"-lz",
-					"-Wl,-no_order_inits",
-				);
+				OTHER_LDFLAGS = "-lz";
 				PREBINDING = NO;
 				PROVISIONING_PROFILE = "";
 				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				VALIDATE_PRODUCT = YES;
-				VALID_ARCHS = "armv7 armv6";
+				VALID_ARCHS = "armv7 x86_64 arm64";
 				WARNING_CFLAGS = (
 					"-Wall",
 					"-Wbad-function-cast",
@@ -1929,11 +2161,15 @@
 		61022D7D12305A2800B08935 /* Distro AppStore */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Hedgewars_Prefix.pch;
 				INFOPLIST_FILE = Info.plist;
+				PRODUCT_BUNDLE_IDENTIFIER = org.hedgewars.mobile;
 				PRODUCT_NAME = Hedgewars;
+				PROVISIONING_PROFILE = "";
 			};
 			name = "Distro AppStore";
 		};
@@ -1945,6 +2181,7 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 				PREBINDING = NO;
 				PRODUCT_NAME = fpc;
+				SKIP_INSTALL = YES;
 				ZERO_LINK = NO;
 			};
 			name = "Distro AppStore";
@@ -1965,24 +2202,33 @@
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				APPLY_RULES_IN_COPY_FILES = YES;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				CODE_SIGN_ENTITLEMENTS = "Entitlements-Distribution.plist";
 				CODE_SIGN_IDENTITY = "iPhone Distribution";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_BITCODE = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				FPC_COMMON_OPTIONS = "-l- -dIPHONEOS -Cs2000000 -B  -vwi -Sgix -Fi${PROJECT_DIR}";
-				FPC_COMPILER_BINARY_DIR = /usr/local/lib/fpc/2.7.1;
+				FPC_COMPILER_BINARY_DIR = /usr/local/lib/fpc/3.1.1;
 				FPC_MAIN_FILE = "$(PROJECT_DIR)/../../hedgewars/hwLibrary.pas";
 				FPC_RTL_UNITS_BASE = /usr/local/lib/fpc;
-				FPC_SPECIFIC_OPTIONS = "-dDEBUGFILE -O- -g -gl -gw2 -gt -ghttt -Xs- -Cfvfpv3";
+				FPC_SPECIFIC_OPTIONS = "-dDEBUGFILE -O- -g -gl -gw2 -gt -ghttt -Xs-";
 				FPC_UNITS_PATH = "-Fu\"$(PROJECT_DIR)\"";
 				GCC_C_LANGUAGE_STANDARD = c99;
 				GCC_DEBUGGING_SYMBOLS = full;
-				GCC_DYNAMIC_NO_PIC = YES;
+				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_FAST_MATH = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
 				GCC_STRICT_ALIASING = YES;
-				GCC_THUMB_SUPPORT = NO;
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
@@ -1997,6 +2243,7 @@
 				GCC_WARN_SHADOW = YES;
 				GCC_WARN_STRICT_SELECTOR_MATCH = YES;
 				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNKNOWN_PRAGMAS = YES;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_LABEL = YES;
@@ -2007,11 +2254,12 @@
 					"\"$(SRCROOT)/../../../Library/SDL_net/\"",
 					"\"$(SRCROOT)/../../../Library/SDL_mixer/\"",
 				);
-				IPHONEOS_DEPLOYMENT_TARGET = 3.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
 				ONLY_ACTIVE_ARCH = NO;
 				OTHER_LDFLAGS = (
 					"-lz",
-					"-Wl,-no_order_inits",
+					"-framework",
+					MessageUI,
 				);
 				PREBINDING = NO;
 				PROVISIONING_PROFILE = "";
@@ -2019,7 +2267,7 @@
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				VALIDATE_PRODUCT = YES;
-				VALID_ARCHS = "armv7 armv6";
+				VALID_ARCHS = "armv7 x86_64 arm64";
 				WARNING_CFLAGS = (
 					"-Wall",
 					"-Wbad-function-cast",
@@ -2032,11 +2280,15 @@
 		6137064C117B1CB3004EE44A /* Distro Adhoc */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = Hedgewars_Prefix.pch;
 				INFOPLIST_FILE = Info.plist;
+				PRODUCT_BUNDLE_IDENTIFIER = org.hedgewars.mobile;
 				PRODUCT_NAME = Hedgewars;
+				PROVISIONING_PROFILE = "";
 			};
 			name = "Distro Adhoc";
 		};
@@ -2048,6 +2300,7 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 				PREBINDING = NO;
 				PRODUCT_NAME = fpc;
+				SKIP_INSTALL = YES;
 				ZERO_LINK = NO;
 			};
 			name = "Distro Adhoc";
@@ -2092,6 +2345,7 @@
 				GCC_OPTIMIZATION_LEVEL = 0;
 				PREBINDING = NO;
 				PRODUCT_NAME = fpc;
+				SKIP_INSTALL = YES;
 			};
 			name = Debug;
 		};
@@ -2103,6 +2357,7 @@
 				GCC_ENABLE_FIX_AND_CONTINUE = NO;
 				PREBINDING = NO;
 				PRODUCT_NAME = fpc;
+				SKIP_INSTALL = YES;
 				ZERO_LINK = NO;
 			};
 			name = Release;
@@ -2112,12 +2367,21 @@
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				APPLY_RULES_IN_COPY_FILES = YES;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_BITCODE = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
 				FPC_COMMON_OPTIONS = "-l- -dIPHONEOS -Cs2000000 -B  -vwi -Sgix -Fi${PROJECT_DIR}";
-				FPC_COMPILER_BINARY_DIR = /usr/local/lib/fpc/2.6.0;
+				FPC_COMPILER_BINARY_DIR = /usr/local/lib/fpc/3.1.1;
 				FPC_MAIN_FILE = "$(PROJECT_DIR)/../../hedgewars/hwLibrary.pas";
 				FPC_RTL_UNITS_BASE = /usr/local/lib/fpc;
 				FPC_SPECIFIC_OPTIONS = "-Tiphonesim -dDEBUGFILE -O- -g -gl -gw2 -gt -ghttt -Xs-";
@@ -2126,10 +2390,10 @@
 				GCC_DEBUGGING_SYMBOLS = full;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_FAST_MATH = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
 				GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
 				GCC_STRICT_ALIASING = YES;
-				GCC_THUMB_SUPPORT = NO;
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
@@ -2144,6 +2408,7 @@
 				GCC_WARN_SHADOW = YES;
 				GCC_WARN_STRICT_SELECTOR_MATCH = YES;
 				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNKNOWN_PRAGMAS = YES;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_LABEL = YES;
@@ -2154,11 +2419,12 @@
 					"\"$(SRCROOT)/../../../Library/SDL_net/\"",
 					"\"$(SRCROOT)/../../../Library/SDL_mixer/\"",
 				);
-				IPHONEOS_DEPLOYMENT_TARGET = 3.0;
-				ONLY_ACTIVE_ARCH = NO;
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+				ONLY_ACTIVE_ARCH = YES;
 				OTHER_LDFLAGS = (
 					"-lz",
-					"-Wl,-no_order_inits",
+					"-framework",
+					MessageUI,
 				);
 				PREBINDING = NO;
 				PROVISIONING_PROFILE = "";
@@ -2166,7 +2432,7 @@
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				VALIDATE_PRODUCT = NO;
-				VALID_ARCHS = "armv7 armv6";
+				VALID_ARCHS = "armv7 x86_64 arm64";
 				WARNING_CFLAGS = (
 					"-Wall",
 					"-Wbad-function-cast",
@@ -2181,24 +2447,33 @@
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				APPLY_RULES_IN_COPY_FILES = YES;
-				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				CODE_SIGN_ENTITLEMENTS = "Entitlements-Development.plist";
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_BITCODE = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				FPC_COMMON_OPTIONS = "-l- -dIPHONEOS -Cs2000000 -B  -vwi -Sgix -Fi${PROJECT_DIR}";
-				FPC_COMPILER_BINARY_DIR = /usr/local/lib/fpc/2.6.0;
+				FPC_COMPILER_BINARY_DIR = /usr/local/lib/fpc/3.1.1;
 				FPC_MAIN_FILE = "$(PROJECT_DIR)/../../hedgewars/hwLibrary.pas";
 				FPC_RTL_UNITS_BASE = /usr/local/lib/fpc;
-				FPC_SPECIFIC_OPTIONS = "-Ci- -Cr- -Co- -Os -Xs  -Cfvfpv3 -dDEBUGFILE";
+				FPC_SPECIFIC_OPTIONS = "-Ci- -Cr- -Co- -O2 -Xs -dDEBUGFILE";
 				FPC_UNITS_PATH = "-Fu\"$(PROJECT_DIR)\"";
 				GCC_C_LANGUAGE_STANDARD = c99;
 				GCC_DEBUGGING_SYMBOLS = default;
-				GCC_DYNAMIC_NO_PIC = YES;
+				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_FAST_MATH = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_OPTIMIZATION_LEVEL = s;
 				GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
 				GCC_STRICT_ALIASING = YES;
-				GCC_THUMB_SUPPORT = NO;
 				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
@@ -2213,6 +2488,7 @@
 				GCC_WARN_SHADOW = YES;
 				GCC_WARN_STRICT_SELECTOR_MATCH = YES;
 				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNKNOWN_PRAGMAS = YES;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_LABEL = YES;
@@ -2223,12 +2499,13 @@
 					"\"$(SRCROOT)/../../../Library/SDL_net/\"",
 					"\"$(SRCROOT)/../../../Library/SDL_mixer/\"",
 				);
-				IPHONEOS_DEPLOYMENT_TARGET = 3.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
 				LLVM_LTO = NO;
 				ONLY_ACTIVE_ARCH = NO;
 				OTHER_LDFLAGS = (
 					"-lz",
-					"-Wl,-no_order_inits",
+					"-framework",
+					MessageUI,
 				);
 				PREBINDING = NO;
 				PROVISIONING_PROFILE = "";
@@ -2236,7 +2513,7 @@
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				VALIDATE_PRODUCT = NO;
-				VALID_ARCHS = "armv7 armv6";
+				VALID_ARCHS = "armv7 x86_64 arm64";
 				WARNING_CFLAGS = (
 					"-Wall",
 					"-Wbad-function-cast",
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.xcworkspace/contents.xcworkspacedata	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:">
+   </FileRef>
+</Workspace>
--- a/project_files/HedgewarsMobile/Info.plist	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Info.plist	Mon Nov 09 18:37:57 2015 +0100
@@ -16,34 +16,34 @@
 		<string>Icon-Small.png</string>
 		<string>Icon-Small-50.png</string>
 		<string>Icon-Small@2x.png</string>
+		<string>Icon-60@2x.png</string>
+		<string>Icon-76.png</string>
+		<string>Icon-76@2x.png</string>
 	</array>
 	<key>CFBundleIdentifier</key>
-	<string>org.hedgewars.mobile</string>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
 	<string>6.0</string>
 	<key>CFBundleName</key>
 	<string>${PRODUCT_NAME}</string>
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>2.0</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
 	<string>${HEDGEWARS_REVISION}</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.3.2</string>
 	<key>LSRequiresIPhoneOS</key>
 	<true/>
+	<key>UILaunchImageFile~ipad</key>
+	<string>Default-ipad</string>
 	<key>UIPrerenderedIcon</key>
 	<true/>
+	<key>UIRequiresFullScreen</key>
+	<true/>
 	<key>UIStatusBarHidden</key>
 	<true/>
-	<key>UILaunchImageFile~ipad</key>
-	<string>Default-ipad</string>
-	<key>UISupportedInterfaceOrientations~iphone</key>
-	<array>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
 	<key>UISupportedInterfaceOrientations~ipad</key>
 	<array>
 		<string>UIInterfaceOrientationPortrait</string>
@@ -51,5 +51,10 @@
 		<string>UIInterfaceOrientationLandscapeLeft</string>
 		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
+	<key>UISupportedInterfaceOrientations~iphone</key>
+	<array>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
 </dict>
 </plist>
Binary file project_files/HedgewarsMobile/Locale/English.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/English.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/English.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Turkish.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Turkish.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Turkish.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/ru.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/ru.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/ru.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/tr.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/tr.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/tr.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Resources/Frontend/Help Bubbles/helpabove.png has changed
Binary file project_files/HedgewarsMobile/Resources/Frontend/Help Bubbles/helpbottom.png has changed
Binary file project_files/HedgewarsMobile/Resources/Frontend/Help Bubbles/helpleft.png has changed
Binary file project_files/HedgewarsMobile/Resources/Frontend/Help Bubbles/helpplain.png has changed
Binary file project_files/HedgewarsMobile/Resources/Frontend/Help Bubbles/helpright.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-60@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-76.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-76@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/bullet.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/bullet@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/bullet_filled.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/bullet_filled@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/flower.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/flower@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/flower_filled.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/flower_filled@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/heart.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/heart@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/heart_filled.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/heart_filled@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/target.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/target@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/target_filled.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/target_filled@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/teams.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/teams@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/teams_filled.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/teams_filled@2x.png has changed
--- a/project_files/HedgewarsMobile/Resources/basicFlags.plist	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Resources/basicFlags.plist	Mon Nov 09 18:37:57 2015 +0100
@@ -266,5 +266,41 @@
 		<key>title</key>
 		<string>Get Away Time (%)</string>
 	</dict>
+	<dict>
+		<key>checkOverMax</key>
+		<false/>
+		<key>times1000</key>
+		<false/>
+		<key>command</key>
+		<string>e$airmines</string>
+		<key>default</key>
+		<integer>0</integer>
+		<key>image</key>
+		<string>Mine</string>
+		<key>max</key>
+		<integer>80</integer>
+		<key>min</key>
+		<integer>0</integer>
+		<key>title</key>
+		<string>Air Mines</string>
+	</dict>
+	<dict>
+		<key>checkOverMax</key>
+		<false/>
+		<key>times1000</key>
+		<false/>
+		<key>command</key>
+		<string>e$worldedge</string>
+		<key>default</key>
+		<integer>0</integer>
+		<key>image</key>
+		<string>Earth</string>
+		<key>max</key>
+		<integer>3</integer>
+		<key>min</key>
+		<integer>0</integer>
+		<key>title</key>
+		<string>World Edge</string>
+	</dict>
 </array>
 </plist>
--- a/project_files/HedgewarsMobile/Resources/credits.plist	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/HedgewarsMobile/Resources/credits.plist	Mon Nov 09 18:37:57 2015 +0100
@@ -3,9 +3,9 @@
 <plist version="1.0">
 <array>
 	<array>
-		<string>Andrey &quot;UnC0Rr&quot; Korotaev</string>
+		<string>Andrey &quot;unC0Rr&quot; Korotaev</string>
 		<string>Igor &quot;Displacer&quot; Ulyanov</string>
-		<string>Derek &quot;Nemo&quot; Pomery</string>
+		<string>Derek &quot;nemo&quot; Pomery</string>
 		<string>Martin &quot;Affect&quot; Boze</string>
 		<string>David &quot;Krawek&quot; Cuadrado</string>
 		<string>Martin &quot;Ttsmj&quot; Minarik</string>
@@ -13,12 +13,20 @@
 		<string>Vittorio &quot;Koda&quot; Giovara</string>
 		<string>Mario &quot;Smaxx&quot; Liebisch</string>
 		<string>Carlos &quot;Palewolf&quot; Vives</string>
-		<string>Richard &quot;Sheepluva&quot; Korlyi</string>
+		<string>Richard &quot;sheepluva&quot; Karolyi</string>
 		<string>Henning &quot;Prg&quot; Kühn</string>
 		<string>Henrik &quot;Henek&quot; Rostedt</string>
-		<string>John &quot;Mikade&quot; Lambert</string>
+		<string>John &quot;mikade&quot; Lambert</string>
 		<string>Mayur &quot;Zorg&quot; Pawashe</string>
 		<string>Richard &quot;Xeli&quot; Deurwaarder</string>
+		<string>Simeon Maxein</string>
+		<string>Meng Xiangyun</string>
+		<string>Stepan Podoskin</string>
+		<string>Szabolcs Orbàn</string>
+		<string>Drew Gottlieb</string>
+		<string>Ondrej Skopek</string>
+		<string>Julia Struchenko</string>
+		<string>Anton &quot;antonc27&quot; Malmygin</string>
 	</array>
 	<array>
 		<string>John &quot;Fizzy&quot; Dum</string>
@@ -26,7 +34,8 @@
 		<string>Stanko Tadić</string>
 		<string>Julien Koesten</string>
 		<string>Joshua O&apos;Sullivan</string>
-		<string>Nils Luck</string>
+		<string>Nils Lück</string>
+		<string>Guillaume Englert</string>
 		<string>Trey Perry</string>
 	</array>
 	<array>
@@ -42,16 +51,16 @@
 		<string>Jie Luo</string>
 		<string>Andrey Korotaev</string>
 		<string>Nina Kuisma</string>
-		<string>Antoine Turmel</string>
-		<string>Peter Hüwe, Mario Liebisch, Richard Karolyi</string>
+		<string>Antoine Turmel, Clement Woitrain, Matisumi</string>
+		<string>Peter Hüwe, Mario Liebisch, Richard Karolyi, Wuzzy</string>
 		<string>Talos Kriti</string>
-		<string>Luca Bonora, Marco Bresciani</string>
-		<string>Adam Etienne</string>
+		<string>Luca Bonora, Marco Bresciani, Gianfranco Costamagna</string>
+		<string>Adam Etienne, Marco Bresciani</string>
 		<string>Anthony Bellew</string>
 		<string>Lukas Urbonas</string>
 		<string>Maciej Mroziński, Wojciech Latkowski, Piotr Mitana, Maciej Górny</string>
 		<string>Fábio Canário</string>
-		<string>Andrey Korotaev</string>
+		<string>Andrey Korotaev, Vitaly Novichkov, Anton Malmygin</string>
 		<string>Jose Riha</string>
 		<string>Carlos Vives</string>
 		<string>Niklas Grahn, Henrik Rostedt</string>
@@ -80,6 +89,14 @@
 		<string>Lua game modes and missions</string>
 		<string>Desktop frontend improvements</string>
 		<string>Android port</string>
+		<string>Android netplay, portability abstraction</string>
+		<string>WebGL port, some pas2c and GLES2 work</string>
+		<string>Video recording</string>
+		<string>Campaign support, first campaign</string>
+		<string>Keybinds, feedback, maps and hats interfaces</string>
+		<string>Login dialogs, frontend improvements</string>
+		<string>Icegun weapon</string>
+		<string>Current developer of iPhone/iPad versions</string>
 	</array>
 	<array>
 		<string>Main graphics</string>
@@ -88,6 +105,7 @@
 		<string></string>
 		<string></string>
 		<string></string>
+		<string></string>
 		<string>Some hats</string>
 	</array>
 	<array>
--- a/project_files/frontlib/hwconsts.h	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/frontlib/hwconsts.h	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 /*
  * Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  * Copyright (c) 2012 Simeon Maxein <smaxein@googlemail.com>
  *
  * This program is free software; you can redistribute it and/or modify
--- a/project_files/frontlib/net/netconn.c	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/frontlib/net/netconn.c	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,7 @@
 /*
  * Hedgewars, a free turn based strategy game
  * Copyright (c) 2006-2008 Igor Ulyanov <iulyanov@gmail.com>
- * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
  * Copyright (c) 2012 Simeon Maxein <smaxein@googlemail.com>
  *
  * This program is free software; you can redistribute it and/or modify
--- a/project_files/hwc/CMakeLists.txt	Sun Apr 26 13:02:38 2015 +0100
+++ b/project_files/hwc/CMakeLists.txt	Mon Nov 09 18:37:57 2015 +0100
@@ -40,6 +40,7 @@
 list(REMOVE_ITEM engine_sources_pas "${CMAKE_SOURCE_DIR}/hedgewars/pas2cSystem.pas")
 list(REMOVE_ITEM engine_sources_pas "${CMAKE_SOURCE_DIR}/hedgewars/pas2cRedo.pas")
 list(REMOVE_ITEM engine_sources_pas "${CMAKE_SOURCE_DIR}/hedgewars/hwLibrary.pas")
+list(REMOVE_ITEM engine_sources_pas "${CMAKE_SOURCE_DIR}/hedgewars/uMatrix.pas")
 
 #remove and readd hwengine so that it is compiled first, compiling every other file in the process
 list(REMOVE_ITEM engine_sources_pas ${CMAKE_SOURCE_DIR}/hedgewars/hwengine.pas)
--- a/share/Info.plist.in	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/Info.plist.in	Mon Nov 09 18:37:57 2015 +0100
@@ -23,7 +23,7 @@
     <key>CFBundleShortVersionString</key>
     <string>${HEDGEWARS_VERSION}</string>
     <key>NSHumanReadableCopyright</key>
-    <string>Copyright © 2004-2014, Hedgewars Project</string>
+    <string>Copyright © 2004-2015, Hedgewars Project</string>
     <key>NSAppleScriptEnabled</key>
     <true/>
     <key>LSRequiresNativeExecution</key>
@@ -45,6 +45,8 @@
     </array>
     <key>LSMinimumSystemVersion</key>
     <string>${minimum_macosx_version}</string>
+    <key>NSHighResolutionCapable</key>
+    <string>True</string>
     <key>SUPublicDSAKeyFile</key>
     <string>dsa_pub.pem</string>
     <key>SUFeedURL</key>
--- a/share/hedgewars.appdata.xml	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars.appdata.xml	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <application>
  <id type="desktop">hedgewars.desktop</id>
- <licence>GFDL</licence>
+ <metadata_license>GFDL</metadata_license>
+ <name>Hedgewars</name>
+ <summary>Funny turn-based artillery game, featuring fighting Hedgehogs!</summary>
  <description>
   <p>
    Hedgewars is a turn based strategy, artillery, action and comedy game, featuring the antics of pink hedgehogs with attitude as they battle from the depths of hell to the depths of space.
Binary file share/hedgewars/Data/Forts/CakeR.png has changed
Binary file share/hedgewars/Data/Forts/CastleR.png has changed
Binary file share/hedgewars/Data/Forts/EvilChickenR.png has changed
Binary file share/hedgewars/Data/Forts/FlowerhogR.png has changed
Binary file share/hedgewars/Data/Forts/HydrantR.png has changed
Binary file share/hedgewars/Data/Forts/LegoR.png has changed
Binary file share/hedgewars/Data/Forts/PlaneR.png has changed
Binary file share/hedgewars/Data/Forts/StatueR.png has changed
Binary file share/hedgewars/Data/Forts/SteelTowerR.png has changed
Binary file share/hedgewars/Data/Forts/TankR.png has changed
Binary file share/hedgewars/Data/Forts/UFOR.png has changed
Binary file share/hedgewars/Data/Forts/WoodR.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_balls.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_bubbles.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_cheese.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_crosshair.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_cyborg.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_danger_fire.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_danger_stripes.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_duckhead.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_eyes.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_firstaid.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_flames.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_flower.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_girder.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_grenade.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_heart.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_hellish.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_hw.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_hw2.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_kiwi.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_piet.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_sine.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_skull.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_star.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_test.png has changed
Binary file share/hedgewars/Data/Graphics/Flags/cm_waves.png has changed
Binary file share/hedgewars/Data/Graphics/Graves/Flower.png has changed
Binary file share/hedgewars/Data/Graphics/Graves/Rubberduck.png has changed
Binary file share/hedgewars/Data/Graphics/Graves/Statue.png has changed
Binary file share/hedgewars/Data/Graphics/Hedgehog/amAirMine.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Training/Challenge_-_Speed_Shoppa_-_Hedgelove@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Training/Challenge_-_Speed_Shoppa_-_Ropes@2x.png has changed
Binary file share/hedgewars/Data/Graphics/Missions/Training/Challenge_-_Speed_Shoppa_-_ShoppaKing@2x.png has changed
Binary file share/hedgewars/Data/Graphics/TARDIS.png has changed
Binary file share/hedgewars/Data/Graphics/Timebox.png has changed
Binary file share/hedgewars/Data/Graphics/missions.png has changed
--- a/share/hedgewars/Data/Locale/campaigns_de.txt	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/campaigns_de.txt	Mon Nov 09 18:37:57 2015 +0100
@@ -1,43 +1,43 @@
-A_Classic_Fairytale-first_blood.desc="Hilf Leaks a lot dabei, sein Training zu absolvieren und zu einem richtigen Igelkrieger zu werden. Du wirst in der Kunst des Seils, Fallschirms, Shoryukens und der Desert Eagle trainiert."
+A_Classic_Fairytale-first_blood.desc="Hilf Undichte Stelle dabei, sein Training zu absolvieren und zu einem richtigen Igelkrieger zu werden. Du wirst in der Kunst des Seils, Fallschirms, Shoryukens und der Desert Eagle trainiert."
 
-A_Classic_Fairytale-shadow.desc="Leaks a lot und Dense Cloud gehen für die Jagd raus. Sei auf Gefahren im Wald gefasst. Denk dran, bedenke deine Entscheidungen gut."
+A_Classic_Fairytale-shadow.desc="Undichte Stelle und Dichte Wolke gehen für die Jagd raus. Sei auf Gefahren im Wald gefasst. Denk dran, bedenke deine Entscheidungen gut."
 
-A_Classic_Fairytale-journey.desc="Leaks a lot muss zur anderen Seite der Insel gehen. Sei schnell und vorsichtig."
+A_Classic_Fairytale-journey.desc="Undichte Stelle muss zur anderen Seite der Insel gehen. Sei schnell und vorsichtig."
 
-A_Classic_Fairytale-united.desc="Nach seiner langen Reise kehrte Leaks a lot endlich wieder zum Dorf zurück. Allerdings gibt es keine Zeit zum Ausruhen. Du musst das Dorf von der Rage der Kannibalen verteidigen."
+A_Classic_Fairytale-united.desc="Nach seiner langen Reise kehrte Undichte Stelle endlich wieder zum Dorf zurück. Allerdings gibt es keine Zeit zum Ausruhen. Du musst das Dorf von der Rage der Kannibalen verteidigen."
 
-A_Classic_Fairytale-backstab.desc="Die monströsen Kannibalen jagen Leaks a lot und seine Freunde. Besiege sie erneut und beschütze deine Freunde. Benutze deine Ressourcen entsprechend, um die eintreffenden Feinde zu besiegen!"
+A_Classic_Fairytale-backstab.desc="Die monströsen Kannibalen jagen Undichte Stelle und seine Freunde. Besiege sie erneut und beschütze deine Freunde. Benutze deine Ressourcen entsprechend, um die eintreffenden Feinde zu besiegen!"
 
-A_Classic_Fairytale-dragon.desc="Leaks a lot muss auf die andere Seite des Sees kommen. Werd zum Seilprofi und vermeide es, von feindlichen Schüssen getroffen zu werden."
+A_Classic_Fairytale-dragon.desc="Undichte Stelle muss auf die andere Seite des Sees kommen. Werd zum Seilprofi und vermeide es, von feindlichen Schüssen getroffen zu werden."
 
-A_Classic_Fairytale-family.desc="Leaks a lot muss erneut seine Freunde retten. Eliminiere die feindlichen Igel und befreie deine Kameraden. Benutze deine Ressourcen vorsichtig, weil sie begrenzt sind. Bohr ein paar Löcher an den richtigen Stellen und nähere dich der Prinzessin."
+A_Classic_Fairytale-family.desc="Undichte Stelle muss erneut seine Freunde retten. Eliminiere die feindlichen Igel und befreie deine Kameraden. Benutze deine Ressourcen vorsichtig, weil sie begrenzt sind. Bohr ein paar Löcher an den richtigen Stellen und nähere dich der Prinzessin."
 
-A_Classic_Fairytale-queen.desc="Leaks a lot muss noch einmal kämpfen. Um zu gewinnen, muss er den Veräräter bekämpfen und alle verfügbaren Ressourcen benutzen. Besieg den Feind!"
+A_Classic_Fairytale-queen.desc="Undichte Stelle muss noch einmal kämpfen. Um zu gewinnen, muss er den Veräräter bekämpfen und alle verfügbaren Ressourcen benutzen. Besieg den Feind!"
 
-A_Classic_Fairytale-enemy.desc="Was für eine umwerfende Wendung! Leaks a lot muss mit den … »Kannibalen« gegen den gemeinsamen Feind – die bösen Cyborgs – kämpfen!"
+A_Classic_Fairytale-enemy.desc="Was für eine umwerfende Wendung! Undichte Stelle muss mit den … »Kannibalen« gegen den gemeinsamen Feind – die bösen Cyborgs – kämpfen!"
 
-A_Classic_Fairytale-epil.desc="Gratulation! Leaks a lot kann endlich in Frieden gehen und von seinen neuen Freunden und seinem Stamm angepriesen werden. Sei stolz auf das, was du erreicht hast! Du kannst vorherige Missionen wieder spielen und andere mögliche Enden sehen."
+A_Classic_Fairytale-epil.desc="Gratulation! Undichte Stelle kann endlich in Frieden gehen und von seinen neuen Freunden und seinem Stamm angepriesen werden. Sei stolz auf das, was du erreicht hast! Du kannst vorherige Missionen wieder spielen und andere mögliche Enden sehen."
 
-A_Space_Adventure-cosmos.desc="Hogera, der Igelplanet, wird bald von einem riesigen Meteroid getroffen. In diesem Wettlauf ums Überleben musst du PAdIs besten Piloten, Hog Solo, in einer Weltraumreise um die Nachbarplaneten führen, um alle 4 Teil des lang verschollenem Antigravitationsgeräts zu finden!"
+A_Space_Adventure-cosmos.desc="Hogera, der Igelplanet, wird bald von einem riesigen Meteroid getroffen. In diesem Wettlauf ums Überleben musst du PAdIs besten Piloten, Igel Einsam, in einer Weltraumreise um die Nachbarplaneten führen, um alle 4 Teil des lang verschollenem Antigravitationsgeräts zu finden!"
 
-A_Space_Adventure-moon01.desc="Hog Solo ist auf dem Mond gelandet, um seine fliegende Untertasse aufzutanken, aber Prof. Hogevil war zuerst da und hat einen Hinterhalt aufgestellt! Rette die gefangenen PAdI-Forscher und verscheuche Prof. Hogevil!"
+A_Space_Adventure-moon01.desc="Igel Einsam ist auf dem Mond gelandet, um seine fliegende Untertasse aufzutanken, aber Prof. Bösigel war zuerst da und hat einen Hinterhalt aufgestellt! Rette die gefangenen PAdI-Forscher und verscheuche Prof. Bösigel!"
 
-A_Space_Adventure-moon02.desc="Hog Solo besucht einen Eremiten, einen alten PAdI-Veteran, der im Mond lebt, um Prof. Hogevil auszuspionieren. Allerdings muss er den Eremiten, Soneek the Crazy Runner, zuerst in einem Wettlauf besiegen!"
+A_Space_Adventure-moon02.desc="Igel Einsam besucht einen Eremiten, einen alten PAdI-Veteran, der im Mond lebt, um Prof. Bösigel auszuspionieren. Allerdings muss er den Eremiten, Verrückter Renner, zuerst in einem Wettlauf besiegen!"
 
-A_Space_Adventure-ice01.desc="Willkommen auf dem Planeten des Eises. Hier ist es so kalt, dass Hog Solos meiste Waffe nicht funktionieren werden. Du musst dir das verlorene Teil von dem Banditenanführer Thanta ergattern, indem du die Waffen, die du hier findest, verwendest!"
+A_Space_Adventure-ice01.desc="Willkommen auf dem Planeten des Eises. Hier ist es so kalt, dass die meisten Waffen von Igel Einsam nicht funktionieren werden. Du musst dir das verlorene Teil von dem Banditenanführer Thanta ergattern, indem du die Waffen, die du hier findest, verwendest!"
 
-A_Space_Adventure-ice02.desc="Hog Solo konnt nicht einfach nur den Eisplaneten besuchen, ohne das Olympiastadion des Untertassenfliegens zu besuchen! In dieser Mission kannst du deine Flugkünste unter Beweis stellen und deinen Platz unter den Besten einnehmen!"
+A_Space_Adventure-ice02.desc="Igel Einsam konnt nicht einfach nur den Eisplaneten besuchen, ohne das Olympiastadion des Untertassenfliegens zu besuchen! In dieser Mission kannst du deine Flugkünste unter Beweis stellen und deinen Platz unter den Besten einnehmen!"
 
-A_Space_Adventure-desert01.desc="Du must auf dem Planeten aus Sand gelandet! Hog Solo muss das fehlende Teil in den Berkwerksstollen finden. Sei vorsichtig, weil bösartige Schmuggler nur darauf warten, dich anzugreifen und auszurauben!"
+A_Space_Adventure-desert01.desc="Du must auf dem Planeten aus Sand gelandet! Igel Einsam muss das fehlende Teil in den Berkwerksstollen finden. Sei vorsichtig, weil bösartige Schmuggler nur darauf warten, dich anzugreifen und auszurauben!"
 
-A_Space_Adventure-desert02.desc="Hog Solo suchte nach dem Teil in diesem Tunnel, als er unerwarteterweise anfing, geflutet zu werden! Komm so schnell wie möglich zur Oberfläche und pass auf, keine Mine auszulösen."
-A_Space_Adventure-desert03.desc="Hog Solo hat etwas Zeit, um sein Funkflugzeug zu fliegen und etwas Spaß zu haben. Flieg das Funkflugzeug und triff alle Ziele!"
+A_Space_Adventure-desert02.desc="Igel Einsam suchte nach dem Teil in diesem Tunnel, als er unerwarteterweise anfing, geflutet zu werden! Komm so schnell wie möglich zur Oberfläche und pass auf, keine Mine auszulösen."
+A_Space_Adventure-desert03.desc="Igel Einsam hat etwas Zeit, um sein Funkflugzeug zu fliegen und etwas Spaß zu haben. Flieg das Funkflugzeug und triff alle Ziele!"
 A_Space_Adventure-fruit01.desc="Auf dem Obstplaneten laufen die Dinge nicht so gut. Igel sammeln kein Obst, sondern sie bereiten sich auf den Kampf vor. Du musst dich entscheiden, ob du kämpfen oder fliehen wirst."
-A_Space_Adventure-fruit02.desc="Hog Solo nähert sich dem verlorenen Teil des Obstplaneten. Wird ihn Captain Lime dabei helfen, das Teil zu besorgen? Oder nicht?"
+A_Space_Adventure-fruit02.desc="Igel Einsam nähert sich dem verlorenen Teil des Obstplaneten. Wird ihn Leutnant Limone dabei helfen, das Teil zu besorgen? Oder nicht?"
 
-A_Space_Adventure-fruit03.desc="Hog Solo has sich verlaufen und ist in den Hinterhalt der Roten Erdbeeren geraten. Hilf ihm, sie zu eliminieren, um etwas zusätzliche Munition für die Mission »Getting to the device« zu gewinnen."
+A_Space_Adventure-fruit03.desc="Igel Einsam has sich verlaufen und ist in den Hinterhalt der Roten Erdbeeren geraten. Hilf ihm, sie zu eliminieren, um etwas zusätzliche Munition für die Mission »Zum Greifen nah« zu gewinnen."
 
-A_Space_Adventure-death01.desc="Auf dem Todesplaneten, dem sterilsten Planeten in der Gegend, ist Hog Solo ganz kurz davor, das letzte Teil des Geräts zu holen! Allerdings erwartet ihn eine unangenehme Überraschnug."
+A_Space_Adventure-death01.desc="Auf dem Todesplaneten, dem sterilsten Planeten in der Gegend, ist Igel Einsam ganz kurz davor, das letzte Teil des Geräts zu holen! Allerdings erwartet ihn eine unangenehme Überraschnug."
 
-A_Space_Adventure-death02.desc="Hog Solo ist wieder in eine schwierige Situation geraten. Hilf ihm, die »5 tödlichen Igel« in ihrem eigenem Spiel zu besiegen!"
-A_Space_Adventure-final.desc="Hog Solo muss ein paar Sprengkörper, die auf dem Meterioden platziert wurden, detonieren. Hilf ihm, diese Mission zu beenden, ohne verletzt zu werden!"
+A_Space_Adventure-death02.desc="Igel Einsam ist wieder in eine schwierige Situation geraten. Hilf ihm, die »5 tödlichen Igel« in ihrem eigenem Spiel zu besiegen!"
+A_Space_Adventure-final.desc="Igel Einsam muss ein paar Sprengkörper, die auf dem Meteriot platziert wurden, detonieren. Hilf ihm, diese Mission zu beenden, ohne verletzt zu werden!"
--- a/share/hedgewars/Data/Locale/de.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/de.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -1,1158 +1,1824 @@
 locale = {
---      [":("] = "",
---      ["!!!"] = "",
---      ["..."] = "",
---      ["011101000"] = "", -- A_Classic_Fairytale:dragon
---      ["011101001"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:family, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
---      ["+1 to a Bottom Feeder for killing anyone"] = "", -- Mutant
---      ["+1 to a Mutant for killing anyone"] = "", -- Mutant
---      ["-1 to anyone for a suicide"] = "", -- Mutant
---      ["+2 for becoming a Mutant"] = "", -- Mutant
---      ["30 minutes later..."] = "", -- A_Classic_Fairytale:shadow
---      ["About a month ago, a cyborg came and told us that you're the cannibals!"] = "", -- A_Classic_Fairytale:enemy
-	["Accuracy Bonus!"] = "Präzisions-Bonus!",
---      ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
---      ["Achievement Unlocked"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_That_Sinking_Feeling, Tumbler
---      ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
---      ["???"] = "", -- A_Classic_Fairytale:backstab
---      ["Actually, you aren't worthy of life! Take this..."] = "", -- A_Classic_Fairytale:shadow
---      ["A cy-what?"] = "", -- A_Classic_Fairytale:enemy
---      ["Advanced Repositioning Mode"] = "", -- Construction_Mode
---      ["Adventurous"] = "", -- A_Classic_Fairytale:journey
---      ["a frenetic Hedgewars mini-game"] = "", -- Frenzy
---      ["Africa"] = "", -- Continental_supplies
---      ["After Leaks A Lot betrayed his tribe, he joined the cannibals..."] = "", -- A_Classic_Fairytale:first_blood
---      ["After the shock caused by the enemy spy, Leaks A Lot and Dense Cloud went hunting to relax."] = "", -- A_Classic_Fairytale:shadow
---      ["Again with the 'cannibals' thing!"] = "", -- A_Classic_Fairytale:enemy
---      ["Aggressively removes enemy hedgehogs."] = "", -- Construction_Mode
---      ["a Hedgewars challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
-	["a Hedgewars mini-game"] = "ein Hedgewars Mini-Spiel", -- Space_Invasion, The_Specialists
---      ["a Hedgewars tag game"] = "", -- Mutant
---      ["AHHh, home sweet home.  Made it in %d seconds."] = "", -- ClimbHome
-	["Aiming Practice"] = "Zielübung", --Bazooka, Shotgun, SniperRifle
---      ["Air Attack"] = "", -- Construction_Mode
---      ["A leap in a leap"] = "", -- A_Classic_Fairytale:first_blood
---      ["A little gift from the cyborgs"] = "", -- A_Classic_Fairytale:shadow
---      ["All gone...everything!"] = "", -- A_Classic_Fairytale:enemy
---      ["Allows free teleportation between other nodes."] = "", -- Construction_Mode
---      ["Allows placement of girders, rubber-bands, mines, sticky mines and barrels."] = "", -- Construction_Mode
---      ["Allows placement of structures."] = "", -- Construction_Mode
---      ["Allows the placement of weapons, utiliites, and health crates."] = "", -- Construction_Mode
---      ["All right, we just need to get to the other side of the island!"] = "", -- A_Classic_Fairytale:journey
---      ["All walls touched!"] = "", -- WxW
-	["Ammo Depleted!"] = "Munition erschöpft!",
-	["ammo extended!"] = "Munition aufgestockt!",
-	["Ammo is reset at the end of your turn."] = "Munition wird am Ende des Spielzuges zurückgesetzt.",
-	["Ammo Maniac!"] = "Munitionsverrückter!",
-	["Ammo"] = "Munition",
---      ["And how am I alive?!"] = "", -- A_Classic_Fairytale:enemy
---      ["And so happenned that Leaks A Lot failed to complete the challenge! He landed, pressured by shame..."] = "", -- A_Classic_Fairytale:first_blood
---      ["And so it began..."] = "", -- A_Classic_Fairytale:first_blood
---      ["...and so the cyborgs took over the world..."] = "", -- A_Classic_Fairytale:shadow
---      ["And so they discovered that cyborgs weren't invulnerable..."] = "", -- A_Classic_Fairytale:journey
---      ["And where's all the weed?"] = "", -- A_Classic_Fairytale:dragon
---      ["And you believed me? Oh, god, that's cute!"] = "", -- A_Classic_Fairytale:journey
---      ["Anno 1032: [The explosion will make a strong push ~ Wide range, wont affect hogs close to the target]"] = "", -- Continental_supplies
-
---      ["Antarctica"] = "", -- Continental_supplies
---      ["Antarctic summer: - Will give you one girder/mudball and two sineguns/portals every fourth turn."] = "", -- Continental_supplies
---      ["Area"] = "", -- Continental_supplies
---      ["Are we there yet?"] = "", -- A_Classic_Fairytale:shadow
---      ["Are you accusing me of something?"] = "", -- A_Classic_Fairytale:backstab
---      ["Are you saying that many of us have died for your entertainment?"] = "", -- A_Classic_Fairytale:enemy
---      ["Artur Detour"] = "", -- A_Classic_Fairytale:queen
---      ["As a reward for your performance, here's some new technology!"] = "", -- A_Classic_Fairytale:dragon
---      ["a shoppa minigame"] = "", -- WxW
---      ["Asia"] = "", -- Continental_supplies
---      ["Assault Team"] = "", -- A_Classic_Fairytale:backstab
---      ["As the ammo is sparse, you might want to reuse ropes while mid-air.|"] = "", -- A_Classic_Fairytale:dragon
---      ["As the challenge was completed, Leaks A Lot set foot on the ground..."] = "", -- A_Classic_Fairytale:first_blood
---      ["As you can see, there is no way to get on the other side!"] = "", -- A_Classic_Fairytale:dragon
---      ["Attack From Rope"] = "", -- WxW
---      ["Australia"] = "", -- Continental_supplies
-	["Available points remaining: "] = "Verfügbare Punkte verbleibend:",
---      ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
---      ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
---      ["[Backspace]"] = "",
---      ["Backstab"] = "", -- A_Classic_Fairytale:backstab
---      ["Bad Team"] = "", -- User_Mission_-_The_Great_Escape
---      ["Ballgun"] = "", -- Construction_Mode
---      ["Bamboo Thicket"] = "",
-	["Barrel Eater!"] = "Fassfresser!",
-	["Barrel Launcher"] = "Fasswerfer",
---      ["Barrel Placement Mode"] = "", -- Construction_Mode
---      ["Baseball Bat"] = "", -- Construction_Mode
---      ["Baseballbat"] = "", -- Continental_supplies
-	["Bat balls at your enemies and|push them into the sea!"] = "Schlage Bälle auf deine Widersacher|und lass sie ins Meer fallen!",
-	["Bat your opponents through the|baskets and out of the map!"] = "Schlage deine Widersacher durch|die Körbe und aus der Karte hinaus!",
---      ["Bazooka"] = "", -- Construction_Mode, Frenzy, A_Space_Adventure:death02
-	["Bazooka Training"] = "Bazooka-Training",
---      ["Beep Loopers"] = "", -- A_Classic_Fairytale:queen
-	["Best laps per team: "] = "Beste Rundenzeiten pro Team: ",
-	["Best Team Times: "] = "Beste Team-Zeiten: ",
---      ["Beware, though! If you are slow, you die!"] = "", -- A_Classic_Fairytale:dragon
---      ["Bio-Filter"] = "", -- Construction_Mode
---      ["Biomechanic Team"] = "", -- A_Classic_Fairytale:family
---      ["Birdy"] = "", -- Construction_Mode
---      ["Blender"] = "", -- A_Classic_Fairytale:family
---      ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
---      ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
---      ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
-	["Bloody Rookies"] = "Blutige Anfänger", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
---      ["Blowtorch"] = "", -- Construction_Mode, Frenzy
---      ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
---      ["Bone Jackson"] = "", -- A_Classic_Fairytale:backstab
---      ["Bonely"] = "", -- A_Classic_Fairytale:shadow
-	["Boom!"] = "Bumm!",
-	["BOOM!"] = "KABUMM!",
-	["Boss defeated!"] = "Boss wurde besiegt!",
-	["Boss Slayer!"] = "Boss-Töter!",
---      ["Brain Blower"] = "", -- A_Classic_Fairytale:journey
---      ["Brainiac"] = "", -- A_Classic_Fairytale:epil, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
---      ["Brainila"] = "", -- A_Classic_Fairytale:united
---      ["Brain Stu"] = "", -- A_Classic_Fairytale:united
---      ["Brain Teaser"] = "", -- A_Classic_Fairytale:backstab
---      ["Brutal Lily"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil
---      ["Brutus"] = "", -- A_Classic_Fairytale:backstab
---      ["Build a fortress and destroy your enemy."] = "", -- Construction_Mode
-    ["Build a track and race."] = "Konstruiere eine Strecke und mach ein Wettrennen.",
---      ["Bullseye"] = "", -- A_Classic_Fairytale:dragon
---      ["But it proved to be no easy task!"] = "", -- A_Classic_Fairytale:dragon
---      ["But that's impossible!"] = "", -- A_Classic_Fairytale:backstab
---      ["But the ones alive are stronger in their heart!"] = "", -- A_Classic_Fairytale:enemy
---      ["But...we died!"] = "", -- A_Classic_Fairytale:backstab
---      ["But where can we go?"] = "", -- A_Classic_Fairytale:united
---      ["But why would they help us?"] = "", -- A_Classic_Fairytale:backstab
---      ["But you're cannibals. It's what you do."] = "", -- A_Classic_Fairytale:enemy
---      ["But you said you'd let her go!"] = "", -- A_Classic_Fairytale:journey
---      ["Cake"] = "", -- Construction_Mode
---      ["Call me Beep! Well, 'cause I'm such a nice...person!"] = "", -- A_Classic_Fairytale:family
---      ["Cannibals"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:first_blood
---      ["Cannibal Sentry"] = "", -- A_Classic_Fairytale:journey
---      ["Cannibals?! You're the cannibals!"] = "", -- A_Classic_Fairytale:enemy
-	["CAPTURE THE FLAG"] = "EROBERE DIE FAHNE",
-	["Careless"] = "Achtlos",
---      ["Carol"] = "", -- A_Classic_Fairytale:family
---      ["CHALLENGE COMPLETE"] = "", -- User_Mission_-_RCPlane_Challenge
-	["Change Weapon"] = "Waffenwechsel",
---      ["changing range from %i%% to %i%% with period of %i msec"] = "", -- Gravity
---      ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
---      ["Cleaver"] = "", -- Construction_Mode
---      ["Cleaver Placement Mode"] = "", -- Construction_Mode
---      ["Climber"] = "", -- ClimbHome
---      ["Climb Home"] = "", -- ClimbHome
---      ["Clowns"] = "", -- User_Mission_-_Nobody_Laugh
-	["Clumsy"] = "Hoppla",
---      ["Cluster Bomb"] = "", -- Construction_Mode
---      ["Cluster Bomb MASTER!"] = "", -- Basic_Training_-_Cluster_Bomb
---      ["Cluster Bomb Training"] = "", -- Basic_Training_-_Cluster_Bomb
-	["Codename: Teamwork"] = "Code-Name: Teamwork",
---      ["Collateral Damage"] = "", -- A_Classic_Fairytale:journey
---      ["Collateral Damage II"] = "", -- A_Classic_Fairytale:journey
---      ["Collect all the crates, but remember, our time in this life is limited!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
---      ["Come closer, so that your training may continue!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Compete to use as few planes as possible!"] = "", -- User_Mission_-_RCPlane_Challenge
-	["Complete the track as fast as you can!"] = "Durchlaufe die Strecke so schnell du kannst!",
---      ["COMPLETION TIME"] = "", -- User_Mission_-_Rope_Knock_Challenge
---      ["Configuration accepted."] = "", -- WxW
---      ["Congratulations"] = "", -- Basic_Training_-_Rope
-	["Congratulations!"] = "Gratulation!",
---      ["Congratulations! You needed only half of time|to eliminate all targets."] = "", -- Basic_Training_-_Cluster_Bomb
---      ["Congratulations! You've completed the Rope tutorial! |- Tutorial ends in 10 seconds!"] = "", -- Basic_Training_-_Rope
-	["Congratulations! You've eliminated all targets|within the allowed time frame."] = "Gratulation! Du hast alle Ziele innerhalb der|verfügbaren Zeit ausgeschaltet.", --Bazooka, Shotgun, SniperRifle
---      ["CONSTRUCTION MODE"] = "", -- Construction_Mode
---      ["Construction Station"] = "", -- Construction_Mode
---      ["Continental supplies"] = "", -- Continental_supplies
-	["Control pillars to score points."] = "Kontrolliere die Säulen um Punkte zu erhalten.",
---      ["Core"] = "", -- Construction_Mode
---      ["Corporationals"] = "", -- A_Classic_Fairytale:queen
---      ["Corpsemonger"] = "", -- A_Classic_Fairytale:shadow
---      ["Corpse Thrower"] = "", -- A_Classic_Fairytale:epil
---      ["Cost"] = "", -- Construction_Mode
---      ["Crate Placement Tool"] = "", -- Construction_Mode
---      ["Crates Left:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Cricket time: [Drop a fireable mine! ~ Will work if fired close to your hog & far away from enemy ~ 1 sec]"] = "", -- Continental_supplies
---      ["Current setting is "] = "", -- Gravity
-	["Cybernetic Empire"] = "Kybernetisches Imperium",
---      ["Cyborg. It's what the aliens call themselves."] = "", -- A_Classic_Fairytale:enemy
---      ["Dahmer"] = "", -- A_Classic_Fairytale:backstab
-	["DAMMIT, ROOKIE! GET OFF MY HEAD!"] = "VERDAMMT, REKRUT! RUNTER VON MEINEM KOPF!",
-	["DAMMIT, ROOKIE!"] = "VERDAMMT, REKRUT!",
---      ["Dangerous Ducklings"] = "",
-	["Deadweight"] = "Gravitus",
---      ["Decrease"] = "", -- Continental_supplies
---      ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
---      ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
---      ["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
---      ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
---      ["Defend your core from the enemy."] = "", -- Construction_Mode
---      ["Defend yourself!|Hint: You can get tips on using weapons by moving your mouse over them in the weapon selection menu"] = "", -- A_Classic_Fairytale:shadow
---      ["Dematerializes weapons and equipment carried by enemy hedgehogs."] = "", -- Construction_Mode
-	["Demolition is fun!"] = "Zerstörung macht Spaß!",
---      ["Dense Cloud"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
---      ["Dense Cloud must have already told them everything..."] = "", -- A_Classic_Fairytale:shadow
-	["Depleted Kamikaze!"] = "Munitionsloses Kamikaze!",
---      ["Desert Eagle"] = "", -- Construction_Mode, A_Space_Adventure:death02
---      ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
-	["Destroy invaders to score points."] = "Zerstöre die Angreifer um Punkte zu erhalten.",
---      ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
---      ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
---      ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
---      ["Did you see him coming?"] = "", -- A_Classic_Fairytale:shadow
---      ["Did you warn the village?"] = "", -- A_Classic_Fairytale:shadow
---      ["Die, die, die!"] = "", -- A_Classic_Fairytale:dragon
---      ["Disguise as a Rockhopper Penguin: [Swap place with a random enemy hog in the circle]"] = "", -- Continental_supplies
---      ["Dist: "] = "", -- Space_Invasion
---      ["Do not laugh, inexperienced one, for he speaks the truth!"] = "", -- A_Classic_Fairytale:backstab
---      ["Do not let his words fool you, young one! He will stab you in the back as soon as you turn away!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Do the deed"] = "", -- A_Classic_Fairytale:first_blood
---      ["Double Kill!"] = "",
---      ["DOUBLE KILL"] = "", -- Mutant
---      ["Do you have any idea how valuable grass is?"] = "", -- A_Classic_Fairytale:enemy
---      ["Do you think you're some kind of god?"] = "", -- A_Classic_Fairytale:enemy
---      ["Dragon's Lair"] = "", -- A_Classic_Fairytale:dragon
---      ["Drill Rocket"] = "", -- Construction_Mode
---      ["Drills"] = "", -- A_Classic_Fairytale:backstab
---      ["Drill Strike"] = "", -- Construction_Mode
---      ["Drone Hunter!"] = "",
---      ["Drop a bomb: [Drop some heroic wind that will turn into a bomb on impact]"] = "", -- Continental_supplies
-
-	["Drowner"] = "Absäufer",
---      ["Dude, all the plants are gone!"] = "", -- A_Classic_Fairytale:family
---      ["Dude, can you see Ramon and Spiky?"] = "", -- A_Classic_Fairytale:journey
---      ["Dude, that's so cool!"] = "", -- A_Classic_Fairytale:backstab
---      ["Dude, we really need a new shaman..."] = "", -- A_Classic_Fairytale:shadow
---      ["Dude, what's this place?!"] = "", -- A_Classic_Fairytale:dragon
---      ["Dude, where are we?"] = "", -- A_Classic_Fairytale:backstab
---      ["Dude, wow! I just had the weirdest high!"] = "", -- A_Classic_Fairytale:backstab
---      ["Duration"] = "", -- Continental_supplies
---      ["Dust storm: [Deals 15 damage to all enemies in the circle]"] = "", -- Continental_supplies
-
---      ["Dynamite"] = "", -- Construction_Mode
---      ["Each turn is only ONE SECOND!"] = "", -- Frenzy
-	["Each turn you get 1-3 random weapons"] = "Du bekommst jede Runde 1-3 zufällig gewählte Waffen",
-	["Each turn you get one random weapon"] = "Du bekommst jede Runde eine zufällig gewählte Waffe.",
---      ["Eagle Eye"] = "", -- A_Classic_Fairytale:backstab
---      ["Eagle Eye: [Blink to the impact ~ One shot]"] = "", -- Continental_supplies
-
---      ["Ear Sniffer"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:epil
---      ["Elderbot"] = "", -- A_Classic_Fairytale:family
---      ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
-	["Eliminate all enemies"] = "Vernichte alle Gegner",
-	["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Eliminiere alle Ziele bevor die Zeit ausläuft.|Du hast in dieser Mission unbegrenzte Munition.", --Bazooka, Shotgun, SniperRifle
---      ["Eliminate enemy hogs and take their weapons."] = "", -- Highlander
-	["Eliminate Poison before the time runs out"] = "Neutralisiere das Gift bevor die Zeit abgelaufen ist",
-	["Eliminate the Blue Team"] = "Lösche das Blaue Team aus",
-	["Eliminate the enemy before the time runs out"] = "Vernichte den Feind bevor die Zeit abgelaufen ist", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
-	["Eliminate the enemy hogs to win."] = "Vernichte alle gegnerischen Igel um zu gewinnen",
-	["Eliminate the enemy specialists."] = "Vernichte die gegnerischen Spezialisten",
-	["- Eliminate Unit 3378 |- Feeble Resistance must survive"] = "- Vernichte Einheit 3378 |  Kraftloser Widerstand muss überleben",
---      ["Elmo"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
---      ["Energetic Engineer"] = "",
-	["Enjoy the swim..."] = "Viel Spaß beim Schwimmen...",
---      ["[Enter]"] = "",
---      ["Europe"] = "", -- Continental_supplies
---      [" ever done to you?!"] = "", -- A_Classic_Fairytale:backstab
---      ["Everyone knows this."] = "", -- A_Classic_Fairytale:enemy
---      ["Every single time!"] = "", -- A_Classic_Fairytale:dragon
---      ["Everything looks OK..."] = "", -- A_Classic_Fairytale:enemy
---      ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
---      ["Extra Damage"] = "", -- Construction_Mode
---      ["Extra Time"] = "", -- Construction_Mode
---      ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
---      ["Family Reunion"] = "", -- A_Classic_Fairytale:family
-	["Fastest lap: "] = "Schnellste Runde: ",
-	["Feeble Resistance"] = "Kraftloser Widerstand",
---      ["Fell From Grace"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
---      ["Fell From Heaven"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen
---      ["Fell From Heaven is the best! Fell From Heaven is the greatest!"] = "", -- A_Classic_Fairytale:family
---      ["Femur Lover"] = "", -- A_Classic_Fairytale:shadow
---      ["Fierce Competition!"] = "", -- Space_Invasion
---      ["Fiery Water"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
---      ["Filthy Blue"] = "", -- User_Mission_-_Dangerous_Ducklings
---      ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
---      ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
-
-	["Fire"] = "Feuer",
---      ["First aid kits?!"] = "", -- A_Classic_Fairytale:united
---      ["First Blood"] = "", -- A_Classic_Fairytale:first_blood
---      ["FIRST BLOOD MUTATES"] = "", -- Mutant
---      ["First Steps"] = "", -- A_Classic_Fairytale:first_blood
-	["Flag captured!"] = "Fahne erobert!",
-	["Flag respawned!"] = "Fahne wieder erschienen!",
-	["Flag returned!"] = "Fahne zurückgebracht!",
-	["Flags, and their home base will be placed where each team ends their first turn."] = "Fahnen und deren Heimatstandort werden dort plaziert wo jedes Team deren ersten Zug beendet.",
---      ["Flamer"] = "",
---      ["Flamethrower"] = "", -- Construction_Mode
---      ["Flaming Worm"] = "", -- A_Classic_Fairytale:backstab
-
---      ["Flesh for Brainz"] = "", -- A_Classic_Fairytale:journey
---      ["Flying Saucer"] = "", -- Construction_Mode, Frenzy
---      ["For improved features/stability, play 0.9.18+"] = "", -- WxW
---      ["Free Dense Cloud and continue the mission!"] = "", -- A_Classic_Fairytale:journey
---      ["Freezer"] = "", -- Construction_Mode
---      ["FRENZY"] = "", -- Frenzy
---      ["Friendly Fire!"] = "",
-	["fuel extended!"] = "Treibstoff aus!",
-	["GAME BEGUN!!!"] = "SPIEL GESTARTET!!!",
---      ["Game Modifiers: "] = "", -- The_Specialists
-	["GAME OVER!"] = "SPIEL ZU ENDE!",
-	["Game Started!"] = "Spiel Gestartet!]",
---      ["Game? Was this a game to you?!"] = "", -- A_Classic_Fairytale:enemy
---      ["GasBomb"] = "", -- Continental_supplies
---      ["Gas Gargler"] = "", -- A_Classic_Fairytale:queen
---      ["General information"] = "", -- Continental_supplies
---      ["Generates power."] = "", -- Construction_Mode
---      ["Generator"] = "", -- Construction_Mode
---      ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
-	["Get on over there and take him out!"] = "Mach, dass du hinüber kommst und schalte ihn aus!",
---      ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
---      ["Get out of there!"] = "", -- User_Mission_-_The_Great_Escape
---      ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Get the crate on the other side of the island!|"] = "", -- A_Classic_Fairytale:journey
---      ["Get to the target using your rope! |Controls: Left & Right to swing the rope - Up & Down to Contract and Expand!"] = "", -- Basic_Training_-_Rope
---      ["Get your teammates out of their natural prison and save the princess!|Hint: Drilling holes should solve everything.|Hint: It might be a good idea to place a girder before starting to drill. Just saying.|Hint: All your hedgehogs need to be above the marked height!|Hint: Leaks A Lot needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
---      ["GG!"] = "", -- User_Mission_-_Rope_Knock_Challenge
---      ["Gimme Bones"] = "", -- A_Classic_Fairytale:backstab
---      ["Girder"] = "", -- Construction_Mode
---      ["Girder Placement Mode"] = "", -- Construction_Mode
---      ["Glark"] = "", -- A_Classic_Fairytale:shadow
-	["Goal"] = "Ziel",
-	["GO! GO! GO!"] = "Bewegung, Bewegung, Bewegung!",
-	["Good birdy......"] = "Braver Vogel......",
---      ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
---      ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
---      ["Good luck...or else!"] = "", -- A_Classic_Fairytale:journey
-	["Good luck out there!"] = "Viel Glück da draußen!",
-	["Good so far!"] = "Gut soweit!",
-	["Good to go!"] = "Startklar!",
---      ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
---      ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
---      ["Gorkij"] = "", -- A_Classic_Fairytale:journey
---      ["Go surf!"] = "", -- WxW
-	["GOTCHA!"] = "ERWISCHT!",
-	["Grab Mines/Explosives"] = "Sammle Minen/Fässer",
---      ["Grants nearby hogs life-regeneration."] = "", -- Construction_Mode
---      ["Gravity"] = "", -- Gravity
---      ["Great choice, Steve! Mind if I call you that?"] = "", -- A_Classic_Fairytale:shadow
---      ["Great work! Now hit it with your Baseball Bat! |Tip: You can change weapon with 'Right Click'!"] = "", -- Basic_Training_-_Rope
---      ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
-
---      ["Green lipstick bullet: [Poisonous, deals no damage]"] = "", -- Continental_supplies
---      ["Greetings, "] = "", -- A_Classic_Fairytale:dragon
---      ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
---      ["Grenade"] = "", -- Construction_Mode, Frenzy, A_Space_Adventure:death02
---      ["Grenade Training"] = "", -- Basic_Training_-_Grenade
---      ["Grenadiers"] = "", -- Basic_Training_-_Grenade
---      ["Guys, do you think there's more of them?"] = "", -- A_Classic_Fairytale:backstab
---      ["HAHA!"] = "", -- A_Classic_Fairytale:enemy
---      ["Haha!"] = "", -- A_Classic_Fairytale:united
---      ["Hahahaha!"] = "",
-	["Haha, now THAT would be something!"] = "Haha, na DAS wär ja was!",
---      ["Hammer"] = "", -- Construction_Mode, Continental_supplies
---      ["Hannibal"] = "", -- A_Classic_Fairytale:epil
-	["Hapless Hogs"] = "Glücklose Igel",
-	[" Hapless Hogs left!"] = " Glücklose Igel verbleibend!",
---      [" HAS MUTATED"] = "", -- Mutant
---      ["Hatless Jerry"] = "", -- A_Classic_Fairytale:queen
---      ["Have no illusions, your tribe is dead, indifferent of your choice."] = "", -- A_Classic_Fairytale:shadow
---      ["Have we ever attacked you first?"] = "", -- A_Classic_Fairytale:enemy
---      ["Healing Station"] = "", -- Construction_Mode
---      ["Health Crate Placement Mode"] = "", -- Construction_Mode
-	["Health crates extend your time."] = "Medipacks verlängern deine Zeit.",
---      ["Heavy Cannfantry"] = "", -- A_Classic_Fairytale:united
-	["Heavy"] = "Schwierig",
---      ["Hedge-cogs"] = "", -- A_Classic_Fairytale:enemy
---      ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
-
-	["Hedgewars-Basketball"] = "Hedgewars-Basketball",
-	["Hedgewars-Knockball"] = "Hedgewars-Knockball",
---      ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
-	["Heh, it's not that bad."] = "Hehe, so schlimm ist es nicht.",
---      ["Hellish Handgrenade"] = "", -- Construction_Mode
---      ["Hello again, "] = "", -- A_Classic_Fairytale:family
---      ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
---      ["Help me, please!!!"] = "", -- A_Classic_Fairytale:journey
---      ["Help me, please!"] = "", -- A_Classic_Fairytale:journey
---      ["He moves like an eagle in the sky."] = "", -- A_Classic_Fairytale:first_blood
---      ["He must be in the village already."] = "", -- A_Classic_Fairytale:journey
---      ["Here, let me help you!"] = "", -- A_Classic_Fairytale:backstab
---      ["Here, let me help you save her!"] = "", -- A_Classic_Fairytale:family
---      ["Here...pick your weapon!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
---      ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
---      ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
---      ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
---      ["Hey guys!"] = "", -- A_Classic_Fairytale:united
---      ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
---      ["HIGHLANDER"] = "", -- Highlander
---      ["Hightime"] = "", -- A_Classic_Fairytale:first_blood
---      ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
---      ["Hint: Select the BlowTorch, aim and press [Fire]. Press [Fire] again to stop.|Don't blow up the crate."] = "", -- A_Classic_Fairytale:journey
---      ["Hint: Select the LowGravity and press [Fire]."] = "", -- A_Classic_Fairytale:journey
---      ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
---      ["His arms are so strong!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Hit Combo!"] = "",
---      ["Hmmm..."] = "",
---      ["Hmmm...actually...I didn't either."] = "", -- A_Classic_Fairytale:enemy
---      ["Hmmm, I'll have to find some way of moving him off this anti-portal surface..."] = "", -- portal
---      ["Hmmm...it's a draw. How unfortunate!"] = "", -- A_Classic_Fairytale:enemy
---      ["Hmmm...perhaps a little more time will help."] = "", -- A_Classic_Fairytale:first_blood
---      ["Hogminator"] = "", -- A_Classic_Fairytale:family
---      ["Hogs in sight!"] = "", -- Continental_supplies
---      ["HOLY SHYTE!"] = "", -- Mutant
---      ["Homing Bee"] = "", -- Construction_Mode
---      ["Honest Lee"] = "", -- A_Classic_Fairytale:enemy
-	["Hooray!"] = "Hurra!",
---      ["Hostage Situation"] = "", -- A_Classic_Fairytale:family
---      ["How can I ever repay you for saving my life?"] = "", -- A_Classic_Fairytale:journey
---      ["How come in a village full of warriors, it's up to me to save it?"] = "", -- A_Classic_Fairytale:dragon
---      ["How difficult would you like it to be?"] = "", -- A_Classic_Fairytale:first_blood
---      ["HOW DO THEY KNOW WHERE WE ARE???"] = "", -- A_Classic_Fairytale:united
---      ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
---      ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
---      ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
---      [" HP"] = "", -- Mutant
-	["Hunter"] = "Jäger", --Bazooka, Shotgun, SniperRifle
---      ["I believe there's more of them."] = "", -- A_Classic_Fairytale:backstab
---      ["I can see you have been training diligently."] = "", -- A_Classic_Fairytale:first_blood
---      ["I can't believe it worked!"] = "", -- A_Classic_Fairytale:shadow
---      ["I can't believe this!"] = "", -- A_Classic_Fairytale:enemy
---      ["I can't believe what I'm hearing!"] = "", -- A_Classic_Fairytale:backstab
---      ["I can't wait any more, I have to save myself!"] = "", -- A_Classic_Fairytale:shadow
---      ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
---      ["I'd better get going myself."] = "", -- A_Classic_Fairytale:journey
---      ["I didn't until about a month ago."] = "", -- A_Classic_Fairytale:enemy
---      ["I don't know how you did that.. But good work! |The next one should be easy as cake for you!"] = "", -- Basic_Training_-_Rope
---      ["I feel something...a place! They will arrive near the circles!"] = "", -- A_Classic_Fairytale:backstab
---      ["If only I had a way..."] = "", -- A_Classic_Fairytale:backstab
---      ["If only I were given a chance to explain my being here..."] = "", -- A_Classic_Fairytale:first_blood
---      ["I forgot that she's the daughter of the chief, too..."] = "", -- A_Classic_Fairytale:backstab
---      ["If they try coming here, they can have a taste of my delicious knuckles!"] = "", -- A_Classic_Fairytale:united
---      ["If you agree to provide the information we need, you will be spared!"] = "", -- A_Classic_Fairytale:shadow
---      ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey
---      ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "", -- A_Classic_Fairytale:shadow
---      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
---      ["If you know what I mean..."] = "", -- A_Classic_Fairytale:shadow
---      ["If you say so..."] = "", -- A_Classic_Fairytale:shadow
---      ["I guess you'll have to kill them."] = "", -- A_Classic_Fairytale:dragon
---      ["I have come to make you an offering..."] = "", -- A_Classic_Fairytale:shadow
---      ["I have no idea where that mole disappeared...Can you see it?"] = "", -- A_Classic_Fairytale:shadow
---      ["I have to follow that alien."] = "", -- A_Classic_Fairytale:backstab
---      ["I have to get back to the village!"] = "", -- A_Classic_Fairytale:shadow
---      ["I hope you are prepared for a small challenge, young one."] = "", -- A_Classic_Fairytale:first_blood
---      ["I just don't want to sink to your level."] = "", -- A_Classic_Fairytale:backstab
---      ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
---      ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
---      ["I'll hold them off while you return to the village!"] = "", -- A_Classic_Fairytale:shadow
---      ["Imagine those targets are the wolves that killed your parents! Take your anger out on them!"] = "", -- A_Classic_Fairytale:first_blood
---      ["I'm...alive? How? Why?"] = "", -- A_Classic_Fairytale:backstab
---      ["I'm a ninja."] = "", -- A_Classic_Fairytale:dragon
---      ["I marked the place of their arrival. You're welcome!"] = "", -- A_Classic_Fairytale:backstab
---      ["I'm certain that this is a misunderstanding, fellow hedgehogs!"] = "", -- A_Classic_Fairytale:first_blood
---      ["I mean, none of you ceased to live."] = "", -- A_Classic_Fairytale:enemy
---      ["I'm getting old for this!"] = "", -- A_Classic_Fairytale:family
---      ["I'm getting thirsty..."] = "", -- A_Classic_Fairytale:family
---      ["I'm here to help you rescue her."] = "", -- A_Classic_Fairytale:family
---      ["I'm not sure about that!"] = "", -- A_Classic_Fairytale:united
---      ["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."] = "", -- A_Classic_Fairytale:first_blood
---      ["I'm so scared!"] = "", -- A_Classic_Fairytale:united
---      ["Increase"] = "", -- Continental_supplies
---      ["Incredible..."] = "", -- A_Classic_Fairytale:shadow
---      ["I need to find the others!"] = "", -- A_Classic_Fairytale:backstab
---      ["I need to get to the other side of this island, fast!"] = "", -- A_Classic_Fairytale:journey
---      ["I need to move the tribe!"] = "", -- A_Classic_Fairytale:united
---      ["I need to prevent their arrival!"] = "", -- A_Classic_Fairytale:backstab
---      ["I need to warn the others."] = "", -- A_Classic_Fairytale:backstab
---      ["In fact, you are the only one that's been acting strangely."] = "", -- A_Classic_Fairytale:backstab
---      ["In order to get to the other side, you need to collect the crates first.|"] = "", -- A_Classic_Fairytale:dragon
---      ["INSANITY"] = "", -- Mutant
-	["Instructor"] = "Ausbilder", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings
---      ["Interesting idea, haha!"] = "", -- A_Classic_Fairytale:enemy
---      ["Interesting! Last time you said you killed a cannibal!"] = "", -- A_Classic_Fairytale:backstab
---      ["In the meantime, take these and return to your \"friend\"!"] = "", -- A_Classic_Fairytale:shadow
-	["invaders destroyed"] = "Angreifer zerstört",
---      ["Invasion"] = "", -- A_Classic_Fairytale:united
---      ["Invulnerable"] = "", -- Construction_Mode
---      ["I saw it with my own eyes!"] = "", -- A_Classic_Fairytale:shadow
---      ["I see..."] = "", -- A_Classic_Fairytale:shadow
---      ["I see you have already taken the leap of faith."] = "", -- A_Classic_Fairytale:first_blood
---      ["I see you would like his punishment to be more...personal..."] = "", -- A_Classic_Fairytale:first_blood
---      ["I sense another wave of cannibals heading my way!"] = "", -- A_Classic_Fairytale:backstab
---      ["I sense another wave of cannibals heading our way!"] = "", -- A_Classic_Fairytale:backstab
---      ["I shouldn't have drunk that last pint."] = "", -- A_Classic_Fairytale:dragon
---      ["Is this place in my head?"] = "", -- A_Classic_Fairytale:dragon
---      ["It doesn't matter. I won't let that alien hurt my daughter!"] = "", -- A_Classic_Fairytale:dragon
---      ["I think we are safe here."] = "", -- A_Classic_Fairytale:backstab
---      ["I thought their shaman died when he tried our medicine!"] = "", -- A_Classic_Fairytale:shadow
---      ["It is called 'Hogs of Steel'."] = "", -- A_Classic_Fairytale:enemy
---      ["It is time to practice your fighting skills."] = "", -- A_Classic_Fairytale:first_blood
---      ["It must be a childhood trauma..."] = "", -- A_Classic_Fairytale:family
---      ["It must be the aliens!"] = "", -- A_Classic_Fairytale:backstab
---      ["It must be the aliens' deed."] = "", -- A_Classic_Fairytale:backstab
---      ["It must be the cyborgs again!"] = "", -- A_Classic_Fairytale:enemy
---      ["I told you, I just found them."] = "", -- A_Classic_Fairytale:backstab
-	["It's a good thing SUDDEN DEATH is 99 turns away..."] = "Gut, dass SUDDEN DEATH noch 99 Runden entfernt ist...",
---      ["It's always up to women to clear up the mess men created!"] = "", -- A_Classic_Fairytale:dragon
---      ["It's a shame, I forgot how to do that!"] = "", -- A_Classic_Fairytale:family
---      ["It's impossible to communicate with the spirits without a shaman."] = "", -- A_Classic_Fairytale:shadow
---      ["It's over..."] = "", -- A_Classic_Fairytale:shadow
---      ["It's time you learned that your actions have consequences!"] = "", -- A_Classic_Fairytale:journey
---      ["It's worth more than wood!"] = "", -- A_Classic_Fairytale:enemy
---      ["It wants our brains!"] = "", -- A_Classic_Fairytale:shadow
---      ["It was not a dream, unwise one!"] = "", -- A_Classic_Fairytale:backstab
---      ["I've seen this before. They just appear out of thin air."] = "", -- A_Classic_Fairytale:united
---      ["I want to play a game..."] = "", -- A_Classic_Fairytale:journey
---      ["I want to see how it handles this!"] = "", -- A_Classic_Fairytale:backstab
---      ["I wish to help you, "] = "", -- A_Classic_Fairytale:dragon
---      ["I wonder where Dense Cloud is..."] = "", -- A_Classic_Fairytale:journey, A_Classic_Fairytale:shadow
---      ["I wonder why I'm so angry all the time..."] = "", -- A_Classic_Fairytale:family
---      ["I won't let you kill her!"] = "", -- A_Classic_Fairytale:journey
---      ["Jack"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
---      ["Jeremiah"] = "", -- A_Classic_Fairytale:dragon
---      ["John"] = "", -- A_Classic_Fairytale:journey
---      ["Judas"] = "", -- A_Classic_Fairytale:backstab
-	["Jumping is disabled"] = "Sprünge sind deaktiviert!",
---      ["Just kidding, none of you have died!"] = "", -- A_Classic_Fairytale:enemy
---      ["Just on a walk."] = "", -- A_Classic_Fairytale:united
---      ["Just wait till I get my hands on that trauma! ARGH!"] = "", -- A_Classic_Fairytale:family
---      ["Kamikaze"] = "", -- Construction_Mode
-	["Kamikaze Expert!"] = "Kamikazeexperte!",
-	["Keep it up!"] = "Weiter so!",
---      ["Kerguelen"] = "", -- Continental_supplies
-	["Killing spree!"] = "Blutrausch!",
---      ["KILL IT!"] = "", -- A_Classic_Fairytale:first_blood
---      ["KILLS"] = "",
---      ["Kill the aliens!"] = "", -- A_Classic_Fairytale:dragon
---      ["Kill the cannibal!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Kill the traitor...or spare his life!|Kill him or press [Precise]!"] = "", -- A_Classic_Fairytale:backstab
---      ["Land Sprayer"] = "", -- Construction_Mode
---      ["Laser Sight"] = "", -- Construction_Mode
-	["Last Target!"] = "Letzte Zielscheibe!",
---      ["Leader"] = "", -- A_Classic_Fairytale:enemy
---      ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
---      ["Leaks A Lot"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
---      ["Leaks A Lot, depressed for killing his loved one, failed to save the village..."] = "", -- A_Classic_Fairytale:journey
---      ["Leaks A Lot gave his life for his tribe! He should have survived!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Leaks A Lot must survive!"] = "", -- A_Classic_Fairytale:journey
---      ["Led Heart"] = "", -- A_Classic_Fairytale:queen
---      ["Lee"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
---      ["[Left Shift]"] = "",
---      ["left shift"] = "", -- Continental_supplies
---      ["Let a Continent provide your weapons!"] = "", -- Continental_supplies
---      ["Let me test your skills a little, will you?"] = "", -- A_Classic_Fairytale:journey
---      ["Let's go home!"] = "", -- A_Classic_Fairytale:journey
---      ["Let's head back to the village!"] = "", -- A_Classic_Fairytale:shadow
---      ["Let's see what your comrade does now!"] = "", -- A_Classic_Fairytale:journey
---      ["Let's show those cannibals what we're made of!"] = "", -- A_Classic_Fairytale:backstab
---      ["Let them have a taste of my fury!"] = "", -- A_Classic_Fairytale:backstab
---      ["Let us help, too!"] = "", -- A_Classic_Fairytale:backstab
---      ["Light Cannfantry"] = "", -- A_Classic_Fairytale:united
---      ["Limburger"] = "", -- Construction_Mode
-	["Listen up, maggot!!"] = "Aufgepasst, du Made!!",
---      ["Little did they know that this hunt will mark them forever..."] = "", -- A_Classic_Fairytale:shadow
---      ["Lively Lifeguard"] = "",
-
---      ["Lonely Cries: [Rise the water if no hog is in the circle and deal 7 damage to all enemy hogs]"] = "", -- Continental_supplies
---      ["Lonely Hog"] = "", -- ClimbHome
---      ["Look, I had no choice!"] = "", -- A_Classic_Fairytale:backstab
---      ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
---      ["Look out! We're surrounded by cannibals!"] = "", -- A_Classic_Fairytale:enemy
---      ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
---      ["Low Gravity"] = "", -- Construction_Mode, Frenzy
---      ["Luckily, I've managed to snatch some of them."] = "", -- A_Classic_Fairytale:united
---      ["LUDICROUS KILL"] = "", -- Mutant
---      ["Made it!"] = "", -- ClimbHome
---      ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
---      ["May the spirits aid you in all your quests!"] = "", -- A_Classic_Fairytale:backstab
---      ["Medicine: [Fire some exploding medicine that will heal all hogs effected by the explosion]"] = "", -- Continental_supplies
---      ["MEGA KILL"] = "", -- Mutant
---      ["Meiwes"] = "", -- A_Classic_Fairytale:backstab
---      ["Mindy"] = "", -- A_Classic_Fairytale:united
---      ["Mine"] = "", -- Construction_Mode, Frenzy
-	["Mine Deployer"] = "Minenleger",
-	["Mine Eater!"] = "Minenfresser!",
---      ["Mine Placement Mode"] = "", -- Construction_Mode
-	["|- Mines Time:"] = "| - Minenzündzeit: ", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
---      ["Mine Strike"] = "", -- Construction_Mode
-	["MISSION FAILED"] = "MISSION GESCHEITERT", -- User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-	["MISSION SUCCESSFUL"] = "MISSION ERFOLGREICH", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-	["MISSION SUCCESS"] = "MISSIONSERFOLG",
---      ["Molotov Cocktail"] = "", -- Construction_Mode
---      ["Molotov"] = "", -- Continental_supplies
---      ["MONSTER KILL"] = "", -- Mutant
---      ["More Natives"] = "", -- A_Classic_Fairytale:epil
---      ["Mortar"] = "", -- Construction_Mode, A_Space_Adventure:death02
-	["Movement: [Up], [Down], [Left], [Right]"] = "Bewegung: [Hoch], [Runter], [Links], [Rechts]",
---      ["Mudball"] = "", -- Construction_Mode
---      ["Multi-shot!"] = "",
-	["Munition!"] = "Munition erschöpft!",
---      ["Muriel"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
---      ["Muscle Dissolver"] = "", -- A_Classic_Fairytale:shadow
---      ["-------"] = "", -- Mutant
---      ["Mutant"] = "", -- Mutant
---      ["Nade Boy"] = "", -- Basic_Training_-_Grenade
---      ["Name"] = "", -- A_Classic_Fairytale:queen
-	["Nameless Heroes"] = "Namenlose Helden",
---      ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
---      ["Napalm"] = "", -- Construction_Mode
---      ["Napalm rocket: [Fire a bomb with napalm!]"] = "", -- Continental_supplies
---      ["Natives"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
---      ["Naughty Ninja"] = "", -- User_Mission_-_Dangerous_Ducklings
-	["New Barrels Per Turn"] = "Neue Fässer jede Runde",
-	["NEW CLAN RECORD: "] = "NEUER KLAN-REKORD",
-	["NEW fastest lap: "] = "NEUE schnellste Runde: ",
-	["New Mines Per Turn"] = "Neue Minen jede Runde",
-	["NEW RACE RECORD: "] = "NEUER RENNREKORD: ",
---      ["Newton's Hammock"] = "",
---      ["Nicely done, meatbags!"] = "", -- A_Classic_Fairytale:enemy
---      ["Nice work, "] = "", -- A_Classic_Fairytale:dragon
---      ["Nice work!"] = "", -- A_Classic_Fairytale:enemy
---      ["Nilarian"] = "", -- A_Classic_Fairytale:queen
---      ["Nobody Laugh"] = "", -- User_Mission_-_Nobody_Laugh
---      ["No, I came back to help you out..."] = "", -- A_Classic_Fairytale:shadow
---      ["No...I wonder where they disappeared?!"] = "", -- A_Classic_Fairytale:journey
---      ["Nom-Nom"] = "", -- A_Classic_Fairytale:journey
---      ["NomNom"] = "", -- A_Classic_Fairytale:united
---      ["Nope. It was one fast mole, that's for sure."] = "", -- A_Classic_Fairytale:shadow
---      ["No! Please, help me!"] = "", -- A_Classic_Fairytale:journey
---      ["NORMAL"] = "", -- Continental_supplies
---      ["Normal players can only score points by killing the mutant."] = "", -- Mutant
---      ["North America"] = "", -- Continental_supplies
---      ["Not all hogs are born equal."] = "", -- Highlander
-	["NOT ENOUGH WAYPOINTS"] = "NICHT GENUG WEGPUNKTE",
---      ["Not now, Fiery Water!"] = "", -- A_Classic_Fairytale:backstab
-	["Not So Friendly Match"] = "Kein-so-Freundschaftsspiel", -- Basketball, Knockball
---      ["Not you again! My head still hurts from last time!"] = "", -- A_Classic_Fairytale:shadow
---      ["No, we made sure of that!"] = "", -- A_Classic_Fairytale:united
---      ["Now find the next target! |Tip: Normally you lose health by falling down, so be careful!"] = "", -- Basic_Training_-_Rope
---      ["No! What have I done?! What have YOU done?!"] = "", -- A_Classic_Fairytale:journey
---      ["No. Where did he come from?"] = "", -- A_Classic_Fairytale:shadow
---      ["Now how do I get on the other side?!"] = "", -- A_Classic_Fairytale:dragon
---      ["No. You and the rest of the tribe are safer there!"] = "", -- A_Classic_Fairytale:backstab
---      ["Object Placement Tool"] = "", -- Construction_Mode
---      ["Obliterate them!|Hint: You might want to take cover..."] = "", -- A_Classic_Fairytale:shadow
---      ["Obstacle course"] = "", -- A_Classic_Fairytale:dragon
---      ["Of course I have to save her. What did I expect?!"] = "", -- A_Classic_Fairytale:family
---      ["OH, COME ON!"] = "", -- A_Classic_Fairytale:journey
---      ["Oh, my!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
-	["Oh no! Just try again!"] = "Oh nein! Versuch's nochmal!", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
---      ["Oh no, not "] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-	["Oh no! Time's up! Just try again."] = "Oh nein! Die Zeit ist um! Versuche es nochmal.", --Bazooka, Shotgun, SniperRifle
---      ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
---      ["Oh, silly me! I forgot that I'm the shaman."] = "", -- A_Classic_Fairytale:backstab
---      ["Olive"] = "", -- A_Classic_Fairytale:united
---      ["Omnivore"] = "", -- A_Classic_Fairytale:first_blood
---      ["Once upon a time, on an island with great natural resources, lived two tribes in heated conflict..."] = "", -- A_Classic_Fairytale:first_blood
---      ["ONE HOG PER TEAM! KILLING EXCESS HEDGES"] = "", -- Mutant
---      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
---      ["on Skip"] = "", -- Continental_supplies
---      ["Oops...I dropped them."] = "", -- A_Classic_Fairytale:united
---      ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Operation Diver"] = "",
-	["Opposing Team: "] = "Gegnerisches Team: ",
---      ["or 'g=50, g2=150, period=4000' for gravity changing|from 50 to 150 and back with period of 4000 msec"] = "", -- Gravity
---      ["Orlando Boom!"] = "", -- A_Classic_Fairytale:queen
---      ["Other kills don't give you points."] = "", -- Mutant
---      ["Ouch!"] = "", -- User_Mission_-_Rope_Knock_Challenge
---      ["Our tribe, our beautiful island!"] = "", -- A_Classic_Fairytale:enemy
---      ["Parachute"] = "", -- Continental_supplies
-	["Pathetic Hog #%d"] = "Erbärmlicher Igel #%d",
-	["Pathetic Resistance"] = "Erbärmlicher Widerstand", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
---      ["Penguin roar: [Deal 15 damage + 15% of your hogs health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
---      ["Perfect! Now try to get the next crate without hurting yourself!"] = "", -- A_Classic_Fairytale:first_blood
-	["Per-Hog Ammo"] = "Munition pro Igel",
---      ["Personal Portal Device"] = "", -- Construction_Mode
-
---      ["Per team weapons"] = "", -- Continental_supplies
---      ["Pfew! That was close!"] = "", -- A_Classic_Fairytale:shadow
---      ["Piano Strike"] = "", -- Construction_Mode
---      ["Pickhammer"] = "", -- Construction_Mode
-
---      ["Pings left:"] = "", -- Space_Invasion
-	["Place more waypoints using the 'Air Attack' weapon."] = "Platziere mehr Wegpunkte durch Verwenden der 'Luftangriff'-Waffe",
---      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
---      ["Please place the way-point further from the waterline."] = "", -- Racer
---      ["Please place the way-point in the open, within the map boundaries."] = "", -- Racer
---      ["Please, stop releasing your \"smoke signals\"!"] = "", -- A_Classic_Fairytale:shadow
---      ["Point Blank Combo!"] = "", -- Space_Invasion
---      ["POINTS"] = "", -- Mutant
-	["points"] = "Punkte", -- Control, CTF_Blizzard, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle
-	["Poison"] = "Gift",
---      ["Population"] = "", -- Continental_supplies
---      ["Portal hint: one goes to the destination, and one is the entrance.|"] = "", -- A_Classic_Fairytale:dragon
---      ["Portal mission"] = "", -- portal
-	["Power Remaining"] = "Verbleibende Energie",
-	["Prepare yourself"] = "Mach dich bereit",
---      ["presice"] = "", -- Continental_supplies
---      ["Press [Enter] to accept this configuration."] = "", -- WxW
---      ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
---      ["Press [Precise] to skip intro"] = "",
---      ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Private Novak"] = "", -- Basic_Training_-_Cluster_Bomb
---      ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
-	["PUNKTESTAND"] = "",
-	["Race complexity limit reached."] = "Rennkomplexitätslimit erreicht.",
---      ["RACER"] = "",
---      ["Rachel"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
---      ["Radar Ping"] = "", -- Space_Invasion
---      ["Raging Buffalo"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
---      ["Ramon"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow
---      ["random in range from %i%% to %i%% with period of %i msec"] = "", -- Gravity
---      ["RC Plane"] = "", -- Construction_Mode
---      ["RC PLANE TRAINING"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Really?! You thought you could harm me with your little toys?"] = "", -- A_Classic_Fairytale:shadow
---      ["Reflector Shield"] = "", -- Construction_Mode
---      ["Reflects enemy projectiles."] = "", -- Construction_Mode
---      ["Regurgitator"] = "", -- A_Classic_Fairytale:backstab
---      ["Reinforcements"] = "", -- A_Classic_Fairytale:backstab
---      ["Remember: The rope only bend around objects, |if it doesn't hit anything it's always stright!"] = "", -- Basic_Training_-_Rope
---      ["Remember this, pathetic animal: when the day comes, you will regret your blind loyalty!"] = "", -- A_Classic_Fairytale:shadow
---      ["REMOVED"] = "", -- Continental_supplies
---      ["Respawner"] = "", -- Construction_Mode
---      ["Resurrector"] = "", -- Construction_Mode
---      ["Resurrects dead hedgehogs."] = "", -- Construction_Mode
-	[" - Return the enemy flag to your base to score | - First team to 3 captures wins | - You may only score when your flag is in your base | - Hogs will drop the flag if killed, or drowned | - Dropped flags may be returned or recaptured | - Hogs respawn when killed"] = " - Bringe die gegnerische Flagge zu deiner Heimatbasis um zu punkten. | - Das Team das zuerst 3 Flaggen erobert gewinnt. | - Du kannst nur punkten wenn deine eigene Flagge in deiner Basis ist | - Igel lassen die Flagge fallen wenn sie sterben oder ertrinken | - Fallen gelassene Flaggen können zurückgebracht oder wieder gestohlen werden | - Igel tauchen nach ihrem Tod wieder auf",
---      ["Return to Leaks A Lot! If you get stuck, press [Precise] to try again!"] = "", -- A_Classic_Fairytale:shadow
---      ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
---      ["Rope"] = "", -- Construction_Mode
---      ["ROPE-KNOCKING"] = "", -- User_Mission_-_Rope_Knock_Challenge
---      ["Rope to safety"] = "", -- ClimbHome
---      ["Rope Training"] = "", -- Basic_Training_-_Rope
---      ["Rot Molester"] = "", -- A_Classic_Fairytale:shadow
---      ["Round Limit:"] = "",
-	["Round Limit"] = "Rundenbegrenzung",
---      ["Rounds Complete: "] = "",
-	["Rounds Complete"] = "Runden Gespielt",
---      ["Rubber Band"] = "", -- Construction_Mode
---      ["Rubber Placement Mode"] = "", -- Construction_Mode
---      ["RULES"] = "", -- Frenzy, Mutant
-	["RULES OF THE GAME [Press ESC to view]"] = "SPIEL REGELN (Drücke ESC zum Anzeigen)",
---      ["Rusty Joe"] = "", -- A_Classic_Fairytale:queen
---      ["s|"] = "",
---      ["Sabotage/Flare: [Sabotage all hogs in the circle and deal ~1 dmg OR Fire a cluster up into the air]"] = "", -- Continental_supplies
-
---      ["Salivaslurper"] = "", -- A_Classic_Fairytale:united
---      ["Salvation"] = "", -- A_Classic_Fairytale:family
---      ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
-	["Save as many hapless hogs as possible!"] = "Rette so viele glücklose Igel als möglich!",
---      ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
---      ["Save Leaks A Lot!|Hint: The Switch utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
---      ["Save the princess! All your hogs must survive!|Hint: Kill the cyborgs first! Use the ammo very carefully!|Hint: You might want to spare a girder for cover!"] = "", -- A_Classic_Fairytale:family
---      ["Save the princess by collecting the crate in under 12 turns!"] = "", -- A_Classic_Fairytale:journey
---      ["Scalp Muncher"] = "", -- A_Classic_Fairytale:backstab
---      ["Score"] = "", -- Mutant
---      ["SCORE"] = "", -- Space_Invasion
-
---      ["sec"] = "", -- CTF_Blizzard, TrophyRace, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork, Capture_the_Flag
---      ["Seduction"] = "", -- Continental_supplies
---      ["Seems like every time you take a \"walk\", the enemy find us!"] = "", -- A_Classic_Fairytale:backstab
---      ["See that crate farther on the right?"] = "", -- A_Classic_Fairytale:first_blood
-	["See ya!"] = "Mach's gut!",
---      ["Segmentation Paul"] = "", -- A_Classic_Fairytale:dragon
---      ["Select continent!"] = "", -- Continental_supplies
---      ["Select continent first round with the Weapon Menu or by"] = "", -- Continental_supplies
---      ["Select difficulty: [Left] - easier or [Right] - harder"] = "", -- A_Classic_Fairytale:first_blood
-	["selected!"] = "ausgewählt!",
---      ["Set period to negative value for random gravity"] = "", -- Gravity
---      ["Setup:|'g=150', where 150 is 150% of normal gravity"] = "", -- Gravity
---      ["s"] = "", -- GaudyRacer, Space_Invasion
---      ["... share your beauty with the world every morning, my princess!"] = "", -- A_Classic_Fairytale:journey
---      ["She's behind that tall thingy."] = "", -- A_Classic_Fairytale:family
-	["Shield boosted! +30 power"] = "Schild verstärkt! +30 Energie",
-	["Shield Depleted"] = "Schild aufgebraucht!",
-	["Shield is fully recharged!"] = "Schild vollständig aufgeladen!",
-	["Shield Master!"] = "Schildmeister!",
-	["Shield Miser!"] = "Schildgieriger",
-	["Shield OFF:"] = "Schild AUS:",
-	["Shield ON:"] = "Schild AN:",
-	["Shield Seeker!"] = "Schildsucher!",
---      ["Shoryuken"] = "", -- Construction_Mode, Frenzy, A_Space_Adventure:death02
---      ["Shotgun"] = "", -- Continental_supplies
-	["Shotgun Team"] = "Schrotflinten-Team",
-	["Shotgun Training"] = "Schrotflinten-Training",
-	["shots remaining."] = "Schüsse übrig",
-	["Silly"] = "Doofi",
---      ["SineGun"] = "", -- Construction_Mode
-	["Sinky"] = "Blubb",
---      ["Sirius Lee"] = "", -- A_Classic_Fairytale:enemy
-	["%s is out and Team %d|scored a penalty!| |Score:"] = "%s ist draußen und Team %d|erhält eine Strafe!| |Punktestand:", -- Basketball, Knockball
-	["%s is out and Team %d|scored a point!| |Score:"] = "%s ist draußen und Team %d|erhält einen Punkt!| |Punktestand:", -- Basketball, Knockball
---      ["Slippery"] = "", -- A_Classic_Fairytale:journey
---      ["Slot"] = "", -- Frenzy
---      ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
---      ["SLOTS"] = "", -- Frenzy
---      ["Smith 0.97"] = "", -- A_Classic_Fairytale:enemy
---      ["Smith 0.98"] = "", -- A_Classic_Fairytale:enemy
---      ["Smith 0.99a"] = "", -- A_Classic_Fairytale:enemy
---      ["Smith 0.99b"] = "", -- A_Classic_Fairytale:enemy
---      ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
---      ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
---      ["Sniper Rifle"] = "", -- Continental_supplies
---      ["Sniper!"] = "", -- Space_Invasion
-	["Sniper Training"] = "Scharfschützen-Training",
-	["Sniperz"] = "Heckenschützen",
---      ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
---      ["Some weapons have a second option. Find them with"] = "", -- Continental_supplies
---      ["South America"] = "", -- Continental_supplies
---      ["So? What will it be?"] = "", -- A_Classic_Fairytale:shadow
---      ["Spawn the crate, and attack!"] = "", -- WxW
---      ["Special Weapons:"] = "", -- Continental_supplies
-	["Spielmodifikatoren: "] = "",
---      ["Spiky Cheese"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow
---      ["Spleenlover"] = "", -- A_Classic_Fairytale:united
-	["Sponge"] = "Schwamm",
---      ["Spooky Tree"] = "",
---      ["Sprite Placement Mode"] = "", -- Construction_Mode
---      ["Sprite Testing Mode"] = "", -- Construction_Mode
---      ["STATUS UPDATE"] = "", -- GaudyRacer, Space_Invasion
---      ["Steel Eye"] = "", -- A_Classic_Fairytale:queen
---      ["Step By Step"] = "", -- A_Classic_Fairytale:first_blood
---      ["Steve"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
---      ["Sticky Mine"] = "", -- Continental_supplies
---      ["Sticky Mine Placement Mode"] = "", -- Construction_Mode
---      ["Stronglings"] = "", -- A_Classic_Fairytale:shadow
-
---      ["Structure Placement Mode"] = "", -- Construction_Mode
---      ["Structure Placement Tool"] = "", -- Construction_Mode
---      ["Sundaland"] = "", -- Continental_supplies
---      ["Super Weapons"] = "", -- WxW
---      ["Support Station"] = "", -- Construction_Mode
---      ["Surf Before Crate"] = "", -- WxW
---      ["Surfer! +15 points!"] = "", -- Space_Invasion
---      ["Surfer!"] = "", -- WxW
---      ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
---      ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
---      ["switch"] = "", -- Continental_supplies
-	["Switched to "] = "Gewechselt zu ",
---      ["Switch Hog"] = "", -- Construction_Mode
---      ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
---      ["tab"] = "", -- Continental_supplies
---      ["Tagging Mode"] = "", -- Construction_Mode
---      ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
---      ["Tardis"] = "", -- Construction_Mode
---      ["Target Placement Mode"] = "", -- Construction_Mode
---	["Team %d: "] = "",
-	["Team Scores"] = "Teampunktestand", -- Control, Space_Invasion
---      ["Teleporation Node"] = "", -- Construction_Mode
---      ["Teleportation Mode"] = "", -- Construction_Mode
---      ["Teleportation Node"] = "", -- Construction_Mode
---      ["Teleport"] = "", -- Construction_Mode, Frenzy
---      ["Teleport hint: just use the mouse to select the destination!"] = "", -- A_Classic_Fairytale:dragon
---      ["Teleport Unsuccessful. Please teleport within a clan teleporter's sphere of influence."] = "", -- Construction_Mode
---      ["Thanks!"] = "", -- A_Classic_Fairytale:family
---      ["Thank you, my hero!"] = "", -- A_Classic_Fairytale:family
---      ["Thank you, oh, thank you, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
---      ["Thank you, oh, thank you, my heroes!"] = "", -- A_Classic_Fairytale:journey
---      ["That is, indeed, very weird..."] = "", -- A_Classic_Fairytale:united
---      ["That makes it almost invaluable!"] = "", -- A_Classic_Fairytale:enemy
---      ["That ought to show them!"] = "", -- A_Classic_Fairytale:backstab
---      ["That's for my father!"] = "", -- A_Classic_Fairytale:backstab
---      ["That shaman sure knows what he's doing!"] = "", -- A_Classic_Fairytale:shadow
---      ["That Sinking Feeling"] = "",
---      ["That's not our problem!"] = "", -- A_Classic_Fairytale:enemy
---      ["That's typical of you!"] = "", -- A_Classic_Fairytale:family
---      ["That was just mean!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
-	["That was pointless."] = "Das war sinnlos.",
---      ["The answer is...entertaintment. You'll see what I mean."] = "", -- A_Classic_Fairytale:backstab
---      ["The anti-portal zone is all over the floor, and I have nothing to kill him...Droping something could hurt him enough to kill him..."] = "", -- portal
---      ["The Bottom Feeder can score points by killing anyone."] = "", -- Mutant
---      ["The Bull's Eye"] = "", -- A_Classic_Fairytale:first_blood
---      ["The caves are well hidden, they won't find us there!"] = "", -- A_Classic_Fairytale:united
---      ["The Crate Frenzy"] = "", -- A_Classic_Fairytale:first_blood
---      ["The Dilemma"] = "", -- A_Classic_Fairytale:shadow
---      ["The enemy can't move but it might be a good idea to stay out of sight!|"] = "", -- A_Classic_Fairytale:dragon
-	["The enemy is hiding out on yonder ducky!"] = "Der Feind versteckt sich auf dem Entlein dort drüben!",
---      ["The Enemy Of My Enemy"] = "", -- A_Classic_Fairytale:enemy
---      ["The First Blood"] = "", -- A_Classic_Fairytale:first_blood
---      ["The First Encounter"] = "", -- A_Classic_Fairytale:shadow
---      ["The first player to kill someone becomes the Mutant."] = "", -- Mutant
-	["The flag will respawn next round."] = "Die Fahne wird nächste Runde wieder auftauchen.",
---      ["The food bites back"] = "", -- A_Classic_Fairytale:backstab
---      ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
---      ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
---      ["The Great Hog in the sky sees your sadness and grants you a boon."] = "", -- Construction_Mode
---      ["The guardian"] = "", -- A_Classic_Fairytale:shadow
---      ["The Individualist"] = "", -- A_Classic_Fairytale:shadow
---      ["Their buildings were very primitive back then, even for an uncivilised island."] = "", -- A_Classic_Fairytale:united
---      ["The Journey Back"] = "", -- A_Classic_Fairytale:journey
---      ["The Leap of Faith"] = "", -- A_Classic_Fairytale:first_blood
---      ["The Moonwalk"] = "", -- A_Classic_Fairytale:journey
---      ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
---      ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
-	["The Nameless One"] = "Der Namenlose",
---      ["The next one is pretty hard! |Tip: You have to do multiple swings!"] = "", -- Basic_Training_-_Rope
---      ["Then how do they keep appearing?"] = "", -- A_Classic_Fairytale:shadow
---      ["The other one were all cannibals, spending their time eating the organs of fellow hedgehogs..."] = "", -- A_Classic_Fairytale:first_blood
---      ["The player with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
---      ["There are a variety of structures available to aid you."] = "", -- Construction_Mode
---      ["There must be a spy among us!"] = "", -- A_Classic_Fairytale:backstab
---      ["There's more of them? When did they become so hungry?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
---      ["There's nothing more satisfying for me than seeing you share your beauty with the world every morning, my princess!"] = "", -- A_Classic_Fairytale:journey
---      ["There's nothing more satisfying to us than seeing you share your beauty..."] = "", -- A_Classic_Fairytale:journey
---      ["There's nothing more satisfying to us than seeing you share your beauty with the world every morning, my princess!"] = "", -- A_Classic_Fairytale:journey
---      ["The Rising"] = "", -- A_Classic_Fairytale:first_blood
---      ["The Savior"] = "", -- A_Classic_Fairytale:journey
---      ["These primitive people are so funny!"] = "", -- A_Classic_Fairytale:backstab
---      ["The Shadow Falls"] = "", -- A_Classic_Fairytale:shadow
---      ["The Showdown"] = "", -- A_Classic_Fairytale:shadow
---      ["The Slaughter"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:first_blood
-	["THE SPECIALISTS"] = "DIE SPEZIALISTEN",
---      ["The spirits of the ancerstors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
---      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
---      ["The Tunnel Maker"] = "", -- A_Classic_Fairytale:journey
---      ["The Ultimate Weapon"] = "", -- A_Classic_Fairytale:first_blood
---      ["The Union"] = "", -- A_Classic_Fairytale:enemy
---      ["The village, unprepared, was destroyed by the cyborgs..."] = "", -- A_Classic_Fairytale:journey
---      ["The walk of Fame"] = "", -- A_Classic_Fairytale:shadow
---      ["The wasted youth"] = "", -- A_Classic_Fairytale:first_blood
---      ["The weapon in that last crate was bestowed upon us by the ancients!"] = "", -- A_Classic_Fairytale:first_blood
---      ["The what?!"] = "", -- A_Classic_Fairytale:dragon
---      ["The wind whispers that you are ready to become familiar with tools, now..."] = "", -- A_Classic_Fairytale:first_blood
---      ["They are all waiting back in the village, haha."] = "", -- A_Classic_Fairytale:enemy
---      ["They Call Me Bullseye!"] = "", -- Space_Invasion
---      ["They have weapons we've never seen before!"] = "", -- A_Classic_Fairytale:united
---      ["They keep appearing like this. It's weird!"] = "", -- A_Classic_Fairytale:united
---      ["They killed "] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
---      ["They must be trying to weaken us!"] = "", -- A_Classic_Fairytale:enemy
---      ["They never learn"] = "", -- A_Classic_Fairytale:journey
---      ["They told us to wear these clothes. They said that this is the newest trend."] = "", -- A_Classic_Fairytale:enemy
---      ["They've been manipulating us all this time!"] = "", -- A_Classic_Fairytale:enemy
---      ["Thighlicker"] = "", -- A_Classic_Fairytale:united
---      ["This is it! It's time to make Fell From Heaven fall for me..."] = "", -- A_Classic_Fairytale:first_blood
---      ["This island is the only place left on Earth with grass on it!"] = "", -- A_Classic_Fairytale:enemy
---      ["This is typical!"] = "", -- A_Classic_Fairytale:dragon
---      ["This must be some kind of sorcery!"] = "", -- A_Classic_Fairytale:shadow
---      ["This must be the caves!"] = "", -- A_Classic_Fairytale:backstab
-	["This one's tricky."] = "Der hier ist knifflig.",
-	["This rain is really something..."] = "Das nenne ich mal einen Regenschauer...",
---      ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
---      ["Those aliens are destroying the island!"] = "", -- A_Classic_Fairytale:family
-	["Timed Kamikaze!"] = "Pünktliches Kamikaze!",
-	["Time Extended!"] = "Zeit verlängert!",
-	["Time Extension"] = "Zeitverlängerung",
-	["Time Left: "] = "Verbleibende Zeit",
-	["TIME: "] = "ZEIT: ",
---      ["Tip: The rope physics are different than in the real world, |use it to your advantage!"] = "", -- Basic_Training_-_Rope
-	["Toggle Shield"] = "Schild ein/aus",
---      ["To help you, of course!"] = "", -- A_Classic_Fairytale:journey
---      ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
---      ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
---      [" to save the village."] = "", -- A_Classic_Fairytale:dragon
---      ["To the caves..."] = "", -- A_Classic_Fairytale:united
-	["Toxic Team"] = "Giftige Gegner", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
-	["TRACK COMPLETED"] = "STRECKENLAUF BEENDET",
-
---      ["training"] = "", -- portal
---      ["Traitors"] = "", -- A_Classic_Fairytale:epil
---      ["Tribe"] = "", -- A_Classic_Fairytale:backstab
---	["TrophyRace"] = "",
---      ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
---      ["T_T"] = "",
-	["Tumbling Time Extended!"] = "Purzelzeit verlängert!",
---      ["Turns until Sudden Death: "] = "", -- A_Classic_Fairytale:dragon
---      [" turns until Sudden Death! Better hurry!"] = "", -- A_Classic_Fairytale:dragon
-	["Turn Time"] = "Zeit pro Zug",
---      ["Two little hogs cooperating, getting past obstacles..."] = "", -- A_Classic_Fairytale:journey
---      ["Uhm...I met one of them and took his weapons."] = "", -- A_Classic_Fairytale:shadow
---      ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
---      ["ULTRA KILL"] = "", -- Mutant
---      ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
---      ["Unexpected Igor"] = "", -- A_Classic_Fairytale:dragon
---      ["Unique new weapons"] = "", -- Continental_supplies
---      ["Unit 0x0007"] = "", -- A_Classic_Fairytale:family
---      ["Unit 334a$7%;.*"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
-	["Unit 3378"] = "Einheit 3378",
-	["Unit 835"] = "Einheit 3378",
---      ["United We Stand"] = "", -- A_Classic_Fairytale:united
-	["Unit"] = "Einheit",
-	["Unlimited Attacks"] = "Unbegrenzte Angriffe",
---      ["Unlucky Sods"] = "", -- User_Mission_-_Rope_Knock_Challenge
-	["Unstoppable!"] = "Unaufhaltbar!",
---      ["Unsuspecting Louts"] = "", -- User_Mission_-_Rope_Knock_Challenge
---      ["[Up], [Down] to aim, [Space] to shoot!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Use it wisely!"] = "", -- A_Classic_Fairytale:dragon
---      ["Use it with precaution!"] = "", -- A_Classic_Fairytale:first_blood
---      ["User Challenge"] = "",
---      ["Use the air-attack weapons and the arrow keys to select structures."] = "", -- Construction_Mode
---      ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
---      ["Use the rope to get on the head of the mole, young one!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Use the rope to knock your enemies to their doom."] = "", -- User_Mission_-_Rope_Knock_Challenge
---      ["Use your ready time to think."] = "", -- Frenzy
-	["Use your rope to get from start to finish as fast as you can!"] = "Nutze das Seil um von Start zu Ziel zu gelangen - so schnell du kannst!",
---      ["Utility Crate Placement Mode"] = "", -- Construction_Mode
---      ["Vampirism"] = "", -- Construction_Mode
---      ["Vedgies"] = "", -- A_Classic_Fairytale:journey
---      ["Vegan Jack"] = "", -- A_Classic_Fairytale:enemy
---      ["Victory!"] = "", -- Basic_Training_-_Rope
-	["Victory for the "] = "Sieg für ", -- CTF_Blizzard, Capture_the_Flag
---      ["Violence is not the answer to your problems!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Walls Left"] = "", -- WxW
---      ["Walls Required"] = "", -- WxW
---      ["WALL TO WALL"] = "", -- WxW
---      ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
---      ["Watch your steps, young one!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Watermelon Bomb"] = "", -- Construction_Mode
-	["Waypoint placed."] = "Wegpunkt gesetzt",
-	["Way-Points Remaining"] = "Wegpunkte verbleibend",
---      ["Weaklings"] = "", -- A_Classic_Fairytale:shadow
---      ["We all know what happens when you get frightened..."] = "", -- A_Classic_Fairytale:first_blood
---      ["Weapon Crate Placement Mode"] = "", -- Construction_Mode
---      ["Weapon Filter"] = "", -- Construction_Mode
---      ["weaponschemes"] = "", -- Continental_supplies
---      ["Weapons reset."] = "", -- Highlander
-	["Weapons Reset"] = "Waffenzurücksetzung",
---      ["We are indeed."] = "", -- A_Classic_Fairytale:backstab
---      ["We can't defeat them!"] = "", -- A_Classic_Fairytale:shadow
---      ["We can't hold them up much longer!"] = "", -- A_Classic_Fairytale:united
---      ["We can't let them take over our little island!"] = "", -- A_Classic_Fairytale:enemy
---      ["We have no time to waste..."] = "", -- A_Classic_Fairytale:journey
---      ["We have nowhere else to live!"] = "", -- A_Classic_Fairytale:enemy
---      ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
---      ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
---      ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
-	["Well done."] = "Gut gemacht.",
---      ["We'll give you a problem then!"] = "", -- A_Classic_Fairytale:enemy
---      ["We'll spare your life for now!"] = "", -- A_Classic_Fairytale:backstab
---      ["Well, that was a waste of time."] = "", -- A_Classic_Fairytale:dragon
---      ["Well, well! Isn't that the cutest thing you've ever seen?"] = "", -- A_Classic_Fairytale:journey
---      ["Well, yes. This was a cyborg television show."] = "", -- A_Classic_Fairytale:enemy
---      ["We made sure noone followed us!"] = "", -- A_Classic_Fairytale:backstab
---      ["We need to move!"] = "", -- A_Classic_Fairytale:united
---      ["We need to prevent their arrival!"] = "", -- A_Classic_Fairytale:backstab
---      ["We need to warn the village."] = "", -- A_Classic_Fairytale:shadow
---      ["We should head back to the village now."] = "", -- A_Classic_Fairytale:shadow
---      ["We were trying to save her and we got lost."] = "", -- A_Classic_Fairytale:family
---      ["We won't let you hurt her!"] = "", -- A_Classic_Fairytale:journey
---      ["What?! A cannibal? Here? There is no time to waste! Come, you are prepared."] = "", -- A_Classic_Fairytale:first_blood
---      ["What a douche!"] = "", -- A_Classic_Fairytale:enemy
---      ["What am I gonna...eat, yo?"] = "", -- A_Classic_Fairytale:family
---      ["What are you doing at a distance so great, young one?"] = "", -- A_Classic_Fairytale:first_blood
---      ["What are you doing? Let her go!"] = "", -- A_Classic_Fairytale:journey
---      ["What a ride!"] = "", -- A_Classic_Fairytale:shadow
---      ["What a strange cave!"] = "", -- A_Classic_Fairytale:dragon
---      ["What a strange feeling!"] = "", -- A_Classic_Fairytale:backstab
---      ["What do my faulty eyes observe? A spy!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Whatever floats your boat..."] = "", -- A_Classic_Fairytale:shadow
---      [" What !! For all of this struggle i just win some ... TIME o0"] = "", -- portal
---      ["What has "] = "", -- A_Classic_Fairytale:backstab
---      ["What? Here? How did they find us?!"] = "", -- A_Classic_Fairytale:backstab
---      ["What is this place?"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy
---      ["What shall we do with the traitor?"] = "", -- A_Classic_Fairytale:backstab
---      ["WHAT?! You're the ones attacking us!"] = "", -- A_Classic_Fairytale:enemy
---      ["When?"] = "", -- A_Classic_Fairytale:enemy
---      ["When I find it..."] = "", -- A_Classic_Fairytale:dragon
---      ["Where are all these crates coming from?!"] = "", -- A_Classic_Fairytale:shadow
---      ["Where are they?!"] = "", -- A_Classic_Fairytale:backstab
---      ["Where did that alien run?"] = "", -- A_Classic_Fairytale:dragon
---      ["Where did you get the exploding apples?"] = "", -- A_Classic_Fairytale:shadow
---      ["Where did you get the exploding apples and the magic bow that shoots many arrows?"] = "", -- A_Classic_Fairytale:shadow
---      ["Where did you get the magic bow that shoots many arrows?"] = "", -- A_Classic_Fairytale:shadow
---      ["Where did you get the weapons in the forest, Dense Cloud?"] = "", -- A_Classic_Fairytale:backstab
---      ["Where do you get that?!"] = "", -- A_Classic_Fairytale:enemy
---      ["Where have you been?!"] = "", -- A_Classic_Fairytale:backstab
---      ["Where have you been?"] = "", -- A_Classic_Fairytale:united
---      ["Whip"] = "", -- Construction_Mode
---      ["? Why?"] = "", -- A_Classic_Fairytale:backstab
---      ["Why "] = "", -- A_Classic_Fairytale:backstab
---      ["! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
---      ["Why are you doing this?"] = "", -- A_Classic_Fairytale:journey
---      ["Why are you helping us, uhm...?"] = "", -- A_Classic_Fairytale:family
---      ["Why can't he just let her go?!"] = "", -- A_Classic_Fairytale:family
---      ["Why do men keep hurting me?"] = "", -- A_Classic_Fairytale:first_blood
---      ["Why do you not like me?"] = "", -- A_Classic_Fairytale:shadow
---      ["Why do you want to take over our island?"] = "", -- A_Classic_Fairytale:enemy
---      ["Why me?!"] = "", -- A_Classic_Fairytale:backstab
---      ["Why would they do this?"] = "", -- A_Classic_Fairytale:backstab
---      ["- Will Get 1-3 random weapons"] = "", -- Continental_supplies
---      ["- Will give you an airstrike every fifth turn."] = "", -- Continental_supplies
---      ["- Will give you a parachute every second turn."] = "", -- Continental_supplies
-
-
-	["Will this ever end?"] = "Wird dies je enden?",
---      ["WINNER IS "] = "", -- Mutant
-	["WINNING TIME: "] = "BESTZEIT: ",
---      ["Wise Oak"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
---      ["With Dense Cloud on the land of shadows, I'm the village's only hope..."] = "", -- A_Classic_Fairytale:journey
---      ["With the rest of the tribe gone, it was up to "] = "", -- A_Classic_Fairytale:dragon
---      ["Worry not, for it is a peaceful animal! There is no reason to be afraid..."] = "", -- A_Classic_Fairytale:first_blood
---      ["Wow, what a dream!"] = "", -- A_Classic_Fairytale:backstab
---      ["Y3K1337"] = "", -- A_Classic_Fairytale:journey, A_Classic_Fairytale:shadow
---      ["Yay, we won!"] = "", -- A_Classic_Fairytale:enemy
---      ["Y Chwiliad"] = "", -- A_Classic_Fairytale:dragon
---      ["Yeah...I think it's a 'he', lol."] = "", -- A_Classic_Fairytale:shadow
---      ["Yeah, sure! I died. Hillarious!"] = "", -- A_Classic_Fairytale:backstab
---      ["Yeah, take that!"] = "", -- A_Classic_Fairytale:dragon
---      ["Yeah? Watcha gonna do? Cry?"] = "", -- A_Classic_Fairytale:journey
---      ["Yes!"] = "", -- A_Classic_Fairytale:enemy
---      ["Yes, yeees! You are now ready to enter the real world!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Yo, dude, we're here, too!"] = "", -- A_Classic_Fairytale:family
---      ["You are far from home, and the water is rising, climb up as high as you can!"] = "", -- ClimbHome
---      ["You are given the chance to turn your life around..."] = "", -- A_Classic_Fairytale:shadow
---      ["You are playing with our lives here!"] = "", -- A_Classic_Fairytale:enemy
---      ["! You bastards!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
---      ["You bear impressive skills, "] = "", -- A_Classic_Fairytale:dragon
---      ["You can't fire a portal on the blue surface"] = "", -- portal
---      ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
-	["You'd almost swear the water was rising!"] = "Man könnte fast schwören das Wasser würde steigen!",
---      ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
---      ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
---      ["You have 7 turns until the next wave arrives.|Make sure the arriving cannibals are greeted appropriately!|If the hog dies, the cause is lost.|Hint: you might want to use some mines..."] = "", -- A_Classic_Fairytale:backstab
---      ["You have "] = "", -- A_Classic_Fairytale:dragon
---      ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
---      ["You have been respawned, at your last checkpoint!"] = "", -- Basic_Training_-_Rope
---      ["You have been respawned, be more carefull next time!"] = "", -- Basic_Training_-_Rope
---      ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
---      ["You have failed to complete your task, young one!"] = "", -- A_Classic_Fairytale:journey
---      ["You have failed to save the tribe!"] = "", -- A_Classic_Fairytale:backstab
---      ["You have finally figured it out!"] = "", -- A_Classic_Fairytale:enemy
---      ["You have kidnapped our whole tribe!"] = "", -- A_Classic_Fairytale:enemy
---      ["You have killed an innocent hedgehog!"] = "", -- A_Classic_Fairytale:backstab
---      ["You have proven yourself worthy to see our most ancient secret!"] = "", -- A_Classic_Fairytale:first_blood
---      ["You have proven yourselves worthy!"] = "", -- A_Classic_Fairytale:enemy
-	["You have SCORED!!"] = "Du hast GEPUNKTET!",
---      ["You have to destroy 12 targets in 180 seconds"] = "", -- Basic_Training_-_Cluster_Bomb
---      ["You have won the game by proving true cooperative skills!"] = "", -- A_Classic_Fairytale:enemy
---      ["You just appeared out of thin air!"] = "", -- A_Classic_Fairytale:backstab
---      ["You just committed suicide..."] = "", -- A_Classic_Fairytale:shadow
---      ["You killed my father, you monster!"] = "", -- A_Classic_Fairytale:backstab
---      ["You know...taking a stroll."] = "", -- A_Classic_Fairytale:backstab
---      ["You know what? I don't even regret anything!"] = "", -- A_Classic_Fairytale:backstab
---      ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
---      ["You may only attack from a rope!"] = "", -- WxW
---      ["You may only spawn 5 crates per turn."] = "", -- Construction_Mode
---      ["You may only use 1 Extra Time per turn."] = "", -- Construction_Mode
---      ["You meatbags are pretty slow, you know!"] = "", -- A_Classic_Fairytale:enemy
---      ["You might want to find a way to instantly kill arriving cannibals!"] = "", -- A_Classic_Fairytale:backstab
---      ["Young one, you are telling us that they can instantly change location without a shaman?"] = "", -- A_Classic_Fairytale:united
---      ["You probably know what to do next..."] = "", -- A_Classic_Fairytale:first_blood
---      ["Your deaths will be avenged, cannibals!"] = "", -- A_Classic_Fairytale:enemy
---      ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
---      ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
---      ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
---      ["You're funny!"] = "", -- A_Classic_Fairytale:journey
---      ["You're getting pretty good! |Tip: When you shorten you rope you move faster! |and when you lengthen it you move slower"] = "", -- Basic_Training_-_Rope
---      ["You're pathetic! You are not worthy of my attention..."] = "", -- A_Classic_Fairytale:shadow
---      ["You're probably wondering why I bought you back..."] = "", -- A_Classic_Fairytale:backstab
---      ["You're terrorizing the forest...We won't catch anything like this!"] = "", -- A_Classic_Fairytale:shadow
---      ["Your hogs must survive!"] = "", -- A_Classic_Fairytale:journey
---      ["Your movement skills will be evaluated now."] = "", -- A_Classic_Fairytale:first_blood
-	["You saved"] = "Gerettet: ",
---      ["You've been assaulting us, we have been just defending ourselves!"] = "", -- A_Classic_Fairytale:enemy
-	["You've failed. Try again."] = "Du bist gescheitert. Versuche es nochmal.",
-	["You've reached the goal!| |Time: "] = "Ziel erreicht!| |Zeit: ",
---      ["You will be avenged!"] = "", -- A_Classic_Fairytale:shadow
---      ["- You will recieve 2-4 weapons on each kill! (Even on own hogs)"] = "", -- Continental_supplies
---      ["You won't believe what happened to me!"] = "", -- A_Classic_Fairytale:backstab
---      ["Yuck! I bet they'll keep worshipping her even after I save the village!"] = "", -- A_Classic_Fairytale:family
---      ["Zealandia"] = "", -- Continental_supplies
-	["'Zooka Team"] = "Die Knalltüten",
---      ["Zork"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
-    }
+[""]="",
+["Bat your opponents through the|baskets and out of the map!"]="Schlage deine Widersacher durch|die Körbe und aus der Karte hinaus!",
+["Hedgewars-Basketball"]="Hedgewars-Basketball",
+["Not So Friendly Match"]="Kein-so-Freundschaftsspiel",
+["%s is out and Team %d|scored a point!| |Score:"]="%s ist draußen und Team %d|erhält einen Punkt!| |Punktestand:",
+["%s is out and Team %d|scored a penalty!| |Score:"]="%s ist draußen und Team %d|erhält eine Strafe!| |Punktestand:",
+["GAME OVER!"]="SPIEL ZU ENDE!",
+["Hooray!"]="Hurra!",
+["Victory for the "]="Sieg für ",
+["Flag respawned!"]="Fahne wieder erschienen!",
+["Opposing Team: "]="Gegnerisches Team: ",
+["You have SCORED!!"]="Du hast GEPUNKTET!",
+["Flag returned!"]="Fahne zurückgebracht!",
+["That was pointless."]="Das war sinnlos.",
+["The flag will respawn next round."]="Die Fahne wird nächste Runde wieder auftauchen.",
+["Flag captured!"]="Flagge genommen!",
+["Boom!"]="Bumm!",
+[" - Return the enemy flag to your base to score | - First team to 3 captures wins | - You may only score when your flag is in your base | - Hogs will drop the flag if killed, or drowned | - Dropped flags may be returned or recaptured | - Hogs respawn when killed"]=" – Bringe die gegnerische Flagge zu deiner Heimatbasis, um zu punkten. | – Das Team, das zuerst 3 Flaggen erobert, gewinnt. | – Du kannst nur punkten, wenn deine eigene Flagge in deiner Basis ist | – Igel lassen die Flagge fallen, wenn sie sterben oder ertrinken | – Fallengelassene Flaggen können zurückgebracht oder wieder gestohlen werden | – Igel tauchen nach ihrem Tod wieder auf",
+["Climb Home"]="Nach Hause klettern",
+["Rope to safety"]="Schwing dich in Sicherheit",
+["You are far from home, and the water is rising, climb up as high as you can!|Your score will be based on your height."]="Du bist weit weg von Zuhause, und das Wasser steigt, klettere so hoch, wie du kannst!|Deine Punktzahl wird von deiner Höhe abhängen.",
+["Victory!"]="Sieg!",
+["Made it!"]="Geschafft!",
+["Ahhh, home, sweet home. Made it in %d seconds."]="Ah, trautes Heim, Glück allein! Geschafft in %d Sekunden.",
+["You have beaten the challenge!"]="Du hast die Herausforderung gemeistert!",
+["Your height over time"]="Deine Höhe über die Zeit",
+["%s reached home in %.3f seconds. Congratulations!"]="%s has das Zuhause in %.3f Sekunden erreicht. Gratulation!",
+["%s bravely climbed up to a dizzy height of %d to reach home."]="Mutig erklomm %s eine schwindelerregende Höhe von %d, um das Zuhause zu erreichen.",
+["seconds"]="Sekunden",
+["%s has passed the best height of %s!"]="%s hat die beste Höhe von %s überschritten!",
+["%s never got the ninja diploma."]="%s ist bei der Ninjaprüfung durchgefallen.",
+["You have to move upwards, not downwards, %s!"]="Du musst nach oben, nicht nach unten, %s!",
+["%s never wanted to reach for the sky in the first place."]="%s wollte nie nach den Sternen greifen.",
+["%s should try the rope training mission first."]="%s sollte wohl zuerst das Seiltraining absolvieren.",
+["%s skipped ninja classes."]="%s hat den Ninjaunterricht geschwänzt.",
+["%s doesn’t really know how to handle a rope properly."]="%s weiß nicht, wie man mit einem Seil umgeht.",
+["Better luck next time!"]="Vielleicht klappt's beim nächsten Mal!",
+["It was all just bad luck!"]="So ein Pech!",
+["Well, that escalated quickly!"]="Das ging aber schnell in die Hose!",
+["What? Is it over already?"]="Wie? Ist es schon vorbei?",
+["You lose!"]="Du verlierst!",
+["%s was damn close to home."]="%s war verdammt nah an Zuhause.",
+["%s was close to home."]="%s war nah an Zuhause.",
+["%s was good, but not good enough."]="%s war gut, aber nicht gut genug.",
+["%s managed to pass half of the distance towards home."]="%s hat die Hälfte des Weges nach Hause absolviert.",
+["%s went over a quarter of the way towards home."]="%s hat über die Hälfte des Weges nach Hause absolviert.",
+["%s still had a long way to go."]="%s hatte noch einen langen Weg.",
+["%s made it past the hogosphere."]="%s hat es über die Igelspähre geschafft.",
+["%s barely made it past the hogosphere."]="%s hat es so gerade noch über die Igelsphäre geschafft.",
+["points"]="Punkte",
+["%s wins!"]="%s gewinnt!",
+["Team’s best heights per round"]="Die Besthöhen der Teams pro Runde",
+["This round’s award for ultimate disappointment goes to: Everyone!"]="Der ultimative Enttäuschungspreis geht in dieser Runde an: alle!",
+["%s (%s) reached for the sky and beyond with a height of %d!"]="%s (%s) griff nach den Sternen mit einer Höhe von %d!",
+["%s (%s) was certainly not afraid of heights: Peak height of %d!"]="%s (%s) hatte ganz bestimmt keine Höhenangst: Besthöhe von %d!",
+["%s (%s) does not have to feel ashamed for their best height of %d."]="%s (%s) braucht sich für die Besthöhe von %d nicht zu schämen.",
+["%s (%s) reached a decent peak height of %d."]="%s (%s) erreichte eine gute Besthöhe von %d.",
+["%s (%s) reached a peak height of %d."]="%s (%s) erreichte eine Besthöhe von %d.",
+["The Navy greets %s for managing to get in a distance of %d away from the mainland!"]="Die Marine grüßt %s für einen Abstand von %d vom Festland!",
+["Greetings from the Navy, %s (%s), for being a distance of %d away from the mainland!"]="Grüße von der Marine, %s (%s), für einen Abstand von %d vom Festland!",
+["Your hedgehog was panicly afraid of the water and decided to go in a safe distance of %d from it."]="Dein Igel hatte panische Angst vorm Wasser und hatte einen Sicherheitsabstand von %d erreicht.",
+["%s (%s) was panicly afraid of the water and decided to get in a safe distance of %d from it."]="%s (%s) hatte panische Angst vorm Wasser und hatte einen Sicherheitsabstand von %d erreicht.",
+["Ouch! That must have hurt. You mutilated your poor hedgehog hog with %d damage."]="Autsch! Das muss wehgetan haben. Du hast deinen armen Igel mit %d verstümmelt.",
+["Ouch! That must have hurt. %s (%s) hit the ground with %d damage points."]="Autsch! Das muss wehgetan haben. %s (%s) ist mit %d auf den Boden aufgeschlagen.",
+["Control pillars to score points."]="Behalte die Kontrolle über die Säulen, um Punkte zu erhalten.",
+["Goal"]="Ziel",
+["Team Scores"]="Teampunktestand",
+["Bat balls at your enemies and|push them into the sea!"]="Schlage Bälle auf deine Widersacher|und lass sie ins Meer fallen!",
+["Hedgewars-Knockball"]="Hedgewars-Schlagball",
+["TrophyRace"]="TrophyRace",
+["Use your rope to get from start to finish as fast as you can!"]="Nutze das Seil um von Start zu Ziel zu gelangen - so schnell du kannst!",
+["NEW fastest lap: "]="NEUE schnellste Runde: ",
+["Fastest lap: "]="Schnellste Runde: ",
+["Best laps per team: "]="Beste Rundenzeiten pro Team: ",
+["Team %d: "]="Team %d: ",
+["You've reached the goal!| |Time: "]="Ziel erreicht!| |Zeit: ",
+["Dense Cloud"]="Dichte Wolke",
+["Fiery Water"]="Feuerwasser",
+["Leaks A Lot"]="Undichte Stelle",
+["Fell From Grace"]="Fiel in Ungnade",
+["Raging Buffalo"]="Wütender Büffel",
+["Righteous Beard"]="Redlicher Bart",
+["Eagle Eye"]="Adlerauge",
+["Flaming Worm"]="Flammenwurm",
+["Wise Oak"]="Weise Eiche",
+["Bone Jackson"]="Knochen-Ede",
+["Brain Teaser"]="Hirnreiz",
+["Gimme Bones"]="Gib Knochen",
+["Bloodpie"]="Blutkuchen",
+["Hedgibal Lecter"]="Iglibal Lector",
+["Scalp Muncher"]="Skalpknabberer",
+["Back Breaker"]="Rückenbrecher",
+["Dahmer"]="Dahmer",
+["Meiwes"]="Meiwes",
+["Ear Sniffer"]="Ohrenschnüffler",
+["Muriel"]="Muriel",
+["Regurgitator"]="Hochwürger",
+["Let them have a taste of my fury!"]="Lasst sie von meinem Zorn kosten!",
+["There's more of them? When did they become so hungry?"]="Es gibt mehr von ihnen? Seit wann wurden sie so hungrig?",
+["We are indeed."]="Das sind wir in der Tat.",
+["I think we are safe here."]="Ich glaub, hier sind wir in Sicherheit.",
+["I'm...alive? How? Why?"]="Ich lebe? Wie? Warum?",
+["But why would they help us?"]="Aber warum würden sie uns helfen?",
+["It must be the aliens!"]="Es müssen diese Außerirdischen sein!",
+["You just appeared out of thin air!"]="Du tauchtest aus dem Nichts auf!",
+["But...we died!"]="Aber … wir sind gestorben!",
+["This must be the caves!"]="Dies müssen die Höhlen sein!",
+["Dude, where are we?"]="He, wo sind wir?",
+["Why would they do this?"]="Warum würden sie das tun?",
+["It must be the aliens' deed."]="Das muss die Tat der Außerirdischen sein.",
+["Do not laugh, inexperienced one, for he speaks the truth!"]="Lach nicht, Unerfahrener, da er die Wahrheit spricht!",
+["Yeah, sure! I died. Hillarious!"]="Ja, sicher! Ich starb. Urkomisch!",
+["You're...alive!? But we saw you die!"]="Du … lebst? Aber wir sahen dich sterben!",
+["???"]="???",
+["Wow, what a dream!"]="Wow, was für ein Traum!",
+["Dude, that's so cool!"]="Junge, das ist so cool!",
+["But that's impossible!"]="Aber das ist unmöglich!",
+["It was not a dream, unwise one!"]="Es war kein Traum, du Tor!",
+["Exactly, man! That was my dream."]="Genau! Das war mein Traum.",
+["Dude, wow! I just had the weirdest high!"]="Junge, wow! Ich hatte gerade das seltsamste Erlebnis!",
+["The answer is...entertaintment. You'll see what I mean."]="Die Antwort lautet: Unterhaltung. Du wirst verstehen, was ich meine.",
+["You're probably wondering why I bought you back..."]="Ihr fragt euch bestimmt, warum ich euch zurückgebracht habe.",
+["What shall we do with the traitor?"]="Was sollen wir mit dem Verräter tun?",
+["Here, let me help you!"]="Hier, lass mich dir helfen!",
+["I forgot that she's the daughter of the chief, too..."]="Ich vergaß, dass sie auch die Tochter des Häuptlings ist.",
+["You killed my father, you monster!"]="Du hast meinen Vater umgebracht, du Monster!",
+["Look, I had no choice!"]="Versteh doch, ich hatte keine Wahl!",
+["You have been giving us out to the enemy, haven't you!"]="Du hast uns an den Feind verkauft, nicht wahr?",
+["You're a pathetic liar!"]="Du bist ein dreckiger Lügner!",
+["Interesting! Last time you said you killed a cannibal!"]="Interessant. Das letzte mal sagtest du, dass du einen Kannibalen getötet hast.",
+["I told you, I just found them."]="Ich sag's dir, ich habe sie gerade erst gefunden.",
+["Where did you get the weapons in the forest, Dense Cloud?"]="Woher hast du die Waffen im Wald gefunden, Dichte Wolke?",
+["Not now, Fiery Water!"]="Nicht jetzt, Feuerwasser!",
+["I can't believe what I'm hearing!"]="Ich kann nicht glauben, was ich höre!",
+["You know what? I don't even regret anything!"]="Weißt du was? Ich bereue nichts!",
+["In fact, you are the only one that's been acting strangely."]="Tatsächlich bist du der Einzige, der sich seltsam benahm.",
+["Are you accusing me of something?"]="Beschuldigst du mich?",
+["Seems like every time you take a \"walk\", the enemy find us!"]="Es scheint so, dass jedes Mal, wenn du »Spazieren gehst«, findet uns der Feind!",
+["You know...taking a stroll."]="Du weißt schon … umherbummeln.",
+["Where have you been?!"]="Wo warst du?!",
+["You won't believe what happened to me!"]="Ihr glaubt nicht, was mir passiert ist!",
+["Hey, guys!"]="Hey, Leute!",
+["There must be a spy among us!"]="Es muss ein Spion unter uns sein!",
+["We made sure noone followed us!"]="Wir hatten sichergestellt, dass uns niemand folgte!",
+["What? Here? How did they find us?!"]="Was? Hier? Wie haben sie uns gefunden?",
+["Look out! There's more of them!"]="Passt auf! Da sind noch mehr von ihnen!",
+["What a strange feeling!"]="Was für ein seltsames Gefühl!",
+["I need to warn the others."]="Ich muss die anderen warnen.",
+["If only I had a way..."]="Wenn ich nur wüsste, wie.",
+["Oh, silly me! I forgot that I'm the shaman."]="Ach, ich Dummkopf! Ich vergaß, dass ich der Schamane bin.",
+["I sense another wave of cannibals heading our way!"]="Ich nehme eine Welle von Kannibalen, die auf uns zu gehen!",
+["I feel something...a place! They will arrive near the circles!"]="Ich fühle etwas … einen Ort! Sie werden in der Nähe der Kreise auftauchen!",
+["We need to prevent their arrival!"]="Wir müssen ihre Ankunft verhindern!",
+["Go, quick!"]="Los, schnell!",
+["I want to see how it handles this!"]="Ich will sehen, wie es damit klar kommt.",
+["I sense another wave of cannibals heading my way!"]="Ich nehme eine weitere Welle in meine Richtung wahr!",
+["I need to prevent their arrival!"]="Ich muss ihre Ankunft verhindern!",
+["Oh, my! This is even more entertaining than I've expected!"]="Haha! Das ist sogar noch lustiger, als ich erwartet hatte!",
+["You might want to find a way to instantly kill arriving cannibals!"]="Du könntest eine Möglichkeit finden, um die ankommenden Kannibalen sofort zu töten.",
+["I believe there's more of them."]="Ich glaube, es gibt noch mehr von ihnen.",
+["I marked the place of their arrival. You're welcome!"]="Ich habe ihren Ankunftsort markiert. Gern geschehen!",
+["Why me?!"]="Warum ich?",
+["He won't be selling us out anymore!"]="Er wird uns nicht mehr verraten!",
+["That's for my father!"]="Das ist für meinen Vater!",
+["Let's show those cannibals what we're made of!"]="Lass uns diesen Kannibalen zeigen, aus welchem Holz wir geschnitzt sind!",
+["We'll spare your life for now!"]="Wir werden dein Leben verschonen. Noch.",
+["May the spirits aid you in all your quests!"]="Mögen die Geiste dich in all deinen Aufgaben begleiten!",
+["I just don't want to sink to your level."]="Ich will nicht auf dein Niveau herabsinken.",
+["Let us help, too!"]="Lass uns auch helfen!",
+["No. You and the rest of the tribe are safer there!"]="Nein. Du und der Rest deines Stammes sind hier sicherer!",
+["! You bastards!"]="! Ihr Bastarde!",
+["They killed "]="Sie töteten ",
+["! Why?!"]="! Wieso?",
+["That was just mean!"]="Das war einfach nur gemein!",
+["Oh no, not "]="Oh nein, nicht ",
+["? Why?"]="? Warum",
+["Why "]="Warum, ",
+[" ever done to you?!"]=" jemals angetan?!",
+["What has "]="Was hat dir ",
+["Backstab"]="Verrat",
+["Defeat the cannibals"]="Besiege die Kannibalen",
+["The food bites back"]="Das Essen beißt zurück",
+["Drills"]="Bohrer",
+["You have 7 turns until the next wave arrives.|Make sure the arriving cannibals are greeted appropriately!|If the hog dies, the cause is lost.|Hint: you might want to use some mines..."]="Du hast 7 Züge, bis die nächste Welle ankommt.|Stell sicher, dass die ankommenden Kannibalen auf die passende Weise begrüßt werden.|Wenn der Igel stirbst, die die Mission verloren.|Tipp: Vielleicht solltest du ein paar Minen benutzen.",
+["Judas"]="Judas",
+["Kill the traitor...or spare his life!|Kill him or press [Precise]!"]="Töte den Verräter … oder verschone ihn!|Töte ihn oder drücke [Genaues Zielen]!",
+["Brutus"]="Brutus",
+["You have failed to save the tribe!"]="Du hast es nicht geschafft, den Stamm zu retten!",
+["Natives"]="Eingeborene",
+["Tribe"]="Stamm",
+["011101001"]="011101001",
+["You have killed an innocent hedgehog!"]="Du hast einen unschuldigen Igel getötet!",
+["That ought to show them!"]="Das wird ihnen eine Lehre sein!",
+["Guys, do you think there's more of them?"]="Leute, glaubt ihr, dass es noch mehr von ihnen gibt?",
+["Where are they?!"]="Wo sind sie?!",
+["These primitive people are so funny!"]="Diese primitiven Leute sind so lustig!",
+["I need to find the others!"]="Ich muss die anderen finden!",
+["I have to follow that alien."]="Ich muss diesem Außerirdischen finden.",
+["Assault Team"]="Sturmtruppe",
+["Reinforcements"]="Verstärkung",
+["Unit 334a$7%;.*"]="Einheit 334a$7%;,*",
+["Jack"]="Jochen",
+["Steve"]="Steffen",
+["Zork"]="Zork",
+["Elmo"]="Elmo",
+["Lee"]="Leo",
+["Rachel"]="Ramona",
+["Jeremiah"]="Jeremias",
+["Segmentation Paul"]="Se Gmentf Ehler",
+["Syntax Errol"]="Syntaxfehlel",
+["Unexpected Igor"]="Ausnahmefelix",
+["Bullseye"]="Volltreffer!",
+["Die, die, die!"]="Stirb, stirb, stirb!",
+["Yeah, take that!"]="Jawohl, nimm das!",
+[" to save the village."]=" ab, um das Dorf zu retten.",
+["With the rest of the tribe gone, it was up to "]="Ohne den Rest des Stammes, hing es von ",
+["But it proved to be no easy task!"]="Aber es war keine einfache Aufgabe!",
+["What a strange cave!"]="Was für eine seltsame Höhle!",
+["Now how do I get on the other side?!"]="Aber wie komme ich auf die andere Seite?!",
+["Dude, what's this place?!"]="Junge, was ist das für ein Ort?!",
+["And where's all the weed?"]="Und wo ist all das Gras?",
+["Is this place in my head?"]="Ist dieser Ort in meinem Kopf?",
+["I shouldn't have drunk that last pint."]="Ich sollte nicht die ganze Flasche ausgetrunken haben.",
+["Where did that alien run?"]="Wohin ist dieser Außerirdische gelaufen?",
+["When I find it..."]="Wenn ich ihn in die Finger kriege …",
+["This is typical!"]="Typisch!",
+["It's always up to women to clear up the mess men created!"]="Es bleibt immer an Frauen hängen, das Chaos, das Männer hinterlassen haben, aufzuräumen!",
+["What is this place?"]="Was ist dieser Ort?",
+["It doesn't matter. I won't let that alien hurt my daughter!"]="Es ist egal. Ich werde diesen Außerirdischen nicht meine Tochter weh tun lassen!",
+["Every single time!"]="Jedes Mal!",
+["How come in a village full of warriors, it's up to me to save it?"]="Wie kommt es, dass es immer an mir liegt, ein Dorf voller Krieger zu retten?",
+["Greetings, "]="Grüße, ",
+["As you can see, there is no way to get on the other side!"]="Wie du siehst, gibt es keinen Weg, um auf die andere Seite zu kommen.",
+["I wish to help you, "]="Ich möchte dir helfen, ",
+["Beware, though! If you are slow, you die!"]="Aber Vorsicht! Wenn du langsam bist, wirst du sterben!",
+["Talk about mixed signals..."]="Zuckerbrot und Peitsche …",
+["Well, that was a waste of time."]="Tja, das war wohl Zeitverschwendung.",
+["You bear impressive skills, "]="Du hast großartige Fähigkeiten, ",
+["However, my mates don't agree with me on letting you go..."]="Aber meine Freunde wollen dich nicht gehen lassen …",
+["I guess you'll have to kill them."]="Ich fürchte, du musst sie töten.",
+["Nice work, "]="Gute Arbeit, ",
+["As a reward for your performance, here's some new technology!"]="Als Belohnung für deine Leistung gebe ich dir eine neue Technologie!",
+["Use it wisely!"]="Benutze sie weise!",
+["Dragon's Lair"]="Die Höhle des Löwen",
+["In order to get to the other side, you need to collect the crates first.|"]="Um auf die andere Seite zu gelangen, musst du zuerst die Kisten einsammeln.|",
+["Obstacle course"]="Hindernislauf",
+["As the ammo is sparse, you might want to reuse ropes while mid-air.|"]="Da die Munition knapp ist, solltest du vielleicht Seile in der Luft wiederverwenden.|",
+["If you wish to restart the course, hold [Precise] while your turn ends (e.g with Skip)!|"]="Wenn du den Hindernislauf neustarten willst, drücke [Genaues Zielen], während dein Zug endet (z.B. mit Überspringen)!|",
+["The enemy can't move but it might be a good idea to stay out of sight!|"]="Der Feind kann sich nicht bewegen, aber es wäre besser, aus seiner Schusslinie zu bleiben!|",
+[" turns until Sudden Death! Better hurry!"]=" Züge bis zum Sudden Death! Beeilung!",
+["You have "]="Du hast ",
+["Kill the aliens!"]="Töte die Außerirdischen!",
+["The Slaughter"]="Die Schlachtung",
+["The what?!"]="Die was?!",
+["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"]="Benutze das Portalgewehr, um zur nächsten Kiste zu kommen, dann benutze das nächste Gewehr, um zum letzten Ziel zu kommen.|",
+["Portal hint: one goes to the destination, and one is the entrance.|"]="Portaltipp: Eins geht zum Ziel, und das andere ist der Eingang.|",
+["Teleport hint: just use the mouse to select the destination!"]="Teleportertipp: Benutze einfach die Maus, um das Ziel auszuwählen.",
+["I'm a ninja."]="Ich bin ein Ninja.",
+["Salvation was one step closer now..."]="Die Erlösung war nun einen Schritt näher.",
+["011101000"]="011101000",
+["Find your tribe!|Cross the lake!"]="Finde deinen Stamm!|Überquere den Fluss!",
+["Y Chwiliad"]="Y Chwiliad",
+["Turns until Sudden Death: "]="Züge bis zum Sudden Death: ",
+["Ramon"]="Ramon",
+["Spiky Cheese"]="Stachliger Käse",
+["Honest Lee"]="Leo Ehrlich",
+["Sirius Lee"]="Leo Ernst",
+["Vegan Jack"]="Veganer-Jochen",
+["Brutal Lily"]="Brutalo-Lilie",
+["Smith 0.97"]="Smith 0.97",
+["Smith 0.98"]="Smith 0.98",
+["Smith 0.99a"]="Smith 0.99a",
+["Smith 0.99b"]="Smith 0.99b",
+["Smith 0.99f"]="Smith 0.99f",
+["Smith 1.0"]="Smith 1.0",
+["Everything looks OK..."]="Alles sieht gut aus.",
+["This will be fun!"]="Das wird Spaß machen!",
+["HAHA!"]="HAHA!",
+["And how am I alive?!"]="Und wie kann es sein, dass ich am Leben bin?",
+["It must be the cyborgs again!"]="Das müssen wohl wieder diese Cyborgs sein!",
+["Looks like the whole world is falling apart!"]="Es scheint, als würde die ganze Welt auseinanderfallen!",
+["Look out! We're surrounded by cannibals!"]="Passt auf! Wir sind von Kannibalen umzingelt!",
+["Cannibals?! You're the cannibals!"]="Kannibalen?! Ihr seid die Kannibalen!",
+["WHAT?! You're the ones attacking us!"]="WAS?! Ihr seid diejenigen, die uns angreifen!",
+["You have kidnapped our whole tribe!"]="Ihr habt unseren ganzen Stamm entführt!",
+["You've been assaulting us, we have been just defending ourselves!"]="Ihr habt uns überfallen, wir haben uns nur verteidigt!",
+["I can't believe this!"]="Ich kann es nicht glauben!",
+["Have we ever attacked you first?"]="Haben wir euch jemals zuerst angegriffen?",
+["Yes!"]="Ja!",
+["When?"]="Wann?",
+["Uhmm...ok no."]="Ähm, okay, nein.",
+["But you're cannibals. It's what you do."]="Aber ihr seid Kannibalen. Das ist, was ihr tut.",
+["Again with the 'cannibals' thing!"]="Nicht schon wieder dieser »Kannibalen«-Unfug!",
+["Where do you get that?!"]="Wo habt ihr das her?",
+["Everyone knows this."]="Das weiß jeder.",
+["I didn't until about a month ago."]="Ich wusste es nicht vor einem Monat.",
+["Hmmm...actually...I didn't either."]="Hmmm, ich … eigentlich auch nicht.",
+["About a month ago, a cyborg came and told us that you're the cannibals!"]="Vor etwa einem Monat kam ein Cyborg und erzählte uns, dass ihr die Kannibalen seid.",
+["A cy-what?"]="Ein Cy-was?",
+["Cyborg. It's what the aliens call themselves."]="Cyborg. So nennen sich die Außerirdischen selbst.",
+["They told us to wear these clothes. They said that this is the newest trend."]="Sie sagten uns, dass wir diese Kleidung tragen sollten. Sie sagten, dass es der neueste Trend sei.",
+["They've been manipulating us all this time!"]="Sie haben uns die ganze Zeit manipuliert!",
+["They must be trying to weaken us!"]="Sie müssen versuchen, uns zu schwächen!",
+["We have to unite and defeat those cylergs!"]="Wir müssen uns zusammentun, und diese Cylergs besiegen!",
+["We can't let them take over our little island!"]="Wir können sie nicht unsere kleine Insel erobern lassen!",
+["You have finally figured it out!"]="Ihr habt es endlich gemerkt!",
+["You meatbags are pretty slow, you know!"]="Ihr Fleischklumpen seid ziemlich langsam, wisst ihr?",
+["Why do you want to take over our island?"]="Warum wollt ihr unsere Insel erobern?",
+["Do you have any idea how valuable grass is?"]="Habt ihr überhaupt eine Ahnung darüber, wie wertvoll Gras ist?",
+["This island is the only place left on Earth with grass on it!"]="Diese Insel ist der einzige Ort auf der Welt, der noch Gras hat.",
+["It's worth more than wood!"]="Es ist wertvoller als Holz!",
+["That makes it almost invaluable!"]="Das macht es fast unbezahlbar!",
+["We have nowhere else to live!"]="Wir haben sonst keinen Ort zu leben!",
+["That's not our problem!"]="Das ist nicht unser Problem!",
+["We'll give you a problem then!"]="Dann geben wir euch ein Problem!",
+["Nicely done, meatbags!"]="Gut gemacht, Fleischkugeln!",
+["You have won the game by proving true cooperative skills!"]="Ihr hab das Spiel gewonnen, indem ihr wahre kooperative Fähigkeiten gezeigt habt!",
+["You have proven yourselves worthy!"]="Du hast dich bewährt.",
+["Game? Was this a game to you?!"]="Spiel? War das ein Spiel für dich?!",
+["Well, yes. This was a cyborg television show."]="Ähm, ja. Es war eine Cyborg-Fernsehsendung.",
+["It is called 'Hogs of Steel'."]="Sie heißt »Igel aus Stahl«.",
+["Are you saying that many of us have died for your entertainment?"]="Willst du damit sagen, dass viele von uns nur für eure Unterhaltung gestorben sind?",
+["Our tribe, our beautiful island!"]="Unser Stamm, unsere schöne Insel!",
+["All gone...everything!"]="Alles fort, alles!",
+["But the ones alive are stronger in their heart!"]="Aber die Lebendigen sind in ihrem Herzen stärker.",
+["Just kidding, none of you have died!"]="Nur ein Witz! Niemand von euch ist gestorben!",
+["I mean, none of you ceased to live."]="Ich meine, niemand von euch hat aufgehört, zu leben.",
+["You'll see what I mean!"]="Du wirst verstehen, was ich meine.",
+["They are all waiting back in the village, haha."]="Sie warten alle im Dorf, haha.",
+["You are playing with our lives here!"]="Du spielst mit unseren Leben!",
+["Do you think you're some kind of god?"]="Hältst du dich für eine Art Gott?",
+["Interesting idea, haha!"]="Interessanter Gedanke, haha!",
+["What a douche!"]="Was für ein Blödian!",
+["Defeat the cyborgs!"]="Besiege die Cyborgs!",
+["The Enemy Of My Enemy"]="Der Feind meines Feindes",
+["The Union"]="Die Einheit",
+["Hmmm...it's a draw. How unfortunate!"]="Hmmm … Es ist unentschieden. Wie blöd!",
+["Yay, we won!"]="Hurra, wir haben gewonnen!",
+["Nice work!"]="Gute Arbeit!",
+["Cannibals"]="Kannibalen",
+["Fell From Heaven"]="Fiel Vom Himmel",
+["Hedge-cogs"]="Stachelräder",
+["Leader"]="Führer",
+["Nancy Screw"]="Lockere Schraube",
+["Your deaths will be avenged, cannibals!"]="Eure Tode werden gerächt sein, Kannibalen!",
+["Brainiac"]="Hirni",
+["Corpse Thrower"]="Leichenschmeißer",
+["Hannibal"]="Hannibal",
+["More Natives"]="Mehr Ureinwohner",
+["Traitors"]="Verräter",
+["Carol"]="Karol",
+["Hogminator"]="Iglinator",
+["Unit 0x0007"]="Einheit 0x0007",
+["Blender"]="Blender",
+["Elderbot"]="Altbot",
+["Those aliens are destroying the island!"]="Diese Außerirdischen zerstören die Insel!",
+["Dude, all the plants are gone!"]="Mann, all die Pflanzen sind fort!",
+["What am I gonna...eat, yo?"]="Was werde ich … essen?",
+["Fell From Heaven is the best! Fell From Heaven is the greatest!"]="Fiel Vom Himmel ist die Beste! Fiel Vom Himmel ist die Größte!",
+["Yuck! I bet they'll keep worshipping her even after I save the village!"]="Pfui! Ich wette, sie werden sie verehren, selbst, wenn ich das Dorf rette.",
+["I'm getting old for this!"]="Ich werd zu alt dafür!",
+["I'm getting thirsty..."]="Ich hab Durst.",
+["I wonder why I'm so angry all the time..."]="Ich frag mich, warum ich die ganze Zeit so wütend bin.",
+["It must be a childhood trauma..."]="Es muss ein Kindheitstrauma sein.",
+["Just wait till I get my hands on that trauma! ARGH!"]="Warte nur, bis ich mein Trauma in die Finger kriege! ARGH!",
+["I could just teleport myself there..."]="Ich könnte mich einfach dorthin teleportieren.",
+["It's a shame, I forgot how to do that!"]="Zu dumm, ich habe vergessen, wie man das macht.",
+["Hello again, "]="Hallo, ",
+["I just found out that they have captured your princess!"]="Ich habe gerade herausgefunden, dass sie deine Prinzessin gefangen haben!",
+["Of course I have to save her. What did I expect?!"]="Natürlich muss ich sie retten. Was habe ich erwartet?",
+["She's behind that tall thingy."]="Sie ist hinter diesem großen Dingsda.",
+["I'm here to help you rescue her."]="Ich bin hier, um dir bei ihrer Rettung zu helfen.",
+["Yo, dude, we're here, too!"]="Heda, wir sind auch da!",
+["We were trying to save her and we got lost."]="Wir versuchten, sie zu retten, aber haben uns verlaufen.",
+["That's typical of you!"]="Das ist so typisch für dich!",
+["Why are you helping us, uhm...?"]="Warum hilfst du uns, äh, …?",
+["Call me Beep! Well, 'cause I'm such a nice...person!"]="Nenn mich »Pieps«! Weil ich so eine nette … Person bin!",
+["Here, let me help you save her!"]="Hier, lass mich dir helfen, sie zu retten!",
+["Thanks!"]="Danke!",
+["Why can't he just let her go?!"]="Warum kann er sie nicht einfach freilassen?",
+["Family Reunion"]="Familientreffen",
+["Get your teammates out of their natural prison and save the princess!|Hint: Drilling holes should solve everything.|Hint: It might be a good idea to place a girder before starting to drill. Just saying.|Hint: All your hedgehogs need to be above the marked height!|Hint: Leaks A Lot needs to get really close to the princess!"]="Befrei deine Teamkollegen aus ihrem natürlichen Gefängnis und rette die Prinzessin!|Tipp: Löcher bohren sollte alle Probleme lösen.|Tipp: Es könnte eine gute Idee sein, vor dem Bohren einen Träger zu platzieren. Ich mein ja nur.|Tipp: All deine Igel müssen sich über der markierten Höhe befinden.|Tipp: Undichte Stelle muss sich sehr nahe an der Prinzessin befinden.",
+["Salvation"]="Erlösung",
+["Hostage Situation"]="Geiselrettung",
+["Save the princess! All your hogs must survive!|Hint: Kill the cyborgs first! Use the ammo very carefully!|Hint: You might want to spare a girder for cover!"]="Rette die Prinzessin! All deine Igel müssen überleben!|Tipp: Töte die Cyborgs zuerst! Benutze die Munition sehr vorsichtig!|Tipp: Du solltest vielleicht einen Träger als Deckung behalten!",
+["Thank you, my hero!"]="Danke dir, mein Held!",
+["Biomechanic Team"]="Biomechanisches Team",
+["First Blood"]="Der erste Zusammenstoß",
+["First Steps"]="Erste Schritte",
+["Press [Left] or [Right] to move around, [Enter] to jump"]="Drücke [Links] oder [Rechts] zum Bewegen, [Eingabe] zum Springen.",
+["A leap in a leap"]="Ein Sprung in einem Sprung",
+["Go on top of the flower"]="Geh auf die Spitze der Blume",
+["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"]="Sammle die Kiste auf der rechten Seite ein.|Tipp: Wähle das Seil, [Hoch] oder [Runter] zum Zielen, [Leer] zum feuern, Richtungstasten zum bewegen.|Seile können in der Luft erneut geschossen werden.",
+["Hightime"]="Hoch hinaus",
+["Get on the head of the mole"]="Geh auf den Kopf des Maulwurfs",
+["Omnivore"]="Allesfresser",
+["The Leap of Faith"]="Der Mutsprung",
+["Use the parachute ([Space] while in air) to get the next crate"]="Benutze den Fallschirm ([Leer] drücken, wenn in der Luft), um die nächste Kiste zu erhalten.",
+["Do the deed"]="Tu deine Pflicht",
+["The Rising"]="Der Aufstieg",
+["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."]="Zerstör die Ziele!|Tipp: Wähle das Shoryuken und drücke [Leertaste]|PS: Du kannst es in der Luft benutzen.",
+["Collect the crates within the time limit!|If you fail, you'll have to try again."]="Sammle die Kisten innerhalb der Zeitbegrenzung ein!|Wenn du versagst, musst es erneut versuchen.",
+["The Crate Frenzy"]="Der Kistenrausch",
+["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"]="Zerstöre die Ziele!|Tipp: [Hoch], [Runter] zum Zielen, [Leer] zum Schießen",
+["The Ultimate Weapon"]="Die Ultimative Waffe",
+["Kill the cannibal!"]="Töte den Kannibalen!",
+["The First Blood"]="Der erste Zusammenstoß",
+["KILL IT!"]="TÖTE ES!",
+["Watch your steps, young one!"]="Pass auf deine Schritte auf, Jüngling!",
+["Why do men keep hurting me?"]="Warum tun mir Männer ständig weh?",
+["Violence is not the answer to your problems!"]="Gewalt ist nicht die Antwort auf deine Probleme!",
+["Once upon a time, on an island with great natural resources, lived two tribes in heated conflict..."]="Es waren einmal zwei Stämme, die lebten auf einer Insel mit vielen natürlichen Rohstoffen und waren in einem bitteren Konflikt …",
+["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."]="Unser Stamm war friedlich und verbrachte die Zeit mit der Jagd, Übungen und den kleinen Freuden des Lebens.",
+["The other one were all cannibals, spending their time eating the organs of fellow hedgehogs..."]="Der andere Stamm bestand nur aus Kannibalen, sie verbrachten ihre Zeit damit, die Organe anderer Igel aufzufressen.",
+["And so it began..."]="Und so fing es an …",
+["What are you doing at a distance so great, young one?"]="Was tut du hier in so großer Entfernung, Jüngling?",
+["Come closer, so that your training may continue!"]="Komm näher, damit deine Übungen fortfahren können!",
+["This is it! It's time to make Fell From Heaven fall for me..."]="Das ist es! Es ist Zeit, um Fiel Vom Himmel in mich verfallen zu lassen …",
+["I can see you have been training diligently."]="Ich sehe, dass du fleißig geübt hast.",
+["The wind whispers that you are ready to become familiar with tools, now..."]="Der Wind flüstert, dass du jetzt bereit bist, mit den Werkzeugen vertraut zu werden.",
+["Open that crate and we will continue!"]="Öffne diese Kiste und wir werden fortfahren!",
+["He moves like an eagle in the sky."]="Er bewegt sich wie ein Adler in der Luft.",
+["See that crate farther on the right?"]="Siehst du die Kiste weiter rechts?",
+["Swing, Leaks A Lot, on the wings of the wind!"]="Schwing, Undichte Stelle, auf den Flügeln des Windes!",
+["His arms are so strong!"]="Seine Arme sind so stark!",
+["Use the rope to get on the head of the mole, young one!"]="Benutze das Seil, um auf den Kopf des Maulwurfst zu gelangen, Jüngling!",
+["Worry not, for it is a peaceful animal! There is no reason to be afraid..."]="Hab keine Angst, da es ein friedliebendes Tier ist. Es gibt keinen Grund, Angst zu haben.",
+["We all know what happens when you get frightened..."]="Wir wissen alle, was passiert, wenn du Angst kriegst.",
+["So humiliating..."]="Welch Demütigung!",
+["Perfect! Now try to get the next crate without hurting yourself!"]="Perfekt! Jetzt versuch, zur nächsten Kiste zu gelangen, ohne dich zu verletzen!",
+["The giant umbrella from the last crate should help break the fall."]="Der Riesenschirm von der letzten Kiste sollte helfen, den Sturz abzubremsen.",
+["He's so brave..."]="Er ist so mutig.",
+["I see you have already taken the leap of faith."]="Ich sehe, du hast bereits den Mutsprung absolviert.",
+["Get that crate!"]="Hol dir die Kiste!",
+["Impressive...you are still dry as the corpse of a hawk after a week in the desert..."]="Großartig! Du bist immer noch so trocken wie der Kadaver eines Adlers nach einer Woche in der Wüste.",
+["You probably know what to do next..."]="Du weißt vermutlich, was als nächstes zu tun ist.",
+["It is time to practice your fighting skills."]="Es ist Zeit, dein Kämpfen zu üben.",
+["Imagine those targets are the wolves that killed your parents! Take your anger out on them!"]="Stell dir vor, diese Zielscheiben sind die Wölfe, die eine Eltern getötet haben! Lass deine Wut an ihnen aus!",
+["I hope you are prepared for a small challenge, young one."]="Ich hoffe, du bist für eine kleine Herausforderung gewappnet, Jüngling.",
+["Your movement skills will be evaluated now."]="Deine Fortbewegungsfähigkeiten werden nun getestet.",
+["Collect all the crates, but remember, our time in this life is limited!"]="Sammle all die Kisten ein, aber denk dran, unsere Zeit in diesem Leben ist begrenzt!",
+["How difficult would you like it to be?"]="Wie schwer möchtest du es haben?",
+["Hmmm...perhaps a little more time will help."]="Hmmm. Vielleicht wird etwas mehr Zeit helfen.",
+["The spirits of the ancerstors are surely pleased, Leaks A Lot."]="Die Geister der Ahnen sind sicherlich erfreut, Undichte Stelle.",
+["You have proven yourself worthy to see our most ancient secret!"]="Du hast dich bewährt, um unser ältestes Geheimnis zu sehen.",
+["The weapon in that last crate was bestowed upon us by the ancients!"]="Die Waffe in der letzten Kiste wurde uns von den Urahnen übergeben!",
+["Use it with precaution!"]="Benutze sie weise.",
+["What do my faulty eyes observe? A spy!"]="Was sehen meine alten Augen? Einen Spion!",
+["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"]="Zerstöre ihn, Undichte Stelle! Er ist verantwortlich für viele Tote auf unserer Seite!",
+["Oh, my!"]="Ohje!",
+["I see you would like his punishment to be more...personal..."]="Ich sehe, du möchtest, dass seine Bestrafung etwas … persönlicher ausfällt.",
+["I'm certain that this is a misunderstanding, fellow hedgehogs!"]="Ich bin mir sicher, dass das ein Missverständnis ist, liebe Igel.",
+["If only I were given a chance to explain my being here..."]="Wenn ich nur eine Gelegenheit hätte, um meine Anwesenheit zu erklären …",
+["Do not let his words fool you, young one! He will stab you in the back as soon as you turn away!"]="Lass dich nicht von seinen Worten einlullen, Jüngling! Er wird dich hinterrücks ermorden, sobald du ihm den Rücken zuwendest!",
+["Here...pick your weapon!"]="Hier … wähl deine Waffe!",
+["Yes, yeees! You are now ready to enter the real world!"]="Ja, Jaaa! Jetzt bist du bereit, die wirkliche Welt zu betreten!",
+["What?! A cannibal? Here? There is no time to waste! Come, you are prepared."]="Was?! Ein Kannibale? Hier? Es gibt keine Zeit zu verlieren! Komm, du bist vorbereitet.",
+["Leaks A Lot gave his life for his tribe! He should have survived!"]="Undichte Stelle gab sein Leben für seinen Stamm! Er hätte überleben sollen!",
+["The wasted youth"]="Die vergeudete Jugend",
+["After Leaks A Lot betrayed his tribe, he joined the cannibals..."]="Nachdem Undichte Stelle seinen Stamm betrogen hatte, trat er den Kannibalen bei.",
+["Hint: Double Jump - Press [Backspace] twice"]="Tipp: Doppelsprung – Drück [Rücktaste] 2 Mal",
+["Step By Step"]="Schritt für Schritt",
+["As the challenge was completed, Leaks A Lot set foot on the ground..."]="Nachdem die Herausforderung abgeschlossen war, setzte Undichte Stelle einen Fuß auf den Boden.",
+["And so happenned that Leaks A Lot failed to complete the challenge! He landed, pressured by shame..."]="Und somit versagte Undichte Stelle dabei, die Herausforderung abzuschließen. Unter Schande landete er.",
+["The Bull's Eye"]="Ins Schwarze",
+["[Up], [Down] to aim, [Space] to shoot!"]="[Hoch], [Runter] zum Zielen, [Leer] zum Schießen.",
+["Select difficulty: [Left] - easier or [Right] - harder"]="Wähl einen Schwierigkeitsgrad: [Links] – leichter oder [Rechts] – schwerer",
+["The Torment"]="Die Pein",
+["A Classic Fairytale"]="Ein typisches Märchen",
+["Finish your training|Hint: Animations can be skipped with the [Precise] key."]="Schließe deine Übungen ab.|Tipp: Animationen können mit der [Genaues Zielen]-Taste übersprungen werden.",
+["Eye Chewer"]="Augenkauer",
+["Flesh for Brainz"]="Fleisch gegen Hirn",
+["John"]="Jonas",
+["Torn Muscle"]="Loser Muskel",
+["Brain Blower"]="Hirnpuster",
+["Gorkij"]="Gorkidsch",
+["Nom-Nom"]="Mjam-Mjam",
+["Vedgies"]="Früchties",
+["Collateral Damage"]="Kollateralschaden",
+["Save the princess by collecting the crate in under 12 turns!"]="Rette die Prinzessin, indem du die Kiste vor Ablauf von 12 Zügen einsammelst!",
+["The Journey Back"]="Die Rückreise",
+["Collateral Damage II"]="Kollateralschaden II",
+["Save Fell From Heaven!"]="Rette Fiel Vom Himmel!",
+["Get the crate on the other side of the island!|"]="Hol dir die Kiste auf der anderen Seite der Insel!|",
+["Hint: you might want to stay out of sight and take all the crates...|"]="Tipp: Du solltest vielleicht aus der Schusslinie bleiben und alle Kisten nehmen.|",
+["If you get stuck, use your Desert Eagle or restart the mission!|"]="Wenn du stecken bleibst, benutze deine Desert Eagle oder starte die Mission neu.|",
+["Leaks A Lot must survive!"]="Undichte Stelle muss überleben!",
+["Your hogs must survive!"]="Deine Igel müssen überleben.",
+["Adventurous"]="Abenteuerlich",
+["Get Dense Cloud out of the pit!"]="Hol Dichte Wolke aus der Grube!",
+["The Savior"]="Der Erlöser",
+["Free Dense Cloud and continue the mission!"]="Befrei Dichte Wolke und setze die Mission fort!",
+["They never learn"]="Sie lernen es nie.",
+["I just wonder where Ramon and Spiky disappeared..."]="Ich frage mich lediglich, wohin Ramon und Stachli verschwunden sind.",
+["I wonder where Dense Cloud is..."]="Ich frag mich, wo Dichte Wolke ist.",
+["He must be in the village already."]="Er muss schon im Dorf sein.",
+["I'd better get going myself."]="Ich geh jetzt besser weiter.",
+["Welcome, Leaks A Lot!"]="Willkommen, Undichte Stelle!",
+["I want to play a game..."]="Ich möchte ein Spiel spielen.",
+["Help me, please!!!"]="Hilfe! Zu Hilfe! Bitte!",
+["If you can get that crate fast enough, your beloved \"princess\" may go free."]="Wenn du diese Kiste schnell genug einsammelst, darfst du deine geliebte »Prinzessin« befreien.",
+["However, if you fail to do so, she dies a most violent death! Muahahaha!"]="Wenn du aber versagst, wird sie den grausamsten Tod sterben! Muhahahaha!",
+["Good luck...or else!"]="Viel Glück! Sonst …!",
+["Hey! This is cheating!"]="Hey, das ist geschummelt!",
+["I need to get to the other side of this island, fast!"]="Ich muss auf die andere Seite der Insel gelangen, und zwar schnell!",
+["With Dense Cloud on the land of shadows, I'm the village's only hope..."]="Jetzt, wo Dichte Wolke im Land der Schatten ist, bin ich des Dorfs einzige Hoffnung.",
+["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"]="Aber wenn du versagst, wird sie den grausamsten Tod sterben, genau, wie dein Freund! Muhahahaha!",
+["You have failed to complete your task, young one!"]="Du hast versagt, Jüngling!",
+["It's time you learned that your actions have consequences!"]="Es ist Zeit, dass du lernst, dass dein Handeln Konsequenzen haben wird!",
+["No! Please, help me!"]="Nein! Bitte hilf mir!",
+["No! What have I done?! What have YOU done?!"]="Nein! Was habe ich getan?! Was hast DU getan?!",
+["Help me, Leaks!"]="Hilf mir, Undichte!",
+["But you said you'd let her go!"]="Aber du sagtest, dass du sie freilässt!",
+["And you believed me? Oh, god, that's cute!"]="Und du hast mir geglaubt? Ach Gottchen, das ist so süß!",
+["I won't let you kill her!"]="Ich werde nicht zulassen, dass du sie umbringst!",
+["Leaks A Lot, depressed for killing his loved one, failed to save the village..."]="Traurig darüber, sein Liebling getötet zu haben, versagte Undichte Stelle dabei, das Dorf zu retten.",
+["Thank you, oh, thank you, Leaks A Lot!"]="Danke, oh, danke, Undichte Stelle!",
+["How can I ever repay you for saving my life?"]="Wie kann ich es jemals wieder gutmachen, dass du mein Leben gerettet hast?",
+["There's nothing more satisfying for me than seeing you share your beauty with the world every morning, my princess!"]="Es gibt nichts befriedigenderes für mich, als dich jeden Morgen zu sehen, wie du deine Schönheit mit dem Rest der Welt teilst, meine Prinzessin!",
+["Let's go home!"]="Lasst uns nach Hause gehen!",
+["And so they discovered that cyborgs weren't invulnerable..."]="Und so fanden sie heraus, dass die Cyborgs nicht unverwundbar sind.",
+["All right, we just need to get to the other side of the island!"]="Okay, wir müssen einfach nur auf die andere Seite der Insel gelangen!",
+["We have no time to waste..."]="Wir haben keine Zeit zu verlieren.",
+["Well, well! Isn't that the cutest thing you've ever seen?"]="Sieh mal einer an! Ist das nicht das süßeste Ding, dass du jemals gesehen hast?",
+["Two little hogs cooperating, getting past obstacles..."]="Zwei Igelchen, sie arbeiten zusammen, bewältigen Hindernisse gemeinsam …",
+["Let me test your skills a little, will you?"]="Lass mich deine Fertigkeiten ein wenig testen, okay?",
+["Why are you doing this?"]="Warum tust du das?",
+["To help you, of course!"]="Natürlich um dir zu helfen!",
+["OH, COME ON!"]="ACH, KOMM!",
+["Let's see what your comrade does now!"]="Sehen wir mal, was dein Kamerad jetzt anstellt.",
+["Help me, please!"]="Hilf mir bitte!",
+["What are you doing? Let her go!"]="Was tust du? Lass sie gehen!",
+["Yeah? Watcha gonna do? Cry?"]="Ja und? Was willst du schon tun? Heulen?",
+["We won't let you hurt her!"]="Wir werden nicht zulassen, dass du ihr wehtust!",
+["Thank you, oh, thank you, my heroes!"]="Habt Dank, oh, habt Dank, meine Helden!",
+["There's nothing more satisfying to us than seeing you share your beauty..."]="Es gibt nichts befriedigenderes für uns, als dich jeden Morgen zu sehen, wie du deine Schönheit …",
+["... share your beauty with the world every morning, my princess!"]="…, ja, wie du deine Schönheit mit dem Rest der Welt teilst, meine Prinzessin!",
+["Dude, can you see Ramon and Spiky?"]="He, kannst du Ramon und Stachli sehen?",
+["No...I wonder where they disappeared?!"]="Nein. Ich frage mich, wohin sie verschwunden sind?!",
+["You couldn't possibly believe that after refusing my offer I'd just let you go!"]="Du kannst wohl nicht ernsthaft glauben, dass ich dich einfach laufen lassen, nachdem du mein Angebot ablehnst!",
+["You're funny!"]="Du bist lustig!",
+["There's nothing more satisfying to us than seeing you share your beauty with the world every morning, my princess!"]="Es gibt nichts befriedigenderes für uns, als dich jeden Morgen zu sehen, wie du deine Schönheit mit dem Rest der Welt teilst, meine Prinzessin!",
+["Cannibal Sentry"]="Kannibalenwache",
+["The village, unprepared, was destroyed by the cyborgs..."]="Das unvorbereitete Dorf wurde von den Cyborgs zerstört.",
+["Hint: Select the BlowTorch, aim and press [Fire]. Press [Fire] again to stop.|Don't blow up the crate."]="Tipp: Wähle den Schweißbrenner, ziele und drücke [Feuern]. Drücke [Feuern] erneut, um aufzuhören.|Spreng nicht die Kiste.",
+["The Tunnel Maker"]="Der Tunnelbauer",
+["Hint: Select the LowGravity and press [Fire]."]="Tipp: Wähle die niedrige Schwerkraft und drücke [Feuern].",
+["The Moonwalk"]="Der Mondspaziergang",
+["Slippery"]="Rutschig",
+["You'd better watch your steps..."]="Pass besser auf, wohin du trittst.",
+["Y3K1337"]="Y3K1337",
+["Artur Detour"]="Artus Rück",
+["Led Heart"]="Geführtes Herz",
+["Nilarian"]="Nilarian",
+["Orlando Boom!"]="Orlando Bumm!",
+["Gas Gargler"]="Gasgurgler",
+["Hatless Jerry"]="Hutloser Igor",
+["Rusty Joe"]="Rostjonas",
+["Steel Eye"]="Stahlauge",
+["Leaderbot"]="Führboter",
+["Beep Loopers"]="Piepskreisler",
+["Corporationals"]="Kapitalista",
+["Name"]="Name",
+["Bloodrocutor"]="Blutfrierer",
+["Bloodsucker"]="Blutsauger",
+["Bonely"]="Knochi",
+["Corpsemonger"]="Leichenschänder",
+["Femur Lover"]="Schenkellieber",
+["Glark"]="Glark",
+["Muscle Dissolver"]="Muskellöser",
+["Rot Molester"]="Rottiger Störenfried",
+["Save Leaks A Lot!|Hint: The Switch utility might be of help to you."]="Rette Undichte Stelle!|Tipp: Die Igelwahl könnte behilflich sein.",
+["The Shadow Falls"]="Die Schattenfälle",
+["The Showdown"]="Das Showdown",
+["Defend yourself!|Hint: You can get tips on using weapons by moving your mouse over them in the weapon selection menu"]="Verteidige dich!|Tipp: Du kannst Tipps über die Benutzung der Waffen erhalten, indem du im Waffenauswahlmenü mit dem Mauszeiger auf sie zeigst.",
+["Play with me!"]="Spiel mit mir!",
+["Obliterate them!|Hint: You might want to take cover..."]="Vernichte sie!|Tipp: Du solltest in Deckung gehen.",
+["Why do you not like me?"]="Warum magst du mich nicht?",
+["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."]="Wähl deine Seite! Wenn du dem seltsamen Mann beitreten willst, geh zu ihm hin.|Geh ansonsten von ihm fort. Wenn du angr… Vergiss es!",
+["The Dilemma"]="Das Dilemma",
+["Return to Leaks A Lot! If you get stuck, press [Precise] to try again!"]="Kehr zu Undichte Stelle zurück! Wenn du steckenbleibst, drücke [Genaues Zielen], um es erneut zu versuchen!",
+["The walk of Fame"]="Die Ruhmesmeile",
+["Defeat the cannibals!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"]="Besiege die Kannibalen!|Granatentipp: Setze den Timer mit [1-5], ziele mit [Hoch]/[Runter] und halte [Leer], um die Stärke zu setzen.",
+["The Individualist"]="Der Individualist",
+["Pfew! That was close!"]="Puh! Das war knapp!",
+["Where did you get the exploding apples and the magic bow that shoots many arrows?"]="Woher hast du die explodierenden Äpfel und den magischen Bogen, der so viele Pfeile verschießt?",
+["Where did you get the exploding apples?"]="Woher hast du den explodierenden Apfel?",
+["Where did you get the magic bow that shoots many arrows?"]="Woher hast du den magischen Bogen, der so viele Pfeile verschießt?",
+["Did you warn the village?"]="Hast du das Dorf gewarnt?",
+["No, I came back to help you out..."]="Nein, ich kam zurück, um dir zu helfen.",
+["Uhm...I met one of them and took his weapons."]="Ähm, ich hab einen von ihnen getroffen und nahm seine Waffen.",
+["We should head back to the village now."]="Wir sollten zum Dorf zurückkehren.",
+["After the shock caused by the enemy spy, Leaks A Lot and Dense Cloud went hunting to relax."]="Nach dem Schock, der vom feindlichen Spion ausgelöst wurde, gingen Undichte Stelle und Dichte Wolke zur Entspannung auf die Jagd.",
+["Little did they know that this hunt will mark them forever..."]="Sie ahnten nicht, dass diese Jagd sie für immer zusammenschweißen würde.",
+["I have no idea where that mole disappeared...Can you see it?"]="Ich habe keine Ahnung, wohin dieser Maulwurf verschwand. Kannst du ihn sehen?",
+["Nope. It was one fast mole, that's for sure."]="Nee. Es war ein schneller Maulwurf, das ist klar.",
+["Please, stop releasing your \"smoke signals\"!"]="Bitte hör mit deinen »Rauchzeichen« auf!",
+["You're terrorizing the forest...We won't catch anything like this!"]="Du terrorisierst den Wald. Wir werden auf diese Weise nichts fangen!",
+["..."]="…",
+["I can't believe it worked!"]="Ich kann nicht glauben, dass es funktioniert hat!",
+["That shaman sure knows what he's doing!"]="Dieser Schamane weiß genau, was er tut!",
+["Yeah...I think it's a 'he', lol."]="Ja, ich glaube, dass es ein »er« ist. (lach)",
+["It wants our brains!"]="Es will unsere Gehirne!",
+["Not you again! My head still hurts from last time!"]="Nicht du schon wieder! Mein Kopf tut mir immer noch vom letzten Mal weh!",
+["Did you see him coming?"]="Hast du ihn kommen sehen?",
+["No. Where did he come from?"]="Nein. Woher kam er?",
+["Are we there yet?"]="Sind wir schon da?",
+["This must be some kind of sorcery!"]="Das muss wohl eine Art Zauberei sein!",
+["I thought their shaman died when he tried our medicine!"]="Ich dachte, ihr Schamane starb, als er unsere Medizin probierte.",
+["I saw it with my own eyes!"]="Ich sah es mit meinen eigenen Augen!",
+["Then how do they keep appearing?"]="Also woher kommen sie?",
+["It's impossible to communicate with the spirits without a shaman."]="Es ist unmöglich, ohne einen Schamanen mit den Geistern zu kommunizieren.",
+["We need to warn the village."]="Ich muss das Dorf warnen.",
+["What a ride!"]="Was für eine Reise!",
+["We can't defeat them!"]="Wir können sie nicht besiegen!",
+["I'll hold them off while you return to the village!"]="Ich halte sie zurück, während du zum Dorf zurückkehrst.",
+["30 minutes later..."]="30 Minuten später …",
+["Greetings, cloudy one!"]="Grüße, du Wolkiger!",
+["I have come to make you an offering..."]="Ich kam, um dir ein Angebot zu machen.",
+["You are given the chance to turn your life around..."]="Ich gebe dir die Chance, dein Leben auf den Kopf zu stellen.",
+["If you agree to provide the information we need, you will be spared!"]="Wenn du einverstanden bist, uns die Information, die wir brauchen, zu geben, wirst du verschont!",
+["Have no illusions, your tribe is dead, indifferent of your choice."]="Mach dir keine Hoffnungen, dein Stamm ist tot, unabhängig von deiner Entscheidung.",
+["If you decide to help us, though, we will no longer need to find a new governor for the island."]="Wenn du uns helfen willst, brauchen wir für diese Insel keinen neuen Anführer zu suchen.",
+["If you know what I mean..."]="Wenn du verstehst, was ich meine.",
+["So? What will it be?"]="Also? Was ist deine Entscheidung?",
+["Great choice, Steve! Mind if I call you that?"]="Großartige Entscheidung, Stefan! Stört es dich, wenn ich dich so nenne?",
+["Whatever floats your boat..."]="Worauf immer du Lust hast.",
+["Great! You will be contacted soon for assistance."]="Gut! Du wirst schon bald für Unterstützung benachrichtigt.",
+["In the meantime, take these and return to your \"friend\"!"]="In der Zwischenzeit, nimm diese und kehre zu deinem »Freund« zurück!",
+["Your death will not be in vain, Dense Cloud!"]="Dein Tod wird nicht ungesühnt bleiben, Dichte Wolke!",
+["You will be avenged!"]="Du wirst gerächt!",
+["I see..."]="Ich verstehe …",
+["Remember this, pathetic animal: when the day comes, you will regret your blind loyalty!"]="Denk dran, du erbärmliches Tier: Wenn der Tag gekommen ist, wirst du deine blinde Loyalität bereuen!",
+["You just committed suicide..."]="Du hast gerade Selbstmord begangen.",
+["If you say so..."]="Wenn du es sagst …",
+["Dude, we really need a new shaman..."]="Mann, wir brauchen wirklich einen neuen Schamanen.",
+["It's over..."]="Es ist vorbei.",
+["Let's head back to the village!"]="Lass uns zurück zum Dorf gehen!",
+["Really?! You thought you could harm me with your little toys?"]="Wirklich? Du dachtest, du könntest mich mit deinen kleinen Spielzeugen verletzen?",
+["You're pathetic! You are not worthy of my attention..."]="Du bist erbärmlich! Du hast meine Aufmerksamkeit nicht verdient.",
+["Actually, you aren't worthy of life! Take this..."]="Eigentlich hast du nicht das Recht, zu leben! Nimm das!",
+["Incredible..."]="Unglaublich.",
+["I can't wait any more, I have to save myself!"]="Ich kann nicht länger waren, ich muss selber zur Hilfe eilen!",
+["Where are all these crates coming from?!"]="Woher kommen all die Kisten?!",
+["I have to get back to the village!"]="Ich muss zum Dorf zurückkehren!",
+["Dense Cloud must have already told them everything..."]="Dichte Wolke muss ihnen bereits alles gesagt haben.",
+["Weaklings"]="Schwächlinge",
+["Stronglings"]="Stärklinge",
+["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"]="Um einen Träger zu platzieren, wähle ihn, benutze [Links] und [Rechts], um den Winkel und die Länge zu wählen, platziere ihn mit [Linksklick].",
+["Under Construction"]="Baustelle",
+["A little gift from the cyborgs"]="Ein kleines Geschenk von den Cyborgs",
+["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"]="Beschütze dich!|Granatentipp: Setze den Timer mit [1-5], ziele mit [Hoch]/[Runter] und halte [Leer], um die Stärke zu setzen.",
+["The guardian"]="Der Wächter",
+["...and so the cyborgs took over the world..."]="Und so eroberten die Cyborgs die Welt …",
+["Survive!|Hint: Cinematics can be skipped with the [Precise] key."]="Überlebe!|Tipp: Zwischensequenzen können mit der [Genaues Zielen]-Taste übersprungen werden.",
+["The First Encounter"]="Das erste Zusammentreffen",
+["Brain Stu"]="Hirntopf",
+["Brainila"]="Hirnilia",
+["Olive"]="Olive",
+["Salivaslurper"]="Speichelschlürfer",
+["Mindy"]="Intellekta",
+["NomNom"]="Mjamjam",
+["Spleenlover"]="Milzlieber",
+["Thighlicker"]="Schenkelschlecker",
+["Defeat the cannibals!|"]="Besiege die Kannibalen!|",
+["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."]="Versuche, den Häuptling zu beschützen! Du wirst nicht verlieren, wenn er stirbt, aber es ist ratsam, dass er überlebt.",
+["Invasion"]="Invasion",
+["United We Stand"]="Gemeinsam sind wir stark",
+["I'm so scared!"]="Ich hab solche Angst!",
+["Back in the village, after telling the villagers about the threat..."]="Zurück im Dorf, nachdem die Dorfbewohner vor der Gefahr gewarnt worden sind …",
+["Their buildings were very primitive back then, even for an uncivilised island."]="Ihre Gebäude waren damals sehr primitiv, selbst für eine unzivilisierte Insel.",
+["Young one, you are telling us that they can instantly change location without a shaman?"]="Jüngling, willst du uns etwa weiß machen, dass sie ihre Position sofort ändern können, ohne einen Schamanen?",
+["That is, indeed, very weird..."]="Das ist tatsächlich sehr merkwürdig.",
+["If they try coming here, they can have a taste of my delicious knuckles!"]="Wenn sie versuchen, hierher zukommen, können sie von meinen köstlichen Fäusten kosten!",
+["Haha!"]="Haha!",
+["I'm not sure about that!"]="Ich bin mir darüber nicht so sicher.",
+["They have weapons we've never seen before!"]="Sie haben Waffen, die wir noch nie zuvor gesehen haben!",
+["Luckily, I've managed to snatch some of them."]="Glücklicherweise konnte ich mir ein paar davon ergattern.",
+["Oops...I dropped them."]="Upps, ich habe sie fallen gelassen.",
+["They keep appearing like this. It's weird!"]="Sie tauchen einfach so auf. Es ist seltsam!",
+["Did anyone follow you?"]="Ist dir irgendjemand gefolgt?",
+["No, we made sure of that!"]="Nein, wir hatten extra aufgepasst.",
+["First aid kits?!"]="Erste-Hilfe-Koffer?",
+["I've seen this before. They just appear out of thin air."]="Ich hab das zuvor gesehen. Sie tauchen einfach aus dem Nichts auf.",
+["Hey guys!"]="Hey, Leute!",
+["Where have you been?"]="Wo warst du?",
+["Just on a walk."]="Nur spazieren.",
+["You have chosen the perfect moment to leave."]="Du hast den perfekten Augenblick ausgesucht, um zu gehen.",
+["HOW DO THEY KNOW WHERE WE ARE???"]="WOHER WISSEN SIE, WO WIR SIND?",
+["We have to protect the village!"]="Wir müssen das Dorf schützen!",
+["We can't hold them up much longer!"]="Wir können sie nicht länger aufhalten!",
+["We need to move!"]="Wir müssen weiter!",
+["But where can we go?"]="Aber wohin können wir gehen?",
+["To the caves..."]="Zu den Höhlen …",
+["Good idea, they'll never find us there!"]="Gute Idee, hier werden sie uns niemals finden!",
+["I need to move the tribe!"]="Ich muss den Stamm von hier fortführen.",
+["The caves are well hidden, they won't find us there!"]="Die Höhlen sind gut versteckt, sie werden uns hier nicht finden!",
+["Light Cannfantry"]="Leichte Kannfantrie",
+["Heavy Cannfantry"]="Schwere Kannfantrie",
+["Spacetrip"]="Weltraumreise",
+["Go to the moon by using the flying saucer and complete the main mission"]="Komm zum Mond, indem du die fliegende Untertasse benutzt und die Hauptmission beendest.",
+["Come back to this mission and visit the other planets to collect the crates"]="Kehre zu dieser Mission zurück und besuche die anderen Planeten, um die Kisten einzusammeln.",
+["Visit the Death Planet after completing all the other planets' main missions"]="Besuche den Todesplaneten, nachdem du die Hauptmissionen aller anderen Planeten fertiggestellt hast.",
+["Come back to this mission after collecting all the device parts"]="Kehre zu dieser Mission zurück, nachdem du alle Bauteile eingesammelt hast.",
+["Getting ready"]="Bereitmachen",
+["Go and collect the crate"]="Geh und sammle die Kiste.",
+["Try not to get spotted by the guards!"]="Versuch, nicht von den Wächtern entdeckt zu werden!",
+["The adventure begins!"]="Das Abenteuer beginnt!",
+["Travel carefully as your fuel is limited"]="Reise vorsichtig, da dein Treibstoff begrenzt ist.",
+["Use the saucer and fly to the moon"]="Benutze die Untertasse und flieg zum Mond.",
+["An unexpected event!"]="Ein unerwartetes Ereignis!",
+["Beware, any damage taken will stay until you complete the moon's main mission"]="Achtung, jeglicher Schaden, den du nimmst, wird bleiben, bis du die Hauptmission des Mondes fertiggestellt hast.",
+["Use the saucer and fly away"]="Benutze die Untertasse und flieg davon!",
+["Objectives"]="Ziele",
+["Searching the stars!"]="Suche in den Sternen",
+["Visit the planets of Ice, Desert and Fruit before you proceed to the Death Planet"]="Besuche den Eis-, Wüsten- und Fruchtplaneten, bevor du mit dem Todesplaneten fortfährst.",
+["Fly to the meteorite and detonate the explosives"]="Fliege zum Meteroiten und sprenge die Bomben.",
+["Saving Hogera"]="Hogera retten",
+["Hog Solo"]="Igel Einsam",
+["H"]="H",
+["Dr.Cornelius"]="Dr. Cornelius",
+["Bob"]="Bert",
+["Sam"]="Steffen",
+["PAotH"]="PAdI",
+["Guards"]="Wächter",
+["Help Hog Solo to find all the parts of the anti-gravity device."]="Hilf Igel Einsam, alle Bauteile des Antischwerkraftgerätes zu finden.",
+["Travel to all the neighbor planets and collect all the pieces"]="Reise zu allen Nachbarplaneten und sammle alle Bauteile ein.",
+["Now I have to climb these trees"]="Jetzt muss ich diese Bäume hochklettern.",
+["Use the rope to get to the crate"]="Benutze das Seil, um zur Kiste zu gelangen.",
+["One cannot simply walk in moon with rope!"]="Man kann nicht einfach so im Mond mit dem Seil spazieren!",
+["This is the wrong way!"]="Das ist die falsche Richtung!",
+["Collect the crate with the flying saucer"]="Sammle die Kiste mit der fliegenden Untertasse ein.",
+["Fly to the moon"]="Flieg zum Mond.",
+["Welcome to the moon!"]="Willkommen auf dem Mond!",
+["the moon"]="der Mond",
+["Welcome to the Fruit Planet!"]="Willkommen auf dem Fruchtplaneten!",
+["the Fruit Planet"]="der Fruchtplanet",
+["Welcome to the Desert Planet!"]="Willkommen auf dem Wüstenplaneten!",
+["the Desert Planet"]="der Wüstenplanet",
+["Welcome to the Planet of Ice!"]="Willkommen auf dem Eisplaneten!",
+["the Ice Planet"]="der Eisplanet",
+["Welcome to the Death Planet!"]="Willkommen auf dem Todesplaneten!",
+["the Planet of Death"]="der Todesplanet!",
+["Welcome to the meteorite!"]="Willkommen auf dem Meteorit!",
+["the meteorite"]="der Meteorit",
+["Near secret base 17 of PAotH in the rural Hogland..."]="In der Nähe der geheimen Basis 17 der PAdI im ländlichen Igelland …",
+["So Hog Solo, here we are..."]="Also, Igel Einsam, da wären wir!",
+["Behind these trees on the east side there is secret base 17"]="Hinter diesen Bäumen auf der Ostseite liegt die geheime Basis 17.",
+["You have to continue alone from now on."]="Von hier an musst du alleine fortfahren.",
+["Be careful, the future of Hogera is in your hands!"]="Sei vorsichtig, die Zukunft von Hogera liegt in deinen Händen!",
+["We'll use our communicators to contact you"]="Wir werden unsere Kommunikatoren benutzen, um dich zu kontaktieren.",
+["In am also entrusting you with some rope"]="Ich werde dir auch etwas Seil anvertrauen.",
+["You may find it handy"]="Du könntest es gebrauchen.",
+["Thank you Dr.Cornelius"]="Danke, Dr. Cornelius!",
+["I'll make good use of it"]="Ich werde es klug anwenden.",
+["It would be wiser to steal the space ship while PAotH guards are taking a brake!"]="Es wäre schlauer, das Raumschiff zu stehlen, während die PAdI-Wächter eine Pause machen!",
+["Remember! Many will seek the anti-gravity device! Now go, hurry up!"]="Denk dran: Viele werden das Antischwerkraftgerät begehren! Geh jetzt! Beeilung!",
+["CheckPoint reached!"]="Kontrollpunkt erreicht!",
+["Got the saucer!"]="Ich hab die Untertasse!",
+["Nice!"]="Nett!",
+["Now use it and go to the moon PAotH station to get more fuel!"]="Benutze es jetzt und komme zur PAdI-Mondbasis, um mehr Treibstoff zu holen!",
+["Prepare to flee!"]="Bereitmachen zum Fliehen!",
+["Hey"]="Hey",
+["Look, someone is stealing the saucer!"]="Sieh, jemand stiehlt die Untertasse!",
+["I'll get him!"]="Den schnapp ich mir!",
+["You are out of danger, time to go to the moon!"]="Du bist in Sicherheit. Zeit, zum Mond zu gelangen!",
+["I guess we lost him!"]="Ich glaube, wir haben ihn verloren!",
+["We should better report this and continue our watch!"]="Wir sollten dies besser melden und unsere Wache fortsetzen.",
+["I guess I can't go far without fuels!"]="Ich fürchte, ohne Treibstoff komme ich nicht weit.",
+["Go to go back"]="Ich muss umkehren.",
+["You have to try again!"]="Du muss es nochmal versuchen!",
+["Hm... Now I ran out of fuel..."]="Hmm … Jetzt ist mein Treibstoff alle.",
+["This planet seems dangerous!"]="Dieser Planet scheint gefährlich zu sein!",
+["I am not ready for this planet yet. I should visit it when I have found all the other device parts"]="Ich bin für diesen Planeten noch nicht bereit. Ich sollte ihn besuchen, sobald ich alle anderen Bauteile gefunden habe.",
+["Under the meteorite shadow..."]="Unter dem Schatten des Meteorits …",
+["You did great Hog Solo! However we aren't out of danger yet!"]="Du hast dich wacker geschlagen, Igel Einsam! Aber wir haben die Gefahren noch nicht überstanden.",
+["The meteorite has come too close and the anti-gravity device isn't powerful enough to stop it now"]="Der Meteorit kam zu nah und das Antischwerkraftgerät ist zu schwach, um ihn jetzt zu stoppen.",
+["We need it to get split into at least two parts"]="Wir müssen ihn in mindestens zwei Teile zerbrechen.",
+["PAotH has sent explosives but unfortunately the trigger mechanism seems to be faulty!"]="PAdI hat Sprengstoffe geschickt, aber leider scheint der Auslöser defekt zu sein.",
+["We need you to go there and detonate them yourself! Good luck!"]="Du musst dorthin gehen und sie selbst detonieren. Viel Glück!",
+["Hog Solo arrived at "]="Igel Einsam ist angekommen an ",
+["Return to the mission menu by pressing the \"Go back\" button"]="Kehre zum Missionsmenü zurück, indem du den »Zurück«-Knopf drückst.",
+["You can choose another planet by replaying this mission"]="Du kannst einen anderen Planeten auswählen, indem du diese Mission erneut spielst.",
+["Planets with completed main missions will be marked with a flower"]="Planeten, bei denen die Hauptmissionen erledigt wurden, werden mit einer Blume markiert.",
+["You have to travel again"]="Du musst erneut reisen.",
+["Your first destination is the moon in order to get more fuel"]="Dein erstes Ziel ist der Mond, um mehr Treibstoff zu erhalten.",
+["You have to complete the main mission on moon in order to travel to other planets"]="Du musst die Hauptmission auf dem Mond erledigen, damit du zu den anderen Planeten reisen kannst.",
+["You have to be careful and not die!"]="Du musst vorsichtig sein und darfst nicht sterben!",
+["The last encounter"]="Das letzte Gefecht",
+["Defeat Professor Hogevil!"]="Besiege Professor Bösigel!",
+["The final part"]="Das letzte Bauteil",
+["Professor"]="Professor",
+["thug"]="Rowdy",
+["Hog Solo lost, try again!"]="Igel Einsam hat verloren, versuch es nochmal!",
+["To win the game you have to eliminate all your enemies"]="Um das Spiel zu gewinnen, musst du all deine Gegner eliminieren",
+["Congratulations, you won!"]="Gratulation, du hast gewonnen!",
+["You have successfully eliminated Professor Hogevil"]="Du hast Professor Bösigel erfolgreich eliminiert!",
+["You have rescued H and Dr.Cornelius"]="Du hast H und Dr. Cornelius gerettet.",
+["You have acquired the last device part"]="Du hast das letzte Bauteil erhalten.",
+["Now go and play the menu mission to complete the campaign"]="Geh jetzt und spiele die Menümission, um die Kampagne zu beenden.",
+["Somewhere in the uninhabitable Death Planet..."]="Irgendwo auf dem unbewohnbaren Todesplaneten …",
+["Welcome Hog Solo, surprised to see me?"]="Hallo, Igel Einsam! Bist du überrascht, mich zu sehen?",
+["As you can see I have survived our last encounter and I had time to plot my master plan!"]="Wie du sehen kannst, habe ich unser letztes Zusammentreffen überlebt und ich hatte Zeit, meinen Masterplan auszuhecken.",
+["I've thought that the best way to get the device is to let you collect most of the parts for me!"]="Ich dachte mir, dass es am einfachsten ist, wenn ich dich einfach die meisten Bauteile für mich sammeln lasse.",
+["So, now I got the last part and I have your friends captured..."]="Und jetzt habe ich das letzte Teil und deine Freunde gefangengenommen.",
+["Will you give me the other parts?"]="Wirst du mir die anderen Teile geben?",
+["I will never hand you the parts!"]="Niemals gebe ich dir die Teile!",
+["Then prepare for battle!"]="Dann mach dich bereit für die Schlacht!",
+["Killing the specialists"]="Die Spezialisten töten",
+["Use your available weapons in order to eliminate the enemies"]="Benutze deine verfügbaren Waffen, um die Gegner zu eliminieren.",
+["Each time you play this missions enemy hogs will play in a random order"]="Jedes mal, wenn du diese Mission spielst, werden die feindlichen Igel in einer zufälligen Reihenfolge spielen.",
+["At the start of the game each enemy hog has only the weapon that he is named after"]="Am Anfang des Spiels hat jeder feindliche Igel nur die Waffe, nachdem er benannt wurde.",
+["A random hedgehog will inherit the weapons of his deceased team-mates"]="Ein zufälliger Igel wird die Waffen seiner verstorbenen Teamkollegen erben.",
+["If you kill a hedgehog with the respective weapon your health points will be set to 100"]="Wenn du einen Igel mit der entsprechenden Waffe tötest, wird deine Gesundheit auf 100 gesetzt.",
+["If you injure a hedgehog you'll get 35% of the damage dealt"]="Wenn du einen Igel verletzt, wirst du 35% des angerichteten Schadens erhalten.",
+["Every time you kill an enemy hog your ammo will get reset"]="Bei jedem Mal, in dem du einen feindlichen Igel tötest, wird deine Munition zurückgesetzt.",
+["Rope won't get reset"]="Seil wird nicht zurückgesetzt.",
+["Challenge Objectives"]="Herausforderungsziele",
+["Mortar"]="Mörser",
+["Desert Eagle"]="Desert Eagle",
+["Grenade"]="Granate",
+["Shoryuken"]="Shoryuken",
+["Bazooka"]="Bazooka",
+["5 deadly hogs"]="5 tödliche Igel",
+["You have to eliminate all the enemies"]="Du musst alle Gegner eliminieren.",
+["Read the Challenge Objectives from within the mission for more details"]="Lies die Herausforderungsziele in der Mission für mehr Details.",
+["You complete the mission in "]="Du hast die Mission abgeschlossen in ",
+["The next 4 times you play the \"The last encounter\" mission you'll get 20 more hit points and a Laser Sight"]="Die nächsten 4 Male, die du die Mission »Das letzte Gefecht« spielst, wirst du 20 weitere Trefferpunkte und ein Laservisier erhalten.",
+["Somewhere in the Planet of Death..."]="Irgendwo auf dem Todesplaneten …",
+["...Hog Solo fights for his life"]="… kämpft Igel Einsam ums Überleben.",
+["A Space Adventure"]="Ein Weltraumabenteuer",
+["Searching in the dust"]="Suche im Staub",
+["The device part is hidden in one of the crates! Go and get it!"]="Das Bauteil ist in einer der Kisten versteckt. Geh und hole es!",
+["Most of the destructible terrain in marked with blue color"]="Das meiste des zerstörbaren Geländes ist mit einer blauen Farbe markiert.",
+["Chief Sandologist"]="Haupt-Sandologe",
+["Sandy"]="Sandi",
+["Spike"]="Stachel",
+["Sandstorm"]="Sandsturm",
+["Smugglers"]="Schmuggler",
+["The part device is hidden in one of the crates! Go and get it!"]="Das Bauteil ist in einer der Kisten versteckt. Geh und hole es!",
+["A smuggler! Prepare for battle"]="Ein Schmuggler! Bereitmachen zum Kämpfen!",
+["Run away you coward!"]="Lauf weg, du Feigling!",
+["Who's there?! I'll get you..."]="Wer ist da? Ich krieg dich …",
+["In the Planet of Sand, you have to double check your moves..."]="Auf dem Sandplaneten musst du deine Züge gut überlegen …",
+["Finally you are here..."]="Endlich bist du hier …",
+["Thank you for meeting me on such a short notice!"]="Danke, dass du mich so kurzfristig getroffen hast!",
+["No problem, I would do anything for H!"]="Kein Problem, ich würde alles für H tun!",
+["Now listen carefully! Below us there are tunnels that have been created naturally over the years"]="Jetzt hör gut zu! Unter uns sind Tunnel, welche über die Jahre natürlich entstanden sind.",
+["I have heard that the local tribes say that many years ago some PAotH scientists were dumping their waste here"]="Ich hörte, dass die örtlichen Stämme sagen, dass vor vielen Jahren einige PAdI-Wissenschaftler ihren Müll dort abgeliefert haben.",
+["H confirmed that there isn't such a PAotH activity logged"]="H bestätigte, dass eine solche PAdI-Aktivität nicht protokolliert ist.",
+["So, I believe that it's a good place to start"]="Also glaube ich, dass es ein guter Ort zum Anfangen ist.",
+["Beware though! Many smugglers come often to explore these tunnels and scavenge whatever valuable items they can find"]="Aber Vorsicht! Viele Schmuggler kommen oft hier her, um diese Tunnel zu durchsuchen und alles mögliche, was sie finden, zu sammeln.",
+["They won't hesitate to attack you in order to rob you!"]="Sie werden nicht zögern, dich anzugreifen, um dich auszurauben!",
+["OK, I'll be extra careful!"]="Okay, ich werde besonders vorsichtig sein!",
+["There is the tunnel entrance"]="Hier ist der Tunneleingang.",
+["Good luck!"]="Viel Glück!",
+["Get him Spike!"]="Hol ihn, Stachel!",
+["This is seems like a wealthy hedgehog, nice..."]="Das sieht wie ein reicher Igel aus, nett.",
+["Checkpoint reached!"]="Kontrollpunkt erreicht!",
+["Haven't found it yet..."]="Ich hab es noch nicht gefunden.",
+["Hoorah!!!"]="Hurra!",
+["To win the game you had to collect the 2 crates with no specific order"]="Um das Spiel zu gewinnen, musst du die 2 Kisten in beliebiger Reihenfolge einsammeln.",
+["To win the game you have to find the right crate"]="Um das Spiel zu gewinnen, musst du die richtige Kiste finden.",
+["You can avoid some battles"]="Du kannst einige Kämpfe vermeiden.",
+["Use your ammo wisely"]="Benutze deine Munition weise.",
+["Don't destroy the device crate!"]="Zerstöre nicht die Kiste mit dem Bauteil!",
+["Running for survival"]="Ums Überleben laufen",
+["Use the rope to quickly get to the surface!"]="Benutze das Seil, um schnell zur Oberfläche zu gelangen!",
+["To win the game you have to go to the surface"]="Um zu gewinnen, musst du zur Oberfläche gehen.",
+["Most mines are not active"]="Die meisten Minen sind Blindgänger.",
+["From the second turn and beyond the water rises"]="Vom 2. Zug an wird das Wasser steigen.",
+["You have escaped successfully"]="Du bist erfolgreich geflohen.",
+["Your escape took you "]="Deine Flucht dauerte ",
+["Many meters below the surface..."]="Viele Meter unter der Oberfläche …",
+["The tunnel is about to get flooded..."]="Der Tunnel wird gleich geflutet!",
+["I have to reach the surface as quickly as I can..."]="Du muss die Oberfläche so schnell wie möglich erreichen.",
+["Precise flying"]="Präzisionsfliegen",
+["Use the RC plane and destroy the all the targets"]="Benutze das Funkflugzeug und zerstöre alle Ziele.",
+["Each time you destroy all the targets on your current level you'll get teleported to the next level"]="Jedes mal, wenn du alle Ziele im aktuellen Level zerstörst, wirst du zum nächsten Level teleportiert",
+["You'll have only one RC plane at the start of the mission"]="Am Anfang der Mission hast du nur ein Funkflugzeug.",
+["During the game you can get new RC planes by collecting the weapon crates"]="Während des Spiels kannst du neue Funkflugzeuge erhalten, indem du die Waffenkisten sammest.",
+["On the Desert Planet, Hog Solo found some time to play with his RC plane..."]="Auf dem Wüstenplaneten hat Igel Einsam etwas Zeit gefunden, um mit seinem Funkflugzeug zu spielen.",
+["Level 1 clear!"]="Level 1 abgeschlossen!",
+["Level 2 clear!"]="Level 2 abgeschlossen!",
+["Congratulations, you are the best!"]="Gratulation, du bist der Beste!",
+["You have destroyed all the targets"]="Du hast alle Ziele zerstört.",
+["You are indeed the best PAotH pilot"]="Du bist wirklich der beste PAdI-Pilot.",
+["Next time you play \"Searching in the dust\" you'll have an RC plane available"]="Das nächste Mal, wenn du die Mission »Suche im Staub« spielst, bekommst du ein Funkflugzeug.",
+["You have to destroy all the targets"]="Du musst alle Ziele zerstören.",
+["You will fail if you run out of ammo and there are still targets available"]="Du wirst verlieren, wenn du keine Munition mehr hast und immer noch Ziele übrigbleiben.",
+["The big bang"]="Der Urknall",
+["Find a way to detonate all the explosives and stay alive!"]="Finde einen Weg, alle Sprengstoffe zu detonieren und bleib am Leben!",
+["Red areas are indestructible"]="Rote Bereiche sind unzerstörbar.",
+["Green areas aren't portal enabled"]="Grüne Bereiche sind portalabweisend.",
+["You have to destroy all the explosives without dying!"]="Du musst alle Sprengstoffe zerstören, ohne zu sterben!",
+["Congratulations, you have saved Hogera!"]="Gratulation, du hast Hogera gerettet!",
+["Hogera is safe!"]="Hogera ist in Sicherheit!",
+["Bad timing"]="Schlechtes Timing",
+["Ready for Battle?"]="Bereit für die Schlacht?",
+["Walk left if you want to join Captain Lime or right if you want to decline his offer"]="Geh nach links, wenn du Leutnant Limone beitreten willst, oder nach rechts, wenn du sein Angebot ablehnen möchtest.",
+["Battle Starts Now!"]="Jetzt beginnt die Schlacht!",
+["You have chosen to fight! Lead the Green Bananas to battle and eliminate all the enemies"]="Du hast dich für die Schlacht entschieden! Führe die Grünen Bananen in die Schlacht und eliminiere alle Feinde.",
+["Time to run!"]="Zeit, zu fliehen!",
+["You have chosen to flee... Unfortunately the only place where you can launch your saucer is the left-most place on the map"]="Du hast dich für die Flucht entschieden. Leider ist der einzige Ort, wo du deine Untertasse starten kannst, ganz links auf der Karte.",
+["Captain Lime"]="Leutnant Limone",
+["Mister Pear"]="Herr Birne",
+["Lady Mango"]="Frau Mango",
+["Green Hog Grape"]="Grünigeltraube",
+["Mr Mango"]="Mister Mango",
+["General Lemon"]="General Limone",
+["Robert Yellow Apple"]="Robert Gelbapfel",
+["Summer Squash"]="Sommerkürbis",
+["Tall Potato"]="Großkartoffel",
+["Yellow Pepper"]="Gelbpaprika",
+["Corn"]="Mais",
+["Max Citrus"]="Max Zitron",
+["Naranja Jed"]="Orangus Otus",
+["Green Bananas"]="Grüne Bananen",
+["Yellow Watermelons"]="Gelbe Wassermelonen",
+["Green Bananas won!"]="Die Grünen Bananen haben gewonnen!",
+["You have eliminated all visible enemy hedgehogs!"]="Du hast alle sichtbaren feindlichen Igel besiegt!",
+["Hog Solo escaped successfully!"]="Igel Einsam ist erfolgreich geflohen!",
+["You have reached the take-off area successfully!"]="Du hast das Startfeld erfolgreich erreicht!",
+["Somewhere on the Planet of Fruits a terrible war is about to begin..."]="Irgendwo auf dem Planeten der Früchte steht ein fürchterlicher Krieg bevor.",
+["I was told that as the leader of the king's guard, no one knows this world better than you!"]="Mir wurde gesagt, dass, als der Führer der königlichen Garde, niemand diese Welt besser als du kennst!",
+["So, I kindly ask for your help"]="Also bitte ich dich ergebenst um Hilfe.",
+["You couldn't have come to a worse time Hog Solo!"]="Du könntest du einer kaum schlechteren Zeit ankommen, Igel Einsam!",
+["The clan of the Red Strawberry wants to take over the dominion and overthrone king Pineapple."]="Der Klan der Roten Erdbeere will die Herrschaft an sich reißen und König Ananas stürzen.",
+["Under normal circumstances we could easily defeat them but we have kindly sent most of our men to the kingdom of Sand to help to the annual dusting of the king's palace."]="Unter normalen Bedingungen könnten wir sie leicht besiegen, aber wir hatten freundlicherweise die Meisten unserer Männer zum Sandkönigreich geschickt, um bei der jährlichen Entstaubung des Königspalasts zu helfen.",
+["However the army of Yellow Watermelons is about to attack any moment now."]="Aber die Armee der Gelben Wassermelonen wird jeden Moment angreifen.",
+["I would gladly help you if we won this battle but under these circumstances I'll only help you if you fight for our side."]="Ich würde dir gerne helfen, wenn wir diese Schlacht gewinnen, aber unter diesen Bedingungen kann ich dir nur helfen, wenn du an unserer Seite kämpfst.",
+["What do you say? Will you fight for us?"]="Was sagst du? Wirst du für uns kämpfen?",
+["You choose well Hog Solo!"]="Gute Wahl, Igel Einsam!",
+["I have only 3 hogs available and they are all cadets"]="Ich habe nur 3 Igel, uns sie sind alle Kadetten.",
+["As you are more experienced, I want you to lead them to the battle"]="Da du erfahrener bist, will ich, dass du sie in der Schlacht anführst.",
+["I of course will observe the battle and intervene if necessary"]="Ich werde natürlich die Schlacht beobachten und, wenn nötig, einschreiten.",
+["No problem Captain!"]="Kein Problem, Leutnant!",
+["The enemies aren't many anyway, it is going to be easy!"]="Es sind eh nicht so viele Feinde, es wird einfach sein!",
+["Don't be foolish son, there will be more"]="Sei kein Idiot, Sohn, es werden mehr kommen.",
+["Try to be smart and eliminate them quickly. This way you might scare off the rest!"]="Versuch, schlau zu sein und sie schnell zu erledigen. Auf diese Weise könntest du den Rest abschrecken!",
+["Too bad... Then you should really leave!"]="Schade. Dann solltest du wirklich gehen!",
+["Things are going to get messy around here"]="Es wird hier gleich richtig hässlich werden.",
+["Also, you should know that the only place where you can fly is the left-most part of this area"]="Außerdem solltest du wissen, dass der einzige Ort, wo du fliegen kannst, ganz links in diesem Gebiet ist.",
+["All the other places are protected by our flight-inhibiting weapons"]="Alle anderen Orte sind von unseren flugverhindernden Waffen geschützt.",
+["Now go and don't waste more of my time you coward..."]="Jetzt geh, und vergeude meine Zeit nicht noch weiter, du Feigling!",
+["The Green Bananas lost, try again!"]="Die Grünen Bananen haben verloren, versuche es nochmal!",
+["You have to eliminate all the visible enemies"]="Du musst alle sichtbaren Gegner eliminieren.",
+["5 additional enemies will be spawned during the game"]="5 weitere Gegner werden während des Spiels auftauchen.",
+["You are in control of all the active ally units"]="Du hast die Kontrolle über alle aktive verbündete Einheiten.",
+["The ally units share their ammo"]="Die verbündeten Einheiten teilen ihre Munition.",
+["Try to keep as many allies alive as possible"]="Versuch, so viele Verbündete wie möglich am Leben zu erhalten.",
+["Hog Solo couldn't escape, try again!"]="Igel Einsam konnte nicht fliehen, versuch es nochmal!",
+["You have to get to the left-most land and remove any enemy hog from there"]="Du musst zum linken Rand gelangen und von dort alle feindlichen Igel beseitigen.",
+["You will play every 3 turns"]="Du wirst alle 3 Züge spielen.",
+["Green hogs won't intentionally hurt you"]="Grüne Igel werden dich nicht absichtlich verletzen.",
+["Next wave in 3 turns"]="Nächte Welle in 3 Zügen",
+["Last wave in 3 turns"]="Letzte Welle in 3 Zügen",
+["Getting to the device"]="Zum Greifen nah",
+["Exploring the tunnel"]="Höhlenforscher",
+["Hog Solo has to reach the last crates"]="Igel Einsam muss die letzten Kisten erreichen.",
+["Search for the device with the help of the other hedgehogs "]="Such nach dem Gerät mit der Hilfe der anderen Igel.",
+["Explore the tunnel with the other hedgehogs and search for the device"]="Erforsche den Tunnel mit den anderen Igeln und such nach dem Gerät.",
+["Attack Captain Lime before he attacks back"]="Greif Leutnant Limone an, bevor er angreift.",
+["Go to the surface!"]="Geh an die Oberfläche!",
+["Return to the Surface"]="Zurück an die Oberfläche",
+["Attack the assassins before they attack back"]="Greif die Assassinen an, bevor sie angreifen.",
+["Poisonous Apple"]="Giftapfel",
+["Dark Strawberry"]="Dunkle Erdbeere",
+["Watermelon Heart"]="Wassermelonenherz",
+["Deadly Grape"]="Traube des Todes",
+["Hog Solo and GB"]="Igel Einsam und GB",
+["Fruit Assassins"]="Fruchtassassinen",
+["To win the game, Hog Solo has to get the bottom crates and come back to the surface"]="Um das Spiel zu gewinnen, muss Igel Einsam zu den unteren Kisten gelangen und wieder zurück zur Oberfläche kommen.",
+["You can use the other 2 hogs to assist you"]="Du kannst die anderen beiden Igel benutzen, um dich zu unterstützen.",
+["Do not destroy the crates"]="Zerstöre nicht die Kisten.",
+["You'll have to eliminate the Strawberry Assassins at the end"]="Am Ende musst du die Erdbeerassassinen eliminieren.",
+["You'll have to eliminate Captain Lime at the end"]="Am Ende musst du Leutnant Limone eliminieren.",
+["Don't eliminate Captain Lime before collecting the last crate!"]="Eliminiere Leutnant Limone nicht, bevor du die letzte Kiste eingesammelt hast!",
+["You retrieved the lost part"]="Du hast das verlorene Teil ergattert",
+["You defended yourself against Captain Lime"]="Du hast dich gegen Leutnant Limone gewehrt",
+["You defended yourself against Strawberry Assassins"]="Du hast dich gegen die Erdbeerassassinen gewehrt",
+["Somewhere else on the planet of fruits Captain Lime helps Hog Solo..."]="Irgendwo anders auf dem Planeten der Früchte hilft Leutnant Limone Igel Einsam.",
+["You fought bravely and you helped us win this battle!"]="Du hast mutig gekämpft und uns geholfen, diese Schlacht zu gewinnen!",
+["So, as promised I have brought you where I think that the device you are looking for is hidden."]="Nun, wie versprochen habe ich dich an den Ort gebracht, von dem ich glaube, dass das Gerät dort versteckt ist.",
+["I know that your resources are low due to the battle but I'll send two of my best hogs to assist you."]="Ich weiß, dass deine Ressourcen aufgrund der Schlacht begrenzt sind, aber ich werde dir zwei meiner besten Igel schicken, um die zu helfen.",
+["Somewhere else on the planet of fruits Hog Solo gets closer to the device..."]="Anderswo auf dem Planeten der Früchte kommt Igel Einsam näher an das Gerät.",
+["You are the one who fled! So, you are alive..."]="Du bist der, der floh! Du lebst also …",
+["I'm still low on hogs. If you are not afraid I could use a set of extra hands"]="Ich habe immer noch wenige Igel. Wenn du keine Angst hast, könnte ich etwas Unterstützung gebrauchen.",
+["I am sorry but I was looking for a device that may be hidden somewhere around here"]="Tut mir Leid, aber ich suchte nach einem Gerät, das hier irgendwo versteckt sein könnte.",
+["Many long forgotten things can be found in the same tunnels that we are about to explore!"]="Viele vergessene Dinge können in denselben Tunneln, die wir gleich erforschen werden, finden.",
+["If you help us you can keep the device if you find it but we'll keep everything else"]="Wenn du uns hilfst, darfst du das Gerät behalten, wenn du es findest, aber wir werden alles andere behalten.",
+["What do you say? Are you in?"]="Was sagst du? Bist du dabei?",
+["Ok then!"]="Alles klar!",
+["Hoorah! I've found it, now I have to get back to Captain Lime!"]="Hurra! Ich habe es gefunden, nun muss ich zurück zu Leutnant Limone!",
+["This Hog Solo is so naive! When he returns I'll shoot him and keep that device for myself!"]="Dieser Igel Einsam ist so naiv! Wenn er zurückkehrt, werde ich ihn erschießen und das Gerät für mich selbst behalten!",
+["We have spotted the enemy! We'll attack when the enemies start gathering!"]="Wir haben den Feind gesichtet! Wir werden angreifen, sobald sich die Feinde versammeln.",
+["Precise shooting"]="Präzisionsschießen",
+["You can only use the Sniper Rifle or the Watermelon bomb"]="Du kannst nur das Scharfschützengewehr oder die Wassermelonenbombe benutzen.",
+["You'll have only 2 watermelon bombs during the game"]="Du hast nur 2 Wassermelonenbomben während des Spiels.",
+["You'll get an extra Sniper Rifle every time you kill an enemy hog with a limit of max 4 rifles"]="Du erhältst ein zusätzliches Scharfschützengewehr für jeden Igel, den du tötest (max. 4 Gewehre).",
+["You'll get an extra Teleport every time you kill an enemy hog with a limit of max 2 teleports"]="Du erhältst einen zusätzlichen Teleporter für jeden Igel (max. 2 Teleporter).",
+["The first turn will last 25 sec and every other turn 15 sec"]="Der 1. Zug wird 25 Sek., jeder andere Zug 15 Sek. dauern.",
+["If you skip a turn then the turn time left will be added to your next turn"]="Wenn du einen Zug überspringst, wird die Zugzeit auf deinen nächsten Zug addiert.",
+["Some parts of the land are indestructible"]="Einige Teile des Landes sind unzerstörbar.",
+["Hog 1"]="Igel 1",
+["Hog III"]="Igel III",
+["Hog 100"]="Igel 100",
+["Hog Saturn"]="Igel Saturn",
+["Hog nueve"]="Igel nueve",
+["Hog onze"]="Igel onze",
+["Hog dertien"]="Igel dertien",
+["Hog 3x5"]="Igel 3x5",
+["Hog two"]="Igel zwei",
+["Hog D"]="Igel D",
+["Hog exi"]="Igel exi",
+["Hog octo"]="Igel octo",
+["Hog decar"]="Igel decar",
+["Hog Hephaestus"]="Igel Hephaestus",
+["Hog 7+7"]="Igel 7+7",
+["Hog EOF"]="Igel EOF",
+["RS1"]="RS1",
+["RS2"]="RS2",
+["You will gain some extra ammo from the crates the next time you play the \"Getting to the device\" mission"]="Du wirst etwas zusätzliche Munition aus den Kisten erhalten, wenn du das nächste mal die Mission »Zum Greifen nah« spielst",
+["Somewhere in the Fruit Planet Hog Solo got lost..."]="Irgendwo im Fruchtplaneten hat sich Igel Einsam verlaufen.",
+["...and got ambushed by the Red Strawberries"]="… und von den Roten Erdbeeren überfallen wurdest.",
+["If you skip the game your time left will be added to your next turn"]="Wenn du das Spiel überspringst, wird deine verbleibende Zeit für deinen nächsten Zug addiert.",
+["A frozen adventure"]="Ein frostiges Abenteuer",
+["Collect the icegun and get the device part from Thanta"]="Sammle die Eiskanone ein und besorge das Bauteil von Thanta",
+["Congratulations, you collected the device part!"]="Gratulation, du hast das Bauteil eingesammelt!",
+["Win"]="Sieg",
+["Paul McHoggy"]="Paul McIgel",
+["Thanta"]="Thanta",
+["Billy Frost"]="Bernd Frost",
+["Ice Jake"]="Eis-Jakob",
+["John Snow"]="Jonas Schnee",
+["White Tee"]="Schneeweiß",
+["Allies"]="Verbündete",
+["Frozen Bandits"]="Frostbanditen",
+["Go to Thanta and get the device part!"]="Gehe zu Thanta und ergattere das Bauteil!",
+["To win the game you have to go next to Thanta"]="Um das Spiel zu gewinnen, muss du neben Thanta stehen",
+["Most of the time you'll be able to use only the icegun"]="Die meiste Zeit wirst du nur die Eiskanone benutzen können",
+["Use the bazooka and the flying saucer to get the icegun"]="Benutze die Bazooka und die fliegende Untertasse, um die Eiskanone zu ergattern",
+["Noooo, Thanta has to stay alive!"]="Nein, Thanta muss am Leben bleiben!",
+["On the Ice Planet, where ice rules..."]="Auf dem Eisplaneten, wo das Eis herrscht …",
+["Hi! Nice to meet you"]="Hi! Schön, dich zu sehen.",
+["Listen carefully! The bandit leader, Thanta, has recently found a very strange device"]="Hör gut zu! Der Anführer der Banditen, Thanta, hat neulich ein sehr seltsames Gerät gefunden.",
+["He doesn't know it but this device is a part of the anti-gravity device"]="Er weiß es nicht, aber dieses Bauteil ist ein Teil des Antischwerkraftgeräts.",
+["Nice, then I should get the part as soon as possible!"]="Interessant, dann sollte ich besser das Teil so früh wie möglich holen!",
+["Be careful, your gadgets won't work in the bandit area. You should get an ice gun"]="Sei vorsichtig, deine Apparate werden im Banditenland nicht funktionieren. Du solltest eine Eiskanone holen.",
+["There is one below us!"]="Da ist eine unter uns!",
+["Congratulations, now you can take Thanta's device part..."]="Gratulation, nun kannst du dir Thantas Bauteil nehmen …",
+["Oh! Please spare me. You can take all my treasures!"]="Oh, bitte verschone mich! Du kannst all meine Schätze nehmen.",
+["I just want the strange device you found!"]="Ich will nur das seltsame Teil, das du gefunden hast.",
+["Here! Take it..."]="Hier, nimm es …",
+["Congratulations, you acquired the device part!"]="Gratulation, du hast das Bauteil erhalten!",
+["At the end of the game your health was "]="Am Ende des Spiels war deine Gesundheit ",
+["Hard flying"]="Schwerer Flug",
+["To win the game you have to pass into the rings in time"]="Um dieses Spiel zu gewinnen, musst du rechtzeitig durch die Ringe fliegen.",
+["You'll get extra time in case you need it when you pass a ring"]="Du erhältst Bonuszeit, wenn du sie brauchst, sobald du einen Ring passierst.",
+["Every 2 rings, the ring color will be green and you'll get an extra flying saucer"]="Alle 2 Ringe wird der Ring grün und du erhältst eine neue fliegende Untertasse",
+["Use space button twice to change flying saucer while floating in mid-air"]="Drücke die Leertaste 2 mal, um die fliegende Untertasse im Flug zu wechseln.",
+["Hoorah! You are a champion!"]="Hurra! Du bist ein Champion!",
+["You completed the mission in "]="Du hast die Mission fertiggestellt in ",
+["You have used "]="Du hast benutzt ",
+["You had "]="Du hattest ",
+["In the Ice Planet flying saucer stadium..."]="Im Stadion der fliegenden Untertassen auf dem Eisplaneten …",
+["This is the Olympic stadium of saucer flying..."]="Das ist das olympische Stadion des Untertassenflugs.",
+["All the saucer pilots dream to come here one day in order to compete with the best!"]="Alle Untertassenpiloten träumen davon, hier eines Tages herzukommen, um gegen die Besten um die Wette zu fliegen!",
+["Now you have the chance to try and claim the place that you deserve among the best..."]="Jetzt hast du die Gelegenheit, es selbst zu versuchen, und dir einen Rang unter den Besten zu verdienen.",
+["Use the saucer and pass through the rings..."]="Benutze die Untertasse und passiere die Ringe.",
+["Pause the game by pressing the pause key (default \"P\") for more details"]="Pausiere das Spiel, indem du die Pausetaste (standardmäßig »P«) drückst, um mehr zu erfahren.",
+["... can you do it?"]="Kannst du es schaffen?",
+["Got 1 more saucer"]="1 neue Untertasse",
+[" and 8 more seconds added to the clock"]=" und 8 Bonussekunden auf die Uhr",
+["6 more seconds added to the clock"]="6 Bonussekunden auf die Uhr",
+["Oh man! Learn how to fly!"]="Oh, Mann! Lern erstmal fliegen!",
+["Every 2 rings you'll get extra flying saucers"]="Alle 2 Ringe erhälst du neue fliegende Untertassen",
+["Use space button twice to change flying saucer while being on air"]="Drücke die Leertaste 2 mal, um die fliegende Untertasse im Flug zu wechseln",
+["The first stop"]="Der erste Halt",
+["Go to the upper platform and get the weapons in the crates!"]="Geh zur oberen Plattform und nimm dir die Waffen in den Kisten!",
+["Go down and save these PAotH hogs!"]="Geh runter und rette diese PAdI-Igel!",
+["Prepare to fight"]="Bereitmachen zum Kämpfen",
+["Neutralize your enemies and be careful!"]="Neutralisiere deine Gegner und sei vorsichtig!",
+["The fight begins!"]="Die Schlacht beginnt!",
+["Joe"]="Sepp",
+["Bruce"]="Brutus",
+["Helena"]="Helena",
+["Boris"]="Boris",
+["Prof. Hogevil"]="Prof. Bösigel",
+["Minion"]="Lakai",
+["Minions"]="Lakaien",
+["Hog Solo has to refuel his saucer."]="Igel Einsam muss seine Untertasse auftanken.",
+["Rescue the imprisoned PAotH team and get the fuel!"]="Rette das gefangene PAdI-Team und hol dir den Treibstoff!",
+["You have to get the weapons and rescue the PAotH researchers"]="Wir müssen die Waffen besorgen und die PAdI-Forscher retten.",
+["Don't hit me you fools!"]="Trefft mich nicht, ihr Idioten!",
+["The boss has fallen! Retreat!"]="Der Anführer ist gefallen! Rückzug!",
+["Congrats! You made them run away!"]="Gratulation! Du hast sie in die Flucht geschlagen!",
+["Hog Solo wins, congratulations!"]="Igel Einsam gewinnt, Gratulation!",
+["Eliminated the Professor Hogevil"]="Professor Bösigel eliminiert",
+["Drove the minions away"]="Seine Lakaien vertrieben",
+["I may lost this battle, but I haven't lost the war yet!"]="Ich mag vielleicht diese Schlacht verloren haben, aber ich habe den Krieg noch nicht verloren!",
+["Congrats! You won!"]="Gratulation! Du hast gewonnen!",
+["Eliminated the evil minions"]="Die bösen Lakaien eliminiert",
+["Drove the Professor away"]="Den Professor vertrieben",
+["Near PAotH base at moon..."]="In der Nähe der PAdI-Basis am Mond …",
+["Hey Hog Solo! Finally you have come..."]="Hey, Igel Einsam! Endlich bist du angekommen …",
+["It seems that Professor Hogevil has prepared for your arrival!"]="Es scheint, dass sich Professor Bösigel sich auf deine Ankunft vorbereitet hat!",
+["He has captured the rest of the PAotH team and awaits to capture you!"]="Er hat den Rest des PAdI-Teams gefangen und wartet auf deine Gefangennahme!",
+["We have to hurry! Are you armed?"]="Wir müssen uns beeilen! Bist du bewaffnet?",
+["No, I am afraid I had to travel light"]="Nein, ich fürchte, dass ich mit wenig Gepäck reisen musste.",
+["Ok, then you have to go and take some of the weapons we have hidden in case of an emergency!"]="Okay, dann musst du gehen und ein paar der Waffen, die wir für den Notfall versteckt haben, nehmen.",
+["They are up there! Take this rope and hurry!"]="Sie sind da oben! Nimm dieses Seil und beeil dich!",
+["Ehm... ok..."]="Aha, okay …",
+["I've made it! YEAAAAAH!"]="Ich hab's geschafft! HURRA!",
+["Nice! Now hurry and get down! You have to rescue my friends!"]="Nett! Nun beeil dich und komm runter! Du musst meine Freunde retten!",
+["Get ready to fight!"]="Bereitmachen zum Kämpfen!",
+["Look boss! There is the target!"]="Sieh, Boss! Hier ist das Ziel!",
+["Prepare for battle!"]="Bereitmachen zum Kämpfen!",
+["Oops, I've been spotted and I have no weapons! I am doomed!"]="Upps! Ich wurde entdeckt und ich habe keine Waffen! Ich bin verloren!",
+["Here we go!"]="Auf geht's!",
+["Chasing the blue hog"]="Jag' den blauen Igel",
+["Use the rope in order to catch the blue hedgehog"]="Benutze das Seil, um den blauen Igel zu fangen.",
+["You have to stand very close to him"]="Du musst sehr nahe an ihm stehen.",
+["Crazy Runner"]="Verrückter Renner",
+["On the other side of the moon..."]="Auf der anderen Seite des Mondes …",
+["So you are interested in Professor Hogevil"]="Also bist du in Professor Bösigel interessiert.",
+["We'll play a game first"]="Wir spielen zuerst ein Spiel.",
+["I'll let you know whatever I know about him if you manage to catch me 3 times"]="Ich lass dich wissen, was ich über ihn weiß, wenn du es schaffst, mich 3 mal zu fangen.",
+["Let's go!"]="Los geht's!",
+["The truth about Professor Hogevil"]="Die Wahrheit über Professor Bösigel",
+["Amazing! I was never beaten in a race before!"]="Großartig! Ich wurde zuvor noch nie in einem Wettlauf geschlagen!",
+["So, let me tell you what I know about Professor Hogevil..."]="Also, lass mich erzählen, was ich über Professor Bösigel weiß.",
+["Professor Hogevil, then known as James Hogus, worked for PAotH back in my time"]="Professor Bösigel, früher bekannt als Jakobus Iglus, arbeitete in meiner Zeit für PAdI.",
+["He was the lab assistant of Dr. Goodhogan, the inventor of the anti-gravity device"]="Er war der Laborassistent von Dr. Gutigeln, dem Erfinder des Antischwerkraftgeräts.",
+["During the final testing of the device an accident happened"]="Während des letzten Tests des Gerätes ist ein Unfall passiert.",
+["In this accident Professor Hogevil lost all his spines on his head!"]="Bei diesem Unfall hat Professor Bösigel all seine Stacheln auf seinem Kopf verloren!",
+["That's why he always wears a hat since then"]="Deshalb trägt er seit dem immer einen Hut.",
+["After that incident he went underground and started working on his plan to steal the device"]="Nach dem Unfall ging er in den Untergrund und arbeitete an seinem Plan, um das Gerät zu stehlen.",
+["He is a very tough and very determined hedgehog. I would be extremely careful if I were you"]="Er ist ein sehr starker und willensstarker Igel. An deiner Stelle wäre ich sehr vorsichtig.",
+["I should go now, goodbye!"]="Ich sollte jetzt gehen. Tschüss!",
+["Go get him again"]="Los, hol ihn dir wieder!",
+["You got me"]="Du hast mich.",
+["Too slow! Try again..."]="Zu langsam! Versuch es nochmal.",
+["You have to catch the other hog 3 times"]="Du musst den anderen Igel 3 mal fangen.",
+["The time that you have left when you reach the blue hedgehog will be added to the next turn"]="Deine Verbleibende Zeit wird zu deinem nächsten Zug addiert, sobald du den blauen Igel erreichst.",
+["Each turn you'll have only one rope to use"]="In jedem Zug kannst du nur ein Seil benutzen.",
+["You'll lose if you die or if your time is up"]="Du verlierst, wenn du stirbst oder deine Zeit abläuft.",
+["Congratulations, you are the fastest!"]="Gratulation, du bist der Schnellste!",
+["You have managed to catch the blue hedgehog in time"]="Du hast es geschafft, den blauen Igel rechtzeitig zu fangen.",
+["'Zooka Team"]="Die Knalltüten",
+["Hunter"]="Jäger",
+["Aiming Practice"]="Zielübung",
+["Bazooka Training"]="Bazooka-Training",
+["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."]="Eliminiere alle Ziele, bevor die Zeit ausläuft.|Du hast in dieser Mission unbegrenzte Munition.",
+["Oh no! Time's up! Just try again."]="Oh nein! Die Zeit ist um! Versuche es nochmal.",
+["Aiming practice"]="Zielübung",
+["Oh no! You failed! Just try again."]="Oh nein! Du hast versagt! Versuch es nochmal.",
+["hits"]="Treffer",
+["You have destroyed %d of %d targets."]="Du hast %d von %d Zielen zerstört.",
+["You have launched %d bazookas."]="Du hast %d Bazookas abgefeuert.",
+["Your accuracy was %.1f%%."]="Deine Treffgenauigkeit betrug %.1f%%.",
+["%.1f seconds were remaining."]="Es verblieben %.1f.",
+["Congratulations! You've eliminated all targets|within the allowed time frame."]="Gratulation! Du hast alle Ziele innerhalb der|verfügbaren Zeit ausgeschaltet.",
+["Grenadiers"]="Grenadiere",
+["Nade Boy"]="Granatenjunge",
+["Grenade Training"]="Granatentraining",
+["Now find the next target! |Tip: Normally you lose health by falling down, so be careful!"]="Nun finde das nächste Ziel! |Tipp: Normalerweise verlierst du Gesundheit, wenn du herunterfällst, also pass auf!",
+["You're getting pretty good! |Tip: When you shorten you rope you move faster! |and when you lengthen it you move slower"]="Du wirst ziemlich gut! |Tipp: Wenn du dein Seil verkürzt, bewegst du dich schneller! |Und wenn du es verlängerst, wirst du langsamer.",
+["The next one is pretty hard! |Tip: You have to do multiple swings!"]="Die Nächste ist ziemlich schwer! |Tipp: Du musst mehrmals schwingen!",
+["I don't know how you did that.. But good work! |The next one should be easy as cake for you!"]="Ich weiß nicht, wie du das getan hast. Aber gute Arbeit! |Die Nächste solle idiotensicher für dich sein!",
+["Congratulations"]="Gratulation",
+["Congratulations! You've completed the Rope tutorial! |- Tutorial ends in 10 seconds!"]="Gratulation! Du hast die Seil-Einführung abgeschlossen! |- Die Einführung wird in 10 Sekunden beendet.",
+["Achievement Unlocked"]="Neue Errungenschaft",
+["Rope Master!"]="Seilmeister!",
+["Rope Training"]="Seiltraining",
+["Great work! Now hit it with your Baseball Bat! |Tip: You can change weapon with 'Right Click'!"]="Gute Arbeit! Nun triff es mit deinem Baseballschläger! |Tipp: Du kannst die Waffe mit [Rechtsklick] wechseln!",
+["Remember: The rope only bend around objects, |if it doesn't hit anything it's always stright!"]="Denk dran: Das Seil verbiegt sich nur um Objekte, |wenn es nichts trifft, wird es immer gerade sein.",
+["Rope Team"]="Seilteam",
+["Get to the target using your rope! |Controls: Left & Right to swing the rope - Up & Down to Contract and Expand!"]="Gelange zum Ziel mit deinem Seil! |Steuerung: Links/Rechts zum Schwingen – Hoch/Runter zum Ein- und Ausfahren!",
+["Tip: The rope physics are different than in the real world, |use it to your advantage!"]="Tipp: Die Seilphysik ist anders als in der realen Welt, |nutze das zu deinem Vorteil aus!",
+["You did not make it in time, try again!"]="Du hast es nicht rechtzeitig geschafft, versuch es nochmal!",
+["You have been respawned, at your last checkpoint!"]="Du wurdest zum letzten Kontrollpunkt zurückgesetzt!",
+["You have been respawned, be more carefull next time!"]="Du wurdest wiederbelebt, sei beim nächsten Mal vorsichtiger!",
+["Sniperz"]="Heckenschützen",
+["Sniper Training"]="Scharfschützen-Training",
+["Time's up!"]="Die Zeit ist um!",
+["Good so far!"]="Gut soweit!",
+["Keep it up!"]="Weiter so!",
+["This one's tricky."]="Der hier ist knifflig.",
+["Well done."]="Gut gemacht.",
+["Demolition is fun!"]="Zerstörung macht Spaß!",
+["Will this ever end?"]="Wird dies je enden?",
+["Last Target!"]="Letzte Zielscheibe!",
+["You have successfully finished the sniper rifle training!"]="Du hast das Scharfschützentraining abgeschlossen!",
+["You have destroyed %d of %d targets (+%d points)."]="Du hast %d von %d Zielen zerstört (+%d Punkte).",
+["You have made %d shots."]="Du hast %d Schüsse abgegeben.",
+["Accuracy bonus: +%d points"]="Präzisions-Bonus: +%d Punkte",
+["You had %.2fs remaining on the clock (+%d points)."]="Verbleibende Zeit: %.2fs (+%d Punkte).",
+["Shoppa Love"]="Seilliebe",
+["Team of Hearts"]="Team der Herzen",
+["Heartful"]="Herzlich",
+["Ropes and Crates"]="Seile und Kisten",
+["Shoppa Union"]="Konsumentenunion",
+["Hook"]="Haken",
+["The Customor is King"]="Der Kunde ist König",
+["King Customer"]="König Kunde",
+["Lonely Hog"]="Einsamer Igel",
+["Climber"]="Kletterer",
+["Zook"]="Zook",
+["Team Zook"]="Team Zook",
+["Private Nolak"]="Gefreiter Nolak",
+["The Hogies"]="Die Igelinge",
+["You have thrown %d cluster bombs."]="Du hast %d Splitterbomben geworfen.",
+["Grenadier"]="Grenadier",
+["Grenade Group"]="Granatengruppe",
+["You have thrown %d grenades."]="Du hast %d Granaten geworfen.",
+["You have launched %d homing bees."]="Du hast %d zielsuchende Bienen abgefeuert.",
+["Pathetic Resistance"]="Erbärmlicher Widerstand",
+["Cybernetic Empire"]="Kybernetisches Imperium",
+["Unit 835"]="Einheit 835",
+["Bamboo Thicket"]="Bambusdickicht",
+["Eliminate the enemy before the time runs out"]="Vernichte den Feind, bevor die Zeit abgelaufen ist",
+["User Challenge"]="Benutzerherausforderung",
+["Congratulations!"]="Gratulation!",
+["MISSION SUCCESSFUL"]="MISSION ERFOLGREICH",
+["Energetic Engineer"]="Energetischer Ingenieur",
+["MISSION FAILED"]="MISSION GESCHEITERT",
+["Oh no! Just try again!"]="Oh nein! Versuch's nochmal!",
+["Bloody Rookies"]="Blutige Anfänger",
+["Instructor"]="Ausbilder",
+["Blue Team"]="Blaues Team",
+["Filthy Blue"]="Blödblau",
+["Dangerous Ducklings"]="Gefährliche Entchen",
+["Eliminate the Blue Team"]="Lösche das Blaue Team aus",
+["Listen up, maggot!!"]="Aufgepasst, du Made!!",
+["!!!"]="!!!",
+["The enemy is hiding out on yonder ducky!"]="Der Feind versteckt sich auf dem Entlein dort drüben!",
+["Get on over there and take him out!"]="Mach, dass du hinüber kommst und schalte ihn aus!",
+["GO! GO! GO!"]="Los, los, los!",
+["DAMMIT, ROOKIE!"]="VERDAMMT, REKRUT!",
+["DAMMIT, ROOKIE! GET OFF MY HEAD!"]="VERDAMMT, REKRUT! RUNTER VON MEINEM KOPF!",
+[":("]=":(",
+["You've failed. Try again."]="Du bist gescheitert. Versuche es nochmal.",
+["See ya!"]="Mach's gut!",
+["Naughty Ninja"]="Böser Ninja",
+["Enjoy the swim..."]="Viel Spaß beim Schwimmen …",
+["Toxic Team"]="Giftige Gegner",
+["Poison"]="Gift",
+["Eliminate Poison before the time runs out"]="Neutralisiere das Gift, bevor die Zeit abgelaufen ist.",
+["Operation Diver"]="Taucher",
+["sec"]="s",
+["|- Mines Time:"]="|- Minenzündzeit:",
+["Unit"]="Einheit",
+["Newton's Hammock"]="Newtons Hängematte",
+["Nameless Heroes"]="Namenlose Helden",
+["Drowner"]="Absäufer",
+["Clowns"]="Clowns",
+["Nobody Laugh"]="Niemand darf lachen",
+["Wannabe Flyboys"]="Möchtegernflieger",
+["Ace"]="Ass",
+["RC PLANE TRAINING"]="FUNKFLUGZEUGSTRAINING",
+["a Hedgewars challenge"]="eine Hedgewars-Herausforderung",
+["Collect or destroy all the health crates."]="Sammle oder zerstöre alle Gesundheitskisten.",
+["Compete to use as few planes as possible!"]="Verwende so wenige Flugzeuge wie möglich!",
+["Planes used: %d"]="Verwendete Flugzeuge: %d",
+["Crates left: %d"]="Verbleibende Kisten: %d",
+["Destroyer of planes"]="Flugzeug-Zerstörer",
+["Hopeless case"]="Hoffnungsloser Fall",
+["Drunk greenhorn"]="Betrunkener Grünschnabel",
+["Greenhorn"]="Grünschnabel",
+["Beginner"]="Anfänger",
+["Experienced beginner"]="Erfahrener Anfänger",
+["Below-average pilot"]="Unterdurchschnittlicher Pilot",
+["Average pilot"]="Durchschnittlicher Pilot",
+["Above-average pilot"]="Überdurchschnittlicher Pilot",
+["Professional pilot"]="Profipilot",
+["Professional stunt pilot"]="Profi-Stuntpilot",
+["Elite pilot"]="Elitepilot",
+["Upper-class elite pilot"]="Elitepilot der Oberklasse",
+["Top-class elite pilot"]="Elitepilot der Spitzenklasse",
+["Cheater"]="Cheater",
+["Rank: %s"]="Rang: %s",
+["Your rank: %s"]="Dein Rang: %s",
+["Flawless victory!"]="Perfekter Sieg!",
+["You have perfectly beaten the challenge!"]="Du hast die Herausforderung gemeistert!",
+["You have used only 1 RC plane. Outstanding!"]="Du hast nur ein Funkflugzeug gebraucht. Ausgezeichnet!",
+["You have finished the challenge!"]="Du hast die Herausforderung gemeistert!",
+["You have used %d RC planes."]="Du hast %d Funkflugzeuge benutzt.",
+["You have dropped %d missiles."]="Du hast %d Bomben abgeworfen.",
+["In your best (and only) flight you took out %d crates with one RC plane!"]="In deinem besten (und einzigem) Flug hast du %d Kisten mit einem Funkflugzeug zerstört!",
+["In your best flight you took out %d crates with one RC plane."]="In deinem besten Flug hast du %d Kisten mit einem Funkflugzeug zerstört.",
+["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"]="Das war eine großartige Vorstellung! Aber diese Herausforderung kann sogar mit nur einem Funkflugzeug gemeistert werden. Kannst du herausfinden, wie?",
+["Congratulations! You have truly mastered this challenge! Don't forget to save the demo."]="Gratulation! Du hast diese Herausforderung wahrhaft gemeistert! Vergiss nicht, die Wiederholung zu speichern.",
+["Prestigious Pilot"]="Prestigeträchtiger Pilot",
+["You have gained an achievement: %s"]="Du hast eine Errungenschaft erhalten: %s",
+["CHALLENGE COMPLETE"]="HERAUSFORDERUNG ABGESCHLOSSEN",
+["Wannabe Shoppsta"]="Möchtegernkäufer",
+["Unsuspecting Louts"]="Nichtsahnende Lümmel",
+["Unlucky Sods"]="Arme Schweine",
+["ROPE-KNOCKING"]="SEILSCHUBSEN",
+["COMPLETION TIME"]="ZEIT",
+["MISSION SUCCESS"]="MISSIONSERFOLG",
+["Use the rope to knock your enemies to their doom."]="Benutze das Seil, um deine Gegner in ihr Verderben zu stürzen!",
+["GG!"]="Gut gemacht!",
+["Ouch!"]="Autsch!",
+["Eliminate all enemies"]="Vernichte alle Gegner",
+["Spooky Tree"]="Spukiger Baum",
+["Good birdy......"]="Braver Vogel …",
+["Feeble Resistance"]="Kraftloser Widerstand",
+["Pathetic Hog #%d"]="Erbärmlicher Igel #%d",
+["Unit 3378"]="Einheit 3378",
+["- Eliminate Unit 3378 |- Feeble Resistance must survive"]="- Vernichte Einheit 3378 |- Kraftloser Widerstand muss überleben",
+["Codename: Teamwork"]="Code-Name: Teamwork",
+["T_T"]="T_T",
+["Hmmm..."]="Hmmm …",
+["Good luck out there!"]="Viel Glück da draußen!",
+["Challenge"]="Herausforderung",
+["Save as many hapless hogs as possible!"]="Rette so viele glücklose Igel wie möglich!",
+["That Sinking Feeling"]="Land unter",
+["Hapless Hogs"]="Glücklose Igel",
+["Sinky"]="Blubb",
+["Heavy"]="Schwierig",
+["Clumsy"]="Hoppla",
+["Silly"]="Doofi",
+["Careless"]="Achtlos",
+["Sponge"]="Schwamm",
+["Deadweight"]="Gravitus",
+["The Nameless One"]="Der Namenlose",
+["Press [Precise] to skip intro"]="Drücke [Genaues Zielen], um das Intro zu überspringen",
+["This rain is really something..."]="Das nenne ich mal einen Regenschauer...",
+["Heh, it's not that bad."]="Hehe, so schlimm ist es nicht.",
+["You'd almost swear the water was rising!"]="Man könnte fast schwören das Wasser würde steigen!",
+["Haha, now THAT would be something!"]="Haha, na DAS wär ja was!",
+["Hahahaha!"]="Hahahaha!",
+["It's a good thing SUDDEN DEATH is 99 turns away..."]="Gut, dass SUDDEN DEATH in 99 Runden ist …",
+["Challenge completed!"]="Herausforderung bewältigt!",
+["You saved %d of 8 Hapless Hogs."]="Du hast %d von 8 Glücklosen Igeln gerettet.",
+["Achievement obtained: Lively Lifeguard"]="Errungenschaft erhalten: Lebhafter Lebensretter",
+["You have obtained an achievement: Lively Lifeguard"]="Du hast eine Errungenschaft erhalten: Lebhafter Lebensretter",
+["%d Hapless Hogs left"]="%d Glücklose Igel verbleibend",
+["Disqualified!"]="Disqualifiziert!",
+["Your hedgehog died!"]="Dein Igel ist gestorben!",
+["You must survive the flood in order to score."]="Du musst das Hochwasser überleben um zu punkten.",
+["You haven't rescued anyone."]="Du hast niemanden gerettet.",
+["Hero Team"]="Heldenteam",
+["Good Dude"]="Guter Junge",
+["Bad Team"]="Böses Team",
+["Elimate your captor."]="Eliminiere deinen",
+["Get out of there!"]="Geh weg!",
+["The Great Escape"]="Gesprengte Ketten",
+["Portal mission"]="Portalmission",
+["training"]="Training",
+["Hmmm, I'll have to find some way of moving him off this anti-portal surface..."]="Hmmm, ich muss einen Weg finden, um ihn von dieser Antiportaloberfläche zu schubsen …",
+["The anti-portal zone is all over the floor, and I have nothing to kill him...Droping something could hurt him enough to kill him..."]="Die Antiportalzone ist über den ganzen Boden und ich habe nichts, um ihn zu töten. Vielleicht könnte ich ihn genug verletzen, wenn ich etwas fallenlasse.",
+["You can't fire a portal on the blue surface"]="Du kannst kein Portal auf der blauen Fläche öffnen.",
+[" What !! For all of this struggle i just win some ... TIME o0"]="Was?! Für all die Mühen gewinne ich nur etwas … ZEIT?",
+["Each turn you get 1-3 random weapons"]="Du bekommst jede Runde 1-3 zufällig gewählte Waffen",
+["Game Started!"]="Spiel gestartet!",
+["CAPTURE THE FLAG"]="SCHNAPP DIR DIE FLAGGE",
+["Flags, and their home base will be placed where each team ends their first turn."]="Fahnen und deren Heimatstandort werden dort plaziert, wo jedes Team deren ersten Zug beendet.",
+["RULES OF THE GAME [Press ESC to view]"]="SPIELREGELN (Drücke [Esc] zum Anzeigen)",
+["Reflector Shield"]="Reflektorschild",
+["Bio-Filter"]="Biofilter",
+["Healing Station"]="Heilstation",
+["Respawner"]="Wiederbeleber",
+["Teleportation Node"]="Teleportationsstation",
+["Core"]="Kern",
+["Generator"]="Generator",
+["Support Station"]="Waffenstation",
+["Construction Station"]="Baustation",
+["Weapon Filter"]="Waffenfilter",
+["Teleport Unsuccessful. Please teleport within a clan teleporter's sphere of influence."]="Teleportation fehlgeschlagen. Bitte teleportiere nur innerhalb des Einzugsgebiets deiner Klanteleporter.",
+["Teleportation Mode"]="Teleportationsmodus",
+["Girder Placement Mode"]="Trägerplatzierungsmodus",
+["Rubber Placement Mode"]="Gummiplatzierungsmodus",
+["Mine Placement Mode"]="Minenplatzierungsmodus",
+["Sticky Mine Placement Mode"]="Haftminenplatzierungsmodus",
+["Barrel Placement Mode"]="Pulverfassplatzierungsmodus",
+["Health Crate Placement Mode"]="Gesundheitskistenplatzierungsmodus",
+["Weapon Crate Placement Mode"]="Waffenkistenplatzierungsmodus",
+["Utility Crate Placement Mode"]="Werkzeugkistenplatzierungsmodus",
+["Structure Placement Mode"]="Gebäudeplatzierungsmodus",
+["Structure Placement Tool"]="Gebäudeplatzierungswerkzeug",
+["Object Placement Tool"]="Objektplatzierungswerkzeug",
+["Crate Placement Tool"]="Kistenplatzierungswerkzeug",
+["Drill Rocket"]="Bohrkopfrakete",
+["Mudball"]="Schlammball",
+["Cluster Bomb"]="Splittergranate",
+["Molotov Cocktail"]="Molotowcocktail",
+["Watermelon Bomb"]="Wassermelonenbombe",
+["Hellish Handgrenade"]="Höllische Handgranate",
+["Limburger"]="Limburger",
+["Shotgun"]="Schrotflinte",
+["Flamethrower"]="Flammenwerfer",
+["Sniper Rifle"]="Scharfschützengewehr",
+["Freezer"]="Eiskanone",
+["Land Sprayer"]="Landkanone",
+["Whip"]="Peitsche",
+["Baseball Bat"]="Baseballschläger",
+["Seduction"]="Verführung",
+["Hammer"]="Hammer",
+["Mine"]="Mine",
+["Dynamite"]="Dynamit",
+["Cake"]="Kuchen",
+["Ballgun"]="Ballkanone",
+["Sticky Mine"]="Haftmine",
+["Cleaver"]="Hackebeil",
+["Birdy"]="Vogli",
+["Blowtorch"]="Schweißbrenner",
+["Pickhammer"]="Presslufthammer",
+["Personal Portal Device"]="Portalgerät",
+["Rope"]="Seil",
+["Parachute"]="Fallschirm",
+["Flying Saucer"]="Fliegende Untertasse",
+["Invulnerable"]="Unverwundbar",
+["Laser Sight"]="Laservisier",
+["Vampirism"]="Vampirismus",
+["Low Gravity"]="Niedrige Schwerkraft",
+["Extra Damage"]="Extraschaden",
+["Extra Time"]="Zusatzzeit",
+["You may only use 1 Extra Time per turn."]="Du darfst pro Zug nur einmal Zusatzzeit benutzen.",
+["You may only spawn 5 crates per turn."]="Du darfst pro Zug nur 5 Kisten platizeren.",
+["Invalid Placement"]="Ungültige Position",
+["Insufficient Power"]="Unzureichende Energie",
+["The Great Hog in the sky sees your sadness and grants you a boon."]="Der Große Igel im Himmel sieht deine Traurigkeit und leistet dir eine Gabe.",
+["Cost"]="Kosten",
+["CONSTRUCTION MODE"]="BAUMODUS",
+["a Hedgewars mini-game"]="ein Hedgewars Mini-Spiel",
+["Build a fortress and destroy your enemy."]="Baue ein Fort und zerstöre deinen Feind.",
+["There are a variety of structures available to aid you."]="Es gibt verschiedene Gebäude, um dich zu unterstützen.",
+["Use the air-attack weapons and the arrow keys to select structures."]="Benutze die Luftangriffswaffen und die Pfeiltasten, um Gebäude auszuwählen.",
+["Grants nearby hogs life-regeneration."]="Spendet nahen Igeln Lebensenergie.",
+["Aggressively removes enemy hedgehogs."]="Entfernt feindliche Igel aggressiv.",
+["Dematerializes weapons and equipment carried by enemy hedgehogs."]="Demateralisiert Waffen und Equipment, das von feindlichen Igeln getragen wird.",
+["Reflects enemy projectiles."]="Stößt feindliche Projektile ab.",
+["Generates power."]="Erzeugt Energie.",
+["Resurrects dead hedgehogs."]="Belebt tote Igel wieder.",
+["Allows free teleportation between other nodes."]="Ermöglicht kostenlose Teleportationen zwischen anderen Stationen.",
+["Teleporation Node"]="Teleporterstation",
+["Allows placement of girders, rubber-bands, mines, sticky mines and barrels."]="Ermöglicht die Platzierung von Trägern, Gummibändern, Minen, Haftminen und Pulverfässern.",
+["Allows the placement of weapons, utiliites, and health crates."]="Ermöglicht die Platzierung von Waffen-, Werkzeug- und Gesundheitskisten",
+["Note: Some weapons have a second option (See continent information). Find and use them with the \""]="Beachte: Einige Waffen haben eine Zweitoption (Siehe Kontinentinformationen). Finde und benutze sie mit \"",
+["Per team weapons"]="Waffen pro Team",
+["Select your continent/weaponset: with the \"Up\" or \"Down\" keys. You can also select one with the weapons menu."]="Wähle deinen Kontinent/Waffensatz mit den [Hoch]- oder [Runter]-Tasten. Du kannst ihn auch mit dem Waffenmenü auswählen.",
+["Tip: See the \"esc\" key (this menu) if you want to see the currently playing teams continent, or that continents specials."]="Tipp: Benutze die [Esc]-Taste (dieses Menü), wenn du den Kontinent des aktuellen Teams sehen willst, oder die Besonderheiten dieses Kontinents sehen willst.",
+["Unique new weapons"]="Einzigartige neue Waffen",
+["key."]="Taste.",
+["switch"]="Schalter",
+["weaponschemes"]="Waffenschemata",
+["Green lipstick bullet: [Poisonous, deals no damage]"]="Grüne Lippenstiftpatrone: (giftig, kein Schaden)",
+["Cluck-cluck time: [Fire an egg ~ Sabotages and cures poison ~ Cannot be fired close to another hog]"]="Gackerzeit: (Schieß ein Ei – Sabotiert und kuriert Gift – kann nicht in der nähe anderer Igel gefeuert werden)",
+["Anno 1032: [The explosion will make a strong push ~ Wide range, wont affect hogs close to the target]"]="Anno 1032: (Die Explosion wird stark schubsen – Große Reichweite, betrifft Igel in der Nähe des Ziels nicht)",
+["Dust storm: [Deals 15 damage to all enemies in the circle]"]="Staubsturm: (15 Schaden für alle Gegner im Kreis)",
+["Cricket time: [Fire away a 1 sec mine! ~ Cannot be fired close to another hog]"]="Kricket: (Feuere eine 1-Sek.-Mine! – kann nicht in der Nähe anderer Igel gefeuert werden)",
+["Drop a bomb: [Drop some heroic wind that will turn into a bomb on impact]"]="Bombe fallenlassen: (Lass einen heroischen Wind, der sich bei Einschlag in eine Bombe verwandelt, fallen)",
+["Penguin roar: [Deal 15 damage + 10% of your hogs health to all hogs around you and get 2/3 back]"]="Pinguinröhren: (Richte 15 Schaden + 10% deiner Igelgesundheit auf alle Igel um dich herum und bekomme 2/3 zurück)",
+["Disguise as a Rockhopper Penguin: [Swap place with a random enemy hog in the circle]"]="Als Felsenpinguin tarnen: (Vertausche die Plätze mit einem zufälligen Igel im Kreis)",
+["Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"]="Einsame Heuler: (Erhöhe das Wasser, wenn kein Igel im Kreis ist und richte 6 Schaden auf alle gegnerischen Igel an.)",
+["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"]="Igelprojektil: (Feuer deinen Igel wie eine Haftmine)",
+["Napalm rocket: [Fire a bomb with napalm!]"]="Napalmrakete: (Feuer eine Bombe mit Napalm ab!)",
+["Eagle Eye: [Blink to the impact ~ One shot]"]="Adlerauge: (Teleportiere dich zum Einschlagspunkt – ein Schuss)",
+["Medicine: [Fire some exploding medicine that will heal all hogs effected by the explosion]"]="Medizin: (Feuere eine explodierende Medizin, die alle Igel im Explosionsradius heilen wird)",
+["Sabotage/Flare: [Sabotage all hogs in the circle and deal ~1 dmg OR Fire a cluster up into the air]"]="Sabotage/Fackel: (Sabotiere alle Igel im Kreis und richte ca. 1 Schaden an, ODER feuer eine Splittergranate in die Luft)",
+["- You can switch between hogs at the start of your turns. (Not first one)"]="- Du kannst deinen Igel am Zugbeginn aussuchen (aber nicht am 1. Zug).",
+["Area"]="Gebiet",
+["Difficulty: "]="Schwierigkeitsgrad: ",
+["EASY"]="EINFACH",
+["North America"]="Nordamerika",
+["Population"]="Einwohnerzahl",
+["Special Weapons:"]="Sonderwaffen:",
+["GasBomb"]="Gasbombe",
+["MEDIUM"]="MITTEL",
+["South America"]="Südamerika",
+["Europe"]="Europa",
+["Molotov"]="Molotowcocktail",
+["Africa"]="Afrika",
+["- Will give you a parachute every second turn."]="- Wird dir jeden 2. Zug einen Fallschirm geben",
+["Asia"]="Asien",
+["Australia"]="Australien",
+["Baseballbat"]="Baseballschläger",
+["Antarctic summer: - Will give you one girder/mudball and two sineguns/portals every fourth turn."]="Antarktischer Sommer: – Wird dir einen Träger/Schlammball und zwei Sinuskanonen/Portalgeräte jeden 4. Zug geben",
+["Antarctica"]="Antarktika",
+["HARD"]="SCHWER",
+["Duration"]="Dauer",
+["Kerguelen"]="Kerguelen",
+["- Massive weapon bonus on first turn"]="- Großer Waffenbonus am ersten Zug",
+["- Will Get 1-3 random weapons"]="- wird 1–3 zufällige Waffen erhalten",
+["Zealandia"]="Neuseeland-Kontinent",
+["- You will recieve 2-4 weapons on each kill! (Even on own hogs)"]="- Du wirst 2–4 Waffen für jeden Abschuss erhalten (sogar für eigene Igel)!",
+["Sundaland"]="Sunda",
+["General information"]="Allgemeine Informationen",
+[" was extracted from the scheme|- This continent will be able to use the specials from the other continents!"]=" wurde vom Schema extahiert|– Dieser Kontinent wird alle Besonderheiten von den anderen Kontinenten benutzen können!",
+["Continental supplies"]="Kontinentallieferungen",
+["Let a continent provide your weapons!"]="Lass einen Kontinent dich mit Waffen beliefern!",
+["Select continent!"]="Wähle einen Kontinent!",
+["NORMAL"]="NORMAL",
+["You are sabotaged, RUN!"]="Du wurdest sabotiert, LAUF!",
+["WARNING: Sabotage detected!"]="WARNUNG: Sabotage erkannt!",
+["Hogs in sight!"]="Igel in Sicht!",
+["RULES"]="REGELN",
+["Each turn is only ONE SECOND!"]="Jeder Zug dauert nur EINE SEKUNDE!",
+["Use your ready time to think."]="Benutze deine Vorbereitungszeit zum Denken.",
+["Slot keys save time! (F1-F10 by default)"]="Schnelltasten, um Zeit zu sparen! (standardmäßig F1–F10)",
+["SLOTS"]="SLOTS",
+["Slot"]="Slot",
+["Teleport"]="Teleporter",
+["FRENZY"]="WAHNSINN",
+["a frenetic Hedgewars mini-game"]="ein hektisches Hedgewars-Minispiel",
+["random in range from %i%% to %i%% with period of %i msec"]="Zufällig von %i%% bis %i%% mit einer Periode von %i ms",
+["changing range from %i%% to %i%% with period of %i msec"]="Sich verändernde Grenzen von %i%% bis %i%% mit einer Periode von %i ms",
+["Gravity"]="Schwerkraft",
+["Current setting is "]="Aktuelle Einstellung ist ",
+["Setup:|'g=150', where 150 is 150% of normal gravity"]="Syntax:|»g=150«, wobei »150« für 150% der normalen Schwerkraft steht.",
+["or 'g=50, g2=150, period=4000' for gravity changing|from 50 to 150 and back with period of 4000 msec"]="Oder »g=50, g2=150, period=4000« für eine Schwerkraft,|die von 50 bis 150 vor und zurück mit einer Periode von 4000 ms oszilliert.",
+["Set period to negative value for random gravity"]="Setze period auf einen negativen Werd für eine zufällige Schwerkraft",
+["Homing Bee"]="Zielsuchende Biene",
+["SineGun"]="Sinuskanone",
+["Land Spray"]="Landkanone",
+["Kamikaze"]="Kamikaze",
+["RC Plane"]="Funkflugzeug",
+["Air Attack"]="Luftangriff",
+["Mine Strike"]="Minen-Luftangriff",
+["Drill Strike"]="Bohr-Luftangriff",
+["Air Mine"]="Luftmine",
+["Napalm"]="Napalm-Luftangriff",
+["Piano Strike"]="Piano-Angriff",
+["BlowTorch"]="Schweißbrenner",
+["PickHammer"]="Presslufthammer",
+["Girder"]="Bauträger",
+["Rubber"]="Gummi",
+["Resurrector"]="Totenbeschwörung",
+["Tardis"]="Zeitkasten",
+["Switch Hog"]="Igel wechseln",
+["Air Mine Placement Mode"]="Luftminenplatzierungsmodus",
+["Target Placement Mode"]="Zielscheibenplatzierungsmodus",
+["Cleaver Placement Mode"]="Hackebeilplatzierungsmodus",
+["Advanced Repositioning Mode"]="Fortgeschrittner Verlegungsmodus",
+["Tagging Mode"]="Markierungsmodus",
+["Hog Identity Mode"]="Igelidentitätsmodus",
+["Team Identity Mode"]="Team-Identitätsmodus",
+["Health Modification Mode"]="Gesundheitsmodifikationsmodus",
+["Sprite Placement Mode"]="Sprite-Platzierungsmodus",
+["Sprite Modification Mode"]="Sprite-Modifikationsmodus",
+["Waypoint Placement Mode"]="Wegpunktplatzierungsmodus",
+["Selection Mode"]="Auswahlmodus",
+["Placement Mode"]="Platzierungsmodus",
+["Deletion Mode"]="Löschmodus",
+["Please click on a hedgehog."]="Bitte klick auf einen Igel.",
+["LandFlag Modification Mode"]="LandFlag-Modifikationsmodus",
+["Sprite Erasure Mode"]="Sprite-Löschmodus",
+["Tag Collection Mode"]="Markiermodus: Einsammeln",
+["Please click on a crate."]="Bitte klick auf eine Kiste.",
+["Tag Victory Mode"]="Markiermodus: Sieg",
+["Tag Failure Mode"]="Markiermodus: Niederlage",
+["Waypoint Deletion Mode"]="Wegpunktlöschmodus",
+["Standard Target"]="Standardziel",
+["Standard Cleaver"]="Standardhackebeil",
+["Normal Sticky Mine"]="Normale Haftmine",
+["Chef"]="Chefkoch",
+["Clown"]="Clown",
+["Commander"]="Kommandant",
+["Engineer"]="Ingenieur",
+["Ninja"]="Ninja",
+["Physicist"]="Physiker",
+["Pyro"]="Pyromane",
+["Saint"]="Sankt",
+["Sniper"]="Heckenschütze",
+["Soldier"]="Soldat",
+["Trapper"]="Trapper",
+["Sprite Testing Mode"]="Sprite-Testmodus",
+["Standard Waypoint"]="Standard-Wegpunkt",
+["Level Data Saved!"]="Leveldaten gesichert!",
+["HEDGE EDITOR"]="HEDGE EDITOR",
+["(well... kind of...)"]="(naja, sozusagen …)",
+["Place Girder: Girder"]="Bauträger platzieren: Bauträger",
+["Place Rubber: Rubber"]="Gummi platzieren: Gummi",
+["Place Gear: Air Attack"]="Gear platzieren: Luftangriff",
+["Change Selection: [Up], [Down], [Left], [Right]"]="Auswahl ändern: [Hoch], [Runter], [Links], [Rechts]",
+["Toggle Help: Precise+1 (While a tool is selected)"]="Hilfe umschalten: Genaues Zielen + 1 (Während ein Werkzeug ausgewählt ist)",
+["COMMANDS: (Use while no weapon is selected)"]="BEFEHLE: (Benutzen, wenn keine Waffe gewählt ist)",
+["Save Level: Precise+4"]="Level sichern: Genaues Zielen + 4",
+["Toggle Editing Weapons and Tools: Precise+2"]="Waffen- und Werkzeugbearbeitung umschalten: Genaues Zielen + 2",
+["GIRDER PLACEMENT MODE"]="BAUTRÄGERPLATZIERUNGSMODUS",
+["Use this mode to place girders"]="Benutze diesen Modus, um Bauträger zu platzieren",
+["Place Girder: [Left Click]"]="Bauträger platzieren: [Linksklick]",
+["Change Rotation: [Left], [Right]"]="Rotieren: [Links], [Rechts]",
+["Change LandFlag: [1], [2], [3], [4]"]="LandFlag ändern: [1], [2], [3], [4]",
+["1 - Normal Girder"]="1 – Normaler Bauträger",
+["2 - Indestructible Girder"]="2 – Unzerstörbarer Bauträger",
+["3 - Icy Girder"]="3 – Eisiger Bauträger",
+["4 - Bouncy Girder"]="4 – Elastischer Bauträger",
+["Deletion Mode: [5]"]="Löschmodus: [5]",
+["Toggle Help: Precise+1"]="Hilfe umschalten: Genaues Zielen + 1",
+["RUBBER PLACEMENT MODE"]="GUMMIPLATZIERUNGSMODUS",
+["Use this mode to place rubberbands"]="Benutze diesen Modus, um Gummibalken zu platzieren",
+["Place Object: [Left Click]"]="Objekt platzieren: [Linksklick]",
+["1 - Normal Rubber"]="1 – Normales Gummi",
+["BARREL PLACEMENT MODE"]="FASSPLATZIERUNGSMODUS",
+["Use this mode to place barrels"]="Benutze diesen Modus, um Pulverfässer zu platzieren",
+["Change Health: [Left], [Right]"]="Gesundheit ändern: [Links], [Rechts]",
+["Change Placement Mode: [Up], [Down]"]="Platzierungsmodus ändern: [Hoch], [Runter]",
+["CLEAVER MINE PLACEMENT MODE"]="HACKEBEILPLATZIERUNGSMODUS",
+["Use this mode to place cleavers"]="Benutze diesen Modus, um Hackebeile zu platzieren",
+["TARGET MINE PLACEMENT MODE"]="ZIELSCHEIBENPLATZIERUNGSMODUS",
+["Use this mode to place targets"]="Benutze diesen Modus, um Zielscheiben zu platzieren",
+["WAYPOINT PLACEMENT MODE"]="WEGPUNKTPLATZIERUNGSMODUS",
+["Use this mode to waypoints"]="Benutze diesen Modus, um Wegpunkte zu platzieren",
+["Place Waypoint: [Left Click]"]="Wegpunkt platzieren: [Linksklick]",
+["MINE PLACEMENT MODE"]="MINENPLATZIERUNGSMODUS",
+["Use this mode to place mines"]="Benutze diesen Modus, um Minen zu platzieren",
+["Change Timer (in milliseconds): [Left], [Right]"]="Zeitzünder (in Millisekunden) ändern: [Links], [Rechts]",
+["STiCKY MINE PLACEMENT MODE"]="HAFTMINENPLATZIERUNGSMODUS",
+["Use this mode to place sticky mines"]="Benutze diesen Modus, um Haftminen zu platzieren",
+["AIR MINE PLACEMENT MODE"]="LUFTMINENPLATZIERUNGSMODUS",
+["Use this mode to place air mines"]="Benutze diesen Modus, um Luftminen zu platzieren",
+["Use this mode to place weapon crates"]="Benutze diesen Modus, um Waffenkisten zu platzieren",
+["Change Content: [Left], [Right]"]="Inhalt ändern: [Links], [Rechts]",
+["UTILITY CRATE PLACEMENT MODE"]="WERKZEUGKISTENPLATZIERUNGSMODUS",
+["Use this mode to place utility crates"]="Benutze diesen Modus, um Werkzeugkisten zu platzieren",
+["HEALTH CRATE PLACEMENT MODE"]="GESUNDHEITSKISTENPLATZIERUNGSMODUS",
+["Change Health Boost: [Left], [Right]"]="Gesundheitsschub ändern: [Links], [Rechts]",
+["ADVANCED REPOSITIONING MODE"]="FORTGESCHRITTENER VERLEGUNGSMODUS",
+["Use this mode to select and reposition gears"]="Benutze diesen Modus, um Gears auszuwählen und zu verlegen",
+["[Left], [Right]: Change between selection and placement mode."]="[Links], [Rechts]: Zwischen Auswahl- und Verlegungsmodus wechseln.",
+["SPRITE MODIFICATION MODE"]="SPRITE-MODIFIKATIONSMODUS",
+["Set LandFlag: [1], [2], [3], [4]"]="LandFlag setzen: [1], [2], [3], [4]",
+["1 - Normal Land"]="1 – Normales Gelände",
+["2 - Indestructible Land"]="2 – Unzerstörbares Gelände",
+["3 - Icy Land"]="3 – Eisiges Gelände",
+["4 - Bouncy Land"]="4 – Elastisches Gelände",
+["SPRITE PLACEMENT MODE"]="SPRITE-PLATZIERUNGSMODUS",
+["Use this mode to place custom sprites."]="Benutze diesen Modus, um benutzerdefinierte Sprites zu platzieren.",
+["[Left], [Right]: Change sprite selection"]="[Links], [Rechts]: Sprite-Auswahl ändern",
+["TAGGING MODE"]="MARKIERUNGSMODUS",
+["Use this mode to tag gears for win/lose conditions."]="Benutze diesen Modus, um Gears für Sieg-/Niederlagebedingungen zu markieren.",
+["Tag Gear: [Left Click]"]="Gear markieren: [Linksklick]",
+["[Left], [Right]: Change between tagging modes."]="[Links], [Rechts]: Zwischen Markierungsmodi wechseln.",
+["HOG IDENTITY MODE"]="IGELIDENTITÄTSMODUS",
+["Use this mode to give a hog a preset identity and weapons."]="Benutze diesen Modus, um einem Igel ein voreingestelle Idendität sowie Waffen zu geben.",
+["Set Identity: [Left Click]"]="Identität setzen: [Linksklick]",
+["[Left], [Right]: Change between identities."]="[Links], [Rechts]: Identitäten wechseln.",
+["TEAM IDENTITY MODE"]="TEAMIDENTITÄTSMODUS",
+["Use this mode to give an entire team themed hats and names."]="Benutze diesen Modus, um einem Team einen Satz Hüte und Namen zu geben.",
+["HEALTH MODIFICATION MODE"]="GESUNDHEITSMODIFIKATIONSMODUS",
+["Use this mode to set the health of hogs."]="Benutze diesen Modus, um die Igelgesundheit einzustellen.",
+["Set Health: [Left Click]"]="Gesundheit setzen: [Linksklick]",
+["[Left], [Right]: Change health value."]="[Links], [Rechts]: Gesundheitswert auswählen",
+["Warning: Deletition Mode Active"]="Achtung: Löschmodus aktiv",
+["The editor weapons and tools have been removed!"]="Die Editorwaffen und -werkzeuge wurden entfernt!",
+["The editor weapons and tools have been added!"]="Die Editorwaffen und -werkzeuge wurden hinzugefügt!",
+["Bouncy Land"]="Sprunghaftes Gelände",
+["Normal Land"]="Normales Gelände",
+["Indestructible Land"]="Unzerstörbares Gelände",
+["Icy Land"]="Eisiges Gelände",
+["HIGHLANDER"]="HOCHLÄNDER",
+["Not all hogs are born equal."]="Nicht alle Igel werden gleich geboren.",
+["Eliminate enemy hogs and take their weapons."]="Vernichte alle gegnerischen Igel und nimm ihre Waffen.",
+["Per-Hog Ammo"]="Munition pro Igel",
+["Weapons reset."]="Waffen werden zurückgesetzt.",
+["Unlimited Attacks"]="Unbegrenzte Angriffe",
+["The first player to kill someone becomes the Mutant."]="Der erste Spieler, der einen umbringt, wird zum Mutanten.",
+["The Mutant has super-weapons and a lot of health."]="Der Mutant hat Superwaffen und eine hohe Gesundheit.",
+["The Mutant loses health quickly if he doesn't keep scoring kills."]="Der Mutant verliert schnell an Gesundheit, wenn er nicht schnell andere Igel tötet.",
+["Normal players can only score points by killing the mutant."]="Andere Spieler erhalten nur durch das Töten des Mutanten Punkte.",
+["The player with least points (or most deaths) becomes the Bottom Feeder."]="Der Spieler mit den wenigsten Punkten (oder den meisten Toden) wird zum Versager.",
+["The Bottom Feeder can score points by killing anyone."]="Der Versager erhält Punkte durch das Töten beliebiger anderer Igel.",
+["POINTS"]="PUNKTE",
+["+2 for becoming a Mutant"]="+2 für die Verwandlung zum Mutanten",
+["+1 to a Mutant for killing anyone"]="+1 für den Mutanten, der andere tötet",
+["+1 to a Bottom Feeder for killing anyone"]="+1 für den Versager, der andere tötet",
+["-1 to anyone for a suicide"]="-1 für Selbstmord",
+["Other kills don't give you points."]="Andere Abschüsse bringen keine Punkte.",
+["Mutant"]="Mutant",
+["a Hedgewars tag game"]="ein Hedgewars-Fangenspiel",
+["ONE HOG PER TEAM! KILLING EXCESS HEDGES"]="EIN IGEL PRO TEAM! ÜBERFLÜSSIGE IGEL WERDEN GETÖTET",
+["FIRST BLOOD MUTATES"]="ERSTER MÖRDER MUTIERT",
+["DOUBLE KILL"]="DOPPEL-ABSCHUSS",
+["MEGA KILL"]="MEGA-ABSCHUSS",
+["ULTRA KILL"]="ULTRA-ABSCHUSS",
+["MONSTER KILL"]="MONSTRÖSER ABSCHUSS",
+["LUDICROUS KILL"]="HAARSTRÄUBENDER ABSCHUSS",
+["HOLY SHYTE!"]="HEILIGE SCHEISSE!",
+["INSANITY"]="WAHNSINN",
+["Score"]="Punktzahl",
+["WINNER IS "]="DER SIEGER IST ",
+["-------"]="-------",
+[" HAS MUTATED"]=" MUTIERTE",
+[" HP"]=" TP",
+["Jumping is disabled"]="Sprünge sind deaktiviert!",
+["Way-Points Remaining"]="Wegpunkte verbleibend",
+["s"]="s",
+["RACER"]="WETTRENNEN",
+["TRACK COMPLETED"]="STRECKENLAUF BEENDET",
+["NEW RACE RECORD: "]="NEUER RENNREKORD: ",
+["WINNING TIME: "]="BESTZEIT: ",
+["NEW CLAN RECORD: "]="NEUER KLAN-REKORD",
+["TIME: "]="ZEIT: ",
+["s|"]="s|",
+["STATUS UPDATE"]="STATUSAKTUALISIERUNG",
+["Rounds Complete: "]="Runden gespielt: ",
+["Best Team Times: "]="Beste Team-Zeiten: ",
+["Build a track and race."]="Konstruiere eine Strecke und mach ein Wettrennen.",
+["Round Limit:"]="Rundenbegrenzung:",
+["Available points remaining: "]="Verfügbare Punkte verbleibend:",
+["Waypoint placed."]="Wegpunkt gesetzt",
+["GAME BEGUN!!!"]="SPIEL GESTARTET!!!",
+["Complete the track as fast as you can!"]="Durchlaufe die Strecke so schnell du kannst!",
+["NOT ENOUGH WAYPOINTS"]="NICHT GENUG WEGPUNKTE",
+["Place more waypoints using the 'Air Attack' weapon."]="Platziere mehr Wegpunkte durch Verwenden der »Luftangriff«-Waffe",
+["Please place the way-point in the open, within the map boundaries."]="Bitte platziere den Wegpunkt in der Luft, innerhalb der Kartengrenzen.",
+["Please place the way-point further from the waterline."]="Bitte platziere den Wegpunkt weiter weg vom Wasser.",
+["Race complexity limit reached."]="Rennkomplexitätslimit erreicht.",
+["Good to go!"]="Startklar!",
+["Each turn you get one random weapon"]="Du bekommst jede Runde eine zufällig gewählte Waffe.",
+["BOOM!"]="KABUMM!",
+["SCORE"]="PUNKTZAHL",
+["KILLS"]="ABSCHÜSSE",
+["invaders destroyed"]="Angreifer zerstört",
+["Rounds Complete"]="Runden gespielt",
+["Flamer"]="Flammenwerfer",
+["selected!"]="ausgewählt!",
+["shots remaining."]="Schüsse übrig",
+["Barrel Launcher"]="Fasswerfer",
+["Ammo Depleted!"]="Munition erschöpft!",
+["Mine Deployer"]="Minenleger",
+["Shield Depleted"]="Schild aufgebraucht!",
+["Power Remaining"]="Verbleibende Energie",
+["Shield ON:"]="Schild AN:",
+["Shield OFF:"]="Schild AUS:",
+["Pings left:"]="Verbleibende Pings:",
+["Destroy invaders to score points."]="Zerstöre die Angreifer um Punkte zu erhalten.",
+["Round Limit"]="Rundenbegrenzung",
+["Turn Time"]="Zeit pro Zug",
+["Movement: [Up], [Down], [Left], [Right]"]="Bewegung: [Hoch], [Runter], [Links], [Rechts]",
+["Fire"]="Feuer",
+["[Left Shift]"]="[Umschalt links]",
+["Toggle Shield"]="Schild ein/aus",
+["[Enter]"]="[Eingabe]",
+["Radar Ping"]="Radarsignal",
+["[Backspace]"]="[Rücktaste]",
+["Surfer! +15 points!"]="Surfer! +15 Punkte",
+["Shield Miser!"]="Schildgieriger",
+["Accuracy Bonus!"]="Präzisions-Bonus!",
+["Fierce Competition!"]="Harter Wettkampf!",
+["Time Extended!"]="Zeit verlängert!",
+["Drone Hunter!"]="Drohnenjäger",
+["Ammo"]="Munition",
+["Ammo Maniac!"]="Munitionsverrückter!",
+["Shield boosted! +30 power"]="Schild verstärkt! +30 Energie",
+["Shield is fully recharged!"]="Schild vollständig aufgeladen!",
+["Shield Seeker!"]="Schildsucher!",
+["Boss defeated!"]="Boss wurde besiegt!",
+["Boss Slayer!"]="Boss-Töter!",
+["Hit Combo!"]="Treffer-Combo!",
+["GOTCHA!"]="ERWISCHT!",
+["Sniper!"]="Scharfschütze!",
+["They Call Me Bullseye!"]="Man nennt mich »Adlerauge«!",
+["Point Blank Combo!"]="Nahschuss-Combo!",
+["Multi-shot!"]="Multischuss!",
+["Shield Master!"]="Schildmeister!",
+["Kamikaze Expert!"]="Kamikazeexperte!",
+["Depleted Kamikaze!"]="Munitionsloses Kamikaze!",
+["Timed Kamikaze!"]="Pünktliches Kamikaze!",
+["You can further customize the race by changing the scheme script paramater."]="Du kannst das Renner ferner bearbeiten, indem du den Skriptparameter im Schema änderst.",
+["THE SPECIALISTS"]="DIE SPEZIALISTEN",
+["Eliminate the enemy specialists."]="Vernichte die gegnerischen Spezialisten",
+["Game Modifiers: "]="Spiel-Modifikatoren",
+["Weapons Reset"]="Waffenzurücksetzung",
+["Switched to "]="Gewechselt zu ",
+["Prepare yourself"]="Mach dich bereit",
+["ammo extended!"]="Munition aufgestockt!",
+["Barrel Eater!"]="Fassfresser!",
+["Mine Eater!"]="Minenfresser!",
+["Tumbling Time Extended!"]="Purzelzeit verlängert!",
+["fuel extended!"]="Treibstoff aufgetankt!",
+["Eliminate the enemy hogs to win."]="Vernichte alle gegnerischen Igel, um zu gewinnen.",
+["New Mines Per Turn"]="Neue Minen jeden Zug",
+["New Barrels Per Turn"]="Neue Fässer jeden Zug",
+["Time Extension"]="Zeitverlängerung",
+["Change Weapon"]="Waffenwechsel",
+["Grab Mines/Explosives"]="Sammle Minen/Fässer",
+["Health crates extend your time."]="Erste-Hilfe-Kisten verlängern deine Zeit.",
+["Ammo is reset at the end of your turn."]="Munition wird am Ende des Spielzuges zurückgesetzt.",
+["Double Kill!"]="Doppelmord!",
+["Killing spree!"]="Blutrausch!",
+["Unstoppable!"]="Unaufhaltsam!",
+["Friendly Fire!"]="Eigenbeschuss!",
+["For improved features/stability, play 0.9.18+"]="Für bessere Features/Stabilität, spiele 0.9.18 oder später",
+["Surfer!"]="Surfer!",
+["All walls touched!"]="Alle Wände berührt!",
+["Go surf!"]="Los, surfe!",
+["Walls Left"]="Verbleibende Wände",
+["Configuration accepted."]="Konfiguration akzeptiert.",
+["You may only attack from a rope!"]="Du darfst nur von einem Seil angreifen!",
+["Spawn the crate, and attack!"]="Lass die Kiste auftauchen und greif an!",
+["Press [Enter] to accept this configuration."]="Drücke [Eingabe], um diese Konfiguration zu akzeptieren.",
+["Walls Required"]="Wände benötigt",
+["Surf Before Crate"]="Surfen Vor Kiste",
+["Attack From Rope"]="Angriff Vom Seil",
+["Super Weapons"]="Superwaffen",
+["WALL TO WALL"]="WAND-ZU-WAND",
+["a shoppa minigame"]="ein Einkaufs-Minispiel",
+["Roper"]="Seiler",
+["Shoppers"]="Käufer",
+["Use your rope to collect all crates as fast as possible."]="Benutze dein Seil, um alle Kisten so schnell wie möglich einzusammeln.",
+["Speed Shoppa"]="Rasender Kistensammler",
+["%d crate(s) remaining"]="Verbleibende Kisten: %d",
+["milliseconds"]="Millisekunden",
+["You have finished the challenge in %.3f s."]="Du hast die Herausforderung in %.3fs gemeistert.",
+["Challenge failed!"]="Herausforderung gescheitert!",
+["crate(s)"]="Kiste(n)",
+["You have collected %d out of %d crate(s)."]="Du hast %d von %d Kiste(n) eingesammelt.",
+["Trainee"]="Azubi",
+["Training Team"]="Traningsteam",
+["You have shot %d times."]="Du hast %d mal geschossen.",
+["Time’s up!"]="Die Zeit ist um!",
+["Targets left: %d"]="Verbleibende Ziele: %d",
+["You have destroyed all targets!"]="Du hast alle Ziele zerstört!",
+["Congratulations! You have destroyed all targets within the time."]="Gratulation! Du hast alle Ziele innerhalb der verfügbaren Zeit ausgeschaltet.",
+["You have finished the target practice!"]="Du hast die Zielübung abgeschlossen!",
+["Your accuracy was %.1f%% (+%d points)."]="Deine Treffgenauigkeit betrug %.1f%% (+%d Punkte).",
+["You had %.1fs remaining on the clock (+%d points)."]="Du hattest eine verbleibende Zeit von %.1fs (+%d Punkte)."
+}
--- a/share/hedgewars/Data/Locale/de.txt	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/de.txt	Mon Nov 09 18:37:57 2015 +0100
@@ -29,7 +29,7 @@
 00:26=Wassermelonenbombe
 00:27=Höllische Handgranate
 00:28=Bohrkopfrakete
-00:29=Ballpistole
+00:29=Ballkanone
 00:30=Napalm-Luftangriff
 00:31=Funkflugzeug
 00:32=Schwerkraft verringern
@@ -41,7 +41,7 @@
 00:38=Scharfschützengewehr
 00:39=Fliegende Untertasse
 00:40=Molotowcocktail
-00:41=Birdy
+00:41=Vogli
 00:42=Tragbares Portalgerät
 00:43=Piano-Angriff
 00:44=Alter Limburger
@@ -59,6 +59,7 @@
 00:55=Eiskanone
 00:56=Hackebeil
 00:57=Gummi
+00:58=Luftmine
 
 01:00=Auf in die Schlacht!
 01:01=Unentschieden
@@ -537,19 +538,19 @@
 03:08=Annäherungsmine
 03:09=Pistole (mehrere Schüsse)
 03:10=BUMM!
-03:11=Bonk!
+03:11=Voll auf die Zwölf!
 03:12=Kampfkunst
 03:13=NICHT IN VERWENDUNG
 03:14=Fortbewegungsmittel
 03:15=Luftschlag
 03:16=Luftschlag
-03:17=Grabwerkzeug
+03:17=Grabewerkzeug
 03:18=Werkzeug
 03:19=Fortbewegungsmittel
 03:20=Aktion
 03:21=Ballistische Waffe
 03:22=Nenn mich Indiana!
-03:23=Kampfkunst
+03:23=Tödliche Kampfkunst
 03:24=Der Kuchen ist keine Lüge!
 03:25=Verkleidung
 03:26=Saftige Granate
@@ -567,15 +568,15 @@
 03:38=Gewehr (mehrere Schüsse)
 03:39=Fortbewegungsmittel
 03:40=Brandbombe
-03:41=Riesiger Squawks-Fan
+03:41=Mach die Flatter!
 03:42=Portalöffner
 ; the misspelled "Beethoven" is intentional (-> to beat)
 03:43=Spiele Beathovens tödliche Sonate!
 03:44=Ziemlich alt und stinkig
 03:45=Die Macht der Wissenschaft
 03:46=Heiß, heiß, heiß!
-03:47=Mach es weg!
-03:48=Stop! Hammer time!
+03:47=Klebt (fast) überall
+03:48=In-den-Boden-Stampfer
 03:49=Tut, was man vermutet
 03:50=Maulwurfsfreund
 03:51=Am Boden gefunden
@@ -586,66 +587,68 @@
 03:55=Cooler wird’s nicht
 03:56=Bitte ge- oder missbrauchen
 03:57=Werkzeug
+03:58=Schwebende Annäherungsmine
 
 ; Weapon Descriptions (use | as line breaks)
-04:00=Greife deine Feinde mit einfachen Granaten an.|Der Zeitzünder steuert den Explosionszeitpunkt.|1–5: Zeitzünder einstellen|Angriff: Halten, um mit mehr Kraft zu werfen
-04:01=Greife deine Feinde mit Splittergranaten an.|Der Zeitzünder wird die Granate in mehrere|kleine Bomben zerspringen lassen.|1–5: Zeitzünder einstellen|Angriff: Halten, um mit mehr Kraft zu werfen
+04:00=Greife deine Feinde mit einfachen Granaten an.|Der Zeitzünder steuert den Explosionszeitpunkt.|1–5: Zeitzünder einstellen|Genaues Zielen + 1-5: Sprungkraft einstellen|Angriff: Halten, um mit mehr Kraft zu werfen
+04:01=Greife deine Feinde mit Splittergranaten an.|Der Zeitzünder wird die Granate in mehrere|kleine Bomben zerspringen lassen.|1–5: Zeitzünder einstellen|Genaues Zielen + 1-5: Sprungkraft einstellen|Angriff: Halten, um mit mehr Kraft zu werfen
 04:02=Greife deine Feinde mit einem ballistischen|Projektil an, das vom Wind beeinflusst wird.|Angriff: Halten, um mit mehr Kraft zu feuern
 04:03=Starte eine explosive Biene, die auf ein gewähltes|Ziel zusteuern wird. Feuere nicht mit voller Kraft,|um die Zielgenauigkeit zu verbessern.|Cursor: Ziel wählen|Angriff: Halten, um mit mehr Kraft zu feuern
 04:04=Greife deine Feinde mit einer Schrotflinte und|zwei Schüssen an. Durch die Streuung musst du|nicht genau zielen, um trotzdem zu treffen.|Angriff: Feuern (mehrfach)
-04:05=Ab in den Untergrund! Benutze den Presslufthammer,|um einen Schacht nach unten zu graben und so|andere Gebiete zu erreichen.|Angriff: Presslufthammer ein- oder ausschalten
+04:05=Ab in den Untergrund! Benutze den Presslufthammer,|um einen Schacht nach unten zu graben und so|andere Gebiete zu erreichen.|Angriff: Presslufthammer ein- oder ausschalten|Links/Rechts: Schräg bohren
 04:06=Gelangweilt? Keine Optionen? Munition sparen?|Kein Problem! Passe einfach diese Runde, Feigling!|Angriff: Runde ohne Angriff aussetzen
-04:07=Überbrücke große Distanzen mit gezielt abgefeuerten|Seilschüssen. Benutze deine Bewegungsenergie, um|andere Igel zu schubsen oder wirf vom Seil aus Granaten|und ähnliche Waffen.|Angriff: Seil abfeuern oder lösen|Weitsprung: Waffe benutzen
-04:08=Halte dir deine Feinde fern oder blockiere sie,|indem du ihnen Minen vor die Beine wirfst.|Sei aber schnell genug, damit du sie nicht noch|selbst auslöst!|Angriff: Mine legen
+04:07=Überbrücke große Distanzen mit gezielt abgefeuerten|Seilschüssen. Benutze deine Bewegungsenergie, um|andere Igel zu schubsen oder wirf vom Seil aus Granaten|und ähnliche Waffen.|Angriff: Seil abfeuern oder lösen|Hoch/Runter: Seil verkürzen/verlängern|Weitsprung: Waffe benutzen
+04:08=Halte dir deine Feinde fern oder blockiere sie,|indem du ihnen Minen vor die Beine wirfst.|Sei aber schnell genug, damit du sie nicht noch|selbst auslöst!|Angriff: Mine legen|Genaues Zielen + 1-5: Sprungkraft einstellen
 04:09=Nicht so ganz zielsicher? Versuche es mit der|Desert Eagle, denn diese bietet dir vier Schuss.|Angriff: Feuern (mehrfach)
 04:10=Rohe Gewalt ist immer eine Lösung. Lege einfach|diesen klassischen Sprengsatz neben deinen Feinden|ab und mach dich aus dem Staub.|Angriff: Dynamitstange legen
 04:11=Beseitige Feinde, indem du diese mit dem|Baseballschläger einfach von der Karte fegst.|Oder wie wäre es, wenn du deinen Freunden ein|paar Minen vor die Beine schlägst?|Angriff: Alles vor dem Igel schlagen
-04:12=Rücke mit deinen Feinden näher zusammen und|entfessle die Kraft dieser so gut wie tödlichen|Kampftechnik.|Angriff: Feuerfaust einsetzen
+04:12=Rücke mit deinen Feinden näher zusammen und|entfessle die Kraft dieser so gut wie tödlichen|Kampftechnik.|Angriff: Alles vor dem Igel schlagen
 04:13=UNUSED
-04:14=Höhenangst? Greif besser zum Fallschirm.|Er wird sich von alleine entfalten, wenn du|zu lange oder zu tief fällst, und so deinem|Igel den Hals retten.|Angriff: Fallschirm öffnen|Weitsprung: Waffe benutzen
+04:14=Höhenangst? Greif besser zum Fallschirm.|Er wird sich von alleine entfalten, wenn du|zu lange oder zu tief fällst, und so deinem|Igel den Hals retten.|Angriff: Fallschirm manuell öffnen oder entfernen|Links/Rechts/Hoch/Runter: Flug steuern|Weitsprung: Waffe benutzen
 04:15=Rufe ein Flugzeug, um deine Feinde mit einem|Bombenteppich einzudecken.|Links/Rechts: Angriffsrichtung wählen|Cursor: Zielgebiet wählen und Angriff starten
 04:16=Rufe ein Flugzeug, um mehrere Minen im|Zielgebiet abwerfen zu lassen.|Links/Rechts: Angriffsrichtung wählen|Cursor: Zielgebiet wählen und Angriff starten
-04:17=Unterschlupf gefällig? Benutze den Schweißbrenner,|um einen Tunnel in festen Untergrund zu graben|oder einem Feind eine heiße Bekanntschaft machen|zu lassen.|Angriff: Brenner ein- oder ausschalten
+04:17=Unterschlupf gefällig? Benutze den Schweißbrenner,|um einen Tunnel in festen Untergrund zu graben|oder einem Feind eine heiße Bekanntschaft machen|zu lassen.|Angriff: Brenner ein- oder ausschalten|Hoch/Runter: Graberichtung ändern
 04:18=Brauchst du Schutz oder eine Möglichkeit, einen|Abgrund zu überwinden? Platziere einige Bauträger,|um dir zu helfen.|Links/Rechts: Bauform und Ausrichtung wählen|Cursor: Bauträger platzieren
-04:19=Im richtigen Moment kann sich eine Teleportation|mächtiger als jede Waffe erweisen, da sich so ein|Igel gezielt einer gefährlichen Situation binnen|Sekunden entziehen kann.|Cursor: Zielposition wählen
-04:20=Erlaubt es dir, den aktiven Igel zu wechseln|und mit einem anderen Igel fortzufahren.|Angriff: Wechsel aktivieren
-04:21=Feuere ein granatenartiges Projektil in die|Richtung deines Gegners. Es wird beim Aufschlag|mehrere kleine Bomben freisetzen.|Angriff: Mit voller Kraft feuern
+04:19=Im richtigen Moment kann sich eine Teleportation|mächtiger als jede Waffe erweisen, da sich so ein|Igel gezielt einer gefährlichen Situation binnen|Sekunden entziehen kann.|Cursor: Zielposition wählen|Links/Rechts: Blickrichtung wählen
+04:20=Ermöglicht es dir, den aktiven Igel zu wechseln|und mit einem anderen Igel fortzufahren.|Angriff: Igelwechsel aktivieren|Wechseln: Nächten Igel wählen|Genaues Zielen + Wechseln: Vorherigen Igel wählen
+04:21=Feuere ein Projektil, welches mehrere Splitter|beim Einschlag freisetzen wird. Sie werden|zurückgeschleudert und sind gefährlicher|als das Hauptprojektil.|Angriff: Mit voller Kraft feuern
 04:22=Nicht nur etwas für Indiana Jones! Die Peitsche|eignet sich besonders gut, um ungezogene Igel|eine Klippe hinunter zu treiben.|Angriff: Alles vor dem Igel schlagen
 04:23=Wenn man nichts mehr zu verlieren hat …|Opfere deinen Igel, indem du ihn in eine|festgelegte Richtung losstürmen lässt.|Er wird alles auf dem Weg treffen und am|Ende selbst explodieren.|Angriff: Tödlichen Angriff starten
 04:24=Alles Gute! Schick diesen Kuchen auf den Weg,|damit er deinen lieben Feinden eine explosive|Party beschert. Die Torte überwindet fast jedes|Terrain, verliert dabei aber an Laufzeit.|Angriff: Torte losschicken / explodieren lassen
 04:25=Benutze diese Verkleidung, um einen Feind blind|vor Liebe in deine Richtung (und damit in einen|Abgrund oder ähnliches) springen zu lassen.|Angriff: Verkleiden und verführen
-04:26=Wirf diese saftige Wassermelone auf deine Feinde.|Sobald die Zeit abgelaufen ist, wird sie in|einzelne und explosive Stücke zerspringen.|Angriff: Halten, um mit mehr Kraft zu werfen
+04:26=Wirf diese saftige (und sprunghafte) Wassermelone auf|deine Feinde. Sobald die Zeit abgelaufen ist, wird|sie in einzelne und explosive Stücke zerspringen.|1-5: Zeitzünder einstellen|Angriff: Halten, um mit mehr Kraft zu werfen
 04:27=Entfessle das Höllenfeuer und umgebe deine|Widersacher damit, indem du diesen teuflischen|Sprengsatz gegen sie einsetzt. Komm ihm aber|nicht zu nahe, denn die Flammen könnten|länger bestehen bleiben.|Angriff: Halten, um mit mehr Kraft zu werfen
 04:28=Kurz nach dem Start wird diese Rakete beginnen,|sich durch soliden Grund zu graben. Sobald sie|wieder austritt oder der Zeitzünder abläuft,|wird sie explodieren.|Angriff: Halten, um mit mehr Kraft zu feuern
-04:29=Das ist nichts für kleine Kinder! Die Ballpistole|feuert Tonnen kleiner farbiger Bälle, die mit|Sprengstoff gefüllt sind.|Angriff: Mit voller Kraft feuern|Hoch/Runter: Im Feuern zielen
+04:29=Das ist nichts für kleine Kinder! Die Ballkanone|feuert Tonnen kleiner farbiger Bälle, die mit|Sprengstoff gefüllt sind.|Angriff: Losballern|Hoch/Runter: Weiterzielen
 04:30=Rufe ein Flugzeug, um ein Areal gezielt mit|tödlichem Napalm einzudecken. Gut gezielt|lassen sich so große Teile der Karte auslöschen.|Links/Rechts: Angriffsrichtung wählen|Cursor: Zielgebiet wählen und Angriff starten
-04:31=Das Funkflugzeug kann Kisten einsammeln und weit|entfernte Igel angreifen. Steuere es direkt in|ein Opfer oder wirf erst einige Bomben ab.|Angriff: Flugzeug starten und Bomben abwerfen|Weitsprung: »Ritt der Walküren«|Hoch/Runter: Flugzeug lenken
+04:31=Das Funkflugzeug kann Kisten einsammeln und weit|entfernte Igel angreifen. Steuere es direkt in|ein Opfer oder wirf erst einige Bomben ab.|Angriff: Flugzeug starten und Bomben abwerfen|Weitsprung: »Ritt der Walküren«|Links/Rechts: Flugzeug lenken
 04:32=Niedrige Schwerkraft ist effektiver als jede|Diät! Springe höher und weiter oder lass|einfach deine Gegner noch weiter fliegen.|Angriff: Aktivieren
-04:33=Manchmal muss es eben doch ein bisschen|mehr sein …|Angriff: Aktivieren
-04:34=Can’t touch me!|Angriff: Aktivieren
-04:35=Manchmal vergeht die Zeit einfach zu schnell.|Schnapp dir einige zusätzliche Sekunden, um|deinen Angriff abzuschließen.|Angriff: Aktivieren
+04:33=Manchmal muss es eben doch ein bisschen|mehr sein … Erhöhe den verursachten Schaden|um 50% für den Rest des Zuges.|Angriff: Aktivieren
+04:34=Dies macht dich immun gegenüber Schaden für den Rest|des Zuges. Aber sei nicht zu übermütig, denn du könntest|immer noch ertrinken.|Angriff: Aktivieren
+04:35=Manchmal vergeht die Zeit einfach zu schnell.|Schnapp dir 30 zusätzliche Sekunden, um|deinen Angriff abzuschließen.|Angriff: Aktivieren
 04:36=Nun, manchmal trifft man einfach nicht. In solchen|Fällen kann die moderne Technik natürlich nachhelfen.|Angriff: Aktivieren
-04:37=Fürchte nicht das Tageslicht! Die Wirkung hält|nur eine Runde an, aber sie erlaubt es deinem|Igel, den Schaden, den er direkt verursacht|als Leben zu absorbieren.|Angriff: Aktivieren
-04:38=Das Scharfschützengewehr kann die vernichtendste|Waffe im gesamten Arsenal sein, allerdings ist|es auf kurze Distanz sehr ineffektiv. Der|verursachte Schaden nimmt mit der Distanz zu.|Angriff: Feuern (mehrfach)
-04:39=Fliege mit der fliegenden Untertasse in andere|Teile der Karte. Sie ist schwer zu beherrschen,|bringt dich aber an so gut wie jeden Ort.|Angriff: Aktivieren|Hoch/Links/Rechts: Beschleunigen|Weitsprung: Waffe benutzen
+04:37=Fürchte nicht das Tageslicht! Die Wirkung hält|nur eine Runde an, aber sie erlaubt es deinem|Igel, 80% des Schadens, den andere Igel während|seines Zuges erleiden, als Leben zu absorbieren.|Angriff: Aktivieren
+04:38=Das Scharfschützengewehr kann die vernichtendste|Waffe im gesamten Arsenal sein, allerdings ist|sie auf kurze Distanz sehr ineffektiv. Der|verursachte Schaden nimmt mit der Distanz zu.|Das Zielen ist schwierig, und du musst deine|Stellung halten, sobald die Waffe aktiviert wurde.|Angriff: Zielvisier aktivieren, dann feuern (zwei mal)|Links/Rechts: Umdrehen (zwischen Schüssen)
+04:39=Fliege mit der fliegenden Untertasse in andere|Teile der Karte. Sie ist schwer zu beherrschen,|bringt dich aber an so gut wie jeden Ort.|Angriff: Aktivieren/Deaktivieren|Hoch/Links/Rechts: Einmalig in eine Richtung beschleunigen|Weitsprung: Waffe fallen lassen|Genaues Zielen + Weitsprung: Waffe in Zielrichtung feuern|Genaues Zielen + Hoch/Runter: Zielen
 04:40=Entzünde einen Teil der Landschaft oder auch etwas|mehr mit dieser (schon bald) brennenden Flüssigkeit.|Angriff: Halten, um mit mehr Kraft zu werfen
-04:41=Der Beweis, dass die Natur sogar die fliegende|Untertasse übertreffen könnte. Birdy kann|deinen Igel herumtragen und zudem Eier auf|deine Feinde fallen lassen.|Angriff: Aktivieren und Eier fallen lassen|Hoch/Links/Rechts: In eine Richtung flattern
-04:42=Das tragbare Portalgerät ermöglicht es dir,|dich, deine Feinde oder Waffen direkt zwischen|zwei Punkten auf der Karte zu|teleportieren.|Benutze es weise und deine Kampagne wird ein …|RIESENERFOLG!|Angriff: Öffnet ein Portal|Wechsel: Wechsle die Portalfarbe
-04:43=Lass dein musikalisches Debüt einschlagen wie eine Bombe!|Lass ein Piano vom Himmel fallen, aber pass auf …|jemand muss es spielen und das könnte dich |dein Leben kosten!|Cursor: Zielgebiet wählen und Angriff starten|F1–F9: Das Piano spielen
-04:44=Das ist nicht nur Käse, das ist biologische Kriegsführung!|Er wird nicht viel Schaden verursachen, sobald der Zünder|abgelaufen ist, aber er wird garantiert jeden in der Nähe|vergiften!|1–5: Zeitzünder einstellen|Angriff: Halten, um mit mehr Kraft zu werfen
-04:45=All die Physikstunden haben sich endlich|bezahlt gemacht: Entfessle eine zerstörerische Sinuswelle|gegen deine Feinde.|Pass auf, die Waffe erzeugt einen ordentlichen Rückstoß.|(Diese Waffe ist unvollständig)|Angriff: Sinuswellen erzeugen
-04:46=Brutzle deine Feinde mit fließenden Flammen.|Herzerwärmend!|Angriff: Aktivieren|Hoch/Runter: Im Feuern zielen|Links/Rechts: Durchfluss ändern
-04:47=Verdopple den Spaß mit zwei spitzigen, schicken, klebrigen Minen.|Löse eine Kettenreaktion aus oder beschütze dich (oder beides).|Angriff: Halten, um mit mehr Kraft zu feuern (zweimal)
-04:48=Warum sind Maulwürfe verhasst? Einen|Igel in den Boden zu stampfen kann sehr lustig sein!|Ein guter Treffer des Hammers wird ein Drittel|der Lebenspunkte eines Igels abziehen und ihn|im Boden versenken.|Angriff: Aktivieren
-04:49=Hol deine Freunde zurück!|Aber pass auf, dass du keine Feinde beschwörst.|Angriff: Gedrückt halten, um Igel langsam wiederauferstehen zu lassen.|Hoch: Beschleunige Totenbeschwörung
-04:50=Verstecken sich Feinde im Untergrund?|Grabe sie aus mit dem Bohr-Luftangriff!|Der Zeitzünder bestimmt, wie tief dieser graben wird.
-04:51=Wirf mit Dreck um dich!|Schubst Igel weg.
+04:41=Der Beweis, dass die Natur sogar die fliegende|Untertasse übertreffen könnte. Vogli kann|deinen Igel herumtragen und zudem faule Eier|auf deine Feinde fallen lassen, um sie zu vergiften.|Angriff: Aktivieren und Eier fallen lassen|Hoch/Links/Rechts: In eine Richtung flattern
+04:42=Das tragbare Portalgerät ermöglicht es dir,|dich, deine Feinde oder Waffen direkt zwischen|zwei Punkten auf der Karte zu teleportieren.|Benutze es weise und deine Kampagne wird ein …|RIESENERFOLG!|Haftungsausschluss. Funktioniert nicht auf Gummi.|Angriff: Öffnet ein Portal|Wechseln: Wechselt die Portalfarbe
+04:43=Lass dein musikalisches Debüt einschlagen wie eine Bombe!|Lass ein mächtiges Piano vom Himmel fallen, das alles|im Weg zerstampfen wird, aber beachte:|Dein Igel muss sein Leben geben, um das Piano zu spielen.|Cursor: Zielgebiet wählen und Angriff starten|F1–F9: Das Piano spielen
+04:44=Das ist nicht nur Käse, das ist biologische Kriegsführung!|Er wird nicht viel Schaden verursachen, sobald der Zünder|abgelaufen ist, aber er wird garantiert jeden in der Nähe|vergiften!|1–5: Zeitzünder einstellen|Genaues Zielen + 1-5: Sprungkraft einstellen|Angriff: Halten, um mit mehr Kraft zu werfen
+04:45=All die Physikstunden haben sich endlich bezahlt gemacht!|Entfessle eine zerstörerische Sinuswelle, die sich durch|das Gelände (und deine Feinde) brennen wird.|Pass auf, die Waffe erzeugt einen ordentlichen Rückstoß.|Angriff: Feuern
+04:46=Brutzle deine Feinde mit fließenden Flammen.|Herzerwärmend!|Angriff: Aktivieren|Hoch/Runter: Beim Feuern zielen|Links/Rechts: Durchfluss ändern
+04:47=Verdopple den Spaß mit zwei spitzigen, schicken, klebrigen Minen.|Löse eine Kettenreaktion aus oder beschütze dich (oder beides).|Angriff: Halten, um mit mehr Kraft zu feuern (zwei mal)
+04:48=Warum sind Maulwürfe verhasst? Igel, Minen|oder Fässer in den Boden zu stampfen, kann|auch sehr lustig sein! Ein guter Treffer des Hammers wird|ein Drittel (mit Zusatzschaden sogar die Hälfte) der|Lebenspunkte eines Igels abziehen und ihn im Boden|versenken.|Angriff: Zuschlagen
+04:49=Opfere deine Gesundheit, um deine Freunde zurückzuholen!|Aber pass auf, dass du keine Feinde beschwörst.|Angriff: Gedrückt halten, um Igel langsam wiederauferstehen zu lassen.|Hoch: Totenbeschwörung beschleunigen
+04:50=Verstecken sich Feinde im Untergrund?|Grabe sie aus mit dem Bohr-Luftangriff!|Der Zeitzünder bestimmt, wie tief dieser graben wird.|Links/Rechts: Angriffsrichtung wählen|1-5: Zeitzünder einstellen|Cursor: Zielgebiet wählen und Angriff starten
+04:51=Wirf mit Dreck um dich! Der Schlammball|schubst Igel und andere Dinge weg,|aber richtet keinen Schaden an.|Angriff: Halten, um mit mehr Kraft zu werfen
 04:52=NICHT IN VERWENDUNG
-04:53=Unternimm eine Reise durch Zeit und Raum,|während du deine Kameraden alleine am Schlachtfeld zurücklässt.|Sei darauf vorbereitet jederzeit wieder zurückzukommen,|oder auf Sudden Death wenn sie alle besiegt wurden.|Haftungsausschluss: Nicht funktionstüchtig, wenn in Sudden Death,|wenn du alleine bist – oder der König.
-04:54=Versprühe einen Strahl klebriger Flocken.|Baue Brücken, begrabe Gegner, versiegle Tunnel.|Pass auf, dass du selbst nichts abbekommst!
-04:55=Hol die Eiszeit zurück! Friere Igel ein, mach den Boden rutschig oder|rette dich selbst vor dem Ertrinken,|indem du das Wasser einfrierst.|Angriff: Schießen
+04:53=Unternimm eine Reise durch Zeit und Raum,|während du deine Kameraden alleine am Schlachtfeld zurücklässt.|Sei darauf vorbereitet, jederzeit wieder zurückzukommen,|oder auf Sudden Death, oder wenn sie alle besiegt wurden.|Haftungsausschluss. Nicht funktionstüchtig, wenn in Sudden Death,|wenn du alleine bist – oder der König.|Angriff: Aktivieren
+04:54=Versprühe einen Strahl klebriger Flocken.|Baue Brücken, begrabe Gegner, versiegle Tunnel.|Pass auf, dass du selbst nichts abbekommst!|Angriff: Aktivieren|Hoch/Runter: Beim Feuern zielen|Links/Rechts: Schussweite einstellen
+04:55=Hol die Eiszeit zurück! Friere Igel ein,|mach den Boden rutschig oder|rette dich selbst vor dem Ertrinken,|indem du das Wasser einfrierst.|Angriff: Aktivieren/Deaktivieren|Hoch/Runter: Beim Feuern zielen
 04:56=Du kannst zwei Hackebeile auf deinen Feind schleudern,|Passagen und Tunnel blockieren, und sie sogar zum Klettern benutzen!|Sei vorsichtig! Es ist gefährlich, mit Messern zu spielen.|Angriff: Gedrückt halten, um mit mehr Schwung zu werfen (zwei mal)
 04:57=Bau einen SEHR elastischen Balken aus Gummi,|von dem Igel und andere Sachen abprallen,|ohne Fallschaden zu nehmen.|Links/Rechts: Ausrichtung des Gummis wählen|Cursor: Gummi platzieren
+04:58=Diese Annäherungsmine wird frei in der Luft schweben und|verfolgt törichte Igel, die dumm genug sind, ihr zu nahe zu|kommen. Allerdings ist ihre Explosion schwächer als|die der Landmine.|Angriff: Halten, um mit mehr Kraft zu werfen
 
 ; Game goal strings
 05:00=Spielmodifikationen
@@ -653,18 +656,18 @@
 05:02=Festungen: Verteidige deine Festung; vertreibe deine Feinde!
 05:03=Niedrige Schwerkraft: Pass auf, wo du hintrittst
 05:04=Unverwundbarkeit: Igel sind (so gut wie) unkaputtbar
-05:05=Vampirismus: Igel heilen sich um den von ihnen verursachten Schaden
+05:05=Vampirismus: Igel heilen sich um 80% von dem von ihnen verursachten Schaden
 05:06=Karma: Igel leiden an dem von ihnen verursachten Schaden
-05:07=Schützt den König: Beschütze ihn um jeden Preis!|König platzieren: Wähle einen sicheren Startpunkt für deinen König
+05:07=Schützt den König: Lass deinen König nicht sterben!|König platzieren: Wähle einen sicheren Startpunkt für deinen König
 05:08=Igel platzieren: Wähle vor dem Spielstart die Positionen deiner Igel
 05:09=Artillerie: Deine Igel können nicht laufen
-05:10=Unzerstörbares Terrain: Explosionen zerstören den Boden nicht
+05:10=Unzerstörbares Terrain: Die meisten Waffen zerstören das Gelände nicht
 05:11=Gemeinsames Arsenal: Alle Teams gleicher Farbe teilen sich ihr Arsenal
 05:12=Minenzünder: Minen explodieren nach %1 Sekunde(n)
 05:13=Minenzünder: Minen explodieren sofort
-05:14=Minenzünder: Minen explodieren nach 0–3 Sekunden
+05:14=Minenzünder: Minen explodieren nach 0–5 Sekunden
 05:15=Prozentualer Schaden: Alle Waffen verursachen %1 % Schaden
-05:16=Lebenspunkte aller Igel werden am Ende jeder Runde zurückgesetzt
+05:16=Alle Igel werden am Ende der Zuges bis zum Anfangswert geheilt
 05:17=Computergesteuerte Igel erscheinen nach dem Tod wieder
 05:18=Unbegrenzte Attacken
 05:19=Waffen werden am Ende jedes Zuges zurückgesetzt
--- a/share/hedgewars/Data/Locale/en.txt	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/en.txt	Mon Nov 09 18:37:57 2015 +0100
@@ -1,11 +1,11 @@
 ; English locale
 
 00:00=Grenade
-00:01=ClusterBomb
+00:01=Cluster Bomb
 00:02=Bazooka
 00:03=Homing Bee
 00:04=Shotgun
-00:05=PickHammer
+00:05=Pick Hammer
 00:06=Skip
 00:07=Rope
 00:08=Mine
@@ -53,7 +53,7 @@
 00:50=Drill Strike
 00:51=Mudball
 00:52=No weapon selected
-00:53=TimeBox
+00:53=Time Box
 ; 00:54=Structure
 00:54=Land Spray
 00:55=Freezer
@@ -70,7 +70,7 @@
 01:06=Sudden Death!
 01:07=%1 remaining
 01:08=Fuel
-01:09=Synchronizing...
+01:09=Synchronizing ...
 01:10=Using this utility won't end your turn!
 01:11=This weapon or utility is not yet available!
 01:12=Last round till Sudden Death!
@@ -86,6 +86,7 @@
 01:22=AFK mode
 01:23=Auto Camera Off
 01:24=Auto Camera On
+01:25=Press the target button to mark the target
 
 ; Event messages
 ; Hog (%1) died
@@ -103,7 +104,6 @@
 02:00=%1 has timed out!
 02:00=%1 says peace out!
 02:00=%1 will be fondly remembered!
-02:00=%1 has an aneurysm!
 02:00=%1 leaves behind a wife and child
 02:00=%1 has launched his last bazooka
 02:00=%1 has tossed his last grenade
@@ -118,8 +118,8 @@
 02:00=%1 has gone to play a better game
 02:00=%1 has ragequit life
 02:00=%1 fails
-02:00=Poor poor %1...
-02:00=%1 prefers wormux
+02:00=Poor, poor %1 ...
+02:00=%1 prefers WarMUX
 02:00=%1 has been blocking shots with his face
 02:00=%1 is a hero amongst me...err...hogs
 02:00=%1 finds his place in Valhalla
@@ -206,7 +206,7 @@
 02:02=Let's go!
 02:02=Let's rock!
 02:02=Let's jam!
-02:02=It's beginning...
+02:02=It's beginning ...
 02:02=This is the start of something big
 02:02=Welcome to Hedgewars
 02:02=Welcome to the front lines
@@ -262,7 +262,7 @@
 02:05=Medic!
 02:05=First aid from the skies!
 02:05=A health pack for you
-02:05=Good health... in box form!
+02:05=Good health ... in box form!
 02:05=The doctor calls
 02:05=Fresh band-aids!
 02:05=This will make you feel better
@@ -271,7 +271,7 @@
 02:05=Grab it
 02:05=A healthy snack
 02:05=A remedy to pain
-02:05=Correct Dosage: as many as you can find!
+02:05=Correct dosage: as many as you can find!
 02:05=Urgent delivery
 02:05=Supplies!
 
@@ -302,7 +302,7 @@
 
 ; New utility crate
 02:07=Tooltime!
-02:07=This could come in handy...
+02:07=This could come in handy ...
 02:07=Utilities!
 02:07=Utilise this box
 02:07=Watch out below
@@ -314,7 +314,7 @@
 02:07=You might need this
 
 ; Hog (%1) skips his turn
-02:08=%1 is sooo boring...
+02:08=%1 is sooo boring ...
 02:08=%1 couldn't be bothered
 02:08=%1 is one lazy hog
 02:08=%1 is thoughtless
@@ -399,56 +399,56 @@
 02:11=%1 has to go
 
 ; Weapon Categories
-03:00=Timed Grenade
-03:01=Timed Grenade
-03:02=Ballistic Weapon
-03:03=Guided Weapon
+03:00=Timed grenade
+03:01=Timed grenade
+03:02=Ballistic weapon
+03:03=Guided weapon
 03:04=Gun (multiple shots)
-03:05=Digging Tool
+03:05=Digging tool
 03:06=Action
-03:07=Transport Utility
-03:08=Proximity Bomb
+03:07=Transport utility
+03:08=Proximity bomb
 03:09=Gun (multiple shots)
 03:10=BOOM!
 03:11=Bonk!
-03:12=Martial Arts
+03:12=Martial arts
 03:13=UNUSED
-03:14=Transport Utility
-03:15=Airborne Attack
-03:16=Airborne Attack
-03:17=Digging Tool
+03:14=Transport utility
+03:15=Airborne attack
+03:16=Airborne attack
+03:17=Digging tool
 03:18=Utility
-03:19=Transport Utility
+03:19=Transport utility
 03:20=Action
-03:21=Ballistic Weapon
+03:21=Ballistic weapon
 03:22=Call me Indiana!
 03:23=(Really) Martial Arts
 03:24=The cake is NOT a lie!
-03:25=Costume Kit
-03:26=Juicy Grenade
-03:27=Fiery Grenade
-03:28=Ballistic Weapon
-03:29=Ballistic Weapon
-03:30=Airborne Attack
-03:31=Remote Controlled Bomb
-03:32=Temporary Effect
-03:33=Temporary Effect
-03:34=Temporary Effect
-03:35=Temporary Effect
-03:36=Temporary Effect
-03:37=Temporary Effect
+03:25=Costume kit
+03:26=Juicy grenade
+03:27=Fiery grenade
+03:28=Ballistic weapon
+03:29=Ballistic weapon
+03:30=Airborne attack
+03:31=Remote-controlled bomb
+03:32=Temporary effect
+03:33=Temporary effect
+03:34=Temporary effect
+03:35=Temporary effect
+03:36=Temporary effect
+03:37=Temporary effect
 03:38=Gun (multiple shots)
-03:39=Transport Utility
-03:40=Incinerating Grenade
+03:39=Transport utility
+03:40=Incinerating grenade
 03:41=Huge fan of Squawks
-03:42=I'm making a note here...
+03:42=I'm making a note here ...
 ; the misspelled "Beethoven" is intentional (-> to beat)
 03:43=Performing Beathoven's deadly sonata
 03:44=Best before: 1923
 03:45=The power of science
-03:46=Hot Hot Hot!
+03:46=Hot, hot, hot!
 03:47=Stick these somewhere useful!
-03:48=It's Hammer time!
+03:48=It's Hammer Time!
 03:49=Bring back the dead TO hell!
 03:50=Moles fan
 03:51=Found on the ground
@@ -459,66 +459,68 @@
 03:55=It doesn't get cooler than this!
 03:56=Please use or misuse
 03:57=Utility
+03:58=Floating proximity bomb
 
 ; Weapon Descriptions (use | as line breaks)
-04:00=Attack your enemies using a simple grenade.|It will explode once its timer reaches zero.|1-5: Set grenade's timer|Attack: Hold to throw with more power
-04:01=Attack your enemies using a cluster bomb.|It will split into smaller bombs once its timer|reaches zero.|1-5: Set grenade's timer|Attack: Hold to throw with more power
+04:00=Attack your enemies using a simple grenade.|It will explode once its timer reaches zero.|1-5: Set grenade's timer|Precise + 1-5: Set bounce strength|Attack: Hold to throw with more power
+04:01=Attack your enemies using a cluster bomb.|It will split into smaller bombs once its timer|reaches zero.|1-5: Set cluster bomb's timer|Precise + 1-5: Set bounce strength|Attack: Hold to throw with more power
 04:02=Attack your enemies using a ballistic projectile|that might be influenced by wind.|Attack: Hold to shoot with more power
 04:03=Launch an explosive bee that will lock on|the selected target. Don't shoot with full power|to improve its precision.|Cursor: Pick target|Attack: Hold to shoot with more power
 04:04=Attack your enemy using a shotgun with two shots.|Thanks to its spread you don't need direct hits|to harm your opponents.|Attack: Shoot (multiple times)
-04:05=Move underground! Use the pickhammer to drill|a hole into the ground and reach other areas.|Attack: Start or stop digging
+04:05=Move underground! Use the pick hammer to drill|a hole into the ground and reach other areas.|Attack: Start or stop digging|Left/Right: Move while drilling
 04:06=Bored? No way to attack? Save your ammo?|No problem! Just skip your turn, coward!|Attack: Skip your turn without fighting
-04:07=Bridge huge distances using timed shots with the|rope. Use your momentum to slide into other hogs|or drop grenades and other weapons on them.|Attack: Shoot or release the rope|Long Jump: Drop grenades or similar weapons
-04:08=Keep your enemies away by dropping a mine in|narrow passages or right below their feet. Be|sure to retreat before you trigger it yourself!|Attack: Drop mine next to your feet
+04:07=Bridge huge distances using timed shots with the|rope. Use your momentum to slide into other hogs|or drop grenades and other weapons on them.|Attack: Shoot or release the rope|Up/Down: Retract/Extend rope|Long Jump: Drop grenades or similar weapons
+04:08=Keep your enemies away by dropping a mine in|narrow passages or right below their feet. Be|sure to retreat before you trigger it yourself!|Attack: Drop mine next to your feet|Precise + 1-5: Set mine's bounce strength
 04:09=Not sure about your aiming? Use the Desert|Eagle to attack using up to four shots.|Attack: Shoot (multiple times)
 04:10=Brute force is always an option. Drop this classic|explosive next to your enemies and retreat.|Attack: Drop dynamite next to your feet
 04:11=Get rid of enemy hogs by batting them over|the map borders or into water. Or how about|knocking some mines to your friends?|Attack: Bat everything in front of you
 04:12=Get close and personal to unleash the power of|this almost deadly martial arts technique.|Attack: Perform the amazing Shoryuken.
 04:13=UNUSED
-04:14=Fear of heights? Better grab a parachute.|It will unfold once|you fall too far and|save your hog from taking fall damage.|Attack: Unfold the parachute|Long Jump: Drop grenades or similar weapons
+04:14=Fear of heights? Better grab a parachute.|It will unfold automatically once|you fall too far and|save your hog from taking fall damage.|Attack: Unfold or deactivate the parachute manually|Left/Right/Up/Down: Control your flight|Long Jump: Drop grenades or similar weapons
 04:15=Call in an airplane to attack your enemies|using a bombing run.|Left/Right: Determine attack direction|Cursor: Select target region
 04:16=Call in an airplane to drop several mines|in the target area.|Left/Right: Determine attack direction|Cursor: Select target region
-04:17=Need shelter? Use the blow torch to dig|a tunnel into solid ground granting you|cover.|Attack: Start or stop digging
+04:17=Need shelter? Use the blow torch to dig|a tunnel into solid ground granting you|cover.|Attack: Start or stop digging|Up/down: Change digging direction
 04:18=Need additional protection or want to pass|unpassable ground? Place some girders as you|like.|Left/Right: Select girder to place|Cursor: Place girder in a valid position
-04:19=Used at the right moment teleportation can|be more powerful than almost all weapons as|it allows you to save hogs from dangerous|situations within seconds.|Cursor: Select target region
-04:20=Allows you to play the current turn with|a different hog.|Attack: Enable switching hogs
-04:21=Shoot a grenade-like projectile that will|release multiple bombs upon impact.|Attack: Shoot at full power
+04:19=Used at the right moment teleportation can|be more powerful than almost all weapons as|it allows you to save hogs from dangerous|situations within seconds.|Cursor: Select target region|Left/Right: Choose facing direction
+04:20=Allows you to play the current turn with|a different hog.|Attack: Enable switching hogs|Switch: Select next hog|Precise + Switch: Select previous hog
+04:21=Shoot a projectile that will release|multiple clusters upon impact. The|clusters are hurled backwards and are|more dangerous than the main projectile.|Attack: Shoot at full power
 04:22=Not just for Indiana Jones! The whip is a|useful weapon in many situations. Especially|when you'd like to shove someone off a cliff.|Attack: Strike everything in front of you
-04:23=If you have nothing to lose, this might be|quite handy. Sacrifice your hog by launching|him into a specific direction hurting everything|on his way and exploding at the end.|Attack: Launch the devastating and deadly attack
+04:23=If you have nothing to lose, this might be|quite handy. Sacrifice your hog by launching|it into a specific direction hurting everything|on his way and exploding at the end.|Attack: Launch the devastating and deadly attack
 04:24=Happy Birthday! Launch this cake, let it walk right|next to your enemies and let them have an explosive|party. The cake is able to pass almost all terrain|but he might detonate earlier this way.|Attack: Start the cake or let it stop and explode
 04:25=Use this disguise kit to get your enemies to jump|towards your hog (and into some gap or hole).|Attack: Use the kit and try to seduce another hog
-04:26=Throw this juicy watermelon at your enemies. Once|the timer expires, it will split into several|explosive pieces.|1-5: Set watermelon's timer|Attack: Hold to shoot with more power
+04:26=Throw this juicy (and bouncy) watermelon at|your enemies. Once the timer expires, it will|split into several explosive pieces.|1-5: Set watermelon's timer|Attack: Hold to shoot with more power
 04:27=Let hellfire rain onto your opponents by using|this fiendish explosive. Don't get too close to|the explosion as smaller fires might last longer.|Attack: Hold to shoot with more power
 04:28=Short time after launching this rocket, it will|start drilling through solid ground and explode|once its fuse is triggered or it resurfaces again.|Attack: Hold to shoot with more power
 04:29=This is nothing for small kids! The ball gun fires|tons of small colored balls filled with explosives.|Attack: Shoot at full power|Up/Down: Continue aiming
 04:30=Call in an airplane to launch a powerful napalm|strike. With proper aiming this attack can eradicate|huge parts of landscape including unlucky hogs|sitting there.|Left/Right: Determine attack direction|Cursor: Select target region
 04:31=The RC plane is the ideal weapon to collect crates or|attack far away hogs. Either steer it into enemies or|drop some bombs first.|Attack: Launch the plane or drop bombs|Long Jump: Let the valkyries ride into battle|Left/Right: Steer the plane
 04:32=Low gravity is more effective than any diet! Jump|higher and over greater distances or let your enemies|fly even further.|Attack: Activate
-04:33=Sometimes you just need that little extra boost to|deal some more damage.|Attack: Activate
-04:34=Can't touch me!|Attack: Activate
-04:35=Sometimes time's running too fast. Grab some extra|seconds to finish your attack.|Attack: Activate
+04:33=Sometimes you just need that little extra boost to|deal some more damage. Activating this increases|the damage dealt by 50% for the rest of the turn.|Attack: Activate
+04:34=Makes you immune to damage for the|rest of your turn. But don't be too|cocky, you could still drown.|Attack: Activate
+04:35=Sometimes time's running too fast.|Grab 30 extra seconds to finish your attack.|Attack: Activate
 04:36=Well, sometimes you're just too bad in aiming. Get|some assistance using modern day technology.|Attack: Activate
-04:37=Don't fear the daylight. It will just last one turn|but will enable you to absorb the damage you do to|other hogs.|Attack: Activate
-04:38=The sniper rifle can be the most devastating weapon|in your whole arsenal, however it's very ineffective|at close quarters. The damage dealt increases with|the distance to its target.|Attack: Shoot (twice)
-04:39=Fly to other parts of the map using the flying|saucer. This hard to master utility can|take you to almost any position on the battlefield.|Attack: Activate|Up/Left/Right: Apply force in one direction|Long Jump: Drop grenades or similar weapons
+04:37=Don't fear the daylight. It will just last one turn|but will enable you to absorb 80% of the damage|dealt to other hogs.|Attack: Activate
+04:38=The sniper rifle can be the most devastating weapon|in your whole arsenal, however it's very ineffective|at close quarters. The damage dealt increases with|the distance to its target. Aiming is difficult, so as long this|weapon is activated, you have to hold your position.|Attack: Activate built-in laser sight, then fire (twice)|Left/Right: Turn around (between shots)
+04:39=Fly to other parts of the map using the flying|saucer. This hard to master utility can|take you to almost any position on the battlefield.|Attack: Activate/Deactivate|Up/Left/Right: Apply a short boost into one direction|Long Jump: Drop grenades or similar weapons|Precise + Long Jump: Launch weapon to crosshair|Precise + Up/Down: Adjust aim
 04:40=Set some ground on fire using this bottle filled|with (soon to be) burning liquid.|Attack: Hold to shoot with more power
-04:41=The evidence nature might even top the flying|saucer. Birdy can carry your hog around and|drop eggs on your enemies!|Be quick, as using Birdy eats into your turn|time!|Attack: Activate and drop eggs|Up/Left/Right: Flap in one direction
-04:42=This portable portal device is capable|of instantly transporting you, your enemies,|or your weaponry between two points on the|terrain.|Use it wisely and your campaign will be a...|HUGE SUCCESS!|Attack: Shoot a portal|Switch: Cycle portal colours
-04:43=Make your musical debut an explosive success!|Drop a piano from the heavens, but beware...|someone needs to play it, and that may cost you|your life!|Cursor: Select target region|F1-F9: Play the piano
-04:44=This isn't just cheese, it's biological warfare!|It won't cause an huge amount of damage once|the timer reaches zero but it will definitely|poison anyone unlucky to touch the smell!|1-5: Set grenade's timer|Attack: Hold to throw with more power
-04:45=All those physics classes have finally|paid off, launch a devastating Sine|wave at your foes.|Watch out, this weapon packs quite a kick. (This weapon is incomplete)|Attack: Shoot
+04:41=The evidence nature might even top the flying|saucer. Birdy can carry your hog around and|drop eggs on your enemies to poison them!|Be quick, as using Birdy eats into your turn|time!|Attack: Activate and drop eggs|Up/Left/Right: Flap in one direction
+04:42=This portable portal device is capable|of instantly transporting you, your enemies,|or your weaponry between two points on the|terrain.|Use it wisely and your campaign will be a ...|HUGE SUCCESS!|Disclaimer. Does not work on rubber bands.|Attack: Shoot a portal|Switch: Change portal colour
+04:43=Make your musical debut an explosive success!|Drop a mighty piano from the heavens,|stomping everything in its path, but beware:|Your hog must be sacrificed to play the piano.|Cursor: Select target region|F1-F9: Play the piano
+04:44=This isn't just cheese, it's biological warfare!|It won't cause an huge amount of damage once|the timer reaches zero but it will definitely|poison anyone unlucky to touch the smell!|1-5: Set timer|Precise + 1-5: Set bounce strength|Attack: Hold to throw with more power
+04:45=All those physics classes have finally paid off!|Launch a devastating sine wave which burns itself|through terrain.|Watch out, this weapon has a strong knockback.|Attack: Shoot
 04:46=Cover your foes with sizzling liquid flame.|Heartwarming!|Attack: Activate|Up/Down: Continue aiming|Left/Right: Modify spitting power
 04:47=Double the fun with two spiky, sneaky, sticky mines.|Set up a chain reaction or defend yourself (or both!)|Attack: Hold to shoot with more power (twice)
-04:48=Why should the moles get all the abuse?|Wacking a hog can be just as fun! A good|blow from this hammer will shave off one|third of a hog's health and plunge them|underground.|Attack: Activate
-04:49=Resurrect your friends!|But beware that this also resurrects your foes.|Attack: Keep attack pressed to resurrect slowly|Up: Accelerate resurrection
-04:50=Is someone hiding underground?|Dig them out with a drill strike!|Timer controls how far it will dig.|Left/Right: Determine attack direction|Cursor: Select target region
-04:51=Get in a free shot by hurling a ball of mud.|Stings a bit, and knocks hogs back.|Attack: Hold to shoot with more power
+04:48=Why should the moles get all the abuse? Wacking|a hog (or mines, or barrels) can be just as fun!|A good blow from this hammer will shave off|one third of a hog's health (or one half with|Extra Damage) and plunge them underground.|Attack: Activate
+04:49=Sacrifice your health to resurrect your friends!|But beware that this also resurrects your foes.|Attack: Keep attack pressed to resurrect slowly|Up: Accelerate resurrection
+04:50=Is someone hiding underground?|Dig them out with a drill strike!|Timer controls how far it will dig.|Left/Right: Determine attack direction|1-5: Set timer|Cursor: Select target region
+04:51=Get in a free shot by hurling a ball of mud.|Deals no damage, but knocks hogs and|objects back.|Attack: Hold to shoot with more power
 04:52=UNUSED
 04:53=Take a trip through time and space,|while leaving your comrades to fight on alone.|Be prepared to return at any time,|or for Sudden Death or if they are all defeated.|Disclaimer. Does not function in Sudden Death,|if you are alone, or if you are a King.|Attack: Activate
 04:54=Spray a stream of sticky flakes.|Build bridges, bury enemies, seal off tunnels.|Be careful you don't get any on you!|Attack: Activate|Up/Down: Continue aiming|Left/Right: Modify spitting power
-04:55=Bring back the ice-age!|Freeze hedgehogs, make the floor slippery or|save yourself from drowning by freezing the water.|Attack: Shoot
+04:55=Bring back the ice-age!|Freeze hedgehogs, make the floor slippery or|save yourself from drowning by freezing the water.|Attack: Activate/Deactivate freezeray|Up/Down: Continue aiming
 04:56=You can throw two cleavers at your enemy,|block passages and tunnels and even use them for climbing!|Be careful! Playing with knifes is dangerous.|Attack: Hold to shoot with more power (twice)
-04:57=Build an elastic bar made of rubber,|from which hedgehogs and other|things bounce off without taking fall damage.|Left/Right: Change rubber bar orientation|Cursor: Place rubber bar in a valid position
+04:57=Build a VERY elastic rubber band, from which|hedgehogs and other things bounce off|without taking fall damage.|Left/Right: Change rubber band orientation|Cursor: Place rubber band in a valid position
+04:58=This proximity bomb will float freely in the air and follow|hedgehogs careless enouogh to come too close to it.|Its explosion is weaker than that of the land mine, however.|Attack: Hold to shoot with more power
 
 ; Game goal strings
 05:00=Game Modes
@@ -526,7 +528,7 @@
 05:02=Forts: Defend your fortress; vanquish your enemies!
 05:03=Low Gravity: Watch your step
 05:04=Invulnerability: Hogs are (almost) invulnerable
-05:05=Vampirism: Hogs will be healed for the damage dealt
+05:05=Vampirism: Hogs will be healed for 80% of the damage dealt
 05:06=Karma: Hogs will be damaged for the damage dealt
 05:07=Protect the King: Don't let your king die!|Place the King: Pick a protected starting point for your King
 05:08=Place Hedgehogs: Place your hogs before the game starts
@@ -536,7 +538,7 @@
 05:12=Mine Timers: Mines will detonate after %1 second(s)
 05:13=Mine Timers: Mines will detonate instantly
 05:14=Mine Timers: Mines will detonate after 0 - 5 seconds
-05:15=Damage Modifier: All weapons will do %1% damage
+05:15=Damage Modifier: (Almost) all weapons will deal %1% damage
 05:16=Health of all hogs is reset on end of turn
 05:17=AI hogs respawn on death
 05:18=Unlimited Attacks
--- a/share/hedgewars/Data/Locale/hedgewars_de.ts	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_de.ts	Mon Nov 09 18:37:57 2015 +0100
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="2.0" language="de">
+<TS version="2.1" language="de">
 <context>
     <name>About</name>
     <message>
@@ -20,7 +20,7 @@
 <context>
     <name>AmmoSchemeModel</name>
     <message>
-        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="697"/>
+        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="758"/>
         <source>new</source>
         <translation>Neu</translation>
     </message>
@@ -29,7 +29,7 @@
         <translation type="obsolete">Kopie von</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="703"/>
+        <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="764"/>
         <source>copy of %1</source>
         <translation>Kopie von %1</translation>
     </message>
@@ -421,72 +421,72 @@
 <context>
     <name>HWForm</name>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1713"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2060"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1711"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2058"/>
         <source>Cannot save record to file %1</source>
         <translation>Datei %1 konnte nicht gespeichert werden</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="481"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="479"/>
         <source>DefaultTeam</source>
         <translation>Standard-Team</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1990"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1988"/>
         <source>Hedgewars Demo File</source>
         <comment>File Types</comment>
         <translation>Hedgewars-Wiederholungsdatei</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1991"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1989"/>
         <source>Hedgewars Save File</source>
         <comment>File Types</comment>
         <translation>Hedgewars-Spielstandsdatei</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2052"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2050"/>
         <source>Demo name</source>
         <translation>Wiederholungsname</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2052"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2050"/>
         <source>Demo name:</source>
         <translation>Wiederholungsname:</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="641"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="639"/>
         <source>Game aborted</source>
         <translation>Spiel abgebrochen</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1126"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1124"/>
         <source>Nickname</source>
         <translation>Spitzname</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1131"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1452"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1129"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1450"/>
         <source>No nickname supplied.</source>
         <translation>Kein Spitznahme angegeben.</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1126"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1124"/>
         <source>Someone already uses your nickname %1 on the server.
 Please pick another nickname:</source>
         <translation>Dein Spitzname »%1« ist bereits in Verwendung. Bitte wähle einen anderen Spitznamen:</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="485"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="483"/>
         <source>%1&apos;s Team</source>
         <translation>Team von %1</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1080"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1078"/>
         <source>Hedgewars - Nick registered</source>
         <translation>Hedgewars – Spitzname registriert</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1081"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1079"/>
         <source>This nick is registered, and you haven&apos;t specified a password.
 
 If this nick isn&apos;t yours, please register your own nick at www.hedgewars.org
@@ -499,7 +499,7 @@
 Passwort:</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1109"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1107"/>
         <source>Your nickname is not registered.
 To prevent someone else from using it,
 please register it at www.hedgewars.org</source>
@@ -508,7 +508,7 @@
 ihn bitte auf www.hedgewars.org</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1114"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1112"/>
         <source>
 
 Your password wasn&apos;t saved either.</source>
@@ -517,33 +517,33 @@
 Außerdem wurde auch dein Passwort nicht gespeichert.</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1131"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1452"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1129"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1450"/>
         <source>Hedgewars - Empty nickname</source>
         <translation>Hedgewars – leerer Spitzname</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1158"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1156"/>
         <source>Hedgewars - Wrong password</source>
         <translation>Hedgewars – falsches Passwort</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1158"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1156"/>
         <source>You entered a wrong password.</source>
         <translation>Du hast ein falsches Passwort eingegeben.</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1186"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1184"/>
         <source>Try Again</source>
         <translation>noch einmal versuchen</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1556"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1554"/>
         <source>Hedgewars - Connection error</source>
         <translation>Hedgewars – Verbindungsfehler</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1556"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1554"/>
         <source>You reconnected too fast.
 Please wait a few seconds and try again.</source>
         <translation>Du hast dich zu früh erneut verbunden.
@@ -551,26 +551,26 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/hwform.cpp" line="156"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="476"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1399"/>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1418"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="474"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1397"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1416"/>
         <source>Guest</source>
         <translation>Gast</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1170"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1168"/>
         <source>Room password</source>
         <translation>Raumkennwort</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1170"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1168"/>
         <source>The room is protected with password.
 Please, enter the password:</source>
         <translation>Der Raum wird durch ein Kennwort geschützt.
 Bitte Kennwort eingeben:</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2120"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2118"/>
         <source>This page requires an internet connection.</source>
         <translation>Diese Seite benötigt eine Internetverbindung.</translation>
     </message>
@@ -578,18 +578,18 @@
 <context>
     <name>HWGame</name>
     <message>
-        <location filename="../../../../QTfrontend/game.cpp" line="383"/>
+        <location filename="../../../../QTfrontend/game.cpp" line="399"/>
         <location filename="../../../../QTfrontend/net/recorder.cpp" line="113"/>
         <source>en.txt</source>
         <translation>de.txt</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/game.cpp" line="433"/>
+        <location filename="../../../../QTfrontend/game.cpp" line="449"/>
         <source>Cannot open demofile %1</source>
         <translation>Wiederholungsdatei »%1« konnte nicht geöffnet werden</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/game.cpp" line="252"/>
+        <location filename="../../../../QTfrontend/game.cpp" line="256"/>
         <source>A Fatal ERROR occured! - The game engine had to stop.
 
 We are very sorry for the inconvenience :(
@@ -723,22 +723,22 @@
         <translation>Große Inseln</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="758"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="760"/>
         <source>Map size:</source>
         <translation>Kartengröße:</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="765"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="767"/>
         <source>Maze style:</source>
         <translation>Labyrinth-Art:</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="787"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="789"/>
         <source>Mission:</source>
         <translation>Mission:</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="799"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="801"/>
         <source>Map:</source>
         <translation>Karte:</translation>
     </message>
@@ -747,17 +747,17 @@
         <translation type="obsolete">Thema:</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="961"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="963"/>
         <source>Load drawn map</source>
         <translation>Gezeichnete Karte laden</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="961"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="963"/>
         <source>Drawn Maps</source>
         <translation>Gezeichnete Karten</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="961"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="963"/>
         <source>All files</source>
         <translation>Alle Dateien</translation>
     </message>
@@ -767,8 +767,8 @@
         <translation>Große Tunnel</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="882"/>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1010"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="884"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="1012"/>
         <source>Theme: %1</source>
         <translation>Szenerie: %1</translation>
     </message>
@@ -778,7 +778,7 @@
         <translation>Perlinzufall</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="772"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="774"/>
         <source>Style:</source>
         <translation>Stil:</translation>
     </message>
@@ -814,7 +814,7 @@
         <translation>Verbindungsaufbau abgelehnt</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1576"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1574"/>
         <source>Quit reason: </source>
         <translation>Gegangen wegen: </translation>
     </message>
@@ -1123,34 +1123,34 @@
         <translation>Leeren</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="48"/>
+        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="49"/>
         <source>Load</source>
         <translation>Laden</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="49"/>
+        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="50"/>
         <source>Save</source>
         <translation>Speichern</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="78"/>
+        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="79"/>
         <source>Load drawn map</source>
         <translation>Gezeichnete Karte laden</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="86"/>
+        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="87"/>
         <source>Save drawn map</source>
         <translation>Gezeichnete Karte sichern</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="78"/>
-        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="86"/>
+        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="79"/>
+        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="87"/>
         <source>Drawn Maps</source>
         <translation>Gezeichnete Karten</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="78"/>
-        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="86"/>
+        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="79"/>
+        <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="87"/>
         <source>All files</source>
         <translation>Alle Dateien</translation>
     </message>
@@ -1706,7 +1706,7 @@
         <translation type="obsolete">Betreten</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="169"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="177"/>
         <source>Admin features</source>
         <translation>Verwalten</translation>
     </message>
@@ -1731,7 +1731,7 @@
         <translation type="obsolete">Leeren</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="531"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="541"/>
         <source>%1 players online</source>
         <translation>
             <numerusform>%1 Spieler online</numerusform>
@@ -1739,17 +1739,17 @@
         </translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="85"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="93"/>
         <source>Search for a room:</source>
-        <translation>Nach einem Raum suchen:</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="112"/>
+        <translation>Raumsuche:</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="120"/>
         <source>Create room</source>
         <translation>Raum erstellen</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="116"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="124"/>
         <source>Join room</source>
         <translation>Raum beitreten</translation>
     </message>
@@ -1763,7 +1763,7 @@
         <translation type="obsolete">Filter leeren</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="171"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="179"/>
         <source>Open server administration page</source>
         <translation>Server-Administrationsseite öffnen</translation>
     </message>
@@ -1771,12 +1771,12 @@
 <context>
     <name>PageScheme</name>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="435"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="449"/>
         <source>New</source>
         <translation>Neu</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="436"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="450"/>
         <source>Delete</source>
         <translation>Löschen</translation>
     </message>
@@ -1901,7 +1901,7 @@
         <translation>Wind beeinflusst fast alles.</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="434"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="448"/>
         <source>Copy</source>
         <translation>Kopieren</translation>
     </message>
@@ -1921,22 +1921,22 @@
         <translation>Dem unteren Kartenrand eine unzerstörbare Randbegrenzung anfügen</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="395"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="409"/>
         <source>None (Default)</source>
         <translation>Keine (Standard)</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="396"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="410"/>
         <source>Wrap (World wraps)</source>
         <translation>Umbrechen (Welt wiederholt sich)</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="397"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="411"/>
         <source>Bounce (Edges reflect)</source>
         <translation>Abprallen (Grenzen reflektieren)</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="398"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="412"/>
         <source>Sea (Edges connect to sea)</source>
         <translation>Ozean (Grenzen sind mit dem Wasser verbunden)</translation>
     </message>
@@ -2149,6 +2149,16 @@
         <source>Show games in-progress</source>
         <translation>Zur Zeit laufende Spiele zeigen</translation>
     </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="80"/>
+        <source>Show password protected</source>
+        <translation>Passwortgeschützte Spiele zeigen</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="83"/>
+        <source>Show join restricted</source>
+        <translation>Spiele mit Zutrittsverbot zeigen</translation>
+    </message>
 </context>
 <context>
     <name>QCheckBox</name>
@@ -2368,32 +2378,32 @@
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="320"/>
         <source>Red/Cyan grayscale</source>
-        <translation>Rot/Türkis Graustufen</translation>
+        <translation>Rot/Türkis, Graustufen</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="321"/>
         <source>Cyan/Red grayscale</source>
-        <translation>Türkis/Rot Graustufen</translation>
+        <translation>Türkis/Rot, Graustufen</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="322"/>
         <source>Red/Blue grayscale</source>
-        <translation>Rot/Blau Graustufen</translation>
+        <translation>Rot/Blau, Graustufen</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="323"/>
         <source>Blue/Red grayscale</source>
-        <translation>Blau/Rot Graustufen</translation>
+        <translation>Blau/Rot, Graustufen</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="324"/>
         <source>Red/Green grayscale</source>
-        <translation>Rot/Grün Graustufen</translation>
+        <translation>Rot/Grün, Graustufen</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="325"/>
         <source>Green/Red grayscale</source>
-        <translation>Grün/Rot Graustufen</translation>
+        <translation>Grün/Rot, Graustufen</translation>
     </message>
 </context>
 <context>
@@ -2521,7 +2531,12 @@
         <translation>Minen</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="418"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="372"/>
+        <source>Air Mines</source>
+        <translation>Luftminen</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="432"/>
         <source>Scheme Name:</source>
         <translation>Spielprofil:</translation>
     </message>
@@ -2620,7 +2635,7 @@
         <translation>Spielprofil</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="372"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="386"/>
         <source>% Get Away Time</source>
         <translation>% Rückzugszeit</translation>
     </message>
@@ -2645,27 +2660,27 @@
     <message>
         <location filename="../../../../QTfrontend/ui/dialog/upload_video.cpp" line="80"/>
         <source>Account name (or email): </source>
-        <translation>Kontoname (oder eMail)</translation>
+        <translation>Kontoname (oder E-Mail): </translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/dialog/upload_video.cpp" line="87"/>
         <source>Password: </source>
-        <translation>Passwort</translation>
+        <translation>Passwort: </translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/dialog/upload_video.cpp" line="105"/>
         <source>Video title: </source>
-        <translation>Video-Titel</translation>
+        <translation>Videotitel: </translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/dialog/upload_video.cpp" line="114"/>
         <source>Video description: </source>
-        <translation>Video-Beschreibung</translation>
+        <translation>Videobeschreibung: </translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/dialog/upload_video.cpp" line="121"/>
         <source>Tags (comma separated): </source>
-        <translation>Tags (durch Beistriche getrennt)</translation>
+        <translation>Tags (durch Kommas getrennt): </translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="136"/>
@@ -2769,12 +2784,12 @@
         <translation>Diese Einstellung tritt ab nächstem Neustart in Kraft.</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="386"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="400"/>
         <source>World Edge</source>
         <translation>Spielfeldgrenze</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="404"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="418"/>
         <source>Script parameter</source>
         <translation>Skriptparameter</translation>
     </message>
@@ -2782,7 +2797,7 @@
 <context>
     <name>QLineEdit</name>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="957"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="955"/>
         <source>unnamed</source>
         <translation>unbenannt</translation>
     </message>
@@ -2809,17 +2824,17 @@
 <context>
     <name>QMessageBox</name>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1576"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1574"/>
         <source>Connection to server is lost</source>
         <translation>Verbindung zum Server wurde unterbrochen</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/gamecfgwidget.cpp" line="372"/>
+        <location filename="../../../../QTfrontend/ui/widget/gamecfgwidget.cpp" line="373"/>
         <source>Error</source>
         <translation>Fehler</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2036"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2034"/>
         <source>File association failed.</source>
         <translation>Dateizuordnung fehlgeschlagen.</translation>
     </message>
@@ -2853,18 +2868,18 @@
         <translation>Willst du das Team »%1« wirklich löschen?</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="986"/>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="534"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="984"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="549"/>
         <source>Cannot delete default scheme &apos;%1&apos;!</source>
         <translation>Standard-Profil »%1« kann nicht gelöscht werden!</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1012"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1010"/>
         <source>Please select a record from the list</source>
         <translation>Bitte wähle eine Aufnahme in der Liste aus</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1515"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1513"/>
         <source>Unable to start server</source>
         <translation>Server konnte nicht gestartet werden</translation>
     </message>
@@ -2875,13 +2890,13 @@
         <translation>Hedgewars – Fehler</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2030"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2028"/>
         <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="436"/>
         <source>Hedgewars - Success</source>
         <translation>Hedgewars – Erfolg</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2031"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2029"/>
         <source>All file associations have been set</source>
         <translation>Alle Dateizuordnungen wurden gesetzt</translation>
     </message>
@@ -2966,39 +2981,39 @@
         <translation>Datei konnte nicht gelöscht werden</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="492"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="502"/>
         <source>Room Name - Error</source>
         <translation>Raumname - Fehler</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="493"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="503"/>
         <source>Please select room from the list</source>
         <translation>Bitte einen Raum aus der Liste auswählen</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="518"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="528"/>
         <source>Room Name - Are you sure?</source>
         <translation>Raumname - Bist du dir sicher?</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="519"/>
+        <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="529"/>
         <source>The game you are trying to join has started.
 Do you still want to join the room?</source>
         <translation>Das Spiel in das du beitreten möchtest hat bereits begonnen.
 Willst du trotzdem den Raum betreten?</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="533"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="548"/>
         <source>Schemes - Warning</source>
         <translation>Spielprofile – Warnung</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="542"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="557"/>
         <source>Schemes - Are you sure?</source>
         <translation>Spielprofile – Bist du dir sicher?</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="543"/>
+        <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="558"/>
         <source>Do you really want to delete the game scheme &apos;%1&apos;?</source>
         <translation>Willst du das Spielprofil »%1« wirklich löschen?</translation>
     </message>
@@ -3030,7 +3045,7 @@
     <message>
         <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="146"/>
         <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="166"/>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="971"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="973"/>
         <source>File error</source>
         <translation>Dateifehler</translation>
     </message>
@@ -3041,12 +3056,12 @@
     </message>
     <message>
         <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="167"/>
-        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="972"/>
+        <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="974"/>
         <source>Cannot open &apos;%1&apos; for reading</source>
         <translation>»%1« konnte zum Lesen nicht geöffnet werden</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/ui/widget/gamecfgwidget.cpp" line="373"/>
+        <location filename="../../../../QTfrontend/ui/widget/gamecfgwidget.cpp" line="374"/>
         <source>Cannot use the ammo &apos;%1&apos;!</source>
         <translation>Munition »%1« kann nicht benutzt werden!</translation>
     </message>
@@ -3077,7 +3092,7 @@
         <translation>Willst du das Arsenal »%1« wirklich löschen?</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="1107"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="1105"/>
         <source>Hedgewars - Nick not registered</source>
         <translation>Hedgewars – Spitzname nicht registriert</translation>
     </message>
@@ -3113,12 +3128,12 @@
         <translation>Hedgewars – Information</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2127"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2125"/>
         <source>Not all players are ready</source>
         <translation>Es sind nicht alle Spieler bereit</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/hwform.cpp" line="2128"/>
+        <location filename="../../../../QTfrontend/hwform.cpp" line="2126"/>
         <source>Are you sure you want to start this game?
 Not all players are ready.</source>
         <translation>Bist du sicher, dass du diesees Spiel starten willst?
@@ -3364,17 +3379,17 @@
         <translation>Arsenal</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/roomslistmodel.cpp" line="133"/>
+        <location filename="../../../../QTfrontend/model/roomslistmodel.cpp" line="149"/>
         <source>Random Map</source>
         <translation>Zufallskarte</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/roomslistmodel.cpp" line="134"/>
+        <location filename="../../../../QTfrontend/model/roomslistmodel.cpp" line="150"/>
         <source>Random Maze</source>
         <translation>Zufallslabyrinth</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/roomslistmodel.cpp" line="136"/>
+        <location filename="../../../../QTfrontend/model/roomslistmodel.cpp" line="152"/>
         <source>Hand-drawn</source>
         <translation>Handgemalt</translation>
     </message>
@@ -3384,7 +3399,7 @@
         <translation>Stil</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/model/roomslistmodel.cpp" line="135"/>
+        <location filename="../../../../QTfrontend/model/roomslistmodel.cpp" line="151"/>
         <source>Random Perlin</source>
         <translation>Zufälliges Perlin</translation>
     </message>
@@ -4265,225 +4280,280 @@
 <context>
     <name>server</name>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="27"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="13"/>
         <source>Authentication failed</source>
         <translation>Authentifizierung fehlgeschlagen</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="28"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="14"/>
         <source>60 seconds cooldown after kick</source>
         <translation>60 Sekunden Abkühlzeit nach Hinauswurf</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="29"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="15"/>
         <source>kicked</source>
         <translation>hinausgeworfen</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="31"/>
-        <source>Ping timeout</source>
-        <translation>Ping-Timeout</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="45"/>
-        <source>bye</source>
-        <translation>tschüss</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="13"/>
-        <source>Empty config entry</source>
-        <translation>Leerer Konfigurations-Eintrag</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="16"/>
-        <source>Corrupted hedgehogs info</source>
-        <translation>Kaputte Igel-Info</translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="17"/>
-        <source>too many teams</source>
-        <translation>zu viele Teams</translation>
+        <source>Ping timeout</source>
+        <translation>Ping-Timeout</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="18"/>
-        <source>too many hedgehogs</source>
-        <translation>zu viele Igel</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="19"/>
-        <source>There&apos;s already a team with same name in the list</source>
-        <translation>Es gibt bereits ein Team mit dem selben Namen in der Liste</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="20"/>
-        <source>round in progress</source>
-        <translation>laufende Runde</translation>
+        <source>bye</source>
+        <translation>tschüss</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="21"/>
-        <source>restricted</source>
-        <translation>eingeschränkt</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="22"/>
-        <source>REMOVE_TEAM: no such team</source>
-        <translation>REMOVE_TEAM: kein solches Team</translation>
+        <source>Your vote counted</source>
+        <translation>Deine Stimme zählte</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="23"/>
+        <source>Pause toggled</source>
+        <translation>Pause umgeschaltet</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="29"/>
+        <source>new seed</source>
+        <translation>Neuer Seed</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="30"/>
+        <source>number of hedgehogs in team</source>
+        <translation>Anzahl der Igel im Team</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="37"/>
+        <source>Empty config entry</source>
+        <translation>Leerer Konfigurations-Eintrag</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="40"/>
+        <source>Corrupted hedgehogs info</source>
+        <translation>Kaputte Igel-Info</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="41"/>
+        <source>too many teams</source>
+        <translation>zu viele Teams</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="42"/>
+        <source>too many hedgehogs</source>
+        <translation>zu viele Igel</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="43"/>
+        <source>There&apos;s already a team with same name in the list</source>
+        <translation>Es gibt bereits ein Team mit dem selben Namen in der Liste</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="44"/>
+        <source>round in progress</source>
+        <translation>laufende Runde</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="45"/>
+        <source>restricted</source>
+        <translation>eingeschränkt</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="46"/>
+        <source>REMOVE_TEAM: no such team</source>
+        <translation>REMOVE_TEAM: kein solches Team</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="47"/>
         <source>Not team owner!</source>
         <translation>Nicht Team-Besitzer*In!</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="12"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="36"/>
         <source>Less than two clans!</source>
         <translation>Weniger als zwei Klans!</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="24"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="48"/>
         <source>Room with such name already exists</source>
         <translation>ein Raum mit einem solchen Namen existiert bereits</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="6"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="49"/>
+        <source>/maxteams: specify number from 2 to 8</source>
+        <translation>/maxteams: Zahl zwischen 2 und 8 wählen</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="50"/>
+        <source>Available callvote commands: kick &lt;nickname&gt;, map &lt;name&gt;, pause, newseed, hedgehogs</source>
+        <translation>Verfügbare »callvote«-Befehle: kick &lt;Spitzname&gt;, map &lt;Name&gt;, pause, newseed, hedgehogs</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="51"/>
+        <source>callvote kick: specify nickname</source>
+        <translation>callvote kick: Spitznamen festlegen</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="52"/>
+        <source>callvote kick: no such user</source>
+        <translation>callvote kick: Benutzer existiert nicht</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="53"/>
+        <source>callvote map: no such map</source>
+        <translation>callvote map: Karte existiert nicht</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="54"/>
+        <source>callvote pause: no game in progress</source>
+        <translation>callvote pause: es läuft kein Spiel</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="55"/>
+        <source>callvote hedgehogs: specify number from 1 to 8</source>
+        <translation>callvote hedgehogs: Zahl zwischen 1 und 8 wählen</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="56"/>
         <source>Illegal room name</source>
         <translation>Verbotener Raumname</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="7"/>
-        <source>No such room</source>
-        <translation>Ein solcher Raum existiert nicht</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="9"/>
-        <source>Joining restricted</source>
-        <translation>Zutritt verboten</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="10"/>
-        <source>Registered users only</source>
-        <translation>Nur für registrierte Benutzer</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="11"/>
-        <source>You are banned in this room</source>
-        <translation>Du wurdest aus diesem Raum verbannt</translation>
-    </message>
-    <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="2"/>
-        <source>Nickname already chosen</source>
-        <translation>Spitzname bereits gewählt</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="3"/>
-        <source>Illegal nickname</source>
-        <translation>Verbotener Spitzname</translation>
+        <source>No such room</source>
+        <translation>Ein solcher Raum existiert nicht</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="4"/>
-        <source>Protocol already known</source>
-        <translation>Protokoll bereits bekannt</translation>
+        <source>Joining restricted</source>
+        <translation>Zutritt verboten</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="5"/>
-        <source>Bad number</source>
-        <translation>Schlechte Zahl</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="25"/>
-        <source>Nickname is already in use</source>
-        <translation>Spitzname bereits in Benutzung</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="14"/>
-        <source>Restricted</source>
-        <translation>Eingeschränkt</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="15"/>
-        <source>Not room master</source>
-        <translation>Nicht Gastgeber</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="26"/>
-        <source>No checker rights</source>
-        <translation>Keine Rechte zum Benutzen des Inspektionshilfsprogramms</translation>
+        <source>Registered users only</source>
+        <translation>Nur für registrierte Benutzer</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="6"/>
+        <source>You are banned in this room</source>
+        <translation>Du wurdest aus diesem Raum verbannt</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="7"/>
+        <source>Nickname already chosen</source>
+        <translation>Spitzname bereits gewählt</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="8"/>
-        <source>Room version incompatible to your hedgewars version</source>
-        <translation>Die Raumversion ist inkompatibel zu deiner Hedgewars-Version</translation>
+        <source>Illegal nickname</source>
+        <translation>Verbotener Spitzname</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="9"/>
+        <source>Protocol already known</source>
+        <translation>Protokoll bereits bekannt</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="10"/>
+        <source>Bad number</source>
+        <translation>Schlechte Zahl</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="11"/>
+        <source>Nickname is already in use</source>
+        <translation>Spitzname bereits in Benutzung</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="38"/>
-        <source>You already have voted</source>
-        <translation>Du hast bereits deine Stimme abgegeben</translation>
+        <source>Restricted</source>
+        <translation>Eingeschränkt</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="39"/>
+        <source>Not room master</source>
+        <translation>Nicht Gastgeber</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="12"/>
+        <source>No checker rights</source>
+        <translation>Keine Rechte zum Benutzen des Inspektionshilfsprogramms</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="3"/>
+        <source>Room version incompatible to your hedgewars version</source>
+        <translation>Die Raumversion ist inkompatibel zu deiner Hedgewars-Version</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="20"/>
+        <source>You already have voted</source>
+        <translation>Du hast bereits deine Stimme abgegeben</translation>
+    </message>
+    <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="22"/>
         <source>Voting closed</source>
         <translation>Abstimmung abgeschlossen</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="40"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="24"/>
         <source>New voting started</source>
         <translation>Neue Abstimmung gestartet</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="41"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="25"/>
         <source>Voting expired</source>
         <translation>Abstimmung abgelaufen</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="42"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="26"/>
         <source>kick</source>
         <translation>hinauswerfen</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="43"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="27"/>
         <source>map</source>
         <translation>Karte</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="44"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="28"/>
         <source>pause</source>
         <translation>pausieren</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="30"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="16"/>
         <source>Reconnected too fast</source>
         <translation>Zu schnell wieder verbunden</translation>
     </message>
     <message>
+        <location filename="../../../../QTfrontend/servermessages.h" line="31"/>
+        <source>Warning! Chat flood protection activated</source>
+        <translatorcomment>Nicht jeder weiß, was »Flooding« heißt, daher ist die Übersetzung etwas ausführlicher.</translatorcomment>
+        <translation>Achtung! Chat-Flood-Schutz ist aktiv. Bitte red etwas langsamer.</translation>
+    </message>
+    <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="32"/>
-        <source>Warning! Chat flood protection activated</source>
-        <translatorcomment>Nicht jeder weiß, was »Flooding« heißt, daher ist die Übersetzung etwas ausführlicher.</translatorcomment>
-        <translation>Achtung! Chat-Flood-Schutz ist aktiv. Bitte red etwas langsamer.</translation>
+        <source>Excess flood</source>
+        <translatorcomment>Nicht jeder weiß, was »Flooding« heißt, daher wird es hier umschrieben.</translatorcomment>
+        <translation>Zu viele Nachrichten in kurzer Zeit abgeschickt</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="33"/>
-        <source>Excess flood</source>
-        <translatorcomment>Nicht jeder weiß, was »Flooding« heißt, daher wird es hier umschrieben.</translatorcomment>
-        <translation>Zu viele Nachrichten in kurzer Zeit abgeschickt</translation>
+        <source>Game messages flood detected - 1</source>
+        <translation>Zu viele Spielnachrichten in kurzer Zeit ermittelt – 1</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="34"/>
-        <source>Game messages flood detected - 1</source>
-        <translation>Zu viele Spielnachrichten in kurzer Zeit ermittelt – 1</translation>
+        <source>Game messages flood detected - 2</source>
+        <translation>Zu viele Spielnachrichten in kurzer Zeit ermittelt – 2</translation>
     </message>
     <message>
         <location filename="../../../../QTfrontend/servermessages.h" line="35"/>
-        <source>Game messages flood detected - 2</source>
-        <translation>Zu viele Spielnachrichten in kurzer Zeit ermittelt – 2</translation>
-    </message>
-    <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="36"/>
         <source>Warning! Joins flood protection activated</source>
         <translatorcomment>Nicht jeder weiß, was »Flooding« heißt, daher ist die Übersetzung etwas ausführlicher und umschreibend.</translatorcomment>
         <translation>Achtung! Der Server wird ein zu schnelles Beitreten in kurzer Zeit nicht akzeptieren</translation>
     </message>
     <message>
-        <location filename="../../../../QTfrontend/servermessages.h" line="37"/>
+        <location filename="../../../../QTfrontend/servermessages.h" line="19"/>
         <source>There&apos;s no voting going on</source>
         <translation>Zur Zeit findet keine Abstimmung statt</translation>
     </message>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Locale/hedgewars_gd.ts	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,3459 @@
+<?xml version="1.0" ?><!DOCTYPE TS><TS language="gd" version="2.0">
+<context>
+    <name>About</name>
+    <message>
+        <source>Unknown Compiler</source>
+        <translation>Trusaiche neo-aithnichte</translation>
+    </message>
+</context>
+<context>
+    <name>AbstractPage</name>
+    <message>
+        <source>Go back</source>
+        <translation>Air ais</translation>
+    </message>
+</context>
+<context>
+    <name>AmmoSchemeModel</name>
+    <message>
+        <source>new</source>
+        <translation>ùr</translation>
+    </message>
+    <message>
+        <source>copy of %1</source>
+        <translation>lethbhreac de %1</translation>
+    </message>
+</context>
+<context>
+    <name>BanDialog</name>
+    <message>
+        <source>IP</source>
+        <translation>IP</translation>
+    </message>
+    <message>
+        <source>Nick</source>
+        <translation>Far-ainm</translation>
+    </message>
+    <message>
+        <source>IP/Nick</source>
+        <translation>IP/Far-ainm</translation>
+    </message>
+    <message>
+        <source>Reason</source>
+        <translation>Adhbhar</translation>
+    </message>
+    <message>
+        <source>Duration</source>
+        <translation>Faide</translation>
+    </message>
+    <message>
+        <source>Ok</source>
+        <translation>Ceart ma-thà</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation>Sguir dheth</translation>
+    </message>
+    <message>
+        <source>you know why</source>
+        <translation>tha fios agad carson</translation>
+    </message>
+    <message>
+        <source>Warning</source>
+        <translation>Rabhadh</translation>
+    </message>
+    <message>
+        <source>Please, specify %1</source>
+        <translation>Feuch an sònraidh thu %1</translation>
+    </message>
+    <message>
+        <source>nickname</source>
+        <translation>far-ainm</translation>
+    </message>
+    <message>
+        <source>permanent</source>
+        <translation>buan</translation>
+    </message>
+</context>
+<context>
+    <name>DataManager</name>
+    <message>
+        <source>Use Default</source>
+        <translation>Cleachd a&apos; bhun-roghainn</translation>
+    </message>
+</context>
+<context>
+    <name>FeedbackDialog</name>
+    <message>
+        <source>View</source>
+        <translation>Seall</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation>Sguir dheth</translation>
+    </message>
+    <message>
+        <source>Send Feedback</source>
+        <translation>Cuir beachd thugainn</translation>
+    </message>
+    <message>
+        <source>We are always happy about suggestions, ideas, or bug reports.</source>
+        <translation>Tha sinn deònach air molaidhean, beachdan no aithris air bugaichean uair sam bith.</translation>
+    </message>
+    <message>
+        <source>Send us feedback!</source>
+        <translation>Cuir beachd thugainn!</translation>
+    </message>
+    <message>
+        <source>If you found a bug, you can see if it&apos;s already been reported here: </source>
+        <translation>Ma lorg thu buga, thoir sùil an deach aithris mar-thà an-seo: </translation>
+    </message>
+    <message>
+        <source>Your email address is optional, but necessary if you want us to get back at you.</source>
+        <translation>Cha leig thu leas seòladh puist-d a chur seachad ach ma tha thu airson freagairt fhaighinn.</translation>
+    </message>
+</context>
+<context>
+    <name>FreqSpinBox</name>
+    <message>
+        <source>Never</source>
+        <translation>Chan ann idir</translation>
+    </message>
+    <message numerus="yes">
+        <source>Every %1 turn</source>
+        <translation><numerusform>Gach %1d cuairt</numerusform><numerusform>Gach %1a cuairt</numerusform><numerusform>Gach %1mh cuairt</numerusform><numerusform>Gach %1mh cuairt</numerusform></translation>
+    </message>
+</context>
+<context>
+    <name>GameCFGWidget</name>
+    <message>
+        <source>Edit weapons</source>
+        <translation>Deasaich na h-airm</translation>
+    </message>
+    <message>
+        <source>Edit schemes</source>
+        <translation>Deasaich na sgeamaichean</translation>
+    </message>
+    <message>
+        <source>Game scheme will auto-select a weapon</source>
+        <translation>Taghaidh sgeama a&apos; gheama arm gu fèin-obrachail</translation>
+    </message>
+    <message>
+        <source>Map</source>
+        <translation>Mapa</translation>
+    </message>
+    <message>
+        <source>Game options</source>
+        <translation>Roghainnean a&apos; gheama</translation>
+    </message>
+</context>
+<context>
+    <name>GameUIConfig</name>
+    <message>
+        <source>Guest</source>
+        <translation>Aoigh</translation>
+    </message>
+</context>
+<context>
+    <name>HWApplication</name>
+    <message numerus="yes">
+        <source>%1 minutes</source>
+        <translation><numerusform>%1 mhionaid</numerusform><numerusform>%1 mhionaid</numerusform><numerusform>%1 mionaidean</numerusform><numerusform>%1 mionaid</numerusform></translation>
+    </message>
+    <message numerus="yes">
+        <source>%1 hour</source>
+        <translation><numerusform>%1 uair</numerusform><numerusform>%1 uair</numerusform><numerusform>%1 uairean</numerusform><numerusform>%1 uair</numerusform></translation>
+    </message>
+    <message numerus="yes">
+        <source>%1 hours</source>
+        <translation><numerusform>%1 uair</numerusform><numerusform>%1 uair</numerusform><numerusform>%1 uairean</numerusform><numerusform>%1 uair</numerusform></translation>
+    </message>
+    <message numerus="yes">
+        <source>%1 day</source>
+        <translation><numerusform>%1 latha</numerusform><numerusform>%1 latha</numerusform><numerusform>%1 làithean</numerusform><numerusform>%1 latha</numerusform></translation>
+    </message>
+    <message numerus="yes">
+        <source>%1 days</source>
+        <translation><numerusform>%1 latha</numerusform><numerusform>%1 latha</numerusform><numerusform>%1 làithean</numerusform><numerusform>%1 latha</numerusform></translation>
+    </message>
+    <message>
+        <source>Scheme &apos;%1&apos; not supported</source>
+        <translation>Cha chuir sinn taic ris an sgeama &quot;%1&quot;</translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation>Chan urrainn dhuinn am pasgan &quot;%1&quot; a chruthachadh</translation>
+    </message>
+    <message>
+        <source>Failed to open data directory:
+%1
+
+Please check your installation!</source>
+        <translation>Cha deach leinn am pasgan dàta fhosgladh:
+%1
+
+Feuch an dearbhaich thu an stàladh agad!</translation>
+    </message>
+    <message>
+        <source>Usage</source>
+        <comment>command-line</comment>
+        <translation>Cleachdadh</translation>
+    </message>
+    <message>
+        <source>OPTION</source>
+        <comment>command-line</comment>
+        <translation>ROGHAINN</translation>
+    </message>
+    <message>
+        <source>CONNECTSTRING</source>
+        <comment>command-line</comment>
+        <translation>TEACSACEANGLAIDH</translation>
+    </message>
+    <message>
+        <source>Options</source>
+        <comment>command-line</comment>
+        <translation>Roghainnean</translation>
+    </message>
+    <message>
+        <source>Display this help</source>
+        <comment>command-line</comment>
+        <translation>Seall a&apos; chobhair seo</translation>
+    </message>
+    <message>
+        <source>Custom path for configuration data and user data</source>
+        <comment>command-line</comment>
+        <translation>Slighe ghnàthaichte airson dàta rèiteachaidh &apos;s a&apos; chleachdaiche</translation>
+    </message>
+    <message>
+        <source>Custom path to the game data folder</source>
+        <comment>command-line</comment>
+        <translation>Slighe ghnàthaichte gu pasgan dàta a&apos; gheama</translation>
+    </message>
+    <message>
+        <source>Hedgewars can use a %1 (e.g. &quot;%2&quot;) to connect on start.</source>
+        <comment>command-line</comment>
+        <translation>&apos;S urrainn do Hedgewars %1 (m.e. &quot;%2&quot;) a chleachdadh gus ceangal leis an tòiseachadh.</translation>
+    </message>
+    <message>
+        <source>Malformed option argument: %1</source>
+        <comment>command-line</comment>
+        <translation>Droch chumadh air argamaid roghainne: %1</translation>
+    </message>
+    <message>
+        <source>Unknown option argument: %1</source>
+        <comment>command-line</comment>
+        <translation>Argamaid roghainne nach aithne dhuinn: %1</translation>
+    </message>
+</context>
+<context>
+    <name>HWAskQuitDialog</name>
+    <message>
+        <source>Do you really want to quit?</source>
+        <translation>A bheil thu airson fàgail dha-rìribh?</translation>
+    </message>
+</context>
+<context>
+    <name>HWChatWidget</name>
+    <message>
+        <source>%1 has been removed from your ignore list</source>
+        <translation>Chaidh %1 a thoirt air falbh on liosta neo-shuime agad</translation>
+    </message>
+    <message>
+        <source>%1 has been added to your ignore list</source>
+        <translation>Chaidh %1 a chur ris an liosta neo-shuime agad</translation>
+    </message>
+    <message>
+        <source>%1 has been removed from your friends list</source>
+        <translation>Chaidh %1 a thoirt air falbh o liosta nan caraidean agad</translation>
+    </message>
+    <message>
+        <source>%1 has been added to your friends list</source>
+        <translation>Chaidh %1 a chur ri liosta nan caraidean agad</translation>
+    </message>
+    <message>
+        <source>Stylesheet imported from %1</source>
+        <translation>Chaidh siota-stoidhle ion-phortachadh o %1</translation>
+    </message>
+    <message>
+        <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+        <translation>Cuir a-steach %1 ma tha thu airson an siota-stoidhle làithreach a chleachdadh san àm ri teach no %2 gus ath-shuidheachadh!</translation>
+    </message>
+    <message>
+        <source>Couldn&apos;t read %1</source>
+        <translation>Cha b&apos; urrainn dhuinn %1 a leughadh</translation>
+    </message>
+    <message>
+        <source>StyleSheet discarded</source>
+        <translation>Chaidh an siota-stoidhle a thilgeil air falbh</translation>
+    </message>
+    <message>
+        <source>StyleSheet saved to %1</source>
+        <translation>Chaidh an siota-stoidhle a shàbhaladh gu %1</translation>
+    </message>
+    <message>
+        <source>Failed to save StyleSheet to %1</source>
+        <translation>Cha b&apos; urrainn dhuinn an siota-stoidhle a shàbhaladh gu %1</translation>
+    </message>
+    <message>
+        <source>%1 has joined</source>
+        <translation>Thàinig %1 a-steach</translation>
+    </message>
+    <message>
+        <source>%1 has left</source>
+        <translation>Dh&apos;fhalbh %1</translation>
+    </message>
+    <message>
+        <source>%1 has left (%2)</source>
+        <translation>Dh&apos;fhalbh %1 (%2)</translation>
+    </message>
+</context>
+<context>
+    <name>HWForm</name>
+    <message>
+        <source>Cannot save record to file %1</source>
+        <translation>Chan urrainn dhuinn an clàr a shàbhaladh gun fhaidhle %1</translation>
+    </message>
+    <message>
+        <source>DefaultTeam</source>
+        <translation>Sgioba tùsail</translation>
+    </message>
+    <message>
+        <source>Hedgewars Demo File</source>
+        <comment>File Types</comment>
+        <translation>Faidhle demo Hedgewars</translation>
+    </message>
+    <message>
+        <source>Hedgewars Save File</source>
+        <comment>File Types</comment>
+        <translation>Faidhle sàbhalaidh Hedgewars</translation>
+    </message>
+    <message>
+        <source>Demo name</source>
+        <translation>Ainm an demo</translation>
+    </message>
+    <message>
+        <source>Demo name:</source>
+        <translation>Ainm an demo:</translation>
+    </message>
+    <message>
+        <source>Game aborted</source>
+        <translation>Chaidh sgur dhen gheama</translation>
+    </message>
+    <message>
+        <source>Nickname</source>
+        <translation>Far-ainm</translation>
+    </message>
+    <message>
+        <source>No nickname supplied.</source>
+        <translation>Cha deach far-ainm a thoirt seachad.</translation>
+    </message>
+    <message>
+        <source>Someone already uses your nickname %1 on the server.
+Please pick another nickname:</source>
+        <translation>Cha cuideigin a&apos; chleachdadh d&apos; fhar-ainm %1 air an fhrithealaiche mar-thà.
+Feuch an tagh thu far-ainm eile:</translation>
+    </message>
+    <message>
+        <source>%1&apos;s Team</source>
+        <translation>An sgioba aig %1</translation>
+    </message>
+    <message>
+        <source>Hedgewars - Nick registered</source>
+        <translation>Hedgewars - Far-ainm clàraichte</translation>
+    </message>
+    <message>
+        <source>This nick is registered, and you haven't specified a password.
+
+If this nick isn't yours, please register your own nick at www.hedgewars.org
+
+Password:</source>
+        <translation>Tha am far-ainm seo clàraichte &apos;s cha chuir thu facal-faire a-steach.
+
+Mur ann agadsa a tha am far-ainm seo, clàraich fear agad fhèin air www.hedgewars.org
+
+Facal-faire:</translation>
+    </message>
+    <message>
+        <source>Your nickname is not registered.
+To prevent someone else from using it,
+please register it at www.hedgewars.org</source>
+        <translation>Chan eil d&apos; fhar-ainm clàraichte.
+&apos;S urrainn dhut a chlàradh air www.hedgewars.org
+ach nach cleachd duine eile e.</translation>
+    </message>
+    <message>
+        <source>
+
+Your password wasn&apos;t saved either.</source>
+        <translation>
+
+Cha deach am facal-faire agad a shàbhaladh nas motha.</translation>
+    </message>
+    <message>
+        <source>Hedgewars - Empty nickname</source>
+        <translation>Hedgewars - Far-ainm falamh</translation>
+    </message>
+    <message>
+        <source>Hedgewars - Wrong password</source>
+        <translation>Hedgewars - Facal-faire ceàrr</translation>
+    </message>
+    <message>
+        <source>You entered a wrong password.</source>
+        <translation>Cha do chuir thu am facal-faire a-steach mar bu chòir.</translation>
+    </message>
+    <message>
+        <source>Try Again</source>
+        <translation>Feuch ris a-rithist</translation>
+    </message>
+    <message>
+        <source>Hedgewars - Connection error</source>
+        <translation>Hedgewars - Mearachd leis a&apos; cheangal</translation>
+    </message>
+    <message>
+        <source>You reconnected too fast.
+Please wait a few seconds and try again.</source>
+        <translation>Rinn thu ath-cheangal ro luath.
+Fuirich diog no dhà mus feuch thu ris a-rithist.</translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation>Tha an duilleag seo feumach air ceangal dhan eadar-lìn.</translation>
+    </message>
+    <message>
+        <source>Guest</source>
+        <translation>Aoigh</translation>
+    </message>
+    <message>
+        <source>Room password</source>
+        <translation>Facal-faire an t-seòmair</translation>
+    </message>
+    <message>
+        <source>The room is protected with password.
+Please, enter the password:</source>
+        <translation>Chaidh an seòmar seo a dhìon le facal-faire.
+Cuir a-steach am facal-faire:</translation>
+    </message>
+</context>
+<context>
+    <name>HWGame</name>
+    <message>
+        <source>en.txt</source>
+        <translation>gd.txt</translation>
+    </message>
+    <message>
+        <source>Cannot open demofile %1</source>
+        <translation>Chan urrainn dhuinn faidhle an demo %1 fhosgladh</translation>
+    </message>
+    <message>
+        <source>A Fatal ERROR occured! - The game engine had to stop.
+
+We are very sorry for the inconvenience :(
+
+If this keeps happening, please click the '%1' button in the main menu!
+
+Last two engine messages:
+%2</source>
+        <translation>Thachair MEARACHD mharbhtach! - Thug seo stad air inneal a&apos; gheama.
+
+Tha sinn glè dhuilich mun trioblaid seo :(
+
+Ma thachras seo a-rithist &apos;s a-rithist, briog air a&apos; phutan &quot;%1&quot; sa phrìomh chlàr-taice!
+
+An dà theachdaireachd mu dheireadh aig an inneal:
+%2</translation>
+    </message>
+</context>
+<context>
+    <name>HWMapContainer</name>
+    <message>
+        <source>All</source>
+        <translation>Na h-uile</translation>
+    </message>
+    <message>
+        <source>Small</source>
+        <translation>Beag</translation>
+    </message>
+    <message>
+        <source>Medium</source>
+        <translation>Meadhanach</translation>
+    </message>
+    <message>
+        <source>Large</source>
+        <translation>Mòr</translation>
+    </message>
+    <message>
+        <source>Cavern</source>
+        <translation>Uamh</translation>
+    </message>
+    <message>
+        <source>Wacky</source>
+        <translation>Neònach</translation>
+    </message>
+    <message>
+        <source>Small tunnels</source>
+        <translation>Tunailean beaga</translation>
+    </message>
+    <message>
+        <source>Medium tunnels</source>
+        <translation>Tunailean meadhanach</translation>
+    </message>
+    <message>
+        <source>Seed</source>
+        <translation>Sìol</translation>
+    </message>
+    <message>
+        <source>Map type:</source>
+        <translation>Seòrsa a&apos; mhapa:</translation>
+    </message>
+    <message>
+        <source>Image map</source>
+        <translation>Mapa deilbh</translation>
+    </message>
+    <message>
+        <source>Mission map</source>
+        <translation>Mapa misein</translation>
+    </message>
+    <message>
+        <source>Hand-drawn</source>
+        <translation>Air a tharraing a làimh</translation>
+    </message>
+    <message>
+        <source>Randomly generated</source>
+        <translation>Air a ghintinn air thuaiream</translation>
+    </message>
+    <message>
+        <source>Random maze</source>
+        <translation>Cuartan air thuaiream</translation>
+    </message>
+    <message>
+        <source>Random</source>
+        <translation>Air thuaiream</translation>
+    </message>
+    <message>
+        <source>Map preview:</source>
+        <translation>Ro-shealladh air a&apos; mhapa:</translation>
+    </message>
+    <message>
+        <source>Load map drawing</source>
+        <translation>Luchdaich tarraing mapa</translation>
+    </message>
+    <message>
+        <source>Edit map drawing</source>
+        <translation>Deasaich tarraing mapa</translation>
+    </message>
+    <message>
+        <source>Small islands</source>
+        <translation>Eileanan beaga</translation>
+    </message>
+    <message>
+        <source>Medium islands</source>
+        <translation>Eileanan meadhanach</translation>
+    </message>
+    <message>
+        <source>Large islands</source>
+        <translation>Eileanan mòra</translation>
+    </message>
+    <message>
+        <source>Map size:</source>
+        <translation>Meud a&apos; mhapa:</translation>
+    </message>
+    <message>
+        <source>Maze style:</source>
+        <translation>Stoidhle a&apos; chuartain:</translation>
+    </message>
+    <message>
+        <source>Mission:</source>
+        <translation>Misean:</translation>
+    </message>
+    <message>
+        <source>Map:</source>
+        <translation>Mapa:</translation>
+    </message>
+    <message>
+        <source>Load drawn map</source>
+        <translation>Luchdaich mapa air a tharraing a làimh</translation>
+    </message>
+    <message>
+        <source>Drawn Maps</source>
+        <translation>Mapaichean air an tarraing a làimh</translation>
+    </message>
+    <message>
+        <source>All files</source>
+        <translation>A h-uile faidhle</translation>
+    </message>
+    <message>
+        <source>Large tunnels</source>
+        <translation>Tunailean mòra</translation>
+    </message>
+    <message>
+        <source>Theme: %1</source>
+        <translation>Ùrlar: %1</translation>
+    </message>
+    <message>
+        <source>Random perlin</source>
+        <translation>Perlin tuaireamach</translation>
+    </message>
+    <message>
+        <source>Style:</source>
+        <translation>Stoidhle:</translation>
+    </message>
+</context>
+<context>
+    <name>HWNetServersModel</name>
+    <message>
+        <source>Title</source>
+        <translation>Tiotal</translation>
+    </message>
+    <message>
+        <source>IP</source>
+        <translation>IP</translation>
+    </message>
+    <message>
+        <source>Port</source>
+        <translation>Port</translation>
+    </message>
+</context>
+<context>
+    <name>HWNewNet</name>
+    <message>
+        <source>The host was not found. Please check the host name and port settings.</source>
+        <translation>Cha deach an t-òstair a lorg. Dearbhaich ainm an òstair agus roghainnean a&apos; phuirt.</translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation>Chaidh an ceangal a dhiùltadh</translation>
+    </message>
+    <message>
+        <source>Room destroyed</source>
+        <translation>Chaidh an seòmar a mhilleadh</translation>
+    </message>
+    <message>
+        <source>Quit reason: </source>
+        <translation>Abhbhar fàgail:</translation>
+    </message>
+    <message>
+        <source>You got kicked</source>
+        <translation>Fhuair thu a&apos; bhog</translation>
+    </message>
+    <message>
+        <source>%1 *** %2 has joined the room</source>
+        <translation>Thàinig %1 *** %2 a-steach dhan t-seòmar</translation>
+    </message>
+    <message>
+        <source>%1 *** %2 has joined</source>
+        <translation type="unfinished"/>
+    </message>
+    <message>
+        <source>%1 *** %2 has left (%3)</source>
+        <translation>Dh&apos;fhalbh %1 *** %2  (%3)</translation>
+    </message>
+    <message>
+        <source>%1 *** %2 has left</source>
+        <translation>Dh&apos;fhalbh %1 *** %2</translation>
+    </message>
+    <message>
+        <source>User quit</source>
+        <translation>Dh&apos;fhàg an cleachdaiche an-seo</translation>
+    </message>
+    <message>
+        <source>Remote host has closed connection</source>
+        <translation>Dhùin an t-òstair cèin an ceangal</translation>
+    </message>
+    <message>
+        <source>The server is too old. Disconnecting now.</source>
+        <translation>Tha am frithealaiche ro shean. &apos;Ga dhì-cheangal a-nis.</translation>
+    </message>
+    <message>
+        <source>Server authentication error</source>
+        <translation>Mearachd dearbhadh an fhrithealaiche</translation>
+    </message>
+</context>
+<context>
+    <name>HWPasswordDialog</name>
+    <message>
+        <source>Login</source>
+        <translation>Logadh a-steach</translation>
+    </message>
+    <message>
+        <source>To connect to the server, please log in.
+
+If you don't have an account on www.hedgewars.org,
+just enter your nickname.</source>
+        <translation>Log a-steach gus ceangal ris an fhrithealaiche.
+
+Cha leig thu leas ach far-ainm a chur a-steach
+mur eil cunntas air www.hedgewars.org agad.</translation>
+    </message>
+    <message>
+        <source>Nickname:</source>
+        <translation>Far-ainm:</translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation>Facal-faire:</translation>
+    </message>
+</context>
+<context>
+    <name>HWUploadVideoDialog</name>
+    <message>
+        <source>Upload video</source>
+        <translation>Luchdaidh suas video</translation>
+    </message>
+    <message>
+        <source>Upload</source>
+        <translation>Luchdadh suas</translation>
+    </message>
+</context>
+<context>
+    <name>HatButton</name>
+    <message>
+        <source>Change hat (%1)</source>
+        <translation>Cuir ad eile ort (%1)</translation>
+    </message>
+</context>
+<context>
+    <name>HatPrompt</name>
+    <message>
+        <source>Cancel</source>
+        <translation>Sguir dheth</translation>
+    </message>
+    <message>
+        <source>Use selected hat</source>
+        <translation>Cleachd an ad a thagh thu</translation>
+    </message>
+    <message>
+        <source>Search for a hat:</source>
+        <translation>Lorg ad:</translation>
+    </message>
+</context>
+<context>
+    <name>KB</name>
+    <message>
+        <source>SDL_ttf returned error while rendering text, most propably it is related to the bug in freetype2. It&apos;s recommended to update your freetype lib.</source>
+        <translation type="unfinished"/>
+    </message>
+</context>
+<context>
+    <name>KeyBinder</name>
+    <message>
+        <source>Category</source>
+        <translation>Roinn-seòrsa</translation>
+    </message>
+</context>
+<context>
+    <name>LibavInteraction</name>
+    <message>
+        <source>Audio: </source>
+        <translation>Fuaim:</translation>
+    </message>
+    <message>
+        <source>unknown</source>
+        <translation>chan eil fhios</translation>
+    </message>
+    <message>
+        <source>Duration: %1m %2s</source>
+        <translation>Faide: %1m %2d</translation>
+    </message>
+    <message>
+        <source>Video: %1x%2</source>
+        <translation>Video: %1x%2</translation>
+    </message>
+    <message>
+        <source>%1 fps</source>
+        <translation>%1 fps</translation>
+    </message>
+</context>
+<context>
+    <name>MapModel</name>
+    <message>
+        <source>No description available.</source>
+        <translation>Chan eil tuairisgeul ri làimh.</translation>
+    </message>
+</context>
+<context>
+    <name>PageAdmin</name>
+    <message>
+        <source>Clear Accounts Cache</source>
+        <translation>Falamhaich tasgadan nan cunntasan</translation>
+    </message>
+    <message>
+        <source>Fetch data</source>
+        <translation>Faigh dàta</translation>
+    </message>
+    <message>
+        <source>Server message for latest version:</source>
+        <translation>Teachdaireachd an fhrithealaiche airson an tionndaidh as ùire:</translation>
+    </message>
+    <message>
+        <source>Server message for previous versions:</source>
+        <translation>Teachdaireachd an fhrithealaiche airson nan tionndaidhean roimhe:</translation>
+    </message>
+    <message>
+        <source>Latest version protocol number:</source>
+        <translation>Àireamh a&apos; phròtacail as ùire:</translation>
+    </message>
+    <message>
+        <source>MOTD preview:</source>
+        <translation>Ro-shealladh air maidse an latha:</translation>
+    </message>
+    <message>
+        <source>Set data</source>
+        <translation>Suidhich an dàta</translation>
+    </message>
+    <message>
+        <source>General</source>
+        <translation>Coitcheann</translation>
+    </message>
+    <message>
+        <source>Bans</source>
+        <translation>Toirmeasg</translation>
+    </message>
+    <message>
+        <source>IP/Nick</source>
+        <translation>IP/Far-ainm</translation>
+    </message>
+    <message>
+        <source>Expiration</source>
+        <translation>Àm a dh&apos;fhalbhas an ùine air</translation>
+    </message>
+    <message>
+        <source>Reason</source>
+        <translation>Adhbhar</translation>
+    </message>
+    <message>
+        <source>Refresh</source>
+        <translation>Ath-nuadhaich</translation>
+    </message>
+    <message>
+        <source>Add</source>
+        <translation>Cuir ris</translation>
+    </message>
+    <message>
+        <source>Remove</source>
+        <translation>Thoir air falbh</translation>
+    </message>
+</context>
+<context>
+    <name>PageConnecting</name>
+    <message>
+        <source>Connecting...</source>
+        <translation>&apos;Ga cheangal...</translation>
+    </message>
+</context>
+<context>
+    <name>PageDataDownload</name>
+    <message>
+        <source>Loading, please wait.</source>
+        <translation>&apos;Ga cheangal, fuirich ort.</translation>
+    </message>
+    <message>
+        <source>This page requires an internet connection.</source>
+        <translation>Tha an duilleag seo feumach air ceangal dhan eadar-lìn.</translation>
+    </message>
+    <message>
+        <source>Open packages directory</source>
+        <translation>Fosgail pasgan nam pacaidean</translation>
+    </message>
+</context>
+<context>
+    <name>PageDrawMap</name>
+    <message>
+        <source>Undo</source>
+        <translation>Neo-dhèan</translation>
+    </message>
+    <message>
+        <source>Clear</source>
+        <translation>Falamhaich</translation>
+    </message>
+    <message>
+        <source>Load</source>
+        <translation>Luchdaich</translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation>Sàbhail</translation>
+    </message>
+    <message>
+        <source>Load drawn map</source>
+        <translation>Luchdaich mapa air a tharraing</translation>
+    </message>
+    <message>
+        <source>Save drawn map</source>
+        <translation>Sàbhail mapa air a tharraing</translation>
+    </message>
+    <message>
+        <source>Drawn Maps</source>
+        <translation>Mapaichean air an tarraing</translation>
+    </message>
+    <message>
+        <source>All files</source>
+        <translation>A h-uile faidhle</translation>
+    </message>
+    <message>
+        <source>Eraser</source>
+        <translation>Suathan</translation>
+    </message>
+    <message>
+        <source>Polyline</source>
+        <translation>Loidhne ioma-cheàrnach</translation>
+    </message>
+    <message>
+        <source>Rectangle</source>
+        <translation>Ceart-cheàrnach</translation>
+    </message>
+    <message>
+        <source>Ellipse</source>
+        <translation>Eileaps</translation>
+    </message>
+    <message>
+        <source>Optimize</source>
+        <translation>Pisich</translation>
+    </message>
+</context>
+<context>
+    <name>PageEditTeam</name>
+    <message>
+        <source>General</source>
+        <translation>Coitcheann</translation>
+    </message>
+    <message>
+        <source>Select an action to choose a custom key bind for this team</source>
+        <translation>Tagh gnìomh gus nasgadh ri iuchair ghnàthaichte a thaghadh airson an sgioba seo</translation>
+    </message>
+    <message>
+        <source>Use my default</source>
+        <translation>Cleachd na bun-roghainnean agam</translation>
+    </message>
+    <message>
+        <source>Reset all binds</source>
+        <translation>Ath-shuidhich gach nasgadh</translation>
+    </message>
+    <message>
+        <source>Custom Controls</source>
+        <translation>Uidheaman-smachd gnàthaichte</translation>
+    </message>
+    <message>
+        <source>Hat</source>
+        <translation>Ad</translation>
+    </message>
+    <message>
+        <source>Name</source>
+        <translation>Ainm</translation>
+    </message>
+    <message>
+        <source>This hedgehog&apos;s name</source>
+        <translation>Ainm na gràineige seo</translation>
+    </message>
+    <message>
+        <source>Randomize this hedgehog&apos;s name</source>
+        <translation>Thoir ainm air thuaiream air a&apos; ghràineag seo</translation>
+    </message>
+    <message>
+        <source>Random Team</source>
+        <translation>Sgioba air thuaiream</translation>
+    </message>
+</context>
+<context>
+    <name>PageGameStats</name>
+    <message>
+        <source>Details</source>
+        <translation>Fiosrachadh</translation>
+    </message>
+    <message>
+        <source>Health graph</source>
+        <translation>Graf na slàinte</translation>
+    </message>
+    <message>
+        <source>Ranking</source>
+        <translation>Rangachadh</translation>
+    </message>
+    <message numerus="yes">
+        <source>The best shot award was won by &lt;b&gt;%1&lt;/b&gt; with &lt;b&gt;%2&lt;/b&gt; pts.</source>
+        <translation><numerusform>Bhuannaich &lt;b&gt;%1&lt;/b&gt; duais an losgaidh as fhearr le &lt;b&gt;%2&lt;/b&gt; phuing.</numerusform><numerusform>Bhuannaich &lt;b&gt;%1&lt;/b&gt; duais an losgaidh as fhearr le &lt;b&gt;%2&lt;/b&gt; phuing.</numerusform><numerusform>Bhuannaich &lt;b&gt;%1&lt;/b&gt; duais an losgaidh as fhearr le &lt;b&gt;%2&lt;/b&gt; puingean.</numerusform><numerusform>Bhuannaich &lt;b&gt;%1&lt;/b&gt; duais an losgaidh as fhearr le &lt;b&gt;%2&lt;/b&gt; puing.</numerusform></translation>
+    </message>
+    <message numerus="yes">
+        <source>The best killer is &lt;b&gt;%1&lt;/b&gt; with &lt;b&gt;%2&lt;/b&gt; kills in a turn.</source>
+        <translation><numerusform>Is &lt;b&gt;%1&lt;/b&gt; am marbhaiche as fhearr le &lt;b&gt;%2&lt;/b&gt; mharbhadh ann an cuairt.</numerusform><numerusform>Is &lt;b&gt;%1&lt;/b&gt; am marbhaiche as fhearr le &lt;b&gt;%2&lt;/b&gt; mharbhadh ann an cuairt.</numerusform><numerusform>Is &lt;b&gt;%1&lt;/b&gt; am marbhaiche as fhearr le &lt;b&gt;%2&lt;/b&gt; marbhaidhean ann an cuairt.</numerusform><numerusform>Is &lt;b&gt;%1&lt;/b&gt; am marbhaiche as fhearr le &lt;b&gt;%2&lt;/b&gt; marbhadh ann an cuairt.</numerusform></translation>
+    </message>
+    <message numerus="yes">
+        <source>A total of &lt;b&gt;%1&lt;/b&gt; hedgehog(s) were killed during this round.</source>
+        <translation><numerusform>Chaidh &lt;b&gt;%1&lt;/b&gt; ghràineag a mharbhadh uile gu lèir sa chuairt seo.</numerusform><numerusform>Chaidh &lt;b&gt;%1&lt;/b&gt; ghràineag a mharbhadh uile gu lèir sa chuairt seo.</numerusform><numerusform>Chaidh &lt;b&gt;%1&lt;/b&gt; gràineagan a mharbhadh uile gu lèir sa chuairt seo.</numerusform><numerusform>Chaidh &lt;b&gt;%1&lt;/b&gt; gràineag a mharbhadh uile gu lèir sa chuairt seo.</numerusform></translation>
+    </message>
+    <message numerus="yes">
+        <source>(%1 kill)</source>
+        <translation><numerusform>(%1 mharbhadh)</numerusform><numerusform>(%1 mharbhadh)</numerusform><numerusform>(%1 marbhaidhean)</numerusform><numerusform>(%1 marbhadh)</numerusform></translation>
+    </message>
+    <message numerus="yes">
+        <source>&lt;b&gt;%1&lt;/b&gt; thought it&apos;s good to shoot his own hedgehogs with &lt;b&gt;%2&lt;/b&gt; pts.</source>
+        <translation><numerusform>Bha &lt;b&gt;%1&lt;/b&gt; dhen bheachd gum b&apos; fheairrde e na gràineagan aige fhèin a mharbhadh le &lt;b&gt;%2&lt;/b&gt; phuing.</numerusform><numerusform>Bha &lt;b&gt;%1&lt;/b&gt; dhen bheachd gum b&apos; fheairrde e na gràineagan aige fhèin a mharbhadh le &lt;b&gt;%2&lt;/b&gt; phuing.</numerusform><numerusform>Bha &lt;b&gt;%1&lt;/b&gt; dhen bheachd gum b&apos; fheairrde e na gràineagan aige fhèin a mharbhadh le &lt;b&gt;%2&lt;/b&gt; puingean.</numerusform><numerusform>Bha &lt;b&gt;%1&lt;/b&gt; dhen bheachd gum b&apos; fheairrde e na gràineagan aige fhèin a mharbhadh le &lt;b&gt;%2&lt;/b&gt; puing.</numerusform></translation>
+    </message>
+    <message numerus="yes">
+        <source>&lt;b&gt;%1&lt;/b&gt; killed &lt;b&gt;%2&lt;/b&gt; of his own hedgehogs.</source>
+        <translation><numerusform>Mharbh &lt;b&gt;%1&lt;/b&gt; &lt;b&gt;%2&lt;/b&gt; dhe na gràineagan aige fhèin.</numerusform><numerusform>Mharbh &lt;b&gt;%1&lt;/b&gt; &lt;b&gt;%2&lt;/b&gt; dhe na gràineagan aige fhèin.</numerusform><numerusform>Mharbh &lt;b&gt;%1&lt;/b&gt; &lt;b&gt;%2&lt;/b&gt; dhe na gràineagan aige fhèin.</numerusform><numerusform>Mharbh &lt;b&gt;%1&lt;/b&gt; &lt;b&gt;%2&lt;/b&gt; dhe na gràineagan aige fhèin.</numerusform></translation>
+    </message>
+    <message numerus="yes">
+        <source>&lt;b&gt;%1&lt;/b&gt; was scared and skipped turn &lt;b&gt;%2&lt;/b&gt; times.</source>
+        <translation><numerusform>Thàinig an t-eagal air &lt;b&gt;%1&lt;/b&gt; agus leig e seachad a chuairt &lt;b&gt;%2&lt;/b&gt; turas.</numerusform><numerusform>Thàinig an t-eagal air &lt;b&gt;%1&lt;/b&gt; agus leig e seachad a chuairt &lt;b&gt;%2&lt;/b&gt; thuras.</numerusform><numerusform>Thàinig an t-eagal air &lt;b&gt;%1&lt;/b&gt; agus leig e seachad a chuairt &lt;b&gt;%2&lt;/b&gt; tursan.</numerusform><numerusform>Thàinig an t-eagal air &lt;b&gt;%1&lt;/b&gt; agus leig e seachad a chuairt &lt;b&gt;%2&lt;/b&gt; turas.</numerusform></translation>
+    </message>
+    <message>
+        <source>Play again</source>
+        <translation>Cluich a-rithist</translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation>Sàbhail</translation>
+    </message>
+    <message numerus="yes">
+        <source>(%1 %2)</source>
+        <translation><numerusform>(%1 %2)</numerusform><numerusform>(%1 %2)</numerusform><numerusform>(%1 %2)</numerusform><numerusform>(%1 %2)</numerusform></translation>
+    </message>
+</context>
+<context>
+    <name>PageInGame</name>
+    <message>
+        <source>In game...</source>
+        <translation>Sa gheama...</translation>
+    </message>
+</context>
+<context>
+    <name>PageInfo</name>
+    <message>
+        <source>Open the snapshot folder</source>
+        <translation>Fosgail pasgan nan glacaidhean-sgrìn</translation>
+    </message>
+</context>
+<context>
+    <name>PageMain</name>
+    <message>
+        <source>Downloadable Content</source>
+        <translation>Susbaint ri luchdadh a-nuas</translation>
+    </message>
+    <message>
+        <source>Play a game on a single computer</source>
+        <translation>Cluich geama air an aon choimpiutair</translation>
+    </message>
+    <message>
+        <source>Play a game across a network</source>
+        <translation>Cluich geama air lìonra</translation>
+    </message>
+    <message>
+        <source>Read about who is behind the Hedgewars Project</source>
+        <translation>Leugh air cò tha air cùlaibh a&apos; phròiseict Hedgewars</translation>
+    </message>
+    <message>
+        <source>Leave a feedback here reporting issues, suggesting features or just saying how you like Hedgewars</source>
+        <translation>Fàg beachd an-seo mu dhuilgheadasan, molaidhean air feartan no innis dhuinn ciamar a tha Hedgewars a&apos; chòrdadh riut</translation>
+    </message>
+    <message>
+        <source>Access the user created content downloadable from our website</source>
+        <translation>Inntrig susbaint a rinn cleachdaichean &apos;s a ghabhas luchdadh a-nuas on làrach-lìn againn</translation>
+    </message>
+    <message>
+        <source>Exit game</source>
+        <translation>Fàg an geama</translation>
+    </message>
+    <message>
+        <source>Manage videos recorded from game</source>
+        <translation>Stiùirich na videothan a chaidh a chlàradh on gheama</translation>
+    </message>
+    <message>
+        <source>Edit game preferences</source>
+        <translation>Deasaich roghainnean a&apos; gheama</translation>
+    </message>
+    <message>
+        <source>Play a game across a local area network</source>
+        <translation>Cluich geama air lìonra ionadail</translation>
+    </message>
+    <message>
+        <source>Play a game on an official server</source>
+        <translation>Cluich geama air frithealaiche oifigeil</translation>
+    </message>
+    <message>
+        <source>Feedback</source>
+        <translation>Beachd thugainn</translation>
+    </message>
+    <message>
+        <source>Play local network game</source>
+        <translation>Cluich geama air an lìonra ionadail</translation>
+    </message>
+    <message>
+        <source>Play official network game</source>
+        <translation>Cluich geama lìonraidh oifigeil</translation>
+    </message>
+</context>
+<context>
+    <name>PageMultiplayer</name>
+    <message>
+        <source>Start</source>
+        <translation>Tòisich</translation>
+    </message>
+    <message>
+        <source>Edit game preferences</source>
+        <translation>Deasaich roghainnean a&apos; gheama</translation>
+    </message>
+</context>
+<context>
+    <name>PageNetGame</name>
+    <message>
+        <source>Control</source>
+        <translation type="unfinished"/>
+    </message>
+    <message>
+        <source>Edit game preferences</source>
+        <translation>Deasaich roghainnean a&apos; gheama</translation>
+    </message>
+    <message>
+        <source>Start</source>
+        <translation>Tòisich</translation>
+    </message>
+    <message>
+        <source>Update</source>
+        <translation>Ùraich</translation>
+    </message>
+    <message>
+        <source>Room controls</source>
+        <translation>Uidheaman-smachd an t-seòmair</translation>
+    </message>
+</context>
+<context>
+    <name>PageNetServer</name>
+    <message>
+        <source>Click here for details</source>
+        <translation>Briog an-seo airson barrachd fiosrachaidh</translation>
+    </message>
+    <message>
+        <source>Insert your address here</source>
+        <translation>Cuir an seòladh agad a-steach an-seo</translation>
+    </message>
+</context>
+<context>
+    <name>PageOptions</name>
+    <message>
+        <source>New team</source>
+        <translation>Sgioba ùr</translation>
+    </message>
+    <message>
+        <source>Edit team</source>
+        <translation>Deasaich an sgioba</translation>
+    </message>
+    <message>
+        <source>Delete team</source>
+        <translation>Sguab às an sgioba</translation>
+    </message>
+    <message>
+        <source>You can&apos;t edit teams from team selection. Go back to main menu to add, edit or delete teams.</source>
+        <translation>Chan urrainn dhut sgioba a dheasachadh o thaghadh nan sgioba. Till dhan phrìomh chlàr-taice gus sgioba a chur ris, a dheasachadh no a sguabadh às.</translation>
+    </message>
+    <message>
+        <source>New scheme</source>
+        <translation>Sgeama ùr</translation>
+    </message>
+    <message>
+        <source>Edit scheme</source>
+        <translation>Deasaich an sgeama</translation>
+    </message>
+    <message>
+        <source>Delete scheme</source>
+        <translation>Sguab às an sgeama</translation>
+    </message>
+    <message>
+        <source>New weapon set</source>
+        <translation>Seata arm ùr</translation>
+    </message>
+    <message>
+        <source>Edit weapon set</source>
+        <translation>Deasach seata nan arm</translation>
+    </message>
+    <message>
+        <source>Delete weapon set</source>
+        <translation>Sguab às seata nan arm</translation>
+    </message>
+    <message>
+        <source>Advanced</source>
+        <translation>Adhartach</translation>
+    </message>
+    <message>
+        <source>Reset to default colors</source>
+        <translation>Ath-suidhich air na dathan tùsail</translation>
+    </message>
+    <message>
+        <source>Proxy host</source>
+        <translation>Òstair a&apos; phrogsaidh</translation>
+    </message>
+    <message>
+        <source>Proxy port</source>
+        <translation>Port a&apos; phrogsaidh</translation>
+    </message>
+    <message>
+        <source>Proxy login</source>
+        <translation>Logadh a-steach a&apos; phrogsaidh</translation>
+    </message>
+    <message>
+        <source>Proxy password</source>
+        <translation>Facal-faire a&apos; phrogsaidh</translation>
+    </message>
+    <message>
+        <source>No proxy</source>
+        <translation>Gun phrogsaidh</translation>
+    </message>
+    <message>
+        <source>Socks5 proxy</source>
+        <translation>Progsaidh Socks5</translation>
+    </message>
+    <message>
+        <source>HTTP proxy</source>
+        <translation>Progsaidh HTTP</translation>
+    </message>
+    <message>
+        <source>System proxy settings</source>
+        <translation>Roghainnean progsaidh an t-siostaim</translation>
+    </message>
+    <message>
+        <source>Select an action to change what key controls it</source>
+        <translation>Tagh gnìomh gus atharrachadh dè an iuchair a chuireas smachd air</translation>
+    </message>
+    <message>
+        <source>Reset to default</source>
+        <translation>Ah-shuidhich air a&apos; bhun-roghainn</translation>
+    </message>
+    <message>
+        <source>Reset all binds</source>
+        <translation>Ath-shuidhich gach nasgadh</translation>
+    </message>
+    <message>
+        <source>Game</source>
+        <translation>Geama</translation>
+    </message>
+    <message>
+        <source>Graphics</source>
+        <translation>Grafaigeachd</translation>
+    </message>
+    <message>
+        <source>Audio</source>
+        <translation>Fuaim</translation>
+    </message>
+    <message>
+        <source>Controls</source>
+        <translation>Uidheaman-smachd</translation>
+    </message>
+    <message>
+        <source>Video Recording</source>
+        <translation>Clàradh video</translation>
+    </message>
+    <message>
+        <source>Network</source>
+        <translation>Lìonra</translation>
+    </message>
+    <message>
+        <source>Teams</source>
+        <translation>Sgiobaidhean</translation>
+    </message>
+    <message>
+        <source>Schemes</source>
+        <translation>Sgeamaichean</translation>
+    </message>
+    <message>
+        <source>Weapons</source>
+        <translation>Airm</translation>
+    </message>
+    <message>
+        <source>Frontend</source>
+        <translation>Eadar-aghaidh</translation>
+    </message>
+    <message>
+        <source>Custom colors</source>
+        <translation>Dathan gnàthaichte</translation>
+    </message>
+    <message>
+        <source>Game audio</source>
+        <translation>Fuaim a&apos; gheama</translation>
+    </message>
+    <message>
+        <source>Frontend audio</source>
+        <translation>Fuaim na h-eadar-aghaidh</translation>
+    </message>
+    <message>
+        <source>Account</source>
+        <translation>Cunntas</translation>
+    </message>
+    <message>
+        <source>Proxy settings</source>
+        <translation>Roghainnean a&apos; phrogsaidh</translation>
+    </message>
+    <message>
+        <source>Miscellaneous</source>
+        <translation>Measgaichte</translation>
+    </message>
+    <message>
+        <source>Updates</source>
+        <translation>Ùrachadh</translation>
+    </message>
+    <message>
+        <source>Check for updates</source>
+        <translation>Thoir sùil airson ùrachadh</translation>
+    </message>
+    <message>
+        <source>Video recording options</source>
+        <translation>Roghainnean clàradh video</translation>
+    </message>
+</context>
+<context>
+    <name>PagePlayDemo</name>
+    <message>
+        <source>Rename dialog</source>
+        <translation>Thoir ainm ùr air a&apos; chòmhradh</translation>
+    </message>
+    <message>
+        <source>Enter new file name:</source>
+        <translation>Cuir a-steach ainm an fhaidhle ùir:</translation>
+    </message>
+</context>
+<context>
+    <name>PageRoomsList</name>
+    <message>
+        <source>Create</source>
+        <translation type="unfinished"/>
+    </message>
+    <message>
+        <source>Join</source>
+        <translation type="unfinished"/>
+    </message>
+    <message>
+        <source>Admin features</source>
+        <translation>Feartan rianachd</translation>
+    </message>
+    <message>
+        <source>Room Name:</source>
+        <translation type="unfinished"/>
+    </message>
+    <message numerus="yes">
+        <source>%1 players online</source>
+        <translation><numerusform>%1 chluicheadair air loidhne</numerusform><numerusform>%1 chluicheadair air loidhne</numerusform><numerusform>%1 cluicheadairean air loidhne</numerusform><numerusform>%1 cluicheadair air loidhne</numerusform></translation>
+    </message>
+    <message>
+        <source>Search for a room:</source>
+        <translation>Lorg seòmar:</translation>
+    </message>
+    <message>
+        <source>Create room</source>
+        <translation>Cruthaich seòmar</translation>
+    </message>
+    <message>
+        <source>Join room</source>
+        <translation>Gabh pàirt ann an seòmar</translation>
+    </message>
+    <message>
+        <source>Room state</source>
+        <translation>Staid an t-seòmair</translation>
+    </message>
+    <message>
+        <source>Open server administration page</source>
+        <translation>Fosgail duilleag rianachd an fhrithealaiche</translation>
+    </message>
+</context>
+<context>
+    <name>PageScheme</name>
+    <message>
+        <source>Defend your fort and destroy the opponents, two team colours max!</source>
+        <translation>Dìon an dùn agad agus mill na nàimhdean, dà dhath sgioba air a char as motha!</translation>
+    </message>
+    <message>
+        <source>Teams will start on opposite sides of the terrain, two team colours max!</source>
+        <translation>Tòisichidh na sgiobaidhean taobh thall o chàch a chèile, dà dhath sgioba air a char as motha!</translation>
+    </message>
+    <message>
+        <source>Land can not be destroyed!</source>
+        <translation>Cha ghabh an tìr a mhilleadh!</translation>
+    </message>
+    <message>
+        <source>Lower gravity</source>
+        <translation>Ìslich an iom-tharraing</translation>
+    </message>
+    <message>
+        <source>Assisted aiming with laser sight</source>
+        <translation>Cuideachadh dhan amas le fradharc leusair</translation>
+    </message>
+    <message>
+        <source>All hogs have a personal forcefield</source>
+        <translation>Bidh raon forsa pearsanta aig gach gràineag</translation>
+    </message>
+    <message>
+        <source>Gain 80% of the damage you do back in health</source>
+        <translation>Buannaich slàinte le 80% dhen dochann a nì thu</translation>
+    </message>
+    <message>
+        <source>Share your opponents pain, share their damage</source>
+        <translation>Co-roinn pian &apos;s dochann nan nàimhdean</translation>
+    </message>
+    <message>
+        <source>Your hogs are unable to move, put your artillery skills to the test</source>
+        <translation>Chan urrainn dha na gràineagan agad gluasad, cuir na sgilean làmhachais agad fo dheuchainn</translation>
+    </message>
+    <message>
+        <source>Random</source>
+        <translation>Air thuaiream</translation>
+    </message>
+    <message>
+        <source>Seconds</source>
+        <translation>Diog(an)</translation>
+    </message>
+    <message>
+        <source>New</source>
+        <translation>Ùr</translation>
+    </message>
+    <message>
+        <source>Delete</source>
+        <translation>Sguab às</translation>
+    </message>
+    <message>
+        <source>Order of play is random instead of in room order.</source>
+        <translation>Tha òrdugh a&apos; chluiche air thuaiream seach &apos;na òrdugh an t-seòmair.</translation>
+    </message>
+    <message>
+        <source>Play with a King. If he dies, your side dies.</source>
+        <translation>Cluich le rìgh. Gheibh do thaobh bàs ma thèid a mharbhadh.</translation>
+    </message>
+    <message>
+        <source>Take turns placing your hedgehogs before the start of play.</source>
+        <translation>Cuir na gràineagan ann fear mu seach mus tòisich an t-sabaid.</translation>
+    </message>
+    <message>
+        <source>Ammo is shared between all teams that share a colour.</source>
+        <translation>Co-roinnidh gach sgioba air a bheil an t-aon dath an cuid connaidh.</translation>
+    </message>
+    <message>
+        <source>Disable girders when generating random maps.</source>
+        <translation>Cuir teannadairean à comas le gintinn nam mapaichean air thuaiream.</translation>
+    </message>
+    <message>
+        <source>Disable land objects when generating random maps.</source>
+        <translation>Cuir oibseactan tìre à comas le gintinn nam mapaichean air thuaiream.</translation>
+    </message>
+    <message>
+        <source>AI respawns on death.</source>
+        <translation>Tillidh an IF às dèidh a bhàis.</translation>
+    </message>
+    <message>
+        <source>All (living) hedgehogs are fully restored at the end of turn</source>
+        <translation>Gheibh gach gràineag (bheò) a slàinte air ais aig deireadh na cuairte</translation>
+    </message>
+    <message>
+        <source>Attacking does not end your turn.</source>
+        <translation>Cha chuir ionnsaigh crìoch air a&apos; chuairt agad.</translation>
+    </message>
+    <message>
+        <source>Weapons are reset to starting values each turn.</source>
+        <translation>Thèid na h-airm ath-shuidheachadh air na luachan tùsail aca aig toiseach gach cuairte.</translation>
+    </message>
+    <message>
+        <source>Each hedgehog has its own ammo. It does not share with the team.</source>
+        <translation>Tha connadh fa leth aig gach gràineag. Cha cho-roinn i leis an sgioba.</translation>
+    </message>
+    <message>
+        <source>You will not have to worry about wind anymore.</source>
+        <translation>Cha bhi dragh ort mun ghaoth tuilleadh.</translation>
+    </message>
+    <message>
+        <source>Wind will affect almost everything.</source>
+        <translation>Bidh buair aig a&apos; ghaoth air cha mhòr a h-uile rud.</translation>
+    </message>
+    <message>
+        <source>Copy</source>
+        <translation>Dèan lethbhreac</translation>
+    </message>
+    <message>
+        <source>Teams in each clan take successive turns sharing their turn time.</source>
+        <translation>Cluichidh buill sgioba fear mu seach, a&apos; co-roinneadh ùine nan cuairtean aca.</translation>
+    </message>
+    <message>
+        <source>Add an indestructible border around the terrain</source>
+        <translation>Cuir iomall nach gabh milleadh mun chruth-tìre</translation>
+    </message>
+    <message>
+        <source>Add an indestructible border along the bottom</source>
+        <translation>Cuir iomall nach gabh milleadh ris a&apos; bhonn</translation>
+    </message>
+    <message>
+        <source>None (Default)</source>
+        <translation>Gun gin (bun-roghainn)</translation>
+    </message>
+    <message>
+        <source>Wrap (World wraps)</source>
+        <translation>Pasgadh (pasgaichidh an saoghal)</translation>
+    </message>
+    <message>
+        <source>Bounce (Edges reflect)</source>
+        <translation>Bogadh (nì na-h-oirean ath-thilgeil)</translation>
+    </message>
+    <message>
+        <source>Sea (Edges connect to sea)</source>
+        <translation>Muir (ceanglaidh na h-oirean ris a&apos; mhuir)</translation>
+    </message>
+</context>
+<context>
+    <name>PageSelectWeapon</name>
+    <message>
+        <source>Default</source>
+        <translation>Bun-roghainn</translation>
+    </message>
+    <message>
+        <source>Delete</source>
+        <translation>Sguab às</translation>
+    </message>
+    <message>
+        <source>New</source>
+        <translation>Ùr</translation>
+    </message>
+    <message>
+        <source>Copy</source>
+        <translation>Dèan lethbhreac</translation>
+    </message>
+</context>
+<context>
+    <name>PageSinglePlayer</name>
+    <message>
+        <source>Play a quick game against the computer with random settings</source>
+        <translation>Cluich geama luath an aghaidh a&apos; hoimpiutair le roghainnean air thuaiream</translation>
+    </message>
+    <message>
+        <source>Play a hotseat game against your friends, or AI teams</source>
+        <translation>Cluich geama ionadail an aghaidh do charaidean no sgiobaidhean IF</translation>
+    </message>
+    <message>
+        <source>Campaign Mode</source>
+        <translation>Modh iomairte</translation>
+    </message>
+    <message>
+        <source>Practice your skills in a range of training missions</source>
+        <translation>Cuir gleus air na sgilean agad le miseanan trèanaidh</translation>
+    </message>
+    <message>
+        <source>Watch recorded demos</source>
+        <translation>Coimhead air demo clàraichte</translation>
+    </message>
+    <message>
+        <source>Load a previously saved game</source>
+        <translation>Luchdaich geama air a shàbhaladh</translation>
+    </message>
+</context>
+<context>
+    <name>PageTraining</name>
+    <message>
+        <source>No description available</source>
+        <translation>Chan eil tuairisgeul ri làimh</translation>
+    </message>
+    <message>
+        <source>Select a mission!</source>
+        <translation>Tagh misean!</translation>
+    </message>
+    <message>
+        <source>Pick the mission or training to play</source>
+        <translation>Tagh am misean no trèanadh airson cluiche</translation>
+    </message>
+    <message>
+        <source>Start fighting</source>
+        <translation>Tòisich air sabaid</translation>
+    </message>
+</context>
+<context>
+    <name>PageVideos</name>
+    <message>
+        <source>Name</source>
+        <translation>Ainm</translation>
+    </message>
+    <message>
+        <source>Size</source>
+        <translation>Meud</translation>
+    </message>
+    <message numerus="yes">
+        <source>%1 bytes</source>
+        <translation><numerusform>%1 bhaidht</numerusform><numerusform>%1 bhaidht</numerusform><numerusform>%1 baidhtichean</numerusform><numerusform>%1 baidht</numerusform></translation>
+    </message>
+    <message>
+        <source>(in progress...)</source>
+        <translation>(a&apos; dol air adhart...)</translation>
+    </message>
+    <message>
+        <source>encoding</source>
+        <translation>&apos;ga chòdachadh</translation>
+    </message>
+    <message>
+        <source>uploading</source>
+        <translation>&apos;ga luchdadh suas</translation>
+    </message>
+    <message>
+        <source>Date: %1</source>
+        <translation>Ceann-là: %1</translation>
+    </message>
+    <message>
+        <source>Size: %1</source>
+        <translation>Meud: %1</translation>
+    </message>
+</context>
+<context>
+    <name>QAction</name>
+    <message>
+        <source>Kick</source>
+        <translation>Thoir a&apos; bhròg dha</translation>
+    </message>
+    <message>
+        <source>Info</source>
+        <translation>Fiosrachadh</translation>
+    </message>
+    <message>
+        <source>Restrict Joins</source>
+        <translation>Cuingich a&apos; bhallrachd</translation>
+    </message>
+    <message>
+        <source>Restrict Team Additions</source>
+        <translation>Cuingich cur ris sgiobaidhean</translation>
+    </message>
+    <message>
+        <source>Ban</source>
+        <translation>Toirmisg</translation>
+    </message>
+    <message>
+        <source>Follow</source>
+        <translation>Lean air</translation>
+    </message>
+    <message>
+        <source>Ignore</source>
+        <translation>Leig seachad</translation>
+    </message>
+    <message>
+        <source>Add friend</source>
+        <translation>Cuir ris na caraidean</translation>
+    </message>
+    <message>
+        <source>Unignore</source>
+        <translation>Na leig seachad tuilleadh</translation>
+    </message>
+    <message>
+        <source>Remove friend</source>
+        <translation>Thoir air falbh o na caraidean</translation>
+    </message>
+    <message>
+        <source>Update</source>
+        <translation type="unfinished"/>
+    </message>
+    <message>
+        <source>Restrict Unregistered Players Join</source>
+        <translation>Cuingich cluicheadairean gun chlàradh</translation>
+    </message>
+    <message>
+        <source>Show games in lobby</source>
+        <translation>Seall geamannan san lobaidh</translation>
+    </message>
+    <message>
+        <source>Show games in-progress</source>
+        <translation>Seall na geamannan a tha a&apos; dol</translation>
+    </message>
+</context>
+<context>
+    <name>QCheckBox</name>
+    <message>
+        <source>Check for updates at startup</source>
+        <translation>Lorg airson ùrachaidhean leis an tòiseachadh</translation>
+    </message>
+    <message>
+        <source>Fullscreen</source>
+        <translation>Làn-sgrìn</translation>
+    </message>
+    <message>
+        <source>Show FPS</source>
+        <translation>Seall FPS</translation>
+    </message>
+    <message>
+        <source>Alternative damage show</source>
+        <translation>Sealladh eile air dochann</translation>
+    </message>
+    <message>
+        <source>Append date and time to record file name</source>
+        <translation>Cuir ceann-là &apos;s àm ri ainm faidhle a&apos; chlàraidh</translation>
+    </message>
+    <message>
+        <source>Show ammo menu tooltips</source>
+        <translation>Seall gliocasan ann an clàr-taice a&apos; chonnaidh</translation>
+    </message>
+    <message>
+        <source>Save password</source>
+        <translation>Sàbhail am facal-faire</translation>
+    </message>
+    <message>
+        <source>Save account name and password</source>
+        <translation>Sàbhail ainm a&apos; chunntais &apos;s am facal-faire</translation>
+    </message>
+    <message>
+        <source>Video is private</source>
+        <translation>Tha a&apos; video prìobhaideach</translation>
+    </message>
+    <message>
+        <source>Record audio</source>
+        <translation>Clàraich an fhuaim</translation>
+    </message>
+    <message>
+        <source>Use game resolution</source>
+        <translation>Cleachd dùmhlachd-bhreacaidh a&apos; gheama</translation>
+    </message>
+    <message>
+        <source>Visual effects</source>
+        <translation>Èifeachdan lèirsinne</translation>
+    </message>
+    <message>
+        <source>Sound</source>
+        <translation>Fuaim</translation>
+    </message>
+    <message>
+        <source>In-game sound effects</source>
+        <translation>Èifeachdan fuaime sa gheama</translation>
+    </message>
+    <message>
+        <source>Music</source>
+        <translation>Ceòl</translation>
+    </message>
+    <message>
+        <source>In-game music</source>
+        <translation>Ceòl sa gheama</translation>
+    </message>
+    <message>
+        <source>Frontend sound effects</source>
+        <translation>Èifeachan-fuaime na h-eadar-aghaidh</translation>
+    </message>
+    <message>
+        <source>Frontend music</source>
+        <translation>Ceòl na h-eadar-aghaidh</translation>
+    </message>
+    <message>
+        <source>Team</source>
+        <translation>Sgioba</translation>
+    </message>
+    <message>
+        <source>Enable team tags by default</source>
+        <translation>Cuir tagaichean sgioba an comas o thùs</translation>
+    </message>
+    <message>
+        <source>Hog</source>
+        <translation>Gràineag</translation>
+    </message>
+    <message>
+        <source>Enable hedgehog tags by default</source>
+        <translation>Cuir tagaichean gràineige an comas o thùs</translation>
+    </message>
+    <message>
+        <source>Health</source>
+        <translation>Slàinte</translation>
+    </message>
+    <message>
+        <source>Enable health tags by default</source>
+        <translation>Cuir tagaichean slàinte an comas o thùs</translation>
+    </message>
+    <message>
+        <source>Translucent</source>
+        <translation>Trìd-shoilleir</translation>
+    </message>
+    <message>
+        <source>Enable translucent tags by default</source>
+        <translation>Cuir tagaichean trìd-shoilleir an comas o thùs</translation>
+    </message>
+</context>
+<context>
+    <name>QComboBox</name>
+    <message>
+        <source>Human</source>
+        <translation>Daonna</translation>
+    </message>
+    <message>
+        <source>Level</source>
+        <translation>Leibheil</translation>
+    </message>
+    <message>
+        <source>(System default)</source>
+        <translation>(Bun-roghainn an t-siostaim)</translation>
+    </message>
+    <message>
+        <source>Community</source>
+        <translation>Coimhearsnachd</translation>
+    </message>
+    <message>
+        <source>Disabled</source>
+        <translation>À comas</translation>
+    </message>
+    <message>
+        <source>Red/Cyan</source>
+        <translation>Dearg/Saidhean</translation>
+    </message>
+    <message>
+        <source>Cyan/Red</source>
+        <translation>Saidhean/Dearg</translation>
+    </message>
+    <message>
+        <source>Red/Blue</source>
+        <translation>Dearg/Gorm</translation>
+    </message>
+    <message>
+        <source>Blue/Red</source>
+        <translation>Gorm/Dearg</translation>
+    </message>
+    <message>
+        <source>Red/Green</source>
+        <translation>Dearg/Uaine</translation>
+    </message>
+    <message>
+        <source>Green/Red</source>
+        <translation>Uaine/Dearg</translation>
+    </message>
+    <message>
+        <source>Side-by-side</source>
+        <translation>Taobh ri taobh</translation>
+    </message>
+    <message>
+        <source>Top-Bottom</source>
+        <translation>Barr gu bonn</translation>
+    </message>
+    <message>
+        <source>Red/Cyan grayscale</source>
+        <translation>Liath-sgèile dearg/saidhean</translation>
+    </message>
+    <message>
+        <source>Cyan/Red grayscale</source>
+        <translation>Liath-sgèile saidhean/dearg</translation>
+    </message>
+    <message>
+        <source>Red/Blue grayscale</source>
+        <translation>Liath-sgèile dearg/gorm</translation>
+    </message>
+    <message>
+        <source>Blue/Red grayscale</source>
+        <translation>Liath-sgèile gorm/dearg</translation>
+    </message>
+    <message>
+        <source>Red/Green grayscale</source>
+        <translation>Liath-sgèile dearg/uaine</translation>
+    </message>
+    <message>
+        <source>Green/Red grayscale</source>
+        <translation>Liath-sgèile uaine/dearg</translation>
+    </message>
+</context>
+<context>
+    <name>QGroupBox</name>
+    <message>
+        <source>Team Members</source>
+        <translation>Buill an sgioba</translation>
+    </message>
+    <message>
+        <source>Fort</source>
+        <translation>Dùn</translation>
+    </message>
+    <message>
+        <source>Net game</source>
+        <translation>Geama lìonraidh</translation>
+    </message>
+    <message>
+        <source>Playing teams</source>
+        <translation>Sgiobaidhean a chluicheas</translation>
+    </message>
+    <message>
+        <source>Game Modifiers</source>
+        <translation>Atharraichearan a&apos; gheama</translation>
+    </message>
+    <message>
+        <source>Basic Settings</source>
+        <translation>Roghainnean bunaiteach</translation>
+    </message>
+    <message>
+        <source>Team Settings</source>
+        <translation>Roghainnean an sgioba</translation>
+    </message>
+    <message>
+        <source>Videos</source>
+        <translation>Videothan</translation>
+    </message>
+    <message>
+        <source>Description</source>
+        <translation>Tuairisgeul</translation>
+    </message>
+</context>
+<context>
+    <name>QLabel</name>
+    <message>
+        <source>Mines Time</source>
+        <translation>Ùine nam mèinnean</translation>
+    </message>
+    <message>
+        <source>Mines</source>
+        <translation>Mèinnean</translation>
+    </message>
+    <message>
+        <source>Version</source>
+        <translation type="unfinished"/>
+    </message>
+    <message>
+        <source>Weapons</source>
+        <translation>Airm</translation>
+    </message>
+    <message>
+        <source>Host:</source>
+        <translation>Òstair:</translation>
+    </message>
+    <message>
+        <source>Port:</source>
+        <translation>Port:</translation>
+    </message>
+    <message>
+        <source>Resolution</source>
+        <translation>Dùmhlachd-bhreacaidh</translation>
+    </message>
+    <message>
+        <source>FPS limit</source>
+        <translation>Cuingeachadh FPS</translation>
+    </message>
+    <message>
+        <source>Server name:</source>
+        <translation>Ainm an fhrithealaiche:</translation>
+    </message>
+    <message>
+        <source>Server port:</source>
+        <translation>Port an fhrithealaiche:</translation>
+    </message>
+    <message>
+        <source>Initial sound volume</source>
+        <translation>Àirde tùsail na fuaime</translation>
+    </message>
+    <message>
+        <source>Damage Modifier</source>
+        <translation>Atharraichearan an dochainn</translation>
+    </message>
+    <message>
+        <source>Turn Time</source>
+        <translation>Ùine nan cuartan</translation>
+    </message>
+    <message>
+        <source>Initial Health</source>
+        <translation>Slàinte tùsail</translation>
+    </message>
+    <message>
+        <source>Sudden Death Timeout</source>
+        <translation>Bàs obann nuair a dh&apos;fhalbhas an ùine</translation>
+    </message>
+    <message>
+        <source>Scheme Name:</source>
+        <translation>Ainm an sgeama:</translation>
+    </message>
+    <message>
+        <source>Crate Drops</source>
+        <translation>Tuiteam creataichean</translation>
+    </message>
+    <message>
+        <source>% Dud Mines</source>
+        <translation>% de mhèinnean gun fheum</translation>
+    </message>
+    <message>
+        <source>Name</source>
+        <translation>Ainm</translation>
+    </message>
+    <message>
+        <source>Type</source>
+        <translation>Seòrsa</translation>
+    </message>
+    <message>
+        <source>Grave</source>
+        <translation>Uaigh</translation>
+    </message>
+    <message>
+        <source>Flag</source>
+        <translation>Bratach</translation>
+    </message>
+    <message>
+        <source>Voice</source>
+        <translation>Guth</translation>
+    </message>
+    <message>
+        <source>Locale</source>
+        <translation>Cànan</translation>
+    </message>
+    <message>
+        <source>Explosives</source>
+        <translation>Stuth spreadhaidh</translation>
+    </message>
+    <message>
+        <source>Quality</source>
+        <translation>Càileachd</translation>
+    </message>
+    <message>
+        <source>% Health Crates</source>
+        <translation>% de chreataichean slàinte</translation>
+    </message>
+    <message>
+        <source>Health in Crates</source>
+        <translation>Slàinte ann an creataichean</translation>
+    </message>
+    <message>
+        <source>Sudden Death Water Rise</source>
+        <translation>Bàs obann nuair a dh&apos;fhàsas an t-uisge</translation>
+    </message>
+    <message>
+        <source>Sudden Death Health Decrease</source>
+        <translation>Bàs obann le droch slàinte</translation>
+    </message>
+    <message>
+        <source>% Rope Length</source>
+        <translation>% de dh&apos;fhaide nan ropannan</translation>
+    </message>
+    <message>
+        <source>Stereo rendering</source>
+        <translation>Reandaradh stereo</translation>
+    </message>
+    <message>
+        <source>Style</source>
+        <translation>Stoidhle</translation>
+    </message>
+    <message>
+        <source>Scheme</source>
+        <translation>Sgeama</translation>
+    </message>
+    <message>
+        <source>% Get Away Time</source>
+        <translation>% a dh&apos;ùine gus teicheadh</translation>
+    </message>
+    <message>
+        <source>There are videos that are currently being processed.
+Exiting now will abort them.
+Do you really want to quit?</source>
+        <translation>Tha videothan &apos;gam pròiseasadh an-dràsta.
+Sguiridh tu dheth ma dh&apos;fhàgas tu an-seo.
+A bheil thu airson fàgail an-seo dha-rìribh?</translation>
+    </message>
+    <message>
+        <source>Please provide either the YouTube account name or the email address associated with the Google Account.</source>
+        <translation>Cuir a-steach ainm a&apos; chunntais agad air YouTube no an seòladh puist-d a tha co-cheangailte ris a&apos; chunntas Google agad.</translation>
+    </message>
+    <message>
+        <source>Account name (or email): </source>
+        <translation>Ainm a&apos; chunntais (no post-d):</translation>
+    </message>
+    <message>
+        <source>Password: </source>
+        <translation>Facal-faire:</translation>
+    </message>
+    <message>
+        <source>Video title: </source>
+        <translation>Tiotal a&apos; video:</translation>
+    </message>
+    <message>
+        <source>Video description: </source>
+        <translation>Tuairisgeul a&apos; video:</translation>
+    </message>
+    <message>
+        <source>Tags (comma separated): </source>
+        <translation>Tagaichean (sgaraichte le cromagan):</translation>
+    </message>
+    <message>
+        <source>Description</source>
+        <translation>Tuairisgeul</translation>
+    </message>
+    <message>
+        <source>Nickname</source>
+        <translation>Far-ainm</translation>
+    </message>
+    <message>
+        <source>Format</source>
+        <translation>Fòrmat</translation>
+    </message>
+    <message>
+        <source>Audio codec</source>
+        <translation>Codec fuaime</translation>
+    </message>
+    <message>
+        <source>Video codec</source>
+        <translation>Codec video</translation>
+    </message>
+    <message>
+        <source>Framerate</source>
+        <translation>Astar nam frèam</translation>
+    </message>
+    <message>
+        <source>Bitrate (Kbps)</source>
+        <translation>Bitrate (Kbps)</translation>
+    </message>
+    <message>
+        <source>This development build is &apos;work in progress&apos; and may not be compatible with other versions of the game, while some features might be broken or incomplete!</source>
+        <translation>&apos;S e &quot;obair &apos;ga dhèanamh&quot; a tha san togail leasachaidh seo agus dh&apos;fhaoidte nach eil e co-chòrdail ri tionndaidhean eile a&apos; gheama agus gu bheil cuid a dh&apos;fheartan briste no neo-choileanta!</translation>
+    </message>
+    <message>
+        <source>Fullscreen</source>
+        <translation>Làn-sgrìn</translation>
+    </message>
+    <message>
+        <source>Fullscreen Resolution</source>
+        <translation>Dùmhlachd-bhreacaidh làn-sgrìn</translation>
+    </message>
+    <message>
+        <source>Windowed Resolution</source>
+        <translation>Dùmhlachd-bhreacaidh sa mhodh uinneagach</translation>
+    </message>
+    <message>
+        <source>Your Email</source>
+        <translation>Am post-d agad</translation>
+    </message>
+    <message>
+        <source>Summary</source>
+        <translation>Gearr-chunntas</translation>
+    </message>
+    <message>
+        <source>Send system information</source>
+        <translation>Cuir fiosrachadh an t-siostaim</translation>
+    </message>
+    <message>
+        <source>Type the security code:</source>
+        <translation>Sgrìobh còd na tèarainteachd:</translation>
+    </message>
+    <message>
+        <source>Revision</source>
+        <translation>Lèirmheas</translation>
+    </message>
+    <message>
+        <source>This program is distributed under the %1</source>
+        <translation>Tha am prògram seo &apos;ga sgaoileadh fo cheadachas %1</translation>
+    </message>
+    <message>
+        <source>This setting will be effective at next restart.</source>
+        <translation>Bidh an roghainn seo an sàs nuair a bhios tu air tòiseachadh às ùr.</translation>
+    </message>
+    <message>
+        <source>Tip: %1</source>
+        <translation>Gliocas: %1</translation>
+    </message>
+    <message>
+        <source>Displayed tags above hogs and translucent tags</source>
+        <translation>Tagaichean a nochdas os cionn ghràineagan &apos;s tagaichean trìd-shoilleir</translation>
+    </message>
+    <message>
+        <source>World Edge</source>
+        <translation>Oir an t-saoghail</translation>
+    </message>
+    <message>
+        <source>Script parameter</source>
+        <translation>Paramadair an sgriobt</translation>
+    </message>
+</context>
+<context>
+    <name>QLineEdit</name>
+    <message>
+        <source>unnamed</source>
+        <translation>gun ainm</translation>
+    </message>
+    <message>
+        <source>hedgehog %1</source>
+        <translation>gràineag %1</translation>
+    </message>
+    <message>
+        <source>anonymous</source>
+        <translation>gun ainm</translation>
+    </message>
+</context>
+<context>
+    <name>QMainWindow</name>
+    <message>
+        <source>Hedgewars %1</source>
+        <translation>Hedgewars %1</translation>
+    </message>
+</context>
+<context>
+    <name>QMessageBox</name>
+    <message>
+        <source>Connection to server is lost</source>
+        <translation>Chaidh an ceangal ris an fhrithealaiche air chall</translation>
+    </message>
+    <message>
+        <source>Error</source>
+        <translation>Mearachd</translation>
+    </message>
+    <message>
+        <source>File association failed.</source>
+        <translation>Dh&apos;fhaillig le co-cheangal an fhaidhle.</translation>
+    </message>
+    <message>
+        <source>Error while authenticating at google.com:
+</source>
+        <translation>Mearachd le dearbhadh le google.com:
+</translation>
+    </message>
+    <message>
+        <source>Login or password is incorrect</source>
+        <translation>Chan eil an t-ainm-clàraidh no facal-faire mar bu chòir</translation>
+    </message>
+    <message>
+        <source>Error while sending metadata to youtube.com:
+</source>
+        <translation>Mearachd a&apos; cur meata-dàta gu youtube.com:
+</translation>
+    </message>
+    <message>
+        <source>Teams - Are you sure?</source>
+        <translation>Sgiobaidhean - A bheil thu cinnteach?</translation>
+    </message>
+    <message>
+        <source>Do you really want to delete the team &apos;%1&apos;?</source>
+        <translation>A bheil thu airson an sgioba &quot;%1&quot; a sguabadh às dha-rìribh?</translation>
+    </message>
+    <message>
+        <source>Cannot delete default scheme &apos;%1&apos;!</source>
+        <translation>Chan urrainn dhut an sgeama tùsail &quot;%1&quot; a sguabadh às!</translation>
+    </message>
+    <message>
+        <source>Please select a record from the list</source>
+        <translation>Tagh clàr on liosta</translation>
+    </message>
+    <message>
+        <source>Unable to start server</source>
+        <translation>Cha ghabh am frithealaiche a thòiseachadh</translation>
+    </message>
+    <message>
+        <source>Hedgewars - Error</source>
+        <translation>Hedgewars - Mearachd</translation>
+    </message>
+    <message>
+        <source>Hedgewars - Success</source>
+        <translation>Hedgewars - Shoirbhich leis</translation>
+    </message>
+    <message>
+        <source>All file associations have been set</source>
+        <translation>Chaidh gach co-cheangal faidhle a shuidheachadh</translation>
+    </message>
+    <message>
+        <source>Cannot create directory %1</source>
+        <translation type="unfinished"/>
+    </message>
+    <message>
+        <source>Unable to start the server: %1.</source>
+        <translation type="unfinished"/>
+    </message>
+    <message>
+        <source>Video upload - Error</source>
+        <translation>Luchdadh suas video - Mearachd</translation>
+    </message>
+    <message>
+        <source>Netgame - Error</source>
+        <translation>Geama lìonraidh - Mearachd</translation>
+    </message>
+    <message>
+        <source>Please select a server from the list</source>
+        <translation>Tagh frithealaiche on liosta</translation>
+    </message>
+    <message>
+        <source>Please enter room name</source>
+        <translation>Cuir a-steach ainm an t-seòmair</translation>
+    </message>
+    <message>
+        <source>Record Play - Error</source>
+        <translation>Cluiche clàraidh - Mearachd</translation>
+    </message>
+    <message>
+        <source>Please select record from the list</source>
+        <translation>Tagh clàradh on liosta</translation>
+    </message>
+    <message>
+        <source>Cannot rename to </source>
+        <translation>Cha ghabh ainm atharrachadh gu</translation>
+    </message>
+    <message>
+        <source>Cannot delete file </source>
+        <translation>Chan urrainn dhuinn am faidhle a sguabadh às</translation>
+    </message>
+    <message>
+        <source>Room Name - Error</source>
+        <translation>Ainm an t-seòmair - Mearachd</translation>
+    </message>
+    <message>
+        <source>Please select room from the list</source>
+        <translation>Tagh seòmar on liosta</translation>
+    </message>
+    <message>
+        <source>Room Name - Are you sure?</source>
+        <translation>Ainm an t-seòmair - A bheil thu cinnteach?</translation>
+    </message>
+    <message>
+        <source>The game you are trying to join has started.
+Do you still want to join the room?</source>
+        <translation>Tha an geama sa bheil thu airson tighinn a-steach air tòiseachadh.
+A bheil thu airson tighinn a-steach dhan t-seòmar fhathast?</translation>
+    </message>
+    <message>
+        <source>Schemes - Warning</source>
+        <translation>Sgeamaichean - Rabhadh</translation>
+    </message>
+    <message>
+        <source>Schemes - Are you sure?</source>
+        <translation>Sgeamaichean - A bheil thu cinnteach?</translation>
+    </message>
+    <message>
+        <source>Do you really want to delete the game scheme &apos;%1&apos;?</source>
+        <translation>A bheil thu airson sgeama a&apos; gheama &quot;%1&quot; a sguabadh às dha-rìribh?</translation>
+    </message>
+    <message>
+        <source>Videos - Are you sure?</source>
+        <translation>Videothan - A bheil thu cinnteach?</translation>
+    </message>
+    <message>
+        <source>Do you really want to delete the video &apos;%1&apos;?</source>
+        <translation>A bheil thu airson a&apos; video &quot;%1&quot; a sguabadh às dha-rìribh?</translation>
+    </message>
+    <message numerus="yes">
+        <source>Do you really want to remove %1 file(s)?</source>
+        <translation><numerusform>A bheil thu airson %1 fhaidhle a sguabadh às dha-rìribh?</numerusform><numerusform>A bheil thu airson %1 fhaidhle a sguabadh às dha-rìribh?</numerusform><numerusform>A bheil thu airson %1 faidhlichean a sguabadh às dha-rìribh?</numerusform><numerusform>A bheil thu airson %1 faidhle a sguabadh às dha-rìribh?</numerusform></translation>
+    </message>
+    <message>
+        <source>Do you really want to cancel uploading %1?</source>
+        <translation>A bheil thu airson sgur de luchdadh suas %1?</translation>
+    </message>
+    <message>
+        <source>File error</source>
+        <translation>Mearachd faidhle</translation>
+    </message>
+    <message>
+        <source>Cannot open &apos;%1&apos; for writing</source>
+        <translation>Cha ghabh &quot;%1&quot; fosgladh airson sgrìobhadh ann</translation>
+    </message>
+    <message>
+        <source>Cannot open &apos;%1&apos; for reading</source>
+        <translation>Cha ghabh &quot;%1&quot; fosgladh airson a leughadh</translation>
+    </message>
+    <message>
+        <source>Cannot use the ammo &apos;%1&apos;!</source>
+        <translation>Cha ghabh an connadh &quot;%1&quot; cleachdadh!</translation>
+    </message>
+    <message>
+        <source>Weapons - Warning</source>
+        <translation>Airm - Rabhadh</translation>
+    </message>
+    <message>
+        <source>Cannot overwrite default weapon set &apos;%1&apos;!</source>
+        <translation>Cha ghabh sgrìobhadh thairis air seata nan arm tùsail &quot;%1&quot;!</translation>
+    </message>
+    <message>
+        <source>Cannot delete default weapon set &apos;%1&apos;!</source>
+        <translation>Cha ghabh seata nan arm tùsail &quot;%1&quot; sguabadh às!</translation>
+    </message>
+    <message>
+        <source>Weapons - Are you sure?</source>
+        <translation>Airm - A bheil thu cinnteach?</translation>
+    </message>
+    <message>
+        <source>Do you really want to delete the weapon set &apos;%1&apos;?</source>
+        <translation>A bheil thu airson seata nan arm &quot;%1&quot; a sguabadh às dha-rìribh?</translation>
+    </message>
+    <message>
+        <source>Hedgewars - Nick not registered</source>
+        <translation>Hedgewars - Far-ainm gun chlàradh</translation>
+    </message>
+    <message>
+        <source>System Information Preview</source>
+        <translation>Ro-shealladh air fiosrachadh an t-siostaim</translation>
+    </message>
+    <message>
+        <source>Failed to generate captcha</source>
+        <translation>Cha deach leinn captcha a ghintinn</translation>
+    </message>
+    <message>
+        <source>Failed to download captcha</source>
+        <translation>Cha deach leinn captcha a luchdadh a-nuas</translation>
+    </message>
+    <message>
+        <source>Please fill out all fields. Email is optional.</source>
+        <translation>Feuch an lìon thu a h-uile raon. Cha leig thu leas am post-d a lìonadh.</translation>
+    </message>
+    <message>
+        <source>Hedgewars - Warning</source>
+        <translation>Hedgewars - Rabhadh</translation>
+    </message>
+    <message>
+        <source>Hedgewars - Information</source>
+        <translation>Hedgewars - Fiosrachadh</translation>
+    </message>
+    <message>
+        <source>Not all players are ready</source>
+        <translation>Chan eil gach cluicheadair ullamh fhathast</translation>
+    </message>
+    <message>
+        <source>Are you sure you want to start this game?
+Not all players are ready.</source>
+        <translation>A bheil thu cinnteach gu bheil thu airson an geama seo a thòiseachadh?
+Chan eil a h-uile cluicheadair ullamh.</translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <source>No description available</source>
+        <translation>Chan eil tuairisgeul ri làimh</translation>
+    </message>
+</context>
+<context>
+    <name>QPushButton</name>
+    <message>
+        <source>default</source>
+        <translation>bun-roghainn</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation>Ceart ma-thà</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation>Sguir dheth</translation>
+    </message>
+    <message>
+        <source>Start server</source>
+        <translation>Tòisich an fhrithealaiche</translation>
+    </message>
+    <message>
+        <source>Connect</source>
+        <translation>Ceangail</translation>
+    </message>
+    <message>
+        <source>Update</source>
+        <translation>Ùraich</translation>
+    </message>
+    <message>
+        <source>Specify</source>
+        <translation>Sònraich</translation>
+    </message>
+    <message>
+        <source>Start</source>
+        <translation>Tòisich</translation>
+    </message>
+    <message>
+        <source>Go!</source>
+        <translation>Siuthad!</translation>
+    </message>
+    <message>
+        <source>Play demo</source>
+        <translation>Cluich demo</translation>
+    </message>
+    <message>
+        <source>Rename</source>
+        <translation>Thoir ainm ùr air</translation>
+    </message>
+    <message>
+        <source>Delete</source>
+        <translation>Sguab às</translation>
+    </message>
+    <message>
+        <source>Load</source>
+        <translation>Luchdaich</translation>
+    </message>
+    <message>
+        <source>Associate file extensions</source>
+        <translation>Co-cheangail leudachain faidhle.</translation>
+    </message>
+    <message>
+        <source>More info</source>
+        <translation>Barrachd fiosrachaidh</translation>
+    </message>
+    <message>
+        <source>Set default options</source>
+        <translation>Suidhich na bun-roghainnean</translation>
+    </message>
+    <message>
+        <source>Open videos directory</source>
+        <translation>Fosgail pasgan nam videothan</translation>
+    </message>
+    <message>
+        <source>Play</source>
+        <translation>Cluich</translation>
+    </message>
+    <message>
+        <source>Upload to YouTube</source>
+        <translation>Luchdaich suas gu YouTube</translation>
+    </message>
+    <message>
+        <source>Cancel uploading</source>
+        <translation>Sguir dhen luchdadh suas</translation>
+    </message>
+    <message>
+        <source>Restore default coding parameters</source>
+        <translation>Aisig paramadairean tùsail a&apos; chòdachaidh</translation>
+    </message>
+    <message>
+        <source>Open the video directory in your system</source>
+        <translation>Fosgail pasgan nam videothan san t-siostam agad</translation>
+    </message>
+    <message>
+        <source>Play this video</source>
+        <translation>Cluich a&apos; video seo</translation>
+    </message>
+    <message>
+        <source>Delete this video</source>
+        <translation>Sguab às a&apos; video seo</translation>
+    </message>
+    <message>
+        <source>Upload this video to your Youtube account</source>
+        <translation>Luchdaich suas a&apos; video seo dhan chunntas Youtube agad</translation>
+    </message>
+    <message>
+        <source>Reset</source>
+        <translation>Ah-shuidhich</translation>
+    </message>
+    <message>
+        <source>Set the default server port for Hedgewars</source>
+        <translation>Suidhich port tùsail an fhrithealaiche airson Hedgewars</translation>
+    </message>
+    <message>
+        <source>Invite your friends to your server in just 1 click!</source>
+        <translation>Na dèan ach 1 bhriogadh gus cuireadh dhan fhrithealaiche a thoirt dha na caraidean agad!</translation>
+    </message>
+    <message>
+        <source>Click to copy your unique server URL to your clipboard. Send this link to your friends and they will be able to join you.</source>
+        <translation>Briog gus lethbhreac de URL sònraichte an fhrithealaiche agad a chur dhan stòr-bhòrd. Cuir an ceangal seo dha na caraidean agad ach an tig iad a-steach.</translation>
+    </message>
+    <message>
+        <source>Start private server</source>
+        <translation>Tòisich frithealaiche prìobhaideach</translation>
+    </message>
+</context>
+<context>
+    <name>RoomNamePrompt</name>
+    <message>
+        <source>Enter a name for your room.</source>
+        <translation>Cuir a-steach ainm an t-seòmair agad.</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation>Sguir dheth</translation>
+    </message>
+    <message>
+        <source>Create room</source>
+        <translation>Cruthaich seòmar</translation>
+    </message>
+    <message>
+        <source>set password</source>
+        <translation>suidhich am facal-faire</translation>
+    </message>
+</context>
+<context>
+    <name>RoomsListModel</name>
+    <message>
+        <source>In progress</source>
+        <translation>&apos;Ga dhèanamh</translation>
+    </message>
+    <message>
+        <source>Room Name</source>
+        <translation>Ainm an t-seòmair</translation>
+    </message>
+    <message>
+        <source>C</source>
+        <translation>Cl.</translation>
+    </message>
+    <message>
+        <source>T</source>
+        <translation>Sg.</translation>
+    </message>
+    <message>
+        <source>Owner</source>
+        <translation>Seilbheadair</translation>
+    </message>
+    <message>
+        <source>Map</source>
+        <translation>Mapa</translation>
+    </message>
+    <message>
+        <source>Rules</source>
+        <translation>Riaghailtean</translation>
+    </message>
+    <message>
+        <source>Weapons</source>
+        <translation>Airm</translation>
+    </message>
+    <message>
+        <source>Random Map</source>
+        <translation>Mapa air thuaiream</translation>
+    </message>
+    <message>
+        <source>Random Maze</source>
+        <translation>Cuartan air thuaiream</translation>
+    </message>
+    <message>
+        <source>Hand-drawn</source>
+        <translation>Air a tharraing a làimh</translation>
+    </message>
+    <message>
+        <source>Script</source>
+        <translation>Sgriobt</translation>
+    </message>
+    <message>
+        <source>Random Perlin</source>
+        <translation>Perlin tuaireamach</translation>
+    </message>
+</context>
+<context>
+    <name>SeedPrompt</name>
+    <message>
+        <source>The map seed is the basis for all random values generated by the game.</source>
+        <translation>Tha sìol a&apos; mhapa &apos;na bhunait airson gach luach air thuaiream a ghineas an geama.</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation>Sguir dheth</translation>
+    </message>
+    <message>
+        <source>Set seed</source>
+        <translation>Suidhich an sìol</translation>
+    </message>
+    <message>
+        <source>Close</source>
+        <translation>Dùin</translation>
+    </message>
+</context>
+<context>
+    <name>SelWeaponWidget</name>
+    <message>
+        <source>Weapon set</source>
+        <translation>Seata arm</translation>
+    </message>
+    <message>
+        <source>Probabilities</source>
+        <translation>Coltachdan</translation>
+    </message>
+    <message>
+        <source>Ammo in boxes</source>
+        <translation>Connadh ann am bogsaichean</translation>
+    </message>
+    <message>
+        <source>Delays</source>
+        <translation>Dàlaichean</translation>
+    </message>
+    <message>
+        <source>new</source>
+        <translation>ùr</translation>
+    </message>
+    <message>
+        <source>copy of %1</source>
+        <translation>lethbhreac de %1</translation>
+    </message>
+</context>
+<context>
+    <name>TCPBase</name>
+    <message>
+        <source>Unable to start server at %1.</source>
+        <translation>Cha ghabh am frithealaiche a thòiseachadh air %1.</translation>
+    </message>
+    <message>
+        <source>Unable to run engine at %1
+Error code: %2</source>
+        <translation>Cha ghabh an t-einnsean a ruith air %1
+Còd na mearachd: %2</translation>
+    </message>
+    <message>
+        <source>The game engine died unexpectedly!
+(exit code %1)
+
+We are very sorry for the inconvenience :(
+
+If this keeps happening, please click the &apos;%2&apos; button in the main menu!</source>
+        <translation>Bhàsaich inneal a&apos; gheama gun dùil.
+(còd fàgail %1)
+
+Tha sinn glè dhuilich mun trioblaid seo :(
+
+Ma thachras seo a-rithist &apos;s a-rithist, briog air a&apos; phutan &quot;%2&quot; sa phrìomh chlàr-taice!</translation>
+    </message>
+</context>
+<context>
+    <name>TeamSelWidget</name>
+    <message>
+        <source>At least two teams are required to play!</source>
+        <translation>Feumadh tu co-dhiù dà sgioba airson cluiche!</translation>
+    </message>
+</context>
+<context>
+    <name>ThemePrompt</name>
+    <message>
+        <source>Cancel</source>
+        <translation>Sguir dheth</translation>
+    </message>
+    <message>
+        <source>Search for a theme:</source>
+        <translation>Lorg ùrlar:</translation>
+    </message>
+    <message>
+        <source>Use selected theme</source>
+        <translation>Cleachd an t-ùrlar a thagh thu</translation>
+    </message>
+</context>
+<context>
+    <name>binds</name>
+    <message>
+        <source>up</source>
+        <translation>suas</translation>
+    </message>
+    <message>
+        <source>left</source>
+        <translation>gu clì</translation>
+    </message>
+    <message>
+        <source>right</source>
+        <translation>gu deas</translation>
+    </message>
+    <message>
+        <source>down</source>
+        <translation>sìos</translation>
+    </message>
+    <message>
+        <source>attack</source>
+        <translation>ionnsaigh</translation>
+    </message>
+    <message>
+        <source>precise aim</source>
+        <translation>amas pongail</translation>
+    </message>
+    <message>
+        <source>put</source>
+        <translation>cuir</translation>
+    </message>
+    <message>
+        <source>switch</source>
+        <translation>dèan suids</translation>
+    </message>
+    <message>
+        <source>find hedgehog</source>
+        <translation type="unfinished"/>
+    </message>
+    <message>
+        <source>ammo menu</source>
+        <translation>clàr-taice a&apos; chonnaidh</translation>
+    </message>
+    <message>
+        <source>slot 1</source>
+        <translation>slot 1</translation>
+    </message>
+    <message>
+        <source>slot 2</source>
+        <translation>slot 2</translation>
+    </message>
+    <message>
+        <source>slot 3</source>
+        <translation>slot 3</translation>
+    </message>
+    <message>
+        <source>slot 4</source>
+        <translation>slot 4</translation>
+    </message>
+    <message>
+        <source>slot 5</source>
+        <translation>slot 5</translation>
+    </message>
+    <message>
+        <source>slot 6</source>
+        <translation>slot 6</translation>
+    </message>
+    <message>
+        <source>slot 7</source>
+        <translation>slot 7</translation>
+    </message>
+    <message>
+        <source>slot 8</source>
+        <translation>slot 8</translation>
+    </message>
+    <message>
+        <source>slot 9</source>
+        <translation>slot 9</translation>
+    </message>
+    <message>
+        <source>timer 1 sec</source>
+        <translation>tìmear 1 diog</translation>
+    </message>
+    <message>
+        <source>timer 2 sec</source>
+        <translation>tìmear 2 dhiog</translation>
+    </message>
+    <message>
+        <source>timer 3 sec</source>
+        <translation>tìmear 3 diogan</translation>
+    </message>
+    <message>
+        <source>timer 4 sec</source>
+        <translation>tìmear 4 diogan</translation>
+    </message>
+    <message>
+        <source>timer 5 sec</source>
+        <translation>tìmear 5 diogan</translation>
+    </message>
+    <message>
+        <source>chat</source>
+        <translation>cabadaich</translation>
+    </message>
+    <message>
+        <source>chat history</source>
+        <translation>eachdraidh a&apos; chabadaich</translation>
+    </message>
+    <message>
+        <source>pause</source>
+        <translation>cuir &apos;na stad</translation>
+    </message>
+    <message>
+        <source>confirmation</source>
+        <translation>dearbhadh</translation>
+    </message>
+    <message>
+        <source>volume down</source>
+        <translation>fuaim sìos</translation>
+    </message>
+    <message>
+        <source>volume up</source>
+        <translation>fuaim suas</translation>
+    </message>
+    <message>
+        <source>change mode</source>
+        <translation>atharraich am modh</translation>
+    </message>
+    <message>
+        <source>capture</source>
+        <translation>glac</translation>
+    </message>
+    <message>
+        <source>quit</source>
+        <translation>fàg an-seo</translation>
+    </message>
+    <message>
+        <source>zoom in</source>
+        <translation>sùm a-steach</translation>
+    </message>
+    <message>
+        <source>zoom out</source>
+        <translation>sùm a-mach</translation>
+    </message>
+    <message>
+        <source>reset zoom</source>
+        <translation>ath-shuidhich an sùm</translation>
+    </message>
+    <message>
+        <source>long jump</source>
+        <translation>leum fada</translation>
+    </message>
+    <message>
+        <source>high jump</source>
+        <translation>leum àrd</translation>
+    </message>
+    <message>
+        <source>slot 10</source>
+        <translation>slot 10</translation>
+    </message>
+    <message>
+        <source>mute audio</source>
+        <translation>mùch an fhuaim</translation>
+    </message>
+    <message>
+        <source>record</source>
+        <translation>clàraich</translation>
+    </message>
+    <message>
+        <source>hedgehog info</source>
+        <translation>fiosrachadh na gràineige</translation>
+    </message>
+    <message>
+        <source>autocam / find hedgehog</source>
+        <translation>camara fèin-obrachail / lorg gràineag</translation>
+    </message>
+    <message>
+        <source>speed up replay</source>
+        <translation>luathaich an ath-chluiche</translation>
+    </message>
+</context>
+<context>
+    <name>binds (categories)</name>
+    <message>
+        <source>Movement</source>
+        <translation>Gluasad</translation>
+    </message>
+    <message>
+        <source>Weapons</source>
+        <translation>Airm</translation>
+    </message>
+    <message>
+        <source>Camera</source>
+        <translation>Camara</translation>
+    </message>
+    <message>
+        <source>Miscellaneous</source>
+        <translation>Measgaichte</translation>
+    </message>
+</context>
+<context>
+    <name>binds (descriptions)</name>
+    <message>
+        <source>Traverse gaps and obstacles by jumping:</source>
+        <translation>Leum thairis air beàrnan &apos;s ribean:</translation>
+    </message>
+    <message>
+        <source>Fire your selected weapon or trigger an utility item:</source>
+        <translation>Loisg an t-arm a thagh thu no cleachd acainn:</translation>
+    </message>
+    <message>
+        <source>Pick a weapon or a target location under the cursor:</source>
+        <translation>Tagh arm no ceann-uidhe fon chùrsair:</translation>
+    </message>
+    <message>
+        <source>Switch your currently active hog (if possible):</source>
+        <translation>Gearr leum gu gràineag eile (ma ghabhas seo dèanamh):</translation>
+    </message>
+    <message>
+        <source>Pick a weapon or utility item:</source>
+        <translation>Tagh arm no acainn:</translation>
+    </message>
+    <message>
+        <source>Set the timer on bombs and timed weapons:</source>
+        <translation>Suidhich an tìmear air boma no arm eile le tìmear:</translation>
+    </message>
+    <message>
+        <source>Move the camera to the active hog:</source>
+        <translation type="unfinished"/>
+    </message>
+    <message>
+        <source>Move the cursor or camera without using the mouse:</source>
+        <translation>Gluais an cùrsair no an camara gun a bhith a&apos; cleachdadh na luchaige:</translation>
+    </message>
+    <message>
+        <source>Modify the camera&apos;s zoom level:</source>
+        <translation>Atharraich sùmadh a&apos; chamara:</translation>
+    </message>
+    <message>
+        <source>Talk to your team or all participants:</source>
+        <translation>Bruidhinn ris an sgioba agad no ris a h-uile duine:</translation>
+    </message>
+    <message>
+        <source>Pause, continue or leave your game:</source>
+        <translation>Cuir an geama agad &apos;na stad, lean air no fàg e:</translation>
+    </message>
+    <message>
+        <source>Modify the game&apos;s volume while playing:</source>
+        <translation>Atharraich àirde fuaime a&apos; gheama fhad &apos;s a bhios tu a&apos; cluich:</translation>
+    </message>
+    <message>
+        <source>Toggle fullscreen mode:</source>
+        <translation>Toglaich am modh làn-sgrìn:</translation>
+    </message>
+    <message>
+        <source>Take a screenshot:</source>
+        <translation>Tog glacadh-sgrìn:</translation>
+    </message>
+    <message>
+        <source>Toggle labels above hedgehogs:</source>
+        <translation>Toglaich na leubailean os cionn nan gràineagan:</translation>
+    </message>
+    <message>
+        <source>Record video:</source>
+        <translation>Clàraich video:</translation>
+    </message>
+    <message>
+        <source>Hedgehog movement</source>
+        <translation>Gluasad nan gràineagan</translation>
+    </message>
+    <message>
+        <source>Toggle automatic camera / refocus on active hedgehog:</source>
+        <translation>Toglaich an camara fèin-obrachail / cuir am fòcas air a&apos; ghràineag ghnìomhach a-rithist:</translation>
+    </message>
+    <message>
+        <source>Demo replay:</source>
+        <translation>Ath-chluiche an demo:</translation>
+    </message>
+</context>
+<context>
+    <name>binds (keys)</name>
+    <message>
+        <source>Axis</source>
+        <translation>Aiseal</translation>
+    </message>
+    <message>
+        <source>(Up)</source>
+        <translation>(Suas)</translation>
+    </message>
+    <message>
+        <source>(Down)</source>
+        <translation>(Sìos)</translation>
+    </message>
+    <message>
+        <source>Hat</source>
+        <translation>Ad</translation>
+    </message>
+    <message>
+        <source>(Left)</source>
+        <translation>(Gu clì)</translation>
+    </message>
+    <message>
+        <source>(Right)</source>
+        <translation>(Gu deas)</translation>
+    </message>
+    <message>
+        <source>Button</source>
+        <translation>Putan</translation>
+    </message>
+    <message>
+        <source>Keyboard</source>
+        <translation>Meur-chlàr</translation>
+    </message>
+    <message>
+        <source>Delete</source>
+        <translation>Delete</translation>
+    </message>
+    <message>
+        <source>Mouse: Left button</source>
+        <translation>Luchag: putan clì</translation>
+    </message>
+    <message>
+        <source>Mouse: Middle button</source>
+        <translation>Luchag: putan meadhanach</translation>
+    </message>
+    <message>
+        <source>Mouse: Right button</source>
+        <translation>Luchag: putan deas</translation>
+    </message>
+    <message>
+        <source>Mouse: Wheel up</source>
+        <translation>Luchag: cuibhle suas</translation>
+    </message>
+    <message>
+        <source>Mouse: Wheel down</source>
+        <translation>Luchag: cuibhle sìos</translation>
+    </message>
+    <message>
+        <source>Backspace</source>
+        <translation>Backspace</translation>
+    </message>
+    <message>
+        <source>Tab</source>
+        <translation>Taba</translation>
+    </message>
+    <message>
+        <source>Clear</source>
+        <translation>Clear</translation>
+    </message>
+    <message>
+        <source>Return</source>
+        <translation>Return</translation>
+    </message>
+    <message>
+        <source>Pause</source>
+        <translation>Pause</translation>
+    </message>
+    <message>
+        <source>Escape</source>
+        <translation>Escape</translation>
+    </message>
+    <message>
+        <source>Space</source>
+        <translation>Space</translation>
+    </message>
+    <message>
+        <source>Numpad 0</source>
+        <translation>0 air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Numpad 1</source>
+        <translation>1 air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Numpad 2</source>
+        <translation>2 air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Numpad 3</source>
+        <translation>3 air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Numpad 4</source>
+        <translation>4 air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Numpad 5</source>
+        <translation>5 air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Numpad 6</source>
+        <translation>6 air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Numpad 7</source>
+        <translation>7 air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Numpad 8</source>
+        <translation>8 air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Numpad 9</source>
+        <translation>9 air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Numpad .</source>
+        <translation>. air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Numpad /</source>
+        <translation>/ air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Numpad *</source>
+        <translation>* air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Numpad -</source>
+        <translation>- air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Numpad +</source>
+        <translation>+ air pada nan àireamh</translation>
+    </message>
+    <message>
+        <source>Enter</source>
+        <translation>Enter</translation>
+    </message>
+    <message>
+        <source>Equals</source>
+        <translation>Co-ionnnannachd</translation>
+    </message>
+    <message>
+        <source>Up</source>
+        <translation>Suas</translation>
+    </message>
+    <message>
+        <source>Down</source>
+        <translation>Sìos</translation>
+    </message>
+    <message>
+        <source>Right</source>
+        <translation>Gu clì</translation>
+    </message>
+    <message>
+        <source>Left</source>
+        <translation>Gu deas</translation>
+    </message>
+    <message>
+        <source>Insert</source>
+        <translation>Insert</translation>
+    </message>
+    <message>
+        <source>Home</source>
+        <translation>Home</translation>
+    </message>
+    <message>
+        <source>End</source>
+        <translation>End</translation>
+    </message>
+    <message>
+        <source>Page up</source>
+        <translation>Page up</translation>
+    </message>
+    <message>
+        <source>Page down</source>
+        <translation>Page down</translation>
+    </message>
+    <message>
+        <source>Num lock</source>
+        <translation>Num lock</translation>
+    </message>
+    <message>
+        <source>Caps lock</source>
+        <translation>Caps lock</translation>
+    </message>
+    <message>
+        <source>Scroll lock</source>
+        <translation>Scroll lock</translation>
+    </message>
+    <message>
+        <source>Right shift</source>
+        <translation>Shift deas</translation>
+    </message>
+    <message>
+        <source>Left shift</source>
+        <translation>Shift clì</translation>
+    </message>
+    <message>
+        <source>Right ctrl</source>
+        <translation>Ctrl deas</translation>
+    </message>
+    <message>
+        <source>Left ctrl</source>
+        <translation>Ctrl clì</translation>
+    </message>
+    <message>
+        <source>Right alt</source>
+        <translation>Alt deas</translation>
+    </message>
+    <message>
+        <source>Left alt</source>
+        <translation>Alt clì</translation>
+    </message>
+    <message>
+        <source>Right meta</source>
+        <translation>Meta deas</translation>
+    </message>
+    <message>
+        <source>Left meta</source>
+        <translation>Meta clì</translation>
+    </message>
+    <message>
+        <source>A button</source>
+        <translation>Putan A</translation>
+    </message>
+    <message>
+        <source>B button</source>
+        <translation>Putan B</translation>
+    </message>
+    <message>
+        <source>X button</source>
+        <translation>Putan X</translation>
+    </message>
+    <message>
+        <source>Y button</source>
+        <translation>Putan Y</translation>
+    </message>
+    <message>
+        <source>LB button</source>
+        <translation>Putan LB</translation>
+    </message>
+    <message>
+        <source>RB button</source>
+        <translation>Putan RB</translation>
+    </message>
+    <message>
+        <source>Back button</source>
+        <translation>Putan Back</translation>
+    </message>
+    <message>
+        <source>Start button</source>
+        <translation>Putan Start</translation>
+    </message>
+    <message>
+        <source>Left stick</source>
+        <translation>Stick clì</translation>
+    </message>
+    <message>
+        <source>Right stick</source>
+        <translation>Stick deas</translation>
+    </message>
+    <message>
+        <source>Left stick (Right)</source>
+        <translation>Stick clì (gu deas)</translation>
+    </message>
+    <message>
+        <source>Left stick (Left)</source>
+        <translation>Stick clì (gu clì)</translation>
+    </message>
+    <message>
+        <source>Left stick (Down)</source>
+        <translation>Stick clì (sìos)</translation>
+    </message>
+    <message>
+        <source>Left stick (Up)</source>
+        <translation>Stick clì (suas)</translation>
+    </message>
+    <message>
+        <source>Left trigger</source>
+        <translation>Trigear clì</translation>
+    </message>
+    <message>
+        <source>Right trigger</source>
+        <translation>Trigear deas</translation>
+    </message>
+    <message>
+        <source>Right stick (Down)</source>
+        <translation>Stick deas (sìos)</translation>
+    </message>
+    <message>
+        <source>Right stick (Up)</source>
+        <translation>Stick deas (suas)</translation>
+    </message>
+    <message>
+        <source>Right stick (Right)</source>
+        <translation>Stick deas (gu deas)</translation>
+    </message>
+    <message>
+        <source>Right stick (Left)</source>
+        <translation>Stick deas (gu clì)</translation>
+    </message>
+    <message>
+        <source>DPad</source>
+        <translation>DPad</translation>
+    </message>
+</context>
+<context>
+    <name>server</name>
+    <message>
+        <source>Restricted</source>
+        <translation>Cuingichte</translation>
+    </message>
+    <message>
+        <source>Not room master</source>
+        <translation>Cha tusa ceannard an t-seòmair</translation>
+    </message>
+    <message>
+        <source>Corrupted hedgehogs info</source>
+        <translation>Fiosrachadh hedgehogs coirbte</translation>
+    </message>
+    <message>
+        <source>too many teams</source>
+        <translation>cus sgiobaidhean</translation>
+    </message>
+    <message>
+        <source>too many hedgehogs</source>
+        <translation>cus gràineagan</translation>
+    </message>
+    <message>
+        <source>There&apos;s already a team with same name in the list</source>
+        <translation>Tha sgioba air a bheil an t-aon ainm air an liosta mar-thà</translation>
+    </message>
+    <message>
+        <source>round in progress</source>
+        <translation>tha cuairt a&apos; dol</translation>
+    </message>
+    <message>
+        <source>restricted</source>
+        <translation>cuingichte</translation>
+    </message>
+    <message>
+        <source>REMOVE_TEAM: no such team</source>
+        <translation>REMOVE_TEAM: chan eil an sgioba seo ann</translation>
+    </message>
+    <message>
+        <source>Not team owner!</source>
+        <translation>Chan ann leatsa a tha an sgioba seo!</translation>
+    </message>
+    <message>
+        <source>Less than two clans!</source>
+        <translation>Tha nas lugha na dà chinneadh ann!</translation>
+    </message>
+    <message>
+        <source>Illegal room name</source>
+        <translation>Ainm an t-seòmair mì-dhligheach</translation>
+    </message>
+    <message>
+        <source>Room with such name already exists</source>
+        <translation>Cha seòmair air a bheil an t-ainm seo ann mar-thà</translation>
+    </message>
+    <message>
+        <source>Nickname already chosen</source>
+        <translation>Chaidh am far-ainm seo a thaghadh mar-thà</translation>
+    </message>
+    <message>
+        <source>Illegal nickname</source>
+        <translation>Far-ainm mì-dhligheach</translation>
+    </message>
+    <message>
+        <source>Protocol already known</source>
+        <translation>Tha am pròtacail aithnichte mar-thà</translation>
+    </message>
+    <message>
+        <source>Bad number</source>
+        <translation>Droch àireamh</translation>
+    </message>
+    <message>
+        <source>Nickname is already in use</source>
+        <translation>Tha am far-ainm &apos;ga chleachdadh mar-thà</translation>
+    </message>
+    <message>
+        <source>No checker rights</source>
+        <translation>Chan eil ceadan dearbhaidh ann</translation>
+    </message>
+    <message>
+        <source>Authentication failed</source>
+        <translation>Dh&apos;fhàillig leis an dearbhadh</translation>
+    </message>
+    <message>
+        <source>60 seconds cooldown after kick</source>
+        <translation>Gabh air do shocair fad 60 diog às dèidh a&apos; bhròg fhaighinn</translation>
+    </message>
+    <message>
+        <source>kicked</source>
+        <translation>fhuair thu a&apos; bhròg</translation>
+    </message>
+    <message>
+        <source>Ping timeout</source>
+        <translation>Dh&apos;fhalbh an ùine air ping</translation>
+    </message>
+    <message>
+        <source>bye</source>
+        <translation>mar sin leat</translation>
+    </message>
+    <message>
+        <source>No such room</source>
+        <translation>Chan eil an seòmar seo ann</translation>
+    </message>
+    <message>
+        <source>Room version incompatible to your hedgewars version</source>
+        <translation>Tha tionndadh dhen t-seòmar mì-chòrdail ris an tionndadh de hedgewars agad</translation>
+    </message>
+    <message>
+        <source>Joining restricted</source>
+        <translation>Tha tighinn a-steach cuingichte</translation>
+    </message>
+    <message>
+        <source>Registered users only</source>
+        <translation>Buill clàraichte a-mhàin</translation>
+    </message>
+    <message>
+        <source>You are banned in this room</source>
+        <translation>Chaidh do thoirmeasg on t-seòmar seo</translation>
+    </message>
+    <message>
+        <source>Empty config entry</source>
+        <translation>Innteart rèiteachaidh falamh</translation>
+    </message>
+    <message>
+        <source>You already have voted</source>
+        <translation>Rinn thu bhòtadh mar-thà</translation>
+    </message>
+    <message>
+        <source>Voting closed</source>
+        <translation>Chaidh bhòtadh a dhùnadh</translation>
+    </message>
+    <message>
+        <source>New voting started</source>
+        <translation>Thòisich bhòtadh ùr</translation>
+    </message>
+    <message>
+        <source>Voting expired</source>
+        <translation>Dh&apos;fhalbh an ùine air a&apos; bhòtadh</translation>
+    </message>
+    <message>
+        <source>kick</source>
+        <translation>thoir a&apos; bhròg</translation>
+    </message>
+    <message>
+        <source>map</source>
+        <translation>mapa</translation>
+    </message>
+    <message>
+        <source>pause</source>
+        <translation>cuir &apos;na stad</translation>
+    </message>
+    <message>
+        <source>Reconnected too fast</source>
+        <translation>Chaidh ath-cheangal ro luath</translation>
+    </message>
+    <message>
+        <source>Warning! Chat flood protection activated</source>
+        <translation>Rabhadh! Chaidh dìon tuile na cabadaich a ghnìomhachadh</translation>
+    </message>
+    <message>
+        <source>Excess flood</source>
+        <translation>Tuile a bharrachd</translation>
+    </message>
+    <message>
+        <source>Game messages flood detected - 1</source>
+        <translation>Mhothaich sinn air tuile teachdaireachdan a&apos; gheama - 1</translation>
+    </message>
+    <message>
+        <source>Game messages flood detected - 2</source>
+        <translation>Mhothaich sinn air tuile teachdaireachdan a&apos; gheama - 2</translation>
+    </message>
+    <message>
+        <source>Warning! Joins flood protection activated</source>
+        <translation>Rabhadh! Chan fhaod torr dhaoine ùra tighinn dhan fhrithealaiche gu luath</translation>
+    </message>
+    <message>
+        <source>There&apos;s no voting going on</source>
+        <translation>Chan eil bhòtadh a&apos; tachairt</translation>
+    </message>
+</context>
+</TS>
\ No newline at end of file
--- a/share/hedgewars/Data/Locale/missions_de.txt	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/missions_de.txt	Mon Nov 09 18:37:57 2015 +0100
@@ -31,7 +31,7 @@
 User_Mission_-_Bamboo_Thicket.name=Mission: Bambusdickicht
 User_Mission_-_Bamboo_Thicket.desc="Tod von oben."
 
-User_Mission_-_That_Sinking_Feeling.name=Mission: That Sinking Feeling
+User_Mission_-_That_Sinking_Feeling.name=Mission: Land unter
 User_Mission_-_That_Sinking_Feeling.desc="Hier steht einen das Wasser ganz schön schnell bis zum Halse. Viele sind hieran gescheitert. Kannst du alle Igel retten?"
 
 User_Mission_-_Newton_and_the_Hammock.name=Mission: Newton und die Hängematte
@@ -76,3 +76,12 @@
 ClimbHome.name=Herausforderung: Nach Hause klettern
 ClimbHome.desc="Du bist weit von Zuhause weg und das Wasser steigt ständig. Klettere so hoch, wie du kannst!"
 
+Challenge_-_Speed_Shoppa_-_Hedgelove.name=Herausforderung: Seilliebe
+Challenge_-_Speed_Shoppa_-_Hedgelove.desc="Zeig deine Liebe zum Seilschwingen, sammle ein paar wenige Kisten auf dieser kleinen Karte ein."
+
+Challenge_-_Speed_Shoppa_-_Ropes.name=Herausforderung: Seile und Kisten
+Challenge_-_Speed_Shoppa_-_Ropes.desc="Nimm dein Seil, und sammle alle Kisten auf dieser mittelgroßen Karte ein."
+
+Challenge_-_Speed_Shoppa_-_ShoppaKing.name=Herausforderung: Der Kunde ist König
+Challenge_-_Speed_Shoppa_-_ShoppaKing.desc="Zeig, dass du dem Titel eines Königs würdig bist und sammle alle Kisten so schnell wie möglich mit deinem Seil auf dieser großen Karte ein."
+
--- a/share/hedgewars/Data/Locale/missions_en.txt	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/missions_en.txt	Mon Nov 09 18:37:57 2015 +0100
@@ -1,74 +1,83 @@
-Basic_Training_-_Bazooka.name=Basic Bazooka Training
-Basic_Training_-_Bazooka.desc="Using the wind to your advantage is key!"
-
-Basic_Training_-_Grenade.name=Basic Grenade Training
-Basic_Training_-_Grenade.desc="Remember, you pull the pin out AND throw!"
-
-Basic_Training_-_Cluster_Bomb.name=Basic Cluster Bomb Training
-Basic_Training_-_Cluster_Bomb.desc="Someone needs hot shower!"
-
-Basic_Training_-_Shotgun.name=Basic Shotgun Training
-Basic_Training_-_Shotgun.desc="Shoot first, ask questions later!"
-
-Basic_Training_-_Sniper_Rifle.name=Basic Sniper Rifle Training
-Basic_Training_-_Sniper_Rifle.desc="Boom, headshot!"
-
-Basic_Training_-_Rope.name=Basic Rope Training
-Basic_Training_-_Rope.desc="Get out there and swing!"
-
-User_Mission_-_Dangerous_Ducklings.name=Mission: Dangerous Ducklings
-User_Mission_-_Dangerous_Ducklings.desc="Alright, rookie! Time to put what we learned in Basic Training into practice!"
-
-User_Mission_-_Diver.name=Mission: Diver
-User_Mission_-_Diver.desc="This 'amphibious assault' thing is harder than it looks..."
-
-User_Mission_-_Teamwork.name=Mission: Teamwork
-User_Mission_-_Teamwork.desc="Sometimes, love hurts."
-
-User_Mission_-_Spooky_Tree.name=Mission: Spooky Tree
-User_Mission_-_Spooky_Tree.desc="Lots of crates out here. I sure hope that bird ain't feeling hungry."
-
-User_Mission_-_Bamboo_Thicket.name=Mission: Bamboo Thicket
-User_Mission_-_Bamboo_Thicket.desc="Death comes from above."
-
-User_Mission_-_That_Sinking_Feeling.name=Mission: That Sinking Feeling
-User_Mission_-_That_Sinking_Feeling.desc="The water is rising rapidly and time is limited. Many have tried and failed. Can you save them all?"
-
-User_Mission_-_Newton_and_the_Hammock.name=Mission: Newton and the Hammock
-User_Mission_-_Newton_and_the_Hammock.desc="Remember hoglets: The velocity of a body remains constant unless the body is acted upon by an external force!"
-
-User_Mission_-_The_Great_Escape.name=Mission: The Great Escape
-User_Mission_-_The_Great_Escape.desc="You think you can cage me!?"
-
-User_Mission_-_Rope_Knock_Challenge.name=Challenge: Rope Knocking
-User_Mission_-_Rope_Knock_Challenge.desc="Look behind you!"
-
-User_Mission_-_Nobody_Laugh.name=Mission: Nobody Laugh
-User_Mission_-_Nobody_Laugh.desc="This ain't no joke."
-
-User_Mission_-_RCPlane_Challenge.name=Challenge: RC Plane
-User_Mission_-_RCPlane_Challenge.desc="Feeling pretty confident, eh, flyboy?"
-
-portal.name=Mission: Portal Mind Challenge
-portal.desc="Use the portal to move fast and far, use it to kill, use it with caution!"
-
-Target_Practice_-_Bazooka_easy.name=Target Practice: Bazooka (easy)
-Target_Practice_-_Bazooka_easy.desc="Alright, soldier, blow those targets up as fast as you can!"
-
-Target_Practice_-_Bazooka_hard.name=Target Practice: Bazooka (hard)
-Target_Practice_-_Bazooka_hard.desc="Can you hit the targets even when they are very far away?"
-
-Target_Practice_-_Cluster_Bomb.name=Target Practice: Cluster Bomb
-Target_Practice_-_Cluster_Bomb.desc="Someone needs hot shower!"
-
-Target_Practice_-_Shotgun.name=Target Practice: Shotgun
-Target_Practice_-_Shotgun.desc="Shoot first, ask questions later!"
-
-Target_Practice_-_Homing_Bee.name=Target Practice: Homing Bee
-Target_Practice_-_Homing_Bee.desc="Using the homing bee is trickier than it seems."
-
-Target_Practice_-_Grenade_easy.name=Target Practice: Grenade (easy)
-Target_Practice_-_Grenade_easy.desc="A warm-up training for the aspiring grenadier."
-
-Target_Practice_-_Grenade_hard.name=Target Practice: Grenade (hard)
-Target_Practice_-_Grenade_hard.desc="This is nothing for greenhorns! We will place the targets at some really tricky positions."
\ No newline at end of file
+Basic_Training_-_Bazooka.name=Basic Bazooka Training
+Basic_Training_-_Bazooka.desc="Using the wind to your advantage is key!"
+
+Basic_Training_-_Grenade.name=Basic Grenade Training
+Basic_Training_-_Grenade.desc="Remember, you pull the pin out AND throw!"
+
+Basic_Training_-_Cluster_Bomb.name=Basic Cluster Bomb Training
+Basic_Training_-_Cluster_Bomb.desc="Someone needs hot shower!"
+
+Basic_Training_-_Shotgun.name=Basic Shotgun Training
+Basic_Training_-_Shotgun.desc="Shoot first, ask questions later!"
+
+Basic_Training_-_Sniper_Rifle.name=Basic Sniper Rifle Training
+Basic_Training_-_Sniper_Rifle.desc="Boom, headshot!"
+
+Basic_Training_-_Rope.name=Basic Rope Training
+Basic_Training_-_Rope.desc="Get out there and swing!"
+
+User_Mission_-_Dangerous_Ducklings.name=Mission: Dangerous Ducklings
+User_Mission_-_Dangerous_Ducklings.desc="Alright, rookie! Time to put what we learned in Basic Training into practice!"
+
+User_Mission_-_Diver.name=Mission: Diver
+User_Mission_-_Diver.desc="This 'amphibious assault' thing is harder than it looks..."
+
+User_Mission_-_Teamwork.name=Mission: Teamwork
+User_Mission_-_Teamwork.desc="Sometimes, love hurts."
+
+User_Mission_-_Spooky_Tree.name=Mission: Spooky Tree
+User_Mission_-_Spooky_Tree.desc="Lots of crates out here. I sure hope that bird ain't feeling hungry."
+
+User_Mission_-_Bamboo_Thicket.name=Mission: Bamboo Thicket
+User_Mission_-_Bamboo_Thicket.desc="Death comes from above."
+
+User_Mission_-_That_Sinking_Feeling.name=Mission: That Sinking Feeling
+User_Mission_-_That_Sinking_Feeling.desc="The water is rising rapidly and time is limited. Many have tried and failed. Can you save them all?"
+
+User_Mission_-_Newton_and_the_Hammock.name=Mission: Newton and the Hammock
+User_Mission_-_Newton_and_the_Hammock.desc="Remember hoglets: The velocity of a body remains constant unless the body is acted upon by an external force!"
+
+User_Mission_-_The_Great_Escape.name=Mission: The Great Escape
+User_Mission_-_The_Great_Escape.desc="You think you can cage me!?"
+
+User_Mission_-_Rope_Knock_Challenge.name=Challenge: Rope Knocking
+User_Mission_-_Rope_Knock_Challenge.desc="Look behind you!"
+
+User_Mission_-_Nobody_Laugh.name=Mission: Nobody Laugh
+User_Mission_-_Nobody_Laugh.desc="This ain't no joke."
+
+User_Mission_-_RCPlane_Challenge.name=Challenge: RC Plane
+User_Mission_-_RCPlane_Challenge.desc="Feeling pretty confident, eh, flyboy?"
+
+portal.name=Mission: Portal Mind Challenge
+portal.desc="Use the portal to move fast and far, use it to kill, use it with caution!"
+
+Target_Practice_-_Bazooka_easy.name=Target Practice: Bazooka (easy)
+Target_Practice_-_Bazooka_easy.desc="Alright, soldier, blow those targets up as fast as you can!"
+
+Target_Practice_-_Bazooka_hard.name=Target Practice: Bazooka (hard)
+Target_Practice_-_Bazooka_hard.desc="Can you hit the targets even when they are very far away?"
+
+Target_Practice_-_Cluster_Bomb.name=Target Practice: Cluster Bomb
+Target_Practice_-_Cluster_Bomb.desc="Someone needs hot shower!"
+
+Target_Practice_-_Shotgun.name=Target Practice: Shotgun
+Target_Practice_-_Shotgun.desc="Shoot first, ask questions later!"
+
+Target_Practice_-_Homing_Bee.name=Target Practice: Homing Bee
+Target_Practice_-_Homing_Bee.desc="Using the homing bee is trickier than it seems."
+
+Target_Practice_-_Grenade_easy.name=Target Practice: Grenade (easy)
+Target_Practice_-_Grenade_easy.desc="A warm-up training for the aspiring grenadier."
+
+Target_Practice_-_Grenade_hard.name=Target Practice: Grenade (hard)
+Target_Practice_-_Grenade_hard.desc="This is nothing for greenhorns! We will place the targets at some really tricky positions."
+
+Challenge_-_Speed_Shoppa_-_Hedgelove.name=Challenge: Shoppa Love
+Challenge_-_Speed_Shoppa_-_Hedgelove.desc="Show your love to rope and collect a few crates on a small map."
+
+Challenge_-_Speed_Shoppa_-_Ropes.name=Challenge: Ropes and Crates
+Challenge_-_Speed_Shoppa_-_Ropes.desc="Take your rope and collect all crates on this medium-sized map."
+
+Challenge_-_Speed_Shoppa_-_ShoppaKing.name=Challenge: The Customer is King
+Challenge_-_Speed_Shoppa_-_ShoppaKing.desc="Show you're worthy of a true king and collect all crates as fast as possible on this large map."
\ No newline at end of file
--- a/share/hedgewars/Data/Locale/missions_it.txt	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/missions_it.txt	Mon Nov 09 18:37:57 2015 +0100
@@ -43,5 +43,41 @@
 User_Mission_-_Rope_Knock_Challenge.name=Sfida: a colpi di corda
 User_Mission_-_Rope_Knock_Challenge.desc="Guarda sempre dietro di te!"
 
+User_Mission_-_Nobody_Laugh.name=Missione: Nessuno ride
+User_Mission_-_Nobody_Laugh.desc="Questo non è un gioco."
+
 User_Mission_-_RCPlane_Challenge.name=Sfida: aereo radiocomandato
-User_Mission_-_RCPlane_Challenge.desc="Ti senti abbastanza sicuro, eh, aviatore?"
\ No newline at end of file
+User_Mission_-_RCPlane_Challenge.desc="Ti senti abbastanza sicuro, eh, aviatore?"
+
+portal.name=Missione: Sfida il portale della mente
+portal.desc="Usa il portale per muoverti velocemente e lontano, usalo per uccidere, ma usalo con cauzione!"
+
+Target_Practice_-_Bazooka_easy.name=Tiro al Bersaglio: Bazooka (facile)
+Target_Practice_-_Bazooka_easy.desc="Ok, soldati, fate saltare questi bersagli più in fretta che potete!"
+
+Target_Practice_-_Bazooka_hard.name=Tiro al Bersaglio: Bazooka (difficile)
+Target_Practice_-_Bazooka_hard.desc="Puoi colpire i bersagli anche quando sono molto lontani?"
+
+Target_Practice_-_Cluster_Bomb.name=Tiro al Bersaglio: Bomba Cluster
+Target_Practice_-_Cluster_Bomb.desc="A qualcuno serve una doccia calda!"
+
+Target_Practice_-_Shotgun.name=Tiro al Bersaglio: Shotgun
+Target_Practice_-_Shotgun.desc="Prima spara, poi fai le domande!"
+
+Target_Practice_-_Homing_Bee.name=Tiro al Bersaglio: Ape a ricerca
+Target_Practice_-_Homing_Bee.desc="Usare l'ape a ricerca è più complicato di quello che sembra."
+
+Target_Practice_-_Grenade_easy.name=Tiro al Bersagio: Granata (facile)
+Target_Practice_-_Grenade_easy.desc="Un training di riscaldamento per aspiranti granatieri."
+
+Target_Practice_-_Grenade_hard.name=Tiro al Bersagio: Granata (difficile)
+Target_Practice_-_Grenade_hard.desc="Questo non è per novellini! Piazzeremo i bersagli in posti veramente difficili."
+
+Challenge_-_Speed_Shoppa_-_Hedgelove.name=Sfida: Amo Shoppa
+Challenge_-_Speed_Shoppa_-_Hedgelove.desc="Fai vedere il tuo amore e colleziona alcune casse in una mappa piccola."
+
+Challenge_-_Speed_Shoppa_-_Ropes.name=Sfida: Funi e Casse
+Challenge_-_Speed_Shoppa_-_Ropes.desc="Prendi la tua fune e colleziona tutte le casse in questa mappa media."
+
+Challenge_-_Speed_Shoppa_-_ShoppaKing.name=Sfida: Il Cliente è il Re
+Challenge_-_Speed_Shoppa_-_ShoppaKing.desc="Fai vedere che sei degno di un vero re e colleziona tutte le casse più in fretta che puoi in questa mappa grande."
--- a/share/hedgewars/Data/Locale/missions_ru.txt	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/missions_ru.txt	Mon Nov 09 18:37:57 2015 +0100
@@ -4,17 +4,23 @@
 Basic_Training_-_Grenade.name=Базовое упражнение с гранатой
 Basic_Training_-_Grenade.desc="Запомни: выдерни чеку и бросай!"
 
+Basic_Training_-_Cluster_Bomb.name=Базовое упражнение с касcетной бомбой
+Basic_Training_-_Cluster_Bomb.desc="Кому-то нужен горячий душ!"
+
 Basic_Training_-_Shotgun.name=Базовое упражнение с ружьём
 Basic_Training_-_Shotgun.desc="Стреляй, все вопросы потом!"
 
 Basic_Training_-_Sniper_Rifle.name=Базовое упражнение со снайперской винтовкой
 Basic_Training_-_Sniper_Rifle.desc="БАХ, в яблочко!"
 
-User_Mission_-_Dangerous_Ducklings.name=Миссия: Dangerous Ducklings
+Basic_Training_-_Rope.name=Базовое упражнение с верёвкой
+Basic_Training_-_Rope.desc="Раскачивайся и цепляйся!"
+
+User_Mission_-_Dangerous_Ducklings.name=Миссия: Опасные Утята
 User_Mission_-_Dangerous_Ducklings.desc="Ну что, новобранцы! Пора на практике проверить, чему вы научились на базовых упражнениях!"
 
 User_Mission_-_Diver.name=Миссия: Ныряльщик
-User_Mission_-_Diver.desc="This 'amphibious assault' thing is harder than it looks..."
+User_Mission_-_Diver.desc="'Морской десант' это сложнее, чем кажется..."
 
 User_Mission_-_Teamwork.name=Миссия: Командная работа
 User_Mission_-_Teamwork.desc="Иногда любовь ранит."
@@ -22,11 +28,56 @@
 User_Mission_-_Spooky_Tree.name=Миссия: Зловещее дерево
 User_Mission_-_Spooky_Tree.desc="Здесь много ящиков. Конечно, я уверен, что эта птица не голодна."
 
-User_Mission_-_Bamboo_Thicket.name=Миссия: Bamboo Thicket
+User_Mission_-_Bamboo_Thicket.name=Миссия: Заросли Бамбука
 User_Mission_-_Bamboo_Thicket.desc="Смерть приходит сверху."
 
-User_Mission_-_That_Sinking_Feeling.name=Миссия: That Sinking Feeling
+User_Mission_-_That_Sinking_Feeling.name=Миссия: Дед Мазай и Ёжики
 User_Mission_-_That_Sinking_Feeling.desc="Вода быстро поднимается, а время ограничено. Многие пытались без успеха. Сможешь ли ты спасти всех?"
 
 User_Mission_-_Newton_and_the_Hammock.name=Миссия: Ньютон и гамак
 User_Mission_-_Newton_and_the_Hammock.desc="Ежата, запомните: Скорость тела остаётся постоянной, пока к нему не применяется внешняя сила!"
+
+User_Mission_-_The_Great_Escape.name=Миссия: Великий Побег
+User_Mission_-_The_Great_Escape.desc="Вы думаете, клетка меня остановит!?"
+
+User_Mission_-_Rope_Knock_Challenge.name=Испытание: Толчок Верёвкой
+User_Mission_-_Rope_Knock_Challenge.desc="Оглянись!"
+
+User_Mission_-_Nobody_Laugh.name=Миссия: Никто не смеётся
+User_Mission_-_Nobody_Laugh.desc="Это не шутка ли."
+
+User_Mission_-_RCPlane_Challenge.name=Испытание: Радиоуправляемый самолёт
+User_Mission_-_RCPlane_Challenge.desc="Чувствешь себя довольно уверенно, а, пилотишко?"
+
+portal.name=Миссия: Портальная головоломка
+portal.desc="Используй портал для перемещения, используй его для убийства, используй его с осторожностью!"
+
+Target_Practice_-_Bazooka_easy.name=Учебная Стрельба: Базука (легко)
+Target_Practice_-_Bazooka_easy.desc="Хорошо, солдат, взорви эти цели так быстро, как сможешь!"
+
+Target_Practice_-_Bazooka_hard.name=Учебная Стрельба: Базука (сложно)
+Target_Practice_-_Bazooka_hard.desc="Сможешь ли ты попасть в цели даже если они далеко?"
+
+Target_Practice_-_Cluster_Bomb.name=Учебная Стрельба: Касcетная бомба
+Target_Practice_-_Cluster_Bomb.desc="Кому-то нужен горячий душ!"
+
+Target_Practice_-_Shotgun.name=Учебная Стрельба: Дробовик
+Target_Practice_-_Shotgun.desc="Сначала стреляй, потом спрашивай!"
+
+Target_Practice_-_Homing_Bee.name=Учебная Стрельба: Пчёлка
+Target_Practice_-_Homing_Bee.desc="Использование пчёлки сложнее, чем может показаться на первый взгляд."
+
+Target_Practice_-_Grenade_easy.name=Учебная Стрельба: Граната (легко)
+Target_Practice_-_Grenade_easy.desc="Разминочная тренировка для чистолюбивого гренадера."
+
+Target_Practice_-_Grenade_hard.name=Учебная Стрельба: Граната (сложно)
+Target_Practice_-_Grenade_hard.desc="Это точно не для молокососов! Мы поместили цели в действительно труднодоступные места."
+
+Challenge_-_Speed_Shoppa_-_Hedgelove.name=Испытание: Shoppa Love
+Challenge_-_Speed_Shoppa_-_Hedgelove.desc="Покажите вашу любовь к верёвке и соберите несколько ящиков на маленькой карте."
+
+Challenge_-_Speed_Shoppa_-_Ropes.name=Испытание: Верёвки и Ящики
+Challenge_-_Speed_Shoppa_-_Ropes.desc="Возьмите вашу верёвку и соберите все ящики на этой средних размеров карте."
+
+Challenge_-_Speed_Shoppa_-_ShoppaKing.name=Испытание: Покупатель это Король
+Challenge_-_Speed_Shoppa_-_ShoppaKing.desc="Докажите, что вы настоящий король и соберите все ящики на этой огромной карте так быстро, как сможете."
\ No newline at end of file
--- a/share/hedgewars/Data/Locale/ru.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/ru.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -4,15 +4,18 @@
 --      ["..."] = "",
 --      ["011101000"] = "", -- A_Classic_Fairytale:dragon
 --      ["011101001"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:family, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
---      ["+1 to a Bottom Feeder for killing anyone"] = "", -- Mutant
---      ["+1 to a Mutant for killing anyone"] = "", -- Mutant
---      ["-1 to anyone for a suicide"] = "", -- Mutant
---      ["+2 for becoming a Mutant"] = "", -- Mutant
+      ["+1 to a Bottom Feeder for killing anyone"] = "+1 Аутсайдеру за убийство", -- Mutant
+      ["+1 to a Mutant for killing anyone"] = "+1 Мутанту за убийство", -- Mutant
+      ["-1 to anyone for a suicide"] = "-1 за самоубийство", -- Mutant
+      ["+2 for becoming a Mutant"] = "+2 за то, что стал Мутантом", -- Mutant
 --      ["30 minutes later..."] = "", -- A_Classic_Fairytale:shadow
 --      ["About a month ago, a cyborg came and told us that you're the cannibals!"] = "", -- A_Classic_Fairytale:enemy
-      ["Accuracy Bonus!"] = "Бонус за аккуратность!",
---      ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
---      ["Achievement Unlocked"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_That_Sinking_Feeling, Tumbler
+      ["Above-average pilot"] = "Пилот выше среднего", -- User_Mission_-_RCPlane_Challenge
+      ["Accuracy Bonus!"] = "Бонус за точность!",
+      ["Accuracy bonus: +%d points"] = "Бонус за точность: +%d очков", -- Basic_Training_-_Sniper_Rifle
+      ["Ace"] = "Ас", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
+      ["Achievement obtained: Lively Lifeguard"] = "Достижение получено: Живучий Спасатель", -- User_Mission_-_That_Sinking_Feeling
+      ["Achievement Unlocked"] = "Достижение Разблокировано", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_That_Sinking_Feeling, Tumbler
 --      ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
 --      ["???"] = "", -- A_Classic_Fairytale:backstab
 --      ["Actually, you aren't worthy of life! Take this..."] = "", -- A_Classic_Fairytale:shadow
@@ -24,22 +27,23 @@
 --      ["After Leaks A Lot betrayed his tribe, he joined the cannibals..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["After the shock caused by the enemy spy, Leaks A Lot and Dense Cloud went hunting to relax."] = "", -- A_Classic_Fairytale:shadow
 --      ["Again with the 'cannibals' thing!"] = "", -- A_Classic_Fairytale:enemy
---      ["Aggressively removes enemy hedgehogs."] = "", -- Construction_Mode
---      ["a Hedgewars challenge"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
+      ["Aggressively removes enemy hedgehogs."] = "Агрессивно уничтожает вражеских ежей.", -- Construction_Mode
+      ["a Hedgewars challenge"] = "Hedgewars испытание", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
       ["a Hedgewars mini-game"] = "Мини-игра в Hedgewars", -- Space_Invasion, The_Specialists
---      ["a Hedgewars tag game"] = "", -- Mutant
+      ["a Hedgewars tag game"] = "Ролевая игра в Hedgewars", -- Mutant
 --      ["AHHh, home sweet home.  Made it in %d seconds."] = "", -- ClimbHome
       ["Aiming Practice"] = "Упражнение на точность", --Bazooka, Shotgun, SniperRifle
---      ["Air Attack"] = "", -- Construction_Mode
+      ["Aiming practice"] = "Упражнение на точность", -- TargetPractice
+      ["Air Attack"] = "Воздушная атака", -- Construction_Mode
 --      ["A leap in a leap"] = "", -- A_Classic_Fairytale:first_blood
 --      ["A little gift from the cyborgs"] = "", -- A_Classic_Fairytale:shadow
 --      ["All gone...everything!"] = "", -- A_Classic_Fairytale:enemy
---      ["Allows free teleportation between other nodes."] = "", -- Construction_Mode
---      ["Allows placement of girders, rubber-bands, mines, sticky mines and barrels."] = "", -- Construction_Mode
+      ["Allows free teleportation between other nodes."] = "Позволяет телепортироваться между другими узлами.", -- Construction_Mode
+      ["Allows placement of girders, rubber-bands, mines, sticky mines and barrels."] = "Позволяет размещать балки, батуты, мины, мины-липучки и бочки.", -- Construction_Mode
 --      ["Allows placement of structures."] = "", -- Construction_Mode
---      ["Allows the placement of weapons, utiliites, and health crates."] = "", -- Construction_Mode
+      ["Allows the placement of weapons, utiliites, and health crates."] = "Позволяет размещать ящики с оружием, утилитами и аптечки.", -- Construction_Mode
 --      ["All right, we just need to get to the other side of the island!"] = "", -- A_Classic_Fairytale:journey
---      ["All walls touched!"] = "", -- WxW
+      ["All walls touched!"] = "Все стены тронуты!", -- WxW
 --      ["Ammo"] = "",
 --      ["Ammo Depleted!"] = "",
 --      ["ammo extended!"] = "",
@@ -62,51 +66,58 @@
 --      ["Are you saying that many of us have died for your entertainment?"] = "", -- A_Classic_Fairytale:enemy
 --      ["Artur Detour"] = "", -- A_Classic_Fairytale:queen
 --      ["As a reward for your performance, here's some new technology!"] = "", -- A_Classic_Fairytale:dragon
---      ["a shoppa minigame"] = "", -- WxW
+      ["a shoppa minigame"] = "shoppa мини-игра", -- WxW
 --      ["Asia"] = "", -- Continental_supplies
 --      ["Assault Team"] = "", -- A_Classic_Fairytale:backstab
 --      ["As the ammo is sparse, you might want to reuse ropes while mid-air.|"] = "", -- A_Classic_Fairytale:dragon
 --      ["As the challenge was completed, Leaks A Lot set foot on the ground..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["As you can see, there is no way to get on the other side!"] = "", -- A_Classic_Fairytale:dragon
---      ["Attack From Rope"] = "", -- WxW
+      ["Attack From Rope"] = "Атака с верёвки", -- WxW
 --      ["Australia"] = "", -- Continental_supplies
---      ["Available points remaining: "] = "",
+      ["Available points remaining: "] = "Осталось точек для размещения: ",
+      ["Average pilot"] = "Средний Пилот", -- User_Mission_-_RCPlane_Challenge
 --      ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
 --      ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
 --      ["[Backspace]"] = "",
 --      ["Backstab"] = "", -- A_Classic_Fairytale:backstab
---      ["Bad Team"] = "", -- User_Mission_-_The_Great_Escape
---      ["Ballgun"] = "", -- Construction_Mode
---      ["Bamboo Thicket"] = "",
+      ["Bad Guy"] = "Плохой", -- User_Mission_-_The_Great_Escape
+      ["badmad"] = "Злодеи", -- portal
+      ["Bad Team"] = "Злодеи", -- User_Mission_-_The_Great_Escape
+      ["Ballgun"] = "Шаромёт", -- Construction_Mode
+      ["Bamboo Thicket"] = "Заросли Бамбука", -- User_Mission_-_Bamboo_Thicket
 --      ["Barrel Eater!"] = "",
 --      ["Barrel Launcher"] = "",
---      ["Barrel Placement Mode"] = "", -- Construction_Mode
---      ["Baseball Bat"] = "", -- Construction_Mode
+      ["Barrel Placement Mode"] = "Режим Размещения Бочек", -- Construction_Mode
+      ["Baseball Bat"] = "Бейсбольная бита", -- Construction_Mode
 --      ["Baseballbat"] = "", -- Continental_supplies
---      ["Bat balls at your enemies and|push them into the sea!"] = "",
---      ["Bat your opponents through the|baskets and out of the map!"] = "",
---      ["Bazooka"] = "", -- Construction_Mode, Frenzy, A_Space_Adventure:death02
-      ["Bazooka Training"] = "Упражнение с базукой",
+      ["Bat balls at your enemies and|push them into the sea!"] = "Сбей своих соберников|бейсбольными мячами в воду!",
+      ["Bat your opponents through the|baskets and out of the map!"] = "Выбей своих соберников через корзину в воду!",
+      ["Bazooka"] = "Базука", -- Construction_Mode, Frenzy, A_Space_Adventure:death02
+      ["Bazooka Training"] = "Тренировка с базукой",
 --      ["Beep Loopers"] = "", -- A_Classic_Fairytale:queen
+      ["Beginner"] = "Новичок", -- User_Mission_-_RCPlane_Challenge
+      ["Below-average pilot"] = "Пилот ниже среднего", -- User_Mission_-_RCPlane_Challenge
 --      ["Best laps per team: "] = "",
---      ["Best Team Times: "] = "",
+      ["Best Team Times: "] = "ЛУЧШЕЕ ВРЕМЯ КОМАНДЫ: ",
 --      ["Beware, though! If you are slow, you die!"] = "", -- A_Classic_Fairytale:dragon
---      ["Bio-Filter"] = "", -- Construction_Mode
+      ["Bio-Filter"] = "Био-Фильтр", -- Construction_Mode
 --      ["Biomechanic Team"] = "", -- A_Classic_Fairytale:family
---      ["Birdy"] = "", -- Construction_Mode
+      ["Birdy"] = "Птичка", -- Construction_Mode
 --      ["Blender"] = "", -- A_Classic_Fairytale:family
 --      ["Bloodpie"] = "", -- A_Classic_Fairytale:backstab
 --      ["Bloodrocutor"] = "", -- A_Classic_Fairytale:shadow
 --      ["Bloodsucker"] = "", -- A_Classic_Fairytale:shadow
---      ["Bloody Rookies"] = "", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
---      ["Blowtorch"] = "", -- Construction_Mode, Frenzy
---      ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
+      ["Bloody Rookies"] = "Новобранцы", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
+      ["Blowtorch"] = "Бур", -- Construction_Mode, Frenzy
+      ["Blue Team"] = "Синяя Команда", -- User_Mission_-_Dangerous_Ducklings
+      ["Bobo"] = "Бобо", -- User_Mission_-_Nobody_Laugh
 --      ["Bone Jackson"] = "", -- A_Classic_Fairytale:backstab
 --      ["Bonely"] = "", -- A_Classic_Fairytale:shadow
       ["BOOM!"] = "БАБАХ!",
       ["Boom!"] = "Бум!",
 --      ["Boss defeated!"] = "",
 --      ["Boss Slayer!"] = "",
+      ["BOTTOM FEEDER"] = "АУТСАЙДЕР", -- Mutant
 --      ["Brain Blower"] = "", -- A_Classic_Fairytale:journey
 --      ["Brainiac"] = "", -- A_Classic_Fairytale:epil, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
 --      ["Brainila"] = "", -- A_Classic_Fairytale:united
@@ -114,8 +125,8 @@
 --      ["Brain Teaser"] = "", -- A_Classic_Fairytale:backstab
 --      ["Brutal Lily"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil
 --      ["Brutus"] = "", -- A_Classic_Fairytale:backstab
---      ["Build a fortress and destroy your enemy."] = "", -- Construction_Mode
---      ["Build a track and race."] = "",
+      ["Build a fortress and destroy your enemy."] = "Постройте крепость и уничтожьте своего врага.", -- Construction_Mode
+      ["Build a track and race."] = "Постройте трек и гоняйте!",
 --      ["Bullseye"] = "", -- A_Classic_Fairytale:dragon
 --      ["But it proved to be no easy task!"] = "", -- A_Classic_Fairytale:dragon
 --      ["But that's impossible!"] = "", -- A_Classic_Fairytale:backstab
@@ -125,64 +136,78 @@
 --      ["But why would they help us?"] = "", -- A_Classic_Fairytale:backstab
 --      ["But you're cannibals. It's what you do."] = "", -- A_Classic_Fairytale:enemy
 --      ["But you said you'd let her go!"] = "", -- A_Classic_Fairytale:journey
---      ["Cake"] = "", -- Construction_Mode
+--      ["C-1"] = "", -- portal
+--      ["C-2"] = "", -- portal
+      ["Cake"] = "Торт", -- Construction_Mode
 --      ["Call me Beep! Well, 'cause I'm such a nice...person!"] = "", -- A_Classic_Fairytale:family
 --      ["Cannibals"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:first_blood
 --      ["Cannibal Sentry"] = "", -- A_Classic_Fairytale:journey
 --      ["Cannibals?! You're the cannibals!"] = "", -- A_Classic_Fairytale:enemy
       ["CAPTURE THE FLAG"] = "ЗАХВАТ ФЛАГА",
---      ["Careless"] = "",
+      ["Careless"] = "Беспечный",
 --      ["Carol"] = "", -- A_Classic_Fairytale:family
---      ["CHALLENGE COMPLETE"] = "", -- User_Mission_-_RCPlane_Challenge
+      ["Challenge"] = "Испытание", -- SpeedShoppa
+      ["CHALLENGE COMPLETE"] = "МИССИЯ ПРОЙДЕНА", -- User_Mission_-_RCPlane_Challenge
+      ["Challenge completed!"] = "Испытание пройдено!", -- SpeedShoppa
+      ["Challenge failed!"] = "Испытание провалено!", -- SpeedShoppa
       ["Change Weapon"] = "Сменить оружие",
 --      ["changing range from %i%% to %i%% with period of %i msec"] = "", -- Gravity
+      ["Cheater"] = "Читер", -- User_Mission_-_RCPlane_Challenge
 --      ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
---      ["Cleaver"] = "", -- Construction_Mode
+      ["Cleaver"] = "Секач", -- Construction_Mode
 --      ["Cleaver Placement Mode"] = "", -- Construction_Mode
 --      ["Climber"] = "", -- ClimbHome
 --      ["Climb Home"] = "", -- ClimbHome
---      ["Clowns"] = "", -- User_Mission_-_Nobody_Laugh
---      ["Clumsy"] = "",
---      ["Cluster Bomb"] = "", -- Construction_Mode
---      ["Cluster Bomb MASTER!"] = "", -- Basic_Training_-_Cluster_Bomb
---      ["Cluster Bomb Training"] = "", -- Basic_Training_-_Cluster_Bomb
---      ["Codename: Teamwork"] = "",
+      ["Clowns"] = "Клоуны", -- User_Mission_-_Nobody_Laugh
+      ["Clumsy"] = "Неуклюжий",
+      ["Cluster Bomb"] = "Касcетная бомба", -- Construction_Mode
+      ["Cluster Bomb MASTER!"] = "МАСТЕР Касcетной бомбы", -- Basic_Training_-_Cluster_Bomb
+      ["Cluster Bomb Training"] = "Тренировка с Касcетной бомбой", -- Basic_Training_-_Cluster_Bomb
+      ["Codename: Teamwork"] = "Кодовое имя: 'Командная работа'",
 --      ["Collateral Damage"] = "", -- A_Classic_Fairytale:journey
 --      ["Collateral Damage II"] = "", -- A_Classic_Fairytale:journey
 --      ["Collect all the crates, but remember, our time in this life is limited!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Collect or destroy all the health crates."] = "", -- User_Mission_-_RCPlane_Challenge
+      ["Collect or destroy all the health crates."] = "Собери или уничтожь все аптечки.", -- User_Mission_-_RCPlane_Challenge
 --      ["Collect the crate on the right.|Hint: Select the rope, [Up] or [Down] to aim, [Space] to fire, directional keys to move.|Ropes can be fired again in the air!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Collect the crates within the time limit!|If you fail, you'll have to try again."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Come closer, so that your training may continue!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Compete to use as few planes as possible!"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Complete the track as fast as you can!"] = "",
---      ["COMPLETION TIME"] = "", -- User_Mission_-_Rope_Knock_Challenge
---      ["Configuration accepted."] = "", -- WxW
---      ["Congratulations"] = "", -- Basic_Training_-_Rope
---      ["Congratulations! You needed only half of time|to eliminate all targets."] = "", -- Basic_Training_-_Cluster_Bomb
---      ["Congratulations! You've completed the Rope tutorial! |- Tutorial ends in 10 seconds!"] = "", -- Basic_Training_-_Rope
---      ["Congratulations! You've eliminated all targets|within the allowed time frame."] = "", --Bazooka, Shotgun, SniperRifle
+      ["Compete to use as few planes as possible!"] = "Постарайся использовать как можно меньше самолетов!", -- User_Mission_-_RCPlane_Challenge
+      ["Complete the track as fast as you can!"] = "Закончите трек так быстро, как сможете!",
+      ["COMPLETION TIME"] = "ВРЕМЯ ЗАВЕРШЕНИЯ", -- User_Mission_-_Rope_Knock_Challenge
+      ["Configuration accepted."] = "Конфигурация принята.", -- WxW
+      ["Congratulations!"] = "Поздравляем!",
+      ["Congratulations"] = "Поздравляем", -- Basic_Training_-_Rope
+      ["Congratulations! You have destroyed all targets within the time."] = "Поздравляем! Вы уничтожили все цели во время.", -- TargetPractice
+      ["Congratulations! You have truly mastered this challenge! Don't forget to save the demo."] = "Поздравляем! Вы действительно освоили это испытание!", -- User_Mission_-_RCPlane_Challenge
+      ["Congratulations! You needed only half of time|to eliminate all targets."] = "Поздравляем! Тебе понадобилась только половина|времени, чтобы уничтожить все цели.", -- Basic_Training_-_Cluster_Bomb
+      ["Congratulations! You've completed the Rope tutorial! |- Tutorial ends in 10 seconds!"] = "Поздравляем! Ты закончил упражнение с Верёвкой!  |- Упражнение завершится через 10 секунд!", -- Basic_Training_-_Rope
+      ["Congratulations! You've eliminated all targets|within the allowed time frame."] = "Поздравляем! Ты уничтожил все цели во время.", --Bazooka, Shotgun, SniperRifle
       ["Congratulations!"] = "Поздравления!",
---      ["CONSTRUCTION MODE"] = "", -- Construction_Mode
---      ["Construction Station"] = "", -- Construction_Mode
+      ["CONSTRUCTION MODE"] = "РЕЖИМ СТРОИТЕЛЬСТВА", -- Construction_Mode
+      ["Construction Station"] = "Станция Утилит", -- Construction_Mode
 --      ["Continental supplies"] = "", -- Continental_supplies
---      ["Control pillars to score points."] = "",
---      ["Core"] = "", -- Construction_Mode
+      ["Copper"] = "Медный", -- User_Mission_-_Nobody_Laugh
+      ["CONTROL"] = "КОНТРОЛЬ", -- Control
+      ["Control pillars to score points."] = "Контролируй колонны, чтобы заработать очки.", -- Control
+      ["Core"] = "Ядро", -- Construction_Mode
 --      ["Corporationals"] = "", -- A_Classic_Fairytale:queen
 --      ["Corpsemonger"] = "", -- A_Classic_Fairytale:shadow
 --      ["Corpse Thrower"] = "", -- A_Classic_Fairytale:epil
---      ["Cost"] = "", -- Construction_Mode
---      ["Crate Placement Tool"] = "", -- Construction_Mode
-      ["Crates Left:"] = "Осталось ящиков:", -- User_Mission_-_RCPlane_Challenge
+      ["Cost"] = "Стоимость", -- Construction_Mode
+      ["Crate Placement Tool"] = "Инструмент Размещения Ящиков", -- Construction_Mode
+      ["Crates left: %d"] = "Осталось ящиков: %d", -- User_Mission_-_RCPlane_Challenge
+      ["crate(s)"] = "ящиков", -- SpeedShoppa
+      ["%d crate(s) remaining"] = "%d ящиков осталось", -- SpeedShoppa
 --      ["Cricket time: [Drop a fireable mine! ~ Will work if fired close to your hog & far away from enemy ~ 1 sec]"] = "", -- Continental_supplies
 --      ["Current setting is "] = "", -- Gravity
---      ["Cybernetic Empire"] = "",
+      ["Cybernetic Empire"] = "Кибер Империя", -- User_Mission_-_Bamboo_Thicket
 --      ["Cyborg. It's what the aliens call themselves."] = "", -- A_Classic_Fairytale:enemy
 --      ["Dahmer"] = "", -- A_Classic_Fairytale:backstab
---      ["DAMMIT, ROOKIE!"] = "",
---      ["DAMMIT, ROOKIE! GET OFF MY HEAD!"] = "",
---      ["Dangerous Ducklings"] = "",
---      ["Deadweight"] = "",
+      ["DAMMIT, ROOKIE!"] = "ЧЁРТ ПОБЕРИ, САЛАГА!",
+      ["DAMMIT, ROOKIE! GET OFF MY HEAD!"] = "ЧЁРТ ПОБЕРИ! СЛЕЗЬ С МОЕЙ ГОЛОВЫ!",
+      ["Dangerous Ducklings"] = "Опасные Утята", -- User_Mission_-_Dangerous_Ducklings
+      ["Deadweight"] = "Балласт",
+      ["deaths"] = "смертей", -- Mutant
 --      ["Decrease"] = "", -- Continental_supplies
 --      ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
 --      ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
@@ -190,37 +215,43 @@
 --      ["Defeat the cyborgs!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Defend your core from the enemy."] = "", -- Construction_Mode
 --      ["Defend yourself!|Hint: You can get tips on using weapons by moving your mouse over them in the weapon selection menu"] = "", -- A_Classic_Fairytale:shadow
---      ["Dematerializes weapons and equipment carried by enemy hedgehogs."] = "", -- Construction_Mode
---      ["Demolition is fun!"] = "",
+      ["Dematerializes weapons and equipment carried by enemy hedgehogs."] = "Аннигилирует вражеское оружие и оборудование.", -- Construction_Mode
+      ["Demo"] = "Демон", -- The_Specialists
+      ["Demolition is fun!"] = "Разрушать весело!",
 --      ["Dense Cloud"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
 --      ["Dense Cloud must have already told them everything..."] = "", -- A_Classic_Fairytale:shadow
 --      ["Depleted Kamikaze!"] = "",
---      ["Desert Eagle"] = "", -- Construction_Mode, A_Space_Adventure:death02
+      ["Derp"] = "Глупый", -- User_Mission_-_Nobody_Laugh
+      ["Desert Eagle"] = "Пистолет Desert Eagle", -- Construction_Mode, A_Space_Adventure:death02
 --      ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Destroy invaders to score points."] = "",
 --      ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
+      ["Destroyer of planes"] = "Уничтожитель самолётов", -- User_Mission_-_RCPlane_Challenge
 --      ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
 --      ["Did you see him coming?"] = "", -- A_Classic_Fairytale:shadow
 --      ["Did you warn the village?"] = "", -- A_Classic_Fairytale:shadow
 --      ["Die, die, die!"] = "", -- A_Classic_Fairytale:dragon
+      ["Disabled"] = "Отключено", -- WxW
 --      ["Disguise as a Rockhopper Penguin: [Swap place with a random enemy hog in the circle]"] = "", -- Continental_supplies
+      ["Disqualified!"] = "Дисквалификация!", -- User_Mission_-_That_Sinking_Feeling
 --      ["Dist: "] = "", -- Space_Invasion
 --      ["Do not laugh, inexperienced one, for he speaks the truth!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Do not let his words fool you, young one! He will stab you in the back as soon as you turn away!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Do the deed"] = "", -- A_Classic_Fairytale:first_blood
---      ["DOUBLE KILL"] = "", -- Mutant
+      ["DOUBLE KILL"] = "ДВОЙНОЕ УБИЙСТВО", -- Mutant
       ["Double Kill!"] = "Двойное убийство!",
 --      ["Do you have any idea how valuable grass is?"] = "", -- A_Classic_Fairytale:enemy
 --      ["Do you think you're some kind of god?"] = "", -- A_Classic_Fairytale:enemy
 --      ["Dragon's Lair"] = "", -- A_Classic_Fairytale:dragon
---      ["Drill Rocket"] = "", -- Construction_Mode
+      ["Drill Rocket"] = "Сверлящая ракета", -- Construction_Mode
 --      ["Drills"] = "", -- A_Classic_Fairytale:backstab
 --      ["Drill Strike"] = "", -- Construction_Mode
 --      ["Drone Hunter!"] = "",
 --      ["Drop a bomb: [Drop some heroic wind that will turn into a bomb on impact]"] = "", -- Continental_supplies
 
---      ["Drowner"] = "",
+      ["Drowner"] = "Утопающий", -- User_Mission_-_Nobody_Laugh
+      ["Drunk greenhorn"] = "Пьяный молокосос", -- User_Mission_-_RCPlane_Challenge
 --      ["Dude, all the plants are gone!"] = "", -- A_Classic_Fairytale:family
 --      ["Dude, can you see Ramon and Spiky?"] = "", -- A_Classic_Fairytale:journey
 --      ["Dude, that's so cool!"] = "", -- A_Classic_Fairytale:backstab
@@ -231,27 +262,31 @@
 --      ["Duration"] = "", -- Continental_supplies
 --      ["Dust storm: [Deals 15 damage to all enemies in the circle]"] = "", -- Continental_supplies
 
---      ["Dynamite"] = "", -- Construction_Mode
+      ["Dynamite"] = "Динамит", -- Construction_Mode
 --      ["Each turn is only ONE SECOND!"] = "", -- Frenzy
---      ["Each turn you get 1-3 random weapons"] = "",
---      ["Each turn you get one random weapon"] = "",
+      ["Each turn you get 1-3 random weapons"] = "Каждый ход вы получаете 1-3 случайных оружия",
+      ["Each turn you get one random weapon"] = "Каждый ход вы получаете одно случайное оружие",
 --      ["Eagle Eye"] = "", -- A_Classic_Fairytale:backstab
 --      ["Eagle Eye: [Blink to the impact ~ One shot]"] = "", -- Continental_supplies
 
 --      ["Ear Sniffer"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:epil
+      ["Eckles"] = "Заика", -- User_Mission_-_Nobody_Laugh
 --      ["Elderbot"] = "", -- A_Classic_Fairytale:family
---      ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
---      ["Eliminate all enemies"] = "",
---      ["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "", --Bazooka, Shotgun, SniperRifle
---      ["Eliminate enemy hogs and take their weapons."] = "", -- Highlander
---      ["Eliminate Poison before the time runs out"] = "",
---      ["Eliminate the Blue Team"] = "",
---      ["Eliminate the enemy before the time runs out"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
+      ["Elimate your captor."] = "Уничтожь твоего похитителя.", -- User_Mission_-_The_Great_Escape
+      ["Eliminate all enemies"] = "Уничтожьте всех врагов",
+      ["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Уничтожь все цели, пока время не вышло.|Для этой миссии доступен неограниченный боезапас.", --Bazooka, Shotgun, SniperRifle
+      ["Eliminate enemy hogs and take their weapons."] = "Уничтожьте вражеских ежей и получите их оружие.", -- Highlander
+      ["Eliminate Poison before the time runs out"] = "Уничтожь Яд пока время не вышло",
+      ["Eliminate the Blue Team"] = "Уничтожь Синюю Команду",
+      ["Eliminate the enemy before the time runs out"] = "Уничтожь врага пока время не вышло", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
 --      ["Eliminate the enemy hogs to win."] = "",
---      ["Eliminate the enemy specialists."] = "",
---      ["- Eliminate Unit 3378 |- Feeble Resistance must survive"] = "",
+      ["Eliminate the enemy specialists."] = "Уничтожьте вражеских специалистов.",
+      ["- Eliminate Unit 3378 |- Feeble Resistance must survive"] = "- Уничтожьте Юнит 3378 |- Слабое Сопротивление должно выжить",
+      ["Elite pilot"] = "Элитный пилот", -- User_Mission_-_RCPlane_Challenge
 --      ["Elmo"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
---      ["Energetic Engineer"] = "",
+      ["Enabled"] = "Включено", -- WxW
+      ["Energetic Engineer"] = "Энергичный Инженер", -- User_Mission_-_Bamboo_Thicket
+      ["Engineer"] = "Инженер", -- The_Specialists
       ["Enjoy the swim..."] = "Приятного плавания...",
 --      ["[Enter]"] = "",
 --      ["Europe"] = "", -- Continental_supplies
@@ -260,119 +295,129 @@
 --      ["Every single time!"] = "", -- A_Classic_Fairytale:dragon
 --      ["Everything looks OK..."] = "", -- A_Classic_Fairytale:enemy
 --      ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
---      ["Extra Damage"] = "", -- Construction_Mode
---      ["Extra Time"] = "", -- Construction_Mode
+      ["Experienced beginner"] = "Продвинутый новичок", -- User_Mission_-_RCPlane_Challenge
+      ["Extra Damage"] = "Дополнительный урон", -- Construction_Mode
+      ["Extra Time"] = "Дополнительное время", -- Construction_Mode
 --      ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
 --      ["Family Reunion"] = "", -- A_Classic_Fairytale:family
---      ["Fastest lap: "] = "",
---      ["Feeble Resistance"] = "",
+      ["Fastest lap: "] = "Лучший круг: ",
+      ["Feeble Resistance"] = "Слабое Сопротивление",
 --      ["Fell From Grace"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
 --      ["Fell From Heaven"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen
 --      ["Fell From Heaven is the best! Fell From Heaven is the greatest!"] = "", -- A_Classic_Fairytale:family
 --      ["Femur Lover"] = "", -- A_Classic_Fairytale:shadow
 --      ["Fierce Competition!"] = "", -- Space_Invasion
 --      ["Fiery Water"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
---      ["Filthy Blue"] = "", -- User_Mission_-_Dangerous_Ducklings
+      ["Filthy Blue"] = "Грязный Синяк", -- User_Mission_-_Dangerous_Ducklings
 --      ["Find your tribe!|Cross the lake!"] = "", -- A_Classic_Fairytale:dragon
 --      ["Finish your training|Hint: Animations can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Fire"] = "",
 
 --      ["First aid kits?!"] = "", -- A_Classic_Fairytale:united
 --      ["First Blood"] = "", -- A_Classic_Fairytale:first_blood
---      ["FIRST BLOOD MUTATES"] = "", -- Mutant
+      ["FIRST BLOOD MUTATES"] = "ПЕРВАЯ КРОВЬ МУТИРУЕТ", -- Mutant
 --      ["First Steps"] = "", -- A_Classic_Fairytale:first_blood
---      ["Flag captured!"] = "",
---      ["Flag respawned!"] = "",
---      ["Flag returned!"] = "",
---      ["Flags, and their home base will be placed where each team ends their first turn."] = "",
+      ["Flag captured!"] = "Флаг захвачен!",
+      ["Flag respawned!"] = "Респаун флага!",
+      ["Flag returned!"] = "Флаг возвращен!",
+      ["Flags, and their home base will be placed where each team ends their first turn."] = "Флаги и базы будут помещены там, где каждая команда закончила свои первый ход.",
 --      ["Flamer"] = "",
---      ["Flamethrower"] = "", -- Construction_Mode
+      ["Flamethrower"] = "Огнемет", -- Construction_Mode
 --      ["Flaming Worm"] = "", -- A_Classic_Fairytale:backstab
+      ["Flawless victory!"] = "Безупречная победа!", -- User_Mission_-_RCPlane_Challenge
 
 --      ["Flesh for Brainz"] = "", -- A_Classic_Fairytale:journey
---      ["Flying Saucer"] = "", -- Construction_Mode, Frenzy
+      ["Flying Saucer"] = "Летающая тарелка", -- Construction_Mode, Frenzy
 --      ["For improved features/stability, play 0.9.18+"] = "", -- WxW
+      ["Frank"] = "Фрэнк", -- User_Mission_-_Nobody_Laugh
 --      ["Free Dense Cloud and continue the mission!"] = "", -- A_Classic_Fairytale:journey
---      ["Freezer"] = "", -- Construction_Mode
+      ["Freezer"] = "Замораживатель", -- Construction_Mode
 --      ["FRENZY"] = "", -- Frenzy
 --      ["Friendly Fire!"] = "",
 --      ["fuel extended!"] = "",
---      ["GAME BEGUN!!!"] = "",
---      ["Game Modifiers: "] = "",
+      ["GAME BEGUN!!!"] = "ПОЕХАЛИ!!!",
+      ["Game Modifiers: "] = "Игровые Модификаторы: ",
       ["GAME OVER!"] = "ИГРА ОКОНЧЕНА!",
---      ["Game Started!"] = "",
+      ["Game Started!"] = "Игра Началась!",
 --      ["Game? Was this a game to you?!"] = "", -- A_Classic_Fairytale:enemy
 --      ["GasBomb"] = "", -- Continental_supplies
 --      ["Gas Gargler"] = "", -- A_Classic_Fairytale:queen
 --      ["General information"] = "", -- Continental_supplies
---      ["Generates power."] = "", -- Construction_Mode
---      ["Generator"] = "", -- Construction_Mode
+      ["Generates power."] = "Генерирует энергию, необходимую для постройки сооружений.", -- Construction_Mode
+      ["Generator"] = "Генератор", -- Construction_Mode
 --      ["Get Dense Cloud out of the pit!"] = "", -- A_Classic_Fairytale:journey
---      ["Get on over there and take him out!"] = "",
+      ["Get on over there and take him out!"] = "Доберись туда и уничтожь его!",
 --      ["Get on the head of the mole"] = "", -- A_Classic_Fairytale:first_blood
---      ["Get out of there!"] = "", -- User_Mission_-_The_Great_Escape
+      ["Get out of there!"] = "Выберись отсюда!", -- User_Mission_-_The_Great_Escape
 --      ["Get that crate!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Get the crate on the other side of the island!|"] = "", -- A_Classic_Fairytale:journey
---      ["Get to the target using your rope! |Controls: Left & Right to swing the rope - Up & Down to Contract and Expand!"] = "", -- Basic_Training_-_Rope
+      ["Get to the target using your rope! |Controls: Left & Right to swing the rope - Up & Down to Contract and Expand!"] = "Доберись до цели, используя верёвку! |Упрвление: Влево и Вправо для раскачивания - Вверх и Вниз для укорочения и удлинения!", -- Basic_Training_-_Rope
 --      ["Get your teammates out of their natural prison and save the princess!|Hint: Drilling holes should solve everything.|Hint: It might be a good idea to place a girder before starting to drill. Just saying.|Hint: All your hedgehogs need to be above the marked height!|Hint: Leaks A Lot needs to get really close to the princess!"] = "", -- A_Classic_Fairytale:family
---      ["GG!"] = "", -- User_Mission_-_Rope_Knock_Challenge
+      ["GG!"] = "GG!", -- User_Mission_-_Rope_Knock_Challenge
 --      ["Gimme Bones"] = "", -- A_Classic_Fairytale:backstab
 --      ["Girder"] = "", -- Construction_Mode
---      ["Girder Placement Mode"] = "", -- Construction_Mode
+      ["Girder Placement Mode"] = "Режим Размещения Балок", -- Construction_Mode
 --      ["Glark"] = "", -- A_Classic_Fairytale:shadow
       ["Goal"] = "Цель",
---      ["GO! GO! GO!"] = "",
---      ["Good birdy......"] = "",
---      ["Good Dude"] = "", -- User_Mission_-_The_Great_Escape
+      ["GO! GO! GO!"] = "ВПЕРЁД! ВПЕРЁД! ВПЕРЁД!",
+      ["Good birdy......"] = "Хорошая птичка...",
+      ["Good Dude"] = "Хороший", -- User_Mission_-_The_Great_Escape
 --      ["Good idea, they'll never find us there!"] = "", -- A_Classic_Fairytale:united
 --      ["Good luck...or else!"] = "", -- A_Classic_Fairytale:journey
---      ["Good luck out there!"] = "",
---      ["Good so far!"] = "",
---      ["Good to go!"] = "",
+      ["Good luck out there!"] = "Удачи там!",
+      ["Good so far!"] = "Пока хорошо!",
+      ["Good to go!"] = "Пошёл!",
 --      ["Go on top of the flower"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Go, quick!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Gorkij"] = "", -- A_Classic_Fairytale:journey
---      ["Go surf!"] = "", -- WxW
+      ["Go surf!"] = "Теперь сёрфить!", -- WxW
       ["GOTCHA!"] = "ПОПАЛСЯ!",
 --      ["Grab Mines/Explosives"] = "",
---      ["Grants nearby hogs life-regeneration."] = "", -- Construction_Mode
+      ["Grants nearby hogs life-regeneration."] = "Восстанавливает здоровье соседних ежей.", -- Construction_Mode
 --      ["Gravity"] = "", -- Gravity
 --      ["Great choice, Steve! Mind if I call you that?"] = "", -- A_Classic_Fairytale:shadow
---      ["Great work! Now hit it with your Baseball Bat! |Tip: You can change weapon with 'Right Click'!"] = "", -- Basic_Training_-_Rope
+      ["GREAT ! Let's kill all this enemies, using portals"] = "ПРЕКРАСНО ! Теперь можно убить всех с помощью порталов", -- portal
+      ["Great work! Now hit it with your Baseball Bat! |Tip: You can change weapon with 'Right Click'!"] = "Хорошая работа! А теперь ударь его Бейсбольной Битой! |Подсказка: Оружие можно сменить 'Правым кликом'!", -- Basic_Training_-_Rope
 --      ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
 
+      ["Greenhorn"] = "Молокосос", -- User_Mission_-_RCPlane_Challenge
 --      ["Green lipstick bullet: [Poisonous, deals no damage]"] = "", -- Continental_supplies
 --      ["Greetings, "] = "", -- A_Classic_Fairytale:dragon
 --      ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
---      ["Grenade"] = "", -- Construction_Mode, Frenzy, A_Space_Adventure:death02
---      ["Grenade Training"] = "", -- Basic_Training_-_Grenade
---      ["Grenadiers"] = "", -- Basic_Training_-_Grenade
+      ["Grenade"] = "Граната", -- Construction_Mode, Frenzy, A_Space_Adventure:death02
+      ["Grenade Group"] = "Группа Гренадеров", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+      ["Grenade Training"] = "Тренировка с Гранатой", -- Basic_Training_-_Grenade
+      ["Grenadier"] = "Гренадер", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+      ["Grenadiers"] = "Гренадеры", -- Basic_Training_-_Grenade
 --      ["Guys, do you think there's more of them?"] = "", -- A_Classic_Fairytale:backstab
 --      ["HAHA!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Haha!"] = "", -- A_Classic_Fairytale:united
---      ["Hahahaha!"] = "",
---      ["Haha, now THAT would be something!"] = "",
---      ["Hammer"] = "", -- Construction_Mode, Continental_supplies
+      ["Hahahaha!"] = "Хахахаха!",
+      ["Haha, now THAT would be something!"] = "Хаха, да не гони, ЭТО уже слишком!",
+      ["Hammer"] = "Молот", -- Construction_Mode, Continental_supplies
 --      ["Hannibal"] = "", -- A_Classic_Fairytale:epil
---      ["Hapless Hogs"] = "",
---      [" Hapless Hogs left!"] = "",
---      [" HAS MUTATED"] = "", -- Mutant
+      ["Hapless Hogs"] = "Несчастные Ежи",
+      ["%d Hapless Hogs left"] = "%d Несчастных Ёжиков осталось",
+      ["Harry"] = "Гарри", -- User_Mission_-_Nobody_Laugh
+      [" HAS MUTATED"] = " МУТИРОВАЛ", -- Mutant
 --      ["Hatless Jerry"] = "", -- A_Classic_Fairytale:queen
 --      ["Have no illusions, your tribe is dead, indifferent of your choice."] = "", -- A_Classic_Fairytale:shadow
 --      ["Have we ever attacked you first?"] = "", -- A_Classic_Fairytale:enemy
---      ["Healing Station"] = "", -- Construction_Mode
---      ["Health Crate Placement Mode"] = "", -- Construction_Mode
+      ["Healing Station"] = "Лечебная Станция", -- Construction_Mode
+      ["Health Crate Placement Mode"] = "Режим Размещения Аптечек", -- Construction_Mode
 --      ["Health crates extend your time."] = "",
---      ["Heavy"] = "",
+      ["Heartful"] = "Сердечный", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+      ["Heavy"] = "Тяжёлый",
 --      ["Heavy Cannfantry"] = "", -- A_Classic_Fairytale:united
 --      ["Hedge-cogs"] = "", -- A_Classic_Fairytale:enemy
 --      ["Hedgehog projectile: [Fire your hog like a Sticky Bomb]"] = "", -- Continental_supplies
 
---      ["Hedgewars-Basketball"] = "",
---      ["Hedgewars-Knockball"] = "",
+      ["Hedgewars-Basketball"] = "Hedgewars Баскетбол",
+      ["Hedgewars-Knockball"] = "Hedgewars Вышибалы",
 --      ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
---      ["Heh, it's not that bad."] = "",
---      ["Hellish Handgrenade"] = "", -- Construction_Mode
+      ["Heh, it's not that bad."] = "Хех, не так уж всё и плохо.",
+      ["Hell Army"] = "Армия Ада", -- portal
+      ["Hellish Handgrenade"] = "Адская граната", -- Construction_Mode
 --      ["Hello again, "] = "", -- A_Classic_Fairytale:family
 --      ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
 --      ["Help me, please!!!"] = "", -- A_Classic_Fairytale:journey
@@ -382,13 +427,14 @@
 --      ["Here, let me help you!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Here, let me help you save her!"] = "", -- A_Classic_Fairytale:family
 --      ["Here...pick your weapon!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Hero Team"] = "", -- User_Mission_-_The_Great_Escape
+      ["Hero Team"] = "Герои", -- User_Mission_-_The_Great_Escape
 --      ["He's so brave..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["He won't be selling us out anymore!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Hey, guys!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Hey guys!"] = "", -- A_Classic_Fairytale:united
 --      ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
-      ["HIGHLANDER"] = "Царь горы", -- Highlander
+      ["HIGHLANDER"] = "ЦАРЬ ГОРЫ", -- Highlander
+      ["hiden"] = "Скрытный", -- portal      
 --      ["Hightime"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Hint: Select the BlowTorch, aim and press [Fire]. Press [Fire] again to stop.|Don't blow up the crate."] = "", -- A_Classic_Fairytale:journey
@@ -396,17 +442,20 @@
 --      ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
 --      ["His arms are so strong!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Hit Combo!"] = "",
+      ["hits"] = "попаданий", -- Basic_Training_-_Bazooka
 --      ["Hmmm...actually...I didn't either."] = "", -- A_Classic_Fairytale:enemy
---      ["Hmmm, I'll have to find some way of moving him off this anti-portal surface..."] = "", -- portal
+      ["Hmmm, I'll have to find some way of moving him off this anti-portal surface..."] = "Хмм, надо придумать как скинуть его с анти-портальной поверхности...", -- portal
 --      ["Hmmm...it's a draw. How unfortunate!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Hmmm...perhaps a little more time will help."] = "", -- A_Classic_Fairytale:first_blood
       ["Hmmm..."] = "Хммм...",
 --      ["Hogminator"] = "", -- A_Classic_Fairytale:family
 --      ["Hogs in sight!"] = "", -- Continental_supplies
---      ["HOLY SHYTE!"] = "", -- Mutant
---      ["Homing Bee"] = "", -- Construction_Mode
+      ["HOLY SHYTE!"] = "ВОТ ЧЕРТ!", -- Mutant
+      ["Homing Bee"] = "Пчёлка", -- Construction_Mode
 --      ["Honest Lee"] = "", -- A_Classic_Fairytale:enemy
+      ["Hook"] = "Крюк", -- Challenge_-_Speed_Shoppa_-_Ropes
       ["Hooray!"] = "Ура!",
+      ["Hopeless case"] = "Безнадежный случай", -- User_Mission_-_RCPlane_Challenge
 --      ["Hostage Situation"] = "", -- A_Classic_Fairytale:family
 --      ["How can I ever repay you for saving my life?"] = "", -- A_Classic_Fairytale:journey
 --      ["How come in a village full of warriors, it's up to me to save it?"] = "", -- A_Classic_Fairytale:dragon
@@ -415,7 +464,7 @@
 --      ["However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
 --      ["However, if you fail to do so, she dies a most violent death! Muahahaha!"] = "", -- A_Classic_Fairytale:journey
 --      ["However, my mates don't agree with me on letting you go..."] = "", -- A_Classic_Fairytale:dragon
---      [" HP"] = "", -- Mutant
+      [" HP"] = " HP", -- Mutant
       ["Hunter"] = "Охотник", --Bazooka, Shotgun, SniperRifle
 --      ["I believe there's more of them."] = "", -- A_Classic_Fairytale:backstab
 --      ["I can see you have been training diligently."] = "", -- A_Classic_Fairytale:first_blood
@@ -426,7 +475,7 @@
 --      ["I could just teleport myself there..."] = "", -- A_Classic_Fairytale:family
 --      ["I'd better get going myself."] = "", -- A_Classic_Fairytale:journey
 --      ["I didn't until about a month ago."] = "", -- A_Classic_Fairytale:enemy
---      ["I don't know how you did that.. But good work! |The next one should be easy as cake for you!"] = "", -- Basic_Training_-_Rope
+      ["I don't know how you did that.. But good work! |The next one should be easy as cake for you!"] = "Я не знаю, как ты это сделал... Но ты молодец! |Следующая цель вообще не составит тебе труда!", -- Basic_Training_-_Rope
 --      ["I feel something...a place! They will arrive near the circles!"] = "", -- A_Classic_Fairytale:backstab
 --      ["If only I had a way..."] = "", -- A_Classic_Fairytale:backstab
 --      ["If only I were given a chance to explain my being here..."] = "", -- A_Classic_Fairytale:first_blood
@@ -438,6 +487,7 @@
 --      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
 --      ["If you know what I mean..."] = "", -- A_Classic_Fairytale:shadow
 --      ["If you say so..."] = "", -- A_Classic_Fairytale:shadow
+      ["Igmund"] = "Джокер", -- User_Mission_-_Nobody_Laugh
 --      ["I guess you'll have to kill them."] = "", -- A_Classic_Fairytale:dragon
 --      ["I have come to make you an offering..."] = "", -- A_Classic_Fairytale:shadow
 --      ["I have no idea where that mole disappeared...Can you see it?"] = "", -- A_Classic_Fairytale:shadow
@@ -447,6 +497,7 @@
 --      ["I just don't want to sink to your level."] = "", -- A_Classic_Fairytale:backstab
 --      ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
 --      ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
+      ["Ikeda"] = "Икэда", -- User_Mission_-_Bamboo_Thicket
 --      ["I'll hold them off while you return to the village!"] = "", -- A_Classic_Fairytale:shadow
 --      ["Imagine those targets are the wolves that killed your parents! Take your anger out on them!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["I'm...alive? How? Why?"] = "", -- A_Classic_Fairytale:backstab
@@ -469,20 +520,25 @@
 --      ["I need to warn the others."] = "", -- A_Classic_Fairytale:backstab
 --      ["In fact, you are the only one that's been acting strangely."] = "", -- A_Classic_Fairytale:backstab
 --      ["In order to get to the other side, you need to collect the crates first.|"] = "", -- A_Classic_Fairytale:dragon
---      ["INSANITY"] = "", -- Mutant
+      ["INSANITY"] = "БЕЗУМИЕ", -- Mutant
       ["Instructor"] = "Инструктор", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings
+      ["Insufficient Power"] = "Недостаточно Энергии", -- Construction_Mode
 --      ["Interesting idea, haha!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Interesting! Last time you said you killed a cannibal!"] = "", -- A_Classic_Fairytale:backstab
 --      ["In the meantime, take these and return to your \"friend\"!"] = "", -- A_Classic_Fairytale:shadow
 --      ["invaders destroyed"] = "",
+      ["Invalid Placement"] = "Неверное Размещение", -- Construction_Mode
 --      ["Invasion"] = "", -- A_Classic_Fairytale:united
---      ["Invulnerable"] = "", -- Construction_Mode
+      ["Invulnerable"] = "Неуязвимость", -- Construction_Mode
+      ["In your best (and only) flight you took out %d crates with one RC plane!"] = "В вашем лучшем (и единственном) полёте вы достали %d ящиков с одним самолётом.", -- User_Mission_-_RCPlane_Challenge
+      ["In your best flight you took out %d crates with one RC plane."] = "В вашем лучшем полёте вы достали %d ящиков с одним самолётом.", -- User_Mission_-_RCPlane_Challenge
 --      ["I saw it with my own eyes!"] = "", -- A_Classic_Fairytale:shadow
 --      ["I see..."] = "", -- A_Classic_Fairytale:shadow
 --      ["I see you have already taken the leap of faith."] = "", -- A_Classic_Fairytale:first_blood
 --      ["I see you would like his punishment to be more...personal..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["I sense another wave of cannibals heading my way!"] = "", -- A_Classic_Fairytale:backstab
 --      ["I sense another wave of cannibals heading our way!"] = "", -- A_Classic_Fairytale:backstab
+      ["I should get myself a portal gun, maybe this crate has one"] = "Надо достать портальную пушку, может в этом ящике?", -- portal
 --      ["I shouldn't have drunk that last pint."] = "", -- A_Classic_Fairytale:dragon
 --      ["Is this place in my head?"] = "", -- A_Classic_Fairytale:dragon
 --      ["It doesn't matter. I won't let that alien hurt my daughter!"] = "", -- A_Classic_Fairytale:dragon
@@ -495,7 +551,7 @@
 --      ["It must be the aliens' deed."] = "", -- A_Classic_Fairytale:backstab
 --      ["It must be the cyborgs again!"] = "", -- A_Classic_Fairytale:enemy
 --      ["I told you, I just found them."] = "", -- A_Classic_Fairytale:backstab
---      ["It's a good thing SUDDEN DEATH is 99 turns away..."] = "",
+     ["It's a good thing SUDDEN DEATH is 99 turns away..."] = "Хорошо, что ВНЕЗАПНАЯ СМЕРТЬ аж через 99 ходов...",
 --      ["It's always up to women to clear up the mess men created!"] = "", -- A_Classic_Fairytale:dragon
 --      ["It's a shame, I forgot how to do that!"] = "", -- A_Classic_Fairytale:family
 --      ["It's impossible to communicate with the spirits without a shaman."] = "", -- A_Classic_Fairytale:shadow
@@ -521,7 +577,7 @@
 --      ["Just wait till I get my hands on that trauma! ARGH!"] = "", -- A_Classic_Fairytale:family
 --      ["Kamikaze"] = "", -- Construction_Mode
 --      ["Kamikaze Expert!"] = "",
---      ["Keep it up!"] = "",
+      ["Keep it up!"] = "Так держать!",
 --      ["Kerguelen"] = "", -- Continental_supplies
 --      ["Killing spree!"] = "",
 --      ["KILL IT!"] = "", -- A_Classic_Fairytale:first_blood
@@ -529,8 +585,9 @@
 --      ["Kill the aliens!"] = "", -- A_Classic_Fairytale:dragon
 --      ["Kill the cannibal!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Kill the traitor...or spare his life!|Kill him or press [Precise]!"] = "", -- A_Classic_Fairytale:backstab
---      ["Land Sprayer"] = "", -- Construction_Mode
---      ["Laser Sight"] = "", -- Construction_Mode
+      ["King Customer"] = "Король Покупатель", -- Challenge_-_Speed_Shoppa_-_ShoppaKing
+      ["Land Sprayer"] = "Распылитель земли", -- Construction_Mode
+      ["Laser Sight"] = "Лазерный прицел", -- Construction_Mode
       ["Last Target!"] = "Последняя цель!",
 --      ["Leader"] = "", -- A_Classic_Fairytale:enemy
 --      ["Leaderbot"] = "", -- A_Classic_Fairytale:queen
@@ -542,6 +599,7 @@
 --      ["Lee"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
 --      ["[Left Shift]"] = "",
 --      ["left shift"] = "", -- Continental_supplies
+      ["Lestat"] = "Лестат", -- portal
 --      ["Let a Continent provide your weapons!"] = "", -- Continental_supplies
 --      ["Let me test your skills a little, will you?"] = "", -- A_Classic_Fairytale:journey
 --      ["Let's go home!"] = "", -- A_Classic_Fairytale:journey
@@ -551,8 +609,8 @@
 --      ["Let them have a taste of my fury!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Let us help, too!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Light Cannfantry"] = "", -- A_Classic_Fairytale:united
---      ["Limburger"] = "", -- Construction_Mode
---      ["Listen up, maggot!!"] = "",
+      ["Limburger"] = "Старый Лимбургер", -- Construction_Mode
+      ["Listen up, maggot!!"] = "Слушай сюда, щегол!!",
 --      ["Little did they know that this hunt will mark them forever..."] = "", -- A_Classic_Fairytale:shadow
 --      ["Lively Lifeguard"] = "",
 
@@ -562,56 +620,63 @@
 --      ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Look out! We're surrounded by cannibals!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
---      ["Low Gravity"] = "", -- Construction_Mode, Frenzy
+      ["Loon"] = "Псих", -- The_Specialists
+      ["Low Gravity"] = "Слабая гравитация", -- Construction_Mode, Frenzy
+      ["Lucifer"] = "Люцифер", -- portal
 --      ["Luckily, I've managed to snatch some of them."] = "", -- A_Classic_Fairytale:united
---      ["LUDICROUS KILL"] = "", -- Mutant
+      ["LUDICROUS KILL"] = "НЕЛЕПОЕ УБИЙСТВО", -- Mutant
 --      ["Made it!"] = "", -- ClimbHome
 --      ["- Massive weapon bonus on first turn"] = "", -- Continental_supplies
 --      ["May the spirits aid you in all your quests!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Medicine: [Fire some exploding medicine that will heal all hogs effected by the explosion]"] = "", -- Continental_supplies
---      ["MEGA KILL"] = "", -- Mutant
+      ["MEGA KILL"] = "МЕГА УБИЙСТВО", -- Mutant
 --      ["Meiwes"] = "", -- A_Classic_Fairytale:backstab
+      ["milliseconds"] = "миллисекунд", -- SpeedShoppa
 --      ["Mindy"] = "", -- A_Classic_Fairytale:united
---      ["Mine"] = "", -- Construction_Mode, Frenzy
+      ["Mine"] = "Мина", -- Construction_Mode, Frenzy
 --      ["Mine Deployer"] = "",
 --      ["Mine Eater!"] = "",
---      ["Mine Placement Mode"] = "", -- Construction_Mode
---      ["|- Mines Time:"] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+      ["Mine Placement Mode"] = "Режим Размещения Мин", -- Construction_Mode
+      ["|- Mines Time:"] = "|- Задержка Мин:", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
 --      ["Mine Strike"] = "", -- Construction_Mode
       ["MISSION FAILED"] = "МИССИЯ ПРОВАЛЕНА", -- User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+      ["Mission lost!"] = "Миссия провалена!", -- Basic_Training_-_Grenade
 --      ["MISSION SUCCESS"] = "",
       ["MISSION SUCCESSFUL"] = "МИССИЯ УСПЕШНА", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
---      ["Molotov Cocktail"] = "", -- Construction_Mode
+      ["Mission won!"] = "Миссия успешна!", -- Basic_Training_-_Grenade
+      ["Molotov Cocktail"] = "Коктейль Молотова", -- Construction_Mode
 --      ["Molotov"] = "", -- Continental_supplies
---      ["MONSTER KILL"] = "", -- Mutant
+      ["MONSTER KILL"] = "УБИЙСТВО МОНСТРА", -- Mutant
 --      ["More Natives"] = "", -- A_Classic_Fairytale:epil
---      ["Mortar"] = "", -- Construction_Mode, A_Space_Adventure:death02
+      ["Mortar"] = "Миномёт", -- Construction_Mode, A_Space_Adventure:death02
 --      ["Movement: [Up], [Down], [Left], [Right]"] = "",
---      ["Mudball"] = "", -- Construction_Mode
+      ["Mudball"] = "Комок грязи", -- Construction_Mode
 --      ["Multi-shot!"] = "",
 --      ["Muriel"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
 --      ["Muscle Dissolver"] = "", -- A_Classic_Fairytale:shadow
---      ["-------"] = "", -- Mutant
---      ["Mutant"] = "", -- Mutant
---      ["Nade Boy"] = "", -- Basic_Training_-_Grenade
+      ["-------"] = "-------", -- Mutant
+      ["MUTANT"] = "МУТАНТ", -- Mutant
+      ["Mutant"] = "Мутант", -- Mutant
+      ["Nade Boy"] = "Снайперок", -- Basic_Training_-_Grenade
 --      ["Name"] = "", -- A_Classic_Fairytale:queen
-      ["Nameless Heroes"] = "Безымянные герои",
+      ["Nameless Heroes"] = "Герои Без Имен",
 --      ["Nancy Screw"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:queen
 --      ["Napalm"] = "", -- Construction_Mode
 --      ["Napalm rocket: [Fire a bomb with napalm!]"] = "", -- Continental_supplies
 --      ["Natives"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
---      ["Naughty Ninja"] = "", -- User_Mission_-_Dangerous_Ducklings
+      ["Naughty Ninja"] = "Озорной ниндзя", -- User_Mission_-_Dangerous_Ducklings
 --      ["New Barrels Per Turn"] = "",
       ["NEW CLAN RECORD: "] = "НОВЫЙ РЕКОРД КЛАНА: ",
---      ["NEW fastest lap: "] = "",
+      ["NEW fastest lap: "] = "НОВЫЙ лучший круг: ",
 --      ["New Mines Per Turn"] = "",
---      ["NEW RACE RECORD: "] = "",
+      ["NEW RACE RECORD: "] = "НОВЫЙ РЕКОРД ГОНКИ: ",
       ["Newton's Hammock"] = "Гамак Ньютона",
 --      ["Nicely done, meatbags!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Nice work, "] = "", -- A_Classic_Fairytale:dragon
 --      ["Nice work!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Nilarian"] = "", -- A_Classic_Fairytale:queen
---      ["Nobody Laugh"] = "", -- User_Mission_-_Nobody_Laugh
+      ["Ninja"] = "Ниндзя", -- The_Specialists
+      ["Nobody Laugh"] = "Никто не смеётся", -- User_Mission_-_Nobody_Laugh
 --      ["No, I came back to help you out..."] = "", -- A_Classic_Fairytale:shadow
 --      ["No...I wonder where they disappeared?!"] = "", -- A_Classic_Fairytale:journey
 --      ["Nom-Nom"] = "", -- A_Classic_Fairytale:journey
@@ -619,137 +684,155 @@
 --      ["Nope. It was one fast mole, that's for sure."] = "", -- A_Classic_Fairytale:shadow
 --      ["No! Please, help me!"] = "", -- A_Classic_Fairytale:journey
 --      ["NORMAL"] = "", -- Continental_supplies
---      ["Normal players can only score points by killing the mutant."] = "", -- Mutant
+      ["Normal players can only score points by killing the mutant."] = "Обычные игроки могут получить очки только убив Мутанта.", -- Mutant
 --      ["North America"] = "", -- Continental_supplies
---      ["Not all hogs are born equal."] = "", -- Highlander
---      ["NOT ENOUGH WAYPOINTS"] = "",
+      ["Not all hogs are born equal."] = "Не все ежи рождаются равными.", -- Highlander
+      ["NOT ENOUGH WAYPOINTS"] = "НЕДОСТАТОЧНО КОНТРОЛЬНЫХ ТОЧЕК",
 --      ["Not now, Fiery Water!"] = "", -- A_Classic_Fairytale:backstab
---      ["Not So Friendly Match"] = "", -- Basketball, Knockball
+      ["Not So Friendly Match"] = "Совсем Не Товарищеский Матч", -- Basketball, Knockball
 --      ["Not you again! My head still hurts from last time!"] = "", -- A_Classic_Fairytale:shadow
 --      ["No, we made sure of that!"] = "", -- A_Classic_Fairytale:united
---      ["Now find the next target! |Tip: Normally you lose health by falling down, so be careful!"] = "", -- Basic_Training_-_Rope
+      ["Now find the next target! |Tip: Normally you lose health by falling down, so be careful!"] = "Теперь найди следующую цель!|Подсказка: Ты потеряешь здоровье, если упадешь, будь осторожен!", -- Basic_Training_-_Rope
 --      ["No! What have I done?! What have YOU done?!"] = "", -- A_Classic_Fairytale:journey
 --      ["No. Where did he come from?"] = "", -- A_Classic_Fairytale:shadow
 --      ["Now how do I get on the other side?!"] = "", -- A_Classic_Fairytale:dragon
 --      ["No. You and the rest of the tribe are safer there!"] = "", -- A_Classic_Fairytale:backstab
---      ["Object Placement Tool"] = "", -- Construction_Mode
+      ["Object Placement Tool"] = "Инструмент Размещения Объектов", -- Construction_Mode
 --      ["Obliterate them!|Hint: You might want to take cover..."] = "", -- A_Classic_Fairytale:shadow
 --      ["Obstacle course"] = "", -- A_Classic_Fairytale:dragon
 --      ["Of course I have to save her. What did I expect?!"] = "", -- A_Classic_Fairytale:family
 --      ["OH, COME ON!"] = "", -- A_Classic_Fairytale:journey
 --      ["Oh, my!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Oh, my! This is even more entertaining than I've expected!"] = "", -- A_Classic_Fairytale:backstab
---      ["Oh no! Just try again!"] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+      ["Oh no! Just try again!"] = "О, нет! Попробуй еще раз!", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
 --      ["Oh no, not "] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
---      ["Oh no! Time's up! Just try again."] = "", --Bazooka, Shotgun, SniperRifle
---      ["Oh no! You failed! Just try again."] = "", -- Basic_Training_-_Cluster_Bomb
+      ["Oh no! Time's up! Just try again."] = "О, нет! Время вышло! Попробуй еще раз.", --Bazooka, Shotgun, SniperRifle
+      ["Oh no! You failed! Just try again."] = "О, нет! Ты проиграл! Попробуй еще раз.", -- Basic_Training_-_Cluster_Bomb
 --      ["Oh, silly me! I forgot that I'm the shaman."] = "", -- A_Classic_Fairytale:backstab
 --      ["Olive"] = "", -- A_Classic_Fairytale:united
 --      ["Omnivore"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Once upon a time, on an island with great natural resources, lived two tribes in heated conflict..."] = "", -- A_Classic_Fairytale:first_blood
---      ["ONE HOG PER TEAM! KILLING EXCESS HEDGES"] = "", -- Mutant
+      ["ONE HOG PER TEAM! KILLING EXCESS HEDGES"] = "ТОЛЬКО ОДИН ЁЖ НА КОМАНДУ! ИЗБЫТОК ЕЖЕЙ БУДЕТ УДАЛЕН", -- Mutant
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
+      ["oneye"] = "Циклоп", -- portal
 --      ["on Skip"] = "", -- Continental_supplies
 --      ["Oops...I dropped them."] = "", -- A_Classic_Fairytale:united
 --      ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Operation Diver"] = "",
---      ["Opposing Team: "] = "",
+      ["Operation Diver"] = "Операция 'Ныряльщик'",
+      ["Opposing Team: "] = "Команда Соперника: ",
 --      ["or 'g=50, g2=150, period=4000' for gravity changing|from 50 to 150 and back with period of 4000 msec"] = "", -- Gravity
 --      ["Orlando Boom!"] = "", -- A_Classic_Fairytale:queen
---      ["Other kills don't give you points."] = "", -- Mutant
---      ["Ouch!"] = "", -- User_Mission_-_Rope_Knock_Challenge
+      ["Other kills don't give you points."] = "Другие убийства не дадут вам очков.", -- Mutant
+      ["Ouch!"] = "Ох!", -- User_Mission_-_Rope_Knock_Challenge
 --      ["Our tribe, our beautiful island!"] = "", -- A_Classic_Fairytale:enemy
---      ["Parachute"] = "", -- Continental_supplies
---      ["Pathetic Hog #%d"] = "",
---      ["Pathetic Resistance"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
+      ["Parachute"] = "Парашют", -- Continental_supplies
+      ["Pathetic Hog #%d"] = "Жалкий Ёж #%d",
+      ["Pathetic Resistance"] = "Жалкое Сопротивление", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_Newton_and_the_Hammock
 --      ["Penguin roar: [Deal 15 damage + 15% of your hogs health to all hogs around you and get 2/3 back]"] = "", -- Continental_supplies
 --      ["Perfect! Now try to get the next crate without hurting yourself!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Per-Hog Ammo"] = "",
---      ["Personal Portal Device"] = "", -- Construction_Mode
+      ["Per-Hog Ammo"] = "У каждого ежа свое оружие",
+      ["Personal Portal Device"] = "Портальная Пушка", -- Construction_Mode
 
 --      ["Per team weapons"] = "", -- Continental_supplies
 --      ["Pfew! That was close!"] = "", -- A_Classic_Fairytale:shadow
---      ["Piano Strike"] = "", -- Construction_Mode
---      ["Pickhammer"] = "", -- Construction_Mode
+      ["phosphatoglucidique"] = "Углеводофосфатный", -- portal
+      ["Piano Strike"] = "Фортепьяновый удар", -- Construction_Mode
+      ["Pickhammer"] = "Отбойный молоток", -- Construction_Mode
 
 --      ["Pings left:"] = "", -- Space_Invasion
---      ["Place more waypoints using the 'Air Attack' weapon."] = "",
---      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
+      ["Place more waypoints using the 'Air Attack' weapon."] = "Расположите больше контрольных точек, используя 'Воздушную атаку'",
+      ["Planes used: %d"] = "Использовано самолётов: %d", -- User_Mission_-_RCPlane_Challenge
 --      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
---      ["Please place the way-point further from the waterline."] = "", -- Racer
---      ["Please place the way-point in the open, within the map boundaries."] = "", -- Racer
+      ["player"] = "игрок", -- portal
+      ["Please place the way-point further from the waterline."] = "Поместите контрольную точку подальше от воды.", -- Racer
+      ["Please place the way-point in the open, within the map boundaries."] = "Поместите контрольную точку в открытом месте внутри границ карты.", -- Racer
 --      ["Please, stop releasing your \"smoke signals\"!"] = "", -- A_Classic_Fairytale:shadow
 --      ["Point Blank Combo!"] = "", -- Space_Invasion
---      ["points"] = "", -- Control, CTF_Blizzard, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle
---      ["POINTS"] = "", -- Mutant
+      ["points"] = "очки", -- Control, CTF_Blizzard, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle
+      ["POINTS"] = "ОЧКИ", -- Mutant
       ["Poison"] = "Яд",
 --      ["Population"] = "", -- Continental_supplies
 --      ["Portal hint: one goes to the destination, and one is the entrance.|"] = "", -- A_Classic_Fairytale:dragon
---      ["Portal mission"] = "", -- portal
+      ["Portal mission"] = "Портальная миссия", -- portal
 --      ["Power Remaining"] = "",
---      ["Prepare yourself"] = "",
+      ["Predator"] = "Хищник", -- portal
+      ["Prepare yourself"] = "Готовься",
 --      ["presice"] = "", -- Continental_supplies
---      ["Press [Enter] to accept this configuration."] = "", -- WxW
+      ["Press [Enter] to accept this configuration."] = "Нажмите [Enter] для принятия конфигурации.", -- WxW
 --      ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Press [Precise] to skip intro"] = "",
---      ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Private Novak"] = "", -- Basic_Training_-_Cluster_Bomb
+      ["Prestigious Pilot"] = "Престижный Пилот", -- User_Mission_-_RCPlane_Challenge
+      ["Private Nolak"] = "Рядовой Нолак", -- Target_Practice_-_Cluster_Bomb
+      ["Private Novak"] = "Рядовой Новак", -- Basic_Training_-_Cluster_Bomb
+      ["Professional pilot"] = "Профессиональный пилот", -- User_Mission_-_RCPlane_Challenge
+      ["Professional stunt pilot"] = "Профессиональный пилот-трюкач", -- User_Mission_-_RCPlane_Challenge
 --      ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
---      ["Race complexity limit reached."] = "",
---      ["RACER"] = "",
+      ["Pyro"] = "Пироман", -- The_Specialists
+      ["Race complexity limit reached."] = "Лимит сложности гонки достигнут.",
+      ["RACER"] = "ГОНЩИК",
 --      ["Rachel"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
 --      ["Radar Ping"] = "", -- Space_Invasion
 --      ["Raging Buffalo"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
 --      ["Ramon"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow
+      ["Rank: %s"] = "Ранк: %s", -- User_Mission_-_RCPlane_Challenge
 --      ["random in range from %i%% to %i%% with period of %i msec"] = "", -- Gravity
+      ["razac"] = "Чумной", -- portal
 --      ["RC Plane"] = "", -- Construction_Mode
---      ["RC PLANE TRAINING"] = "", -- User_Mission_-_RCPlane_Challenge
+      ["RC PLANE TRAINING"] = "ТРЕНИРОВКА С РАДИОУПРАВЛЯЕМЫМ САМОЛЕТОМ", -- User_Mission_-_RCPlane_Challenge
 --      ["Really?! You thought you could harm me with your little toys?"] = "", -- A_Classic_Fairytale:shadow
---      ["Reflector Shield"] = "", -- Construction_Mode
---      ["Reflects enemy projectiles."] = "", -- Construction_Mode
+      ["Reflector Shield"] = "Щит-Отражатель", -- Construction_Mode
+      ["Reflects enemy projectiles."] = "Отражает снаряды врагов.", -- Construction_Mode
 --      ["Regurgitator"] = "", -- A_Classic_Fairytale:backstab
 --      ["Reinforcements"] = "", -- A_Classic_Fairytale:backstab
---      ["Remember: The rope only bend around objects, |if it doesn't hit anything it's always stright!"] = "", -- Basic_Training_-_Rope
+      ["Remember: The rope only bend around objects, |if it doesn't hit anything it's always stright!"] = "Помни: Верёвка изгибается только вокруг объекты, |если же она ничего не касается, то всегда остается прямой!", -- Basic_Training_-_Rope
 --      ["Remember this, pathetic animal: when the day comes, you will regret your blind loyalty!"] = "", -- A_Classic_Fairytale:shadow
 --      ["REMOVED"] = "", -- Continental_supplies
---      ["Respawner"] = "", -- Construction_Mode
+      ["rescues"] = "спасено", -- User_Mission_-_That_Sinking_Feeling
+      ["Respawner"] = "Воскреситель", -- Construction_Mode
 --      ["Resurrector"] = "", -- Construction_Mode
---      ["Resurrects dead hedgehogs."] = "", -- Construction_Mode
---      [" - Return the enemy flag to your base to score | - First team to 3 captures wins | - You may only score when your flag is in your base | - Hogs will drop the flag if killed, or drowned | - Dropped flags may be returned or recaptured | - Hogs respawn when killed"] = "",
+      ["Resurrects dead hedgehogs."] = "Возвращает к жизни мертвых ежей.", -- Construction_Mode
+      [" - Return the enemy flag to your base to score | - First team to 3 captures wins | - You may only score when your flag is in your base | - Hogs will drop the flag if killed, or drowned | - Dropped flags may be returned or recaptured | - Hogs respawn when killed"] = " - Доставьте вражеский флаг на вашу базу для получения очков | - Выигрывает команда с 3мя захватами флага | - Вы получаете очки только когда ваш флаг находится на базе | - Убитые/Утонувшие ежи теряют флаг | - Брошенные флаги могут быть возвращены или захвачены повторно | - Убитые ежи воскресают",
 --      ["Return to Leaks A Lot! If you get stuck, press [Precise] to try again!"] = "", -- A_Classic_Fairytale:shadow
+      ["Rider"] = "Адский Всадник", -- portal
 --      ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
---      ["Rope"] = "", -- Construction_Mode
---      ["ROPE-KNOCKING"] = "", -- User_Mission_-_Rope_Knock_Challenge
+      ["ronald"] = "Рональд", -- portal
+      ["Rope"] = "Верёвка", -- Construction_Mode
+      ["ROPE-KNOCKING"] = "ВЫШИБАНИЕ-ВЕРЁВКОЙ", -- User_Mission_-_Rope_Knock_Challenge
+      ["Rope Master!"] = "Мастер Верёвки!", -- Basic_Training_-_Rope
+      ["Roper"] = "Верёвочник", -- SpeedShoppa
+      ["Ropes and Crates"] = "Верёвки и Ящики", -- Challenge_-_Speed_Shoppa_-_Ropes
+      ["Rope Team"] = "Верёвочники", -- Basic_Training_-_Rope
 --      ["Rope to safety"] = "", -- ClimbHome
---      ["Rope Training"] = "", -- Basic_Training_-_Rope
+      ["Rope Training"] = "Тренировка с Верёвкой", -- Basic_Training_-_Rope
 --      ["Rot Molester"] = "", -- A_Classic_Fairytale:shadow
---      ["Round Limit:"] = "",
+      ["Round Limit:"] = "Лимит Раундов:",
 --      ["Round Limit"] = "",
---      ["Rounds Complete: "] = "",
+      ["Rounds Complete: "] = "Раундов Завершено: ",
 --      ["Rounds Complete"] = "",
 --      ["Rubber Band"] = "", -- Construction_Mode
---      ["Rubber Placement Mode"] = "", -- Construction_Mode
---      ["RULES"] = "", -- Frenzy, Mutant
---      ["RULES OF THE GAME [Press ESC to view]"] = "",
+      ["Rubber Placement Mode"] = "Режим Размещения Батутов", -- Construction_Mode
+      ["RULES"] = "ПРАВИЛА", -- Frenzy, Mutant
+      ["RULES OF THE GAME [Press ESC to view]"] = "ПРАВИЛА ИГРЫ",
 --      ["Rusty Joe"] = "", -- A_Classic_Fairytale:queen
 --      ["s|"] = "",
 --      ["Sabotage/Flare: [Sabotage all hogs in the circle and deal ~1 dmg OR Fire a cluster up into the air]"] = "", -- Continental_supplies
 
+      ["Saint"] = "Святой", -- The_Specialists
 --      ["Salivaslurper"] = "", -- A_Classic_Fairytale:united
 --      ["Salvation"] = "", -- A_Classic_Fairytale:family
 --      ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
---      ["Save as many hapless hogs as possible!"] = "",
+      ["Save as many hapless hogs as possible!"] = "Спасите как можно больше несчастных ежей!",
 --      ["Save Fell From Heaven!"] = "", -- A_Classic_Fairytale:journey
 --      ["Save Leaks A Lot!|Hint: The Switch utility might be of help to you."] = "", -- A_Classic_Fairytale:shadow
 --      ["Save the princess! All your hogs must survive!|Hint: Kill the cyborgs first! Use the ammo very carefully!|Hint: You might want to spare a girder for cover!"] = "", -- A_Classic_Fairytale:family
 --      ["Save the princess by collecting the crate in under 12 turns!"] = "", -- A_Classic_Fairytale:journey
 --      ["Scalp Muncher"] = "", -- A_Classic_Fairytale:backstab
 --      ["SCORE"] = "",
---      ["Score"] = "", -- Mutant
+      ["Score"] = "Счет", -- Mutant
 
       ["sec"] = "сек", -- CTF_Blizzard, TrophyRace, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork, Capture_the_Flag
---      ["Seduction"] = "", -- Continental_supplies
+      ["%.1f seconds were remaining."] = "%.1f секунд еще оставалось.", -- Basic_Training_-_Bazooka      
+      ["Seduction"] = "Соблазнение", -- Continental_supplies
 --      ["Seems like every time you take a \"walk\", the enemy find us!"] = "", -- A_Classic_Fairytale:backstab
 --      ["See that crate farther on the right?"] = "", -- A_Classic_Fairytale:first_blood
       ["See ya!"] = "Увидимся!",
@@ -771,17 +854,19 @@
 --      ["Shield OFF:"] = "",
 --      ["Shield ON:"] = "",
 --      ["Shield Seeker!"] = "",
---      ["Shoryuken"] = "", -- Construction_Mode, Frenzy, A_Space_Adventure:death02
---      ["Shotgun"] = "", -- Continental_supplies
+      ["Shoppa Union"] = "Союз Шоппы", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
+      ["Shoppers"] = "Шопперы", -- SpeedShoppa
+      ["Shoryuken"] = "Восходящий удар Дракона", -- Construction_Mode, Frenzy, A_Space_Adventure:death02
+      ["Shotgun"] = "Дробовик", -- Continental_supplies
 --      ["Shotgun Team"] = "",
 --      ["Shotgun Training"] = "",
 --      ["shots remaining."] = "",
---      ["Silly"] = "",
---      ["SineGun"] = "", -- Construction_Mode
---      ["Sinky"] = "",
+      ["Silly"] = "Глупый",
+      ["SineGun"] = "Синус-пушка (бета)", -- Construction_Mode
+      ["Sinky"] = "Утопленник",
 --      ["Sirius Lee"] = "", -- A_Classic_Fairytale:enemy
---      ["%s is out and Team %d|scored a penalty!| |Score:"] = "", -- Basketball, Knockball
---      ["%s is out and Team %d|scored a point!| |Score:"] = "", -- Basketball, Knockball
+      ["%s is out and Team %d|scored a penalty!| |Score:"] = "%s выбит и Команда %d|оштрафована!| |Счет:", -- Basketball, Knockball
+      ["%s is out and Team %d|scored a point!| |Score:"] = "%s выбит и Команда %d|получает очко!| |Счет:", -- Basketball, Knockball
 --      ["Slippery"] = "", -- A_Classic_Fairytale:journey
 --      ["Slot"] = "", -- Frenzy
 --      ["Slot keys save time! (F1-F10 by default)"] = "", -- Frenzy
@@ -792,42 +877,46 @@
 --      ["Smith 0.99b"] = "", -- A_Classic_Fairytale:enemy
 --      ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
 --      ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
---      ["Sniper Rifle"] = "", -- Continental_supplies
+      ["Sniper"] = "Снайпер", -- The_Specialists
+      ["Sniper Rifle"] = "Снайперская винтовка", -- Continental_supplies
 --      ["Sniper!"] = "", -- Space_Invasion
       ["Sniper Training"] = "Тренировка снайпера",
---      ["Sniperz"] = "",
+      ["Sniperz"] = "Снайперы",
 --      ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
+      ["Soldier"] = "Солдат", -- The_Specialists
 --      ["Some weapons have a second option. Find them with"] = "", -- Continental_supplies
 --      ["South America"] = "", -- Continental_supplies
 --      ["So? What will it be?"] = "", -- A_Classic_Fairytale:shadow
---      ["Spawn the crate, and attack!"] = "", -- WxW
+      ["Spawn the crate, and attack!"] = "Подбери ящик и атакуй!", -- WxW
 --      ["Special Weapons:"] = "", -- Continental_supplies
+--      ["Speed Shoppa"] = "", -- SpeedShoppa
 --      ["Spiky Cheese"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow
 --      ["Spleenlover"] = "", -- A_Classic_Fairytale:united
---      ["Sponge"] = "",
---      ["Spooky Tree"] = "",
+      ["Sponge"] = "Губка",
+      ["Spooky Tree"] = "Зловещее дерево",
 --      ["Sprite Placement Mode"] = "", -- Construction_Mode
 --      ["Sprite Testing Mode"] = "", -- Construction_Mode
---      ["STATUS UPDATE"] = "", -- GaudyRacer, Space_Invasion
+      ["STATUS UPDATE"] = "ОБНОВЛЕНИЕ СТАТУСА", -- GaudyRacer, Space_Invasion
 --      ["Steel Eye"] = "", -- A_Classic_Fairytale:queen
 --      ["Step By Step"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Steve"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
---      ["Sticky Mine"] = "", -- Continental_supplies
---      ["Sticky Mine Placement Mode"] = "", -- Construction_Mode
+      ["Sticky Mine"] = "Мина-Липучка", -- Continental_supplies
+      ["Sticky Mine Placement Mode"] = "Режим Размещения Мин-Липучек", -- Construction_Mode
 --      ["Stronglings"] = "", -- A_Classic_Fairytale:shadow
 
---      ["Structure Placement Mode"] = "", -- Construction_Mode
---      ["Structure Placement Tool"] = "", -- Construction_Mode
+      ["Structure Placement Mode"] = "Режим Размещения Сооружений", -- Construction_Mode
+      ["Structure Placement Tool"] = "Инструмент Размещения Сооружений", -- Construction_Mode
+      ["Subject"] = "Испытуемый", -- portal
 --      ["Sundaland"] = "", -- Continental_supplies
---      ["Super Weapons"] = "", -- WxW
---      ["Support Station"] = "", -- Construction_Mode
---      ["Surf Before Crate"] = "", -- WxW
+      ["Super Weapons"] = "Супер Оружие", -- WxW
+      ["Support Station"] = "Станция Поддержки", -- Construction_Mode
+      ["Surf Before Crate"] = "Сёрфинг Перед Ящиком", -- WxW
 --      ["Surfer! +15 points!"] = "", -- Space_Invasion
 --      ["Surfer!"] = "", -- WxW
 --      ["Survive!|Hint: Cinematics can be skipped with the [Precise] key."] = "", -- A_Classic_Fairytale:shadow
 --      ["Swing, Leaks A Lot, on the wings of the wind!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["switch"] = "", -- Continental_supplies
---      ["Switched to "] = "",
+      ["Switched to "] = "Выбран ",
 --      ["Switch Hog"] = "", -- Construction_Mode
 --      ["Syntax Errol"] = "", -- A_Classic_Fairytale:dragon
 --      ["tab"] = "", -- Continental_supplies
@@ -835,14 +924,22 @@
 --      ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
 --      ["Tardis"] = "", -- Construction_Mode
 --      ["Target Placement Mode"] = "", -- Construction_Mode
+      ["Targets left: %d"] = "Осталось целей: %d", -- TargetPractice
+      ["Target Practice: Bazooka (easy)"] = "Учебная Стрельба: Базука (легко)", -- Target_Practice_-_Bazooka_easy
+      ["Target Practice: Bazooka (hard)"] = "Учебная Стрельба: Базука (сложно)", -- Target_Practice_-_Bazooka_hard
+      ["Target Practice: Grenade (easy)"] = "Учебная Стрельба: Граната (легко)", -- Target_Practice_-_Grenade_easy
+      ["Target Practice: Grenade (hard)"] = "Учебная Стрельба: Граната (сложно)", -- Target_Practice_-_Grenade_hard
+      ["Target Practice: Homing Bee"] = "Учебная Стрельба: Пчёлка", -- Target_Practice_-_Homing_Bee
+      ["Target Practice: Shotgun"] = "Учебная Стрельба: Дробовик", -- Target_Practice_-_Shotgun
       ["Team %d: "] = "Команда %d: ",
-      ["Team Scores"] = "Очки команды", -- Control, Space_Invasion
---      ["Teleporation Node"] = "", -- Construction_Mode
---      ["Teleportation Mode"] = "", -- Construction_Mode
---      ["Teleportation Node"] = "", -- Construction_Mode
+      ["Team of Hearts"] = "Команда сердец", -- Challenge_-_Speed_Shoppa_-_Hedgelove
+      ["Team Scores"] = "Очки команд", -- Control, Space_Invasion
+      ["Team Zook"] = "Команда Зуки", -- Target_Practice_-_Bazooka_easy, Target_Practice_-_Bazooka_hard
+      ["Teleportation Mode"] = "Режим Телепортации", -- Construction_Mode
+      ["Teleportation Node"] = "Узел Телепортации", -- Construction_Mode
 --      ["Teleport"] = "", -- Construction_Mode, Frenzy
 --      ["Teleport hint: just use the mouse to select the destination!"] = "", -- A_Classic_Fairytale:dragon
---      ["Teleport Unsuccessful. Please teleport within a clan teleporter's sphere of influence."] = "", -- Construction_Mode
+      ["Teleport Unsuccessful. Please teleport within a clan teleporter's sphere of influence."] = "Неудачная Телепортация. Вы можете телепортироваться только в области влияния ваших телепортов.", -- Construction_Mode
 --      ["Thanks!"] = "", -- A_Classic_Fairytale:family
 --      ["Thank you, my hero!"] = "", -- A_Classic_Fairytale:family
 --      ["Thank you, oh, thank you, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
@@ -852,43 +949,46 @@
 --      ["That ought to show them!"] = "", -- A_Classic_Fairytale:backstab
 --      ["That's for my father!"] = "", -- A_Classic_Fairytale:backstab
 --      ["That shaman sure knows what he's doing!"] = "", -- A_Classic_Fairytale:shadow
---      ["That Sinking Feeling"] = "",
+      ["That Sinking Feeling"] = "Дед Мазай и Ёжики",
 --      ["That's not our problem!"] = "", -- A_Classic_Fairytale:enemy
 --      ["That's typical of you!"] = "", -- A_Classic_Fairytale:family
 --      ["That was just mean!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
 --      ["That was pointless."] = "",
 --      ["The answer is...entertaintment. You'll see what I mean."] = "", -- A_Classic_Fairytale:backstab
---      ["The anti-portal zone is all over the floor, and I have nothing to kill him...Droping something could hurt him enough to kill him..."] = "", -- portal
---      ["The Bottom Feeder can score points by killing anyone."] = "", -- Mutant
+      ["The anti-portal zone is all over the floor, and I have nothing to kill him...Droping something could hurt him enough to kill him..."] = "Весь пол покрыт анти-портальной краской и мне нечем его убить... Может сбросить на него что-то?..", -- portal
+      ["The Bottom Feeder can score points by killing anyone."] = "Аутсайдер может заработать очки убив любого.", -- Mutant
 --      ["The Bull's Eye"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The caves are well hidden, they won't find us there!"] = "", -- A_Classic_Fairytale:united
 --      ["The Crate Frenzy"] = "", -- A_Classic_Fairytale:first_blood
+      ["The Customer is King"] = "Покупатель это Король", -- Challenge_-_Speed_Shoppa_-_ShoppaKing
 --      ["The Dilemma"] = "", -- A_Classic_Fairytale:shadow
 --      ["The enemy can't move but it might be a good idea to stay out of sight!|"] = "", -- A_Classic_Fairytale:dragon
---      ["The enemy is hiding out on yonder ducky!"] = "",
+      ["The enemy is hiding out on yonder ducky!"] = "Враг прячется на соседней утке!",
 --      ["The Enemy Of My Enemy"] = "", -- A_Classic_Fairytale:enemy
 --      ["The First Blood"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The First Encounter"] = "", -- A_Classic_Fairytale:shadow
---      ["The first player to kill someone becomes the Mutant."] = "", -- Mutant
---      ["The flag will respawn next round."] = "",
+      ["The first player to kill someone becomes the Mutant."] = "Первый игрок, убивший кого-либо, становится Мутантом.", -- Mutant
+      ["The flag will respawn next round."] = "Флаг опять появится в следующем раунде.",
+      ["The flood has stopped! Challenge over."] = "Наводнение остановилось! Испытание закончено.", -- User_Mission_-_That_Sinking_Feeling
 --      ["The food bites back"] = "", -- A_Classic_Fairytale:backstab
 --      ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
---      ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
---      ["The Great Hog in the sky sees your sadness and grants you a boon."] = "", -- Construction_Mode
+      ["The Great Escape"] = "Великий Побег", -- User_Mission_-_The_Great_Escape
+      ["The Great Hog in the sky sees your sadness and grants you a boon."] = "Великий Ёж на небесах видит вашу печаль и благословляет вас даром.", -- Construction_Mode
 --      ["The guardian"] = "", -- A_Classic_Fairytale:shadow
+      ["The Hogies"] = "Боевые Ежи", -- Target_Practice_-_Cluster_Bomb
 --      ["The Individualist"] = "", -- A_Classic_Fairytale:shadow
 --      ["Their buildings were very primitive back then, even for an uncivilised island."] = "", -- A_Classic_Fairytale:united
 --      ["The Journey Back"] = "", -- A_Classic_Fairytale:journey
 --      ["The Leap of Faith"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The Moonwalk"] = "", -- A_Classic_Fairytale:journey
---      ["The Mutant has super-weapons and a lot of health."] = "", -- Mutant
---      ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "", -- Mutant
---      ["The Nameless One"] = "",
---      ["The next one is pretty hard! |Tip: You have to do multiple swings!"] = "", -- Basic_Training_-_Rope
+      ["The Mutant has super-weapons and a lot of health."] = "У Мутанта есть супер-оружие и много здоровья.", -- Mutant
+      ["The Mutant loses health quickly if he doesn't keep scoring kills."] = "Мутант быстро теряет здоровье, если не зарабатывает очки за убийства.", -- Mutant
+      ["The Nameless One"] = "Дед Мазай",
+      ["The next one is pretty hard! |Tip: You have to do multiple swings!"] = "Следующая цель довольно сложна! |Подсказка: Нужно сделать несколько раскачиваний!", -- Basic_Training_-_Rope
 --      ["Then how do they keep appearing?"] = "", -- A_Classic_Fairytale:shadow
 --      ["The other one were all cannibals, spending their time eating the organs of fellow hedgehogs..."] = "", -- A_Classic_Fairytale:first_blood
---      ["The player with least points (or most deaths) becomes the Bottom Feeder."] = "", -- Mutant
---      ["There are a variety of structures available to aid you."] = "", -- Construction_Mode
+      ["The player with least points (or most deaths) becomes the Bottom Feeder."] = "Игрок с наименьшим количеством очков становится Аутсайдером.", -- Mutant
+      ["There are a variety of structures available to aid you."] = "Множество сооружений доступны вам в помощь.", -- Construction_Mode
 --      ["There must be a spy among us!"] = "", -- A_Classic_Fairytale:backstab
 --      ["There's more of them? When did they become so hungry?"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
 --      ["There's nothing more satisfying for me than seeing you share your beauty with the world every morning, my princess!"] = "", -- A_Classic_Fairytale:journey
@@ -900,7 +1000,7 @@
 --      ["The Shadow Falls"] = "", -- A_Classic_Fairytale:shadow
 --      ["The Showdown"] = "", -- A_Classic_Fairytale:shadow
 --      ["The Slaughter"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:first_blood
---      ["THE SPECIALISTS"] = "",
+      ["THE SPECIALISTS"] = "СПЕЦИАЛИСТЫ",
 --      ["The spirits of the ancerstors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The Torment"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The Tunnel Maker"] = "", -- A_Classic_Fairytale:journey
@@ -927,28 +1027,33 @@
 --      ["This is typical!"] = "", -- A_Classic_Fairytale:dragon
 --      ["This must be some kind of sorcery!"] = "", -- A_Classic_Fairytale:shadow
 --      ["This must be the caves!"] = "", -- A_Classic_Fairytale:backstab
---      ["This one's tricky."] = "",
---      ["This rain is really something..."] = "",
+      ["This one's tricky."] = "Это непростая цель.",
+      ["This rain is really something..."] = "Этот дождь нескончаем...",
+      ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "Потрясающее исполнение! Но это испытание можно пройти всего с одним самолётом. Знаете как?", -- User_Mission_-_RCPlane_Challenge
 --      ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Those aliens are destroying the island!"] = "", -- A_Classic_Fairytale:family
 --      ["Timed Kamikaze!"] = "",
 --      ["Time Extended!"] = "",
 --      ["Time Extension"] = "",
       ["TIME: "] = "ВРЕМЯ: ",
---      ["Tip: The rope physics are different than in the real world, |use it to your advantage!"] = "", -- Basic_Training_-_Rope
+      ["Time's up!"] = "Время вышло!", -- Basic_Training_-_Sniper_Rifle
+      ["Tip: The rope physics are different than in the real world, |use it to your advantage!"] = "Подсказка: Поведение верёвки отличается от того, что в реальном мире, |используй это как преимущество!", -- Basic_Training_-_Rope
 --      ["Toggle Shield"] = "",
 --      ["To help you, of course!"] = "", -- A_Classic_Fairytale:journey
+      ["Top-class elite pilot"] = "Элитный пилот топ класса", -- User_Mission_-_RCPlane_Challenge
 --      ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
 --      ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
 --      [" to save the village."] = "", -- A_Classic_Fairytale:dragon
 --      ["To the caves..."] = "", -- A_Classic_Fairytale:united
---      ["Toxic Team"] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
---      ["TRACK COMPLETED"] = "",
+      ["Toxic Team"] = "Токсичные", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+      ["TRACK COMPLETED"] = "ТРЕК ЗАВЕРШЕН",
 
---      ["training"] = "", -- portal
+      ["Trainee"] = "Ученик", -- TargetPractice
+      ["training"] = "Тренировка", -- portal
+      ["Training Team"] = "Обучающиеся", -- TargetPractice
 --      ["Traitors"] = "", -- A_Classic_Fairytale:epil
 --      ["Tribe"] = "", -- A_Classic_Fairytale:backstab
---      ["TrophyRace"] = "",
+      ["TrophyRace"] = "Трофейная Гонка",
 --      ["Try to protect the chief! You won't lose if he dies, but it is advised that he survives."] = "", -- A_Classic_Fairytale:united
 --      ["T_T"] = "",
 --      ["Tumbling Time Extended!"] = "",
@@ -958,53 +1063,57 @@
 --      ["Two little hogs cooperating, getting past obstacles..."] = "", -- A_Classic_Fairytale:journey
 --      ["Uhm...I met one of them and took his weapons."] = "", -- A_Classic_Fairytale:shadow
 --      ["Uhmm...ok no."] = "", -- A_Classic_Fairytale:enemy
---      ["ULTRA KILL"] = "", -- Mutant
+      ["ULTRA KILL"] = "УЛЬТРА УБИЙСТВО", -- Mutant
 --      ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
 --      ["Unexpected Igor"] = "", -- A_Classic_Fairytale:dragon
 --      ["Unique new weapons"] = "", -- Continental_supplies
---      ["Unit"] = "",
+      ["Unit"] = "Юнит", -- User_Mission_-_Newton_and_the_Hammock
 --      ["Unit 0x0007"] = "", -- A_Classic_Fairytale:family
 --      ["Unit 334a$7%;.*"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
---      ["Unit 3378"] = "",
---      ["Unit 835"] = "",
+      ["Unit 3378"] = "Юнит 3378",
+      ["Unit 835"] = "Юнит 835", -- User_Mission_-_Bamboo_Thicket
 --      ["United We Stand"] = "", -- A_Classic_Fairytale:united
---      ["Unlimited Attacks"] = "",
---      ["Unlucky Sods"] = "", -- User_Mission_-_Rope_Knock_Challenge
+      ["Unlimited Attacks"] = "Бесконечные атаки",
+      ["Unlucky Sods"] = "Неудачники", -- User_Mission_-_Rope_Knock_Challenge
 --      ["Unstoppable!"] = "",
---      ["Unsuspecting Louts"] = "", -- User_Mission_-_Rope_Knock_Challenge
+      ["Unsuspecting Louts"] = "Доверчивые хамы", -- User_Mission_-_Rope_Knock_Challenge
 --      ["[Up], [Down] to aim, [Space] to shoot!"] = "", -- A_Classic_Fairytale:first_blood
+      ["Upper-class elite pilot"] = "Элитный пилот высшего класса", -- User_Mission_-_RCPlane_Challenge
 --      ["Use it wisely!"] = "", -- A_Classic_Fairytale:dragon
 --      ["Use it with precaution!"] = "", -- A_Classic_Fairytale:first_blood
---      ["User Challenge"] = "",
---      ["Use the air-attack weapons and the arrow keys to select structures."] = "", -- Construction_Mode
+      ["User Challenge"] = "Одиночная Миссия",
+      ["Use the air-attack weapons and the arrow keys to select structures."] = "Используйте 'Воздушную атаку' и стрелки, чтобы выбрать сооружение.", -- Construction_Mode
 --      ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
 --      ["Use the rope to get on the head of the mole, young one!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Use the rope to knock your enemies to their doom."] = "", -- User_Mission_-_Rope_Knock_Challenge
+      ["Use the portal to move fast and far, use it to kill, use it with caution!"] = "Используй портал для перемещения, используй его для убийства, используй его с осторожностью!", -- portal
+      ["Use the rope to knock your enemies to their doom."] = "Используйте веревку, чтобы сбить врагов к их гибели.", -- User_Mission_-_Rope_Knock_Challenge
 --      ["Use your ready time to think."] = "", -- Frenzy
---      ["Use your rope to get from start to finish as fast as you can!"] = "",
---      ["Utility Crate Placement Mode"] = "", -- Construction_Mode
---      ["Vampirism"] = "", -- Construction_Mode
+      ["Use your rope to collect all crates as fast as possible."] = "Используйте веревку, чтобы собрать все ящики как можно быстрее.", -- SpeedShoppa
+      ["Use your rope to get from start to finish as fast as you can!"] = "Используй веревку, чтобы добраться от старта до финиша как можно быстрее!",
+      ["Utility Crate Placement Mode"] = "Режим Размещения Ящиков с Утилитами", -- Construction_Mode
+      ["Vampirism"] = "Вампиризм", -- Construction_Mode
 --      ["Vedgies"] = "", -- A_Classic_Fairytale:journey
 --      ["Vegan Jack"] = "", -- A_Classic_Fairytale:enemy
---      ["Victory!"] = "", -- Basic_Training_-_Rope
---      ["Victory for the "] = "", -- CTF_Blizzard, Capture_the_Flag
+      ["Victory!"] = "Победа!", -- Basic_Training_-_Rope
+      ["Victory for the "] = "Победа за ", -- CTF_Blizzard, Capture_the_Flag
+      ["voldemort"] = "Волан-де-Морт", -- portal
 --      ["Violence is not the answer to your problems!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Walls Left"] = "", -- WxW
---      ["Walls Required"] = "", -- WxW
---      ["WALL TO WALL"] = "", -- WxW
---      ["Wannabe Flyboys"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Wannabe Shoppsta"] = "", -- User_Mission_-_Rope_Knock_Challenge
+      ["Walls Left"] = "Стен осталось", -- WxW
+      ["Walls Required"] = "Стен Необходимо", -- WxW
+--      ["WALL TO WALL"] = "ОТ СТЕНЫ К СТЕНЕ", -- WxW
+      ["Wannabe Flyboys"] = "Хочу быть Пилотом", -- User_Mission_-_RCPlane_Challenge
+      ["Wannabe Shoppsta"] = "Хочу быть Шоппером", -- User_Mission_-_Rope_Knock_Challenge
 --      ["Watch your steps, young one!"] = "", -- A_Classic_Fairytale:first_blood
---      ["Watermelon Bomb"] = "", -- Construction_Mode
---      ["Waypoint placed."] = "",
---      ["Way-Points Remaining"] = "",
+      ["Watermelon Bomb"] = "Арбузная бомба", -- Construction_Mode
+      ["Waypoint placed."] = "Контрольная Точка добавлена.",
+      ["Way-Points Remaining"] = "Контрольных Точек осталось",
 --      ["Weaklings"] = "", -- A_Classic_Fairytale:shadow
 --      ["We all know what happens when you get frightened..."] = "", -- A_Classic_Fairytale:first_blood
---      ["Weapon Crate Placement Mode"] = "", -- Construction_Mode
---      ["Weapon Filter"] = "", -- Construction_Mode
+      ["Weapon Crate Placement Mode"] = "Режим Размещения Ящиков с Оружием", -- Construction_Mode
+      ["Weapon Filter"] = "Фильтр Оружия", -- Construction_Mode
 --      ["weaponschemes"] = "", -- Continental_supplies
---      ["Weapons Reset"] = "",
---      ["Weapons reset."] = "", -- Highlander
+      ["Weapons Reset"] = "Сброс оружия",
+      ["Weapons reset."] = "Сброс оружия.", -- Highlander
 --      ["We are indeed."] = "", -- A_Classic_Fairytale:backstab
 --      ["We can't defeat them!"] = "", -- A_Classic_Fairytale:shadow
 --      ["We can't hold them up much longer!"] = "", -- A_Classic_Fairytale:united
@@ -1014,7 +1123,7 @@
 --      ["We have to protect the village!"] = "", -- A_Classic_Fairytale:united
 --      ["We have to unite and defeat those cylergs!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Welcome, Leaks A Lot!"] = "", -- A_Classic_Fairytale:journey
---      ["Well done."] = "",
+      ["Well done."] = "Отлично.",
 --      ["We'll give you a problem then!"] = "", -- A_Classic_Fairytale:enemy
 --      ["We'll spare your life for now!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Well, that was a waste of time."] = "", -- A_Classic_Fairytale:dragon
@@ -1037,7 +1146,7 @@
 --      ["What a strange feeling!"] = "", -- A_Classic_Fairytale:backstab
 --      ["What do my faulty eyes observe? A spy!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Whatever floats your boat..."] = "", -- A_Classic_Fairytale:shadow
---      [" What !! For all of this struggle i just win some ... TIME o0"] = "", -- portal
+      [" What !! For all of this struggle i just win some ... TIME o0"] = " ЧТО ?! За все эти страдания я выиграл только немного ... ВРЕМЕНИ o0", -- portal
 --      ["What has "] = "", -- A_Classic_Fairytale:backstab
 --      ["What? Here? How did they find us?!"] = "", -- A_Classic_Fairytale:backstab
 --      ["What is this place?"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy
@@ -1055,7 +1164,7 @@
 --      ["Where do you get that?!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Where have you been?!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Where have you been?"] = "", -- A_Classic_Fairytale:united
---      ["Whip"] = "", -- Construction_Mode
+      ["Whip"] = "Кнут", -- Construction_Mode
 --      ["? Why?"] = "", -- A_Classic_Fairytale:backstab
 --      ["Why "] = "", -- A_Classic_Fairytale:backstab
 --      ["! Why?!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
@@ -1067,14 +1176,15 @@
 --      ["Why do you want to take over our island?"] = "", -- A_Classic_Fairytale:enemy
 --      ["Why me?!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Why would they do this?"] = "", -- A_Classic_Fairytale:backstab
+      ["Will be useful if I need a new plateform or if I want to rise...."] = "Это пригодится, чтобы подняться выше...", -- portal
 --      ["- Will Get 1-3 random weapons"] = "", -- Continental_supplies
 --      ["- Will give you an airstrike every fifth turn."] = "", -- Continental_supplies
 --      ["- Will give you a parachute every second turn."] = "", -- Continental_supplies
 
 
---      ["Will this ever end?"] = "",
---      ["WINNER IS "] = "", -- Mutant
---      ["WINNING TIME: "] = "",
+      ["Will this ever end?"] = "Когда уже конец?",
+      ["WINNER IS "] = "ПОБЕДИЛ ", -- Mutant
+      ["WINNING TIME: "] = "ПОБЕДНОЕ ВРЕМЯ: ",
 --      ["Wise Oak"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
 --      ["With Dense Cloud on the land of shadows, I'm the village's only hope..."] = "", -- A_Classic_Fairytale:journey
 --      ["With the rest of the tribe gone, it was up to "] = "", -- A_Classic_Fairytale:dragon
@@ -1095,26 +1205,48 @@
 --      ["You are playing with our lives here!"] = "", -- A_Classic_Fairytale:enemy
 --      ["! You bastards!"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:united
 --      ["You bear impressive skills, "] = "", -- A_Classic_Fairytale:dragon
---      ["You can't fire a portal on the blue surface"] = "", -- portal
+      ["You can't fire a portal on the blue surface"] = "Нельзя ставить порталы на синюю поверхность", -- portal
 --      ["You couldn't possibly believe that after refusing my offer I'd just let you go!"] = "", -- A_Classic_Fairytale:journey
---      ["You'd almost swear the water was rising!"] = "",
+      ["You'd almost swear the water was rising!"] = "Могу поклясться, что вода прибывает!",
 --      ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
---      ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
+      ["You did not make it in time, try again!"] = "Время вышло, попробуй еще раз!", -- Basic_Training_-_Rope
+      ["You had %.2fs remaining on the clock (+%d points)."] = "У вас оставалось %.2f секунд на таймере (+%d очков).", -- Basic_Training_-_Sniper_Rifle
+      ["You had %.1fs remaining on the clock (+%d points)."] = "У вас оставалось %.1f секунд на таймере (+%d очков).", -- TargetPractice      
 --      ["You have 7 turns until the next wave arrives.|Make sure the arriving cannibals are greeted appropriately!|If the hog dies, the cause is lost.|Hint: you might want to use some mines..."] = "", -- A_Classic_Fairytale:backstab
 --      ["You have "] = "", -- A_Classic_Fairytale:dragon
 --      ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
---      ["You have been respawned, at your last checkpoint!"] = "", -- Basic_Training_-_Rope
---      ["You have been respawned, be more carefull next time!"] = "", -- Basic_Training_-_Rope
+      ["You have been respawned, at your last checkpoint!"] = "Ты возродился на последней контрольной точке!", -- Basic_Training_-_Rope
+      ["You have been respawned, be more carefull next time!"] = "Ты возродился, будь осторожней в следующий раз!", -- Basic_Training_-_Rope
 --      ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
+      ["You have collected %d out of %d crate(s)."] = "Вы собрали %d из %d ящиков.", -- SpeedShoppa
+      ["You have destroyed %d of %d targets."] = "Вы уничтожили %d из %d целей.", -- Basic_Training_-_Bazooka
+      ["You have destroyed %d of %d targets (+%d points)."] = "Вы уничтожили %d из %d целей (+%d очков).", -- Basic_Training_-_Sniper_Rifle
+      ["You have dropped %d missiles."] = "Вы запустили %d ракет.", -- User_Mission_-_RCPlane_Challenge
 --      ["You have failed to complete your task, young one!"] = "", -- A_Classic_Fairytale:journey
 --      ["You have failed to save the tribe!"] = "", -- A_Classic_Fairytale:backstab
 --      ["You have finally figured it out!"] = "", -- A_Classic_Fairytale:enemy
+      ["You have finished the bazooka training!"] = "Вы прошли тренировку с базукой!", -- Basic_Training_-_Bazooka
+      ["You have finished the challenge!"] = "Вы прошли испытание!", -- User_Mission_-_RCPlane_Challenge
+      ["You have finished the challenge in %.3f s."] = "Вы прошли испытание за %.3f сек.", -- SpeedShoppa
+      ["You have finished the target practice!"] = "Вы завершили учебную стрельбу!", -- TargetPractice
+      ["You have gained an achievement: %s"] = "Вы получили достижение: %s", -- User_Mission_-_RCPlane_Challenge
 --      ["You have kidnapped our whole tribe!"] = "", -- A_Classic_Fairytale:enemy
 --      ["You have killed an innocent hedgehog!"] = "", -- A_Classic_Fairytale:backstab
+      ["You have launched %d bazookas."] = "Вы запустили %d базук.", -- Basic_Training_-_Bazooka
+      ["You have launched %d homing bees."] = "Вы запустили %d пчёлок.", -- Target_Practice_-_Homing_Bee
+      ["You have made %d shots."] = "Вы сделали %d выстрелов.", -- Basic_Training_-_Sniper_Rifle
+      ["You haven't rescued anyone."] = "Вы никого не спасли.", -- User_Mission_-_That_Sinking_Feeling
+      ["You have obtained an achievement: Lively Lifeguard"] = "Вы получили достижение: Живучий Спасатель", -- User_Mission_-_That_Sinking_Feeling
+      ["You have perfectly beaten the challenge!"] = "Вы прекрасно прошли испытание!", -- User_Mission_-_RCPlane_Challenge
 --      ["You have proven yourself worthy to see our most ancient secret!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["You have proven yourselves worthy!"] = "", -- A_Classic_Fairytale:enemy
---      ["You have SCORED!!"] = "",
---      ["You have to destroy 12 targets in 180 seconds"] = "", -- Basic_Training_-_Cluster_Bomb
+      ["You have SCORED!!"] = "Вы доставили флаг!!",
+      ["You have shot %d times."] = "Вы выстрелили %d раз.", -- TargetPractice
+      ["You have thrown %d grenades."] = "Вы бросили %d гранат.", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
+      ["You have to destroy 12 targets in 180 seconds"] = "Тебе надо уничтожить 12 целей за 180 секунд", -- Basic_Training_-_Cluster_Bomb
+      ["You have used only 1 RC plane. Outstanding!"] = "Вы использовали всего 1 самолёт. Выдающееся достижение!", -- User_Mission_-_RCPlane_Challenge
+      ["You have used %d RC planes."] = "Вы использовали %d самолётов.", -- User_Mission_-_RCPlane_Challenge
+      ["You have successfully finished the sniper rifle training!"] = "Вы успешно завершили тренировку со снайперской винтовкой!", -- Basic_Training_-_Sniper_Rifle
 --      ["You have won the game by proving true cooperative skills!"] = "", -- A_Classic_Fairytale:enemy
 --      ["You just appeared out of thin air!"] = "", -- A_Classic_Fairytale:backstab
 --      ["You just committed suicide..."] = "", -- A_Classic_Fairytale:shadow
@@ -1122,33 +1254,42 @@
 --      ["You know...taking a stroll."] = "", -- A_Classic_Fairytale:backstab
 --      ["You know what? I don't even regret anything!"] = "", -- A_Classic_Fairytale:backstab
 --      ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
---      ["You may only attack from a rope!"] = "", -- WxW
---      ["You may only spawn 5 crates per turn."] = "", -- Construction_Mode
---      ["You may only use 1 Extra Time per turn."] = "", -- Construction_Mode
+      ["You lose!"] = "Вы проиграли!", -- Basic_Training_-_Bazooka
+      ["You may only attack from a rope!"] = "Вы можете атаковать только с верёвки!", -- WxW
+      ["You may only spawn 5 crates per turn."] = "Вы можете создавать только 5 ящиков за ход.", -- Construction_Mode
+      ["You may only use 1 Extra Time per turn."] = "Вы можете использовать Дополнительное Время только один раз за ход.", -- Construction_Mode
 --      ["You meatbags are pretty slow, you know!"] = "", -- A_Classic_Fairytale:enemy
 --      ["You might want to find a way to instantly kill arriving cannibals!"] = "", -- A_Classic_Fairytale:backstab
+      ["You must survive the flood in order to score."] = "Вы должны пережить наводнение, чтобы заработать очки.", -- User_Mission_-_That_Sinking_Feeling
 --      ["Young one, you are telling us that they can instantly change location without a shaman?"] = "", -- A_Classic_Fairytale:united
 --      ["You probably know what to do next..."] = "", -- A_Classic_Fairytale:first_blood
+      ["Your accuracy was %.1f%%."] = "Ваша точность составила %.1f%%.", -- Basic_Training_-_Bazooka
+      ["Your accuracy was %.1f%% (+%d points)."] = "Ваша точность составила %.1f%% (+%d очков).", -- TargetPractice
 --      ["Your deaths will be avenged, cannibals!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
 --      ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
 --      ["You're a pathetic liar!"] = "", -- A_Classic_Fairytale:backstab
 --      ["You're funny!"] = "", -- A_Classic_Fairytale:journey
---      ["You're getting pretty good! |Tip: When you shorten you rope you move faster! |and when you lengthen it you move slower"] = "", -- Basic_Training_-_Rope
+      ["You're getting pretty good! |Tip: When you shorten you rope you move faster! |and when you lengthen it you move slower"] = "У тебя хорошо получается! |Подсказка: Когда веревка укорачивается, ты двигаешься быстрее! |А когда удлиняется - медленнее!", -- Basic_Training_-_Rope
 --      ["You're pathetic! You are not worthy of my attention..."] = "", -- A_Classic_Fairytale:shadow
 --      ["You're probably wondering why I bought you back..."] = "", -- A_Classic_Fairytale:backstab
 --      ["You're terrorizing the forest...We won't catch anything like this!"] = "", -- A_Classic_Fairytale:shadow
+      ["Your hedgehog died!"] = "Ваш ёж умер!", -- User_Mission_-_That_Sinking_Feeling
 --      ["Your hogs must survive!"] = "", -- A_Classic_Fairytale:journey
 --      ["Your movement skills will be evaluated now."] = "", -- A_Classic_Fairytale:first_blood
+      ["Your rank: %s"] = "Ваш ранк: %s", -- User_Mission_-_RCPlane_Challenge
 --      ["You saved"] = "",
+      ["You saved %d of 8 Hapless Hogs."] = "Вы спасли %d из 8 Несчастных Ёжиков", -- User_Mission_-_That_Sinking_Feeling
 --      ["You've been assaulting us, we have been just defending ourselves!"] = "", -- A_Classic_Fairytale:enemy
---      ["You've failed. Try again."] = "",
---      ["You've reached the goal!| |Time: "] = "",
+      ["You've failed. Try again."] = "Ты проиграл. Попробуй еще раз.",
+      ["You've reached the goal!| |Time: "] = "Вы достигли цели!| |Время: ",
 --      ["You will be avenged!"] = "", -- A_Classic_Fairytale:shadow
 --      ["- You will recieve 2-4 weapons on each kill! (Even on own hogs)"] = "", -- Continental_supplies
 --      ["You won't believe what happened to me!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Yuck! I bet they'll keep worshipping her even after I save the village!"] = "", -- A_Classic_Fairytale:family
 --      ["Zealandia"] = "", -- Continental_supplies
---      ["'Zooka Team"] = "",
+      ["zombi"] = "Зомби", -- portal
+      ["Zook"] = "Зук", -- Target_Practice_-_Bazooka_easy, Target_Practice_-_Bazooka_hard
+      ["'Zooka Team"] = "Команда Зука",
 --      ["Zork"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
     }
--- a/share/hedgewars/Data/Locale/ru.txt	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/ru.txt	Mon Nov 09 18:37:57 2015 +0100
@@ -42,7 +42,7 @@
 00:39=Летающая тарелка
 00:40=Коктейль Молотова
 00:41=Птичка
-00:42=Портативный телепорт
+00:42=Портальная Пушка
 00:43=Фортепьяновый удар
 00:44=Старый Лимбургер
 00:45=Синус-пушка (бета)
@@ -59,6 +59,7 @@
 00:55=Замораживатель
 00:56=Секач
 00:57=Батут
+00:58=Воздушная мина
 
 01:00=Вперёд к победе!
 01:01=Ничья
@@ -83,6 +84,9 @@
 01:20=%1 отскок
 01:21=Звук отключен
 01:22=Режим отсутствия
+01:23=Авто Камера Выкл.
+01:24=Авто Камера Вкл.
+01:25=Нажмите кнопку мишени для указания цели
 
 ; Event messages
 ; Hog (%1) died
@@ -454,6 +458,10 @@
 03:53=Модель 40
 ;03:54=Построй что нибудь
 03:54=Полезная вещь
+03:55=Холоднее уже не будет!
+03:56=Употребляй или злоупотребляй
+03:57=Полезная вещь
+03:58=Летающая неконтактная бомба
 
 ; Weapon Descriptions (use | as line breaks)
 04:00=Атакуй своих врагов обычной гранатой.|Она взорвется сразу, как только таймер|достигнет нуля.|1-5: Установить таймер гранаты|Атака: Удерживай для более дальнего броска
@@ -506,6 +514,15 @@
 04:47=Удвой веселье с двумя шипованными, коварными,|липучими минами. Устрой цепную реакцию или|защити себя (или то и другое!)|Атака: Удерживай для более дальнего броска|(дважды)
 04:48=Почему кротам достаются все оскорбления?|Вакингующий ёж может быть столь забавным!|Хороший удар этого молота сбреет треть|здоровья ежа и погрузит его в землю.|Атака: Ударить молотом
 04:49=Воскреси своих друзей!|Но будь осторожен, т.к. оно также воскресит|твоих врагов.|Атака: Удерживай атаку нажатой для медленного|воскрешения|Вверх: Ускорить воскрешение
+04:50=Кто-то скрывается под землёй?|Достань их сверлящим ударом!|Таймер контролирует глубину бурения.|Влево/Вправо: Определить направление атаки|1-5: Установить таймер|Курсор: Выбрать бомбардируемую область
+04:51=Швырни в противника комок грязи задаром!|Не наносит урона, но сталкивает|ежей и другие объекты назад.|Атака: Удерживай для более дальнего броска
+04:52=Не используется
+04:53=Проделайте путь сквозь время и пространство,|пока ваши соратники борятся в одиночестве.|Будьте готовы вернуться в любое время,|при Внезапной Смерти или когда все союзники повержены.|Предупреждение. Не работает во время Внезапной Смерти,|если вы один или если вы Король.|Атака: Активировать
+04:54=Распыляет поток липких хлопьеы.|Строит мосты, хоронит врагов, перекрывает туннели.|Будьте осторожны - эти хлопья не прилипают к вам!|Атака: Активировать|Вверх/Вниз: Продолжать прицельную стрельбу|Влево/Вправо: Изменить силу (дальность) распыления
+04:55=Bерните ледниковый период!|Замораживает ежей, делает пол скользким или|спасает вас от утопления, замораживая воду.|Атака: Включить/Выключить замораживатель|Вверх/Вниз: Продолжать прицельную стрельбу
+04:56=Вы можете бросить два секача во врага,|заблокировать проходы и туннели|и даже использовать их для восхождения!|Bострожно! Игры с ножами опасны.|Атака: Удерживай для выстрела с большей силой (дважды)
+04:57=Строит ОЧЕНЬ эластичный батут, от которого|ежи и другие объекты будут отскакивать|без получения урона.|Влево/Вправо: Изменить положение батута|Курсор: Разместить батут в нужной позиции
+04:58=Эта неконтактная бомба будет свободно летать в воздухе|и следовать за неосторожными ежами,|подходящими к ней слишком близко.|Однако, урон от взрыва слабее урона от обычной мины.|Атака: Удерживай для выстрела с большей силой
 
 ; Game goal strings
 05:00=Режимы игры
--- a/share/hedgewars/Data/Locale/stub.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/stub.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -10,8 +10,11 @@
 --      ["+2 for becoming a Mutant"] = "", -- Mutant
 --      ["30 minutes later..."] = "", -- A_Classic_Fairytale:shadow
 --      ["About a month ago, a cyborg came and told us that you're the cannibals!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Above-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Accuracy Bonus!"] = "",
+--      ["Accuracy bonus: +%d points"] = "", -- Basic_Training_-_Sniper_Rifle
 --      ["Ace"] = "", -- User_Mission_-_RCPlane_Challenge, User_Mission_-_Rope_Knock_Challenge
+--      ["Achievement obtained: Lively Lifeguard"] = "", -- User_Mission_-_That_Sinking_Feeling
 --      ["Achievement Unlocked"] = "", -- User_Mission_-_Bamboo_Thicket, User_Mission_-_That_Sinking_Feeling, Tumbler
 --      ["A Classic Fairytale"] = "", -- A_Classic_Fairytale:first_blood
 --      ["???"] = "", -- A_Classic_Fairytale:backstab
@@ -30,6 +33,7 @@
 --      ["a Hedgewars tag game"] = "", -- Mutant
 --      ["AHHh, home sweet home.  Made it in %d seconds."] = "", -- ClimbHome
 --      ["Aiming Practice"] = "", --Bazooka, Shotgun, SniperRifle
+--      ["Aiming practice"] = "", -- TargetPractice
 --      ["Air Attack"] = "", -- Construction_Mode
 --      ["A leap in a leap"] = "", -- A_Classic_Fairytale:first_blood
 --      ["A little gift from the cyborgs"] = "", -- A_Classic_Fairytale:shadow
@@ -71,13 +75,16 @@
 --      ["Attack From Rope"] = "", -- WxW
 --      ["Australia"] = "", -- Continental_supplies
 --      ["Available points remaining: "] = "",
+--      ["Average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Back Breaker"] = "", -- A_Classic_Fairytale:backstab
 --      ["Back in the village, after telling the villagers about the threat..."] = "", -- A_Classic_Fairytale:united
 --      ["[Backspace]"] = "",
 --      ["Backstab"] = "", -- A_Classic_Fairytale:backstab
+--      ["Bad Guy"] = "", -- User_Mission_-_The_Great_Escape
+--      ["badmad"] = "", -- portal
 --      ["Bad Team"] = "", -- User_Mission_-_The_Great_Escape
 --      ["Ballgun"] = "", -- Construction_Mode
---      ["Bamboo Thicket"] = "",
+--      ["Bamboo Thicket"] = "", -- User_Mission_-_Bamboo_Thicket
 --      ["Barrel Eater!"] = "",
 --      ["Barrel Launcher"] = "",
 --      ["Barrel Placement Mode"] = "", -- Construction_Mode
@@ -88,6 +95,8 @@
 --      ["Bazooka"] = "", -- Construction_Mode, Frenzy, A_Space_Adventure:death02
 --      ["Bazooka Training"] = "",
 --      ["Beep Loopers"] = "", -- A_Classic_Fairytale:queen
+--      ["Beginner"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Below-average pilot"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Best laps per team: "] = "",
 --      ["Best Team Times: "] = "",
 --      ["Beware, though! If you are slow, you die!"] = "", -- A_Classic_Fairytale:dragon
@@ -101,12 +110,14 @@
 --      ["Bloody Rookies"] = "", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
 --      ["Blowtorch"] = "", -- Construction_Mode, Frenzy
 --      ["Blue Team"] = "", -- User_Mission_-_Dangerous_Ducklings
+--      ["Bobo"] = "", -- User_Mission_-_Nobody_Laugh
 --      ["Bone Jackson"] = "", -- A_Classic_Fairytale:backstab
 --      ["Bonely"] = "", -- A_Classic_Fairytale:shadow
 --      ["BOOM!"] = "",
 --      ["Boom!"] = "",
 --      ["Boss defeated!"] = "",
 --      ["Boss Slayer!"] = "",
+--      ["BOTTOM FEEDER"] = "", -- Mutant
 --      ["Brain Blower"] = "", -- A_Classic_Fairytale:journey
 --      ["Brainiac"] = "", -- A_Classic_Fairytale:epil, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:shadow
 --      ["Brainila"] = "", -- A_Classic_Fairytale:united
@@ -125,6 +136,8 @@
 --      ["But why would they help us?"] = "", -- A_Classic_Fairytale:backstab
 --      ["But you're cannibals. It's what you do."] = "", -- A_Classic_Fairytale:enemy
 --      ["But you said you'd let her go!"] = "", -- A_Classic_Fairytale:journey
+--      ["C-1"] = "", -- portal
+--      ["C-2"] = "", -- portal
 --      ["Cake"] = "", -- Construction_Mode
 --      ["Call me Beep! Well, 'cause I'm such a nice...person!"] = "", -- A_Classic_Fairytale:family
 --      ["Cannibals"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:first_blood
@@ -133,9 +146,13 @@
 --      ["CAPTURE THE FLAG"] = "",
 --      ["Careless"] = "",
 --      ["Carol"] = "", -- A_Classic_Fairytale:family
+--      ["Challenge"] = "", -- SpeedShoppa
 --      ["CHALLENGE COMPLETE"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Challenge completed!"] = "", -- SpeedShoppa
+--      ["Challenge failed!"] = "", -- SpeedShoppa
 --      ["Change Weapon"] = "",
 --      ["changing range from %i%% to %i%% with period of %i msec"] = "", -- Gravity
+--      ["Cheater"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Choose your side! If you want to join the strange man, walk up to him.|Otherwise, walk away from him. If you decide to att...nevermind..."] = "", -- A_Classic_Fairytale:shadow
 --      ["Cleaver"] = "", -- Construction_Mode
 --      ["Cleaver Placement Mode"] = "", -- Construction_Mode
@@ -160,29 +177,36 @@
 --      ["Configuration accepted."] = "", -- WxW
 --      ["Congratulations!"] = "",
 --      ["Congratulations"] = "", -- Basic_Training_-_Rope
+--      ["Congratulations! You have destroyed all targets within the time."] = "", -- TargetPractice
+--      ["Congratulations! You have truly mastered this challenge! Don't forget to save the demo."] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Congratulations! You needed only half of time|to eliminate all targets."] = "", -- Basic_Training_-_Cluster_Bomb
 --      ["Congratulations! You've completed the Rope tutorial! |- Tutorial ends in 10 seconds!"] = "", -- Basic_Training_-_Rope
 --      ["Congratulations! You've eliminated all targets|within the allowed time frame."] = "", --Bazooka, Shotgun, SniperRifle
 --      ["CONSTRUCTION MODE"] = "", -- Construction_Mode
 --      ["Construction Station"] = "", -- Construction_Mode
 --      ["Continental supplies"] = "", -- Continental_supplies
---      ["Control pillars to score points."] = "",
+--      ["CONTROL"] = "", -- Control
+--      ["Control pillars to score points."] = "", -- Control
+--      ["Copper"] = "", -- User_Mission_-_Nobody_Laugh
 --      ["Core"] = "", -- Construction_Mode
 --      ["Corporationals"] = "", -- A_Classic_Fairytale:queen
 --      ["Corpsemonger"] = "", -- A_Classic_Fairytale:shadow
 --      ["Corpse Thrower"] = "", -- A_Classic_Fairytale:epil
 --      ["Cost"] = "", -- Construction_Mode
 --      ["Crate Placement Tool"] = "", -- Construction_Mode
---      ["Crates Left:"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Crates left: %d"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["crate(s)"] = "", -- SpeedShoppa
+--      ["%d crate(s) remaining"] = "", -- SpeedShoppa
 --      ["Cricket time: [Drop a fireable mine! ~ Will work if fired close to your hog & far away from enemy ~ 1 sec]"] = "", -- Continental_supplies
 --      ["Current setting is "] = "", -- Gravity
---      ["Cybernetic Empire"] = "",
+--      ["Cybernetic Empire"] = "", -- User_Mission_-_Bamboo_Thicket
 --      ["Cyborg. It's what the aliens call themselves."] = "", -- A_Classic_Fairytale:enemy
 --      ["Dahmer"] = "", -- A_Classic_Fairytale:backstab
 --      ["DAMMIT, ROOKIE!"] = "",
 --      ["DAMMIT, ROOKIE! GET OFF MY HEAD!"] = "",
---      ["Dangerous Ducklings"] = "",
+--      ["Dangerous Ducklings"] = "", -- User_Mission_-_Dangerous_Ducklings
 --      ["Deadweight"] = "",
+--      ["deaths"] = "", -- Mutant
 --      ["Decrease"] = "", -- Continental_supplies
 --      ["Defeat the cannibals"] = "", -- A_Classic_Fairytale:backstab
 --      ["Defeat the cannibals!|"] = "", -- A_Classic_Fairytale:united
@@ -191,20 +215,25 @@
 --      ["Defend your core from the enemy."] = "", -- Construction_Mode
 --      ["Defend yourself!|Hint: You can get tips on using weapons by moving your mouse over them in the weapon selection menu"] = "", -- A_Classic_Fairytale:shadow
 --      ["Dematerializes weapons and equipment carried by enemy hedgehogs."] = "", -- Construction_Mode
+--      ["Demo"] = "", -- The_Specialists
 --      ["Demolition is fun!"] = "",
 --      ["Dense Cloud"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united
 --      ["Dense Cloud must have already told them everything..."] = "", -- A_Classic_Fairytale:shadow
 --      ["Depleted Kamikaze!"] = "",
+--      ["Derp"] = "", -- User_Mission_-_Nobody_Laugh
 --      ["Desert Eagle"] = "", -- Construction_Mode, A_Space_Adventure:death02
 --      ["Destroy him, Leaks A Lot! He is responsible for the deaths of many of us!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Destroy invaders to score points."] = "",
 --      ["Destroy the targets!|Hint: Select the Shoryuken and hit [Space]|P.S. You can use it mid-air."] = "", -- A_Classic_Fairytale:first_blood
 --      ["Destroy the targets!|Hint: [Up], [Down] to aim, [Space] to shoot"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Destroyer of planes"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Did anyone follow you?"] = "", -- A_Classic_Fairytale:united
 --      ["Did you see him coming?"] = "", -- A_Classic_Fairytale:shadow
 --      ["Did you warn the village?"] = "", -- A_Classic_Fairytale:shadow
 --      ["Die, die, die!"] = "", -- A_Classic_Fairytale:dragon
+--      ["Disabled"] = "", -- WxW
 --      ["Disguise as a Rockhopper Penguin: [Swap place with a random enemy hog in the circle]"] = "", -- Continental_supplies
+--      ["Disqualified!"] = "", -- User_Mission_-_That_Sinking_Feeling
 --      ["Dist: "] = "", -- Space_Invasion
 --      ["Do not laugh, inexperienced one, for he speaks the truth!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Do not let his words fool you, young one! He will stab you in the back as soon as you turn away!"] = "", -- A_Classic_Fairytale:first_blood
@@ -220,7 +249,8 @@
 --      ["Drone Hunter!"] = "",
 --      ["Drop a bomb: [Drop some heroic wind that will turn into a bomb on impact]"] = "", -- Continental_supplies
 
---      ["Drowner"] = "",
+--      ["Drowner"] = "", -- User_Mission_-_Nobody_Laugh
+--      ["Drunk greenhorn"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Dude, all the plants are gone!"] = "", -- A_Classic_Fairytale:family
 --      ["Dude, can you see Ramon and Spiky?"] = "", -- A_Classic_Fairytale:journey
 --      ["Dude, that's so cool!"] = "", -- A_Classic_Fairytale:backstab
@@ -239,6 +269,7 @@
 --      ["Eagle Eye: [Blink to the impact ~ One shot]"] = "", -- Continental_supplies
 
 --      ["Ear Sniffer"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:epil
+--      ["Eckles"] = "", -- User_Mission_-_Nobody_Laugh
 --      ["Elderbot"] = "", -- A_Classic_Fairytale:family
 --      ["Elimate your captor."] = "", -- User_Mission_-_The_Great_Escape
 --      ["Eliminate all enemies"] = "",
@@ -250,8 +281,11 @@
 --      ["Eliminate the enemy hogs to win."] = "",
 --      ["Eliminate the enemy specialists."] = "",
 --      ["- Eliminate Unit 3378 |- Feeble Resistance must survive"] = "",
+--      ["Elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Elmo"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
---      ["Energetic Engineer"] = "",
+--      ["Enabled"] = "", -- WxW
+--      ["Energetic Engineer"] = "", -- User_Mission_-_Bamboo_Thicket
+--      ["Engineer"] = "", -- The_Specialists
 --      ["Enjoy the swim..."] = "",
 --      ["[Enter]"] = "",
 --      ["Europe"] = "", -- Continental_supplies
@@ -260,6 +294,7 @@
 --      ["Every single time!"] = "", -- A_Classic_Fairytale:dragon
 --      ["Everything looks OK..."] = "", -- A_Classic_Fairytale:enemy
 --      ["Exactly, man! That was my dream."] = "", -- A_Classic_Fairytale:backstab
+--      ["Experienced beginner"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Extra Damage"] = "", -- Construction_Mode
 --      ["Extra Time"] = "", -- Construction_Mode
 --      ["Eye Chewer"] = "", -- A_Classic_Fairytale:journey
@@ -288,10 +323,12 @@
 --      ["Flamer"] = "",
 --      ["Flamethrower"] = "", -- Construction_Mode
 --      ["Flaming Worm"] = "", -- A_Classic_Fairytale:backstab
+--      ["Flawless victory!"] = "", -- User_Mission_-_RCPlane_Challenge
 
 --      ["Flesh for Brainz"] = "", -- A_Classic_Fairytale:journey
 --      ["Flying Saucer"] = "", -- Construction_Mode, Frenzy
 --      ["For improved features/stability, play 0.9.18+"] = "", -- WxW
+--      ["Frank"] = "", -- User_Mission_-_Nobody_Laugh
 --      ["Free Dense Cloud and continue the mission!"] = "", -- A_Classic_Fairytale:journey
 --      ["Freezer"] = "", -- Construction_Mode
 --      ["FRENZY"] = "", -- Frenzy
@@ -338,14 +375,18 @@
 --      ["Grants nearby hogs life-regeneration."] = "", -- Construction_Mode
 --      ["Gravity"] = "", -- Gravity
 --      ["Great choice, Steve! Mind if I call you that?"] = "", -- A_Classic_Fairytale:shadow
+--      ["GREAT ! Let's kill all this enemies, using portals"] = "", -- portal
 --      ["Great work! Now hit it with your Baseball Bat! |Tip: You can change weapon with 'Right Click'!"] = "", -- Basic_Training_-_Rope
 --      ["Great! You will be contacted soon for assistance."] = "", -- A_Classic_Fairytale:shadow
 
+--      ["Greenhorn"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Green lipstick bullet: [Poisonous, deals no damage]"] = "", -- Continental_supplies
 --      ["Greetings, "] = "", -- A_Classic_Fairytale:dragon
 --      ["Greetings, cloudy one!"] = "", -- A_Classic_Fairytale:shadow
 --      ["Grenade"] = "", -- Construction_Mode, Frenzy, A_Space_Adventure:death02
+--      ["Grenade Group"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
 --      ["Grenade Training"] = "", -- Basic_Training_-_Grenade
+--      ["Grenadier"] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
 --      ["Grenadiers"] = "", -- Basic_Training_-_Grenade
 --      ["Guys, do you think there's more of them?"] = "", -- A_Classic_Fairytale:backstab
 --      ["HAHA!"] = "", -- A_Classic_Fairytale:enemy
@@ -355,7 +396,8 @@
 --      ["Hammer"] = "", -- Construction_Mode, Continental_supplies
 --      ["Hannibal"] = "", -- A_Classic_Fairytale:epil
 --      ["Hapless Hogs"] = "",
---      [" Hapless Hogs left!"] = "",
+--      ["%d Hapless Hogs left"] = "",
+--      ["Harry"] = "", -- User_Mission_-_Nobody_Laugh
 --      [" HAS MUTATED"] = "", -- Mutant
 --      ["Hatless Jerry"] = "", -- A_Classic_Fairytale:queen
 --      ["Have no illusions, your tribe is dead, indifferent of your choice."] = "", -- A_Classic_Fairytale:shadow
@@ -363,6 +405,7 @@
 --      ["Healing Station"] = "", -- Construction_Mode
 --      ["Health Crate Placement Mode"] = "", -- Construction_Mode
 --      ["Health crates extend your time."] = "",
+--      ["Heartful"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
 --      ["Heavy"] = "",
 --      ["Heavy Cannfantry"] = "", -- A_Classic_Fairytale:united
 --      ["Hedge-cogs"] = "", -- A_Classic_Fairytale:enemy
@@ -372,6 +415,7 @@
 --      ["Hedgewars-Knockball"] = "",
 --      ["Hedgibal Lecter"] = "", -- A_Classic_Fairytale:backstab
 --      ["Heh, it's not that bad."] = "",
+--      ["Hell Army"] = "", -- portal
 --      ["Hellish Handgrenade"] = "", -- Construction_Mode
 --      ["Hello again, "] = "", -- A_Classic_Fairytale:family
 --      ["Help me, Leaks!"] = "", -- A_Classic_Fairytale:journey
@@ -389,6 +433,7 @@
 --      ["Hey guys!"] = "", -- A_Classic_Fairytale:united
 --      ["Hey! This is cheating!"] = "", -- A_Classic_Fairytale:journey
 --      ["HIGHLANDER"] = "", -- Highlander
+--      ["hiden"] = "", -- portal
 --      ["Hightime"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Hint: Double Jump - Press [Backspace] twice"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Hint: Select the BlowTorch, aim and press [Fire]. Press [Fire] again to stop.|Don't blow up the crate."] = "", -- A_Classic_Fairytale:journey
@@ -396,6 +441,7 @@
 --      ["Hint: you might want to stay out of sight and take all the crates...|"] = "", -- A_Classic_Fairytale:journey
 --      ["His arms are so strong!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Hit Combo!"] = "",
+--      ["hits"] = "", -- Basic_Training_-_Bazooka
 --      ["Hmmm..."] = "",
 --      ["Hmmm...actually...I didn't either."] = "", -- A_Classic_Fairytale:enemy
 --      ["Hmmm, I'll have to find some way of moving him off this anti-portal surface..."] = "", -- portal
@@ -406,7 +452,9 @@
 --      ["HOLY SHYTE!"] = "", -- Mutant
 --      ["Homing Bee"] = "", -- Construction_Mode
 --      ["Honest Lee"] = "", -- A_Classic_Fairytale:enemy
+--      ["Hook"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
 --      ["Hooray!"] = "",
+--      ["Hopeless case"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Hostage Situation"] = "", -- A_Classic_Fairytale:family
 --      ["How can I ever repay you for saving my life?"] = "", -- A_Classic_Fairytale:journey
 --      ["How come in a village full of warriors, it's up to me to save it?"] = "", -- A_Classic_Fairytale:dragon
@@ -438,6 +486,7 @@
 --      ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey
 --      ["If you know what I mean..."] = "", -- A_Classic_Fairytale:shadow
 --      ["If you say so..."] = "", -- A_Classic_Fairytale:shadow
+--      ["Igmund"] = "", -- User_Mission_-_Nobody_Laugh
 --      ["I guess you'll have to kill them."] = "", -- A_Classic_Fairytale:dragon
 --      ["I have come to make you an offering..."] = "", -- A_Classic_Fairytale:shadow
 --      ["I have no idea where that mole disappeared...Can you see it?"] = "", -- A_Classic_Fairytale:shadow
@@ -447,6 +496,7 @@
 --      ["I just don't want to sink to your level."] = "", -- A_Classic_Fairytale:backstab
 --      ["I just found out that they have captured your princess!"] = "", -- A_Classic_Fairytale:family
 --      ["I just wonder where Ramon and Spiky disappeared..."] = "", -- A_Classic_Fairytale:journey
+--      ["Ikeda"] = "", -- User_Mission_-_Bamboo_Thicket
 --      ["I'll hold them off while you return to the village!"] = "", -- A_Classic_Fairytale:shadow
 --      ["Imagine those targets are the wolves that killed your parents! Take your anger out on them!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["I'm...alive? How? Why?"] = "", -- A_Classic_Fairytale:backstab
@@ -471,18 +521,23 @@
 --      ["In order to get to the other side, you need to collect the crates first.|"] = "", -- A_Classic_Fairytale:dragon
 --      ["INSANITY"] = "", -- Mutant
 --      ["Instructor"] = "", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings
+--      ["Insufficient Power"] = "", -- Construction_Mode
 --      ["Interesting idea, haha!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Interesting! Last time you said you killed a cannibal!"] = "", -- A_Classic_Fairytale:backstab
 --      ["In the meantime, take these and return to your \"friend\"!"] = "", -- A_Classic_Fairytale:shadow
 --      ["invaders destroyed"] = "",
+--      ["Invalid Placement"] = "", -- Construction_Mode
 --      ["Invasion"] = "", -- A_Classic_Fairytale:united
 --      ["Invulnerable"] = "", -- Construction_Mode
+--      ["In your best (and only) flight you took out %d crates with one RC plane!"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["In your best flight you took out %d crates with one RC plane."] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["I saw it with my own eyes!"] = "", -- A_Classic_Fairytale:shadow
 --      ["I see..."] = "", -- A_Classic_Fairytale:shadow
 --      ["I see you have already taken the leap of faith."] = "", -- A_Classic_Fairytale:first_blood
 --      ["I see you would like his punishment to be more...personal..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["I sense another wave of cannibals heading my way!"] = "", -- A_Classic_Fairytale:backstab
 --      ["I sense another wave of cannibals heading our way!"] = "", -- A_Classic_Fairytale:backstab
+--      ["I should get myself a portal gun, maybe this crate has one"] = "", -- portal
 --      ["I shouldn't have drunk that last pint."] = "", -- A_Classic_Fairytale:dragon
 --      ["Is this place in my head?"] = "", -- A_Classic_Fairytale:dragon
 --      ["It doesn't matter. I won't let that alien hurt my daughter!"] = "", -- A_Classic_Fairytale:dragon
@@ -529,6 +584,7 @@
 --      ["Kill the aliens!"] = "", -- A_Classic_Fairytale:dragon
 --      ["Kill the cannibal!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Kill the traitor...or spare his life!|Kill him or press [Precise]!"] = "", -- A_Classic_Fairytale:backstab
+--      ["King Customer"] = "", -- Challenge_-_Speed_Shoppa_-_ShoppaKing
 --      ["Land Sprayer"] = "", -- Construction_Mode
 --      ["Laser Sight"] = "", -- Construction_Mode
 --      ["Last Target!"] = "",
@@ -542,6 +598,7 @@
 --      ["Lee"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
 --      ["[Left Shift]"] = "",
 --      ["left shift"] = "", -- Continental_supplies
+--      ["Lestat"] = "", -- portal
 --      ["Let a Continent provide your weapons!"] = "", -- Continental_supplies
 --      ["Let me test your skills a little, will you?"] = "", -- A_Classic_Fairytale:journey
 --      ["Let's go home!"] = "", -- A_Classic_Fairytale:journey
@@ -562,7 +619,9 @@
 --      ["Look out! There's more of them!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Look out! We're surrounded by cannibals!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Looks like the whole world is falling apart!"] = "", -- A_Classic_Fairytale:enemy
+--      ["Loon"] = "", -- The_Specialists
 --      ["Low Gravity"] = "", -- Construction_Mode, Frenzy
+--      ["Lucifer"] = "", -- portal
 --      ["Luckily, I've managed to snatch some of them."] = "", -- A_Classic_Fairytale:united
 --      ["LUDICROUS KILL"] = "", -- Mutant
 --      ["Made it!"] = "", -- ClimbHome
@@ -571,6 +630,7 @@
 --      ["Medicine: [Fire some exploding medicine that will heal all hogs effected by the explosion]"] = "", -- Continental_supplies
 --      ["MEGA KILL"] = "", -- Mutant
 --      ["Meiwes"] = "", -- A_Classic_Fairytale:backstab
+--      ["milliseconds"] = "", -- SpeedShoppa
 --      ["Mindy"] = "", -- A_Classic_Fairytale:united
 --      ["Mine"] = "", -- Construction_Mode, Frenzy
 --      ["Mine Deployer"] = "",
@@ -579,8 +639,10 @@
 --      ["|- Mines Time:"] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
 --      ["Mine Strike"] = "", -- Construction_Mode
 --      ["MISSION FAILED"] = "", -- User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+--      ["Mission lost!"] = "", -- Basic_Training_-_Grenade
 --      ["MISSION SUCCESS"] = "",
 --      ["MISSION SUCCESSFUL"] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+--      ["Mission won!"] = "", -- Basic_Training_-_Grenade
 --      ["Molotov Cocktail"] = "", -- Construction_Mode
 --      ["Molotov"] = "", -- Continental_supplies
 --      ["MONSTER KILL"] = "", -- Mutant
@@ -592,6 +654,7 @@
 --      ["Muriel"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
 --      ["Muscle Dissolver"] = "", -- A_Classic_Fairytale:shadow
 --      ["-------"] = "", -- Mutant
+--      ["MUTANT"] = "", -- Mutant
 --      ["Mutant"] = "", -- Mutant
 --      ["Nade Boy"] = "", -- Basic_Training_-_Grenade
 --      ["Name"] = "", -- A_Classic_Fairytale:queen
@@ -611,6 +674,7 @@
 --      ["Nice work, "] = "", -- A_Classic_Fairytale:dragon
 --      ["Nice work!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Nilarian"] = "", -- A_Classic_Fairytale:queen
+--      ["Ninja"] = "", -- The_Specialists
 --      ["Nobody Laugh"] = "", -- User_Mission_-_Nobody_Laugh
 --      ["No, I came back to help you out..."] = "", -- A_Classic_Fairytale:shadow
 --      ["No...I wonder where they disappeared?!"] = "", -- A_Classic_Fairytale:journey
@@ -649,6 +713,7 @@
 --      ["Once upon a time, on an island with great natural resources, lived two tribes in heated conflict..."] = "", -- A_Classic_Fairytale:first_blood
 --      ["ONE HOG PER TEAM! KILLING EXCESS HEDGES"] = "", -- Mutant
 --      ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["oneye"] = "", -- portal
 --      ["on Skip"] = "", -- Continental_supplies
 --      ["Oops...I dropped them."] = "", -- A_Classic_Fairytale:united
 --      ["Open that crate and we will continue!"] = "", -- A_Classic_Fairytale:first_blood
@@ -669,14 +734,15 @@
 
 --      ["Per team weapons"] = "", -- Continental_supplies
 --      ["Pfew! That was close!"] = "", -- A_Classic_Fairytale:shadow
+--      ["phosphatoglucidique"] = "", -- portal
 --      ["Piano Strike"] = "", -- Construction_Mode
 --      ["Pickhammer"] = "", -- Construction_Mode
 
 --      ["Pings left:"] = "", -- Space_Invasion
 --      ["Place more waypoints using the 'Air Attack' weapon."] = "",
---      ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge
---      ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Play with me!"] = "", -- A_Classic_Fairytale:shadow
+--      ["player"] = "", -- portal
 --      ["Please place the way-point further from the waterline."] = "", -- Racer
 --      ["Please place the way-point in the open, within the map boundaries."] = "", -- Racer
 --      ["Please, stop releasing your \"smoke signals\"!"] = "", -- A_Classic_Fairytale:shadow
@@ -688,21 +754,28 @@
 --      ["Portal hint: one goes to the destination, and one is the entrance.|"] = "", -- A_Classic_Fairytale:dragon
 --      ["Portal mission"] = "", -- portal
 --      ["Power Remaining"] = "",
+--      ["Predator"] = "", -- portal
 --      ["Prepare yourself"] = "",
 --      ["presice"] = "", -- Continental_supplies
 --      ["Press [Enter] to accept this configuration."] = "", -- WxW
 --      ["Press [Left] or [Right] to move around, [Enter] to jump"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Press [Precise] to skip intro"] = "",
 --      ["Prestigious Pilot"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Private Nolak"] = "", -- Target_Practice_-_Cluster_Bomb
 --      ["Private Novak"] = "", -- Basic_Training_-_Cluster_Bomb
+--      ["Professional pilot"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["Professional stunt pilot"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Protect yourselves!|Grenade hint: set the timer with [1-5], aim with [Up]/[Down] and hold [Space] to set power"] = "", -- A_Classic_Fairytale:shadow
+--      ["Pyro"] = "", -- The_Specialists
 --      ["Race complexity limit reached."] = "",
 --      ["RACER"] = "",
 --      ["Rachel"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
 --      ["Radar Ping"] = "", -- Space_Invasion
 --      ["Raging Buffalo"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
 --      ["Ramon"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow
+--      ["Rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["random in range from %i%% to %i%% with period of %i msec"] = "", -- Gravity
+--      ["razac"] = "", -- portal
 --      ["RC Plane"] = "", -- Construction_Mode
 --      ["RC PLANE TRAINING"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Really?! You thought you could harm me with your little toys?"] = "", -- A_Classic_Fairytale:shadow
@@ -713,14 +786,21 @@
 --      ["Remember: The rope only bend around objects, |if it doesn't hit anything it's always stright!"] = "", -- Basic_Training_-_Rope
 --      ["Remember this, pathetic animal: when the day comes, you will regret your blind loyalty!"] = "", -- A_Classic_Fairytale:shadow
 --      ["REMOVED"] = "", -- Continental_supplies
+--      ["rescues"] = "", -- User_Mission_-_That_Sinking_Feeling
 --      ["Respawner"] = "", -- Construction_Mode
 --      ["Resurrector"] = "", -- Construction_Mode
 --      ["Resurrects dead hedgehogs."] = "", -- Construction_Mode
 --      [" - Return the enemy flag to your base to score | - First team to 3 captures wins | - You may only score when your flag is in your base | - Hogs will drop the flag if killed, or drowned | - Dropped flags may be returned or recaptured | - Hogs respawn when killed"] = "",
 --      ["Return to Leaks A Lot! If you get stuck, press [Precise] to try again!"] = "", -- A_Classic_Fairytale:shadow
+--      ["Rider"] = "", -- portal
 --      ["Righteous Beard"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:first_blood, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
+--      ["ronald"] = "", -- portal
 --      ["Rope"] = "", -- Construction_Mode
 --      ["ROPE-KNOCKING"] = "", -- User_Mission_-_Rope_Knock_Challenge
+--      ["Rope Master!"] = "", -- Basic_Training_-_Rope
+--      ["Roper"] = "", -- SpeedShoppa
+--      ["Ropes and Crates"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes
+--      ["Rope Team"] = "", -- Basic_Training_-_Rope
 --      ["Rope to safety"] = "", -- ClimbHome
 --      ["Rope Training"] = "", -- Basic_Training_-_Rope
 --      ["Rot Molester"] = "", -- A_Classic_Fairytale:shadow
@@ -736,6 +816,7 @@
 --      ["s|"] = "",
 --      ["Sabotage/Flare: [Sabotage all hogs in the circle and deal ~1 dmg OR Fire a cluster up into the air]"] = "", -- Continental_supplies
 
+--      ["Saint"] = "", -- The_Specialists
 --      ["Salivaslurper"] = "", -- A_Classic_Fairytale:united
 --      ["Salvation"] = "", -- A_Classic_Fairytale:family
 --      ["Salvation was one step closer now..."] = "", -- A_Classic_Fairytale:dragon
@@ -749,6 +830,7 @@
 --      ["Score"] = "", -- Mutant
 
 --      ["sec"] = "", -- CTF_Blizzard, TrophyRace, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork, Capture_the_Flag
+--      ["%.1f seconds were remaining."] = "", -- Basic_Training_-_Bazooka
 --      ["Seduction"] = "", -- Continental_supplies
 --      ["Seems like every time you take a \"walk\", the enemy find us!"] = "", -- A_Classic_Fairytale:backstab
 --      ["See that crate farther on the right?"] = "", -- A_Classic_Fairytale:first_blood
@@ -771,6 +853,8 @@
 --      ["Shield OFF:"] = "",
 --      ["Shield ON:"] = "",
 --      ["Shield Seeker!"] = "",
+--      ["Shoppa Union"] = "", -- Challenge_-_Speed_Shoppa_-_Ropes, Challenge_-_Speed_Shoppa_-_ShoppaKing
+--      ["Shoppers"] = "", -- SpeedShoppa
 --      ["Shoryuken"] = "", -- Construction_Mode, Frenzy, A_Space_Adventure:death02
 --      ["Shotgun"] = "", -- Continental_supplies
 --      ["Shotgun Team"] = "",
@@ -792,16 +876,19 @@
 --      ["Smith 0.99b"] = "", -- A_Classic_Fairytale:enemy
 --      ["Smith 0.99f"] = "", -- A_Classic_Fairytale:enemy
 --      ["Smith 1.0"] = "", -- A_Classic_Fairytale:enemy
+--      ["Sniper"] = "", -- The_Specialists
 --      ["Sniper Rifle"] = "", -- Continental_supplies
 --      ["Sniper!"] = "", -- Space_Invasion
 --      ["Sniper Training"] = "",
 --      ["Sniperz"] = "",
 --      ["So humiliating..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["Soldier"] = "", -- The_Specialists
 --      ["Some weapons have a second option. Find them with"] = "", -- Continental_supplies
 --      ["South America"] = "", -- Continental_supplies
 --      ["So? What will it be?"] = "", -- A_Classic_Fairytale:shadow
 --      ["Spawn the crate, and attack!"] = "", -- WxW
 --      ["Special Weapons:"] = "", -- Continental_supplies
+--      ["Speed Shoppa"] = "", -- SpeedShoppa
 --      ["Spiky Cheese"] = "", -- A_Classic_Fairytale:enemy, A_Classic_Fairytale:epil, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow
 --      ["Spleenlover"] = "", -- A_Classic_Fairytale:united
 --      ["Sponge"] = "",
@@ -818,6 +905,7 @@
 
 --      ["Structure Placement Mode"] = "", -- Construction_Mode
 --      ["Structure Placement Tool"] = "", -- Construction_Mode
+--      ["Subject"] = "", -- portal
 --      ["Sundaland"] = "", -- Continental_supplies
 --      ["Super Weapons"] = "", -- WxW
 --      ["Support Station"] = "", -- Construction_Mode
@@ -835,9 +923,17 @@
 --      ["Talk about mixed signals..."] = "", -- A_Classic_Fairytale:dragon
 --      ["Tardis"] = "", -- Construction_Mode
 --      ["Target Placement Mode"] = "", -- Construction_Mode
+--      ["Target Practice: Bazooka (easy)"] = "", -- Target_Practice_-_Bazooka_easy
+--      ["Target Practice: Bazooka (hard)"] = "", -- Target_Practice_-_Bazooka_hard
+--      ["Target Practice: Grenade (easy)"] = "", -- Target_Practice_-_Grenade_easy
+--      ["Target Practice: Grenade (hard)"] = "", -- Target_Practice_-_Grenade_hard
+--      ["Target Practice: Homing Bee"] = "", -- Target_Practice_-_Homing_Bee
+--      ["Target Practice: Shotgun"] = "", -- Target_Practice_-_Shotgun
+--      ["Targets left: %d"] = "", -- TargetPractice
 --      ["Team %d: "] = "",
+--      ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove
 --      ["Team Scores"] = "", -- Control, Space_Invasion
---      ["Teleporation Node"] = "", -- Construction_Mode
+--      ["Team Zook"] = "", -- Target_Practice_-_Bazooka_easy, Target_Practice_-_Bazooka_hard
 --      ["Teleportation Mode"] = "", -- Construction_Mode
 --      ["Teleportation Node"] = "", -- Construction_Mode
 --      ["Teleport"] = "", -- Construction_Mode, Frenzy
@@ -863,6 +959,7 @@
 --      ["The Bull's Eye"] = "", -- A_Classic_Fairytale:first_blood
 --      ["The caves are well hidden, they won't find us there!"] = "", -- A_Classic_Fairytale:united
 --      ["The Crate Frenzy"] = "", -- A_Classic_Fairytale:first_blood
+--      ["The Customer is King"] = "", -- Challenge_-_Speed_Shoppa_-_ShoppaKing
 --      ["The Dilemma"] = "", -- A_Classic_Fairytale:shadow
 --      ["The enemy can't move but it might be a good idea to stay out of sight!|"] = "", -- A_Classic_Fairytale:dragon
 --      ["The enemy is hiding out on yonder ducky!"] = "",
@@ -871,11 +968,13 @@
 --      ["The First Encounter"] = "", -- A_Classic_Fairytale:shadow
 --      ["The first player to kill someone becomes the Mutant."] = "", -- Mutant
 --      ["The flag will respawn next round."] = "",
+--      ["The flood has stopped! Challenge over."] = "", -- User_Mission_-_That_Sinking_Feeling
 --      ["The food bites back"] = "", -- A_Classic_Fairytale:backstab
 --      ["The giant umbrella from the last crate should help break the fall."] = "", -- A_Classic_Fairytale:first_blood
 --      ["The Great Escape"] = "", -- User_Mission_-_The_Great_Escape
 --      ["The Great Hog in the sky sees your sadness and grants you a boon."] = "", -- Construction_Mode
 --      ["The guardian"] = "", -- A_Classic_Fairytale:shadow
+--      ["The Hogies"] = "", -- Target_Practice_-_Cluster_Bomb
 --      ["The Individualist"] = "", -- A_Classic_Fairytale:shadow
 --      ["Their buildings were very primitive back then, even for an uncivilised island."] = "", -- A_Classic_Fairytale:united
 --      ["The Journey Back"] = "", -- A_Classic_Fairytale:journey
@@ -929,15 +1028,18 @@
 --      ["This must be the caves!"] = "", -- A_Classic_Fairytale:backstab
 --      ["This one's tricky."] = "",
 --      ["This rain is really something..."] = "",
+--      ["This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["This will be fun!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Those aliens are destroying the island!"] = "", -- A_Classic_Fairytale:family
 --      ["TIME: "] = "",
 --      ["Timed Kamikaze!"] = "",
 --      ["Time Extended!"] = "",
 --      ["Time Extension"] = "",
+--      ["Time's up!"] = "", -- Basic_Training_-_Sniper_Rifle
 --      ["Tip: The rope physics are different than in the real world, |use it to your advantage!"] = "", -- Basic_Training_-_Rope
 --      ["Toggle Shield"] = "",
 --      ["To help you, of course!"] = "", -- A_Classic_Fairytale:journey
+--      ["Top-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["To place a girder, select it, use [Left] and [Right] to select angle and length, place with [Left Click]"] = "", -- A_Classic_Fairytale:shadow
 --      ["Torn Muscle"] = "", -- A_Classic_Fairytale:journey
 --      [" to save the village."] = "", -- A_Classic_Fairytale:dragon
@@ -945,7 +1047,9 @@
 --      ["Toxic Team"] = "", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
 --      ["TRACK COMPLETED"] = "",
 
+--      ["Trainee"] = "", -- TargetPractice
 --      ["training"] = "", -- portal
+--      ["Training Team"] = "", -- TargetPractice
 --      ["Traitors"] = "", -- A_Classic_Fairytale:epil
 --      ["Tribe"] = "", -- A_Classic_Fairytale:backstab
 --      ["TrophyRace"] = "",
@@ -962,25 +1066,28 @@
 --      ["Under Construction"] = "", -- A_Classic_Fairytale:shadow
 --      ["Unexpected Igor"] = "", -- A_Classic_Fairytale:dragon
 --      ["Unique new weapons"] = "", -- Continental_supplies
---      ["Unit"] = "",
+--      ["Unit"] = "", -- User_Mission_-_Newton_and_the_Hammock
 --      ["Unit 0x0007"] = "", -- A_Classic_Fairytale:family
 --      ["Unit 334a$7%;.*"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:family, A_Classic_Fairytale:queen, A_Classic_Fairytale:united
 --      ["Unit 3378"] = "",
---      ["Unit 835"] = "",
+--      ["Unit 835"] = "", -- User_Mission_-_Bamboo_Thicket
 --      ["United We Stand"] = "", -- A_Classic_Fairytale:united
 --      ["Unlimited Attacks"] = "",
 --      ["Unlucky Sods"] = "", -- User_Mission_-_Rope_Knock_Challenge
 --      ["Unstoppable!"] = "",
 --      ["Unsuspecting Louts"] = "", -- User_Mission_-_Rope_Knock_Challenge
 --      ["[Up], [Down] to aim, [Space] to shoot!"] = "", -- A_Classic_Fairytale:first_blood
+--      ["Upper-class elite pilot"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["Use it wisely!"] = "", -- A_Classic_Fairytale:dragon
 --      ["Use it with precaution!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["User Challenge"] = "",
 --      ["Use the air-attack weapons and the arrow keys to select structures."] = "", -- Construction_Mode
 --      ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"] = "", -- A_Classic_Fairytale:dragon
+--      ["Use the portal to move fast and far, use it to kill, use it with caution!"] = "", -- portal
 --      ["Use the rope to get on the head of the mole, young one!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Use the rope to knock your enemies to their doom."] = "", -- User_Mission_-_Rope_Knock_Challenge
 --      ["Use your ready time to think."] = "", -- Frenzy
+--      ["Use your rope to collect all crates as fast as possible."] = "", -- SpeedShoppa
 --      ["Use your rope to get from start to finish as fast as you can!"] = "",
 --      ["Utility Crate Placement Mode"] = "", -- Construction_Mode
 --      ["Vampirism"] = "", -- Construction_Mode
@@ -988,6 +1095,7 @@
 --      ["Vegan Jack"] = "", -- A_Classic_Fairytale:enemy
 --      ["Victory!"] = "", -- Basic_Training_-_Rope
 --      ["Victory for the "] = "", -- CTF_Blizzard, Capture_the_Flag
+--      ["voldemort"] = "", -- portal
 --      ["Violence is not the answer to your problems!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["Walls Left"] = "", -- WxW
 --      ["Walls Required"] = "", -- WxW
@@ -1067,6 +1175,7 @@
 --      ["Why do you want to take over our island?"] = "", -- A_Classic_Fairytale:enemy
 --      ["Why me?!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Why would they do this?"] = "", -- A_Classic_Fairytale:backstab
+--      ["Will be useful if I need a new plateform or if I want to rise...."] = "", -- portal
 --      ["- Will Get 1-3 random weapons"] = "", -- Continental_supplies
 --      ["- Will give you an airstrike every fifth turn."] = "", -- Continental_supplies
 --      ["- Will give you a parachute every second turn."] = "", -- Continental_supplies
@@ -1100,21 +1209,43 @@
 --      ["You'd almost swear the water was rising!"] = "",
 --      ["You'd better watch your steps..."] = "", -- A_Classic_Fairytale:journey
 --      ["You did not make it in time, try again!"] = "", -- Basic_Training_-_Rope
+--      ["You had %.2fs remaining on the clock (+%d points)."] = "", -- Basic_Training_-_Sniper_Rifle
+--      ["You had %.1fs remaining on the clock (+%d points)."] = "", -- TargetPractice
 --      ["You have 7 turns until the next wave arrives.|Make sure the arriving cannibals are greeted appropriately!|If the hog dies, the cause is lost.|Hint: you might want to use some mines..."] = "", -- A_Classic_Fairytale:backstab
 --      ["You have "] = "", -- A_Classic_Fairytale:dragon
 --      ["You have been giving us out to the enemy, haven't you!"] = "", -- A_Classic_Fairytale:backstab
 --      ["You have been respawned, at your last checkpoint!"] = "", -- Basic_Training_-_Rope
 --      ["You have been respawned, be more carefull next time!"] = "", -- Basic_Training_-_Rope
 --      ["You have chosen the perfect moment to leave."] = "", -- A_Classic_Fairytale:united
+--      ["You have collected %d out of %d crate(s)."] = "", -- SpeedShoppa
+--      ["You have destroyed %d of %d targets."] = "", -- Basic_Training_-_Bazooka
+--      ["You have destroyed %d of %d targets (+%d points)."] = "", -- Basic_Training_-_Sniper_Rifle
+--      ["You have dropped %d missiles."] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["You have failed to complete your task, young one!"] = "", -- A_Classic_Fairytale:journey
 --      ["You have failed to save the tribe!"] = "", -- A_Classic_Fairytale:backstab
 --      ["You have finally figured it out!"] = "", -- A_Classic_Fairytale:enemy
+--      ["You have finished the bazooka training!"] = "", -- Basic_Training_-_Bazooka
+--      ["You have finished the challenge!"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["You have finished the challenge in %.3f s."] = "", -- SpeedShoppa
+--      ["You have finished the target practice!"] = "", -- TargetPractice
+--      ["You have gained an achievement: %s"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["You have kidnapped our whole tribe!"] = "", -- A_Classic_Fairytale:enemy
 --      ["You have killed an innocent hedgehog!"] = "", -- A_Classic_Fairytale:backstab
+--      ["You have launched %d bazookas."] = "", -- Basic_Training_-_Bazooka
+--      ["You have launched %d homing bees."] = "", -- Target_Practice_-_Homing_Bee
+--      ["You have made %d shots."] = "", -- Basic_Training_-_Sniper_Rifle
+--      ["You haven't rescued anyone."] = "", -- User_Mission_-_That_Sinking_Feeling
+--      ["You have obtained an achievement: Lively Lifeguard"] = "", -- User_Mission_-_That_Sinking_Feeling
+--      ["You have perfectly beaten the challenge!"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["You have proven yourself worthy to see our most ancient secret!"] = "", -- A_Classic_Fairytale:first_blood
 --      ["You have proven yourselves worthy!"] = "", -- A_Classic_Fairytale:enemy
 --      ["You have SCORED!!"] = "",
+--      ["You have shot %d times."] = "", -- TargetPractice
+--      ["You have successfully finished the sniper rifle training!"] = "", -- Basic_Training_-_Sniper_Rifle
+--      ["You have thrown %d grenades."] = "", -- Target_Practice_-_Grenade_easy, Target_Practice_-_Grenade_hard
 --      ["You have to destroy 12 targets in 180 seconds"] = "", -- Basic_Training_-_Cluster_Bomb
+--      ["You have used only 1 RC plane. Outstanding!"] = "", -- User_Mission_-_RCPlane_Challenge
+--      ["You have used %d RC planes."] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["You have won the game by proving true cooperative skills!"] = "", -- A_Classic_Fairytale:enemy
 --      ["You just appeared out of thin air!"] = "", -- A_Classic_Fairytale:backstab
 --      ["You just committed suicide..."] = "", -- A_Classic_Fairytale:shadow
@@ -1122,13 +1253,17 @@
 --      ["You know...taking a stroll."] = "", -- A_Classic_Fairytale:backstab
 --      ["You know what? I don't even regret anything!"] = "", -- A_Classic_Fairytale:backstab
 --      ["You'll see what I mean!"] = "", -- A_Classic_Fairytale:enemy
+--      ["You lose!] = "", -- Basic_Training_-_Bazooka
 --      ["You may only attack from a rope!"] = "", -- WxW
 --      ["You may only spawn 5 crates per turn."] = "", -- Construction_Mode
 --      ["You may only use 1 Extra Time per turn."] = "", -- Construction_Mode
 --      ["You meatbags are pretty slow, you know!"] = "", -- A_Classic_Fairytale:enemy
 --      ["You might want to find a way to instantly kill arriving cannibals!"] = "", -- A_Classic_Fairytale:backstab
+--      ["You must survive the flood in order to score."] = "", -- User_Mission_-_That_Sinking_Feeling
 --      ["Young one, you are telling us that they can instantly change location without a shaman?"] = "", -- A_Classic_Fairytale:united
 --      ["You probably know what to do next..."] = "", -- A_Classic_Fairytale:first_blood
+--      ["Your accuracy was %.1f%%."] = "", -- Basic_Training_-_Bazooka
+--      ["Your accuracy was %.1f%% (+%d points)."] = "", -- TargetPractice
 --      ["Your deaths will be avenged, cannibals!"] = "", -- A_Classic_Fairytale:enemy
 --      ["Your death will not be in vain, Dense Cloud!"] = "", -- A_Classic_Fairytale:shadow
 --      ["You're...alive!? But we saw you die!"] = "", -- A_Classic_Fairytale:backstab
@@ -1138,9 +1273,12 @@
 --      ["You're pathetic! You are not worthy of my attention..."] = "", -- A_Classic_Fairytale:shadow
 --      ["You're probably wondering why I bought you back..."] = "", -- A_Classic_Fairytale:backstab
 --      ["You're terrorizing the forest...We won't catch anything like this!"] = "", -- A_Classic_Fairytale:shadow
+--      ["Your hedgehog died!"] = "", -- User_Mission_-_That_Sinking_Feeling
 --      ["Your hogs must survive!"] = "", -- A_Classic_Fairytale:journey
 --      ["Your movement skills will be evaluated now."] = "", -- A_Classic_Fairytale:first_blood
+--      ["Your rank: %s"] = "", -- User_Mission_-_RCPlane_Challenge
 --      ["You saved"] = "",
+--      ["You saved %d of 8 Hapless Hogs."] = "", -- User_Mission_-_That_Sinking_Feeling
 --      ["You've been assaulting us, we have been just defending ourselves!"] = "", -- A_Classic_Fairytale:enemy
 --      ["You've failed. Try again."] = "",
 --      ["You've reached the goal!| |Time: "] = "",
@@ -1149,6 +1287,8 @@
 --      ["You won't believe what happened to me!"] = "", -- A_Classic_Fairytale:backstab
 --      ["Yuck! I bet they'll keep worshipping her even after I save the village!"] = "", -- A_Classic_Fairytale:family
 --      ["Zealandia"] = "", -- Continental_supplies
+--      ["zombi"] = "", -- portal
+--      ["Zook"] = "", -- Target_Practice_-_Bazooka_easy, Target_Practice_-_Bazooka_hard
 --      ["'Zooka Team"] = "",
 --      ["Zork"] = "", -- A_Classic_Fairytale:dragon, A_Classic_Fairytale:family, A_Classic_Fairytale:queen
     }
--- a/share/hedgewars/Data/Locale/tips_de.xml	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/tips_de.xml	Mon Nov 09 18:37:57 2015 +0100
@@ -6,15 +6,15 @@
     <tip>Wähl einfach die selbe Farbe wie die eines Freundes aus, um gemeinsam als ein Klan zu spielen. Jeder von euch wird immer noch Kontrolle über seine eigenen Igel haben, aber sie werden gemeinsam siegen oder verlieren.</tip>
     <tip>Einige Waffen mögen zwar nur geringfügigen Schaden anrichten, aber sie können in der passenden Sitation verheerend sein. Versuche, die Desert Eagle zu benutzen, um mehrere Igel ins Wasser zu schubsen.</tip>
     <tip>Falls du dir unsicher darüber bist, was du tun sollst und du keine Munition verschwenden willst, überspring die Runde. Aber lass nicht zu viel Zeit verstreichen, weil irgendwann der Sudden Death kommt.</tip>
-    <tip>Willst du Seile sparen? Lass das Seil im Flug los und schieß erneut. Solange du den Boden nicht berührst oder ein Schuss daneben geht, wirst du dein Seil wiederverwenden, ohne Vorräte zu vergeuden.</tip>
-    <tip>Wenn du Andere davon abhalten willst, deinen Lieblingsspitznamen auf dem offiziellen Server zu benutzen, registiere ein Benutzerkonto auf http://www.hedgewars.org/.</tip>
+    <tip>Willst du Seile sparen? Lass das Seil im Flug los und schieß erneut. Solange du den Boden nicht berührst und kein Schuss daneben geht, wirst du dein Seil wiederverwenden, ohne Vorräte zu vergeuden.</tip>
+    <tip>Wenn du Andere davon abhalten willst, deinen Lieblingsspitznamen auf dem offiziellen Server zu benutzen, registiere ein Benutzerkonto auf <a href="http://www.hedgewars.org/">http://www.hedgewars.org/</a>.</tip>
     <tip>Bist du vom Standardspiel gelangweilt? Dann probier eine der Missionen aus – sie spielen sich anders, je nach dem, welche Mission du ausgewählt hast.</tip>
     <tip>Standardmäßig wird das Programm immer vom letzten Spiel eine Wiederholung abspeichern. Wähle »Auf einen einzelnen Computer spielen« und dann den »Aufgezeichnete Wiederholungen ansehen«-Knopf auf der rechten unteren Ecke, um sie abzuspielen oder zu verwalten.</tip>
     <tip>Hedgewars ist freie Open-Source-Software, die wir in unserer Freizeit erstellen. Falls du Probleme hast, frag uns in unseren Foren oder besuch unseren IRC-Channel!</tip>
     <tip>Hedgewars ist freie Open-Source-Software, die wir in unserer Freizeit erstellen. Wenn es dir gefällt, hilf uns mit einer kleinen Spende oder steuere deine eigenen Werke bei!</tip>
     <tip>Hedgewars ist freie Open-Source-Software, die wir in unserer Freizeit erstellen. Teile es mit deiner Famlie und deinen Freunden, wie es dir gefällt!</tip>
     <tip>Hedgewars ist freie Open-Source-Software, die wir in unserer Freizeit nur so zum Spaß erstellen. Triff die Entwickler auf <a href="irc://irc.freenode.net/hedgewars">#hedgewars</a>!</tip>
-    <tip>Von Zeit zu Zeit wird es offizielle Turniere geben. Bevorstehende Ereignisse werden auf http://www.hedgewars.org/ ein paar Tage im voraus angekündigt.</tip>
+    <tip>Von Zeit zu Zeit wird es offizielle Turniere geben. Bevorstehende Ereignisse werden auf <a href="http://www.hedgewars.org/">http://www.hedgewars.org/</a> ein paar Tage im Voraus angekündigt.</tip>
     <tip>Hedgewars ist in vielen Sprachen verfügbar. Wenn die Übersetzung deiner Sprache zu fehlen oder veraltet zu sein scheint, nimm ruhig mit uns Kontakt auf!</tip>
     <tip>Hedgewars läuft auf vielen verschiedenen Betriebssystemem, unter anderen Microsoft Windows, Mac OS X und GNU/Linux.</tip>
     <tip>Denk immer daran, dass du in der Lage bist, deine eigenen Spiele in lokalen Spielen und Netzwerkspielen aufzusetzen. Du musst nicht zwangsläufig nur einfache Spiele spielen.</tip>
@@ -30,7 +30,7 @@
     <tip>Hedgewars kann perfekt für kurze Spiele in Pausen sein. Stell nur sicher, dass du nicht zu viele Igel hinzufügst oder eine gigantische Karte benutzt. Das Verringern der Zeit und Anfangsgesundheit kann ebenfalls helfen.</tip>
     <tip>Bei der Erstellung dieses Spiels wurden keine Igel verletzt.</tip>
     <tip>Drei verschiedene Sprünge sind verfügbar. Drücke [Hochsprung] doppelt, um einen sehr hohen Rückwärtssprung zu machen.</tip>
-    <tip>Hast du Angst, von einer Klippe zu stürzen? Halte [Genau zielen], um dich nach [links] oder [rechts], ohne dich tatsächlich zu bewegen, umzudrehen.</tip>
+    <tip>Hast du Angst, von einer Klippe zu stürzen? Halte [Genaues Zielen], um dich nach [Links] oder [Rechts], ohne dich tatsächlich zu bewegen, umzudrehen.</tip>
     <tip>Ein paar Waffen erfordern besondere Strategien oder einfach nur sehr viel Training, also gib ein bestimmtes Werkzeug nicht auf, wenn du einen Gegner mal verfehlt haben solltest.</tip>
     <tip>Die meisten Waffen würden nicht funktionieren, sobald sie das Wasser berührt haben. Die zielsuchende Biene sowie der Kuchen sind Ausnahmen davon.</tip>
     <tip>Der alte Limburger verursacht nur eine kleine Explosion. Allerdings kann die vom Wind beeinflusste Stinkewolke viele Igel auf einmal vergiften.</tip>
@@ -48,6 +48,24 @@
     <tip>Halte deine Grafikkartentreiber auf dem neuesten Stand, um Probleme beim Spielen des Spiels zu vermeiden.</tip>
     <tip>Kopf oder Zahl? Gib »/rnd« in der Lobby ein und finde es heraus. »/rnd Schere Stein Papier« funktioniert auch!</tip>
     <tip>Du kannst Hedgewars-bezogene Dateien (Spielstände und Wiederholungen) mit dem Spiel assoziieren, um sie direkt von deinem Lieblingsdateiverwaltungsprogramm oder Webbrowser starten zu können.</tip>
+    <tip>Blindgängerminen sind nicht harmlos: Obwohl ihr Zeitzünder defekt ist, können sie immer noch explodieren, wenn ihnen zu stark zugerichtet wurde.</tip>
+    <tip>Liebe ist heiß! Benutze die Verführung, um eingefrorene Igel sofort aufzutauen.</tip>
+    <tip>Rauch, der aus einem Pulverfass aufsteigt, ist ein Hinweis darauf, dass es beschädigt wurde. In diesem Zustand kann auch geringfügiger Schaden das Fass sprengen.</tip>
+    <tip>Pulverfässer starten mit 60 Gesundheitspunkten und nehmen Schaden wie Igel, also muss ihnen schon etwas zugerichtet werden, um sie zu zerstören</tip>
+    <tip>Mehr Sprungkraft gefällig? Ändere die Sprungstärke von Granaten, Splittergranaten, alten Limburgern und Minen, während du [Genaues Zielen] gedrückt hälst und gleichzeitig eine der Zeitzündertasten drückst.</tip>
+    <tip>Hast du die Spielziele oder -regeln im Spiel vergessen? Drück die Pause- oder Verlassentaste, um sie wieder sichtbar zu machen!</tip>
+    <tip>Du kannst nicht nur Igel, sondern auch einige Gegenstände verprügeln, auspeitschen oder mit dem Hammer in den Boden stampfen. Hau alles zu Klump!</tip>
+    <tip>Wenn es nicht anders geschrieben steht, werden Minen normalerweise nach 3 Sekunden explodieren.</tip>
+    <tip>Im Königsmodus wird dein König gesünder, stärker und widerstandsfähiger gegenüber Schaden und Schubser sein als seine Untertanen.</tip>
+    <tip>Im Königsmodus wird der König nach jedem Zug Schaden nehmen, wenn er alleine im Team ist.</tip>
+    <tip>Die Peitsche kann auch Igel und Gegenstände hinter einer dünnen Wand treffen.</tip>
+    <tip>Der Schaden eines Hackebeils vergrößert sich mit der Fluggeschwindigkeit.</tip>
+    <tip>Du kannst Torten von Klippen fallen lassen, aber du musst schon sehr nahe am Rand stehen, also sei vorsichtig.</tip>
+    <tip>Benutze dein Seil, um andere Igel wegzuschubsen, zum Beispiel, indem du auf dem Boden rutschst. Diese Technik ist bekannt als »Seilschubsen«.</tip>
+    <tip>Bleib auf einem eisigen Abhang nicht still stehen, sonst wirst du wegrutschen. Alternativ kannst du [Genaues Zielen] gedrückt halten.</tip>
+    <tip>In den Ländern des Schnees und der Weihnacht wird der Schnee langsam und allmählich die Landschaft bedecken, es sei denn, das Land ist unzerstörbar.</tip>
+    <tip>Sei vorsichtig in den Ländern des Schnees und der Weihnacht, weil die Träger aus rutschigem Eis bestehen.</tip>
+    <tip>Die Rückzugszeit hängt ab von der Waffe, die du benutzt hast. Sei vorsichtig, einige Waffen haben keine Rückzugszeit und beenden deinen Zug sofort!</tip>
     <windows-only>
         <tip>Diese Hedgewars-Version unterstützt <a href="http://www.xfire.com/">Xfire</a>. Stell sicher, Hedgewars dessen Spielliste hinzuzufügen, damit deine Freunde dich beim Spielen sehen können.</tip>
         <tip>Du kannst deine Hedgewars-Einstellungsdateien unter »Eigene Dokumente\Hedgewars« finden. Erstelle Backups oder nimm die Dateien mit, aber bitte bearbeite sie nicht von Hand.</tip>
--- a/share/hedgewars/Data/Locale/tips_en.xml	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/tips_en.xml	Mon Nov 09 18:37:57 2015 +0100
@@ -3,59 +3,76 @@
      Tips between the platform specific tags are shown only on those platforms.
      Do not escape characters or use the CDATA tag. -->
 <tips>
-    <tip>Simply pick the same color as a friend to play together as a team. Each of you will still control his or her own hedgehogs but they'll win or lose together.</tip>
+    <tip>Simply pick the same color as a friend to play together as a clan. Each of you will still control his or her own hedgehogs but they’ll win or lose together.</tip>
     <tip>Some weapons might do only low damage but they can be a lot more devastating in the right situation. Try to use the Desert Eagle to knock multiple hedgehogs into the water.</tip>
-    <tip>If you're unsure what to do and don't want to waste ammo, skip one round. But don't let too much time pass as there will be Sudden Death!</tip>
-    <tip>Want to save ropes? Release the rope in mid air and then shoot again. As long as you don't touch the ground or miss a shot you'll reuse your rope without wasting ammo!</tip>
-    <tip>If you'd like to keep others from using your preferred nickname on the official server, register an account at http://www.hedgewars.org/.</tip>
-    <tip>You're bored of default gameplay? Try one of the missions - they'll offer different gameplay depending on the one you picked.</tip>
-    <tip>By default the game will always record the last game played as a demo. Select 'Local Game' and pick the 'Demos' button on the lower right corner to play or manage them.</tip>
-    <tip>Hedgewars is free software (Open Source) we create in our spare time. If you've got problems, ask on our forums or visit our IRC room!</tip>
-    <tip>Hedgewars is free software (Open Source) we create in our spare time. If you like it, help us with a small donation or contribute your own work!</tip>
+    <tip>If you’re unsure what to do and don’t want to waste ammo, skip one round. But don’t let too much time pass as there will be Sudden Death!</tip>
+    <tip>Want to save ropes? Release the rope in mid air and then shoot again. As long as you don’t touch the ground or miss a shot you’ll reuse your rope without wasting ammo!</tip>
+    <tip>If you’d like to keep others from using your preferred nickname on the official server, register an account at <a href="http://www.hedgewars.org/">http://www.hedgewars.org/</a>.</tip>
+    <tip>You're bored of default gameplay? Try one of the missions — they'll offer different gameplay depending on the one you picked.</tip>
+    <tip>By default the game will always record the last game played as a demo. Select “Local Game” and pick the “Demos” button on the lower right corner to play or manage them.</tip>
+    <tip>Hedgewars is free software (Open Source) we create in our spare time. If you’ve got problems, ask on our forums or visit our IRC room!</tip>
+    <tip>Hedgewars is free software (Open Source) we create in our spare time. If you like it, feel free to help us with a small donation or contribute your own work!</tip>
     <tip>Hedgewars is free software (Open Source) we create in our spare time. Share it with your family and friends as you like!</tip>
     <tip>Hedgewars is free software (Open Source) we create in our spare time, just for fun! Meet the devs in <a href="irc://irc.freenode.net/hedgewars">#hedgewars</a>!</tip>
-    <tip>From time to time there will be official tournaments. Upcoming events will be announced at http://www.hedgewars.org/ some days in advance.</tip>
+    <tip>From time to time there will be official tournaments. Upcoming events will be announced at <a href="http://www.hedgewars.org/">http://www.hedgewars.org/</a> some days in advance.</tip>
     <tip>Hedgewars is available in many languages. If the translation in your language seems to be missing or outdated, feel free to contact us!</tip>
     <tip>Hedgewars can be run on lots of different operating systems including Microsoft Windows, Mac OS X and GNU/Linux.</tip>
-    <tip>Always remember you're able to set up your own games in local and network/online play. You're not restricted to the 'Simple Game' option.</tip>
+    <tip>Always remember you’re able to set up your own games in local and network/online play. You’re not restricted to the “Simple Game” option.</tip>
     <tip>Connect one or more gamepads before starting the game to be able to assign their controls to your teams.</tip>
-    <tip>Create an account on <a href="http://www.hedgewars.org/">http://www.hedgewars.org/</a> to keep others from using your most favourite nickname while playing on the official server.</tip>
-    <tip>While playing you should give yourself a short break at least once an hour.</tip>
-    <tip>If your graphics card isn't able to provide hardware accelerated OpenGL, try to enable the low quality mode to improve performance.</tip>
-    <tip>If your graphics card isn't able to provide hardware accelerated OpenGL, try to update the associated drivers.</tip>
-    <tip>We're open to suggestions and constructive feedback. If you don't like something or got a great idea, let us know!</tip>
-    <tip>Especially while playing online be polite and always remember there might be some minors playing with or against you as well!</tip>
-    <tip>Special game modes such as 'Vampirism' or 'Karma' allow you to develop completely new tactics. Try them in a custom game!</tip>
-    <tip>You should never install Hedgewars on computers you don't own (school, university, work, etc.). Please ask the responsible person instead!</tip>
-    <tip>Hedgewars can be perfect for short games during breaks. Just ensure you don't add too many hedgehogs or use an huge map. Reducing time and health might help as well.</tip>
+    <tip>Consider giving yourself a short break at least once an hour to guard against strain from playing.</tip>
+    <tip>If your graphics card isn’t able to provide hardware accelerated OpenGL, try to enable the low quality mode to improve performance.</tip>
+    <tip>If your graphics card isn’t able to provide hardware accelerated OpenGL, try to update the associated drivers.</tip>
+    <tip>We’re open to suggestions and constructive feedback. If you don’t like something or got a great idea, let us know!</tip>
+    <tip>For your own benefit we'd like you to be polite and friendly while playing on our server. Also please keep in mind that some players are minors!</tip>
+    <tip>Special game modes such as “Vampirism” or “Karma” allow you to develop completely new tactics. Try them in a custom game!</tip>
+    <tip>Please don't install Hedgewars on computers you don’t own (school, university, work, etc.) unless you got permission. We don't want you to get into any trouble.</tip>
+    <tip>Hedgewars can be perfect for short games during breaks. Just ensure you don’t add too many hedgehogs or use an huge map. Reducing time and health might help as well.</tip>
     <tip>No hedgehogs were harmed in making this game.</tip>
     <tip>There are three different jumps available. Tap [high jump] twice to do a very high/backwards jump.</tip>
     <tip>Afraid of falling off a cliff? Hold down [precise] to turn [left] or [right] without actually moving.</tip>
-    <tip>Some weapons require special strategies or just lots of training, so don't give up on a particular tool if you miss an enemy once.</tip>
-    <tip>Most weapons won't work once they touch the water. The Homing Bee as well as the Cake are exceptions to this.</tip>
-    <tip>The Old Limbuger only causes a small explosion. However the wind affected smelly cloud can poison lots of hogs at once.</tip>
-    <tip>The Piano Strike is the most damaging air strike. You'll lose the hedgehog performing it, so there's a huge downside as well.</tip>
+    <tip>Some weapons require special strategies or just lots of training, so don’t give up on a particular tool if you miss an enemy once.</tip>
+    <tip>Most weapons won’t work once they touch the water. The Homing Bee as well as the Cake are exceptions to this.</tip>
+    <tip>The Old Limburger only causes a small explosion. However the wind affected smelly cloud can poison lots of hogs at once.</tip>
+    <tip>The Piano Strike is the most damaging air strike. You’ll lose the hedgehog performing it, so there’s a huge downside as well.</tip>
     <tip>The Homing Bee can be tricky to use. Its turn radius depends on its velocity, so try to not use full power.</tip>
-    <tip>Sticky Mines are a perfect tool to create small chain reactions knocking enemy hedgehogs into dire situations ... or water.</tip>
+    <tip>Sticky Mines are a perfect tool to create small chain reactions knocking enemy hedgehogs into dire situations … or water.</tip>
     <tip>The Hammer is most effective when used on bridges or girders. Hit hogs will just break through the ground.</tip>
-    <tip>If you're stuck behind an enemy hedgehog, use the Hammer to free yourself without getting damaged by an explosion.</tip>
-    <tip>The Cake's maximum walking distance depends on the ground it has to pass. Use [attack] to detonate it early.</tip>
+    <tip>If you’re stuck behind an enemy hedgehog, use the Hammer to free yourself without getting damaged by an explosion.</tip>
+    <tip>The Cake’s maximum walking distance depends on the ground it has to pass. Use [attack] to detonate it early.</tip>
     <tip>The Flame Thrower is a weapon but it can be used for tunnel digging as well.</tip>
     <tip>Use the Molotov or Flame Thrower to temporary keep hedgehogs from passing terrain such as tunnels or platforms.</tip>
-    <tip>Want to know who's behind the game? Click on the Hedgewars logo in the main menu to see the credits.</tip>
+    <tip>Want to know who’s behind the game? Click on the Hedgewars logo in the main menu to see the credits.</tip>
     <tip>Like Hedgewars? Become a fan on <a href="http://www.facebook.com/Hedgewars">Facebook</a> or follow us on <a href="http://twitter.com/hedgewars">Twitter</a></tip>
-    <tip>Feel free to draw your own graves, hats, flags or even maps and themes! But note that you'll have to share them somewhere to use them online.</tip>
+    <tip>Feel free to draw your own graves, hats, flags or even maps and themes! But note that you’ll have to share them somewhere to use them online.</tip>
     <tip>Keep your video card drivers up to date to avoid issues playing the game.</tip>
-    <tip>Heads or tails? Type '/rnd' in lobby and you'll find out. Also '/rnd rock paper scissors' works!</tip>
-    <tip>You're able to associate Hedgewars related files (savegames and demo recordings) with the game to launch them right from your favorite file or internet browser.</tip>
+    <tip>Heads or tails? Type “/rnd” in the lobby and you’ll find out. Also “/rnd rock paper scissors” works!</tip>
+    <tip>You’re able to associate Hedgewars related files (savegames and demo recordings) with the game to launch them right from your favorite file or web browser.</tip>
+    <tip>Dud mines are not harmless: Although their timer is broken, they can still explode if they took too much abuse!</tip>
+    <tip>Love is hot! Use Seduction to thaw frozen hedgehogs.</tip>
+    <tip>Smoke coming from a barrel is an indicator that it is low on “health” and even small amounts of damage might cause it to burst.</tip>
+    <tip>Barrels start with 60 health and take damage like hedgehogs, so they need some abuse until they explode.</tip>
+    <tip>Need more bounce power? Change the bounce strength of grenades, cluster bombs, old limburgers and mines while holding [precise] and pressing one of the timer keys.</tip>
+    <tip>Did you forget the goals or game modifiers inside the game? Hit the pause or quit key to review them again!</tip>
+    <tip>You can punch, whip and hammer other things than just hedgehogs. Hit them all!</tip>
+    <tip>If not mentioned otherwise, mines normally explode after 3 seconds.</tip>
+    <tip>In King Mode, your king will start out healthier, stronger and more resistant to damage and blows than the minions.</tip>
+    <tip>In King Mode, the king will take damage each turn when there are no minions left in the team.</tip>
+    <tip>The whip also hits hedgehogs and objects behind a thin wall.</tip>
+    <tip>A cleaver deals more damage the faster it’s moving.</tip>
+    <tip>You can drop cakes from cliffs, but you have to stand very close to the edge, so be careful.</tip>
+    <tip>Use your rope to push away other hedgehogs i.e. by sliding on the ground. This technique is known as “rope-knocking”.</tip>
+    <tip>Don’t stand still on an icy slope, or you will slip away. Alternatively, you can hold down [precise].</tip>
+    <tip>In the lands of Snow and Christmas, the snow piles up over time, unless the land is indestructible.</tip>
+    <tip>Be aware in lands of Snow and Christmas, because girders are made of slippery ice.</tip>
+    <tip>The retreat time depends on the weapon you used. Be careful, some weapons don’t have a retreat time and immediately end your turn!</tip>
     <windows-only>
-        <tip>The version of Hedgewars supports <a href="http://www.xfire.com">Xfire</a>. Make sure to add Hedgewars to its game list so your friends can see you playing.</tip>
-        <tip>You can find your Hedgewars configuration files under "My Documents\Hedgewars". Create backups or take the files with you, but don't edit them by hand.</tip>
+        <tip>This version of Hedgewars supports <a href="http://www.xfire.com">Xfire</a>. Make sure to add Hedgewars to its game list so your friends can see you playing.</tip>
+        <tip>You can find your Hedgewars configuration files under “My Documents\Hedgewars”. Create backups or take the files with you, but don’t edit them by hand.</tip>
     </windows-only>
     <mac-only>
-        <tip>You can find your Hedgewars configuration files under "Library/Application Support/Hedgewars" in your home directory. Create backups or take the files with you, but don't edit them by hand.</tip>
+        <tip>You can find your Hedgewars configuration files under “Library/Application Support/Hedgewars” in your home directory. Create backups or take the files with you, but don’t edit them by hand.</tip>
     </mac-only>
     <linux-only>
-        <tip>You can find your Hedgewars configuration files under ".hedgewars" in your home directory. Create backups or take the files with you, but don't edit them by hand.</tip>
+        <tip>You can find your Hedgewars configuration files under “.hedgewars” in your home directory. Create backups or take the files with you, but don’t edit them by hand.</tip>
     </linux-only>
 </tips>
--- a/share/hedgewars/Data/Locale/tips_it.xml	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Locale/tips_it.xml	Mon Nov 09 18:37:57 2015 +0100
@@ -6,52 +6,73 @@
     <tip>Scegli lo stesso colore di un amico per giocare in squadra. Ciascuno controllerà i propri ricci ma la vittoria o la sconfitta saranno comuni.</tip>
     <tip>Alcune armi potrebbero fare pochi danni ma possono essere devastanti se usate al momento giusto. Prova ad esempio ad utilizzare la Desert Eagle per spingere più ricci in acqua.</tip>
     <tip>Se non sai cosa fare e non vuoi sprecare munizioni, salta il turno. Ma non farlo troppe volte perché c'è il Sudden Death!</tip>
+    <tip>Vuoi utilizzare più a lungo la corda? Rilascia la corda a mezz'aria e spara di nuovo. Finché non tocchi il terreno potrai riusare la corda senza sprecare munizioni!</tip>
     <tip>Se vuoi evitare che altri possano impersonarti, utilizzando il tuo nickname, sul server ufficiale, registrati su http://www.hedgewars.org/.</tip>
     <tip>Sei stanco delle partite preimpostate? Prova una missione - le missioni offrono interessanti modalità differenti di partite in base alle tue scelte.</tip>
     <tip>Il gioco salverà sempre l'ultima partita giocata come demo. Seleziona 'Gioco locale' e clicca il bottone 'Demos' nell'angolo in basso a destra per gestirle.</tip>
-    <tip>Hedgewars è un programma Open Source e gratuito che noi creiamo nel nostro tempo libero. Se hai problemi, chiedi nei nostri forum ma, per favore, non aspettarti un supporto 24/7!</tip>
+    <tip>Hedgewars è un programma Open Source e gratuito che creiamo nel nostro tempo libero. Se hai problemi, chiedi nei nostri forum oppure visita il nostro canale IRC!</tip>
     <tip>Hedgewars è un programma Open Source e gratuito che creiamo nel nostro tempo libero. Se ti piace, aiutaci con una piccola donazione o contribuisci con il tuo lavoro!</tip>
-    <tip>Hedgewars è un programma Open Source e gratuito che creiamo nel nostro tempo libero. Condividilo con tutta la famiglia e e con gli amici come più ti piace!</tip>
-    <tip>Di tanto in tanto ci saranno tornei ufficiali. Gli eventi saranno annunciati su http://www.hedgewars.org/ con qualche giorno di anticipo.</tip>
+    <tip>Hedgewars è un programma Open Source e gratuito che creiamo nel nostro tempo libero. Condividilo con tutta la famiglia e con gli amici come più ti piace!</tip>
+    <tip>Hedgewars è un programma Open Source e gratuito che creiamo nel nostro tempo libero. Incontra gli sviluppatori sul canale <a href="irc://irc.freenode.net/hedgewars">#hedgewars</a>!</tip>
+    <tip>Di tanto in tanto ci saranno tornei ufficiali. Gli eventi saranno annunciati su <a href="http://www.hedgewars.org/">http://www.hedgewars.org/</a> con qualche giorno di anticipo.</tip>
     <tip>Hedgewars è disponibile in molte lingue. Se la traduzione nella tua lingua sembra mancante o non aggiornata, sentiti libero di contattaci!</tip>
-    <tip>Hedgewars può essere usato su molti sistemi operativi differenti come Microsoft Windows - XP, Vista, 7 -, Mac OS X e Linux.</tip>
+    <tip>Hedgewars può essere usato su molti sistemi operativi differenti come Microsoft Windows, Mac OS X e GNU/Linux.</tip>
     <tip>Ricordati che sei sempre in grado di configurare partire personalizzate in locale e online. Non devi sentirti limitato alle opzioni predefinite!</tip>
-    <tip>Durante il gioco dovresti fare una breve pausa almeno ogni ora. In caso di partite più lunghe, sospendi l'attività per almeno 30 minuti al termine del gioco!</tip>
+    <tip>Collega uno o più gamepad prima di iniziare il gioco per poterli assegnare alle tue squadra.</tip>
+    <tip>Durante il gioco dovresti fare una breve pausa almeno ogni ora per evitare la stanchezza da gioco eccessivo.</tip>
     <tip>Se la tua scheda grafica non è in grado di fornire OpenGL con accelerazione hardware, prova ad abilitare la modalità a bassa qualità per migliorare le prestazioni.</tip>
+    <tip>Se la tua scheda grafica non è in grado di fornire OpenGL con accelerazione hardware, prova ad aggiornarne i driver.</tip>
     <tip>Siamo aperti a suggerimenti e consigli costruttivi. Se non ti piace qualcosa o hai una buona idea, comunicacelo!</tip>
     <tip>In particolare quando giochi online sii educato e ricorda che potrebbero esserci dei minorenni che stanno giocando con te o contro di te!</tip>
-    <tip>Le modalità di gioco speciali, come 'Vampirismo' o 'Karma' ti permettono di sviluppare nuove tattiche. Provale in una partita personalizzata!</tip>
+    <tip>Le modalità di gioco speciali, come “Vampirismo” o “Karma” ti permettono di sviluppare nuove tattiche. Provale in una partita personalizzata!</tip>
     <tip>Non dovresti mai installare Hedgewars su computer che non possiedi (scuola, università, lavoro, ecc.). Per favore, chiedi ai responsabili!</tip>
     <tip>Hedgewars può essere perfetto per brevi partite durante le pause. Assicurati solamente di non aver aggiunto troppi ricci o di usare una mappa troppo grande. Ridurre tempo e vita può aiutare allo stesso modo.</tip>
     <tip>Nessun riccio è stato maltrattato durante lo sviluppo di questo gioco.</tip>
-    <tip>Hedgewars è un programma Open Source e gratuito che creiamo nel nostro tempo libero. Se qualcuno ti ha venduto il gioco, dovresti chiedere un rimborso!</tip>
-    <tip>Collega uno o più gamepad prima di iniziare il gioco per poterli assegnare alle tue squadra.</tip>
-    <tip>Crea un account su %1 per evitare che altri possano usare il tuo nickname preferito mentre giochi sul server ufficiale.</tip>
-    <tip>Se la tua scheda grafica non è in grado di fornire OpenGL con accelerazione hardware, prova ad aggiornarne i driver.</tip>
-    <tip>Ci sono tre salti disponibili. Premi [salto in alto] due volte per eseguire un salto in alto all'indietro.</tip>
+    <tip>Ci sono tre tipi di salto disponibili. Premi [salto in alto] due volte per eseguire un salto in alto all'indietro.</tip>
     <tip>Paura di cadere da un dirupo? Premi [mirino di precisione] per girare a [sinistra] o a [destra] senza muoverti.</tip>
     <tip>Alcune armi richiedono strategie particolari o semplicemente molto allenamento, quindi non arrenderti nell'utilizzo di un'arma specifica se manchi il nemico una volta.</tip>
     <tip>Molte armi non funzionano quando toccano l'acqua. L'Ape a Ricerca così come la Torta sono delle eccezioni.</tip>
     <tip>Il vecchio Limburger causa solo una piccola esplosione. Tuttavia il vento influisce sulla nuvola puzzolente e può avvelenare più ricci contemporaneamente.</tip>
-    <tip>L'Ultima Sonata è l'attacco aereo più dannoso. Perderai il tuo riccio, eseguendolo, quindi ci sono anche delle grosse controindicazioni.</tip>
-    <tip>Le Mine Adesive sono lo strumento perfetto per creare piccole reazioni a catena e spingere i ricci nemici in situazioni difficili... o in acqua.</tip>
+    <tip>L'Ultima Sonata è l'attacco aereo più dannoso. Perderai il tuo riccio, eseguendolo, quindi c'è anche una grossa controindicazione.</tip>
+    <tip>L'Ape a Ricerca può essere difficile da usare. Il suo raggio di curvatura dipende dalla sua velocità, quindi cerca di non usarla a piena potenza.</tip>
+    <tip>Le Mine Adesive sono lo strumento perfetto per creare piccole reazioni a catena e spingere i ricci nemici in situazioni difficili … o in acqua.</tip>
     <tip>Il Martello è più efficate se usato su ponti o travi. Colpire i ricci li farà sprofondare attraverso il terreno.</tip>
     <tip>Se sei bloccato dietro un riccio nemico, usa il Martello per liberarti senza essere danneggiato da un'esplosione.</tip>
     <tip>La distanza massima di cammino della Torta dipende dal terreno che deve attraversare. Usa [attacca] per farla esplodere prima.</tip>
     <tip>Il Lanciafiamme è un'arma che può essere usata anche per scavare gallerie.</tip>
+    <tip>Usa la Bomba Molotov o il Lanciafiamme per impedire temporaneamente ai ricci di attraversare terreni pianeggianti, tunnel o collinette.</tip>
     <tip>Vuoi sapere chi c'è dietro il gioco? Clicca sul logo Hedgewars nel menu principale per vederne gli autori e sviluppatori.</tip>
-    <tip>Ti piace Hedgewars? Diventa fan su %1 o seguici su %2!</tip>
-    <tip>Sentiti libero di disegnare tombe, cappelli, bandiere o anche mappe e temi personalizzati - lo puoi fare con TheGIMP! Ma nota che dovrai condividerli in qualche modo per usarli online.</tip>
-    <tip>Vuoi proprio un cappello specifico? Facci una piccola donazione e riceverai un cappello esclusivo a tua scelta!</tip>
+    <tip>Ti piace Hedgewars? Diventa fan su <a href="http://www.facebook.com/Hedgewars">Facebook</a> oppure seguici su <a href="http://twitter.com/hedgewars">Twitter</a></tip>
+    <tip>Sentiti libero di disegnare tombe, cappelli, bandiere o anche mappe e temi personalizzati! Ma nota che dovrai condividerli in qualche modo per usarli online.</tip>
     <tip>Mantieni aggiornati i driver della tua scheda video, per evitare problemi durante il gioco.</tip>
-    <tip>Puoi trovare i file di configurazione del gioco in "Documenti\Hedgewars". Crea delle copie di sicurezza o prendi i file con te, ma non modificarli manualmente!</tip>
-    <tip>Puoi associare i file relativi a Hedgewars (partite salvate e registrazioni demo) al gioco, in modo da lanciarli direttamente dal tuo gestore file o browser Internet.</tip>
-    <tip>Vuoi utilizzare più a lungo la corda? Rilascia la corda a mezz'aria e spara di nuovo. Finché non tocchi il terreno potrai riusare la corda senza sprecare munizioni!</tip>
-    <tip>Puoi trovare i file di configurazione del gioco in "Library/Application Support/Hedgewars" nella tua cartella utente. Crea una copia di sicurezza o porta i file con te, ma non modificarli mai manualmente.</tip>
-    <tip>Puoi trovare i file di configurazione del gioco in ".hedgewars" nella tua cartella home. Crea una copia di sicurezza o porta i file con te, ma non modificarli mai manualmente.</tip>
-    <tip>Usa la Bomba Molotov o il Lanciafiamme per impedire temporaneamente ai ricci di attraversari terreni pianeggianti, tunnel o collinette.</tip>
-    <tip>L'Ape a Ricerca può essere difficile da usare. Il suo raggio di curvatura dipende dalla sua velocità, quindi cerca di non usarla a piena potenza.</tip>
+    <tip>Testa o croce? Scrivi “/rnd” nella schermata LOBBY e lo scoprirai. Funziona anche “/rnd carta sasso forbice”!</tip>
+    <tip>Puoi associare i file relativi a Hedgewars (partite salvate e registrazioni demo) al gioco, in modo da lanciarli direttamente dal tuo gestore file o browser web.</tip>
+    <tip>Le mine Dud non sono innocue: Anche se il loro timer è rotto, possono ancora esplodere se vengono abusate troppo!</tip>
+    <tip>L'amore è caldo! Utilizza Seduzione per scongelare ricci congelati.</Tip>
+    <tip>Il fumo proveniente da un barile è un indicatore che è basso di “salute” e che anche piccole quantità di danno potrebbe farlo scoppiare.</tip>
+    <tip>I barili iniziano con 60 salute e subiscono danni come ricci, quindi hanno bisogno di un po' di danno per esplodere</tip>
+    <tip>Hai bisogno di più forza di rimbalzo? Modifica la forza di rimbalzo di granate, bombe a grappolo, vecchi limburgers e mine tenendo premuto [mirino di precisione] e premendo uno dei tasti del timer.</tip>
+    <tip>Hai dimenticato gli obiettivi o modificatori di gioco mentre stai giocando? Premi il pulsante pausa o esci per rivederli di nuovo!</tip>
+    <tip>Puoi prendere a pugni, frustare, e martellare anche altre cose e non solo ricci. Colpiscili tutti!</tip>
+    <tip> Se non menzionato altrimenti, le mine normalmente esplodono dopo 3 secondi.</tip>
+    <tip>In modalità Re, il tuo re partirà più sano, più forte e più resistente ai danni e colpi rispetto ai servi.</tip>
+    <tip>In modalità Re, il re si danneggerà in ogni turno quando non ci saranno più servi nella sua squadra.</tip>
+    <tip>La frusta colpisce anche i ricci e gli oggetti anche dietro una parete sottile.</tip>
+    <tip>La mannaia aumenta il danno con l'aumentare della velocità.</tip>
+    <tip>Puoi far cadere torte dalle scogliere, ma per farlo bisogna stare molto vicino al bordo, quindi stai attento.</tip>
+    <tip>Usa la tua corda per allontanare altri ricci ad esempio facendola scorrere sul terreno. Questa tecnica è nota come “rope-knocking”.</tip>
+    <tip>Non fermarti su un pendio ghiacciato, o scivolerai via. In alternativa, è possibile tenere premuto [mirino di precisione].</tip>
+    <tip>Nelle terre innevate Natalizie, i mucchi di neve aumentano nel corso del tempo, a meno che la terra non sia indistruttibile.</tip>
+    <tip>Fai attenzione nelle terre innevate e Natalizie, perché le travi sono fatte di ghiaccio scivoloso.</tip>
+    <tip>Il tempo di fuga dipende dall'arma che hai usato. Fai attenzione, alcune armi non hanno un tempo di fuga e finiscono subito il tuo turno!</tip>
     <windows-only>
-        <tip>La versione Windows di Hedgewars supporta Xfire. Assicurati di aggiungere Hedgewars alla sua lista giochi, così i tuoi amici potranno vederti giocare.</tip>
+        <tip>Questa versione di Hedgewars supporta <a href="http://www.xfire.com">Xfire</a>. Assicurati di aggiungere Hedgewars alla sua lista giochi, cosi i tuoi amici potranno vederti giocare.</tip>
+        <tip>Puoi trovare i file di configurazione di Hedgewars in “My Documents\Hedgewars”. Crea una copia di sicurezza o porta i file con te, ma non modificarli mai manualmente.</tip>
     </windows-only>
+    <mac-only>
+        <tip>Puoi trovare i file di configurazione di Hedgewars in “Library/Application Support/Hedgewars” nella tua cartella utente. Crea una copia di sicurezza o porta i file con te, ma non modificarli mai manualmente.</tip>
+    </mac-only>
+    <linux-only>
+        <tip>Puoi trovare i file di configurazione di Hedgewars in “.hedgewars” nella tua cartella utente. Crea una copia di sicurezza o porta i file con te, ma non modificarli mai manualmente.</tip>
+    </linux-only>
 </tips>
--- a/share/hedgewars/Data/Maps/Basketball/map.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Maps/Basketball/map.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -54,3 +54,7 @@
 		end
 	end
 end
+
+function onNewTurn()
+    SetWeapon(amBaseballBat)
+end
--- a/share/hedgewars/Data/Maps/ClimbHome/map.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Maps/ClimbHome/map.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -88,9 +88,7 @@
         dummyHog = AddHog(" ", 0, 1, "NoHat")
         HH[dummyHog] = nil
         totalHedgehogs = totalHedgehogs - 1
-        if not showWaterStats then
-            SendStat(siClanHealth, tostring(32640), " ")
-        end
+        teams[GetHogTeamName(dummyHog)] = nil
         SendStat(siClanHealth, tostring(32640), " ")
     end
 end
@@ -112,6 +110,8 @@
     elseif gear == Cake then
         Cake = nil
     elseif GetGearType(gear) == gtHedgehog then
+	onGameTick20()
+	onGearDamage(gear, 0)
         HH[gear] = nil
     end
 end
@@ -595,6 +595,7 @@
     else
         SendStat(siCustomAchievement, string.format(text, RecordHeightHogName))
     end
+    SendStat(siPointType, loc("points"))
     SendStat(siPlayerKills, actualHeight, loc(GetHogTeamName(CurrentHedgehog)))
     EndGame()
 end
@@ -629,7 +630,7 @@
     SendStat(siGraphTitle, string.format(loc("Team’s best heights per round")))
     
     if winner.score < 1500 then
-        SendStat(siCustomAchievement, string.format(loc("This round’s award for ulitmate disappointment goes to: Everyone!")))
+        SendStat(siCustomAchievement, string.format(loc("This round’s award for ultimate disappointment goes to: Everyone!")))
     else
         if winner.score > 30000 then text = loc("%s (%s) reached for the sky and beyond with a height of %d!")
         elseif winner.score > 24750 then text = loc("%s (%s) was certainly not afraid of heights: Peak height of %d!")
--- a/share/hedgewars/Data/Maps/Control/map.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Maps/Control/map.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -369,7 +369,7 @@
 		--AddCaption(zz) -- number of times it took to work
 	end
 
-	ShowMission("CONTROL", 
+	ShowMission(loc("CONTROL"), 
 	"", 
 	loc("Control pillars to score points.") .. "|" .. 
 	loc("Goal") .. ": " .. pointLimit .. " " .. loc("points"), 0, 0)
@@ -418,7 +418,7 @@
 				end
 			end
 			
-			ShowMission("CONTROL", 
+			ShowMission(loc("CONTROL"), 
 			loc("Team Scores") .. ":", 
 			totalComment, 0, 1600)
 	
--- a/share/hedgewars/Data/Maps/Knockball/map.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Maps/Knockball/map.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -68,3 +68,7 @@
 		end
 	end
 end
+
+function onNewTurn()
+    SetWeapon(amBaseballBat)
+end
Binary file share/hedgewars/Data/Maps/ShoppaKing/map.png has changed
Binary file share/hedgewars/Data/Maps/ShoppaKing/map.xcf has changed
--- a/share/hedgewars/Data/Maps/TrophyRace/map.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Maps/TrophyRace/map.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -33,6 +33,7 @@
 local worsthog = nil
 
 local besthog = nil
+local besthogname = ''
 
 -- best time
 local besttime = maxtime + 1
@@ -78,7 +79,8 @@
         SetHealth(CurrentHedgehog, 0)
         SetEffect(CurrentHedgehog, heInvulnerable, 0)
         x, y = GetGearPosition(CurrentHedgehog)
-        AddGear(x, y, gtShell, 0, 0, 0, 0)
+        AddGear(x, y-2, gtGrenade, 0, 0, 0, 2)
+        SetGearVelocity(CurrentHedgehog, 0, 0)
         worsttime = 99999
         worsthog = nil
         lasthog = nil
@@ -141,6 +143,7 @@
             if ttime < besttime then
                 besttime = ttime
                 besthog = CurrentHedgehog
+                besthogname = GetHogName(besthog)
                 hscore = hscore .. loc("NEW fastest lap: ")
             else
                 hscore = hscore .. loc("Fastest lap: ")
@@ -149,7 +152,7 @@
                 worsttime = ttime
                 worsthog = CurrentHedgehog
             end
-            hscore = hscore .. GetHogName(besthog) .. " - " .. (besttime / 1000) .. " s | |" .. loc("Best laps per team: ")
+            hscore = hscore .. besthogname .. " - " .. (besttime / 1000) .. " s | |" .. loc("Best laps per team: ")
             
             if clan == ClansCount -1 then
                 -- Time for elimination - worst hog is out and the worst hog vars are reset.
Binary file share/hedgewars/Data/Maps/TrophyRace/map.png has changed
Binary file share/hedgewars/Data/Maps/TrophyRace/map.xcf has changed
Binary file share/hedgewars/Data/Maps/portal/mask.png has changed
--- a/share/hedgewars/Data/Missions/Campaign/01#Boot_Camp.lua	Sun Apr 26 13:02:38 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,357 +0,0 @@
--- IMPORTANT -- THIS IS WORK IN PROGRESS AND VERY LIKELY TO BE CHANGED AGAIN
--- IMPORTANT -- DO NOT TRANSLATE THIS AS IT USES THE OLD SYSTEM AND WILL BE UPDATED LATER!
-
-local teamnames = {}
-local hognames = {}
-teamnames[0] = {
-	["en"] = "Bloody Rookies",
-	["de"] = "Blutige Anfänger",
-	["pl"] = "Żótodzioby",
-	["sv"] = "Blodiga nybörjare",
-	["es"] = "Reclutas",
-	["pt_PT"] = "Recrutas",
-	["pt_BR"] = "Malditos Recrutas",
-	["sk"] = "Regruti"
-}
-
-teamnames[1] = {
-	["en"] = "Instructors",
-	["de"] = "Ausbilder",
-	["pl"] = "Instruktor",
-	["sv"] = "Instruktör",
-	["es"] = "Instructores",
-	["pt_PT"] = "Instrutores",
-	["pt_BR"] = "Instrutores",
-	["sk"] = "Inštruktori"
-}
-
-hognames[0] = {
-	["en"] = "Joker",
-	["de"] = "Joker",
-	["pl"] = "Joker",
-	["sv"] = "Joker",
-	["es"] = "Joker",
-	["pt_PT"] = "Joker",
-	["pt_BR"] = "Comediante",
-	["sk"] = "Komediant"
-}
-
-hognames[1] = {
-	["en"] = "Harthog",
-	["de"] = "Harthog",
-	["pl"] = "Harthog",
-	["sv"] = "Harthog",
-	["es"] = "Harthog",
-	["pt_PT"] = "Harthog",
-	["pt_BR"] = "Harthog",
-	["sk"] = "Harthog"
-}
-
-local caption = {
-	["en"] = "Boot Camp",
-	["de"] = "Grundausbildung",
-	["pl"] = "Poligon",
-	["sv"] = "Grundutbildning",
-	["es"] = "Campamento militar",
-	["pt_PT"] = "Acampamento militar",
-	["pt_BR"] = "Acampamento Militar",
-	["sk"] = "Výcvikový tábor"
-
-}
-
-local subcaption = {
-	["en"] = "Follow the instructions!",
-	["de"] = "Befolge die Anweisungen!",
-	["pl"] = "Wykonuj polecenia!",
-	["sv"] = "Följ instruktioner!",
-	["es"] = "¡Sigue las órdenes!",
-	["pt_PT"] = "Segue as instruções!",
-	["pt_BR"] = "Siga as ordens!",
-	["sk"] = "Postupujte podľa inštrukcií!"
-}
-
-local goals = {}
-
-goals[0] = {
-	["en"] = "Listen to your Drill Instructor and follow his lead!",
-	["de"] = "Höre deinem Ausbilder zu und befolge seine Anweisungen!",
-	["pl"] = "Słuchaj instruktora i wykonuj jego rozkazy!",
-	["sv"] = "Lyssna på din instruktör och gör som han säger!",
-	["es"] = "¡Escucha atentamente a tu instructor de maniobras y sigue sus órdenes!",
-	["pt_PT"] = "Ouve atentamente o teu Instrutor e segue as suas ordens!",
-	["pt_BR"] = "Escute seu instrutor de escavação e siga seu líder",
-	["sk"] = "Počúvajte vášho inštruktora výcviku a vykonávajte jeho rozkazy!"
-}
-
-goals[1] = {
-	["en"] = "Destroy the target to finish this mission!",
-	["de"] = "Zerstöre das Ziel, um diese Mission abzuschließen!",
-	["pl"] = "Zniszcz cel by ukończyć misję!",
-	["sv"] = "Förstör målet för att avklara uppdraget!",
-	["es"] = "¡Destruye el objetivo para completar esta misión!",
-	["pt_PT"] = "Destrói o alvo para completar esta missão!",
-	["pt_BR"] = "Destrua o alvo para concluir a missão",
-	["sk"] = "Pre ukončenie misie zneškodnite cieľ!"
-}
-
-goals[2] = {
-	["en"] = "Excellent! You've passed the Boot Camp!",
-	["de"] = "Ausgezeichnet! Du hast das Ausbildungslager bestanden!",
-	["pl"] = "Doskonale! Wyszedłeś cało z poligonu!",
-	["sv"] = "Brilliant! Du har klarat av grundutbildningen!",
-	["es"] = "¡Excelente! ¡Has completado la maniobra de hoy!",
-	["pt_PT"] = "Excelente! Completaste o treino para recrutas!",
-	["pt_BR"] = "Excelente! Você completou a manobra",
-	["pt_BR"] = "Výborne! Prešli ste výcvikovým táborom!"
-}
-
-local failed = {
-	["en"] = "You failed! Follow the instructions and shoot the target only!",
-	["de"] = "Du hast versagt! Befolge die Anweisungen und schieß nur auf das Ziel!",
-	["pl"] = "Przegrałeś! Wykonuj instrukcje poprawnie i strzelaj tylko w podane cele!",
-	["sv"] = "Du har misslyckats! Följ instruktionerna och sjut endast på målen!",
-	["es"] = "¡Has fallado! ¡Sigue las instrucciones y destruye únicamente el objetivo!",
-	["pt_PT"] = "Falhaste! Segue as instruções e destrói apenas o alvo!",
-	["pt_BR"] = "Você falhou! Siga as instruções e atire somente no alvo",
-	["sk"] = "Prehrali ste! Nasledujte inštrukcie a strieľajte iba na cieľ!"
-}
-
-local drill = {}
-
-drill[0] = {
-	["en"] = "Allright, maggot!",
-	["de"] = "Also gut, du Made!",
-	["pl"] = "Słuchaj mnie gnido!",
-	["sv"] = "Dåså, din mask!",
-	["es"] = "¡Muy bien, escoria!",
-	["pt_PT"] = "Bom trabalho verme!",
-	["pt_BR"] = "Parabéns escória",
-	["sk"] = "Počúvaj, ty červík!"
-}
-
-drill[1] = {
-	["en"] = "Show that you aren't that useless.",
-	["de"] = "Zeig, dass du nicht so nutzlos bist.",
-	["pl"] = "Udowodnij, że nie jesteś bezwartościowy.",
-	["sv"] = "Visa att du inte är så värdelös!",
-	["es"] = "Demuéstrame que no eres tan inútil como pareces.",
-	["pt_PT"] = "Prova-me que não és tão inútil como pareces.",
-	["pt_BR"] = "Mostre que você não é um inútil.",
-	["sk"] = "Dokáž, že nie si na svete úplne zbytočným."
-}
-
-drill[2] = {
-	["en"] = "Use [left] to move to the left!",
-	["de"] = "Benutze [Links], um nach links zu gehen!",
-	["pl"] = "Użyj [lewo] by poruszyć się w lewą stronę!",
-	["sv"] = "Använd [vänster] för att gå åt vänster!",
-	["es"] = "¡Aprieta [izquierda] para desplazarte a la izquierda!",
-	["pt_PT"] = "Carrega [esquerda] para te moveres para a esquerda!",
-	["pt_BR"] = "Use [esquerda] para mover para a esquerda",
-	["sk"] = "Stlačte [vľavo] pre pohyb doľava"
-}
-
-drill[3] = {
-	["en"] = "Good! Now use [right] to come back!",
-	["de"] = "Gut! Nun komm mit [Rechts] zurück!",
-	["pl"] = "Dobzre, Teraz użyj [prawo] by wrócić!",
-	["sv"] = "Bra! Använd nu [höger] för att gå tillbaka!",
-	["es"] = "¡Muy bien! ¡Ahora presiona [derecha] para volver!",
-	["pt_PT"] = "Muito bem! Agora pressiona [direita] para voltar!",
-	["pt_BR"] = "Bom! Agora use [direita] para voltar",
-	["sk"] = "Dobre! Teraz použite [vpravo] a vráťte sa naspäť!"
-}
-
-drill[4] = {
-	["en"] = "Excellent!",
-	["de"] = "Ausgezeichnet!",
-	["pl"] = "Wspaniale!",
-	["sv"] = "Utmärkt!",
-	["es"] = "¡Excelente!",
-	["pt_PT"] = "Excelente!",
-	["pt_BR"] = "Excelente!",
-	["sk"] = "Výborne!"
-}
-
-drill[5] = {
-	["en"] = "Now jump to the left using [return]!",
-	["de"] = "Jetzt springe mit [Eingabetaste] nach links!",
-	["pl"] = "Teraz skocz w lewo używając [Enter]",
-	["sv"] = "Hoppa nu åt vänster med hjälp av [enter]!",
-	["es"] = "¡Ahora salta hacia la izquierda usando [intro]!",
-	["pt_PT"] = "Agora salta para a esquerda pressionando [retrocesso]!",
-	["pt_BR"] = "Agora pule para a esquerda usando [return]!",
-	["sk"] = "Teraz skočte doľava stlačením [enter]!"
-}
-
-drill[6] = {
-	["en"] = "Use [up] and [down] to aim.",
-	["de"] = "Benutze [Hoch] und [Runter], um zu zielen.",
-	["pl"] = "Użyj klawiszy [góra] i [dół] by celować.",
-	["sv"] = "Använd [upp] och [ner] för att sikta!",
-	["es"] = "Presiora [arriba] y [abajo] para apuntar.",
-	["pt_PT"] = "Pressiona [cima] e [baixo] para apontar.",
-	["pt_BR"] = "Pressione [acima] e [abaixo] para mirar.",
-	["sk"] = "Stlačte [hore] a [dole] pre mierenie."
-}
-
-drill[7] = {
-	["en"] = "Hold [space] to power up your shot and then release it to shoot.",
-	["de"] = "Halte [Leertaste], um deinen Schuss aufzuladen, und lasse dann rechtzeitig los.",
-	["pl"] = "Przytrzymaj spację by zwiększyć siłę strzału.",
-	["sv"] = "Håll ner [mellanslag] för att få kraft och släpp för att skjuta!",
-	["es"] = "Mantén presionada la [barra espaciadora] para controlar la fuerza del disparo y suéltala para disparar.",
-	["pt_PT"] = "Mantem a [barra de espaços] pressionada para controlar a força do tiro e larga-a para disparar.",
-	["pt_BR"] = "Mantenha pressionado [espaço] para aumentar a força do seu tiro e solte para atirar",
-	["sk"] = "Držte stlačený [medzerník] pre nabíjanie, jeho uvoľnením vystrelíte."
-}
-
-drill[8] = {
-	["en"] = "Destroy the target to finish your basic training!",
-	["de"] = "Zerstöre das Ziel, um deine Grundausbildung abzuschließen!",
-	["pl"] = "Zniszcz cel by by ukończyć trening podstawowy!",
-	["sv"] = "Förstör målet för att avsluta din grundutbildning!",
-	["es"] = "¡Destruye el objetivo para completar el entrenamiento básico!",
-	["pt_PT"] = "Destrói o alvo para completar o treino básico!",
-	["pt_BR"] = "Destrua o alvo para terminar o treino básico",
-	["sk"] = "Zneškodnite cieľ na ukončenie základného výcviku!"
-}
-
-local function loc(text)
-	if text == nil then return "**missing**"
-	elseif text[L] == nil then return text["en"]
-	else return text[L]
-	end
-end
-
-local player = nil
-local instructor = nil
-local target = nil
-
-function onGameStart()
-
-end
-
-local player_start_x = 2300
-local player_start_y = 1250
-local target_x = 1900
-local target_y = 1250
-local player_health = 100
-local instructor_health = 100
-local teamcolor = 14483456
-
-local progress = 0
-local time_start = 0
-
-function onGameTick()
-	if progress == -1 and (time_start + 2500) == GameTime then
-		EndGame()
-	elseif progress == -1 then
-		
-	elseif progress > 0 and ((TurnTimeLeft == 0) or (GetHealth(player) ~= player_health) or (GetHealth(instructor) ~= instructor_health)) then
-		progress = -1
-		ShowMission(loc(caption), loc(subcaption), loc(failed), -amBazooka, 0)
-		time_start = GameTime
-		PlaySound(sndNooo)
-		TurnTimeLeft = 0
-	elseif GameTime == 0 then
-		ShowMission(loc(caption), loc(subcaption), loc(goals[0]), -amBazooka, 0)
-		TurnTimeLeft = 60000
-	elseif GameTime == 2500 then
-		FollowGear(instructor)
-		HogSay(instructor, loc(drill[0]), SAY_SAY)
-	elseif GameTime == 5000 then
-		FollowGear(instructor)
-		HogSay(instructor, loc(drill[1]), SAY_SAY)
-	elseif GameTime == 7500 then
-		FollowGear(instructor)
-		HogSay(instructor, loc(drill[2]), SAY_SHOUT)
-		progress = 1
-		TurnTimeLeft = 10000
-	elseif progress == 1 then
-		local x, y = GetGearPosition(player)
-		if x < player_start_x - 50 then
-			progress = 2
-			FollowGear(instructor)
-			HogSay(instructor, loc(drill[3]), SAY_SHOUT)
-			TurnTimeLeft = 10000
-		end
-	elseif progress == 2 then
-		local x, y = GetGearPosition(player)
-		if x > player_start_x then
-			progress = 3
-			FollowGear(instructor)
-			HogSay(instructor, loc(drill[4]), SAY_SAY)
-			time_start = GameTime
-		end
-	elseif progress == 3 and (time_start + 2500 == GameTime) then
-		progress = 4
-		FollowGear(instructor)
-		HogSay(instructor, loc(drill[5]), SAY_SHOUT)
-		HogTurnLeft(player, true)
-		TurnTimeLeft = 10000
-	elseif progress == 4 then
-		local x, y = GetGearPosition(player)
-		if y < player_start_y then
-			progress = 5
-			FollowGear(instructor)
-			HogSay(instructor, "Yeah!", SAY_SAY)
-			time_start = GameTime
-			TurnTimeLeft = 30000
-		end
-	elseif progress == 5 and (time_start + 2500 == GameTime) then
-		FollowGear(instructor)
-		HogSay(instructor, loc(drill[6]), SAY_SAY)
-	elseif progress == 5 and (time_start + 5000 == GameTime) then
-		FollowGear(instructor)
-		HogSay(instructor, loc(drill[7]), SAY_SAY)
-	elseif progress == 5 and (time_start + 7500 == GameTime) then
-		FollowGear(instructor)
-		HogSay(instructor, loc(drill[8]), SAY_SHOUT)
-		ShowMission(loc(caption), loc(subcaption), loc(goals[1]), 1, 0)
-		target = AddGear(target_x, target_y, gtTarget, 0, 0, 0, 0)
-		TurnTimeLeft = 60000
-	elseif progress == 5 and (time_start + 10000 == GameTime) then
-		FollowGear(target)
-	elseif progress == 6 then
-		progress = 7
-		ShowMission(loc(caption), loc(subcaption), loc(goals[2]), 0, 0)
-		PlaySound(sndVictory)
-		time_start = GameTime
-	elseif progress == 7 and (time_start + 2500 == GameTime) then
-		EndGame()
-	end
-end
-
-function onGameInit()
-	Seed = 0
-	GameFlags = gfMultiWeapon + gfOneClanMode
-	TurnTime = 25000
-	CaseFreq = 0
-	MinesNum = 0
-	Explosives = 0
-	Delay = 2500
-	Map = "Mushrooms"
-	Theme = "Nature"
-	
-	AddTeam(loc(teamnames[0]), teamcolor, "Simple", "Island", "Default")
-	player = AddHog(loc(hognames[0]), 0, player_health, "NoHat")
-	SetGearPosition(player, player_start_x, player_start_y)
-	
-	AddTeam(loc(teamnames[1]), teamcolor + 1, "Simple", "Island", "Default")
-	instructor = AddHog(loc(hognames[1]), 0, instructor_health, "NoHat")
-	SetGearPosition(instructor, player_start_x + 100, player_start_y)
-	HogTurnLeft(instructor, true)
-
-	FollowGear(player)
-end
-
-function onAmmoStoreInit()
-	SetAmmo(amBazooka, 9, 0, 0, 0)
-end
-
-function onGearDelete(gear)
-	if GetGearType(gear) == gtTarget then
-		progress = 6
-	end
-end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Missions/Campaign/01-Boot_Camp.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,357 @@
+-- IMPORTANT -- THIS IS WORK IN PROGRESS AND VERY LIKELY TO BE CHANGED AGAIN
+-- IMPORTANT -- DO NOT TRANSLATE THIS AS IT USES THE OLD SYSTEM AND WILL BE UPDATED LATER!
+
+local teamnames = {}
+local hognames = {}
+teamnames[0] = {
+	["en"] = "Bloody Rookies",
+	["de"] = "Blutige Anfänger",
+	["pl"] = "Żótodzioby",
+	["sv"] = "Blodiga nybörjare",
+	["es"] = "Reclutas",
+	["pt_PT"] = "Recrutas",
+	["pt_BR"] = "Malditos Recrutas",
+	["sk"] = "Regruti"
+}
+
+teamnames[1] = {
+	["en"] = "Instructors",
+	["de"] = "Ausbilder",
+	["pl"] = "Instruktor",
+	["sv"] = "Instruktör",
+	["es"] = "Instructores",
+	["pt_PT"] = "Instrutores",
+	["pt_BR"] = "Instrutores",
+	["sk"] = "Inštruktori"
+}
+
+hognames[0] = {
+	["en"] = "Joker",
+	["de"] = "Joker",
+	["pl"] = "Joker",
+	["sv"] = "Joker",
+	["es"] = "Joker",
+	["pt_PT"] = "Joker",
+	["pt_BR"] = "Comediante",
+	["sk"] = "Komediant"
+}
+
+hognames[1] = {
+	["en"] = "Harthog",
+	["de"] = "Harthog",
+	["pl"] = "Harthog",
+	["sv"] = "Harthog",
+	["es"] = "Harthog",
+	["pt_PT"] = "Harthog",
+	["pt_BR"] = "Harthog",
+	["sk"] = "Harthog"
+}
+
+local caption = {
+	["en"] = "Boot Camp",
+	["de"] = "Grundausbildung",
+	["pl"] = "Poligon",
+	["sv"] = "Grundutbildning",
+	["es"] = "Campamento militar",
+	["pt_PT"] = "Acampamento militar",
+	["pt_BR"] = "Acampamento Militar",
+	["sk"] = "Výcvikový tábor"
+
+}
+
+local subcaption = {
+	["en"] = "Follow the instructions!",
+	["de"] = "Befolge die Anweisungen!",
+	["pl"] = "Wykonuj polecenia!",
+	["sv"] = "Följ instruktioner!",
+	["es"] = "¡Sigue las órdenes!",
+	["pt_PT"] = "Segue as instruções!",
+	["pt_BR"] = "Siga as ordens!",
+	["sk"] = "Postupujte podľa inštrukcií!"
+}
+
+local goals = {}
+
+goals[0] = {
+	["en"] = "Listen to your Drill Instructor and follow his lead!",
+	["de"] = "Höre deinem Ausbilder zu und befolge seine Anweisungen!",
+	["pl"] = "Słuchaj instruktora i wykonuj jego rozkazy!",
+	["sv"] = "Lyssna på din instruktör och gör som han säger!",
+	["es"] = "¡Escucha atentamente a tu instructor de maniobras y sigue sus órdenes!",
+	["pt_PT"] = "Ouve atentamente o teu Instrutor e segue as suas ordens!",
+	["pt_BR"] = "Escute seu instrutor de escavação e siga seu líder",
+	["sk"] = "Počúvajte vášho inštruktora výcviku a vykonávajte jeho rozkazy!"
+}
+
+goals[1] = {
+	["en"] = "Destroy the target to finish this mission!",
+	["de"] = "Zerstöre das Ziel, um diese Mission abzuschließen!",
+	["pl"] = "Zniszcz cel by ukończyć misję!",
+	["sv"] = "Förstör målet för att avklara uppdraget!",
+	["es"] = "¡Destruye el objetivo para completar esta misión!",
+	["pt_PT"] = "Destrói o alvo para completar esta missão!",
+	["pt_BR"] = "Destrua o alvo para concluir a missão",
+	["sk"] = "Pre ukončenie misie zneškodnite cieľ!"
+}
+
+goals[2] = {
+	["en"] = "Excellent! You've passed the Boot Camp!",
+	["de"] = "Ausgezeichnet! Du hast das Ausbildungslager bestanden!",
+	["pl"] = "Doskonale! Wyszedłeś cało z poligonu!",
+	["sv"] = "Brilliant! Du har klarat av grundutbildningen!",
+	["es"] = "¡Excelente! ¡Has completado la maniobra de hoy!",
+	["pt_PT"] = "Excelente! Completaste o treino para recrutas!",
+	["pt_BR"] = "Excelente! Você completou a manobra",
+	["pt_BR"] = "Výborne! Prešli ste výcvikovým táborom!"
+}
+
+local failed = {
+	["en"] = "You failed! Follow the instructions and shoot the target only!",
+	["de"] = "Du hast versagt! Befolge die Anweisungen und schieß nur auf das Ziel!",
+	["pl"] = "Przegrałeś! Wykonuj instrukcje poprawnie i strzelaj tylko w podane cele!",
+	["sv"] = "Du har misslyckats! Följ instruktionerna och sjut endast på målen!",
+	["es"] = "¡Has fallado! ¡Sigue las instrucciones y destruye únicamente el objetivo!",
+	["pt_PT"] = "Falhaste! Segue as instruções e destrói apenas o alvo!",
+	["pt_BR"] = "Você falhou! Siga as instruções e atire somente no alvo",
+	["sk"] = "Prehrali ste! Nasledujte inštrukcie a strieľajte iba na cieľ!"
+}
+
+local drill = {}
+
+drill[0] = {
+	["en"] = "Allright, maggot!",
+	["de"] = "Also gut, du Made!",
+	["pl"] = "Słuchaj mnie gnido!",
+	["sv"] = "Dåså, din mask!",
+	["es"] = "¡Muy bien, escoria!",
+	["pt_PT"] = "Bom trabalho verme!",
+	["pt_BR"] = "Parabéns escória",
+	["sk"] = "Počúvaj, ty červík!"
+}
+
+drill[1] = {
+	["en"] = "Show that you aren't that useless.",
+	["de"] = "Zeig, dass du nicht so nutzlos bist.",
+	["pl"] = "Udowodnij, że nie jesteś bezwartościowy.",
+	["sv"] = "Visa att du inte är så värdelös!",
+	["es"] = "Demuéstrame que no eres tan inútil como pareces.",
+	["pt_PT"] = "Prova-me que não és tão inútil como pareces.",
+	["pt_BR"] = "Mostre que você não é um inútil.",
+	["sk"] = "Dokáž, že nie si na svete úplne zbytočným."
+}
+
+drill[2] = {
+	["en"] = "Use [left] to move to the left!",
+	["de"] = "Benutze [Links], um nach links zu gehen!",
+	["pl"] = "Użyj [lewo] by poruszyć się w lewą stronę!",
+	["sv"] = "Använd [vänster] för att gå åt vänster!",
+	["es"] = "¡Aprieta [izquierda] para desplazarte a la izquierda!",
+	["pt_PT"] = "Carrega [esquerda] para te moveres para a esquerda!",
+	["pt_BR"] = "Use [esquerda] para mover para a esquerda",
+	["sk"] = "Stlačte [vľavo] pre pohyb doľava"
+}
+
+drill[3] = {
+	["en"] = "Good! Now use [right] to come back!",
+	["de"] = "Gut! Nun komm mit [Rechts] zurück!",
+	["pl"] = "Dobzre, Teraz użyj [prawo] by wrócić!",
+	["sv"] = "Bra! Använd nu [höger] för att gå tillbaka!",
+	["es"] = "¡Muy bien! ¡Ahora presiona [derecha] para volver!",
+	["pt_PT"] = "Muito bem! Agora pressiona [direita] para voltar!",
+	["pt_BR"] = "Bom! Agora use [direita] para voltar",
+	["sk"] = "Dobre! Teraz použite [vpravo] a vráťte sa naspäť!"
+}
+
+drill[4] = {
+	["en"] = "Excellent!",
+	["de"] = "Ausgezeichnet!",
+	["pl"] = "Wspaniale!",
+	["sv"] = "Utmärkt!",
+	["es"] = "¡Excelente!",
+	["pt_PT"] = "Excelente!",
+	["pt_BR"] = "Excelente!",
+	["sk"] = "Výborne!"
+}
+
+drill[5] = {
+	["en"] = "Now jump to the left using [return]!",
+	["de"] = "Jetzt springe mit [Eingabetaste] nach links!",
+	["pl"] = "Teraz skocz w lewo używając [Enter]",
+	["sv"] = "Hoppa nu åt vänster med hjälp av [enter]!",
+	["es"] = "¡Ahora salta hacia la izquierda usando [intro]!",
+	["pt_PT"] = "Agora salta para a esquerda pressionando [retrocesso]!",
+	["pt_BR"] = "Agora pule para a esquerda usando [return]!",
+	["sk"] = "Teraz skočte doľava stlačením [enter]!"
+}
+
+drill[6] = {
+	["en"] = "Use [up] and [down] to aim.",
+	["de"] = "Benutze [Hoch] und [Runter], um zu zielen.",
+	["pl"] = "Użyj klawiszy [góra] i [dół] by celować.",
+	["sv"] = "Använd [upp] och [ner] för att sikta!",
+	["es"] = "Presiora [arriba] y [abajo] para apuntar.",
+	["pt_PT"] = "Pressiona [cima] e [baixo] para apontar.",
+	["pt_BR"] = "Pressione [acima] e [abaixo] para mirar.",
+	["sk"] = "Stlačte [hore] a [dole] pre mierenie."
+}
+
+drill[7] = {
+	["en"] = "Hold [space] to power up your shot and then release it to shoot.",
+	["de"] = "Halte [Leertaste], um deinen Schuss aufzuladen, und lasse dann rechtzeitig los.",
+	["pl"] = "Przytrzymaj spację by zwiększyć siłę strzału.",
+	["sv"] = "Håll ner [mellanslag] för att få kraft och släpp för att skjuta!",
+	["es"] = "Mantén presionada la [barra espaciadora] para controlar la fuerza del disparo y suéltala para disparar.",
+	["pt_PT"] = "Mantem a [barra de espaços] pressionada para controlar a força do tiro e larga-a para disparar.",
+	["pt_BR"] = "Mantenha pressionado [espaço] para aumentar a força do seu tiro e solte para atirar",
+	["sk"] = "Držte stlačený [medzerník] pre nabíjanie, jeho uvoľnením vystrelíte."
+}
+
+drill[8] = {
+	["en"] = "Destroy the target to finish your basic training!",
+	["de"] = "Zerstöre das Ziel, um deine Grundausbildung abzuschließen!",
+	["pl"] = "Zniszcz cel by by ukończyć trening podstawowy!",
+	["sv"] = "Förstör målet för att avsluta din grundutbildning!",
+	["es"] = "¡Destruye el objetivo para completar el entrenamiento básico!",
+	["pt_PT"] = "Destrói o alvo para completar o treino básico!",
+	["pt_BR"] = "Destrua o alvo para terminar o treino básico",
+	["sk"] = "Zneškodnite cieľ na ukončenie základného výcviku!"
+}
+
+local function loc(text)
+	if text == nil then return "**missing**"
+	elseif text[L] == nil then return text["en"]
+	else return text[L]
+	end
+end
+
+local player = nil
+local instructor = nil
+local target = nil
+
+function onGameStart()
+
+end
+
+local player_start_x = 2300
+local player_start_y = 1250
+local target_x = 1900
+local target_y = 1250
+local player_health = 100
+local instructor_health = 100
+local teamcolor = 14483456
+
+local progress = 0
+local time_start = 0
+
+function onGameTick()
+	if progress == -1 and (time_start + 2500) == GameTime then
+		EndGame()
+	elseif progress == -1 then
+		
+	elseif progress > 0 and ((TurnTimeLeft == 0) or (GetHealth(player) ~= player_health) or (GetHealth(instructor) ~= instructor_health)) then
+		progress = -1
+		ShowMission(loc(caption), loc(subcaption), loc(failed), -amBazooka, 0)
+		time_start = GameTime
+		PlaySound(sndNooo)
+		TurnTimeLeft = 0
+	elseif GameTime == 0 then
+		ShowMission(loc(caption), loc(subcaption), loc(goals[0]), -amBazooka, 0)
+		TurnTimeLeft = 60000
+	elseif GameTime == 2500 then
+		FollowGear(instructor)
+		HogSay(instructor, loc(drill[0]), SAY_SAY)
+	elseif GameTime == 5000 then
+		FollowGear(instructor)
+		HogSay(instructor, loc(drill[1]), SAY_SAY)
+	elseif GameTime == 7500 then
+		FollowGear(instructor)
+		HogSay(instructor, loc(drill[2]), SAY_SHOUT)
+		progress = 1
+		TurnTimeLeft = 10000
+	elseif progress == 1 then
+		local x, y = GetGearPosition(player)
+		if x < player_start_x - 50 then
+			progress = 2
+			FollowGear(instructor)
+			HogSay(instructor, loc(drill[3]), SAY_SHOUT)
+			TurnTimeLeft = 10000
+		end
+	elseif progress == 2 then
+		local x, y = GetGearPosition(player)
+		if x > player_start_x then
+			progress = 3
+			FollowGear(instructor)
+			HogSay(instructor, loc(drill[4]), SAY_SAY)
+			time_start = GameTime
+		end
+	elseif progress == 3 and (time_start + 2500 == GameTime) then
+		progress = 4
+		FollowGear(instructor)
+		HogSay(instructor, loc(drill[5]), SAY_SHOUT)
+		HogTurnLeft(player, true)
+		TurnTimeLeft = 10000
+	elseif progress == 4 then
+		local x, y = GetGearPosition(player)
+		if y < player_start_y then
+			progress = 5
+			FollowGear(instructor)
+			HogSay(instructor, "Yeah!", SAY_SAY)
+			time_start = GameTime
+			TurnTimeLeft = 30000
+		end
+	elseif progress == 5 and (time_start + 2500 == GameTime) then
+		FollowGear(instructor)
+		HogSay(instructor, loc(drill[6]), SAY_SAY)
+	elseif progress == 5 and (time_start + 5000 == GameTime) then
+		FollowGear(instructor)
+		HogSay(instructor, loc(drill[7]), SAY_SAY)
+	elseif progress == 5 and (time_start + 7500 == GameTime) then
+		FollowGear(instructor)
+		HogSay(instructor, loc(drill[8]), SAY_SHOUT)
+		ShowMission(loc(caption), loc(subcaption), loc(goals[1]), 1, 0)
+		target = AddGear(target_x, target_y, gtTarget, 0, 0, 0, 0)
+		TurnTimeLeft = 60000
+	elseif progress == 5 and (time_start + 10000 == GameTime) then
+		FollowGear(target)
+	elseif progress == 6 then
+		progress = 7
+		ShowMission(loc(caption), loc(subcaption), loc(goals[2]), 0, 0)
+		PlaySound(sndVictory)
+		time_start = GameTime
+	elseif progress == 7 and (time_start + 2500 == GameTime) then
+		EndGame()
+	end
+end
+
+function onGameInit()
+	Seed = 0
+	GameFlags = gfMultiWeapon + gfOneClanMode
+	TurnTime = 25000
+	CaseFreq = 0
+	MinesNum = 0
+	Explosives = 0
+	Delay = 2500
+	Map = "Mushrooms"
+	Theme = "Nature"
+	
+	AddTeam(loc(teamnames[0]), teamcolor, "Simple", "Island", "Default")
+	player = AddHog(loc(hognames[0]), 0, player_health, "NoHat")
+	SetGearPosition(player, player_start_x, player_start_y)
+	
+	AddTeam(loc(teamnames[1]), teamcolor + 1, "Simple", "Island", "Default")
+	instructor = AddHog(loc(hognames[1]), 0, instructor_health, "NoHat")
+	SetGearPosition(instructor, player_start_x + 100, player_start_y)
+	HogTurnLeft(instructor, true)
+
+	FollowGear(player)
+end
+
+function onAmmoStoreInit()
+	SetAmmo(amBazooka, 9, 0, 0, 0)
+end
+
+function onGearDelete(gear)
+	if GetGearType(gear) == gtTarget then
+		progress = 6
+	end
+end
--- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/epil.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/epil.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -378,7 +378,7 @@
 end
 
 function onAmmoStoreInit()
-  SetAmmo(amAirStrike, 9, 0, 0, 0)
+  SetAmmo(amAirAttack, 9, 0, 0, 0)
   SetAmmo(amBaseballBat, 9, 0, 0, 0)
   SetAmmo(amBazooka, 9, 0, 0, 0)
   SetAmmo(amBlowTorch, 9, 0, 0, 0)
--- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/family.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/family.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -417,7 +417,7 @@
   AddAmmo(cyborgs[1], amBaseballBat, 100)
   AddAmmo(cyborgs[1], amMolotov, 100)
   AddAmmo(cyborgs[1], amWatermelon, 1)
-  AddAmmo(cyborgs[1], amAirStrike, 2)
+  AddAmmo(cyborgs[1], amAirAttack, 2)
   AddAmmo(cyborgs[1], amDrillStrike, 1)
 end
 
--- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/queen.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/queen.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -675,7 +675,7 @@
   AddAmmo(natives[1], amBazooka, 0)
   AddAmmo(natives[1], amGrenade, 0)
   AddAmmo(natives[1], amShotgun, 0)
-  AddAmmo(natives[1], amAirStrike, 0)
+  AddAmmo(natives[1], amAirAttack, 0)
   AddAmmo(natives[1], amMolotov, 0)
 end
 
--- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Bazooka.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Bazooka.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -1,242 +1,242 @@
--- Hedgewars Bazooka Training
--- Scripting Example
-
--- Lines such as this one are comments - they are ignored
--- by the game, no matter what kind of text is in there.
--- It's also possible to place a comment after some real
--- instruction as you see below. In short, everything
--- following "--" is ignored.
-
----------------------------------------------------------------
--- At first we implement the localization library using loadfile.
--- This allows us to localize strings without needing to think
--- about translations.
--- We can use the function loc(text) to localize a string.
-
-HedgewarsScriptLoad("/Scripts/Locale.lua")
-
--- This variable will hold the number of destroyed targets.
-local score = 0
--- This variable represents the number of targets to destroy.
-local score_goal = 5
--- This variable controls how many milliseconds/ticks we'd
--- like to wait before we end the round once all targets
--- have been destroyed.
-local end_timer = 1000 -- 1000 ms = 1 s
--- This variable is set to true if the game is lost (i.e.
--- time runs out).
-local game_lost = false
--- This variable will point to the hog's gear
-local player = nil
--- This variable will grab the time left at the end of the round
-local time_goal = 0
--- This variable stores the number of bazooka shots
-local shots = 0
-
--- This is a custom function to make it easier to
--- spawn more targets with just one line of code
--- You may define as many custom functions as you
--- like.
-function spawnTarget()
-	-- add a new target gear
-	gear = AddGear(0, 0, gtTarget, 0, 0, 0, 0)
-	
-	-- move it to a random position within 0 and
-	-- LAND_WIDTH - the width of the map
-	FindPlace(gear, true, 0, LAND_WIDTH)
-	
-	-- move the target to a higher vertical position
-	-- to ensure it's not somewhere down below
-	x, y = GetGearPosition(gear)
-	SetGearPosition(gear, x, 0)
-end
-
--- This function is called before the game loads its
--- resources.
--- It's one of the predefined function names that will
--- be called by the game. They give you entry points
--- where you're able to call your own code using either
--- provided instructions or custom functions.
-function onGameInit()
-	-- At first we have to overwrite/set some global variables
-	-- that define the map, the game has to load, as well as
-	-- other things such as the game rules to use, etc.
-	-- Things we don't modify here will use their default values.
-
-	-- The base number for the random number generator
-	Seed = 1
-	-- Game settings and rules
-    EnableGameFlags(gfMultiWeapon, gfOneClanMode, gfSolidLand)
-    -- Uncommenting this wouldn't do anything
-    --EnableGameFlags(gfMultiWeapon, gfOneClanMode, gfSolidLand)
-    -- Neither this
-    --DisableGameFlags(gfArtillery)
-    -- Uncommenting this would make the terrain damageable
-    --DisableGameFlags(gfSolidLand)
-    -- Uncommenting this would remove all flags set previously
-    --ClearGameFlags()
-	-- The time the player has to move each round (in ms)
-	TurnTime = 60000
-	-- The frequency of crate drops
-	CaseFreq = 0
-	-- The number of mines being placed
-	MinesNum = 0
-	-- The number of explosives being placed
-	Explosives = 0
-	-- The delay between each round
-	Delay = 0
-	-- The map to be played
-	Map = "Bamboo"
-	-- The theme to be used
-	Theme = "Bamboo"
-
-	-- Create the player team
-	AddTeam(loc("'Zooka Team"), 14483456, "Simple", "Island", "Default")
-	-- And add a hog to it
-	player = AddHog(loc("Hunter"), 0, 1, "NoHat")
-	SetGearPosition(player, 936, 136)
-end
-
--- This function is called when the round starts
--- it spawns the first target that has to be destroyed.
--- In addition it shows the scenario goal(s).
-function onGameStart()
-	-- Disable the graph in the stats screen, we don't need it
-	SendHealthStatsOff()
-	-- Spawn the first target.
-	spawnTarget()
-	
-	-- Show some nice mission goals.
-	-- Parameters are: caption, sub caption, description,
-	-- extra text, icon and time to show.
-	-- A negative icon parameter (-n) represents the n-th weapon icon
-	-- A positive icon paramter (n) represents the (n+1)-th mission icon
-	-- A timeframe of 0 is replaced with the default time to show.
-	ShowMission(loc("Bazooka Training"), loc("Aiming Practice"), loc("Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."), -amBazooka, 0)
-end
-
-function onNewTurn()
-	SetWeapon(amBazooka)
-end
-
--- This function is called every game tick.
--- Note that there are 1000 ticks within one second.
--- You shouldn't try to calculate too complicated
--- code here as this might slow down your game.
-function onGameTick20()
-	-- If time's up, set the game to be lost.
-	-- We actually check the time to be "1 ms" as it
-	-- will be at "0 ms" right at the start of the game.
-	if TurnTimeLeft < 40 and TurnTimeLeft > 0 and score < score_goal and not game_lost then
-		game_lost = true
-		-- ... and show a short message.
-		ShowMission(loc("Bazooka Training"), loc("Aiming Practice"), loc("Oh no! Time's up! Just try again."), -amSkip, 0)
-		-- How about killing our poor hog due to his poor performance?
-		SetHealth(player, 0)
-		-- Just to be sure set the goal time to 1 ms
-		time_goal = 1
-	end
-
-	if band(GetState(player), gstDrowning) == gstDrowning and game_lost == false and score < score_goal then
-		game_lost = true
-		time_goal = 1
-		AddCaption(loc("You lose!"), 0xFFFFFFFF, capgrpGameState)
-		ShowMission(loc("Bazooka Training"), loc("Aiming practice"), loc("Oh no! You failed! Just try again."), -amSkip, 0)
-	end
-
-	-- If the goal is reached or we've lost ...
-	if score == score_goal or game_lost then
-		-- ... check to see if the time we'd like to
-		-- wait has passed and then ...
-		if end_timer == 0 then
-			-- Let’s create some stats for the stats screen!
-			-- We will expose the number of hit targets hit, launched bazooka and the accuracy
-
-			SendStat(siPointType, loc("hits"))
-			SendStat(siPlayerKills, tostring(score), loc("'Zooka Team"))
-			SendStat(siCustomAchievement, string.format(loc("You have destroyed %d of %d targets."), score, score_goal))
-			SendStat(siCustomAchievement, string.format(loc("You have launched %d bazookas."), shots))
-
-			-- We must avoid a division by zero
-			if(shots > 0) then
-				SendStat(siCustomAchievement, string.format(loc("Your accuracy was %.1f%%."), (score/shots)*100))
-			end
-			if score == score_goal then
-				SendStat(siGameResult, "You have finished the bazooka training!")
-				SendStat(siCustomAchievement, string.format(loc("%.1f seconds were remaining."), (time_goal/1000), math.ceil(time_goal/12)))
-			end
-			if game_lost then
-				SendStat(siGameResult, "You lose!")
-			end
-
-			-- Finally we end the game ...
-			EndGame()
-		else
-			-- ... or just lower the timer by 20ms.
-			-- Reset the time left to stop the timer
-			TurnTimeLeft = time_goal
-		end
-        end_timer = end_timer - 20
-	end
-end
-
--- This function is called when the game is initialized
--- to request the available ammo and probabilities
-function onAmmoStoreInit()
-	-- add an unlimited supply of bazooka ammo
-	SetAmmo(amBazooka, 9, 0, 0, 0)
-end
-
--- This function is called when a new gear is added.
--- We don't need it for this training, so we can
--- keep it empty.
--- function onGearAdd(gear)
--- end
-
--- This function is called before a gear is destroyed.
--- We use it to count the number of targets destroyed.
-function onGearDelete(gear)
-	-- We're only interested in target gears.
-	if GetGearType(gear) == gtTarget then
-		-- Add one point to our score/counter
-		score = score + 1
-		-- If we haven't reached the goal ...
-		if score < score_goal then
-			-- ... spawn another target.
-			spawnTarget()
-		else
-			if not game_lost then
-			-- Otherwise show that the goal was accomplished
-			ShowMission(loc("Bazooka Training"), loc("Aiming Practice"), loc("Congratulations! You've eliminated all targets|within the allowed time frame."), 0, 0)
-			-- Also let the hogs shout "victory!"
-			PlaySound(sndVictory)
-			-- Save the time left so we may keep it.
-			time_goal = TurnTimeLeft
-			end
-		end
-	end
-end
-
--- This function is called when a gear has been damaged.
--- We only use it to determine wheather our hog took damage in order to abort the mission.
-function onGearDamage(gear, damage)
-	if GetGearType(gear) == gtHedgehog then
-		if not game_lost then
-			game_lost = true
-			AddCaption(loc("You lose!", 0xFFFFFFFF, capgrpGameState))
-			ShowMission(loc("Bazooka Training") , loc("Aiming practice"), loc("Oh no! You failed! Just try again."), -amSkip, 0)
-
-			time_goal = 1
-		end
-	end
-end
-
-
--- This function is called after a gear is added.
--- We use it to count the number of bazooka shots.
-function onGearAdd(gear)
-	-- Count the number of bazooka shots for our stats
-	if GetGearType(gear) == gtShell then
-		shots = shots + 1
-	end
-end
+-- Hedgewars Bazooka Training
+-- Scripting Example
+
+-- Lines such as this one are comments - they are ignored
+-- by the game, no matter what kind of text is in there.
+-- It's also possible to place a comment after some real
+-- instruction as you see below. In short, everything
+-- following "--" is ignored.
+
+---------------------------------------------------------------
+-- At first we implement the localization library using loadfile.
+-- This allows us to localize strings without needing to think
+-- about translations.
+-- We can use the function loc(text) to localize a string.
+
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+
+-- This variable will hold the number of destroyed targets.
+local score = 0
+-- This variable represents the number of targets to destroy.
+local score_goal = 5
+-- This variable controls how many milliseconds/ticks we'd
+-- like to wait before we end the round once all targets
+-- have been destroyed.
+local end_timer = 1000 -- 1000 ms = 1 s
+-- This variable is set to true if the game is lost (i.e.
+-- time runs out).
+local game_lost = false
+-- This variable will point to the hog's gear
+local player = nil
+-- This variable will grab the time left at the end of the round
+local time_goal = 0
+-- This variable stores the number of bazooka shots
+local shots = 0
+
+-- This is a custom function to make it easier to
+-- spawn more targets with just one line of code
+-- You may define as many custom functions as you
+-- like.
+function spawnTarget()
+	-- add a new target gear
+	gear = AddGear(0, 0, gtTarget, 0, 0, 0, 0)
+	
+	-- move it to a random position within 0 and
+	-- LAND_WIDTH - the width of the map
+	FindPlace(gear, true, 0, LAND_WIDTH)
+	
+	-- move the target to a higher vertical position
+	-- to ensure it's not somewhere down below
+	x, y = GetGearPosition(gear)
+	SetGearPosition(gear, x, 0)
+end
+
+-- This function is called before the game loads its
+-- resources.
+-- It's one of the predefined function names that will
+-- be called by the game. They give you entry points
+-- where you're able to call your own code using either
+-- provided instructions or custom functions.
+function onGameInit()
+	-- At first we have to overwrite/set some global variables
+	-- that define the map, the game has to load, as well as
+	-- other things such as the game rules to use, etc.
+	-- Things we don't modify here will use their default values.
+
+	-- The base number for the random number generator
+	Seed = 1
+	-- Game settings and rules
+    EnableGameFlags(gfMultiWeapon, gfOneClanMode, gfSolidLand)
+    -- Uncommenting this wouldn't do anything
+    --EnableGameFlags(gfMultiWeapon, gfOneClanMode, gfSolidLand)
+    -- Neither this
+    --DisableGameFlags(gfArtillery)
+    -- Uncommenting this would make the terrain damageable
+    --DisableGameFlags(gfSolidLand)
+    -- Uncommenting this would remove all flags set previously
+    --ClearGameFlags()
+	-- The time the player has to move each round (in ms)
+	TurnTime = 60000
+	-- The frequency of crate drops
+	CaseFreq = 0
+	-- The number of mines being placed
+	MinesNum = 0
+	-- The number of explosives being placed
+	Explosives = 0
+	-- The delay between each round
+	Delay = 0
+	-- The map to be played
+	Map = "Bamboo"
+	-- The theme to be used
+	Theme = "Bamboo"
+
+	-- Create the player team
+	AddTeam(loc("'Zooka Team"), 14483456, "Simple", "Island", "Default")
+	-- And add a hog to it
+	player = AddHog(loc("Hunter"), 0, 1, "NoHat")
+	SetGearPosition(player, 936, 136)
+end
+
+-- This function is called when the round starts
+-- it spawns the first target that has to be destroyed.
+-- In addition it shows the scenario goal(s).
+function onGameStart()
+	-- Disable the graph in the stats screen, we don't need it
+	SendHealthStatsOff()
+	-- Spawn the first target.
+	spawnTarget()
+	
+	-- Show some nice mission goals.
+	-- Parameters are: caption, sub caption, description,
+	-- extra text, icon and time to show.
+	-- A negative icon parameter (-n) represents the n-th weapon icon
+	-- A positive icon paramter (n) represents the (n+1)-th mission icon
+	-- A timeframe of 0 is replaced with the default time to show.
+	ShowMission(loc("Bazooka Training"), loc("Aiming Practice"), loc("Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."), -amBazooka, 0)
+end
+
+function onNewTurn()
+	SetWeapon(amBazooka)
+end
+
+-- This function is called every game tick.
+-- Note that there are 1000 ticks within one second.
+-- You shouldn't try to calculate too complicated
+-- code here as this might slow down your game.
+function onGameTick20()
+	-- If time's up, set the game to be lost.
+	-- We actually check the time to be "1 ms" as it
+	-- will be at "0 ms" right at the start of the game.
+	if TurnTimeLeft < 40 and TurnTimeLeft > 0 and score < score_goal and not game_lost then
+		game_lost = true
+		-- ... and show a short message.
+		ShowMission(loc("Bazooka Training"), loc("Aiming Practice"), loc("Oh no! Time's up! Just try again."), -amSkip, 0)
+		-- How about killing our poor hog due to his poor performance?
+		SetHealth(player, 0)
+		-- Just to be sure set the goal time to 1 ms
+		time_goal = 1
+	end
+
+	if band(GetState(player), gstDrowning) == gstDrowning and game_lost == false and score < score_goal then
+		game_lost = true
+		time_goal = 1
+		AddCaption(loc("You lose!"), 0xFFFFFFFF, capgrpGameState)
+		ShowMission(loc("Bazooka Training"), loc("Aiming Practice"), loc("Oh no! You failed! Just try again."), -amSkip, 0)
+	end
+
+	-- If the goal is reached or we've lost ...
+	if score == score_goal or game_lost then
+		-- ... check to see if the time we'd like to
+		-- wait has passed and then ...
+		if end_timer == 0 then
+			-- Let’s create some stats for the stats screen!
+			-- We will expose the number of hit targets hit, launched bazooka and the accuracy
+
+			SendStat(siPointType, loc("hits"))
+			SendStat(siPlayerKills, tostring(score), loc("'Zooka Team"))
+			SendStat(siCustomAchievement, string.format(loc("You have destroyed %d of %d targets."), score, score_goal))
+			SendStat(siCustomAchievement, string.format(loc("You have launched %d bazookas."), shots))
+
+			-- We must avoid a division by zero
+			if(shots > 0) then
+				SendStat(siCustomAchievement, string.format(loc("Your accuracy was %.1f%%."), (score/shots)*100))
+			end
+			if score == score_goal then
+				SendStat(siGameResult, loc("You have finished the bazooka training!"))
+				SendStat(siCustomAchievement, string.format(loc("%.1f seconds were remaining."), (time_goal/1000), math.ceil(time_goal/12)))
+			end
+			if game_lost then
+				SendStat(siGameResult, loc("You lose!"))
+			end
+
+			-- Finally we end the game ...
+			EndGame()
+		else
+			-- ... or just lower the timer by 20ms.
+			-- Reset the time left to stop the timer
+			TurnTimeLeft = time_goal
+		end
+        end_timer = end_timer - 20
+	end
+end
+
+-- This function is called when the game is initialized
+-- to request the available ammo and probabilities
+function onAmmoStoreInit()
+	-- add an unlimited supply of bazooka ammo
+	SetAmmo(amBazooka, 9, 0, 0, 0)
+end
+
+-- This function is called when a new gear is added.
+-- We don't need it for this training, so we can
+-- keep it empty.
+-- function onGearAdd(gear)
+-- end
+
+-- This function is called before a gear is destroyed.
+-- We use it to count the number of targets destroyed.
+function onGearDelete(gear)
+	-- We're only interested in target gears.
+	if GetGearType(gear) == gtTarget then
+		-- Add one point to our score/counter
+		score = score + 1
+		-- If we haven't reached the goal ...
+		if score < score_goal then
+			-- ... spawn another target.
+			spawnTarget()
+		else
+			if not game_lost then
+			-- Otherwise show that the goal was accomplished
+			ShowMission(loc("Bazooka Training"), loc("Aiming Practice"), loc("Congratulations! You've eliminated all targets|within the allowed time frame."), 0, 0)
+			-- Also let the hogs shout "victory!"
+			PlaySound(sndVictory)
+			-- Save the time left so we may keep it.
+			time_goal = TurnTimeLeft
+			end
+		end
+	end
+end
+
+-- This function is called when a gear has been damaged.
+-- We only use it to determine wheather our hog took damage in order to abort the mission.
+function onGearDamage(gear, damage)
+	if GetGearType(gear) == gtHedgehog then
+		if not game_lost then
+			game_lost = true
+			AddCaption(loc("You lose!", 0xFFFFFFFF, capgrpGameState))
+			ShowMission(loc("Bazooka Training") , loc("Aiming Practice"), loc("Oh no! You failed! Just try again."), -amSkip, 0)
+
+			time_goal = 1
+		end
+	end
+end
+
+
+-- This function is called after a gear is added.
+-- We use it to count the number of bazooka shots.
+function onGearAdd(gear)
+	-- Count the number of bazooka shots for our stats
+	if GetGearType(gear) == gtShell then
+		shots = shots + 1
+	end
+end
--- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Cluster_Bomb.lua	Sun Apr 26 13:02:38 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-HedgewarsScriptLoad("/Scripts/Locale.lua")
-
-local player = nil
-local scored = 0
-local end_timer = 1000
-local game_lost = false
-local time_goal = 0
-
-function spawnTarget()
-
-	gear = AddGear(0, 0, gtTarget, 0, 0, 0, 0)
-	
-	if scored == 0 then x = 628 end
-	if scored == 1 then x = 891 end
-	if scored == 2 then x = 1309 end
-	if scored == 3 then x = 1128 end
-	if scored == 4 then x = 410 end
-	if scored == 5 then x = 1564 end
-	if scored == 6 then x = 1348 end
-	if scored == 7 then x = 169 end
-	if scored == 8 then x = 1720 end
-	if scored == 9 then x = 1441 end
-	if scored == 10 then x = 599 end
-	if scored == 11 then x = 1638 end
-
-	if scored == 6 then
-		SetGearPosition(gear, 1248, 476)
-	else
-		SetGearPosition(gear, x, 0)
-	end
-
-end
-
-function onGameInit()
-
-	Seed = 1
-	GameFlags = gfDisableWind + gfInfAttack + gfOneClanMode
-	TurnTime = 180 * 1000
-	Map = "Trash"
-	Theme = "Golf"
-	Goals = "Take down all the targets|Achieve it using only Cluster Bomb"
-	CaseFreq = 0
-	MinesNum = 0
-	Explosives = 0
-
-	AddTeam("The Hogies", 2850005, "Statue", "Island", "Hog Islands")
-
-	player = AddHog(loc("Private Novak"), 0, 1, "war_desertGrenadier1")
-	SetGearPosition(player, 756, 370)
-
-end
-
-function onAmmoStoreInit()
-
-	SetAmmo(amClusterBomb, 9, 0, 0, 0)
-
-end
-
-function onGameStart()
-
-	ShowMission(loc("Cluster Bomb Training"), loc("Aiming Practice"), loc("You have to destroy 12 targets in 180 seconds"), -amClusterBomb, 5000)
-	spawnTarget()
-
-end
-
-function onGameTick20()
-
-	if TurnTimeLeft < 40 and TurnTimeLeft > 0 and scored < 12 and game_lost == false then
-		game_lost = true
-		ShowMission(loc("Cluster Bomb Training"), loc("Aiming Practice"), loc("Oh no! Time's up! Just try again."), -amSkip, 0)
-		SetHealth(player, 0)
-		time_goal = 1
-	end
-
-	if scored == 12 or game_lost then
-		if end_timer == 0 then
-			EndGame()
-		else
-			TurnTimeLeft = time_goal
-		end
-        end_timer = end_timer - 20
-	end
-
-end
-
-function onNewTurn()
-	SetWeapon(amClusterBomb)
-end
-
---function onGearAdd(gear)
---end
-
-function onGearDamage(gear, damage)
-
-	if GetGearType(gear) == gtTarget then
-		scored = scored + 1
-		if scored < 12 then
-			spawnTarget()
-		else
-			if not game_lost then
-
-				if TurnTimeLeft > 90 * 10 then
-					ShowMission(loc("Cluster Bomb MASTER!"), loc("Aiming Practice"), loc("Congratulations! You needed only half of time|to eliminate all targets."), 4, 0)
-				else
-					ShowMission(loc("Cluster Bomb Training"), loc("Aiming Practice"), loc("Congratulations! You've eliminated all targets|within the allowed time frame."), 0, 0)
-				end
-				PlaySound(sndVictory)
-				time_goal = TurnTimeLeft
-			end
-		end
-	end
-
-	if GetGearType(gear) == gtHedgehog then
-		game_lost = true
-		ShowMission(loc("Cluster Bomb Training"), loc("Aiming Practice"), loc("Oh no! You failed! Just try again."), -amSkip, 0)
-		SetHealth(player, 0)
-		time_goal = 1
-	end
-
-end
-
-function onGearDelete(gear)
-end
--- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Grenade.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Grenade.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -134,9 +134,9 @@
 		if end_timer == 0 then
 			-- Override the 'Draw' message with the appropriate message.
 			if game_lost then
-				AddCaption("Mission lost!", 0xffba00ff,capgrpGameState)
+				AddCaption(loc("Mission lost!"), 0xffba00ff,capgrpGameState)
 			else
-				AddCaption("Mission won!", 0xffba00ff,capgrpGameState)
+				AddCaption(loc("Mission won!"), 0xffba00ff,capgrpGameState)
 			end
 			-- Remove the team to end the game. Only do this once.
 			if team_death == false then
--- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Shotgun.lua	Sun Apr 26 13:02:38 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,178 +0,0 @@
--- Hedgewars Shotgun Training
--- Scripting Example
-
--- Lines such as this one are comments - they are ignored
--- by the game, no matter what kind of text is in there.
--- It's also possible to place a comment after some real
--- instruction as you see below. In short, everything
--- following "--" is ignored.
-
----------------------------------------------------------------
--- At first we implement the localization library using loadfile.
--- This allows us to localize strings without needing to think
--- about translations.
--- We can use the function loc(text) to localize a string.
-
-HedgewarsScriptLoad("/Scripts/Locale.lua")
-
--- This variable will hold the number of destroyed targets.
-local score = 0
--- This variable represents the number of targets to destroy.
-local score_goal = 5
--- This variable controls how many milliseconds/ticks we'd
--- like to wait before we end the round once all targets
--- have been destroyed.
-local end_timer = 1000 -- 1000 ms = 1 s
--- This variable is set to true if the game is lost (i.e.
--- time runs out).
-local game_lost = false
--- This variable will point to the hog's gear
-local player = nil
--- This variable will grab the time left at the end of the round
-local time_goal = 0
-
--- This is a custom function to make it easier to
--- spawn more targets with just one line of code
--- You may define as many custom functions as you
--- like.
-function spawnTarget()
-	-- add a new target gear
-	gear = AddGear(0, 0, gtTarget, 0, 0, 0, 0)
-	
-	-- move it to a random position within 0 and
-	-- LAND_WIDTH - the width of the map
-	FindPlace(gear, true, 0, LAND_WIDTH)
-	
-	-- move the target to a higher vertical position
-	-- to ensure it's not somewhere down below
-	x, y = GetGearPosition(gear)
-	SetGearPosition(gear, x, 0)
-end
-
-function onNewTurn()
-	SetWeapon(amShotgun)
-end
-
--- This function is called before the game loads its
--- resources.
--- It's one of the predefined function names that will
--- be called by the game. They give you entry points
--- where you're able to call your own code using either
--- provided instructions or custom functions.
-function onGameInit()
-	-- At first we have to overwrite/set some global variables
-	-- that define the map, the game has to load, as well as
-	-- other things such as the game rules to use, etc.
-	-- Things we don't modify here will use their default values.
-
-	-- The base number for the random number generator
-	Seed = 1
-	-- Game settings and rules
-	GameFlags = gfMultiWeapon + gfOneClanMode
-	-- The time the player has to move each round (in ms)
-	TurnTime = 30000
-	-- The frequency of crate drops
-	CaseFreq = 0
-	-- The number of mines being placed
-	MinesNum = 0
-	-- The number of explosives being placed
-	Explosives = 0
-	-- The delay between each round
-	Delay = 0
-	-- The map to be played
-	Map = "Mushrooms"
-	-- The theme to be used
-	Theme = "Nature"
-
-	-- Create the player team
-	AddTeam(loc("Shotgun Team"), 14483456, "Simple", "Island", "Default")
-	-- And add a hog to it
-	player = AddHog(loc("Hunter"), 0, 1, "NoHat")
-	SetGearPosition(player, 1210, 230)
-end
-
--- This function is called when the round starts
--- it spawns the first target that has to be destroyed.
--- In addition it shows the scenario goal(s).
-function onGameStart()
-	-- Spawn the first target.
-	spawnTarget()
-	
-	-- Show some nice mission goals.
-	-- Parameters are: caption, sub caption, description,
-	-- extra text, icon and time to show.
-	-- A negative icon parameter (-n) represents the n-th weapon icon
-	-- A positive icon paramter (n) represents the (n+1)-th mission icon
-	-- A timeframe of 0 is replaced with the default time to show.
-	ShowMission(loc("Shotgun Training"), loc("Aiming Practice"), loc("Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."), -amShotgun, 0)
-end
-
--- This function is called every game tick.
--- Note that there are 1000 ticks within one second.
--- You shouldn't try to calculate too complicated
--- code here as this might slow down your game.
-function onGameTick20()
-	-- If time's up, set the game to be lost.
-	-- We actually check the time to be "1 ms" as it
-	-- will be at "0 ms" right at the start of the game.
-	if TurnTimeLeft < 40 and TurnTimeLeft > 20 and score < score_goal then
-		game_lost = true
-		-- ... and show a short message.
-		ShowMission(loc("Shotgun Training"), loc("Aiming Practice"), loc("Oh no! Time's up! Just try again."), -amSkip, 0)
-		-- How about killing our poor hog due to his poor performance?
-		SetHealth(player, 0)
-		-- Just to be sure set the goal time to 1 ms
-		time_goal = 1
-	end
-	-- If the goal is reached or we've lost ...
-	if score == score_goal or game_lost then
-		-- ... check to see if the time we'd like to
-		-- wait has passed and then ...
-		if end_timer == 0 then
-			-- ... end the game ...
-			EndGame()
-		else
-			-- ... or just lower the timer by 1.
-			-- Reset the time left to stop the timer
-			TurnTimeLeft = time_goal
-		end
-        end_timer = end_timer - 20
-	end
-end
-
--- This function is called when the game is initialized
--- to request the available ammo and probabilities
-function onAmmoStoreInit()
-	-- add an unlimited supply of shotgun ammo
-	SetAmmo(amShotgun, 9, 0, 0, 0)
-end
-
--- This function is called when a new gear is added.
--- We don't need it for this training, so we can
--- keep it empty.
--- function onGearAdd(gear)
--- end
-
--- This function is called before a gear is destroyed.
--- We use it to count the number of targets destroyed.
-function onGearDelete(gear)
-	-- We're only interested in target gears.
-	if GetGearType(gear) == gtTarget then
-		-- Add one point to our score/counter
-		score = score + 1
-		-- If we haven't reached the goal ...
-		if score < score_goal then
-			-- ... spawn another target.
-			spawnTarget()
-		else
-			if not game_lost then
-			-- Otherwise show that the goal was accomplished
-			ShowMission(loc("Shotgun Training"), loc("Aiming Practice"), loc("Congratulations! You've eliminated all targets|within the allowed time frame."), 0, 0)
-			-- Also let the hogs shout "victory!"
-			PlaySound(sndVictory)
-			-- Save the time left so we may keep it.
-			time_goal = TurnTimeLeft
-			end
-		end
-	end
-end
--- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Sniper_Rifle.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Sniper_Rifle.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -1,349 +1,349 @@
--- Hedgewars SniperRifle Training
--- Scripting Example
-
--- Lines such as this one are comments - they are ignored
--- by the game, no matter what kind of text is in there.
--- It's also possible to place a comment after some real
--- instruction as you see below. In short, everything
--- following "--" is ignored.
-
----------------------------------------------------------------
--- At first we implement the localization library using loadfile.
--- This allows us to localize strings without needing to think
--- about translations.
--- We can use the function loc(text) to localize a string.
-
-HedgewarsScriptLoad("/Scripts/Locale.lua")
-
--- This variable will hold the number of destroyed targets.
-local score = 0
--- This variable will hold the number of shots from the sniper rifle
-local shots = 0
--- This variable represents the number of targets to destroy.
-local score_goal = 31
--- This variable controls how many milliseconds/ticks we'd
--- like to wait before we end the round once all targets
--- have been destroyed.
-local end_timer = 1000 -- 1000 ms = 1 s
--- This variable is set to true if the game is lost (i.e.
--- time runs out).
-local game_lost = false
--- This variable will point to the hog's gear
-local player = nil
--- This variable will grab the time left at the end of the round
-local time_goal = 0
-
-local target = nil
-
-local last_hit_time = 0
--- This is a custom function to make it easier to
--- spawn more targets with just one line of code
--- You may define as many custom functions as you
--- like.
-function spawnTarget(x, y)
-	-- add a new target gear
-	target = AddGear(x, y, gtTarget, 0, 0, 0, 0)
-	-- have the camera move to the target so the player knows where it is
-	FollowGear(target)
-end
-
-function blowUp(x, y)
-	-- adds some TNT
-	gear = AddGear(x, y, gtDynamite, 0, 0, 0, 0)
-end
-
-function onNewTurn()
-	SetWeapon(amSniperRifle)
-end
-
--- This function is called before the game loads its
--- resources.
--- It's one of the predefined function names that will
--- be called by the game. They give you entry points
--- where you're able to call your own code using either
--- provided instructions or custom functions.
-function onGameInit()
-	-- At first we have to overwrite/set some global variables
-	-- that define the map, the game has to load, as well as
-	-- other things such as the game rules to use, etc.
-	-- Things we don't modify here will use their default values.
-
-	-- The base number for the random number generator
-	Seed = 0
-	-- Game settings and rules
-	GameFlags = gfMultiWeapon + gfOneClanMode + gfArtillery
-	-- The time the player has to move each round (in ms)
-	TurnTime = 150000
-	-- The frequency of crate drops
-	CaseFreq = 0
-	-- The number of mines being placed
-	MinesNum = 0
-	-- The number of explosives being placed
-	Explosives = 0
-	-- The delay between each round
-	Delay = 0
-	-- The map to be played
-	Map = "Ropes"
-	-- The theme to be used
-	Theme = "City"
-
-	-- Create the player team
-	AddTeam(loc("Sniperz"), 14483456, "Simple", "Island", "Default")
-	-- And add a hog to it
-	player = AddHog(loc("Hunter"), 0, 1, "Sniper")
-	SetGearPosition(player, 602, 1465)
-end
-
--- This function is called when the round starts
--- it spawns the first target that has to be destroyed.
--- In addition it shows the scenario goal(s).
-function onGameStart()
-	-- Disable graph in stats screen
-	SendHealthStatsOff()
-	-- Spawn the first target.
-	spawnTarget(860,1020)
-	
-	-- Show some nice mission goals.
-	-- Parameters are: caption, sub caption, description,
-	-- extra text, icon and time to show.
-	-- A negative icon parameter (-n) represents the n-th weapon icon
-	-- A positive icon paramter (n) represents the (n+1)-th mission icon
-	-- A timeframe of 0 is replaced with the default time to show.
-	ShowMission(loc("Sniper Training"), loc("Aiming Practice"), loc("Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."), -amSniperRifle, 0)
-end
-
--- This function is called every game tick.
--- Note that there are 1000 ticks within one second.
--- You shouldn't try to calculate too complicated
--- code here as this might slow down your game.
-function onGameTick20()
-	if game_lost then
-		return
-	end
-	-- after a target is destroyed, show hog, then target
-	if (target ~= nil) and (TurnTimeLeft + 1300 < last_hit_time) then
-		-- move camera to the target
-		FollowGear(target)
-	elseif TurnTimeLeft + 300 < last_hit_time then
-		-- move camera to the hog
-		FollowGear(player)
-	end
-	-- If time's up, set the game to be lost.
-	-- We actually check the time to be "1 ms" as it
-	-- will be at "0 ms" right at the start of the game.
-	if TurnTimeLeft < 40 and TurnTimeLeft > 0 and score < score_goal and game_lost == false then
-		game_lost = true
-		-- ... and show a short message.
-		AddCaption(loc("Time's up!"))
-		ShowMission(loc("Sniper Training"), loc("Aiming Practice"), loc("Oh no! Time's up! Just try again."), -amSkip, 0)
-		-- and generate the stats and go to the stats screen
-		generateStats()
-		EndGame()
-		-- Just to be sure set the goal time to 1 ms
-		time_goal = 1
-	end
-	-- If the goal is reached or we've lost ...
-	if score == score_goal or game_lost then
-		-- ... check to see if the time we'd like to
-		-- wait has passed and then ...
-		if end_timer == 0 then
-			-- ... end the game ...
-			generateStats()
-			EndGame()
-		else
-			-- ... or just lower the timer by 1.
-			-- Reset the time left to stop the timer
-			TurnTimeLeft = time_goal
-		end
-        end_timer = end_timer - 20
-	end
-end
-
--- This function is called when the game is initialized
--- to request the available ammo and probabilities
-function onAmmoStoreInit()
-	-- add an unlimited supply of shotgun ammo
-	SetAmmo(amSniperRifle, 9, 0, 0, 0)
-end
-
--- This function is called when a new gear is added.
--- We use it to count the number of shots, which we
--- in turn use to calculate the final score and stats
-function onGearAdd(gear)
-	if GetGearType(gear) == gtSniperRifleShot then
-		shots = shots + 1
-	end
-end
-
--- This function is called before a gear is destroyed.
--- We use it to count the number of targets destroyed.
-function onGearDelete(gear)
-    
-	if GetGearType(gear) == gtCase then
-		game_lost = true
-		return
-	end
-	
-	if (GetGearType(gear) == gtTarget) then
-		-- remember when the target was hit for adjusting the camera
-		last_hit_time = TurnTimeLeft
-		-- Add one point to our score/counter
-		score = score + 1
-		-- If we haven't reached the goal ...
-		if score < score_goal then
-			-- ... spawn another target.
-			if score == 1 then
-				spawnTarget(1520,1350)
-			elseif score == 2 then
-				spawnTarget(1730,1040)
-			elseif score == 3 then
-				spawnTarget(2080,780)
-			elseif score == 4 then
-				AddCaption(loc("Good so far!") .. " " .. loc("Keep it up!"));
-				blowUp(1730,1226)
-				blowUp(1440,1595)
-				blowUp(1527,1575)
-				blowUp(1614,1595)
-				blowUp(1420,1675)
-				blowUp(1527,1675)
-				blowUp(1634,1675)
-				blowUp(1440,1755)
-				blowUp(1527,1775)
-				blowUp(1614,1755)
-				spawnTarget(1527,1667)
-			elseif score == 5 then
-				spawnTarget(1527,1667)
-			elseif score == 6 then
-				spawnTarget(2175,1300)
-			elseif score == 7 then
-				spawnTarget(2250,940)
-			elseif score == 8 then
-				spawnTarget(2665,1540)
-			elseif score == 9 then
-				spawnTarget(3040,1160)
-			elseif score == 10 then
-				spawnTarget(2930,1500)
-			elseif score == 11 then
-				AddCaption(loc("This one's tricky."));
-				spawnTarget(700,720)
-			elseif score == 12 then
-				AddCaption(loc("Well done."));
-				blowUp(914,1222)
-				blowUp(1050,1222)
-				blowUp(1160,1008)
-				blowUp(1160,1093)
-				blowUp(1160,1188)
-				blowUp(375,911)
-				blowUp(510,911)
-				blowUp(640,911)
-				blowUp(780,911)
-				blowUp(920,911)
-				blowUp(1060,913)
-				blowUp(1198,913)
-				spawnTarget(1200,730)
-			elseif score == 13 then
-				spawnTarget(1200,830)
-			elseif score == 14 then
-				spawnTarget(1430,450)
-			elseif score == 15 then
-				spawnTarget(796,240)
-			elseif score == 16 then
-				spawnTarget(300,10)
-			elseif score == 17 then
-				spawnTarget(2080,820)
-			elseif score == 18 then
-				AddCaption(loc("Demolition is fun!"));
-				blowUp(2110,920)
-				blowUp(2210,920)
-				blowUp(2200,305)
-				blowUp(2300,305)
-				blowUp(2300,400)
-				blowUp(2300,500)
-				blowUp(2300,600)
-				blowUp(2300,700)
-				blowUp(2300,800)
-				blowUp(2300,900)
-				blowUp(2401,305)
-				blowUp(2532,305)
-				blowUp(2663,305)
-				spawnTarget(2300,760)
-			elseif score == 19 then
-				spawnTarget(2300,760)
-			elseif score == 20 then
-				spawnTarget(2738,190)
-			elseif score == 21 then
-				spawnTarget(2590,-100)
-			elseif score == 22 then
-				AddCaption(loc("Will this ever end?"));
-				blowUp(2790,305)
-				blowUp(2930,305)
-				blowUp(3060,305)
-				blowUp(3190,305)
-				blowUp(3310,305)
-				blowUp(3393,613)
-				blowUp(2805,370)
-				blowUp(2805,500)
-				blowUp(2805,630)
-				blowUp(2805,760)
-				blowUp(2805,890)
-				blowUp(3258,370)
-				blowUp(3258,475)
-				blowUp(3264,575)
-				spawnTarget(3230,240)
-			elseif score == 23 then
-				spawnTarget(3230,290)
-			elseif score == 24 then
-				spawnTarget(3670,250)
-			elseif score == 25 then
-				spawnTarget(2620,-100)
-			elseif score == 26 then
-				spawnTarget(2870,300)
-			elseif score == 27 then
-				spawnTarget(3850,900)
-			elseif score == 28 then
-				spawnTarget(3780,300)
-			elseif score == 29 then
-				spawnTarget(3670,0)
-			elseif score == 30 then
-				AddCaption(loc("Last Target!"));
-				spawnTarget(3480,1200)
-			end
-		else
-			if not game_lost then
-			-- Otherwise show that the goal was accomplished
-			ShowMission(loc("Sniper Training"), loc("Aiming Practice"), loc("Congratulations! You've eliminated all targets|within the allowed time frame."), 0, 0)
-			-- Also let the hogs shout "victory!"
-			PlaySound(sndVictory)
-			-- Save the time left so we may keep it.
-			time_goal = TurnTimeLeft
-			end
-		end
-	end
-end
-
--- This function calculates the final score of the player and provides some texts and
--- data for the final stats screen
-function generateStats()
-	local accuracy = (score/shots)*100
-	local end_score_targets = (score * 200)
-	local end_score_overall
-	if not game_lost then
-		local end_score_time = math.ceil(time_goal/5)
-		local end_score_accuracy = math.ceil(accuracy * 100)
-		end_score_overall = end_score_time + end_score_targets + end_score_accuracy
-
-		SendStat(siGameResult, loc("You have successfully finished the sniper rifle training!"))
-		SendStat(siCustomAchievement, string.format(loc("You have destroyed %d of %d targets (+%d points)."), score, score_goal, end_score_targets))
-		SendStat(siCustomAchievement, string.format(loc("You have made %d shots."), shots))
-		SendStat(siCustomAchievement, string.format(loc("Accuracy bonus: +%d points"), end_score_accuracy))
-		SendStat(siCustomAchievement, string.format(loc("You had %.2fs remaining on the clock (+%d points)."), (time_goal/1000), end_score_time))
-	else
-		SendStat(siGameResult, loc("You lose!"))
-	
-		SendStat(siCustomAchievement, string.format(loc("You have destroyed %d of %d targets (+%d points)."), score, score_goal, end_score_targets))
-		SendStat(siCustomAchievement, string.format(loc("You have made %d shots."), shots))
-		end_score_overall = end_score_targets
-	end
-	SendStat(siPlayerKills, tostring(end_score_overall), loc("Sniperz"))
-	SendStat(siPointType, loc("points"))
-end
+-- Hedgewars SniperRifle Training
+-- Scripting Example
+
+-- Lines such as this one are comments - they are ignored
+-- by the game, no matter what kind of text is in there.
+-- It's also possible to place a comment after some real
+-- instruction as you see below. In short, everything
+-- following "--" is ignored.
+
+---------------------------------------------------------------
+-- At first we implement the localization library using loadfile.
+-- This allows us to localize strings without needing to think
+-- about translations.
+-- We can use the function loc(text) to localize a string.
+
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+
+-- This variable will hold the number of destroyed targets.
+local score = 0
+-- This variable will hold the number of shots from the sniper rifle
+local shots = 0
+-- This variable represents the number of targets to destroy.
+local score_goal = 31
+-- This variable controls how many milliseconds/ticks we'd
+-- like to wait before we end the round once all targets
+-- have been destroyed.
+local end_timer = 1000 -- 1000 ms = 1 s
+-- This variable is set to true if the game is lost (i.e.
+-- time runs out).
+local game_lost = false
+-- This variable will point to the hog's gear
+local player = nil
+-- This variable will grab the time left at the end of the round
+local time_goal = 0
+
+local target = nil
+
+local last_hit_time = 0
+-- This is a custom function to make it easier to
+-- spawn more targets with just one line of code
+-- You may define as many custom functions as you
+-- like.
+function spawnTarget(x, y)
+	-- add a new target gear
+	target = AddGear(x, y, gtTarget, 0, 0, 0, 0)
+	-- have the camera move to the target so the player knows where it is
+	FollowGear(target)
+end
+
+function blowUp(x, y)
+	-- adds some TNT
+	gear = AddGear(x, y, gtDynamite, 0, 0, 0, 0)
+end
+
+function onNewTurn()
+	SetWeapon(amSniperRifle)
+end
+
+-- This function is called before the game loads its
+-- resources.
+-- It's one of the predefined function names that will
+-- be called by the game. They give you entry points
+-- where you're able to call your own code using either
+-- provided instructions or custom functions.
+function onGameInit()
+	-- At first we have to overwrite/set some global variables
+	-- that define the map, the game has to load, as well as
+	-- other things such as the game rules to use, etc.
+	-- Things we don't modify here will use their default values.
+
+	-- The base number for the random number generator
+	Seed = 0
+	-- Game settings and rules
+	GameFlags = gfMultiWeapon + gfOneClanMode + gfArtillery
+	-- The time the player has to move each round (in ms)
+	TurnTime = 150000
+	-- The frequency of crate drops
+	CaseFreq = 0
+	-- The number of mines being placed
+	MinesNum = 0
+	-- The number of explosives being placed
+	Explosives = 0
+	-- The delay between each round
+	Delay = 0
+	-- The map to be played
+	Map = "Ropes"
+	-- The theme to be used
+	Theme = "Golf"
+
+	-- Create the player team
+	AddTeam(loc("Sniperz"), 14483456, "Simple", "Island", "Default")
+	-- And add a hog to it
+	player = AddHog(loc("Hunter"), 0, 1, "Sniper")
+	SetGearPosition(player, 602, 1465)
+end
+
+-- This function is called when the round starts
+-- it spawns the first target that has to be destroyed.
+-- In addition it shows the scenario goal(s).
+function onGameStart()
+	-- Disable graph in stats screen
+	SendHealthStatsOff()
+	-- Spawn the first target.
+	spawnTarget(860,1020)
+
+	-- Show some nice mission goals.
+	-- Parameters are: caption, sub caption, description,
+	-- extra text, icon and time to show.
+	-- A negative icon parameter (-n) represents the n-th weapon icon
+	-- A positive icon paramter (n) represents the (n+1)-th mission icon
+	-- A timeframe of 0 is replaced with the default time to show.
+	ShowMission(loc("Sniper Training"), loc("Aiming Practice"), loc("Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."), -amSniperRifle, 0)
+end
+
+-- This function is called every game tick.
+-- Note that there are 1000 ticks within one second.
+-- You shouldn't try to calculate too complicated
+-- code here as this might slow down your game.
+function onGameTick20()
+	if game_lost then
+		return
+	end
+	-- after a target is destroyed, show hog, then target
+	if (target ~= nil) and (TurnTimeLeft + 1300 < last_hit_time) then
+		-- move camera to the target
+		FollowGear(target)
+	elseif TurnTimeLeft + 300 < last_hit_time then
+		-- move camera to the hog
+		FollowGear(player)
+	end
+	-- If time's up, set the game to be lost.
+	-- We actually check the time to be "1 ms" as it
+	-- will be at "0 ms" right at the start of the game.
+	if TurnTimeLeft < 40 and TurnTimeLeft > 0 and score < score_goal and game_lost == false then
+		game_lost = true
+		-- ... and show a short message.
+		AddCaption(loc("Time's up!"))
+		ShowMission(loc("Sniper Training"), loc("Aiming Practice"), loc("Oh no! Time's up! Just try again."), -amSkip, 0)
+		-- and generate the stats and go to the stats screen
+		generateStats()
+		EndGame()
+		-- Just to be sure set the goal time to 1 ms
+		time_goal = 1
+	end
+	-- If the goal is reached or we've lost ...
+	if score == score_goal or game_lost then
+		-- ... check to see if the time we'd like to
+		-- wait has passed and then ...
+		if end_timer == 0 then
+			-- ... end the game ...
+			generateStats()
+			EndGame()
+		else
+			-- ... or just lower the timer by 1.
+			-- Reset the time left to stop the timer
+			TurnTimeLeft = time_goal
+		end
+        end_timer = end_timer - 20
+	end
+end
+
+-- This function is called when the game is initialized
+-- to request the available ammo and probabilities
+function onAmmoStoreInit()
+	-- add an unlimited supply of shotgun ammo
+	SetAmmo(amSniperRifle, 9, 0, 0, 0)
+end
+
+-- This function is called when a new gear is added.
+-- We use it to count the number of shots, which we
+-- in turn use to calculate the final score and stats
+function onGearAdd(gear)
+	if GetGearType(gear) == gtSniperRifleShot then
+		shots = shots + 1
+	end
+end
+
+-- This function is called before a gear is destroyed.
+-- We use it to count the number of targets destroyed.
+function onGearDelete(gear)
+
+	if GetGearType(gear) == gtCase then
+		game_lost = true
+		return
+	end
+
+	if (GetGearType(gear) == gtTarget) then
+		-- remember when the target was hit for adjusting the camera
+		last_hit_time = TurnTimeLeft
+		-- Add one point to our score/counter
+		score = score + 1
+		-- If we haven't reached the goal ...
+		if score < score_goal then
+			-- ... spawn another target.
+			if score == 1 then
+				spawnTarget(1520,1350)
+			elseif score == 2 then
+				spawnTarget(1730,1040)
+			elseif score == 3 then
+				spawnTarget(2080,780)
+			elseif score == 4 then
+				AddCaption(loc("Good so far!") .. " " .. loc("Keep it up!"));
+				blowUp(1730,1226)
+				blowUp(1440,1595)
+				blowUp(1527,1575)
+				blowUp(1614,1595)
+				blowUp(1420,1675)
+				blowUp(1527,1675)
+				blowUp(1634,1675)
+				blowUp(1440,1755)
+				blowUp(1527,1775)
+				blowUp(1614,1755)
+				spawnTarget(1527,1667)
+			elseif score == 5 then
+				spawnTarget(1527,1667)
+			elseif score == 6 then
+				spawnTarget(2175,1300)
+			elseif score == 7 then
+				spawnTarget(2250,940)
+			elseif score == 8 then
+				spawnTarget(2665,1540)
+			elseif score == 9 then
+				spawnTarget(3040,1160)
+			elseif score == 10 then
+				spawnTarget(2930,1500)
+			elseif score == 11 then
+				AddCaption(loc("This one's tricky."));
+				spawnTarget(700,720)
+			elseif score == 12 then
+				AddCaption(loc("Well done."));
+				blowUp(914,1222)
+				blowUp(1050,1222)
+				blowUp(1160,1008)
+				blowUp(1160,1093)
+				blowUp(1160,1188)
+				blowUp(375,911)
+				blowUp(510,911)
+				blowUp(640,911)
+				blowUp(780,911)
+				blowUp(920,911)
+				blowUp(1060,913)
+				blowUp(1198,913)
+				spawnTarget(1200,730)
+			elseif score == 13 then
+				spawnTarget(1200,830)
+			elseif score == 14 then
+				spawnTarget(1430,450)
+			elseif score == 15 then
+				spawnTarget(796,240)
+			elseif score == 16 then
+				spawnTarget(300,10)
+			elseif score == 17 then
+				spawnTarget(2080,820)
+			elseif score == 18 then
+				AddCaption(loc("Demolition is fun!"));
+				blowUp(2110,920)
+				blowUp(2210,920)
+				blowUp(2200,305)
+				blowUp(2300,305)
+				blowUp(2300,400)
+				blowUp(2300,500)
+				blowUp(2300,600)
+				blowUp(2300,700)
+				blowUp(2300,800)
+				blowUp(2300,900)
+				blowUp(2401,305)
+				blowUp(2532,305)
+				blowUp(2663,305)
+				spawnTarget(2300,760)
+			elseif score == 19 then
+				spawnTarget(2300,760)
+			elseif score == 20 then
+				spawnTarget(2738,190)
+			elseif score == 21 then
+				spawnTarget(2590,-100)
+			elseif score == 22 then
+				AddCaption(loc("Will this ever end?"));
+				blowUp(2790,305)
+				blowUp(2930,305)
+				blowUp(3060,305)
+				blowUp(3190,305)
+				blowUp(3310,305)
+				blowUp(3393,613)
+				blowUp(2805,370)
+				blowUp(2805,500)
+				blowUp(2805,630)
+				blowUp(2805,760)
+				blowUp(2805,890)
+				blowUp(3258,370)
+				blowUp(3258,475)
+				blowUp(3264,575)
+				spawnTarget(3230,240)
+			elseif score == 23 then
+				spawnTarget(3230,290)
+			elseif score == 24 then
+				spawnTarget(3670,250)
+			elseif score == 25 then
+				spawnTarget(2620,-100)
+			elseif score == 26 then
+				spawnTarget(2870,300)
+			elseif score == 27 then
+				spawnTarget(3850,900)
+			elseif score == 28 then
+				spawnTarget(3780,300)
+			elseif score == 29 then
+				spawnTarget(3670,0)
+			elseif score == 30 then
+				AddCaption(loc("Last Target!"));
+				spawnTarget(3480,1200)
+			end
+		else
+			if not game_lost then
+			-- Otherwise show that the goal was accomplished
+			ShowMission(loc("Sniper Training"), loc("Aiming Practice"), loc("Congratulations! You've eliminated all targets|within the allowed time frame."), 0, 0)
+			-- Also let the hogs shout "victory!"
+			PlaySound(sndVictory)
+			-- Save the time left so we may keep it.
+			time_goal = TurnTimeLeft
+			end
+		end
+	end
+end
+
+-- This function calculates the final score of the player and provides some texts and
+-- data for the final stats screen
+function generateStats()
+	local accuracy = (score/shots)*100
+	local end_score_targets = (score * 200)
+	local end_score_overall
+	if not game_lost then
+		local end_score_time = math.ceil(time_goal/5)
+		local end_score_accuracy = math.ceil(accuracy * 100)
+		end_score_overall = end_score_time + end_score_targets + end_score_accuracy
+
+		SendStat(siGameResult, loc("You have successfully finished the sniper rifle training!"))
+		SendStat(siCustomAchievement, string.format(loc("You have destroyed %d of %d targets (+%d points)."), score, score_goal, end_score_targets))
+		SendStat(siCustomAchievement, string.format(loc("You have made %d shots."), shots))
+		SendStat(siCustomAchievement, string.format(loc("Accuracy bonus: +%d points"), end_score_accuracy))
+		SendStat(siCustomAchievement, string.format(loc("You had %.2fs remaining on the clock (+%d points)."), (time_goal/1000), end_score_time))
+	else
+		SendStat(siGameResult, loc("You lose!"))
+
+		SendStat(siCustomAchievement, string.format(loc("You have destroyed %d of %d targets (+%d points)."), score, score_goal, end_score_targets))
+		SendStat(siCustomAchievement, string.format(loc("You have made %d shots."), shots))
+		end_score_overall = end_score_targets
+	end
+	SendStat(siPlayerKills, tostring(end_score_overall), loc("Sniperz"))
+	SendStat(siPointType, loc("points"))
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Missions/Training/Challenge_-_Speed_Shoppa_-_Hedgelove.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,38 @@
+HedgewarsScriptLoad("/Scripts/SpeedShoppa.lua")
+
+local params = {}
+params.missionTitle = loc("Shoppa Love")
+params.teamName = loc("Team of Hearts")
+params.hogName = loc("Heartful")
+params.teamFlag = "cm_iluvu"
+params.teamGrave = "heart"
+params.hogHat = "pinksunhat"
+params.crateType = "health"
+params.faceLeft = true
+
+params.time = 45000
+params.map = "Hedgelove"
+params.theme = "Nature"
+
+params.hog_x = 410
+params.hog_y = 934
+params.crates = {
+	{ x = 183, y = 710 },
+	{ x = 202, y = 519 },
+	{ x = 336, y = 356 },
+	{ x = 658, y = 363 },
+	{ x = 1029, y = 39 },
+	{ x = 758, y = 879 },
+	{ x = 1324, y = 896 },
+	{ x = 1410, y = 390 },
+	{ x = 1746, y = 348 },
+	{ x = 1870, y = 538 },
+	{ x = 1884, y = 723 },
+	{ x = 1682, y = 970 },
+}
+params.extra_onGameStart = function()
+	PlaceGirder(394, 1000, 0)
+	PlaceGirder(1696, 1000, 0)
+end
+
+SpeedShoppaMission(params)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Missions/Training/Challenge_-_Speed_Shoppa_-_Ropes.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,43 @@
+HedgewarsScriptLoad("/Scripts/SpeedShoppa.lua")
+
+local params = {}
+params.missionTitle = loc("Ropes and Crates")
+params.teamName = loc("Shoppa Union")
+params.hogName = loc("Hook")
+params.teamFlag = "cm_shoppa"
+params.hogHat = "NoHat"
+
+params.time = 115000
+params.map = "Ropes"
+params.theme = "City"
+
+params.hog_x = 3754
+params.hog_y = 1742
+params.crates = {
+	{ x = 3533, y = 1404 },
+	{ x = 3884, y = 1048 },
+	{ x = 3366, y = 664 },
+	{ x = 3162, y = 630 },
+	{ x = 2872, y = 402 },
+	{ x = 3812, y = 322 },
+	{ x = 3685, y = 34 },
+	{ x = 3324, y = 540 },
+	{ x = 2666, y = 224 },
+	{ x = 2380, y = 1002 },
+	{ x = 2224, y = 1008 },
+	{ x = 2226, y = 854 },
+	{ x = 3274, y = 1754 },
+	{ x = 3016, y = 1278 },
+	{ x = 2756, y = 1716 },
+	{ x = 2334, y = 1756 },
+	{ x = 1716, y = 1752 },
+	{ x = 1526, y = 1464 },
+	{ x = 356, y = 1734 },
+	{ x = 598, y = 1444 },
+	{ x = 1084, y = 1150 },
+	{ x = 358, y = 834 },
+	{ x = 936, y = 200 },
+	{ x = 1540, y = 514 },
+}
+
+SpeedShoppaMission(params)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Missions/Training/Challenge_-_Speed_Shoppa_-_ShoppaKing.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,54 @@
+HedgewarsScriptLoad("/Scripts/SpeedShoppa.lua")
+
+local params = {}
+params.missionTitle = loc("The Customer is King")
+params.teamName = loc("Shoppa Union")
+params.hogName = loc("King Customer")
+params.teamFlag = "cm_shoppa"
+params.teamGrave = "money"
+params.hogHat = "crown"
+
+params.time = 160000
+params.map = "ShoppaKing"
+params.theme = "Castle"
+
+params.hog_x = 543
+params.hog_y = 1167
+params.crates = {
+	{ x = 170, y = 172 },
+	{ x = 216, y = 478 },
+	{ x = 616, y = 966 },
+	{ x = 291, y = 1898 },
+	{ x = 486, y = 1965 },
+	{ x = 852, y = 1289 },
+	{ x = 1224, y = 1625 },
+	{ x = 925, y = 584 },
+	{ x = 2013, y = 141 },
+	{ x = 2250, y = 351 },
+	{ x = 2250, y = 537 },
+	{ x = 2472, y = 513 },
+	{ x = 1974, y = 459 },
+	{ x = 1995, y = 1068 },
+	{ x = 2385, y = 1788 },
+	{ x = 1698, y = 1725 },
+	{ x = 2913, y = 1092 },
+	{ x = 3972, y = 1788 },
+	{ x = 3762, y = 1635 },
+	{ x = 2577, y = 1473 },
+	{ x = 3612, y = 1068 },
+	{ x = 3945, y = 687 },
+	{ x = 2883, y = 618 },
+	{ x = 3543, y = 471 },
+	{ x = 3636, y = 306 },
+	{ x = 3210, y = 321 },
+	{ x = 3426, y = 126 },
+	{ x = 3033, y = 1590 },
+	{ x = 3774, y = 1341 },
+	{ x = 1254, y = 297 },
+	{ x = 1300, y = 1022 },
+	{ x = 1410, y = 1292 },
+	{ x = 868, y = 1812 },
+	{ x = 3426, y = 954 },
+}
+
+SpeedShoppaMission(params)
--- a/share/hedgewars/Data/Missions/Training/ClimbHome.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/ClimbHome.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -1,11 +1,18 @@
 HedgewarsScriptLoad("/Scripts/Locale.lua")
 
-isSinglePlayer = true
+local isSinglePlayer = true
 
 -- trying to allow random theme, but fixed theme objects...
 -- Also skip some ugly themes, or ones where the sky is "meh"
 --local themes = { "Art","Cake","City","EarthRise","Halloween","Olympics","Underwater","Bamboo","Castle","Compost","Eyes","Hell","Planes","Bath","Cave","CrazyMission","Freeway","Island","Sheep","Blox","Cheese","Deepspace","Fruit","Jungle","Snow","Brick","Christmas","Desert","Golf","Nature","Stage" }
 local themes = {"Christmas","Hell","Bamboo","City","Island","Bath","Compost","Jungle","Desert","Nature","Olympics","Brick","EarthRise","Sheep","Cake","Freeway","Snow","Castle","Fruit","Stage","Cave","Golf","Cheese","Halloween"}
+local showWaterStats = true -- uses the AI team to draw water height.
+local scaleGraph = true
+local totalHedgehogs = 0
+local HH = {}
+local teams = {}
+local dummyHog = nil
+
 
 function onGameInit()
     -- Ensure people get same map for same theme
@@ -16,10 +23,19 @@
     DisableGameFlags(gfBottomBorder+gfBorder)
     CaseFreq = 0
     Explosives = 0
+    MineDudPercent = 0
     Map = "ClimbHome"
     AddTeam(loc("Lonely Hog"), 0xDD0000, "Simple", "Island", "Default")
     player = AddHog(loc("Climber"), 0, 1, "NoHat")
-    AddTeam(loc("Water Gods"), 0x4980C1, "Simple", "Island", "Default")
-    dummyHog = AddHog("Poseidon", 5, 1, "NoHat")
-    --HideHog(dummyHog)
+    if showWaterStats then
+        AddTeam(" ", 0x545C9D, "Simple", "Island", "Default")
+    elseif scaleGraph then
+        AddTeam(" ", 0x050505, "Simple", "Island", "Default")
+    end
+    if showWaterStats or scaleGraph then
+        dummyHog = AddHog(" ", 0, 1, "NoHat")
+        HH[dummyHog] = nil
+        totalHedgehogs = totalHedgehogs - 1
+        SendStat(siClanHealth, tostring(32640), " ")
+    end
 end
--- a/share/hedgewars/Data/Missions/Training/Target_Practice_-_Bazooka_easy.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/Target_Practice_-_Bazooka_easy.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -3,7 +3,7 @@
 local params = {
 	ammoType = amBazooka,
 	gearType = gtShell,
-	missionTitle = "Target Practice: Bazooka (easy)",
+	missionTitle = loc("Target Practice: Bazooka (easy)"),
 	wind = 50,
 	solidLand = true,
 	map = "Lonely_Island",
--- a/share/hedgewars/Data/Missions/Training/Target_Practice_-_Bazooka_hard.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/Target_Practice_-_Bazooka_hard.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -3,7 +3,7 @@
 local params = {
 	ammoType = amBazooka,
 	gearType = gtShell,
-	missionTitle = "Target Practice: Bazooka (hard)",
+	missionTitle = loc("Target Practice: Bazooka (hard)"),
 	wind = 20,
 	solidLand = true,
 	artillery = true,
--- a/share/hedgewars/Data/Missions/Training/Target_Practice_-_Cluster_Bomb.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/Target_Practice_-_Cluster_Bomb.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -3,7 +3,7 @@
 local params = {
 	ammoType = amClusterBomb,
 	gearType = gtClusterBomb,
-	missionTitle = "Cluster Bomb Training",
+	missionTitle = loc("Cluster Bomb Training"),
 	solidLand = false,
 	map = "Trash",
 	theme = "Golf",
--- a/share/hedgewars/Data/Missions/Training/Target_Practice_-_Grenade_easy.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/Target_Practice_-_Grenade_easy.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -3,7 +3,7 @@
 local params = {
 	ammoType = amGrenade,
 	gearType = gtGrenade,
-	missionTitle = "Target Practice: Grenade (easy)",
+	missionTitle = loc("Target Practice: Grenade (easy)"),
 	solidLand = true,
 	artillery = true,
 	map = "SB_Crystal",
--- a/share/hedgewars/Data/Missions/Training/Target_Practice_-_Grenade_hard.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/Target_Practice_-_Grenade_hard.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -3,7 +3,7 @@
 local params = {
 	ammoType = amGrenade,
 	gearType = gtGrenade,
-	missionTitle = "Target Practice: Grenade (hard)",
+	missionTitle = loc("Target Practice: Grenade (hard)"),
 	solidLand = true,
 	artillery = true,
 	map = "SB_Crystal",
--- a/share/hedgewars/Data/Missions/Training/Target_Practice_-_Homing_Bee.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/Target_Practice_-_Homing_Bee.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -3,7 +3,7 @@
 local params = {
 	ammoType = amBee,
 	gearType = gtBee,
-	missionTitle = "Target Practice: Homing Bee",
+	missionTitle = loc("Target Practice: Homing Bee"),
 	solidLand = true,
 	map = "Hedgewars",
 	theme = "Nature",
--- a/share/hedgewars/Data/Missions/Training/Target_Practice_-_Shotgun.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/Target_Practice_-_Shotgun.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -3,7 +3,7 @@
 local params = {
 	ammoType = amShotgun,
 	gearType = gtShotgunShot,
-	missionTitle = "Target Practice: Shotgun",
+	missionTitle = loc("Target Practice: Shotgun"),
 	solidLand = false,
 	map = "SB_Haunty",
 	theme = "Halloween",
--- a/share/hedgewars/Data/Missions/Training/User_Mission_-_Bamboo_Thicket.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/User_Mission_-_Bamboo_Thicket.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -21,7 +21,7 @@
 	SuddenDeathTurns = 99999
 
 	AddTeam(loc("Pathetic Resistance"), 14483456, "Simple", "Island", "Default")
-	player = AddHog("Ikeda", 0, 10, "StrawHat")
+	player = AddHog(loc("Ikeda"), 0, 10, "StrawHat")
 			
 	AddTeam(loc("Cybernetic Empire"), 	1175851, "Simple", "Island", "Default")
 	enemy = AddHog(loc("Unit 835"), 1, 10, "cyborg1")
--- a/share/hedgewars/Data/Missions/Training/User_Mission_-_Newton_and_the_Hammock.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/User_Mission_-_Newton_and_the_Hammock.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -22,7 +22,7 @@
 	Theme = "Nature"
 
 	AddTeam(loc("Pathetic Resistance"), 14483456, "Simple", "Island", "Default")
-	player = AddHog("Ikeda", 0, 48, "StrawHat")
+	player = AddHog(loc("Ikeda"), 0, 48, "StrawHat")
 			
 	AddTeam(loc("Cybernetic Empire"), 	1175851, "Simple", "Island", "Default")
 	enemy = AddHog(loc("Unit") .. " 811", 1, 100, "cyborg1")
--- a/share/hedgewars/Data/Missions/Training/User_Mission_-_Nobody_Laugh.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/User_Mission_-_Nobody_Laugh.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -27,21 +27,21 @@
 	SetGearPosition(hhs[2], 1332, 451)
 
 	AddTeam(loc("Clowns"), 1175851, "Duck2", "Tank", "Mobster", "cm_spider")
-	hhs[3] = AddHog("Poison", 5, 100, "WhySoSerious")
+	hhs[3] = AddHog(loc("Poison"), 5, 100, "WhySoSerious")
 	SetGearPosition(hhs[3], 1133, 446)
-	hhs[4] = AddHog("Bobo", 5, 100, "clown")
+	hhs[4] = AddHog(loc("Bobo"), 5, 100, "clown")
 	SetGearPosition(hhs[4], 1215, 553)
-	hhs[5] = AddHog("Copper", 5, 10, "clown-copper")
+	hhs[5] = AddHog(loc("Copper"), 5, 10, "clown-copper")
 	SetGearPosition(hhs[5], 414, 376)
-	hhs[6] = AddHog("Derp", 5, 100, "clown-crossed")
+	hhs[6] = AddHog(loc("Derp"), 5, 100, "clown-crossed")
 	SetGearPosition(hhs[6], 1590, 886)
-	hhs[7] = AddHog("Eckles", 5, 100, "clown-copper")
+	hhs[7] = AddHog(loc("Eckles"), 5, 100, "clown-copper")
 	SetGearPosition(hhs[7], 772, 754)
-	hhs[8] = AddHog("Frank", 5, 50, "clown-copper")
+	hhs[8] = AddHog(loc("Frank"), 5, 50, "clown-copper")
 	SetGearPosition(hhs[8], 1688, 714)
-	hhs[9] = AddHog("Harry", 5, 50, "clown-copper")
+	hhs[9] = AddHog(loc("Harry"), 5, 50, "clown-copper")
 	SetGearPosition(hhs[9], 1932, 837)
-	hhs[10] = AddHog("Igmund", 5, 50, "WhySoSerious")
+	hhs[10] = AddHog(loc("Igmund"), 5, 50, "WhySoSerious")
 	SetGearPosition(hhs[10], 1601, 733)
 
 end
--- a/share/hedgewars/Data/Missions/Training/User_Mission_-_RCPlane_Challenge.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/User_Mission_-_RCPlane_Challenge.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -1,490 +1,490 @@
-HedgewarsScriptLoad("/Scripts/Locale.lua")
-
-local player = nil
-local RCGear = nil
-local planesUsed = 0
-local planeTimer = 0
-local planeUhOh = false
-local cratesLeft = 0
-local crateStreak = 0
-local longestCrateStreak = 0
-local commentTimer = 0
-local missiles = 0
-local totalMissiles = 0
-local missileScanTimer = 0
-local nextComment = sndNone
-
-function onGameInit()
-
-	Seed = 1
-	GameFlags = gfInfAttack + gfInvulnerable + gfOneClanMode + gfSolidLand
-
-	TurnTime = 90 * 1000
-
-	Map = "Ropes"
-	Theme = "Eyes"
-
-	CaseFreq = 0
-	MinesNum = 0
-	Explosives = 0
-
-	AddTeam(loc("Wannabe Flyboys"), 14483456, "Simple", "Island", "Default", "Hedgewars")
-	player = AddHog(loc("Ace"), 0, 80, "Gasmask")
-	SetGearPosition(player, 1380, 1500)
-
-end
-
-
-
-function onGameStart()
-
-	SendHealthStatsOff()
-
-	ShowMission     (
-                                loc("RC PLANE TRAINING"),
-                                loc("a Hedgewars challenge"),
-
-                                loc("Collect or destroy all the health crates.") .. "|" ..
-                                loc("Compete to use as few planes as possible!") .. "|" ..
-								"", -amRCPlane, 4000
-                                )
-
-	PlaceGirder(2192, 508, 6)
-	PlaceGirder(2192, 670, 6)
-	PlaceGirder(2193, 792, 2)
-	PlaceGirder(2100, 825, 4)
-	PlaceGirder(2009, 899, 6)
-	PlaceGirder(2084, 992, 4)
-	PlaceGirder(2145, 1087, 6)
-	PlaceGirder(2199, 1235, 5)
-	PlaceGirder(2308, 1296, 0)
-	PlaceGirder(2424, 1234, 7)
-	PlaceGirder(2473, 1129, 2)
-	PlaceGirder(2437, 1046, 1)
-	PlaceGirder(2409, 927, 6)
-	PlaceGirder(2408, 763, 6)
-	PlaceGirder(2404, 540, 6)
-	PlaceGirder(2426, 423, 3)
-	PlaceGirder(2550, 400, 4)
-	PlaceGirder(2668, 425, 1)
-	PlaceGirder(2707, 541, 6)
-	PlaceGirder(2706, 703, 6)
-	PlaceGirder(2705, 867, 6)
-	PlaceGirder(2779, 962, 4)
-	PlaceGirder(2894, 924, 3)
-	PlaceGirder(2908, 802, 6)
-	PlaceGirder(2907, 639, 6)
-	PlaceGirder(3052, 566, 4)
-	PlaceGirder(2971, 394, 4)
-	PlaceGirder(3103, 448, 7)
-	PlaceGirder(3047, 654, 0)
-	PlaceGirder(3043, 746, 6)
-	PlaceGirder(3265, 1583, 6)
-	PlaceGirder(3256, 1491, 4)
-	PlaceGirder(3187, 1401, 6)
-	PlaceGirder(3326, 1400, 6)
-	PlaceGirder(774, 530, 5)
-	PlaceGirder(922, 595, 4)
-	PlaceGirder(1079, 533, 7)
-	PlaceGirder(1139, 386, 6)
-	PlaceGirder(1074, 237, 5)
-	PlaceGirder(723, 381, 6)
-	PlaceGirder(781, 229, 7)
-	PlaceGirder(927, 746, 6)
-	PlaceGirder(874, 736, 0)
-	PlaceGirder(982, 737, 0)
-	PlaceGirder(2430, 1730, 4)
-
-	PlaceGirder(1613, 1104, 7)
-	PlaceGirder(1564, 1256, 6)
-	PlaceGirder(1643, 1341, 5)
-	PlaceGirder(1780, 1372, 4)
-	PlaceGirder(1869, 1296, 7)
-	PlaceGirder(1858, 1163, 5)
-	PlaceGirder(1739, 1044, 5)
-	PlaceGirder(1621, 926, 5)
-	PlaceGirder(1597, 985, 5)
-	PlaceGirder(1449, 939, 4)
-	PlaceGirder(1473, 874, 4)
-	PlaceGirder(2092, 1352, 7)
-	PlaceGirder(2145, 1444, 7)
-	PlaceGirder(2004, 1443, 3)
-	PlaceGirder(1978, 1523, 2)
-	PlaceGirder(2021, 1596, 1)
-	PlaceGirder(2103, 1625, 0)
-	PlaceGirder(2208, 1551, 7)
-	PlaceGirder(2327, 1431, 7)
-	PlaceGirder(2395, 1478, 6)
-	PlaceGirder(2396, 1600, 2)
-	PlaceGirder(2495, 1285, 6)
-	PlaceGirder(2494, 1408, 2)
-	PlaceGirder(2547, 530, 0)
-
-	PlaceGirder(2451, 1551, 0)
-	PlaceGirder(2551, 706, 6)
-	PlaceGirder(2551, 869, 6)
-	PlaceGirder(2623, 1016, 5)
-	PlaceGirder(2773, 1083, 4)
-	PlaceGirder(2924, 1019, 7)
-	PlaceGirder(2568, 1491, 7)
-	PlaceGirder(2618, 1346, 6)
-	PlaceGirder(2674, 1195, 7)
-	PlaceGirder(2822, 1142, 4)
-	PlaceGirder(2963, 1069, 7)
-	PlaceGirder(3067, 938, 5)
-	PlaceGirder(2803, 1373, 2)
-	PlaceGirder(2811, 1559, 2)
-
-	tempG = SpawnHealthCrate(930, 557)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(979, 692)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(876, 703)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(2309, 1260)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(1733, 1127)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(1738, 1320)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(3249, 1460)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(3051, 617)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(2972, 353)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(2548, 358)
-
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(2090, 1580)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(1752, 1753)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(1865, 1758)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(1985, 1760)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(2429, 1760)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(2810, 1480)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(2800, 1277)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(2806, 1107)
-	SetHealth(tempG, 25)
-
-	PlaceGirder(1897, 903, 6)
-	PlaceGirder(1916, 784, 3)
-	PlaceGirder(2010, 732, 4)
-	PlaceGirder(2082, 639, 6)
-	PlaceGirder(2081, 516, 2)
-	PlaceGirder(1985, 487, 4)
-	PlaceGirder(1862, 407, 5)
-	PlaceGirder(1855, 224, 7)
-	PlaceGirder(2006, 163, 4)
-	PlaceGirder(2128, 187, 1)
-	PlaceGirder(2251, 213, 4)
-	PlaceGirder(2413, 213, 4)
-	PlaceGirder(1952, 618, 0)
-	PlaceGirder(957, 1068, 4)
-	PlaceGirder(794, 1069, 4)
-	PlaceGirder(728, 1163, 6)
-	PlaceGirder(728, 1287, 2)
-	PlaceGirder(802, 1342, 4)
-	PlaceGirder(966, 1342, 4)
-	PlaceGirder(674, 1032, 1)
-	PlaceGirder(554, 1011, 4)
-	PlaceGirder(445, 1056, 3)
-	PlaceGirder(422, 1174, 6)
-	PlaceGirder(369, 1341, 5)
-	PlaceGirder(495, 1313, 5)
-	PlaceGirder(568, 1379, 3)
-	PlaceGirder(577, 1202, 2)
-	PlaceGirder(744, 1490, 5)
-	PlaceGirder(760, 1617, 7)
-	PlaceGirder(622, 1693, 4)
-	PlaceGirder(476, 1623, 5)
-	PlaceGirder(376, 1697, 1)
-	PlaceGirder(955, 1746, 2)
-	PlaceGirder(1025, 1746, 2)
-	PlaceGirder(1090, 1745, 2)
-	PlaceGirder(1156, 1746, 2)
-	PlaceGirder(3806, 1530, 2)
-	PlaceGirder(3880, 1464, 2)
-	PlaceGirder(3738, 1458, 2)
-	PlaceGirder(3806, 1390, 2)
-	PlaceGirder(3805, 1588, 0)
-	PlaceGirder(3676, 1609, 3)
-	PlaceGirder(3930, 1615, 1)
-	PlaceGirder(3719, 1295, 0)
-	PlaceGirder(3888, 1294, 0)
-	PlaceGirder(3661, 1385, 2)
-	PlaceGirder(3955, 1377, 2)
-	PlaceGirder(3982, 1518, 0)
-	PlaceGirder(3378, 440, 2)
-	PlaceGirder(3447, 492, 4)
-	PlaceGirder(3564, 529, 1)
-	PlaceGirder(3596, 647, 6)
-	PlaceGirder(3521, 740, 4)
-	PlaceGirder(3524, 838, 4)
-	PlaceGirder(3644, 819, 3)
-	PlaceGirder(3691, 708, 6)
-	PlaceGirder(3690, 545, 6)
-	PlaceGirder(3612, 433, 5)
-	PlaceGirder(3463, 383, 4)
-	PlaceGirder(2815, 122, 7)
-	PlaceGirder(2960, 72, 4)
-	PlaceGirder(3032, 123, 2)
-	PlaceGirder(3063, 174, 0)
-	PlaceGirder(3095, 124, 2)
-	PlaceGirder(3169, 71, 4)
-	PlaceGirder(3320, 124, 5)
-	PlaceGirder(3210, 179, 2)
-	PlaceGirder(2932, 181, 2)
-
-	tempG = SpawnHealthCrate(3804, 1461)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(3269, 1742)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(3066, 121)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(3207, 104)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(2928, 103)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(1997, 202)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(2253, 159)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(2132, 774)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(2549, 490)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(3527, 694)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(3777, 78)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(1124, 1746)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(1056, 1740)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(993, 1742)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(799, 1298)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(577, 1126)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(596, 1463)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(3854, 1043)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(1944, 567)
-	SetHealth(tempG, 25)
-	tempG = SpawnHealthCrate(338, 1748)
-	SetHealth(tempG, 25)
-
-
-end
-
---function onGameTick()
-
-	--if RCGear ~= nil then
-	--	AddCaption(GetTimer(RCGear))
-	--end
-
---end
-
-function onGameTick20()
-	if RCGear ~= nil then
-		if(GetTimer(RCGear) < 3000 and planeUhOh == false) then
-			PlaySound(sndUhOh, player)
-			planeUhOh = true
-		end
-		planeTimer = planeTimer + 20
-	end
-	if commentTimer > 0 then
-		commentTimer = commentTimer - 20
-	elseif(nextComment ~= sndNone) then
-		PlaySound(nextComment, player)
-		nextComment = sndNone
-	end
-	if missileScanTimer > 0 then
-		missileScanTimer = missileScanTimer - 20
-	else
-		if crateStreak == 0 and missiles == 3 then
-			PlaySound(sndMissed, player)
-			missiles = 4
-		end
-	end
-end
-
-function onNewTurn()
-	TurnTimeLeft = -1
-end
-
-function onGearAdd(gear)
-
-	if GetGearType(gear) == gtRCPlane then
-		RCGear = gear
-		planesUsed = planesUsed + 1
-		planeTimer = 0
-		missiles = 0
-	end
-
-	if GetGearType(gear) == gtCase then
-		cratesLeft = cratesLeft + 1
-	end
-
-	if GetGearType(gear) == gtAirBomb then
-		totalMissiles = totalMissiles + 1
-	end
-end
-
-function onGearDelete(gear)
-
-	if GetGearType(gear) == gtRCPlane then
-
-		RCGear = nil
-		planeUhOh = false
-		missiles = 0
-		AddCaption(string.format(loc("Planes used: %d"), planesUsed))
-
-		if(planeTimer < 2000 and crateStreak == 0) then
-			nextComment = sndStupid
-			commentTimer = math.min(2000-planeTimer, 800)
-		elseif(planeTimer < 5000 and crateStreak == 0) then
-			PlaySound(sndOops, player)
-		elseif(planesUsed == 72) then
-			PlaySound(sndStupid, player)
-		elseif(planesUsed == 50) then
-			PlaySound(sndNutter, player)
-		elseif(planesUsed == 30) then
-			PlaySound(sndOops, player)
-		end
-
-		crateStreak = 0
-
-	elseif GetGearType(gear) == gtAirBomb then
-		missiles = missiles + 1
-		missileScanTimer = 500
-
-	elseif GetGearType(gear) == gtCase then
-
-		cratesLeft = cratesLeft - 1
-		crateStreak = crateStreak + 1
-		if(crateStreak > longestCrateStreak) then
-			longestCrateStreak = crateStreak
-		end
-
-		AddCaption(string.format(loc("Crates left: %d"), cratesLeft))
-
-		if cratesLeft == 0 then
-
-			local rank = "unknown"
-			local color = 0xFFFFFFFF
-			local sound = sndVictory
-			if planesUsed >= 156 then
-				rank = loc("Destroyer of planes")	
-				color = 0xD06700FF
-				sound = sndLaugh
-			elseif planesUsed >= 98 then
-				rank = loc("Hopeless case")
-				color = 0xFF0000FF
-			elseif planesUsed >= 72 then
-				rank = loc("Drunk greenhorn")
-				color = 0xFF0040FF
-			elseif planesUsed >= 50 then
-				rank = loc("Greenhorn") -- a.k.a. "absolute beginner"
-				color = 0xFF0080FF
-			elseif planesUsed >= 39 then
-				rank = loc("Beginner")
-				color = 0xFF00BFFF
-			elseif planesUsed >= 30 then
-				rank = loc("Experienced beginner")
-				color = 0xFF00CCFF
-			elseif planesUsed >= 21 then
-				rank = loc("Below-average pilot")
-				color = 0xFF00FFFF
-			elseif planesUsed >= 17 then
-				rank = loc("Average pilot")				
-				color = 0xBF00FFFF
-			elseif planesUsed >= 13 then
-				rank = loc("Above-average pilot")
-				color = 0x8000FFFF
-			elseif planesUsed >= 8 then
-				rank = loc("Professional pilot")
-				color = 0x4000FFFF
-			elseif planesUsed >= 5 then
-				rank = loc("Professional stunt pilot")
-				color = 0x0000FFFF
-			elseif planesUsed >= 3 then
-				rank = loc("Elite pilot")
-				color = 0x0040FFFF
-			elseif planesUsed == 2 then
-				rank = loc("Upper-class elite pilot")
-				color = 0x0080FFFF
-			elseif planesUsed == 1 then
-				rank = loc("Top-class elite pilot")
-				color = 0x00FFFFFF
-				sound = sndFlawless
-			else
-				rank = loc("Cheater")
-				color = 0xFF0000FF
-				sound = sndCoward
-			end
-			AddCaption(string.format(loc("Rank: %s"), rank), color, capgrpMessage2)
-			SendStat(siCustomAchievement, string.format(loc("Your rank: %s"), rank))
-			if planesUsed == 1 then
-				AddCaption(loc("Flawless victory!"))
-				SendStat(siGameResult, loc("You have perfectly beaten the challenge!"))
-				SendStat(siCustomAchievement, loc("You have used only 1 RC plane. Outstanding!"))
-			else
-				AddCaption(loc("Victory!"))
-				SendStat(siGameResult, loc("You have finished the challenge!"))
-				SendStat(siCustomAchievement, string.format(loc("You have used %d RC planes."), planesUsed))
-			end
-		
-			if(totalMissiles > 1) then
-				SendStat(siCustomAchievement, string.format(loc("You have dropped %d missiles."), totalMissiles))
-			end
-
-			if(longestCrateStreak > 5) then
-				if(planesUsed == 1) then
-					SendStat(siCustomAchievement, string.format(loc("In your best (and only) flight you took out %d crates with one RC plane!"), longestCrateStreak))
-				else
-					SendStat(siCustomAchievement, string.format(loc("In your best flight you took out %d crates with one RC plane."), longestCrateStreak))
-				end
-			end
-
-			if(planesUsed == 2) then
-				SendStat(siCustomAchievement, loc("This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"))
-			end
-			if(planesUsed == 1) then
-				SendStat(siCustomAchievement, loc("Congratulations! You have truly mastered this challenge! Don't forget to save the demo."))
-				SendStat(siCustomAchievement, string.format(loc("You have gained an achievement: %s"), loc("Prestigious Pilot")))
-			end
-
-			ShowMission     (
-                                loc("CHALLENGE COMPLETE"),
-                                loc("Congratulations!"),
-                                string.format(loc("Planes used: %d"), planesUsed) .. "|" ..
-                                "", 0, 0
-                                )
-			SetState(player, gstWinner)
-			PlaySound(sound, player)
-
-
-			DismissTeam(loc("Wannabe Flyboys"))
-			EndGame()
-		end
-
-		if RCGear ~= nil then
-			SetTimer(RCGear, GetTimer(RCGear) + 10000)
-		end
-	end
-
-end
-
-function onAmmoStoreInit()
-	SetAmmo(amRCPlane, 9, 0, 0, 0)
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+
+local player = nil
+local RCGear = nil
+local planesUsed = 0
+local planeTimer = 0
+local planeUhOh = false
+local cratesLeft = 0
+local crateStreak = 0
+local longestCrateStreak = 0
+local commentTimer = 0
+local missiles = 0
+local totalMissiles = 0
+local missileScanTimer = 0
+local nextComment = sndNone
+
+function onGameInit()
+
+	Seed = 1
+	GameFlags = gfInfAttack + gfInvulnerable + gfOneClanMode + gfSolidLand
+
+	TurnTime = 90 * 1000
+
+	Map = "Ropes"
+	Theme = "Eyes"
+
+	CaseFreq = 0
+	MinesNum = 0
+	Explosives = 0
+
+	AddTeam(loc("Wannabe Flyboys"), 14483456, "Simple", "Island", "Default", "Hedgewars")
+	player = AddHog(loc("Ace"), 0, 80, "Gasmask")
+	SetGearPosition(player, 1380, 1500)
+
+end
+
+
+
+function onGameStart()
+
+	SendHealthStatsOff()
+
+	ShowMission     (
+                                loc("RC PLANE TRAINING"),
+                                loc("a Hedgewars challenge"),
+
+                                loc("Collect or destroy all the health crates.") .. "|" ..
+                                loc("Compete to use as few planes as possible!") .. "|" ..
+								"", -amRCPlane, 4000
+                                )
+
+	PlaceGirder(2192, 508, 6)
+	PlaceGirder(2192, 670, 6)
+	PlaceGirder(2193, 792, 2)
+	PlaceGirder(2100, 825, 4)
+	PlaceGirder(2009, 899, 6)
+	PlaceGirder(2084, 992, 4)
+	PlaceGirder(2145, 1087, 6)
+	PlaceGirder(2199, 1235, 5)
+	PlaceGirder(2308, 1296, 0)
+	PlaceGirder(2424, 1234, 7)
+	PlaceGirder(2473, 1129, 2)
+	PlaceGirder(2437, 1046, 1)
+	PlaceGirder(2409, 927, 6)
+	PlaceGirder(2408, 763, 6)
+	PlaceGirder(2404, 540, 6)
+	PlaceGirder(2426, 423, 3)
+	PlaceGirder(2550, 400, 4)
+	PlaceGirder(2668, 425, 1)
+	PlaceGirder(2707, 541, 6)
+	PlaceGirder(2706, 703, 6)
+	PlaceGirder(2705, 867, 6)
+	PlaceGirder(2779, 962, 4)
+	PlaceGirder(2894, 924, 3)
+	PlaceGirder(2908, 802, 6)
+	PlaceGirder(2907, 639, 6)
+	PlaceGirder(3052, 566, 4)
+	PlaceGirder(2971, 394, 4)
+	PlaceGirder(3103, 448, 7)
+	PlaceGirder(3047, 654, 0)
+	PlaceGirder(3043, 746, 6)
+	PlaceGirder(3265, 1583, 6)
+	PlaceGirder(3256, 1491, 4)
+	PlaceGirder(3187, 1401, 6)
+	PlaceGirder(3326, 1400, 6)
+	PlaceGirder(774, 530, 5)
+	PlaceGirder(922, 595, 4)
+	PlaceGirder(1079, 533, 7)
+	PlaceGirder(1139, 386, 6)
+	PlaceGirder(1074, 237, 5)
+	PlaceGirder(723, 381, 6)
+	PlaceGirder(781, 229, 7)
+	PlaceGirder(927, 746, 6)
+	PlaceGirder(874, 736, 0)
+	PlaceGirder(982, 737, 0)
+	PlaceGirder(2430, 1730, 4)
+
+	PlaceGirder(1613, 1104, 7)
+	PlaceGirder(1564, 1256, 6)
+	PlaceGirder(1643, 1341, 5)
+	PlaceGirder(1780, 1372, 4)
+	PlaceGirder(1869, 1296, 7)
+	PlaceGirder(1858, 1163, 5)
+	PlaceGirder(1739, 1044, 5)
+	PlaceGirder(1621, 926, 5)
+	PlaceGirder(1597, 985, 5)
+	PlaceGirder(1449, 939, 4)
+	PlaceGirder(1473, 874, 4)
+	PlaceGirder(2092, 1352, 7)
+	PlaceGirder(2145, 1444, 7)
+	PlaceGirder(2004, 1443, 3)
+	PlaceGirder(1978, 1523, 2)
+	PlaceGirder(2021, 1596, 1)
+	PlaceGirder(2103, 1625, 0)
+	PlaceGirder(2208, 1551, 7)
+	PlaceGirder(2327, 1431, 7)
+	PlaceGirder(2395, 1478, 6)
+	PlaceGirder(2396, 1600, 2)
+	PlaceGirder(2495, 1285, 6)
+	PlaceGirder(2494, 1408, 2)
+	PlaceGirder(2547, 530, 0)
+
+	PlaceGirder(2451, 1551, 0)
+	PlaceGirder(2551, 706, 6)
+	PlaceGirder(2551, 869, 6)
+	PlaceGirder(2623, 1016, 5)
+	PlaceGirder(2773, 1083, 4)
+	PlaceGirder(2924, 1019, 7)
+	PlaceGirder(2568, 1491, 7)
+	PlaceGirder(2618, 1346, 6)
+	PlaceGirder(2674, 1195, 7)
+	PlaceGirder(2822, 1142, 4)
+	PlaceGirder(2963, 1069, 7)
+	PlaceGirder(3067, 938, 5)
+	PlaceGirder(2803, 1373, 2)
+	PlaceGirder(2811, 1559, 2)
+
+	tempG = SpawnHealthCrate(930, 557)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(979, 692)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(876, 703)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(2309, 1260)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(1733, 1127)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(1738, 1320)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(3249, 1460)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(3051, 617)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(2972, 353)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(2548, 358)
+
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(2090, 1580)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(1752, 1753)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(1865, 1758)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(1985, 1760)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(2429, 1760)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(2810, 1480)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(2800, 1277)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(2806, 1107)
+	SetHealth(tempG, 25)
+
+	PlaceGirder(1897, 903, 6)
+	PlaceGirder(1916, 784, 3)
+	PlaceGirder(2010, 732, 4)
+	PlaceGirder(2082, 639, 6)
+	PlaceGirder(2081, 516, 2)
+	PlaceGirder(1985, 487, 4)
+	PlaceGirder(1862, 407, 5)
+	PlaceGirder(1855, 224, 7)
+	PlaceGirder(2006, 163, 4)
+	PlaceGirder(2128, 187, 1)
+	PlaceGirder(2251, 213, 4)
+	PlaceGirder(2413, 213, 4)
+	PlaceGirder(1952, 618, 0)
+	PlaceGirder(957, 1068, 4)
+	PlaceGirder(794, 1069, 4)
+	PlaceGirder(728, 1163, 6)
+	PlaceGirder(728, 1287, 2)
+	PlaceGirder(802, 1342, 4)
+	PlaceGirder(966, 1342, 4)
+	PlaceGirder(674, 1032, 1)
+	PlaceGirder(554, 1011, 4)
+	PlaceGirder(445, 1056, 3)
+	PlaceGirder(422, 1174, 6)
+	PlaceGirder(369, 1341, 5)
+	PlaceGirder(495, 1313, 5)
+	PlaceGirder(568, 1379, 3)
+	PlaceGirder(577, 1202, 2)
+	PlaceGirder(744, 1490, 5)
+	PlaceGirder(760, 1617, 7)
+	PlaceGirder(622, 1693, 4)
+	PlaceGirder(476, 1623, 5)
+	PlaceGirder(376, 1697, 1)
+	PlaceGirder(955, 1746, 2)
+	PlaceGirder(1025, 1746, 2)
+	PlaceGirder(1090, 1745, 2)
+	PlaceGirder(1156, 1746, 2)
+	PlaceGirder(3806, 1530, 2)
+	PlaceGirder(3880, 1464, 2)
+	PlaceGirder(3738, 1458, 2)
+	PlaceGirder(3806, 1390, 2)
+	PlaceGirder(3805, 1588, 0)
+	PlaceGirder(3676, 1609, 3)
+	PlaceGirder(3930, 1615, 1)
+	PlaceGirder(3719, 1295, 0)
+	PlaceGirder(3888, 1294, 0)
+	PlaceGirder(3661, 1385, 2)
+	PlaceGirder(3955, 1377, 2)
+	PlaceGirder(3982, 1518, 0)
+	PlaceGirder(3378, 440, 2)
+	PlaceGirder(3447, 492, 4)
+	PlaceGirder(3564, 529, 1)
+	PlaceGirder(3596, 647, 6)
+	PlaceGirder(3521, 740, 4)
+	PlaceGirder(3524, 838, 4)
+	PlaceGirder(3644, 819, 3)
+	PlaceGirder(3691, 708, 6)
+	PlaceGirder(3690, 545, 6)
+	PlaceGirder(3612, 433, 5)
+	PlaceGirder(3463, 383, 4)
+	PlaceGirder(2815, 122, 7)
+	PlaceGirder(2960, 72, 4)
+	PlaceGirder(3032, 123, 2)
+	PlaceGirder(3063, 174, 0)
+	PlaceGirder(3095, 124, 2)
+	PlaceGirder(3169, 71, 4)
+	PlaceGirder(3320, 124, 5)
+	PlaceGirder(3210, 179, 2)
+	PlaceGirder(2932, 181, 2)
+
+	tempG = SpawnHealthCrate(3804, 1461)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(3269, 1742)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(3066, 121)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(3207, 104)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(2928, 103)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(1997, 202)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(2253, 159)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(2132, 774)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(2549, 490)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(3527, 694)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(3777, 78)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(1124, 1746)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(1056, 1740)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(993, 1742)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(799, 1298)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(577, 1126)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(596, 1463)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(3854, 1043)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(1944, 567)
+	SetHealth(tempG, 25)
+	tempG = SpawnHealthCrate(338, 1748)
+	SetHealth(tempG, 25)
+
+
+end
+
+--function onGameTick()
+
+	--if RCGear ~= nil then
+	--	AddCaption(GetTimer(RCGear))
+	--end
+
+--end
+
+function onGameTick20()
+	if RCGear ~= nil then
+		if(GetTimer(RCGear) < 3000 and planeUhOh == false) then
+			PlaySound(sndUhOh, player)
+			planeUhOh = true
+		end
+		planeTimer = planeTimer + 20
+	end
+	if commentTimer > 0 then
+		commentTimer = commentTimer - 20
+	elseif(nextComment ~= sndNone) then
+		PlaySound(nextComment, player)
+		nextComment = sndNone
+	end
+	if missileScanTimer > 0 then
+		missileScanTimer = missileScanTimer - 20
+	else
+		if crateStreak == 0 and missiles == 3 then
+			PlaySound(sndMissed, player)
+			missiles = 4
+		end
+	end
+end
+
+function onNewTurn()
+	TurnTimeLeft = -1
+end
+
+function onGearAdd(gear)
+
+	if GetGearType(gear) == gtRCPlane then
+		RCGear = gear
+		planesUsed = planesUsed + 1
+		planeTimer = 0
+		missiles = 0
+	end
+
+	if GetGearType(gear) == gtCase then
+		cratesLeft = cratesLeft + 1
+	end
+
+	if GetGearType(gear) == gtAirBomb then
+		totalMissiles = totalMissiles + 1
+	end
+end
+
+function onGearDelete(gear)
+
+	if GetGearType(gear) == gtRCPlane then
+
+		RCGear = nil
+		planeUhOh = false
+		missiles = 0
+		AddCaption(string.format(loc("Planes used: %d"), planesUsed))
+
+		if(planeTimer < 2000 and crateStreak == 0) then
+			nextComment = sndStupid
+			commentTimer = math.min(2000-planeTimer, 800)
+		elseif(planeTimer < 5000 and crateStreak == 0) then
+			PlaySound(sndOops, player)
+		elseif(planesUsed == 72) then
+			PlaySound(sndStupid, player)
+		elseif(planesUsed == 50) then
+			PlaySound(sndNutter, player)
+		elseif(planesUsed == 30) then
+			PlaySound(sndOops, player)
+		end
+
+		crateStreak = 0
+
+	elseif GetGearType(gear) == gtAirBomb then
+		missiles = missiles + 1
+		missileScanTimer = 500
+
+	elseif GetGearType(gear) == gtCase then
+
+		cratesLeft = cratesLeft - 1
+		crateStreak = crateStreak + 1
+		if(crateStreak > longestCrateStreak) then
+			longestCrateStreak = crateStreak
+		end
+
+		AddCaption(string.format(loc("Crates left: %d"), cratesLeft))
+
+		if cratesLeft == 0 then
+
+			local rank = "unknown"
+			local color = 0xFFFFFFFF
+			local sound = sndVictory
+			if planesUsed >= 156 then
+				rank = loc("Destroyer of planes")	
+				color = 0xD06700FF
+				sound = sndLaugh
+			elseif planesUsed >= 98 then
+				rank = loc("Hopeless case")
+				color = 0xFF0000FF
+			elseif planesUsed >= 72 then
+				rank = loc("Drunk greenhorn")
+				color = 0xFF0040FF
+			elseif planesUsed >= 50 then
+				rank = loc("Greenhorn") -- a.k.a. "absolute beginner"
+				color = 0xFF0080FF
+			elseif planesUsed >= 39 then
+				rank = loc("Beginner")
+				color = 0xFF00BFFF
+			elseif planesUsed >= 30 then
+				rank = loc("Experienced beginner")
+				color = 0xFF00CCFF
+			elseif planesUsed >= 21 then
+				rank = loc("Below-average pilot")
+				color = 0xFF00FFFF
+			elseif planesUsed >= 17 then
+				rank = loc("Average pilot")				
+				color = 0xBF00FFFF
+			elseif planesUsed >= 13 then
+				rank = loc("Above-average pilot")
+				color = 0x8000FFFF
+			elseif planesUsed >= 8 then
+				rank = loc("Professional pilot")
+				color = 0x4000FFFF
+			elseif planesUsed >= 5 then
+				rank = loc("Professional stunt pilot")
+				color = 0x0000FFFF
+			elseif planesUsed >= 3 then
+				rank = loc("Elite pilot")
+				color = 0x0040FFFF
+			elseif planesUsed == 2 then
+				rank = loc("Upper-class elite pilot")
+				color = 0x0080FFFF
+			elseif planesUsed == 1 then
+				rank = loc("Top-class elite pilot")
+				color = 0x00FFFFFF
+				sound = sndFlawless
+			else
+				rank = loc("Cheater")
+				color = 0xFF0000FF
+				sound = sndCoward
+			end
+			AddCaption(string.format(loc("Rank: %s"), rank), color, capgrpMessage2)
+			SendStat(siCustomAchievement, string.format(loc("Your rank: %s"), rank))
+			if planesUsed == 1 then
+				AddCaption(loc("Flawless victory!"))
+				SendStat(siGameResult, loc("You have perfectly beaten the challenge!"))
+				SendStat(siCustomAchievement, loc("You have used only 1 RC plane. Outstanding!"))
+			else
+				AddCaption(loc("Victory!"))
+				SendStat(siGameResult, loc("You have finished the challenge!"))
+				SendStat(siCustomAchievement, string.format(loc("You have used %d RC planes."), planesUsed))
+			end
+		
+			if(totalMissiles > 1) then
+				SendStat(siCustomAchievement, string.format(loc("You have dropped %d missiles."), totalMissiles))
+			end
+
+			if(longestCrateStreak > 5) then
+				if(planesUsed == 1) then
+					SendStat(siCustomAchievement, string.format(loc("In your best (and only) flight you took out %d crates with one RC plane!"), longestCrateStreak))
+				else
+					SendStat(siCustomAchievement, string.format(loc("In your best flight you took out %d crates with one RC plane."), longestCrateStreak))
+				end
+			end
+
+			if(planesUsed == 2) then
+				SendStat(siCustomAchievement, loc("This was an awesome performance! But this challenge can be finished with even just one RC plane. Can you figure out how?"))
+			end
+			if(planesUsed == 1) then
+				SendStat(siCustomAchievement, loc("Congratulations! You have truly mastered this challenge! Don't forget to save the demo."))
+				SendStat(siCustomAchievement, string.format(loc("You have gained an achievement: %s"), loc("Prestigious Pilot")))
+			end
+
+			ShowMission     (
+                                loc("CHALLENGE COMPLETE"),
+                                loc("Congratulations!"),
+                                string.format(loc("Planes used: %d"), planesUsed) .. "|" ..
+                                "", 0, 0
+                                )
+			SetState(player, gstWinner)
+			PlaySound(sound, player)
+
+
+			DismissTeam(loc("Wannabe Flyboys"))
+			EndGame()
+		end
+
+		if RCGear ~= nil then
+			SetTimer(RCGear, GetTimer(RCGear) + 10000)
+		end
+	end
+
+end
+
+function onAmmoStoreInit()
+	SetAmmo(amRCPlane, 9, 0, 0, 0)
 end
\ No newline at end of file
--- a/share/hedgewars/Data/Missions/Training/User_Mission_-_That_Sinking_Feeling.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/User_Mission_-_That_Sinking_Feeling.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -20,14 +20,15 @@
 		genCounter = 0
 		FollowGear(CurrentHedgehog)
 		AddCaption(loc("Good luck out there!"))
-		ShowMission(loc("That Sinking Feeling"), loc("User Challenge"), loc("Save as many hapless hogs as possible!"), 4, 0)
+		ShowMission(loc("That Sinking Feeling"), loc("Challenge"), loc("Save as many hapless hogs as possible!"), 4, 0)
+		SetInputMask(0xFFFFFFFF)
 	end
 end
 
 function onGameInit()
 
 	Seed = 0
-	GameFlags = gfInfAttack + gfInvulnerable
+	GameFlags = gfInfAttack + gfInvulnerable + gfOneClanMode
 	TurnTime = 90000
 	CaseFreq = 0
 	MinesNum = 0
@@ -38,10 +39,7 @@
 	Theme = "City"
 	SuddenDeathTurns = 1
 
-	AddTeam(loc("Nameless Heroes"), 14483456, "Simple", "Island", "Default")
-	player = AddHog(loc("The Nameless One"), 0, 1, "NoHat")
-
-	AddTeam(loc("Hapless Hogs"), 	1175851, "Simple", "Island", "Default")
+	AddTeam(loc("Hapless Hogs"), 14483456, "Simple", "Island", "Default")
 	hh[0] = AddHog(loc("Sinky"), 1, 100, "fr_lemon")
 	hh[1] = AddHog(loc("Drowner"), 1, 100, "fr_orange")
 	hh[2] = AddHog(loc("Heavy"), 1, 100, "dish_Teapot")
@@ -51,6 +49,9 @@
 	hh[6] = AddHog(loc("Sponge"), 1, 100, "sf_chunli")
 	hh[7] = AddHog(loc("Deadweight"), 1, 100, "dish_Teacup")
 
+	AddTeam(loc("Nameless Heroes"), 14483456, "Simple", "Island", "Default", "cm_crossedswords")
+	player = AddHog(loc("The Nameless One"), 0, 1, "NoHat")
+
 	SetGearPosition(player, 3992, 733)
 	SetGearPosition(hh[0], 938, 1369)
 	SetGearPosition(hh[1], 1301, 1439)
@@ -61,12 +62,15 @@
 	SetGearPosition(hh[6], 2191, 810)
 	SetGearPosition(hh[7], 3799, 945)
 
+	-- Disable all input except [Precise] for the intro
+	SetInputMask(gmPrecise)
 end
 
 
 function onGameStart()
+	SendHealthStatsOff()
 
-	ShowMission(loc("That Sinking Feeling"), loc("User Challenge"), loc("Save as many hapless hogs as possible!"), 4, 1)
+	ShowMission(loc("That Sinking Feeling"), loc("Challenge"), loc("Save as many hapless hogs as possible!"), 4, 1)
 
 	HogTurnLeft(hh[0], false)
 	HogTurnLeft(hh[1], true)
@@ -193,6 +197,7 @@
 				introStage = 110
 				FollowGear(CurrentHedgehog)
 				ShowMission(loc("That Sinking Feeling"), loc("User Challenge"), loc("Save as many hapless hogs as possible!"), 4, 0)
+				SetInputMask(0xFFFFFFFF)
 			end
 
 		end
@@ -211,24 +216,33 @@
 
 			if (waterPix >= 1615) and (GameOver == false) then
 				GameOver = true
-				SetHealth(player, 0)
-				TurnTimeLeft = 1
-				ShowMission(loc("That Sinking Feeling"), loc("MISSION SUCCESS"), loc("You saved") .. " " .. hhCount .. " " .. loc("Hapless Hogs") .."!", 0, 0)
+				AddCaption(loc("The flood has stopped! Challenge over."))
+				SendStat(siGameResult, loc("Challenge completed!"))
+				SendStat(siPlayerKills, tostring(hhCount), loc("Nameless Heroes"))
+				SendStat(siPointType, loc("rescues"))
 
-				if hhCount == 8 then
-					AddCaption(loc("Achievement Unlocked") .. ": " .. loc("Lively Lifeguard"),0xffba00ff,capgrpMessage2)
+				-- Do not count drowning hedgehogs
+				local hhLeft = hhCount
+				for i=1,#hh do
+					local isDrowning = band(GetState(hh[i]),gstDrowning) ~= 0
+					if isDrowning then
+						hhLeft = hhLeft - 1
+					end
 				end
 
+				SendStat(siCustomAchievement, string.format(loc("You saved %d of 8 Hapless Hogs."), hhLeft))
+
+				if hhLeft == 8 then
+					AddCaption(loc("Achievement obtained: Lively Lifeguard"),0xffba00ff,capgrpMessage2)
+					SendStat(siCustomAchievement, loc("You have obtained an achievement: Lively Lifeguard"))
+				end
+				EndGame()
+
 			end
 
 		end
 
 	end
-
-	if TurnTimeLeft == 1 then
-		SetHealth(player, 0)
-	end
-
 end
 
 
@@ -253,17 +267,27 @@
 function onGearDelete(gear)
 
 	if GetGearType(gear) == gtHedgehog then
-		if GetHogTeamName(gear) == "Hapless Hogs" then
+		if GetHogTeamName(gear) == loc("Hapless Hogs") then
 			hhCount = hhCount - 1
-			AddCaption(hhCount .. loc(" Hapless Hogs left!"))
+			AddCaption(string.format(loc("%d Hapless Hogs left"), hhCount))
 		end
 	end
 
 	if ((gear == player) or (hhCount == 0)) and (GameOver == false) then
 		SetHealth(player, 0)
-		TurnTimeLeft = 1
-		ShowMission(loc("That Sinking Feeling"), loc("MISSION FAILED"), loc("Oh no! Just try again!"), -amSkip, 0)
+		AddCaption(loc("Disqualified!"))
+		if gear == player then
+			SendStat(siCustomAchievement, loc("Your hedgehog died!"))
+			SendStat(siCustomAchievement, loc("You must survive the flood in order to score."))
+		else
+			SendStat(siCustomAchievement, loc("You haven't rescued anyone."))
+		end
+		SendStat(siPlayerKills, "0", loc("Nameless Heroes"))
+		SendStat(siPointType, loc("points"))
+
+		SendStat(siGameResult, loc("Disqualified!"))
 		GameOver = true
+		EndGame()
 	end
 
 end
--- a/share/hedgewars/Data/Missions/Training/User_Mission_-_The_Great_Escape.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/User_Mission_-_The_Great_Escape.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -20,7 +20,7 @@
 	player = AddHog(loc("Good Dude"), 0, 80, "NoHat") --NoHat
 
 	AddTeam(loc("Bad Team"), 	1175851, "Simple", "Island", "Default", "Hedgewars")
-	enemy = AddHog("Bad Guy", 1, 40, "NoHat")
+	enemy = AddHog(loc("Bad Guy"), 1, 40, "NoHat")
 
 end
 
--- a/share/hedgewars/Data/Missions/Training/portal.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Missions/Training/portal.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -16,29 +16,29 @@
 	Delay = 10 -- The delay between each round
 	Map = "portal" -- The map to be played
 	Theme = "Hell" -- The theme to be used
-	Goals = "use the portal to move fast and far, use it to kill, use it with caution !"  --the goal ...
+	Goals = loc("Use the portal to move fast and far, use it to kill, use it with caution!")  --the goal ...
 	
 	
 ----AddTeam(teamname, color, grave, fort, voicepack, flag)--
-	AddTeam("Subject", 14483406, "Simple", "Island", "Default", "cm_star")
-	player = AddHog("player", 0, 10, "Terminator_Glasses")
+	AddTeam(loc("Subject"), 14483406, "Simple", "Island", "Default", "cm_star")
+	player = AddHog(loc("player"), 0, 10, "Terminator_Glasses")
 
-	AddTeam("Hell Army", 1170801, "Simple", "Island", "Default", "cm_galaxy")
-	enemy1 = AddHog("Lucifer", 1, 200, "thinkingcap")
-	enemy2 = AddHog("voldemort", 1, 150, "WizardHat")
-	enemy3 = AddHog("zombi", 1, 100, "zombi")
-	enemy4 = AddHog("Predator", 1, 14, "predator")
-	enemy5 = AddHog("oneye", 1, 50, "cyclops")
-	enemy6 = AddHog("razac", 1, 50, "plaguemask")
-	enemy7 = AddHog("C-2", 1, 50, "cyborg1")
-	enemy8 = AddHog("Rider", 1, 50, "scif_SparkssHelmet")
+	AddTeam(loc("Hell Army"), 1170801, "Simple", "Island", "Default", "cm_galaxy")
+	enemy1 = AddHog(loc("Lucifer"), 1, 200, "thinkingcap")
+	enemy2 = AddHog(loc("voldemort"), 1, 150, "WizardHat")
+	enemy3 = AddHog(loc("zombi"), 1, 100, "zombi")
+	enemy4 = AddHog(loc("Predator"), 1, 14, "predator")
+	enemy5 = AddHog(loc("oneye"), 1, 50, "cyclops")
+	enemy6 = AddHog(loc("razac"), 1, 50, "plaguemask")
+	enemy7 = AddHog(loc("C-2"), 1, 50, "cyborg1")
+	enemy8 = AddHog(loc("Rider"), 1, 50, "scif_SparkssHelmet")
 
-	AddTeam("badmad", 1170801, "Simple", "Island", "Default", "cm_jupiter")
-	enemy9 = AddHog("C-1", 1, 50, "cyborg2")
-	enemy10 = AddHog("hiden", 1, 40, "daftpunkguymanuel")
-	enemy11 = AddHog("ronald", 1, 70, "clown")
-	enemy12 = AddHog("phosphatoglucidique", 1, 50, "chef")
-	enemy13 = AddHog("Lestat", 1, 30, "draculakz")
+	AddTeam(loc("badmad"), 1170801, "Simple", "Island", "Default", "cm_jupiter")
+	enemy9 = AddHog(loc("C-1"), 1, 50, "cyborg2")
+	enemy10 = AddHog(loc("hiden"), 1, 40, "daftpunkguymanuel")
+	enemy11 = AddHog(loc("ronald"), 1, 70, "clown")
+	enemy12 = AddHog(loc("phosphatoglucidique"), 1, 50, "chef")
+	enemy13 = AddHog(loc("Lestat"), 1, 30, "draculakz")
 
 	SetGearPosition(player, 350, 1820)
     SetGearPosition(enemy1, 2037, 1313)
@@ -168,7 +168,7 @@
 
 
 	ShowMission (loc("Portal mission"), loc("training"), "", -amPortalGun, 5000)
-	HogSay(player, "I should get myself a portal gun, maybe this crate has one", SAY_THINK)
+	HogSay(player, loc("I should get myself a portal gun, maybe this crate has one"), SAY_THINK)
 	
 
 
@@ -204,11 +204,11 @@
 
 	if gear == portalgun then
 		--AddAmmo(player, amPortalGun, 10000)
-		HogSay(player, "GREAT ! Let's kill all this enemies, using portals", SAY_THINK)
+		HogSay(player, loc("GREAT ! Let's kill all this enemies, using portals"), SAY_THINK)
 	end
 
 	if gear == girder then 
-		HogSay(player, "Will be useful if I need a new plateform or if I want to rise....", SAY_THINK)
+		HogSay(player, loc("Will be useful if I need a new plateform or if I want to rise...."), SAY_THINK)
 	end
 	
 	if gear == parachute then
Binary file share/hedgewars/Data/Music/olympics_sd.ogg has changed
Binary file share/hedgewars/Data/Music/sdmusic.ogg has changed
--- a/share/hedgewars/Data/Scripts/Multiplayer/Construction_Mode.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Construction_Mode.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -1,1909 +1,1909 @@
----------------------------------------------------------
---- LE CONSTRUCTION MODE 0.7 (badly adapted from Hedge Editor 0.5)
----------------------------------------------------------
--- a hedgewars gameplay mode by mikade
--- special thanks to all who helped test and offered suggestions
--- additional thanks to sheepluva/nemo for adding some extra hooks
-
--- (to do)
--- investigate loc not working on addcaptions
--- check for parsecommands before porting to dev
--- test onUpDown more extensively as it may need revision (check for amRubber etc)
--- test localization of weapons and utils and stuff
-
--- try posistion grenades in Harmer so it blows hogs away from the struc
--- and don't explode too close to the struc
-
--- additional/previous balance ideas
--- based on your money?
--- based on the number of strucs/gens you own?
--- based on your existing arsenal?
--- limit number of crates spawned per round perhaps (done)
--- limit number of generators?
-
-------------------------------------------------------------------------------
---version history
-------------------------------------------------------------------------------
---v0.1
--- concept test
-
---v0.2
--- improved documentation (in script and in game)
--- improved localisation (or is it? at any rate, crate placement should now say e.g. Bazooka and not amBazooka)
--- added variable weapon costs (based on the values from Vatten's Consumerism script)
-
--- added reflector shield (still needs work and balancing)
--- added weapon-filter (probably ok)
-
--- enabled super weapons like ballgun, rcplane, watermelon, hellish to test balance
--- reduce max money to 1000
-
---v0.3
--- some /s removed
-
---v0.4
--- added support for per hog ammo (hopefully)
-
---v0.5 (dev)
--- added somewhat horribly implemented support for different structure sprites
--- added override pictures for ammo menu
--- added override message on wep select to aid understanding
--- split menu into/between weps/parts: struc, crates, gears
--- add a limit on crates per turn
--- add a limit on extra time per turn
--- add a test level
--- restored rubber placement
--- cleaned up some of the code a bit and removed about 280 lines of code I didn't need, lol
-
---v0.6 (dev)
--- added magic dance
-
---v.07 (pushed to repo)
--- added a cfg file
--- removed another 903 lines of code we weren't using (lol)
-
---------------------------------
--- STRUCTURES LIST / IDEAS
---------------------------------
-
---Healing Station: heals hogs to 150 life
---Teleportation Node: allows teleporting to any other teleporter nodes
---Bio-filter: explodes enemy hogs
---Respawner: if you have one of these, any slain hogs are resurrected here :D
---Generator: generates energy (used to buy stuff, and possibly later other strucs might have upkeep costs)
---Support Station: allows purchasing of weapons, utilities, and med-crates
---Construction Station: allows purchasing of girders, rubber, mines, sticky mines, barrels
---Reflector Shield: reflect projectiles
---Weapon Filter: kill all equipement of enemy hogs passing through this area.
-
-
---to make the grill more attractive make it vaporize flying saucers
---and also rope, and maybe incoming gears
-
--- make healing thing also cure poison
--- maybe make poison more virulent and dangerous
-
---(not implemented / abandoned ideas)
--- Core: allows construction of other structures.
--- Automated Turret (think red drones from space invasion)
--- Canon (gives access to 3 fireballs per turn while near)
--- something that allows control of wind/water
--- Gravity Field generator : triggers world gravity change
-
--- structures consume power over time and
--- maybe you can turn structures OFF/ON, manually to save power.
-
--- hacking
--- allow hacking of structures, either being able to use enemy structures,
--- or turning a team's structures against them.
-
--- pylons
--- allow hogs to put down a pylon-like gear which then allows the core
--- to place other structures/objects within the pylon's sphere of influence
--- this would allow aggressive structure advancement
-
--- resouce mining?
--- you could designate something like mines, that you could get close to,
--- "pick up", and then "drop" back at a central location to simulate
--- resource mining. bit complicated/meh, normal power generators probably easier
-
--- it would be cool to have a red mask we could apply over girders
--- that would indicate they were Indestructible
-
-HedgewarsScriptLoad("/Scripts/Locale.lua")
-HedgewarsScriptLoad("/Scripts/Tracker.lua")
-
-----------------------------------------------
--- STRUC CRAP
-----------------------------------------------
-
-strucID = {}
-strucGear = {}
-strucClan = {}
-strucType = {}
-strucCost = {}
-strucHealth = {}
-
-strucCirc = {}
-strucCircCol = {}
-strucCircRadius = {}
-strucCircType = {}
-strucAltDisplay = {}
-
-placedExpense = 0
-
-tempID = nil
-
-sUID = 0
-
-colorRed = 0xff0000ff
-colorGreen = 0x00ff00ff
-
-clanBoundsSX = {}
-clanBoundsSY = {}
-clanBoundsEX = {}
-clanBoundsEY = {}
-
-clanPower = {}
-clanBoon = {}
-clanID = {}
-clanLStrucIndex = {}
-
-clanLWepIndex = {} -- for ease of use let's track this stuff
-clanLUtilIndex = {}
-clanLGearIndex = {}
-clanUsedExtraTime = {}
-clanCratesSpawned = {}
-
-effectTimer = 0
-
-wallsVisible = false
-wX = {}
-wY = {}
-wWidth = {}
-wHeight = {}
-wCol = {}
-margin = 20
-
-tauntString = ""
-
-vTag = {}
-lastWep = nil
-
-function HideTags()
-
-	for i = 0, 2 do
-		SetVisualGearValues(vTag[i],0,0,0,0,0,1,0, 0, 240000, 0xffffff00)
-	end
-
-end
-
-function DrawTag(i)
-
-	zoomL = 1.3
-
-	xOffset = 40
-
-	if i == 0 then
-		yOffset = 40
-		tCol = 0xffba00ff
-		tValue = 30--TimeLeft
-	elseif i == 1 then
-		zoomL = 1.1
-		xOffset = 45
-		yOffset = 70
-		tCol = 0x00ff00ff
-		tValue = clanPower[GetHogClan(CurrentHedgehog)]
-	elseif i == 2 then
-		zoomL = 1.1
-		xOffset = 60 + 35
-		yOffset = 70
-		tCol = 0xa800ffff
-		tValue = 10--shieldHealth - 80
-	end
-
-	DeleteVisualGear(vTag[i])
-	vTag[i] = AddVisualGear(0, 0, vgtHealthTag, 0, false)
-	g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(vTag[i])
-	SetVisualGearValues	(
-				vTag[i], 		--id
-				-div(ScreenWidth,2) + xOffset,	--xoffset
-				ScreenHeight - yOffset, --yoffset
-				0, 			--dx
-				0, 			--dy
-				zoomL, 			--zoom
-				1, 			--~= 0 means align to screen
-				g7, 			--frameticks
-				tValue, 		--value
-				240000, 		--timer
-				tCol		--GetClanColor( GetHogClan(CurrentHedgehog) )
-				)
-
-end
-
-function onScreenResize()
-
-	-- redraw Tags so that their screen locations are updated
-	if (CurrentHedgehog ~= nil) then
-			DrawTag(0)
-			DrawTag(1)
-			DrawTag(2)
-	end
-
-end
-
-function XYisInRect(px, py, psx, psy, pex, pey)
-
-	if (px > psx) and (px < pex) and (py > psy) and (py < pey) then
-		return(true)
-	else
-		return(false)
-	end
-
-end
-
-function AddWall(zXMin,zYMin, zWidth, zHeight, zCol)
-
-	table.insert(wX, zXMin)
-	table.insert(wY, zYMin)
-	table.insert(wWidth, zWidth)
-	table.insert(wHeight, zHeight)
-	table.insert(wCol, zCol)
-
-end
-
-function BorderSpark(zXMin,zYMin, zWidth, zHeight, bCol)
-
-	eX = zXMin + GetRandom(zWidth+10)
-	eY = zYMin + GetRandom(zHeight+10)
-	tempE = AddVisualGear(eX, eY, vgtDust, 0, false)
-	if tempE ~= 0 then
-		g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
-		SetVisualGearValues(tempE, eX, eY, g3, g4, g5, g6, g7, 1, g9, bCol )
-	end
-
-end
-
-function HandleBorderEffects()
-
-	effectTimer = effectTimer + 1
-	if effectTimer > 15 then --25
-		effectTimer = 1
-		for i = 1, #wX do
-			BorderSpark(wX[i],wY[i],wWidth[i],wHeight[i], wCol[i])
-		end
-	end
-
-end
-
-----
--- old reflecting stuff from like 3 years ago lol
----
-
-function gearCanBeDeflected(gear)
-
-	if 	(GetGearType(gear) == gtShell) or
-		--(GetGearType(gear) == gtBee) or
-		(GetGearType(gear) == gtGrenade) or
-		(GetGearType(gear) == gtAirBomb) or
-		--(GetGearType(gear) == gtRCPlane) or
-		--(GetGearType(gear) == gtRope) or
-		(GetGearType(gear) == gtClusterBomb) or
-		(GetGearType(gear) == gtCluster) or
-		(GetGearType(gear) == gtGasBomb) or
-		--(GetGearType(gear) == gtSeduction) or
-		(GetGearType(gear) == gtMine) or	-------
-		(GetGearType(gear) == gtMortar) or
-		(GetGearType(gear) == gtHellishBomb) or
-		(GetGearType(gear) == gtWatermelon) or
-		(GetGearType(gear) == gtMelonPiece)	or
-		(GetGearType(gear) == gtEgg) or
-		(GetGearType(gear) == gtDrill) or
-		(GetGearType(gear) == gtBall) or
-		(GetGearType(gear) == gtExplosives) or	------
-			(GetGearType(gear) == gtFlame) or
-			(GetGearType(gear) == gtPortal) or
-			(GetGearType(gear) == gtDynamite) or
-			(GetGearType(gear) == gtSMine) or
-			--(GetGearType(gear) == gtKamikaze) or
-			--(GetGearType(gear) == gtRCPlane) or
-			--(GetGearType(gear) == gtCake) or
-			--(GetGearType(gear) == gtHedgehog) or ------
-		(GetGearType(gear) == gtKnife) or
-		(GetGearType(gear) == gtJetpack) or -- test this and birdy plz
-		(GetGearType(gear) == gtBirdy) or -- test this and birdy plz
-		(GetGearType(gear) == gtSnowball) or
-		(GetGearType(gear) == gtMolotov)
-	then
-		return(true)
-	else
-		return(false)
-	end
-
-end
-
-function getThreatDamage(gear)
-
-	--- damage amounts for weapons
-	if 	(GetGearType(gear) == gtGrenade) or
-		(GetGearType(gear) == gtClusterBomb) or
-		(GetGearType(gear) == gtGasBomb) or
-		(GetGearType(gear) == gtKnife) or
-		(GetGearType(gear) == gtEgg) or
-		(GetGearType(gear) == gtMolotov) or
-		(GetGearType(gear) == gtHellishBomb) or
-		(GetGearType(gear) == gtWatermelon) or
-		(GetGearType(gear) == gtSMine)
-	then
-		dmg = 30
-
-	elseif (GetGearType(gear) == gtMelonPiece) then
-		dmg = 40
-
-	elseif (GetGearType(gear) == gtAirBomb) or
-			(GetGearType(gear) == gtDrill) or
-			(GetGearType(gear) == gtMine) or
-			(GetGearType(gear) == gtCluster) then
-		dmg = 20
-
-	elseif (GetGearType(gear) == gtFlame) or
-			(GetGearType(gear) == gtPortal) or
-			(GetGearType(gear) == gtDynamite)
-			--(GetGearType(gear) == gtKamikaze) or
-			--(GetGearType(gear) == gtRCPlane) or
-
-			--(GetGearType(gear) == gtCake)
-	then
-		dmg = 0
-
-	elseif (GetGearType(gear) == gtBall) then
-		dmg = 1
-
-	else	--normal shell, snowball etc
-		dmg = 65
-	end
-
-	return(dmg)
-
-end
-
-function setGearReflectionValues(gear)
-
-	dmg = getThreatDamage(gear)
-	setGearValue(gear,"damage",dmg)
-	setGearValue(gear,"deflects",0)
-
-	if (CurrentHedgehog ~= nil) then --and (gameStarted == true) then
-		setGearValue(gear,"owner",GetHogClan(CurrentHedgehog)) -- NEW NEEDS CHANGE?
-	else
-		setGearValue(gear,"owner",10) -- nil
-	end
-
-end
-
-function AddStruc(pX,pY, pType, pClan)
-
-	sUID = sUID + 1
-
-	tempG = AddGear(0, 0, gtTarget, 0, 0, 0, 0)
-	SetGearPosition(tempG, pX, pY)
-	setGearValue(tempG, "sUID", sUID)
-
-	tempCirc = AddVisualGear(0,0,vgtCircle,0,true)
-
-	SetVisualGearValues(tempCirc, 0, 0, 100, 255, 1, 100, 0, 500, 1, 0xFFFFFF00)
-
-	table.insert(strucID, sUID)
-	table.insert(strucType, pType)
-	table.insert(strucGear,tempG)
-	table.insert(strucClan,pClan)
-	table.insert(strucCost,2)
-
-	frameID = 0
-	visualSprite = sprTarget
-	madness = AddVisualGear(GetX(tempG), GetY(tempG), vgtStraightShot, 1, true,1)
-	g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(madness)	--g9
-
-
-	if pType == loc("Reflector Shield") then
-		table.insert(strucHealth,255)
-
-		--SetVisualGearValues(madness, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
-		--SetState(tempG, bor(GetState(tempG),gstInvisible) )
-		--table.insert(strucAltDisplay, madness)
-
-	else
-		table.insert(strucHealth,1)
-		--table.insert(strucAltDisplay, 1)
-	end
-
-	table.insert(strucCirc,tempCirc)
-
-	table.insert(strucCircType, 1)
-	if pType == loc("Bio-Filter") then
-		table.insert(strucCircCol,colorRed)
-		table.insert(strucCircRadius,1000)
-		frameID = 7
-	elseif pType == loc("Healing Station") then
-		table.insert(strucCircCol,0xFF00FF00)
-		--table.insert(strucCircCol,colorGreen)
-		table.insert(strucCircRadius,500)
-		frameID = 3
-	elseif pType == loc("Respawner") then
-		table.insert(strucCircCol,0xFF00FF00)
-		--table.insert(strucCircCol,0xFF00FFFF)
-		table.insert(strucCircRadius,75)
-		runOnHogs(EnableHogResurrectionForThisClan)
-		frameID = 1
-	elseif pType == loc("Teleportation Node") then
-		table.insert(strucCircCol,0x0000FFFF)
-		table.insert(strucCircRadius,350)
-		frameID = 6
-	elseif pType == loc("Core") then
-		table.insert(strucCircCol,0xFFFFFFFF)
-		table.insert(strucCircRadius,350)
-	elseif pType == loc("Generator") then
-		table.insert(strucCircCol,0xFFFF00FF)
-		table.insert(strucCircRadius,75)
-		setGearValue(tempG, "power", 0)
-		frameID = 2
-	elseif pType == loc("Support Station") then
-		table.insert(strucCircCol,0xFFFF00FF)
-		table.insert(strucCircRadius,500)
-		frameID = 4
-	elseif pType == loc("Construction Station") then
-		table.insert(strucCircCol,0xFFFFFFFF)
-		table.insert(strucCircRadius,500)
-		frameID = 8
-	elseif pType == loc("Reflector Shield") then
-		table.insert(strucCircCol,0xffae00ff)
-		table.insert(strucCircRadius,750)
-		frameID = 9
-	elseif pType == loc("Weapon Filter") then
-		table.insert(strucCircCol,0xa800ffff)
-		table.insert(strucCircRadius,750)
-		frameID = 5
-	end
-
-
-	SetVisualGearValues(madness, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
-	SetState(tempG, bor(GetState(tempG),gstInvisible) )
-	table.insert(strucAltDisplay, madness)
-
-	-- may be needed for non gear-based structures
-	--table.insert(strucX, GetX(tempG))
-	--table.insert(strucY, GetY(tempG))
-
-end
-
--- this is basically onStructureDelete
--- we may need to expand it for non-gear structures later
-function CheckGearForStructureLink(gear)
-
-	respawnerDestroyed = false
-
-	for i = 1, #strucID do
-		if strucID[i] == getGearValue(gear,"sUID") then
-
-			if strucType[i] == loc("Respawner") then
-				respawnerDestroyed = true
-			end
-
-			table.remove(strucID,i)
-			table.remove(strucGear,i)
-			table.remove(strucClan,i)
-			table.remove(strucType,i)
-			table.remove(strucCost,i)
-			table.remove(strucHealth,i)
-
-			DeleteVisualGear(strucCirc[i])
-			table.remove(strucCirc,i)
-
-			table.remove(strucCircCol,i)
-			table.remove(strucCircRadius,i)
-			table.remove(strucCircType,i)
-
-			if strucAltDisplay[i] ~= 1 then
-				DeleteVisualGear(strucAltDisplay[i])
-			end
-			table.remove(strucAltDisplay,i)
-
-		end
-	end
-
-	if respawnerDestroyed == true then
-		runOnHogs(RecalibrateRespawn)
-	end
-
-end
-
--- called when we add a new respawner
-function EnableHogResurrectionForThisClan(gear)
-	if GetHogClan(gear) == GetHogClan(CurrentHedgehog) then
-		SetEffect(gear, heResurrectable, 1)
-	end
-end
-
--- this is called when a respawner blows up
-function RecalibrateRespawn(gear)
-
-	respawnerList = {}
-	for i = 1, #strucID do
-		if (strucType[i] == loc("Respawner")) and (strucClan[i] == GetHogClan(gear)) then
-			table.insert(respawnerList, i)
-		end
-	end
-
-	if #respawnerList >= 1 then
-		SetEffect(gear, heResurrectable, 1)
-	else
-		SetEffect(gear, heResurrectable, 0)
-	end
-
-end
-
---resposition dead hogs at a respawner if they own one
-function FindRespawner(gear)
-
-	respawnerList = {}
-	for i = 1, #strucID do
-		if (strucType[i] == loc("Respawner")) and (strucClan[i] == GetHogClan(gear)) then
-			table.insert(respawnerList, i)
-		end
-	end
-
-	if #respawnerList >= 1 then
-		i = GetRandom(#respawnerList)+1
-		SetGearPosition(gear,GetX(strucGear[respawnerList[i]]),GetY(strucGear[respawnerList[i]])-25)
-		AddVisualGear(GetX(gear), GetY(gear), vgtExplosion, 0, false)
-	else	-- (this should never happen, but just in case)
-		SetEffect(gear, heResurrectable, 0)
-		DeleteGear(gear)
-	end
-
-end
-
-function onGearResurrect(gear)
-	AddVisualGear(GetX(gear), GetY(gear), vgtExplosion, 0, false)
-	FindRespawner(gear)
-end
-
-
-function CheckTeleport(gear, tX, tY)
-
-	teleportOriginSuccessful = false
-	teleportDestinationSuccessful = false
-
-	for i = 1, #strucID do
-
-		if (strucType[i] == loc("Teleportation Node")) and (strucClan[i] == GetHogClan(CurrentHedgehog)) then
-
-			dist = GetDistFromGearToXY(CurrentHedgehog,GetX(strucGear[i]), GetY(strucGear[i]))
-			if strucCircType[i] == 0 then
-				NR = strucCircRadius[i]
-			else
-				NR = (48/100*strucCircRadius[i])/2
-				--NR = div((div(48,100) * strucCircRadius[tempID]),2)
-			end
-			if dist <= NR*NR then
-				teleportOriginSuccessful = true
-			end
-
-			dist = GetDistFromXYtoXY(tX,tY,GetX(strucGear[i]), GetY(strucGear[i]))
-			if strucCircType[i] == 0 then
-				NR = strucCircRadius[i]
-			else
-				NR = (48/100*strucCircRadius[i])/2
-				--NR = div((div(48,100) * strucCircRadius[tempID]),2)
-			end
-			if dist <= NR*NR then
-				teleportDestinationSuccessful = true
-			end
-
-		end
-
-
-	end
-
-	if ((teleportDestinationSuccessful == false) or (teleportOriginSuccessful == false)) then
-		AddCaption(loc("Teleport Unsuccessful. Please teleport within a clan teleporter's sphere of influence."))
-		SetGearTarget(gear, GetX(CurrentHedgehog), GetY(CurrentHedgehog))
-	end
-
-end
-
---Check for proximity of gears to structures, and make structures behave accordingly
-function CheckProximity(gear)
-
-	--if isAStructureEffectingGear(gear) then
-
-		dist = GetDistFromGearToXY(gear, GetX(strucGear[tempID]), GetY(strucGear[tempID]))
-
-		-- calculate my real radius if I am an aura
-		if strucCircType[tempID] == 0 then
-			NR = strucCircRadius[tempID]
-		else
-			NR = (48/100*strucCircRadius[tempID])/2
-			--NR = div((div(48,100) * strucCircRadius[tempID]),2) -- doesn't work ffff
-				--NR = div((48/100*strucCircRadius[tempID]),2) -- still works
-
-		end
-
-		-- we're in business
-		if dist <= NR*NR then
-
-
-			-- heal clan hogs
-			if strucType[tempID] == loc("Healing Station") then
-
-				if GetGearType(gear) == gtHedgehog then
-					if GetHogClan(gear) == strucClan[tempID] then
-
-						hogLife = GetHealth(gear) + 1
-						if hogLife > 150 then
-							hogLife = 150
-						end
-						SetHealth(gear, hogLife)
-
-						-- change this to the med kit sprite health ++++s later
-						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
-						g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
-						SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, colorGreen )
-
-
-					end
-				end
-
-			-- explode enemy clan hogs
-			elseif strucType[tempID] == loc("Bio-Filter") then
-
-				--tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
-				--g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
-				--SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, colorRed )
-
-				if GetGearType(gear) == gtHedgehog then
-					if (GetHogClan(gear) ~= strucClan[tempID]) and (GetHealth(gear) > 0) then
-						AddGear(GetX(gear), GetY(gear), gtGrenade, 0, 0, 0, 1)
-					end
-				end
-
-			-- were those weapons in your pocket, or were you just happy to see me?
-			elseif strucType[tempID] == loc("Weapon Filter") then
-
-				if GetGearType(gear) == gtHedgehog then
-					if (GetHogClan(gear) ~= strucClan[tempID]) then
-
-						for wpnIndex = 1, #atkArray do
-							AddAmmo(gear, atkArray[wpnIndex][1], 0)
-						end
-
-						for wpnIndex = 1, #utilArray do
-							AddAmmo(gear, utilArray[wpnIndex][1], 0)
-						end
-
-						AddAmmo(gear, amAirAttack, 100)
-						AddAmmo(gear, amSwitch, 100)
-						AddAmmo(gear, amSkip, 100)
-
-					end
-				end
-
-			-- BOUNCE! POGO! POGO! POGO! POGO!
-			elseif strucType[tempID] == loc("Reflector Shield") then
-
-				-- add check for whose projectile it is
-				if gearCanBeDeflected(gear) == true then
-
-					gOwner = getGearValue(gear,"owner")
-					gDeflects = getGearValue(gear,"deflects")
-					gDmg = getGearValue(gear,"damage")
-
-					if gDeflects >= 3 then
-						DeleteGear(gear)
-						AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, false)
-						PlaySound(sndVaporize)
-					elseif gOwner ~= strucClan[tempID] then
-						--whether to vaporize gears or bounce them
-						if gDmg ~= 0 then
-							dx, dy = GetGearVelocity(gear)
-
-							if (dx == 0) and (dy == 0) then
-								-- static mine, explosive, etc encountered
-								-- do nothing
-							else
-
-								--let's bounce something!
-
-								--if dx == 0 then
-									-- bounce away eggs
-								--	dx = 0.5
-								--end
-
-								dx = dx*(-1)
-								dy = dy*(-1)
-								SetGearVelocity(gear,dx,dy)
-								setGearValue(gear,"deflects",(gDeflects+1))
-
-								AddVisualGear(GetX(gear), GetY(gear), vgtExplosion, 0, false)
-								PlaySound(sndExplosion)
-
-								strucHealth[tempID] = strucHealth[tempID] - gDmg
-								strucCircCol[tempID] = strucCircCol[tempID] - gDmg
-
-								if strucHealth[tempID] <= 0 then
-									AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtExplosion, 0, false)
-									DeleteGear(strucGear[tempID])
-									PlaySound(sndExplosion)
-								end
-
-							end
-
-						else
-							DeleteGear(gear)
-							AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, false)
-							PlaySound(sndVaporize)
-						end
-					end
-				end
-
-			--mark as within range of a teleporter node
-			elseif strucType[tempID] == loc("Teleportation Node") then
-
-				if GetGearType(gear) == gtHedgehog then
-					if GetHogClan(gear) == strucClan[tempID] then
-						--tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
-
-						for i = 1, #sProx do
-							if sProx[i][1] == loc("Teleportation Mode") then
-								sProx[i][2] = true
-							end
-						end
-
-					end
-				end
-
-			-- mark as within range of construction station
-			-- and thus allow menu access to placement modes
-			-- for girders, mines, sticky mines and barrels
-			elseif strucType[tempID] == loc("Construction Station") then
-
-				if GetGearType(gear) == gtHedgehog then
-					if GetHogClan(gear) == strucClan[tempID] then
-						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
-
-						for i = 1, #sProx do
-							if ((sProx[i][1] == loc("Girder Placement Mode"))
-							or (sProx[i][1] == loc("Rubber Placement Mode"))
-							or (sProx[i][1] == loc("Mine Placement Mode"))
-							or (sProx[i][1] == loc("Sticky Mine Placement Mode"))
-							or (sProx[i][1] == loc("Barrel Placement Mode")))
-							then
-								sProx[i][2] = true
-							end
-						end
-
-
-					end
-				end
-
-			-- mark as within stupport station range
-			-- and thus allow menu access to placement modes
-			-- for weapon, utility, and med crates
-			elseif strucType[tempID] == loc("Support Station") then
-
-				if GetGearType(gear) == gtHedgehog then
-					if GetHogClan(gear) == strucClan[tempID] then
-						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
-
-						for i = 1, #sProx do
-							if ((sProx[i][1] == loc("Health Crate Placement Mode"))
-							or (sProx[i][1] == loc("Weapon Crate Placement Mode"))
-							or (sProx[i][1] == loc("Utility Crate Placement Mode")))
-							then
-								sProx[i][2] = true
-								--AddCaption("wahey in a support station")
-							end
-						end
-
-
-					end
-				end
-
-			-- doesn't do shit
-			elseif strucType[tempID] == loc("Core") then
-
-				if GetGearType(gear) == gtHedgehog then
-					if GetHogClan(gear) == strucClan[tempID] then
-
-						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
-						g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
-						SetVisualGearValues(tempE, g1+20, g2, g3, g4, g5, g6, g7, g8, g9, GetClanColor(strucClan[tempID]) )
-
-						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
-						g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
-						SetVisualGearValues(tempE, g1-20, g2, g3, g4, g5, g6, g7, g8, g9, GetClanColor(strucClan[tempID]) )
-
-					end
-				end
-
-			end
-
-		end
-
-	--end
-
-end
-
--- used to check if we need to run through all hogs or just currenthedgehog
-function isAStructureThatAppliesToMultipleGears(pID)
-	if 	strucType[pID] == loc("Healing Station") or
-		strucType[pID] == loc("Reflector Shield") or
-		strucType[pID] == loc("Weapon Filter") or
-		strucType[pID] == loc("Bio-Filter")
-	then
-		return(true)
-	else
-		return(false)
-	end
-end
-
-function HandleStructures()
-
-	for i = 1, #sProx do
-		sProx[i][2] = false
-
-		if sProx[i][1] == loc("Structure Placement Mode") then
-			sProx[i][2] = true
-		end
-
-	end
-
-	for i = 1, #strucID do
-
-		g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(strucCirc[i])
-		SetVisualGearValues(strucCirc[i], GetX(strucGear[i]), GetY(strucGear[i]), g3, g4, g5, g6, g7, strucCircRadius[i], g9, strucCircCol[i])
-
-		tempID = i
-
-		g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(strucAltDisplay[i])				--8000
-		SetVisualGearValues(strucAltDisplay[i], GetX(strucGear[i]), GetY(strucGear[i]), 0, 0, g5, g6, 800000, sprTarget, g9, g10 )
-
-
-
-		-- Check For proximity of stuff to our structures
-		if isAStructureThatAppliesToMultipleGears(i) then
-			runOnGears(CheckProximity)
-		else -- only check prox on CurrentHedgehog
-			CheckProximity(CurrentHedgehog)
-		end
-
-		if strucType[i] == loc("Core") then
-			tempE = AddVisualGear(GetX(strucGear[i]), GetY(strucGear[i]), vgtSmoke, 0, true)
-			g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
-			SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, GetClanColor(strucClan[i]) )
-		elseif strucType[i] == loc("Reflector Shield") then
-
-
-
-			--frameID = 1
-			--visualSprite = sprTarget
-			--g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(strucAltDisplay[i])			--frameID / g6
-			--SetVisualGearValues(strucAltDisplay[i], GetX(strucGear[i]), GetY(strucGear[i]), 0, 0, g5, g6, 8000, visualSprite, g9, g10 )
-
-		elseif strucType[i] == loc("Generator") then
-
-			--frameID = 1
-			--visualSprite = sprTarget
-																									--layer
-			--tempE = AddVisualGear(GetX(strucGear[i]), GetY(strucGear[i]), vgtStraightShot, 1, true,1)
-			--g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)	--g9
-			--SetVisualGearValues(tempE, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
-			--SetState(strucGear[i], bor(GetState(strucGear[i]),gstInvisible) )
-
-			--currently generate power for all clans.
-			-- or should power only be generated for current clan?
-			for z = 0, ClansCount-1 do
-				if z == strucClan[i] then
-					increaseGearValue(strucGear[i],"power")
-					if getGearValue(strucGear[i],"power") == 10 then
-						setGearValue(strucGear[i],"power",0)
-						clanPower[z] = clanPower[z] + 1
-						if clanPower[z] > 1000 then
-							clanPower[z] = 1000
-						end
-					end
-
-				end
-			end
-
-		end
-
-	end
-
-
-
-	-- this is kinda messy and gross (even more than usual), fix it up at some point
-	-- it just assumes that if you have access to girders, it works for rubbers
-	-- as that is what the struc implemenation means due to construction station
-	anyUIProx = false
-	for i = 1, #sProx do
-
-		if sProx[i][1] == loc("Girder Placement Mode") then
-			if sProx[i][2] == true then
-				AddAmmo(CurrentHedgehog, amGirder, 100)
-				AddAmmo(CurrentHedgehog, amRubber, 100)
-				AddAmmo(CurrentHedgehog, amDrillStrike, 100)
-			else
-				AddAmmo(CurrentHedgehog, amGirder, 0)
-				AddAmmo(CurrentHedgehog, amRubber, 0)
-				AddAmmo(CurrentHedgehog, amDrillStrike, 0) -- new
-			end
-		elseif sProx[i][1] == loc("Teleportation Mode") then
-			if sProx[i][2] == true then
-				AddAmmo(CurrentHedgehog, amTeleport, 100)
-			else
-				AddAmmo(CurrentHedgehog, amTeleport, 0)
-			end
-		elseif sProx[i][1] == loc("Weapon Crate Placement Mode") then
-			-- this is new stuff
-			if sProx[i][2] == true then
-				AddAmmo(CurrentHedgehog, amNapalm, 100)
-			else
-				AddAmmo(CurrentHedgehog, amNapalm, 0)
-			end
-		end
-
-		if (sProx[i][2] == true) then
-			anyUIProx = true
-		end
-
-	end
-
-	-- doesn't do shit atm, maybe later when we add cores we can use this
-	--if anyUIProx == true then --(and core is placed)
-	--	AddAmmo(CurrentHedgehog, amAirAttack, 100)
-	--else
-	--	AddAmmo(CurrentHedgehog, amAirAttack, 0)
-	--end
-
-
-end
-
-
-function checkForSpecialWeapons()
-
-
-
-	if (GetCurAmmoType() == amAirAttack) then
-		AddCaption(loc("Structure Placement Tool"),GetClanColor(GetHogClan(CurrentHedgehog)),capgrpAmmoinfo)
-	elseif (GetCurAmmoType() == amDrillStrike) then
-		AddCaption(loc("Object Placement Tool"),GetClanColor(GetHogClan(CurrentHedgehog)),capgrpAmmoinfo)
-	elseif (GetCurAmmoType() == amNapalm) then
-		AddCaption(loc("Crate Placement Tool"),GetClanColor(GetHogClan(CurrentHedgehog)),capgrpAmmoinfo)
-	end
-
-	lastWep = GetCurAmmoType()
-
-end
-
-----------------------------------------------------------
--- EXCERPTS OF ADAPTED HEDGE_EDITOR CODE FOLLOWS
-----------------------------------------------------------
--- experimental crap
-
-local landType = 0
------------------------------------------
--- tracking vars for save slash load purposes
------------------------------------------
-
-local hhs = {}
-
----------------------------------
--- crates are made of this stuff
----------------------------------
-placeholder = 20
- atkArray =
-				{
-				{amBazooka, 	"amBazooka",		0, loc("Bazooka"), 			2*placeholder},
-				--{amBee, 		"amBee",			0, loc("Homing Bee"), 		4*placeholder},
-				{amMortar, 		"amMortar",			0, loc("Mortar"), 			1*placeholder},
-				{amDrill, 		"amDrill",			0, loc("Drill Rocket"), 	3*placeholder},
-				{amSnowball, 	"amSnowball",		0, loc("Mudball"), 			3*placeholder},
-
-				{amGrenade,		"amGrenade",		0, loc("Grenade"), 			2*placeholder},
-				{amClusterBomb,	"amClusterBomb",	0, loc("Cluster Bomb"), 	3*placeholder},
-				{amMolotov, 	"amMolotov",		0, loc("Molotov Cocktail"), 3*placeholder},
-				{amWatermelon, 	"amWatermelon",		0, loc("Watermelon Bomb"), 25*placeholder},
-				{amHellishBomb,	"amHellishBomb",	0, loc("Hellish Handgrenade"), 25*placeholder},
-				{amGasBomb, 	"amGasBomb",		0, loc("Limburger"), 		3*placeholder},
-
-				{amShotgun,		"amShotgun",		0, loc("Shotgun"), 			2*placeholder},
-				{amDEagle,		"amDEagle",			0, loc("Desert Eagle"), 	2*placeholder},
-				{amFlamethrower,"amFlamethrower",	0, loc("Flamethrower"), 	4*placeholder},
-				{amSniperRifle,	"amSniperRifle",	0, loc("Sniper Rifle"), 	3*placeholder},
-				--{amSineGun, 	"amSineGun",		0, loc("SineGun"), 			6*placeholder},
-				{amIceGun, 		"amIceGun",			0, loc("Freezer"), 			15*placeholder},
-				{amLandGun,		"amLandGun",		0, loc("Land Sprayer"), 	5*placeholder},
-
-				{amFirePunch, 	"amFirePunch",		0, loc("Shoryuken"), 		3*placeholder},
-				{amWhip,		"amWhip",			0, loc("Whip"), 			1*placeholder},
-				{amBaseballBat, "amBaseballBat",	0, loc("Baseball Bat"), 	7*placeholder},
-				--{amKamikaze, 	"amKamikaze",		0, loc("Kamikaze"),			1*placeholder},
-				{amSeduction, 	"amSeduction",		0, loc("Seduction"),		1*placeholder},
-				{amHammer,		"amHammer",			0, loc("Hammer"), 			1*placeholder},
-
-				{amMine, 		"amMine",			0, loc("Mine"), 			1*placeholder},
-				{amDynamite, 	"amDynamite",		0, loc("Dynamite"),			9*placeholder},
-				{amCake, 		"amCake",			0, loc("Cake"), 			25*placeholder},
-				{amBallgun, 	"amBallgun",		0, loc("Ballgun"), 			40*placeholder},
-				--{amRCPlane,		"amRCPlane",		0, loc("RC Plane"), 	25*placeholder},
-				{amSMine,		"amSMine",			0, loc("Sticky Mine"), 		5*placeholder},
-
-				--{amAirAttack,	"amAirAttack",		0, loc("Air Attack"), 		10*placeholder},
-				--{amMineStrike,	"amMineStrike",		0, loc("Mine Strike"), 		15*placeholder},
-				--{amDrillStrike,	"amDrillStrike",	0, loc("Drill Strike"), 15*placeholder},
-				--{amNapalm, 		"amNapalm",			0, loc("Napalm"), 		15*placeholder},
-				--{amPiano,		"amPiano",			0, loc("Piano Strike"), 	40*placeholder},
-
-				{amKnife,		"amKnife",			0, loc("Cleaver"), 			2*placeholder},
-
-				{amBirdy,		"amBirdy",			0, loc("Birdy"), 			7*placeholder}
-
-				}
-
- utilArray =
-				{
-				{amBlowTorch, 		"amBlowTorch",		0, loc("Blowtorch"), 		4*placeholder},
-				{amPickHammer,		"amPickHammer",		0, loc("Pickhammer"), 		2*placeholder},
-				--{amGirder, 			"amGirder",			0, loc("Girder"), 		4*placeholder},
-				--{amRubber, 			"amRubber",			0, loc("Rubber Band"), 	5*placeholder},
-				{amPortalGun,		"amPortalGun",		0, loc("Personal Portal Device"), 15*placeholder},
-
-				{amRope, 			"amRope",			0, loc("Rope"), 			7*placeholder},
-				{amParachute, 		"amParachute",		0, loc("Parachute"), 		2*placeholder},
-				--{amTeleport,		"amTeleport",		0, loc("Teleport"), 		6*placeholder},
-				{amJetpack,			"amJetpack",		0, loc("Flying Saucer"), 	8*placeholder},
-
-				{amInvulnerable,	"amInvulnerable",	0, loc("Invulnerable"), 	5*placeholder},
-				{amLaserSight,		"amLaserSight",		0, loc("Laser Sight"), 		2*placeholder},
-				{amVampiric,		"amVampiric",		0, loc("Vampirism"), 		6*placeholder},
-
-				{amLowGravity, 		"amLowGravity",		0, loc("Low Gravity"), 		4*placeholder},
-				{amExtraDamage, 	"amExtraDamage",	0, loc("Extra Damage"), 	6*placeholder},
-				{amExtraTime,		"amExtraTime",		0, loc("Extra Time"), 		8*placeholder}
-
-				--{amResurrector, 	"amResurrector",	0, loc("Resurrector"), 		8*placeholder},
-				--{amTardis, 			"amTardis",			0, loc("Tardis"), 			2*placeholder},
-
-				--{amSwitch,			"amSwitch",			0, loc("Switch Hog"), 		4*placeholder}
-				}
-
-----------------------------
--- hog and map editting junk
-----------------------------
-
- local reducedSpriteIDArray = {
-  sprBigDigit, sprKowtow, sprBee, sprExplosion50, sprGirder
-  }
-
-  local reducedSpriteTextArray = {
-  "sprBigDigit", "sprKowtow", "sprBee", "sprExplosion50", "sprGirder"
-  }
-
-----------------------------
--- placement shite
-----------------------------
-
-local cGear = nil -- detects placement of girders and objects (using airattack)
-local curWep = amNothing
-
--- primary placement categories
-local cIndex = 1 -- category index
-local cat = 	{
-				"Girder Placement Mode",
-				"Rubber Placement Mode",
-				"Mine Placement Mode",
-				"Sticky Mine Placement Mode",
-				"Barrel Placement Mode",
-				"Health Crate Placement Mode",
-				"Weapon Crate Placement Mode",
-				"Utility Crate Placement Mode",
-				--"Target Placement Mode",
-				--"Cleaver Placement Mode",
-
-				--"Advanced Repositioning Mode",
-				--"Tagging Mode",
-				--"Sprite Testing Mode",
-				--"Sprite Placement Mode",
-				"Structure Placement Mode"
-				}
-
-
- sProx = 	{
-				{loc("Girder Placement Mode"),false},
-				{loc("Rubber Placement Mode"),false},
-				{loc("Mine Placement Mode"),false},
-				{loc("Sticky Mine Placement Mode"),false},
-				{loc("Barrel Placement Mode"),false},
-				{loc("Health Crate Placement Mode"),false},
-				{loc("Weapon Crate Placement Mode"),false},
-				{loc("Utility Crate Placement Mode"),false},
-				--{loc("Target Placement Mode"),false},
-				--{loc("Cleaver Placement Mode"),false},
-
-				--{loc("Advanced Repositioning Mode"),false},
-				--{loc("Tagging Mode"),false},
-				--{loc("Sprite Testing Mode"),false},
-				--{loc("Sprite Placement Mode"),false},
-				{loc("Structure Placement Mode"),false},
-				{loc("Teleportation Mode"),false}
-				}
-
-
-local pMode = {}	-- pMode contains custom subsets of the main categories
-local pIndex = 1
-
-local genTimer = 0
-
-local CGR = 1 -- current girder rotation, we actually need this as HW remembers what rotation you last used
-
-local placedX = {}
-local placedY = {}
-local placedSpec = {}
-local placedSuperSpec = {}
-local placedType = {}
-local placedCount = 0
-
-local sCirc -- circle that appears around selected gears
-local sGear = nil
-local closestDist
-local closestGear = nil
-
-local tCirc = {} -- array of circles that appear around tagged gears
-
-------------------------
--- SOME GENERAL METHODS
-------------------------
-
-function GetDistFromGearToXY(gear, g2X, g2Y)
-
-	g1X, g1Y = GetGearPosition(gear)
-	q = g1X - g2X
-	w = g1Y - g2Y
-
-	return ( (q*q) + (w*w) )
-
-end
-
-function GetDistFromXYtoXY(a, b, c, d)
-	q = a - c
-	w = b - d
-	return ( (q*q) + (w*w) )
-end
-
-function SelectGear(gear)
-
-	d = GetDistFromGearToXY(gear, placedX[placedCount], placedY[placedCount])
-
-	if d < closestDist then
-		closestDist = d
-		closestGear = gear
-	end
-
-end
-
--- essentially called when user clicks the mouse
--- with girders or an airattack
-function PlaceObject(x,y)
-
-	placedX[placedCount] = x
-	placedY[placedCount] = y
-	placedType[placedCount] = cat[cIndex]
-	placedSpec[placedCount] = pMode[pIndex]
-
-	if (clanUsedExtraTime[GetHogClan(CurrentHedgehog)] == true) and (cat[cIndex] == "Utility Crate Placement Mode") and (utilArray[pIndex][1] == amExtraTime) then
-		AddCaption(loc("You may only use 1 Extra Time per turn."),0xffba00ff,capgrpVolume)
-		PlaySound(sndDenied)
-	elseif (clanCratesSpawned[GetHogClan(CurrentHedgehog)] > 4) and ( (cat[cIndex] == "Health Crate Placement Mode") or (cat[cIndex] == "Utility Crate Placement Mode") or (cat[cIndex] == "Weapon Crate Placement Mode")  )  then
-		AddCaption(loc("You may only spawn 5 crates per turn."),0xffba00ff,capgrpVolume)
-		PlaySound(sndDenied)
-	elseif (XYisInRect(x,y, clanBoundsSX[GetHogClan(CurrentHedgehog)],clanBoundsSY[GetHogClan(CurrentHedgehog)],clanBoundsEX[GetHogClan(CurrentHedgehog)],clanBoundsEY[GetHogClan(CurrentHedgehog)]) == true)
-	and (clanPower[GetHogClan(CurrentHedgehog)] >= placedExpense)
-	then
-
-
-
-		if cat[cIndex] == "Girder Placement Mode" then
-			PlaceGirder(x, y, CGR)
-			placedSpec[placedCount] = CGR
-		elseif cat[cIndex] == "Rubber Placement Mode" then
-			PlaceSprite(x,y, sprAmRubber, CGR, nil, nil, nil, nil, lfBouncy)
-			--PlaceGirder(x, y, CGR)
-			placedSpec[placedCount] = CGR
-		elseif cat[cIndex] == "Target Placement Mode" then
-			gear = AddGear(x, y, gtTarget, 0, 0, 0, 0)
-		elseif cat[cIndex] == "Cleaver Placement Mode" then
-			gear = AddGear(x, y, gtKnife, 0, 0, 0, 0)
-		elseif cat[cIndex] == "Health Crate Placement Mode" then
-			gear = SpawnHealthCrate(x,y)
-			SetHealth(gear, pMode[pIndex])
-			setGearValue(gear,"caseType","med")
-			clanCratesSpawned[GetHogClan(CurrentHedgehog)] = clanCratesSpawned[GetHogClan(CurrentHedgehog)] +1
-		elseif cat[cIndex] == "Weapon Crate Placement Mode" then
-			gear = SpawnAmmoCrate(x, y, atkArray[pIndex][1])
-			placedSpec[placedCount] = atkArray[pIndex][2]
-			setGearValue(gear,"caseType","ammo")
-			setGearValue(gear,"contents",atkArray[pIndex][2])
-			clanCratesSpawned[GetHogClan(CurrentHedgehog)] = clanCratesSpawned[GetHogClan(CurrentHedgehog)] +1
-		elseif cat[cIndex] == "Utility Crate Placement Mode" then
-			gear = SpawnUtilityCrate(x, y, utilArray[pIndex][1])
-			placedSpec[placedCount] = utilArray[pIndex][2]
-			setGearValue(gear,"caseType","util")
-			setGearValue(gear,"contents",utilArray[pIndex][2])
-			if utilArray[pIndex][1] == amExtraTime then
-				clanUsedExtraTime[GetHogClan(CurrentHedgehog)] = true
-			end
-			clanCratesSpawned[GetHogClan(CurrentHedgehog)] = clanCratesSpawned[GetHogClan(CurrentHedgehog)] +1
-		elseif cat[cIndex] == "Barrel Placement Mode" then
-			gear = AddGear(x, y, gtExplosives, 0, 0, 0, 0)
-			SetHealth(gear, pMode[pIndex])
-		elseif cat[cIndex] == "Mine Placement Mode" then
-			gear = AddGear(x, y, gtMine, 0, 0, 0, 0)
-			SetTimer(gear, pMode[pIndex])
-		elseif cat[cIndex] == "Sticky Mine Placement Mode" then
-			gear = AddGear(x, y, gtSMine, 0, 0, 0, 0)
-		elseif cat[cIndex] == "Advanced Repositioning Mode" then
-
-			if pMode[pIndex] == "Selection Mode" then
-				closestDist = 999999999
-				closestGear = nil -- just in case
-				sGear = nil
-				runOnGears(SelectGear)
-				sGear = closestGear
-				closestGear = nil
-			elseif pMode[pIndex] == "Placement Mode" then
-				if sGear ~= nil then
-					SetGearPosition(sGear, x, y)
-				end
-			end
-
-		elseif cat[cIndex] == "Tagging Mode" then
-
-			closestDist = 999999999
-			closestGear = nil
-			sGear = nil
-			runOnGears(SelectGear)
-
-
-			if closestGear ~= nil then
-
-				if getGearValue(closestGear,"tag") == nil then
-
-					--if there is no tag, add a victory/failure tag and circle
-					setGearValue(closestGear, "tCirc",AddVisualGear(0,0,vgtCircle,0,true))
-
-					--AddCaption("circ added",0xffba00ff,capgrpVolume)
-
-					if pMode[pIndex] == "Tag Victory Mode" then
-						setGearValue(closestGear, "tag","victory")
-						SetVisualGearValues(getGearValue(closestGear,"tCirc"), 0, 0, 100, 255, 1, 10, 0, 40, 3, 0xff0000ff)
-					elseif pMode[pIndex] == "Tag Failure Mode" then
-						setGearValue(closestGear, "tag","failure")
-						SetVisualGearValues(getGearValue(closestGear,"tCirc"), 0, 0, 100, 255, 1, 10, 0, 40, 3, 0x0000ffff)
-					end
-
-
-				else
-					-- remove tag and delete circ
-					--AddCaption("circ removed",0xffba00ff,capgrpVolume)
-					setGearValue(closestGear, "tag", nil)
-					DeleteVisualGear(getGearValue(closestGear,"tCirc"))
-					setGearValue(closestGear, "tCirc", nil)
-				end
-
-			end
-
-
-		elseif cat[cIndex] == "Sprite Testing Mode" then
-
-			frameID = 1
-			visualSprite = reducedSpriteIDArray[pIndex]
-			--visualSprite = spriteIDArray[pIndex]
-			tempE = AddVisualGear(x, y, vgtStraightShot, 0, true)
-			g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
-			SetVisualGearValues(tempE, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
-	--sprHorizonLong crashes game, so does skyL, as does flake
-
-		-- reduced list of cool sprites
-		-- sprBigDigit, sprKnife, sprFrozenHog, sprKowtow, sprBee, sprExplosion50, sprPiano, sprChunk, sprHHTelepMask, sprSeduction, sprSwitch, sprGirder,
-		--sprAMAmmos, sprAMSlotKeys, sprTurnsLeft, sprExplosivesRoll + maybe some others like the health case, arrows, etc
-
-		elseif cat[cIndex] == "Sprite Placement Mode" then
-
-			PlaceSprite(x,y, reducedSpriteIDArray[pIndex], 1, nil, nil, nil, nil, landType)
-			--PlaceGirder(x, y, CGR)
-			placedSpec[placedCount] = reducedSpriteTextArray[pIndex]
-			placedSuperSpec[placedCount] = landType
-
-			if landType == lfIce then
-				placedSuperSpec[placedCount] = "lfIce"
-			elseif landType == lfIndestructible then
-				placedSuperSpec[placedCount] = "lfIndestructible"
-			elseif landType == lfBouncy then
-				placedSuperSpec[placedCount] = "lfBouncy"
-			else
-				placedSuperSpec[placedCount] = "lfNormal"
-			end
-
-		elseif cat[cIndex] == "Structure Placement Mode" then
-
-			AddStruc(x,y, pMode[pIndex],GetHogClan(CurrentHedgehog))
-
-		end
-
-		clanPower[GetHogClan(CurrentHedgehog)] = clanPower[GetHogClan(CurrentHedgehog)] - placedExpense
-		placedCount = placedCount + 1
-
-	else
-	    if (clanPower[GetHogClan(CurrentHedgehog)] >= placedExpense) then
-            AddCaption(loc("Invalid Placement"),0xffba00ff,capgrpVolume)
-        else
-            AddCaption(loc("Insufficient Power"),0xffba00ff,capgrpVolume)
-        end
-		PlaySound(sndDenied)
-	end
-
-
-end
-
--- called when user changes primary selection
--- either via up/down keys
--- or selecting girder/airattack
-function RedefineSubset()
-
-	pIndex = 1
-	pMode = {}
-	placedExpense = 1
-
-	if cat[cIndex] == "Girder Placement Mode" then
-		pIndex = CGR
-		pMode = {"Girder"}
-		--	pCount = 1
-	elseif cat[cIndex] == "Rubber Placement Mode" then
-		pIndex = CGR
-		pMode = {"Rubber"}
-		placedExpense = 3
-	--	pCount = 1???
-	elseif cat[cIndex] == "Target Placement Mode" then
-		pMode = {"Standard Target"}
-	elseif cat[cIndex] == "Cleaver Placement Mode" then
-		pMode = {"Standard Cleaver"}
-	elseif cat[cIndex] == "Barrel Placement Mode" then
-		--pMode = {1,50,75,100}
-		pMode = {50}
-		placedExpense = 10
-	elseif cat[cIndex] == "Health Crate Placement Mode" then
-		--pMode = {25,50,75,100}
-		pMode = {25}
-		placedExpense = 5
-	elseif cat[cIndex] == "Weapon Crate Placement Mode" then
-		for i = 1, #atkArray do
-			pMode[i] = atkArray[i][4] -- was [2]
-			--placedExpense = atkArray[5]
-		end
-		placedExpense = 30
-	elseif cat[cIndex] == "Utility Crate Placement Mode" then
-		for i = 1, #utilArray do
-			pMode[i] = utilArray[i][4] -- was [2]
-			--placedExpense = utilArray[5]
-		end
-		placedExpense = 20
-	elseif cat[cIndex] == "Mine Placement Mode" then
-		--pMode = {1,1000,2000,3000,4000,5000,0}
-		pMode = {1,1000,2000,3000,4000,5000}
-		-- 0 is dud right, or is that nil?
-		placedExpense = 15
-	elseif cat[cIndex] == "Sticky Mine Placement Mode" then
-		pMode = {"Normal Sticky Mine"}
-	--elseif cat[cIndex] == "Gear Repositioning Mode" then
-	--	for i = 1, #hhs do
-	--		pMode[i] = GetHogName(hhs[i])
-	--	end
-		placedExpense = 20
-	elseif cat[cIndex] == "Advanced Repositioning Mode" then
-		pMode = {"Selection Mode","Placement Mode"}
-	elseif cat[cIndex] == "Tagging Mode" then
-		pMode = {"Tag Victory Mode","Tag Failure Mode"}
-	elseif cat[cIndex] == "Sprite Testing Mode" or cat[cIndex] == "Sprite Placement Mode" then
-		--for i = 1, #spriteTextArray do
-		--	pMode[i] = spriteTextArray[i]
-		--end
-		for i = 1, #reducedSpriteTextArray do
-			pMode[i] = reducedSpriteTextArray[i]
-		end
-		placedExpense = 100
-	elseif cat[cIndex] == "Structure Placement Mode" then
-		pMode = {loc("Healing Station"), loc("Bio-Filter"), loc("Weapon Filter"), loc("Reflector Shield"), loc("Respawner"),loc("Teleportation Node"),--[[loc("Core"),]]loc("Generator"),loc("Construction Station"),loc("Support Station")}
-		--placedExpense = 100
-	end
-
-
-
-
-end
-
--- called in onGameTick()
-function HandleHedgeEditor()
-
-	if CurrentHedgehog ~= nil then
-
-		if wallsVisible == true then
-			HandleBorderEffects()
-		end
-
-		if (CurrentHedgehog ~= nil) and (TurnTimeLeft ~= TurnTime) then
-			if (lastWep ~= GetCurAmmoType()) then
-				checkForSpecialWeapons()
-			end
-		end
-
-		genTimer = genTimer + 1
-
-		if genTimer >= 100 then
-
-			genTimer = 0
-
-			DrawTag(1)
-
-			HandleStructures()
-
-			curWep = GetCurAmmoType()
-
-			-- change to girder mode on weapon swap
-			if (cIndex ~= 1) and (curWep == amGirder) then
-				cIndex = 1
-				RedefineSubset()
-			elseif (cIndex ~=2) and (curWep == amRubber) then
-				cIndex = 2
-				RedefineSubset()
-			-- change to generic mode if girder no longer selected
-			elseif (cIndex == 1) and (curWep ~= amGirder) then
-				cIndex = 3 -- was 2
-				RedefineSubset()
-			elseif (cIndex == 2) and (curWep ~= amRubber) then
-				cIndex = 3 --new
-				RedefineSubset()
-
-			end
-
-			-- update display selection criteria
-			if (curWep == amGirder) or (curWep == amAirAttack) or (curWep == amNapalm) or (curWep == amDrillStrike) or (curWep == amRubber) then
-
-				---------------hooolllllyyyy fucking shit this
-				-- code is a broken mess now
-				-- it was redesigned and compromised three times
-				-- so now it is a mess trying to do what it was
-				-- never designed to do
-				-- needs to be rewritten badly sadface
-				-- this bit here catches the new 3 types of weapons
-				if ((sProx[cIndex][1] == loc("Structure Placement Mode") and (curWep ~= amAirAttack))) then
-					updatePlacementDisplay(1)
-				elseif (sProx[cIndex][1] == loc("Health Crate Placement Mode")) or
-							(sProx[cIndex][1] == loc("Weapon Crate Placement Mode")) or
-							(sProx[cIndex][1] == loc("Utility Crate Placement Mode")) then
-								if curWep ~= amNapalm then
-									updatePlacementDisplay(1)
-								end
-
-				elseif (sProx[cIndex][1] == loc("Mine Placement Mode")) or
-							(sProx[cIndex][1] == loc("Sticky Mine Placement Mode")) or
-							(sProx[cIndex][1] == loc("Barrel Placement Mode")) then
-								if curWep ~= amDrillStrike then
-									updatePlacementDisplay(1)
-								end
-
-				end
-
-				--this is called when it happens that we have placement
-				--mode selected and we are looking at something
-				--we shouldn't be allowed to look at, as would be the case
-				--when you WERE allowed to look at it, but then maybe
-				--a bomb blows up the structure that was granting you
-				--that ability
-				if (sProx[cIndex][2] ~= true) then
-					updatePlacementDisplay(1)
-				else
-					updateCost()
-				end
-
-
-				AddCaption(cat[cIndex],0xffba00ff,capgrpMessage)
-				AddCaption(pMode[pIndex],0xffba00ff,capgrpMessage2)
-				wallsVisible = true
-			else
-				wallsVisible = false
-			end
-
-		end
-
-	end
-
-	--update selected gear display
-	if (cat[cIndex] == "Advanced Repositioning Mode") and (sGear ~= nil) then
-		SetVisualGearValues(sCirc, GetX(sGear), GetY(sGear), 100, 255, 1, 10, 0, 300, 3, 0xff00ffff)
-	elseif (cat[cIndex] == "Tagging Mode") then
-		if (sGear ~= nil) or (closestGear ~= nil) then
-			SetVisualGearValues(sCirc, GetX(sGear), GetY(sGear), 0, 1, 1, 10, 0, 1, 1, 0x00000000)
-			closestGear = nil
-			sGear = nil
-		end
-	end
-
-	-- some kind of target detected, tell me your story
-	if cGear ~= nil then
-
-		x,y = GetGearTarget(cGear)
-
-		if GetGearType(cGear) == gtAirAttack then
-			DeleteGear(cGear)
-			PlaceObject(x, y)
-		elseif GetGearType(cGear) == gtTeleport then
-
-				CheckTeleport(cGear, x, y)
-				cGear = nil
-		elseif GetGearType(cGear) == gtGirder then
-
-			CGR = GetState(cGear)
-
-			-- improve rectangle test based on CGR when you can be bothered
-			--if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then
-			--	AddCaption("Invalid Girder Placement",0xffba00ff,capgrpVolume)
-			--else
-				PlaceObject(x, y)
-			--end
-
-			-- this allows the girder tool to be used like a mining laser
-
-		--[[
-
-			if CGR < 4 then
-				AddGear(x, y, gtGrenade, 0, 0, 0, 1)
-			elseif CGR == 4 then
-				g = AddGear(x-30, y, gtGrenade, 0, 0, 0, 1)
-				g = AddGear(x+30, y, gtGrenade, 0, 0, 0, 1)
-			elseif CGR == 5 then -------
-				g = AddGear(x+30, y+30, gtGrenade, 0, 0, 0, 1)
-				g = AddGear(x-30, y-30, gtGrenade, 0, 0, 0, 1)
-			elseif CGR == 6 then
-				g = AddGear(x, y+30, gtGrenade, 0, 0, 0, 1)
-				g = AddGear(x, y-30, gtGrenade, 0, 0, 0, 1)
-			elseif CGR == 7 then -------
-				g = AddGear(x+30, y-30, gtGrenade, 0, 0, 0, 1)
-				g = AddGear(x-30, y+30, gtGrenade, 0, 0, 0, 1)
-			end
-]]
-		end
-
-	end
-
-end
-
---------------------------------------------------
--- EVENT HANDLERS
---------------------------------------------------
-
-function onTaunt(t)
-	tauntString = tauntString .. t
-	if (tauntString == "101") and (clanPower[GetHogClan(CurrentHedgehog)] < 300) and (clanBoon[GetHogClan(CurrentHedgehog)] == false) then
-		clanBoon[GetHogClan(CurrentHedgehog)] = true
-		clanPower[GetHogClan(CurrentHedgehog)] = 1000
-		AddCaption(loc("The Great Hog in the sky sees your sadness and grants you a boon."))
-	end
-end
-
----------------------------------------------------------------
--- Cycle through selection subsets (by changing pIndex, pMode)
--- i.e 	health of barrels, medikits,
---		timer of mines
---		contents of crates
---		gears to reposition etc.
----------------------------------------------------------------
-
-function updateCost()
-
-	if pMode[pIndex] == loc("Healing Station") then
-		placedExpense = 50
-	elseif pMode[pIndex] == loc("Weapon Filter") then
-		placedExpense = 50
-	elseif pMode[pIndex] == loc("Bio-Filter") then
-		placedExpense = 100
-	elseif pMode[pIndex] == loc("Respawner") then
-		placedExpense = 300
-	elseif pMode[pIndex] == loc("Teleportation Node") then
-		placedExpense = 30
-	elseif pMode[pIndex] == loc("Support Station") then
-		placedExpense = 50
-	elseif pMode[pIndex] == loc("Construction Station") then
-		placedExpense = 50
-	elseif pMode[pIndex] == loc("Generator") then
-			placedExpense = 300
-	elseif pMode[pIndex] == loc("Reflector Shield") then
-			placedExpense = 200
-	elseif pMode[pIndex] == loc("Core") then
-		placedExpense = 1
-	elseif cat[cIndex] == loc("Weapon Crate Placement Mode") then
-		placedExpense = atkArray[pIndex][5]
-	elseif cat[cIndex] == loc("Utility Crate Placement Mode") then
-		placedExpense = utilArray[pIndex][5]
-	end
-
-	AddCaption(loc("Cost") .. ": " .. placedExpense,0xffba00ff,capgrpAmmostate)
-
-end
-
-function onLeft()
-
-	pIndex = pIndex - 1
-	if pIndex == 0 then
-		pIndex = #pMode
-	end
-
-	if (curWep == amGirder) or (curWep == amAirAttack) or (curWep == amNapalm) or (curWep == amDrillStrike) then
-		AddCaption(pMode[pIndex],0xffba00ff,capgrpMessage2)
-		updateCost()
-	end
-
-
-end
-
-function onRight()
-
-	pIndex = pIndex + 1
-	if pIndex > #pMode then
-		pIndex = 1
-	end
-
-	if (curWep == amGirder) or (curWep == amAirAttack) or (curWep == amNapalm) or (curWep == amDrillStrike) then
-		AddCaption(pMode[pIndex],0xffba00ff,capgrpMessage2)
-		updateCost()
-	end
-
-end
-
-
-function updatePlacementDisplay(pDir)
-
-	foundMatch = false
-	while(foundMatch == false) do
-		cIndex = cIndex + pDir
-
-		if (cIndex == 1) or (cIndex == 2) then --1	--we no longer hit girder by normal means
-			cIndex = #cat
-		elseif cIndex > #cat then
-			cIndex = 3	 -- 2 ----we no longer hit girder by normal means
-		end
-
-		-- new way of doing things
-		-- sProx[cIndex][2] == true just basically means we have ACCESS to something
-		-- but that doesn't neccessarily mean we are in the correct content menu, anymore
-		-- so we need to refine this a little
-		if sProx[cIndex][2] == true then
-			if (GetCurAmmoType() == amNapalm) then
-				if (sProx[cIndex][1] == loc("Health Crate Placement Mode")) or
-					(sProx[cIndex][1] == loc("Weapon Crate Placement Mode")) or
-					(sProx[cIndex][1] == loc("Utility Crate Placement Mode"))
-					then
-						foundMatch = true
-					end
-			elseif (GetCurAmmoType() == amDrillStrike) then
-				if (sProx[cIndex][1] == loc("Mine Placement Mode")) or
-					(sProx[cIndex][1] == loc("Sticky Mine Placement Mode")) or
-					(sProx[cIndex][1] == loc("Barrel Placement Mode"))
-					then
-						foundMatch = true
-					end
-			elseif (GetCurAmmoType() == amAirAttack) then
-				if sProx[cIndex][1] == loc("Structure Placement Mode") then
-					foundMatch = true
-				end
-			end
-		end
-
-
-		if foundMatch == true then
-		--if sProx[cIndex][2] == true then
-			-- normal case (scrolling through)
-			--foundMatch = true
-			RedefineSubset()
-			updateCost()
-		end
-
-	end
-
-end
-
----------------------------------------------------------
--- Cycle through primary categories (by changing cIndex)
--- i.e 	mine, sticky mine, barrels
---		health/weapon/utility crate, placement of gears
----------------------------------------------------------
-function onUp()
-
-	if ((curWep == amAirAttack) or (curWep == amNapalm) or (curWep == amDrillStrike) ) then
-		updatePlacementDisplay(-1)
-	end
-
-end
-
-function onDown()
-
-	if ((curWep == amAirAttack) or (curWep == amNapalm) or (curWep == amDrillStrike) ) then
-		updatePlacementDisplay(1)
-	end
-
-end
-
-----------------------------
--- standard event handlers
-----------------------------
-
-function onGameInit()
-
-	Explosives = 0
-	MinesNum = 0
-
-	EnableGameFlags(gfInfAttack)
-
-
-	RedefineSubset()
-
-end
-
-function initialSetup(gear)
-
-	FindPlace(gear, false, clanBoundsSX[GetHogClan(gear)], clanBoundsEX[GetHogClan(gear)],true)
-
-	-- for now, everyone should have this stuff
-	AddAmmo(gear, amAirAttack, 100)
-	AddAmmo(gear, amSwitch, 100)
-	AddAmmo(gear, amSkip, 100)
-
-end
-
-function onGameStart()
-
-	trackTeams()
-
-	ShowMission	(
-				loc("CONSTRUCTION MODE"),
-				loc("a Hedgewars mini-game"),
-				" " .. "|" ..
-				loc("Build a fortress and destroy your enemy.") .. "|" ..
-				--loc("Defend your core from the enemy.") .. "|" ..
-				loc("There are a variety of structures available to aid you.") .. "|" ..
-				loc("Use the air-attack weapons and the arrow keys to select structures.") .. "|" ..
-				" " .. "|" ..
-				--loc("Core") .. ": " .. loc("Allows placement of structures.")  .. "|" ..
-				loc("Healing Station") .. ": " .. loc("Grants nearby hogs life-regeneration.")  .. "|" ..
-				loc("Bio-Filter") .. ": " .. loc("Aggressively removes enemy hedgehogs.")  .. "|" ..
-				loc("Weapon Filter") .. ": " .. loc("Dematerializes weapons and equipment carried by enemy hedgehogs.")  .. "|" ..
-				loc("Reflector Shield") .. ": " .. loc("Reflects enemy projectiles.")  .. "|" ..
-
-				loc("Generator") .. ": " .. loc("Generates power.")  .. "|" ..
-				loc("Respawner") .. ": " .. loc("Resurrects dead hedgehogs.")  .. "|" ..
-				loc("Teleporation Node") .. ": " .. loc("Allows free teleportation between other nodes.")  .. "|" ..
-				loc("Construction Station") .. ": " .. loc("Allows placement of girders, rubber-bands, mines, sticky mines and barrels.")  .. "|" ..
-				loc("Support Station") .. ": " .. loc("Allows the placement of weapons, utiliites, and health crates.")  .. "|" ..
-
-
-				" " .. "|" ..
-				--" " .. "|" ..
-				"", 4, 5000
-				)
-
-
-	sCirc = AddVisualGear(0,0,vgtCircle,0,true)
-	SetVisualGearValues(sCirc, 0, 0, 100, 255, 1, 10, 0, 40, 3, 0x00000000)
-
-	for i = 0, ClansCount-1 do
-		clanPower[i] = 500
-		clanBoon[i] = false
-		clanLWepIndex[i] = 1 -- for ease of use let's track this stuff
-		clanLUtilIndex[i] = 1
-		clanLGearIndex[i] = 1
-		clanUsedExtraTime[i] = false
-		clanCratesSpawned[i] = 0
-
-
-	end
-
-	tMapWidth = RightX - LeftX
-	tMapHeight = WaterLine - TopY
-	clanInterval = div(tMapWidth,ClansCount)
-
-	for i = 1, ClansCount do
-
-		clanBoundsSX[i-1] = LeftX+(clanInterval*i)-clanInterval+20
-		clanBoundsSY[i-1] = TopY
-		clanBoundsEX[i-1] = LeftX+(clanInterval*i)-20
-		clanBoundsEY[i-1] = WaterLine
-
-		--top and bottom
-		AddWall(LeftX+(clanInterval*i)-clanInterval,TopY,clanInterval,margin,GetClanColor(i-1))
-		AddWall(LeftX+(clanInterval*i)-clanInterval,WaterLine-25,clanInterval,margin,GetClanColor(i-1))
-
-		--add a wall to the left and right
-		AddWall(LeftX+(clanInterval*i)-clanInterval+20,TopY,margin,WaterLine,GetClanColor(i-1))
-		AddWall(LeftX+(clanInterval*i)-20,TopY,margin,WaterLine,GetClanColor(i-1))
-
-	end
-
-	runOnHogs(initialSetup)
-
-end
-
-
-function onNewTurn()
-
-	tauntString = ""
-	clanPower[GetHogClan(CurrentHedgehog)] = clanPower[GetHogClan(CurrentHedgehog)] + 50
-	clanUsedExtraTime[GetHogClan(CurrentHedgehog)] = false
-	clanCratesSpawned[GetHogClan(CurrentHedgehog)] = 0
-
-end
-
-function onGameTick()
-	HandleHedgeEditor()
-end
-
-function isATrackedGear(gear)
-	if 	(GetGearType(gear) == gtHedgehog) or
-		(GetGearType(gear) == gtTarget) or
-		(GetGearType(gear) == gtCase)
-	then
-		return(true)
-	else
-		return(false)
-	end
-end
-
--- track hedgehogs and placement gears
-function onGearAdd(gear)
-
-	if GetGearType(gear) == gtHedgehog then
-		--table.insert(hhs, gear)
-	elseif (GetGearType(gear) == gtAirAttack) or (GetGearType(gear) == gtTeleport) or (GetGearType(gear) == gtGirder) then
-		cGear = gear
-
-	end
-
-	if isATrackedGear(gear) then
-		trackGear(gear)
-	elseif gearCanBeDeflected(gear) then
-		trackGear(gear)
-		setGearReflectionValues(gear)
-	end
-
-end
-
-function onGearDelete(gear)
-
-	if GetGearType(gear) == gtTarget then
-		CheckGearForStructureLink(gear)
-	end
-
-	if (GetGearType(gear) == gtAirAttack) or (GetGearType(gear) == gtTeleport) or (GetGearType(gear) == gtGirder) then
-		cGear = nil
-	end
-
-	if (isATrackedGear(gear) or gearCanBeDeflected(gear)) then
-
-		if getGearValue(gear, "tCirc") ~= nil then
-			DeleteVisualGear(getGearValue(gear, "tCirc"))
-		end
-
-		trackDeletion(gear)
-
-	end
-
-end
+---------------------------------------------------------
+--- LE CONSTRUCTION MODE 0.7 (badly adapted from Hedge Editor 0.5)
+---------------------------------------------------------
+-- a hedgewars gameplay mode by mikade
+-- special thanks to all who helped test and offered suggestions
+-- additional thanks to sheepluva/nemo for adding some extra hooks
+
+-- (to do)
+-- investigate loc not working on addcaptions
+-- check for parsecommands before porting to dev
+-- test onUpDown more extensively as it may need revision (check for amRubber etc)
+-- test localization of weapons and utils and stuff
+
+-- try posistion grenades in Harmer so it blows hogs away from the struc
+-- and don't explode too close to the struc
+
+-- additional/previous balance ideas
+-- based on your money?
+-- based on the number of strucs/gens you own?
+-- based on your existing arsenal?
+-- limit number of crates spawned per round perhaps (done)
+-- limit number of generators?
+
+------------------------------------------------------------------------------
+--version history
+------------------------------------------------------------------------------
+--v0.1
+-- concept test
+
+--v0.2
+-- improved documentation (in script and in game)
+-- improved localisation (or is it? at any rate, crate placement should now say e.g. Bazooka and not amBazooka)
+-- added variable weapon costs (based on the values from Vatten's Consumerism script)
+
+-- added reflector shield (still needs work and balancing)
+-- added weapon-filter (probably ok)
+
+-- enabled super weapons like ballgun, rcplane, watermelon, hellish to test balance
+-- reduce max money to 1000
+
+--v0.3
+-- some /s removed
+
+--v0.4
+-- added support for per hog ammo (hopefully)
+
+--v0.5 (dev)
+-- added somewhat horribly implemented support for different structure sprites
+-- added override pictures for ammo menu
+-- added override message on wep select to aid understanding
+-- split menu into/between weps/parts: struc, crates, gears
+-- add a limit on crates per turn
+-- add a limit on extra time per turn
+-- add a test level
+-- restored rubber placement
+-- cleaned up some of the code a bit and removed about 280 lines of code I didn't need, lol
+
+--v0.6 (dev)
+-- added magic dance
+
+--v.07 (pushed to repo)
+-- added a cfg file
+-- removed another 903 lines of code we weren't using (lol)
+
+--------------------------------
+-- STRUCTURES LIST / IDEAS
+--------------------------------
+
+--Healing Station: heals hogs to 150 life
+--Teleportation Node: allows teleporting to any other teleporter nodes
+--Bio-filter: explodes enemy hogs
+--Respawner: if you have one of these, any slain hogs are resurrected here :D
+--Generator: generates energy (used to buy stuff, and possibly later other strucs might have upkeep costs)
+--Support Station: allows purchasing of weapons, utilities, and med-crates
+--Construction Station: allows purchasing of girders, rubber, mines, sticky mines, barrels
+--Reflector Shield: reflect projectiles
+--Weapon Filter: kill all equipement of enemy hogs passing through this area.
+
+
+--to make the grill more attractive make it vaporize flying saucers
+--and also rope, and maybe incoming gears
+
+-- make healing thing also cure poison
+-- maybe make poison more virulent and dangerous
+
+--(not implemented / abandoned ideas)
+-- Core: allows construction of other structures.
+-- Automated Turret (think red drones from space invasion)
+-- Canon (gives access to 3 fireballs per turn while near)
+-- something that allows control of wind/water
+-- Gravity Field generator : triggers world gravity change
+
+-- structures consume power over time and
+-- maybe you can turn structures OFF/ON, manually to save power.
+
+-- hacking
+-- allow hacking of structures, either being able to use enemy structures,
+-- or turning a team's structures against them.
+
+-- pylons
+-- allow hogs to put down a pylon-like gear which then allows the core
+-- to place other structures/objects within the pylon's sphere of influence
+-- this would allow aggressive structure advancement
+
+-- resouce mining?
+-- you could designate something like mines, that you could get close to,
+-- "pick up", and then "drop" back at a central location to simulate
+-- resource mining. bit complicated/meh, normal power generators probably easier
+
+-- it would be cool to have a red mask we could apply over girders
+-- that would indicate they were Indestructible
+
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+HedgewarsScriptLoad("/Scripts/Tracker.lua")
+
+----------------------------------------------
+-- STRUC CRAP
+----------------------------------------------
+
+strucID = {}
+strucGear = {}
+strucClan = {}
+strucType = {}
+strucCost = {}
+strucHealth = {}
+
+strucCirc = {}
+strucCircCol = {}
+strucCircRadius = {}
+strucCircType = {}
+strucAltDisplay = {}
+
+placedExpense = 0
+
+tempID = nil
+
+sUID = 0
+
+colorRed = 0xff0000ff
+colorGreen = 0x00ff00ff
+
+clanBoundsSX = {}
+clanBoundsSY = {}
+clanBoundsEX = {}
+clanBoundsEY = {}
+
+clanPower = {}
+clanBoon = {}
+clanID = {}
+clanLStrucIndex = {}
+
+clanLWepIndex = {} -- for ease of use let's track this stuff
+clanLUtilIndex = {}
+clanLGearIndex = {}
+clanUsedExtraTime = {}
+clanCratesSpawned = {}
+
+effectTimer = 0
+
+wallsVisible = false
+wX = {}
+wY = {}
+wWidth = {}
+wHeight = {}
+wCol = {}
+margin = 20
+
+tauntString = ""
+
+vTag = {}
+lastWep = nil
+
+function HideTags()
+
+	for i = 0, 2 do
+		SetVisualGearValues(vTag[i],0,0,0,0,0,1,0, 0, 240000, 0xffffff00)
+	end
+
+end
+
+function DrawTag(i)
+
+	zoomL = 1.3
+
+	xOffset = 40
+
+	if i == 0 then
+		yOffset = 40
+		tCol = 0xffba00ff
+		tValue = 30--TimeLeft
+	elseif i == 1 then
+		zoomL = 1.1
+		xOffset = 45
+		yOffset = 70
+		tCol = 0x00ff00ff
+		tValue = clanPower[GetHogClan(CurrentHedgehog)]
+	elseif i == 2 then
+		zoomL = 1.1
+		xOffset = 60 + 35
+		yOffset = 70
+		tCol = 0xa800ffff
+		tValue = 10--shieldHealth - 80
+	end
+
+	DeleteVisualGear(vTag[i])
+	vTag[i] = AddVisualGear(0, 0, vgtHealthTag, 0, false)
+	g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(vTag[i])
+	SetVisualGearValues	(
+				vTag[i], 		--id
+				-div(ScreenWidth,2) + xOffset,	--xoffset
+				ScreenHeight - yOffset, --yoffset
+				0, 			--dx
+				0, 			--dy
+				zoomL, 			--zoom
+				1, 			--~= 0 means align to screen
+				g7, 			--frameticks
+				tValue, 		--value
+				240000, 		--timer
+				tCol		--GetClanColor( GetHogClan(CurrentHedgehog) )
+				)
+
+end
+
+function onScreenResize()
+
+	-- redraw Tags so that their screen locations are updated
+	if (CurrentHedgehog ~= nil) then
+			DrawTag(0)
+			DrawTag(1)
+			DrawTag(2)
+	end
+
+end
+
+function XYisInRect(px, py, psx, psy, pex, pey)
+
+	if (px > psx) and (px < pex) and (py > psy) and (py < pey) then
+		return(true)
+	else
+		return(false)
+	end
+
+end
+
+function AddWall(zXMin,zYMin, zWidth, zHeight, zCol)
+
+	table.insert(wX, zXMin)
+	table.insert(wY, zYMin)
+	table.insert(wWidth, zWidth)
+	table.insert(wHeight, zHeight)
+	table.insert(wCol, zCol)
+
+end
+
+function BorderSpark(zXMin,zYMin, zWidth, zHeight, bCol)
+
+	eX = zXMin + GetRandom(zWidth+10)
+	eY = zYMin + GetRandom(zHeight+10)
+	tempE = AddVisualGear(eX, eY, vgtDust, 0, false)
+	if tempE ~= 0 then
+		g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+		SetVisualGearValues(tempE, eX, eY, g3, g4, g5, g6, g7, 1, g9, bCol )
+	end
+
+end
+
+function HandleBorderEffects()
+
+	effectTimer = effectTimer + 1
+	if effectTimer > 15 then --25
+		effectTimer = 1
+		for i = 1, #wX do
+			BorderSpark(wX[i],wY[i],wWidth[i],wHeight[i], wCol[i])
+		end
+	end
+
+end
+
+----
+-- old reflecting stuff from like 3 years ago lol
+---
+
+function gearCanBeDeflected(gear)
+
+	if 	(GetGearType(gear) == gtShell) or
+		--(GetGearType(gear) == gtBee) or
+		(GetGearType(gear) == gtGrenade) or
+		(GetGearType(gear) == gtAirBomb) or
+		--(GetGearType(gear) == gtRCPlane) or
+		--(GetGearType(gear) == gtRope) or
+		(GetGearType(gear) == gtClusterBomb) or
+		(GetGearType(gear) == gtCluster) or
+		(GetGearType(gear) == gtGasBomb) or
+		--(GetGearType(gear) == gtSeduction) or
+		(GetGearType(gear) == gtMine) or	-------
+		(GetGearType(gear) == gtMortar) or
+		(GetGearType(gear) == gtHellishBomb) or
+		(GetGearType(gear) == gtWatermelon) or
+		(GetGearType(gear) == gtMelonPiece)	or
+		(GetGearType(gear) == gtEgg) or
+		(GetGearType(gear) == gtDrill) or
+		(GetGearType(gear) == gtBall) or
+		(GetGearType(gear) == gtExplosives) or	------
+			(GetGearType(gear) == gtFlame) or
+			(GetGearType(gear) == gtPortal) or
+			(GetGearType(gear) == gtDynamite) or
+			(GetGearType(gear) == gtSMine) or
+			--(GetGearType(gear) == gtKamikaze) or
+			--(GetGearType(gear) == gtRCPlane) or
+			--(GetGearType(gear) == gtCake) or
+			--(GetGearType(gear) == gtHedgehog) or ------
+		(GetGearType(gear) == gtKnife) or
+		(GetGearType(gear) == gtJetpack) or -- test this and birdy plz
+		(GetGearType(gear) == gtBirdy) or -- test this and birdy plz
+		(GetGearType(gear) == gtSnowball) or
+		(GetGearType(gear) == gtMolotov)
+	then
+		return(true)
+	else
+		return(false)
+	end
+
+end
+
+function getThreatDamage(gear)
+
+	--- damage amounts for weapons
+	if 	(GetGearType(gear) == gtGrenade) or
+		(GetGearType(gear) == gtClusterBomb) or
+		(GetGearType(gear) == gtGasBomb) or
+		(GetGearType(gear) == gtKnife) or
+		(GetGearType(gear) == gtEgg) or
+		(GetGearType(gear) == gtMolotov) or
+		(GetGearType(gear) == gtHellishBomb) or
+		(GetGearType(gear) == gtWatermelon) or
+		(GetGearType(gear) == gtSMine)
+	then
+		dmg = 30
+
+	elseif (GetGearType(gear) == gtMelonPiece) then
+		dmg = 40
+
+	elseif (GetGearType(gear) == gtAirBomb) or
+			(GetGearType(gear) == gtDrill) or
+			(GetGearType(gear) == gtMine) or
+			(GetGearType(gear) == gtCluster) then
+		dmg = 20
+
+	elseif (GetGearType(gear) == gtFlame) or
+			(GetGearType(gear) == gtPortal) or
+			(GetGearType(gear) == gtDynamite)
+			--(GetGearType(gear) == gtKamikaze) or
+			--(GetGearType(gear) == gtRCPlane) or
+
+			--(GetGearType(gear) == gtCake)
+	then
+		dmg = 0
+
+	elseif (GetGearType(gear) == gtBall) then
+		dmg = 1
+
+	else	--normal shell, snowball etc
+		dmg = 65
+	end
+
+	return(dmg)
+
+end
+
+function setGearReflectionValues(gear)
+
+	dmg = getThreatDamage(gear)
+	setGearValue(gear,"damage",dmg)
+	setGearValue(gear,"deflects",0)
+
+	if (CurrentHedgehog ~= nil) then --and (gameStarted == true) then
+		setGearValue(gear,"owner",GetHogClan(CurrentHedgehog)) -- NEW NEEDS CHANGE?
+	else
+		setGearValue(gear,"owner",10) -- nil
+	end
+
+end
+
+function AddStruc(pX,pY, pType, pClan)
+
+	sUID = sUID + 1
+
+	tempG = AddGear(0, 0, gtTarget, 0, 0, 0, 0)
+	SetGearPosition(tempG, pX, pY)
+	setGearValue(tempG, "sUID", sUID)
+
+	tempCirc = AddVisualGear(0,0,vgtCircle,0,true)
+
+	SetVisualGearValues(tempCirc, 0, 0, 100, 255, 1, 100, 0, 500, 1, 0xFFFFFF00)
+
+	table.insert(strucID, sUID)
+	table.insert(strucType, pType)
+	table.insert(strucGear,tempG)
+	table.insert(strucClan,pClan)
+	table.insert(strucCost,2)
+
+	frameID = 0
+	visualSprite = sprTarget
+	madness = AddVisualGear(GetX(tempG), GetY(tempG), vgtStraightShot, 1, true,1)
+	g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(madness)	--g9
+
+
+	if pType == loc("Reflector Shield") then
+		table.insert(strucHealth,255)
+
+		--SetVisualGearValues(madness, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
+		--SetState(tempG, bor(GetState(tempG),gstInvisible) )
+		--table.insert(strucAltDisplay, madness)
+
+	else
+		table.insert(strucHealth,1)
+		--table.insert(strucAltDisplay, 1)
+	end
+
+	table.insert(strucCirc,tempCirc)
+
+	table.insert(strucCircType, 1)
+	if pType == loc("Bio-Filter") then
+		table.insert(strucCircCol,colorRed)
+		table.insert(strucCircRadius,1000)
+		frameID = 7
+	elseif pType == loc("Healing Station") then
+		table.insert(strucCircCol,0xFF00FF00)
+		--table.insert(strucCircCol,colorGreen)
+		table.insert(strucCircRadius,500)
+		frameID = 3
+	elseif pType == loc("Respawner") then
+		table.insert(strucCircCol,0xFF00FF00)
+		--table.insert(strucCircCol,0xFF00FFFF)
+		table.insert(strucCircRadius,75)
+		runOnHogs(EnableHogResurrectionForThisClan)
+		frameID = 1
+	elseif pType == loc("Teleportation Node") then
+		table.insert(strucCircCol,0x0000FFFF)
+		table.insert(strucCircRadius,350)
+		frameID = 6
+	elseif pType == loc("Core") then
+		table.insert(strucCircCol,0xFFFFFFFF)
+		table.insert(strucCircRadius,350)
+	elseif pType == loc("Generator") then
+		table.insert(strucCircCol,0xFFFF00FF)
+		table.insert(strucCircRadius,75)
+		setGearValue(tempG, "power", 0)
+		frameID = 2
+	elseif pType == loc("Support Station") then
+		table.insert(strucCircCol,0xFFFF00FF)
+		table.insert(strucCircRadius,500)
+		frameID = 4
+	elseif pType == loc("Construction Station") then
+		table.insert(strucCircCol,0xFFFFFFFF)
+		table.insert(strucCircRadius,500)
+		frameID = 8
+	elseif pType == loc("Reflector Shield") then
+		table.insert(strucCircCol,0xffae00ff)
+		table.insert(strucCircRadius,750)
+		frameID = 9
+	elseif pType == loc("Weapon Filter") then
+		table.insert(strucCircCol,0xa800ffff)
+		table.insert(strucCircRadius,750)
+		frameID = 5
+	end
+
+
+	SetVisualGearValues(madness, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
+	SetState(tempG, bor(GetState(tempG),gstInvisible) )
+	table.insert(strucAltDisplay, madness)
+
+	-- may be needed for non gear-based structures
+	--table.insert(strucX, GetX(tempG))
+	--table.insert(strucY, GetY(tempG))
+
+end
+
+-- this is basically onStructureDelete
+-- we may need to expand it for non-gear structures later
+function CheckGearForStructureLink(gear)
+
+	respawnerDestroyed = false
+
+	for i = 1, #strucID do
+		if strucID[i] == getGearValue(gear,"sUID") then
+
+			if strucType[i] == loc("Respawner") then
+				respawnerDestroyed = true
+			end
+
+			table.remove(strucID,i)
+			table.remove(strucGear,i)
+			table.remove(strucClan,i)
+			table.remove(strucType,i)
+			table.remove(strucCost,i)
+			table.remove(strucHealth,i)
+
+			DeleteVisualGear(strucCirc[i])
+			table.remove(strucCirc,i)
+
+			table.remove(strucCircCol,i)
+			table.remove(strucCircRadius,i)
+			table.remove(strucCircType,i)
+
+			if strucAltDisplay[i] ~= 1 then
+				DeleteVisualGear(strucAltDisplay[i])
+			end
+			table.remove(strucAltDisplay,i)
+
+		end
+	end
+
+	if respawnerDestroyed == true then
+		runOnHogs(RecalibrateRespawn)
+	end
+
+end
+
+-- called when we add a new respawner
+function EnableHogResurrectionForThisClan(gear)
+	if GetHogClan(gear) == GetHogClan(CurrentHedgehog) then
+		SetEffect(gear, heResurrectable, 1)
+	end
+end
+
+-- this is called when a respawner blows up
+function RecalibrateRespawn(gear)
+
+	respawnerList = {}
+	for i = 1, #strucID do
+		if (strucType[i] == loc("Respawner")) and (strucClan[i] == GetHogClan(gear)) then
+			table.insert(respawnerList, i)
+		end
+	end
+
+	if #respawnerList >= 1 then
+		SetEffect(gear, heResurrectable, 1)
+	else
+		SetEffect(gear, heResurrectable, 0)
+	end
+
+end
+
+--resposition dead hogs at a respawner if they own one
+function FindRespawner(gear)
+
+	respawnerList = {}
+	for i = 1, #strucID do
+		if (strucType[i] == loc("Respawner")) and (strucClan[i] == GetHogClan(gear)) then
+			table.insert(respawnerList, i)
+		end
+	end
+
+	if #respawnerList >= 1 then
+		i = GetRandom(#respawnerList)+1
+		SetGearPosition(gear,GetX(strucGear[respawnerList[i]]),GetY(strucGear[respawnerList[i]])-25)
+		AddVisualGear(GetX(gear), GetY(gear), vgtExplosion, 0, false)
+	else	-- (this should never happen, but just in case)
+		SetEffect(gear, heResurrectable, 0)
+		DeleteGear(gear)
+	end
+
+end
+
+function onGearResurrect(gear)
+	AddVisualGear(GetX(gear), GetY(gear), vgtExplosion, 0, false)
+	FindRespawner(gear)
+end
+
+
+function CheckTeleport(gear, tX, tY)
+
+	teleportOriginSuccessful = false
+	teleportDestinationSuccessful = false
+
+	for i = 1, #strucID do
+
+		if (strucType[i] == loc("Teleportation Node")) and (strucClan[i] == GetHogClan(CurrentHedgehog)) then
+
+			dist = GetDistFromGearToXY(CurrentHedgehog,GetX(strucGear[i]), GetY(strucGear[i]))
+			if strucCircType[i] == 0 then
+				NR = strucCircRadius[i]
+			else
+				NR = (48/100*strucCircRadius[i])/2
+				--NR = div((div(48,100) * strucCircRadius[tempID]),2)
+			end
+			if dist <= NR*NR then
+				teleportOriginSuccessful = true
+			end
+
+			dist = GetDistFromXYtoXY(tX,tY,GetX(strucGear[i]), GetY(strucGear[i]))
+			if strucCircType[i] == 0 then
+				NR = strucCircRadius[i]
+			else
+				NR = (48/100*strucCircRadius[i])/2
+				--NR = div((div(48,100) * strucCircRadius[tempID]),2)
+			end
+			if dist <= NR*NR then
+				teleportDestinationSuccessful = true
+			end
+
+		end
+
+
+	end
+
+	if ((teleportDestinationSuccessful == false) or (teleportOriginSuccessful == false)) then
+		AddCaption(loc("Teleport Unsuccessful. Please teleport within a clan teleporter's sphere of influence."))
+		SetGearTarget(gear, GetX(CurrentHedgehog), GetY(CurrentHedgehog))
+	end
+
+end
+
+--Check for proximity of gears to structures, and make structures behave accordingly
+function CheckProximity(gear)
+
+	--if isAStructureEffectingGear(gear) then
+
+		dist = GetDistFromGearToXY(gear, GetX(strucGear[tempID]), GetY(strucGear[tempID]))
+
+		-- calculate my real radius if I am an aura
+		if strucCircType[tempID] == 0 then
+			NR = strucCircRadius[tempID]
+		else
+			NR = (48/100*strucCircRadius[tempID])/2
+			--NR = div((div(48,100) * strucCircRadius[tempID]),2) -- doesn't work ffff
+				--NR = div((48/100*strucCircRadius[tempID]),2) -- still works
+
+		end
+
+		-- we're in business
+		if dist <= NR*NR then
+
+
+			-- heal clan hogs
+			if strucType[tempID] == loc("Healing Station") then
+
+				if GetGearType(gear) == gtHedgehog then
+					if GetHogClan(gear) == strucClan[tempID] then
+
+						hogLife = GetHealth(gear) + 1
+						if hogLife > 150 then
+							hogLife = 150
+						end
+						SetHealth(gear, hogLife)
+
+						-- change this to the med kit sprite health ++++s later
+						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
+						g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+						SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, colorGreen )
+
+
+					end
+				end
+
+			-- explode enemy clan hogs
+			elseif strucType[tempID] == loc("Bio-Filter") then
+
+				--tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
+				--g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+				--SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, colorRed )
+
+				if GetGearType(gear) == gtHedgehog then
+					if (GetHogClan(gear) ~= strucClan[tempID]) and (GetHealth(gear) > 0) then
+						AddGear(GetX(gear), GetY(gear), gtGrenade, 0, 0, 0, 1)
+					end
+				end
+
+			-- were those weapons in your pocket, or were you just happy to see me?
+			elseif strucType[tempID] == loc("Weapon Filter") then
+
+				if GetGearType(gear) == gtHedgehog then
+					if (GetHogClan(gear) ~= strucClan[tempID]) then
+
+						for wpnIndex = 1, #atkArray do
+							AddAmmo(gear, atkArray[wpnIndex][1], 0)
+						end
+
+						for wpnIndex = 1, #utilArray do
+							AddAmmo(gear, utilArray[wpnIndex][1], 0)
+						end
+
+						AddAmmo(gear, amAirAttack, 100)
+						AddAmmo(gear, amSwitch, 100)
+						AddAmmo(gear, amSkip, 100)
+
+					end
+				end
+
+			-- BOUNCE! POGO! POGO! POGO! POGO!
+			elseif strucType[tempID] == loc("Reflector Shield") then
+
+				-- add check for whose projectile it is
+				if gearCanBeDeflected(gear) == true then
+
+					gOwner = getGearValue(gear,"owner")
+					gDeflects = getGearValue(gear,"deflects")
+					gDmg = getGearValue(gear,"damage")
+
+					if gDeflects >= 3 then
+						DeleteGear(gear)
+						AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, false)
+						PlaySound(sndVaporize)
+					elseif gOwner ~= strucClan[tempID] then
+						--whether to vaporize gears or bounce them
+						if gDmg ~= 0 then
+							dx, dy = GetGearVelocity(gear)
+
+							if (dx == 0) and (dy == 0) then
+								-- static mine, explosive, etc encountered
+								-- do nothing
+							else
+
+								--let's bounce something!
+
+								--if dx == 0 then
+									-- bounce away eggs
+								--	dx = 0.5
+								--end
+
+								dx = dx*(-1)
+								dy = dy*(-1)
+								SetGearVelocity(gear,dx,dy)
+								setGearValue(gear,"deflects",(gDeflects+1))
+
+								AddVisualGear(GetX(gear), GetY(gear), vgtExplosion, 0, false)
+								PlaySound(sndExplosion)
+
+								strucHealth[tempID] = strucHealth[tempID] - gDmg
+								strucCircCol[tempID] = strucCircCol[tempID] - gDmg
+
+								if strucHealth[tempID] <= 0 then
+									AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtExplosion, 0, false)
+									DeleteGear(strucGear[tempID])
+									PlaySound(sndExplosion)
+								end
+
+							end
+
+						else
+							DeleteGear(gear)
+							AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, false)
+							PlaySound(sndVaporize)
+						end
+					end
+				end
+
+			--mark as within range of a teleporter node
+			elseif strucType[tempID] == loc("Teleportation Node") then
+
+				if GetGearType(gear) == gtHedgehog then
+					if GetHogClan(gear) == strucClan[tempID] then
+						--tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
+
+						for i = 1, #sProx do
+							if sProx[i][1] == loc("Teleportation Mode") then
+								sProx[i][2] = true
+							end
+						end
+
+					end
+				end
+
+			-- mark as within range of construction station
+			-- and thus allow menu access to placement modes
+			-- for girders, mines, sticky mines and barrels
+			elseif strucType[tempID] == loc("Construction Station") then
+
+				if GetGearType(gear) == gtHedgehog then
+					if GetHogClan(gear) == strucClan[tempID] then
+						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
+
+						for i = 1, #sProx do
+							if ((sProx[i][1] == loc("Girder Placement Mode"))
+							or (sProx[i][1] == loc("Rubber Placement Mode"))
+							or (sProx[i][1] == loc("Mine Placement Mode"))
+							or (sProx[i][1] == loc("Sticky Mine Placement Mode"))
+							or (sProx[i][1] == loc("Barrel Placement Mode")))
+							then
+								sProx[i][2] = true
+							end
+						end
+
+
+					end
+				end
+
+			-- mark as within stupport station range
+			-- and thus allow menu access to placement modes
+			-- for weapon, utility, and med crates
+			elseif strucType[tempID] == loc("Support Station") then
+
+				if GetGearType(gear) == gtHedgehog then
+					if GetHogClan(gear) == strucClan[tempID] then
+						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
+
+						for i = 1, #sProx do
+							if ((sProx[i][1] == loc("Health Crate Placement Mode"))
+							or (sProx[i][1] == loc("Weapon Crate Placement Mode"))
+							or (sProx[i][1] == loc("Utility Crate Placement Mode")))
+							then
+								sProx[i][2] = true
+								--AddCaption("wahey in a support station")
+							end
+						end
+
+
+					end
+				end
+
+			-- doesn't do shit
+			elseif strucType[tempID] == loc("Core") then
+
+				if GetGearType(gear) == gtHedgehog then
+					if GetHogClan(gear) == strucClan[tempID] then
+
+						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
+						g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+						SetVisualGearValues(tempE, g1+20, g2, g3, g4, g5, g6, g7, g8, g9, GetClanColor(strucClan[tempID]) )
+
+						tempE = AddVisualGear(GetX(strucGear[tempID]), GetY(strucGear[tempID]), vgtSmoke, 0, true)
+						g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+						SetVisualGearValues(tempE, g1-20, g2, g3, g4, g5, g6, g7, g8, g9, GetClanColor(strucClan[tempID]) )
+
+					end
+				end
+
+			end
+
+		end
+
+	--end
+
+end
+
+-- used to check if we need to run through all hogs or just currenthedgehog
+function isAStructureThatAppliesToMultipleGears(pID)
+	if 	strucType[pID] == loc("Healing Station") or
+		strucType[pID] == loc("Reflector Shield") or
+		strucType[pID] == loc("Weapon Filter") or
+		strucType[pID] == loc("Bio-Filter")
+	then
+		return(true)
+	else
+		return(false)
+	end
+end
+
+function HandleStructures()
+
+	for i = 1, #sProx do
+		sProx[i][2] = false
+
+		if sProx[i][1] == loc("Structure Placement Mode") then
+			sProx[i][2] = true
+		end
+
+	end
+
+	for i = 1, #strucID do
+
+		g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(strucCirc[i])
+		SetVisualGearValues(strucCirc[i], GetX(strucGear[i]), GetY(strucGear[i]), g3, g4, g5, g6, g7, strucCircRadius[i], g9, strucCircCol[i])
+
+		tempID = i
+
+		g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(strucAltDisplay[i])				--8000
+		SetVisualGearValues(strucAltDisplay[i], GetX(strucGear[i]), GetY(strucGear[i]), 0, 0, g5, g6, 800000, sprTarget, g9, g10 )
+
+
+
+		-- Check For proximity of stuff to our structures
+		if isAStructureThatAppliesToMultipleGears(i) then
+			runOnGears(CheckProximity)
+		else -- only check prox on CurrentHedgehog
+			CheckProximity(CurrentHedgehog)
+		end
+
+		if strucType[i] == loc("Core") then
+			tempE = AddVisualGear(GetX(strucGear[i]), GetY(strucGear[i]), vgtSmoke, 0, true)
+			g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+			SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, GetClanColor(strucClan[i]) )
+		elseif strucType[i] == loc("Reflector Shield") then
+
+
+
+			--frameID = 1
+			--visualSprite = sprTarget
+			--g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(strucAltDisplay[i])			--frameID / g6
+			--SetVisualGearValues(strucAltDisplay[i], GetX(strucGear[i]), GetY(strucGear[i]), 0, 0, g5, g6, 8000, visualSprite, g9, g10 )
+
+		elseif strucType[i] == loc("Generator") then
+
+			--frameID = 1
+			--visualSprite = sprTarget
+																									--layer
+			--tempE = AddVisualGear(GetX(strucGear[i]), GetY(strucGear[i]), vgtStraightShot, 1, true,1)
+			--g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)	--g9
+			--SetVisualGearValues(tempE, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
+			--SetState(strucGear[i], bor(GetState(strucGear[i]),gstInvisible) )
+
+			--currently generate power for all clans.
+			-- or should power only be generated for current clan?
+			for z = 0, ClansCount-1 do
+				if z == strucClan[i] then
+					increaseGearValue(strucGear[i],"power")
+					if getGearValue(strucGear[i],"power") == 10 then
+						setGearValue(strucGear[i],"power",0)
+						clanPower[z] = clanPower[z] + 1
+						if clanPower[z] > 1000 then
+							clanPower[z] = 1000
+						end
+					end
+
+				end
+			end
+
+		end
+
+	end
+
+
+
+	-- this is kinda messy and gross (even more than usual), fix it up at some point
+	-- it just assumes that if you have access to girders, it works for rubbers
+	-- as that is what the struc implemenation means due to construction station
+	anyUIProx = false
+	for i = 1, #sProx do
+
+		if sProx[i][1] == loc("Girder Placement Mode") then
+			if sProx[i][2] == true then
+				AddAmmo(CurrentHedgehog, amGirder, 100)
+				AddAmmo(CurrentHedgehog, amRubber, 100)
+				AddAmmo(CurrentHedgehog, amDrillStrike, 100)
+			else
+				AddAmmo(CurrentHedgehog, amGirder, 0)
+				AddAmmo(CurrentHedgehog, amRubber, 0)
+				AddAmmo(CurrentHedgehog, amDrillStrike, 0) -- new
+			end
+		elseif sProx[i][1] == loc("Teleportation Mode") then
+			if sProx[i][2] == true then
+				AddAmmo(CurrentHedgehog, amTeleport, 100)
+			else
+				AddAmmo(CurrentHedgehog, amTeleport, 0)
+			end
+		elseif sProx[i][1] == loc("Weapon Crate Placement Mode") then
+			-- this is new stuff
+			if sProx[i][2] == true then
+				AddAmmo(CurrentHedgehog, amNapalm, 100)
+			else
+				AddAmmo(CurrentHedgehog, amNapalm, 0)
+			end
+		end
+
+		if (sProx[i][2] == true) then
+			anyUIProx = true
+		end
+
+	end
+
+	-- doesn't do shit atm, maybe later when we add cores we can use this
+	--if anyUIProx == true then --(and core is placed)
+	--	AddAmmo(CurrentHedgehog, amAirAttack, 100)
+	--else
+	--	AddAmmo(CurrentHedgehog, amAirAttack, 0)
+	--end
+
+
+end
+
+
+function checkForSpecialWeapons()
+
+
+
+	if (GetCurAmmoType() == amAirAttack) then
+		AddCaption(loc("Structure Placement Tool"),GetClanColor(GetHogClan(CurrentHedgehog)),capgrpAmmoinfo)
+	elseif (GetCurAmmoType() == amDrillStrike) then
+		AddCaption(loc("Object Placement Tool"),GetClanColor(GetHogClan(CurrentHedgehog)),capgrpAmmoinfo)
+	elseif (GetCurAmmoType() == amNapalm) then
+		AddCaption(loc("Crate Placement Tool"),GetClanColor(GetHogClan(CurrentHedgehog)),capgrpAmmoinfo)
+	end
+
+	lastWep = GetCurAmmoType()
+
+end
+
+----------------------------------------------------------
+-- EXCERPTS OF ADAPTED HEDGE_EDITOR CODE FOLLOWS
+----------------------------------------------------------
+-- experimental crap
+
+local landType = 0
+-----------------------------------------
+-- tracking vars for save slash load purposes
+-----------------------------------------
+
+local hhs = {}
+
+---------------------------------
+-- crates are made of this stuff
+---------------------------------
+placeholder = 20
+ atkArray =
+				{
+				{amBazooka, 	"amBazooka",		0, loc("Bazooka"), 			2*placeholder},
+				--{amBee, 		"amBee",			0, loc("Homing Bee"), 		4*placeholder},
+				{amMortar, 		"amMortar",			0, loc("Mortar"), 			1*placeholder},
+				{amDrill, 		"amDrill",			0, loc("Drill Rocket"), 	3*placeholder},
+				{amSnowball, 	"amSnowball",		0, loc("Mudball"), 			3*placeholder},
+
+				{amGrenade,		"amGrenade",		0, loc("Grenade"), 			2*placeholder},
+				{amClusterBomb,	"amClusterBomb",	0, loc("Cluster Bomb"), 	3*placeholder},
+				{amMolotov, 	"amMolotov",		0, loc("Molotov Cocktail"), 3*placeholder},
+				{amWatermelon, 	"amWatermelon",		0, loc("Watermelon Bomb"), 25*placeholder},
+				{amHellishBomb,	"amHellishBomb",	0, loc("Hellish Handgrenade"), 25*placeholder},
+				{amGasBomb, 	"amGasBomb",		0, loc("Limburger"), 		3*placeholder},
+
+				{amShotgun,		"amShotgun",		0, loc("Shotgun"), 			2*placeholder},
+				{amDEagle,		"amDEagle",			0, loc("Desert Eagle"), 	2*placeholder},
+				{amFlamethrower,"amFlamethrower",	0, loc("Flamethrower"), 	4*placeholder},
+				{amSniperRifle,	"amSniperRifle",	0, loc("Sniper Rifle"), 	3*placeholder},
+				--{amSineGun, 	"amSineGun",		0, loc("SineGun"), 			6*placeholder},
+				{amIceGun, 		"amIceGun",			0, loc("Freezer"), 			15*placeholder},
+				{amLandGun,		"amLandGun",		0, loc("Land Sprayer"), 	5*placeholder},
+
+				{amFirePunch, 	"amFirePunch",		0, loc("Shoryuken"), 		3*placeholder},
+				{amWhip,		"amWhip",			0, loc("Whip"), 			1*placeholder},
+				{amBaseballBat, "amBaseballBat",	0, loc("Baseball Bat"), 	7*placeholder},
+				--{amKamikaze, 	"amKamikaze",		0, loc("Kamikaze"),			1*placeholder},
+				{amSeduction, 	"amSeduction",		0, loc("Seduction"),		1*placeholder},
+				{amHammer,		"amHammer",			0, loc("Hammer"), 			1*placeholder},
+
+				{amMine, 		"amMine",			0, loc("Mine"), 			1*placeholder},
+				{amDynamite, 	"amDynamite",		0, loc("Dynamite"),			9*placeholder},
+				{amCake, 		"amCake",			0, loc("Cake"), 			25*placeholder},
+				{amBallgun, 	"amBallgun",		0, loc("Ballgun"), 			40*placeholder},
+				--{amRCPlane,		"amRCPlane",		0, loc("RC Plane"), 	25*placeholder},
+				{amSMine,		"amSMine",			0, loc("Sticky Mine"), 		5*placeholder},
+
+				--{amAirAttack,	"amAirAttack",		0, loc("Air Attack"), 		10*placeholder},
+				--{amMineStrike,	"amMineStrike",		0, loc("Mine Strike"), 		15*placeholder},
+				--{amDrillStrike,	"amDrillStrike",	0, loc("Drill Strike"), 15*placeholder},
+				--{amNapalm, 		"amNapalm",			0, loc("Napalm"), 		15*placeholder},
+				--{amPiano,		"amPiano",			0, loc("Piano Strike"), 	40*placeholder},
+
+				{amKnife,		"amKnife",			0, loc("Cleaver"), 			2*placeholder},
+
+				{amBirdy,		"amBirdy",			0, loc("Birdy"), 			7*placeholder}
+
+				}
+
+ utilArray =
+				{
+				{amBlowTorch, 		"amBlowTorch",		0, loc("Blowtorch"), 		4*placeholder},
+				{amPickHammer,		"amPickHammer",		0, loc("Pickhammer"), 		2*placeholder},
+				--{amGirder, 			"amGirder",			0, loc("Girder"), 		4*placeholder},
+				--{amRubber, 			"amRubber",			0, loc("Rubber Band"), 	5*placeholder},
+				{amPortalGun,		"amPortalGun",		0, loc("Personal Portal Device"), 15*placeholder},
+
+				{amRope, 			"amRope",			0, loc("Rope"), 			7*placeholder},
+				{amParachute, 		"amParachute",		0, loc("Parachute"), 		2*placeholder},
+				--{amTeleport,		"amTeleport",		0, loc("Teleport"), 		6*placeholder},
+				{amJetpack,			"amJetpack",		0, loc("Flying Saucer"), 	8*placeholder},
+
+				{amInvulnerable,	"amInvulnerable",	0, loc("Invulnerable"), 	5*placeholder},
+				{amLaserSight,		"amLaserSight",		0, loc("Laser Sight"), 		2*placeholder},
+				{amVampiric,		"amVampiric",		0, loc("Vampirism"), 		6*placeholder},
+
+				{amLowGravity, 		"amLowGravity",		0, loc("Low Gravity"), 		4*placeholder},
+				{amExtraDamage, 	"amExtraDamage",	0, loc("Extra Damage"), 	6*placeholder},
+				{amExtraTime,		"amExtraTime",		0, loc("Extra Time"), 		8*placeholder}
+
+				--{amResurrector, 	"amResurrector",	0, loc("Resurrector"), 		8*placeholder},
+				--{amTardis, 			"amTardis",			0, loc("Tardis"), 			2*placeholder},
+
+				--{amSwitch,			"amSwitch",			0, loc("Switch Hog"), 		4*placeholder}
+				}
+
+----------------------------
+-- hog and map editting junk
+----------------------------
+
+ local reducedSpriteIDArray = {
+  sprBigDigit, sprKowtow, sprBee, sprExplosion50, sprGirder
+  }
+
+  local reducedSpriteTextArray = {
+  "sprBigDigit", "sprKowtow", "sprBee", "sprExplosion50", "sprGirder"
+  }
+
+----------------------------
+-- placement shite
+----------------------------
+
+local cGear = nil -- detects placement of girders and objects (using airattack)
+local curWep = amNothing
+
+-- primary placement categories
+local cIndex = 1 -- category index
+local cat = 	{
+				"Girder Placement Mode",
+				"Rubber Placement Mode",
+				"Mine Placement Mode",
+				"Sticky Mine Placement Mode",
+				"Barrel Placement Mode",
+				"Health Crate Placement Mode",
+				"Weapon Crate Placement Mode",
+				"Utility Crate Placement Mode",
+				--"Target Placement Mode",
+				--"Cleaver Placement Mode",
+
+				--"Advanced Repositioning Mode",
+				--"Tagging Mode",
+				--"Sprite Testing Mode",
+				--"Sprite Placement Mode",
+				"Structure Placement Mode"
+				}
+
+
+ sProx = 	{
+				{loc("Girder Placement Mode"),false},
+				{loc("Rubber Placement Mode"),false},
+				{loc("Mine Placement Mode"),false},
+				{loc("Sticky Mine Placement Mode"),false},
+				{loc("Barrel Placement Mode"),false},
+				{loc("Health Crate Placement Mode"),false},
+				{loc("Weapon Crate Placement Mode"),false},
+				{loc("Utility Crate Placement Mode"),false},
+				--{loc("Target Placement Mode"),false},
+				--{loc("Cleaver Placement Mode"),false},
+
+				--{loc("Advanced Repositioning Mode"),false},
+				--{loc("Tagging Mode"),false},
+				--{loc("Sprite Testing Mode"),false},
+				--{loc("Sprite Placement Mode"),false},
+				{loc("Structure Placement Mode"),false},
+				{loc("Teleportation Mode"),false}
+				}
+
+
+local pMode = {}	-- pMode contains custom subsets of the main categories
+local pIndex = 1
+
+local genTimer = 0
+
+local CGR = 1 -- current girder rotation, we actually need this as HW remembers what rotation you last used
+
+local placedX = {}
+local placedY = {}
+local placedSpec = {}
+local placedSuperSpec = {}
+local placedType = {}
+local placedCount = 0
+
+local sCirc -- circle that appears around selected gears
+local sGear = nil
+local closestDist
+local closestGear = nil
+
+local tCirc = {} -- array of circles that appear around tagged gears
+
+------------------------
+-- SOME GENERAL METHODS
+------------------------
+
+function GetDistFromGearToXY(gear, g2X, g2Y)
+
+	g1X, g1Y = GetGearPosition(gear)
+	q = g1X - g2X
+	w = g1Y - g2Y
+
+	return ( (q*q) + (w*w) )
+
+end
+
+function GetDistFromXYtoXY(a, b, c, d)
+	q = a - c
+	w = b - d
+	return ( (q*q) + (w*w) )
+end
+
+function SelectGear(gear)
+
+	d = GetDistFromGearToXY(gear, placedX[placedCount], placedY[placedCount])
+
+	if d < closestDist then
+		closestDist = d
+		closestGear = gear
+	end
+
+end
+
+-- essentially called when user clicks the mouse
+-- with girders or an airattack
+function PlaceObject(x,y)
+
+	placedX[placedCount] = x
+	placedY[placedCount] = y
+	placedType[placedCount] = cat[cIndex]
+	placedSpec[placedCount] = pMode[pIndex]
+
+	if (clanUsedExtraTime[GetHogClan(CurrentHedgehog)] == true) and (cat[cIndex] == "Utility Crate Placement Mode") and (utilArray[pIndex][1] == amExtraTime) then
+		AddCaption(loc("You may only use 1 Extra Time per turn."),0xffba00ff,capgrpVolume)
+		PlaySound(sndDenied)
+	elseif (clanCratesSpawned[GetHogClan(CurrentHedgehog)] > 4) and ( (cat[cIndex] == "Health Crate Placement Mode") or (cat[cIndex] == "Utility Crate Placement Mode") or (cat[cIndex] == "Weapon Crate Placement Mode")  )  then
+		AddCaption(loc("You may only spawn 5 crates per turn."),0xffba00ff,capgrpVolume)
+		PlaySound(sndDenied)
+	elseif (XYisInRect(x,y, clanBoundsSX[GetHogClan(CurrentHedgehog)],clanBoundsSY[GetHogClan(CurrentHedgehog)],clanBoundsEX[GetHogClan(CurrentHedgehog)],clanBoundsEY[GetHogClan(CurrentHedgehog)]) == true)
+	and (clanPower[GetHogClan(CurrentHedgehog)] >= placedExpense)
+	then
+
+
+
+		if cat[cIndex] == "Girder Placement Mode" then
+			PlaceGirder(x, y, CGR)
+			placedSpec[placedCount] = CGR
+		elseif cat[cIndex] == "Rubber Placement Mode" then
+			PlaceSprite(x,y, sprAmRubber, CGR, nil, nil, nil, nil, lfBouncy)
+			--PlaceGirder(x, y, CGR)
+			placedSpec[placedCount] = CGR
+		elseif cat[cIndex] == "Target Placement Mode" then
+			gear = AddGear(x, y, gtTarget, 0, 0, 0, 0)
+		elseif cat[cIndex] == "Cleaver Placement Mode" then
+			gear = AddGear(x, y, gtKnife, 0, 0, 0, 0)
+		elseif cat[cIndex] == "Health Crate Placement Mode" then
+			gear = SpawnHealthCrate(x,y)
+			SetHealth(gear, pMode[pIndex])
+			setGearValue(gear,"caseType","med")
+			clanCratesSpawned[GetHogClan(CurrentHedgehog)] = clanCratesSpawned[GetHogClan(CurrentHedgehog)] +1
+		elseif cat[cIndex] == "Weapon Crate Placement Mode" then
+			gear = SpawnAmmoCrate(x, y, atkArray[pIndex][1])
+			placedSpec[placedCount] = atkArray[pIndex][2]
+			setGearValue(gear,"caseType","ammo")
+			setGearValue(gear,"contents",atkArray[pIndex][2])
+			clanCratesSpawned[GetHogClan(CurrentHedgehog)] = clanCratesSpawned[GetHogClan(CurrentHedgehog)] +1
+		elseif cat[cIndex] == "Utility Crate Placement Mode" then
+			gear = SpawnUtilityCrate(x, y, utilArray[pIndex][1])
+			placedSpec[placedCount] = utilArray[pIndex][2]
+			setGearValue(gear,"caseType","util")
+			setGearValue(gear,"contents",utilArray[pIndex][2])
+			if utilArray[pIndex][1] == amExtraTime then
+				clanUsedExtraTime[GetHogClan(CurrentHedgehog)] = true
+			end
+			clanCratesSpawned[GetHogClan(CurrentHedgehog)] = clanCratesSpawned[GetHogClan(CurrentHedgehog)] +1
+		elseif cat[cIndex] == "Barrel Placement Mode" then
+			gear = AddGear(x, y, gtExplosives, 0, 0, 0, 0)
+			SetHealth(gear, pMode[pIndex])
+		elseif cat[cIndex] == "Mine Placement Mode" then
+			gear = AddGear(x, y, gtMine, 0, 0, 0, 0)
+			SetTimer(gear, pMode[pIndex])
+		elseif cat[cIndex] == "Sticky Mine Placement Mode" then
+			gear = AddGear(x, y, gtSMine, 0, 0, 0, 0)
+		elseif cat[cIndex] == "Advanced Repositioning Mode" then
+
+			if pMode[pIndex] == "Selection Mode" then
+				closestDist = 999999999
+				closestGear = nil -- just in case
+				sGear = nil
+				runOnGears(SelectGear)
+				sGear = closestGear
+				closestGear = nil
+			elseif pMode[pIndex] == "Placement Mode" then
+				if sGear ~= nil then
+					SetGearPosition(sGear, x, y)
+				end
+			end
+
+		elseif cat[cIndex] == "Tagging Mode" then
+
+			closestDist = 999999999
+			closestGear = nil
+			sGear = nil
+			runOnGears(SelectGear)
+
+
+			if closestGear ~= nil then
+
+				if getGearValue(closestGear,"tag") == nil then
+
+					--if there is no tag, add a victory/failure tag and circle
+					setGearValue(closestGear, "tCirc",AddVisualGear(0,0,vgtCircle,0,true))
+
+					--AddCaption("circ added",0xffba00ff,capgrpVolume)
+
+					if pMode[pIndex] == "Tag Victory Mode" then
+						setGearValue(closestGear, "tag","victory")
+						SetVisualGearValues(getGearValue(closestGear,"tCirc"), 0, 0, 100, 255, 1, 10, 0, 40, 3, 0xff0000ff)
+					elseif pMode[pIndex] == "Tag Failure Mode" then
+						setGearValue(closestGear, "tag","failure")
+						SetVisualGearValues(getGearValue(closestGear,"tCirc"), 0, 0, 100, 255, 1, 10, 0, 40, 3, 0x0000ffff)
+					end
+
+
+				else
+					-- remove tag and delete circ
+					--AddCaption("circ removed",0xffba00ff,capgrpVolume)
+					setGearValue(closestGear, "tag", nil)
+					DeleteVisualGear(getGearValue(closestGear,"tCirc"))
+					setGearValue(closestGear, "tCirc", nil)
+				end
+
+			end
+
+
+		elseif cat[cIndex] == "Sprite Testing Mode" then
+
+			frameID = 1
+			visualSprite = reducedSpriteIDArray[pIndex]
+			--visualSprite = spriteIDArray[pIndex]
+			tempE = AddVisualGear(x, y, vgtStraightShot, 0, true)
+			g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+			SetVisualGearValues(tempE, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
+	--sprHorizonLong crashes game, so does skyL, as does flake
+
+		-- reduced list of cool sprites
+		-- sprBigDigit, sprKnife, sprFrozenHog, sprKowtow, sprBee, sprExplosion50, sprPiano, sprChunk, sprHHTelepMask, sprSeduction, sprSwitch, sprGirder,
+		--sprAMAmmos, sprAMSlotKeys, sprTurnsLeft, sprExplosivesRoll + maybe some others like the health case, arrows, etc
+
+		elseif cat[cIndex] == "Sprite Placement Mode" then
+
+			PlaceSprite(x,y, reducedSpriteIDArray[pIndex], 1, nil, nil, nil, nil, landType)
+			--PlaceGirder(x, y, CGR)
+			placedSpec[placedCount] = reducedSpriteTextArray[pIndex]
+			placedSuperSpec[placedCount] = landType
+
+			if landType == lfIce then
+				placedSuperSpec[placedCount] = "lfIce"
+			elseif landType == lfIndestructible then
+				placedSuperSpec[placedCount] = "lfIndestructible"
+			elseif landType == lfBouncy then
+				placedSuperSpec[placedCount] = "lfBouncy"
+			else
+				placedSuperSpec[placedCount] = "lfNormal"
+			end
+
+		elseif cat[cIndex] == "Structure Placement Mode" then
+
+			AddStruc(x,y, pMode[pIndex],GetHogClan(CurrentHedgehog))
+
+		end
+
+		clanPower[GetHogClan(CurrentHedgehog)] = clanPower[GetHogClan(CurrentHedgehog)] - placedExpense
+		placedCount = placedCount + 1
+
+	else
+	    if (clanPower[GetHogClan(CurrentHedgehog)] >= placedExpense) then
+            AddCaption(loc("Invalid Placement"),0xffba00ff,capgrpVolume)
+        else
+            AddCaption(loc("Insufficient Power"),0xffba00ff,capgrpVolume)
+        end
+		PlaySound(sndDenied)
+	end
+
+
+end
+
+-- called when user changes primary selection
+-- either via up/down keys
+-- or selecting girder/airattack
+function RedefineSubset()
+
+	pIndex = 1
+	pMode = {}
+	placedExpense = 1
+
+	if cat[cIndex] == "Girder Placement Mode" then
+		pIndex = CGR
+		pMode = {"Girder"}
+		--	pCount = 1
+	elseif cat[cIndex] == "Rubber Placement Mode" then
+		pIndex = CGR
+		pMode = {"Rubber"}
+		placedExpense = 3
+	--	pCount = 1???
+	elseif cat[cIndex] == "Target Placement Mode" then
+		pMode = {"Standard Target"}
+	elseif cat[cIndex] == "Cleaver Placement Mode" then
+		pMode = {"Standard Cleaver"}
+	elseif cat[cIndex] == "Barrel Placement Mode" then
+		--pMode = {1,50,75,100}
+		pMode = {50}
+		placedExpense = 10
+	elseif cat[cIndex] == "Health Crate Placement Mode" then
+		--pMode = {25,50,75,100}
+		pMode = {25}
+		placedExpense = 5
+	elseif cat[cIndex] == "Weapon Crate Placement Mode" then
+		for i = 1, #atkArray do
+			pMode[i] = atkArray[i][4] -- was [2]
+			--placedExpense = atkArray[5]
+		end
+		placedExpense = 30
+	elseif cat[cIndex] == "Utility Crate Placement Mode" then
+		for i = 1, #utilArray do
+			pMode[i] = utilArray[i][4] -- was [2]
+			--placedExpense = utilArray[5]
+		end
+		placedExpense = 20
+	elseif cat[cIndex] == "Mine Placement Mode" then
+		--pMode = {1,1000,2000,3000,4000,5000,0}
+		pMode = {1,1000,2000,3000,4000,5000}
+		-- 0 is dud right, or is that nil?
+		placedExpense = 15
+	elseif cat[cIndex] == "Sticky Mine Placement Mode" then
+		pMode = {"Normal Sticky Mine"}
+	--elseif cat[cIndex] == "Gear Repositioning Mode" then
+	--	for i = 1, #hhs do
+	--		pMode[i] = GetHogName(hhs[i])
+	--	end
+		placedExpense = 20
+	elseif cat[cIndex] == "Advanced Repositioning Mode" then
+		pMode = {"Selection Mode","Placement Mode"}
+	elseif cat[cIndex] == "Tagging Mode" then
+		pMode = {"Tag Victory Mode","Tag Failure Mode"}
+	elseif cat[cIndex] == "Sprite Testing Mode" or cat[cIndex] == "Sprite Placement Mode" then
+		--for i = 1, #spriteTextArray do
+		--	pMode[i] = spriteTextArray[i]
+		--end
+		for i = 1, #reducedSpriteTextArray do
+			pMode[i] = reducedSpriteTextArray[i]
+		end
+		placedExpense = 100
+	elseif cat[cIndex] == "Structure Placement Mode" then
+		pMode = {loc("Healing Station"), loc("Bio-Filter"), loc("Weapon Filter"), loc("Reflector Shield"), loc("Respawner"),loc("Teleportation Node"),--[[loc("Core"),]]loc("Generator"),loc("Construction Station"),loc("Support Station")}
+		--placedExpense = 100
+	end
+
+
+
+
+end
+
+-- called in onGameTick()
+function HandleHedgeEditor()
+
+	if CurrentHedgehog ~= nil then
+
+		if wallsVisible == true then
+			HandleBorderEffects()
+		end
+
+		if (CurrentHedgehog ~= nil) and (TurnTimeLeft ~= TurnTime) then
+			if (lastWep ~= GetCurAmmoType()) then
+				checkForSpecialWeapons()
+			end
+		end
+
+		genTimer = genTimer + 1
+
+		if genTimer >= 100 then
+
+			genTimer = 0
+
+			DrawTag(1)
+
+			HandleStructures()
+
+			curWep = GetCurAmmoType()
+
+			-- change to girder mode on weapon swap
+			if (cIndex ~= 1) and (curWep == amGirder) then
+				cIndex = 1
+				RedefineSubset()
+			elseif (cIndex ~=2) and (curWep == amRubber) then
+				cIndex = 2
+				RedefineSubset()
+			-- change to generic mode if girder no longer selected
+			elseif (cIndex == 1) and (curWep ~= amGirder) then
+				cIndex = 3 -- was 2
+				RedefineSubset()
+			elseif (cIndex == 2) and (curWep ~= amRubber) then
+				cIndex = 3 --new
+				RedefineSubset()
+
+			end
+
+			-- update display selection criteria
+			if (curWep == amGirder) or (curWep == amAirAttack) or (curWep == amNapalm) or (curWep == amDrillStrike) or (curWep == amRubber) then
+
+				---------------hooolllllyyyy fucking shit this
+				-- code is a broken mess now
+				-- it was redesigned and compromised three times
+				-- so now it is a mess trying to do what it was
+				-- never designed to do
+				-- needs to be rewritten badly sadface
+				-- this bit here catches the new 3 types of weapons
+				if ((sProx[cIndex][1] == loc("Structure Placement Mode") and (curWep ~= amAirAttack))) then
+					updatePlacementDisplay(1)
+				elseif (sProx[cIndex][1] == loc("Health Crate Placement Mode")) or
+							(sProx[cIndex][1] == loc("Weapon Crate Placement Mode")) or
+							(sProx[cIndex][1] == loc("Utility Crate Placement Mode")) then
+								if curWep ~= amNapalm then
+									updatePlacementDisplay(1)
+								end
+
+				elseif (sProx[cIndex][1] == loc("Mine Placement Mode")) or
+							(sProx[cIndex][1] == loc("Sticky Mine Placement Mode")) or
+							(sProx[cIndex][1] == loc("Barrel Placement Mode")) then
+								if curWep ~= amDrillStrike then
+									updatePlacementDisplay(1)
+								end
+
+				end
+
+				--this is called when it happens that we have placement
+				--mode selected and we are looking at something
+				--we shouldn't be allowed to look at, as would be the case
+				--when you WERE allowed to look at it, but then maybe
+				--a bomb blows up the structure that was granting you
+				--that ability
+				if (sProx[cIndex][2] ~= true) then
+					updatePlacementDisplay(1)
+				else
+					updateCost()
+				end
+
+
+				AddCaption(loc(cat[cIndex]),0xffba00ff,capgrpMessage)
+				AddCaption(pMode[pIndex],0xffba00ff,capgrpMessage2)
+				wallsVisible = true
+			else
+				wallsVisible = false
+			end
+
+		end
+
+	end
+
+	--update selected gear display
+	if (cat[cIndex] == "Advanced Repositioning Mode") and (sGear ~= nil) then
+		SetVisualGearValues(sCirc, GetX(sGear), GetY(sGear), 100, 255, 1, 10, 0, 300, 3, 0xff00ffff)
+	elseif (cat[cIndex] == "Tagging Mode") then
+		if (sGear ~= nil) or (closestGear ~= nil) then
+			SetVisualGearValues(sCirc, GetX(sGear), GetY(sGear), 0, 1, 1, 10, 0, 1, 1, 0x00000000)
+			closestGear = nil
+			sGear = nil
+		end
+	end
+
+	-- some kind of target detected, tell me your story
+	if cGear ~= nil then
+
+		x,y = GetGearTarget(cGear)
+
+		if GetGearType(cGear) == gtAirAttack then
+			DeleteGear(cGear)
+			PlaceObject(x, y)
+		elseif GetGearType(cGear) == gtTeleport then
+
+				CheckTeleport(cGear, x, y)
+				cGear = nil
+		elseif GetGearType(cGear) == gtGirder then
+
+			CGR = GetState(cGear)
+
+			-- improve rectangle test based on CGR when you can be bothered
+			--if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then
+			--	AddCaption("Invalid Girder Placement",0xffba00ff,capgrpVolume)
+			--else
+				PlaceObject(x, y)
+			--end
+
+			-- this allows the girder tool to be used like a mining laser
+
+		--[[
+
+			if CGR < 4 then
+				AddGear(x, y, gtGrenade, 0, 0, 0, 1)
+			elseif CGR == 4 then
+				g = AddGear(x-30, y, gtGrenade, 0, 0, 0, 1)
+				g = AddGear(x+30, y, gtGrenade, 0, 0, 0, 1)
+			elseif CGR == 5 then -------
+				g = AddGear(x+30, y+30, gtGrenade, 0, 0, 0, 1)
+				g = AddGear(x-30, y-30, gtGrenade, 0, 0, 0, 1)
+			elseif CGR == 6 then
+				g = AddGear(x, y+30, gtGrenade, 0, 0, 0, 1)
+				g = AddGear(x, y-30, gtGrenade, 0, 0, 0, 1)
+			elseif CGR == 7 then -------
+				g = AddGear(x+30, y-30, gtGrenade, 0, 0, 0, 1)
+				g = AddGear(x-30, y+30, gtGrenade, 0, 0, 0, 1)
+			end
+]]
+		end
+
+	end
+
+end
+
+--------------------------------------------------
+-- EVENT HANDLERS
+--------------------------------------------------
+
+function onTaunt(t)
+	tauntString = tauntString .. t
+	if (tauntString == "101") and (clanPower[GetHogClan(CurrentHedgehog)] < 300) and (clanBoon[GetHogClan(CurrentHedgehog)] == false) then
+		clanBoon[GetHogClan(CurrentHedgehog)] = true
+		clanPower[GetHogClan(CurrentHedgehog)] = 1000
+		AddCaption(loc("The Great Hog in the sky sees your sadness and grants you a boon."))
+	end
+end
+
+---------------------------------------------------------------
+-- Cycle through selection subsets (by changing pIndex, pMode)
+-- i.e 	health of barrels, medikits,
+--		timer of mines
+--		contents of crates
+--		gears to reposition etc.
+---------------------------------------------------------------
+
+function updateCost()
+
+	if pMode[pIndex] == loc("Healing Station") then
+		placedExpense = 50
+	elseif pMode[pIndex] == loc("Weapon Filter") then
+		placedExpense = 50
+	elseif pMode[pIndex] == loc("Bio-Filter") then
+		placedExpense = 100
+	elseif pMode[pIndex] == loc("Respawner") then
+		placedExpense = 300
+	elseif pMode[pIndex] == loc("Teleportation Node") then
+		placedExpense = 30
+	elseif pMode[pIndex] == loc("Support Station") then
+		placedExpense = 50
+	elseif pMode[pIndex] == loc("Construction Station") then
+		placedExpense = 50
+	elseif pMode[pIndex] == loc("Generator") then
+			placedExpense = 300
+	elseif pMode[pIndex] == loc("Reflector Shield") then
+			placedExpense = 200
+	elseif pMode[pIndex] == loc("Core") then
+		placedExpense = 1
+	elseif cat[cIndex] == loc("Weapon Crate Placement Mode") then
+		placedExpense = atkArray[pIndex][5]
+	elseif cat[cIndex] == loc("Utility Crate Placement Mode") then
+		placedExpense = utilArray[pIndex][5]
+	end
+
+	AddCaption(loc("Cost") .. ": " .. placedExpense,0xffba00ff,capgrpAmmostate)
+
+end
+
+function onLeft()
+
+	pIndex = pIndex - 1
+	if pIndex == 0 then
+		pIndex = #pMode
+	end
+
+	if (curWep == amGirder) or (curWep == amAirAttack) or (curWep == amNapalm) or (curWep == amDrillStrike) then
+		AddCaption(pMode[pIndex],0xffba00ff,capgrpMessage2)
+		updateCost()
+	end
+
+
+end
+
+function onRight()
+
+	pIndex = pIndex + 1
+	if pIndex > #pMode then
+		pIndex = 1
+	end
+
+	if (curWep == amGirder) or (curWep == amAirAttack) or (curWep == amNapalm) or (curWep == amDrillStrike) then
+		AddCaption(pMode[pIndex],0xffba00ff,capgrpMessage2)
+		updateCost()
+	end
+
+end
+
+
+function updatePlacementDisplay(pDir)
+
+	foundMatch = false
+	while(foundMatch == false) do
+		cIndex = cIndex + pDir
+
+		if (cIndex == 1) or (cIndex == 2) then --1	--we no longer hit girder by normal means
+			cIndex = #cat
+		elseif cIndex > #cat then
+			cIndex = 3	 -- 2 ----we no longer hit girder by normal means
+		end
+
+		-- new way of doing things
+		-- sProx[cIndex][2] == true just basically means we have ACCESS to something
+		-- but that doesn't neccessarily mean we are in the correct content menu, anymore
+		-- so we need to refine this a little
+		if sProx[cIndex][2] == true then
+			if (GetCurAmmoType() == amNapalm) then
+				if (sProx[cIndex][1] == loc("Health Crate Placement Mode")) or
+					(sProx[cIndex][1] == loc("Weapon Crate Placement Mode")) or
+					(sProx[cIndex][1] == loc("Utility Crate Placement Mode"))
+					then
+						foundMatch = true
+					end
+			elseif (GetCurAmmoType() == amDrillStrike) then
+				if (sProx[cIndex][1] == loc("Mine Placement Mode")) or
+					(sProx[cIndex][1] == loc("Sticky Mine Placement Mode")) or
+					(sProx[cIndex][1] == loc("Barrel Placement Mode"))
+					then
+						foundMatch = true
+					end
+			elseif (GetCurAmmoType() == amAirAttack) then
+				if sProx[cIndex][1] == loc("Structure Placement Mode") then
+					foundMatch = true
+				end
+			end
+		end
+
+
+		if foundMatch == true then
+		--if sProx[cIndex][2] == true then
+			-- normal case (scrolling through)
+			--foundMatch = true
+			RedefineSubset()
+			updateCost()
+		end
+
+	end
+
+end
+
+---------------------------------------------------------
+-- Cycle through primary categories (by changing cIndex)
+-- i.e 	mine, sticky mine, barrels
+--		health/weapon/utility crate, placement of gears
+---------------------------------------------------------
+function onUp()
+
+	if ((curWep == amAirAttack) or (curWep == amNapalm) or (curWep == amDrillStrike) ) then
+		updatePlacementDisplay(-1)
+	end
+
+end
+
+function onDown()
+
+	if ((curWep == amAirAttack) or (curWep == amNapalm) or (curWep == amDrillStrike) ) then
+		updatePlacementDisplay(1)
+	end
+
+end
+
+----------------------------
+-- standard event handlers
+----------------------------
+
+function onGameInit()
+
+	Explosives = 0
+	MinesNum = 0
+
+	EnableGameFlags(gfInfAttack)
+
+
+	RedefineSubset()
+
+end
+
+function initialSetup(gear)
+
+	FindPlace(gear, false, clanBoundsSX[GetHogClan(gear)], clanBoundsEX[GetHogClan(gear)],true)
+
+	-- for now, everyone should have this stuff
+	AddAmmo(gear, amAirAttack, 100)
+	AddAmmo(gear, amSwitch, 100)
+	AddAmmo(gear, amSkip, 100)
+
+end
+
+function onGameStart()
+
+	trackTeams()
+
+	ShowMission	(
+				loc("CONSTRUCTION MODE"),
+				loc("a Hedgewars mini-game"),
+				" " .. "|" ..
+				loc("Build a fortress and destroy your enemy.") .. "|" ..
+				--loc("Defend your core from the enemy.") .. "|" ..
+				loc("There are a variety of structures available to aid you.") .. "|" ..
+				loc("Use the air-attack weapons and the arrow keys to select structures.") .. "|" ..
+				" " .. "|" ..
+				--loc("Core") .. ": " .. loc("Allows placement of structures.")  .. "|" ..
+				loc("Healing Station") .. ": " .. loc("Grants nearby hogs life-regeneration.")  .. "|" ..
+				loc("Bio-Filter") .. ": " .. loc("Aggressively removes enemy hedgehogs.")  .. "|" ..
+				loc("Weapon Filter") .. ": " .. loc("Dematerializes weapons and equipment carried by enemy hedgehogs.")  .. "|" ..
+				loc("Reflector Shield") .. ": " .. loc("Reflects enemy projectiles.")  .. "|" ..
+
+				loc("Generator") .. ": " .. loc("Generates power.")  .. "|" ..
+				loc("Respawner") .. ": " .. loc("Resurrects dead hedgehogs.")  .. "|" ..
+				loc("Teleportation Node") .. ": " .. loc("Allows free teleportation between other nodes.")  .. "|" ..
+				loc("Construction Station") .. ": " .. loc("Allows placement of girders, rubber-bands, mines, sticky mines and barrels.")  .. "|" ..
+				loc("Support Station") .. ": " .. loc("Allows the placement of weapons, utiliites, and health crates.")  .. "|" ..
+
+
+				" " .. "|" ..
+				--" " .. "|" ..
+				"", 4, 5000
+				)
+
+
+	sCirc = AddVisualGear(0,0,vgtCircle,0,true)
+	SetVisualGearValues(sCirc, 0, 0, 100, 255, 1, 10, 0, 40, 3, 0x00000000)
+
+	for i = 0, ClansCount-1 do
+		clanPower[i] = 500
+		clanBoon[i] = false
+		clanLWepIndex[i] = 1 -- for ease of use let's track this stuff
+		clanLUtilIndex[i] = 1
+		clanLGearIndex[i] = 1
+		clanUsedExtraTime[i] = false
+		clanCratesSpawned[i] = 0
+
+
+	end
+
+	tMapWidth = RightX - LeftX
+	tMapHeight = WaterLine - TopY
+	clanInterval = div(tMapWidth,ClansCount)
+
+	for i = 1, ClansCount do
+
+		clanBoundsSX[i-1] = LeftX+(clanInterval*i)-clanInterval+20
+		clanBoundsSY[i-1] = TopY
+		clanBoundsEX[i-1] = LeftX+(clanInterval*i)-20
+		clanBoundsEY[i-1] = WaterLine
+
+		--top and bottom
+		AddWall(LeftX+(clanInterval*i)-clanInterval,TopY,clanInterval,margin,GetClanColor(i-1))
+		AddWall(LeftX+(clanInterval*i)-clanInterval,WaterLine-25,clanInterval,margin,GetClanColor(i-1))
+
+		--add a wall to the left and right
+		AddWall(LeftX+(clanInterval*i)-clanInterval+20,TopY,margin,WaterLine,GetClanColor(i-1))
+		AddWall(LeftX+(clanInterval*i)-20,TopY,margin,WaterLine,GetClanColor(i-1))
+
+	end
+
+	runOnHogs(initialSetup)
+
+end
+
+
+function onNewTurn()
+
+	tauntString = ""
+	clanPower[GetHogClan(CurrentHedgehog)] = clanPower[GetHogClan(CurrentHedgehog)] + 50
+	clanUsedExtraTime[GetHogClan(CurrentHedgehog)] = false
+	clanCratesSpawned[GetHogClan(CurrentHedgehog)] = 0
+
+end
+
+function onGameTick()
+	HandleHedgeEditor()
+end
+
+function isATrackedGear(gear)
+	if 	(GetGearType(gear) == gtHedgehog) or
+		(GetGearType(gear) == gtTarget) or
+		(GetGearType(gear) == gtCase)
+	then
+		return(true)
+	else
+		return(false)
+	end
+end
+
+-- track hedgehogs and placement gears
+function onGearAdd(gear)
+
+	if GetGearType(gear) == gtHedgehog then
+		--table.insert(hhs, gear)
+	elseif (GetGearType(gear) == gtAirAttack) or (GetGearType(gear) == gtTeleport) or (GetGearType(gear) == gtGirder) then
+		cGear = gear
+
+	end
+
+	if isATrackedGear(gear) then
+		trackGear(gear)
+	elseif gearCanBeDeflected(gear) then
+		trackGear(gear)
+		setGearReflectionValues(gear)
+	end
+
+end
+
+function onGearDelete(gear)
+
+	if GetGearType(gear) == gtTarget then
+		CheckGearForStructureLink(gear)
+	end
+
+	if (GetGearType(gear) == gtAirAttack) or (GetGearType(gear) == gtTeleport) or (GetGearType(gear) == gtGirder) then
+		cGear = nil
+	end
+
+	if (isATrackedGear(gear) or gearCanBeDeflected(gear)) then
+
+		if getGearValue(gear, "tCirc") ~= nil then
+			DeleteVisualGear(getGearValue(gear, "tCirc"))
+		end
+
+		trackDeletion(gear)
+
+	end
+
+end
--- a/share/hedgewars/Data/Scripts/Multiplayer/Continental_supplies.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Continental_supplies.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -1,41 +1,46 @@
 --[[
-Made for 0.9.21
+	version 1.3n
 
-Copyright (C) 2012 Vatten
+	The expat (MIT) license
 
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+	Copyright (C) 2012 Vatten
+
+	Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+	The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 ]]
 
 HedgewarsScriptLoad("/Scripts/Locale.lua")
 HedgewarsScriptLoad("/Scripts/Utils.lua")
 HedgewarsScriptLoad("/Scripts/Tracker.lua")
 
-function int_sqrt(num)
+--approximative version of square root. This function follows the babylonian method.
+function IntegerSqrt(num)
 	local temp=num
 	while(temp*temp-div(temp,2)>num)
 	do
 		temp=div((temp+div(num,temp)),2)
 	end
-	
+
 	return math.abs(temp)
 end
 
-function norm(xx,yy)
+-- sqrt(x^2,y^2), work without desyncs. is approximative
+function Norm(xx,yy)
 	--to fix overflows
 	if(((math.abs(xx)^2)+(math.abs(yy)^2))>2^26)
 	then
 		local bitr=2^13
-		return int_sqrt((div(math.abs(xx),bitr)^2)+(div(math.abs(yy),bitr)^2))*bitr
+		return IntegerSqrt((div(math.abs(xx),bitr)^2)+(div(math.abs(yy),bitr)^2))*bitr
 	else
-		return int_sqrt((math.abs(xx)^2)+(math.abs(yy)^2))
+		return IntegerSqrt((math.abs(xx)^2)+(math.abs(yy)^2))
 	end
 end
 
-function positive(num)
+-- returns 1 or -1 depending on where it is
+function GetIfNegative(num)
 	if(num<0)
 	then
 		return -1
@@ -44,61 +49,100 @@
 	end
 end
 
+--Will end the turn + give escape time
 function EndTurn()
 	SetState(CurrentHedgehog,bor(GetState(CurrentHedgehog),gstAttacked))
 	--3 sec espace time
 	TurnTimeLeft = GetAwayTime*10*3
+ end
+
+ --show health tag (will mostly be used when a hog is damaged)
+function ShowDamageTag(hog,damage)
+	healthtag=AddVisualGear(GetX(hog), GetY(hog), vgtHealthTag, damage, false)
+	v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 = GetVisualGearValues(healthtag)
+	SetVisualGearValues(healthtag, v1, v2, v3, v4, v5, v6, v7, v8, v9, GetClanColor(GetHogClan(hog)))
+end
+
+--will use IntegerSqrt
+function FireGear(hedgehog,geartype,vx,vy,timer)
+	local hypo=Norm(vx,vy)
+	return AddGear(div((GetGearRadius(hedgehog)*2*vx),hypo)+GetX(hedgehog), div((GetGearRadius(hedgehog)*2*vy),hypo)+GetY(hedgehog), geartype, 0, vx, vy, timer)
 end
 
---for sundaland
-local turnhog=0
+--This function will set the gravity on a scale from 0->100, where 50 is the standard one.
+ function SetGravityFromScale(grav)
+	if(grav>100)
+	then
+		grav=100
+	elseif(grav<0)
+	then
+		grav=0
+	end
 
-local teams_ok = {}
-local wepcode_teams={}
-local swapweps=false
+	if(grav>50)
+	then
+		SetGravity(100+((grav-50)*12))
+	else
+		SetGravity(25+grav+div(grav,2))
+	end
+ end
+
+--====MISC GLOBALS====
+
+--for selecting continent
+local GLOBAL_INIT_TEAMS = {}
+local GLOBAL_SELECT_CONTINENT_CHECK=false
+local GLOBAL_TEAM_CONTINENT = {}
 
 --variables for seeing if you have swaped around on a weapon
-local australianSpecial=false
-local africanSpecial=0
-local africaspecial2=0
-local samericanSpecial=false
-local namericanSpecial=1
-local sniper_s_in_use=false
-local kergulenSpecial=1
-local shotgun_s=false
-local europe_s=0
-local VampOn=0
+local GLOBAL_AUSTRALIAN_SPECIAL=0
+local GLOBAL_AFRICAN_SPECIAL_SEDUCTION=0
+local GLOBAL_AFRICAN_SPECIAL_STICKY=0
+local GLOBAL_SOUTH_AMERICAN_SPECIAL=false
+local GLOBAL_NORTH_AMERICAN_SPECIAL_SNIPER=1
+local GLOBAL_NORTH_AMERICAN_SPECIAL_SNIPER_IS_ON=false
+local GLOBAL_KERGUELEN_SPECIAL=1
+local GLOBAL_NORTH_AMERICAN_SPECIAL_SHOTGUN=false
+local GLOBAL_EUROPE_SPECIAL=0
 
-local austmine=nil
-local inpara=false
-local asianflame=0
+--detection if something is activated
+local GLOBAL_SWITCH_HOG_IS_ON=false
+local GLOBAL_VAMPIRIC_IS_ON=0
+local GLOBAL_EXTRA_DAMAGE_IS_ON=100
+local GLOBAL_PARACHUTE_IS_ON=false
 
-local visualcircle=nil
+--the visual circle for kerguelen
+local GLOBAL_VISUAL_CIRCLE=nil
 
-local temp_val=0
+--the global temp value
+local GLOBAL_TEMP_VALUE=0
 
 --for sabotage
-local disallowattack=0
-local disable_moving={}
-local disableRand=0
---local disableoffsetai=0
-local onsabotageai=false
+local GLOBAL_SABOTAGE_COUNTER=0
+local GLOBAL_SABOTAGE_HOGS={}
+local GLOBAL_SABOTAGE_FREQUENCY=0
+local GLOBAL_SABOTAGE_GRAVITY_SWITCH=true
+
+--for sundaland
+local GLOBAL_SUNDALAND_END_HOG=0
 
-local continent = {}
+--====GENERAL GLOBALS (useful for handling continents)====
 
-local generalinfo="- "..loc("Per team weapons").."|- 10 "..loc("weaponschemes").."|- "..loc("Unique new weapons").."| |"..loc("Select continent first round with the Weapon Menu or by").." (["..loc("switch").."/"..loc("tab").."]="..loc("Increase")..",["..loc("presice").."/"..loc("left shift").."]="..loc("Decrease")..") "..loc("on Skip").."|"..loc("Some weapons have a second option. Find them with").." ["..loc("switch").."/"..loc("tab").."]"
+local GLOBAL_GENERAL_INFORMATION="- "..loc("Per team weapons").."|- 10 "..loc("weaponschemes").."|- "..loc("Unique new weapons").."| |"..loc("Select your continent/weaponset: with the \"Up\" or \"Down\" keys. You can also select one with the weapons menu.").."|"..loc("Note: Some weapons have a second option (See continent information). Find and use them with the \"")..loc("switch").."\" "..loc("key.").."|"..loc("Tip: See the \"esc\" key (this menu) if you want to see the currently playing teams continent, or that continents specials.")
 
-local weapontexts = {
+local GLOBAL_SHOW_SMALL_INFO=0
+
+local GLOBAL_WEAPON_TEXTS = {
 loc("Green lipstick bullet: [Poisonous, deals no damage]"),
-loc("REMOVED"),
+loc("Cluck-cluck time: [Fire an egg ~ Sabotages and cures poison ~ Cannot be fired close to another hog]"),
 loc("Anno 1032: [The explosion will make a strong push ~ Wide range, wont affect hogs close to the target]"),
 loc("Dust storm: [Deals 15 damage to all enemies in the circle]"),
-loc("Cricket time: [Drop a fireable mine! ~ Will work if fired close to your hog & far away from enemy ~ 1 sec]"),
+loc("Cricket time: [Fire away a 1 sec mine! ~ Cannot be fired close to another hog]"),
 loc("Drop a bomb: [Drop some heroic wind that will turn into a bomb on impact]"),
-loc("Penguin roar: [Deal 15 damage + 15% of your hogs health to all hogs around you and get 2/3 back]"),
+loc("Penguin roar: [Deal 15 damage + 10% of your hogs health to all hogs around you and get 2/3 back]"),
 loc("Disguise as a Rockhopper Penguin: [Swap place with a random enemy hog in the circle]"),
-loc("REMOVED"),
-loc("Lonely Cries: [Rise the water if no hog is in the circle and deal 7 damage to all enemy hogs]"),
+nil,
+loc("Lonely Cries: [Rise the water if no hog is in the circle and deal 6 damage to all enemy hogs.]"),
 loc("Hedgehog projectile: [Fire your hog like a Sticky Bomb]"),
 loc("Napalm rocket: [Fire a bomb with napalm!]"),
 loc("Eagle Eye: [Blink to the impact ~ One shot]"),
@@ -106,41 +150,41 @@
 loc("Sabotage/Flare: [Sabotage all hogs in the circle and deal ~1 dmg OR Fire a cluster up into the air]")
 }
 
-local weaponsets = 
+local GLOBAL_CONTINENT_INFORMATION =
 {
-{loc("North America"),loc("Area")..": 24,709,000 km2, "..loc("Population")..": 529,000,000",loc("- Will give you an airstrike every fifth turn.").."|"..loc("Special Weapons:").."|"..loc("Shotgun")..": "..weapontexts[13].."|"..loc("Sniper Rifle")..": "..weapontexts[1],amSniperRifle,
-{{amShotgun,100},{amDEagle,100},{amLaserSight,4},{amSniperRifle,100},{amCake,1},{amAirAttack,2},{amSwitch,5}}},
+{loc("North America"),"["..loc("Difficulty: ")..loc("EASY").."] "..loc("Area")..": 24,709,000 km2, "..loc("Population")..": 529,000,000",loc("- You can switch between hogs at the start of your turns. (Not first one)").."|"..loc("Special Weapons:").."|"..loc("Shotgun")..": "..GLOBAL_WEAPON_TEXTS[13].."|"..loc("Sniper Rifle")..": "..GLOBAL_WEAPON_TEXTS[1],amSniperRifle,
+{{amShotgun,100},{amDEagle,100},{amLaserSight,2},{amSniperRifle,100},{amCake,1},{amAirAttack,2},{amSwitch,2}}},
 
-{loc("South America"),loc("Area")..": 17,840,000 km2, "..loc("Population")..": 387,000,000",loc("Special Weapons:").."|"..loc("GasBomb")..": "..weapontexts[3],amGasBomb,
-{{amBirdy,100},{amHellishBomb,1},{amBee,100},{amGasBomb,100},{amFlamethrower,100},{amNapalm,1},{amExtraDamage,3}}},
+{loc("South America"),"["..loc("Difficulty: ")..loc("MEDIUM").."] "..loc("Area")..": 17,840,000 km2, "..loc("Population")..": 387,000,000",loc("Special Weapons:").."|"..loc("GasBomb")..": "..GLOBAL_WEAPON_TEXTS[3],amGasBomb,
+{{amBirdy,100},{amHellishBomb,1},{amBee,100},{amGasBomb,100},{amFlamethrower,100},{amNapalm,1},{amExtraDamage,2}}},
 
-{loc("Europe"),loc("Area")..": 10,180,000 km2, "..loc("Population")..": 740,000,000",loc("Special Weapons:").."|"..loc("Molotov")..": "..weapontexts[14],amBazooka,
+{loc("Europe"),"["..loc("Difficulty: ")..loc("EASY").."] "..loc("Area")..": 10,180,000 km2, "..loc("Population")..": 740,000,000",loc("Special Weapons:").."|"..loc("Molotov")..": "..GLOBAL_WEAPON_TEXTS[14],amBazooka,
 {{amBazooka,100},{amGrenade,100},{amMortar,100},{amMolotov,100},{amVampiric,3},{amPiano,1},{amResurrector,2},{amJetpack,4}}},
 
-{loc("Africa"),loc("Area")..": 30,222,000 km2, "..loc("Population")..": 1,033,000,000",loc("Special Weapons:").."|"..loc("Seduction")..": "..weapontexts[4].."|"..loc("Sticky Mine")..": "..weapontexts[11].."|"..loc("Sticky Mine")..": "..weapontexts[12],amSMine,
-{{amSMine,100},{amWatermelon,1},{amDrillStrike,1},{amDrill,100},{amInvulnerable,4},{amSeduction,100},{amLandGun,2}}},
+{loc("Africa"),"["..loc("Difficulty: ")..loc("MEDIUM").."] "..loc("Area")..": 30,222,000 km2, "..loc("Population")..": 1,033,000,000",loc("Special Weapons:").."|"..loc("Seduction")..": "..GLOBAL_WEAPON_TEXTS[4].."|"..loc("Sticky Mine")..": "..GLOBAL_WEAPON_TEXTS[11].."|"..loc("Sticky Mine")..": "..GLOBAL_WEAPON_TEXTS[12],amSMine,
+{{amSMine,100},{amWatermelon,1},{amDrillStrike,1},{amDrill,100},{amInvulnerable,5},{amSeduction,100},{amLandGun,2}}},
 
-{loc("Asia"),loc("Area")..": 44,579,000 km2, "..loc("Population")..": 3,880,000,000",loc("- Will give you a parachute every second turn.").."|"..loc("Special Weapons:").."|"..loc("Parachute")..": "..weapontexts[6],amRope,
-{{amRope,100},{amFirePunch,100},{amParachute,1},{amKnife,2},{amDynamite,1}}},
+{loc("Asia"),"["..loc("Difficulty: ")..loc("MEDIUM").."] "..loc("Area")..": 44,579,000 km2, "..loc("Population")..": 3,880,000,000",loc("- Will give you a parachute every second turn.").."|"..loc("Special Weapons:").."|"..loc("Parachute")..": "..GLOBAL_WEAPON_TEXTS[6],amRope,
+{{amRope,100},{amFirePunch,100},{amParachute,2},{amKnife,2},{amDynamite,1}}},
 
-{loc("Australia"),loc("Area")..": 8,468,000 km2, "..loc("Population")..": 31,000,000",loc("Special Weapons:").."|"..loc("Baseballbat")..": "..weapontexts[5],amBaseballBat,
-{{amBaseballBat,100},{amMine,100},{amLowGravity,4},{amBlowTorch,100},{amRCPlane,2},{amTeleport,3}}},
+{loc("Australia"),"["..loc("Difficulty: ")..loc("EASY").."] "..loc("Area")..": 8,468,000 km2, "..loc("Population")..": 31,000,000",loc("Special Weapons:").."|"..loc("Baseballbat")..": "..GLOBAL_WEAPON_TEXTS[5].."|"..loc("Baseballbat")..": "..GLOBAL_WEAPON_TEXTS[2],amBaseballBat,
+{{amBaseballBat,100},{amMine,100},{amLowGravity,4},{amBlowTorch,100},{amRCPlane,2},{amTeleport,2},{amRubber,2}}},
 
-{loc("Antarctica"),loc("Area")..": 14,000,000 km2, "..loc("Population")..": ~1,000",loc("Antarctic summer: - Will give you one girder/mudball and two sineguns/portals every fourth turn."),amIceGun,
-{{amSnowball,2},{amIceGun,2},{amPickHammer,100},{amSineGun,4},{amGirder,2},{amExtraTime,2},{amPortalGun,2}}},
+{loc("Antarctica"),"["..loc("Difficulty: ")..loc("HARD").."] "..loc("Area")..": 14,000,000 km2, "..loc("Population")..": ~1,000",loc("Antarctic summer: - Will give you one girder/mudball and two sineguns/portals every fourth turn."),amIceGun,
+{{amSnowball,2},{amIceGun,2},{amPickHammer,100},{amSineGun,5},{amGirder,2},{amExtraTime,1},{amPortalGun,2}}},
 
-{loc("Kerguelen"),loc("Area")..": 1,100,000 km2, "..loc("Population")..": ~100",loc("Special Weapons:").."|"..loc("Hammer")..": "..weapontexts[7].."|"..loc("Hammer")..": "..weapontexts[8].." ("..loc("Duration")..": 2)|"..loc("Hammer")..": "..weapontexts[10].."|"..loc("Hammer")..": "..weapontexts[15],amHammer,
-{{amHammer,100},{amMineStrike,2},{amBallgun,1}}},
+{loc("Kerguelen"),"["..loc("Difficulty: ")..loc("EASY").."] "..loc("Area")..": 1,100,000 km2, "..loc("Population")..": ~100",loc("Special Weapons:").."|"..loc("Hammer")..": "..GLOBAL_WEAPON_TEXTS[7].."|"..loc("Hammer")..": "..GLOBAL_WEAPON_TEXTS[8].." ("..loc("Duration")..": 2)|"..loc("Hammer")..": "..GLOBAL_WEAPON_TEXTS[10].."|"..loc("Hammer")..": "..GLOBAL_WEAPON_TEXTS[15],amHammer,
+{{amHammer,100},{amMineStrike,1},{amBallgun,1}}},
 
-{loc("Zealandia"),loc("Area")..": 3,500,000 km2, "..loc("Population")..": 5,000,000",loc("- Will Get 1-3 random weapons") .. "|" .. loc("- Massive weapon bonus on first turn"),amInvulnerable,
+{loc("Zealandia"),"["..loc("Difficulty: ")..loc("MEDIUM").."] "..loc("Area")..": 3,500,000 km2, "..loc("Population")..": 5,000,000",loc("- Will Get 1-3 random weapons") .. "|" .. loc("- Massive weapon bonus on first turn"),amInvulnerable,
 {{amBazooka,1},{amGrenade,1},{amBlowTorch,1},{amSwitch,100},{amRope,1},{amDrill,1},{amDEagle,1},{amPickHammer,1},{amFirePunch,1},{amWhip,1},{amMortar,1},{amSnowball,1},{amExtraTime,1},{amInvulnerable,1},{amVampiric,1},{amFlamethrower,1},{amBee,1},{amClusterBomb,1},{amTeleport,1},{amLowGravity,1},{amJetpack,1},{amGirder,1},{amLandGun,1},{amBirdy,1}}},
 
-{loc("Sundaland"),loc("Area")..": 1,850,000 km2, "..loc("Population")..": 290,000,000",loc("- You will recieve 2-4 weapons on each kill! (Even on own hogs)"),amTardis,
-{{amClusterBomb,3},{amTardis,4},{amWhip,100},{amKamikaze,4}}}
+{loc("Sundaland"),"["..loc("Difficulty: ")..loc("HARD").."] "..loc("Area")..": 1,850,000 km2, "..loc("Population")..": 290,000,000",loc("- You will recieve 2-4 weapons on each kill! (Even on own hogs)"),amTardis,
+{{amClusterBomb,4},{amTardis,4},{amWhip,100},{amKamikaze,4}}}
 
 }
 
-local weaponsetssounds=
+local GLOBAL_CONTINENT_SOUNDS=
 {
 	{sndShotgunFire,sndCover},
 	{sndEggBreak,sndLaugh},
@@ -151,11 +195,12 @@
 	{sndSineGun,sndOops},
 	{sndPiano5,sndStupid},
 	{sndSplash,sndFirstBlood},
-	{sndWarp,sndSameTeam}
+	{sndWarp,sndSameTeam},
+	{sndFrozenHogImpact,sndUhOh}
 }
 
 --weapontype,ammo,?,duration,*times your choice,affect on random team (should be placed with 1,0,1,0,1 on the 6th option for better randomness)
-local weapons_dmg = {
+local GLOBAL_WEAPONS_DAMAGE = {
 	{amKamikaze, 0, 1, 0, 1, 0},
 	{amSineGun, 0, 1, 0, 1, 1},
 	{amBazooka, 0, 1, 0, 1, 0},
@@ -182,6 +227,7 @@
 	{amDrill, 0, 1, 0, 1, 0},
 	{amBallgun, 0, 1, 5, 1, 2},
 	{amMolotov, 0, 1, 0, 1, 0},
+	{amHammer, 0, 1, 0, 1, 2},
 	{amBirdy, 0, 1, 0, 1, 0},
 	{amBlowTorch, 0, 1, 0, 1, 0},
 	{amRCPlane, 0, 1, 5, 1, 2},
@@ -189,11 +235,10 @@
 	{amAirAttack, 0, 1, 4, 1, 1},
 	{amFlamethrower, 0, 1, 0, 1, 0},
 	{amSMine, 0, 1, 0, 1, 1},
-	{amHammer, 0, 1, 0, 1, 0},
 	{amDrillStrike, 0, 1, 4, 1, 2},
 	{amSnowball, 0, 1, 0, 1, 0}
 }
-local weapons_supp = {
+local GLOBAL_WEAPONS_SUPPORT = {
 	{amParachute, 0, 1, 0, 1, 0},
 	{amGirder, 0, 1, 0, 1, 0},
 	{amSwitch, 0, 1, 0, 1, 0},
@@ -211,11 +256,13 @@
 	{amLandGun, 0, 1, 0, 1, 0},
 	{amTardis, 0, 1, 0, 1, 0},
 	{amIceGun, 0, 1, 0, 1, 0},
-	{amKnife, 0, 1, 0, 1, 0}
+	{amKnife, 0, 1, 0, 1, 0},
+	{amRubber, 0, 1, 0, 1, 0}
+
 }
 
 --will check after borders and stuff
-function validate_weapon(hog,weapon,amount)
+function ValidateWeapon(hog,weapon,amount)
 	if(MapHasBorder() == false or (MapHasBorder() == true and weapon ~= amAirAttack and weapon ~= amMineStrike and weapon ~= amNapalm and weapon ~= amDrillStrike and weapon ~= amPiano))
 	then
 		if(amount==1)
@@ -227,6 +274,7 @@
 	end
 end
 
+--removes one weapon
 function RemoveWeapon(hog,weapon)
 
 	if(GetAmmoCount(hog, weapon)<100)
@@ -236,49 +284,49 @@
 end
 
 --reset all weapons for a team
-function cleanweps(hog)
+function CleanWeapons(hog)
 
 	local i=1
-	--+1 for skip +1 for freezer
-	while(i<=table.maxn(weapons_supp)+table.maxn(weapons_dmg)+2)
+	--+1 for skip
+	while(i<=table.maxn(GLOBAL_WEAPONS_SUPPORT)+table.maxn(GLOBAL_WEAPONS_DAMAGE)+1)
 	do
 		AddAmmo(hog,i,0)
 		i=i+1
 	end
-	
+
 	AddAmmo(hog,amSkip,100)
 end
 
 --get the weapons from a weaponset
-function load_weaponset(hog, num)
-	for v,w in pairs(weaponsets[num][5]) 
+function LoadWeaponset(hog, num)
+	for v,w in pairs(GLOBAL_CONTINENT_INFORMATION[num][5])
 	do
-		validate_weapon(hog, w[1],w[2])
+		ValidateWeapon(hog, w[1],w[2])
 	end
 end
 
 --list up all weapons from the icons for each continent
-function load_continent_selection(hog)
+function InitWeaponsMenu(hog)
 
 	if(GetHogLevel(hog)==0)
 	then
-		for v,w in pairs(weaponsets) 
+		for v,w in pairs(GLOBAL_CONTINENT_INFORMATION)
 		do
-			validate_weapon(hog, weaponsets[v][4],1)
+			ValidateWeapon(hog, GLOBAL_CONTINENT_INFORMATION[v][4],1)
 		end
 		AddAmmo(hog,amSwitch) --random continent
-	
+
 	--for the computers
 	else
 		--europe
-		validate_weapon(hog, weaponsets[3][4],1)
+		ValidateWeapon(hog, GLOBAL_CONTINENT_INFORMATION[3][4],1)
 		--north america
-		validate_weapon(hog, weaponsets[1][4],1)
+		ValidateWeapon(hog, GLOBAL_CONTINENT_INFORMATION[1][4],1)
 	end
 end
 
 --shows the continent info
-function show_continent_info(continent,time,generalinf)
+function ShowContinentInfo(continent,time,generalinf)
 	local geninftext=""
 	local ns=false
 	if(time==-1)
@@ -288,9 +336,12 @@
 	end
 	if(generalinf)
 	then
-		geninftext="| |"..loc("General information")..": |"..generalinfo
+		geninftext="| |"..loc("General information")..": |"..GLOBAL_GENERAL_INFORMATION
 	end
-	ShowMission(weaponsets[continent][1],weaponsets[continent][2],weaponsets[continent][3]..geninftext, -weaponsets[continent][4], time)
+
+	GLOBAL_SHOW_SMALL_INFO=div(time,40)
+
+	ShowMission(GLOBAL_CONTINENT_INFORMATION[continent][1],GLOBAL_CONTINENT_INFORMATION[continent][2],GLOBAL_CONTINENT_INFORMATION[continent][3]..geninftext, -GLOBAL_CONTINENT_INFORMATION[continent][4], time)
 	if(ns)
 	then
 		HideMission()
@@ -298,7 +349,7 @@
 end
 
 --will show a circle of gears (eye candy)
-function visual_gear_explosion(range,xpos,ypos,gear1,gear2)
+function VisualExplosion(range,xpos,ypos,gear1,gear2)
 	local degr=0
 	local lap=30
 	while(lap<range)
@@ -318,312 +369,331 @@
 end
 
 --zealandia (generates weapons from the weaponinfo above
-function get_random_weapon(hog)
-	if(GetGearType(hog) == gtHedgehog and continent[GetHogTeamName(hog)]==9 and getTeamValue(GetHogTeamName(hog), "rand-done-turn")==nil)
+function ZealandiaGetWeapons(hog)
+	if(GetGearType(hog) == gtHedgehog and GLOBAL_TEAM_CONTINENT[GetHogTeamName(hog)]==9 and getTeamValue(GetHogTeamName(hog), "rand-done-turn")==nil)
 	then
-		cleanweps(hog)
-	
+		CleanWeapons(hog)
+
 		local random_weapon = 0
 		local old_rand_weap = 0
 		local rand_weaponset_power = 0
-		
-		local numberof_weapons_supp=table.maxn(weapons_supp)
-		local numberof_weapons_dmg=table.maxn(weapons_dmg)
-		
-		local rand1=math.abs(GetRandom(numberof_weapons_supp)+1)
-		local rand2=math.abs(GetRandom(numberof_weapons_dmg)+1)
-		
-		random_weapon = math.abs(GetRandom(table.maxn(weapons_dmg))+1)
-		
-		while(weapons_dmg[random_weapon][4]>TotalRounds or (MapHasBorder() == true and (weapons_dmg[random_weapon][1]== amAirAttack or weapons_dmg[random_weapon][1] == amMineStrike or weapons_dmg[random_weapon][1] == amNapalm or weapons_dmg[random_weapon][1] == amDrillStrike or weapons_dmg[random_weapon][1] == amPiano)))
+
+		local numberofweaponssupp=table.maxn(GLOBAL_WEAPONS_SUPPORT)
+		local numberofweaponsdmg=table.maxn(GLOBAL_WEAPONS_DAMAGE)
+
+		local rand1=math.abs(GetRandom(numberofweaponssupp)+1)
+		local rand2=math.abs(GetRandom(numberofweaponsdmg)+1)
+
+		random_weapon = math.abs(GetRandom(table.maxn(GLOBAL_WEAPONS_DAMAGE))+1)
+
+		while(GLOBAL_WEAPONS_DAMAGE[random_weapon][4]>TotalRounds or (MapHasBorder() == true and (GLOBAL_WEAPONS_DAMAGE[random_weapon][1]== amAirAttack or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amMineStrike or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amNapalm or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amDrillStrike or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amPiano)))
 		do
-			if(random_weapon>=numberof_weapons_dmg)
+			if(random_weapon>=numberofweaponsdmg)
 			then
 				random_weapon=0
 			end
 			random_weapon = random_weapon+1
 		end
-		validate_weapon(hog, weapons_dmg[random_weapon][1],1)
-		rand_weaponset_power=weapons_dmg[random_weapon][6]
+		ValidateWeapon(hog, GLOBAL_WEAPONS_DAMAGE[random_weapon][1],1)
+		rand_weaponset_power=GLOBAL_WEAPONS_DAMAGE[random_weapon][6]
 		old_rand_weap = random_weapon
-		
+
 		if(rand_weaponset_power <2)
 		then
 			random_weapon = rand1
-			while(weapons_supp[random_weapon][4]>TotalRounds or rand_weaponset_power+weapons_supp[random_weapon][6]>2)
+			while(GLOBAL_WEAPONS_SUPPORT[random_weapon][4]>TotalRounds or rand_weaponset_power+GLOBAL_WEAPONS_SUPPORT[random_weapon][6]>2)
 			do
-				if(random_weapon>=numberof_weapons_supp)
+				if(random_weapon>=numberofweaponssupp)
 				then
 					random_weapon=0
 				end
 				random_weapon = random_weapon+1
 			end
-			validate_weapon(hog, weapons_supp[random_weapon][1],1)
-			rand_weaponset_power=rand_weaponset_power+weapons_supp[random_weapon][6]
+			ValidateWeapon(hog, GLOBAL_WEAPONS_SUPPORT[random_weapon][1],1)
+			rand_weaponset_power=rand_weaponset_power+GLOBAL_WEAPONS_SUPPORT[random_weapon][6]
 		end
 		--check again if  the power is enough
 		if(rand_weaponset_power <1)
 		then
 			random_weapon = rand2
-			while(weapons_dmg[random_weapon][4]>TotalRounds or old_rand_weap == random_weapon or weapons_dmg[random_weapon][6]>0 or (MapHasBorder() == true and (weapons_dmg[random_weapon][1]== amAirAttack or weapons_dmg[random_weapon][1] == amMineStrike or weapons_dmg[random_weapon][1] == amNapalm or weapons_dmg[random_weapon][1] == amDrillStrike or weapons_dmg[random_weapon][1] == amPiano)))
+			while(GLOBAL_WEAPONS_DAMAGE[random_weapon][4]>TotalRounds or old_rand_weap == random_weapon or GLOBAL_WEAPONS_DAMAGE[random_weapon][6]>0 or (MapHasBorder() == true and (GLOBAL_WEAPONS_DAMAGE[random_weapon][1]== amAirAttack or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amMineStrike or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amNapalm or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amDrillStrike or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amPiano)))
 			do
-				if(random_weapon>=numberof_weapons_dmg)
+				if(random_weapon>=numberofweaponsdmg)
 				then
 					random_weapon=0
 				end
 				random_weapon = random_weapon+1
 			end
-			validate_weapon(hog, weapons_dmg[random_weapon][1],1)
+			ValidateWeapon(hog, GLOBAL_WEAPONS_DAMAGE[random_weapon][1],1)
 		end
-			
+
 		setTeamValue(GetHogTeamName(hog), "rand-done-turn", true)
 	end
 end
 
 --sundaland add weps
-function get_random_weapon_on_death(hog)
-	
+function SundalandGetWeapons(hog)
+
 		local random_weapon = 0
 		local old_rand_weap = 0
 		local rand_weaponset_power = 0
-		
+
 		local firstTurn=0
-		
-		local numberof_weapons_supp=table.maxn(weapons_supp)
-		local numberof_weapons_dmg=table.maxn(weapons_dmg)
-		
-		local rand1=GetRandom(numberof_weapons_supp)+1
-		local rand2=GetRandom(numberof_weapons_dmg)+1
-		local rand3=GetRandom(numberof_weapons_dmg)+1
-		
-		random_weapon = GetRandom(numberof_weapons_dmg)+1
-		
+
+		local numberofweaponssupp=table.maxn(GLOBAL_WEAPONS_SUPPORT)
+		local numberofweaponsdmg=table.maxn(GLOBAL_WEAPONS_DAMAGE)
+
+		local rand1=GetRandom(numberofweaponssupp)+1
+		local rand2=GetRandom(numberofweaponsdmg)+1
+		local rand3=GetRandom(numberofweaponsdmg)+1
+
+		random_weapon = GetRandom(numberofweaponsdmg)+1
+
 		if(TotalRounds<0)
 		then
 			firstTurn=-TotalRounds
 		end
-		
-		while(weapons_dmg[random_weapon][4]>(TotalRounds+firstTurn) or (MapHasBorder() == true and (weapons_dmg[random_weapon][1]== amAirAttack or weapons_dmg[random_weapon][1] == amMineStrike or weapons_dmg[random_weapon][1] == amNapalm or weapons_dmg[random_weapon][1] == amDrillStrike or weapons_dmg[random_weapon][1] == amPiano)))
+
+		while(GLOBAL_WEAPONS_DAMAGE[random_weapon][4]>(TotalRounds+firstTurn) or (MapHasBorder() == true and (GLOBAL_WEAPONS_DAMAGE[random_weapon][1]== amAirAttack or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amMineStrike or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amNapalm or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amDrillStrike or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amPiano)))
 		do
-			if(random_weapon>=numberof_weapons_dmg)
+			if(random_weapon>=numberofweaponsdmg)
 			then
 				random_weapon=0
 			end
 			random_weapon = random_weapon+1
 		end
-		validate_weapon(hog, weapons_dmg[random_weapon][1],1)
-		rand_weaponset_power=weapons_dmg[random_weapon][6]
+		ValidateWeapon(hog, GLOBAL_WEAPONS_DAMAGE[random_weapon][1],1)
+		rand_weaponset_power=GLOBAL_WEAPONS_DAMAGE[random_weapon][6]
 		old_rand_weap = random_weapon
-		
+
 		random_weapon = rand1
-		while(weapons_supp[random_weapon][4]>(TotalRounds+firstTurn) or rand_weaponset_power+weapons_supp[random_weapon][6]>2)
+		while(GLOBAL_WEAPONS_SUPPORT[random_weapon][4]>(TotalRounds+firstTurn) or rand_weaponset_power+GLOBAL_WEAPONS_SUPPORT[random_weapon][6]>2)
 		do
-			if(random_weapon>=numberof_weapons_supp)
+			if(random_weapon>=numberofweaponssupp)
 			then
 				random_weapon=0
 			end
 			random_weapon = random_weapon+1
 		end
-		validate_weapon(hog, weapons_supp[random_weapon][1],1)
-		rand_weaponset_power=rand_weaponset_power+weapons_supp[random_weapon][6]
-		
+		ValidateWeapon(hog, GLOBAL_WEAPONS_SUPPORT[random_weapon][1],1)
+		rand_weaponset_power=rand_weaponset_power+GLOBAL_WEAPONS_SUPPORT[random_weapon][6]
+
 		--check again if  the power is enough
 		if(rand_weaponset_power <2)
 		then
 			random_weapon = rand2
-			while(weapons_dmg[random_weapon][4]>(TotalRounds+firstTurn) or old_rand_weap == random_weapon or weapons_dmg[random_weapon][6]>0 or (MapHasBorder() == true and (weapons_dmg[random_weapon][1]== amAirAttack or weapons_dmg[random_weapon][1] == amMineStrike or weapons_dmg[random_weapon][1] == amNapalm or weapons_dmg[random_weapon][1] == amDrillStrike or weapons_dmg[random_weapon][1] == amPiano)))
+			while(GLOBAL_WEAPONS_DAMAGE[random_weapon][4]>(TotalRounds+firstTurn) or old_rand_weap == random_weapon or GLOBAL_WEAPONS_DAMAGE[random_weapon][6]>0 or (MapHasBorder() == true and (GLOBAL_WEAPONS_DAMAGE[random_weapon][1]== amAirAttack or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amMineStrike or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amNapalm or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amDrillStrike or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amPiano)))
 			do
-				if(random_weapon>=numberof_weapons_dmg)
+				if(random_weapon>=numberofweaponsdmg)
 				then
 					random_weapon=0
 				end
 				random_weapon = random_weapon+1
 			end
-			validate_weapon(hog, weapons_dmg[random_weapon][1],1)
-			rand_weaponset_power=weapons_dmg[random_weapon][6]
+			ValidateWeapon(hog, GLOBAL_WEAPONS_DAMAGE[random_weapon][1],1)
+			rand_weaponset_power=GLOBAL_WEAPONS_DAMAGE[random_weapon][6]
 		end
-		
+
 		if(rand_weaponset_power <1)
 		then
 			random_weapon = rand3
-			while(weapons_dmg[random_weapon][4]>(TotalRounds+firstTurn) or old_rand_weap == random_weapon or weapons_dmg[random_weapon][6]>0 or (MapHasBorder() == true and (weapons_dmg[random_weapon][1]== amAirAttack or weapons_dmg[random_weapon][1] == amMineStrike or weapons_dmg[random_weapon][1] == amNapalm or weapons_dmg[random_weapon][1] == amDrillStrike or weapons_dmg[random_weapon][1] == amPiano)))
+			while(GLOBAL_WEAPONS_DAMAGE[random_weapon][4]>(TotalRounds+firstTurn) or old_rand_weap == random_weapon or GLOBAL_WEAPONS_DAMAGE[random_weapon][6]>0 or (MapHasBorder() == true and (GLOBAL_WEAPONS_DAMAGE[random_weapon][1]== amAirAttack or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amMineStrike or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amNapalm or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amDrillStrike or GLOBAL_WEAPONS_DAMAGE[random_weapon][1] == amPiano)))
 			do
-				if(random_weapon>=numberof_weapons_dmg)
+				if(random_weapon>=numberofweaponsdmg)
 				then
 					random_weapon=0
 				end
 				random_weapon = random_weapon+1
 			end
-			validate_weapon(hog, weapons_dmg[random_weapon][1],1)
+			ValidateWeapon(hog, GLOBAL_WEAPONS_DAMAGE[random_weapon][1],1)
 		end
-		
+
 		AddVisualGear(GetX(hog), GetY(hog)-30, vgtEvilTrace,0, false)
 		PlaySound(sndReinforce,hog)
 end
 
 
 --this will take that hogs settings for the weapons and add them
-function setweapons()
+function SetContinentWeapons()
 
-	cleanweps(CurrentHedgehog)
-	load_weaponset(CurrentHedgehog,continent[GetHogTeamName(CurrentHedgehog)])
-	
+	CleanWeapons(CurrentHedgehog)
+	LoadWeaponset(CurrentHedgehog,GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)])
+
 	visualstuff=AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog)-5, vgtDust,0, false)
 	v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 = GetVisualGearValues(visualstuff)
 	SetVisualGearValues(visualstuff, v1, v2, v3, v4, v5, v6, v7, 2, v9, GetClanColor(GetHogClan(CurrentHedgehog)))
-	
-	show_continent_info(continent[GetHogTeamName(CurrentHedgehog)],0,false)
-end
 
---show health tag (will mostly be used when a hog is damaged)
-function show_damage_tag(hog,damage)
-	healthtag=AddVisualGear(GetX(hog), GetY(hog), vgtHealthTag, damage, false)
-	v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 = GetVisualGearValues(healthtag)
-	SetVisualGearValues(healthtag, v1, v2, v3, v4, v5, v6, v7, v8, v9, GetClanColor(GetHogClan(hog)))
-end
-
---will use int_sqrt
-function fire_gear(hedgehog,geartype,vx,vy,timer)
-	local hypo=norm(vx,vy)
-	return AddGear(div((GetGearRadius(hedgehog)*2*vx),hypo)+GetX(hedgehog), div((GetGearRadius(hedgehog)*2*vy),hypo)+GetY(hedgehog), geartype, 0, vx, vy, timer)
+	ShowContinentInfo(GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)],3000,false)
 end
 
 --==========================run throw all hog/gear weapons ==========================
---will check if the mine is nicely placed 
-function weapon_aust_check(hog)
+--will check if the mine is nicely placed
+function AustraliaSpecialCheckHogs(hog)
 	if(GetGearType(hog) == gtHedgehog)
 	then
-		if(gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 50, false)==true and hog ~= CurrentHedgehog)
+		if(gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 40, false)==true and hog ~= CurrentHedgehog)
 		then
-			temp_val=1
+			GLOBAL_TEMP_VALUE=1
 		end
 	end
 end
 
 --african special on sedunction
-function weapon_duststorm(hog)
+function AfricaSpecialSeduction(hog)
 	if(GetGearType(hog) == gtHedgehog)
 	then
-		local dmg=15
+		local dmg=div(15*GLOBAL_EXTRA_DAMAGE_IS_ON,100)
 		if(gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 250, false)==true and GetHogClan(hog) ~= GetHogClan(CurrentHedgehog))
 		then
 			if(GetHealth(hog) > dmg)
 			then
-				temp_val=temp_val+div(dmg*VampOn,100)
+				GLOBAL_TEMP_VALUE=GLOBAL_TEMP_VALUE+div(dmg*GLOBAL_VAMPIRIC_IS_ON,100)
 				SetHealth(hog, GetHealth(hog)-dmg)
 			else
-				temp_val=temp_val+div(GetHealth(hog)*VampOn,100)
+				GLOBAL_TEMP_VALUE=GLOBAL_TEMP_VALUE+div(GetHealth(hog)*GLOBAL_VAMPIRIC_IS_ON,100)
 				SetHealth(hog, 0)
 			end
-			show_damage_tag(hog,dmg)
+			ShowDamageTag(hog,dmg)
 		end
 	end
 end
 
---kerguelen special on structure 
-function weapon_scream_pen(hog)
+--kerguelen special on structure
+function KerguelenSpecialRed(hog)
 	if(GetGearType(hog) == gtHedgehog)
 	then
 		if(gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 120, false)==true and GetHogClan(hog) ~= GetHogClan(CurrentHedgehog))
 		then
-			local dmg=15+GetHealth(CurrentHedgehog)*0.15
-		
+			local dmg=div((15+div(GetHealth(CurrentHedgehog)*10,100))*GLOBAL_EXTRA_DAMAGE_IS_ON,100)
+
 			if(GetHealth(hog)>dmg)
 			then
-				temp_val=temp_val+div(dmg*2,3)+div(dmg*VampOn*2,100*3)
+				GLOBAL_TEMP_VALUE=GLOBAL_TEMP_VALUE+div(dmg*2,3)+div(dmg*GLOBAL_VAMPIRIC_IS_ON*2,100*3)
 				SetHealth(hog, GetHealth(hog)-dmg)
 			else
-				temp_val=temp_val+(GetHealth(hog)*0.75)+(GetHealth(CurrentHedgehog)*0.1)+div((GetHealth(hog)+(GetHealth(CurrentHedgehog)*0.15))*VampOn,100)
+				GLOBAL_TEMP_VALUE=GLOBAL_TEMP_VALUE+(div(GetHealth(hog)*75,100))+(div(GetHealth(CurrentHedgehog)*10,100))+div((GetHealth(hog)+div(GetHealth(CurrentHedgehog)*10,100))*GLOBAL_VAMPIRIC_IS_ON,100)
 				SetHealth(hog, 0)
 			end
-			show_damage_tag(hog,dmg)
+			ShowDamageTag(hog,dmg)
 			AddVisualGear(GetX(hog), GetY(hog), vgtExplosion, 0, false)
 			AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtSmokeWhite, 0, false)
 		end
 	end
 end
 
---kerguelen special swap hog
-function weapon_swap_kerg(hog)
+--will count the hogs, used to get one random hog.
+function KerguelenSpecialYellowCountHogs(hog)
 	if(GetGearType(hog) == gtHedgehog)
 	then
-		if(kergulenSpecial ~= -1 and GetHogClan(hog) ~= GetHogClan(CurrentHedgehog) and gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 450, false))
+		if(GetHogClan(hog) ~= GetHogClan(CurrentHedgehog) and gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 420, false))
 		then
-			local thisX=GetX(CurrentHedgehog)
-			local thisY=GetY(CurrentHedgehog)
-			SetGearPosition(CurrentHedgehog, GetX(hog), GetY(hog))
-			SetGearPosition(hog, thisX, thisY)
-			kergulenSpecial=-1
+			GLOBAL_TEMP_VALUE=GLOBAL_TEMP_VALUE+1
+		end
+	end
+end
+--kerguelen special swap hog
+function KerguelenSpecialYellowSwap(hog)
+	if(GetGearType(hog) == gtHedgehog)
+	then
+		if(GLOBAL_KERGUELEN_SPECIAL ~= -1 and GetHogClan(hog) ~= GetHogClan(CurrentHedgehog) and gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 420, false))
+		then
+			if(GLOBAL_TEMP_VALUE==0)
+			then
+				local thisX=GetX(CurrentHedgehog)
+				local thisY=GetY(CurrentHedgehog)
+				SetGearPosition(CurrentHedgehog, GetX(hog), GetY(hog))
+				SetGearPosition(hog, thisX, thisY)
+				GLOBAL_KERGUELEN_SPECIAL=-1
+			else
+				GLOBAL_TEMP_VALUE=GLOBAL_TEMP_VALUE-1
+			end
 		end
 	end
 end
 
 --kerguelen special will apply sabotage
-function weapon_sabotage(hog)
+function KerguelenSpecialGreen(hog)
 	if(GetGearType(hog) == gtHedgehog)
 	then
 		if(CurrentHedgehog~=hog and gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 80, false))
 		then
-			temp_val=1
-			disable_moving[hog]=true
+			GLOBAL_TEMP_VALUE=1
+			GLOBAL_SABOTAGE_HOGS[hog]=1
 			AddGear(GetX(hog), GetY(hog), gtCluster, 0, 0, 0, 1)
 			PlaySound(sndNooo,hog)
 		end
 	end
 end
 
---south american special (used fire gear)
-function weapon_anno_south(hog)
-	local power_radius_outer=230
-	local power_radius_inner=45
-	local power_sa=500000
-	local hypo=0
-	if(gearIsInCircle(hog,GetX(temp_val), GetY(temp_val), power_radius_outer, false) and gearIsInCircle(hog,GetX(temp_val), GetY(temp_val), power_radius_inner, false)==false)
+--first part on kerguelen special (lonely cries)
+function KerguelenSpecialBlueCheck(hog)
+	if(GetGearType(hog) == gtHedgehog and hog ~= CurrentHedgehog and gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 550, false))
 	then
-		if(hog == CurrentHedgehog)
-		then
-			SetState(CurrentHedgehog, gstMoving)
-		end
-		SetGearPosition(hog, GetX(hog),GetY(hog)-3)
-		hypo=norm(math.abs(GetX(hog)-GetX(temp_val)),math.abs(GetY(hog)-GetY(temp_val)))
-		SetGearVelocity(hog, div((power_radius_outer-hypo)*power_sa*positive(GetX(hog)-GetX(temp_val)),power_radius_outer), div((power_radius_outer-hypo)*power_sa*positive(GetY(hog)-GetY(temp_val)),power_radius_outer))
-	end
-end
-
---first part on kerguelen special (lonely cries)
-function weapon_cries_a(hog)
-	if(GetGearType(hog) == gtHedgehog and hog ~= CurrentHedgehog and gearIsInCircle(hog,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 500, false))
-	then
-		kergulenSpecial=-1
+		GLOBAL_KERGUELEN_SPECIAL=-1
 	end
 end
 
 --second part on kerguelen special (lonely cries)
-function weapon_cries_b(hog)
+function KerguelenSpecialBlueActivate(hog)
 	if(GetGearType(hog) == gtHedgehog)
 	then
-		local dmg=7
+		local dmg=div(6*GLOBAL_EXTRA_DAMAGE_IS_ON,100)
 		if(GetHogClan(hog) ~= GetHogClan(CurrentHedgehog))
 		then
 			if(GetHealth(hog) > dmg)
 			then
-				temp_val=temp_val+div(dmg*VampOn,100)
+				GLOBAL_TEMP_VALUE=GLOBAL_TEMP_VALUE+div(dmg*GLOBAL_VAMPIRIC_IS_ON,100)
 				SetHealth(hog, GetHealth(hog)-dmg)
 			else
-				temp_val=temp_val+div(GetHealth(hog)*VampOn,100)
+				GLOBAL_TEMP_VALUE=GLOBAL_TEMP_VALUE+div(GetHealth(hog)*GLOBAL_VAMPIRIC_IS_ON,100)
 				SetHealth(hog, 0)
 			end
-			show_damage_tag(hog,dmg)
+			ShowDamageTag(hog,dmg)
+
 			AddVisualGear(GetX(hog), GetY(hog)-30, vgtEvilTrace, 0, false)
 		end
 	end
 end
 
---north american special on sniper
-function weapon_lipstick(hog)
+--australia
+function AustraliaSpecialEggHit(hog)
 	if(GetGearType(hog) == gtHedgehog)
 	then
-		if(gearIsInCircle(temp_val,GetX(hog), GetY(hog), 20, false))
+		if(gearIsInCircle(hog,GetX(GLOBAL_TEMP_VALUE), GetY(GLOBAL_TEMP_VALUE), 18, false))
+		then
+			GLOBAL_SABOTAGE_HOGS[hog]=1
+			PlaySound(sndNooo,hog)
+			SetEffect(hog, hePoisoned, false)
+		end
+	end
+end
+
+--south american special (used fire gear)
+function SouthAmericaSpecialCheeseExplosion(hog)
+	if(GetGearType(hog) == gtHedgehog or GetGearType(hog) == gtMine or GetGearType(hog) == gtExplosives)
+	then
+		local power_radius_outer=230
+		local power_radius_inner=45
+		local power_sa=500000
+		local hypo=0
+		if(gearIsInCircle(hog,GetX(GLOBAL_TEMP_VALUE), GetY(GLOBAL_TEMP_VALUE), power_radius_outer, false) and gearIsInCircle(hog,GetX(GLOBAL_TEMP_VALUE), GetY(GLOBAL_TEMP_VALUE), power_radius_inner, false)==false)
+		then
+			if(hog == CurrentHedgehog)
+			then
+				SetState(CurrentHedgehog, gstMoving)
+			end
+			SetGearPosition(hog, GetX(hog),GetY(hog)-3)
+			hypo=Norm(math.abs(GetX(hog)-GetX(GLOBAL_TEMP_VALUE)),math.abs(GetY(hog)-GetY(GLOBAL_TEMP_VALUE)))
+			SetGearVelocity(hog, div((power_radius_outer-hypo)*power_sa*GetIfNegative(GetX(hog)-GetX(GLOBAL_TEMP_VALUE)),power_radius_outer), div((power_radius_outer-hypo)*power_sa*GetIfNegative(GetY(hog)-GetY(GLOBAL_TEMP_VALUE)),power_radius_outer))
+		end
+	end
+end
+
+--north american special on sniper
+function NorthAmericaSpecialSniper(hog)
+	if(GetGearType(hog) == gtHedgehog)
+	then
+		if(gearIsInCircle(GLOBAL_TEMP_VALUE,GetX(hog), GetY(hog), 20, false))
 		then
 			SetEffect(hog, hePoisoned, 1)
 			PlaySound(sndBump)
@@ -632,120 +702,179 @@
 end
 
 --european special on molotov (used fire gear)
-function weapon_health(hog)
+function EuropeSpecialMolotovHit(hog)
 	if(GetGearType(hog) == gtHedgehog)
 	then
-		if(gearIsInCircle(temp_val,GetX(hog), GetY(hog), 100, false))
+		if(gearIsInCircle(GLOBAL_TEMP_VALUE,GetX(hog), GetY(hog), 100, false))
 		then
-			SetHealth(hog, GetHealth(hog)+25+(div(25*VampOn,100)))
+			SetHealth(hog, GetHealth(hog)+25+(div(25*GLOBAL_VAMPIRIC_IS_ON,100)))
 			SetEffect(hog, hePoisoned, false)
+			GLOBAL_SABOTAGE_HOGS[hog]=0
 		end
 	end
 end
 
 --for sundaland
-function find_other_hog_in_team(hog)
+function SundalandFindOtherHogInTeam(hog)
 	if(GetGearType(hog) == gtHedgehog)
 	then
-		if(GetHogTeamName(turnhog)==GetHogTeamName(hog))
+		if(GetHogTeamName(GLOBAL_SUNDALAND_END_HOG)==GetHogTeamName(hog))
 		then
-			turnhog=hog
+			GLOBAL_SUNDALAND_END_HOG=hog
 		end
 	end
 end
 --============================================================================
 
+--for custom made continent, follows the same standards as the globalism one. You can make your continent with <Name>~<Information>~<Weapons>. Take the weapons generated from globalism, if you want a GUI :P
+--weapons=<ammo><types>, ammo = ascii[116(1 ammo) to 125(inf ammo)] types = ascii[36(Grenade), 37(Clusterbomb) to 90(knife)] see https://code.google.com/p/hedgewars/wiki/AmmoTypes
+--ex "Own continent~this continent rocks!~tZ}$" will get 1 knife and inf grenades
+function onParameters()
+
+	if(ScriptParam~=nil)
+	then
+		local continentinfo={}
+		local numb=0
+		local wepcodes=0
+		local where=0
+
+		local x=0
+		local i=1
+
+		--default icon
+		continentinfo[4]=amLowGravity
+
+		for c in ScriptParam:gmatch"."
+		do
+			if(where==0)
+			then
+				if(string.byte(c)==126)
+				then
+					continentinfo[1]=string.sub(ScriptParam,0,numb)
+					wepcodes=numb
+					where=1
+				end
+			elseif(where==1)
+			then
+				if(string.byte(c)==126)
+				then
+					continentinfo[2]=string.sub(ScriptParam,wepcodes+2,numb)
+					continentinfo[5]={}
+					wepcodes=numb
+					where=2
+				end
+			elseif(where==2)
+			then
+				x=string.byte(c)-35
+				if(x>90)
+				then
+					break
+				elseif(x>80)
+				then
+					if(x-80<10)
+					then
+						i=x-80
+					else
+						i=100
+					end
+				else
+					table.insert(continentinfo[5],{x,i})
+				end
+			end
+			numb=numb+1
+		end
+
+		if(continentinfo[5]~=nil and continentinfo[5][1]~=nil)
+		then
+			continentinfo[3]="- "..continentinfo[1]..loc(" was extracted from the scheme|- This continent will be able to use the specials from the other continents!")
+
+			table.insert(GLOBAL_CONTINENT_INFORMATION, continentinfo)
+		end
+	end
+end
+
 --set each weapons settings
 function onAmmoStoreInit()
 
 	SetAmmo(amSkip, 9, 0, 0, 0)
-	
-	for v,w in pairs(weapons_dmg) 
+
+	for v,w in pairs(GLOBAL_WEAPONS_DAMAGE)
 	do
 		SetAmmo(w[1], w[2], w[3], w[4], w[5])
 	end
-	
-	for v,w in pairs(weapons_supp) 
+
+	for v,w in pairs(GLOBAL_WEAPONS_SUPPORT)
 	do
 		SetAmmo(w[1], w[2], w[3], w[4], w[5])
 	end
 end
 
+--on game start
 function onGameStart()
-	--trackTeams()
-
-	ShowMission(loc("Continental supplies"),loc("Let a Continent provide your weapons!"),
-	generalinfo, -amLowGravity, 0)
+	ShowMission(loc("Continental supplies"),loc("Let a continent provide your weapons!"),
+	GLOBAL_GENERAL_INFORMATION, -amLowGravity, 0)
 end
 
 --what happen when a turn starts
 function onNewTurn()
-	
+
 	--will refresh the info on each tab weapon
-	australianSpecial=true
-	austmine=nil
-	africanSpecial=0
-	samericanSpecial=false
-	africaspecial2=0
-	kergulenSpecial=1
-	namericanSpecial=1
-	asianflame=0
-	shotgun_s=false
-	sniper_s_in_use=false
-	europe_s=0
-	VampOn=0
-	
-	temp_val=0
-	
-	turnhog=CurrentHedgehog
-	
-	--for sabotage
-	if(disable_moving[CurrentHedgehog]==true)
-	then
-		disallowattack=-100
-		disableRand=GetRandom(3)+5
-	end
-	
+	GLOBAL_AUSTRALIAN_SPECIAL=0
+	GLOBAL_AFRICAN_SPECIAL_SEDUCTION=0
+	GLOBAL_SOUTH_AMERICAN_SPECIAL=false
+	GLOBAL_AFRICAN_SPECIAL_STICKY=0
+	GLOBAL_KERGUELEN_SPECIAL=1
+	GLOBAL_NORTH_AMERICAN_SPECIAL_SNIPER=1
+	GLOBAL_NORTH_AMERICAN_SPECIAL_SHOTGUN=false
+	GLOBAL_NORTH_AMERICAN_SPECIAL_SNIPER_IS_ON=false
+	GLOBAL_EUROPE_SPECIAL=0
+	GLOBAL_VAMPIRIC_IS_ON=0
+	GLOBAL_EXTRA_DAMAGE_IS_ON=100
+
+	GLOBAL_TEMP_VALUE=0
+
+	GLOBAL_SUNDALAND_END_HOG=CurrentHedgehog
+
 	--when all hogs are "placed"
 	if(GetCurAmmoType()~=amTeleport)
 	then
 		--will run once when the game really starts (after placing hogs and so on
-		if(teams_ok[GetHogTeamName(CurrentHedgehog)] == nil)
+		if(GLOBAL_INIT_TEAMS[GetHogTeamName(CurrentHedgehog)] == nil)
 		then
 			AddCaption("["..loc("Select continent!").."]")
-			load_continent_selection(CurrentHedgehog)
-			continent[GetHogTeamName(CurrentHedgehog)]=0
-			swapweps=true
-			teams_ok[GetHogTeamName(CurrentHedgehog)] = 2
-			
-			if(disable_moving[CurrentHedgehog]==true)
+			InitWeaponsMenu(CurrentHedgehog)
+			GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]=0
+			GLOBAL_SELECT_CONTINENT_CHECK=true
+			GLOBAL_INIT_TEAMS[GetHogTeamName(CurrentHedgehog)] = 2
+
+			if(GLOBAL_SABOTAGE_HOGS[CurrentHedgehog]~=nil and GLOBAL_SABOTAGE_HOGS[CurrentHedgehog]==1)
 			then
-				disallowattack=-1000
+				GLOBAL_SABOTAGE_COUNTER=-750
 			end
 		else
 			--if its not the initialization turn
-			swapweps=false
-			if(continent[GetHogTeamName(CurrentHedgehog)]==0)
+			GLOBAL_SELECT_CONTINENT_CHECK=false
+			if(GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]==0)
 			then
-				continent[GetHogTeamName(CurrentHedgehog)]=GetRandom(table.maxn(weaponsets))+1
-				setweapons()
+				GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]=GetRandom(table.maxn(GLOBAL_CONTINENT_INFORMATION))+1
+				SetContinentWeapons()
 			end
-			show_continent_info(continent[GetHogTeamName(CurrentHedgehog)],-1,true)
-			
+			ShowContinentInfo(GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)],-1,true)
+
 			--give zeelandia-teams new weapons so they can plan for the next turn
-			runOnGears(get_random_weapon)
-			
-			--some specials for some continents (temp_val is from get random weapons)
-			if(continent[GetHogTeamName(CurrentHedgehog)]==9)
+			runOnGears(ZealandiaGetWeapons)
+
+			--some specials for some continents (GLOBAL_TEMP_VALUE is from get random weapons)
+			if(GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]==9)
 			then
 				setTeamValue(GetHogTeamName(CurrentHedgehog), "rand-done-turn", nil)
-			elseif(continent[GetHogTeamName(CurrentHedgehog)]==7)
+			elseif(GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]==7)
 			then
 				if(getTeamValue(GetHogTeamName(CurrentHedgehog), "Antarctica2-turntick")==nil)
 				then
 					setTeamValue(GetHogTeamName(CurrentHedgehog), "Antarctica2-turntick", 1)
 				end
-				
+
 				if(getTeamValue(GetHogTeamName(CurrentHedgehog), "Antarctica2-turntick")>=4)
 				then
 					AddAmmo(CurrentHedgehog,amPortalGun)
@@ -757,33 +886,26 @@
 					setTeamValue(GetHogTeamName(CurrentHedgehog), "Antarctica2-turntick", 0)
 				end
 				setTeamValue(GetHogTeamName(CurrentHedgehog), "Antarctica2-turntick", getTeamValue(GetHogTeamName(CurrentHedgehog), "Antarctica2-turntick")+1)
-				
-			elseif(continent[GetHogTeamName(CurrentHedgehog)]==5)
+
+			elseif(GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]==5)
 			then
 				if(getTeamValue(GetHogTeamName(CurrentHedgehog), "Asia-turntick")==nil)
 				then
 					setTeamValue(GetHogTeamName(CurrentHedgehog), "Asia-turntick", 1)
 				end
-				
+
 				if(getTeamValue(GetHogTeamName(CurrentHedgehog), "Asia-turntick")>=2)
 				then
 					AddAmmo(CurrentHedgehog,amParachute)
 					setTeamValue(GetHogTeamName(CurrentHedgehog), "Asia-turntick", 0)
 				end
 				setTeamValue(GetHogTeamName(CurrentHedgehog), "Asia-turntick", getTeamValue(GetHogTeamName(CurrentHedgehog), "Asia-turntick")+1)
-			elseif(continent[GetHogTeamName(CurrentHedgehog)]==1)
+			elseif(GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]==1)
 			then
-				if(getTeamValue(GetHogTeamName(CurrentHedgehog), "NA-turntick")==nil)
-				then
-					setTeamValue(GetHogTeamName(CurrentHedgehog), "NA-turntick", 1)
-				end
-				
-				if(getTeamValue(GetHogTeamName(CurrentHedgehog), "NA-turntick")>=5)
-				then
-					validate_weapon(CurrentHedgehog,amAirAttack,1)
-					setTeamValue(GetHogTeamName(CurrentHedgehog), "NA-turntick", 0)
-				end
-				setTeamValue(GetHogTeamName(CurrentHedgehog), "NA-turntick", getTeamValue(GetHogTeamName(CurrentHedgehog), "NA-turntick")+1)
+				AddAmmo(CurrentHedgehog,amSwitch,GetAmmoCount(CurrentHedgehog, amSwitch)+1)
+
+				ParseCommand("setweap " .. string.char(amSwitch))
+				GLOBAL_TEMP_VALUE=87
 			end
 		end
 	end
@@ -791,467 +913,575 @@
 
 --what happens when you press "tab" (common button)
 function onSwitch()
-	
-	--place mine (australia)
-	if(GetCurAmmoType() == amBaseballBat and australianSpecial==true)
+
+	if(GLOBAL_SWITCH_HOG_IS_ON==false)
 	then
-		temp_val=0
-		runOnGears(weapon_aust_check)
-		
-		if(temp_val==0)
+		--place mine (australia)
+		if(GetCurAmmoType() == amBaseballBat)
 		then
-			austmine=AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog)+5, gtMine, 0, 0, 0, 0)
-			SetHealth(austmine, 100)
-			SetTimer(austmine, 1000)
-			australianSpecial=false
-			swapweps=false
-		else
-			PlaySound(sndDenied)
-		end
+			if(GLOBAL_AUSTRALIAN_SPECIAL==0)
+			then
+				GLOBAL_AUSTRALIAN_SPECIAL = 1
+				AddCaption(GLOBAL_WEAPON_TEXTS[5])
+			elseif(GLOBAL_AUSTRALIAN_SPECIAL==1)
+			then
+				GLOBAL_AUSTRALIAN_SPECIAL = 2
+				AddCaption(GLOBAL_WEAPON_TEXTS[2])
+			else
+				GLOBAL_AUSTRALIAN_SPECIAL = 0
+				AddCaption(loc("NORMAL"))
+			end
 
-	--Asian special
-	elseif(inpara==1)
-	then
-		asiabomb=AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog)+3, gtSnowball, 0, 0, 0, 0)
-		SetGearMessage(asiabomb, 1)
+		--Asian special
+		elseif(GLOBAL_PARACHUTE_IS_ON==1)
+		then
+			asiabomb=AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog)+3, gtSnowball, 0, 0, 0, 0)
+			SetGearMessage(asiabomb, 1)
 
-		inpara=2
-		swapweps=false
+			GLOBAL_PARACHUTE_IS_ON=2
+			GLOBAL_SELECT_CONTINENT_CHECK=false
 
-	--africa
-	elseif(GetCurAmmoType() == amSeduction)
-	then
-		if(africanSpecial==0)
+		--africa
+		elseif(GetCurAmmoType() == amSeduction)
 		then
-			africanSpecial = 1
-			AddCaption(weapontexts[4])
-		else
-			africanSpecial = 0
-			AddCaption(loc("NORMAL"))
-		end
+			if(GLOBAL_AFRICAN_SPECIAL_SEDUCTION==0)
+			then
+				GLOBAL_AFRICAN_SPECIAL_SEDUCTION = 1
+				AddCaption(GLOBAL_WEAPON_TEXTS[4])
+			else
+				GLOBAL_AFRICAN_SPECIAL_SEDUCTION = 0
+				AddCaption(loc("NORMAL"))
+			end
 
-	--south america
-	elseif(GetCurAmmoType() == amGasBomb)
-	then
-		if(samericanSpecial==false)
+		--south america
+		elseif(GetCurAmmoType() == amGasBomb)
 		then
-			samericanSpecial = true
-			AddCaption(weapontexts[3])
-		else
-			samericanSpecial = false
-			AddCaption(loc("NORMAL"))
-		end
+			if(GLOBAL_SOUTH_AMERICAN_SPECIAL==false)
+			then
+				GLOBAL_SOUTH_AMERICAN_SPECIAL = true
+				AddCaption(GLOBAL_WEAPON_TEXTS[3])
+			else
+				GLOBAL_SOUTH_AMERICAN_SPECIAL = false
+				AddCaption(loc("NORMAL"))
+			end
 
-	--africa
-	elseif(GetCurAmmoType() == amSMine)
-	then
-		if(africaspecial2==0)
+		--africa
+		elseif(GetCurAmmoType() == amSMine)
 		then
-			africaspecial2 = 1
-			AddCaption(weapontexts[11])
-		elseif(africaspecial2 == 1)
-		then
-			africaspecial2 = 2
-			AddCaption(weapontexts[12])
-		elseif(africaspecial2 == 2)
-		then
-			africaspecial2 = 0
-			AddCaption(loc("NORMAL"))
-		end
+			if(GLOBAL_AFRICAN_SPECIAL_STICKY==0)
+			then
+				GLOBAL_AFRICAN_SPECIAL_STICKY = 1
+				AddCaption(GLOBAL_WEAPON_TEXTS[11])
+			elseif(GLOBAL_AFRICAN_SPECIAL_STICKY == 1)
+			then
+				GLOBAL_AFRICAN_SPECIAL_STICKY = 2
+				AddCaption(GLOBAL_WEAPON_TEXTS[12])
+			elseif(GLOBAL_AFRICAN_SPECIAL_STICKY == 2)
+			then
+				GLOBAL_AFRICAN_SPECIAL_STICKY = 0
+				AddCaption(loc("NORMAL"))
+			end
 
-	--north america (sniper)
-	elseif(GetCurAmmoType() == amSniperRifle and sniper_s_in_use==false)
-	then
-		if(namericanSpecial==2)
-		then
-			namericanSpecial = 1
-			AddCaption(loc("NORMAL"))
-		elseif(namericanSpecial==1)
+		--north america (sniper)
+		elseif(GetCurAmmoType() == amSniperRifle and GLOBAL_NORTH_AMERICAN_SPECIAL_SNIPER_IS_ON==false)
 		then
-			namericanSpecial = 2
-			AddCaption("#"..weapontexts[1])
-		end
+			if(GLOBAL_NORTH_AMERICAN_SPECIAL_SNIPER==2)
+			then
+				GLOBAL_NORTH_AMERICAN_SPECIAL_SNIPER = 1
+				AddCaption(loc("NORMAL"))
+			elseif(GLOBAL_NORTH_AMERICAN_SPECIAL_SNIPER==1)
+			then
+				GLOBAL_NORTH_AMERICAN_SPECIAL_SNIPER = 2
+				AddCaption(GLOBAL_WEAPON_TEXTS[1])
+			end
 
-	--north america (shotgun)
-	elseif(GetCurAmmoType() == amShotgun and shotgun_s~=nil)
-	then
-		if(shotgun_s==false)
+		--north america (shotgun)
+		elseif(GetCurAmmoType() == amShotgun and GLOBAL_NORTH_AMERICAN_SPECIAL_SHOTGUN~=nil)
+		then
+			if(GLOBAL_NORTH_AMERICAN_SPECIAL_SHOTGUN==false)
+			then
+				GLOBAL_NORTH_AMERICAN_SPECIAL_SHOTGUN = true
+				AddCaption(GLOBAL_WEAPON_TEXTS[13])
+			else
+				GLOBAL_NORTH_AMERICAN_SPECIAL_SHOTGUN = false
+				AddCaption(loc("NORMAL"))
+			end
+
+		--europe
+		elseif(GetCurAmmoType() == amMolotov)
 		then
-			shotgun_s = true
-			AddCaption(weapontexts[13])
-		else
-			shotgun_s = false
-			AddCaption(loc("NORMAL"))
-		end
+			if(GLOBAL_EUROPE_SPECIAL==0)
+			then
+				GLOBAL_EUROPE_SPECIAL = 1
+				AddCaption(GLOBAL_WEAPON_TEXTS[14])
+			else
+				GLOBAL_EUROPE_SPECIAL = 0
+				AddCaption(loc("NORMAL"))
+			end
 
-	--europe
-	elseif(GetCurAmmoType() == amMolotov)
-	then
-		if(europe_s==0)
+		--kerguelen
+		elseif(GetCurAmmoType() == amHammer)
 		then
-			europe_s = 1
-			AddCaption(weapontexts[14])
-		else
-			europe_s = 0
-			AddCaption(loc("NORMAL"))
+			if(GLOBAL_KERGUELEN_SPECIAL==6)
+			then
+				GLOBAL_KERGUELEN_SPECIAL = 1
+				AddCaption("Normal")
+			elseif(GLOBAL_KERGUELEN_SPECIAL==1)
+			then
+				GLOBAL_KERGUELEN_SPECIAL = 2
+				AddCaption("#"..GLOBAL_WEAPON_TEXTS[7])
+			elseif(GLOBAL_KERGUELEN_SPECIAL==2 and TotalRounds>=1)
+			then
+				GLOBAL_KERGUELEN_SPECIAL = 3
+				AddCaption("##"..GLOBAL_WEAPON_TEXTS[8])
+			elseif(GLOBAL_KERGUELEN_SPECIAL==3 or (GLOBAL_KERGUELEN_SPECIAL==2 and TotalRounds<1))
+			then
+				GLOBAL_KERGUELEN_SPECIAL = 5
+				AddCaption("###"..GLOBAL_WEAPON_TEXTS[10])
+			elseif(GLOBAL_KERGUELEN_SPECIAL==5)
+			then
+				GLOBAL_KERGUELEN_SPECIAL = 6
+				AddCaption("####"..GLOBAL_WEAPON_TEXTS[15])
+			end
+		--for selecting weaponset, this is mostly for old players.
+		elseif(GetHogLevel(CurrentHedgehog)==0 and GLOBAL_SELECT_CONTINENT_CHECK==true and (GetCurAmmoType() == amSkip or GetCurAmmoType() == amNothing))
+		then
+			GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]=GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]+1
+
+			if(GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]> table.maxn(GLOBAL_CONTINENT_INFORMATION))
+			then
+				GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]=1
+			end
+			SetContinentWeapons()
 		end
-
-	--swap forward in the weaponmenu (1.0 style)
-	elseif(swapweps==true and (GetCurAmmoType() == amSkip or GetCurAmmoType() == amNothing))
-	then
-		continent[GetHogTeamName(CurrentHedgehog)]=continent[GetHogTeamName(CurrentHedgehog)]+1
-		
-		if(continent[GetHogTeamName(CurrentHedgehog)]> table.maxn(weaponsets))
-		then
-			continent[GetHogTeamName(CurrentHedgehog)]=1
-		end
-		setweapons()
-
-	--kerguelen
-	elseif(GetCurAmmoType() == amHammer)
+	--if switching out from sabotage.
+	elseif(GLOBAL_SABOTAGE_HOGS[CurrentHedgehog]~=nil and GLOBAL_SABOTAGE_HOGS[CurrentHedgehog]==2)
 	then
-		if(kergulenSpecial==6)
-		then
-			kergulenSpecial = 1
-			AddCaption("Normal")
-		elseif(kergulenSpecial==1)
-		then
-			kergulenSpecial = 2
-			AddCaption("#"..weapontexts[7])
-		elseif(kergulenSpecial==2 and TotalRounds>=1)
-		then
-			kergulenSpecial = 3
-			AddCaption("##"..weapontexts[8])
-		elseif(kergulenSpecial==3 or (kergulenSpecial==2 and TotalRounds<1))
-		then
-			kergulenSpecial = 5
-			AddCaption("###"..weapontexts[10])
-		elseif(kergulenSpecial==5)
-		then
-			kergulenSpecial = 6
-			AddCaption("####"..weapontexts[15])
-		end
+		GLOBAL_SABOTAGE_HOGS[CurrentHedgehog]=1
 	end
 end
 
-function onPrecise()
-	--swap backwards in the weaponmenu (1.0 style)
-	if(swapweps==true and (GetCurAmmoType() == amSkip or GetCurAmmoType() == amNothing))
+function onUp()
+	--swap forward in the weaponmenu (1.0 style)
+	if(GetHogLevel(CurrentHedgehog)==0 and GLOBAL_SELECT_CONTINENT_CHECK==true and (GetCurAmmoType() == amSkip or GetCurAmmoType() == amNothing))
 	then
-		continent[GetHogTeamName(CurrentHedgehog)]=continent[GetHogTeamName(CurrentHedgehog)]-1
-		
-		if(continent[GetHogTeamName(CurrentHedgehog)]<=0)
+		GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]=GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]+1
+
+		if(GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]> table.maxn(GLOBAL_CONTINENT_INFORMATION))
 		then
-			continent[GetHogTeamName(CurrentHedgehog)]=table.maxn(weaponsets)
+			GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]=1
 		end
-		setweapons()
+		SetContinentWeapons()
+	end
+end
+
+function onDown()
+	--swap backwards in the weaponmenu (1.0 style)
+	if(GetHogLevel(CurrentHedgehog)==0 and GLOBAL_SELECT_CONTINENT_CHECK==true and (GetCurAmmoType() == amSkip or GetCurAmmoType() == amNothing))
+	then
+		GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]=GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]-1
+
+		if(GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]<=0)
+		then
+			GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]=table.maxn(GLOBAL_CONTINENT_INFORMATION)
+		end
+		SetContinentWeapons()
 	end
 end
 
 function onGameTick20()
 	--if you picked a weaponset from the weaponmenu (icon)
-	if(continent[GetHogTeamName(CurrentHedgehog)]==0)
+	if(GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]==0)
 	then
 		if(GetCurAmmoType()==amSwitch)
 		then
-			continent[GetHogTeamName(CurrentHedgehog)]=GetRandom(table.maxn(weaponsets))+1
-			setweapons()
+			GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]=GetRandom(table.maxn(GLOBAL_CONTINENT_INFORMATION))+1
+			SetContinentWeapons()
 			PlaySound(sndMineTick)
 		else
-			for v,w in pairs(weaponsets) 
+			for v,w in pairs(GLOBAL_CONTINENT_INFORMATION)
 			do
-				if(GetCurAmmoType()==weaponsets[v][4])
+				if(GetCurAmmoType()==GLOBAL_CONTINENT_INFORMATION[v][4])
 				then
-					continent[GetHogTeamName(CurrentHedgehog)]=v
-					setweapons()
-					PlaySound(weaponsetssounds[v][1])
-					PlaySound(weaponsetssounds[v][2],CurrentHedgehog)
+					GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]=v
+					SetContinentWeapons()
+					PlaySound(GLOBAL_CONTINENT_SOUNDS[v][1])
+					PlaySound(GLOBAL_CONTINENT_SOUNDS[v][2],CurrentHedgehog)
 				end
 			end
 		end
 	end
-	
+
 	--show the kerguelen ring
-	if(kergulenSpecial > 1 and GetCurAmmoType() == amHammer)
+	if(GLOBAL_KERGUELEN_SPECIAL > 1 and GetCurAmmoType() == amHammer)
 	then
-		if(visualcircle==nil)
+		if(GLOBAL_VISUAL_CIRCLE==nil)
 		then
-			visualcircle=AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtCircle, 0, true)
+			GLOBAL_VISUAL_CIRCLE=AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtCircle, 0, true)
 		end
-		
-		if(kergulenSpecial == 2) --walrus scream
+
+		if(GLOBAL_KERGUELEN_SPECIAL == 2) --walrus scream
 		then
-			SetVisualGearValues(visualcircle, GetX(CurrentHedgehog), GetY(CurrentHedgehog),20, 200, 0, 0, 100, 120, 4, 0xff0000ee)
-		elseif(kergulenSpecial == 3) --swap hog
+			SetVisualGearValues(GLOBAL_VISUAL_CIRCLE, GetX(CurrentHedgehog), GetY(CurrentHedgehog),20, 200, 0, 0, 100, 120, 4, 0xff0000ee)
+		elseif(GLOBAL_KERGUELEN_SPECIAL == 3) --swap hog
 		then
-			SetVisualGearValues(visualcircle, GetX(CurrentHedgehog), GetY(CurrentHedgehog),20, 200, 0, 0, 100, 450, 3, 0xffff00ee)
-		elseif(kergulenSpecial == 5) --cries
+			SetVisualGearValues(GLOBAL_VISUAL_CIRCLE, GetX(CurrentHedgehog), GetY(CurrentHedgehog),20, 200, 0, 0, 100, 420, 3, 0xffff00ee)
+		elseif(GLOBAL_KERGUELEN_SPECIAL == 5) --cries
 		then
-			SetVisualGearValues(visualcircle, GetX(CurrentHedgehog), GetY(CurrentHedgehog),20, 200, 0, 0, 100, 500, 1, 0x0000ffee)
-		elseif(kergulenSpecial == 6) --sabotage
+			SetVisualGearValues(GLOBAL_VISUAL_CIRCLE, GetX(CurrentHedgehog), GetY(CurrentHedgehog),20, 200, 0, 0, 100, 550, 1, 0x0000ffee)
+		elseif(GLOBAL_KERGUELEN_SPECIAL == 6) --sabotage
 		then
-			SetVisualGearValues(visualcircle, GetX(CurrentHedgehog), GetY(CurrentHedgehog),20, 200, 0, 0, 100, 80, 10, 0x00ff00ee)
+			SetVisualGearValues(GLOBAL_VISUAL_CIRCLE, GetX(CurrentHedgehog), GetY(CurrentHedgehog),20, 200, 0, 0, 100, 80, 10, 0x00ff00ee)
 		end
-	
-	elseif(visualcircle~=nil)
+
+	elseif(GLOBAL_VISUAL_CIRCLE~=nil)
 	then
-		DeleteVisualGear(visualcircle)
-		visualcircle=nil
+		DeleteVisualGear(GLOBAL_VISUAL_CIRCLE)
+		GLOBAL_VISUAL_CIRCLE=nil
 	end
-	
+
 	--sabotage
-	if(disable_moving[CurrentHedgehog]==true)
+	if(GLOBAL_SABOTAGE_HOGS[CurrentHedgehog]~=nil and GLOBAL_SABOTAGE_HOGS[CurrentHedgehog]>=1)
 	then
-	
-		if(TurnTimeLeft<=150)
+		--for sabotage
+		if(GLOBAL_SABOTAGE_HOGS[CurrentHedgehog]==1)
 		then
-			disable_moving[CurrentHedgehog]=false
-			SetInputMask(0xFFFFFFFF)
-		elseif(disallowattack >= (25*disableRand)+5)
+			local RND=GetRandom(2)
+			if(RND==0)
+			then
+				AddCaption(loc("You are sabotaged, RUN!"))
+			else
+				AddCaption(loc("WARNING: Sabotage detected!"))
+			end
+			PlaySound(sndHellish)
+			GLOBAL_SABOTAGE_COUNTER=-50
+			--update the constant at the top also to something in between
+			GLOBAL_SABOTAGE_FREQUENCY=(25*(RND))+70
+			GLOBAL_SABOTAGE_GRAVITY_SWITCH=true
+
+			GLOBAL_SABOTAGE_HOGS[CurrentHedgehog]=2
+		end
+
+		if(GLOBAL_SABOTAGE_COUNTER >0)
+		then
+			if(GLOBAL_SABOTAGE_GRAVITY_SWITCH)
+			then
+				SetGravityFromScale(div(100*GLOBAL_SABOTAGE_COUNTER,GLOBAL_SABOTAGE_FREQUENCY))
+			else
+				SetGravityFromScale(100-div(100*GLOBAL_SABOTAGE_COUNTER,GLOBAL_SABOTAGE_FREQUENCY))
+			end
+
+			if(GLOBAL_SABOTAGE_COUNTER % 20 == 0)
+			then
+				AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtSmokeWhite, 0, false)
+			end
+		end
+
+		if(TurnTimeLeft<(GetAwayTime*10) or band(GetState(CurrentHedgehog),gstAttacked)==1)
+		then
+			GLOBAL_SABOTAGE_HOGS[CurrentHedgehog]=0
+			SetGravity(100)
+		elseif(GLOBAL_SABOTAGE_COUNTER >= GLOBAL_SABOTAGE_FREQUENCY)
 		then
-			temp_val=0
-			
-			AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog)-10, gtCluster, 0, 0, -160000, 40)
-			
-			disallowattack=0
-		elseif(disallowattack % 20 == 0 and disallowattack>0)
+			if(GLOBAL_SABOTAGE_GRAVITY_SWITCH==true)
+			then
+				GLOBAL_SABOTAGE_GRAVITY_SWITCH=false
+			else
+				--AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog)-10, gtCluster, 0, 0, -160000, 30)
+				GLOBAL_SABOTAGE_GRAVITY_SWITCH=true
+			end
+
+			if(GetHealth(CurrentHedgehog)<=2)
+			then
+				SetHealth(CurrentHedgehog, 0)
+				GLOBAL_SABOTAGE_HOGS[CurrentHedgehog]=0
+				SetGravity(100)
+			else
+				SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog)-2)
+			end
+			ShowDamageTag(CurrentHedgehog,2)
+
+			GLOBAL_SABOTAGE_COUNTER=0
+		else
+			GLOBAL_SABOTAGE_COUNTER=GLOBAL_SABOTAGE_COUNTER+1
+		end
+	end
+
+	if(GetCurAmmoType() == amSwitch and GLOBAL_TEMP_VALUE==87)
+	then
+		SetGearMessage(CurrentHedgehog,gmAttack)
+		GLOBAL_TEMP_VALUE=0
+	end
+
+	if(GLOBAL_SHOW_SMALL_INFO>0)
+	then
+		if(GLOBAL_SHOW_SMALL_INFO==1)
 		then
-			SetInputMask(band(0xFFFFFFFF, bnot(gmLJump + gmHJump)))
-			AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtSmokeWhite, 0, false)
-			disallowattack=disallowattack+1
-		else
-			SetInputMask(0xFFFFFFFF)
-			disallowattack=disallowattack+1
+			ShowContinentInfo(GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)],-1,true)
 		end
-	
+
+		GLOBAL_SHOW_SMALL_INFO=GLOBAL_SHOW_SMALL_INFO-1
 	end
-	
+end
+
+--some ppl complained :P
+function onSlot(slot)
+	if(GLOBAL_TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]==0)
+	then
+		ParseCommand("setweap " .. string.char(amSkip))
+	end
 end
 
 --if you used hogswitch or any similar weapon, dont enable any weaponchange
 function onAttack()
-	swapweps=false
-	
+	GLOBAL_SELECT_CONTINENT_CHECK=false
+
 	--african special
-	if(africanSpecial == 1 and GetCurAmmoType() == amSeduction and band(GetState(CurrentHedgehog),gstAttacked)==0)
+	if(GLOBAL_AFRICAN_SPECIAL_SEDUCTION == 1 and GetCurAmmoType() == amSeduction and band(GetState(CurrentHedgehog),gstAttacked)==0)
 	then
-		--SetState(CurrentHedgehog, gstAttacked)
 		EndTurn()
-		
-		temp_val=0
-		runOnGears(weapon_duststorm)
-		SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog)+temp_val)
+
+		GLOBAL_TEMP_VALUE=0
+		runOnGears(AfricaSpecialSeduction)
+		SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog)+GLOBAL_TEMP_VALUE)
 
 		--visual stuff
-		visual_gear_explosion(250,GetX(CurrentHedgehog), GetY(CurrentHedgehog),vgtSmoke,vgtSmokeWhite)
+		VisualExplosion(250,GetX(CurrentHedgehog), GetY(CurrentHedgehog),vgtSmoke,vgtSmokeWhite)
 		PlaySound(sndParachute)
-		
+
 		RemoveWeapon(CurrentHedgehog,amSeduction)
 
 	--Kerguelen specials
-	elseif(GetCurAmmoType() == amHammer and kergulenSpecial > 1 and band(GetState(CurrentHedgehog),gstAttacked)==0)
+	elseif(GetCurAmmoType() == amHammer and GLOBAL_KERGUELEN_SPECIAL > 1 and band(GetState(CurrentHedgehog),gstAttacked)==0)
 	then
-		--SetState(CurrentHedgehog, gstAttacked)
-		
-		
 		--scream
-		if(kergulenSpecial == 2)
+		if(GLOBAL_KERGUELEN_SPECIAL == 2)
 		then
-			temp_val=0
-			runOnGears(weapon_scream_pen)
-			SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog)+temp_val)
+			GLOBAL_TEMP_VALUE=0
+			runOnGears(KerguelenSpecialRed)
+			SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog)+GLOBAL_TEMP_VALUE)
 			PlaySound(sndHellish)
-		
+
 		--swap
-		elseif(kergulenSpecial == 3 and TotalRounds>=1)
+		elseif(GLOBAL_KERGUELEN_SPECIAL == 3 and TotalRounds>=1)
 		then
-			runOnGears(weapon_swap_kerg)
-			PlaySound(sndPiano3)
-			
+			GLOBAL_TEMP_VALUE=0
+			runOnGears(KerguelenSpecialYellowCountHogs)
+			if(GLOBAL_TEMP_VALUE>0)
+			then
+				GLOBAL_TEMP_VALUE=GetRandom(GLOBAL_TEMP_VALUE)
+				runOnGears(KerguelenSpecialYellowSwap)
+				PlaySound(sndPiano3)
+			else
+				PlaySound(sndPiano6)
+			end
+
 		--cries
-		elseif(kergulenSpecial == 5)
+		elseif(GLOBAL_KERGUELEN_SPECIAL == 5)
 		then
-			runOnGears(weapon_cries_a)
-			if(kergulenSpecial~=-1)
+			runOnGears(KerguelenSpecialBlueCheck)
+			if(GLOBAL_KERGUELEN_SPECIAL~=-1)
 			then
 				AddGear(0, 0, gtWaterUp, 0, 0,0,0)
 				PlaySound(sndWarp)
 				PlaySound(sndMolotov)
-				
-				temp_val=0
-				runOnGears(weapon_cries_b)
-				SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog)+temp_val)
+
+				GLOBAL_TEMP_VALUE=0
+				runOnGears(KerguelenSpecialBlueActivate)
+				SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog)+GLOBAL_TEMP_VALUE)
 			else
 				HogSay(CurrentHedgehog, loc("Hogs in sight!"), SAY_SAY)
 			end
-		
+
 		--sabotage
-		elseif(kergulenSpecial == 6)
+		elseif(GLOBAL_KERGUELEN_SPECIAL == 6)
 		then
-			temp_val=0
-			runOnGears(weapon_sabotage)
-			if(temp_val==0)
+			GLOBAL_TEMP_VALUE=0
+			runOnGears(KerguelenSpecialGreen)
+			if(GLOBAL_TEMP_VALUE==0)
 			then
 				PlaySound(sndThrowRelease)
 				AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog)-20, gtCluster, 0, 0, -1000000, 32)
 			end
 		end
-		
+
 		EndTurn()
-		
-		DeleteVisualGear(visualcircle)
-		visualcircle=nil
-		kergulenSpecial=0
-		
+
+		DeleteVisualGear(GLOBAL_VISUAL_CIRCLE)
+		GLOBAL_VISUAL_CIRCLE=nil
+		GLOBAL_KERGUELEN_SPECIAL=0
+
 		RemoveWeapon(CurrentHedgehog,amHammer)
-		
+
 	elseif(GetCurAmmoType() == amVampiric)
 	then
-		VampOn=75
-	end
-	--Australian special
-	if(GetGearType(austmine) == gtMine and austmine ~= nil)
+		GLOBAL_VAMPIRIC_IS_ON=75
+	elseif(GetCurAmmoType() == amExtraDamage)
 	then
-		temp_val=0
-		runOnGears(weapon_aust_check)
-		
-		if(gearIsInCircle(austmine,GetX(CurrentHedgehog), GetY(CurrentHedgehog), 30, false)==false or temp_val==1)
-		then
-			AddVisualGear(GetX(austmine), GetY(austmine), vgtDust, 0, false)
-			DeleteGear(austmine)
-			PlaySound(sndDenied)
-		end
-		
-		austmine=nil
+		GLOBAL_EXTRA_DAMAGE_IS_ON=150
 	end
-	
-	australianSpecial=false
 end
 
 function onGearAdd(gearUid)
-	swapweps=false
-	
+	GLOBAL_SELECT_CONTINENT_CHECK=false
+
 	--track the gears im using
-	if(GetGearType(gearUid) == gtHedgehog or GetGearType(gearUid) == gtMine or GetGearType(gearUid) == gtExplosives) 
+	if(GetGearType(gearUid) == gtHedgehog or GetGearType(gearUid) == gtMine or GetGearType(gearUid) == gtExplosives)
 	then
 		trackGear(gearUid)
 	end
-	
+
 	--remove gasclouds on gasbombspecial
-	if(GetGearType(gearUid)==gtPoisonCloud and samericanSpecial == true)
+	if(GetGearType(gearUid)==gtPoisonCloud and GLOBAL_SOUTH_AMERICAN_SPECIAL == true)
 	then
 		DeleteGear(gearUid)
-
+	--african special
 	elseif(GetGearType(gearUid)==gtSMine)
 	then
 		vx,vy=GetGearVelocity(gearUid)
-		if(africaspecial2 == 1)
+		if(GLOBAL_AFRICAN_SPECIAL_STICKY == 1)
 		then
 			SetState(CurrentHedgehog, gstHHDriven+gstMoving)
 			SetGearPosition(CurrentHedgehog, GetX(CurrentHedgehog),GetY(CurrentHedgehog)-3)
 			SetGearVelocity(CurrentHedgehog, vx, vy)
 			DeleteGear(gearUid)
-			
-		elseif(africaspecial2 == 2)
+
+		elseif(GLOBAL_AFRICAN_SPECIAL_STICKY == 2)
 		then
-			fire_gear(CurrentHedgehog,gtNapalmBomb, vx, vy, 0)
+			FireGear(CurrentHedgehog,gtNapalmBomb, vx, vy, 0)
 			DeleteGear(gearUid)
 		end
-
+	--north american special
 	elseif(GetGearType(gearUid)==gtSniperRifleShot)
 	then
-		sniper_s_in_use=true
-		if(namericanSpecial~=1)
+		GLOBAL_NORTH_AMERICAN_SPECIAL_SNIPER_IS_ON=true
+		if(GLOBAL_NORTH_AMERICAN_SPECIAL_SNIPER~=1)
 		then
 			SetHealth(gearUid, 1)
 		end
-
+	--north american special
 	elseif(GetGearType(gearUid)==gtShotgunShot)
 	then
-		if(shotgun_s==true)
+		if(GLOBAL_NORTH_AMERICAN_SPECIAL_SHOTGUN==true)
 		then
 			AddVisualGear(GetX(gearUid), GetY(gearUid), vgtFeather, 0, false)
 			AddVisualGear(GetX(gearUid), GetY(gearUid), vgtFeather, 0, false)
 			AddVisualGear(GetX(gearUid), GetY(gearUid), vgtFeather, 0, false)
 			PlaySound(sndBirdyLay)
 		else
-			shotgun_s=nil
+			GLOBAL_NORTH_AMERICAN_SPECIAL_SHOTGUN=nil
 		end
-		
-	elseif(GetGearType(gearUid)==gtMolotov and europe_s==1)
+	--european special
+	elseif(GetGearType(gearUid)==gtMolotov and GLOBAL_EUROPE_SPECIAL==1)
 	then
 		vx,vy=GetGearVelocity(gearUid)
-		e_health=fire_gear(CurrentHedgehog,gtCluster, vx, vy, 1)
+		e_health=FireGear(CurrentHedgehog,gtCluster, vx, vy, 1)
 		SetGearMessage(e_health, 2)
 		DeleteGear(gearUid)
-		
+	--australian specials
+	elseif(GetGearType(gearUid)==gtShover and GLOBAL_AUSTRALIAN_SPECIAL~=0)
+	then
+		GLOBAL_TEMP_VALUE=0
+		runOnGears(AustraliaSpecialCheckHogs)
+
+		if(GLOBAL_TEMP_VALUE==0)
+		then
+			vx,vy=GetGearVelocity(gearUid)
+
+			if(GLOBAL_AUSTRALIAN_SPECIAL==1)
+			then
+				local austmine=FireGear(CurrentHedgehog,gtMine, vx, vy, 0)
+				SetHealth(austmine, 100)
+				SetTimer(austmine, 1000)
+			else
+				local austmine=FireGear(CurrentHedgehog,gtEgg, vx, vy, 10)
+				--SetHealth(austmine, 2000)
+				SetTimer(austmine, 6000)
+				SetGearMessage(austmine, 3)
+			end
+		else
+			PlaySound(sndDenied)
+		end
 	elseif(GetGearType(gearUid)==gtParachute)
 	then
-		inpara=1
+		GLOBAL_PARACHUTE_IS_ON=1
+	elseif(GetGearType(gearUid)==gtSwitcher)
+	then
+		GLOBAL_SWITCH_HOG_IS_ON=true
 	end
 end
 
 function onGearDelete(gearUid)
 
-	if(GetGearType(gearUid) == gtHedgehog or GetGearType(gearUid) == gtMine or GetGearType(gearUid) == gtExplosives) 
+	if(GetGearType(gearUid) == gtHedgehog or GetGearType(gearUid) == gtMine or GetGearType(gearUid) == gtExplosives)
 	then
 		trackDeletion(gearUid)
-		
+
 		--sundaland special
-		if(GetGearType(gearUid) == gtHedgehog and continent[GetHogTeamName(turnhog)]==10)
+		if(GetGearType(gearUid) == gtHedgehog and GLOBAL_TEAM_CONTINENT[GetHogTeamName(GLOBAL_SUNDALAND_END_HOG)]==10)
 		then
-			if(turnhog==CurrentHedgehog)
+			if(GLOBAL_SUNDALAND_END_HOG==CurrentHedgehog)
 			then
-				runOnGears(find_other_hog_in_team)
+				runOnGears(SundalandFindOtherHogInTeam)
 			end
-		
-			get_random_weapon_on_death(turnhog)
+
+			SundalandGetWeapons(GLOBAL_SUNDALAND_END_HOG)
 		end
 	end
-	
+
 	--north american lipstick
 	if(GetGearType(gearUid)==gtSniperRifleShot )
 	then
-		sniper_s_in_use=false
-		if(namericanSpecial==2)
+		GLOBAL_NORTH_AMERICAN_SPECIAL_SNIPER_IS_ON=false
+		if(GLOBAL_NORTH_AMERICAN_SPECIAL_SNIPER==2)
 		then
-			temp_val=gearUid
-			runOnGears(weapon_lipstick)
+			GLOBAL_TEMP_VALUE=gearUid
+			runOnGears(NorthAmericaSpecialSniper)
 		end
 	--north american eagle eye
-	elseif(GetGearType(gearUid)==gtShotgunShot and shotgun_s==true)
+	elseif(GetGearType(gearUid)==gtShotgunShot and GLOBAL_NORTH_AMERICAN_SPECIAL_SHOTGUN==true)
 	then
-		SetState(CurrentHedgehog, gstMoving)
+		EndTurn()
 		SetGearPosition(CurrentHedgehog, GetX(gearUid), GetY(gearUid)+7)
 		PlaySound(sndWarp)
-
 	--south american special
-	elseif(GetGearType(gearUid)==gtGasBomb and samericanSpecial == true)
+	elseif(GetGearType(gearUid)==gtGasBomb and GLOBAL_SOUTH_AMERICAN_SPECIAL == true)
 	then
-		temp_val=gearUid
-		runOnGears(weapon_anno_south)
+		GLOBAL_TEMP_VALUE=gearUid
+		runOnGears(SouthAmericaSpecialCheeseExplosion)
 		AddVisualGear(GetX(gearUid), GetY(gearUid), vgtExplosion, 0, false)
-	
+
 	--asian special
 	elseif(GetGearType(gearUid)==gtSnowball and GetGearMessage(gearUid)==1)
 	then
 		AddGear(GetX(gearUid), GetY(gearUid), gtCluster, 0, 0, 0, 22)
-	
+
 	--europe special
 	elseif(GetGearType(gearUid)==gtCluster and GetGearMessage(gearUid)==2)
 	then
-		temp_val=gearUid
-		runOnGears(weapon_health)
-		visual_gear_explosion(100,GetX(gearUid), GetY(gearUid),vgtSmokeWhite,vgtSmokeWhite)
+		GLOBAL_TEMP_VALUE=gearUid
+		runOnGears(EuropeSpecialMolotovHit)
+		VisualExplosion(100,GetX(gearUid), GetY(gearUid),vgtSmokeWhite,vgtSmokeWhite)
 		AddVisualGear(GetX(gearUid), GetY(gearUid), vgtExplosion, 0, false)
 		PlaySound(sndGraveImpact)
-	
+	--australian special
+	elseif(GetGearType(gearUid)==gtEgg and GetGearMessage(gearUid)==3)
+	then
+		GLOBAL_TEMP_VALUE=gearUid
+		runOnGears(AustraliaSpecialEggHit)
+		GLOBAL_TEMP_VALUE=0
 	--asia (using para)
 	elseif(GetGearType(gearUid)==gtParachute)
 	then
-		inpara=false
+		GLOBAL_PARACHUTE_IS_ON=false
+	elseif(GetGearType(gearUid)==gtSwitcher)
+	then
+		GLOBAL_SWITCH_HOG_IS_ON=false
 	end
 end
---[[sources (populations & area):
-Own calculations
-Some are approximations.]]
+
+--[[
+	sources (populations & area):
+	Own calculations from wikipedia.
+	Some are approximations.
+]]
--- a/share/hedgewars/Data/Scripts/Multiplayer/DiagonalMaze.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/DiagonalMaze.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -6,14 +6,18 @@
 function onGameInit()
     MapGen = mgDrawn
     TemplateFilter = 0
-    for y = 48,2048,200 do
-       for x = 48,4048,200 do
+    local step = 80 + 10 * MapFeatureSize
+    local width = 1 + div(math.max(0, MapFeatureSize-12), 6)
+    -- center maze
+    local xoff = div((4000 % step), 2)
+    for y = 48,2048,step do
+       for x = 48+xoff,4048-step,step do
             if GetRandom(2) == 0 then
-                AddPoint(x,y,1)
-                AddPoint(x+200,y+200)
+                AddPoint(x,y,width)
+                AddPoint(x+step,y+step)
             else
-                AddPoint(x,y+200,1)
-                AddPoint(x+200,y)
+                AddPoint(x,y+step,width)
+                AddPoint(x+step,y)
             end
         end
     end
--- a/share/hedgewars/Data/Scripts/Multiplayer/Frenzy.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Frenzy.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -1,142 +1,142 @@
--------------------------------------------
--- FRENZY
--- a hedgewars mode inspired by Hysteria
--------------------------------------------
-
-HedgewarsScriptLoad("/Scripts/Locale.lua")
-HedgewarsScriptLoad("/Scripts/Tracker.lua")
-
-local cTimer = 0
-local cn = 0
-
-function initialSetup(gear)
-	SetHealth(gear, 75) -- official is 80, but that assumes bazookas/grenades that do 50 damage
-end
-
-function showStartingInfo()
-
-	ruleSet = "" ..
-	loc("RULES") .. ": " .. "|" ..
-	loc("Each turn is only ONE SECOND!") .. "|" ..
-	loc("Use your ready time to think.") .. "|" ..
-	loc("Slot keys save time! (F1-F10 by default)") .. "|" ..
-	" |" ..
-	loc("SLOTS") .. ": " .. "|" ..
-	loc("Slot") .. " 1 - " .. loc("Bazooka") .. "|" ..
-	loc("Slot") .. " 2 - " .. loc("Grenade") .. "|" ..
-	loc("Slot") .. " 3 - " .. loc("Shotgun") .. "|" ..
-	loc("Slot") .. " 4 - " .. loc("Shoryuken") .. "|" ..
-	loc("Slot") .. " 5 - " .. loc("Mine") .. "|" ..
-	loc("Slot") .. " 6 - " .. loc("Teleport") .. "|" ..
-	loc("Slot") .. " 7 - " .. loc("Blowtorch") .. "|" ..
-	loc("Slot") .. " 8 - " .. loc("Flying Saucer") .. "|" ..
-	loc("Slot") .. " 9 - " .. loc("Molotov") .. "|" ..
-	loc("Slot") .. " 10 - " .. loc("Low Gravity")
-
-	ShowMission(loc("FRENZY"),
-                loc("a frenetic Hedgewars mini-game"),
-                ruleSet, 0, 4000)
-
-end
-
-function onGameInit()
-
-	if TurnTime > 10001 then
-		Ready = 8000
-	else
-		Ready = TurnTime
-	end
-
-	TurnTime = 1000
-
-	--These are the official settings, but I think I prefer allowing customization in this regard
-	--MinesNum = 8
-	--MinesTime = 3000
-	--MinesDudPercent = 30
-	--Explosives = 0
-
-	--Supposedly official settings
-	HealthCaseProb = 0
-	CrateFreq = 0
-
-	--Approximation of Official Settings
-	--SuddenDeathTurns = 10
-	--WaterRise = 47
-	--HealthDecrease = 0
-
-end
-
-function onGameStart()
-	showStartingInfo()
-	runOnHogs(initialSetup)
-end
-
-function onSlot(sln)
-	cTimer = 8
-	cn = sln
-end
-
-function onGameTick()
-	if cTimer ~= 0 then
-		cTimer = cTimer -1
-		if cTimer == 1 then
-			ChangeWep(cn)
-			cn = 0
-			cTimer = 0
-		end
-	end
-end
-
-function ChangeWep(s)
-
-	if s == 0 then
-		SetWeapon(amBazooka)
-	elseif s == 1 then
-		SetWeapon(amGrenade)
-	elseif s == 2 then
-		SetWeapon(amShotgun)
-	elseif s == 3 then
-		SetWeapon(amFirePunch)
-	elseif s == 4 then
-		SetWeapon(amMine)
-	elseif s == 5 then
-		SetWeapon(amTeleport)
-	elseif s == 6 then
-		SetWeapon(amBlowTorch)
-	elseif s == 7 then
-		SetWeapon(amJetpack)
-	elseif s == 8 then
-		SetWeapon(amMolotov)
-	elseif s == 9 then
-		SetWeapon(amLowGravity)
-	end
-
-end
-
-function onGearAdd(gear)
-	if GetGearType(gear) == gtHedgehog then
-		trackGear(gear)
-	end
-end
-
-function onGearDelete(gear)
-	if GetGearType(gear) == gtHedgehog then
-		trackDeletion(gear)
-	end
-end
-
-function onAmmoStoreInit()
-	SetAmmo(amBazooka, 9, 0, 0, 0)
-	SetAmmo(amGrenade, 9, 0, 0, 0)
-	SetAmmo(amMolotov, 9, 0, 0, 0)
-	SetAmmo(amShotgun, 9, 0, 0, 0)
-	--SetAmmo(amFlamethrower, 9, 0, 0, 0) -- this was suggested on hw.org but it's not present on base
-	SetAmmo(amFirePunch, 9, 0, 0, 0)
-	SetAmmo(amMine, 9, 0, 0, 0)
-	--SetAmmo(amCake, 1, 0, 2, 0) -- maybe it's beefcake?
-	SetAmmo(amJetpack, 9, 0, 0, 0)
-	SetAmmo(amBlowTorch, 9, 0, 0, 0)
-	SetAmmo(amTeleport, 9, 0, 0, 0)
-	SetAmmo(amLowGravity, 9, 0, 0, 0)
-	--SetAmmo(amSkipGo, 9, 0, 0, 0) -- not needed with 1s turn time
-end
+-------------------------------------------
+-- FRENZY
+-- a hedgewars mode inspired by Hysteria
+-------------------------------------------
+
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+HedgewarsScriptLoad("/Scripts/Tracker.lua")
+
+local cTimer = 0
+local cn = 0
+
+function initialSetup(gear)
+	SetHealth(gear, 75) -- official is 80, but that assumes bazookas/grenades that do 50 damage
+end
+
+function showStartingInfo()
+
+	ruleSet = "" ..
+	loc("RULES") .. ": " .. "|" ..
+	loc("Each turn is only ONE SECOND!") .. "|" ..
+	loc("Use your ready time to think.") .. "|" ..
+	loc("Slot keys save time! (F1-F10 by default)") .. "|" ..
+	" |" ..
+	loc("SLOTS") .. ": " .. "|" ..
+	loc("Slot") .. " 1 - " .. loc("Bazooka") .. "|" ..
+	loc("Slot") .. " 2 - " .. loc("Grenade") .. "|" ..
+	loc("Slot") .. " 3 - " .. loc("Shotgun") .. "|" ..
+	loc("Slot") .. " 4 - " .. loc("Shoryuken") .. "|" ..
+	loc("Slot") .. " 5 - " .. loc("Mine") .. "|" ..
+	loc("Slot") .. " 6 - " .. loc("Teleport") .. "|" ..
+	loc("Slot") .. " 7 - " .. loc("Blowtorch") .. "|" ..
+	loc("Slot") .. " 8 - " .. loc("Flying Saucer") .. "|" ..
+	loc("Slot") .. " 9 - " .. loc("Molotov") .. "|" ..
+	loc("Slot") .. " 10 - " .. loc("Low Gravity")
+
+	ShowMission(loc("FRENZY"),
+                loc("a frenetic Hedgewars mini-game"),
+                ruleSet, 0, 4000)
+
+end
+
+function onGameInit()
+
+	if TurnTime > 10001 then
+		Ready = 8000
+	else
+		Ready = TurnTime
+	end
+
+	TurnTime = 1000
+
+	--These are the official settings, but I think I prefer allowing customization in this regard
+	--MinesNum = 8
+	--MinesTime = 3000
+	--MinesDudPercent = 30
+	--Explosives = 0
+
+	--Supposedly official settings
+	HealthCaseProb = 0
+	CrateFreq = 0
+
+	--Approximation of Official Settings
+	--SuddenDeathTurns = 10
+	--WaterRise = 47
+	--HealthDecrease = 0
+
+end
+
+function onGameStart()
+	showStartingInfo()
+	runOnHogs(initialSetup)
+end
+
+function onSlot(sln)
+	cTimer = 8
+	cn = sln
+end
+
+function onGameTick()
+	if cTimer ~= 0 then
+		cTimer = cTimer -1
+		if cTimer == 1 then
+			ChangeWep(cn)
+			cn = 0
+			cTimer = 0
+		end
+	end
+end
+
+function ChangeWep(s)
+
+	if s == 0 then
+		SetWeapon(amBazooka)
+	elseif s == 1 then
+		SetWeapon(amGrenade)
+	elseif s == 2 then
+		SetWeapon(amShotgun)
+	elseif s == 3 then
+		SetWeapon(amFirePunch)
+	elseif s == 4 then
+		SetWeapon(amMine)
+	elseif s == 5 then
+		SetWeapon(amTeleport)
+	elseif s == 6 then
+		SetWeapon(amBlowTorch)
+	elseif s == 7 then
+		SetWeapon(amJetpack)
+	elseif s == 8 then
+		SetWeapon(amMolotov)
+	elseif s == 9 then
+		SetWeapon(amLowGravity)
+	end
+
+end
+
+function onGearAdd(gear)
+	if GetGearType(gear) == gtHedgehog then
+		trackGear(gear)
+	end
+end
+
+function onGearDelete(gear)
+	if GetGearType(gear) == gtHedgehog then
+		trackDeletion(gear)
+	end
+end
+
+function onAmmoStoreInit()
+	SetAmmo(amBazooka, 9, 0, 0, 0)
+	SetAmmo(amGrenade, 9, 0, 0, 0)
+	SetAmmo(amMolotov, 9, 0, 0, 0)
+	SetAmmo(amShotgun, 9, 0, 0, 0)
+	--SetAmmo(amFlamethrower, 9, 0, 0, 0) -- this was suggested on hw.org but it's not present on base
+	SetAmmo(amFirePunch, 9, 0, 0, 0)
+	SetAmmo(amMine, 9, 0, 0, 0)
+	--SetAmmo(amCake, 1, 0, 2, 0) -- maybe it's beefcake?
+	SetAmmo(amJetpack, 9, 0, 0, 0)
+	SetAmmo(amBlowTorch, 9, 0, 0, 0)
+	SetAmmo(amTeleport, 9, 0, 0, 0)
+	SetAmmo(amLowGravity, 9, 0, 0, 0)
+	--SetAmmo(amSkipGo, 9, 0, 0, 0) -- not needed with 1s turn time
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Scripts/Multiplayer/HedgeEditor.cfg	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,2 @@
+Default
+Default
Binary file share/hedgewars/Data/Scripts/Multiplayer/HedgeEditor.hwp has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Scripts/Multiplayer/HedgeEditor.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,4115 @@
+---------------------------------------------------------------
+--- HEDGE EDITOR 0.9 (for use with Hedgewars 0.9.22 and up)
+---------------------------------------------------------------
+-- a horrible mission editor by mikade
+-- place gears like a boss
+
+-- feel free to shower me with your adoration and/or hate mail
+-- more info can be found at http://hedgewars.org/HedgeEditor
+
+-- special thanks to nemo, unC0Rr, sheepluva and koda for their assistance
+
+---------------------------------------
+-- GETTING STARTED (for best results!)
+---------------------------------------
+-- create a weaponset that has NO DELAYS on any weapons, and that gives you 1 ammo per crate
+
+-- (optional) copy GameLogExtractor.html, jquery-1.js
+-- into your Documents/Hedgewars/Logs folder
+
+-- (optional) copy hwpmapconverter somewhere easily accessible
+
+-- (optional) profit??
+
+---------------------------------------
+-- CORE FEATURES as of latest version
+---------------------------------------
+-- togglable help (press PRECISE + 1, while you have a tool (e.g. airstrike) selected)
+-- you can also the set the ScriptParameter in scheme, e.g: helpDisabled="true"
+
+-- place girders, rubberbands and custom sprites anywhere on the map.
+-- the above objects may be destructible, indestructible, icy, or bouncy.
+
+-- place mines, sticky mines, air mines, barrels, weapon crates, utility crates,
+-- health crates, targets, and cleavers anywhere on the map.
+
+-- select, reposition, modify, or delete placed objects.
+
+-- read in data from a previously generated map and allow the map to be edited/saved again
+
+-- contextual cursor and menu graphics
+-- placement sounds that are slightly more soothing
+
+-- meaningless version number
+-- extra whitespace
+-- fewer capital letters than ideal
+
+-- upon saving, all level data will be output to logs/game0.log.
+-- game0.log also includes a lot of other data so if you only want to see the relevant lines of code
+-- you can use GameLogExtractor.html to extract and prune the log into a cleaner form of data,
+-- specifically: either as an automagically generated template mission, just core data, or hwmap points.
+-- from there, please copy and paste any lines relevant to your interest into an existing
+-- (or totally empty!) script and edit them according to taste.
+
+--------------------------
+-- MODE SPECIFIC SUPPORT
+--------------------------
+-- FOR CUSTOM MISSIONS/CAMPAIGN LEVELS:
+-- the names/hats/flags/voices/graves of any teams/hogs that you use to play this script can be saved,
+-- as can (most of) the settings from your scheme and weapons selection.
+-- HOWEVER, you can also use the 'hog identity' tool to give hogs preset names/hats/weapons/health
+-- or use the 'team identity' tool to give an entire team themed names/hats.
+-- give hogs differing health by using the health modification tool
+-- create goals by tagging gears with victory/defeat/collection markers (somewhat implemented)
+-- flavor text, as well as victory/defeat conditions will be generated based on these tags.
+
+-- SHOPPA BALANCE / CONSTRUCTION MODE (partial and/or possibly decremented):
+-- Press 1-5 while repositioning hogs with the reposition tool to assign them (their position) a rank.
+-- This value will be expressed as a colour that is intended to represent how "good" or "bad"
+-- a position on the map is. These ranks/points will be output along with other game data to game0.log
+-- This data could be pasted into the ShoppaBalance script to create balances for additional maps.
+
+-- TECH RACER / HEDGE EDITOR / POINT INTERPRETER:
+-- place/remove waypoints/special points
+-- use the ScriptParameter in the frontend scheme editor to set additional options, e.g.
+-- ufoFuel=1000 (Flying Saucer will start with half the normal fuel. A value of 2000 is infinite fuel)
+-- portalDistance=15 (This is the distance portals can travel before fizzling)
+-- m=3 (load a particular map from the map library of Data/Scripts/TechMaps
+-- helpDisabled="true" (the help pop-up overlay will be disabled by default)
+
+-- when saving data, points for conversion to HWMAP are also generated and placed inside block comments.
+-- copy paste/these points at the START of a converted HWMAP and then convert the map back to HWMAP format.
+-- following the above procedure it is then possible to load the map in frontend and play it using a
+-- script like TechRacer (or HedgeEditor itself) that can interpret the points using InterpretPoints()
+
+---------------------------------------
+-- DISCLAIMER
+---------------------------------------
+-- well, I really just made this for myself, so it's usage might be a little complicated for others.
+-- it also probably has a million errors, and has grown rather bloated over time due to the addition of
+-- more and more features that my initial design didn't take into account.
+
+-- anyway, I've tried to make it more user-friendly by including more comments and gradually adding
+-- some basic guidelines such as those listed above, and also the in-game Help displays for each tool.
+
+-----------------------------------------
+-- GIANT "TO DO" LIST / OTHER NOTES
+-----------------------------------------
+
+-- try to prune waypoint list and portal/ufo fuel in the mission template
+-- for gamelog extractor
+
+-- I should probably check if there are tagged gears on save
+-- and if there are enable gfOneClanMode so that user can't
+-- just destroy all hogs to win map.
+-- (what happens if we lose all our hogs?)
+
+-- I might be able to make the flavor text even better (assassinate hogName) by
+-- checking if there is only 1 hog, etc.
+
+-- possibly try show landflag addcaption constantly like we do for superdelete when
+-- using girders / rubbers.
+
+-- check to what extent hog info is preserved on saving (does health/weps really save correctly?)
+-- atm I think it's only for missions so I don't think it is preserved in core data
+
+-- check if we lose a mission when the enemy collects our crate (we should)
+
+-- try and find out why we can't save the Theme, that feels really dumb
+
+-- How about a weapons profile tool that is used with team ammo
+-- and then hog identity tool would only be available if gfPerHogAmmo is set
+
+-- INVESTIGATE when you can bother to do so
+-- is airmine still missing anywhere, e.g. the weplist generated FOR THE TEMPLATE SCRIPT
+
+-- [high] 	waypoints don't reload yet
+
+-- [high] 	look into placing dud/random mines (probably needs a nil value)
+
+-- [high] 	add missing weps/utils/gears as they appear
+--			some gameflags and settings are probably missing, too (diff border types etc)
+--			some themes are also probably missing: cake, hoggywood?
+-- 			the ongameinit stuff is probaably missing something akin to numAirMines
+--			and also probably scriptParam and gravity etc.
+
+-- [med] 	add a limited form of save/load within level before mass-output
+
+-- [med] 	rework gameflag handling to use the newer API methods (done?)
+
+-- [med]	maybe incorporate portal effects / ufo tracking into the template generated script if
+-- 			you want the missions to use it
+
+-- [med]	improve ammo handling (if possible, take more scheme settings into account)
+-- 			also be sure to generate wep data so crates don't have 0 in them (done?)
+
+-- [low] 	match the user picked color to the color array
+
+-- [low] 	break up the division of labor of the tools into airstrike, minestrike, napalm, etc.
+			--[[
+			girder =		"Girder Placement Mode",
+			rubber =		"Rubber Placement Mode",
+
+			airstrike =		(target sprite) (gear placement)
+							"Mine Placement Mode",
+							"Sticky Mine Placement Mode",
+							"Air Mine Placement Mode",
+							"Barrel Placement Mode",
+							"Target Placement Mode",
+							"Cleaver Placement Mode",
+
+			drillstrike =	crate sprite (crate placement mode)
+							"Health Crate Placement Mode",
+							"Weapon Crate Placement Mode",
+							"Utility Crate Placement Mode",
+
+
+			napalm =		arrow sprite (selection/modification/deletion mode)
+							"Advanced Repositioning Mode",  -- also include a delete
+							"Tagging Mode",
+							"Hog Identity Mode",
+							"Team Identity Mode",
+							"Health Modification Mode",
+							"Sprite Testing Mode",
+							"Sprite Modification Mode",
+							"Sprite Placement Mode",
+							"Waypoint Placement Mode"
+							}]]
+
+-- [low]	improve support for ShoppaBalance and ConstructionMode, see ranking)
+
+-- [low] 	consider combining landflags
+
+-- [low] 	periodically rework the code to make it less terrible (hahahahahaha!)
+
+-- [low]	eventually incorporate scripted structures into the editor / mission mode
+
+-- [low] 	some kind of support for single team training missions
+-- 			we could possibly add gfOneClanMode and kill the other team we're playing with?
+
+-- [never?]	set all actors to heresurrectible (why did I want this?)
+
+-- [never?] more detailed goal tagging and multi-stage triggers
+
+-- [never?]	theoretically might be possible to create forts (and other grouped objects)
+--			that can be mirrored and generated/placed in a big enough space
+
+-- [never?]	add a pulsing glow thing for sprites you have selected,
+--			kind of like the invaders in SpaceInvader (currently they are just displayed as purple)
+
+-- [never?] add the thing that would be useful for this editor, but that others might use to cheat
+
+-- [never?]	improve "illegal" placement detection (pretty sure should just let people do what they want)
+
+-- [never?]	add GUIs for editing ammo, init settings, additional gear attributes
+-- 			perhaps using precise with timer to enable/disable certain features
+
+--[[ gui menu ideas that have long since been abandoned
+INITIALISATION MENU
+	--gameFlags, etc
+
+	Map
+	Theme
+	TurnTime
+	Explosives
+	MinesNum
+	CaseFreq
+	Delay
+
+	HealthCaseProb
+	HealthCaseAmount
+	DamagePercent
+	MinesTime
+	MineDudPercent
+	SuddenDeathTurns
+	WaterRise
+	HealthDecrease
+HOG MENU
+	health
+	name (can be randomly generated from the list of hog names already in localisation)
+	poisoned (true/false)
+	hat
+	hog level?
+TEAM MENU
+	name (can be randomly generated as above?) should there be an array of teams with an array of names
+	colour
+	grave
+	fort
+	voicepack
+	flag
+
+-- this below stuff is less important
+STICKY MINE MENU
+	timer?
+MINE MENU
+	timer / dud
+MEDKIT MENU / EXPLOSIVE MENU
+	health amount
+WEP AND UTIL CRATE MENU
+	contents
+
+----------------------------------------
+-- MAP IDEAS
+----------------------------------------
+-- try to create a portal race (limit portal distance)
+-- for portal race, include barriers that you need to drill shoot through to get lazer site crates
+
+-- try make a map that uses sinegun to jump between bouncy boxes (not easy until we get better control over landflags)
+
+-- how about a mission where you have to trap / freeze all the enemy hogs
+-- and aren't allowed to kill them?
+-- can set it on the islands map.
+-- landgun
+-- girder
+-- mudball
+-- hammer
+-- seduction? (call a hog who has firepunch into a ditch
+-- icegun (do this so you can freeze guys in an area and then blowtorch/explode an obstacle)
+-- jump across a bridge that has been mined and then bat the enemy to the other side.
+
+-- possibly the same as part of the above, possibly different, what about a heist mission
+-- the objective is to steal 3 enemy crates
+-- the first one you have to fall through an invul tunnel of sticky mines and then parachute.
+-- the second one you have to drill rocket / portal.
+-- the third one you have to underwater ufo into, but only after opening it up with an underwater bee.
+
+]]
+
+---------------------------------------------------------
+-- HEDGE EDITOR, SCRIPT BEGINS (Hey yo, it's about time)
+---------------------------------------------------------
+
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+HedgewarsScriptLoad("/Scripts/Tracker.lua")
+HedgewarsScriptLoad("/Scripts/Params.lua")
+HedgewarsScriptLoad("/Scripts/TechMaps.lua")
+
+-- experimental crap
+--local destroyMap = false
+
+-----------------------------------------
+-- tracking vars for save/load purposes
+-----------------------------------------
+
+local teamCounter = 0
+local lastRecordedTeam = ""
+local hhs = {}
+
+local waypointList = {}
+local girderList = {}
+local rubberList = {}
+local spriteList = {}
+
+local mineList = {}
+local sMineList = {}
+local airMineList = {}
+local targetList = {}
+local knifeList = {}
+local explosivesList = {}
+local healthCrateList = {}
+local wepCrateList = {}
+local utilCrateList = {}
+local hogDataList = {}
+local AIHogDataList = {}
+local hFlagList = {}
+local previewDataList = {}
+
+local shoppaPointList = {}
+local shoppaPX = {}
+local shoppaPY = {}
+local shoppaPR = {}
+
+---------------------------------
+-- crates are made of this stuff
+---------------------------------
+
+local atkArray =
+				{
+				{amBazooka, 	"amBazooka",		2, 	loc("Bazooka")},
+				{amBee, 		"amBee",			3, 	loc("Homing Bee")},
+				{amMortar, 		"amMortar",			21, loc("Mortar")},
+				{amDrill, 		"amDrill",			28, loc("Drill Rocket")},
+				{amSnowball, 	"amSnowball",		50, loc("Mudball")},
+
+				{amGrenade,		"amGrenade",		0, 	loc("Grenade")},
+				{amClusterBomb,	"amClusterBomb",	1, 	loc("Cluster Bomb")},
+				{amMolotov, 	"amMolotov",		39, loc("Molotov Cocktail")},
+				{amWatermelon, 	"amWatermelon",		25, loc("Watermelon Bomb")},
+				{amHellishBomb,	"amHellishBomb",	26, loc("Hellish Handgrenade")},
+				{amGasBomb, 	"amGasBomb",		43, loc("Limburger")},
+
+				{amShotgun,		"amShotgun",		4, 	loc("Shotgun")},
+				{amDEagle,		"amDEagle",			9, 	loc("Desert Eagle")},
+				{amFlamethrower,"amFlamethrower",	45, loc("Flamethrower")},
+				{amSniperRifle,	"amSniperRifle",	37, loc("Sniper Rifle")},
+				{amSineGun, 	"amSineGun",		44, loc("SineGun")},
+				{amIceGun, 		"amIceGun",			53, loc("Freezer")},
+				{amLandGun,		"amLandGun",		52, loc("Land Spray")},
+
+				{amFirePunch, 	"amFirePunch",		11, loc("Shoryuken")},
+				{amWhip,		"amWhip",			12, loc("Whip")},
+				{amBaseballBat, "amBaseballBat",	13, loc("Baseball Bat")},
+				{amKamikaze, 	"amKamikaze",		22, loc("Kamikaze")},
+				{amSeduction, 	"amSeduction",		24, loc("Seduction")},
+				{amHammer,		"amHammer",			47, loc("Hammer")},
+
+				{amMine, 		"amMine",			8, 	loc("Mine")},
+				{amDynamite, 	"amDynamite",		10, loc("Dynamite")},
+				{amCake, 		"amCake",			23, loc("Cake")},
+				{amBallgun, 	"amBallgun",		29, loc("Ballgun")},
+				{amRCPlane,		"amRCPlane",		30, loc("RC Plane")},
+				{amSMine,		"amSMine",			46, loc("Sticky Mine")},
+
+				{amAirAttack,	"amAirAttack",		15, loc("Air Attack")},
+				{amMineStrike,	"amMineStrike",		16, loc("Mine Strike")},
+				{amDrillStrike,	"amDrillStrike",	49, loc("Drill Strike")},
+				{amAirMine,		"amAirMine",		56, loc("Air Mine")},
+				{amNapalm, 		"amNapalm",			27, loc("Napalm")},
+				{amPiano,		"amPiano",			42, loc("Piano Strike")},
+
+				{amKnife,		"amKnife",			54, loc("Cleaver")},
+
+				{amBirdy,		"amBirdy",			40, loc("Birdy")}
+
+				}
+
+local utilArray =
+				{
+				{amBlowTorch, 		"amBlowTorch",		17, loc("BlowTorch")},
+				{amPickHammer,		"amPickHammer",		5, 	loc("PickHammer")},
+				{amGirder, 			"amGirder",			18, loc("Girder")},
+				{amRubber, 			"amRubber",			55, loc("Rubber")},
+				{amPortalGun,		"amPortalGun",		41, loc("Personal Portal Device")},
+
+				{amRope, 			"amRope",			7, 	loc("Rope")},
+				{amParachute, 		"amParachute",		14, loc("Parachute")},
+				{amTeleport,		"amTeleport",		19, loc("Teleport")},
+				{amJetpack,			"amJetpack",		38, loc("Flying Saucer")},
+
+				{amInvulnerable,	"amInvulnerable",	33, loc("Invulnerable")},
+				{amLaserSight,		"amLaserSight",		35, loc("Laser Sight")},
+				{amVampiric,		"amVampiric",		36, loc("Vampirism")},
+
+				{amLowGravity, 		"amLowGravity",		31, loc("Low Gravity")},
+				{amExtraDamage, 	"amExtraDamage",	32, loc("Extra Damage")},
+				{amExtraTime,		"amExtraTime",		34, loc("Extra Time")},
+
+				{amResurrector, 	"amResurrector",	48, loc("Resurrector")},
+				{amTardis, 			"amTardis",			51, loc("Tardis")},
+
+				{amSwitch,			"amSwitch",			20, loc("Switch Hog")}
+				}
+
+				--skiphog is 6
+
+----------------------------
+-- hog and map editing junk
+----------------------------
+
+local preMadeTeam = 	{
+
+				{
+				"Clowns",
+				{"WhySoSerious","clown-copper","clown-crossed","clown","Joker"},
+				{"Baggy","Bingo","Bobo","Bozo","Buster","Chester","Copper","Heckles","Giggles","Jingo","Molly","Loopy","Patches","Tatters"},
+				"R","cm_birdy","Mobster","Rubberduck","Castle"
+				},
+
+				{
+				"Street Fighters",
+				{"sf_balrog","sf_blanka","sf_chunli","sf_guile","sf_honda","sf_ken","sf_ryu","sf_vega"},
+				{"Balrog","Blanka","Chunli","Guile","Honda","Ken","Ryu","Vega"},
+				"F","cm_balrog","Surfer","dragonball","Castle"
+				},
+
+				{
+				"Cybernetic Empire",
+				{"cyborg1","cyborg2"},
+				{"Unit 189","Unit 234","Unit 333","Unit 485","Unit 527","Unit 638","Unit 709","Unit 883"},
+				"R","cm_binary","Robot","Grave","Castle"
+				},
+
+				{
+				"Color Squad",
+				{"hair_blue","hair_green","hair_red","hair_yellow","hair_purple","hair_grey","hair_orange","hair_pink"},
+				{"Blue","Green","Red","Yellow","Purple","Grey","Orange","Pink"},
+				"F","cm_birdy","Singer","Grave","Castle"
+				},
+
+				{
+				"Fruit",
+				{"fr_apple","fr_banana","fr_lemon","fr_orange","fr_pumpkin","fr_tomato"},
+				{"Juicy","Squishy","Sweet","Sour","Bitter","Ripe","Rotten","Fruity"},
+				"R","cm_mog","Default","Cherry","Castle"
+				},
+
+				{
+				"The Police",
+				{"bobby","bobby2v","policecap","policegirl","royalguard"},
+				{"Hightower","Lassard","Callahan","Jones","Harris","Thompson","Mahoney","Hooks","Tackleberry"},
+				"R","cm_star","British","Statue","Castle"
+				},
+
+				{
+				"The Ninja-Samurai Alliance",
+				{"NinjaFull","NinjaStraight","NinjaTriangle","Samurai","StrawHat","StrawHatEyes","StrawHatFacial","naruto"},
+				{"Bushi","Tatsujin","Itami","Arashi","Shinobi","Ukemi","Godai","Kenshi","Ninpo"},
+				"R","japan","Default","octopus","Castle"
+				},
+
+				{
+				"Pokemon",
+				{"poke_ash","poke_charmander","poke_chikorita","poke_jigglypuff","poke_lugia","poke_mudkip","poke_pikachu","poke_slowpoke","poke_squirtle","poke_voltorb"},
+				{"Ash","Charmander","Chikorita","Jigglypuff","Lugia","Mudkip","Pikachu","Slowpoke","Squirtle","Voltorb"},
+				"FR","cm_pokemon","Default","pokeball","Castle"
+				},
+
+				{
+				"The Zoo",
+				{"zoo_Bat","zoo_Beaver","zoo_Bunny","zoo_Deer","zoo_Hedgehog","zoo_Moose","zoo_Pig","zoo_Porkey","zoo_Sheep","zoo_chicken","zoo_elephant","zoo_fish","zoo_frog","zoo_snail","zoo_turtle"},
+				{"Batty","Tails","Bunny","Deer","Spikes","Horns","Bacon","Porkey","Sheepy","Chicken","Trunks","Fishy","Legs","Slimer","Roshi"},
+				"FR","cm_hurrah","Default","Bone","Castle"
+				},
+
+				{
+				"The Devs",
+				{"ushanka","zoo_Sheep","bb_bob","Skull","poke_mudkip","lambda","WizardHat","sf_ryu","android","fr_lemon","mp3"},
+				{"unC0Rr", "sheepluva", "nemo", "mikade", "koda", "burp","HeneK","Tiyuri","Xeli","Displacer","szczur"},
+				"FR","hedgewars","Classic","Statue","Castle"
+				},
+
+				{
+				"Mushroom Kingdom",
+				{"sm_daisy","sm_luigi","sm_mario","sm_peach","sm_toad","sm_wario"},
+				{"Daisy","Luigi","Mario","Princess Peach","Toad","Wario"},
+				"FR","cm_birdy","Default","Badger","Castle"
+				},
+
+				{
+				"Pirates",
+				{"pirate_jack","pirate_jack_bandana"},
+				{"Rusted Diego","Fuzzy Beard","Al.Kaholic","Morris","Yumme Gunpowder","Cutlass Cain","Jim Morgan","Silver","Dubloon Devil","Ugly Mug","Fair Wind","Scallywag","Salty Dog","Bearded Beast","Timbers","Both Barrels","Jolly Roger"},
+				"R","cm_pirate","Pirate","chest","Castle"
+				},
+
+				{
+				"Gangsters",
+				{"Moustache","Cowboy","anzac","Bandit","thug","Jason","NinjaFull","chef"},
+				{"The Boss","Jimmy","Frankie","Morris","Mooney","Knives","Tony","Meals"},
+				"F","cm_anarchy","Mobster","deadhog","Castle"
+				},
+
+
+				{
+				"Twenty-Twenty",
+				{"Glasses","lambda","SunGlasses","Sniper","Terminator_Glasses","Moustache_glasses","doctor","punkman","rasta"},
+				{"Specs","Speckles","Spectator","Glasses","Glassy","Harry Potter","Goggles","Clark Kent","Goggs","Lightbender","Specs Appeal","Four Eyes"},
+				"R","cm_face","Default","eyecross","Castle"
+				},
+
+
+				{
+				"Monsters",
+				{"Skull","Jason","ShaggyYeti","Zombi","cyclops","Mummy","hogpharoah","vampirichog"},
+				{"Bones","Jason","Yeti","Zombie","Old One Eye","Ramesses","Xerxes","Count Hogula"},
+				"FR","cm_vampire","Default","octopus","Castle"
+				},
+
+				{
+				"The Iron Curtain",
+				{"ushanka","war_sovietcomrade1","war_sovietcomrade1","ushanka"},
+				{"Alex","Sergey","Vladimir","Andrey","Dimitry","Ivan","Oleg","Kostya","Anton","Eugene"},
+				"R","cm_soviet","Russian","skull","Castle"
+				},
+
+				{
+				"Desert Storm",
+				{"war_desertofficer","war_desertgrenadier1","war_desertmedic","war_desertsapper1","war_desertgrenadier2","war_desertgrenadier4","war_desertsapper2","war_desertgrenadier5"},
+				{"Brigadier Briggs","Lt. Luke","Sgt. Smith","Corporal Calvin","Frank","Joe","Sam","Donald"},
+				"F","cm_birdy","Default","Grave","Castle"
+				},
+
+				--{
+				--"Sci-Fi",
+				--{"scif_2001O","scif_2001Y","scif_BrainSlug","scif_BrainSlug2","scif_Geordi","scif_SparkssHelmet","scif_cosmonaut","scif_cyberpunk","scif_swDarthvader","scif_swStormtrooper"},
+				--{},
+				--"R","cm_birdy","Default","Grave","Castle"
+				--},
+
+
+
+
+				--
+
+				--{
+				--,
+				--{},
+				--{},
+				--"R","cm_birdy","Default","Grave","Castle"
+				--},
+
+				-- don't forget new additions need to be added to:
+				--pMode = {"Clowns","Street Fighters","Cybernetic Empire","Color Squad","Fruit","The Police","The Ninja-Samurai Alliance","Pokemon","The Zoo","The Devs","The Hospital"}
+				-- but maybe we can just get the size of this array and automatically generate a list instead
+
+
+				{
+				"The Hospital",
+				{"doctor","nurse","war_britmedic","war_desertmedic","war_germanww2medic"},
+				{"Dr. Blackwell","Dr. Drew","Dr. Harvey","Dr. Crushing","Dr. Jenner","Dr. Barnard","Dr. Parkinson","Dr. Banting","Dr. Horace","Dr. Hollows","Dr. Jung"},
+				"R","cm_birdy","Default","heart","Castle"
+				}
+
+				}
+
+
+--local menuArray =	{
+--			"Initialisation Menu", "Team Menu"
+--			}
+
+--local hatArray = 	{hahahaha, you're joking, right?}
+--[[well, here are most of them as vaguely ordered by theme, there may be some duplicates
+NoHat,
+NinjaFull,NinjaStraight,NinjaTriangle,Samurai,StrawHat,StrawHatEyes,StrawHatFacial,naruto
+sm_daisy,sm_luigi,sm_mario,sm_peach,sm_toad,sm_wario,
+ShortHair_Black,ShortHair_Brown,ShortHair_Grey,ShortHair_Red,ShortHair_Yellow
+hair_blue,hair_green,hair_red,hair_yellow,hair_purple,hair_grey,hair_orange,hair_pink
+Skull,Jason,ShaggyYeti,Zombi,cyclops,Mummy,hogpharoah,vampirichog
+cap_blue,cap_red,cap_green,cap_junior,cap_yellow,cap_thinking
+WhySoSerious,clown-copper,clown-crossed,clown,Joker
+bobby,bobby2v,policecap,policegirl,royalguard,
+spcartman,spstan,spkenny,spkyle,
+sf_balrog,sf_blanka,sf_blankatoothless,sf_chunli,sf_guile,sf_honda,sf_ken,sf_ryu,sf_vega
+Glasses,lambda,SunGlasses,Terminator_Glasses,Moustache_glasses
+Laminaria,Dragon,
+cyborg1,cyborg2,
+dish_Ladle,dish_SauceBoatSilver,dish_Teacup,dish_Teapot
+laurel,flag_french,flag_germany,flag_italy,flag_usa
+fr_apple,fr_banana,fr_lemon,fr_orange,fr_pumpkin,fr_tomato
+doctor,nurse,war_britmedic,war_desertmedic,war_germanww2medic,
+poke_ash,poke_charmander,poke_chikorita,poke_jigglypuff,
+poke_lugia,poke_mudkip,poke_pikachu,poke_slowpoke,poke_squirtle,poke_voltorb
+zoo_Bat,zoo_Beaver,zoo_Bunny,zoo_Deer,zoo_Hedgehog,zoo_Moose,zoo_Pig,zoo_Porkey,zoo_Sheep
+zoo_chicken,zoo_elephant,zoo_fish,zoo_frog,zoo_snail,zoo_turtle
+bushhider,cratehider,Disguise,
+tf_demoman,tf_scout,Sniper,
+Bandit,thug,anzac,Cowboy
+pirate_jack,pirate_jack_bandana,
+tiara,crown,royalguard
+punkman,Einstein,
+sth_Amy,sth_AmyClassic,sth_Eggman,sth_Knux,sth_Metal,sth_Shadow,sth_Sonic,sth_SonicClassic,sth_Super,sth_Tails
+vc_gakupo,vc_gumi,vc_kaito,vc_len,vc_luka,vc_meiko,vc_miku,vc_rin
+touhou_chen,touhou_marisa,touhou_patchouli,touhou_remelia,touhou_suwako,touhou_yukari,
+TeamHeadband,TeamSoldier,TeamTopHat,TeamWheatley,cap_team,hair_team,
+bb_bob,bb_bub,bb_cororon,bb_kululun,bubble,
+Viking,spartan,swordsmensquire,knight,dwarf,
+WizardHat,tophats,pinksunhat,ushanka,mexicansunbrero,HogInTheHat,
+4gsuif,
+AkuAku,
+noface,
+Coonskin3,
+Dan,
+Dauber,
+Eva_00b,Eva_00y,
+Evil,InfernalHorns,angel,
+Gasmask,
+IndianChief,Cowboy,
+MegaHogX,
+Meteorhelmet,
+Moustache,
+OldMan,
+Pantsu,
+Plunger,
+RSR,
+Rain,stormcloud,DayAndNight,
+chuckl,Rambo,RobinHood,
+Santa,snowhog,ShaggyYeti,eastertop,
+Sleepwalker,
+SparkleSuperFun,
+SunWukong,
+android,
+beefeater,
+car,
+chef,
+constructor,
+footballhelmet,
+judo,
+lamp,
+mechanicaltoy,
+mickey_ears,
+snorkel,
+quotecap,
+rasta,
+
+metalband,
+kiss_criss,kiss_frehley,kiss_simmons,kiss_stanley,mp3,Elvis
+mv_Spidey,mv_Venom,
+ntd_Falcon,ntd_Kirby,ntd_Link,ntd_Samus,
+scif_2001O,scif_2001Y,scif_BrainSlug,scif_BrainSlug2,scif_Geordi,scif_SparkssHelmet,
+scif_cosmonaut,scif_cyberpunk,scif_swDarthvader,scif_swStormtrooper,
+war_UNPeacekeeper01,war_UNPeacekeeper02,
+war_airwarden02,war_airwarden03,
+war_americanww2helmet,
+war_britmedic,war_britpthhelmet,war_britsapper,
+war_desertgrenadier1,war_desertgrenadier2,war_desertgrenadier4,war_desertgrenadier5,war_desertmedic,
+war_desertofficer,war_desertsapper1,war_desertsapper2,
+war_frenchww1gasmask,war_frenchww1helmet,
+war_germanww1helmet2,war_germanww1tankhelm,war_germanww2medic,war_germanww2pith,
+war_grenadier1,war_trenchgrenadier1,war_trenchgrenadier2,war_trenchgrenadier3,
+war_plainpith,
+war_sovietcomrade1,war_sovietcomrade2,
+war_trenchfrench01,war_trenchfrench02,]]
+
+local colorArray = 	{
+					--{0xff0000ff, "0xff0000ff", "Red"}, -- look up hw red
+					{0xff4980c1, "0xff4980c1", "Blue"},
+					{0xff1de6ba, "0xff1de6ba", "Teal"},
+					{0xffb541ef, "0xffb541ef", "Purple"},
+					{0xffe55bb0, "0xffe55bb0", "Pink"},
+					{0xff20bf00, "0xff20bf00", "Green"},
+					{0xfffe8b0e, "0xfffe8b0e", "Orange"},
+					{0xff5f3605, "0xff5f3605", "Brown"},
+					{0xffffff01, "0xffffff01", "Yellow"}
+					}
+
+local graveArray = 	{
+					"Badger", "Bone", "bp2", "bubble", "Cherry",
+					"chest", "coffin", "deadhog", "dragonball", "Duck2",
+					"Earth", "Egg", "eyecross", "Flower", "Ghost",
+					"Grave", "heart", "money", "mouton1", "octopus",
+					"plant2", "plant3", "Plinko", "pokeball", "pyramid",
+					"ring", "Rip", "Rubberduck", "Simple", "skull",
+					"star", "Status"
+					}
+
+local voiceArray = 	{
+					"British","Classic","Default","Default_es","Default_uk",
+					"HillBilly","Mobster","Pirate","Robot","Russian","Singer",
+					"Surfer"
+					}
+
+local fortArray =	{
+					"Cake", "Castle", "Earth", "EvilChicken", "Flowerhog",
+					"Hydrant", "Lego", "Plane", "Statue", "Tank",
+					"UFO", "Wood"
+					}
+
+-- non-exhaustive list of flags, feel free to choose others
+local flagArray = 	{
+					"cm_binary", "cm_birdy", "cm_earth", "cm_pirate", "cm_star",
+					"cm_hurrah", "cm_hax0r", "cm_balrog", "cm_spider", "cm_eyeofhorus"
+					}
+
+local gameFlagList =	{
+			{"gfForts", false, gfForts},
+			{"gfMultiWeapon", false, gfMultiWeapon},
+			{"gfBorder", false, gfBorder},
+			{"gfSolidLand", false, gfSolidLand},
+			{"gfDivideTeams", false, gfDivideTeams},
+			{"gfLowGravity", false, gfLowGravity},
+			{"gfLaserSight", true, gfLaserSight},
+			{"gfInvulnerable", false, gfInvulnerable},
+			{"gfMines", false, gfMines},
+			{"gfVampiric", false, gfVampiric},
+			{"gfKarma", false, gfKarma},
+			{"gfArtillery", false, gfArtillery},
+			{"gfOneClanMode", false, gfOneClanMode},
+			{"gfRandomOrder", false, gfRandomOrder},
+			{"gfKing", false, gfKing},
+			{"gfPlaceHog", false, gfPlaceHog},
+			{"gfSharedAmmo", false, gfSharedAmmo},
+			{"gfDisableGirders", false, gfDisableGirders},
+			{"gfExplosives", false, gfExplosives},
+			{"gfDisableLandObjects", false, gfDisableLandObjects},
+			{"gfAISurvival", false, gfAISurvival},
+			{"gfInfAttack", true, gfInfAttack},
+			{"gfResetWeps", false, gfResetWeps},
+			{"gfResetHealth", false, gfResetHealth},
+			{"gfPerHogAmmo", false, gfPerHogAmmo},
+			{"gfDisableWind", false, gfDisableWind},
+			{"gfMoreWind", false, gfMoreWind},
+			{"gfTagTeam", false, gfTagTeam}
+			}
+
+local themeList = 	{"Art", "Bamboo", "Bath", --[["Blox",]] "Brick", "Cake", "Castle", "Cave", "Cheese",
+		"Christmas", "City", "Compost", --[["CrazyMission", "Deepspace",]] "Desert", "Earthrise",
+		--[["Eyes",]] "Freeway", "Golf", "Halloween", "Hell", --[["HogggyWood",]] "Island", "Jungle", "Nature",
+		"Olympics", "Planes", "Sheep", "Snow", "Stage", "Underwater"
+		}
+
+local mapList = 	{
+		"Bamboo", "BambooPlinko", "Basketball", "Bath", "Blizzard", "Blox", "Bubbleflow",
+		"Battlefield", "Cake", "Castle", "Cave", "Cheese", "Cogs", "Control", "Earthrise",
+		"Eyes", "Hammock", "Hedgelove", "Hedgewars", "Hogville", "Hydrant", "Islands",
+		"Knockball", "Lonely_Island", "Mushrooms", "Octorama", "PirateFlag",
+		"Plane", "Ropes", "Ruler", "Sheep", "ShoppaKing", "Sticks", "Trash", "Tree",
+		"TrophyRace"
+		}
+
+--local spriteArray = {
+--					{sprBigDigit,			"sprBigDigit",			0}
+--					}
+
+local spriteIDArray = {sprWater, sprCloud, sprBomb, sprBigDigit, sprFrame,
+sprLag, sprArrow, sprBazookaShell, sprTargetP, sprBee,
+sprSmokeTrace, sprRopeHook, sprExplosion50, sprMineOff,
+sprMineOn, sprMineDead, sprCase, sprFAid, sprDynamite, sprPower,
+sprClusterBomb, sprClusterParticle, sprFlame,
+sprHorizont, sprHorizontL, sprHorizontR, sprSky, sprSkyL, sprSkyR,
+sprAMSlot, sprAMAmmos, sprAMAmmosBW, sprAMSlotKeys, sprAMCorners,
+sprFinger, sprAirBomb, sprAirplane, sprAmAirplane, sprAmGirder,
+sprHHTelepMask, sprSwitch, sprParachute, sprTarget, sprRopeNode,
+sprQuestion, sprPowerBar, sprWindBar, sprWindL, sprWindR,
+
+sprFireButton, sprArrowUp, sprArrowDown, sprArrowLeft, sprArrowRight,
+sprJumpWidget, sprAMWidget, sprPauseButton, sprTimerButton, sprTargetButton,
+
+sprFlake, sprHandRope, sprHandBazooka, sprHandShotgun,
+sprHandDEagle, sprHandAirAttack, sprHandBaseball, sprPHammer,
+sprHandBlowTorch, sprBlowTorch, sprTeleport, sprHHDeath,
+sprShotgun, sprDEagle, sprHHIdle, sprMortar, sprTurnsLeft,
+sprKamikaze, sprWhip, sprKowtow, sprSad, sprWave,
+sprHurrah, sprLemonade, sprShrug, sprJuggle, sprExplPart, sprExplPart2,
+sprCakeWalk, sprCakeDown, sprWatermelon,
+sprEvilTrace, sprHellishBomb, sprSeduction, sprDress,
+sprCensored, sprDrill, sprHandDrill, sprHandBallgun, sprBalls,
+sprPlane, sprHandPlane, sprUtility, sprInvulnerable, sprVampiric, sprGirder,
+sprSpeechCorner, sprSpeechEdge, sprSpeechTail,
+sprThoughtCorner, sprThoughtEdge, sprThoughtTail,
+sprShoutCorner, sprShoutEdge, sprShoutTail,
+sprSniperRifle, sprBubbles, sprJetpack, sprHealth, sprHandMolotov, sprMolotov,
+sprSmoke, sprSmokeWhite, sprShell, sprDust, sprSnowDust, sprExplosives, sprExplosivesRoll,
+sprAmTeleport, sprSplash, sprDroplet, sprBirdy, sprHandCake, sprHandConstruction,
+sprHandGrenade, sprHandMelon, sprHandMortar, sprHandSkip, sprHandCluster,
+sprHandDynamite, sprHandHellish, sprHandMine, sprHandSeduction, sprHandVamp,
+sprBigExplosion, sprSmokeRing, sprBeeTrace, sprEgg, sprTargetBee, sprHandBee,
+sprFeather, sprPiano, sprHandSineGun, sprPortalGun, sprPortal,
+sprCheese, sprHandCheese, sprHandFlamethrower, sprChunk, sprNote,
+sprSMineOff, sprSMineOn, sprHandSMine, sprHammer,
+sprHandResurrector, sprCross, sprAirDrill, sprNapalmBomb,
+sprBulletHit, sprSnowball, sprHandSnowball, sprSnow,
+sprSDFlake, sprSDWater, sprSDCloud, sprSDSplash, sprSDDroplet, sprTardis,
+sprSlider, sprBotlevels, sprHandKnife, sprKnife, sprStar, sprIceTexture, sprIceGun, sprFrozenHog, sprAmRubber, sprBoing}
+
+
+local spriteTextArray = {"sprWater", "sprCloud", "sprBomb", "sprBigDigit", "sprFrame",
+"sprLag", "sprArrow", "sprBazookaShell", "sprTargetP", "sprBee",
+"sprSmokeTrace", "sprRopeHook", "sprExplosion50", "sprMineOff",
+"sprMineOn", "sprMineDead", "sprCase", "sprFAid", "sprDynamite", "sprPower",
+"sprClusterBomb", "sprClusterParticle", "sprFlame", "sprHorizont",
+"sprHorizontL", "sprHorizontR", "sprSky", "sprSkyL", "sprSkyR", "sprAMSlot",
+"sprAMAmmos", "sprAMAmmosBW", "sprAMSlotKeys", "sprAMCorners", "sprFinger",
+"sprAirBomb", "sprAirplane", "sprAmAirplane", "sprAmGirder", "sprHHTelepMask",
+ "sprSwitch", "sprParachute", "sprTarget", "sprRopeNode", "sprQuestion",
+ "sprPowerBar", "sprWindBar", "sprWindL", "sprWindR", "sprFireButton",
+ "sprArrowUp", "sprArrowDown", "sprArrowLeft", "sprArrowRight", "sprJumpWidget",
+ "sprAMWidget", "sprPauseButton", "sprTimerButton", "sprTargetButton",
+ "sprFlake", "sprHandRope", "sprHandBazooka", "sprHandShotgun",
+ "sprHandDEagle", "sprHandAirAttack", "sprHandBaseball", "sprPHammer",
+ "sprHandBlowTorch", "sprBlowTorch", "sprTeleport", "sprHHDeath", "sprShotgun",
+ "sprDEagle", "sprHHIdle", "sprMortar", "sprTurnsLeft", "sprKamikaze", "sprWhip",
+ "sprKowtow", "sprSad", "sprWave", "sprHurrah", "sprLemonade", "sprShrug",
+ "sprJuggle", "sprExplPart", "sprExplPart2", "sprCakeWalk", "sprCakeDown",
+ "sprWatermelon", "sprEvilTrace", "sprHellishBomb", "sprSeduction", "sprDress",
+ "sprCensored", "sprDrill", "sprHandDrill", "sprHandBallgun", "sprBalls", "sprPlane",
+ "sprHandPlane", "sprUtility", "sprInvulnerable", "sprVampiric", "sprGirder",
+ "sprSpeechCorner", "sprSpeechEdge", "sprSpeechTail", "sprThoughtCorner",
+ "sprThoughtEdge", "sprThoughtTail", "sprShoutCorner", "sprShoutEdge",
+ "sprShoutTail", "sprSniperRifle", "sprBubbles", "sprJetpack", "sprHealth",
+ "sprHandMolotov", "sprMolotov", "sprSmoke", "sprSmokeWhite", "sprShell", "sprDust",
+ "sprSnowDust", "sprExplosives", "sprExplosivesRoll", "sprAmTeleport", "sprSplash",
+ "sprDroplet", "sprBirdy", "sprHandCake", "sprHandConstruction", "sprHandGrenade",
+ "sprHandMelon", "sprHandMortar", "sprHandSkip", "sprHandCluster", "sprHandDynamite",
+ "sprHandHellish", "sprHandMine", "sprHandSeduction", "sprHandVamp", "sprBigExplosion",
+ "sprSmokeRing", "sprBeeTrace", "sprEgg", "sprTargetBee", "sprHandBee", "sprFeather",
+ "sprPiano", "sprHandSineGun", "sprPortalGun", "sprPortal", "sprCheese", "sprHandCheese",
+ "sprHandFlamethrower", "sprChunk", "sprNote", "sprSMineOff", "sprSMineOn", "sprHandSMine",
+ "sprHammer", "sprHandResurrector", "sprCross", "sprAirDrill", "sprNapalmBomb", "sprBulletHit",
+ "sprSnowball", "sprHandSnowball", "sprSnow", "sprSDFlake", "sprSDWater", "sprSDCloud",
+ "sprSDSplash", "sprSDDroplet", "sprTardis", "sprSlider", "sprBotlevels", "sprHandKnife",
+ "sprKnife", "sprStar", "sprIceTexture", "sprIceGun", "sprFrozenHog", "sprAmRubber", "sprBoing"}
+
+ local reducedSpriteIDArray = {
+  sprBigDigit, sprTarget, sprKowtow, sprBee, sprAmGirder, sprExplosion50, sprGirder,sprCustom1,sprCustom2
+  }
+
+  local reducedSpriteTextArray = {
+  "sprBigDigit", "sprTarget", "sprKowtow", "sprBee", "sprAmGirder", "sprExplosion50", "sprGirder","sprCustom1","sprCustom2"
+  }
+
+----------------------------
+-- placement shite
+----------------------------
+
+local landType = 0
+local superDelete = false
+local ufoGear = nil
+ufoFuel = 0
+mapID = 1
+local portalDistance = 5000/5
+local helpDisabled = false  --determines whether help popups pop up
+local CG = nil -- this is the visual gear displayed at CursorX, CursorY
+local crateSprite = nil-- this is a visual gear aid for crate placement
+local tSpr = {}
+
+local cGear = nil -- detects placement of girders and objects (using airattack)
+local curWep = amNothing
+local leftHeld = false
+local rightHeld = false
+local preciseOn = false
+
+-- primary placement categories
+local cIndex = 1 -- category index
+local cat = 	{
+				loc("Girder Placement Mode"),
+				loc("Rubber Placement Mode"),
+				loc("Mine Placement Mode"),
+				loc("Sticky Mine Placement Mode"),
+				loc("Air Mine Placement Mode"),
+				loc("Barrel Placement Mode"),
+				loc("Health Crate Placement Mode"),
+				loc("Weapon Crate Placement Mode"),
+				loc("Utility Crate Placement Mode"),
+				loc("Target Placement Mode"),
+				loc("Cleaver Placement Mode"),
+				loc("Advanced Repositioning Mode"),
+				loc("Tagging Mode"),
+				loc("Hog Identity Mode"),
+				loc("Team Identity Mode"),
+				loc("Health Modification Mode"),
+				--loc("Sprite Testing Mode"),
+				loc("Sprite Placement Mode"),
+				loc("Sprite Modification Mode"),
+				loc("Waypoint Placement Mode")
+				}
+
+
+local pMode = {}	-- pMode contains custom subsets of the main categories
+local pIndex = 1
+
+local genTimer = 0
+
+local CGR = 1 -- current girder rotation, we actually need this as HW remembers what rotation you last used
+
+local placedX = {} -- x coord of placed object
+local placedY = {} -- y coord of placed object
+local placedSpec = {} -- this is different depending on what was placed, for mines it is their time, for crates it is their content, (for girders/rubbers it used to be their rotation, and for sprites, their name, but this has been moved to different variables to allow more complex / smooth editing)
+--local placedSuperSpec = {} -- used to be used by girders/rubbers/sprites for their landFlag
+local placedType = {} -- what kind of object was placed: mine, crate, girder, rubber, barrel, etc.
+
+local placedTint = {} -- only girders/rubbers/sprites use this, it is their tint / colouration
+local placedSprite = {} -- what sprite was placed
+local placedFrame = {} -- what frame of sprite was placed (rotation for girders / rubber)
+local placedLandFlags = {}
+local placedHWMapFlag = {} -- this is what HWMapConverter uses
+local placedCount = 0 -- do we really need this?
+
+local sSprite -- sprite overlay that glows to show selected sprites
+local sCirc -- circle that appears around selected gears
+local sGear = nil
+local closestDist
+local closestGear = nil
+local closestSpriteID = nil
+
+------------------------
+-- menu shite (more or less unused currently)
+------------------------
+--local menuEnabled = false
+--local menuIndex = 1
+--local menu = {}
+--local subMenu = {}
+--local sMI = 1 -- sub menu index
+--local preMenuCfg
+--local postMenuCfg
+--local initMenu	=	{
+--					{"Selected Menu",	"Initialisation Menu"},
+--					{"List of Gameflags",	""},
+--					{"List of Gameflags",	""}
+--					}
+
+------------------------
+-- SOME GENERAL METHODS
+------------------------
+
+function BoolToString(boo)
+	if boo == true then
+		return("true")
+	else
+		return("false")
+	end
+end
+
+function GetDistFromGearToXY(gear, g2X, g2Y)
+
+	g1X, g1Y = GetGearPosition(gear)
+	q = g1X - g2X
+	w = g1Y - g2Y
+
+	return ( (q*q) + (w*w) )
+
+end
+
+------------------------------------------------------------
+-- STUFF FOR LOADING SPECIAL POINTS / HWMAP CONVERSION
+------------------------------------------------------------
+
+local specialPointsX = {}
+local specialPointsY = {}
+local specialPointsFlag = {}
+local specialPointsCount = 0
+
+function onSpecialPoint(x,y,flag)
+    specialPointsX[specialPointsCount] = x
+    specialPointsY[specialPointsCount] = y
+	specialPointsFlag[specialPointsCount] = flag
+    specialPointsCount = specialPointsCount + 1
+end
+
+-- you know you could probably add multiple layers to this to get more points
+-- after the first set is expended have the last 1 be 127
+-- and then increment some other counter so like
+
+-- bobCounter = 1
+-- specialPoint(5)
+-- specialPoint(127)
+-- specialPoint(5)
+
+-- if BobCounter = 1 then
+-- 		if specialPointsFlag == 5 then createMine
+--		if specialPointFlag == 127 then bobCounter = 2
+-- elseif bobCounter == 2 then
+-- 		if specialPointsFlag == 5 then createExlosives
+-- end
+--
+
+-- this function interprets special points that have been embedded into an HWPMAP
+function InterpretPoints()
+
+	-- flags run from 0 to 127
+	for i = 0, (specialPointsCount-1) do
+
+		-- Mines
+		if specialPointsFlag[i] == 1 then
+			SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 1)
+		elseif specialPointsFlag[i] == 2 then
+			SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 1000)
+		elseif specialPointsFlag[i] == 3 then
+			SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 2000)
+		elseif specialPointsFlag[i] == 4 then
+			SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 3000)
+		elseif specialPointsFlag[i] == 5 then
+			SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 4000)
+		elseif specialPointsFlag[i] == 6 then
+			SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 5000)
+
+		-- Sticky Mines
+		elseif specialPointsFlag[i] == 7 then
+			AddGear(specialPointsX[i], specialPointsY[i], gtSMine, 0, 0, 0, 0)
+
+		-- Air Mines
+		elseif specialPointsFlag[i] == 8 then
+			AddGear(specialPointsX[i], specialPointsY[i], gtAirMine, 0, 0, 0, 0)
+
+		-- Health Crates
+		elseif specialPointsFlag[i] == 9 then
+			SetHealth(SpawnHealthCrate(specialPointsX[i],specialPointsY[i]),25)
+		elseif specialPointsFlag[i] == 10 then
+			SetHealth(SpawnHealthCrate(specialPointsX[i],specialPointsY[i]),50)
+		elseif specialPointsFlag[i] == 11 then
+			SetHealth(SpawnHealthCrate(specialPointsX[i],specialPointsY[i]),75)
+		elseif specialPointsFlag[i] == 12 then
+			SetHealth(SpawnHealthCrate(specialPointsX[i],specialPointsY[i]),100)
+
+		-- Cleaver
+		elseif specialPointsFlag[i] == 13 then
+			AddGear(specialPointsX[i], specialPointsY[i], gtKnife, 0, 0, 0, 0)
+
+		-- Target
+		elseif specialPointsFlag[i] == 14 then
+			AddGear(specialPointsX[i], specialPointsY[i], gtTarget, 0, 0, 0, 0)
+
+		--Barrels
+		elseif specialPointsFlag[i] == 15 then
+			SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),1)
+		elseif specialPointsFlag[i] == 16 then
+			SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),25)
+		elseif specialPointsFlag[i] == 17 then
+			SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),50)
+		elseif specialPointsFlag[i] == 18 then
+			SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),75)
+		elseif specialPointsFlag[i] == 19 then
+			SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),100)
+
+		-- There are about 58+- weps / utils
+		-- Weapon Crates
+		elseif (specialPointsFlag[i] >= 20) and (specialPointsFlag[i] < (#atkArray+20)) then
+			tempG = SpawnAmmoCrate(specialPointsX[i],specialPointsY[i],atkArray[specialPointsFlag[i]-19][1])
+			setGearValue(tempG,"caseType","ammo")
+			setGearValue(tempG,"contents",atkArray[specialPointsFlag[i]-19][2])
+
+
+		-- Utility Crates
+		elseif (specialPointsFlag[i] >= (#atkArray+20)) and (specialPointsFlag[i] < (#atkArray+20+#utilArray)) then
+			tempG = SpawnUtilityCrate(specialPointsX[i],specialPointsY[i],utilArray[specialPointsFlag[i]-19-#atkArray][1])
+			setGearValue(tempG,"caseType","util")
+			setGearValue(tempG,"contents",utilArray[specialPointsFlag[i]-19-#atkArray][2])
+
+		--79-82 (reserved for future wep crates)
+		--89,88,87,86 and 85,84,83,82 (reserved for the 2 custom sprites and their landflags)
+
+		--90-99 reserved for scripted structures
+		--[[elseif specialPointsFlag[i] == 90 then
+			--PlaceStruc("generator")
+		elseif specialPointsFlag[i] == 91 then
+			--PlaceStruc("healingstation")
+		elseif specialPointsFlag[i] == 92 then
+			--PlaceStruc("respawner")
+		elseif specialPointsFlag[i] == 93 then
+			--PlaceStruc("teleportationnode")
+		elseif specialPointsFlag[i] == 94 then
+			--PlaceStruc("biofilter")
+		elseif specialPointsFlag[i] == 95 then
+			--PlaceStruc("supportstation")
+		elseif specialPointsFlag[i] == 96 then
+			--PlaceStruc("constructionstation")
+		elseif specialPointsFlag[i] == 97 then
+			--PlaceStruc("reflectorshield")
+		elseif specialPointsFlag[i] == 98 then
+			--PlaceStruc("weaponfilter")]]
+
+		elseif specialPointsFlag[i] == 98 then
+			portalDistance = div(specialPointsX[i],5)
+			ufoFuel = specialPointsY[i]
+
+		-- Normal Girders
+		elseif specialPointsFlag[i] == 100 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		elseif specialPointsFlag[i] == 101 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		elseif specialPointsFlag[i] == 102 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		elseif specialPointsFlag[i] == 103 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		elseif specialPointsFlag[i] == 104 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		elseif specialPointsFlag[i] == 105 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		elseif specialPointsFlag[i] == 106 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		elseif specialPointsFlag[i] == 107 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+
+		-- Invulnerable Girders
+		elseif specialPointsFlag[i] == 108 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 0, 2516582650, nil, nil, nil, lfIndestructible)
+		elseif specialPointsFlag[i] == 109 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 1, 2516582650, nil, nil, nil, lfIndestructible)
+		elseif specialPointsFlag[i] == 110 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+		elseif specialPointsFlag[i] == 111 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 3, 2516582650, nil, nil, nil, lfIndestructible)
+		elseif specialPointsFlag[i] == 112 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		elseif specialPointsFlag[i] == 113 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+		elseif specialPointsFlag[i] == 114 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+		elseif specialPointsFlag[i] == 115 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+
+		-- Icy Girders
+		elseif specialPointsFlag[i] == 116 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 0, 16448250, nil, nil, nil, lfIce)
+		elseif specialPointsFlag[i] == 117 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 1, 16448250, nil, nil, nil, lfIce)
+		elseif specialPointsFlag[i] == 118 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 2, 16448250, nil, nil, nil, lfIce)
+		elseif specialPointsFlag[i] == 119 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 3, 16448250, nil, nil, nil, lfIce)
+		elseif specialPointsFlag[i] == 120 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 4, 16448250, nil, nil, nil, lfIce)
+		elseif specialPointsFlag[i] == 121 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 5, 16448250, nil, nil, nil, lfIce)
+		elseif specialPointsFlag[i] == 121 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 6, 16448250, nil, nil, nil, lfIce)
+		elseif specialPointsFlag[i] == 123 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 7, 16448250, nil, nil, nil, lfIce)
+
+		-- Rubber Bands
+		elseif specialPointsFlag[i] == 124 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		elseif specialPointsFlag[i] == 125 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		elseif specialPointsFlag[i] == 126 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+		elseif specialPointsFlag[i] == 127 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+
+		-- Waypoints
+		else -- 0 / no value
+			PlaceWaypoint(specialPointsX[i],specialPointsY[i])
+		end
+
+	end
+
+end
+
+----------------------------
+-- just fucking around
+----------------------------
+-- ancient stuff that no longer has any relevance
+--[[
+function BoostVeloctiy(gear)
+
+	if (GetGearType(gear) == gtSMine) or
+		(GetGearType(gear) == gtMine) or
+		(GetGearType(gear) == gtHedgehog) then
+
+			dx,dy = GetGearVelocity(gear)
+			SetGearVelocity(gear,dx*1.5,dy*1.5)
+		end
+
+end
+
+-- use this stuff when you want to get some idea of land and/or blow up /everything/
+function CheckGrenades(gear)
+
+	if GetGearType(gear) == gtGrenade then
+		dx, dy = GetGearVelocity(gear)
+		if (dy == 0) then
+
+		else
+			DeleteGear(gear)
+		end
+	end
+
+end
+
+function BlowShitUpPartTwo()
+
+	destroyMap = false
+	runOnGears(CheckGrenades)
+
+end
+
+function BlowShitUp()
+
+	destroyMap = true
+
+	mapWidth = 4096
+	mapHeight = 2048
+	blockSize = 50
+
+	mY = 0
+
+	while (mY < WaterLine) do
+
+		mX = 0
+		mY = mY + 1*blockSize
+		while (mX < mapWidth) do
+
+			mX = mX + (1*blockSize)
+			gear = AddGear(mX, mY, gtGrenade, 0, 0, 0, 5000)
+			SetState(gear, bor(GetState(gear),gstInvisible) )
+
+		end
+
+	end
+
+end]]
+
+
+-- you know, using this it might be possible to have a self destructing track,
+-- or a moving one.
+-- edit: this was from the gold old days before it was possible to erase sprites)
+--[[function BoomGirder(x,y,rot)
+	girTime = 1
+	if rot < 4 then
+				AddGear(x, y, gtGrenade, 0, 0, 0, girTime)
+	elseif rot == 4 then
+				g = AddGear(x-45, y, gtGrenade, 0, 0, 0, girTime) -- needed?
+				g = AddGear(x-30, y, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed?
+				g = AddGear(x+30, y, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x+45, y, gtGrenade, 0, 0, 0, girTime) -- needed?
+	elseif rot == 5 then ------- diag
+				g = AddGear(x+45, y+45, gtGrenade, 0, 0, 0, girTime) --n
+				g = AddGear(x+30, y+30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed?
+				g = AddGear(x-30, y-30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x-45, y-45, gtGrenade, 0, 0, 0, girTime) --n
+	elseif rot == 6 then
+				g = AddGear(x, y-45, gtGrenade, 0, 0, 0, girTime) -- needed?
+				g = AddGear(x, y+30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed?
+				g = AddGear(x, y-30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x, y+45, gtGrenade, 0, 0, 0, girTime) -- needed?
+	elseif rot == 7 then -------
+				g = AddGear(x+45, y-45, gtGrenade, 0, 0, 0, girTime) --n
+				g = AddGear(x+30, y-30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed?
+				g = AddGear(x-30, y+30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x-45, y+45, gtGrenade, 0, 0, 0, girTime) --n
+	end
+end]]
+
+--[[function SpecialGirderPlacement(x,y,rot)
+
+	PlaceGirder(x, y, rot)
+	girTime = 10000
+
+	if rot < 4 then
+				AddGear(x, y, gtGrenade, 0, 0, 0, girTime)
+	elseif rot == 4 then
+				g = AddGear(x-30, y, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x+30, y, gtGrenade, 0, 0, 0, girTime)
+	elseif rot == 5 then -------
+				g = AddGear(x+30, y+30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x-30, y-30, gtGrenade, 0, 0, 0, girTime)
+	elseif rot == 6 then
+				g = AddGear(x, y+30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x, y-30, gtGrenade, 0, 0, 0, girTime)
+	elseif rot == 7 then -------
+				g = AddGear(x+30, y-30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x-30, y+30, gtGrenade, 0, 0, 0, girTime)
+	end
+
+end]]
+
+--shoppabalance crap
+function AddShoppaPoint(x,y,c)
+	table.insert(shoppaPX, x)
+	table.insert(shoppaPY, y)
+	table.insert(shoppaPR, c)
+end
+
+function GetRankedColour(r)
+	if r == 1 then
+		return(0xFF0000FF)
+	elseif r == 2 then
+		return(0xFFFF00FF)
+	elseif r == 3 then
+		return(0x00FF00FF)
+	elseif r == 4 then
+		return(0x0000FFFF)
+	elseif r == 5 then
+		return(0xFF00FFFF)
+	end
+end
+
+-----------------------------------------
+-- PRIMARY HEDGE EDITOR PLACEMENT STUFF
+-----------------------------------------
+
+function GetClosestGear()
+	closestDist = 999999999
+	closestGear = nil
+	--sGear = nil
+	runOnGears(SelectGear)
+	return(closestGear)
+end
+
+function SelectGear(gear)
+
+	d = GetDistFromGearToXY(gear, placedX[placedCount], placedY[placedCount])
+
+	if d < closestDist then
+		closestDist = d
+		closestGear = gear
+	end
+
+end
+
+function PlaceWaypoint(x,y)
+
+	placedX[placedCount] = x
+	placedY[placedCount] = y
+	placedType[placedCount] = loc("Waypoint Placement Mode")
+	placedLandFlags[placedCount] = nil -- use this to specify waypoint type maybe
+	placedHWMapFlag[placedCount] = 0
+
+	placedSprite[placedCount] = vgtCircle
+	placedSpec[placedCount] = AddVisualGear(x,y,vgtCircle,0,true)
+	placedTint[placedCount] = 0xFF0000FF
+	placedFrame[placedCount] = 1										--rad is 450
+	SetVisualGearValues(placedSpec[placedCount], x, y, 20, 100, 1, 10, 0, 450, 5, placedTint[placedCount])
+	placedCount = placedCount +1
+
+end
+
+function LoadSprite(pX, pY, pSprite, pFrame, pTint, p1, p2, p3, pLandFlags)
+
+	placedX[placedCount] = pX
+	placedY[placedCount] = pY
+	placedSpec[placedCount] = nil
+
+	if pSprite == sprAmGirder then
+
+		placedType[placedCount] = loc("Girder Placement Mode")
+
+		--newHWMapStuff
+		if pLandFlags == lfIndestructible then	specialMod = 1
+		elseif pLandFlags == lfIce then	specialMod = 2
+		else specialMod = 0
+		end
+		placedHWMapFlag[placedCount] = pFrame+100+(8*specialMod)
+
+
+	elseif pSprite == sprAmRubber then
+
+		placedType[placedCount] = loc("Rubber Placement Mode")
+
+		--newHWMapStuff
+		if pFrame == 0 then placedHWMapFlag[placedCount] = 124
+		elseif pFrame == 1 then placedHWMapFlag[placedCount] = 125
+		elseif pFrame == 2 then placedHWMapFlag[placedCount] = 126
+		elseif pFrame == 3 then placedHWMapFlag[placedCount] = 127
+		end
+
+	else
+		placedType[placedCount] = loc("Sprite Placement Mode")
+	end
+
+	--placedLandFlags[placedCount] = pLandFlags
+	if pLandFlags == lfIce then
+		placedLandFlags[placedCount] = "lfIce"
+	elseif pLandFlags == lfIndestructible then
+		placedLandFlags[placedCount] = "lfIndestructible"
+	elseif pLandFlags == lfBouncy then
+		placedLandFlags[placedCount] = "lfBouncy"
+	else
+		placedLandFlags[placedCount] = "lfNormal"
+	end
+
+	--placedSuperSpec[placedCount] = nil
+
+	placedTint[placedCount] = pTint
+	placedFrame[placedCount] = pFrame
+
+	placedSprite[placedCount] = pSprite
+
+	PlaceSprite(pX, pY, pSprite, pFrame, pTint,	nil, nil, nil, pLandFlags)
+
+	placedCount = placedCount + 1
+
+end
+
+function CallPlaceSprite(pID)
+
+	if landType == lfIce then
+		placedLandFlags[pID] = "lfIce"
+		placedTint[pID] = 250 + (250*0x100) + (250*0x10000) + (0*0x1000000) -- A BGR
+	elseif landType == lfIndestructible then
+		placedLandFlags[pID] = "lfIndestructible"
+		placedTint[pID] = 250 + (0*0x100) + (0*0x10000) + (150*0x1000000) -- A BGR
+	elseif landType == lfBouncy then
+		placedLandFlags[pID] = "lfBouncy"
+		placedTint[pID] = 250 + (0*0x100) + (250*0x10000) + (0*0x1000000) -- A BGR
+	else
+		placedLandFlags[pID] = "lfNormal"
+		--placedTint[pID] = nil
+		placedTint[pID] = 255 + (255*0x100) + (255*0x10000) + (255*0x1000000) -- A BGR
+	end
+
+	PlaceSprite(placedX[pID], placedY[pID], placedSprite[pID], placedFrame[pID],
+		placedTint[pID],
+		nil, -- overrite existing land
+		nil, nil, -- this stuff specifies flipping
+		landType)
+
+end
+
+function SelectClosestSprite()
+
+	closestDist = 999999999
+	closestSpriteID = nil -- just in case
+
+	for i = 0, (placedCount-1) do
+		if (placedType[i] == loc("Girder Placement Mode"))
+			or (placedType[i] == loc("Rubber Placement Mode"))
+			or (placedType[i] == loc("Sprite Placement Mode"))
+		then
+				q = placedX[i] - placedX[placedCount]
+				w = placedY[i] - placedY[placedCount]
+				d = ( (q*q) + (w*w) )
+				if d < closestDist then
+					closestDist = d
+					closestSpriteID = i
+					g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(sSprite)
+
+					--newTint = placedTint[i]
+					newTint = 0xFF00FFFF
+
+					SetVisualGearValues(sSprite, placedX[i], placedY[i], 0, 0, g5, placedFrame[i], 10000, placedSprite[i], 10000, newTint )
+
+				end
+		end
+	end
+
+end
+
+function EraseClosestSprite()
+	if closestSpriteID ~= nil then
+		EraseSprite(placedX[closestSpriteID], placedY[closestSpriteID], placedSprite[closestSpriteID], placedFrame[closestSpriteID],
+                    nil, -- erase land only where the pixels match the land flag provided
+                    nil, -- only erase the provided land flags. don't touch other land flags or LandPixels
+                    nil, -- flip sprite horizontally
+                    nil, -- flip sprite vertically
+                    placedLandFlags[closestSpriteID])
+
+		placedX[closestSpriteID] = nil
+		placedY[closestSpriteID] = nil
+		placedSpec[closestSpriteID] = nil
+		--placedSuperSpec[closestSpriteID] = nil
+		placedType[closestSpriteID] = nil
+		placedTint[closestSpriteID] = nil
+		placedSprite[closestSpriteID] = nil
+		placedFrame[closestSpriteID] = nil
+		placedLandFlags[closestSpriteID] = nil
+		closestSpriteID = nil
+		SetVisualGearValues(sSprite, 0, 0, 0, 0, 0, 1, 10000, sprAmGirder, 10000, 0x00000000 )
+	end
+end
+
+-- work this into the above two functions and edit them, later
+function EraseClosestWaypoint()
+
+	closestDist = 999999999
+	closestSpriteID = nil -- just in case
+
+	for i = 0, (placedCount-1) do
+		if (placedType[i] == loc("Waypoint Placement Mode")) then
+				q = placedX[i] - placedX[placedCount]
+				w = placedY[i] - placedY[placedCount]
+				d = ( (q*q) + (w*w) )
+				if d < closestDist then
+					closestDist = d
+					closestSpriteID = i
+					g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(sSprite)
+
+					--newTint = placedTint[i]
+					newTint = 0xFF00FFFF
+
+					SetVisualGearValues(sSprite, placedX[i], placedY[i], 0, 0, g5, placedFrame[i], 10000, placedSprite[i], 10000, newTint )
+
+				end
+		end
+	end
+
+	if closestSpriteID ~= nil then
+		DeleteVisualGear(placedSpec[closestSpriteID])
+		placedX[closestSpriteID] = nil
+		placedY[closestSpriteID] = nil
+		placedSpec[closestSpriteID] = nil
+		--placedSuperSpec[closestSpriteID] = nil
+		placedType[closestSpriteID] = nil
+		placedTint[closestSpriteID] = nil
+		placedSprite[closestSpriteID] = nil
+		placedFrame[closestSpriteID] = nil
+		placedLandFlags[closestSpriteID] = nil
+		closestSpriteID = nil
+		SetVisualGearValues(sSprite, 0, 0, 0, 0, 0, 1, 10000, sprAmGirder, 10000, 0x00000000 )
+	end
+end
+
+
+-- essentially called when user clicks the mouse
+-- with girders or an airattack
+function PlaceObject(x,y)
+
+	placedX[placedCount] = x
+	placedY[placedCount] = y
+	placedType[placedCount] = cat[cIndex]
+	placedSpec[placedCount] = pMode[pIndex]
+	--placedSuperSpec[placedCount] = nil
+	placedTint[placedCount] = nil
+	placedFrame[placedCount] = nil
+	placedLandFlags[placedCount] = nil
+	placedSprite[placedCount] = nil
+	placedHWMapFlag[placedCount] = nil
+
+	if cat[cIndex] == loc("Girder Placement Mode") then
+
+		if superDelete == false then
+			--lfObject and lfBasic
+			placedFrame[placedCount] = CGR
+			placedSprite[placedCount] = sprAmGirder
+			CallPlaceSprite(placedCount)
+
+			if landType == lfIndestructible then	specialMod = 1
+			elseif landType == lfIce then	specialMod = 2
+			else specialMod = 0
+			end
+			placedHWMapFlag[placedCount] = CGR+100+(8*specialMod)
+		else
+			placedType[placedCount] = "bogus" -- we need this so we don't think we've placed a new girder and are trying to erase the things we just placed??
+			SelectClosestSprite()
+			EraseClosestSprite()
+		end
+
+	elseif cat[cIndex] == loc("Rubber Placement Mode") then
+
+		if superDelete == false then
+			placedFrame[placedCount] = CGR
+			placedSprite[placedCount] = sprAmRubber
+
+			--CallPlaceSprite(placedCount)
+			--new ermagerd
+			placedLandFlags[placedCount] = "lfBouncy"
+			placedTint[placedCount] = 255 + (255*0x100) + (255*0x10000) + (255*0x1000000) -- A BGR
+			PlaceSprite(placedX[placedCount], placedY[placedCount], placedSprite[placedCount], placedFrame[placedCount],
+				placedTint[placedCount],
+				nil,
+				nil, nil,
+				landType)
+
+			if CGR == 0 then placedHWMapFlag[placedCount] = 124
+			elseif CGR == 1 then placedHWMapFlag[placedCount] = 125
+			elseif CGR == 2 then placedHWMapFlag[placedCount] = 126
+			elseif CGR == 3 then placedHWMapFlag[placedCount] = 127
+			end
+		else
+			placedType[placedCount] = "bogus"
+			SelectClosestSprite()
+			EraseClosestSprite()
+		end
+
+	elseif cat[cIndex] == loc("Target Placement Mode") then
+		gear = AddGear(x, y, gtTarget, 0, 0, 0, 0)
+	elseif cat[cIndex] == loc("Cleaver Placement Mode") then
+		gear = AddGear(x, y, gtKnife, 0, 0, 0, 0)
+	elseif cat[cIndex] == loc("Health Crate Placement Mode") then
+		gear = SpawnHealthCrate(x,y)
+		SetHealth(gear, pMode[pIndex])
+		setGearValue(gear,"caseType","med")
+	elseif cat[cIndex] == loc("Weapon Crate Placement Mode") then
+		gear = SpawnAmmoCrate(x, y, atkArray[pIndex][1])
+		placedSpec[placedCount] = atkArray[pIndex][2]
+		setGearValue(gear,"caseType","ammo")
+		setGearValue(gear,"contents",atkArray[pIndex][2])
+	elseif cat[cIndex] == loc("Utility Crate Placement Mode") then
+		gear = SpawnUtilityCrate(x, y, utilArray[pIndex][1])
+		placedSpec[placedCount] = utilArray[pIndex][2]
+		setGearValue(gear,"caseType","util")
+		setGearValue(gear,"contents",utilArray[pIndex][2])
+	elseif cat[cIndex] == loc("Barrel Placement Mode") then
+		gear = AddGear(x, y, gtExplosives, 0, 0, 0, 0)
+		SetHealth(gear, pMode[pIndex])
+	elseif cat[cIndex] == loc("Mine Placement Mode") then
+		gear = AddGear(x, y, gtMine, 0, 0, 0, 0)
+		SetTimer(gear, pMode[pIndex])
+	elseif cat[cIndex] == loc("Sticky Mine Placement Mode") then
+		gear = AddGear(x, y, gtSMine, 0, 0, 0, 0)
+	elseif cat[cIndex] == loc("Air Mine Placement Mode") then
+		gear = AddGear(x, y, gtAirMine, 0, 0, 0, 0)
+		SetTimer(gear, pMode[pIndex])
+	elseif cat[cIndex] == loc("Advanced Repositioning Mode") then
+
+		if pMode[pIndex] == loc("Selection Mode") then
+			sGear = GetClosestGear()
+		elseif pMode[pIndex] == loc("Placement Mode") then
+			if sGear ~= nil then
+				SetGearPosition(sGear, x, y)
+			end
+		elseif pMode[pIndex] == loc("Deletion Mode") then
+			sGear = GetClosestGear()
+			if (sGear ~= nil) and (GetGearType(sGear) ~= gtHedgehog) then
+				DeleteGear(sGear)
+				sGear = nil
+			end
+		end
+
+	elseif (cat[cIndex] == loc("Hog Identity Mode")) or (cat[cIndex] == loc("Team Identity Mode")) then
+
+		sGear = GetClosestGear()
+		if (sGear ~= nil) and (GetGearType(sGear) == gtHedgehog) then
+			if (cat[cIndex] == loc("Hog Identity Mode")) then
+				SetHogProfile(sGear, pMode[pIndex])
+			else -- set for the whole team
+				SetTeamIdentity(sGear)
+			end
+		else
+			AddCaption(loc("Please click on a hedgehog."),0xffba00ff,capgrpVolume)
+		end
+
+
+
+	elseif cat[cIndex] == loc("Health Modification Mode") then
+
+		sGear = GetClosestGear()
+		if (sGear ~= nil) and (GetGearType(sGear) == gtHedgehog) then
+			SetHealth(sGear, pMode[pIndex])
+		else
+			AddCaption(loc("Please click on a hedgehog."),0xffba00ff,capgrpVolume)
+		end
+
+	elseif cat[cIndex] == loc("Sprite Modification Mode") then
+
+		SelectClosestSprite()
+
+		if closestSpriteID ~= nil then
+			-- we have a sprite selected somewhere
+			--if pMode[pIndex] == "Sprite Selection Mode" then
+				-- sprite is now selected, good job
+			--elseif pMode[pIndex] == "LandFlag Modification Mode" then
+			if pMode[pIndex] == loc("LandFlag Modification Mode") then
+				EraseSprite(placedX[closestSpriteID], placedY[closestSpriteID], placedSprite[closestSpriteID], placedFrame[closestSpriteID], nil, nil, nil, nil, placedLandFlags[closestSpriteID])
+				CallPlaceSprite(closestSpriteID)
+				closestSpriteID = nil
+				SetVisualGearValues(sSprite, 0, 0, 0, 0, 0, 1, 10000, sprAmGirder, 10000, 0x00000000 )
+			elseif pMode[pIndex] == loc("Sprite Erasure Mode") then
+
+				EraseClosestSprite()
+
+			end
+		end
+
+
+	elseif cat[cIndex] == loc("Tagging Mode") then
+
+		sGear = GetClosestGear()
+		if sGear ~= nil then  -- used to be closestGear
+
+			if getGearValue(sGear,"tag") == nil then
+
+				if pMode[pIndex] == loc("Tag Collection Mode") then
+					if GetGearType(sGear) == gtCase then
+						setGearValue(sGear, "tag","collection")
+					else
+						AddCaption(loc("Please click on a crate."),0xffba00ff,capgrpVolume)
+					end
+				else
+					if pMode[pIndex] == loc("Tag Victory Mode") then
+						setGearValue(sGear, "tag","victory")
+					elseif pMode[pIndex] == loc("Tag Failure Mode") then
+						setGearValue(sGear, "tag","failure")
+					end
+				end
+
+			else
+				-- remove tag and delete circ
+				setGearValue(sGear, "tag", nil)
+				DeleteVisualGear(getGearValue(sGear,"tCirc"))
+				setGearValue(sGear, "tCirc", nil)
+			end
+
+
+
+		end
+
+
+	--elseif cat[cIndex] == loc("Sprite Testing Mode") then
+
+	--	frameID = 0
+	--	visualSprite = reducedSpriteIDArray[pIndex]
+	--	tempE = AddVisualGear(x, y, vgtStraightShot, 0, true,1)
+	--	g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+	--	SetVisualGearValues(tempE, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
+
+
+	elseif cat[cIndex] == loc("Sprite Placement Mode") then
+
+		if superDelete == false then
+			placedFrame[placedCount] = 1
+			placedSprite[placedCount] = reducedSpriteIDArray[pIndex]
+			CallPlaceSprite(placedCount)
+		else
+			placedType[placedCount] = "bogus"
+			SelectClosestSprite()
+			EraseClosestSprite()
+		end
+
+	elseif cat[cIndex] == loc("Waypoint Placement Mode") then
+
+
+		if pMode[pIndex] == loc("Waypoint Deletion Mode") then
+			EraseClosestWaypoint()
+		else
+			PlaceWaypoint(x,y)
+			placedCount = placedCount - 1
+		end
+
+	end
+
+	placedCount = placedCount + 1
+
+end
+
+-- called when user changes primary selection
+-- either via up/down keys
+-- or selecting girder/airattack
+function RedefineSubset()
+
+	superDelete = false -- fairly new addition
+	landType = 0 --- fairly new addition
+	pIndex = 1
+	pMode = {}
+
+	if cat[cIndex] == loc("Girder Placement Mode") then
+		pIndex = CGR
+		pMode = {loc("Girder")}
+	--	pCount = 1
+	elseif cat[cIndex] == loc("Rubber Placement Mode") then
+		pIndex = CGR
+		pMode = {loc("Rubber")}
+		landType = lfBouncy -- for now, let's not allow anything else (-- fairly new addition)
+	--	pCount = 1???
+	elseif cat[cIndex] == loc("Target Placement Mode") then
+		pMode = {loc("Standard Target")}
+	elseif cat[cIndex] == loc("Cleaver Placement Mode") then
+		pMode = {loc("Standard Cleaver")}
+	elseif cat[cIndex] == loc("Barrel Placement Mode") then
+		pMode = {1,50,75,100}
+	elseif cat[cIndex] == loc("Health Crate Placement Mode") then
+		pMode = {25,50,75,100}
+	elseif cat[cIndex] == loc("Weapon Crate Placement Mode") then
+		for i = 1, #atkArray do
+			pMode[i] = atkArray[i][4] --pMode[i] = atkArray[i][2]
+		end
+	elseif cat[cIndex] == loc("Utility Crate Placement Mode") then
+		for i = 1, #utilArray do
+			pMode[i] = utilArray[i][4] --pMode[i] = utilArray[i][2]
+		end
+	elseif cat[cIndex] == loc("Mine Placement Mode") then
+		pMode = {1,1000,2000,3000,4000,5000,0}
+		-- 0 is dud right, or is that nil?
+	elseif cat[cIndex] == loc("Sticky Mine Placement Mode") then
+		pMode = {loc("Normal Sticky Mine")}
+	elseif cat[cIndex] == loc("Air Mine Placement Mode") then
+		pMode = {1,1000,2000,3000,4000,5000,0}
+	elseif cat[cIndex] == loc("Advanced Repositioning Mode") then
+		pMode = {loc("Selection Mode"),loc("Placement Mode"), loc("Deletion Mode")}
+	elseif cat[cIndex] == loc("Tagging Mode") then
+		pMode = {loc("Tag Victory Mode"),loc("Tag Failure Mode"),loc("Tag Collection Mode")}
+	elseif cat[cIndex] == loc("Hog Identity Mode") then
+		pMode = {loc("Soldier"),loc("Grenadier"),loc("Sniper"),loc("Pyro"),loc("Ninja"),loc("Commander"),loc("Chef"),loc("Engineer"),loc("Physicist"),loc("Trapper"),loc("Saint"),loc("Clown")}
+	elseif cat[cIndex] == loc("Team Identity Mode") then
+		pMode = {"Clowns","Street Fighters","Cybernetic Empire","Color Squad","Fruit","The Police","The Ninja-Samurai Alliance","Pokemon","The Zoo","The Devs","Mushroom Kingdom","Pirates","Gangsters","Twenty-Twenty","Monsters","The Iron Curtain","The Hospital"}
+	elseif cat[cIndex] == loc("Health Modification Mode") then
+		pMode = {1, 25, 30, 50, 75, 100, 120, 150, 200, 1000}
+	elseif cat[cIndex] == loc("Sprite Modification Mode") then
+		--pMode = {"Sprite Selection Mode","LandFlag Modification Mode","Sprite Erasure Mode"}
+		pMode = {loc("LandFlag Modification Mode"),loc("Sprite Erasure Mode")}
+	elseif cat[cIndex] == loc("Sprite Testing Mode") or cat[cIndex] == loc("Sprite Placement Mode") then
+		--for i = 1, #spriteTextArray do
+		--	pMode[i] = spriteTextArray[i]
+		--end
+		for i = 1, #reducedSpriteTextArray do
+			pMode[i] = reducedSpriteTextArray[i]
+		end
+	elseif cat[cIndex] == loc("Waypoint Placement Mode") then
+		pMode = {loc("Standard Waypoint"), loc("Waypoint Deletion Mode")}
+	end
+
+end
+
+------------------------------------------------
+-- LOADING AND SAVING DATA STUFF
+------------------------------------------------
+
+-- paste data you have saved previously here
+function LoadLevelData()
+
+	if (mapID == nil) or (mapID == 0) then
+		LoadMap(1)
+	else
+		LoadMap(mapID)
+	end
+
+	for i = 1, techCount-1 do
+		PlaceWaypoint(techX[i],techY[i])
+	end
+
+end
+
+-- When you save your level, this function
+-- generates the AddTeam and AddHog function calls for onGameInit()
+function GetDataForSavingHogs(gear)
+
+	--AddTeam(teamname, color, grave, fort, voicepack, flag)
+	--AddHog(hogname, botlevel, health, hat)
+
+	--this is a quick hack so that the human team(s) will always be
+	--given the first move ahead of the AI
+	tempDataList = {}
+	if GetHogLevel(gear) == 0 then
+		tempDataList = hogDataList
+	else
+		tempDataList = AIHogDataList
+	end
+
+	if GetHogTeamName(gear) ~= lastRecordedTeam then
+
+		teamCounter = teamCounter + 1
+		if teamCounter == 9 then
+			teamCounter = 1
+		end
+
+		-- try match team colour to the colours recorded in the colour array
+
+		tColor = 0x00000000
+		for i = 1, #colorArray do
+			if GetClanColor(GetHogClan(gear)) == colorArray[i][1] then
+				tColor = colorArray[i][2]
+			end
+		end
+
+		-- no match, just give him a default colour from the array, then
+		if tColor == 0x00000000 then
+			tColor = colorArray[teamCounter][2]
+		end
+
+
+		-- there is used to be no way to read this data, so
+		-- I was assigning teams a random grave, fort, flag and voice
+		-- but now we should be able to get the real thing
+		-- so let's do it if they haven't used one of the preset teams
+		if getGearValue(gear,"grave") == nil then
+			tFort = fortArray[1+GetRandom(#fortArray)]
+			tGrave = GetHogGrave(gear)
+			tFlag = GetHogFlag(gear)
+			tVoice = GetHogVoicepack(gear)
+			--tGrave = graveArray[1+GetRandom(#graveArray)]
+			--tFlag = flagArray[1+GetRandom(#flagArray)]
+			--tVoice = voiceArray[1+GetRandom(#voiceArray)]
+		else
+			tGrave = getGearValue(gear,"grave")
+			tFort = getGearValue(gear,"fort")
+			tFlag = getGearValue(gear,"flag")
+			tVoice = getGearValue(gear,"voice")
+		end
+
+		lastRecordedTeam = GetHogTeamName(gear)
+
+		table.insert(tempDataList, "")
+		table.insert	(tempDataList,
+						"	AddTeam(\"" ..
+						GetHogTeamName(gear) .."\"" ..
+						", " .. "\"" ..tColor .. "\"" ..
+						--		--", " .. colorArray[teamCounter][2] ..
+						", " .. "\"" .. tGrave .. "\"" ..
+						", " .. "\"" .. tFort .. "\"" ..
+						", " .. "\"" .. tVoice .. "\"" ..
+						", " .. "\"" .. tFlag .. "\"" ..
+						")"
+						)
+
+	end
+
+	table.insert(hhs, gear)
+
+	table.insert	(tempDataList,	"	hhs[" .. #hhs .."] = AddHog(\"" ..
+					GetHogName(gear) .. "\", " ..
+					GetHogLevel(gear) .. ", " ..
+					GetHealth(gear) .. ", \"" ..
+					GetHogHat(gear) .. "\"" ..
+					")"
+			)
+
+	table.insert	(tempDataList,"	SetGearPosition(hhs[" .. #hhs .. "], " .. GetX(gear) .. ", " .. GetY(gear) .. ")")
+
+	if getGearValue(gear,"tag") ~= nil then
+		table.insert	(tempDataList,"	setGearValue(hhs[" .. #hhs .. "], \"tag\", \"" .. getGearValue(gear,"tag") .. "\")")
+	end
+
+	-- save the ammo values for each gear, we will call this later
+	-- when we want to output it to console
+
+	if getGearValue(gear,"ranking") ~= nil then
+		table.insert(shoppaPointList, "AddShoppaPoint(" .. GetX(gear) .. ", " .. GetY(gear) .. ", " .. getGearValue(gear,"ranking") .. ")")
+	end
+
+	for i = 1, #atkArray do
+		setGearValue(gear, atkArray[i][1], GetAmmoCount(gear, atkArray[i][1]))
+	end
+
+	for i = 1, #utilArray do
+		setGearValue(gear, utilArray[i][1], GetAmmoCount(gear, utilArray[i][1]))
+	end
+
+	if GetHogLevel(gear) == 0 then
+		hogDataList = tempDataList
+	else
+		AIHogDataList = tempDataList
+	end
+
+end
+
+-- output hog and team data to the console
+function SaveHogData()
+
+	runOnHogs(GetDataForSavingHogs)
+
+	WriteLnToConsole("	------ TEAM LIST ------")
+
+	for i = 1, #hogDataList do
+		WriteLnToConsole(hogDataList[i])
+	end
+
+	for i = 1, #AIHogDataList do
+		WriteLnToConsole(AIHogDataList[i])
+	end
+
+	WriteLnToConsole("")
+
+	if #shoppaPointList > 0 then
+		WriteLnToConsole("	------ SHOPPA POINT LIST ------")
+		for i = 1, #shoppaPointList do
+			WriteLnToConsole(shoppaPointList[i])
+		end
+	end
+
+
+end
+
+-- generates an onGameInit() template with scheme data, team adds, and hogs
+function SaveConfigData()
+
+	WriteLnToConsole("function onGameInit()")
+	WriteLnToConsole("")
+
+	temp = "	EnableGameFlags(gfDisableWind"
+	for i = 1, #gameFlagList do
+		if gameFlagList[i][2] == true then
+			temp = temp .. ", ".. gameFlagList[i][1]
+		end
+	end
+
+	WriteLnToConsole("	ClearGameFlags()")
+	WriteLnToConsole(temp .. ")")
+
+	WriteLnToConsole("	Map = \"" .. Map .. "\"")
+	WriteLnToConsole("	Theme = \"" .. "Nature" .. "\"")
+	WriteLnToConsole("	TurnTime = " .. TurnTime)
+	WriteLnToConsole("	Explosives = " .. Explosives)
+	WriteLnToConsole("	MinesNum = " .. MinesNum)
+	WriteLnToConsole("	CaseFreq = " .. CaseFreq)
+	WriteLnToConsole("	Delay = " .. Delay)
+
+	WriteLnToConsole("	HealthCaseProb = " .. HealthCaseProb)
+	WriteLnToConsole("	HealthCaseAmount = " .. HealthCaseAmount)
+	WriteLnToConsole("	DamagePercent = " .. DamagePercent)
+	WriteLnToConsole("	MinesTime = " .. MinesTime)
+	WriteLnToConsole("	MineDudPercent  = " .. MineDudPercent)
+	WriteLnToConsole("	SuddenDeathTurns = " .. SuddenDeathTurns)
+	WriteLnToConsole("	WaterRise = " .. WaterRise)
+	WriteLnToConsole("	HealthDecrease = " .. HealthDecrease)
+
+	--WriteLnToConsole("	Ready = " .. Ready)
+	--WriteLnToConsole("	AirMinesNum = " .. AirMinesNum)
+	--WriteLnToConsole("	ScriptParam = " .. ScriptParam)
+	--WriteLnToConsole("	GetAwayTime = " .. GetAwayTime)
+
+	WriteLnToConsole("")
+
+	SaveHogData()
+
+	WriteLnToConsole("")
+	WriteLnToConsole("end")
+
+end
+
+-- output gear data as special points to be placed in a converted HWMAP, readable by InterpretPoints()
+function ConvertGearDataToHWPText()
+
+	WriteLnToConsole("")
+	WriteLnToConsole("--BEGIN HWMAP CONVERTER POINTS--")
+	WriteLnToConsole("-- You can paste this data into the HWMAP converter if needed.")
+	WriteLnToConsole("--[[")
+	WriteLnToConsole("")
+
+	for i = 1, #hFlagList do
+		WriteLnToConsole(hFlagList[i])
+	end
+
+	WriteLnToConsole("")
+	WriteLnToConsole("]]")
+	WriteLnToConsole("--END HWMAP CONVERTER POINTS--")
+	WriteLnToConsole("")
+
+end
+
+-- sigh
+-- gradually got more bloated with the addition of hwpoint tracking and
+-- distinction betweeen the need to track victory/win conditions or not
+function GetDataForGearSaving(gear)
+
+	temp = nil
+	specialFlag = nil
+	arrayList = nil
+
+	if GetGearType(gear) == gtMine then
+
+		if (getGearValue(gear, "tag") ~= nil) then
+			temp = 	"	tempG = AddGear(" ..
+				GetX(gear) .. ", " ..
+				GetY(gear) .. ", gtMine, 0, 0, 0, 0)"
+			table.insert(mineList, temp)
+			table.insert(mineList, "	SetTimer(tempG, " .. GetTimer(gear) .. ")")
+			table.insert(mineList, "	setGearValue(tempG, \"tag\", \"" .. getGearValue(gear,"tag") .. "\")")
+		else
+
+			temp = 	"	SetTimer(" .. "AddGear(" ..
+				GetX(gear) .. ", " ..
+				GetY(gear) .. ", gtMine, 0, 0, 0, 0)" .. ", " ..
+				GetTimer(gear) ..")"
+			table.insert(mineList, temp)
+
+		end
+
+		if 		GetTimer(gear) == 1 then specialFlag = 1
+		elseif	GetTimer(gear) == 1000 then specialFlag = 2
+		elseif	GetTimer(gear) == 2000 then specialFlag = 3
+		elseif	GetTimer(gear) == 3000 then specialFlag = 4
+		elseif	GetTimer(gear) == 4000 then specialFlag = 5
+		elseif	GetTimer(gear) == 5000 then specialFlag = 6
+		end
+
+	elseif GetGearType(gear) == gtSMine then
+
+		arrayList = sMineList
+		temp = 	"	tempG = AddGear(" ..
+				GetX(gear) .. ", " ..
+				GetY(gear) .. ", gtSMine, 0, 0, 0, 0)"
+		table.insert(sMineList, temp)
+		specialFlag = 7
+
+	elseif GetGearType(gear) == gtAirMine then
+
+		if (getGearValue(gear, "tag") ~= nil) then
+			temp = 	"	tempG = AddGear(" ..
+				GetX(gear) .. ", " ..
+				GetY(gear) .. ", gtAirMine, 0, 0, 0, 0)"
+			table.insert(airMineList, temp)
+			table.insert(airMineList, "	SetTimer(tempG, " .. GetTimer(gear) .. ")")
+			table.insert(airMineList, "	setGearValue(tempG, \"tag\", \"" .. getGearValue(gear,"tag") .. "\")")
+		else
+
+			temp = 	"	SetTimer(" .. "AddGear(" ..
+				GetX(gear) .. ", " ..
+				GetY(gear) .. ", gtAirMine, 0, 0, 0, 0)" .. ", " ..
+				GetTimer(gear) ..")"
+			table.insert(airMineList, temp)
+
+		end
+
+		table.insert(previewDataList, "	PreviewPlacedGear(" .. GetX(gear) ..", " ..	GetY(gear) .. ")")
+		specialFlag = 8
+
+	elseif GetGearType(gear) == gtExplosives then
+
+		if (getGearValue(gear, "tag") ~= nil) then
+			temp = 	"	tempG = AddGear(" ..
+				GetX(gear) .. ", " ..
+				GetY(gear) .. ", gtExplosives, 0, 0, 0, 0)"
+			table.insert(explosivesList, temp)
+			table.insert(explosivesList, "	SetHealth(tempG, " .. GetHealth(gear) .. ")")
+			table.insert(explosivesList, "	setGearValue(tempG, \"tag\", \"" .. getGearValue(gear,"tag") .. "\")")
+		else
+
+			temp = 	"	SetHealth(" .. "AddGear(" ..
+				GetX(gear) .. ", " ..
+				GetY(gear) .. ", gtExplosives, 0, 0, 0, 0)" .. ", " ..
+				GetHealth(gear) ..")"
+			table.insert(explosivesList, temp)
+
+		end
+
+		table.insert(previewDataList, "	PreviewPlacedGear(" .. GetX(gear) ..", " ..	GetY(gear) .. ")")
+
+		if 		GetHealth(gear) == 1 then specialFlag = 15
+		elseif	GetHealth(gear) == 25 then specialFlag = 16
+		elseif	GetHealth(gear) == 50 then specialFlag = 17
+		elseif	GetHealth(gear) == 75 then specialFlag = 18
+		elseif	GetHealth(gear) == 100 then specialFlag = 19
+		end
+
+	elseif GetGearType(gear) == gtTarget then
+
+		arrayList = targetList
+		temp = 	"	tempG = AddGear(" ..
+				GetX(gear) .. ", " ..
+				GetY(gear) .. ", gtTarget, 0, 0, 0, 0)"
+		table.insert(targetList, temp)
+		specialFlag = 14
+
+	elseif GetGearType(gear) == gtKnife then
+
+		arrayList = knifeList
+		temp = 	"	tempG = AddGear(" ..
+				GetX(gear) .. ", " ..
+				GetY(gear) .. ", gtKnife, 0, 0, 0, 0)"
+		table.insert(knifeList, temp)
+		specialFlag = 13
+
+	elseif GetGearType(gear) == gtCase then
+
+		table.insert(previewDataList, "	PreviewPlacedGear(" .. GetX(gear) ..", " ..	GetY(gear) .. ")")
+
+		if (GetHealth(gear) ~= nil) and (GetHealth(gear) ~= 0) then
+
+			if (getGearValue(gear, "tag") ~= nil) then
+				temp = 	"	tempG = SpawnHealthCrate(" ..
+					GetX(gear) ..", " ..
+					GetY(gear) ..
+					")"
+				table.insert(healthCrateList, temp)
+				table.insert(healthCrateList, "	SetHealth(tempG, " .. GetHealth(gear) .. ")")
+				table.insert(healthCrateList, "	setGearValue(tempG, \"tag\", \"" .. getGearValue(gear,"tag") .. "\")")
+			else
+				temp = 	"	SetHealth(SpawnHealthCrate(" ..
+					GetX(gear) ..", " ..
+					GetY(gear) ..
+					"), " ..
+					GetHealth(gear) ..")"
+				table.insert(healthCrateList, temp)
+			end
+
+			if 		GetHealth(gear) == 25 then specialFlag = 9
+			elseif	GetHealth(gear) == 50 then specialFlag = 10
+			elseif	GetHealth(gear) == 75 then specialFlag = 11
+			elseif	GetHealth(gear) == 100 then specialFlag = 12
+			end
+
+		elseif getGearValue(gear,"caseType") == "ammo" then
+
+			arrayList = wepCrateList
+			temp = 	"	tempG = SpawnAmmoCrate(" ..
+					GetX(gear) ..", " ..
+					GetY(gear) ..", " ..
+					getGearValue(gear,"contents") ..
+					")"
+			table.insert(wepCrateList, temp)
+
+			tempV = getGearValue(gear,"contents")
+			for i = 1, #atkArray do
+				if tempV == atkArray[i][2] then
+					specialFlag = i + 19
+				end
+			end
+
+			--dammit, we probably need two more entries if we want to allow editing of existing maps
+			table.insert(wepCrateList, "	setGearValue(tempG, \"caseType\", \"" .. getGearValue(gear,"caseType") .. "\")")
+			table.insert(wepCrateList, "	setGearValue(tempG, \"contents\", \"" .. getGearValue(gear,"contents") .. "\")")
+
+
+		elseif getGearValue(gear,"caseType") == "util" then
+
+			arrayList = utilCrateList
+			temp = 	"	tempG = SpawnUtilityCrate(" ..
+					GetX(gear) ..", " ..
+					GetY(gear) ..", " ..
+					getGearValue(gear,"contents") ..
+					")"
+			table.insert(utilCrateList, temp)
+
+			tempV = getGearValue(gear,"contents")
+			for i = 1, #utilArray do
+				if tempV == utilArray[i][2] then
+					specialFlag = i + 19 + #atkArray
+				end
+			end
+
+			--dammit, we probably need two more entries if we want to allow editing of existing maps
+			table.insert(utilCrateList, "	setGearValue(tempG, \"caseType\", \"" .. getGearValue(gear,"caseType") .. "\")")
+			table.insert(utilCrateList, "	setGearValue(tempG, \"contents\", \"" .. getGearValue(gear,"contents") .. "\")")
+
+		end
+
+	end
+
+	-- add tracking of simple win/lose for simpler gears that have a tempG = listed above
+	if (getGearValue(gear, "tag") ~= nil) and (arrayList ~= nil) then
+		table.insert(arrayList, "	setGearValue(tempG, \"tag\", \"" .. getGearValue(gear,"tag") .. "\")")
+	end
+
+	-- this creates a big, messy list of special flags for use in hwmaps
+	if specialFlag ~= nil then
+		table.insert(hFlagList, "	" .. GetX(gear) .. " " .. GetY(gear) .. " " .. specialFlag)
+	end
+
+end
+
+-- generate a title and list all the gears if there is at least 1 of them in the list
+function AppendGearList(gearList, consoleLine)
+	if #gearList > 0 then
+		WriteLnToConsole(consoleLine)
+		for i = 1, #gearList do
+			WriteLnToConsole(gearList[i])
+		end
+		WriteLnToConsole("")
+	end
+end
+
+-- new attempt at doing shit a bit cleaner:
+-- it may be a bit verbose, but this should generate a comprehensive, human-readable
+-- list of gears, broken up into sections and output it to the console
+function SaveGearData()
+
+	runOnGears(GetDataForGearSaving)
+
+	AppendGearList(healthCrateList, "	------ HEALTH CRATE LIST ------")
+	AppendGearList(wepCrateList, "	------ AMMO CRATE LIST ------")
+	AppendGearList(utilCrateList, "	------ UTILITY CRATE LIST ------")
+	AppendGearList(explosivesList, "	------ BARREL LIST ------")
+	AppendGearList(mineList, "	------ MINE LIST ------")
+	AppendGearList(sMineList, "	------ STICKY MINE LIST ------")
+	AppendGearList(airMineList, "	------ AIR MINE LIST ------")
+	AppendGearList(targetList, "	------ TARGET LIST ------")
+	AppendGearList(knifeList, "	------ CLEAVER LIST ------")
+
+end
+
+function DoAmmoLoop(i)
+
+	for x = 1, #atkArray do
+		if getGearValue(hhs[i],atkArray[x][1]) ~= 0 then
+			WriteLnToConsole("	AddAmmo(hhs[" .. i .. "], " .. atkArray[x][2] .. ", " .. getGearValue(hhs[i],atkArray[x][1]) .. ")")
+		end
+	end
+
+	for x = 1, #utilArray do
+		if getGearValue(hhs[i],utilArray[x][1]) ~= 0 then
+			WriteLnToConsole("	AddAmmo(hhs[" .. i .. "], " .. utilArray[x][2] .. ", " .. getGearValue(hhs[i],utilArray[x][1]) .. ")")
+		end
+	end
+
+	WriteLnToConsole("")
+
+end
+
+-- this is called when a tagged gear is deleted during a mission
+-- it determines if the game is ready to conclude in victory/defeat
+function CheckForConclusion(gear)
+
+	-- failure gears must always all be protected, so if any of them are destroyed the player loses
+	if getGearValue(gear,"tag") == "failure" then
+		EndGameIn("failure")
+	else
+
+		-- the presence of other tagged gears means that the goal of this mission is not
+		-- simply to kill every hedgehog. Thus, we need to count the remaining tagged objects
+		-- to see how close we are to completing the mission successfully.
+		victoryObj = 0
+		failObj = 0
+		collectObj = 0
+		runOnGears(CheckForConditions)
+
+		if GetGearType(gear) ~= gtCase then
+
+			-- non-crates can only be tagged as victory or failure, and as this wasn't tagged
+			-- "failure" in our earlier check, this must be a victory tagged gear. Let's adust
+			-- the number of objects accordingly as it's in the process of being destroyed.
+			victoryObj = victoryObj - 1
+
+			-- if there are no objectives left to complete, end the game in victory
+			if (victoryObj == 0) and (collectObj == 0) then
+				EndGameIn("victory")
+			end
+
+		else
+			-- this crate was deleted, but was it collected or destroyed, and how does that match
+			-- the goals of our mission?
+			if (GetGearMessage(gear) == 256) and (getGearValue(gear,"tag") == "collection") then
+				if GetHogLevel(CurrentHedgehog) == 0 then
+					-- the enemy stole our crate
+					EndGameIn("failure")
+				else
+					collectObj = collectObj - 1
+					if (victoryObj == 0) and (collectObj == 0) then
+						EndGameIn("victory")
+					end
+				end
+			elseif (GetGearMessage(gear) == 0) and (getGearValue(gear,"tag") == "victory") then
+				victoryObj = victoryObj - 1
+				if (victoryObj == 0) and (collectObj == 0) then
+					EndGameIn("victory")
+				end
+			else
+				-- unfortunately, we messed up our mission.
+				EndGameIn("failure")
+			end
+
+		end
+
+	end
+
+end
+
+---------------------------------
+-- THE BIG ONE
+---------------------------------
+-- saving process starts here
+-- saves all level data to logs/game0.log and generates a simple script template
+function SaveLevelData()
+
+	WriteLnToConsole("------ BEGIN SCRIPT ------")
+	WriteLnToConsole("-- Copy and Paste this text into an empty text file, and save it as")
+	WriteLnToConsole("-- YOURTITLEHERE.lua, in your Data/Missions/Training/ folder.")
+
+	WriteLnToConsole("")
+
+	WriteLnToConsole("HedgewarsScriptLoad(\"/Scripts/Locale.lua\")")
+	WriteLnToConsole("HedgewarsScriptLoad(\"/Scripts/Tracker.lua\")")
+
+	WriteLnToConsole("")
+	WriteLnToConsole("local hhs = {}")
+	--WriteLnToConsole("local ufoGear = nil")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("local wepArray = {")
+	WriteLnToConsole("		amBazooka, amBee, amMortar, amDrill, amSnowball,")
+	WriteLnToConsole("		amGrenade, amClusterBomb, amMolotov, amWatermelon, amHellishBomb, amGasBomb,")
+	WriteLnToConsole("		amShotgun, amDEagle, amSniperRifle, amSineGun, amLandGun, amIceGun,")
+	WriteLnToConsole("		amFirePunch, amWhip, amBaseballBat, amKamikaze, amSeduction, amHammer,")
+	WriteLnToConsole("		amMine, amDynamite, amCake, amBallgun, amRCPlane, amSMine, amAirMine,")
+	WriteLnToConsole("		amAirAttack, amMineStrike, amDrillStrike, amNapalm, amPiano, amBirdy,")
+	WriteLnToConsole("		amBlowTorch, amPickHammer, amGirder, amRubber, amPortalGun,")
+	WriteLnToConsole("		amRope, amParachute, amTeleport, amJetpack,")
+	WriteLnToConsole("		amInvulnerable, amLaserSight, amVampiric,")
+	WriteLnToConsole("		amLowGravity, amExtraDamage, amExtraTime, amResurrector, amTardis, amSwitch")
+	WriteLnToConsole("	}")
+	WriteLnToConsole("")
+
+
+	SaveConfigData()
+
+
+	WriteLnToConsole("")
+	WriteLnToConsole("function LoadHogWeapons()")
+	WriteLnToConsole("")
+
+	if band(GameFlags, gfPerHogAmmo) ~= 0 then -- per hog ammo
+		for i = 1, #hhs do
+			DoAmmoLoop(i)
+		end
+
+	else	-- team-based ammo
+
+		teamCounter = 0
+		lastRecordedTeam = ""
+		for i = 1, #hhs do
+
+			if GetHogTeamName(hhs[i]) ~= lastRecordedTeam then
+				lastRecordedTeam = GetHogTeamName(hhs[i])
+				teamCounter = teamCounter + 1
+				if teamCounter == 9 then
+					teamCounter = 1
+				end
+				DoAmmoLoop(i)
+			end
+
+		end
+
+	end
+
+
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("")
+	WriteLnToConsole("function LoadSprite(pX, pY, pSprite, pFrame, pTint, p1, p2, p3, pLandFlags)")
+	WriteLnToConsole("	PlaceSprite(pX, pY, pSprite, pFrame, pTint, p1, p2, p3, pLandFlags)")
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("")
+	WriteLnToConsole("function LoadGearData()")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("	--BEGIN CORE DATA--")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("	------ PORTAL DISTANCE and UFO FUEL ------")
+	WriteLnToConsole("	ufoFuel = " .. ufoFuel)
+	WriteLnToConsole("	portalDistance = " .. portalDistance*5)
+	table.insert(hFlagList, "	" .. portalDistance*5 .. " " .. ufoFuel .. " " .. 98)
+	WriteLnToConsole("")
+
+	for i = 0, (placedCount-1) do
+		if placedType[i] == loc("Waypoint Placement Mode") then
+			table.insert(waypointList,
+			"	AddWayPoint(" ..
+				placedX[i] ..", " ..
+				placedY[i] ..")"
+				)
+			table.insert(hFlagList, "	" .. placedX[i] .. " " .. placedY[i] .. " " .. "0")
+			table.insert(previewDataList, "	PreviewWayPoint(" .. placedX[i] ..", " ..	placedY[i] .. ")")
+		end
+	end
+
+	for i = 0, (placedCount-1) do
+		if placedType[i] == loc("Girder Placement Mode") then
+			table.insert(girderList,
+			"	LoadSprite(" ..
+				placedX[i] ..", " ..
+				placedY[i] ..", sprAmGirder, " ..
+				placedFrame[i] ..			-- the rotation/frame
+				", " ..
+				placedTint[i] ..", " .. -- "nil, " .. -- color
+				"nil, nil, nil, " ..
+				placedLandFlags[i] .. ")" --the landType
+				)
+			table.insert(hFlagList, "	" .. placedX[i] .. " " .. placedY[i] .. " " .. placedHWMapFlag[i])
+			table.insert(previewDataList, "	PreviewGirder(" .. placedX[i] ..", " ..	placedY[i] .. ", " .. placedFrame[i] .. ")")
+		end
+	end
+
+	for i = 0, (placedCount-1) do
+		if placedType[i] == loc("Rubber Placement Mode") then
+			table.insert(rubberList,
+				"	LoadSprite(" ..
+				placedX[i] ..", " ..
+				placedY[i] ..", sprAmRubber, " ..
+				placedFrame[i] ..
+				", " ..
+				placedTint[i] ..", " .. -- "nil, " .. -- color
+				"nil, nil, nil, " ..
+				"lfBouncy)" --placedLandFlags[i] .. ")" --the landType
+				)
+			table.insert(hFlagList, "	" .. placedX[i] .. " " .. placedY[i] .. " " .. placedHWMapFlag[i])
+			table.insert(previewDataList, "	PreviewRubber(" .. placedX[i] ..", " ..	placedY[i] .. ", " .. placedFrame[i] .. ")")
+		end
+	end
+
+	for i = 0, (placedCount-1) do
+		if placedType[i] == loc("Sprite Placement Mode") then
+				table.insert(spriteList,
+				"	LoadSprite(" ..
+				placedX[i] ..", " ..
+				placedY[i] ..", " .. placedSprite[i] .. ", " ..
+				placedFrame[i] .. -- I think this is the frame, can't remember
+				", " ..
+				placedTint[i] ..", " .. -- "nil, " .. -- color
+				"nil, nil, nil, " ..
+				placedLandFlags[i] .. ")" --the landType
+				)
+		end
+	end
+
+	AppendGearList(waypointList, "	------ WAYPOINT LIST ------")
+	AppendGearList(girderList, "	------ GIRDER LIST ------")
+	AppendGearList(rubberList, "	------ RUBBER LIST ------")
+	AppendGearList(spriteList, "	------ SPRITE LIST ------")
+
+	SaveGearData()
+
+	WriteLnToConsole("	--END CORE DATA--")
+
+
+	WriteLnToConsole("")
+	WriteLnToConsole("	LoadHogWeapons()")
+	WriteLnToConsole("")
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("")
+	WriteLnToConsole("function onGameStart()")
+	WriteLnToConsole("")
+	WriteLnToConsole("	LoadGearData()")
+	WriteLnToConsole("	DetermineMissionGoal()")
+	WriteLnToConsole("")
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("")
+	WriteLnToConsole("function onNewTurn()")
+	WriteLnToConsole("	--insert code according to taste")
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("")
+	WriteLnToConsole("function onGameTick()")
+	WriteLnToConsole("	runOnGears(UpdateTagCircles)")
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("function UpdateTagCircles(gear)")
+	WriteLnToConsole("	if getGearValue(gear,\"tag\") ~= nil then")
+	WriteLnToConsole("		if getGearValue(gear,\"tCirc\") == nil then")
+	WriteLnToConsole("			setGearValue(gear, \"tCirc\",AddVisualGear(0,0,vgtCircle,0,true))")
+	WriteLnToConsole("		end")
+	WriteLnToConsole("")
+	WriteLnToConsole("		if getGearValue(gear,\"tag\") == \"victory\" then")
+	WriteLnToConsole("			SetVisualGearValues(getGearValue(gear,\"tCirc\"), GetX(gear), GetY(gear), 100, 255, 1, 10, 0, 150, 3, 0xff0000ff)")
+	WriteLnToConsole("		elseif getGearValue(gear,\"tag\") == \"failure\" then")
+	WriteLnToConsole("			SetVisualGearValues(getGearValue(gear,\"tCirc\"), GetX(gear), GetY(gear), 100, 255, 1, 10, 0, 150, 3, 0x00ff00ff)")
+	WriteLnToConsole("		elseif getGearValue(gear,\"tag\") == \"collection\" then")
+	WriteLnToConsole("			SetVisualGearValues(getGearValue(gear,\"tCirc\"), GetX(gear), GetY(gear), 100, 255, 1, 10, 0, 150, 3, 0x0000ffff)")
+	WriteLnToConsole("		end")
+	WriteLnToConsole("	end")
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("function CheckForConditions(gear)")
+	WriteLnToConsole("	if getGearValue(gear,\"tag\") == \"victory\" then")
+	WriteLnToConsole("		victoryObj = victoryObj +1")
+	WriteLnToConsole("	elseif getGearValue(gear,\"tag\") == \"failure\" then")
+	WriteLnToConsole("		failObj = failObj +1")
+	WriteLnToConsole("	elseif getGearValue(gear,\"tag\") == \"collection\" then")
+	WriteLnToConsole("		collectObj = collectObj +1")
+	WriteLnToConsole("	end")
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("function CheckForConclusion(gear)")
+	WriteLnToConsole("")
+	WriteLnToConsole("	if getGearValue(gear,\"tag\") == \"failure\" then ")
+	WriteLnToConsole("		EndGameIn(\"failure\")")
+	WriteLnToConsole("	else ")
+	WriteLnToConsole("")
+	WriteLnToConsole("		victoryObj = 0")
+	WriteLnToConsole("		failObj = 0")
+	WriteLnToConsole("		collectObj = 0")
+	WriteLnToConsole("		runOnGears(CheckForConditions)")
+	WriteLnToConsole("")
+	WriteLnToConsole("		if GetGearType(gear) ~= gtCase then")
+	WriteLnToConsole("")
+	WriteLnToConsole("			victoryObj = victoryObj - 1 ")
+	WriteLnToConsole("")
+	WriteLnToConsole("			if (victoryObj == 0) and (collectObj == 0) then")
+	WriteLnToConsole("				EndGameIn(\"victory\")")
+	WriteLnToConsole("			end")
+	WriteLnToConsole("")
+	WriteLnToConsole("		else")
+	WriteLnToConsole("")
+	WriteLnToConsole("			if (GetGearMessage(gear) == 256) and (getGearValue(gear,\"tag\") == \"collection\") then ")
+	WriteLnToConsole("				if GetHogLevel(CurrentHedgehog) ~= 0 then")
+	WriteLnToConsole("					EndGameIn(\"failure\")")
+	WriteLnToConsole("				else")
+	WriteLnToConsole("					collectObj = collectObj - 1")
+	WriteLnToConsole("					if (victoryObj == 0) and (collectObj == 0) then")
+	WriteLnToConsole("						EndGameIn(\"victory\")")
+	WriteLnToConsole("					end")
+	WriteLnToConsole("				end")
+	WriteLnToConsole("			elseif (GetGearMessage(gear) == 0) and (getGearValue(gear,\"tag\") == \"victory\") then")
+	WriteLnToConsole("				victoryObj = victoryObj - 1")
+	WriteLnToConsole("				if (victoryObj == 0) and (collectObj == 0) then ")
+	WriteLnToConsole("					EndGameIn(\"victory\")")
+	WriteLnToConsole("				end")
+	WriteLnToConsole("			else")
+	WriteLnToConsole("				EndGameIn(\"failure\")")
+	WriteLnToConsole("			end")
+	WriteLnToConsole("")
+	WriteLnToConsole("		end")
+	WriteLnToConsole("")
+	WriteLnToConsole("	end")
+	WriteLnToConsole("")
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("function DetermineMissionGoal()")
+	WriteLnToConsole("")
+	WriteLnToConsole("	victoryObj = 0")
+	WriteLnToConsole("	failObj = 0")
+	WriteLnToConsole("	collectObj = 0")
+	WriteLnToConsole("	vComment = \"\"")
+	WriteLnToConsole("	fComment = \"\"")
+	WriteLnToConsole("	collectComment = \"\"")
+	WriteLnToConsole("")
+	WriteLnToConsole("	runOnGears(CheckForConditions)")
+	WriteLnToConsole("")
+	WriteLnToConsole("	if victoryObj > 0 then ")
+	WriteLnToConsole("		if victoryObj == 1 then ")
+	WriteLnToConsole("			vComment = loc(\"Destroy the red target\")")
+	WriteLnToConsole("		else ")
+	WriteLnToConsole("			vComment = loc(\"Destroy the red targets\")")
+	WriteLnToConsole("		end")
+--	WriteLnToConsole("	else")
+--	WriteLnToConsole("		vComment = loc(\"Destroy the enemy.\")")
+	WriteLnToConsole("	end")
+	WriteLnToConsole("")
+	WriteLnToConsole("	if collectObj > 0 then ")
+	WriteLnToConsole("		if collectObj == 1 then ")
+	WriteLnToConsole("			collectComment = loc(\"Collect the blue target\")")
+	WriteLnToConsole("		else ")
+	WriteLnToConsole("			collectComment = loc(\"Collect all the blue targets\")")
+	WriteLnToConsole("		end")
+	WriteLnToConsole("	end")
+	WriteLnToConsole("")
+	WriteLnToConsole("	if (collectObj == 0) and (victoryObj == 0) then")
+	WriteLnToConsole("		vComment = loc(\"Destroy the enemy.\")")
+	WriteLnToConsole("	end")
+	WriteLnToConsole("")
+	WriteLnToConsole("	if failObj > 0 then ")
+	WriteLnToConsole("		if failObj == 1 then ")
+	WriteLnToConsole("			fComment = loc(\"The green target must survive\")")
+	WriteLnToConsole("		else ")
+	WriteLnToConsole("			fComment = loc(\"The green targets must survive\")")
+	WriteLnToConsole("		end")
+	WriteLnToConsole("	end")
+	WriteLnToConsole("")
+	WriteLnToConsole("	ShowMission(loc(\"User Challenge\"), loc(\"Mission Goals\") .. \":\", collectComment .. \"|\" .. vComment .. \"|\" .. fComment, 0, 0)")
+	WriteLnToConsole("")
+	WriteLnToConsole("end")
+
+	WriteLnToConsole("")
+	WriteLnToConsole("function isATrackedGear(gear)")
+	WriteLnToConsole("	if 	(GetGearType(gear) == gtHedgehog) or")
+	WriteLnToConsole("		(GetGearType(gear) == gtExplosives) or")
+	WriteLnToConsole("		(GetGearType(gear) == gtMine) or")
+	WriteLnToConsole("		(GetGearType(gear) == gtSMine) or")
+	WriteLnToConsole("		(GetGearType(gear) == gtAirMine) or")
+	WriteLnToConsole("		(GetGearType(gear) == gtTarget) or")
+	WriteLnToConsole("		(GetGearType(gear) == gtKnife) or")
+	WriteLnToConsole("		(GetGearType(gear) == gtPortal) or")
+	WriteLnToConsole("		(GetGearType(gear) == gtCase)")
+	WriteLnToConsole("	then")
+	WriteLnToConsole("		return(true)")
+	WriteLnToConsole("	else")
+	WriteLnToConsole("		return(false)")
+	WriteLnToConsole("	end")
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("")
+	WriteLnToConsole("function onGearAdd(gear)")
+
+	--WriteLnToConsole("	if GetGearType(gear) == gtJetpack then")
+	--WriteLnToConsole("		ufoGear = gear")
+	--WriteLnToConsole("		if (ufoFuel ~= 0) then")
+	--WriteLnToConsole("			SetHealth(ufoGear, ufoFuel)")
+	--WriteLnToConsole("		end")
+	--WriteLnToConsole("	end")
+
+	WriteLnToConsole("	if isATrackedGear(gear) then")
+	WriteLnToConsole("		trackGear(gear)")
+	--WriteLnToConsole("		if GetGearType(gear) == gtPortal then")
+	--WriteLnToConsole("			setGearValue(gear,\"life\",portalDistance)")
+	--WriteLnToConsole("		end")
+
+	WriteLnToConsole("	end")
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("")
+	WriteLnToConsole("function EndGameIn(c)")
+	WriteLnToConsole("")
+	WriteLnToConsole("	teamCounter = 0")
+	WriteLnToConsole("	lastRecordedTeam = \"\" ")
+	WriteLnToConsole("	for i = 1, #hhs do")
+	WriteLnToConsole("")
+	WriteLnToConsole("		if GetHogTeamName(hhs[i]) ~= lastRecordedTeam then --er, is this okay without nill checks?")
+	WriteLnToConsole("")
+	WriteLnToConsole("			lastRecordedTeam = GetHogTeamName(hhs[i])")
+	WriteLnToConsole("			teamCounter = teamCounter + 1")
+	WriteLnToConsole("			if teamCounter == 9 then")
+	WriteLnToConsole("				teamCounter = 1")
+	WriteLnToConsole("			end")
+	WriteLnToConsole("")
+	WriteLnToConsole("			if (c ==  \"victory\") and (GetHogLevel(hhs[i]) ~= 0) then")
+	WriteLnToConsole("				DismissTeam(GetHogTeamName(hhs[i]))")
+	WriteLnToConsole("				ShowMission(loc(\"User Challenge\"), loc(\"MISSION SUCCESSFUL\"), loc(\"Congratulations!\"), 0, 0)")
+	WriteLnToConsole("			elseif (c ==  \"failure\") and (GetHogLevel(hhs[i]) == 0) then")
+	WriteLnToConsole("				DismissTeam(GetHogTeamName(hhs[i]))")
+	WriteLnToConsole("				ShowMission(loc(\"User Challenge\"), loc(\"MISSION FAILED\"), loc(\"Oh no! Just try again!\"), -amSkip, 0)")
+	WriteLnToConsole("			elseif (c ==  \"victory\") and (GetHogLevel(hhs[i]) == 0) then")
+	WriteLnToConsole("				PlaySound(sndVictory,hhs[i]) -- check if we actually need this")
+	WriteLnToConsole("			end")
+	WriteLnToConsole("")
+	WriteLnToConsole("		end")
+	WriteLnToConsole("")
+	WriteLnToConsole("	end")
+	WriteLnToConsole("")
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("")
+	WriteLnToConsole("function onGearDelete(gear)")
+	WriteLnToConsole("")
+	WriteLnToConsole("	--insert code according to taste")
+	--WriteLnToConsole("	if GetGearType(gear) == gtJetpack then")
+	--WriteLnToConsole("		ufoGear = nil")
+	--WriteLnToConsole("	end")
+	WriteLnToConsole("")
+	WriteLnToConsole("	if isATrackedGear(gear) then")
+	WriteLnToConsole("")
+	WriteLnToConsole("		if getGearValue(gear,\"tag\") ~= nil then")
+	WriteLnToConsole("			CheckForConclusion(gear)")
+	WriteLnToConsole("		end")
+
+	--WriteLnToConsole("		if getGearValue(gear,\"tag\") == \"failure\" then")
+	--WriteLnToConsole("			EndGameIn(\"failure\")")
+	--WriteLnToConsole("		elseif getGearValue(gear,\"tag\") == \"victory\" then")
+	--WriteLnToConsole("			EndGameIn(\"victory\")")
+	--WriteLnToConsole("		end")
+	WriteLnToConsole("")
+	WriteLnToConsole("		if getGearValue(gear, \"tCirc\") ~= nil then")
+	WriteLnToConsole("			DeleteVisualGear(getGearValue(gear, \"tCirc\"))")
+	WriteLnToConsole("		end")
+	WriteLnToConsole("")
+	WriteLnToConsole("		trackDeletion(gear)")
+	WriteLnToConsole("")
+	WriteLnToConsole("	end")
+	WriteLnToConsole("")
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("")
+	WriteLnToConsole("--enable and/or alter code according to taste")
+	WriteLnToConsole("function onAmmoStoreInit()")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("	for i = 1, #wepArray do")
+	WriteLnToConsole("		SetAmmo(wepArray[i], 0, 0, 0, 1)")
+	WriteLnToConsole("	end")
+	WriteLnToConsole("")
+	--WriteLnToConsole("	SetAmmo(amBazooka, 2, 0, 0, 0)")
+	--WriteLnToConsole("	SetAmmo(amGrenade, 1, 0, 0, 0)")
+	--WriteLnToConsole("	SetAmmo(amRope, 9, 0, 0, 0)")
+	WriteLnToConsole("	SetAmmo(amSkip, 9, 0, 0, 0)")
+	WriteLnToConsole("")
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	WriteLnToConsole("------ END GENERATED MISSION ------")
+
+	-- at this point, generation for the missions/training output is intended to stop
+
+	WriteLnToConsole("")
+	WriteLnToConsole("function GeneratePreviewData()")
+	WriteLnToConsole("")
+	for i = 1, #previewDataList do
+		WriteLnToConsole(previewDataList[i])
+	end
+	WriteLnToConsole("")
+	WriteLnToConsole("end")
+	WriteLnToConsole("")
+
+	ConvertGearDataToHWPText()
+
+	WriteLnToConsole("------ END GENERATED SCRIPT ------")
+
+	AddCaption(loc("Level Data Saved!"))
+
+end
+
+----------------------------------
+-- some special effects handling
+----------------------------------
+function SmokePuff(x,y,c)
+	tempE = AddVisualGear(x, y, vgtSmoke, 0, false)
+	g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+	SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, 1, g9, c )
+end
+
+function HandleGearBasedRankingEffects(gear)
+	if getGearValue(gear, "ranking") ~= nil then
+		SmokePuff(GetX(gear), GetY(gear),GetRankedColour(getGearValue(gear, "ranking")))
+	end
+end
+
+function HandleRankingEffects()
+	for i = 1, #shoppaPX do
+		SmokePuff(shoppaPX[i], shoppaPY[i], GetRankedColour(shoppaPR[i]))
+	end
+	runOnHogs(HandleGearBasedRankingEffects)
+end
+
+function UpdateTagCircles(gear)
+
+	if getGearValue(gear,"tag") ~= nil then
+
+		if cat[cIndex] == loc("Tagging Mode") then
+
+			-- generate circs for tagged gears that don't have a circ yet (new)
+			if getGearValue(gear,"tCirc") == nil then
+				setGearValue(gear, "tCirc",AddVisualGear(0,0,vgtCircle,0,true))
+			end
+
+			if getGearValue(gear,"tag") == "victory" then
+				SetVisualGearValues(getGearValue(gear,"tCirc"), GetX(gear), GetY(gear), 100, 255, 1, 10, 0, 150, 3, 0xff0000ff)
+			elseif getGearValue(gear,"tag") == "failure" then
+				SetVisualGearValues(getGearValue(gear,"tCirc"), GetX(gear), GetY(gear), 100, 255, 1, 10, 0, 150, 3, 0x00ff00ff)
+			elseif getGearValue(gear,"tag") == "collection" then
+				SetVisualGearValues(getGearValue(gear,"tCirc"), GetX(gear), GetY(gear), 100, 255, 1, 10, 0, 150, 3, 0x0000ffff)
+			end
+
+		else
+			SetVisualGearValues(getGearValue(gear,"tCirc"), GetX(gear), GetY(gear), 0, 1, 1, 10, 0, 1, 1, 0x00000000)
+		end
+
+	end
+
+end
+
+-- handle short range portal gun
+function PortalEffects(gear)
+
+	if GetGearType(gear) == gtPortal then
+
+		tag = GetTag(gear)
+		if tag == 0 then
+			col = 0xfab02aFF -- orange ball
+		elseif tag == 1 then
+			col = 0x00FF00FF -- orange portal
+		elseif tag == 2 then
+			col = 0x364df7FF  -- blue ball
+		elseif tag == 3 then
+			col = 0xFFFF00FF  -- blue portal
+		end
+
+		if (tag == 0) or (tag == 2) then -- i.e ball form
+			tempE = AddVisualGear(GetX(gear), GetY(gear), vgtDust, 0, true)
+			g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+			SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, 1, g9, col )
+
+			remLife = getGearValue(gear,"life")
+			remLife = remLife - 1
+			setGearValue(gear, "life", remLife)
+
+			if remLife == 0 then
+
+				tempE = AddVisualGear(GetX(gear)+15, GetY(gear), vgtSmoke, 0, true)
+				g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+				SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, col )
+
+				tempE = AddVisualGear(GetX(gear)-15, GetY(gear), vgtSmoke, 0, true)
+				g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+				SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, col )
+
+				tempE = AddVisualGear(GetX(gear), GetY(gear)+15, vgtSmoke, 0, true)
+				g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+				SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, col )
+
+				tempE = AddVisualGear(GetX(gear), GetY(gear)-15, vgtSmoke, 0, true)
+				g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+				SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, col )
+
+
+				PlaySound(sndVaporize)
+				DeleteGear(gear)
+
+			end
+
+		end
+
+	end
+
+end
+
+function updateHelp()
+
+	if (GetCurAmmoType() ~= amGirder) and (GetCurAmmoType() ~= amRubber) and (GetCurAmmoType() ~= amAirAttack) then
+
+		ShowMission	(
+				loc("HEDGE EDITOR"),
+				loc("(well... kind of...)"),
+				loc("Place Girder: Girder") .. "|" ..
+				loc("Place Rubber: Rubber") .. "|" ..
+				loc("Place Gear: Air Attack") .. "|" ..
+				loc("Change Selection: [Up], [Down], [Left], [Right]") .. "|" ..
+				loc("Toggle Help: Precise+1 (While a tool is selected)") .. "|" ..
+				" " .. "|" ..
+				loc("COMMANDS: (Use while no weapon is selected)") .. "|" ..
+				loc("Save Level: Precise+4") .. "|" ..
+				loc("Toggle Editing Weapons and Tools: Precise+2") .. "|" ..
+				" " .. "|" ..
+				--" " .. "|" ..
+				"", 4, 5000
+				)
+						--4
+	elseif cat[cIndex] == loc("Girder Placement Mode") then
+
+		ShowMission	(
+				loc("GIRDER PLACEMENT MODE"),
+				loc("Use this mode to place girders"),
+				loc("Place Girder: [Left Click]") .. "|" ..
+				loc("Change Rotation: [Left], [Right]") .. "|" ..
+				loc("Change LandFlag: [1], [2], [3], [4]") .. "|" ..
+				" " .. "|" ..
+				loc("1 - Normal Girder") .. "|" ..
+				loc("2 - Indestructible Girder") .. "|" ..
+				loc("3 - Icy Girder") .. "|" ..
+				loc("4 - Bouncy Girder") .. "|" ..
+				" " .. "|" ..
+				loc("Deletion Mode: [5]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", -amGirder, 60000
+				)
+
+	elseif cat[cIndex] == loc("Rubber Placement Mode") then
+
+		ShowMission	(
+				loc("RUBBER PLACEMENT MODE"),
+				loc("Use this mode to place rubberbands"),
+				loc("Place Object: [Left Click]") .. "|" ..
+				loc("Change Rotation: [Left], [Right]") .. "|" ..
+				--"Change LandFlag: [1], [2], [3]" .. "|" ..
+				--" " .. "|" ..
+				loc("1 - Normal Rubber") .. "|" ..
+				--"2 - Indestructible Rubber" .. "|" ..
+				--"3 - Icy Rubber" .. "|" ..
+				" " .. "|" ..
+				loc("Deletion Mode: [5]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", -amRubber, 60000
+				)
+
+	elseif cat[cIndex] == loc("Barrel Placement Mode") then
+
+		ShowMission	(
+				loc("BARREL PLACEMENT MODE"),
+				loc("Use this mode to place barrels"),
+				loc("Place Object: [Left Click]") .. "|" ..
+				loc("Change Health: [Left], [Right]") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", 8, 60000
+				)
+
+	elseif cat[cIndex] == loc("Cleaver Placement Mode") then
+
+		ShowMission	(
+				loc("CLEAVER MINE PLACEMENT MODE"),
+				loc("Use this mode to place cleavers"),
+				loc("Place Object: [Left Click]") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", -amKnife, 60000
+				)
+
+	elseif cat[cIndex] == loc("Target Placement Mode") then
+
+		ShowMission	(
+				loc("TARGET MINE PLACEMENT MODE"),
+				loc("Use this mode to place targets"),
+				loc("Place Object: [Left Click]") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", 1, 60000
+				)
+
+	elseif cat[cIndex] == loc("Waypoint Placement Mode") then
+
+		ShowMission	(
+				loc("WAYPOINT PLACEMENT MODE"),
+				loc("Use this mode to waypoints"),
+				loc("Place Waypoint: [Left Click]") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", -amAirAttack, 60000
+				)
+
+	elseif cat[cIndex] == loc("Mine Placement Mode") then
+
+		ShowMission	(
+				loc("MINE PLACEMENT MODE"),
+				loc("Use this mode to place mines"),
+				loc("Place Object: [Left Click]") .. "|" ..
+				loc("Change Timer (in milliseconds): [Left], [Right]") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", -amMine, 60000
+				)
+
+	elseif cat[cIndex] == loc("Sticky Mine Placement Mode") then
+
+		ShowMission	(
+				loc("STiCKY MINE PLACEMENT MODE"),
+				loc("Use this mode to place sticky mines"),
+				loc("Place Object: [Left Click]") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", -amSMine, 60000
+				)
+
+	elseif cat[cIndex] == loc("Air Mine Placement Mode") then
+
+		ShowMission	(
+				loc("AIR MINE PLACEMENT MODE"),
+				loc("Use this mode to place air mines"),
+				loc("Place Object: [Left Click]") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", -amAirMine, 60000
+				)
+
+	elseif cat[cIndex] == loc("Weapon Crate Placement Mode") then
+
+		ShowMission	(
+				"WEAPON CRATE PLACEMENT MODE",
+				loc("Use this mode to place weapon crates"),
+				loc("Place Object: [Left Click]") .. "|" ..
+				loc("Change Content: [Left], [Right]") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", 7, 60000
+				)
+
+	elseif cat[cIndex] == loc("Utility Crate Placement Mode") then
+
+		ShowMission	(
+				loc("UTILITY CRATE PLACEMENT MODE"),
+				loc("Use this mode to place utility crates"),
+				loc("Place Object: [Left Click]") .. "|" ..
+				loc("Change Content: [Left], [Right]") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", 5, 60000
+				)
+
+	elseif cat[cIndex] == loc("Health Crate Placement Mode") then
+
+		ShowMission	(
+				loc("HEALTH CRATE PLACEMENT MODE"),
+				loc("Use this mode to place utility crates"),
+				loc("Place Object: [Left Click]") .. "|" ..
+				loc("Change Health Boost: [Left], [Right]") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", 6, 60000
+				)
+
+	elseif cat[cIndex] == loc("Advanced Repositioning Mode") then
+
+		ShowMission	(
+				loc("ADVANCED REPOSITIONING MODE"),
+				loc("Use this mode to select and reposition gears"),
+				loc("[Left], [Right]: Change between selection and placement mode.") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", -amAirAttack, 60000
+				)
+
+	elseif cat[cIndex] == loc("Sprite Modification Mode") then
+
+		ShowMission	(
+				loc("SPRITE MODIFICATION MODE"),
+				"",
+				"Use this mode to select, modify, or delete existing girders," .. "|" ..
+				"rubbers, or sprites." .. "|" ..
+				"[Left], [Right]: Change between land-flag" .. "|" ..
+				--"[Left], [Right]: Change between selection, land-flag" .. "|" ..
+				"modification, and deletion modes." .. "|" ..
+				"While in modification mode, you can " .. "|" ..
+				"change land-flag by clicking on an object." .. "|" ..
+				loc("Set LandFlag: [1], [2], [3], [4]") .. "|" ..
+				" " .. "|" ..
+				loc("1 - Normal Land") .. "|" ..
+				loc("2 - Indestructible Land") .. "|" ..
+				loc("3 - Icy Land") .. "|" ..
+				loc("4 - Bouncy Land") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", -amAirAttack, 60000
+				)
+
+	elseif cat[cIndex] == loc("Sprite Placement Mode") then
+
+		ShowMission	(
+				loc("SPRITE PLACEMENT MODE"),
+				loc("Use this mode to place custom sprites."),
+				loc("[Left], [Right]: Change sprite selection") .. "|" ..
+				loc("Set LandFlag: [1], [2], [3], [4]") .. "|" ..
+				" " .. "|" ..
+				loc("1 - Normal Land") .. "|" ..
+				loc("2 - Indestructible Land") .. "|" ..
+				loc("3 - Icy Land") .. "|" ..
+				loc("4 - Bouncy Land") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", 2, 60000
+				)
+
+	--elseif cat[cIndex] == loc("Sprite Testing Mode") then
+
+	--	ShowMission	(
+	--			"SPRITE TESTING MODE",
+	--			"Use this mode to test sprites before you place them.",
+	--			"Place Temporary Visual Test: [Left Click]" .. "|" ..
+	--			"[Left], [Right]: Change between sprites." .. "|" ..
+	--			" " .. "|" ..
+	--			loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+	--			loc("Toggle Help: Precise+1") .. "|" ..
+	--			"", 3, 60000
+	--			)
+
+	elseif cat[cIndex] == loc("Tagging Mode") then
+
+		ShowMission	(
+				loc("TAGGING MODE"),
+				loc("Use this mode to tag gears for win/lose conditions."),
+				loc("Tag Gear: [Left Click]") .. "|" ..
+				loc("[Left], [Right]: Change between tagging modes.") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", 3, 60000
+				)
+	elseif cat[cIndex] == loc("Hog Identity Mode") then
+
+		ShowMission	(
+				loc("HOG IDENTITY MODE"),
+				loc("Use this mode to give a hog a preset identity and weapons."),
+				loc("Set Identity: [Left Click]") .. "|" ..
+				loc("[Left], [Right]: Change between identities.") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", 3, 60000
+				)
+
+	elseif cat[cIndex] == loc("Team Identity Mode") then
+
+		ShowMission	(
+				loc("TEAM IDENTITY MODE"),
+				loc("Use this mode to give an entire team themed hats and names."),
+				loc("Set Identity: [Left Click]") .. "|" ..
+				loc("[Left], [Right]: Change between identities.") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", 3, 60000
+				)
+
+	elseif cat[cIndex] == loc("Health Modification Mode") then
+
+		ShowMission	(
+				loc("HEALTH MODIFICATION MODE"),
+				loc("Use this mode to set the health of hogs."),
+				loc("Set Health: [Left Click]") .. "|" ..
+				loc("[Left], [Right]: Change health value.") .. "|" ..
+				" " .. "|" ..
+				loc("Change Placement Mode: [Up], [Down]") .. "|" ..
+				loc("Toggle Help: Precise+1") .. "|" ..
+				"", 3, 60000
+				)
+
+	end
+
+
+	if helpDisabled == true then
+		HideMission()
+	end
+
+end
+
+-- called in onGameTick()
+function HandleHedgeEditor()
+
+	if CurrentHedgehog ~= nil then
+
+		genTimer = genTimer + 1
+
+
+		tSprCol = 0x00000000
+		tempFrame = 0
+		xDisplacement = 42
+		yDisplacement = 42
+
+		if (curWep == amAirAttack) then
+
+			--wowaweewa, holyeeeee shite this is badly hacked (please rewrite when less lazy/morefeatures)
+			dCol = 0xFFFFFFFF
+			dFrame = 0
+			dAngle = 0
+			if (cat[cIndex] == loc("Mine Placement Mode")) then
+				dSprite = sprBotlevels--sprMineOff
+				dFrame = 1
+			elseif (cat[cIndex] == loc("Sticky Mine Placement Mode")) then
+				dSprite = sprBotlevels--sprSMineOff
+				dFrame = 2
+			elseif (cat[cIndex] == loc("Air Mine Placement Mode")) then
+				dSprite = sprAirMine
+			elseif (cat[cIndex] == loc("Barrel Placement Mode")) then
+				dSprite = sprExplosives
+			elseif (cat[cIndex] == loc("Health Crate Placement Mode")) then
+				dSprite = sprFAid
+			elseif (cat[cIndex] == loc("Weapon Crate Placement Mode")) then
+				dSprite = sprCase
+			elseif (cat[cIndex] == loc("Utility Crate Placement Mode")) then
+				dSprite = sprUtility
+			elseif (cat[cIndex] == loc("Target Placement Mode")) then
+				dSprite = sprTarget
+			elseif (cat[cIndex] == loc("Cleaver Placement Mode")) then
+				dAngle = 270
+				dSprite = sprKnife
+			elseif (cat[cIndex] == loc("Sprite Placement Mode")) then
+				dSprite = reducedSpriteIDArray[pIndex]
+				dFrame = 1
+			else
+				dCol = 0xFFFFFF00
+				dSprite = sprArrow
+			end
+
+			if CG == nil then
+				CG = AddVisualGear(CursorX, CursorY, vgtStraightShot,0,true,3)
+			end
+			g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(CG)
+			SetVisualGearValues(CG, CursorX, CursorY, 0, 0, dAngle, dFrame, 1000, dSprite, 1000, dCol)
+
+
+
+			if crateSprite == nil then
+				crateSprite = AddVisualGear(CursorX, CursorY-35, vgtStraightShot,0,true,3)
+				for i = 1, 4 do
+					tSpr[i] = AddVisualGear(CursorX, CursorY-35, vgtStraightShot,0,true,3)
+				end
+			end
+
+
+			if (cat[cIndex] == loc("Weapon Crate Placement Mode")) or (cat[cIndex] == loc("Utility Crate Placement Mode")) then
+				if (cat[cIndex] == loc("Weapon Crate Placement Mode")) then
+					tArr = atkArray
+				else
+					tArr = utilArray
+				end
+
+				tSprCol = 0xFFFFFFFF
+				tempFrame = tArr[pIndex][3]
+
+			end
+
+		else
+			if CG ~= nil then
+				SetVisualGearValues(CG, 0, 0, 0, 0, 0, 0, 1000, sprArrow, 1000, 0xFFFFFF00)
+			end
+		end
+
+		SetVisualGearValues(crateSprite, CursorX+xDisplacement, CursorY+yDisplacement, 0, 0, dAngle, tempFrame, 1000, sprAMAmmos, 1000, tSprCol)
+		SetVisualGearValues(tSpr[1], CursorX+xDisplacement-2, CursorY+yDisplacement-2, 0, 0, dAngle, 10, 1000, sprTarget, 1000, tSprCol)
+		SetVisualGearValues(tSpr[2], CursorX+xDisplacement-2, CursorY+yDisplacement+2, 0, 0, dAngle, 10, 1000, sprTarget, 1000, tSprCol)
+		SetVisualGearValues(tSpr[3], CursorX+xDisplacement+2, CursorY+yDisplacement-2, 0, 0, dAngle, 10, 1000, sprTarget, 1000, tSprCol)
+		SetVisualGearValues(tSpr[4], CursorX+xDisplacement+2, CursorY+yDisplacement+2, 0, 0, dAngle, 10, 1000, sprTarget, 1000, tSprCol)
+
+
+		if genTimer >= 100 then
+
+			genTimer = 0
+
+			--if destroyMap == true then
+			--	BlowShitUpPartTwo()
+			--end
+
+			curWep = GetCurAmmoType()
+
+			HandleRankingEffects()
+			runOnGears(PortalEffects)
+
+			-- change to girder mode on weapon swap
+			if (cIndex ~= 1) and (curWep == amGirder) then
+				cIndex = 1
+				RedefineSubset()
+				updateHelp()
+			elseif (cIndex ~=2) and (curWep == amRubber) then
+				cIndex = 2
+				RedefineSubset()
+				updateHelp()
+			-- change to generic mode if girder no longer selected
+			elseif (cIndex == 1) and (curWep ~= amGirder) then
+				cIndex = 3 -- was 2
+				RedefineSubset()
+				--updateHelp()
+			elseif (cIndex == 2) and (curWep ~= amRubber) then
+				cIndex = 3 --new
+				RedefineSubset()
+				--updateHelp()
+
+			end
+
+			-- update display selection criteria
+			if (curWep == amGirder) or (curWep == amRubber) or (curWep == amAirAttack) then
+				AddCaption(cat[cIndex],0xffba00ff,capgrpMessage)
+				AddCaption(pMode[pIndex],0xffba00ff,capgrpMessage2)
+				if superDelete == true then
+					AddCaption(loc("Warning: Deletition Mode Active"),0xffba00ff,capgrpAmmoinfo)
+				end
+			end
+
+
+			if sSprite ~= nil then
+				g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(sSprite)
+				SetVisualGearValues(sSprite, g1, g2, 0, 0, g5, g6, 10000, g8, 10000, g10 )
+				--AddCaption(g7)
+			end
+
+		end
+
+	end
+
+
+	if (ufoFuel ~= 0) then
+		if ufoFuel == 2000 then
+			SetHealth(ufoGear, 2000)
+		end
+	end
+
+	-- kinda lazy, but at least we don't have to do elaborate tacking elsewhere
+	SetVisualGearValues(sCirc, 0, 0, 0, 1, 1, 10, 0, 1, 1, 0x00000000)
+	--update selected gear display
+	if (cat[cIndex] == loc("Advanced Repositioning Mode")) and (sGear ~= nil) then
+		SetVisualGearValues(sCirc, GetX(sGear), GetY(sGear), 100, 255, 1, 10, 0, 300, 3, 0xff00ffff)
+	elseif (cat[cIndex] == loc("Sprite Modification Mode")) and (sSprite ~= nil) then
+		g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(sSprite)
+		SetVisualGearValues(sSprite, g1, g2, 0, 0, g5, g6, 10000, g8, 10000, g10 )
+	elseif (cat[cIndex] == loc("Tagging Mode")) then
+		if (sGear ~= nil) or (closestGear ~= nil) then
+			--recently disabled
+			--SetVisualGearValues(sCirc, GetX(sGear), GetY(sGear), 0, 1, 1, 10, 0, 1, 1, 0x00000000)
+			closestGear = nil
+			sGear = nil
+		end
+	end
+
+
+	runOnGears(UpdateTagCircles)
+
+
+	-- some kind of target detected, tell me your story
+	if cGear ~= nil then
+
+		x,y = GetGearTarget(cGear)
+
+		if GetGearType(cGear) == gtAirAttack then
+			DeleteGear(cGear)
+			PlaceObject(x, y)
+		elseif GetGearType(cGear) == gtGirder then
+
+			CGR = GetState(cGear)
+
+			-- improve rectangle test based on CGR when you can be bothered
+			--if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then
+			--	AddCaption(loc("Invalid Girder Placement"),0xffba00ff,capgrpVolume)
+			--else
+				PlaceObject(x, y)
+			--end
+
+			-- this allows the girder tool to be used like a mining laser
+
+		--[[
+
+			if CGR < 4 then
+				AddGear(x, y, gtGrenade, 0, 0, 0, 1)
+			elseif CGR == 4 then
+				g = AddGear(x-30, y, gtGrenade, 0, 0, 0, 1)
+				g = AddGear(x+30, y, gtGrenade, 0, 0, 0, 1)
+			elseif CGR == 5 then -------
+				g = AddGear(x+30, y+30, gtGrenade, 0, 0, 0, 1)
+				g = AddGear(x-30, y-30, gtGrenade, 0, 0, 0, 1)
+			elseif CGR == 6 then
+				g = AddGear(x, y+30, gtGrenade, 0, 0, 0, 1)
+				g = AddGear(x, y-30, gtGrenade, 0, 0, 0, 1)
+			elseif CGR == 7 then -------
+				g = AddGear(x+30, y-30, gtGrenade, 0, 0, 0, 1)
+				g = AddGear(x-30, y+30, gtGrenade, 0, 0, 0, 1)
+			end
+]]
+		end
+
+	end
+
+end
+
+--------------------------------------------------
+-- EVENT HANDLERS
+--------------------------------------------------
+
+function commandMode()
+	if (preciseOn == true) and ((GetCurAmmoType() == amNothing) or (GetCurAmmoType() == amSkip)) then
+		return(true)
+	else
+		return(false)
+	end
+end
+
+function onTimer(s)
+
+	superDelete = false
+	if (commandMode() == true) and (s == 4) then
+		SaveLevelData() -- positions of crates, etc
+	elseif (commandMode() == true) and (s == 2) then
+		if GetAmmoCount(CurrentHedgehog, amAirAttack) == 100 then
+			SetEditingWeps(0)
+			AddCaption(loc("The editor weapons and tools have been removed!"))
+		else
+			SetEditingWeps(100)
+			AddCaption(loc("The editor weapons and tools have been added!"))
+		end
+	elseif (preciseOn == true) and (s == 1) then
+		if (GetCurAmmoType() == amGirder) or  (GetCurAmmoType() == amRubber) or  (GetCurAmmoType() == amAirAttack) then
+			helpDisabled = not(helpDisabled)
+			AddCaption("Help Disabled: " .. BoolToString(helpDisabled),0xffba00ff,capgrpVolume)
+			updateHelp()
+		end
+	elseif (cat[cIndex] == loc("Sprite Placement Mode")) or (cat[cIndex] == loc("Girder Placement Mode")) or (cat[cIndex] == loc("Rubber Placement Mode")) or (cat[cIndex] == loc("Sprite Modification Mode")) then
+
+		if (cat[cIndex] == loc("Rubber Placement Mode")) and (s ~= 5) then
+			landType = lfBouncy
+			AddCaption(loc("Bouncy Land"),0xffba00ff,capgrpAmmoinfo)
+		elseif s == 1 then
+			landType = 0
+			AddCaption(loc("Normal Land"),0xffba00ff,capgrpAmmoinfo)
+		elseif s == 2 then
+			landType = lfIndestructible
+			AddCaption(loc("Indestructible Land"),0xffba00ff,capgrpAmmoinfo)
+		elseif s == 3 then
+			landType = lfIce
+			AddCaption(loc("Icy Land"),0xffba00ff,capgrpAmmoinfo)
+		elseif (s == 4) then --and (cat[cIndex] == "Sprite Placement Mode") then
+			landType = lfBouncy
+			AddCaption(loc("Bouncy Land"),0xffba00ff,capgrpAmmoinfo)
+		elseif (s == 5) and (cat[cIndex] ~= loc("Sprite Modification Mode")) then
+			superDelete = true
+			-- this and the above should probably be shown in another place where the other
+			-- two add captions are displayed for this kinda thing
+			--AddCaption(loc("Warning: Deletition Mode Active"),0xffba00ff,capgrpAmmoinfo)
+		end
+	elseif pMode[pIndex] == loc("Selection Mode") then
+		setGearValue(sGear, "ranking", s)
+	end
+
+end
+
+function onPrecise()
+
+	preciseOn = true
+
+	--ParseCommand("voicepack " .. "Surfer")
+	--AddCaption(GetHogGrave(CurrentHedgehog))
+
+	--if (pMode[pIndex] == "Selection Mode") and (closestGear ~= nil) then
+	--	menuEnabled = not(menuEnabled)
+		--showmenu
+	--end
+
+	--BlowShitUp()
+
+--[[
+	frameID = 1
+	visualSprite = sprAmGirder--reducedSpriteIDArray[pIndex]
+	--visualSprite = spriteIDArray[pIndex]
+	tempE = AddVisualGear(1, 1, vgtStraightShot, 0, true,1)
+	g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+	SetVisualGearValues(tempE, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 )
+
+]]
+
+end
+
+function onPreciseUp()
+	preciseOn = false
+end
+
+--[[function onLJump()
+end
+
+function onHJump()
+end]]
+
+--[[function UpdateMenu()
+
+	preMenuCfg = loc("Use the arrow keys to navigate this menu") .. "|"
+	postMenuCfg = loc("Press [Fire] to accept this configuration.")
+
+	menu = 	{
+			loc("Walls Required") .. ": " .. #wTouched .. "|",
+			loc("Surf Before Crate") .. ": " .. BoolToCfgTxt(requireSurfer) .. "|",
+			loc("Attack From Rope") .. ": " .. BoolToCfgTxt(AFR) .. "|",
+			loc("Super Weapons") .. ": " .. BoolToCfgTxt(allowCrazyWeps) .. "|"
+			}
+end
+
+function HandleStartingStage()
+
+	temp = menu[menuIndex]
+	menu[menuIndex] = "--> " .. menu[menuIndex]
+
+	missionComment = ""
+	for i = 1, #menu do
+		missionComment = missionComment .. menu[i]
+	end
+
+	ShowMission	(
+				loc("HEDGE EDITOR") .. " 0.4",
+				loc("Edit gear properties"),
+				preMenuCfg..
+				missionComment ..
+				postMenuCfg ..
+				--" " .. "|" ..
+				"", 4, 300000
+				)
+
+	menu[menuIndex] = temp
+
+end
+
+function UpdateMenuCategoryOrSomething()
+	temp = menu[1]
+	menu = {}
+	if temp == "Initialisation Menu" then
+		for i = 1, #initMenuArray do
+			menu[i] = initMenuArray[i] .. ": " .. initMenuArray[2]
+		end
+	elseif temp == "GameFlag Menu" then
+		for i = 1, #gameFlagList do
+			menu[i] = gameFlagList[1] .. ": " .. BoolToStr(gameFlagList[2])
+		end
+	elseif temp == "Ammo Menu" then
+		for i  = 1, #atkArray do	--except, this should be per hog, not overall :(
+			--menu[i] = atkArray[i][2] .. ": " .. atkArray[i][3]
+			menu[i] = atkArray[i][2] .. ": " .. getGearValue(sGear,atkArray[i][1])
+		end
+		-- you should run through all the hogs and assign them ammo values based on the
+		-- ammo set, yea, let's write that function in 5th
+		for i = #menu, #utilArray do
+		end
+	end
+end
+
+function doMenuShit(d)
+
+	if d == "up" then
+		menuIndex = menuIndex -1
+		if 	menuIndex == 0 then
+			menuIndex = #menu
+		end
+	elseif d == "down" then
+		menuIndex = menuIndex +1
+		if menuIndex > #menu then
+			menuIndex = 1
+		end
+	elseif d == "left" then
+
+	elseif d == "right" then
+
+	end
+
+end]]
+
+---------------------------------------------------------------
+-- Cycle through selection subsets (by changing pIndex, pMode)
+-- i.e 	health of barrels, medikits,
+--		timer of mines
+--		contents of crates etc.
+---------------------------------------------------------------
+function onLeft()
+
+	leftHeld = true
+	rightHeld = false
+
+	--if menuEnabled == true then
+		--doMenuShit("left")
+
+	--else -- normal case
+
+		pIndex = pIndex - 1
+		if pIndex == 0 then
+			pIndex = #pMode
+		end
+
+		if (curWep == amGirder) or (curWep == amRubber) or (curWep == amAirAttack) then
+			AddCaption(pMode[pIndex],0xffba00ff,capgrpMessage2)
+		end
+
+	--end
+
+end
+
+function onRight()
+
+	leftHeld = false
+	rightHeld = true
+
+	--if menuEnabled == true then
+		--doMenuShit("right")
+
+	--else -- normal case
+
+		pIndex = pIndex + 1
+		if pIndex > #pMode then
+			pIndex = 1
+		end
+
+		if (curWep == amGirder) or (curWep == amRubber) or (curWep == amAirAttack) then
+			AddCaption(pMode[pIndex],0xffba00ff,capgrpMessage2)
+		end
+
+	--end
+
+end
+
+---------------------------------------------------------
+-- Cycle through primary categories (by changing cIndex)
+-- i.e 	mine, sticky mine, barrels
+--		health/weapon/utility crate, placement of gears
+---------------------------------------------------------
+function onUp()
+
+	--if menuEnabled == true then
+		--doMenuShit("up")
+
+	--elseif (curWep ~= amGirder) then
+	if (curWep ~= amGirder) then
+		--AddCaption(cIndex)
+		cIndex = cIndex - 1
+		if (cIndex == 1) or (cIndex == 2) then --1	--we no longer hit girder by normal means
+			cIndex = #cat
+		end
+
+		RedefineSubset()
+		updateHelp()
+
+	end
+
+end
+
+function onDown()
+
+	--if menuEnabled == true then
+		--doMenuShit("down")
+
+	--elseif (curWep ~= amGirder) then
+	if (curWep ~= amGirder) then
+		cIndex = cIndex + 1
+		if cIndex > #cat then
+			cIndex = 3	 -- 2 ----we no longer hit girder by normal means
+		end
+
+		RedefineSubset()
+		updateHelp()
+
+	end
+
+end
+
+function onParameters()
+
+    parseParams()
+
+	ufoFuel = tonumber(params["ufoFuel"])
+	if ufoFuel == nil then
+		ufoFuel = 0
+	end
+
+	mapID = tonumber(params["m"])
+
+	--15 is a good short range portal, for what it's worth
+	if tonumber(params["portalDistance"]) ~= nil then
+		portalDistance = div(tonumber(params["portalDistance"]),5)
+	end
+
+	if portalDistance == nil then
+		portalDistance = 5000
+	end
+
+	if params["helpDisabled"] == "true" then
+		helpDisabled = true
+	end
+
+	if mapID == nil then
+		mapID = 1
+	end
+
+end
+
+function onGameInit()
+
+	-- perhaps we can get some of this better info in parsecommandoverride
+	--Map = "Islands"
+	--Theme = "Deepspace"
+	--Seed = "{bacb2f87-f316-4691-a333-3bcfc4fb3d88}"
+	--MapGen = 0 -- 0:generated map, 1:generated maze, 2:hand drawn map
+	--TemplateFilter = 5	-- small=1,med=2,large=3,cavern=4,wacky=5
+
+	if mapID == nil then
+		mapID = 1
+	end
+
+	-- read gameflags and assign their values to the gameflaglist array
+	for i = 1, #gameFlagList do
+		if band(GameFlags, gameFlagList[i][3]) ~= 0 then
+			gameFlagList[i][2] = true
+		else
+			gameFlagList[i][2] = false
+		end
+	end
+
+	Explosives = 0
+	MinesNum = 0
+
+	--GameFlags = GameFlags + gfInfAttack
+	EnableGameFlags(gfInfAttack, gfDisableWind)
+
+	RedefineSubset()
+
+end
+
+function onGameStart()
+
+	trackTeams()
+
+
+	InterpretPoints()
+	LoadLevelData()
+
+	ShowMission	(
+				loc("HEDGE EDITOR"),
+				loc("(well... kind of...)"),
+				loc("Place Girder: Girder") .. "|" ..
+				loc("Place Rubber: Rubber") .. "|" ..
+				loc("Place Gear: Air Attack") .. "|" ..
+				loc("Change Selection: [Up], [Down], [Left], [Right]") .. "|" ..
+				loc("Toggle Help: Precise+1 (While a tool is selected)") .. "|" ..
+				" " .. "|" ..
+				loc("COMMANDS: (Use while no weapon is selected)") .. "|" ..
+				loc("Save Level: Precise+4") .. "|" ..
+				loc("Toggle Editing Weapons and Tools: Precise+2") .. "|" ..
+				" " .. "|" ..
+				--" " .. "|" ..
+				"", 4, 5000
+				)
+
+
+	sCirc = AddVisualGear(0,0,vgtCircle,0,true)
+	SetVisualGearValues(sCirc, 0, 0, 100, 255, 1, 10, 0, 40, 3, 0xffba00ff)
+
+
+	frameID = 1
+	visualSprite = sprAmGirder
+	sSprite = AddVisualGear(0, 0, vgtStraightShot, 0, true,1)
+	g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(sSprite)
+	SetVisualGearValues(sSprite, 1, 1, 0, 0, g5, frameID, 20000, visualSprite, 20000, g10 )
+
+	SetAmmoDelay(amAirAttack,0)
+	SetAmmoDelay(amGirder,0)
+	SetAmmoDelay(amRubber,0)
+	--SetAmmoDelay(amNapalm,0)
+	--SetAmmoDelay(amDrillStrike,0)
+	--SetAmmoDelay(amMineStrike,0)
+
+end
+
+function SetEditingWeps(ammoCount)
+
+	AddAmmo(CurrentHedgehog, amAirAttack, ammoCount)
+	AddAmmo(CurrentHedgehog, amGirder, ammoCount)
+	AddAmmo(CurrentHedgehog, amRubber, ammoCount)
+	--AddAmmo(CurrentHedgehog, amPortalGun, ammoCount)
+	AddAmmo(CurrentHedgehog, amTeleport, ammoCount)
+	AddAmmo(CurrentHedgehog, amRope, ammoCount)
+	--AddAmmo(CurrentHedgehog, amJetpack, ammoCount)
+	--AddAmmo(CurrentHedgehog, amParachute, ammoCount)
+	AddAmmo(CurrentHedgehog, amSwitch, 100) --ammoCount
+	AddAmmo(CurrentHedgehog, amSkip, 100)
+
+end
+
+function clearAmmo(gear)
+	for i = 1, #atkArray do
+		AddAmmo(gear,atkArray[i][1],0)
+	end
+	for i = 1, #utilArray do
+		AddAmmo(gear,utilArray[i][1],0)
+	end
+end
+
+-- the below two functions allow you to set up a themed team.
+-- one day, it'd be nice to be able to set their voice/flag/grave
+-- ingame at this point, too, but for now, this is impossible
+function SetTeamIdentity(gear)
+	tName = pMode[pIndex]
+	hIndex = 1
+	hArr = {}
+	for i = 1,#preMadeTeam[pIndex][2] do
+		table.insert(hArr,preMadeTeam[pIndex][2][i])
+	end
+	nArr = {}
+	for i = 1,#preMadeTeam[pIndex][3] do
+		table.insert(nArr,preMadeTeam[pIndex][3][i])
+	end
+	SetHogTeamName(gear, tName)
+	--runOnHogsInTeam(AssignTeam(gear),tName)
+	runOnHogs(AssignTeam)
+end
+
+function AssignTeam(gear)
+
+	if GetHogTeamName(gear) == tName then
+
+		setGearValue(gear,"flag",preMadeTeam[pIndex][5])
+		setGearValue(gear,"voice",preMadeTeam[pIndex][6])
+		setGearValue(gear,"grave",preMadeTeam[pIndex][7])
+		setGearValue(gear,"fort",preMadeTeam[pIndex][8])
+
+		if preMadeTeam[pIndex][4] == "R" then -- random team
+
+			if #hArr > 0 then
+				--if there are unchosen hats left, choose one
+				--then remove it from the available list of hats
+				i = 1+GetRandom(#hArr)
+				SetHogHat(gear,hArr[i])
+				table.remove(hArr,i)
+			else
+				-- choose any hat randomly
+				SetHogHat(gear,preMadeTeam[pIndex][2][1+GetRandom(#preMadeTeam[pIndex][2])])
+			end
+
+			if #nArr > 0 then
+				i = 1+GetRandom(#nArr)
+				SetHogName(gear,nArr[i])
+				table.remove(nArr,i)
+			else
+				SetHogName(gear,preMadeTeam[pIndex][3][1+GetRandom(#preMadeTeam[pIndex][3])])
+			end
+
+		elseif preMadeTeam[pIndex][4] == "F" then -- fixed team w/ exactly 8 guys
+			SetHogName(gear,preMadeTeam[pIndex][3][hIndex])
+			SetHogHat(gear,preMadeTeam[pIndex][2][hIndex])
+			hIndex = hIndex +1
+		else -- FR fixed random team with more or less than 8 guys
+
+			if #hArr > 0 then
+				i = 1+GetRandom(#hArr)
+				SetHogHat(gear,hArr[i])
+				SetHogName(gear,nArr[i])
+				table.remove(hArr,i)
+				table.remove(nArr,i)
+			else
+				SetHogHat(gear,"NoHat")
+				SetHogName(gear,"Uninspiring hog")
+			end
+
+		end
+
+	end
+
+end
+
+-- allows you to set a sort of identity and weapon profile for a given hog
+-- this should only really be used when perHogAmmo is enabled
+function SetHogProfile(gear, pro)
+
+	clearAmmo(gear)
+
+	if pro == loc("Sniper") then
+
+		SetHogName(gear,"Sniper")
+		SetHogHat(gear, "Sniper")
+		SetHealth(gear, 50)
+		AddAmmo(gear, amSniperRifle, 100)
+		AddAmmo(gear, amDEagle, 100)
+
+	elseif pro == loc("Pyro") then
+
+		SetHogName(gear,loc("Pyro"))
+		SetHogHat(gear, "Gasmask")
+		SetHealth(gear, 80)
+		AddAmmo(gear, amFlamethrower, 100)
+		AddAmmo(gear, amMolotov, 100)
+		AddAmmo(gear, amNapalm, 1)
+
+	elseif pro == loc("Soldier") then
+
+		SetHogName(gear,loc("Soldier"))
+		--SetHogHat(gear, "war_americanww2helmet")
+		SetHogHat(gear, "TeamSoldier")
+		SetHealth(gear, 100)
+		AddAmmo(gear, amBazooka, 100)
+		AddAmmo(gear, amShotgun, 100)
+		AddAmmo(gear, amMortar, 100)
+
+	elseif pro == loc("Grenadier") then
+
+		SetHogName(gear,loc("Grenadier"))
+		SetHogHat(gear, "war_desertgrenadier1")
+		SetHealth(gear, 100)
+		AddAmmo(gear, amGrenade, 100)
+		AddAmmo(gear, amClusterBomb, 100)
+		AddAmmo(gear, amGasBomb, 100)
+
+	elseif pro == loc("Chef") then
+
+		SetHogName(gear,loc("Chef"))
+		SetHogHat(gear, "chef")
+		SetHealth(gear, 65)
+		AddAmmo(gear, amGasBomb, 100)
+		AddAmmo(gear, amKnife, 100)
+		AddAmmo(gear, amCake, 1)
+		--AddAmmo(gear, amWatermelon, 1)
+
+	elseif pro == loc("Ninja") then
+
+		SetHogName(gear,loc("Ninja"))
+		SetHogHat(gear, "NinjaFull")
+		SetHealth(gear, 80)
+		AddAmmo(gear, amRope, 100)
+		AddAmmo(gear, amFirePunch, 100)
+		AddAmmo(gear, amParachute, 1)
+
+	elseif pro == loc("Commander") then
+
+		SetHogName(gear,loc("Commander"))
+		SetHogHat(gear, "sf_vega")
+		SetHealth(gear, 120)
+		AddAmmo(gear, amDEagle, 100)
+		AddAmmo(gear, amAirAttack, 2)
+		AddAmmo(gear, amNapalm, 1)
+		AddAmmo(gear, amDrillStrike, 1)
+		AddAmmo(gear, amMineStrike, 1)
+
+	elseif pro == loc("Engineer") then
+
+		SetHogName(gear,loc("Engineer"))
+		SetHogHat(gear, "Glasses")
+		SetHealth(gear, 45)
+		AddAmmo(gear, amGirder, 4)
+		AddAmmo(gear, amRubber, 2)
+		AddAmmo(gear, amLandGun, 2)
+		AddAmmo(gear, amBlowTorch, 100)
+		AddAmmo(gear, amPickHammer, 100)
+
+	elseif pro == loc("Physicist") then
+
+		SetHogName(gear,loc("Physicist"))
+		SetHogHat(gear, "lambda")
+		SetHealth(gear, 80)
+		AddAmmo(gear, amIceGun, 2)
+		AddAmmo(gear, amSineGun, 100)
+		AddAmmo(gear, amBee, 2)
+		AddAmmo(gear, amLowGravity, 100)
+
+	elseif pro == loc("Trapper") then
+
+		SetHogName(gear,loc("Trapper"))
+		SetHogHat(gear, "Skull")
+		SetHealth(gear, 100)
+		AddAmmo(gear, amMine, 100)
+		AddAmmo(gear, amSMine, 4)
+		AddAmmo(gear, amAirMine, 2)
+		AddAmmo(gear, amMolotov, 100)
+
+	elseif pro == loc("Saint") then
+
+		SetHogName(gear,loc("Saint"))
+		SetHogHat(gear, "angel")
+		SetHealth(gear, 200)
+		AddAmmo(gear, amSeduction, 100)
+		AddAmmo(gear, amInvulnerable, 100)
+		AddAmmo(gear, amIceGun, 2)
+		AddAmmo(gear, amHammer, 100)
+		AddAmmo(gear, amResurrector, 100)
+
+	elseif pro == loc("Clown") then
+
+		SetHogName(gear,loc("Clown"))
+		SetHogHat(gear, "clown-copper")
+		SetHealth(gear, 70)
+		AddAmmo(gear, amBaseballBat, 100)
+		AddAmmo(gear, amGasBomb, 100)
+		AddAmmo(gear, amBallgun, 1)
+		AddAmmo(gear, amKamikaze, 1)
+		--AddAmmo(gear, amPiano, 1)
+
+	-- some other ideas/roles
+	-- relocator: portal, teleport, tardis, extra time, lasersite
+	-- vampire: vampire, whip, birdy, extra damage, seduction
+	-- flyboy: rc plane, deagle, whip, parachute, kamikaze
+	-- demo: drill, dynamite, mine, smine, blowtorch
+	-- alien: ufo, sine-gun, drill rocket
+	-- terminator: tardis, shotgun, cake, girder
+	-- yeti: ice-gun, firepunch, blowtorch
+
+	end
+
+	AddAmmo(gear, amSwitch, 100)
+	AddAmmo(gear, amSkip, 100)
+
+end
+
+function onNewTurn()
+
+	-- regardless of our other ammo, give stuff that is useful for editing
+	SetEditingWeps(100)
+	if GetHogLevel(CurrentHedgehog) == 0 then
+		TurnTimeLeft = -1	-- is that turntime in your pocket? :D
+	else
+		TurnTimeLeft = 1 -- skip the computer's turn
+	end
+
+end
+
+function onGameTick()
+	HandleHedgeEditor()
+end
+
+function isATrackedGear(gear)
+	if 	(GetGearType(gear) == gtHedgehog) or
+		(GetGearType(gear) == gtGrenade) or
+		(GetGearType(gear) == gtExplosives) or
+		(GetGearType(gear) == gtTarget) or
+		(GetGearType(gear) == gtKnife) or
+		(GetGearType(gear) == gtMine) or
+		(GetGearType(gear) == gtSMine) or
+		(GetGearType(gear) == gtPortal) or
+		(GetGearType(gear) == gtAirMine) or
+		(GetGearType(gear) == gtCase)
+	then
+		return(true)
+	else
+		return(false)
+	end
+end
+
+-- track hedgehogs and placement gears
+function onGearAdd(gear)
+
+	if GetGearType(gear) == gtJetpack then
+		ufoGear = gear
+		if (ufoFuel ~= 0) then
+			SetHealth(ufoGear, ufoFuel)
+		end
+	end
+
+	if GetGearType(gear) == gtHedgehog then
+		--table.insert(hhs, gear)
+	elseif (GetGearType(gear) == gtAirAttack) or (GetGearType(gear) == gtGirder) then
+		cGear = gear
+	end
+
+	if isATrackedGear(gear) then
+		trackGear(gear)
+
+		if GetGearType(gear) == gtPortal then
+			setGearValue(gear,"life",portalDistance)
+		end
+
+	end
+
+end
+
+function onGearDelete(gear)
+
+	if GetGearType(gear) == gtJetpack then
+		ufoGear = nil
+	end
+
+	if (GetGearType(gear) == gtAirAttack) or (GetGearType(gear) == gtGirder) then
+		cGear = nil
+	end
+
+	if isATrackedGear(gear) then
+
+		if getGearValue(gear, "tCirc") ~= nil then
+			DeleteVisualGear(getGearValue(gear, "tCirc"))
+		end
+
+		trackDeletion(gear)
+
+	end
+
+end
+
--- a/share/hedgewars/Data/Scripts/Multiplayer/Highlander.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Highlander.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -102,7 +102,7 @@
 					[amFirePunch]=true, [amWhip]=true, [amBaseballBat]=true, [amKamikaze]=true,
                     [amSeduction]=true, [amHammer]=true, [amMine]=true, [amDynamite]=true, [amCake]=true,
                     [amBallgun]=true, [amSMine]=true, [amRCPlane]=true, [amBirdy]=true, [amKnife]=true,
-                    [amAirAttack]=true, [amMineStrike]=true, [amNapalm]=true, [amDrillStrike]=true, [amPiano]=true
+                    [amAirAttack]=true, [amMineStrike]=true, [amNapalm]=true, [amDrillStrike]=true, [amPiano]=true, [amAirMine] = true,
 					}
 
 local utilWeps =  {
@@ -129,7 +129,7 @@
 local probability = {1,2,5,10,20,50,200,500,1000000};
 local atktot = 0
 local utiltot = 0
-local maxWep = 56 -- game crashes if you exceed supported #
+local maxWep = 57 -- game crashes if you exceed supported #
 
 local someHog = nil -- just for looking up the weps
 
--- a/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -1,621 +1,621 @@
-local MUTANT_VERSION = "v0.9.5"
-
---[[                  ___                   ___
-                    (   )                 (   )
-___ .-. .-. ___  ___ | |_    .---. ___ .-. | |_
-(   )   '   (   )(   (   __) / .-, (   )   (   __)
-|  .-.  .-. | |  | | | |   (__) ; ||  .-. .| |
-| |  | |  | | |  | | | | ___ .'`  || |  | || | ___
-| |  | |  | | |  | | | |(   / .'| || |  | || |(   )
-| |  | |  | | |  | | | | | | /  | || |  | || | | |
-| |  | |  | | |  ; ' | ' | ; |  ; || |  | || ' | |
-| |  | |  | ' `-'  / ' `-' ' `-'  || |  | |' `-' ;
-(___)(___)(___'.__.'   `.__.`.__.'_(___)(___)`.__.
-
-
-----  Recommended settings:
-----    * one hedgehog per team
-----    * 'Small' one-island map
-
---]]
-
-HedgewarsScriptLoad("/Scripts/Locale.lua")
-HedgewarsScriptLoad("/Scripts/Tracker.lua")
-HedgewarsScriptLoad("/Scripts/Params.lua")
-
---[[
-    MUTANT SCRIPT
-
-    To Do:  -Clean-up this fucking piece of code
-            -Debug
-            -Find a girlfriend
-            -Fix Sheepluva's hat  +[p]
-            -Cookies
------------------------]]
-
-local hhs = {}
-local numhhs = 0
-local meh = false
-
-local gameOver=false
-
-local mutant = nil
-local mutant_base_health = 200
-local mutant_base_disease = 25
-local disease_timer = 2000
-
-local kill_reward = nil
-local mt_hurt=false
-
-local killsCounter = 0
-
-local team_fire_punishment = 3
-local mutant_kill_reward = 2
-
-local hh_weapons = { amBazooka, amGrenade, amShotgun, amMine}
-
-local mt_weapons = {amWatermelon, amHellishBomb, amBallgun, amRCPlane, amTeleport}
-
-local disease=0
-local timer=0
-
-local winScore = 15
-local hogsLimit = 1
-
-local teams = {}
-
-local circles = {}
-local circleFrame = -1
-
-function showStartingInfo()
-
-	ruleSet = loc("RULES") .. ": " ..
-	" |" .. --" |" ..
-	loc("The first player to kill someone becomes the Mutant.") .. "|" ..
-	loc("The Mutant has super-weapons and a lot of health.") .. "|" ..
-	loc("The Mutant loses health quickly if he doesn't keep scoring kills.") .. "|" ..
-	" |" ..
-	loc("Normal players can only score points by killing the mutant.") .. "|" ..
-	" |" .. "" ..
-	loc("The player with least points (or most deaths) becomes the Bottom Feeder.") .. "|" ..
-	loc("The Bottom Feeder can score points by killing anyone.") .. "|" ..
-	" |" ..
-	loc("POINTS") .. ": " ..
-	" |" ..
-	loc("+2 for becoming a Mutant") .. "|" ..
-	loc("+1 to a Mutant for killing anyone") .. "|" ..
-	loc("+1 to a Bottom Feeder for killing anyone") .. "|" ..
-	loc("-1 to anyone for a suicide") .. "|" ..
-	loc("Other kills don't give you points.")
-
-	ShowMission(loc("Mutant"),
-                loc("a Hedgewars tag game"),
-                ruleSet, 0, 5000)
-
-end
-
-function onGameInit()
-    TurnTime = 20000
-    WaterRise = 0
-    EnableGameFlags(gfResetWeps, gfPerHogAmmo)
-    HealthCaseProb=0
-    HealthCaseAmount=0
-    MinesTime=1000
-    CaseFreq = 2
-end
-
-
-function limitHogs(gear)
-    cnthhs = cnthhs + 1
-        if cnthhs > 1 then
-            hogLimitHit = true
-            SetEffect(gear, heResurrectable, false)
-            --SetHealth(gear, 0)
-            SetGearPosition(gear, -100,LAND_HEIGHT)
-        end
-end
-
-function onGameStart()
-    trackTeams()
-    teamScan()
-    runOnHogs(saveStuff)
-    --local str = "/say " .. MUTANT_VERSION
-    --ParseCommand(str)
-
-    hogLimitHit = false
-    for i=0 , TeamsCount - 1 do
-        cnthhs = 0
-        runOnHogsInTeam(limitHogs, teams[i])
-    end
-    if hogLimitHit then
-        AddCaption(loc("ONE HOG PER TEAM! KILLING EXCESS HEDGES"))
-    end
-    showStartingInfo()
-end
-
-
-
-function giveWeapons(gear)
-    if gear == mutant then
-        AddAmmo(gear, amRope)
-        for i=1, #mt_weapons do
-            AddAmmo(gear, mt_weapons[i])
-        end
-
-    else
-        for i=1, #hh_weapons do
-            AddAmmo(gear,hh_weapons[i])
-        end
-    end
-end
-
-function onAmmoStoreInit()
-
-    SetAmmo(amSkip, 9, 0, 0, 0)
-    SetAmmo(amRope,0,1,0,5)
-    SetAmmo(amSnowball,0,1,0,1)
-
-    for i=1, #hh_weapons do
-        SetAmmo(hh_weapons[i], 0, 0, 0, 1)
-    end
-
-    for i=1, #mt_weapons do
-        SetAmmo(mt_weapons[i], 0, 3, 0, 1)
-    end
-
-end
-
-function drawCircles()
-    for i = 0, #hhs do
-        if circles[hhs[i]] ~= nil then
-            DeleteVisualGear(circles[hhs[i]])
-            circles[hhs[i]] = nil
-        end
-
-        if hhs[i] ~= CurrentHedgehog then
-            if mutant == nil then
-                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
-                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 5, 0xff000080)
-            elseif CurrentHedgehog == mutant then
-                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
-                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 3, 0xaa000070)
-            elseif getGearValue(CurrentHedgehog, "Feeder") and hhs[i] ~= mutant then
-                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
-                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 3, 0xaa000070)
-            elseif hhs[i] == mutant then
-                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
-                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 5, 0xff000080)
-            end
-        end
-    end
-    circleFrame = 0
-end
-
-function onNewTurn()
-
-    trackTeams()
-    killsCounter = 0
-
-    if mutant == nil then
-        AddCaption( loc("FIRST BLOOD MUTATES") )
-    end
-
-    checkScore()
-    giveWeapons(CurrentHedgehog)
-    drawCircles()
-    setAIHints()
-    kill_reward= numhhs*10
-
-    if CurrentHedgehog == mutant then
-        mt_hurt=true
-        disease= mutant_base_disease - numhhs
-    else
-        mt_hurt=false
-    end
-
-    setGearValue(CurrentHedgehog, "Alive", true)
-
-end
-
-function countBodies()
-        if killsCounter == 2 then
-            AddCaption(loc("DOUBLE KILL"))
-        elseif killsCounter == 3 then
-            AddCaption(loc("MEGA KILL"))
-            PlaySound(sndRegret)
-        elseif killsCounter == 4 then
-            AddCaption(loc("ULTRA KILL"))
-        elseif killsCounter == 5 then
-            AddCaption(loc("MONSTER KILL"))
-            PlaySound(sndIllGetYou)
-        elseif killsCounter == 6 then
-            AddCaption(loc("LUDICROUS KILL"))
-            PlaySound(sndNutter)
-        elseif killsCounter == 7 then
-            AddCaption(loc("HOLY SHYTE!"))
-            PlaySound(sndLaugh)
-        elseif killsCounter > 8 then
-            AddCaption(loc("INSANITY"))
-        end
-end
-
-function onGameTick()
-
-    if circleFrame > -1 then
-        for i = 0, #hhs do
-            if circles[hhs[i]] ~= nil and hhs[i]~= nil then
-                hhx, hhy = GetGearPosition(hhs[i])
-                X, Y, dX, dY, Angle, Frame, FrameTicks, State, Timer, Tint = GetVisualGearValues(circles[hhs[i]])
-                SetVisualGearValues(circles[hhs[i]], hhx + 1, hhy - 3, 0, 0, 0, 0, 0, 40 - (circleFrame % 25), Timer, Tint)
-            end
-        end
-
-        circleFrame = circleFrame + 0.06
-
-        if circleFrame >= 25 then
-            for i = 0, #hhs do
-                if circles[hhs[i]] ~= nil then
-                    DeleteVisualGear(circles[hhs[i]])
-                    circles[hhs[i]] = nil
-                end
-            end
-        end
-    end
-
-    if TurnTimeLeft==0 and mt_hurt then
-        mt_hurt = false
-    end
-
-    if mt_hurt and mutant~=nil then
-        timer = timer + 1
-            if timer > disease_timer then
-                timer = 0
-                SetHealth(mutant, GetHealth(mutant)-disease )
-                AddVisualGear(GetX(mutant), GetY(mutant)-5, vgtHealthTag, disease, true)
-                    if GetHealth(mutant)<=0 then
-                        SetHealth(mutant,0)
-                        mt_hurt= false
-                        setGearValue(mutant,"SelfDestruct",true)
-                        TurnTimeLeft = 0
-                    end
-            end
-    end
-
-end
-
-function saveStuff(gear)
-    setGearValue(gear,"Name",GetHogName(gear))
-    setGearValue(gear,"Hat",GetHogHat(gear))
-end
-
-function armageddon(gear)
-    SetState(gear, gstLoser)
-    SetEffect(gear, heResurrectable, false)
-    SetHealth(gear, 0)
-end
-
-function updateScore()
-
-    local showScore = ""
-
-    for i=0, TeamsCount-1 do
-        if teams[i]~= nil then
-
-            local curr_score = getTeamValue(teams[i], "Score")
-            showScore = showScore .. teams[i] .. ": " .. curr_score .. " (deaths: " .. getTeamValue(teams[i], "DeadHogs") .. ") " .. "|"
-
-        end
-    end
-
-    ShowMission(loc("Score"),
-                "-------",
-                showScore, 0, 200)
-
-    HideMission()
-
-end
-
-function checkScore()
-local showScore = ""
-local lowest_score_team = nil
-local min_score=nil
-local winTeam = nil
-
-local only_low_score = true
-
-    for i=0, TeamsCount-1 do
-        if teams[i]~=nil then
-            local curr_score = getTeamValue(teams[i], "Score")
-
-            runOnHogsInTeam(removeFeeder, teams[i])
-
-            showScore = showScore .. teams[i] ..": " .. curr_score .. " (deaths: " .. getTeamValue(teams[i], "DeadHogs") .. ") " .. "|"
-
-            if curr_score >= winScore then
-                gameOver = true
-                winTeam = teams[i]
-            end
-
-            if min_score==nil then
-                min_score= curr_score
-                lowest_score_team = teams[i]
-            else
-                if curr_score <= min_score then
-                    if curr_score == min_score then
-                        if getTeamValue(teams[i], "DeadHogs") == getTeamValue(lowest_score_team, "DeadHogs") then
-                            only_low_score = false
-                        else
-                            if getTeamValue(teams[i], "DeadHogs") > getTeamValue(lowest_score_team, "DeadHogs") then
-                                lowest_score_team = teams[i]
-                            end
-                            only_low_score = true
-                        end
-
-                    else
-                        min_score= curr_score
-                        lowest_score_team = teams[i]
-                        only_low_score = true
-                    end
-                end
-            end
-        end
-    end
-
-    if gameOver then
-        TurnTimeLeft = 0
-        for i=0, #teams do
-            if teams[i]~=winTeam then
-                runOnHogsInTeam(armageddon, teams[i])
-            end
-        end
-
-    ShowMission(    loc("WINNER IS ") .. winTeam,
-                    "~~~~~~~~~~~~~~~~~~~~~~~~~",
-                    showScore, 0, 200)
-    else
-
-    if only_low_score then
-        runOnHogsInTeam(setFeeder, lowest_score_team)
-    end
-
-    if meh == false then
-		meh = true
-	else
-		ShowMission(    loc("Score"),
-                    loc("-------"),
-                    showScore, 0, 200)
-	end
-
-    end
-end
-
-function backToNormal(gear)
-    SetHogName(gear, getGearValue(gear,"Name"))
-    SetHogHat(gear, 'NoHat')
-    SetHogHat(gear, getGearValue(gear,"Hat"))
-    setGearValue(mutant,"SelfDestruct",false)
-    mt_hurt=false
-    mutant=nil
-end
-
-function setAIHints()
-    for i = 0, #hhs do
-        if mutant == nil or hhs[i] == mutant or CurrentHedgehog == mutant or getGearValue(CurrentHedgehog, "Feeder") then
-            SetGearAIHints(hhs[i], aihUsual)
-        else
-            SetGearAIHints(hhs[i], aihDoesntMatter)
-        end
-    end
-end
-
-function removeFeeder(gear)
-    if gear~=nil then
-        setGearValue(gear,"Feeder",false)
-        if gear~= mutant then
-            SetHogName(gear, getGearValue(gear,"Name") )
-            SetHogHat(gear, 'NoHat')
-            SetHogHat(gear, getGearValue(gear,"Hat"))
-        end
-    end
-end
-
-function setFeeder(gear)
-    if gear~= mutant and gear~= nil then
-        SetHogName(gear,"BOTTOM FEEDER")
-        SetHogHat(gear, 'poke_slowpoke')
-        setGearValue(gear,"Feeder", true)
-    end
-end
-
-function setMutantStuff(gear)
-    mutant = gear
-
-    SetHogName(gear,"MUTANT")
-    SetHogHat(gear,'WhySoSerious')
-    SetHealth(gear, ( mutant_base_health + numhhs*25) )
-    SetEffect(gear, hePoisoned, 1)
-    setGearValue(mutant,"SelfDestruct",false)
-    setGearValue(gear, "Feeder", false)
-
-    AddCaption(getGearValue(gear, "Name") .. loc(" HAS MUTATED"))
-
-    TurnTimeLeft=0
-
-    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
-    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
-    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
-    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
-    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
-    PlaySound(sndSuddenDeath)
-end
-
-function teamScan()
-
-        for i=0, TeamsCount-1 do --nil filling
-        teams[i]=nil
-        end
-
-        for i=0, #hhs do
-            for j=0, TeamsCount-1 do
-                if teams[j] ==nil and hhs[i]~=nil then
-                teams[j] = GetHogTeamName(hhs[i])
-                setTeamValue(teams[j],"Score",0)
-                setTeamValue(teams[j], "DeadHogs",0)
-                break
-                end
-
-                if teams[j] == GetHogTeamName(hhs[i]) then
-                    break
-                end
-            end
-        end
-
-        ---***---
-end
-
-function set_Mutant_and_Score(gear)
-
-local curr_team = GetHogTeamName(CurrentHedgehog)
-
-    if gear == CurrentHedgehog then
-        if CurrentHedgehog == mutant then
-            PlaySound(sndHomerun)
-            if getGearValue(gear, "SelfDestruct")==false then
-                decreaseTeamValue(curr_team,"Score")
-            end
-            backToNormal(gear)
-        else
-            decreaseTeamValue(curr_team,"Score")
-        end
-
-    else
-            if gear == mutant then
-                    backToNormal(mutant)
-                    if curr_team ~=GetHogTeamName(gear) then
-                            if  getGearValue(CurrentHedgehog, "Alive") then
-                            setMutantStuff(CurrentHedgehog)
-                            setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") + mutant_kill_reward))
-                            end
-                    else
-                        setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
-                    end
-            else
-                if mutant==nil then
-                        if curr_team ~=GetHogTeamName(gear) then
-                            if getGearValue(CurrentHedgehog, "Alive") then
-                                    setMutantStuff(CurrentHedgehog)
-                                    setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") + mutant_kill_reward))
-                            else
-                                increaseTeamValue(curr_team,"Score")
-                            end
-                        else
-                            setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
-                        end
-                else
-                    if curr_team ~=GetHogTeamName(gear) then
-                        if CurrentHedgehog==mutant and getGearValue(mutant,"SelfDestruct")==false then
-                            SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog)+kill_reward)
-                            AddCaption("+" .. kill_reward .. loc(" HP") )
-                            increaseTeamValue(curr_team,"Score")
-                        end
-                        if getGearValue(CurrentHedgehog,"Feeder") then
-                            increaseTeamValue(curr_team,"Score")
-                        end
-                    else
-                        setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
-                    end
-                end
-            end
-    end
-end
-
-function onGearResurrect(gear)
-if not gameOver then
-    if GetGearType(gear) == gtHedgehog then
-
-        increaseTeamValue(GetHogTeamName(gear), "DeadHogs")
-
-        if gear==CurrentHedgehog then
-            setGearValue(CurrentHedgehog, "Alive", false)
-        end
-        set_Mutant_and_Score(gear)
-        if gear~=CurrentHedgehog then
-            killsCounter = killsCounter + 1
-            countBodies()
-        end
-        AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
-        PlaySound(sndWhack)
-        updateScore()
-    end
-end
-end
-
-function onGearAdd(gear)
-
-    -- Catch hedgehogs for the tracker
-    if GetGearType(gear) == gtHedgehog then
-        trackGear(gear)
-        hhs[numhhs] = gear
-        numhhs = numhhs + 1
-        SetEffect(gear, heResurrectable, 1)
-    end
-end
-
-function checkEmptyTeam (teamName)
-    for i=0 , #hhs do
-        if hhs[i]~=nil then
-            if teamName == GetHogTeamName(hhs[i]) then
-                return false
-            end
-        end
-    end
-    return true
-end
-
-function onGearDelete(gear)
-    -- Remove hogs that are gone
-    if GetGearType(gear) == gtHedgehog then
-        numhhs = numhhs - 1
-
-        local found
-        for i=0, #hhs do
-            if hhs[i] == gear then
-                found = i
-                break
-            end
-        end
-        for i = found, #hhs - 1 do
-            hhs[i] = hhs[i + 1]
-        end
-        hhs[#hhs] = nil
-
-        local t_name = GetHogTeamName(gear)
-        if checkEmptyTeam(t_name) then
-            for i = 0, TeamsCount - 1 do
-                if teams[i] == t_name then
-                    found = i
-                    break
-                end
-            end
-            for i = found, TeamsCount - 2 do
-                teams[i] = teams[i + 1]
-            end
-            teams[TeamsCount - 1] = nil
-            TeamsCount = TeamsCount - 1
-        end
-        AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
-        trackDeletion(gear)
-    end
-end
-
-function onParameters()
-    parseParams()
-    winScore = tonumber(params["winscore"]) or winScore
-end
-
---[[
-S T A R R I N G
-    prof - Coding, implementing and evangelism
-    vos  - Initial idea and script improvements
-    mikade - Moving the `how to play` into the game so that people know `how to play`, and whitespace :D
---]]
+local MUTANT_VERSION = "v0.9.5"
+
+--[[                  ___                   ___
+                    (   )                 (   )
+___ .-. .-. ___  ___ | |_    .---. ___ .-. | |_
+(   )   '   (   )(   (   __) / .-, (   )   (   __)
+|  .-.  .-. | |  | | | |   (__) ; ||  .-. .| |
+| |  | |  | | |  | | | | ___ .'`  || |  | || | ___
+| |  | |  | | |  | | | |(   / .'| || |  | || |(   )
+| |  | |  | | |  | | | | | | /  | || |  | || | | |
+| |  | |  | | |  ; ' | ' | ; |  ; || |  | || ' | |
+| |  | |  | ' `-'  / ' `-' ' `-'  || |  | |' `-' ;
+(___)(___)(___'.__.'   `.__.`.__.'_(___)(___)`.__.
+
+
+----  Recommended settings:
+----    * one hedgehog per team
+----    * 'Small' one-island map
+
+--]]
+
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+HedgewarsScriptLoad("/Scripts/Tracker.lua")
+HedgewarsScriptLoad("/Scripts/Params.lua")
+
+--[[
+    MUTANT SCRIPT
+
+    To Do:  -Clean-up this fucking piece of code
+            -Debug
+            -Find a girlfriend
+            -Fix Sheepluva's hat  +[p]
+            -Cookies
+-----------------------]]
+
+local hhs = {}
+local numhhs = 0
+local meh = false
+
+local gameOver=false
+
+local mutant = nil
+local mutant_base_health = 200
+local mutant_base_disease = 25
+local disease_timer = 2000
+
+local kill_reward = nil
+local mt_hurt=false
+
+local killsCounter = 0
+
+local team_fire_punishment = 3
+local mutant_kill_reward = 2
+
+local hh_weapons = { amBazooka, amGrenade, amShotgun, amMine}
+
+local mt_weapons = {amWatermelon, amHellishBomb, amBallgun, amRCPlane, amTeleport}
+
+local disease=0
+local timer=0
+
+local winScore = 15
+local hogsLimit = 1
+
+local teams = {}
+
+local circles = {}
+local circleFrame = -1
+
+function showStartingInfo()
+
+	ruleSet = loc("RULES") .. ": " ..
+	" |" .. --" |" ..
+	loc("The first player to kill someone becomes the Mutant.") .. "|" ..
+	loc("The Mutant has super-weapons and a lot of health.") .. "|" ..
+	loc("The Mutant loses health quickly if he doesn't keep scoring kills.") .. "|" ..
+	" |" ..
+	loc("Normal players can only score points by killing the mutant.") .. "|" ..
+	" |" .. "" ..
+	loc("The player with least points (or most deaths) becomes the Bottom Feeder.") .. "|" ..
+	loc("The Bottom Feeder can score points by killing anyone.") .. "|" ..
+	" |" ..
+	loc("POINTS") .. ": " ..
+	" |" ..
+	loc("+2 for becoming a Mutant") .. "|" ..
+	loc("+1 to a Mutant for killing anyone") .. "|" ..
+	loc("+1 to a Bottom Feeder for killing anyone") .. "|" ..
+	loc("-1 to anyone for a suicide") .. "|" ..
+	loc("Other kills don't give you points.")
+
+	ShowMission(loc("Mutant"),
+                loc("a Hedgewars tag game"),
+                ruleSet, 0, 5000)
+
+end
+
+function onGameInit()
+    TurnTime = 20000
+    WaterRise = 0
+    EnableGameFlags(gfResetWeps, gfPerHogAmmo)
+    HealthCaseProb=0
+    HealthCaseAmount=0
+    MinesTime=1000
+    CaseFreq = 2
+end
+
+
+function limitHogs(gear)
+    cnthhs = cnthhs + 1
+        if cnthhs > 1 then
+            hogLimitHit = true
+            SetEffect(gear, heResurrectable, false)
+            --SetHealth(gear, 0)
+            SetGearPosition(gear, -100,LAND_HEIGHT)
+        end
+end
+
+function onGameStart()
+    trackTeams()
+    teamScan()
+    runOnHogs(saveStuff)
+    --local str = "/say " .. MUTANT_VERSION
+    --ParseCommand(str)
+
+    hogLimitHit = false
+    for i=0 , TeamsCount - 1 do
+        cnthhs = 0
+        runOnHogsInTeam(limitHogs, teams[i])
+    end
+    if hogLimitHit then
+        AddCaption(loc("ONE HOG PER TEAM! KILLING EXCESS HEDGES"))
+    end
+    showStartingInfo()
+end
+
+
+
+function giveWeapons(gear)
+    if gear == mutant then
+        AddAmmo(gear, amRope)
+        for i=1, #mt_weapons do
+            AddAmmo(gear, mt_weapons[i])
+        end
+
+    else
+        for i=1, #hh_weapons do
+            AddAmmo(gear,hh_weapons[i])
+        end
+    end
+end
+
+function onAmmoStoreInit()
+
+    SetAmmo(amSkip, 9, 0, 0, 0)
+    SetAmmo(amRope,0,1,0,5)
+    SetAmmo(amSnowball,0,1,0,1)
+
+    for i=1, #hh_weapons do
+        SetAmmo(hh_weapons[i], 0, 0, 0, 1)
+    end
+
+    for i=1, #mt_weapons do
+        SetAmmo(mt_weapons[i], 0, 3, 0, 1)
+    end
+
+end
+
+function drawCircles()
+    for i = 0, #hhs do
+        if circles[hhs[i]] ~= nil then
+            DeleteVisualGear(circles[hhs[i]])
+            circles[hhs[i]] = nil
+        end
+
+        if hhs[i] ~= CurrentHedgehog then
+            if mutant == nil then
+                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
+                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 5, 0xff000080)
+            elseif CurrentHedgehog == mutant then
+                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
+                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 3, 0xaa000070)
+            elseif getGearValue(CurrentHedgehog, "Feeder") and hhs[i] ~= mutant then
+                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
+                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 3, 0xaa000070)
+            elseif hhs[i] == mutant then
+                circles[hhs[i]] = AddVisualGear(0, 0, vgtCircle, 0, false)
+                SetVisualGearValues(circles[hhs[i]], 0, 0, 0, 0, 0, 0, 0, 22, 5, 0xff000080)
+            end
+        end
+    end
+    circleFrame = 0
+end
+
+function onNewTurn()
+
+    trackTeams()
+    killsCounter = 0
+
+    if mutant == nil then
+        AddCaption( loc("FIRST BLOOD MUTATES") )
+    end
+
+    checkScore()
+    giveWeapons(CurrentHedgehog)
+    drawCircles()
+    setAIHints()
+    kill_reward= numhhs*10
+
+    if CurrentHedgehog == mutant then
+        mt_hurt=true
+        disease= mutant_base_disease - numhhs
+    else
+        mt_hurt=false
+    end
+
+    setGearValue(CurrentHedgehog, "Alive", true)
+
+end
+
+function countBodies()
+        if killsCounter == 2 then
+            AddCaption(loc("DOUBLE KILL"))
+        elseif killsCounter == 3 then
+            AddCaption(loc("MEGA KILL"))
+            PlaySound(sndRegret)
+        elseif killsCounter == 4 then
+            AddCaption(loc("ULTRA KILL"))
+        elseif killsCounter == 5 then
+            AddCaption(loc("MONSTER KILL"))
+            PlaySound(sndIllGetYou)
+        elseif killsCounter == 6 then
+            AddCaption(loc("LUDICROUS KILL"))
+            PlaySound(sndNutter)
+        elseif killsCounter == 7 then
+            AddCaption(loc("HOLY SHYTE!"))
+            PlaySound(sndLaugh)
+        elseif killsCounter > 8 then
+            AddCaption(loc("INSANITY"))
+        end
+end
+
+function onGameTick()
+
+    if circleFrame > -1 then
+        for i = 0, #hhs do
+            if circles[hhs[i]] ~= nil and hhs[i]~= nil then
+                hhx, hhy = GetGearPosition(hhs[i])
+                X, Y, dX, dY, Angle, Frame, FrameTicks, State, Timer, Tint = GetVisualGearValues(circles[hhs[i]])
+                SetVisualGearValues(circles[hhs[i]], hhx + 1, hhy - 3, 0, 0, 0, 0, 0, 40 - (circleFrame % 25), Timer, Tint)
+            end
+        end
+
+        circleFrame = circleFrame + 0.06
+
+        if circleFrame >= 25 then
+            for i = 0, #hhs do
+                if circles[hhs[i]] ~= nil then
+                    DeleteVisualGear(circles[hhs[i]])
+                    circles[hhs[i]] = nil
+                end
+            end
+        end
+    end
+
+    if TurnTimeLeft==0 and mt_hurt then
+        mt_hurt = false
+    end
+
+    if mt_hurt and mutant~=nil then
+        timer = timer + 1
+            if timer > disease_timer then
+                timer = 0
+                SetHealth(mutant, GetHealth(mutant)-disease )
+                AddVisualGear(GetX(mutant), GetY(mutant)-5, vgtHealthTag, disease, true)
+                    if GetHealth(mutant)<=0 then
+                        SetHealth(mutant,0)
+                        mt_hurt= false
+                        setGearValue(mutant,"SelfDestruct",true)
+                        TurnTimeLeft = 0
+                    end
+            end
+    end
+
+end
+
+function saveStuff(gear)
+    setGearValue(gear,"Name",GetHogName(gear))
+    setGearValue(gear,"Hat",GetHogHat(gear))
+end
+
+function armageddon(gear)
+    SetState(gear, gstLoser)
+    SetEffect(gear, heResurrectable, false)
+    SetHealth(gear, 0)
+end
+
+function updateScore()
+
+    local showScore = ""
+
+    for i=0, TeamsCount-1 do
+        if teams[i]~= nil then
+
+            local curr_score = getTeamValue(teams[i], "Score")
+            showScore = showScore .. teams[i] .. ": " .. curr_score .. " (" .. loc("deaths") .. ": " .. getTeamValue(teams[i], "DeadHogs") .. ") " .. "|"
+
+        end
+    end
+
+    ShowMission(loc("Score"),
+                "-------",
+                showScore, 0, 200)
+
+    HideMission()
+
+end
+
+function checkScore()
+local showScore = ""
+local lowest_score_team = nil
+local min_score=nil
+local winTeam = nil
+
+local only_low_score = true
+
+    for i=0, TeamsCount-1 do
+        if teams[i]~=nil then
+            local curr_score = getTeamValue(teams[i], "Score")
+
+            runOnHogsInTeam(removeFeeder, teams[i])
+
+            showScore = showScore .. teams[i] ..": " .. curr_score .. " (" .. loc("deaths") .. ": " .. getTeamValue(teams[i], "DeadHogs") .. ") " .. "|"
+
+            if curr_score >= winScore then
+                gameOver = true
+                winTeam = teams[i]
+            end
+
+            if min_score==nil then
+                min_score= curr_score
+                lowest_score_team = teams[i]
+            else
+                if curr_score <= min_score then
+                    if curr_score == min_score then
+                        if getTeamValue(teams[i], "DeadHogs") == getTeamValue(lowest_score_team, "DeadHogs") then
+                            only_low_score = false
+                        else
+                            if getTeamValue(teams[i], "DeadHogs") > getTeamValue(lowest_score_team, "DeadHogs") then
+                                lowest_score_team = teams[i]
+                            end
+                            only_low_score = true
+                        end
+
+                    else
+                        min_score= curr_score
+                        lowest_score_team = teams[i]
+                        only_low_score = true
+                    end
+                end
+            end
+        end
+    end
+
+    if gameOver then
+        TurnTimeLeft = 0
+        for i=0, #teams do
+            if teams[i]~=winTeam then
+                runOnHogsInTeam(armageddon, teams[i])
+            end
+        end
+
+    ShowMission(    loc("WINNER IS ") .. winTeam,
+                    "~~~~~~~~~~~~~~~~~~~~~~~~~",
+                    showScore, 0, 200)
+    else
+
+    if only_low_score then
+        runOnHogsInTeam(setFeeder, lowest_score_team)
+    end
+
+    if meh == false then
+		meh = true
+	else
+		ShowMission(    loc("Score"),
+                    loc("-------"),
+                    showScore, 0, 200)
+	end
+
+    end
+end
+
+function backToNormal(gear)
+    SetHogName(gear, getGearValue(gear,"Name"))
+    SetHogHat(gear, 'NoHat')
+    SetHogHat(gear, getGearValue(gear,"Hat"))
+    setGearValue(mutant,"SelfDestruct",false)
+    mt_hurt=false
+    mutant=nil
+end
+
+function setAIHints()
+    for i = 0, #hhs do
+        if mutant == nil or hhs[i] == mutant or CurrentHedgehog == mutant or getGearValue(CurrentHedgehog, "Feeder") then
+            SetGearAIHints(hhs[i], aihUsual)
+        else
+            SetGearAIHints(hhs[i], aihDoesntMatter)
+        end
+    end
+end
+
+function removeFeeder(gear)
+    if gear~=nil then
+        setGearValue(gear,"Feeder",false)
+        if gear~= mutant then
+            SetHogName(gear, getGearValue(gear,"Name") )
+            SetHogHat(gear, 'NoHat')
+            SetHogHat(gear, getGearValue(gear,"Hat"))
+        end
+    end
+end
+
+function setFeeder(gear)
+    if gear~= mutant and gear~= nil then
+        SetHogName(gear, loc("BOTTOM FEEDER"))
+        SetHogHat(gear, 'poke_slowpoke')
+        setGearValue(gear,"Feeder", true)
+    end
+end
+
+function setMutantStuff(gear)
+    mutant = gear
+
+    SetHogName(gear, loc("MUTANT"))
+    SetHogHat(gear,'WhySoSerious')
+    SetHealth(gear, ( mutant_base_health + numhhs*25) )
+    SetEffect(gear, hePoisoned, 1)
+    setGearValue(mutant,"SelfDestruct",false)
+    setGearValue(gear, "Feeder", false)
+
+    AddCaption(getGearValue(gear, "Name") .. loc(" HAS MUTATED"))
+
+    TurnTimeLeft=0
+
+    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+    AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+    PlaySound(sndSuddenDeath)
+end
+
+function teamScan()
+
+        for i=0, TeamsCount-1 do --nil filling
+        teams[i]=nil
+        end
+
+        for i=0, #hhs do
+            for j=0, TeamsCount-1 do
+                if teams[j] ==nil and hhs[i]~=nil then
+                teams[j] = GetHogTeamName(hhs[i])
+                setTeamValue(teams[j],"Score",0)
+                setTeamValue(teams[j], "DeadHogs",0)
+                break
+                end
+
+                if teams[j] == GetHogTeamName(hhs[i]) then
+                    break
+                end
+            end
+        end
+
+        ---***---
+end
+
+function set_Mutant_and_Score(gear)
+
+local curr_team = GetHogTeamName(CurrentHedgehog)
+
+    if gear == CurrentHedgehog then
+        if CurrentHedgehog == mutant then
+            PlaySound(sndHomerun)
+            if getGearValue(gear, "SelfDestruct")==false then
+                decreaseTeamValue(curr_team,"Score")
+            end
+            backToNormal(gear)
+        else
+            decreaseTeamValue(curr_team,"Score")
+        end
+
+    else
+            if gear == mutant then
+                    backToNormal(mutant)
+                    if curr_team ~=GetHogTeamName(gear) then
+                            if  getGearValue(CurrentHedgehog, "Alive") then
+                            setMutantStuff(CurrentHedgehog)
+                            setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") + mutant_kill_reward))
+                            end
+                    else
+                        setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
+                    end
+            else
+                if mutant==nil then
+                        if curr_team ~=GetHogTeamName(gear) then
+                            if getGearValue(CurrentHedgehog, "Alive") then
+                                    setMutantStuff(CurrentHedgehog)
+                                    setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") + mutant_kill_reward))
+                            else
+                                increaseTeamValue(curr_team,"Score")
+                            end
+                        else
+                            setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
+                        end
+                else
+                    if curr_team ~=GetHogTeamName(gear) then
+                        if CurrentHedgehog==mutant and getGearValue(mutant,"SelfDestruct")==false then
+                            SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog)+kill_reward)
+                            AddCaption("+" .. kill_reward .. loc(" HP") )
+                            increaseTeamValue(curr_team,"Score")
+                        end
+                        if getGearValue(CurrentHedgehog,"Feeder") then
+                            increaseTeamValue(curr_team,"Score")
+                        end
+                    else
+                        setTeamValue(curr_team,"Score",(getTeamValue(curr_team,"Score") - team_fire_punishment))
+                    end
+                end
+            end
+    end
+end
+
+function onGearResurrect(gear)
+if not gameOver then
+    if GetGearType(gear) == gtHedgehog then
+
+        increaseTeamValue(GetHogTeamName(gear), "DeadHogs")
+
+        if gear==CurrentHedgehog then
+            setGearValue(CurrentHedgehog, "Alive", false)
+        end
+        set_Mutant_and_Score(gear)
+        if gear~=CurrentHedgehog then
+            killsCounter = killsCounter + 1
+            countBodies()
+        end
+        AddVisualGear(GetX(gear), GetY(gear), vgtSmokeRing, 0, false)
+        PlaySound(sndWhack)
+        updateScore()
+    end
+end
+end
+
+function onGearAdd(gear)
+
+    -- Catch hedgehogs for the tracker
+    if GetGearType(gear) == gtHedgehog then
+        trackGear(gear)
+        hhs[numhhs] = gear
+        numhhs = numhhs + 1
+        SetEffect(gear, heResurrectable, 1)
+    end
+end
+
+function checkEmptyTeam (teamName)
+    for i=0 , #hhs do
+        if hhs[i]~=nil then
+            if teamName == GetHogTeamName(hhs[i]) then
+                return false
+            end
+        end
+    end
+    return true
+end
+
+function onGearDelete(gear)
+    -- Remove hogs that are gone
+    if GetGearType(gear) == gtHedgehog then
+        numhhs = numhhs - 1
+
+        local found
+        for i=0, #hhs do
+            if hhs[i] == gear then
+                found = i
+                break
+            end
+        end
+        for i = found, #hhs - 1 do
+            hhs[i] = hhs[i + 1]
+        end
+        hhs[#hhs] = nil
+
+        local t_name = GetHogTeamName(gear)
+        if checkEmptyTeam(t_name) then
+            for i = 0, TeamsCount - 1 do
+                if teams[i] == t_name then
+                    found = i
+                    break
+                end
+            end
+            for i = found, TeamsCount - 2 do
+                teams[i] = teams[i + 1]
+            end
+            teams[TeamsCount - 1] = nil
+            TeamsCount = TeamsCount - 1
+        end
+        AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
+        trackDeletion(gear)
+    end
+end
+
+function onParameters()
+    parseParams()
+    winScore = tonumber(params["winscore"]) or winScore
+end
+
+--[[
+S T A R R I N G
+    prof - Coding, implementing and evangelism
+    vos  - Initial idea and script improvements
+    mikade - Moving the `how to play` into the game so that people know `how to play`, and whitespace :D
+--]]
--- a/share/hedgewars/Data/Scripts/Multiplayer/ShoppaMap.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/ShoppaMap.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -1,7 +1,16 @@
-ObjectList = {}
+HedgewarsScriptLoad("/Scripts/Params.lua")
+
+local ObjectList = {}
 
 -- Overall padding for roping freedom
-Padding = 430
+local Padding = 430
+
+function onParameters()
+    parseParams()
+    if params["pad"] ~= nil then
+        Padding = params["pad"]
+    end
+end
 
 -- This could probably use less points and more precision
 -- 700x700 for object space
@@ -381,8 +390,8 @@
         end
     end
     if GetRandom(2)==0 then
-        x = GetRandom(3300)+350
-        y = GetRandom(1300)+350
+        x = GetRandom(3300)+382
+        y = GetRandom(1300)+382
         if DrawStar(x,y, 1, 1+GetRandom(2)*-2) then
             TotGen = TotGen+1
         end
@@ -414,8 +423,8 @@
         else
             if Tries > 500 then d = GetRandom(2)+3
             else d = GetRandom(3)+2 end
-            x = GetRandom(4000-div(700,d))+div(700,d*2)
-            y = GetRandom(1300-div(700,d))+div(700,d*2)
+            x = GetRandom(4000-div(764,d))+div(764,d*2)
+            y = GetRandom(1300-div(764,d))+div(764,d*2)
             if DrawStar(x,y, d, 1+GetRandom(2)*-2) then
                 TotGen = TotGen+1
             end
Binary file share/hedgewars/Data/Scripts/Multiplayer/TechRacer.hwp has changed
--- a/share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -1,1666 +1,1295 @@
-------------------------------------------
--- TECH RACER v0.2
------------------------------------------
-
---------------
---0.2
---------------
--- should work better "out the box"
--- changed map generation
--- put a hog limiter in place
--- removed parsecommand
--- fix one of the test maps
--- hopefully added some support for future official challenges etc
--- changed theme
--- minor cleanups?
-
------------------------------
--- SCRIPT BEGINS
------------------------------
-
-HedgewarsScriptLoad("/Scripts/Locale.lua")
-HedgewarsScriptLoad("/Scripts/OfficialChallenges.lua")
-HedgewarsScriptLoad("/Scripts/Tracker.lua")
-HedgewarsScriptLoad("/Scripts/Params.lua")
-
-------------------
--- Got Variables?
-------------------
-
-local activationStage = 0
-local jet = nil
-
-local fMod = 1000000 -- 1
-local roundLimit = 3
-local roundNumber = 0
-local firstClan = 10
-
-local fastX = {}
-local fastY = {}
-local fastCount = 0
-local fastIndex = 0
-local fastColour
-
-local currX = {}
-local currY = {}
-local currCount = 0
-
-local specialPointsX = {}
-local specialPointsY = {}
-local specialPointsCount = 0
-
-mapID = 22
-
---------------------------
--- hog and team tracking variales
---------------------------
-
-local numhhs = 0 -- store number of hedgehogs
-local hhs = {} -- store hedgehog gears
-
-local numTeams --  store the number of teams in the game
-local teamNameArr = {}  -- store the list of teams
-local teamClan = {}
-local teamSize = {}     -- store how many hogs per team
-local teamIndex = {} -- at what point in the hhs{} does each team begin
-
-local teamComment = {}
-local teamScore = {}
-
--------
--- racer vars
---------
-
-local cGear = nil
-
-local bestClan = nil
-local bestTime = nil
-
-local gameBegun = false
-local gameOver = false
-local racerActive = false
-local trackTime = 0
-
-local wpCirc = {}
-local wpX = {}
-local wpY = {}
-local wpCol = {}
-local wpActive = {}
-local wpRad = 450 --75
-local wpCount = 0
-local wpLimit = 8
-
-local usedWeapons = {}
-
-local roundN
-local lastRound
-local RoundHasChanged
-
--------------------
--- general methods
--------------------
-
---function onPrecise()
---end
-
-function RebuildTeamInfo()
-
-
-        -- make a list of individual team names
-        for i = 0, (TeamsCount-1) do
-                teamNameArr[i] = " " -- = i
-                teamSize[i] = 0
-                teamIndex[i] = 0
-                teamScore[i] = 100000
-        end
-        numTeams = 0
-
-        for i = 0, (numhhs-1) do
-
-                z = 0
-                unfinished = true
-                while(unfinished == true) do
-
-                        newTeam = true
-                        tempHogTeamName = GetHogTeamName(hhs[i]) -- this is the new name
-
-                        if tempHogTeamName == teamNameArr[z] then
-                                newTeam = false
-                                unfinished = false
-                        end
-
-                        z = z + 1
-
-                        if z == TeamsCount then
-                                unfinished = false
-                                if newTeam == true then
-                                        teamNameArr[numTeams] = tempHogTeamName
-                                        numTeams = numTeams + 1
-                                end
-                        end
-
-                end
-
-        end
-
-        -- find out how many hogs per team, and the index of the first hog in hhs
-        for i = 0, (numTeams-1) do
-                for z = 0, (numhhs-1) do
-                        if GetHogTeamName(hhs[z]) == teamNameArr[i] then
-                                teamClan[i] = GetHogClan(hhs[z])
-                                if teamSize[i] == 0 then
-                                        teamIndex[i] = z -- should give starting index
-                                end
-                                teamSize[i] = teamSize[i] + 1
-                                --add a pointer so this hog appears at i in hhs
-                        end
-                end
-
-        end
-
-end
-
-
------------------
--- RACER METHODS
------------------
-
-function CheckWaypoints()
-
-        trackFinished = true
-
-        for i = 0, (wpCount-1) do
-
-                g1X, g1Y = GetGearPosition(CurrentHedgehog)
-                g2X, g2Y = wpX[i], wpY[i]
-
-                g1X = g1X - g2X
-                g1Y = g1Y - g2Y
-                dist = (g1X*g1X) + (g1Y*g1Y)
-
-                --if i == 0 then
-                --      AddCaption(dist .. "/" .. (wpRad*wpRad) )
-                --end
-
-                NR = (48/100*wpRad)/2
-
-                if dist < (NR*NR) then
-                --if dist < (wpRad*wpRad) then
-                        --AddCaption("howdy")
-                        wpActive[i] = true
-                        wpCol[i] = GetClanColor(GetHogClan(CurrentHedgehog)) -- new                             --GetClanColor(1)
-                        SetVisualGearValues(wpCirc[i], wpX[i], wpY[i], 20, 100, 1, 10, 0, wpRad, 5, wpCol[i])
-
-                        wpRem = 0
-                        for k = 0, (wpCount-1) do
-                                if wpActive[k] == false then
-                                        wpRem = wpRem + 1
-                                end
-                        end
-
-                        AddCaption(loc("Way-Points Remaining") .. ": " .. wpRem,0xffba00ff,capgrpAmmoinfo)
-
-                end
-
-                if wpActive[i] == false then
-                        trackFinished = false
-                end
-
-        end
-
-        return(trackFinished)
-
-end
-
-function AdjustScores()
-
-        if bestTime == nil then
-                bestTime = 100000
-                bestClan = 10
-                bestTimeComment = "N/A"
-        end
-
-        newScore = false
-
-        -- update this clan's time if the new track is better
-        for i = 0, (numTeams-1) do
-                if teamClan[i] == GetHogClan(CurrentHedgehog) then
-                        if trackTime < teamScore[i] then
-                                teamScore[i] = trackTime
-                                newScore = true
-                        else
-                                newScore = false
-                        end
-                end
-        end
-
-        --bestTime = 100000
-        --bestClan = 10
-
-        -- find the best time out of those so far
-        for i = 0, (numTeams-1) do
-                if teamScore[i] < bestTime then
-                        bestTime = teamScore[i]
-                        bestClan = teamClan[i]
-                end
-        end
-
-        if bestTime ~= 100000 then
-                bestTimeComment = (bestTime/1000) ..loc("s")
-        end
-
-        if newScore == true then
-                if trackTime == bestTime then -- best time of the race
-                        ShowMission(loc("RACER"),
-                        loc("TRACK COMPLETED"),
-                        loc("NEW RACE RECORD: ") .. (trackTime/1000) ..loc("s") .. "|" ..
-                        loc("WINNING TIME: ") .. bestTimeComment, 0, 4000)
-                        PlaySound(sndHomerun)
-                else    -- best time for the clan
-                        ShowMission(loc("RACER"),
-                        loc("TRACK COMPLETED"),
-                        loc("NEW CLAN RECORD: ") .. (trackTime/1000) ..loc("s") .. "|" ..
-                        loc("WINNING TIME: ") .. bestTimeComment, 4, 4000)
-                end
-        else -- not any kind of new score
-                ShowMission(loc("RACER"),
-                loc("TRACK COMPLETED"),
-                loc("TIME: ") .. (trackTime/1000) ..loc("s") .. "|" ..
-                loc("WINNING TIME: ") .. bestTimeComment, -amSkip, 4000)
-                PlaySound(sndHellish)
-        end
-
-
-        --------
-        --new
-        --------
-
-        if bestTime == trackTime then
-                --AddCaption("wooooooooooooooooooooooooooooo")
-
-                fastColour = GetClanColor(GetHogClan(CurrentHedgehog))
-
-                for i = 0, (currCount-1) do
-                        fastX[i] = currX[i]
-                        fastY[i] = currY[i]
-                end
-
-                fastCount = currCount
-                fastIndex = 0
-
-                --currCount = 0 -- is this needed?
-
-        else
-                currCount = 0
-                fastIndex = 0
-        end
-
-
-end
-
-function onNewRound()
-
-        roundNumber = roundNumber + 1
-
-        totalComment = ""
-        for i = 0, (TeamsCount-1) do
-                        if teamNameArr[i] ~= " " then                           -- teamScore[teamClan[i]]
-                                teamComment[i] = teamNameArr[i] .. ": " .. (teamScore[i]/1000) .. loc("s|")
-                                totalComment = totalComment .. teamComment[i]
-                        elseif teamNameArr[i] == " " then
-                                teamComment[i] = "|"
-                        end
-        end
-
-        ShowMission(    loc("RACER"),
-                                        loc("STATUS UPDATE"),
-                                        loc("Rounds Complete: ") .. roundNumber .. "/" .. roundLimit .. "|" .. " " .. "|" ..
-                                        loc("Best Team Times: ") .. "|" .. totalComment, 0, 4000)
-
-        -- end game if its at round limit
-        if roundNumber >= roundLimit then
-                for i = 0, (numhhs-1) do
-                        if GetHogClan(hhs[i]) ~= bestClan then
-                                SetEffect(hhs[i], heResurrectable, 0)
-                                SetHealth(hhs[i],0)
-                        end
-                end
-                gameOver = true
-                TurnTimeLeft = 1
-        end
-
-end
-
-function CheckForNewRound()
-
-        -------------
-        ------ new
-        -------------
-
-        --[[turnN = turnN + 1
-        if gameBegun == false then
-                if turnN == 2 then
-                        for i = 0, (numhhs-1) do
-                                if hhs[i] ~= nil then
-                                        SetEffect(hhs[i], heResurrectable, 0)
-                                        SetHealth(hhs[i],0)
-                                end
-                        end
-                        gameOver = true
-                        TurnTimeLeft = 1
-                end
-        else
-
-
-        end]]
-
-        --[[if roundBegun == true then
-
-                if RoundHasChanged == true then
-                        roundN = roundN + 1
-                        RoundHasChanged = false
-                        onNewRound()
-                end
-
-                if lastRound ~= TotalRounds then -- new round, but not really
-
-                        if RoundHasChanged == false then
-                                RoundHasChanged = true
-                        end
-
-                end
-
-                AddCaption("RoundN:" .. roundN .. "; " .. "TR: " .. TotalRounds)
-
-                lastRound = TotalRounds
-
-        end]]
-
-        ------------
-        ----- old
-        ------------
-
-        if GetHogClan(CurrentHedgehog) == firstClan then
-                onNewRound()
-        end
-
-end
-
-function DisableTumbler()
-        currCount = 0
-        fastIndex = 0
-        TurnTimeLeft = 0
-        racerActive = false -- newadd
-end
-
-function HandleGhost()
-
-        -- get the current xy of the racer at this point
-        currX[currCount] = GetX(CurrentHedgehog)
-        currY[currCount] = GetY(CurrentHedgehog)
-        currCount = currCount + 1
-
-        -- draw a ping of smoke where the fastest player was at this point
-        if (fastCount ~= 0) and (fastIndex < fastCount) then
-
-                fastIndex = fastIndex + 1
-
-                tempE = AddVisualGear(fastX[fastIndex], fastY[fastIndex], vgtSmoke, 0, false)
-                g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
-                SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, fastColour )
-
-                --AddCaption("fC: " .. fastIndex .. " / " .. fastCount)
-
-        else
-
-                --AddCaption("excep fC: " .. fastIndex .. " / " .. fastCount)
-
-        end
-
-
-
-end
-
-function BoomGirder(x,y,rot)
-	girTime = 1
-	if rot < 4 then
-				AddGear(x, y, gtGrenade, 0, 0, 0, girTime)
-	elseif rot == 4 then
-				g = AddGear(x-45, y, gtGrenade, 0, 0, 0, girTime) -- needed?
-				g = AddGear(x-30, y, gtGrenade, 0, 0, 0, girTime)
-				g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed?
-				g = AddGear(x+30, y, gtGrenade, 0, 0, 0, girTime)
-				g = AddGear(x+45, y, gtGrenade, 0, 0, 0, girTime) -- needed?
-	elseif rot == 5 then ------- diag
-				g = AddGear(x+45, y+45, gtGrenade, 0, 0, 0, girTime) --n
-				g = AddGear(x+30, y+30, gtGrenade, 0, 0, 0, girTime)
-				g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed?
-				g = AddGear(x-30, y-30, gtGrenade, 0, 0, 0, girTime)
-				g = AddGear(x-45, y-45, gtGrenade, 0, 0, 0, girTime) --n
-	elseif rot == 6 then
-				g = AddGear(x, y-45, gtGrenade, 0, 0, 0, girTime) -- needed?
-				g = AddGear(x, y+30, gtGrenade, 0, 0, 0, girTime)
-				g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed?
-				g = AddGear(x, y-30, gtGrenade, 0, 0, 0, girTime)
-				g = AddGear(x, y+45, gtGrenade, 0, 0, 0, girTime) -- needed?
-	elseif rot == 7 then -------
-				g = AddGear(x+45, y-45, gtGrenade, 0, 0, 0, girTime) --n
-				g = AddGear(x+30, y-30, gtGrenade, 0, 0, 0, girTime)
-				g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed?
-				g = AddGear(x-30, y+30, gtGrenade, 0, 0, 0, girTime)
-				g = AddGear(x-45, y+45, gtGrenade, 0, 0, 0, girTime) --n
-	end
-end
-
-function RemoveGear(gear)
-	if (isATrackedGear(gear) == true) and (GetGearType(gear) ~= gtHedgehog) then
-		DeleteGear(gear)
-	end
-end
-
-function ClearMap()
-
-	runOnGears(RemoveGear)
-
-end
-
-function HandleFreshMapCreation()
-
-	-- the boom stage, boom girders, reset ammo, and delete other map objects
-	if activationStage == 1 then
-
-
-		ClearMap()
-		activationStage = activationStage + 1
-
-	-- the creation stage, place girders and needed gears, grant ammo
-	elseif activationStage == 2 then
-
-		-- these are from onParameters()
-		if mapID == "0" then
-			--AddCaption("don't load any map")
-		elseif mapID == "1" then
-
-			--simple testmap
-			------ GIRDER LIST ------
-			PlaceSprite(306, 530, sprAmGirder, 7)
-			PlaceSprite(451, 474, sprAmGirder, 4)
-			PlaceSprite(595, 531, sprAmGirder, 5)
-			PlaceSprite(245, 679, sprAmGirder, 6)
-			PlaceSprite(305, 822, sprAmGirder, 5)
-			PlaceSprite(449, 887, sprAmGirder, 4)
-			PlaceSprite(593, 825, sprAmGirder, 7)
-			PlaceSprite(657, 681, sprAmGirder, 6)
-			PlaceSprite(1063, 682, sprAmGirder, 6)
-			PlaceSprite(1121, 532, sprAmGirder, 7)
-			PlaceSprite(1266, 476, sprAmGirder, 4)
-			PlaceSprite(1411, 535, sprAmGirder, 5)
-			PlaceSprite(1472, 684, sprAmGirder, 6)
-			PlaceSprite(1415, 828, sprAmGirder, 7)
-			PlaceSprite(1271, 892, sprAmGirder, 4)
-			PlaceSprite(1126, 827, sprAmGirder, 5)
-			PlaceSprite(841, 1079, sprAmGirder, 4)
-			PlaceSprite(709, 1153, sprAmGirder, 7)
-			PlaceSprite(975, 1154, sprAmGirder, 5)
-			PlaceSprite(653, 1265, sprAmGirder, 2)
-			PlaceSprite(1021, 1266, sprAmGirder, 2)
-			PlaceSprite(713, 1369, sprAmGirder, 5)
-			PlaceSprite(960, 1371, sprAmGirder, 7)
-			PlaceSprite(835, 1454, sprAmGirder, 4)
-			PlaceSprite(185, 1617, sprAmGirder, 2)
-			PlaceSprite(1317, 1399, sprAmGirder, 2)
-			PlaceSprite(1711, 1811, sprAmGirder, 2)
-			PlaceSprite(2087, 1424, sprAmGirder, 2)
-			PlaceSprite(2373, 1804, sprAmGirder, 2)
-			PlaceSprite(2646, 1434, sprAmGirder, 2)
-			PlaceSprite(1876, 667, sprAmGirder, 6)
-			PlaceSprite(1934, 517, sprAmGirder, 7)
-			PlaceSprite(2079, 461, sprAmGirder, 4)
-			PlaceSprite(2224, 519, sprAmGirder, 5)
-			PlaceSprite(1935, 810, sprAmGirder, 5)
-			PlaceSprite(2080, 875, sprAmGirder, 4)
-			PlaceSprite(2224, 811, sprAmGirder, 7)
-			PlaceSprite(2370, 582, sprAmGirder, 4)
-			PlaceSprite(2370, 759, sprAmGirder, 4)
-			PlaceSprite(2530, 582, sprAmGirder, 4)
-			PlaceSprite(2690, 582, sprAmGirder, 4)
-			PlaceSprite(2530, 759, sprAmGirder, 4)
-			PlaceSprite(2690, 759, sprAmGirder, 4)
-			PlaceSprite(2836, 634, sprAmGirder, 5)
-			PlaceSprite(2835, 822, sprAmGirder, 5)
-			PlaceSprite(2951, 751, sprAmGirder, 5)
-			PlaceSprite(2950, 939, sprAmGirder, 5)
-			PlaceSprite(2964, 1054, sprAmGirder, 7)
-			PlaceSprite(2978, 1172, sprAmGirder, 5)
-			PlaceSprite(3095, 1185, sprAmGirder, 7)
-			PlaceSprite(3211, 1069, sprAmGirder, 7)
-			PlaceSprite(3038, 843, sprAmGirder, 1)
-			PlaceSprite(3126, 825, sprAmGirder, 7)
-			PlaceSprite(3271, 768, sprAmGirder, 4)
-			PlaceSprite(3357, 1014, sprAmGirder, 4)
-			PlaceSprite(3416, 826, sprAmGirder, 5)
-			PlaceSprite(3454, 969, sprAmGirder, 6)
-			PlaceSprite(3439, 369, sprAmGirder, 6)
-			PlaceSprite(3500, 220, sprAmGirder, 7)
-			PlaceSprite(3502, 513, sprAmGirder, 5)
-			PlaceSprite(3646, 162, sprAmGirder, 4)
-			PlaceSprite(3791, 224, sprAmGirder, 5)
-			PlaceSprite(3851, 374, sprAmGirder, 6)
-			PlaceSprite(3792, 518, sprAmGirder, 7)
-			PlaceSprite(3994, 1731, sprAmGirder, 7)
-			PlaceSprite(3877, 1848, sprAmGirder, 7)
-			PlaceSprite(3789, 1942, sprAmGirder, 3)
-			PlaceSprite(3986, 1929, sprAmGirder, 2)
-			PlaceSprite(2837, 1937, sprAmGirder, 4)
-			PlaceSprite(2997, 1938, sprAmGirder, 4)
-			PlaceSprite(3157, 1938, sprAmGirder, 4)
-			PlaceSprite(1152, 1844, sprAmGirder, 4)
-			PlaceSprite(1299, 1898, sprAmGirder, 5)
-			PlaceSprite(1005, 1900, sprAmGirder, 7)
-			PlaceSprite(3578, 575, sprAmGirder, 6)
-			PlaceSprite(3714, 576, sprAmGirder, 6)
-			PlaceSprite(3579, 740, sprAmGirder, 6)
-			PlaceSprite(3714, 741, sprAmGirder, 6)
-			PlaceSprite(3580, 903, sprAmGirder, 6)
-			PlaceSprite(3715, 904, sprAmGirder, 6)
-			PlaceSprite(3552, 452, sprAmGirder, 1)
-			PlaceSprite(3528, 370, sprAmGirder, 2)
-			PlaceSprite(3568, 297, sprAmGirder, 3)
-			PlaceSprite(3736, 455, sprAmGirder, 3)
-			PlaceSprite(3757, 378, sprAmGirder, 2)
-			PlaceSprite(3725, 299, sprAmGirder, 1)
-			PlaceSprite(3646, 261, sprAmGirder, 0)
-			PlaceSprite(3648, 997, sprAmGirder, 4)
-			PlaceSprite(3649, 1275, sprAmGirder, 2)
-			PlaceSprite(3514, 1750, sprAmGirder, 0)
-
-			------ AMMO CRATE LIST ------
-			tempG = SpawnAmmoCrate(1707, 1755, amBazooka)
-			tempG = SpawnAmmoCrate(3983, 1873, amBazooka)
-			tempG = SpawnAmmoCrate(184, 1561, amBazooka)
-			tempG = SpawnAmmoCrate(2644, 1378, amBazooka)
-			tempG = SpawnAmmoCrate(2914, 865, amBazooka)
-
-			------ MINE LIST ------
-			SetTimer(AddGear(2340, 580, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2399, 580, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2448, 580, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2517, 579, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2575, 581, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2647, 582, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2720, 582, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2760, 581, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2331, 757, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2409, 758, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2477, 758, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2545, 759, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2613, 760, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2679, 758, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2744, 757, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2813, 610, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2855, 650, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2887, 686, gtMine, 0, 0, 0, 0), 1)
-
-		elseif mapID == "2" then
-
-			-- simple land flags test map
-			------ GIRDER LIST ------
-			PlaceSprite(335, 622, sprAmGirder, 16, nil, nil, nil, nil, 16384)
-			PlaceSprite(474, 569, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(343, 748, sprAmGirder, 14, nil, nil, nil, nil, 16384)
-			PlaceSprite(466, 756, sprAmGirder, 16, nil, nil, nil, nil, 16384)
-			PlaceSprite(609, 702, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(635, 570, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(770, 702, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(960, 730, sprAmGirder, 18, nil, nil, nil, nil, 2048)
-			PlaceSprite(1061, 608, sprAmGirder, 16, nil, nil, nil, nil, 16384)
-			PlaceSprite(1207, 552, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(1205, 409, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(2312, 637, sprAmGirder, 6)
-			PlaceSprite(2312, 472, sprAmGirder, 6)
-			PlaceSprite(2311, 308, sprAmGirder, 6)
-			PlaceSprite(2292, 155, sprAmGirder, 6)
-			PlaceSprite(727, 611, sprAmGirder, 6)
-			PlaceSprite(1298, 480, sprAmGirder, 6)
-
-			------ RUBBER BAND LIST ------
-			PlaceSprite(1411, 625, sprAmRubber, 1, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(1525, 739, sprAmRubber, 1, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(1638, 852, sprAmRubber, 1, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(1754, 963, sprAmRubber, 1, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(1870, 1076, sprAmRubber, 1, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(2013, 1131, sprAmRubber, 0, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(2159, 1070, sprAmRubber, 3, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(2268, 952, sprAmRubber, 3, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(2315, 802, sprAmRubber, 2, nil, nil, nil, nil, lfBouncy)
-
-			------ AMMO CRATE LIST ------
-			tempG = SpawnAmmoCrate(472, 711, amBazooka)
-			tempG = SpawnUtilityCrate(540, 660, amParachute)
-			tempG = SpawnAmmoCrate(1155, 528, amBazooka)
-
-			------ UTILITY CRATE LIST ------
-			tempG = SpawnUtilityCrate(2006, 1102, amRope)
-
-		elseif mapID == "3" then
-
-			-- more detailed landflag test map
-			------ GIRDER LIST ------
-			PlaceSprite(396, 665, sprAmGirder, 1)
-			PlaceSprite(619, 665, sprAmGirder, 3)
-			PlaceSprite(696, 635, sprAmGirder, 0)
-			PlaceSprite(319, 637, sprAmGirder, 0)
-			PlaceSprite(268, 604, sprAmGirder, 2)
-			PlaceSprite(746, 603, sprAmGirder, 2)
-			PlaceSprite(325, 495, sprAmGirder, 7)
-			PlaceSprite(689, 493, sprAmGirder, 5)
-			PlaceSprite(504, 422, sprAmGirder, 6)
-			PlaceSprite(595, 422, sprAmGirder, 4)
-			PlaceSprite(412, 422, sprAmGirder, 4)
-			PlaceSprite(320, 696, sprAmGirder, 4)
-			PlaceSprite(249, 786, sprAmGirder, 6)
-			PlaceSprite(249, 948, sprAmGirder, 6)
-			PlaceSprite(191, 785, sprAmGirder, 6)
-			PlaceSprite(191, 946, sprAmGirder, 6)
-			PlaceSprite(191, 1107, sprAmGirder, 6)
-			PlaceSprite(249, 1109, sprAmGirder, 6)
-			PlaceSprite(130, 1251, sprAmGirder, 7)
-			PlaceSprite(306, 1251, sprAmGirder, 5)
-			PlaceSprite(72, 1360, sprAmGirder, 2)
-			PlaceSprite(364, 1360, sprAmGirder, 2)
-			PlaceSprite(132, 1462, sprAmGirder, 5)
-			PlaceSprite(304, 1463, sprAmGirder, 7)
-			PlaceSprite(182, 1616, sprAmGirder, 6)
-			PlaceSprite(255, 1613, sprAmGirder, 6)
-			PlaceSprite(217, 1796, sprAmGirder, 4)
-			PlaceSprite(221, 1381, sprAmGirder, 0)--
-			PlaceSprite(154, 669, sprAmGirder, 1)
-			PlaceSprite(124, 553, sprAmGirder, 6)
-			PlaceSprite(326, 467, sprAmGirder, 3)
-			PlaceSprite(223, 592, sprAmGirder, 3)
-
-			PlaceSprite(638, 791, sprAmGirder, 5)
-			PlaceSprite(752, 907, sprAmGirder, 5)
-			PlaceSprite(866, 1022, sprAmGirder, 5)
-			PlaceSprite(402, 1863, sprAmGirder, 18, nil, nil, nil, nil, 2048)
-			PlaceSprite(442, 1863, sprAmGirder, 22, nil, nil, nil, nil, 2048)
-			PlaceSprite(2067, 1945, sprAmGirder, 15, nil, nil, nil, nil, 16384)
-			PlaceSprite(2005, 1797, sprAmGirder, 14, nil, nil, nil, nil, 16384)
-			PlaceSprite(1943, 1653, sprAmGirder, 15, nil, nil, nil, nil, 16384)
-			PlaceSprite(1999, 1504, sprAmGirder, 16, nil, nil, nil, nil, 16384)
-			PlaceSprite(2143, 1445, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(2288, 1503, sprAmGirder, 14, nil, nil, nil, nil, 16384)
-			PlaceSprite(2432, 1565, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(2593, 1565, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(2752, 1565, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(2206, 1949, sprAmGirder, 15, nil, nil, nil, nil, 16384)
-			PlaceSprite(2262, 1800, sprAmGirder, 16, nil, nil, nil, nil, 16384)
-			PlaceSprite(2407, 1745, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(2569, 1745, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(2715, 1802, sprAmGirder, 14, nil, nil, nil, nil, 16384)
-			PlaceSprite(2898, 1624, sprAmGirder, 14, nil, nil, nil, nil, 16384)
-			PlaceSprite(3014, 1740, sprAmGirder, 14, nil, nil, nil, nil, 16384)
-			PlaceSprite(2830, 1919, sprAmGirder, 14, nil, nil, nil, nil, 16384)
-			PlaceSprite(3131, 1856, sprAmGirder, 14, nil, nil, nil, nil, 16384)
-			PlaceSprite(3191, 1968, sprAmGirder, 11, nil, nil, nil, nil, 16384)
-			PlaceSprite(3264, 2021, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(2840, 2006, sprAmGirder, 12, nil, nil, nil, nil, 16384)
-			PlaceSprite(1505, 395, sprAmGirder, 7)
-			PlaceSprite(1445, 544, sprAmGirder, 6)
-			PlaceSprite(1506, 686, sprAmGirder, 5)
-			PlaceSprite(1650, 339, sprAmGirder, 4)
-			PlaceSprite(1797, 397, sprAmGirder, 5)
-			PlaceSprite(1857, 547, sprAmGirder, 6)
-			PlaceSprite(1797, 688, sprAmGirder, 7)
-			PlaceSprite(1652, 754, sprAmGirder, 4)
-			PlaceSprite(3326, 863, sprAmGirder, 4)
-			PlaceSprite(3474, 921, sprAmGirder, 5)
-			PlaceSprite(3180, 921, sprAmGirder, 7)
-			PlaceSprite(3120, 1071, sprAmGirder, 6)
-			PlaceSprite(3183, 1214, sprAmGirder, 5)
-			PlaceSprite(3536, 1071, sprAmGirder, 6)
-			PlaceSprite(3480, 1214, sprAmGirder, 7)
-			PlaceSprite(3330, 1279, sprAmGirder, 4)
-			PlaceSprite(2502, 556, sprAmGirder, 16, nil, nil, nil, nil, 16384)
-			PlaceSprite(2601, 634, sprAmGirder, 16, nil, nil, nil, nil, 16384)
-			PlaceSprite(2616, 441, sprAmGirder, 16, nil, nil, nil, nil, 16384)
-			PlaceSprite(2716, 519, sprAmGirder, 16, nil, nil, nil, nil, 16384)
-			PlaceSprite(2756, 379, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(2862, 466, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(2918, 379, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(3023, 467, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(3080, 378, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(3172, 527, sprAmGirder, 14, nil, nil, nil, nil, 16384)
-			PlaceSprite(3232, 428, sprAmGirder, 14, nil, nil, nil, nil, 16384)
-			PlaceSprite(3289, 647, sprAmGirder, 14, nil, nil, nil, nil, 16384)
-			PlaceSprite(3350, 545, sprAmGirder, 14, nil, nil, nil, nil, 16384)
-			PlaceSprite(3406, 764, sprAmGirder, 14, nil, nil, nil, nil, 16384)
-			PlaceSprite(3469, 556, sprAmGirder, 16, nil, nil, nil, nil, 16384)
-			PlaceSprite(3616, 503, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(3552, 828, sprAmGirder, 13, nil, nil, nil, nil, 16384)
-			PlaceSprite(3696, 763, sprAmGirder, 16, nil, nil, nil, nil, 16384)
-			PlaceSprite(3708, 575, sprAmGirder, 15, nil, nil, nil, nil, 16384)
-			PlaceSprite(3705, 680, sprAmGirder, 10, nil, nil, nil, nil, 16384)
-
-			PlaceSprite(1481, 1133, sprAmGirder, 7)
-			PlaceSprite(1626, 1078, sprAmGirder, 4)
-			PlaceSprite(1772, 1135, sprAmGirder, 5)
-			PlaceSprite(1422, 1280, sprAmGirder, 6)
-			PlaceSprite(1831, 1286, sprAmGirder, 6)
-			PlaceSprite(1773, 1429, sprAmGirder, 7)
-			PlaceSprite(1627, 1492, sprAmGirder, 4)
-			PlaceSprite(1482, 1427, sprAmGirder, 5)
-			PlaceSprite(587, 855, sprAmGirder, 4)
-			PlaceSprite(425, 855, sprAmGirder, 4)
-			PlaceSprite(302, 822, sprAmGirder, 1)
-
-			------ RUBBER BAND LIST ------
-			PlaceSprite(505, 708, sprAmRubber, 0, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(175, 451, sprAmRubber, 0, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(822, 1693, sprAmRubber, 0, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(982, 1691, sprAmRubber, 0, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(1142, 1688, sprAmRubber, 0, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(1302, 1684, sprAmRubber, 0, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(1450, 1750, sprAmRubber, 1, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(1566, 1860, sprAmRubber, 1, nil, nil, nil, nil, lfBouncy)
-			PlaceSprite(1680, 1973, sprAmRubber, 1, nil, nil, nil, nil, lfBouncy)
-
-			------ AMMO CRATE LIST ------
-			tempG = SpawnAmmoCrate(324, 613, amFirePunch)
-			tempG = SpawnAmmoCrate(2361, 1721, amBazooka)
-			tempG = SpawnAmmoCrate(2430, 1721, amBazooka)
-			tempG = SpawnAmmoCrate(2510, 1721, amBazooka)
-			tempG = SpawnAmmoCrate(2581, 1721, amBazooka)
-			tempG = SpawnAmmoCrate(405, 1839, amSineGun)
-			tempG = SpawnAmmoCrate(481, 1839, amSineGun)
-
-			------ UTILITY CRATE LIST ------
-			tempG = SpawnUtilityCrate(696, 611, amParachute)
-			tempG = SpawnUtilityCrate(825, 1664, amJetpack)
-			tempG = SpawnUtilityCrate(919, 1657, amJetpack)
-			tempG = SpawnUtilityCrate(1015, 1662, amJetpack)
-			tempG = SpawnUtilityCrate(1095, 1654, amJetpack)
-			tempG = SpawnUtilityCrate(1166, 1659, amJetpack)
-			tempG = SpawnUtilityCrate(1250, 1650, amJetpack)
-			tempG = SpawnUtilityCrate(1335, 1655, amJetpack)
-
-			------ MINE LIST ------
-			SetTimer(AddGear(221, 1373, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(609, 661, gtMine, 0, 0, 0, 0), 3000)
-
-			------ STICKY MINE LIST ------
-			tempG = AddGear(190, 756, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(191, 810, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(189, 868, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(190, 923, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(192, 984, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(192, 1045, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(189, 1097, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(192, 1159, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(248, 753, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(248, 808, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(249, 868, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(250, 921, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(246, 982, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(247, 1041, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(249, 1094, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(249, 1156, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2571, 665, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2614, 623, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2658, 580, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2704, 533, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2751, 484, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2830, 466, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2912, 465, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2992, 465, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3072, 468, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2465, 592, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2518, 540, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2580, 477, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2635, 425, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2713, 381, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2796, 378, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2892, 379, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(2988, 379, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3061, 377, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3136, 377, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(627, 770, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(661, 804, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(705, 850, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(754, 899, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(805, 950, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(850, 996, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(902, 1048, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(888, 1034, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(788, 933, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(839, 985, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(736, 881, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(686, 829, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(649, 792, gtSMine, 0, 0, 0, 0)
-
-		else
-
-
-
-			-- first test epic multi map
-			------ GIRDER LIST ------
-			PlaceSprite(430, 1871, sprAmGirder, 2)
-			PlaceSprite(1249, 1914, sprAmGirder, 4)
-			PlaceSprite(1394, 1849, sprAmGirder, 7)
-			PlaceSprite(1522, 1848, sprAmGirder, 5)
-			PlaceSprite(1578, 1959, sprAmGirder, 2)
-			PlaceSprite(1545, 2011, sprAmGirder, 0)
-			PlaceSprite(430, 1749, sprAmGirder, 6)
-			PlaceSprite(430, 1589, sprAmGirder, 6)
-			PlaceSprite(358, 1499, sprAmGirder, 4)
-			PlaceSprite(198, 1499, sprAmGirder, 4)
-			PlaceSprite(72, 1571, sprAmGirder, 7)
-			PlaceSprite(339, 1618, sprAmGirder, 4)
-			PlaceSprite(520, 1499, sprAmGirder, 4)
-			PlaceSprite(680, 1499, sprAmGirder, 4)
-			PlaceSprite(839, 1499, sprAmGirder, 4)
-			PlaceSprite(1000, 1499, sprAmGirder, 4)
-			PlaceSprite(1404, 1730, sprAmGirder, 5)
-			PlaceSprite(1288, 1613, sprAmGirder, 5)
-			PlaceSprite(1200, 1529, sprAmGirder, 1)
-			PlaceSprite(1125, 1495, sprAmGirder, 0)
-			PlaceSprite(1667, 2011, sprAmGirder, 4)
-			PlaceSprite(1812, 1951, sprAmGirder, 7)
-			PlaceSprite(1964, 2024, sprAmGirder, 0)
-			PlaceSprite(1957, 1892, sprAmGirder, 4)
-			PlaceSprite(2103, 1949, sprAmGirder, 5)
-			PlaceSprite(2242, 2017, sprAmGirder, 4)
-			PlaceSprite(2404, 2017, sprAmGirder, 4)
-			PlaceSprite(2548, 1955, sprAmGirder, 7)
-			PlaceSprite(2635, 1871, sprAmGirder, 3)
-			PlaceSprite(2749, 1836, sprAmGirder, 4)
-			PlaceSprite(2751, 1999, sprAmGirder, 2)
-			PlaceSprite(2749, 1947, sprAmGirder, 0)
-			PlaceSprite(2865, 1870, sprAmGirder, 1)
-			PlaceSprite(2954, 1954, sprAmGirder, 5)
-			PlaceSprite(3061, 2017, sprAmGirder, 0)
-			PlaceSprite(3137, 1984, sprAmGirder, 3)
-			PlaceSprite(3169, 1864, sprAmGirder, 6)
-			PlaceSprite(3169, 1702, sprAmGirder, 6)
-			PlaceSprite(3170, 1540, sprAmGirder, 6)
-			PlaceSprite(3170, 1418, sprAmGirder, 2)
-			PlaceSprite(3138, 1339, sprAmGirder, 1)
-			PlaceSprite(3107, 1260, sprAmGirder, 2)
-			PlaceSprite(3153, 1194, sprAmGirder, 3)
-			PlaceSprite(3230, 1163, sprAmGirder, 0)
-			PlaceSprite(3305, 1201, sprAmGirder, 1)
-			PlaceSprite(3334, 1277, sprAmGirder, 2)
-			PlaceSprite(3227, 1540, sprAmGirder, 6)
-			PlaceSprite(3228, 1419, sprAmGirder, 2)
-			PlaceSprite(3334, 1358, sprAmGirder, 2)
-			PlaceSprite(3280, 1387, sprAmGirder, 0)
-			PlaceSprite(3227, 1702, sprAmGirder, 6)
-			PlaceSprite(3227, 1864, sprAmGirder, 6)
-			PlaceSprite(3253, 1981, sprAmGirder, 1)
-			PlaceSprite(3366, 2017, sprAmGirder, 4)
-			PlaceSprite(3528, 2018, sprAmGirder, 4)
-			PlaceSprite(3689, 2018, sprAmGirder, 4)
-			PlaceSprite(246, 1262, sprAmGirder, 4)
-			PlaceSprite(407, 1262, sprAmGirder, 4)
-			PlaceSprite(568, 1262, sprAmGirder, 4)
-			PlaceSprite(731, 1262, sprAmGirder, 4)
-			PlaceSprite(894, 1261, sprAmGirder, 4)
-			PlaceSprite(1056, 1261, sprAmGirder, 4)
-			PlaceSprite(1179, 1262, sprAmGirder, 0)
-			PlaceSprite(1288, 1314, sprAmGirder, 5)
-			PlaceSprite(1406, 1433, sprAmGirder, 5)
-			PlaceSprite(1525, 1549, sprAmGirder, 5)
-			PlaceSprite(1642, 1666, sprAmGirder, 5)
-			PlaceSprite(1749, 1728, sprAmGirder, 0)
-			PlaceSprite(1956, 1802, sprAmGirder, 6)
-			PlaceSprite(1956, 1640, sprAmGirder, 6)
-			PlaceSprite(1782, 1638, sprAmGirder, 6)
-			PlaceSprite(1835, 1487, sprAmGirder, 7)
-			PlaceSprite(1942, 1430, sprAmGirder, 0)
-			PlaceSprite(2051, 1486, sprAmGirder, 5)
-			PlaceSprite(2109, 1639, sprAmGirder, 6)
-			PlaceSprite(2177, 1778, sprAmGirder, 5)
-			PlaceSprite(2323, 1840, sprAmGirder, 4)
-			PlaceSprite(49, 1029, sprAmGirder, 0)
-			PlaceSprite(499, 1172, sprAmGirder, 6)
-			PlaceSprite(527, 1054, sprAmGirder, 3)
-			PlaceSprite(604, 1026, sprAmGirder, 0)
-			PlaceSprite(680, 1056, sprAmGirder, 1)
-			PlaceSprite(719, 1168, sprAmGirder, 6)
-			PlaceSprite(89, 728, sprAmGirder, 4)
-			PlaceSprite(251, 728, sprAmGirder, 4)
-			PlaceSprite(412, 728, sprAmGirder, 4)
-			PlaceSprite(572, 728, sprAmGirder, 4)
-			PlaceSprite(733, 728, sprAmGirder, 4)
-			PlaceSprite(894, 728, sprAmGirder, 4)
-			PlaceSprite(1016, 728, sprAmGirder, 0)
-			PlaceSprite(1067, 799, sprAmGirder, 6)
-			PlaceSprite(1139, 891, sprAmGirder, 4)
-			PlaceSprite(1067, 1171, sprAmGirder, 6)
-			PlaceSprite(1067, 1049, sprAmGirder, 2)
-			PlaceSprite(1136, 999, sprAmGirder, 4)
-			PlaceSprite(1005, 854, sprAmGirder, 2)
-			PlaceSprite(972, 803, sprAmGirder, 0)
-			PlaceSprite(920, 780, sprAmGirder, 2)
-			PlaceSprite(891, 1206, sprAmGirder, 2)
-			PlaceSprite(887, 1150, sprAmGirder, 0)
-			PlaceSprite(3018, 1311, sprAmGirder, 4)
-			PlaceSprite(2871, 1369, sprAmGirder, 7)
-			PlaceSprite(2809, 1523, sprAmGirder, 6)
-			PlaceSprite(2809, 1647, sprAmGirder, 2)
-			PlaceSprite(2469, 1777, sprAmGirder, 7)
-			PlaceSprite(2612, 1715, sprAmGirder, 4)
-			PlaceSprite(2809, 1702, sprAmGirder, 0)
-			PlaceSprite(2727, 1694, sprAmGirder, 0)
-
-			PlaceSprite(3334, 1481, sprAmGirder, 6)
-			PlaceSprite(3334, 1643, sprAmGirder, 6)
-			PlaceSprite(3334, 1804, sprAmGirder, 6)
-			PlaceSprite(3403, 1940, sprAmGirder, 5)
-			PlaceSprite(1120, 944, sprAmGirder, 2)
-			PlaceSprite(1163, 945, sprAmGirder, 2)
-			PlaceSprite(1141, 781, sprAmGirder, 5)
-			PlaceSprite(81, 629, sprAmGirder, 1)
-			PlaceSprite(102, 498, sprAmGirder, 3)
-			PlaceSprite(81, 373, sprAmGirder, 1)
-			PlaceSprite(179, 453, sprAmGirder, 6)
-			PlaceSprite(100, 260, sprAmGirder, 3)
-			PlaceSprite(179, 330, sprAmGirder, 2)
-			PlaceSprite(249, 544, sprAmGirder, 4)
-			PlaceSprite(410, 545, sprAmGirder, 4)
-			PlaceSprite(571, 543, sprAmGirder, 4)
-			PlaceSprite(731, 543, sprAmGirder, 4)
-			PlaceSprite(891, 544, sprAmGirder, 4)
-			PlaceSprite(1014, 544, sprAmGirder, 0)
-			PlaceSprite(1779, 1321, sprAmGirder, 6)
-			PlaceSprite(1779, 1159, sprAmGirder, 6)
-			PlaceSprite(1779, 997, sprAmGirder, 6)
-			PlaceSprite(1779, 836, sprAmGirder, 6)
-			PlaceSprite(1722, 684, sprAmGirder, 5)
-			PlaceSprite(1137, 545, sprAmGirder, 4)
-			PlaceSprite(1298, 545, sprAmGirder, 4)
-			PlaceSprite(1460, 546, sprAmGirder, 4)
-			PlaceSprite(1608, 600, sprAmGirder, 5)
-			PlaceSprite(1508, 1005, sprAmGirder, 4)
-			PlaceSprite(160, 246, sprAmGirder, 1)
-			PlaceSprite(1821, 1356, sprAmGirder, 3)
-			PlaceSprite(1938, 1323, sprAmGirder, 4)
-			PlaceSprite(2086, 1381, sprAmGirder, 5)
-			PlaceSprite(4004, 2018, sprAmGirder, 4)
-			PlaceSprite(3934, 1926, sprAmGirder, 6)
-			PlaceSprite(3965, 1835, sprAmGirder, 0)
-			PlaceSprite(4015, 1763, sprAmGirder, 6)
-			PlaceSprite(4015, 1603, sprAmGirder, 6)
-			PlaceSprite(4015, 1442, sprAmGirder, 6)
-			PlaceSprite(4015, 1280, sprAmGirder, 6)
-			PlaceSprite(4014, 1118, sprAmGirder, 6)
-			PlaceSprite(4014, 956, sprAmGirder, 6)
-			PlaceSprite(4014, 793, sprAmGirder, 6)
-			PlaceSprite(4014, 632, sprAmGirder, 6)
-			PlaceSprite(4014, 469, sprAmGirder, 6)
-			PlaceSprite(3981, 351, sprAmGirder, 1)
-			PlaceSprite(3985, 204, sprAmGirder, 3)
-			PlaceSprite(4045, 156, sprAmGirder, 0)
-			PlaceSprite(3667, 344, sprAmGirder, 0)
-			PlaceSprite(4016, 1925, sprAmGirder, 6)
-			PlaceSprite(3998, 1926, sprAmGirder, 6)
-			PlaceSprite(3980, 1925, sprAmGirder, 6)
-			PlaceSprite(3957, 1926, sprAmGirder, 6)
-			PlaceSprite(3843, 1832, sprAmGirder, 4)
-			PlaceSprite(3682, 1832, sprAmGirder, 4)
-			PlaceSprite(3561, 1833, sprAmGirder, 0)
-			PlaceSprite(3484, 1796, sprAmGirder, 1)
-			PlaceSprite(3455, 1675, sprAmGirder, 6)
-			PlaceSprite(3455, 1513, sprAmGirder, 6)
-			PlaceSprite(3455, 1351, sprAmGirder, 6)
-			PlaceSprite(1601, 476, sprAmGirder, 7)
-			PlaceSprite(1706, 421, sprAmGirder, 0)
-			PlaceSprite(1888, 366, sprAmGirder, 6)
-
-			PlaceSprite(3997, 1743, sprAmGirder, 6)
-			PlaceSprite(3979, 1742, sprAmGirder, 6)
-			PlaceSprite(3962, 1741, sprAmGirder, 6)
-			PlaceSprite(3943, 1741, sprAmGirder, 6)
-			PlaceSprite(2199, 393, sprAmGirder, 7)
-			PlaceSprite(2304, 337, sprAmGirder, 0)
-			PlaceSprite(2409, 392, sprAmGirder, 5)
-			PlaceSprite(2470, 502, sprAmGirder, 2)
-			PlaceSprite(2412, 606, sprAmGirder, 7)
-			PlaceSprite(2308, 673, sprAmGirder, 0)
-			PlaceSprite(2202, 612, sprAmGirder, 5)
-			PlaceSprite(2138, 507, sprAmGirder, 2)
-			PlaceSprite(2739, 378, sprAmGirder, 7)
-			PlaceSprite(2847, 322, sprAmGirder, 0)
-			PlaceSprite(2953, 378, sprAmGirder, 5)
-			PlaceSprite(2680, 489, sprAmGirder, 2)
-			PlaceSprite(3012, 489, sprAmGirder, 2)
-			PlaceSprite(2736, 594, sprAmGirder, 5)
-			PlaceSprite(2841, 657, sprAmGirder, 0)
-			PlaceSprite(2949, 594, sprAmGirder, 7)
-			PlaceSprite(2448, 837, sprAmGirder, 7)
-			PlaceSprite(2594, 779, sprAmGirder, 4)
-			PlaceSprite(2739, 836, sprAmGirder, 5)
-			PlaceSprite(2390, 950, sprAmGirder, 2)
-			PlaceSprite(2789, 950, sprAmGirder, 2)
-			PlaceSprite(2593, 904, sprAmGirder, 4)
-			PlaceSprite(2727, 1056, sprAmGirder, 7)
-			PlaceSprite(2452, 1058, sprAmGirder, 5)
-			PlaceSprite(2510, 1215, sprAmGirder, 6)
-			PlaceSprite(2663, 1208, sprAmGirder, 6)
-			PlaceSprite(2510, 1378, sprAmGirder, 6)
-			PlaceSprite(2664, 1369, sprAmGirder, 6)
-			PlaceSprite(300, 275, sprAmGirder, 0)
-			PlaceSprite(439, 274, sprAmGirder, 0)
-			PlaceSprite(628, 273, sprAmGirder, 4)
-			PlaceSprite(811, 271, sprAmGirder, 0)
-			PlaceSprite(737, 373, sprAmGirder, 4)
-			PlaceSprite(934, 440, sprAmGirder, 0)
-			PlaceSprite(1075, 439, sprAmGirder, 0)
-			PlaceSprite(1209, 438, sprAmGirder, 0)
-			PlaceSprite(1383, 439, sprAmGirder, 4)
-			--PlaceSprite(2159, 1525, sprAmGirder, 6)
-			PlaceSprite(3547, 344, sprAmGirder, 4)
-			PlaceSprite(3584, 254, sprAmGirder, 6)
-			PlaceSprite(3508, 132, sprAmGirder, 5)
-			PlaceSprite(3335, 1117, sprAmGirder, 6)
-			PlaceSprite(3335, 956, sprAmGirder, 6)
-			PlaceSprite(3335, 795, sprAmGirder, 6)
-			PlaceSprite(3335, 634, sprAmGirder, 6)
-			PlaceSprite(3335, 513, sprAmGirder, 2)
-			PlaceSprite(3401, 404, sprAmGirder, 7)
-			PlaceSprite(3455, 1190, sprAmGirder, 6)
-			PlaceSprite(3455, 1029, sprAmGirder, 6)
-			PlaceSprite(3455, 868, sprAmGirder, 6)
-			PlaceSprite(3455, 705, sprAmGirder, 6)
-			PlaceSprite(3455, 582, sprAmGirder, 2)
-			PlaceSprite(3485, 503, sprAmGirder, 3)
-			PlaceSprite(3601, 475, sprAmGirder, 4)
-			PlaceSprite(3719, 444, sprAmGirder, 3)
-			PlaceSprite(3094, 828, sprAmGirder, 5)
-			PlaceSprite(2064, 947, sprAmGirder, 7)
-			PlaceSprite(1826, 512, sprAmGirder, 7)
-
-			PlaceSprite(3420, 49, sprAmGirder, 1)
-			PlaceSprite(410, 682, sprAmGirder, 3)
-			PlaceSprite(528, 653, sprAmGirder, 4)
-			PlaceSprite(688, 653, sprAmGirder, 4)
-			PlaceSprite(805, 684, sprAmGirder, 1)
-			PlaceSprite(528, 672, sprAmGirder, 4)
-			PlaceSprite(688, 672, sprAmGirder, 4)
-			PlaceSprite(500, 696, sprAmGirder, 4)
-			PlaceSprite(701, 696, sprAmGirder, 4)
-
-			------ AMMO CRATE LIST ------
-			tempG = SpawnAmmoCrate(889, 1126, amBaseballBat)
-			tempG = SpawnAmmoCrate(1211, 975, amSineGun)
-			tempG = SpawnAmmoCrate(3619, 451, amFirePunch)
-
-			------ UTILITY CRATE LIST ------
-			tempG = SpawnUtilityCrate(304, 1594, amRope)
-			tempG = SpawnUtilityCrate(1538, 1987, amJetpack)
-			tempG = SpawnUtilityCrate(1958, 2000, amExtraTime)
-			tempG = SpawnUtilityCrate(2744, 1923, amJetpack)
-			tempG = SpawnUtilityCrate(3283, 1363, amParachute)
-			tempG = SpawnUtilityCrate(2749, 1812, amRope)
-			tempG = SpawnUtilityCrate(970, 779, amJetpack)
-
-			tempG = SpawnUtilityCrate(3284, 1332, amExtraTime)
-			tempG = SpawnUtilityCrate(1082, 975, amBlowTorch)
-			tempG = SpawnUtilityCrate(1547, 981, amJetpack)
-			tempG = SpawnUtilityCrate(1707, 397, amRope)
-			tempG = SpawnUtilityCrate(2309, 649, amExtraTime)
-			tempG = SpawnUtilityCrate(1116, 867, amExtraTime)
-
-			------ AMMO CRATE LIST ------
-			tempG = SpawnAmmoCrate(2559, 880, amBazooka)
-			tempG = SpawnAmmoCrate(2630, 880, amBazooka)
-			tempG = SpawnAmmoCrate(1951, 1406, amGrenade)
-
-			------ UTILITY CRATE LIST ------
-			tempG = SpawnUtilityCrate(3536, 320, amBlowTorch)
-			tempG = SpawnUtilityCrate(3582, 1994, amJetpack)
-			tempG = SpawnUtilityCrate(682, 349, amExtraTime)
-			tempG = SpawnUtilityCrate(2842, 633, amExtraTime)
-
-			------ BARREL LIST ------
-			SetHealth(AddGear(506, 1034, gtExplosives, 0, 0, 0, 0), 1)
-			SetHealth(AddGear(556, 1002, gtExplosives, 0, 0, 0, 0), 1)
-			SetHealth(AddGear(615, 1002, gtExplosives, 0, 0, 0, 0), 1)
-			SetHealth(AddGear(676, 1010, gtExplosives, 0, 0, 0, 0), 1)
-			SetHealth(AddGear(716, 1050, gtExplosives, 0, 0, 0, 0), 1)
-			SetHealth(AddGear(67, 1005, gtExplosives, 0, 0, 0, 0), 50)
-
-			------ MINE LIST ------
-			SetTimer(AddGear(1187, 1908, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1235, 1908, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1283, 1908, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1323, 1908, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1361, 1875, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1399, 1837, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1426, 1810, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(234, 1493, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(308, 1493, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(377, 1493, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(460, 1493, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(550, 1493, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(633, 1493, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(722, 1493, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(795, 1493, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(881, 1493, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(975, 1493, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1060, 1493, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1127, 1489, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1207, 1526, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1261, 1580, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1315, 1634, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1372, 1692, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1416, 1736, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1465, 1792, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1518, 1838, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1566, 1886, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1623, 2005, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1686, 2005, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1799, 1957, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1839, 1917, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1902, 1886, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1933, 1886, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2076, 1916, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2138, 1978, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2221, 2011, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2305, 2011, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2390, 2011, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2578, 1918, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(2494, 2002, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1758, 1728, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1683, 1707, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1635, 1657, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1572, 1596, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1517, 1542, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1447, 1477, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1401, 1432, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1338, 1365, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1290, 1310, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1230, 1266, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1149, 1260, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1054, 1257, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(978, 1257, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(895, 1258, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(819, 1257, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(753, 1258, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(671, 1260, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(599, 1260, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(526, 1259, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(466, 1259, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(408, 1261, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(336, 1260, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(290, 1259, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(218, 1260, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1777, 1263, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1776, 1198, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1778, 1141, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1781, 1078, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1778, 1027, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1778, 985, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1779, 925, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(1777, 882, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(4052, 2010, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(3965, 226, gtMine, 0, 0, 0, 0), 1)
-			SetTimer(AddGear(3962, 326, gtMine, 0, 0, 0, 0), 1)
-
-				------ STICKY MINE LIST ------
-			tempG = AddGear(3170, 1907, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3170, 1860, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3169, 1809, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3170, 1761, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3170, 1711, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3172, 1668, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3170, 1624, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3169, 1579, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3171, 1526, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3168, 1469, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3171, 1418, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3227, 1416, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3226, 1465, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3225, 1523, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3224, 1576, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3225, 1624, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3228, 1667, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3228, 1707, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3230, 1757, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3228, 1803, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3229, 1856, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3228, 1910, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(258, 534, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(329, 534, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(410, 535, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(482, 535, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(565, 533, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(670, 533, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(763, 533, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(858, 534, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(917, 534, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(1012, 534, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(1147, 535, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(1102, 535, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(1220, 535, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(1293, 535, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(1368, 535, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(1440, 536, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(223, 534, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(814, 534, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3909, 1822, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3867, 1822, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3824, 1822, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3784, 1822, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3732, 1822, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3682, 1822, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3627, 1822, gtSMine, 0, 0, 0, 0)
-			tempG = AddGear(3557, 1823, gtSMine, 0, 0, 0, 0)
-		end
-
-
-		activationStage = 200
-
-		--runOnHogs(RestoreHog)
-
-	end
-
-end
-
-function TryRepositionHogs()
-
-        if MapHasBorder() == true then
-
-                for i = 0, (numhhs-1) do
-                        if hhs[i] ~= nil then
-                                SetGearPosition(hhs[i],GetX(hhs[i]), TopY-10)
-                        end
-                end
-
-        end
-
-end
-
-----------------------------------
--- GAME METHODS / EVENT HANDLERS
-----------------------------------
-
-function onParameters()
-    parseParams()
-	mapID = params["m"]
-end
-
-function onPreviewInit()
-	onGameInit()
-end
-
-function onGameInit()
-
-		Theme = "Cave"
-
-		MapGen = mgDrawn
-		TemplateFilter = 0
-
-		EnableGameFlags(gfInfAttack, gfDisableWind)
-		DisableGameFlags(gfSolidLand)
-		CaseFreq = 0
-        TurnTime = 90000
-        WaterRise = 0
-
-		for x = 1, 16 do
-			AddPoint(x*100,100,5)
-		end
-
-		FlushPoints()
-
-end
-
-function limitHogs(gear)
-
-	cnthhs = cnthhs + 1
-	if cnthhs > 1 then
-		DeleteGear(gear)
-    end
-
-end
-
-function onGameStart()
-
-
-		trackTeams()
-
-		roundN = 0
-        lastRound = TotalRounds
-        RoundHasChanged = false -- true
-
-        for i = 0, (specialPointsCount-1) do
-                PlaceWayPoint(specialPointsX[i], specialPointsY[i])
-        end
-
-        RebuildTeamInfo()
-
-		for i=0 , TeamsCount - 1 do
-			cnthhs = 0
-			runOnHogsInTeam(limitHogs, teamNameArr[i])
-		end
-
-        ShowMission     (
-                                loc("RACER"),
-                                loc("a Hedgewars mini-game"),
-
-                                loc("Build a track and race.") .. "|" ..
-                                loc("Round Limit:") .. " " .. roundLimit .. "|" ..
-
-                                "", 4, 4000
-                                )
-
-        TryRepositionHogs()
-
-end
-
-function PlaceWayPoint(x,y)
-    if not racerActive then
-        if wpCount == 0 or wpX[wpCount - 1] ~= x or wpY[wpCount - 1] ~= y then
-
-            wpX[wpCount] = x
-            wpY[wpCount] = y
-            wpCol[wpCount] = 0xffffffff
-            wpCirc[wpCount] = AddVisualGear(wpX[wpCount],wpY[wpCount],vgtCircle,0,true)
-
-            SetVisualGearValues(wpCirc[wpCount], wpX[wpCount], wpY[wpCount], 20, 100, 1, 10, 0, wpRad, 5, wpCol[wpCount])
-
-            wpCount = wpCount + 1
-
-            AddCaption(loc("Waypoint placed.") .. " " .. loc("Available points remaining: ") .. (wpLimit-wpCount))
-        end
-    end
-end
-
-function onSpecialPoint(x,y,flag)
-    specialPointsX[specialPointsCount] = x
-    specialPointsY[specialPointsCount] = y
-    specialPointsCount = specialPointsCount + 1
-end
-
-
-
-function onNewTurn()
-
-        CheckForNewRound()
-        TryRepositionHogs()
-
-        racerActive = false
-
-		activationStage = 1
-
-		--AddAmmo(CurrentHedgehog, amBazooka, 100)
-		--AddAmmo(CurrentHedgehog, amJetpack, 100)
-
-		--ClearMap()
-
-
-        trackTime = 0
-
-        currCount = 0 -- hopefully this solves problem
-        AddAmmo(CurrentHedgehog, amAirAttack, 0)
-        gTimer = 0
-
-        -- Set the waypoints to unactive on new round
-        for i = 0,(wpCount-1) do
-                wpActive[i] = false
-                wpCol[i] = 0xffffffff
-                SetVisualGearValues(wpCirc[i], wpX[i], wpY[i], 20, 100, 1, 10, 0, wpRad, 5, wpCol[i])
-        end
-
-        -- Handle Starting Stage of Game
-        if (gameOver == false) and (gameBegun == false) then
-                if wpCount >= 3 then
-                        gameBegun = true
-						--activationStage = 200
-                        roundNumber = 0
-                        firstClan = GetHogClan(CurrentHedgehog)
-                        ShowMission(loc("RACER"),
-                        loc("GAME BEGUN!!!"),
-                        loc("Complete the track as fast as you can!"), 2, 4000)
-                else
-                        ShowMission(loc("RACER"),
-                        loc("NOT ENOUGH WAYPOINTS"),
-                        loc("Place more waypoints using the 'Air Attack' weapon."), 2, 4000)
-                        AddAmmo(CurrentHedgehog, amAirAttack, 4000)
-						SetWeapon(amAirAttack)
-                end
-        end
-
-        if gameOver == true then
-                gameBegun = false
-                racerActive = false -- newadd
-        end
-
-        AddAmmo(CurrentHedgehog, amTardis, 0)
-        AddAmmo(CurrentHedgehog, amDrillStrike, 0)
-        AddAmmo(CurrentHedgehog, amMineStrike, 0)
-        AddAmmo(CurrentHedgehog, amNapalm, 0)
-        AddAmmo(CurrentHedgehog, amPiano, 0)
-
-end
-
-function onGameTick20()
-
-
-		if jet ~= nil then
-			--SetHealth(jet, 2000)
-		end
-
-        -- airstrike detected, convert this into a potential waypoint spot
-        if cGear ~= nil then
-                x,y = GetGearPosition(cGear)
-        if x > -9000 then
-            x,y = GetGearTarget(cGear)
-
-
-            if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then
-                AddCaption(loc("Please place the way-point in the open, within the map boundaries."))
-                PlaySound(sndDenied)
-            elseif (y > WaterLine-50) then
-                AddCaption(loc("Please place the way-point further from the waterline."))
-                PlaySound(sndDenied)
-            else
-                PlaceWayPoint(x, y)
-                if wpCount == wpLimit then
-                    AddCaption(loc("Race complexity limit reached."))
-                    DisableTumbler()
-                end
-            end
-        else
-            DeleteGear(cGear)
-        end
-        SetGearPosition(cGear, -10000, 0)
-        end
-
-
-		if activationStage < 10 then
-				HandleFreshMapCreation()
-		end
-
-
-        -- start the player tumbling with a boom once their turn has actually begun
-        if racerActive == false then
-
-                if (TurnTimeLeft > 0) and (TurnTimeLeft ~= TurnTime) then
-
-                        -- if the gamehas started put the player in the middle of the first
-                        --waypoint that was placed
-                        --if activationStage == 200 then
-						if gameBegun == true then
-                                AddCaption(loc("Good to go!"))
-                                racerActive = true
-                                trackTime = 0
-
-
-								SetGearPosition(CurrentHedgehog, wpX[0], wpY[0])
-                                --AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtGrenade, 0, 0, 0, 1)
-                                --SetGearVelocity(CurrentHedgehog,1000000,1000000)
-								SetGearMessage(CurrentHedgehog,gmLeft)
-
-
-								FollowGear(CurrentHedgehog)
-
-                                HideMission()
-								activationStage = 201
-
-						else
-                                -- still in placement mode
-                        end
-
-                end
-
-        elseif (activationStage == 201) and (TurnTimeLeft > 0) and (TurnTimeLeft ~= TurnTime) then
-			SetGearMessage(CurrentHedgehog,0)
-			activationStage = 202
-		end
-
-
-
-        -- has the player started his tumbling spree?
-        if (CurrentHedgehog ~= nil) then
-
-                --airstrike conversion used to be here
-
-                -- if the RACE has started, show tracktimes and keep tabs on waypoints
-                if (racerActive == true) and (activationStage == 202) then
-
-                        --ghost
-                        if GameTime%40 == 0 then
-                                HandleGhost()
-                        end
-
-                        trackTime = trackTime + 20
-
-                        if GameTime%100 == 0 then
-
-                if trackTime%1000 == 0 then
-                    AddCaption((trackTime/1000)..'.0',GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage2)
-                else
-                    AddCaption(trackTime/1000,GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage2)
-                end
-
-                                if (CheckWaypoints() == true) then
-                                        AdjustScores()
-                                        DisableTumbler()
-                                end
-
-                        end
-
-                end
-
-                -- if the player has expended his tunbling time, stop him tumbling
-                if TurnTimeLeft <= 20 then
-                        DisableTumbler()
-                end
-
-        end
-
-end
-
-function onGearResurrect(gear)
-
-        AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
-
-        if gear == CurrentHedgehog then
-                DisableTumbler()
-        end
-
-end
-
-function isATrackedGear(gear)
-	if 	(GetGearType(gear) == gtHedgehog) or
-		(GetGearType(gear) == gtGrenade) or
-		(GetGearType(gear) == gtTarget) or
-		(GetGearType(gear) == gtFlame) or
-		(GetGearType(gear) == gtExplosives) or
-		(GetGearType(gear) == gtMine) or
-		(GetGearType(gear) == gtSMine) or
-		(GetGearType(gear) == gtCase)
-	then
-		return(true)
-	else
-		return(false)
-	end
-end
-
-function onGearAdd(gear)
-
-        if isATrackedGear(gear) then
-			trackGear(gear)
-		end
-
-		if GetGearType(gear) == gtHedgehog then
-                hhs[numhhs] = gear
-                numhhs = numhhs + 1
-                SetEffect(gear, heResurrectable, 1)
-        end
-
-        if GetGearType(gear) == gtAirAttack then
-                cGear = gear
-        elseif GetGearType(gear) == gtJetpack then
-			jet = gear
-		end
-
-end
-
-function onGearDelete(gear)
-
-        if isATrackedGear(gear) then
-			trackDeletion(gear)
-		elseif GetGearType(gear) == gtAirAttack then
-                cGear = nil
-        elseif GetGearType(gear) == gtJetpack then
-			jet = nil
-		end
-
-end
-
-function onAttack()
-    at = GetCurAmmoType()
-
-    usedWeapons[at] = 0
-end
-
-function onAchievementsDeclaration()
-    usedWeapons[amSkip] = nil
-
-    usedRope = usedWeapons[amRope] ~= nil
-    usedPortal = usedWeapons[amPortalGun] ~= nil
-    usedSaucer = usedWeapons[amJetpack] ~= nil
-
-    usedWeapons[amRope] = nil
-    usedWeapons[amPortalGun] = nil
-    usedWeapons[amJetpack] = nil
-
-    usedOther = next(usedWeapons) ~= nil
-
-    if usedOther then -- smth besides skip, rope, portal or saucer used
-        raceType = "unknown race"
-    elseif usedRope and not usedPortal and not usedSaucer then
-        raceType = "rope race"
-    elseif not usedRope and usedPortal and not usedSaucer then
-        raceType = "portal race"
-    elseif not usedRope and not usedPortal and usedSaucer then
-        raceType = "saucer race"
-    elseif (usedRope or usedPortal or usedSaucer or usedOther) == false then -- no weapons used at all?
-        raceType = "no tools race"
-    else -- at least two of rope, portal and saucer used
-        raceType = "mixed race"
-    end
-
-    map = detectMap()
-
-    for i = 0, (numTeams-1) do
-        if teamScore[i] < 100000 then
-            DeclareAchievement(raceType, teamNameArr[i], map, teamScore[i])
-        end
-    end
-end
-
-
-
+------------------------------------------
+-- TECH RACER v0.8
+-----------------------------------------
+
+--------------
+-- TO DO
+--------------
+-- allow scrolling of maps (was going to add this in the engine itself, but it can be done now by refreshing preview)
+
+--------------
+--0.2
+--------------
+-- should work better "out the box"
+-- changed map generation
+-- put a hog limiter in place
+-- removed parsecommand
+-- fix one of the test maps
+-- hopefully added some support for future official challenges etc
+-- changed theme
+-- minor cleanups?
+
+--------------
+--0.3
+--------------
+-- ehh, scrap everything? those old maps probably still desync so they can die for now
+-- hopefully fix map 3
+-- add two new crappy map to test an idea.
+
+--------------
+--0.4
+--------------
+-- updated version text (lol)
+-- some preliminary support for hand-drawn map loading
+-- some support for being really lazy
+-- an extra map or two
+-- param for infinite UFO fuel
+-- param for number of rounds
+
+--------------
+--0.5
+--------------
+-- migrated maps to an external script
+
+--------------
+--0.6
+--------------
+-- move 1 line of code :D (allows loading of HWMAP points to actually work)
+
+--------------
+--0.7
+--------------
+-- allow waypoints to be loaded automatically via TechMaps or HWMAP
+-- (temporarily?) remove ability to place waypoints manually
+-- break stuff?
+
+--------------
+--0.8
+--------------
+-- should (more or less) work "out of the box" now
+-- generate map previews for level
+-- randomly assign a map in the case of no map param
+-- no longer allow custom ammosets (ammo should be specified by map so that records can be valid, though we probably still need to completely limit gameflags)
+
+--------------
+--0.9
+--------------
+-- added variable portal limiter (and effects) from Escape script
+-- allow variable ufoFuel (nil is default, 2000 is infinite)
+-- disallow specifying fuel in params (do this in TechMaps or HedgeEditor please)
+
+-----------------------------
+-- SCRIPT BEGINS
+-----------------------------
+
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+HedgewarsScriptLoad("/Scripts/OfficialChallenges.lua")
+HedgewarsScriptLoad("/Scripts/Tracker.lua")
+HedgewarsScriptLoad("/Scripts/Params.lua")
+HedgewarsScriptLoad("/Scripts/TechMaps.lua")
+
+------------------
+-- Got Variables?
+------------------
+
+local atkArray =
+				{
+				{amBazooka, 	"amBazooka",		0},
+				{amBee, 		"amBee",			0},
+				{amMortar, 		"amMortar",			0},
+				{amDrill, 		"amDrill",			0},
+				{amSnowball, 	"amSnowball",		0},
+
+				{amGrenade,		"amGrenade",		0},
+				{amClusterBomb,	"amClusterBomb",	0},
+				{amMolotov, 	"amMolotov",		0},
+				{amWatermelon, 	"amWatermelon",		0},
+				{amHellishBomb,	"amHellishBomb",	0},
+				{amGasBomb, 	"amGasBomb",		0},
+
+				{amShotgun,		"amShotgun",		0},
+				{amDEagle,		"amDEagle",			0},
+				{amFlamethrower,"amFlamethrower",	0},
+				{amSniperRifle,	"amSniperRifle",	0},
+				{amSineGun, 	"amSineGun",		0},
+				{amIceGun, 		"amIceGun",			0},
+				{amLandGun,		"amLandGun",		0},
+
+				{amFirePunch, 	"amFirePunch",		0},
+				{amWhip,		"amWhip",			0},
+				{amBaseballBat, "amBaseballBat",	0},
+				{amKamikaze, 	"amKamikaze",		0},
+				{amSeduction, 	"amSeduction",		0},
+				{amHammer,		"amHammer",			0},
+
+				{amMine, 		"amMine",			0},
+				{amDynamite, 	"amDynamite",		0},
+				{amCake, 		"amCake",			0},
+				{amBallgun, 	"amBallgun",		0},
+				{amRCPlane,		"amRCPlane",		0},
+				{amSMine,		"amSMine",			0},
+				{amAirMine,		"amAirMine",		0},
+
+				{amAirAttack,	"amAirAttack",		0},
+				{amMineStrike,	"amMineStrike",		0},
+				{amDrillStrike,	"amDrillStrike",	0},
+				{amAirMine,		"amAirMine",		0},
+				{amNapalm, 		"amNapalm",			0},
+				{amPiano,		"amPiano",			0},
+
+				{amKnife,		"amKnife",			0},
+
+				{amBirdy,		"amBirdy",			0}
+
+				}
+
+local utilArray =
+				{
+				{amBlowTorch, 		"amBlowTorch",		0},
+				{amPickHammer,		"amPickHammer",		0},
+				{amGirder, 			"amGirder",			0},
+				{amRubber, 			"amRubber",			0},
+				{amPortalGun,		"amPortalGun",		0},
+
+				{amRope, 			"amRope",			0},
+				{amParachute, 		"amParachute",		0},
+				{amTeleport,		"amTeleport",		0},
+				{amJetpack,			"amJetpack",		0},
+
+				{amInvulnerable,	"amInvulnerable",	0},
+				{amLaserSight,		"amLaserSight",		0},
+				{amVampiric,		"amVampiric",		0},
+
+				{amLowGravity, 		"amLowGravity",		0},
+				{amExtraDamage, 	"amExtraDamage",	0},
+				{amExtraTime,		"amExtraTime",		0},
+
+				{amResurrector, 	"amResurrector",	0},
+				{amTardis, 			"amTardis",			0},
+
+				{amSwitch,			"amSwitch",			0}
+				}
+
+local activationStage = 0
+local jet = nil
+portalDistance = 5000 -- 15
+ufoFuel = 0
+local fMod = 1000000 -- 1
+local roundLimit = 3
+local roundNumber = 0
+local firstClan = 10
+
+local fastX = {}
+local fastY = {}
+local fastCount = 0
+local fastIndex = 0
+local fastColour
+
+local currX = {}
+local currY = {}
+local currCount = 0
+
+local specialPointsX = {}
+local specialPointsY = {}
+local specialPointsFlag = {}
+local specialPointsCount = 0
+
+mapID = nil
+
+--------------------------
+-- hog and team tracking variales
+--------------------------
+
+local numhhs = 0 -- store number of hedgehogs
+local hhs = {} -- store hedgehog gears
+
+local numTeams --  store the number of teams in the game
+local teamNameArr = {}  -- store the list of teams
+local teamClan = {}
+local teamSize = {}     -- store how many hogs per team
+local teamIndex = {} -- at what point in the hhs{} does each team begin
+
+local teamComment = {}
+local teamScore = {}
+
+-------
+-- racer vars
+--------
+
+local cGear = nil
+
+local bestClan = nil
+local bestTime = nil
+
+local gameBegun = false
+local gameOver = false
+local racerActive = false
+local trackTime = 0
+
+local wpCirc = {}
+local wpX = {}
+local wpY = {}
+local wpCol = {}
+local wpActive = {}
+local wpRad = 450 --75
+local wpCount = 0
+local wpLimit = 20
+
+local usedWeapons = {}
+
+local roundN
+local lastRound
+local RoundHasChanged
+
+-------------------
+-- general methods
+-------------------
+
+--function onPrecise()
+--end
+
+function RebuildTeamInfo()
+
+
+        -- make a list of individual team names
+        for i = 0, (TeamsCount-1) do
+                teamNameArr[i] = " " -- = i
+                teamSize[i] = 0
+                teamIndex[i] = 0
+                teamScore[i] = 100000
+        end
+        numTeams = 0
+
+        for i = 0, (numhhs-1) do
+
+                z = 0
+                unfinished = true
+                while(unfinished == true) do
+
+                        newTeam = true
+                        tempHogTeamName = GetHogTeamName(hhs[i]) -- this is the new name
+
+                        if tempHogTeamName == teamNameArr[z] then
+                                newTeam = false
+                                unfinished = false
+                        end
+
+                        z = z + 1
+
+                        if z == TeamsCount then
+                                unfinished = false
+                                if newTeam == true then
+                                        teamNameArr[numTeams] = tempHogTeamName
+                                        numTeams = numTeams + 1
+                                end
+                        end
+
+                end
+
+        end
+
+        -- find out how many hogs per team, and the index of the first hog in hhs
+        for i = 0, (numTeams-1) do
+                for z = 0, (numhhs-1) do
+                        if GetHogTeamName(hhs[z]) == teamNameArr[i] then
+                                teamClan[i] = GetHogClan(hhs[z])
+                                if teamSize[i] == 0 then
+                                        teamIndex[i] = z -- should give starting index
+                                end
+                                teamSize[i] = teamSize[i] + 1
+                                --add a pointer so this hog appears at i in hhs
+                        end
+                end
+
+        end
+
+end
+
+
+-----------------
+-- RACER METHODS
+-----------------
+
+function CheckWaypoints()
+
+        trackFinished = true
+
+        for i = 0, (wpCount-1) do
+
+                g1X, g1Y = GetGearPosition(CurrentHedgehog)
+                g2X, g2Y = wpX[i], wpY[i]
+
+                g1X = g1X - g2X
+                g1Y = g1Y - g2Y
+                dist = (g1X*g1X) + (g1Y*g1Y)
+
+                --if i == 0 then
+                --      AddCaption(dist .. "/" .. (wpRad*wpRad) )
+                --end
+
+                NR = (48/100*wpRad)/2
+
+                if dist < (NR*NR) then
+                --if dist < (wpRad*wpRad) then
+                        --AddCaption("howdy")
+                        wpActive[i] = true
+                        wpCol[i] = GetClanColor(GetHogClan(CurrentHedgehog)) -- new                             --GetClanColor(1)
+                        SetVisualGearValues(wpCirc[i], wpX[i], wpY[i], 20, 100, 1, 10, 0, wpRad, 5, wpCol[i])
+
+                        wpRem = 0
+                        for k = 0, (wpCount-1) do
+                                if wpActive[k] == false then
+                                        wpRem = wpRem + 1
+                                end
+                        end
+
+                        AddCaption(loc("Way-Points Remaining") .. ": " .. wpRem,0xffba00ff,capgrpAmmoinfo)
+
+                end
+
+                if wpActive[i] == false then
+                        trackFinished = false
+                end
+
+        end
+
+        return(trackFinished)
+
+end
+
+function AdjustScores()
+
+        if bestTime == nil then
+                bestTime = 100000
+                bestClan = 10
+                bestTimeComment = "N/A"
+        end
+
+        newScore = false
+
+        -- update this clan's time if the new track is better
+        for i = 0, (numTeams-1) do
+                if teamClan[i] == GetHogClan(CurrentHedgehog) then
+                        if trackTime < teamScore[i] then
+                                teamScore[i] = trackTime
+                                newScore = true
+                        else
+                                newScore = false
+                        end
+                end
+        end
+
+        --bestTime = 100000
+        --bestClan = 10
+
+        -- find the best time out of those so far
+        for i = 0, (numTeams-1) do
+                if teamScore[i] < bestTime then
+                        bestTime = teamScore[i]
+                        bestClan = teamClan[i]
+                end
+        end
+
+        if bestTime ~= 100000 then
+                bestTimeComment = (bestTime/1000) ..loc("s")
+        end
+
+        if newScore == true then
+                if trackTime == bestTime then -- best time of the race
+                        ShowMission(loc("RACER"),
+                        loc("TRACK COMPLETED"),
+                        loc("NEW RACE RECORD: ") .. (trackTime/1000) ..loc("s") .. "|" ..
+                        loc("WINNING TIME: ") .. bestTimeComment, 0, 4000)
+                        PlaySound(sndHomerun)
+                else    -- best time for the clan
+                        ShowMission(loc("RACER"),
+                        loc("TRACK COMPLETED"),
+                        loc("NEW CLAN RECORD: ") .. (trackTime/1000) ..loc("s") .. "|" ..
+                        loc("WINNING TIME: ") .. bestTimeComment, 4, 4000)
+                end
+        else -- not any kind of new score
+                ShowMission(loc("RACER"),
+                loc("TRACK COMPLETED"),
+                loc("TIME: ") .. (trackTime/1000) ..loc("s") .. "|" ..
+                loc("WINNING TIME: ") .. bestTimeComment, -amSkip, 4000)
+                PlaySound(sndHellish)
+        end
+
+
+        --------
+        --new
+        --------
+
+        if bestTime == trackTime then
+                --AddCaption("wooooooooooooooooooooooooooooo")
+
+                fastColour = GetClanColor(GetHogClan(CurrentHedgehog))
+
+                for i = 0, (currCount-1) do
+                        fastX[i] = currX[i]
+                        fastY[i] = currY[i]
+                end
+
+                fastCount = currCount
+                fastIndex = 0
+
+                --currCount = 0 -- is this needed?
+
+        else
+                currCount = 0
+                fastIndex = 0
+        end
+
+
+end
+
+function onNewRound()
+
+        roundNumber = roundNumber + 1
+
+        totalComment = ""
+        for i = 0, (TeamsCount-1) do
+                        if teamNameArr[i] ~= " " then                           -- teamScore[teamClan[i]]
+                                teamComment[i] = teamNameArr[i] .. ": " .. (teamScore[i]/1000) .. loc("s|")
+                                totalComment = totalComment .. teamComment[i]
+                        elseif teamNameArr[i] == " " then
+                                teamComment[i] = "|"
+                        end
+        end
+
+        ShowMission(    loc("RACER"),
+                                        loc("STATUS UPDATE"),
+                                        loc("Rounds Complete: ") .. roundNumber .. "/" .. roundLimit .. "|" .. " " .. "|" ..
+                                        loc("Best Team Times: ") .. "|" .. totalComment, 0, 4000)
+
+        -- end game if its at round limit
+        if roundNumber >= roundLimit then
+                for i = 0, (numhhs-1) do
+                        if GetHogClan(hhs[i]) ~= bestClan then
+                                SetEffect(hhs[i], heResurrectable, 0)
+                                SetHealth(hhs[i],0)
+                        end
+                end
+                gameOver = true
+                TurnTimeLeft = 1
+        end
+
+end
+
+function CheckForNewRound()
+
+        -------------
+        ------ new
+        -------------
+
+        --[[turnN = turnN + 1
+        if gameBegun == false then
+                if turnN == 2 then
+                        for i = 0, (numhhs-1) do
+                                if hhs[i] ~= nil then
+                                        SetEffect(hhs[i], heResurrectable, 0)
+                                        SetHealth(hhs[i],0)
+                                end
+                        end
+                        gameOver = true
+                        TurnTimeLeft = 1
+                end
+        else
+
+
+        end]]
+
+        --[[if roundBegun == true then
+
+                if RoundHasChanged == true then
+                        roundN = roundN + 1
+                        RoundHasChanged = false
+                        onNewRound()
+                end
+
+                if lastRound ~= TotalRounds then -- new round, but not really
+
+                        if RoundHasChanged == false then
+                                RoundHasChanged = true
+                        end
+
+                end
+
+                AddCaption("RoundN:" .. roundN .. "; " .. "TR: " .. TotalRounds)
+
+                lastRound = TotalRounds
+
+        end]]
+
+        ------------
+        ----- old
+        ------------
+
+        if GetHogClan(CurrentHedgehog) == firstClan then
+                onNewRound()
+        end
+
+end
+
+function DisableTumbler()
+        currCount = 0
+        fastIndex = 0
+        TurnTimeLeft = 0
+        racerActive = false -- newadd
+end
+
+function HandleGhost()
+
+        -- get the current xy of the racer at this point
+        currX[currCount] = GetX(CurrentHedgehog)
+        currY[currCount] = GetY(CurrentHedgehog)
+        currCount = currCount + 1
+
+        -- draw a ping of smoke where the fastest player was at this point
+        if (fastCount ~= 0) and (fastIndex < fastCount) then
+
+                fastIndex = fastIndex + 1
+
+                tempE = AddVisualGear(fastX[fastIndex], fastY[fastIndex], vgtSmoke, 0, false)
+                g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+                SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, fastColour )
+
+                --AddCaption("fC: " .. fastIndex .. " / " .. fastCount)
+
+        else
+
+                --AddCaption("excep fC: " .. fastIndex .. " / " .. fastCount)
+
+        end
+
+end
+
+function BoomGirder(x,y,rot)
+	girTime = 1
+	if rot < 4 then
+				AddGear(x, y, gtGrenade, 0, 0, 0, girTime)
+	elseif rot == 4 then
+				g = AddGear(x-45, y, gtGrenade, 0, 0, 0, girTime) -- needed?
+				g = AddGear(x-30, y, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed?
+				g = AddGear(x+30, y, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x+45, y, gtGrenade, 0, 0, 0, girTime) -- needed?
+	elseif rot == 5 then ------- diag
+				g = AddGear(x+45, y+45, gtGrenade, 0, 0, 0, girTime) --n
+				g = AddGear(x+30, y+30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed?
+				g = AddGear(x-30, y-30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x-45, y-45, gtGrenade, 0, 0, 0, girTime) --n
+	elseif rot == 6 then
+				g = AddGear(x, y-45, gtGrenade, 0, 0, 0, girTime) -- needed?
+				g = AddGear(x, y+30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed?
+				g = AddGear(x, y-30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x, y+45, gtGrenade, 0, 0, 0, girTime) -- needed?
+	elseif rot == 7 then -------
+				g = AddGear(x+45, y-45, gtGrenade, 0, 0, 0, girTime) --n
+				g = AddGear(x+30, y-30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed?
+				g = AddGear(x-30, y+30, gtGrenade, 0, 0, 0, girTime)
+				g = AddGear(x-45, y+45, gtGrenade, 0, 0, 0, girTime) --n
+	end
+end
+
+function RemoveGear(gear)
+	if (isATrackedGear(gear) == true) and (GetGearType(gear) ~= gtHedgehog) then
+		DeleteGear(gear)
+	end
+end
+
+function ClearMap()
+
+	runOnGears(RemoveGear)
+
+end
+
+function CallBob(x,y)
+	if not racerActive then
+        if wpCount == 0 or wpX[wpCount - 1] ~= x or wpY[wpCount - 1] ~= y then
+
+            wpX[wpCount] = x
+            wpY[wpCount] = y
+            wpCol[wpCount] = 0xffffffff
+            wpCirc[wpCount] = AddVisualGear(wpX[wpCount],wpY[wpCount],vgtCircle,0,true)
+
+            SetVisualGearValues(wpCirc[wpCount], wpX[wpCount], wpY[wpCount], 20, 100, 1, 10, 0, wpRad, 5, wpCol[wpCount])
+
+            wpCount = wpCount + 1
+
+            --AddCaption(loc("Waypoint placed.") .. " " .. loc("Available points remaining: ") .. (wpLimit-wpCount))
+        end
+    end
+end
+
+
+
+function HandleFreshMapCreation()
+
+	-- the boom stage, boom girders, reset ammo, and delete other map objects
+	if activationStage == 1 then
+
+		ClearMap()
+		activationStage = activationStage + 1
+
+	-- the creation stage, place girders and needed gears, grant ammo
+	elseif activationStage == 2 then
+
+		InterpretPoints()
+
+		-- these are from onParameters()
+		if (mapID == nil) or (mapID == 0) then
+			LoadMap(2000)
+		else
+			LoadMap(mapID)
+		end
+
+		for i = 0,(wpCount-1) do
+			DeleteVisualGear(wpCirc[i])
+		end
+		wpCount = 0
+
+		for i = 1, techCount-1 do
+			CallBob(techX[i],techY[i])
+		end
+
+		activationStage = 200
+		--runOnHogs(RestoreHog)
+
+	end
+
+end
+
+function TryRepositionHogs()
+
+        if MapHasBorder() == true then
+
+                for i = 0, (numhhs-1) do
+                        if hhs[i] ~= nil then
+                                SetGearPosition(hhs[i],GetX(hhs[i]), TopY-10)
+                        end
+                end
+
+        end
+
+end
+
+----------------------------------
+-- GAME METHODS / EVENT HANDLERS
+----------------------------------
+
+function onParameters()
+
+	parseParams()
+	mapID = tonumber(params["m"])
+
+	--ufoFuel = tonumber(params["ufoFuel"])
+	roundLimit = tonumber(params["rounds"])
+
+	if (roundLimit == 0) or (roundLimit == nil) then
+		roundLimit = 3
+	end
+
+	if mapID == nil then
+		mapID = 2 + GetRandom(7)
+	end
+
+end
+
+function onGameInit()
+
+		if mapID == nil then
+			mapID = 2 + GetRandom(7)
+		end
+
+		Theme = "Cave"
+
+		MapGen = mgDrawn
+		TemplateFilter = 0
+
+		EnableGameFlags(gfInfAttack, gfDisableWind, gfBorder)
+		DisableGameFlags(gfSolidLand)
+		CaseFreq = 0
+        TurnTime = 90000
+        WaterRise = 0
+
+		for x = 1, 16 do
+			AddPoint(x*100,100,5)
+		end
+
+		FlushPoints()
+
+end
+
+function limitHogs(gear)
+
+	cnthhs = cnthhs + 1
+	if cnthhs > 1 then
+		DeleteGear(gear)
+    end
+
+end
+
+function onSpecialPoint(x,y,flag)
+    specialPointsX[specialPointsCount] = x
+    specialPointsY[specialPointsCount] = y
+	specialPointsFlag[specialPointsCount] = flag
+    specialPointsCount = specialPointsCount + 1
+end
+
+function InterpretPoints()
+
+	-- flags run from 0 to 127
+	for i = 0, (specialPointsCount-1) do
+
+		-- Mines
+		if specialPointsFlag[i] == 1 then
+			SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 1)
+		elseif specialPointsFlag[i] == 2 then
+			SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 1000)
+		elseif specialPointsFlag[i] == 3 then
+			SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 2000)
+		elseif specialPointsFlag[i] == 4 then
+			SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 3000)
+		elseif specialPointsFlag[i] == 5 then
+			SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 4000)
+		elseif specialPointsFlag[i] == 6 then
+			SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 5000)
+
+		-- Sticky Mines
+		elseif specialPointsFlag[i] == 7 then
+			AddGear(specialPointsX[i], specialPointsY[i], gtSMine, 0, 0, 0, 0)
+
+		-- Air Mines
+		elseif specialPointsFlag[i] == 8 then
+			AddGear(specialPointsX[i], specialPointsY[i], gtAirMine, 0, 0, 0, 0)
+
+		-- Health Crates
+		elseif specialPointsFlag[i] == 9 then
+			SetHealth(SpawnHealthCrate(specialPointsX[i],specialPointsY[i]),25)
+		elseif specialPointsFlag[i] == 10 then
+			SetHealth(SpawnHealthCrate(specialPointsX[i],specialPointsY[i]),50)
+		elseif specialPointsFlag[i] == 11 then
+			SetHealth(SpawnHealthCrate(specialPointsX[i],specialPointsY[i]),75)
+		elseif specialPointsFlag[i] == 12 then
+			SetHealth(SpawnHealthCrate(specialPointsX[i],specialPointsY[i]),100)
+
+		-- Cleaver
+		elseif specialPointsFlag[i] == 13 then
+			AddGear(specialPointsX[i], specialPointsY[i], gtKnife, 0, 0, 0, 0)
+
+		-- Target
+		elseif specialPointsFlag[i] == 14 then
+			AddGear(specialPointsX[i], specialPointsY[i], gtTarget, 0, 0, 0, 0)
+
+		--Barrels
+		elseif specialPointsFlag[i] == 15 then
+			SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),1)
+		elseif specialPointsFlag[i] == 16 then
+			SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),25)
+		elseif specialPointsFlag[i] == 17 then
+			SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),50)
+		elseif specialPointsFlag[i] == 18 then
+			SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),75)
+		elseif specialPointsFlag[i] == 19 then
+			SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),100)
+
+		-- There are about 58+- weps / utils
+		-- Weapon Crates
+		elseif (specialPointsFlag[i] >= 20) and (specialPointsFlag[i] < (#atkArray+20)) then
+			SpawnAmmoCrate(specialPointsX[i],specialPointsY[i],atkArray[specialPointsFlag[i]-19][1])
+
+
+		-- Utility Crates
+		elseif (specialPointsFlag[i] >= (#atkArray+20)) and (specialPointsFlag[i] < (#atkArray+20+#utilArray)) then
+			SpawnUtilityCrate(specialPointsX[i],specialPointsY[i],utilArray[specialPointsFlag[i]-19-#atkArray][1])
+
+		--79-82 (reserved for future wep crates)
+		--89,88,87,86 and 85,84,83,82 (reserved for the 2 custom sprites and their landflags)
+
+		--90-99 reserved for scripted structures
+		--[[elseif specialPointsFlag[i] == 90 then
+			--PlaceStruc("generator")
+		elseif specialPointsFlag[i] == 91 then
+			--PlaceStruc("healingstation")
+		elseif specialPointsFlag[i] == 92 then
+			--PlaceStruc("respawner")
+		elseif specialPointsFlag[i] == 93 then
+			--PlaceStruc("teleportationnode")
+		elseif specialPointsFlag[i] == 94 then
+			--PlaceStruc("biofilter")
+		elseif specialPointsFlag[i] == 95 then
+			--PlaceStruc("supportstation")
+		elseif specialPointsFlag[i] == 96 then
+			--PlaceStruc("constructionstation")
+		elseif specialPointsFlag[i] == 97 then
+			--PlaceStruc("reflectorshield")
+		elseif specialPointsFlag[i] == 98 then
+			--PlaceStruc("weaponfilter")]]
+
+		elseif specialPointsFlag[i] == 98 then
+			portalDistance = specialPointsX[i]
+			ufoFuel = specialPointsY[i]
+
+		-- Normal Girders
+		elseif specialPointsFlag[i] == 100 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		elseif specialPointsFlag[i] == 101 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		elseif specialPointsFlag[i] == 102 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		elseif specialPointsFlag[i] == 103 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		elseif specialPointsFlag[i] == 104 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		elseif specialPointsFlag[i] == 105 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		elseif specialPointsFlag[i] == 106 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		elseif specialPointsFlag[i] == 107 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+
+		-- Invulnerable Girders
+		elseif specialPointsFlag[i] == 108 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 0, 2516582650, nil, nil, nil, lfIndestructible)
+		elseif specialPointsFlag[i] == 109 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 1, 2516582650, nil, nil, nil, lfIndestructible)
+		elseif specialPointsFlag[i] == 110 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+		elseif specialPointsFlag[i] == 111 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 3, 2516582650, nil, nil, nil, lfIndestructible)
+		elseif specialPointsFlag[i] == 112 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		elseif specialPointsFlag[i] == 113 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+		elseif specialPointsFlag[i] == 114 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+		elseif specialPointsFlag[i] == 115 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+
+		-- Icy Girders
+		elseif specialPointsFlag[i] == 116 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 0, 16448250, nil, nil, nil, lfIce)
+		elseif specialPointsFlag[i] == 117 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 1, 16448250, nil, nil, nil, lfIce)
+		elseif specialPointsFlag[i] == 118 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 2, 16448250, nil, nil, nil, lfIce)
+		elseif specialPointsFlag[i] == 119 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 3, 16448250, nil, nil, nil, lfIce)
+		elseif specialPointsFlag[i] == 120 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 4, 16448250, nil, nil, nil, lfIce)
+		elseif specialPointsFlag[i] == 121 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 5, 16448250, nil, nil, nil, lfIce)
+		elseif specialPointsFlag[i] == 121 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 6, 16448250, nil, nil, nil, lfIce)
+		elseif specialPointsFlag[i] == 123 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 7, 16448250, nil, nil, nil, lfIce)
+
+		-- Rubber Bands
+		elseif specialPointsFlag[i] == 124 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		elseif specialPointsFlag[i] == 125 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		elseif specialPointsFlag[i] == 126 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+		elseif specialPointsFlag[i] == 127 then
+			PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+
+		-- Waypoints
+		else -- 0 / no value
+			CallBob(specialPointsX[i], specialPointsY[i])
+		end
+
+	end
+
+end
+
+function onGameStart()
+
+		trackTeams()
+
+		roundN = 0
+        lastRound = TotalRounds
+        RoundHasChanged = false -- true
+
+	    RebuildTeamInfo()
+
+		for i=0 , TeamsCount - 1 do
+			cnthhs = 0
+			runOnHogsInTeam(limitHogs, teamNameArr[i])
+		end
+
+        ShowMission     (
+                                loc("RACER"),
+                                loc("a Hedgewars mini-game"),
+
+                                loc("Build a track and race.") .. "|" ..
+                                loc("Round Limit:") .. " " .. roundLimit .. "|" ..
+								loc("You can further customize the race by changing the scheme script paramater.") .. "|" ..
+								--loc("For example, the below line would play map 4, with infinite fuel for the flying saucer, and four rounds.") .. "|" ..
+								--"m=4, ufo=true, rounds=4" .. "|" ..
+
+                                "", 4, 4000
+                                )
+
+        TryRepositionHogs()
+
+		activationStage = 2
+		HandleFreshMapCreation()
+
+end
+
+
+
+function onNewTurn()
+
+        CheckForNewRound()
+        TryRepositionHogs()
+
+        racerActive = false
+
+		activationStage = 1
+
+		--AddAmmo(CurrentHedgehog, amBazooka, 100)
+		--AddAmmo(CurrentHedgehog, amJetpack, 100)
+
+		--ClearMap()
+
+
+        trackTime = 0
+
+        currCount = 0 -- hopefully this solves problem
+    --    AddAmmo(CurrentHedgehog, amAirAttack, 0)
+        gTimer = 0
+
+        -- Set the waypoints to unactive on new round
+        for i = 0,(wpCount-1) do
+                wpActive[i] = false
+                wpCol[i] = 0xffffffff
+                SetVisualGearValues(wpCirc[i], wpX[i], wpY[i], 20, 100, 1, 10, 0, wpRad, 5, wpCol[i])
+        end
+
+        -- Handle Starting Stage of Game
+        if (gameOver == false) and (gameBegun == false) then
+               -- if wpCount >= 3 then
+                        gameBegun = true
+						--  --[[activationStage = 200]]
+                        roundNumber = 0
+                        firstClan = GetHogClan(CurrentHedgehog)
+                        ShowMission(loc("RACER"),
+                        loc("GAME BEGUN!!!"),
+                        loc("Complete the track as fast as you can!"), 2, 4000)
+                --else
+                --        ShowMission(loc("RACER"),
+                --        loc("NOT ENOUGH WAYPOINTS"),
+                --        loc("Place more waypoints using the 'Air Attack' weapon."), 2, 4000)
+                --        AddAmmo(CurrentHedgehog, amAirAttack, 4000)
+				--		SetWeapon(amAirAttack)
+               -- end
+        end
+
+        if gameOver == true then
+                gameBegun = false
+                racerActive = false -- newadd
+        end
+
+        AddAmmo(CurrentHedgehog, amTardis, 0)
+        AddAmmo(CurrentHedgehog, amDrillStrike, 0)
+        AddAmmo(CurrentHedgehog, amMineStrike, 0)
+        AddAmmo(CurrentHedgehog, amNapalm, 0)
+        AddAmmo(CurrentHedgehog, amPiano, 0)
+
+end
+
+function onGameTick20()
+
+		if (jet ~= nil) and (ufoFuel ~= 0) then
+			if ufoFuel == 2000 then
+				SetHealth(jet, 2000)
+			end
+		end
+
+		runOnGears(PortalEffects)
+
+        -- airstrike detected, convert this into a potential waypoint spot
+        if cGear ~= nil then
+                x,y = GetGearPosition(cGear)
+        if x > -9000 then
+            x,y = GetGearTarget(cGear)
+
+
+            if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then
+                AddCaption(loc("Please place the way-point in the open, within the map boundaries."))
+                PlaySound(sndDenied)
+            elseif (y > WaterLine-50) then
+                AddCaption(loc("Please place the way-point further from the waterline."))
+                PlaySound(sndDenied)
+            else
+                CallBob(x, y)
+                if wpCount == wpLimit then
+                    AddCaption(loc("Race complexity limit reached."))
+                    DisableTumbler()
+                end
+            end
+        else
+            DeleteGear(cGear)
+        end
+        SetGearPosition(cGear, -10000, 0)
+        end
+
+
+		if activationStage < 10 then
+				HandleFreshMapCreation()
+		end
+
+
+        -- start the player tumbling with a boom once their turn has actually begun
+        if racerActive == false then
+
+                if (TurnTimeLeft > 0) and (TurnTimeLeft ~= TurnTime) then
+
+                        -- if the gamehas started put the player in the middle of the first
+                        --waypoint that was placed
+                        --if activationStage == 200 then
+						if gameBegun == true then
+                                AddCaption(loc("Good to go!"))
+                                racerActive = true
+                                trackTime = 0
+
+
+								SetGearPosition(CurrentHedgehog, wpX[0], wpY[0])
+                                --AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtGrenade, 0, 0, 0, 1)
+                                --SetGearVelocity(CurrentHedgehog,1000000,1000000)
+								SetGearMessage(CurrentHedgehog,gmLeft)
+
+
+								FollowGear(CurrentHedgehog)
+
+                                HideMission()
+								activationStage = 201
+
+						else
+                                -- still in placement mode
+                        end
+
+                end
+
+        elseif (activationStage == 201) and (TurnTimeLeft > 0) and (TurnTimeLeft ~= TurnTime) then
+			SetGearMessage(CurrentHedgehog,0)
+			activationStage = 202
+		end
+
+
+
+        -- has the player started his tumbling spree?
+        if (CurrentHedgehog ~= nil) then
+
+                --airstrike conversion used to be here
+
+                -- if the RACE has started, show tracktimes and keep tabs on waypoints
+                if (racerActive == true) and (activationStage == 202) then
+
+                        --ghost
+                        if GameTime%40 == 0 then
+                                HandleGhost()
+                        end
+
+                        trackTime = trackTime + 20
+
+                        if GameTime%100 == 0 then
+
+                if trackTime%1000 == 0 then
+                    AddCaption((trackTime/1000)..'.0',GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage2)
+                else
+                    AddCaption(trackTime/1000,GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage2)
+                end
+
+                                if (CheckWaypoints() == true) then
+                                        AdjustScores()
+                                        DisableTumbler()
+                                end
+
+                        end
+
+                end
+
+                -- if the player has expended his tunbling time, stop him tumbling
+                if TurnTimeLeft <= 20 then
+                        DisableTumbler()
+                end
+
+        end
+
+end
+
+-- handle short range portal gun
+function PortalEffects(gear)
+
+	if GetGearType(gear) == gtPortal then
+
+		tag = GetTag(gear)
+		if tag == 0 then
+			col = 0xfab02aFF -- orange ball
+		elseif tag == 1 then
+			col = 0x00FF00FF -- orange portal
+		elseif tag == 2 then
+			col = 0x364df7FF  -- blue ball
+		elseif tag == 3 then
+			col = 0xFFFF00FF  -- blue portal
+		end
+
+		if (tag == 0) or (tag == 2) then -- i.e ball form
+			tempE = AddVisualGear(GetX(gear), GetY(gear), vgtDust, 0, true)
+			g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+			SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, 1, g9, col )
+
+			remLife = getGearValue(gear,"life")
+			remLife = remLife - 1
+			setGearValue(gear, "life", remLife)
+
+			if remLife == 0 then
+
+				tempE = AddVisualGear(GetX(gear)+15, GetY(gear), vgtSmoke, 0, true)
+				g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+				SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, col )
+
+				tempE = AddVisualGear(GetX(gear)-15, GetY(gear), vgtSmoke, 0, true)
+				g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+				SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, col )
+
+				tempE = AddVisualGear(GetX(gear), GetY(gear)+15, vgtSmoke, 0, true)
+				g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+				SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, col )
+
+				tempE = AddVisualGear(GetX(gear), GetY(gear)-15, vgtSmoke, 0, true)
+				g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+				SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, col )
+
+
+				PlaySound(sndVaporize)
+				DeleteGear(gear)
+
+			end
+
+		end
+
+	end
+
+end
+
+function onGearResurrect(gear)
+
+        AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
+
+        if gear == CurrentHedgehog then
+                DisableTumbler()
+        end
+
+end
+
+function isATrackedGear(gear)
+	if 	(GetGearType(gear) == gtHedgehog) or
+		(GetGearType(gear) == gtGrenade) or
+		(GetGearType(gear) == gtTarget) or
+		(GetGearType(gear) == gtFlame) or
+		(GetGearType(gear) == gtExplosives) or
+		(GetGearType(gear) == gtPortal) or
+		(GetGearType(gear) == gtMine) or
+		(GetGearType(gear) == gtSMine) or
+		(GetGearType(gear) == gtAirMine) or
+		(GetGearType(gear) == gtCase)
+	then
+		return(true)
+	else
+		return(false)
+	end
+end
+
+function onGearAdd(gear)
+
+       if isATrackedGear(gear) then
+		trackGear(gear)
+
+		if GetGearType(gear) == gtPortal then
+			setGearValue(gear,"life",portalDistance)
+		elseif GetGearType(gear) == gtHedgehog then
+            hhs[numhhs] = gear
+            numhhs = numhhs + 1
+            SetEffect(gear, heResurrectable, 1)
+		end
+
+	end
+
+	if GetGearType(gear) == gtAirAttack then
+       cGear = gear
+	elseif GetGearType(gear) == gtJetpack then
+		jet = gear
+		if (ufoFuel ~= 0) then
+			SetHealth(jet, ufoFuel)
+		end
+	end
+
+
+end
+
+function onGearDelete(gear)
+
+        if isATrackedGear(gear) then
+			trackDeletion(gear)
+		elseif GetGearType(gear) == gtAirAttack then
+                cGear = nil
+        elseif GetGearType(gear) == gtJetpack then
+			jet = nil
+		end
+
+end
+
+function onAttack()
+    at = GetCurAmmoType()
+
+    usedWeapons[at] = 0
+end
+
+function onAchievementsDeclaration()
+    usedWeapons[amSkip] = nil
+
+    usedRope = usedWeapons[amRope] ~= nil
+    usedPortal = usedWeapons[amPortalGun] ~= nil
+    usedSaucer = usedWeapons[amJetpack] ~= nil
+
+    usedWeapons[amRope] = nil
+    usedWeapons[amPortalGun] = nil
+    usedWeapons[amJetpack] = nil
+
+    usedOther = next(usedWeapons) ~= nil
+
+    if usedOther then -- smth besides skip, rope, portal or saucer used
+        raceType = "unknown race"
+    elseif usedRope and not usedPortal and not usedSaucer then
+        raceType = "rope race"
+    elseif not usedRope and usedPortal and not usedSaucer then
+        raceType = "portal race"
+    elseif not usedRope and not usedPortal and usedSaucer then
+        raceType = "saucer race"
+    elseif (usedRope or usedPortal or usedSaucer or usedOther) == false then -- no weapons used at all?
+        raceType = "no tools race"
+    else -- at least two of rope, portal and saucer used
+        raceType = "mixed race"
+    end
+
+    map = detectMap()
+
+    for i = 0, (numTeams-1) do
+        if teamScore[i] < 100000 then
+            DeclareAchievement(raceType, teamNameArr[i], map, teamScore[i])
+        end
+    end
+end
+
+function onAmmoStoreInit()
+
+	SetAmmo(amSkip, 9, 0, 0, 0)
+
+	for i = 1, #atkArray do
+		SetAmmo(atkArray[i][1], 0, 0, 0, 1)
+	end
+
+	for i = 1, #utilArray do
+		SetAmmo(utilArray[i][1], 0, 0, 0, 1)
+	end
+
+end
+
--- a/share/hedgewars/Data/Scripts/Multiplayer/The_Specialists.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/The_Specialists.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -127,48 +127,48 @@
 
 			if z == 1 then
 
-					SetHogName(hhs[i],"Soldier")
+					SetHogName(hhs[i],loc("Soldier"))
 					SetHogHat(hhs[i], "sf_vega")
 					SetHealth(hhs[i],200)
 
 			elseif z == 2 then
 
 					SetHogHat(hhs[i], "Glasses")
-					SetHogName(hhs[i],"Engineer")
+					SetHogName(hhs[i],loc("Engineer"))
 
 			elseif z == 3 then
 
-					SetHogName(hhs[i],"Ninja")
+					SetHogName(hhs[i],loc("Ninja"))
 					SetHogHat(hhs[i], "NinjaFull")
 					SetHealth(hhs[i],80)
 
 			elseif z == 4 then
 
-					SetHogName(hhs[i],"Demo")
+					SetHogName(hhs[i],loc("Demo"))
 					SetHogHat(hhs[i], "Skull")
 					SetHealth(hhs[i],200)
 
 			elseif z == 5 then
 
-					SetHogName(hhs[i],"Sniper")
+					SetHogName(hhs[i],loc("Sniper"))
 					SetHogHat(hhs[i], "Sniper")
 					SetHealth(hhs[i],120)
 
 			elseif z == 6 then
 
-					SetHogName(hhs[i],"Saint")
+					SetHogName(hhs[i],loc("Saint"))
 					SetHogHat(hhs[i], "angel")
 					SetHealth(hhs[i],300)
 
 			elseif z == 7 then
 
-					SetHogName(hhs[i],"Pyro")
+					SetHogName(hhs[i],loc("Pyro"))
 					SetHogHat(hhs[i], "Gasmask")
 					SetHealth(hhs[i],150)
 
 			elseif z == 8 then
 
-					SetHogName(hhs[i],"Loon")
+					SetHogName(hhs[i],loc("Loon"))
 					SetHogHat(hhs[i], "clown")
 					SetHealth(hhs[i],100)
 
--- a/share/hedgewars/Data/Scripts/Multiplayer/Tunnels.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Tunnels.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -12,7 +12,7 @@
     end
 
     side = 0
-    for i = 0,GetRandom(15)+25 do
+    for i = 0,1+MapFeatureSize*2 do
         if side > 3 then 
             size = GetRandom(4)+4
         else
--- a/share/hedgewars/Data/Scripts/Multiplayer/WxW.lua	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/WxW.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -158,9 +158,9 @@
 
 function BoolToCfgTxt(p)
 	if p == false then
-		return("Disabled")
+		return loc("Disabled")
 	else
-		return("Enabled")
+		return loc("Enabled")
 	end
 end
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Scripts/SpeedShoppa.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,194 @@
+--[=[
+Speed Shoppa Mission Framework for Hedgewars
+
+This is a simple library intended to make setting up simple training missions a trivial
+task. The library has been created to reduce redundancy in Lua scripts.
+
+The framework generates complete and fully Speed Shoppa missions by just
+one function call.
+
+The missions generated by this script are all the same:
+- The player will get a team with a single hedgehog.
+- The team gets infinite ropes.
+- A fixed set of crates will spawn at predefined positions.
+- The mission ends successfully when all crates have been collected
+- The mission ends unsuccessfully when the time runs out or the hedgehog dies
+- When the mission ends, the time it took to finish the mission is shown
+
+To use this library, you first have to load it and to call SpeedShoppaMission once with
+the appropriate parameters. Really, that’s all!
+See the comment of SpeedShoppaMission for a specification of all parameters.
+
+]=]
+
+HedgewarsScriptLoad("/Scripts/Locale.lua")
+
+--[[
+SpeedShoppaMission(params)
+
+This function sets up the *entire* mission and needs one argument: params.
+The argument “params” is a table containing fields which describe the training mission.
+	mandatory fields:
+	- map:			the name of the map to be used
+	- theme:		the name of the theme (does not need to be a standalone theme)
+	- time:			the time limit in milliseconds
+	- crates:		The coordinates of where the crates will be spawned.
+				It is a table containing tables containing coordinates of format
+				{ x=value, y=value }. Example:
+					crates = {
+						{ x = 324, y = 43 },
+						{ x = 123, y = 56 },
+						{ x = 6, y = 0 },
+					}
+				There must be at least 1 crate.
+
+	optional fields:
+	- missionTitle:		the name of the mission (optional but highly recommended) (default: "Speed Shoppa")
+	- hogHat:		hat of the hedgehog (default: "NoHat")
+	- hogName:		name of the hedgehog (default: "Roper")
+	- teamName:		name of the hedgehog’s team (default: "Shoppers")
+	- teamGrave:		name of the hedgehog’s grave (default: "Statue")
+	- teamFlag:		name of the team’s flag (default: "cm_shoppa")
+	- clanColor:		color of the (only) clan (default: 0xFF0204, which is a red tone)
+	- goalText:		A short string explaining the goal of the mission
+				(default: "Use your rope to collect all crates as fast as possible.")
+	- faceLeft:		If true, the hog faces to the left initially, if false, it faces to the right.
+				(default: false (=right))
+	- crateType		Specify the type of crate (this has no gameplay effect), pick one of
+				"ammo", "utility", "health". Default: "ammo"
+	- extra_onGameStart:	A function which is called at the end of this script's onGameStart. It takes no parameters.
+				You could use this to spawn additional gears like girders or mines.
+	- extra_onGameInit:	A function which is called at the end of this script's onGameInit.
+]]
+
+
+local playerHog
+local gameStarted = false
+local cratesCollected = 0
+local gameEnded = false
+local timeOut = false
+local hogHurt = false
+local endTime
+
+local crates
+
+function SpeedShoppaMission(params)
+	if params.hogHat == nil then params.hogHat = "NoHat" end
+	if params.hogName == nil then params.hogName = loc("Roper") end
+	if params.teamName == nil then params.teamName = loc("Shoppers") end
+	if params.goalText == nil then params.goalText = loc("Use your rope to collect all crates as fast as possible.") end
+	if params.missionTitle == nil then params.missionTitle = loc("Speed Shoppa") end
+	if params.clanColor == nil then params.clanColor = 0xFF0204 end
+	if params.teamGrave == nil then params.teamGrave = "Statue" end
+	if params.teamFlag == nil then params.teamFlag = "cm_shoppa" end
+	if params.extra_onGameInit == nil then params.extra_onGameInit = function() end end
+	if params.extra_onGameStart == nil then params.extra_onGameStart = function() end end
+	if params.faceLeft == nil then params.faceLeft = false end
+
+	crates = params.crates
+	startTime = params.time
+
+	_G.onGameInit = function()
+		GameFlags = gfDisableWind + gfOneClanMode + gfBorder + gfSolidLand
+		TurnTime = startTime
+		CaseFreq = 0 
+		MinesNum = 0 
+		Explosives = 0 
+		Delay = 10 
+		Theme = params.theme
+		Map = params.map
+	
+		AddTeam(params.teamName, params.clanColor, params.teamGrave, "Castle", "Default", params.teamFlag)
+		playerHog = AddHog(params.hogName, 0, 1, params.hogHat)
+		HogTurnLeft(playerHog, params.faceLeft)
+		
+		SetGearPosition(playerHog, params.hog_x, params.hog_y)
+
+		params.extra_onGameInit()
+	end
+
+	_G.onAmmoStoreInit = function()
+		SetAmmo(amRope, 9, 0, 0, 1)
+	end
+
+	_G.onGameStart = function()
+		SendHealthStatsOff()
+		ShowMission(params.missionTitle, loc("Challenge"), params.goalText, -amRope, 5000) 
+		for i=1,#crates do
+			spawnCrate(crates[i].x, crates[i].y)
+		end
+		params.extra_onGameStart()
+	end
+
+	_G.onNewTurn = function()
+		SetWeapon(amRope)
+		gameStarted = true
+	end
+	_G.onGearDelete = function(gear)
+		if GetGearType(gear) == gtCase and not hogHurt and not timeOut then
+			cratesCollected = cratesCollected + 1
+			PlaySound(sndShotgunReload)
+			if cratesCollected == #crates then
+				endTime = TurnTimeLeft
+				finalize()
+			else
+				AddCaption(string.format(loc("%d crate(s) remaining"), #crates - cratesCollected))
+			end
+		elseif gear == playerHog then
+			finalize()
+		end
+	end
+
+	_G.onGearDamage = function(gear)
+		if gear == playerHog then
+			hogHurt = true
+		end
+	end
+
+
+	_G.onGameTick20 = function()
+		if TurnTimeLeft < 40 and TurnTimeLeft > 0 and gameStarted and not timeOut and not gameEnded then
+			timeOut = true
+			AddCaption(loc("Time's up!"))
+			SetHealth(playerHog, 0)
+			hogHurt = true
+		end
+	end
+
+	_G.finalize = function()
+		if not gameEnded then
+			if cratesCollected == #crates then
+				PlaySound(sndVictory, playerHog)
+				SetState(playerHog, bor(GetState(playerHog), gstWinner))
+				SetState(playerHog, band(GetState(playerHog), bnot(gstHHDriven)))
+				AddCaption(loc("Challenge completed!"))
+				SendStat(siGameResult, loc("Challenge completed!"))
+				SendStat(siPointType, loc("milliseconds"))
+				local time = startTime - endTime
+				SendStat(siPlayerKills, tostring(time), params.teamName)
+				SendStat(siCustomAchievement, string.format(loc("You have finished the challenge in %.3f s."), (time/1000)))
+				TurnTimeLeft = 0
+			else
+				SendStat(siGameResult, loc("Challenge failed!"))
+				SendStat(siPointType, loc("crate(s)"))
+				SendStat(siPlayerKills, tostring(cratesCollected), params.teamName)
+				SendStat(siCustomAchievement, string.format(loc("You have collected %d out of %d crate(s)."), cratesCollected, #crates))
+			end
+			gameEnded = true
+			EndGame()
+		end
+	end
+
+	_G.spawnCrate = function(x, y)
+		if params.crateType == "utility" then
+			SpawnFakeUtilityCrate(x, y, false, false)
+		elseif params.crateType == "ammo" then
+			SpawnFakeAmmoCrate(x, y, false, false)
+		elseif params.crateType == "health" then
+			SpawnFakeHealthCrate(x, y, false, false)
+		else
+			SpawnFakeAmmoCrate(x, y, false, false)
+		end
+	end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Scripts/TechMaps.lua	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,3858 @@
+------------------------------------------------
+-- TECH MAPS
+------------------------------------------------
+-- a centralized collection of maps for use by TechRacer and other scripts.
+-- hopefully keeps things a bit cleaner and makes cross-script editing easier.
+
+--------------
+-- TO DO
+--------------
+-- continue to fix/improve old/broken/incompatible maps, and add more maps.
+-- add ufo fuel per map
+
+
+HedgewarsScriptLoad("/Scripts/Tracker.lua")
+
+techX = {}
+techY = {}
+techCount = 1
+
+function AddWayPoint(x,y)
+	techX[techCount] = x
+	techY[techCount] = y
+	techCount = techCount +1
+end
+
+-- this handles interim lazy copypasta from HedgeEditor
+-- while I'm still messing with things
+function LoadSprite(pX, pY, pSprite, pFrame, pTint, p1, p2, p3, pLandFlags)
+	PlaceSprite(pX, pY, pSprite, pFrame, pTint, p1, p2, p3, pLandFlags)
+end
+function PreviewWayPoint(x,y)
+    AddPoint(x,y,20)
+    AddPoint(x,y,19,true)
+    for i = 0,100,50 do
+        AddPoint(x-120,y+i,1,true)
+        AddPoint(x+120,y-i)
+        AddPoint(x-i,y+120,1,true)
+        AddPoint(x+i,y-120)
+    end
+end
+
+function PreviewGirder(x, y, f)
+    if f == 0 then
+        AddPoint(x-40,y,1)
+        AddPoint(x+40,y)
+    elseif f == 1 then
+        AddPoint(x-29,y-29,1)
+        AddPoint(x+29,y+29)
+    elseif f == 2 then
+        AddPoint(x,y-40,1)
+        AddPoint(x,y+40)
+    elseif f == 3 then
+        AddPoint(x-29,y+29,1)
+        AddPoint(x+29,y-29)
+    elseif f == 4 then
+        AddPoint(x-79,y,1)
+        AddPoint(x+79,y)
+    elseif f == 5 then
+        AddPoint(x-54,y-54,1)
+        AddPoint(x+54,y+54)
+    elseif f == 6 then
+        AddPoint(x,y-80,1)
+        AddPoint(x,y+80)
+    elseif f == 7 then
+        AddPoint(x-54,y+54,1)
+        AddPoint(x+54,y-54)
+    end
+end
+
+function PreviewRubber(x, y, f)
+	if f == 0 then
+        AddPoint(x-79,y,1)
+        AddPoint(x+79,y)
+    elseif f == 1 then
+        AddPoint(x-54,y-54,1)
+        AddPoint(x+54,y+54)
+    elseif f == 2 then
+        AddPoint(x,y-80,1)
+        AddPoint(x,y+80)
+    elseif f == 3 then
+        AddPoint(x-54,y+54,1)
+        AddPoint(x+54,y-54)
+    end
+end
+
+function PreviewPlacedGear(x, y)
+	AddPoint(x,y,2)
+end
+
+function onPreviewInit()
+
+	if mapID == nil then
+		mapID = 2 + GetRandom(7)
+	end
+
+	MapGen = mgDrawn
+    TemplateFilter = 0
+
+    for x = 1, 16 do
+        AddPoint(x*100,100,5)
+    end
+
+	if mapID == 1 then
+			--
+	elseif mapID == 2 then
+			PreviewWayPoint(387, 621)
+		PreviewWayPoint(215, 1748)
+		PreviewWayPoint(1617, 1313)
+		PreviewWayPoint(1642, 562)
+		PreviewWayPoint(3318, 1102)
+		PreviewWayPoint(3554, 684)
+		PreviewWayPoint(2142, 1674)
+		PreviewGirder(402, 1863, 0)
+		PreviewGirder(442, 1863, 4)
+		PreviewGirder(2067, 1945, 6)
+		PreviewGirder(1943, 1653, 6)
+		PreviewGirder(1999, 1504, 7)
+		PreviewGirder(2143, 1445, 4)
+		PreviewGirder(2432, 1565, 4)
+		PreviewGirder(2593, 1565, 4)
+		PreviewGirder(2752, 1565, 4)
+		PreviewGirder(2206, 1949, 6)
+		PreviewGirder(2262, 1800, 7)
+		PreviewGirder(2407, 1745, 4)
+		PreviewGirder(2569, 1745, 4)
+		PreviewGirder(2005, 1797, 5)
+		PreviewGirder(2288, 1503, 5)
+		PreviewGirder(2715, 1802, 5)
+		PreviewGirder(2898, 1624, 5)
+		PreviewGirder(3014, 1740, 5)
+		PreviewGirder(2830, 1919, 5)
+		PreviewGirder(3131, 1856, 5)
+		PreviewGirder(3191, 1968, 2)
+		PreviewGirder(3264, 2021, 4)
+		PreviewGirder(2840, 2006, 3)
+		PreviewGirder(396, 665, 1)
+		PreviewGirder(619, 665, 3)
+		PreviewGirder(696, 635, 0)
+		PreviewGirder(319, 637, 0)
+		PreviewGirder(268, 604, 2)
+		PreviewGirder(746, 603, 2)
+		PreviewGirder(325, 495, 7)
+		PreviewGirder(689, 493, 5)
+		PreviewGirder(504, 422, 6)
+		PreviewGirder(595, 422, 4)
+		PreviewGirder(412, 422, 4)
+		PreviewGirder(320, 696, 4)
+		PreviewGirder(249, 786, 6)
+		PreviewGirder(249, 948, 6)
+		PreviewGirder(191, 785, 6)
+		PreviewGirder(191, 946, 6)
+		PreviewGirder(191, 1107, 6)
+		PreviewGirder(249, 1109, 6)
+		PreviewGirder(130, 1251, 7)
+		PreviewGirder(306, 1251, 5)
+		PreviewGirder(72, 1360, 2)
+		PreviewGirder(364, 1360, 2)
+		PreviewGirder(132, 1462, 5)
+		PreviewGirder(304, 1463, 7)
+		PreviewGirder(182, 1616, 6)
+		PreviewGirder(255, 1613, 6)
+		PreviewGirder(217, 1796, 4)
+		PreviewGirder(221, 1381, 0)
+		PreviewGirder(154, 669, 1)
+		PreviewGirder(124, 553, 6)
+		PreviewGirder(326, 467, 3)
+		PreviewGirder(223, 592, 3)
+		PreviewGirder(638, 791, 5)
+		PreviewGirder(752, 907, 5)
+		PreviewGirder(866, 1022, 5)
+		PreviewGirder(1505, 395, 7)
+		PreviewGirder(1445, 544, 6)
+		PreviewGirder(1506, 686, 5)
+		PreviewGirder(1650, 339, 4)
+		PreviewGirder(1797, 397, 5)
+		PreviewGirder(1857, 547, 6)
+		PreviewGirder(1797, 688, 7)
+		PreviewGirder(1652, 754, 4)
+		PreviewGirder(3326, 863, 4)
+		PreviewGirder(3474, 921, 5)
+		PreviewGirder(3180, 921, 7)
+		PreviewGirder(3120, 1071, 6)
+		PreviewGirder(3183, 1214, 5)
+		PreviewGirder(3536, 1071, 6)
+		PreviewGirder(3480, 1214, 7)
+		PreviewGirder(3330, 1279, 4)
+		PreviewGirder(1481, 1133, 7)
+		PreviewGirder(1626, 1078, 4)
+		PreviewGirder(1772, 1135, 5)
+		PreviewGirder(1422, 1280, 6)
+		PreviewGirder(1831, 1286, 6)
+		PreviewGirder(1773, 1429, 7)
+		PreviewGirder(1627, 1492, 4)
+		PreviewGirder(1482, 1427, 5)
+		PreviewGirder(587, 855, 4)
+		PreviewGirder(425, 855, 4)
+		PreviewGirder(302, 822, 1)
+		PreviewGirder(2502, 556, 7)
+		PreviewGirder(2601, 634, 7)
+		PreviewGirder(2616, 441, 7)
+		PreviewGirder(2716, 519, 7)
+		PreviewGirder(3469, 556, 7)
+		PreviewGirder(3696, 763, 7)
+		PreviewGirder(2756, 379, 4)
+		PreviewGirder(2862, 466, 4)
+		PreviewGirder(2918, 379, 4)
+		PreviewGirder(3023, 467, 4)
+		PreviewGirder(3080, 378, 4)
+		PreviewGirder(3616, 503, 4)
+		PreviewGirder(3552, 828, 4)
+		PreviewGirder(3172, 527, 5)
+		PreviewGirder(3232, 428, 5)
+		PreviewGirder(3289, 647, 5)
+		PreviewGirder(3350, 545, 5)
+		PreviewGirder(3406, 764, 5)
+		PreviewGirder(3708, 575, 6)
+		PreviewGirder(3705, 680, 1)
+		PreviewRubber(505, 708, 0)
+		PreviewRubber(175, 451, 0)
+		PreviewRubber(822, 1693, 0)
+		PreviewRubber(982, 1691, 0)
+		PreviewRubber(1142, 1688, 0)
+		PreviewRubber(1302, 1684, 0)
+		PreviewRubber(1450, 1750, 1)
+		PreviewRubber(1566, 1860, 1)
+		PreviewRubber(1680, 1973, 1)
+
+		PreviewPlacedGear(324, 613)
+		PreviewPlacedGear(2361, 1721)
+		PreviewPlacedGear(2430, 1721)
+		PreviewPlacedGear(2510, 1721)
+		PreviewPlacedGear(2581, 1721)
+		PreviewPlacedGear(405, 1839)
+		PreviewPlacedGear(481, 1839)
+		PreviewPlacedGear(696, 611)
+		PreviewPlacedGear(825, 1664)
+		PreviewPlacedGear(919, 1657)
+		PreviewPlacedGear(1015, 1662)
+		PreviewPlacedGear(1095, 1654)
+		PreviewPlacedGear(1166, 1659)
+		PreviewPlacedGear(1250, 1650)
+		PreviewPlacedGear(1335, 1655)
+	elseif mapID == 3 then
+			PreviewWayPoint(3892, 478)
+		PreviewWayPoint(1146, 413)
+		PreviewWayPoint(934, 1459)
+		PreviewWayPoint(2635, 1459)
+		PreviewWayPoint(2656, 523)
+		PreviewWayPoint(1958, 834)
+		PreviewWayPoint(555, 864)
+		PreviewGirder(3703, 157, 7)
+		PreviewGirder(3846, 100, 4)
+		PreviewGirder(3991, 162, 5)
+		PreviewGirder(4049, 311, 6)
+		PreviewGirder(3648, 308, 6)
+		PreviewGirder(3988, 454, 7)
+		PreviewGirder(3843, 515, 4)
+		PreviewGirder(3616, 429, 3)
+		PreviewGirder(3725, 548, 3)
+		PreviewGirder(1155, 95, 6)
+		PreviewGirder(1067, 167, 4)
+		PreviewGirder(906, 167, 4)
+		PreviewGirder(747, 167, 4)
+		PreviewGirder(586, 167, 4)
+		PreviewGirder(426, 167, 4)
+		PreviewGirder(266, 166, 4)
+		PreviewGirder(105, 166, 4)
+
+		PreviewPlacedGear(3801, 491)
+		PreviewPlacedGear(3803, 460)
+		PreviewPlacedGear(3799, 429)
+		PreviewPlacedGear(3846, 491)
+		PreviewPlacedGear(3845, 460)
+		PreviewPlacedGear(3845, 429)
+		PreviewPlacedGear(3684, 595)
+		PreviewPlacedGear(3648, 641)
+		PreviewPlacedGear(3613, 695)
+		PreviewPlacedGear(3575, 733)
+		PreviewPlacedGear(3537, 781)
+		PreviewPlacedGear(3505, 829)
+		PreviewPlacedGear(3476, 881)
+		PreviewPlacedGear(3447, 930)
+		PreviewPlacedGear(3418, 979)
+		PreviewPlacedGear(3388, 1021)
+		PreviewPlacedGear(3356, 1072)
+		PreviewPlacedGear(3561, 469)
+		PreviewPlacedGear(3528, 500)
+		PreviewPlacedGear(3496, 545)
+		PreviewPlacedGear(3467, 584)
+		PreviewPlacedGear(3444, 619)
+		PreviewPlacedGear(3404, 656)
+		PreviewPlacedGear(3373, 693)
+		PreviewPlacedGear(3351, 726)
+		PreviewPlacedGear(3329, 756)
+		PreviewPlacedGear(3306, 798)
+		PreviewPlacedGear(3339, 1115)
+		PreviewPlacedGear(3321, 1163)
+		PreviewPlacedGear(3298, 1206)
+		PreviewPlacedGear(3281, 1250)
+		PreviewPlacedGear(3259, 1302)
+		PreviewPlacedGear(3238, 1343)
+		PreviewPlacedGear(3220, 1397)
+		PreviewPlacedGear(3269, 810)
+		PreviewPlacedGear(3225, 788)
+		PreviewPlacedGear(3188, 762)
+		PreviewPlacedGear(3149, 735)
+		PreviewPlacedGear(3106, 709)
+		PreviewPlacedGear(3064, 682)
+		PreviewPlacedGear(3023, 652)
+		PreviewPlacedGear(2983, 619)
+		PreviewPlacedGear(3135, 980)
+		PreviewPlacedGear(3143, 1029)
+		PreviewPlacedGear(3130, 1077)
+		PreviewPlacedGear(3122, 1127)
+		PreviewPlacedGear(3100, 1174)
+		PreviewPlacedGear(3069, 1226)
+		PreviewPlacedGear(3042, 1287)
+		PreviewPlacedGear(3178, 1440)
+		PreviewPlacedGear(3125, 1480)
+		PreviewPlacedGear(3088, 1521)
+		PreviewPlacedGear(2988, 1326)
+		PreviewPlacedGear(2944, 1357)
+		PreviewPlacedGear(2884, 1356)
+		PreviewPlacedGear(2813, 1356)
+		PreviewPlacedGear(2755, 1356)
+		PreviewPlacedGear(2677, 1347)
+		PreviewPlacedGear(2610, 1356)
+		PreviewPlacedGear(2532, 1354)
+		PreviewPlacedGear(3045, 1553)
+		PreviewPlacedGear(2974, 1588)
+		PreviewPlacedGear(2901, 1584)
+		PreviewPlacedGear(2850, 1569)
+		PreviewPlacedGear(2782, 1570)
+		PreviewPlacedGear(2708, 1577)
+		PreviewPlacedGear(2648, 1579)
+		PreviewPlacedGear(2585, 1576)
+		PreviewPlacedGear(2525, 1581)
+		PreviewPlacedGear(2490, 1338)
+		PreviewPlacedGear(2435, 1306)
+		PreviewPlacedGear(2386, 1283)
+		PreviewPlacedGear(2344, 1242)
+		PreviewPlacedGear(3126, 942)
+		PreviewPlacedGear(3070, 919)
+		PreviewPlacedGear(3005, 897)
+		PreviewPlacedGear(2962, 865)
+		PreviewPlacedGear(2907, 838)
+		PreviewPlacedGear(2858, 803)
+		PreviewPlacedGear(2807, 769)
+		PreviewPlacedGear(2764, 741)
+		PreviewPlacedGear(2714, 703)
+		PreviewPlacedGear(2665, 671)
+		PreviewPlacedGear(2613, 629)
+		PreviewPlacedGear(2557, 591)
+		PreviewPlacedGear(2513, 545)
+		PreviewPlacedGear(2450, 537)
+		PreviewPlacedGear(2390, 569)
+		PreviewPlacedGear(2341, 603)
+		PreviewPlacedGear(2299, 649)
+		PreviewPlacedGear(2255, 684)
+		PreviewPlacedGear(2218, 714)
+		PreviewPlacedGear(2173, 756)
+		PreviewPlacedGear(2125, 801)
+		PreviewPlacedGear(2084, 864)
+		PreviewPlacedGear(2113, 933)
+		PreviewPlacedGear(2154, 974)
+		PreviewPlacedGear(2191, 1016)
+		PreviewPlacedGear(2223, 1061)
+		PreviewPlacedGear(2257, 1113)
+		PreviewPlacedGear(2283, 1153)
+		PreviewPlacedGear(2316, 1202)
+		PreviewPlacedGear(2479, 1553)
+		PreviewPlacedGear(2422, 1513)
+		PreviewPlacedGear(2363, 1477)
+		PreviewPlacedGear(2302, 1446)
+		PreviewPlacedGear(2243, 1388)
+		PreviewPlacedGear(2188, 1335)
+		PreviewPlacedGear(2136, 1273)
+		PreviewPlacedGear(2086, 1204)
+		PreviewPlacedGear(2033, 1132)
+		PreviewPlacedGear(1992, 1085)
+		PreviewPlacedGear(1967, 1022)
+		PreviewPlacedGear(2943, 560)
+		PreviewPlacedGear(2890, 511)
+		PreviewPlacedGear(2834, 477)
+		PreviewPlacedGear(2774, 451)
+		PreviewPlacedGear(2710, 428)
+		PreviewPlacedGear(2652, 410)
+		PreviewPlacedGear(2578, 375)
+		PreviewPlacedGear(2482, 342)
+		PreviewPlacedGear(2380, 335)
+		PreviewPlacedGear(2302, 359)
+		PreviewPlacedGear(2256, 409)
+		PreviewPlacedGear(2183, 469)
+		PreviewPlacedGear(2111, 513)
+		PreviewPlacedGear(2049, 558)
+		PreviewPlacedGear(1986, 586)
+		PreviewPlacedGear(1742, 412)
+		PreviewPlacedGear(1684, 376)
+		PreviewPlacedGear(1627, 344)
+		PreviewPlacedGear(1566, 325)
+		PreviewPlacedGear(1505, 298)
+		PreviewPlacedGear(1727, 695)
+		PreviewPlacedGear(1917, 1067)
+		PreviewPlacedGear(1874, 1122)
+		PreviewPlacedGear(1923, 557)
+		PreviewPlacedGear(1863, 501)
+		PreviewPlacedGear(1796, 447)
+		PreviewPlacedGear(1829, 1158)
+		PreviewPlacedGear(1778, 1201)
+		PreviewPlacedGear(1732, 1244)
+		PreviewPlacedGear(1700, 1290)
+		PreviewPlacedGear(1652, 1333)
+		PreviewPlacedGear(1599, 1380)
+		PreviewPlacedGear(1550, 1425)
+		PreviewPlacedGear(1493, 1483)
+		PreviewPlacedGear(1443, 1519)
+		PreviewPlacedGear(1381, 1557)
+		PreviewPlacedGear(1304, 1590)
+		PreviewPlacedGear(1237, 1613)
+		PreviewPlacedGear(1176, 1621)
+		PreviewPlacedGear(1104, 1626)
+		PreviewPlacedGear(1032, 1630)
+		PreviewPlacedGear(964, 1628)
+		PreviewPlacedGear(886, 1615)
+		PreviewPlacedGear(813, 1584)
+		PreviewPlacedGear(750, 1524)
+		PreviewPlacedGear(697, 1473)
+		PreviewPlacedGear(645, 1410)
+		PreviewPlacedGear(602, 1351)
+		PreviewPlacedGear(557, 1284)
+		PreviewPlacedGear(506, 1230)
+		PreviewPlacedGear(467, 1144)
+		PreviewPlacedGear(449, 1066)
+		PreviewPlacedGear(421, 980)
+		PreviewPlacedGear(425, 876)
+		PreviewPlacedGear(422, 789)
+		PreviewPlacedGear(434, 699)
+		PreviewPlacedGear(439, 625)
+		PreviewPlacedGear(481, 551)
+		PreviewPlacedGear(537, 494)
+		PreviewPlacedGear(586, 444)
+		PreviewPlacedGear(633, 393)
+		PreviewPlacedGear(674, 360)
+		PreviewPlacedGear(745, 332)
+		PreviewPlacedGear(1786, 816)
+		PreviewPlacedGear(1768, 744)
+		PreviewPlacedGear(1765, 875)
+		PreviewPlacedGear(1711, 936)
+		PreviewPlacedGear(1629, 1016)
+		PreviewPlacedGear(1579, 1072)
+		PreviewPlacedGear(1520, 1123)
+		PreviewPlacedGear(1462, 1185)
+		PreviewPlacedGear(1415, 1238)
+		PreviewPlacedGear(1361, 1288)
+		PreviewPlacedGear(1298, 1318)
+		PreviewPlacedGear(1230, 1345)
+		PreviewPlacedGear(1161, 1357)
+		PreviewPlacedGear(1097, 1367)
+		PreviewPlacedGear(1033, 1373)
+		PreviewPlacedGear(971, 1333)
+		PreviewPlacedGear(900, 1291)
+		PreviewPlacedGear(840, 1225)
+		PreviewPlacedGear(795, 1156)
+		PreviewPlacedGear(744, 1076)
+		PreviewPlacedGear(706, 995)
+		PreviewPlacedGear(674, 927)
+		PreviewPlacedGear(687, 859)
+		PreviewPlacedGear(719, 781)
+		PreviewPlacedGear(742, 720)
+		PreviewPlacedGear(801, 297)
+		PreviewPlacedGear(880, 280)
+		PreviewPlacedGear(954, 275)
+		PreviewPlacedGear(1020, 268)
+		PreviewPlacedGear(1093, 265)
+		PreviewPlacedGear(1174, 258)
+		PreviewPlacedGear(1270, 257)
+		PreviewPlacedGear(1338, 262)
+		PreviewPlacedGear(1433, 260)
+		PreviewPlacedGear(779, 657)
+		PreviewPlacedGear(824, 624)
+		PreviewPlacedGear(879, 592)
+		PreviewPlacedGear(928, 564)
+		PreviewPlacedGear(995, 544)
+		PreviewPlacedGear(1055, 541)
+		PreviewPlacedGear(1121, 540)
+		PreviewPlacedGear(1184, 534)
+		PreviewPlacedGear(1252, 536)
+		PreviewPlacedGear(1317, 542)
+		PreviewPlacedGear(1380, 553)
+		PreviewPlacedGear(1448, 567)
+		PreviewPlacedGear(1521, 582)
+		PreviewPlacedGear(1580, 600)
+		PreviewPlacedGear(1633, 626)
+		PreviewPlacedGear(1683, 651)
+	elseif mapID == 4 then
+			PreviewWayPoint(337, 533)
+		PreviewWayPoint(1069, 1367)
+		PreviewWayPoint(884, 729)
+		PreviewWayPoint(1682, 464)
+		PreviewWayPoint(2773, 505)
+		PreviewWayPoint(3512, 929)
+		PreviewWayPoint(4002, 106)
+		PreviewWayPoint(3964, 1520)
+		PreviewWayPoint(2592, 1334)
+		PreviewGirder(194, 388, 7)
+		PreviewGirder(338, 334, 4)
+		PreviewGirder(484, 390, 5)
+		PreviewGirder(139, 543, 6)
+		PreviewGirder(544, 540, 6)
+		PreviewGirder(201, 687, 5)
+		PreviewGirder(485, 684, 7)
+		PreviewGirder(259, 839, 6)
+		PreviewGirder(426, 837, 6)
+		PreviewGirder(259, 999, 6)
+		PreviewGirder(426, 998, 6)
+		PreviewGirder(259, 1159, 6)
+		PreviewGirder(426, 1158, 6)
+		PreviewGirder(259, 1318, 6)
+		PreviewGirder(426, 1318, 6)
+		PreviewGirder(426, 1478, 6)
+		PreviewGirder(259, 1478, 6)
+		PreviewGirder(515, 1477, 4)
+		PreviewGirder(659, 1537, 5)
+		PreviewGirder(774, 1652, 5)
+		PreviewGirder(836, 1799, 6)
+		PreviewGirder(907, 1890, 4)
+		PreviewGirder(1067, 1890, 4)
+		PreviewGirder(1212, 1823, 7)
+		PreviewGirder(1359, 1764, 4)
+		PreviewGirder(1504, 1822, 5)
+		PreviewGirder(1647, 1886, 4)
+		PreviewGirder(1807, 1886, 4)
+		PreviewGirder(1362, 1869, 4)
+		PreviewGirder(1968, 1885, 4)
+		PreviewGirder(2111, 1823, 7)
+		PreviewGirder(2257, 1769, 4)
+		PreviewGirder(2403, 1825, 5)
+		PreviewGirder(2549, 1887, 4)
+		PreviewGirder(2709, 1887, 4)
+		PreviewGirder(2868, 1887, 4)
+		PreviewGirder(2958, 1854, 2)
+		PreviewGirder(2928, 1773, 1)
+		PreviewGirder(2898, 1692, 2)
+		PreviewGirder(2928, 1613, 3)
+		PreviewGirder(3045, 1584, 4)
+		PreviewGirder(3162, 1619, 1)
+		PreviewGirder(3192, 1697, 2)
+		PreviewGirder(3160, 1777, 3)
+		PreviewGirder(3128, 1857, 2)
+		PreviewGirder(3218, 1886, 4)
+		PreviewGirder(3379, 1885, 4)
+		PreviewGirder(3524, 1818, 7)
+		PreviewGirder(3641, 1702, 7)
+		PreviewGirder(3756, 1585, 7)
+		PreviewGirder(4021, 1316, 7)
+		PreviewGirder(3842, 1503, 3)
+		PreviewGirder(3899, 1409, 7)
+		PreviewGirder(3694, 1974, 7)
+		PreviewGirder(3809, 1858, 7)
+		PreviewGirder(3925, 1741, 7)
+		PreviewGirder(4022, 1613, 7)
+		PreviewGirder(2256, 1877, 4)
+		PreviewGirder(3046, 1728, 0)
+		PreviewGirder(501, 1777, 6)
+		PreviewGirder(572, 1868, 4)
+		PreviewGirder(3372, 771, 7)
+		PreviewGirder(3517, 715, 4)
+		PreviewGirder(3663, 774, 5)
+		PreviewGirder(3313, 923, 6)
+		PreviewGirder(3373, 1066, 5)
+		PreviewGirder(3518, 1128, 4)
+		PreviewGirder(3662, 1065, 7)
+		PreviewGirder(3723, 924, 6)
+		PreviewGirder(2474, 1373, 6)
+		PreviewGirder(2474, 1252, 2)
+		PreviewGirder(2507, 1200, 0)
+		PreviewGirder(2626, 1200, 4)
+		PreviewGirder(2716, 1270, 6)
+		PreviewGirder(2505, 1464, 0)
+		PreviewGirder(2625, 1464, 4)
+		PreviewGirder(2716, 1391, 6)
+		PreviewGirder(1544, 300, 7)
+		PreviewGirder(1691, 245, 4)
+		PreviewGirder(1838, 304, 5)
+		PreviewGirder(1487, 453, 6)
+		PreviewGirder(1548, 597, 5)
+		PreviewGirder(1692, 657, 4)
+		PreviewGirder(1835, 593, 7)
+		PreviewGirder(1900, 451, 6)
+		PreviewGirder(3527, 93, 6)
+		PreviewGirder(3586, 238, 5)
+		PreviewGirder(3703, 354, 5)
+		PreviewGirder(3820, 471, 5)
+		PreviewGirder(3938, 588, 5)
+		PreviewGirder(4044, 651, 0)
+		PreviewGirder(3618, 22, 4)
+		PreviewGirder(3779, 22, 4)
+		PreviewGirder(3939, 22, 4)
+		PreviewGirder(4047, 22, 0)
+		PreviewGirder(936, 1198, 7)
+		PreviewGirder(1080, 1143, 4)
+		PreviewGirder(1225, 1202, 5)
+		PreviewGirder(1278, 1352, 6)
+		PreviewGirder(881, 1351, 6)
+		PreviewGirder(943, 1496, 5)
+		PreviewGirder(1219, 1495, 7)
+		PreviewGirder(1160, 1645, 6)
+		PreviewGirder(998, 1649, 6)
+		PreviewGirder(1160, 1766, 2)
+		PreviewGirder(998, 1770, 2)
+		PreviewGirder(1077, 1824, 4)
+		PreviewGirder(1824, 1138, 6)
+		PreviewGirder(834, 606, 7)
+		PreviewGirder(950, 593, 5)
+		PreviewGirder(1035, 683, 1)
+		PreviewGirder(748, 696, 3)
+		PreviewGirder(764, 780, 5)
+		PreviewGirder(850, 870, 1)
+		PreviewGirder(937, 850, 7)
+		PreviewGirder(1018, 768, 7)
+		PreviewGirder(2589, 444, 7)
+		PreviewGirder(2704, 329, 7)
+		PreviewGirder(2604, 560, 5)
+		PreviewGirder(2719, 675, 5)
+		PreviewGirder(2832, 689, 7)
+		PreviewGirder(2947, 573, 7)
+		PreviewGirder(2820, 317, 5)
+		PreviewGirder(2936, 433, 5)
+		PreviewGirder(2987, 489, 1)
+		PreviewGirder(338, 559, 4)
+
+		PreviewPlacedGear(548, 1844)
+		PreviewPlacedGear(595, 1844)
+		PreviewPlacedGear(642, 1844)
+		PreviewPlacedGear(1314, 1845)
+		PreviewPlacedGear(1362, 1845)
+		PreviewPlacedGear(1419, 1845)
+		PreviewPlacedGear(2208, 1853)
+		PreviewPlacedGear(2264, 1853)
+		PreviewPlacedGear(2318, 1853)
+		PreviewPlacedGear(3027, 1704)
+		PreviewPlacedGear(3072, 1704)
+		PreviewPlacedGear(1822, 1042)
+		PreviewPlacedGear(313, 535)
+		PreviewPlacedGear(365, 535)
+		PreviewPlacedGear(313, 504)
+		PreviewPlacedGear(339, 478)
+		PreviewPlacedGear(365, 504)
+		PreviewPlacedGear(3517, 995)
+		PreviewPlacedGear(3448, 858)
+		PreviewPlacedGear(3582, 848)
+		PreviewPlacedGear(3758, 158)
+		PreviewPlacedGear(3964, 297)
+		PreviewPlacedGear(2772, 506)
+		PreviewPlacedGear(2602, 1339)
+		PreviewPlacedGear(1638, 370)
+		PreviewPlacedGear(1743, 522)
+		PreviewPlacedGear(894, 726)
+		PreviewPlacedGear(1080, 1690)
+	elseif mapID == 5 then
+			PreviewWayPoint(3761, 428)
+		PreviewWayPoint(750, 1801)
+		PreviewWayPoint(511, 1232)
+		PreviewWayPoint(1579, 297)
+		PreviewWayPoint(2007, 1618)
+		PreviewWayPoint(3642, 1601)
+		PreviewRubber(3776, 447, 3)
+		PreviewRubber(3629, 503, 0)
+		PreviewRubber(3486, 446, 1)
+		PreviewRubber(3234, 889, 1)
+		PreviewRubber(3084, 838, 0)
+		PreviewRubber(2943, 909, 3)
+		PreviewRubber(2665, 507, 3)
+		PreviewRubber(2520, 557, 0)
+		PreviewRubber(2377, 496, 1)
+		PreviewRubber(2507, 1263, 1)
+		PreviewRubber(2355, 1212, 0)
+		PreviewRubber(2206, 1269, 3)
+		PreviewRubber(1902, 1270, 1)
+		PreviewRubber(1749, 1221, 0)
+		PreviewRubber(1607, 1288, 3)
+		PreviewRubber(1781, 1659, 1)
+		PreviewRubber(1927, 1706, 0)
+		PreviewRubber(2089, 1702, 0)
+		PreviewRubber(2234, 1649, 3)
+		PreviewRubber(3413, 1631, 1)
+		PreviewRubber(3558, 1676, 0)
+		PreviewRubber(3718, 1673, 0)
+		PreviewRubber(3866, 1616, 3)
+		PreviewRubber(807, 803, 2)
+		PreviewRubber(806, 1131, 2)
+		PreviewRubber(732, 1273, 3)
+		PreviewRubber(583, 1324, 0)
+		PreviewRubber(420, 1324, 0)
+		PreviewRubber(272, 1274, 1)
+		PreviewRubber(222, 1121, 2)
+		PreviewRubber(221, 956, 2)
+		PreviewRubber(221, 792, 2)
+		PreviewRubber(271, 644, 3)
+		PreviewRubber(420, 589, 0)
+		PreviewRubber(584, 588, 0)
+		PreviewRubber(730, 658, 1)
+		PreviewRubber(612, 1846, 1)
+		PreviewRubber(758, 1896, 0)
+		PreviewRubber(903, 1835, 3)
+		PreviewRubber(1051, 1781, 0)
+		PreviewRubber(1210, 1780, 0)
+		PreviewRubber(1356, 1845, 1)
+		PreviewRubber(1501, 1891, 0)
+		PreviewRubber(1438, 431, 3)
+		PreviewRubber(1589, 378, 0)
+		PreviewRubber(1736, 448, 1)
+
+		PreviewPlacedGear(397, 1295)
+		PreviewPlacedGear(461, 1295)
+		PreviewPlacedGear(555, 1295)
+		PreviewPlacedGear(621, 1295)
+		PreviewPlacedGear(759, 1867)
+		PreviewPlacedGear(1504, 1862)
+		PreviewPlacedGear(2521, 528)
+		PreviewPlacedGear(3639, 474)
+		PreviewPlacedGear(3078, 809)
+		PreviewPlacedGear(1752, 1192)
+		PreviewPlacedGear(2349, 1183)
+		PreviewPlacedGear(1582, 349)
+		PreviewPlacedGear(3560, 1647)
+		PreviewPlacedGear(3711, 1644)
+		PreviewPlacedGear(433, 560)
+		PreviewPlacedGear(568, 559)
+		PreviewPlacedGear(1935, 1677)
+		PreviewPlacedGear(2084, 1673)
+		PreviewPlacedGear(1018, 1752)
+		PreviewPlacedGear(1086, 1752)
+		PreviewPlacedGear(1176, 1751)
+		PreviewPlacedGear(1238, 1751)
+		PreviewPlacedGear(2009, 1668)
+		PreviewPlacedGear(3641, 1639)
+		PreviewPlacedGear(3580, 469)
+		PreviewPlacedGear(3700, 467)
+		PreviewPlacedGear(2458, 523)
+		PreviewPlacedGear(2595, 521)
+	elseif mapID == 6 then
+		PreviewWayPoint(438, 278)
+		PreviewWayPoint(1870, 1354)
+		PreviewWayPoint(892, 1119)
+		PreviewGirder(419, 298, 4)
+		PreviewGirder(348, 387, 6)
+		PreviewGirder(521, 359, 0)
+		PreviewGirder(459, 385, 3)
+		PreviewGirder(570, 387, 6)
+		PreviewGirder(601, 298, 0)
+		PreviewGirder(348, 547, 6)
+		PreviewGirder(570, 547, 6)
+		PreviewGirder(348, 707, 6)
+		PreviewGirder(570, 707, 6)
+		PreviewGirder(397, 466, 0)
+		PreviewGirder(458, 491, 1)
+		PreviewGirder(521, 592, 0)
+		PreviewGirder(458, 620, 3)
+		PreviewGirder(397, 713, 0)
+		PreviewGirder(459, 740, 1)
+		PreviewGirder(348, 867, 6)
+		PreviewGirder(570, 866, 6)
+		PreviewGirder(641, 1038, 4)
+		PreviewGirder(800, 1038, 4)
+		PreviewGirder(959, 1038, 4)
+		PreviewGirder(482, 1038, 4)
+		PreviewGirder(323, 1038, 4)
+		PreviewGirder(163, 1038, 4)
+		PreviewGirder(48, 1038, 0)
+		PreviewGirder(813, 1126, 6)
+		PreviewGirder(989, 1127, 6)
+		PreviewGirder(989, 1288, 6)
+		PreviewGirder(989, 1449, 6)
+		PreviewGirder(813, 1287, 6)
+		PreviewGirder(813, 1448, 6)
+		PreviewGirder(900, 1214, 4)
+		PreviewGirder(989, 1570, 2)
+		PreviewGirder(813, 1569, 2)
+		PreviewGirder(813, 1690, 6)
+		PreviewGirder(521, 844, 0)
+		PreviewGirder(457, 870, 3)
+		PreviewGirder(392, 941, 1)
+		PreviewGirder(813, 1851, 6)
+		PreviewGirder(813, 1972, 2)
+		PreviewGirder(989, 1690, 6)
+		PreviewGirder(1044, 1817, 5)
+		PreviewGirder(901, 1979, 4)
+		PreviewGirder(1002, 2005, 1)
+		PreviewGirder(1176, 1873, 4)
+		PreviewGirder(1333, 1873, 4)
+		PreviewGirder(1491, 1873, 4)
+		PreviewGirder(1625, 1815, 7)
+		PreviewGirder(1680, 1688, 6)
+		PreviewGirder(1669, 1980, 7)
+		PreviewGirder(1762, 1929, 0)
+		PreviewGirder(1811, 1853, 6)
+		PreviewGirder(1811, 1692, 6)
+		PreviewGirder(1708, 1735, 3)
+		PreviewGirder(1776, 1734, 1)
+		PreviewGirder(1680, 1527, 6)
+		PreviewGirder(1811, 1532, 6)
+		PreviewGirder(1608, 1437, 4)
+		PreviewGirder(1883, 1443, 4)
+		PreviewGirder(1955, 1354, 6)
+		PreviewGirder(1883, 1264, 4)
+		PreviewGirder(1723, 1264, 4)
+		PreviewGirder(1562, 1264, 4)
+		PreviewGirder(1519, 1354, 6)
+		PreviewRubber(210, 958, 1)
+		PreviewRubber(98, 844, 1)
+
+		PreviewPlacedGear(1740, 1905)
+		PreviewPlacedGear(1780, 1905)
+		PreviewPlacedGear(1782, 1874)
+		PreviewPlacedGear(1782, 1843)
+		PreviewPlacedGear(368, 274)
+		PreviewPlacedGear(526, 568)
+		PreviewPlacedGear(474, 1014)
+		PreviewPlacedGear(906, 1955)
+		PreviewPlacedGear(837, 1570)
+		PreviewPlacedGear(835, 1361)
+		PreviewPlacedGear(836, 1425)
+		PreviewPlacedGear(833, 1495)
+		PreviewPlacedGear(967, 1566)
+		PreviewPlacedGear(970, 1354)
+		PreviewPlacedGear(967, 1422)
+		PreviewPlacedGear(968, 1493)
+	elseif mapID == 7 then
+			PreviewWayPoint(3820, 342)
+		PreviewWayPoint(3343, 1612)
+		PreviewWayPoint(272, 351)
+		PreviewWayPoint(159, 1774)
+		PreviewWayPoint(2248, 1573)
+		PreviewWayPoint(1379, 1192)
+		PreviewGirder(3699, 436, 0)
+		PreviewGirder(934, 806, 6)
+		PreviewGirder(934, 969, 6)
+		PreviewGirder(1233, 1342, 5)
+		PreviewGirder(1377, 1403, 4)
+		PreviewGirder(1497, 1376, 3)
+		PreviewGirder(2816, 1284, 7)
+		PreviewGirder(2698, 1401, 7)
+		PreviewGirder(2640, 1552, 6)
+		PreviewGirder(2640, 1718, 6)
+		PreviewGirder(2641, 1881, 6)
+		PreviewGirder(2643, 2007, 2)
+		PreviewGirder(3823, 363, 0)
+		PreviewGirder(233, 596, 6)
+		PreviewGirder(288, 446, 7)
+		PreviewGirder(79, 642, 6)
+		PreviewGirder(80, 479, 6)
+		PreviewGirder(140, 335, 7)
+		PreviewGirder(281, 268, 4)
+		PreviewGirder(343, 334, 2)
+		PreviewGirder(57, 747, 3)
+		PreviewGirder(32, 852, 6)
+		PreviewGirder(33, 1015, 6)
+		PreviewGirder(33, 1179, 6)
+		PreviewGirder(34, 1342, 6)
+		PreviewGirder(1346, 1939, 6)
+		PreviewGirder(1347, 1774, 6)
+		PreviewGirder(1294, 1636, 5)
+		PreviewGirder(1180, 1522, 5)
+		PreviewGirder(1067, 1410, 5)
+		PreviewGirder(931, 1357, 4)
+		PreviewGirder(772, 1358, 4)
+		PreviewGirder(96, 1303, 5)
+		PreviewGirder(236, 1362, 4)
+		PreviewGirder(396, 1363, 4)
+		PreviewGirder(520, 1364, 0)
+		PreviewGirder(696, 1450, 6)
+		PreviewGirder(556, 1454, 6)
+		PreviewGirder(489, 1598, 7)
+		PreviewGirder(697, 1574, 2)
+		PreviewGirder(639, 1681, 7)
+		PreviewGirder(520, 1798, 7)
+		PreviewGirder(369, 1715, 7)
+		PreviewGirder(243, 1716, 5)
+		PreviewGirder(128, 1735, 7)
+		PreviewGirder(133, 1870, 5)
+		PreviewGirder(251, 1987, 5)
+		PreviewGirder(402, 1915, 7)
+		PreviewGirder(276, 1938, 4)
+		PreviewGirder(95, 140, 4)
+		PreviewGirder(257, 140, 4)
+		PreviewGirder(419, 140, 4)
+		PreviewGirder(581, 140, 4)
+		PreviewGirder(742, 140, 4)
+		PreviewGirder(903, 140, 4)
+		PreviewGirder(1064, 141, 4)
+		PreviewGirder(1157, 90, 6)
+		PreviewRubber(3433, 237, 3)
+		PreviewRubber(3581, 185, 0)
+		PreviewRubber(3741, 182, 0)
+		PreviewRubber(3879, 257, 1)
+		PreviewRubber(3921, 411, 2)
+		PreviewRubber(3844, 555, 3)
+		PreviewRubber(3692, 615, 0)
+		PreviewRubber(3529, 618, 0)
+		PreviewRubber(3381, 555, 1)
+		PreviewRubber(3282, 289, 0)
+		PreviewRubber(3223, 514, 0)
+		PreviewRubber(3111, 289, 0)
+		PreviewRubber(3058, 516, 0)
+		PreviewRubber(2947, 287, 0)
+		PreviewRubber(2889, 515, 0)
+		PreviewRubber(2785, 288, 0)
+		PreviewRubber(2788, 578, 2)
+		PreviewRubber(2790, 741, 2)
+		PreviewRubber(2862, 884, 1)
+		PreviewRubber(2749, 1073, 1)
+		PreviewRubber(2865, 1186, 1)
+		PreviewRubber(2979, 990, 1)
+		PreviewRubber(3123, 1036, 0)
+		PreviewRubber(3188, 934, 2)
+		PreviewRubber(3010, 1234, 0)
+		PreviewRubber(3175, 1230, 0)
+		PreviewRubber(3339, 1226, 0)
+		PreviewRubber(3345, 949, 2)
+		PreviewRubber(3405, 804, 3)
+		PreviewRubber(3531, 702, 3)
+		PreviewRubber(3444, 1007, 0)
+		PreviewRubber(3499, 1221, 0)
+		PreviewRubber(3604, 1002, 0)
+		PreviewRubber(3755, 1038, 1)
+		PreviewRubber(3802, 1186, 2)
+		PreviewRubber(3741, 1342, 3)
+		PreviewRubber(3626, 1456, 3)
+		PreviewRubber(3510, 1314, 3)
+		PreviewRubber(3392, 1435, 3)
+		PreviewRubber(3506, 1577, 3)
+		PreviewRubber(2637, 348, 3)
+		PreviewRubber(2583, 496, 2)
+		PreviewRubber(2633, 952, 1)
+		PreviewRubber(2573, 803, 2)
+		PreviewRubber(2474, 556, 0)
+		PreviewRubber(2468, 742, 0)
+		PreviewRubber(2335, 476, 1)
+		PreviewRubber(2214, 358, 1)
+		PreviewRubber(2322, 812, 3)
+		PreviewRubber(2202, 936, 3)
+		PreviewRubber(2060, 305, 0)
+		PreviewRubber(1898, 304, 0)
+		PreviewRubber(1736, 304, 0)
+		PreviewRubber(2085, 1049, 3)
+		PreviewRubber(1966, 1161, 3)
+		PreviewRubber(1818, 1209, 0)
+		PreviewRubber(1657, 1212, 0)
+		PreviewRubber(1947, 685, 3)
+		PreviewRubber(1801, 735, 0)
+		PreviewRubber(1659, 677, 1)
+		PreviewRubber(1491, 902, 3)
+		PreviewRubber(1346, 955, 0)
+		PreviewRubber(1210, 881, 1)
+		PreviewRubber(1576, 305, 0)
+		PreviewRubber(1414, 304, 0)
+		PreviewRubber(1253, 302, 0)
+		PreviewRubber(1108, 374, 3)
+		PreviewRubber(991, 491, 3)
+		PreviewRubber(1557, 1273, 2)
+		PreviewRubber(938, 639, 2)
+		PreviewRubber(999, 1117, 1)
+		PreviewRubber(847, 1079, 0)
+		PreviewRubber(831, 702, 0)
+		PreviewRubber(667, 702, 0)
+		PreviewRubber(687, 1084, 0)
+		PreviewRubber(1115, 1230, 1)
+		PreviewRubber(566, 764, 2)
+		PreviewRubber(525, 1083, 0)
+		PreviewRubber(422, 1024, 2)
+		PreviewRubber(464, 703, 0)
+		PreviewRubber(302, 704, 0)
+		PreviewRubber(297, 795, 2)
+		PreviewRubber(316, 1089, 0)
+		PreviewRubber(1559, 1436, 2)
+		PreviewRubber(1560, 1598, 2)
+		PreviewRubber(1560, 1759, 2)
+		PreviewRubber(1561, 1920, 2)
+		PreviewRubber(1620, 2022, 0)
+		PreviewRubber(3388, 1688, 3)
+		PreviewRubber(3276, 1546, 3)
+
+		PreviewPlacedGear(1757, 706)
+		PreviewPlacedGear(1838, 706)
+		PreviewPlacedGear(1319, 926)
+		PreviewPlacedGear(1389, 926)
+		PreviewPlacedGear(3184, 839)
+		PreviewPlacedGear(3185, 808)
+		PreviewPlacedGear(3677, 412)
+		PreviewPlacedGear(3079, 1007)
+		PreviewPlacedGear(3138, 1007)
+		PreviewPlacedGear(420, 929)
+		PreviewPlacedGear(3195, 1621)
+		PreviewPlacedGear(3155, 1655)
+		PreviewPlacedGear(3112, 1691)
+		PreviewPlacedGear(3078, 1730)
+		PreviewPlacedGear(3044, 1764)
+		PreviewPlacedGear(3011, 1805)
+		PreviewPlacedGear(2998, 1843)
+		PreviewPlacedGear(2986, 1886)
+		PreviewPlacedGear(2978, 1937)
+		PreviewPlacedGear(733, 1753)
+		PreviewPlacedGear(3345, 1773)
+		PreviewPlacedGear(3332, 1806)
+		PreviewPlacedGear(3317, 1840)
+		PreviewPlacedGear(3302, 1873)
+		PreviewPlacedGear(3262, 1902)
+		PreviewPlacedGear(3237, 1937)
+		PreviewPlacedGear(3225, 1978)
+		PreviewPlacedGear(1272, 1839)
+		PreviewPlacedGear(863, 1776)
+		PreviewPlacedGear(712, 1902)
+		PreviewPlacedGear(2361, 1922)
+		PreviewPlacedGear(2360, 1877)
+		PreviewPlacedGear(2362, 1825)
+		PreviewPlacedGear(2364, 1772)
+		PreviewPlacedGear(2364, 1723)
+		PreviewPlacedGear(2362, 1670)
+		PreviewPlacedGear(2395, 1645)
+		PreviewPlacedGear(2426, 1600)
+		PreviewPlacedGear(2434, 1543)
+		PreviewPlacedGear(2435, 1480)
+		PreviewPlacedGear(2406, 1431)
+		PreviewPlacedGear(2362, 1392)
+		PreviewPlacedGear(2313, 1368)
+		PreviewPlacedGear(2249, 1359)
+		PreviewPlacedGear(2202, 1386)
+		PreviewPlacedGear(2151, 1434)
+		PreviewPlacedGear(1039, 1861)
+		PreviewPlacedGear(2154, 1946)
+		PreviewPlacedGear(2156, 1902)
+		PreviewPlacedGear(2155, 1840)
+		PreviewPlacedGear(2152, 1777)
+		PreviewPlacedGear(2161, 1724)
+		PreviewPlacedGear(2128, 1681)
+		PreviewPlacedGear(2094, 1442)
+		PreviewPlacedGear(2036, 1448)
+		PreviewPlacedGear(1976, 1450)
+		PreviewPlacedGear(1924, 1454)
+		PreviewPlacedGear(2082, 1685)
+		PreviewPlacedGear(2046, 1692)
+		PreviewPlacedGear(1999, 1696)
+		PreviewPlacedGear(1961, 1701)
+		PreviewPlacedGear(1939, 1737)
+		PreviewPlacedGear(1925, 1783)
+		PreviewPlacedGear(1916, 1821)
+		PreviewPlacedGear(1904, 1864)
+		PreviewPlacedGear(1888, 1913)
+		PreviewPlacedGear(1870, 1961)
+		PreviewPlacedGear(1100, 1660)
+		PreviewPlacedGear(1876, 1486)
+		PreviewPlacedGear(1826, 1533)
+		PreviewPlacedGear(1799, 1580)
+		PreviewPlacedGear(1784, 1637)
+		PreviewPlacedGear(1765, 1681)
+		PreviewPlacedGear(1755, 1718)
+		PreviewPlacedGear(1726, 1779)
+		PreviewPlacedGear(1718, 1836)
+		PreviewPlacedGear(1705, 1885)
+		PreviewPlacedGear(1696, 1934)
+		PreviewPlacedGear(1685, 1975)
+		PreviewPlacedGear(859, 1569)
+
+	else
+
+		PreviewWayPoint(383, 1595)
+		PreviewWayPoint(605, 1157)
+		PreviewWayPoint(2296, 517)
+		PreviewWayPoint(2841, 497)
+		PreviewWayPoint(3209, 1286)
+		PreviewWayPoint(3708, 1945)
+		PreviewWayPoint(4075, 1887)
+		PreviewGirder(430, 1871, 2)
+		PreviewGirder(1249, 1914, 4)
+		PreviewGirder(1394, 1849, 7)
+		PreviewGirder(1522, 1848, 5)
+		PreviewGirder(1578, 1959, 2)
+		PreviewGirder(1545, 2011, 0)
+		PreviewGirder(430, 1749, 6)
+		PreviewGirder(430, 1589, 6)
+		PreviewGirder(358, 1499, 4)
+		PreviewGirder(198, 1499, 4)
+		PreviewGirder(72, 1571, 7)
+		PreviewGirder(339, 1618, 4)
+		PreviewGirder(520, 1499, 4)
+		PreviewGirder(680, 1499, 4)
+		PreviewGirder(839, 1499, 4)
+		PreviewGirder(1000, 1499, 4)
+		PreviewGirder(1404, 1730, 5)
+		PreviewGirder(1288, 1613, 5)
+		PreviewGirder(1200, 1529, 1)
+		PreviewGirder(1125, 1495, 0)
+		PreviewGirder(1667, 2011, 4)
+		PreviewGirder(1812, 1951, 7)
+		PreviewGirder(1964, 2024, 0)
+		PreviewGirder(1957, 1892, 4)
+		PreviewGirder(2103, 1949, 5)
+		PreviewGirder(2242, 2017, 4)
+		PreviewGirder(2404, 2017, 4)
+		PreviewGirder(2548, 1955, 7)
+		PreviewGirder(2635, 1871, 3)
+		PreviewGirder(2749, 1836, 4)
+		PreviewGirder(2751, 1999, 2)
+		PreviewGirder(2749, 1947, 0)
+		PreviewGirder(2865, 1870, 1)
+		PreviewGirder(2954, 1954, 5)
+		PreviewGirder(3061, 2017, 0)
+		PreviewGirder(3137, 1984, 3)
+		PreviewGirder(3169, 1864, 6)
+		PreviewGirder(3169, 1702, 6)
+		PreviewGirder(3170, 1540, 6)
+		PreviewGirder(3170, 1418, 2)
+		PreviewGirder(3138, 1339, 1)
+		PreviewGirder(3107, 1260, 2)
+		PreviewGirder(3153, 1194, 3)
+		PreviewGirder(3230, 1163, 0)
+		PreviewGirder(3305, 1201, 1)
+		PreviewGirder(3334, 1277, 2)
+		PreviewGirder(3227, 1540, 6)
+		PreviewGirder(3228, 1419, 2)
+		PreviewGirder(3334, 1358, 2)
+		PreviewGirder(3280, 1387, 0)
+		PreviewGirder(3227, 1702, 6)
+		PreviewGirder(3227, 1864, 6)
+		PreviewGirder(3253, 1981, 1)
+		PreviewGirder(3366, 2017, 4)
+		PreviewGirder(3528, 2018, 4)
+		PreviewGirder(3689, 2018, 4)
+		PreviewGirder(246, 1262, 4)
+		PreviewGirder(407, 1262, 4)
+		PreviewGirder(568, 1262, 4)
+		PreviewGirder(731, 1262, 4)
+		PreviewGirder(894, 1261, 4)
+		PreviewGirder(1056, 1261, 4)
+		PreviewGirder(1179, 1262, 0)
+		PreviewGirder(1288, 1314, 5)
+		PreviewGirder(1406, 1433, 5)
+		PreviewGirder(1525, 1549, 5)
+		PreviewGirder(1642, 1666, 5)
+		PreviewGirder(1749, 1728, 0)
+		PreviewGirder(1956, 1802, 6)
+		PreviewGirder(1956, 1640, 6)
+		PreviewGirder(1782, 1638, 6)
+		PreviewGirder(1835, 1487, 7)
+		PreviewGirder(1942, 1430, 0)
+		PreviewGirder(2051, 1486, 5)
+		PreviewGirder(2109, 1639, 6)
+		PreviewGirder(2177, 1778, 5)
+		PreviewGirder(2323, 1840, 4)
+		PreviewGirder(49, 1029, 0)
+		PreviewGirder(499, 1172, 6)
+		PreviewGirder(527, 1054, 3)
+		PreviewGirder(604, 1026, 0)
+		PreviewGirder(680, 1056, 1)
+		PreviewGirder(719, 1168, 6)
+		PreviewGirder(89, 728, 4)
+		PreviewGirder(251, 728, 4)
+		PreviewGirder(412, 728, 4)
+		PreviewGirder(572, 728, 4)
+		PreviewGirder(733, 728, 4)
+		PreviewGirder(894, 728, 4)
+		PreviewGirder(1016, 728, 0)
+		PreviewGirder(1067, 799, 6)
+		PreviewGirder(1139, 891, 4)
+		PreviewGirder(1067, 1171, 6)
+		PreviewGirder(1067, 1049, 2)
+		PreviewGirder(1136, 999, 4)
+		PreviewGirder(1005, 854, 2)
+		PreviewGirder(972, 803, 0)
+		PreviewGirder(920, 780, 2)
+		PreviewGirder(891, 1206, 2)
+		PreviewGirder(887, 1150, 0)
+		PreviewGirder(3018, 1311, 4)
+		PreviewGirder(2871, 1369, 7)
+		PreviewGirder(2809, 1523, 6)
+		PreviewGirder(2809, 1647, 2)
+		PreviewGirder(2469, 1777, 7)
+		PreviewGirder(2612, 1715, 4)
+		PreviewGirder(2809, 1702, 0)
+		PreviewGirder(2727, 1694, 0)
+		PreviewGirder(3334, 1481, 6)
+		PreviewGirder(3334, 1643, 6)
+		PreviewGirder(3334, 1804, 6)
+		PreviewGirder(3403, 1940, 5)
+		PreviewGirder(1120, 944, 2)
+		PreviewGirder(1163, 945, 2)
+		PreviewGirder(1141, 781, 5)
+		PreviewGirder(81, 629, 1)
+		PreviewGirder(102, 498, 3)
+		PreviewGirder(81, 373, 1)
+		PreviewGirder(179, 453, 6)
+		PreviewGirder(100, 260, 3)
+		PreviewGirder(179, 330, 2)
+		PreviewGirder(249, 544, 4)
+		PreviewGirder(410, 545, 4)
+		PreviewGirder(571, 543, 4)
+		PreviewGirder(731, 543, 4)
+		PreviewGirder(891, 544, 4)
+		PreviewGirder(1014, 544, 0)
+		PreviewGirder(1779, 1321, 6)
+		PreviewGirder(1779, 1159, 6)
+		PreviewGirder(1779, 997, 6)
+		PreviewGirder(1779, 836, 6)
+		PreviewGirder(1722, 684, 5)
+		PreviewGirder(1137, 545, 4)
+		PreviewGirder(1298, 545, 4)
+		PreviewGirder(1460, 546, 4)
+		PreviewGirder(1608, 600, 5)
+		PreviewGirder(1508, 1005, 4)
+		PreviewGirder(160, 246, 1)
+		PreviewGirder(1821, 1356, 3)
+		PreviewGirder(1938, 1323, 4)
+		PreviewGirder(2086, 1381, 5)
+		PreviewGirder(4004, 2018, 4)
+		PreviewGirder(3934, 1926, 6)
+		PreviewGirder(3965, 1835, 0)
+		PreviewGirder(4015, 1763, 6)
+		PreviewGirder(4015, 1603, 6)
+		PreviewGirder(4015, 1442, 6)
+		PreviewGirder(4015, 1280, 6)
+		PreviewGirder(4014, 1118, 6)
+		PreviewGirder(4014, 956, 6)
+		PreviewGirder(4014, 793, 6)
+		PreviewGirder(4014, 632, 6)
+		PreviewGirder(4014, 469, 6)
+		PreviewGirder(3981, 351, 1)
+		PreviewGirder(3985, 204, 3)
+		PreviewGirder(4045, 156, 0)
+		PreviewGirder(3667, 344, 0)
+		PreviewGirder(4016, 1925, 6)
+		PreviewGirder(3998, 1926, 6)
+		PreviewGirder(3980, 1925, 6)
+		PreviewGirder(3957, 1926, 6)
+		PreviewGirder(3843, 1832, 4)
+		PreviewGirder(3682, 1832, 4)
+		PreviewGirder(3561, 1833, 0)
+		PreviewGirder(3484, 1796, 1)
+		PreviewGirder(3455, 1675, 6)
+		PreviewGirder(3455, 1513, 6)
+		PreviewGirder(3455, 1351, 6)
+		PreviewGirder(1601, 476, 7)
+		PreviewGirder(1706, 421, 0)
+		PreviewGirder(1888, 366, 6)
+		PreviewGirder(3997, 1743, 6)
+		PreviewGirder(3979, 1742, 6)
+		PreviewGirder(3962, 1741, 6)
+		PreviewGirder(3943, 1741, 6)
+		PreviewGirder(2199, 393, 7)
+		PreviewGirder(2304, 337, 0)
+		PreviewGirder(2409, 392, 5)
+		PreviewGirder(2470, 502, 2)
+		PreviewGirder(2412, 606, 7)
+		PreviewGirder(2308, 673, 0)
+		PreviewGirder(2202, 612, 5)
+		PreviewGirder(2138, 507, 2)
+		PreviewGirder(2739, 378, 7)
+		PreviewGirder(2847, 322, 0)
+		PreviewGirder(2953, 378, 5)
+		PreviewGirder(2680, 489, 2)
+		PreviewGirder(3012, 489, 2)
+		PreviewGirder(2736, 594, 5)
+		PreviewGirder(2841, 657, 0)
+		PreviewGirder(2949, 594, 7)
+		PreviewGirder(2448, 837, 7)
+		PreviewGirder(2594, 779, 4)
+		PreviewGirder(2739, 836, 5)
+		PreviewGirder(2390, 950, 2)
+		PreviewGirder(2789, 950, 2)
+		PreviewGirder(2593, 904, 4)
+		PreviewGirder(2727, 1056, 7)
+		PreviewGirder(2452, 1058, 5)
+		PreviewGirder(2510, 1215, 6)
+		PreviewGirder(2663, 1208, 6)
+		PreviewGirder(2510, 1378, 6)
+		PreviewGirder(2664, 1369, 6)
+		PreviewGirder(300, 275, 0)
+		PreviewGirder(439, 274, 0)
+		PreviewGirder(628, 273, 4)
+		PreviewGirder(811, 271, 0)
+		PreviewGirder(737, 373, 4)
+		PreviewGirder(934, 440, 0)
+		PreviewGirder(1075, 439, 0)
+		PreviewGirder(1209, 438, 0)
+		PreviewGirder(1383, 439, 4)
+		PreviewGirder(3547, 344, 4)
+		PreviewGirder(3584, 254, 6)
+		PreviewGirder(3508, 132, 5)
+		PreviewGirder(3335, 1117, 6)
+		PreviewGirder(3335, 956, 6)
+		PreviewGirder(3335, 795, 6)
+		PreviewGirder(3335, 634, 6)
+		PreviewGirder(3335, 513, 2)
+		PreviewGirder(3401, 404, 7)
+		PreviewGirder(3455, 1190, 6)
+		PreviewGirder(3455, 1029, 6)
+		PreviewGirder(3455, 868, 6)
+		PreviewGirder(3455, 705, 6)
+		PreviewGirder(3455, 582, 2)
+		PreviewGirder(3485, 503, 3)
+		PreviewGirder(3601, 475, 4)
+		PreviewGirder(3719, 444, 3)
+		PreviewGirder(3094, 828, 5)
+		PreviewGirder(2064, 947, 7)
+		PreviewGirder(1826, 512, 7)
+		PreviewGirder(3420, 49, 1)
+		PreviewGirder(410, 682, 3)
+		PreviewGirder(528, 653, 4)
+		PreviewGirder(688, 653, 4)
+		PreviewGirder(805, 684, 1)
+		PreviewGirder(528, 672, 4)
+		PreviewGirder(688, 672, 4)
+		PreviewGirder(500, 696, 4)
+		PreviewGirder(701, 696, 4)
+
+		PreviewPlacedGear(889, 1126)
+		PreviewPlacedGear(1211, 975)
+		PreviewPlacedGear(3619, 451)
+		PreviewPlacedGear(304, 1594)
+		PreviewPlacedGear(1538, 1987)
+		PreviewPlacedGear(1958, 2000)
+		PreviewPlacedGear(2744, 1923)
+		PreviewPlacedGear(3283, 1363)
+		PreviewPlacedGear(2749, 1812)
+		PreviewPlacedGear(970, 779)
+		PreviewPlacedGear(3284, 1332)
+		PreviewPlacedGear(1082, 975)
+		PreviewPlacedGear(1547, 981)
+		PreviewPlacedGear(1707, 397)
+		PreviewPlacedGear(2309, 649)
+		PreviewPlacedGear(1116, 867)
+		PreviewPlacedGear(2559, 880)
+		PreviewPlacedGear(2630, 880)
+		PreviewPlacedGear(1951, 1406)
+		PreviewPlacedGear(3536, 320)
+		PreviewPlacedGear(3582, 1994)
+		PreviewPlacedGear(682, 349)
+		PreviewPlacedGear(2842, 633)
+		PreviewPlacedGear(506, 1034)
+		PreviewPlacedGear(556, 1002)
+		PreviewPlacedGear(615, 1002)
+		PreviewPlacedGear(676, 1010)
+		PreviewPlacedGear(716, 1050)
+		PreviewPlacedGear(67, 1005)
+
+
+	end
+
+    FlushPoints()
+end
+
+function LoadMap(mID)
+
+	techX = {}
+	techY = {}
+	techCount = 1
+
+	if mID == 1 then
+
+		--AddCaption("don't load any map, ermagherd, why are you even?")
+		-- use this when you want to load a hand-drawn map with special points, I guess?
+
+	--[[elseif mID == "1" then
+
+		--simple testmap, the first of its kind
+		--currently broken due to being old
+		------ GIRDER LIST ------
+		LoadSprite(306, 530, sprAmGirder, 7)
+		LoadSprite(451, 474, sprAmGirder, 4)
+		LoadSprite(595, 531, sprAmGirder, 5)
+		LoadSprite(245, 679, sprAmGirder, 6)
+		LoadSprite(305, 822, sprAmGirder, 5)
+		LoadSprite(449, 887, sprAmGirder, 4)
+		LoadSprite(593, 825, sprAmGirder, 7)
+		LoadSprite(657, 681, sprAmGirder, 6)
+		LoadSprite(1063, 682, sprAmGirder, 6)
+		LoadSprite(1121, 532, sprAmGirder, 7)
+		LoadSprite(1266, 476, sprAmGirder, 4)
+		LoadSprite(1411, 535, sprAmGirder, 5)
+		LoadSprite(1472, 684, sprAmGirder, 6)
+		LoadSprite(1415, 828, sprAmGirder, 7)
+		LoadSprite(1271, 892, sprAmGirder, 4)
+		LoadSprite(1126, 827, sprAmGirder, 5)
+		LoadSprite(841, 1079, sprAmGirder, 4)
+		LoadSprite(709, 1153, sprAmGirder, 7)
+		LoadSprite(975, 1154, sprAmGirder, 5)
+		LoadSprite(653, 1265, sprAmGirder, 2)
+		LoadSprite(1021, 1266, sprAmGirder, 2)
+		LoadSprite(713, 1369, sprAmGirder, 5)
+		LoadSprite(960, 1371, sprAmGirder, 7)
+		LoadSprite(835, 1454, sprAmGirder, 4)
+		LoadSprite(185, 1617, sprAmGirder, 2)
+		LoadSprite(1317, 1399, sprAmGirder, 2)
+		LoadSprite(1711, 1811, sprAmGirder, 2)
+		LoadSprite(2087, 1424, sprAmGirder, 2)
+		LoadSprite(2373, 1804, sprAmGirder, 2)
+		LoadSprite(2646, 1434, sprAmGirder, 2)
+		LoadSprite(1876, 667, sprAmGirder, 6)
+		LoadSprite(1934, 517, sprAmGirder, 7)
+		LoadSprite(2079, 461, sprAmGirder, 4)
+		LoadSprite(2224, 519, sprAmGirder, 5)
+		LoadSprite(1935, 810, sprAmGirder, 5)
+		LoadSprite(2080, 875, sprAmGirder, 4)
+		LoadSprite(2224, 811, sprAmGirder, 7)
+		LoadSprite(2370, 582, sprAmGirder, 4)
+		LoadSprite(2370, 759, sprAmGirder, 4)
+		LoadSprite(2530, 582, sprAmGirder, 4)
+		LoadSprite(2690, 582, sprAmGirder, 4)
+		LoadSprite(2530, 759, sprAmGirder, 4)
+		LoadSprite(2690, 759, sprAmGirder, 4)
+		LoadSprite(2836, 634, sprAmGirder, 5)
+		LoadSprite(2835, 822, sprAmGirder, 5)
+		LoadSprite(2951, 751, sprAmGirder, 5)
+		LoadSprite(2950, 939, sprAmGirder, 5)
+		LoadSprite(2964, 1054, sprAmGirder, 7)
+		LoadSprite(2978, 1172, sprAmGirder, 5)
+		LoadSprite(3095, 1185, sprAmGirder, 7)
+		LoadSprite(3211, 1069, sprAmGirder, 7)
+		LoadSprite(3038, 843, sprAmGirder, 1)
+		LoadSprite(3126, 825, sprAmGirder, 7)
+		LoadSprite(3271, 768, sprAmGirder, 4)
+		LoadSprite(3357, 1014, sprAmGirder, 4)
+		LoadSprite(3416, 826, sprAmGirder, 5)
+		LoadSprite(3454, 969, sprAmGirder, 6)
+		LoadSprite(3439, 369, sprAmGirder, 6)
+		LoadSprite(3500, 220, sprAmGirder, 7)
+		LoadSprite(3502, 513, sprAmGirder, 5)
+		LoadSprite(3646, 162, sprAmGirder, 4)
+		LoadSprite(3791, 224, sprAmGirder, 5)
+		LoadSprite(3851, 374, sprAmGirder, 6)
+		LoadSprite(3792, 518, sprAmGirder, 7)
+		LoadSprite(3994, 1731, sprAmGirder, 7)
+		LoadSprite(3877, 1848, sprAmGirder, 7)
+		LoadSprite(3789, 1942, sprAmGirder, 3)
+		LoadSprite(3986, 1929, sprAmGirder, 2)
+		LoadSprite(2837, 1937, sprAmGirder, 4)
+		LoadSprite(2997, 1938, sprAmGirder, 4)
+		LoadSprite(3157, 1938, sprAmGirder, 4)
+		LoadSprite(1152, 1844, sprAmGirder, 4)
+		LoadSprite(1299, 1898, sprAmGirder, 5)
+		LoadSprite(1005, 1900, sprAmGirder, 7)
+		LoadSprite(3578, 575, sprAmGirder, 6)
+		LoadSprite(3714, 576, sprAmGirder, 6)
+		LoadSprite(3579, 740, sprAmGirder, 6)
+		LoadSprite(3714, 741, sprAmGirder, 6)
+		LoadSprite(3580, 903, sprAmGirder, 6)
+		LoadSprite(3715, 904, sprAmGirder, 6)
+		LoadSprite(3552, 452, sprAmGirder, 1)
+		LoadSprite(3528, 370, sprAmGirder, 2)
+		LoadSprite(3568, 297, sprAmGirder, 3)
+		LoadSprite(3736, 455, sprAmGirder, 3)
+		LoadSprite(3757, 378, sprAmGirder, 2)
+		LoadSprite(3725, 299, sprAmGirder, 1)
+		LoadSprite(3646, 261, sprAmGirder, 0)
+		LoadSprite(3648, 997, sprAmGirder, 4)
+		LoadSprite(3649, 1275, sprAmGirder, 2)
+		LoadSprite(3514, 1750, sprAmGirder, 0)
+
+		------ AMMO CRATE LIST ------
+		tempG = SpawnAmmoCrate(1707, 1755, amBazooka)
+		tempG = SpawnAmmoCrate(3983, 1873, amBazooka)
+		tempG = SpawnAmmoCrate(184, 1561, amBazooka)
+		tempG = SpawnAmmoCrate(2644, 1378, amBazooka)
+		tempG = SpawnAmmoCrate(2914, 865, amBazooka)
+
+		------ MINE LIST ------
+		SetTimer(AddGear(2340, 580, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2399, 580, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2448, 580, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2517, 579, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2575, 581, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2647, 582, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2720, 582, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2760, 581, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2331, 757, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2409, 758, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2477, 758, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2545, 759, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2613, 760, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2679, 758, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2744, 757, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2813, 610, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2855, 650, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2887, 686, gtMine, 0, 0, 0, 0), 1)
+]]
+	elseif mID == 2 then
+
+		-- more detailed landflag test map, should hopefully work now
+		-- probably my second favorite techracer map
+
+		------ GIRDER LIST ------
+		LoadSprite(402, 1863, sprAmGirder, 0, 16448250, nil, nil, nil, lfIce)
+		LoadSprite(442, 1863, sprAmGirder, 4, 16448250, nil, nil, nil, lfIce)
+		LoadSprite(2067, 1945, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(1943, 1653, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(1999, 1504, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2143, 1445, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2432, 1565, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2593, 1565, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2752, 1565, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2206, 1949, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2262, 1800, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2407, 1745, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2569, 1745, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2005, 1797, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2288, 1503, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2715, 1802, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2898, 1624, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3014, 1740, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2830, 1919, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3131, 1856, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3191, 1968, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3264, 2021, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2840, 2006, sprAmGirder, 3, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(396, 665, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(619, 665, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(696, 635, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(319, 637, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(268, 604, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(746, 603, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(325, 495, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(689, 493, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(504, 422, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(595, 422, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(412, 422, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(320, 696, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(249, 786, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(249, 948, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(191, 785, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(191, 946, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(191, 1107, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(249, 1109, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(130, 1251, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(306, 1251, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(72, 1360, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(364, 1360, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(132, 1462, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(304, 1463, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(182, 1616, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(255, 1613, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(217, 1796, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(221, 1381, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(154, 669, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(124, 553, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(326, 467, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(223, 592, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(638, 791, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(752, 907, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(866, 1022, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1505, 395, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1445, 544, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1506, 686, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1650, 339, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1797, 397, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1857, 547, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1797, 688, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1652, 754, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3326, 863, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3474, 921, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3180, 921, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3120, 1071, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3183, 1214, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3536, 1071, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3480, 1214, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3330, 1279, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1481, 1133, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1626, 1078, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1772, 1135, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1422, 1280, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1831, 1286, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1773, 1429, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1627, 1492, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1482, 1427, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(587, 855, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(425, 855, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(302, 822, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2502, 556, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2601, 634, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2616, 441, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2716, 519, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3469, 556, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3696, 763, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2756, 379, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2862, 466, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(2918, 379, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3023, 467, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3080, 378, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3616, 503, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3552, 828, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3172, 527, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3232, 428, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3289, 647, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3350, 545, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3406, 764, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3708, 575, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+		LoadSprite(3705, 680, sprAmGirder, 1, 2516582650, nil, nil, nil, lfIndestructible)
+
+		------ RUBBER BAND LIST ------
+		LoadSprite(505, 708, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(175, 451, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(822, 1693, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(982, 1691, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1142, 1688, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1302, 1684, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1450, 1750, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1566, 1860, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1680, 1973, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+
+		------ WAYPOINT LIST ------
+		AddWayPoint(387, 621)
+		AddWayPoint(215, 1748)
+		AddWayPoint(1617, 1313)
+		AddWayPoint(1642, 562)
+		AddWayPoint(3318, 1102)
+		AddWayPoint(3554, 684)
+		AddWayPoint(2142, 1674)
+
+		------ AMMO CRATE LIST ------
+		tempG = SpawnAmmoCrate(324, 613, amFirePunch)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents", "amFirePunch")
+		tempG = SpawnAmmoCrate(2361, 1721, amBazooka)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents", "amBazooka")
+		tempG = SpawnAmmoCrate(2430, 1721, amBazooka)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents", "amBazooka")
+		tempG = SpawnAmmoCrate(2510, 1721, amBazooka)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents", "amBazooka")
+		tempG = SpawnAmmoCrate(2581, 1721, amBazooka)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents", "amBazooka")
+		tempG = SpawnAmmoCrate(405, 1839, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents", "amSineGun")
+		tempG = SpawnAmmoCrate(481, 1839, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents", "amSineGun")
+
+		------ UTILITY CRATE LIST ------
+		tempG = SpawnUtilityCrate(696, 611, amParachute)
+		setGearValue(tempG,"caseType", "util")
+		setGearValue(tempG,"contents", "amParachute")
+		tempG = SpawnUtilityCrate(825, 1664, amJetpack)
+		setGearValue(tempG,"caseType", "util")
+		setGearValue(tempG,"contents", "amJetpack")
+		tempG = SpawnUtilityCrate(919, 1657, amJetpack)
+		setGearValue(tempG,"caseType", "util")
+		setGearValue(tempG,"contents", "amJetpack")
+		tempG = SpawnUtilityCrate(1015, 1662, amJetpack)
+		setGearValue(tempG,"caseType", "util")
+		setGearValue(tempG,"contents", "amJetpack")
+		tempG = SpawnUtilityCrate(1095, 1654, amJetpack)
+		setGearValue(tempG,"caseType", "util")
+		setGearValue(tempG,"contents", "amJetpack")
+		tempG = SpawnUtilityCrate(1166, 1659, amJetpack)
+		setGearValue(tempG,"caseType", "util")
+		setGearValue(tempG,"contents", "amJetpack")
+		tempG = SpawnUtilityCrate(1250, 1650, amJetpack)
+		setGearValue(tempG,"caseType", "util")
+		setGearValue(tempG,"contents", "amJetpack")
+		tempG = SpawnUtilityCrate(1335, 1655, amJetpack)
+		setGearValue(tempG,"caseType", "util")
+		setGearValue(tempG,"contents", "amJetpack")
+
+		------ MINE LIST ------
+		SetTimer(AddGear(221, 1373, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(609, 661, gtMine, 0, 0, 0, 0), 3000)
+
+		------ STICKY MINE LIST ------
+		tempG = AddGear(190, 756, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(191, 810, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(189, 868, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(190, 923, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(192, 984, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(192, 1045, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(189, 1097, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(192, 1159, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(248, 753, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(248, 808, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(249, 868, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(250, 921, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(246, 982, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(247, 1041, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(249, 1094, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(249, 1156, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2571, 665, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2614, 623, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2658, 580, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2704, 533, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2751, 484, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2830, 466, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2912, 465, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2992, 465, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3072, 468, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2465, 592, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2518, 540, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2580, 477, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2635, 425, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2713, 381, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2796, 378, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2892, 379, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(2988, 379, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3061, 377, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3136, 377, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(627, 770, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(661, 804, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(705, 850, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(754, 899, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(805, 950, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(850, 996, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(902, 1048, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(888, 1034, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(788, 933, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(839, 985, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(736, 881, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(686, 829, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(649, 792, gtSMine, 0, 0, 0, 0)
+
+	elseif mID == 3 then
+
+		--Helix airmine map
+		ufoFuel = 2000
+		------ GIRDER LIST ------
+		LoadSprite(3703, 157, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3846, 100, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3991, 162, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(4049, 311, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3648, 308, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3988, 454, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3843, 515, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3616, 429, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3725, 548, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1155, 95, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1067, 167, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(906, 167, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(747, 167, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(586, 167, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(426, 167, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(266, 166, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(105, 166, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+
+		------ WAYPOINT LIST ------
+		AddWayPoint(3892, 478)
+		AddWayPoint(1146, 413)
+		AddWayPoint(934, 1459)
+		AddWayPoint(2635, 1459)
+		AddWayPoint(2656, 523)
+		AddWayPoint(1958, 834)
+		AddWayPoint(555, 864)
+
+		------ UTILITY CRATE LIST ------
+		tempG = SpawnUtilityCrate(3801, 491, amJetpack)
+		setGearValue(tempG,"caseType", "util")
+		setGearValue(tempG,"contents", "amJetpack")
+		tempG = SpawnUtilityCrate(3803, 460, amJetpack)
+		setGearValue(tempG,"caseType", "util")
+		setGearValue(tempG,"contents", "amJetpack")
+		tempG = SpawnUtilityCrate(3799, 429, amJetpack)
+		setGearValue(tempG,"caseType", "util")
+		setGearValue(tempG,"contents", "amJetpack")
+		tempG = SpawnUtilityCrate(3846, 491, amJetpack)
+		setGearValue(tempG,"caseType", "util")
+		setGearValue(tempG,"contents", "amJetpack")
+		tempG = SpawnUtilityCrate(3845, 460, amJetpack)
+		setGearValue(tempG,"caseType", "util")
+		setGearValue(tempG,"contents", "amJetpack")
+		tempG = SpawnUtilityCrate(3845, 429, amJetpack)
+		setGearValue(tempG,"caseType", "util")
+		setGearValue(tempG,"contents", "amJetpack")
+
+		------ AIR MINE LIST ------
+		SetTimer(AddGear(3684, 595, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3648, 641, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3613, 695, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3575, 733, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3537, 781, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3505, 829, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3476, 881, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3447, 930, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3418, 979, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3388, 1021, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3356, 1072, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3561, 469, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3528, 500, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3496, 545, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3467, 584, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3444, 619, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3404, 656, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3373, 693, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3351, 726, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3329, 756, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3306, 798, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3339, 1115, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3321, 1163, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3298, 1206, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3281, 1250, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3259, 1302, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3238, 1343, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3220, 1397, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3269, 810, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3225, 788, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3188, 762, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3149, 735, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3106, 709, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3064, 682, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3023, 652, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2983, 619, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3135, 980, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3143, 1029, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3130, 1077, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3122, 1127, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3100, 1174, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3069, 1226, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3042, 1287, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3178, 1440, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3125, 1480, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3088, 1521, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2988, 1326, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2944, 1357, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2884, 1356, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2813, 1356, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2755, 1356, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2677, 1347, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2610, 1356, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2532, 1354, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3045, 1553, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2974, 1588, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2901, 1584, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2850, 1569, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2782, 1570, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2708, 1577, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2648, 1579, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2585, 1576, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2525, 1581, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2490, 1338, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2435, 1306, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2386, 1283, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2344, 1242, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3126, 942, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3070, 919, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3005, 897, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2962, 865, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2907, 838, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2858, 803, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2807, 769, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2764, 741, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2714, 703, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2665, 671, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2613, 629, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2557, 591, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2513, 545, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2450, 537, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2390, 569, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2341, 603, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2299, 649, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2255, 684, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2218, 714, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2173, 756, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2125, 801, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2084, 864, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2113, 933, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2154, 974, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2191, 1016, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2223, 1061, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2257, 1113, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2283, 1153, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2316, 1202, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2479, 1553, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2422, 1513, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2363, 1477, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2302, 1446, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2243, 1388, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2188, 1335, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2136, 1273, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2086, 1204, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2033, 1132, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1992, 1085, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1967, 1022, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2943, 560, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2890, 511, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2834, 477, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2774, 451, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2710, 428, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2652, 410, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2578, 375, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2482, 342, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2380, 335, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2302, 359, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2256, 409, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2183, 469, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2111, 513, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2049, 558, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1986, 586, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1742, 412, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1684, 376, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1627, 344, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1566, 325, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1505, 298, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1727, 695, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1917, 1067, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1874, 1122, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1923, 557, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1863, 501, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1796, 447, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1829, 1158, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1778, 1201, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1732, 1244, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1700, 1290, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1652, 1333, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1599, 1380, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1550, 1425, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1493, 1483, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1443, 1519, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1381, 1557, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1304, 1590, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1237, 1613, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1176, 1621, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1104, 1626, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1032, 1630, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(964, 1628, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(886, 1615, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(813, 1584, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(750, 1524, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(697, 1473, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(645, 1410, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(602, 1351, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(557, 1284, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(506, 1230, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(467, 1144, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(449, 1066, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(421, 980, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(425, 876, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(422, 789, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(434, 699, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(439, 625, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(481, 551, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(537, 494, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(586, 444, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(633, 393, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(674, 360, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(745, 332, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1786, 816, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1768, 744, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1765, 875, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1711, 936, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1629, 1016, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1579, 1072, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1520, 1123, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1462, 1185, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1415, 1238, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1361, 1288, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1298, 1318, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1230, 1345, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1161, 1357, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1097, 1367, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1033, 1373, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(971, 1333, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(900, 1291, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(840, 1225, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(795, 1156, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(744, 1076, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(706, 995, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(674, 927, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(687, 859, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(719, 781, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(742, 720, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(801, 297, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(880, 280, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(954, 275, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1020, 268, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1093, 265, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1174, 258, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1270, 257, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1338, 262, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1433, 260, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(779, 657, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(824, 624, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(879, 592, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(928, 564, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(995, 544, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1055, 541, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1121, 540, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1184, 534, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1252, 536, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1317, 542, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1380, 553, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1448, 567, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1521, 582, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1580, 600, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1633, 626, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1683, 651, gtAirMine, 0, 0, 0, 0), 1)
+
+	elseif mID == 4 then
+
+	---nice rope and airmines landflag testmap
+	------ GIRDER LIST ------
+
+	LoadSprite(194, 388, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(338, 334, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(484, 390, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(139, 543, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(544, 540, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(201, 687, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(485, 684, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(259, 839, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(426, 837, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(259, 999, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(426, 998, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(259, 1159, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(426, 1158, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(259, 1318, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(426, 1318, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(426, 1478, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(259, 1478, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(515, 1477, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(659, 1537, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(774, 1652, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(836, 1799, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(907, 1890, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1067, 1890, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1212, 1823, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1359, 1764, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1504, 1822, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1647, 1886, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1807, 1886, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1362, 1869, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1968, 1885, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2111, 1823, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2257, 1769, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2403, 1825, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2549, 1887, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2709, 1887, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2868, 1887, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2958, 1854, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2928, 1773, sprAmGirder, 1, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2898, 1692, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2928, 1613, sprAmGirder, 3, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(3045, 1584, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(3162, 1619, sprAmGirder, 1, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(3192, 1697, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(3160, 1777, sprAmGirder, 3, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(3128, 1857, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(3218, 1886, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(3379, 1885, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(3524, 1818, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(3641, 1702, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(3756, 1585, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(4021, 1316, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(3842, 1503, sprAmGirder, 3, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(3899, 1409, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3694, 1974, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3809, 1858, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3925, 1741, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(4022, 1613, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2256, 1877, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3046, 1728, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(501, 1777, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(572, 1868, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3372, 771, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3517, 715, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3663, 774, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3313, 923, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3373, 1066, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3518, 1128, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3662, 1065, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3723, 924, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2474, 1373, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2474, 1252, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2507, 1200, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2626, 1200, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2716, 1270, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2505, 1464, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2625, 1464, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2716, 1391, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1544, 300, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1691, 245, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1838, 304, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1487, 453, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1548, 597, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1692, 657, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1835, 593, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1900, 451, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3527, 93, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3586, 238, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3703, 354, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3820, 471, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3938, 588, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(4044, 651, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3618, 22, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3779, 22, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(3939, 22, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(4047, 22, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(936, 1198, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1080, 1143, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1225, 1202, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1278, 1352, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(881, 1351, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(943, 1496, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1219, 1495, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1160, 1645, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(998, 1649, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1160, 1766, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(998, 1770, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1077, 1824, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1824, 1138, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(834, 606, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(950, 593, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1035, 683, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(748, 696, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(764, 780, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(850, 870, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(937, 850, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1018, 768, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2589, 444, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2704, 329, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2604, 560, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2719, 675, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2832, 689, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2947, 573, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2820, 317, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2936, 433, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2987, 489, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(338, 559, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+
+	------ WAYPOINT LIST ------
+	AddWayPoint(337, 533)
+	AddWayPoint(1069, 1367)
+	AddWayPoint(884, 729)
+	AddWayPoint(1682, 464)
+	AddWayPoint(2773, 505)
+	AddWayPoint(3512, 929)
+	AddWayPoint(4002, 106)
+	AddWayPoint(3964, 1520)
+	AddWayPoint(2592, 1334)
+
+	------ AMMO CRATE LIST ------
+	tempG = SpawnAmmoCrate(548, 1844, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(595, 1844, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(642, 1844, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(1314, 1845, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(1362, 1845, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(1419, 1845, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(2208, 1853, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(2264, 1853, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(2318, 1853, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(3027, 1704, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(3072, 1704, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(1822, 1042, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+
+	------ UTILITY CRATE LIST ------
+	tempG = SpawnUtilityCrate(313, 535, amRope)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amRope")
+	tempG = SpawnUtilityCrate(365, 535, amRope)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amRope")
+	tempG = SpawnUtilityCrate(313, 504, amRope)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amRope")
+	tempG = SpawnUtilityCrate(339, 478, amRope)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amRope")
+	tempG = SpawnUtilityCrate(365, 504, amRope)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amRope")
+
+	------ AIR MINE LIST ------
+	SetTimer(AddGear(3517, 995, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3448, 858, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3582, 848, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3758, 158, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3964, 297, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2772, 506, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2602, 1339, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1638, 370, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1743, 522, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(894, 726, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1080, 1690, gtAirMine, 0, 0, 0, 0), 1)
+
+	elseif mID == 5 then
+	-- gimmicky bounce map, probably not possible at the moment due
+	-- to only having a single land flag and techracer forbidding
+	-- indestructible landflag
+
+		------ RUBBER BAND LIST ------
+		LoadSprite(3776, 447, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(3629, 503, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(3486, 446, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(3234, 889, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(3084, 838, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(2943, 909, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(2665, 507, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(2520, 557, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(2377, 496, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(2507, 1263, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(2355, 1212, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(2206, 1269, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1902, 1270, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1749, 1221, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1607, 1288, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1781, 1659, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1927, 1706, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(2089, 1702, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(2234, 1649, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(3413, 1631, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(3558, 1676, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(3718, 1673, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(3866, 1616, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(807, 803, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(806, 1131, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(732, 1273, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(583, 1324, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(420, 1324, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(272, 1274, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(222, 1121, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(221, 956, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(221, 792, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(271, 644, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(420, 589, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(584, 588, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(730, 658, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(612, 1846, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(758, 1896, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(903, 1835, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1051, 1781, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1210, 1780, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1356, 1845, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1501, 1891, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1438, 431, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1589, 378, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+		LoadSprite(1736, 448, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+
+		------ WAYPOINT LIST ------
+		AddWayPoint(3761, 428)
+		AddWayPoint(750, 1801)
+		AddWayPoint(511, 1232)
+		AddWayPoint(1579, 297)
+		AddWayPoint(2007, 1618)
+		AddWayPoint(3642, 1601)
+
+		------ AMMO CRATE LIST ------
+		tempG = SpawnAmmoCrate(397, 1295, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(461, 1295, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(555, 1295, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(621, 1295, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(759, 1867, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(1504, 1862, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(2521, 528, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(3639, 474, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(3078, 809, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(1752, 1192, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(2349, 1183, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(1582, 349, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(3560, 1647, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(3711, 1644, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(433, 560, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(568, 559, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(1935, 1677, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(2084, 1673, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(1018, 1752, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(1086, 1752, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(1176, 1751, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(1238, 1751, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(2009, 1668, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(3641, 1639, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(3580, 469, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(3700, 467, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(2458, 523, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+		tempG = SpawnAmmoCrate(2595, 521, amSineGun)
+		setGearValue(tempG,"caseType", "ammo")
+		setGearValue(tempG,"contents","amSineGun")
+
+
+	elseif mID == 6 then
+	--incomplete challenge, still working on this map
+
+	------ GIRDER LIST ------
+	LoadSprite(419, 298, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(348, 387, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(521, 359, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(459, 385, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(570, 387, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(601, 298, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(348, 547, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(570, 547, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(348, 707, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(570, 707, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(397, 466, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(458, 491, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(521, 592, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(458, 620, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(397, 713, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(459, 740, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(348, 867, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(570, 866, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(641, 1038, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(800, 1038, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(959, 1038, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(482, 1038, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(323, 1038, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(163, 1038, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(48, 1038, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(813, 1126, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(989, 1127, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(989, 1288, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(989, 1449, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(813, 1287, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(813, 1448, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(900, 1214, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(989, 1570, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(813, 1569, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(813, 1690, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(521, 844, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(457, 870, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(392, 941, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(813, 1851, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(813, 1972, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(989, 1690, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1044, 1817, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(901, 1979, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1002, 2005, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1176, 1873, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1333, 1873, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1491, 1873, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1649, 1873, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1808, 1873, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1898, 1800, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1942, 1798, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2010, 1798, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2054, 1804, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2054, 1925, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1898, 1639, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2054, 1643, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2125, 1553, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2197, 1464, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2126, 1374, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1965, 1374, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1804, 1374, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1733, 1464, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1823, 1547, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2023, 1976, sprAmGirder, 0, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1961, 2003, sprAmGirder, 3, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2216, 1464, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2234, 1464, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2252, 1464, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2270, 1464, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2245, 1553, sprAmGirder, 0, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2246, 1374, sprAmGirder, 0, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2351, 1310, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2350, 1490, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+
+	------ RUBBER BAND LIST ------
+	LoadSprite(210, 958, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(98, 844, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+
+	------ LAND SPRITE LIST ------
+
+	------ WAYPOINT LIST ------
+	AddWayPoint(438, 278)
+	AddWayPoint(1870, 1354)
+	AddWayPoint(892, 1100)
+
+	------ HEALTH CRATE LIST ------
+
+	------ AMMO CRATE LIST ------
+	tempG = SpawnAmmoCrate(1943, 1978, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(2002, 1952, amSineGun)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amSineGun")
+	tempG = SpawnAmmoCrate(2002, 1890, amSineGun)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amSineGun")
+	tempG = SpawnAmmoCrate(2002, 1921, amSineGun)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amSineGun")
+	tempG = SpawnAmmoCrate(1998, 1859, amSineGun)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amSineGun")
+
+	------ UTILITY CRATE LIST ------
+	tempG = SpawnUtilityCrate(368, 274, amPickHammer)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amPickHammer")
+	tempG = SpawnUtilityCrate(526, 568, amExtraTime)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amExtraTime")
+	tempG = SpawnUtilityCrate(474, 1014, amExtraTime)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amExtraTime")
+	tempG = SpawnUtilityCrate(906, 1955, amRope)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amRope")
+	tempG = SpawnUtilityCrate(2127, 1529, amBlowTorch)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amBlowTorch")
+
+	------ BARREL LIST ------
+	SetHealth(AddGear(1860, 1523, gtExplosives, 0, 0, 0, 0), 1)
+	SetHealth(AddGear(1817, 1523, gtExplosives, 0, 0, 0, 0), 1)
+	SetHealth(AddGear(1836, 1493, gtExplosives, 0, 0, 0, 0), 1)
+	SetHealth(AddGear(1769, 1523, gtExplosives, 0, 0, 0, 0), 1)
+	SetHealth(AddGear(1792, 1494, gtExplosives, 0, 0, 0, 0), 1)
+
+	------ MINE LIST ------
+	SetTimer(AddGear(318, 1028, gtMine, 0, 0, 0, 0), 1)
+
+	------ STICKY MINE LIST ------
+	tempG = AddGear(1767, 1506, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(1792, 1477, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(1813, 1506, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(1837, 1476, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(1858, 1506, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(1882, 1537, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(1748, 1537, gtSMine, 0, 0, 0, 0)
+
+	------ AIR MINE LIST ------
+	SetTimer(AddGear(837, 1570, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(835, 1361, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(836, 1425, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(833, 1495, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(967, 1566, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(970, 1354, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(967, 1422, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(968, 1493, gtAirMine, 0, 0, 0, 0), 1)
+
+	--[[------ GIRDER LIST ------
+	LoadSprite(419, 298, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(348, 387, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(521, 359, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(459, 385, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(570, 387, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(601, 298, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(348, 547, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(570, 547, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(348, 707, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(570, 707, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(397, 466, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(458, 491, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(521, 592, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(458, 620, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(397, 713, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(459, 740, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(348, 867, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(570, 866, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(641, 1038, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(800, 1038, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(959, 1038, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(482, 1038, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(323, 1038, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(163, 1038, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(48, 1038, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(813, 1126, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(989, 1127, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(989, 1288, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(989, 1449, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(813, 1287, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(813, 1448, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(900, 1214, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(989, 1570, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(813, 1569, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(813, 1690, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(521, 844, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(457, 870, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(392, 941, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(813, 1851, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(813, 1972, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(989, 1690, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1044, 1817, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(901, 1979, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1002, 2005, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1176, 1873, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1333, 1873, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1491, 1873, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1625, 1815, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1680, 1688, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1669, 1980, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1762, 1929, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1811, 1853, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1811, 1692, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1708, 1735, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1776, 1734, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1680, 1527, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1811, 1532, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1608, 1437, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1883, 1443, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1955, 1354, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1883, 1264, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1723, 1264, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1562, 1264, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1519, 1354, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+
+	------ RUBBER BAND LIST ------
+	LoadSprite(210, 958, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(98, 844, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+
+	------ WAYPOINT LIST ------
+	AddWayPoint(438, 278)
+	AddWayPoint(1870, 1354)
+	AddWayPoint(892, 1119)
+
+	------ AMMO CRATE LIST ------
+	tempG = SpawnAmmoCrate(1740, 1905, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(1780, 1905, amSineGun)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amSineGun")
+	tempG = SpawnAmmoCrate(1782, 1874, amSineGun)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amSineGun")
+	tempG = SpawnAmmoCrate(1782, 1843, amSineGun)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amSineGun")
+
+	------ UTILITY CRATE LIST ------
+	tempG = SpawnUtilityCrate(368, 274, amPickHammer)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amPickHammer")
+	tempG = SpawnUtilityCrate(526, 568, amExtraTime)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amExtraTime")
+	tempG = SpawnUtilityCrate(474, 1014, amExtraTime)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amExtraTime")
+	tempG = SpawnUtilityCrate(906, 1955, amRope)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amRope")
+
+	------ STICKY MINE LIST ------
+	tempG = AddGear(341, 893, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(341, 845, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(340, 794, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(340, 747, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(340, 694, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(340, 642, gtSMine, 0, 0, 0, 0)
+
+	------ AIR MINE LIST ------
+	SetTimer(AddGear(837, 1570, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(835, 1361, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(836, 1425, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(833, 1495, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(967, 1566, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(970, 1354, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(967, 1422, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(968, 1493, gtAirMine, 0, 0, 0, 0), 1)]]
+
+	elseif mID == 7 then
+	--Bouncy UFO MAP
+	-- should be played with infinite fuel
+
+	ufoFuel = 2000
+	------ GIRDER LIST ------
+	LoadSprite(3699, 436, sprAmGirder, 0, 16448250, nil, nil, nil, lfIce)
+	LoadSprite(934, 806, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(934, 969, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1233, 1342, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1377, 1403, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1497, 1376, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(2816, 1284, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2698, 1401, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2640, 1552, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2640, 1718, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2641, 1881, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(2643, 2007, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(3823, 363, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(233, 596, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(288, 446, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(79, 642, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(80, 479, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(140, 335, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(281, 268, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(343, 334, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(57, 747, sprAmGirder, 3, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(32, 852, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(33, 1015, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(33, 1179, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(34, 1342, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1346, 1939, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1347, 1774, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1294, 1636, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1180, 1522, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1067, 1410, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(931, 1357, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(772, 1358, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(96, 1303, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(236, 1362, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(396, 1363, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(520, 1364, sprAmGirder, 0, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(696, 1450, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(556, 1454, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(489, 1598, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(697, 1574, sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(639, 1681, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(520, 1798, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(369, 1715, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(243, 1716, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(128, 1735, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(133, 1870, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(251, 1987, sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(402, 1915, sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(276, 1938, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(95, 140, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(257, 140, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(419, 140, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(581, 140, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(742, 140, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(903, 140, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1064, 141, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1157, 90, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+
+	------ RUBBER BAND LIST ------
+	LoadSprite(3433, 237, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3581, 185, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3741, 182, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3879, 257, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3921, 411, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3844, 555, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3692, 615, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3529, 618, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3381, 555, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3282, 289, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3223, 514, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3111, 289, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3058, 516, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2947, 287, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2889, 515, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2785, 288, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2788, 578, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2790, 741, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2862, 884, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2749, 1073, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2865, 1186, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2979, 990, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3123, 1036, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3188, 934, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3010, 1234, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3175, 1230, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3339, 1226, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3345, 949, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3405, 804, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3531, 702, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3444, 1007, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3499, 1221, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3604, 1002, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3755, 1038, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3802, 1186, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3741, 1342, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3626, 1456, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3510, 1314, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3392, 1435, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3506, 1577, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2637, 348, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2583, 496, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2633, 952, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2573, 803, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2474, 556, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2468, 742, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2335, 476, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2214, 358, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2322, 812, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2202, 936, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2060, 305, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1898, 304, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1736, 304, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(2085, 1049, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1966, 1161, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1818, 1209, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1657, 1212, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1947, 685, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1801, 735, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1659, 677, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1491, 902, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1346, 955, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1210, 881, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1576, 305, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1414, 304, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1253, 302, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1108, 374, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(991, 491, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1557, 1273, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(938, 639, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(999, 1117, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(847, 1079, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(831, 702, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(667, 702, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(687, 1084, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1115, 1230, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(566, 764, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(525, 1083, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(422, 1024, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(464, 703, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(302, 704, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(297, 795, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(316, 1089, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1559, 1436, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1560, 1598, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1560, 1759, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1561, 1920, sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1620, 2022, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3388, 1688, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(3276, 1546, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+
+	------ WAYPOINT LIST ------
+	AddWayPoint(3820, 342)
+	AddWayPoint(3343, 1612)
+	AddWayPoint(272, 351)
+	AddWayPoint(159, 1774)
+	AddWayPoint(2248, 1573)
+	AddWayPoint(1379, 1192)
+
+	------ AMMO CRATE LIST ------
+	tempG = SpawnAmmoCrate(1757, 706, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(1838, 706, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(1319, 926, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(1389, 926, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(3184, 839, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(3185, 808, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+
+	------ UTILITY CRATE LIST ------
+	tempG = SpawnUtilityCrate(3677, 412, amJetpack)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amJetpack")
+	tempG = SpawnUtilityCrate(3079, 1007, amExtraTime)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amExtraTime")
+	tempG = SpawnUtilityCrate(3138, 1007, amExtraTime)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amExtraTime")
+	tempG = SpawnUtilityCrate(420, 929, amExtraTime)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amExtraTime")
+
+	------ BARREL LIST ------
+
+	------ MINE LIST ------
+	SetTimer(AddGear(481, 1603, gtMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(485, 1835, gtMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(325, 1759, gtMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(244, 1941, gtMine, 0, 0, 0, 0), 1)
+
+	------ STICKY MINE LIST ------
+	tempG = AddGear(226, 270, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(264, 269, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(309, 268, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(340, 268, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(175, 296, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(148, 325, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(121, 356, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(100, 381, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(202, 1352, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(280, 1352, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(359, 1353, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(439, 1353, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(531, 1354, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(744, 1348, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(833, 1348, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(931, 1347, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(990, 1347, gtSMine, 0, 0, 0, 0)
+
+	------ AIR MINE LIST ------
+	SetTimer(AddGear(3195, 1621, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3155, 1655, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3112, 1691, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3078, 1730, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3044, 1764, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3011, 1805, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2998, 1843, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2986, 1886, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2978, 1937, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(733, 1753, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3345, 1773, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3332, 1806, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3317, 1840, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3302, 1873, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3262, 1902, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3237, 1937, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(3225, 1978, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1272, 1839, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(863, 1776, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(712, 1902, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2361, 1922, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2360, 1877, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2362, 1825, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2364, 1772, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2364, 1723, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2362, 1670, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2395, 1645, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2426, 1600, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2434, 1543, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2435, 1480, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2406, 1431, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2362, 1392, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2313, 1368, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2249, 1359, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2202, 1386, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2151, 1434, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1039, 1861, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2154, 1946, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2156, 1902, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2155, 1840, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2152, 1777, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2161, 1724, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2128, 1681, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2094, 1442, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2036, 1448, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1976, 1450, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1924, 1454, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2082, 1685, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(2046, 1692, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1999, 1696, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1961, 1701, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1939, 1737, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1925, 1783, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1916, 1821, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1904, 1864, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1888, 1913, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1870, 1961, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1100, 1660, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1876, 1486, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1826, 1533, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1799, 1580, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1784, 1637, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1765, 1681, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1755, 1718, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1726, 1779, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1718, 1836, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1705, 1885, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1696, 1934, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1685, 1975, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(859, 1569, gtAirMine, 0, 0, 0, 0), 1)
+
+
+--IF NEEDED, YOU CAN PASTE THIS DATA INTO HWMAP CONVERTER
+--[[
+
+	3699 436 116
+	934 806 106
+	934 969 106
+	1233 1342 105
+	1377 1403 104
+	1497 1376 103
+	2816 1284 115
+	2698 1401 115
+	2640 1552 114
+	2640 1718 114
+	2641 1881 114
+	2643 2007 110
+	3823 363 100
+	233 596 114
+	288 446 115
+	79 642 114
+	80 479 114
+	140 335 115
+	281 268 112
+	343 334 110
+	57 747 111
+	32 852 114
+	33 1015 114
+	33 1179 114
+	34 1342 114
+	1346 1939 114
+	1347 1774 114
+	1294 1636 113
+	1180 1522 113
+	1067 1410 113
+	931 1357 112
+	772 1358 112
+	96 1303 113
+	236 1362 112
+	396 1363 112
+	520 1364 108
+	696 1450 114
+	556 1454 114
+	489 1598 115
+	697 1574 110
+	639 1681 115
+	520 1798 115
+	369 1715 115
+	243 1716 113
+	128 1735 115
+	133 1870 113
+	251 1987 113
+	402 1915 115
+	276 1938 112
+	95 140 112
+	257 140 112
+	419 140 112
+	581 140 112
+	742 140 112
+	903 140 112
+	1064 141 112
+	1157 90 114
+	3433 237 127
+	3581 185 124
+	3741 182 124
+	3879 257 125
+	3921 411 126
+	3844 555 127
+	3692 615 124
+	3529 618 124
+	3381 555 125
+	3282 289 124
+	3223 514 124
+	3111 289 124
+	3058 516 124
+	2947 287 124
+	2889 515 124
+	2785 288 124
+	2788 578 126
+	2790 741 126
+	2862 884 125
+	2749 1073 125
+	2865 1186 125
+	2979 990 125
+	3123 1036 124
+	3188 934 126
+	3010 1234 124
+	3175 1230 124
+	3339 1226 124
+	3345 949 126
+	3405 804 127
+	3531 702 127
+	3444 1007 124
+	3499 1221 124
+	3604 1002 124
+	3755 1038 125
+	3802 1186 126
+	3741 1342 127
+	3626 1456 127
+	3510 1314 127
+	3392 1435 127
+	3506 1577 127
+	2637 348 127
+	2583 496 126
+	2633 952 125
+	2573 803 126
+	2474 556 124
+	2468 742 124
+	2335 476 125
+	2214 358 125
+	2322 812 127
+	2202 936 127
+	2060 305 124
+	1898 304 124
+	1736 304 124
+	2085 1049 127
+	1966 1161 127
+	1818 1209 124
+	1657 1212 124
+	1947 685 127
+	1801 735 124
+	1659 677 125
+	1491 902 127
+	1346 955 124
+	1210 881 125
+	1576 305 124
+	1414 304 124
+	1253 302 124
+	1108 374 127
+	991 491 127
+	1557 1273 126
+	938 639 126
+	999 1117 125
+	847 1079 124
+	831 702 124
+	667 702 124
+	687 1084 124
+	1115 1230 125
+	566 764 126
+	525 1083 124
+	422 1024 126
+	464 703 124
+	302 704 124
+	297 795 126
+	316 1089 124
+	1559 1436 126
+	1560 1598 126
+	1560 1759 126
+	1561 1920 126
+	1620 2022 124
+	3388 1688 127
+	3276 1546 127
+	3820 342 0
+	3343 1612 0
+	272 351 0
+	159 1774 0
+	2248 1573 0
+	1379 1192 0
+	1757 706 20
+	1838 706 20
+	1319 926 20
+	1389 926 20
+	3184 839 20
+	3185 808 20
+	3677 412 67
+	3079 1007 73
+	3138 1007 73
+	420 929 73
+	481 1603 1
+	485 1835 1
+	325 1759 1
+	244 1941 1
+	226 270 7
+	264 269 7
+	309 268 7
+	340 268 7
+	175 296 7
+	148 325 7
+	121 356 7
+	100 381 7
+	202 1352 7
+	280 1352 7
+	359 1353 7
+	439 1353 7
+	531 1354 7
+	744 1348 7
+	833 1348 7
+	931 1347 7
+	990 1347 7
+	3195 1621 8
+	3155 1655 8
+	3112 1691 8
+	3078 1730 8
+	3044 1764 8
+	3011 1805 8
+	2998 1843 8
+	2986 1886 8
+	2978 1937 8
+	733 1753 8
+	3345 1773 8
+	3332 1806 8
+	3317 1840 8
+	3302 1873 8
+	3262 1902 8
+	3237 1937 8
+	3225 1978 8
+	1272 1839 8
+	863 1776 8
+	712 1902 8
+	2361 1922 8
+	2360 1877 8
+	2362 1825 8
+	2364 1772 8
+	2364 1723 8
+	2362 1670 8
+	2395 1645 8
+	2426 1600 8
+	2434 1543 8
+	2435 1480 8
+	2406 1431 8
+	2362 1392 8
+	2313 1368 8
+	2249 1359 8
+	2202 1386 8
+	2151 1434 8
+	1039 1861 8
+	2154 1946 8
+	2156 1902 8
+	2155 1840 8
+	2152 1777 8
+	2161 1724 8
+	2128 1681 8
+	2094 1442 8
+	2036 1448 8
+	1976 1450 8
+	1924 1454 8
+	2082 1685 8
+	2046 1692 8
+	1999 1696 8
+	1961 1701 8
+	1939 1737 8
+	1925 1783 8
+	1916 1821 8
+	1904 1864 8
+	1888 1913 8
+	1870 1961 8
+	1100 1660 8
+	1876 1486 8
+	1826 1533 8
+	1799 1580 8
+	1784 1637 8
+	1765 1681 8
+	1755 1718 8
+	1726 1779 8
+	1718 1836 8
+	1705 1885 8
+	1696 1934 8
+	1685 1975 8
+	859 1569 8]]
+
+	else
+
+		-- the first test epic multi map
+		-- default to this crazy shit
+		---------- GIRDER LIST---------
+		LoadSprite(430, 1871, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1249, 1914, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1394, 1849, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1522, 1848, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1578, 1959, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1545, 2011, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(430, 1749, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(430, 1589, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(358, 1499, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(198, 1499, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(72, 1571, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(339, 1618, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(520, 1499, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(680, 1499, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(839, 1499, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1000, 1499, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1404, 1730, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1288, 1613, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1200, 1529, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1125, 1495, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1667, 2011, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1812, 1951, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1964, 2024, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1957, 1892, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2103, 1949, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2242, 2017, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2404, 2017, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2548, 1955, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2635, 1871, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2749, 1836, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2751, 1999, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2749, 1947, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2865, 1870, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2954, 1954, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3061, 2017, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3137, 1984, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3169, 1864, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3169, 1702, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3170, 1540, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3170, 1418, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3138, 1339, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3107, 1260, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3153, 1194, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3230, 1163, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3305, 1201, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3334, 1277, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3227, 1540, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3228, 1419, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3334, 1358, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3280, 1387, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3227, 1702, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3227, 1864, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3253, 1981, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3366, 2017, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3528, 2018, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3689, 2018, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(246, 1262, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(407, 1262, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(568, 1262, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(731, 1262, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(894, 1261, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1056, 1261, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1179, 1262, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1288, 1314, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1406, 1433, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1525, 1549, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1642, 1666, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1749, 1728, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1956, 1802, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1956, 1640, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1782, 1638, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1835, 1487, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1942, 1430, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2051, 1486, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2109, 1639, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2177, 1778, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2323, 1840, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(49, 1029, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(499, 1172, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(527, 1054, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(604, 1026, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(680, 1056, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(719, 1168, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(89, 728, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(251, 728, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(412, 728, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(572, 728, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(733, 728, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(894, 728, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1016, 728, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1067, 799, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1139, 891, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1067, 1171, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1067, 1049, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1136, 999, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1005, 854, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(972, 803, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(920, 780, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(891, 1206, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(887, 1150, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3018, 1311, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2871, 1369, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2809, 1523, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2809, 1647, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2469, 1777, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2612, 1715, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2809, 1702, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2727, 1694, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+
+		LoadSprite(3334, 1481, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3334, 1643, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3334, 1804, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3403, 1940, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1120, 944, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1163, 945, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1141, 781, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(81, 629, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(102, 498, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(81, 373, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(179, 453, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(100, 260, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(179, 330, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(249, 544, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(410, 545, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(571, 543, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(731, 543, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(891, 544, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1014, 544, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1779, 1321, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1779, 1159, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1779, 997, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1779, 836, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1722, 684, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1137, 545, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1298, 545, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1460, 546, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1608, 600, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1508, 1005, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(160, 246, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1821, 1356, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1938, 1323, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2086, 1381, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(4004, 2018, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3934, 1926, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3965, 1835, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(4015, 1763, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(4015, 1603, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(4015, 1442, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(4015, 1280, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(4014, 1118, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(4014, 956, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(4014, 793, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(4014, 632, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(4014, 469, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3981, 351, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3985, 204, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(4045, 156, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3667, 344, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(4016, 1925, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3998, 1926, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3980, 1925, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3957, 1926, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3843, 1832, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3682, 1832, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3561, 1833, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3484, 1796, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3455, 1675, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3455, 1513, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3455, 1351, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1601, 476, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1706, 421, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1888, 366, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+
+		LoadSprite(3997, 1743, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3979, 1742, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3962, 1741, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3943, 1741, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2199, 393, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2304, 337, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2409, 392, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2470, 502, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2412, 606, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2308, 673, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2202, 612, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2138, 507, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2739, 378, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2847, 322, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2953, 378, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2680, 489, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3012, 489, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2736, 594, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2841, 657, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2949, 594, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2448, 837, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2594, 779, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2739, 836, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2390, 950, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2789, 950, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2593, 904, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2727, 1056, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2452, 1058, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2510, 1215, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2663, 1208, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2510, 1378, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2664, 1369, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(300, 275, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(439, 274, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(628, 273, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(811, 271, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(737, 373, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(934, 440, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1075, 439, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1209, 438, sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1383, 439, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3547, 344, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3584, 254, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3508, 132, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3335, 1117, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3335, 956, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3335, 795, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3335, 634, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3335, 513, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3401, 404, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3455, 1190, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3455, 1029, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3455, 868, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3455, 705, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3455, 582, sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3485, 503, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3601, 475, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3719, 444, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3094, 828, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(2064, 947, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(1826, 512, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+
+		LoadSprite(3420, 49, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(410, 682, sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(528, 653, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(688, 653, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(805, 684, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(528, 672, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(688, 672, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(500, 696, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(701, 696, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+
+		------ WAYPOINT LIST ------
+		AddWayPoint(383, 1595)
+		AddWayPoint(605, 1157)
+		AddWayPoint(2296, 517)
+		AddWayPoint(2841, 497)
+		AddWayPoint(3209, 1286)
+		AddWayPoint(3708, 1945)
+		AddWayPoint(4075, 1887)
+
+		------ AMMO CRATE LIST ------
+		tempG = SpawnAmmoCrate(889, 1126, amBaseballBat)
+		tempG = SpawnAmmoCrate(1211, 975, amSineGun)
+		tempG = SpawnAmmoCrate(3619, 451, amFirePunch)
+
+		------ UTILITY CRATE LIST ------
+		tempG = SpawnUtilityCrate(304, 1594, amRope)
+		tempG = SpawnUtilityCrate(1538, 1987, amJetpack)
+		tempG = SpawnUtilityCrate(1958, 2000, amExtraTime)
+		tempG = SpawnUtilityCrate(2744, 1923, amJetpack)
+		tempG = SpawnUtilityCrate(3283, 1363, amParachute)
+		tempG = SpawnUtilityCrate(2749, 1812, amRope)
+		tempG = SpawnUtilityCrate(970, 779, amJetpack)
+
+		tempG = SpawnUtilityCrate(3284, 1332, amExtraTime)
+		tempG = SpawnUtilityCrate(1082, 975, amBlowTorch)
+		tempG = SpawnUtilityCrate(1547, 981, amJetpack)
+		tempG = SpawnUtilityCrate(1707, 397, amRope)
+		tempG = SpawnUtilityCrate(2309, 649, amExtraTime)
+		tempG = SpawnUtilityCrate(1116, 867, amExtraTime)
+
+		------ AMMO CRATE LIST ------
+		tempG = SpawnAmmoCrate(2559, 880, amBazooka)
+		tempG = SpawnAmmoCrate(2630, 880, amBazooka)
+		tempG = SpawnAmmoCrate(1951, 1406, amGrenade)
+
+		------ UTILITY CRATE LIST ------
+		tempG = SpawnUtilityCrate(3536, 320, amBlowTorch)
+		tempG = SpawnUtilityCrate(3582, 1994, amJetpack)
+		tempG = SpawnUtilityCrate(682, 349, amExtraTime)
+		tempG = SpawnUtilityCrate(2842, 633, amExtraTime)
+
+		------ BARREL LIST ------
+		SetHealth(AddGear(506, 1034, gtExplosives, 0, 0, 0, 0), 1)
+		SetHealth(AddGear(556, 1002, gtExplosives, 0, 0, 0, 0), 1)
+		SetHealth(AddGear(615, 1002, gtExplosives, 0, 0, 0, 0), 1)
+		SetHealth(AddGear(676, 1010, gtExplosives, 0, 0, 0, 0), 1)
+		SetHealth(AddGear(716, 1050, gtExplosives, 0, 0, 0, 0), 1)
+		SetHealth(AddGear(67, 1005, gtExplosives, 0, 0, 0, 0), 50)
+
+		------ MINE LIST ------
+		SetTimer(AddGear(1187, 1908, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1235, 1908, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1283, 1908, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1323, 1908, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1361, 1875, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1399, 1837, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1426, 1810, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(234, 1493, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(308, 1493, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(377, 1493, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(460, 1493, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(550, 1493, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(633, 1493, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(722, 1493, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(795, 1493, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(881, 1493, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(975, 1493, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1060, 1493, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1127, 1489, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1207, 1526, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1261, 1580, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1315, 1634, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1372, 1692, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1416, 1736, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1465, 1792, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1518, 1838, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1566, 1886, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1623, 2005, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1686, 2005, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1799, 1957, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1839, 1917, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1902, 1886, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1933, 1886, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2076, 1916, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2138, 1978, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2221, 2011, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2305, 2011, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2390, 2011, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2578, 1918, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2494, 2002, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1758, 1728, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1683, 1707, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1635, 1657, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1572, 1596, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1517, 1542, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1447, 1477, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1401, 1432, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1338, 1365, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1290, 1310, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1230, 1266, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1149, 1260, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1054, 1257, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(978, 1257, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(895, 1258, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(819, 1257, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(753, 1258, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(671, 1260, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(599, 1260, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(526, 1259, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(466, 1259, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(408, 1261, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(336, 1260, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(290, 1259, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(218, 1260, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1777, 1263, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1776, 1198, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1778, 1141, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1781, 1078, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1778, 1027, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1778, 985, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1779, 925, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1777, 882, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(4052, 2010, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3965, 226, gtMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3962, 326, gtMine, 0, 0, 0, 0), 1)
+
+		------ STICKY MINE LIST ------
+		tempG = AddGear(3170, 1907, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3170, 1860, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3169, 1809, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3170, 1761, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3170, 1711, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3172, 1668, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3170, 1624, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3169, 1579, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3171, 1526, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3168, 1469, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3171, 1418, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3227, 1416, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3226, 1465, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3225, 1523, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3224, 1576, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3225, 1624, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3228, 1667, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3228, 1707, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3230, 1757, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3228, 1803, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3229, 1856, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3228, 1910, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(258, 534, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(329, 534, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(410, 535, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(482, 535, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(565, 533, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(670, 533, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(763, 533, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(858, 534, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(917, 534, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(1012, 534, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(1147, 535, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(1102, 535, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(1220, 535, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(1293, 535, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(1368, 535, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(1440, 536, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(223, 534, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(814, 534, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3909, 1822, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3867, 1822, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3824, 1822, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3784, 1822, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3732, 1822, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3682, 1822, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3627, 1822, gtSMine, 0, 0, 0, 0)
+		tempG = AddGear(3557, 1823, gtSMine, 0, 0, 0, 0)
+	end
+
+
+end
+
+	--[[
+	-----------------------------------------------------------------
+	-- not really a racing map, just a simple testmap that contains
+	-- a bunch of different stuff to test HWMAP conversion
+	--still lacks waypoints
+	-- currently disabled because it's only really used to test stuff
+	------ GIRDER LIST ------
+	LoadSprite(366, 540, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(312, 696, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(377, 837, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(513, 485, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(657, 550, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(712, 704, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(655, 848, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(512, 913, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+	LoadSprite(1044, 530, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(968, 623, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1125, 623, sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(1042, 716, sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible)
+	LoadSprite(844, 613, sprAmGirder, 4, 16448250, nil, nil, nil, lfIce)
+	LoadSprite(118, 425, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+
+	------ RUBBER BAND LIST ------
+	LoadSprite(688, 957, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(804, 1070, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(921, 1182, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1036, 1299, sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1184, 1349, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1348, 1345, sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1490, 1278, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1601, 1161, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+	LoadSprite(1712, 1044, sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy)
+
+	------ LAND SPRITE LIST ------
+
+	------ HEALTH CRATE LIST ------
+	SetHealth(SpawnHealthCrate(694, 553), 25)
+
+	------ AMMO CRATE LIST ------
+	tempG = SpawnAmmoCrate(463, 461, amBazooka)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amBazooka")
+	tempG = SpawnAmmoCrate(579, 461, amWatermelon)
+	setGearValue(tempG,"caseType", "ammo")
+	setGearValue(tempG,"contents", "amWatermelon")
+
+	------ UTILITY CRATE LIST ------
+	tempG = SpawnUtilityCrate(367, 500, amBlowTorch)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amBlowTorch")
+	tempG = SpawnUtilityCrate(638, 493, amExtraTime)
+	setGearValue(tempG,"caseType", "util")
+	setGearValue(tempG,"contents", "amExtraTime")
+
+	------ BARREL LIST ------
+	SetHealth(AddGear(140, 409, gtExplosives, 0, 0, 0, 0), 1)
+
+	------ MINE LIST ------
+	SetTimer(AddGear(1016, 520, gtMine, 0, 0, 0, 0), 3000)
+	SetTimer(AddGear(1057, 520, gtMine, 0, 0, 0, 0), 3000)
+	SetTimer(AddGear(1104, 520, gtMine, 0, 0, 0, 0), 3000)
+
+	------ STICKY MINE LIST ------
+	tempG = AddGear(311, 651, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(311, 686, gtSMine, 0, 0, 0, 0)
+	tempG = AddGear(308, 729, gtSMine, 0, 0, 0, 0)
+
+	------ AIR MINE LIST ------
+	SetTimer(AddGear(1023, 600, gtAirMine, 0, 0, 0, 0), 1)
+	SetTimer(AddGear(1073, 657, gtAirMine, 0, 0, 0, 0), 1)
+
+	------ TARGET LIST ------
+	tempG = AddGear(485, 895, gtTarget, 0, 0, 0, 0)
+
+	------ CLEAVER LIST ------
+	tempG = AddGear(560, 898, gtKnife, 0, 0, 0, 0)]]
+
+
+
+
+
+
+	--[[
+		------------------------------------------
+		-- tiny airmine explosion knock concept test
+		-- currently won't play nicely with others
+		-- removed because it is small and boring
+		------ GIRDER LIST ------
+		LoadSprite(3942, 116, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3999, 270, sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3925, 407, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3777, 470, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3791, 65, sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3644, 121, sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal)
+		LoadSprite(3629, 413, sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal)
+
+		------ AMMO CRATE LIST ------
+		tempG = SpawnAmmoCrate(3772, 446, amWatermelon)
+		tempG = SpawnAmmoCrate(3769, 415, amWatermelon)
+		tempG = SpawnAmmoCrate(3773, 384, amWatermelon)
+		tempG = SpawnAmmoCrate(3771, 353, amWatermelon)
+		tempG = SpawnAmmoCrate(3770, 322, amWatermelon)
+		tempG = SpawnAmmoCrate(3775, 291, amWatermelon)
+		tempG = SpawnAmmoCrate(3776, 260, amWatermelon)
+		tempG = SpawnAmmoCrate(3775, 229, amWatermelon)
+		tempG = SpawnAmmoCrate(3772, 198, amWatermelon)
+		tempG = SpawnAmmoCrate(3776, 167, amWatermelon)
+
+		------ UTILITY CRATE LIST ------
+		tempG = SpawnUtilityCrate(3723, 446, amJetpack)
+		tempG = SpawnUtilityCrate(3725, 415, amJetpack)
+		tempG = SpawnUtilityCrate(3814, 446, amJetpack)
+		tempG = SpawnUtilityCrate(3814, 415, amJetpack)
+		tempG = SpawnUtilityCrate(3815, 384, amJetpack)
+		tempG = SpawnUtilityCrate(3728, 384, amJetpack)
+
+		------ AIR MINE LIST ------
+		SetTimer(AddGear(3489, 110, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3509, 366, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3399, 114, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3438, 383, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3322, 113, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3369, 384, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3290, 379, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3253, 112, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3178, 111, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3228, 375, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3173, 384, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3115, 118, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3039, 126, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2954, 139, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3121, 404, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2918, 414, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2880, 144, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2815, 146, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2731, 140, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2867, 408, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2802, 394, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2733, 392, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2661, 392, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2672, 147, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2608, 144, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2558, 117, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2495, 86, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2425, 49, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2373, 79, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2313, 104, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2256, 156, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2218, 226, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2205, 318, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2218, 419, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2255, 479, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2290, 522, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2343, 557, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2413, 540, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2500, 514, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2572, 471, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2618, 436, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2926, 478, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2926, 548, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2924, 615, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3126, 472, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3128, 553, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3136, 623, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3139, 683, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2927, 657, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2919, 720, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3132, 746, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2920, 771, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3137, 798, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2926, 820, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3140, 848, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(945, 441, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(900, 477, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(899, 540, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(915, 631, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1013, 616, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(970, 533, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1062, 458, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1060, 537, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1094, 640, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1029, 692, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(928, 718, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(831, 592, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(860, 666, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(823, 493, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1032, 427, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(953, 351, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(845, 375, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1101, 326, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1128, 565, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1126, 446, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1208, 703, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1139, 726, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1024, 777, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(918, 775, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(812, 758, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3171, 887, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3222, 939, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3273, 977, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3330, 1011, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3401, 1051, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2928, 899, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2935, 966, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2959, 1021, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2999, 1077, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3050, 1136, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3108, 1184, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3159, 1221, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3214, 1243, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3289, 1279, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3453, 1087, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3515, 1136, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3566, 1202, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3604, 1275, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3618, 1345, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3608, 1436, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3582, 1505, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3528, 1565, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3456, 1610, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3368, 1651, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3289, 1666, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3205, 1668, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3132, 1672, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3270, 1325, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3192, 1346, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3140, 1346, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3067, 1359, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2997, 1373, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2918, 1391, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2839, 1406, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3078, 1672, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(3019, 1659, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2936, 1667, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(2859, 1675, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(975, 722, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(967, 636, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1078, 687, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(868, 740, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(863, 453, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1010, 494, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1080, 590, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(869, 589, gtAirMine, 0, 0, 0, 0), 1)
+		SetTimer(AddGear(1013, 569, gtAirMine, 0, 0, 0, 0), 1)]]
Binary file share/hedgewars/Data/Themes/Art/Border.png has changed
Binary file share/hedgewars/Data/Themes/Art/Girder.png has changed
Binary file share/hedgewars/Data/Themes/Art/Sky.png has changed
Binary file share/hedgewars/Data/Themes/Art/horizont.png has changed
--- a/share/hedgewars/Data/Themes/Art/theme.cfg	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Themes/Art/theme.cfg	Mon Nov 09 18:37:57 2015 +0100
@@ -1,5 +1,5 @@
-sky = 7, 13, 40
-border = 13, 17, 22
+sky = 23, 8, 33
+border = 7, 72, 102
 water-top = $01, $3b, $66
 water-bottom = $01, $3b, $66
 water-opacity = $80
Binary file share/hedgewars/Data/Themes/Cake/horizont.png has changed
--- a/share/hedgewars/Data/Themes/Olympics/theme.cfg	Sun Apr 26 13:02:38 2015 +0100
+++ b/share/hedgewars/Data/Themes/Olympics/theme.cfg	Mon Nov 09 18:37:57 2015 +0100
@@ -4,6 +4,7 @@
 water-bottom = $34, $3C, $7D
 water-opacity = $80
 music = Olympics.ogg
+sd-music = olympics_sd.ogg
 clouds = 9
 object = Statue, 3, 42, 258, 115, 2, 1, 0, 0, 165, 240
 object = Column01, 3, 21, 258, 80, 2, 1, 0, 0, 110, 240
--- a/tools/CMakeLists.txt	Sun Apr 26 13:02:38 2015 +0100
+++ b/tools/CMakeLists.txt	Mon Nov 09 18:37:57 2015 +0100
@@ -6,8 +6,9 @@
     add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
 endif()
 
-if(APPLE)
+if(APPLE AND NOT SKIPBUNDLE)
     find_package(Qt4 REQUIRED QUIET)
+    find_package(PNG REQUIRED)
     find_package(SDL REQUIRED)
     find_package(SDL_image REQUIRED)
     find_package(SDL_net REQUIRED)
@@ -29,12 +30,12 @@
 
     #remove the ";-framework Cocoa" from the SDL_LIBRARY variable
     string(REGEX REPLACE "(.*);-.*" "\\1" sdl_library_only "${SDL_LIBRARY}")
+    #remove the "libSDLmain.a" from the SDL_LIBRARY variable
+    string(REGEX REPLACE ".*;(.*)" "\\1" sdl_library_only "${sdl_library_only}")
 
-    if(NOT NOPNG)
-        #get the neme of the library (harmelss if it is static)
-        string(REGEX REPLACE ".*/(.*)$" "\\1" PNG_LIBNAME "${PNG_LIBRARY}")
-        string(REGEX REPLACE ".*/(.*)$" "\\1" ZLIB_LIBNAME "${ZLIB_LIBRARY}")
-    endif()
+    #get the neme of the library (harmelss if it is static)
+    string(REGEX REPLACE ".*/(.*)$" "\\1" PNG_LIBNAME "${PNG_LIBRARY}")
+    string(REGEX REPLACE ".*/(.*)$" "\\1" ZLIB_LIBNAME "${ZLIB_LIBRARY}")
 
     set(frameworks_dir ${CMAKE_INSTALL_PREFIX}/${target_library_install_dir})
     if(${BUILD_ENGINE_LIBRARY})
@@ -57,7 +58,7 @@
 
     #create the .dmg for deployment
     #first make sure .app exists, then remove any old .dmg with same name, finally run the script
-    add_custom_target(dmg COMMAND "if [ ! -a Hedgewars.app ]; then make install\; fi;"
+    add_custom_target(dmg COMMAND make install
                           COMMAND rm -f ${CMAKE_BINARY_DIR}/Hedgewars-${HEDGEWARS_VERSION}.dmg
                           COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/create-dmg.sh
                                   --volname "Hedgewars ${HEDGEWARS_VERSION}"
--- a/tools/hwmap.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/tools/hwmap.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -1,164 +1,164 @@
-module Main where
-
-import qualified Data.ByteString.Char8 as B
-import qualified Data.ByteString as BW
-import qualified Data.ByteString.Lazy as BL
-import qualified Codec.Binary.Base64 as Base64
-import Data.Word
-import Data.Int
-import Data.Binary
-import Data.Binary.Put
-import Data.Bits
-import Control.Monad
-import qualified Codec.Compression.Zlib as Z
-
-data LineType = Solid | Erasing
-    deriving Eq
-
-data Chunk = SpecialPoints [(Int16, Int16)]
-    | Line LineType Word8 [(Int16, Int16)]
-
-transform :: ((Int16, Int16) -> (Int16, Int16)) -> [Chunk] -> [Chunk]
-transform f = map tf
-    where
-    tf (SpecialPoints p) = SpecialPoints $ map f p
-    tf (Line t r p) = Line t r $ map f p
-
-scale f = transform (\(a, b) -> (a * f, b * f))
-mirror = transform (\(a, b) -> (4095 - a, b))
-flip' = transform (\(a, b) -> (a, 2047 - b))
-translate dx dy = transform (\(a, b) -> (a + dx, b + dy))
-
-instance Binary Chunk where
-    put (SpecialPoints p) = do
-        forM_ p $ \(x, y) -> do
-            put x
-            put y
-            putWord8 0
-    put (Line lt r ((x1, y1):ps)) = do
-        let flags = r .|. (if lt == Solid then 0 else (1 `shift` 6))
-        put x1
-        put y1
-        putWord8 $ flags .|. (1 `shift` 7)
-        forM_ ps $ \(x, y) -> do
-            put x
-            put y
-            putWord8 flags
-    get = undefined
-
-compressWithLength :: BL.ByteString -> BL.ByteString
-compressWithLength b = BL.drop 8 . encode . runPut $ do
-    put $ ((fromIntegral $ BL.length b)::Word32)
-    mapM_ putWord8 $ BW.unpack $ BL.toStrict $ Z.compress b
-
-mapString :: B.ByteString
-mapString = B.pack . Base64.encode . BW.unpack . BL.toStrict . compressWithLength . BL.drop 8 . encode $ drawnMap05
-
-main = B.writeFile "out.hwmap" mapString
-
-drawnMap01 = translate (-3) (-3) $ sp ++ mirror sp ++ base ++ mirror base
-    where
-    sp = translate 128 128 . scale 256 $ [SpecialPoints [
-        (6, 0)
-        , (1, 4)
-        , (4, 7)
-        , (7, 5)
-        ]]
-    base = scale 256 $ [
-        l [(5, 0), (5, 1)]
-        , l [(7, 0), (7, 1)]
-        , l [(8, 1), (6, 1), (6, 4)]
-        , l [(8, 1), (8, 6), (6, 6), (6, 7), (8, 7)]
-        , l [(7, 2), (7, 5), (5, 5)]
-        , l [(5, 3), (5, 8)]
-        , l [(6, 2), (4, 2)]
-        , l [(1, 1), (4, 1), (4, 7)]
-        , l [(3, 5), (3, 7), (2, 7), (2, 8)]
-        , l [(2, 1), (2, 2)]
-        , l [(0, 2), (1, 2), (1, 3), (3, 3), (3, 2)]
-        , l [(0, 5), (1, 5)]
-        , l [(1, 4), (4, 4)]
-        , l [(2, 4), (2, 6), (1, 6), (1, 7)]
-        , l [(0, 8), (8, 8)]
-        ]
-    l = Line Solid 0
-
-drawnMap02 = translate (-3) (-3) $ sp ++ mirror sp ++ base ++ mirror base
-    where
-    sp = translate 128 128 . scale 256 $ [SpecialPoints [
-        (7, 0)
-        , (7, 7)
-        ]]
-    base = scale 256 $ [
-        l [(8, 0), (8, 1), (1, 1)]
-        , l [(2, 1), (2, 2), (3, 2), (3, 3), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6), (7, 6), (7, 7), (7, 1)]
-        , l [(0, 2), (1, 2), (1, 3), (2, 3), (2, 4), (3, 4), (3, 5), (4, 5), (4, 6), (5, 6), (5, 7), (6, 7), (6, 8), (8, 8), (8, 2)]
-        ]
-    l = Line Solid 0
-
-
-drawnMap03 = translate (-3) (-3) $ sp ++ mirror sp ++ base ++ mirror base
-    where
-    sp = translate 128 128 . scale 256 $ [SpecialPoints [
-        (3, 1)
-        , (2, 4)
-        ]]
-    base = scale 256 $ [
-        l [(6, 0), (6, 1)]
-        , l [(1, 1), (5, 1)]
-        , l [(4, 1), (4, 2), (3, 2)]
-        , l [(0, 2), (1, 2), (1, 4)]
-        , l [(0, 4), (3, 4), (3, 3), (5, 3), (5, 2), (7, 2)]
-        , l [(7, 1), (7, 3)]
-        , l [(8, 0), (8, 4), (4, 4), (4, 5), (1, 5), (1, 6)]
-        , l [(6, 3), (6, 4)]
-        , l [(0, 8), (8, 8)]
-        , l [(1, 7), (1, 8)]
-        , l [(2, 7), (2, 5)]
-        , l [(3, 6), (3, 5)]
-        , l [(3, 7), (3, 8)]
-        , l [(4, 6), (4, 8)]
-        , l [(5, 4), (5, 6)]
-        , l [(5, 7), (5, 8)]
-        , l [(6, 5), (6, 8)]
-        , l [(7, 4), (7, 6)]
-        , l [(7, 7), (7, 8)]
-        , l [(8, 5), (8, 8)]
-        ]
-    l = Line Solid 0
-
-drawnMap04 = translate (-3) (-3) $ sp ++ fm sp ++ base ++ fm base
-    where
-    sp = translate 128 128 . scale 256 $ [SpecialPoints [
-        (7, 7)
---        , (6, 6)
-        , (3, 3)
-        , (0, 6)
-        , (3, 6)
-        ]]
-    base = scale 256 $ [
-        l [(1, 2), (3, 2), (3, 1), (4, 1), (4, 2), (6, 2), (6, 4), (7, 4), (7, 5), (8, 5), (8, 8)]
-        , l [(0, 0), (16, 0)]
-        , l [(1, 5), (3, 5), (3, 7), (1, 7), (1, 5)]
-        , l [(4, 5), (6, 5), (6, 7), (4, 7), (4, 5)]
-        , l [(0, 4), (2, 4), (2, 3), (5, 3), (5, 4)]
-        , l [(6, 1), (6, 2), (7, 2)]
-        , l [(7, 1), (8, 1)]
-        , l [(7, 3), (8, 3)]
-        , l [(3, 4), (4, 4)]
-        , l [(7, 6), (7, 8)]
-        , l [(2, 0), (2, 1)]
-        , l [(5, 0), (5, 1)]
-        ]
-    l = Line Solid 0
-    fm = flip' . mirror
-
-drawnMap05 = sp ++ fullFill ++ lW
-    where
-        w = 320
-        sh = 420
-        basePoints = [(w, w), (1024 + w `div` 2, 2048 - w), (2048, w), (3072 - w `div` 2, 2048 - w), (4096 - w, w)]
-        lW = [Line Erasing 60 basePoints]
-        sp = [SpecialPoints $ basePoints ++ [(1024 + w `div` 2, 2048 - w - sh), (3072 - w `div` 2, 2048 - w - sh), (2048, w + sh)]]
-
-fullFill = scale 256 $ [Line Solid 63 [(0, 1), (16, 1), (16, 3), (0, 3), (0, 5), (16, 5), (16, 7), (0, 7)]]
+module Main where
+
+import qualified Data.ByteString.Char8 as B
+import qualified Data.ByteString as BW
+import qualified Data.ByteString.Lazy as BL
+import qualified Codec.Binary.Base64 as Base64
+import Data.Word
+import Data.Int
+import Data.Binary
+import Data.Binary.Put
+import Data.Bits
+import Control.Monad
+import qualified Codec.Compression.Zlib as Z
+
+data LineType = Solid | Erasing
+    deriving Eq
+
+data Chunk = SpecialPoints [(Int16, Int16)]
+    | Line LineType Word8 [(Int16, Int16)]
+
+transform :: ((Int16, Int16) -> (Int16, Int16)) -> [Chunk] -> [Chunk]
+transform f = map tf
+    where
+    tf (SpecialPoints p) = SpecialPoints $ map f p
+    tf (Line t r p) = Line t r $ map f p
+
+scale f = transform (\(a, b) -> (a * f, b * f))
+mirror = transform (\(a, b) -> (4095 - a, b))
+flip' = transform (\(a, b) -> (a, 2047 - b))
+translate dx dy = transform (\(a, b) -> (a + dx, b + dy))
+
+instance Binary Chunk where
+    put (SpecialPoints p) = do
+        forM_ p $ \(x, y) -> do
+            put x
+            put y
+            putWord8 0
+    put (Line lt r ((x1, y1):ps)) = do
+        let flags = r .|. (if lt == Solid then 0 else (1 `shift` 6))
+        put x1
+        put y1
+        putWord8 $ flags .|. (1 `shift` 7)
+        forM_ ps $ \(x, y) -> do
+            put x
+            put y
+            putWord8 flags
+    get = undefined
+
+compressWithLength :: BL.ByteString -> BL.ByteString
+compressWithLength b = BL.drop 8 . encode . runPut $ do
+    put $ ((fromIntegral $ BL.length b)::Word32)
+    mapM_ putWord8 $ BW.unpack $ BL.toStrict $ Z.compress b
+
+mapString :: B.ByteString
+mapString = B.pack . Base64.encode . BW.unpack . BL.toStrict . compressWithLength . BL.drop 8 . encode $ drawnMap05
+
+main = B.writeFile "out.hwmap" mapString
+
+drawnMap01 = translate (-3) (-3) $ sp ++ mirror sp ++ base ++ mirror base
+    where
+    sp = translate 128 128 . scale 256 $ [SpecialPoints [
+        (6, 0)
+        , (1, 4)
+        , (4, 7)
+        , (7, 5)
+        ]]
+    base = scale 256 $ [
+        l [(5, 0), (5, 1)]
+        , l [(7, 0), (7, 1)]
+        , l [(8, 1), (6, 1), (6, 4)]
+        , l [(8, 1), (8, 6), (6, 6), (6, 7), (8, 7)]
+        , l [(7, 2), (7, 5), (5, 5)]
+        , l [(5, 3), (5, 8)]
+        , l [(6, 2), (4, 2)]
+        , l [(1, 1), (4, 1), (4, 7)]
+        , l [(3, 5), (3, 7), (2, 7), (2, 8)]
+        , l [(2, 1), (2, 2)]
+        , l [(0, 2), (1, 2), (1, 3), (3, 3), (3, 2)]
+        , l [(0, 5), (1, 5)]
+        , l [(1, 4), (4, 4)]
+        , l [(2, 4), (2, 6), (1, 6), (1, 7)]
+        , l [(0, 8), (8, 8)]
+        ]
+    l = Line Solid 0
+
+drawnMap02 = translate (-3) (-3) $ sp ++ mirror sp ++ base ++ mirror base
+    where
+    sp = translate 128 128 . scale 256 $ [SpecialPoints [
+        (7, 0)
+        , (7, 7)
+        ]]
+    base = scale 256 $ [
+        l [(8, 0), (8, 1), (1, 1)]
+        , l [(2, 1), (2, 2), (3, 2), (3, 3), (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6), (7, 6), (7, 7), (7, 1)]
+        , l [(0, 2), (1, 2), (1, 3), (2, 3), (2, 4), (3, 4), (3, 5), (4, 5), (4, 6), (5, 6), (5, 7), (6, 7), (6, 8), (8, 8), (8, 2)]
+        ]
+    l = Line Solid 0
+
+
+drawnMap03 = translate (-3) (-3) $ sp ++ mirror sp ++ base ++ mirror base
+    where
+    sp = translate 128 128 . scale 256 $ [SpecialPoints [
+        (3, 1)
+        , (2, 4)
+        ]]
+    base = scale 256 $ [
+        l [(6, 0), (6, 1)]
+        , l [(1, 1), (5, 1)]
+        , l [(4, 1), (4, 2), (3, 2)]
+        , l [(0, 2), (1, 2), (1, 4)]
+        , l [(0, 4), (3, 4), (3, 3), (5, 3), (5, 2), (7, 2)]
+        , l [(7, 1), (7, 3)]
+        , l [(8, 0), (8, 4), (4, 4), (4, 5), (1, 5), (1, 6)]
+        , l [(6, 3), (6, 4)]
+        , l [(0, 8), (8, 8)]
+        , l [(1, 7), (1, 8)]
+        , l [(2, 7), (2, 5)]
+        , l [(3, 6), (3, 5)]
+        , l [(3, 7), (3, 8)]
+        , l [(4, 6), (4, 8)]
+        , l [(5, 4), (5, 6)]
+        , l [(5, 7), (5, 8)]
+        , l [(6, 5), (6, 8)]
+        , l [(7, 4), (7, 6)]
+        , l [(7, 7), (7, 8)]
+        , l [(8, 5), (8, 8)]
+        ]
+    l = Line Solid 0
+
+drawnMap04 = translate (-3) (-3) $ sp ++ fm sp ++ base ++ fm base
+    where
+    sp = translate 128 128 . scale 256 $ [SpecialPoints [
+        (7, 7)
+--        , (6, 6)
+        , (3, 3)
+        , (0, 6)
+        , (3, 6)
+        ]]
+    base = scale 256 $ [
+        l [(1, 2), (3, 2), (3, 1), (4, 1), (4, 2), (6, 2), (6, 4), (7, 4), (7, 5), (8, 5), (8, 8)]
+        , l [(0, 0), (16, 0)]
+        , l [(1, 5), (3, 5), (3, 7), (1, 7), (1, 5)]
+        , l [(4, 5), (6, 5), (6, 7), (4, 7), (4, 5)]
+        , l [(0, 4), (2, 4), (2, 3), (5, 3), (5, 4)]
+        , l [(6, 1), (6, 2), (7, 2)]
+        , l [(7, 1), (8, 1)]
+        , l [(7, 3), (8, 3)]
+        , l [(3, 4), (4, 4)]
+        , l [(7, 6), (7, 8)]
+        , l [(2, 0), (2, 1)]
+        , l [(5, 0), (5, 1)]
+        ]
+    l = Line Solid 0
+    fm = flip' . mirror
+
+drawnMap05 = sp ++ fullFill ++ lW
+    where
+        w = 320
+        sh = 420
+        basePoints = [(w, w), (1024 + w `div` 2, 2048 - w), (2048, w), (3072 - w `div` 2, 2048 - w), (4096 - w, w)]
+        lW = [Line Erasing 60 basePoints]
+        sp = [SpecialPoints $ basePoints ++ [(1024 + w `div` 2, 2048 - w - sh), (3072 - w `div` 2, 2048 - w - sh), (2048, w + sh)]]
+
+fullFill = scale 256 $ [Line Solid 63 [(0, 1), (16, 1), (16, 3), (0, 3), (0, 5), (16, 5), (16, 7), (0, 7)]]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/hwmap2txt/hwmapconverter/README	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,23 @@
+
+This tool allows editing the contents of .hwmap files as human-readable text.
+
+
+Dependencies:
+-------------
+
+Needs Qt / qmake to build
+
+
+Instructions:
+-------------
+
+Build with these 2 commands:
+
+qmake hwmapconverter.pro
+make
+
+
+If compiled successfully, run with:
+
+./hwmapconverter
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/hwmap2txt/hwmapconverter/hwmapconverter.pro	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,20 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2015-05-07T16:38:43
+#
+#-------------------------------------------------
+
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = hwmapconverter
+TEMPLATE = app
+
+
+SOURCES += main.cpp\
+        mainwindow.cpp
+
+HEADERS  += mainwindow.h
+
+FORMS    += mainwindow.ui
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/hwmap2txt/hwmapconverter/main.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,11 @@
+#include "mainwindow.h"
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    MainWindow w;
+    w.show();
+
+    return a.exec();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/hwmap2txt/hwmapconverter/mainwindow.cpp	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,137 @@
+#include <QByteArray>
+#include <QFile>
+#include <QFileDialog>
+#include <QtEndian>
+#include <QRegExp>
+
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+MainWindow::MainWindow(QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::MainWindow)
+{
+    ui->setupUi(this);
+}
+
+MainWindow::~MainWindow()
+{
+    delete ui;
+}
+
+void MainWindow::on_pbLoad_clicked()
+{
+    QString fileName = QFileDialog::getOpenFileName(this, QString(), QString(), "Hedgewars drawn maps (*.hwmap);;All files (*.*)");
+
+    if(!fileName.isEmpty())
+    {
+        QFile f(fileName);
+
+        if(f.open(QFile::ReadOnly))
+        {
+            QByteArray data = qUncompress(QByteArray::fromBase64(f.readAll()));
+
+            QStringList decoded;
+
+            bool isSpecial = true;
+            while(data.size() >= 5)
+            {
+                qint16 px = qFromBigEndian(*(qint16 *)data.data());
+                data.remove(0, 2);
+                qint16 py = qFromBigEndian(*(qint16 *)data.data());
+                data.remove(0, 2);
+                quint8 flags = *(quint8 *)data.data();
+                data.remove(0, 1);
+
+                if(flags & 0x80)
+                {
+                    if(isSpecial && !decoded.isEmpty())
+                        decoded << "// drawings";
+
+                    isSpecial = false;
+
+                    quint8 penWidth = flags & 0x3f;
+                    bool isErasing = flags & 0x40;
+                    decoded << QString("%1 %2 %3 %4")
+                               .arg(px, 5).arg(py, 6)
+                               .arg(isErasing ? "e" : "s")
+                               .arg(penWidth, 2);
+                } else
+                    if(isSpecial)
+                    {
+                        if(decoded.isEmpty())
+                            decoded << "// special points (these are always before all drawings!)";
+
+                        decoded << QString("%1 %2 %3")
+                                   .arg(px, 5).arg(py, 6)
+                                   .arg(flags);
+                    } else
+                    {
+                        decoded << QString("%1 %2")
+                                   .arg(px, 5).arg(py, 6);
+                    }
+            }
+
+            ui->textEdit->setPlainText(decoded.join("\n"));
+            ui->statusBar->showMessage("Load OK");
+        } else
+            ui->statusBar->showMessage(QString("Can't open file %1").arg(fileName));
+    }
+}
+
+void MainWindow::on_pbSave_clicked()
+{
+    QRegExp rxSP("^\\s*(-?\\d+)\\s*(-?\\d+)\\s*(\\d+)\\s*$");
+    QRegExp rxLS("^\\s*(-?\\d+)\\s*(-?\\d+)\\s*([es])\\s*(\\d+)\\s*$");
+    QRegExp rxP("^\\s*(-?\\d+)\\s*(-?\\d+)\\s*$");
+
+    QString fileName = QFileDialog::getSaveFileName(this, QString(), QString(), "Hedgewars drawn maps (*.hwmap);;All files (*.*)");
+
+    QFile file(fileName);
+    if(file.open(QFile::WriteOnly))
+    {
+        QByteArray b;
+        QStringList sl = ui->textEdit->toPlainText().split('\n');
+        bool isSpecial = true;
+
+        foreach(const QString & line, sl)
+            if(!line.startsWith("//"))
+            {
+                if(rxLS.indexIn(line) != -1)
+                {
+                    isSpecial = false;
+                    qint16 px = qToBigEndian((qint16)rxLS.cap(1).toInt());
+                    qint16 py = qToBigEndian((qint16)rxLS.cap(2).toInt());
+                    quint8 flags = 0x80;
+                    if(rxLS.cap(3) == "e") flags |= 0x40;
+                    flags = flags + rxLS.cap(4).toUInt();
+                    b.append((const char *)&px, 2);
+                    b.append((const char *)&py, 2);
+                    b.append((const char *)&flags, 1);
+                } else
+                if(isSpecial && (rxSP.indexIn(line) != -1))
+                {
+                    qint16 px = qToBigEndian((qint16)rxSP.cap(1).toInt());
+                    qint16 py = qToBigEndian((qint16)rxSP.cap(2).toInt());
+                    quint8 flags = rxSP.cap(3).toUInt();
+
+                    b.append((const char *)&px, 2);
+                    b.append((const char *)&py, 2);
+                    b.append((const char *)&flags, 1);
+                } else
+                if(rxP.indexIn(line) != -1)
+                {
+                    isSpecial = false;
+                    qint16 px = qToBigEndian((qint16)rxP.cap(1).toInt());
+                    qint16 py = qToBigEndian((qint16)rxP.cap(2).toInt());
+                    quint8 flags = 0;
+                    b.append((const char *)&px, 2);
+                    b.append((const char *)&py, 2);
+                    b.append((const char *)&flags, 1);
+                } else
+                    ui->statusBar->showMessage(QString("Can't parse or misplaced special point: %1").arg(line));
+            }
+
+        file.write(qCompress(b).toBase64());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/hwmap2txt/hwmapconverter/mainwindow.h	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,27 @@
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+
+namespace Ui {
+class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    explicit MainWindow(QWidget *parent = 0);
+    ~MainWindow();
+
+private slots:
+    void on_pbLoad_clicked();
+
+    void on_pbSave_clicked();
+
+private:
+    Ui::MainWindow *ui;
+};
+
+#endif // MAINWINDOW_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/hwmap2txt/hwmapconverter/mainwindow.ui	Mon Nov 09 18:37:57 2015 +0100
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralWidget">
+   <layout class="QGridLayout" name="gridLayout">
+    <item row="1" column="0">
+     <widget class="QPushButton" name="pbLoad">
+      <property name="text">
+       <string>Load</string>
+      </property>
+     </widget>
+    </item>
+    <item row="1" column="1">
+     <widget class="QPushButton" name="pbSave">
+      <property name="text">
+       <string>Save</string>
+      </property>
+     </widget>
+    </item>
+    <item row="1" column="2">
+     <spacer name="horizontalSpacer">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>217</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="0" column="0" colspan="3">
+     <widget class="QTextEdit" name="textEdit">
+      <property name="font">
+       <font>
+        <family>Liberation Mono</family>
+        <pointsize>10</pointsize>
+       </font>
+      </property>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QStatusBar" name="statusBar"/>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <resources/>
+ <connections/>
+</ui>
--- a/tools/pas2c/PascalParser.hs	Sun Apr 26 13:02:38 2015 +0100
+++ b/tools/pas2c/PascalParser.hs	Mon Nov 09 18:37:57 2015 +0100
@@ -48,7 +48,7 @@
 
 
 reference :: Parsec String u Reference
-reference = buildExpressionParser table term <?> "reference"
+reference = term <?> "reference"
     where
     term = comments >> choice [
         parens pas (liftM RefExpression expression >>= postfixes) >>= postfixes
@@ -57,9 +57,6 @@
         , liftM SimpleReference iD >>= postfixes
         ] <?> "simple reference"
 
-    table = [
-        ]
-
     postfixes r = many postfix >>= return . foldl (flip ($)) r
     postfix = choice [
             parens pas (option [] parameters) >>= return . FunCall
@@ -401,7 +398,7 @@
     where
     term = comments >> choice [
         builtInFunction expression >>= \(n, e) -> return $ BuiltInFunCall e (SimpleReference (Identifier n BTUnknown))
-        , try (parens pas $ expression >>= \e -> notFollowedBy (comments >> char' '.') >> return e)
+        , try (parens pas expression >>= \e -> notFollowedBy (comments >> char' '.') >> return e)
         , brackets pas (commaSep pas iD) >>= return . SetExpression
         , try $ integer pas >>= \i -> notFollowedBy (char' '.') >> (return . NumberLiteral . show) i
         , float pas >>= return . FloatLiteral . show