Official Twitter account

Solarus has now an official Twitter account. It is no more Christopho’s one, even if both are obviously tightly linked. You can now follow us if you still don’t.

follow_on_twitter

And remember that we also have an official Facebook account, which by now will just forward the twits from its Twitter counterpart.

follow_on_facebook

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

Enjoy!

news_feature

New game release : Zelda Return of the Hylian (Solarus Edition)

We are proud to announce the release of a new game ! It is called Return of the Hylian – Solarus Edition. However, it is not really a new game, since it is a remake of another fangame originally made by Vincent Jouillat from 2009. This time, the game has been completely remade with Solarus, thus featuring many improvements thanks to the engine.roth_se_logo

If you’ve never played the original version, you will notice that the game’s style and flow is rather different than our original creations : no tangled labyrinths, no hair-pulling-out enigmas, and less sinous dungeons rooms. It is a more accessible and relatively short game, but remember that Return of the Hylian is actually the first iteration of a quadrology of excellent games.

This first version is not perfect, and it is possible that you still encounter some bugs. Don’t hesitate to notify us, and it will be corrected as soon as possible.

What is missing in this 1.0.0 version, and will be added in the next weeks :

  • Configurable controls
  • English translation (for the moment, the only available language is French, but English is coming soon)
  • More improvements everywhere

You can find more information and download the game on its dedicated page.

Have fun !

link_roth_encrage_2

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

Enjoy!

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!

tileset-editor

  • 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.

dialog-editor

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.

Incompatibilities

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

Solarus 1.3 is out, now with a sprite editor!

UPDATE: a bugfix version 1.3.1 was just released. It fixes an error when opening a newly created sprite, and improves the sorting of resources with numbers in their id in the quest tree.

A new release of Solarus is available: version 1.3!

The main improvement of Solarus 1.3 is the graphical sprite editor integrated in Solarus Quest Editor. You will no longer have to edit sprite sheet data files by hand!

Sprite Editor

Screenshot of Solarus Quest Editor 1.3, modifying the sprite of an enemy in ZSDX.

The sprite editor was primarily developed by Maxs. You can create and edit sprite sheets. A tree shows the hierarchy of animations and direction of your sprite. And below the tree, you can edit the animation and direction that are selected in the tree.

The main changes of this release are in the quest editor. Another important improvement is that tile patterns can now be identified by a string instead of auto-generated integers. This allows to more easily maintain different similar tilesets.

There are also a few new features in the engine and in the Lua API, like more customizable switches, but nothing that breaks compatibility of your scripts.

As always, our games ZSDX and ZSXD were also upgraded to give you up-to-date examples of games. In ZSDX, there is also a new world minimap made by Neovyse.

Here is the full changelog.

Changes in Solarus 1.3

Lua API changes that do not introduce incompatibilities:

  • 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).

