A new design to celebrate Solarus 1.0.x

As you may have seen, Solarus 1.0.1 has just been released. The project is becoming quite big, as it incorporates an engine, 2 games (3 games soon) and a quest editor. With the aim of increasing the project’s visibility, an official logo has been made. We hope it will remind you vintage 90’s video games companies logos. You can freely use it (both png and pixel-art) for your project as it is under Creative Commons license, and download the full pack of logos in EPS and PNG formats on the Solarus logo page.

Solarus Engine logo to use on light backgrounds (click for full size)

Solarus Engine logo with black background (click for full size)

Solarus Engine logo in pixel-art, for title screens

Solarus Engine logo in pixel-art, for title screensSolarus Engine logo for title screens

Consequently, the design for this blog has also been remade to match the logo’s style. It uses the Presswork WordPress theme which is a great theme if you want to build up quite fast and easily a blog. The pages have also been remade with more illustrations to improve navigation and readability.


  • New WordPress theme : Presswork
  • Responsive design
  • Colors and design match the new logo style
  • Illustrations, logos and artworks
  • Christopho’s tweets (at the bottom of the page)
  • Page to download Solarus logo

We hope you’ll like it. And now, here is a small bonus :

Animated title screen for Solarus logo

Solarus 1.0.1 released


An update of Solarus 1.0 is available!

This update fixes a bunch of bugs of previous versions (some of them were very old!), and improves the documentation as well as the quest editor. It is recommended to upgrade.

Because it is a patch release (1.0.0 to 1.0.1), there is no change in the format of data files or in the Lua API, everything remains compatible.

