[hedgewars] 02/05: Imported Upstream version 0.9.22-dfsg

Gianfranco Costamagna locutusofborg-guest at moszumanska.debian.org
Mon Nov 2 11:18:15 UTC 2015


This is an automated email from the git hooks/post-receive script.

locutusofborg-guest pushed a commit to branch master
in repository hedgewars.

commit 8547f615e64c5f0428a5d647d58715682fd5a5ee
Author: Gianfranco Costamagna <costamagnagianfranco at yahoo.it>
Date:   Mon Nov 2 11:59:42 2015 +0100

    Imported Upstream version 0.9.22-dfsg
---
 CMakeLists.txt                                     |   2 +-
 CTestTestfile.cmake                                |  16 +++---
 ChangeLog.txt                                      |  13 ++++-
 QTfrontend/servermessages.h                        |  56 ++++++++++-----------
 gameServer/Actions.hs                              |   6 +--
 gameServer/CoreTypes.hs                            |   5 +-
 gameServer/EngineInteraction.hs                    |   9 ++--
 gameServer/OfficialServer/GameReplayStore.hs       |  11 ++--
 gameServer/OfficialServer/extdbinterface.hs        |  18 ++++---
 hedgewars/uGears.pas                               |   1 +
 hedgewars/uGearsHandlersMess.pas                   |  19 +++++--
 hedgewars/uGearsHandlersRope.pas                   |  10 ++--
 hedgewars/uGearsHedgehog.pas                       |   9 +++-
 hedgewars/uGearsList.pas                           |  12 ++++-
 hedgewars/uGearsUtils.pas                          |  14 +++---
 hedgewars/uScript.pas                              |  33 +++++++-----
 hedgewars/uTeams.pas                               |   1 -
 .../assets/Data/Sounds/Droplet1.ogg                | Bin 9084 -> 0 bytes
 .../assets/Data/Sounds/Droplet2.ogg                | Bin 7934 -> 0 bytes
 .../assets/Data/Sounds/Droplet3.ogg                | Bin 10485 -> 0 bytes
 share/hedgewars/Data/Locale/tips_en.xml            |   9 ++--
 share/hedgewars/Data/Maps/Basketball/map.lua       |   4 ++
 share/hedgewars/Data/Maps/Knockball/map.lua        |   4 ++
 share/hedgewars/Data/Maps/TrophyRace/map.lua       |   7 ++-
 share/hedgewars/Data/Sounds/Droplet1.ogg           | Bin 9084 -> 0 bytes
 share/hedgewars/Data/Sounds/Droplet2.ogg           | Bin 7934 -> 0 bytes
 share/hedgewars/Data/Sounds/Droplet3.ogg           | Bin 10485 -> 0 bytes
 share/version_info.txt                             |   4 +-
 28 files changed, 164 insertions(+), 99 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5392faa..b8a0dd2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,7 +53,7 @@ set(FONTS_DIRS "" CACHE STRING "Additional paths to folders where required fonts
 set(CPACK_PACKAGE_VERSION_MAJOR 0)
 set(CPACK_PACKAGE_VERSION_MINOR 9)
 set(CPACK_PACKAGE_VERSION_PATCH 22)
-set(HEDGEWARS_PROTO_VER 50)
+set(HEDGEWARS_PROTO_VER 51)
 set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
 include(${CMAKE_MODULE_PATH}/revinfo.cmake)
 
diff --git a/CTestTestfile.cmake b/CTestTestfile.cmake
index 43e4aca..57bc33b 100644
--- a/CTestTestfile.cmake
+++ b/CTestTestfile.cmake
@@ -1,15 +1,15 @@
 # CMake generated Testfile for 
-# Source directory: /home/locutus/branches/hw
-# Build directory: /home/locutus/branches/hw
+# Source directory: /usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-Clone
+# Build directory: /usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-Clone
 # 
 # This file includes the relevant testing commands required for 
 # testing this directory and lists subdirectories to be tested as well.
-add_test(drillrockets_boom.lua "bin/hwengine" "--prefix" "/home/locutus/branches/hw/share/hedgewars/Data" "--nosound" "--nomusic" "--stats-only" "--lua-test" "/home/locutus/branches/hw/tests/lua/drillrockets_boom.lua")
-add_test(drillrockets_drill.lua "bin/hwengine" "--prefix" "/home/locutus/branches/hw/share/hedgewars/Data" "--nosound" "--nomusic" "--stats-only" "--lua-test" "/home/locutus/branches/hw/tests/lua/drillrockets_drill.lua")
-add_test(twothousandmines.lua "bin/hwengine" "--prefix" "/home/locutus/branches/hw/share/hedgewars/Data" "--nosound" "--nomusic" "--stats-only" "--lua-test" "/home/locutus/branches/hw/tests/lua/twothousandmines.lua")
-add_test(luaAPI/zoom_get_set.lua "bin/hwengine" "--prefix" "/home/locutus/branches/hw/share/hedgewars/Data" "--nosound" "--nomusic" "--stats-only" "--lua-test" "/home/locutus/branches/hw/tests/lua/luaAPI/zoom_get_set.lua")
-add_test(luaAPI/gravity_get_set.lua "bin/hwengine" "--prefix" "/home/locutus/branches/hw/share/hedgewars/Data" "--nosound" "--nomusic" "--stats-only" "--lua-test" "/home/locutus/branches/hw/tests/lua/luaAPI/gravity_get_set.lua")
-add_test(hellfire_burns.lua "bin/hwengine" "--prefix" "/home/locutus/branches/hw/share/hedgewars/Data" "--nosound" "--nomusic" "--stats-only" "--lua-test" "/home/locutus/branches/hw/tests/lua/hellfire_burns.lua")
+add_test(hellfire_burns.lua "bin/hwengine" "--prefix" "/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-Clone/share/hedgewars/Data" "--nosound" "--nomusic" "--stats-only" "--lua-test" "/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-Clone/tests/lua/hellfire_burns.lua")
+add_test(luaAPI/gravity_get_set.lua "bin/hwengine" "--prefix" "/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-Clone/share/hedgewars/Data" "--nosound" "--nomusic" "--stats-only" "--lua-test" "/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-Clone/tests/lua/luaAPI/gravity_get_set.lua")
+add_test(luaAPI/zoom_get_set.lua "bin/hwengine" "--prefix" "/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-Clone/share/hedgewars/Data" "--nosound" "--nomusic" "--stats-only" "--lua-test" "/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-Clone/tests/lua/luaAPI/zoom_get_set.lua")
+add_test(twothousandmines.lua "bin/hwengine" "--prefix" "/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-Clone/share/hedgewars/Data" "--nosound" "--nomusic" "--stats-only" "--lua-test" "/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-Clone/tests/lua/twothousandmines.lua")
+add_test(drillrockets_boom.lua "bin/hwengine" "--prefix" "/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-Clone/share/hedgewars/Data" "--nosound" "--nomusic" "--stats-only" "--lua-test" "/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-Clone/tests/lua/drillrockets_boom.lua")
+add_test(drillrockets_drill.lua "bin/hwengine" "--prefix" "/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-Clone/share/hedgewars/Data" "--nosound" "--nomusic" "--stats-only" "--lua-test" "/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-Clone/tests/lua/drillrockets_drill.lua")
 subdirs(gameServer)
 subdirs(misc/libphyslayer)
 subdirs(hedgewars)
diff --git a/ChangeLog.txt b/ChangeLog.txt
index e48c094..7ccc96a 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -2,10 +2,11 @@
 * bugfixes
 
 0.9.21 -> 0.9.22
+ + New Weapon / Map object: AirMine (floating mine that will follow nearby hedgehogs)
  + Extensive changes to TechRacer: Variable terrain types, enhanced parameters, hwmap interpreter, fuel limiter, etc. 
  + 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
+ + Various tweaks 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
@@ -13,10 +14,20 @@
  + Improved "Art" theme.
  * Generated bridges/girders are now connected better to the land mass
  * Fixed rubberband sprite
+ * Fixed Wind-Indicator being wrong in certain situations
+ * Melon Bomb Pieces now bounce on Rubberband
+ * Reduced menu music volume
  * The game will now fallback to default voicepack if a team's voicepack is not locally installed. (Instead of rendering team voiceless)
  * Hammer now does more damage when the Extra-Damage utility is used
  * Many other bug fixes
 
+Lua-API:
+ + New map parameter: MapFeatureSize -- numeric representation of detail slider below map preview; use within onGameInit()/onPreviewInit()
+ + New function: SetMaxBuildDistance([ distInPx ]) -- specify how many pixels away a hedgehog can still place girders/etc. set to 0 for no limit; call with no param to reset to default
+ + New hook: onSuddenDeath() -- called by engine when sudden death begins
+ * Previously missing gear states are now available (gstSubmersible, gstFrozen and gstNoGravity)
+ * Fixed OnHogAttack giving the incorrect AmmoType (amNothing) under certain conditions
+
 0.9.20 -> 0.9.21:
  + New type of randomly generated maps: Perlin Maps.
  + Old Random generated maps are more diverse now.
diff --git a/QTfrontend/servermessages.h b/QTfrontend/servermessages.h
index 14b836c..e7c79c8 100644
--- a/QTfrontend/servermessages.h
+++ b/QTfrontend/servermessages.h
@@ -1,25 +1,4 @@
 const char * serverMessages[] = {
-QT_TRANSLATE_NOOP("server", "You already have voted"),
-QT_TRANSLATE_NOOP("server", "Your vote counted"),
-QT_TRANSLATE_NOOP("server", "Voting closed"),
-QT_TRANSLATE_NOOP("server", "Pause toggled"),
-QT_TRANSLATE_NOOP("server", "New voting started"),
-QT_TRANSLATE_NOOP("server", "Voting expired"),
-QT_TRANSLATE_NOOP("server", "kick"),
-QT_TRANSLATE_NOOP("server", "map"),
-QT_TRANSLATE_NOOP("server", "pause"),
-QT_TRANSLATE_NOOP("server", "new seed"),
-QT_TRANSLATE_NOOP("server", "number of hedgehogs in team"),
-QT_TRANSLATE_NOOP("server", "Nickname already chosen"),
-QT_TRANSLATE_NOOP("server", "Illegal nickname"),
-QT_TRANSLATE_NOOP("server", "Protocol already known"),
-QT_TRANSLATE_NOOP("server", "Bad number"),
-QT_TRANSLATE_NOOP("server", "Illegal room name"),
-QT_TRANSLATE_NOOP("server", "No such room"),
-QT_TRANSLATE_NOOP("server", "Room version incompatible to your hedgewars version"),
-QT_TRANSLATE_NOOP("server", "Joining restricted"),
-QT_TRANSLATE_NOOP("server", "Registered users only"),
-QT_TRANSLATE_NOOP("server", "You are banned in this room"),
 QT_TRANSLATE_NOOP("server", "Less than two clans!"),
 QT_TRANSLATE_NOOP("server", "Empty config entry"),
 QT_TRANSLATE_NOOP("server", "Restricted"),
@@ -32,6 +11,7 @@ QT_TRANSLATE_NOOP("server", "round in progress"),
 QT_TRANSLATE_NOOP("server", "restricted"),
 QT_TRANSLATE_NOOP("server", "REMOVE_TEAM: no such team"),
 QT_TRANSLATE_NOOP("server", "Not team owner!"),
+QT_TRANSLATE_NOOP("server", "Illegal room name"),
 QT_TRANSLATE_NOOP("server", "Room with such name already exists"),
 QT_TRANSLATE_NOOP("server", "/maxteams: specify number from 2 to 8"),
 QT_TRANSLATE_NOOP("server", "Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs"),
@@ -40,6 +20,23 @@ QT_TRANSLATE_NOOP("server", "callvote kick: no such user"),
 QT_TRANSLATE_NOOP("server", "callvote map: no such map"),
 QT_TRANSLATE_NOOP("server", "callvote pause: no game in progress"),
 QT_TRANSLATE_NOOP("server", "callvote hedgehogs: specify number from 1 to 8"),
+QT_TRANSLATE_NOOP("server", "Warning! Chat flood protection activated"),
+QT_TRANSLATE_NOOP("server", "Excess flood"),
+QT_TRANSLATE_NOOP("server", "Game messages flood detected - 1"),
+QT_TRANSLATE_NOOP("server", "Game messages flood detected - 2"),
+QT_TRANSLATE_NOOP("server", "Warning! Joins flood protection activated"),
+QT_TRANSLATE_NOOP("server", "There's no voting going on"),
+QT_TRANSLATE_NOOP("server", "You already have voted"),
+QT_TRANSLATE_NOOP("server", "Your vote counted"),
+QT_TRANSLATE_NOOP("server", "Voting closed"),
+QT_TRANSLATE_NOOP("server", "Pause toggled"),
+QT_TRANSLATE_NOOP("server", "New voting started"),
+QT_TRANSLATE_NOOP("server", "Voting expired"),
+QT_TRANSLATE_NOOP("server", "kick"),
+QT_TRANSLATE_NOOP("server", "map"),
+QT_TRANSLATE_NOOP("server", "pause"),
+QT_TRANSLATE_NOOP("server", "new seed"),
+QT_TRANSLATE_NOOP("server", "number of hedgehogs in team"),
 QT_TRANSLATE_NOOP("server", "Nickname is already in use"),
 QT_TRANSLATE_NOOP("server", "No checker rights"),
 QT_TRANSLATE_NOOP("server", "Authentication failed"),
@@ -47,11 +44,14 @@ QT_TRANSLATE_NOOP("server", "60 seconds cooldown after kick"),
 QT_TRANSLATE_NOOP("server", "kicked"),
 QT_TRANSLATE_NOOP("server", "Reconnected too fast"),
 QT_TRANSLATE_NOOP("server", "Ping timeout"),
-QT_TRANSLATE_NOOP("server", "Warning! Chat flood protection activated"),
-QT_TRANSLATE_NOOP("server", "Excess flood"),
-QT_TRANSLATE_NOOP("server", "Game messages flood detected - 1"),
-QT_TRANSLATE_NOOP("server", "Game messages flood detected - 2"),
-QT_TRANSLATE_NOOP("server", "Warning! Joins flood protection activated"),
-QT_TRANSLATE_NOOP("server", "bye"),
-QT_TRANSLATE_NOOP("server", "There's no voting going on")
+QT_TRANSLATE_NOOP("server", "No such room"),
+QT_TRANSLATE_NOOP("server", "Room version incompatible to your hedgewars version"),
+QT_TRANSLATE_NOOP("server", "Joining restricted"),
+QT_TRANSLATE_NOOP("server", "Registered users only"),
+QT_TRANSLATE_NOOP("server", "You are banned in this room"),
+QT_TRANSLATE_NOOP("server", "Nickname already chosen"),
+QT_TRANSLATE_NOOP("server", "Illegal nickname"),
+QT_TRANSLATE_NOOP("server", "Protocol already known"),
+QT_TRANSLATE_NOOP("server", "Bad number"),
+QT_TRANSLATE_NOOP("server", "bye")
 };
diff --git a/gameServer/Actions.hs b/gameServer/Actions.hs
index 30be107..5e9863a 100644
--- a/gameServer/Actions.hs
+++ b/gameServer/Actions.hs
@@ -757,15 +757,15 @@ processAction CheckRecord = do
 
 
 processAction (CheckFailed msg) = do
-    Just (CheckInfo fileName _) <- client's checkInfo
+    Just (CheckInfo fileName _ _) <- client's checkInfo
     io $ moveFailedRecord fileName
 
 
 processAction (CheckSuccess info) = do
-    Just (CheckInfo fileName teams) <- client's checkInfo
+    Just (CheckInfo fileName teams script) <- client's checkInfo
     p <- client's clientProto
     si <- gets serverInfo
-    io $ writeChan (dbQueries si) $ StoreAchievements p (B.pack fileName) (map toPair teams) info
+    io $ writeChan (dbQueries si) $ StoreAchievements p (B.pack fileName) (map toPair teams) script info
     io $ moveCheckedRecord fileName
     where
         toPair t = (teamname t, teamowner t)
diff --git a/gameServer/CoreTypes.hs b/gameServer/CoreTypes.hs
index c702df5..377072a 100644
--- a/gameServer/CoreTypes.hs
+++ b/gameServer/CoreTypes.hs
@@ -119,7 +119,8 @@ data CheckInfo =
     CheckInfo
     {
         recordFileName :: String,
-        recordTeams :: [TeamInfo]
+        recordTeams :: [TeamInfo],
+        recordScript :: B.ByteString
     }
 
 data ClientInfo =
@@ -345,7 +346,7 @@ data DBQuery =
     CheckAccount ClientIndex Int B.ByteString B.ByteString
     | ClearCache
     | SendStats Int Int
-    | StoreAchievements Word16 B.ByteString [(B.ByteString, B.ByteString)] [B.ByteString]
+    | StoreAchievements Word16 B.ByteString [(B.ByteString, B.ByteString)] B.ByteString [B.ByteString]
     | GetReplayName ClientIndex Int B.ByteString
     deriving (Show, Read)
 
diff --git a/gameServer/EngineInteraction.hs b/gameServer/EngineInteraction.hs
index bbfcee7..e9684ff 100644
--- a/gameServer/EngineInteraction.hs
+++ b/gameServer/EngineInteraction.hs
@@ -100,8 +100,8 @@ replayToDemo :: [TeamInfo]
         -> Map.Map B.ByteString B.ByteString
         -> Map.Map B.ByteString [B.ByteString]
         -> [B.ByteString]
-        -> [B.ByteString]
-replayToDemo ti mParams prms msgs = if not sane then [] else concat [
+        -> ([B.ByteString], [B.ByteString])
+replayToDemo ti mParams prms msgs = if not sane then ([], []) else ([scriptName], concat [
         [em "TD"]
         , maybeScript
         , maybeMap
@@ -117,7 +117,7 @@ replayToDemo ti mParams prms msgs = if not sane then [] else concat [
         , concatMap teamSetup ti
         , msgs
         , [em "!"]
-        ]
+        ])
     where
         keys1, keys2 :: Set.Set B.ByteString
         keys1 = Set.fromList ["FEATURE_SIZE", "MAP", "MAPGEN", "MAZE_SIZE", "SEED", "TEMPLATE"]
@@ -127,7 +127,8 @@ replayToDemo ti mParams prms msgs = if not sane then [] else concat [
             && (not . null . drop 41 $ scheme)
             && (not . null . tail $ prms Map.! "AMMO")
         mapGenTypes = ["+rnd+", "+maze+", "+drawn+", "+perlin+"]
-        maybeScript = let s = head . fromMaybe ["Normal"] $ Map.lookup "SCRIPT" prms in if s == "Normal" then [] else [eml ["escript Scripts/Multiplayer/", s, ".lua"]]
+        scriptName = head . fromMaybe ["Normal"] $ Map.lookup "SCRIPT" prms
+        maybeScript = let s = scriptName in if s == "Normal" then [] else [eml ["escript Scripts/Multiplayer/", s, ".lua"]]
         maybeMap = let m = mParams Map.! "MAP" in if m `elem` mapGenTypes then [] else [eml ["emap ", m]]
         scheme = tail $ prms Map.! "SCHEME"
         mapgen = mParams Map.! "MAPGEN"
diff --git a/gameServer/OfficialServer/GameReplayStore.hs b/gameServer/OfficialServer/GameReplayStore.hs
index 0bb6032..dca7eb0 100644
--- a/gameServer/OfficialServer/GameReplayStore.hs
+++ b/gameServer/OfficialServer/GameReplayStore.hs
@@ -16,7 +16,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  \-}
 
-{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE ScopedTypeVariables, OverloadedStrings #-}
 module OfficialServer.GameReplayStore where
 
 import Data.Time
@@ -70,11 +70,12 @@ loadReplay p blackList = E.handle (\(e :: SomeException) -> warningM "REPLAYS" "
     where
         loadFile :: String -> IO (Maybe CheckInfo, [B.ByteString])
         loadFile fileName = E.handle (\(e :: SomeException) ->
-                    warningM "REPLAYS" ("Problems reading " ++ fileName ++ ": " ++ show e) >> return (Just $ CheckInfo fileName [], [])) $ do
+                    warningM "REPLAYS" ("Problems reading " ++ fileName ++ ": " ++ show e) >> return (Just $ CheckInfo fileName [] "", [])) $ do
             (teams, params1, params2, roundMsgs) <- liftM read $ readFile fileName
-            return $ (
-                Just (CheckInfo fileName teams)
-                , let d = replayToDemo teams (Map.fromList params1) (Map.fromList params2) (reverse roundMsgs) in d `deepseq` d
+            let d = replayToDemo teams (Map.fromList params1) (Map.fromList params2) (reverse roundMsgs)
+            d `deepseq` return $ (
+                Just (CheckInfo fileName teams (head $ fst d))
+                , snd d
                 )
 
 moveFailedRecord :: String -> IO ()
diff --git a/gameServer/OfficialServer/extdbinterface.hs b/gameServer/OfficialServer/extdbinterface.hs
index bc6d7fe..e387a99 100644
--- a/gameServer/OfficialServer/extdbinterface.hs
+++ b/gameServer/OfficialServer/extdbinterface.hs
@@ -50,6 +50,9 @@ dbQueryAchievement =
     \ VALUES (?, (SELECT id FROM achievement_types WHERE name = ?), (SELECT uid FROM users WHERE name = ?), \
     \ ?, ?, ?, ?)"
 
+dbQueryGamesHistory =
+    "? ? ?"
+
 dbQueryReplayFilename = "SELECT filename FROM achievements WHERE id = ?"
 
 
@@ -83,8 +86,8 @@ dbInteractionLoop dbConn = forever $ do
 
         SendStats clients rooms ->
                 void $ execute dbConn dbQueryStats (clients, rooms)
-        StoreAchievements p fileName teams info ->
-            mapM_ (execute dbConn dbQueryAchievement) $ (parseStats p fileName teams) info
+        StoreAchievements p fileName teams script info ->
+            mapM_ (uncurry (execute dbConn)) $ parseStats p fileName teams script info
 
 
 --readTime = read . B.unpack . B.take 19 . B.drop 8
@@ -94,15 +97,16 @@ parseStats ::
     Word16 
     -> B.ByteString 
     -> [(B.ByteString, B.ByteString)] 
-    -> [B.ByteString] 
-    -> [(B.ByteString, B.ByteString, B.ByteString, Int, B.ByteString, B.ByteString, Int)]
-parseStats p fileName teams = ps
+    -> B.ByteString
+    -> [B.ByteString]
+    -> [(Query, (B.ByteString, B.ByteString, B.ByteString, Int, B.ByteString, B.ByteString, Int))]
+parseStats p fileName teams script = ps
     where
     time = readTime fileName
     ps [] = []
     ps ("DRAW" : bs) = ps bs
     ps ("WINNERS" : n : bs) = ps $ drop (readInt_ n) bs
-    ps ("ACHIEVEMENT" : typ : teamname : location : value : bs) =
+    ps ("ACHIEVEMENT" : typ : teamname : location : value : bs) = (dbQueryAchievement, 
         ( time
         , typ
         , fromMaybe "" (lookup teamname teams)
@@ -110,7 +114,7 @@ parseStats p fileName teams = ps
         , fileName
         , location
         , fromIntegral p
-        ) : ps bs
+        )) : ps bs
     ps (b:bs) = ps bs
 
 
diff --git a/hedgewars/uGears.pas b/hedgewars/uGears.pas
index 0d50da7..e8a26dd 100644
--- a/hedgewars/uGears.pas
+++ b/hedgewars/uGears.pas
@@ -320,6 +320,7 @@ case step of
                     Ammoz[amTardis].Probability:= 0;
                     end;
                 AddCaption(trmsg[sidSuddenDeath], cWhiteColor, capgrpGameState);
+                ScriptCall('onSuddenDeath');
                 playSound(sndSuddenDeath);
                 StopMusic;
                 if SDMusicFN <> '' then PlayMusic
diff --git a/hedgewars/uGearsHandlersMess.pas b/hedgewars/uGearsHandlersMess.pas
index 42e471f..78b257e 100644
--- a/hedgewars/uGearsHandlersMess.pas
+++ b/hedgewars/uGearsHandlersMess.pas
@@ -5197,7 +5197,9 @@ end;
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepPoisonCloud(Gear: PGear);
 begin
-    WorldWrap(Gear);
+    // don't bounce
+    if WorldEdge <> weBounce then
+        WorldWrap(Gear);
     if Gear^.Timer = 0 then
         begin
         DeleteGear(Gear);
@@ -5429,7 +5431,7 @@ begin
         for i:= 0 to graves.size - 1 do
             if graves.ar^[i]^.Health > 0 then
                 begin
-                resgear := AddGear(hwRound(graves.ar^[i]^.X), hwRound(graves.ar^[i]^.Y), gtHedgehog, gstWait, _0, _0, 0);
+                resgear := AddGear(hwRound(graves.ar^[i]^.X), hwRound(graves.ar^[i]^.Y), gtHedgehog, gstWait, _0, _0, 0,graves.ar^[i]^.Pos);
                 resgear^.Hedgehog := graves.ar^[i]^.Hedgehog;
                 resgear^.Health := graves.ar^[i]^.Health;
                 PHedgehog(graves.ar^[i]^.Hedgehog)^.Gear := resgear;
@@ -5791,9 +5793,16 @@ For now we assume a "ray" like a deagle projected out from the gun.
 All these effects assume the ray's angle is not changed and that the target type was unchanged over a number of ticks.  This is a simplifying assumption for "gun was applying freezing effect to the same target".
   * When fired at water a layer of ice textured land is added above the water.
   * When fired at non-ice land (land and lfLandMask and not lfIce) the land is overlaid with a thin layer of ice textured land around that point (say, 1 or 2px into land, 1px above). For attractiveness, a slope would probably be needed.
-  * When fired at a hog (land and $00FF <> 0), while the hog is targetted, the hog's state is set to frozen.  As long as the gun is on the hog, a frozen hog sprite creeps up from the feet to the head.  If the effect is interrupted before reaching the top, the freezing state is cleared.
-A frozen hog will animate differently.  To be decided, but possibly in a similar fashion to a grave when it comes to explosions.  The hog might (possibly) not be damaged by explosions.  This might make freezing potentially useful for friendlies in a bad position.  It might be better to allow damage though.
-A frozen hog stays frozen for a certain number of turns. Each turn the frozen overlay becomes fainter, until it fades and the hog animates normally again.
+  * When fired at a hog (land and $00FF <> 0), while the hog is targetted, the hog's state is set to frozen.
+    As long as the gun is on the hog, a frozen hog sprite creeps up from the feet to the head.
+    If the effect is interrupted before reaching the top, the freezing state is cleared.
+A frozen hog will animate differently.
+    To be decided, but possibly in a similar fashion to a grave when it comes to explosions.
+    The hog might (possibly) not be damaged by explosions.
+    This might make freezing potentially useful for friendlies in a bad position.
+    It might be better to allow damage though.
+A frozen hog stays frozen for a certain number of turns.
+    Each turn the frozen overlay becomes fainter, until it fades and the hog animates normally again.
 *)
 
 
diff --git a/hedgewars/uGearsHandlersRope.pas b/hedgewars/uGearsHandlersRope.pas
index c12681a..4482281 100644
--- a/hedgewars/uGearsHandlersRope.pas
+++ b/hedgewars/uGearsHandlersRope.pas
@@ -42,7 +42,8 @@ begin
         OutError('ERROR: doStepRopeAfterAttack called while HHGear = nil', IsNilHHFatal);
         DeleteGear(Gear);
         exit()
-        end;
+        end
+    else if not CurrentTeam^.ExtDriven and (FollowGear <> nil) then FollowGear := HHGear;
 
     tX:= HHGear^.X;
     if WorldWrap(HHGear) and (WorldEdge = weWrap) and
@@ -137,7 +138,8 @@ begin
         OutError('ERROR: doStepRopeWork called while HHGear = nil', IsNilHHFatal);
         DeleteGear(Gear);
         exit()
-        end;
+        end
+    else if not CurrentTeam^.ExtDriven and (FollowGear <> nil) then FollowGear := HHGear;
 
     if ((HHGear^.State and gstHHDriven) = 0) or
         (CheckGearDrowning(HHGear)) or (Gear^.PortalCounter <> 0) then
@@ -425,6 +427,7 @@ var
     HHGear: PGear;
     tx, ty, tt: hwFloat;
 begin
+    
     Gear^.X := Gear^.X - Gear^.dX;
     Gear^.Y := Gear^.Y - Gear^.dY;
     Gear^.Elasticity := Gear^.Elasticity + _1;
@@ -435,7 +438,8 @@ begin
         OutError('ERROR: doStepRopeAttach called while HHGear = nil', IsNilHHFatal);
         DeleteGear(Gear);
         exit()
-        end;
+        end
+    else if not CurrentTeam^.ExtDriven and (FollowGear <> nil) then FollowGear := HHGear;
 
     DeleteCI(HHGear);
 
diff --git a/hedgewars/uGearsHedgehog.pas b/hedgewars/uGearsHedgehog.pas
index 497a951..a7af46a 100644
--- a/hedgewars/uGearsHedgehog.pas
+++ b/hedgewars/uGearsHedgehog.pas
@@ -451,7 +451,7 @@ with Gear^,
             if CurAmmoType = amAirMine then newGear^.Hedgehog:= nil;
 
             if ((CurAmmoType = amMine) or (CurAmmoType = amSMine) or (CurAmmoType = amAirMine)) and (GameFlags and gfInfAttack <> 0) then
-                newGear^.FlightTime:= GameTicks + 1000
+                newGear^.FlightTime:= GameTicks + min(TurnTimeLeft,1000)
             else if CurAmmoType = amDrill then
                 newGear^.FlightTime:= GameTicks + 250;
             if Ammoz[CurAmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0 then
@@ -572,6 +572,7 @@ end;
 procedure doStepHedgehogDead(Gear: PGear);
 const frametime = 200;
       timertime = frametime * 6;
+var grave:  PGear;
 begin
 if Gear^.Hedgehog^.Unplaced then
     exit;
@@ -587,7 +588,10 @@ else if Gear^.Timer = 1 then
     Gear^.Hedgehog^.Effects[heFrozen]:= 0;
     Gear^.State:= Gear^.State or gstNoDamage;
     doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, CurrentHedgehog, EXPLAutoSound);
-    AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtGrave, 0, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
+    grave:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtGrave, 0, _0, _0, 0);
+    grave^.Hedgehog:= Gear^.Hedgehog;
+    grave^.Pos:= Gear^.uid;
+    
     DeleteGear(Gear);
     SetAllToActive
     end
@@ -906,6 +910,7 @@ if isFalling then
         end;
     Gear^.State:= Gear^.State or gstMoving;
     if (Gear^.State and gstHHDriven <> 0) and
+       (FollowGear <> nil) and
        (not CurrentTeam^.ExtDriven) and (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > _0_003) then
         begin
         // TODO: why so aggressive at setting FollowGear when falling?
diff --git a/hedgewars/uGearsList.pas b/hedgewars/uGearsList.pas
index 561bbd5..e3e4a8a 100644
--- a/hedgewars/uGearsList.pas
+++ b/hedgewars/uGearsList.pas
@@ -23,6 +23,7 @@ interface
 uses uFloat, uTypes, SDLh;
 
 function  AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear;
+function  AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer, newUid: LongWord): PGear;
 procedure DeleteGear(Gear: PGear);
 procedure InsertGearToList(Gear: PGear);
 procedure RemoveGearFromList(Gear: PGear);
