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("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.)

The English release!

We are proud to announce a new version of our main creation Zelda Mystery of Solarus DX. This is version 1.5.0, and the quest is now available in English!

Download now on Zelda Solarus

Big thanks to the OpenPandora community who initiated the translation work, and to Jeff, Rypervenche and AleX_XelA who completed it. The translation was a lot of work, with a text file of 6500 lines of dialogs to translate!

We hope that you will enjoy the game. This is the first English-speaking release of the game. Don’t hesitate to tell us if you find a typo or a strange dialog: I will publish updates. Translators did a great work, but nothing is perfect! The best way to report errors in dialogs or make some remarks or suggestions is to file an issue on our github.

Zelda Mystery of Solarus DX 1.5.0 changes:

  • New language available: English
  • Fix two minor issues in dungeon 5
Solarus 0.9.2 changes:
  • Fix two bugs with teletransporters

Full changelogs (including previous versionss) of both projects are in the git repository. As of now, future updates will be mentioned on this page.

The website also has a downloads page now. I have also improved the top navigation bar as well as the right menus. The right menus now provide direct access to our games and to useful links for developers. It’s way better than before, but I’m not a an expert and your feedback is welcome 😉

New website name


The English translation of Zelda Mystery of Solarus DX is almost done! I am currently testing the game in English to make a last check.

The game will probably be released in English in a few days. Some changes will appear on this website. First of all, the url has changed: it is now I did not like the old one 🙂 And we talk about our games, not only about the engine. After the release, I will add a download page and the navigation menus will also be improved.

Stay tuned!

English translation in progress

Happy new year everyone 🙂

As you may know, Zelda: Mystery of Solarus DX is now finished. The French version was released on December 16th, 2011.

The English and German translation of  the game are in progress. People from the OpenPandora community are working on the English translation (thanks!) and we are helping them. I have modified the syntax of the dialog file so that writing and translating dialogs is much less painful and error-prone.

And the dialog file is now in Lua. All data files will eventually be converted to Lua, which is great for describing data. The Lua parser is lightweight and fast, including for big data files (it was initially designed for them). Lua is extensible and it is now trivial to write, for example, Lua scripts that check the validity of Lua data files. I am currently working on a tool that checks the dialog files and their translations. One day, we will be able to check the validity of an entire Solarus game and detect errors such as missing data files, invalid sprites specifications, untranslated dialogs, etc, and this tool will be integrated to the quest editor.

Zelda Mystery of Solarus DX is almost finished

The completed version of Zelda Mystery of Solarus DX will be available soon. Here is recent trailer showing a lot of game sequences!


The French version will be released on December 16th. There is no release date (yet) for the English version, but I hope it will be ready in few weeks. Any help is welcome for other translations. Feel free to contact me. If you already contacted me for a translation between the demo release and now, it’s possible that I did not answer you… Sorry about that. That’s because I didn’t know what I wanted (translate the old demo? make a new demo? wait for the completed game?). Finally, I chose the third option. So please accept my apologies and try again, the game is ready for translations now 🙂

Because releasing ZSDX was the priority in 2011, I’ve been working a lot on this quest in the last months, and there was no important changes in the engine or the quest editor since the scripted enemies. New big changes in the engine and the quest editor were not necessary for our team to finish games like ZSDX and ZSXD. But after the release, I intend to improve the format of quest files and stabilize the quest editor so that you can also make your own quests with Solarus. I have plans about that, and I will update this development blog to keep you informed.

Download ZSXD now!

Our parodic creation Zelda Mystery of Solarus XD is now available in English, as announced in my previous post. You can find it on the download page of ZSXD on Zelda Solarus (the website is in French but the download page exists in English). You can also download it directly with one of the links below:

Have fun! But don’t forget: this game is essentially a big April 1st joke 😉

Coming soon: Zelda Mystery of Solarus XD

Yes, the title is correct: Zelda Mystery of Solarus XD, not DX! DX is in progress too, but this is not what I’m talking about today!

Zelda Mystery of Solarus XD (or ZSXD for short) is one of our creations. It’s a small parodic game that we released on April 1st, 2011. I did not talk about it earlier on this blog because the game was only available in French. However, people from the Caanoo French-speaking community are currently working on a Caanoo port of this parodic game ZSXD. And they decided to translate it in English. We helped them for the translation, and it’s almost done! It still needs some final verifications.

Once it’s done, we will be able to make a release of ZSXD in English! Though it’s a parodic mini-game (initially a big April 1st joke), it’s a real, full game with two huge dungeons and 5-10 hours of playing.

Here are some screenshots:

Stay tuned 😉

Enemy scripts… finished!

Last week, I was thinking about the enemies system because one of the things I have to implement these days is the boss of the second dungeon. Then, I don’t know what happened. My fingers must have slipped. I did not really realize it, but I wrote everything to manage enemies with scripts. And here we are: enemies are officially scripted now!

So far, each type of enemy was implemented as a C++ class (hardcoded into the engine). Creating a new type of enemy required to write a new C++ class that inherit the Enemy class. Even if  the API was easy to use, implementing new enemy types was a quite heavy task. And the editor’s source code also had to be updated to support the new type of enemy… So this is was annoying. The other reason to make scripted enemies is that it will allow you to make your own enemies for your own quest. What you want when creating new types of enemy is to specify  them as data files (a Lua script and some sprites), not to change the C++ engine.

So it’s done. I took 3 months to make scripted items, and 7 days to make scripted enemies. I’m surprised it is finished so soon. I was afraid it would be very hard, but thanks to the scripted items system, things were much easier that I thought. Most of the work was already done: for example, providing to Lua scripts some functions to manage sprites and movements. I started by writing the Lua script of each existing type of enemy. Then I deduced a list of 80 functions I needed to provide to Lua enemy scripts, and I implemented all of them. And that’s it! It just works!

And why it this so nice? It changes a lot. You want to write your own enemy (say, a spider)? Just create a file spider.lua that describes its properties and behavior:


function event_appear()
  -- The enemy appears: set its properties
  sol.enemy.set_size(16, 16)
  movement = sol.main.path_finding_movement_create(32)

The sol.module.something() functions are functions of the engine that a Lua script can call. sol.enemy represents the current enemy and provides some functions to set their properties and their dynamic behavior. The engine can also call some functions of your scripts (the ones prefixed by event_): the function event_appear() is called by the engine when a new instance of the enemy arrives on the map. Here, we set this spider’s initial properties: its life, its sprite (the corresponding sprite file must exist, and contain a small set of predetermined animations like “stopped”, “walking”, “hurt”, etc.), its size and its movement. sol.main.path_finding_movement_create() creates a movement that calculates a path to the hero. That’s it, you have a new type of enemy. You can now add spiders to maps with the quest editor.

There are lots of functions like this. event_appear() is called by the engine to notify your enemy that it was just created on the map. Other useful callback functions are event_obstacle_reached(), event_movement_finished(), event_sprite_animation_finished(), event_dead(), etc… After the release of ZSDX, I want to make some tutorials to show the elements of making a Solarus quest: maps, enemies, items, sprites, NPCs…. In the meantime, you can have a look at the (updated) documentation.