Changes in Solarus

  • Fix the Mac OS X port.
  • Fix jump movement accross two maps ending up in a wall (#189).
  • Fix a possible crash in TextSurface.
  • Fix the hero disappearing a short time after using the sword (#35).
  • Fix the boomerang failing to bring back pickables sometimes (#187).
  • Fix parallax scrolling tiles not always displayed (#167).
  • Fix the setting joypad_enabled that had no effect (#163).
  • Fix doors not working when they require equipment items.
  • Fix a possible compilation warning in Surface.cpp.
  • Fix creating a transition from the callback of a previous one.
  • Fix crystal blocks animated late when coming from a teletransporter (#61).
  • Fix arrows that got stopped when outside the screen (#73).
  • Fix diagonal movement that failed in narrow passages (#39).
  • Don’t die if a script makes an error with a sprite (#151).
  • Don’t die if a script makes an error with an enemy attack consequence.
  • Allow enemies to lose 0 life points when attacked (#137).
  • Pixel-precise collisions can now also be performed on 32-bit images.

Changes in Solarus Quest Editor

  • Add the possibility to show or hide each type of entity (#60).
  • Keep the map coordinates shown when changing the zoom (#183).
  • Fix the map view not updated correctly when changing the zoom (#174).
  • Show the correct sprite of destructible objects (#77).
  • Show an appropriate error message if the LuaJ jar is missing (#173).
  • Fix the title bar string (#176).

Documentation changes


The German release!

As promised in my previous post, I have just released new versions of Zelda Mystery of Solarus DX, Zelda Mystery of Solarus XD and Solarus!

These updates still use the old 0.9 branch of Solarus because I haven’t finished to convert both games yet to Solarus 1.0. And you have waited long enough for the German release and for important bug fixes, especially the bug of blocks that only made half moves.

Solarus 0.9.3 changes:

  • The game screen size can now be set at compilation time.
  • Change the savegames directory on Mac OS X.
  • Improve the support of Mac OS X, Android, Pandora, Caanoo and other platforms.
  • Fix the compilation with Visual C++.
  • Fix blocks making sometimes only a half move (#33).
  • Fix pixel-precise collisions not always correct (#53).
  • Fix the end of target movement on slow machines (#34).
  • Fix the hero being freezed when using the hookshot on bomb flowers (#119).

This should be the last release in the Solarus 0.9 branch. Our games are currently being converted to the 1.0 format.

ZSDX 1.5.2 changes:

  • German dialogs available.
  • Castle 1F: fix NPCs possibly overlapping the hero.
  • West mountains cave: fix a chest possibly overlapping the hero.
  • Fix various issues in French, English and Spanish dialogs.
  • Fix the CMake script that creates the zip archive (#1).

ZSXD 1.5.3 changes:

  • Dungeon 2: the piece of heart could be obtained very easily with the sword.
  • Change the English website url in the credits dialogs.
  • Fix missing lines in dialogs.
  • Fix the CMake script that creates the zip archive.
  • Make creepers appear earlier in the game (#1). Because creepers are fun. I like creepers.


Solarus 1.0.0 released

The “I love Lua” release.

Good news! After a year and a half of hard work, the engine is now considered to be usable to make your own games.

This is a major release. The version number switches from 0.x to 1.x because there is a brand new Lua scripting API.

I now consider that Solarus can be used to create your own Zelda-like games in decent conditions.
By “in decent conditions”, I essentially mean: with a clean and stable scripting API. Clean because there are nice datatypes now and the API is much easier to use, less error-prone and more with the Lua spirit. Stable because future versions of the scripting API will now try to keep compatibility with existing scripts. Any API change will now be clearly documented on this website and in the change log.

Data files and scripts written for solarus 0.x are not compatible with solarus 1.0. I don’t think many people have 0.x quests, but conversion scripts are provided to upgrade your existing data files if it is the case.
Scripts cannot be upgraded automatically though, because the scripting API, which was working but ugly and unstable, has totally changed.

The quest editor celebrates its very first release. It is not full-featured yet (some files still need to be edited by hand), but at least it works now. You can create a quest, manage its data files and edit maps and tilesets.


  • Rewrite the Lua scripting API from scratch. Cleaner, real datatypes, much easier to use, less error-prone, much more features, fully documentated.
  • All scripts now live in a single Lua world.
  • Add support of scripted graphics.
  • Add support of scripted menus. Menus like the title screen, the savegames menu, the pause menu and the HUD are no longer hardcoded into the engine.
  • Doors, chests, teletransporters and destinations are now much more flexible and customizable.
  • Except tiles, all map entities can now have a name. The name is now optional.
  • Change the format of some data files, including maps and tilesets.
  • No more ini data files (removed the dependency to SimpleIni).
  • Add conversion scripts to upgrade existing data files (but not scripts).
  • Fix infinite explosions of bomb flowers.

This version also include changes from Solarus 0.9.3, though 0.9.3 is not released yet:

  • The game screen size can now be set at compilation time.
  • Change the savegames directory on Mac OS X.
  • Improve the support of Mac OS X, Pandora, Caanoo and other platforms.
  • Fix the compilation with Visual C++.
  • Fix blocks making sometimes only a half move (#33).
  • Fix pixel-precise collisions not always correct (#53).
  • Fix the end of target movement on slow machines (#34).
  • Fix the hero being freezed when using the hookshot on bomb flowers (#119).

About release numbers

As of now, Solarus version numbers have the form x.y.z where x is the major version, y is the minor version and z is the patch version.

  • Patch versions will only provide bug fixes. Therefore, you can safely upgrade. Quest files that you create with the 1.0 format will be compatible with any 1.0.x version of the engine and the editor.
  • Minor and major versions provide new features and may change the format of data files and the Lua API. Conversion tools will be provided to upgrade your quest data files, but take care of the Lua API changes.

Infomration about new versions will be published here with the detailed changes.

Our games

A work is in progress to upgrade our games ZSDX and ZSXD for Solarus 1.0. It is almost finished for ZSDX (it essentially needs testing and bug fixing). This gives you an example of full quest that use the new Lua API, notably with a scripted title screen, a scripted pause menu. The work is done in branch v1.6 of the ZSDX repository.

In the meantime, we are also preparing a Solarus 0.9.3 version (with the old Lua API, yes!), in order to release as soon as possible new versions of ZSDX and ZSXD that include the bug fixes mentioned above and the German translation of ZSDX.

Separating projects

I have just reorganized the git repository of Solarus. Our quests are now in separated git repositories. The main repository (https://github.com/christopho/solarus) no longer contains quests. It contains the engine, the map editor and some other tools.

Here are the new repositories for our quests:

What? Zelda Mercuris’ Chest? What is that?

It is our new project in development! More details will come soon… But here is a first screenshot:


Download pages updated

Hello everyone,

It is now easier to download the latest releases of our games. So far, there was no real download page here: you had to visit our French Zelda website, even if its download pages were available in English. Now, there have proper download pages here on solarus-games.org. I have just added a new “Downloads” menu above, with new download pages for our games Zelda Mystery of Solarus DX and Zelda Mystery of Solarus XD. All systems are listed with the necessary details.

Solarus Lua API reference

The new Lua scripting API discussed in my previous post is making good progress!

I have written the full documentation. The goal of the Solarus engine is to be a generic Zelda-like 2D game engine, so it needs a powerful scripting API, as well as good documentation to make it usable.
This brand new Lua API allows to customize everything, including the menus and the head-up display.  The documentation fully specifies every data type accessible from Lua with their methods and callbacks: map entities, menus, sprites, movements, savegame, etc.

If you are making a game with the Solarus engine, this Lua API reference will become your favorite website 🙂
The API is still experimental, but most of the work is done. As it is getting more and more stable every day, I now keep the online documentation always up-to-date with the git branch solarus-1.0.0 of the engine.

Work in progress

For you, gamers: ZSDX translations and ports

A new version of Zelda Mystery of Solarus DX (1.5.2) should be available soon. I hope it will include the following new stuff:

  • German translation: Stella has just finished to translate the game and she is now testing it in German.
  • Android version (thanks to Sam101). We plan to merge the Android specific code into the main repository this weekend!
  • Pandora version (thanks to the OpenPandora community).
  • Fix a few bugs, the most important one being: blocks made only half moves sometimes.

Android and Pandora versions will now become officially supported and maintained. In particular, I have updated the engine to allow a ratio wider than 4:3. Yes, it means that Android and Pandora players can see more content in their game screen!

For you, game developers: engine mid-term plans

Our games ZSDX and ZSXD are released with the 0.9 branch of the Solarus engine. In that branch (branch master on our git repository), some elements of a game are customizable (the maps, the tilesets, the enemies, the treasures…) and other are hardcoded (the title screen, the savegame screen, the pause screens, the HUD…).

Since January, I’ve been working on improving the engine (branch 1.0) by making everything customizable and scriptable. In short, the ultimate goal is to turn the Zelda Mystery of Solarus DX engine into a general Zelda-like engine. When it’s done, you will be able to make your own games with the Solarus engine.

To reach this goal, I decided to rewrite completely the Lua API. The new API is much more powerful, cleaner and easier to use. It provides real Lua datatypes and functions for everything that exists in the engine: maps, non-playing characters, enemies, sprites, movements, 2D surfaces, savegames, menus, timers, etc. The title screen, the other menus, the pause screen and the HUD can be scripted now. This is necessary for you to make your own games!

Let’s take an example of why it is easier to use. Let’s say that in the script of a map, you want to give animation “walking” to the non-playing character called “tom”.

With Solarus 0.9:

sol.main.sprite_set_animation(sol.map.npc_get_sprite("tom"), "walking")

With Solarus 1.0:


(In Lua, “:” is the notation for object-oriented calls.)
Note that when you are in the script of a map, all map entities that have a name are accessible in the Lua environment by their name. Here, the variable “tom” automagically refers to the map entity named “tom”, which is of type non-playing character and has a method get_sprite(). Actually, this magic is just an equivalent shortcut to:

self is the current map since we are in a map script.

A more important thing is that all Lua scripts now share the same Lua world. With Solarus 0.9, all enemies for examples had their own Lua world. There was no easy way to access an enemy from the script of another one (this is often necessary for bosses involving several enemies). Now, from an enemy script, you can make (self is the current enemy):

local other = self:get_map():get_entity("another_enemy")

where f() may be a built-in method in the type enemy (such as get_life()) or, on the contrary, a custom method specific to that particular enemy.

Everything is more flexible in the new Solarus API. You can also access enemies (as well as most datatypes) like tables to associate custom data to them but I will talk about this another day 🙂


The Spanish release (beta)!

A new version of Zelda Mystery of Solarus DX (version 1.5.1) is now available. It includes a beta version of the Spanish translation!


  • Spanish translation (beta)
  • Fix some issues in the English translation
  • Skyward Tower: the hero could get stuck in a wall
  • Skyward Tower: other minor improvements
  • Fix blue flames shot by some bosses and that were stuck sometimes
  • Ancient Castle: minor improvements
  • Inferno Maze: a puzzle could be skipped

Download now on Zelda Solarus

I would like to thank Clow_eriol, Emujioda, LuisCa, Musty, Xadou, Guopich and falvarez for their contribution to the Spanish translation. It still needs more testing and verifications. Please contact me if you want to help!

Windows compilation finally documented

A few days ago, I received an e-mail asking how I proceed to compile Solarus under Windows. That’s because the compilation instructions were very incomplete. As I made a quite detailed answer, this problem is fixed: the compilation instructions now explain how I compile Solarus with Windows.

In short, I compile Solarus with Code::Blocks and MinGW32, i.e. in a Unix environment. I don’t use CMake, but it should also work with it. It would also be interesting to try Visual Studio.

Anyway, the hard part is to install all the required libraries. This is not specific to Solarus and I can’t really help you much with that… Any software with dependencies on other libraries is a nightmare to compile with Windows. You must download the headers and the libraries on each website, hoping that the website provides the library in a binary form. If it does not, you have to compile it yourself (or for Windows 32-bit, use the ones I have already compiled for you :)).

With any Linux distribution, downloading and installing the libraries is totally trivial. One command line or one click, as you wish. But if you are using Windows, you probably have a good reason: you like pain challenge! Therefore, why don’t you consider moving to the next step: compile for Mac OS X? This will clearly be another dimension of challenge.

More seriously, what I mean is that installing a Linux distribution in dual-boot next to your Windows system is much, much easier than getting all dependencies right and compiling in Windows.

(And I don’t even talk about Mac OS X – I keep this topic for a future post.)