@@ -164,11 +165,16 @@ end;
 
 
 function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear;
+begin
+AddGear:= AddGear(X, Y, Kind, State, dX, dY, Timer, 0);
+end;
+function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer, newUid: LongWord): PGear;
 var gear: PGear;
     //c: byte;
     cakeData: PCakeData;
 begin
-inc(GCounter);
+if newUid = 0 then
+    inc(GCounter);
 
 AddFileLog('AddGear: #' + inttostr(GCounter) + ' (' + inttostr(x) + ',' + inttostr(y) + '), d(' + floattostr(dX) + ',' + floattostr(dY) + ') type = ' + EnumToStr(Kind));
 
@@ -186,7 +192,9 @@ gear^.dY:= dY;
 gear^.doStep:= doStepHandlers[Kind];
 gear^.CollisionIndex:= -1;
 gear^.Timer:= Timer;
-gear^.uid:= GCounter;
+if newUid = 0 then
+     gear^.uid:= GCounter
+else gear^.uid:= newUid;
 gear^.SoundChannel:= -1;
 gear^.ImpactSound:= sndNone;
 gear^.Density:= _1;
diff --git a/hedgewars/uGearsUtils.pas b/hedgewars/uGearsUtils.pas
index 432cc45..5bd01c3 100644
--- a/hedgewars/uGearsUtils.pas
+++ b/hedgewars/uGearsUtils.pas
@@ -829,7 +829,7 @@ end;
 
 procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt; skipProximity: boolean);
 var x: LongInt;