Bug fixes:

  • Fix the write directory not having priority over the data dir since 1.1.
  • Fix pickable/destructible:get_treasure() returning wrong types.
  • Fix custom entity collision detection when the other is not moving (#551).
  • Allow to call map methods even when the map is not running.

Changes in Solarus Quest Editor 1.3

New features:

  • Add a sprite editor (#135). By Maxs.
  • Add a zoom level of 400%. By Maxs.
  • Add keyboard/mouse zoom features to sprites and tilesets. By Maxs.
  • Add Lua syntax coloring (#470). By Maxs.
  • Add a close button on tabs (#439). By Maxs.
  • Rework the quest tree to show the file hierarchy and Lua scripts. By Maxs.
  • Add specific icons for each resource type in the quest tree.
  • Move the entity checkboxes to the map view settings panel. By Maxs.
  • Allow to change the id of a tile pattern in the tileset editor (#559).
  • Don’t initially maximize the editor window.

Bug fixes:

  • Fix converting quests to several versions in one go.

Incompatibilities

These improvements involve changes that introduce slight incompatibilities in the format of data files, but no incompatibility in the Lua API. 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.9

New features:

  • New world minimap. By Neovyse.
  • Make cmake paths more modifiable. By hasufell.

Bug fixes:

  • Fix direction of vertical movement on joypad in menus (#85). By xethm55.
  • Clarify license of some files.

Changes in Zelda Mystery of Solarus XD 1.9

New features:

  • Make cmake paths more modifiable. By hasufell.

Bug fixes:

  • Fix direction of vertical movement on joypad in menus.
  • Clarify the license of some files.

English tutorial!

More and more people are interested in creating games with Solarus. However, there was a lack of tutorials to explain how to do it.

There is a video tutorial in French, and a written tutorial also in French, but so far there was nothing in English. You guys were expecting it, here it is: the official English video tutorial!

I uploaded chapter 1 today, and more chapters will come in the next few days. The French tutorial has 55 episodes for now (and is not over!) so there is a lot of work! To get the updates, you can follow me on Twitter (@ChristophoZS) or subscribe to the YouTube channel.

We hope that you will enjoy these videos and more importantly, that you will be able to create lots of great games now :)

Bugfix release 1.2.1

A bugfix release named Solarus 1.2.1 is available!

It addresses a few issues with recent features that were not working correctly, like custom entities, and a problem of corrupted image when creating a new quest with the editor.

Changes in Solarus 1.2.1

  • Fix entity:is_in_same_region() giving wrong results (#500).
  • Fix custom_entity:set_can_traverse() giving opposite results.
  • Fix custom_entity:on_interaction() not always called.
  • Fix custom_entity sprite collision issues with some entities (#536).
  • Fix a crash in enemy:restart() when the enemy is dying (#558).
  • Fix hero:set_tunic_sprite_id() resetting the direction to right (#511).
  • Fix timer:get_remaining_time() always returning 0 (#503).
  • Fix declaring global variables from a map script (#507).
  • Fix the hero sometimes moving while no keys are pressed (#513). By xethm55.
  • Fix on_joypad events not always working (#519). By xethm55.
  • Add an error when a hero sprite animation is missing (#485). By Nate-Devv.

Changes in Solarus Quest Editor 1.2.1

  • Fix corrupted image in quest created by Quest > New quest (#548).
  • Fix tiles created on invisible layer (#508). By Maxs1789.
  • Fix crash when an NPC sprite does not have 4 directions (#510). By Maxs1789.

Custom entities

If you are developing a quest with Solarus, you will definitely be interested in lots of new features of Solarus 1.2. But the most important one is probably custom entities!

Assume that you want to block the entrance of a dungeon with a big rock. To create your big rock on your map, you have to choose the type of map entity that best fits your needs. But each type of entity (non-playing character, enemy, door, destructible, dynamic tile, etc.) implements some built-in behavior that you don’t want for this particular need. Each type of entity corresponds to a common use case that is not necessarily yours in this situation. Sometimes, you can hijack an entity to avoid its built-in behavior: for example, you can implement the rock as a non-playing character that does not talk. Or you can make an enemy that does not hurt the hero. This is weird at best.

Another example is creating weapons that are not included in the engine. The engine implements a bow with arrows, the boomerang and the hookshot, similarly to Zelda: A Link to the Past. But how to create the hammer? More difficult: how to create the stakes that can be pushed using the hammer? How to shoot ice when using the ice rod?

Custom entities are the answer to these challenges. Custom entities are a new type of map entity introduced in Solarus 1.2.

Their main feature is to have no special feature! Indeed, they are fully scripted. Your script can define the size, the sprite (if any), the movement (if any) and the exact obstacle and collision rules. You can set callbacks to be executed when a collision is detected with another entity. In short, they are very powerful.

Lots of other built-in entity types could even be reimplemented as custom entities. Yet, we keep them because they are commonly used in games.

Let’s see how we could implement our big rock to block the entrance of a dungeon. From the editor, create on your map a custom entity called “rock_entrance”, set its size, for example 32×32, and its sprite to “entities/rock_entrance”. Indeed, common properties like the size and the sprite can be set from the editor. This is also possible from the Lua script of your map, but using the editor to create entities is easier. Then, edit the map script to define the other properties:

1
2
3
4
5
6
7
8
9
10
rock_entrance:set_traversable_by(false)  -- Don't allow other entities to traverse the rock.

-- Destroy the rock if there is an explosion.
rock_entrance:add_collision_test("overlapping", function(rock_entrance, other)
  if other:get_type() == "explosion" then
    -- The rock explodes.
    sol.audio.play_sound("secret")
    rock_entrance:remove()
  end
end)

This is a basic example of custom entity. To implement the hammer and hammer stakes, you will need two custom entities: the hammer itself (created dynamically when the player uses the item) and the hammer stakes. The hammer will test collisions with enemies and with hammer stakes. Hammer stakes will become traversable (and their sprite animation will change) when they collide with the hammer.

An interesting fact is that there will a lot of hammer stakes in your quest, and they will appear on different maps. In other words, you need a reusable custom entity. To solve this problem, we provide models: each custom entity can have an optional model. A model the name of a Lua script that will be applied to all custom entities that refer to it. Actually, this works exactly like the breed of enemies. You can have several enemies ruled by the same enemy script. Similarly, if you need multiple instances of identical custom entities, you can use a model.