Solarus 1.6 released

Merry Christmas everyone!

Today, we are proud to announce the release of Solarus 1.6! This release is even bigger than the previous one, seriously. This has been possible thanks to many talented and devoted people who have joined the team.

Here are the big features in Solarus 1.6:

  • OpenGL backend and support for GLSL shaders (by Stdgregwar and Vlag)
  • Support for external script editor of your choice. Zerobrane integration: autocompletion, debug breakpoints, stack inspection (by Stdgregwar)
  • Multiple improvements in map editor, including the much-requested contour generator, tile replacement and support for multiple tilesets
  • Multiple improvements in tileset editor, including multiple selection, custom frame count for animated tile patterns
  • Multiple improvements in sprite editor
  • Data import from other quests
  • Beautiful new free tilesets (Zoria by DragonDePlatino, Ocean’s Heart by Max Mraz)
  • Free pixel fonts (by Wekhter)
  • Custom hero states in Lua to allow advanced customization of the hero
  • Tons of new features in the Lua API

Last but not least: Solarus 1.6 is fully compatible with Solarus 1.5 quests. You have no work to do to upgrade your project to Solarus 1.6.

Let’s discover everything in action in this trailer!


You want to know the whole list of new features and bugfixes? I assume you have a lot of time. Ready?

Changes in Solarus 1.6