-    y, sy: LongInt;
+    y, sy, dir: LongInt;
     ar: array[0..1023] of TPoint;
     ar2: array[0..2047] of TPoint;
     temp: TPoint;
@@ -850,9 +850,10 @@ while tryAgain do
     delta:= LAND_WIDTH div 16;
     cnt2:= 0;
     repeat
-        x:= Left + max(LAND_WIDTH div 2048, LongInt(GetRandom(Delta)));
+        if GetRandom(2) = 0 then dir:= -1 else dir:= 1;
+        x:= max(LAND_WIDTH div 2048, LongInt(GetRandom(Delta)));
+        if dir = 1 then x:= Left + x else x:= Right - x; 
         repeat
-            inc(x, Delta);
             cnt:= 0;
             y:= min(1024, topY) - Gear^.Radius shl 1;
             while y < cWaterLine do
@@ -901,9 +902,10 @@ while tryAgain do
                     ar2[cnt2].x:= x;
                     ar2[cnt2].y:= y;
                     inc(cnt2)
-                    end
-                end
-        until (x + Delta > Right);
+                    end;
+                end;
+            inc(x, Delta*dir)
+        until ((dir = 1) and (x > Right)) or ((dir = -1) and (x < Left));
 
         dec(Delta, 60)
     until (cnt2 > 0) or (Delta < 70);
