Hello community,

here is the log from the commit of package solarus for openSUSE:Factory checked 
in at 2017-08-24 18:52:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/solarus (Old)
 and      /work/SRC/openSUSE:Factory/.solarus.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "solarus"

Thu Aug 24 18:52:33 2017 rev:3 rq:516818 version:1.5.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/solarus/solarus.changes  2017-02-21 
13:50:24.307891327 +0100
+++ /work/SRC/openSUSE:Factory/.solarus.new/solarus.changes     2017-08-24 
18:52:35.595778581 +0200
@@ -1,0 +2,15 @@
+Mon Aug 14 10:39:41 UTC 2017 - aloi...@gmx.com
+
+- Update to 1.5.3
+  * Speed up loading maps by keeping tilesets in a cache (#1019).
+  * Fix text_surface:set_horizontal/vertical_alignment() not
+    working.
+  * Fix parallax dynamic tiles still displayed when disabled or
+    invisible.
+  * Improve error message of non-square tile patterns with diagonal
+    obstacles.
+
+- Dropped luajit-5_1-2.1.patch and icons-desktop-man.patch
+  (merged upstream)
+
+-------------------------------------------------------------------

Old:
----
  icons-desktop-man.patch
  luajit-5_1-2.1.patch
  solarus-1.5.1-src.tar.gz

New:
----
  solarus-1.5.3-src.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ solarus.spec ++++++
--- /var/tmp/diff_new_pack.hRb86N/_old  2017-08-24 18:52:36.655629349 +0200
+++ /var/tmp/diff_new_pack.hRb86N/_new  2017-08-24 18:52:36.675626533 +0200
@@ -17,17 +17,13 @@
 
 
 Name:           solarus
-Version:        1.5.1
+Version:        1.5.3
 Release:        0
 Summary:        Zelda-like game engine
 License:        GPL-3.0+
 Group:          Amusements/Games/RPG
 Url:            http://www.solarus-engine.org/
 Source:         
http://www.solarus-games.org/downloads/solarus/%{name}-%{version}-src.tar.gz
-# PATCH-FIX-UPSTREAM https://github.com/solarus-games/solarus/pull/1020
-Patch1:         luajit-5_1-2.1.patch
-# PATCH-FIX-UPSTREAM https://github.com/solarus-games/solarus/pull/1021
-Patch2:         icons-desktop-man.patch
 # PATCH-FEATURE-UPSTREAM https://github.com/solarus-games/solarus/pull/1031
 Patch3:         appdata.patch
 BuildRequires:  cmake
@@ -67,8 +63,6 @@
 
 %prep
 %setup -q
-%patch1 -p1
-%patch2 -p1
 %patch3 -p1
 
 %build
@@ -97,7 +91,7 @@
 %{_bindir}/solarus-run
 %{_datadir}/icons/hicolor/*/apps/%{name}.png
 %{_datadir}/applications/%{name}.desktop
-%{_mandir}/man6/solarus.*
+%{_mandir}/man6/solarus*
 %dir %{_datadir}/appdata/
 %{_datadir}/appdata/%{name}.appdata.xml
 

++++++ solarus-1.5.1-src.tar.gz -> solarus-1.5.3-src.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/changelog.txt 
new/solarus-1.5.3/changelog.txt
--- old/solarus-1.5.1/changelog.txt     2016-11-29 21:39:30.000000000 +0100
+++ new/solarus-1.5.3/changelog.txt     2017-04-03 11:49:35.000000000 +0200
@@ -1,5 +1,15 @@
 __________________________
 
+Solarus 1.5.3 (2016-04-01)
+__________________________
+
+* Speed up loading maps by keeping tilesets in a cache (#1019).
+* Fix text_surface:set_horizontal/vertical_alignment() not working.
+* Fix parallax dynamic tiles still displayed when disabled or invisible.
+* Improve error message of non-square tile patterns with diagonal obstacles.
+
+__________________________
+
 Solarus 1.5.1 (2016-11-29)
 __________________________
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/cmake/AddSolarusLibrary.cmake 
new/solarus-1.5.3/cmake/AddSolarusLibrary.cmake
--- old/solarus-1.5.1/cmake/AddSolarusLibrary.cmake     2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/cmake/AddSolarusLibrary.cmake     2017-04-03 
11:49:35.000000000 +0200
@@ -201,6 +201,7 @@
   include/solarus/MapData.h
   include/solarus/QuestProperties.h
   include/solarus/QuestResources.h
+  include/solarus/ResourceProvider.h
   include/solarus/ResourceType.h
   include/solarus/SavegameConverterV1.h
   include/solarus/Savegame.h
@@ -393,6 +394,7 @@
   src/MapData.cpp
   src/QuestProperties.cpp
   src/QuestResources.cpp
+  src/ResourceProvider.cpp
   src/SavegameConverterV1.cpp
   src/Savegame.cpp
   src/Settings.cpp
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/cmake/AddSolarusVersion.cmake 
new/solarus-1.5.3/cmake/AddSolarusVersion.cmake
--- old/solarus-1.5.1/cmake/AddSolarusVersion.cmake     2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/cmake/AddSolarusVersion.cmake     2017-04-03 
11:49:35.000000000 +0200
@@ -1,5 +1,5 @@
 set(SOLARUS_MAJOR_VERSION 1)
 set(SOLARUS_MINOR_VERSION 5)
-set(SOLARUS_PATCH_VERSION 1)
+set(SOLARUS_PATCH_VERSION 3)
 set(SOLARUS_VERSION_STRING 
${SOLARUS_MAJOR_VERSION}.${SOLARUS_MINOR_VERSION}.${SOLARUS_PATCH_VERSION})
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/cmake/modules/FindLuaJit.cmake 
new/solarus-1.5.3/cmake/modules/FindLuaJit.cmake
--- old/solarus-1.5.1/cmake/modules/FindLuaJit.cmake    2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/cmake/modules/FindLuaJit.cmake    2017-04-03 
11:49:35.000000000 +0200
@@ -10,7 +10,7 @@
 FIND_PATH(LUA_INCLUDE_DIR luajit.h
   HINTS
   $ENV{LUA_DIR}
-  PATH_SUFFIXES include/luajit-2.0 include/luajit-5_1-2.0 include
+  PATH_SUFFIXES include/luajit-2.0 include/luajit-5_1-2.0 
include/luajit-5_1-2.1 include
   PATHS
   ~/Library/Frameworks
   /Library/Frameworks
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/gui/CMakeLists.txt 
new/solarus-1.5.3/gui/CMakeLists.txt
--- old/solarus-1.5.1/gui/CMakeLists.txt        2016-11-29 21:39:30.000000000 
+0100
+++ new/solarus-1.5.3/gui/CMakeLists.txt        2017-04-03 11:49:35.000000000 
+0200
@@ -62,6 +62,7 @@
 
 # Translations.
 set(solarus_gui_lib_TRANSLATIONS
+  translations/solarus_es.ts
   translations/solarus_fr.ts
 )
 qt5_add_translation(solarus_gui_lib_TRANSLATIONS_QM
@@ -158,3 +159,36 @@
   endif()
 endif()
 
+# FreeDesktop compatible icons
+if(UNIX AND NOT APPLE)
+  install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/icons/solarus_icon_16.png
+    DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/16x16/apps RENAME 
solarus.png)
+  install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/icons/solarus_icon_24.png
+    DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/24x24/apps RENAME 
solarus.png)
+  install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/icons/solarus_icon_32.png
+    DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/32x32/apps RENAME 
solarus.png)
+  install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/icons/solarus_icon_48.png
+    DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/48x48/apps RENAME 
solarus.png)
+  install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/icons/solarus_icon_64.png
+    DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/64x64/apps RENAME 
solarus.png)
+  install (FILES 
${CMAKE_CURRENT_SOURCE_DIR}/../cmake/icons/solarus_icon_128.png
+    DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/128x128/apps 
RENAME solarus.png)
+  install (FILES 
${CMAKE_CURRENT_SOURCE_DIR}/../cmake/icons/solarus_icon_256.png
+    DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/256x256/apps 
RENAME solarus.png)
+  install (FILES 
${CMAKE_CURRENT_SOURCE_DIR}/../cmake/icons/solarus_icon_512.png
+    DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/512x512/apps 
RENAME solarus.png)
+endif(UNIX AND NOT APPLE)
+
+# FreeDesktop compatible start menu launcher
+if(UNIX AND NOT APPLE)
+  install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/../gui/resources/solarus.desktop
+    DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications)
+endif(UNIX AND NOT APPLE)
+
+# Linux Manpage
+if(UNIX AND NOT APPLE)
+  install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/../solarus.6
+    DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man6)
+  install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/../solarus-run.6
+    DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man6)
+endif(UNIX AND NOT APPLE)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/gui/resources/solarus.desktop 
new/solarus-1.5.3/gui/resources/solarus.desktop
--- old/solarus-1.5.1/gui/resources/solarus.desktop     2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/gui/resources/solarus.desktop     2017-04-03 
11:49:35.000000000 +0200
@@ -1,7 +1,11 @@
 [Desktop Entry]
+Version=1.0
 Type=Application
 Name=Solarus Quest Launcher
+GenericName=Topdown 2D adventure game
 Comment=A graphical user interface to organize and play quests for the Solarus 
engine
-Exec=/usr/games/solarus
-Icon=solarus_launcher_icon.png
-Categories=Game;
+Exec=solarus
+Icon=solarus
+Terminal=false
+StartupNotify=true
+Categories=Game;AdventureGame;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/include/solarus/Game.h 
new/solarus-1.5.3/include/solarus/Game.h
--- old/solarus-1.5.1/include/solarus/Game.h    2016-11-29 21:39:30.000000000 
+0100
+++ new/solarus-1.5.3/include/solarus/Game.h    2017-04-03 11:49:35.000000000 
+0200
@@ -39,6 +39,7 @@
 class LuaContext;
 class MainLoop;
 class Map;
+class ResourceProvider;
 class Savegame;
 
 /**
@@ -64,6 +65,7 @@
     // global objects
     MainLoop& get_main_loop();
     LuaContext& get_lua_context();
+    ResourceProvider& get_resource_provider();
     const HeroPtr& get_hero();
     GameCommands& get_commands();
     const GameCommands& get_commands() const;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/include/solarus/MainLoop.h 
new/solarus-1.5.3/include/solarus/MainLoop.h
--- old/solarus-1.5.1/include/solarus/MainLoop.h        2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/include/solarus/MainLoop.h        2017-04-03 
11:49:35.000000000 +0200
@@ -19,6 +19,7 @@
 
 #include "solarus/Common.h"
 #include "solarus/lowlevel/SurfacePtr.h"
+#include "solarus/ResourceProvider.h"
 #include <atomic>
 #include <memory>
 #include <mutex>
@@ -53,6 +54,7 @@
     bool is_resetting();
     Game* get_game();
     void set_game(Game* game);
+    ResourceProvider& get_resource_provider();
     int push_lua_command(const std::string& command);
 
     LuaContext& get_lua_context();
@@ -70,6 +72,8 @@
 
     std::unique_ptr<LuaContext>
         lua_context;              /**< The Lua world where scripts are run. */
+    ResourceProvider
+        resource_provider;        /**< Resource cache of the quest. */
     SurfacePtr root_surface;      /**< The surface where everything is drawn. 
*/
     std::unique_ptr<Game> game;   /**< The current game if any, nullptr 
otherwise. */
     Game* next_game;              /**< The game to start at next cycle 
(nullptr means resetting the game). */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/include/solarus/Map.h 
new/solarus-1.5.3/include/solarus/Map.h
--- old/solarus-1.5.1/include/solarus/Map.h     2016-11-29 21:39:30.000000000 
+0100
+++ new/solarus-1.5.3/include/solarus/Map.h     2017-04-03 11:49:35.000000000 
+0200
@@ -58,7 +58,7 @@
 
     // map properties
     const std::string& get_id() const;
-    Tileset& get_tileset();
+    const Tileset& get_tileset() const;
     const std::string& get_tileset_id() const;
     void set_tileset(const std::string& tileset_id);
     const std::string& get_music_id() const;
@@ -196,8 +196,7 @@
     int max_layer;                /**< Highest layer of the map (0 or more). */
 
     std::string tileset_id;       /**< Id of the current tileset. */
-    std::unique_ptr<Tileset>
-        tileset;                  /**< Tileset of the map: every tile of this 
map
+    const Tileset* tileset;       /**< Tileset of the map: every tile of this 
map
                                    * is extracted from this tileset. */
 
     std::string music_id;         /**< Id of the current music of the map:
@@ -212,7 +211,7 @@
                                    * indicate the map size in pixel, and the x 
and y field indicate the position.
                                    * This is used to correctly scroll between 
adjacent maps. */
 
-    // Quest Zscreen
+    // Quest screen
     SurfacePtr
         background_surface;       /**< A surface filled with the background 
color of the tileset. */
     SurfacePtr
@@ -257,7 +256,7 @@
  * \brief Returns the tileset associated to this map.
  * \return The tileset.
  */
-inline Tileset& Map::get_tileset() {
+inline const Tileset& Map::get_tileset() const {
 
   SOLARUS_ASSERT(tileset != nullptr,
       std::string("Missing tileset in map '") + get_id() + "'"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/include/solarus/ResourceProvider.h 
new/solarus-1.5.3/include/solarus/ResourceProvider.h
--- old/solarus-1.5.1/include/solarus/ResourceProvider.h        1970-01-01 
01:00:00.000000000 +0100
+++ new/solarus-1.5.3/include/solarus/ResourceProvider.h        2017-04-03 
11:49:35.000000000 +0200
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2006-2016 Christopho, Solarus - http://www.solarus-games.org
+ *
+ * Solarus is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Solarus is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef SOLARUS_RESOURCE_PROVIDER_H
+#define SOLARUS_RESOURCE_PROVIDER_H
+
+#include "solarus/Common.h"
+#include "solarus/entities/Tileset.h"
+#include "solarus/entities/TilePattern.h"
+#include "solarus/ResourceType.h"
+#include <map>
+#include <memory>
+#include <string>
+
+namespace Solarus {
+
+/**
+ * \brief Provides fast access to quest resources.
+ *
+ * Maintains a cache of already loaded quest resources
+ * so that next accesses are faster.
+ */
+class SOLARUS_API ResourceProvider {
+
+  public:
+
+    ResourceProvider();
+
+    const Tileset& get_tileset(const std::string& tileset_id);
+    // TODO other types of resources
+
+    void invalidate_resource_element(ResourceType resource_type, const 
std::string& element_id);
+
+  private:
+
+    std::map<std::string, std::unique_ptr<Tileset>> tileset_cache;          
/**< Cache of loaded tilesets. */
+};
+
+}
+
+#endif
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/include/solarus/Sprite.h 
new/solarus-1.5.3/include/solarus/Sprite.h
--- old/solarus-1.5.1/include/solarus/Sprite.h  2016-11-29 21:39:30.000000000 
+0100
+++ new/solarus-1.5.3/include/solarus/Sprite.h  2017-04-03 11:49:35.000000000 
+0200
@@ -56,7 +56,7 @@
     // creation and destruction
     explicit Sprite(const std::string& id);
 
-    void set_tileset(Tileset& tileset);
+    void set_tileset(const Tileset& tileset);
 
     // animation set
     const std::string& get_animation_set_id() const;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/include/solarus/SpriteAnimation.h 
new/solarus-1.5.3/include/solarus/SpriteAnimation.h
--- old/solarus-1.5.1/include/solarus/SpriteAnimation.h 2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/include/solarus/SpriteAnimation.h 2017-04-03 
11:49:35.000000000 +0200
@@ -45,7 +45,7 @@
         int loop_on_frame
     );
 
-    void set_tileset(Tileset& tileset);
+    void set_tileset(const Tileset& tileset);
 
     int get_next_frame(int current_direction, int current_frame) const;
     void draw(Surface& dst_surface, const Point& dst_position,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/include/solarus/SpriteAnimationSet.h 
new/solarus-1.5.3/include/solarus/SpriteAnimationSet.h
--- old/solarus-1.5.1/include/solarus/SpriteAnimationSet.h      2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/include/solarus/SpriteAnimationSet.h      2017-04-03 
11:49:35.000000000 +0200
@@ -45,7 +45,7 @@
 
     explicit SpriteAnimationSet(const std::string& id);
 
-    void set_tileset(Tileset& tileset);
+    void set_tileset(const Tileset& tileset);
 
     bool has_animation(const std::string& animation_name) const;
     const SpriteAnimation& get_animation(const std::string& animation_name) 
const;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/solarus-1.5.1/include/solarus/entities/AnimatedTilePattern.h 
new/solarus-1.5.3/include/solarus/entities/AnimatedTilePattern.h
--- old/solarus-1.5.1/include/solarus/entities/AnimatedTilePattern.h    
2016-11-29 21:39:30.000000000 +0100
+++ new/solarus-1.5.3/include/solarus/entities/AnimatedTilePattern.h    
2017-04-03 11:49:35.000000000 +0200
@@ -52,9 +52,9 @@
     virtual void draw(
         const SurfacePtr& dst_surface,
         const Point& dst_position,
-        Tileset& tileset,
+        const Tileset& tileset,
         const Point& viewport
-    ) override;
+    ) const override;
     virtual bool is_drawn_at_its_position() const override;
 
   private:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/include/solarus/entities/DynamicTile.h 
new/solarus-1.5.3/include/solarus/entities/DynamicTile.h
--- old/solarus-1.5.1/include/solarus/entities/DynamicTile.h    2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/include/solarus/entities/DynamicTile.h    2017-04-03 
11:49:35.000000000 +0200
@@ -46,7 +46,7 @@
         int layer,
         const Point& xy,
         const Size& size,
-        Tileset& tileset,
+        const Tileset& tileset,
         const std::string& tile_pattern_id,
         bool enabled
     );
@@ -61,7 +61,7 @@
   private:
 
     const std::string tile_pattern_id; /**< Id of the tile pattern. */
-    TilePattern& tile_pattern;         /**< Pattern of the tile. */
+    const TilePattern& tile_pattern;   /**< Pattern of the tile. */
 
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/solarus-1.5.1/include/solarus/entities/ParallaxScrollingTilePattern.h 
new/solarus-1.5.3/include/solarus/entities/ParallaxScrollingTilePattern.h
--- old/solarus-1.5.1/include/solarus/entities/ParallaxScrollingTilePattern.h   
2016-11-29 21:39:30.000000000 +0100
+++ new/solarus-1.5.3/include/solarus/entities/ParallaxScrollingTilePattern.h   
2017-04-03 11:49:35.000000000 +0200
@@ -45,9 +45,9 @@
     virtual void draw(
         const SurfacePtr& dst_surface,
         const Point& dst_position,
-        Tileset& tileset,
+        const Tileset& tileset,
         const Point& viewport
-    ) override;
+    ) const override;
 
     virtual bool is_animated() const override;
     virtual bool is_drawn_at_its_position() const override;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/solarus-1.5.1/include/solarus/entities/SelfScrollingTilePattern.h 
new/solarus-1.5.3/include/solarus/entities/SelfScrollingTilePattern.h
--- old/solarus-1.5.1/include/solarus/entities/SelfScrollingTilePattern.h       
2016-11-29 21:39:30.000000000 +0100
+++ new/solarus-1.5.3/include/solarus/entities/SelfScrollingTilePattern.h       
2017-04-03 11:49:35.000000000 +0200
@@ -43,9 +43,9 @@
     virtual void draw(
         const SurfacePtr& dst_surface,
         const Point& dst_position,
-        Tileset& tileset,
+        const Tileset& tileset,
         const Point& viewport
-    ) override;
+    ) const override;
 
     virtual bool is_animated() const override;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/solarus-1.5.1/include/solarus/entities/SimpleTilePattern.h 
