Merge default qmlfrontend
authorunc0rr
Thu, 03 Sep 2015 20:59:48 +0300
branchqmlfrontend
changeset 11071 3851ce4f2061
parent 11050 9b7c8c5a94e0 (current diff)
parent 11070 f9a03078dd4f (diff)
child 11073 3ecf06107005
Merge default
.hgignore
CMakeLists.txt
QTfrontend/net/tcpBase.cpp
gameServer/OfficialServer/checker.hs
hedgewars/ArgParsers.pas
hedgewars/CMakeLists.txt
hedgewars/SDLh.pas
hedgewars/hwLibrary.pas
hedgewars/hwengine.pas
hedgewars/uDebug.pas
hedgewars/uIO.pas
hedgewars/uInputHandler.pas
hedgewars/uMisc.pas
hedgewars/uRender.pas
hedgewars/uTypes.pas
hedgewars/uUtils.pas
hedgewars/uVariables.pas
share/hedgewars/Data/Forts/CakeR.png
share/hedgewars/Data/Forts/CastleR.png
share/hedgewars/Data/Forts/EvilChickenR.png
share/hedgewars/Data/Forts/FlowerhogR.png
share/hedgewars/Data/Forts/HydrantR.png
share/hedgewars/Data/Forts/LegoR.png
share/hedgewars/Data/Forts/PlaneR.png
share/hedgewars/Data/Forts/StatueR.png
share/hedgewars/Data/Forts/SteelTowerR.png
share/hedgewars/Data/Forts/TankR.png
share/hedgewars/Data/Forts/UFOR.png
share/hedgewars/Data/Forts/WoodR.png
share/hedgewars/Data/Graphics/TARDIS.png
share/hedgewars/Data/Missions/Campaign/01#Boot_Camp.lua
share/hedgewars/Data/Missions/Training/Basic_Training_-_Cluster_Bomb.lua
share/hedgewars/Data/Missions/Training/Basic_Training_-_Shotgun.lua
--- a/.hgignore	Sat Aug 15 16:23:00 2015 +0300
+++ b/.hgignore	Thu Sep 03 20:59:48 2015 +0300
@@ -55,7 +55,6 @@
 glob:project_files/Android-build/out
 glob:project_files/Android-build/Makefile.android
 glob:hedgewars-build-desktop-Qt*
-glob:hedgewars-build-desktop-Qt*
 glob:*.depends
 glob:tools/build_windows_koda.bat
 glob:share/hedgewars/Data/misc/hwengine.desktop
@@ -68,3 +67,9 @@
 glob:build-*
 glob:hedgewars-build-*
 glob:*.pro.user