diff --git a/hedgewars/uScript.pas b/hedgewars/uScript.pas
index 67929fe..1b06c92 100644
--- a/hedgewars/uScript.pas
+++ b/hedgewars/uScript.pas
@@ -628,7 +628,9 @@ begin
         begin
         gear := SpawnFakeCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2),
         HealthCrate, lua_toboolean(L, 3), lua_toboolean(L, 4));
-        lua_pushinteger(L, gear^.uid);
+        if gear <> nil then
+             lua_pushinteger(L, gear^.uid)
+        else lua_pushnil(L)
         end
     else
         lua_pushnil(L);
@@ -642,7 +644,9 @@ begin
         begin
         gear := SpawnFakeCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2),
         AmmoCrate, lua_toboolean(L, 3), lua_toboolean(L, 4));
-        lua_pushinteger(L, gear^.uid);
+        if gear <> nil then
+             lua_pushinteger(L, gear^.uid)
+        else lua_pushnil(L)
         end
     else
         lua_pushnil(L);
@@ -656,7 +660,9 @@ begin
         begin
         gear := SpawnFakeCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2),
         UtilityCrate, lua_toboolean(L, 3), lua_toboolean(L, 4));
-        lua_pushinteger(L, gear^.uid);
+        if gear <> nil then
+             lua_pushinteger(L, gear^.uid)
+        else lua_pushnil(L)
         end
     else
         lua_pushnil(L);