Engine changes

  • Solarus 1.5 quests are still supported by Solarus 1.6.
  • Add support of OpenGL shaders (#394) by stdgregwar, Vlag and Christopho.
  • Improve the performance of loading images.
  • Maps can now use multiple tilesets (#1174).
  • Animated tile patterns can now have any frame number and delay (#683).
  • Fix crash when using coroutines (#1269) by stdgregwar.
  • Treasure dialogs are now optional (#1076).
  • Allow entities to have a non-multiple of 8 size (#1294).
  • Don’t center the hero on non-blocking streams (#1063).
  • Allow pickables to follow streams (#1139).
  • Blocks can now be moved multiple times (#967).
  • Fix enemies unable to move on non-blocking streams.
  • Fix streams stopping when using the sword several times.
  • Fix non-blocking stream turns after going south (#648).
  • Fix stairs activating when the hero is not exactly aligned.
  • Fix sol.timer.start() not detecting invalid context parameter.
  • Fix timer:set_suspended_with_map() for entity timers (#1158, #1236).
  • Fix random movement giving the same path for all entities on Mac (#1083).
  • Fix circle_movement:get_direction4() not working (#1163).
  • Fix precision issue with circle_movement angular speed (#1116).
  • Fix path_movement:get_path() and pixel_movement:get_trajectory() (#1136).
  • Fix straight_movement:set_max_distance() incorrect on tables (#1075).
  • Fix straight_movement:set_speed() not handling errors correctly.
  • Fix possible crash when reloading very old savegame files (#1064).
  • Fix crash when loading a map with tiles whose pattern does not exist (#1299).
  • Fix crash when a sprite PNG file is missing.
  • Fix crash when calling entity:test_obstacles() on an unloaded map.
  • Fix crash when opening a chest with a missing treasure dialog (#1089).
  • Fix crash when scrolling to the same map (#924) by stdgregwar.
  • Fix crash when scrolling to an invalid layer (#1015).
  • Fix entity:get_ground_below() from map:on_started() after scrolling (#925).
  • Fix crash when calling map:get_hero() after the map is finished (#1228).
  • Fix hero:on_movement_changed() not called (#1095).
  • Fix hero shield sprite directions in animation sword (#1185).
  • Fix facing entity randomly chosen when the hero faces multiple ones (#1042).
  • Fix disabling teletransporters during their on_activated() event (#1266).
  • Fix blocks not falling into water or lava (#1214).
  • Fix enemy:on_restarted() called twice (#1179).
  • Fix removed entity still drawn during scrolling transition (#1193).
  • Fix item:on_ability_used() not called for sword knowledge ability (#1171).
  • Fix sprite parameters order in custom entity collision callback (#1162).
  • Fix sol.file.exists() returning false for directories.
  • Fix scripts failing to load if a directory exists with the same name (#1100).
  • Fix mouse API not working when the mouse is outside the window (#1018).
  • Fix joypad deadzone issue (#672) by strycore.
  • Fix compilation error with Clang 3.9 in SNES_SPC.
  • Fix possible compilation error when HAVE_UNISTD_H has no value (#1084).
  • Fix loading quests in non UTF-8 filesystems.
  • Add support of .otf fonts.
  • Improve Lua error messages.
  • CLI can accept an archive’s path as argument.
  • Replaced SDL renderer by a custom GL backend, by stdgregwar.

Lua API changes

This release adds new features and deprecates a few ones but does not introduce any incompatibility.

New features

  • Add a shader API.
  • Add a custom hero state API.
  • Add an event to draw to the scaled screen (#1216).
  • Add a function sol.main.get_quest_version() (#1058) by Nate-Devv.
  • Add a function sol.main.get_game() (#1212).
  • Add functions to get and set the resource elements (#959, #630).
  • Add methods game:simulate_key_pressed/released() by Vlag (#1034).
  • Add abilities push, grab and pull to game:get/set_ability() (#788).
  • Add a method item:is_being_used() by alexander-b (#879).
  • Add methods entity:set_size() to all entities (#121, #528).
  • Add methods entity:set_origin() to all entities.
  • Add methods entity:create/remove_sprite() to all entities (#852).
  • Add methods entity:is/set_drawn_in_y_order() to all entities (#1098, #1173).
  • Add methods entity:get/set_weight() to all entities to lift them (#1227).
  • Add methods entity:get_property() and entity:set_property() (#1094).
  • Add methods entity:get_properties() and entity:set_properties() (#1144).
  • Add methods entity:get_layer() and entity:set_layer().
  • Add a method entity:get_controlling_stream() (#1204).
  • Add optional sprite parameters to entity:overlaps() (#1159).
  • Add methods entity:get/set_draw_override() (#1260).
  • Add events entity:on_pre/post_draw(camera) to all entities (#1260).
  • Add parameter camera to event entity:on_pre/post_draw() (#1260).
  • Add events entity:on_enabled/disabled() to all entities (#898).
  • Add event entity:on_suspended() to all entities (#1261).
  • Add a method hero:get_carried_object().
  • Add a method hero:start_grabbing() (#1303).
  • Add a method hero:start_attack_loading() (#1291).
  • Add an event hero:on_state_changing() (#1247).
  • Add an event camera:on_state_changing().
  • Add a method camera:get_surface() (#1265).
  • Add an event camera:on_state_changing().
  • Add methods dynamic_tile:get/set_tileset() (#1175).
  • Add methods door:open(), door:close() and door:set_open() (#1007).
  • Add methods stairs:get_direction() and stairs:is_inner() (#1037).
  • destructible:on_lifting() now gives a carried object parameter.
  • Add method carried_object:get_carrier().
  • Add methods carried_object:get/set_damage_on_enemies().
  • Add methods carried_object:get/set_destruction_sound().
  • Add events carried_object:on_lifted/thrown/breaking() (#1233).
  • Add property max_moves in map:create_block() replacing maximum_moves (#967).
  • Add methods block:get/set_max_moves() replacing block:get/set_maximum_moves().
  • Add optional callback parameter to enemy:set_attack_consequence() (#1062).
  • Add method enemy:is_immobilized() (#1092).
  • Add methods enemy:get/set_attacking_collision_mode() (#1066).
  • Add methods enemy:get/set_dying_sprite_id() (#955).
  • Add methods custom_entity:is/set_tiled() (#1105).
  • Add methods custom_entity:get/set_follow_streams() (#1221).
  • Add methods drawable:get/set_rotation() and get/set_scaling() by stdgregwar.
  • Add methods get/set_opacity() to sprite and text_surface (#702) by stdgregwar.
  • Add methods sprite:is_animation_started() and sprite:stop_animation() (#1264).
  • Add a method sprite:get_frame_src_xy() (#1093).
  • Add a method sprite:get_ignore_suspend().
  • sprite:get_num_frames() can now optionally take an animation and direction.
  • sprite:get_frame_delay() can now optionally take an animation.
  • sprite:get_size() can now optionally take an animation and direction.
  • sprite:get_origin() can now optionally take an animation and direction.
  • Add a method surface:get_pixels() (#452).
  • Add a method surface:set_pixels() (#466) by stdgregwar.
  • Add methods surface:gl_bind_as_target/texture() by stdgregwar.
  • Add method movement:is_suspended().
  • Add methods movement:get/set_ignore_suspend() (#858).
  • Add method get_angle() to more movement types (#1122) by stdgregwar.
  • Add method circle_movement:get_center() (#1091).
  • Add methods circle_movement:get/set_angle_from_center() in radians (#1116).
  • Add methods circle_movement:get/set_angular_speed() in radians (#1116).
  • Add methods (#1107).
  • Repeated timers can now change their next delay by returning a number (#983).
  • Automatically set the language when there is only one in the quest (#1006).
  • Add functions sol.file.is_dir() and sol.file.list_dir() (#971).
  • Add finger functions to sol.input and finger events by Vlag.
  • Add methods get/set_color_modulation() by stdgregwar.
  • Add function sol.text_surface.get_predicted_size() by stdgregwar.

Deprecated functions

  • Built-in video mode functions: use shaders instead.
  • Property maximum_moves of map:create_block(): use max_moves instead.
  • block:get/set_maximum_moves(): use get/set_max_moves() instead.
  • Angles in degrees in circle movement: use functions with radians instead.

Data files format changes

  • Maps: add support of custom properties for entities (#1094).
  • Maps: add property enabled_at_start to all entities (#1101).
  • Maps: add property tileset to tiles and dynamic tiles (#1174).
  • Maps: add property max_moves to blocks to allow multiple limited moves (#967).
  • Maps: property maximum_moves of blocks is now deprecated and optional (#967).
  • Maps: add properties origin_x, origin_y to custom entities.
  • Maps: add property tiled to custom entities (#1105).
  • Tilesets: add support of border sets (autotiles) (#1069).
  • Tilesets: add support of custom frame number and delay (#683).
  • Make the tileset entities image optional (#884).

Changes in Solarus Quest Editor 1.6.0

Solarus Quest Editor Logo

  • Allow to import files from other quests (#4).
  • Quest tree: show all .png and .dat files (#260).
  • Quest tree: show all language files, map files and tileset files.
  • Quest tree: allow to set the author and license information of files.
  • Quest tree: automatically select the currently open file (#336).
  • Quest tree: allow to update sprites when renaming a .png file (#420).
  • Quest tree: allow to open folders with the system explorer (#316).
  • Quest tree: allow to select multiple files.
  • Quest tree: allow to delete multiple files and directories (#354).
  • Allow to view PNG files (#335).
  • Map/tileset editor: allow to generate borders automatically (autotiles).
  • Map editor: add support of custom properties for entities by Maxs (#327).
  • Map editor: allow to use multiple tilesets in the same map.
  • Map editor: allow to change the pattern of existing tiles (#280).
  • Map editor: allow to change the pattern of all similar tiles at once (#329).
  • Map editor: allow to change the origin of custom entities.
  • Map editor: allow to initially enable or disable any entity.
  • Map editor: allow to export the view as a PNG file (#81).
  • Map editor: allow to lock layers (#94).
  • Map editor: show the layer under the cursor in the status bar (#91).
  • Map editor: add shortcuts to show/hide negative layers too.
  • Map editor: keep the selection after adding entities with ctrl or shift.
  • Map editor: add a shortcut to open the tileset by Akadream (#241).
  • Map editor: don’t reload the tileset if it is already open elsewhere (#350).
  • Map editor: automatically reload the tileset when it has changed (#362, #375).
  • Tileset editor: allow to change the frame number and delay of patterns.
  • Tileset editor: allow to duplicate tile patterns (#188).
  • Tileset editor: allow to move several patterns at once (#171).
  • Sprite editor: allow to reorder directions by Maxs (#144).
  • Sprite editor: allow to change the frame number graphically by Maxs (#147).
  • Sprite editor: the default origin is now 8,13 as usual in Solarus (#307).
  • Sprite editor: fix precision issues when creating or moving directions.
  • Sprite editor: fix scrollbars reset when adding directions by Maxs (#277).
  • Dialog editor: show the line and column number.
  • Script editor: allow a replace option to the find dialog by Akadream (#3).
  • Allow to select map/tileset/sprite/etc. ids to copy-paste them (#170).
  • Lua console: provide variables game, map, entities and function tp (#268).
  • Clear the console when a quest is started (#230).
  • Fix resource declaration not updated when renaming a directory (#337).
  • Fix crash when opening quest in non-UTF8 filesystems (#373).
  • Fix error message when opening a read-only quest (#264).
  • Fix memory not released when closing an editor (#306).
  • Initial quest: add some shaders (#320).
  • Text editor: allow to set an external editor to be used instead of thebuilt-in one (#398)

Changes in Solarus Launcher

  • Show the path and the compatibility format of each quest (#1129).
  • Lua console: provide variables game, map, entities and tp function.
  • Clear the console when a quest is started.
  • FileDialog now expects a file, either quest.dat or an archive (.solarus, .zip)

Changes in Zelda Mystery of Solarus DX 1.12.0

  • Upgrade to Solarus 1.6.
  • Add the Solarus team logo.
  • Change the sound of the Solarus logo.
  • Fix typos in French dialogs (thanks Renkineko).

Changes in Zelda Mystery of Solarus XD 1.12.0

  • Upgrade to Solarus 1.6.
  • Add the Solarus team logo.
  • Change the sound of the Solarus logo.
  • Slightly improve English dialogs

Changes in Zelda Return of the Hylian SE 1.2.0

  • Upgrade to Solarus 1.6.
  • Add Solarus Team logo.
  • Change the sound of the Solarus logo.
  • Dungeon 6: make medusa puzzle easier (#97).
  • Fix using joypad hat in menus.
  • Fix accents displaying in Spanish (#100).
  • Fix fire traversing torches after they get lit (#104).
  • Fix minor torch alignment errors (#103).
  • Fix minor tile issues.

Changes in Zelda XD2 Mercuris Chess 1.1.0

  • Upgrade to Solarus 1.6.
  • Add Spanish translation by Minefran12 (#22).
  • Fix English language not set by default (#129).

We hope you’ll enjoy this release. Have fun playing our games or creating ones with Solarus! Merry Christmas!

Bugfix release 1.5.2 and improved sample quest!

A new bugfix release of Solarus, Solarus Quest Editor and of the Sample Quest was just published!

A few annoying bugs were fixed.

Additionally, we added a lot of content to the official Sample Quest, including enemies, NPCs, musics and sounds (thanks Diarandor!). And there is also now an experimental clickable HUD (thanks Vlag!). The sample quest can now be playable without keyboard.

Finally, Solarus Quest Editor and the Solarus launcher GUI are now available in Spanish (thanks Diarandor)!

Changes in Solarus 1.5.1

  • Launcher: add Spanish translation (thanks Diarandor!).
  • Launcher: start the selected quest with Return or double-click (#949).
  • Launcher: fix registering quest at quest install time (#948).
  • Fix crash when a carried bomb explodes (#953).
  • Fix crash when a scrolling teletransporter is incorrectly placed (#977).
  • Fix crash when an entity has a wrong savegame variable type (#1008).
  • Fix memory leak when creating lots of surfaces (#962).
  • Fix cleanup of the quest files at exit.
  • Fix error in sol.main.load_settings() when the file does not exist.
  • Fix ground ignored after hero:unfreeze() or back to solid ground (#827).
  • Fix entity:get_name() returning nil after the entity is removed (#954).
  • Improve error messages of surface creations and conversions.
  • Chests: set an initial value “entities/chest” to the sprite field.

Changes in Solarus Quest Editor 1.5.1

  • Add Spanish translation (thanks Diarandor!).
  • Update maps when renaming musics, enemies and custom entities (#222).
  • Fix resizing the console when a sprite editor is open (#215).
  • Fix quest reopened even if it was closed in previous session (#220).
  • Fix renaming .it and .spc musics.
  • Fix typos in the dialogs and strings editors (#231).
  • Fix typo in French translation (#240).
  • Map editor: fix update teletransporters checkbox in tile edit dialog (#221).
  • Map editor: fix setting destructible objects non liftable (#247).
  • Map editor: save all only if necessary when renaming a destination (#219).
  • Map editor: fix tileset view scrollbar position lost sometimes (#229).
  • Map editor: fix escape accepting resize/move instead of cancelling it (#217).
  • Tileset editor: fix selected pattern view after refreshing the image (#218).
  • Text editor: fix freeze when indenting selected lines sometimes.
  • Text editor: don’t indent empty lines.
  • Initial quest: put the solarus logo script in scripts/menus/ (#216).
  • Initial quest: fix wrong hero sprite after game-over.

Changes in Solarus Sample Quest 1.5.1

The official sample quest is growing bigger, it now deserves its own git repository.

  • Add enemies, NPCs, musics and sounds (thanks Diarandor!).
  • Add a clickable HUD (thanks Vlag!).
  • Put the solarus logo script in scripts/menus/.
  • Fix wrong hero sprite after game-over.


Update: Solarus Quest Editor was updated to a new version 1.5.2 to fix an annoying issue of nested folders created when you attempt to create a new quest inside the initial quest itself.

Zelda: A Link to the Past resource pack updated

The Solarus resource pack of Legend of Zelda: A Link to the Past is regularly updated even if I don’t always annouce it. Lots of elements are still missing (most importantly, enemies!) but every update improves it step by step!

Today I just added a lot of non-playing character sprites. There are now more than 50 NPC sprites available! I believe we now have most character sprites from Legend of Zelda: A Link to the Past.

I use this resource pack a lot in my Solarus video tutorials. If you did not know yet, I made a brand new tutorial playlist because the old one was a bit outdated. The new tutorial playlist is updated every Saturday with two videos!

Follow me on Twitter (@ChristophoZS) to know about new tutorials and get more news about Solarus. Feel free to ask on the Solarus forums if you have any question when updating your quest or following a tutorial!

Solarus 1.5 released, now with a quest launcher!

On July 27th of 2006, I wrote the first commit of the Solarus project.

10 years later, the project has grown a lot! Today, we are proud to announce that Solarus and Solarus Quest Editor were just released in version 1.5.

The development of 1.5 took more than one year and this is the best release ever. There is now a nice quest launcher window:


The quest launcher allows you to add or remove quests and to play them. A console shows the output of the quest. You can also edit audio and video settings from this window. Of course, the old way of running quests still exists if you don’t want this window. But this is more user friendly and we already have ideas of new features for the launcher for future releases 🙂

Aside from the quest launcher, we added a lot of new features to the quest editor and to the Lua API.

  • Maps can have more than 3 layers.
  • Smart resizing! Full rooms can now be resized in one operation.
  • Directional resizing! Entities can now be resized to the left and top, not only to the right and bottom.
  • Musics and sounds can now be played from the editor!
  • Support for custom loops in OGG musics!
  • A console in the quest editor to execute Lua code on the fly!
  • An initial quest with many sprites, musics and sounds thanks to Diarandor and Eduardo!
  • Improved performance when editing or running maps with lots of entities.
  • The camera is now a map entity, you can customize its size and movement easily.

And a lot more, see the full changelog below.

Your quest scripts probably need some adjustements to upgrade to 1.5. All of this is explained in the migration guide.

We are very proud of this new release. Actually, some quest makers already switched to 1.5 a while ago because they could not wait to test the new features! So the release is for the most part validated. If you find bugs or if you have suggestions of features, don’t hesitate to report them on the GitHub page of our projects if they are not already present. If this release is the best release ever, this is largely thanks to your feedback guys.

I am now working on a brand new video tutorial series to help you create your quest. Because the old ones are starting to be really obsolete! To make sure you don’t miss their publication, you should subscribe to my YouTube channel ChristophoZS and my Twitter @ChristophoZS.

As always, our games ZSDX, ZSXD and Zelda ROTH SE were also upgraded to give you up-to-date quest examples.

We are doing all of this on our free time and this is all free and open-source software. If you like our work, please consider making a donation. It will contribute for the server fees and to the motivation of the team!

Here is the full changelog. Sit well!

Changes in Solarus 1.5

New features:

  • Add a launcher GUI to ease chosing a quest and setting options (#693).
  • Rename the solarus_run executable to solarus-run.
  • Add version number and symbolic links when building the library.
  • Add a -lua-console option to run Lua code from the standard input.
  • Remove the -win-console option, the preferred way is now to use a GUI.
  • Add a -turbo option to run at full speed.
  • Add a -lag option to simulate slower systems for debugging.
  • Print when the main loop starts and stops.
  • Print the Lua version at startup (#692).
  • Outputs are now prefixed by [Solarus] and the current simulated time.
  • Musics: Add support of custom OGG looping (#643).
  • Maps: allow more than 3 layers (#445).
  • Improve the performance of loading big maps (#854).
  • Improve the performance of custom entity collisions.
  • Improve the performance of collisions by using a quadtree.
  • Entities far from the camera are no longer suspended.
  • The hero no longer automatically jumps when arriving on water (#530).
  • Destinations can now set to update or not the starting location (#819).
  • Teletransporters on the side of the map now work on all layers (#850).
  • Streams can now have a speed of zero (#496).

Lua API changes that introduce incompatibilities (see the migration guide for instructions):

  • Fix missing collision detections and entity notifications.
  • chest:on_empty() is replaced by chest:on_opened(treasure) (#483).
  • Enemy ranks no longer exist, set_hurt_style() needs to be called (#449).
  • Items with amount now have a default max amount of 1000 (#688).
  • New ability “jump_over_water” in game:get/set_ability(), off by default (#530).
  • Fix hero state name “freezed”, renamed it to “frozen” (#813).
  • Fix map:get_entities() not returning the hero (#670).
  • Fix map:create_custom_entity() not erroring when width/height are missing.
  • map:get_camera_position() is now deprecated, use camera:get_bounding_box().
  • map:move_camera() is now deprecated, use a camera movement instead.
  • map:draw_sprite() is now deprecated, use map:draw_visual() instead (#661).
  • Fix entity:set_enabled(true) delayed while it blocks the hero (#817).
  • Fix brandished treasure sprite and shop treasure sprite not animated (#790).
  • circle_movement:get/set_initial_angle() now use degrees (#721).
  • Add ability to hide mouse cursor (#891).

Lua API changes that do not introduce incompatibilities:

  • Add a function sol.main.get_solarus_version() (#767).
  • Add a function sol.main.get_quest_format().
  • Add a function sol.main.get_type() (#744).
  • Add a method game:set_suspended() (#845).
  • Add methods map:get_min_layer() and map:get_max_layer() (#445).
  • Add a method map:get_entities_by_type() (#796).
  • Add a method map:get_entities_in_rectangle() (#142).
  • Add a method map:draw_visual() to draw any drawable object (#661).
  • Add a method map:get_camera() (the camera is now a map entity).
  • Add methods map:set_world() and map:set_floor() (#656).
  • map:get_entities() can now be called without parameter to get all entities.
  • map:get_entities*() functions now give entities sorted in Z order (#779).
  • Add an event entity:on_movement_started().
  • Add a method entity:get_max_bounding_box() considering sprite boxes (#754).
  • entity:get_center_position() now also returns the layer.
  • Add a method entity:get_facing_position().
  • Add a method entity:get_facing_entity() (#877).
  • Add a method entity:get_ground_position() (#830).
  • Add a method entity:get_ground_below() (#830).
  • entity:set_optimization_distance() is now only a hint for the engine.
  • entity:test_obstacles() now also works without parameters.
  • entity:overlaps() now has an optional collision mode parameter (#748).
  • Add entity:get_sprite() to all entities, with an optional name value (#669).
  • Add a method entity:get_sprites() (#851).
  • Add methods entity:bring_sprite_to_front/back() (#809).
  • enemy/custom_entity:create_sprite() now take an optional name value.
  • hero:save_solid_ground() can now take a function parameter (#667).
  • Add a method hero:start_attack() (#821).
  • Add methods npc:is/set_traversable() (#712).
  • Add methods chest:get/set_treasure() (#664).
  • Add an event chest:on_opened() with treasure info parameters (#483).
  • Add methods dynamic_tile:get_pattern_id() and get_modified_ground() (#755).
  • Add methods destination:get/set_starting_location_mode() (#819).
  • Add a method switch:is_walkable() (#729).
  • Add a method switch:is_locked().
  • Add a method sprite:get_num_frames() (#818).
  • Add methods sprite:get_size() and sprite:get_origin() (#823).
  • sprite:set_animation() now takes an optional callback parameter (#861).
  • Add a method surface:get_opacity() (#722).
  • Add methods surface/text_surface/sprite:get/set_blending_mode (#930).

Bug fixes:

  • Fix crash when main.lua has a syntax error.
  • Fix crash with missing directions in sprites controlled by the engine (#864).
  • Fix sprite:on_animation_finished() and others not working sometimes (#799).
  • Fix error in sprite:set_animation() when the direction is missing (#937).
  • Fix straight movement precision.
  • Fix freeze when loading a map with tiles outside the limits (#875).
  • Fix crash when trying to use a non-saved item (#889).
  • Fix sword tapping sound still played when the game is suspended (#797).
  • Fix hero:set_invincible() not working without duration (#805).
  • Fix lifted item walking animation only accepting 3 frames (#645).
  • Fix enemy:set_attack_consequence_sprite() with thrown items (#834).
  • Fix custom_entity:set_can_traverse() for doors (#716).
  • Fix custom_entity:set_can_traverse_ground() for some grounds (#794).
  • Fix custom entity collisions missed for entities that do not move (#671, #883).
  • Fix custom_entity:get_modified_ground() returning nothing.
  • Fix custom_entity:on_ground_below_changed() not called (#738).
  • Fix missing notifications in custom_entity:set_origin() (#880).
  • Fix creating an entity with the same name as another one just removed (#795).
  • Fix parallax scrolling for dynamic tiles (#816).
  • Fix crash when a diagonal tile is not square (#837).
  • Fix crash when the teletransporter after stairs is missing.
  • Fix non-blocking stream turns after going south (#648).
  • Fix text_surface:set_rendering_mode() not working (#833).
  • Fix possible freeze when changing the position of a path finding entity.
  • Fix circle_movement:set_initial_angle() not working (#721).
  • Fix straight movement setting speed to zero when reaching obstacles (#633).
  • Fix support of joypads with multiple axes.
  • Fix sol.input.get_mouse_coordinates() ignoring the zoom factor (#734).

Changes in Solarus Quest Editor 1.5

New features:

  • Add an execution log view of the quest.
  • Add a console to execute Lua instructions when the quest is running.
  • Add a command-line option -run to run a quest instead of opening the GUI.
  • Allow to save all open files at once (#98).
  • Allow to close all open files at once.
  • Allow to close the current quest (#88).
  • Allow to reorder tabs (#107).
  • Allow to switch tabs with keyboard shortcuts (#101).
  • Allow to automatically save files before running the quest (#90).
  • Allow to restore open tabs at startup (#131).
  • Add a recent quests menu (#89).
  • Creating a new quest now provides a lot of initial resources (#201).
  • Creating a new quest now sets the write directoy to a unique id (#207).
  • Resource directories are now automatically created when opening a quest.
  • The shortcut to load a quest is now Ctrl+L.
  • Add a menu item to open quest properties (#206).
  • Allow to update teletransporters when changing the id of a map (#56).
  • Allow to update teletransporters when renaming a destination (#58).
  • Allow to update maps when changing the id of a tileset (#57).
  • Add resource dialog: set the id as initial value for the description (#192).
  • Initialize map/item/enemy/entity scripts with helpful code (#33).
  • Automatically add .lua extension when creating a script file (#46).
  • Allow to play musics and sounds from the quest tree (#8).
  • Allow to play music and sounds from music and sound selectors.
  • Show the sprite of each element in enemy and item selectors (#9).
  • Map editor: allow more than 3 layers.
  • Map editor: implement smart resizing to resize full rooms at once (#54).
  • Map editor: allow to resize from the left and from the top (#111).
  • Map editor: shortcuts for showing/hiding layers are now 0, 1 and 2, etc.
  • Map editor: add shortcuts to show/hide entity types (#82).
  • Map editor: allow to show/hide obstacles (#6).
  • Map editor: add shortcuts to move one layer up or down (+ and -).
  • Map editor: add Escape shortcut to stop adding entities (#92).
  • Map editor: new entity icons by Amine (#119).
  • Map editor: show the real variant of pickables (#109).
  • Tileset editor: propose to refresh the image when it has changed (#86).
  • Tileset editor: don’t force the user to close maps before renaming patterns.
  • Tileset editor: add settings (#178).
  • Sprite editor: check the value of frame to loop on (#203).
  • Sprite editor: auto-detect the grid size (#13).
  • Settings: add sprite editor options.
  • Add select all to map, tileset and text editors (#106).
  • Add unselect all to map, tileset and text editors (#115).

Bug fixes:

  • Fix wrong hero movements sometimes when playing from the editor (#138).
  • Fix tabs not closed when opening another quest (#44).
  • Fix the drop-down list of resource selectors too small on some systems.
  • Map editor: fix crash when creating a block with a missing sprite (#195).
  • Map editor: fix performance regression when pasting a lot of entities (#141).
  • Map editor: fix entities still shown when put on a hidden layer.
  • Map editor: fix precision when starting selection above existing entities.
  • Map editor: stop adding tiles when unselecting them from the tileset view.
  • Map editor: uncheck entity creation button after adding an entity (#105).
  • Map editor: keep tileset scroll position when refreshing/changing it (#129).
  • Map editor: improve performance of selecting multiple entities.
  • Map editor: improve performance of moving multiple entities.
  • Map editor: fix multiple default destinations when copy-pasting (#118).
  • Tileset editor: improve performance of deleting multiple tile pattenrs (#120).
  • Text editor: improve tabulation behavior (#43).
  • Text editor: fix multiline comments matching to the end of the line (#63).
  • Sprite editor: fix “missing image” message staying after solving it (#191).
  • Quest properties: don’t allow slashes or backslashes in the write dir (#59).

Changes in Zelda Mystery of Solarus DX 1.11

Bug fixes:

  • Fix wrong layer when leaving dungeon 10.
  • Dungeon 2: fix sound played twice when activating the statues.
  • Dungeon 9: fix geting back to room entrance when touching spikes.
  • English dialogs: rename Pegasus Shoes to Pegasus Boots.

Changes in Zelda Mystery of Solarus XD 1.11

Bug fixes:

  • Fix typo in French dialogs.

Changes in Zelda Return of the Hylian SE 1.1

New features:

  • Add German translation (thanks Wuzzy2!).
  • Add Spanish translation (thanks Diarandor!).

Bug fixes:

  • Fix initial cursor position in savegame menu after a new game.
  • Fix stuck in a cliff west of the castle (#87).
  • Fix silver arrows incorrectly changing the arrow counter (#88).
  • Fix stats showing 47/46 monsters if a chicken was killed (#89).
  • Dungeon 4: fix crash when picking the crystal as rabbit (#91).

Another update of our games

Here is a small update of our games! Not a huge one, but it fixes the Italian translation of ZSDX and a few other issues.

Changes in Zelda ROTH SE 1.0.8

  • Increase rupee drop rates (#86).
  • Increase chances of getting bombs before dungeon 1.
  • Fix inappropriate English translation.

Changes in ZSDX 1.10.3

  • Fix Italian dialogs exceeding the dialog box (thanks Marco).
  • Fix game-over stopped sometimes using a workaround (#87).

Changes in ZSXD 1.10.3

  • Fix game-over stopped sometimes using a workaround.
  • Fix dialog cursor drawn at wrong position after successive questions.


Bugfix release 1.4.5, joypad supported in Zelda ROTH

A new bugfix release of Solarus, Solarus Quest Editor and our games was just published!

A bunch of bugs were fixed. Zelda Return of the Hylian can now be played with a joypad, and commands can be customized!

Also, Zelda Mystery of Solarus DX is now available in Italian (beta) thanks to Marco!

Changes in Solarus 1.4.5

  • Fix file name not shown when there is an error in dialogs file (#718).
  • Fix saving special characters in data files (#719).
  • Fix sol.main.load_file() returning a string instead of nil on error (#730).
  • Fix performance issue when sprites have huge frame delays (#723).
  • Fix collisions triggered for removed entities (#710).
  • Fix hero disappearing if lifting animation has less than 5 frames (#682).
  • Fix collisions with diagonal dynamic tiles larger than 8×8 (#486).
  • Fix path finding movement not working with NPCs (#708).
  • Fix stuck on non-traversable dynamic tiles covered by traversables (#769).
  • Fix collision detection of custom entities that do not move.
  • Fix pickables with special movement falling in holes too early.
  • Fix blocking streams not working when the hero’s speed is greater (#488).

Changes in Solarus Quest Editor 1.4.5

  • Add keyboard shortcut (F4) to switch between map view and map script (#75).
  • Map editor: fix entity being moved after closing its dialog (#76).
  • Map editor: start selection when clicking a tile with control/shift (#47).
  • Map editor: synchronize tile patterns selection from map selection (#35).
  • Sprite editor: improve auto-selection after removing a direction (#70).
  • Dialogs/strings editor: add a duplicate button (#72).
  • Dialogs/strings editor: Shows also missing marks on parent nodes (#68).
  • Fix crash on FreeBSD when running the quest (#112).
  • Fix crash on Mac OS X 64 bit.

Changes in Zelda ROTH SE 1.0.7

  • Allow to customize keyboard and joypad controls (#2).
  • Add title screen music (#74).
  • Add left/right arrows in pause menus to indicate possible actions (#60).
  • Show the current floor when it changes.
  • Fix typo in French dialogs in the intro.
  • Fix the blue potion dialog in English (#78).
  • Fix entities falling in holes even when hooked to the hookshot.
  • Fix caps lock state ignored after restarting the game (#20).
  • Fix hero stuck in a cliff near shadow village.
  • Fix hammer stakes pushed too early (#65).
  • Fix enemies active in other regions before taking the first separator (#72).
  • Fix enemy projectiles not removed when taking a separator (#71).
  • Fix saving with life 0 during the game-over sequence (#82).
  • Fix collisions of fire rod and ice rod (#55).
  • Fix torches staying on after game over.
  • Fix weak cavern wall already open in south-east.
  • Make the hammer activate crystals (#75).
  • Improve moving the camera with Ctrl+direction (#34).
  • Remember the last savegame played.
  • Dungeon 5: fix falling hands not properly removed.
  • Dungeon 7: fix a door not correctly aligned.
  • Dungeon 9: fix door closed when leaving without Zelda after boss key (#79).
  • Dungeon 9: fix boss door reopening after killing him (#81).
  • Dungeon 9: update soldier sprites to the original ones.

Changes in ZSDX 1.10.2

  • Add Italian translation (thanks Marco).
  • Make fairies play a sound when restoring life even when already full (#101).
  • Fix dialog cursor drawn at wrong position after successive questions (#105).
  • Dungeon 1: fix unintentional extra difficulty with block alignment (#102).
  • Dungeon 3: fix enemy entering mini-boss room (#107).
  • Dungeon 9: fix spikes sending back to wrong room (#108).
  • Dungeon 10: fix evil tiles door not opening sometimes (#94).
  • End screen: fix freezing the hero (#109).

Changes in ZSXD 1.10.2

  • Make fairies play a sound when restoring life even when already full (#101).


Zelda Return of the Hylian in English

Zelda : Return of the Hylian is now available in English!

The translation was imported from the original game that was already available in English. This is a beta translation, please report us any mistake. Enjoy!

Also, you can now decorate your desktop with a Return of the Hylian wallpaper (1920×1080 px, ask for more sizes):

Wallpaper (1920x1080 px)

Wallpaper (1920×1080 px)

Bugfix release 1.4.3 (engine and editor)

Our new game Zelda Return of the Hylian (Solarus Edition) comes with a new bugfix release of Solarus and Solarus Quest Editor. A lot of issues that you reported on the bug tracker were solved, as well as some problems I detected while working on Return of the Hylian.

Changes in Solarus 1.4.3

  • Fix crash at exit when a surface has a movement with callback (#699).
  • Fix crash when removing a custom entity (#690).
  • Fix crash when a sprite file is missing or has no animation (#700).
  • Fix crash when trying to remove a sprite already removed (#705).
  • Fix crash when a custom entity collision or traversable test errors.
  • Fix crash when changing hero sprites sometimes.
  • Fix crash when sound buffers are full.
  • Fix crash in map:get_ground() with out of bounds coordinates.
  • Fix Lua error message saying “number expected” instead of “string expected”.
  • Fix game:set_command_keyboard/joypad_binding refusing parameters.
  • Fix map scrolling not working if quest size is not a multiple of 5 (#701).
  • Fix camera:move() ignoring separators.
  • Fix entities already destroyed when map:on_finished() is called (#691).
  • Fix entity:bring_to_front()/back() ignoring the order of obstacles.
  • Fix hero stuck on blocks.
  • Fix hero going backwards on ice sometimes.
  • Fix custom_entity:set_can_traverse_ground() giving opposite result (#668).
  • Fix enemy:immobilize() having no effect when already immobilized.
  • Fix dying animation of flying and swimming enemies.
  • Fix the position of the shadow of pickables when they move.
  • Fix pickables not reacting to their ground (#655).
  • Fix a compilation error with Mac OS X.

Changes in Solarus Quest Editor 1.4.3

  • Quest properties editor: fix setting the write directory field empty (#36).
  • Sprite editor: add a button to refresh the source image (#50).
  • Map editor: fix crash when resizing with no entities selected (#51).
  • Map editor: fix entities still visible when adding them on a hidden layer.
  • Map editor: fix entity dialog allowing to set illegal sizes (#23).
  • Map editor: fix changing the direction of a jumper from the dialog (#60).
  • Map editor: fix sprites not always updated when changing direction (#32).
  • Map editor: show a context menu when right-clicking an empty space (#26).
  • Tileset editor: fix usability issues to create and select patterns (#31).
  • Tileset editor: fix moving a pattern to a partially overlapping place (#29).
  • Tileset editor: fix color when moving a pattern to an occupied place (#34).
  • Tileset editor: fix existing selection lost if selecting with ctrl or shift.
  • Text editor: the find button is now the default one in the find dialog (#30).
  • Dialogs editor: fix crash when comparing empty dialogs (#48).
  • Dialogs editor: ensure that the text ends with a newline (#45).
  • Make the numpad enter key work like the return key (#49).
  • Check the Solarus library version at compilation time (#41).


Bugfix release 1.4.2

A bugfix version of Solarus was just released!

This is version 1.4.1 1.4.2. It fixes some important problems including a crash with doors or chest using an equipment item as opening condition, and some problems in the quest editor when resizing maps or when copy-pasting entities. Thanks for your feedback!

And as always, here is the full changelog.

Changes in Solarus 1.4.2

  • Fix crash with doors whose opening condition is an item (#686).
  • Fix the size of custom entities supposed to be optional (#680).
  • Fix the hero’s sprite reset to default ones when changing equipment (#681).
  • Fix animated tiles freezed when running a quest a second time (#679).
  • Fix saving empty files.
  • Print an error message when there is no font in the quest.

Changes in Solarus Quest Editor 1.4.2

  • Fix crash when copy-pasting both tiles and dynamic entities sometimes (#24).
  • Fix crash when creating a map when no tileset exists.
  • Fix the view not updated when resizing a map (#25).
  • Fix maps having having an initial size of zero.
  • Fix inversion between generalized and usual NPCs in the entity dialog.
  • Fix the choice of the layer when copy-pasting entities.
  • Fix a precision issue when adding or moving entities.
  • Fix entities remaining visible when adding them on a hidden layer.
  • Fix the entity dialog allowing special characters in the entity name.
  • Fix missing translation of special destination names.
  • Fix closing a file even if unsaved when renaming it.
  • Fix typos.
  • Sprite editor: fix adding a new direction with the plus button (#27).


Solarus 1.4 released, new quest editor!

A new version of Solarus and Solarus Quest Editor is available: version 1.4!

We have been working hard for the last few months to completely rewrite the quest editor. The new quest editor is now written in C++/Qt. It is faster, nicer and has a lot of new features!


  • Dialogs editor!
  • Strings editor!
  • Quest properties editor!
  • Options dialog!
  • Ability to run the quest from the editor! (experimental)
  • Multi-selection support in the tileset view!
  • Improved quest tree!
  • French translation!

And a lot more, see the full changelog below.


There might be some bugs we missed in the new editor since everything was rewritten from scratch. Please report any issue on the bug tracker.

There are not a lot of changes in the engine (mostly bug fixes). The only real change is that fonts are now a resource like maps, tilesets, musics, sprites, etc. Your scripts may need slight adjustements to follow this change. Nothing dangerous, don’t worry, but this is explained in the migration guide.

We hope you will enjoy the new quest editor! Check our tutorials if you want to learn how to create your own quest. We are also currently updating the website to reflect the new change and give up-to-date information and screenshots of the quest editor.

As always, our games ZSDX and ZSXD were also upgraded to give you up-to-date examples of games.

Here is the full changelog.

Changes in Solarus 1.4

New features:

  • Solarus now compiles with C++11.
  • Solarus can now be used as a library in other projects.
  • Add a command-line flag -win-console=yes to see output on Windows (#550).
  • Add unit tests.
  • fonts.dat no longer exists. Fonts are a resource like others now (#611).
  • Fonts are now in a “fonts” directory instead of “text”.
  • Maps: shop treasures have a new property “font”.

Lua API changes that introduce incompatibilities:

  • Text surfaces: the size must now be set at runtime instead of in fonts.dat.
  • Text surfaces: the default font is now the first one in alphabetical order.

Lua API changes that do not introduce incompatibilities:

  • sol.text_surface.create() now accepts a size parameter (default is 11).
  • Add a function sol.main.get_os().
  • Fix sprite:on_frame_changed() called twice on animation/direction change.

Bug fixes:

  • Add mouse functions and events (experimental, more will come in Solarus 1.4).
  • Add a method sprite:get_animation_set_id() (#552).
  • Add a method sprite:has_animation() (#525).
  • Add a method sprite:get_num_directions().
  • Add a method hero:get_solid_ground_position() (#572).
  • Add a method switch:get_sprite().
  • Allow to customize the sprite and sound of switches (#553).
  • Add a method enemy:get_treasure() (#501).

Changes in Solarus Quest Editor 1.4

New features:

  • Solarus Quest Editor was rewritten and is now in a separate repository.
  • Dialogs editor (by Maxs).
  • Strings editor (by Maxs).
  • Quest properties (quest.dat) editor (by Maxs).
  • French translation.
  • Add an options dialogs to configure various settings (by Maxs).
  • Add a toolbar.
  • The quest can now be run from the editor (experimental).
  • New keyboard shortcuts.
  • Map editor: multiple tiles from the tileset can now be added at once.
  • Map editor: improved the resizing of multiple entities.
  • Map editor: show information about the entity under the cursor.
  • Map editor: multiple tiles can be converted to/from dynamic tiles at once.
  • Map editor: tiles whose pattern is missing are no longer removed.
  • Tileset editor: undo/redo support.
  • Tileset editor: multi-selection support.
  • Tileset editor: showing the grid is now supported.
  • Sprite editor: undo/redo support.
  • Sprite editor: showing the grid is now supported.
  • Sprite lists now show icons representing each sprite.
  • Code editor: add a find text feature.
  • Quest tree: organize the view in columns (file name, description, type).
  • Quest tree: show resources whose file is missing on the filesystem.
  • Quest tree: show files that look like resources but are not declared yet.
  • The quest tree now automatically refreshes after changes in the filesystem.
  • Resource selectors now show a hierarchical view of elements.
  • A file to open can now be passed on the command line.
  • Show an appropriate icon in tabs.
  • Show an asterisk in the tab of files that are changed.
  • The editor has an icon now.
  • Add a menu item to open the official Solarus website.
  • Add a menu item to open Solarus documentation.

Bug fixes:

  • Fix encoding of non-ascii characters in project_db.dat with Windows.
  • Fix Ctrl+S shortcut not always working.
  • Fix entities restored to the front when undoing removing entities.
  • Fix entities restored to the front when undoing changing their layer.
  • Fix separators resizing that could allow illegal sizes.
  • Fix jumpers size reset after undoing changing their direction.
  • Fix walls being initially traversable by everything when they are created.


These improvements involve changes that introduce a slight incompatibility in the  Lua API regarding fonts. Make a backup, and then see the migration guide on the wiki to know how to upgrade.

Changes in Zelda Mystery of Solarus DX 1.10

Bug fixes:

  • Fix a minor tile issue in dungeon 8 entrance.
  • Fix the feather dialog that could be skipped in some languages.
  • Fix empty line in English dialog describing a bottle with water.
  • Fix empty buttons in savegame menu when changing language (#90).
  • Fix translation errors of two items in German (#98).
  • Dungeon 5: fix a missing door on the minimap (#99).
  • Dungeon 9: don’t allow to skip the boss hint dialog (#93).

Changes in Zelda Mystery of Solarus XD 1.10

Bug fixes:

  • Fix fairy only restoring 1/4 heart in cursed cave (#40).