new/solarus-1.5.3/include/solarus/entities/SimpleTilePattern.h
--- old/solarus-1.5.1/include/solarus/entities/SimpleTilePattern.h      
2016-11-29 21:39:30.000000000 +0100
+++ new/solarus-1.5.3/include/solarus/entities/SimpleTilePattern.h      
2017-04-03 11:49:35.000000000 +0200
@@ -38,9 +38,9 @@
     virtual void draw(
         const SurfacePtr& dst_surface,
         const Point& dst_position,
-        Tileset& tileset,
+        const Tileset& tileset,
         const Point& viewport
-    ) override;
+    ) const override;
 
     virtual bool is_animated() const override;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/include/solarus/entities/Tile.h 
new/solarus-1.5.3/include/solarus/entities/Tile.h
--- old/solarus-1.5.1/include/solarus/entities/Tile.h   2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/include/solarus/entities/Tile.h   2017-04-03 
11:49:35.000000000 +0200
@@ -54,14 +54,14 @@
     bool is_drawn_at_its_position() const override;
     void draw_on_map() override;
     void draw(const SurfacePtr& dst_surface, const Point& viewport);
-    TilePattern& get_tile_pattern();
+    const TilePattern& get_tile_pattern() const;
     const std::string& get_tile_pattern_id() const;
     bool is_animated() const;
 
   private:
 
     const std::string tile_pattern_id;       /**< Id of the tile pattern. */