@@ -675,9 +681,8 @@ begin
             health:= cHealthCaseAmount;
         gear := SpawnCustomCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2), HealthCrate, health, 0);
         if gear <> nil then
-            lua_pushinteger(L, gear^.uid)
-        else
-            lua_pushnil(L);
+             lua_pushinteger(L, gear^.uid)
+        else lua_pushnil(L);
         end
     else
         lua_pushnil(L);
@@ -694,9 +699,8 @@ begin
              gear := SpawnCustomCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2), AmmoCrate, lua_tointeger(L, 3), 0)
         else gear := SpawnCustomCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2), AmmoCrate, lua_tointeger(L, 3), lua_tointeger(L, 4));
         if gear <> nil then
-            lua_pushinteger(L, gear^.uid)
-        else
-            lua_pushnil(L);
+             lua_pushinteger(L, gear^.uid)
+        else lua_pushnil(L);
         end
     else
         lua_pushnil(L);
@@ -713,9 +717,8 @@ begin
              gear := SpawnCustomCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2), UtilityCrate, lua_tointeger(L, 3), 0)
         else gear := SpawnCustomCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2), UtilityCrate, lua_tointeger(L, 3), lua_tointeger(L, 4));
         if gear <> nil then
-            lua_pushinteger(L, gear^.uid)
-        else
-            lua_pushnil(L);
+             lua_pushinteger(L, gear^.uid)
+        else lua_pushnil(L);
        end
     else
         lua_pushnil(L);
