Quantcast
Channel: Solarus
Viewing all 60 articles
Browse latest View live

Solarus Lua API reference

$
0
0

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.


Download pages updated

$
0
0

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.

Separating projects

$
0
0

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:

 

Solarus 1.0.0 released

$
0
0

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.

Changes

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

The German release!

$
0
0

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.1 released

$
0
0

 

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

Enjoy!

A new design to celebrate Solarus 1.0.x

$
0
0

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.

Changes

  • 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.2 released, ZSDX and ZSXD upgraded to the new engine

$
0
0

An update of Solarus 1.0, Zelda Mystery of Solarus DX and Zelda Mystery of Solarus XD is available!

This update fixes a bunch of bugs of previous versions. It is recommended to upgrade.

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

And our games Zelda Mystery of Solarus DX and Zelda Mystery of Solarus XD are now fully working with Solarus 1.0. They are both released in a new version 1.6. There is also a new title screen from Neovyse (thanks!) and the English translation of both games has been greatly improved (thanks ibara!).

We have worked hard to upgrade both games to the new Lua API (thanks for your help pdewacht!). This does not change much things for the players, but if you are developping a quest with Solarus, you might be interested in reusing and modifying some of our scripts, like the HUD, the pause menu, the title screen or some enemies. The Lua scripting API of Solarus 1.0 allows to customize all of this!