-    TilePattern& tile_pattern;         /**< Pattern of the tile. */
+    const TilePattern& tile_pattern;         /**< Pattern of the tile. */
 
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/include/solarus/entities/TileInfo.h 
new/solarus-1.5.3/include/solarus/entities/TileInfo.h
--- old/solarus-1.5.1/include/solarus/entities/TileInfo.h       2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/include/solarus/entities/TileInfo.h       2017-04-03 
11:49:35.000000000 +0200
@@ -33,7 +33,7 @@
   int layer;
   Rectangle box;
   std::string pattern_id;
-  TilePattern* pattern = nullptr;
+  const TilePattern* pattern = nullptr;
 };
 
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/include/solarus/entities/TilePattern.h 
new/solarus-1.5.3/include/solarus/entities/TilePattern.h
--- old/solarus-1.5.1/include/solarus/entities/TilePattern.h    2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/include/solarus/entities/TilePattern.h    2017-04-03 
11:49:35.000000000 +0200
@@ -53,9 +53,9 @@
     void fill_surface(
         const SurfacePtr& dst_surface,
         const Rectangle& dst_position,
-        Tileset& tileset,
+        const Tileset& tileset,
         const Point& viewport
-    );
+    ) const;
 
     /**
      * \brief Draws the tile image on a surface.
@@ -68,9 +68,9 @@
     virtual void draw(
         const SurfacePtr& dst_surface,
         const Point& dst_position,
-        Tileset& tileset,
+        const Tileset& tileset,
         const Point& viewport
-    ) = 0;
+    ) const = 0;
     virtual bool is_animated() const;
     virtual bool is_drawn_at_its_position() const;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/include/solarus/entities/Tileset.h 
new/solarus-1.5.3/include/solarus/entities/Tileset.h
--- old/solarus-1.5.1/include/solarus/entities/Tileset.h        2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/include/solarus/entities/Tileset.h        2017-04-03 
11:49:35.000000000 +0200
@@ -45,12 +45,12 @@
     void load();
     void unload();
 
-    const std::string& get_id();
-    Color& get_background_color();
-    bool is_loaded();
-    const SurfacePtr& get_tiles_image();
-    const SurfacePtr& get_entities_image();
-    TilePattern& get_tile_pattern(const std::string& id);
+    const std::string& get_id() const;
+    const Color& get_background_color() const;
+    bool is_loaded() const;
+    const SurfacePtr& get_tiles_image() const;
+    const SurfacePtr& get_entities_image() const;
+    const TilePattern& get_tile_pattern(const std::string& id) const;
     void set_images(const std::string& other_id);
 
   private:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/solarus-1.5.1/include/solarus/entities/TimeScrollingTilePattern.h 
new/solarus-1.5.3/include/solarus/entities/TimeScrollingTilePattern.h
--- old/solarus-1.5.1/include/solarus/entities/TimeScrollingTilePattern.h       
2016-11-29 21:39:30.000000000 +0100
+++ new/solarus-1.5.3/include/solarus/entities/TimeScrollingTilePattern.h       
2017-04-03 11:49:35.000000000 +0200
@@ -41,9 +41,9 @@
     virtual void draw(
         const SurfacePtr& dst_surface,
         const Point& dst_position,
-        Tileset& tileset,
+        const Tileset& tileset,
         const Point& viewport
-    ) override;
+    ) const override;
 
     virtual bool is_animated() const override;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/solarus-run.6 
new/solarus-1.5.3/solarus-run.6
--- old/solarus-1.5.1/solarus-run.6     1970-01-01 01:00:00.000000000 +0100
+++ new/solarus-1.5.3/solarus-run.6     2017-04-03 11:49:35.000000000 +0200
@@ -0,0 +1,43 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.46.4.
+.TH SOLARUS-RUN "6" "August 2016" "solarus-run 1.5.0" "Games"
+.SH NAME
+solarus-run \- manual page for solarus-run 1.5.0
+.SH SYNOPSIS
+.B solarus-run
+[\fI\,options\/\fR] [\fI\,quest_path\/\fR]
+.SH DESCRIPTION
+The quest path is the name of a directory that contains either the data
+directory or the data archive (data.solarus or data.solarus.zip) of the game 
to run.
+If the quest path is not specified, the default directory will be: '.'.
+.SH OPTIONS
+.TP
+\fB\-help\fR
+shows this help message and exits
+.TP
+\fB\-no\-audio\fR
+disables sounds and musics
+.TP
+\fB\-no\-video\fR
+disables displaying
+.TP
+\fB\-video\-acceleration\fR=\fI\,yes\/\fR|no
+enables or disables accelerated graphics (default yes)
+.TP
+\fB\-quest\-size=\fR<width>x<height>
+sets the size of the drawing area (if compatible with the quest)
+.TP
+\fB\-lua\-console\fR=\fI\,yes\/\fR|no
+accepts standard input lines as Lua commands (default yes)
+.TP
+\fB\-turbo\fR=\fI\,yes\/\fR|no
+runs as fast as possible rather than simulating real time (default no)
+.TP
+\fB\-lag\fR=\fI\,X\/\fR
+slows down each frame of X milliseconds to simulate slower systems for 
debugging (default 0)
+.SH SEE ALSO
+solarus(6), solarus-quest-editor(6)
+.SH AUTHOR
+solarus was written by Christopho and the Solarus Team.
+.PP
+This manual page was written by Nathan Moore <nated...@gmail.com>,
+for the Solarus project (feel free to use it).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/solarus.6 new/solarus-1.5.3/solarus.6
--- old/solarus-1.5.1/solarus.6 2016-11-29 21:39:30.000000000 +0100
+++ new/solarus-1.5.3/solarus.6 2017-04-03 11:49:35.000000000 +0200
@@ -1,48 +1,37 @@
-.\"                                      Hey, EMACS: -*- nroff -*-
-.\" First parameter, NAME, should be all caps
-.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
-.\" other parameters are allowed: see man(7), man(1)
-.TH SOLARUS 6 "April 6, 2014"
-.\" Please adjust this date whenever revising the manpage.
-.\"
-.\" Some roff macros, for reference:
-.\" .nh        disable hyphenation
-.\" .hy        enable hyphenation
-.\" .ad l      left justify
-.\" .ad b      justify to both left and right margins
-.\" .nf        disable filling
-.\" .fi        enable filling
-.\" .br        insert line break
-.\" .sp <n>    insert n+1 empty lines
-.\" for manpage-specific macros, see man(7)
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.46.4.
+.TH SOLARUS "6" "August 2016" "solarus 1.5.0" "Games"
 .SH NAME
-solarus \- ARPG engine
+solarus \- manual page for solarus 1.5.0
 .SH SYNOPSIS
 .B solarus
-.RI [OPTIONS]
 .br
-.SH DESCRIPTION
-This manual page documents briefly the
 .B solarus
-engine.
-.PP
-.\" TeX users may be more comfortable with the \fB<whatever>\fP and
-.\" \fI<whatever>\fP escape sequences to invode bold face and italics,
-.\" respectively.
-\fBsolarus\fP is a C++ engine that runs quests written in lua.
-.SH OPTIONS
-A summary of options is included below.
+.RI -help
+.br
+.B solarus
+-run [\fI\,/path/to/quest\/\fR]
+.br
+.B solarus
+-add \fI\,/path/to/quest\/\fR
+.br
+.SH DESCRIPTION
+.SS "Usage:"
+.TP
+solarus
+Opens the Solarus launcher GUI
+.TP
+solarus \fB\-help\fR
+Prints this help message and exits
 .TP
-.B \-help
-Show summary of options.
+solarus \fB\-run\fR [/path/to/quest]
+Plays a quest (default: .)
 .TP
-.B /path/to/quest
-Insert path to quest directory.
-This directory must contain a data.solarus (or data.solarus.zip)
-.B OR
-A directory containing a data subdirectory with the quest data inside.
+solarus \fB\-add\fR \fI\,/path/to/quest\/\fP
+Adds a quest to the launcher's list and exits
+.SH SEE ALSO
+solarus-run(6), solarus-quest-editor(6)
 .SH AUTHOR
-solarus was written by Christopho.
+solarus was written by Christopho and the Solarus Team.
 .PP
-This manual page was written by Nathan Moore <nathanmo...@cox.net>,
+This manual page was written by Nathan Moore <nated...@gmail.com>,
 for the Solarus project (feel free to use it).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/Game.cpp 
new/solarus-1.5.3/src/Game.cpp
--- old/solarus-1.5.1/src/Game.cpp      2016-11-29 21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/Game.cpp      2017-04-03 11:49:35.000000000 +0200
@@ -179,6 +179,14 @@
 }
 
 /**
+ * \brief Returns the resource provider of the quest.
+ * \return The resource provider.
+ */
+ResourceProvider& Game::get_resource_provider() {
+  return main_loop.get_resource_provider();
+}
+
+/**
  * \brief Returns the hero.
  * \return the hero
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/MainLoop.cpp 
new/solarus-1.5.3/src/MainLoop.cpp
--- old/solarus-1.5.1/src/MainLoop.cpp  2016-11-29 21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/MainLoop.cpp  2017-04-03 11:49:35.000000000 +0200
@@ -222,6 +222,14 @@
 }
 
 /**
+ * \brief Returns the resource provider of this quest.
+ * \return The resource provider.
+ */
+ResourceProvider& MainLoop::get_resource_provider() {
+  return resource_provider;
+}
+
+/**
  * \brief Returns whether the user just closed the window.
  *
  * When this function returns true, you should stop immediately
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/Map.cpp 
new/solarus-1.5.3/src/Map.cpp
--- old/solarus-1.5.1/src/Map.cpp       2016-11-29 21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/Map.cpp       2017-04-03 11:49:35.000000000 +0200
@@ -29,6 +29,7 @@
 #include "solarus/lua/LuaContext.h"
 #include "solarus/Game.h"
 #include "solarus/Map.h"
+#include "solarus/ResourceProvider.h"
 #include "solarus/Savegame.h"
 #include "solarus/Sprite.h"
 
@@ -71,7 +72,6 @@
  * \return the id of the tileset
  */
 const std::string& Map::get_tileset_id() const {
-  // note that if set_tileset() has been called, tileset_id != 
tileset->get_id()
   return tileset_id;
 }
 