@@ -2888,6 +2891,12 @@ end;
 
 procedure GetGlobals;
 begin
+// TODO
+// Use setters instead, because globals should be read-only!
+// Otherwise globals might be changed by Lua, but then unexpectatly overwritten by engine when a ScriptCall is triggered by whatever Lua is doing!
+// Sure, one could work around that in engine (e.g. by setting writable globals in SetGlobals only when their engine-side value has actually changed since SetGlobals was called the last time...), but things just get messier and messier then.
+// It is inconsistent anyway to have some globals be read-only and others not with no indication whatsoever.
+// -- sheepluva
 TurnTimeLeft:= ScriptGetInteger('TurnTimeLeft');
 end;
 
diff --git a/hedgewars/uTeams.pas b/hedgewars/uTeams.pas
index 7d3acc5..b599d06 100644
--- a/hedgewars/uTeams.pas
+++ b/hedgewars/uTeams.pas
@@ -604,7 +604,6 @@ if isDeveloperMode then
     SplitBySpace(s, cs);
     SplitBySpace(cs, ts);
     Color:= StrToInt(cs);
-    TryDo(Color <> 0, 'Error: black team color', true);
 
     // color is always little endian so the mask must be constant also in big endian archs
     Color:= Color or $FF000000;
diff --git a/project_files/Android-build/SDL-android-project/assets/Data/Sounds/Droplet1.ogg b/project_files/Android-build/SDL-android-project/assets/Data/Sounds/Droplet1.ogg
deleted file mode 100644
index 096077f..0000000
Binary files a/project_files/Android-build/SDL-android-project/assets/Data/Sounds/Droplet1.ogg and /dev/null differ
diff --git a/project_files/Android-build/SDL-android-project/assets/Data/Sounds/Droplet2.ogg b/project_files/Android-build/SDL-android-project/assets/Data/Sounds/Droplet2.ogg
deleted file mode 100644
index 6f3a69a..0000000
Binary files a/project_files/Android-build/SDL-android-project/assets/Data/Sounds/Droplet2.ogg and /dev/null differ
diff --git a/project_files/Android-build/SDL-android-project/assets/Data/Sounds/Droplet3.ogg b/project_files/Android-build/SDL-android-project/assets/Data/Sounds/Droplet3.ogg
deleted file mode 100644
index 9475de4..0000000
Binary files a/project_files/Android-build/SDL-android-project/assets/Data/Sounds/Droplet3.ogg and /dev/null differ
diff --git a/share/hedgewars/Data/Locale/tips_en.xml b/share/hedgewars/Data/Locale/tips_en.xml
index 23e6b63..1fcbf3b 100644
--- a/share/hedgewars/Data/Locale/tips_en.xml
+++ b/share/hedgewars/Data/Locale/tips_en.xml
@@ -11,7 +11,7 @@
     <tip>You're bored of default gameplay? Try one of the missions — they'll offer different gameplay depending on the one you picked.</tip>
     <tip>By default the game will always record the last game played as a demo. Select “Local Game” and pick the “Demos” button on the lower right corner to play or manage them.</tip>
     <tip>Hedgewars is free software (Open Source) we create in our spare time. If you’ve got problems, ask on our forums or visit our IRC room!</tip>