+glob:Hedgewars.app/*
+glob:tools/CreateMacBundle.cmake
+glob:share/Info.plist
+glob:CTestTestfile.cmake
+glob:arch.c
+
--- a/.hgtags	Sat Aug 15 16:23:00 2015 +0300
+++ b/.hgtags	Thu Sep 03 20:59:48 2015 +0300
@@ -61,3 +61,5 @@
 2fc02902c7cbf3c29bfe08a50e5f37983582b251 0.9.18-release
 1617149e01a4fa25637e2ab655d0287ef9c21b7c 0.9.19-release
 af0520a6bf0061b27f8321514d35fcd2b1ef5f9c 0.9.20-release
+7e55468ffe384a3065524c483eb5e3cdb1658fd5 0.9.21-release
+7e55468ffe384a3065524c483eb5e3cdb1658fd5 fab746a3597e
--- a/CMakeLists.txt	Sat Aug 15 16:23:00 2015 +0300
+++ b/CMakeLists.txt	Thu Sep 03 20:59:48 2015 +0300
@@ -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)
--- a/CREDITS	Sat Aug 15 16:23:00 2015 +0300
+++ b/CREDITS	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/ChangeLog.txt	Thu Sep 03 20:59:48 2015 +0300
@@ -1,11 +1,28 @@
 + features
 * bugfixes
 
+0.9.21 -> 0.9.22
+ + Extensive changes to TechRacer: Variable terrain types, enhanced parameters, hwmap interpreter, fuel limiter, etc. 
+ + Map previews can now take script parameters into account and preview waypoints in TechRacer
+ + Added a couple new flags
+ + Small improvements to the interface and in-game chat
+ + Divided teams options will now just be ignored when more/less than 2 teams, 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
+ * 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
+
 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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/achievements.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/achievements.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/binds.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/binds.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/campaign.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/campaign.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/drawmapscene.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/drawmapscene.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/game.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/game.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/gameuiconfig.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/gameuiconfig.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/hwconsts.cpp.in	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/hwconsts.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/hwform.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/hwform.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/main.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/model/GameStyleModel.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/model/GameStyleModel.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/model/HatModel.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/model/HatModel.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/model/MapModel.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/model/MapModel.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/model/ThemeModel.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/model/ThemeModel.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/model/ammoSchemeModel.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/model/ammoSchemeModel.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/model/netserverslist.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/model/netserverslist.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/model/roomslistmodel.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/model/roomslistmodel.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/hwmap.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/hwmap.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/netregister.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/netregister.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/netserver.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/netserver.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/netudpserver.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/netudpserver.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/netudpwidget.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/netudpwidget.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/newnetclient.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/newnetclient.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/proto.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/proto.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/recorder.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/recorder.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/tcpBase.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/net/tcpBase.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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/sdlkeys.h	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/sdlkeys.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/team.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/team.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/dialog/ask_quit.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/dialog/ask_quit.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/dialog/input_ip.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/dialog/input_ip.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/dialog/input_password.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/dialog/input_password.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/dialog/upload_video.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/dialog/upload_video.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/AbstractPage.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/AbstractPage.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageadmin.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageadmin.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagecampaign.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagecampaign.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageconnecting.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageconnecting.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagedata.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagedata.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagedrawmap.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagedrawmap.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageeditteam.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageeditteam.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagegamestats.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagegamestats.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageinfo.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageinfo.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageingame.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageingame.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagemain.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagemain.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagemultiplayer.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagemultiplayer.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagenet.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagenet.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagenetgame.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagenetgame.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagenetserver.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagenetserver.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageoptions.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageoptions.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageplayrecord.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageplayrecord.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageroomslist.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageroomslist.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagescheme.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagescheme.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageselectweapon.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pageselectweapon.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagesingleplayer.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagesingleplayer.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagetraining.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagetraining.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagevideos.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/page/pagevideos.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/FreqSpinBox.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/FreqSpinBox.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/HistoryLineEdit.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/HistoryLineEdit.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/SmartLineEdit.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/SmartLineEdit.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/SquareLabel.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/SquareLabel.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/about.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/about.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/bgwidget.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/bgwidget.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/chatwidget.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/chatwidget.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/databrowser.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/databrowser.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/drawmapwidget.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/drawmapwidget.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/feedbackdialog.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/feedbackdialog.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/fpsedit.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/fpsedit.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/frameTeam.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/frameTeam.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/gamecfgwidget.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/gamecfgwidget.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/hatbutton.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/hatbutton.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/hatprompt.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/hatprompt.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/hedgehogerWidget.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/hedgehogerWidget.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/igbox.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/igbox.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/keybinder.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/keybinder.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/lineeditcursor.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/lineeditcursor.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/mapContainer.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/mapContainer.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/qpushbuttonwithsound.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/qpushbuttonwithsound.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/roomnameprompt.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/roomnameprompt.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/seedprompt.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/seedprompt.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/selectWeapon.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/selectWeapon.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/teamselect.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/teamselect.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/teamselhelper.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/teamselhelper.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/themeprompt.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/themeprompt.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/togglebutton.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/togglebutton.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/vertScrollArea.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/vertScrollArea.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/weaponItem.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui/widget/weaponItem.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui_hwform.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/ui_hwform.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/DataManager.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/DataManager.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/LibavInteraction.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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.h	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/LibavInteraction.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/MessageDialog.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/MessageDialog.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/SDLInteraction.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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.h	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/SDLInteraction.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/namegen.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/namegen.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/platform/CocoaInitializer.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/platform/CocoaInitializer.mm	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/platform/InstallController.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/platform/InstallController.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/platform/M3Panel.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/platform/M3Panel.mm	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/platform/SparkleAutoUpdater.mm	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/platform/xfire.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/QTfrontend/util/platform/xfire.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/README	Thu Sep 03 20:59:48 2015 +0300
@@ -1,7 +1,7 @@
 Hedgewars - a turn based strategy game.
 =======================================
 
-Copyright 2004-2014 Andrey Korotaev <unC0Rr@gmail.com> and others.
+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:
--- a/gameServer/Actions.hs	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/Actions.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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/ClientIO.hs	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/ClientIO.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/ConfigFile.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/Consts.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/CoreTypes.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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
@@ -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` ()
--- a/gameServer/EngineInteraction.hs	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/EngineInteraction.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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,6 +95,7 @@
         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]
@@ -124,10 +131,12 @@
         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])
@@ -219,6 +228,4 @@
         , 0x02000000
         , 0x04000000
         ]
-
-
-
+#endif
--- a/gameServer/FloodDetection.hs	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/FloodDetection.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/HWProtoChecker.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/HWProtoCore.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/HWProtoInRoomState.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/HWProtoLobbyState.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/HWProtoNEState.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/HandlerUtils.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/JoinsMonitor.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/NetRoutines.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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/DBInteraction.hs	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/OfficialServer/DBInteraction.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/OfficialServer/GameReplayStore.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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/checker.hs	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/OfficialServer/checker.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/OfficialServer/extdbinterface.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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
@@ -37,7 +37,7 @@
 
 
 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 = ?"
@@ -83,13 +83,12 @@
 
         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
+            mapM_ (execute dbConn dbQueryAchievement) $ (parseStats p fileName teams) 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 
--- a/gameServer/Opts.hs	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/Opts.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/RoomsAndClients.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/ServerCore.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/ServerState.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/Store.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/Utils.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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/Votes.hs	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/Votes.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/hedgewars-server.cabal	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/hedgewars-server.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/stresstest.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/stresstest2.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/gameServer/stresstest3.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/ArgParsers.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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/CMakeLists.txt	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/CMakeLists.txt	Thu Sep 03 20:59:48 2015 +0300
@@ -136,9 +136,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 -k SDL_mixer -k-framework -k SDL_net -k-framework -kSDL_net")
+    endif()
 endif()
 
 if(LIBAV_FOUND)
--- a/hedgewars/PNGh.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/PNGh.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/SDLh.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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
--- a/hedgewars/avwrapper/avwrapper.c	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/avwrapper/avwrapper.c	Thu Sep 03 20:59:48 2015 +0300
@@ -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/config.inc.in	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/config.inc.in	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/hwLibrary.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/hwengine.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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
@@ -127,7 +127,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
--- a/hedgewars/options.inc	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/options.inc	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uAI.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uAIActions.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uAIAmmoTests.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uAIMisc.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uAmmos.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uCaptions.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uChat.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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
@@ -68,14 +68,17 @@
 
 
 const
-    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];
@@ -152,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;
@@ -161,6 +167,8 @@
     shadowint  = $80 shl AShift;
 begin
 
+FreeAndNilTexture(cl.Tex);
+
 font:= CheckCJKFont(ansistring(str), fnt16);
 
 // get render size of text
@@ -199,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;
@@ -232,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;
 
@@ -794,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;
@@ -806,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
@@ -965,7 +970,7 @@
         SDLK_a:
             begin
             // select all
-            if ctrl then
+            if ctrlonly then
                 begin
                 ResetSelection();
                 cursorPos:= 0;
@@ -979,7 +984,7 @@
         SDLK_c:
             begin
             // copy
-            if ctrl then
+            if ctrlonly then
                 CopySelectionToClipboard()
             else
                 action:= false;
@@ -987,7 +992,7 @@
         SDLK_v:
             begin
             // paste
-            if ctrl then
+            if ctrlonly then
                 begin
                 DeleteSelected();
                 PasteFromClipboard();
@@ -998,7 +1003,7 @@
         SDLK_x:
             begin
             // cut
-            if ctrl then
+            if ctrlonly then
                 begin
                 CopySelectionToClipboard();
                 DeleteSelected();
--- a/hedgewars/uCollisions.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uCollisions.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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/uCommandHandlers.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uCommandHandlers.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uCommands.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uConsole.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uConsts.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uDebug.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uFloat.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uGame.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uGears.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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
@@ -723,7 +723,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 +981,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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uGearsHandlers.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uGearsHandlersMess.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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
@@ -1504,6 +1504,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 +1919,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 +1936,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
@@ -1953,7 +1961,7 @@
     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 ((Gear^.State and gstMoving) <> 0) or (not isZero(Gear^.dX)) or (not isZero(Gear^.dY)) then
             begin
             PlaySound(sndRopeAttach);
             Gear^.dX:= _0;
@@ -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;
 
@@ -5198,11 +5212,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 +5234,37 @@
     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 round up
+                    if dmg mod d > 0 then
+                        dmg:= dmg div d + 1
+                    else
+                        dmg:= dmg div d;
+
+                    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);
--- a/hedgewars/uGearsHandlersRope.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uGearsHandlersRope.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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/uGearsHedgehog.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uGearsHedgehog.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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)
@@ -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;
--- a/hedgewars/uGearsList.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uGearsList.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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
@@ -155,7 +155,7 @@
     Gear^.NextGear^.PrevGear:= Gear^.PrevGear;
 if Gear^.PrevGear <> nil then
     Gear^.PrevGear^.NextGear:= Gear^.NextGear
-else 
+else
     GearsList:= Gear^.NextGear;
 
 Gear^.NextGear:= nil;
@@ -238,6 +238,8 @@
   gtMelonPiece: begin
                 gear^.AdvBounce:= 1;
                 gear^.Density:= _2;
+                gear^.Elasticity:= _0_8;
+                gear^.Friction:= _0_995;
                 gear^.Radius:= 4
                 end;
     gtHedgehog: begin
@@ -669,6 +671,7 @@
     t,i: Longword;
     k: boolean;
     cakeData: PCakeData;
+    iterator: PGear;
 begin
 
 ScriptCall('onGearDelete', gear^.uid);
@@ -677,6 +680,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 +761,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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uGearsRender.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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);
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uGearsUtils.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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/uIO.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uIO.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uInputHandler.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uLand.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uLandGenMaze.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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/uLandGraphics.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uLandGraphics.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uLandObjects.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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;
 
--- a/hedgewars/uLandPainted.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uLandPainted.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uLandTemplates.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uLandTexture.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uLandUtils.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uLocale.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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/uMisc.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uMisc.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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/uRandom.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uRandom.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uRender.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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;
@@ -135,8 +137,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
@@ -468,7 +472,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(
@@ -477,7 +481,7 @@
             ExtractWord(tmpint+2, tmpstr, [' '])
         ));
         tmpint := tmpint + 3;
-    end;
+        end;
     until (tmpint > tmpn);
 {$ENDIF}
     AddFileLog('');
@@ -486,26 +490,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}
@@ -513,10 +517,10 @@
 {$IFDEF PAS2C}
     err := glewInit();
     if err <> GLEW_OK then
-    begin
+        begin
         WriteLnToConsole('Failed to initialize GLEW.');
         halt(HaltStartupError);
-    end;
+        end;
 {$ENDIF}
 
 {$IFNDEF PAS2C}
@@ -543,7 +547,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
@@ -558,7 +562,7 @@
             end
         else
             cStereoMode:= smNone;
-    end;
+        end;
 
     // set up vertex/texture buffers for frame textures
     texLRDtb[0].X:= 0.0;
--- a/hedgewars/uRenderUtils.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uRenderUtils.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uScript.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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;
@@ -1211,6 +1233,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 +1484,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 +2296,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 +2325,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 +2343,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 +2492,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 +2501,7 @@
         if gear <> nil then
             gear^.aihints:= lua_tointeger(L, 2);
         end;
-    lc_setaihintsongear:= 0
+    lc_setgearaihints:= 0
 end;
 
 
@@ -2597,6 +2667,7 @@
 ScriptSetInteger('TemplateFilter', cTemplateFilter);
 ScriptSetInteger('TemplateNumber', LuaTemplateNumber);
 ScriptSetInteger('MapGen', ord(cMapGen));
+ScriptSetInteger('MapFeatureSize', cFeatureSize);
 
 ScriptCall('onPreviewInit');
 
@@ -2605,6 +2676,7 @@
 cTemplateFilter  := ScriptGetInteger('TemplateFilter');
 LuaTemplateNumber:= ScriptGetInteger('TemplateNumber');
 cMapGen          := TMapGen(ScriptGetInteger('MapGen'));
+cFeatureSize     := ScriptGetInteger('MapFeatureSize');
 end;
 
 procedure ScriptOnGameInit;
@@ -2615,12 +2687,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 +2725,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 +2849,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;
@@ -3085,7 +3180,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 +3194,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 +3268,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 +3325,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 +3431,8 @@
 begin
 mapDims:= false;
 PointsBuffer:= '';
+prevCursorPoint.X:= NoPointX;
+prevCursorPoint.Y:= 0;
 end;
 
 procedure freeModule;
--- a/hedgewars/uSinTable.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uSinTable.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uSound.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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);
@@ -717,6 +727,7 @@
     RegisterVariable('mute'     , @chMute     , true );
 
     MusicFN:='';
+    SDMusicFN:= 'sdmusic.ogg';
     Mus:= nil;
     isAudioMuted:= false;
     isSEBackup:= isSoundEnabled;
--- a/hedgewars/uStats.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uStats.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uStore.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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/uTeams.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uTeams.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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
@@ -665,7 +665,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;
@@ -704,7 +704,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 +732,8 @@
 // avoid compiler hint
 s:= s;
 
+isPaused:= false;
+
 t:= 0;
 while t < TeamsCount do
     begin
@@ -739,7 +741,7 @@
     inc(t)
     end;
 
-AddChatString('** Good-bye!');
+AddChatString(#7 + '* Good-bye!');
 RecountAllTeamsHealth();
 end;
 
--- a/hedgewars/uTextures.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uTextures.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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/uTypes.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uTypes.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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/uUtils.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uUtils.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uVariables.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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
@@ -176,6 +176,7 @@
     cElastic        : hwFloat;
     cGravity        : hwFloat;
     cGravityf       : real;
+    cBuildMaxDist   : LongInt;
     cDamageModifier : hwFloat;
     cLaserSighting  : boolean;
     cVampiric       : boolean;
@@ -683,8 +684,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;
@@ -2560,6 +2561,7 @@
     cElastic                := _0_9;
     cGravity                := cMaxWindSpeed * 2;
     cGravityf               := 0.00025 * 2;
+    cBuildMaxDist           := cDefaultBuildMaxDist;
     cDamageModifier         := _1;
     TargetPoint             := cTargetPointRef;
 
@@ -2615,7 +2617,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);
--- a/hedgewars/uVideoRec.pas	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uVideoRec.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uVisualGears.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uVisualGearsHandlers.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uVisualGearsList.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/hedgewars/uWorld.pas	Thu Sep 03 20:59:48 2015 +0300
@@ -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;
@@ -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
--- a/man/hedgewars.6	Sat Aug 15 16:23:00 2015 +0300
+++ b/man/hedgewars.6	Thu Sep 03 20:59:48 2015 +0300
@@ -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/libphyslayer/physfscompat.c	Sat Aug 15 16:23:00 2015 +0300
+++ b/misc/libphyslayer/physfscompat.c	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/misc/libphyslayer/physfscompat.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/SDLActivity.java	Sat Aug 15 16:23:00 2015 +0300
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/SDLActivity.java	Thu Sep 03 20:59:48 2015 +0300
@@ -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/frontlib/hwconsts.h	Sat Aug 15 16:23:00 2015 +0300
+++ b/project_files/frontlib/hwconsts.h	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/project_files/frontlib/net/netconn.c	Thu Sep 03 20:59:48 2015 +0300
@@ -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/share/Info.plist.in	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/Info.plist.in	Thu Sep 03 20:59:48 2015 +0300
@@ -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>
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/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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Locale/campaigns_de.txt	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Locale/de.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -1,1158 +1,1675 @@
 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
-    }
+[""]="",
+["Feeble Resistance"]="Kraftloser Widerstand",
+["Pathetic Hog #%d"]="Erbärmlicher Igel #%d",
+["Cybernetic Empire"]="Kybernetisches Imperium",
+["Unit 3378"]="Einheit 3378",
+["Codename: Teamwork"]="Code-Name: Teamwork",
+["- Eliminate Unit 3378 |- Feeble Resistance must survive"]="- Vernichte Einheit 3378 |- Kraftloser Widerstand muss überleben",
+["|- Mines Time:"]="|- Minenzündzeit:",
+["sec"]="s",
+["T_T"]="T_T",
+["Hmmm..."]="Hmmm …",
+["MISSION SUCCESSFUL"]="MISSION ERFOLGREICH",
+["Congratulations!"]="Gratulation!",
+["MISSION FAILED"]="MISSION GESCHEITERT",
+["Oh no! Just try again!"]="Oh nein! Versuch's nochmal!",
+["Grenadier"]="Grenadier",
+["Grenade Group"]="Granatengruppe",
+["You have thrown %d grenades."]="Du hast %d Granaten geworfen.",
+["Sniperz"]="Heckenschützen",
+["Hunter"]="Jäger",
+["Sniper Training"]="Scharfschützen-Training",
+["Aiming Practice"]="Zielübung",
+["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.",
+["Time's up!"]="Die Zeit ist um!",
+["Oh no! Time's up! Just try again."]="Oh nein! Die Zeit ist um! Versuche es nochmal.",
+["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!",
+["Congratulations! You've eliminated all targets|within the allowed time frame."]="Gratulation! Du hast alle Ziele innerhalb der|verfügbaren Zeit ausgeschaltet.",
+["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).",
+["You lose!"]="Du verlierst!",
+["points"]="Punkte",
+["Shotgun Team"]="Schrotflinten-Team",
+["Shotgun Training"]="Schrotflinten-Training",
+["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!",
+["Victory!"]="Sieg!",
+["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.",
+["You have gained an achievement: %s"]="Du hast eine Errungenschaft erhalten: %s",
+["Prestigious Pilot"]="Prestigeträchtiger Pilot",
+["CHALLENGE COMPLETE"]="HERAUSFORDERUNG ABGESCHLOSSEN",
+["Grenadiers"]="Grenadiere",
+["Nade Boy"]="Granatenjunge",
+["Grenade Training"]="Granatentraining",
+["Zook"]="Zook",
+["Team Zook"]="Team Zook",
+["You have launched %d bazookas."]="Du hast %d Bazookas abgefeuert.",
+["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?",
+["Bloody Rookies"]="Blutige Anfänger",
+["Toxic Team"]="Giftige Gegner",
+["Poison"]="Gift",
+["Operation Diver"]="Taucher",
+["Eliminate Poison before the time runs out"]="Neutralisiere das Gift, bevor die Zeit abgelaufen ist.",
+["Private Novak"]="Gefreiter Novak",
+["Cluster Bomb Training"]="Splittergranatentraining",
+["You have to destroy 12 targets in 180 seconds"]="Du musst 12 Ziele in 180 Sekunden zerstören",
+["Cluster Bomb MASTER!"]="Clusterbombenmeister!",
+["Congratulations! You needed only half of time|to eliminate all targets."]="Gratulation! Du hast nur die Hälfte der Zeig benötigt,|um alle Ziele zu eliminieren.",
+["Oh no! You failed! Just try again."]="Oh nein! Du hast versagt! Versuch es nochmal.",
+["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!",
+["Private Nolak"]="Gefreiter Nolak",
+["The Hogies"]="Die Igelinge",
+["You have thrown %d cluster bombs."]="Du hast %d Splitterbomben geworfen.",
+["Hero Team"]="Heldenteam",
+["Good Dude"]="Guter Junge",
+["Bad Team"]="Böses Team",
+["The Great Escape"]="Gesprengte Ketten",
+["Get out of there!"]="Geh weg!",
+["Elimate your captor."]="Eliminiere deinen",
+["'Zooka Team"]="Die Knalltüten",
+["Bazooka Training"]="Bazooka-Training",
+["Aiming practice"]="Zielübung",
+["hits"]="Treffer",
+["You have destroyed %d of %d targets."]="Du hast %d von %d Zielen zerstört.",
+["Your accuracy was %.1f%%."]="Deine Treffgenauigkeit betrug %.1f%%.",
+["%.1f seconds were remaining."]="Es verblieben %.1f.",
+["Pathetic Resistance"]="Erbärmlicher Widerstand",
+["Unit"]="Einheit",
+["Newton's Hammock"]="Newtons Hängematte",
+["User Challenge"]="Benutzerherausforderung",
+["Eliminate the enemy before the time runs out"]="Vernichte den Feind, bevor die Zeit abgelaufen ist",
+["Lonely Hog"]="Einsamer Igel",
+["Climber"]="Kletterer",
+["Water Gods"]="Wassergötter",
+["Nameless Heroes"]="Namenlose Helden",
+["Drowner"]="Absäufer",
+["Clowns"]="Clowns",
+["Nobody Laugh"]="Niemand darf lachen",
+["Spooky Tree"]="Spukiger Baum",
+["Eliminate all enemies"]="Vernichte alle Gegner",
+["Good birdy......"]="Braver Vogel …",
+["You have launched %d homing bees."]="Du hast %d zielsuchende Bienen abgefeuert.",
+["Unit 835"]="Einheit 835",
+["Bamboo Thicket"]="Bambusdickicht",
+["Energetic Engineer"]="Energetischer Ingenieur",
+["Wannabe Shoppsta"]="Möchtegernkäufer",
+["Unsuspecting Louts"]="Nichtsahnende Lümmel",
+["Unlucky Sods"]="Arme Schweine",
+["ROPE-KNOCKING"]="SEILSCHUBSEN",
+["MISSION SUCCESS"]="MISSIONSERFOLG",
+["COMPLETION TIME"]="ZEIT",
+["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!",
+["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 …",
+["Good luck out there!"]="Viel Glück da draußen!",
+["That Sinking Feeling"]="Land unter",
+["Save as many hapless hogs as possible!"]="Rette so viele glücklose Igel wie möglich!",
+["The Nameless One"]="Der Namenlose",
+["Hapless Hogs"]="Glücklose Igel",
+["Sinky"]="Blubb",
+["Heavy"]="Schwierig",
+["Clumsy"]="Hoppla",
+["Silly"]="Doofi",
+["Careless"]="Achtlos",
+["Sponge"]="Schwamm",
+["Deadweight"]="Gravitus",
+["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 …",
+["A frozen adventure"]="Ein frostiges Abenteuer",
+["Getting ready"]="Bereitmachen",
+["Collect the icegun and get the device part from Thanta"]="Sammle die Eiskanone ein und besorge das Bauteil von Thanta",
+["Win"]="Sieg",
+["Congratulations, you collected the device part!"]="Gratulation, du hast das Bauteil eingesammelt!",
+["Hog Solo"]="Igel Einsam",
+["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!",
+["Hog Solo lost, try again!"]="Igel Einsam hat verloren, versuch es nochmal!",
+["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",
+["Checkpoint reached!"]="Kontrollpunkt erreicht!",
+["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 …",
+["Finally you are here..."]="Endlich bist du hier …",
+["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 ",
+["A Space Adventure"]="Ein Weltraumabenteuer",
+["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!",
+["Prepare to fight"]="Bereitmachen zum Kämpfen",
+["Go down and save these PAotH hogs!"]="Geh runter und rette diese PAdI-Igel!",
+["The fight begins!"]="Die Schlacht beginnt!",
+["Neutralize your enemies and be careful!"]="Neutralisiere deine Gegner und sei vorsichtig!",
+["Joe"]="Sepp",
+["Bruce"]="Brutus",
+["Helena"]="Helena",
+["Boris"]="Boris",
+["Prof. Hogevil"]="Prof. Bösigel",
+["Minion"]="Lakai",
+["PAotH"]="PAdI",
+["Minions"]="Lakaien",
+["Professor"]="Professor",
+["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!",
+["Congratulations, 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!",
+["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.",
+["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.",
+["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!",
+["Use the saucer and fly to the moon"]="Benutze die Untertasse und flieg zum Mond.",
+["Travel carefully as your fuel is limited"]="Reise vorsichtig, da dein Treibstoff begrenzt ist.",
+["An unexpected event!"]="Ein unerwartetes Ereignis!",
+["Use the saucer and fly away"]="Benutze die Untertasse und flieg davon!",
+["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.",
+["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.",
+["Saving Hogera"]="Hogera retten",
+["Fly to the meteorite and detonate the explosives"]="Fliege zum Meteroiten und sprenge die Bomben.",
+["H"]="H",
+["Dr.Cornelius"]="Dr. Cornelius",
+["Bob"]="Bert",
+["Sam"]="Steffen",
+["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!",
+["Getting to the device"]="Zum Greifen nah",
+["Exploring the tunnel"]="Höhlenforscher",
+["Search for the device with the help of the other hedgehogs "]="Such nach dem Gerät mit der Hilfe der anderen Igel.",
+["Hog Solo has to reach the last crates"]="Igel Einsam muss die letzten Kisten erreichen.",
+["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.",
+["Return to the Surface"]="Zurück an die Oberfläche",
+["Go to the surface!"]="Geh an die Oberfläche!",
+["Attack Captain Lime before he attacks back"]="Greif Leutnant Limone an, bevor er angreift.",
+["Attack the assassins before they attack back"]="Greif die Assassinen an, bevor sie angreifen.",
+["Captain Lime"]="Leutnant Limone",
+["Mister Pear"]="Herr Birne",
+["Lady Mango"]="Frau Mango",
+["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.",
+["Good luck!"]="Viel Glück!",
+["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.",
+["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.",
+["Challenge Objectives"]="Herausforderungsziele",
+["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 last encounter"]="Das letzte Gefecht",
+["The final part"]="Das letzte Bauteil",
+["Defeat Professor Hogevil!"]="Besiege Professor Bösigel!",
+["thug"]="Rowdy",
+["To win the game you have to eliminate all your enemies"]="Um das Spiel zu gewinnen, musst du all deine Gegner eliminieren",
+["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!",
+["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 …",
+["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.",
+["Get him Spike!"]="Hol ihn, Stachel!",
+["This is seems like a wealthy hedgehog, nice..."]="Das sieht wie ein reicher Igel aus, nett.",
+["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!",
+["Precise shooting"]="Präzisionsschießen",
+["Use your available weapons in order to eliminate the enemies"]="Benutze deine verfügbaren Waffen, um die Gegner zu eliminieren.",
+["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 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 ",
+["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.",
+["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.",
+["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",
+["Killing the specialists"]="Die Spezialisten töten",
+["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.",
+["Mortar"]="Mörser",
+["Desert Eagle"]="Desert Eagle",
+["Grenade"]="Granate",
+["Shoryuken"]="Shoryuken",
+["Bazooka"]="Bazooka",
+["5 deadly hogs"]="5 tödliche Igel",
+["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.",
+["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!",
+["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.",
+["Brainiac"]="Hirni",
+["Corpsemonger"]="Leichenschänder",
+["Femur Lover"]="Schenkellieber",
+["Glark"]="Glark",
+["Bonely"]="Knochi",
+["Rot Molester"]="Rottiger Störenfried",
+["Bloodrocutor"]="Blutfrierer",
+["Muscle Dissolver"]="Muskellöser",
+["Bloodsucker"]="Blutsauger",
+["The Shadow Falls"]="Die Schattenfälle",
+["The Showdown"]="Das Showdown",
+["Save Leaks A Lot!|Hint: The Switch utility might be of help to you."]="Rette Undichte Stelle!|Tipp: Die Igelwahl könnte behilflich sein.",
+["Play with me!"]="Spiel mit mir!",
+["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.",
+["Why do you not like me?"]="Warum magst du mich nicht?",
+["Obliterate them!|Hint: You might want to take cover..."]="Vernichte sie!|Tipp: Du solltest in Deckung gehen.",
+["The Dilemma"]="Das Dilemma",
+["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 walk of Fame"]="Die Ruhmesmeile",
+["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 Individualist"]="Der Individualist",
+["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.",
+["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 wonder where Dense Cloud is..."]="Ich frag mich, wo Dichte Wolke ist.",
+["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.",
+["Natives"]="Eingeborene",
+["Ramon"]="Ramon",
+["Leaks A Lot"]="Undichte Stelle",
+["Dense Cloud"]="Dichte Wolke",
+["Spiky Cheese"]="Stachliger Käse",
+["Weaklings"]="Schwächlinge",
+["Stronglings"]="Stärklinge",
+["011101001"]="011101001",
+["Y3K1337"]="Y3K1337",
+["Under Construction"]="Baustelle",
+["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].",
+["A little gift from the cyborgs"]="Ein kleines Geschenk von den Cyborgs",
+["The guardian"]="Der Wächter",
+["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.",
+["...and so the cyborgs took over the world..."]="Und so eroberten die Cyborgs die Welt …",
+["The First Encounter"]="Das erste Zusammentreffen",
+["Survive!|Hint: Cinematics can be skipped with the [Precise] key."]="Überlebe!|Tipp: Zwischensequenzen können mit der [Genaues Zielen]-Taste übersprungen werden.",
+["Fiery Water"]="Feuerwasser",
+["Raging Buffalo"]="Wütender Büffel",
+["Righteous Beard"]="Redlicher Bart",
+["Fell From Grace"]="Fiel in Ungnade",
+["Wise Oak"]="Weise Eiche",
+["Eagle Eye"]="Adlerauge",
+["Flaming Worm"]="Flammenwurm",
+["Brain Teaser"]="Hirnreiz",
+["Bone Jackson"]="Knochen-Ede",
+["Gimme Bones"]="Gib Knochen",
+["Hedgibal Lecter"]="Iglibal Lector",
+["Bloodpie"]="Blutkuchen",
+["Scalp Muncher"]="Skalpknabberer",
+["Back Breaker"]="Rückenbrecher",
+["Dahmer"]="Dahmer",
+["Meiwes"]="Meiwes",
+["Ear Sniffer"]="Ohrenschnüffler",
+["Regurgitator"]="Hochwürger",
+["Muriel"]="Muriel",
+["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!",
+["They killed "]="Sie töteten ",
+["! You bastards!"]="! Ihr Bastarde!",
+["! Why?!"]="! Wieso?",
+["That was just mean!"]="Das war einfach nur gemein!",
+["Oh no, not "]="Oh nein, nicht ",
+["Why "]="Warum, ",
+["? Why?"]="? Warum",
+["What has "]="Was hat dir ",
+[" ever done to you?!"]=" jemals angetan?!",
+["Backstab"]="Verrat",
+["The food bites back"]="Das Essen beißt zurück",
+["Defeat the cannibals"]="Besiege die Kannibalen",
+["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!",
+["Tribe"]="Stamm",
+["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%;,*",
+["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",
+["Hightime"]="Hoch hinaus",
+["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.",
+["Omnivore"]="Allesfresser",
+["Get on the head of the mole"]="Geh auf den Kopf des Maulwurfs",
+["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.",
+["The Rising"]="Der Aufstieg",
+["Do the deed"]="Tu deine Pflicht",
+["The Slaughter"]="Die Schlachtung",
+["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.",
+["The Crate Frenzy"]="Der Kistenrausch",
+["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 Ultimate Weapon"]="Die Ultimative Waffe",
+["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 First Blood"]="Der erste Zusammenstoß",
+["Kill the cannibal!"]="Töte den Kannibalen!",
+["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.",
+["The wasted youth"]="Die vergeudete Jugend",
+["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!",
+["After Leaks A Lot betrayed his tribe, he joined the cannibals..."]="Nachdem Undichte Stelle seinen Stamm betrogen hatte, trat er den Kannibalen bei.",
+["Step By Step"]="Schritt für Schritt",
+["Hint: Double Jump - Press [Backspace] twice"]="Tipp: Doppelsprung – Drück [Rücktaste] 2 Mal",
+["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.",
+["The Torment"]="Die Pein",
+["Select difficulty: [Left] - easier or [Right] - harder"]="Wähl einen Schwierigkeitsgrad: [Links] – leichter oder [Rechts] – schwerer",
+["Fell From Heaven"]="Fiel Vom Himmel",
+["Cannibals"]="Kannibalen",
+["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.",
+["Zork"]="Zork",
+["Steve"]="Steffen",
+["Jack"]="Jochen",
+["Lee"]="Leo",
+["Elmo"]="Elmo",
+["Rachel"]="Ramona",
+["Syntax Errol"]="Syntaxfehlel",
+["Segmentation Paul"]="Se Gmentf Ehler",
+["Unexpected Igor"]="Ausnahmefelix",
+["Jeremiah"]="Jeremias",
+["Yeah, take that!"]="Jawohl, nimm das!",
+["Bullseye"]="Volltreffer!",
+["Die, die, die!"]="Stirb, stirb, stirb!",
+["With the rest of the tribe gone, it was up to "]="Ohne den Rest des Stammes, hing es von ",
+[" to save the village."]=" ab, um das Dorf zu retten.",
+["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",
+["Obstacle course"]="Hindernislauf",
+["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.|",
+["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!|",
+["You have "]="Du hast ",
+[" turns until Sudden Death! Better hurry!"]=" Züge bis zum Sudden Death! Beeilung!",
+["Kill the aliens!"]="Töte die Außerirdischen!",
+["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",
+["Y Chwiliad"]="Y Chwiliad",
+["Find your tribe!|Cross the lake!"]="Finde deinen Stamm!|Überquere den Fluss!",
+["Turns until Sudden Death: "]="Züge bis zum Sudden Death: ",
+["John"]="Jonas",
+["Flesh for Brainz"]="Fleisch gegen Hirn",
+["Eye Chewer"]="Augenkauer",
+["Torn Muscle"]="Loser Muskel",
+["Nom-Nom"]="Mjam-Mjam",
+["Vedgies"]="Früchties",
+["Brain Blower"]="Hirnpuster",
+["Gorkij"]="Gorkidsch",
+["The Journey Back"]="Die Rückreise",
+["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!",
+["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",
+["The Savior"]="Der Erlöser",
+["Get Dense Cloud out of the pit!"]="Hol Dichte Wolke aus der Grube!",
+["They never learn"]="Sie lernen es nie.",
+["Free Dense Cloud and continue the mission!"]="Befrei Dichte Wolke und setze die Mission fort!",
+["I just wonder where Ramon and Spiky disappeared..."]="Ich frage mich lediglich, wohin Ramon und Stachli verschwunden sind.",
+["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.",
+["The Tunnel Maker"]="Der Tunnelbauer",
+["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 Moonwalk"]="Der Mondspaziergang",
+["Hint: Select the LowGravity and press [Fire]."]="Tipp: Wähle die niedrige Schwerkraft und drücke [Feuern].",
+["Slippery"]="Rutschig",
+["You'd better watch your steps..."]="Pass besser auf, wohin du trittst.",
+["Artur Detour"]="Artus Rück",
+["Led Heart"]="Geführtes Herz",
+["Orlando Boom!"]="Orlando Bumm!",
+["Nilarian"]="Nilarian",
+["Steel Eye"]="Stahlauge",
+["Rusty Joe"]="Rostjonas",
+["Hatless Jerry"]="Hutloser Igor",
+["Gas Gargler"]="Gasgurgler",
+["Leaderbot"]="Führboter",
+["Nancy Screw"]="Lockere Schraube",
+["Beep Loopers"]="Piepskreisler",
+["Corporationals"]="Kapitalista",
+["Name"]="Name",
+["Olive"]="Olive",
+["Brain Stu"]="Hirntopf",
+["Brainila"]="Hirnilia",
+["Salivaslurper"]="Speichelschlürfer",
+["Spleenlover"]="Milzlieber",
+["Thighlicker"]="Schenkelschlecker",
+["NomNom"]="Mjamjam",
+["Mindy"]="Intellekta",
+["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.",
+["United We Stand"]="Gemeinsam sind wir stark",
+["Invasion"]="Invasion",
+["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",
+["Corpse Thrower"]="Leichenschmeißer",
+["Brutal Lily"]="Brutalo-Lilie",
+["Hannibal"]="Hannibal",
+["More Natives"]="Mehr Ureinwohner",
+["Traitors"]="Verräter",
+["Honest Lee"]="Leo Ehrlich",
+["Vegan Jack"]="Veganer-Jochen",
+["Sirius Lee"]="Leo Ernst",
+["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!",
+["The Enemy Of My Enemy"]="Der Feind meines Feindes",
+["The Union"]="Die Einheit",
+["Defeat the cyborgs!"]="Besiege die Cyborgs!",
+["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!",
+["Hedge-cogs"]="Stachelräder",
+["Leader"]="Führer",
+["Your deaths will be avenged, cannibals!"]="Eure Tode werden gerächt sein, Kannibalen!",
+["Unit 0x0007"]="Einheit 0x0007",
+["Hogminator"]="Iglinator",
+["Carol"]="Karol",
+["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",
+["Salvation"]="Erlösung",
+["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.",
+["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",
+["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.",
+["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?",
+["%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.",
+["%s wins!"]="%s gewinnt!",
+["Team’s best heights per round"]="Die Besthöhen der Teams pro Runde",
+["This round’s award for ulitmate 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.",
+["Hedgewars-Basketball"]="Hedgewars-Basketball",
+["Not So Friendly Match"]="Kein-so-Freundschaftsspiel",
+["Bat your opponents through the|baskets and out of the map!"]="Schlage deine Widersacher durch|die Körbe und aus der Karte hinaus!",
+["%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:",
+["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: ",
+["Control pillars to score points."]="Behalte die Kontrolle über die Säulen, um Punkte zu erhalten.",
+["Goal"]="Ziel",
+["Team Scores"]="Teampunktestand",
+["GAME OVER!"]="SPIEL ZU ENDE!",
+["Victory for the "]="Sieg für ",
+["Hooray!"]="Hurra!",
+["Flag respawned!"]="Fahne wieder erschienen!",
+["You have SCORED!!"]="Du hast GEPUNKTET!",
+["Opposing Team: "]="Gegnerisches Team: ",
+["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!"]="Fahne erobert!",
+["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",
+["Hedgewars-Knockball"]="Hedgewars-Schlagball",
+["Bat balls at your enemies and|push them into the sea!"]="Schlage Bälle auf deine Widersacher|und lass sie ins Meer fallen!",
+["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).",
+["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",
+["Jumping is disabled"]="Sprünge sind deaktiviert!",
+["Each turn you get 1-3 random weapons"]="Du bekommst jede Runde 1-3 zufällig gewählte Waffen",
+["Per team weapons"]="Waffen pro Team",
+["weaponschemes"]="Waffenschemata",
+["Unique new weapons"]="Einzigartige neue Waffen",
+["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.",
+["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 \"",
+["switch"]="Schalter",
+["key."]="Taste.",
+["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.",
+["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)",
+["North America"]="Nordamerika",
+["Difficulty: "]="Schwierigkeitsgrad: ",
+["EASY"]="EINFACH",
+["Area"]="Gebiet",
+["Population"]="Einwohnerzahl",
+["- 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).",
+["Special Weapons:"]="Sonderwaffen:",
+["Shotgun"]="Schrotflinte",
+["Sniper Rifle"]="Scharfschützengewehr",
+["South America"]="Südamerika",
+["MEDIUM"]="MITTEL",
+["GasBomb"]="Gasbombe",
+["Europe"]="Europa",
+["Molotov"]="Molotowcocktail",
+["Africa"]="Afrika",
+["Seduction"]="Verführung",
+["Sticky Mine"]="Haftmine",
+["Asia"]="Asien",
+["- Will give you a parachute every second turn."]="- Wird dir jeden 2. Zug einen Fallschirm geben",
+["Parachute"]="Fallschirm",
+["Australia"]="Australien",
+["Baseballbat"]="Baseballschläger",
+["Antarctica"]="Antarktika",
+["HARD"]="SCHWER",
+["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",
+["Kerguelen"]="Kerguelen",
+["Hammer"]="Hammer",
+["Duration"]="Dauer",
+["Zealandia"]="Neuseeland-Kontinent",
+["- Will Get 1-3 random weapons"]="- wird 1–3 zufällige Waffen erhalten",
+["- Massive weapon bonus on first turn"]="- Großer Waffenbonus am ersten Zug",
+["Sundaland"]="Sunda",
+["- 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)!",
+["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!",
+["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: ",
+["a Hedgewars mini-game"]="ein Hedgewars Mini-Spiel",
+["Build a track and race."]="Konstruiere eine Strecke und mach ein Wettrennen.",
+["Round Limit:"]="Rundenbegrenzung:",
+["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.",
+["GAME BEGUN!!!"]="SPIEL GESTARTET!!!",
+["Complete the track as fast as you can!"]="Durchlaufe die Strecke so schnell du kannst!",
+["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!",
+["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",
+["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",
+["Mine"]="Mine",
+["Teleport"]="Teleporter",
+["Blowtorch"]="Schweißbrenner",
+["Flying Saucer"]="Fliegende Untertasse",
+["Low Gravity"]="Niedrige Schwerkraft",
+["FRENZY"]="WAHNSINN",
+["a frenetic Hedgewars mini-game"]="ein hektisches Hedgewars-Minispiel",
+["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",
+["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!",
+["Shield ON:"]="Schild AN:",
+["Power Remaining"]="Verbleibende Energie",
+["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!",
+["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",
+["Waypoint placed."]="Wegpunkt gesetzt",
+["Available points remaining: "]="Verfügbare Punkte verbleibend:",
+["NOT ENOUGH WAYPOINTS"]="NICHT GENUG WEGPUNKTE",
+["Place more waypoints using the 'Air Attack' weapon."]="Platziere mehr Wegpunkte durch Verwenden der »Luftangriff«-Waffe",
+["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",
+["Game Started!"]="Spiel gestartet!",
+["CAPTURE THE FLAG"]="EROBERE DIE FAHNE",
+["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)",
+["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!",
+["Each turn you get one random weapon"]="Du bekommst jede Runde eine zufällig gewählte Waffe.",
+["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",
+["Flamethrower"]="Flammenwerfer",
+["Freezer"]="Eiskanone",
+["Land Sprayer"]="Landkanone",
+["Whip"]="Peitsche",
+["Baseball Bat"]="Baseballschläger",
+["Dynamite"]="Dynamit",
+["Cake"]="Kuchen",
+["Ballgun"]="Ballkanone",
+["Cleaver"]="Hackebeil",
+["Birdy"]="Birdy",
+["Pickhammer"]="Presslufthammer",
+["Personal Portal Device"]="Portalgerät",
+["Rope"]="Seil",
+["Invulnerable"]="Unverwundbar",
+["Laser Sight"]="Laservisier",
+["Vampirism"]="Vampirismus",
+["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",
+["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.",
+["Teleporation Node"]="Teleporterstation",
+["Allows free teleportation between other nodes."]="Ermöglicht kostenlose Teleportationen zwischen anderen Stationen.",
+["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",
+["Achievement obtained: Lively Lifeguard"]="Errungenschaft erhalten: Lebhafter Lebensretter",
+["Challenge completed!"]="Herausforderung bewältigt!",
+["Challenge"]="Herausforderung",
+["%d Hapless Hogs left"]="%d Glücklose Igel verbleibend",
+["Disqualified!"]="Disqualifiziert!",
+["You haven't rescued anyone."]="Du hast niemanden gerettet.",
+["You have obtained an achievement: Lively Lifeguard"]="Du hast eine Errungenschaft erhalten: Lebhafter Lebensretter",
+["You must survive the flood in order to score."]="Du musst das Hochwasser überleben um zu punkten.",
+["Your hedgehog died!"]="Dein Igel ist gestorben!",
+["You saved %d of 8 Hapless Hogs."]="Du hast %d von 8 Glücklosen Igeln gerettet."
+}
--- a/share/hedgewars/Data/Locale/de.txt	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Locale/de.txt	Thu Sep 03 20:59:48 2015 +0300
@@ -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
--- a/share/hedgewars/Data/Locale/en.txt	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Locale/en.txt	Thu Sep 03 20:59:48 2015 +0300
@@ -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!
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Locale/hedgewars_de.ts	Thu Sep 03 20:59:48 2015 +0300
@@ -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>
--- a/share/hedgewars/Data/Locale/missions_de.txt	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Locale/missions_de.txt	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Locale/missions_en.txt	Thu Sep 03 20:59:48 2015 +0300
@@ -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/tips_en.xml	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Locale/tips_en.xml	Thu Sep 03 20:59:48 2015 +0300
@@ -3,59 +3,77 @@
      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>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—theyll 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>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>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>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>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>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>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 to 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/Maps/ClimbHome/map.lua	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Maps/ClimbHome/map.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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!")
Binary file share/hedgewars/Data/Maps/portal/mask.png has changed
--- a/share/hedgewars/Data/Missions/Campaign/01#Boot_Camp.lua	Sat Aug 15 16:23:00 2015 +0300
+++ /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	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/epil.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/family.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/queen.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Bazooka.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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, "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
--- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Cluster_Bomb.lua	Sat Aug 15 16:23:00 2015 +0300
+++ /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_-_Shotgun.lua	Sat Aug 15 16:23:00 2015 +0300
+++ /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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Sniper_Rifle.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Thu Sep 03 20:59:48 2015 +0300
@@ -0,0 +1,54 @@
+HedgewarsScriptLoad("/Scripts/SpeedShoppa.lua")
+
+local params = {}
+params.missionTitle = loc("The Customor 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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Missions/Training/ClimbHome.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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/User_Mission_-_RCPlane_Challenge.lua	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Missions/Training/User_Mission_-_RCPlane_Challenge.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Missions/Training/User_Mission_-_That_Sinking_Feeling.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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("The flood has stopped! Challenge over.")
+				SendStat(siGameResult, loc("Challenge completed!"))
+				SendStat(siPlayerKills, tostring(hhCount), loc("Nameless Heroes"))
+				SendStat(siPointType, "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, "points")
+
+		SendStat(siGameResult, loc("Disqualified!"))
 		GameOver = true
+		EndGame()
 	end
 
 end
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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Construction_Mode.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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(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
--- a/share/hedgewars/Data/Scripts/Multiplayer/Continental_supplies.lua	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Continental_supplies.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Scripts/Multiplayer/DiagonalMaze.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Frenzy.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Highlander.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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 .. " (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
+--]]
--- a/share/hedgewars/Data/Scripts/Multiplayer/ShoppaMap.lua	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Scripts/Multiplayer/ShoppaMap.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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
--- a/share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -1,1171 +1,1295 @@
-------------------------------------------
--- TECH RACER v0.6
------------------------------------------
-
---------------
--- TO DO
---------------
--- allow scrolling of maps
--- place waypoints for the registered maps automatically.
-
---------------
---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)
-
------------------------------
--- 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
-local infUFO = 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 specialPointsFlag = {}
-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
-
-		InterpretPoints()
-
-		-- these are from onParameters()
-		if (mapID == nil) or (mapID == 0) then
-			LoadMap(2000)
-		else
-			LoadMap(mapID)
-		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"])
-	infUFO = params["ufo"]
-
-	roundLimit = tonumber(params["rounds"])
-
-	if (roundLimit == 0) or (roundLimit == nil) then
-		roundLimit = 3
-	end
-
-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 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")]]
-
-		-- 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
-
-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()
-
-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 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 (infUFO == "true") 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) == gtAirMine) 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/Tunnels.lua	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Tunnels.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Scripts/SpeedShoppa.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -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
--- a/share/hedgewars/Data/Scripts/TechMaps.lua	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Scripts/TechMaps.lua	Thu Sep 03 20:59:48 2015 +0300
@@ -1,2041 +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.
-
-HedgewarsScriptLoad("/Scripts/Tracker.lua")
-
--- 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 LoadMap(mID)
-
-	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
-
-	-- not really a racing map, just a simple testmap that contains
-	-- a bunch of different stuff to test HWMAP conversion
-	------ 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)
-
-	elseif mID == 3 then
-
-		-- more detailed landflag test map, should hopefully work now
-		-- probably my second favorite techracer map
-		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)
-
-		------ 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 == 4 then
-
-		-- tiny airmine explosion knock concept test
-		-- currently won't play nicely with others
-		------ 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)
-
-
-	elseif mID == 5 then
-
-		--Helix airmine map
-		------ 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)
-
-		------ 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 == 6 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)
-
-	------ 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 == 7 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)
-
-		------ 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 == 8 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(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(1710, 1769, sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal)
-	LoadSprite(1778, 1768, sprAmGirder, 3, 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)
-
-	------ 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 == 9 then
-	--Bouncy UFO MAP
-	-- should be played with infinite fuel
-
-		------ 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)
-
-		------ 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)
-
-		------ LAND SPRITE LIST ------
-
-		------ HEALTH CRATE LIST ------
-
-		------ 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)
-
-
-	else
-
-		-- the first test epic multi map
-		-- default to this crazy shit
-		------ GIRDER LIST ------
-		LoadSprite(430, 1871, sprAmGirder, 2)
-		LoadSprite(1249, 1914, sprAmGirder, 4)
-		LoadSprite(1394, 1849, sprAmGirder, 7)
-		LoadSprite(1522, 1848, sprAmGirder, 5)
-		LoadSprite(1578, 1959, sprAmGirder, 2)
-		LoadSprite(1545, 2011, sprAmGirder, 0)
-		LoadSprite(430, 1749, sprAmGirder, 6)
-		LoadSprite(430, 1589, sprAmGirder, 6)
-		LoadSprite(358, 1499, sprAmGirder, 4)
-		LoadSprite(198, 1499, sprAmGirder, 4)
-		LoadSprite(72, 1571, sprAmGirder, 7)
-		LoadSprite(339, 1618, sprAmGirder, 4)
-		LoadSprite(520, 1499, sprAmGirder, 4)
-		LoadSprite(680, 1499, sprAmGirder, 4)
-		LoadSprite(839, 1499, sprAmGirder, 4)
-		LoadSprite(1000, 1499, sprAmGirder, 4)
-		LoadSprite(1404, 1730, sprAmGirder, 5)
-		LoadSprite(1288, 1613, sprAmGirder, 5)
-		LoadSprite(1200, 1529, sprAmGirder, 1)
-		LoadSprite(1125, 1495, sprAmGirder, 0)
-		LoadSprite(1667, 2011, sprAmGirder, 4)
-		LoadSprite(1812, 1951, sprAmGirder, 7)
-		LoadSprite(1964, 2024, sprAmGirder, 0)
-		LoadSprite(1957, 1892, sprAmGirder, 4)
-		LoadSprite(2103, 1949, sprAmGirder, 5)
-		LoadSprite(2242, 2017, sprAmGirder, 4)
-		LoadSprite(2404, 2017, sprAmGirder, 4)
-		LoadSprite(2548, 1955, sprAmGirder, 7)
-		LoadSprite(2635, 1871, sprAmGirder, 3)
-		LoadSprite(2749, 1836, sprAmGirder, 4)
-		LoadSprite(2751, 1999, sprAmGirder, 2)
-		LoadSprite(2749, 1947, sprAmGirder, 0)
-		LoadSprite(2865, 1870, sprAmGirder, 1)
-		LoadSprite(2954, 1954, sprAmGirder, 5)
-		LoadSprite(3061, 2017, sprAmGirder, 0)
-		LoadSprite(3137, 1984, sprAmGirder, 3)
-		LoadSprite(3169, 1864, sprAmGirder, 6)
-		LoadSprite(3169, 1702, sprAmGirder, 6)
-		LoadSprite(3170, 1540, sprAmGirder, 6)
-		LoadSprite(3170, 1418, sprAmGirder, 2)
-		LoadSprite(3138, 1339, sprAmGirder, 1)
-		LoadSprite(3107, 1260, sprAmGirder, 2)
-		LoadSprite(3153, 1194, sprAmGirder, 3)
-		LoadSprite(3230, 1163, sprAmGirder, 0)
-		LoadSprite(3305, 1201, sprAmGirder, 1)
-		LoadSprite(3334, 1277, sprAmGirder, 2)
-		LoadSprite(3227, 1540, sprAmGirder, 6)
-		LoadSprite(3228, 1419, sprAmGirder, 2)
-		LoadSprite(3334, 1358, sprAmGirder, 2)
-		LoadSprite(3280, 1387, sprAmGirder, 0)
-		LoadSprite(3227, 1702, sprAmGirder, 6)
-		LoadSprite(3227, 1864, sprAmGirder, 6)
-		LoadSprite(3253, 1981, sprAmGirder, 1)
-		LoadSprite(3366, 2017, sprAmGirder, 4)
-		LoadSprite(3528, 2018, sprAmGirder, 4)
-		LoadSprite(3689, 2018, sprAmGirder, 4)
-		LoadSprite(246, 1262, sprAmGirder, 4)
-		LoadSprite(407, 1262, sprAmGirder, 4)
-		LoadSprite(568, 1262, sprAmGirder, 4)
-		LoadSprite(731, 1262, sprAmGirder, 4)
-		LoadSprite(894, 1261, sprAmGirder, 4)
-		LoadSprite(1056, 1261, sprAmGirder, 4)
-		LoadSprite(1179, 1262, sprAmGirder, 0)
-		LoadSprite(1288, 1314, sprAmGirder, 5)
-		LoadSprite(1406, 1433, sprAmGirder, 5)
-		LoadSprite(1525, 1549, sprAmGirder, 5)
-		LoadSprite(1642, 1666, sprAmGirder, 5)
-		LoadSprite(1749, 1728, sprAmGirder, 0)
-		LoadSprite(1956, 1802, sprAmGirder, 6)
-		LoadSprite(1956, 1640, sprAmGirder, 6)
-		LoadSprite(1782, 1638, sprAmGirder, 6)
-		LoadSprite(1835, 1487, sprAmGirder, 7)
-		LoadSprite(1942, 1430, sprAmGirder, 0)
-		LoadSprite(2051, 1486, sprAmGirder, 5)
-		LoadSprite(2109, 1639, sprAmGirder, 6)
-		LoadSprite(2177, 1778, sprAmGirder, 5)
-		LoadSprite(2323, 1840, sprAmGirder, 4)
-		LoadSprite(49, 1029, sprAmGirder, 0)
-		LoadSprite(499, 1172, sprAmGirder, 6)
-		LoadSprite(527, 1054, sprAmGirder, 3)
-		LoadSprite(604, 1026, sprAmGirder, 0)
-		LoadSprite(680, 1056, sprAmGirder, 1)
-		LoadSprite(719, 1168, sprAmGirder, 6)
-		LoadSprite(89, 728, sprAmGirder, 4)
-		LoadSprite(251, 728, sprAmGirder, 4)
-		LoadSprite(412, 728, sprAmGirder, 4)
-		LoadSprite(572, 728, sprAmGirder, 4)
-		LoadSprite(733, 728, sprAmGirder, 4)
-		LoadSprite(894, 728, sprAmGirder, 4)
-		LoadSprite(1016, 728, sprAmGirder, 0)
-		LoadSprite(1067, 799, sprAmGirder, 6)
-		LoadSprite(1139, 891, sprAmGirder, 4)
-		LoadSprite(1067, 1171, sprAmGirder, 6)
-		LoadSprite(1067, 1049, sprAmGirder, 2)
-		LoadSprite(1136, 999, sprAmGirder, 4)
-		LoadSprite(1005, 854, sprAmGirder, 2)
-		LoadSprite(972, 803, sprAmGirder, 0)
-		LoadSprite(920, 780, sprAmGirder, 2)
-		LoadSprite(891, 1206, sprAmGirder, 2)
-		LoadSprite(887, 1150, sprAmGirder, 0)
-		LoadSprite(3018, 1311, sprAmGirder, 4)
-		LoadSprite(2871, 1369, sprAmGirder, 7)
-		LoadSprite(2809, 1523, sprAmGirder, 6)
-		LoadSprite(2809, 1647, sprAmGirder, 2)
-		LoadSprite(2469, 1777, sprAmGirder, 7)
-		LoadSprite(2612, 1715, sprAmGirder, 4)
-		LoadSprite(2809, 1702, sprAmGirder, 0)
-		LoadSprite(2727, 1694, sprAmGirder, 0)
-
-		LoadSprite(3334, 1481, sprAmGirder, 6)
-		LoadSprite(3334, 1643, sprAmGirder, 6)
-		LoadSprite(3334, 1804, sprAmGirder, 6)
-		LoadSprite(3403, 1940, sprAmGirder, 5)
-		LoadSprite(1120, 944, sprAmGirder, 2)
-		LoadSprite(1163, 945, sprAmGirder, 2)
-		LoadSprite(1141, 781, sprAmGirder, 5)
-		LoadSprite(81, 629, sprAmGirder, 1)
-		LoadSprite(102, 498, sprAmGirder, 3)
-		LoadSprite(81, 373, sprAmGirder, 1)
-		LoadSprite(179, 453, sprAmGirder, 6)
-		LoadSprite(100, 260, sprAmGirder, 3)
-		LoadSprite(179, 330, sprAmGirder, 2)
-		LoadSprite(249, 544, sprAmGirder, 4)
-		LoadSprite(410, 545, sprAmGirder, 4)
-		LoadSprite(571, 543, sprAmGirder, 4)
-		LoadSprite(731, 543, sprAmGirder, 4)
-		LoadSprite(891, 544, sprAmGirder, 4)
-		LoadSprite(1014, 544, sprAmGirder, 0)
-		LoadSprite(1779, 1321, sprAmGirder, 6)
-		LoadSprite(1779, 1159, sprAmGirder, 6)
-		LoadSprite(1779, 997, sprAmGirder, 6)
-		LoadSprite(1779, 836, sprAmGirder, 6)
-		LoadSprite(1722, 684, sprAmGirder, 5)
-		LoadSprite(1137, 545, sprAmGirder, 4)
-		LoadSprite(1298, 545, sprAmGirder, 4)
-		LoadSprite(1460, 546, sprAmGirder, 4)
-		LoadSprite(1608, 600, sprAmGirder, 5)
-		LoadSprite(1508, 1005, sprAmGirder, 4)
-		LoadSprite(160, 246, sprAmGirder, 1)
-		LoadSprite(1821, 1356, sprAmGirder, 3)
-		LoadSprite(1938, 1323, sprAmGirder, 4)
-		LoadSprite(2086, 1381, sprAmGirder, 5)
-		LoadSprite(4004, 2018, sprAmGirder, 4)
-		LoadSprite(3934, 1926, sprAmGirder, 6)
-		LoadSprite(3965, 1835, sprAmGirder, 0)
-		LoadSprite(4015, 1763, sprAmGirder, 6)
-		LoadSprite(4015, 1603, sprAmGirder, 6)
-		LoadSprite(4015, 1442, sprAmGirder, 6)
-		LoadSprite(4015, 1280, sprAmGirder, 6)
-		LoadSprite(4014, 1118, sprAmGirder, 6)
-		LoadSprite(4014, 956, sprAmGirder, 6)
-		LoadSprite(4014, 793, sprAmGirder, 6)
-		LoadSprite(4014, 632, sprAmGirder, 6)
-		LoadSprite(4014, 469, sprAmGirder, 6)
-		LoadSprite(3981, 351, sprAmGirder, 1)
-		LoadSprite(3985, 204, sprAmGirder, 3)
-		LoadSprite(4045, 156, sprAmGirder, 0)
-		LoadSprite(3667, 344, sprAmGirder, 0)
-		LoadSprite(4016, 1925, sprAmGirder, 6)
-		LoadSprite(3998, 1926, sprAmGirder, 6)
-		LoadSprite(3980, 1925, sprAmGirder, 6)
-		LoadSprite(3957, 1926, sprAmGirder, 6)
-		LoadSprite(3843, 1832, sprAmGirder, 4)
-		LoadSprite(3682, 1832, sprAmGirder, 4)
-		LoadSprite(3561, 1833, sprAmGirder, 0)
-		LoadSprite(3484, 1796, sprAmGirder, 1)
-		LoadSprite(3455, 1675, sprAmGirder, 6)
-		LoadSprite(3455, 1513, sprAmGirder, 6)
-		LoadSprite(3455, 1351, sprAmGirder, 6)
-		LoadSprite(1601, 476, sprAmGirder, 7)
-		LoadSprite(1706, 421, sprAmGirder, 0)
-		LoadSprite(1888, 366, sprAmGirder, 6)
-
-		LoadSprite(3997, 1743, sprAmGirder, 6)
-		LoadSprite(3979, 1742, sprAmGirder, 6)
-		LoadSprite(3962, 1741, sprAmGirder, 6)
-		LoadSprite(3943, 1741, sprAmGirder, 6)
-		LoadSprite(2199, 393, sprAmGirder, 7)
-		LoadSprite(2304, 337, sprAmGirder, 0)
-		LoadSprite(2409, 392, sprAmGirder, 5)
-		LoadSprite(2470, 502, sprAmGirder, 2)
-		LoadSprite(2412, 606, sprAmGirder, 7)
-		LoadSprite(2308, 673, sprAmGirder, 0)
-		LoadSprite(2202, 612, sprAmGirder, 5)
-		LoadSprite(2138, 507, sprAmGirder, 2)
-		LoadSprite(2739, 378, sprAmGirder, 7)
-		LoadSprite(2847, 322, sprAmGirder, 0)
-		LoadSprite(2953, 378, sprAmGirder, 5)
-		LoadSprite(2680, 489, sprAmGirder, 2)
-		LoadSprite(3012, 489, sprAmGirder, 2)
-		LoadSprite(2736, 594, sprAmGirder, 5)
-		LoadSprite(2841, 657, sprAmGirder, 0)
-		LoadSprite(2949, 594, sprAmGirder, 7)
-		LoadSprite(2448, 837, sprAmGirder, 7)
-		LoadSprite(2594, 779, sprAmGirder, 4)
-		LoadSprite(2739, 836, sprAmGirder, 5)
-		LoadSprite(2390, 950, sprAmGirder, 2)
-		LoadSprite(2789, 950, sprAmGirder, 2)
-		LoadSprite(2593, 904, sprAmGirder, 4)
-		LoadSprite(2727, 1056, sprAmGirder, 7)
-		LoadSprite(2452, 1058, sprAmGirder, 5)
-		LoadSprite(2510, 1215, sprAmGirder, 6)
-		LoadSprite(2663, 1208, sprAmGirder, 6)
-		LoadSprite(2510, 1378, sprAmGirder, 6)
-		LoadSprite(2664, 1369, sprAmGirder, 6)
-		LoadSprite(300, 275, sprAmGirder, 0)
-		LoadSprite(439, 274, sprAmGirder, 0)
-		LoadSprite(628, 273, sprAmGirder, 4)
-		LoadSprite(811, 271, sprAmGirder, 0)
-		LoadSprite(737, 373, sprAmGirder, 4)
-		LoadSprite(934, 440, sprAmGirder, 0)
-		LoadSprite(1075, 439, sprAmGirder, 0)
-		LoadSprite(1209, 438, sprAmGirder, 0)
-		LoadSprite(1383, 439, sprAmGirder, 4)
-		--LoadSprite(2159, 1525, sprAmGirder, 6)
-		LoadSprite(3547, 344, sprAmGirder, 4)
-		LoadSprite(3584, 254, sprAmGirder, 6)
-		LoadSprite(3508, 132, sprAmGirder, 5)
-		LoadSprite(3335, 1117, sprAmGirder, 6)
-		LoadSprite(3335, 956, sprAmGirder, 6)
-		LoadSprite(3335, 795, sprAmGirder, 6)
-		LoadSprite(3335, 634, sprAmGirder, 6)
-		LoadSprite(3335, 513, sprAmGirder, 2)
-		LoadSprite(3401, 404, sprAmGirder, 7)
-		LoadSprite(3455, 1190, sprAmGirder, 6)
-		LoadSprite(3455, 1029, sprAmGirder, 6)
-		LoadSprite(3455, 868, sprAmGirder, 6)
-		LoadSprite(3455, 705, sprAmGirder, 6)
-		LoadSprite(3455, 582, sprAmGirder, 2)
-		LoadSprite(3485, 503, sprAmGirder, 3)
-		LoadSprite(3601, 475, sprAmGirder, 4)
-		LoadSprite(3719, 444, sprAmGirder, 3)
-		LoadSprite(3094, 828, sprAmGirder, 5)
-		LoadSprite(2064, 947, sprAmGirder, 7)
-		LoadSprite(1826, 512, sprAmGirder, 7)
-
-		LoadSprite(3420, 49, sprAmGirder, 1)
-		LoadSprite(410, 682, sprAmGirder, 3)
-		LoadSprite(528, 653, sprAmGirder, 4)
-		LoadSprite(688, 653, sprAmGirder, 4)
-		LoadSprite(805, 684, sprAmGirder, 1)
-		LoadSprite(528, 672, sprAmGirder, 4)
-		LoadSprite(688, 672, sprAmGirder, 4)
-		LoadSprite(500, 696, sprAmGirder, 4)
-		LoadSprite(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
-
-
-end
-
+------------------------------------------------
+-- 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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Themes/Art/theme.cfg	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/share/hedgewars/Data/Themes/Olympics/theme.cfg	Thu Sep 03 20:59:48 2015 +0300
@@ -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	Sat Aug 15 16:23:00 2015 +0300
+++ b/tools/CMakeLists.txt	Thu Sep 03 20:59:48 2015 +0300
@@ -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})
--- a/tools/hwmap.hs	Sat Aug 15 16:23:00 2015 +0300
+++ b/tools/hwmap.hs	Thu Sep 03 20:59:48 2015 +0300
@@ -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)]]
--- a/tools/hwmap2txt/hwmapconverter/hwmapconverter.pro	Sat Aug 15 16:23:00 2015 +0300
+++ b/tools/hwmap2txt/hwmapconverter/hwmapconverter.pro	Thu Sep 03 20:59:48 2015 +0300
@@ -1,20 +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
+#-------------------------------------------------
+#
+# 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
--- a/tools/hwmap2txt/hwmapconverter/main.cpp	Sat Aug 15 16:23:00 2015 +0300
+++ b/tools/hwmap2txt/hwmapconverter/main.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -1,11 +1,11 @@
-#include "mainwindow.h"
-#include <QApplication>
-
-int main(int argc, char *argv[])
-{
-    QApplication a(argc, argv);
-    MainWindow w;
-    w.show();
-
-    return a.exec();
-}
+#include "mainwindow.h"
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    MainWindow w;
+    w.show();
+
+    return a.exec();
+}
--- a/tools/hwmap2txt/hwmapconverter/mainwindow.cpp	Sat Aug 15 16:23:00 2015 +0300
+++ b/tools/hwmap2txt/hwmapconverter/mainwindow.cpp	Thu Sep 03 20:59:48 2015 +0300
@@ -1,137 +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());
-    }
-}
+#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());
+    }
+}
--- a/tools/hwmap2txt/hwmapconverter/mainwindow.h	Sat Aug 15 16:23:00 2015 +0300
+++ b/tools/hwmap2txt/hwmapconverter/mainwindow.h	Thu Sep 03 20:59:48 2015 +0300
@@ -1,27 +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
+#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