@@ -81,14 +81,13 @@
  * The new tileset must be compatible with the previous one,
  * i.e. every tile of the previous tileset must exist in the new one
  * and have the same properties.
- * This function keeps the tiles of the previous tileset and loads the
- * image of the new tileset.
  *
  * \param tileset_id Id of the new tileset.
  */
 void Map::set_tileset(const std::string& tileset_id) {
 
-  tileset->set_images(tileset_id);
+  ResourceProvider& resource_provider = get_game().get_resource_provider();
+  tileset = &resource_provider.get_tileset(tileset_id);
   get_entities().notify_tileset_changed();
   this->tileset_id = tileset_id;
   build_background_surface();
@@ -295,6 +294,7 @@
 
   // Initialize the map from the data just read.
   this->game = &game;
+  ResourceProvider& resource_provider = game.get_resource_provider();
   location.set_xy(data.get_location());
   location.set_size(data.get_size());
   width8 = data.get_size().width / 8;
@@ -305,8 +305,7 @@
   set_world(data.get_world());
   set_floor(data.get_floor());
   tileset_id = data.get_tileset_id();
-  tileset = std::unique_ptr<Tileset>(new Tileset(data.get_tileset_id()));
-  tileset->load();
+  tileset = &resource_provider.get_tileset(tileset_id);
   entities = std::unique_ptr<Entities>(new Entities(game, *this));
   entities->create_entities(data);
 
@@ -332,7 +331,7 @@
  *
  * This function should not be called before the map is loaded into a game.
  *
- * \return the game
+ * \return The game.
  */
 Game& Map::get_game() {
   return *game;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/ResourceProvider.cpp 
new/solarus-1.5.3/src/ResourceProvider.cpp
--- old/solarus-1.5.1/src/ResourceProvider.cpp  1970-01-01 01:00:00.000000000 
+0100
+++ new/solarus-1.5.3/src/ResourceProvider.cpp  2017-04-03 11:49:35.000000000 
+0200
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2006-2016 Christopho, Solarus - http://www.solarus-games.org
+ *
+ * Solarus is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Solarus is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "solarus/ResourceProvider.h"
+
+namespace Solarus {
+
+/**
+ * \brief Creates a resource provider.
+ */
+ResourceProvider::ResourceProvider() {
+}
+
+/**
+ * \brief Provides the tileset with the given id.
+ * \param tileset_id A tileset id.
+ * \return The corresponding tileset.
+ */
+const Tileset& ResourceProvider::get_tileset(const std::string& tileset_id) {
+
+  auto it = tileset_cache.find(tileset_id);
+  if (it != tileset_cache.end()) {
+    return *it->second;
+  }
+
+  it = tileset_cache.emplace(
+        tileset_id,
+        std::unique_ptr<Tileset>(new Tileset(tileset_id))
+  ).first;
+  Tileset& tileset = *it->second;
+  tileset.load();
+  return tileset;
+}
+
+/**
+ * \brief Notifies the resource provider that cached data (if any) is no 
longer valid.
+ *
+ * This function must be called when a resource element has changed on disk.
+ *
+ * \param resource_type Type of resource that has changed.
+ * \param element_id Resource element that has changed.
+ */
+void ResourceProvider::invalidate_resource_element(
+    ResourceType resource_type,
+    const std::string& element_id) {
+
+  switch (resource_type) {
+
+  case ResourceType::TILESET:
+    tileset_cache.erase(element_id);
+    break;
+
+  default:
+    break;
+  }
+}
+
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/Sprite.cpp 
new/solarus-1.5.3/src/Sprite.cpp
--- old/solarus-1.5.1/src/Sprite.cpp    2016-11-29 21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/Sprite.cpp    2017-04-03 11:49:35.000000000 +0200
@@ -50,7 +50,7 @@
 void Sprite::quit() {
 
   // delete the animations loaded
-  for (auto kvp: all_animation_sets) {
+  for (auto& kvp: all_animation_sets) {
     delete kvp.second;
   }
   all_animation_sets.clear();
@@ -133,7 +133,7 @@
  *
  * \param tileset The tileset.
  */
-void Sprite::set_tileset(Tileset& tileset) {
+void Sprite::set_tileset(const Tileset& tileset) {
   animation_set.set_tileset(tileset);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/SpriteAnimation.cpp 
new/solarus-1.5.3/src/SpriteAnimation.cpp
--- old/solarus-1.5.1/src/SpriteAnimation.cpp   2016-11-29 21:39:30.000000000 
+0100
+++ new/solarus-1.5.3/src/SpriteAnimation.cpp   2017-04-03 11:49:35.000000000 
+0200
@@ -63,7 +63,7 @@
  *
  * \param tileset The tileset.
  */
-void SpriteAnimation::set_tileset(Tileset& tileset) {
+void SpriteAnimation::set_tileset(const Tileset& tileset) {
 
   if (!src_image_is_tileset) {
     // Nothing to do when the tileset changes.
@@ -72,7 +72,7 @@
 
   src_image = tileset.get_entities_image();
   if (should_enable_pixel_collisions) {
-    disable_pixel_collisions(); // to force creating the images again
+    disable_pixel_collisions();  // To force creating the images again.
     do_enable_pixel_collisions();
   }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/SpriteAnimationSet.cpp 
new/solarus-1.5.3/src/SpriteAnimationSet.cpp
--- old/solarus-1.5.1/src/SpriteAnimationSet.cpp        2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/SpriteAnimationSet.cpp        2017-04-03 
11:49:35.000000000 +0200
@@ -101,7 +101,7 @@
  *
  * \param tileset The tileset.
  */
-void SpriteAnimationSet::set_tileset(Tileset& tileset) {
+void SpriteAnimationSet::set_tileset(const Tileset& tileset) {
 
   for (auto& kvp: animations) {
     kvp.second.set_tileset(tileset);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/entities/AnimatedTilePattern.cpp 
new/solarus-1.5.3/src/entities/AnimatedTilePattern.cpp
--- old/solarus-1.5.1/src/entities/AnimatedTilePattern.cpp      2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/entities/AnimatedTilePattern.cpp      2017-04-03 
11:49:35.000000000 +0200
@@ -129,9 +129,9 @@
 void AnimatedTilePattern::draw(
     const SurfacePtr& dst_surface,
     const Point& dst_position,
-    Tileset& tileset,
+    const Tileset& tileset,
     const Point& viewport
-) {
+) const {
   const SurfacePtr& tileset_image = tileset.get_tiles_image();
   const Rectangle& src = position_in_tileset[current_frames[sequence]];
   Point dst = dst_position;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/entities/DynamicTile.cpp 
new/solarus-1.5.3/src/entities/DynamicTile.cpp
--- old/solarus-1.5.1/src/entities/DynamicTile.cpp      2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/entities/DynamicTile.cpp      2017-04-03 
11:49:35.000000000 +0200
@@ -40,7 +40,7 @@
     int layer,
     const Point& xy,
     const Size& size,
-    Tileset& tileset,
+    const Tileset& tileset,
     const std::string& tile_pattern_id,
     bool enabled
 ) :
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/entities/Enemy.cpp 
new/solarus-1.5.3/src/entities/Enemy.cpp
--- old/solarus-1.5.1/src/entities/Enemy.cpp    2016-11-29 21:39:30.000000000 
+0100
+++ new/solarus-1.5.3/src/entities/Enemy.cpp    2017-04-03 11:49:35.000000000 
+0200
@@ -133,7 +133,6 @@
  * \param layer layer of the enemy on the map
  * \param xy Coordinates of the enemy on the map.
  * \param direction initial direction of the enemy on the map (0 to 3)
- * this enemy is killed, or -1 if this enemy is not saved
  * \param treasure the pickable item that the enemy drops
  * \return the enemy created (may also be a Pickable or nullptr)
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/entities/Entities.cpp 
new/solarus-1.5.3/src/entities/Entities.cpp
--- old/solarus-1.5.1/src/entities/Entities.cpp 2016-11-29 21:39:30.000000000 
+0100
+++ new/solarus-1.5.3/src/entities/Entities.cpp 2017-04-03 11:49:35.000000000 
+0200
@@ -1235,17 +1235,18 @@
       Debug::check_assertion(map.is_valid_layer(layer), "Invalid layer");
       if (entity->is_enabled() &&
           entity->is_visible()) {
-          entities_to_draw[layer].push_back(entity);
+        entities_to_draw[layer].push_back(entity);
       }
     }
 
     // Add entities displayed even when out of the camera.
     for (int layer = map.get_min_layer(); layer <= map.get_max_layer(); 
++layer) {
-      entities_to_draw[layer].insert(
-          entities_to_draw[layer].end(),
-          entities_drawn_not_at_their_position[layer].begin(),
-          entities_drawn_not_at_their_position[layer].end()
-      );
+      for (const EntityPtr& entity : 
entities_drawn_not_at_their_position[layer]) {
+        if (entity->is_enabled() &&
+            entity->is_visible()) {
+          entities_to_draw[layer].push_back(entity);
+        }
+      }
 
       // Sort them and remove duplicates.
       // Duplicate drawings are a problem for entities with semi-transparency.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/solarus-1.5.1/src/entities/ParallaxScrollingTilePattern.cpp 
new/solarus-1.5.3/src/entities/ParallaxScrollingTilePattern.cpp
--- old/solarus-1.5.1/src/entities/ParallaxScrollingTilePattern.cpp     
2016-11-29 21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/entities/ParallaxScrollingTilePattern.cpp     
2017-04-03 11:49:35.000000000 +0200
@@ -43,9 +43,9 @@
 void ParallaxScrollingTilePattern::draw(
     const SurfacePtr& dst_surface,
     const Point& dst_position,
-    Tileset& tileset,
+    const Tileset& tileset,
     const Point& viewport
-) {
+) const {
   const SurfacePtr& tileset_image = tileset.get_tiles_image();
   Point dst = dst_position;
   dst += viewport / ratio;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/solarus-1.5.1/src/entities/SelfScrollingTilePattern.cpp 
new/solarus-1.5.3/src/entities/SelfScrollingTilePattern.cpp
--- old/solarus-1.5.1/src/entities/SelfScrollingTilePattern.cpp 2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/entities/SelfScrollingTilePattern.cpp 2017-04-03 
11:49:35.000000000 +0200
@@ -41,8 +41,9 @@
  */
 void SelfScrollingTilePattern::draw(
     const SurfacePtr& dst_surface,
-    const Point& dst_position, Tileset& tileset,
-    const Point& /* viewport */) {
+    const Point& dst_position,
+    const Tileset& tileset,
+    const Point& /* viewport */) const {
 
   Rectangle src = position_in_tileset;
   Point dst = dst_position;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/entities/SimpleTilePattern.cpp 
new/solarus-1.5.3/src/entities/SimpleTilePattern.cpp
--- old/solarus-1.5.1/src/entities/SimpleTilePattern.cpp        2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/entities/SimpleTilePattern.cpp        2017-04-03 
11:49:35.000000000 +0200
@@ -44,9 +44,9 @@
 void SimpleTilePattern::draw(
     const SurfacePtr& dst_surface,
     const Point& dst_position,
-    Tileset& tileset,
+    const Tileset& tileset,
     const Point& /* viewport */
-) {
+) const {
   const SurfacePtr& tileset_image = tileset.get_tiles_image();
   tileset_image->draw_region(position_in_tileset, dst_surface, dst_position);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/entities/Tile.cpp 
new/solarus-1.5.3/src/entities/Tile.cpp
--- old/solarus-1.5.1/src/entities/Tile.cpp     2016-11-29 21:39:30.000000000 
+0100
+++ new/solarus-1.5.3/src/entities/Tile.cpp     2017-04-03 11:49:35.000000000 
+0200
@@ -93,9 +93,9 @@
 
 /**
  * \brief Returns the pattern of this tile.
- * \return the tile pattern
+ * \return The tile pattern.
  */
-TilePattern& Tile::get_tile_pattern() {
+const TilePattern& Tile::get_tile_pattern() const {
   return tile_pattern;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/entities/TilePattern.cpp 
new/solarus-1.5.3/src/entities/TilePattern.cpp
--- old/solarus-1.5.1/src/entities/TilePattern.cpp      2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/entities/TilePattern.cpp      2017-04-03 
11:49:35.000000000 +0200
@@ -45,13 +45,6 @@
         ") but should be positive and multiple of 8 pixels";
     Debug::die(oss.str());
   }
-
-  // Diagonal obstacle: check that the tile is square.
-  if (GroundInfo::is_ground_diagonal(ground)) {
-    if (!size.is_square()) {
-      Debug::error("Invalid tile pattern: a tile pattern with a diagonal wall 
must be square");
-    }
-  }
 }
 
 /**
@@ -161,9 +154,9 @@
 void TilePattern::fill_surface(
     const SurfacePtr& dst_surface,
     const Rectangle& dst_position,
-    Tileset& tileset,
+    const Tileset& tileset,
     const Point& viewport
-) {
+) const {
   Point dst;
 
   int limit_x = dst_position.get_x() + dst_position.get_width();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/entities/Tileset.cpp 
new/solarus-1.5.3/src/entities/Tileset.cpp
--- old/solarus-1.5.1/src/entities/Tileset.cpp  2016-11-29 21:39:30.000000000 
+0100
+++ new/solarus-1.5.3/src/entities/Tileset.cpp  2017-04-03 11:49:35.000000000 
+0200
@@ -46,7 +46,7 @@
  * \brief Returns the id of this tileset.
  * \return the tileset id
  */
-const std::string& Tileset::get_id() {
+const std::string& Tileset::get_id() const {
   return id;
 }
 
@@ -72,24 +72,32 @@
   if (frames.size() == 1) {
     // Single frame.
     const Rectangle& frame = frames[0];
+    const Size& size = frame.get_size();
+
+    // Diagonal obstacle: check that the tile is square.
+    if (GroundInfo::is_ground_diagonal(ground)) {
+      if (!size.is_square()) {
+        Debug::error("Invalid tile pattern '"  + id + ": a tile pattern with a 
diagonal wall must be square");
+      }
+    }
 
     switch (scrolling) {
 
     case TileScrolling::NONE:
       tile_pattern = new SimpleTilePattern(
-          ground, frame.get_xy(), frame.get_size()
+          ground, frame.get_xy(), size
       );
       break;
 
     case TileScrolling::PARALLAX:
       tile_pattern = new ParallaxScrollingTilePattern(
-          ground, frame.get_xy(), frame.get_size()
+          ground, frame.get_xy(), size
       );
       break;
 
     case TileScrolling::SELF:
       tile_pattern = new SelfScrollingTilePattern(
-          ground, frame.get_xy(), frame.get_size()
+          ground, frame.get_xy(), size
       );
       break;
     }
@@ -169,7 +177,7 @@
  * \brief Returns the background color of this tileset.
  * \return the background color
  */
-Color& Tileset::get_background_color() {
+const Color& Tileset::get_background_color() const {
   return background_color;
 }
 
@@ -177,7 +185,7 @@
  * \brief Returns whether this tileset is loaded.
  * \return true if this tileset is loaded
  */
-bool Tileset::is_loaded() {
+bool Tileset::is_loaded() const {
   return tiles_image != nullptr;
 }
 
@@ -185,7 +193,7 @@
  * \brief Returns the image containing the tiles of this tileset.
  * \return the tiles image
  */
-const SurfacePtr& Tileset::get_tiles_image() {
+const SurfacePtr& Tileset::get_tiles_image() const {
   return tiles_image;
 }
 
@@ -193,7 +201,7 @@
  * \brief Returns the image containing the skin-dependent dynamic entities for 
this tileset.
  * \return the image containing the skin-dependent dynamic entities for this 
tileset
  */
-const SurfacePtr& Tileset::get_entities_image() {
+const SurfacePtr& Tileset::get_entities_image() const {
   return entities_image;
 }
 
@@ -202,7 +210,7 @@
  * \param id id of the tile pattern to get
  * \return the tile pattern with this id
  */
-TilePattern& Tileset::get_tile_pattern(const std::string& id) {
+const TilePattern& Tileset::get_tile_pattern(const std::string& id) const {
 
   const auto& it = tile_patterns.find(id);
   if (it == tile_patterns.end()) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/solarus-1.5.1/src/entities/TimeScrollingTilePattern.cpp 
new/solarus-1.5.3/src/entities/TimeScrollingTilePattern.cpp
--- old/solarus-1.5.1/src/entities/TimeScrollingTilePattern.cpp 2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/entities/TimeScrollingTilePattern.cpp 2017-04-03 
11:49:35.000000000 +0200
@@ -78,9 +78,9 @@
 void TimeScrollingTilePattern::draw(
     const SurfacePtr& dst_surface,
     const Point& dst_position,
-    Tileset& tileset,
+    const Tileset& tileset,
     const Point& /* viewport */
-) {
+) const {
   Rectangle src = position_in_tileset;
   Point dst = dst_position;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/lowlevel/QuestFiles.cpp 
new/solarus-1.5.3/src/lowlevel/QuestFiles.cpp
--- old/solarus-1.5.1/src/lowlevel/QuestFiles.cpp       2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/lowlevel/QuestFiles.cpp       2017-04-03 
11:49:35.000000000 +0200
@@ -480,7 +480,7 @@
 SOLARUS_API std::string get_base_write_dir() {
 
 #if defined(SOLARUS_OSX) || defined(SOLARUS_IOS)
-  return std::string(get_user_application_support_directory());
+  return get_user_application_support_directory();
 #else
   return std::string(PHYSFS_getUserDir());
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/lowlevel/Surface.cpp 
new/solarus-1.5.3/src/lowlevel/Surface.cpp
--- old/solarus-1.5.1/src/lowlevel/Surface.cpp  2016-11-29 21:39:30.000000000 
+0100
+++ new/solarus-1.5.3/src/lowlevel/Surface.cpp  2017-04-03 11:49:35.000000000 
+0200
@@ -200,13 +200,13 @@
 }
 
 /**
- * \brief Returns the SDL_Surface corresponding to the requested file.
+ * \brief Creates an SDL surface corresponding to the requested file.
  *
- * The returned SDL_Surface has to be manually deleted.
+ * The returned SDL surface has to be manually deleted.
  *
  * \param file_name Name of the image file to load, relative to the base 
directory specified.
  * \param base_directory The base directory to use.
- * \return The SDL_Surface.
+ * \return The SDL surface created.
  */
 SDL_Surface* Surface::get_surface_from_file(
     const std::string& file_name,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/lowlevel/apple/AppleInterface.mm 
new/solarus-1.5.3/src/lowlevel/apple/AppleInterface.mm
--- old/solarus-1.5.1/src/lowlevel/apple/AppleInterface.mm      2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/lowlevel/apple/AppleInterface.mm      2017-04-03 
11:49:35.000000000 +0200
@@ -14,6 +14,7 @@
  * You should have received a copy of the GNU General Public License along
  * with this program. If not, see <http://www.gnu.org/licenses/>.
  */
+#include "solarus/lowlevel/Debug.h"
 #include "solarus/lowlevel/apple/AppleInterface.h"
 
 #if defined(SOLARUS_OSX) || defined(SOLARUS_IOS)
@@ -27,29 +28,35 @@
 
 
 /**
- * @brief Return "~/Library/Application Support" or equivalent from the 
official
- * way, which is available in OSX 10.6+ and iOS 4.0+.
+ * @brief Create and return the Application Support folder from the User Domain
+ * which doesn't exist by default in the iOS sandboxed environment.
  *
- * Return an OSX 10.0+ and iOS 1.0+ (not compatible with Iphone Simulator)
- * hardcoded equivalent workaround if the build configuration is set for a
- * lower minimum version.
  * @return The Application Support folder from the User Domain.
  */
 std::string get_user_application_support_directory()
 {
   @autoreleasepool {
 
-#if defined(SOLARUS_OSX) && __MAC_OS_X_VERSION_MIN_REQUIRED  >= 
MAC_OS_X_VERSION_10_6 \
- || defined(SOLARUS_IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_4_0
-    return [[[[[NSFileManager defaultManager]
-               URLsForDirectory:NSApplicationSupportDirectory 
inDomains:NSUserDomainMask]
-              objectAtIndex:0]
-             path]
-            UTF8String];
-#else
-    return [[NSHomeDirectory() 
stringByAppendingPathComponent:@"Library/Application Support"]
-            UTF8String];
-#endif
+    NSString* app_support_directory = [
+        NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, 
NSUserDomainMask, YES)
+        objectAtIndex:0];
+
+    // Create the Application Support folder if it doesn't exist yet.
+    if (![[NSFileManager defaultManager]
+        fileExistsAtPath:app_support_directory
+        isDirectory:NULL]) {
+
+      NSError* error = nil;
+      if (![[NSFileManager defaultManager]
+          createDirectoryAtPath:app_support_directory
+          withIntermediateDirectories:YES
+          attributes:nil
+          error:&error]) {
+        Solarus::Debug::error("Cannot create " + 
std::string([app_support_directory UTF8String]));
+      }
+    }
+
+    return [app_support_directory UTF8String];
   }
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/lua/MapApi.cpp 
new/solarus-1.5.3/src/lua/MapApi.cpp
--- old/solarus-1.5.1/src/lua/MapApi.cpp        2016-11-29 21:39:30.000000000 
+0100
+++ new/solarus-1.5.3/src/lua/MapApi.cpp        2017-04-03 11:49:35.000000000 
+0200
@@ -420,8 +420,8 @@
     const Size size =  entity_creation_check_size(l, 1, data);
     const std::string& tile_pattern_id = data.get_string("pattern");
 
-    Tileset& tileset = map.get_tileset();
-    TilePattern& pattern = tileset.get_tile_pattern(tile_pattern_id);
+    const Tileset& tileset = map.get_tileset();
+    const TilePattern& pattern = tileset.get_tile_pattern(tile_pattern_id);
     const Size& pattern_size = pattern.get_size();
     Entities& entities = map.get_entities();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/src/lua/TextSurfaceApi.cpp 
new/solarus-1.5.3/src/lua/TextSurfaceApi.cpp
--- old/solarus-1.5.1/src/lua/TextSurfaceApi.cpp        2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/src/lua/TextSurfaceApi.cpp        2017-04-03 
11:49:35.000000000 +0200
@@ -227,7 +227,7 @@
     TextSurface& text_surface = *check_text_surface(l, 1);
     TextSurface::HorizontalAlignment alignment =
         LuaTools::check_enum<TextSurface::HorizontalAlignment>(
-            l, 1, horizontal_alignment_names);
+            l, 2, horizontal_alignment_names);
 
     text_surface.set_horizontal_alignment(alignment);
 
@@ -263,7 +263,7 @@
     TextSurface& text_surface = *check_text_surface(l, 1);
     TextSurface::VerticalAlignment alignment =
         LuaTools::check_enum<TextSurface::VerticalAlignment>(
-            l, 1, vertical_alignment_names);
+            l, 2, vertical_alignment_names);
 
     text_surface.set_vertical_alignment(alignment);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/solarus-1.5.1/tests/testing_quest/data/project_db.dat 
new/solarus-1.5.3/tests/testing_quest/data/project_db.dat
--- old/solarus-1.5.1/tests/testing_quest/data/project_db.dat   2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/tests/testing_quest/data/project_db.dat   2017-04-03 
11:49:35.000000000 +0200
@@ -119,57 +119,127 @@
 sprite{ id = "main_heroes/sword", description = "Sword" }
 sprite{ id = "main_heroes/sword_electricity", description = "Sword 
electricity" }
 sprite{ id = "main_heroes/trail", description = "Trail" }
-sprite{ id = "menus/solarus_logo", description = "Menu: Solarus logo" }
+sprite{ id = "menus/solarus_logo", description = "Solarus logo" }
 sprite{ id = "todo", description = "TODO image" }
 
 
 sound{ id = "arrow_hit", description = "arrow_hit" }
+sound{ id = "bird_chirp", description = "bird_chirp" }
+sound{ id = "bird_chirp1", description = "bird_chirp1" }
+sound{ id = "bird_chirp2", description = "bird_chirp2" }
+sound{ id = "bird_cute", description = "bird_cute" }
+sound{ id = "bomb", description = "bomb" }
 sound{ id = "boomerang", description = "boomerang" }
+sound{ id = "boss_charge", description = "boss_charge" }
+sound{ id = "boss_fireball", description = "boss_fireball" }
 sound{ id = "boss_hurt", description = "boss_hurt" }
 sound{ id = "boss_killed", description = "boss_killed" }
+sound{ id = "bounce", description = "bounce" }
 sound{ id = "bow", description = "bow" }
 sound{ id = "bush", description = "bush" }
 sound{ id = "cane", description = "cane" }
+sound{ id = "cane2", description = "cane2" }
+sound{ id = "cane3", description = "cane3" }
+sound{ id = "cat", description = "cat" }
+sound{ id = "chest_appears", description = "chest_appears" }
 sound{ id = "chest_open", description = "chest_open" }
+sound{ id = "cricket", description = "cricket" }
+sound{ id = "crystal", description = "crystal" }
+sound{ id = "crystal2", description = "crystal2" }
+sound{ id = "cursor", description = "cursor" }
+sound{ id = "danger", description = "danger" }
+sound{ id = "diarandor/solarus_logo", description = "Solarus logo" }
 sound{ id = "door_closed", description = "door_closed" }
 sound{ id = "door_open", description = "door_open" }
 sound{ id = "door_unlocked", description = "door_unlocked" }
+sound{ id = "eduardo/secret", description = "secret" }
+sound{ id = "electrified", description = "electrified" }
+sound{ id = "electrified2", description = "electrified2" }
+sound{ id = "enemy_awake", description = "enemy_awake" }
 sound{ id = "enemy_hurt", description = "enemy_hurt" }
 sound{ id = "enemy_killed", description = "enemy_killed" }
 sound{ id = "explosion", description = "explosion" }
+sound{ id = "falling_on_hole", description = "falling_on_hole" }
+sound{ id = "falling_rock", description = "falling_rock" }
+sound{ id = "fire_ball", description = "fire_ball" }
+sound{ id = "fire_ball2", description = "fire_ball2" }
+sound{ id = "frost1", description = "frost1" }
+sound{ id = "frost2", description = "frost2" }
+sound{ id = "heart", description = "heart" }
+sound{ id = "heart_container", description = "heart_container" }
+sound{ id = "hero_dying", description = "hero_dying" }
 sound{ id = "hero_falls", description = "hero_falls" }
 sound{ id = "hero_hurt", description = "hero_hurt" }
 sound{ id = "hero_lands", description = "hero_lands" }
 sound{ id = "hero_pushes", description = "hero_pushes" }
+sound{ id = "hero_seen", description = "hero_seen" }
 sound{ id = "hookshot", description = "hookshot" }
+sound{ id = "item_fall", description = "item_fall" }
 sound{ id = "jump", description = "jump" }
+sound{ id = "key_fall", description = "key_fall" }
+sound{ id = "lamp", description = "lamp" }
 sound{ id = "lift", description = "lift" }
+sound{ id = "magnet1", description = "magnet1" }
 sound{ id = "message_end", description = "message_end" }
-sound{ id = "monster_hurt", description = "monster_hurt" }
+sound{ id = "message_letter", description = "message_letter" }
+sound{ id = "money_counter", description = "money_counter" }
+sound{ id = "money_counter_end", description = "money_counter_end" }
+sound{ id = "monster_hurt", description = "zora" }
+sound{ id = "mouse", description = "mouse" }
+sound{ id = "ok", description = "ok" }
+sound{ id = "open_lock", description = "open_lock" }
+sound{ id = "pause_closed", description = "pause_closed" }
+sound{ id = "pause_open", description = "pause_open" }
 sound{ id = "picked_item", description = "picked_item" }
+sound{ id = "picked_money", description = "picked_money" }
+sound{ id = "picked_small_key", description = "picked_small_key" }
+sound{ id = "quake", description = "quake" }
 sound{ id = "running", description = "running" }
 sound{ id = "running_obstacle", description = "running_obstacle" }
 sound{ id = "shield", description = "shield" }
+sound{ id = "shield2", description = "shield2" }
+sound{ id = "shield3", description = "shield3" }
+sound{ id = "soft_tap", description = "soft_tap" }
 sound{ id = "splash", description = "splash" }
 sound{ id = "stairs_down_end", description = "stairs_down_end" }
 sound{ id = "stairs_down_start", description = "stairs_down_start" }
 sound{ id = "stairs_up_end", description = "stairs_up_end" }
 sound{ id = "stairs_up_start", description = "stairs_up_start" }
 sound{ id = "stone", description = "stone" }
+sound{ id = "swim", description = "swim" }
 sound{ id = "switch", description = "switch" }
+sound{ id = "switch_hero", description = "switch_hero" }
 sound{ id = "sword1", description = "sword1" }
+sound{ id = "sword2", description = "sword2" }
+sound{ id = "sword3", description = "sword3" }
+sound{ id = "sword4", description = "sword4" }
 sound{ id = "sword_spin_attack_load", description = "sword_spin_attack_load" }
 sound{ id = "sword_spin_attack_release", description = 
"sword_spin_attack_release" }
 sound{ id = "sword_tapping", description = "sword_tapping" }
 sound{ id = "sword_tapping_weak_wall", description = "sword_tapping_weak_wall" 
}
+sound{ id = "teleporter", description = "teleporter" }
 sound{ id = "throw", description = "throw" }
+sound{ id = "thunder1", description = "thunder1" }
+sound{ id = "thunder2", description = "thunder2" }
+sound{ id = "thunder3", description = "thunder3" }
+sound{ id = "thunder_double", description = "thunder_double" }
+sound{ id = "thunder_far", description = "thunder_far" }
 sound{ id = "timer", description = "timer" }
+sound{ id = "timer2", description = "timer2" }
 sound{ id = "timer_hurry", description = "timer_hurry" }
+sound{ id = "tongue", description = "tongue" }
 sound{ id = "treasure", description = "treasure" }
 sound{ id = "victory", description = "victory" }
 sound{ id = "walk_on_grass", description = "walk_on_grass" }
 sound{ id = "walk_on_water", description = "walk_on_water" }
+sound{ id = "warp", description = "warp" }
+sound{ id = "water_fill", description = "water_fill" }
+sound{ id = "wings1", description = "wings1" }
+sound{ id = "wings2", description = "wings2" }
+sound{ id = "world_warp", description = "world_warp" }
 sound{ id = "wrong", description = "wrong" }
+sound{ id = "wrong2", description = "wrong2" }
+sound{ id = "wrong3", description = "wrong3" }
 
 item{ id = "bomb", description = "Bomb" }
 item{ id = "non_saved_item", description = "Non-saved item" }
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/bird_chirp.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/bird_chirp.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/bird_chirp1.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/bird_chirp1.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/bird_chirp2.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/bird_chirp2.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/bird_cute.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/bird_cute.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/boss_charge.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/boss_charge.ogg differ
Binary files 
old/solarus-1.5.1/tests/testing_quest/data/sounds/boss_fireball.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/boss_fireball.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/boss_hurt.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/boss_hurt.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/boss_killed.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/boss_killed.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/cane.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/cane.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/cane2.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/cane2.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/cane3.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/cane3.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/cricket.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/cricket.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/crystal2.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/crystal2.ogg differ
Binary files 
old/solarus-1.5.1/tests/testing_quest/data/sounds/diarandor/solarus_logo.ogg 
and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/diarandor/solarus_logo.ogg 
differ
Binary files 
old/solarus-1.5.1/tests/testing_quest/data/sounds/door_unlocked.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/door_unlocked.ogg differ
Binary files 
old/solarus-1.5.1/tests/testing_quest/data/sounds/eduardo/secret.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/eduardo/secret.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/electrified.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/electrified.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/electrified2.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/electrified2.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/enemy_awake.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/enemy_awake.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/explosion.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/explosion.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/fire_ball2.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/fire_ball2.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/frost1.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/frost1.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/frost2.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/frost2.ogg differ
Binary files 
old/solarus-1.5.1/tests/testing_quest/data/sounds/heart_container.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/heart_container.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/hero_seen.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/hero_seen.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/lamp.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/lamp.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/magnet1.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/magnet1.ogg differ
Binary files 
old/solarus-1.5.1/tests/testing_quest/data/sounds/money_counter.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/money_counter.ogg differ
Binary files 
old/solarus-1.5.1/tests/testing_quest/data/sounds/money_counter_end.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/money_counter_end.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/monster_hurt.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/monster_hurt.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/picked_money.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/picked_money.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/picked_rupee.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/picked_rupee.ogg differ
Binary files 
old/solarus-1.5.1/tests/testing_quest/data/sounds/picked_small_key.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/picked_small_key.ogg differ
Binary files 
old/solarus-1.5.1/tests/testing_quest/data/sounds/rupee_counter.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/rupee_counter.ogg differ
Binary files 
old/solarus-1.5.1/tests/testing_quest/data/sounds/rupee_counter_end.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/rupee_counter_end.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/secret.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/secret.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/shield.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/shield.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/shield2.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/shield2.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/shield3.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/shield3.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/stone.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/stone.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/sword2.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/sword2.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/sword3.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/sword3.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/sword4.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/sword4.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/thunder1.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/thunder1.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/thunder2.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/thunder2.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/thunder3.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/thunder3.ogg differ
Binary files 
old/solarus-1.5.1/tests/testing_quest/data/sounds/thunder_double.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/thunder_double.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/thunder_far.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/thunder_far.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/timer.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/timer.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/timer2.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/timer2.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/timer_hurry.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/timer_hurry.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/water_fill.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/water_fill.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/wings1.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/wings1.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/wings2.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/wings2.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/world_warp.ogg 
and new/solarus-1.5.3/tests/testing_quest/data/sounds/world_warp.ogg differ
Binary files old/solarus-1.5.1/tests/testing_quest/data/sounds/wrong3.ogg and 
new/solarus-1.5.3/tests/testing_quest/data/sounds/wrong3.ogg differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/solarus-1.5.1/tests/testing_quest/data/sprites/hero/sword1.dat 
new/solarus-1.5.3/tests/testing_quest/data/sprites/hero/sword1.dat
--- old/solarus-1.5.1/tests/testing_quest/data/sprites/hero/sword1.dat  
2016-11-29 21:39:30.000000000 +0100
+++ new/solarus-1.5.3/tests/testing_quest/data/sprites/hero/sword1.dat  
2017-04-03 11:49:35.000000000 +0200
@@ -1,7 +1,7 @@
 animation{
   name = "sword",
   src_image = "main_heroes/sword_brandish.png",
-  frame_delay = 200,
+  frame_delay = 30,
   directions = {
     { x = 0, y = 0, frame_width = 48, frame_height = 48, origin_x = 12, 
origin_y = 31, num_frames = 12 },
     { x = 0, y = 96, frame_width = 48, frame_height = 32, origin_x = 20, 
origin_y = 39, num_frames = 12 },
@@ -22,6 +22,17 @@
   },
 }
 animation{
+  name = "sword_inverted",
+  src_image = "main_heroes/sword_brandish_inverted.png",
+  frame_delay = 30,
+  directions = {
+    { x = 0, y = 0, frame_width = 48, frame_height = 48, origin_x = 12, 
origin_y = 31, num_frames = 12 },
+    { x = 0, y = 96, frame_width = 48, frame_height = 32, origin_x = 20, 
origin_y = 39, num_frames = 12 },
+    { x = 0, y = 48, frame_width = 48, frame_height = 48, origin_x = 36, 
origin_y = 31, num_frames = 12 },
+    { x = 0, y = 160, frame_width = 48, frame_height = 32, origin_x = 20, 
origin_y = 15, num_frames = 12 },
+  },
+}
+animation{
   name = "sword_loading_stopped",
   src_image = "main_heroes/sword_loading.png",
   directions = {
@@ -35,6 +46,7 @@
   name = "sword_loading_walking",
   src_image = "main_heroes/sword_loading.png",
   frame_delay = 100,
+  frame_to_loop_on = 0,
   directions = {
     { x = 0, y = 0, frame_width = 24, frame_height = 24, origin_x = -4, 
origin_y = 23, num_frames = 6 },
     { x = 0, y = 24, frame_width = 24, frame_height = 24, origin_x = 12, 
origin_y = 39, num_frames = 6 },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/solarus-1.5.1/tests/testing_quest/license.txt 
new/solarus-1.5.3/tests/testing_quest/license.txt
--- old/solarus-1.5.1/tests/testing_quest/license.txt   2016-11-29 
21:39:30.000000000 +0100
+++ new/solarus-1.5.3/tests/testing_quest/license.txt   2017-04-03 
11:49:35.000000000 +0200
@@ -1,13 +1,35 @@
-This file gives the license information of all data files of this quest.
-Some resources come from communities like OpenGameArt, and others are original
-creations made by us, the Solarus team.
+We give in this file the license information of
+the Solarus Testing Quest.
 
 - Lua scripts are licensed under the terms of the GNU General Public License
 in version 3.
 
-- Data files come from the Solarus sample quest.
-The ones we created are licensed under
+- Most data files other than Lua scripts are licensed under
 Creative Commons Attribution-ShareAlike 4.0 (CC BY-SA 4.0).
 http://creativecommons.org/licenses/by-sa/4.0/
-See the license.txt file of the sample_quest directory for more details.
+
+- A few data files are in public domain.
+
+Most data files of this quest come from the official
+Solarus Free Resource Pack:
+https://github.com/solarus-games/solarus-free-resource-pack
+
+Main contributors:
+- Christopho
+- Diarandor <diarandor at gmail dot com>:
+  - Source URL for images: http://diarandor.deviantart.com/
+  - Source URL for sounds and music: https://soundcloud.com/diarandor/
+- Eduardo DueƱas <duen...@hotmail.com>
+- Bertram
+
+The more detailed license information of the Solarus Free Resource Pack
+can be found here:
+https://github.com/solarus-games/solarus-free-resource-pack/blob/master/license.txt
+
+We give below the license of all other files of this quest,
+that is, the ones that do not come from the Solarus Free Resource Pack.
+
+Scripts under GNU GPL v3:                           Author
+-------------------------                           ------
+**.lua                                              Christopho
 


Reply via email to