-    <tip>Hedgewars is free software (Open Source) we create in our spare time. If you like it, help us with a small donation or contribute your own work!</tip>
+    <tip>Hedgewars is free software (Open Source) we create in our spare time. If you like it, feel free to help us with a small donation or contribute your own work!</tip>
     <tip>Hedgewars is free software (Open Source) we create in our spare time. Share it with your family and friends as you like!</tip>
     <tip>Hedgewars is free software (Open Source) we create in our spare time, just for fun! Meet the devs in <a href="irc://irc.freenode.net/hedgewars">#hedgewars</a>!</tip>
     <tip>From time to time there will be official tournaments. Upcoming events will be announced at <a href="http://www.hedgewars.org/">http://www.hedgewars.org/</a> some days in advance.</tip>
@@ -19,14 +19,13 @@
     <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>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>Consider giving yourself a short break at least once an hour to guard against strain from playing.</tip>
     <tip>If your graphics card isn’t able to provide hardware accelerated OpenGL, try to enable the low quality mode to improve performance.</tip>
     <tip>If your graphics card isn’t able to provide hardware accelerated OpenGL, try to update the associated drivers.</tip>
     <tip>We’re open to suggestions and constructive feedback. If you don’t like something or got a great idea, let us know!</tip>
-    <tip>Especially while playing online be polite and always remember there might be some minors playing with or against you as well!</tip>
+    <tip>For your own benefit we'd like you to be polite and friendly while playing on our server. Also please keep in mind that some players are minors!</tip>
     <tip>Special game modes such as “Vampirism” or “Karma” allow you to develop completely new tactics. Try them in a custom game!</tip>