Changes in Solarus 1.0.2

  • Fix a crash when a treasure callback changes the hero’s state (#224).
  • Fix a crash when a victory callback changes the hero’s state.
  • Fix a crash due to invalid sprite frame when animation is changed (#26).
  • Fix an assertion error with FollowMovement of pickables.
  • Fix the fullscreen mode not working on Mac OS X 10.7+ (#213, #220).
  • Fix pickable treasures that could be obtained twice sometimes.
  • Fix fade-in/fade-out effects on sprites that did not work (#221).
  • Fix sol.audio.play_music() that failed with “none” or “same” (#201).
  • Fix item:set_sound_when_brandish() that did not work.
  • Fix diagonal movement that could bypass sensors since Solarus 1.0.1.
  • Fix circle movement not working after entity:set_enabled(true).
  • Fix detection of movement finished for NPCs.
  • Fix memory issues with menus (#210).
  • Fix handling of nil parameter in boolean setters (#225).
  • Fix hangling the default language.
  • Correctly suspend timers when set_suspended_with_map is called.
  • When a sprite is suspended, suspend its transitions (#226).
  • Don’t die if a music or a sound cannot be found.
  • Don’t die if an image cannot be found.
  • Don’t die if running a savegame without starting location specified.
  • Don’t die if a script refers to a non-existing equipment item.
  • Don’t die if the self parameter is missing when calling a method (#219).
  • Fix dangling pointers after removing some kind of entities.

Changes in Solarus Quest Editor 1.0.2

  • Allow to create map entities from the quest tree (#208).
  • Fix a typo in the bomb flower sprite (#214).
  • Fix a possible NullPointerException when opening an invalid map.

Documentation changes

  • Add the syntax specification of maps and tilesets.

Changes in Zelda Mystery of Solarus DX 1.6

  • Improve the English translation.
  • New title screen from Neovyse (#45).
  • Fix a typo in French dialogs.
  • Fix a door bug that could get the hero stuck in empty rooms.
  • Fix saving the state of Billy’s door.
  • Dungeon 1: keep the final door open when coming back in the boss room.
  • Dungeon 7 2F: save the nort-west torches.
  • Savegames menu: the joypad was not working to delete a savegame.
  • Dungeon 10 B1: fix a cauldron the hero could walk on (#20).
  • Rupee house: don’t let the player to get the piece of heart with the sword.
  • Dungeon 6 2F: move crystal blocks to avoid a possible breach.
  • Outside world B3: fix a minor tile error (#12).
  • Dungeon 8 B1: fix a minor tile error (#2).
  • Dungeon 8 B3: fix a minor tile error.

Changes in Zelda Mystery of Solarus XD 1.6

  • Improve the English translation.
  • Fix the hero stuck after jumping on a block in dungeon 2.
  • Fix all missing empty lines in dialogs.
  • Add the Solarus engine logo at startup.

Solarus 1.0.3 released, no more blocked blocks

$
0
0

Due to Murphy’s law, I introduced an important bug at the very end of my tests, just before releasing Solarus 1.0.2. This bug made you fail to push blocks completely (the last pixel of the movement was not done). So here is a new patch release (1.0.3) that just fixes this bug. You really want to upgrade.

There are no changes in our games (ZSDX and ZSXD) but they get a new version number (1.6.1) because on some systems, the engine is included with the game.

Changes in Solarus 1.0.3

  • Fix blocks not completely moved since 1.0.2.

Sorry about that and thanks for your feedback.

(I really should make unit tests one day!)

Solarus 1.0.4 released, fixed crashes in ZSXD

$
0
0

And… Solarus 1.0.4 is out!

Two crashes in ZSXD remained despite all my tests, and the customization screen of joypad commands was also broken.

Changes in Solarus 1.0.4

  • Don’t die if a script tries so show a missing string (#237).
  • Don’t die if a treasure has a variant unexistent in the item sprite.
  • Fix customization of joypad commands.

Changes in Zelda Mystery of Solarus DX 1.6.2

  •  Fix two line errors in English dialogs.

Changes in Zelda Mystery of Solarus XD 1.6.2

  • Fix a crash due to a missing text in the French options pause menu.
  • Fix a crash due to an invalid treasure in a pot of crazy house 1F.
  • Fix a typo in the French inventory pause menu.

Please continue to report any bugs. I expect more bugs to be found because this upgrade of both quest to Solarus 1.0 is really a heavy change for them.

Controlling the quest size to obtain maximum portability

$
0
0

Many new features are planned for Solarus 1.1. I will talk about the important ones whenever I implement them.

The one I have been working on for the last few days is an important improvement for quest makers, for players and also for people who compile the engine on various systems.

In Solarus 1.0, the size of the visible space that appears on the screen (we call this the “quest size”) is a constant defined at compile time: by default, 320×240.  This “quest size” is how much content of the map you can see when playing. It should not be confused with the video mode of the screen: the video mode just defines how this 320×240 quest space is rendered on the screen: directly in a window, stretched or scaled to 640×480, in fullscreen or not, etc.

The main problem of this approach is that everything is decided at compilation time. As the creator of a quest, you have no control over the screen size and your game is just supposed to adapt itself with any size. Which is just not possible. You don’t want a game area of 1000×1000 because the player could see way too much content of your maps! Still, you may want to allow different sizes (like 400×240) so that the game fills the entire space of wide screens, using square pixels and without vertical black bars.

To solve the problem, in Solarus 1.1, you will be able to set the range of sizes that your quest allows.

If you are okay to allow people with a wide screen to see more content that others, you can set a range of sizes in your quest properties file (quest.dat):

quest{
 solarus_version = "1.1",
 write_dir = "my_quest",
 title_bar = "My incredible quest",
 normal_quest_size = "320x240", -- Works on most configurations.
 min_quest_size = "320x200",    -- Might make fullscreen compatible with more systems.
 max_quest_size = "400x240",    -- Suited for wide screens, including mobile devices like Pandora.
}

Of course, your maps and your menus will have to adapt correctly to any value inside this range. So it requires more work, but your game will be more portable. There is a new Lua function sol.video.get_quest_size() to help you with that.

At runtime, the user can choose his quest size with a command-line option. A default quest size can also be set at compilation time. If the size requested is not in the range allowed by your quest, then normal_quest_size is used instead.

Then, Solarus does the complicated work for you :) . It automatically detects the appropriate resolutions to render this size at best for each video mode (fullscreen, with scaling, etc.). So you don’t have to worry about that part. Besides, the Lua API of video modes does not change at all.

If you prefer that all people play your quest with the exact same visible area, set all three sizes to the same value, or just define normal_quest_size (by default, min and max take the normal value):

quest{
 solarus_version = "1.1",
 write_dir = "my_quest",
 title_bar = "My incredible quest",
 normal_quest_size = "320x240", -- Only one allowed quest size.
}

Maps have now a default destination entity

$
0
0

Here is a small improvement that will ease the life of quest creators in Solarus 1.1, the future version of the engine.

You will be able to set a destination entity as the default one of the map. It means that whenever a teletransporter (or some Lua code) sends the hero to a map without specifying a destination entity, the hero will arrive on the default destination. If no destination was explicitly set as the default one, then the first one of the map is the default one.

Many maps are very small in a game (like a house in a village) and contain only one destination. In these cases, you no longer have to give a name to the destination and to link a teletransporter to this destination name. In the map of the village, you can make a teletransporter that goes to that map and leave its destination parameter unspecified.

When you create a new savegame, the starting map and the starting destination on that map also become optional in Solarus 1.1. If you don’t call game:set_starting_location(), the game starts on the first map declared in the resource list and with the default destination entity of that map.

This change is not the most important new feature of Solarus 1.1, but it will reduce the risk of errors and improve flexibility!

New format of project_db.dat

$
0
0

Since Solarus 0.9.0, the format of most data files is being changed to be more readable, easier to parse and more homogeneous.

In Solarus 1.0, good progress has been made in this direction, especially with the new format of maps. Three formats of data files remain to be changed: the strings.dat language file, the sprite sheet files and the quest resource list file. I plan to change them all in Solarus 1.1.

And the work is now finished for the quest resource list file (project_db.dat). This file defines the list of resources (maps, tilesets, sprites, musics, sounds, enemies…) and allows the quest editor to show them and edit them. The new format looks like this:

map{     id = "outside",      description = "Outside World" }
map{     id = "hero_house",   description = "House of the hero" }
map{     id = "shop",         description = "Shop" }
map{     id = "dungeon_1_1f", description = "Dungeon 1 - First floor" }
map{     id = "dungeon_1_2f", description = "Dungeon 1 - Second floor" }

tileset{ id = "overworld",    description = "Overworld" }
tileset{ id = "house",        description = "House" }
tileset{ id = "dungeon",      description = "Dungeon" }

sound{   id = "door_closed",  description = "Door closing" }
sound{   id = "door_open",    description = "Door opening" }
sound{   id = "enemy_hurt",   description = "Enemy hurt" }
sound{   id = "jump",         description = "Jumping" }
sound{   id = "treasure",     description = "Treasure" }

item{    id = "sword",        description = "Sword" }
item{    id = "bow",          description = "Bow" }
item{    id = "arrow",        description = "Arrows (x1 / x5 / x10)" }

enemy{   id = "soldier",      description = "Soldier" }
enemy{   id = "dragon",       description = "Dragon" }

Note that the quest editor fully supports the modification of this file since Solarus 1.0.2. More information about this quest resource list file is available on the documentation pages.

More importantly, I added to the quest editor a system to upgrade automatically your data files when their format changes. Whenever a new version Solarus is released, if the format of data files has changed, the quest editor will upgrade them for you.

Customizable dialogs!

$
0
0

This is a very important new feature of Solarus 1.1. The dialog box system is now fully scriptable using the Lua API! It means that you can now make any feature you want to your dialogs, like changing the font, the color, the text alignment, adding images or sprites, making questions with multiple possible choices…

The syntax of the dialog files does not change, expect that any custom property is allowed in a dialog. Actually, only the dialog id and the text are mandatory. Everything else (the icon, whether there is a question, whether the dialog can be skipped…) is now seen as additional, custom properties of your quest.

If you don’t make a scripted dialog box in Lua, the engine shows a minimal dialog box without decoration. But it is recommended to make your own one!

Here is an example of a small map script with a non-playing character that shows a simple dialog when the hero talks to him:

local map = ...

function some_npc:on_interaction()
  -- Remember that you specify a dialog id, not directly the text to show.
  -- The text is defined in the dialogs.dat file of the current language.
  map:get_game():start_dialog("welcome_to_my_house")
end

Here is a more complex example, with an NPC that asks a question. This example assumes that your dialog box system can ask questions to the player, and returns the answer as a boolean value.

local map = ...
local game = map:get_game()

function another_npc:on_interaction()
  game:start_dialog("give_me_100_rupees_please", function(answer)
    if answer then
      if game:get_money() >= 100 then
        game:remove_money(100)
        game:start_dialog("thanks")
      else
        sol.audio.play_sound("wrong")
        game:start_dialog("not_enough_money")
      end
    else
      game:start_dialog("not_happy")
    end
  end)
end

The new dialog API is very flexible. When you show a dialog, you can pass a parameter to your custom dialog box system (this feature is not used in this example), and symmetrically, your custom dialog box system can return a result (like the answer selected by the player in this example).

Fore more details, see the documentation of game:start_dialog() in the Solarus Lua API.

New entity type: separators

$
0
0

I have finished another new feature for Solarus 1.1: you can now separate a map in different regions. When you are in a region, you cannot see adjacent regions. And when you touch the limit of the region, the camera scrolls to the region on the other side.

You can use this feature to visually separate rooms that are in the same map. In ZSDX, when you are in a room of a dungeon, you can also see parts of the adjacent rooms. If you want to only show the current map (like in Zelda ALTTP), it is possible now. With the quest editor, you create a separator, which is a vertical or horizontal bar that you place on your map.

Separators implictly define regions on your map. Thus, you can also use this feature to make a minimap that shows the visited rooms of the dungeon.


Solarus Forums

$
0
0

Since the Solarus 1.0 release, several people suggested that we create a forum.

Here it is! http://forum.solarus-games.org/

We hope that the forum will be very useful for people who use the Solarus engine. You will be able to talk about developing your own games, get help, share knowledge, scripts and game resources. It will also be a place to present your projects to the community. We are open to any suggestion!

Ice, low walls and other improvements about grounds

$
0
0

Two new types of grounds (or terrains) are now implemented in Solarus 1.1, as well as improvements in the detection of the ground.

  • Ice ground: tiles that make the hero slide, with some sort of inertia.
  • Low walls: obstacles that can only be traversed by projectiles like thrown items, the boomerang, arrows and flying enemies.

I also improved the code that detects the kind of ground of a point. Before, it only worked with the hero, and did not always correctly take into account dynamic entities that may change the ground, like dynamic tiles. (And the code was too complex!)

Now, the ground is correctly detected, including when it gets changed by dynamic tiles (even with moving dynamic tiles). Last but not least, this new detection algorithm works for any coordinates (not only the hero). Therefore, enemies and thrown items can now fall into holes and drown into water or lava!

These improvements and the two new kinds of tiles were demanded for a long time. I hope you will enjoy them!

Solarus Wiki

$
0
0

Christopho began to make video tutorials about how to make a game with Solarus. However, these tutorials are, for the moment, only in French. To help the community to get the basis of Solarus, a Wiki where everyone can contribute has been set up. We use Dokuwiki, a free and open-source file-based wiki engine.

Currently there is almost nothing on the Wiki, but we are working on it, and we hope you too !

flattr this!

Customizable game-over menu!

$
0
0

The last built-in menu is not built-in anymore in Solarus 1.1!

Now, when the life of the player reaches zero, an event game:on_game_over_started() is called. The game is suspended and you can show whatever you want. You can make a dialog that lets the player chose between “Continue” or “Save and quit”. Or you can make a more elaborate game-over menu like in our games, where a fairy saves the player if he has one in a bottle.

And if you don’t define the event, game:on_game_over_started(), then the engine just restarts the game.

The Solarus 1.1 roadmap is close to its end. 50 issues were solved and 1 is still open. Now I am testing both games (ZSDX and ZSXD) to check everything because there was some refactoring done to upgrade to Solarus 1.1, and some C++ code was replaced by Lua code (most importantly, the dialog box and the game-over menu).

flattr this!

Solarus 1.1 released!

$
0
0

The new version of Solarus is available now!

The main change of Solarus 1.1 is that there are no more hardcoded menus in the engine: the dialog box and the game-over menu are now fully scripted in your quest with the Lua API. There are a lot of other new features and improvements, as well as bug fixes, so it is recommended to upgrade.

Our games ZSDX and ZSXD were also upgraded to give you up-to-date examples of games. And ZSDX is now available in simplified Chinese and traditional Chinese (beta). Thanks Sundae and Rypervenche! Note that a Spanish version of ZSXD is also in progress (thanks Xexio!).

Solarus 1.1 also improves portability and performance. This allows us to release the Android and OpenPandora versions of our games. They will be available in the next few days!

Here is the full changelog. 80 github issues were resolved for Solarus 1.1 and 20 more for ZSDX and ZSXD 1.7 so this is a huge list!

Changes in Solarus 1.1

New features:

  • Add a very short sample quest with free graphics and musics (#232, #318).
  • Allow scripted dialog boxes (#184).
  • Allow a scripted game-over menu (#261).
  • Replace the old built-in dialog box by a very minimal one.
  • Remove the old built-in game-over menu.
  • Remove the old built-in dark rooms displaying (#205).
  • New entity: separators to visually separate some regions in a map (#177).
  • New type of ground: ice (#182).
  • New type of ground: low walls (#117).
  • Blocks and thrown items can now fall into holes, lava and water (#191).
  • Kill enemies that fall into holes, lava and water (#190).
  • Allow quest makers and users to set the size of the playing area.
  • Allow maps to have a default destination entity (#231).
  • A game can now start without specifying an initial map and destination.
  • Stairs inside a single floor can now go from any layer to a next one (#178).
  • The channel volume of  .it musics can now be changed dynamically (#250).
  • The tempo of  .it musics can now be changed dynamically (#250).
  • Allow Lua to manipulate files directly (#267).
  • New syntax of sprites, easier to read and parse (#168).
  • New syntax of project_db.dat, easier to read and parse (#169).
  • languages.dat no longer exists. Languages are in project_db.dat now (#265).
  • The quest archive can now also be named data.solarus.zip (#293).

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

  • map:is_dialog_enabled() is replaced by game:is_dialog_enabled().
  • map:start_dialog() is replaced by game:start_dialog().
  • Remove map:draw_dialog_box(), no longer needed.
  • Remove map:set_dialog_style(): replace it in your own dialog box system.
  • Remove map:set_dialog_position(): replace it in your own dialog box system.
  • Remove map:set_dialog_variable(): use the info param of game:start_dialog().
  • Make map:get_entities() returns an iterator instead of an array (#249).
  • Replace map:set_pause_enabled() by game:set_pause_allowed().
  • Make the enemy:create_enemy() more like map:create_enemy() (#215).
  • Remove sol.language.get_default_language(), useless and misleading (#265).
  • Remove sol.main.is_debug_enabled().
  • Remove map:get_light() and map:set_light() (#205).
  • In game:get/set_ability(), ability “get_back_from_death” no longer exists.
  • Empty chests no longer show a dialog if there is no on:empty() event (#274).

Lua API changes that do not introduce incompatibilities:

  • game:get/set_starting_location(): map and destination can now be nil.
  • hero:teleport(): make destination optional (maps now have a default one).
  • map:create_teletransporter(): make destination optional.
  • Add a function sol.video.get_quest_size().
  • Make map:get_camera_position() also return the size of the visible area.
  • Add a method entity:is_in_same_region(entity).
  • Add a method entity:get_center_position().
  • Add methods entity:get_direction4_to(), entity:get_direction8_to() (#150).
  • Add a method game:get_hero().
  • Add methods hero:get/set_walking_speed() (#206).
  • Add hero:get_state() and hero:on_state_changed() (#207).
  • Add events separator:on_activating() and separator:on_activated() (#272).
  • Add methods enemy:is/set_traversable() (#147).
  • Add a method enemy:immobilize() (#160).
  • Add on_position_changed() to all entities, not only enemies (#298).
  • Add on_obstacle_reached() to all entities, not only enemies (#298).
  • Add on_movement_changed() to all entities, not only enemies (#298).
  • Add on_movement_finished() to all entities, not only enemies/NPCs (#298).
  • target_movement:set_target(entity) now accepts an x,y offset (#154).
  • Add a method game:is_pause_allowed().
  • Add a method map:get_ground() (#141).
  • Add a method map:get_music() (#306).
  • Add an optional parameter on_top to sol.menu.start.
  • Add sprite:on_animation_changed() and sprite:on_direction_changed() (#153).
  • Add a function sol.input.is_key_pressed().
  • Add a function sol.input.is_joypad_button_pressed().
  • Add a function sol.input.get_joypad_axis_state().
  • Add a function sol.input.get_joypad_hat_direction().
  • Add functions sol.input.is/set_joypad_enabled() (#175).
  • Add a function sol.audio.get_music() (#146).
  • Add a function sol.audio.get_music_format().
  • Add a function sol.audio.get_music_num_channels().
  • Add functions sol.audio.get/set_music_channel_volume() for .it files (#250).
  • Add functions sol.audio.get/set_music_tempo() for .it files (#250).
  • Return nil if the string is not found in sol.language.get_string().
  • sol.language.get_dialog() is now implemented.
  • Add a function game:stop_dialog(status) to close the scripted dialog box.
  • Add an event game:on_dialog_started(dialog, info).
  • Add an event game:on_dialog_finished(dialog).
  • Add functions game:start_game_over() and game:stop_game_over (#261).
  • Add events game:on_game_over_started(), game:on_game_over_finished (#261).
  • Add sol.file functions: open(), exists(), remove(), mkdir() (#267).

Bug fixes:

  • Fix map menus not receiving on_command_pressed/released() events.
  • Fix camera callbacks never called when already on the target (#308).
  • Fix a crash when adding a new menu during a menu:on_finished() event.
  • Fix a crash when calling hero:start_victory() without sword.
  • Fix an error when loading sounds (#236). Sounds were working anyway.
  • Fix a possible memory error when playing sounds.
  • Fix blocks that continue to follow the hero after picking a treasure (#284).
  • Fix on_obtained() that was not called for non-brandished treasures (#295).
  • Jumpers can no longer be activated the opposite way when in water.
  • Jumpers are now activated after a slight delay (#253).
  • Sensors no longer automatically reset the hero’s movement (#292).
  • Correctly detect the ground below the hero or any point.
  • Don’t die if there is a syntax error in dialogs.dat.
  • Show a better error message if trying to play a Solarus 0.9 quest (#260).
  • Remove built-in debug keys. This can be done from Lua now.
  • Remove the preprocessor constant SOLARUS_DEBUG_KEYS.
  • Call on_draw() before drawing menus.
  • Fix .it musics looping when they should not.
  • Log all errors in error.txt (#287).

Changes in Solarus Quest Editor 1.1

  • Add a GUI to automatically upgrade quest files to the latest format (#247).
  • Remove the initial prompt dialog to open a quest (#264).
  • Replace non-free images by new icons (#245).
  • Add tooltips to the add entity toolbar.
  • Simplify the add entity toolbar by showing only one icon per entity type.
  • Survive when images cannot be found (#256).
  • Create more content when creating a new quest (#258, #279).
  • Improve error messages.
  • Fix a crash when creating a destructible without tileset selected (#283).
  • Fix the sprite field disabled in the NPC properties dialog (#303).

Incompatibilities

These improvements involve changes that introduce some incompatibilities in both the format of data files (sprites, project_db.dat, languages.dat) and the Lua API (the dialog box and the game-over menu are scripted now!). 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.7

New features:

  • Add simplified Chinese and traditional Chinese translations (beta).
  • Replace .spc musics by .it ones (much faster) (#17).
  • Add an animated Solarus logo from Maxs (#57).

Bug fixes:

  • Fix savegames created with Solarus 0.9 but that were never run.
  • Fix a slight alignment issue with the hurt animation of the hero.
  • Fix a small breach in dungeon 9 4F in the timed chest room (#4).
  • Fix easy infinite rupees in the waterfall cave (#13).
  • Fix low health beeping playing at final screen (#56).
  • Add a teletransporter from south lake to the cave under the waterfall (#10).
  • Dungeon 7 boss: the player could get stuck in the boss room (#6).
  • Dungeon 7 boss: change the misleading hurt sound of the tail (#7).
  • Dungeon 7: help the player be aligned correctly to obtain the boss key (#8).
  • Dungeon 3 2F: fix two switches that disappeared when activating them.
  • Dungeon 2 boss: fix tile disappearing issue (#14).
  • Dungeon 9 2F: fix a minor graphical issue.

Changes in Zelda Mystery of Solarus XD 1.7

New features:

  • Replace .spc musics by .it musics (faster) and remove unused ones.
  • Add an animated Solarus logo from Maxs.

Bug fixes:

  • Fix savegames created with Solarus 0.9 but that were never run.
  • Fix a slight alignment issue with the hurt animation of the hero.
  • Dungeon 1 3F: fix “attempt to compare number with nil” in counter 36 (#3).
  • Dungeon 2 1F: fix an enemy not counting in WFT room.

flattr this!

Viewing all 60 articles
Browse latest View live