-    <tip>You should never install Hedgewars on computers you don’t own (school, university, work, etc.). Please ask the responsible person instead!</tip>
+    <tip>Please don't install Hedgewars on computers you don’t own (school, university, work, etc.) unless you got permission. We don't want you to get into any trouble.</tip>
     <tip>Hedgewars can be perfect for short games during breaks. Just ensure you don’t add too many hedgehogs or use an huge map. Reducing time and health might help as well.</tip>
     <tip>No hedgehogs were harmed in making this game.</tip>
     <tip>There are three different jumps available. Tap [high jump] twice to do a very high/backwards jump.</tip>
diff --git a/share/hedgewars/Data/Maps/Basketball/map.lua b/share/hedgewars/Data/Maps/Basketball/map.lua
index 862c2c1..567f09e 100644
--- a/share/hedgewars/Data/Maps/Basketball/map.lua
+++ b/share/hedgewars/Data/Maps/Basketball/map.lua
@@ -54,3 +54,7 @@ function onGearDelete(gear)
 		end
 	end
 end
+
+function onNewTurn()
+    SetWeapon(amBaseballBat)
+end
diff --git a/share/hedgewars/Data/Maps/Knockball/map.lua b/share/hedgewars/Data/Maps/Knockball/map.lua
index 5ef852f..4f671e4 100644
--- a/share/hedgewars/Data/Maps/Knockball/map.lua
+++ b/share/hedgewars/Data/Maps/Knockball/map.lua
@@ -68,3 +68,7 @@ function onGearDelete(gear)
 		end
 	end
 end
+
+function onNewTurn()
+    SetWeapon(amBaseballBat)
+end
diff --git a/share/hedgewars/Data/Maps/TrophyRace/map.lua b/share/hedgewars/Data/Maps/TrophyRace/map.lua
index 564b531..a162b42 100644
--- a/share/hedgewars/Data/Maps/TrophyRace/map.lua
+++ b/share/hedgewars/Data/Maps/TrophyRace/map.lua
@@ -33,6 +33,7 @@ local reached = false
 local worsthog = nil
 
 local besthog = nil
+local besthogname = ''
 
 -- best time
 local besttime = maxtime + 1
@@ -78,7 +79,8 @@ function killHog()
         SetHealth(CurrentHedgehog, 0)
         SetEffect(CurrentHedgehog, heInvulnerable, 0)
         x, y = GetGearPosition(CurrentHedgehog)
-        AddGear(x, y, gtShell, 0, 0, 0, 0)
+        AddGear(x, y-2, gtGrenade, 0, 0, 0, 2)
+        SetGearVelocity(CurrentHedgehog, 0, 0)
         worsttime = 99999
         worsthog = nil
         lasthog = nil
@@ -141,6 +143,7 @@ function onGameTick()
             if ttime < besttime then
                 besttime = ttime
                 besthog = CurrentHedgehog
+                besthogname = GetHogName(besthog)
                 hscore = hscore .. loc("NEW fastest lap: ")
             else
                 hscore = hscore .. loc("Fastest lap: ")
@@ -149,7 +152,7 @@ function onGameTick()
                 worsttime = ttime
                 worsthog = CurrentHedgehog
             end
-            hscore = hscore .. GetHogName(besthog) .. " - " .. (besttime / 1000) .. " s | |" .. loc("Best laps per team: ")
+            hscore = hscore .. besthogname .. " - " .. (besttime / 1000) .. " s | |" .. loc("Best laps per team: ")
             
             if clan == ClansCount -1 then
                 -- Time for elimination - worst hog is out and the worst hog vars are reset.
diff --git a/share/hedgewars/Data/Sounds/Droplet1.ogg b/share/hedgewars/Data/Sounds/Droplet1.ogg
deleted file mode 100644
index 096077f..0000000
Binary files a/share/hedgewars/Data/Sounds/Droplet1.ogg and /dev/null differ
diff --git a/share/hedgewars/Data/Sounds/Droplet2.ogg b/share/hedgewars/Data/Sounds/Droplet2.ogg
deleted file mode 100644
index 6f3a69a..0000000
Binary files a/share/hedgewars/Data/Sounds/Droplet2.ogg and /dev/null differ
diff --git a/share/hedgewars/Data/Sounds/Droplet3.ogg b/share/hedgewars/Data/Sounds/Droplet3.ogg
deleted file mode 100644
index 9475de4..0000000
Binary files a/share/hedgewars/Data/Sounds/Droplet3.ogg and /dev/null differ
diff --git a/share/version_info.txt b/share/version_info.txt
index ac65c95..5318ae1 100644
--- a/share/version_info.txt
+++ b/share/version_info.txt
@@ -1,3 +1,3 @@
 Hedgewars versioning information, do not modify
-rev GIT
-hash 0d3adc4
+rev 11265
+hash 4c4f22cc3fa4

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/collab-maint/hedgewars.git



More information about the Pkg-games-commits mailing list